brcm2708: update 3.10 patches with raspberrypi/rpi-3.10.y of 27 Apr. 2014
[openwrt/staging/dedeckeh.git] / target / linux / brcm2708 / patches-3.10 / 0097-wifi-Update-to-newer-rtl8192cu-driver-release.patch
1 From 5aec58e64fb0ba4e582150d0506e9dddea6efbe3 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/196] 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 diff --git a/drivers/net/wireless/rtl8192cu/Kconfig b/drivers/net/wireless/rtl8192cu/Kconfig
209 index ef46361..bee5ed6 100644
210 --- a/drivers/net/wireless/rtl8192cu/Kconfig
211 +++ b/drivers/net/wireless/rtl8192cu/Kconfig
212 @@ -1,8 +1,6 @@
213 config RTL8192CU
214 tristate "Realtek 8192C USB WiFi"
215 depends on USB
216 - select WIRELESS_EXT
217 - select WEXT_PRIV
218 ---help---
219 - Enable wireless network adapters based on Realtek RTL8192C chipset family, such as EDUP nano series
220 + Help message of RTL8192CU
221
222 diff --git a/drivers/net/wireless/rtl8192cu/Makefile b/drivers/net/wireless/rtl8192cu/Makefile
223 index b52cace..c399011 100644
224 --- a/drivers/net/wireless/rtl8192cu/Makefile
225 +++ b/drivers/net/wireless/rtl8192cu/Makefile
226 @@ -1,15 +1,15 @@
227 EXTRA_CFLAGS += $(USER_EXTRA_CFLAGS)
228 EXTRA_CFLAGS += -O1
229 #EXTRA_CFLAGS += -O3
230 -#EXTRA_CFLAGS += -Wall
231 -#EXTRA_CFLAGS += -Wextra
232 +#EXTRA_CFLAGS += -Wall
233 +#EXTRA_CFLAGS += -Wextra
234 #EXTRA_CFLAGS += -Werror
235 #EXTRA_CFLAGS += -pedantic
236 -#EXTRA_CFLAGS += -Wshadow -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes
237 +#EXTRA_CFLAGS += -Wshadow -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes
238
239 -EXTRA_CFLAGS += -Wno-unused-variable
240 -EXTRA_CFLAGS += -Wno-unused-value
241 -EXTRA_CFLAGS += -Wno-unused-label
242 +EXTRA_CFLAGS += -Wno-unused-variable
243 +EXTRA_CFLAGS += -Wno-unused-value
244 +EXTRA_CFLAGS += -Wno-unused-label
245 EXTRA_CFLAGS += -Wno-unused-parameter
246 EXTRA_CFLAGS += -Wno-unused-function
247 EXTRA_CFLAGS += -Wno-unused
248 @@ -22,23 +22,26 @@ CONFIG_AUTOCFG_CP = n
249
250 CONFIG_RTL8192C = y
251 CONFIG_RTL8192D = n
252 +CONFIG_RTL8723A = n
253
254 CONFIG_USB_HCI = y
255 CONFIG_PCI_HCI = n
256 CONFIG_SDIO_HCI = n
257
258 CONFIG_MP_INCLUDED = n
259 -CONFIG_POWER_SAVING = y
260 -CONFIG_USB_AUTOSUSPEND = n
261 -CONFIG_HW_PWRP_DETECTION = n
262 -CONFIG_WIFI_TEST = n
263 -CONFIG_BT_COEXISTENCE = n
264 -CONFIG_RTL8192CU_REDEFINE_1X1 =n
265 -CONFIG_WAKE_ON_WLAN = n
266 -
267 -CONFIG_PLATFORM_I386_PC = n
268 +CONFIG_POWER_SAVING = y
269 +CONFIG_USB_AUTOSUSPEND = n
270 +CONFIG_HW_PWRP_DETECTION = n
271 +CONFIG_WIFI_TEST = n
272 +CONFIG_BT_COEXISTENCE = n
273 +CONFIG_RTL8192CU_REDEFINE_1X1 = n
274 +CONFIG_INTEL_WIDI = n
275 +CONFIG_WAKE_ON_WLAN = n
276 +
277 +CONFIG_PLATFORM_I386_PC = y
278 CONFIG_PLATFORM_TI_AM3517 = n
279 CONFIG_PLATFORM_ANDROID_X86 = n
280 +CONFIG_PLATFORM_JB_X86 = n
281 CONFIG_PLATFORM_ARM_S3C2K4 = n
282 CONFIG_PLATFORM_ARM_PXA2XX = n
283 CONFIG_PLATFORM_ARM_S3C6K4 = n
284 @@ -50,44 +53,33 @@ CONFIG_PLATFORM_MIPS_PLM = n
285 CONFIG_PLATFORM_MSTAR389 = n
286 CONFIG_PLATFORM_MT53XX = n
287 CONFIG_PLATFORM_ARM_MX51_241H = n
288 +CONFIG_PLATFORM_FS_MX61 = n
289 CONFIG_PLATFORM_ACTIONS_ATJ227X = n
290 -CONFIG_PLATFORM_ARM_TEGRA3 = n
291 +CONFIG_PLATFORM_TEGRA3_CARDHU = n
292 +CONFIG_PLATFORM_TEGRA4_DALMORE = n
293 CONFIG_PLATFORM_ARM_TCC8900 = n
294 CONFIG_PLATFORM_ARM_TCC8920 = n
295 +CONFIG_PLATFORM_ARM_TCC8920_JB42 = n
296 CONFIG_PLATFORM_ARM_RK2818 = n
297 CONFIG_PLATFORM_ARM_TI_PANDA = n
298 CONFIG_PLATFORM_MIPS_JZ4760 = n
299 CONFIG_PLATFORM_DMP_PHILIPS = n
300 -CONFIG_PLATFORM_TI_DM365 = n
301 +CONFIG_PLATFORM_TI_DM365 = n
302 CONFIG_PLATFORM_MN10300 = n
303 CONFIG_PLATFORM_MSTAR_TITANIA12 = n
304 -CONFIG_PLATFORM_ARM_BCM2708 = y
305 +CONFIG_PLATFORM_MSTAR_A3 = n
306 +CONFIG_PLATFORM_ARM_SUNxI = n
307 +CONFIG_PLATFORM_ARM_SUN6I = n
308
309 CONFIG_DRVEXT_MODULE = n
310
311 export TopDIR ?= $(shell pwd)
312
313
314 -ifeq ($(CONFIG_RTL8712), y)
315 -
316 -RTL871X = rtl8712
317 -
318 -ifeq ($(CONFIG_SDIO_HCI), y)
319 -MODULE_NAME = 8712s
320 -endif
321 -ifeq ($(CONFIG_USB_HCI), y)
322 -MODULE_NAME = 8712u
323 -endif
324 -
325 -endif
326 -
327 ifeq ($(CONFIG_RTL8192C), y)
328
329 RTL871X = rtl8192c
330
331 -ifeq ($(CONFIG_SDIO_HCI), y)
332 -MODULE_NAME = 8192cs
333 -endif
334 ifeq ($(CONFIG_USB_HCI), y)
335 MODULE_NAME = 8192cu
336 FW_FILES := hal/$(RTL871X)/usb/Hal8192CUHWImg.o
337 @@ -100,7 +92,9 @@ MODULE_NAME = 8192ce
338 FW_FILES := hal/$(RTL871X)/pci/Hal8192CEHWImg.o
339 endif
340
341 -CHIP_FILES := hal/$(RTL871X)/$(RTL871X)_sreset.o
342 +CHIP_FILES := \
343 + hal/$(RTL871X)/$(RTL871X)_sreset.o \
344 + hal/$(RTL871X)/$(RTL871X)_xmit.o
345 CHIP_FILES += $(FW_FILES)
346 endif
347
348 @@ -108,111 +102,101 @@ ifeq ($(CONFIG_RTL8192D), y)
349
350 RTL871X = rtl8192d
351
352 -ifeq ($(CONFIG_SDIO_HCI), y)
353 -MODULE_NAME = 8192ds
354 -endif
355 ifeq ($(CONFIG_USB_HCI), y)
356 MODULE_NAME = 8192du
357 -FW_FILES := hal/$(RTL871X)/usb/Hal8192DUHWImg.o \
358 - hal/$(RTL871X)/usb/Hal8192DUTestHWImg.o
359 +FW_FILES := hal/$(RTL871X)/usb/Hal8192DUHWImg.o
360 ifneq ($(CONFIG_WAKE_ON_WLAN), n)
361 FW_FILES += hal/$(RTL871X)/usb/Hal8192DUHWImg_wowlan.o
362 endif
363 endif
364 ifeq ($(CONFIG_PCI_HCI), y)
365 MODULE_NAME = 8192de
366 -FW_FILES := hal/$(RTL871X)/pci/Hal8192DEHWImg.o \
367 - hal/$(RTL871X)/pci/Hal8192DETestHWImg.o
368 +FW_FILES := hal/$(RTL871X)/pci/Hal8192DEHWImg.o
369 endif
370
371 +CHIP_FILES := \
372 + hal/$(RTL871X)/$(RTL871X)_xmit.o
373 CHIP_FILES += $(FW_FILES)
374 endif
375
376 -ifeq ($(CONFIG_SDIO_HCI), y)
377 +ifeq ($(CONFIG_RTL8723A), y)
378
379 -HCI_NAME = sdio
380 -
381 -_OS_INTFS_FILES := os_dep/osdep_service.o \
382 - os_dep/linux/os_intfs.o \
383 - os_dep/linux/sdio_intf.o \
384 - os_dep/linux/ioctl_linux.o \
385 - os_dep/linux/xmit_linux.o \
386 - os_dep/linux/mlme_linux.o \
387 - os_dep/linux/recv_linux.o \
388 - os_dep/linux/rtw_android.o
389 -
390 -_HAL_INTFS_FILES := hal/$(RTL871X)/hal_init.o \
391 - hal/$(RTL871X)/sdio_halinit.o \
392 - hal/$(RTL871X)/sdio_ops.o \
393 - hal/$(RTL871X)/sdio_ops_linux.o
394 +RTL871X = rtl8723a
395
396 +ifeq ($(CONFIG_SDIO_HCI), y)
397 +MODULE_NAME = 8723as
398 +FW_FILES := hal/$(RTL871X)/sdio/Hal8723SHWImg.o
399 endif
400
401 -
402 ifeq ($(CONFIG_USB_HCI), y)
403 +MODULE_NAME = 8723au
404 +FW_FILES := hal/$(RTL871X)/usb/Hal8723UHWImg.o
405 +endif
406
407 -HCI_NAME = usb
408 +ifeq ($(CONFIG_PCI_HCI), y)
409 +MODULE_NAME = 8723ae
410 +FW_FILES := hal/$(RTL871X)/pci/Hal8723EHWImg.o
411 +endif
412
413 -_OS_INTFS_FILES := os_dep/osdep_service.o \
414 - os_dep/linux/os_intfs.o \
415 - os_dep/linux/$(HCI_NAME)_intf.o \
416 - os_dep/linux/ioctl_linux.o \
417 - os_dep/linux/xmit_linux.o \
418 - os_dep/linux/mlme_linux.o \
419 - os_dep/linux/recv_linux.o \
420 - os_dep/linux/ioctl_cfg80211.o \
421 - os_dep/linux/rtw_android.o
422 +PWRSEQ_FILES := hal/HalPwrSeqCmd.o \
423 + hal/$(RTL871X)/Hal8723PwrSeq.o
424
425 -_HAL_INTFS_FILES := hal/hal_init.o \
426 - hal/$(RTL871X)/$(RTL871X)_hal_init.o \
427 - hal/$(RTL871X)/$(RTL871X)_phycfg.o \
428 - hal/$(RTL871X)/$(RTL871X)_rf6052.o \
429 - hal/$(RTL871X)/$(RTL871X)_dm.o \
430 - hal/$(RTL871X)/$(RTL871X)_rxdesc.o \
431 - hal/$(RTL871X)/$(RTL871X)_cmd.o \
432 - hal/$(RTL871X)/$(RTL871X)_mp.o \
433 - hal/$(RTL871X)/usb/usb_ops_linux.o \
434 - hal/$(RTL871X)/usb/usb_halinit.o \
435 - hal/$(RTL871X)/usb/rtl$(MODULE_NAME)_led.o \
436 - hal/$(RTL871X)/usb/rtl$(MODULE_NAME)_xmit.o \
437 - hal/$(RTL871X)/usb/rtl$(MODULE_NAME)_recv.o
438 -
439 -_HAL_INTFS_FILES += $(CHIP_FILES)
440 +CHIP_FILES += $(FW_FILES) $(PWRSEQ_FILES)
441 +
442 +endif
443
444 +ifeq ($(CONFIG_SDIO_HCI), y)
445 +HCI_NAME = sdio
446 endif
447
448 +ifeq ($(CONFIG_USB_HCI), y)
449 +HCI_NAME = usb
450 +endif
451
452 ifeq ($(CONFIG_PCI_HCI), y)
453 -
454 HCI_NAME = pci
455 +endif
456 +
457
458 _OS_INTFS_FILES := os_dep/osdep_service.o \
459 os_dep/linux/os_intfs.o \
460 os_dep/linux/$(HCI_NAME)_intf.o \
461 + os_dep/linux/$(HCI_NAME)_ops_linux.o \
462 os_dep/linux/ioctl_linux.o \
463 os_dep/linux/xmit_linux.o \
464 os_dep/linux/mlme_linux.o \
465 os_dep/linux/recv_linux.o \
466 + os_dep/linux/ioctl_cfg80211.o \
467 os_dep/linux/rtw_android.o
468
469 -_HAL_INTFS_FILES := hal/hal_init.o \
470 - hal/$(RTL871X)/$(RTL871X)_hal_init.o \
471 +
472 +_HAL_INTFS_FILES := hal/hal_intf.o \
473 + hal/hal_com.o \
474 + hal/dm.o \
475 + hal/$(RTL871X)/$(RTL871X)_hal_init.o \
476 hal/$(RTL871X)/$(RTL871X)_phycfg.o \
477 hal/$(RTL871X)/$(RTL871X)_rf6052.o \
478 hal/$(RTL871X)/$(RTL871X)_dm.o \
479 hal/$(RTL871X)/$(RTL871X)_rxdesc.o \
480 hal/$(RTL871X)/$(RTL871X)_cmd.o \
481 - hal/$(RTL871X)/$(RTL871X)_mp.o \
482 - hal/$(RTL871X)/pci/pci_ops_linux.o \
483 - hal/$(RTL871X)/pci/pci_halinit.o \
484 - hal/$(RTL871X)/pci/rtl$(MODULE_NAME)_led.o \
485 - hal/$(RTL871X)/pci/rtl$(MODULE_NAME)_xmit.o \
486 - hal/$(RTL871X)/pci/rtl$(MODULE_NAME)_recv.o
487 + hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_halinit.o \
488 + hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_led.o \
489 + hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_xmit.o \
490 + hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_recv.o
491
492 -_HAL_INTFS_FILES += $(CHIP_FILES)
493 +ifeq ($(CONFIG_SDIO_HCI), y)
494 +_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops.o
495 +else
496 +_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops_linux.o
497 +endif
498
499 +ifeq ($(CONFIG_MP_INCLUDED), y)
500 +_HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
501 endif
502
503 +_HAL_INTFS_FILES += $(CHIP_FILES)
504 +
505 +
506 ifeq ($(CONFIG_AUTOCFG_CP), y)
507 $(shell cp $(TopDIR)/autoconf_$(RTL871X)_$(HCI_NAME)_linux.h $(TopDIR)/include/autoconf.h)
508 endif
509 @@ -238,22 +222,18 @@ endif
510
511 ifeq ($(CONFIG_BT_COEXISTENCE), y)
512 EXTRA_CFLAGS += -DCONFIG_BT_COEXISTENCE
513 -endif
514 +endif
515
516 ifeq ($(CONFIG_RTL8192CU_REDEFINE_1X1), y)
517 EXTRA_CFLAGS += -DRTL8192C_RECONFIG_TO_1T1R
518 -endif
519 +endif
520
521 ifeq ($(CONFIG_WAKE_ON_WLAN), y)
522 EXTRA_CFLAGS += -DCONFIG_WAKE_ON_WLAN
523 endif
524
525 -ifeq ($(CONFIG_PLATFORM_ARM_BCM2708), y)
526 -EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
527 -ARCH := arm
528 -CROSS_COMPILE ?=
529 -KVER := 3.6.11+
530 -KSRC := /lib/modules/$(KVER)/build
531 +ifeq ($(CONFIG_INTEL_WIDI), y)
532 +EXTRA_CFLAGS += -DCONFIG_INTEL_WIDI
533 endif
534
535 ifeq ($(CONFIG_PLATFORM_I386_PC), y)
536 @@ -275,11 +255,20 @@ ARCH := arm
537 endif
538
539 ifeq ($(CONFIG_PLATFORM_MSTAR_TITANIA12), y)
540 -EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR_TITANIA12
541 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR -DCONFIG_PLATFORM_MSTAR_TITANIA12
542 ARCH:=mips
543 -CROSS_COMPILE:= /work/mstar/mips-4.3/bin/mips-linux-gnu-
544 +CROSS_COMPILE:= /usr/src/Mstar_kernel/mips-4.3/bin/mips-linux-gnu-
545 KVER:= 2.6.28.9
546 -KSRC:= /work/mstar/2.6.28.9/
547 +KSRC:= /usr/src/Mstar_kernel/2.6.28.9/
548 +endif
549 +
550 +ifeq ($(CONFIG_PLATFORM_MSTAR_A3), y)
551 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR -DCONFIG_PLATFORM_MSTAR_A3
552 +ARCH:=arm
553 +CROSS_COMPILE:= arm-none-linux-gnueabi-
554 +KVER:= 2.6.35.11
555 +KSRC:= /home/gary/PERFORCE/THEALE/RedLion/2.6.35.11/
556 +MODULE_NAME = wlan
557 endif
558
559 ifeq ($(CONFIG_PLATFORM_ANDROID_X86), y)
560 @@ -291,6 +280,18 @@ KSRC := /media/DATA-2/android-x86/ics-x86_20120130/out/target/product/generic_x8
561 MODULE_NAME :=wlan
562 endif
563
564 +ifeq ($(CONFIG_PLATFORM_JB_X86), y)
565 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
566 +EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
567 +EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
568 +EXTRA_CFLAGS += -DCONFIG_P2P_IPS
569 +SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
570 +ARCH := $(SUBARCH)
571 +CROSS_COMPILE := /home/android_sdk/android-x86_JB/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7/bin/i686-linux-android-
572 +KSRC := /home/android_sdk/android-x86_JB/out/target/product/x86/obj/kernel/
573 +MODULE_NAME :=wlan
574 +endif
575 +
576 ifeq ($(CONFIG_PLATFORM_ARM_PXA2XX), y)
577 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
578 ARCH := arm
579 @@ -327,7 +328,7 @@ ifeq ($(CONFIG_PLATFORM_MIPS_RMI), y)
580 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
581 ARCH:=mips
582 CROSS_COMPILE:=mipsisa32r2-uclibc-
583 -KVER:=
584 +KVER:=
585 KSRC:= /root/work/kernel_realtek
586 endif
587
588 @@ -335,7 +336,7 @@ ifeq ($(CONFIG_PLATFORM_MIPS_PLM), y)
589 EXTRA_CFLAGS += -DCONFIG_BIG_ENDIAN
590 ARCH:=mips
591 CROSS_COMPILE:=mipsisa32r2-uclibc-
592 -KVER:=
593 +KVER:=
594 KSRC:= /root/work/kernel_realtek
595 endif
596
597 @@ -366,8 +367,8 @@ ifeq ($(CONFIG_PLATFORM_RTK_DMP), y)
598 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DRTK_DMP_PLATFORM
599 ARCH:=mips
600 CROSS_COMPILE:=mipsel-linux-
601 -KVER:=
602 -KSRC ?= /usr/src/work/DMP_Kernel/jupiter/linux-2.6.12
603 +KVER:=
604 +KSRC ?= /usr/src/DMP_Kernel/jupiter/linux-2.6.12
605 endif
606
607 ifeq ($(CONFIG_PLATFORM_MT53XX), y)
608 @@ -385,7 +386,16 @@ CROSS_COMPILE := /opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-li
609 KVER := 2.6.31
610 KSRC ?= /lib/modules/2.6.31-770-g0e46b52/source
611 endif
612 -
613 +
614 +ifeq ($(CONFIG_PLATFORM_FS_MX61), y)
615 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
616 +ARCH := arm
617 +CROSS_COMPILE := /home/share/CusEnv/FreeScale/arm-eabi-4.4.3/bin/arm-eabi-
618 +KSRC ?= /home/share/CusEnv/FreeScale/FS_kernel_env
619 +endif
620 +
621 +
622 +
623 ifeq ($(CONFIG_PLATFORM_ACTIONS_ATJ227X), y)
624 EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ACTIONS_ATJ227X
625 ARCH := mips
626 @@ -402,27 +412,57 @@ KVER := 2.6.18
627 KSRC := /home/cnsd4/Appro/mv_pro_5.0/montavista/pro/devkit/lsp/ti-davinci/linux-dm365
628 endif
629
630 -ifeq ($(CONFIG_PLATFORM_ARM_TEGRA3), y)
631 -EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN #-DCONFIG_MINIMAL_MEMORY_USAGE
632 -ARCH ?= arm
633 -CROSS_COMPILE ?= /media/DATA-1/nvidia/gingerbread/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
634 -KSRC ?= /media/DATA-1/nvidia/gingerbread/out/debug/target/product/cardhu/obj/KERNEL
635 +ifeq ($(CONFIG_PLATFORM_TEGRA3_CARDHU), y)
636 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
637 +# default setting for Android 4.1, 4.2
638 +EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
639 +EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
640 +EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
641 +EXTRA_CFLAGS += -DCONFIG_P2P_IPS
642 +ARCH := arm
643 +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-
644 +KSRC := /home/android_sdk/nvidia/tegra-16r3-partner-android-4.1_20120723/out/target/product/cardhu/obj/KERNEL
645 +MODULE_NAME := wlan
646 +endif
647 +
648 +ifeq ($(CONFIG_PLATFORM_TEGRA4_DALMORE), y)
649 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
650 +# default setting for Android 4.1, 4.2
651 +EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
652 +EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
653 +EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
654 +EXTRA_CFLAGS += -DCONFIG_P2P_IPS
655 +ARCH := arm
656 +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-
657 +KSRC := /home/android_sdk/nvidia/tegra-17r9-partner-android-4.2-dalmore_20130131/out/target/product/dalmore/obj/KERNEL
658 MODULE_NAME := wlan
659 endif
660
661 ifeq ($(CONFIG_PLATFORM_ARM_TCC8900), y)
662 -EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_MINIMAL_MEMORY_USAGE
663 -ARCH ?= arm
664 -CROSS_COMPILE ?= /media/DATA-1/telechips/SDK_2302_20110425/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
665 -KSRC ?=/media/DATA-1/telechips/SDK_2302_20110425/kernel
666 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
667 +ARCH := arm
668 +CROSS_COMPILE := /home/android_sdk/Telechips/SDK_2304_20110613/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
669 +KSRC := /home/android_sdk/Telechips/SDK_2304_20110613/kernel
670 MODULE_NAME := wlan
671 endif
672
673 ifeq ($(CONFIG_PLATFORM_ARM_TCC8920), y)
674 -EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN #-DCONFIG_MINIMAL_MEMORY_USAGE
675 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
676 ARCH := arm
677 -CROSS_COMPILE := /media/DATA-2/telechips/ics_sdk/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
678 -KSRC := /media/DATA-2/telechips/ics_sdk/kernel
679 +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-
680 +KSRC := /home/android_sdk/Telechips/v12.06_r1-tcc-android-4.0.4/kernel
681 +MODULE_NAME := wlan
682 +endif
683 +
684 +ifeq ($(CONFIG_PLATFORM_ARM_TCC8920_JB42), y)
685 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
686 +# default setting for Android 4.1, 4.2
687 +EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
688 +EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
689 +EXTRA_CFLAGS += -DCONFIG_P2P_IPS
690 +ARCH := arm
691 +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-
692 +KSRC := /home/android_sdk/Telechips/v13.03_r1-tcc-android-4.2.2_ds_patched/kernel
693 MODULE_NAME := wlan
694 endif
695
696 @@ -461,11 +501,39 @@ KSRC := /home/winuser/work/Plat_sLD2T_V3010/usr/src/linux-2.6.32.2
697 INSTALL_PREFIX :=
698 endif
699
700 +ifeq ($(CONFIG_PLATFORM_ARM_SUNxI), y)
701 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ARM_SUNxI
702 +ARCH := arm
703 +CROSS_COMPILE := arm-none-linux-gnueabi-
704 +KVER := 3.0.8
705 +#KSRC:= ../lichee/linux-3.0/
706 +endif
707 +
708 +ifeq ($(CONFIG_PLATFORM_ARM_SUN6I), y)
709 +EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
710 +EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN6I
711 +EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_TX
712 +EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
713 +# default setting for Android 4.1, 4.2
714 +EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
715 +EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
716 +EXTRA_CFLAGS += -DCONFIG_P2P_IPS
717 +ARCH := arm
718 +CROSS_COMPILE := arm-none-linux-gnueabi-
719 +KVER := 3.3.0
720 +#KSRC:= ../lichee/linux-3.3/
721 +endif
722 +
723 +ifneq ($(USER_MODULE_NAME),)
724 +MODULE_NAME := $(USER_MODULE_NAME)
725 +endif
726 +
727 ifeq ($(CONFIG_MP_INCLUDED), y)
728 MODULE_NAME := $(MODULE_NAME)_mp
729 EXTRA_CFLAGS += -DCONFIG_MP_INCLUDED
730 endif
731
732 +
733 ifneq ($(KERNELRELEASE),)
734
735
736 @@ -483,23 +551,26 @@ rtk_core := core/rtw_cmd.o \
737 core/rtw_rf.o \
738 core/rtw_recv.o \
739 core/rtw_sta_mgt.o \
740 + core/rtw_ap.o \
741 core/rtw_xmit.o \
742 core/rtw_p2p.o \
743 + core/rtw_tdls.o \
744 core/rtw_br_ext.o \
745 - core/rtw_iol.o
746 + core/rtw_iol.o \
747 + core/rtw_sreset.o
748
749 $(MODULE_NAME)-y += $(rtk_core)
750 -
751 +
752 +$(MODULE_NAME)-$(CONFIG_INTEL_WIDI) += core/rtw_intel_widi.o
753 +
754 $(MODULE_NAME)-y += core/efuse/rtw_efuse.o
755
756 $(MODULE_NAME)-y += $(_HAL_INTFS_FILES)
757
758 $(MODULE_NAME)-y += $(_OS_INTFS_FILES)
759
760 -
761 $(MODULE_NAME)-$(CONFIG_MP_INCLUDED) += core/rtw_mp.o \
762 - core/rtw_mp_ioctl.o \
763 - core/rtw_ioctl_rtl.o
764 + core/rtw_mp_ioctl.o
765
766 obj-$(CONFIG_RTL8192CU) := $(MODULE_NAME).o
767
768 @@ -522,12 +593,12 @@ install:
769 uninstall:
770 rm -f $(MODDESTDIR)/$(MODULE_NAME).ko
771 /sbin/depmod -a ${KVER}
772 -
773 -
774 +
775 +
776 config_r:
777 @echo "make config"
778 /bin/bash script/Configure script/config.in
779 -
780 +
781 .PHONY: modules clean
782
783 clean:
784 @@ -535,11 +606,11 @@ clean:
785 rm .tmp_versions -fr ; rm Module.symvers -fr
786 rm -fr Module.markers ; rm -fr modules.order
787 cd core/efuse ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
788 - cd core ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
789 - cd hal/$(RTL871X)/$(HCI_NAME) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
790 - cd hal/$(RTL871X) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
791 - cd hal ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
792 - cd os_dep/linux ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
793 - cd os_dep ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
794 + cd core ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
795 + cd hal/$(RTL871X)/$(HCI_NAME) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
796 + cd hal/$(RTL871X) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
797 + cd hal ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
798 + cd os_dep/linux ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
799 + cd os_dep ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
800 endif
801
802 diff --git a/drivers/net/wireless/rtl8192cu/clean b/drivers/net/wireless/rtl8192cu/clean
803 old mode 100644
804 new mode 100755
805 index 34686a0..8766421
806 --- a/drivers/net/wireless/rtl8192cu/clean
807 +++ b/drivers/net/wireless/rtl8192cu/clean
808 @@ -3,7 +3,3 @@ rmmod 8192cu
809 rmmod 8192ce
810 rmmod 8192du
811 rmmod 8192de
812 -
813 -rmmod rtl8192cu
814 -rmmod rtl8192c_common
815 -rmmod rtlwifi
816 \ No newline at end of file
817 diff --git a/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c b/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c
818 index 4908d6e..3d341ac 100644
819 --- a/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c
820 +++ b/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c
821 @@ -1,7 +1,7 @@
822 /******************************************************************************
823 *
824 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
825 - *
826 + *
827 * This program is free software; you can redistribute it and/or modify it
828 * under the terms of version 2 of the GNU General Public License as
829 * published by the Free Software Foundation.
830 @@ -54,6 +54,11 @@ BOOLEAN
831 Efuse_Read1ByteFromFakeContent(
832 IN PADAPTER pAdapter,
833 IN u16 Offset,
834 + IN OUT u8 *Value );
835 +BOOLEAN
836 +Efuse_Read1ByteFromFakeContent(
837 + IN PADAPTER pAdapter,
838 + IN u16 Offset,
839 IN OUT u8 *Value )
840 {
841 if(Offset >= EFUSE_MAX_HW_SIZE)
842 @@ -67,6 +72,12 @@ Efuse_Read1ByteFromFakeContent(
843 *Value = fakeBTEfuseContent[fakeEfuseBank-1][Offset];
844 return _TRUE;
845 }
846 +
847 +BOOLEAN
848 +Efuse_Write1ByteToFakeContent(
849 + IN PADAPTER pAdapter,
850 + IN u16 Offset,
851 + IN u8 Value );
852 BOOLEAN
853 Efuse_Write1ByteToFakeContent(
854 IN PADAPTER pAdapter,
855 @@ -210,7 +221,7 @@ ReadEFuseByte(
856 value32 = rtw_read32(Adapter, EFUSE_CTRL);
857
858 *pbuf = (u8)(value32 & 0xff);
859 - //MSG_8192C("ReadEFuseByte _offset:%08u, in %d ms\n",_offset ,rtw_get_passing_time_ms(start));
860 + //DBG_871X("ReadEFuseByte _offset:%08u, in %d ms\n",_offset ,rtw_get_passing_time_ms(start));
861
862 }
863
864 @@ -232,6 +243,16 @@ ReadEFuseByte(
865 // 2008/12/22 MH Read Efuse must check if we write section 1 data again!!! Sec1
866 // write addr must be after sec5.
867 //
868 +
869 +VOID
870 +efuse_ReadEFuse(
871 + PADAPTER Adapter,
872 + u8 efuseType,
873 + u16 _offset,
874 + u16 _size_byte,
875 + u8 *pbuf,
876 + IN BOOLEAN bPseudoTest
877 + );
878 VOID
879 efuse_ReadEFuse(
880 PADAPTER Adapter,
881 @@ -250,7 +271,7 @@ EFUSE_GetEfuseDefinition(
882 IN PADAPTER pAdapter,
883 IN u8 efuseType,
884 IN u8 type,
885 - OUT PVOID *pOut,
886 + OUT void *pOut,
887 IN BOOLEAN bPseudoTest
888 )
889 {
890 @@ -337,6 +358,12 @@ EFUSE_Read1Byte(
891 * 09/23/2008 MHC Copy from WMAC.
892 *
893 *---------------------------------------------------------------------------*/
894 +
895 +void
896 +EFUSE_Write1Byte(
897 + IN PADAPTER Adapter,
898 + IN u16 Address,
899 + IN u8 Value);
900 void
901 EFUSE_Write1Byte(
902 IN PADAPTER Adapter,
903 @@ -709,12 +736,12 @@ u8 rtw_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data)
904
905 if (word_en != 0xF) {
906 ret = Efuse_PgPacketWrite(padapter, offset, word_en, newdata, _FALSE);
907 - DBG_8192C("offset=%x \n",offset);
908 - DBG_8192C("word_en=%x \n",word_en);
909 + DBG_871X("offset=%x \n",offset);
910 + DBG_871X("word_en=%x \n",word_en);
911
912 for(i=0;i<PGPKT_DATA_SIZE;i++)
913 {
914 - DBG_8192C("data=%x \t",newdata[i]);
915 + DBG_871X("data=%x \t",newdata[i]);
916 }
917 if (ret == _FAIL) break;
918 }
919 @@ -759,6 +786,12 @@ Efuse_ReadAllMap(
920 IN PADAPTER pAdapter,
921 IN u8 efuseType,
922 IN OUT u8 *Efuse,
923 + IN BOOLEAN bPseudoTest);
924 +VOID
925 +Efuse_ReadAllMap(
926 + IN PADAPTER pAdapter,
927 + IN u8 efuseType,
928 + IN OUT u8 *Efuse,
929 IN BOOLEAN bPseudoTest)
930 {
931 u16 mapLen=0;
932 @@ -851,6 +884,13 @@ efuse_ShadowRead4Byte(
933 * 11/12/2008 MHC Create Version 0.
934 *
935 *---------------------------------------------------------------------------*/
936 +#ifdef PLATFORM
937 +static VOID
938 +efuse_ShadowWrite1Byte(
939 + IN PADAPTER pAdapter,
940 + IN u16 Offset,
941 + IN u8 Value);
942 +#endif //PLATFORM
943 static VOID
944 efuse_ShadowWrite1Byte(
945 IN PADAPTER pAdapter,
946 @@ -990,7 +1030,13 @@ EFUSE_ShadowRead(
947 * 11/12/2008 MHC Create Version 0.
948 *
949 *---------------------------------------------------------------------------*/
950 -extern VOID
951 +VOID
952 +EFUSE_ShadowWrite(
953 + IN PADAPTER pAdapter,
954 + IN u8 Type,
955 + IN u16 Offset,
956 + IN OUT u32 Value);
957 +VOID
958 EFUSE_ShadowWrite(
959 IN PADAPTER pAdapter,
960 IN u8 Type,
961 @@ -1013,6 +1059,10 @@ EFUSE_ShadowWrite(
962 VOID
963 Efuse_InitSomeVar(
964 IN PADAPTER pAdapter
965 + );
966 +VOID
967 +Efuse_InitSomeVar(
968 + IN PADAPTER pAdapter
969 )
970 {
971 u8 i;
972 @@ -1056,7 +1106,7 @@ int storeAdaptorInfoFile(char *path, struct eeprom_priv * eeprom_priv)
973 else
974 ret = _FAIL;
975 } else {
976 - DBG_8192C("%s NULL pointer\n",__FUNCTION__);
977 + DBG_871X("%s NULL pointer\n",__FUNCTION__);
978 ret = _FAIL;
979 }
980 return ret;
981 @@ -1086,7 +1136,7 @@ int retriveAdaptorInfoFile(char *path, struct eeprom_priv * eeprom_priv)
982 #endif
983
984 } else {
985 - DBG_8192C("%s NULL pointer\n",__FUNCTION__);
986 + DBG_871X("%s NULL pointer\n",__FUNCTION__);
987 ret = _FAIL;
988 }
989 return ret;
990 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_ap.c b/drivers/net/wireless/rtl8192cu/core/rtw_ap.c
991 new file mode 100644
992 index 0000000..405e7fe
993 --- /dev/null
994 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_ap.c
995 @@ -0,0 +1,2940 @@
996 +/******************************************************************************
997 + *
998 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
999 + *
1000 + * This program is free software; you can redistribute it and/or modify it
1001 + * under the terms of version 2 of the GNU General Public License as
1002 + * published by the Free Software Foundation.
1003 + *
1004 + * This program is distributed in the hope that it will be useful, but WITHOUT
1005 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1006 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
1007 + * more details.
1008 + *
1009 + * You should have received a copy of the GNU General Public License along with
1010 + * this program; if not, write to the Free Software Foundation, Inc.,
1011 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
1012 + *
1013 + *
1014 + ******************************************************************************/
1015 +#define _RTW_AP_C_
1016 +
1017 +#include <drv_conf.h>
1018 +#include <osdep_service.h>
1019 +#include <drv_types.h>
1020 +#include <wifi.h>
1021 +
1022 +
1023 +#ifdef CONFIG_AP_MODE
1024 +
1025 +extern unsigned char RTW_WPA_OUI[];
1026 +extern unsigned char WMM_OUI[];
1027 +extern unsigned char WPS_OUI[];
1028 +extern unsigned char P2P_OUI[];
1029 +extern unsigned char WFD_OUI[];
1030 +
1031 +void init_mlme_ap_info(_adapter *padapter)
1032 +{
1033 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
1034 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1035 + struct sta_priv *pstapriv = &padapter->stapriv;
1036 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
1037 +
1038 +
1039 + _rtw_spinlock_init(&pmlmepriv->bcn_update_lock);
1040 +
1041 + //for ACL
1042 + _rtw_init_queue(&pacl_list->acl_node_q);
1043 +
1044 + //pmlmeext->bstart_bss = _FALSE;
1045 +
1046 + start_ap_mode(padapter);
1047 +}
1048 +
1049 +void free_mlme_ap_info(_adapter *padapter)
1050 +{
1051 + _irqL irqL;
1052 + struct sta_info *psta=NULL;
1053 + struct sta_priv *pstapriv = &padapter->stapriv;
1054 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1055 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
1056 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
1057 +
1058 + //stop_ap_mode(padapter);
1059 +
1060 + pmlmepriv->update_bcn = _FALSE;
1061 + pmlmeext->bstart_bss = _FALSE;
1062 +
1063 + rtw_sta_flush(padapter);
1064 +
1065 + pmlmeinfo->state = _HW_STATE_NOLINK_;
1066 +
1067 + //free_assoc_sta_resources
1068 + rtw_free_all_stainfo(padapter);
1069 +
1070 + //free bc/mc sta_info
1071 + psta = rtw_get_bcmc_stainfo(padapter);
1072 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
1073 + rtw_free_stainfo(padapter, psta);
1074 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
1075 +
1076 +
1077 + _rtw_spinlock_free(&pmlmepriv->bcn_update_lock);
1078 +
1079 +}
1080 +
1081 +static void update_BCNTIM(_adapter *padapter)
1082 +{
1083 + struct sta_priv *pstapriv = &padapter->stapriv;
1084 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
1085 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
1086 + WLAN_BSSID_EX *pnetwork_mlmeext = &(pmlmeinfo->network);
1087 + unsigned char *pie = pnetwork_mlmeext->IEs;
1088 +
1089 + //DBG_871X("%s\n", __FUNCTION__);
1090 +
1091 + //update TIM IE
1092 + //if(pstapriv->tim_bitmap)
1093 + if(_TRUE)
1094 + {
1095 + u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
1096 + u16 tim_bitmap_le;
1097 + uint offset, tmp_len, tim_ielen, tim_ie_offset, remainder_ielen;
1098 +
1099 + tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap);
1100 +
1101 + p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, _TIM_IE_, &tim_ielen, pnetwork_mlmeext->IELength - _FIXED_IE_LENGTH_);
1102 + if (p != NULL && tim_ielen>0)
1103 + {
1104 + tim_ielen += 2;
1105 +
1106 + premainder_ie = p+tim_ielen;
1107 +
1108 + tim_ie_offset = (sint)(p -pie);
1109 +
1110 + remainder_ielen = pnetwork_mlmeext->IELength - tim_ie_offset - tim_ielen;
1111 +
1112 + //append TIM IE from dst_ie offset
1113 + dst_ie = p;
1114 + }
1115 + else
1116 + {
1117 + tim_ielen = 0;
1118 +
1119 + //calucate head_len
1120 + offset = _FIXED_IE_LENGTH_;
1121 +
1122 + /* get ssid_ie len */
1123 + p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, _SSID_IE_, &tmp_len, (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_));
1124 + if (p != NULL)
1125 + offset += tmp_len+2;
1126 +
1127 + // get supported rates len
1128 + p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &tmp_len, (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_));
1129 + if (p != NULL)
1130 + {
1131 + offset += tmp_len+2;
1132 + }
1133 +
1134 + //DS Parameter Set IE, len=3
1135 + offset += 3;
1136 +
1137 + premainder_ie = pie + offset;
1138 +
1139 + remainder_ielen = pnetwork_mlmeext->IELength - offset - tim_ielen;
1140 +
1141 + //append TIM IE from offset
1142 + dst_ie = pie + offset;
1143 +
1144 + }
1145 +
1146 +
1147 + if(remainder_ielen>0)
1148 + {
1149 + pbackup_remainder_ie = rtw_malloc(remainder_ielen);
1150 + if(pbackup_remainder_ie && premainder_ie)
1151 + _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
1152 + }
1153 +
1154 + *dst_ie++=_TIM_IE_;
1155 +
1156 + if((pstapriv->tim_bitmap&0xff00) && (pstapriv->tim_bitmap&0x00fc))
1157 + tim_ielen = 5;
1158 + else
1159 + tim_ielen = 4;
1160 +
1161 + *dst_ie++= tim_ielen;
1162 +
1163 + *dst_ie++=0;//DTIM count
1164 + *dst_ie++=1;//DTIM peroid
1165 +
1166 + if(pstapriv->tim_bitmap&BIT(0))//for bc/mc frames
1167 + *dst_ie++ = BIT(0);//bitmap ctrl
1168 + else
1169 + *dst_ie++ = 0;
1170 +
1171 + if(tim_ielen==4)
1172 + {
1173 + *dst_ie++ = *(u8*)&tim_bitmap_le;
1174 + }
1175 + else if(tim_ielen==5)
1176 + {
1177 + _rtw_memcpy(dst_ie, &tim_bitmap_le, 2);
1178 + dst_ie+=2;
1179 + }
1180 +
1181 + //copy remainder IE
1182 + if(pbackup_remainder_ie)
1183 + {
1184 + _rtw_memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
1185 +
1186 + rtw_mfree(pbackup_remainder_ie, remainder_ielen);
1187 + }
1188 +
1189 + offset = (uint)(dst_ie - pie);
1190 + pnetwork_mlmeext->IELength = offset + remainder_ielen;
1191 +
1192 + }
1193 +
1194 +#ifndef CONFIG_INTERRUPT_BASED_TXBCN
1195 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
1196 + set_tx_beacon_cmd(padapter);
1197 +#endif
1198 +#endif //!CONFIG_INTERRUPT_BASED_TXBCN
1199 +
1200 +
1201 +}
1202 +
1203 +void rtw_add_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index, u8 *data, u8 len)
1204 +{
1205 + PNDIS_802_11_VARIABLE_IEs pIE;
1206 + u8 bmatch = _FALSE;
1207 + u8 *pie = pnetwork->IEs;
1208 + u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
1209 + u32 i, offset, ielen, ie_offset, remainder_ielen = 0;
1210 +
1211 + for (i = sizeof(NDIS_802_11_FIXED_IEs); i < pnetwork->IELength;)
1212 + {
1213 + pIE = (PNDIS_802_11_VARIABLE_IEs)(pnetwork->IEs + i);
1214 +
1215 + if (pIE->ElementID > index)
1216 + {
1217 + break;
1218 + }
1219 + else if(pIE->ElementID == index) // already exist the same IE
1220 + {
1221 + p = (u8 *)pIE;
1222 + ielen = pIE->Length;
1223 + bmatch = _TRUE;
1224 + break;
1225 + }
1226 +
1227 + p = (u8 *)pIE;
1228 + ielen = pIE->Length;
1229 + i += (pIE->Length + 2);
1230 + }
1231 +
1232 + if (p != NULL && ielen>0)
1233 + {
1234 + ielen += 2;
1235 +
1236 + premainder_ie = p+ielen;
1237 +
1238 + ie_offset = (sint)(p -pie);
1239 +
1240 + remainder_ielen = pnetwork->IELength - ie_offset - ielen;
1241 +
1242 + if(bmatch)
1243 + dst_ie = p;
1244 + else
1245 + dst_ie = (p+ielen);
1246 + }
1247 +
1248 + if(remainder_ielen>0)
1249 + {
1250 + pbackup_remainder_ie = rtw_malloc(remainder_ielen);
1251 + if(pbackup_remainder_ie && premainder_ie)
1252 + _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
1253 + }
1254 +
1255 + *dst_ie++=index;
1256 + *dst_ie++=len;
1257 +
1258 + _rtw_memcpy(dst_ie, data, len);
1259 + dst_ie+=len;
1260 +
1261 + //copy remainder IE
1262 + if(pbackup_remainder_ie)
1263 + {
1264 + _rtw_memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
1265 +
1266 + rtw_mfree(pbackup_remainder_ie, remainder_ielen);
1267 + }
1268 +
1269 + offset = (uint)(dst_ie - pie);
1270 + pnetwork->IELength = offset + remainder_ielen;
1271 +}
1272 +
1273 +void rtw_remove_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index)
1274 +{
1275 + u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
1276 + uint offset, ielen, ie_offset, remainder_ielen = 0;
1277 + u8 *pie = pnetwork->IEs;
1278 +
1279 + p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, index, &ielen, pnetwork->IELength - _FIXED_IE_LENGTH_);
1280 + if (p != NULL && ielen>0)
1281 + {
1282 + ielen += 2;
1283 +
1284 + premainder_ie = p+ielen;
1285 +
1286 + ie_offset = (sint)(p -pie);
1287 +
1288 + remainder_ielen = pnetwork->IELength - ie_offset - ielen;
1289 +
1290 + dst_ie = p;
1291 + }
1292 + else {
1293 + return;
1294 + }
1295 +
1296 + if(remainder_ielen>0)
1297 + {
1298 + pbackup_remainder_ie = rtw_malloc(remainder_ielen);
1299 + if(pbackup_remainder_ie && premainder_ie)
1300 + _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
1301 + }
1302 +
1303 + //copy remainder IE
1304 + if(pbackup_remainder_ie)
1305 + {
1306 + _rtw_memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
1307 +
1308 + rtw_mfree(pbackup_remainder_ie, remainder_ielen);
1309 + }
1310 +
1311 + offset = (uint)(dst_ie - pie);
1312 + pnetwork->IELength = offset + remainder_ielen;
1313 +}
1314 +
1315 +
1316 +u8 chk_sta_is_alive(struct sta_info *psta);
1317 +u8 chk_sta_is_alive(struct sta_info *psta)
1318 +{
1319 + u8 ret = _FALSE;
1320 + #ifdef DBG_EXPIRATION_CHK
1321 + DBG_871X("sta:"MAC_FMT", rssi:%d, rx:"STA_PKTS_FMT", expire_to:%u, %s%ssq_len:%u\n"
1322 + , MAC_ARG(psta->hwaddr)
1323 + , psta->rssi_stat.UndecoratedSmoothedPWDB
1324 + //, STA_RX_PKTS_ARG(psta)
1325 + , STA_RX_PKTS_DIFF_ARG(psta)
1326 + , psta->expire_to
1327 + , psta->state&WIFI_SLEEP_STATE?"PS, ":""
1328 + , psta->state&WIFI_STA_ALIVE_CHK_STATE?"SAC, ":""
1329 + , psta->sleepq_len
1330 + );
1331 + #endif
1332 +
1333 + //if(sta_last_rx_pkts(psta) == sta_rx_pkts(psta))
1334 + 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))
1335 + {
1336 + #if 0
1337 + if(psta->state&WIFI_SLEEP_STATE)
1338 + ret = _TRUE;
1339 + #endif
1340 + }
1341 + else
1342 + {
1343 + ret = _TRUE;
1344 + }
1345 +
1346 + sta_update_last_rx_pkts(psta);
1347 +
1348 + return ret;
1349 +}
1350 +
1351 +void expire_timeout_chk(_adapter *padapter)
1352 +{
1353 + _irqL irqL;
1354 + _list *phead, *plist;
1355 + u8 updated;
1356 + struct sta_info *psta=NULL;
1357 + struct sta_priv *pstapriv = &padapter->stapriv;
1358 + u8 chk_alive_num = 0;
1359 + char chk_alive_list[NUM_STA];
1360 + int i;
1361 +
1362 + _enter_critical_bh(&pstapriv->auth_list_lock, &irqL);
1363 +
1364 + phead = &pstapriv->auth_list;
1365 + plist = get_next(phead);
1366 +
1367 + //check auth_queue
1368 + #ifdef DBG_EXPIRATION_CHK
1369 + if (rtw_end_of_queue_search(phead, plist) == _FALSE) {
1370 + DBG_871X(FUNC_NDEV_FMT" auth_list, cnt:%u\n"
1371 + , FUNC_NDEV_ARG(padapter->pnetdev), pstapriv->auth_list_cnt);
1372 + }
1373 + #endif
1374 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
1375 + {
1376 + psta = LIST_CONTAINOR(plist, struct sta_info, auth_list);
1377 + plist = get_next(plist);
1378 +
1379 + if(psta->expire_to>0)
1380 + {
1381 + psta->expire_to--;
1382 + if (psta->expire_to == 0)
1383 + {
1384 + rtw_list_delete(&psta->auth_list);
1385 + pstapriv->auth_list_cnt--;
1386 +
1387 + DBG_871X("auth expire %02X%02X%02X%02X%02X%02X\n",
1388 + psta->hwaddr[0],psta->hwaddr[1],psta->hwaddr[2],psta->hwaddr[3],psta->hwaddr[4],psta->hwaddr[5]);
1389 +
1390 + _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
1391 +
1392 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
1393 + rtw_free_stainfo(padapter, psta);
1394 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
1395 +
1396 + _enter_critical_bh(&pstapriv->auth_list_lock, &irqL);
1397 + }
1398 + }
1399 +
1400 + }
1401 +
1402 + _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
1403 +
1404 + psta = NULL;
1405 +
1406 +
1407 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
1408 +
1409 + phead = &pstapriv->asoc_list;
1410 + plist = get_next(phead);
1411 +
1412 + //check asoc_queue
1413 + #ifdef DBG_EXPIRATION_CHK
1414 + if (rtw_end_of_queue_search(phead, plist) == _FALSE) {
1415 + DBG_871X(FUNC_NDEV_FMT" asoc_list, cnt:%u\n"
1416 + , FUNC_NDEV_ARG(padapter->pnetdev), pstapriv->asoc_list_cnt);
1417 + }
1418 + #endif
1419 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
1420 + {
1421 + psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
1422 + plist = get_next(plist);
1423 +
1424 + if (chk_sta_is_alive(psta) || !psta->expire_to) {
1425 + psta->expire_to = pstapriv->expire_to;
1426 + psta->keep_alive_trycnt = 0;
1427 + #ifdef CONFIG_TX_MCAST2UNI
1428 + psta->under_exist_checking = 0;
1429 + #endif // CONFIG_TX_MCAST2UNI
1430 + } else {
1431 + psta->expire_to--;
1432 + }
1433 +
1434 +#ifndef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
1435 +#ifdef CONFIG_TX_MCAST2UNI
1436 + if ( (psta->flags & WLAN_STA_HT) && (psta->htpriv.agg_enable_bitmap || psta->under_exist_checking) ) {
1437 + // check sta by delba(addba) for 11n STA
1438 + // ToDo: use CCX report to check for all STAs
1439 + //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);
1440 +
1441 + if ( psta->expire_to <= (pstapriv->expire_to - 50 ) ) {
1442 + DBG_871X("asoc expire by DELBA/ADDBA! (%d s)\n", (pstapriv->expire_to-psta->expire_to)*2);
1443 + psta->under_exist_checking = 0;
1444 + psta->expire_to = 0;
1445 + } else if ( psta->expire_to <= (pstapriv->expire_to - 3) && (psta->under_exist_checking==0)) {
1446 + DBG_871X("asoc check by DELBA/ADDBA! (%d s)\n", (pstapriv->expire_to-psta->expire_to)*2);
1447 + psta->under_exist_checking = 1;
1448 + //tear down TX AMPDU
1449 + send_delba(padapter, 1, psta->hwaddr);// // originator
1450 + psta->htpriv.agg_enable_bitmap = 0x0;//reset
1451 + psta->htpriv.candidate_tid_bitmap = 0x0;//reset
1452 + }
1453 + }
1454 +#endif // CONFIG_TX_MCAST2UNI
1455 +#endif //CONFIG_ACTIVE_KEEP_ALIVE_CHECK
1456 +
1457 + if (psta->expire_to <= 0)
1458 + {
1459 + #ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
1460 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
1461 +
1462 + if (padapter->registrypriv.wifi_spec == 1)
1463 + {
1464 + psta->expire_to = pstapriv->expire_to;
1465 + continue;
1466 + }
1467 +
1468 + if (psta->state & WIFI_SLEEP_STATE) {
1469 + if (!(psta->state & WIFI_STA_ALIVE_CHK_STATE)) {
1470 + //to check if alive by another methods if staion is at ps mode.
1471 + psta->expire_to = pstapriv->expire_to;
1472 + psta->state |= WIFI_STA_ALIVE_CHK_STATE;
1473 +
1474 + //DBG_871X("alive chk, sta:" MAC_FMT " is at ps mode!\n", MAC_ARG(psta->hwaddr));
1475 +
1476 + //to update bcn with tim_bitmap for this station
1477 + pstapriv->tim_bitmap |= BIT(psta->aid);
1478 + update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
1479 +
1480 + if(!pmlmeext->active_keep_alive_check)
1481 + continue;
1482 + }
1483 + }
1484 +
1485 + if (pmlmeext->active_keep_alive_check) {
1486 + int stainfo_offset;
1487 +
1488 + stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
1489 + if (stainfo_offset_valid(stainfo_offset)) {
1490 + chk_alive_list[chk_alive_num++] = stainfo_offset;
1491 + }
1492 +
1493 + continue;
1494 + }
1495 + #endif /* CONFIG_ACTIVE_KEEP_ALIVE_CHECK */
1496 +
1497 + rtw_list_delete(&psta->asoc_list);
1498 + pstapriv->asoc_list_cnt--;
1499 +
1500 + DBG_871X("asoc expire "MAC_FMT", state=0x%x\n", MAC_ARG(psta->hwaddr), psta->state);
1501 + updated = ap_free_sta(padapter, psta, _FALSE, WLAN_REASON_DEAUTH_LEAVING);
1502 + }
1503 + else
1504 + {
1505 + /* TODO: Aging mechanism to digest frames in sleep_q to avoid running out of xmitframe */
1506 + if (psta->sleepq_len > (NR_XMITFRAME/pstapriv->asoc_list_cnt)
1507 + && padapter->xmitpriv.free_xmitframe_cnt < (NR_XMITFRAME/pstapriv->asoc_list_cnt/2)
1508 + ){
1509 + DBG_871X("%s sta:"MAC_FMT", sleepq_len:%u, free_xmitframe_cnt:%u, asoc_list_cnt:%u, clear sleep_q\n", __func__
1510 + , MAC_ARG(psta->hwaddr)
1511 + , psta->sleepq_len, padapter->xmitpriv.free_xmitframe_cnt, pstapriv->asoc_list_cnt);
1512 + wakeup_sta_to_xmit(padapter, psta);
1513 + }
1514 + }
1515 + }
1516 +
1517 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
1518 +
1519 +#ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
1520 +if (chk_alive_num) {
1521 +
1522 + u8 backup_oper_channel=0;
1523 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
1524 + /* switch to correct channel of current network before issue keep-alive frames */
1525 + if (rtw_get_oper_ch(padapter) != pmlmeext->cur_channel) {
1526 + backup_oper_channel = rtw_get_oper_ch(padapter);
1527 + SelectChannel(padapter, pmlmeext->cur_channel);
1528 + }
1529 +
1530 + /* issue null data to check sta alive*/
1531 + for (i = 0; i < chk_alive_num; i++) {
1532 +
1533 + int ret = _FAIL;
1534 +
1535 + psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
1536 + if(!(psta->state &_FW_LINKED))
1537 + continue;
1538 +
1539 + if (psta->state & WIFI_SLEEP_STATE)
1540 + ret = issue_nulldata(padapter, psta->hwaddr, 0, 1, 50);
1541 + else
1542 + ret = issue_nulldata(padapter, psta->hwaddr, 0, 3, 50);
1543 +
1544 + psta->keep_alive_trycnt++;
1545 + if (ret == _SUCCESS)
1546 + {
1547 + DBG_871X("asoc check, sta(" MAC_FMT ") is alive\n", MAC_ARG(psta->hwaddr));
1548 + psta->expire_to = pstapriv->expire_to;
1549 + psta->keep_alive_trycnt = 0;
1550 + continue;
1551 + }
1552 + else if (psta->keep_alive_trycnt <= 3)
1553 + {
1554 + DBG_871X("ack check for asoc expire, keep_alive_trycnt=%d\n", psta->keep_alive_trycnt);
1555 + psta->expire_to = 1;
1556 + continue;
1557 + }
1558 +
1559 + psta->keep_alive_trycnt = 0;
1560 +
1561 + DBG_871X("asoc expire "MAC_FMT", state=0x%x\n", MAC_ARG(psta->hwaddr), psta->state);
1562 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
1563 + if (rtw_is_list_empty(&psta->asoc_list)==_FALSE) {
1564 + rtw_list_delete(&psta->asoc_list);
1565 + pstapriv->asoc_list_cnt--;
1566 + updated = ap_free_sta(padapter, psta, _FALSE, WLAN_REASON_DEAUTH_LEAVING);
1567 + }
1568 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
1569 +
1570 + }
1571 +
1572 + if (backup_oper_channel>0) /* back to the original operation channel */
1573 + SelectChannel(padapter, backup_oper_channel);
1574 +}
1575 +#endif /* CONFIG_ACTIVE_KEEP_ALIVE_CHECK */
1576 +
1577 + associated_clients_update(padapter, updated);
1578 +}
1579 +
1580 +
1581 +static void add_RATid(_adapter *padapter, struct sta_info *psta)
1582 +{
1583 + int i;
1584 + u8 rf_type;
1585 + u32 init_rate=0;
1586 + unsigned char sta_band = 0, raid, shortGIrate = _FALSE;
1587 + unsigned char limit;
1588 + unsigned int tx_ra_bitmap=0;
1589 + struct ht_priv *psta_ht = NULL;
1590 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1591 + WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
1592 +
1593 +
1594 + if(psta)
1595 + psta_ht = &psta->htpriv;
1596 + else
1597 + return;
1598 +
1599 + //b/g mode ra_bitmap
1600 + for (i=0; i<sizeof(psta->bssrateset); i++)
1601 + {
1602 + if (psta->bssrateset[i])
1603 + tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
1604 + }
1605 +
1606 + //n mode ra_bitmap
1607 + if(psta_ht->ht_option)
1608 + {
1609 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
1610 + if(rf_type == RF_2T2R)
1611 + limit=16;// 2R
1612 + else
1613 + limit=8;// 1R
1614 +
1615 + for (i=0; i<limit; i++) {
1616 + if (psta_ht->ht_cap.supp_mcs_set[i/8] & BIT(i%8))
1617 + tx_ra_bitmap |= BIT(i+12);
1618 + }
1619 +
1620 + //max short GI rate
1621 + shortGIrate = psta_ht->sgi;
1622 + }
1623 +
1624 +
1625 +#if 0//gtest
1626 + if(get_rf_mimo_mode(padapter) == RTL8712_RF_2T2R)
1627 + {
1628 + //is this a 2r STA?
1629 + if((pstat->tx_ra_bitmap & 0x0ff00000) != 0 && !(priv->pshare->has_2r_sta & BIT(pstat->aid)))
1630 + {
1631 + priv->pshare->has_2r_sta |= BIT(pstat->aid);
1632 + if(rtw_read16(padapter, 0x102501f6) != 0xffff)
1633 + {
1634 + rtw_write16(padapter, 0x102501f6, 0xffff);
1635 + reset_1r_sta_RA(priv, 0xffff);
1636 + Switch_1SS_Antenna(priv, 3);
1637 + }
1638 + }
1639 + else// bg or 1R STA?
1640 + {
1641 + if((priv->pmib->dot11BssType.net_work_type & WIRELESS_11N) && pstat->ht_cap_len && priv->pshare->has_2r_sta == 0)
1642 + {
1643 + if(rtw_read16(padapter, 0x102501f6) != 0x7777)
1644 + { // MCS7 SGI
1645 + rtw_write16(padapter, 0x102501f6,0x7777);
1646 + reset_1r_sta_RA(priv, 0x7777);
1647 + Switch_1SS_Antenna(priv, 2);
1648 + }
1649 + }
1650 + }
1651 +
1652 + }
1653 +
1654 + if ((pstat->rssi_level < 1) || (pstat->rssi_level > 3))
1655 + {
1656 + if (pstat->rssi >= priv->pshare->rf_ft_var.raGoDownUpper)
1657 + pstat->rssi_level = 1;
1658 + else if ((pstat->rssi >= priv->pshare->rf_ft_var.raGoDown20MLower) ||
1659 + ((priv->pshare->is_40m_bw) && (pstat->ht_cap_len) &&
1660 + (pstat->rssi >= priv->pshare->rf_ft_var.raGoDown40MLower) &&
1661 + (pstat->ht_cap_buf.ht_cap_info & cpu_to_le16(_HTCAP_SUPPORT_CH_WDTH_))))
1662 + pstat->rssi_level = 2;
1663 + else
1664 + pstat->rssi_level = 3;
1665 + }
1666 +
1667 + // rate adaptive by rssi
1668 + if ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11N) && pstat->ht_cap_len)
1669 + {
1670 + if ((get_rf_mimo_mode(priv) == MIMO_1T2R) || (get_rf_mimo_mode(priv) == MIMO_1T1R))
1671 + {
1672 + switch (pstat->rssi_level) {
1673 + case 1:
1674 + pstat->tx_ra_bitmap &= 0x100f0000;
1675 + break;
1676 + case 2:
1677 + pstat->tx_ra_bitmap &= 0x100ff000;
1678 + break;
1679 + case 3:
1680 + if (priv->pshare->is_40m_bw)
1681 + pstat->tx_ra_bitmap &= 0x100ff005;
1682 + else
1683 + pstat->tx_ra_bitmap &= 0x100ff001;
1684 +
1685 + break;
1686 + }
1687 + }
1688 + else
1689 + {
1690 + switch (pstat->rssi_level) {
1691 + case 1:
1692 + pstat->tx_ra_bitmap &= 0x1f0f0000;
1693 + break;
1694 + case 2:
1695 + pstat->tx_ra_bitmap &= 0x1f0ff000;
1696 + break;
1697 + case 3:
1698 + if (priv->pshare->is_40m_bw)
1699 + pstat->tx_ra_bitmap &= 0x000ff005;
1700 + else
1701 + pstat->tx_ra_bitmap &= 0x000ff001;
1702 +
1703 + break;
1704 + }
1705 +
1706 + // Don't need to mask high rates due to new rate adaptive parameters
1707 + //if (pstat->is_broadcom_sta) // use MCS12 as the highest rate vs. Broadcom sta
1708 + // pstat->tx_ra_bitmap &= 0x81ffffff;
1709 +
1710 + // NIC driver will report not supporting MCS15 and MCS14 in asoc req
1711 + //if (pstat->is_rtl8190_sta && !pstat->is_2t_mimo_sta)
1712 + // pstat->tx_ra_bitmap &= 0x83ffffff; // if Realtek 1x2 sta, don't use MCS15 and MCS14
1713 + }
1714 + }
1715 + else if ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11G) && isErpSta(pstat))
1716 + {
1717 + switch (pstat->rssi_level) {
1718 + case 1:
1719 + pstat->tx_ra_bitmap &= 0x00000f00;
1720 + break;
1721 + case 2:
1722 + pstat->tx_ra_bitmap &= 0x00000ff0;
1723 + break;
1724 + case 3:
1725 + pstat->tx_ra_bitmap &= 0x00000ff5;
1726 + break;
1727 + }
1728 + }
1729 + else
1730 + {
1731 + pstat->tx_ra_bitmap &= 0x0000000d;
1732 + }
1733 +
1734 + // disable tx short GI when station cannot rx MCS15(AP is 2T2R)
1735 + // disable tx short GI when station cannot rx MCS7 (AP is 1T2R or 1T1R)
1736 + // if there is only 1r STA and we are 2T2R, DO NOT mask SGI rate
1737 + if ((!(pstat->tx_ra_bitmap & 0x8000000) && (priv->pshare->has_2r_sta > 0) && (get_rf_mimo_mode(padapter) == RTL8712_RF_2T2R)) ||
1738 + (!(pstat->tx_ra_bitmap & 0x80000) && (get_rf_mimo_mode(padapter) != RTL8712_RF_2T2R)))
1739 + {
1740 + pstat->tx_ra_bitmap &= ~BIT(28);
1741 + }
1742 +#endif
1743 +
1744 + if ( pcur_network->Configuration.DSConfig > 14 ) {
1745 + // 5G band
1746 + if (tx_ra_bitmap & 0xffff000)
1747 + sta_band |= WIRELESS_11_5N | WIRELESS_11A;
1748 + else
1749 + sta_band |= WIRELESS_11A;
1750 + } else {
1751 + if (tx_ra_bitmap & 0xffff000)
1752 + sta_band |= WIRELESS_11_24N | WIRELESS_11G | WIRELESS_11B;
1753 + else if (tx_ra_bitmap & 0xff0)
1754 + sta_band |= WIRELESS_11G |WIRELESS_11B;
1755 + else
1756 + sta_band |= WIRELESS_11B;
1757 + }
1758 +
1759 + raid = networktype_to_raid(sta_band);
1760 + init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
1761 +
1762 + if (psta->aid < NUM_STA)
1763 + {
1764 + u8 arg = 0;
1765 +
1766 + arg = psta->mac_id&0x1f;
1767 +
1768 + arg |= BIT(7);//support entry 2~31
1769 +
1770 + if (shortGIrate==_TRUE)
1771 + arg |= BIT(5);
1772 +
1773 + tx_ra_bitmap |= ((raid<<28)&0xf0000000);
1774 +
1775 + DBG_871X("%s=> mac_id:%d , raid:%d , bitmap=0x%x, arg=0x%x\n",
1776 + __FUNCTION__ , psta->mac_id, raid ,tx_ra_bitmap, arg);
1777 +
1778 + //bitmap[0:27] = tx_rate_bitmap
1779 + //bitmap[28:31]= Rate Adaptive id
1780 + //arg[0:4] = macid
1781 + //arg[5] = Short GI
1782 + rtw_hal_add_ra_tid(padapter, tx_ra_bitmap, arg);
1783 +
1784 + if (shortGIrate==_TRUE)
1785 + init_rate |= BIT(6);
1786 +
1787 + //set ra_id, init_rate
1788 + psta->raid = raid;
1789 + psta->init_rate = init_rate;
1790 +
1791 + }
1792 + else
1793 + {
1794 + DBG_871X("station aid %d exceed the max number\n", psta->aid);
1795 + }
1796 +
1797 +}
1798 +
1799 +static void update_bmc_sta(_adapter *padapter)
1800 +{
1801 + _irqL irqL;
1802 + u32 init_rate=0;
1803 + unsigned char network_type, raid;
1804 + int i, supportRateNum = 0;
1805 + unsigned int tx_ra_bitmap=0;
1806 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1807 + WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
1808 + struct sta_info *psta = rtw_get_bcmc_stainfo(padapter);
1809 +
1810 + if(psta)
1811 + {
1812 + psta->aid = 0;//default set to 0
1813 + //psta->mac_id = psta->aid+4;
1814 + psta->mac_id = psta->aid + 1;
1815 +
1816 + psta->qos_option = 0;
1817 + psta->htpriv.ht_option = _FALSE;
1818 +
1819 + psta->ieee8021x_blocked = 0;
1820 +
1821 + _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
1822 +
1823 + //psta->dot118021XPrivacy = _NO_PRIVACY_;//!!! remove it, because it has been set before this.
1824 +
1825 +
1826 +
1827 + //prepare for add_RATid
1828 + supportRateNum = rtw_get_rateset_len((u8*)&pcur_network->SupportedRates);
1829 + network_type = rtw_check_network_type((u8*)&pcur_network->SupportedRates, supportRateNum, 1);
1830 +
1831 + _rtw_memcpy(psta->bssrateset, &pcur_network->SupportedRates, supportRateNum);
1832 + psta->bssratelen = supportRateNum;
1833 +
1834 + //b/g mode ra_bitmap
1835 + for (i=0; i<supportRateNum; i++)
1836 + {
1837 + if (psta->bssrateset[i])
1838 + tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
1839 + }
1840 +
1841 + if ( pcur_network->Configuration.DSConfig > 14 ) {
1842 + //force to A mode. 5G doesn't support CCK rates
1843 + network_type = WIRELESS_11A;
1844 + tx_ra_bitmap = 0x150; // 6, 12, 24 Mbps
1845 + } else {
1846 + //force to b mode
1847 + network_type = WIRELESS_11B;
1848 + tx_ra_bitmap = 0xf;
1849 + }
1850 +
1851 + //tx_ra_bitmap = update_basic_rate(pcur_network->SupportedRates, supportRateNum);
1852 +
1853 + raid = networktype_to_raid(network_type);
1854 + init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
1855 +
1856 + //DBG_871X("Add id %d val %08x to ratr for bmc sta\n", psta->aid, tx_ra_bitmap);
1857 +
1858 + //if(pHalData->fw_ractrl == _TRUE)
1859 + {
1860 + u8 arg = 0;
1861 +
1862 + arg = psta->mac_id&0x1f;
1863 +
1864 + arg |= BIT(7);
1865 +
1866 + //if (shortGIrate==_TRUE)
1867 + // arg |= BIT(5);
1868 +
1869 + tx_ra_bitmap |= ((raid<<28)&0xf0000000);
1870 +
1871 + DBG_871X("update_bmc_sta, mask=0x%x, arg=0x%x\n", tx_ra_bitmap, arg);
1872 +
1873 + //bitmap[0:27] = tx_rate_bitmap
1874 + //bitmap[28:31]= Rate Adaptive id
1875 + //arg[0:4] = macid
1876 + //arg[5] = Short GI
1877 + rtw_hal_add_ra_tid(padapter, tx_ra_bitmap, arg);
1878 +
1879 + }
1880 +
1881 + //set ra_id, init_rate
1882 + psta->raid = raid;
1883 + psta->init_rate = init_rate;
1884 +
1885 + _enter_critical_bh(&psta->lock, &irqL);
1886 + psta->state = _FW_LINKED;
1887 + _exit_critical_bh(&psta->lock, &irqL);
1888 +
1889 + }
1890 + else
1891 + {
1892 + DBG_871X("add_RATid_bmc_sta error!\n");
1893 + }
1894 +
1895 +}
1896 +
1897 +//notes:
1898 +//AID: 1~MAX for sta and 0 for bc/mc in ap/adhoc mode
1899 +//MAC_ID = AID+1 for sta in ap/adhoc mode
1900 +//MAC_ID = 1 for bc/mc for sta/ap/adhoc
1901 +//MAC_ID = 0 for bssid for sta/ap/adhoc
1902 +//CAM_ID = //0~3 for default key, cmd_id=macid + 3, macid=aid+1;
1903 +
1904 +void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta)
1905 +{
1906 + _irqL irqL;
1907 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1908 + struct security_priv *psecuritypriv = &padapter->securitypriv;
1909 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
1910 + struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
1911 + struct ht_priv *phtpriv_sta = &psta->htpriv;
1912 +
1913 + //set intf_tag to if1
1914 + //psta->intf_tag = 0;
1915 +
1916 + //psta->mac_id = psta->aid+4;
1917 + psta->mac_id = psta->aid+1;
1918 +
1919 + if(psecuritypriv->dot11AuthAlgrthm==dot11AuthAlgrthm_8021X)
1920 + psta->ieee8021x_blocked = _TRUE;
1921 + else
1922 + psta->ieee8021x_blocked = _FALSE;
1923 +
1924 +
1925 + //update sta's cap
1926 +
1927 + //ERP
1928 + VCS_update(padapter, psta);
1929 +
1930 + //HT related cap
1931 + if(phtpriv_sta->ht_option)
1932 + {
1933 + //check if sta supports rx ampdu
1934 + phtpriv_sta->ampdu_enable = phtpriv_ap->ampdu_enable;
1935 +
1936 + //check if sta support s Short GI
1937 + 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))
1938 + {
1939 + phtpriv_sta->sgi = _TRUE;
1940 + }
1941 +
1942 + // bwmode
1943 + if((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))
1944 + {
1945 + //phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_40;
1946 + phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
1947 + phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
1948 +
1949 + }
1950 +
1951 + psta->qos_option = _TRUE;
1952 +
1953 + }
1954 + else
1955 + {
1956 + phtpriv_sta->ampdu_enable = _FALSE;
1957 +
1958 + phtpriv_sta->sgi = _FALSE;
1959 + phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_20;
1960 + phtpriv_sta->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
1961 + }
1962 +
1963 + //Rx AMPDU
1964 + send_delba(padapter, 0, psta->hwaddr);// recipient
1965 +
1966 + //TX AMPDU
1967 + send_delba(padapter, 1, psta->hwaddr);// // originator
1968 + phtpriv_sta->agg_enable_bitmap = 0x0;//reset
1969 + phtpriv_sta->candidate_tid_bitmap = 0x0;//reset
1970 +
1971 +
1972 + //todo: init other variables
1973 +
1974 + _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
1975 +
1976 +
1977 + //add ratid
1978 + //add_RATid(padapter, psta);//move to ap_sta_info_defer_update()
1979 +
1980 +
1981 + _enter_critical_bh(&psta->lock, &irqL);
1982 + psta->state |= _FW_LINKED;
1983 + _exit_critical_bh(&psta->lock, &irqL);
1984 +
1985 +
1986 +}
1987 +
1988 +static void update_hw_ht_param(_adapter *padapter)
1989 +{
1990 + unsigned char max_AMPDU_len;
1991 + unsigned char min_MPDU_spacing;
1992 + struct registry_priv *pregpriv = &padapter->registrypriv;
1993 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
1994 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
1995 +
1996 + DBG_871X("%s\n", __FUNCTION__);
1997 +
1998 +
1999 + //handle A-MPDU parameter field
2000 + /*
2001 + AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
2002 + AMPDU_para [4:2]:Min MPDU Start Spacing
2003 + */
2004 + max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03;
2005 +
2006 + min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2;
2007 +
2008 + rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
2009 +
2010 + rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_FACTOR, (u8 *)(&max_AMPDU_len));
2011 +
2012 + //
2013 + // Config SM Power Save setting
2014 + //
2015 + pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & 0x0C) >> 2;
2016 + if(pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
2017 + {
2018 + /*u8 i;
2019 + //update the MCS rates
2020 + for (i = 0; i < 16; i++)
2021 + {
2022 + pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
2023 + }*/
2024 + DBG_871X("%s(): WLAN_HT_CAP_SM_PS_STATIC\n",__FUNCTION__);
2025 + }
2026 +
2027 + //
2028 + // Config current HT Protection mode.
2029 + //
2030 + //pmlmeinfo->HT_protection = pmlmeinfo->HT_info.infos[1] & 0x3;
2031 +
2032 +}
2033 +
2034 +static void start_bss_network(_adapter *padapter, u8 *pbuf)
2035 +{
2036 + u8 *p;
2037 + u8 val8, cur_channel, cur_bwmode, cur_ch_offset;
2038 + u16 bcn_interval;
2039 + u32 acparm;
2040 + int ie_len;
2041 + struct registry_priv *pregpriv = &padapter->registrypriv;
2042 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
2043 + struct security_priv* psecuritypriv=&(padapter->securitypriv);
2044 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
2045 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
2046 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
2047 + WLAN_BSSID_EX *pnetwork_mlmeext = &(pmlmeinfo->network);
2048 + struct HT_info_element *pht_info=NULL;
2049 +#ifdef CONFIG_P2P
2050 + struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
2051 +#endif //CONFIG_P2P
2052 + u8 cbw40_enable=0;
2053 + u8 change_band = _FALSE;
2054 + //DBG_871X("%s\n", __FUNCTION__);
2055 +
2056 + bcn_interval = (u16)pnetwork->Configuration.BeaconPeriod;
2057 + cur_channel = pnetwork->Configuration.DSConfig;
2058 + cur_bwmode = HT_CHANNEL_WIDTH_20;;
2059 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
2060 +
2061 +
2062 + //check if there is wps ie,
2063 + //if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd,
2064 + //and at first time the security ie ( RSN/WPA IE) will not include in beacon.
2065 + if(NULL == rtw_get_wps_ie(pnetwork->IEs+_FIXED_IE_LENGTH_, pnetwork->IELength-_FIXED_IE_LENGTH_, NULL, NULL))
2066 + {
2067 + pmlmeext->bstart_bss = _TRUE;
2068 + }
2069 +
2070 + //todo: update wmm, ht cap
2071 + //pmlmeinfo->WMM_enable;
2072 + //pmlmeinfo->HT_enable;
2073 + if(pmlmepriv->qospriv.qos_option)
2074 + pmlmeinfo->WMM_enable = _TRUE;
2075 +
2076 + if(pmlmepriv->htpriv.ht_option)
2077 + {
2078 + pmlmeinfo->WMM_enable = _TRUE;
2079 + pmlmeinfo->HT_enable = _TRUE;
2080 + //pmlmeinfo->HT_info_enable = _TRUE;
2081 + //pmlmeinfo->HT_caps_enable = _TRUE;
2082 +
2083 + update_hw_ht_param(padapter);
2084 + }
2085 +
2086 +
2087 + if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at first time
2088 + {
2089 + //WEP Key will be set before this function, do not clear CAM.
2090 + if ((psecuritypriv->dot11PrivacyAlgrthm != _WEP40_) && (psecuritypriv->dot11PrivacyAlgrthm != _WEP104_))
2091 + flush_all_cam_entry(padapter); //clear CAM
2092 + }
2093 +
2094 + //set MSR to AP_Mode
2095 + Set_MSR(padapter, _HW_STATE_AP_);
2096 +
2097 + //Set BSSID REG
2098 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pnetwork->MacAddress);
2099 +
2100 + //Set EDCA param reg
2101 +#ifdef CONFIG_CONCURRENT_MODE
2102 + acparm = 0x005ea42b;
2103 +#else
2104 + acparm = 0x002F3217; // VO
2105 +#endif
2106 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
2107 + acparm = 0x005E4317; // VI
2108 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
2109 + //acparm = 0x00105320; // BE
2110 + acparm = 0x005ea42b;
2111 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
2112 + acparm = 0x0000A444; // BK
2113 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
2114 +
2115 + //Set Security
2116 + val8 = (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)? 0xcc: 0xcf;
2117 + rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
2118 +
2119 + //Beacon Control related register
2120 + rtw_hal_set_hwreg(padapter, HW_VAR_BEACON_INTERVAL, (u8 *)(&bcn_interval));
2121 +
2122 + if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at first time
2123 + {
2124 + u32 initialgain;
2125 +
2126 + initialgain = 0x1e;
2127 +
2128 +
2129 + //disable dynamic functions, such as high power, DIG
2130 + //Save_DM_Func_Flag(padapter);
2131 + //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
2132 +
2133 +#ifdef CONFIG_CONCURRENT_MODE
2134 + if(padapter->adapter_type > PRIMARY_ADAPTER)
2135 + {
2136 + if(rtw_buddy_adapter_up(padapter))
2137 + {
2138 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
2139 +
2140 + //turn on dynamic functions on PRIMARY_ADAPTER, dynamic functions only runs at PRIMARY_ADAPTER
2141 + Switch_DM_Func(pbuddy_adapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
2142 +
2143 + rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
2144 + }
2145 + }
2146 + else
2147 +#endif
2148 + {
2149 + //turn on dynamic functions
2150 + Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
2151 +
2152 + rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
2153 + }
2154 +
2155 + }
2156 +
2157 + //set channel, bwmode
2158 + 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)));
2159 + if( p && ie_len)
2160 + {
2161 + pht_info = (struct HT_info_element *)(p+2);
2162 +
2163 + if( pmlmeext->cur_channel > 14 )
2164 + {
2165 + if( pregpriv->cbw40_enable & BIT(1) )
2166 + cbw40_enable = 1;
2167 + }
2168 + else
2169 + if( pregpriv->cbw40_enable & BIT(0) )
2170 + cbw40_enable = 1;
2171 +
2172 + if ((cbw40_enable) && (pht_info->infos[0] & BIT(2)))
2173 + {
2174 + //switch to the 40M Hz mode
2175 + //pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
2176 + cur_bwmode = HT_CHANNEL_WIDTH_40;
2177 + switch (pht_info->infos[0] & 0x3)
2178 + {
2179 + case 1:
2180 + //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
2181 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
2182 + break;
2183 +
2184 + case 3:
2185 + //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
2186 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
2187 + break;
2188 +
2189 + default:
2190 + //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
2191 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
2192 + break;
2193 + }
2194 +
2195 + }
2196 +
2197 + }
2198 +
2199 +#ifdef CONFIG_DUALMAC_CONCURRENT
2200 + dc_set_ap_channel_bandwidth(padapter, cur_channel, cur_ch_offset, cur_bwmode);
2201 +#else
2202 + //TODO: need to judge the phy parameters on concurrent mode for single phy
2203 + //set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
2204 +#ifdef CONFIG_CONCURRENT_MODE
2205 + if(!check_buddy_fwstate(padapter, _FW_LINKED|_FW_UNDER_LINKING|_FW_UNDER_SURVEY))
2206 + {
2207 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
2208 + }
2209 + else if(check_buddy_fwstate(padapter, _FW_LINKED)==_TRUE)//only second adapter can enter AP Mode
2210 + {
2211 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
2212 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
2213 +
2214 + //To sync cur_channel/cur_bwmode/cur_ch_offset with primary adapter
2215 + DBG_871X("primary iface is at linked state, sync cur_channel/cur_bwmode/cur_ch_offset\n");
2216 + DBG_871X("primary adapter, CH=%d, BW=%d, offset=%d\n", pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
2217 + DBG_871X("second adapter, CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
2218 +
2219 + if((cur_channel <= 14 && pbuddy_mlmeext->cur_channel >= 36) ||
2220 + (cur_channel >= 36 && pbuddy_mlmeext->cur_channel <= 14))
2221 + change_band = _TRUE;
2222 +
2223 + cur_channel = pbuddy_mlmeext->cur_channel;
2224 + if(cur_bwmode == HT_CHANNEL_WIDTH_40)
2225 + {
2226 + if(pht_info)
2227 + pht_info->infos[0] &= ~(BIT(0)|BIT(1));
2228 +
2229 + if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
2230 + {
2231 + cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
2232 +
2233 + //to update cur_ch_offset value in beacon
2234 + if(pht_info)
2235 + {
2236 + switch(cur_ch_offset)
2237 + {
2238 + case HAL_PRIME_CHNL_OFFSET_LOWER:
2239 + pht_info->infos[0] |= 0x1;
2240 + break;
2241 + case HAL_PRIME_CHNL_OFFSET_UPPER:
2242 + pht_info->infos[0] |= 0x3;
2243 + break;
2244 + case HAL_PRIME_CHNL_OFFSET_DONT_CARE:
2245 + default:
2246 + break;
2247 + }
2248 + }
2249 +
2250 + }
2251 + else if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20)
2252 + {
2253 + cur_bwmode = HT_CHANNEL_WIDTH_20;
2254 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
2255 +
2256 + if(cur_channel>0 && cur_channel<5)
2257 + {
2258 + if(pht_info)
2259 + pht_info->infos[0] |= 0x1;
2260 +
2261 + cur_bwmode = HT_CHANNEL_WIDTH_40;
2262 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
2263 + }
2264 +
2265 + if(cur_channel>7 && cur_channel<(14+1))
2266 + {
2267 + if(pht_info)
2268 + pht_info->infos[0] |= 0x3;
2269 +
2270 + cur_bwmode = HT_CHANNEL_WIDTH_40;
2271 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
2272 + }
2273 +
2274 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
2275 + }
2276 +
2277 + }
2278 +
2279 + // to update channel value in beacon
2280 + pnetwork->Configuration.DSConfig = cur_channel;
2281 + p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _DSSET_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
2282 + if(p && ie_len>0)
2283 + *(p + 2) = cur_channel;
2284 +
2285 + if(pht_info)
2286 + pht_info->primary_channel = cur_channel;
2287 +
2288 + //set buddy adapter channel, bandwidth, offeset to current adapter
2289 + pmlmeext->cur_channel = cur_channel;
2290 + pmlmeext->cur_bwmode = cur_bwmode;
2291 + pmlmeext->cur_ch_offset = cur_ch_offset;
2292 +
2293 + //buddy interface band is different from current interface, update ERP, support rate, ext support rate IE
2294 + if(change_band == _TRUE)
2295 + change_band_update_ie(padapter, pnetwork);
2296 + }
2297 +#else
2298 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
2299 +#endif //CONFIG_CONCURRENT_MODE
2300 +
2301 + DBG_871X("CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
2302 +
2303 + //
2304 + pmlmeext->cur_channel = cur_channel;
2305 + pmlmeext->cur_bwmode = cur_bwmode;
2306 + pmlmeext->cur_ch_offset = cur_ch_offset;
2307 +#endif //CONFIG_DUALMAC_CONCURRENT
2308 + pmlmeext->cur_wireless_mode = pmlmepriv->cur_network.network_type;
2309 +
2310 + //update cur_wireless_mode
2311 + update_wireless_mode(padapter);
2312 +
2313 + //update RRSR after set channel and bandwidth
2314 + UpdateBrateTbl(padapter, pnetwork->SupportedRates);
2315 + rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, pnetwork->SupportedRates);
2316 +
2317 + //udpate capability after cur_wireless_mode updated
2318 + update_capinfo(padapter, rtw_get_capability((WLAN_BSSID_EX *)pnetwork));
2319 +
2320 + //let pnetwork_mlmeext == pnetwork_mlme.
2321 + _rtw_memcpy(pnetwork_mlmeext, pnetwork, pnetwork->Length);
2322 +
2323 +#ifdef CONFIG_P2P
2324 + _rtw_memcpy(pwdinfo->p2p_group_ssid, pnetwork->Ssid.Ssid, pnetwork->Ssid.SsidLength);
2325 + pwdinfo->p2p_group_ssid_len = pnetwork->Ssid.SsidLength;
2326 +#endif //CONFIG_P2P
2327 +
2328 + if(_TRUE == pmlmeext->bstart_bss)
2329 + {
2330 + update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
2331 +
2332 +#ifndef CONFIG_INTERRUPT_BASED_TXBCN //other case will tx beacon when bcn interrupt coming in.
2333 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
2334 + //issue beacon frame
2335 + if(send_beacon(padapter)==_FAIL)
2336 + {
2337 + DBG_871X("issue_beacon, fail!\n");
2338 + }
2339 +#endif
2340 +#endif //!CONFIG_INTERRUPT_BASED_TXBCN
2341 +
2342 + }
2343 +
2344 +
2345 + //update bc/mc sta_info
2346 + update_bmc_sta(padapter);
2347 +
2348 + //pmlmeext->bstart_bss = _TRUE;
2349 +
2350 +}
2351 +
2352 +int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len)
2353 +{
2354 + int ret=_SUCCESS;
2355 + u8 *p;
2356 + u8 *pHT_caps_ie=NULL;
2357 + u8 *pHT_info_ie=NULL;
2358 + struct sta_info *psta = NULL;
2359 + u16 cap, ht_cap=_FALSE;
2360 + uint ie_len = 0;
2361 + int group_cipher, pairwise_cipher;
2362 + u8 channel, network_type, supportRate[NDIS_802_11_LENGTH_RATES_EX];
2363 + int supportRateNum = 0;
2364 + u8 OUI1[] = {0x00, 0x50, 0xf2,0x01};
2365 + u8 wps_oui[4]={0x0,0x50,0xf2,0x04};
2366 + u8 WMM_PARA_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
2367 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
2368 + struct security_priv *psecuritypriv = &padapter->securitypriv;
2369 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
2370 + WLAN_BSSID_EX *pbss_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
2371 + struct sta_priv *pstapriv = &padapter->stapriv;
2372 + u8 *ie = pbss_network->IEs;
2373 +
2374 +
2375 + /* SSID */
2376 + /* Supported rates */
2377 + /* DS Params */
2378 + /* WLAN_EID_COUNTRY */
2379 + /* ERP Information element */
2380 + /* Extended supported rates */
2381 + /* WPA/WPA2 */
2382 + /* Wi-Fi Wireless Multimedia Extensions */
2383 + /* ht_capab, ht_oper */
2384 + /* WPS IE */
2385 +
2386 + DBG_871X("%s, len=%d\n", __FUNCTION__, len);
2387 +
2388 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
2389 + return _FAIL;
2390 +
2391 +
2392 + if(len>MAX_IE_SZ)
2393 + return _FAIL;
2394 +
2395 + pbss_network->IELength = len;
2396 +
2397 + _rtw_memset(ie, 0, MAX_IE_SZ);
2398 +
2399 + _rtw_memcpy(ie, pbuf, pbss_network->IELength);
2400 +
2401 +
2402 + if(pbss_network->InfrastructureMode!=Ndis802_11APMode)
2403 + return _FAIL;
2404 +
2405 + pbss_network->Rssi = 0;
2406 +
2407 + _rtw_memcpy(pbss_network->MacAddress, myid(&(padapter->eeprompriv)), ETH_ALEN);
2408 +
2409 + //beacon interval
2410 + p = rtw_get_beacon_interval_from_ie(ie);//ie + 8; // 8: TimeStamp, 2: Beacon Interval 2:Capability
2411 + //pbss_network->Configuration.BeaconPeriod = le16_to_cpu(*(unsigned short*)p);
2412 + pbss_network->Configuration.BeaconPeriod = RTW_GET_LE16(p);
2413 +
2414 + //capability
2415 + //cap = *(unsigned short *)rtw_get_capability_from_ie(ie);
2416 + //cap = le16_to_cpu(cap);
2417 + cap = RTW_GET_LE16(ie);
2418 +
2419 + //SSID
2420 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->IELength -_BEACON_IE_OFFSET_));
2421 + if(p && ie_len>0)
2422 + {
2423 + _rtw_memset(&pbss_network->Ssid, 0, sizeof(NDIS_802_11_SSID));
2424 + _rtw_memcpy(pbss_network->Ssid.Ssid, (p + 2), ie_len);
2425 + pbss_network->Ssid.SsidLength = ie_len;
2426 + }
2427 +
2428 + //chnnel
2429 + channel = 0;
2430 + pbss_network->Configuration.Length = 0;
2431 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _DSSET_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
2432 + if(p && ie_len>0)
2433 + channel = *(p + 2);
2434 +
2435 + pbss_network->Configuration.DSConfig = channel;
2436 +
2437 +
2438 + _rtw_memset(supportRate, 0, NDIS_802_11_LENGTH_RATES_EX);
2439 + // get supported rates
2440 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
2441 + if (p != NULL)
2442 + {
2443 + _rtw_memcpy(supportRate, p+2, ie_len);
2444 + supportRateNum = ie_len;
2445 + }
2446 +
2447 + //get ext_supported rates
2448 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ie_len, pbss_network->IELength - _BEACON_IE_OFFSET_);
2449 + if (p != NULL)
2450 + {
2451 + _rtw_memcpy(supportRate+supportRateNum, p+2, ie_len);
2452 + supportRateNum += ie_len;
2453 +
2454 + }
2455 +
2456 + network_type = rtw_check_network_type(supportRate, supportRateNum, channel);
2457 +
2458 + rtw_set_supported_rate(pbss_network->SupportedRates, network_type);
2459 +
2460 +
2461 + //parsing ERP_IE
2462 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
2463 + if(p && ie_len>0)
2464 + {
2465 + ERP_IE_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)p);
2466 + }
2467 +
2468 + //update privacy/security
2469 + if (cap & BIT(4))
2470 + pbss_network->Privacy = 1;
2471 + else
2472 + pbss_network->Privacy = 0;
2473 +
2474 + psecuritypriv->wpa_psk = 0;
2475 +
2476 + //wpa2
2477 + group_cipher = 0; pairwise_cipher = 0;
2478 + psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
2479 + psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
2480 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
2481 + if(p && ie_len>0)
2482 + {
2483 + if(rtw_parse_wpa2_ie(p, ie_len+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
2484 + {
2485 + psecuritypriv->dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
2486 +
2487 + psecuritypriv->dot8021xalg = 1;//psk, todo:802.1x
2488 + psecuritypriv->wpa_psk |= BIT(1);
2489 +
2490 + psecuritypriv->wpa2_group_cipher = group_cipher;
2491 + psecuritypriv->wpa2_pairwise_cipher = pairwise_cipher;
2492 +#if 0
2493 + switch(group_cipher)
2494 + {
2495 + case WPA_CIPHER_NONE:
2496 + psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
2497 + break;
2498 + case WPA_CIPHER_WEP40:
2499 + psecuritypriv->wpa2_group_cipher = _WEP40_;
2500 + break;
2501 + case WPA_CIPHER_TKIP:
2502 + psecuritypriv->wpa2_group_cipher = _TKIP_;
2503 + break;
2504 + case WPA_CIPHER_CCMP:
2505 + psecuritypriv->wpa2_group_cipher = _AES_;
2506 + break;
2507 + case WPA_CIPHER_WEP104:
2508 + psecuritypriv->wpa2_group_cipher = _WEP104_;
2509 + break;
2510 + }
2511 +
2512 + switch(pairwise_cipher)
2513 + {
2514 + case WPA_CIPHER_NONE:
2515 + psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
2516 + break;
2517 + case WPA_CIPHER_WEP40:
2518 + psecuritypriv->wpa2_pairwise_cipher = _WEP40_;
2519 + break;
2520 + case WPA_CIPHER_TKIP:
2521 + psecuritypriv->wpa2_pairwise_cipher = _TKIP_;
2522 + break;
2523 + case WPA_CIPHER_CCMP:
2524 + psecuritypriv->wpa2_pairwise_cipher = _AES_;
2525 + break;
2526 + case WPA_CIPHER_WEP104:
2527 + psecuritypriv->wpa2_pairwise_cipher = _WEP104_;
2528 + break;
2529 + }
2530 +#endif
2531 + }
2532 +
2533 + }
2534 +
2535 + //wpa
2536 + ie_len = 0;
2537 + group_cipher = 0; pairwise_cipher = 0;
2538 + psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
2539 + psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
2540 + for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
2541 + {
2542 + p = rtw_get_ie(p, _SSN_IE_1_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
2543 + if ((p) && (_rtw_memcmp(p+2, OUI1, 4)))
2544 + {
2545 + if(rtw_parse_wpa_ie(p, ie_len+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
2546 + {
2547 + psecuritypriv->dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
2548 +
2549 + psecuritypriv->dot8021xalg = 1;//psk, todo:802.1x
2550 +
2551 + psecuritypriv->wpa_psk |= BIT(0);
2552 +
2553 + psecuritypriv->wpa_group_cipher = group_cipher;
2554 + psecuritypriv->wpa_pairwise_cipher = pairwise_cipher;
2555 +
2556 +#if 0
2557 + switch(group_cipher)
2558 + {
2559 + case WPA_CIPHER_NONE:
2560 + psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
2561 + break;
2562 + case WPA_CIPHER_WEP40:
2563 + psecuritypriv->wpa_group_cipher = _WEP40_;
2564 + break;
2565 + case WPA_CIPHER_TKIP:
2566 + psecuritypriv->wpa_group_cipher = _TKIP_;
2567 + break;
2568 + case WPA_CIPHER_CCMP:
2569 + psecuritypriv->wpa_group_cipher = _AES_;
2570 + break;
2571 + case WPA_CIPHER_WEP104:
2572 + psecuritypriv->wpa_group_cipher = _WEP104_;
2573 + break;
2574 + }
2575 +
2576 + switch(pairwise_cipher)
2577 + {
2578 + case WPA_CIPHER_NONE:
2579 + psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
2580 + break;
2581 + case WPA_CIPHER_WEP40:
2582 + psecuritypriv->wpa_pairwise_cipher = _WEP40_;
2583 + break;
2584 + case WPA_CIPHER_TKIP:
2585 + psecuritypriv->wpa_pairwise_cipher = _TKIP_;
2586 + break;
2587 + case WPA_CIPHER_CCMP:
2588 + psecuritypriv->wpa_pairwise_cipher = _AES_;
2589 + break;
2590 + case WPA_CIPHER_WEP104:
2591 + psecuritypriv->wpa_pairwise_cipher = _WEP104_;
2592 + break;
2593 + }
2594 +#endif
2595 + }
2596 +
2597 + break;
2598 +
2599 + }
2600 +
2601 + if ((p == NULL) || (ie_len == 0))
2602 + {
2603 + break;
2604 + }
2605 +
2606 + }
2607 +
2608 + //wmm
2609 + ie_len = 0;
2610 + pmlmepriv->qospriv.qos_option = 0;
2611 + if(pregistrypriv->wmm_enable)
2612 + {
2613 + for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
2614 + {
2615 + p = rtw_get_ie(p, _VENDOR_SPECIFIC_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
2616 + if((p) && _rtw_memcmp(p+2, WMM_PARA_IE, 6))
2617 + {
2618 + pmlmepriv->qospriv.qos_option = 1;
2619 +
2620 + *(p+8) |= BIT(7);//QoS Info, support U-APSD
2621 +
2622 + /* disable all ACM bits since the WMM admission control is not supported */
2623 + *(p + 10) &= ~BIT(4); /* BE */
2624 + *(p + 14) &= ~BIT(4); /* BK */
2625 + *(p + 18) &= ~BIT(4); /* VI */
2626 + *(p + 22) &= ~BIT(4); /* VO */
2627 +
2628 + break;
2629 + }
2630 +
2631 + if ((p == NULL) || (ie_len == 0))
2632 + {
2633 + break;
2634 + }
2635 + }
2636 + }
2637 +
2638 + //parsing HT_CAP_IE
2639 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_CAPABILITY_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
2640 + if(p && ie_len>0)
2641 + {
2642 + u8 rf_type;
2643 +
2644 + struct rtw_ieee80211_ht_cap *pht_cap = (struct rtw_ieee80211_ht_cap *)(p+2);
2645 +
2646 + pHT_caps_ie=p;
2647 +
2648 +
2649 + ht_cap = _TRUE;
2650 + network_type |= WIRELESS_11_24N;
2651 +
2652 +
2653 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
2654 +
2655 + if((psecuritypriv->wpa_pairwise_cipher & WPA_CIPHER_CCMP) ||
2656 + (psecuritypriv->wpa2_pairwise_cipher & WPA_CIPHER_CCMP))
2657 + {
2658 + pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&(0x07<<2));
2659 + }
2660 + else
2661 + {
2662 + pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&0x00);
2663 + }
2664 +
2665 + pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_FACTOR & 0x03); //set Max Rx AMPDU size to 64K
2666 +
2667 + if(rf_type == RF_1T1R)
2668 + {
2669 + pht_cap->supp_mcs_set[0] = 0xff;
2670 + pht_cap->supp_mcs_set[1] = 0x0;
2671 + }
2672 +
2673 + _rtw_memcpy(&pmlmepriv->htpriv.ht_cap, p+2, ie_len);
2674 +
2675 + }
2676 +
2677 + //parsing HT_INFO_IE
2678 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_ADD_INFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
2679 + if(p && ie_len>0)
2680 + {
2681 + pHT_info_ie=p;
2682 + }
2683 +
2684 + switch(network_type)
2685 + {
2686 + case WIRELESS_11B:
2687 + pbss_network->NetworkTypeInUse = Ndis802_11DS;
2688 + break;
2689 + case WIRELESS_11G:
2690 + case WIRELESS_11BG:
2691 + case WIRELESS_11G_24N:
2692 + case WIRELESS_11BG_24N:
2693 + pbss_network->NetworkTypeInUse = Ndis802_11OFDM24;
2694 + break;
2695 + case WIRELESS_11A:
2696 + pbss_network->NetworkTypeInUse = Ndis802_11OFDM5;
2697 + break;
2698 + default :
2699 + pbss_network->NetworkTypeInUse = Ndis802_11OFDM24;
2700 + break;
2701 + }
2702 +
2703 + pmlmepriv->cur_network.network_type = network_type;
2704 +
2705 +
2706 + pmlmepriv->htpriv.ht_option = _FALSE;
2707 +#ifdef CONFIG_80211N_HT
2708 + if( (psecuritypriv->wpa2_pairwise_cipher&WPA_CIPHER_TKIP) ||
2709 + (psecuritypriv->wpa_pairwise_cipher&WPA_CIPHER_TKIP))
2710 + {
2711 + //todo:
2712 + //ht_cap = _FALSE;
2713 + }
2714 +
2715 + //ht_cap
2716 + if(pregistrypriv->ht_enable && ht_cap==_TRUE)
2717 + {
2718 + pmlmepriv->htpriv.ht_option = _TRUE;
2719 + pmlmepriv->qospriv.qos_option = 1;
2720 +
2721 + if(pregistrypriv->ampdu_enable==1)
2722 + {
2723 + pmlmepriv->htpriv.ampdu_enable = _TRUE;
2724 + }
2725 +
2726 + HT_caps_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)pHT_caps_ie);
2727 +
2728 + HT_info_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)pHT_info_ie);
2729 + }
2730 +#endif
2731 +
2732 +
2733 + pbss_network->Length = get_WLAN_BSSID_EX_sz((WLAN_BSSID_EX *)pbss_network);
2734 +
2735 + //issue beacon to start bss network
2736 + start_bss_network(padapter, (u8*)pbss_network);
2737 +
2738 +
2739 + //alloc sta_info for ap itself
2740 + psta = rtw_get_stainfo(&padapter->stapriv, pbss_network->MacAddress);
2741 + if(!psta)
2742 + {
2743 + psta = rtw_alloc_stainfo(&padapter->stapriv, pbss_network->MacAddress);
2744 + if (psta == NULL)
2745 + {
2746 + return _FAIL;
2747 + }
2748 + }
2749 + psta->state |= WIFI_AP_STATE; //Aries, add,fix bug of flush_cam_entry at STOP AP mode , 0724
2750 + rtw_indicate_connect( padapter);
2751 +
2752 + pmlmepriv->cur_network.join_res = _TRUE;//for check if already set beacon
2753 +
2754 + //update bc/mc sta_info
2755 + //update_bmc_sta(padapter);
2756 +
2757 + return ret;
2758 +
2759 +}
2760 +
2761 +void rtw_set_macaddr_acl(_adapter *padapter, int mode)
2762 +{
2763 + struct sta_priv *pstapriv = &padapter->stapriv;
2764 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
2765 +
2766 + DBG_871X("%s, mode=%d\n", __func__, mode);
2767 +
2768 + pacl_list->mode = mode;
2769 +}
2770 +
2771 +int rtw_acl_add_sta(_adapter *padapter, u8 *addr)
2772 +{
2773 + _irqL irqL;
2774 + _list *plist, *phead;
2775 + u8 added = _FALSE;
2776 + int i, ret=0;
2777 + struct rtw_wlan_acl_node *paclnode;
2778 + struct sta_priv *pstapriv = &padapter->stapriv;
2779 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
2780 + _queue *pacl_node_q =&pacl_list->acl_node_q;
2781 +
2782 + DBG_871X("%s(acl_num=%d)=" MAC_FMT "\n", __func__, pacl_list->num, MAC_ARG(addr));
2783 +
2784 + if((NUM_ACL-1) < pacl_list->num)
2785 + return (-1);
2786 +
2787 +
2788 + _enter_critical_bh(&(pacl_node_q->lock), &irqL);
2789 +
2790 + phead = get_list_head(pacl_node_q);
2791 + plist = get_next(phead);
2792 +
2793 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
2794 + {
2795 + paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
2796 + plist = get_next(plist);
2797 +
2798 + if(_rtw_memcmp(paclnode->addr, addr, ETH_ALEN))
2799 + {
2800 + if(paclnode->valid == _TRUE)
2801 + {
2802 + added = _TRUE;
2803 + DBG_871X("%s, sta has been added\n", __func__);
2804 + break;
2805 + }
2806 + }
2807 + }
2808 +
2809 + _exit_critical_bh(&(pacl_node_q->lock), &irqL);
2810 +
2811 +
2812 + if(added == _TRUE)
2813 + return ret;
2814 +
2815 +
2816 + _enter_critical_bh(&(pacl_node_q->lock), &irqL);
2817 +
2818 + for(i=0; i< NUM_ACL; i++)
2819 + {
2820 + paclnode = &pacl_list->aclnode[i];
2821 +
2822 + if(paclnode->valid == _FALSE)
2823 + {
2824 + _rtw_init_listhead(&paclnode->list);
2825 +
2826 + _rtw_memcpy(paclnode->addr, addr, ETH_ALEN);
2827 +
2828 + paclnode->valid = _TRUE;
2829 +
2830 + rtw_list_insert_tail(&paclnode->list, get_list_head(pacl_node_q));
2831 +
2832 + pacl_list->num++;
2833 +
2834 + break;
2835 + }
2836 + }
2837 +
2838 + DBG_871X("%s, acl_num=%d\n", __func__, pacl_list->num);
2839 +
2840 + _exit_critical_bh(&(pacl_node_q->lock), &irqL);
2841 +
2842 + return ret;
2843 +}
2844 +
2845 +int rtw_acl_remove_sta(_adapter *padapter, u8 *addr)
2846 +{
2847 + _irqL irqL;
2848 + _list *plist, *phead;
2849 + int i, ret=0;
2850 + struct rtw_wlan_acl_node *paclnode;
2851 + struct sta_priv *pstapriv = &padapter->stapriv;
2852 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
2853 + _queue *pacl_node_q =&pacl_list->acl_node_q;
2854 +
2855 + DBG_871X("%s(acl_num=%d)=" MAC_FMT "\n", __func__, pacl_list->num, MAC_ARG(addr));
2856 +
2857 + _enter_critical_bh(&(pacl_node_q->lock), &irqL);
2858 +
2859 + phead = get_list_head(pacl_node_q);
2860 + plist = get_next(phead);
2861 +
2862 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
2863 + {
2864 + paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
2865 + plist = get_next(plist);
2866 +
2867 + if(_rtw_memcmp(paclnode->addr, addr, ETH_ALEN))
2868 + {
2869 + if(paclnode->valid == _TRUE)
2870 + {
2871 + paclnode->valid = _FALSE;
2872 +
2873 + rtw_list_delete(&paclnode->list);
2874 +
2875 + pacl_list->num--;
2876 + }
2877 + }
2878 + }
2879 +
2880 + _exit_critical_bh(&(pacl_node_q->lock), &irqL);
2881 +
2882 + DBG_871X("%s, acl_num=%d\n", __func__, pacl_list->num);
2883 +
2884 + return ret;
2885 +
2886 +}
2887 +
2888 +#ifdef CONFIG_NATIVEAP_MLME
2889 +
2890 +static void update_bcn_fixed_ie(_adapter *padapter)
2891 +{
2892 + DBG_871X("%s\n", __FUNCTION__);
2893 +
2894 +}
2895 +
2896 +static void update_bcn_erpinfo_ie(_adapter *padapter)
2897 +{
2898 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
2899 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
2900 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
2901 + WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network);
2902 + unsigned char *p, *ie = pnetwork->IEs;
2903 + u32 len = 0;
2904 +
2905 + DBG_871X("%s, ERP_enable=%d\n", __FUNCTION__, pmlmeinfo->ERP_enable);
2906 +
2907 + if(!pmlmeinfo->ERP_enable)
2908 + return;
2909 +
2910 + //parsing ERP_IE
2911 + p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &len, (pnetwork->IELength - _BEACON_IE_OFFSET_));
2912 + if(p && len>0)
2913 + {
2914 + PNDIS_802_11_VARIABLE_IEs pIE = (PNDIS_802_11_VARIABLE_IEs)p;
2915 +
2916 + if (pmlmepriv->num_sta_non_erp == 1)
2917 + pIE->data[0] |= RTW_ERP_INFO_NON_ERP_PRESENT|RTW_ERP_INFO_USE_PROTECTION;
2918 + else
2919 + pIE->data[0] &= ~(RTW_ERP_INFO_NON_ERP_PRESENT|RTW_ERP_INFO_USE_PROTECTION);
2920 +
2921 + if(pmlmepriv->num_sta_no_short_preamble > 0)
2922 + pIE->data[0] |= RTW_ERP_INFO_BARKER_PREAMBLE_MODE;
2923 + else
2924 + pIE->data[0] &= ~(RTW_ERP_INFO_BARKER_PREAMBLE_MODE);
2925 +
2926 + ERP_IE_handler(padapter, pIE);
2927 + }
2928 +
2929 +}
2930 +
2931 +static void update_bcn_htcap_ie(_adapter *padapter)
2932 +{
2933 + DBG_871X("%s\n", __FUNCTION__);
2934 +
2935 +}
2936 +
2937 +static void update_bcn_htinfo_ie(_adapter *padapter)
2938 +{
2939 + DBG_871X("%s\n", __FUNCTION__);
2940 +
2941 +}
2942 +
2943 +static void update_bcn_rsn_ie(_adapter *padapter)
2944 +{
2945 + DBG_871X("%s\n", __FUNCTION__);
2946 +
2947 +}
2948 +
2949 +static void update_bcn_wpa_ie(_adapter *padapter)
2950 +{
2951 + DBG_871X("%s\n", __FUNCTION__);
2952 +
2953 +}
2954 +
2955 +static void update_bcn_wmm_ie(_adapter *padapter)
2956 +{
2957 + DBG_871X("%s\n", __FUNCTION__);
2958 +
2959 +}
2960 +
2961 +static void update_bcn_wps_ie(_adapter *padapter)
2962 +{
2963 + u8 *pwps_ie=NULL, *pwps_ie_src, *premainder_ie, *pbackup_remainder_ie=NULL;
2964 + uint wps_ielen=0, wps_offset, remainder_ielen;
2965 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
2966 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
2967 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
2968 + WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network);
2969 + unsigned char *ie = pnetwork->IEs;
2970 + u32 ielen = pnetwork->IELength;
2971 +
2972 +
2973 + DBG_871X("%s\n", __FUNCTION__);
2974 +
2975 + pwps_ie = rtw_get_wps_ie(ie+_FIXED_IE_LENGTH_, ielen-_FIXED_IE_LENGTH_, NULL, &wps_ielen);
2976 +
2977 + if(pwps_ie==NULL || wps_ielen==0)
2978 + return;
2979 +
2980 + wps_offset = (uint)(pwps_ie-ie);
2981 +
2982 + premainder_ie = pwps_ie + wps_ielen;
2983 +
2984 + remainder_ielen = ielen - wps_offset - wps_ielen;
2985 +
2986 + if(remainder_ielen>0)
2987 + {
2988 + pbackup_remainder_ie = rtw_malloc(remainder_ielen);
2989 + if(pbackup_remainder_ie)
2990 + _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
2991 + }
2992 +
2993 +
2994 + pwps_ie_src = pmlmepriv->wps_beacon_ie;
2995 + if(pwps_ie_src == NULL)
2996 + return;
2997 +
2998 +
2999 + wps_ielen = (uint)pwps_ie_src[1];//to get ie data len
3000 + if((wps_offset+wps_ielen+2+remainder_ielen)<=MAX_IE_SZ)
3001 + {
3002 + _rtw_memcpy(pwps_ie, pwps_ie_src, wps_ielen+2);
3003 + pwps_ie += (wps_ielen+2);
3004 +
3005 + if(pbackup_remainder_ie)
3006 + _rtw_memcpy(pwps_ie, pbackup_remainder_ie, remainder_ielen);
3007 +
3008 + //update IELength
3009 + pnetwork->IELength = wps_offset + (wps_ielen+2) + remainder_ielen;
3010 + }
3011 +
3012 + if(pbackup_remainder_ie)
3013 + rtw_mfree(pbackup_remainder_ie, remainder_ielen);
3014 +
3015 +}
3016 +
3017 +static void update_bcn_p2p_ie(_adapter *padapter)
3018 +{
3019 +
3020 +}
3021 +
3022 +static void update_bcn_vendor_spec_ie(_adapter *padapter, u8*oui)
3023 +{
3024 + DBG_871X("%s\n", __FUNCTION__);
3025 +
3026 + if(_rtw_memcmp(RTW_WPA_OUI, oui, 4))
3027 + {
3028 + update_bcn_wpa_ie(padapter);
3029 + }
3030 + else if(_rtw_memcmp(WMM_OUI, oui, 4))
3031 + {
3032 + update_bcn_wmm_ie(padapter);
3033 + }
3034 + else if(_rtw_memcmp(WPS_OUI, oui, 4))
3035 + {
3036 + update_bcn_wps_ie(padapter);
3037 + }
3038 + else if(_rtw_memcmp(P2P_OUI, oui, 4))
3039 + {
3040 + update_bcn_p2p_ie(padapter);
3041 + }
3042 + else
3043 + {
3044 + DBG_871X("unknown OUI type!\n");
3045 + }
3046 +
3047 +
3048 +}
3049 +
3050 +void update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx)
3051 +{
3052 + _irqL irqL;
3053 + struct mlme_priv *pmlmepriv;
3054 + struct mlme_ext_priv *pmlmeext;
3055 + //struct mlme_ext_info *pmlmeinfo;
3056 +
3057 + //DBG_871X("%s\n", __FUNCTION__);
3058 +
3059 + if(!padapter)
3060 + return;
3061 +
3062 + pmlmepriv = &(padapter->mlmepriv);
3063 + pmlmeext = &(padapter->mlmeextpriv);
3064 + //pmlmeinfo = &(pmlmeext->mlmext_info);
3065 +
3066 + if(_FALSE == pmlmeext->bstart_bss)
3067 + return;
3068 +
3069 + _enter_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
3070 +
3071 + switch(ie_id)
3072 + {
3073 + case 0xFF:
3074 +
3075 + update_bcn_fixed_ie(padapter);//8: TimeStamp, 2: Beacon Interval 2:Capability
3076 +
3077 + break;
3078 +
3079 + case _TIM_IE_:
3080 +
3081 + update_BCNTIM(padapter);
3082 +
3083 + break;
3084 +
3085 + case _ERPINFO_IE_:
3086 +
3087 + update_bcn_erpinfo_ie(padapter);
3088 +
3089 + break;
3090 +
3091 + case _HT_CAPABILITY_IE_:
3092 +
3093 + update_bcn_htcap_ie(padapter);
3094 +
3095 + break;
3096 +
3097 + case _RSN_IE_2_:
3098 +
3099 + update_bcn_rsn_ie(padapter);
3100 +
3101 + break;
3102 +
3103 + case _HT_ADD_INFO_IE_:
3104 +
3105 + update_bcn_htinfo_ie(padapter);
3106 +
3107 + break;
3108 +
3109 + case _VENDOR_SPECIFIC_IE_:
3110 +
3111 + update_bcn_vendor_spec_ie(padapter, oui);
3112 +
3113 + break;
3114 +
3115 + default:
3116 + break;
3117 + }
3118 +
3119 + pmlmepriv->update_bcn = _TRUE;
3120 +
3121 + _exit_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
3122 +
3123 +#ifndef CONFIG_INTERRUPT_BASED_TXBCN
3124 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
3125 + if(tx)
3126 + {
3127 + //send_beacon(padapter);//send_beacon must execute on TSR level
3128 + set_tx_beacon_cmd(padapter);
3129 + }
3130 +#else
3131 + {
3132 + //PCI will issue beacon when BCN interrupt occurs.
3133 + }
3134 +#endif
3135 +#endif //!CONFIG_INTERRUPT_BASED_TXBCN
3136 +
3137 +}
3138 +
3139 +#ifdef CONFIG_80211N_HT
3140 +
3141 +/*
3142 +op_mode
3143 +Set to 0 (HT pure) under the followign conditions
3144 + - all STAs in the BSS are 20/40 MHz HT in 20/40 MHz BSS or
3145 + - all STAs in the BSS are 20 MHz HT in 20 MHz BSS
3146 +Set to 1 (HT non-member protection) if there may be non-HT STAs
3147 + in both the primary and the secondary channel
3148 +Set to 2 if only HT STAs are associated in BSS,
3149 + however and at least one 20 MHz HT STA is associated
3150 +Set to 3 (HT mixed mode) when one or more non-HT STAs are associated
3151 + (currently non-GF HT station is considered as non-HT STA also)
3152 +*/
3153 +static int rtw_ht_operation_update(_adapter *padapter)
3154 +{
3155 + u16 cur_op_mode, new_op_mode;
3156 + int op_mode_changes = 0;
3157 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3158 + struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
3159 +
3160 + if(pmlmepriv->htpriv.ht_option == _TRUE)
3161 + return 0;
3162 +
3163 + //if (!iface->conf->ieee80211n || iface->conf->ht_op_mode_fixed)
3164 + // return 0;
3165 +
3166 + DBG_871X("%s current operation mode=0x%X\n",
3167 + __FUNCTION__, pmlmepriv->ht_op_mode);
3168 +
3169 + if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT)
3170 + && pmlmepriv->num_sta_ht_no_gf) {
3171 + pmlmepriv->ht_op_mode |=
3172 + HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
3173 + op_mode_changes++;
3174 + } else if ((pmlmepriv->ht_op_mode &
3175 + HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT) &&
3176 + pmlmepriv->num_sta_ht_no_gf == 0) {
3177 + pmlmepriv->ht_op_mode &=
3178 + ~HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
3179 + op_mode_changes++;
3180 + }
3181 +
3182 + if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
3183 + (pmlmepriv->num_sta_no_ht || pmlmepriv->olbc_ht)) {
3184 + pmlmepriv->ht_op_mode |= HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
3185 + op_mode_changes++;
3186 + } else if ((pmlmepriv->ht_op_mode &
3187 + HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
3188 + (pmlmepriv->num_sta_no_ht == 0 && !pmlmepriv->olbc_ht)) {
3189 + pmlmepriv->ht_op_mode &=
3190 + ~HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
3191 + op_mode_changes++;
3192 + }
3193 +
3194 + /* Note: currently we switch to the MIXED op mode if HT non-greenfield
3195 + * station is associated. Probably it's a theoretical case, since
3196 + * it looks like all known HT STAs support greenfield.
3197 + */
3198 + new_op_mode = 0;
3199 + if (pmlmepriv->num_sta_no_ht ||
3200 + (pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT))
3201 + new_op_mode = OP_MODE_MIXED;
3202 + else if ((phtpriv_ap->ht_cap.cap_info & IEEE80211_HT_CAP_SUP_WIDTH)
3203 + && pmlmepriv->num_sta_ht_20mhz)
3204 + new_op_mode = OP_MODE_20MHZ_HT_STA_ASSOCED;
3205 + else if (pmlmepriv->olbc_ht)
3206 + new_op_mode = OP_MODE_MAY_BE_LEGACY_STAS;
3207 + else
3208 + new_op_mode = OP_MODE_PURE;
3209 +
3210 + cur_op_mode = pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_OP_MODE_MASK;
3211 + if (cur_op_mode != new_op_mode) {
3212 + pmlmepriv->ht_op_mode &= ~HT_INFO_OPERATION_MODE_OP_MODE_MASK;
3213 + pmlmepriv->ht_op_mode |= new_op_mode;
3214 + op_mode_changes++;
3215 + }
3216 +
3217 + DBG_871X("%s new operation mode=0x%X changes=%d\n",
3218 + __FUNCTION__, pmlmepriv->ht_op_mode, op_mode_changes);
3219 +
3220 + return op_mode_changes;
3221 +
3222 +}
3223 +
3224 +#endif /* CONFIG_80211N_HT */
3225 +
3226 +void associated_clients_update(_adapter *padapter, u8 updated)
3227 +{
3228 + //update associcated stations cap.
3229 + if(updated == _TRUE)
3230 + {
3231 + _irqL irqL;
3232 + _list *phead, *plist;
3233 + struct sta_info *psta=NULL;
3234 + struct sta_priv *pstapriv = &padapter->stapriv;
3235 +
3236 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3237 +
3238 + phead = &pstapriv->asoc_list;
3239 + plist = get_next(phead);
3240 +
3241 + //check asoc_queue
3242 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
3243 + {
3244 + psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
3245 +
3246 + plist = get_next(plist);
3247 +
3248 + VCS_update(padapter, psta);
3249 + }
3250 +
3251 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3252 +
3253 + }
3254 +
3255 +}
3256 +
3257 +/* called > TSR LEVEL for USB or SDIO Interface*/
3258 +void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta)
3259 +{
3260 + u8 beacon_updated = _FALSE;
3261 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3262 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
3263 +
3264 +
3265 +#if 0
3266 + if (!(psta->capability & WLAN_CAPABILITY_SHORT_PREAMBLE) &&
3267 + !psta->no_short_preamble_set) {
3268 + psta->no_short_preamble_set = 1;
3269 + pmlmepriv->num_sta_no_short_preamble++;
3270 + if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
3271 + (pmlmepriv->num_sta_no_short_preamble == 1))
3272 + ieee802_11_set_beacons(hapd->iface);
3273 + }
3274 +#endif
3275 +
3276 +
3277 + if(!(psta->flags & WLAN_STA_SHORT_PREAMBLE))
3278 + {
3279 + if(!psta->no_short_preamble_set)
3280 + {
3281 + psta->no_short_preamble_set = 1;
3282 +
3283 + pmlmepriv->num_sta_no_short_preamble++;
3284 +
3285 + if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
3286 + (pmlmepriv->num_sta_no_short_preamble == 1))
3287 + {
3288 + beacon_updated = _TRUE;
3289 + update_beacon(padapter, 0xFF, NULL, _TRUE);
3290 + }
3291 +
3292 + }
3293 + }
3294 + else
3295 + {
3296 + if(psta->no_short_preamble_set)
3297 + {
3298 + psta->no_short_preamble_set = 0;
3299 +
3300 + pmlmepriv->num_sta_no_short_preamble--;
3301 +
3302 + if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
3303 + (pmlmepriv->num_sta_no_short_preamble == 0))
3304 + {
3305 + beacon_updated = _TRUE;
3306 + update_beacon(padapter, 0xFF, NULL, _TRUE);
3307 + }
3308 +
3309 + }
3310 + }
3311 +
3312 +#if 0
3313 + if (psta->flags & WLAN_STA_NONERP && !psta->nonerp_set) {
3314 + psta->nonerp_set = 1;
3315 + pmlmepriv->num_sta_non_erp++;
3316 + if (pmlmepriv->num_sta_non_erp == 1)
3317 + ieee802_11_set_beacons(hapd->iface);
3318 + }
3319 +#endif
3320 +
3321 + if(psta->flags & WLAN_STA_NONERP)
3322 + {
3323 + if(!psta->nonerp_set)
3324 + {
3325 + psta->nonerp_set = 1;
3326 +
3327 + pmlmepriv->num_sta_non_erp++;
3328 +
3329 + if (pmlmepriv->num_sta_non_erp == 1)
3330 + {
3331 + beacon_updated = _TRUE;
3332 + update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
3333 + }
3334 + }
3335 +
3336 + }
3337 + else
3338 + {
3339 + if(psta->nonerp_set)
3340 + {
3341 + psta->nonerp_set = 0;
3342 +
3343 + pmlmepriv->num_sta_non_erp--;
3344 +
3345 + if (pmlmepriv->num_sta_non_erp == 0)
3346 + {
3347 + beacon_updated = _TRUE;
3348 + update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
3349 + }
3350 + }
3351 +
3352 + }
3353 +
3354 +
3355 +#if 0
3356 + if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT) &&
3357 + !psta->no_short_slot_time_set) {
3358 + psta->no_short_slot_time_set = 1;
3359 + pmlmepriv->num_sta_no_short_slot_time++;
3360 + if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
3361 + (pmlmepriv->num_sta_no_short_slot_time == 1))
3362 + ieee802_11_set_beacons(hapd->iface);
3363 + }
3364 +#endif
3365 +
3366 + if(!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT))
3367 + {
3368 + if(!psta->no_short_slot_time_set)
3369 + {
3370 + psta->no_short_slot_time_set = 1;
3371 +
3372 + pmlmepriv->num_sta_no_short_slot_time++;
3373 +
3374 + if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
3375 + (pmlmepriv->num_sta_no_short_slot_time == 1))
3376 + {
3377 + beacon_updated = _TRUE;
3378 + update_beacon(padapter, 0xFF, NULL, _TRUE);
3379 + }
3380 +
3381 + }
3382 + }
3383 + else
3384 + {
3385 + if(psta->no_short_slot_time_set)
3386 + {
3387 + psta->no_short_slot_time_set = 0;
3388 +
3389 + pmlmepriv->num_sta_no_short_slot_time--;
3390 +
3391 + if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
3392 + (pmlmepriv->num_sta_no_short_slot_time == 0))
3393 + {
3394 + beacon_updated = _TRUE;
3395 + update_beacon(padapter, 0xFF, NULL, _TRUE);
3396 + }
3397 + }
3398 + }
3399 +
3400 +#ifdef CONFIG_80211N_HT
3401 +
3402 + if (psta->flags & WLAN_STA_HT)
3403 + {
3404 + u16 ht_capab = le16_to_cpu(psta->htpriv.ht_cap.cap_info);
3405 +
3406 + DBG_871X("HT: STA " MAC_FMT " HT Capabilities "
3407 + "Info: 0x%04x\n", MAC_ARG(psta->hwaddr), ht_capab);
3408 +
3409 + if (psta->no_ht_set) {
3410 + psta->no_ht_set = 0;
3411 + pmlmepriv->num_sta_no_ht--;
3412 + }
3413 +
3414 + if ((ht_capab & IEEE80211_HT_CAP_GRN_FLD) == 0) {
3415 + if (!psta->no_ht_gf_set) {
3416 + psta->no_ht_gf_set = 1;
3417 + pmlmepriv->num_sta_ht_no_gf++;
3418 + }
3419 + DBG_871X("%s STA " MAC_FMT " - no "
3420 + "greenfield, num of non-gf stations %d\n",
3421 + __FUNCTION__, MAC_ARG(psta->hwaddr),
3422 + pmlmepriv->num_sta_ht_no_gf);
3423 + }
3424 +
3425 + if ((ht_capab & IEEE80211_HT_CAP_SUP_WIDTH) == 0) {
3426 + if (!psta->ht_20mhz_set) {
3427 + psta->ht_20mhz_set = 1;
3428 + pmlmepriv->num_sta_ht_20mhz++;
3429 + }
3430 + DBG_871X("%s STA " MAC_FMT " - 20 MHz HT, "
3431 + "num of 20MHz HT STAs %d\n",
3432 + __FUNCTION__, MAC_ARG(psta->hwaddr),
3433 + pmlmepriv->num_sta_ht_20mhz);
3434 + }
3435 +
3436 + }
3437 + else
3438 + {
3439 + if (!psta->no_ht_set) {
3440 + psta->no_ht_set = 1;
3441 + pmlmepriv->num_sta_no_ht++;
3442 + }
3443 + if(pmlmepriv->htpriv.ht_option == _TRUE) {
3444 + DBG_871X("%s STA " MAC_FMT
3445 + " - no HT, num of non-HT stations %d\n",
3446 + __FUNCTION__, MAC_ARG(psta->hwaddr),
3447 + pmlmepriv->num_sta_no_ht);
3448 + }
3449 + }
3450 +
3451 + if (rtw_ht_operation_update(padapter) > 0)
3452 + {
3453 + update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
3454 + update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
3455 + }
3456 +
3457 +#endif /* CONFIG_80211N_HT */
3458 +
3459 + //update associcated stations cap.
3460 + associated_clients_update(padapter, beacon_updated);
3461 +
3462 + DBG_871X("%s, updated=%d\n", __func__, beacon_updated);
3463 +
3464 +}
3465 +
3466 +u8 bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta)
3467 +{
3468 + u8 beacon_updated = _FALSE;
3469 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3470 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
3471 +
3472 + if(!psta)
3473 + return beacon_updated;
3474 +
3475 + if (psta->no_short_preamble_set) {
3476 + psta->no_short_preamble_set = 0;
3477 + pmlmepriv->num_sta_no_short_preamble--;
3478 + if (pmlmeext->cur_wireless_mode > WIRELESS_11B
3479 + && pmlmepriv->num_sta_no_short_preamble == 0)
3480 + {
3481 + beacon_updated = _TRUE;
3482 + update_beacon(padapter, 0xFF, NULL, _TRUE);
3483 + }
3484 + }
3485 +
3486 + if (psta->nonerp_set) {
3487 + psta->nonerp_set = 0;
3488 + pmlmepriv->num_sta_non_erp--;
3489 + if (pmlmepriv->num_sta_non_erp == 0)
3490 + {
3491 + beacon_updated = _TRUE;
3492 + update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
3493 + }
3494 + }
3495 +
3496 + if (psta->no_short_slot_time_set) {
3497 + psta->no_short_slot_time_set = 0;
3498 + pmlmepriv->num_sta_no_short_slot_time--;
3499 + if (pmlmeext->cur_wireless_mode > WIRELESS_11B
3500 + && pmlmepriv->num_sta_no_short_slot_time == 0)
3501 + {
3502 + beacon_updated = _TRUE;
3503 + update_beacon(padapter, 0xFF, NULL, _TRUE);
3504 + }
3505 + }
3506 +
3507 +#ifdef CONFIG_80211N_HT
3508 +
3509 + if (psta->no_ht_gf_set) {
3510 + psta->no_ht_gf_set = 0;
3511 + pmlmepriv->num_sta_ht_no_gf--;
3512 + }
3513 +
3514 + if (psta->no_ht_set) {
3515 + psta->no_ht_set = 0;
3516 + pmlmepriv->num_sta_no_ht--;
3517 + }
3518 +
3519 + if (psta->ht_20mhz_set) {
3520 + psta->ht_20mhz_set = 0;
3521 + pmlmepriv->num_sta_ht_20mhz--;
3522 + }
3523 +
3524 + if (rtw_ht_operation_update(padapter) > 0)
3525 + {
3526 + update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
3527 + update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
3528 + }
3529 +
3530 +#endif /* CONFIG_80211N_HT */
3531 +
3532 + //update associcated stations cap.
3533 + //associated_clients_update(padapter, beacon_updated); //move it to avoid deadlock
3534 +
3535 + DBG_871X("%s, updated=%d\n", __func__, beacon_updated);
3536 +
3537 + return beacon_updated;
3538 +
3539 +}
3540 +
3541 +u8 ap_free_sta(_adapter *padapter, struct sta_info *psta, bool active, u16 reason)
3542 +{
3543 + _irqL irqL;
3544 + u8 beacon_updated = _FALSE;
3545 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3546 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
3547 + struct sta_priv *pstapriv = &padapter->stapriv;
3548 +
3549 + if(!psta)
3550 + return beacon_updated;
3551 +
3552 + if (active == _TRUE)
3553 + {
3554 +#ifdef CONFIG_80211N_HT
3555 + //tear down Rx AMPDU
3556 + send_delba(padapter, 0, psta->hwaddr);// recipient
3557 +
3558 + //tear down TX AMPDU
3559 + send_delba(padapter, 1, psta->hwaddr);// // originator
3560 +
3561 +#endif //CONFIG_80211N_HT
3562 +
3563 + issue_deauth(padapter, psta->hwaddr, reason);
3564 + }
3565 +
3566 + psta->htpriv.agg_enable_bitmap = 0x0;//reset
3567 + psta->htpriv.candidate_tid_bitmap = 0x0;//reset
3568 +
3569 +
3570 + //report_del_sta_event(padapter, psta->hwaddr, reason);
3571 +
3572 + //clear cam entry / key
3573 + //clear_cam_entry(padapter, (psta->mac_id + 3));
3574 + rtw_clearstakey_cmd(padapter, (u8*)psta, (u8)(psta->mac_id + 3), _TRUE);
3575 +
3576 +
3577 + _enter_critical_bh(&psta->lock, &irqL);
3578 + psta->state &= ~_FW_LINKED;
3579 + _exit_critical_bh(&psta->lock, &irqL);
3580 +
3581 + #ifdef CONFIG_IOCTL_CFG80211
3582 + if (1) {
3583 + #ifdef COMPAT_KERNEL_RELEASE
3584 + rtw_cfg80211_indicate_sta_disassoc(padapter, psta->hwaddr, reason);
3585 + #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
3586 + rtw_cfg80211_indicate_sta_disassoc(padapter, psta->hwaddr, reason);
3587 + #else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
3588 + /* will call rtw_cfg80211_indicate_sta_disassoc() in cmd_thread for old API context */
3589 + #endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
3590 + } else
3591 + #endif //CONFIG_IOCTL_CFG80211
3592 + {
3593 + rtw_indicate_sta_disassoc_event(padapter, psta);
3594 + }
3595 +
3596 + report_del_sta_event(padapter, psta->hwaddr, reason);
3597 +
3598 + beacon_updated = bss_cap_update_on_sta_leave(padapter, psta);
3599 +
3600 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
3601 + rtw_free_stainfo(padapter, psta);
3602 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
3603 +
3604 +
3605 + return beacon_updated;
3606 +
3607 +}
3608 +
3609 +int rtw_ap_inform_ch_switch(_adapter *padapter, u8 new_ch, u8 ch_offset)
3610 +{
3611 + _irqL irqL;
3612 + _list *phead, *plist;
3613 + int ret=0;
3614 + struct sta_info *psta = NULL;
3615 + struct sta_priv *pstapriv = &padapter->stapriv;
3616 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
3617 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
3618 + u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
3619 +
3620 + if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
3621 + return ret;
3622 +
3623 + DBG_871X(FUNC_NDEV_FMT" with ch:%u, offset:%u\n",
3624 + FUNC_NDEV_ARG(padapter->pnetdev), new_ch, ch_offset);
3625 +
3626 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3627 + phead = &pstapriv->asoc_list;
3628 + plist = get_next(phead);
3629 +
3630 + /* for each sta in asoc_queue */
3631 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
3632 + {
3633 + psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
3634 + plist = get_next(plist);
3635 +
3636 + issue_action_spct_ch_switch(padapter, psta->hwaddr, new_ch, ch_offset);
3637 + psta->expire_to = ((pstapriv->expire_to * 2) > 5) ? 5 : (pstapriv->expire_to * 2);
3638 + }
3639 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3640 +
3641 + issue_action_spct_ch_switch(padapter, bc_addr, new_ch, ch_offset);
3642 +
3643 + return ret;
3644 +}
3645 +
3646 +int rtw_sta_flush(_adapter *padapter)
3647 +{
3648 + _irqL irqL;
3649 + _list *phead, *plist;
3650 + int ret=0;
3651 + struct sta_info *psta = NULL;
3652 + struct sta_priv *pstapriv = &padapter->stapriv;
3653 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
3654 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
3655 + u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
3656 + u8 chk_alive_num = 0;
3657 + char chk_alive_list[NUM_STA];
3658 + int i;
3659 +
3660 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(padapter->pnetdev));
3661 +
3662 + if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
3663 + return ret;
3664 +
3665 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3666 + phead = &pstapriv->asoc_list;
3667 + plist = get_next(phead);
3668 +
3669 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
3670 + int stainfo_offset;
3671 +
3672 + psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
3673 + plist = get_next(plist);
3674 +
3675 + /* Remove sta from asoc_list */
3676 + rtw_list_delete(&psta->asoc_list);
3677 + pstapriv->asoc_list_cnt--;
3678 +
3679 + /* Keep sta for ap_free_sta() beyond this asoc_list loop */
3680 + stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
3681 + if (stainfo_offset_valid(stainfo_offset)) {
3682 + chk_alive_list[chk_alive_num++] = stainfo_offset;
3683 + }
3684 + }
3685 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3686 +
3687 +
3688 + /* For each sta in chk_alive_list, call ap_free_sta */
3689 + for (i = 0; i < chk_alive_num; i++) {
3690 + psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
3691 + ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_DEAUTH_LEAVING);
3692 + }
3693 +
3694 + issue_deauth(padapter, bc_addr, WLAN_REASON_DEAUTH_LEAVING);
3695 +
3696 + associated_clients_update(padapter, _TRUE);
3697 +
3698 + return ret;
3699 +
3700 +}
3701 +
3702 +/* called > TSR LEVEL for USB or SDIO Interface*/
3703 +void sta_info_update(_adapter *padapter, struct sta_info *psta)
3704 +{
3705 + int flags = psta->flags;
3706 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3707 +
3708 +
3709 + //update wmm cap.
3710 + if(WLAN_STA_WME&flags)
3711 + psta->qos_option = 1;
3712 + else
3713 + psta->qos_option = 0;
3714 +
3715 + if(pmlmepriv->qospriv.qos_option == 0)
3716 + psta->qos_option = 0;
3717 +
3718 +
3719 +#ifdef CONFIG_80211N_HT
3720 + //update 802.11n ht cap.
3721 + if(WLAN_STA_HT&flags)
3722 + {
3723 + psta->htpriv.ht_option = _TRUE;
3724 + psta->qos_option = 1;
3725 + }
3726 + else
3727 + {
3728 + psta->htpriv.ht_option = _FALSE;
3729 + }
3730 +
3731 + if(pmlmepriv->htpriv.ht_option == _FALSE)
3732 + psta->htpriv.ht_option = _FALSE;
3733 +#endif
3734 +
3735 +
3736 + update_sta_info_apmode(padapter, psta);
3737 +
3738 +
3739 +}
3740 +
3741 +/* called >= TSR LEVEL for USB or SDIO Interface*/
3742 +void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta)
3743 +{
3744 + if(psta->state & _FW_LINKED)
3745 + {
3746 + //add ratid
3747 + add_RATid(padapter, psta);
3748 + }
3749 +}
3750 +
3751 +/* restore hw setting from sw data structures */
3752 +void rtw_ap_restore_network(_adapter *padapter)
3753 +{
3754 + struct mlme_priv *mlmepriv = &padapter->mlmepriv;
3755 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
3756 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
3757 + struct sta_priv * pstapriv = &padapter->stapriv;
3758 + struct sta_info *psta;
3759 + struct security_priv* psecuritypriv=&(padapter->securitypriv);
3760 + _irqL irqL;
3761 + _list *phead, *plist;
3762 + u8 chk_alive_num = 0;
3763 + char chk_alive_list[NUM_STA];
3764 + int i;
3765 +
3766 + rtw_setopmode_cmd(padapter, Ndis802_11APMode);
3767 +
3768 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
3769 +
3770 + start_bss_network(padapter, (u8*)&mlmepriv->cur_network.network);
3771 +
3772 + if((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
3773 + (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
3774 + {
3775 + /* restore group key, WEP keys is restored in ips_leave() */
3776 + rtw_set_key(padapter, psecuritypriv, psecuritypriv->dot118021XGrpKeyid, 0);
3777 + }
3778 +
3779 + /* per sta pairwise key and settings */
3780 + if((padapter->securitypriv.dot11PrivacyAlgrthm != _TKIP_) &&
3781 + (padapter->securitypriv.dot11PrivacyAlgrthm != _AES_)) {
3782 + return;
3783 + }
3784 +
3785 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3786 +
3787 + phead = &pstapriv->asoc_list;
3788 + plist = get_next(phead);
3789 +
3790 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
3791 + int stainfo_offset;
3792 +
3793 + psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
3794 + plist = get_next(plist);
3795 +
3796 + stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
3797 + if (stainfo_offset_valid(stainfo_offset)) {
3798 + chk_alive_list[chk_alive_num++] = stainfo_offset;
3799 + }
3800 + }
3801 +
3802 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
3803 +
3804 + for (i = 0; i < chk_alive_num; i++) {
3805 + psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
3806 +
3807 + if (psta == NULL) {
3808 + DBG_871X(FUNC_ADPT_FMT" sta_info is null\n", FUNC_ADPT_ARG(padapter));
3809 + } else if (psta->state &_FW_LINKED) {
3810 + Update_RA_Entry(padapter, psta->mac_id);
3811 + //pairwise key
3812 + rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE);
3813 + }
3814 + }
3815 +
3816 +}
3817 +
3818 +void start_ap_mode(_adapter *padapter)
3819 +{
3820 + int i;
3821 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3822 + struct sta_priv *pstapriv = &padapter->stapriv;
3823 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
3824 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
3825 +
3826 + pmlmepriv->update_bcn = _FALSE;
3827 +
3828 + //init_mlme_ap_info(padapter);
3829 + pmlmeext->bstart_bss = _FALSE;
3830 +
3831 + pmlmepriv->num_sta_non_erp = 0;
3832 +
3833 + pmlmepriv->num_sta_no_short_slot_time = 0;
3834 +
3835 + pmlmepriv->num_sta_no_short_preamble = 0;
3836 +
3837 + pmlmepriv->num_sta_ht_no_gf = 0;
3838 +
3839 + pmlmepriv->num_sta_no_ht = 0;
3840 +
3841 + pmlmepriv->num_sta_ht_20mhz = 0;
3842 +
3843 + pmlmepriv->olbc = _FALSE;
3844 +
3845 + pmlmepriv->olbc_ht = _FALSE;
3846 +
3847 +#ifdef CONFIG_80211N_HT
3848 + pmlmepriv->ht_op_mode = 0;
3849 +#endif
3850 +
3851 + for(i=0; i<NUM_STA; i++)
3852 + pstapriv->sta_aid[i] = NULL;
3853 +
3854 + pmlmepriv->wps_beacon_ie = NULL;
3855 + pmlmepriv->wps_probe_resp_ie = NULL;
3856 + pmlmepriv->wps_assoc_resp_ie = NULL;
3857 +
3858 + pmlmepriv->p2p_beacon_ie = NULL;
3859 + pmlmepriv->p2p_probe_resp_ie = NULL;
3860 +
3861 +
3862 + //for ACL
3863 + _rtw_init_listhead(&(pacl_list->acl_node_q.queue));
3864 + pacl_list->num = 0;
3865 + pacl_list->mode = 0;
3866 + for(i = 0; i < NUM_ACL; i++)
3867 + {
3868 + _rtw_init_listhead(&pacl_list->aclnode[i].list);
3869 + pacl_list->aclnode[i].valid = _FALSE;
3870 + }
3871 +
3872 +}
3873 +
3874 +void stop_ap_mode(_adapter *padapter)
3875 +{
3876 + _irqL irqL;
3877 + _list *phead, *plist;
3878 + struct rtw_wlan_acl_node *paclnode;
3879 + struct sta_info *psta=NULL;
3880 + struct sta_priv *pstapriv = &padapter->stapriv;
3881 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
3882 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
3883 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
3884 + _queue *pacl_node_q =&pacl_list->acl_node_q;
3885 +
3886 + pmlmepriv->update_bcn = _FALSE;
3887 + pmlmeext->bstart_bss = _FALSE;
3888 + //_rtw_spinlock_free(&pmlmepriv->bcn_update_lock);
3889 +
3890 + //reset and init security priv , this can refine with rtw_reset_securitypriv
3891 + _rtw_memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct security_priv));
3892 + padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
3893 + padapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled;
3894 +
3895 + //for ACL
3896 + _enter_critical_bh(&(pacl_node_q->lock), &irqL);
3897 + phead = get_list_head(pacl_node_q);
3898 + plist = get_next(phead);
3899 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
3900 + {
3901 + paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
3902 + plist = get_next(plist);
3903 +
3904 + if(paclnode->valid == _TRUE)
3905 + {
3906 + paclnode->valid = _FALSE;
3907 +
3908 + rtw_list_delete(&paclnode->list);
3909 +
3910 + pacl_list->num--;
3911 + }
3912 + }
3913 + _exit_critical_bh(&(pacl_node_q->lock), &irqL);
3914 +
3915 + DBG_871X("%s, free acl_node_queue, num=%d\n", __func__, pacl_list->num);
3916 +
3917 + rtw_sta_flush(padapter);
3918 +
3919 + //free_assoc_sta_resources
3920 + rtw_free_all_stainfo(padapter);
3921 +
3922 + psta = rtw_get_bcmc_stainfo(padapter);
3923 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
3924 + rtw_free_stainfo(padapter, psta);
3925 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
3926 +
3927 + rtw_init_bcmc_stainfo(padapter);
3928 +
3929 + rtw_free_mlme_priv_ie_data(pmlmepriv);
3930 +
3931 +}
3932 +
3933 +#endif //CONFIG_NATIVEAP_MLME
3934 +#endif //CONFIG_AP_MODE
3935 +
3936 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c b/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c
3937 index 1fcdf1e..6bb924e 100644
3938 --- a/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c
3939 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c
3940 @@ -126,10 +126,10 @@ static int skb_pull_and_merge(struct sk_buff *skb, unsigned char *src, int len)
3941 int tail_len;
3942 unsigned long end, tail;
3943
3944 - if ((src+len) > skb->tail || skb->len < len)
3945 + if ((src+len) > skb_tail_pointer(skb) || skb->len < len)
3946 return -1;
3947
3948 - tail = (unsigned long)skb->tail;
3949 + tail = (unsigned long)skb_tail_pointer(skb);
3950 end = (unsigned long)src+len;
3951 if (tail < end)
3952 return -1;
3953 @@ -522,7 +522,7 @@ static void __nat25_db_network_insert(_adapter *priv,
3954 db = db->next_hash;
3955 }
3956
3957 - db = (struct nat25_network_db_entry *) _rtw_malloc(sizeof(*db));
3958 + db = (struct nat25_network_db_entry *) rtw_malloc(sizeof(*db));
3959 if(db == NULL) {
3960 _exit_critical_bh(&priv->br_ext_lock, &irqL);
3961 return;
3962 @@ -633,7 +633,7 @@ void nat25_db_cleanup(_adapter *priv)
3963 int i;
3964 _irqL irqL;
3965 _enter_critical_bh(&priv->br_ext_lock, &irqL);
3966 -
3967 +
3968 for(i=0; i<NAT25_HASH_SIZE; i++)
3969 {
3970 struct nat25_network_db_entry *f;
3971 @@ -649,7 +649,7 @@ void nat25_db_cleanup(_adapter *priv)
3972 priv->scdb_entry = NULL;
3973 }
3974 __network_hash_unlink(f);
3975 - _rtw_mfree((u8 *) f, sizeof(struct nat25_network_db_entry));
3976 + rtw_mfree((u8 *) f, sizeof(struct nat25_network_db_entry));
3977
3978 f = g;
3979 }
3980 @@ -664,7 +664,7 @@ void nat25_db_expire(_adapter *priv)
3981 int i;
3982 _irqL irqL;
3983 _enter_critical_bh(&priv->br_ext_lock, &irqL);
3984 -
3985 +
3986 //if(!priv->ethBrExtInfo.nat25_disable)
3987 {
3988 for (i=0; i<NAT25_HASH_SIZE; i++)
3989 @@ -739,7 +739,7 @@ void nat25_db_expire(_adapter *priv)
3990 priv->scdb_entry = NULL;
3991 }
3992 __network_hash_unlink(f);
3993 - _rtw_mfree((u8 *) f, sizeof(struct nat25_network_db_entry));
3994 + rtw_mfree((u8 *) f, sizeof(struct nat25_network_db_entry));
3995 }
3996 }
3997
3998 @@ -848,6 +848,11 @@ int nat25_db_handle(_adapter *priv, struct sk_buff *skb, int method)
3999 else {
4000 // forward unknow IP packet to upper TCP/IP
4001 DEBUG_INFO("NAT25: Replace DA with BR's MAC\n");
4002 + if ( (*(u32 *)priv->br_mac) == 0 && (*(u16 *)(priv->br_mac+4)) == 0 ) {
4003 + void netdev_br_init(struct net_device *netdev);
4004 + printk("Re-init netdev_br_init() due to br_mac==0!\n");
4005 + netdev_br_init(priv->pnetdev);
4006 + }
4007 memcpy(skb->data, priv->br_mac, ETH_ALEN);
4008 }
4009 }
4010 @@ -1533,7 +1538,7 @@ int nat25_handle_frame(_adapter *priv, struct sk_buff *skb)
4011 _exit_critical_bh(&priv->br_ext_lock, &irqL);
4012
4013 retval = nat25_db_handle(priv, skb, NAT25_LOOKUP);
4014 - }
4015 + }
4016 }
4017 else {
4018 if (((*((unsigned short *)(skb->data+ETH_ALEN*2)) == __constant_htons(ETH_P_IP)) &&
4019 @@ -1633,13 +1638,13 @@ void dhcp_flag_bcast(_adapter *priv, struct sk_buff *skb)
4020
4021 if(iph->protocol == IPPROTO_UDP) // UDP
4022 {
4023 - struct udphdr *udph = (struct udphdr *)((unsigned int)iph + (iph->ihl << 2));
4024 + struct udphdr *udph = (struct udphdr *)((SIZE_PTR)iph + (iph->ihl << 2));
4025
4026 if((udph->source == __constant_htons(CLIENT_PORT))
4027 && (udph->dest == __constant_htons(SERVER_PORT))) // DHCP request
4028 {
4029 struct dhcpMessage *dhcph =
4030 - (struct dhcpMessage *)((unsigned int)udph + sizeof(struct udphdr));
4031 + (struct dhcpMessage *)((SIZE_PTR)udph + sizeof(struct udphdr));
4032
4033 if(dhcph->cookie == __constant_htonl(DHCP_MAGIC)) // match magic word
4034 {
4035 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c b/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c
4036 index bdfec5d..f906eb3 100644
4037 --- a/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c
4038 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c
4039 @@ -16,7 +16,7 @@
4040 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
4041 *
4042 *
4043 -******************************************************************************/
4044 + ******************************************************************************/
4045 #define _RTW_CMD_C_
4046
4047 #include <drv_conf.h>
4048 @@ -58,9 +58,8 @@ _func_enter_;
4049 goto exit;
4050 }
4051
4052 - //pcmdpriv->cmd_buf = pcmdpriv->cmd_allocated_buf + CMDBUFF_ALIGN_SZ - ( (SIZE_PTR)(pcmdpriv->cmd_allocated_buf) & (CMDBUFF_ALIGN_SZ-1));
4053 - pcmdpriv->cmd_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pcmdpriv->cmd_allocated_buf ), CMDBUFF_ALIGN_SZ);
4054 -
4055 + pcmdpriv->cmd_buf = pcmdpriv->cmd_allocated_buf + CMDBUFF_ALIGN_SZ - ( (SIZE_PTR)(pcmdpriv->cmd_allocated_buf) & (CMDBUFF_ALIGN_SZ-1));
4056 +
4057 pcmdpriv->rsp_allocated_buf = rtw_zmalloc(MAX_RSPSZ + 4);
4058
4059 if (pcmdpriv->rsp_allocated_buf == NULL){
4060 @@ -68,9 +67,8 @@ _func_enter_;
4061 goto exit;
4062 }
4063
4064 - //pcmdpriv->rsp_buf = pcmdpriv->rsp_allocated_buf + 4 - ( (SIZE_PTR)(pcmdpriv->rsp_allocated_buf) & 3);
4065 - pcmdpriv->rsp_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pcmdpriv->rsp_allocated_buf ), 4);
4066 -
4067 + pcmdpriv->rsp_buf = pcmdpriv->rsp_allocated_buf + 4 - ( (SIZE_PTR)(pcmdpriv->rsp_allocated_buf) & 3);
4068 +
4069 pcmdpriv->cmd_issued_cnt = pcmdpriv->cmd_done_cnt = pcmdpriv->rsp_cnt = 0;
4070
4071 exit:
4072 @@ -81,7 +79,9 @@ _func_exit_;
4073
4074 }
4075
4076 -
4077 +#ifdef CONFIG_C2H_WK
4078 +static void c2h_wk_callback(_workitem *work);
4079 +#endif
4080 sint _rtw_init_evt_priv(struct evt_priv *pevtpriv)
4081 {
4082 sint res=_SUCCESS;
4083 @@ -109,8 +109,7 @@ _func_enter_;
4084 res= _FAIL;
4085 goto exit;
4086 }
4087 - //pevtpriv->evt_buf = pevtpriv->evt_allocated_buf + 4 - ((unsigned int)(pevtpriv->evt_allocated_buf) & 3);
4088 - pevtpriv->evt_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pevtpriv->evt_allocated_buf ), 4);
4089 + pevtpriv->evt_buf = pevtpriv->evt_allocated_buf + 4 - ((unsigned int)(pevtpriv->evt_allocated_buf) & 3);
4090
4091
4092 #ifdef CONFIG_SDIO_HCI
4093 @@ -121,10 +120,8 @@ _func_enter_;
4094 goto exit;
4095 }
4096
4097 - //pevtpriv->c2h_mem = pevtpriv->allocated_c2h_mem + 4
4098 - //- ( (u32)(pevtpriv->allocated_c2h_mem) & 3);
4099 - pevtpriv->c2h_mem = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pevtpriv->allocated_c2h_mem ), 4);
4100 -
4101 + pevtpriv->c2h_mem = pevtpriv->allocated_c2h_mem + 4\
4102 + - ( (u32)(pevtpriv->allocated_c2h_mem) & 3);
4103 #ifdef PLATFORM_OS_XP
4104 pevtpriv->pc2h_mdl= IoAllocateMdl((u8 *)pevtpriv->c2h_mem, C2H_MEM_SZ , FALSE, FALSE, NULL);
4105
4106 @@ -142,6 +139,12 @@ exit:
4107
4108 #endif //end of CONFIG_EVENT_THREAD_MODE
4109
4110 +#ifdef CONFIG_C2H_WK
4111 + _init_workitem(&pevtpriv->c2h_wk, c2h_wk_callback, NULL);
4112 + pevtpriv->c2h_wk_alive = _FALSE;
4113 + pevtpriv->c2h_queue = rtw_cbuf_alloc(C2H_QUEUE_MAX_LEN+1);
4114 +#endif
4115 +
4116 _func_exit_;
4117
4118 return res;
4119 @@ -162,6 +165,21 @@ _func_enter_;
4120 rtw_mfree(pevtpriv->evt_allocated_buf, MAX_EVTSZ + 4);
4121 #endif
4122
4123 +#ifdef CONFIG_C2H_WK
4124 + _cancel_workitem_sync(&pevtpriv->c2h_wk);
4125 + while(pevtpriv->c2h_wk_alive)
4126 + rtw_msleep_os(10);
4127 +
4128 + while (!rtw_cbuf_empty(pevtpriv->c2h_queue)) {
4129 + void *c2h;
4130 + if ((c2h = rtw_cbuf_pop(pevtpriv->c2h_queue)) != NULL
4131 + && c2h != (void *)pevtpriv) {
4132 + rtw_mfree(c2h, 16);
4133 + }
4134 + }
4135 + rtw_cbuf_free(pevtpriv->c2h_queue);
4136 +#endif
4137 +
4138 RT_TRACE(_module_rtl871x_cmd_c_,_drv_info_,("-_rtw_free_evt_priv \n"));
4139
4140 _func_exit_;
4141 @@ -229,8 +247,7 @@ struct cmd_obj *_rtw_dequeue_cmd(_queue *queue)
4142 _func_enter_;
4143
4144 //_enter_critical_bh(&(queue->lock), &irqL);
4145 - _enter_critical(&(queue->lock), &irqL);
4146 -
4147 + _enter_critical(&queue->lock, &irqL);
4148 if (rtw_is_list_empty(&(queue->queue)))
4149 obj = NULL;
4150 else
4151 @@ -240,7 +257,7 @@ _func_enter_;
4152 }
4153
4154 //_exit_critical_bh(&(queue->lock), &irqL);
4155 - _exit_critical(&(queue->lock), &irqL);
4156 + _exit_critical(&queue->lock, &irqL);
4157
4158 _func_exit_;
4159
4160 @@ -281,6 +298,7 @@ _func_enter_;
4161 _func_exit_;
4162 }
4163
4164 +int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj);
4165 int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
4166 {
4167 u8 bAllow = _FALSE; //set to _TRUE to allow enqueuing cmd when hw_init_completed is _FALSE
4168 @@ -292,23 +310,23 @@ int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
4169 )
4170 {
4171 if(cmd_obj->cmdcode == GEN_CMD_CODE(_Set_Drv_Extra) )
4172 - {
4173 + {
4174 struct drvextra_cmd_parm *pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)cmd_obj->parmbuf;
4175 if(pdrvextra_cmd_parm->ec_id == POWER_SAVING_CTRL_WK_CID)
4176 {
4177 - //DBG_8192C("==>enqueue POWER_SAVING_CTRL_WK_CID\n");
4178 + //DBG_871X("==>enqueue POWER_SAVING_CTRL_WK_CID\n");
4179 bAllow = _TRUE;
4180 }
4181 }
4182 }
4183 -#endif
4184 + #endif
4185
4186 if(cmd_obj->cmdcode == GEN_CMD_CODE(_SetChannelPlan))
4187 bAllow = _TRUE;
4188
4189 if( (pcmdpriv->padapter->hw_init_completed ==_FALSE && bAllow == _FALSE)
4190 - || pcmdpriv->cmdthd_running== _FALSE //com_thread not running
4191 - )
4192 + || pcmdpriv->cmdthd_running== _FALSE //com_thread not running
4193 + )
4194 {
4195 //DBG_871X("%s:%s: drop cmdcode:%u, hw_init_completed:%u, cmdthd_running:%u\n", caller_func, __FUNCTION__,
4196 // cmd_obj->cmdcode,
4197 @@ -326,6 +344,7 @@ int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
4198 u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
4199 {
4200 int res = _FAIL;
4201 + PADAPTER padapter = pcmdpriv->padapter;
4202
4203 _func_enter_;
4204
4205 @@ -333,6 +352,14 @@ _func_enter_;
4206 goto exit;
4207 }
4208
4209 + cmd_obj->padapter = padapter;
4210 +
4211 +#ifdef CONFIG_CONCURRENT_MODE
4212 + //change pcmdpriv to primary's pcmdpriv
4213 + if (padapter->adapter_type != PRIMARY_ADAPTER && padapter->pbuddy_adapter)
4214 + pcmdpriv = &(padapter->pbuddy_adapter->cmdpriv);
4215 +#endif
4216 +
4217 if( _FAIL == (res=rtw_cmd_filter(pcmdpriv, cmd_obj)) ) {
4218 rtw_free_cmd_obj(cmd_obj);
4219 goto exit;
4220 @@ -395,6 +422,16 @@ _func_enter_;
4221 _func_exit_;
4222 }
4223
4224 +void rtw_stop_cmd_thread(_adapter *adapter)
4225 +{
4226 + if(adapter->cmdThread && adapter->cmdpriv.cmdthd_running == _TRUE
4227 + && adapter->cmdpriv.stop_req == 0)
4228 + {
4229 + adapter->cmdpriv.stop_req = 1;
4230 + _rtw_up_sema(&adapter->cmdpriv.cmd_queue_sema);
4231 + _rtw_down_sema(&adapter->cmdpriv.terminate_cmdthread_sema);
4232 + }
4233 +}
4234
4235 thread_return rtw_cmd_thread(thread_context context)
4236 {
4237 @@ -408,11 +445,12 @@ thread_return rtw_cmd_thread(thread_context context)
4238
4239 _func_enter_;
4240
4241 - thread_enter(padapter);
4242 + thread_enter("RTW_CMD_THREAD");
4243
4244 pcmdbuf = pcmdpriv->cmd_buf;
4245 prspbuf = pcmdpriv->rsp_buf;
4246
4247 + pcmdpriv->stop_req = 0;
4248 pcmdpriv->cmdthd_running=_TRUE;
4249 _rtw_up_sema(&pcmdpriv->terminate_cmdthread_sema);
4250
4251 @@ -420,24 +458,35 @@ _func_enter_;
4252
4253 while(1)
4254 {
4255 - if ((_rtw_down_sema(&(pcmdpriv->cmd_queue_sema))) == _FAIL)
4256 + if ((_rtw_down_sema(&(pcmdpriv->cmd_queue_sema))) == _FAIL) {
4257 + LOG_LEVEL(_drv_err_, FUNC_ADPT_FMT" _rtw_down_sema(&pcmdpriv->cmd_queue_sema) return _FAIL, break\n", FUNC_ADPT_ARG(padapter));
4258 break;
4259 + }
4260
4261 + if (pcmdpriv->stop_req) {
4262 + LOG_LEVEL(_drv_err_, FUNC_ADPT_FMT" stop_req:%u, break\n", FUNC_ADPT_ARG(padapter), pcmdpriv->stop_req);
4263 + break;
4264 + }
4265 +
4266 +#ifdef CONFIG_LPS_LCLK
4267 if (rtw_register_cmd_alive(padapter) != _SUCCESS)
4268 {
4269 continue;
4270 }
4271 +#endif
4272
4273 _next:
4274 - if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
4275 + if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved == _TRUE))
4276 {
4277 - DBG_8192C("###> rtw_cmd_thread break.................\n");
4278 - RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, ("rtw_cmd_thread:bDriverStopped(%d) OR bSurpriseRemoved(%d)", padapter->bDriverStopped, padapter->bSurpriseRemoved));
4279 + LOG_LEVEL(_drv_err_, "%s: DriverStopped(%d) SurpriseRemoved(%d) break at line %d\n",
4280 + __FUNCTION__, padapter->bDriverStopped, padapter->bSurpriseRemoved, __LINE__);
4281 break;
4282 }
4283
4284 if(!(pcmd = rtw_dequeue_cmd(pcmdpriv))) {
4285 +#ifdef CONFIG_LPS_LCLK
4286 rtw_unregister_cmd_alive(padapter);
4287 +#endif
4288 continue;
4289 }
4290
4291 @@ -447,6 +496,11 @@ _next:
4292 goto post_process;
4293 }
4294
4295 + if( _FAIL == rtw_cmd_filter(pcmdpriv, pcmd) ) {
4296 + rtw_free_cmd_obj(pcmd);
4297 + continue;
4298 + }
4299 +
4300 pcmdpriv->cmd_issued_cnt++;
4301
4302 pcmd->cmdsz = _RND4((pcmd->cmdsz));//_RND4
4303 @@ -459,11 +513,11 @@ _next:
4304
4305 if (cmd_hdl)
4306 {
4307 - ret = cmd_hdl(padapter, pcmdbuf);
4308 + ret = cmd_hdl(pcmd->padapter, pcmdbuf);
4309 pcmd->res = ret;
4310 }
4311
4312 - pcmdpriv->cmd_seq++;
4313 + pcmdpriv->cmd_seq++;
4314 }
4315 else
4316 {
4317 @@ -473,7 +527,7 @@ _next:
4318 cmd_hdl = NULL;
4319
4320 post_process:
4321 -
4322 +
4323 //call callback function for post-processed
4324 if(pcmd->cmdcode <= (sizeof(rtw_cmd_callback) /sizeof(struct _cmd_callback)))
4325 {
4326 @@ -486,20 +540,17 @@ post_process:
4327 else
4328 {
4329 //todo: !!! fill rsp_buf to pcmd->rsp if (pcmd->rsp!=NULL)
4330 - pcmd_callback(padapter, pcmd);//need conider that free cmd_obj in rtw_cmd_callback
4331 + pcmd_callback(pcmd->padapter, pcmd);//need conider that free cmd_obj in rtw_cmd_callback
4332 }
4333 - }
4334 -
4335 + }
4336
4337 flush_signals_thread();
4338
4339 goto _next;
4340
4341 }
4342 -
4343 pcmdpriv->cmdthd_running=_FALSE;
4344
4345 - DBG_871X("%s: leaving... check & free all cmd_obj resources\n", __FUNCTION__);
4346
4347 // free all cmd_obj resources
4348 do{
4349 @@ -507,13 +558,11 @@ post_process:
4350 if(pcmd==NULL)
4351 break;
4352
4353 - DBG_871X("%s: leaving... drop cmdcode:%u\n", __FUNCTION__, pcmd->cmdcode);
4354 + //DBG_871X("%s: leaving... drop cmdcode:%u\n", __FUNCTION__, pcmd->cmdcode);
4355
4356 rtw_free_cmd_obj(pcmd);
4357 }while(1);
4358
4359 - DBG_871X("%s: leaving... call up terminate_cmdthread_sema\n", __FUNCTION__);
4360 -
4361 _rtw_up_sema(&pcmdpriv->terminate_cmdthread_sema);
4362
4363 _func_exit_;
4364 @@ -644,28 +693,28 @@ rtw_sitesurvey_cmd(~)
4365 ### NOTE:#### (!!!!)
4366 MUST TAKE CARE THAT BEFORE CALLING THIS FUNC, YOU SHOULD HAVE LOCKED pmlmepriv->lock
4367 */
4368 -u8 rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *pssid, int ssid_max_num)
4369 +u8 rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *ssid, int ssid_num,
4370 + struct rtw_ieee80211_channel *ch, int ch_num)
4371 {
4372 u8 res = _FAIL;
4373 struct cmd_obj *ph2c;
4374 struct sitesurvey_parm *psurveyPara;
4375 struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
4376 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
4377 -#ifdef CONFIG_P2P
4378 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
4379 -#endif //CONFIG_P2P
4380
4381 -_func_enter_;
4382 -
4383 +_func_enter_;
4384 +
4385 #ifdef CONFIG_LPS
4386 if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE){
4387 rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_SCAN, 1);
4388 }
4389 #endif
4390
4391 -#ifdef CONFIG_P2P
4392 - p2p_ps_wk_cmd(padapter, P2P_PS_SCAN, 1);
4393 -#endif //CONFIG_P2P
4394 +#ifdef CONFIG_P2P_PS
4395 + if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
4396 + p2p_ps_wk_cmd(padapter, P2P_PS_SCAN, 1);
4397 + }
4398 +#endif // CONFIG_P2P_PS
4399
4400 ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4401 if (ph2c == NULL)
4402 @@ -683,18 +732,33 @@ _func_enter_;
4403
4404 init_h2fwcmd_w_parm_no_rsp(ph2c, psurveyPara, GEN_CMD_CODE(_SiteSurvey));
4405
4406 - psurveyPara->bsslimit = 48;
4407 + /* psurveyPara->bsslimit = 48; */
4408 psurveyPara->scan_mode = pmlmepriv->scan_mode;
4409
4410 - _rtw_memset(psurveyPara->ssid, 0, sizeof(NDIS_802_11_SSID)*RTW_SSID_SCAN_AMOUNT);
4411 + /* prepare ssid list */
4412 + if (ssid) {
4413 + int i;
4414 + for (i=0; i<ssid_num && i< RTW_SSID_SCAN_AMOUNT; i++) {
4415 + if (ssid[i].SsidLength) {
4416 + _rtw_memcpy(&psurveyPara->ssid[i], &ssid[i], sizeof(NDIS_802_11_SSID));
4417 + psurveyPara->ssid_num++;
4418 + if (0)
4419 + DBG_871X(FUNC_ADPT_FMT" ssid:(%s, %d)\n", FUNC_ADPT_ARG(padapter),
4420 + psurveyPara->ssid[i].Ssid, psurveyPara->ssid[i].SsidLength);
4421 + }
4422 + }
4423 + }
4424
4425 - if(pssid){
4426 + /* prepare channel list */
4427 + if (ch) {
4428 int i;
4429 - for(i=0; i<ssid_max_num && i< RTW_SSID_SCAN_AMOUNT; i++){
4430 - if(pssid[i].SsidLength){
4431 - _rtw_memcpy(&psurveyPara->ssid[i], &pssid[i], sizeof(NDIS_802_11_SSID));
4432 - //DBG_871X("%s scan for specific ssid: %s, %d\n", __FUNCTION__
4433 - // , psurveyPara->ssid[i].Ssid, psurveyPara->ssid[i].SsidLength);
4434 + for (i=0; i<ch_num && i< RTW_CHANNEL_SCAN_AMOUNT; i++) {
4435 + if (ch[i].hw_value && !(ch[i].flags & RTW_IEEE80211_CHAN_DISABLED)) {
4436 + _rtw_memcpy(&psurveyPara->ch[i], &ch[i], sizeof(struct rtw_ieee80211_channel));
4437 + psurveyPara->ch_num++;
4438 + if (0)
4439 + DBG_871X(FUNC_ADPT_FMT" ch:%u\n", FUNC_ADPT_ARG(padapter),
4440 + psurveyPara->ch[i].hw_value);
4441 }
4442 }
4443 }
4444 @@ -707,7 +771,16 @@ _func_enter_;
4445
4446 pmlmepriv->scan_start_time = rtw_get_current_time();
4447
4448 - _set_timer(&pmlmepriv->scan_to_timer, SCANNING_TIMEOUT);
4449 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
4450 + if (padapter->pbuddy_adapter == NULL )
4451 + goto full_scan_timeout;
4452 + if((padapter->pbuddy_adapter->mlmeextpriv.mlmext_info.state&0x03) == WIFI_FW_AP_STATE)
4453 + _set_timer(&pmlmepriv->scan_to_timer,
4454 + SURVEY_TO * ( padapter->mlmeextpriv.max_chan_nums + ( padapter->mlmeextpriv.max_chan_nums / RTW_SCAN_NUM_OF_CH ) * RTW_STAY_AP_CH_MILLISECOND ) + 1000 );
4455 + else
4456 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
4457 +full_scan_timeout:
4458 + _set_timer(&pmlmepriv->scan_to_timer, SCANNING_TIMEOUT);
4459
4460 rtw_led_control(padapter, LED_CTL_SITE_SURVEY);
4461
4462 @@ -1219,7 +1292,7 @@ _func_enter_;
4463 {
4464 //rtw_restructure_ht_ie
4465 rtw_restructure_ht_ie(padapter, &pnetwork->network.IEs[0], &psecnetwork->IEs[0],
4466 - pnetwork->network.IELength, &psecnetwork->IELength);
4467 + pnetwork->network.IELength, &psecnetwork->IELength, (u8)psecnetwork->Configuration.DSConfig );
4468 }
4469 }
4470
4471 @@ -1276,38 +1349,42 @@ _func_exit_;
4472 return res;
4473 }
4474
4475 -u8 rtw_disassoc_cmd(_adapter*padapter) // for sta_mode
4476 +u8 rtw_disassoc_cmd(_adapter*padapter, u32 deauth_timeout_ms, bool enqueue) /* for sta_mode */
4477 {
4478 - struct cmd_obj* pdisconnect_cmd;
4479 - struct disconnect_parm* pdisconnect;
4480 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
4481 - struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
4482 -
4483 - u8 res=_SUCCESS;
4484 + struct cmd_obj *cmdobj = NULL;
4485 + struct disconnect_parm *param = NULL;
4486 + struct cmd_priv *cmdpriv = &padapter->cmdpriv;
4487 + u8 res = _SUCCESS;
4488
4489 _func_enter_;
4490
4491 RT_TRACE(_module_rtl871x_cmd_c_, _drv_notice_, ("+rtw_disassoc_cmd\n"));
4492 -
4493 - //if ((check_fwstate(pmlmepriv, _FW_LINKED)) == _TRUE) {
4494
4495 - pdisconnect_cmd = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4496 - if(pdisconnect_cmd == NULL){
4497 - res=_FAIL;
4498 - goto exit;
4499 - }
4500 + /* prepare cmd parameter */
4501 + param = (struct disconnect_parm *)rtw_zmalloc(sizeof(*param));
4502 + if (param == NULL) {
4503 + res = _FAIL;
4504 + goto exit;
4505 + }
4506 + param->deauth_timeout_ms = deauth_timeout_ms;
4507
4508 - pdisconnect = (struct disconnect_parm*)rtw_zmalloc(sizeof(struct disconnect_parm));
4509 - if(pdisconnect == NULL) {
4510 - rtw_mfree((u8 *)pdisconnect_cmd, sizeof(struct cmd_obj));
4511 - res= _FAIL;
4512 + if (enqueue) {
4513 + /* need enqueue, prepare cmd_obj and enqueue */
4514 + cmdobj = (struct cmd_obj *)rtw_zmalloc(sizeof(*cmdobj));
4515 + if (cmdobj == NULL) {
4516 + res = _FAIL;
4517 + rtw_mfree((u8 *)param, sizeof(*param));
4518 goto exit;
4519 }
4520 -
4521 - init_h2fwcmd_w_parm_no_rsp(pdisconnect_cmd, pdisconnect, _DisConnect_CMD_);
4522 - res = rtw_enqueue_cmd(pcmdpriv, pdisconnect_cmd);
4523 - //}
4524 -
4525 + init_h2fwcmd_w_parm_no_rsp(cmdobj, param, _DisConnect_CMD_);
4526 + res = rtw_enqueue_cmd(cmdpriv, cmdobj);
4527 + } else {
4528 + /* no need to enqueue, do the cmd hdl directly and free cmd parameter */
4529 + if (H2C_SUCCESS != disconnect_hdl(padapter, (u8 *)param))
4530 + res = _FAIL;
4531 + rtw_mfree((u8 *)param, sizeof(*param));
4532 + }
4533 +
4534 exit:
4535
4536 _func_exit_;
4537 @@ -1396,7 +1473,7 @@ _func_enter_;
4538 if(sta->tdls_sta_state&TDLS_LINKED_STATE)
4539 psetstakey_para->algorithm=(u8)sta->dot118021XPrivacy;
4540 else
4541 -#endif
4542 +#endif //CONFIG_TDLS
4543 psetstakey_para->algorithm =(unsigned char) psecuritypriv->dot11PrivacyAlgrthm;
4544 }else{
4545 GET_ENCRY_ALGO(psecuritypriv, sta, psetstakey_para->algorithm, _FALSE);
4546 @@ -1404,10 +1481,10 @@ _func_enter_;
4547
4548 if (unicast_key == _TRUE) {
4549 #ifdef CONFIG_TDLS
4550 - if((sta->tdls_sta_state&TDLS_LINKED_STATE)==TDLS_LINKED_STATE)
4551 + if(sta->tdls_sta_state&TDLS_LINKED_STATE)
4552 _rtw_memcpy(&psetstakey_para->key, sta->tpk.tk, 16);
4553 else
4554 -#endif
4555 +#endif //CONFIG_TDLS
4556 _rtw_memcpy(&psetstakey_para->key, &sta->dot118021x_UncstKey, 16);
4557 } else {
4558 _rtw_memcpy(&psetstakey_para->key, &psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey, 16);
4559 @@ -1425,6 +1502,67 @@ _func_exit_;
4560 return res;
4561 }
4562
4563 +u8 rtw_clearstakey_cmd(_adapter *padapter, u8 *psta, u8 entry, u8 enqueue)
4564 +{
4565 + struct cmd_obj* ph2c;
4566 + struct set_stakey_parm *psetstakey_para;
4567 + struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
4568 + struct set_stakey_rsp *psetstakey_rsp = NULL;
4569 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
4570 + struct security_priv *psecuritypriv = &padapter->securitypriv;
4571 + struct sta_info* sta = (struct sta_info* )psta;
4572 + u8 res=_SUCCESS;
4573 +
4574 +_func_enter_;
4575 +
4576 + if(!enqueue)
4577 + {
4578 + clear_cam_entry(padapter, entry);
4579 + }
4580 + else
4581 + {
4582 + ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4583 + if ( ph2c == NULL){
4584 + res= _FAIL;
4585 + goto exit;
4586 + }
4587 +
4588 + psetstakey_para = (struct set_stakey_parm*)rtw_zmalloc(sizeof(struct set_stakey_parm));
4589 + if(psetstakey_para==NULL){
4590 + rtw_mfree((u8 *) ph2c, sizeof(struct cmd_obj));
4591 + res=_FAIL;
4592 + goto exit;
4593 + }
4594 +
4595 + psetstakey_rsp = (struct set_stakey_rsp*)rtw_zmalloc(sizeof(struct set_stakey_rsp));
4596 + if(psetstakey_rsp == NULL){
4597 + rtw_mfree((u8 *) ph2c, sizeof(struct cmd_obj));
4598 + rtw_mfree((u8 *) psetstakey_para, sizeof(struct set_stakey_parm));
4599 + res=_FAIL;
4600 + goto exit;
4601 + }
4602 +
4603 + init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, _SetStaKey_CMD_);
4604 + ph2c->rsp = (u8 *) psetstakey_rsp;
4605 + ph2c->rspsz = sizeof(struct set_stakey_rsp);
4606 +
4607 + _rtw_memcpy(psetstakey_para->addr, sta->hwaddr, ETH_ALEN);
4608 +
4609 + psetstakey_para->algorithm = _NO_PRIVACY_;
4610 +
4611 + psetstakey_para->id = entry;
4612 +
4613 + res = rtw_enqueue_cmd(pcmdpriv, ph2c);
4614 +
4615 + }
4616 +
4617 +exit:
4618 +
4619 +_func_exit_;
4620 +
4621 + return res;
4622 +}
4623 +
4624 u8 rtw_setrttbl_cmd(_adapter *padapter, struct setratable_parm *prate_table)
4625 {
4626 struct cmd_obj* ph2c;
4627 @@ -1570,7 +1708,7 @@ _func_enter_;
4628
4629 init_h2fwcmd_w_parm_no_rsp(ph2c, paddbareq_parm, GEN_CMD_CODE(_AddBAReq));
4630
4631 - //DBG_8192C("rtw_addbareq_cmd, tid=%d\n", tid);
4632 + //DBG_871X("rtw_addbareq_cmd, tid=%d\n", tid);
4633
4634 //rtw_enqueue_cmd(pcmdpriv, ph2c);
4635 res = rtw_enqueue_cmd(pcmdpriv, ph2c);
4636 @@ -1581,6 +1719,87 @@ _func_exit_;
4637
4638 return res;
4639 }
4640 +//add for CONFIG_IEEE80211W, none 11w can use it
4641 +u8 rtw_reset_securitypriv_cmd(_adapter*padapter)
4642 +{
4643 + struct cmd_obj* ph2c;
4644 + struct drvextra_cmd_parm *pdrvextra_cmd_parm;
4645 + struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
4646 + u8 res=_SUCCESS;
4647 +
4648 +_func_enter_;
4649 +
4650 + ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4651 + if(ph2c==NULL){
4652 + res= _FAIL;
4653 + goto exit;
4654 + }
4655 +
4656 + pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
4657 + if(pdrvextra_cmd_parm==NULL){
4658 + rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
4659 + res= _FAIL;
4660 + goto exit;
4661 + }
4662 +
4663 + pdrvextra_cmd_parm->ec_id = RESET_SECURITYPRIV;
4664 + pdrvextra_cmd_parm->type_size = 0;
4665 + pdrvextra_cmd_parm->pbuf = (u8 *)padapter;
4666 +
4667 + init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
4668 +
4669 +
4670 + //rtw_enqueue_cmd(pcmdpriv, ph2c);
4671 + res = rtw_enqueue_cmd(pcmdpriv, ph2c);
4672 +
4673 +exit:
4674 +
4675 +_func_exit_;
4676 +
4677 + return res;
4678 +
4679 +}
4680 +
4681 +u8 rtw_free_assoc_resources_cmd(_adapter*padapter)
4682 +{
4683 + struct cmd_obj* ph2c;
4684 + struct drvextra_cmd_parm *pdrvextra_cmd_parm;
4685 + struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
4686 + u8 res=_SUCCESS;
4687 +
4688 +_func_enter_;
4689 +
4690 + ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4691 + if(ph2c==NULL){
4692 + res= _FAIL;
4693 + goto exit;
4694 + }
4695 +
4696 + pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
4697 + if(pdrvextra_cmd_parm==NULL){
4698 + rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
4699 + res= _FAIL;
4700 + goto exit;
4701 + }
4702 +
4703 + pdrvextra_cmd_parm->ec_id = FREE_ASSOC_RESOURCES;
4704 + pdrvextra_cmd_parm->type_size = 0;
4705 + pdrvextra_cmd_parm->pbuf = (u8 *)padapter;
4706 +
4707 + init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
4708 +
4709 +
4710 + //rtw_enqueue_cmd(pcmdpriv, ph2c);
4711 + res = rtw_enqueue_cmd(pcmdpriv, ph2c);
4712 +
4713 +exit:
4714 +
4715 +_func_exit_;
4716 +
4717 + return res;
4718 +
4719 +}
4720 +
4721
4722 u8 rtw_dynamic_chk_wk_cmd(_adapter*padapter)
4723 {
4724 @@ -1591,6 +1810,15 @@ u8 rtw_dynamic_chk_wk_cmd(_adapter*padapter)
4725
4726 _func_enter_;
4727
4728 + if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
4729 + goto exit;
4730 +
4731 +
4732 +#ifdef CONFIG_CONCURRENT_MODE
4733 + if (padapter->adapter_type != PRIMARY_ADAPTER && padapter->pbuddy_adapter)
4734 + pcmdpriv = &(padapter->pbuddy_adapter->cmdpriv);
4735 +#endif
4736 +
4737 ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4738 if(ph2c==NULL){
4739 res= _FAIL;
4740 @@ -1606,7 +1834,7 @@ _func_enter_;
4741
4742 pdrvextra_cmd_parm->ec_id = DYNAMIC_CHK_WK_CID;
4743 pdrvextra_cmd_parm->type_size = 0;
4744 - pdrvextra_cmd_parm->pbuf = NULL;
4745 + pdrvextra_cmd_parm->pbuf = (u8 *)padapter;
4746
4747 init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
4748
4749 @@ -1622,11 +1850,65 @@ _func_exit_;
4750
4751 }
4752
4753 +u8 rtw_set_ch_cmd(_adapter*padapter, u8 ch, u8 bw, u8 ch_offset, u8 enqueue)
4754 +{
4755 + struct cmd_obj *pcmdobj;
4756 + struct set_ch_parm *set_ch_parm;
4757 + struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
4758 +
4759 + u8 res=_SUCCESS;
4760 +
4761 +_func_enter_;
4762 +
4763 + DBG_871X(FUNC_NDEV_FMT" ch:%u, bw:%u, ch_offset:%u\n",
4764 + FUNC_NDEV_ARG(padapter->pnetdev), ch, bw, ch_offset);
4765 +
4766 + /* check input parameter */
4767 +
4768 + /* prepare cmd parameter */
4769 + set_ch_parm = (struct set_ch_parm *)rtw_zmalloc(sizeof(*set_ch_parm));
4770 + if (set_ch_parm == NULL) {
4771 + res= _FAIL;
4772 + goto exit;
4773 + }
4774 + set_ch_parm->ch = ch;
4775 + set_ch_parm->bw = bw;
4776 + set_ch_parm->ch_offset = ch_offset;
4777 +
4778 + if (enqueue) {
4779 + /* need enqueue, prepare cmd_obj and enqueue */
4780 + pcmdobj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
4781 + if(pcmdobj == NULL){
4782 + rtw_mfree((u8 *)set_ch_parm, sizeof(*set_ch_parm));
4783 + res=_FAIL;
4784 + goto exit;
4785 + }
4786 +
4787 + init_h2fwcmd_w_parm_no_rsp(pcmdobj, set_ch_parm, GEN_CMD_CODE(_SetChannel));
4788 + res = rtw_enqueue_cmd(pcmdpriv, pcmdobj);
4789 + } else {
4790 + /* no need to enqueue, do the cmd hdl directly and free cmd parameter */
4791 + if( H2C_SUCCESS !=set_ch_hdl(padapter, (u8 *)set_ch_parm) )
4792 + res = _FAIL;
4793 +
4794 + rtw_mfree((u8 *)set_ch_parm, sizeof(*set_ch_parm));
4795 + }
4796 +
4797 + /* do something based on res... */
4798 +
4799 +exit:
4800 +
4801 + DBG_871X(FUNC_NDEV_FMT" res:%u\n", FUNC_NDEV_ARG(padapter->pnetdev), res);
4802 +
4803 +_func_exit_;
4804 +
4805 + return res;
4806 +}
4807 +
4808 u8 rtw_set_chplan_cmd(_adapter*padapter, u8 chplan, u8 enqueue)
4809 {
4810 struct cmd_obj* pcmdobj;
4811 struct SetChannelPlan_param *setChannelPlan_param;
4812 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
4813 struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
4814
4815 u8 res=_SUCCESS;
4816 @@ -1738,7 +2020,7 @@ _func_enter_;
4817 goto exit;
4818 }
4819
4820 - setChannelSwitch_param = (struct SetChannelSwitch_param *)rtw_zmalloc(sizeof(struct SetChannelSwitch_param));
4821 + setChannelSwitch_param = (struct SetChannelSwitch_param *)rtw_zmalloc(sizeof(struct SetChannelSwitch_param));
4822 if(setChannelSwitch_param == NULL) {
4823 rtw_mfree((u8 *)pcmdobj, sizeof(struct cmd_obj));
4824 res= _FAIL;
4825 @@ -1806,9 +2088,8 @@ static void traffic_status_watchdog(_adapter *padapter)
4826 {
4827 #ifdef CONFIG_LPS
4828 u8 bEnterPS;
4829 - u32 trx_threshold;
4830 - u32 rx_threshold;
4831 #endif
4832 + u16 BusyThreshold = 100;
4833 u8 bBusyTraffic = _FALSE, bTxBusyTraffic = _FALSE, bRxBusyTraffic = _FALSE;
4834 u8 bHigherBusyTraffic = _FALSE, bHigherBusyRxTraffic = _FALSE, bHigherBusyTxTraffic = _FALSE;
4835 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
4836 @@ -1816,6 +2097,8 @@ static void traffic_status_watchdog(_adapter *padapter)
4837 struct tdls_info *ptdlsinfo = &(padapter->tdlsinfo);
4838 #endif //CONFIG_TDLS
4839
4840 + RT_LINK_DETECT_T * link_detect = &pmlmepriv->LinkDetectInfo;
4841 +
4842 //
4843 // Determine if our traffic is busy now
4844 //
4845 @@ -1823,15 +2106,18 @@ static void traffic_status_watchdog(_adapter *padapter)
4846 /*&& !MgntInitAdapterInProgress(pMgntInfo)*/)
4847 {
4848
4849 - if( pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > 100 ||
4850 - pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > 100 )
4851 + // if we raise bBusyTraffic in last watchdog, using lower threshold.
4852 + if (pmlmepriv->LinkDetectInfo.bBusyTraffic)
4853 + BusyThreshold = 75;
4854 + if( pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > BusyThreshold ||
4855 + pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > BusyThreshold )
4856 {
4857 bBusyTraffic = _TRUE;
4858
4859 - if(pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > 100)
4860 + if(pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > BusyThreshold)
4861 bRxBusyTraffic = _TRUE;
4862
4863 - if(pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > 100)
4864 + if(pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > BusyThreshold)
4865 bTxBusyTraffic = _TRUE;
4866 }
4867
4868 @@ -1849,29 +2135,39 @@ static void traffic_status_watchdog(_adapter *padapter)
4869 if(pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > 5000)
4870 bHigherBusyTxTraffic = _TRUE;
4871 }
4872 -
4873 +
4874 +#ifdef CONFIG_TRAFFIC_PROTECT
4875 +#define TX_ACTIVE_TH 2
4876 +#define RX_ACTIVE_TH 1
4877 +#define TRAFFIC_PROTECT_PERIOD_MS 4500
4878 +
4879 + if (link_detect->NumTxOkInPeriod > TX_ACTIVE_TH
4880 + || link_detect->NumRxUnicastOkInPeriod > RX_ACTIVE_TH) {
4881 +
4882 + LOG_LEVEL(_drv_info_, FUNC_ADPT_FMT" acqiure wake_lock for %u ms(tx:%d,rx_unicast:%d)\n",
4883 + FUNC_ADPT_ARG(padapter),
4884 + TRAFFIC_PROTECT_PERIOD_MS,
4885 + link_detect->NumTxOkInPeriod,
4886 + link_detect->NumRxUnicastOkInPeriod);
4887 +
4888 + rtw_lock_suspend_timeout(TRAFFIC_PROTECT_PERIOD_MS);
4889 + }
4890 +#endif
4891 +
4892 #ifdef CONFIG_TDLS
4893 #ifdef CONFIG_TDLS_AUTOSETUP
4894 - if( ( ptdlsinfo->watchdog_count % TDLS_WATCHDOG_PERIOD ) == 0 ) //10 * 2sec, periodically sending
4895 + if( ( ptdlsinfo->watchdog_count % TDLS_WATCHDOG_PERIOD ) == 0 ) //TDLS_WATCHDOG_PERIOD * 2sec, periodically sending
4896 issue_tdls_dis_req( padapter, NULL );
4897 ptdlsinfo->watchdog_count++;
4898 #endif //CONFIG_TDLS_AUTOSETUP
4899 #endif //CONFIG_TDLS
4900 -
4901 +
4902 #ifdef CONFIG_LPS
4903 // check traffic for powersaving.
4904 - if(padapter->registrypriv.intel_class_mode==1){
4905 - trx_threshold=1;
4906 - rx_threshold=1;
4907 - }
4908 - else{
4909 - trx_threshold=8;
4910 - rx_threshold=2;
4911 - }
4912 - if( ((pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod + pmlmepriv->LinkDetectInfo.NumTxOkInPeriod) > trx_threshold ) ||
4913 - (pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod > rx_threshold) )
4914 + if( ((pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod + pmlmepriv->LinkDetectInfo.NumTxOkInPeriod) > 8 ) ||
4915 + (pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod > 2) )
4916 {
4917 - //DBG_8192C("Tx = %d, Rx = %d \n",pmlmepriv->LinkDetectInfo.NumTxOkInPeriod,pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod);
4918 + //DBG_871X("Tx = %d, Rx = %d \n",pmlmepriv->LinkDetectInfo.NumTxOkInPeriod,pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod);
4919 bEnterPS= _FALSE;
4920 }
4921 else
4922 @@ -1905,15 +2201,39 @@ static void traffic_status_watchdog(_adapter *padapter)
4923 pmlmepriv->LinkDetectInfo.bRxBusyTraffic = bRxBusyTraffic;
4924 pmlmepriv->LinkDetectInfo.bHigherBusyTraffic = bHigherBusyTraffic;
4925 pmlmepriv->LinkDetectInfo.bHigherBusyRxTraffic = bHigherBusyRxTraffic;
4926 + pmlmepriv->LinkDetectInfo.bHigherBusyTxTraffic = bHigherBusyTxTraffic;
4927 +
4928 }
4929
4930 +void dynamic_chk_wk_hdl(_adapter *padapter, u8 *pbuf, int sz);
4931 void dynamic_chk_wk_hdl(_adapter *padapter, u8 *pbuf, int sz)
4932 {
4933 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
4934 - //struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
4935 + struct mlme_priv *pmlmepriv;
4936 +
4937 + if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
4938 + return;
4939 +
4940 + if((void*)padapter != (void*)pbuf && padapter->pbuddy_adapter == NULL)
4941 + return;
4942 +
4943 + padapter = (_adapter *)pbuf;
4944 +
4945 + if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
4946 + return;
4947 +
4948 + pmlmepriv = &(padapter->mlmepriv);
4949 +
4950 +#ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
4951 +#ifdef CONFIG_AP_MODE
4952 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
4953 + {
4954 + expire_timeout_chk(padapter);
4955 + }
4956 +#endif
4957 +#endif //CONFIG_ACTIVE_KEEP_ALIVE_CHECK
4958 +
4959 #ifdef DBG_CONFIG_ERROR_DETECT
4960 - if(padapter->HalFunc.sreset_xmit_status_check)
4961 - padapter->HalFunc.sreset_xmit_status_check(padapter);
4962 + rtw_hal_sreset_xmit_status_check(padapter);
4963 #endif
4964
4965 //if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING|_FW_UNDER_SURVEY)==_FALSE)
4966 @@ -1922,13 +2242,15 @@ void dynamic_chk_wk_hdl(_adapter *padapter, u8 *pbuf, int sz)
4967 traffic_status_watchdog(padapter);
4968 }
4969
4970 - padapter->HalFunc.hal_dm_watchdog(padapter);
4971 + rtw_hal_dm_watchdog(padapter);
4972
4973 //check_hw_pbc(padapter, pdrvextra_cmd->pbuf, pdrvextra_cmd->type_size);
4974
4975 }
4976
4977 #ifdef CONFIG_LPS
4978 +
4979 +void lps_ctrl_wk_hdl(_adapter *padapter, u8 lps_ctrl_type);
4980 void lps_ctrl_wk_hdl(_adapter *padapter, u8 lps_ctrl_type)
4981 {
4982 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
4983 @@ -1946,28 +2268,28 @@ _func_enter_;
4984 switch(lps_ctrl_type)
4985 {
4986 case LPS_CTRL_SCAN:
4987 - //DBG_8192C("LPS_CTRL_SCAN \n");
4988 + //DBG_871X("LPS_CTRL_SCAN \n");
4989 LeaveAllPowerSaveMode(padapter);
4990 break;
4991 case LPS_CTRL_JOINBSS:
4992 - //DBG_8192C("LPS_CTRL_JOINBSS \n");
4993 + //DBG_871X("LPS_CTRL_JOINBSS \n");
4994 LPS_Leave(padapter);
4995 break;
4996 case LPS_CTRL_CONNECT:
4997 - //DBG_8192C("LPS_CTRL_CONNECT \n");
4998 + //DBG_871X("LPS_CTRL_CONNECT \n");
4999 mstatus = 1;
5000 // Reset LPS Setting
5001 padapter->pwrctrlpriv.LpsIdleCount = 0;
5002 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_JOINBSSRPT, (u8 *)(&mstatus));
5003 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_JOINBSSRPT, (u8 *)(&mstatus));
5004 break;
5005 case LPS_CTRL_DISCONNECT:
5006 - //DBG_8192C("LPS_CTRL_DISCONNECT \n");
5007 + //DBG_871X("LPS_CTRL_DISCONNECT \n");
5008 mstatus = 0;
5009 LPS_Leave(padapter);
5010 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_JOINBSSRPT, (u8 *)(&mstatus));
5011 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_JOINBSSRPT, (u8 *)(&mstatus));
5012 break;
5013 case LPS_CTRL_SPECIAL_PACKET:
5014 - //DBG_8192C("LPS_CTRL_SPECIAL_PACKET \n");
5015 + //DBG_871X("LPS_CTRL_SPECIAL_PACKET \n");
5016 pwrpriv->DelayLPSLastTimeStamp = rtw_get_current_time();
5017 LPS_Leave(padapter);
5018 break;
5019 @@ -1984,7 +2306,7 @@ u8 rtw_lps_ctrl_wk_cmd(_adapter*padapter, u8 lps_ctrl_type, u8 enqueue)
5020 struct cmd_obj *ph2c;
5021 struct drvextra_cmd_parm *pdrvextra_cmd_parm;
5022 struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
5023 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
5024 + //struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
5025 u8 res = _SUCCESS;
5026
5027 _func_enter_;
5028 @@ -1992,6 +2314,11 @@ _func_enter_;
5029 //if(!pwrctrlpriv->bLeisurePs)
5030 // return res;
5031
5032 +#ifdef CONFIG_CONCURRENT_MODE
5033 + if (padapter->iface_type != IFACE_PORT0)
5034 + return res;
5035 +#endif
5036 +
5037 if(enqueue)
5038 {
5039 ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
5040 @@ -2033,7 +2360,7 @@ _func_exit_;
5041
5042 void antenna_select_wk_hdl(_adapter *padapter, u8 antenna)
5043 {
5044 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_ANTENNA_DIVERSITY_SELECT, (u8 *)(&antenna));
5045 + rtw_hal_set_hwreg(padapter, HW_VAR_ANTENNA_DIVERSITY_SELECT, (u8 *)(&antenna));
5046 }
5047
5048 u8 rtw_antenna_select_cmd(_adapter*padapter, u8 antenna,u8 enqueue)
5049 @@ -2045,7 +2372,7 @@ u8 rtw_antenna_select_cmd(_adapter*padapter, u8 antenna,u8 enqueue)
5050 u8 res = _SUCCESS;
5051
5052 _func_enter_;
5053 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_IS_SUPPORT_ANT_DIV, &(bSupportAntDiv));
5054 + rtw_hal_get_def_var(padapter, HAL_DEF_IS_SUPPORT_ANT_DIV, &(bSupportAntDiv));
5055 if(_FALSE == bSupportAntDiv ) return res;
5056
5057 if(_TRUE == enqueue)
5058 @@ -2082,11 +2409,23 @@ _func_exit_;
5059 }
5060 #endif
5061
5062 +void power_saving_wk_hdl(_adapter *padapter, u8 *pbuf, int sz);
5063 void power_saving_wk_hdl(_adapter *padapter, u8 *pbuf, int sz)
5064 {
5065 rtw_ps_processor(padapter);
5066 }
5067
5068 +//add for CONFIG_IEEE80211W, none 11w can use it
5069 +void reset_securitypriv_hdl(_adapter *padapter)
5070 +{
5071 + rtw_reset_securitypriv(padapter);
5072 +}
5073 +
5074 +void free_assoc_resources_hdl(_adapter *padapter)
5075 +{
5076 + rtw_free_assoc_resources(padapter, 1);
5077 +}
5078 +
5079 #ifdef CONFIG_P2P
5080 u8 p2p_protocol_wk_cmd(_adapter*padapter, int intCmdType )
5081 {
5082 @@ -2098,7 +2437,7 @@ u8 p2p_protocol_wk_cmd(_adapter*padapter, int intCmdType )
5083
5084 _func_enter_;
5085
5086 - if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
5087 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
5088 {
5089 return res;
5090 }
5091 @@ -2141,6 +2480,11 @@ u8 rtw_ps_cmd(_adapter*padapter)
5092
5093 u8 res = _SUCCESS;
5094 _func_enter_;
5095 +
5096 +#ifdef CONFIG_CONCURRENT_MODE
5097 + if (padapter->adapter_type != PRIMARY_ADAPTER)
5098 + goto exit;
5099 +#endif
5100
5101 ppscmd = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
5102 if(ppscmd==NULL){
5103 @@ -2157,7 +2501,6 @@ _func_enter_;
5104
5105 pdrvextra_cmd_parm->ec_id = POWER_SAVING_CTRL_WK_CID;
5106 pdrvextra_cmd_parm->pbuf = NULL;
5107 - DBG_8192C("==> %s , enqueue CMD \n",__FUNCTION__);
5108 init_h2fwcmd_w_parm_no_rsp(ppscmd, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
5109
5110 res = rtw_enqueue_cmd(pcmdpriv, ppscmd);
5111 @@ -2241,6 +2584,108 @@ exit:
5112 }
5113 #endif
5114
5115 +u8 rtw_c2h_wk_cmd(PADAPTER padapter, u8 *c2h_evt)
5116 +{
5117 + struct cmd_obj *ph2c;
5118 + struct drvextra_cmd_parm *pdrvextra_cmd_parm;
5119 + struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
5120 + u8 res = _SUCCESS;
5121 +
5122 + ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
5123 + if (ph2c == NULL) {
5124 + res = _FAIL;
5125 + goto exit;
5126 + }
5127 +
5128 + pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
5129 + if (pdrvextra_cmd_parm == NULL) {
5130 + rtw_mfree((u8*)ph2c, sizeof(struct cmd_obj));
5131 + res = _FAIL;
5132 + goto exit;
5133 + }
5134 +
5135 + pdrvextra_cmd_parm->ec_id = C2H_WK_CID;
5136 + pdrvextra_cmd_parm->type_size = c2h_evt?16:0;
5137 + pdrvextra_cmd_parm->pbuf = c2h_evt;
5138 +
5139 + init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
5140 +
5141 + res = rtw_enqueue_cmd(pcmdpriv, ph2c);
5142 +
5143 +exit:
5144 +
5145 + return res;
5146 +}
5147 +
5148 +s32 c2h_evt_hdl(_adapter *adapter, struct c2h_evt_hdr *c2h_evt, c2h_id_filter filter)
5149 +{
5150 + s32 ret = _FAIL;
5151 + u8 buf[16];
5152 +
5153 + if (!c2h_evt) {
5154 + /* No c2h event in cmd_obj, read c2h event before handling*/
5155 + if (c2h_evt_read(adapter, buf) == _SUCCESS) {
5156 + c2h_evt = (struct c2h_evt_hdr *)buf;
5157 +
5158 + if (filter && filter(c2h_evt->id) == _FALSE)
5159 + goto exit;
5160 +
5161 + ret = rtw_hal_c2h_handler(adapter, c2h_evt);
5162 + }
5163 + } else {
5164 +
5165 + if (filter && filter(c2h_evt->id) == _FALSE)
5166 + goto exit;
5167 +
5168 + ret = rtw_hal_c2h_handler(adapter, c2h_evt);
5169 + }
5170 +exit:
5171 + return ret;
5172 +}
5173 +
5174 +#ifdef CONFIG_C2H_WK
5175 +static void c2h_wk_callback(_workitem *work)
5176 +{
5177 + struct evt_priv *evtpriv = container_of(work, struct evt_priv, c2h_wk);
5178 + _adapter *adapter = container_of(evtpriv, _adapter, evtpriv);
5179 + struct c2h_evt_hdr *c2h_evt;
5180 + c2h_id_filter ccx_id_filter = rtw_hal_c2h_id_filter_ccx(adapter);
5181 +
5182 + evtpriv->c2h_wk_alive = _TRUE;
5183 +
5184 + while (!rtw_cbuf_empty(evtpriv->c2h_queue)) {
5185 + if ((c2h_evt = (struct c2h_evt_hdr *)rtw_cbuf_pop(evtpriv->c2h_queue)) != NULL) {
5186 + /* This C2H event is read, clear it */
5187 + c2h_evt_clear(adapter);
5188 + } else if ((c2h_evt = (struct c2h_evt_hdr *)rtw_malloc(16)) != NULL) {
5189 + /* This C2H event is not read, read & clear now */
5190 + if (c2h_evt_read(adapter, (u8*)c2h_evt) != _SUCCESS)
5191 + continue;
5192 + }
5193 +
5194 + /* Special pointer to trigger c2h_evt_clear only */
5195 + if ((void *)c2h_evt == (void *)evtpriv)
5196 + continue;
5197 +
5198 + if (!c2h_evt_exist(c2h_evt)) {
5199 + rtw_mfree((u8*)c2h_evt, 16);
5200 + continue;
5201 + }
5202 +
5203 + if (ccx_id_filter(c2h_evt->id) == _TRUE) {
5204 + /* Handle CCX report here */
5205 + rtw_hal_c2h_handler(adapter, c2h_evt);
5206 + rtw_mfree((u8*)c2h_evt, 16);
5207 + } else {
5208 + /* Enqueue into cmd_thread for others */
5209 + rtw_c2h_wk_cmd(adapter, (u8 *)c2h_evt);
5210 + }
5211 + }
5212 +
5213 + evtpriv->c2h_wk_alive = _FALSE;
5214 +}
5215 +#endif
5216 +
5217 u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf)
5218 {
5219 struct drvextra_cmd_parm *pdrvextra_cmd;
5220 @@ -2268,24 +2713,39 @@ u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf)
5221 antenna_select_wk_hdl(padapter, pdrvextra_cmd->type_size);
5222 break;
5223 #endif
5224 -#ifdef CONFIG_P2P
5225 +#ifdef CONFIG_P2P_PS
5226 case P2P_PS_WK_CID:
5227 p2p_ps_wk_hdl(padapter, pdrvextra_cmd->type_size);
5228 break;
5229 +#endif // CONFIG_P2P_PS
5230 case P2P_PROTO_WK_CID:
5231 // Commented by Albert 2011/07/01
5232 // I used the type_size as the type command
5233 p2p_protocol_wk_hdl( padapter, pdrvextra_cmd->type_size );
5234 break;
5235 -#endif //CONFIG_P2P
5236 #ifdef CONFIG_AP_MODE
5237 case CHECK_HIQ_WK_CID:
5238 rtw_chk_hi_queue_hdl(padapter);
5239 break;
5240 -#endif //CONFIG_AP_MODE
5241 - default:
5242 +#endif //CONFIG_AP_MODE
5243 +#ifdef CONFIG_INTEL_WIDI
5244 + case INTEl_WIDI_WK_CID:
5245 + intel_widi_wk_hdl(padapter, pdrvextra_cmd->type_size, pdrvextra_cmd->pbuf);
5246 + break;
5247 +#endif //CONFIG_INTEL_WIDI
5248 + //add for CONFIG_IEEE80211W, none 11w can use it
5249 + case RESET_SECURITYPRIV:
5250 + reset_securitypriv_hdl(padapter);
5251 + break;
5252 + case FREE_ASSOC_RESOURCES:
5253 + free_assoc_resources_hdl(padapter);
5254 + break;
5255 + case C2H_WK_CID:
5256 + c2h_evt_hdl(padapter, (struct c2h_evt_hdr *)pdrvextra_cmd->pbuf, NULL);
5257 break;
5258
5259 + default:
5260 + break;
5261 }
5262
5263
5264 @@ -2552,13 +3012,14 @@ _func_enter_;
5265
5266 set_fwstate(pmlmepriv, _FW_LINKED);
5267 _exit_critical_bh(&pmlmepriv->lock, &irqL);
5268 -
5269 -exit:
5270 +
5271 +exit:
5272 rtw_free_cmd_obj(pcmd);
5273 -
5274 +
5275 _func_exit_;
5276 }
5277
5278 +void rtw_getrttbl_cmd_cmdrsp_callback(_adapter* padapter, struct cmd_obj *pcmd);
5279 void rtw_getrttbl_cmd_cmdrsp_callback(_adapter* padapter, struct cmd_obj *pcmd)
5280 {
5281 _func_enter_;
5282 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_debug.c b/drivers/net/wireless/rtl8192cu/core/rtw_debug.c
5283 index 04e472d..f70fcb7 100644
5284 --- a/drivers/net/wireless/rtl8192cu/core/rtw_debug.c
5285 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_debug.c
5286 @@ -1,7 +1,7 @@
5287 /******************************************************************************
5288 *
5289 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
5290 - *
5291 + *
5292 * This program is free software; you can redistribute it and/or modify it
5293 * under the terms of version 2 of the GNU General Public License as
5294 * published by the Free Software Foundation.
5295 @@ -21,10 +21,11 @@
5296
5297
5298 #include <rtw_debug.h>
5299 +#include <../hal/dm.h>
5300
5301 -#ifdef CONFIG_DEBUG_RTL871X
5302 +//#ifdef CONFIG_DEBUG_RTL871X
5303
5304 - u32 GlobalDebugLevel = _drv_info_;
5305 + u32 GlobalDebugLevel = _drv_err_;
5306
5307 u64 GlobalDebugComponents = \
5308 _module_rtl871x_xmit_c_ |
5309 @@ -52,12 +53,12 @@
5310 _module_hci_ops_os_c_|
5311 _module_rtl871x_ioctl_os_c|
5312 _module_rtl8712_cmd_c_|
5313 - _module_rtl8192c_xmit_c_|
5314 + _module_hal_xmit_c_|
5315 _module_rtl8712_recv_c_ |
5316 _module_mp_ |
5317 _module_efuse_;
5318
5319 -#endif
5320 +//#endif
5321
5322 #ifdef CONFIG_PROC_DEBUG
5323 #include <rtw_version.h>
5324 @@ -76,6 +77,65 @@ int proc_get_drv_version(char *page, char **start,
5325 return len;
5326 }
5327
5328 +int proc_get_log_level(char *page, char **start,
5329 + off_t offset, int count,
5330 + int *eof, void *data)
5331 +{
5332 + struct net_device *dev = data;
5333 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5334 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
5335 +
5336 + int len = 0;
5337 +
5338 + len += snprintf(page + len, count - len,
5339 + "log_level:%d\n",
5340 + GlobalDebugLevel
5341 + );
5342 +
5343 + *eof = 1;
5344 + return len;
5345 +}
5346 +
5347 +int proc_set_log_level(struct file *file, const char *buffer,
5348 + unsigned long count, void *data)
5349 +{
5350 + struct net_device *dev = (struct net_device *)data;
5351 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5352 + char tmp[32];
5353 + u32 is_signal_dbg;
5354 +
5355 + if (count < 1)
5356 + return -EFAULT;
5357 +
5358 + if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
5359 +
5360 + int num = sscanf(tmp, "%d ", &is_signal_dbg);
5361 +
5362 + if( is_signal_dbg >= 0 && is_signal_dbg < 10 )
5363 + {
5364 + GlobalDebugLevel= is_signal_dbg;
5365 + printk("%d\n", GlobalDebugLevel);
5366 + }
5367 + }
5368 +
5369 + return count;
5370 +
5371 +}
5372 +
5373 +#ifdef DBG_MEM_ALLOC
5374 +int proc_get_mstat(char *page, char **start,
5375 + off_t offset, int count,
5376 + int *eof, void *data)
5377 +{
5378 + int len = 0;
5379 +
5380 + len += _rtw_mstat_dump(page+len, count-len);
5381 + *eof = 1;
5382 +
5383 + return len;
5384 +}
5385 +#endif /* DBG_MEM_ALLOC */
5386 +
5387 int proc_get_write_reg(char *page, char **start,
5388 off_t offset, int count,
5389 int *eof, void *data)
5390 @@ -94,7 +154,7 @@ int proc_set_write_reg(struct file *file, const char *buffer,
5391
5392 if (count < 3)
5393 {
5394 - DBG_8192C("argument size is less than 3\n");
5395 + DBG_871X("argument size is less than 3\n");
5396 return -EFAULT;
5397 }
5398
5399 @@ -103,7 +163,7 @@ int proc_set_write_reg(struct file *file, const char *buffer,
5400 int num = sscanf(tmp, "%x %x %x", &addr, &val, &len);
5401
5402 if (num != 3) {
5403 - DBG_8192C("invalid write_reg parameter!\n");
5404 + DBG_871X("invalid write_reg parameter!\n");
5405 return count;
5406 }
5407
5408 @@ -119,7 +179,7 @@ int proc_set_write_reg(struct file *file, const char *buffer,
5409 rtw_write32(padapter, addr, val);
5410 break;
5411 default:
5412 - DBG_8192C("error write length=%d", len);
5413 + DBG_871X("error write length=%d", len);
5414 break;
5415 }
5416
5417 @@ -171,14 +231,12 @@ int proc_get_read_reg(char *page, char **start,
5418 int proc_set_read_reg(struct file *file, const char *buffer,
5419 unsigned long count, void *data)
5420 {
5421 - struct net_device *dev = (struct net_device *)data;
5422 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5423 char tmp[16];
5424 u32 addr, len;
5425
5426 if (count < 2)
5427 {
5428 - DBG_8192C("argument size is less than 2\n");
5429 + DBG_871X("argument size is less than 2\n");
5430 return -EFAULT;
5431 }
5432
5433 @@ -187,7 +245,7 @@ int proc_set_read_reg(struct file *file, const char *buffer,
5434 int num = sscanf(tmp, "%x %x", &addr, &len);
5435
5436 if (num != 2) {
5437 - DBG_8192C("invalid read_reg parameter!\n");
5438 + DBG_871X("invalid read_reg parameter!\n");
5439 return count;
5440 }
5441
5442 @@ -289,17 +347,17 @@ int proc_get_rf_info(char *page, char **start,
5443 int *eof, void *data)
5444 {
5445 struct net_device *dev = data;
5446 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5447 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
5448 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5449 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
5450 int len = 0;
5451
5452 - len += snprintf(page + len, count - len, "cur_ch=%d, cur_bw=%d, cur_ch_offet=%d\n",
5453 - pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
5454 -
5455 -
5456 + len += snprintf(page + len, count - len, "cur_ch=%d, cur_bw=%d, cur_ch_offet=%d\n"
5457 + "oper_ch=%d, oper_bw=%d, oper_ch_offet=%d\n",
5458 + pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset,
5459 + rtw_get_oper_ch(padapter), rtw_get_oper_bw(padapter), rtw_get_oper_choffset(padapter));
5460 *eof = 1;
5461 - return len;
5462
5463 + return len;
5464 }
5465
5466 int proc_get_ap_info(char *page, char **start,
5467 @@ -371,23 +429,282 @@ int proc_get_trx_info(char *page, char **start,
5468 off_t offset, int count,
5469 int *eof, void *data)
5470 {
5471 + int i;
5472 struct net_device *dev = data;
5473 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5474 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
5475 struct recv_priv *precvpriv = &padapter->recvpriv;
5476 + struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
5477 + struct hw_xmit *phwxmit;
5478 int len = 0;
5479
5480 - len += snprintf(page + len, count - len, "free_xmitbuf_cnt=%d, free_xmitframe_cnt=%d, free_ext_xmitbuf_cnt=%d, free_recvframe_cnt=%d\n",
5481 - pxmitpriv->free_xmitbuf_cnt, pxmitpriv->free_xmitframe_cnt,pxmitpriv->free_xmit_extbuf_cnt, precvpriv->free_recvframe_cnt);
5482 + len += snprintf(page + len, count - len, "free_xmitbuf_cnt=%d, free_xmitframe_cnt=%d"
5483 + ", free_ext_xmitbuf_cnt=%d, free_xframe_ext_cnt=%d"
5484 + ", free_recvframe_cnt=%d\n",
5485 + pxmitpriv->free_xmitbuf_cnt, pxmitpriv->free_xmitframe_cnt,
5486 + pxmitpriv->free_xmit_extbuf_cnt, pxmitpriv->free_xframe_ext_cnt,
5487 + precvpriv->free_recvframe_cnt);
5488 #ifdef CONFIG_USB_HCI
5489 - len += snprintf(page + len, count - len, "rx_urb_pending_cn=%d\n", precvpriv->rx_pending_cnt);
5490 + len += snprintf(page + len, count - len, "rx_urb_pending_cnt=%d\n", precvpriv->rx_pending_cnt);
5491 #endif
5492
5493 + len += snprintf(page + len, count - len, "recvbuf_skb_alloc_fail_cnt=%d\n", precvpriv->recvbuf_skb_alloc_fail_cnt);
5494 + len += snprintf(page + len, count - len, "recvbuf_null_cnt=%d\n", precvpriv->recvbuf_null_cnt);
5495 + len += snprintf(page + len, count - len, "read_port_complete_EINPROGRESS_cnt=%d\n", precvpriv->read_port_complete_EINPROGRESS_cnt);
5496 + len += snprintf(page + len, count - len, "read_port_complete_other_urb_err_cnt=%d\n", precvpriv->read_port_complete_other_urb_err_cnt);
5497 + len += snprintf(page + len, count - len, "hw_init_completed=%d\n", padapter->hw_init_completed);
5498 +#ifdef CONFIG_USB_HCI
5499 + len += snprintf(page + len, count - len, "continual_urb_error=%d\n", atomic_read(&pdvobj->continual_urb_error));
5500 +#endif
5501 +
5502 + for(i = 0; i < 4; i++)
5503 + {
5504 + phwxmit = pxmitpriv->hwxmits + i;
5505 + len += snprintf(page + len, count - len, "%d, hwq.accnt=%d\n", i, phwxmit->accnt);
5506 + }
5507 +
5508 + *eof = 1;
5509 + return len;
5510 +
5511 +}
5512 +
5513 +
5514 +
5515 +int proc_get_mac_reg_dump1(char *page, char **start,
5516 + off_t offset, int count,
5517 + int *eof, void *data)
5518 +{
5519 + struct net_device *dev = data;
5520 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5521 + int len = 0;
5522 + int i,j=1;
5523 +
5524 + len += snprintf(page + len, count - len, "\n======= MAC REG =======\n");
5525 +
5526 + for(i=0x0;i<0x300;i+=4)
5527 + {
5528 + if(j%4==1) len += snprintf(page + len, count - len,"0x%02x",i);
5529 + len += snprintf(page + len, count - len," 0x%08x ",rtw_read32(padapter,i));
5530 + if((j++)%4 == 0) len += snprintf(page + len, count - len,"\n");
5531 + }
5532 +
5533 + *eof = 1;
5534 + return len;
5535 +
5536 +}
5537 +
5538 +int proc_get_mac_reg_dump2(char *page, char **start,
5539 + off_t offset, int count,
5540 + int *eof, void *data)
5541 +{
5542 + struct net_device *dev = data;
5543 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5544 + int len = 0;
5545 + int i,j=1;
5546 +
5547 + len += snprintf(page + len, count - len, "\n======= MAC REG =======\n");
5548 + memset(page, 0, count);
5549 + for(i=0x300;i<0x600;i+=4)
5550 + {
5551 + if(j%4==1) len += snprintf(page + len, count - len,"0x%02x",i);
5552 + len += snprintf(page + len, count - len," 0x%08x ",rtw_read32(padapter,i));
5553 + if((j++)%4 == 0) len += snprintf(page + len, count - len,"\n");
5554 + }
5555 +
5556 *eof = 1;
5557 return len;
5558
5559 }
5560 +
5561 +int proc_get_mac_reg_dump3(char *page, char **start,
5562 + off_t offset, int count,
5563 + int *eof, void *data)
5564 +{
5565 + struct net_device *dev = data;
5566 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5567 + int len = 0;
5568 + int i,j=1;
5569 +
5570 + len += snprintf(page + len, count - len, "\n======= MAC REG =======\n");
5571 +
5572 + for(i=0x600;i<0x800;i+=4)
5573 + {
5574 + if(j%4==1) len += snprintf(page + len, count - len,"0x%02x",i);
5575 + len += snprintf(page + len, count - len," 0x%08x ",rtw_read32(padapter,i));
5576 + if((j++)%4 == 0) len += snprintf(page + len, count - len,"\n");
5577 + }
5578 +
5579 + *eof = 1;
5580 + return len;
5581 +
5582 +}
5583 +
5584 +int proc_get_bb_reg_dump1(char *page, char **start,
5585 + off_t offset, int count,
5586 + int *eof, void *data)
5587 +{
5588 + struct net_device *dev = data;
5589 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5590 + int len = 0;
5591 + int i,j=1;
5592 +
5593 + len += snprintf(page + len, count - len, "\n======= BB REG =======\n");
5594 + for(i=0x800;i<0xB00;i+=4)
5595 + {
5596 + if(j%4==1) len += snprintf(page + len, count - len,"0x%02x",i);
5597 + len += snprintf(page + len, count - len," 0x%08x ",rtw_read32(padapter,i));
5598 + if((j++)%4 == 0) len += snprintf(page + len, count - len,"\n");
5599 + }
5600 + *eof = 1;
5601 + return len;
5602 +}
5603 +
5604 +int proc_get_bb_reg_dump2(char *page, char **start,
5605 + off_t offset, int count,
5606 + int *eof, void *data)
5607 +{
5608 + struct net_device *dev = data;
5609 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5610 + int len = 0;
5611 + int i,j=1;
5612 +
5613 + len += snprintf(page + len, count - len, "\n======= BB REG =======\n");
5614 + for(i=0xB00;i<0xE00;i+=4)
5615 + {
5616 + if(j%4==1) len += snprintf(page + len, count - len,"0x%02x",i);
5617 + len += snprintf(page + len, count - len," 0x%08x ",rtw_read32(padapter,i));
5618 + if((j++)%4 == 0) len += snprintf(page + len, count - len,"\n");
5619 + }
5620 + *eof = 1;
5621 + return len;
5622 +}
5623 +
5624 +int proc_get_bb_reg_dump3(char *page, char **start,
5625 + off_t offset, int count,
5626 + int *eof, void *data)
5627 +{
5628 + struct net_device *dev = data;
5629 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5630 + int len = 0;
5631 + int i,j=1;
5632 +
5633 + len += snprintf(page + len, count - len, "\n======= BB REG =======\n");
5634 + for(i=0xE00;i<0x1000;i+=4)
5635 + {
5636 + if(j%4==1) len += snprintf(page + len, count - len,"0x%02x",i);
5637 + len += snprintf(page + len, count - len," 0x%08x ",rtw_read32(padapter,i));
5638 + if((j++)%4 == 0) len += snprintf(page + len, count - len,"\n");
5639 + }
5640 + *eof = 1;
5641 + return len;
5642 +}
5643 +
5644 +int proc_get_rf_reg_dump1(char *page, char **start,
5645 + off_t offset, int count,
5646 + int *eof, void *data)
5647 +{
5648 + struct net_device *dev = data;
5649 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5650 + int len = 0;
5651 + int i,j=1,path;
5652 + u32 value;
5653
5654 + len += snprintf(page + len, count - len, "\n======= RF REG =======\n");
5655 + path = 1;
5656 + len += snprintf(page + len, count - len, "\nRF_Path(%x)\n",path);
5657 + for(i=0;i<0xC0;i++)
5658 + {
5659 + //value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
5660 + value =rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
5661 + if(j%4==1) len += snprintf(page + len, count - len, "0x%02x ",i);
5662 + len += snprintf(page + len, count - len, " 0x%08x ",value);
5663 + if((j++)%4==0) len += snprintf(page + len, count - len, "\n");
5664 + }
5665 +
5666 + *eof = 1;
5667 + return len;
5668 +}
5669 +
5670 +
5671 +int proc_get_rf_reg_dump2(char *page, char **start,
5672 + off_t offset, int count,
5673 + int *eof, void *data)
5674 +{
5675 + struct net_device *dev = data;
5676 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5677 + int len = 0;
5678 + int i,j=1,path;
5679 + u32 value;
5680 +
5681 + len += snprintf(page + len, count - len, "\n======= RF REG =======\n");
5682 + path = 1;
5683 + len += snprintf(page + len, count - len, "\nRF_Path(%x)\n",path);
5684 + for(i=0xC0;i<0x100;i++)
5685 + {
5686 + //value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
5687 + value =rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
5688 + if(j%4==1) len += snprintf(page + len, count - len, "0x%02x ",i);
5689 + len += snprintf(page + len, count - len, " 0x%08x ",value);
5690 + if((j++)%4==0) len += snprintf(page + len, count - len, "\n");
5691 + }
5692 + *eof = 1;
5693 + return len;
5694 +}
5695 +
5696 +
5697 +int proc_get_rf_reg_dump3(char *page, char **start,
5698 + off_t offset, int count,
5699 + int *eof, void *data)
5700 +{
5701 + struct net_device *dev = data;
5702 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5703 + int len = 0;
5704 + int i,j=1,path;
5705 + u32 value;
5706 +
5707 + len += snprintf(page + len, count - len, "\n======= RF REG =======\n");
5708 + path = 2;
5709 + len += snprintf(page + len, count - len, "\nRF_Path(%x)\n",path);
5710 + for(i=0;i<0xC0;i++)
5711 + {
5712 + //value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
5713 + value =rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
5714 + if(j%4==1) len += snprintf(page + len, count - len, "0x%02x ",i);
5715 + len += snprintf(page + len, count - len, " 0x%08x ",value);
5716 + if((j++)%4==0) len += snprintf(page + len, count - len, "\n");
5717 + }
5718 +
5719 + *eof = 1;
5720 + return len;
5721 +}
5722 +
5723 +
5724 +int proc_get_rf_reg_dump4(char *page, char **start,
5725 + off_t offset, int count,
5726 + int *eof, void *data)
5727 +{
5728 + struct net_device *dev = data;
5729 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5730 + int len = 0;
5731 + int i,j=1,path;
5732 + u32 value;
5733 +
5734 + len += snprintf(page + len, count - len, "\n======= RF REG =======\n");
5735 + path = 2;
5736 + len += snprintf(page + len, count - len, "\nRF_Path(%x)\n",path);
5737 + for(i=0xC0;i<0x100;i++)
5738 + {
5739 + //value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
5740 + value =rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
5741 + if(j%4==1) len += snprintf(page + len, count - len, "0x%02x ",i);
5742 + len += snprintf(page + len, count - len, " 0x%08x ",value);
5743 + if((j++)%4==0) len += snprintf(page + len, count - len, "\n");
5744 + }
5745 + *eof = 1;
5746 + return len;
5747 +}
5748 +
5749 +
5750
5751 int proc_get_rx_signal(char *page, char **start,
5752 off_t offset, int count,
5753 @@ -453,6 +770,101 @@ int proc_set_rx_signal(struct file *file, const char *buffer,
5754
5755 }
5756
5757 +int proc_get_ht_enable(char *page, char **start,
5758 + off_t offset, int count,
5759 + int *eof, void *data)
5760 +{
5761 + struct net_device *dev = data;
5762 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5763 + struct registry_priv *pregpriv = &padapter->registrypriv;
5764 +
5765 + int len = 0;
5766 +
5767 + if(pregpriv)
5768 + len += snprintf(page + len, count - len,
5769 + "%d\n",
5770 + pregpriv->ht_enable
5771 + );
5772 +
5773 + *eof = 1;
5774 + return len;
5775 +}
5776 +
5777 +int proc_set_ht_enable(struct file *file, const char *buffer,
5778 + unsigned long count, void *data)
5779 +{
5780 + struct net_device *dev = (struct net_device *)data;
5781 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5782 + struct registry_priv *pregpriv = &padapter->registrypriv;
5783 + char tmp[32];
5784 + u32 mode;
5785 +
5786 + if (count < 1)
5787 + return -EFAULT;
5788 +
5789 + if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
5790 +
5791 + int num = sscanf(tmp, "%d ", &mode);
5792 +
5793 + if( pregpriv && mode >= 0 && mode < 2 )
5794 + {
5795 + pregpriv->ht_enable= mode;
5796 + printk("ht_enable=%d\n", pregpriv->ht_enable);
5797 + }
5798 + }
5799 +
5800 + return count;
5801 +
5802 +}
5803 +
5804 +
5805 +int proc_get_cbw40_enable(char *page, char **start,
5806 + off_t offset, int count,
5807 + int *eof, void *data)
5808 +{
5809 + struct net_device *dev = data;
5810 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5811 + struct registry_priv *pregpriv = &padapter->registrypriv;
5812 +
5813 + int len = 0;
5814 +
5815 + if(pregpriv)
5816 + len += snprintf(page + len, count - len,
5817 + "%d\n",
5818 + pregpriv->cbw40_enable
5819 + );
5820 +
5821 + *eof = 1;
5822 + return len;
5823 +}
5824 +
5825 +int proc_set_cbw40_enable(struct file *file, const char *buffer,
5826 + unsigned long count, void *data)
5827 +{
5828 + struct net_device *dev = (struct net_device *)data;
5829 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5830 + struct registry_priv *pregpriv = &padapter->registrypriv;
5831 + char tmp[32];
5832 + u32 mode;
5833 +
5834 + if (count < 1)
5835 + return -EFAULT;
5836 +
5837 + if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
5838 +
5839 + int num = sscanf(tmp, "%d ", &mode);
5840 +
5841 + if( pregpriv && mode >= 0 && mode < 2 )
5842 + {
5843 + pregpriv->cbw40_enable= mode;
5844 + printk("cbw40_enable=%d\n", mode);
5845 + }
5846 + }
5847 +
5848 + return count;
5849 +
5850 +}
5851 +
5852 int proc_get_ampdu_enable(char *page, char **start,
5853 off_t offset, int count,
5854 int *eof, void *data)
5855 @@ -500,6 +912,112 @@ int proc_set_ampdu_enable(struct file *file, const char *buffer,
5856
5857 }
5858
5859 +
5860 +int proc_get_two_path_rssi(char *page, char **start,
5861 + off_t offset, int count,
5862 + int *eof, void *data)
5863 +{
5864 + struct net_device *dev = data;
5865 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5866 +
5867 + int len = 0;
5868 +
5869 + if(padapter)
5870 + len += snprintf(page + len, count - len,
5871 + "%d %d\n",
5872 + padapter->recvpriv.RxRssi[0],
5873 + padapter->recvpriv.RxRssi[1]
5874 + );
5875 +
5876 + *eof = 1;
5877 + return len;
5878 +}
5879 +
5880 +int proc_get_rx_stbc(char *page, char **start,
5881 + off_t offset, int count,
5882 + int *eof, void *data)
5883 +{
5884 + struct net_device *dev = data;
5885 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5886 + struct registry_priv *pregpriv = &padapter->registrypriv;
5887 +
5888 + int len = 0;
5889 +
5890 + if(pregpriv)
5891 + len += snprintf(page + len, count - len,
5892 + "%d\n",
5893 + pregpriv->rx_stbc
5894 + );
5895 +
5896 + *eof = 1;
5897 + return len;
5898 +}
5899 +
5900 +int proc_set_rx_stbc(struct file *file, const char *buffer,
5901 + unsigned long count, void *data)
5902 +{
5903 + struct net_device *dev = (struct net_device *)data;
5904 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5905 + struct registry_priv *pregpriv = &padapter->registrypriv;
5906 + char tmp[32];
5907 + u32 mode;
5908 +
5909 + if (count < 1)
5910 + return -EFAULT;
5911 +
5912 + if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
5913 +
5914 + int num = sscanf(tmp, "%d ", &mode);
5915 +
5916 + if( pregpriv && (mode == 0 || mode == 1|| mode == 2|| mode == 3))
5917 + {
5918 + pregpriv->rx_stbc= mode;
5919 + printk("rx_stbc=%d\n", mode);
5920 + }
5921 + }
5922 +
5923 + return count;
5924 +
5925 +}
5926 +
5927 +int proc_get_vid(char *page, char **start,
5928 + off_t offset, int count,
5929 + int *eof, void *data)
5930 +{
5931 + struct net_device *dev = data;
5932 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5933 + u16 VID=0;
5934 + int len = 0;
5935 +
5936 + rtw_hal_get_hwreg(padapter, HW_VAR_VID, (u8 *)&VID);
5937 + len += snprintf(page + len, count - len,
5938 + "%04x\n",
5939 + VID
5940 + );
5941 +
5942 + *eof = 1;
5943 + return len;
5944 +}
5945 +
5946 +int proc_get_pid(char *page, char **start,
5947 + off_t offset, int count,
5948 + int *eof, void *data)
5949 +{
5950 + struct net_device *dev = data;
5951 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5952 + u16 PID=0;
5953 + int len = 0;
5954 +
5955 + rtw_hal_get_hwreg(padapter, HW_VAR_PID, (u8 *)&PID);
5956 + len += snprintf(page + len, count - len,
5957 + "%04x\n",
5958 + PID
5959 + );
5960 +
5961 + *eof = 1;
5962 + return len;
5963 +}
5964 +
5965 int proc_get_rssi_disp(char *page, char **start,
5966 off_t offset, int count,
5967 int *eof, void *data)
5968 @@ -703,7 +1221,117 @@ int proc_get_best_channel(char *page, char **start,
5969 return len;
5970
5971 }
5972 +
5973 +int proc_set_best_channel(struct file *file, const char *buffer,
5974 + unsigned long count, void *data)
5975 +{
5976 + struct net_device *dev = (struct net_device *)data;
5977 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
5978 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
5979 + char tmp[32];
5980 +
5981 + if(count < 1)
5982 + return -EFAULT;
5983 +
5984 + if(buffer && !copy_from_user(tmp, buffer, sizeof(tmp)))
5985 + {
5986 + int i;
5987 + for(i = 0; pmlmeext->channel_set[i].ChannelNum != 0; i++)
5988 + {
5989 + pmlmeext->channel_set[i].rx_count = 0;
5990 + }
5991 +
5992 + DBG_871X("set %s\n", "Clean Best Channel Count");
5993 + }
5994 +
5995 + return count;
5996 +}
5997 #endif /* CONFIG_FIND_BEST_CHANNEL */
5998 +
5999 +#if defined(DBG_CONFIG_ERROR_DETECT)
6000 +#include <rtw_sreset.h>
6001 +int proc_get_sreset(char *page, char **start, off_t offset, int count, int *eof, void *data)
6002 +{
6003 + struct net_device *dev = data;
6004 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
6005 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
6006
6007 + int len = 0;
6008 +
6009 + *eof = 1;
6010 + return len;
6011 +}
6012 +
6013 +int proc_set_sreset(struct file *file, const char *buffer, unsigned long count, void *data)
6014 +{
6015 + struct net_device *dev = (struct net_device *)data;
6016 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
6017 + char tmp[32];
6018 + s32 trigger_point;
6019 +
6020 + if (count < 1)
6021 + return -EFAULT;
6022 +
6023 + if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
6024 +
6025 + int num = sscanf(tmp, "%d", &trigger_point);
6026 +
6027 + if (trigger_point == SRESET_TGP_NULL)
6028 + rtw_hal_sreset_reset(padapter);
6029 + else
6030 + sreset_set_trigger_point(padapter, trigger_point);
6031 + }
6032 +
6033 + return count;
6034 +
6035 +}
6036 +#endif /* DBG_CONFIG_ERROR_DETECT */
6037 +
6038 +#ifdef CONFIG_DM_ADAPTIVITY
6039 +int proc_get_dm_adaptivity(char *page, char **start,
6040 + off_t offset, int count,
6041 + int *eof, void *data)
6042 +{
6043 + struct net_device *dev = data;
6044 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
6045 + int len = 0;
6046 +
6047 + len += dm_adaptivity_get_parm_str(padapter, page, count);
6048 +
6049 + *eof = 1;
6050 + return len;
6051 +}
6052 +
6053 +int proc_set_dm_adaptivity(struct file *file, const char *buffer,
6054 + unsigned long count, void *data)
6055 +{
6056 + struct net_device *dev = (struct net_device *)data;
6057 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
6058 + char tmp[32];
6059 + u32 TH_L2H_ini;
6060 + s8 TH_EDCCA_HL_diff;
6061 + u32 IGI_Base;
6062 + int ForceEDCCA;
6063 + u8 AdapEn_RSSI;
6064 + u8 IGI_LowerBound;
6065 +
6066 + if (count < 1)
6067 + return -EFAULT;
6068 +
6069 + if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
6070 +
6071 + int num = sscanf(tmp, "%x %hhd %x %d %hhu %hhu",
6072 + &TH_L2H_ini, &TH_EDCCA_HL_diff, &IGI_Base, &ForceEDCCA, &AdapEn_RSSI, &IGI_LowerBound);
6073 +
6074 + if (num != 6)
6075 + return count;
6076 +
6077 + dm_adaptivity_set_parm(padapter, (s8)TH_L2H_ini, TH_EDCCA_HL_diff, (s8)IGI_Base, (bool)ForceEDCCA, AdapEn_RSSI, IGI_LowerBound);
6078 + }
6079 +
6080 + return count;
6081 +}
6082 +#endif /* CONFIG_DM_ADAPTIVITY */
6083 +
6084 #endif
6085
6086 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c b/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c
6087 index 4a0832b..fd07d64 100644
6088 --- a/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c
6089 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c
6090 @@ -16,8 +16,7 @@
6091 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
6092 *
6093 *
6094 -
6095 -******************************************************************************/
6096 + ******************************************************************************/
6097 #define _RTW_EEPROM_C_
6098
6099 #include <drv_conf.h>
6100 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c b/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c
6101 index 2b85af9..6305ba3 100644
6102 --- a/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c
6103 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c
6104 @@ -25,7 +25,27 @@
6105 #include <osdep_service.h>
6106 #include <wlan_bssdef.h>
6107
6108 -
6109 +u8 RTW_WPA_OUI_TYPE[] = { 0x00, 0x50, 0xf2, 1 };
6110 +u16 RTW_WPA_VERSION = 1;
6111 +u8 WPA_AUTH_KEY_MGMT_NONE[] = { 0x00, 0x50, 0xf2, 0 };
6112 +u8 WPA_AUTH_KEY_MGMT_UNSPEC_802_1X[] = { 0x00, 0x50, 0xf2, 1 };
6113 +u8 WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X[] = { 0x00, 0x50, 0xf2, 2 };
6114 +u8 WPA_CIPHER_SUITE_NONE[] = { 0x00, 0x50, 0xf2, 0 };
6115 +u8 WPA_CIPHER_SUITE_WEP40[] = { 0x00, 0x50, 0xf2, 1 };
6116 +u8 WPA_CIPHER_SUITE_TKIP[] = { 0x00, 0x50, 0xf2, 2 };
6117 +u8 WPA_CIPHER_SUITE_WRAP[] = { 0x00, 0x50, 0xf2, 3 };
6118 +u8 WPA_CIPHER_SUITE_CCMP[] = { 0x00, 0x50, 0xf2, 4 };
6119 +u8 WPA_CIPHER_SUITE_WEP104[] = { 0x00, 0x50, 0xf2, 5 };
6120 +
6121 +u16 RSN_VERSION_BSD = 1;
6122 +u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X[] = { 0x00, 0x0f, 0xac, 1 };
6123 +u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X[] = { 0x00, 0x0f, 0xac, 2 };
6124 +u8 RSN_CIPHER_SUITE_NONE[] = { 0x00, 0x0f, 0xac, 0 };
6125 +u8 RSN_CIPHER_SUITE_WEP40[] = { 0x00, 0x0f, 0xac, 1 };
6126 +u8 RSN_CIPHER_SUITE_TKIP[] = { 0x00, 0x0f, 0xac, 2 };
6127 +u8 RSN_CIPHER_SUITE_WRAP[] = { 0x00, 0x0f, 0xac, 3 };
6128 +u8 RSN_CIPHER_SUITE_CCMP[] = { 0x00, 0x0f, 0xac, 4 };
6129 +u8 RSN_CIPHER_SUITE_WEP104[] = { 0x00, 0x0f, 0xac, 5 };
6130 //-----------------------------------------------------------
6131 // for adhoc-master to generate ie and provide supported-rate to fw
6132 //-----------------------------------------------------------
6133 @@ -147,7 +167,58 @@ _func_enter_;
6134 _func_exit_;
6135 }
6136
6137 +inline u8 *rtw_set_ie_ch_switch(u8 *buf, u32 *buf_len, u8 ch_switch_mode,
6138 + u8 new_ch, u8 ch_switch_cnt)
6139 +{
6140 + u8 ie_data[3];
6141 +
6142 + ie_data[0] = ch_switch_mode;
6143 + ie_data[1] = new_ch;
6144 + ie_data[2] = ch_switch_cnt;
6145 + return rtw_set_ie(buf, WLAN_EID_CHANNEL_SWITCH, 3, ie_data, buf_len);
6146 +}
6147 +
6148 +inline u8 secondary_ch_offset_to_hal_ch_offset(u8 ch_offset)
6149 +{
6150 + if (ch_offset == SCN)
6151 + return HAL_PRIME_CHNL_OFFSET_DONT_CARE;
6152 + else if(ch_offset == SCA)
6153 + return HAL_PRIME_CHNL_OFFSET_UPPER;
6154 + else if(ch_offset == SCB)
6155 + return HAL_PRIME_CHNL_OFFSET_LOWER;
6156 +
6157 + return HAL_PRIME_CHNL_OFFSET_DONT_CARE;
6158 +}
6159 +
6160 +inline u8 hal_ch_offset_to_secondary_ch_offset(u8 ch_offset)
6161 +{
6162 + if (ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)
6163 + return SCN;
6164 + else if(ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
6165 + return SCB;
6166 + else if(ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
6167 + return SCA;
6168 +
6169 + return SCN;
6170 +}
6171 +
6172 +inline u8 *rtw_set_ie_secondary_ch_offset(u8 *buf, u32 *buf_len, u8 secondary_ch_offset)
6173 +{
6174 + return rtw_set_ie(buf, WLAN_EID_SECONDARY_CHANNEL_OFFSET, 1, &secondary_ch_offset, buf_len);
6175 +}
6176 +
6177 +inline u8 *rtw_set_ie_mesh_ch_switch_parm(u8 *buf, u32 *buf_len, u8 ttl,
6178 + u8 flags, u16 reason, u16 precedence)
6179 +{
6180 + u8 ie_data[6];
6181 +
6182 + ie_data[0] = ttl;
6183 + ie_data[1] = flags;
6184 + RTW_PUT_LE16((u8*)&ie_data[2], reason);
6185 + RTW_PUT_LE16((u8*)&ie_data[4], precedence);
6186
6187 + return rtw_set_ie(buf, 0x118, 6, ie_data, buf_len);
6188 +}
6189
6190 /*----------------------------------------------------------------------------
6191 index: the information element id index, limit is the limit for search
6192 @@ -185,6 +256,104 @@ _func_exit_;
6193 return NULL;
6194 }
6195
6196 +/**
6197 + * rtw_get_ie_ex - Search specific IE from a series of IEs
6198 + * @in_ie: Address of IEs to search
6199 + * @in_len: Length limit from in_ie
6200 + * @eid: Element ID to match
6201 + * @oui: OUI to match
6202 + * @oui_len: OUI length
6203 + * @ie: If not NULL and the specific IE is found, the IE will be copied to the buf starting from the specific IE
6204 + * @ielen: If not NULL and the specific IE is found, will set to the length of the entire IE
6205 + *
6206 + * Returns: The address of the specific IE found, or NULL
6207 + */
6208 +u8 *rtw_get_ie_ex(u8 *in_ie, uint in_len, u8 eid, u8 *oui, u8 oui_len, u8 *ie, uint *ielen)
6209 +{
6210 + uint cnt;
6211 + u8 *target_ie = NULL;
6212 +
6213 +
6214 + if(ielen)
6215 + *ielen = 0;
6216 +
6217 + if(!in_ie || in_len<=0)
6218 + return target_ie;
6219 +
6220 + cnt = 0;
6221 +
6222 + while(cnt<in_len)
6223 + {
6224 + if(eid == in_ie[cnt]
6225 + && ( !oui || _rtw_memcmp(&in_ie[cnt+2], oui, oui_len) == _TRUE))
6226 + {
6227 + target_ie = &in_ie[cnt];
6228 +
6229 + if(ie)
6230 + _rtw_memcpy(ie, &in_ie[cnt], in_ie[cnt+1]+2);
6231 +
6232 + if(ielen)
6233 + *ielen = in_ie[cnt+1]+2;
6234 +
6235 + break;
6236 + }
6237 + else
6238 + {
6239 + cnt+=in_ie[cnt+1]+2; //goto next
6240 + }
6241 +
6242 + }
6243 +
6244 + return target_ie;
6245 +}
6246 +
6247 +/**
6248 + * rtw_ies_remove_ie - Find matching IEs and remove
6249 + * @ies: Address of IEs to search
6250 + * @ies_len: Pointer of length of ies, will update to new length
6251 + * @offset: The offset to start scarch
6252 + * @eid: Element ID to match
6253 + * @oui: OUI to match
6254 + * @oui_len: OUI length
6255 + *
6256 + * Returns: _SUCCESS: ies is updated, _FAIL: not updated
6257 + */
6258 +int rtw_ies_remove_ie(u8 *ies, uint *ies_len, uint offset, u8 eid, u8 *oui, u8 oui_len)
6259 +{
6260 + int ret = _FAIL;
6261 + u8 *target_ie;
6262 + u32 target_ielen;
6263 + u8 *start;
6264 + uint search_len;
6265 +
6266 + if(!ies || !ies_len || *ies_len <= offset)
6267 + goto exit;
6268 +
6269 + start = ies + offset;
6270 + search_len = *ies_len - offset;
6271 +
6272 + while (1) {
6273 + target_ie = rtw_get_ie_ex(start, search_len, eid, oui, oui_len, NULL, &target_ielen);
6274 + if (target_ie && target_ielen) {
6275 + u8 buf[MAX_IE_SZ] = {0};
6276 + u8 *remain_ies = target_ie + target_ielen;
6277 + uint remain_len = search_len - (remain_ies - start);
6278 +
6279 + _rtw_memcpy(buf, remain_ies, remain_len);
6280 + _rtw_memcpy(target_ie, buf, remain_len);
6281 + *ies_len = *ies_len - target_ielen;
6282 + ret = _SUCCESS;
6283 +
6284 + start = target_ie;
6285 + search_len = remain_len;
6286 + } else {
6287 + break;
6288 + }
6289 + }
6290 +exit:
6291 + return ret;
6292 +}
6293 +
6294 void rtw_set_supported_rate(u8* SupportedRates, uint mode)
6295 {
6296 _func_enter_;
6297 @@ -328,10 +497,10 @@ _func_exit_;
6298 }
6299
6300 unsigned char *rtw_get_wpa_ie(unsigned char *pie, int *wpa_ie_len, int limit)
6301 -{
6302 +{
6303 int len;
6304 u16 val16;
6305 - unsigned char wpa_oui_type[] = {0x00, 0x50, 0xf2, 0x01};
6306 + unsigned char wpa_oui_type[] = {0x00, 0x50, 0xf2, 0x01};
6307 u8 *pbuf = pie;
6308
6309 while(1)
6310 @@ -351,34 +520,31 @@ unsigned char *rtw_get_wpa_ie(unsigned char *pie, int *wpa_ie_len, int limit)
6311
6312 val16 = le16_to_cpu(val16);
6313 if (val16 != 0x0001)
6314 - goto check_next_ie;
6315 + goto check_next_ie;
6316
6317 *wpa_ie_len = *(pbuf + 1);
6318
6319 return pbuf;
6320 -
6321 }
6322 else {
6323
6324 - *wpa_ie_len = 0;
6325 + *wpa_ie_len = 0;
6326 return NULL;
6327 }
6328
6329 check_next_ie:
6330
6331 - limit = limit - (pbuf - pie) - 2 - len;
6332 + limit -= (2 + len);
6333
6334 if (limit <= 0)
6335 break;
6336
6337 pbuf += (2 + len);
6338 -
6339 }
6340 -
6341 +
6342 *wpa_ie_len = 0;
6343 -
6344 - return NULL;
6345
6346 + return NULL;
6347 }
6348
6349 unsigned char *rtw_get_wpa2_ie(unsigned char *pie, int *rsn_ie_len, int limit)
6350 @@ -434,7 +600,7 @@ int rtw_parse_wpa_ie(u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwis
6351
6352
6353 if ((*wpa_ie != _WPA_IE_ID_) || (*(wpa_ie+1) != (u8)(wpa_ie_len - 2)) ||
6354 - (_rtw_memcmp(wpa_ie+2, WPA_OUI_TYPE, WPA_SELECTOR_LEN) != _TRUE) )
6355 + (_rtw_memcmp(wpa_ie+2, RTW_WPA_OUI_TYPE, WPA_SELECTOR_LEN) != _TRUE) )
6356 {
6357 return _FAIL;
6358 }
6359 @@ -787,7 +953,7 @@ u8 *rtw_get_wps_attr_content(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8
6360 }
6361
6362 static int rtw_ieee802_11_parse_vendor_specific(u8 *pos, uint elen,
6363 - struct ieee802_11_elems *elems,
6364 + struct rtw_ieee802_11_elems *elems,
6365 int show_errors)
6366 {
6367 unsigned int oui;
6368 @@ -892,7 +1058,7 @@ static int rtw_ieee802_11_parse_vendor_specific(u8 *pos, uint elen,
6369 * Returns: Parsing result
6370 */
6371 ParseRes rtw_ieee802_11_parse_elems(u8 *start, uint len,
6372 - struct ieee802_11_elems *elems,
6373 + struct rtw_ieee802_11_elems *elems,
6374 int show_errors)
6375 {
6376 uint left = len;
6377 @@ -1018,7 +1184,8 @@ ParseRes rtw_ieee802_11_parse_elems(u8 *start, uint len,
6378
6379 }
6380
6381 -u8 key_char2num(u8 ch)
6382 +static u8 key_char2num(u8 ch);
6383 +static u8 key_char2num(u8 ch)
6384 {
6385 if((ch>='0')&&(ch<='9'))
6386 return ch - '0';
6387 @@ -1030,16 +1197,23 @@ u8 key_char2num(u8 ch)
6388 return 0xff;
6389 }
6390
6391 +u8 str_2char2num(u8 hch, u8 lch);
6392 u8 str_2char2num(u8 hch, u8 lch)
6393 {
6394 return ((key_char2num(hch) * 10 ) + key_char2num(lch));
6395 }
6396
6397 +u8 key_2char2num(u8 hch, u8 lch);
6398 u8 key_2char2num(u8 hch, u8 lch)
6399 {
6400 return ((key_char2num(hch) << 4) | key_char2num(lch));
6401 }
6402
6403 +u8 convert_ip_addr(u8 hch, u8 mch, u8 lch)
6404 +{
6405 + return ((key_char2num(hch) * 100) + (key_char2num(mch) * 10 ) + key_char2num(lch));
6406 +}
6407 +
6408 extern char* rtw_initmac;
6409 void rtw_macaddr_cfg(u8 *mac_addr)
6410 {
6411 @@ -1074,10 +1248,10 @@ void rtw_macaddr_cfg(u8 *mac_addr)
6412 mac[5] = 0x00;
6413 // use default mac addresss
6414 _rtw_memcpy(mac_addr, mac, ETH_ALEN);
6415 - DBG_8192C("MAC Address from efuse error, assign default one !!!\n");
6416 + DBG_871X("MAC Address from efuse error, assign default one !!!\n");
6417 }
6418
6419 - DBG_8192C("rtw_macaddr_cfg MAC Address = "MAC_FMT"\n", MAC_ARG(mac_addr));
6420 + DBG_871X("rtw_macaddr_cfg MAC Address = "MAC_FMT"\n", MAC_ARG(mac_addr));
6421 }
6422
6423 void dump_ies(u8 *buf, u32 buf_len) {
6424 @@ -1122,6 +1296,77 @@ void dump_wps_ie(u8 *ie, u32 ie_len) {
6425 }
6426
6427 #ifdef CONFIG_P2P
6428 +/**
6429 + * rtw_get_p2p_merged_len - Get merged ie length from muitiple p2p ies.
6430 + * @in_ie: Pointer of the first p2p ie
6431 + * @in_len: Total len of muiltiple p2p ies
6432 + * Returns: Length of merged p2p ie length
6433 + */
6434 +u32 rtw_get_p2p_merged_ies_len(u8 *in_ie, u32 in_len)
6435 +{
6436 + PNDIS_802_11_VARIABLE_IEs pIE;
6437 + u8 OUI[4] = { 0x50, 0x6f, 0x9a, 0x09 };
6438 + int i=0;
6439 + int j=0, len=0;
6440 +
6441 + while( i < in_len)
6442 + {
6443 + pIE = (PNDIS_802_11_VARIABLE_IEs)(in_ie+ i);
6444 +
6445 + if( pIE->ElementID == _VENDOR_SPECIFIC_IE_ && _rtw_memcmp(pIE->data, OUI, 4) )
6446 + {
6447 + len += pIE->Length-4; // 4 is P2P OUI length, don't count it in this loop
6448 + }
6449 +
6450 + i += (pIE->Length + 2);
6451 + }
6452 +
6453 + return len + 4; // Append P2P OUI length at last.
6454 +}
6455 +
6456 +/**
6457 + * rtw_p2p_merge_ies - Merge muitiple p2p ies into one
6458 + * @in_ie: Pointer of the first p2p ie
6459 + * @in_len: Total len of muiltiple p2p ies
6460 + * @merge_ie: Pointer of merged ie
6461 + * Returns: Length of merged p2p ie
6462 + */
6463 +int rtw_p2p_merge_ies(u8 *in_ie, u32 in_len, u8 *merge_ie)
6464 +{
6465 + PNDIS_802_11_VARIABLE_IEs pIE;
6466 + u8 len = 0;
6467 + u8 OUI[4] = { 0x50, 0x6f, 0x9a, 0x09 };
6468 + u8 ELOUI[6] = { 0xDD, 0x00, 0x50, 0x6f, 0x9a, 0x09 }; //EID;Len;OUI, Len would copy at the end of function
6469 + int i=0;
6470 +
6471 + if( merge_ie != NULL)
6472 + {
6473 + //Set first P2P OUI
6474 + _rtw_memcpy(merge_ie, ELOUI, 6);
6475 + merge_ie += 6;
6476 +
6477 + while( i < in_len)
6478 + {
6479 + pIE = (PNDIS_802_11_VARIABLE_IEs)(in_ie+ i);
6480 +
6481 + // Take out the rest of P2P OUIs
6482 + if( pIE->ElementID == _VENDOR_SPECIFIC_IE_ && _rtw_memcmp(pIE->data, OUI, 4) )
6483 + {
6484 + _rtw_memcpy( merge_ie, pIE->data +4, pIE->Length -4);
6485 + len += pIE->Length-4;
6486 + merge_ie += pIE->Length-4;
6487 + }
6488 +
6489 + i += (pIE->Length + 2);
6490 + }
6491 +
6492 + return len + 4; // 4 is for P2P OUI
6493 +
6494 + }
6495 +
6496 + return 0;
6497 +}
6498 +
6499 void dump_p2p_ie(u8 *ie, u32 ie_len) {
6500 u8* pos = (u8*)ie;
6501 u8 id;
6502 @@ -1154,7 +1399,7 @@ void dump_p2p_ie(u8 *ie, u32 ie_len) {
6503 *
6504 * Returns: The address of the P2P IE found, or NULL
6505 */
6506 -u8 *rtw_get_p2p_ie(u8 *in_ie, uint in_len, u8 *p2p_ie, uint *p2p_ielen)
6507 +u8 *rtw_get_p2p_ie(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen)
6508 {
6509 uint cnt = 0;
6510 u8 *p2p_ie_ptr;
6511 @@ -1166,7 +1411,12 @@ u8 *rtw_get_p2p_ie(u8 *in_ie, uint in_len, u8 *p2p_ie, uint *p2p_ielen)
6512 while(cnt<in_len)
6513 {
6514 eid = in_ie[cnt];
6515 -
6516 + if ((in_len < 0) || (cnt > MAX_IE_SZ)) {
6517 +#ifdef PLATFORM_LINUX
6518 + dump_stack();
6519 +#endif
6520 + return NULL;
6521 + }
6522 if( ( eid == _VENDOR_SPECIFIC_IE_ ) && ( _rtw_memcmp( &in_ie[cnt+2], p2p_oui, 4) == _TRUE ) )
6523 {
6524 p2p_ie_ptr = in_ie + cnt;
6525 @@ -1215,7 +1465,7 @@ u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id ,u8 *buf_attr
6526 if(len_attr)
6527 *len_attr = 0;
6528
6529 - if ( ( p2p_ie[0] != _VENDOR_SPECIFIC_IE_ ) ||
6530 + if ( !p2p_ie || ( p2p_ie[0] != _VENDOR_SPECIFIC_IE_ ) ||
6531 ( _rtw_memcmp( p2p_ie + 2, p2p_oui , 4 ) != _TRUE ) )
6532 {
6533 return attr_ptr;
6534 @@ -1381,8 +1631,10 @@ void rtw_WLAN_BSSID_EX_remove_p2p_attr(WLAN_BSSID_EX *bss_ex, u8 attr_id)
6535 }
6536 }
6537
6538 +#endif //CONFIG_P2P
6539 +
6540 #ifdef CONFIG_WFD
6541 -int rtw_get_wfd_ie(u8 *in_ie, uint in_len, u8 *wfd_ie, uint *wfd_ielen)
6542 +int rtw_get_wfd_ie(u8 *in_ie, int in_len, u8 *wfd_ie, uint *wfd_ielen)
6543 {
6544 int match;
6545 uint cnt = 0;
6546 @@ -1390,6 +1642,12 @@ int rtw_get_wfd_ie(u8 *in_ie, uint in_len, u8 *wfd_ie, uint *wfd_ielen)
6547
6548
6549 match=_FALSE;
6550 +
6551 + if ( in_len < 0 )
6552 + {
6553 + return match;
6554 + }
6555 +
6556 while(cnt<in_len)
6557 {
6558 eid = in_ie[cnt];
6559 @@ -1399,10 +1657,7 @@ int rtw_get_wfd_ie(u8 *in_ie, uint in_len, u8 *wfd_ie, uint *wfd_ielen)
6560 if ( wfd_ie != NULL )
6561 {
6562 _rtw_memcpy( wfd_ie, &in_ie[ cnt ], in_ie[ cnt + 1 ] + 2 );
6563 - if ( wfd_ielen != NULL )
6564 - {
6565 - *wfd_ielen = in_ie[ cnt + 1 ] + 2;
6566 - }
6567 +
6568 }
6569 else
6570 {
6571 @@ -1412,6 +1667,11 @@ int rtw_get_wfd_ie(u8 *in_ie, uint in_len, u8 *wfd_ie, uint *wfd_ielen)
6572 }
6573 }
6574
6575 + if ( wfd_ielen != NULL )
6576 + {
6577 + *wfd_ielen = in_ie[ cnt + 1 ] + 2;
6578 + }
6579 +
6580 cnt += in_ie[ cnt + 1 ] + 2;
6581
6582 match = _TRUE;
6583 @@ -1454,7 +1714,7 @@ int rtw_get_wfd_attr_content(u8 *wfd_ie, uint wfd_ielen, u8 target_attr_id ,u8 *
6584 cnt = 6;
6585 while( cnt < wfd_ielen )
6586 {
6587 - u16 attrlen = RTW_GET_BE16(wfd_ie + cnt + 1);
6588 + u16 attrlen = RTW_GET_BE16(wfd_ie + cnt + 1);
6589
6590 attr_id = wfd_ie[cnt];
6591 if( attr_id == target_attr_id )
6592 @@ -1464,7 +1724,7 @@ int rtw_get_wfd_attr_content(u8 *wfd_ie, uint wfd_ielen, u8 target_attr_id ,u8 *
6593 _rtw_memcpy( attr_content, &wfd_ie[ cnt + 3 ], attrlen );
6594
6595 if(attr_contentlen)
6596 - *attr_contentlen = attrlen;
6597 + *attr_contentlen = attrlen;
6598
6599 cnt += attrlen + 3;
6600
6601 @@ -1482,5 +1742,174 @@ int rtw_get_wfd_attr_content(u8 *wfd_ie, uint wfd_ielen, u8 target_attr_id ,u8 *
6602
6603 }
6604 #endif // CONFIG_WFD
6605 -#endif // CONFIG_P2P
6606 +
6607 +//Baron adds to avoid FreeBSD warning
6608 +int ieee80211_is_empty_essid(const char *essid, int essid_len)
6609 +{
6610 + /* Single white space is for Linksys APs */
6611 + if (essid_len == 1 && essid[0] == ' ')
6612 + return 1;
6613 +
6614 + /* Otherwise, if the entire essid is 0, we assume it is hidden */
6615 + while (essid_len) {
6616 + essid_len--;
6617 + if (essid[essid_len] != '\0')
6618 + return 0;
6619 + }
6620 +
6621 + return 1;
6622 +}
6623 +
6624 +int ieee80211_get_hdrlen(u16 fc)
6625 +{
6626 + int hdrlen = 24;
6627 +
6628 + switch (WLAN_FC_GET_TYPE(fc)) {
6629 + case RTW_IEEE80211_FTYPE_DATA:
6630 + if (fc & RTW_IEEE80211_STYPE_QOS_DATA)
6631 + hdrlen += 2;
6632 + if ((fc & RTW_IEEE80211_FCTL_FROMDS) && (fc & RTW_IEEE80211_FCTL_TODS))
6633 + hdrlen += 6; /* Addr4 */
6634 + break;
6635 + case RTW_IEEE80211_FTYPE_CTL:
6636 + switch (WLAN_FC_GET_STYPE(fc)) {
6637 + case RTW_IEEE80211_STYPE_CTS:
6638 + case RTW_IEEE80211_STYPE_ACK:
6639 + hdrlen = 10;
6640 + break;
6641 + default:
6642 + hdrlen = 16;
6643 + break;
6644 + }
6645 + break;
6646 + }
6647 +
6648 + return hdrlen;
6649 +}
6650 +
6651 +//show MCS rate, unit: 100Kbps
6652 +u16 rtw_mcs_rate(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, unsigned char * MCS_rate)
6653 +{
6654 + u16 max_rate = 0;
6655 +
6656 + if(rf_type == RF_1T1R)
6657 + {
6658 + if(MCS_rate[0] & BIT(7))
6659 + max_rate = (bw_40MHz) ? ((short_GI_40)?1500:1350):((short_GI_20)?722:650);
6660 + else if(MCS_rate[0] & BIT(6))
6661 + max_rate = (bw_40MHz) ? ((short_GI_40)?1350:1215):((short_GI_20)?650:585);
6662 + else if(MCS_rate[0] & BIT(5))
6663 + max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):((short_GI_20)?578:520);
6664 + else if(MCS_rate[0] & BIT(4))
6665 + max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):((short_GI_20)?433:390);
6666 + else if(MCS_rate[0] & BIT(3))
6667 + max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):((short_GI_20)?289:260);
6668 + else if(MCS_rate[0] & BIT(2))
6669 + max_rate = (bw_40MHz) ? ((short_GI_40)?450:405):((short_GI_20)?217:195);
6670 + else if(MCS_rate[0] & BIT(1))
6671 + max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):((short_GI_20)?144:130);
6672 + else if(MCS_rate[0] & BIT(0))
6673 + max_rate = (bw_40MHz) ? ((short_GI_40)?150:135):((short_GI_20)?72:65);
6674 + }
6675 + else
6676 + {
6677 + if(MCS_rate[1])
6678 + {
6679 + if(MCS_rate[1] & BIT(7))
6680 + max_rate = (bw_40MHz) ? ((short_GI_40)?3000:2700):((short_GI_20)?1444:1300);
6681 + else if(MCS_rate[1] & BIT(6))
6682 + max_rate = (bw_40MHz) ? ((short_GI_40)?2700:2430):((short_GI_20)?1300:1170);
6683 + else if(MCS_rate[1] & BIT(5))
6684 + max_rate = (bw_40MHz) ? ((short_GI_40)?2400:2160):((short_GI_20)?1156:1040);
6685 + else if(MCS_rate[1] & BIT(4))
6686 + max_rate = (bw_40MHz) ? ((short_GI_40)?1800:1620):((short_GI_20)?867:780);
6687 + else if(MCS_rate[1] & BIT(3))
6688 + max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):((short_GI_20)?578:520);
6689 + else if(MCS_rate[1] & BIT(2))
6690 + max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):((short_GI_20)?433:390);
6691 + else if(MCS_rate[1] & BIT(1))
6692 + max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):((short_GI_20)?289:260);
6693 + else if(MCS_rate[1] & BIT(0))
6694 + max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):((short_GI_20)?144:130);
6695 + }
6696 + else
6697 + {
6698 + if(MCS_rate[0] & BIT(7))
6699 + max_rate = (bw_40MHz) ? ((short_GI_40)?1500:1350):((short_GI_20)?722:650);
6700 + else if(MCS_rate[0] & BIT(6))
6701 + max_rate = (bw_40MHz) ? ((short_GI_40)?1350:1215):((short_GI_20)?650:585);
6702 + else if(MCS_rate[0] & BIT(5))
6703 + max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):((short_GI_20)?578:520);
6704 + else if(MCS_rate[0] & BIT(4))
6705 + max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):((short_GI_20)?433:390);
6706 + else if(MCS_rate[0] & BIT(3))
6707 + max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):((short_GI_20)?289:260);
6708 + else if(MCS_rate[0] & BIT(2))
6709 + max_rate = (bw_40MHz) ? ((short_GI_40)?450:405):((short_GI_20)?217:195);
6710 + else if(MCS_rate[0] & BIT(1))
6711 + max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):((short_GI_20)?144:130);
6712 + else if(MCS_rate[0] & BIT(0))
6713 + max_rate = (bw_40MHz) ? ((short_GI_40)?150:135):((short_GI_20)?72:65);
6714 + }
6715 + }
6716 + return max_rate;
6717 +}
6718 +
6719 +int rtw_action_frame_parse(const u8 *frame, u32 frame_len, u8* category, u8 *action)
6720 +{
6721 + const u8 *frame_body = frame + sizeof(struct rtw_ieee80211_hdr_3addr);
6722 + u16 fc;
6723 + u8 c, a;
6724 +
6725 + fc = le16_to_cpu(((struct rtw_ieee80211_hdr_3addr *)frame)->frame_ctl);
6726 +
6727 + if ((fc & (RTW_IEEE80211_FCTL_FTYPE|RTW_IEEE80211_FCTL_STYPE))
6728 + != (RTW_IEEE80211_FTYPE_MGMT|RTW_IEEE80211_STYPE_ACTION)
6729 + )
6730 + {
6731 + return _FALSE;
6732 + }
6733 +
6734 + c = frame_body[0];
6735 +
6736 + switch(c) {
6737 + case RTW_WLAN_CATEGORY_P2P: /* vendor-specific */
6738 + break;
6739 + default:
6740 + a = frame_body[1];
6741 + }
6742 +
6743 + if (category)
6744 + *category = c;
6745 + if (action)
6746 + *action = a;
6747 +
6748 + return _TRUE;
6749 +}
6750 +
6751 +static const char *_action_public_str[] = {
6752 + "ACT_PUB_BSSCOEXIST",
6753 + "ACT_PUB_DSE_ENABLE",
6754 + "ACT_PUB_DSE_DEENABLE",
6755 + "ACT_PUB_DSE_REG_LOCATION",
6756 + "ACT_PUB_EXT_CHL_SWITCH",
6757 + "ACT_PUB_DSE_MSR_REQ",
6758 + "ACT_PUB_DSE_MSR_RPRT",
6759 + "ACT_PUB_MP",
6760 + "ACT_PUB_DSE_PWR_CONSTRAINT",
6761 + "ACT_PUB_VENDOR",
6762 + "ACT_PUB_GAS_INITIAL_REQ",
6763 + "ACT_PUB_GAS_INITIAL_RSP",
6764 + "ACT_PUB_GAS_COMEBACK_REQ",
6765 + "ACT_PUB_GAS_COMEBACK_RSP",
6766 + "ACT_PUB_TDLS_DISCOVERY_RSP",
6767 + "ACT_PUB_LOCATION_TRACK",
6768 + "ACT_PUB_RSVD",
6769 +};
6770 +
6771 +const char *action_public_str(u8 action)
6772 +{
6773 + action = (action >= ACT_PUBLIC_MAX) ? ACT_PUBLIC_MAX : action;
6774 + return _action_public_str[action];
6775 +}
6776
6777 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_io.c b/drivers/net/wireless/rtl8192cu/core/rtw_io.c
6778 index 2efe719..4ffaa50 100644
6779 --- a/drivers/net/wireless/rtl8192cu/core/rtw_io.c
6780 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_io.c
6781 @@ -1,7 +1,7 @@
6782 /******************************************************************************
6783 *
6784 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
6785 - *
6786 + *
6787 * This program is free software; you can redistribute it and/or modify it
6788 * under the terms of version 2 of the GNU General Public License as
6789 * published by the Free Software Foundation.
6790 @@ -16,13 +16,12 @@
6791 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
6792 *
6793 *
6794 -
6795 -******************************************************************************/
6796 + ******************************************************************************/
6797 /*
6798
6799 The purpose of rtw_io.c
6800
6801 -a. provides the API
6802 +a. provides the API
6803
6804 b. provides the protocol engine
6805
6806 @@ -101,7 +100,7 @@ u16 _rtw_read16(_adapter *adapter, u32 addr)
6807 _func_exit_;
6808 return r_val;
6809 }
6810 -
6811 +
6812 u32 _rtw_read32(_adapter *adapter, u32 addr)
6813 {
6814 u32 r_val;
6815 @@ -114,7 +113,7 @@ u32 _rtw_read32(_adapter *adapter, u32 addr)
6816
6817 r_val = _read32(pintfhdl, addr);
6818 _func_exit_;
6819 - return r_val;
6820 + return r_val;
6821
6822 }
6823
6824 @@ -142,7 +141,7 @@ int _rtw_write16(_adapter *adapter, u32 addr, u16 val)
6825 int ret;
6826 _func_enter_;
6827 _write16 = pintfhdl->io_ops._write16;
6828 -
6829 +
6830 ret = _write16(pintfhdl, addr, val);
6831 _func_exit_;
6832
6833 @@ -174,7 +173,7 @@ int _rtw_writeN(_adapter *adapter, u32 addr ,u32 length , u8 *pdata)
6834 _func_enter_;
6835 _writeN = pintfhdl->io_ops._writeN;
6836
6837 - ret = _writeN(pintfhdl, addr,length,pdata);
6838 + ret = _writeN(pintfhdl, addr,length,pdata);
6839 _func_exit_;
6840
6841 return RTW_STATUS_CODE(ret);
6842 @@ -188,8 +187,8 @@ int _rtw_write8_async(_adapter *adapter, u32 addr, u8 val)
6843 int ret;
6844 _func_enter_;
6845 _write8_async = pintfhdl->io_ops._write8_async;
6846 -
6847 - ret = _write8_async(pintfhdl, addr, val);
6848 +
6849 + ret = _write8_async(pintfhdl, addr, val);
6850 _func_exit_;
6851
6852 return RTW_STATUS_CODE(ret);
6853 @@ -203,8 +202,8 @@ int _rtw_write16_async(_adapter *adapter, u32 addr, u16 val)
6854 int ret;
6855 _func_enter_;
6856 _write16_async = pintfhdl->io_ops._write16_async;
6857 -
6858 - ret = _write16_async(pintfhdl, addr, val);
6859 +
6860 + ret = _write16_async(pintfhdl, addr, val);
6861 _func_exit_;
6862
6863 return RTW_STATUS_CODE(ret);
6864 @@ -218,71 +217,71 @@ int _rtw_write32_async(_adapter *adapter, u32 addr, u32 val)
6865 int ret;
6866 _func_enter_;
6867 _write32_async = pintfhdl->io_ops._write32_async;
6868 -
6869 - ret = _write32_async(pintfhdl, addr, val);
6870 +
6871 + ret = _write32_async(pintfhdl, addr, val);
6872 _func_exit_;
6873
6874 return RTW_STATUS_CODE(ret);
6875 }
6876 void _rtw_read_mem(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
6877 {
6878 - void (*_read_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6879 + void (*_read_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6880 //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
6881 struct io_priv *pio_priv = &adapter->iopriv;
6882 struct intf_hdl *pintfhdl = &(pio_priv->intf);
6883 -
6884 +
6885 _func_enter_;
6886
6887 if( (adapter->bDriverStopped ==_TRUE) || (adapter->bSurpriseRemoved == _TRUE))
6888 {
6889 RT_TRACE(_module_rtl871x_io_c_, _drv_info_, ("rtw_read_mem:bDriverStopped(%d) OR bSurpriseRemoved(%d)", adapter->bDriverStopped, adapter->bSurpriseRemoved));
6890 return;
6891 - }
6892 -
6893 + }
6894 +
6895 _read_mem = pintfhdl->io_ops._read_mem;
6896 -
6897 +
6898 _read_mem(pintfhdl, addr, cnt, pmem);
6899 -
6900 +
6901 _func_exit_;
6902 -
6903 +
6904 }
6905
6906 void _rtw_write_mem(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
6907 -{
6908 - void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6909 +{
6910 + void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6911 //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
6912 struct io_priv *pio_priv = &adapter->iopriv;
6913 struct intf_hdl *pintfhdl = &(pio_priv->intf);
6914
6915 _func_enter_;
6916 -
6917 +
6918 _write_mem = pintfhdl->io_ops._write_mem;
6919 -
6920 +
6921 _write_mem(pintfhdl, addr, cnt, pmem);
6922 -
6923 - _func_exit_;
6924 -
6925 +
6926 + _func_exit_;
6927 +
6928 }
6929
6930 void _rtw_read_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
6931 -{
6932 - u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6933 +{
6934 + u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6935 //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
6936 struct io_priv *pio_priv = &adapter->iopriv;
6937 struct intf_hdl *pintfhdl = &(pio_priv->intf);
6938 -
6939 - _func_enter_;
6940 +
6941 + _func_enter_;
6942
6943 if( (adapter->bDriverStopped ==_TRUE) || (adapter->bSurpriseRemoved == _TRUE))
6944 {
6945 RT_TRACE(_module_rtl871x_io_c_, _drv_info_, ("rtw_read_port:bDriverStopped(%d) OR bSurpriseRemoved(%d)", adapter->bDriverStopped, adapter->bSurpriseRemoved));
6946 return;
6947 - }
6948 + }
6949
6950 _read_port = pintfhdl->io_ops._read_port;
6951 -
6952 +
6953 _read_port(pintfhdl, addr, cnt, pmem);
6954 -
6955 +
6956 _func_exit_;
6957
6958 }
6959 @@ -292,51 +291,48 @@ void _rtw_read_port_cancel(_adapter *adapter)
6960 void (*_read_port_cancel)(struct intf_hdl *pintfhdl);
6961 struct io_priv *pio_priv = &adapter->iopriv;
6962 struct intf_hdl *pintfhdl = &(pio_priv->intf);
6963 -
6964 +
6965 _read_port_cancel = pintfhdl->io_ops._read_port_cancel;
6966
6967 if(_read_port_cancel)
6968 - _read_port_cancel(pintfhdl);
6969 -
6970 + _read_port_cancel(pintfhdl);
6971 +
6972 }
6973
6974 -void _rtw_write_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
6975 -{
6976 +u32 _rtw_write_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
6977 +{
6978 u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
6979 //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
6980 struct io_priv *pio_priv = &adapter->iopriv;
6981 struct intf_hdl *pintfhdl = &(pio_priv->intf);
6982 -
6983 - _func_enter_;
6984 -
6985 + u32 ret = _SUCCESS;
6986 +
6987 + _func_enter_;
6988 +
6989 _write_port = pintfhdl->io_ops._write_port;
6990
6991 - _write_port(pintfhdl, addr, cnt, pmem);
6992 -
6993 + ret = _write_port(pintfhdl, addr, cnt, pmem);
6994 +
6995 _func_exit_;
6996 -
6997 +
6998 + return ret;
6999 }
7000
7001 -int _rtw_write_port_sync(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
7002 +u32 _rtw_write_port_and_wait(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem, int timeout_ms)
7003 {
7004 - int (*_write_port_sync)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
7005 - //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
7006 - struct io_priv *pio_priv = &adapter->iopriv;
7007 - struct intf_hdl *pintfhdl = &(pio_priv->intf);
7008 int ret = _SUCCESS;
7009 -
7010 - _func_enter_;
7011 + struct xmit_buf *pxmitbuf = (struct xmit_buf *)pmem;
7012 + struct submit_ctx sctx;
7013
7014 - _write_port_sync = pintfhdl->io_ops._write_port_sync;
7015 + rtw_sctx_init(&sctx, timeout_ms);
7016 + pxmitbuf->sctx = &sctx;
7017
7018 - if(_write_port_sync)
7019 - ret = _write_port_sync(pintfhdl, addr, cnt, pmem);
7020 - else
7021 - ret = _FAIL;
7022 + ret = _rtw_write_port(adapter, addr, cnt, pmem);
7023
7024 - _func_exit_;
7025 + if (ret == _SUCCESS)
7026 + ret = rtw_sctx_wait(&sctx);
7027
7028 - return ret;
7029 + return ret;
7030 }
7031
7032 void _rtw_write_port_cancel(_adapter *adapter)
7033 @@ -344,143 +340,121 @@ void _rtw_write_port_cancel(_adapter *adapter)
7034 void (*_write_port_cancel)(struct intf_hdl *pintfhdl);
7035 struct io_priv *pio_priv = &adapter->iopriv;
7036 struct intf_hdl *pintfhdl = &(pio_priv->intf);
7037 -
7038 +
7039 _write_port_cancel = pintfhdl->io_ops._write_port_cancel;
7040
7041 if(_write_port_cancel)
7042 - _write_port_cancel(pintfhdl);
7043 + _write_port_cancel(pintfhdl);
7044
7045 }
7046
7047 -
7048 -void _rtw_attrib_read(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem){
7049 -#ifdef CONFIG_SDIO_HCI
7050 - void (*_attrib_read)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
7051 -
7052 - //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
7053 - struct io_priv *pio_priv = &adapter->iopriv;
7054 - struct intf_hdl *pintfhdl = &(pio_priv->intf);
7055 -
7056 - _func_enter_;
7057 -
7058 - _attrib_read= pintfhdl->io_ops._attrib_read;
7059 -
7060 - _attrib_read(pintfhdl, addr, cnt, pmem);
7061 -
7062 - _func_exit_;
7063 -#endif
7064 -}
7065 -
7066 -void _rtw_attrib_write(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem){
7067 -#ifdef CONFIG_SDIO_HCI
7068 - void (*_attrib_write)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
7069 -
7070 - //struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue;
7071 - struct io_priv *pio_priv = &adapter->iopriv;
7072 - struct intf_hdl *pintfhdl = &(pio_priv->intf);
7073 -
7074 - _func_enter_;
7075 -
7076 - _attrib_write= pintfhdl->io_ops._attrib_write;
7077 -
7078 - _attrib_write(pintfhdl, addr, cnt, pmem);
7079 -
7080 - _func_exit_;
7081 -
7082 -#endif
7083 -}
7084 -
7085 -int rtw_init_io_priv(_adapter *padapter)
7086 -{
7087 - void (*set_intf_ops)(struct _io_ops *pops);
7088 +int rtw_init_io_priv(_adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops))
7089 +{
7090 struct io_priv *piopriv = &padapter->iopriv;
7091 struct intf_hdl *pintf = &piopriv->intf;
7092
7093 + if (set_intf_ops == NULL)
7094 + return _FAIL;
7095 +
7096 piopriv->padapter = padapter;
7097 pintf->padapter = padapter;
7098 - pintf->pintf_dev = &padapter->dvobjpriv;
7099 + pintf->pintf_dev = adapter_to_dvobj(padapter);
7100
7101 -
7102 -#ifdef CONFIG_SDIO_HCI
7103 - set_intf_ops = &sdio_set_intf_ops;
7104 -#endif //END OF CONFIG_SDIO_HCI
7105 + set_intf_ops(&pintf->io_ops);
7106
7107 + return _SUCCESS;
7108 +}
7109
7110 -#ifdef CONFIG_USB_HCI
7111 +#ifdef DBG_IO
7112
7113 - if(padapter->chip_type == RTL8188C_8192C)
7114 - {
7115 -#ifdef CONFIG_RTL8192C
7116 - set_intf_ops = &rtl8192cu_set_intf_ops;
7117 -#endif
7118 - }
7119 - else if(padapter->chip_type == RTL8192D)
7120 - {
7121 -#ifdef CONFIG_RTL8192D
7122 - set_intf_ops = &rtl8192du_set_intf_ops;
7123 -#endif
7124 - }
7125 - else
7126 - {
7127 - set_intf_ops = NULL;
7128 - }
7129 -#endif //END OF CONFIG_USB_HCI
7130 +u16 read_sniff_ranges[][2] = {
7131 + //{0x550, 0x551},
7132 +};
7133
7134 -#ifdef CONFIG_PCI_HCI
7135 +u16 write_sniff_ranges[][2] = {
7136 + //{0x550, 0x551},
7137 + //{0x4c, 0x4c},
7138 +};
7139
7140 - if(padapter->chip_type == RTL8188C_8192C)
7141 - {
7142 -#ifdef CONFIG_RTL8192C
7143 - set_intf_ops = &rtl8192ce_set_intf_ops;
7144 -#endif
7145 - }
7146 - else if(padapter->chip_type == RTL8192D)
7147 - {
7148 -#ifdef CONFIG_RTL8192D
7149 - set_intf_ops = &rtl8192de_set_intf_ops;
7150 -#endif
7151 +int read_sniff_num = sizeof(read_sniff_ranges)/sizeof(u16)/2;
7152 +int write_sniff_num = sizeof(write_sniff_ranges)/sizeof(u16)/2;
7153 +
7154 +bool match_read_sniff_ranges(u16 addr, u16 len)
7155 +{
7156 + int i;
7157 + for (i = 0; i<read_sniff_num; i++) {
7158 + if (addr + len > read_sniff_ranges[i][0] && addr <= read_sniff_ranges[i][1])
7159 + return _TRUE;
7160 }
7161 - else
7162 - {
7163 - set_intf_ops = NULL;
7164 +
7165 + return _FALSE;
7166 +}
7167 +
7168 +bool match_write_sniff_ranges(u16 addr, u16 len)
7169 +{
7170 + int i;
7171 + for (i = 0; i<write_sniff_num; i++) {
7172 + if (addr + len > write_sniff_ranges[i][0] && addr <= write_sniff_ranges[i][1])
7173 + return _TRUE;
7174 }
7175 -#endif //END OF CONFIG_PCI_HCI
7176 +
7177 + return _FALSE;
7178 +}
7179
7180 +u8 dbg_rtw_read8(_adapter *adapter, u32 addr, const char *caller, const int line)
7181 +{
7182 + u8 val = _rtw_read8(adapter, addr);
7183
7184 - if(set_intf_ops==NULL)
7185 - return _FAIL;
7186 + if (match_read_sniff_ranges(addr, 1))
7187 + DBG_871X("DBG_IO %s:%d rtw_read8(0x%04x) return 0x%02x\n", caller, line, addr, val);
7188
7189 - set_intf_ops(&pintf->io_ops);
7190 + return val;
7191 +}
7192
7193 - return _SUCCESS;
7194 +u16 dbg_rtw_read16(_adapter *adapter, u32 addr, const char *caller, const int line)
7195 +{
7196 + u16 val = _rtw_read16(adapter, addr);
7197 +
7198 + if (match_read_sniff_ranges(addr, 2))
7199 + DBG_871X("DBG_IO %s:%d rtw_read16(0x%04x) return 0x%04x\n", caller, line, addr, val);
7200
7201 + return val;
7202 +}
7203 +
7204 +u32 dbg_rtw_read32(_adapter *adapter, u32 addr, const char *caller, const int line)
7205 +{
7206 + u32 val = _rtw_read32(adapter, addr);
7207 +
7208 + if (match_read_sniff_ranges(addr, 4))
7209 + DBG_871X("DBG_IO %s:%d rtw_read32(0x%04x) return 0x%08x\n", caller, line, addr, val);
7210 +
7211 + return val;
7212 }
7213
7214 -#ifdef DBG_IO
7215 int dbg_rtw_write8(_adapter *adapter, u32 addr, u8 val, const char *caller, const int line)
7216 {
7217 - if(addr + 1 > DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7218 + if (match_write_sniff_ranges(addr, 1))
7219 DBG_871X("DBG_IO %s:%d rtw_write8(0x%04x, 0x%02x)\n", caller, line, addr, val);
7220
7221 return _rtw_write8(adapter, addr, val);
7222 }
7223 int dbg_rtw_write16(_adapter *adapter, u32 addr, u16 val, const char *caller, const int line)
7224 {
7225 - if(addr + 2 > DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7226 + if (match_write_sniff_ranges(addr, 2))
7227 DBG_871X("DBG_IO %s:%d rtw_write16(0x%04x, 0x%04x)\n", caller, line, addr, val);
7228
7229 return _rtw_write16(adapter, addr, val);
7230 }
7231 int dbg_rtw_write32(_adapter *adapter, u32 addr, u32 val, const char *caller, const int line)
7232 {
7233 - if(addr + 4 > DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7234 + if (match_write_sniff_ranges(addr, 4))
7235 DBG_871X("DBG_IO %s:%d rtw_write32(0x%04x, 0x%08x)\n", caller, line, addr, val);
7236
7237 return _rtw_write32(adapter, addr, val);
7238 }
7239 int dbg_rtw_writeN(_adapter *adapter, u32 addr ,u32 length , u8 *data, const char *caller, const int line)
7240 {
7241 - if(addr + length> DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7242 + if (match_write_sniff_ranges(addr, length))
7243 DBG_871X("DBG_IO %s:%d rtw_writeN(0x%04x, %u)\n", caller, line, addr, length);
7244
7245 return _rtw_writeN(adapter, addr, length, data);
7246 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c b/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c
7247 index 156640c..0601886 100644
7248 --- a/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c
7249 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c
7250 @@ -16,8 +16,7 @@
7251 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
7252 *
7253 *
7254 -
7255 -******************************************************************************/
7256 + ******************************************************************************/
7257 #define _RTW_IOCTL_QUERY_C_
7258
7259 #include <drv_conf.h>
7260 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c b/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c
7261 index 87348a2..31b4704 100644
7262 --- a/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c
7263 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c
7264 @@ -16,8 +16,7 @@
7265 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
7266 *
7267 *
7268 -
7269 -******************************************************************************/
7270 + ******************************************************************************/
7271 #define _RTW_IOCTL_RTL_C_
7272
7273 #include <drv_conf.h>
7274 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c b/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c
7275 index 946d875..e67f219 100644
7276 --- a/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c
7277 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c
7278 @@ -16,7 +16,7 @@
7279 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
7280 *
7281 *
7282 -******************************************************************************/
7283 + ******************************************************************************/
7284 #define _RTW_IOCTL_SET_C_
7285
7286
7287 @@ -24,7 +24,7 @@
7288 #include <osdep_service.h>
7289 #include <drv_types.h>
7290 #include <rtw_ioctl_set.h>
7291 -#include <hal_init.h>
7292 +#include <hal_intf.h>
7293
7294 #ifdef CONFIG_USB_HCI
7295 #include <usb_osintf.h>
7296 @@ -43,6 +43,20 @@ extern void indicate_wx_scan_complete_event(_adapter *padapter);
7297 (addr[4] == 0xff) && (addr[5] == 0xff) ) ? _TRUE : _FALSE \
7298 )
7299
7300 +u8 rtw_validate_bssid(u8 *bssid)
7301 +{
7302 + u8 ret = _TRUE;
7303 +
7304 + if (is_zero_mac_addr(bssid)
7305 + || is_broadcast_mac_addr(bssid)
7306 + || is_multicast_mac_addr(bssid)
7307 + ) {
7308 + ret = _FALSE;
7309 + }
7310 +
7311 + return ret;
7312 +}
7313 +
7314 u8 rtw_validate_ssid(NDIS_802_11_SSID *ssid)
7315 {
7316 u8 i;
7317 @@ -56,6 +70,7 @@ _func_enter_;
7318 goto exit;
7319 }
7320
7321 +#ifdef CONFIG_VALIDATE_SSID
7322 for(i = 0; i < ssid->SsidLength; i++)
7323 {
7324 //wifi, printable ascii code must be supported
7325 @@ -65,6 +80,7 @@ _func_enter_;
7326 break;
7327 }
7328 }
7329 +#endif /* CONFIG_VALIDATE_SSID */
7330
7331 exit:
7332
7333 @@ -73,6 +89,7 @@ _func_exit_;
7334 return ret;
7335 }
7336
7337 +u8 rtw_do_join(_adapter * padapter);
7338 u8 rtw_do_join(_adapter * padapter)
7339 {
7340 _irqL irqL;
7341 @@ -81,7 +98,7 @@ u8 rtw_do_join(_adapter * padapter)
7342 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
7343 _queue *queue = &(pmlmepriv->scanned_queue);
7344 u8 ret=_SUCCESS;
7345 -
7346 +
7347 _func_enter_;
7348
7349 _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
7350 @@ -106,15 +123,13 @@ _func_enter_;
7351 //when set_ssid/set_bssid for rtw_do_join(), but scanning queue is empty
7352 //we try to issue sitesurvey firstly
7353
7354 - if(pmlmepriv->LinkDetectInfo.bBusyTraffic==_FALSE
7355 - #ifdef CONFIG_LAYER2_ROAMING
7356 - || pmlmepriv->to_roaming >0
7357 - #endif
7358 + if (pmlmepriv->LinkDetectInfo.bBusyTraffic ==_FALSE
7359 + || rtw_to_roaming(padapter) > 0
7360 )
7361 {
7362 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_do_join(): site survey if scanned_queue is empty\n."));
7363 // submit site_survey_cmd
7364 - if(_SUCCESS!=(ret=rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1)) ) {
7365 + if(_SUCCESS!=(ret=rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1, NULL, 0)) ) {
7366 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("rtw_do_join(): site survey return error\n."));
7367 }
7368 }
7369 @@ -133,7 +148,7 @@ _func_enter_;
7370 else if(ret == 2)//there is no need to wait for join
7371 {
7372 ret = _SUCCESS;
7373 - clr_fwstate(pmlmepriv, _FW_UNDER_LINKING);
7374 + _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
7375 rtw_indicate_connect(padapter);
7376 }
7377 else
7378 @@ -182,7 +197,7 @@ _func_enter_;
7379 // funk will reconnect, but funk will not sitesurvey before reconnect
7380 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("for funk to do roaming"));
7381 if(pmlmepriv->sitesurveyctrl.traffic_busy==_FALSE)
7382 - rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1);
7383 + rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1, NULL, 0);
7384 }
7385
7386 }
7387 @@ -191,13 +206,11 @@ _func_enter_;
7388 //when set_ssid/set_bssid for rtw_do_join(), but there are no desired bss in scanning queue
7389 //we try to issue sitesurvey firstly
7390 if(pmlmepriv->LinkDetectInfo.bBusyTraffic==_FALSE
7391 - #ifdef CONFIG_LAYER2_ROAMING
7392 - || pmlmepriv->to_roaming >0
7393 - #endif
7394 + || rtw_to_roaming(padapter) > 0
7395 )
7396 {
7397 - //DBG_8192C("rtw_do_join() when no desired bss in scanning queue \n");
7398 - if( _SUCCESS!=(ret=rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1)) ){
7399 + //DBG_871X("rtw_do_join() when no desired bss in scanning queue \n");
7400 + if( _SUCCESS!=(ret=rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1, NULL, 0)) ){
7401 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("do_join(): site survey return error\n."));
7402 }
7403 }
7404 @@ -317,8 +330,8 @@ u8 rtw_set_802_11_bssid(_adapter* padapter, u8 *bssid)
7405 _irqL irqL;
7406 u8 status=_SUCCESS;
7407 u32 cur_time = 0;
7408 +
7409 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
7410 - _queue *queue = &pmlmepriv->scanned_queue;
7411
7412 _func_enter_;
7413
7414 @@ -355,7 +368,7 @@ _func_enter_;
7415 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("set_bssid="MAC_FMT"\n", MAC_ARG(bssid) ));
7416 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("cur_bssid="MAC_FMT"\n", MAC_ARG(pmlmepriv->cur_network.network.MacAddress) ));
7417
7418 - rtw_disassoc_cmd(padapter);
7419 + rtw_disassoc_cmd(padapter, 0, _TRUE);
7420
7421 if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
7422 rtw_indicate_disconnect(padapter);
7423 @@ -370,24 +383,10 @@ _func_enter_;
7424 }
7425
7426 handle_tkip_countermeasure:
7427 - //should we add something here...?
7428 -
7429 -#ifdef PLATFORM_LINUX
7430 - if (padapter->securitypriv.btkip_countermeasure == _TRUE) {
7431 - cur_time = rtw_get_current_time();
7432 -
7433 - if( (cur_time - padapter->securitypriv.btkip_countermeasure_time) > 60 * HZ )
7434 - {
7435 - padapter->securitypriv.btkip_countermeasure = _FALSE;
7436 - padapter->securitypriv.btkip_countermeasure_time = 0;
7437 - }
7438 - else
7439 - {
7440 - status = _FAIL;
7441 - goto release_mlme_lock;
7442 - }
7443 + if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
7444 + status = _FAIL;
7445 + goto release_mlme_lock;
7446 }
7447 -#endif
7448
7449 _rtw_memcpy(&pmlmepriv->assoc_bssid, bssid, ETH_ALEN);
7450 pmlmepriv->assoc_by_bssid=_TRUE;
7451 @@ -419,7 +418,6 @@ u8 rtw_set_802_11_ssid(_adapter* padapter, NDIS_802_11_SSID *ssid)
7452
7453 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
7454 struct wlan_network *pnetwork = &pmlmepriv->cur_network;
7455 -
7456
7457 _func_enter_;
7458
7459 @@ -460,7 +458,7 @@ _func_enter_;
7460 if(rtw_is_same_ibss(padapter, pnetwork) == _FALSE)
7461 {
7462 //if in WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE, create bss or rejoin again
7463 - rtw_disassoc_cmd(padapter);
7464 + rtw_disassoc_cmd(padapter, 0, _TRUE);
7465
7466 if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
7467 rtw_indicate_disconnect(padapter);
7468 @@ -489,7 +487,7 @@ _func_enter_;
7469 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("set_ssid=[%s] len=0x%x\n", ssid->Ssid, (unsigned int)ssid->SsidLength));
7470 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));
7471
7472 - rtw_disassoc_cmd(padapter);
7473 + rtw_disassoc_cmd(padapter, 0, _TRUE);
7474
7475 if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
7476 rtw_indicate_disconnect(padapter);
7477 @@ -504,56 +502,15 @@ _func_enter_;
7478 }
7479
7480 handle_tkip_countermeasure:
7481 -#ifdef PLATFORM_WINDOWS
7482 - if (padapter->securitypriv.btkip_countermeasure==_TRUE)
7483 - {
7484 - LARGE_INTEGER sys_time;
7485 - u32 diff_time,cur_time ;
7486 - RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid:padapter->securitypriv.btkip_countermeasure==_TRUE\n"));
7487 - NdisGetCurrentSystemTime(&sys_time);
7488 - cur_time=(u32)(sys_time.QuadPart/10); // In micro-second.
7489 - RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid:cur_time=0x%x\n",cur_time));
7490 - 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));
7491 - diff_time = cur_time -padapter->securitypriv.btkip_countermeasure_time; // In micro-second.
7492 - RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid:diff_time=0x%x\n",diff_time));
7493 -
7494 - if (diff_time > 60000000) {
7495 - RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid(): countermeasure time >60s.\n"));
7496 - padapter->securitypriv.btkip_countermeasure=_FALSE;
7497 - // Update MIC error time.
7498 - padapter->securitypriv.btkip_countermeasure_time=0;
7499 - } else {
7500 - // can't join in 60 seconds.
7501 - status = _FAIL;
7502 - RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid(): countermeasure time <60s.\n"));
7503 - goto release_mlme_lock;
7504 - }
7505 - }
7506 -#endif
7507 -
7508 -#ifdef PLATFORM_LINUX
7509 - if (padapter->securitypriv.btkip_countermeasure == _TRUE) {
7510 - cur_time = rtw_get_current_time();
7511 -
7512 - if( (cur_time - padapter->securitypriv.btkip_countermeasure_time) > 60 * HZ )
7513 - {
7514 - padapter->securitypriv.btkip_countermeasure = _FALSE;
7515 - padapter->securitypriv.btkip_countermeasure_time = 0;
7516 - }
7517 - else
7518 - {
7519 - status = _FAIL;
7520 - goto release_mlme_lock;
7521 - }
7522 + if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
7523 + status = _FAIL;
7524 + goto release_mlme_lock;
7525 }
7526 -#endif
7527
7528 - #ifdef CONFIG_VALIDATE_SSID
7529 if (rtw_validate_ssid(ssid) == _FALSE) {
7530 status = _FAIL;
7531 goto release_mlme_lock;
7532 }
7533 - #endif
7534
7535 _rtw_memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(NDIS_802_11_SSID));
7536 pmlmepriv->assoc_by_bssid=_FALSE;
7537 @@ -578,6 +535,84 @@ _func_exit_;
7538
7539 }
7540
7541 +u8 rtw_set_802_11_connect(_adapter* padapter, u8 *bssid, NDIS_802_11_SSID *ssid)
7542 +{
7543 + _irqL irqL;
7544 + u8 status = _SUCCESS;
7545 + u32 cur_time = 0;
7546 + bool bssid_valid = _TRUE;
7547 + bool ssid_valid = _TRUE;
7548 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
7549 +
7550 +_func_enter_;
7551 +
7552 + if (!ssid || rtw_validate_ssid(ssid) == _FALSE)
7553 + ssid_valid = _FALSE;
7554 +
7555 + if (!bssid || rtw_validate_bssid(bssid) == _FALSE)
7556 + bssid_valid = _FALSE;
7557 +
7558 + if (ssid_valid == _FALSE && bssid_valid == _FALSE) {
7559 + DBG_871X(FUNC_ADPT_FMT" ssid:%p, ssid_valid:%d, bssid:%p, bssid_valid:%d\n",
7560 + FUNC_ADPT_ARG(padapter), ssid, ssid_valid, bssid, bssid_valid);
7561 + status = _FAIL;
7562 + goto exit;
7563 + }
7564 +
7565 + if(padapter->hw_init_completed==_FALSE){
7566 + RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
7567 + ("set_ssid: hw_init_completed==_FALSE=>exit!!!\n"));
7568 + status = _FAIL;
7569 + goto exit;
7570 + }
7571 +
7572 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
7573 +
7574 + LOG_LEVEL(_drv_info_, FUNC_ADPT_FMT" fw_state=0x%08x\n",
7575 + FUNC_ADPT_ARG(padapter), get_fwstate(pmlmepriv));
7576 +
7577 + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) {
7578 + goto handle_tkip_countermeasure;
7579 + } else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE) {
7580 + goto release_mlme_lock;
7581 + }
7582 +
7583 +handle_tkip_countermeasure:
7584 + if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
7585 + status = _FAIL;
7586 + goto release_mlme_lock;
7587 + }
7588 +
7589 + if (ssid && ssid_valid)
7590 + _rtw_memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(NDIS_802_11_SSID));
7591 +
7592 + if (bssid && bssid_valid) {
7593 + _rtw_memcpy(&pmlmepriv->assoc_bssid, bssid, ETH_ALEN);
7594 + pmlmepriv->assoc_by_bssid = _TRUE;
7595 + }
7596 +
7597 + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) {
7598 + pmlmepriv->to_join = _TRUE;
7599 + }
7600 + else {
7601 + status = rtw_do_join(padapter);
7602 + }
7603 +
7604 +release_mlme_lock:
7605 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
7606 +
7607 +exit:
7608 +
7609 +_func_exit_;
7610 +
7611 + return status;
7612 +}
7613 +
7614 +/*
7615 +rtw_set_802_11_infrastructure_mode(~)
7616 + ### NOTE:#### (!!!!)
7617 + MUST TAKE CARE THAT BEFORE CALLING THIS FUNC, YOU SHOULD HAVE LOCKED pmlmepriv->lock and scanned_queue->lock in sequence
7618 +*/
7619 u8 rtw_set_802_11_infrastructure_mode(_adapter* padapter,
7620 NDIS_802_11_NETWORK_INFRASTRUCTURE networktype)
7621 {
7622 @@ -594,24 +629,10 @@ _func_enter_;
7623
7624 if(*pold_state != networktype)
7625 {
7626 - _enter_critical_bh(&pmlmepriv->lock, &irqL);
7627
7628 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,(" change mode!"));
7629 //DBG_871X("change mode, old_mode=%d, new_mode=%d, fw_state=0x%x\n", *pold_state, networktype, get_fwstate(pmlmepriv));
7630
7631 - if((check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) ||(*pold_state==Ndis802_11IBSS))
7632 - rtw_disassoc_cmd(padapter);
7633 -
7634 - if((check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) ||
7635 - (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)== _TRUE) )
7636 - rtw_free_assoc_resources(padapter, 1);
7637 -
7638 -
7639 - if((check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) || (*pold_state==Ndis802_11Infrastructure) ||(*pold_state==Ndis802_11IBSS))
7640 - {
7641 - rtw_indicate_disconnect(padapter); //will clr Linked_state; before this function, we must have chked whether issue dis-assoc_cmd or not
7642 - }
7643 -
7644 if(*pold_state==Ndis802_11APMode)
7645 {
7646 //change to other mode from Ndis802_11APMode
7647 @@ -621,12 +642,25 @@ _func_enter_;
7648 stop_ap_mode(padapter);
7649 #endif
7650 }
7651 -
7652 +
7653 + if((check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) ||(*pold_state==Ndis802_11IBSS))
7654 + rtw_disassoc_cmd(padapter, 0, _TRUE);
7655 +
7656 + if((check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) ||
7657 + (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)== _TRUE) )
7658 + rtw_free_assoc_resources(padapter, 0);
7659 +
7660 + if((*pold_state == Ndis802_11Infrastructure) ||(*pold_state == Ndis802_11IBSS))
7661 + {
7662 + if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
7663 + {
7664 + rtw_indicate_disconnect(padapter); //will clr Linked_state; before this function, we must have chked whether issue dis-assoc_cmd or not
7665 + }
7666 + }
7667 +
7668 *pold_state = networktype;
7669
7670 - // clear WIFI_STATION_STATE; WIFI_AP_STATE; WIFI_ADHOC_STATE; WIFI_ADHOC_MASTER_STATE
7671 - //pmlmepriv->fw_state &= 0xffffff87;
7672 - _clr_fwstate_(pmlmepriv, WIFI_STATION_STATE|WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE);
7673 + _clr_fwstate_(pmlmepriv, ~WIFI_NULL_STATE);
7674
7675 switch(networktype)
7676 {
7677 @@ -657,7 +691,6 @@ _func_enter_;
7678 //RT_TRACE(COMP_OID_SET, DBG_LOUD, ("set_infrastructure: fw_state:%x after changing mode\n",
7679 // get_fwstate(pmlmepriv) ));
7680
7681 - _exit_critical_bh(&pmlmepriv->lock, &irqL);
7682 }
7683
7684 _func_exit_;
7685 @@ -679,9 +712,10 @@ _func_enter_;
7686 {
7687 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("MgntActrtw_set_802_11_disassociate: rtw_indicate_disconnect\n"));
7688
7689 - rtw_disassoc_cmd(padapter);
7690 + rtw_disassoc_cmd(padapter, 0, _TRUE);
7691 rtw_indicate_disconnect(padapter);
7692 - rtw_free_assoc_resources(padapter, 1);
7693 + //modify for CONFIG_IEEE80211W, none 11w can use it
7694 + rtw_free_assoc_resources_cmd(padapter);
7695 }
7696
7697 _exit_critical_bh(&pmlmepriv->lock, &irqL);
7698 @@ -691,7 +725,7 @@ _func_exit_;
7699 return _TRUE;
7700 }
7701
7702 -u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter)
7703 +u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter, NDIS_802_11_SSID *pssid, int ssid_max_num)
7704 {
7705 _irqL irqL;
7706 struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
7707 @@ -724,17 +758,15 @@ _func_enter_;
7708 RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n###pmlmepriv->sitesurveyctrl.traffic_busy==_TRUE\n\n"));
7709 }
7710 } else {
7711 - #ifdef CONFIG_SET_SCAN_DENY_TIMER
7712 - if(ATOMIC_READ(&pmlmepriv->set_scan_deny)==1){
7713 - DBG_871X("%s:%d CONFIG_SET_SCAN_DENY_TIMER deny scan\n", __FUNCTION__, __LINE__);
7714 + if (rtw_is_scan_deny(padapter)) {
7715 + DBG_871X(FUNC_ADPT_FMT": scan deny\n", FUNC_ADPT_ARG(padapter));
7716 indicate_wx_scan_complete_event(padapter);
7717 return _SUCCESS;
7718 }
7719 - #endif
7720
7721 _enter_critical_bh(&pmlmepriv->lock, &irqL);
7722
7723 - res = rtw_sitesurvey_cmd(padapter, NULL, 0);
7724 + res = rtw_sitesurvey_cmd(padapter, pssid, ssid_max_num, NULL, 0);
7725
7726 _exit_critical_bh(&pmlmepriv->lock, &irqL);
7727 }
7728 @@ -1300,67 +1332,80 @@ _func_exit_;
7729 }
7730
7731 /*
7732 -* rtw_get_network_max_rate -
7733 +* rtw_get_cur_max_rate -
7734 * @adapter: pointer to _adapter structure
7735 -* @bss:
7736 *
7737 -* Return 0 or Mbps
7738 +* Return 0 or 100Kbps
7739 */
7740 -u16 rtw_get_network_max_rate(_adapter *adapter, WLAN_BSSID_EX *bss)
7741 +u16 rtw_get_cur_max_rate(_adapter *adapter)
7742 {
7743 - int i =0;
7744 - u8 *p;
7745 - u16 rate = 0, max_rate = 0, ht_cap=_FALSE;
7746 - u32 ht_ielen = 0;
7747 + int i = 0;
7748 + u8 *p;
7749 + u16 rate = 0, max_rate = 0;
7750 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
7751 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
7752 + struct registry_priv *pregistrypriv = &adapter->registrypriv;
7753 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
7754 + WLAN_BSSID_EX *pcur_bss = &pmlmepriv->cur_network.network;
7755 +#ifdef CONFIG_80211N_HT
7756 struct rtw_ieee80211_ht_cap *pht_capie;
7757 - u8 bw_40MHz=0, short_GI=0;
7758 - u16 mcs_rate=0;
7759 u8 rf_type = 0;
7760 - struct registry_priv *pregpriv = &adapter->registrypriv;
7761 + u8 bw_40MHz=0, short_GI_20=0, short_GI_40=0;
7762 + u16 mcs_rate=0;
7763 + u32 ht_ielen = 0;
7764 +#endif
7765
7766 #ifdef CONFIG_MP_INCLUDED
7767 - if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
7768 - return 0;
7769 + if (adapter->registrypriv.mp_mode == 1)
7770 + {
7771 + if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
7772 + return 0;
7773 + }
7774 #endif
7775
7776 if((check_fwstate(pmlmepriv, _FW_LINKED) != _TRUE)
7777 && (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) != _TRUE))
7778 return 0;
7779 -
7780
7781 - p = rtw_get_ie(&bss->IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, bss->IELength-12);
7782 - if(p && ht_ielen>0)
7783 - {
7784 - ht_cap = _TRUE;
7785 - pht_capie = (struct rtw_ieee80211_ht_cap *)(p+2);
7786 -
7787 - _rtw_memcpy(&mcs_rate , pht_capie->supp_mcs_set, 2);
7788 -
7789 - bw_40MHz = (pht_capie->cap_info&IEEE80211_HT_CAP_SUP_WIDTH) ? 1:0;
7790 - short_GI = (pht_capie->cap_info&(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1:0;
7791 - }
7792 -
7793 - while( (bss->SupportedRates[i]!=0) && (bss->SupportedRates[i]!=0xFF))
7794 - {
7795 - rate = bss->SupportedRates[i]&0x7F;
7796 - if(rate>max_rate)
7797 - max_rate = rate;
7798 - i++;
7799 - }
7800 +#ifdef CONFIG_80211N_HT
7801 + if (pmlmeext->cur_wireless_mode & (WIRELESS_11_24N|WIRELESS_11_5N)) {
7802 + p = rtw_get_ie(&pcur_bss->IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pcur_bss->IELength-12);
7803 + if(p && ht_ielen>0)
7804 + {
7805 + pht_capie = (struct rtw_ieee80211_ht_cap *)(p+2);
7806 +
7807 + _rtw_memcpy(&mcs_rate , pht_capie->supp_mcs_set, 2);
7808
7809 - //TODO: should consider case of WEP and TKIP
7810 - if(ht_cap == _TRUE)
7811 - {
7812 - adapter->HalFunc.GetHwRegHandler(adapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
7813 - if(rf_type == RF_1T1R)
7814 - max_rate = (bw_40MHz) ? ((short_GI)?150:135):((short_GI)?72:65);
7815 - else
7816 - max_rate = (bw_40MHz) ? ((short_GI)?300:270):((short_GI)?144:130);
7817 - }
7818 + //bw_40MHz = (pht_capie->cap_info&IEEE80211_HT_CAP_SUP_WIDTH) ? 1:0;
7819 + //cur_bwmod is updated by beacon, pmlmeinfo is updated by association response
7820 + bw_40MHz = (pmlmeext->cur_bwmode && (HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH & pmlmeinfo->HT_info.infos[0])) ? 1:0;
7821 +
7822 + //short_GI = (pht_capie->cap_info&(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1:0;
7823 + short_GI_20 = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info&IEEE80211_HT_CAP_SGI_20) ? 1:0;
7824 + short_GI_40 = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info&IEEE80211_HT_CAP_SGI_40) ? 1:0;
7825 +
7826 + rtw_hal_get_hwreg(adapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
7827 + max_rate = rtw_mcs_rate(
7828 + rf_type,
7829 + bw_40MHz & (pregistrypriv->cbw40_enable),
7830 + short_GI_20,
7831 + short_GI_40,
7832 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate
7833 + );
7834 + }
7835 + }
7836 else
7837 +#endif //CONFIG_80211N_HT
7838 {
7839 - max_rate/=2;
7840 + while( (pcur_bss->SupportedRates[i]!=0) && (pcur_bss->SupportedRates[i]!=0xFF))
7841 + {
7842 + rate = pcur_bss->SupportedRates[i]&0x7F;
7843 + if(rate>max_rate)
7844 + max_rate = rate;
7845 + i++;
7846 + }
7847 +
7848 + max_rate = max_rate*10/2;
7849 }
7850
7851 return max_rate;
7852 @@ -1408,19 +1453,42 @@ int rtw_set_channel_plan(_adapter *adapter, u8 channel_plan)
7853 */
7854 int rtw_set_country(_adapter *adapter, const char *country_code)
7855 {
7856 - int channel_plan = RT_CHANNEL_DOMAIN_FCC;
7857 + int channel_plan = RT_CHANNEL_DOMAIN_WORLD_WIDE_5G;
7858 +
7859 + DBG_871X("%s country_code:%s\n", __func__, country_code);
7860
7861 //TODO: should have a table to match country code and RT_CHANNEL_DOMAIN
7862 - //TODO: should consider 2-character and 3-character counter code
7863 + //TODO: should consider 2-character and 3-character country code
7864 if(0 == strcmp(country_code, "US"))
7865 channel_plan = RT_CHANNEL_DOMAIN_FCC;
7866 else if(0 == strcmp(country_code, "EU"))
7867 channel_plan = RT_CHANNEL_DOMAIN_ETSI;
7868 else if(0 == strcmp(country_code, "JP"))
7869 channel_plan = RT_CHANNEL_DOMAIN_MKK;
7870 + else if(0 == strcmp(country_code, "CN"))
7871 + channel_plan = RT_CHANNEL_DOMAIN_CHINA;
7872 else
7873 DBG_871X("%s unknown country_code:%s\n", __FUNCTION__, country_code);
7874
7875 return rtw_set_channel_plan(adapter, channel_plan);
7876 }
7877
7878 +/*
7879 +* rtw_set_band -
7880 +* @adapter: pointer to _adapter structure
7881 +* @band: band to set
7882 +*
7883 +* Return _SUCCESS or _FAIL
7884 +*/
7885 +int rtw_set_band(_adapter *adapter, enum _BAND band)
7886 +{
7887 + if (rtw_band_valid(band)) {
7888 + DBG_871X(FUNC_ADPT_FMT" band:%d\n", FUNC_ADPT_ARG(adapter), band);
7889 + adapter->setband = band;
7890 + return _SUCCESS;
7891 + }
7892 +
7893 + DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" band:%d fail\n", FUNC_ADPT_ARG(adapter), band);
7894 + return _FAIL;
7895 +}
7896 +
7897 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_iol.c b/drivers/net/wireless/rtl8192cu/core/rtw_iol.c
7898 index f725ad4..872cc42 100644
7899 --- a/drivers/net/wireless/rtl8192cu/core/rtw_iol.c
7900 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_iol.c
7901 @@ -38,7 +38,7 @@ struct xmit_frame *rtw_IOL_accquire_xmit_frame(ADAPTER *adapter)
7902 if ((xmitbuf = rtw_alloc_xmitbuf(pxmitpriv)) == NULL)
7903 {
7904 DBG_871X("%s rtw_alloc_xmitbuf return null\n", __FUNCTION__);
7905 - rtw_free_xmitframe_ex(pxmitpriv, xmit_frame);
7906 + rtw_free_xmitframe(pxmitpriv, xmit_frame);
7907 xmit_frame=NULL;
7908 goto exit;
7909 }
7910 @@ -145,7 +145,7 @@ int _rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value)
7911 #ifdef DBG_IO
7912 int dbg_rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value, const char *caller, const int line)
7913 {
7914 - if(addr + 1 > DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7915 + if (match_write_sniff_ranges(addr, 1))
7916 DBG_871X("DBG_IO %s:%d IOL_WB(0x%04x, 0x%02x)\n", caller, line, addr, value);
7917
7918 return _rtw_IOL_append_WB_cmd(xmit_frame, addr, value);
7919 @@ -153,7 +153,7 @@ int dbg_rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value,
7920
7921 int dbg_rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value, const char *caller, const int line)
7922 {
7923 - if(addr + 2 > DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7924 + if (match_write_sniff_ranges(addr, 2))
7925 DBG_871X("DBG_IO %s:%d IOL_WW(0x%04x, 0x%04x)\n", caller, line, addr, value);
7926
7927 return _rtw_IOL_append_WW_cmd(xmit_frame, addr, value);
7928 @@ -161,7 +161,7 @@ int dbg_rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value
7929
7930 int dbg_rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value, const char *caller, const int line)
7931 {
7932 - if(addr + 4 > DBG_IO_WRITE_SNIFF_ADDR_START && addr <= DBG_IO_WRITE_SNIFF_ADDR_END)
7933 + if (match_write_sniff_ranges(addr, 4))
7934 DBG_871X("DBG_IO %s:%d IOL_WD(0x%04x, 0x%08x)\n", caller, line, addr, value);
7935
7936 return _rtw_IOL_append_WD_cmd(xmit_frame, addr, value);
7937 @@ -224,10 +224,7 @@ int rtw_IOL_append_END_cmd(struct xmit_frame *xmit_frame)
7938
7939 int rtw_IOL_exec_cmds_sync(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms)
7940 {
7941 - if(adapter->HalFunc.IOL_exec_cmds_sync)
7942 - return adapter->HalFunc.IOL_exec_cmds_sync(adapter, xmit_frame, max_wating_ms);
7943 -
7944 - return _FAIL;
7945 + return rtw_hal_iol_cmd(adapter, xmit_frame, max_wating_ms);
7946 }
7947
7948 int rtw_IOL_exec_cmd_array_sync(PADAPTER adapter, u8 *IOL_cmds, u32 cmd_num, u32 max_wating_ms)
7949 @@ -255,7 +252,7 @@ bool rtw_IOL_applied(ADAPTER *adapter)
7950 return _TRUE;
7951
7952 #ifdef CONFIG_USB_HCI
7953 - if(!adapter->dvobjpriv.ishighspeed)
7954 + if(!adapter_to_dvobj(adapter)->ishighspeed)
7955 return _TRUE;
7956 #endif
7957
7958 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c b/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c
7959 index 2e11d9d..00edd9c 100644
7960 --- a/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c
7961 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c
7962 @@ -16,7 +16,7 @@
7963 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
7964 *
7965 *
7966 -******************************************************************************/
7967 + ******************************************************************************/
7968 #define _RTW_MLME_C_
7969
7970
7971 @@ -25,7 +25,7 @@
7972 #include <drv_types.h>
7973 #include <recv_osdep.h>
7974 #include <xmit_osdep.h>
7975 -#include <hal_init.h>
7976 +#include <hal_intf.h>
7977 #include <mlme_osdep.h>
7978 #include <sta_info.h>
7979 #include <wifi.h>
7980 @@ -35,6 +35,14 @@
7981 extern void indicate_wx_scan_complete_event(_adapter *padapter);
7982 extern u8 rtw_do_join(_adapter * padapter);
7983
7984 +#ifdef CONFIG_DISABLE_MCS13TO15
7985 +extern unsigned char MCS_rate_2R_MCS13TO15_OFF[16];
7986 +extern unsigned char MCS_rate_2R[16];
7987 +#else //CONFIG_DISABLE_MCS13TO15
7988 +extern unsigned char MCS_rate_2R[16];
7989 +#endif //CONFIG_DISABLE_MCS13TO15
7990 +extern unsigned char MCS_rate_1R[16];
7991 +
7992 sint _rtw_init_mlme_priv (_adapter* padapter)
7993 {
7994 sint i;
7995 @@ -55,7 +63,7 @@ _func_enter_;
7996 pmlmepriv->cur_network.network.InfrastructureMode = Ndis802_11AutoUnknown;
7997 pmlmepriv->scan_mode=SCAN_ACTIVE;// 1: active, 0: pasive. Maybe someday we should rename this varable to "active_mode" (Jeff)
7998
7999 - _rtw_spinlock_init(&(pmlmepriv->lock));
8000 + _rtw_spinlock_init(&(pmlmepriv->lock));
8001 _rtw_init_queue(&(pmlmepriv->free_bss_pool));
8002 _rtw_init_queue(&(pmlmepriv->scanned_queue));
8003
8004 @@ -84,9 +92,7 @@ _func_enter_;
8005
8006 //allocate DMA-able/Non-Page memory for cmd_buf and rsp_buf
8007
8008 - #ifdef CONFIG_SET_SCAN_DENY_TIMER
8009 - ATOMIC_SET(&pmlmepriv->set_scan_deny, 0);
8010 - #endif
8011 + rtw_clear_scan_deny(padapter);
8012
8013 rtw_init_mlme_timer(padapter);
8014
8015 @@ -97,6 +103,7 @@ _func_exit_;
8016 return res;
8017 }
8018
8019 +void rtw_mfree_mlme_priv_lock (struct mlme_priv *pmlmepriv);
8020 void rtw_mfree_mlme_priv_lock (struct mlme_priv *pmlmepriv)
8021 {
8022 _rtw_spinlock_free(&pmlmepriv->lock);
8023 @@ -108,7 +115,7 @@ static void rtw_free_mlme_ie_data(u8 **ppie, u32 *plen)
8024 {
8025 if(*ppie)
8026 {
8027 - _rtw_mfree(*ppie, *plen);
8028 + rtw_mfree(*ppie, *plen);
8029 *plen = 0;
8030 *ppie=NULL;
8031 }
8032 @@ -117,6 +124,8 @@ static void rtw_free_mlme_ie_data(u8 **ppie, u32 *plen)
8033 void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv)
8034 {
8035 #if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
8036 + rtw_buf_free(&pmlmepriv->assoc_req, &pmlmepriv->assoc_req_len);
8037 + rtw_buf_free(&pmlmepriv->assoc_rsp, &pmlmepriv->assoc_rsp_len);
8038 rtw_free_mlme_ie_data(&pmlmepriv->wps_beacon_ie, &pmlmepriv->wps_beacon_ie_len);
8039 rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_req_ie, &pmlmepriv->wps_probe_req_ie_len);
8040 rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_resp_ie, &pmlmepriv->wps_probe_resp_ie_len);
8041 @@ -128,6 +137,15 @@ void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv)
8042 rtw_free_mlme_ie_data(&pmlmepriv->p2p_go_probe_resp_ie, &pmlmepriv->p2p_go_probe_resp_ie_len);
8043 rtw_free_mlme_ie_data(&pmlmepriv->p2p_assoc_req_ie, &pmlmepriv->p2p_assoc_req_ie_len);
8044 #endif
8045 +
8046 +#if defined(CONFIG_WFD) && defined(CONFIG_IOCTL_CFG80211)
8047 + rtw_free_mlme_ie_data(&pmlmepriv->wfd_beacon_ie, &pmlmepriv->wfd_beacon_ie_len);
8048 + rtw_free_mlme_ie_data(&pmlmepriv->wfd_probe_req_ie, &pmlmepriv->wfd_probe_req_ie_len);
8049 + rtw_free_mlme_ie_data(&pmlmepriv->wfd_probe_resp_ie, &pmlmepriv->wfd_probe_resp_ie_len);
8050 + rtw_free_mlme_ie_data(&pmlmepriv->wfd_go_probe_resp_ie, &pmlmepriv->wfd_go_probe_resp_ie_len);
8051 + rtw_free_mlme_ie_data(&pmlmepriv->wfd_assoc_req_ie, &pmlmepriv->wfd_assoc_req_ie_len);
8052 +#endif
8053 +
8054 }
8055
8056 void _rtw_free_mlme_priv (struct mlme_priv *pmlmepriv)
8057 @@ -278,6 +296,17 @@ _func_enter_;
8058 }
8059
8060 #endif
8061 +
8062 +#ifdef PLATFORM_FREEBSD
8063 + //i think needs to check again
8064 + delta_time = (curr_time -pnetwork->last_scanned)/hz;
8065 +
8066 + if(delta_time < lifetime)// unit:sec
8067 + {
8068 + goto exit;
8069 + }
8070 +
8071 +#endif
8072 }
8073
8074 _enter_critical_bh(&free_queue->lock, &irqL);
8075 @@ -385,8 +414,6 @@ void _rtw_free_network_queue(_adapter *padapter, u8 isfreeall)
8076 struct wlan_network *pnetwork;
8077 struct mlme_priv* pmlmepriv = &padapter->mlmepriv;
8078 _queue *scanned_queue = &pmlmepriv->scanned_queue;
8079 - _queue *free_queue = &pmlmepriv->free_bss_pool;
8080 - u8 *mybssid = get_bssid(pmlmepriv);
8081
8082 _func_enter_;
8083
8084 @@ -494,6 +521,7 @@ _func_enter_;
8085 _func_exit_;
8086 }
8087
8088 +int rtw_enqueue_network(_queue *queue, struct wlan_network *pnetwork);
8089 int rtw_enqueue_network(_queue *queue, struct wlan_network *pnetwork)
8090 {
8091 int res;
8092 @@ -504,7 +532,7 @@ _func_exit_;
8093 }
8094
8095
8096 -
8097 +#ifndef PLATFORM_FREEBSD //Baron
8098 static struct wlan_network *rtw_dequeue_network(_queue *queue)
8099 {
8100 struct wlan_network *pnetwork;
8101 @@ -513,8 +541,9 @@ _func_enter_;
8102 _func_exit_;
8103 return pnetwork;
8104 }
8105 +#endif //PLATFORM_FREEBSD
8106
8107 -
8108 +struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv );
8109 struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv )//(_queue *free_queue)
8110 {
8111 struct wlan_network *pnetwork;
8112 @@ -524,6 +553,7 @@ _func_exit_;
8113 return pnetwork;
8114 }
8115
8116 +void rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, u8 is_freeall);
8117 void rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, u8 is_freeall)//(struct wlan_network *pnetwork, _queue *free_queue)
8118 {
8119 _func_enter_;
8120 @@ -532,7 +562,7 @@ _func_enter_;
8121 _func_exit_;
8122 }
8123
8124 -
8125 +void rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork );
8126 void rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork )
8127 {
8128 _func_enter_;
8129 @@ -585,6 +615,7 @@ int rtw_is_same_ibss(_adapter *adapter, struct wlan_network *pnetwork)
8130
8131 }
8132
8133 +inline int is_same_ess(WLAN_BSSID_EX *a, WLAN_BSSID_EX *b);
8134 inline int is_same_ess(WLAN_BSSID_EX *a, WLAN_BSSID_EX *b)
8135 {
8136 //RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("(%s,%d)(%s,%d)\n",
8137 @@ -593,7 +624,7 @@ inline int is_same_ess(WLAN_BSSID_EX *a, WLAN_BSSID_EX *b)
8138 && _rtw_memcmp(a->Ssid.Ssid, b->Ssid.Ssid, a->Ssid.SsidLength)==_TRUE;
8139 }
8140
8141 -static int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst)
8142 +int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst)
8143 {
8144 u16 s_cap, d_cap;
8145
8146 @@ -667,9 +698,9 @@ _func_exit_;
8147
8148 }
8149
8150 -static void update_network(WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src,_adapter * padapter)
8151 +static void update_network(WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src,
8152 + _adapter * padapter, bool update_ie)
8153 {
8154 - u32 last_evm = 0, tmpVal;
8155 u8 ss_ori = dst->PhyInfo.SignalStrength;
8156 u8 sq_ori = dst->PhyInfo.SignalQuality;
8157 long rssi_ori = dst->Rssi;
8158 @@ -678,16 +709,20 @@ static void update_network(WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src,_adapter * pad
8159 u8 sq_smp = src->PhyInfo.SignalQuality;
8160 long rssi_smp = src->Rssi;
8161
8162 + u8 ss_final;
8163 + u8 sq_final;
8164 + long rssi_final;
8165 +
8166 _func_enter_;
8167
8168 #ifdef CONFIG_ANTENNA_DIVERSITY
8169 - padapter->HalFunc.SwAntDivCompareHandler(padapter, dst, src);
8170 + rtw_hal_antdiv_rssi_compared(padapter, dst, src); //this will update src.Rssi, need consider again
8171 #endif
8172
8173 - #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
8174 + #if defined(DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) && 1
8175 if(strcmp(dst->Ssid.Ssid, DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) == 0) {
8176 - 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"
8177 - , __FUNCTION__
8178 + 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"
8179 + , FUNC_ADPT_ARG(padapter)
8180 , src->Ssid.Ssid, MAC_ARG(src->MacAddress), src->Configuration.DSConfig
8181 ,ss_ori, sq_ori, rssi_ori
8182 ,ss_smp, sq_smp, rssi_smp
8183 @@ -695,56 +730,52 @@ _func_enter_;
8184 }
8185 #endif
8186
8187 -
8188 - //Update signal strength first. Alwlays using the newest value will cause large vibration of scan result's signal strength
8189 - //The rule below is 1/5 for sample value, 4/5 for history value
8190 + /* The rule below is 1/5 for sample value, 4/5 for history value */
8191 if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) && is_same_network(&(padapter->mlmepriv.cur_network.network), src)) {
8192 - //Because we've process the rx phy info in rtl8192c_process_phy_info/rtl8192d_process_phy_info,
8193 - //we can just take the recvpriv's value
8194 - src->PhyInfo.SignalStrength = padapter->recvpriv.signal_strength;
8195 - src->PhyInfo.SignalQuality = padapter->recvpriv.signal_qual;
8196 - // the rssi value here is undecorated, and will be used for antenna diversity
8197 - if(src->PhyInfo.SignalQuality != 101)
8198 - src->Rssi = (src->Rssi+dst->Rssi*4)/5;
8199 + /* Take the recvpriv's value for the connected AP*/
8200 + ss_final = padapter->recvpriv.signal_strength;
8201 + sq_final = padapter->recvpriv.signal_qual;
8202 + /* the rssi value here is undecorated, and will be used for antenna diversity */
8203 + if(sq_smp != 101) /* from the right channel */
8204 + rssi_final = (src->Rssi+dst->Rssi*4)/5;
8205 else
8206 - src->Rssi = dst->Rssi;
8207 + rssi_final = rssi_ori;
8208 }
8209 else {
8210 - if(src->PhyInfo.SignalQuality != 101) {
8211 - // handle bss info receving from the right channel
8212 - src->PhyInfo.SignalStrength = ((u32)(src->PhyInfo.SignalStrength)+(u32)(dst->PhyInfo.SignalStrength)*4)/5;
8213 - src->PhyInfo.SignalQuality = ((u32)(src->PhyInfo.SignalQuality)+(u32)(dst->PhyInfo.SignalQuality)*4)/5;
8214 - src->Rssi = (src->Rssi+dst->Rssi*4)/5; // the rssi value here is undecorated, and will be used for antenna diversity
8215 + if(sq_smp != 101) { /* from the right channel */
8216 + ss_final = ((u32)(src->PhyInfo.SignalStrength)+(u32)(dst->PhyInfo.SignalStrength)*4)/5;
8217 + sq_final = ((u32)(src->PhyInfo.SignalQuality)+(u32)(dst->PhyInfo.SignalQuality)*4)/5;
8218 + rssi_final = (src->Rssi+dst->Rssi*4)/5;
8219 } else {
8220 - // bss info not receving from the right channel, use the original RX signal infos
8221 - src->PhyInfo.SignalStrength = dst->PhyInfo.SignalStrength;
8222 - src->PhyInfo.SignalQuality = dst->PhyInfo.SignalQuality;
8223 - src->Rssi = dst->Rssi;
8224 + /* bss info not receving from the right channel, use the original RX signal infos */
8225 + ss_final = dst->PhyInfo.SignalStrength;
8226 + sq_final = dst->PhyInfo.SignalQuality;
8227 + rssi_final = dst->Rssi;
8228 }
8229
8230 }
8231
8232 + if (update_ie)
8233 + _rtw_memcpy((u8 *)dst, (u8 *)src, get_WLAN_BSSID_EX_sz(src));
8234
8235 - _rtw_memcpy((u8 *)dst, (u8 *)src, get_WLAN_BSSID_EX_sz(src));
8236 -
8237 - src->PhyInfo.SignalStrength = ss_smp;
8238 - src->PhyInfo.SignalQuality = sq_smp;
8239 - src->Rssi = rssi_smp;
8240 + dst->PhyInfo.SignalStrength = ss_final;
8241 + dst->PhyInfo.SignalQuality = sq_final;
8242 + dst->Rssi = rssi_final;
8243
8244 - #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
8245 - if(strcmp(dst->Ssid.Ssid, DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) == 0) {
8246 - DBG_871X("%s %s("MAC_FMT"), SignalStrength:%u, SignalQuality:%u, RawRSSI:%ld\n"
8247 - , __FUNCTION__
8248 + #if defined(DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) && 1
8249 + if(strcmp(dst->Ssid.Ssid, DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) == 0) {
8250 + DBG_871X(FUNC_ADPT_FMT" %s("MAC_FMT"), SignalStrength:%u, SignalQuality:%u, RawRSSI:%ld\n"
8251 + , FUNC_ADPT_ARG(padapter)
8252 , dst->Ssid.Ssid, MAC_ARG(dst->MacAddress), dst->PhyInfo.SignalStrength, dst->PhyInfo.SignalQuality, dst->Rssi);
8253 - }
8254 - #endif
8255 + }
8256 + #endif
8257
8258 #if 0 // old codes, may be useful one day...
8259 -// 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);
8260 +// 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);
8261 if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) && is_same_network(&(padapter->mlmepriv.cur_network.network), src))
8262 {
8263
8264 - //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);
8265 + //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);
8266 if(padapter->recvpriv.signal_qual_data.total_num++ >= PHY_LINKQUALITY_SLID_WIN_MAX)
8267 {
8268 padapter->recvpriv.signal_qual_data.total_num = PHY_LINKQUALITY_SLID_WIN_MAX;
8269 @@ -757,7 +788,7 @@ _func_enter_;
8270 if(padapter->recvpriv.signal_qual_data.index >= PHY_LINKQUALITY_SLID_WIN_MAX)
8271 padapter->recvpriv.signal_qual_data.index = 0;
8272
8273 - //DBG_8192C("Total SQ=%d pattrib->signal_qual= %d\n", padapter->recvpriv.signal_qual_data.total_val, src->Rssi);
8274 + //DBG_871X("Total SQ=%d pattrib->signal_qual= %d\n", padapter->recvpriv.signal_qual_data.total_val, src->Rssi);
8275
8276 // <1> Showed on UI for user,in percentage.
8277 tmpVal = padapter->recvpriv.signal_qual_data.total_val/padapter->recvpriv.signal_qual_data.total_num;
8278 @@ -766,11 +797,11 @@ _func_enter_;
8279 src->Rssi= translate_percentage_to_dbm(padapter->recvpriv.signal) ;
8280 }
8281 else{
8282 -// DBG_8192C("ELSE:ssid=%s update_network: src->rssi=0x%d dst->rssi=%d\n",src->Ssid.Ssid,src->Rssi,dst->Rssi);
8283 +// DBG_871X("ELSE:ssid=%s update_network: src->rssi=0x%d dst->rssi=%d\n",src->Ssid.Ssid,src->Rssi,dst->Rssi);
8284 src->Rssi=(src->Rssi +dst->Rssi)/2;//dBM
8285 }
8286
8287 -// DBG_8192C("a:update_network: src->rssi=0x%d padapter->recvpriv.ui_rssi=%d\n",src->Rssi,padapter->recvpriv.signal);
8288 +// DBG_871X("a:update_network: src->rssi=0x%d padapter->recvpriv.ui_rssi=%d\n",src->Rssi,padapter->recvpriv.signal);
8289
8290 #endif
8291
8292 @@ -796,7 +827,7 @@ _func_enter_;
8293
8294 //if(pmlmepriv->cur_network.network.IELength<= pnetwork->IELength)
8295 {
8296 - update_network(&(pmlmepriv->cur_network.network), pnetwork,adapter);
8297 + update_network(&(pmlmepriv->cur_network.network), pnetwork,adapter, _TRUE);
8298 rtw_update_protection(adapter, (pmlmepriv->cur_network.network.IEs) + sizeof (NDIS_802_11_FIXED_IEs),
8299 pmlmepriv->cur_network.network.IELength);
8300 }
8301 @@ -824,6 +855,7 @@ void rtw_update_scanned_network(_adapter *adapter, WLAN_BSSID_EX *target)
8302 struct wlan_network *oldest = NULL;
8303
8304 _func_enter_;
8305 +
8306 _enter_critical_bh(&queue->lock, &irqL);
8307 phead = get_list_head(queue);
8308 plist = get_next(phead);
8309 @@ -865,17 +897,21 @@ _func_enter_;
8310
8311 #ifdef CONFIG_ANTENNA_DIVERSITY
8312 //target->PhyInfo.Optimum_antenna = pHalData->CurAntenna;//optimum_antenna=>For antenna diversity
8313 - adapter->HalFunc.GetHalDefVarHandler(adapter, HAL_DEF_CURRENT_ANTENNA, &(target->PhyInfo.Optimum_antenna));
8314 + rtw_hal_get_def_var(adapter, HAL_DEF_CURRENT_ANTENNA, &(target->PhyInfo.Optimum_antenna));
8315 #endif
8316 _rtw_memcpy(&(pnetwork->network), target, get_WLAN_BSSID_EX_sz(target));
8317 - pnetwork->last_scanned = rtw_get_current_time();
8318 - //variable initialize
8319 + //pnetwork->last_scanned = rtw_get_current_time();
8320 + // variable initialize
8321 pnetwork->fixed = _FALSE;
8322 pnetwork->last_scanned = rtw_get_current_time();
8323
8324 pnetwork->network_type = 0;
8325 pnetwork->aid=0;
8326 pnetwork->join_res=0;
8327 +
8328 + /* bss info not receving from the right channel */
8329 + if (pnetwork->network.PhyInfo.SignalQuality == 101)
8330 + pnetwork->network.PhyInfo.SignalQuality = 0;
8331 }
8332 else {
8333 /* Otherwise just pull from the free list */
8334 @@ -891,10 +927,16 @@ _func_enter_;
8335 target->Length = bssid_ex_sz;
8336 #ifdef CONFIG_ANTENNA_DIVERSITY
8337 //target->PhyInfo.Optimum_antenna = pHalData->CurAntenna;
8338 - adapter->HalFunc.GetHalDefVarHandler(adapter, HAL_DEF_CURRENT_ANTENNA, &(target->PhyInfo.Optimum_antenna));
8339 + rtw_hal_get_def_var(adapter, HAL_DEF_CURRENT_ANTENNA, &(target->PhyInfo.Optimum_antenna));
8340 #endif
8341 _rtw_memcpy(&(pnetwork->network), target, bssid_ex_sz );
8342
8343 + pnetwork->last_scanned = rtw_get_current_time();
8344 +
8345 + /* bss info not receving from the right channel */
8346 + if (pnetwork->network.PhyInfo.SignalQuality == 101)
8347 + pnetwork->network.PhyInfo.SignalQuality = 0;
8348 +
8349 rtw_list_insert_tail(&(pnetwork->list),&(queue->queue));
8350
8351 }
8352 @@ -904,23 +946,24 @@ _func_enter_;
8353 * be already expired. In this case we do the same as we found a new
8354 * net and call the new_net handler
8355 */
8356 - //target.Reserved[0]==1, means that scaned network is a bcn frame.
8357 - if((pnetwork->network.IELength>target->IELength) && (target->Reserved[0]==1))
8358 - goto exit;
8359 -
8360 - update_network(&(pnetwork->network),target,adapter);
8361 + bool update_ie = _TRUE;
8362
8363 pnetwork->last_scanned = rtw_get_current_time();
8364
8365 + //target.Reserved[0]==1, means that scaned network is a bcn frame.
8366 + if((pnetwork->network.IELength>target->IELength) && (target->Reserved[0]==1))
8367 + update_ie = _FALSE;
8368 +
8369 + update_network(&(pnetwork->network), target,adapter, update_ie);
8370 }
8371
8372 exit:
8373 _exit_critical_bh(&queue->lock, &irqL);
8374 -_func_exit_;
8375
8376 +_func_exit_;
8377 }
8378
8379 -
8380 +void rtw_add_network(_adapter *adapter, WLAN_BSSID_EX *pnetwork);
8381 void rtw_add_network(_adapter *adapter, WLAN_BSSID_EX *pnetwork)
8382 {
8383 _irqL irqL;
8384 @@ -950,6 +993,7 @@ _func_exit_;
8385 // (3) WMM
8386 // (4) HT
8387 // (5) others
8388 +int rtw_is_desired_network(_adapter *adapter, struct wlan_network *pnetwork);
8389 int rtw_is_desired_network(_adapter *adapter, struct wlan_network *pnetwork)
8390 {
8391 struct security_priv *psecuritypriv = &adapter->securitypriv;
8392 @@ -965,7 +1009,7 @@ int rtw_is_desired_network(_adapter *adapter, struct wlan_network *pnetwork)
8393 desired_encmode = psecuritypriv->ndisencryptstatus;
8394 privacy = pnetwork->network.Privacy;
8395
8396 - if(psecuritypriv->wps_phase == _TRUE)
8397 + if(check_fwstate(pmlmepriv, WIFI_UNDER_WPS))
8398 {
8399 if(rtw_get_wps_ie(pnetwork->network.IEs+_FIXED_IE_LENGTH_, pnetwork->network.IELength-_FIXED_IE_LENGTH_, NULL, &wps_ielen)!=NULL)
8400 {
8401 @@ -978,8 +1022,20 @@ int rtw_is_desired_network(_adapter *adapter, struct wlan_network *pnetwork)
8402 }
8403 if (adapter->registrypriv.wifi_spec == 1) //for correct flow of 8021X to do....
8404 {
8405 + u8 *p=NULL;
8406 + uint ie_len=0;
8407 +
8408 if ((desired_encmode == Ndis802_11EncryptionDisabled) && (privacy != 0))
8409 bselected = _FALSE;
8410 +
8411 + if ( psecuritypriv->ndisauthtype == Ndis802_11AuthModeWPA2PSK) {
8412 + p = rtw_get_ie(pnetwork->network.IEs + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pnetwork->network.IELength - _BEACON_IE_OFFSET_));
8413 + if (p && ie_len>0) {
8414 + bselected = _TRUE;
8415 + } else {
8416 + bselected = _FALSE;
8417 + }
8418 + }
8419 }
8420
8421
8422 @@ -1097,6 +1153,7 @@ _func_exit_;
8423 void rtw_surveydone_event_callback(_adapter *adapter, u8 *pbuf)
8424 {
8425 _irqL irqL;
8426 + u8 timer_cancelled = _FALSE;
8427 struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
8428
8429 #ifdef CONFIG_MLME_EXT
8430 @@ -1108,7 +1165,6 @@ void rtw_surveydone_event_callback(_adapter *adapter, u8 *pbuf)
8431 _func_enter_;
8432
8433 _enter_critical_bh(&pmlmepriv->lock, &irqL);
8434 -
8435 if(pmlmepriv->wps_probe_req_ie)
8436 {
8437 u32 free_len = pmlmepriv->wps_probe_req_ie_len;
8438 @@ -1121,21 +1177,29 @@ _func_enter_;
8439
8440 if (check_fwstate(pmlmepriv,_FW_UNDER_SURVEY))
8441 {
8442 - u8 timer_cancelled;
8443 -
8444 - _cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
8445 + //u8 timer_cancelled;
8446 +
8447 + timer_cancelled = _TRUE;
8448 + //_cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
8449
8450 _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
8451 }
8452 else {
8453
8454 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("nic status =%x, survey done event comes too late!\n", get_fwstate(pmlmepriv)));
8455 - }
8456 -
8457 + }
8458 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
8459 +
8460 + if(timer_cancelled)
8461 + _cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
8462 +
8463 +
8464 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
8465 +
8466 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
8467 rtw_set_signal_stat_timer(&adapter->recvpriv);
8468 #endif
8469 -
8470 +
8471 if(pmlmepriv->to_join == _TRUE)
8472 {
8473 if((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)==_TRUE) )
8474 @@ -1191,18 +1255,21 @@ _func_enter_;
8475 }
8476 else
8477 {
8478 + DBG_871X("try_to_join, but select scanning queue fail, to_roaming:%d\n", rtw_to_roaming(adapter));
8479 #ifdef CONFIG_LAYER2_ROAMING
8480 - DBG_871X("try_to_join, but select scanning queue fail, to_roaming:%d\n", pmlmepriv->to_roaming);
8481 - #else
8482 - DBG_871X("try_to_join, but select scanning queue fail\n");
8483 - #endif
8484 -
8485 - #ifdef CONFIG_LAYER2_ROAMING
8486 - if(pmlmepriv->to_roaming!=0) {
8487 + if (rtw_to_roaming(adapter) != 0) {
8488 if( --pmlmepriv->to_roaming == 0
8489 - || _SUCCESS != rtw_sitesurvey_cmd(adapter, &pmlmepriv->assoc_ssid, 1)
8490 + || _SUCCESS != rtw_sitesurvey_cmd(adapter, &pmlmepriv->assoc_ssid, 1, NULL, 0)
8491 ) {
8492 - pmlmepriv->to_roaming = 0;
8493 + rtw_set_roaming(adapter, 0);
8494 +#ifdef CONFIG_INTEL_WIDI
8495 + if(adapter->mlmepriv.widi_state == INTEL_WIDI_STATE_ROAMING)
8496 + {
8497 + _rtw_memset(pmlmepriv->sa_ext, 0x00, L2SDTA_SERVICE_VE_LEN);
8498 + intel_widi_wk_cmd(adapter, INTEL_WIDI_LISTEN_WK, NULL);
8499 + DBG_871X("change to widi listen\n");
8500 + }
8501 +#endif // CONFIG_INTEL_WIDI
8502 rtw_free_assoc_resources(adapter, 1);
8503 rtw_indicate_disconnect(adapter);
8504 } else {
8505 @@ -1213,32 +1280,42 @@ _func_enter_;
8506 _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
8507 }
8508 }
8509 - }
8510 + }
8511
8512 indicate_wx_scan_complete_event(adapter);
8513 //DBG_871X("scan complete in %dms\n",rtw_get_passing_time_ms(pmlmepriv->scan_start_time));
8514
8515 _exit_critical_bh(&pmlmepriv->lock, &irqL);
8516
8517 -#ifdef CONFIG_P2P
8518 - p2p_ps_wk_cmd(adapter, P2P_PS_SCAN_DONE, 0);
8519 -#endif //CONFIG_P2P
8520 +#ifdef CONFIG_P2P_PS
8521 + if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
8522 + p2p_ps_wk_cmd(adapter, P2P_PS_SCAN_DONE, 0);
8523 + }
8524 +#endif // CONFIG_P2P_PS
8525
8526 rtw_os_xmit_schedule(adapter);
8527 +#ifdef CONFIG_CONCURRENT_MODE
8528 + rtw_os_xmit_schedule(adapter->pbuddy_adapter);
8529 +#endif
8530 +#ifdef CONFIG_DUALMAC_CONCURRENT
8531 + dc_resume_xmit(adapter);
8532 +#endif
8533
8534 #ifdef CONFIG_DRVEXT_MODULE_WSC
8535 drvext_surveydone_callback(&adapter->drvextpriv);
8536 #endif
8537
8538 #ifdef DBG_CONFIG_ERROR_DETECT
8539 +#ifdef CONFIG_INTEL_WIDI
8540 + if (adapter->mlmepriv.widi_state == INTEL_WIDI_STATE_NONE)
8541 +#endif
8542 {
8543 struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
8544 if(pmlmeext->sitesurvey_res.bss_cnt == 0){
8545 - if(adapter->HalFunc.silentreset)
8546 - adapter->HalFunc.silentreset(adapter);
8547 + rtw_hal_sreset_reset(adapter);
8548 }
8549 }
8550 - #endif
8551 +#endif
8552
8553 #ifdef CONFIG_IOCTL_CFG80211
8554 rtw_cfg80211_surveydone_event_callback(adapter);
8555 @@ -1297,19 +1374,15 @@ void rtw_free_assoc_resources(_adapter *adapter, int lock_scanned_queue)
8556 _irqL irqL;
8557 struct wlan_network* pwlan = NULL;
8558 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
8559 - struct mlme_ext_info *pmlmeinfo = &adapter->mlmeextpriv.mlmext_info;
8560 struct sta_priv *pstapriv = &adapter->stapriv;
8561 struct wlan_network *tgt_network = &pmlmepriv->cur_network;
8562
8563 #ifdef CONFIG_TDLS
8564 struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
8565 -#endif //CONFIG_TDLS
8566 +#endif //CONFIG_TDLS
8567 _func_enter_;
8568
8569 RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_, ("+rtw_free_assoc_resources\n"));
8570 -
8571 -
8572 -
8573 RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, ("tgt_network->network.MacAddress="MAC_FMT" ssid=%s\n",
8574 MAC_ARG(tgt_network->network.MacAddress), tgt_network->network.Ssid.Ssid));
8575
8576 @@ -1320,22 +1393,19 @@ _func_enter_;
8577 psta = rtw_get_stainfo(&adapter->stapriv, tgt_network->network.MacAddress);
8578
8579 #ifdef CONFIG_TDLS
8580 - if(ptdlsinfo->setup_state != UN_TDLS_STATE)
8581 + if(ptdlsinfo->setup_state != TDLS_STATE_NONE)
8582 {
8583 rtw_tdls_cmd(adapter, myid(&(adapter->eeprompriv)), TDLS_RS_RCR);
8584 - ptdlsinfo->setup_state = UN_TDLS_STATE;
8585 + rtw_reset_tdls_info(adapter);
8586 rtw_free_all_stainfo(adapter);
8587 _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
8588 }
8589 else
8590 +#endif //CONFIG_TDLS
8591 {
8592 _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
8593 rtw_free_stainfo(adapter, psta);
8594 }
8595 -#else
8596 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
8597 - rtw_free_stainfo(adapter, psta);
8598 -#endif //CONFIG_TDLS
8599
8600 _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
8601
8602 @@ -1359,10 +1429,36 @@ _func_enter_;
8603 _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
8604
8605 pwlan = rtw_find_network(&pmlmepriv->scanned_queue, tgt_network->network.MacAddress);
8606 - if(pwlan)
8607 + if(pwlan)
8608 {
8609 pwlan->fixed = _FALSE;
8610 - }
8611 +#ifdef CONFIG_P2P
8612 + if(!rtw_p2p_chk_state(&adapter->wdinfo, P2P_STATE_NONE))
8613 + {
8614 + u32 p2p_ielen=0;
8615 + u8 *p2p_ie;
8616 + //u16 capability;
8617 + u8 *pcap = NULL;
8618 + u32 capability_len=0;
8619 +
8620 + //DBG_871X("free disconnecting network\n");
8621 + //rtw_free_network_nolock(pmlmepriv, pwlan);
8622 +
8623 + if((p2p_ie=rtw_get_p2p_ie(pwlan->network.IEs+_FIXED_IE_LENGTH_, pwlan->network.IELength-_FIXED_IE_LENGTH_, NULL, &p2p_ielen)))
8624 + {
8625 + pcap = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, NULL, &capability_len);
8626 + if(pcap && capability_len==2)
8627 + {
8628 + u16 cap = *(u16*)pcap ;
8629 + *(u16*)pcap = cap&0x00ff;//clear group capability when free this network
8630 + }
8631 + }
8632 +
8633 + rtw_set_scan_deny(adapter, 2000);
8634 + //rtw_clear_scan_deny(adapter);
8635 + }
8636 +#endif //CONFIG_P2P
8637 + }
8638 else
8639 {
8640 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("rtw_free_assoc_resources : pwlan== NULL \n\n"));
8641 @@ -1372,15 +1468,15 @@ _func_enter_;
8642 if((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) && (adapter->stapriv.asoc_sta_count== 1))
8643 /*||check_fwstate(pmlmepriv, WIFI_STATION_STATE)*/)
8644 {
8645 - rtw_free_network_nolock(pmlmepriv, pwlan);
8646 + rtw_free_network_nolock(pmlmepriv, pwlan);
8647 }
8648
8649 if(lock_scanned_queue)
8650 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
8651
8652 - pmlmepriv->key_mask = 0;
8653 + adapter->securitypriv.key_mask = 0;
8654
8655 -_func_exit_;
8656 +_func_exit_;
8657
8658 }
8659
8660 @@ -1397,12 +1493,16 @@ _func_enter_;
8661 RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("+rtw_indicate_connect\n"));
8662
8663 pmlmepriv->to_join = _FALSE;
8664 +
8665 + if(!check_fwstate(&padapter->mlmepriv, _FW_LINKED))
8666 + {
8667 +
8668 #ifdef CONFIG_SW_ANTENNA_DIVERSITY
8669 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_ANTENNA_DIVERSITY_LINK, 0);
8670 + rtw_hal_set_hwreg(padapter, HW_VAR_ANTENNA_DIVERSITY_LINK, 0);
8671 #endif
8672 set_fwstate(pmlmepriv, _FW_LINKED);
8673
8674 - rtw_led_control(padapter, LED_CTL_LINK);
8675 + rtw_led_control(padapter, LED_CTL_LINK);
8676
8677 #ifdef CONFIG_DRVEXT_MODULE
8678 if(padapter->drvextpriv.enable_wpa)
8679 @@ -1415,13 +1515,20 @@ _func_enter_;
8680 rtw_os_indicate_connect(padapter);
8681 }
8682
8683 - #ifdef CONFIG_LAYER2_ROAMING
8684 - pmlmepriv->to_roaming=0;
8685 - #endif
8686 + }
8687
8688 - #ifdef CONFIG_SET_SCAN_DENY_TIMER
8689 - rtw_set_scan_deny(pmlmepriv, 3000);
8690 - #endif
8691 + rtw_set_roaming(padapter, 0);
8692 +
8693 +#ifdef CONFIG_INTEL_WIDI
8694 + if(padapter->mlmepriv.widi_state == INTEL_WIDI_STATE_ROAMING)
8695 + {
8696 + _rtw_memset(pmlmepriv->sa_ext, 0x00, L2SDTA_SERVICE_VE_LEN);
8697 + intel_widi_wk_cmd(padapter, INTEL_WIDI_LISTEN_WK, NULL);
8698 + DBG_871X("change to widi listen\n");
8699 + }
8700 +#endif // CONFIG_INTEL_WIDI
8701 +
8702 + rtw_set_scan_deny(padapter, 3000);
8703
8704 RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("-rtw_indicate_connect: fw_state=0x%08x\n", get_fwstate(pmlmepriv)));
8705
8706 @@ -1441,24 +1548,39 @@ _func_enter_;
8707
8708 RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_, ("+rtw_indicate_disconnect\n"));
8709
8710 - _clr_fwstate_(pmlmepriv, _FW_LINKED|_FW_UNDER_LINKING);
8711 + _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING|WIFI_UNDER_WPS);
8712
8713 - rtw_led_control(padapter, LED_CTL_NO_LINK);
8714 + if(rtw_to_roaming(padapter) > 0)
8715 + _clr_fwstate_(pmlmepriv, _FW_LINKED);
8716
8717 - #ifdef CONFIG_LAYER2_ROAMING
8718 - if(pmlmepriv->to_roaming<=0)
8719 - #endif
8720 + if(check_fwstate(&padapter->mlmepriv, _FW_LINKED)
8721 + || (rtw_to_roaming(padapter) <= 0)
8722 + )
8723 + {
8724 rtw_os_indicate_disconnect(padapter);
8725
8726 -#ifdef CONFIG_LPS
8727 - if(padapter->pwrctrlpriv.wowlan_mode==_FALSE){
8728 - rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_DISCONNECT, 1);
8729 + //set ips_deny_time to avoid enter IPS before LPS leave
8730 + padapter->pwrctrlpriv.ips_deny_time = rtw_get_current_time() + rtw_ms_to_systime(3000);
8731 +
8732 + _clr_fwstate_(pmlmepriv, _FW_LINKED);
8733 +
8734 + rtw_led_control(padapter, LED_CTL_NO_LINK);
8735 +
8736 + rtw_clear_scan_deny(padapter);
8737 +
8738 }
8739 -#endif
8740
8741 -#ifdef CONFIG_P2P
8742 +#ifdef CONFIG_P2P_PS
8743 p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
8744 -#endif //CONFIG_P2P
8745 +#endif // CONFIG_P2P_PS
8746 +
8747 +#ifdef CONFIG_LPS
8748 +#ifdef CONFIG_WOWLAN
8749 + if(padapter->pwrctrlpriv.wowlan_mode==_FALSE)
8750 +#endif //CONFIG_WOWLAN
8751 + rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_DISCONNECT, 1);
8752 +
8753 +#endif
8754
8755 _func_exit_;
8756 }
8757 @@ -1468,16 +1590,45 @@ inline void rtw_indicate_scan_done( _adapter *padapter, bool aborted)
8758 rtw_os_indicate_scan_done(padapter, aborted);
8759 }
8760
8761 +void rtw_scan_abort(_adapter *adapter)
8762 +{
8763 + u32 cnt=0;
8764 + u32 start;
8765 + struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
8766 + struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
8767 +
8768 + start = rtw_get_current_time();
8769 + pmlmeext->scan_abort = _TRUE;
8770 + while (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)
8771 + && rtw_get_passing_time_ms(start) <= 200) {
8772 +
8773 + if (adapter->bDriverStopped || adapter->bSurpriseRemoved)
8774 + break;
8775 +
8776 + DBG_871X(FUNC_NDEV_FMT"fw_state=_FW_UNDER_SURVEY!\n", FUNC_NDEV_ARG(adapter->pnetdev));
8777 + rtw_msleep_os(20);
8778 + }
8779 +
8780 + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
8781 + if (!adapter->bDriverStopped && !adapter->bSurpriseRemoved)
8782 + DBG_871X(FUNC_NDEV_FMT"waiting for scan_abort time out!\n", FUNC_NDEV_ARG(adapter->pnetdev));
8783 + #ifdef CONFIG_PLATFORM_MSTAR
8784 + //_clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
8785 + set_survey_timer(pmlmeext, 0);
8786 + _set_timer(&pmlmepriv->scan_to_timer, 50);
8787 + #endif
8788 + rtw_indicate_scan_done(adapter, _TRUE);
8789 + }
8790 + pmlmeext->scan_abort = _FALSE;
8791 +}
8792 +
8793 static struct sta_info *rtw_joinbss_update_stainfo(_adapter *padapter, struct wlan_network *pnetwork)
8794 {
8795 int i;
8796 struct sta_info *bmc_sta, *psta=NULL;
8797 struct recv_reorder_ctrl *preorder_ctrl;
8798 struct sta_priv *pstapriv = &padapter->stapriv;
8799 -#ifdef CONFIG_CONCURRENT_MODE
8800 - PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
8801 - struct mlme_priv *pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
8802 -#endif
8803 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
8804
8805 psta = rtw_get_stainfo(pstapriv, pnetwork->network.MacAddress);
8806 if(psta==NULL) {
8807 @@ -1490,16 +1641,16 @@ static struct sta_info *rtw_joinbss_update_stainfo(_adapter *padapter, struct wl
8808
8809 psta->aid = pnetwork->join_res;
8810 #ifdef CONFIG_CONCURRENT_MODE
8811 - if((check_fwstate(pbuddy_mlmepriv, WIFI_STATION_STATE) == _TRUE)
8812 - && (check_fwstate(pbuddy_mlmepriv, _FW_LINKED) == _TRUE))
8813 - {
8814 - psta->mac_id=2;
8815 - }
8816 - else
8817 -#endif
8818 - {
8819 +
8820 + if(PRIMARY_ADAPTER == padapter->adapter_type)
8821 psta->mac_id=0;
8822 - }
8823 + else
8824 + psta->mac_id=2;
8825 +#else
8826 + psta->mac_id=0;
8827 +#endif
8828 +
8829 + psta->raid = networktype_to_raid(pmlmeext->cur_wireless_mode);
8830
8831 //security related
8832 if(padapter->securitypriv.dot11AuthAlgrthm== dot11AuthAlgrthm_8021X)
8833 @@ -1516,10 +1667,22 @@ static struct sta_info *rtw_joinbss_update_stainfo(_adapter *padapter, struct wl
8834 _rtw_memset((u8 *)&psta->dot11tkiprxmickey, 0, sizeof (union Keytype));
8835 _rtw_memset((u8 *)&psta->dot11tkiptxmickey, 0, sizeof (union Keytype));
8836
8837 - _rtw_memset((u8 *)&psta->dot11txpn, 0, sizeof (union pn48));
8838 + _rtw_memset((u8 *)&psta->dot11txpn, 0, sizeof (union pn48));
8839 +#ifdef CONFIG_IEEE80211W
8840 + _rtw_memset((u8 *)&psta->dot11wtxpn, 0, sizeof (union pn48));
8841 +#endif //CONFIG_IEEE80211W
8842 _rtw_memset((u8 *)&psta->dot11rxpn, 0, sizeof (union pn48));
8843 }
8844
8845 + // Commented by Albert 2012/07/21
8846 + // When doing the WPS, the wps_ie_len won't equal to 0
8847 + // And the Wi-Fi driver shouldn't allow the data packet to be tramsmitted.
8848 + if ( padapter->securitypriv.wps_ie_len != 0 )
8849 + {
8850 + psta->ieee8021x_blocked=_TRUE;
8851 + padapter->securitypriv.wps_ie_len = 0;
8852 + }
8853 +
8854
8855 //for A-MPDU Rx reordering buffer control for bmc_sta & sta_info
8856 //if A-MPDU Rx is enabled, reseting rx_ordering_ctrl wstart_b(indicate_seq) to default value=0xffff
8857 @@ -1582,7 +1745,6 @@ static void rtw_joinbss_update_network(_adapter *padapter, struct wlan_network *
8858
8859 // why not use ptarget_wlan??
8860 _rtw_memcpy(&cur_network->network, &pnetwork->network, pnetwork->network.Length);
8861 - //_rtw_memcpy(&cur_network->network, &ptarget_wlan->network, ptarget_wlan->network.Length);
8862
8863 cur_network->aid = pnetwork->join_res;
8864
8865 @@ -1594,15 +1756,29 @@ static void rtw_joinbss_update_network(_adapter *padapter, struct wlan_network *
8866 padapter->recvpriv.signal_qual = ptarget_wlan->network.PhyInfo.SignalQuality;
8867 //the ptarget_wlan->network.Rssi is raw data, we use ptarget_wlan->network.PhyInfo.SignalStrength instead (has scaled)
8868 padapter->recvpriv.rssi = translate_percentage_to_dbm(ptarget_wlan->network.PhyInfo.SignalStrength);
8869 + #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
8870 + DBG_871X(FUNC_ADPT_FMT" signal_strength:%3u, rssi:%3d, signal_qual:%3u"
8871 + "\n"
8872 + , FUNC_ADPT_ARG(padapter)
8873 + , padapter->recvpriv.signal_strength
8874 + , padapter->recvpriv.rssi
8875 + , padapter->recvpriv.signal_qual
8876 + );
8877 + #endif
8878 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
8879 rtw_set_signal_stat_timer(&padapter->recvpriv);
8880 #endif
8881
8882 //update fw_state //will clr _FW_UNDER_LINKING here indirectly
8883 switch(pnetwork->network.InfrastructureMode)
8884 - {
8885 + {
8886 case Ndis802_11Infrastructure:
8887 - pmlmepriv->fw_state = WIFI_STATION_STATE;
8888 +
8889 + if(pmlmepriv->fw_state&WIFI_UNDER_WPS)
8890 + pmlmepriv->fw_state = WIFI_STATION_STATE|WIFI_UNDER_WPS;
8891 + else
8892 + pmlmepriv->fw_state = WIFI_STATION_STATE;
8893 +
8894 break;
8895 case Ndis802_11IBSS:
8896 pmlmepriv->fw_state = WIFI_ADHOC_STATE;
8897 @@ -1617,7 +1793,7 @@ static void rtw_joinbss_update_network(_adapter *padapter, struct wlan_network *
8898 (cur_network->network.IELength));
8899
8900 #ifdef CONFIG_80211N_HT
8901 - rtw_update_ht_cap(padapter, cur_network->network.IEs, cur_network->network.IELength);
8902 + rtw_update_ht_cap(padapter, cur_network->network.IEs, cur_network->network.IELength, (u8) cur_network->network.Configuration.DSConfig);
8903 #endif
8904
8905
8906 @@ -1634,7 +1810,6 @@ static void rtw_joinbss_update_network(_adapter *padapter, struct wlan_network *
8907 void rtw_joinbss_event_prehandle(_adapter *adapter, u8 *pbuf)
8908 {
8909 _irqL irqL,irqL2;
8910 - int res;
8911 static u8 retry=0;
8912 u8 timer_cancelled;
8913 struct sta_info *ptarget_sta= NULL, *pcur_sta = NULL;
8914 @@ -1690,7 +1865,7 @@ _func_enter_;
8915 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("\n\n ***joinbss_evt_callback return a wrong bss ***\n\n"));
8916 goto ignore_joinbss_callback;
8917 }
8918 -
8919 +
8920 _enter_critical_bh(&pmlmepriv->lock, &irqL);
8921
8922 RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("\n rtw_joinbss_event_callback !! _enter_critical \n"));
8923 @@ -1746,9 +1921,9 @@ _func_enter_;
8924 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
8925 goto ignore_joinbss_callback;
8926 }
8927 -
8928
8929 - //s3. find ptarget_sta & update ptarget_sta after update cur_network only for station mode
8930 +
8931 + //s3. find ptarget_sta & update ptarget_sta after update cur_network only for station mode
8932 if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
8933 {
8934 ptarget_sta = rtw_joinbss_update_stainfo(adapter, pnetwork);
8935 @@ -1758,9 +1933,9 @@ _func_enter_;
8936 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
8937 goto ignore_joinbss_callback;
8938 }
8939 - }
8940 -
8941 - //s4. indicate connect
8942 + }
8943 +
8944 + //s4. indicate connect
8945 if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
8946 {
8947 rtw_indicate_connect(adapter);
8948 @@ -1770,13 +1945,13 @@ _func_enter_;
8949 //adhoc mode will rtw_indicate_connect when rtw_stassoc_event_callback
8950 RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("adhoc mode, fw_state:%x", get_fwstate(pmlmepriv)));
8951 }
8952 -
8953 +
8954
8955 //s5. Cancle assoc_timer
8956 _cancel_timer(&pmlmepriv->assoc_timer, &timer_cancelled);
8957 -
8958 +
8959 RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("Cancle assoc_timer\n"));
8960 -
8961 +
8962 }
8963 else
8964 {
8965 @@ -1847,16 +2022,21 @@ ignore_joinbss_callback:
8966 void rtw_joinbss_event_callback(_adapter *adapter, u8 *pbuf)
8967 {
8968 struct wlan_network *pnetwork = (struct wlan_network *)pbuf;
8969 - struct xmit_priv *pxmitpriv = &adapter->xmitpriv;
8970
8971 _func_enter_;
8972
8973 mlmeext_joinbss_event_callback(adapter, pnetwork->join_res);
8974
8975 - //Set Value to 1 to xmit data frame.
8976 - ATOMIC_SET(&pxmitpriv->HwRdyXmitData, 1);
8977 rtw_os_xmit_schedule(adapter);
8978
8979 +#ifdef CONFIG_CONCURRENT_MODE
8980 + rtw_os_xmit_schedule(adapter->pbuddy_adapter);
8981 +#endif
8982 +
8983 +#ifdef CONFIG_DUALMAC_CONCURRENT
8984 + dc_resume_xmit(adapter);
8985 +#endif
8986 +
8987 _func_exit_;
8988 }
8989
8990 @@ -1871,8 +2051,7 @@ void rtw_stassoc_event_callback(_adapter *adapter, u8 *pbuf)
8991
8992 _func_enter_;
8993
8994 - // to do:
8995 - if(rtw_access_ctrl(&adapter->acl_list, pstassoc->macaddr) == _FALSE)
8996 + if(rtw_access_ctrl(adapter, pstassoc->macaddr) == _FALSE)
8997 return;
8998
8999 #if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
9000 @@ -1882,7 +2061,9 @@ _func_enter_;
9001 if(psta)
9002 {
9003 #ifdef CONFIG_IOCTL_CFG80211
9004 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
9005 +#ifdef COMPAT_KERNEL_RELEASE
9006 +
9007 +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
9008 u8 *passoc_req = NULL;
9009 u32 assoc_req_len;
9010
9011 @@ -1895,7 +2076,7 @@ _func_enter_;
9012 assoc_req_len = psta->assoc_req_len;
9013 _rtw_memcpy(passoc_req, psta->passoc_req, assoc_req_len);
9014
9015 - _rtw_mfree(psta->passoc_req , psta->assoc_req_len);
9016 + rtw_mfree(psta->passoc_req , psta->assoc_req_len);
9017 psta->passoc_req = NULL;
9018 psta->assoc_req_len = 0;
9019 }
9020 @@ -1906,14 +2087,14 @@ _func_enter_;
9021 {
9022 rtw_cfg80211_indicate_sta_assoc(adapter, passoc_req, assoc_req_len);
9023
9024 - _rtw_mfree(passoc_req, assoc_req_len);
9025 + rtw_mfree(passoc_req, assoc_req_len);
9026 }
9027 -#endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
9028 -#endif //CONFIG_IOCTL_CFG80211
9029 +#endif //(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
9030 +#endif //CONFIG_IOCTL_CFG80211
9031
9032 - //bss_cap_update(adapter, psta);
9033 + //bss_cap_update_on_sta_join(adapter, psta);
9034 //sta_info_update(adapter, psta);
9035 - ap_sta_info_defer_update(adapter, psta);
9036 + ap_sta_info_defer_update(adapter, psta);
9037 }
9038
9039 goto exit;
9040 @@ -1992,15 +2173,19 @@ void rtw_stadel_event_callback(_adapter *adapter, u8 *pbuf)
9041
9042 _func_enter_;
9043
9044 - if(check_fwstate(pmlmepriv, WIFI_AP_STATE))
9045 - {
9046 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE))
9047 + {
9048 #ifdef CONFIG_IOCTL_CFG80211
9049 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
9050 +#ifdef COMPAT_KERNEL_RELEASE
9051 +
9052 +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
9053 rtw_cfg80211_indicate_sta_disassoc(adapter, pstadel->macaddr, *(u16*)pstadel->rsvd);
9054 #endif //(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
9055 #endif //CONFIG_IOCTL_CFG80211
9056 +
9057 return;
9058 - }
9059 + }
9060 +
9061
9062 mlmeext_sta_del_event_callback(adapter);
9063
9064 @@ -2008,17 +2193,19 @@ _func_enter_;
9065
9066 if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) )
9067 {
9068 -
9069 #ifdef CONFIG_LAYER2_ROAMING
9070 - if(pmlmepriv->to_roaming > 0)
9071 - pmlmepriv->to_roaming--; // this stadel_event is caused by roaming, decrease to_roaming
9072 - else if(pmlmepriv->to_roaming ==0)
9073 - pmlmepriv->to_roaming= adapter->registrypriv.max_roaming_times;
9074 -
9075 - if(*((unsigned short *)(pstadel->rsvd)) !=65535 ) //if stadel_event isn't caused by no rx
9076 - pmlmepriv->to_roaming=0; // don't roam
9077 - #endif //CONFIG_LAYER2_ROAMING
9078 + if (rtw_to_roaming(adapter) > 0)
9079 + pmlmepriv->to_roaming--; /* this stadel_event is caused by roaming, decrease to_roaming */
9080 + else if (rtw_to_roaming(adapter) == 0)
9081 + rtw_set_roaming(adapter, adapter->registrypriv.max_roaming_times);
9082 +#ifdef CONFIG_INTEL_WIDI
9083 + if(adapter->mlmepriv.widi_state != INTEL_WIDI_STATE_CONNECTED)
9084 +#endif // CONFIG_INTEL_WIDI
9085 + if(*((unsigned short *)(pstadel->rsvd)) != WLAN_REASON_EXPIRATION_CHK)
9086 + rtw_set_roaming(adapter, 0); /* don't roam */
9087 + #endif
9088
9089 + rtw_free_uc_swdec_pending_queue(adapter);
9090
9091 rtw_free_assoc_resources(adapter, 1);
9092 rtw_indicate_disconnect(adapter);
9093 @@ -2030,10 +2217,13 @@ _func_enter_;
9094 rtw_free_network_nolock(pmlmepriv, pwlan);
9095 }
9096 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
9097 - #ifdef CONFIG_LAYER2_ROAMING
9098 +
9099 _rtw_roaming(adapter, tgt_network);
9100 - #endif //CONFIG_LAYER2_ROAMING
9101
9102 +#ifdef CONFIG_INTEL_WIDI
9103 + if (!rtw_to_roaming(adapter))
9104 + process_intel_widi_disconnect(adapter, 1);
9105 +#endif // CONFIG_INTEL_WIDI
9106 }
9107
9108 if ( check_fwstate(pmlmepriv,WIFI_ADHOC_MASTER_STATE) ||
9109 @@ -2096,16 +2286,19 @@ _func_exit_;
9110 }
9111
9112
9113 -void rtw_cpwm_event_callback(_adapter *adapter, u8 *pbuf)
9114 +void rtw_cpwm_event_callback(PADAPTER padapter, u8 *pbuf)
9115 {
9116 - struct reportpwrstate_parm *preportpwrstate = (struct reportpwrstate_parm *)pbuf;
9117 +#ifdef CONFIG_LPS_LCLK
9118 + struct reportpwrstate_parm *preportpwrstate;
9119 +#endif
9120
9121 _func_enter_;
9122
9123 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("rtw_cpwm_event_callback !!!\n"));
9124 -#ifdef CONFIG_PWRCTRL
9125 - preportpwrstate->state |= (u8)(adapter->pwrctrlpriv.cpwm_tog + 0x80);
9126 - cpwm_int_hdl(adapter, preportpwrstate);
9127 +#ifdef CONFIG_LPS_LCLK
9128 + preportpwrstate = (struct reportpwrstate_parm*)pbuf;
9129 + preportpwrstate->state |= (u8)(padapter->pwrctrlpriv.cpwm_tog + 0x80);
9130 + cpwm_int_hdl(padapter, preportpwrstate);
9131 #endif
9132
9133 _func_exit_;
9134 @@ -2120,7 +2313,9 @@ void _rtw_join_timeout_handler (_adapter *adapter)
9135 {
9136 _irqL irqL;
9137 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
9138 +#ifdef CONFIG_LAYER2_ROAMING
9139 int do_join_r;
9140 +#endif //CONFIG_LAYER2_ROAMING
9141
9142 #if 0
9143 if (adapter->bDriverStopped == _TRUE){
9144 @@ -2130,6 +2325,24 @@ void _rtw_join_timeout_handler (_adapter *adapter)
9145 #endif
9146
9147 _func_enter_;
9148 +#ifdef PLATFORM_FREEBSD
9149 + rtw_mtx_lock(NULL);
9150 + if (callout_pending(&adapter->mlmepriv.assoc_timer.callout)) {
9151 + /* callout was reset */
9152 + //mtx_unlock(&sc->sc_mtx);
9153 + rtw_mtx_unlock(NULL);
9154 + return;
9155 + }
9156 + if (!callout_active(&adapter->mlmepriv.assoc_timer.callout)) {
9157 + /* callout was stopped */
9158 + //mtx_unlock(&sc->sc_mtx);
9159 + rtw_mtx_unlock(NULL);
9160 + return;
9161 + }
9162 + callout_deactivate(&adapter->mlmepriv.assoc_timer.callout);
9163 +
9164 +
9165 +#endif
9166
9167 DBG_871X("%s, fw_state=%x\n", __FUNCTION__, get_fwstate(pmlmepriv));
9168
9169 @@ -2140,10 +2353,10 @@ _func_enter_;
9170 _enter_critical_bh(&pmlmepriv->lock, &irqL);
9171
9172 #ifdef CONFIG_LAYER2_ROAMING
9173 - if(pmlmepriv->to_roaming>0) { // join timeout caused by roaming
9174 + if (rtw_to_roaming(adapter) > 0) { /* join timeout caused by roaming */
9175 while(1) {
9176 pmlmepriv->to_roaming--;
9177 - if(pmlmepriv->to_roaming!=0) { //try another ,
9178 + if (rtw_to_roaming(adapter) != 0) { /* try another */
9179 DBG_871X("%s try another roaming\n", __FUNCTION__);
9180 if( _SUCCESS!=(do_join_r=rtw_do_join(adapter)) ) {
9181 DBG_871X("%s roaming do_join return %d\n", __FUNCTION__ ,do_join_r);
9182 @@ -2151,6 +2364,14 @@ _func_enter_;
9183 }
9184 break;
9185 } else {
9186 +#ifdef CONFIG_INTEL_WIDI
9187 + if(adapter->mlmepriv.widi_state == INTEL_WIDI_STATE_ROAMING)
9188 + {
9189 + _rtw_memset(pmlmepriv->sa_ext, 0x00, L2SDTA_SERVICE_VE_LEN);
9190 + intel_widi_wk_cmd(adapter, INTEL_WIDI_LISTEN_WK, NULL);
9191 + DBG_871X("change to widi listen\n");
9192 + }
9193 +#endif // CONFIG_INTEL_WIDI
9194 DBG_871X("%s We've try roaming but fail\n", __FUNCTION__);
9195 rtw_indicate_disconnect(adapter);
9196 break;
9197 @@ -2162,6 +2383,12 @@ _func_enter_;
9198 {
9199 rtw_indicate_disconnect(adapter);
9200 free_scanqueue(pmlmepriv);//???
9201 +
9202 +#ifdef CONFIG_IOCTL_CFG80211
9203 + //indicate disconnect for the case that join_timeout and check_fwstate != FW_LINKED
9204 + rtw_cfg80211_indicate_disconnect(adapter);
9205 +#endif //CONFIG_IOCTL_CFG80211
9206 +
9207 }
9208
9209 _exit_critical_bh(&pmlmepriv->lock, &irqL);
9210 @@ -2170,12 +2397,14 @@ _func_enter_;
9211 #ifdef CONFIG_DRVEXT_MODULE_WSC
9212 drvext_assoc_fail_indicate(&adapter->drvextpriv);
9213 #endif
9214 +#ifdef PLATFORM_FREEBSD
9215 + rtw_mtx_unlock(NULL);
9216 +#endif
9217
9218 _func_exit_;
9219
9220 }
9221
9222 -
9223 /*
9224 * rtw_scan_timeout_handler - Timeout/Faliure handler for CMD SiteSurvey
9225 * @adapter: pointer to _adapter structure
9226 @@ -2185,18 +2414,16 @@ void rtw_scan_timeout_handler (_adapter *adapter)
9227 _irqL irqL;
9228 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
9229
9230 - DBG_871X("%s, fw_state=%x\n", __FUNCTION__, get_fwstate(pmlmepriv));
9231 + DBG_871X(FUNC_ADPT_FMT" fw_state=%x\n", FUNC_ADPT_ARG(adapter), get_fwstate(pmlmepriv));
9232
9233 - if(adapter->bDriverStopped ||adapter->bSurpriseRemoved)
9234 - return;
9235 -
9236 _enter_critical_bh(&pmlmepriv->lock, &irqL);
9237
9238 _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
9239 -
9240 +
9241 _exit_critical_bh(&pmlmepriv->lock, &irqL);
9242
9243 rtw_indicate_scan_done(adapter, _TRUE);
9244 +
9245 }
9246
9247 static void rtw_auto_scan_handler(_adapter *padapter)
9248 @@ -2210,26 +2437,35 @@ static void rtw_auto_scan_handler(_adapter *padapter)
9249 pmlmepriv->scan_interval--;
9250 if(pmlmepriv->scan_interval==0)
9251 {
9252 - if( pwrctrlpriv->power_mgnt != PS_MODE_ACTIVE )
9253 - return;
9254 -
9255 /*
9256 if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
9257 {
9258 - DBG_8192C("exit %s when _FW_UNDER_SURVEY|_FW_UNDER_LINKING -> \n", __FUNCTION__);
9259 + DBG_871X("exit %s when _FW_UNDER_SURVEY|_FW_UNDER_LINKING -> \n", __FUNCTION__);
9260 return;
9261 }
9262
9263 if(pmlmepriv->sitesurveyctrl.traffic_busy == _TRUE)
9264 {
9265 - DBG_8192C("%s exit cause traffic_busy(%x)\n",__FUNCTION__, pmlmepriv->sitesurveyctrl.traffic_busy);
9266 + DBG_871X("%s exit cause traffic_busy(%x)\n",__FUNCTION__, pmlmepriv->sitesurveyctrl.traffic_busy);
9267 return;
9268 }
9269 */
9270
9271 +#ifdef CONFIG_CONCURRENT_MODE
9272 + if (rtw_buddy_adapter_up(padapter))
9273 + {
9274 + if ((check_buddy_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE) ||
9275 + (padapter->pbuddy_adapter->mlmepriv.LinkDetectInfo.bBusyTraffic == _TRUE))
9276 + {
9277 + DBG_871X("%s, but buddy_intf is under scanning or linking or BusyTraffic\n", __FUNCTION__);
9278 + return;
9279 + }
9280 + }
9281 +#endif
9282 +
9283 DBG_871X("%s\n", __FUNCTION__);
9284
9285 - rtw_set_802_11_bssid_list_scan(padapter);
9286 + rtw_set_802_11_bssid_list_scan(padapter, NULL, 0);
9287
9288 pmlmepriv->scan_interval = SCAN_INTERVAL;// 30*2 sec = 60sec
9289
9290 @@ -2245,6 +2481,12 @@ void rtw_dynamic_check_timer_handlder(_adapter *adapter)
9291 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
9292 #endif //CONFIG_AP_MODE
9293 struct registry_priv *pregistrypriv = &adapter->registrypriv;
9294 +#ifdef CONFIG_CONCURRENT_MODE
9295 + PADAPTER pbuddy_adapter = adapter->pbuddy_adapter;
9296 +#endif
9297 +
9298 + if(!adapter)
9299 + return;
9300
9301 if(adapter->hw_init_completed == _FALSE)
9302 return;
9303 @@ -2252,8 +2494,21 @@ void rtw_dynamic_check_timer_handlder(_adapter *adapter)
9304 if ((adapter->bDriverStopped == _TRUE)||(adapter->bSurpriseRemoved== _TRUE))
9305 return;
9306
9307 +
9308 +#ifdef CONFIG_CONCURRENT_MODE
9309 + if(pbuddy_adapter)
9310 + {
9311 + if(adapter->net_closed == _TRUE && pbuddy_adapter->net_closed == _TRUE)
9312 + {
9313 + return;
9314 + }
9315 + }
9316 + else
9317 +#endif //CONFIG_CONCURRENT_MODE
9318 if(adapter->net_closed == _TRUE)
9319 + {
9320 return;
9321 + }
9322
9323 rtw_dynamic_chk_wk_cmd(adapter);
9324
9325 @@ -2269,12 +2524,14 @@ void rtw_dynamic_check_timer_handlder(_adapter *adapter)
9326 }
9327 }
9328
9329 +#ifndef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
9330 #ifdef CONFIG_AP_MODE
9331 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
9332 {
9333 expire_timeout_chk(adapter);
9334 }
9335 #endif
9336 +#endif //!CONFIG_ACTIVE_KEEP_ALIVE_CHECK
9337
9338 #ifdef CONFIG_BR_EXT
9339
9340 @@ -2313,27 +2570,58 @@ void rtw_dynamic_check_timer_handlder(_adapter *adapter)
9341
9342
9343 #ifdef CONFIG_SET_SCAN_DENY_TIMER
9344 -void rtw_set_scan_deny_timer_hdl(_adapter *adapter)
9345 +inline bool rtw_is_scan_deny(_adapter *adapter)
9346 {
9347 struct mlme_priv *mlmepriv = &adapter->mlmepriv;
9348 + return (ATOMIC_READ(&mlmepriv->set_scan_deny) != 0) ? _TRUE : _FALSE;
9349 +}
9350
9351 - //allowed set scan
9352 +inline void rtw_clear_scan_deny(_adapter *adapter)
9353 +{
9354 + struct mlme_priv *mlmepriv = &adapter->mlmepriv;
9355 ATOMIC_SET(&mlmepriv->set_scan_deny, 0);
9356 + if (0)
9357 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter));
9358 }
9359
9360 -void rtw_set_scan_deny(struct mlme_priv *mlmepriv, u32 ms)
9361 +void rtw_set_scan_deny_timer_hdl(_adapter *adapter)
9362 {
9363 + rtw_clear_scan_deny(adapter);
9364 +}
9365 +
9366 +void rtw_set_scan_deny(_adapter *adapter, u32 ms)
9367 +{
9368 + struct mlme_priv *mlmepriv = &adapter->mlmepriv;
9369 +#ifdef CONFIG_CONCURRENT_MODE
9370 + struct mlme_priv *b_mlmepriv;
9371 +#endif
9372 +
9373 + if (0)
9374 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter));
9375 ATOMIC_SET(&mlmepriv->set_scan_deny, 1);
9376 _set_timer(&mlmepriv->set_scan_deny_timer, ms);
9377 +
9378 +#ifdef CONFIG_CONCURRENT_MODE
9379 + if (!adapter->pbuddy_adapter)
9380 + return;
9381 +
9382 + if (0)
9383 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(adapter->pbuddy_adapter));
9384 + b_mlmepriv = &adapter->pbuddy_adapter->mlmepriv;
9385 + ATOMIC_SET(&b_mlmepriv->set_scan_deny, 1);
9386 + _set_timer(&b_mlmepriv->set_scan_deny_timer, ms);
9387 +#endif
9388 +
9389 }
9390 #endif
9391
9392 -
9393 #if defined(IEEE80211_SCAN_RESULT_EXPIRE)
9394 #define RTW_SCAN_RESULT_EXPIRE IEEE80211_SCAN_RESULT_EXPIRE/HZ*1000 -1000 //3000 -1000
9395 #else
9396 #define RTW_SCAN_RESULT_EXPIRE 2000
9397 #endif
9398 +
9399 +#ifndef PLATFORM_FREEBSD
9400 /*
9401 * Select a new join candidate from the original @param candidate and @param competitor
9402 * @return _TRUE: candidate is updated
9403 @@ -2364,7 +2652,7 @@ static int rtw_check_join_candidate(struct mlme_priv *pmlmepriv
9404 goto exit;
9405
9406 #ifdef CONFIG_LAYER2_ROAMING
9407 - if(pmlmepriv->to_roaming) {
9408 + if(rtw_to_roaming(adapter) > 0) {
9409 if( rtw_get_passing_time_ms((u32)competitor->last_scanned) >= RTW_SCAN_RESULT_EXPIRE
9410 || is_same_ess(&competitor->network, &pmlmepriv->cur_network.network) == _FALSE
9411 )
9412 @@ -2393,7 +2681,7 @@ static int rtw_check_join_candidate(struct mlme_priv *pmlmepriv
9413 }
9414 } else
9415 #ifdef CONFIG_LAYER2_ROAMING
9416 - if(pmlmepriv->to_roaming) { // roaming
9417 + if(rtw_to_roaming(adapter)) { // roaming
9418 if( (*candidate == NULL ||(*candidate)->network.Rssi<competitor->network.Rssi )
9419 && is_same_ess(&competitor->network, &pmlmepriv->cur_network.network)
9420 //&&(!is_same_network(&competitor->network, &pmlmepriv->cur_network.network))
9421 @@ -2423,14 +2711,15 @@ static int rtw_check_join_candidate(struct mlme_priv *pmlmepriv
9422 #ifdef CONFIG_LAYER2_ROAMING
9423 "[to_roaming:%u] "
9424 #endif
9425 - "new candidate: %s("MAC_FMT") rssi:%d\n",
9426 + "new candidate: %s("MAC_FMT", ch%u) rssi:%d\n",
9427 pmlmepriv->assoc_by_bssid,
9428 pmlmepriv->assoc_ssid.Ssid,
9429 #ifdef CONFIG_LAYER2_ROAMING
9430 - pmlmepriv->to_roaming,
9431 + rtw_to_roaming(adapter),
9432 #endif
9433 (*candidate)->network.Ssid.Ssid,
9434 MAC_ARG((*candidate)->network.MacAddress),
9435 + (*candidate)->network.Configuration.DSConfig,
9436 (int)(*candidate)->network.Rssi
9437 );
9438 }
9439 @@ -2439,7 +2728,6 @@ exit:
9440 return updated;
9441 }
9442
9443 -
9444 /*
9445 Calling context:
9446 The caller of the sub-routine will be in critical section...
9447 @@ -2450,7 +2738,7 @@ pmlmepriv->lock
9448
9449
9450 */
9451 -#if 1
9452 +
9453 int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv )
9454 {
9455 _irqL irqL;
9456 @@ -2494,8 +2782,9 @@ _func_enter_;
9457 ret = _FAIL;
9458 goto exit;
9459 } else {
9460 - DBG_871X("%s: candidate: %s("MAC_FMT")\n", __FUNCTION__,
9461 - candidate->network.Ssid.Ssid, MAC_ARG(candidate->network.MacAddress));;
9462 + DBG_871X("%s: candidate: %s("MAC_FMT", ch:%u)\n", __FUNCTION__,
9463 + candidate->network.Ssid.Ssid, MAC_ARG(candidate->network.MacAddress),
9464 + candidate->network.Configuration.DSConfig);
9465 }
9466
9467
9468 @@ -2517,40 +2806,42 @@ _func_enter_;
9469 else
9470 #endif
9471 {
9472 - rtw_disassoc_cmd(adapter);
9473 + rtw_disassoc_cmd(adapter, 0, _TRUE);
9474 rtw_indicate_disconnect(adapter);
9475 rtw_free_assoc_resources(adapter, 0);
9476 }
9477 }
9478
9479 #ifdef CONFIG_ANTENNA_DIVERSITY
9480 - adapter->HalFunc.GetHalDefVarHandler(adapter, HAL_DEF_IS_SUPPORT_ANT_DIV, &(bSupportAntDiv));
9481 + rtw_hal_get_def_var(adapter, HAL_DEF_IS_SUPPORT_ANT_DIV, &(bSupportAntDiv));
9482 if(_TRUE == bSupportAntDiv)
9483 {
9484 u8 CurrentAntenna;
9485 - adapter->HalFunc.GetHalDefVarHandler(adapter, HAL_DEF_CURRENT_ANTENNA, &(CurrentAntenna));
9486 - DBG_8192C("#### Opt_Ant_(%s) , cur_Ant(%s)\n",
9487 + rtw_hal_get_def_var(adapter, HAL_DEF_CURRENT_ANTENNA, &(CurrentAntenna));
9488 + DBG_871X("#### Opt_Ant_(%s) , cur_Ant(%s)\n",
9489 (2==candidate->network.PhyInfo.Optimum_antenna)?"A":"B",
9490 (2==CurrentAntenna)?"A":"B"
9491 );
9492 }
9493 #endif
9494 -
9495 + set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
9496 ret = rtw_joinbss_cmd(adapter, candidate);
9497
9498 exit:
9499 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
9500 +
9501 _func_exit_;
9502
9503 return ret;
9504 -
9505 }
9506 #else
9507 int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv )
9508 {
9509 _irqL irqL;
9510 _list *phead;
9511 +#ifdef CONFIG_ANTENNA_DIVERSITY
9512 u8 CurrentAntenna;
9513 +#endif
9514 unsigned char *dst_ssid, *src_ssid;
9515 _adapter *adapter;
9516 _queue *queue = &(pmlmepriv->scanned_queue);
9517 @@ -2607,7 +2898,7 @@ _func_enter_;
9518 }
9519 else
9520 {
9521 - rtw_disassoc_cmd(adapter);
9522 + rtw_disassoc_cmd(adapter, 0, _TRUE);
9523 rtw_indicate_disconnect(adapter);
9524 rtw_free_assoc_resources(adapter, 0);
9525 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
9526 @@ -2623,11 +2914,12 @@ _func_enter_;
9527
9528 }
9529
9530 - } else if (pmlmepriv->assoc_ssid.SsidLength == 0) {
9531 + } else if (pmlmepriv->assoc_ssid.SsidLength == 0) {
9532 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
9533 goto ask_for_joinbss;//anyway, join first selected(dequeued) pnetwork if ssid_len=0
9534
9535 #ifdef CONFIG_LAYER2_ROAMING
9536 - } else if(pmlmepriv->to_roaming>0) {
9537 + } else if (rtw_to_roaming(adapter) > 0) {
9538
9539 if( (roaming_candidate == NULL ||roaming_candidate->network.Rssi<pnetwork->network.Rssi )
9540 && is_same_ess(&pnetwork->network, &pmlmepriv->cur_network.network)
9541 @@ -2651,8 +2943,8 @@ _func_enter_;
9542 {
9543 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("dst_ssid=%s, src_ssid=%s \n", dst_ssid, src_ssid));
9544 #ifdef CONFIG_ANTENNA_DIVERSITY
9545 - adapter->HalFunc.GetHalDefVarHandler(adapter, HAL_DEF_CURRENT_ANTENNA, &(CurrentAntenna));
9546 - DBG_8192C("#### dst_ssid=(%s) Opt_Ant_(%s) , cur_Ant(%s)\n", dst_ssid,
9547 + rtw_hal_get_def_var(adapter, HAL_DEF_CURRENT_ANTENNA, &(CurrentAntenna));
9548 + DBG_871X("#### dst_ssid=(%s) Opt_Ant_(%s) , cur_Ant(%s)\n", dst_ssid,
9549 (2==pnetwork->network.PhyInfo.Optimum_antenna)?"A":"B",
9550 (2==CurrentAntenna)?"A":"B");
9551 #endif
9552 @@ -2685,7 +2977,7 @@ _func_enter_;
9553 else
9554 #endif
9555 {
9556 - rtw_disassoc_cmd(adapter);
9557 + rtw_disassoc_cmd(adapter, 0, _TRUE);
9558 //rtw_indicate_disconnect(adapter);//
9559 rtw_free_assoc_resources(adapter, 0);
9560 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
9561 @@ -2706,7 +2998,7 @@ _func_enter_;
9562 }
9563 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
9564 #ifdef CONFIG_LAYER2_ROAMING
9565 - if(pmlmepriv->to_roaming>0 && roaming_candidate ){
9566 + if(rtw_to_roaming(adapter) > 0 && roaming_candidate ){
9567 pnetwork=roaming_candidate;
9568 DBG_871X("select_and_join_from_scanned_queue: roaming_candidate: %s("MAC_FMT")\n",
9569 pnetwork->network.Ssid.Ssid, MAC_ARG(pnetwork->network.MacAddress));
9570 @@ -2735,7 +3027,7 @@ _func_exit_;
9571 return rtw_joinbss_cmd(adapter, pnetwork);
9572
9573 }
9574 -#endif
9575 +#endif //PLATFORM_FREEBSD
9576
9577
9578 sint rtw_set_auth(_adapter * adapter,struct security_priv *psecuritypriv)
9579 @@ -2821,15 +3113,10 @@ _func_enter_;
9580 }
9581 psetkeyparm->keyid = (u8)keyid;//0~3
9582 psetkeyparm->set_tx = set_tx;
9583 - pmlmepriv->key_mask |= BIT(psetkeyparm->keyid);
9584 -#ifdef CONFIG_AUTOSUSPEND
9585 - if( _TRUE == adapter->pwrctrlpriv.bInternalAutoSuspend)
9586 - {
9587 - adapter->pwrctrlpriv.wepkeymask = pmlmepriv->key_mask;
9588 - DBG_8192C("....AutoSuspend pwrctrlpriv.wepkeymask(%x)\n",adapter->pwrctrlpriv.wepkeymask);
9589 - }
9590 -#endif
9591 - DBG_8192C("==> rtw_set_key algorithm(%x),keyid(%x),key_mask(%x)\n",psetkeyparm->algorithm,psetkeyparm->keyid,pmlmepriv->key_mask);
9592 + if (is_wep_enc(psetkeyparm->algorithm))
9593 + psecuritypriv->key_mask |= BIT(psetkeyparm->keyid);
9594 +
9595 + DBG_871X("==> rtw_set_key algorithm(%x),keyid(%x),key_mask(%x)\n",psetkeyparm->algorithm,psetkeyparm->keyid, psecuritypriv->key_mask);
9596 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("\n rtw_set_key: psetkeyparm->algorithm=%d psetkeyparm->keyid=(u8)keyid=%d \n",psetkeyparm->algorithm, keyid));
9597
9598 switch(psetkeyparm->algorithm){
9599 @@ -3016,37 +3303,37 @@ _func_enter_;
9600 //copy fixed ie only
9601 _rtw_memcpy(out_ie, in_ie,12);
9602 ielength=12;
9603 -
9604 if((ndisauthmode==Ndis802_11AuthModeWPA)||(ndisauthmode==Ndis802_11AuthModeWPAPSK))
9605 authmode=_WPA_IE_ID_;
9606 if((ndisauthmode==Ndis802_11AuthModeWPA2)||(ndisauthmode==Ndis802_11AuthModeWPA2PSK))
9607 authmode=_WPA2_IE_ID_;
9608
9609 - if(psecuritypriv->wps_phase == _TRUE)
9610 + if(check_fwstate(pmlmepriv, WIFI_UNDER_WPS))
9611 {
9612 - //DBG_871X("wps_phase == _TRUE\n");
9613 -
9614 _rtw_memcpy(out_ie+ielength, psecuritypriv->wps_ie, psecuritypriv->wps_ie_len);
9615
9616 ielength += psecuritypriv->wps_ie_len;
9617 - psecuritypriv->wps_phase = _FALSE;
9618 -
9619 }
9620 - else if((ndisauthmode==Ndis802_11AuthModeWPA)||(ndisauthmode==Ndis802_11AuthModeWPAPSK)||(ndisauthmode==Ndis802_11AuthModeWPA2)||(ndisauthmode==Ndis802_11AuthModeWPA2PSK))
9621 + else if((authmode==_WPA_IE_ID_)||(authmode==_WPA2_IE_ID_))
9622 {
9623 //copy RSN or SSN
9624 _rtw_memcpy(&out_ie[ielength], &psecuritypriv->supplicant_ie[0], psecuritypriv->supplicant_ie[1]+2);
9625 + /* debug for CONFIG_IEEE80211W
9626 + {
9627 + int jj;
9628 + printk("supplicant_ie_length=%d &&&&&&&&&&&&&&&&&&&\n", psecuritypriv->supplicant_ie[1]+2);
9629 + for(jj=0; jj < psecuritypriv->supplicant_ie[1]+2; jj++)
9630 + printk(" %02x ", psecuritypriv->supplicant_ie[jj]);
9631 + printk("\n");
9632 + }*/
9633 ielength+=psecuritypriv->supplicant_ie[1]+2;
9634 -
9635 rtw_report_sec_ie(adapter, authmode, psecuritypriv->supplicant_ie);
9636
9637 #ifdef CONFIG_DRVEXT_MODULE
9638 drvext_report_sec_ie(&adapter->drvextpriv, authmode, sec_ie);
9639 #endif
9640 -
9641 -
9642 -
9643 }
9644 +
9645 iEntry = SecIsInPMKIDList(adapter, pmlmepriv->assoc_bssid);
9646 if(iEntry<0)
9647 {
9648 @@ -3097,7 +3384,7 @@ void rtw_update_registrypriv_dev_network(_adapter* adapter)
9649 WLAN_BSSID_EX *pdev_network = &pregistrypriv->dev_network;
9650 struct security_priv* psecuritypriv = &adapter->securitypriv;
9651 struct wlan_network *cur_network = &adapter->mlmepriv.cur_network;
9652 - struct xmit_priv *pxmitpriv = &adapter->xmitpriv;
9653 + //struct xmit_priv *pxmitpriv = &adapter->xmitpriv;
9654
9655 _func_enter_;
9656
9657 @@ -3169,9 +3456,6 @@ _func_exit_;
9658
9659 void rtw_get_encrypt_decrypt_from_registrypriv(_adapter* adapter)
9660 {
9661 - u16 wpaconfig=0;
9662 - struct registry_priv* pregistrypriv = &adapter->registrypriv;
9663 - struct security_priv* psecuritypriv= &adapter->securitypriv;
9664 _func_enter_;
9665
9666
9667 @@ -3211,12 +3495,12 @@ void rtw_joinbss_reset(_adapter *padapter)
9668 threshold = 1;
9669 else
9670 threshold = 0;
9671 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
9672 + rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
9673 }
9674 else
9675 {
9676 threshold = 1;
9677 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
9678 + rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
9679 }
9680 #endif
9681
9682 @@ -3228,7 +3512,7 @@ void rtw_joinbss_reset(_adapter *padapter)
9683 #ifdef CONFIG_80211N_HT
9684
9685 //the fucntion is >= passive_level
9686 -unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len)
9687 +unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len, u8 channel)
9688 {
9689 u32 ielen, out_len;
9690 unsigned char *p, *pframe;
9691 @@ -3237,7 +3521,8 @@ unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, ui
9692 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
9693 struct qos_priv *pqospriv= &pmlmepriv->qospriv;
9694 struct ht_priv *phtpriv = &pmlmepriv->htpriv;
9695 -
9696 + struct registry_priv *pregpriv = &padapter->registrypriv;
9697 + u8 cbw40_enable = 0;
9698
9699 phtpriv->ht_option = _FALSE;
9700
9701 @@ -3258,19 +3543,31 @@ unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, ui
9702
9703 _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
9704
9705 - ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |IEEE80211_HT_CAP_SGI_20 |
9706 - IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_TX_STBC |
9707 + ht_capie.cap_info = IEEE80211_HT_CAP_SGI_20 | IEEE80211_HT_CAP_TX_STBC |
9708 IEEE80211_HT_CAP_DSSSCCK40;
9709 + //if insert module set only support 20MHZ, don't add the 40MHZ and SGI_40
9710 + if( channel > 14 )
9711 + {
9712 + if( pregpriv->cbw40_enable & BIT(1) )
9713 + cbw40_enable = 1;
9714 + }
9715 + else
9716 + if( pregpriv->cbw40_enable & BIT(0) )
9717 + cbw40_enable = 1;
9718 +
9719 + if ( cbw40_enable != 0 )
9720 + ht_capie.cap_info |= IEEE80211_HT_CAP_SUP_WIDTH | IEEE80211_HT_CAP_SGI_40;
9721 +
9722
9723
9724 {
9725 u32 rx_packet_offset, max_recvbuf_sz;
9726 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
9727 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
9728 - if(max_recvbuf_sz-rx_packet_offset>(8191-256)) {
9729 - DBG_871X("%s IEEE80211_HT_CAP_MAX_AMSDU is set\n", __FUNCTION__);
9730 - ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
9731 - }
9732 + rtw_hal_get_def_var(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
9733 + rtw_hal_get_def_var(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
9734 + //if(max_recvbuf_sz-rx_packet_offset>(8191-256)) {
9735 + // DBG_871X("%s IEEE80211_HT_CAP_MAX_AMSDU is set\n", __FUNCTION__);
9736 + // ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
9737 + //}
9738 }
9739
9740 ht_capie.ampdu_params_info = (IEEE80211_HT_CAP_AMPDU_FACTOR&0x03);
9741 @@ -3305,7 +3602,7 @@ unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, ui
9742 }
9743
9744 //the fucntion is > passive_level (in critical_section)
9745 -void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len)
9746 +void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len, u8 channel)
9747 {
9748 u8 *p, max_ampdu_sz;
9749 int len;
9750 @@ -3320,7 +3617,7 @@ void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len)
9751 //struct wlan_network *pcur_network = &(pmlmepriv->cur_network);;
9752 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
9753 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
9754 -
9755 + u8 cbw40_enable=0;
9756
9757 if(!phtpriv->ht_option)
9758 return;
9759 @@ -3333,11 +3630,12 @@ void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len)
9760 //maybe needs check if ap supports rx ampdu.
9761 if((phtpriv->ampdu_enable==_FALSE) &&(pregistrypriv->ampdu_enable==1))
9762 {
9763 - if(pregistrypriv->wifi_spec==1)
9764 + //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
9765 + /*if(pregistrypriv->wifi_spec==1)
9766 {
9767 phtpriv->ampdu_enable = _FALSE;
9768 }
9769 - else
9770 + else*/
9771 {
9772 phtpriv->ampdu_enable = _TRUE;
9773 }
9774 @@ -3357,13 +3655,13 @@ void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len)
9775 max_ampdu_sz = (pht_capie->ampdu_params_info & IEEE80211_HT_CAP_AMPDU_FACTOR);
9776 max_ampdu_sz = 1 << (max_ampdu_sz+3); // max_ampdu_sz (kbytes);
9777
9778 - //DBG_8192C("rtw_update_ht_cap(): max_ampdu_sz=%d\n", max_ampdu_sz);
9779 + //DBG_871X("rtw_update_ht_cap(): max_ampdu_sz=%d\n", max_ampdu_sz);
9780 phtpriv->rx_ampdu_maxlen = max_ampdu_sz;
9781
9782 }
9783 -
9784
9785 - len=0;
9786 +
9787 + len=0;
9788 p = rtw_get_ie(pie+sizeof (NDIS_802_11_FIXED_IEs), _HT_ADD_INFO_IE_, &len, ie_len-sizeof (NDIS_802_11_FIXED_IEs));
9789 if(p && len>0)
9790 {
9791 @@ -3371,12 +3669,56 @@ void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len)
9792 //todo:
9793 }
9794
9795 + if( channel > 14 )
9796 + {
9797 + if( pregistrypriv->cbw40_enable & BIT(1) )
9798 + cbw40_enable = 1;
9799 + }
9800 + else
9801 + if( pregistrypriv->cbw40_enable & BIT(0) )
9802 + cbw40_enable = 1;
9803 +
9804
9805 //update cur_bwmode & cur_ch_offset
9806 - if ((pregistrypriv->cbw40_enable) &&
9807 - (pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info & BIT(1)) &&
9808 + if ((cbw40_enable) &&
9809 + (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & BIT(1)) &&
9810 (pmlmeinfo->HT_info.infos[0] & BIT(2)))
9811 {
9812 + int i;
9813 + u8 rf_type;
9814 +
9815 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
9816 +
9817 + //update the MCS rates
9818 + for (i = 0; i < 16; i++)
9819 + {
9820 + if((rf_type == RF_1T1R) || (rf_type == RF_1T2R))
9821 + {
9822 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
9823 + }
9824 + else
9825 + {
9826 + #ifdef CONFIG_DISABLE_MCS13TO15
9827 + if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40 && pregistrypriv->wifi_spec != 1 )
9828 + {
9829 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R_MCS13TO15_OFF[i];
9830 + }
9831 + else
9832 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i];
9833 + #else
9834 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i];
9835 + #endif //CONFIG_DISABLE_MCS13TO15
9836 + }
9837 + #ifdef RTL8192C_RECONFIG_TO_1T1R
9838 + {
9839 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
9840 + }
9841 + #endif
9842 +
9843 + if(pregistrypriv->special_rf_path)
9844 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
9845 +
9846 + }
9847 //switch to the 40M Hz mode accoring to the AP
9848 pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
9849 switch ((pmlmeinfo->HT_info.infos[0] & 0x3))
9850 @@ -3392,13 +3734,13 @@ void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len)
9851 default:
9852 pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
9853 break;
9854 - }
9855 + }
9856 }
9857
9858 - //
9859 + //
9860 // Config SM Power Save setting
9861 //
9862 - pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info & 0x0C) >> 2;
9863 + pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & 0x0C) >> 2;
9864 if(pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
9865 {
9866 /*u8 i;
9867 @@ -3467,7 +3809,6 @@ void rtw_issue_addbareq_cmd(_adapter *padapter, struct xmit_frame *pxmitframe)
9868 struct sta_info *psta=NULL;
9869 struct ht_priv *phtpriv;
9870 struct pkt_attrib *pattrib =&pxmitframe->attrib;
9871 - struct sta_priv *pstapriv = &padapter->stapriv;
9872 s32 bmcst = IS_MCAST(pattrib->ra);
9873
9874 if(bmcst || (padapter->mlmepriv.LinkDetectInfo.bTxBusyTraffic == _FALSE))
9875 @@ -3478,10 +3819,23 @@ void rtw_issue_addbareq_cmd(_adapter *padapter, struct xmit_frame *pxmitframe)
9876 if (pattrib->psta)
9877 psta = pattrib->psta;
9878 else
9879 + {
9880 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
9881 psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
9882 + }
9883
9884 if(psta==NULL)
9885 + {
9886 + DBG_871X("%s, psta==NUL\n", __func__);
9887 return;
9888 + }
9889 +
9890 + if(!(psta->state &_FW_LINKED))
9891 + {
9892 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
9893 + return;
9894 + }
9895 +
9896
9897 phtpriv = &psta->htpriv;
9898
9899 @@ -3503,6 +3857,18 @@ void rtw_issue_addbareq_cmd(_adapter *padapter, struct xmit_frame *pxmitframe)
9900 #endif
9901
9902 #ifdef CONFIG_LAYER2_ROAMING
9903 +inline void rtw_set_roaming(_adapter *adapter, u8 to_roaming)
9904 +{
9905 + if (to_roaming == 0)
9906 + adapter->mlmepriv.to_join = _FALSE;
9907 + adapter->mlmepriv.to_roaming = to_roaming;
9908 +}
9909 +
9910 +inline u8 rtw_to_roaming(_adapter *adapter)
9911 +{
9912 + return adapter->mlmepriv.to_roaming;
9913 +}
9914 +
9915 void rtw_roaming(_adapter *padapter, struct wlan_network *tgt_network)
9916 {
9917 _irqL irqL;
9918 @@ -3524,7 +3890,7 @@ void _rtw_roaming(_adapter *padapter, struct wlan_network *tgt_network)
9919 else
9920 pnetwork = &pmlmepriv->cur_network;
9921
9922 - if(0 < pmlmepriv->to_roaming) {
9923 + if(0 < rtw_to_roaming(padapter)) {
9924 DBG_871X("roaming from %s("MAC_FMT"), length:%d\n",
9925 pnetwork->network.Ssid.Ssid, MAC_ARG(pnetwork->network.MacAddress),
9926 pnetwork->network.Ssid.SsidLength);
9927 @@ -3539,7 +3905,7 @@ void _rtw_roaming(_adapter *padapter, struct wlan_network *tgt_network)
9928 DBG_871X("roaming do_join return %d\n", do_join_r);
9929 pmlmepriv->to_roaming--;
9930
9931 - if(0< pmlmepriv->to_roaming) {
9932 + if(0< rtw_to_roaming(padapter)) {
9933 continue;
9934 } else {
9935 DBG_871X("%s(%d) -to roaming fail, indicate_disconnect\n", __FUNCTION__,__LINE__);
9936 @@ -3553,3 +3919,49 @@ void _rtw_roaming(_adapter *padapter, struct wlan_network *tgt_network)
9937 }
9938 #endif
9939
9940 +#ifdef CONFIG_CONCURRENT_MODE
9941 +sint rtw_buddy_adapter_up(_adapter *padapter)
9942 +{
9943 + sint res = _FALSE;
9944 +
9945 + if(padapter == NULL)
9946 + return res;
9947 +
9948 +
9949 + if(padapter->pbuddy_adapter == NULL)
9950 + {
9951 + res = _FALSE;
9952 + }
9953 + else if( (padapter->pbuddy_adapter->bDriverStopped) || (padapter->pbuddy_adapter->bSurpriseRemoved) ||
9954 + (padapter->pbuddy_adapter->bup == _FALSE) || (padapter->pbuddy_adapter->hw_init_completed == _FALSE))
9955 + {
9956 + res = _FALSE;
9957 + }
9958 + else
9959 + {
9960 + res = _TRUE;
9961 + }
9962 +
9963 + return res;
9964 +
9965 +}
9966 +
9967 +sint check_buddy_fwstate(_adapter *padapter, sint state)
9968 +{
9969 + if(padapter == NULL)
9970 + return _FALSE;
9971 +
9972 + if(padapter->pbuddy_adapter == NULL)
9973 + return _FALSE;
9974 +
9975 + if ((state == WIFI_FW_NULL_STATE) &&
9976 + (padapter->pbuddy_adapter->mlmepriv.fw_state == WIFI_FW_NULL_STATE))
9977 + return _TRUE;
9978 +
9979 + if (padapter->pbuddy_adapter->mlmepriv.fw_state & state)
9980 + return _TRUE;
9981 +
9982 + return _FALSE;
9983 +}
9984 +#endif //CONFIG_CONCURRENT_MODE
9985 +
9986 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c b/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c
9987 index e1e496d..d29a20c 100644
9988 --- a/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c
9989 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c
9990 @@ -1,6 +1,6 @@
9991 /******************************************************************************
9992 *
9993 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
9994 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
9995 *
9996 * This program is free software; you can redistribute it and/or modify it
9997 * under the terms of version 2 of the GNU General Public License as
9998 @@ -73,24 +73,33 @@ struct mlme_handler mlme_ap_tbl[]={
9999 #endif
10000
10001 struct action_handler OnAction_tbl[]={
10002 - {RTW_WLAN_CATEGORY_SPECTRUM_MGMT, "ACTION_SPECTRUM_MGMT", &DoReserved},
10003 + {RTW_WLAN_CATEGORY_SPECTRUM_MGMT, "ACTION_SPECTRUM_MGMT", on_action_spct},
10004 {RTW_WLAN_CATEGORY_QOS, "ACTION_QOS", &OnAction_qos},
10005 {RTW_WLAN_CATEGORY_DLS, "ACTION_DLS", &OnAction_dls},
10006 {RTW_WLAN_CATEGORY_BACK, "ACTION_BACK", &OnAction_back},
10007 - {RTW_WLAN_CATEGORY_PUBLIC, "ACTION_PUBLIC", &OnAction_public},
10008 + {RTW_WLAN_CATEGORY_PUBLIC, "ACTION_PUBLIC", on_action_public},
10009 {RTW_WLAN_CATEGORY_RADIO_MEASUREMENT, "ACTION_RADIO_MEASUREMENT", &DoReserved},
10010 {RTW_WLAN_CATEGORY_FT, "ACTION_FT", &DoReserved},
10011 {RTW_WLAN_CATEGORY_HT, "ACTION_HT", &OnAction_ht},
10012 +#ifdef CONFIG_IEEE80211W
10013 + {RTW_WLAN_CATEGORY_SA_QUERY, "ACTION_SA_QUERY", &OnAction_sa_query},
10014 +#else
10015 {RTW_WLAN_CATEGORY_SA_QUERY, "ACTION_SA_QUERY", &DoReserved},
10016 +#endif //CONFIG_IEEE80211W
10017 + //add for CONFIG_IEEE80211W
10018 + {RTW_WLAN_CATEGORY_UNPROTECTED_WNM, "ACTION_UNPROTECTED_WNM", &DoReserved},
10019 + {RTW_WLAN_CATEGORY_SELF_PROTECTED, "ACTION_SELF_PROTECTED", &DoReserved},
10020 {RTW_WLAN_CATEGORY_WMM, "ACTION_WMM", &OnAction_wmm},
10021 {RTW_WLAN_CATEGORY_P2P, "ACTION_P2P", &OnAction_p2p},
10022 };
10023
10024
10025 +u8 null_addr[ETH_ALEN]= {0,0,0,0,0,0};
10026 +
10027 /**************************************************
10028 OUI definitions for the vendor specific IE
10029 ***************************************************/
10030 -unsigned char WPA_OUI[] = {0x00, 0x50, 0xf2, 0x01};
10031 +unsigned char RTW_WPA_OUI[] = {0x00, 0x50, 0xf2, 0x01};
10032 unsigned char WMM_OUI[] = {0x00, 0x50, 0xf2, 0x02};
10033 unsigned char WPS_OUI[] = {0x00, 0x50, 0xf2, 0x04};
10034 unsigned char P2P_OUI[] = {0x50,0x6F,0x9A,0x09};
10035 @@ -108,7 +117,8 @@ extern unsigned char REALTEK_96B_IE[];
10036 MCS rate definitions
10037 *********************************************************/
10038 #ifdef CONFIG_DISABLE_MCS13TO15
10039 -unsigned char MCS_rate_2R[16] = {0xff, 0x1f, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
10040 +unsigned char MCS_rate_2R_MCS13TO15_OFF[16] = {0xff, 0x1f, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
10041 +unsigned char MCS_rate_2R[16] = {0xff, 0xff, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
10042 #else //CONFIG_DISABLE_MCS13TO15
10043 unsigned char MCS_rate_2R[16] = {0xff, 0xff, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
10044 #endif //CONFIG_DISABLE_MCS13TO15
10045 @@ -147,6 +157,7 @@ static RT_CHANNEL_PLAN_2G RTW_ChannelPlan2G[RT_CHANNEL_DOMAIN_2G_MAX] = {
10046 {{1,2,3,4,5,6,7,8,9,10,11},11}, // 0x02, RT_CHANNEL_DOMAIN_2G_FCC1
10047 {{1,2,3,4,5,6,7,8,9,10,11,12,13,14},14}, // 0x03, RT_CHANNEL_DOMAIN_2G_MIKK1
10048 {{10,11,12,13},4}, // 0x04, RT_CHANNEL_DOMAIN_2G_ETSI2
10049 + {{},0}, // 0x05, RT_CHANNEL_DOMAIN_2G_NULL
10050 };
10051
10052 static RT_CHANNEL_PLAN_5G RTW_ChannelPlan5G[RT_CHANNEL_DOMAIN_5G_MAX] = {
10053 @@ -171,6 +182,7 @@ static RT_CHANNEL_PLAN_5G RTW_ChannelPlan5G[RT_CHANNEL_DOMAIN_5G_MAX] = {
10054 //===== Driver self defined for old channel plan Compatible ,Remember to modify if have new channel plan definition =====
10055 {{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
10056 {{36,40,44,48},4}, // 0x12, RT_CHANNEL_DOMAIN_5G_JAPAN_NO_DFS
10057 + {{36,40,44,48,149,153,157,161},8}, // 0x13, RT_CHANNEL_DOMAIN_5G_FCC4_NO_DFS
10058 };
10059
10060 static RT_CHANNEL_PLAN_MAP RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = {
10061 @@ -180,8 +192,8 @@ static RT_CHANNEL_PLAN_MAP RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = {
10062 {0x01,0x01}, //0x02, RT_CHANNEL_DOMAIN_ETSI
10063 {0x01,0x00}, //0x03, RT_CHANNEL_DOMAIN_SPAIN
10064 {0x01,0x00}, //0x04, RT_CHANNEL_DOMAIN_FRANCE
10065 - {0x01,0x00}, //0x05, RT_CHANNEL_DOMAIN_MKK
10066 - {0x01,0x00}, //0x06, RT_CHANNEL_DOMAIN_MKK1
10067 + {0x03,0x00}, //0x05, RT_CHANNEL_DOMAIN_MKK
10068 + {0x03,0x00}, //0x06, RT_CHANNEL_DOMAIN_MKK1
10069 {0x01,0x09}, //0x07, RT_CHANNEL_DOMAIN_ISRAEL
10070 {0x03,0x09}, //0x08, RT_CHANNEL_DOMAIN_TELEC
10071 {0x03,0x00}, //0x09, RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN
10072 @@ -196,18 +208,17 @@ static RT_CHANNEL_PLAN_MAP RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = {
10073 {0x01,0x12}, //0x12, RT_CHANNEL_DOMAIN_JAPAN_NO_DFS
10074 {0x00,0x04}, //0x13, RT_CHANNEL_DOMAIN_WORLD_WIDE_5G
10075 {0x02,0x10}, //0x14, RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS
10076 - {0x00,0x00}, //0x15,
10077 - {0x00,0x00}, //0x16,
10078 - {0x00,0x00}, //0x17,
10079 - {0x00,0x00}, //0x18,
10080 - {0x00,0x00}, //0x19,
10081 + {0x00,0x12}, //0x15, RT_CHANNEL_DOMAIN_ETSI_NO_DFS
10082 + {0x00,0x13}, //0x16, RT_CHANNEL_DOMAIN_KOREA_NO_DFS
10083 + {0x03,0x12}, //0x17, RT_CHANNEL_DOMAIN_JAPAN_NO_DFS
10084 + {0x05,0x08}, //0x18, RT_CHANNEL_DOMAIN_PAKISTAN_NO_DFS
10085 + {0x02,0x08}, //0x19, RT_CHANNEL_DOMAIN_TAIWAN2_NO_DFS
10086 {0x00,0x00}, //0x1A,
10087 {0x00,0x00}, //0x1B,
10088 {0x00,0x00}, //0x1C,
10089 {0x00,0x00}, //0x1D,
10090 {0x00,0x00}, //0x1E,
10091 - {0x00,0x00}, //0x1F,
10092 -
10093 + {0x05,0x04}, //0x1F, RT_CHANNEL_DOMAIN_WORLD_WIDE_ONLY_5G
10094 //===== 0x20 ~ 0x7F ,New Define =====
10095 {0x00,0x00}, //0x20, RT_CHANNEL_DOMAIN_WORLD_NULL
10096 {0x01,0x00}, //0x21, RT_CHANNEL_DOMAIN_ETSI1_NULL
10097 @@ -244,24 +255,44 @@ static RT_CHANNEL_PLAN_MAP RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = {
10098 {0x02,0x10}, //0x40, RT_CHANNEL_DOMAIN_FCC1_NCC2
10099 };
10100
10101 -static RT_CHANNEL_PLAN_MAP RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE = {0x02,0x05};
10102 +static RT_CHANNEL_PLAN_MAP RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE = {0x03,0x02}; //use the conbination for max channel numbers
10103
10104 /*
10105 -* Test if the given @param channel_set contains the channel specified by @param channel_num
10106 -* @param channel_set the given channel set
10107 -* @param channel_num the given channel number
10108 -* @return _TRUE or _FALSE
10109 -*/
10110 -int rtw_is_channel_set_contains_channel(RT_CHANNEL_INFO *channel_set, const u32 channel_num)
10111 + * Search the @param ch in given @param ch_set
10112 + * @ch_set: the given channel set
10113 + * @ch: the given channel number
10114 + *
10115 + * return the index of channel_num in channel_set, -1 if not found
10116 + */
10117 +int rtw_ch_set_search_ch(RT_CHANNEL_INFO *ch_set, const u32 ch)
10118 {
10119 int i;
10120 - for(i=0;channel_set[i].ChannelNum!=0;i++){
10121 - if(channel_num == channel_set[i].ChannelNum)
10122 - return _TRUE;
10123 + for(i=0;ch_set[i].ChannelNum!=0;i++){
10124 + if(ch == ch_set[i].ChannelNum)
10125 + break;
10126 }
10127 - if(channel_set[i].ChannelNum == 0)
10128 - return _FALSE;
10129 - return _TRUE;
10130 +
10131 + if(i >= ch_set[i].ChannelNum)
10132 + return -1;
10133 + return i;
10134 +}
10135 +
10136 +/*
10137 + * Check the @param ch is fit with setband setting of @param adapter
10138 + * @adapter: the given adapter
10139 + * @ch: the given channel number
10140 + *
10141 + * return _TRUE when check valid, _FALSE not valid
10142 + */
10143 +bool rtw_mlme_band_check(_adapter *adapter, const u32 ch)
10144 +{
10145 + if (adapter->setband == GHZ24_50 /* 2.4G and 5G */
10146 + || (adapter->setband == GHZ_24 && ch < 35) /* 2.4G only */
10147 + || (adapter->setband == GHZ_50 && ch > 35) /* 5G only */
10148 + ) {
10149 + return _TRUE;
10150 + }
10151 + return _FALSE;
10152 }
10153
10154 /****************************************************************************
10155 @@ -286,20 +317,21 @@ static void init_mlme_ext_priv_value(_adapter* padapter)
10156 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
10157 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
10158
10159 -#ifdef CONFIG_TDLS
10160 - u8 i;
10161 -#endif
10162 -
10163 //unsigned char default_channel_set[MAX_CHANNEL_NUM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0};
10164 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};
10165 - unsigned char mixed_basicrate[NumRates] ={_1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, 0xff,};
10166 + unsigned char mixed_basicrate[NumRates] ={_1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_, _12M_RATE_, _24M_RATE_, 0xff,};
10167
10168 ATOMIC_SET(&pmlmeext->event_seq, 0);
10169 pmlmeext->mgnt_seq = 0;//reset to zero when disconnect at client mode
10170 -
10171 +#ifdef CONFIG_IEEE80211W
10172 + pmlmeext->sa_query_seq = 0;
10173 + pmlmeext->mgnt_80211w_IPN=0;
10174 + pmlmeext->mgnt_80211w_IPN_rx=0;
10175 +#endif //CONFIG_IEEE80211W
10176 pmlmeext->cur_channel = padapter->registrypriv.channel;
10177 pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
10178 pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
10179 +
10180 pmlmeext->retry = 0;
10181
10182 pmlmeext->cur_wireless_mode = padapter->registrypriv.wireless_mode;
10183 @@ -309,10 +341,14 @@ static void init_mlme_ext_priv_value(_adapter* padapter)
10184 _rtw_memcpy(pmlmeext->datarate, mixed_datarate, NumRates);
10185 _rtw_memcpy(pmlmeext->basicrate, mixed_basicrate, NumRates);
10186
10187 + if(pmlmeext->cur_channel > 14)
10188 + pmlmeext->tx_rate = IEEE80211_OFDM_RATE_6MB;
10189 + else
10190 + pmlmeext->tx_rate = IEEE80211_CCK_RATE_1MB;
10191 +
10192 pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
10193 pmlmeext->sitesurvey_res.channel_idx = 0;
10194 pmlmeext->sitesurvey_res.bss_cnt = 0;
10195 -
10196 pmlmeext->scan_abort = _FALSE;
10197
10198 pmlmeinfo->state = WIFI_FW_NULL_STATE;
10199 @@ -333,6 +369,79 @@ static void init_mlme_ext_priv_value(_adapter* padapter)
10200 pmlmeinfo->preamble_mode = PREAMBLE_AUTO;
10201
10202 pmlmeinfo->dialogToken = 0;
10203 +
10204 + pmlmeext->action_public_rxseq = 0xffff;
10205 + pmlmeext->action_public_dialog_token = 0xff;
10206 +}
10207 +
10208 +static int has_channel(RT_CHANNEL_INFO *channel_set,
10209 + u8 chanset_size,
10210 + u8 chan) {
10211 + int i;
10212 +
10213 + for (i = 0; i < chanset_size; i++) {
10214 + if (channel_set[i].ChannelNum == chan) {
10215 + return 1;
10216 + }
10217 + }
10218 +
10219 + return 0;
10220 +}
10221 +
10222 +static void init_channel_list(_adapter *padapter, RT_CHANNEL_INFO *channel_set,
10223 + u8 chanset_size,
10224 + struct p2p_channels *channel_list) {
10225 +
10226 + struct p2p_oper_class_map op_class[] = {
10227 + { IEEE80211G, 81, 1, 13, 1, BW20 },
10228 + { IEEE80211G, 82, 14, 14, 1, BW20 },
10229 +#if 0 /* Do not enable HT40 on 2 GHz */
10230 + { IEEE80211G, 83, 1, 9, 1, BW40PLUS },
10231 + { IEEE80211G, 84, 5, 13, 1, BW40MINUS },
10232 +#endif
10233 + { IEEE80211A, 115, 36, 48, 4, BW20 },
10234 + { IEEE80211A, 116, 36, 44, 8, BW40PLUS },
10235 + { IEEE80211A, 117, 40, 48, 8, BW40MINUS },
10236 + { IEEE80211A, 124, 149, 161, 4, BW20 },
10237 + { IEEE80211A, 125, 149, 169, 4, BW20 },
10238 + { IEEE80211A, 126, 149, 157, 8, BW40PLUS },
10239 + { IEEE80211A, 127, 153, 161, 8, BW40MINUS },
10240 + { -1, 0, 0, 0, 0, BW20 }
10241 + };
10242 +
10243 + int cla, op;
10244 +
10245 + cla = 0;
10246 +
10247 + for (op = 0; op_class[op].op_class; op++) {
10248 + u8 ch;
10249 + struct p2p_oper_class_map *o = &op_class[op];
10250 + struct p2p_reg_class *reg = NULL;
10251 +
10252 + for (ch = o->min_chan; ch <= o->max_chan; ch += o->inc) {
10253 + if (!has_channel(channel_set, chanset_size, ch)) {
10254 + continue;
10255 + }
10256 +
10257 + if ((0 == padapter->registrypriv.ht_enable) && (8 == o->inc))
10258 + continue;
10259 +
10260 + if ((0 == (padapter->registrypriv.cbw40_enable & BIT(1))) &&
10261 + ((BW40MINUS == o->bw) || (BW40PLUS == o->bw)))
10262 + continue;
10263 +
10264 + if (reg == NULL) {
10265 + reg = &channel_list->reg_class[cla];
10266 + cla++;
10267 + reg->reg_class = o->op_class;
10268 + reg->channels = 0;
10269 + }
10270 + reg->channel[reg->channels] = ch;
10271 + reg->channels++;
10272 + }
10273 + }
10274 + channel_list->reg_classes = cla;
10275 +
10276 }
10277
10278 static u8 init_channel_set(_adapter* padapter, u8 ChannelPlan, RT_CHANNEL_INFO *channel_set)
10279 @@ -407,7 +516,7 @@ static u8 init_channel_set(_adapter* padapter, u8 ChannelPlan, RT_CHANNEL_INFO *
10280 if ( channel_set[chanset_size].ChannelNum <= 48
10281 || channel_set[chanset_size].ChannelNum >= 149 )
10282 {
10283 - if(RT_CHANNEL_DOMAIN_WORLD_WIDE_5G== ChannelPlan)//passive scan for all 5G channels
10284 + if(RT_CHANNEL_DOMAIN_WORLD_WIDE_5G == ChannelPlan)//passive scan for all 5G channels
10285 channel_set[chanset_size].ScanType = SCAN_PASSIVE;
10286 else
10287 channel_set[chanset_size].ScanType = SCAN_ACTIVE;
10288 @@ -421,7 +530,7 @@ static u8 init_channel_set(_adapter* padapter, u8 ChannelPlan, RT_CHANNEL_INFO *
10289 if ( RTW_ChannelPlan5G[Index5G].Channel[index] <= 48
10290 || RTW_ChannelPlan5G[Index5G].Channel[index] >= 149 ) {
10291 channel_set[chanset_size].ChannelNum = RTW_ChannelPlan5G[Index5G].Channel[index];
10292 - if(RT_CHANNEL_DOMAIN_WORLD_WIDE_5G== ChannelPlan)//passive scan for all 5G channels
10293 + if(RT_CHANNEL_DOMAIN_WORLD_WIDE_5G == ChannelPlan)//passive scan for all 5G channels
10294 channel_set[chanset_size].ScanType = SCAN_PASSIVE;
10295 else
10296 channel_set[chanset_size].ScanType = SCAN_ACTIVE;
10297 @@ -460,10 +569,16 @@ int init_mlme_ext_priv(_adapter* padapter)
10298 #endif
10299
10300 pmlmeext->max_chan_nums = init_channel_set(padapter, pmlmepriv->ChannelPlan,pmlmeext->channel_set);
10301 -
10302 + init_channel_list(padapter, pmlmeext->channel_set, pmlmeext->max_chan_nums, &pmlmeext->channel_list);
10303 +
10304 pmlmeext->chan_scan_time = SURVEY_TO;
10305 pmlmeext->mlmeext_init = _TRUE;
10306
10307 +
10308 +#ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
10309 + pmlmeext->active_keep_alive_check = _TRUE;
10310 +#endif
10311 +
10312 return res;
10313
10314 }
10315 @@ -483,69 +598,6 @@ void free_mlme_ext_priv (struct mlme_ext_priv *pmlmeext)
10316 }
10317 }
10318
10319 -#ifdef CONFIG_TDLS
10320 -int rtw_init_tdls_info(_adapter* padapter)
10321 -{
10322 - int res = _SUCCESS;
10323 - int i;
10324 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
10325 -
10326 - _rtw_memset(ptdlsinfo, 0, sizeof(struct tdls_info) );
10327 -
10328 - ptdlsinfo->ap_prohibited = _FALSE;
10329 - ptdlsinfo->setup_state = UN_TDLS_STATE;
10330 - ptdlsinfo->sta_cnt = 0;
10331 - ptdlsinfo->sta_maximum = _FALSE;
10332 - ptdlsinfo->cam_entry_to_write = 6;
10333 - ptdlsinfo->cam_entry_to_clear = 0;
10334 - ptdlsinfo->ch_sensing = 0;
10335 - ptdlsinfo->cur_channel = 0;
10336 - ptdlsinfo->candidate_ch = 1; //when inplement channel switching, default candidate channel is 1
10337 -
10338 - _rtw_spinlock_init(&ptdlsinfo->cmd_lock);
10339 - _rtw_spinlock_init(&ptdlsinfo->hdl_lock);
10340 -
10341 - return res;
10342 -
10343 -}
10344 -
10345 -void rtw_free_tdls_info(struct tdls_info *ptdlsinfo)
10346 -{
10347 - _rtw_spinlock_free(&ptdlsinfo->cmd_lock);
10348 - _rtw_spinlock_free(&ptdlsinfo->hdl_lock);
10349 -
10350 - _rtw_memset(ptdlsinfo, 0, sizeof(struct tdls_info) );
10351 -
10352 -}
10353 -#endif //CONFIG_TDLS
10354 -
10355 -static void UpdateBrateTbl(
10356 - IN PADAPTER Adapter,
10357 - IN u8 *mBratesOS
10358 -)
10359 -{
10360 - u8 i;
10361 - u8 rate;
10362 -
10363 - // 1M, 2M, 5.5M, 11M, 6M, 12M, 24M are mandatory.
10364 - for(i=0;i<NDIS_802_11_LENGTH_RATES_EX;i++)
10365 - {
10366 - rate = mBratesOS[i] & 0x7f;
10367 - switch(rate)
10368 - {
10369 - case IEEE80211_CCK_RATE_1MB:
10370 - case IEEE80211_CCK_RATE_2MB:
10371 - case IEEE80211_CCK_RATE_5MB:
10372 - case IEEE80211_CCK_RATE_11MB:
10373 - case IEEE80211_OFDM_RATE_6MB:
10374 - case IEEE80211_OFDM_RATE_12MB:
10375 - case IEEE80211_OFDM_RATE_24MB:
10376 - mBratesOS[i] |= IEEE80211_BASIC_RATE_MASK;
10377 - break;
10378 - }
10379 - }
10380 -
10381 -}
10382 static u8 cmp_pkt_chnl_diff(_adapter *padapter,u8* pframe,uint packet_len)
10383 { // if the channel is same, return 0. else return channel differential
10384 uint len;
10385 @@ -569,11 +621,11 @@ static u8 cmp_pkt_chnl_diff(_adapter *padapter,u8* pframe,uint packet_len)
10386 return 0;
10387 }
10388 }
10389 +
10390 static void _mgt_dispatcher(_adapter *padapter, struct mlme_handler *ptable, union recv_frame *precv_frame)
10391 {
10392 u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
10393 u8 *pframe = precv_frame->u.hdr.rx_data;
10394 - uint len = precv_frame->u.hdr.len;
10395
10396 if(ptable->func)
10397 {
10398 @@ -593,10 +645,12 @@ void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame)
10399 {
10400 int index;
10401 struct mlme_handler *ptable;
10402 +#ifdef CONFIG_AP_MODE
10403 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
10404 +#endif //CONFIG_AP_MODE
10405 u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
10406 u8 *pframe = precv_frame->u.hdr.rx_data;
10407 - uint len = precv_frame->u.hdr.len;
10408 + struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(pframe));
10409
10410 RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
10411 ("+mgt_dispatcher: type(0x%x) subtype(0x%x)\n",
10412 @@ -606,11 +660,11 @@ void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame)
10413 {
10414 u8 *pbuf;
10415 pbuf = GetAddr1Ptr(pframe);
10416 - DBG_8192C("A1-%x:%x:%x:%x:%x:%x\n", *pbuf, *(pbuf+1), *(pbuf+2), *(pbuf+3), *(pbuf+4), *(pbuf+5));
10417 + DBG_871X("A1-%x:%x:%x:%x:%x:%x\n", *pbuf, *(pbuf+1), *(pbuf+2), *(pbuf+3), *(pbuf+4), *(pbuf+5));
10418 pbuf = GetAddr2Ptr(pframe);
10419 - DBG_8192C("A2-%x:%x:%x:%x:%x:%x\n", *pbuf, *(pbuf+1), *(pbuf+2), *(pbuf+3), *(pbuf+4), *(pbuf+5));
10420 + DBG_871X("A2-%x:%x:%x:%x:%x:%x\n", *pbuf, *(pbuf+1), *(pbuf+2), *(pbuf+3), *(pbuf+4), *(pbuf+5));
10421 pbuf = GetAddr3Ptr(pframe);
10422 - DBG_8192C("A3-%x:%x:%x:%x:%x:%x\n", *pbuf, *(pbuf+1), *(pbuf+2), *(pbuf+3), *(pbuf+4), *(pbuf+5));
10423 + DBG_871X("A3-%x:%x:%x:%x:%x:%x\n", *pbuf, *(pbuf+1), *(pbuf+2), *(pbuf+3), *(pbuf+4), *(pbuf+5));
10424 }
10425 #endif
10426
10427 @@ -633,13 +687,15 @@ void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame)
10428
10429 #ifdef CONFIG_TDLS
10430 if((index << 4)==WIFI_ACTION){
10431 - //category==public (4), action==TDLS_DISCOVERY_RESPONSE
10432 - if(*(pframe+24)==0x04 && *(pframe+25)==TDLS_DISCOVERY_RESPONSE){
10433 - DBG_8192C("recv tdls discovery response frame\n");
10434 + //category==RTW_WLAN_CATEGORY_PUBLIC, action==TDLS_DISCOVERY_RESPONSE
10435 + if(*(pframe + IEEE80211_MGMT_HDR_LEN ) == RTW_WLAN_CATEGORY_PUBLIC
10436 + && *(pframe + IEEE80211_MGMT_HDR_LEN + 1) == TDLS_DISCOVERY_RESPONSE )
10437 + {
10438 + DBG_871X("recv tdls discovery response frame\n");
10439 On_TDLS_Dis_Rsp(padapter, precv_frame);
10440 }
10441 }
10442 -#endif
10443 +#endif //CONFIG_TDLS
10444
10445 if (index > 13)
10446 {
10447 @@ -648,18 +704,19 @@ void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame)
10448 }
10449 ptable += index;
10450
10451 -#if 0//gtest
10452 - sa = get_sa(pframe);
10453 - psta = search_assoc_sta(sa, padapter);
10454 - // only check last cache seq number for management frame
10455 - if (psta != NULL) {
10456 - if (GetRetry(pframe)) {
10457 - if (GetTupleCache(pframe) == psta->rxcache->nonqos_seq){
10458 - RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("drop due to decache!\n"));
10459 +#if 1
10460 + if (psta != NULL)
10461 + {
10462 + if (GetRetry(pframe))
10463 + {
10464 + if (precv_frame->u.hdr.attrib.seq_num == psta->RxMgmtFrameSeqNum)
10465 + {
10466 + /* drop the duplicate management frame */
10467 + DBG_871X("Drop duplicate management frame with seq_num = %d.\n", precv_frame->u.hdr.attrib.seq_num);
10468 return;
10469 }
10470 }
10471 - psta->rxcache->nonqos_seq = GetTupleCache(pframe);
10472 + psta->RxMgmtFrameSeqNum = precv_frame->u.hdr.attrib.seq_num;
10473 }
10474 #else
10475
10476 @@ -723,7 +780,37 @@ void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame)
10477 #ifdef CONFIG_P2P
10478 u32 p2p_listen_state_process(_adapter *padapter, unsigned char *da)
10479 {
10480 - issue_probersp_p2p( padapter, da);
10481 + bool response = _TRUE;
10482 +
10483 +#ifdef CONFIG_IOCTL_CFG80211
10484 + if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
10485 + {
10486 + if (wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == _FALSE
10487 + || padapter->mlmepriv.wps_probe_resp_ie == NULL
10488 + || padapter->mlmepriv.p2p_probe_resp_ie == NULL
10489 + )
10490 + {
10491 + DBG_871X("DON'T issue_probersp_p2p: p2p_enabled:%d, wps_probe_resp_ie:%p, p2p_probe_resp_ie:%p\n",
10492 + wdev_to_priv(padapter->rtw_wdev)->p2p_enabled,
10493 + padapter->mlmepriv.wps_probe_resp_ie,
10494 + padapter->mlmepriv.p2p_probe_resp_ie);
10495 + response = _FALSE;
10496 + }
10497 + }
10498 + else
10499 +#endif //CONFIG_IOCTL_CFG80211
10500 + if( padapter->wdinfo.driver_interface == DRIVER_WEXT )
10501 + {
10502 + // do nothing if the device name is empty
10503 + if ( !padapter->wdinfo.device_name_len )
10504 + {
10505 + response = _FALSE;
10506 + }
10507 + }
10508 +
10509 + if (response == _TRUE)
10510 + issue_probersp_p2p( padapter, da);
10511 +
10512 return _SUCCESS;
10513 }
10514 #endif //CONFIG_P2P
10515 @@ -750,6 +837,7 @@ unsigned int OnProbeReq(_adapter *padapter, union recv_frame *precv_frame)
10516 #ifdef CONFIG_P2P
10517 struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
10518 struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
10519 + u8 wifi_test_chk_rate = 1;
10520
10521 if ( !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) &&
10522 !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE) &&
10523 @@ -764,7 +852,17 @@ unsigned int OnProbeReq(_adapter *padapter, union recv_frame *precv_frame)
10524 // mcs_rate = 2 -> CCK 5.5M rate
10525 // mcs_rate = 3 -> CCK 11M rate
10526 // In the P2P mode, the driver should not support the CCK rate
10527 - if ( pattrib->mcs_rate > 3 )
10528 +
10529 + // Commented by Kurt 2012/10/16
10530 + // IOT issue: Google Nexus7 use 1M rate to send p2p_probe_req after GO nego completed and Nexus7 is client
10531 +#ifdef CONFIG_WIFI_TEST
10532 + if ( pattrib->mcs_rate <= 3 )
10533 + {
10534 + wifi_test_chk_rate = 0;
10535 + }
10536 +#endif //CONFIG_WIFI_TEST
10537 +
10538 + if( wifi_test_chk_rate == 1 )
10539 {
10540 if((is_valid_p2p_probereq = process_probe_req_p2p_ie(pwdinfo, pframe, len)) == _TRUE)
10541 {
10542 @@ -800,6 +898,131 @@ _continue:
10543
10544 //DBG_871X("+OnProbeReq\n");
10545
10546 +#ifdef CONFIG_AUTO_AP_MODE
10547 + if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE &&
10548 + pmlmepriv->cur_network.join_res == _TRUE)
10549 + {
10550 + _irqL irqL;
10551 + struct sta_info *psta;
10552 + u8 *mac_addr, *peer_addr;
10553 + struct sta_priv *pstapriv = &padapter->stapriv;
10554 + u8 RC_OUI[4]={0x00,0xE0,0x4C,0x0A};
10555 + //EID[1] + EID_LEN[1] + RC_OUI[4] + MAC[6] + PairingID[2] + ChannelNum[2]
10556 +
10557 + p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, _VENDOR_SPECIFIC_IE_, (int *)&ielen,
10558 + len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_);
10559 +
10560 + if(!p || ielen !=14)
10561 + goto _non_rc_device;
10562 +
10563 + if(!_rtw_memcmp(p+2, RC_OUI, sizeof(RC_OUI)))
10564 + goto _non_rc_device;
10565 +
10566 + if(!_rtw_memcmp(p+6, get_sa(pframe), ETH_ALEN))
10567 + {
10568 + DBG_871X("%s, do rc pairing ("MAC_FMT"), but mac addr mismatch!("MAC_FMT")\n", __FUNCTION__,
10569 + MAC_ARG(get_sa(pframe)), MAC_ARG(p+6));
10570 +
10571 + goto _non_rc_device;
10572 + }
10573 +
10574 + DBG_871X("%s, got the pairing device("MAC_FMT")\n", __FUNCTION__, MAC_ARG(get_sa(pframe)));
10575 +
10576 + //new a station
10577 + psta = rtw_get_stainfo(pstapriv, get_sa(pframe));
10578 + if (psta == NULL)
10579 + {
10580 + // allocate a new one
10581 + DBG_871X("going to alloc stainfo for rc="MAC_FMT"\n", MAC_ARG(get_sa(pframe)));
10582 + psta = rtw_alloc_stainfo(pstapriv, get_sa(pframe));
10583 + if (psta == NULL)
10584 + {
10585 + //TODO:
10586 + DBG_871X(" Exceed the upper limit of supported clients...\n");
10587 + return _SUCCESS;
10588 + }
10589 +
10590 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
10591 + if (rtw_is_list_empty(&psta->asoc_list))
10592 + {
10593 + psta->expire_to = pstapriv->expire_to;
10594 + rtw_list_insert_tail(&psta->asoc_list, &pstapriv->asoc_list);
10595 + pstapriv->asoc_list_cnt++;
10596 + }
10597 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
10598 +
10599 + //generate pairing ID
10600 + mac_addr = myid(&(padapter->eeprompriv));
10601 + peer_addr = psta->hwaddr;
10602 + psta->pid = (u16)(((mac_addr[4]<<8) + mac_addr[5]) + ((peer_addr[4]<<8) + peer_addr[5]));
10603 +
10604 + //update peer stainfo
10605 + psta->isrc = _TRUE;
10606 + //psta->aid = 0;
10607 + //psta->mac_id = 2;
10608 +
10609 + /* get a unique AID */
10610 + if (psta->aid > 0) {
10611 + DBG_871X("old AID %d\n", psta->aid);
10612 + } else {
10613 + for (psta->aid = 1; psta->aid <= NUM_STA; psta->aid++)
10614 + if (pstapriv->sta_aid[psta->aid - 1] == NULL)
10615 + break;
10616 +
10617 + if (psta->aid > pstapriv->max_num_sta) {
10618 + psta->aid = 0;
10619 + DBG_871X("no room for more AIDs\n");
10620 + return _SUCCESS;
10621 + } else {
10622 + pstapriv->sta_aid[psta->aid - 1] = psta;
10623 + DBG_871X("allocate new AID = (%d)\n", psta->aid);
10624 + }
10625 + }
10626 +
10627 + psta->qos_option = 1;
10628 + psta->htpriv.ht_option = _TRUE;
10629 + psta->ieee8021x_blocked = _FALSE;
10630 + psta->htpriv.ampdu_enable = _FALSE;
10631 + psta->htpriv.sgi = _FALSE;
10632 + psta->htpriv.bwmode = HT_CHANNEL_WIDTH_20;
10633 + psta->htpriv.ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
10634 +
10635 + //rtw_hal_set_odm_var(padapter, HAL_ODM_STA_INFO, psta, _TRUE);
10636 +
10637 + psta->htpriv.agg_enable_bitmap = 0x0;//reset
10638 + psta->htpriv.candidate_tid_bitmap = 0x0;//reset
10639 +
10640 + _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
10641 +
10642 + _enter_critical_bh(&psta->lock, &irqL);
10643 + psta->state |= _FW_LINKED;
10644 + _exit_critical_bh(&psta->lock, &irqL);
10645 +
10646 + report_add_sta_event(padapter, psta->hwaddr, psta->aid);
10647 +
10648 + }
10649 +
10650 + issue_probersp(padapter, get_sa(pframe), _FALSE);
10651 +
10652 + return _SUCCESS;
10653 +
10654 + }
10655 +
10656 +_non_rc_device:
10657 +
10658 + return _SUCCESS;
10659 +#endif //CONFIG_AUTO_AP_MODE
10660 +
10661 +
10662 +#ifdef CONFIG_CONCURRENT_MODE
10663 + if(((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
10664 + check_buddy_fwstate(padapter, _FW_UNDER_LINKING|_FW_UNDER_SURVEY))
10665 + {
10666 + //don't process probe req
10667 + return _SUCCESS;
10668 + }
10669 +#endif
10670 +
10671 p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, _SSID_IE_, (int *)&ielen,
10672 len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_);
10673
10674 @@ -826,7 +1049,7 @@ _issue_probersp:
10675 {
10676 //DBG_871X("+issue_probersp during ap mode\n");
10677 issue_probersp(padapter, get_sa(pframe), is_valid_p2p_probereq);
10678 - }
10679 + }
10680
10681 }
10682
10683 @@ -857,7 +1080,6 @@ unsigned int OnProbeRsp(_adapter *padapter, union recv_frame *precv_frame)
10684 {
10685 pwdinfo->tx_prov_disc_info.benable = _FALSE;
10686 issue_p2p_provision_request( padapter,
10687 - pwdinfo->tx_prov_disc_info.peerIFAddr,
10688 pwdinfo->tx_prov_disc_info.ssid.Ssid,
10689 pwdinfo->tx_prov_disc_info.ssid.SsidLength,
10690 pwdinfo->tx_prov_disc_info.peerDevAddr );
10691 @@ -866,7 +1088,6 @@ unsigned int OnProbeRsp(_adapter *padapter, union recv_frame *precv_frame)
10692 {
10693 pwdinfo->tx_prov_disc_info.benable = _FALSE;
10694 issue_p2p_provision_request( padapter,
10695 - pwdinfo->tx_prov_disc_info.peerIFAddr,
10696 NULL,
10697 0,
10698 pwdinfo->tx_prov_disc_info.peerDevAddr );
10699 @@ -887,12 +1108,30 @@ unsigned int OnProbeRsp(_adapter *padapter, union recv_frame *precv_frame)
10700 }
10701 }
10702 }
10703 + else if( rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_INVITE_REQ ) )
10704 + {
10705 + if ( _TRUE == pwdinfo->invitereq_info.benable )
10706 + {
10707 + DBG_871X( "[%s] P2P_STATE_TX_INVITE_REQ!\n", __FUNCTION__ );
10708 + if( _rtw_memcmp( pwdinfo->invitereq_info.peer_macaddr, GetAddr2Ptr(pframe), ETH_ALEN ) )
10709 + {
10710 + pwdinfo->invitereq_info.benable = _FALSE;
10711 + issue_p2p_invitation_request( padapter, pwdinfo->invitereq_info.peer_macaddr );
10712 + }
10713 + }
10714 + }
10715 #endif
10716
10717
10718 if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
10719 {
10720 report_survey_event(padapter, precv_frame);
10721 +#ifdef CONFIG_CONCURRENT_MODE
10722 + report_survey_event(padapter->pbuddy_adapter, precv_frame);
10723 +#endif
10724 +#ifdef CONFIG_DUALMAC_CONCURRENT
10725 + dc_report_survey_event(padapter, precv_frame);
10726 +#endif
10727 return _SUCCESS;
10728 }
10729
10730 @@ -922,10 +1161,33 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
10731 struct sta_priv *pstapriv = &padapter->stapriv;
10732 u8 *pframe = precv_frame->u.hdr.rx_data;
10733 uint len = precv_frame->u.hdr.len;
10734 + u8 *p = NULL;
10735 + u32 ielen = 0;
10736 +
10737 +#ifdef CONFIG_ATTEMPT_TO_FIX_AP_BEACON_ERROR
10738 + 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_);
10739 + if ((p != NULL) && (ielen > 0))
10740 + {
10741 + if ((*(p + 1 + ielen) == 0x2D) && (*(p + 2 + ielen) != 0x2D))
10742 + {
10743 + /* Invalid value 0x2D is detected in Extended Supported Rates (ESR) IE. Try to fix the IE length to avoid failed Beacon parsing. */
10744 + 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)));
10745 + *(p + 1) = ielen - 1;
10746 + }
10747 + }
10748 +#endif
10749
10750 if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
10751 {
10752 report_survey_event(padapter, precv_frame);
10753 +#ifdef CONFIG_CONCURRENT_MODE
10754 + report_survey_event(padapter->pbuddy_adapter, precv_frame);
10755 +#endif
10756 +
10757 +#ifdef CONFIG_DUALMAC_CONCURRENT
10758 + dc_report_survey_event(padapter, precv_frame);
10759 +#endif
10760 +
10761 return _SUCCESS;
10762 }
10763
10764 @@ -935,6 +1197,10 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
10765 {
10766 //check the vendor of the assoc AP
10767 pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pframe+sizeof(struct rtw_ieee80211_hdr_3addr), len-sizeof(struct rtw_ieee80211_hdr_3addr));
10768 +#ifdef CONFIG_P2P_PS
10769 + // do P2P PS Before link ? , ToDo
10770 + //process_p2p_ps_ie(padapter, (pframe + WLAN_HDR_A3_LEN), (len - WLAN_HDR_A3_LEN));
10771 +#endif // CONFIG_P2P_PS
10772
10773 //update TSF Value
10774 update_TSF(pmlmeext, pframe, len);
10775 @@ -973,9 +1239,10 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
10776 process_csa_ie(padapter, pframe, len); //channel switch announcement
10777 #endif //CONFIG_DFS
10778
10779 -#ifdef CONFIG_P2P
10780 +#ifdef CONFIG_P2P_PS
10781 + //if(psta->ieee8021x_blocked == _FALSE) // do not allow P2P PS during EAPOL handshake ?
10782 process_p2p_ps_ie(padapter, (pframe + WLAN_HDR_A3_LEN), (len - WLAN_HDR_A3_LEN));
10783 -#endif //CONFIG_P2P
10784 +#endif //CONFIG_P2P_PS
10785
10786 #if 0 //move to validate_recv_mgnt_frame
10787 psta->sta_stats.rx_mgnt_pkts++;
10788 @@ -1045,6 +1312,16 @@ unsigned int OnAuth(_adapter *padapter, union recv_frame *precv_frame)
10789 u8 *pframe = precv_frame->u.hdr.rx_data;
10790 uint len = precv_frame->u.hdr.len;
10791
10792 +
10793 +#ifdef CONFIG_CONCURRENT_MODE
10794 + if(((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
10795 + check_buddy_fwstate(padapter, _FW_UNDER_LINKING|_FW_UNDER_SURVEY))
10796 + {
10797 + //don't process auth request;
10798 + return _SUCCESS;
10799 + }
10800 +#endif //CONFIG_CONCURRENT_MODE
10801 +
10802 if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
10803 return _FAIL;
10804
10805 @@ -1053,8 +1330,8 @@ unsigned int OnAuth(_adapter *padapter, union recv_frame *precv_frame)
10806 sa = GetAddr2Ptr(pframe);
10807
10808 auth_mode = psecuritypriv->dot11AuthAlgrthm;
10809 - seq = cpu_to_le16(*(unsigned short *)((unsigned int)pframe + WLAN_HDR_A3_LEN + 2));
10810 - algorithm = cpu_to_le16(*(unsigned short *)((unsigned int)pframe + WLAN_HDR_A3_LEN));
10811 + seq = cpu_to_le16(*(u16*)((SIZE_PTR)pframe + WLAN_HDR_A3_LEN + 2));
10812 + algorithm = cpu_to_le16(*(u16*)((SIZE_PTR)pframe + WLAN_HDR_A3_LEN));
10813
10814 if (GetPrivacy(pframe))
10815 {
10816 @@ -1096,7 +1373,7 @@ unsigned int OnAuth(_adapter *padapter, union recv_frame *precv_frame)
10817 goto auth_fail;
10818 }
10819
10820 -#if 0 //TODO:ACL control
10821 +#if 0 //ACL control
10822 phead = &priv->wlan_acl_list;
10823 plist = phead->next;
10824 //check sa
10825 @@ -1125,13 +1402,19 @@ unsigned int OnAuth(_adapter *padapter, union recv_frame *precv_frame)
10826 RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,"auth abort because ACL!\n");
10827 return FAIL;
10828 }
10829 +#else
10830 + if(rtw_access_ctrl(padapter, sa) == _FALSE)
10831 + {
10832 + status = _STATS_UNABLE_HANDLE_STA_;
10833 + goto auth_fail;
10834 + }
10835 #endif
10836
10837 pstat = rtw_get_stainfo(pstapriv, sa);
10838 if (pstat == NULL)
10839 {
10840 // allocate a new one
10841 - 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]);
10842 + DBG_871X("going to alloc stainfo for sa="MAC_FMT"\n", MAC_ARG(sa));
10843 pstat = rtw_alloc_stainfo(pstapriv, sa);
10844 if (pstat == NULL)
10845 {
10846 @@ -1152,6 +1435,7 @@ unsigned int OnAuth(_adapter *padapter, union recv_frame *precv_frame)
10847 if(rtw_is_list_empty(&pstat->asoc_list)==_FALSE)
10848 {
10849 rtw_list_delete(&pstat->asoc_list);
10850 + pstapriv->asoc_list_cnt--;
10851 if (pstat->expire_to > 0)
10852 {
10853 //TODO: STA re_auth within expire_to
10854 @@ -1168,6 +1452,7 @@ unsigned int OnAuth(_adapter *padapter, union recv_frame *precv_frame)
10855 if (rtw_is_list_empty(&pstat->auth_list))
10856 {
10857 rtw_list_insert_tail(&pstat->auth_list, &pstapriv->auth_list);
10858 + pstapriv->auth_list_cnt++;
10859 }
10860 _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
10861
10862 @@ -1266,13 +1551,13 @@ unsigned int OnAuth(_adapter *padapter, union recv_frame *precv_frame)
10863
10864 auth_fail:
10865
10866 - if (pstat)
10867 - {
10868 - pstat = &stat;
10869 - _rtw_memset((char *)pstat, '\0', sizeof(stat));
10870 - pstat->auth_seq = 2;
10871 - _rtw_memcpy(pstat->hwaddr, sa, 6);
10872 - }
10873 + if(pstat)
10874 + rtw_free_stainfo(padapter , pstat);
10875 +
10876 + pstat = &stat;
10877 + _rtw_memset((char *)pstat, '\0', sizeof(stat));
10878 + pstat->auth_seq = 2;
10879 + _rtw_memcpy(pstat->hwaddr, sa, 6);
10880
10881 #ifdef CONFIG_NATIVEAP_MLME
10882 issue_auth(padapter, pstat, (unsigned short)status);
10883 @@ -1334,7 +1619,7 @@ unsigned int OnAuthClient(_adapter *padapter, union recv_frame *precv_frame)
10884
10885 if (p == NULL)
10886 {
10887 - //DBG_8192C("marc: no challenge text?\n");
10888 + //DBG_871X("marc: no challenge text?\n");
10889 goto authclnt_fail;
10890 }
10891
10892 @@ -1365,7 +1650,7 @@ unsigned int OnAuthClient(_adapter *padapter, union recv_frame *precv_frame)
10893 else
10894 {
10895 // this is also illegal
10896 - //DBG_8192C("marc: clnt auth failed due to illegal seq=%x\n", seq);
10897 + //DBG_871X("marc: clnt auth failed due to illegal seq=%x\n", seq);
10898 goto authclnt_fail;
10899 }
10900
10901 @@ -1388,13 +1673,11 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
10902 #ifdef CONFIG_AP_MODE
10903 _irqL irqL;
10904 u16 capab_info, listen_interval;
10905 - struct ieee802_11_elems elems;
10906 + struct rtw_ieee802_11_elems elems;
10907 struct sta_info *pstat;
10908 unsigned char reassoc, *p, *pos, *wpa_ie;
10909 - unsigned char rsnie_hdr[4]={0x00, 0x50, 0xf2, 0x01};
10910 unsigned char WMM_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01};
10911 int i, ie_len, wpa_ie_len, left;
10912 - unsigned long flags;
10913 unsigned char supportRate[16];
10914 int supportRateNum;
10915 unsigned short status = _STATS_SUCCESSFUL_;
10916 @@ -1418,6 +1701,15 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
10917 #endif // CONFIG_WFD
10918 #endif //CONFIG_P2P
10919
10920 +#ifdef CONFIG_CONCURRENT_MODE
10921 + if(((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
10922 + check_buddy_fwstate(padapter, _FW_UNDER_LINKING|_FW_UNDER_SURVEY))
10923 + {
10924 + //don't process assoc request;
10925 + return _SUCCESS;
10926 + }
10927 +#endif //CONFIG_CONCURRENT_MODE
10928 +
10929 if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
10930 return _FAIL;
10931
10932 @@ -1668,7 +1960,7 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
10933 {
10934 u8 selected_registrar = 0;
10935
10936 - rtw_get_wps_attr_content(pmlmepriv->wps_beacon_ie, pmlmepriv->wps_beacon_ie_len, WPA_ATTR_SELECTED_REGISTRAR , &selected_registrar, NULL);
10937 + rtw_get_wps_attr_content(pmlmepriv->wps_beacon_ie, pmlmepriv->wps_beacon_ie_len, WPS_ATTR_SELECTED_REGISTRAR , &selected_registrar, NULL);
10938
10939 if(!selected_registrar)
10940 {
10941 @@ -1709,7 +2001,7 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
10942 copy_len = ((wpa_ie_len+2) > sizeof(pstat->wpa_ie)) ? (sizeof(pstat->wpa_ie)):(wpa_ie_len+2);
10943 }
10944
10945 -
10946 +
10947 if(copy_len>0)
10948 _rtw_memcpy(pstat->wpa_ie, wpa_ie-2, copy_len);
10949
10950 @@ -1859,12 +2151,12 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
10951 rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);
10952 if ( attr_contentlen )
10953 {
10954 - pwdinfo->wfd_info.peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
10955 - DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info.peer_rtsp_ctrlport );
10956 + pwdinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
10957 + DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info->peer_rtsp_ctrlport );
10958 }
10959 }
10960 #endif
10961 - }
10962 + }
10963 pstat->p2p_status_code = p2p_status_code;
10964 #endif //CONFIG_P2P
10965
10966 @@ -1910,6 +2202,7 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
10967 if (!rtw_is_list_empty(&pstat->auth_list))
10968 {
10969 rtw_list_delete(&pstat->auth_list);
10970 + pstapriv->auth_list_cnt--;
10971 }
10972 _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
10973
10974 @@ -1917,7 +2210,8 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
10975 if (rtw_is_list_empty(&pstat->asoc_list))
10976 {
10977 pstat->expire_to = pstapriv->expire_to;
10978 - rtw_list_insert_tail(&pstat->asoc_list, &pstapriv->asoc_list);
10979 + rtw_list_insert_tail(&pstat->asoc_list, &pstapriv->asoc_list);
10980 + pstapriv->asoc_list_cnt++;
10981 }
10982 _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
10983
10984 @@ -1926,53 +2220,54 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
10985 {
10986 #ifdef CONFIG_NATIVEAP_MLME
10987 //.1 bss_cap_update & sta_info_update
10988 - bss_cap_update(padapter, pstat);
10989 + bss_cap_update_on_sta_join(padapter, pstat);
10990 sta_info_update(padapter, pstat);
10991 -
10992 - //.2 - report to upper layer
10993 - DBG_871X("indicate_sta_join_event to upper layer - hostapd\n");
10994 - {
10995 -#ifdef CONFIG_IOCTL_CFG80211
10996 - struct wireless_dev *pwdev = padapter->rtw_wdev;
10997
10998 - if(pwdev->iftype == NL80211_IFTYPE_AP)
10999 - {
11000 - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
11001 - rtw_cfg80211_indicate_sta_assoc(padapter, pframe, pkt_len);
11002 - #else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
11003 - _enter_critical_bh(&pstat->lock, &irqL);
11004 - if(pstat->passoc_req)
11005 - {
11006 - rtw_mfree(pstat->passoc_req, pstat->assoc_req_len);
11007 - pstat->passoc_req = NULL;
11008 - pstat->assoc_req_len = 0;
11009 - }
11010 + //issue assoc rsp before notify station join event.
11011 + if (frame_type == WIFI_ASSOCREQ)
11012 + issue_asocrsp(padapter, status, pstat, WIFI_ASSOCRSP);
11013 + else
11014 + issue_asocrsp(padapter, status, pstat, WIFI_REASSOCRSP);
11015
11016 - pstat->passoc_req = rtw_zmalloc(pkt_len);
11017 - if(pstat->passoc_req)
11018 - {
11019 - _rtw_memcpy(pstat->passoc_req, pframe, pkt_len);
11020 - pstat->assoc_req_len = pkt_len;
11021 - }
11022 - _exit_critical_bh(&pstat->lock, &irqL);
11023 - #endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
11024 - }
11025 - else
11026 -#endif //CONFIG_IOCTL_CFG80211
11027 - {
11028 - rtw_indicate_sta_assoc_event(padapter, pstat);
11029 - }
11030 + //.2 - report to upper layer
11031 + DBG_871X("indicate_sta_join_event to upper layer - hostapd\n");
11032
11033 +#ifdef CONFIG_IOCTL_CFG80211
11034 + #ifdef COMPAT_KERNEL_RELEASE
11035 + rtw_cfg80211_indicate_sta_assoc(padapter, pframe, pkt_len);
11036 + #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
11037 + rtw_cfg80211_indicate_sta_assoc(padapter, pframe, pkt_len);
11038 + #else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
11039 + _enter_critical_bh(&pstat->lock, &irqL);
11040 + if(pstat->passoc_req)
11041 + {
11042 + rtw_mfree(pstat->passoc_req, pstat->assoc_req_len);
11043 + pstat->passoc_req = NULL;
11044 + pstat->assoc_req_len = 0;
11045 }
11046
11047 + pstat->passoc_req = rtw_zmalloc(pkt_len);
11048 + if(pstat->passoc_req)
11049 + {
11050 + _rtw_memcpy(pstat->passoc_req, pframe, pkt_len);
11051 + pstat->assoc_req_len = pkt_len;
11052 + }
11053 + _exit_critical_bh(&pstat->lock, &irqL);
11054 + #endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
11055 +#else
11056 + rtw_indicate_sta_assoc_event(padapter, pstat);
11057 +#endif //CONFIG_IOCTL_CFG80211
11058
11059 //.3-(1) report sta add event
11060 report_add_sta_event(padapter, pstat->hwaddr, pstat->aid);
11061
11062 +/*
11063 + //issue assoc rsp before notify station join event.
11064 if (frame_type == WIFI_ASSOCREQ)
11065 issue_asocrsp(padapter, status, pstat, WIFI_ASSOCRSP);
11066 else
11067 issue_asocrsp(padapter, status, pstat, WIFI_REASSOCRSP);
11068 +*/
11069
11070 #endif
11071 }
11072 @@ -2011,6 +2306,7 @@ unsigned int OnAssocRsp(_adapter *padapter, union recv_frame *precv_frame)
11073 int res;
11074 unsigned short status;
11075 PNDIS_802_11_VARIABLE_IEs pIE;
11076 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
11077 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
11078 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
11079 //WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
11080 @@ -2063,13 +2359,13 @@ unsigned int OnAssocRsp(_adapter *padapter, union recv_frame *precv_frame)
11081 {
11082 WMM_param_handler(padapter, pIE);
11083 }
11084 -#ifdef CONFIG_WFD
11085 +#if defined(CONFIG_P2P) && defined(CONFIG_WFD)
11086 else if ( _rtw_memcmp(pIE->data, WFD_OUI, 4)) //WFD
11087 {
11088 - printk( "[%s] Found WFD IE\n", __FUNCTION__ );
11089 + DBG_871X( "[%s] Found WFD IE\n", __FUNCTION__ );
11090 WFD_info_handler( padapter, pIE );
11091 }
11092 -#endif
11093 +#endif
11094 break;
11095
11096 case _HT_CAPABILITY_IE_: //HT caps
11097 @@ -2096,10 +2392,22 @@ unsigned int OnAssocRsp(_adapter *padapter, union recv_frame *precv_frame)
11098 //Update Basic Rate Table for spec, 2010-12-28 , by thomas
11099 UpdateBrateTbl(padapter, pmlmeinfo->network.SupportedRates);
11100
11101 +#ifdef CONFIG_IOCTL_CFG80211
11102 + if (!rtw_cfg80211_check_bss(padapter)) {
11103 + DBG_871X("rtw_cfg80211_check_bss() : BSS not found !!\n");
11104 + res = -2;
11105 + goto report_assoc_result;
11106 + }
11107 +#endif
11108 +
11109 report_assoc_result:
11110 + if (res > 0) {
11111 + rtw_buf_update(&pmlmepriv->assoc_rsp, &pmlmepriv->assoc_rsp_len, pframe, pkt_len);
11112 + } else {
11113 + rtw_buf_free(&pmlmepriv->assoc_rsp, &pmlmepriv->assoc_rsp_len);
11114 + }
11115
11116 report_join_res(padapter, res);
11117 -
11118 return _SUCCESS;
11119 }
11120
11121 @@ -2110,11 +2418,22 @@ unsigned int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame)
11122 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
11123 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
11124 u8 *pframe = precv_frame->u.hdr.rx_data;
11125 +#ifdef CONFIG_P2P
11126 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
11127 +#endif //CONFIG_P2P
11128
11129 //check A3
11130 if (!(_rtw_memcmp(GetAddr3Ptr(pframe), get_my_bssid(&pmlmeinfo->network), ETH_ALEN)))
11131 return _SUCCESS;
11132
11133 +#ifdef CONFIG_P2P
11134 + if ( pwdinfo->rx_invitereq_info.scan_op_ch_only )
11135 + {
11136 + _cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey );
11137 + _set_timer( &pwdinfo->reset_ch_sitesurvey, 10 );
11138 + }
11139 +#endif //CONFIG_P2P
11140 +
11141 reason = le16_to_cpu(*(unsigned short *)(pframe + WLAN_HDR_A3_LEN));
11142
11143 DBG_871X("%s Reason code(%d)\n", __FUNCTION__,reason);
11144 @@ -2128,31 +2447,59 @@ unsigned int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame)
11145
11146 //_enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
11147 //rtw_free_stainfo(padapter, psta);
11148 - //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
11149 + //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
11150
11151 DBG_871X("%s, STA:" MAC_FMT "\n", __FUNCTION__, MAC_ARG(GetAddr2Ptr(pframe)));
11152
11153 - psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
11154 + psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
11155 if(psta)
11156 {
11157 + u8 updated;
11158 +
11159 _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
11160 if(rtw_is_list_empty(&psta->asoc_list)==_FALSE)
11161 {
11162 rtw_list_delete(&psta->asoc_list);
11163 - ap_free_sta(padapter, psta);
11164 + pstapriv->asoc_list_cnt--;
11165 + updated = ap_free_sta(padapter, psta, _FALSE, reason);
11166 +
11167 }
11168 _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
11169 +
11170 + associated_clients_update(padapter, updated);
11171 }
11172 +
11173
11174 return _SUCCESS;
11175 }
11176 else
11177 #endif
11178 {
11179 - DBG_871X("%s, STA:" MAC_FMT "\n", __FUNCTION__, MAC_ARG(GetAddr3Ptr(pframe)));
11180 -
11181 - receive_disconnect(padapter, GetAddr3Ptr(pframe) ,reason);
11182 - }
11183 + int ignore_received_deauth = 0;
11184 +
11185 + // Commented by Albert 20130604
11186 + // Before sending the auth frame to start the STA/GC mode connection with AP/GO,
11187 + // we will send the deauth first.
11188 + // However, the Win8.1 with BRCM Wi-Fi will send the deauth with reason code 6 to us after receieving our deauth.
11189 + // Added the following code to avoid this case.
11190 + if ( ( pmlmeinfo->state & WIFI_FW_AUTH_STATE ) ||
11191 + ( pmlmeinfo->state & WIFI_FW_ASSOC_STATE ) )
11192 + {
11193 + if ( reason == WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA )
11194 + {
11195 + ignore_received_deauth = 1;
11196 + } else if (WLAN_REASON_PREV_AUTH_NOT_VALID == reason) {
11197 + // TODO: 802.11r
11198 + ignore_received_deauth = 1;
11199 + }
11200 + }
11201 +
11202 + DBG_871X("%s, STA:" MAC_FMT ", ignore = %d\n", __FUNCTION__, MAC_ARG(GetAddr3Ptr(pframe)), ignore_received_deauth);
11203 + if ( 0 == ignore_received_deauth )
11204 + {
11205 + receive_disconnect(padapter, GetAddr3Ptr(pframe) ,reason);
11206 + }
11207 + }
11208 pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
11209 return _SUCCESS;
11210
11211 @@ -2165,11 +2512,22 @@ unsigned int OnDisassoc(_adapter *padapter, union recv_frame *precv_frame)
11212 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
11213 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
11214 u8 *pframe = precv_frame->u.hdr.rx_data;
11215 +#ifdef CONFIG_P2P
11216 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
11217 +#endif //CONFIG_P2P
11218
11219 //check A3
11220 if (!(_rtw_memcmp(GetAddr3Ptr(pframe), get_my_bssid(&pmlmeinfo->network), ETH_ALEN)))
11221 return _SUCCESS;
11222
11223 +#ifdef CONFIG_P2P
11224 + if ( pwdinfo->rx_invitereq_info.scan_op_ch_only )
11225 + {
11226 + _cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey );
11227 + _set_timer( &pwdinfo->reset_ch_sitesurvey, 10 );
11228 + }
11229 +#endif //CONFIG_P2P
11230 +
11231 reason = le16_to_cpu(*(unsigned short *)(pframe + WLAN_HDR_A3_LEN));
11232
11233 DBG_871X("%s Reason code(%d)\n", __FUNCTION__,reason);
11234 @@ -2183,21 +2541,26 @@ unsigned int OnDisassoc(_adapter *padapter, union recv_frame *precv_frame)
11235
11236 //_enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
11237 //rtw_free_stainfo(padapter, psta);
11238 - //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
11239 + //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
11240
11241 DBG_871X("%s, STA:" MAC_FMT "\n", __FUNCTION__, MAC_ARG(GetAddr2Ptr(pframe)));
11242
11243 psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
11244 if(psta)
11245 {
11246 + u8 updated;
11247 +
11248 _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
11249 if(rtw_is_list_empty(&psta->asoc_list)==_FALSE)
11250 - {
11251 + {
11252 rtw_list_delete(&psta->asoc_list);
11253 - ap_free_sta(padapter, psta);
11254 + pstapriv->asoc_list_cnt--;
11255 + updated = ap_free_sta(padapter, psta, _FALSE, reason);
11256
11257 }
11258 _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
11259 +
11260 + associated_clients_update(padapter, updated);
11261 }
11262
11263 return _SUCCESS;
11264 @@ -2220,6 +2583,107 @@ unsigned int OnAtim(_adapter *padapter, union recv_frame *precv_frame)
11265 return _SUCCESS;
11266 }
11267
11268 +unsigned int on_action_spct_ch_switch(_adapter *padapter, struct sta_info *psta, u8 *ies, uint ies_len)
11269 +{
11270 + unsigned int ret = _FAIL;
11271 + struct mlme_ext_priv *mlmeext = &padapter->mlmeextpriv;
11272 + struct mlme_ext_info *pmlmeinfo = &(mlmeext->mlmext_info);
11273 +
11274 + if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)) {
11275 + ret = _SUCCESS;
11276 + goto exit;
11277 + }
11278 +
11279 + if ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE) {
11280 +
11281 + int ch_switch_mode = -1, ch = -1, ch_switch_cnt = -1;
11282 + int ch_offset = -1;
11283 + u8 bwmode;
11284 + struct ieee80211_info_element *ie;
11285 +
11286 + DBG_871X(FUNC_NDEV_FMT" from "MAC_FMT"\n",
11287 + FUNC_NDEV_ARG(padapter->pnetdev), MAC_ARG(psta->hwaddr));
11288 +
11289 + for_each_ie(ie, ies, ies_len) {
11290 + if (ie->id == WLAN_EID_CHANNEL_SWITCH) {
11291 + ch_switch_mode = ie->data[0];
11292 + ch = ie->data[1];
11293 + ch_switch_cnt = ie->data[2];
11294 + DBG_871X("ch_switch_mode:%d, ch:%d, ch_switch_cnt:%d\n",
11295 + ch_switch_mode, ch, ch_switch_cnt);
11296 + }
11297 + else if (ie->id == WLAN_EID_SECONDARY_CHANNEL_OFFSET) {
11298 + ch_offset = secondary_ch_offset_to_hal_ch_offset(ie->data[0]);
11299 + DBG_871X("ch_offset:%d\n", ch_offset);
11300 + }
11301 + }
11302 +
11303 + if (ch == -1)
11304 + return _SUCCESS;
11305 +
11306 + if (ch_offset == -1)
11307 + bwmode = mlmeext->cur_bwmode;
11308 + else
11309 + bwmode = (ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE) ?
11310 + HT_CHANNEL_WIDTH_20 : HT_CHANNEL_WIDTH_40;
11311 +
11312 + ch_offset = (ch_offset == -1) ? mlmeext->cur_ch_offset : ch_offset;
11313 +
11314 + /* todo:
11315 + * 1. the decision of channel switching
11316 + * 2. things after channel switching
11317 + */
11318 +
11319 + ret = rtw_set_ch_cmd(padapter, ch, bwmode, ch_offset, _TRUE);
11320 + }
11321 +
11322 +exit:
11323 + return ret;
11324 +}
11325 +
11326 +unsigned int on_action_spct(_adapter *padapter, union recv_frame *precv_frame)
11327 +{
11328 + unsigned int ret = _FAIL;
11329 + struct sta_info *psta = NULL;
11330 + struct sta_priv *pstapriv = &padapter->stapriv;
11331 + u8 *pframe = precv_frame->u.hdr.rx_data;
11332 + uint frame_len = precv_frame->u.hdr.len;
11333 + u8 *frame_body = (u8 *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
11334 + u8 category;
11335 + u8 action;
11336 +
11337 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(padapter->pnetdev));
11338 +
11339 + psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
11340 +
11341 + if (!psta)
11342 + goto exit;
11343 +
11344 + category = frame_body[0];
11345 + if(category != RTW_WLAN_CATEGORY_SPECTRUM_MGMT)
11346 + goto exit;
11347 +
11348 + action = frame_body[1];
11349 + switch (action) {
11350 + case RTW_WLAN_ACTION_SPCT_MSR_REQ:
11351 + case RTW_WLAN_ACTION_SPCT_MSR_RPRT:
11352 + case RTW_WLAN_ACTION_SPCT_TPC_REQ:
11353 + case RTW_WLAN_ACTION_SPCT_TPC_RPRT:
11354 + break;
11355 + case RTW_WLAN_ACTION_SPCT_CHL_SWITCH:
11356 + #ifdef CONFIG_SPCT_CH_SWITCH
11357 + ret = on_action_spct_ch_switch(padapter, psta, &frame_body[2],
11358 + frame_len-(frame_body-pframe)-2);
11359 + #endif
11360 + break;
11361 + default:
11362 + break;
11363 + }
11364 +
11365 +exit:
11366 + return ret;
11367 +}
11368 +
11369 unsigned int OnAction_qos(_adapter *padapter, union recv_frame *precv_frame)
11370 {
11371 return _SUCCESS;
11372 @@ -2242,8 +2706,6 @@ unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame)
11373 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
11374 u8 *pframe = precv_frame->u.hdr.rx_data;
11375 struct sta_priv *pstapriv = &padapter->stapriv;
11376 -
11377 - uint len = precv_frame->u.hdr.len;
11378
11379 //check RA matches or not
11380 if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))//for if1, sta/ap mode
11381 @@ -2271,6 +2733,15 @@ unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame)
11382 category = frame_body[0];
11383 if (category == RTW_WLAN_CATEGORY_BACK)// representing Block Ack
11384 {
11385 +#ifdef CONFIG_TDLS
11386 + if((psta->tdls_sta_state & TDLS_LINKED_STATE) &&
11387 + (psta->htpriv.ht_option==_TRUE) &&
11388 + (psta->htpriv.ampdu_enable==_TRUE) )
11389 + {
11390 + //do nothing; just don't want to return _SUCCESS;
11391 + }
11392 + else
11393 +#endif //CONFIG_TDLS
11394 if (!pmlmeinfo->HT_enable)
11395 {
11396 return _SUCCESS;
11397 @@ -2314,7 +2785,7 @@ unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame)
11398 psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
11399 }
11400
11401 - //DBG_8192C("marc: ADDBA RSP: %x\n", pmlmeinfo->agg_enable_bitmap);
11402 + //DBG_871X("marc: ADDBA RSP: %x\n", pmlmeinfo->agg_enable_bitmap);
11403 break;
11404
11405 case RTW_WLAN_ACTION_DELBA: //DELBA
11406 @@ -2339,7 +2810,7 @@ unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame)
11407 #endif
11408 }
11409
11410 - DBG_8192C("%s(): DELBA: %x(%x)\n", __FUNCTION__,pmlmeinfo->agg_enable_bitmap, reason_code);
11411 + DBG_871X("%s(): DELBA: %x(%x)\n", __FUNCTION__,pmlmeinfo->agg_enable_bitmap, reason_code);
11412 //todo: how to notify the host while receiving DELETE BA
11413 break;
11414
11415 @@ -2352,6 +2823,45 @@ unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame)
11416 }
11417
11418 #ifdef CONFIG_P2P
11419 +
11420 +static int get_reg_classes_full_count(struct p2p_channels channel_list) {
11421 + int cnt = 0;
11422 + int i;
11423 +
11424 + for (i = 0; i < channel_list.reg_classes; i++) {
11425 + cnt += channel_list.reg_class[i].channels;
11426 + }
11427 +
11428 + return cnt;
11429 +}
11430 +
11431 +static void get_channel_cnt_24g_5gl_5gh( struct mlme_ext_priv *pmlmeext, u8* p24g_cnt, u8* p5gl_cnt, u8* p5gh_cnt )
11432 +{
11433 + int i = 0;
11434 +
11435 + *p24g_cnt = 0;
11436 + *p5gl_cnt = 0;
11437 + *p5gh_cnt = 0;
11438 +
11439 + for( i = 0; i < pmlmeext->max_chan_nums; i++ )
11440 + {
11441 + if ( pmlmeext->channel_set[ i ].ChannelNum <= 14 )
11442 + {
11443 + (*p24g_cnt)++;
11444 + }
11445 + else if ( ( pmlmeext->channel_set[ i ].ChannelNum > 14 ) && ( pmlmeext->channel_set[ i ].ChannelNum <= 48 ) )
11446 + {
11447 + // Just include the channel 36, 40, 44, 48 channels for 5G low
11448 + (*p5gl_cnt)++;
11449 + }
11450 + else if ( ( pmlmeext->channel_set[ i ].ChannelNum >= 149 ) && ( pmlmeext->channel_set[ i ].ChannelNum <= 161 ) )
11451 + {
11452 + // Just include the channel 149, 153, 157, 161 channels for 5G high
11453 + (*p5gh_cnt)++;
11454 + }
11455 + }
11456 +}
11457 +
11458 void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
11459 {
11460
11461 @@ -2361,10 +2871,11 @@ void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
11462 u8 oui_subtype = P2P_GO_NEGO_REQ;
11463 u8 wpsie[ 255 ] = { 0x00 }, p2pie[ 255 ] = { 0x00 };
11464 u8 wpsielen = 0, p2pielen = 0, i;
11465 - u16 chnum = 0;
11466 + u8 channel_cnt_24g = 0, channel_cnt_5gl = 0, channel_cnt_5gh = 0;
11467 + u16 len_channellist_attr = 0;
11468 #ifdef CONFIG_WFD
11469 u32 wfdielen = 0;
11470 -#endif //CONFIG_WFD
11471 +#endif //CONFIG_WFD
11472
11473 struct xmit_frame *pmgntframe;
11474 struct pkt_attrib *pattrib;
11475 @@ -2382,7 +2893,7 @@ void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
11476 return;
11477 }
11478
11479 - DBG_8192C( "[%s] In\n", __FUNCTION__ );
11480 + DBG_871X( "[%s] In\n", __FUNCTION__ );
11481 //update attribute
11482 pattrib = &pmgntframe->attrib;
11483 update_mgntframe_attrib(padapter, pattrib);
11484 @@ -2494,12 +3005,18 @@ void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
11485
11486 // Value:
11487 // Device Capability Bitmap, 1 byte
11488 - // Be able to participate in additional P2P Groups and
11489 - // support the P2P Invitation Procedure
11490 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC;
11491 -
11492 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
11493 +
11494 // Group Capability Bitmap, 1 byte
11495 - p2pie[ p2pielen++ ] = 0x00;
11496 + if ( pwdinfo->persistent_supported )
11497 + {
11498 + p2pie[ p2pielen++ ] = P2P_GRPCAP_CROSS_CONN | P2P_GRPCAP_PERSISTENT_GROUP;
11499 + }
11500 + else
11501 + {
11502 + p2pie[ p2pielen++ ] = P2P_GRPCAP_CROSS_CONN;
11503 + }
11504 +
11505
11506 // Group Owner Intent
11507 // Type:
11508 @@ -2536,8 +3053,8 @@ void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
11509
11510 // Value:
11511 // Country String
11512 - p2pie[ p2pielen++ ] = 'U';
11513 - p2pie[ p2pielen++ ] = 'S';
11514 + p2pie[ p2pielen++ ] = 'X';
11515 + p2pie[ p2pielen++ ] = 'X';
11516
11517 // The third byte should be set to 0x04.
11518 // Described in the "Operating Channel Attribute" section.
11519 @@ -2585,33 +3102,104 @@ void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
11520 // Type:
11521 p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
11522
11523 - // Length:
11524 - chnum = ( u16 ) pmlmeext->max_chan_nums;
11525 - *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + chnum );
11526 + // Length:
11527 + // Country String(3)
11528 + // + ( Operating Class (1) + Number of Channels(1) ) * Operation Classes (?)
11529 + // + number of channels in all classes
11530 + len_channellist_attr = 3
11531 + + (1 + 1) * (u16)(pmlmeext->channel_list.reg_classes)
11532 + + get_reg_classes_full_count(pmlmeext->channel_list);
11533 +
11534 +#ifdef CONFIG_CONCURRENT_MODE
11535 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
11536 + {
11537 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + 1 );
11538 + }
11539 + else
11540 + {
11541 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
11542 + }
11543 +#else
11544 +
11545 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
11546 +
11547 +#endif
11548 p2pielen += 2;
11549
11550 // Value:
11551 // Country String
11552 - p2pie[ p2pielen++ ] = 'U';
11553 - p2pie[ p2pielen++ ] = 'S';
11554 + p2pie[ p2pielen++ ] = 'X';
11555 + p2pie[ p2pielen++ ] = 'X';
11556
11557 // The third byte should be set to 0x04.
11558 // Described in the "Operating Channel Attribute" section.
11559 p2pie[ p2pielen++ ] = 0x04;
11560
11561 // Channel Entry List
11562 - // Operating Class
11563 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
11564
11565 - // Number of Channels
11566 - // Depends on the channel plan
11567 - p2pie[ p2pielen++ ] = pmlmeext->max_chan_nums;
11568 +#ifdef CONFIG_CONCURRENT_MODE
11569 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
11570 + {
11571 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
11572 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
11573
11574 - // Channel List
11575 - for( i = 0; i < pmlmeext->max_chan_nums; i++ )
11576 + // Operating Class
11577 + if ( pbuddy_mlmeext->cur_channel > 14 )
11578 + {
11579 + if ( pbuddy_mlmeext->cur_channel >= 149 )
11580 + {
11581 + p2pie[ p2pielen++ ] = 0x7c;
11582 + }
11583 + else
11584 + {
11585 + p2pie[ p2pielen++ ] = 0x73;
11586 + }
11587 + }
11588 + else
11589 + {
11590 + p2pie[ p2pielen++ ] = 0x51;
11591 + }
11592 +
11593 + // Number of Channels
11594 + // Just support 1 channel and this channel is AP's channel
11595 + p2pie[ p2pielen++ ] = 1;
11596 +
11597 + // Channel List
11598 + p2pie[ p2pielen++ ] = pbuddy_mlmeext->cur_channel;
11599 + }
11600 + else
11601 + {
11602 + int i,j;
11603 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
11604 + // Operating Class
11605 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
11606 +
11607 + // Number of Channels
11608 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
11609 +
11610 + // Channel List
11611 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
11612 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
11613 + }
11614 + }
11615 + }
11616 +#else // CONFIG_CONCURRENT_MODE
11617 {
11618 - p2pie[ p2pielen++ ] = pmlmeext->channel_set[ i ].ChannelNum;
11619 + int i,j;
11620 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
11621 + // Operating Class
11622 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
11623 +
11624 + // Number of Channels
11625 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
11626 +
11627 + // Channel List
11628 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
11629 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
11630 + }
11631 + }
11632 }
11633 +#endif // CONFIG_CONCURRENT_MODE
11634
11635 // Device Info
11636 // Type:
11637 @@ -2637,7 +3225,7 @@ void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
11638
11639 // Primary Device Type
11640 // Category ID
11641 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
11642 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
11643 p2pielen += 2;
11644
11645 // OUI
11646 @@ -2645,7 +3233,7 @@ void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
11647 p2pielen += 4;
11648
11649 // Sub Category ID
11650 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
11651 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
11652 p2pielen += 2;
11653
11654 // Number of Secondary Device Types
11655 @@ -2675,16 +3263,30 @@ void issue_p2p_GO_request(_adapter *padapter, u8* raddr)
11656
11657 // Value:
11658 // Country String
11659 - p2pie[ p2pielen++ ] = 'U';
11660 - p2pie[ p2pielen++ ] = 'S';
11661 + p2pie[ p2pielen++ ] = 'X';
11662 + p2pie[ p2pielen++ ] = 'X';
11663
11664 // The third byte should be set to 0x04.
11665 // Described in the "Operating Channel Attribute" section.
11666 p2pie[ p2pielen++ ] = 0x04;
11667
11668 // Operating Class
11669 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
11670 -
11671 + if ( pwdinfo->operating_channel <= 14 )
11672 + {
11673 + // Operating Class
11674 + p2pie[ p2pielen++ ] = 0x51;
11675 + }
11676 + else if ( ( pwdinfo->operating_channel >= 36 ) && ( pwdinfo->operating_channel <= 48 ) )
11677 + {
11678 + // Operating Class
11679 + p2pie[ p2pielen++ ] = 0x73;
11680 + }
11681 + else
11682 + {
11683 + // Operating Class
11684 + p2pie[ p2pielen++ ] = 0x7c;
11685 + }
11686 +
11687 // Channel Number
11688 p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // operating channel number
11689
11690 @@ -2717,10 +3319,8 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
11691 uint wpsielen = 0;
11692 u16 wps_devicepassword_id = 0x0000;
11693 uint wps_devicepassword_id_len = 0;
11694 - u16 chnum = 0;
11695 -#ifdef CONFIG_WFD
11696 - u32 wfdielen = 0;
11697 -#endif //CONFIG_WFD
11698 + u8 channel_cnt_24g = 0, channel_cnt_5gl = 0, channel_cnt_5gh;
11699 + u16 len_channellist_attr = 0;
11700
11701 struct xmit_frame *pmgntframe;
11702 struct pkt_attrib *pattrib;
11703 @@ -2732,13 +3332,16 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
11704 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
11705 struct wifidirect_info *pwdinfo = &( padapter->wdinfo);
11706
11707 +#ifdef CONFIG_WFD
11708 + u32 wfdielen = 0;
11709 +#endif //CONFIG_WFD
11710
11711 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
11712 {
11713 return;
11714 }
11715
11716 - DBG_8192C( "[%s] In\n", __FUNCTION__ );
11717 + DBG_871X( "[%s] In, result = %d\n", __FUNCTION__, result );
11718 //update attribute
11719 pattrib = &pmgntframe->attrib;
11720 update_mgntframe_attrib(padapter, pattrib);
11721 @@ -2839,7 +3442,7 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
11722 _rtw_memcpy( pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pbc", 3 );
11723 }
11724 }
11725 -
11726 +
11727 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *) wpsie, &pattrib->pktlen );
11728
11729
11730 @@ -2899,13 +3502,18 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
11731 else
11732 {
11733 // Be group owner or meet the error case
11734 - // Be able to participate in additional P2P Groups and
11735 - // support the P2P Invitation Procedure
11736 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC;
11737 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
11738 }
11739
11740 // Group Capability Bitmap, 1 byte
11741 - p2pie[ p2pielen++ ] = 0x00;
11742 + if ( pwdinfo->persistent_supported )
11743 + {
11744 + p2pie[ p2pielen++ ] = P2P_GRPCAP_CROSS_CONN | P2P_GRPCAP_PERSISTENT_GROUP;
11745 + }
11746 + else
11747 + {
11748 + p2pie[ p2pielen++ ] = P2P_GRPCAP_CROSS_CONN;
11749 + }
11750
11751 // Group Owner Intent
11752 // Type:
11753 @@ -2950,15 +3558,29 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
11754
11755 // Value:
11756 // Country String
11757 - p2pie[ p2pielen++ ] = 'U';
11758 - p2pie[ p2pielen++ ] = 'S';
11759 + p2pie[ p2pielen++ ] = 'X';
11760 + p2pie[ p2pielen++ ] = 'X';
11761
11762 // The third byte should be set to 0x04.
11763 // Described in the "Operating Channel Attribute" section.
11764 p2pie[ p2pielen++ ] = 0x04;
11765
11766 // Operating Class
11767 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
11768 + if ( pwdinfo->operating_channel <= 14 )
11769 + {
11770 + // Operating Class
11771 + p2pie[ p2pielen++ ] = 0x51;
11772 + }
11773 + else if ( ( pwdinfo->operating_channel >= 36 ) && ( pwdinfo->operating_channel <= 48 ) )
11774 + {
11775 + // Operating Class
11776 + p2pie[ p2pielen++ ] = 0x73;
11777 + }
11778 + else
11779 + {
11780 + // Operating Class
11781 + p2pie[ p2pielen++ ] = 0x7c;
11782 + }
11783
11784 // Channel Number
11785 p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // operating channel number
11786 @@ -2979,33 +3601,103 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
11787 // Type:
11788 p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
11789
11790 - // Length:
11791 - chnum = ( u16 ) pmlmeext->max_chan_nums;
11792 - *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + chnum );
11793 + // Country String(3)
11794 + // + ( Operating Class (1) + Number of Channels(1) ) * Operation Classes (?)
11795 + // + number of channels in all classes
11796 + len_channellist_attr = 3
11797 + + (1 + 1) * (u16)pmlmeext->channel_list.reg_classes
11798 + + get_reg_classes_full_count(pmlmeext->channel_list);
11799 +
11800 +#ifdef CONFIG_CONCURRENT_MODE
11801 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
11802 + {
11803 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + 1 );
11804 + }
11805 + else
11806 + {
11807 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
11808 + }
11809 +#else
11810 +
11811 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
11812 +
11813 + #endif
11814 p2pielen += 2;
11815
11816 // Value:
11817 // Country String
11818 - p2pie[ p2pielen++ ] = 'U';
11819 - p2pie[ p2pielen++ ] = 'S';
11820 + p2pie[ p2pielen++ ] = 'X';
11821 + p2pie[ p2pielen++ ] = 'X';
11822
11823 // The third byte should be set to 0x04.
11824 // Described in the "Operating Channel Attribute" section.
11825 p2pie[ p2pielen++ ] = 0x04;
11826
11827 // Channel Entry List
11828 - // Operating Class
11829 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
11830
11831 - // Number of Channels
11832 - // Depends on the channel plan
11833 - p2pie[ p2pielen++ ] = pmlmeext->max_chan_nums;
11834 +#ifdef CONFIG_CONCURRENT_MODE
11835 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
11836 + {
11837 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
11838 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
11839
11840 - // Channel List
11841 - for( i = 0; i < pmlmeext->max_chan_nums; i++ )
11842 + // Operating Class
11843 + if ( pbuddy_mlmeext->cur_channel > 14 )
11844 + {
11845 + if ( pbuddy_mlmeext->cur_channel >= 149 )
11846 + {
11847 + p2pie[ p2pielen++ ] = 0x7c;
11848 + }
11849 + else
11850 + {
11851 + p2pie[ p2pielen++ ] = 0x73;
11852 + }
11853 + }
11854 + else
11855 + {
11856 + p2pie[ p2pielen++ ] = 0x51;
11857 + }
11858 +
11859 + // Number of Channels
11860 + // Just support 1 channel and this channel is AP's channel
11861 + p2pie[ p2pielen++ ] = 1;
11862 +
11863 + // Channel List
11864 + p2pie[ p2pielen++ ] = pbuddy_mlmeext->cur_channel;
11865 + }
11866 + else
11867 {
11868 - p2pie[ p2pielen++ ] = pmlmeext->channel_set[ i ].ChannelNum;
11869 + int i, j;
11870 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
11871 + // Operating Class
11872 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
11873 +
11874 + // Number of Channels
11875 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
11876 +
11877 + // Channel List
11878 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
11879 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
11880 + }
11881 + }
11882 + }
11883 +#else // CONFIG_CONCURRENT_MODE
11884 + {
11885 + int i, j;
11886 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
11887 + // Operating Class
11888 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
11889 +
11890 + // Number of Channels
11891 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
11892 +
11893 + // Channel List
11894 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
11895 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
11896 + }
11897 + }
11898 }
11899 +#endif // CONFIG_CONCURRENT_MODE
11900
11901 // Device Info
11902 // Type:
11903 @@ -3031,7 +3723,7 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
11904
11905 // Primary Device Type
11906 // Category ID
11907 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
11908 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
11909 p2pielen += 2;
11910
11911 // OUI
11912 @@ -3039,7 +3731,7 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
11913 p2pielen += 4;
11914
11915 // Sub Category ID
11916 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
11917 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
11918 p2pielen += 2;
11919
11920 // Number of Secondary Device Types
11921 @@ -3080,12 +3772,12 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
11922 }
11923
11924 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &pattrib->pktlen );
11925 -
11926 +
11927 #ifdef CONFIG_WFD
11928 wfdielen = build_nego_resp_wfd_ie(pwdinfo, pframe);
11929 pframe += wfdielen;
11930 pattrib->pktlen += wfdielen;
11931 -#endif //CONFIG_WFD
11932 +#endif //CONFIG_WFD
11933
11934 pattrib->last_txcmdsz = pattrib->pktlen;
11935
11936 @@ -3104,9 +3796,6 @@ void issue_p2p_GO_confirm(_adapter *padapter, u8* raddr, u8 result)
11937 u8 oui_subtype = P2P_GO_NEGO_CONF;
11938 u8 wpsie[ 255 ] = { 0x00 }, p2pie[ 255 ] = { 0x00 };
11939 u8 wpsielen = 0, p2pielen = 0;
11940 -#ifdef CONFIG_WFD
11941 - u32 wfdielen = 0;
11942 -#endif //CONFIG_WFD
11943
11944 struct xmit_frame *pmgntframe;
11945 struct pkt_attrib *pattrib;
11946 @@ -3117,14 +3806,16 @@ void issue_p2p_GO_confirm(_adapter *padapter, u8* raddr, u8 result)
11947 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
11948 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
11949 struct wifidirect_info *pwdinfo = &( padapter->wdinfo);
11950 -
11951 +#ifdef CONFIG_WFD
11952 + u32 wfdielen = 0;
11953 +#endif //CONFIG_WFD
11954
11955 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
11956 {
11957 return;
11958 }
11959
11960 - DBG_8192C( "[%s] In\n", __FUNCTION__ );
11961 + DBG_871X( "[%s] In\n", __FUNCTION__ );
11962 //update attribute
11963 pattrib = &pmgntframe->attrib;
11964 update_mgntframe_attrib(padapter, pattrib);
11965 @@ -3194,12 +3885,17 @@ void issue_p2p_GO_confirm(_adapter *padapter, u8* raddr, u8 result)
11966
11967 // Value:
11968 // Device Capability Bitmap, 1 byte
11969 - // Be able to participate in additional P2P Groups and
11970 - // support the P2P Invitation Procedure
11971 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC;
11972 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
11973
11974 // Group Capability Bitmap, 1 byte
11975 - p2pie[ p2pielen++ ] = 0x00;
11976 + if ( pwdinfo->persistent_supported )
11977 + {
11978 + p2pie[ p2pielen++ ] = P2P_GRPCAP_CROSS_CONN | P2P_GRPCAP_PERSISTENT_GROUP;
11979 + }
11980 + else
11981 + {
11982 + p2pie[ p2pielen++ ] = P2P_GRPCAP_CROSS_CONN;
11983 + }
11984
11985
11986 // Operating Channel
11987 @@ -3212,22 +3908,52 @@ void issue_p2p_GO_confirm(_adapter *padapter, u8* raddr, u8 result)
11988
11989 // Value:
11990 // Country String
11991 - p2pie[ p2pielen++ ] = 'U';
11992 - p2pie[ p2pielen++ ] = 'S';
11993 + p2pie[ p2pielen++ ] = 'X';
11994 + p2pie[ p2pielen++ ] = 'X';
11995
11996 // The third byte should be set to 0x04.
11997 // Described in the "Operating Channel Attribute" section.
11998 p2pie[ p2pielen++ ] = 0x04;
11999
12000 - // Operating Class
12001 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
12002
12003 if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) )
12004 {
12005 + if ( pwdinfo->peer_operating_ch <= 14 )
12006 + {
12007 + // Operating Class
12008 + p2pie[ p2pielen++ ] = 0x51;
12009 + }
12010 + else if ( ( pwdinfo->peer_operating_ch >= 36 ) && ( pwdinfo->peer_operating_ch <= 48 ) )
12011 + {
12012 + // Operating Class
12013 + p2pie[ p2pielen++ ] = 0x73;
12014 + }
12015 + else
12016 + {
12017 + // Operating Class
12018 + p2pie[ p2pielen++ ] = 0x7c;
12019 + }
12020 +
12021 p2pie[ p2pielen++ ] = pwdinfo->peer_operating_ch;
12022 }
12023 else
12024 {
12025 + if ( pwdinfo->operating_channel <= 14 )
12026 + {
12027 + // Operating Class
12028 + p2pie[ p2pielen++ ] = 0x51;
12029 + }
12030 + else if ( ( pwdinfo->operating_channel >= 36 ) && ( pwdinfo->operating_channel <= 48 ) )
12031 + {
12032 + // Operating Class
12033 + p2pie[ p2pielen++ ] = 0x73;
12034 + }
12035 + else
12036 + {
12037 + // Operating Class
12038 + p2pie[ p2pielen++ ] = 0x7c;
12039 + }
12040 +
12041 // Channel Number
12042 p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // Use the listen channel as the operating channel
12043 }
12044 @@ -3237,29 +3963,60 @@ void issue_p2p_GO_confirm(_adapter *padapter, u8* raddr, u8 result)
12045 // Type:
12046 p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
12047
12048 - // Length:
12049 - *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + pwdinfo->channel_cnt );
12050 + *(u16*) ( p2pie + p2pielen ) = 6;
12051 p2pielen += 2;
12052
12053 - // Value:
12054 // Country String
12055 - p2pie[ p2pielen++ ] = 'U';
12056 - p2pie[ p2pielen++ ] = 'S';
12057 + p2pie[ p2pielen++ ] = 'X';
12058 + p2pie[ p2pielen++ ] = 'X';
12059
12060 // The third byte should be set to 0x04.
12061 // Described in the "Operating Channel Attribute" section.
12062 p2pie[ p2pielen++ ] = 0x04;
12063
12064 - // Channel Entry List
12065 - // Operating Class
12066 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
12067 -
12068 - // Number of Channels
12069 - p2pie[ p2pielen++ ] = pwdinfo->channel_cnt;
12070 -
12071 - // Channel List
12072 - _rtw_memcpy( p2pie + p2pielen, pwdinfo->channel_list, pwdinfo->channel_cnt );
12073 - p2pielen += pwdinfo->channel_cnt;
12074 + // Value:
12075 + if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) )
12076 + {
12077 + if ( pwdinfo->peer_operating_ch <= 14 )
12078 + {
12079 + // Operating Class
12080 + p2pie[ p2pielen++ ] = 0x51;
12081 + }
12082 + else if ( ( pwdinfo->peer_operating_ch >= 36 ) && ( pwdinfo->peer_operating_ch <= 48 ) )
12083 + {
12084 + // Operating Class
12085 + p2pie[ p2pielen++ ] = 0x73;
12086 + }
12087 + else
12088 + {
12089 + // Operating Class
12090 + p2pie[ p2pielen++ ] = 0x7c;
12091 + }
12092 + p2pie[ p2pielen++ ] = 1;
12093 + p2pie[ p2pielen++ ] = pwdinfo->peer_operating_ch;
12094 + }
12095 + else
12096 + {
12097 + if ( pwdinfo->operating_channel <= 14 )
12098 + {
12099 + // Operating Class
12100 + p2pie[ p2pielen++ ] = 0x51;
12101 + }
12102 + else if ( ( pwdinfo->operating_channel >= 36 ) && ( pwdinfo->operating_channel <= 48 ) )
12103 + {
12104 + // Operating Class
12105 + p2pie[ p2pielen++ ] = 0x73;
12106 + }
12107 + else
12108 + {
12109 + // Operating Class
12110 + p2pie[ p2pielen++ ] = 0x7c;
12111 + }
12112 +
12113 + // Channel Number
12114 + p2pie[ p2pielen++ ] = 1;
12115 + p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // Use the listen channel as the operating channel
12116 + }
12117
12118 if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) )
12119 {
12120 @@ -3282,12 +4039,12 @@ void issue_p2p_GO_confirm(_adapter *padapter, u8* raddr, u8 result)
12121 }
12122
12123 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &pattrib->pktlen );
12124 -
12125 +
12126 #ifdef CONFIG_WFD
12127 wfdielen = build_nego_confirm_wfd_ie(pwdinfo, pframe);
12128 pframe += wfdielen;
12129 pattrib->pktlen += wfdielen;
12130 -#endif //CONFIG_WFD
12131 +#endif //CONFIG_WFD
12132
12133 pattrib->last_txcmdsz = pattrib->pktlen;
12134
12135 @@ -3305,9 +4062,20 @@ void issue_p2p_invitation_request(_adapter *padapter, u8* raddr )
12136 u32 p2poui = cpu_to_be32(P2POUI);
12137 u8 oui_subtype = P2P_INVIT_REQ;
12138 u8 p2pie[ 255 ] = { 0x00 };
12139 - u8 p2pielen = 0;
12140 + u8 p2pielen = 0, i;
12141 u8 dialogToken = 3;
12142 -
12143 + u8 channel_cnt_24g = 0, channel_cnt_5gl = 0, channel_cnt_5gh = 0;
12144 + u16 len_channellist_attr = 0;
12145 +#ifdef CONFIG_WFD
12146 + u32 wfdielen = 0;
12147 +#endif //CONFIG_WFD
12148 +#ifdef CONFIG_CONCURRENT_MODE
12149 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
12150 + struct wifidirect_info *pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
12151 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
12152 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
12153 +#endif
12154 +
12155 struct xmit_frame *pmgntframe;
12156 struct pkt_attrib *pattrib;
12157 unsigned char *pframe;
12158 @@ -3367,7 +4135,7 @@ void issue_p2p_invitation_request(_adapter *padapter, u8* raddr )
12159 // 1. Configuration Timeout
12160 // 2. Invitation Flags
12161 // 3. Operating Channel ( Only GO )
12162 - // 4. P2P Group BSSID ( Only GO )
12163 + // 4. P2P Group BSSID ( Should be included if I am the GO )
12164 // 5. Channel List
12165 // 6. P2P Group ID
12166 // 7. P2P Device Info
12167 @@ -3396,42 +4164,153 @@ void issue_p2p_invitation_request(_adapter *padapter, u8* raddr )
12168 p2pie[ p2pielen++ ] = P2P_INVITATION_FLAGS_PERSISTENT;
12169
12170
12171 - // Channel List
12172 + // Operating Channel
12173 // Type:
12174 - p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
12175 + p2pie[ p2pielen++ ] = P2P_ATTR_OPERATING_CH;
12176
12177 // Length:
12178 - *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0010 );
12179 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0005 );
12180 p2pielen += 2;
12181
12182 // Value:
12183 // Country String
12184 - p2pie[ p2pielen++ ] = 'U';
12185 - p2pie[ p2pielen++ ] = 'S';
12186 + p2pie[ p2pielen++ ] = 'X';
12187 + p2pie[ p2pielen++ ] = 'X';
12188
12189 // The third byte should be set to 0x04.
12190 // Described in the "Operating Channel Attribute" section.
12191 p2pie[ p2pielen++ ] = 0x04;
12192
12193 - // Channel Entry List
12194 // Operating Class
12195 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
12196 + if ( pwdinfo->invitereq_info.operating_ch <= 14 )
12197 + p2pie[ p2pielen++ ] = 0x51;
12198 + else if ( ( pwdinfo->invitereq_info.operating_ch >= 36 ) && ( pwdinfo->invitereq_info.operating_ch <= 48 ) )
12199 + p2pie[ p2pielen++ ] = 0x73;
12200 + else
12201 + p2pie[ p2pielen++ ] = 0x7c;
12202 +
12203 + // Channel Number
12204 + p2pie[ p2pielen++ ] = pwdinfo->invitereq_info.operating_ch; // operating channel number
12205
12206 - // Number of Channels
12207 - p2pie[ p2pielen++ ] = 0x0B; // support channel 1 - 11
12208 + if ( _rtw_memcmp( myid( &padapter->eeprompriv ), pwdinfo->invitereq_info.go_bssid, ETH_ALEN ) )
12209 + {
12210 + // P2P Group BSSID
12211 + // Type:
12212 + p2pie[ p2pielen++ ] = P2P_ATTR_GROUP_BSSID;
12213 +
12214 + // Length:
12215 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( ETH_ALEN );
12216 + p2pielen += 2;
12217 +
12218 + // Value:
12219 + // P2P Device Address for GO
12220 + _rtw_memcpy( p2pie + p2pielen, pwdinfo->invitereq_info.go_bssid, ETH_ALEN );
12221 + p2pielen += ETH_ALEN;
12222 + }
12223
12224 // Channel List
12225 - p2pie[ p2pielen++ ] = 0x01;
12226 - p2pie[ p2pielen++ ] = 0x02;
12227 - p2pie[ p2pielen++ ] = 0x03;
12228 + // Type:
12229 + p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
12230 +
12231 +
12232 + // Length:
12233 + // Country String(3)
12234 + // + ( Operating Class (1) + Number of Channels(1) ) * Operation Classes (?)
12235 + // + number of channels in all classes
12236 + len_channellist_attr = 3
12237 + + (1 + 1) * (u16)pmlmeext->channel_list.reg_classes
12238 + + get_reg_classes_full_count(pmlmeext->channel_list);
12239 +
12240 +#ifdef CONFIG_CONCURRENT_MODE
12241 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
12242 + {
12243 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + 1 );
12244 + }
12245 + else
12246 + {
12247 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
12248 + }
12249 +#else
12250 +
12251 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
12252 +
12253 + #endif
12254 + p2pielen += 2;
12255 +
12256 + // Value:
12257 + // Country String
12258 + p2pie[ p2pielen++ ] = 'X';
12259 + p2pie[ p2pielen++ ] = 'X';
12260 +
12261 + // The third byte should be set to 0x04.
12262 + // Described in the "Operating Channel Attribute" section.
12263 p2pie[ p2pielen++ ] = 0x04;
12264 - p2pie[ p2pielen++ ] = 0x05;
12265 - p2pie[ p2pielen++ ] = 0x06;
12266 - p2pie[ p2pielen++ ] = 0x07;
12267 - p2pie[ p2pielen++ ] = 0x08;
12268 - p2pie[ p2pielen++ ] = 0x09;
12269 - p2pie[ p2pielen++ ] = 0x0A;
12270 - p2pie[ p2pielen++ ] = 0x0B;
12271 +
12272 + // Channel Entry List
12273 +#ifdef CONFIG_CONCURRENT_MODE
12274 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
12275 + {
12276 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
12277 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
12278 +
12279 + // Operating Class
12280 + if ( pbuddy_mlmeext->cur_channel > 14 )
12281 + {
12282 + if ( pbuddy_mlmeext->cur_channel >= 149 )
12283 + {
12284 + p2pie[ p2pielen++ ] = 0x7c;
12285 + }
12286 + else
12287 + {
12288 + p2pie[ p2pielen++ ] = 0x73;
12289 + }
12290 + }
12291 + else
12292 + {
12293 + p2pie[ p2pielen++ ] = 0x51;
12294 + }
12295 +
12296 + // Number of Channels
12297 + // Just support 1 channel and this channel is AP's channel
12298 + p2pie[ p2pielen++ ] = 1;
12299 +
12300 + // Channel List
12301 + p2pie[ p2pielen++ ] = pbuddy_mlmeext->cur_channel;
12302 + }
12303 + else
12304 + {
12305 + int i, j;
12306 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
12307 + // Operating Class
12308 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
12309 +
12310 + // Number of Channels
12311 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
12312 +
12313 + // Channel List
12314 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
12315 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
12316 + }
12317 + }
12318 + }
12319 +#else // CONFIG_CONCURRENT_MODE
12320 + {
12321 + int i, j;
12322 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
12323 + // Operating Class
12324 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
12325 +
12326 + // Number of Channels
12327 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
12328 +
12329 + // Channel List
12330 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
12331 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
12332 + }
12333 + }
12334 + }
12335 +#endif // CONFIG_CONCURRENT_MODE
12336 +
12337
12338 // P2P Group ID
12339 // Type:
12340 @@ -3443,11 +4322,11 @@ void issue_p2p_invitation_request(_adapter *padapter, u8* raddr )
12341
12342 // Value:
12343 // P2P Device Address for GO
12344 - _rtw_memcpy( p2pie + p2pielen, raddr, ETH_ALEN );
12345 + _rtw_memcpy( p2pie + p2pielen, pwdinfo->invitereq_info.go_bssid, ETH_ALEN );
12346 p2pielen += ETH_ALEN;
12347
12348 // SSID
12349 - _rtw_memcpy( p2pie + p2pielen, pwdinfo->invitereq_info.ssid, pwdinfo->invitereq_info.ssidlen );
12350 + _rtw_memcpy( p2pie + p2pielen, pwdinfo->invitereq_info.go_ssid, pwdinfo->invitereq_info.ssidlen );
12351 p2pielen += pwdinfo->invitereq_info.ssidlen;
12352
12353
12354 @@ -3473,7 +4352,7 @@ void issue_p2p_invitation_request(_adapter *padapter, u8* raddr )
12355
12356 // Primary Device Type
12357 // Category ID
12358 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
12359 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
12360 p2pielen += 2;
12361
12362 // OUI
12363 @@ -3481,7 +4360,7 @@ void issue_p2p_invitation_request(_adapter *padapter, u8* raddr )
12364 p2pielen += 4;
12365
12366 // Sub Category ID
12367 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
12368 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
12369 p2pielen += 2;
12370
12371 // Number of Secondary Device Types
12372 @@ -3501,7 +4380,12 @@ void issue_p2p_invitation_request(_adapter *padapter, u8* raddr )
12373 p2pielen += pwdinfo->device_name_len;
12374
12375 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &pattrib->pktlen );
12376 -
12377 +
12378 +#ifdef CONFIG_WFD
12379 + wfdielen = build_invitation_req_wfd_ie(pwdinfo, pframe);
12380 + pframe += wfdielen;
12381 + pattrib->pktlen += wfdielen;
12382 +#endif //CONFIG_WFD
12383
12384 pattrib->last_txcmdsz = pattrib->pktlen;
12385
12386 @@ -3511,7 +4395,7 @@ void issue_p2p_invitation_request(_adapter *padapter, u8* raddr )
12387
12388 }
12389
12390 -void issue_p2p_invitation_response(_adapter *padapter, u8* raddr, u8 dialogToken, u8 success)
12391 +void issue_p2p_invitation_response(_adapter *padapter, u8* raddr, u8 dialogToken, u8 status_code)
12392 {
12393
12394 unsigned char category = RTW_WLAN_CATEGORY_PUBLIC;
12395 @@ -3519,7 +4403,18 @@ void issue_p2p_invitation_response(_adapter *padapter, u8* raddr, u8 dialogToken
12396 u32 p2poui = cpu_to_be32(P2POUI);
12397 u8 oui_subtype = P2P_INVIT_RESP;
12398 u8 p2pie[ 255 ] = { 0x00 };
12399 - u8 p2pielen = 0;
12400 + u8 p2pielen = 0, i;
12401 + u8 channel_cnt_24g = 0, channel_cnt_5gl = 0, channel_cnt_5gh = 0;
12402 + u16 len_channellist_attr = 0;
12403 +#ifdef CONFIG_CONCURRENT_MODE
12404 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
12405 + struct wifidirect_info *pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
12406 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
12407 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
12408 +#endif
12409 +#ifdef CONFIG_WFD
12410 + u32 wfdielen = 0;
12411 +#endif //CONFIG_WFD
12412
12413 struct xmit_frame *pmgntframe;
12414 struct pkt_attrib *pattrib;
12415 @@ -3592,19 +4487,13 @@ void issue_p2p_invitation_response(_adapter *padapter, u8* raddr, u8 dialogToken
12416 p2pielen += 2;
12417
12418 // Value:
12419 - if ( success )
12420 - {
12421 - p2pie[ p2pielen++ ] = P2P_STATUS_SUCCESS;
12422 - }
12423 - else
12424 - {
12425 - // Sent the event receiving the P2P Invitation Req frame to DMP UI.
12426 - // DMP had to compare the MAC address to find out the profile.
12427 - // So, the WiFi driver will send the P2P_STATUS_FAIL_INFO_UNAVAILABLE to NB.
12428 - // If the UI found the corresponding profile, the WiFi driver sends the P2P Invitation Req
12429 - // to NB to rebuild the persistent group.
12430 - p2pie[ p2pielen++ ] = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
12431 - }
12432 + // When status code is P2P_STATUS_FAIL_INFO_UNAVAILABLE.
12433 + // Sent the event receiving the P2P Invitation Req frame to DMP UI.
12434 + // DMP had to compare the MAC address to find out the profile.
12435 + // So, the WiFi driver will send the P2P_STATUS_FAIL_INFO_UNAVAILABLE to NB.
12436 + // If the UI found the corresponding profile, the WiFi driver sends the P2P Invitation Req
12437 + // to NB to rebuild the persistent group.
12438 + p2pie[ p2pielen++ ] = status_code;
12439
12440 // Configuration Timeout
12441 // Type:
12442 @@ -3618,49 +4507,164 @@ void issue_p2p_invitation_response(_adapter *padapter, u8* raddr, u8 dialogToken
12443 p2pie[ p2pielen++ ] = 200; // 2 seconds needed to be the P2P GO
12444 p2pie[ p2pielen++ ] = 200; // 2 seconds needed to be the P2P Client
12445
12446 -
12447 - if ( success )
12448 + if( status_code == P2P_STATUS_SUCCESS )
12449 {
12450 + if( rtw_p2p_chk_role( pwdinfo, P2P_ROLE_GO ) )
12451 + {
12452 + // The P2P Invitation request frame asks this Wi-Fi device to be the P2P GO
12453 + // In this case, the P2P Invitation response frame should carry the two more P2P attributes.
12454 + // First one is operating channel attribute.
12455 + // Second one is P2P Group BSSID attribute.
12456 +
12457 + // Operating Channel
12458 + // Type:
12459 + p2pie[ p2pielen++ ] = P2P_ATTR_OPERATING_CH;
12460 +
12461 + // Length:
12462 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0005 );
12463 + p2pielen += 2;
12464 +
12465 + // Value:
12466 + // Country String
12467 + p2pie[ p2pielen++ ] = 'X';
12468 + p2pie[ p2pielen++ ] = 'X';
12469 +
12470 + // The third byte should be set to 0x04.
12471 + // Described in the "Operating Channel Attribute" section.
12472 + p2pie[ p2pielen++ ] = 0x04;
12473 +
12474 + // Operating Class
12475 + p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
12476 +
12477 + // Channel Number
12478 + p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // operating channel number
12479 +
12480 +
12481 + // P2P Group BSSID
12482 + // Type:
12483 + p2pie[ p2pielen++ ] = P2P_ATTR_GROUP_BSSID;
12484 +
12485 + // Length:
12486 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( ETH_ALEN );
12487 + p2pielen += 2;
12488 +
12489 + // Value:
12490 + // P2P Device Address for GO
12491 + _rtw_memcpy( p2pie + p2pielen, myid( &padapter->eeprompriv ), ETH_ALEN );
12492 + p2pielen += ETH_ALEN;
12493 +
12494 + }
12495 +
12496 // Channel List
12497 // Type:
12498 p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
12499
12500 // Length:
12501 - *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0010 );
12502 + // Country String(3)
12503 + // + ( Operating Class (1) + Number of Channels(1) ) * Operation Classes (?)
12504 + // + number of channels in all classes
12505 + len_channellist_attr = 3
12506 + + (1 + 1) * (u16)pmlmeext->channel_list.reg_classes
12507 + + get_reg_classes_full_count(pmlmeext->channel_list);
12508 +
12509 +#ifdef CONFIG_CONCURRENT_MODE
12510 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
12511 + {
12512 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 5 + 1 );
12513 + }
12514 + else
12515 + {
12516 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
12517 + }
12518 +#else
12519 +
12520 + *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( len_channellist_attr );
12521 +
12522 +#endif
12523 p2pielen += 2;
12524
12525 // Value:
12526 // Country String
12527 - p2pie[ p2pielen++ ] = 'U';
12528 - p2pie[ p2pielen++ ] = 'S';
12529 -
12530 + p2pie[ p2pielen++ ] = 'X';
12531 + p2pie[ p2pielen++ ] = 'X';
12532 +
12533 // The third byte should be set to 0x04.
12534 // Described in the "Operating Channel Attribute" section.
12535 p2pie[ p2pielen++ ] = 0x04;
12536
12537 // Channel Entry List
12538 - // Operating Class
12539 - p2pie[ p2pielen++ ] = 0x51; // Copy from SD7
12540 +#ifdef CONFIG_CONCURRENT_MODE
12541 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
12542 + {
12543 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
12544 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
12545
12546 - // Number of Channels
12547 - p2pie[ p2pielen++ ] = 0x0B; // support channel 1 - 11
12548 + // Operating Class
12549 + if ( pbuddy_mlmeext->cur_channel > 14 )
12550 + {
12551 + if ( pbuddy_mlmeext->cur_channel >= 149 )
12552 + {
12553 + p2pie[ p2pielen++ ] = 0x7c;
12554 + }
12555 + else
12556 + {
12557 + p2pie[ p2pielen++ ] = 0x73;
12558 + }
12559 + }
12560 + else
12561 + {
12562 + p2pie[ p2pielen++ ] = 0x51;
12563 + }
12564
12565 - // Channel List
12566 - p2pie[ p2pielen++ ] = 0x01;
12567 - p2pie[ p2pielen++ ] = 0x02;
12568 - p2pie[ p2pielen++ ] = 0x03;
12569 - p2pie[ p2pielen++ ] = 0x04;
12570 - p2pie[ p2pielen++ ] = 0x05;
12571 - p2pie[ p2pielen++ ] = 0x06;
12572 - p2pie[ p2pielen++ ] = 0x07;
12573 - p2pie[ p2pielen++ ] = 0x08;
12574 - p2pie[ p2pielen++ ] = 0x09;
12575 - p2pie[ p2pielen++ ] = 0x0A;
12576 - p2pie[ p2pielen++ ] = 0x0B;
12577 + // Number of Channels
12578 + // Just support 1 channel and this channel is AP's channel
12579 + p2pie[ p2pielen++ ] = 1;
12580 +
12581 + // Channel List
12582 + p2pie[ p2pielen++ ] = pbuddy_mlmeext->cur_channel;
12583 + }
12584 + else
12585 + {
12586 + int i, j;
12587 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
12588 + // Operating Class
12589 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
12590 +
12591 + // Number of Channels
12592 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
12593 +
12594 + // Channel List
12595 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
12596 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
12597 + }
12598 + }
12599 + }
12600 +#else // CONFIG_CONCURRENT_MODE
12601 + {
12602 + int i, j;
12603 + for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
12604 + // Operating Class
12605 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
12606 +
12607 + // Number of Channels
12608 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
12609 +
12610 + // Channel List
12611 + for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
12612 + p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
12613 + }
12614 + }
12615 + }
12616 +#endif // CONFIG_CONCURRENT_MODE
12617 }
12618
12619 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &pattrib->pktlen );
12620
12621 +#ifdef CONFIG_WFD
12622 + wfdielen = build_invitation_resp_wfd_ie(pwdinfo, pframe);
12623 + pframe += wfdielen;
12624 + pattrib->pktlen += wfdielen;
12625 +#endif //CONFIG_WFD
12626
12627 pattrib->last_txcmdsz = pattrib->pktlen;
12628
12629 @@ -3670,7 +4674,7 @@ void issue_p2p_invitation_response(_adapter *padapter, u8* raddr, u8 dialogToken
12630
12631 }
12632
12633 -void issue_p2p_provision_request(_adapter *padapter, u8* pinterface_raddr, u8* pssid, u8 ussidlen, u8* pdev_raddr )
12634 +void issue_p2p_provision_request(_adapter *padapter, u8* pssid, u8 ussidlen, u8* pdev_raddr )
12635 {
12636 unsigned char category = RTW_WLAN_CATEGORY_PUBLIC;
12637 u8 action = P2P_PUB_ACTION_ACTION;
12638 @@ -3700,7 +4704,7 @@ void issue_p2p_provision_request(_adapter *padapter, u8* pinterface_raddr, u8* p
12639 return;
12640 }
12641
12642 - DBG_8192C( "[%s] In\n", __FUNCTION__ );
12643 + DBG_871X( "[%s] In\n", __FUNCTION__ );
12644 //update attribute
12645 pattrib = &pmgntframe->attrib;
12646 update_mgntframe_attrib(padapter, pattrib);
12647 @@ -3713,10 +4717,9 @@ void issue_p2p_provision_request(_adapter *padapter, u8* pinterface_raddr, u8* p
12648 fctrl = &(pwlanhdr->frame_ctl);
12649 *(fctrl) = 0;
12650
12651 - _rtw_memcpy(pwlanhdr->addr1, pinterface_raddr, ETH_ALEN);
12652 + _rtw_memcpy(pwlanhdr->addr1, pdev_raddr, ETH_ALEN);
12653 _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
12654 - //_rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
12655 - _rtw_memcpy(pwlanhdr->addr3, pinterface_raddr, ETH_ALEN);
12656 + _rtw_memcpy(pwlanhdr->addr3, pdev_raddr, ETH_ALEN);
12657
12658 SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
12659 pmlmeext->mgnt_seq++;
12660 @@ -3783,21 +4786,22 @@ void issue_p2p_provision_request(_adapter *padapter, u8* pinterface_raddr, u8* p
12661
12662 }
12663
12664 +
12665 u8 is_matched_in_profilelist( u8* peermacaddr, struct profile_info* profileinfo )
12666 {
12667 u8 i, match_result = 0;
12668
12669 - DBG_8192C( "[%s] peermac = %.2X %.2X %.2X %.2X %.2X %.2X\n", __FUNCTION__,
12670 + DBG_871X( "[%s] peermac = %.2X %.2X %.2X %.2X %.2X %.2X\n", __FUNCTION__,
12671 peermacaddr[0], peermacaddr[1],peermacaddr[2],peermacaddr[3],peermacaddr[4],peermacaddr[5]);
12672
12673 for( i = 0; i < P2P_MAX_PERSISTENT_GROUP_NUM; i++, profileinfo++ )
12674 {
12675 - DBG_8192C( "[%s] profileinfo_mac = %.2X %.2X %.2X %.2X %.2X %.2X\n", __FUNCTION__,
12676 + DBG_871X( "[%s] profileinfo_mac = %.2X %.2X %.2X %.2X %.2X %.2X\n", __FUNCTION__,
12677 profileinfo->peermac[0], profileinfo->peermac[1],profileinfo->peermac[2],profileinfo->peermac[3],profileinfo->peermac[4],profileinfo->peermac[5]);
12678 if ( _rtw_memcmp( peermacaddr, profileinfo->peermac, ETH_ALEN ) )
12679 {
12680 match_result = 1;
12681 - DBG_8192C( "[%s] Match!\n", __FUNCTION__ );
12682 + DBG_871X( "[%s] Match!\n", __FUNCTION__ );
12683 break;
12684 }
12685 }
12686 @@ -3816,6 +4820,7 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
12687 struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
12688 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
12689 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
12690 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
12691 //WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
12692 u16 beacon_interval = 100;
12693 u16 capInfo = 0;
12694 @@ -3825,13 +4830,10 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
12695 #ifdef CONFIG_WFD
12696 u32 wfdielen = 0;
12697 #endif //CONFIG_WFD
12698 -#ifdef CONFIG_IOCTL_CFG80211
12699 - struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
12700 - struct ieee80211_channel *ieee_ch = &pcfg80211_wdinfo->remain_on_ch_channel;
12701 - u8 listen_channel = (u8) ieee80211_frequency_to_channel(ieee_ch->center_freq);
12702 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
12703 -#endif //CONFIG_IOCTL_CFG80211
12704 -
12705 +#ifdef CONFIG_INTEL_WIDI
12706 + u8 zero_array_check[L2SDTA_SERVICE_VE_LEN] = { 0x00 };
12707 +#endif //CONFIG_INTEL_WIDI
12708 +
12709 //DBG_871X("%s\n", __FUNCTION__);
12710
12711 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
12712 @@ -3893,20 +4895,10 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
12713 pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pwdinfo->support_rate, &pattrib->pktlen);
12714
12715 // DS parameter set
12716 -#ifdef CONFIG_IOCTL_CFG80211
12717 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && listen_channel !=0)
12718 - {
12719 - pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&listen_channel, &pattrib->pktlen);
12720 - }
12721 - else
12722 -#endif //CONFIG_IOCTL_CFG80211
12723 - {
12724 - pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&pwdinfo->listen_channel, &pattrib->pktlen);
12725 - }
12726 -
12727 + pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&pwdinfo->listen_channel, &pattrib->pktlen);
12728
12729 #ifdef CONFIG_IOCTL_CFG80211
12730 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
12731 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
12732 {
12733 if( pmlmepriv->wps_probe_resp_ie != NULL && pmlmepriv->p2p_probe_resp_ie != NULL )
12734 {
12735 @@ -3922,7 +4914,7 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
12736 }
12737 }
12738 else
12739 -#endif //CONFIG_IOCTL_CFG80211
12740 +#endif //CONFIG_IOCTL_CFG80211
12741 {
12742
12743 // Todo: WPS IE
12744 @@ -3946,9 +4938,44 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
12745 // Value:
12746 wpsie[wpsielen++] = WPS_VERSION_1; // Version 1.0
12747
12748 - // WiFi Simple Config State
12749 - // Type:
12750 - *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_SIMPLE_CONF_STATE );
12751 +#ifdef CONFIG_INTEL_WIDI
12752 + // Commented by Kurt
12753 + // Appended WiDi info. only if we did issued_probereq_widi(), and then we saved ven. ext. in pmlmepriv->sa_ext.
12754 + if( _rtw_memcmp(pmlmepriv->sa_ext, zero_array_check, L2SDTA_SERVICE_VE_LEN) == _FALSE
12755 + || pmlmepriv->num_p2p_sdt != 0 )
12756 + {
12757 + //Sec dev type
12758 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_SEC_DEV_TYPE_LIST );
12759 + wpsielen += 2;
12760 +
12761 + // Length:
12762 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0008 );
12763 + wpsielen += 2;
12764 +
12765 + // Value:
12766 + // Category ID
12767 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_CID_DISPLAYS );
12768 + wpsielen += 2;
12769 +
12770 + // OUI
12771 + *(u32*) ( wpsie + wpsielen ) = cpu_to_be32( INTEL_DEV_TYPE_OUI );
12772 + wpsielen += 4;
12773 +
12774 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_SCID_WIDI_CONSUMER_SINK );
12775 + wpsielen += 2;
12776 +
12777 + if( _rtw_memcmp(pmlmepriv->sa_ext, zero_array_check, L2SDTA_SERVICE_VE_LEN) == _FALSE )
12778 + {
12779 + // Vendor Extension
12780 + _rtw_memcpy( wpsie + wpsielen, pmlmepriv->sa_ext, L2SDTA_SERVICE_VE_LEN );
12781 + wpsielen += L2SDTA_SERVICE_VE_LEN;
12782 + }
12783 + }
12784 +#endif //CONFIG_INTEL_WIDI
12785 +
12786 + // WiFi Simple Config State
12787 + // Type:
12788 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_SIMPLE_CONF_STATE );
12789 wpsielen += 2;
12790
12791 // Length:
12792 @@ -3980,7 +5007,12 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
12793 wpsielen += 2;
12794
12795 // Value:
12796 - _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
12797 + if (pwdinfo->external_uuid == 0) {
12798 + _rtw_memset( wpsie + wpsielen, 0x0, 16 );
12799 + _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
12800 + } else {
12801 + _rtw_memcpy( wpsie + wpsielen, pwdinfo->uuid, 0x10 );
12802 + }
12803 wpsielen += 0x10;
12804
12805 // Manufacturer
12806 @@ -4081,7 +5113,7 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
12807 // Value:
12808 *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( pwdinfo->supported_wps_cm );
12809 wpsielen += 2;
12810 -
12811 +
12812
12813 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *) wpsie, &pattrib->pktlen );
12814
12815 @@ -4092,10 +5124,24 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
12816 }
12817
12818 #ifdef CONFIG_WFD
12819 - wfdielen = build_probe_resp_wfd_ie(pwdinfo, pframe);
12820 - pframe += wfdielen;
12821 - pattrib->pktlen += wfdielen;
12822 -#endif //CONFIG_WFD
12823 +#ifdef CONFIG_IOCTL_CFG80211
12824 + if ( _TRUE == pwdinfo->wfd_info->wfd_enable )
12825 +#endif //CONFIG_IOCTL_CFG80211
12826 + {
12827 + wfdielen = build_probe_resp_wfd_ie(pwdinfo, pframe, 0);
12828 + pframe += wfdielen;
12829 + pattrib->pktlen += wfdielen;
12830 + }
12831 +#ifdef CONFIG_IOCTL_CFG80211
12832 + else if (pmlmepriv->wfd_probe_resp_ie != NULL && pmlmepriv->wfd_probe_resp_ie_len>0)
12833 + {
12834 + //WFD IE
12835 + _rtw_memcpy(pframe, pmlmepriv->wfd_probe_resp_ie, pmlmepriv->wfd_probe_resp_ie_len);
12836 + pattrib->pktlen += pmlmepriv->wfd_probe_resp_ie_len;
12837 + pframe += pmlmepriv->wfd_probe_resp_ie_len;
12838 + }
12839 +#endif //CONFIG_IOCTL_CFG80211
12840 +#endif //CONFIG_WFD
12841
12842 pattrib->last_txcmdsz = pattrib->pktlen;
12843
12844 @@ -4106,8 +5152,9 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
12845
12846 }
12847
12848 -void issue_probereq_p2p(_adapter *padapter)
12849 +int _issue_probereq_p2p(_adapter *padapter, u8 *da, int wait_ack)
12850 {
12851 + int ret = _FAIL;
12852 struct xmit_frame *pmgntframe;
12853 struct pkt_attrib *pattrib;
12854 unsigned char *pframe;
12855 @@ -4126,12 +5173,13 @@ void issue_probereq_p2p(_adapter *padapter)
12856 #ifdef CONFIG_WFD
12857 u32 wfdielen = 0;
12858 #endif //CONFIG_WFD
12859 -#ifdef CONFIG_IOCTL_CFG80211
12860 +
12861 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
12862 -#endif //CONFIG_IOCTL_CFG80211
12863 +
12864 +
12865 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
12866 {
12867 - return;
12868 + goto exit;
12869 }
12870
12871 //update attribute
12872 @@ -4149,9 +5197,23 @@ void issue_probereq_p2p(_adapter *padapter)
12873 fctrl = &(pwlanhdr->frame_ctl);
12874 *(fctrl) = 0;
12875
12876 - // broadcast probe request frame
12877 - _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
12878 - _rtw_memcpy(pwlanhdr->addr3, bc_addr, ETH_ALEN);
12879 + if (da) {
12880 + _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
12881 + _rtw_memcpy(pwlanhdr->addr3, da, ETH_ALEN);
12882 + } else {
12883 + if ( ( pwdinfo->p2p_info.scan_op_ch_only ) || ( pwdinfo->rx_invitereq_info.scan_op_ch_only ) )
12884 + {
12885 + // This two flags will be set when this is only the P2P client mode.
12886 + _rtw_memcpy(pwlanhdr->addr1, pwdinfo->p2p_peer_interface_addr, ETH_ALEN);
12887 + _rtw_memcpy(pwlanhdr->addr3, pwdinfo->p2p_peer_interface_addr, ETH_ALEN);
12888 + }
12889 + else
12890 + {
12891 + // broadcast probe request frame
12892 + _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
12893 + _rtw_memcpy(pwlanhdr->addr3, bc_addr, ETH_ALEN);
12894 + }
12895 + }
12896 _rtw_memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
12897
12898 SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
12899 @@ -4168,14 +5230,14 @@ void issue_probereq_p2p(_adapter *padapter)
12900 else
12901 {
12902 pframe = rtw_set_ie(pframe, _SSID_IE_, P2P_WILDCARD_SSID_LEN, pwdinfo->p2p_wildcard_ssid, &(pattrib->pktlen));
12903 - }
12904 + }
12905 // Use the OFDM rate in the P2P probe request frame. ( 6(B), 9(B), 12(B), 24(B), 36, 48, 54 )
12906 pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pwdinfo->support_rate, &pattrib->pktlen);
12907
12908 #ifdef CONFIG_IOCTL_CFG80211
12909 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
12910 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
12911 {
12912 - if(pmlmepriv->wps_probe_req_ie != NULL && pmlmepriv->p2p_probe_req_ie != NULL_CHIP_TYPE)
12913 + if( pmlmepriv->wps_probe_req_ie != NULL && pmlmepriv->p2p_probe_req_ie != NULL )
12914 {
12915 //WPS IE
12916 _rtw_memcpy(pframe, pmlmepriv->wps_probe_req_ie, pmlmepriv->wps_probe_req_ie_len);
12917 @@ -4213,6 +5275,40 @@ void issue_probereq_p2p(_adapter *padapter)
12918 // Value:
12919 wpsie[wpsielen++] = WPS_VERSION_1; // Version 1.0
12920
12921 + if( pmlmepriv->wps_probe_req_ie == NULL )
12922 + {
12923 + // UUID-E
12924 + // Type:
12925 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_UUID_E );
12926 + wpsielen += 2;
12927 +
12928 + // Length:
12929 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0010 );
12930 + wpsielen += 2;
12931 +
12932 + // Value:
12933 + if (pwdinfo->external_uuid == 0) {
12934 + _rtw_memset( wpsie + wpsielen, 0x0, 16 );
12935 + _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
12936 + } else {
12937 + _rtw_memcpy( wpsie + wpsielen, pwdinfo->uuid, 0x10 );
12938 + }
12939 + wpsielen += 0x10;
12940 +
12941 + // Config Method
12942 + // Type:
12943 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_CONF_METHOD );
12944 + wpsielen += 2;
12945 +
12946 + // Length:
12947 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0002 );
12948 + wpsielen += 2;
12949 +
12950 + // Value:
12951 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( pwdinfo->supported_wps_cm );
12952 + wpsielen += 2;
12953 + }
12954 +
12955 // Device Name
12956 // Type:
12957 *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_DEVICE_NAME );
12958 @@ -4237,7 +5333,7 @@ void issue_probereq_p2p(_adapter *padapter)
12959
12960 // Value:
12961 // Category ID
12962 - *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
12963 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
12964 wpsielen += 2;
12965
12966 // OUI
12967 @@ -4245,7 +5341,20 @@ void issue_probereq_p2p(_adapter *padapter)
12968 wpsielen += 4;
12969
12970 // Sub Category ID
12971 - *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
12972 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
12973 + wpsielen += 2;
12974 +
12975 + // Device Password ID
12976 + // Type:
12977 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_DEVICE_PWID );
12978 + wpsielen += 2;
12979 +
12980 + // Length:
12981 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0002 );
12982 + wpsielen += 2;
12983 +
12984 + // Value:
12985 + *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_DPID_REGISTRAR_SPEC ); // Registrar-specified
12986 wpsielen += 2;
12987
12988 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *) wpsie, &pattrib->pktlen );
12989 @@ -4275,12 +5384,13 @@ void issue_probereq_p2p(_adapter *padapter)
12990
12991 // Value:
12992 // Device Capability Bitmap, 1 byte
12993 - // Be able to participate in additional P2P Groups and
12994 - // support the P2P Invitation Procedure
12995 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC;
12996 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
12997
12998 // Group Capability Bitmap, 1 byte
12999 - p2pie[ p2pielen++ ] = 0x00;
13000 + if ( pwdinfo->persistent_supported )
13001 + p2pie[ p2pielen++ ] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT;
13002 + else
13003 + p2pie[ p2pielen++ ] = DMP_P2P_GRPCAP_SUPPORT;
13004
13005 // Listen Channel
13006 // Type:
13007 @@ -4292,8 +5402,8 @@ void issue_probereq_p2p(_adapter *padapter)
13008
13009 // Value:
13010 // Country String
13011 - p2pie[ p2pielen++ ] = 'U';
13012 - p2pie[ p2pielen++ ] = 'S';
13013 + p2pie[ p2pielen++ ] = 'X';
13014 + p2pie[ p2pielen++ ] = 'X';
13015
13016 // The third byte should be set to 0x04.
13017 // Described in the "Operating Channel Attribute" section.
13018 @@ -4335,8 +5445,8 @@ void issue_probereq_p2p(_adapter *padapter)
13019
13020 // Value:
13021 // Country String
13022 - p2pie[ p2pielen++ ] = 'U';
13023 - p2pie[ p2pielen++ ] = 'S';
13024 + p2pie[ p2pielen++ ] = 'X';
13025 + p2pie[ p2pielen++ ] = 'X';
13026
13027 // The third byte should be set to 0x04.
13028 // Described in the "Operating Channel Attribute" section.
13029 @@ -4349,283 +5459,702 @@ void issue_probereq_p2p(_adapter *padapter)
13030 p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // operating channel number
13031
13032 }
13033 -
13034 +
13035 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &pattrib->pktlen );
13036
13037 + if( pmlmepriv->wps_probe_req_ie != NULL )
13038 + {
13039 + //WPS IE
13040 + _rtw_memcpy(pframe, pmlmepriv->wps_probe_req_ie, pmlmepriv->wps_probe_req_ie_len);
13041 + pattrib->pktlen += pmlmepriv->wps_probe_req_ie_len;
13042 + pframe += pmlmepriv->wps_probe_req_ie_len;
13043 + }
13044 }
13045 -
13046 +
13047 #ifdef CONFIG_WFD
13048 - wfdielen = build_probe_req_wfd_ie(pwdinfo, pframe);
13049 - pframe += wfdielen;
13050 - pattrib->pktlen += wfdielen;
13051 -#endif //CONFIG_WFD
13052 +#ifdef CONFIG_IOCTL_CFG80211
13053 + if ( _TRUE == pwdinfo->wfd_info->wfd_enable )
13054 +#endif
13055 + {
13056 + wfdielen = build_probe_req_wfd_ie(pwdinfo, pframe);
13057 + pframe += wfdielen;
13058 + pattrib->pktlen += wfdielen;
13059 + }
13060 +#ifdef CONFIG_IOCTL_CFG80211
13061 + else if (pmlmepriv->wfd_probe_req_ie != NULL && pmlmepriv->wfd_probe_req_ie_len>0)
13062 + {
13063 + //WFD IE
13064 + _rtw_memcpy(pframe, pmlmepriv->wfd_probe_req_ie, pmlmepriv->wfd_probe_req_ie_len);
13065 + pattrib->pktlen += pmlmepriv->wfd_probe_req_ie_len;
13066 + pframe += pmlmepriv->wfd_probe_req_ie_len;
13067 + }
13068 +#endif //CONFIG_IOCTL_CFG80211
13069 +#endif //CONFIG_WFD
13070
13071 pattrib->last_txcmdsz = pattrib->pktlen;
13072
13073 - RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("issuing probe_req, tx_len=%d\n", pattrib->last_txcmdsz));
13074 + RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("issuing probe_req, tx_len=%d\n", pattrib->last_txcmdsz));
13075
13076 - dump_mgntframe(padapter, pmgntframe);
13077 + if (wait_ack) {
13078 + ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
13079 + } else {
13080 + dump_mgntframe(padapter, pmgntframe);
13081 + ret = _SUCCESS;
13082 + }
13083
13084 - return;
13085 +exit:
13086 + return ret;
13087 }
13088
13089 -#endif //CONFIG_P2P
13090 +inline void issue_probereq_p2p(_adapter *adapter, u8 *da)
13091 +{
13092 + _issue_probereq_p2p(adapter, da, _FALSE);
13093 +}
13094
13095 -unsigned int OnAction_public(_adapter *padapter, union recv_frame *precv_frame)
13096 +int issue_probereq_p2p_ex(_adapter *adapter, u8 *da, int try_cnt, int wait_ms)
13097 {
13098 - unsigned char *frame_body;
13099 - unsigned char category, action;
13100 - u8 *pframe = precv_frame->u.hdr.rx_data;
13101 - uint len = precv_frame->u.hdr.len;
13102 -#ifdef CONFIG_P2P
13103 - u8 *p2p_ie;
13104 - u32 p2p_ielen, wps_ielen;
13105 - struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
13106 - u8 result = P2P_STATUS_SUCCESS;
13107 - u8 empty_addr[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
13108 -#endif //CONFIG_P2P
13109 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
13110 + int ret;
13111 + int i = 0;
13112 + u32 start = rtw_get_current_time();
13113
13114 - u16 seq_ctrl = ( (precv_frame->u.hdr.attrib.seq_num&0xffff) << 4) |
13115 - (precv_frame->u.hdr.attrib.frag_num & 0xf);
13116 + do
13117 + {
13118 + ret = _issue_probereq_p2p(adapter, da, wait_ms>0?_TRUE:_FALSE);
13119
13120 + i++;
13121
13122 - //check RA matches or not
13123 - if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))//for if1, sta/ap mode
13124 - return _SUCCESS;
13125 + if (adapter->bDriverStopped || adapter->bSurpriseRemoved)
13126 + break;
13127
13128 + if(i < try_cnt && wait_ms > 0 && ret==_FAIL)
13129 + rtw_msleep_os(wait_ms);
13130
13131 - //recv_decache check
13132 - if(GetRetry(pframe))
13133 - {
13134 - if(seq_ctrl == pmlmeext->action_public_rxseq)
13135 - {
13136 - DBG_871X("recv_Action_public_decache, seq_ctrl=0x%x, rxseq=0x%x\n", seq_ctrl, pmlmeext->action_public_rxseq);
13137 + }while((i<try_cnt) && ((ret==_FAIL)||(wait_ms==0)));
13138
13139 - return _FAIL;
13140 + if (ret != _FAIL) {
13141 + ret = _SUCCESS;
13142 + #ifndef DBG_XMIT_ACK
13143 + goto exit;
13144 + #endif
13145 + }
13146 +
13147 + if (try_cnt && wait_ms) {
13148 + if (da)
13149 + DBG_871X(FUNC_ADPT_FMT" to "MAC_FMT", ch:%u%s, %d/%d in %u ms\n",
13150 + FUNC_ADPT_ARG(adapter), MAC_ARG(da), rtw_get_oper_ch(adapter),
13151 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
13152 + else
13153 + DBG_871X(FUNC_ADPT_FMT", ch:%u%s, %d/%d in %u ms\n",
13154 + FUNC_ADPT_ARG(adapter), rtw_get_oper_ch(adapter),
13155 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
13156 + }
13157 +exit:
13158 + return ret;
13159 +}
13160 +
13161 +#endif //CONFIG_P2P
13162 +
13163 +s32 rtw_action_public_decache(union recv_frame *recv_frame, s32 token)
13164 +{
13165 + _adapter *adapter = recv_frame->u.hdr.adapter;
13166 + struct mlme_ext_priv *mlmeext = &(adapter->mlmeextpriv);
13167 + u8 *frame = recv_frame->u.hdr.rx_data;
13168 + u16 seq_ctrl = ( (recv_frame->u.hdr.attrib.seq_num&0xffff) << 4) |
13169 + (recv_frame->u.hdr.attrib.frag_num & 0xf);
13170 +
13171 + if (GetRetry(frame)) {
13172 + if (token >= 0) {
13173 + if ((seq_ctrl == mlmeext->action_public_rxseq)
13174 + && (token == mlmeext->action_public_dialog_token))
13175 + {
13176 + DBG_871X(FUNC_ADPT_FMT" seq_ctrl=0x%x, rxseq=0x%x, token:%d\n",
13177 + FUNC_ADPT_ARG(adapter), seq_ctrl, mlmeext->action_public_rxseq, token);
13178 + return _FAIL;
13179 + }
13180 + } else {
13181 + if (seq_ctrl == mlmeext->action_public_rxseq) {
13182 + DBG_871X(FUNC_ADPT_FMT" seq_ctrl=0x%x, rxseq=0x%x\n",
13183 + FUNC_ADPT_ARG(adapter), seq_ctrl, mlmeext->action_public_rxseq);
13184 + return _FAIL;
13185 + }
13186 }
13187 }
13188 - pmlmeext->action_public_rxseq = seq_ctrl;
13189
13190 + mlmeext->action_public_rxseq = seq_ctrl;
13191 +
13192 + if (token >= 0)
13193 + mlmeext->action_public_dialog_token = token;
13194 +
13195 + return _SUCCESS;
13196 +}
13197 +
13198 +unsigned int on_action_public_p2p(union recv_frame *precv_frame)
13199 +{
13200 + _adapter *padapter = precv_frame->u.hdr.adapter;
13201 + u8 *pframe = precv_frame->u.hdr.rx_data;
13202 + uint len = precv_frame->u.hdr.len;
13203 + u8 *frame_body;
13204 + u8 dialogToken=0;
13205 +#ifdef CONFIG_P2P
13206 + u8 *p2p_ie;
13207 + u32 p2p_ielen, wps_ielen;
13208 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
13209 + u8 result = P2P_STATUS_SUCCESS;
13210 + u8 empty_addr[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
13211 + u8 *merged_p2pie = NULL;
13212 + u32 merged_p2p_ielen = 0;
13213 +#endif //CONFIG_P2P
13214
13215 frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
13216
13217 - category = frame_body[0];
13218 - if(category != RTW_WLAN_CATEGORY_PUBLIC)
13219 - return _SUCCESS;
13220 + dialogToken = frame_body[7];
13221
13222 - action = frame_body[ 1 ];
13223 - if ( action == ACT_PUBLIC_P2P ) // IEEE 802.11 P2P Public Action usage.
13224 - {
13225 + if (rtw_action_public_decache(precv_frame, dialogToken) == _FAIL)
13226 + return _FAIL;
13227 +
13228 #ifdef CONFIG_P2P
13229 + _cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey );
13230 +#ifdef CONFIG_IOCTL_CFG80211
13231 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211)
13232 + {
13233 + rtw_cfg80211_rx_p2p_action_public(padapter, pframe, len);
13234 + }
13235 + else
13236 +#endif //CONFIG_IOCTL_CFG80211
13237 + {
13238 // Do nothing if the driver doesn't enable the P2P function.
13239 -#ifndef CONFIG_IOCTL_CFG80211
13240 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
13241 return _SUCCESS;
13242 -#endif //CONFIG_IOCTL_CFG80211
13243
13244 - // Commented by Albert 20100908
13245 - // Low byte -> High byte is 0x50, 0x6F, 0x9A, 0x09 for P2P OUI.
13246 - // But the P2POUT is defined as 0x506F9A09 -> should use the cpu_to_be32
13247 - if ( cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ) == P2POUI )
13248 + len -= sizeof(struct rtw_ieee80211_hdr_3addr);
13249 +
13250 + switch( frame_body[ 6 ] )//OUI Subtype
13251 {
13252 -#ifdef CONFIG_IOCTL_CFG80211
13253 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
13254 + case P2P_GO_NEGO_REQ:
13255 {
13256 - rtw_cfg80211_rx_p2p_action_public(padapter, pframe, len);
13257 + DBG_871X( "[%s] Got GO Nego Req Frame\n", __FUNCTION__);
13258 + _rtw_memset( &pwdinfo->groupid_info, 0x00, sizeof( struct group_id_info ) );
13259 +
13260 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ))
13261 + {
13262 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
13263 + }
13264 +
13265 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
13266 + {
13267 + // Commented by Albert 20110526
13268 + // In this case, this means the previous nego fail doesn't be reset yet.
13269 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13270 + // Restore the previous p2p state
13271 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
13272 + DBG_871X( "[%s] Restore the previous p2p state to %d\n", __FUNCTION__, rtw_p2p_state(pwdinfo) );
13273 + }
13274 +#ifdef CONFIG_CONCURRENT_MODE
13275 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
13276 + {
13277 + _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer );
13278 + }
13279 +#endif // CONFIG_CONCURRENT_MODE
13280 +
13281 + // Commented by Kurt 20110902
13282 + //Add if statement to avoid receiving duplicate prov disc req. such that pre_p2p_state would be covered.
13283 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING))
13284 + rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
13285 +
13286 + // Commented by Kurt 20120113
13287 + // Get peer_dev_addr here if peer doesn't issue prov_disc frame.
13288 + if( _rtw_memcmp(pwdinfo->rx_prov_disc_info.peerDevAddr, empty_addr, ETH_ALEN) );
13289 + _rtw_memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN);
13290 +
13291 + result = process_p2p_group_negotation_req( pwdinfo, frame_body, len );
13292 + issue_p2p_GO_response( padapter, GetAddr2Ptr(pframe), frame_body, len, result );
13293 +#ifdef CONFIG_INTEL_WIDI
13294 + if( (padapter->mlmepriv.widi_state == INTEL_WIDI_STATE_LISTEN) && (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_WFD_CONNECTION) )
13295 + {
13296 + padapter->mlmepriv.widi_state = INTEL_WIDI_STATE_WFD_CONNECTION;
13297 + _cancel_timer_ex(&(padapter->mlmepriv.listen_timer));
13298 + intel_widi_wk_cmd(padapter, INTEL_WIDI_LISTEN_STOP_WK, NULL);
13299 + }
13300 +#endif //CONFIG_INTEL_WIDI
13301 +
13302 + // Commented by Albert 20110718
13303 + // No matter negotiating or negotiation failure, the driver should set up the restore P2P state timer.
13304 +#ifdef CONFIG_CONCURRENT_MODE
13305 + // Commented by Albert 20120107
13306 + _set_timer( &pwdinfo->restore_p2p_state_timer, 3000 );
13307 +#else // CONFIG_CONCURRENT_MODE
13308 + _set_timer( &pwdinfo->restore_p2p_state_timer, 5000 );
13309 +#endif // CONFIG_CONCURRENT_MODE
13310 + break;
13311 }
13312 - else
13313 -#endif //CONFIG_IOCTL_CFG80211
13314 + case P2P_GO_NEGO_RESP:
13315 {
13316 - len -= sizeof(struct rtw_ieee80211_hdr_3addr);
13317 -
13318 - switch( frame_body[ 6 ] )//OUI Subtype
13319 + DBG_871X( "[%s] Got GO Nego Resp Frame\n", __FUNCTION__);
13320 +
13321 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING))
13322 {
13323 - case P2P_GO_NEGO_REQ:
13324 + // Commented by Albert 20110425
13325 + // The restore timer is enabled when issuing the nego request frame of rtw_p2p_connect function.
13326 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13327 + pwdinfo->nego_req_info.benable = _FALSE;
13328 + result = process_p2p_group_negotation_resp( pwdinfo, frame_body, len);
13329 + issue_p2p_GO_confirm( pwdinfo->padapter, GetAddr2Ptr(pframe), result);
13330 + if ( P2P_STATUS_SUCCESS == result )
13331 {
13332 - DBG_8192C( "[%s] Got GO Nego Req Frame\n", __FUNCTION__);
13333 - _rtw_memset( &pwdinfo->groupid_info, 0x00, sizeof( struct group_id_info ) );
13334 -
13335 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
13336 + if ( rtw_p2p_role(pwdinfo) == P2P_ROLE_CLIENT )
13337 {
13338 - // Commented by Albert 20110526
13339 - // In this case, this means the previous nego fail doesn't be reset yet.
13340 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13341 - // Restore the previous p2p state
13342 - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
13343 - DBG_871X( "[%s] Restore the previous p2p state to %d\n", __FUNCTION__, rtw_p2p_state(pwdinfo) );
13344 - }
13345 -
13346 - // Commented by Kurt 20110902
13347 - //Add if statement to avoid receiving duplicate prov disc req. such that pre_p2p_state would be covered.
13348 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING))
13349 - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
13350 -
13351 - // Commented by Kurt 20120113
13352 - // Get peer_dev_addr here if peer doesn't issue prov_disc frame.
13353 - if( _rtw_memcmp(pwdinfo->rx_prov_disc_info.peerDevAddr, empty_addr, ETH_ALEN) );
13354 - _rtw_memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN);
13355 -
13356 - result = process_p2p_group_negotation_req( pwdinfo, frame_body, len );
13357 - issue_p2p_GO_response( padapter, GetAddr2Ptr(pframe), frame_body, len, result );
13358 - // Commented by Albert 20110718
13359 - // No matter negotiating or negotiation failure, the driver should set up the restore P2P state timer.
13360 + pwdinfo->p2p_info.operation_ch[ 0 ] = pwdinfo->peer_operating_ch;
13361 + #ifdef P2P_OP_CHECK_SOCIAL_CH
13362 + pwdinfo->p2p_info.operation_ch[ 1 ] = 1; //Check whether GO is operating in channel 1;
13363 + pwdinfo->p2p_info.operation_ch[ 2 ] = 6; //Check whether GO is operating in channel 6;
13364 + pwdinfo->p2p_info.operation_ch[ 3 ] = 11; //Check whether GO is operating in channel 11;
13365 + #endif //P2P_OP_CHECK_SOCIAL_CH
13366 + pwdinfo->p2p_info.scan_op_ch_only = 1;
13367 + _set_timer( &pwdinfo->reset_ch_sitesurvey2, P2P_RESET_SCAN_CH );
13368 + }
13369 + }
13370 +
13371 + // Reset the dialog token for group negotiation frames.
13372 + pwdinfo->negotiation_dialog_token = 1;
13373 +
13374 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
13375 + {
13376 _set_timer( &pwdinfo->restore_p2p_state_timer, 5000 );
13377 - break;
13378 }
13379 - case P2P_GO_NEGO_RESP:
13380 + }
13381 + else
13382 + {
13383 + DBG_871X( "[%s] Skipped GO Nego Resp Frame (p2p_state != P2P_STATE_GONEGO_ING)\n", __FUNCTION__);
13384 + }
13385 +
13386 + break;
13387 + }
13388 + case P2P_GO_NEGO_CONF:
13389 + {
13390 + DBG_871X( "[%s] Got GO Nego Confirm Frame\n", __FUNCTION__);
13391 + result = process_p2p_group_negotation_confirm( pwdinfo, frame_body, len);
13392 + if ( P2P_STATUS_SUCCESS == result )
13393 + {
13394 + if ( rtw_p2p_role(pwdinfo) == P2P_ROLE_CLIENT )
13395 {
13396 - DBG_871X( "[%s] Got GO Nego Resp Frame\n", __FUNCTION__);
13397 -
13398 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING))
13399 - {
13400 - // Commented by Albert 20110425
13401 - // The restore timer is enabled when issuing the nego request frame of rtw_p2p_connect function.
13402 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13403 - result = process_p2p_group_negotation_resp( pwdinfo, frame_body, len);
13404 -
13405 - issue_p2p_GO_confirm( pwdinfo->padapter, GetAddr2Ptr(pframe), result);
13406 + pwdinfo->p2p_info.operation_ch[ 0 ] = pwdinfo->peer_operating_ch;
13407 + #ifdef P2P_OP_CHECK_SOCIAL_CH
13408 + pwdinfo->p2p_info.operation_ch[ 1 ] = 1; //Check whether GO is operating in channel 1;
13409 + pwdinfo->p2p_info.operation_ch[ 2 ] = 6; //Check whether GO is operating in channel 6;
13410 + pwdinfo->p2p_info.operation_ch[ 3 ] = 11; //Check whether GO is operating in channel 11;
13411 + #endif //P2P_OP_CHECK_SOCIAL_CH
13412 + pwdinfo->p2p_info.scan_op_ch_only = 1;
13413 + _set_timer( &pwdinfo->reset_ch_sitesurvey2, P2P_RESET_SCAN_CH );
13414 + }
13415 + }
13416 + break;
13417 + }
13418 + case P2P_INVIT_REQ:
13419 + {
13420 + // Added by Albert 2010/10/05
13421 + // Received the P2P Invite Request frame.
13422 +
13423 + DBG_871X( "[%s] Got invite request frame!\n", __FUNCTION__ );
13424 + if ( (p2p_ie=rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen)) )
13425 + {
13426 + // Parse the necessary information from the P2P Invitation Request frame.
13427 + // For example: The MAC address of sending this P2P Invitation Request frame.
13428 + u32 attr_contentlen = 0;
13429 + u8 status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
13430 + struct group_id_info group_id;
13431 + u8 invitation_flag = 0;
13432
13433 - // Reset the dialog token for group negotiation frames.
13434 - pwdinfo->negotiation_dialog_token = 1;
13435 + merged_p2p_ielen = rtw_get_p2p_merged_ies_len(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_);
13436
13437 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
13438 - {
13439 - _set_timer( &pwdinfo->restore_p2p_state_timer, 5000 );
13440 - }
13441 - }
13442 - else
13443 - {
13444 - DBG_8192C( "[%s] Skipped GO Nego Resp Frame (p2p_state != P2P_STATE_GONEGO_ING)\n", __FUNCTION__);
13445 - }
13446 -
13447 - break;
13448 - }
13449 - case P2P_GO_NEGO_CONF:
13450 + merged_p2pie = rtw_malloc(merged_p2p_ielen);
13451 + if (merged_p2pie == NULL)
13452 {
13453 - DBG_8192C( "[%s] Got GO Nego Confirm Frame\n", __FUNCTION__);
13454 - process_p2p_group_negotation_confirm( pwdinfo, frame_body, len);
13455 - break;
13456 + DBG_871X( "[%s] Malloc p2p ie fail\n", __FUNCTION__);
13457 + goto exit;
13458 }
13459 - case P2P_INVIT_REQ:
13460 + _rtw_memset(merged_p2pie, 0x00, merged_p2p_ielen);
13461 +
13462 + merged_p2p_ielen = rtw_p2p_merge_ies(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, merged_p2pie);
13463 +
13464 + rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_INVITATION_FLAGS, &invitation_flag, &attr_contentlen);
13465 + if ( attr_contentlen )
13466 {
13467 - // Added by Albert 2010/10/05
13468 - // Received the P2P Invite Request frame.
13469 -
13470 - DBG_8192C( "[%s] Got invite request frame!\n", __FUNCTION__ );
13471 - if ( (p2p_ie=rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen)) )
13472 +
13473 + rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_BSSID, pwdinfo->p2p_peer_interface_addr, &attr_contentlen);
13474 + // Commented by Albert 20120510
13475 + // Copy to the pwdinfo->p2p_peer_interface_addr.
13476 + // So that the WFD UI ( or Sigma ) can get the peer interface address by using the following command.
13477 + // #> iwpriv wlan0 p2p_get peer_ifa
13478 + // After having the peer interface address, the sigma can find the correct conf file for wpa_supplicant.
13479 +
13480 + if ( attr_contentlen )
13481 + {
13482 + DBG_871X( "[%s] GO's BSSID = %.2X %.2X %.2X %.2X %.2X %.2X\n", __FUNCTION__,
13483 + pwdinfo->p2p_peer_interface_addr[0], pwdinfo->p2p_peer_interface_addr[1],
13484 + pwdinfo->p2p_peer_interface_addr[2], pwdinfo->p2p_peer_interface_addr[3],
13485 + pwdinfo->p2p_peer_interface_addr[4], pwdinfo->p2p_peer_interface_addr[5] );
13486 + }
13487 +
13488 + if ( invitation_flag & P2P_INVITATION_FLAGS_PERSISTENT )
13489 {
13490 - // Parse the necessary information from the P2P Invitation Request frame.
13491 - // For example: The MAC address of sending this P2P Invitation Request frame.
13492 - u8 groupid[ 38 ] = { 0x00 };
13493 - u32 attr_contentlen = 0;
13494 - u8 match_result = 0;
13495 -
13496 - rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen);
13497 - _rtw_memcpy( pwdinfo->p2p_peer_interface_addr, groupid, ETH_ALEN );
13498 - rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ);
13499 - DBG_871X( "[%s] peer address %.2X %.2X %.2X %.2X %.2X %.2X\n", __FUNCTION__,
13500 - groupid[0], groupid[1], groupid[2], groupid[3], groupid[4], groupid[5] );
13501 -
13502 - if ( is_matched_in_profilelist( pwdinfo->p2p_peer_interface_addr, &pwdinfo->profileinfo[ 0 ] ) )
13503 + // Re-invoke the persistent group.
13504 +
13505 + _rtw_memset( &group_id, 0x00, sizeof( struct group_id_info ) );
13506 + rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_ID, ( u8* ) &group_id, &attr_contentlen);
13507 + if ( attr_contentlen )
13508 {
13509 - match_result = 1;
13510 + if ( _rtw_memcmp( group_id.go_device_addr, myid( &padapter->eeprompriv ), ETH_ALEN ) )
13511 + {
13512 + // The p2p device sending this p2p invitation request wants this Wi-Fi device to be the persistent GO.
13513 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_GO );
13514 + rtw_p2p_set_role( pwdinfo, P2P_ROLE_GO );
13515 + status_code = P2P_STATUS_SUCCESS;
13516 + }
13517 + else
13518 + {
13519 + // The p2p device sending this p2p invitation request wants to be the persistent GO.
13520 + if ( is_matched_in_profilelist( pwdinfo->p2p_peer_interface_addr, &pwdinfo->profileinfo[ 0 ] ) )
13521 + {
13522 + u8 operatingch_info[5] = { 0x00 };
13523 +
13524 + if ( rtw_get_p2p_attr_content(merged_p2pie, merged_p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen) )
13525 + {
13526 + if( rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, (u32)operatingch_info[4] ) >= 0 )
13527 + {
13528 + // The operating channel is acceptable for this device.
13529 + pwdinfo->rx_invitereq_info.operation_ch[0]= operatingch_info[4];
13530 + #ifdef P2P_OP_CHECK_SOCIAL_CH
13531 + pwdinfo->rx_invitereq_info.operation_ch[1]= 1; //Check whether GO is operating in channel 1;
13532 + pwdinfo->rx_invitereq_info.operation_ch[2]= 6; //Check whether GO is operating in channel 6;
13533 + pwdinfo->rx_invitereq_info.operation_ch[3]= 11; //Check whether GO is operating in channel 11;
13534 + #endif //P2P_OP_CHECK_SOCIAL_CH
13535 + pwdinfo->rx_invitereq_info.scan_op_ch_only = 1;
13536 + _set_timer( &pwdinfo->reset_ch_sitesurvey, P2P_RESET_SCAN_CH );
13537 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_MATCH );
13538 + rtw_p2p_set_role( pwdinfo, P2P_ROLE_CLIENT );
13539 + status_code = P2P_STATUS_SUCCESS;
13540 + }
13541 + else
13542 + {
13543 + // The operating channel isn't supported by this device.
13544 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH );
13545 + rtw_p2p_set_role( pwdinfo, P2P_ROLE_DEVICE );
13546 + status_code = P2P_STATUS_FAIL_NO_COMMON_CH;
13547 + _set_timer( &pwdinfo->restore_p2p_state_timer, 3000 );
13548 + }
13549 + }
13550 + else
13551 + {
13552 + // Commented by Albert 20121130
13553 + // Intel will use the different P2P IE to store the operating channel information
13554 + // Workaround for Intel WiDi 3.5
13555 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_MATCH );
13556 + rtw_p2p_set_role( pwdinfo, P2P_ROLE_CLIENT );
13557 + status_code = P2P_STATUS_SUCCESS;
13558 + }
13559 + }
13560 + else
13561 + {
13562 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH );
13563 + #ifdef CONFIG_INTEL_WIDI
13564 + _rtw_memcpy( pwdinfo->p2p_peer_device_addr, group_id.go_device_addr , ETH_ALEN );
13565 + rtw_p2p_set_role( pwdinfo, P2P_ROLE_CLIENT );
13566 + #endif //CONFIG_INTEL_WIDI
13567 +
13568 + status_code = P2P_STATUS_FAIL_UNKNOWN_P2PGROUP;
13569 + }
13570 + }
13571 }
13572 else
13573 {
13574 - match_result = 0;
13575 - }
13576 -
13577 - DBG_8192C( "[%s] match_result = %d\n", __FUNCTION__, match_result );
13578 -
13579 - pwdinfo->inviteresp_info.token = frame_body[ 7 ];
13580 - issue_p2p_invitation_response( padapter, pwdinfo->p2p_peer_interface_addr, pwdinfo->inviteresp_info.token, match_result );
13581 + DBG_871X( "[%s] P2P Group ID Attribute NOT FOUND!\n", __FUNCTION__ );
13582 + status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
13583 + }
13584 }
13585 -
13586 - break;
13587 - }
13588 - case P2P_INVIT_RESP:
13589 - {
13590 - u8 attr_content = 0x00;
13591 - u32 attr_contentlen = 0;
13592 -
13593 - DBG_871X( "[%s] Got invite response frame!\n", __FUNCTION__ );
13594 - if ( (p2p_ie=rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen)) )
13595 + else
13596 {
13597 - rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen);
13598 -
13599 - if ( attr_contentlen == 1 )
13600 + // Received the invitation to join a P2P group.
13601 +
13602 + _rtw_memset( &group_id, 0x00, sizeof( struct group_id_info ) );
13603 + rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_ID, ( u8* ) &group_id, &attr_contentlen);
13604 + if ( attr_contentlen )
13605 {
13606 - DBG_871X( "[%s] Status = %d\n", __FUNCTION__, attr_content );
13607 - if ( attr_content == P2P_STATUS_SUCCESS )
13608 + if ( _rtw_memcmp( group_id.go_device_addr, myid( &padapter->eeprompriv ), ETH_ALEN ) )
13609 {
13610 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
13611 + // In this case, the GO can't be myself.
13612 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH );
13613 + status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
13614 }
13615 else
13616 {
13617 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
13618 + // The p2p device sending this p2p invitation request wants to join an existing P2P group
13619 + // Commented by Albert 2012/06/28
13620 + // In this case, this Wi-Fi device should use the iwpriv command to get the peer device address.
13621 + // The peer device address should be the destination address for the provisioning discovery request.
13622 + // Then, this Wi-Fi device should use the iwpriv command to get the peer interface address.
13623 + // The peer interface address should be the address for WPS mac address
13624 + _rtw_memcpy( pwdinfo->p2p_peer_device_addr, group_id.go_device_addr , ETH_ALEN );
13625 + rtw_p2p_set_role( pwdinfo, P2P_ROLE_CLIENT );
13626 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_JOIN );
13627 + status_code = P2P_STATUS_SUCCESS;
13628 }
13629 }
13630 else
13631 {
13632 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
13633 + DBG_871X( "[%s] P2P Group ID Attribute NOT FOUND!\n", __FUNCTION__ );
13634 + status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
13635 }
13636 }
13637 - break;
13638 }
13639 - case P2P_DEVDISC_REQ:
13640 + else
13641 + {
13642 + DBG_871X( "[%s] P2P Invitation Flags Attribute NOT FOUND!\n", __FUNCTION__ );
13643 + status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
13644 + }
13645
13646 - process_p2p_devdisc_req(pwdinfo, pframe, len);
13647 + DBG_871X( "[%s] status_code = %d\n", __FUNCTION__, status_code );
13648
13649 - break;
13650 + pwdinfo->inviteresp_info.token = frame_body[ 7 ];
13651 + issue_p2p_invitation_response( padapter, GetAddr2Ptr(pframe), pwdinfo->inviteresp_info.token, status_code );
13652 + _set_timer( &pwdinfo->restore_p2p_state_timer, 3000 );
13653 + }
13654 +#ifdef CONFIG_INTEL_WIDI
13655 + if( (padapter->mlmepriv.widi_state == INTEL_WIDI_STATE_LISTEN) && (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_WFD_CONNECTION) )
13656 + {
13657 + padapter->mlmepriv.widi_state = INTEL_WIDI_STATE_WFD_CONNECTION;
13658 + _cancel_timer_ex(&(padapter->mlmepriv.listen_timer));
13659 + intel_widi_wk_cmd(padapter, INTEL_WIDI_LISTEN_STOP_WK, NULL);
13660 + }
13661 +#endif //CONFIG_INTEL_WIDI
13662 + break;
13663 + }
13664 + case P2P_INVIT_RESP:
13665 + {
13666 + u8 attr_content = 0x00;
13667 + u32 attr_contentlen = 0;
13668 +
13669 + DBG_871X( "[%s] Got invite response frame!\n", __FUNCTION__ );
13670 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13671 + if ( (p2p_ie=rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen)) )
13672 + {
13673 + rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen);
13674 +
13675 + if ( attr_contentlen == 1 )
13676 + {
13677 + DBG_871X( "[%s] Status = %d\n", __FUNCTION__, attr_content );
13678 + pwdinfo->invitereq_info.benable = _FALSE;
13679 +
13680 + if ( attr_content == P2P_STATUS_SUCCESS )
13681 + {
13682 + if ( _rtw_memcmp( pwdinfo->invitereq_info.go_bssid, myid( &padapter->eeprompriv ), ETH_ALEN ))
13683 + {
13684 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO );
13685 + }
13686 + else
13687 + {
13688 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
13689 + }
13690 + rtw_p2p_set_state( pwdinfo, P2P_STATE_RX_INVITE_RESP_OK );
13691 + }
13692 + else
13693 + {
13694 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
13695 + rtw_p2p_set_state( pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL );
13696 + }
13697 + }
13698 + else
13699 + {
13700 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
13701 + rtw_p2p_set_state( pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL );
13702 + }
13703 + }
13704 + else
13705 + {
13706 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
13707 + rtw_p2p_set_state( pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL );
13708 + }
13709
13710 - case P2P_DEVDISC_RESP:
13711 + if ( rtw_p2p_chk_state( pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL ) )
13712 + {
13713 + _set_timer( &pwdinfo->restore_p2p_state_timer, 5000 );
13714 + }
13715 + break;
13716 + }
13717 + case P2P_DEVDISC_REQ:
13718
13719 - process_p2p_devdisc_resp(pwdinfo, pframe, len);
13720 + process_p2p_devdisc_req(pwdinfo, pframe, len);
13721
13722 - break;
13723 + break;
13724
13725 - case P2P_PROVISION_DISC_REQ:
13726 - DBG_871X( "[%s] Got Provisioning Discovery Request Frame\n", __FUNCTION__ );
13727 - process_p2p_provdisc_req(pwdinfo, pframe, len);
13728 - _rtw_memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN);
13729 + case P2P_DEVDISC_RESP:
13730
13731 - //20110902 Kurt
13732 - //Add the following statement to avoid receiving duplicate prov disc req. such that pre_p2p_state would be covered.
13733 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ))
13734 - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
13735 + process_p2p_devdisc_resp(pwdinfo, pframe, len);
13736
13737 - rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ);
13738 - _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT );
13739 - break;
13740 + break;
13741
13742 - case P2P_PROVISION_DISC_RESP:
13743 - // Commented by Albert 20110707
13744 - // Should we check the pwdinfo->tx_prov_disc_info.bsent flag here??
13745 - DBG_871X( "[%s] Got Provisioning Discovery Response Frame\n", __FUNCTION__ );
13746 - // Commented by Albert 20110426
13747 - // The restore timer is enabled when issuing the provisioing request frame in rtw_p2p_prov_disc function.
13748 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13749 - rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_RSP);
13750 - process_p2p_provdisc_resp(pwdinfo, pframe);
13751 - _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT );
13752 - break;
13753 + case P2P_PROVISION_DISC_REQ:
13754 + DBG_871X( "[%s] Got Provisioning Discovery Request Frame\n", __FUNCTION__ );
13755 + process_p2p_provdisc_req(pwdinfo, pframe, len);
13756 + _rtw_memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN);
13757
13758 + //20110902 Kurt
13759 + //Add the following statement to avoid receiving duplicate prov disc req. such that pre_p2p_state would be covered.
13760 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ))
13761 + rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
13762 +
13763 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ);
13764 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT );
13765 +#ifdef CONFIG_INTEL_WIDI
13766 + if( (padapter->mlmepriv.widi_state == INTEL_WIDI_STATE_LISTEN) && (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_WFD_CONNECTION) )
13767 + {
13768 + padapter->mlmepriv.widi_state = INTEL_WIDI_STATE_WFD_CONNECTION;
13769 + _cancel_timer_ex(&(padapter->mlmepriv.listen_timer));
13770 + intel_widi_wk_cmd(padapter, INTEL_WIDI_LISTEN_STOP_WK, NULL);
13771 }
13772 - }
13773 +#endif //CONFIG_INTEL_WIDI
13774 + break;
13775
13776 - }
13777 + case P2P_PROVISION_DISC_RESP:
13778 + // Commented by Albert 20110707
13779 + // Should we check the pwdinfo->tx_prov_disc_info.bsent flag here??
13780 + DBG_871X( "[%s] Got Provisioning Discovery Response Frame\n", __FUNCTION__ );
13781 + // Commented by Albert 20110426
13782 + // The restore timer is enabled when issuing the provisioing request frame in rtw_p2p_prov_disc function.
13783 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
13784 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_RSP);
13785 + process_p2p_provdisc_resp(pwdinfo, pframe);
13786 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT );
13787 + break;
13788 +
13789 + }
13790 + }
13791 #endif //CONFIG_P2P
13792 +
13793 +exit:
13794 +
13795 + if(merged_p2pie)
13796 + {
13797 + rtw_mfree(merged_p2pie, merged_p2p_ielen);
13798 }
13799 -
13800 +
13801 return _SUCCESS;
13802 }
13803
13804 +unsigned int on_action_public_vendor(union recv_frame *precv_frame)
13805 +{
13806 + unsigned int ret = _FAIL;
13807 + u8 *pframe = precv_frame->u.hdr.rx_data;
13808 + uint frame_len = precv_frame->u.hdr.len;
13809 + u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
13810 +
13811 + if (_rtw_memcmp(frame_body + 2, P2P_OUI, 4) == _TRUE) {
13812 + ret = on_action_public_p2p(precv_frame);
13813 + }
13814 +
13815 + return ret;
13816 +}
13817 +
13818 +unsigned int on_action_public_default(union recv_frame *precv_frame, u8 action)
13819 +{
13820 + unsigned int ret = _FAIL;
13821 + u8 *pframe = precv_frame->u.hdr.rx_data;
13822 + uint frame_len = precv_frame->u.hdr.len;
13823 + u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
13824 + u8 token;
13825 + _adapter *adapter = precv_frame->u.hdr.adapter;
13826 + int cnt = 0;
13827 + char msg[64];
13828 +
13829 + token = frame_body[2];
13830 +
13831 + if (rtw_action_public_decache(precv_frame, token) == _FAIL)
13832 + goto exit;
13833 +
13834 + #ifdef CONFIG_IOCTL_CFG80211
13835 + cnt += sprintf((msg+cnt), "%s(token:%u)", action_public_str(action), token);
13836 + rtw_cfg80211_rx_action(adapter, pframe, frame_len, msg);
13837 + #endif
13838 +
13839 + ret = _SUCCESS;
13840 +
13841 +exit:
13842 + return ret;
13843 +}
13844 +
13845 +unsigned int on_action_public(_adapter *padapter, union recv_frame *precv_frame)
13846 +{
13847 + unsigned int ret = _FAIL;
13848 + u8 *pframe = precv_frame->u.hdr.rx_data;
13849 + uint frame_len = precv_frame->u.hdr.len;
13850 + u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
13851 + u8 category, action;
13852 +
13853 + /* check RA matches or not */
13854 + if (!_rtw_memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))
13855 + goto exit;
13856 +
13857 + category = frame_body[0];
13858 + if(category != RTW_WLAN_CATEGORY_PUBLIC)
13859 + goto exit;
13860 +
13861 + action = frame_body[1];
13862 + switch (action) {
13863 + case ACT_PUBLIC_VENDOR:
13864 + ret = on_action_public_vendor(precv_frame);
13865 + break;
13866 + default:
13867 + ret = on_action_public_default(precv_frame, action);
13868 + break;
13869 + }
13870 +
13871 +exit:
13872 + return ret;
13873 +}
13874 +
13875 unsigned int OnAction_ht(_adapter *padapter, union recv_frame *precv_frame)
13876 {
13877 return _SUCCESS;
13878 }
13879
13880 +#ifdef CONFIG_IEEE80211W
13881 +unsigned int OnAction_sa_query(_adapter *padapter, union recv_frame *precv_frame)
13882 +{
13883 + u8 *pframe = precv_frame->u.hdr.rx_data;
13884 + struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
13885 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
13886 + unsigned short tid;
13887 + //Baron
13888 +
13889 + DBG_871X("OnAction_sa_query\n");
13890 +
13891 + switch (pframe[WLAN_HDR_A3_LEN+1])
13892 + {
13893 + case 0: //SA Query req
13894 + _rtw_memcpy(&tid, &pframe[WLAN_HDR_A3_LEN+2], sizeof(unsigned short));
13895 + DBG_871X("OnAction_sa_query request,action=%d, tid=%04x\n", pframe[WLAN_HDR_A3_LEN+1], tid);
13896 + issue_action_SA_Query(padapter, GetAddr2Ptr(pframe), 1, tid);
13897 + break;
13898 +
13899 + case 1: //SA Query rsp
13900 + _cancel_timer_ex(&pmlmeext->sa_query_timer);
13901 + 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]);
13902 + break;
13903 + default:
13904 + break;
13905 + }
13906 + if(0)
13907 + {
13908 + int pp;
13909 + printk("pattrib->pktlen = %d =>", pattrib->pkt_len);
13910 + for(pp=0;pp< pattrib->pkt_len; pp++)
13911 + printk(" %02x ", pframe[pp]);
13912 + printk("\n");
13913 + }
13914 +
13915 + return _SUCCESS;
13916 +}
13917 +#endif //CONFIG_IEEE80211W
13918 +
13919 unsigned int OnAction_wmm(_adapter *padapter, union recv_frame *precv_frame)
13920 {
13921 return _SUCCESS;
13922 @@ -4657,7 +6186,7 @@ unsigned int OnAction_p2p(_adapter *padapter, union recv_frame *precv_frame)
13923 return _SUCCESS;
13924
13925 #ifdef CONFIG_IOCTL_CFG80211
13926 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
13927 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
13928 {
13929 rtw_cfg80211_rx_action_p2p(padapter, pframe, len);
13930 return _SUCCESS;
13931 @@ -4665,7 +6194,7 @@ unsigned int OnAction_p2p(_adapter *padapter, union recv_frame *precv_frame)
13932 else
13933 #endif //CONFIG_IOCTL_CFG80211
13934 {
13935 - len -= sizeof(struct rtw_ieee80211_hdr_3addr);
13936 + len -= sizeof(struct rtw_ieee80211_hdr_3addr);
13937 OUI_Subtype = frame_body[5];
13938 dialogToken = frame_body[6];
13939
13940 @@ -4694,7 +6223,6 @@ unsigned int OnAction_p2p(_adapter *padapter, union recv_frame *precv_frame)
13941
13942 }
13943 }
13944 -
13945 #endif //CONFIG_P2P
13946
13947 return _SUCCESS;
13948 @@ -4728,43 +6256,53 @@ unsigned int OnAction(_adapter *padapter, union recv_frame *precv_frame)
13949
13950 unsigned int DoReserved(_adapter *padapter, union recv_frame *precv_frame)
13951 {
13952 - u8 *pframe = precv_frame->u.hdr.rx_data;
13953 - uint len = precv_frame->u.hdr.len;
13954
13955 //DBG_871X("rcvd mgt frame(%x, %x)\n", (GetFrameSubType(pframe) >> 4), *(unsigned int *)GetAddr1Ptr(pframe));
13956 return _SUCCESS;
13957 }
13958
13959 -struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv)
13960 +struct xmit_frame *_alloc_mgtxmitframe(struct xmit_priv *pxmitpriv, bool once)
13961 {
13962 - struct xmit_frame *pmgntframe;
13963 - struct xmit_buf *pxmitbuf;
13964 + struct xmit_frame *pmgntframe;
13965 + struct xmit_buf *pxmitbuf;
13966
13967 - if ((pmgntframe = rtw_alloc_xmitframe(pxmitpriv)) == NULL)
13968 - {
13969 - DBG_871X("%s, alloc xmitframe fail\n", __FUNCTION__);
13970 - return NULL;
13971 + if (once)
13972 + pmgntframe = rtw_alloc_xmitframe_once(pxmitpriv);
13973 + else
13974 + pmgntframe = rtw_alloc_xmitframe_ext(pxmitpriv);
13975 +
13976 + if (pmgntframe == NULL) {
13977 + DBG_871X(FUNC_ADPT_FMT" alloc xmitframe fail, once:%d\n", FUNC_ADPT_ARG(pxmitpriv->adapter), once);
13978 + goto exit;
13979 }
13980
13981 - if ((pxmitbuf = rtw_alloc_xmitbuf_ext(pxmitpriv)) == NULL)
13982 - {
13983 - DBG_871X("%s, alloc xmitbuf fail\n", __FUNCTION__);
13984 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
13985 - return NULL;
13986 + if ((pxmitbuf = rtw_alloc_xmitbuf_ext(pxmitpriv)) == NULL) {
13987 + DBG_871X(FUNC_ADPT_FMT" alloc xmitbuf fail\n", FUNC_ADPT_ARG(pxmitpriv->adapter));
13988 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
13989 + pmgntframe = NULL;
13990 + goto exit;
13991 }
13992
13993 pmgntframe->frame_tag = MGNT_FRAMETAG;
13994 -
13995 pmgntframe->pxmitbuf = pxmitbuf;
13996 -
13997 pmgntframe->buf_addr = pxmitbuf->pbuf;
13998 -
13999 pxmitbuf->priv_data = pmgntframe;
14000
14001 +exit:
14002 return pmgntframe;
14003
14004 }
14005
14006 +inline struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv)
14007 +{
14008 + return _alloc_mgtxmitframe(pxmitpriv, _FALSE);
14009 +}
14010 +
14011 +inline struct xmit_frame *alloc_mgtxmitframe_once(struct xmit_priv *pxmitpriv)
14012 +{
14013 + return _alloc_mgtxmitframe(pxmitpriv, _TRUE);
14014 +}
14015 +
14016
14017 /****************************************************************************
14018
14019 @@ -4772,6 +6310,15 @@ Following are some TX fuctions for WiFi MLME
14020
14021 *****************************************************************************/
14022
14023 +void update_mgnt_tx_rate(_adapter *padapter, u8 rate)
14024 +{
14025 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
14026 +
14027 + pmlmeext->tx_rate = rate;
14028 +
14029 + //DBG_871X("%s(): rate = %x\n",__FUNCTION__, rate);
14030 +}
14031 +
14032 void update_mgntframe_attrib(_adapter *padapter, struct pkt_attrib *pattrib)
14033 {
14034 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
14035 @@ -4810,1305 +6357,1051 @@ void dump_mgntframe(_adapter *padapter, struct xmit_frame *pmgntframe)
14036 {
14037 if(padapter->bSurpriseRemoved == _TRUE ||
14038 padapter->bDriverStopped == _TRUE)
14039 - return;
14040 -
14041 - padapter->HalFunc.mgnt_xmit(padapter, pmgntframe);
14042 -}
14043 -
14044 -//Commented by Kurt
14045 -#ifdef CONFIG_TDLS
14046 -void issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, struct sta_info *ptdls_sta, unsigned int power_mode)
14047 -{
14048 - struct xmit_frame *pmgntframe;
14049 - struct pkt_attrib *pattrib;
14050 - unsigned char *pframe;
14051 - struct rtw_ieee80211_hdr *pwlanhdr;
14052 - unsigned short *fctrl;
14053 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14054 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
14055 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
14056 -
14057 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14058 {
14059 + rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
14060 + rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
14061 return;
14062 }
14063
14064 - //update attribute
14065 - pattrib = &pmgntframe->attrib;
14066 - update_mgntframe_attrib(padapter, pattrib);
14067 -
14068 - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
14069 + rtw_hal_mgnt_xmit(padapter, pmgntframe);
14070 +}
14071
14072 - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
14073 - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
14074 +s32 dump_mgntframe_and_wait(_adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms)
14075 +{
14076 + s32 ret = _FAIL;
14077 + _irqL irqL;
14078 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
14079 + struct xmit_buf *pxmitbuf = pmgntframe->pxmitbuf;
14080 + struct submit_ctx sctx;
14081
14082 - fctrl = &(pwlanhdr->frame_ctl);
14083 - *(fctrl) = 0;
14084 -// SetToDs(fctrl);
14085 - if (power_mode)
14086 + if(padapter->bSurpriseRemoved == _TRUE ||
14087 + padapter->bDriverStopped == _TRUE)
14088 {
14089 - SetPwrMgt(fctrl);
14090 + rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
14091 + rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
14092 + return ret;
14093 }
14094
14095 - _rtw_memcpy(pwlanhdr->addr1, ptdls_sta->hwaddr, ETH_ALEN);
14096 - _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
14097 - _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
14098 + rtw_sctx_init(&sctx, timeout_ms);
14099 + pxmitbuf->sctx = &sctx;
14100
14101 - ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
14102 - ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
14103 - pattrib->seqnum = ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority];
14104 - SetSeqNum(pwlanhdr, pattrib->seqnum);
14105 -
14106 - SetFrameSubType(pframe, WIFI_DATA_NULL);
14107 + ret = rtw_hal_mgnt_xmit(padapter, pmgntframe);
14108
14109 - pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
14110 - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
14111 + if (ret == _SUCCESS)
14112 + ret = rtw_sctx_wait(&sctx);
14113
14114 - pattrib->last_txcmdsz = pattrib->pktlen;
14115 - dump_mgntframe(padapter, pmgntframe);
14116 + _enter_critical(&pxmitpriv->lock_sctx, &irqL);
14117 + pxmitbuf->sctx = NULL;
14118 + _exit_critical(&pxmitpriv->lock_sctx, &irqL);
14119
14120 - return;
14121 + return ret;
14122 }
14123
14124 -s32 update_tdls_attrib(_adapter *padapter, struct pkt_attrib *pattrib)
14125 +s32 dump_mgntframe_and_wait_ack(_adapter *padapter, struct xmit_frame *pmgntframe)
14126 {
14127 +#ifdef CONFIG_XMIT_ACK
14128 + s32 ret = _FAIL;
14129 + u32 timeout_ms = 500;// 500ms
14130 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
14131 + #ifdef CONFIG_CONCURRENT_MODE
14132 + if (padapter->pbuddy_adapter && !padapter->isprimary)
14133 + pxmitpriv = &(padapter->pbuddy_adapter->xmitpriv);
14134 + #endif
14135
14136 - struct sta_info *psta = NULL;
14137 - struct sta_priv *pstapriv = &padapter->stapriv;
14138 - struct security_priv *psecuritypriv = &padapter->securitypriv;
14139 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14140 - struct qos_priv *pqospriv= &pmlmepriv->qospriv;
14141 + if(padapter->bSurpriseRemoved == _TRUE ||
14142 + padapter->bDriverStopped == _TRUE)
14143 + {
14144 + rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
14145 + rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
14146 + return -1;
14147 + }
14148
14149 - s32 res=_SUCCESS;
14150 - sint bmcast;
14151 + _enter_critical_mutex(&pxmitpriv->ack_tx_mutex, NULL);
14152 + pxmitpriv->ack_tx = _TRUE;
14153
14154 - bmcast = IS_MCAST(pattrib->ra);
14155 -
14156 - psta = rtw_get_stainfo(pstapriv, pattrib->ra);
14157 - if (psta == NULL) {
14158 - res =_FAIL;
14159 - goto exit;
14160 + pmgntframe->ack_report = 1;
14161 + if (rtw_hal_mgnt_xmit(padapter, pmgntframe) == _SUCCESS) {
14162 + ret = rtw_ack_tx_wait(pxmitpriv, timeout_ms);
14163 }
14164
14165 - pattrib->mac_id = psta->mac_id;
14166 -
14167 - pattrib->psta = psta;
14168 + pxmitpriv->ack_tx = _FALSE;
14169 + _exit_critical_mutex(&pxmitpriv->ack_tx_mutex, NULL);
14170
14171 - pattrib->ack_policy = 0;
14172 - // get ether_hdr_len
14173 - pattrib->pkt_hdrlen = ETH_HLEN;//(pattrib->ether_type == 0x8100) ? (14 + 4 ): 14; //vlan tag
14174 + return ret;
14175 +#else //!CONFIG_XMIT_ACK
14176 + dump_mgntframe(padapter, pmgntframe);
14177 + rtw_msleep_os(50);
14178 + return _SUCCESS;
14179 +#endif //!CONFIG_XMIT_ACK
14180 +}
14181
14182 - if (pqospriv->qos_option && psta->qos_option) {
14183 - pattrib->priority = 1; //tdls management frame should be AC_BK
14184 - pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN;
14185 - pattrib->subtype = WIFI_QOS_DATA_TYPE;
14186 - } else {
14187 - pattrib->hdrlen = WLAN_HDR_A3_LEN;
14188 - pattrib->subtype = WIFI_DATA_TYPE;
14189 - pattrib->priority = 0;
14190 - }
14191 +int update_hidden_ssid(u8 *ies, u32 ies_len, u8 hidden_ssid_mode)
14192 +{
14193 + u8 *ssid_ie;
14194 + sint ssid_len_ori;
14195 + int len_diff = 0;
14196 +
14197 + ssid_ie = rtw_get_ie(ies, WLAN_EID_SSID, &ssid_len_ori, ies_len);
14198
14199 - if (psta->ieee8021x_blocked == _TRUE)
14200 - {
14201 - pattrib->encrypt = 0;
14202 - }
14203 - else
14204 + //DBG_871X("%s hidden_ssid_mode:%u, ssid_ie:%p, ssid_len_ori:%d\n", __FUNCTION__, hidden_ssid_mode, ssid_ie, ssid_len_ori);
14205 +
14206 + if(ssid_ie && ssid_len_ori>0)
14207 {
14208 - GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, bmcast);
14209 -
14210 - switch(psecuritypriv->dot11AuthAlgrthm)
14211 + switch(hidden_ssid_mode)
14212 {
14213 - case dot11AuthAlgrthm_Open:
14214 - case dot11AuthAlgrthm_Shared:
14215 - case dot11AuthAlgrthm_Auto:
14216 - pattrib->key_idx = (u8)psecuritypriv->dot11PrivacyKeyIndex;
14217 + case 1:
14218 + {
14219 + u8 *next_ie = ssid_ie + 2 + ssid_len_ori;
14220 + u32 remain_len = 0;
14221 +
14222 + remain_len = ies_len -(next_ie-ies);
14223 +
14224 + ssid_ie[1] = 0;
14225 + _rtw_memcpy(ssid_ie+2, next_ie, remain_len);
14226 + len_diff -= ssid_len_ori;
14227 +
14228 break;
14229 - case dot11AuthAlgrthm_8021X:
14230 - pattrib->key_idx = 0;
14231 + }
14232 + case 2:
14233 + _rtw_memset(&ssid_ie[2], 0, ssid_len_ori);
14234 break;
14235 default:
14236 - pattrib->key_idx = 0;
14237 break;
14238 }
14239 }
14240
14241 - switch (pattrib->encrypt)
14242 - {
14243 - case _WEP40_:
14244 - case _WEP104_:
14245 - pattrib->iv_len = 4;
14246 - pattrib->icv_len = 4;
14247 - break;
14248 - case _TKIP_:
14249 - pattrib->iv_len = 8;
14250 - pattrib->icv_len = 4;
14251 - if(padapter->securitypriv.busetkipkey==_FAIL)
14252 - {
14253 - res =_FAIL;
14254 - goto exit;
14255 - }
14256 - break;
14257 - case _AES_:
14258 - pattrib->iv_len = 8;
14259 - pattrib->icv_len = 8;
14260 - break;
14261 - default:
14262 - pattrib->iv_len = 0;
14263 - pattrib->icv_len = 0;
14264 - break;
14265 - }
14266 -
14267 - if (pattrib->encrypt &&
14268 - ((padapter->securitypriv.sw_encrypt == _TRUE) || (psecuritypriv->hw_decrypted == _FALSE)))
14269 - {
14270 - pattrib->bswenc = _TRUE;
14271 - } else {
14272 - pattrib->bswenc = _FALSE;
14273 - }
14274 -
14275 - //qos_en, ht_en, init rate, ,bw, ch_offset, sgi
14276 - pattrib->qos_en = psta->qos_option;
14277 - pattrib->ht_en = psta->htpriv.ht_option;
14278 - pattrib->raid = psta->raid;
14279 - pattrib->bwmode = psta->htpriv.bwmode;
14280 - pattrib->ch_offset = psta->htpriv.ch_offset;
14281 - pattrib->sgi= psta->htpriv.sgi;
14282 - pattrib->ampdu_en = _FALSE;
14283 -
14284 - if(pattrib->ht_en && psta->htpriv.ampdu_enable)
14285 - {
14286 - if(psta->htpriv.agg_enable_bitmap & BIT(pattrib->priority))
14287 - pattrib->ampdu_en = _TRUE;
14288 - }
14289 -
14290 -exit:
14291 -
14292 - return res;
14293 + return len_diff;
14294 }
14295
14296 -void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta)
14297 +void issue_beacon(_adapter *padapter)
14298 {
14299 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
14300 - struct sta_priv *pstapriv = &padapter->stapriv;
14301 + struct xmit_frame *pmgntframe;
14302 + struct pkt_attrib *pattrib;
14303 + unsigned char *pframe;
14304 + struct rtw_ieee80211_hdr *pwlanhdr;
14305 + unsigned short *fctrl;
14306 + unsigned int rate_len;
14307 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14308 +#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14309 _irqL irqL;
14310 -
14311 - //free peer sta_info
14312 - DBG_8192C("Free sta_info\n");
14313 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
14314 - ptdlsinfo->sta_cnt--;
14315 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
14316 - if( ptdlsinfo->sta_cnt < (NUM_STA - 1 ) )
14317 - {
14318 - ptdlsinfo->sta_maximum = _FALSE;
14319 - _rtw_memset( &ptdlsinfo->ss_record, 0x00, sizeof(struct tdls_ss_record) );
14320 - }
14321 - //ready to clear cam
14322 - if(ptdls_sta->cam_entry!=0){
14323 - ptdlsinfo->cam_entry_to_clear=ptdls_sta->cam_entry;
14324 - rtw_setstakey_cmd(padapter, (u8 *)ptdls_sta, _TRUE);
14325 - }
14326 -
14327 - if(ptdlsinfo->sta_cnt==0){
14328 - rtw_tdls_cmd(padapter, myid(&(padapter->eeprompriv)), TDLS_RS_RCR);
14329 - ptdlsinfo->setup_state=UN_TDLS_STATE;
14330 - }
14331 -
14332 - rtw_free_stainfo(padapter, ptdls_sta);
14333 -
14334 -}
14335 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
14336 +#endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14337 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
14338 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
14339 + WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
14340 + u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
14341 +#ifdef CONFIG_P2P
14342 + struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
14343 +#endif //CONFIG_P2P
14344
14345 -void issue_tdls_setup_req(_adapter *padapter, u8 *mac_addr)
14346 -{
14347 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
14348 - struct xmit_frame *pmgntframe;
14349 - struct pkt_attrib *pattrib;
14350 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14351 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14352 - struct sta_priv *pstapriv = &padapter->stapriv;
14353 - struct sta_info *ptdls_sta= NULL;
14354 - _irqL irqL;
14355 - static u8 dialogtoken = 0;
14356 - u32 timeout_interval= TPK_RESEND_COUNT * 1000; //retry timer should set at least 301 sec, using TPK_count counting 301 times.
14357
14358 - if(ptdlsinfo->ap_prohibited == _TRUE)
14359 - goto exit;
14360 + //DBG_871X("%s\n", __FUNCTION__);
14361
14362 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14363 {
14364 + DBG_871X("%s, alloc mgnt frame fail\n", __FUNCTION__);
14365 return;
14366 }
14367 -
14368 +#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14369 + _enter_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
14370 +#endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14371 +
14372 //update attribute
14373 pattrib = &pmgntframe->attrib;
14374 + update_mgntframe_attrib(padapter, pattrib);
14375 + pattrib->qsel = 0x10;
14376 +
14377 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
14378 +
14379 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
14380 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
14381 +
14382 +
14383 + fctrl = &(pwlanhdr->frame_ctl);
14384 + *(fctrl) = 0;
14385 +
14386 + _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
14387 + _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
14388 + _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
14389
14390 - pmgntframe->frame_tag = DATA_FRAMETAG;
14391 - pattrib->ether_type = 0x890d;
14392 - pattrib->pctrl =0;
14393 -
14394 - _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
14395 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14396 + SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
14397 + //pmlmeext->mgnt_seq++;
14398 + SetFrameSubType(pframe, WIFI_BEACON);
14399 +
14400 + pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
14401 + pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);
14402 +
14403 + if( (pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
14404 + {
14405 + //DBG_871X("ie len=%d\n", cur_network->IELength);
14406 +#ifdef CONFIG_P2P
14407 + // for P2P : Primary Device Type & Device Name
14408 + u32 wpsielen=0, insert_len=0;
14409 + u8 *wpsie=NULL;
14410 + wpsie = rtw_get_wps_ie(cur_network->IEs+_FIXED_IE_LENGTH_, cur_network->IELength-_FIXED_IE_LENGTH_, NULL, &wpsielen);
14411 +
14412 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && wpsie && wpsielen>0)
14413 + {
14414 + uint wps_offset, remainder_ielen;
14415 + u8 *premainder_ie, *pframe_wscie;
14416 +
14417 + wps_offset = (uint)(wpsie - cur_network->IEs);
14418
14419 - _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
14420 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14421 + premainder_ie = wpsie + wpsielen;
14422
14423 - update_tdls_attrib(padapter, pattrib);
14424 + remainder_ielen = cur_network->IELength - wps_offset - wpsielen;
14425
14426 - //init peer sta_info
14427 - ptdls_sta = rtw_get_stainfo(pstapriv, mac_addr);
14428 - if(ptdls_sta==NULL)
14429 - {
14430 - ptdls_sta = rtw_alloc_stainfo(pstapriv, mac_addr);
14431 - if(ptdls_sta)
14432 - {
14433 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
14434 - ptdlsinfo->sta_cnt++;
14435 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
14436 - if( ptdlsinfo->sta_cnt == (NUM_STA - 1) )
14437 +#ifdef CONFIG_IOCTL_CFG80211
14438 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
14439 {
14440 - ptdlsinfo->sta_maximum = _TRUE;
14441 + if(pmlmepriv->wps_beacon_ie && pmlmepriv->wps_beacon_ie_len>0)
14442 + {
14443 + _rtw_memcpy(pframe, cur_network->IEs, wps_offset);
14444 + pframe += wps_offset;
14445 + pattrib->pktlen += wps_offset;
14446 +
14447 + _rtw_memcpy(pframe, pmlmepriv->wps_beacon_ie, pmlmepriv->wps_beacon_ie_len);
14448 + pframe += pmlmepriv->wps_beacon_ie_len;
14449 + pattrib->pktlen += pmlmepriv->wps_beacon_ie_len;
14450 +
14451 + //copy remainder_ie to pframe
14452 + _rtw_memcpy(pframe, premainder_ie, remainder_ielen);
14453 + pframe += remainder_ielen;
14454 + pattrib->pktlen += remainder_ielen;
14455 + }
14456 + else
14457 + {
14458 + _rtw_memcpy(pframe, cur_network->IEs, cur_network->IELength);
14459 + pframe += cur_network->IELength;
14460 + pattrib->pktlen += cur_network->IELength;
14461 + }
14462 }
14463 - }
14464 - else
14465 - {
14466 - rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
14467 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14468 - goto exit;
14469 - }
14470 - }
14471 -
14472 - if(ptdls_sta){
14473 - ptdls_sta->tdls_sta_state |= TDLS_RESPONDER_STATE;
14474 - //for tdls; ptdls_sta->aid is used to fill dialogtoken
14475 - ptdls_sta->dialog = dialogtoken;
14476 - dialogtoken = (dialogtoken+1)%256;
14477 - ptdls_sta->TDLS_PeerKey_Lifetime = timeout_interval;
14478 - _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME );
14479 - }
14480 + else
14481 +#endif //CONFIG_IOCTL_CFG80211
14482 + {
14483 + pframe_wscie = pframe + wps_offset;
14484 + _rtw_memcpy(pframe, cur_network->IEs, wps_offset+wpsielen);
14485 + pframe += (wps_offset + wpsielen);
14486 + pattrib->pktlen += (wps_offset + wpsielen);
14487
14488 - pattrib->qsel=pattrib->priority;
14489 - if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_REQUEST) !=_SUCCESS ){
14490 - rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
14491 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14492 - goto exit;
14493 - }
14494 - rtw_dump_xframe(padapter, pmgntframe);
14495 + //now pframe is end of wsc ie, insert Primary Device Type & Device Name
14496 + // Primary Device Type
14497 + // Type:
14498 + *(u16*) ( pframe + insert_len) = cpu_to_be16( WPS_ATTR_PRIMARY_DEV_TYPE );
14499 + insert_len += 2;
14500 +
14501 + // Length:
14502 + *(u16*) ( pframe + insert_len ) = cpu_to_be16( 0x0008 );
14503 + insert_len += 2;
14504 +
14505 + // Value:
14506 + // Category ID
14507 + *(u16*) ( pframe + insert_len ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
14508 + insert_len += 2;
14509
14510 -exit:
14511 + // OUI
14512 + *(u32*) ( pframe + insert_len ) = cpu_to_be32( WPSOUI );
14513 + insert_len += 4;
14514
14515 - return;
14516 -}
14517 + // Sub Category ID
14518 + *(u16*) ( pframe + insert_len ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
14519 + insert_len += 2;
14520
14521 -void issue_tdls_teardown(_adapter *padapter, u8 *mac_addr)
14522 -{
14523 - struct xmit_frame *pmgntframe;
14524 - struct pkt_attrib *pattrib;
14525 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14526 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14527 - struct sta_priv *pstapriv = &padapter->stapriv;
14528 - struct sta_info *ptdls_sta=NULL;
14529 - _irqL irqL;
14530
14531 - ptdls_sta = rtw_get_stainfo(pstapriv, mac_addr);
14532 - if(ptdls_sta==NULL){
14533 - DBG_8192C("issue tdls teardown unsuccessful\n");
14534 - return;
14535 - }else{
14536 - ptdls_sta->tdls_sta_state=UN_TDLS_STATE;
14537 - }
14538 + // Device Name
14539 + // Type:
14540 + *(u16*) ( pframe + insert_len ) = cpu_to_be16( WPS_ATTR_DEVICE_NAME );
14541 + insert_len += 2;
14542
14543 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14544 - {
14545 - return;
14546 - }
14547 -
14548 - //update attribute
14549 - pattrib = &pmgntframe->attrib;
14550 + // Length:
14551 + *(u16*) ( pframe + insert_len ) = cpu_to_be16( pwdinfo->device_name_len );
14552 + insert_len += 2;
14553
14554 - pmgntframe->frame_tag = DATA_FRAMETAG;
14555 - pattrib->ether_type = 0x890d;
14556 - pattrib->pctrl =0;
14557 + // Value:
14558 + _rtw_memcpy( pframe + insert_len, pwdinfo->device_name, pwdinfo->device_name_len );
14559 + insert_len += pwdinfo->device_name_len;
14560
14561 - _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
14562 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14563
14564 - _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
14565 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14566 + //update wsc ie length
14567 + *(pframe_wscie+1) = (wpsielen -2) + insert_len;
14568
14569 - update_tdls_attrib(padapter, pattrib);
14570 - pattrib->qsel=pattrib->priority;
14571 - if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_TEARDOWN) != _SUCCESS) {
14572 - rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
14573 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14574 - goto exit;
14575 - }
14576 - rtw_dump_xframe(padapter, pmgntframe);
14577 + //pframe move to end
14578 + pframe+=insert_len;
14579 + pattrib->pktlen += insert_len;
14580
14581 - if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){
14582 - ptdls_sta->option =3;
14583 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
14584 - }
14585 -
14586 - if( ptdls_sta->timer_flag == 1 )
14587 - {
14588 - _enter_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);
14589 - ptdls_sta->timer_flag = 2;
14590 - _exit_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);
14591 - }
14592 - else
14593 - rtw_tdls_cmd(padapter, mac_addr, TDLS_FREE_STA );
14594 + //copy remainder_ie to pframe
14595 + _rtw_memcpy(pframe, premainder_ie, remainder_ielen);
14596 + pframe += remainder_ielen;
14597 + pattrib->pktlen += remainder_ielen;
14598 + }
14599 + }
14600 + else
14601 +#endif //CONFIG_P2P
14602 + {
14603 + int len_diff;
14604 + _rtw_memcpy(pframe, cur_network->IEs, cur_network->IELength);
14605 + len_diff = update_hidden_ssid(
14606 + pframe+_BEACON_IE_OFFSET_
14607 + , cur_network->IELength-_BEACON_IE_OFFSET_
14608 + , pmlmeinfo->hidden_ssid_mode
14609 + );
14610 + pframe += (cur_network->IELength+len_diff);
14611 + pattrib->pktlen += (cur_network->IELength+len_diff);
14612 + }
14613
14614 + {
14615 + u8 *wps_ie;
14616 + uint wps_ielen;
14617 + u8 sr = 0;
14618 + wps_ie = rtw_get_wps_ie(pmgntframe->buf_addr+TXDESC_OFFSET+sizeof (struct rtw_ieee80211_hdr_3addr)+_BEACON_IE_OFFSET_,
14619 + pattrib->pktlen-sizeof (struct rtw_ieee80211_hdr_3addr)-_BEACON_IE_OFFSET_, NULL, &wps_ielen);
14620 + if (wps_ie && wps_ielen>0) {
14621 + rtw_get_wps_attr_content(wps_ie, wps_ielen, WPS_ATTR_SELECTED_REGISTRAR, (u8*)(&sr), NULL);
14622 + }
14623 + if (sr != 0)
14624 + set_fwstate(pmlmepriv, WIFI_UNDER_WPS);
14625 + else
14626 + _clr_fwstate_(pmlmepriv, WIFI_UNDER_WPS);
14627 + }
14628
14629 -exit:
14630 +#ifdef CONFIG_P2P
14631 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
14632 + {
14633 + u32 len;
14634 +#ifdef CONFIG_IOCTL_CFG80211
14635 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
14636 + {
14637 + len = pmlmepriv->p2p_beacon_ie_len;
14638 + if(pmlmepriv->p2p_beacon_ie && len>0)
14639 + _rtw_memcpy(pframe, pmlmepriv->p2p_beacon_ie, len);
14640 + }
14641 + else
14642 +#endif //CONFIG_IOCTL_CFG80211
14643 + {
14644 + len = build_beacon_p2p_ie(pwdinfo, pframe);
14645 + }
14646
14647 - return;
14648 -}
14649 + pframe += len;
14650 + pattrib->pktlen += len;
14651 +#ifdef CONFIG_WFD
14652 +#ifdef CONFIG_IOCTL_CFG80211
14653 + if(_TRUE == pwdinfo->wfd_info->wfd_enable)
14654 +#endif //CONFIG_IOCTL_CFG80211
14655 + {
14656 + len = build_beacon_wfd_ie( pwdinfo, pframe );
14657 + }
14658 +#ifdef CONFIG_IOCTL_CFG80211
14659 + else
14660 + {
14661 + len = 0;
14662 + if(pmlmepriv->wfd_beacon_ie && pmlmepriv->wfd_beacon_ie_len>0)
14663 + {
14664 + len = pmlmepriv->wfd_beacon_ie_len;
14665 + _rtw_memcpy(pframe, pmlmepriv->wfd_beacon_ie, len);
14666 + }
14667 + }
14668 +#endif //CONFIG_IOCTL_CFG80211
14669 + pframe += len;
14670 + pattrib->pktlen += len;
14671 +#endif //CONFIG_WFD
14672 + }
14673 +#endif //CONFIG_P2P
14674 +
14675 + goto _issue_bcn;
14676
14677 -void issue_tdls_dis_req(_adapter *padapter, u8 *mac_addr)
14678 -{
14679 - struct xmit_frame *pmgntframe;
14680 - struct pkt_attrib *pattrib;
14681 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14682 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14683 - u8 baddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
14684 -
14685 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14686 - {
14687 - return;
14688 }
14689 -
14690 - //update attribute
14691 - pattrib = &pmgntframe->attrib;
14692
14693 - pmgntframe->frame_tag = DATA_FRAMETAG;
14694 - pattrib->ether_type = 0x890d;
14695 - pattrib->pctrl =0;
14696 + //below for ad-hoc mode
14697
14698 - if(mac_addr == NULL)
14699 - _rtw_memcpy(pattrib->dst, baddr, ETH_ALEN);
14700 - else
14701 - _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
14702 -
14703 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14704 + //timestamp will be inserted by hardware
14705 + pframe += 8;
14706 + pattrib->pktlen += 8;
14707
14708 - _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
14709 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14710 + // beacon interval: 2 bytes
14711
14712 - update_tdls_attrib(padapter, pattrib);
14713 - pattrib->qsel=pattrib->priority;
14714 - if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_DISCOVERY_REQUEST) != _SUCCESS) {
14715 - rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
14716 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14717 - goto exit;
14718 - }
14719 - rtw_dump_xframe(padapter, pmgntframe);
14720 - DBG_8192C("issue tdls dis req\n");
14721 + _rtw_memcpy(pframe, (unsigned char *)(rtw_get_beacon_interval_from_ie(cur_network->IEs)), 2);
14722
14723 -exit:
14724 + pframe += 2;
14725 + pattrib->pktlen += 2;
14726
14727 - return;
14728 -}
14729 + // capability info: 2 bytes
14730
14731 -void issue_tdls_setup_rsp(_adapter *padapter, union recv_frame *precv_frame)
14732 -{
14733 - struct xmit_frame *pmgntframe;
14734 - struct pkt_attrib *pattrib;
14735 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14736 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
14737 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
14738 - struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
14739 - _irqL irqL;
14740 -
14741 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14742 - {
14743 - return;
14744 - }
14745 -
14746 - //update attribute
14747 - pattrib = &pmgntframe->attrib;
14748 -
14749 - pmgntframe->frame_tag = DATA_FRAMETAG;
14750 - pattrib->ether_type = 0x890d;
14751 - pattrib->pctrl =0;
14752 + _rtw_memcpy(pframe, (unsigned char *)(rtw_get_capability_from_ie(cur_network->IEs)), 2);
14753
14754 - _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
14755 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14756 + pframe += 2;
14757 + pattrib->pktlen += 2;
14758
14759 - _rtw_memcpy(pattrib->ra, rx_pkt_pattrib->bssid, ETH_ALEN);
14760 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14761 + // SSID
14762 + pframe = rtw_set_ie(pframe, _SSID_IE_, cur_network->Ssid.SsidLength, cur_network->Ssid.Ssid, &pattrib->pktlen);
14763
14764 - update_tdls_attrib(padapter, pattrib);
14765 - pattrib->qsel=pattrib->priority;
14766 - if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_RESPONSE) != _SUCCESS) {
14767 - rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
14768 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14769 - goto exit;
14770 - }
14771 - rtw_dump_xframe(padapter, pmgntframe);
14772 + // supported rates...
14773 + rate_len = rtw_get_rateset_len(cur_network->SupportedRates);
14774 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, ((rate_len > 8)? 8: rate_len), cur_network->SupportedRates, &pattrib->pktlen);
14775
14776 -exit:
14777 + // DS parameter set
14778 + pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&(cur_network->Configuration.DSConfig), &pattrib->pktlen);
14779
14780 - return;
14781 + //if( (pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)
14782 + {
14783 + u8 erpinfo=0;
14784 + u32 ATIMWindow;
14785 + // IBSS Parameter Set...
14786 + //ATIMWindow = cur->Configuration.ATIMWindow;
14787 + ATIMWindow = 0;
14788 + pframe = rtw_set_ie(pframe, _IBSS_PARA_IE_, 2, (unsigned char *)(&ATIMWindow), &pattrib->pktlen);
14789
14790 -}
14791 + //ERP IE
14792 + pframe = rtw_set_ie(pframe, _ERPINFO_IE_, 1, &erpinfo, &pattrib->pktlen);
14793 + }
14794
14795 -void issue_tdls_setup_cfm(_adapter *padapter, union recv_frame *precv_frame)
14796 -{
14797 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
14798 - struct xmit_frame *pmgntframe;
14799 - struct pkt_attrib *pattrib;
14800 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14801 - struct sta_info *ptdls_sta=NULL;
14802 - _irqL irqL;
14803
14804 - struct rx_pkt_attrib *rx_pkt_pattrib = & precv_frame->u.hdr.attrib;
14805 -
14806 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14807 + // EXTERNDED SUPPORTED RATE
14808 + if (rate_len > 8)
14809 {
14810 - return;
14811 + pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, (rate_len - 8), (cur_network->SupportedRates + 8), &pattrib->pktlen);
14812 }
14813 -
14814 - //update attribute
14815 - pattrib = &pmgntframe->attrib;
14816
14817 - pmgntframe->frame_tag = DATA_FRAMETAG;
14818 - pattrib->ether_type = 0x890d;
14819 - pattrib->pctrl =0;
14820
14821 - _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
14822 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14823 + //todo:HT for adhoc
14824
14825 - _rtw_memcpy(pattrib->ra, rx_pkt_pattrib->bssid, ETH_ALEN);
14826 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14827 +_issue_bcn:
14828
14829 - update_tdls_attrib(padapter, pattrib);
14830 - pattrib->qsel=pattrib->priority;
14831 - if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_CONFIRM) != _SUCCESS) {
14832 - rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
14833 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14834 - goto exit;
14835 - }
14836 +#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14837 + pmlmepriv->update_bcn = _FALSE;
14838 +
14839 + _exit_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
14840 +#endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14841
14842 - rtw_dump_xframe(padapter, pmgntframe);
14843 + if ((pattrib->pktlen + TXDESC_SIZE) > 512)
14844 + {
14845 + DBG_871X("beacon frame too large\n");
14846 + return;
14847 + }
14848 +
14849 + pattrib->last_txcmdsz = pattrib->pktlen;
14850
14851 -exit:
14852 + //DBG_871X("issue bcn_sz=%d\n", pattrib->last_txcmdsz);
14853
14854 - return;
14855 + dump_mgntframe(padapter, pmgntframe);
14856
14857 }
14858
14859 -//TDLS Discovery Response frame is a management action frame
14860 -void issue_tdls_dis_rsp(_adapter *padapter, union recv_frame *precv_frame, u8 dialog)
14861 +void issue_probersp(_adapter *padapter, unsigned char *da, u8 is_valid_p2p_probereq)
14862 {
14863 - struct xmit_frame *pmgntframe;
14864 - struct pkt_attrib *pattrib;
14865 - unsigned char *pframe;
14866 + struct xmit_frame *pmgntframe;
14867 + struct pkt_attrib *pattrib;
14868 + unsigned char *pframe;
14869 struct rtw_ieee80211_hdr *pwlanhdr;
14870 - unsigned short *fctrl;
14871 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14872 + unsigned short *fctrl;
14873 + unsigned char *mac, *bssid;
14874 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14875 +#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14876 + u8 *pwps_ie;
14877 + uint wps_ielen;
14878 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14879 +#endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14880 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
14881 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
14882 + WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
14883 + unsigned int rate_len;
14884 +#ifdef CONFIG_P2P
14885 + struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
14886 +#ifdef CONFIG_WFD
14887 + u32 wfdielen = 0;
14888 +#endif //CONFIG_WFD
14889 +#endif //CONFIG_P2P
14890
14891 - struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
14892 + //DBG_871X("%s\n", __FUNCTION__);
14893
14894 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14895 {
14896 + DBG_871X("%s, alloc mgnt frame fail\n", __FUNCTION__);
14897 return;
14898 }
14899
14900 +
14901 //update attribute
14902 pattrib = &pmgntframe->attrib;
14903 - update_mgntframe_attrib(padapter, pattrib);
14904 -
14905 + update_mgntframe_attrib(padapter, pattrib);
14906 +
14907 _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
14908 -
14909 +
14910 pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
14911 - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
14912 -
14913 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
14914 +
14915 + mac = myid(&(padapter->eeprompriv));
14916 + bssid = cur_network->MacAddress;
14917 +
14918 fctrl = &(pwlanhdr->frame_ctl);
14919 *(fctrl) = 0;
14920 + _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
14921 + _rtw_memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
14922 + _rtw_memcpy(pwlanhdr->addr3, bssid, ETH_ALEN);
14923
14924 - // unicast probe request frame
14925 - _rtw_memcpy(pwlanhdr->addr1, rx_pkt_pattrib->src, ETH_ALEN);
14926 - _rtw_memcpy(pattrib->dst, pwlanhdr->addr1, ETH_ALEN);
14927 -
14928 - _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
14929 - _rtw_memcpy(pattrib->src, pwlanhdr->addr2, ETH_ALEN);
14930 -
14931 - _rtw_memcpy(pwlanhdr->addr3, rx_pkt_pattrib->bssid, ETH_ALEN);
14932 - _rtw_memcpy(pattrib->ra, pwlanhdr->addr3, ETH_ALEN);
14933 -
14934 SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
14935 pmlmeext->mgnt_seq++;
14936 - SetFrameSubType(pframe, WIFI_ACTION);
14937 -
14938 - pframe += sizeof (struct rtw_ieee80211_hdr_3addr);
14939 - pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);
14940 + SetFrameSubType(fctrl, WIFI_PROBERSP);
14941
14942 - rtw_tdls_dis_rsp_fr(padapter, pmgntframe, pframe, dialog);
14943 -
14944 - pattrib->nr_frags = 1;
14945 - pattrib->last_txcmdsz = pattrib->pktlen;
14946 -
14947 - dump_mgntframe(padapter, pmgntframe);
14948 -
14949 - return;
14950 -}
14951 + pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr);
14952 + pattrib->pktlen = pattrib->hdrlen;
14953 + pframe += pattrib->hdrlen;
14954
14955 -void issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *ptdls_sta)
14956 -{
14957 - struct xmit_frame *pmgntframe;
14958 - struct pkt_attrib *pattrib;
14959 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
14960 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
14961
14962 - static u8 dialogtoken=0;
14963 + if(cur_network->IELength>MAX_IE_SZ)
14964 + return;
14965
14966 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
14967 +#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
14968 + if( (pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
14969 {
14970 - return;
14971 - }
14972 + pwps_ie = rtw_get_wps_ie(cur_network->IEs+_FIXED_IE_LENGTH_, cur_network->IELength-_FIXED_IE_LENGTH_, NULL, &wps_ielen);
14973
14974 - //update attribute
14975 - pattrib = &pmgntframe->attrib;
14976 -
14977 - pmgntframe->frame_tag = DATA_FRAMETAG;
14978 - pattrib->ether_type = 0x890d;
14979 - pattrib->pctrl =0;
14980 -
14981 - _rtw_memcpy(pattrib->dst, ptdls_sta->hwaddr, ETH_ALEN);
14982 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
14983 -
14984 - _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
14985 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
14986 -
14987 - //for tdls; pattrib->nr_frags is used to fill dialogtoken
14988 - ptdls_sta->dialog = dialogtoken;
14989 - dialogtoken = (dialogtoken+1)%256;
14990 - //PTI frame's priority should be AC_VO
14991 - pattrib->priority = 7;
14992 -
14993 - update_tdls_attrib(padapter, pattrib);
14994 - pattrib->qsel=pattrib->priority;
14995 - if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_PEER_TRAFFIC_INDICATION) != _SUCCESS) {
14996 - rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
14997 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
14998 - goto exit;
14999 - }
15000 - rtw_dump_xframe(padapter, pmgntframe);
15001 + //inerset & update wps_probe_resp_ie
15002 + if((pmlmepriv->wps_probe_resp_ie!=NULL) && pwps_ie && (wps_ielen>0))
15003 + {
15004 + uint wps_offset, remainder_ielen;
15005 + u8 *premainder_ie;
15006
15007 -exit:
15008 + wps_offset = (uint)(pwps_ie - cur_network->IEs);
15009
15010 - return;
15011 -}
15012 + premainder_ie = pwps_ie + wps_ielen;
15013
15014 -void issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr)
15015 -{
15016 - struct xmit_frame *pmgntframe;
15017 - struct pkt_attrib *pattrib;
15018 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
15019 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
15020 + remainder_ielen = cur_network->IELength - wps_offset - wps_ielen;
15021
15022 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
15023 - {
15024 - return;
15025 - }
15026 -
15027 - //update attribute
15028 - pattrib = &pmgntframe->attrib;
15029 + _rtw_memcpy(pframe, cur_network->IEs, wps_offset);
15030 + pframe += wps_offset;
15031 + pattrib->pktlen += wps_offset;
15032
15033 - pmgntframe->frame_tag = DATA_FRAMETAG;
15034 - pattrib->ether_type = 0x890d;
15035 - pattrib->pctrl =0;
15036 + wps_ielen = (uint)pmlmepriv->wps_probe_resp_ie[1];//to get ie data len
15037 + if((wps_offset+wps_ielen+2)<=MAX_IE_SZ)
15038 + {
15039 + _rtw_memcpy(pframe, pmlmepriv->wps_probe_resp_ie, wps_ielen+2);
15040 + pframe += wps_ielen+2;
15041 + pattrib->pktlen += wps_ielen+2;
15042 + }
15043
15044 - _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
15045 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
15046 + if((wps_offset+wps_ielen+2+remainder_ielen)<=MAX_IE_SZ)
15047 + {
15048 + _rtw_memcpy(pframe, premainder_ie, remainder_ielen);
15049 + pframe += remainder_ielen;
15050 + pattrib->pktlen += remainder_ielen;
15051 + }
15052 + }
15053 + else
15054 + {
15055 + _rtw_memcpy(pframe, cur_network->IEs, cur_network->IELength);
15056 + pframe += cur_network->IELength;
15057 + pattrib->pktlen += cur_network->IELength;
15058 + }
15059
15060 - _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
15061 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
15062 + /* retrieve SSID IE from cur_network->Ssid */
15063 + {
15064 + u8 *ssid_ie;
15065 + sint ssid_ielen;
15066 + sint ssid_ielen_diff;
15067 + u8 buf[MAX_IE_SZ];
15068 + u8 *ies = pmgntframe->buf_addr+TXDESC_OFFSET+sizeof(struct rtw_ieee80211_hdr_3addr);
15069
15070 - update_tdls_attrib(padapter, pattrib);
15071 + ssid_ie = rtw_get_ie(ies+_FIXED_IE_LENGTH_, _SSID_IE_, &ssid_ielen,
15072 + (pframe-ies)-_FIXED_IE_LENGTH_);
15073
15074 - pattrib->qsel=pattrib->priority;
15075 - if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_CHANNEL_SWITCH_REQUEST) !=_SUCCESS ){
15076 - rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
15077 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
15078 - goto exit;
15079 - }
15080 - rtw_dump_xframe(padapter, pmgntframe);
15081 + ssid_ielen_diff = cur_network->Ssid.SsidLength - ssid_ielen;
15082
15083 -exit:
15084 + if (ssid_ie && cur_network->Ssid.SsidLength) {
15085 + uint remainder_ielen;
15086 + u8 *remainder_ie;
15087 + remainder_ie = ssid_ie+2;
15088 + remainder_ielen = (pframe-remainder_ie);
15089
15090 - return;
15091 -}
15092 + LOG_LEVEL(_drv_warning_, FUNC_ADPT_FMT" remainder_ielen > MAX_IE_SZ\n", FUNC_ADPT_ARG(padapter));
15093 + if (remainder_ielen > MAX_IE_SZ) {
15094 + remainder_ielen = MAX_IE_SZ;
15095 + }
15096
15097 -void issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr)
15098 -{
15099 - struct xmit_frame *pmgntframe;
15100 - struct pkt_attrib *pattrib;
15101 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
15102 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
15103 + _rtw_memcpy(buf, remainder_ie, remainder_ielen);
15104 + _rtw_memcpy(remainder_ie+ssid_ielen_diff, buf, remainder_ielen);
15105 + *(ssid_ie+1) = cur_network->Ssid.SsidLength;
15106 + _rtw_memcpy(ssid_ie+2, cur_network->Ssid.Ssid, cur_network->Ssid.SsidLength);
15107
15108 - _irqL irqL;
15109 -
15110 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
15111 + pframe += ssid_ielen_diff;
15112 + pattrib->pktlen += ssid_ielen_diff;
15113 + }
15114 + }
15115 + }
15116 + else
15117 +#endif
15118 {
15119 - return;
15120 - }
15121
15122 - //update attribute
15123 - pattrib = &pmgntframe->attrib;
15124 + //timestamp will be inserted by hardware
15125 + pframe += 8;
15126 + pattrib->pktlen += 8;
15127
15128 - pmgntframe->frame_tag = DATA_FRAMETAG;
15129 - pattrib->ether_type = 0x890d;
15130 - pattrib->pctrl =0;
15131 + // beacon interval: 2 bytes
15132
15133 - _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
15134 - _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
15135 + _rtw_memcpy(pframe, (unsigned char *)(rtw_get_beacon_interval_from_ie(cur_network->IEs)), 2);
15136
15137 - _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
15138 - _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
15139 + pframe += 2;
15140 + pattrib->pktlen += 2;
15141
15142 - update_tdls_attrib(padapter, pattrib);
15143 + // capability info: 2 bytes
15144
15145 - pattrib->qsel=pattrib->priority;
15146 -/*
15147 - _enter_critical_bh(&pxmitpriv->lock, &irqL);
15148 - if(xmitframe_enqueue_for_tdls_sleeping_sta(padapter, pmgntframe)==_TRUE){
15149 - _exit_critical_bh(&pxmitpriv->lock, &irqL);
15150 - return _FALSE;
15151 - }
15152 -*/
15153 - if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_CHANNEL_SWITCH_RESPONSE) !=_SUCCESS ){
15154 - rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
15155 - rtw_free_xmitframe_ex(pxmitpriv, pmgntframe);
15156 - goto exit;
15157 - }
15158 - rtw_dump_xframe(padapter, pmgntframe);
15159 + _rtw_memcpy(pframe, (unsigned char *)(rtw_get_capability_from_ie(cur_network->IEs)), 2);
15160
15161 -exit:
15162 + pframe += 2;
15163 + pattrib->pktlen += 2;
15164
15165 - return;
15166 -}
15167 + //below for ad-hoc mode
15168
15169 -sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame)
15170 -{
15171 - struct sta_info *ptdls_sta = NULL;
15172 - struct recv_priv *precvpriv = &(adapter->recvpriv);
15173 - u8 *ptr = precv_frame->u.hdr.rx_data, *psa;
15174 - struct rx_pkt_attrib *pattrib = &(precv_frame->u.hdr.attrib);
15175 - struct tdls_info *ptdlsinfo = &(adapter->tdlsinfo);
15176 - u8 empty_addr[ETH_ALEN] = { 0x00 };
15177 + // SSID
15178 + pframe = rtw_set_ie(pframe, _SSID_IE_, cur_network->Ssid.SsidLength, cur_network->Ssid.Ssid, &pattrib->pktlen);
15179
15180 - psa = get_sa(ptr);
15181 - ptdls_sta = rtw_get_stainfo(&(adapter->stapriv), psa);
15182 + // supported rates...
15183 + rate_len = rtw_get_rateset_len(cur_network->SupportedRates);
15184 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, ((rate_len > 8)? 8: rate_len), cur_network->SupportedRates, &pattrib->pktlen);
15185
15186 - if(ptdls_sta != NULL)
15187 - {
15188 - ptdls_sta->tdls_sta_state |= TDLS_ALIVE_STATE;
15189 + // DS parameter set
15190 + pframe =rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&(cur_network->Configuration.DSConfig), &pattrib->pktlen);
15191
15192 - //Record the tdls sta with lowest signal strength
15193 - if( (ptdlsinfo->sta_maximum == _TRUE) && (ptdls_sta->alive_count >= 1) )
15194 + if( (pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)
15195 {
15196 - printk("%s %d\n", __FUNCTION__, __LINE__);
15197 - if( _rtw_memcmp(ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN) )
15198 - {
15199 - printk("%s %d\n", __FUNCTION__, __LINE__);
15200 - _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);
15201 - ptdlsinfo->ss_record.signal_strength = pattrib->signal_strength;
15202 - }
15203 - else
15204 - {
15205 - printk("%s %d\n", __FUNCTION__, __LINE__);
15206 - if( ptdlsinfo->ss_record.signal_strength < pattrib->signal_strength )
15207 - {
15208 - printk("%s %d\n", __FUNCTION__, __LINE__);
15209 - _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);
15210 - ptdlsinfo->ss_record.signal_strength = pattrib->signal_strength;
15211 - }
15212 - }
15213 + u8 erpinfo=0;
15214 + u32 ATIMWindow;
15215 + // IBSS Parameter Set...
15216 + //ATIMWindow = cur->Configuration.ATIMWindow;
15217 + ATIMWindow = 0;
15218 + pframe = rtw_set_ie(pframe, _IBSS_PARA_IE_, 2, (unsigned char *)(&ATIMWindow), &pattrib->pktlen);
15219 +
15220 + //ERP IE
15221 + pframe = rtw_set_ie(pframe, _ERPINFO_IE_, 1, &erpinfo, &pattrib->pktlen);
15222 }
15223
15224 - }
15225 - else
15226 +
15227 + // EXTERNDED SUPPORTED RATE
15228 + if (rate_len > 8)
15229 + {
15230 + pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, (rate_len - 8), (cur_network->SupportedRates + 8), &pattrib->pktlen);
15231 + }
15232 +
15233 +
15234 + //todo:HT for adhoc
15235 +
15236 + }
15237 +
15238 +#ifdef CONFIG_P2P
15239 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) /*&& is_valid_p2p_probereq*/)
15240 {
15241 - if( ptdlsinfo->sta_maximum == _TRUE)
15242 + u32 len;
15243 +#ifdef CONFIG_IOCTL_CFG80211
15244 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
15245 {
15246 - printk("%s %d\n", __FUNCTION__, __LINE__);
15247 - if( _rtw_memcmp( ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN ) )
15248 - {
15249 - //All traffics are busy, do not set up another direct link.
15250 - printk("%s %d\n", __FUNCTION__, __LINE__);
15251 - return _FAIL;
15252 - }
15253 - else
15254 - {
15255 - if( pattrib->signal_strength > ptdlsinfo->ss_record.signal_strength )
15256 - {
15257 - printk("%s %d\n", __FUNCTION__, __LINE__);
15258 - issue_tdls_teardown(adapter, ptdlsinfo->ss_record.macaddr);
15259 - }
15260 - else
15261 - {
15262 - printk("%s %d\n", __FUNCTION__, __LINE__);
15263 - return _FAIL;
15264 - }
15265 - }
15266 + //if pwdinfo->role == P2P_ROLE_DEVICE will call issue_probersp_p2p()
15267 + len = pmlmepriv->p2p_go_probe_resp_ie_len;
15268 + if(pmlmepriv->p2p_go_probe_resp_ie && len>0)
15269 + _rtw_memcpy(pframe, pmlmepriv->p2p_go_probe_resp_ie, len);
15270 + }
15271 + else
15272 +#endif //CONFIG_IOCTL_CFG80211
15273 + {
15274 + len = build_probe_resp_p2p_ie(pwdinfo, pframe);
15275 }
15276
15277 - if( pattrib->signal_strength + TDLS_SIGNAL_THRESH >= precvpriv->signal_strength )
15278 + pframe += len;
15279 + pattrib->pktlen += len;
15280 +
15281 +#ifdef CONFIG_WFD
15282 +#ifdef CONFIG_IOCTL_CFG80211
15283 + if(_TRUE == pwdinfo->wfd_info->wfd_enable)
15284 +#endif //CONFIG_IOCTL_CFG80211
15285 {
15286 - issue_tdls_setup_req(adapter, psa);
15287 + len = build_probe_resp_wfd_ie(pwdinfo, pframe, 0);
15288 + }
15289 +#ifdef CONFIG_IOCTL_CFG80211
15290 + else
15291 + {
15292 + len = 0;
15293 + if(pmlmepriv->wfd_probe_resp_ie && pmlmepriv->wfd_probe_resp_ie_len>0)
15294 + {
15295 + len = pmlmepriv->wfd_probe_resp_ie_len;
15296 + _rtw_memcpy(pframe, pmlmepriv->wfd_probe_resp_ie, len);
15297 + }
15298 }
15299 +#endif //CONFIG_IOCTL_CFG80211
15300 + pframe += len;
15301 + pattrib->pktlen += len;
15302 +#endif //CONFIG_WFD
15303 +
15304 }
15305 +#endif //CONFIG_P2P
15306
15307 - return _FAIL;
15308 +
15309 +#ifdef CONFIG_AUTO_AP_MODE
15310 +{
15311 + struct sta_info *psta;
15312 + struct sta_priv *pstapriv = &padapter->stapriv;
15313 +
15314 + DBG_871X("(%s)\n", __FUNCTION__);
15315 +
15316 + //check rc station
15317 + psta = rtw_get_stainfo(pstapriv, da);
15318 + if (psta && psta->isrc && psta->pid>0)
15319 + {
15320 + u8 RC_OUI[4]={0x00,0xE0,0x4C,0x0A};
15321 + u8 RC_INFO[14] = {0};
15322 + //EID[1] + EID_LEN[1] + RC_OUI[4] + MAC[6] + PairingID[2] + ChannelNum[2]
15323 + u16 cu_ch = (u16)cur_network->Configuration.DSConfig;
15324 +
15325 + DBG_871X("%s, reply rc(pid=0x%x) device "MAC_FMT" in ch=%d\n", __FUNCTION__,
15326 + psta->pid, MAC_ARG(psta->hwaddr), cu_ch);
15327 +
15328 + //append vendor specific ie
15329 + _rtw_memcpy(RC_INFO, RC_OUI, sizeof(RC_OUI));
15330 + _rtw_memcpy(&RC_INFO[4], mac, ETH_ALEN);
15331 + _rtw_memcpy(&RC_INFO[10], (u8*)&psta->pid, 2);
15332 + _rtw_memcpy(&RC_INFO[12], (u8*)&cu_ch, 2);
15333 +
15334 + pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, sizeof(RC_INFO), RC_INFO, &pattrib->pktlen);
15335 + }
15336 }
15337 +#endif //CONFIG_AUTO_AP_MODE
15338
15339 -#endif
15340
15341 -int update_hidden_ssid(u8 *ies, u32 ies_len, u8 hidden_ssid_mode)
15342 -{
15343 - u8 *ssid_ie;
15344 - sint ssid_len_ori;
15345 - int len_diff = 0;
15346 + pattrib->last_txcmdsz = pattrib->pktlen;
15347
15348 - ssid_ie = rtw_get_ie(ies, WLAN_EID_SSID, &ssid_len_ori, ies_len);
15349
15350 - //DBG_871X("%s hidden_ssid_mode:%u, ssid_ie:%p, ssid_len_ori:%d\n", __FUNCTION__, hidden_ssid_mode, ssid_ie, ssid_len_ori);
15351 + dump_mgntframe(padapter, pmgntframe);
15352
15353 - if(ssid_ie && ssid_len_ori>0)
15354 - {
15355 - switch(hidden_ssid_mode)
15356 - {
15357 - case 1:
15358 - {
15359 - u8 *next_ie = ssid_ie + 2 + ssid_len_ori;
15360 - u32 remain_len = 0;
15361 -
15362 - remain_len = ies_len -(next_ie-ies);
15363 -
15364 - ssid_ie[1] = 0;
15365 - _rtw_memcpy(ssid_ie+2, next_ie, remain_len);
15366 - len_diff -= ssid_len_ori;
15367 -
15368 - break;
15369 - }
15370 - case 2:
15371 - _rtw_memset(&ssid_ie[2], 0, ssid_len_ori);
15372 - break;
15373 - default:
15374 - break;
15375 - }
15376 - }
15377 + return;
15378
15379 - return len_diff;
15380 }
15381
15382 -void issue_beacon(_adapter *padapter)
15383 +int _issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 *da, int wait_ack)
15384 {
15385 - _irqL irqL;
15386 - struct xmit_frame *pmgntframe;
15387 - struct pkt_attrib *pattrib;
15388 - unsigned char *pframe;
15389 - struct rtw_ieee80211_hdr *pwlanhdr;
15390 - unsigned short *fctrl;
15391 - unsigned int rate_len;
15392 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
15393 + int ret = _FAIL;
15394 + struct xmit_frame *pmgntframe;
15395 + struct pkt_attrib *pattrib;
15396 + unsigned char *pframe;
15397 + struct rtw_ieee80211_hdr *pwlanhdr;
15398 + unsigned short *fctrl;
15399 + unsigned char *mac;
15400 + unsigned char bssrate[NumRates];
15401 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
15402 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
15403 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
15404 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
15405 - WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
15406 + int bssrate_len = 0;
15407 u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
15408 -#ifdef CONFIG_P2P
15409 - struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
15410 -#endif //CONFIG_P2P
15411 -
15412
15413 - //DBG_871X("%s\n", __FUNCTION__);
15414 + RT_TRACE(_module_rtl871x_mlme_c_,_drv_notice_,("+issue_probereq\n"));
15415
15416 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
15417 {
15418 - DBG_871X("%s, alloc mgnt frame fail\n", __FUNCTION__);
15419 - return;
15420 + goto exit;
15421 }
15422
15423 - _enter_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
15424 -
15425 //update attribute
15426 pattrib = &pmgntframe->attrib;
15427 update_mgntframe_attrib(padapter, pattrib);
15428 - pattrib->qsel = 0x10;
15429 -
15430 +
15431 +
15432 _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
15433 -
15434 +
15435 pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
15436 - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
15437 -
15438 -
15439 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
15440 +
15441 + mac = myid(&(padapter->eeprompriv));
15442 +
15443 fctrl = &(pwlanhdr->frame_ctl);
15444 *(fctrl) = 0;
15445 -
15446 - _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
15447 - _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
15448 - _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
15449
15450 - SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
15451 - //pmlmeext->mgnt_seq++;
15452 - SetFrameSubType(pframe, WIFI_BEACON);
15453 -
15454 - pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
15455 - pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);
15456 -
15457 - if( (pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
15458 + if (da)
15459 {
15460 - //DBG_871X("ie len=%d\n", cur_network->IELength);
15461 -#ifdef CONFIG_P2P
15462 - // for P2P : Primary Device Type & Device Name
15463 - u32 wpsielen=0, insert_len=0;
15464 - u8 *wpsie=NULL;
15465 - wpsie = rtw_get_wps_ie(cur_network->IEs+_FIXED_IE_LENGTH_, cur_network->IELength-_FIXED_IE_LENGTH_, NULL, &wpsielen);
15466 -
15467 - if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && wpsie && wpsielen>0)
15468 - {
15469 - uint wps_offset, remainder_ielen;
15470 - u8 *premainder_ie, *pframe_wscie;
15471 -
15472 - wps_offset = (uint)(wpsie - cur_network->IEs);
15473 -
15474 - premainder_ie = wpsie + wpsielen;
15475 + // unicast probe request frame
15476 + _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
15477 + _rtw_memcpy(pwlanhdr->addr3, da, ETH_ALEN);
15478 + }
15479 + else
15480 + {
15481 + // broadcast probe request frame
15482 + _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
15483 + _rtw_memcpy(pwlanhdr->addr3, bc_addr, ETH_ALEN);
15484 + }
15485
15486 - remainder_ielen = cur_network->IELength - wps_offset - wpsielen;
15487 + _rtw_memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
15488
15489 -#ifdef CONFIG_IOCTL_CFG80211
15490 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
15491 - {
15492 - if(pmlmepriv->wps_beacon_ie && pmlmepriv->wps_beacon_ie_len>0)
15493 - {
15494 - _rtw_memcpy(pframe, cur_network->IEs, wps_offset);
15495 - pframe += wps_offset;
15496 - pattrib->pktlen += wps_offset;
15497 -
15498 - _rtw_memcpy(pframe, pmlmepriv->wps_beacon_ie, pmlmepriv->wps_beacon_ie_len);
15499 + SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
15500 + pmlmeext->mgnt_seq++;
15501 + SetFrameSubType(pframe, WIFI_PROBEREQ);
15502
15503 - pframe += pmlmepriv->wps_beacon_ie_len;
15504 - pattrib->pktlen += pmlmepriv->wps_beacon_ie_len;
15505 + pframe += sizeof (struct rtw_ieee80211_hdr_3addr);
15506 + pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);
15507
15508 - //copy remainder_ie to pframe
15509 - _rtw_memcpy(pframe, premainder_ie, remainder_ielen);
15510 - pframe += remainder_ielen;
15511 - pattrib->pktlen += remainder_ielen;
15512 -
15513 - }
15514 - else
15515 - {
15516 - _rtw_memcpy(pframe, cur_network->IEs, cur_network->IELength);
15517 - pframe += cur_network->IELength;
15518 - pattrib->pktlen += cur_network->IELength;
15519 - }
15520 - }
15521 - else
15522 -#endif //CONFIG_IOCTL_CFG80211
15523 - {
15524 + if(pssid)
15525 + pframe = rtw_set_ie(pframe, _SSID_IE_, pssid->SsidLength, pssid->Ssid, &(pattrib->pktlen));
15526 + else
15527 + pframe = rtw_set_ie(pframe, _SSID_IE_, 0, NULL, &(pattrib->pktlen));
15528
15529 - pframe_wscie = pframe + wps_offset;
15530 - _rtw_memcpy(pframe, cur_network->IEs, wps_offset+wpsielen);
15531 - pframe += (wps_offset + wpsielen);
15532 - pattrib->pktlen += (wps_offset + wpsielen);
15533 + get_rate_set(padapter, bssrate, &bssrate_len);
15534
15535 - //now pframe is end of wsc ie, insert Primary Device Type & Device Name
15536 - // Primary Device Type
15537 - // Type:
15538 - *(u16*) ( pframe + insert_len) = cpu_to_be16( WPS_ATTR_PRIMARY_DEV_TYPE );
15539 - insert_len += 2;
15540 -
15541 - // Length:
15542 - *(u16*) ( pframe + insert_len ) = cpu_to_be16( 0x0008 );
15543 - insert_len += 2;
15544 -
15545 - // Value:
15546 - // Category ID
15547 - *(u16*) ( pframe + insert_len ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
15548 - insert_len += 2;
15549 + if (bssrate_len > 8)
15550 + {
15551 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
15552 + pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
15553 + }
15554 + else
15555 + {
15556 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
15557 + }
15558
15559 - // OUI
15560 - *(u32*) ( pframe + insert_len ) = cpu_to_be32( WPSOUI );
15561 - insert_len += 4;
15562 -
15563 - // Sub Category ID
15564 - *(u16*) ( pframe + insert_len ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
15565 - insert_len += 2;
15566 -
15567 -
15568 - // Device Name
15569 - // Type:
15570 - *(u16*) ( pframe + insert_len ) = cpu_to_be16( WPS_ATTR_DEVICE_NAME );
15571 - insert_len += 2;
15572 -
15573 - // Length:
15574 - *(u16*) ( pframe + insert_len ) = cpu_to_be16( pwdinfo->device_name_len );
15575 - insert_len += 2;
15576 -
15577 - // Value:
15578 - _rtw_memcpy( pframe + insert_len, pwdinfo->device_name, pwdinfo->device_name_len );
15579 - insert_len += pwdinfo->device_name_len;
15580 -
15581 -
15582 - //update wsc ie length
15583 - *(pframe_wscie+1) = (wpsielen -2) + insert_len;
15584 -
15585 - //pframe move to end
15586 - pframe+=insert_len;
15587 - pattrib->pktlen += insert_len;
15588 -
15589 - //copy remainder_ie to pframe
15590 - _rtw_memcpy(pframe, premainder_ie, remainder_ielen);
15591 - pframe += remainder_ielen;
15592 - pattrib->pktlen += remainder_ielen;
15593 - }
15594 -
15595 - }
15596 - else
15597 -#endif //CONFIG_P2P
15598 - {
15599 - int len_diff;
15600 - _rtw_memcpy(pframe, cur_network->IEs, cur_network->IELength);
15601 - len_diff = update_hidden_ssid(
15602 - pframe+_BEACON_IE_OFFSET_
15603 - , cur_network->IELength-_BEACON_IE_OFFSET_
15604 - , pmlmeinfo->hidden_ssid_mode
15605 - );
15606 - pframe += (cur_network->IELength+len_diff);
15607 - pattrib->pktlen += (cur_network->IELength+len_diff);
15608 - }
15609 -
15610 -#ifdef CONFIG_P2P
15611 - if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
15612 - {
15613 - u32 len;
15614 -#ifdef CONFIG_IOCTL_CFG80211
15615 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
15616 - {
15617 - len = pmlmepriv->p2p_beacon_ie_len;
15618 - if(pmlmepriv->p2p_beacon_ie && len>0)
15619 - _rtw_memcpy(pframe, pmlmepriv->p2p_beacon_ie, len);
15620 - }
15621 - else
15622 -#endif //CONFIG_IOCTL_CFG80211
15623 - {
15624 - len = build_beacon_p2p_ie(pwdinfo, pframe);
15625 - }
15626 +#if 0
15627 + //add wps_ie for wps2.0
15628 + if(pmlmepriv->probereq_wpsie_len>0 && pmlmepriv->probereq_wpsie_len<MAX_WPS_IE_LEN)
15629 + {
15630 + _rtw_memcpy(pframe, pmlmepriv->probereq_wpsie, pmlmepriv->probereq_wpsie_len);
15631 + pframe += pmlmepriv->probereq_wpsie_len;
15632 + pattrib->pktlen += pmlmepriv->probereq_wpsie_len;
15633 + //pmlmepriv->probereq_wpsie_len = 0 ;//reset to zero
15634 + }
15635 +#else
15636 + //add wps_ie for wps2.0
15637 + if(pmlmepriv->wps_probe_req_ie_len>0 && pmlmepriv->wps_probe_req_ie)
15638 + {
15639 + _rtw_memcpy(pframe, pmlmepriv->wps_probe_req_ie, pmlmepriv->wps_probe_req_ie_len);
15640 + pframe += pmlmepriv->wps_probe_req_ie_len;
15641 + pattrib->pktlen += pmlmepriv->wps_probe_req_ie_len;
15642 + //pmlmepriv->wps_probe_req_ie_len = 0 ;//reset to zero
15643 + }
15644 +#endif
15645
15646 -
15647 - pframe += len;
15648 - pattrib->pktlen += len;
15649 -#ifdef CONFIG_WFD
15650 - len = build_beacon_wfd_ie( pwdinfo, pframe );
15651 - pframe += len;
15652 - pattrib->pktlen += len;
15653 -#endif //CONFIG_WFD
15654 - }
15655 -#endif //CONFIG_P2P
15656 + pattrib->last_txcmdsz = pattrib->pktlen;
15657
15658 - goto _issue_bcn;
15659 + RT_TRACE(_module_rtl871x_mlme_c_,_drv_notice_,("issuing probe_req, tx_len=%d\n", pattrib->last_txcmdsz));
15660
15661 + if (wait_ack) {
15662 + ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
15663 + } else {
15664 + dump_mgntframe(padapter, pmgntframe);
15665 + ret = _SUCCESS;
15666 }
15667
15668 - //below for ad-hoc mode
15669 -
15670 - //timestamp will be inserted by hardware
15671 - pframe += 8;
15672 - pattrib->pktlen += 8;
15673 -
15674 - // beacon interval: 2 bytes
15675 -
15676 - _rtw_memcpy(pframe, (unsigned char *)(rtw_get_beacon_interval_from_ie(cur_network->IEs)), 2);
15677 -
15678 - pframe += 2;
15679 - pattrib->pktlen += 2;
15680 -
15681 - // capability info: 2 bytes
15682 -
15683 - _rtw_memcpy(pframe, (unsigned char *)(rtw_get_capability_from_ie(cur_network->IEs)), 2);
15684 -
15685 - pframe += 2;
15686 - pattrib->pktlen += 2;
15687 -
15688 - // SSID
15689 - pframe = rtw_set_ie(pframe, _SSID_IE_, cur_network->Ssid.SsidLength, cur_network->Ssid.Ssid, &pattrib->pktlen);
15690 -
15691 - // supported rates...
15692 - rate_len = rtw_get_rateset_len(cur_network->SupportedRates);
15693 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, ((rate_len > 8)? 8: rate_len), cur_network->SupportedRates, &pattrib->pktlen);
15694 -
15695 - // DS parameter set
15696 - pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&(cur_network->Configuration.DSConfig), &pattrib->pktlen);
15697 -
15698 - //if( (pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)
15699 - {
15700 - u8 erpinfo=0;
15701 - u32 ATIMWindow;
15702 - // IBSS Parameter Set...
15703 - //ATIMWindow = cur->Configuration.ATIMWindow;
15704 - ATIMWindow = 0;
15705 - pframe = rtw_set_ie(pframe, _IBSS_PARA_IE_, 2, (unsigned char *)(&ATIMWindow), &pattrib->pktlen);
15706 +exit:
15707 + return ret;
15708 +}
15709
15710 - //ERP IE
15711 - pframe = rtw_set_ie(pframe, _ERPINFO_IE_, 1, &erpinfo, &pattrib->pktlen);
15712 - }
15713 +inline void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 *da)
15714 +{
15715 + _issue_probereq(padapter, pssid, da, _FALSE);
15716 +}
15717
15718 +int issue_probereq_ex(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 *da,
15719 + int try_cnt, int wait_ms)
15720 +{
15721 + int ret;
15722 + int i = 0;
15723 + u32 start = rtw_get_current_time();
15724
15725 - // EXTERNDED SUPPORTED RATE
15726 - if (rate_len > 8)
15727 + do
15728 {
15729 - pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, (rate_len - 8), (cur_network->SupportedRates + 8), &pattrib->pktlen);
15730 - }
15731 + ret = _issue_probereq(padapter, pssid, da, wait_ms>0?_TRUE:_FALSE);
15732
15733 + i++;
15734
15735 - //todo:HT for adhoc
15736 + if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
15737 + break;
15738
15739 -_issue_bcn:
15740 + if(i < try_cnt && wait_ms > 0 && ret==_FAIL)
15741 + rtw_msleep_os(wait_ms);
15742
15743 - pmlmepriv->update_bcn = _FALSE;
15744 -
15745 - _exit_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
15746 + }while((i<try_cnt) && ((ret==_FAIL)||(wait_ms==0)));
15747
15748 - if ((pattrib->pktlen + TXDESC_SIZE) > 512)
15749 - {
15750 - DBG_871X("beacon frame too large\n");
15751 - return;
15752 + if (ret != _FAIL) {
15753 + ret = _SUCCESS;
15754 + #ifndef DBG_XMIT_ACK
15755 + goto exit;
15756 + #endif
15757 }
15758 -
15759 - pattrib->last_txcmdsz = pattrib->pktlen;
15760 -
15761 - //DBG_871X("issue bcn_sz=%d\n", pattrib->last_txcmdsz);
15762 -
15763 - dump_mgntframe(padapter, pmgntframe);
15764
15765 + if (try_cnt && wait_ms) {
15766 + if (da)
15767 + DBG_871X(FUNC_ADPT_FMT" to "MAC_FMT", ch:%u%s, %d/%d in %u ms\n",
15768 + FUNC_ADPT_ARG(padapter), MAC_ARG(da), rtw_get_oper_ch(padapter),
15769 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
15770 + else
15771 + DBG_871X(FUNC_ADPT_FMT", ch:%u%s, %d/%d in %u ms\n",
15772 + FUNC_ADPT_ARG(padapter), rtw_get_oper_ch(padapter),
15773 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
15774 + }
15775 +exit:
15776 + return ret;
15777 }
15778
15779 -void issue_probersp(_adapter *padapter, unsigned char *da, u8 is_valid_p2p_probereq)
15780 +// if psta == NULL, indiate we are station(client) now...
15781 +void issue_auth(_adapter *padapter, struct sta_info *psta, unsigned short status)
15782 {
15783 - u8 *pwps_ie;
15784 - uint wps_ielen;
15785 struct xmit_frame *pmgntframe;
15786 struct pkt_attrib *pattrib;
15787 unsigned char *pframe;
15788 struct rtw_ieee80211_hdr *pwlanhdr;
15789 - unsigned short *fctrl;
15790 - unsigned char *mac, *bssid;
15791 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
15792 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
15793 + unsigned short *fctrl;
15794 + unsigned int val32;
15795 + unsigned short val16;
15796 + int use_shared_key = 0;
15797 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
15798 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
15799 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
15800 - WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
15801 - unsigned int rate_len;
15802 -#ifdef CONFIG_P2P
15803 - struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
15804 -#ifdef CONFIG_WFD
15805 - u32 wfdielen = 0;
15806 -#endif //CONFIG_WFD
15807 -#endif //CONFIG_P2P
15808 -
15809 -
15810 -
15811 - //DBG_871X("%s\n", __FUNCTION__);
15812
15813 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
15814 {
15815 - DBG_871X("%s, alloc mgnt frame fail\n", __FUNCTION__);
15816 return;
15817 }
15818
15819 -
15820 //update attribute
15821 pattrib = &pmgntframe->attrib;
15822 - update_mgntframe_attrib(padapter, pattrib);
15823 -
15824 + update_mgntframe_attrib(padapter, pattrib);
15825 +
15826 _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
15827 -
15828 +
15829 pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
15830 - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
15831 -
15832 - mac = myid(&(padapter->eeprompriv));
15833 - bssid = cur_network->MacAddress;
15834 -
15835 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
15836 +
15837 fctrl = &(pwlanhdr->frame_ctl);
15838 *(fctrl) = 0;
15839 - _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
15840 - _rtw_memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
15841 - _rtw_memcpy(pwlanhdr->addr3, bssid, ETH_ALEN);
15842
15843 SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
15844 pmlmeext->mgnt_seq++;
15845 - SetFrameSubType(fctrl, WIFI_PROBERSP);
15846 -
15847 - pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr);
15848 - pattrib->pktlen = pattrib->hdrlen;
15849 - pframe += pattrib->hdrlen;
15850 + SetFrameSubType(pframe, WIFI_AUTH);
15851
15852 + pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
15853 + pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
15854
15855 - if(cur_network->IELength>MAX_IE_SZ || cur_network->IELength<_FIXED_IE_LENGTH_)
15856 - return;
15857 -
15858 -#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
15859 - if( (pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
15860 +
15861 + if(psta)// for AP mode
15862 {
15863 - pwps_ie = rtw_get_wps_ie(cur_network->IEs+_FIXED_IE_LENGTH_, cur_network->IELength-_FIXED_IE_LENGTH_, NULL, &wps_ielen);
15864 -
15865 - //inerset & update wps_probe_resp_ie
15866 - if((pmlmepriv->wps_probe_resp_ie!=NULL) && pwps_ie && (wps_ielen>0))
15867 - {
15868 - uint wps_offset, remainder_ielen;
15869 - u8 *premainder_ie;
15870 +#ifdef CONFIG_NATIVEAP_MLME
15871 +
15872 + _rtw_memcpy(pwlanhdr->addr1, psta->hwaddr, ETH_ALEN);
15873 + _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
15874 + _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
15875 +
15876
15877 - wps_offset = (uint)(pwps_ie - cur_network->IEs);
15878 + // setting auth algo number
15879 + val16 = (u16)psta->authalg;
15880
15881 - premainder_ie = pwps_ie + wps_ielen;
15882 + if(status != _STATS_SUCCESSFUL_)
15883 + val16 = 0;
15884
15885 - remainder_ielen = cur_network->IELength - wps_offset - wps_ielen;
15886 + if (val16) {
15887 + val16 = cpu_to_le16(val16);
15888 + use_shared_key = 1;
15889 + }
15890
15891 - _rtw_memcpy(pframe, cur_network->IEs, wps_offset);
15892 - pframe += wps_offset;
15893 - pattrib->pktlen += wps_offset;
15894 + pframe = rtw_set_fixed_ie(pframe, _AUTH_ALGM_NUM_, (unsigned char *)&val16, &(pattrib->pktlen));
15895
15896 - wps_ielen = (uint)pmlmepriv->wps_probe_resp_ie[1];//to get ie data len
15897 - if((wps_offset+wps_ielen+2)<=MAX_IE_SZ)
15898 - {
15899 - _rtw_memcpy(pframe, pmlmepriv->wps_probe_resp_ie, wps_ielen+2);
15900 - pframe += wps_ielen+2;
15901 - pattrib->pktlen += wps_ielen+2;
15902 - }
15903 + // setting auth seq number
15904 + val16 =(u16)psta->auth_seq;
15905 + val16 = cpu_to_le16(val16);
15906 + pframe = rtw_set_fixed_ie(pframe, _AUTH_SEQ_NUM_, (unsigned char *)&val16, &(pattrib->pktlen));
15907
15908 - if((wps_offset+wps_ielen+2+remainder_ielen)<=MAX_IE_SZ)
15909 - {
15910 - _rtw_memcpy(pframe, premainder_ie, remainder_ielen);
15911 - pframe += remainder_ielen;
15912 - pattrib->pktlen += remainder_ielen;
15913 - }
15914 - }
15915 - else
15916 + // setting status code...
15917 + val16 = status;
15918 + val16 = cpu_to_le16(val16);
15919 + pframe = rtw_set_fixed_ie(pframe, _STATUS_CODE_, (unsigned char *)&val16, &(pattrib->pktlen));
15920 +
15921 + // added challenging text...
15922 + if ((psta->auth_seq == 2) && (psta->state & WIFI_FW_AUTH_STATE) && (use_shared_key==1))
15923 {
15924 - _rtw_memcpy(pframe, cur_network->IEs, cur_network->IELength);
15925 - pframe += cur_network->IELength;
15926 - pattrib->pktlen += cur_network->IELength;
15927 + pframe = rtw_set_ie(pframe, _CHLGETXT_IE_, 128, psta->chg_txt, &(pattrib->pktlen));
15928 }
15929 -
15930 - }
15931 - else
15932 -#endif
15933 - {
15934 +#endif
15935 + }
15936 + else
15937 + {
15938 + _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
15939 + _rtw_memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
15940 + _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
15941
15942 - //timestamp will be inserted by hardware
15943 - pframe += 8;
15944 - pattrib->pktlen += 8;
15945 -
15946 - // beacon interval: 2 bytes
15947 -
15948 - _rtw_memcpy(pframe, (unsigned char *)(rtw_get_beacon_interval_from_ie(cur_network->IEs)), 2);
15949 -
15950 - pframe += 2;
15951 - pattrib->pktlen += 2;
15952 -
15953 - // capability info: 2 bytes
15954 -
15955 - _rtw_memcpy(pframe, (unsigned char *)(rtw_get_capability_from_ie(cur_network->IEs)), 2);
15956 -
15957 - pframe += 2;
15958 - pattrib->pktlen += 2;
15959 -
15960 - //below for ad-hoc mode
15961 -
15962 - // SSID
15963 - pframe = rtw_set_ie(pframe, _SSID_IE_, cur_network->Ssid.SsidLength, cur_network->Ssid.Ssid, &pattrib->pktlen);
15964 -
15965 - // supported rates...
15966 - rate_len = rtw_get_rateset_len(cur_network->SupportedRates);
15967 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, ((rate_len > 8)? 8: rate_len), cur_network->SupportedRates, &pattrib->pktlen);
15968 -
15969 - // DS parameter set
15970 - pframe =rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&(cur_network->Configuration.DSConfig), &pattrib->pktlen);
15971 -
15972 - if( (pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)
15973 + // setting auth algo number
15974 + val16 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared)? 1: 0;// 0:OPEN System, 1:Shared key
15975 + if (val16) {
15976 + val16 = cpu_to_le16(val16);
15977 + use_shared_key = 1;
15978 + }
15979 + //DBG_871X("%s auth_algo= %s auth_seq=%d\n",__FUNCTION__,(pmlmeinfo->auth_algo==0)?"OPEN":"SHARED",pmlmeinfo->auth_seq);
15980 +
15981 + //setting IV for auth seq #3
15982 + if ((pmlmeinfo->auth_seq == 3) && (pmlmeinfo->state & WIFI_FW_AUTH_STATE) && (use_shared_key==1))
15983 {
15984 - u8 erpinfo=0;
15985 - u32 ATIMWindow;
15986 - // IBSS Parameter Set...
15987 - //ATIMWindow = cur->Configuration.ATIMWindow;
15988 - ATIMWindow = 0;
15989 - pframe = rtw_set_ie(pframe, _IBSS_PARA_IE_, 2, (unsigned char *)(&ATIMWindow), &pattrib->pktlen);
15990 + //DBG_871X("==> iv(%d),key_index(%d)\n",pmlmeinfo->iv,pmlmeinfo->key_index);
15991 + val32 = ((pmlmeinfo->iv++) | (pmlmeinfo->key_index << 30));
15992 + val32 = cpu_to_le32(val32);
15993 + pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&val32, &(pattrib->pktlen));
15994
15995 - //ERP IE
15996 - pframe = rtw_set_ie(pframe, _ERPINFO_IE_, 1, &erpinfo, &pattrib->pktlen);
15997 + pattrib->iv_len = 4;
15998 }
15999
16000 + pframe = rtw_set_fixed_ie(pframe, _AUTH_ALGM_NUM_, (unsigned char *)&val16, &(pattrib->pktlen));
16001
16002 - // EXTERNDED SUPPORTED RATE
16003 - if (rate_len > 8)
16004 - {
16005 - pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, (rate_len - 8), (cur_network->SupportedRates + 8), &pattrib->pktlen);
16006 - }
16007 + // setting auth seq number
16008 + val16 = pmlmeinfo->auth_seq;
16009 + val16 = cpu_to_le16(val16);
16010 + pframe = rtw_set_fixed_ie(pframe, _AUTH_SEQ_NUM_, (unsigned char *)&val16, &(pattrib->pktlen));
16011
16012 +
16013 + // setting status code...
16014 + val16 = status;
16015 + val16 = cpu_to_le16(val16);
16016 + pframe = rtw_set_fixed_ie(pframe, _STATUS_CODE_, (unsigned char *)&val16, &(pattrib->pktlen));
16017
16018 - //todo:HT for adhoc
16019 + // then checking to see if sending challenging text...
16020 + if ((pmlmeinfo->auth_seq == 3) && (pmlmeinfo->state & WIFI_FW_AUTH_STATE) && (use_shared_key==1))
16021 + {
16022 + pframe = rtw_set_ie(pframe, _CHLGETXT_IE_, 128, pmlmeinfo->chg_txt, &(pattrib->pktlen));
16023
16024 - }
16025 + SetPrivacy(fctrl);
16026 +
16027 + pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr);
16028 +
16029 + pattrib->encrypt = _WEP40_;
16030
16031 -#ifdef CONFIG_P2P
16032 - if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && is_valid_p2p_probereq)
16033 - {
16034 - u32 len;
16035 -#ifdef CONFIG_IOCTL_CFG80211
16036 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
16037 - {
16038 - //if pwdinfo->role == P2P_ROLE_DEVICE will call issue_probersp_p2p()
16039 - len = pmlmepriv->p2p_go_probe_resp_ie_len;
16040 - if(pmlmepriv->p2p_go_probe_resp_ie && len>0)
16041 - _rtw_memcpy(pframe, pmlmepriv->p2p_go_probe_resp_ie, len);
16042 - }
16043 - else
16044 -#endif //CONFIG_IOCTL_CFG80211
16045 - {
16046 - len = build_probe_resp_p2p_ie(pwdinfo, pframe);
16047 + pattrib->icv_len = 4;
16048 +
16049 + pattrib->pktlen += pattrib->icv_len;
16050 +
16051 }
16052 -
16053 - pframe += len;
16054 - pattrib->pktlen += len;
16055
16056 -#ifdef CONFIG_WFD
16057 - wfdielen = build_probe_resp_wfd_ie(pwdinfo, pframe);
16058 - pframe += wfdielen;
16059 - pattrib->pktlen += wfdielen;
16060 -#endif //CONFIG_WFD
16061 -
16062 - }
16063 -#endif //CONFIG_P2P
16064 -
16065 + }
16066
16067 pattrib->last_txcmdsz = pattrib->pktlen;
16068 -
16069 +
16070 + rtw_wep_encrypt(padapter, (u8 *)pmgntframe);
16071
16072 dump_mgntframe(padapter, pmgntframe);
16073 -
16074 - return;
16075
16076 + return;
16077 }
16078
16079 -void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 blnbc)
16080 +
16081 +void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *pstat, int pkt_type)
16082 {
16083 - struct xmit_frame *pmgntframe;
16084 - struct pkt_attrib *pattrib;
16085 - unsigned char *pframe;
16086 +#ifdef CONFIG_AP_MODE
16087 + struct xmit_frame *pmgntframe;
16088 struct rtw_ieee80211_hdr *pwlanhdr;
16089 - unsigned short *fctrl;
16090 - unsigned char *mac;
16091 - unsigned char bssrate[NumRates];
16092 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
16093 + struct pkt_attrib *pattrib;
16094 + unsigned char *pbuf, *pframe;
16095 + unsigned short val;
16096 + unsigned short *fctrl;
16097 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
16098 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
16099 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
16100 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16101 - int bssrate_len = 0;
16102 - u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
16103 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
16104 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16105 + WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network);
16106 + u8 *ie = pnetwork->IEs;
16107 +#ifdef CONFIG_P2P
16108 + struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
16109 +#ifdef CONFIG_WFD
16110 + u32 wfdielen = 0;
16111 +#endif //CONFIG_WFD
16112 +#endif //CONFIG_P2P
16113
16114 - RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("+issue_probereq\n"));
16115 + DBG_871X("%s\n", __FUNCTION__);
16116
16117 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
16118 {
16119 @@ -6125,313 +7418,45 @@ void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 blnbc)
16120 pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
16121 pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
16122
16123 - mac = myid(&(padapter->eeprompriv));
16124 -
16125 fctrl = &(pwlanhdr->frame_ctl);
16126 *(fctrl) = 0;
16127
16128 - if ( 0 == blnbc )
16129 - {
16130 - // unicast probe request frame
16131 - _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16132 - _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16133 - }
16134 - else
16135 - {
16136 - // broadcast probe request frame
16137 - _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
16138 - _rtw_memcpy(pwlanhdr->addr3, bc_addr, ETH_ALEN);
16139 - }
16140 + _rtw_memcpy((void *)GetAddr1Ptr(pwlanhdr), pstat->hwaddr, ETH_ALEN);
16141 + _rtw_memcpy((void *)GetAddr2Ptr(pwlanhdr), myid(&(padapter->eeprompriv)), ETH_ALEN);
16142 + _rtw_memcpy((void *)GetAddr3Ptr(pwlanhdr), get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16143
16144 - _rtw_memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
16145
16146 SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
16147 pmlmeext->mgnt_seq++;
16148 - SetFrameSubType(pframe, WIFI_PROBEREQ);
16149 + if ((pkt_type == WIFI_ASSOCRSP) || (pkt_type == WIFI_REASSOCRSP))
16150 + SetFrameSubType(pwlanhdr, pkt_type);
16151 + else
16152 + return;
16153
16154 - pframe += sizeof (struct rtw_ieee80211_hdr_3addr);
16155 - pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);
16156 + pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr);
16157 + pattrib->pktlen += pattrib->hdrlen;
16158 + pframe += pattrib->hdrlen;
16159
16160 - if(pssid)
16161 - pframe = rtw_set_ie(pframe, _SSID_IE_, pssid->SsidLength, pssid->Ssid, &(pattrib->pktlen));
16162 - else
16163 - pframe = rtw_set_ie(pframe, _SSID_IE_, 0, NULL, &(pattrib->pktlen));
16164 + //capability
16165 + val = *(unsigned short *)rtw_get_capability_from_ie(ie);
16166
16167 - get_rate_set(padapter, bssrate, &bssrate_len);
16168 + pframe = rtw_set_fixed_ie(pframe, _CAPABILITY_ , (unsigned char *)&val, &(pattrib->pktlen));
16169
16170 - if (bssrate_len > 8)
16171 - {
16172 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
16173 - pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
16174 - }
16175 - else
16176 - {
16177 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
16178 - }
16179 + status = cpu_to_le16(status);
16180 + pframe = rtw_set_fixed_ie(pframe , _STATUS_CODE_ , (unsigned char *)&status, &(pattrib->pktlen));
16181 +
16182 + val = cpu_to_le16(pstat->aid | BIT(14) | BIT(15));
16183 + pframe = rtw_set_fixed_ie(pframe, _ASOC_ID_ , (unsigned char *)&val, &(pattrib->pktlen));
16184
16185 -#if 0
16186 - //add wps_ie for wps2.0
16187 - if(pmlmepriv->probereq_wpsie_len>0 && pmlmepriv->probereq_wpsie_len<MAX_WPS_IE_LEN)
16188 + if (pstat->bssratelen <= 8)
16189 {
16190 - _rtw_memcpy(pframe, pmlmepriv->probereq_wpsie, pmlmepriv->probereq_wpsie_len);
16191 - pframe += pmlmepriv->probereq_wpsie_len;
16192 - pattrib->pktlen += pmlmepriv->probereq_wpsie_len;
16193 - //pmlmepriv->probereq_wpsie_len = 0 ;//reset to zero
16194 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, pstat->bssratelen, pstat->bssrateset, &(pattrib->pktlen));
16195 }
16196 -#else
16197 - //add wps_ie for wps2.0
16198 - if(pmlmepriv->wps_probe_req_ie_len>0 && pmlmepriv->wps_probe_req_ie)
16199 + else
16200 {
16201 - _rtw_memcpy(pframe, pmlmepriv->wps_probe_req_ie, pmlmepriv->wps_probe_req_ie_len);
16202 - pframe += pmlmepriv->wps_probe_req_ie_len;
16203 - pattrib->pktlen += pmlmepriv->wps_probe_req_ie_len;
16204 - //pmlmepriv->wps_probe_req_ie_len = 0 ;//reset to zero
16205 - }
16206 -#endif
16207 -
16208 - pattrib->last_txcmdsz = pattrib->pktlen;
16209 -
16210 - RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("issuing probe_req, tx_len=%d\n", pattrib->last_txcmdsz));
16211 -
16212 - dump_mgntframe(padapter, pmgntframe);
16213 -
16214 - return;
16215 -}
16216 -
16217 -// if psta == NULL, indiate we are station(client) now...
16218 -void issue_auth(_adapter *padapter, struct sta_info *psta, unsigned short status)
16219 -{
16220 - struct xmit_frame *pmgntframe;
16221 - struct pkt_attrib *pattrib;
16222 - unsigned char *pframe;
16223 - struct rtw_ieee80211_hdr *pwlanhdr;
16224 - unsigned short *fctrl;
16225 - unsigned int val32;
16226 - unsigned short val16;
16227 - int use_shared_key = 0;
16228 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
16229 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
16230 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16231 -
16232 -/*
16233 - if( (psta == NULL) && (pmlmeinfo->auth_seq != 3) ) {
16234 - // Because of AP's not receiving deauth before
16235 - // AP may: 1)not response auth or 2)deauth us after link is complete
16236 - // issue deauth before issuing auth to deal with the situation
16237 - issue_deauth(padapter, (&(pmlmeinfo->network))->MacAddress, WLAN_REASON_DEAUTH_LEAVING);
16238 - }
16239 -*/
16240 -
16241 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
16242 - {
16243 - return;
16244 - }
16245 -
16246 - //update attribute
16247 - pattrib = &pmgntframe->attrib;
16248 - update_mgntframe_attrib(padapter, pattrib);
16249 -
16250 - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
16251 -
16252 - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
16253 - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
16254 -
16255 - fctrl = &(pwlanhdr->frame_ctl);
16256 - *(fctrl) = 0;
16257 -
16258 - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
16259 - pmlmeext->mgnt_seq++;
16260 - SetFrameSubType(pframe, WIFI_AUTH);
16261 -
16262 - pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
16263 - pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
16264 -
16265 -
16266 - if(psta)// for AP mode
16267 - {
16268 -#ifdef CONFIG_NATIVEAP_MLME
16269 -
16270 - _rtw_memcpy(pwlanhdr->addr1, psta->hwaddr, ETH_ALEN);
16271 - _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
16272 - _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
16273 -
16274 -
16275 - // setting auth algo number
16276 - val16 = (u16)psta->authalg;
16277 -
16278 - if(status != _STATS_SUCCESSFUL_)
16279 - val16 = 0;
16280 -
16281 - if (val16) {
16282 - val16 = cpu_to_le16(val16);
16283 - use_shared_key = 1;
16284 - }
16285 -
16286 - pframe = rtw_set_fixed_ie(pframe, _AUTH_ALGM_NUM_, (unsigned char *)&val16, &(pattrib->pktlen));
16287 -
16288 - // setting auth seq number
16289 - val16 =(u16)psta->auth_seq;
16290 - val16 = cpu_to_le16(val16);
16291 - pframe = rtw_set_fixed_ie(pframe, _AUTH_SEQ_NUM_, (unsigned char *)&val16, &(pattrib->pktlen));
16292 -
16293 - // setting status code...
16294 - val16 = status;
16295 - val16 = cpu_to_le16(val16);
16296 - pframe = rtw_set_fixed_ie(pframe, _STATUS_CODE_, (unsigned char *)&val16, &(pattrib->pktlen));
16297 -
16298 - // added challenging text...
16299 - if ((psta->auth_seq == 2) && (psta->state & WIFI_FW_AUTH_STATE) && (use_shared_key==1))
16300 - {
16301 - pframe = rtw_set_ie(pframe, _CHLGETXT_IE_, 128, psta->chg_txt, &(pattrib->pktlen));
16302 - }
16303 -#endif
16304 - }
16305 - else
16306 - {
16307 - _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
16308 - _rtw_memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
16309 - _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
16310 -
16311 - // setting auth algo number
16312 - val16 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared)? 1: 0;// 0:OPEN System, 1:Shared key
16313 - if (val16) {
16314 - val16 = cpu_to_le16(val16);
16315 - use_shared_key = 1;
16316 - }
16317 - //DBG_8192C("%s auth_algo= %s auth_seq=%d\n",__FUNCTION__,(pmlmeinfo->auth_algo==0)?"OPEN":"SHARED",pmlmeinfo->auth_seq);
16318 -
16319 - //setting IV for auth seq #3
16320 - if ((pmlmeinfo->auth_seq == 3) && (pmlmeinfo->state & WIFI_FW_AUTH_STATE) && (use_shared_key==1))
16321 - {
16322 - //DBG_8192C("==> iv(%d),key_index(%d)\n",pmlmeinfo->iv,pmlmeinfo->key_index);
16323 - val32 = ((pmlmeinfo->iv++) | (pmlmeinfo->key_index << 30));
16324 - val32 = cpu_to_le32(val32);
16325 - pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&val32, &(pattrib->pktlen));
16326 -
16327 - pattrib->iv_len = 4;
16328 - }
16329 -
16330 - pframe = rtw_set_fixed_ie(pframe, _AUTH_ALGM_NUM_, (unsigned char *)&val16, &(pattrib->pktlen));
16331 -
16332 - // setting auth seq number
16333 - val16 = pmlmeinfo->auth_seq;
16334 - val16 = cpu_to_le16(val16);
16335 - pframe = rtw_set_fixed_ie(pframe, _AUTH_SEQ_NUM_, (unsigned char *)&val16, &(pattrib->pktlen));
16336 -
16337 -
16338 - // setting status code...
16339 - val16 = status;
16340 - val16 = cpu_to_le16(val16);
16341 - pframe = rtw_set_fixed_ie(pframe, _STATUS_CODE_, (unsigned char *)&val16, &(pattrib->pktlen));
16342 -
16343 - // then checking to see if sending challenging text...
16344 - if ((pmlmeinfo->auth_seq == 3) && (pmlmeinfo->state & WIFI_FW_AUTH_STATE) && (use_shared_key==1))
16345 - {
16346 - pframe = rtw_set_ie(pframe, _CHLGETXT_IE_, 128, pmlmeinfo->chg_txt, &(pattrib->pktlen));
16347 -
16348 - SetPrivacy(fctrl);
16349 -
16350 - pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr);
16351 -
16352 - pattrib->encrypt = _WEP40_;
16353 -
16354 - pattrib->icv_len = 4;
16355 -
16356 - pattrib->pktlen += pattrib->icv_len;
16357 -
16358 - }
16359 -
16360 - }
16361 -
16362 - pattrib->last_txcmdsz = pattrib->pktlen;
16363 -
16364 - rtw_wep_encrypt(padapter, (u8 *)pmgntframe);
16365 -
16366 - dump_mgntframe(padapter, pmgntframe);
16367 -
16368 - return;
16369 -}
16370 -
16371 -
16372 -void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *pstat, int pkt_type)
16373 -{
16374 -#ifdef CONFIG_AP_MODE
16375 - struct xmit_frame *pmgntframe;
16376 - struct rtw_ieee80211_hdr *pwlanhdr;
16377 - struct pkt_attrib *pattrib;
16378 - unsigned char *pbuf, *pframe;
16379 - unsigned short val;
16380 - unsigned short *fctrl;
16381 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
16382 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
16383 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
16384 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16385 - WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network);
16386 - u8 *ie = pnetwork->IEs;
16387 -#ifdef CONFIG_P2P
16388 - struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
16389 -#ifdef CONFIG_WFD
16390 - u32 wfdielen = 0;
16391 -#endif //CONFIG_WFD
16392 -
16393 -#endif //CONFIG_P2P
16394 -
16395 - DBG_871X("%s\n", __FUNCTION__);
16396 -
16397 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
16398 - {
16399 - return;
16400 - }
16401 -
16402 - //update attribute
16403 - pattrib = &pmgntframe->attrib;
16404 - update_mgntframe_attrib(padapter, pattrib);
16405 -
16406 -
16407 - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
16408 -
16409 - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
16410 - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
16411 -
16412 - fctrl = &(pwlanhdr->frame_ctl);
16413 - *(fctrl) = 0;
16414 -
16415 - _rtw_memcpy((void *)GetAddr1Ptr(pwlanhdr), pstat->hwaddr, ETH_ALEN);
16416 - _rtw_memcpy((void *)GetAddr2Ptr(pwlanhdr), myid(&(padapter->eeprompriv)), ETH_ALEN);
16417 - _rtw_memcpy((void *)GetAddr3Ptr(pwlanhdr), get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16418 -
16419 -
16420 - SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
16421 - pmlmeext->mgnt_seq++;
16422 - if ((pkt_type == WIFI_ASSOCRSP) || (pkt_type == WIFI_REASSOCRSP))
16423 - SetFrameSubType(pwlanhdr, pkt_type);
16424 - else
16425 - return;
16426 -
16427 - pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr);
16428 - pattrib->pktlen += pattrib->hdrlen;
16429 - pframe += pattrib->hdrlen;
16430 -
16431 - //capability
16432 - val = *(unsigned short *)rtw_get_capability_from_ie(ie);
16433 -
16434 - pframe = rtw_set_fixed_ie(pframe, _CAPABILITY_ , (unsigned char *)&val, &(pattrib->pktlen));
16435 -
16436 - status = cpu_to_le16(status);
16437 - pframe = rtw_set_fixed_ie(pframe , _STATUS_CODE_ , (unsigned char *)&status, &(pattrib->pktlen));
16438 -
16439 - val = cpu_to_le16(pstat->aid | BIT(14) | BIT(15));
16440 - pframe = rtw_set_fixed_ie(pframe, _ASOC_ID_ , (unsigned char *)&val, &(pattrib->pktlen));
16441 -
16442 - if (pstat->bssratelen <= 8)
16443 - {
16444 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, pstat->bssratelen, pstat->bssrateset, &(pattrib->pktlen));
16445 - }
16446 - else
16447 - {
16448 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pstat->bssrateset, &(pattrib->pktlen));
16449 - pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, (pstat->bssratelen-8), pstat->bssrateset+8, &(pattrib->pktlen));
16450 - }
16451 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pstat->bssrateset, &(pattrib->pktlen));
16452 + pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, (pstat->bssratelen-8), pstat->bssrateset+8, &(pattrib->pktlen));
16453 + }
16454
16455 #ifdef CONFIG_80211N_HT
16456 if ((pstat->flags & WLAN_STA_HT) && (pmlmepriv->htpriv.ht_option))
16457 @@ -6503,21 +7528,30 @@ void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *p
16458 }
16459
16460 #ifdef CONFIG_P2P
16461 - if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && (pstat->is_p2p_device == _TRUE))
16462 + if( padapter->wdinfo.driver_interface == DRIVER_WEXT )
16463 {
16464 - u32 len;
16465 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && (pstat->is_p2p_device == _TRUE))
16466 + {
16467 + u32 len;
16468
16469 - len = build_assoc_resp_p2p_ie(pwdinfo, pframe, pstat->p2p_status_code);
16470 + len = build_assoc_resp_p2p_ie(pwdinfo, pframe, pstat->p2p_status_code);
16471
16472 - pframe += len;
16473 - pattrib->pktlen += len;
16474 + pframe += len;
16475 + pattrib->pktlen += len;
16476 + }
16477 }
16478 #ifdef CONFIG_WFD
16479 - wfdielen = build_assoc_resp_wfd_ie(pwdinfo, pframe);
16480 - pframe += wfdielen;
16481 - pattrib->pktlen += wfdielen;
16482 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)
16483 +#ifdef CONFIG_IOCTL_CFG80211
16484 + && (_TRUE == pwdinfo->wfd_info->wfd_enable)
16485 +#endif //CONFIG_IOCTL_CFG80211
16486 + )
16487 + {
16488 + wfdielen = build_assoc_resp_wfd_ie(pwdinfo, pframe);
16489 + pframe += wfdielen;
16490 + pattrib->pktlen += wfdielen;
16491 + }
16492 #endif //CONFIG_WFD
16493 -
16494 #endif //CONFIG_P2P
16495
16496 pattrib->last_txcmdsz = pattrib->pktlen;
16497 @@ -6529,6 +7563,7 @@ void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *p
16498
16499 void issue_assocreq(_adapter *padapter)
16500 {
16501 + int ret = _FAIL;
16502 struct xmit_frame *pmgntframe;
16503 struct pkt_attrib *pattrib;
16504 unsigned char *pframe, *p;
16505 @@ -6544,24 +7579,24 @@ void issue_assocreq(_adapter *padapter)
16506 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
16507 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16508 int bssrate_len = 0, sta_bssrate_len = 0;
16509 + u8 cbw40_enable = 0;
16510 #ifdef CONFIG_P2P
16511 struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
16512 u8 p2pie[ 255 ] = { 0x00 };
16513 - u16 p2pielen = 0;
16514 + u16 p2pielen = 0;
16515 #ifdef CONFIG_WFD
16516 u32 wfdielen = 0;
16517 #endif //CONFIG_WFD
16518 -
16519 #endif //CONFIG_P2P
16520
16521 #ifdef CONFIG_DFS
16522 u16 cap;
16523 + u8 pow_cap_ele[2] = { 0x00 };
16524 + u8 sup_ch[ 30 * 2 ] = {0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
16525 #endif //CONFIG_DFS
16526
16527 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
16528 - {
16529 - return;
16530 - }
16531 + goto exit;
16532
16533 //update attribute
16534 pattrib = &pmgntframe->attrib;
16535 @@ -6590,7 +7625,8 @@ void issue_assocreq(_adapter *padapter)
16536
16537 #ifdef CONFIG_DFS
16538 _rtw_memcpy(&cap, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
16539 - cap |= BIT(8);
16540 + if(pmlmeext->cur_channel > 14)
16541 + cap |= BIT(8); //Spectrum Mgmt. Enabled
16542 _rtw_memcpy(pframe, &cap, 2);
16543 #else
16544 _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
16545 @@ -6615,6 +7651,12 @@ void issue_assocreq(_adapter *padapter)
16546 get_rate_set(padapter, sta_bssrate, &sta_bssrate_len);
16547 //DBG_871X("sta_bssrate_len=%d\n", sta_bssrate_len);
16548
16549 + if(pmlmeext->cur_channel == 14)// for JAPAN, channel 14 can only uses B Mode(CCK)
16550 + {
16551 + sta_bssrate_len = 4;
16552 + }
16553 +
16554 +
16555 //for (i = 0; i < sta_bssrate_len; i++) {
16556 // DBG_871X("sta_bssrate[%d]=%02X\n", i, sta_bssrate[i]);
16557 //}
16558 @@ -6668,6 +7710,13 @@ void issue_assocreq(_adapter *padapter)
16559 #endif
16560 #endif // Check if the AP's supported rates are also supported by STA.
16561
16562 + if (bssrate_len == 0) {
16563 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
16564 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
16565 + goto exit; //don't connect to AP if no joint supported rate
16566 + }
16567 +
16568 +
16569 if (bssrate_len > 8)
16570 {
16571 pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
16572 @@ -6678,6 +7727,32 @@ void issue_assocreq(_adapter *padapter)
16573 pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
16574 }
16575
16576 +#ifdef CONFIG_DFS
16577 + if(pmlmeext->cur_channel > 14)
16578 + {
16579 + pow_cap_ele[0] = 13; // Minimum transmit power capability
16580 + pow_cap_ele[1] = 21; // Maximum transmit power capability
16581 + pframe = rtw_set_ie(pframe, _POW_CAP_IE_, 2, pow_cap_ele, &(pattrib->pktlen));
16582 +
16583 + //supported channels
16584 + do{
16585 + if( pmlmeext->channel_set[sup_ch_idx].ChannelNum <= 14 )
16586 + {
16587 + sup_ch[0] = 1; //First channel number
16588 + sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum; //Number of channel
16589 + }
16590 + else
16591 + {
16592 + sup_ch[idx_5g++] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;
16593 + sup_ch[idx_5g++] = 1;
16594 + }
16595 + sup_ch_idx++;
16596 + }
16597 + while( pmlmeext->channel_set[sup_ch_idx].ChannelNum != 0 );
16598 + pframe = rtw_set_ie(pframe, _SUPPORTED_CH_IE_, idx_5g, sup_ch, &(pattrib->pktlen));
16599 + }
16600 +#endif //CONFIG_DFS
16601 +
16602 //RSN
16603 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)));
16604 if (p != NULL)
16605 @@ -6695,55 +7770,79 @@ void issue_assocreq(_adapter *padapter)
16606 _rtw_memcpy(&(pmlmeinfo->HT_caps), (p + 2), sizeof(struct HT_caps_element));
16607
16608 //to disable 40M Hz support while gd_bw_40MHz_en = 0
16609 - if (pregpriv->cbw40_enable == 0)
16610 + if( pmlmeext->cur_channel > 14)
16611 + {
16612 + if(pregpriv->cbw40_enable & BIT(1) )
16613 + cbw40_enable=1;
16614 + }
16615 + else
16616 + if(pregpriv->cbw40_enable & BIT(0) )
16617 + cbw40_enable=1;
16618 +
16619 + if (cbw40_enable == 0)
16620 {
16621 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info &= (~(BIT(6) | BIT(1)));
16622 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info &= (~(BIT(6) | BIT(1)));
16623 }
16624 else
16625 {
16626 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info |= BIT(1);
16627 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= BIT(1);
16628 }
16629
16630 //todo: disable SM power save mode
16631 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info |= 0x000c;
16632 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= 0x000c;
16633
16634 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
16635 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
16636 //switch (pregpriv->rf_config)
16637 switch(rf_type)
16638 {
16639 case RF_1T1R:
16640
16641 if(pregpriv->rx_stbc)
16642 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);//RX STBC One spatial stream
16643 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);//RX STBC One spatial stream
16644
16645 - _rtw_memcpy(pmlmeinfo->HT_caps.HT_cap_element.MCS_rate, MCS_rate_1R, 16);
16646 + _rtw_memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_1R, 16);
16647 break;
16648
16649 case RF_2T2R:
16650 case RF_1T2R:
16651 default:
16652 -
16653 +
16654 +
16655 + if(pregpriv->special_rf_path)
16656 + {
16657 + if(pregpriv->rx_stbc)
16658 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);//RX STBC One spatial stream
16659 + _rtw_memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_1R, 16);
16660 + break;
16661 + }
16662 +
16663 if((pregpriv->rx_stbc == 0x3) ||//enable for 2.4/5 GHz
16664 ((pmlmeext->cur_wireless_mode & WIRELESS_11_24N) && (pregpriv->rx_stbc == 0x1)) || //enable for 2.4GHz
16665 - ((pmlmeext->cur_wireless_mode & WIRELESS_11_5N) && (pregpriv->rx_stbc == 0x2))) //enable for 5GHz
16666 + ((pmlmeext->cur_wireless_mode & WIRELESS_11_5N) && (pregpriv->rx_stbc == 0x2)) || //enable for 5GHz
16667 + (pregpriv->wifi_spec==1))
16668 {
16669 DBG_871X("declare supporting RX STBC\n");
16670 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0200);//RX STBC two spatial stream
16671 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0200);//RX STBC two spatial stream
16672 }
16673 -
16674 - _rtw_memcpy(pmlmeinfo->HT_caps.HT_cap_element.MCS_rate, MCS_rate_2R, 16);
16675 + #ifdef CONFIG_DISABLE_MCS13TO15
16676 + if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40 && (pregpriv->wifi_spec!=1))
16677 + _rtw_memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_2R_MCS13TO15_OFF, 16);
16678 + else
16679 + _rtw_memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_2R, 16);
16680 + #else //CONFIG_DISABLE_MCS13TO15
16681 + _rtw_memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_2R, 16);
16682 + #endif //CONFIG_DISABLE_MCS13TO15
16683 break;
16684 -
16685 }
16686 - #ifdef RTL8192C_RECONFIG_TO_1T1R
16687 +#ifdef RTL8192C_RECONFIG_TO_1T1R
16688 {
16689 - //if(pregpriv->rx_stbc)
16690 - //pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);//RX STBC One spatial stream
16691 + if(pregpriv->rx_stbc)
16692 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);//RX STBC One spatial stream
16693
16694 _rtw_memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_1R, 16);
16695 }
16696 - #endif
16697 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info = cpu_to_le16(pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info);
16698 +#endif
16699 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info = cpu_to_le16(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info);
16700 pframe = rtw_set_ie(pframe, _HT_CAPABILITY_IE_, ie_len , (u8 *)(&(pmlmeinfo->HT_caps)), &(pattrib->pktlen));
16701
16702 }
16703 @@ -6758,17 +7857,19 @@ void issue_assocreq(_adapter *padapter)
16704 switch (pIE->ElementID)
16705 {
16706 case _VENDOR_SPECIFIC_IE_:
16707 - if ((_rtw_memcmp(pIE->data, WPA_OUI, 4)) ||
16708 + if ((_rtw_memcmp(pIE->data, RTW_WPA_OUI, 4)) ||
16709 (_rtw_memcmp(pIE->data, WMM_OUI, 4)) ||
16710 (_rtw_memcmp(pIE->data, WPS_OUI, 4)))
16711 {
16712 - //Commented by Kurt 20110629
16713 - //In some older APs, WPS handshake
16714 - //would be fail if we append vender extensions informations to AP
16715 - if(_rtw_memcmp(pIE->data, WPS_OUI, 4)){
16716 - pIE->Length=14;
16717 + if(!padapter->registrypriv.wifi_spec)
16718 + {
16719 + //Commented by Kurt 20110629
16720 + //In some older APs, WPS handshake
16721 + //would be fail if we append vender extensions informations to AP
16722 + if(_rtw_memcmp(pIE->data, WPS_OUI, 4)){
16723 + pIE->Length=14;
16724 + }
16725 }
16726 -
16727 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, pIE->Length, pIE->data, &(pattrib->pktlen));
16728 }
16729 break;
16730 @@ -6788,7 +7889,7 @@ void issue_assocreq(_adapter *padapter)
16731 #ifdef CONFIG_P2P
16732
16733 #ifdef CONFIG_IOCTL_CFG80211
16734 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
16735 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
16736 {
16737 if(pmlmepriv->p2p_assoc_req_ie && pmlmepriv->p2p_assoc_req_ie_len>0)
16738 {
16739 @@ -6829,12 +7930,13 @@ void issue_assocreq(_adapter *padapter)
16740
16741 // Value:
16742 // Device Capability Bitmap, 1 byte
16743 - // Be able to participate in additional P2P Groups and
16744 - // support the P2P Invitation Procedure
16745 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC;
16746 -
16747 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
16748 +
16749 // Group Capability Bitmap, 1 byte
16750 - p2pie[ p2pielen++ ] = 0x00;
16751 + if ( pwdinfo->persistent_supported )
16752 + p2pie[ p2pielen++ ] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT;
16753 + else
16754 + p2pie[ p2pielen++ ] = DMP_P2P_GRPCAP_SUPPORT;
16755
16756 // Extended Listen Timing
16757 // Type:
16758 @@ -6884,7 +7986,7 @@ void issue_assocreq(_adapter *padapter)
16759
16760 // Primary Device Type
16761 // Category ID
16762 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
16763 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
16764 p2pielen += 2;
16765
16766 // OUI
16767 @@ -6892,7 +7994,7 @@ void issue_assocreq(_adapter *padapter)
16768 p2pielen += 4;
16769
16770 // Sub Category ID
16771 - *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
16772 + *(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
16773 p2pielen += 2;
16774
16775 // Number of Secondary Device Types
16776 @@ -6929,45 +8031,76 @@ void issue_assocreq(_adapter *padapter)
16777 p2pielen += ETH_ALEN;
16778
16779 pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2pie, &pattrib->pktlen );
16780 -
16781 -#ifdef CONFIG_WFD
16782 - wfdielen = build_assoc_req_wfd_ie(pwdinfo, pframe);
16783 - pframe += wfdielen;
16784 - pattrib->pktlen += wfdielen;
16785 -#endif //CONFIG_WFD
16786 - }
16787 - }
16788
16789 #ifdef CONFIG_WFD
16790 - wfdielen = build_assoc_req_wfd_ie(pwdinfo, pframe);
16791 - pframe += wfdielen;
16792 - pattrib->pktlen += wfdielen;
16793 + //wfdielen = build_assoc_req_wfd_ie(pwdinfo, pframe);
16794 + //pframe += wfdielen;
16795 + //pattrib->pktlen += wfdielen;
16796 #endif //CONFIG_WFD
16797 + }
16798 + }
16799
16800 #endif //CONFIG_P2P
16801
16802 +#ifdef CONFIG_WFD
16803 +#ifdef CONFIG_IOCTL_CFG80211
16804 + if ( _TRUE == pwdinfo->wfd_info->wfd_enable )
16805 +#endif //CONFIG_IOCTL_CFG80211
16806 + {
16807 + wfdielen = build_assoc_req_wfd_ie(pwdinfo, pframe);
16808 + pframe += wfdielen;
16809 + pattrib->pktlen += wfdielen;
16810 + }
16811 +#ifdef CONFIG_IOCTL_CFG80211
16812 + else if (pmlmepriv->wfd_assoc_req_ie != NULL && pmlmepriv->wfd_assoc_req_ie_len>0)
16813 + {
16814 + //WFD IE
16815 + _rtw_memcpy(pframe, pmlmepriv->wfd_assoc_req_ie, pmlmepriv->wfd_assoc_req_ie_len);
16816 + pattrib->pktlen += pmlmepriv->wfd_assoc_req_ie_len;
16817 + pframe += pmlmepriv->wfd_assoc_req_ie_len;
16818 + }
16819 +#endif //CONFIG_IOCTL_CFG80211
16820 +#endif //CONFIG_WFD
16821 +
16822 pattrib->last_txcmdsz = pattrib->pktlen;
16823 dump_mgntframe(padapter, pmgntframe);
16824
16825 + ret = _SUCCESS;
16826 +
16827 +exit:
16828 + if (ret == _SUCCESS)
16829 + rtw_buf_update(&pmlmepriv->assoc_req, &pmlmepriv->assoc_req_len, (u8 *)pwlanhdr, pattrib->pktlen);
16830 + else
16831 + rtw_buf_free(&pmlmepriv->assoc_req, &pmlmepriv->assoc_req_len);
16832 +
16833 return;
16834 }
16835
16836 -void issue_nulldata(_adapter *padapter, unsigned int power_mode)
16837 +//when wait_ack is ture, this function shoule be called at process context
16838 +static int _issue_nulldata(_adapter *padapter, unsigned char *da, unsigned int power_mode, int wait_ack)
16839 {
16840 + int ret = _FAIL;
16841 struct xmit_frame *pmgntframe;
16842 struct pkt_attrib *pattrib;
16843 unsigned char *pframe;
16844 struct rtw_ieee80211_hdr *pwlanhdr;
16845 unsigned short *fctrl;
16846 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
16847 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
16848 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16849 + struct xmit_priv *pxmitpriv;
16850 + struct mlme_ext_priv *pmlmeext;
16851 + struct mlme_ext_info *pmlmeinfo;
16852
16853 //DBG_871X("%s:%d\n", __FUNCTION__, power_mode);
16854
16855 + if(!padapter)
16856 + goto exit;
16857 +
16858 + pxmitpriv = &(padapter->xmitpriv);
16859 + pmlmeext = &(padapter->mlmeextpriv);
16860 + pmlmeinfo = &(pmlmeext->mlmext_info);
16861 +
16862 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
16863 {
16864 - return;
16865 + goto exit;
16866 }
16867
16868 //update attribute
16869 @@ -6997,7 +8130,7 @@ void issue_nulldata(_adapter *padapter, unsigned int power_mode)
16870 SetPwrMgt(fctrl);
16871 }
16872
16873 - _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16874 + _rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
16875 _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
16876 _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
16877
16878 @@ -7009,14 +8142,75 @@ void issue_nulldata(_adapter *padapter, unsigned int power_mode)
16879 pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
16880
16881 pattrib->last_txcmdsz = pattrib->pktlen;
16882 - dump_mgntframe(padapter, pmgntframe);
16883
16884 - return;
16885 + if(wait_ack)
16886 + {
16887 + ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
16888 + }
16889 + else
16890 + {
16891 + dump_mgntframe(padapter, pmgntframe);
16892 + ret = _SUCCESS;
16893 + }
16894 +
16895 +exit:
16896 + return ret;
16897 }
16898
16899
16900 -void issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid)
16901 +//when wait_ms >0 , this function shoule be called at process context
16902 +//da == NULL for station mode
16903 +int issue_nulldata(_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms)
16904 +{
16905 + int ret;
16906 + int i = 0;
16907 + u32 start = rtw_get_current_time();
16908 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
16909 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16910 +
16911 + /* da == NULL, assum it's null data for sta to ap*/
16912 + if (da == NULL)
16913 + da = get_my_bssid(&(pmlmeinfo->network));
16914 +
16915 + do
16916 + {
16917 + ret = _issue_nulldata(padapter, da, power_mode, wait_ms>0?_TRUE:_FALSE);
16918 +
16919 + i++;
16920 +
16921 + if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
16922 + break;
16923 +
16924 + if(i < try_cnt && wait_ms > 0 && ret==_FAIL)
16925 + rtw_msleep_os(wait_ms);
16926 +
16927 + }while((i<try_cnt) && ((ret==_FAIL)||(wait_ms==0)));
16928 +
16929 + if (ret != _FAIL) {
16930 + ret = _SUCCESS;
16931 + #ifndef DBG_XMIT_ACK
16932 + goto exit;
16933 + #endif
16934 + }
16935 +
16936 + if (try_cnt && wait_ms) {
16937 + if (da)
16938 + DBG_871X(FUNC_ADPT_FMT" to "MAC_FMT", ch:%u%s, %d/%d in %u ms\n",
16939 + FUNC_ADPT_ARG(padapter), MAC_ARG(da), rtw_get_oper_ch(padapter),
16940 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
16941 + else
16942 + DBG_871X(FUNC_ADPT_FMT", ch:%u%s, %d/%d in %u ms\n",
16943 + FUNC_ADPT_ARG(padapter), rtw_get_oper_ch(padapter),
16944 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
16945 + }
16946 +exit:
16947 + return ret;
16948 +}
16949 +
16950 +//when wait_ack is ture, this function shoule be called at process context
16951 +static int _issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid, int wait_ack)
16952 {
16953 + int ret = _FAIL;
16954 struct xmit_frame *pmgntframe;
16955 struct pkt_attrib *pattrib;
16956 unsigned char *pframe;
16957 @@ -7030,7 +8224,7 @@ void issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid)
16958
16959 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
16960 {
16961 - return;
16962 + goto exit;
16963 }
16964
16965 //update attribute
16966 @@ -7083,11 +8277,71 @@ void issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid)
16967 pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr_qos);
16968
16969 pattrib->last_txcmdsz = pattrib->pktlen;
16970 - dump_mgntframe(padapter, pmgntframe);
16971
16972 + if(wait_ack)
16973 + {
16974 + ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
16975 + }
16976 + else
16977 + {
16978 + dump_mgntframe(padapter, pmgntframe);
16979 + ret = _SUCCESS;
16980 + }
16981 +
16982 +exit:
16983 + return ret;
16984 +}
16985 +
16986 +//when wait_ms >0 , this function shoule be called at process context
16987 +//da == NULL for station mode
16988 +int issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid, int try_cnt, int wait_ms)
16989 +{
16990 + int ret;
16991 + int i = 0;
16992 + u32 start = rtw_get_current_time();
16993 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
16994 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
16995 +
16996 + /* da == NULL, assum it's null data for sta to ap*/
16997 + if (da == NULL)
16998 + da = get_my_bssid(&(pmlmeinfo->network));
16999 +
17000 + do
17001 + {
17002 + ret = _issue_qos_nulldata(padapter, da, tid, wait_ms>0?_TRUE:_FALSE);
17003 +
17004 + i++;
17005 +
17006 + if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
17007 + break;
17008 +
17009 + if(i < try_cnt && wait_ms > 0 && ret==_FAIL)
17010 + rtw_msleep_os(wait_ms);
17011 +
17012 + }while((i<try_cnt) && ((ret==_FAIL)||(wait_ms==0)));
17013 +
17014 + if (ret != _FAIL) {
17015 + ret = _SUCCESS;
17016 + #ifndef DBG_XMIT_ACK
17017 + goto exit;
17018 + #endif
17019 + }
17020 +
17021 + if (try_cnt && wait_ms) {
17022 + if (da)
17023 + DBG_871X(FUNC_ADPT_FMT" to "MAC_FMT", ch:%u%s, %d/%d in %u ms\n",
17024 + FUNC_ADPT_ARG(padapter), MAC_ARG(da), rtw_get_oper_ch(padapter),
17025 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
17026 + else
17027 + DBG_871X(FUNC_ADPT_FMT", ch:%u%s, %d/%d in %u ms\n",
17028 + FUNC_ADPT_ARG(padapter), rtw_get_oper_ch(padapter),
17029 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
17030 + }
17031 +exit:
17032 + return ret;
17033 }
17034
17035 -void issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason)
17036 +static int _issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason, u8 wait_ack)
17037 {
17038 struct xmit_frame *pmgntframe;
17039 struct pkt_attrib *pattrib;
17040 @@ -7097,12 +8351,24 @@ void issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason)
17041 struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
17042 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
17043 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
17044 -
17045 - DBG_871X("%s to "MAC_FMT"\n", __func__, MAC_ARG(da));
17046 + int ret = _FAIL;
17047 +#ifdef CONFIG_P2P
17048 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
17049 +#endif //CONFIG_P2P
17050
17051 + //DBG_871X("%s to "MAC_FMT"\n", __func__, MAC_ARG(da));
17052 +
17053 +#ifdef CONFIG_P2P
17054 + if ( !( rtw_p2p_chk_state( pwdinfo, P2P_STATE_NONE ) ) && ( pwdinfo->rx_invitereq_info.scan_op_ch_only ) )
17055 + {
17056 + _cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey );
17057 + _set_timer( &pwdinfo->reset_ch_sitesurvey, 10 );
17058 + }
17059 +#endif //CONFIG_P2P
17060 +
17061 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
17062 {
17063 - return;
17064 + goto exit;
17065 }
17066
17067 //update attribute
17068 @@ -7134,17 +8400,138 @@ void issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason)
17069
17070 pattrib->last_txcmdsz = pattrib->pktlen;
17071
17072 +
17073 + if(wait_ack)
17074 + {
17075 + ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
17076 + }
17077 + else
17078 + {
17079 + dump_mgntframe(padapter, pmgntframe);
17080 + ret = _SUCCESS;
17081 + }
17082 +
17083 +exit:
17084 + return ret;
17085 +}
17086 +
17087 +int issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason)
17088 +{
17089 + DBG_871X("%s to "MAC_FMT"\n", __func__, MAC_ARG(da));
17090 + return _issue_deauth(padapter, da, reason, _FALSE);
17091 +}
17092 +
17093 +int issue_deauth_ex(_adapter *padapter, u8 *da, unsigned short reason, int try_cnt,
17094 + int wait_ms)
17095 +{
17096 + int ret;
17097 + int i = 0;
17098 + u32 start = rtw_get_current_time();
17099 +
17100 + do
17101 + {
17102 + ret = _issue_deauth(padapter, da, reason, wait_ms>0?_TRUE:_FALSE);
17103 +
17104 + i++;
17105 +
17106 + if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
17107 + break;
17108 +
17109 + if(i < try_cnt && wait_ms > 0 && ret==_FAIL)
17110 + rtw_msleep_os(wait_ms);
17111 +
17112 + }while((i<try_cnt) && ((ret==_FAIL)||(wait_ms==0)));
17113 +
17114 + if (ret != _FAIL) {
17115 + ret = _SUCCESS;
17116 + #ifndef DBG_XMIT_ACK
17117 + goto exit;
17118 + #endif
17119 + }
17120 +
17121 + if (try_cnt && wait_ms) {
17122 + if (da)
17123 + DBG_871X(FUNC_ADPT_FMT" to "MAC_FMT", ch:%u%s, %d/%d in %u ms\n",
17124 + FUNC_ADPT_ARG(padapter), MAC_ARG(da), rtw_get_oper_ch(padapter),
17125 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
17126 + else
17127 + DBG_871X(FUNC_ADPT_FMT", ch:%u%s, %d/%d in %u ms\n",
17128 + FUNC_ADPT_ARG(padapter), rtw_get_oper_ch(padapter),
17129 + ret==_SUCCESS?", acked":"", i, try_cnt, rtw_get_passing_time_ms(start));
17130 + }
17131 +exit:
17132 + return ret;
17133 +}
17134 +
17135 +void issue_action_spct_ch_switch(_adapter *padapter, u8 *ra, u8 new_ch, u8 ch_offset)
17136 +{
17137 + _irqL irqL;
17138 + _list *plist, *phead;
17139 + struct xmit_frame *pmgntframe;
17140 + struct pkt_attrib *pattrib;
17141 + unsigned char *pframe;
17142 + struct rtw_ieee80211_hdr *pwlanhdr;
17143 + unsigned short *fctrl;
17144 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
17145 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
17146 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
17147 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
17148 +
17149 +
17150 + DBG_871X(FUNC_NDEV_FMT" ra="MAC_FMT", ch:%u, offset:%u\n",
17151 + FUNC_NDEV_ARG(padapter->pnetdev), MAC_ARG(ra), new_ch, ch_offset);
17152 +
17153 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
17154 + return;
17155 +
17156 + //update attribute
17157 + pattrib = &pmgntframe->attrib;
17158 + update_mgntframe_attrib(padapter, pattrib);
17159 +
17160 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
17161 +
17162 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
17163 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
17164 +
17165 + fctrl = &(pwlanhdr->frame_ctl);
17166 + *(fctrl) = 0;
17167 +
17168 + _rtw_memcpy(pwlanhdr->addr1, ra, ETH_ALEN); /* RA */
17169 + _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); /* TA */
17170 + _rtw_memcpy(pwlanhdr->addr3, ra, ETH_ALEN); /* DA = RA */
17171 +
17172 + SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
17173 + pmlmeext->mgnt_seq++;
17174 + SetFrameSubType(pframe, WIFI_ACTION);
17175 +
17176 + pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
17177 + pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
17178 +
17179 + /* category, action */
17180 + {
17181 + u8 category, action;
17182 + category = RTW_WLAN_CATEGORY_SPECTRUM_MGMT;
17183 + action = RTW_WLAN_ACTION_SPCT_CHL_SWITCH;
17184 +
17185 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
17186 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
17187 + }
17188 +
17189 + pframe = rtw_set_ie_ch_switch(pframe, &(pattrib->pktlen), 0, new_ch, 0);
17190 + pframe = rtw_set_ie_secondary_ch_offset(pframe, &(pattrib->pktlen),
17191 + hal_ch_offset_to_secondary_ch_offset(ch_offset));
17192 +
17193 + pattrib->last_txcmdsz = pattrib->pktlen;
17194 +
17195 dump_mgntframe(padapter, pmgntframe);
17196 +
17197 }
17198
17199 -void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short status)
17200 +#ifdef CONFIG_IEEE80211W
17201 +void issue_action_SA_Query(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short tid)
17202 {
17203 - u8 category = RTW_WLAN_CATEGORY_BACK;
17204 - u16 start_seq;
17205 - u16 BA_para_set;
17206 + u8 category = RTW_WLAN_CATEGORY_SA_QUERY;
17207 u16 reason_code;
17208 - u16 BA_timeout_value;
17209 - u16 BA_starting_seqctrl;
17210 struct xmit_frame *pmgntframe;
17211 struct pkt_attrib *pattrib;
17212 u8 *pframe;
17213 @@ -7158,10 +8545,11 @@ void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char act
17214 struct registry_priv *pregpriv = &padapter->registrypriv;
17215
17216
17217 - DBG_871X("%s, category=%d, action=%d, status=%d\n", __FUNCTION__, category, action, status);
17218 + DBG_871X("%s\n", __FUNCTION__);
17219
17220 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
17221 {
17222 + DBG_871X("%s: alloc_mgtxmitframe fail\n", __FUNCTION__);
17223 return;
17224 }
17225
17226 @@ -7177,8 +8565,10 @@ void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char act
17227 fctrl = &(pwlanhdr->frame_ctl);
17228 *(fctrl) = 0;
17229
17230 - //_rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
17231 - _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
17232 + if(raddr)
17233 + _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
17234 + else
17235 + _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
17236 _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
17237 _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
17238
17239 @@ -7189,11 +8579,89 @@ void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char act
17240 pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
17241 pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
17242
17243 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
17244 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
17245 -
17246 - status = cpu_to_le16(status);
17247 -
17248 + pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
17249 + pframe = rtw_set_fixed_ie(pframe, 1, &action, &pattrib->pktlen);
17250 +
17251 + switch (action)
17252 + {
17253 + case 0: //SA Query req
17254 + pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)&pmlmeext->sa_query_seq, &pattrib->pktlen);
17255 + pmlmeext->sa_query_seq++;
17256 + //send sa query request to AP, AP should reply sa query response in 1 second
17257 + set_sa_query_timer(pmlmeext, 1000);
17258 + break;
17259 +
17260 + case 1: //SA Query rsp
17261 + tid = cpu_to_le16(tid);
17262 + pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)&tid, &pattrib->pktlen);
17263 + break;
17264 + default:
17265 + break;
17266 + }
17267 +
17268 + pattrib->last_txcmdsz = pattrib->pktlen;
17269 +
17270 + dump_mgntframe(padapter, pmgntframe);
17271 +}
17272 +#endif //CONFIG_IEEE80211W
17273 +
17274 +void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short status)
17275 +{
17276 + u8 category = RTW_WLAN_CATEGORY_BACK;
17277 + u16 start_seq;
17278 + u16 BA_para_set;
17279 + u16 reason_code;
17280 + u16 BA_timeout_value;
17281 + u16 BA_starting_seqctrl;
17282 + struct xmit_frame *pmgntframe;
17283 + struct pkt_attrib *pattrib;
17284 + u8 *pframe;
17285 + struct rtw_ieee80211_hdr *pwlanhdr;
17286 + u16 *fctrl;
17287 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
17288 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
17289 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
17290 + struct sta_info *psta;
17291 + struct sta_priv *pstapriv = &padapter->stapriv;
17292 + struct registry_priv *pregpriv = &padapter->registrypriv;
17293 +
17294 +
17295 + DBG_871X("%s, category=%d, action=%d, status=%d\n", __FUNCTION__, category, action, status);
17296 +
17297 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
17298 + {
17299 + return;
17300 + }
17301 +
17302 + //update attribute
17303 + pattrib = &pmgntframe->attrib;
17304 + update_mgntframe_attrib(padapter, pattrib);
17305 +
17306 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
17307 +
17308 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
17309 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
17310 +
17311 + fctrl = &(pwlanhdr->frame_ctl);
17312 + *(fctrl) = 0;
17313 +
17314 + //_rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
17315 + _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
17316 + _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
17317 + _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
17318 +
17319 + SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
17320 + pmlmeext->mgnt_seq++;
17321 + SetFrameSubType(pframe, WIFI_ACTION);
17322 +
17323 + pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
17324 + pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
17325 +
17326 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
17327 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
17328 +
17329 + status = cpu_to_le16(status);
17330 +
17331
17332 if (category == 3)
17333 {
17334 @@ -7442,7 +8910,7 @@ unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr)
17335 if(psta==NULL)
17336 return _SUCCESS;
17337
17338 - //DBG_8192C("%s:%s\n", __FUNCTION__, (initiator==0)?"RX_DIR":"TX_DIR");
17339 + //DBG_871X("%s:%s\n", __FUNCTION__, (initiator==0)?"RX_DIR":"TX_DIR");
17340
17341 if(initiator==0) // recipient
17342 {
17343 @@ -7450,7 +8918,7 @@ unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr)
17344 {
17345 if(psta->recvreorder_ctrl[tid].enable == _TRUE)
17346 {
17347 - DBG_8192C("rx agg disable tid(%d)\n",tid);
17348 + DBG_871X("rx agg disable tid(%d)\n",tid);
17349 issue_action_BA(padapter, addr, RTW_WLAN_ACTION_DELBA, (((tid <<1) |initiator)&0x1F));
17350 psta->recvreorder_ctrl[tid].enable = _FALSE;
17351 psta->recvreorder_ctrl[tid].indicate_seq = 0xffff;
17352 @@ -7463,12 +8931,12 @@ unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr)
17353 }
17354 else if(initiator == 1)// originator
17355 {
17356 - //DBG_8192C("tx agg_enable_bitmap(0x%08x)\n", psta->htpriv.agg_enable_bitmap);
17357 + //DBG_871X("tx agg_enable_bitmap(0x%08x)\n", psta->htpriv.agg_enable_bitmap);
17358 for(tid = 0;tid<MAXTID;tid++)
17359 {
17360 if(psta->htpriv.agg_enable_bitmap & BIT(tid))
17361 {
17362 - DBG_8192C("tx agg disable tid(%d)\n",tid);
17363 + DBG_871X("tx agg disable tid(%d)\n",tid);
17364 issue_action_BA(padapter, addr, RTW_WLAN_ACTION_DELBA, (((tid <<1) |initiator)&0x1F) );
17365 psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
17366 psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
17367 @@ -7484,38 +8952,63 @@ unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr)
17368 unsigned int send_beacon(_adapter *padapter)
17369 {
17370 u8 bxmitok = _FALSE;
17371 - int retry=0;
17372 -
17373 - //DBG_871X("%s\n", __FUNCTION__);
17374 + int issue=0;
17375 + int poll = 0;
17376 +//#ifdef CONFIG_CONCURRENT_MODE
17377 + //struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
17378 + //struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
17379 + //_adapter *pbuddy_adapter = padapter->pbuddy_adapter;
17380 + //struct mlme_priv *pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
17381 +//#endif
17382
17383 #ifdef CONFIG_PCI_HCI
17384
17385 + //DBG_871X("%s\n", __FUNCTION__);
17386 +
17387 issue_beacon(padapter);
17388
17389 return _SUCCESS;
17390
17391 #endif
17392
17393 -#ifdef CONFIG_USB_HCI
17394 - do{
17395 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
17396 + u32 start = rtw_get_current_time();
17397
17398 + rtw_hal_set_hwreg(padapter, HW_VAR_BCN_VALID, NULL);
17399 + do{
17400 issue_beacon(padapter);
17401 + issue++;
17402 + do {
17403 + rtw_yield_os();
17404 + rtw_hal_get_hwreg(padapter, HW_VAR_BCN_VALID, (u8 *)(&bxmitok));
17405 + poll++;
17406 + }while((poll%10)!=0 && _FALSE == bxmitok && !padapter->bSurpriseRemoved && !padapter->bDriverStopped);
17407
17408 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_TX_BCN_DONE, (u8 *)(&bxmitok));
17409 -
17410 - }while((_FALSE == bxmitok) &&((retry++)<100 ));
17411 + }while(_FALSE == bxmitok && issue<100 && !padapter->bSurpriseRemoved && !padapter->bDriverStopped);
17412
17413 - if(retry == 100)
17414 + if(padapter->bSurpriseRemoved || padapter->bDriverStopped)
17415 + {
17416 + return _FAIL;
17417 + }
17418 + if(_FALSE == bxmitok)
17419 {
17420 - DBG_871X("send_beacon, fail!\n");
17421 + DBG_871X("%s fail! %u ms\n", __FUNCTION__, rtw_get_passing_time_ms(start));
17422 return _FAIL;
17423 }
17424 else
17425 {
17426 + u32 passing_time = rtw_get_passing_time_ms(start);
17427 +
17428 + if(passing_time > 100 || issue > 3)
17429 + DBG_871X("%s success, issue:%d, poll:%d, %u ms\n", __FUNCTION__, issue, poll, rtw_get_passing_time_ms(start));
17430 + //else
17431 + // DBG_871X("%s success, issue:%d, poll:%d, %u ms\n", __FUNCTION__, issue, poll, rtw_get_passing_time_ms(start));
17432 +
17433 return _SUCCESS;
17434 }
17435 -#endif
17436 -
17437 +
17438 +#endif
17439 +
17440 }
17441
17442 /****************************************************************************
17443 @@ -7547,41 +9040,96 @@ void site_survey(_adapter *padapter)
17444 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
17445 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
17446 u32 initialgain = 0;
17447 -
17448 + u8 restore_initial_gain = 1;
17449 +
17450 #ifdef CONFIG_P2P
17451 +
17452 +#ifdef CONFIG_CONCURRENT_MODE
17453 +
17454 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17455 + u8 stay_buddy_ch = 0;
17456 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17457 +
17458 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
17459 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
17460 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
17461 +
17462 +#endif //CONFIG_CONCURRENT_MODE
17463 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
17464 static unsigned char prev_survey_channel = 0;
17465 static unsigned int p2p_scan_count = 0;
17466 -
17467 - if(rtw_p2p_findphase_ex_is_social(pwdinfo))
17468 +
17469 +
17470 + if ( ( pwdinfo->rx_invitereq_info.scan_op_ch_only ) || ( pwdinfo->p2p_info.scan_op_ch_only ) )
17471 + {
17472 + if ( pwdinfo->rx_invitereq_info.scan_op_ch_only )
17473 + {
17474 + survey_channel = pwdinfo->rx_invitereq_info.operation_ch[pmlmeext->sitesurvey_res.channel_idx];
17475 + }
17476 + else
17477 + {
17478 + survey_channel = pwdinfo->p2p_info.operation_ch[pmlmeext->sitesurvey_res.channel_idx];
17479 + }
17480 + ScanType = SCAN_ACTIVE;
17481 + }
17482 + else if(rtw_p2p_findphase_ex_is_social(pwdinfo))
17483 {
17484 // Commented by Albert 2011/06/03
17485 // The driver is in the find phase, it should go through the social channel.
17486 + int ch_set_idx;
17487 survey_channel = pwdinfo->social_chan[pmlmeext->sitesurvey_res.channel_idx];
17488 + ch_set_idx = rtw_ch_set_search_ch(pmlmeext->channel_set, survey_channel);
17489 + if (ch_set_idx >= 0)
17490 + ScanType = pmlmeext->channel_set[ch_set_idx].ScanType;
17491 + else
17492 + ScanType = SCAN_ACTIVE;
17493 }
17494 else
17495 #endif //CONFIG_P2P
17496 {
17497 - survey_channel = pmlmeext->channel_set[pmlmeext->sitesurvey_res.channel_idx].ChannelNum;
17498 + struct rtw_ieee80211_channel *ch;
17499 + if (pmlmeext->sitesurvey_res.channel_idx < pmlmeext->sitesurvey_res.ch_num) {
17500 + ch = &pmlmeext->sitesurvey_res.ch[pmlmeext->sitesurvey_res.channel_idx];
17501 + survey_channel = ch->hw_value;
17502 + ScanType = (ch->flags & RTW_IEEE80211_CHAN_PASSIVE_SCAN) ? SCAN_PASSIVE : SCAN_ACTIVE;
17503 + }
17504 }
17505
17506 - ScanType = pmlmeext->channel_set[pmlmeext->sitesurvey_res.channel_idx].ScanType;
17507 -
17508 - //DBG_871X("switching to ch:%d (cnt:%u,idx:%d) at %dms, %c%c%c\n"
17509 - // , survey_channel
17510 - // , pwdinfo->find_phase_state_exchange_cnt, pmlmeext->sitesurvey_res.channel_idx
17511 - // , rtw_get_passing_time_ms(padapter->mlmepriv.scan_start_time)
17512 - // , ScanType?'A':'P', pmlmeext->sitesurvey_res.scan_mode?'A':'P'
17513 - // , pmlmeext->sitesurvey_res.ssid[0].SsidLength?'S':' '
17514 - //);
17515 + if (0)
17516 + DBG_871X(FUNC_ADPT_FMT" ch:%u(cnt:%u,idx:%d) at %dms, %c%c%c\n"
17517 + , FUNC_ADPT_ARG(padapter)
17518 + , survey_channel
17519 + , pwdinfo->find_phase_state_exchange_cnt, pmlmeext->sitesurvey_res.channel_idx
17520 + , rtw_get_passing_time_ms(padapter->mlmepriv.scan_start_time)
17521 + , ScanType?'A':'P', pmlmeext->sitesurvey_res.scan_mode?'A':'P'
17522 + , pmlmeext->sitesurvey_res.ssid[0].SsidLength?'S':' '
17523 + );
17524
17525 if(survey_channel != 0)
17526 {
17527 //PAUSE 4-AC Queue when site_survey
17528 - //padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
17529 + //rtw_hal_get_hwreg(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
17530 //val8 |= 0x0f;
17531 - //padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
17532 -
17533 + //rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
17534 +#ifdef CONFIG_CONCURRENT_MODE
17535 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17536 + if((padapter->pbuddy_adapter->mlmeextpriv.mlmext_info.state&0x03) == WIFI_FW_AP_STATE)
17537 + {
17538 + if( pmlmeinfo->scan_cnt == RTW_SCAN_NUM_OF_CH )
17539 + {
17540 + pmlmeinfo->scan_cnt = 0;
17541 + survey_channel = pbuddy_mlmeext->cur_channel;
17542 + stay_buddy_ch = 1;
17543 + }
17544 + else
17545 + {
17546 + if( pmlmeinfo->scan_cnt == 0 )
17547 + stay_buddy_ch = 2;
17548 + pmlmeinfo->scan_cnt++;
17549 + }
17550 + }
17551 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17552 +#endif //CONFIG_CONCURRENT_MODE
17553 if(pmlmeext->sitesurvey_res.channel_idx == 0)
17554 {
17555 set_channel_bwmode(padapter, survey_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
17556 @@ -7591,17 +9139,35 @@ void site_survey(_adapter *padapter)
17557 SelectChannel(padapter, survey_channel);
17558 }
17559
17560 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17561 + if( stay_buddy_ch == 1 )
17562 + {
17563 + val8 = 0; //survey done
17564 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
17565 +
17566 + if(check_buddy_mlmeinfo_state(padapter, WIFI_FW_AP_STATE) &&
17567 + check_buddy_fwstate(padapter, _FW_LINKED))
17568 + {
17569 + update_beacon(padapter->pbuddy_adapter, 0, NULL, _TRUE);
17570 + }
17571 + }
17572 + else if( stay_buddy_ch == 2 )
17573 + {
17574 + val8 = 1; //under site survey
17575 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
17576 + }
17577 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17578
17579 if(ScanType == SCAN_ACTIVE) //obey the channel plan setting...
17580 - {
17581 + {
17582 #ifdef CONFIG_P2P
17583 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) ||
17584 rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH)
17585 )
17586 {
17587 - issue_probereq_p2p(padapter);
17588 - issue_probereq_p2p(padapter);
17589 - issue_probereq_p2p(padapter);
17590 + issue_probereq_p2p(padapter, NULL);
17591 + issue_probereq_p2p(padapter, NULL);
17592 + issue_probereq_p2p(padapter, NULL);
17593 }
17594 else
17595 #endif //CONFIG_P2P
17596 @@ -7610,9 +9176,9 @@ void site_survey(_adapter *padapter)
17597 for(i=0;i<RTW_SSID_SCAN_AMOUNT;i++){
17598 if(pmlmeext->sitesurvey_res.ssid[i].SsidLength) {
17599 //todo: to issue two probe req???
17600 - issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]),1);
17601 + issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]), NULL);
17602 //rtw_msleep_os(SURVEY_TO>>1);
17603 - issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]),1);
17604 + issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]), NULL);
17605 } else {
17606 break;
17607 }
17608 @@ -7620,47 +9186,98 @@ void site_survey(_adapter *padapter)
17609
17610 if(pmlmeext->sitesurvey_res.scan_mode == SCAN_ACTIVE) {
17611 //todo: to issue two probe req???
17612 - issue_probereq(padapter, NULL, 1);
17613 + issue_probereq(padapter, NULL, NULL);
17614 //rtw_msleep_os(SURVEY_TO>>1);
17615 - issue_probereq(padapter, NULL, 1);
17616 + issue_probereq(padapter, NULL, NULL);
17617 }
17618 }
17619 }
17620
17621 - set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
17622 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17623 + if( stay_buddy_ch == 1 )
17624 + set_survey_timer(pmlmeext, pmlmeext->chan_scan_time * RTW_STAY_AP_CH_MILLISECOND );
17625 + else
17626 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17627 + set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
17628
17629 }
17630 else
17631 {
17632
17633 // channel number is 0 or this channel is not valid.
17634 +
17635 +#ifdef CONFIG_CONCURRENT_MODE
17636 + u8 cur_channel;
17637 + u8 cur_bwmode;
17638 + u8 cur_ch_offset;
17639 +
17640 + if (rtw_get_ch_setting_union(padapter, &cur_channel, &cur_bwmode, &cur_ch_offset) != 0)
17641 + {
17642 + if (0)
17643 + DBG_871X(FUNC_ADPT_FMT" back to linked union - ch:%u, bw:%u, offset:%u\n",
17644 + FUNC_ADPT_ARG(padapter), cur_channel, cur_bwmode, cur_ch_offset);
17645 + }
17646 + #ifdef CONFIG_IOCTL_CFG80211
17647 + else if(padapter->pbuddy_adapter
17648 + && pbuddy_adapter->wdinfo.driver_interface == DRIVER_CFG80211
17649 + && wdev_to_priv(pbuddy_adapter->rtw_wdev)->p2p_enabled
17650 + && rtw_p2p_chk_state(&pbuddy_adapter->wdinfo, P2P_STATE_LISTEN)
17651 + )
17652 + {
17653 + cur_channel = pbuddy_adapter->wdinfo.listen_channel;
17654 + cur_bwmode = pbuddy_mlmeext->cur_bwmode;
17655 + cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
17656 + }
17657 + #endif
17658 + else
17659 + {
17660 + cur_channel = pmlmeext->cur_channel;
17661 + cur_bwmode = pmlmeext->cur_bwmode;
17662 + cur_ch_offset = pmlmeext->cur_ch_offset;
17663 + }
17664 +#endif
17665 +
17666 +
17667 #ifdef CONFIG_P2P
17668 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH))
17669 {
17670 + if( ( pwdinfo->rx_invitereq_info.scan_op_ch_only ) || ( pwdinfo->p2p_info.scan_op_ch_only ) )
17671 + {
17672 + // Set the find_phase_state_exchange_cnt to P2P_FINDPHASE_EX_CNT.
17673 + // This will let the following flow to run the scanning end.
17674 + rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_MAX);
17675 + }
17676 #ifdef CONFIG_DBG_P2P
17677 - DBG_8192C( "[%s] find phase exchange cnt = %d\n", __FUNCTION__, pwdinfo->find_phase_state_exchange_cnt );
17678 + DBG_871X( "[%s] find phase exchange cnt = %d\n", __FUNCTION__, pwdinfo->find_phase_state_exchange_cnt );
17679 #endif
17680 }
17681 -
17682 +
17683 if(rtw_p2p_findphase_ex_is_needed(pwdinfo))
17684 {
17685 // Set the P2P State to the listen state of find phase and set the current channel to the listen channel
17686 set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
17687 rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_LISTEN);
17688 -
17689 pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
17690
17691 + //turn on dynamic functions
17692 + Restore_DM_Func_Flag(padapter);
17693 + //Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
17694 +
17695 _set_timer( &pwdinfo->find_phase_timer, ( u32 ) ( ( u32 ) ( pwdinfo->listen_dwell ) * 100 ) );
17696 }
17697 else
17698 #endif //CONFIG_P2P
17699 {
17700
17701 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
17702 + pmlmeinfo->scan_cnt = 0;
17703 +#endif //CONFIG_DMP_STA_NODE_SCAN_UNDER_AP_MODE
17704 +
17705 #ifdef CONFIG_ANTENNA_DIVERSITY
17706 // 20100721:Interrupt scan operation here.
17707 // For SW antenna diversity before link, it needs to switch to another antenna and scan again.
17708 // It compares the scan result and select beter one to do connection.
17709 - if(padapter->HalFunc.SwAntDivBeforeLinkHandler(padapter))
17710 + if(rtw_hal_antdiv_before_linked(padapter))
17711 {
17712 pmlmeext->sitesurvey_res.bss_cnt = 0;
17713 pmlmeext->sitesurvey_res.channel_idx = -1;
17714 @@ -7673,7 +9290,18 @@ void site_survey(_adapter *padapter)
17715 #ifdef CONFIG_P2P
17716 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH))
17717 {
17718 - rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
17719 + #ifdef CONFIG_CONCURRENT_MODE
17720 + if( pwdinfo->driver_interface == DRIVER_WEXT )
17721 + {
17722 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
17723 + {
17724 + _set_timer( &pwdinfo->ap_p2p_switch_timer, 500 );
17725 + }
17726 + }
17727 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
17728 + #else
17729 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
17730 + #endif
17731 }
17732 rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
17733 #endif //CONFIG_P2P
17734 @@ -7683,41 +9311,77 @@ void site_survey(_adapter *padapter)
17735 //switch back to the original channel
17736 //SelectChannel(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset);
17737
17738 -#ifdef CONFIG_P2P
17739 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_OK)
17740 - && pwdinfo->peer_operating_ch != 0
17741 - )
17742 - {
17743 - DBG_8192C( "[%s] In P2P WPS mode, stay in the peer operating channel = %d\n", __FUNCTION__, pwdinfo->peer_operating_ch );
17744 - set_channel_bwmode(padapter, pwdinfo->peer_operating_ch, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
17745 - }
17746 - else
17747 -#endif //CONFIG_P2P
17748 {
17749 - set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
17750 +#ifdef CONFIG_CONCURRENT_MODE
17751 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
17752 +#else
17753 +#ifdef CONFIG_DUALMAC_CONCURRENT
17754 + dc_set_channel_bwmode_survey_done(padapter);
17755 +#else
17756 + if( pwdinfo->driver_interface == DRIVER_WEXT )
17757 + {
17758 + if( rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN) )
17759 + {
17760 + set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
17761 + }
17762 + else
17763 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
17764 + }
17765 + else if( pwdinfo->driver_interface == DRIVER_CFG80211 )
17766 + {
17767 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
17768 + }
17769 +#endif //CONFIG_DUALMAC_CONCURRENT
17770 +#endif //CONFIG_CONCURRENT_MODE
17771 }
17772
17773 //flush 4-AC Queue after site_survey
17774 //val8 = 0;
17775 - //padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
17776 + //rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
17777
17778 - val8 = 0;
17779 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
17780 + val8 = 0; //survey done
17781 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
17782
17783 //config MSR
17784 - Set_NETYPE0_MSR(padapter, (pmlmeinfo->state & 0x3));
17785 + Set_MSR(padapter, (pmlmeinfo->state & 0x3));
17786 +
17787 +
17788 +#ifdef CONFIG_IOCTL_CFG80211
17789 + if((wdev_to_priv(padapter->rtw_wdev))->p2p_enabled == _TRUE)
17790 + {
17791 + restore_initial_gain = 0;
17792 + }
17793 +#endif //CONFIG_IOCTL_CFG80211
17794 +
17795 + if(restore_initial_gain == 1)
17796 + {
17797 + initialgain = 0xff; //restore RX GAIN
17798 + rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
17799 + }
17800
17801 - initialgain = 0xff; //restore RX GAIN
17802 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
17803 //turn on dynamic functions
17804 Restore_DM_Func_Flag(padapter);
17805 //Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
17806
17807 if (is_client_associated_to_ap(padapter) == _TRUE)
17808 {
17809 - //issue null data
17810 - issue_nulldata(padapter, 0);
17811 + issue_nulldata(padapter, NULL, 0, 3, 500);
17812 +
17813 +#ifdef CONFIG_CONCURRENT_MODE
17814 + if(is_client_associated_to_ap(padapter->pbuddy_adapter) == _TRUE)
17815 + {
17816 + DBG_871X("adapter is surveydone(buddy_adapter is linked), issue nulldata(pwrbit=0)\n");
17817 +
17818 + issue_nulldata(padapter->pbuddy_adapter, NULL, 0, 3, 500);
17819 + }
17820 +#endif
17821 + }
17822 +#ifdef CONFIG_CONCURRENT_MODE
17823 + else if(is_client_associated_to_ap(padapter->pbuddy_adapter) == _TRUE)
17824 + {
17825 + issue_nulldata(padapter->pbuddy_adapter, NULL, 0, 3, 500);
17826 }
17827 +#endif
17828
17829 report_surveydone_event(padapter);
17830
17831 @@ -7730,6 +9394,19 @@ void site_survey(_adapter *padapter)
17832
17833 }
17834
17835 +#ifdef CONFIG_CONCURRENT_MODE
17836 + if(check_buddy_mlmeinfo_state(padapter, WIFI_FW_AP_STATE) &&
17837 + check_buddy_fwstate(padapter, _FW_LINKED))
17838 + {
17839 +
17840 + DBG_871X("survey done, current CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
17841 +
17842 + DBG_871X("restart pbuddy_adapter's beacon\n");
17843 +
17844 + update_beacon(padapter->pbuddy_adapter, 0, NULL, _TRUE);
17845 + }
17846 +#endif
17847 +
17848 }
17849
17850 return;
17851 @@ -7753,7 +9430,7 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
17852
17853 if (len > MAX_IE_SZ)
17854 {
17855 - //DBG_8192C("IE too long for survey event\n");
17856 + //DBG_871X("IE too long for survey event\n");
17857 return _FAIL;
17858 }
17859
17860 @@ -7778,8 +9455,8 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
17861 bssid->Rssi = precv_frame->u.hdr.attrib.RecvSignalPower; // in dBM.raw data
17862
17863 #ifdef CONFIG_ANTENNA_DIVERSITY
17864 - //padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_CURRENT_ANTENNA, (u8 *)(&bssid->PhyInfo.Optimum_antenna));
17865 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_CURRENT_ANTENNA, &bssid->PhyInfo.Optimum_antenna);
17866 + //rtw_hal_get_hwreg(padapter, HW_VAR_CURRENT_ANTENNA, (u8 *)(&bssid->PhyInfo.Optimum_antenna));
17867 + rtw_hal_get_def_var(padapter, HAL_DEF_CURRENT_ANTENNA, &bssid->PhyInfo.Optimum_antenna);
17868 #endif
17869
17870 // checking SSID
17871 @@ -7791,6 +9468,11 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
17872
17873 if (*(p + 1))
17874 {
17875 + if (len > NDIS_802_11_LENGTH_SSID)
17876 + {
17877 + DBG_871X("%s()-%d: IE too long (%d) for survey event\n", __FUNCTION__, __LINE__, len);
17878 + return _FAIL;
17879 + }
17880 _rtw_memcpy(bssid->Ssid.Ssid, (p + 2), *(p + 1));
17881 bssid->Ssid.SsidLength = *(p + 1);
17882 }
17883 @@ -7806,6 +9488,11 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
17884 p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _SUPPORTEDRATES_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
17885 if (p != NULL)
17886 {
17887 + if (len > NDIS_802_11_LENGTH_RATES_EX)
17888 + {
17889 + DBG_871X("%s()-%d: IE too long (%d) for survey event\n", __FUNCTION__, __LINE__, len);
17890 + return _FAIL;
17891 + }
17892 _rtw_memcpy(bssid->SupportedRates, (p + 2), len);
17893 i = len;
17894 }
17895 @@ -7813,6 +9500,11 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
17896 p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _EXT_SUPPORTEDRATES_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
17897 if (p != NULL)
17898 {
17899 + if (len > (NDIS_802_11_LENGTH_RATES_EX-i))
17900 + {
17901 + DBG_871X("%s()-%d: IE too long (%d) for survey event\n", __FUNCTION__, __LINE__, len);
17902 + return _FAIL;
17903 + }
17904 _rtw_memcpy(bssid->SupportedRates + i, (p + 2), len);
17905 }
17906
17907 @@ -7828,6 +9520,9 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
17908 bssid->NetworkTypeInUse = Ndis802_11OFDM24;
17909 }
17910
17911 + if (bssid->IELength < 12)
17912 + return _FAIL;
17913 +
17914 // Checking for DSConfig
17915 p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _DSSET_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
17916
17917 @@ -7849,16 +9544,11 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
17918 }
17919 else
17920 { // use current channel
17921 - if (padapter->mlmeextpriv.sitesurvey_res.state == SCAN_PROCESS)
17922 - bssid->Configuration.DSConfig = padapter->mlmeextpriv.channel_set[padapter->mlmeextpriv.sitesurvey_res.channel_idx].ChannelNum;
17923 - else
17924 - bssid->Configuration.DSConfig = padapter->mlmeextpriv.cur_channel;
17925 + bssid->Configuration.DSConfig = rtw_get_oper_ch(padapter);
17926 }
17927 }
17928
17929 _rtw_memcpy(&bssid->Configuration.BeaconPeriod, rtw_get_beacon_interval_from_ie(bssid->IEs), 2);
17930 -
17931 -
17932 bssid->Configuration.BeaconPeriod = le32_to_cpu(bssid->Configuration.BeaconPeriod);
17933
17934 val16 = rtw_get_capability((WLAN_BSSID_EX *)bssid);
17935 @@ -7892,7 +9582,7 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
17936 struct HT_caps_element *pHT_caps;
17937 pHT_caps = (struct HT_caps_element *)(p + 2);
17938
17939 - if(pHT_caps->HT_cap_element.HT_caps_info&BIT(14))
17940 + if(pHT_caps->u.HT_cap_element.HT_caps_info&BIT(14))
17941 {
17942 pmlmepriv->num_FortyMHzIntolerant++;
17943 }
17944 @@ -7904,31 +9594,36 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
17945
17946 }
17947
17948 +#ifdef CONFIG_INTEL_WIDI
17949 + //process_intel_widi_query_or_tigger(padapter, bssid);
17950 + if(process_intel_widi_query_or_tigger(padapter, bssid))
17951 + {
17952 + return _FAIL;
17953 + }
17954 +#endif // CONFIG_INTEL_WIDI
17955
17956 - #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) & 1
17957 + #if defined(DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) & 1
17958 if(strcmp(bssid->Ssid.Ssid, DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) == 0) {
17959 DBG_871X("Receiving %s("MAC_FMT", DSConfig:%u) from ch%u with ss:%3u, sq:%3u, RawRSSI:%3ld\n"
17960 , bssid->Ssid.Ssid, MAC_ARG(bssid->MacAddress), bssid->Configuration.DSConfig
17961 - , padapter->mlmeextpriv.channel_set[padapter->mlmeextpriv.sitesurvey_res.channel_idx].ChannelNum
17962 + , rtw_get_oper_ch(padapter)
17963 , bssid->PhyInfo.SignalStrength, bssid->PhyInfo.SignalQuality, bssid->Rssi
17964 );
17965 }
17966 #endif
17967 -
17968 +
17969 // mark bss info receving from nearby channel as SignalQuality 101
17970 - if(bssid->Configuration.DSConfig != padapter->mlmeextpriv.channel_set[padapter->mlmeextpriv.sitesurvey_res.channel_idx].ChannelNum)
17971 + if(bssid->Configuration.DSConfig != rtw_get_oper_ch(padapter))
17972 {
17973 bssid->PhyInfo.SignalQuality= 101;
17974 }
17975
17976 return _SUCCESS;
17977 -
17978 }
17979
17980 void start_create_ibss(_adapter* padapter)
17981 {
17982 unsigned short caps;
17983 - u32 val32;
17984 u8 val8;
17985 u8 join_type;
17986 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
17987 @@ -7948,7 +9643,7 @@ void start_create_ibss(_adapter* padapter)
17988 //set_opmode_cmd(padapter, adhoc);//removed
17989
17990 val8 = 0xcf;
17991 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
17992 + rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
17993
17994 //switch channel
17995 //SelectChannel(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE);
17996 @@ -7958,7 +9653,7 @@ void start_create_ibss(_adapter* padapter)
17997
17998 //set msr to WIFI_FW_ADHOC_STATE
17999 pmlmeinfo->state = WIFI_FW_ADHOC_STATE;
18000 - Set_NETYPE0_MSR(padapter, (pmlmeinfo->state & 0x3));
18001 + Set_MSR(padapter, (pmlmeinfo->state & 0x3));
18002
18003 //issue beacon
18004 if(send_beacon(padapter)==_FAIL)
18005 @@ -7969,11 +9664,11 @@ void start_create_ibss(_adapter* padapter)
18006 pmlmeinfo->state = WIFI_FW_NULL_STATE;
18007 }
18008 else
18009 - {
18010 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, padapter->registrypriv.dev_network.MacAddress);
18011 + {
18012 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, padapter->registrypriv.dev_network.MacAddress);
18013 join_type = 0;
18014 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
18015 -
18016 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
18017 +
18018 report_join_res(padapter, 1);
18019 pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;
18020 }
18021 @@ -7994,10 +9689,6 @@ void start_clnt_join(_adapter* padapter)
18022 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18023 WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
18024
18025 -
18026 - pmlmeext->cur_channel = (u8)pnetwork->Configuration.DSConfig;
18027 - pmlmeinfo->bcn_interval = get_beacon_interval(pnetwork);
18028 -
18029 //update wireless mode
18030 update_wireless_mode(padapter);
18031
18032 @@ -8006,13 +9697,53 @@ void start_clnt_join(_adapter* padapter)
18033 update_capinfo(padapter, caps);
18034 if (caps&cap_ESS)
18035 {
18036 - Set_NETYPE0_MSR(padapter, WIFI_FW_STATION_STATE);
18037 + Set_MSR(padapter, WIFI_FW_STATION_STATE);
18038
18039 val8 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X)? 0xcc: 0xcf;
18040 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
18041 + rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
18042
18043 - //switch channel
18044 - set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
18045 + #ifdef CONFIG_DEAUTH_BEFORE_CONNECT
18046 + // Because of AP's not receiving deauth before
18047 + // AP may: 1)not response auth or 2)deauth us after link is complete
18048 + // issue deauth before issuing auth to deal with the situation
18049 +
18050 + // Commented by Albert 2012/07/21
18051 + // For the Win8 P2P connection, it will be hard to have a successful connection if this Wi-Fi doesn't connect to it.
18052 + {
18053 + #ifdef CONFIG_P2P
18054 + _queue *queue = &(padapter->mlmepriv.scanned_queue);
18055 + _list *head = get_list_head(queue);
18056 + _list *pos = get_next(head);
18057 + struct wlan_network *scanned = NULL;
18058 + u8 ie_offset = 0;
18059 + _irqL irqL;
18060 + bool has_p2p_ie = _FALSE;
18061 +
18062 + _enter_critical_bh(&(padapter->mlmepriv.scanned_queue.lock), &irqL);
18063 +
18064 + for (pos = get_next(head);!rtw_end_of_queue_search(head, pos); pos = get_next(pos)) {
18065 +
18066 + scanned = LIST_CONTAINOR(pos, struct wlan_network, list);
18067 + if(scanned==NULL)
18068 + rtw_warn_on(1);
18069 +
18070 + if (_rtw_memcmp(&(scanned->network.Ssid), &(pnetwork->Ssid), sizeof(NDIS_802_11_SSID)) == _TRUE
18071 + && _rtw_memcmp(scanned->network.MacAddress, pnetwork->MacAddress, sizeof(NDIS_802_11_MAC_ADDRESS)) == _TRUE
18072 + ) {
18073 + ie_offset = (scanned->network.Reserved[0] == 2? 0:12);
18074 + if (rtw_get_p2p_ie(scanned->network.IEs+ie_offset, scanned->network.IELength-ie_offset, NULL, NULL))
18075 + has_p2p_ie = _TRUE;
18076 + break;
18077 + }
18078 + }
18079 +
18080 + _exit_critical_bh(&(padapter->mlmepriv.scanned_queue.lock), &irqL);
18081 +
18082 + if (scanned == NULL || rtw_end_of_queue_search(head, pos) || has_p2p_ie == _FALSE)
18083 + #endif /* CONFIG_P2P */
18084 + issue_deauth_ex(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING, 5, 100);
18085 + }
18086 + #endif /* CONFIG_DEAUTH_BEFORE_CONNECT */
18087
18088 //here wait for receiving the beacon to start auth
18089 //and enable a timer
18090 @@ -8022,10 +9753,10 @@ void start_clnt_join(_adapter* padapter)
18091 }
18092 else if (caps&cap_IBSS) //adhoc client
18093 {
18094 - Set_NETYPE0_MSR(padapter, WIFI_FW_ADHOC_STATE);
18095 + Set_MSR(padapter, WIFI_FW_ADHOC_STATE);
18096
18097 val8 = 0xcf;
18098 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
18099 + rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
18100
18101 //switch channel
18102 set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
18103 @@ -8038,7 +9769,7 @@ void start_clnt_join(_adapter* padapter)
18104 }
18105 else
18106 {
18107 - //DBG_8192C("marc: invalid cap:%x\n", caps);
18108 + //DBG_871X("marc: invalid cap:%x\n", caps);
18109 return;
18110 }
18111
18112 @@ -8058,13 +9789,9 @@ void start_clnt_auth(_adapter* padapter)
18113 pmlmeinfo->reauth_count = 0;
18114 pmlmeinfo->reassoc_count = 0;
18115 pmlmeinfo->link_count = 0;
18116 + pmlmeext->retry = 0;
18117
18118
18119 - // Because of AP's not receiving deauth before
18120 - // AP may: 1)not response auth or 2)deauth us after link is complete
18121 - // issue deauth before issuing auth to deal with the situation
18122 - issue_deauth(padapter, (&(pmlmeinfo->network))->MacAddress, WLAN_REASON_DEAUTH_LEAVING);
18123 -
18124 issue_auth(padapter, NULL, 0);
18125
18126 set_link_timer(pmlmeext, REAUTH_TO);
18127 @@ -8104,6 +9831,7 @@ unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsi
18128 {
18129 pmlmeinfo->state = WIFI_FW_NULL_STATE;
18130 report_del_sta_event(padapter, MacAddr, reason);
18131 +
18132 }
18133 else if (pmlmeinfo->state & WIFI_FW_LINKING_STATE)
18134 {
18135 @@ -8115,24 +9843,321 @@ unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsi
18136 return _SUCCESS;
18137 }
18138
18139 -/****************************************************************************
18140 +#ifdef CONFIG_80211D
18141 +static void process_80211d(PADAPTER padapter, WLAN_BSSID_EX *bssid)
18142 +{
18143 + struct registry_priv *pregistrypriv;
18144 + struct mlme_ext_priv *pmlmeext;
18145 + RT_CHANNEL_INFO *chplan_new;
18146 + u8 channel;
18147 + u8 i;
18148
18149 -Following are the functions to report events
18150
18151 -*****************************************************************************/
18152 + pregistrypriv = &padapter->registrypriv;
18153 + pmlmeext = &padapter->mlmeextpriv;
18154
18155 -void report_survey_event(_adapter *padapter, union recv_frame *precv_frame)
18156 -{
18157 - struct cmd_obj *pcmd_obj;
18158 - u8 *pevtcmd;
18159 - u32 cmdsz;
18160 - struct survey_event *psurvey_evt;
18161 + // Adjust channel plan by AP Country IE
18162 + if (pregistrypriv->enable80211d &&
18163 + (!pmlmeext->update_channel_plan_by_ap_done))
18164 + {
18165 + u8 *ie, *p;
18166 + u32 len;
18167 + RT_CHANNEL_PLAN chplan_ap;
18168 + RT_CHANNEL_INFO chplan_sta[MAX_CHANNEL_NUM];
18169 + u8 country[4];
18170 + u8 fcn; // first channel number
18171 + u8 noc; // number of channel
18172 + u8 j, k;
18173 +
18174 + ie = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _COUNTRY_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
18175 + if (!ie) return;
18176 + if (len < 6) return;
18177 +
18178 + ie += 2;
18179 + p = ie;
18180 + ie += len;
18181 +
18182 + _rtw_memset(country, 0, 4);
18183 + _rtw_memcpy(country, p, 3);
18184 + p += 3;
18185 + RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
18186 + ("%s: 802.11d country=%s\n", __FUNCTION__, country));
18187 +
18188 + i = 0;
18189 + while ((ie - p) >= 3)
18190 + {
18191 + fcn = *(p++);
18192 + noc = *(p++);
18193 + p++;
18194 +
18195 + for (j = 0; j < noc; j++)
18196 + {
18197 + if (fcn <= 14) channel = fcn + j; // 2.4 GHz
18198 + else channel = fcn + j*4; // 5 GHz
18199 +
18200 + chplan_ap.Channel[i++] = channel;
18201 + }
18202 + }
18203 + chplan_ap.Len = i;
18204 +
18205 +#ifdef CONFIG_DEBUG_RTL871X
18206 +#ifdef PLATFORM_LINUX
18207 + i = 0;
18208 + printk("%s: AP[%s] channel plan {", __func__, bssid->Ssid.Ssid);
18209 + while ((i < chplan_ap.Len) && (chplan_ap.Channel[i] != 0))
18210 + {
18211 + printk("%02d,", chplan_ap.Channel[i]);
18212 + i++;
18213 + }
18214 + printk("}\n");
18215 +#endif
18216 +#endif
18217 +
18218 + _rtw_memcpy(chplan_sta, pmlmeext->channel_set, sizeof(chplan_sta));
18219 +#ifdef CONFIG_DEBUG_RTL871X
18220 +#ifdef PLATFORM_LINUX
18221 + i = 0;
18222 + printk("%s: STA channel plan {", __func__);
18223 + while ((i < MAX_CHANNEL_NUM) && (chplan_sta[i].ChannelNum != 0))
18224 + {
18225 + printk("%02d(%c),", chplan_sta[i].ChannelNum, chplan_sta[i].ScanType==SCAN_PASSIVE?'p':'a');
18226 + i++;
18227 + }
18228 + printk("}\n");
18229 +#endif
18230 +#endif
18231 +
18232 + _rtw_memset(pmlmeext->channel_set, 0, sizeof(pmlmeext->channel_set));
18233 + chplan_new = pmlmeext->channel_set;
18234 +
18235 + i = j = k = 0;
18236 + if (pregistrypriv->wireless_mode & WIRELESS_11G)
18237 + {
18238 + do {
18239 + if ((i == MAX_CHANNEL_NUM) ||
18240 + (chplan_sta[i].ChannelNum == 0) ||
18241 + (chplan_sta[i].ChannelNum > 14))
18242 + break;
18243 +
18244 + if ((j == chplan_ap.Len) || (chplan_ap.Channel[j] > 14))
18245 + break;
18246 +
18247 + if (chplan_sta[i].ChannelNum == chplan_ap.Channel[j])
18248 + {
18249 + chplan_new[k].ChannelNum = chplan_ap.Channel[j];
18250 + chplan_new[k].ScanType = SCAN_ACTIVE;
18251 + i++;
18252 + j++;
18253 + k++;
18254 + }
18255 + else if (chplan_sta[i].ChannelNum < chplan_ap.Channel[j])
18256 + {
18257 + chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
18258 +// chplan_new[k].ScanType = chplan_sta[i].ScanType;
18259 + chplan_new[k].ScanType = SCAN_PASSIVE;
18260 + i++;
18261 + k++;
18262 + }
18263 + else if (chplan_sta[i].ChannelNum > chplan_ap.Channel[j])
18264 + {
18265 + chplan_new[k].ChannelNum = chplan_ap.Channel[j];
18266 + chplan_new[k].ScanType = SCAN_ACTIVE;
18267 + j++;
18268 + k++;
18269 + }
18270 + } while (1);
18271 +
18272 + // change AP not support channel to Passive scan
18273 + while ((i < MAX_CHANNEL_NUM) &&
18274 + (chplan_sta[i].ChannelNum != 0) &&
18275 + (chplan_sta[i].ChannelNum <= 14))
18276 + {
18277 + chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
18278 +// chplan_new[k].ScanType = chplan_sta[i].ScanType;
18279 + chplan_new[k].ScanType = SCAN_PASSIVE;
18280 + i++;
18281 + k++;
18282 + }
18283 +
18284 + // add channel AP supported
18285 + while ((j < chplan_ap.Len) && (chplan_ap.Channel[j] <= 14))
18286 + {
18287 + chplan_new[k].ChannelNum = chplan_ap.Channel[j];
18288 + chplan_new[k].ScanType = SCAN_ACTIVE;
18289 + j++;
18290 + k++;
18291 + }
18292 + }
18293 + else
18294 + {
18295 + // keep original STA 2.4G channel plan
18296 + while ((i < MAX_CHANNEL_NUM) &&
18297 + (chplan_sta[i].ChannelNum != 0) &&
18298 + (chplan_sta[i].ChannelNum <= 14))
18299 + {
18300 + chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
18301 + chplan_new[k].ScanType = chplan_sta[i].ScanType;
18302 + i++;
18303 + k++;
18304 + }
18305 +
18306 + // skip AP 2.4G channel plan
18307 + while ((j < chplan_ap.Len) && (chplan_ap.Channel[j] <= 14))
18308 + {
18309 + j++;
18310 + }
18311 + }
18312 +
18313 + if (pregistrypriv->wireless_mode & WIRELESS_11A)
18314 + {
18315 + do {
18316 + if ((i == MAX_CHANNEL_NUM) ||
18317 + (chplan_sta[i].ChannelNum == 0))
18318 + break;
18319 +
18320 + if ((j == chplan_ap.Len) || (chplan_ap.Channel[j] == 0))
18321 + break;
18322 +
18323 + if (chplan_sta[i].ChannelNum == chplan_ap.Channel[j])
18324 + {
18325 + chplan_new[k].ChannelNum = chplan_ap.Channel[j];
18326 + chplan_new[k].ScanType = SCAN_ACTIVE;
18327 + i++;
18328 + j++;
18329 + k++;
18330 + }
18331 + else if (chplan_sta[i].ChannelNum < chplan_ap.Channel[j])
18332 + {
18333 + chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
18334 +// chplan_new[k].ScanType = chplan_sta[i].ScanType;
18335 + chplan_new[k].ScanType = SCAN_PASSIVE;
18336 + i++;
18337 + k++;
18338 + }
18339 + else if (chplan_sta[i].ChannelNum > chplan_ap.Channel[j])
18340 + {
18341 + chplan_new[k].ChannelNum = chplan_ap.Channel[j];
18342 + chplan_new[k].ScanType = SCAN_ACTIVE;
18343 + j++;
18344 + k++;
18345 + }
18346 + } while (1);
18347 +
18348 + // change AP not support channel to Passive scan
18349 + while ((i < MAX_CHANNEL_NUM) && (chplan_sta[i].ChannelNum != 0))
18350 + {
18351 + chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
18352 +// chplan_new[k].ScanType = chplan_sta[i].ScanType;
18353 + chplan_new[k].ScanType = SCAN_PASSIVE;
18354 + i++;
18355 + k++;
18356 + }
18357 +
18358 + // add channel AP supported
18359 + while ((j < chplan_ap.Len) && (chplan_ap.Channel[j] != 0))
18360 + {
18361 + chplan_new[k].ChannelNum = chplan_ap.Channel[j];
18362 + chplan_new[k].ScanType = SCAN_ACTIVE;
18363 + j++;
18364 + k++;
18365 + }
18366 + }
18367 + else
18368 + {
18369 + // keep original STA 5G channel plan
18370 + while ((i < MAX_CHANNEL_NUM) && (chplan_sta[i].ChannelNum != 0))
18371 + {
18372 + chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
18373 + chplan_new[k].ScanType = chplan_sta[i].ScanType;
18374 + i++;
18375 + k++;
18376 + }
18377 + }
18378 +
18379 + pmlmeext->update_channel_plan_by_ap_done = 1;
18380 +
18381 +#ifdef CONFIG_DEBUG_RTL871X
18382 +#ifdef PLATFORM_LINUX
18383 + k = 0;
18384 + printk("%s: new STA channel plan {", __func__);
18385 + while ((k < MAX_CHANNEL_NUM) && (chplan_new[k].ChannelNum != 0))
18386 + {
18387 + printk("%02d(%c),", chplan_new[k].ChannelNum, chplan_new[k].ScanType==SCAN_PASSIVE?'p':'c');
18388 + k++;
18389 + }
18390 + printk("}\n");
18391 +#endif
18392 +#endif
18393 +
18394 +#if 0
18395 + // recover the right channel index
18396 + channel = chplan_sta[pmlmeext->sitesurvey_res.channel_idx].ChannelNum;
18397 + k = 0;
18398 + while ((k < MAX_CHANNEL_NUM) && (chplan_new[k].ChannelNum != 0))
18399 + {
18400 + if (chplan_new[k].ChannelNum == channel) {
18401 + RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
18402 + ("%s: change mlme_ext sitesurvey channel index from %d to %d\n",
18403 + __FUNCTION__, pmlmeext->sitesurvey_res.channel_idx, k));
18404 + pmlmeext->sitesurvey_res.channel_idx = k;
18405 + break;
18406 + }
18407 + k++;
18408 + }
18409 +#endif
18410 + }
18411 +
18412 + // If channel is used by AP, set channel scan type to active
18413 + channel = bssid->Configuration.DSConfig;
18414 + chplan_new = pmlmeext->channel_set;
18415 + i = 0;
18416 + while ((i < MAX_CHANNEL_NUM) && (chplan_new[i].ChannelNum != 0))
18417 + {
18418 + if (chplan_new[i].ChannelNum == channel)
18419 + {
18420 + if (chplan_new[i].ScanType == SCAN_PASSIVE)
18421 + {
18422 + //5G Bnad 2, 3 (DFS) doesn't change to active scan
18423 + if(channel >= 52 && channel <= 144)
18424 + break;
18425 +
18426 + chplan_new[i].ScanType = SCAN_ACTIVE;
18427 + RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
18428 + ("%s: change channel %d scan type from passive to active\n",
18429 + __FUNCTION__, channel));
18430 + }
18431 + break;
18432 + }
18433 + i++;
18434 + }
18435 +}
18436 +#endif
18437 +
18438 +/****************************************************************************
18439 +
18440 +Following are the functions to report events
18441 +
18442 +*****************************************************************************/
18443 +
18444 +void report_survey_event(_adapter *padapter, union recv_frame *precv_frame)
18445 +{
18446 + struct cmd_obj *pcmd_obj;
18447 + u8 *pevtcmd;
18448 + u32 cmdsz;
18449 + struct survey_event *psurvey_evt;
18450 struct C2HEvent_Header *pc2h_evt_hdr;
18451 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18452 - struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
18453 + struct mlme_ext_priv *pmlmeext;
18454 + struct cmd_priv *pcmdpriv;
18455 //u8 *pframe = precv_frame->u.hdr.rx_data;
18456 //uint len = precv_frame->u.hdr.len;
18457
18458 + if(!padapter)
18459 + return;
18460 +
18461 + pmlmeext = &padapter->mlmeextpriv;
18462 + pcmdpriv = &padapter->cmdpriv;
18463 +
18464 +
18465 if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
18466 {
18467 return;
18468 @@ -8168,6 +10193,10 @@ void report_survey_event(_adapter *padapter, union recv_frame *precv_frame)
18469 return;
18470 }
18471
18472 +#ifdef CONFIG_80211D
18473 + process_80211d(padapter, &psurvey_evt->bss);
18474 +#endif
18475 +
18476 rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
18477
18478 pmlmeext->sitesurvey_res.bss_cnt++;
18479 @@ -8215,7 +10244,7 @@ void report_surveydone_event(_adapter *padapter)
18480 psurveydone_evt = (struct surveydone_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
18481 psurveydone_evt->bss_cnt = pmlmeext->sitesurvey_res.bss_cnt;
18482
18483 - DBG_871X("survey done event(%x)\n", psurveydone_evt->bss_cnt);
18484 + DBG_871X("survey done event(%x) band:%d for "ADPT_FMT"\n", psurveydone_evt->bss_cnt, padapter->setband, ADPT_ARG(padapter));
18485
18486 rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
18487
18488 @@ -8265,11 +10294,11 @@ void report_join_res(_adapter *padapter, int res)
18489 pjoinbss_evt->network.join_res = pjoinbss_evt->network.aid = res;
18490
18491 DBG_871X("report_join_res(%d)\n", res);
18492 -
18493 +
18494
18495 rtw_joinbss_event_prehandle(padapter, (u8 *)&pjoinbss_evt->network);
18496
18497 -
18498 +
18499 rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
18500
18501 return;
18502 @@ -8281,10 +10310,11 @@ void report_del_sta_event(_adapter *padapter, unsigned char* MacAddr, unsigned s
18503 struct cmd_obj *pcmd_obj;
18504 u8 *pevtcmd;
18505 u32 cmdsz;
18506 + struct sta_info *psta;
18507 + int mac_id;
18508 struct stadel_event *pdel_sta_evt;
18509 struct C2HEvent_Header *pc2h_evt_hdr;
18510 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18511 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18512 struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
18513
18514 if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
18515 @@ -8317,7 +10347,16 @@ void report_del_sta_event(_adapter *padapter, unsigned char* MacAddr, unsigned s
18516 _rtw_memcpy((unsigned char *)(&(pdel_sta_evt->macaddr)), MacAddr, ETH_ALEN);
18517 _rtw_memcpy((unsigned char *)(pdel_sta_evt->rsvd),(unsigned char *)(&reason),2);
18518
18519 - DBG_871X("report_del_sta_event: delete STA\n");
18520 +
18521 + psta = rtw_get_stainfo(&padapter->stapriv, MacAddr);
18522 + if(psta)
18523 + mac_id = (int)psta->mac_id;
18524 + else
18525 + mac_id = (-1);
18526 +
18527 + pdel_sta_evt->mac_id = mac_id;
18528 +
18529 + DBG_871X("report_del_sta_event: delete STA, mac_id=%d\n", mac_id);
18530
18531 rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
18532
18533 @@ -8332,7 +10371,6 @@ void report_add_sta_event(_adapter *padapter, unsigned char* MacAddr, int cam_id
18534 struct stassoc_event *padd_sta_evt;
18535 struct C2HEvent_Header *pc2h_evt_hdr;
18536 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18537 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18538 struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
18539
18540 if ((pcmd_obj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
18541 @@ -8431,8 +10469,6 @@ void update_sta_info(_adapter *padapter, struct sta_info *psta)
18542
18543 }
18544
18545 -u8 null_addr[ETH_ALEN]= {0,0,0,0,0,0};
18546 -
18547 void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
18548 {
18549 struct sta_info *psta, *psta_bmc;
18550 @@ -8440,14 +10476,25 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
18551 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18552 WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
18553 struct sta_priv *pstapriv = &padapter->stapriv;
18554 - u8 join_type, init_rts_rate;
18555 + u8 join_type;
18556
18557 if(join_res < 0)
18558 {
18559 join_type = 1;
18560 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
18561 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, null_addr);
18562 - return;
18563 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
18564 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, null_addr);
18565 +
18566 + //restore to initial setting.
18567 + update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
18568 +#if 0 //temply remove
18569 +#ifdef CONFIG_INTEL_WIDI
18570 +#ifdef DBG_CONFIG_ERROR_DETECT
18571 + DBG_871X("%s(): do silentreset\n",__FUNCTION__);
18572 + rtw_hal_sreset_reset(padapter);
18573 +#endif
18574 +#endif
18575 +#endif
18576 + goto exit_mlmeext_joinbss_event_callback;
18577 }
18578
18579 if((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)
18580 @@ -8469,10 +10516,10 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
18581 // update IOT-releated issue
18582 update_IOT_info(padapter);
18583
18584 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BASIC_RATE, cur_network->SupportedRates);
18585 + rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, cur_network->SupportedRates);
18586
18587 //BCN interval
18588 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BEACON_INTERVAL, (u8 *)(&pmlmeinfo->bcn_interval));
18589 + rtw_hal_set_hwreg(padapter, HW_VAR_BEACON_INTERVAL, (u8 *)(&pmlmeinfo->bcn_interval));
18590
18591 //udpate capability
18592 update_capinfo(padapter, pmlmeinfo->capability);
18593 @@ -8483,10 +10530,11 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
18594 //HT
18595 HTOnAssocRsp(padapter);
18596
18597 -
18598 +#ifndef CONFIG_CONCURRENT_MODE
18599 + // Call set_channel_bwmode when the CONFIG_CONCURRENT_MODE doesn't be defined.
18600 //Set cur_channel&cur_bwmode&cur_ch_offset
18601 set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
18602 -
18603 +#endif
18604
18605 psta = rtw_get_stainfo(pstapriv, cur_network->MacAddress);
18606 if (psta) //only for infra. mode
18607 @@ -8496,11 +10544,11 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
18608 //DBG_871X("set_sta_rate\n");
18609
18610 //set per sta rate after updating HT cap.
18611 - set_sta_rate(padapter, psta);
18612 + set_sta_rate(padapter, psta);
18613 }
18614
18615 join_type = 2;
18616 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
18617 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
18618
18619 if((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE)
18620 {
18621 @@ -8513,7 +10561,16 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
18622 #ifdef CONFIG_LPS
18623 rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_CONNECT, 0);
18624 #endif
18625 -
18626 +
18627 +exit_mlmeext_joinbss_event_callback:
18628 +
18629 +#ifdef CONFIG_DUALMAC_CONCURRENT
18630 + dc_handle_join_done(padapter, join_res);
18631 +#endif
18632 +#ifdef CONFIG_CONCURRENT_MODE
18633 + concurrent_chk_joinbss_done(padapter, join_res);
18634 +#endif
18635 +
18636 DBG_871X("=>%s\n", __FUNCTION__);
18637
18638 }
18639 @@ -8555,7 +10612,7 @@ void mlmeext_sta_add_event_callback(_adapter *padapter, struct sta_info *psta)
18640 }
18641
18642 join_type = 2;
18643 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
18644 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
18645 }
18646
18647 pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
18648 @@ -8577,21 +10634,38 @@ void mlmeext_sta_del_event_callback(_adapter *padapter)
18649 {
18650 //set_opmode_cmd(padapter, infra_client_with_mlme);
18651
18652 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_DISCONNECT, 0);
18653 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, null_addr);
18654 +
18655 + //restore to initial setting.
18656 + update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
18657 +
18658 +#ifdef CONFIG_DUALMAC_CONCURRENT
18659 + dc_set_channel_bwmode_disconnect(padapter);
18660 +#else
18661 +#ifdef CONFIG_CONCURRENT_MODE
18662 + if((check_buddy_fwstate(padapter, _FW_LINKED)) != _TRUE)
18663 + {
18664 +#endif //CONFIG_CONCURRENT_MODE
18665 +
18666 //switch to the 20M Hz mode after disconnect
18667 pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
18668 pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
18669
18670 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_DISCONNECT, 0);
18671 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, null_addr);
18672 -
18673 //SelectChannel(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset);
18674 set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
18675 +
18676 +#ifdef CONFIG_CONCURRENT_MODE
18677 + }
18678 +#endif //CONFIG_CONCURRENT_MODE
18679 +#endif //CONFIG_DUALMAC_CONCURRENT
18680 +
18681 flush_all_cam_entry(padapter);
18682
18683 pmlmeinfo->state = WIFI_FW_NULL_STATE;
18684
18685 - //set MSR to no link state
18686 - Set_NETYPE0_MSR(padapter, _HW_STATE_NOLINK_);
18687 + //set MSR to no link state -> infra. mode
18688 + Set_MSR(padapter, _HW_STATE_STATION_);
18689
18690 _cancel_timer_ex(&pmlmeext->link_timer);
18691
18692 @@ -8604,27 +10678,94 @@ void mlmeext_sta_del_event_callback(_adapter *padapter)
18693 Following are the functions for the timer handlers
18694
18695 *****************************************************************************/
18696 -
18697 +void _linked_rx_signal_strehgth_display(_adapter *padapter);
18698 void _linked_rx_signal_strehgth_display(_adapter *padapter)
18699 {
18700 int UndecoratedSmoothedPWDB;
18701 - DBG_8192C("============ linked status check ===================\n");
18702 - DBG_8192C("pathA Rx SNRdb:%d, pathB Rx SNRdb:%d\n",padapter->recvpriv.RxSNRdB[0],padapter->recvpriv.RxSNRdB[1]);
18703 - DBG_8192C("pathA Rx RSSI:%d,pathB Rx RSSI:%d\n",padapter->recvpriv.RxRssi[0],padapter->recvpriv.RxRssi[1]);
18704 -
18705 - DBG_8192C("pathA Rx PWDB:%d\n",padapter->recvpriv.rxpwdb);
18706 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);
18707 - DBG_8192C("UndecoratedSmoothedPWDB:%d\n",UndecoratedSmoothedPWDB);
18708 - DBG_8192C("Rx RSSI:%d\n",padapter->recvpriv.rssi);
18709 - DBG_8192C("Rx Signal_strength:%d\n",padapter->recvpriv.signal_strength);
18710 - DBG_8192C("Rx Signal_qual:%d \n",padapter->recvpriv.signal_qual);
18711 - DBG_8192C("============ linked status check ===================\n");
18712 - DBG_8192C(" DIG PATH-A(0x%02x), PATH-B(0x%02x)\n",rtw_read8(padapter,0xc50),rtw_read8(padapter,0xc58));
18713 - DBG_8192C(" OFDM -Alarm DA2(0x%04x),DA4(0x%04x),DA6(0x%04x),DA8(0x%04x)\n",
18714 +
18715 +#ifdef CONFIG_CONCURRENT_MODE
18716 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
18717 + DBG_871X("============ pbuddy_adapter linked status check ===================\n");
18718 + DBG_871X("buddy_adapter_type=%d\n", pbuddy_adapter->adapter_type);
18719 + DBG_871X("pbuddy_adapter pathA Rx SNRdb:%d\n",pbuddy_adapter->recvpriv.RxSNRdB[0]);
18720 + DBG_871X("pbuddy_adapter pathA Rx PWDB:%d\n",pbuddy_adapter->recvpriv.rxpwdb);
18721 + DBG_871X("pbuddy_adapter pathA Rx RSSI:%d,pathB Rx RSSI:%d\n"
18722 + ,pbuddy_adapter->recvpriv.RxRssi[0],pbuddy_adapter->recvpriv.RxRssi[1]);
18723 + rtw_hal_get_def_var(pbuddy_adapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);
18724 + DBG_871X("pbuddy_adapter UndecoratedSmoothedPWDB:%d\n",UndecoratedSmoothedPWDB);
18725 + DBG_871X("Rx RSSI:%d\n",pbuddy_adapter->recvpriv.rssi);
18726 + DBG_871X("Rx Signal_strength:%d\n",pbuddy_adapter->recvpriv.signal_strength);
18727 + DBG_871X("Rx Signal_qual:%d \n",pbuddy_adapter->recvpriv.signal_qual);
18728 + DBG_871X("============ linked status check ===================\n");
18729 + DBG_871X("adapter_type=%d\n", padapter->adapter_type);
18730 +#else //CONFIG_CONCURRENT_MODE
18731 + DBG_871X("============ linked status check ===================\n");
18732 +#endif //CONFIG_CONCURRENT_MODE
18733 + DBG_871X("pathA Rx SNRdb:%d, pathB Rx SNRdb:%d\n",padapter->recvpriv.RxSNRdB[0], padapter->recvpriv.RxSNRdB[1]);
18734 + DBG_871X("pathA Rx PWDB:%d\n",padapter->recvpriv.rxpwdb);
18735 + DBG_871X("pathA Rx RSSI:%d,pathB Rx RSSI:%d\n",padapter->recvpriv.RxRssi[0],padapter->recvpriv.RxRssi[1]);
18736 + rtw_hal_get_def_var(padapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);
18737 + DBG_871X("UndecoratedSmoothedPWDB:%d\n",UndecoratedSmoothedPWDB);
18738 + DBG_871X("Rx RSSI:%d\n",padapter->recvpriv.rssi);
18739 + DBG_871X("Rx Signal_strength:%d\n",padapter->recvpriv.signal_strength);
18740 + DBG_871X("Rx Signal_qual:%d \n",padapter->recvpriv.signal_qual);
18741 + if ( check_fwstate( &padapter->mlmepriv, _FW_LINKED ))
18742 + {
18743 + DBG_871X("bw mode: %d, channel: %d\n", padapter->mlmeextpriv.cur_bwmode, padapter->mlmeextpriv.cur_channel );
18744 + DBG_871X("received bytes = %d\n", (u32) (padapter->recvpriv.rx_bytes - padapter->recvpriv.last_rx_bytes ) );
18745 + }
18746 + DBG_871X("============ linked status check ===================\n");
18747 + DBG_871X(" DIG PATH-A(0x%02x), PATH-B(0x%02x)\n",rtw_read8(padapter,0xc50),rtw_read8(padapter,0xc58));
18748 + DBG_871X(" OFDM -Alarm DA2(0x%04x),DA4(0x%04x),DA6(0x%04x),DA8(0x%04x)\n",
18749 rtw_read16(padapter,0xDA2),rtw_read16(padapter,0xDA4),rtw_read16(padapter,0xDA6),rtw_read16(padapter,0xDA8));
18750
18751 - DBG_8192C(" CCK -Alarm A5B(0x%02x),A5C(0x%02x)\n",rtw_read8(padapter,0xA5B),rtw_read8(padapter,0xA5C));
18752 - DBG_8192C(" FalseAlmCnt_all(%d)\n",padapter->recvpriv.FalseAlmCnt_all);
18753 + DBG_871X(" CCK -Alarm A5B(0x%02x),A5C(0x%02x)\n",rtw_read8(padapter,0xA5B),rtw_read8(padapter,0xA5C));
18754 + DBG_871X(" FalseAlmCnt_all(%d)\n",padapter->recvpriv.FalseAlmCnt_all);
18755 +
18756 +}
18757 +
18758 +u8 chk_ap_is_alive(_adapter *padapter, struct sta_info *psta)
18759 +{
18760 + u8 ret = _FALSE;
18761 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18762 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18763 +
18764 + #ifdef DBG_EXPIRATION_CHK
18765 + DBG_871X(FUNC_ADPT_FMT" rx:"STA_PKTS_FMT", beacon:%llu, probersp_to_self:%llu"
18766 + /*", probersp_bm:%llu, probersp_uo:%llu, probereq:%llu, BI:%u"*/
18767 + ", retry:%u\n"
18768 + , FUNC_ADPT_ARG(padapter)
18769 + , STA_RX_PKTS_DIFF_ARG(psta)
18770 + , psta->sta_stats.rx_beacon_pkts - psta->sta_stats.last_rx_beacon_pkts
18771 + , psta->sta_stats.rx_probersp_pkts - psta->sta_stats.last_rx_probersp_pkts
18772 + /*, psta->sta_stats.rx_probersp_bm_pkts - psta->sta_stats.last_rx_probersp_bm_pkts
18773 + , psta->sta_stats.rx_probersp_uo_pkts - psta->sta_stats.last_rx_probersp_uo_pkts
18774 + , psta->sta_stats.rx_probereq_pkts - psta->sta_stats.last_rx_probereq_pkts
18775 + , pmlmeinfo->bcn_interval*/
18776 + , pmlmeext->retry
18777 + );
18778 +
18779 + DBG_871X(FUNC_ADPT_FMT" tx_pkts:%llu, link_count:%u\n", FUNC_ADPT_ARG(padapter)
18780 + , padapter->xmitpriv.tx_pkts
18781 + , pmlmeinfo->link_count
18782 + );
18783 + #endif
18784 +
18785 + if((sta_rx_data_pkts(psta) == sta_last_rx_data_pkts(psta))
18786 + && sta_rx_beacon_pkts(psta) == sta_last_rx_beacon_pkts(psta)
18787 + && sta_rx_probersp_pkts(psta) == sta_last_rx_probersp_pkts(psta)
18788 + )
18789 + {
18790 + ret = _FALSE;
18791 + }
18792 + else
18793 + {
18794 + ret = _TRUE;
18795 + }
18796 +
18797 + sta_update_last_rx_pkts(psta);
18798 +
18799 + return ret;
18800 }
18801
18802 void linked_status_chk(_adapter *padapter)
18803 @@ -8632,110 +10773,116 @@ void linked_status_chk(_adapter *padapter)
18804 u32 i;
18805 struct sta_info *psta;
18806 struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
18807 - struct recv_priv *precvpriv = &(padapter->recvpriv);
18808 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
18809 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
18810 struct sta_priv *pstapriv = &padapter->stapriv;
18811 - struct registry_priv *pregistrypriv = &padapter->registrypriv;
18812
18813 if(padapter->bRxRSSIDisplay)
18814 - _linked_rx_signal_strehgth_display(padapter);
18815 + _linked_rx_signal_strehgth_display(padapter);
18816 +
18817 + #ifdef DBG_CONFIG_ERROR_DETECT
18818 + rtw_hal_sreset_linked_status_check(padapter);
18819 + #endif
18820
18821 if (is_client_associated_to_ap(padapter))
18822 {
18823 //linked infrastructure client mode
18824 +
18825 + int tx_chk = _SUCCESS, rx_chk = _SUCCESS;
18826 + int rx_chk_limit;
18827 +
18828 + #if defined(DBG_ROAMING_TEST)
18829 + rx_chk_limit = 1;
18830 + #elif defined(CONFIG_ACTIVE_KEEP_ALIVE_CHECK)
18831 + rx_chk_limit = 4;
18832 + #else
18833 + rx_chk_limit = 8;
18834 + #endif
18835 +
18836 + // Marked by Kurt 20130715
18837 + // 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.
18838 + // todo: To check why rx_chk would be _FALSE under miracast session.
18839 + //#ifdef CONFIG_INTEL_WIDI
18840 + //if (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_NONE)
18841 + // rx_chk_limit = 1;
18842 + //#endif
18843 +
18844 if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
18845 {
18846 - #ifdef DBG_EXPIRATION_CHK
18847 - DBG_871X("%s rx:"STA_PKTS_FMT", BI:%u, retry:%u\n"
18848 - , __FUNCTION__
18849 - , STA_RX_PKTS_ARG(psta)
18850 - , pmlmeinfo->bcn_interval
18851 - , pmlmeext->retry
18852 - );
18853 + bool is_p2p_enable = _FALSE;
18854 + #ifdef CONFIG_P2P
18855 + is_p2p_enable = !rtw_p2p_chk_state(&padapter->wdinfo, P2P_STATE_NONE);
18856 #endif
18857 +
18858 + if (chk_ap_is_alive(padapter, psta) == _FALSE)
18859 + rx_chk = _FAIL;
18860
18861 - /*to monitor whether the AP is alive or not*/
18862 - if (sta_last_rx_pkts(psta) == sta_rx_pkts(psta))
18863 - {
18864 - // Commented by Albert 2010/07/21
18865 - // In this case, there is no any rx packet received by driver.
18866 + if (pxmitpriv->last_tx_pkts == pxmitpriv->tx_pkts)
18867 + tx_chk = _FAIL;
18868
18869 - #ifdef DBG_ROAMING_TEST
18870 - if(pmlmeext->retry<1)
18871 - #else
18872 - if(pmlmeext->retry<8)// Alter the retry limit to 8
18873 - #endif
18874 - {
18875 - if(pmlmeext->retry==0)
18876 - {
18877 - #ifdef DBG_CONFIG_ERROR_DETECT
18878 - if(padapter->HalFunc.sreset_linked_status_check)
18879 - padapter->HalFunc.sreset_linked_status_check(padapter);
18880 - #endif
18881 + #ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
18882 + if (pmlmeext->active_keep_alive_check && (rx_chk == _FAIL || tx_chk == _FAIL)) {
18883 + u8 backup_oper_channel=0;
18884
18885 - // In order to know the AP's current state, try to send the probe request
18886 - // to trigger the AP to send the probe response.
18887 - #ifdef CONFIG_P2P
18888 - if(!rtw_p2p_chk_state(&padapter->wdinfo, P2P_STATE_NONE)) {
18889 - #ifdef DBG_EXPIRATION_CHK
18890 - DBG_871X("issue_probereq_p2p to trigger probersp, retry=%d\n", pmlmeext->retry);
18891 - #endif
18892 - issue_probereq_p2p(padapter);
18893 - } else
18894 - #endif
18895 - {
18896 - #ifdef DBG_EXPIRATION_CHK
18897 - DBG_871X("issue_probereq to trigger probersp, retry=%d\n", pmlmeext->retry);
18898 - #endif
18899 - issue_probereq(padapter, &(pmlmeinfo->network.Ssid), 0);
18900 - issue_probereq(padapter, &(pmlmeinfo->network.Ssid), 0);
18901 - issue_probereq(padapter, &(pmlmeinfo->network.Ssid), 0);
18902 - }
18903 - }
18904 -
18905 - pmlmeext->retry++;
18906 + /* switch to correct channel of current network before issue keep-alive frames */
18907 + if (rtw_get_oper_ch(padapter) != pmlmeext->cur_channel) {
18908 + backup_oper_channel = rtw_get_oper_ch(padapter);
18909 + SelectChannel(padapter, pmlmeext->cur_channel);
18910 }
18911 - else
18912 - {
18913 - pmlmeext->retry = 0;
18914 - DBG_871X("no beacon to call receive_disconnect()\n");
18915 - receive_disconnect(padapter, pmlmeinfo->network.MacAddress
18916 - , 65535// indicate disconnect caused by no rx
18917 - );
18918 - pmlmeinfo->link_count = 0;
18919 - return;
18920 +
18921 + if (rx_chk != _SUCCESS)
18922 + issue_probereq_ex(padapter, &pmlmeinfo->network.Ssid, psta->hwaddr, 3, 1);
18923 +
18924 + if ((tx_chk != _SUCCESS && pmlmeinfo->link_count++ == 0xf) || rx_chk != _SUCCESS) {
18925 + tx_chk = issue_nulldata(padapter, psta->hwaddr, 0, 3, 1);
18926 + /* if tx acked and p2p disabled, set rx_chk _SUCCESS to reset retry count */
18927 + if (tx_chk == _SUCCESS && !is_p2p_enable)
18928 + rx_chk = _SUCCESS;
18929 }
18930 +
18931 + /* back to the original operation channel */
18932 + if(backup_oper_channel>0)
18933 + SelectChannel(padapter, backup_oper_channel);
18934 +
18935 }
18936 else
18937 + #endif /* CONFIG_ACTIVE_KEEP_ALIVE_CHECK */
18938 {
18939 - pmlmeext->retry = 0;
18940 - sta_update_last_rx_pkts(psta);
18941 - //set_link_timer(pmlmeext, DISCONNECT_TO);
18942 - }
18943 -
18944 - #ifdef DBG_EXPIRATION_CHK
18945 - DBG_871X("%s tx_pkts:%llu, link_count:%u\n", __FUNCTION__
18946 - , pxmitpriv->tx_pkts
18947 - , pmlmeinfo->link_count
18948 - );
18949 - #endif
18950 + if (rx_chk != _SUCCESS) {
18951 + if (pmlmeext->retry == 0) {
18952 + #ifdef DBG_EXPIRATION_CHK
18953 + DBG_871X("issue_probereq to trigger probersp, retry=%d\n", pmlmeext->retry);
18954 + #endif
18955 + issue_probereq(padapter, &pmlmeinfo->network.Ssid, pmlmeinfo->network.MacAddress);
18956 + issue_probereq(padapter, &pmlmeinfo->network.Ssid, pmlmeinfo->network.MacAddress);
18957 + issue_probereq(padapter, &pmlmeinfo->network.Ssid, pmlmeinfo->network.MacAddress);
18958 + }
18959 + }
18960
18961 - /*to send the AP a nulldata if no frame is xmitted in order to keep alive*/
18962 - if(pxmitpriv->last_tx_pkts == pxmitpriv->tx_pkts)
18963 - {
18964 - if(pmlmeinfo->link_count++ == 0xf)
18965 - {
18966 - //DBG_871X("(Interface %d)issue nulldata to keep alive\n",padapter->dvobjpriv.InterfaceNumber);
18967 + if (tx_chk != _SUCCESS && pmlmeinfo->link_count++ == 0xf) {
18968 #ifdef DBG_EXPIRATION_CHK
18969 DBG_871X("%s issue_nulldata 0\n", __FUNCTION__);
18970 #endif
18971 - issue_nulldata(padapter, 0);
18972 - pmlmeinfo->link_count = 0;
18973 + tx_chk = issue_nulldata(padapter, NULL, 0, 1, 0);
18974 }
18975 }
18976 - else
18977 - {
18978 +
18979 + if (rx_chk == _FAIL) {
18980 + pmlmeext->retry++;
18981 + if (pmlmeext->retry > rx_chk_limit) {
18982 + DBG_871X(FUNC_ADPT_FMT" disconnect or roaming\n",
18983 + FUNC_ADPT_ARG(padapter));
18984 + receive_disconnect(padapter, pmlmeinfo->network.MacAddress
18985 + , WLAN_REASON_EXPIRATION_CHK);
18986 + return;
18987 + }
18988 + } else {
18989 + pmlmeext->retry = 0;
18990 + }
18991 +
18992 + if (tx_chk == _FAIL) {
18993 + pmlmeinfo->link_count &= 0xf;
18994 + } else {
18995 pxmitpriv->last_tx_pkts = pxmitpriv->tx_pkts;
18996 pmlmeinfo->link_count = 0;
18997 }
18998 @@ -8789,19 +10936,41 @@ void survey_timer_hdl(_adapter *padapter)
18999 struct cmd_obj *ph2c;
19000 struct sitesurvey_parm *psurveyPara;
19001 struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
19002 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
19003 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19004 #ifdef CONFIG_P2P
19005 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
19006 #endif
19007
19008 - //DBG_8192C("marc: survey timer\n");
19009 + //DBG_871X("marc: survey timer\n");
19010 +#ifdef PLATFORM_FREEBSD
19011 + rtw_mtx_lock(NULL);
19012 + if (callout_pending(&padapter->mlmeextpriv.survey_timer.callout)) {
19013 + /* callout was reset */
19014 + //mtx_unlock(&sc->sc_mtx);
19015 + rtw_mtx_unlock(NULL);
19016 + return;
19017 + }
19018 + if (!callout_active(&padapter->mlmeextpriv.survey_timer.callout)) {
19019 + /* callout was stopped */
19020 + //mtx_unlock(&sc->sc_mtx);
19021 + rtw_mtx_unlock(NULL);
19022 + return;
19023 + }
19024 + callout_deactivate(&padapter->mlmeextpriv.survey_timer.callout);
19025 +
19026 +
19027 +#endif
19028
19029 //issue rtw_sitesurvey_cmd
19030 if (pmlmeext->sitesurvey_res.state > SCAN_START)
19031 {
19032 if(pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
19033 - pmlmeext->sitesurvey_res.channel_idx++;
19034 + {
19035 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
19036 + if( padapter->mlmeextpriv.mlmext_info.scan_cnt != RTW_SCAN_NUM_OF_CH )
19037 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
19038 + pmlmeext->sitesurvey_res.channel_idx++;
19039 + }
19040
19041 if(pmlmeext->scan_abort == _TRUE)
19042 {
19043 @@ -8818,7 +10987,7 @@ void survey_timer_hdl(_adapter *padapter)
19044 else
19045 #endif
19046 {
19047 - pmlmeext->sitesurvey_res.channel_idx = pmlmeext->max_chan_nums;
19048 + pmlmeext->sitesurvey_res.channel_idx = pmlmeext->sitesurvey_res.ch_num;
19049 DBG_871X("%s idx:%d\n", __FUNCTION__
19050 , pmlmeext->sitesurvey_res.channel_idx
19051 );
19052 @@ -8827,3204 +10996,2358 @@ void survey_timer_hdl(_adapter *padapter)
19053 pmlmeext->scan_abort = _FALSE;//reset
19054 }
19055
19056 - if ((ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
19057 - {
19058 - goto exit_survey_timer_hdl;
19059 - }
19060 -
19061 - if ((psurveyPara = (struct sitesurvey_parm*)rtw_zmalloc(sizeof(struct sitesurvey_parm))) == NULL)
19062 - {
19063 - rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
19064 - goto exit_survey_timer_hdl;
19065 - }
19066 -
19067 - init_h2fwcmd_w_parm_no_rsp(ph2c, psurveyPara, GEN_CMD_CODE(_SiteSurvey));
19068 - rtw_enqueue_cmd(pcmdpriv, ph2c);
19069 - }
19070 -
19071 -
19072 -exit_survey_timer_hdl:
19073 -
19074 - return;
19075 -}
19076 -
19077 -void link_timer_hdl(_adapter *padapter)
19078 -{
19079 - static unsigned int rx_pkt = 0;
19080 - static u64 tx_cnt = 0;
19081 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
19082 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19083 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19084 - struct sta_priv *pstapriv = &padapter->stapriv;
19085 -
19086 - if (pmlmeinfo->state & WIFI_FW_AUTH_NULL)
19087 - {
19088 - DBG_871X("link_timer_hdl:no beacon while connecting\n");
19089 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
19090 - report_join_res(padapter, -3);
19091 - }
19092 - else if (pmlmeinfo->state & WIFI_FW_AUTH_STATE)
19093 - {
19094 - //re-auth timer
19095 - if (++pmlmeinfo->reauth_count > REAUTH_LIMIT)
19096 - {
19097 - //if (pmlmeinfo->auth_algo != dot11AuthAlgrthm_Auto)
19098 - //{
19099 - pmlmeinfo->state = 0;
19100 - report_join_res(padapter, -1);
19101 - return;
19102 - //}
19103 - //else
19104 - //{
19105 - // pmlmeinfo->auth_algo = dot11AuthAlgrthm_Shared;
19106 - // pmlmeinfo->reauth_count = 0;
19107 - //}
19108 - }
19109 -
19110 - DBG_871X("link_timer_hdl: auth timeout and try again\n");
19111 - pmlmeinfo->auth_seq = 1;
19112 - issue_auth(padapter, NULL, 0);
19113 - set_link_timer(pmlmeext, REAUTH_TO);
19114 - }
19115 - else if (pmlmeinfo->state & WIFI_FW_ASSOC_STATE)
19116 - {
19117 - //re-assoc timer
19118 - if (++pmlmeinfo->reassoc_count > REASSOC_LIMIT)
19119 - {
19120 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
19121 - report_join_res(padapter, -2);
19122 - return;
19123 - }
19124 -
19125 - DBG_871X("link_timer_hdl: assoc timeout and try again\n");
19126 - issue_assocreq(padapter);
19127 - set_link_timer(pmlmeext, REASSOC_TO);
19128 - }
19129 -#if 0
19130 - else if (is_client_associated_to_ap(padapter))
19131 - {
19132 - //linked infrastructure client mode
19133 - if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
19134 - {
19135 - /*to monitor whether the AP is alive or not*/
19136 - if (rx_pkt == psta->sta_stats.rx_pkts)
19137 - {
19138 - receive_disconnect(padapter, pmlmeinfo->network.MacAddress);
19139 - return;
19140 - }
19141 - else
19142 - {
19143 - rx_pkt = psta->sta_stats.rx_pkts;
19144 - set_link_timer(pmlmeext, DISCONNECT_TO);
19145 - }
19146 -
19147 - //update the EDCA paramter according to the Tx/RX mode
19148 - update_EDCA_param(padapter);
19149 -
19150 - /*to send the AP a nulldata if no frame is xmitted in order to keep alive*/
19151 - if (pmlmeinfo->link_count++ == 0)
19152 - {
19153 - tx_cnt = pxmitpriv->tx_pkts;
19154 - }
19155 - else if ((pmlmeinfo->link_count & 0xf) == 0)
19156 - {
19157 - if (tx_cnt == pxmitpriv->tx_pkts)
19158 - {
19159 - issue_nulldata(padapter, 0);
19160 - }
19161 -
19162 - tx_cnt = pxmitpriv->tx_pkts;
19163 - }
19164 - } //end of if ((psta = rtw_get_stainfo(pstapriv, passoc_res->network.MacAddress)) != NULL)
19165 - }
19166 - else if (is_client_associated_to_ibss(padapter))
19167 - {
19168 - //linked IBSS mode
19169 - //for each assoc list entry to check the rx pkt counter
19170 - for (i = IBSS_START_MAC_ID; i < NUM_STA; i++)
19171 - {
19172 - if (pmlmeinfo->FW_sta_info[i].status == 1)
19173 - {
19174 - psta = pmlmeinfo->FW_sta_info[i].psta;
19175 -
19176 - if (pmlmeinfo->FW_sta_info[i].rx_pkt == psta->sta_stats.rx_pkts)
19177 - {
19178 - pmlmeinfo->FW_sta_info[i].status = 0;
19179 - report_del_sta_event(padapter, psta->hwaddr);
19180 - }
19181 - else
19182 - {
19183 - pmlmeinfo->FW_sta_info[i].rx_pkt = psta->sta_stats.rx_pkts;
19184 - }
19185 - }
19186 - }
19187 -
19188 - set_link_timer(pmlmeext, DISCONNECT_TO);
19189 - }
19190 -#endif
19191 -
19192 - return;
19193 -}
19194 -
19195 -void addba_timer_hdl(struct sta_info *psta)
19196 -{
19197 - u8 bitmap;
19198 - u16 tid;
19199 - struct ht_priv *phtpriv;
19200 -
19201 - if(!psta)
19202 - return;
19203 -
19204 - phtpriv = &psta->htpriv;
19205 -
19206 - if((phtpriv->ht_option==_TRUE) && (phtpriv->ampdu_enable==_TRUE))
19207 - {
19208 - if(phtpriv->candidate_tid_bitmap)
19209 - phtpriv->candidate_tid_bitmap=0x0;
19210 -
19211 - }
19212 -
19213 -}
19214 -
19215 -u8 NULL_hdl(_adapter *padapter, u8 *pbuf)
19216 -{
19217 - return H2C_SUCCESS;
19218 -}
19219 -
19220 -u8 setopmode_hdl(_adapter *padapter, u8 *pbuf)
19221 -{
19222 - u8 type;
19223 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19224 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19225 - struct setopmode_parm *psetop = (struct setopmode_parm *)pbuf;
19226 -
19227 - if(psetop->mode == Ndis802_11APMode)
19228 - {
19229 - pmlmeinfo->state = WIFI_FW_AP_STATE;
19230 - type = _HW_STATE_AP_;
19231 -#ifdef CONFIG_NATIVEAP_MLME
19232 - //start_ap_mode(padapter);
19233 -#endif
19234 - }
19235 - else if(psetop->mode == Ndis802_11Infrastructure)
19236 - {
19237 - type = _HW_STATE_STATION_;
19238 - }
19239 - else if(psetop->mode == Ndis802_11IBSS)
19240 - {
19241 - type = _HW_STATE_ADHOC_;
19242 - }
19243 - else
19244 - {
19245 - type = _HW_STATE_NOLINK_;
19246 - }
19247 -
19248 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_SET_OPMODE, (u8 *)(&type));
19249 - //Set_NETYPE0_MSR(padapter, type);
19250 -
19251 - return H2C_SUCCESS;
19252 -
19253 -}
19254 -
19255 -u8 createbss_hdl(_adapter *padapter, u8 *pbuf)
19256 -{
19257 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19258 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19259 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
19260 - struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf;
19261 - u32 initialgain;
19262 -
19263 -
19264 - if(pparm->network.InfrastructureMode == Ndis802_11APMode)
19265 - {
19266 -#ifdef CONFIG_AP_MODE
19267 -
19268 - if(pmlmeinfo->state == WIFI_FW_AP_STATE)
19269 - {
19270 - //todo:
19271 - return H2C_SUCCESS;
19272 - }
19273 -#endif
19274 - }
19275 -
19276 - //below is for ad-hoc master
19277 - if(pparm->network.InfrastructureMode == Ndis802_11IBSS)
19278 - {
19279 - rtw_joinbss_reset(padapter);
19280 -
19281 - pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
19282 - pmlmeext->cur_ch_offset= HAL_PRIME_CHNL_OFFSET_DONT_CARE;
19283 - pmlmeinfo->ERP_enable = 0;
19284 - pmlmeinfo->WMM_enable = 0;
19285 - pmlmeinfo->HT_enable = 0;
19286 - pmlmeinfo->HT_caps_enable = 0;
19287 - pmlmeinfo->HT_info_enable = 0;
19288 - pmlmeinfo->agg_enable_bitmap = 0;
19289 - pmlmeinfo->candidate_tid_bitmap = 0;
19290 -
19291 - //disable dynamic functions, such as high power, DIG
19292 - Save_DM_Func_Flag(padapter);
19293 - Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
19294 -
19295 - //config the initial gain under linking, need to write the BB registers
19296 - initialgain = 0x1E;
19297 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
19298 -
19299 - //cancel link timer
19300 - _cancel_timer_ex(&pmlmeext->link_timer);
19301 -
19302 - //clear CAM
19303 - flush_all_cam_entry(padapter);
19304 -
19305 - _rtw_memcpy(pnetwork, pbuf, FIELD_OFFSET(WLAN_BSSID_EX, IELength));
19306 - pnetwork->IELength = ((WLAN_BSSID_EX *)pbuf)->IELength;
19307 -
19308 - if(pnetwork->IELength>MAX_IE_SZ)//Check pbuf->IELength
19309 - return H2C_PARAMETERS_ERROR;
19310 -
19311 - _rtw_memcpy(pnetwork->IEs, ((WLAN_BSSID_EX *)pbuf)->IEs, pnetwork->IELength);
19312 -
19313 - start_create_ibss(padapter);
19314 -
19315 - }
19316 -
19317 - return H2C_SUCCESS;
19318 -
19319 -}
19320 -
19321 -u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf)
19322 -{
19323 - u8 join_type;
19324 - PNDIS_802_11_VARIABLE_IEs pIE;
19325 - struct registry_priv *pregpriv = &padapter->registrypriv;
19326 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19327 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19328 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
19329 - struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf;
19330 - u32 acparm, initialgain, i;
19331 -
19332 - //check already connecting to AP or not
19333 - if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)
19334 - {
19335 - if (pmlmeinfo->state & WIFI_FW_STATION_STATE)
19336 - {
19337 - issue_deauth(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING);
19338 - }
19339 -
19340 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
19341 -
19342 - //clear CAM
19343 - flush_all_cam_entry(padapter);
19344 -
19345 - _cancel_timer_ex(&pmlmeext->link_timer);
19346 -
19347 - //set MSR to nolink
19348 - Set_NETYPE0_MSR(padapter, _HW_STATE_NOLINK_);
19349 -
19350 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_DISCONNECT, 0);
19351 - }
19352 -
19353 -#ifdef CONFIG_ANTENNA_DIVERSITY
19354 - rtw_antenna_select_cmd(padapter, pparm->network.PhyInfo.Optimum_antenna, _FALSE);
19355 -#endif
19356 -
19357 - rtw_joinbss_reset(padapter);
19358 -
19359 - pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
19360 - pmlmeext->cur_ch_offset= HAL_PRIME_CHNL_OFFSET_DONT_CARE;
19361 - pmlmeinfo->ERP_enable = 0;
19362 - pmlmeinfo->WMM_enable = 0;
19363 - pmlmeinfo->HT_enable = 0;
19364 - pmlmeinfo->HT_caps_enable = 0;
19365 - pmlmeinfo->HT_info_enable = 0;
19366 - pmlmeinfo->agg_enable_bitmap = 0;
19367 - pmlmeinfo->candidate_tid_bitmap = 0;
19368 - pmlmeinfo->bwmode_updated = _FALSE;
19369 - //pmlmeinfo->assoc_AP_vendor = maxAP;
19370 -
19371 - _rtw_memcpy(pnetwork, pbuf, FIELD_OFFSET(WLAN_BSSID_EX, IELength));
19372 - pnetwork->IELength = ((WLAN_BSSID_EX *)pbuf)->IELength;
19373 -
19374 - if(pnetwork->IELength>MAX_IE_SZ)//Check pbuf->IELength
19375 - return H2C_PARAMETERS_ERROR;
19376 -
19377 - _rtw_memcpy(pnetwork->IEs, ((WLAN_BSSID_EX *)pbuf)->IEs, pnetwork->IELength);
19378 -
19379 - //Check AP vendor to move rtw_joinbss_cmd()
19380 - //pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->IEs, pnetwork->IELength);
19381 -
19382 - for (i = sizeof(NDIS_802_11_FIXED_IEs); i < pnetwork->IELength;)
19383 - {
19384 - pIE = (PNDIS_802_11_VARIABLE_IEs)(pnetwork->IEs + i);
19385 -
19386 - switch (pIE->ElementID)
19387 - {
19388 - case _VENDOR_SPECIFIC_IE_://Get WMM IE.
19389 - if ( _rtw_memcmp(pIE->data, WMM_OUI, 4) )
19390 - {
19391 - pmlmeinfo->WMM_enable = 1;
19392 - }
19393 - break;
19394 -
19395 - case _HT_CAPABILITY_IE_: //Get HT Cap IE.
19396 - pmlmeinfo->HT_caps_enable = 1;
19397 - break;
19398 -
19399 - case _HT_EXTRA_INFO_IE_: //Get HT Info IE.
19400 - pmlmeinfo->HT_info_enable = 1;
19401 -
19402 - //spec case only for cisco's ap because cisco's ap issue assoc rsp using mcs rate @40MHz or @20MHz
19403 - //if(pmlmeinfo->assoc_AP_vendor == ciscoAP)
19404 - {
19405 - struct HT_info_element *pht_info = (struct HT_info_element *)(pIE->data);
19406 -
19407 - if ((pregpriv->cbw40_enable) && (pht_info->infos[0] & BIT(2)))
19408 - {
19409 - //switch to the 40M Hz mode according to the AP
19410 - pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
19411 - switch (pht_info->infos[0] & 0x3)
19412 - {
19413 - case 1:
19414 - pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
19415 - break;
19416 -
19417 - case 3:
19418 - pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
19419 - break;
19420 -
19421 - default:
19422 - pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
19423 - break;
19424 - }
19425 -
19426 - DBG_871X("set ch/bw before connected\n");
19427 - }
19428 - }
19429 - break;
19430 -
19431 - default:
19432 - break;
19433 - }
19434 -
19435 - i += (pIE->Length + 2);
19436 - }
19437 -#if 0
19438 - if (padapter->registrypriv.wifi_spec) {
19439 - // for WiFi test, follow WMM test plan spec
19440 - acparm = 0x002F431C; // VO
19441 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
19442 - acparm = 0x005E541C; // VI
19443 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
19444 - acparm = 0x0000A525; // BE
19445 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
19446 - acparm = 0x0000A549; // BK
19447 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
19448 -
19449 - // for WiFi test, mixed mode with intel STA under bg mode throughput issue
19450 - if (padapter->mlmepriv.htpriv.ht_option == _FALSE){
19451 - acparm = 0x00004320;
19452 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
19453 - }
19454 - }
19455 - else {
19456 - acparm = 0x002F3217; // VO
19457 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
19458 - acparm = 0x005E4317; // VI
19459 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
19460 - acparm = 0x00105320; // BE
19461 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
19462 - acparm = 0x0000A444; // BK
19463 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
19464 - }
19465 -#endif
19466 - //disable dynamic functions, such as high power, DIG
19467 - //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
19468 -
19469 - //config the initial gain under linking, need to write the BB registers
19470 - #ifndef CONFIG_BEFORE_LINKED_DIG
19471 - initialgain = 0x1E;
19472 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
19473 - #endif
19474 -
19475 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, pmlmeinfo->network.MacAddress);
19476 - join_type = 0;
19477 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
19478 -
19479 - //cancel link timer
19480 - _cancel_timer_ex(&pmlmeext->link_timer);
19481 -
19482 - start_clnt_join(padapter);
19483 -
19484 - return H2C_SUCCESS;
19485 -
19486 -}
19487 -
19488 -u8 disconnect_hdl(_adapter *padapter, unsigned char *pbuf)
19489 -{
19490 - struct disconnect_parm *pparm = (struct disconnect_parm *)pbuf;
19491 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19492 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19493 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
19494 - u8 val8;
19495 -
19496 - if (is_client_associated_to_ap(padapter))
19497 - {
19498 - issue_deauth(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING);
19499 - }
19500 -
19501 - //set_opmode_cmd(padapter, infra_client_with_mlme);
19502 -
19503 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
19504 -
19505 - //switch to the 20M Hz mode after disconnect
19506 - pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
19507 - pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
19508 -
19509 - //set MSR to no link state
19510 - Set_NETYPE0_MSR(padapter, _HW_STATE_NOLINK_);
19511 -
19512 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_DISCONNECT, 0);
19513 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, null_addr);
19514 -
19515 - if(((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
19516 - {
19517 - //Stop BCN
19518 - val8 = 0;
19519 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BCN_FUNC, (u8 *)(&val8));
19520 - }
19521 -
19522 - pmlmeinfo->state = WIFI_FW_NULL_STATE;
19523 -
19524 - set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
19525 -
19526 - flush_all_cam_entry(padapter);
19527 -
19528 - _cancel_timer_ex(&pmlmeext->link_timer);
19529 -
19530 - return H2C_SUCCESS;
19531 -}
19532 -
19533 -u8 sitesurvey_cmd_hdl(_adapter *padapter, u8 *pbuf)
19534 -{
19535 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19536 - struct sitesurvey_parm *pparm = (struct sitesurvey_parm *)pbuf;
19537 - u8 val8;
19538 - u32 initialgain;
19539 - u32 i;
19540 -
19541 -#ifdef CONFIG_P2P
19542 - struct wifidirect_info* pwdinfo = &padapter->wdinfo;
19543 -#endif
19544 -
19545 - if (pmlmeext->sitesurvey_res.state == SCAN_DISABLE)
19546 - {
19547 - //for first time sitesurvey_cmd
19548 - pmlmeext->sitesurvey_res.state = SCAN_START;
19549 - pmlmeext->sitesurvey_res.bss_cnt = 0;
19550 - pmlmeext->sitesurvey_res.channel_idx = 0;
19551 -
19552 - for(i=0;i<RTW_SSID_SCAN_AMOUNT;i++){
19553 - if(pparm->ssid[i].SsidLength) {
19554 - _rtw_memcpy(pmlmeext->sitesurvey_res.ssid[i].Ssid, pparm->ssid[i].Ssid, IW_ESSID_MAX_SIZE);
19555 - pmlmeext->sitesurvey_res.ssid[i].SsidLength= pparm->ssid[i].SsidLength;
19556 - } else {
19557 - pmlmeext->sitesurvey_res.ssid[i].SsidLength= 0;
19558 - }
19559 - }
19560 -
19561 - pmlmeext->sitesurvey_res.scan_mode = pparm->scan_mode;
19562 -
19563 - //issue null data if associating to the AP
19564 - if (is_client_associated_to_ap(padapter) == _TRUE)
19565 - {
19566 - pmlmeext->sitesurvey_res.state = SCAN_TXNULL;
19567 -
19568 - issue_nulldata(padapter, 1);
19569 - issue_nulldata(padapter, 1);
19570 -
19571 - //delay 50ms to protect nulldata(1).
19572 - set_survey_timer(pmlmeext, 50);
19573 -
19574 - return H2C_SUCCESS;
19575 - }
19576 - }
19577 -
19578 - if ((pmlmeext->sitesurvey_res.state == SCAN_START) || (pmlmeext->sitesurvey_res.state == SCAN_TXNULL))
19579 - {
19580 -#ifdef CONFIG_FIND_BEST_CHANNEL
19581 -#if 0
19582 - for (i=0; pmlmeext->channel_set[i].ChannelNum !=0; i++) {
19583 - pmlmeext->channel_set[i].rx_count = 0;
19584 - }
19585 -#endif
19586 -#endif /* CONFIG_FIND_BEST_CHANNEL */
19587 -
19588 - //disable dynamic functions, such as high power, DIG
19589 - Save_DM_Func_Flag(padapter);
19590 - Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
19591 -
19592 - //config the initial gain under scaning, need to write the BB registers
19593 -#ifdef CONFIG_IOCTL_CFG80211
19594 - if((wdev_to_priv(padapter->rtw_wdev))->p2p_enabled == _TRUE)
19595 - initialgain = 0x27;
19596 - else
19597 -#endif
19598 - initialgain = 0x17;
19599 -
19600 -#ifdef CONFIG_P2P
19601 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
19602 - initialgain = 0x27;
19603 -#endif //CONFIG_P2P
19604 -
19605 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
19606 -
19607 - //set MSR to no link state
19608 - Set_NETYPE0_MSR(padapter, _HW_STATE_NOLINK_);
19609 -
19610 - val8 = 1; //before site survey
19611 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
19612 -
19613 - // Commented by Albert 2011/08/05
19614 - // The pre_tx_scan_timer_process will issue the scan H2C command.
19615 - // However, the driver should NOT enter the scanning mode at that time.
19616 - pmlmeext->sitesurvey_res.state = SCAN_PROCESS;
19617 - }
19618 -
19619 - site_survey(padapter);
19620 -
19621 - return H2C_SUCCESS;
19622 -
19623 -}
19624 -
19625 -u8 setauth_hdl(_adapter *padapter, unsigned char *pbuf)
19626 -{
19627 - struct setauth_parm *pparm = (struct setauth_parm *)pbuf;
19628 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19629 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19630 -
19631 - if (pparm->mode < 4)
19632 - {
19633 - pmlmeinfo->auth_algo = pparm->mode;
19634 - }
19635 -
19636 - return H2C_SUCCESS;
19637 -}
19638 -
19639 -u8 setkey_hdl(_adapter *padapter, u8 *pbuf)
19640 -{
19641 - unsigned short ctrl;
19642 - struct setkey_parm *pparm = (struct setkey_parm *)pbuf;
19643 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19644 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19645 - unsigned char null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
19646 -
19647 - //main tx key for wep.
19648 - if(pparm->set_tx)
19649 - pmlmeinfo->key_index = pparm->keyid;
19650 -
19651 - //write cam
19652 - ctrl = BIT(15) | ((pparm->algorithm) << 2) | pparm->keyid;
19653 -
19654 - write_cam(padapter, pparm->keyid, ctrl, null_sta, pparm->key);
19655 -
19656 - return H2C_SUCCESS;
19657 -}
19658 -
19659 -u8 set_stakey_hdl(_adapter *padapter, u8 *pbuf)
19660 -{
19661 - unsigned short ctrl=0;
19662 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19663 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19664 - struct set_stakey_parm *pparm = (struct set_stakey_parm *)pbuf;
19665 -#ifdef CONFIG_TDLS
19666 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
19667 - struct sta_priv *pstapriv = &padapter->stapriv;
19668 - struct sta_info *psta;
19669 -#endif
19670 -
19671 - if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
19672 - {
19673 - unsigned char cam_id;//cam_entry
19674 - struct sta_info *psta;
19675 - struct sta_priv *pstapriv = &padapter->stapriv;
19676 -
19677 - psta = rtw_get_stainfo(pstapriv, pparm->addr);
19678 - if(psta)
19679 - {
19680 - ctrl = (BIT(15) | ((pparm->algorithm) << 2));
19681 -
19682 - DBG_8192C("r871x_set_stakey_hdl(): enc_algorithm=%d\n", pparm->algorithm);
19683 -
19684 - if((psta->mac_id<1) || (psta->mac_id>(NUM_STA-4)))
19685 - {
19686 - DBG_8192C("r871x_set_stakey_hdl():set_stakey failed, mac_id(aid)=%d\n", psta->mac_id);
19687 - return H2C_REJECTED;
19688 - }
19689 -
19690 - cam_id = (psta->mac_id + 3);//0~3 for default key, cmd_id=macid + 3, macid=aid+1;
19691 -
19692 - DBG_8192C("Write CAM, mac_addr=%x:%x:%x:%x:%x:%x, cam_entry=%d\n", pparm->addr[0],
19693 - pparm->addr[1], pparm->addr[2], pparm->addr[3], pparm->addr[4],
19694 - pparm->addr[5], cam_id);
19695 -
19696 - write_cam(padapter, cam_id, ctrl, pparm->addr, pparm->key);
19697 -
19698 - return H2C_SUCCESS_RSP;
19699 -
19700 - }
19701 - else
19702 - {
19703 - DBG_8192C("r871x_set_stakey_hdl(): sta has been free\n");
19704 - return H2C_REJECTED;
19705 - }
19706 -
19707 - }
19708 -
19709 - //below for sta mode
19710 -
19711 - ctrl = BIT(15) | ((pparm->algorithm) << 2);
19712 -
19713 -#ifdef CONFIG_TDLS
19714 - if(ptdlsinfo->cam_entry_to_clear!=0){
19715 - clear_cam_entry(padapter, ptdlsinfo->cam_entry_to_clear);
19716 - ptdlsinfo->cam_entry_to_clear=0;
19717 -
19718 - return H2C_SUCCESS;
19719 - }
19720 -
19721 - psta = rtw_get_stainfo(pstapriv, pparm->addr);//Get TDLS Peer STA
19722 - if( psta->tdls_sta_state&TDLS_LINKED_STATE ){
19723 - write_cam(padapter, psta->cam_entry, ctrl, pparm->addr, pparm->key);
19724 - }
19725 - else
19726 -#endif
19727 - write_cam(padapter, 5, ctrl, pparm->addr, pparm->key);
19728 -
19729 - pmlmeinfo->enc_algo = pparm->algorithm;
19730 -
19731 - return H2C_SUCCESS;
19732 -}
19733 -
19734 -u8 add_ba_hdl(_adapter *padapter, unsigned char *pbuf)
19735 -{
19736 - struct addBaReq_parm *pparm = (struct addBaReq_parm *)pbuf;
19737 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19738 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19739 -
19740 - struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, pparm->addr);
19741 -
19742 - if(!psta)
19743 - return H2C_SUCCESS;
19744 -
19745 -
19746 - if (((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) && (pmlmeinfo->HT_enable)) ||
19747 - ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
19748 - {
19749 - //pmlmeinfo->ADDBA_retry_count = 0;
19750 - //pmlmeinfo->candidate_tid_bitmap |= (0x1 << pparm->tid);
19751 - //psta->htpriv.candidate_tid_bitmap |= BIT(pparm->tid);
19752 - issue_action_BA(padapter, pparm->addr, RTW_WLAN_ACTION_ADDBA_REQ, (u16)pparm->tid);
19753 - //_set_timer(&pmlmeext->ADDBA_timer, ADDBA_TO);
19754 - _set_timer(&psta->addba_retry_timer, ADDBA_TO);
19755 - }
19756 - else
19757 - {
19758 - psta->htpriv.candidate_tid_bitmap &= ~BIT(pparm->tid);
19759 - }
19760 -
19761 - return H2C_SUCCESS;
19762 -}
19763 -
19764 -u8 set_tx_beacon_cmd(_adapter* padapter)
19765 -{
19766 - struct cmd_obj *ph2c;
19767 - struct Tx_Beacon_param *ptxBeacon_parm;
19768 - struct cmd_priv *pcmdpriv = &(padapter->cmdpriv);
19769 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19770 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19771 - u8 res = _SUCCESS;
19772 - int len_diff = 0;
19773 -
19774 -_func_enter_;
19775 -
19776 - if ((ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
19777 - {
19778 - res= _FAIL;
19779 - goto exit;
19780 - }
19781 -
19782 - if ((ptxBeacon_parm = (struct Tx_Beacon_param *)rtw_zmalloc(sizeof(struct Tx_Beacon_param))) == NULL)
19783 - {
19784 - rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
19785 - res= _FAIL;
19786 - goto exit;
19787 - }
19788 -
19789 - _rtw_memcpy(&(ptxBeacon_parm->network), &(pmlmeinfo->network), sizeof(WLAN_BSSID_EX));
19790 -
19791 - len_diff = update_hidden_ssid(
19792 - ptxBeacon_parm->network.IEs+_BEACON_IE_OFFSET_
19793 - , ptxBeacon_parm->network.IELength-_BEACON_IE_OFFSET_
19794 - , pmlmeinfo->hidden_ssid_mode
19795 - );
19796 - ptxBeacon_parm->network.IELength += len_diff;
19797 -
19798 - init_h2fwcmd_w_parm_no_rsp(ph2c, ptxBeacon_parm, GEN_CMD_CODE(_TX_Beacon));
19799 -
19800 - res = rtw_enqueue_cmd(pcmdpriv, ph2c);
19801 -
19802 -
19803 -exit:
19804 -
19805 -_func_exit_;
19806 -
19807 - return res;
19808 -}
19809 -
19810 -
19811 -u8 mlme_evt_hdl(_adapter *padapter, unsigned char *pbuf)
19812 -{
19813 - u8 evt_code, evt_seq;
19814 - u16 evt_sz;
19815 - uint *peventbuf;
19816 - void (*event_callback)(_adapter *dev, u8 *pbuf);
19817 - struct evt_priv *pevt_priv = &(padapter->evtpriv);
19818 -
19819 - peventbuf = (uint*)pbuf;
19820 - evt_sz = (u16)(*peventbuf&0xffff);
19821 - evt_seq = (u8)((*peventbuf>>24)&0x7f);
19822 - evt_code = (u8)((*peventbuf>>16)&0xff);
19823 -
19824 -
19825 - #ifdef CHECK_EVENT_SEQ
19826 - // checking event sequence...
19827 - if (evt_seq != (ATOMIC_READ(&pevt_priv->event_seq) & 0x7f) )
19828 - {
19829 - 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)));
19830 -
19831 - pevt_priv->event_seq = (evt_seq+1)&0x7f;
19832 -
19833 - goto _abort_event_;
19834 - }
19835 - #endif
19836 -
19837 - // checking if event code is valid
19838 - if (evt_code >= MAX_C2HEVT)
19839 - {
19840 - RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\nEvent Code(%d) mismatch!\n", evt_code));
19841 - goto _abort_event_;
19842 - }
19843 -
19844 - // checking if event size match the event parm size
19845 - if ((wlanevents[evt_code].parmsize != 0) &&
19846 - (wlanevents[evt_code].parmsize != evt_sz))
19847 - {
19848 -
19849 - RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\nEvent(%d) Parm Size mismatch (%d vs %d)!\n",
19850 - evt_code, wlanevents[evt_code].parmsize, evt_sz));
19851 - goto _abort_event_;
19852 -
19853 - }
19854 -
19855 - ATOMIC_INC(&pevt_priv->event_seq);
19856 + if ((ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
19857 + {
19858 + goto exit_survey_timer_hdl;
19859 + }
19860
19861 - peventbuf += 2;
19862 -
19863 - if(peventbuf)
19864 - {
19865 - event_callback = wlanevents[evt_code].event_callback;
19866 - event_callback(padapter, (u8*)peventbuf);
19867 + if ((psurveyPara = (struct sitesurvey_parm*)rtw_zmalloc(sizeof(struct sitesurvey_parm))) == NULL)
19868 + {
19869 + rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
19870 + goto exit_survey_timer_hdl;
19871 + }
19872
19873 - pevt_priv->evt_done_cnt++;
19874 + init_h2fwcmd_w_parm_no_rsp(ph2c, psurveyPara, GEN_CMD_CODE(_SiteSurvey));
19875 + rtw_enqueue_cmd(pcmdpriv, ph2c);
19876 }
19877
19878
19879 -_abort_event_:
19880 -
19881 +exit_survey_timer_hdl:
19882 +#ifdef PLATFORM_FREEBSD
19883 + rtw_mtx_unlock(NULL);
19884 +#endif
19885
19886 - return H2C_SUCCESS;
19887 -
19888 + return;
19889 }
19890
19891 -u8 h2c_msg_hdl(_adapter *padapter, unsigned char *pbuf)
19892 +void link_timer_hdl(_adapter *padapter)
19893 {
19894 - if(!pbuf)
19895 - return H2C_PARAMETERS_ERROR;
19896 -
19897 - return H2C_SUCCESS;
19898 -}
19899 + //static unsigned int rx_pkt = 0;
19900 + //static u64 tx_cnt = 0;
19901 + //struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
19902 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
19903 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
19904 + //struct sta_priv *pstapriv = &padapter->stapriv;
19905 +
19906 +#ifdef PLATFORM_FREEBSD
19907 + rtw_mtx_lock(NULL);
19908 + if (callout_pending(&padapter->mlmeextpriv.survey_timer.callout)) {
19909 + /* callout was reset */
19910 + //mtx_unlock(&sc->sc_mtx);
19911 + rtw_mtx_unlock(NULL);
19912 + return;
19913 + }
19914 + if (!callout_active(&padapter->mlmeextpriv.survey_timer.callout)) {
19915 + /* callout was stopped */
19916 + //mtx_unlock(&sc->sc_mtx);
19917 + rtw_mtx_unlock(NULL);
19918 + return;
19919 + }
19920 + callout_deactivate(&padapter->mlmeextpriv.survey_timer.callout);
19921
19922 +
19923 +#endif
19924
19925 -u8 tx_beacon_hdl(_adapter *padapter, unsigned char *pbuf)
19926 -{
19927 - if(send_beacon(padapter)==_FAIL)
19928 + if (pmlmeinfo->state & WIFI_FW_AUTH_NULL)
19929 {
19930 - DBG_871X("issue_beacon, fail!\n");
19931 - return H2C_PARAMETERS_ERROR;
19932 + DBG_871X("link_timer_hdl:no beacon while connecting\n");
19933 + pmlmeinfo->state = WIFI_FW_NULL_STATE;
19934 + report_join_res(padapter, -3);
19935 }
19936 -#ifdef CONFIG_AP_MODE
19937 - else //tx bc/mc frames after update TIM
19938 - {
19939 - _irqL irqL;
19940 - struct sta_info *psta_bmc;
19941 - _list *xmitframe_plist, *xmitframe_phead;
19942 - struct xmit_frame *pxmitframe=NULL;
19943 - struct sta_priv *pstapriv = &padapter->stapriv;
19944 + else if (pmlmeinfo->state & WIFI_FW_AUTH_STATE)
19945 + {
19946 + //re-auth timer
19947 + if (++pmlmeinfo->reauth_count > REAUTH_LIMIT)
19948 + {
19949 + //if (pmlmeinfo->auth_algo != dot11AuthAlgrthm_Auto)
19950 + //{
19951 + pmlmeinfo->state = 0;
19952 + report_join_res(padapter, -1);
19953 + return;
19954 + //}
19955 + //else
19956 + //{
19957 + // pmlmeinfo->auth_algo = dot11AuthAlgrthm_Shared;
19958 + // pmlmeinfo->reauth_count = 0;
19959 + //}
19960 + }
19961
19962 - //for BC/MC Frames
19963 - psta_bmc = rtw_get_bcmc_stainfo(padapter);
19964 - if(!psta_bmc)
19965 - return H2C_SUCCESS;
19966 -
19967 - if((pstapriv->tim_bitmap&BIT(0)) && (psta_bmc->sleepq_len>0))
19968 - {
19969 -#ifndef CONFIG_PCI_HCI
19970 - rtw_msleep_os(10);// 10ms, ATIM(HIQ) Windows
19971 -#endif
19972 - _enter_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
19973 + DBG_871X("link_timer_hdl: auth timeout and try again\n");
19974 + pmlmeinfo->auth_seq = 1;
19975 + issue_auth(padapter, NULL, 0);
19976 + set_link_timer(pmlmeext, REAUTH_TO);
19977 + }
19978 + else if (pmlmeinfo->state & WIFI_FW_ASSOC_STATE)
19979 + {
19980 + //re-assoc timer
19981 + if (++pmlmeinfo->reassoc_count > REASSOC_LIMIT)
19982 + {
19983 + pmlmeinfo->state = WIFI_FW_NULL_STATE;
19984 + report_join_res(padapter, -2);
19985 + return;
19986 + }
19987
19988 - xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
19989 - xmitframe_plist = get_next(xmitframe_phead);
19990 + DBG_871X("link_timer_hdl: assoc timeout and try again\n");
19991 + issue_assocreq(padapter);
19992 + set_link_timer(pmlmeext, REASSOC_TO);
19993 + }
19994 +#if 0
19995 + else if (is_client_associated_to_ap(padapter))
19996 + {
19997 + //linked infrastructure client mode
19998 + if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
19999 + {
20000 + /*to monitor whether the AP is alive or not*/
20001 + if (rx_pkt == psta->sta_stats.rx_pkts)
20002 + {
20003 + receive_disconnect(padapter, pmlmeinfo->network.MacAddress);
20004 + return;
20005 + }
20006 + else
20007 + {
20008 + rx_pkt = psta->sta_stats.rx_pkts;
20009 + set_link_timer(pmlmeext, DISCONNECT_TO);
20010 + }
20011
20012 - while ((rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) == _FALSE)
20013 - {
20014 - pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);
20015 + //update the EDCA paramter according to the Tx/RX mode
20016 + update_EDCA_param(padapter);
20017
20018 - xmitframe_plist = get_next(xmitframe_plist);
20019 + /*to send the AP a nulldata if no frame is xmitted in order to keep alive*/
20020 + if (pmlmeinfo->link_count++ == 0)
20021 + {
20022 + tx_cnt = pxmitpriv->tx_pkts;
20023 + }
20024 + else if ((pmlmeinfo->link_count & 0xf) == 0)
20025 + {
20026 + if (tx_cnt == pxmitpriv->tx_pkts)
20027 + {
20028 + issue_nulldata(padapter, NULL, 0, 0, 0);
20029 + }
20030
20031 - rtw_list_delete(&pxmitframe->list);
20032 + tx_cnt = pxmitpriv->tx_pkts;
20033 + }
20034 + } //end of if ((psta = rtw_get_stainfo(pstapriv, passoc_res->network.MacAddress)) != NULL)
20035 + }
20036 + else if (is_client_associated_to_ibss(padapter))
20037 + {
20038 + //linked IBSS mode
20039 + //for each assoc list entry to check the rx pkt counter
20040 + for (i = IBSS_START_MAC_ID; i < NUM_STA; i++)
20041 + {
20042 + if (pmlmeinfo->FW_sta_info[i].status == 1)
20043 + {
20044 + psta = pmlmeinfo->FW_sta_info[i].psta;
20045
20046 - psta_bmc->sleepq_len--;
20047 - if(psta_bmc->sleepq_len>0)
20048 - pxmitframe->attrib.mdata = 1;
20049 + if (pmlmeinfo->FW_sta_info[i].rx_pkt == psta->sta_stats.rx_pkts)
20050 + {
20051 + pmlmeinfo->FW_sta_info[i].status = 0;
20052 + report_del_sta_event(padapter, psta->hwaddr);
20053 + }
20054 else
20055 - pxmitframe->attrib.mdata = 0;
20056 -
20057 - pxmitframe->attrib.triggered=1;
20058 -
20059 - pxmitframe->attrib.qsel = 0x11;//HIQ
20060 -
20061 - if(padapter->HalFunc.hal_xmit(padapter, pxmitframe) == _TRUE)
20062 - {
20063 - rtw_os_xmit_complete(padapter, pxmitframe);
20064 + {
20065 + pmlmeinfo->FW_sta_info[i].rx_pkt = psta->sta_stats.rx_pkts;
20066 }
20067 -
20068 - //pstapriv->tim_bitmap &= ~BIT(0);
20069 -
20070 - }
20071 -
20072 - _exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
20073 -
20074 + }
20075 }
20076
20077 + set_link_timer(pmlmeext, DISCONNECT_TO);
20078 }
20079 #endif
20080
20081 - return H2C_SUCCESS;
20082 -
20083 -}
20084 +#ifdef PLATFORM_FREEBSD
20085 + rtw_mtx_unlock(NULL);
20086 +#endif
20087
20088 -#ifdef CONFIG_AP_MODE
20089 + return;
20090 +}
20091
20092 -void init_mlme_ap_info(_adapter *padapter)
20093 +void addba_timer_hdl(struct sta_info *psta)
20094 {
20095 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20096 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
20097 -
20098 - _rtw_spinlock_init(&pmlmepriv->bcn_update_lock);
20099 + struct ht_priv *phtpriv;
20100
20101 - //pmlmeext->bstart_bss = _FALSE;
20102 + if(!psta)
20103 + return;
20104 +
20105 + phtpriv = &psta->htpriv;
20106
20107 - start_ap_mode(padapter);
20108 + if((phtpriv->ht_option==_TRUE) && (phtpriv->ampdu_enable==_TRUE))
20109 + {
20110 + if(phtpriv->candidate_tid_bitmap)
20111 + phtpriv->candidate_tid_bitmap=0x0;
20112 +
20113 + }
20114 }
20115
20116 -void free_mlme_ap_info(_adapter *padapter)
20117 +#ifdef CONFIG_IEEE80211W
20118 +void sa_query_timer_hdl(_adapter *padapter)
20119 {
20120 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20121 + struct mlme_priv * pmlmepriv = &padapter->mlmepriv;
20122 _irqL irqL;
20123 - struct sta_info *psta=NULL;
20124 - struct sta_priv *pstapriv = &padapter->stapriv;
20125 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
20126 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20127 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20128 + //disconnect
20129 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
20130
20131 - //stop_ap_mode(padapter);
20132 + if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
20133 + {
20134 + rtw_disassoc_cmd(padapter, 0, _TRUE);
20135 + rtw_indicate_disconnect(padapter);
20136 + rtw_free_assoc_resources(padapter, 1);
20137 + }
20138
20139 - pmlmepriv->update_bcn = _FALSE;
20140 - pmlmeext->bstart_bss = _FALSE;
20141 -
20142 - rtw_sta_flush(padapter);
20143 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
20144 + DBG_871X("SA query timeout disconnect\n");
20145 +}
20146 +#endif //CONFIG_IEEE80211W
20147
20148 - pmlmeinfo->state = _HW_STATE_NOLINK_;
20149 +u8 NULL_hdl(_adapter *padapter, u8 *pbuf)
20150 +{
20151 + return H2C_SUCCESS;
20152 +}
20153
20154 - //free_assoc_sta_resources
20155 - rtw_free_all_stainfo(padapter);
20156 +#ifdef CONFIG_AUTO_AP_MODE
20157 +void rtw_start_auto_ap(_adapter *adapter)
20158 +{
20159 + DBG_871X("%s\n", __FUNCTION__);
20160
20161 - //free bc/mc sta_info
20162 - psta = rtw_get_bcmc_stainfo(padapter);
20163 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
20164 - rtw_free_stainfo(padapter, psta);
20165 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
20166 -
20167 + rtw_set_802_11_infrastructure_mode(adapter, Ndis802_11APMode);
20168
20169 - _rtw_spinlock_free(&pmlmepriv->bcn_update_lock);
20170 -
20171 + rtw_setopmode_cmd(adapter, Ndis802_11APMode);
20172 }
20173
20174 -static void update_BCNTIM(_adapter *padapter)
20175 +static int rtw_auto_ap_start_beacon(_adapter *adapter)
20176 {
20177 - struct sta_priv *pstapriv = &padapter->stapriv;
20178 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
20179 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
20180 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
20181 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20182 - WLAN_BSSID_EX *pnetwork_mlmeext = &(pmlmeinfo->network);
20183 - unsigned char *src_ie = pnetwork->IEs;
20184 - unsigned int src_ielen = pnetwork->IELength;
20185 - unsigned char *dst_ie = pnetwork_mlmeext->IEs;
20186 -
20187 -
20188 - //update TIM IE
20189 - //if(pstapriv->tim_bitmap)
20190 - if(_TRUE)
20191 - {
20192 - u8 *p, ie_len;
20193 - u16 tim_bitmap_le;
20194 - u32 tmp_len, head_len=0;
20195 + int ret=0;
20196 + u8 *pbuf = NULL;
20197 + uint len;
20198 + u8 supportRate[16];
20199 + int sz = 0, rateLen;
20200 + u8 * ie;
20201 + u8 wireless_mode, oper_channel;
20202 + u8 ssid[3] = {0}; //hidden ssid
20203 + u32 ssid_len = sizeof(ssid);
20204 + struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
20205
20206 - tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap);
20207 -
20208 - //calucate head_len
20209 - head_len = _FIXED_IE_LENGTH_;
20210 - head_len += pnetwork->Ssid.SsidLength + 2;
20211
20212 - // get supported rates len
20213 - p = rtw_get_ie(src_ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &tmp_len, (pnetwork->IELength - _BEACON_IE_OFFSET_));
20214 - if (p != NULL)
20215 - {
20216 - head_len += tmp_len+2;
20217 - }
20218 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
20219 + return -EINVAL;
20220
20221 - //DS Parameter Set IE, len=3
20222 - head_len += 3;
20223
20224 - //copy head offset
20225 - _rtw_memcpy(dst_ie, src_ie, head_len);
20226 -
20227 + len = 128;
20228 + pbuf = rtw_zmalloc(len);
20229 + if(!pbuf)
20230 + return -ENOMEM;
20231
20232 - //append TIM IE from head_len offset
20233 - dst_ie+=head_len;
20234
20235 - *dst_ie++=_TIM_IE_;
20236 + //generate beacon
20237 + ie = pbuf;
20238
20239 - if((pstapriv->tim_bitmap&0xff00) && (pstapriv->tim_bitmap&0x00fc))
20240 - ie_len = 5;
20241 - else
20242 - ie_len = 4;
20243 + //timestamp will be inserted by hardware
20244 + sz += 8;
20245 + ie += sz;
20246 +
20247 + //beacon interval : 2bytes
20248 + *(u16*)ie = cpu_to_le16((u16)100);//BCN_INTERVAL=100;
20249 + sz += 2;
20250 + ie += 2;
20251 +
20252 + //capability info
20253 + *(u16*)ie = 0;
20254 + *(u16*)ie |= cpu_to_le16(cap_ESS);
20255 + *(u16*)ie |= cpu_to_le16(cap_ShortPremble);
20256 + //*(u16*)ie |= cpu_to_le16(cap_Privacy);
20257 + sz += 2;
20258 + ie += 2;
20259
20260 - *dst_ie++= ie_len;
20261 -
20262 - *dst_ie++=0;//DTIM count
20263 - *dst_ie++=1;//DTIM peroid
20264 -
20265 - if(pstapriv->tim_bitmap&BIT(0))//for bc/mc frames
20266 - *dst_ie++ = BIT(0);//bitmap ctrl
20267 - else
20268 - *dst_ie++ = 0;
20269 + //SSID
20270 + ie = rtw_set_ie(ie, _SSID_IE_, ssid_len, ssid, &sz);
20271
20272 - if(ie_len==4)
20273 - {
20274 - *dst_ie++ = *(u8*)&tim_bitmap_le;
20275 - }
20276 - else if(ie_len==5)
20277 - {
20278 - _rtw_memcpy(dst_ie, &tim_bitmap_le, 2);
20279 - dst_ie+=2;
20280 - }
20281 -
20282 - //copy remainder IE
20283 - _rtw_memcpy(dst_ie, src_ie+head_len, src_ielen-head_len);
20284 + //supported rates
20285 + wireless_mode = WIRELESS_11BG_24N;
20286 + rtw_set_supported_rate(supportRate, wireless_mode) ;
20287 + rateLen = rtw_get_rateset_len(supportRate);
20288 + if (rateLen > 8)
20289 + {
20290 + ie = rtw_set_ie(ie, _SUPPORTEDRATES_IE_, 8, supportRate, &sz);
20291 + }
20292 + else
20293 + {
20294 + ie = rtw_set_ie(ie, _SUPPORTEDRATES_IE_, rateLen, supportRate, &sz);
20295 + }
20296 +
20297 +
20298 + //DS parameter set
20299 + if(check_buddy_fwstate(adapter, _FW_LINKED) &&
20300 + check_buddy_fwstate(adapter, WIFI_STATION_STATE))
20301 + {
20302 + PADAPTER pbuddy_adapter = adapter->pbuddy_adapter;
20303 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
20304 +
20305 + oper_channel = pbuddy_mlmeext->cur_channel;
20306 + }
20307 + else
20308 + {
20309 + oper_channel = adapter_to_dvobj(adapter)->oper_channel;
20310 + }
20311 + ie = rtw_set_ie(ie, _DSSET_IE_, 1, &oper_channel, &sz);
20312 +
20313 + //ext supported rates
20314 + if (rateLen > 8)
20315 + {
20316 + ie = rtw_set_ie(ie, _EXT_SUPPORTEDRATES_IE_, (rateLen - 8), (supportRate + 8), &sz);
20317 + }
20318 +
20319 + DBG_871X("%s, start auto ap beacon sz=%d\n", __FUNCTION__, sz);
20320 +
20321 + //lunch ap mode & start to issue beacon
20322 + if(rtw_check_beacon_data(adapter, pbuf, sz) == _SUCCESS)
20323 + {
20324
20325 - //pnetwork_mlmeext->Length += ie_len+2;
20326 - //pnetwork_mlmeext->IELength += ie_len+2;
20327 - pnetwork_mlmeext->Length = pnetwork->Length+ie_len+2;
20328 - pnetwork_mlmeext->IELength = src_ielen+ie_len+2;
20329 -
20330 }
20331 else
20332 {
20333 - _rtw_memcpy(dst_ie, src_ie, src_ielen);
20334 - pnetwork_mlmeext->Length = pnetwork->Length;
20335 - pnetwork_mlmeext->IELength = src_ielen;
20336 + ret = -EINVAL;
20337 }
20338
20339 -#ifdef CONFIG_USB_HCI
20340 - set_tx_beacon_cmd(padapter);
20341 -#endif
20342
20343 + rtw_mfree(pbuf, len);
20344
20345 -/*
20346 - if(send_beacon(padapter)==_FAIL)
20347 - {
20348 - DBG_871X("issue_beacon, fail!\n");
20349 - }
20350 -*/
20351 + return ret;
20352
20353 }
20354 +#endif//CONFIG_AUTO_AP_MODE
20355
20356 -u8 chk_sta_is_alive(struct sta_info *psta)
20357 +u8 setopmode_hdl(_adapter *padapter, u8 *pbuf)
20358 {
20359 - u8 ret = _FALSE;
20360 - #ifdef DBG_EXPIRATION_CHK
20361 - DBG_871X("sta:"MAC_FMT", rx:"STA_PKTS_FMT", expire_to:%u, %s\n"
20362 - , MAC_ARG(psta->hwaddr), STA_RX_PKTS_ARG(psta)
20363 - , psta->expire_to
20364 - , psta->state&WIFI_SLEEP_STATE?"SLEEP":""
20365 - );
20366 - #endif
20367 + u8 type;
20368 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20369 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20370 + struct setopmode_parm *psetop = (struct setopmode_parm *)pbuf;
20371
20372 - //if(sta_last_rx_pkts(psta) == sta_rx_pkts(psta))
20373 - if(psta->sta_stats.last_rx_data_pkts == psta->sta_stats.rx_data_pkts)
20374 + if(psetop->mode == Ndis802_11APMode)
20375 {
20376 - #if 0
20377 - if(psta->state&WIFI_SLEEP_STATE)
20378 - ret = _TRUE;
20379 - #endif
20380 + pmlmeinfo->state = WIFI_FW_AP_STATE;
20381 + type = _HW_STATE_AP_;
20382 +#ifdef CONFIG_NATIVEAP_MLME
20383 + //start_ap_mode(padapter);
20384 +#endif
20385 + }
20386 + else if(psetop->mode == Ndis802_11Infrastructure)
20387 + {
20388 + pmlmeinfo->state &= ~(BIT(0)|BIT(1));// clear state
20389 + pmlmeinfo->state |= WIFI_FW_STATION_STATE;//set to STATION_STATE
20390 + type = _HW_STATE_STATION_;
20391 + }
20392 + else if(psetop->mode == Ndis802_11IBSS)
20393 + {
20394 + type = _HW_STATE_ADHOC_;
20395 }
20396 else
20397 {
20398 - ret = _TRUE;
20399 + type = _HW_STATE_NOLINK_;
20400 }
20401 -
20402 - sta_update_last_rx_pkts(psta);
20403 -
20404 - return ret;
20405 -}
20406 -
20407 -void expire_timeout_chk(_adapter *padapter)
20408 -{
20409 - _irqL irqL;
20410 - _list *phead, *plist;
20411 - struct sta_info *psta=NULL;
20412 - struct sta_priv *pstapriv = &padapter->stapriv;
20413
20414 + rtw_hal_set_hwreg(padapter, HW_VAR_SET_OPMODE, (u8 *)(&type));
20415 + //Set_NETYPE0_MSR(padapter, type);
20416
20417 - _enter_critical_bh(&pstapriv->auth_list_lock, &irqL);
20418 -
20419 - phead = &pstapriv->auth_list;
20420 - plist = get_next(phead);
20421 +#ifdef CONFIG_AUTO_AP_MODE
20422 + if(psetop->mode == Ndis802_11APMode)
20423 + rtw_auto_ap_start_beacon(padapter);
20424 +#endif
20425
20426 - //check auth_queue
20427 - while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
20428 - {
20429 - psta = LIST_CONTAINOR(plist, struct sta_info, auth_list);
20430 -
20431 - plist = get_next(plist);
20432 + return H2C_SUCCESS;
20433
20434 - if(psta->expire_to>0)
20435 - {
20436 - psta->expire_to--;
20437 - if (psta->expire_to == 0)
20438 - {
20439 - rtw_list_delete(&psta->auth_list);
20440 -
20441 - DBG_871X("auth expire %02X%02X%02X%02X%02X%02X\n",
20442 - psta->hwaddr[0],psta->hwaddr[1],psta->hwaddr[2],psta->hwaddr[3],psta->hwaddr[4],psta->hwaddr[5]);
20443 -
20444 - _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
20445 -
20446 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
20447 - rtw_free_stainfo(padapter, psta);
20448 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
20449 -
20450 - _enter_critical_bh(&pstapriv->auth_list_lock, &irqL);
20451 - }
20452 - }
20453 -
20454 - }
20455 -
20456 - _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
20457 +}
20458
20459 - psta = NULL;
20460 -
20461 +u8 createbss_hdl(_adapter *padapter, u8 *pbuf)
20462 +{
20463 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20464 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20465 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
20466 + struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf;
20467 + u32 initialgain;
20468
20469 - _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
20470
20471 - phead = &pstapriv->asoc_list;
20472 - plist = get_next(phead);
20473 -
20474 - //check asoc_queue
20475 - while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
20476 + if(pparm->network.InfrastructureMode == Ndis802_11APMode)
20477 {
20478 - psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
20479 -
20480 - plist = get_next(plist);
20481 +#ifdef CONFIG_AP_MODE
20482
20483 - if(chk_sta_is_alive(psta))
20484 - {
20485 - psta->expire_to = pstapriv->expire_to;
20486 -#ifdef CONFIG_TX_MCAST2UNI
20487 - psta->under_exist_checking = 0;
20488 -#endif // CONFIG_TX_MCAST2UNI
20489 + if(pmlmeinfo->state == WIFI_FW_AP_STATE)
20490 + {
20491 + //todo:
20492 + return H2C_SUCCESS;
20493 }
20494 -
20495 - if(psta->expire_to>0)
20496 - {
20497 - psta->expire_to--;
20498 -
20499 -#ifdef CONFIG_TX_MCAST2UNI
20500 - if ( (psta->flags & WLAN_STA_HT) && (psta->htpriv.agg_enable_bitmap || psta->under_exist_checking) ) {
20501 - // check sta by delba(addba) for 11n STA
20502 - // ToDo: use CCX report to check for all STAs
20503 - 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);
20504 -
20505 - if ( psta->expire_to <= (pstapriv->expire_to - 50 ) ) {
20506 - DBG_871X("asoc expire by DELBA/ADDBA! (%d s)\n", (pstapriv->expire_to-psta->expire_to)*2);
20507 - psta->under_exist_checking = 0;
20508 - psta->expire_to = 0;
20509 - } else if ( psta->expire_to <= (pstapriv->expire_to - 3) && (psta->under_exist_checking==0)) {
20510 - DBG_871X("asoc check by DELBA/ADDBA! (%d s)\n", (pstapriv->expire_to-psta->expire_to)*2);
20511 - psta->under_exist_checking = 1;
20512 - //tear down TX AMPDU
20513 - send_delba(padapter, 1, psta->hwaddr);// // originator
20514 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
20515 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
20516 - }
20517 - }
20518 -#endif // CONFIG_TX_MCAST2UNI
20519 +#endif
20520 + }
20521
20522 - if (psta->expire_to == 0)
20523 - {
20524 - //_irqL irqL;
20525 -
20526 - rtw_list_delete(&psta->asoc_list);
20527 -
20528 - DBG_871X("asoc expire %02X%02X%02X%02X%02X%02X\n",
20529 - psta->hwaddr[0],psta->hwaddr[1],psta->hwaddr[2],psta->hwaddr[3],psta->hwaddr[4],psta->hwaddr[5]);
20530 -#if 0
20531 - //tear down Rx AMPDU
20532 - send_delba(padapter, 0, psta->hwaddr);// recipient
20533 + //below is for ad-hoc master
20534 + if(pparm->network.InfrastructureMode == Ndis802_11IBSS)
20535 + {
20536 + rtw_joinbss_reset(padapter);
20537
20538 - //tear down TX AMPDU
20539 - send_delba(padapter, 1, psta->hwaddr);// // originator
20540 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
20541 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
20542 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
20543 + pmlmeext->cur_ch_offset= HAL_PRIME_CHNL_OFFSET_DONT_CARE;
20544 + pmlmeinfo->ERP_enable = 0;
20545 + pmlmeinfo->WMM_enable = 0;
20546 + pmlmeinfo->HT_enable = 0;
20547 + pmlmeinfo->HT_caps_enable = 0;
20548 + pmlmeinfo->HT_info_enable = 0;
20549 + pmlmeinfo->agg_enable_bitmap = 0;
20550 + pmlmeinfo->candidate_tid_bitmap = 0;
20551
20552 - issue_deauth(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
20553 + //disable dynamic functions, such as high power, DIG
20554 + Save_DM_Func_Flag(padapter);
20555 + Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
20556
20557 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
20558 - rtw_free_stainfo(padapter, psta);
20559 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
20560 -#endif
20561 - //_exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
20562 - ap_free_sta(padapter, psta);
20563 - //_enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
20564 -
20565 - }
20566 - else
20567 - {
20568 - if(psta->sleepq_len > (NR_XMITFRAME>>3))
20569 - {
20570 - wakeup_sta_to_xmit(padapter, psta);
20571 - }
20572 - }
20573 -
20574 - }
20575 -
20576 - }
20577 + //config the initial gain under linking, need to write the BB registers
20578 + initialgain = 0x1E;
20579 + rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
20580
20581 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
20582 + //cancel link timer
20583 + _cancel_timer_ex(&pmlmeext->link_timer);
20584
20585 -}
20586 + //clear CAM
20587 + flush_all_cam_entry(padapter);
20588
20589 + _rtw_memcpy(pnetwork, pbuf, FIELD_OFFSET(WLAN_BSSID_EX, IELength));
20590 + pnetwork->IELength = ((WLAN_BSSID_EX *)pbuf)->IELength;
20591
20592 -static void add_RATid(_adapter *padapter, struct sta_info *psta)
20593 -{
20594 - int i;
20595 - u8 rf_type;
20596 - u32 init_rate=0;
20597 - unsigned char sta_band = 0, raid, shortGIrate = _FALSE;
20598 - unsigned char limit;
20599 - unsigned int tx_ra_bitmap=0;
20600 - struct ht_priv *psta_ht = NULL;
20601 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
20602 - WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
20603 + if(pnetwork->IELength>MAX_IE_SZ)//Check pbuf->IELength
20604 + return H2C_PARAMETERS_ERROR;
20605
20606 + _rtw_memcpy(pnetwork->IEs, ((WLAN_BSSID_EX *)pbuf)->IEs, pnetwork->IELength);
20607
20608 - if(psta)
20609 - psta_ht = &psta->htpriv;
20610 - else
20611 - return;
20612 -
20613 - //b/g mode ra_bitmap
20614 - for (i=0; i<sizeof(psta->bssrateset); i++)
20615 - {
20616 - if (psta->bssrateset[i])
20617 - tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
20618 - }
20619 + start_create_ibss(padapter);
20620
20621 - //n mode ra_bitmap
20622 - if(psta_ht->ht_option)
20623 - {
20624 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
20625 - if(rf_type == RF_2T2R)
20626 - limit=16;// 2R
20627 - else
20628 - limit=8;// 1R
20629 + }
20630
20631 - for (i=0; i<limit; i++) {
20632 - if (psta_ht->ht_cap.supp_mcs_set[i/8] & BIT(i%8))
20633 - tx_ra_bitmap |= BIT(i+12);
20634 - }
20635 + return H2C_SUCCESS;
20636
20637 - //max short GI rate
20638 - shortGIrate = psta_ht->sgi;
20639 - }
20640 +}
20641
20642 +u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf)
20643 +{
20644 + u8 join_type;
20645 + PNDIS_802_11_VARIABLE_IEs pIE;
20646 + struct registry_priv *pregpriv = &padapter->registrypriv;
20647 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
20648 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
20649 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
20650 +#ifdef CONFIG_ANTENNA_DIVERSITY
20651 + struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf;
20652 +#endif //CONFIG_ANTENNA_DIVERSITY
20653 + u32 initialgain, i;
20654 + u8 cbw40_enable=0;
20655 + //u32 acparm;
20656
20657 -#if 0//gtest
20658 - if(get_rf_mimo_mode(padapter) == RTL8712_RF_2T2R)
20659 + //check already connecting to AP or not
20660 + if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)
20661 {
20662 - //is this a 2r STA?
20663 - if((pstat->tx_ra_bitmap & 0x0ff00000) != 0 && !(priv->pshare->has_2r_sta & BIT(pstat->aid)))
20664 + if (pmlmeinfo->state & WIFI_FW_STATION_STATE)
20665 {
20666 - priv->pshare->has_2r_sta |= BIT(pstat->aid);
20667 - if(rtw_read16(padapter, 0x102501f6) != 0xffff)
20668 - {
20669 - rtw_write16(padapter, 0x102501f6, 0xffff);
20670 - reset_1r_sta_RA(priv, 0xffff);
20671 - Switch_1SS_Antenna(priv, 3);
20672 - }
20673 - }
20674 - else// bg or 1R STA?
20675 - {
20676 - if((priv->pmib->dot11BssType.net_work_type & WIRELESS_11N) && pstat->ht_cap_len && priv->pshare->has_2r_sta == 0)
20677 - {
20678 - if(rtw_read16(padapter, 0x102501f6) != 0x7777)
20679 - { // MCS7 SGI
20680 - rtw_write16(padapter, 0x102501f6,0x7777);
20681 - reset_1r_sta_RA(priv, 0x7777);
20682 - Switch_1SS_Antenna(priv, 2);
20683 - }
20684 - }
20685 + issue_deauth_ex(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING, 5, 100);
20686 }
20687 +
20688 + pmlmeinfo->state = WIFI_FW_NULL_STATE;
20689 +
20690 + //clear CAM
20691 + flush_all_cam_entry(padapter);
20692 +
20693 + _cancel_timer_ex(&pmlmeext->link_timer);
20694 +
20695 + //set MSR to nolink -> infra. mode
20696 + //Set_MSR(padapter, _HW_STATE_NOLINK_);
20697 + Set_MSR(padapter, _HW_STATE_STATION_);
20698
20699 +
20700 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_DISCONNECT, 0);
20701 }
20702
20703 - if ((pstat->rssi_level < 1) || (pstat->rssi_level > 3))
20704 +#ifdef CONFIG_ANTENNA_DIVERSITY
20705 + rtw_antenna_select_cmd(padapter, pparm->network.PhyInfo.Optimum_antenna, _FALSE);
20706 +#endif
20707 +
20708 + rtw_joinbss_reset(padapter);
20709 +
20710 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
20711 + pmlmeext->cur_ch_offset= HAL_PRIME_CHNL_OFFSET_DONT_CARE;
20712 + pmlmeinfo->ERP_enable = 0;
20713 + pmlmeinfo->WMM_enable = 0;
20714 + pmlmeinfo->HT_enable = 0;
20715 + pmlmeinfo->HT_caps_enable = 0;
20716 + pmlmeinfo->HT_info_enable = 0;
20717 + pmlmeinfo->agg_enable_bitmap = 0;
20718 + pmlmeinfo->candidate_tid_bitmap = 0;
20719 + pmlmeinfo->bwmode_updated = _FALSE;
20720 + //pmlmeinfo->assoc_AP_vendor = maxAP;
20721 +
20722 + _rtw_memcpy(pnetwork, pbuf, FIELD_OFFSET(WLAN_BSSID_EX, IELength));
20723 + pnetwork->IELength = ((WLAN_BSSID_EX *)pbuf)->IELength;
20724 +
20725 + if(pnetwork->IELength>MAX_IE_SZ)//Check pbuf->IELength
20726 + return H2C_PARAMETERS_ERROR;
20727 +
20728 + _rtw_memcpy(pnetwork->IEs, ((WLAN_BSSID_EX *)pbuf)->IEs, pnetwork->IELength);
20729 +
20730 + pmlmeext->cur_channel = (u8)pnetwork->Configuration.DSConfig;
20731 + pmlmeinfo->bcn_interval = get_beacon_interval(pnetwork);
20732 +
20733 + //Check AP vendor to move rtw_joinbss_cmd()
20734 + //pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->IEs, pnetwork->IELength);
20735 +
20736 + for (i = sizeof(NDIS_802_11_FIXED_IEs); i < pnetwork->IELength;)
20737 {
20738 - if (pstat->rssi >= priv->pshare->rf_ft_var.raGoDownUpper)
20739 - pstat->rssi_level = 1;
20740 - else if ((pstat->rssi >= priv->pshare->rf_ft_var.raGoDown20MLower) ||
20741 - ((priv->pshare->is_40m_bw) && (pstat->ht_cap_len) &&
20742 - (pstat->rssi >= priv->pshare->rf_ft_var.raGoDown40MLower) &&
20743 - (pstat->ht_cap_buf.ht_cap_info & cpu_to_le16(_HTCAP_SUPPORT_CH_WDTH_))))
20744 - pstat->rssi_level = 2;
20745 - else
20746 - pstat->rssi_level = 3;
20747 - }
20748 + pIE = (PNDIS_802_11_VARIABLE_IEs)(pnetwork->IEs + i);
20749 +
20750 + switch (pIE->ElementID)
20751 + {
20752 + case _VENDOR_SPECIFIC_IE_://Get WMM IE.
20753 + if ( _rtw_memcmp(pIE->data, WMM_OUI, 4) )
20754 + {
20755 + pmlmeinfo->WMM_enable = 1;
20756 + }
20757 + break;
20758 +
20759 + case _HT_CAPABILITY_IE_: //Get HT Cap IE.
20760 + pmlmeinfo->HT_caps_enable = 1;
20761 + break;
20762 +
20763 + case _HT_EXTRA_INFO_IE_: //Get HT Info IE.
20764 + pmlmeinfo->HT_info_enable = 1;
20765 +
20766 + //spec case only for cisco's ap because cisco's ap issue assoc rsp using mcs rate @40MHz or @20MHz
20767 +//#if !defined(CONFIG_CONCURRENT_MODE) && !defined(CONFIG_DUALMAC_CONCURRENT)
20768 +// if(pmlmeinfo->assoc_AP_vendor == ciscoAP)
20769 +//#endif
20770 + {
20771 + struct HT_info_element *pht_info = (struct HT_info_element *)(pIE->data);
20772 +
20773 + if( pnetwork->Configuration.DSConfig > 14 )
20774 + {
20775 + if( pregpriv->cbw40_enable & BIT(1) )
20776 + cbw40_enable = 1;
20777 + }
20778 + else
20779 + if( pregpriv->cbw40_enable & BIT(0) )
20780 + cbw40_enable = 1;
20781 +
20782 + if ((cbw40_enable) && (pht_info->infos[0] & BIT(2)))
20783 + {
20784 + //switch to the 40M Hz mode according to the AP
20785 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
20786 + switch (pht_info->infos[0] & 0x3)
20787 + {
20788 + case 1:
20789 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
20790 + break;
20791 +
20792 + case 3:
20793 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
20794 + break;
20795 +
20796 + default:
20797 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
20798 + break;
20799 + }
20800
20801 - // rate adaptive by rssi
20802 - if ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11N) && pstat->ht_cap_len)
20803 - {
20804 - if ((get_rf_mimo_mode(priv) == MIMO_1T2R) || (get_rf_mimo_mode(priv) == MIMO_1T1R))
20805 - {
20806 - switch (pstat->rssi_level) {
20807 - case 1:
20808 - pstat->tx_ra_bitmap &= 0x100f0000;
20809 - break;
20810 - case 2:
20811 - pstat->tx_ra_bitmap &= 0x100ff000;
20812 - break;
20813 - case 3:
20814 - if (priv->pshare->is_40m_bw)
20815 - pstat->tx_ra_bitmap &= 0x100ff005;
20816 - else
20817 - pstat->tx_ra_bitmap &= 0x100ff001;
20818 + DBG_871X("set ch/bw before connected\n");
20819 + }
20820 + }
20821 + break;
20822
20823 - break;
20824 - }
20825 + default:
20826 + break;
20827 }
20828 - else
20829 - {
20830 - switch (pstat->rssi_level) {
20831 - case 1:
20832 - pstat->tx_ra_bitmap &= 0x1f0f0000;
20833 - break;
20834 - case 2:
20835 - pstat->tx_ra_bitmap &= 0x1f0ff000;
20836 - break;
20837 - case 3:
20838 - if (priv->pshare->is_40m_bw)
20839 - pstat->tx_ra_bitmap &= 0x000ff005;
20840 - else
20841 - pstat->tx_ra_bitmap &= 0x000ff001;
20842 -
20843 - break;
20844 - }
20845
20846 - // Don't need to mask high rates due to new rate adaptive parameters
20847 - //if (pstat->is_broadcom_sta) // use MCS12 as the highest rate vs. Broadcom sta
20848 - // pstat->tx_ra_bitmap &= 0x81ffffff;
20849 -
20850 - // NIC driver will report not supporting MCS15 and MCS14 in asoc req
20851 - //if (pstat->is_rtl8190_sta && !pstat->is_2t_mimo_sta)
20852 - // pstat->tx_ra_bitmap &= 0x83ffffff; // if Realtek 1x2 sta, don't use MCS15 and MCS14
20853 - }
20854 + i += (pIE->Length + 2);
20855 }
20856 - else if ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11G) && isErpSta(pstat))
20857 - {
20858 - switch (pstat->rssi_level) {
20859 - case 1:
20860 - pstat->tx_ra_bitmap &= 0x00000f00;
20861 - break;
20862 - case 2:
20863 - pstat->tx_ra_bitmap &= 0x00000ff0;
20864 - break;
20865 - case 3:
20866 - pstat->tx_ra_bitmap &= 0x00000ff5;
20867 - break;
20868 +#if 0
20869 + if (padapter->registrypriv.wifi_spec) {
20870 + // for WiFi test, follow WMM test plan spec
20871 + acparm = 0x002F431C; // VO
20872 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
20873 + acparm = 0x005E541C; // VI
20874 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
20875 + acparm = 0x0000A525; // BE
20876 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
20877 + acparm = 0x0000A549; // BK
20878 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
20879 +
20880 + // for WiFi test, mixed mode with intel STA under bg mode throughput issue
20881 + if (padapter->mlmepriv.htpriv.ht_option == _FALSE){
20882 + acparm = 0x00004320;
20883 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
20884 }
20885 }
20886 - else
20887 - {
20888 - pstat->tx_ra_bitmap &= 0x0000000d;
20889 + else {
20890 + acparm = 0x002F3217; // VO
20891 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
20892 + acparm = 0x005E4317; // VI
20893 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
20894 + acparm = 0x00105320; // BE
20895 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
20896 + acparm = 0x0000A444; // BK
20897 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
20898 }
20899 +#endif
20900
20901 - // disable tx short GI when station cannot rx MCS15(AP is 2T2R)
20902 - // disable tx short GI when station cannot rx MCS7 (AP is 1T2R or 1T1R)
20903 - // if there is only 1r STA and we are 2T2R, DO NOT mask SGI rate
20904 - if ((!(pstat->tx_ra_bitmap & 0x8000000) && (priv->pshare->has_2r_sta > 0) && (get_rf_mimo_mode(padapter) == RTL8712_RF_2T2R)) ||
20905 - (!(pstat->tx_ra_bitmap & 0x80000) && (get_rf_mimo_mode(padapter) != RTL8712_RF_2T2R)))
20906 - {
20907 - pstat->tx_ra_bitmap &= ~BIT(28);
20908 + /* check channel, bandwidth, offset and switch */
20909 +#ifdef CONFIG_DUALMAC_CONCURRENT
20910 + if(dc_handle_join_request(padapter) == _FAIL) {
20911 + DBG_871X("dc_handle_join_request fail !!!\n");
20912 + return H2C_SUCCESS;
20913 + }
20914 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
20915 +#else //NON CONFIG_DUALMAC_CONCURRENT
20916 + if(rtw_chk_start_clnt_join(padapter) == _FAIL) {
20917 + report_join_res(padapter, (-4));
20918 + return H2C_SUCCESS;
20919 }
20920 #endif
20921
20922 - if ( pcur_network->Configuration.DSConfig > 14 ) {
20923 - // 5G band
20924 - if (tx_ra_bitmap & 0xffff000)
20925 - sta_band |= WIRELESS_11_5N | WIRELESS_11A;
20926 - else
20927 - sta_band |= WIRELESS_11A;
20928 - } else {
20929 - if (tx_ra_bitmap & 0xffff000)
20930 - sta_band |= WIRELESS_11_24N | WIRELESS_11G | WIRELESS_11B;
20931 - else if (tx_ra_bitmap & 0xff0)
20932 - sta_band |= WIRELESS_11G |WIRELESS_11B;
20933 - else
20934 - sta_band |= WIRELESS_11B;
20935 - }
20936 + //disable dynamic functions, such as high power, DIG
20937 + //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
20938
20939 - raid = networktype_to_raid(sta_band);
20940 - init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
20941 + //config the initial gain under linking, need to write the BB registers
20942 +
20943 + initialgain = 0x1E;
20944 + rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
20945
20946 - if (psta->aid < NUM_STA)
20947 - {
20948 - u8 arg = 0;
20949 -#ifdef SUPPORT_64_STA
20950 - if(psta->mac_id >= FW_CTRL_MACID){
20951 - arg = psta->mac_id&0x3f;
20952 - if (shortGIrate==_TRUE)
20953 - arg |= BIT(7);
20954 - switch(raid){
20955 - case 0:
20956 - case 1:
20957 - case 3:
20958 - psta->init_rate=19; // N mode
20959 - break;
20960 - case 4:
20961 - case 5:
20962 - psta->init_rate=11; // G mode
20963 - break;
20964 - case 6:
20965 - psta->init_rate=3; // B mode
20966 - break;
20967 - deafult:
20968 - psta->init_rate=3; // B mode
20969 - break;
20970 -
20971 - }
20972 - // printk("%s psta->mac_id=%d arg=0x%x\n",__FUNCTION__,psta->mac_id,arg);
20973 - }
20974 - else
20975 -#endif // SUPPORT_64_STA
20976 - {
20977 - arg = psta->mac_id&0x1f;
20978 - arg |= BIT(7);
20979 - if (shortGIrate==_TRUE)
20980 - arg |= BIT(5);
20981 - //printk("%s psta->mac_id=%d arg=0x%x\n",__FUNCTION__,psta->mac_id,arg);
20982 - }
20983 - tx_ra_bitmap |= ((raid<<28)&0xf0000000);
20984 -
20985 - DBG_871X("update raid entry, bitmap=0x%x, arg=0x%x\n", tx_ra_bitmap, arg);
20986 -
20987 - //bitmap[0:27] = tx_rate_bitmap
20988 - //bitmap[28:31]= Rate Adaptive id
20989 - //arg[0:4] = macid
20990 - //arg[5] = Short GI
20991 - padapter->HalFunc.Add_RateATid(padapter, tx_ra_bitmap, arg,psta->mac_id);
20992
20993 - if (shortGIrate==_TRUE)
20994 - init_rate |= BIT(6);
20995 -
20996 - //set ra_id, init_rate
20997 - psta->raid = raid;
20998 - psta->init_rate = init_rate;
20999 -
21000 - }
21001 - else
21002 - {
21003 - DBG_871X("station aid %d exceed the max number\n", psta->aid);
21004 - }
21005 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pmlmeinfo->network.MacAddress);
21006 + join_type = 0;
21007 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
21008
21009 + //cancel link timer
21010 + _cancel_timer_ex(&pmlmeext->link_timer);
21011 +
21012 + start_clnt_join(padapter);
21013 +
21014 + return H2C_SUCCESS;
21015 +
21016 }
21017
21018 -static void update_bmc_sta(_adapter *padapter)
21019 +u8 disconnect_hdl(_adapter *padapter, unsigned char *pbuf)
21020 {
21021 - _irqL irqL;
21022 - u32 init_rate=0;
21023 - unsigned char network_type, raid;
21024 - unsigned short para16;
21025 - int i, supportRateNum = 0;
21026 - unsigned int tx_ra_bitmap=0;
21027 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
21028 - WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
21029 - struct sta_info *psta = rtw_get_bcmc_stainfo(padapter);
21030 + struct disconnect_parm *param = (struct disconnect_parm *)pbuf;
21031 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
21032 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
21033 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
21034 + u8 val8;
21035
21036 - if(psta)
21037 + if (is_client_associated_to_ap(padapter))
21038 {
21039 - psta->aid = 0;//default set to 0
21040 - //psta->mac_id = psta->aid+4;
21041 - psta->mac_id = psta->aid + 1;
21042 -
21043 - psta->qos_option = 0;
21044 - psta->htpriv.ht_option = _FALSE;
21045 -
21046 - psta->ieee8021x_blocked = 0;
21047 -
21048 - _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
21049 -
21050 - //psta->dot118021XPrivacy = _NO_PRIVACY_;//!!! remove it, because it has been set before this.
21051 + issue_deauth_ex(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING, param->deauth_timeout_ms/100, 100);
21052 + }
21053
21054 + //set_opmode_cmd(padapter, infra_client_with_mlme);
21055
21056 + //pmlmeinfo->state = WIFI_FW_NULL_STATE;
21057 +
21058
21059 - //prepare for add_RATid
21060 - supportRateNum = rtw_get_rateset_len((u8*)&pcur_network->SupportedRates);
21061 - network_type = rtw_check_network_type((u8*)&pcur_network->SupportedRates, supportRateNum, 1);
21062 -
21063 - _rtw_memcpy(psta->bssrateset, &pcur_network->SupportedRates, supportRateNum);
21064 - psta->bssratelen = supportRateNum;
21065 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_DISCONNECT, 0);
21066 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, null_addr);
21067
21068 - //b/g mode ra_bitmap
21069 - for (i=0; i<supportRateNum; i++)
21070 - {
21071 - if (psta->bssrateset[i])
21072 - tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
21073 - }
21074 + //restore to initial setting.
21075 + update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
21076
21077 - if ( pcur_network->Configuration.DSConfig > 14 ) {
21078 - //force to A mode. 5G doesn't support CCK rates
21079 - network_type = WIRELESS_11A;
21080 - tx_ra_bitmap = 0x150; // 6, 12, 24 Mbps
21081 - } else {
21082 - //force to b mode
21083 - network_type = WIRELESS_11B;
21084 - tx_ra_bitmap = 0xf;
21085 - }
21086 + if(((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
21087 + {
21088 + //Stop BCN
21089 + val8 = 0;
21090 + rtw_hal_set_hwreg(padapter, HW_VAR_BCN_FUNC, (u8 *)(&val8));
21091 + }
21092
21093 - //tx_ra_bitmap = update_basic_rate(pcur_network->SupportedRates, supportRateNum);
21094
21095 - raid = networktype_to_raid(network_type);
21096 - init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
21097 -
21098 - //DBG_871X("Add id %d val %08x to ratr for bmc sta\n", psta->aid, tx_ra_bitmap);
21099 + //set MSR to no link state -> infra. mode
21100 + Set_MSR(padapter, _HW_STATE_STATION_);
21101
21102 - //if(pHalData->fw_ractrl == _TRUE)
21103 - {
21104 - u8 arg = 0;
21105 + pmlmeinfo->state = WIFI_FW_NULL_STATE;
21106
21107 - arg = psta->mac_id&0x1f;
21108 -
21109 - arg |= BIT(7);
21110 -
21111 - //if (shortGIrate==_TRUE)
21112 - // arg |= BIT(5);
21113 -
21114 - tx_ra_bitmap |= ((raid<<28)&0xf0000000);
21115 +#ifdef CONFIG_DUALMAC_CONCURRENT
21116 + dc_set_channel_bwmode_disconnect(padapter);
21117 +#else
21118 +#ifdef CONFIG_CONCURRENT_MODE
21119 + if((check_buddy_fwstate(padapter, _FW_LINKED)) != _TRUE)
21120 + {
21121 +#endif //CONFIG_CONCURRENT_MODE
21122 + //switch to the 20M Hz mode after disconnect
21123 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
21124 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
21125
21126 - DBG_871X("update_bmc_sta, mask=0x%x, arg=0x%x\n", tx_ra_bitmap, arg);
21127 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
21128 +#ifdef CONFIG_CONCURRENT_MODE
21129 + }
21130 +#endif //CONFIG_CONCURRENT_MODE
21131 +#endif //CONFIG_DUALMAC_CONCURRENT
21132
21133 - //bitmap[0:27] = tx_rate_bitmap
21134 - //bitmap[28:31]= Rate Adaptive id
21135 - //arg[0:4] = macid
21136 - //arg[5] = Short GI
21137 - padapter->HalFunc.Add_RateATid(padapter, tx_ra_bitmap, arg,psta->mac_id );
21138 + flush_all_cam_entry(padapter);
21139
21140 - }
21141 -
21142 - //set ra_id, init_rate
21143 - psta->raid = raid;
21144 - psta->init_rate = init_rate;
21145 -
21146 - _enter_critical_bh(&psta->lock, &irqL);
21147 - psta->state = _FW_LINKED;
21148 - _exit_critical_bh(&psta->lock, &irqL);
21149 + _cancel_timer_ex(&pmlmeext->link_timer);
21150
21151 - }
21152 - else
21153 - {
21154 - DBG_871X("add_RATid_bmc_sta error!\n");
21155 - }
21156 -
21157 + rtw_free_uc_swdec_pending_queue(padapter);
21158 +
21159 + return H2C_SUCCESS;
21160 }
21161
21162 -//notes:
21163 -//AID: 1~MAX for sta and 0 for bc/mc in ap/adhoc mode
21164 -//MAC_ID = AID+1 for sta in ap/adhoc mode
21165 -//MAC_ID = 1 for bc/mc for sta/ap/adhoc
21166 -//MAC_ID = 0 for bssid for sta/ap/adhoc
21167 -//CAM_ID = //0~3 for default key, cmd_id=macid + 3, macid=aid+1;
21168 -
21169 -void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta)
21170 -{
21171 - _irqL irqL;
21172 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
21173 - struct security_priv *psecuritypriv = &padapter->securitypriv;
21174 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
21175 - struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
21176 - struct ht_priv *phtpriv_sta = &psta->htpriv;
21177 +int rtw_scan_ch_decision(_adapter *padapter, struct rtw_ieee80211_channel *out,
21178 + u32 out_num, struct rtw_ieee80211_channel *in, u32 in_num)
21179 +{
21180 + int i, j;
21181 + int scan_ch_num = 0;
21182 + int set_idx;
21183 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
21184
21185 - //set intf_tag to if1
21186 - //psta->intf_tag = 0;
21187 + /* clear first */
21188 + _rtw_memset(out, 0, sizeof(struct rtw_ieee80211_channel)*out_num);
21189
21190 - //psta->mac_id = psta->aid+4;
21191 - psta->mac_id = psta->aid+1;
21192 -
21193 - if(psecuritypriv->dot11AuthAlgrthm==dot11AuthAlgrthm_8021X)
21194 - psta->ieee8021x_blocked = _TRUE;
21195 - else
21196 - psta->ieee8021x_blocked = _FALSE;
21197 -
21198 + /* acquire channels from in */
21199 + j = 0;
21200 + for (i=0;i<in_num;i++) {
21201
21202 - //update sta's cap
21203 -
21204 - //ERP
21205 - VCS_update(padapter, psta);
21206 -
21207 - //HT related cap
21208 - if(phtpriv_sta->ht_option)
21209 - {
21210 - //check if sta supports rx ampdu
21211 - phtpriv_sta->ampdu_enable = phtpriv_ap->ampdu_enable;
21212 + if (0)
21213 + DBG_871X(FUNC_ADPT_FMT" "CHAN_FMT"\n", FUNC_ADPT_ARG(padapter), CHAN_ARG(&in[i]));
21214
21215 - //check if sta support s Short GI
21216 - 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))
21217 + if(in[i].hw_value && !(in[i].flags & RTW_IEEE80211_CHAN_DISABLED)
21218 + && (set_idx=rtw_ch_set_search_ch(pmlmeext->channel_set, in[i].hw_value)) >=0
21219 + && rtw_mlme_band_check(padapter, in[i].hw_value) == _TRUE
21220 + )
21221 {
21222 - phtpriv_sta->sgi = _TRUE;
21223 - }
21224 + if (j >= out_num) {
21225 + DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" out_num:%u not enough\n",
21226 + FUNC_ADPT_ARG(padapter), out_num);
21227 + break;
21228 + }
21229
21230 - // bwmode
21231 - if((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))
21232 - {
21233 - //phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_40;
21234 - phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
21235 - phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
21236 + _rtw_memcpy(&out[j], &in[i], sizeof(struct rtw_ieee80211_channel));
21237
21238 - }
21239 -
21240 - psta->qos_option = _TRUE;
21241 -
21242 - }
21243 - else
21244 - {
21245 - phtpriv_sta->ampdu_enable = _FALSE;
21246 -
21247 - phtpriv_sta->sgi = _FALSE;
21248 - phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_20;
21249 - phtpriv_sta->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
21250 + if(pmlmeext->channel_set[set_idx].ScanType == SCAN_PASSIVE)
21251 + out[j].flags &= RTW_IEEE80211_CHAN_PASSIVE_SCAN;
21252 +
21253 + j++;
21254 + }
21255 + if(j>=out_num)
21256 + break;
21257 }
21258 -
21259 - //Rx AMPDU
21260 - send_delba(padapter, 0, psta->hwaddr);// recipient
21261 -
21262 - //TX AMPDU
21263 - send_delba(padapter, 1, psta->hwaddr);// // originator
21264 - phtpriv_sta->agg_enable_bitmap = 0x0;//reset
21265 - phtpriv_sta->candidate_tid_bitmap = 0x0;//reset
21266
21267 + /* if out is empty, use channel_set as default */
21268 + if(j == 0) {
21269 + for (i=0;i<pmlmeext->max_chan_nums;i++) {
21270
21271 - //todo: init other variables
21272 -
21273 - _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
21274 + if (0)
21275 + DBG_871X(FUNC_ADPT_FMT" ch:%u\n", FUNC_ADPT_ARG(padapter), pmlmeext->channel_set[i].ChannelNum);
21276
21277 + if (rtw_mlme_band_check(padapter, pmlmeext->channel_set[i].ChannelNum) == _TRUE) {
21278
21279 - //add ratid
21280 - //add_RATid(padapter, psta);//move to ap_sta_info_defer_update()
21281 + if (j >= out_num) {
21282 + DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" out_num:%u not enough\n",
21283 + FUNC_ADPT_ARG(padapter), out_num);
21284 + break;
21285 + }
21286
21287 + out[j].hw_value = pmlmeext->channel_set[i].ChannelNum;
21288 +
21289 + if(pmlmeext->channel_set[i].ScanType == SCAN_PASSIVE)
21290 + out[j].flags &= RTW_IEEE80211_CHAN_PASSIVE_SCAN;
21291
21292 - _enter_critical_bh(&psta->lock, &irqL);
21293 - psta->state |= _FW_LINKED;
21294 - _exit_critical_bh(&psta->lock, &irqL);
21295 -
21296 + j++;
21297 + }
21298 + }
21299 + }
21300
21301 + return j;
21302 }
21303
21304 -static void update_hw_ht_param(_adapter *padapter)
21305 +u8 sitesurvey_cmd_hdl(_adapter *padapter, u8 *pbuf)
21306 {
21307 - unsigned char max_AMPDU_len;
21308 - unsigned char min_MPDU_spacing;
21309 - struct registry_priv *pregpriv = &padapter->registrypriv;
21310 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
21311 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
21312 -
21313 - DBG_871X("%s\n", __FUNCTION__);
21314 -
21315 -
21316 - //handle A-MPDU parameter field
21317 - /*
21318 - AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
21319 - AMPDU_para [4:2]:Min MPDU Start Spacing
21320 - */
21321 - max_AMPDU_len = pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x03;
21322 -
21323 - min_MPDU_spacing = (pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x1c) >> 2;
21324 -
21325 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
21326 + struct sitesurvey_parm *pparm = (struct sitesurvey_parm *)pbuf;
21327 + u8 bdelayscan = _FALSE;
21328 + u8 val8;
21329 + u32 initialgain;
21330 + u32 i;
21331 + u8 write_initial_gain = 1;
21332
21333 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AMPDU_FACTOR, (u8 *)(&max_AMPDU_len));
21334 +#ifdef CONFIG_P2P
21335 + struct wifidirect_info* pwdinfo = &padapter->wdinfo;
21336 +#endif
21337
21338 - //
21339 - // Config SM Power Save setting
21340 - //
21341 - pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info & 0x0C) >> 2;
21342 - if(pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
21343 + if (pmlmeext->sitesurvey_res.state == SCAN_DISABLE)
21344 {
21345 - /*u8 i;
21346 - //update the MCS rates
21347 - for (i = 0; i < 16; i++)
21348 - {
21349 - pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
21350 - }*/
21351 - DBG_8192C("%s(): WLAN_HT_CAP_SM_PS_STATIC\n",__FUNCTION__);
21352 - }
21353 -
21354 - //
21355 - // Config current HT Protection mode.
21356 - //
21357 - //pmlmeinfo->HT_protection = pmlmeinfo->HT_info.infos[1] & 0x3;
21358 -
21359 -}
21360 -
21361 -static void start_bss_network(_adapter *padapter, u8 *pbuf)
21362 -{
21363 - u8 *p;
21364 - u8 val8, cur_channel, cur_bwmode, cur_ch_offset;
21365 - u16 bcn_interval;
21366 - u32 acparm;
21367 - int ie_len;
21368 - struct registry_priv *pregpriv = &padapter->registrypriv;
21369 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
21370 - struct security_priv* psecuritypriv=&(padapter->securitypriv);
21371 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
21372 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
21373 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
21374 - WLAN_BSSID_EX *pnetwork_mlmeext = &(pmlmeinfo->network);
21375 -#ifdef CONFIG_P2P
21376 - struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
21377 -#endif //CONFIG_P2P
21378 -
21379 -
21380 - //DBG_8192C("%s\n", __FUNCTION__);
21381 +#ifdef CONFIG_CONCURRENT_MODE
21382 + //for first time sitesurvey_cmd
21383 + rtw_hal_set_hwreg(padapter, HW_VAR_CHECK_TXBUF, 0);
21384 +#endif //CONFIG_CONCURRENT_MODE
21385 +
21386 + pmlmeext->sitesurvey_res.state = SCAN_START;
21387 + pmlmeext->sitesurvey_res.bss_cnt = 0;
21388 + pmlmeext->sitesurvey_res.channel_idx = 0;
21389
21390 - bcn_interval = (u16)pnetwork->Configuration.BeaconPeriod;
21391 - cur_channel = pnetwork->Configuration.DSConfig;
21392 - cur_bwmode = HT_CHANNEL_WIDTH_20;;
21393 - cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
21394 -
21395 + for(i=0;i<RTW_SSID_SCAN_AMOUNT;i++){
21396 + if(pparm->ssid[i].SsidLength) {
21397 + _rtw_memcpy(pmlmeext->sitesurvey_res.ssid[i].Ssid, pparm->ssid[i].Ssid, IW_ESSID_MAX_SIZE);
21398 + pmlmeext->sitesurvey_res.ssid[i].SsidLength= pparm->ssid[i].SsidLength;
21399 + } else {
21400 + pmlmeext->sitesurvey_res.ssid[i].SsidLength= 0;
21401 + }
21402 + }
21403
21404 - //check if there is wps ie,
21405 - //if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd,
21406 - //and at first time the security ie ( RSN/WPA IE) will not include in beacon.
21407 - if(NULL == rtw_get_wps_ie(pnetwork->IEs+_FIXED_IE_LENGTH_, pnetwork->IELength-_FIXED_IE_LENGTH_, NULL, NULL))
21408 - {
21409 - pmlmeext->bstart_bss = _TRUE;
21410 - }
21411 -
21412 - //udpate capability
21413 - update_capinfo(padapter, rtw_get_capability((WLAN_BSSID_EX *)pnetwork));
21414 -
21415 - //todo: update wmm, ht cap
21416 - //pmlmeinfo->WMM_enable;
21417 - //pmlmeinfo->HT_enable;
21418 - if(pmlmepriv->qospriv.qos_option)
21419 - pmlmeinfo->WMM_enable = _TRUE;
21420 + pmlmeext->sitesurvey_res.ch_num = rtw_scan_ch_decision(padapter
21421 + , pmlmeext->sitesurvey_res.ch, RTW_CHANNEL_SCAN_AMOUNT
21422 + , pparm->ch, pparm->ch_num
21423 + );
21424
21425 - if(pmlmepriv->htpriv.ht_option)
21426 - {
21427 - pmlmeinfo->WMM_enable = _TRUE;
21428 - pmlmeinfo->HT_enable = _TRUE;
21429 - //pmlmeinfo->HT_info_enable = _TRUE;
21430 - //pmlmeinfo->HT_caps_enable = _TRUE;
21431 + pmlmeext->sitesurvey_res.scan_mode = pparm->scan_mode;
21432
21433 - update_hw_ht_param(padapter);
21434 - }
21435 -
21436 +#ifdef CONFIG_DUALMAC_CONCURRENT
21437 + bdelayscan = dc_handle_site_survey(padapter);
21438 +#endif
21439
21440 - if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at first time
21441 - {
21442 - flush_all_cam_entry(padapter); //clear CAM
21443 - }
21444 + //issue null data if associating to the AP
21445 + if (is_client_associated_to_ap(padapter) == _TRUE)
21446 + {
21447 + pmlmeext->sitesurvey_res.state = SCAN_TXNULL;
21448
21449 - //set MSR to AP_Mode
21450 - Set_NETYPE0_MSR(padapter, _HW_STATE_AP_);
21451 -
21452 - //Set BSSID REG
21453 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, pnetwork->MacAddress);
21454 + issue_nulldata(padapter, NULL, 1, 3, 500);
21455
21456 - //Set EDCA param reg
21457 - acparm = 0x002F3217; // VO
21458 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
21459 - acparm = 0x005E4317; // VI
21460 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
21461 - //acparm = 0x00105320; // BE
21462 - acparm = 0x005ea42b;
21463 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
21464 - acparm = 0x0000A444; // BK
21465 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
21466 +#ifdef CONFIG_CONCURRENT_MODE
21467 + if(is_client_associated_to_ap(padapter->pbuddy_adapter) == _TRUE)
21468 + {
21469 + DBG_871X("adapter is scanning(buddy_adapter is linked), issue nulldata(pwrbit=1)\n");
21470 +
21471 + issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);
21472 + }
21473 +#endif
21474 + bdelayscan = _TRUE;
21475 + }
21476 +#ifdef CONFIG_CONCURRENT_MODE
21477 + else if(is_client_associated_to_ap(padapter->pbuddy_adapter) == _TRUE)
21478 + {
21479 + #ifdef CONFIG_TDLS
21480 + if(padapter->pbuddy_adapter->wdinfo.wfd_tdls_enable == 1)
21481 + {
21482 + issue_tunneled_probe_req(padapter->pbuddy_adapter);
21483 + }
21484 + #endif //CONFIG_TDLS
21485
21486 - //Set Security
21487 - val8 = (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)? 0xcc: 0xcf;
21488 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
21489 + pmlmeext->sitesurvey_res.state = SCAN_TXNULL;
21490
21491 - //Beacon Control related register
21492 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BEACON_INTERVAL, (u8 *)(&bcn_interval));
21493 + issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);
21494
21495 -
21496 - UpdateBrateTbl(padapter, pnetwork->SupportedRates);
21497 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BASIC_RATE, pnetwork->SupportedRates);
21498 + bdelayscan = _TRUE;
21499 + }
21500 +#endif
21501 + if(bdelayscan)
21502 + {
21503 + //delay 50ms to protect nulldata(1).
21504 + set_survey_timer(pmlmeext, 50);
21505 + return H2C_SUCCESS;
21506 + }
21507 + }
21508
21509 - if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at first time
21510 + if ((pmlmeext->sitesurvey_res.state == SCAN_START) || (pmlmeext->sitesurvey_res.state == SCAN_TXNULL))
21511 {
21512 - u32 initialgain;
21513 +#ifdef CONFIG_FIND_BEST_CHANNEL
21514 +#if 0
21515 + for (i=0; pmlmeext->channel_set[i].ChannelNum !=0; i++) {
21516 + pmlmeext->channel_set[i].rx_count = 0;
21517 + }
21518 +#endif
21519 +#endif /* CONFIG_FIND_BEST_CHANNEL */
21520
21521 //disable dynamic functions, such as high power, DIG
21522 - //Save_DM_Func_Flag(padapter);
21523 - //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
21524 -
21525 - //turn on dynamic functions
21526 - Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, _TRUE);
21527 + Save_DM_Func_Flag(padapter);
21528 + Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
21529
21530 - initialgain = 0x30;
21531 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
21532 -
21533 - }
21534 + //config the initial gain under scaning, need to write the BB registers
21535
21536 - //set channel, bwmode
21537 - 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)));
21538 - if( p && ie_len)
21539 - {
21540 - struct HT_info_element *pht_info = (struct HT_info_element *)(p+2);
21541 -
21542 - if ((pregpriv->cbw40_enable) && (pht_info->infos[0] & BIT(2)))
21543 +#ifdef CONFIG_P2P
21544 +#ifdef CONFIG_IOCTL_CFG80211
21545 + if((wdev_to_priv(padapter->rtw_wdev))->p2p_enabled == _TRUE && pwdinfo->driver_interface == DRIVER_CFG80211 )
21546 {
21547 - //switch to the 40M Hz mode
21548 - //pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
21549 - cur_bwmode = HT_CHANNEL_WIDTH_40;
21550 - switch (pht_info->infos[0] & 0x3)
21551 - {
21552 - case 1:
21553 - //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
21554 - cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
21555 - break;
21556 -
21557 - case 3:
21558 - //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
21559 - cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
21560 - break;
21561 -
21562 - default:
21563 - //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
21564 - cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
21565 - break;
21566 - }
21567 -
21568 + write_initial_gain = 0;
21569 }
21570 -
21571 - }
21572 -
21573 - //TODO: need to judge the phy parameters on concurrent mode for single phy
21574 - //set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
21575 - set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
21576 -
21577 - DBG_871X("CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
21578 -
21579 - //
21580 - pmlmeext->cur_channel = cur_channel;
21581 - pmlmeext->cur_bwmode = cur_bwmode;
21582 - pmlmeext->cur_ch_offset = cur_ch_offset;
21583 - pmlmeext->cur_wireless_mode = pmlmepriv->cur_network.network_type;
21584 + else
21585 +#endif //CONFIG_IOCTL_CFG80211
21586 + if ( !rtw_p2p_chk_state( pwdinfo, P2P_STATE_NONE ) )
21587 + initialgain = 0x28;
21588 + else
21589 +#endif //CONFIG_P2P
21590 + initialgain = 0x17;
21591
21592 - //update cur_wireless_mode
21593 - update_wireless_mode(padapter);
21594 -
21595 - //let pnetwork_mlmeext == pnetwork_mlme.
21596 - _rtw_memcpy(pnetwork_mlmeext, pnetwork, pnetwork->Length);
21597 + if(write_initial_gain == 1)
21598 + rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
21599
21600 -#ifdef CONFIG_P2P
21601 - _rtw_memcpy(pwdinfo->p2p_group_ssid, pnetwork->Ssid.Ssid, pnetwork->Ssid.SsidLength);
21602 - pwdinfo->p2p_group_ssid_len = pnetwork->Ssid.SsidLength;
21603 -#endif //CONFIG_P2P
21604 + //set MSR to no link state
21605 + Set_MSR(padapter, _HW_STATE_NOLINK_);
21606
21607 -
21608 - if(_TRUE == pmlmeext->bstart_bss)
21609 - {
21610 - update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
21611 + val8 = 1; //under site survey
21612 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
21613
21614 - //issue beacon frame
21615 - if(send_beacon(padapter)==_FAIL)
21616 - {
21617 - DBG_871X("issue_beacon, fail!\n");
21618 - }
21619 + pmlmeext->sitesurvey_res.state = SCAN_PROCESS;
21620 }
21621
21622 + site_survey(padapter);
21623
21624 - //update bc/mc sta_info
21625 - update_bmc_sta(padapter);
21626 -
21627 - //pmlmeext->bstart_bss = _TRUE;
21628 + return H2C_SUCCESS;
21629
21630 }
21631
21632 -int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len)
21633 +u8 setauth_hdl(_adapter *padapter, unsigned char *pbuf)
21634 {
21635 - int ret=_SUCCESS;
21636 - u8 *p;
21637 - u8 *pHT_caps_ie=NULL;
21638 - u8 *pHT_info_ie=NULL;
21639 - struct sta_info *psta = NULL;
21640 - u16 cap, ht_cap=_FALSE;
21641 - uint ie_len = 0;
21642 - int group_cipher, pairwise_cipher;
21643 - u8 channel, network_type, supportRate[NDIS_802_11_LENGTH_RATES_EX];
21644 - int supportRateNum = 0;
21645 - u8 OUI1[] = {0x00, 0x50, 0xf2,0x01};
21646 - u8 wps_oui[4]={0x0,0x50,0xf2,0x04};
21647 - u8 WMM_PARA_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
21648 - struct registry_priv *pregistrypriv = &padapter->registrypriv;
21649 - struct security_priv *psecuritypriv = &padapter->securitypriv;
21650 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
21651 - WLAN_BSSID_EX *pbss_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
21652 - struct sta_priv *pstapriv = &padapter->stapriv;
21653 - u8 *ie = pbss_network->IEs;
21654 + struct setauth_parm *pparm = (struct setauth_parm *)pbuf;
21655 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
21656 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
21657
21658 + if (pparm->mode < 4)
21659 + {
21660 + pmlmeinfo->auth_algo = pparm->mode;
21661 + }
21662
21663 - /* SSID */
21664 - /* Supported rates */
21665 - /* DS Params */
21666 - /* WLAN_EID_COUNTRY */
21667 - /* ERP Information element */
21668 - /* Extended supported rates */
21669 - /* WPA/WPA2 */
21670 - /* Wi-Fi Wireless Multimedia Extensions */
21671 - /* ht_capab, ht_oper */
21672 - /* WPS IE */
21673 -
21674 - DBG_8192C("%s, len=%d\n", __FUNCTION__, len);
21675 -
21676 - if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
21677 - return _FAIL;
21678 + return H2C_SUCCESS;
21679 +}
21680
21681 +u8 setkey_hdl(_adapter *padapter, u8 *pbuf)
21682 +{
21683 + unsigned short ctrl;
21684 + struct setkey_parm *pparm = (struct setkey_parm *)pbuf;
21685 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
21686 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
21687 + unsigned char null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
21688
21689 - if(len>MAX_IE_SZ)
21690 - return _FAIL;
21691 + //main tx key for wep.
21692 + if(pparm->set_tx)
21693 + pmlmeinfo->key_index = pparm->keyid;
21694
21695 - pbss_network->IELength = len;
21696 + //write cam
21697 + ctrl = BIT(15) | ((pparm->algorithm) << 2) | pparm->keyid;
21698
21699 - _rtw_memset(ie, 0, MAX_IE_SZ);
21700 -
21701 - _rtw_memcpy(ie, pbuf, pbss_network->IELength);
21702 + write_cam(padapter, pparm->keyid, ctrl, null_sta, pparm->key);
21703
21704 + //allow multicast packets to driver
21705 + rtw_hal_set_hwreg(padapter, HW_VAR_ON_RCR_AM, null_addr);
21706
21707 - if(pbss_network->InfrastructureMode!=Ndis802_11APMode)
21708 - return _FAIL;
21709 + return H2C_SUCCESS;
21710 +}
21711
21712 - pbss_network->Rssi = 0;
21713 +u8 set_stakey_hdl(_adapter *padapter, u8 *pbuf)
21714 +{
21715 + u16 ctrl=0;
21716 + u8 cam_id;//cam_entry
21717 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
21718 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
21719 + struct set_stakey_parm *pparm = (struct set_stakey_parm *)pbuf;
21720 +#ifdef CONFIG_TDLS
21721 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
21722 + struct sta_priv *pstapriv = &padapter->stapriv;
21723 + struct sta_info *psta;
21724 +#endif //CONFIG_TDLS
21725
21726 - _rtw_memcpy(pbss_network->MacAddress, myid(&(padapter->eeprompriv)), ETH_ALEN);
21727 -
21728 - //beacon interval
21729 - p = rtw_get_beacon_interval_from_ie(ie);//ie + 8; // 8: TimeStamp, 2: Beacon Interval 2:Capability
21730 - //pbss_network->Configuration.BeaconPeriod = le16_to_cpu(*(unsigned short*)p);
21731 - pbss_network->Configuration.BeaconPeriod = RTW_GET_LE16(p);
21732 + //cam_entry:
21733 + //0~3 for default key
21734
21735 - //capability
21736 - //cap = *(unsigned short *)rtw_get_capability_from_ie(ie);
21737 - //cap = le16_to_cpu(cap);
21738 - cap = RTW_GET_LE16(ie);
21739 + //for concurrent mode (ap+sta):
21740 + //default key is disable, using sw encrypt/decrypt
21741 + //cam_entry = 4 //for sta mode (macid=0)
21742 + //cam_entry(macid+3) = 5 ~ N//for ap mode (aid=1~N, macid=2 ~N)
21743
21744 - //SSID
21745 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->IELength -_BEACON_IE_OFFSET_));
21746 - if(p && ie_len>0)
21747 + //for concurrent mode (sta+sta):
21748 + //default key is disable, using sw encrypt/decrypt
21749 + //cam_entry = 4 //mapping to macid=0
21750 + //cam_entry = 5 //mapping to macid=2
21751 +
21752 +#ifdef CONFIG_CONCURRENT_MODE
21753 + if((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE)
21754 {
21755 - _rtw_memset(&pbss_network->Ssid, 0, sizeof(NDIS_802_11_SSID));
21756 - _rtw_memcpy(pbss_network->Ssid.Ssid, (p + 2), ie_len);
21757 - pbss_network->Ssid.SsidLength = ie_len;
21758 - }
21759 + struct sta_priv *pstapriv = &padapter->stapriv;
21760 + struct sta_info *psta;
21761 +
21762 + psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress);
21763
21764 - //chnnel
21765 - channel = 0;
21766 - pbss_network->Configuration.Length = 0;
21767 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _DSSET_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
21768 - if(p && ie_len>0)
21769 - channel = *(p + 2);
21770 + if(psta && psta->mac_id==2)
21771 + {
21772 + cam_id = 5;
21773 + }
21774 + else
21775 + {
21776 + cam_id = 4;
21777 + }
21778 +/*
21779 + if(padapter->iface_type > PRIMARY_IFACE)
21780 + {
21781 + cam_id = 5;
21782 + }
21783 + else
21784 + {
21785 + cam_id = 4;
21786 + }
21787 +*/
21788 + }
21789 +#else
21790 + cam_id = 4;
21791 +#endif
21792
21793 - pbss_network->Configuration.DSConfig = channel;
21794
21795 -
21796 - _rtw_memset(supportRate, 0, NDIS_802_11_LENGTH_RATES_EX);
21797 - // get supported rates
21798 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
21799 - if (p != NULL)
21800 - {
21801 - _rtw_memcpy(supportRate, p+2, ie_len);
21802 - supportRateNum = ie_len;
21803 - }
21804 -
21805 - //get ext_supported rates
21806 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ie_len, pbss_network->IELength - _BEACON_IE_OFFSET_);
21807 - if (p != NULL)
21808 + if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
21809 {
21810 - _rtw_memcpy(supportRate+supportRateNum, p+2, ie_len);
21811 - supportRateNum += ie_len;
21812
21813 - }
21814 -
21815 - network_type = rtw_check_network_type(supportRate, supportRateNum, channel);
21816 + struct sta_info *psta;
21817 + struct sta_priv *pstapriv = &padapter->stapriv;
21818
21819 - rtw_set_supported_rate(pbss_network->SupportedRates, network_type);
21820 + if(pparm->algorithm == _NO_PRIVACY_) // clear cam entry
21821 + {
21822 + clear_cam_entry(padapter, pparm->id);
21823 + return H2C_SUCCESS_RSP;
21824 + }
21825 +
21826 + psta = rtw_get_stainfo(pstapriv, pparm->addr);
21827 + if(psta)
21828 + {
21829 + ctrl = (BIT(15) | ((pparm->algorithm) << 2));
21830
21831 + DBG_871X("r871x_set_stakey_hdl(): enc_algorithm=%d\n", pparm->algorithm);
21832
21833 - //parsing ERP_IE
21834 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
21835 - if(p && ie_len>0)
21836 - {
21837 - ERP_IE_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)p);
21838 - }
21839 -#ifdef SUPPORT_64_STA
21840 - //capability
21841 - p=rtw_get_capability_from_ie(ie);
21842 - //cap = le16_to_cpu(cap);
21843 - cap = RTW_GET_LE16(p);
21844 - //printk("%s cap=0x%x\n",__FUNCTION__,cap);
21845 - cap &=~BIT(4);
21846 - //printk("%s cap=0x%x\n",__FUNCTION__,cap);
21847 - RTW_PUT_LE16(p,cap);
21848 - cap = RTW_GET_LE16(p);
21849 - //printk("%s [fin] cap=0x%x\n",__FUNCTION__,cap);
21850 - pbss_network->Privacy = 0;
21851 - psecuritypriv->wpa_psk = 0;
21852 -
21853 - {
21854 - u32 i,j;
21855 - printk(" %s :Dump IEs\n",__FUNCTION__);
21856 - for(i=0,j=1;i<pbss_network->IELength;i++){
21857 - printk("0x%.2x:",ie[i]);
21858 - if( ((j++)%16)==0 )
21859 - printk("\n");
21860 - }
21861 - printk("\n");
21862 - }
21863 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
21864 - if(p && ie_len>0){
21865 - //remove wpa2 ie
21866 - u32 offset=0,remain=0;
21867 - offset=p-ie;
21868 - remain= pbss_network->IELength-offset-ie_len-2;
21869 - DBG_8192C("%s wpa2 ie_len=%d offset=%d remain=%d IELength=%d\n",__FUNCTION__,ie_len,offset,remain,pbss_network->IELength);
21870 - {
21871 - u32 i,j;
21872 - printk(" %s :Dump IEs\n",__FUNCTION__);
21873 - for(i=0,j=1;i<pbss_network->IELength;i++){
21874 - printk("0x%.2x:",ie[i]);
21875 - if((((j++)%16)==0) )
21876 - printk("\n");
21877 - }
21878 - DBG_8192C("\n");
21879 - }
21880 - _rtw_memcpy(p,p+ie_len+2,remain);
21881 - pbss_network->IELength-=(ie_len+2);
21882 - DBG_8192C("%s wpa2 [fin]ie_len=%d remain=%d IELength=%d\n",__FUNCTION__,ie_len,remain,pbss_network->IELength);
21883 - {
21884 - u32 i,j;
21885 - printk(" %s :Dump IEs\n",__FUNCTION__);
21886 - for(i=0,j=1;i<pbss_network->IELength;i++){
21887 - printk("0x%.2x:",ie[i]);
21888 - if((j++%16)==0 )
21889 - printk("\n");
21890 - }
21891 - DBG_8192C("\n");
21892 - }
21893 - }
21894 -
21895 - psecuritypriv->dot8021xalg = 0;
21896 - psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
21897 - psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
21898 - {
21899 - //remove wpa ie
21900 - u32 rem=pbss_network->IELength-_BEACON_IE_OFFSET_;
21901 - p = ie + _BEACON_IE_OFFSET_;
21902 -
21903 - 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);
21904 - DBG_8192C("%s id=0x%x len=%d rem=%d next p %p\n",__FUNCTION__,*p,p[1],rem,(p + (p[1]+2)));
21905 - for (p = ie + _BEACON_IE_OFFSET_;rem>0 ;)
21906 - {
21907 - DBG_8192C("%s id=0x%x len=%d rem=%d next p %p\n",__FUNCTION__,*p,p[1],rem,p + (p[1]+2));
21908 - if ((p) && (_rtw_memcmp(p+2, OUI1, 4)))
21909 + if((psta->mac_id<1) || (psta->mac_id>(NUM_STA-4)))
21910 {
21911 - //remove wpa ie
21912 - u32 remain=0;
21913 - u8 *ptr;
21914 - remain= rem-p[1]-2;
21915 - ptr=p+p[1]+2;
21916 - 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]);
21917 - pbss_network->IELength-=(p[1]+2);
21918 - _rtw_memcpy(p,ptr,remain);
21919 - DBG_8192C("%s wpa [fin]ie_len=%d remain=%d IELength=%d\n",__FUNCTION__,p[1],remain,pbss_network->IELength);
21920 - {
21921 - u32 i,j;
21922 - DBG_8192C(" %s :Dump IEs\n",__FUNCTION__);
21923 - for(i=0,j=1;i<pbss_network->IELength;i++){
21924 - printk("0x%.2x:",ie[i]);
21925 - if((j++%16)==0)
21926 - DBG_8192C("\n");
21927 - }
21928 - DBG_8192C("\n");
21929 - }
21930 - DBG_8192C("%s wpa [fin] ie_len=%d remain=%d IELength=%d\n",__FUNCTION__,ie_len,remain,pbss_network->IELength);
21931 - rem=remain;
21932 - }else{
21933 - rem -= (p[1]+2);
21934 - p+=(p[1]+2);
21935 - }
21936 - }
21937 - }
21938 -#else //SUPPORT_64_STA
21939 -
21940 - //update privacy/security
21941 - if (cap & BIT(4))
21942 - pbss_network->Privacy = 1;
21943 - else
21944 - pbss_network->Privacy = 0;
21945 + DBG_871X("r871x_set_stakey_hdl():set_stakey failed, mac_id(aid)=%d\n", psta->mac_id);
21946 + return H2C_REJECTED;
21947 + }
21948 +
21949 + cam_id = (psta->mac_id + 3);//0~3 for default key, cmd_id=macid + 3, macid=aid+1;
21950
21951 - psecuritypriv->wpa_psk = 0;
21952 + DBG_871X("Write CAM, mac_addr=%x:%x:%x:%x:%x:%x, cam_entry=%d\n", pparm->addr[0],
21953 + pparm->addr[1], pparm->addr[2], pparm->addr[3], pparm->addr[4],
21954 + pparm->addr[5], cam_id);
21955
21956 - //wpa2
21957 - group_cipher = 0; pairwise_cipher = 0;
21958 - psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
21959 - psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
21960 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
21961 - if(p && ie_len>0)
21962 - {
21963 - if(rtw_parse_wpa2_ie(p, ie_len+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
21964 + write_cam(padapter, cam_id, ctrl, pparm->addr, pparm->key);
21965 +
21966 + return H2C_SUCCESS_RSP;
21967 +
21968 + }
21969 + else
21970 {
21971 - psecuritypriv->dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
21972 -
21973 - psecuritypriv->dot8021xalg = 1;//psk, todo:802.1x
21974 - psecuritypriv->wpa_psk |= BIT(1);
21975 -
21976 - psecuritypriv->wpa2_group_cipher = group_cipher;
21977 - psecuritypriv->wpa2_pairwise_cipher = pairwise_cipher;
21978 -#if 0
21979 - switch(group_cipher)
21980 - {
21981 - case WPA_CIPHER_NONE:
21982 - psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
21983 - break;
21984 - case WPA_CIPHER_WEP40:
21985 - psecuritypriv->wpa2_group_cipher = _WEP40_;
21986 - break;
21987 - case WPA_CIPHER_TKIP:
21988 - psecuritypriv->wpa2_group_cipher = _TKIP_;
21989 - break;
21990 - case WPA_CIPHER_CCMP:
21991 - psecuritypriv->wpa2_group_cipher = _AES_;
21992 - break;
21993 - case WPA_CIPHER_WEP104:
21994 - psecuritypriv->wpa2_group_cipher = _WEP104_;
21995 - break;
21996 - }
21997 -
21998 - switch(pairwise_cipher)
21999 - {
22000 - case WPA_CIPHER_NONE:
22001 - psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
22002 - break;
22003 - case WPA_CIPHER_WEP40:
22004 - psecuritypriv->wpa2_pairwise_cipher = _WEP40_;
22005 - break;
22006 - case WPA_CIPHER_TKIP:
22007 - psecuritypriv->wpa2_pairwise_cipher = _TKIP_;
22008 - break;
22009 - case WPA_CIPHER_CCMP:
22010 - psecuritypriv->wpa2_pairwise_cipher = _AES_;
22011 - break;
22012 - case WPA_CIPHER_WEP104:
22013 - psecuritypriv->wpa2_pairwise_cipher = _WEP104_;
22014 - break;
22015 - }
22016 -#endif
22017 + DBG_871X("r871x_set_stakey_hdl(): sta has been free\n");
22018 + return H2C_REJECTED;
22019 }
22020
22021 }
22022
22023 - //wpa
22024 - ie_len = 0;
22025 - group_cipher = 0; pairwise_cipher = 0;
22026 - psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
22027 - psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
22028 - for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
22029 + //below for sta mode
22030 +
22031 + if(pparm->algorithm == _NO_PRIVACY_) // clear cam entry
22032 {
22033 - p = rtw_get_ie(p, _SSN_IE_1_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
22034 - if ((p) && (_rtw_memcmp(p+2, OUI1, 4)))
22035 - {
22036 - if(rtw_parse_wpa_ie(p, ie_len+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
22037 - {
22038 - psecuritypriv->dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
22039 -
22040 - psecuritypriv->dot8021xalg = 1;//psk, todo:802.1x
22041 + clear_cam_entry(padapter, pparm->id);
22042 + return H2C_SUCCESS;
22043 + }
22044 +
22045 + ctrl = BIT(15) | ((pparm->algorithm) << 2);
22046 +
22047 +#ifdef CONFIG_TDLS
22048 + if(ptdlsinfo->clear_cam!=0){
22049 + clear_cam_entry(padapter, ptdlsinfo->clear_cam);
22050 + ptdlsinfo->clear_cam=0;
22051
22052 - psecuritypriv->wpa_psk |= BIT(0);
22053 + return H2C_SUCCESS;
22054 + }
22055
22056 - psecuritypriv->wpa_group_cipher = group_cipher;
22057 - psecuritypriv->wpa_pairwise_cipher = pairwise_cipher;
22058 + psta = rtw_get_stainfo(pstapriv, pparm->addr);//Get TDLS Peer STA
22059 + if( psta->tdls_sta_state&TDLS_LINKED_STATE ){
22060 + write_cam(padapter, psta->mac_id, ctrl, pparm->addr, pparm->key);
22061 + }
22062 + else
22063 +#endif //CONFIG_TDLS
22064 + write_cam(padapter, cam_id, ctrl, pparm->addr, pparm->key);
22065
22066 -#if 0
22067 - switch(group_cipher)
22068 - {
22069 - case WPA_CIPHER_NONE:
22070 - psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
22071 - break;
22072 - case WPA_CIPHER_WEP40:
22073 - psecuritypriv->wpa_group_cipher = _WEP40_;
22074 - break;
22075 - case WPA_CIPHER_TKIP:
22076 - psecuritypriv->wpa_group_cipher = _TKIP_;
22077 - break;
22078 - case WPA_CIPHER_CCMP:
22079 - psecuritypriv->wpa_group_cipher = _AES_;
22080 - break;
22081 - case WPA_CIPHER_WEP104:
22082 - psecuritypriv->wpa_group_cipher = _WEP104_;
22083 - break;
22084 - }
22085 + pmlmeinfo->enc_algo = pparm->algorithm;
22086 +
22087 + return H2C_SUCCESS;
22088 +}
22089
22090 - switch(pairwise_cipher)
22091 - {
22092 - case WPA_CIPHER_NONE:
22093 - psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
22094 - break;
22095 - case WPA_CIPHER_WEP40:
22096 - psecuritypriv->wpa_pairwise_cipher = _WEP40_;
22097 - break;
22098 - case WPA_CIPHER_TKIP:
22099 - psecuritypriv->wpa_pairwise_cipher = _TKIP_;
22100 - break;
22101 - case WPA_CIPHER_CCMP:
22102 - psecuritypriv->wpa_pairwise_cipher = _AES_;
22103 - break;
22104 - case WPA_CIPHER_WEP104:
22105 - psecuritypriv->wpa_pairwise_cipher = _WEP104_;
22106 - break;
22107 - }
22108 -#endif
22109 - }
22110 +u8 add_ba_hdl(_adapter *padapter, unsigned char *pbuf)
22111 +{
22112 + struct addBaReq_parm *pparm = (struct addBaReq_parm *)pbuf;
22113 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
22114 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22115
22116 - break;
22117 -
22118 - }
22119 -
22120 - if ((p == NULL) || (ie_len == 0))
22121 - {
22122 - break;
22123 - }
22124 + struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, pparm->addr);
22125 +
22126 + if(!psta)
22127 + return H2C_SUCCESS;
22128
22129 +
22130 + if (((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) && (pmlmeinfo->HT_enable)) ||
22131 + ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
22132 + {
22133 + //pmlmeinfo->ADDBA_retry_count = 0;
22134 + //pmlmeinfo->candidate_tid_bitmap |= (0x1 << pparm->tid);
22135 + //psta->htpriv.candidate_tid_bitmap |= BIT(pparm->tid);
22136 + issue_action_BA(padapter, pparm->addr, RTW_WLAN_ACTION_ADDBA_REQ, (u16)pparm->tid);
22137 + //_set_timer(&pmlmeext->ADDBA_timer, ADDBA_TO);
22138 + _set_timer(&psta->addba_retry_timer, ADDBA_TO);
22139 + }
22140 +#ifdef CONFIG_TDLS
22141 + else if((psta->tdls_sta_state & TDLS_LINKED_STATE)&&
22142 + (psta->htpriv.ht_option==_TRUE) &&
22143 + (psta->htpriv.ampdu_enable==_TRUE) )
22144 + {
22145 + issue_action_BA(padapter, pparm->addr, RTW_WLAN_ACTION_ADDBA_REQ, (u16)pparm->tid);
22146 + //_set_timer(&pmlmeext->ADDBA_timer, ADDBA_TO);
22147 + _set_timer(&psta->addba_retry_timer, ADDBA_TO);
22148 + }
22149 +#endif //CONFIG
22150 + else
22151 + {
22152 + psta->htpriv.candidate_tid_bitmap &= ~BIT(pparm->tid);
22153 }
22154
22155 -#endif //SUPPORT_64_STA
22156 + return H2C_SUCCESS;
22157 +}
22158
22159 - //wmm
22160 - ie_len = 0;
22161 - pmlmepriv->qospriv.qos_option = 0;
22162 - if(pregistrypriv->wmm_enable)
22163 +u8 set_tx_beacon_cmd(_adapter* padapter)
22164 +{
22165 + struct cmd_obj *ph2c;
22166 + struct Tx_Beacon_param *ptxBeacon_parm;
22167 + struct cmd_priv *pcmdpriv = &(padapter->cmdpriv);
22168 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
22169 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22170 + u8 res = _SUCCESS;
22171 + int len_diff = 0;
22172 +
22173 +_func_enter_;
22174 +
22175 + if ((ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj))) == NULL)
22176 {
22177 - for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
22178 - {
22179 - p = rtw_get_ie(p, _VENDOR_SPECIFIC_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
22180 - if((p) && _rtw_memcmp(p+2, WMM_PARA_IE, 6))
22181 - {
22182 - pmlmepriv->qospriv.qos_option = 1;
22183 -
22184 - *(p+8) |= BIT(7);//QoS Info, support U-APSD
22185 -
22186 - break;
22187 - }
22188 -
22189 - if ((p == NULL) || (ie_len == 0))
22190 - {
22191 - break;
22192 - }
22193 - }
22194 + res= _FAIL;
22195 + goto exit;
22196 }
22197 -
22198 - //parsing HT_CAP_IE
22199 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_CAPABILITY_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
22200 - if(p && ie_len>0)
22201 +
22202 + if ((ptxBeacon_parm = (struct Tx_Beacon_param *)rtw_zmalloc(sizeof(struct Tx_Beacon_param))) == NULL)
22203 {
22204 - u8 rf_type;
22205 -
22206 - struct rtw_ieee80211_ht_cap *pht_cap = (struct rtw_ieee80211_ht_cap *)(p+2);
22207 + rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
22208 + res= _FAIL;
22209 + goto exit;
22210 + }
22211
22212 - pHT_caps_ie=p;
22213 -
22214 + _rtw_memcpy(&(ptxBeacon_parm->network), &(pmlmeinfo->network), sizeof(WLAN_BSSID_EX));
22215 +
22216 + len_diff = update_hidden_ssid(
22217 + ptxBeacon_parm->network.IEs+_BEACON_IE_OFFSET_
22218 + , ptxBeacon_parm->network.IELength-_BEACON_IE_OFFSET_
22219 + , pmlmeinfo->hidden_ssid_mode
22220 + );
22221 + ptxBeacon_parm->network.IELength += len_diff;
22222
22223 - ht_cap = _TRUE;
22224 - network_type |= WIRELESS_11_24N;
22225 + init_h2fwcmd_w_parm_no_rsp(ph2c, ptxBeacon_parm, GEN_CMD_CODE(_TX_Beacon));
22226 +
22227 + res = rtw_enqueue_cmd(pcmdpriv, ph2c);
22228
22229
22230 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
22231 +exit:
22232 +
22233 +_func_exit_;
22234
22235 - if((psecuritypriv->wpa_pairwise_cipher & WPA_CIPHER_CCMP) ||
22236 - (psecuritypriv->wpa2_pairwise_cipher & WPA_CIPHER_CCMP))
22237 - {
22238 - pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&(0x07<<2));
22239 - }
22240 - else
22241 - {
22242 - pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&0x00);
22243 - }
22244 -
22245 + return res;
22246 +}
22247
22248 - if(rf_type == RF_1T1R)
22249 - {
22250 - pht_cap->supp_mcs_set[0] = 0xff;
22251 - pht_cap->supp_mcs_set[1] = 0x0;
22252 - }
22253
22254 - _rtw_memcpy(&pmlmepriv->htpriv.ht_cap, p+2, ie_len);
22255 +u8 mlme_evt_hdl(_adapter *padapter, unsigned char *pbuf)
22256 +{
22257 + u8 evt_code, evt_seq;
22258 + u16 evt_sz;
22259 + uint *peventbuf;
22260 + void (*event_callback)(_adapter *dev, u8 *pbuf);
22261 + struct evt_priv *pevt_priv = &(padapter->evtpriv);
22262 +
22263 + peventbuf = (uint*)pbuf;
22264 + evt_sz = (u16)(*peventbuf&0xffff);
22265 + evt_seq = (u8)((*peventbuf>>24)&0x7f);
22266 + evt_code = (u8)((*peventbuf>>16)&0xff);
22267 +
22268
22269 + #ifdef CHECK_EVENT_SEQ
22270 + // checking event sequence...
22271 + if (evt_seq != (ATOMIC_READ(&pevt_priv->event_seq) & 0x7f) )
22272 + {
22273 + 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)));
22274 +
22275 + pevt_priv->event_seq = (evt_seq+1)&0x7f;
22276 +
22277 + goto _abort_event_;
22278 }
22279 + #endif
22280
22281 - //parsing HT_INFO_IE
22282 - p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_ADD_INFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
22283 - if(p && ie_len>0)
22284 + // checking if event code is valid
22285 + if (evt_code >= MAX_C2HEVT)
22286 {
22287 - pHT_info_ie=p;
22288 + RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\nEvent Code(%d) mismatch!\n", evt_code));
22289 + goto _abort_event_;
22290 }
22291
22292 - switch(network_type)
22293 + // checking if event size match the event parm size
22294 + if ((wlanevents[evt_code].parmsize != 0) &&
22295 + (wlanevents[evt_code].parmsize != evt_sz))
22296 {
22297 - case WIRELESS_11B:
22298 - pbss_network->NetworkTypeInUse = Ndis802_11DS;
22299 - break;
22300 - case WIRELESS_11G:
22301 - case WIRELESS_11BG:
22302 - case WIRELESS_11G_24N:
22303 - case WIRELESS_11BG_24N:
22304 - pbss_network->NetworkTypeInUse = Ndis802_11OFDM24;
22305 - break;
22306 - case WIRELESS_11A:
22307 - pbss_network->NetworkTypeInUse = Ndis802_11OFDM5;
22308 - break;
22309 - default :
22310 - pbss_network->NetworkTypeInUse = Ndis802_11OFDM24;
22311 - break;
22312 +
22313 + RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\nEvent(%d) Parm Size mismatch (%d vs %d)!\n",
22314 + evt_code, wlanevents[evt_code].parmsize, evt_sz));
22315 + goto _abort_event_;
22316 +
22317 }
22318 -
22319 - pmlmepriv->cur_network.network_type = network_type;
22320 -
22321
22322 - pmlmepriv->htpriv.ht_option = _FALSE;
22323 -#ifdef CONFIG_80211N_HT
22324 - if( (psecuritypriv->wpa2_pairwise_cipher&WPA_CIPHER_TKIP) ||
22325 - (psecuritypriv->wpa_pairwise_cipher&WPA_CIPHER_TKIP))
22326 - {
22327 - //todo:
22328 - //ht_cap = _FALSE;
22329 - }
22330 -
22331 - //ht_cap
22332 - if(pregistrypriv->ht_enable && ht_cap==_TRUE)
22333 - {
22334 - pmlmepriv->htpriv.ht_option = _TRUE;
22335 - pmlmepriv->qospriv.qos_option = 1;
22336 + ATOMIC_INC(&pevt_priv->event_seq);
22337
22338 - if(pregistrypriv->ampdu_enable==1)
22339 - {
22340 - pmlmepriv->htpriv.ampdu_enable = _TRUE;
22341 - }
22342 + peventbuf += 2;
22343 +
22344 + if(peventbuf)
22345 + {
22346 + event_callback = wlanevents[evt_code].event_callback;
22347 + event_callback(padapter, (u8*)peventbuf);
22348
22349 - HT_caps_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)pHT_caps_ie);
22350 -
22351 - HT_info_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)pHT_info_ie);
22352 + pevt_priv->evt_done_cnt++;
22353 }
22354 -#endif
22355
22356
22357 - pbss_network->Length = get_WLAN_BSSID_EX_sz((WLAN_BSSID_EX *)pbss_network);
22358 -
22359 - //issue beacon to start bss network
22360 - start_bss_network(padapter, (u8*)pbss_network);
22361 -
22362 +_abort_event_:
22363
22364 - //alloc sta_info for ap itself
22365 - psta = rtw_get_stainfo(&padapter->stapriv, pbss_network->MacAddress);
22366 - if(!psta)
22367 - {
22368 - psta = rtw_alloc_stainfo(&padapter->stapriv, pbss_network->MacAddress);
22369 - if (psta == NULL)
22370 - {
22371 - return _FAIL;
22372 - }
22373 - }
22374 -
22375 - rtw_indicate_connect( padapter);
22376
22377 - pmlmepriv->cur_network.join_res = _TRUE;//for check if already set beacon
22378 + return H2C_SUCCESS;
22379
22380 - //update bc/mc sta_info
22381 - //update_bmc_sta(padapter);
22382 -
22383 - return ret;
22384 -
22385 }
22386
22387 -#ifdef CONFIG_NATIVEAP_MLME
22388 -
22389 -static void update_bcn_fixed_ie(_adapter *padapter)
22390 +u8 h2c_msg_hdl(_adapter *padapter, unsigned char *pbuf)
22391 {
22392 - DBG_871X("%s\n", __FUNCTION__);
22393 + if(!pbuf)
22394 + return H2C_PARAMETERS_ERROR;
22395
22396 + return H2C_SUCCESS;
22397 }
22398
22399 -static void update_bcn_erpinfo_ie(_adapter *padapter)
22400 +u8 tx_beacon_hdl(_adapter *padapter, unsigned char *pbuf)
22401 {
22402 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
22403 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
22404 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22405 + if(send_beacon(padapter)==_FAIL)
22406 + {
22407 + DBG_871X("issue_beacon, fail!\n");
22408 + return H2C_PARAMETERS_ERROR;
22409 + }
22410 +#ifdef CONFIG_AP_MODE
22411 + else //tx bc/mc frames after update TIM
22412 + {
22413 + _irqL irqL;
22414 + struct sta_info *psta_bmc;
22415 + _list *xmitframe_plist, *xmitframe_phead;
22416 + struct xmit_frame *pxmitframe=NULL;
22417 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
22418 + struct sta_priv *pstapriv = &padapter->stapriv;
22419 +
22420 + //for BC/MC Frames
22421 + psta_bmc = rtw_get_bcmc_stainfo(padapter);
22422 + if(!psta_bmc)
22423 + return H2C_SUCCESS;
22424 +
22425 + if((pstapriv->tim_bitmap&BIT(0)) && (psta_bmc->sleepq_len>0))
22426 + {
22427 +#ifndef CONFIG_PCI_HCI
22428 + rtw_msleep_os(10);// 10ms, ATIM(HIQ) Windows
22429 +#endif
22430 + //_enter_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
22431 + _enter_critical_bh(&pxmitpriv->lock, &irqL);
22432
22433 - DBG_871X("%s\n", __FUNCTION__);
22434 + xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
22435 + xmitframe_plist = get_next(xmitframe_phead);
22436
22437 - if(!pmlmeinfo->ERP_enable)
22438 - return;
22439 -
22440 + while ((rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) == _FALSE)
22441 + {
22442 + pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);
22443
22444 -}
22445 + xmitframe_plist = get_next(xmitframe_plist);
22446
22447 -static void update_bcn_htcap_ie(_adapter *padapter)
22448 -{
22449 - DBG_871X("%s\n", __FUNCTION__);
22450 + rtw_list_delete(&pxmitframe->list);
22451
22452 -}
22453 + psta_bmc->sleepq_len--;
22454 + if(psta_bmc->sleepq_len>0)
22455 + pxmitframe->attrib.mdata = 1;
22456 + else
22457 + pxmitframe->attrib.mdata = 0;
22458
22459 -static void update_bcn_htinfo_ie(_adapter *padapter)
22460 -{
22461 - DBG_871X("%s\n", __FUNCTION__);
22462 + pxmitframe->attrib.triggered=1;
22463
22464 -}
22465 + pxmitframe->attrib.qsel = 0x11;//HIQ
22466
22467 -static void update_bcn_rsn_ie(_adapter *padapter)
22468 -{
22469 - DBG_871X("%s\n", __FUNCTION__);
22470 +#if 0
22471 + _exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
22472 + if(rtw_hal_xmit(padapter, pxmitframe) == _TRUE)
22473 + {
22474 + rtw_os_xmit_complete(padapter, pxmitframe);
22475 + }
22476 + _enter_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
22477
22478 -}
22479 +#endif
22480 + rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
22481
22482 -static void update_bcn_wpa_ie(_adapter *padapter)
22483 -{
22484 - DBG_871X("%s\n", __FUNCTION__);
22485 + //pstapriv->tim_bitmap &= ~BIT(0);
22486 +
22487 + }
22488 +
22489 + //_exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
22490 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
22491
22492 -}
22493 + }
22494
22495 -static void update_bcn_wmm_ie(_adapter *padapter)
22496 -{
22497 - DBG_871X("%s\n", __FUNCTION__);
22498 + }
22499 +#endif
22500 +
22501 + return H2C_SUCCESS;
22502
22503 }
22504
22505 -static void update_bcn_wps_ie(_adapter *padapter)
22506 +void change_band_update_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork)
22507 {
22508 - int match;
22509 - u8 *pwps_ie=NULL, *pwps_ie_src, *premainder_ie, *pbackup_remainder_ie=NULL;
22510 - uint wps_ielen=0, wps_offset, remainder_ielen;
22511 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
22512 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
22513 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22514 - WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network);
22515 - unsigned char *ie = pnetwork->IEs;
22516 - u32 ielen = pnetwork->IELength;
22517 + u8 network_type,rate_len, total_rate_len,remainder_rate_len;
22518 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
22519 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22520 + u8 erpinfo=0x4;
22521
22522 + //DBG_871X("%s\n", __FUNCTION__);
22523
22524 - DBG_871X("%s\n", __FUNCTION__);
22525 + if(pmlmeext->cur_channel >= 36)
22526 + {
22527 + network_type = WIRELESS_11A;
22528 + total_rate_len = IEEE80211_NUM_OFDM_RATESLEN;
22529 + DBG_871X("%s(): change to 5G Band\n",__FUNCTION__);
22530 + rtw_remove_bcn_ie(padapter, pnetwork, _ERPINFO_IE_);
22531 + }
22532 + else
22533 + {
22534 + network_type = WIRELESS_11BG;
22535 + total_rate_len = IEEE80211_CCK_RATE_LEN+IEEE80211_NUM_OFDM_RATESLEN;
22536 + DBG_871X("%s(): change to 2.4G Band\n",__FUNCTION__);
22537 + rtw_add_bcn_ie(padapter, pnetwork, _ERPINFO_IE_, &erpinfo, 1);
22538 + }
22539
22540 - pwps_ie = rtw_get_wps_ie(ie+_FIXED_IE_LENGTH_, ielen-_FIXED_IE_LENGTH_, NULL, &wps_ielen);
22541 -
22542 - if(pwps_ie==NULL || wps_ielen==0)
22543 - return;
22544 + rtw_set_supported_rate(pnetwork->SupportedRates, network_type);
22545 +
22546 + UpdateBrateTbl(padapter, pnetwork->SupportedRates);
22547 + rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, pnetwork->SupportedRates);
22548 +
22549 + if(total_rate_len > 8)
22550 + {
22551 + rate_len = 8;
22552 + remainder_rate_len = total_rate_len - 8;
22553 + }
22554 + else
22555 + {
22556 + rate_len = total_rate_len;
22557 + remainder_rate_len = 0;
22558 + }
22559 +
22560 + rtw_add_bcn_ie(padapter, pnetwork, _SUPPORTEDRATES_IE_, pnetwork->SupportedRates, rate_len);
22561
22562 - wps_offset = (uint)(pwps_ie-ie);
22563 + if(remainder_rate_len)
22564 + {
22565 + rtw_add_bcn_ie(padapter, pnetwork, _EXT_SUPPORTEDRATES_IE_, (pnetwork->SupportedRates+8), remainder_rate_len);
22566 + }
22567 + else
22568 + {
22569 + rtw_remove_bcn_ie(padapter, pnetwork, _EXT_SUPPORTEDRATES_IE_);
22570 + }
22571 +}
22572
22573 - premainder_ie = pwps_ie + wps_ielen;
22574
22575 - remainder_ielen = ielen - wps_offset - wps_ielen;
22576 +#ifdef CONFIG_DUALMAC_CONCURRENT
22577 +void dc_SelectChannel(_adapter *padapter, unsigned char channel)
22578 +{
22579 + PADAPTER ptarget_adapter;
22580
22581 - if(remainder_ielen>0)
22582 + if( (padapter->pbuddy_adapter != NULL) &&
22583 + (padapter->DualMacConcurrent == _TRUE) &&
22584 + (padapter->adapter_type == SECONDARY_ADAPTER))
22585 + {
22586 + // only mac0 could control BB&RF
22587 + ptarget_adapter = padapter->pbuddy_adapter;
22588 + }
22589 + else
22590 {
22591 - pbackup_remainder_ie = rtw_malloc(remainder_ielen);
22592 - if(pbackup_remainder_ie)
22593 - _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
22594 + ptarget_adapter = padapter;
22595 }
22596
22597 -
22598 - pwps_ie_src = pmlmepriv->wps_beacon_ie;
22599 - if(pwps_ie_src == NULL)
22600 - return;
22601 + _enter_critical_mutex(&(adapter_to_dvobj(ptarget_adapter)->setch_mutex), NULL);
22602
22603 + rtw_hal_set_chan(ptarget_adapter, channel);
22604
22605 - wps_ielen = (uint)pwps_ie_src[1];//to get ie data len
22606 - if((wps_offset+wps_ielen+2+remainder_ielen)<=MAX_IE_SZ)
22607 - {
22608 - _rtw_memcpy(pwps_ie, pwps_ie_src, wps_ielen+2);
22609 - pwps_ie += (wps_ielen+2);
22610 + _exit_critical_mutex(&(adapter_to_dvobj(ptarget_adapter)->setch_mutex), NULL);
22611 +}
22612
22613 - if(pbackup_remainder_ie)
22614 - _rtw_memcpy(pwps_ie, pbackup_remainder_ie, remainder_ielen);
22615 +void dc_SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_offset)
22616 +{
22617 + PADAPTER ptarget_adapter;
22618
22619 - //update IELength
22620 - pnetwork->IELength = wps_offset + (wps_ielen+2) + remainder_ielen;
22621 + if( (padapter->pbuddy_adapter != NULL) &&
22622 + (padapter->DualMacConcurrent == _TRUE) &&
22623 + (padapter->adapter_type == SECONDARY_ADAPTER))
22624 + {
22625 + // only mac0 could control BB&RF
22626 + ptarget_adapter = padapter->pbuddy_adapter;
22627 + }
22628 + else
22629 + {
22630 + ptarget_adapter = padapter;
22631 }
22632
22633 - if(pbackup_remainder_ie)
22634 - rtw_mfree(pbackup_remainder_ie, remainder_ielen);
22635 -
22636 -}
22637 + _enter_critical_mutex(&(adapter_to_dvobj(ptarget_adapter)->setbw_mutex), NULL);
22638
22639 -static void update_bcn_p2p_ie(_adapter *padapter)
22640 -{
22641 + rtw_hal_set_bwmode(ptarget_adapter, (HT_CHANNEL_WIDTH)bwmode, channel_offset);
22642
22643 + _exit_critical_mutex(&(adapter_to_dvobj(ptarget_adapter)->setbw_mutex), NULL);
22644 }
22645
22646 -static void update_bcn_vendor_spec_ie(_adapter *padapter, u8*oui)
22647 +void dc_set_channel_bwmode_disconnect(_adapter *padapter)
22648 {
22649 - DBG_871X("%s\n", __FUNCTION__);
22650 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
22651 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
22652 + struct mlme_priv *pbuddy_mlmepriv = NULL;
22653
22654 - if(_rtw_memcmp(WPA_OUI, oui, 4))
22655 - {
22656 - update_bcn_wpa_ie(padapter);
22657 - }
22658 - else if(_rtw_memcmp(WMM_OUI, oui, 4))
22659 + if(pbuddy_adapter != NULL &&
22660 + padapter->DualMacConcurrent == _TRUE)
22661 {
22662 - update_bcn_wmm_ie(padapter);
22663 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
22664 + if((check_fwstate(pbuddy_mlmepriv, _FW_LINKED)) != _TRUE)
22665 + {
22666 + //switch to the 20M Hz mode after disconnect
22667 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
22668 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
22669 +
22670 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
22671 + }
22672 }
22673 - else if(_rtw_memcmp(WPS_OUI, oui, 4))
22674 + else
22675 {
22676 - update_bcn_wps_ie(padapter);
22677 + //switch to the 20M Hz mode after disconnect
22678 + pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
22679 + pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
22680 +
22681 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
22682 }
22683 - else if(_rtw_memcmp(P2P_OUI, oui, 4))
22684 +}
22685 +
22686 +u8 dc_handle_join_request(_adapter *padapter)
22687 +{
22688 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
22689 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22690 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
22691 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
22692 + struct mlme_ext_priv *pbuddy_mlmeext = NULL;
22693 + struct mlme_priv *pbuddy_mlmepriv = NULL;
22694 + u8 ret = _SUCCESS;
22695 +
22696 + if(pbuddy_adapter != NULL &&
22697 + padapter->DualMacConcurrent == _TRUE)
22698 {
22699 - update_bcn_p2p_ie(padapter);
22700 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
22701 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
22702 +
22703 + if(pmlmeext->cur_channel != pbuddy_mlmeext->cur_channel ||
22704 + pmlmeext->cur_bwmode != pbuddy_mlmeext->cur_bwmode ||
22705 + pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset)
22706 + {
22707 + if((check_fwstate(pbuddy_mlmepriv, WIFI_AP_STATE)) == _TRUE)
22708 + {
22709 + //issue deauth to all stas if if2 is at ap mode
22710 + rtw_sta_flush(pbuddy_adapter);
22711 +
22712 + //rtw_hal_set_hwreg(padapter, HW_VAR_CHECK_TXBUF, 0);
22713 + rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_CHECK_TXBUF, 0);
22714 + }
22715 + else if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED) == _TRUE)
22716 + {
22717 + if(pmlmeext->cur_channel == pbuddy_mlmeext->cur_channel)
22718 + {
22719 + // HT_CHANNEL_WIDTH_40 or HT_CHANNEL_WIDTH_20 but channel offset is different
22720 + if((pmlmeext->cur_bwmode == pbuddy_mlmeext->cur_bwmode) &&
22721 + (pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset) )
22722 + {
22723 + report_join_res(padapter, -4);
22724 + ret = _FAIL;
22725 + }
22726 + }
22727 + else
22728 + {
22729 + report_join_res(padapter, -4);
22730 + ret = _FAIL;
22731 + }
22732 + }
22733 + }
22734 + else if (is_client_associated_to_ap(pbuddy_adapter) == _TRUE)
22735 + {
22736 + issue_nulldata(pbuddy_adapter, NULL, 1, 0, 0);
22737 + }
22738 }
22739 - else
22740 - {
22741 - DBG_871X("unknown OUI type!\n");
22742 - }
22743 -
22744 -
22745 +
22746 + return ret;
22747 }
22748
22749 -void update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx)
22750 +void dc_handle_join_done(_adapter *padapter, u8 join_res)
22751 {
22752 - _irqL irqL;
22753 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
22754 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
22755 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
22756 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
22757 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
22758 + struct mlme_priv *pbuddy_mlmepriv = NULL;
22759 + struct mlme_ext_priv *pbuddy_mlmeext = NULL;
22760 + struct mlme_ext_info *pbuddy_mlmeinfo = NULL;
22761 + WLAN_BSSID_EX *pbuddy_network_mlmeext = NULL;
22762 + u8 change_band = _FALSE;
22763 +
22764 +
22765 + if(pbuddy_adapter != NULL &&
22766 + padapter->DualMacConcurrent == _TRUE)
22767 + {
22768 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
22769 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
22770 + pbuddy_mlmeinfo = &(pbuddy_mlmeext->mlmext_info);
22771 + pbuddy_network_mlmeext = &(pbuddy_mlmeinfo->network);
22772
22773 - //DBG_871X("%s\n", __FUNCTION__);
22774 + if(((pbuddy_mlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
22775 + check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
22776 + {
22777 + //restart and update beacon
22778 + DBG_871X("after join, current adapter, CH=%d, BW=%d, offset=%d\n", pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
22779
22780 - if(_FALSE == pmlmeext->bstart_bss)
22781 - return;
22782 + if(join_res >= 0)
22783 + {
22784 + u8 *p;
22785 + int ie_len;
22786 + struct HT_info_element *pht_info=NULL;
22787
22788 - _enter_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
22789 + if((pbuddy_mlmeext->cur_channel <= 14 && pmlmeext->cur_channel >= 36) ||
22790 + (pbuddy_mlmeext->cur_channel >= 36 && pmlmeext->cur_channel <= 14))
22791 + {
22792 + change_band = _TRUE;
22793 + }
22794
22795 - switch(ie_id)
22796 - {
22797 - case 0xFF:
22798 + //sync channel/bwmode/ch_offset with another adapter
22799 + pbuddy_mlmeext->cur_channel = pmlmeext->cur_channel;
22800 +
22801 + if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
22802 + {
22803 + 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)));
22804 + if( p && ie_len)
22805 + {
22806 + pht_info = (struct HT_info_element *)(p+2);
22807 + pht_info->infos[0] &= ~(BIT(0)|BIT(1)); //no secondary channel is present
22808 + }
22809 +
22810 + if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
22811 + {
22812 + pbuddy_mlmeext->cur_ch_offset = pmlmeext->cur_ch_offset;
22813
22814 - update_bcn_fixed_ie(padapter);//8: TimeStamp, 2: Beacon Interval 2:Capability
22815 -
22816 - break;
22817 -
22818 - case _TIM_IE_:
22819 -
22820 - update_BCNTIM(padapter);
22821 -
22822 - break;
22823 + //to update cur_ch_offset value in beacon
22824 + if( pht_info )
22825 + {
22826 + switch(pmlmeext->cur_ch_offset)
22827 + {
22828 + case HAL_PRIME_CHNL_OFFSET_LOWER:
22829 + pht_info->infos[0] |= 0x1;
22830 + break;
22831 + case HAL_PRIME_CHNL_OFFSET_UPPER:
22832 + pht_info->infos[0] |= 0x3;
22833 + break;
22834 + case HAL_PRIME_CHNL_OFFSET_DONT_CARE:
22835 + default:
22836 + break;
22837 + }
22838 + }
22839 + }
22840 + else if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20)
22841 + {
22842 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
22843 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
22844
22845 - case _ERPINFO_IE_:
22846 + if(pmlmeext->cur_channel>0 && pmlmeext->cur_channel<5)
22847 + {
22848 + if(pht_info)
22849 + pht_info->infos[0] |= 0x1;
22850
22851 - update_bcn_erpinfo_ie(padapter);
22852 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
22853 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
22854 + }
22855
22856 - break;
22857 + if(pmlmeext->cur_channel>7 && pmlmeext->cur_channel<(14+1))
22858 + {
22859 + if(pht_info)
22860 + pht_info->infos[0] |= 0x3;
22861
22862 - case _HT_CAPABILITY_IE_:
22863 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
22864 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
22865 + }
22866
22867 - update_bcn_htcap_ie(padapter);
22868 -
22869 - break;
22870 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
22871 + }
22872 + }
22873
22874 - case _RSN_IE_2_:
22875 + // to update channel value in beacon
22876 + pbuddy_network_mlmeext->Configuration.DSConfig = pmlmeext->cur_channel;
22877 + 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)));
22878 + if(p && ie_len>0)
22879 + *(p + 2) = pmlmeext->cur_channel;
22880
22881 - update_bcn_rsn_ie(padapter);
22882 + 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)));
22883 + if( p && ie_len)
22884 + {
22885 + pht_info = (struct HT_info_element *)(p+2);
22886 + pht_info->primary_channel = pmlmeext->cur_channel;
22887 + }
22888
22889 - break;
22890 -
22891 - case _HT_ADD_INFO_IE_:
22892 + // update mlmepriv's cur_network
22893 + _rtw_memcpy(&pbuddy_mlmepriv->cur_network.network, pbuddy_network_mlmeext, pbuddy_network_mlmeext->Length);
22894 + }
22895 + else
22896 + {
22897 + // switch back to original channel/bwmode/ch_offset;
22898 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
22899 + }
22900
22901 - update_bcn_htinfo_ie(padapter);
22902 -
22903 - break;
22904 -
22905 - case _VENDOR_SPECIFIC_IE_:
22906 + 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);
22907
22908 - update_bcn_vendor_spec_ie(padapter, oui);
22909 -
22910 - break;
22911 -
22912 - default:
22913 - break;
22914 - }
22915 + if(change_band == _TRUE)
22916 + change_band_update_ie(pbuddy_adapter, pbuddy_network_mlmeext);
22917
22918 - pmlmepriv->update_bcn = _TRUE;
22919 -
22920 - _exit_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
22921 + DBG_871X("update pbuddy_adapter's beacon\n");
22922
22923 -#ifdef CONFIG_USB_HCI
22924 - if(tx)
22925 - {
22926 - //send_beacon(padapter);//send_beacon must execute on TSR level
22927 - set_tx_beacon_cmd(padapter);
22928 - }
22929 -#else
22930 - {
22931 - //PCI will issue beacon when BCN interrupt occurs.
22932 + update_beacon(pbuddy_adapter, 0, NULL, _TRUE);
22933 + }
22934 + else if (is_client_associated_to_ap(pbuddy_adapter) == _TRUE)
22935 + {
22936 + if((pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
22937 + (pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20))
22938 + {
22939 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
22940 + }
22941 +
22942 + issue_nulldata(pbuddy_adapter, NULL, 0, 0, 0);
22943 + }
22944 }
22945 -#endif
22946 -
22947 }
22948
22949 -#ifdef CONFIG_80211N_HT
22950 -
22951 -/*
22952 -op_mode
22953 -Set to 0 (HT pure) under the followign conditions
22954 - - all STAs in the BSS are 20/40 MHz HT in 20/40 MHz BSS or
22955 - - all STAs in the BSS are 20 MHz HT in 20 MHz BSS
22956 -Set to 1 (HT non-member protection) if there may be non-HT STAs
22957 - in both the primary and the secondary channel
22958 -Set to 2 if only HT STAs are associated in BSS,
22959 - however and at least one 20 MHz HT STA is associated
22960 -Set to 3 (HT mixed mode) when one or more non-HT STAs are associated
22961 - (currently non-GF HT station is considered as non-HT STA also)
22962 -*/
22963 -static int rtw_ht_operation_update(_adapter *padapter)
22964 +sint dc_check_fwstate(_adapter *padapter, sint fw_state)
22965 {
22966 - u16 cur_op_mode, new_op_mode;
22967 - int op_mode_changes = 0;
22968 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
22969 - struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
22970 -
22971 - if(pmlmepriv->htpriv.ht_option == _TRUE)
22972 - return 0;
22973 -
22974 - //if (!iface->conf->ieee80211n || iface->conf->ht_op_mode_fixed)
22975 - // return 0;
22976 -
22977 - DBG_871X("%s current operation mode=0x%X\n",
22978 - __FUNCTION__, pmlmepriv->ht_op_mode);
22979 -
22980 - if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT)
22981 - && pmlmepriv->num_sta_ht_no_gf) {
22982 - pmlmepriv->ht_op_mode |=
22983 - HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
22984 - op_mode_changes++;
22985 - } else if ((pmlmepriv->ht_op_mode &
22986 - HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT) &&
22987 - pmlmepriv->num_sta_ht_no_gf == 0) {
22988 - pmlmepriv->ht_op_mode &=
22989 - ~HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
22990 - op_mode_changes++;
22991 - }
22992 -
22993 - if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
22994 - (pmlmepriv->num_sta_no_ht || pmlmepriv->olbc_ht)) {
22995 - pmlmepriv->ht_op_mode |= HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
22996 - op_mode_changes++;
22997 - } else if ((pmlmepriv->ht_op_mode &
22998 - HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
22999 - (pmlmepriv->num_sta_no_ht == 0 && !pmlmepriv->olbc_ht)) {
23000 - pmlmepriv->ht_op_mode &=
23001 - ~HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
23002 - op_mode_changes++;
23003 - }
23004 -
23005 - /* Note: currently we switch to the MIXED op mode if HT non-greenfield
23006 - * station is associated. Probably it's a theoretical case, since
23007 - * it looks like all known HT STAs support greenfield.
23008 - */
23009 - new_op_mode = 0;
23010 - if (pmlmepriv->num_sta_no_ht ||
23011 - (pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT))
23012 - new_op_mode = OP_MODE_MIXED;
23013 - else if ((phtpriv_ap->ht_cap.cap_info & IEEE80211_HT_CAP_SUP_WIDTH)
23014 - && pmlmepriv->num_sta_ht_20mhz)
23015 - new_op_mode = OP_MODE_20MHZ_HT_STA_ASSOCED;
23016 - else if (pmlmepriv->olbc_ht)
23017 - new_op_mode = OP_MODE_MAY_BE_LEGACY_STAS;
23018 - else
23019 - new_op_mode = OP_MODE_PURE;
23020 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
23021 + struct mlme_priv *pbuddy_mlmepriv = NULL;
23022
23023 - cur_op_mode = pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_OP_MODE_MASK;
23024 - if (cur_op_mode != new_op_mode) {
23025 - pmlmepriv->ht_op_mode &= ~HT_INFO_OPERATION_MODE_OP_MODE_MASK;
23026 - pmlmepriv->ht_op_mode |= new_op_mode;
23027 - op_mode_changes++;
23028 - }
23029 + if(padapter->pbuddy_adapter != NULL &&
23030 + padapter->DualMacConcurrent == _TRUE)
23031 +
23032 + {
23033 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
23034
23035 - DBG_871X("%s new operation mode=0x%X changes=%d\n",
23036 - __FUNCTION__, pmlmepriv->ht_op_mode, op_mode_changes);
23037 + return check_fwstate(pbuddy_mlmepriv, fw_state);
23038 + }
23039
23040 - return op_mode_changes;
23041 -
23042 + return _FALSE;
23043 }
23044
23045 -#endif /* CONFIG_80211N_HT */
23046 -
23047 -/* called > TSR LEVEL for USB or SDIO Interface*/
23048 -void bss_cap_update(_adapter *padapter, struct sta_info *psta)
23049 +u8 dc_handle_site_survey(_adapter *padapter)
23050 {
23051 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23052 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
23053 -
23054 -#if 0
23055 - if (psta->flags & WLAN_STA_NONERP && !psta->nonerp_set) {
23056 - psta->nonerp_set = 1;
23057 - pmlmepriv->num_sta_non_erp++;
23058 - if (pmlmepriv->num_sta_non_erp == 1)
23059 - ieee802_11_set_beacons(hapd->iface);
23060 - }
23061 -#endif
23062 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
23063 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
23064 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
23065
23066 - if(psta->flags & WLAN_STA_NONERP)
23067 + // only mac0 can do scan request, help issue nulldata(1) for mac1
23068 + if(pbuddy_adapter != NULL &&
23069 + padapter->DualMacConcurrent == _TRUE)
23070 {
23071 - if(!psta->nonerp_set)
23072 + if (is_client_associated_to_ap(pbuddy_adapter) == _TRUE)
23073 {
23074 - psta->nonerp_set = 1;
23075 -
23076 - pmlmepriv->num_sta_non_erp++;
23077 -
23078 - if (pmlmepriv->num_sta_non_erp == 1)
23079 - update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
23080 - }
23081 + pmlmeext->sitesurvey_res.state = SCAN_TXNULL;
23082
23083 - }
23084 - else
23085 - {
23086 - if(psta->nonerp_set)
23087 - {
23088 - psta->nonerp_set = 0;
23089 -
23090 - pmlmepriv->num_sta_non_erp--;
23091 -
23092 - if (pmlmepriv->num_sta_non_erp == 0)
23093 - update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
23094 + issue_nulldata(pbuddy_adapter, NULL, 1, 2, 0);
23095 +
23096 + return _TRUE;
23097 }
23098 -
23099 }
23100
23101 + return _FALSE;
23102 +}
23103
23104 -#if 0
23105 - if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT) &&
23106 - !psta->no_short_slot_time_set) {
23107 - psta->no_short_slot_time_set = 1;
23108 - pmlmepriv->num_sta_no_short_slot_time++;
23109 - if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
23110 - (pmlmepriv->num_sta_no_short_slot_time == 1))
23111 - ieee802_11_set_beacons(hapd->iface);
23112 +void dc_report_survey_event(_adapter *padapter, union recv_frame *precv_frame)
23113 +{
23114 + if(padapter->pbuddy_adapter != NULL &&
23115 + padapter->DualMacConcurrent == _TRUE)
23116 + {
23117 + report_survey_event(padapter->pbuddy_adapter, precv_frame);
23118 }
23119 -#endif
23120 +}
23121 +
23122 +void dc_set_channel_bwmode_survey_done(_adapter *padapter)
23123 +{
23124 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23125 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
23126 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
23127 + struct mlme_priv *pbuddy_mlmepriv = NULL;
23128 + struct mlme_ext_priv *pbuddy_mlmeext = NULL;
23129 + struct mlme_ext_info *pbuddy_mlmeinfo = NULL;
23130 + u8 cur_channel;
23131 + u8 cur_bwmode;
23132 + u8 cur_ch_offset;
23133
23134 - if(!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT))
23135 + if(pbuddy_adapter != NULL &&
23136 + padapter->DualMacConcurrent == _TRUE)
23137 {
23138 - if(!psta->no_short_slot_time_set)
23139 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
23140 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
23141 + pbuddy_mlmeinfo = &(pbuddy_mlmeext->mlmext_info);
23142 +
23143 + if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
23144 {
23145 - psta->no_short_slot_time_set = 1;
23146 -
23147 - pmlmepriv->num_sta_no_short_slot_time++;
23148 -
23149 - if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
23150 - (pmlmepriv->num_sta_no_short_slot_time == 1))
23151 - update_beacon(padapter, 0xFF, NULL, _TRUE);
23152 -
23153 + if(check_fwstate(pmlmepriv, _FW_LINKED) &&
23154 + (pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40))
23155 + {
23156 + cur_channel = pmlmeext->cur_channel;
23157 + cur_bwmode = pmlmeext->cur_bwmode;
23158 + cur_ch_offset = pmlmeext->cur_ch_offset;
23159 + }
23160 + else
23161 + {
23162 + cur_channel = pbuddy_mlmeext->cur_channel;
23163 + cur_bwmode = pbuddy_mlmeext->cur_bwmode;
23164 + cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
23165 + }
23166 }
23167 - }
23168 - else
23169 - {
23170 - if(psta->no_short_slot_time_set)
23171 + else
23172 {
23173 - psta->no_short_slot_time_set = 0;
23174 -
23175 - pmlmepriv->num_sta_no_short_slot_time--;
23176 -
23177 - if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
23178 - (pmlmepriv->num_sta_no_short_slot_time == 0))
23179 - update_beacon(padapter, 0xFF, NULL, _TRUE);
23180 + cur_channel = pmlmeext->cur_channel;
23181 + cur_bwmode = pmlmeext->cur_bwmode;
23182 + cur_ch_offset = pmlmeext->cur_ch_offset;
23183 }
23184 - }
23185 -
23186 -
23187 -#if 0
23188 - if (!(psta->capability & WLAN_CAPABILITY_SHORT_PREAMBLE) &&
23189 - !psta->no_short_preamble_set) {
23190 - psta->no_short_preamble_set = 1;
23191 - pmlmepriv->num_sta_no_short_preamble++;
23192 - if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
23193 - (pmlmepriv->num_sta_no_short_preamble == 1))
23194 - ieee802_11_set_beacons(hapd->iface);
23195 - }
23196 -#endif
23197
23198 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
23199
23200 - if(!(psta->flags & WLAN_STA_SHORT_PREAMBLE))
23201 - {
23202 - if(!psta->no_short_preamble_set)
23203 + if (is_client_associated_to_ap(pbuddy_adapter) == _TRUE)
23204 {
23205 - psta->no_short_preamble_set = 1;
23206 -
23207 - pmlmepriv->num_sta_no_short_preamble++;
23208 -
23209 - if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
23210 - (pmlmepriv->num_sta_no_short_preamble == 1))
23211 - update_beacon(padapter, 0xFF, NULL, _TRUE);
23212 -
23213 + //issue null data
23214 + issue_nulldata(pbuddy_adapter, NULL, 0, 0, 0);
23215 + }
23216 +
23217 + if(((pbuddy_mlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
23218 + check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
23219 + {
23220 +
23221 + DBG_871X("survey done, current CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
23222 +
23223 + DBG_871X("restart pbuddy_adapter's beacon\n");
23224 +
23225 + update_beacon(pbuddy_adapter, 0, NULL, _TRUE);
23226 }
23227 }
23228 else
23229 {
23230 - if(psta->no_short_preamble_set)
23231 - {
23232 - psta->no_short_preamble_set = 0;
23233 -
23234 - pmlmepriv->num_sta_no_short_preamble--;
23235 -
23236 - if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
23237 - (pmlmepriv->num_sta_no_short_preamble == 0))
23238 - update_beacon(padapter, 0xFF, NULL, _TRUE);
23239 -
23240 - }
23241 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
23242 }
23243 +}
23244 +
23245 +void dc_set_ap_channel_bandwidth(_adapter *padapter, u8 channel, u8 channel_offset, u8 bwmode)
23246 +{
23247 + u8 *p;
23248 + u8 val8, cur_channel, cur_bwmode, cur_ch_offset, change_band;
23249 + int ie_len;
23250 + struct registry_priv *pregpriv = &padapter->registrypriv;
23251 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23252 + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
23253 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
23254 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
23255 + struct HT_info_element *pht_info=NULL;
23256 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
23257 + struct mlme_priv *pbuddy_mlmepriv = NULL;
23258 + struct mlme_ext_priv *pbuddy_mlmeext = NULL;
23259
23260 + DBG_871X("dualmac_concurrent_ap_set_channel_bwmode ==>\n");
23261
23262 -#ifdef CONFIG_80211N_HT
23263 + cur_channel = channel;
23264 + cur_bwmode = bwmode;
23265 + cur_ch_offset = channel_offset;
23266 + change_band = _FALSE;
23267
23268 - if (psta->flags & WLAN_STA_HT)
23269 + 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)));
23270 + if( p && ie_len)
23271 {
23272 - u16 ht_capab = le16_to_cpu(psta->htpriv.ht_cap.cap_info);
23273 -
23274 - DBG_871X("HT: STA " MAC_FMT " HT Capabilities "
23275 - "Info: 0x%04x\n", MAC_ARG(psta->hwaddr), ht_capab);
23276 + pht_info = (struct HT_info_element *)(p+2);
23277 + }
23278
23279 - if (psta->no_ht_set) {
23280 - psta->no_ht_set = 0;
23281 - pmlmepriv->num_sta_no_ht--;
23282 - }
23283 -
23284 - if ((ht_capab & IEEE80211_HT_CAP_GRN_FLD) == 0) {
23285 - if (!psta->no_ht_gf_set) {
23286 - psta->no_ht_gf_set = 1;
23287 - pmlmepriv->num_sta_ht_no_gf++;
23288 - }
23289 - DBG_871X("%s STA " MAC_FMT " - no "
23290 - "greenfield, num of non-gf stations %d\n",
23291 - __FUNCTION__, MAC_ARG(psta->hwaddr),
23292 - pmlmepriv->num_sta_ht_no_gf);
23293 - }
23294 -
23295 - if ((ht_capab & IEEE80211_HT_CAP_SUP_WIDTH) == 0) {
23296 - if (!psta->ht_20mhz_set) {
23297 - psta->ht_20mhz_set = 1;
23298 - pmlmepriv->num_sta_ht_20mhz++;
23299 - }
23300 - DBG_871X("%s STA " MAC_FMT " - 20 MHz HT, "
23301 - "num of 20MHz HT STAs %d\n",
23302 - __FUNCTION__, MAC_ARG(psta->hwaddr),
23303 - pmlmepriv->num_sta_ht_20mhz);
23304 - }
23305 -
23306 - }
23307 - else
23308 + if(pbuddy_adapter != NULL &&
23309 + padapter->DualMacConcurrent == _TRUE)
23310 {
23311 - if (!psta->no_ht_set) {
23312 - psta->no_ht_set = 1;
23313 - pmlmepriv->num_sta_no_ht++;
23314 - }
23315 - if(pmlmepriv->htpriv.ht_option == _TRUE) {
23316 - DBG_871X("%s STA " MAC_FMT
23317 - " - no HT, num of non-HT stations %d\n",
23318 - __FUNCTION__, MAC_ARG(psta->hwaddr),
23319 - pmlmepriv->num_sta_no_ht);
23320 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
23321 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
23322 +
23323 + if(!check_fwstate(pbuddy_mlmepriv, _FW_LINKED|_FW_UNDER_LINKING|_FW_UNDER_SURVEY))
23324 + {
23325 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
23326 }
23327 - }
23328 + else if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED)==_TRUE)
23329 + {
23330 + //To sync cur_channel/cur_bwmode/cur_ch_offset with another adapter
23331 + DBG_871X("Another iface is at linked state, sync cur_channel/cur_bwmode/cur_ch_offset\n");
23332 + DBG_871X("Another adapter, CH=%d, BW=%d, offset=%d\n", pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
23333 + DBG_871X("Current adapter, CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
23334 +
23335 + cur_channel = pbuddy_mlmeext->cur_channel;
23336 + if(cur_bwmode == HT_CHANNEL_WIDTH_40)
23337 + {
23338 + if(pht_info)
23339 + pht_info->infos[0] &= ~(BIT(0)|BIT(1));
23340
23341 - if (rtw_ht_operation_update(padapter) > 0)
23342 - {
23343 - update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
23344 - update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
23345 - }
23346 -
23347 -#endif /* CONFIG_80211N_HT */
23348 + if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
23349 + {
23350 + cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
23351
23352 -}
23353 + //to update cur_ch_offset value in beacon
23354 + if(pht_info)
23355 + {
23356 + switch(cur_ch_offset)
23357 + {
23358 + case HAL_PRIME_CHNL_OFFSET_LOWER:
23359 + pht_info->infos[0] |= 0x1;
23360 + break;
23361 + case HAL_PRIME_CHNL_OFFSET_UPPER:
23362 + pht_info->infos[0] |= 0x3;
23363 + break;
23364 + case HAL_PRIME_CHNL_OFFSET_DONT_CARE:
23365 + default:
23366 + break;
23367 + }
23368 + }
23369 + }
23370 + else if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20)
23371 + {
23372 + cur_bwmode = HT_CHANNEL_WIDTH_20;
23373 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
23374
23375 -void ap_free_sta(_adapter *padapter, struct sta_info *psta)
23376 -{
23377 - _irqL irqL;
23378 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23379 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
23380 - struct sta_priv *pstapriv = &padapter->stapriv;
23381 + if(cur_channel>0 && cur_channel<5)
23382 + {
23383 + if(pht_info)
23384 + pht_info->infos[0] |= 0x1;
23385
23386 - if(!psta)
23387 - return;
23388 + cur_bwmode = HT_CHANNEL_WIDTH_40;
23389 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
23390 + }
23391
23392 + if(cur_channel>7 && cur_channel<(14+1))
23393 + {
23394 + if(pht_info)
23395 + pht_info->infos[0] |= 0x3;
23396
23397 - if (psta->nonerp_set) {
23398 - psta->nonerp_set = 0;
23399 - pmlmepriv->num_sta_non_erp--;
23400 - if (pmlmepriv->num_sta_non_erp == 0)
23401 - update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
23402 - }
23403 + cur_bwmode = HT_CHANNEL_WIDTH_40;
23404 + cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
23405 + }
23406
23407 - if (psta->no_short_slot_time_set) {
23408 - psta->no_short_slot_time_set = 0;
23409 - pmlmepriv->num_sta_no_short_slot_time--;
23410 - if (pmlmeext->cur_wireless_mode > WIRELESS_11B
23411 - && pmlmepriv->num_sta_no_short_slot_time == 0)
23412 - update_beacon(padapter, 0xFF, NULL, _TRUE);
23413 - }
23414 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
23415 + }
23416 + }
23417
23418 - if (psta->no_short_preamble_set) {
23419 - psta->no_short_preamble_set = 0;
23420 - pmlmepriv->num_sta_no_short_preamble--;
23421 - if (pmlmeext->cur_wireless_mode > WIRELESS_11B
23422 - && pmlmepriv->num_sta_no_short_preamble == 0)
23423 - update_beacon(padapter, 0xFF, NULL, _TRUE);
23424 - }
23425 -
23426 -#ifdef CONFIG_80211N_HT
23427 + // to update channel value in beacon
23428 + pnetwork->Configuration.DSConfig = cur_channel;
23429 + p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _DSSET_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
23430 + if(p && ie_len>0)
23431 + *(p + 2) = cur_channel;
23432
23433 - if (psta->no_ht_gf_set) {
23434 - psta->no_ht_gf_set = 0;
23435 - pmlmepriv->num_sta_ht_no_gf--;
23436 + if(pht_info)
23437 + pht_info->primary_channel = cur_channel;
23438 + }
23439 }
23440 -
23441 - if (psta->no_ht_set) {
23442 - psta->no_ht_set = 0;
23443 - pmlmepriv->num_sta_no_ht--;
23444 + else
23445 + {
23446 + set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
23447 }
23448
23449 - if (psta->ht_20mhz_set) {
23450 - psta->ht_20mhz_set = 0;
23451 - pmlmepriv->num_sta_ht_20mhz--;
23452 - }
23453 + DBG_871X("CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
23454
23455 - if (rtw_ht_operation_update(padapter) > 0)
23456 + if((channel <= 14 && cur_channel >= 36) ||
23457 + (channel >= 36 && cur_channel <= 14))
23458 {
23459 - update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
23460 - update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
23461 + change_band = _TRUE;
23462 }
23463 -
23464 -#endif /* CONFIG_80211N_HT */
23465 -
23466 -
23467 - //tear down Rx AMPDU
23468 - send_delba(padapter, 0, psta->hwaddr);// recipient
23469 -
23470 - //tear down TX AMPDU
23471 - send_delba(padapter, 1, psta->hwaddr);// // originator
23472 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
23473 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
23474 -
23475
23476 - issue_deauth(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
23477 + pmlmeext->cur_channel = cur_channel;
23478 + pmlmeext->cur_bwmode = cur_bwmode;
23479 + pmlmeext->cur_ch_offset = cur_ch_offset;
23480
23481 - //report_del_sta_event(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
23482 + if(change_band == _TRUE)
23483 + change_band_update_ie(padapter, pnetwork);
23484
23485 - //clear key
23486 - //clear_cam_entry(padapter, (psta->mac_id + 3));
23487 + DBG_871X("dualmac_concurrent_ap_set_channel_bwmode <==\n");
23488 +}
23489
23490 +void dc_resume_xmit(_adapter *padapter)
23491 +{
23492 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
23493 +
23494 + if(pbuddy_adapter != NULL &&
23495 + padapter->DualMacConcurrent == _TRUE)
23496 {
23497 - #ifdef CONFIG_IOCTL_CFG80211
23498 - struct wireless_dev *pwdev = padapter->rtw_wdev;
23499 + DBG_871X("dc_resume_xmit, resume pbuddy_adapter Tx\n");
23500 + rtw_os_xmit_schedule(pbuddy_adapter);
23501 + }
23502 +}
23503 +
23504 +u8 dc_check_xmit(_adapter *padapter)
23505 +{
23506 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
23507 + struct mlme_priv *pbuddy_mlmepriv = NULL;
23508
23509 - if(pwdev->iftype == NL80211_IFTYPE_AP) {
23510 - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
23511 - rtw_cfg80211_indicate_sta_disassoc(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
23512 - #else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
23513 - report_del_sta_event(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
23514 - #endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
23515 - } else
23516 - #endif //CONFIG_IOCTL_CFG80211
23517 + if(pbuddy_adapter != NULL &&
23518 + padapter->DualMacConcurrent == _TRUE)
23519 + {
23520 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
23521 + if (check_fwstate(pbuddy_mlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
23522 {
23523 - rtw_indicate_sta_disassoc_event(padapter, psta);
23524 + DBG_871X("dc_check_xmit pbuddy_adapter is under survey or under linking\n");
23525 + return _FALSE;
23526 }
23527 }
23528
23529 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
23530 - rtw_free_stainfo(padapter, psta);
23531 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
23532 -
23533 -
23534 + return _TRUE;
23535 }
23536 +#endif
23537
23538 -int rtw_sta_flush(_adapter *padapter)
23539 +#ifdef CONFIG_CONCURRENT_MODE
23540 +sint check_buddy_mlmeinfo_state(_adapter *padapter, u32 state)
23541 {
23542 - _irqL irqL;
23543 - _list *phead, *plist;
23544 - int ret=0;
23545 - struct sta_info *psta = NULL;
23546 - struct sta_priv *pstapriv = &padapter->stapriv;
23547 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
23548 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
23549 - u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
23550 -
23551 - DBG_871X("%s\n", __FUNCTION__);
23552 -
23553 - if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
23554 - return ret;
23555 + PADAPTER pbuddy_adapter;
23556 + struct mlme_ext_priv *pbuddy_mlmeext;
23557 + struct mlme_ext_info *pbuddy_mlmeinfo;
23558
23559 -
23560 - _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
23561 - phead = &pstapriv->asoc_list;
23562 - plist = get_next(phead);
23563 + if(padapter == NULL)
23564 + return _FALSE;
23565
23566 - //free sta asoc_queue
23567 - while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
23568 - {
23569 - psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
23570 -
23571 - plist = get_next(plist);
23572 -
23573 - rtw_list_delete(&psta->asoc_list);
23574 -
23575 - //_exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
23576 - ap_free_sta(padapter, psta);
23577 - //_enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
23578 - }
23579 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
23580 + pbuddy_adapter = padapter->pbuddy_adapter;
23581
23582 + if(pbuddy_adapter == NULL)
23583 + return _FALSE;
23584
23585 - issue_deauth(padapter, bc_addr, WLAN_REASON_DEAUTH_LEAVING);
23586
23587 - return ret;
23588 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
23589 + pbuddy_mlmeinfo = &(pbuddy_mlmeext->mlmext_info);
23590 +
23591 + if((pbuddy_mlmeinfo->state&0x03) == state)
23592 + return _TRUE;
23593
23594 + return _FALSE;
23595 +
23596 }
23597
23598 -/* called > TSR LEVEL for USB or SDIO Interface*/
23599 -void sta_info_update(_adapter *padapter, struct sta_info *psta)
23600 -{
23601 - int flags = psta->flags;
23602 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23603 -
23604 -
23605 - //update wmm cap.
23606 - if(WLAN_STA_WME&flags)
23607 - psta->qos_option = 1;
23608 - else
23609 - psta->qos_option = 0;
23610 +void concurrent_chk_joinbss_done(_adapter *padapter, int join_res)
23611 +{
23612 + struct mlme_ext_priv *pmlmeext;
23613 + struct mlme_ext_info *pmlmeinfo;
23614 + PADAPTER pbuddy_adapter;
23615 + struct mlme_priv *pbuddy_mlmepriv;
23616 + struct mlme_ext_priv *pbuddy_mlmeext;
23617 + struct mlme_ext_info *pbuddy_mlmeinfo;
23618 + WLAN_BSSID_EX *pbuddy_network_mlmeext;
23619
23620 - if(pmlmepriv->qospriv.qos_option == 0)
23621 - psta->qos_option = 0;
23622 + pmlmeext = &padapter->mlmeextpriv;
23623 + pmlmeinfo = &(pmlmeext->mlmext_info);
23624
23625 -
23626 -#ifdef CONFIG_80211N_HT
23627 - //update 802.11n ht cap.
23628 - if(WLAN_STA_HT&flags)
23629 +
23630 + if(!rtw_buddy_adapter_up(padapter))
23631 {
23632 - psta->htpriv.ht_option = _TRUE;
23633 - psta->qos_option = 1;
23634 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
23635 + return;
23636 }
23637 - else
23638 +
23639 + pbuddy_adapter = padapter->pbuddy_adapter;
23640 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
23641 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
23642 + pbuddy_mlmeinfo = &(pbuddy_mlmeext->mlmext_info);
23643 + pbuddy_network_mlmeext = &(pbuddy_mlmeinfo->network);
23644 +
23645 + if(((pbuddy_mlmeinfo->state&0x03) == WIFI_FW_AP_STATE) &&
23646 + check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
23647 {
23648 - psta->htpriv.ht_option = _FALSE;
23649 - }
23650 + //restart and update beacon
23651 +
23652 + DBG_871X("after join,primary adapter, CH=%d, BW=%d, offset=%d\n"
23653 + , pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
23654
23655 - if(pmlmepriv->htpriv.ht_option == _FALSE)
23656 - psta->htpriv.ht_option = _FALSE;
23657 -#endif
23658
23659 + if(join_res >= 0)
23660 + {
23661 + u8 *p;
23662 + int ie_len;
23663 + u8 change_band = _FALSE;
23664 + struct HT_info_element *pht_info=NULL;
23665
23666 - update_sta_info_apmode(padapter, psta);
23667 -
23668 + if((pmlmeext->cur_channel <= 14 && pbuddy_mlmeext->cur_channel >= 36) ||
23669 + (pmlmeext->cur_channel >= 36 && pbuddy_mlmeext->cur_channel <= 14))
23670 + change_band = _TRUE;
23671
23672 -}
23673 + //sync channel/bwmode/ch_offset with primary adapter
23674 + pbuddy_mlmeext->cur_channel = pmlmeext->cur_channel;
23675 + if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
23676 + {
23677 + 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)));
23678 + if( p && ie_len)
23679 + {
23680 + pht_info = (struct HT_info_element *)(p+2);
23681 + pht_info->infos[0] &= ~(BIT(0)|BIT(1)); //no secondary channel is present
23682 + }
23683 +
23684 + if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
23685 + {
23686 + pbuddy_mlmeext->cur_ch_offset = pmlmeext->cur_ch_offset;
23687
23688 -/* called >= TSR LEVEL for USB or SDIO Interface*/
23689 -void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta)
23690 -{
23691 - if(psta->state & _FW_LINKED)
23692 - {
23693 - //add ratid
23694 - add_RATid(padapter, psta);
23695 - }
23696 -}
23697 + //to update cur_ch_offset value in beacon
23698 + if( pht_info )
23699 + {
23700 + switch(pmlmeext->cur_ch_offset)
23701 + {
23702 + case HAL_PRIME_CHNL_OFFSET_LOWER:
23703 + pht_info->infos[0] |= 0x1;
23704 + break;
23705 + case HAL_PRIME_CHNL_OFFSET_UPPER:
23706 + pht_info->infos[0] |= 0x3;
23707 + break;
23708 + case HAL_PRIME_CHNL_OFFSET_DONT_CARE:
23709 + default:
23710 + break;
23711 + }
23712 +
23713 + }
23714 +
23715 + }
23716 + else if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20)
23717 + {
23718 + if(pmlmeext->cur_channel>=1 && pmlmeext->cur_channel<=4)
23719 + {
23720 + if(pht_info)
23721 + pht_info->infos[0] |= HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE;
23722
23723 -void start_ap_mode(_adapter *padapter)
23724 -{
23725 - int i;
23726 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23727 - struct sta_priv *pstapriv = &padapter->stapriv;
23728 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
23729 -
23730 - pmlmepriv->update_bcn = _FALSE;
23731 -
23732 - //init_mlme_ap_info(padapter);
23733 - pmlmeext->bstart_bss = _FALSE;
23734 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
23735 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
23736 + }
23737 + else if(pmlmeext->cur_channel>=5 && pmlmeext->cur_channel<=14)
23738 + {
23739 + if(pht_info)
23740 + pht_info->infos[0] |= HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW;
23741 +
23742 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
23743 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
23744 + }
23745 + else
23746 + {
23747 + switch(pmlmeext->cur_channel)
23748 + {
23749 + case 36:
23750 + case 44:
23751 + case 52:
23752 + case 60:
23753 + case 100:
23754 + case 108:
23755 + case 116:
23756 + case 124:
23757 + case 132:
23758 + case 149:
23759 + case 157:
23760 + {
23761 + if(pht_info)
23762 + pht_info->infos[0] |= HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE;
23763 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
23764 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
23765 + break;
23766 + }
23767 + case 40:
23768 + case 48:
23769 + case 56:
23770 + case 64:
23771 + case 104:
23772 + case 112:
23773 + case 120:
23774 + case 128:
23775 + case 136:
23776 + case 153:
23777 + case 161:
23778 + {
23779 + if(pht_info)
23780 + pht_info->infos[0] |= HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW;
23781 +
23782 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
23783 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
23784 + break;
23785 + }
23786 + default:
23787 + if(pht_info)
23788 + pht_info->infos[0] &= ~HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW;
23789 + pbuddy_mlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
23790 + pbuddy_mlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
23791 + break;
23792
23793 - pmlmepriv->num_sta_non_erp = 0;
23794 + }
23795 +
23796 + }
23797
23798 - pmlmepriv->num_sta_no_short_slot_time = 0;
23799 + }
23800
23801 - pmlmepriv->num_sta_no_short_preamble = 0;
23802 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
23803 +
23804 + }
23805 + else
23806 + {
23807 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
23808 + }
23809
23810 - pmlmepriv->num_sta_ht_no_gf = 0;
23811
23812 - pmlmepriv->num_sta_no_ht = 0;
23813 -
23814 - pmlmepriv->num_sta_ht_20mhz = 0;
23815 + // to update channel value in beacon
23816 + pbuddy_network_mlmeext->Configuration.DSConfig = pmlmeext->cur_channel;
23817 + 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)));
23818 + if(p && ie_len>0)
23819 + *(p + 2) = pmlmeext->cur_channel;
23820
23821 - pmlmepriv->olbc = _FALSE;
23822 + 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)));
23823 + if( p && ie_len)
23824 + {
23825 + pht_info = (struct HT_info_element *)(p+2);
23826 + pht_info->primary_channel = pmlmeext->cur_channel;
23827 + }
23828
23829 - pmlmepriv->olbc_ht = _FALSE;
23830 -
23831 -#ifdef CONFIG_80211N_HT
23832 - pmlmepriv->ht_op_mode = 0;
23833 -#endif
23834 + //buddy interface band is different from current interface, update ERP, support rate, ext support rate IE
23835 + if(change_band == _TRUE)
23836 + change_band_update_ie(pbuddy_adapter, pbuddy_network_mlmeext);
23837 + }
23838 + else
23839 + {
23840 + // switch back to original channel/bwmode/ch_offset;
23841 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
23842 + }
23843
23844 - for(i=0; i<NUM_STA; i++)
23845 - pstapriv->sta_aid[i] = NULL;
23846 + 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);
23847
23848 - pmlmepriv->wps_beacon_ie = NULL;
23849 - pmlmepriv->wps_probe_resp_ie = NULL;
23850 - pmlmepriv->wps_assoc_resp_ie = NULL;
23851 -
23852 - pmlmepriv->p2p_beacon_ie = NULL;
23853 - pmlmepriv->p2p_probe_resp_ie = NULL;
23854 + DBG_871X("update pbuddy_adapter's beacon\n");
23855 +
23856 + update_beacon(pbuddy_adapter, 0, NULL, _TRUE);
23857
23858 + }
23859 + else if(((pbuddy_mlmeinfo->state&0x03) == WIFI_FW_STATION_STATE) &&
23860 + check_fwstate(pbuddy_mlmepriv, _FW_LINKED))
23861 + {
23862 + if(join_res >= 0)
23863 + {
23864 + pbuddy_mlmeext->cur_channel = pmlmeext->cur_channel;
23865 + if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
23866 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
23867 + else if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
23868 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
23869 + else
23870 + set_channel_bwmode(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
23871 + }
23872 + else
23873 + {
23874 + // switch back to original channel/bwmode/ch_offset;
23875 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
23876 + }
23877 + }
23878 + else
23879 + {
23880 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
23881 + }
23882 +
23883 }
23884 +#endif //CONFIG_CONCURRENT_MODE
23885
23886 -void stop_ap_mode(_adapter *padapter)
23887 +int rtw_chk_start_clnt_join(_adapter *padapter)
23888 {
23889 - _irqL irqL;
23890 - //_list *phead, *plist;
23891 - struct sta_info *psta=NULL;
23892 - struct sta_priv *pstapriv = &padapter->stapriv;
23893 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
23894 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
23895 -
23896 - pmlmepriv->update_bcn = _FALSE;
23897 - pmlmeext->bstart_bss = _FALSE;
23898 - //_rtw_spinlock_free(&pmlmepriv->bcn_update_lock);
23899 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
23900 + unsigned char cur_ch = pmlmeext->cur_channel;
23901 + unsigned char cur_bw = pmlmeext->cur_bwmode;
23902 + unsigned char cur_ch_offset = pmlmeext->cur_ch_offset;
23903 + bool chbw_allow = _TRUE;
23904 + bool connect_allow = _TRUE;
23905
23906 - //phead = &pstapriv->asoc_list;
23907 - //plist = get_next(phead);
23908 -
23909 - rtw_sta_flush(padapter);
23910 +#ifdef CONFIG_CONCURRENT_MODE
23911 + PADAPTER pbuddy_adapter;
23912 + struct mlme_ext_priv *pbuddy_mlmeext;
23913 + struct mlme_ext_info *pbuddy_pmlmeinfo;
23914 + struct mlme_priv *pbuddy_mlmepriv;
23915
23916 -#if 0
23917 - //free sta asoc_queue
23918 - while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
23919 - {
23920 - psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
23921 -
23922 - plist = get_next(plist);
23923 + if (!rtw_buddy_adapter_up(padapter)) {
23924 + goto start_join_set_ch_bw;
23925 + }
23926
23927 - rtw_list_delete(&psta->asoc_list);
23928 + pbuddy_adapter = padapter->pbuddy_adapter;
23929 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
23930 + pbuddy_pmlmeinfo = &(pbuddy_mlmeext->mlmext_info);
23931 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
23932
23933 - //tear down Rx AMPDU
23934 - send_delba(padapter, 0, psta->hwaddr);// recipient
23935 -
23936 - //tear down TX AMPDU
23937 - send_delba(padapter, 1, psta->hwaddr);// // originator
23938 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
23939 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
23940 + if((pbuddy_pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)//for AP MODE
23941 + {
23942 + DBG_871X("start_clnt_join: "ADPT_FMT"(ch=%d, bw=%d, ch_offset=%d)"
23943 + ", "ADPT_FMT" AP mode(ch=%d, bw=%d, ch_offset=%d)\n",
23944 + ADPT_ARG(padapter), pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset,
23945 + ADPT_ARG(pbuddy_adapter), pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
23946
23947 - issue_deauth(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
23948 + if(pmlmeext->cur_channel != pbuddy_mlmeext->cur_channel)
23949 + {
23950 + chbw_allow = _FALSE;
23951 + }
23952 + else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
23953 + (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
23954 + (pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset))
23955 + {
23956 + chbw_allow = _FALSE;
23957 + }
23958 + else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20) &&
23959 + (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40))
23960 + {
23961 + cur_ch = pmlmeext->cur_channel;
23962 + cur_bw = pbuddy_mlmeext->cur_bwmode;
23963 + cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
23964 + }
23965
23966 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
23967 - rtw_free_stainfo(padapter, psta);
23968 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
23969 -
23970 + DBG_871X("start_clnt_join: connect_allow:%d, chbw_allow:%d\n", connect_allow, chbw_allow);
23971 + if (chbw_allow == _FALSE) {
23972 + #ifdef CONFIG_SPCT_CH_SWITCH
23973 + if (1) {
23974 + rtw_ap_inform_ch_switch(pbuddy_adapter, pmlmeext->cur_channel , pmlmeext->cur_ch_offset);
23975 + } else
23976 + #endif
23977 + {
23978 + //issue deauth to all stas if if2 is at ap mode
23979 + rtw_sta_flush(pbuddy_adapter);
23980 + }
23981 + rtw_hal_set_hwreg(padapter, HW_VAR_CHECK_TXBUF, 0);
23982 + }
23983 }
23984 -#endif
23985 + else if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED) == _TRUE &&
23986 + check_fwstate(pbuddy_mlmepriv, WIFI_STATION_STATE) == _TRUE) //for Client Mode/p2p client
23987 + {
23988 + DBG_871X("start_clnt_join: "ADPT_FMT"(ch=%d, bw=%d, ch_offset=%d)"
23989 + ", "ADPT_FMT" STA mode(ch=%d, bw=%d, ch_offset=%d)\n",
23990 + ADPT_ARG(padapter), pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset,
23991 + ADPT_ARG(pbuddy_adapter), pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
23992
23993 - //free_assoc_sta_resources
23994 - rtw_free_all_stainfo(padapter);
23995 -
23996 - psta = rtw_get_bcmc_stainfo(padapter);
23997 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
23998 - rtw_free_stainfo(padapter, psta);
23999 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
24000 -
24001 - rtw_init_bcmc_stainfo(padapter);
24002 + if(pmlmeext->cur_channel != pbuddy_mlmeext->cur_channel)
24003 + {
24004 + chbw_allow = _FALSE;
24005 + }
24006 + else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20) &&
24007 + (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40))
24008 + {
24009 + cur_bw = HT_CHANNEL_WIDTH_40;
24010 + cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
24011 + }
24012 + else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
24013 + (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
24014 + (pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset))
24015 + {
24016 + chbw_allow = _FALSE;
24017 + }
24018
24019 - rtw_free_mlme_priv_ie_data(pmlmepriv);
24020 + connect_allow = chbw_allow;
24021
24022 -/*
24023 - if(pmlmepriv->wps_beacon_ie)
24024 - {
24025 - rtw_mfree(pmlmepriv->wps_beacon_ie, pmlmepriv->wps_beacon_ie_len);
24026 - pmlmepriv->wps_beacon_ie = NULL;
24027 - }
24028 + #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
24029 + /* wlan0-sta mode has higher priority than p2p0-p2p client */
24030 + if (!rtw_p2p_chk_state(&(pbuddy_adapter->wdinfo), P2P_STATE_NONE)
24031 + && pbuddy_adapter->wdinfo.driver_interface == DRIVER_CFG80211)
24032 + {
24033 + connect_allow = _TRUE;
24034 + }
24035 + #endif /* CONFIG_P2P && CONFIG_IOCTL_CFG80211 */
24036
24037 - if(pmlmepriv->wps_probe_resp_ie)
24038 - {
24039 - rtw_mfree(pmlmepriv->wps_probe_resp_ie, pmlmepriv->wps_probe_resp_ie_len);
24040 - pmlmepriv->wps_probe_resp_ie = NULL;
24041 + DBG_871X("start_clnt_join: connect_allow:%d, chbw_allow:%d\n", connect_allow, chbw_allow);
24042 + if (connect_allow == _TRUE && chbw_allow == _FALSE) {
24043 + /* disconnect buddy's connection */
24044 + rtw_disassoc_cmd(pbuddy_adapter, 500, _FALSE);
24045 + rtw_indicate_disconnect(pbuddy_adapter);
24046 + rtw_free_assoc_resources(pbuddy_adapter, 1);
24047 + }
24048 }
24049
24050 - if(pmlmepriv->wps_assoc_resp_ie)
24051 - {
24052 - rtw_mfree(pmlmepriv->wps_assoc_resp_ie, pmlmepriv->wps_assoc_resp_ie_len);
24053 - pmlmepriv->wps_assoc_resp_ie = NULL;
24054 +start_join_set_ch_bw:
24055 +#endif /* CONFIG_CONCURRENT_MODE */
24056 +
24057 + if (connect_allow == _TRUE) {
24058 + DBG_871X("start_join_set_ch_bw: ch=%d, bwmode=%d, ch_offset=%d\n", cur_ch, cur_bw, cur_ch_offset);
24059 + set_channel_bwmode(padapter, cur_ch, cur_ch_offset, cur_bw);
24060 }
24061
24062 - if(pmlmepriv->p2p_beacon_ie)
24063 - {
24064 - rtw_mfree(pmlmepriv->p2p_beacon_ie, pmlmepriv->p2p_beacon_ie_len);
24065 - pmlmepriv->p2p_beacon_ie = NULL;
24066 + return connect_allow == _TRUE ? _SUCCESS : _FAIL;
24067 +}
24068 +
24069 +/* Find union about ch, bw, ch_offset of all linked interfaces */
24070 +int rtw_get_ch_setting_union(_adapter *adapter, u8 *ch, u8 *bw, u8 *offset)
24071 +{
24072 + struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
24073 + _adapter *iface;
24074 + struct mlme_ext_priv *mlmeext;
24075 + int i;
24076 + u8 ch_ret = 0;
24077 + u8 bw_ret = HT_CHANNEL_WIDTH_20;
24078 + u8 offset_ret = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
24079 + int num = 0;
24080 +
24081 + if (ch) *ch = 0;
24082 + if (bw) *bw = HT_CHANNEL_WIDTH_20;
24083 + if (offset) *offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
24084 +
24085 + for (i = 0; i<dvobj->iface_nums; i++) {
24086 + iface = dvobj->padapters[i];
24087 + mlmeext = &iface->mlmeextpriv;
24088 +
24089 + if (!check_fwstate(&iface->mlmepriv, _FW_LINKED))
24090 + continue;
24091 +
24092 + if (num == 0) {
24093 + ch_ret = mlmeext->cur_channel;
24094 + bw_ret = mlmeext->cur_bwmode;
24095 + offset_ret = mlmeext->cur_ch_offset;
24096 + num++;
24097 + continue;
24098 + }
24099 +
24100 + if (ch_ret != mlmeext->cur_channel) {
24101 + num = 0;
24102 + break;
24103 + }
24104 +
24105 + if (bw_ret < mlmeext->cur_bwmode) {
24106 + bw_ret = mlmeext->cur_bwmode;
24107 + offset_ret = mlmeext->cur_ch_offset;
24108 + } else if (bw_ret == mlmeext->cur_bwmode && offset_ret != mlmeext->cur_ch_offset) {
24109 + num = 0;
24110 + break;
24111 + }
24112 +
24113 + num++;
24114 }
24115
24116 - if(pmlmepriv->p2p_probe_resp_ie)
24117 - {
24118 - rtw_mfree(pmlmepriv->p2p_probe_resp_ie, pmlmepriv->p2p_probe_resp_ie_len);
24119 - pmlmepriv->p2p_probe_resp_ie = NULL;
24120 + if (num) {
24121 + if (ch) *ch = ch_ret;
24122 + if (bw) *bw = bw_ret;
24123 + if (offset) *offset = offset_ret;
24124 }
24125 -*/
24126
24127 + return num;
24128 }
24129
24130 +u8 set_ch_hdl(_adapter *padapter, u8 *pbuf)
24131 +{
24132 + struct set_ch_parm *set_ch_parm;
24133 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
24134 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
24135
24136 -#endif
24137 + if(!pbuf)
24138 + return H2C_PARAMETERS_ERROR;
24139
24140 -#endif
24141 + set_ch_parm = (struct set_ch_parm *)pbuf;
24142 +
24143 + DBG_871X(FUNC_NDEV_FMT" ch:%u, bw:%u, ch_offset:%u\n",
24144 + FUNC_NDEV_ARG(padapter->pnetdev),
24145 + set_ch_parm->ch, set_ch_parm->bw, set_ch_parm->ch_offset);
24146 +
24147 + pmlmeext->cur_channel = set_ch_parm->ch;
24148 + pmlmeext->cur_ch_offset = set_ch_parm->ch_offset;
24149 + pmlmeext->cur_bwmode = set_ch_parm->bw;
24150 +
24151 + set_channel_bwmode(padapter, set_ch_parm->ch, set_ch_parm->ch_offset, set_ch_parm->bw);
24152 +
24153 + return H2C_SUCCESS;
24154 +}
24155
24156 u8 set_chplan_hdl(_adapter *padapter, unsigned char *pbuf)
24157 {
24158 @@ -12038,6 +13361,7 @@ u8 set_chplan_hdl(_adapter *padapter, unsigned char *pbuf)
24159 setChannelPlan_param = (struct SetChannelPlan_param *)pbuf;
24160
24161 pmlmeext->max_chan_nums = init_channel_set(padapter, setChannelPlan_param->channel_plan, pmlmeext->channel_set);
24162 + init_channel_list(padapter, pmlmeext->channel_set, pmlmeext->max_chan_nums, &pmlmeext->channel_list);
24163
24164 return H2C_SUCCESS;
24165 }
24166 @@ -12062,6 +13386,7 @@ u8 set_csa_hdl(_adapter *padapter, unsigned char *pbuf)
24167 {
24168 #ifdef CONFIG_DFS
24169 struct SetChannelSwitch_param *setChannelSwitch_param;
24170 + struct SetChannelPlan_param *setChannelPlan_param;
24171 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
24172 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
24173 struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
24174 @@ -12073,22 +13398,22 @@ u8 set_csa_hdl(_adapter *padapter, unsigned char *pbuf)
24175
24176 setChannelSwitch_param = (struct SetChannelSwitch_param *)pbuf;
24177 new_ch_no = setChannelSwitch_param->new_ch_no;
24178 -
24179 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_TXPAUSE, &gval8);
24180 -
24181 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TXPAUSE, &sval8);
24182
24183 - DBG_8192C("DFS detected! Swiching channel to %d!\n", new_ch_no);
24184 + rtw_hal_get_hwreg(padapter, HW_VAR_TXPAUSE, &gval8);
24185 +
24186 + rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, &sval8);
24187 +
24188 + DBG_871X("DFS detected! Swiching channel to %d!\n", new_ch_no);
24189 SelectChannel(padapter, new_ch_no);
24190
24191 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TXPAUSE, &gval8);
24192 + rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, &gval8);
24193
24194 rtw_free_network_queue(padapter, _TRUE);
24195 rtw_indicate_disconnect(padapter);
24196
24197 if ( ((new_ch_no >= 52) && (new_ch_no <= 64)) ||((new_ch_no >= 100) && (new_ch_no <= 140)) ) {
24198 - DBG_8192C("Switched to DFS band (ch %02x) again!!\n", new_ch_no);
24199 - }
24200 + DBG_871X("Switched to DFS band (ch %02x) again!!\n", new_ch_no);
24201 + }
24202
24203 return H2C_SUCCESS;
24204 #else
24205 @@ -12136,14 +13461,18 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
24206 }
24207
24208 //_enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
24209 - DBG_8192C("[%s] option:%d\n", __FUNCTION__, option);
24210 + DBG_871X("[%s] option:%d\n", __FUNCTION__, option);
24211
24212 switch(option){
24213 case TDLS_WRCR:
24214 //As long as TDLS handshake success, we should set RCR_CBSSID_DATA bit to 0
24215 //such we can receive all kinds of data frames.
24216 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TDLS_WRCR, 0);
24217 - DBG_8192C("wirte REG_RCR, set bit6 off\n");
24218 + rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_WRCR, 0);
24219 + DBG_871X("TDLS with "MAC_FMT"\n", MAC_ARG(ptdls_sta->hwaddr));
24220 +
24221 + pmlmeinfo->FW_sta_info[ptdls_sta->mac_id].psta = ptdls_sta;
24222 + //set TDLS sta rate.
24223 + set_sta_rate(padapter, ptdls_sta);
24224 break;
24225 case TDLS_SD_PTI:
24226 issue_tdls_peer_traffic_indication(padapter, ptdls_sta);
24227 @@ -12155,11 +13484,11 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
24228 ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SWITCH_ON_STATE |
24229 TDLS_PEER_AT_OFF_STATE |
24230 TDLS_AT_OFF_CH_STATE);
24231 - DBG_8192C("go back to base channel\n ");
24232 - issue_nulldata(padapter, 0);
24233 + DBG_871X("go back to base channel\n ");
24234 + issue_nulldata(padapter, NULL, 0, 0, 0);
24235 break;
24236 case TDLS_INIT_CH_SEN:
24237 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TDLS_INIT_CH_SEN, 0);
24238 + rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_INIT_CH_SEN, 0);
24239 pmlmeext->sitesurvey_res.channel_idx = 0;
24240 ptdls_sta->option = TDLS_DONE_CH_SEN;
24241 rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_DONE_CH_SEN);
24242 @@ -12174,7 +13503,7 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
24243 }else{
24244 SelectChannel(padapter, pmlmeext->cur_channel);
24245
24246 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TDLS_DONE_CH_SEN, 0);
24247 + rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_DONE_CH_SEN, 0);
24248
24249 if(ptdlsinfo->ch_sensing==1){
24250 ptdlsinfo->ch_sensing=0;
24251 @@ -12189,7 +13518,7 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
24252 }
24253 ptdlsinfo->collect_pkt_num[0]=0;
24254 ptdlsinfo->candidate_ch=ptdlsinfo->cur_channel;
24255 - DBG_8192C("TDLS channel sensing done, candidate channel: %02x\n", ptdlsinfo->candidate_ch);
24256 + DBG_871X("TDLS channel sensing done, candidate channel: %02x\n", ptdlsinfo->candidate_ch);
24257 ptdlsinfo->cur_channel=0;
24258
24259 }
24260 @@ -12198,20 +13527,20 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
24261 ptdls_sta->tdls_sta_state |= TDLS_APSD_CHSW_STATE;
24262 }else{
24263 //send null data with pwrbit==1 before send ch_switching_req to peer STA.
24264 - issue_nulldata(padapter, 1);
24265 + issue_nulldata(padapter, NULL, 1, 0, 0);
24266
24267 ptdls_sta->tdls_sta_state |= TDLS_CH_SW_INITIATOR_STATE;
24268
24269 issue_tdls_ch_switch_req(padapter, ptdls_sta->hwaddr);
24270 - DBG_8192C("issue tdls ch switch req\n");
24271 + DBG_871X("issue tdls ch switch req\n");
24272 }
24273 }
24274 break;
24275 case TDLS_OFF_CH:
24276 - issue_nulldata(padapter, 1);
24277 + issue_nulldata(padapter, NULL, 1, 0, 0);
24278 SelectChannel(padapter, ptdls_sta->off_ch);
24279
24280 - DBG_8192C("change channel to tar ch:%02x\n", ptdls_sta->off_ch);
24281 + DBG_871X("change channel to tar ch:%02x\n", ptdls_sta->off_ch);
24282 ptdls_sta->tdls_sta_state |= TDLS_AT_OFF_CH_STATE;
24283 ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_AT_OFF_STATE);
24284 _set_timer(&ptdls_sta->option_timer, (u32)ptdls_sta->ch_switch_time);
24285 @@ -12223,21 +13552,21 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
24286 ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SWITCH_ON_STATE |
24287 TDLS_PEER_AT_OFF_STATE |
24288 TDLS_AT_OFF_CH_STATE);
24289 - DBG_8192C("go back to base channel\n ");
24290 - issue_nulldata(padapter, 0);
24291 + DBG_871X("go back to base channel\n ");
24292 + issue_nulldata(padapter, NULL, 0, 0, 0);
24293 _set_timer(&ptdls_sta->option_timer, (u32)ptdls_sta->ch_switch_time);
24294 break;
24295 case TDLS_P_OFF_CH:
24296 SelectChannel(padapter, pmlmeext->cur_channel);
24297 - issue_nulldata(padapter, 0);
24298 - DBG_8192C("change channel to base ch:%02x\n", pmlmeext->cur_channel);
24299 + issue_nulldata(padapter, NULL, 0, 0, 0);
24300 + DBG_871X("change channel to base ch:%02x\n", pmlmeext->cur_channel);
24301 ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_AT_OFF_STATE| TDLS_AT_OFF_CH_STATE);
24302 _set_timer(&ptdls_sta->off_ch_timer, TDLS_STAY_TIME);
24303 break;
24304 case TDLS_P_BASE_CH:
24305 - issue_nulldata(ptdls_sta->padapter, 1);
24306 + issue_nulldata(ptdls_sta->padapter, NULL, 1, 0, 0);
24307 SelectChannel(padapter, ptdls_sta->off_ch);
24308 - DBG_8192C("change channel to off ch:%02x\n", ptdls_sta->off_ch);
24309 + DBG_871X("change channel to off ch:%02x\n", ptdls_sta->off_ch);
24310 ptdls_sta->tdls_sta_state |= TDLS_AT_OFF_CH_STATE;
24311 if((ptdls_sta->tdls_sta_state & TDLS_PEER_AT_OFF_STATE) != TDLS_PEER_AT_OFF_STATE){
24312 issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta, 0);
24313 @@ -12245,8 +13574,8 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
24314 _set_timer(&ptdls_sta->base_ch_timer, TDLS_STAY_TIME);
24315 break;
24316 case TDLS_RS_RCR:
24317 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TDLS_RS_RCR, 0);
24318 - DBG_8192C("wirte REG_RCR, set bit6 on\n");
24319 + rtw_hal_set_hwreg(padapter, HW_VAR_TDLS_RS_RCR, 0);
24320 + DBG_871X("wirte REG_RCR, set bit6 on\n");
24321 break;
24322 case TDLS_CKALV_PH1:
24323 _set_timer(&ptdls_sta->alive_timer2, TDLS_ALIVE_TIMER_PH2);
24324 @@ -12268,3 +13597,4 @@ u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf)
24325 #endif //CONFIG_TDLS
24326
24327 }
24328 +
24329 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_mp.c b/drivers/net/wireless/rtl8192cu/core/rtw_mp.c
24330 index bb76dae..9af42cd 100644
24331 --- a/drivers/net/wireless/rtl8192cu/core/rtw_mp.c
24332 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_mp.c
24333 @@ -1,7 +1,7 @@
24334 /******************************************************************************
24335 *
24336 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
24337 - *
24338 + *
24339 * This program is free software; you can redistribute it and/or modify it
24340 * under the terms of version 2 of the GNU General Public License as
24341 * published by the Free Software Foundation.
24342 @@ -21,6 +21,10 @@
24343
24344 #include <drv_types.h>
24345
24346 +#ifdef PLATFORM_FREEBSD
24347 +#include <sys/unistd.h> /* for RFHIGHPID */
24348 +#endif
24349 +
24350 #ifdef CONFIG_RTL8712
24351 #include <rtw_mp_phy_regdef.h>
24352 #endif
24353 @@ -30,6 +34,9 @@
24354 #ifdef CONFIG_RTL8192D
24355 #include <rtl8192d_hal.h>
24356 #endif
24357 +#ifdef CONFIG_RTL8723A
24358 +#include <rtl8723a_hal.h>
24359 +#endif
24360
24361
24362 #ifdef CONFIG_MP_INCLUDED
24363 @@ -79,35 +86,34 @@ void write_macreg(_adapter *padapter, u32 addr, u32 val, u32 sz)
24364
24365 u32 read_bbreg(_adapter *padapter, u32 addr, u32 bitmask)
24366 {
24367 - return padapter->HalFunc.read_bbreg(padapter, addr, bitmask);
24368 + return rtw_hal_read_bbreg(padapter, addr, bitmask);
24369 }
24370
24371 void write_bbreg(_adapter *padapter, u32 addr, u32 bitmask, u32 val)
24372 {
24373 - padapter->HalFunc.write_bbreg(padapter, addr, bitmask, val);
24374 + rtw_hal_write_bbreg(padapter, addr, bitmask, val);
24375 }
24376
24377 u32 _read_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 bitmask)
24378 {
24379 - return padapter->HalFunc.read_rfreg(padapter, (RF90_RADIO_PATH_E)rfpath, addr, bitmask);
24380 + return rtw_hal_read_rfreg(padapter, (RF_RADIO_PATH_E)rfpath, addr, bitmask);
24381 }
24382
24383 void _write_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val)
24384 {
24385 - padapter->HalFunc.write_rfreg(padapter, (RF90_RADIO_PATH_E)rfpath, addr, bitmask, val);
24386 + rtw_hal_write_rfreg(padapter, (RF_RADIO_PATH_E)rfpath, addr, bitmask, val);
24387 }
24388
24389 u32 read_rfreg(PADAPTER padapter, u8 rfpath, u32 addr)
24390 {
24391 - return _read_rfreg(padapter, (RF90_RADIO_PATH_E)rfpath, addr, bRFRegOffsetMask);
24392 + return _read_rfreg(padapter, (RF_RADIO_PATH_E)rfpath, addr, bRFRegOffsetMask);
24393 }
24394
24395 void write_rfreg(PADAPTER padapter, u8 rfpath, u32 addr, u32 val)
24396 {
24397 - _write_rfreg(padapter, (RF90_RADIO_PATH_E)rfpath, addr, bRFRegOffsetMask, val);
24398 + _write_rfreg(padapter, (RF_RADIO_PATH_E)rfpath, addr, bRFRegOffsetMask, val);
24399 }
24400
24401 -
24402 static void _init_mp_priv_(struct mp_priv *pmp_priv)
24403 {
24404 WLAN_BSSID_EX *pnetwork;
24405 @@ -349,7 +355,7 @@ MPT_InitializeAdapter(
24406 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
24407 s32 rtStatus = _SUCCESS;
24408 PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.MptCtx;
24409 - u32 tmpRegA, tmpRegC, TempCCk,ledsetting;
24410 + u32 ledsetting;
24411
24412 //-------------------------------------------------------------------------
24413 // HW Initialization for 8190 MPT.
24414 @@ -503,16 +509,22 @@ void GetPowerTracking(PADAPTER padapter, u8 *enable)
24415
24416 static void disable_dm(PADAPTER padapter)
24417 {
24418 +#ifndef CONFIG_RTL8723A
24419 u8 v8;
24420 +#endif
24421 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
24422 struct dm_priv *pdmpriv = &pHalData->dmpriv;
24423
24424
24425 //3 1. disable firmware dynamic mechanism
24426 // disable Power Training, Rate Adaptive
24427 +#ifdef CONFIG_RTL8723A
24428 + SetBcnCtrlReg(padapter, 0, EN_BCN_FUNCTION);
24429 +#else
24430 v8 = rtw_read8(padapter, REG_BCN_CTRL);
24431 v8 &= ~EN_BCN_FUNCTION;
24432 rtw_write8(padapter, REG_BCN_CTRL, v8);
24433 +#endif
24434
24435 //3 2. disable driver dynamic mechanism
24436 // disable Dynamic Initial Gain
24437 @@ -595,7 +607,7 @@ s32 mp_start_test(PADAPTER padapter)
24438
24439 //init mp_start_test status
24440 if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
24441 - rtw_disassoc_cmd(padapter);
24442 + rtw_disassoc_cmd(padapter, 500, _TRUE);
24443 rtw_indicate_disconnect(padapter);
24444 rtw_free_assoc_resources(padapter, 1);
24445 }
24446 @@ -765,7 +777,7 @@ static VOID mpt_AdjustRFRegByRateByChan92CU(PADAPTER pAdapter, u8 RateIdx, u8 Ch
24447 static void mpt_SwitchRfSetting(PADAPTER pAdapter)
24448 {
24449 Hal_mpt_SwitchRfSetting(pAdapter);
24450 - }
24451 + }
24452
24453 /*---------------------------hal\rtl8192c\MPT_Phy.c---------------------------*/
24454 /*---------------------------hal\rtl8192c\MPT_HelperFunc.c---------------------------*/
24455 @@ -827,7 +839,7 @@ void SetAntennaPathPower(PADAPTER pAdapter)
24456 void SetTxPower(PADAPTER pAdapter)
24457 {
24458 Hal_SetTxPower(pAdapter);
24459 -}
24460 + }
24461
24462 void SetTxAGCOffset(PADAPTER pAdapter, u32 ulTxAGCOffset)
24463 {
24464 @@ -904,12 +916,12 @@ void SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart)
24465 }
24466
24467 void SetCCKContinuousTx(PADAPTER pAdapter, u8 bStart)
24468 -{
24469 + {
24470 Hal_SetCCKContinuousTx(pAdapter,bStart);
24471 }
24472
24473 void SetOFDMContinuousTx(PADAPTER pAdapter, u8 bStart)
24474 -{
24475 + {
24476 Hal_SetOFDMContinuousTx( pAdapter, bStart);
24477 }/* mpt_StartOfdmContTx */
24478
24479 @@ -919,12 +931,12 @@ void SetContinuousTx(PADAPTER pAdapter, u8 bStart)
24480 }
24481
24482 //------------------------------------------------------------------------------
24483 -void dump_mpframe(_adapter *padapter, struct xmit_frame *pmpframe)
24484 +static void dump_mpframe(PADAPTER padapter, struct xmit_frame *pmpframe)
24485 {
24486 - padapter->HalFunc.mgnt_xmit(padapter, pmpframe);
24487 + rtw_hal_mgnt_xmit(padapter, pmpframe);
24488 }
24489
24490 -struct xmit_frame *alloc_mp_xmitframe(struct xmit_priv *pxmitpriv)
24491 +static struct xmit_frame *alloc_mp_xmitframe(struct xmit_priv *pxmitpriv)
24492 {
24493 struct xmit_frame *pmpframe;
24494 struct xmit_buf *pxmitbuf;
24495 @@ -936,7 +948,7 @@ struct xmit_frame *alloc_mp_xmitframe(struct xmit_priv *pxmitpriv)
24496
24497 if ((pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv)) == NULL)
24498 {
24499 - rtw_free_xmitframe_ex(pxmitpriv, pmpframe);
24500 + rtw_free_xmitframe(pxmitpriv, pmpframe);
24501 return NULL;
24502 }
24503
24504 @@ -952,7 +964,7 @@ struct xmit_frame *alloc_mp_xmitframe(struct xmit_priv *pxmitpriv)
24505
24506 }
24507
24508 -thread_return mp_xmit_packet_thread(thread_context context)
24509 +static thread_return mp_xmit_packet_thread(thread_context context)
24510 {
24511 struct xmit_frame *pxmitframe;
24512 struct mp_tx *pmptx;
24513 @@ -965,9 +977,9 @@ thread_return mp_xmit_packet_thread(thread_context context)
24514 padapter = pmp_priv->papdater;
24515 pxmitpriv = &(padapter->xmitpriv);
24516
24517 - thread_enter(padapter);
24518 + thread_enter("RTW_MP_THREAD");
24519
24520 - //DBG_8192C("%s:pkTx Start\n", __func__);
24521 + DBG_871X("%s:pkTx Start\n", __func__);
24522 while (1) {
24523 pxmitframe = alloc_mp_xmitframe(pxmitpriv);
24524 if (pxmitframe == NULL) {
24525 @@ -1002,7 +1014,7 @@ thread_return mp_xmit_packet_thread(thread_context context)
24526 }
24527
24528 exit:
24529 - //DBG_8192C("%s:pkTx Exit\n", __func__);
24530 + //DBG_871X("%s:pkTx Exit\n", __func__);
24531 rtw_mfree(pmptx->pallocated_buf, pmptx->buf_size);
24532 pmptx->pallocated_buf = NULL;
24533 pmptx->stop = 1;
24534 @@ -1059,7 +1071,7 @@ void SetPacketTx(PADAPTER padapter)
24535 pmp_priv->tx.buf_size = pkt_size + XMITBUF_ALIGN_SZ;
24536 pmp_priv->tx.pallocated_buf = rtw_zmalloc(pmp_priv->tx.buf_size);
24537 if (pmp_priv->tx.pallocated_buf == NULL) {
24538 - DBG_8192C("%s: malloc(%d) fail!!\n", __func__, pmp_priv->tx.buf_size);
24539 + DBG_871X("%s: malloc(%d) fail!!\n", __func__, pmp_priv->tx.buf_size);
24540 return;
24541 }
24542 pmp_priv->tx.buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pmp_priv->tx.pallocated_buf), XMITBUF_ALIGN_SZ);
24543 @@ -1140,9 +1152,22 @@ void SetPacketTx(PADAPTER padapter)
24544 _rtw_memset(ptr, payload, pkt_end - ptr);
24545
24546 //3 6. start thread
24547 - if(!start_kthread(&pmp_priv->tx.PktTxThread, mp_xmit_packet_thread, pmp_priv, "8192cu-mp-xmit"))
24548 +#ifdef PLATFORM_LINUX
24549 + pmp_priv->tx.PktTxThread = kthread_run(mp_xmit_packet_thread, pmp_priv, "RTW_MP_THREAD");
24550 + if (IS_ERR(pmp_priv->tx.PktTxThread))
24551 DBG_871X("Create PktTx Thread Fail !!!!!\n");
24552 +#endif
24553 +#ifdef PLATFORM_FREEBSD
24554 +{
24555 + struct proc *p;
24556 + struct thread *td;
24557 + pmp_priv->tx.PktTxThread = kproc_kthread_add(mp_xmit_packet_thread, pmp_priv,
24558 + &p, &td, RFHIGHPID, 0, "MPXmitThread", "MPXmitThread");
24559
24560 + if (pmp_priv->tx.PktTxThread < 0)
24561 + DBG_871X("Create PktTx Thread Fail !!!!!\n");
24562 +}
24563 +#endif
24564 }
24565
24566 void SetPacketRx(PADAPTER pAdapter, u8 bStartRx)
24567 @@ -1151,9 +1176,14 @@ void SetPacketRx(PADAPTER pAdapter, u8 bStartRx)
24568
24569 if(bStartRx)
24570 {
24571 - // Accept CRC error and destination address
24572 - pHalData->ReceiveConfig |= (RCR_ACRC32|RCR_AAP);
24573 + pHalData->ReceiveConfig = AAP | APM | AM | AB | APP_ICV | ADF | AMF | HTC_LOC_CTRL | APP_MIC | APP_PHYSTS;
24574 +
24575 + pHalData->ReceiveConfig |= ACRC32;
24576 +
24577 rtw_write32(pAdapter, REG_RCR, pHalData->ReceiveConfig);
24578 +
24579 + // Accept all data frames
24580 + rtw_write16(pAdapter, REG_RXFLTMAP2, 0xFFFF);
24581 }
24582 else
24583 {
24584 @@ -1244,15 +1274,15 @@ static u32 GetPSDData(PADAPTER pAdapter, u32 point)
24585 */
24586 u32 mp_query_psd(PADAPTER pAdapter, u8 *data)
24587 {
24588 - u8 *val;
24589 u32 i, psd_pts=0, psd_start=0, psd_stop=0;
24590 u32 psd_data=0;
24591 -
24592 -
24593 +
24594 +#ifdef PLATFORM_LINUX
24595 if (!netif_running(pAdapter->pnetdev)) {
24596 RT_TRACE(_module_mp_, _drv_warning_, ("mp_query_psd: Fail! interface not opened!\n"));
24597 return 0;
24598 }
24599 +#endif
24600
24601 if (check_fwstate(&pAdapter->mlmepriv, WIFI_MP_STATE) == _FALSE) {
24602 RT_TRACE(_module_mp_, _drv_warning_, ("mp_query_psd: Fail! not in MP mode!\n"));
24603 @@ -1290,28 +1320,5 @@ u32 mp_query_psd(PADAPTER pAdapter, u8 *data)
24604 return strlen(data)+1;
24605 }
24606
24607 -
24608 -u32 rtw_atoi(u8* s)
24609 -{
24610 -
24611 - int num=0,flag=0;
24612 - int i;
24613 - for(i=0;i<=strlen(s);i++)
24614 - {
24615 - if(s[i] >= '0' && s[i] <= '9')
24616 - num = num * 10 + s[i] -'0';
24617 - else if(s[0] == '-' && i==0)
24618 - flag =1;
24619 - else
24620 - break;
24621 - }
24622 -
24623 - if(flag == 1)
24624 - num = num * -1;
24625 -
24626 - return(num);
24627 -
24628 -}
24629 -
24630 #endif
24631
24632 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c b/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c
24633 index a851568..b941e2c 100644
24634 --- a/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c
24635 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c
24636 @@ -1,7 +1,7 @@
24637 /******************************************************************************
24638 *
24639 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
24640 - *
24641 + *
24642 * This program is free software; you can redistribute it and/or modify it
24643 * under the terms of version 2 of the GNU General Public License as
24644 * published by the Free Software Foundation.
24645 @@ -56,7 +56,9 @@ _func_exit_;
24646 //**************** oid_rtl_seg_81_87_80 section start ****************
24647 NDIS_STATUS oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
24648 {
24649 +#ifdef PLATFORM_OS_XP
24650 _irqL oldirql;
24651 +#endif
24652 struct bb_reg_param *pbbreg;
24653 u16 offset;
24654 u32 value;
24655 @@ -95,7 +97,9 @@ _func_exit_;
24656 //------------------------------------------------------------------------------
24657 NDIS_STATUS oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
24658 {
24659 +#ifdef PLATFORM_OS_XP
24660 _irqL oldirql;
24661 +#endif
24662 struct bb_reg_param *pbbreg;
24663 u16 offset;
24664 u32 value;
24665 @@ -134,7 +138,9 @@ _func_exit_;
24666 //------------------------------------------------------------------------------
24667 NDIS_STATUS oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
24668 {
24669 +#ifdef PLATFORM_OS_XP
24670 _irqL oldirql;
24671 +#endif
24672 struct rf_reg_param *pbbreg;
24673 u8 path;
24674 u8 offset;
24675 @@ -180,7 +186,9 @@ _func_exit_;
24676 //------------------------------------------------------------------------------
24677 NDIS_STATUS oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
24678 {
24679 +#ifdef PLATFORM_OS_XP
24680 _irqL oldirql;
24681 +#endif
24682 struct rf_reg_param *pbbreg;
24683 u8 path;
24684 u8 offset;
24685 @@ -231,7 +239,9 @@ _func_exit_;
24686 //------------------------------------------------------------------------------
24687 NDIS_STATUS oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv)
24688 {
24689 +#ifdef PLATFORM_OS_XP
24690 _irqL oldirql;
24691 +#endif
24692 u32 ratevalue;//4
24693 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24694 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24695 @@ -266,9 +276,10 @@ _func_exit_;
24696 //------------------------------------------------------------------------------
24697 NDIS_STATUS oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv)
24698 {
24699 +#ifdef PLATFORM_OS_XP
24700 _irqL oldirql;
24701 +#endif
24702 u32 mode;
24703 - u8 val8;
24704 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24705 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24706
24707 @@ -306,7 +317,9 @@ _func_exit_;
24708 //------------------------------------------------------------------------------
24709 NDIS_STATUS oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv)
24710 {
24711 +#ifdef PLATFORM_OS_XP
24712 _irqL oldirql;
24713 +#endif
24714 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24715 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24716
24717 @@ -330,7 +343,9 @@ _func_exit_;
24718 //------------------------------------------------------------------------------
24719 NDIS_STATUS oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv)
24720 {
24721 +#ifdef PLATFORM_OS_XP
24722 _irqL oldirql;
24723 +#endif
24724 u32 Channel;
24725 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24726 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24727 @@ -367,10 +382,13 @@ _func_exit_;
24728 //------------------------------------------------------------------------------
24729 NDIS_STATUS oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv)
24730 {
24731 +#ifdef PLATFORM_OS_XP
24732 _irqL oldirql;
24733 - u16 bandwidth, channel_offset;
24734 +#endif
24735 + u16 bandwidth;
24736 + u16 channel_offset;
24737 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24738 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24739 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
24740
24741 _func_enter_;
24742
24743 @@ -384,12 +402,15 @@ _func_enter_;
24744 return NDIS_STATUS_INVALID_LENGTH;
24745
24746 bandwidth = *((u32*)poid_par_priv->information_buf);//4
24747 + channel_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
24748 +
24749 if (bandwidth != HT_CHANNEL_WIDTH_40)
24750 bandwidth = HT_CHANNEL_WIDTH_20;
24751 - Adapter->mppriv.bandwidth = (u8)bandwidth;
24752 + padapter->mppriv.bandwidth = (u8)bandwidth;
24753 + padapter->mppriv.prime_channel_offset = (u8)channel_offset;
24754
24755 _irqlevel_changed_(&oldirql, LOWER);
24756 - SetBandwidth(Adapter);
24757 + SetBandwidth(padapter);
24758 _irqlevel_changed_(&oldirql, RAISE);
24759
24760 RT_TRACE(_module_mp_, _drv_notice_,
24761 @@ -403,7 +424,9 @@ _func_exit_;
24762 //------------------------------------------------------------------------------
24763 NDIS_STATUS oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv)
24764 {
24765 +#ifdef PLATFORM_OS_XP
24766 _irqL oldirql;
24767 +#endif
24768 u32 antenna;
24769 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24770 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24771 @@ -440,7 +463,9 @@ _func_exit_;
24772
24773 NDIS_STATUS oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv *poid_par_priv)
24774 {
24775 +#ifdef PLATFORM_OS_XP
24776 _irqL oldirql;
24777 +#endif
24778 u32 tx_pwr_idx;
24779 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24780 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24781 @@ -599,7 +624,9 @@ _func_exit_;
24782 //------------------------------------------------------------------------------
24783 NDIS_STATUS oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv)
24784 {
24785 +#ifdef PLATFORM_OS_XP
24786 _irqL oldirql;
24787 +#endif
24788 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24789 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24790
24791 @@ -621,7 +648,9 @@ _func_exit_;
24792 //------------------------------------------------------------------------------
24793 NDIS_STATUS oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
24794 {
24795 +#ifdef PLATFORM_OS_XP
24796 _irqL oldirql;
24797 +#endif
24798 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24799 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24800
24801 @@ -650,7 +679,9 @@ _func_exit_;
24802 //------------------------------------------------------------------------------
24803 NDIS_STATUS oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
24804 {
24805 +#ifdef PLATFORM_OS_XP
24806 _irqL oldirql;
24807 +#endif
24808 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24809 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24810
24811 @@ -680,7 +711,9 @@ _func_exit_;
24812 //**************** oid_rtl_seg_81_80_20 section end ****************
24813 NDIS_STATUS oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv)
24814 {
24815 +#ifdef PLATFORM_OS_XP
24816 _irqL oldirql;
24817 +#endif
24818 u32 bStartTest;
24819 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24820 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24821 @@ -700,7 +733,7 @@ _func_enter_;
24822 struct mp_priv *pmp_priv = &Adapter->mppriv;
24823 if (pmp_priv->tx.stop == 0) {
24824 pmp_priv->tx.stop = 1;
24825 - DBG_8192C("%s: pkt tx is running...\n", __func__);
24826 + DBG_871X("%s: pkt tx is running...\n", __func__);
24827 rtw_msleep_os(5);
24828 }
24829 pmp_priv->tx.stop = 0;
24830 @@ -716,7 +749,9 @@ _func_exit_;
24831
24832 NDIS_STATUS oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv)
24833 {
24834 +#ifdef PLATFORM_OS_XP
24835 _irqL oldirql;
24836 +#endif
24837 u32 bStartTest;
24838 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24839 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24840 @@ -736,7 +771,7 @@ _func_enter_;
24841 struct mp_priv *pmp_priv = &Adapter->mppriv;
24842 if (pmp_priv->tx.stop == 0) {
24843 pmp_priv->tx.stop = 1;
24844 - DBG_8192C("%s: pkt tx is running...\n", __func__);
24845 + DBG_871X("%s: pkt tx is running...\n", __func__);
24846 rtw_msleep_os(5);
24847 }
24848 pmp_priv->tx.stop = 0;
24849 @@ -752,7 +787,9 @@ _func_exit_;
24850
24851 NDIS_STATUS oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *poid_par_priv)
24852 {
24853 +#ifdef PLATFORM_OS_XP
24854 _irqL oldirql;
24855 +#endif
24856 u32 bStartTest;
24857 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24858 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24859 @@ -772,7 +809,7 @@ _func_enter_;
24860 struct mp_priv *pmp_priv = &Adapter->mppriv;
24861 if (pmp_priv->tx.stop == 0) {
24862 pmp_priv->tx.stop = 1;
24863 - DBG_8192C("%s: pkt tx is running...\n", __func__);
24864 + DBG_871X("%s: pkt tx is running...\n", __func__);
24865 rtw_msleep_os(5);
24866 }
24867 pmp_priv->tx.stop = 0;
24868 @@ -788,7 +825,9 @@ _func_exit_;
24869
24870 NDIS_STATUS oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv)
24871 {
24872 +#ifdef PLATFORM_OS_XP
24873 _irqL oldirql;
24874 +#endif
24875 u32 bStartTest;
24876 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24877 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24878 @@ -820,7 +859,9 @@ NDIS_STATUS oid_rt_pro_trigger_gpio_hdl(struct oid_par_priv *poid_par_priv)
24879 {
24880 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24881
24882 +#ifdef PLATFORM_OS_XP
24883 _irqL oldirql;
24884 +#endif
24885 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24886 _func_enter_;
24887
24888 @@ -828,7 +869,7 @@ _func_enter_;
24889 return NDIS_STATUS_NOT_ACCEPTED;
24890
24891 _irqlevel_changed_(&oldirql, LOWER);
24892 - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_TRIGGER_GPIO_0, 0);
24893 + rtw_hal_set_hwreg(Adapter, HW_VAR_TRIGGER_GPIO_0, 0);
24894 _irqlevel_changed_(&oldirql, RAISE);
24895
24896 _func_exit_;
24897 @@ -842,7 +883,9 @@ NDIS_STATUS oid_rt_pro8711_join_bss_hdl(struct oid_par_priv *poid_par_priv)
24898 #if 0
24899 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24900
24901 +#ifdef PLATFORM_OS_XP
24902 _irqL oldirql;
24903 +#endif
24904 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24905
24906 PNDIS_802_11_SSID pssid;
24907 @@ -878,7 +921,9 @@ _func_exit_;
24908 //------------------------------------------------------------------------------
24909 NDIS_STATUS oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv)
24910 {
24911 +#ifdef PLATFORM_OS_XP
24912 _irqL oldirql;
24913 +#endif
24914 pRW_Reg RegRWStruct;
24915 u32 offset, width;
24916 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24917 @@ -928,7 +973,9 @@ _func_exit_;
24918 //------------------------------------------------------------------------------
24919 NDIS_STATUS oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv)
24920 {
24921 +#ifdef PLATFORM_OS_XP
24922 _irqL oldirql;
24923 +#endif
24924 pRW_Reg RegRWStruct;
24925 u32 offset, width, value;
24926 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24927 @@ -989,12 +1036,13 @@ _func_exit_;
24928 //------------------------------------------------------------------------------
24929 NDIS_STATUS oid_rt_pro_burst_read_register_hdl(struct oid_par_priv *poid_par_priv)
24930 {
24931 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24932 -
24933 +#if 0
24934 +#ifdef PLATFORM_OS_XP
24935 _irqL oldirql;
24936 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24937 -
24938 +#endif
24939 pBurst_RW_Reg pBstRwReg;
24940 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24941 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
24942
24943 _func_enter_;
24944
24945 @@ -1002,30 +1050,34 @@ _func_enter_;
24946
24947 if (poid_par_priv->type_of_oid != QUERY_OID)
24948 return NDIS_STATUS_NOT_ACCEPTED;
24949 -#if 0
24950 +
24951 pBstRwReg = (pBurst_RW_Reg)poid_par_priv->information_buf;
24952
24953 _irqlevel_changed_(&oldirql, LOWER);
24954 - rtw_read_mem(Adapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
24955 - _irqlevel_changed_(&oldirql,RAISE);
24956 + rtw_read_mem(padapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
24957 + _irqlevel_changed_(&oldirql, RAISE);
24958
24959 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
24960 -#endif
24961 +
24962 RT_TRACE(_module_mp_, _drv_info_, ("-oid_rt_pro_burst_read_register_hdl\n"));
24963
24964 _func_exit_;
24965
24966 return status;
24967 +#else
24968 + return 0;
24969 +#endif
24970 }
24971 //------------------------------------------------------------------------------
24972 NDIS_STATUS oid_rt_pro_burst_write_register_hdl(struct oid_par_priv *poid_par_priv)
24973 {
24974 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
24975 -
24976 +#if 0
24977 +#ifdef PLATFORM_OS_XP
24978 _irqL oldirql;
24979 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24980 -
24981 +#endif
24982 pBurst_RW_Reg pBstRwReg;
24983 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
24984 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
24985
24986 _func_enter_;
24987
24988 @@ -1033,27 +1085,33 @@ _func_enter_;
24989
24990 if (poid_par_priv->type_of_oid != SET_OID)
24991 return NDIS_STATUS_NOT_ACCEPTED;
24992 -#if 0
24993 +
24994 pBstRwReg = (pBurst_RW_Reg)poid_par_priv->information_buf;
24995
24996 _irqlevel_changed_(&oldirql, LOWER);
24997 - rtw_write_mem(Adapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
24998 + rtw_write_mem(padapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
24999 _irqlevel_changed_(&oldirql, RAISE);
25000 -#endif
25001 +
25002 RT_TRACE(_module_mp_, _drv_info_, ("-oid_rt_pro_burst_write_register_hdl\n"));
25003
25004 _func_exit_;
25005
25006 return status;
25007 +#else
25008 + return 0;
25009 +#endif
25010 }
25011 //------------------------------------------------------------------------------
25012 NDIS_STATUS oid_rt_pro_write_txcmd_hdl(struct oid_par_priv *poid_par_priv)
25013 {
25014 +#if 0
25015 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25016 -/*
25017 +
25018 PADAPTER Adapter = (PADAPTER)( poid_par_priv->adapter_context);
25019
25020 +#ifdef PLATFORM_OS_XP
25021 _irqL oldirql;
25022 +#endif
25023
25024 TX_CMD_Desc *TxCmd_Info;
25025
25026 @@ -1078,7 +1136,6 @@ _func_enter_;
25027 rtw_write32(Adapter, TxCmd_Info->offset + 4, (unsigned int)TxCmd_Info->TxCMD.value[1]);
25028
25029 _irqlevel_changed_(&oldirql, RAISE);
25030 -*/
25031
25032 RT_TRACE(_module_mp_, _drv_notice_,
25033 ("-Set OID_RT_PRO_WRITE_TXCMD: status=0x%08X\n", status));
25034 @@ -1086,17 +1143,21 @@ _func_enter_;
25035 _func_exit_;
25036
25037 return status;
25038 +#else
25039 + return 0;
25040 +#endif
25041 }
25042
25043 //------------------------------------------------------------------------------
25044 NDIS_STATUS oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
25045 {
25046 - PADAPTER Adapter = (PADAPTER)( poid_par_priv->adapter_context);
25047 -
25048 +#if 0
25049 +#ifdef PLATFORM_OS_XP
25050 _irqL oldirql;
25051 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25052 -
25053 +#endif
25054 pEEPROM_RWParam pEEPROM;
25055 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25056 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
25057
25058 _func_enter_;
25059
25060 @@ -1104,11 +1165,11 @@ _func_enter_;
25061
25062 if (poid_par_priv->type_of_oid != QUERY_OID)
25063 return NDIS_STATUS_NOT_ACCEPTED;
25064 -#if 0
25065 +
25066 pEEPROM = (pEEPROM_RWParam)poid_par_priv->information_buf;
25067
25068 _irqlevel_changed_(&oldirql, LOWER);
25069 - pEEPROM->value = eeprom_read16(Adapter, (u16)(pEEPROM->offset >> 1));
25070 + pEEPROM->value = eeprom_read16(padapter, (u16)(pEEPROM->offset >> 1));
25071 _irqlevel_changed_(&oldirql, RAISE);
25072
25073 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
25074 @@ -1116,21 +1177,25 @@ _func_enter_;
25075 RT_TRACE(_module_mp_, _drv_notice_,
25076 ("-Query OID_RT_PRO_READ16_EEPROM: offset=0x%x value=0x%x\n",
25077 pEEPROM->offset, pEEPROM->value));
25078 -#endif
25079 +
25080 _func_exit_;
25081
25082 return status;
25083 +#else
25084 + return 0;
25085 +#endif
25086 }
25087
25088 //------------------------------------------------------------------------------
25089 NDIS_STATUS oid_rt_pro_write16_eeprom_hdl (struct oid_par_priv *poid_par_priv)
25090 {
25091 - PADAPTER Adapter = (PADAPTER)( poid_par_priv->adapter_context);
25092 -
25093 +#if 0
25094 +#ifdef PLATFORM_OS_XP
25095 _irqL oldirql;
25096 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25097 -
25098 +#endif
25099 pEEPROM_RWParam pEEPROM;
25100 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25101 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
25102
25103 _func_enter_;
25104
25105 @@ -1138,18 +1203,21 @@ _func_enter_;
25106
25107 if (poid_par_priv->type_of_oid != SET_OID)
25108 return NDIS_STATUS_NOT_ACCEPTED;
25109 -#if 0
25110 +
25111 pEEPROM = (pEEPROM_RWParam)poid_par_priv->information_buf;
25112
25113 _irqlevel_changed_(&oldirql, LOWER);
25114 - eeprom_write16(Adapter, (u16)(pEEPROM->offset >> 1), pEEPROM->value);
25115 + eeprom_write16(padapter, (u16)(pEEPROM->offset >> 1), pEEPROM->value);
25116 _irqlevel_changed_(&oldirql, RAISE);
25117
25118 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
25119 -#endif
25120 +
25121 _func_exit_;
25122
25123 return status;
25124 +#else
25125 + return 0;
25126 +#endif
25127 }
25128 //------------------------------------------------------------------------------
25129 NDIS_STATUS oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv *poid_par_priv)
25130 @@ -1227,7 +1295,9 @@ NDIS_STATUS oid_rt_rd_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
25131 struct io_queue *pio_queue = (struct io_queue *)Adapter->pio_queue;
25132 struct intf_hdl *pintfhdl = &pio_queue->intf;
25133
25134 - _irqL oldirql;
25135 +#ifdef PLATFORM_OS_XP
25136 + _irqL oldirql;
25137 +#endif
25138 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25139
25140 #ifdef CONFIG_SDIO_HCI
25141 @@ -1268,7 +1338,9 @@ NDIS_STATUS oid_rt_wr_attrib_mem_hdl (struct oid_par_priv *poid_par_priv)
25142 struct io_queue *pio_queue = (struct io_queue *)Adapter->pio_queue;
25143 struct intf_hdl *pintfhdl = &pio_queue->intf;
25144
25145 +#ifdef PLATFORM_OS_XP
25146 _irqL oldirql;
25147 +#endif
25148 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25149
25150 #ifdef CONFIG_SDIO_HCI
25151 @@ -1304,7 +1376,9 @@ NDIS_STATUS oid_rt_pro_set_rf_intfs_hdl(struct oid_par_priv *poid_par_priv)
25152 #if 0
25153 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25154
25155 +#ifdef PLATFORM_OS_XP
25156 _irqL oldirql;
25157 +#endif
25158 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25159
25160 _func_enter_;
25161 @@ -1404,7 +1478,9 @@ NDIS_STATUS oid_rt_pro_set_data_rate_ex_hdl(struct oid_par_priv *poid_par_priv)
25162 {
25163 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25164
25165 +#ifdef PLATFORM_OS_XP
25166 _irqL oldirql;
25167 +#endif
25168 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25169
25170 _func_enter_;
25171 @@ -1428,7 +1504,9 @@ _func_exit_;
25172 //-----------------------------------------------------------------------------
25173 NDIS_STATUS oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv)
25174 {
25175 +#ifdef PLATFORM_OS_XP
25176 _irqL oldirql;
25177 +#endif
25178 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25179 u8 thermal = 0;
25180 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25181 @@ -1460,7 +1538,9 @@ NDIS_STATUS oid_rt_pro_read_tssi_hdl(struct oid_par_priv *poid_par_priv)
25182 #if 0
25183 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25184
25185 +#ifdef PLATFORM_OS_XP
25186 _irqL oldirql;
25187 +#endif
25188 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25189
25190 _func_enter_;
25191 @@ -1500,7 +1580,9 @@ _func_exit_;
25192 //------------------------------------------------------------------------------
25193 NDIS_STATUS oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv *poid_par_priv)
25194 {
25195 +#ifdef PLATFORM_OS_XP
25196 _irqL oldirql;
25197 +#endif
25198 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25199 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25200
25201 @@ -1534,14 +1616,15 @@ _func_exit_;
25202 //-----------------------------------------------------------------------------
25203 NDIS_STATUS oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv *poid_par_priv)
25204 {
25205 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25206 -
25207 +#if 0
25208 +#ifdef PLATFORM_OS_XP
25209 _irqL oldirql;
25210 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25211 -
25212 +#endif
25213 u32 ratevalue;
25214 u8 datarates[NumRates];
25215 int i;
25216 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25217 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
25218
25219 _func_enter_;
25220
25221 @@ -1562,7 +1645,7 @@ _func_enter_;
25222
25223 _irqlevel_changed_(&oldirql, LOWER);
25224
25225 - if (rtw_setbasicrate_cmd(Adapter, datarates) != _SUCCESS)
25226 + if (rtw_setbasicrate_cmd(padapter, datarates) != _SUCCESS)
25227 status = NDIS_STATUS_NOT_ACCEPTED;
25228
25229 _irqlevel_changed_(&oldirql, RAISE);
25230 @@ -1573,6 +1656,9 @@ _func_enter_;
25231 _func_exit_;
25232
25233 return status;
25234 +#else
25235 + return 0;
25236 +#endif
25237 }
25238 //------------------------------------------------------------------------------
25239 NDIS_STATUS oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
25240 @@ -1646,7 +1732,9 @@ NDIS_STATUS oid_rt_pro_h2c_set_rate_table_hdl(struct oid_par_priv *poid_par_priv
25241 #if 0
25242 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25243
25244 +#ifdef PLATFORM_OS_XP
25245 _irqL oldirql;
25246 +#endif
25247 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25248
25249 struct setratable_parm *prate_table;
25250 @@ -1833,13 +1921,15 @@ NDIS_STATUS oid_rt_pro_encryption_ctrl_hdl(struct oid_par_priv *poid_par_priv)
25251 NDIS_STATUS oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv)
25252 {
25253 #if 0
25254 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25255 + PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25256
25257 - _irqL oldirql;
25258 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25259 +#ifdef PLATFORM_OS_XP
25260 + _irqL oldirql;
25261 +#endif
25262 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25263
25264 - struct sta_info *psta = NULL;
25265 - UCHAR *macaddr;
25266 + struct sta_info *psta = NULL;
25267 + UCHAR *macaddr;
25268
25269
25270 if (poid_par_priv->type_of_oid != SET_OID)
25271 @@ -1881,13 +1971,15 @@ NDIS_STATUS oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv)
25272 NDIS_STATUS oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv)
25273 {
25274 #if 0
25275 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25276 + PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25277
25278 - _irqL irqL;
25279 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25280 +#ifdef PLATFORM_OS_XP
25281 + _irqL oldirql;
25282 +#endif
25283 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25284
25285 - struct sta_info *psta = NULL;
25286 - UCHAR *macaddr;
25287 + struct sta_info *psta = NULL;
25288 + UCHAR *macaddr;
25289
25290
25291 if (poid_par_priv->type_of_oid != SET_OID)
25292 @@ -1914,17 +2006,17 @@ NDIS_STATUS oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv)
25293 #endif
25294 }
25295 //------------------------------------------------------------------------------
25296 +#if 0
25297 #include <sdio_osintf.h>
25298 -u32 mp_query_drv_var(_adapter *padapter, u8 offset, u32 var)
25299 +static u32 mp_query_drv_var(_adapter *padapter, u8 offset, u32 var)
25300 {
25301 -#if 0
25302 #ifdef CONFIG_SDIO_HCI
25303
25304 if (offset == 1) {
25305 u16 tmp_blk_num;
25306 tmp_blk_num = rtw_read16(padapter, SDIO_RX0_RDYBLK_NUM);
25307 - 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));
25308 - if (padapter->dvobjpriv.rxblknum != tmp_blk_num) {
25309 + 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));
25310 + if (adapter_to_dvobj(padapter)->rxblknum != tmp_blk_num) {
25311 RT_TRACE(_module_mp_,_drv_err_, ("Query Information, mp_query_drv_var call recv rx\n"));
25312 // sd_recv_rxfifo(padapter);
25313 }
25314 @@ -1973,37 +2065,37 @@ u32 mp_query_drv_var(_adapter *padapter, u8 offset, u32 var)
25315 else if(offset >110 &&offset <116){
25316 if(115==offset){
25317 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",\
25318 - offset,padapter->dvobjpriv.tx_block_mode,padapter->dvobjpriv.rx_block_mode));
25319 + offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
25320 }
25321 else {
25322 switch(offset){
25323 case 111:
25324 - padapter->dvobjpriv.tx_block_mode=1;
25325 - padapter->dvobjpriv.rx_block_mode=1;
25326 + adapter_to_dvobj(padapter)->tx_block_mode=1;
25327 + adapter_to_dvobj(padapter)->rx_block_mode=1;
25328 RT_TRACE(_module_mp_, _drv_emerg_, \
25329 (" 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",\
25330 - offset,padapter->dvobjpriv.tx_block_mode,padapter->dvobjpriv.rx_block_mode));
25331 + offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
25332 break;
25333 case 112:
25334 - padapter->dvobjpriv.tx_block_mode=1;
25335 - padapter->dvobjpriv.rx_block_mode=0;
25336 + adapter_to_dvobj(padapter)->tx_block_mode=1;
25337 + adapter_to_dvobj(padapter)->rx_block_mode=0;
25338 RT_TRACE(_module_mp_, _drv_emerg_, \
25339 (" 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",\
25340 - offset,padapter->dvobjpriv.tx_block_mode,padapter->dvobjpriv.rx_block_mode));
25341 + offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
25342 break;
25343 case 113:
25344 - padapter->dvobjpriv.tx_block_mode=0;
25345 - padapter->dvobjpriv.rx_block_mode=1;
25346 + adapter_to_dvobj(padapter)->tx_block_mode=0;
25347 + adapter_to_dvobj(padapter)->rx_block_mode=1;
25348 RT_TRACE(_module_mp_, _drv_emerg_, \
25349 (" 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",\
25350 - offset,padapter->dvobjpriv.tx_block_mode,padapter->dvobjpriv.rx_block_mode));
25351 + offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
25352 break;
25353 case 114:
25354 - padapter->dvobjpriv.tx_block_mode=0;
25355 - padapter->dvobjpriv.rx_block_mode=0;
25356 + adapter_to_dvobj(padapter)->tx_block_mode=0;
25357 + adapter_to_dvobj(padapter)->rx_block_mode=0;
25358 RT_TRACE(_module_mp_, _drv_emerg_, \
25359 (" 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",\
25360 - offset,padapter->dvobjpriv.tx_block_mode,padapter->dvobjpriv.rx_block_mode));
25361 + offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
25362 break;
25363 default :
25364 break;
25365 @@ -2088,20 +2180,20 @@ u32 mp_query_drv_var(_adapter *padapter, u8 offset, u32 var)
25366 #endif
25367
25368 return var;
25369 -#else
25370 - return 0;
25371 -#endif
25372 }
25373 +#endif
25374
25375 NDIS_STATUS oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv)
25376 {
25377 #if 0
25378 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25379 + PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25380
25381 - _irqL oldirql;
25382 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25383 +#ifdef PLATFORM_OS_XP
25384 + _irqL oldirql;
25385 +#endif
25386 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25387
25388 - DR_VARIABLE_STRUCT *pdrv_var;
25389 + DR_VARIABLE_STRUCT *pdrv_var;
25390
25391
25392 if (poid_par_priv->type_of_oid != QUERY_OID)
25393 @@ -2133,12 +2225,12 @@ NDIS_STATUS oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv)
25394 //------------------------------------------------------------------------------
25395 NDIS_STATUS oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
25396 {
25397 +#if 0
25398 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25399
25400 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25401
25402 RT_TRACE(_module_mp_, _drv_err_, ("oid_rt_pro_rx_packet_type_hdl...................\n"));
25403 -#if 0
25404
25405 if (poid_par_priv->information_buf_len < sizeof (UCHAR)) {
25406 status = NDIS_STATUS_INVALID_LENGTH;
25407 @@ -2178,7 +2270,9 @@ NDIS_STATUS oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
25408 //------------------------------------------------------------------------------
25409 NDIS_STATUS oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv)
25410 {
25411 +#ifdef PLATFORM_OS_XP
25412 _irqL oldirql;
25413 +#endif
25414 PEFUSE_ACCESS_STRUCT pefuse;
25415 u8 *data;
25416 u16 addr = 0, cnts = 0, max_available_size = 0;
25417 @@ -2224,8 +2318,9 @@ _func_exit_;
25418 //------------------------------------------------------------------------------
25419 NDIS_STATUS oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv)
25420 {
25421 -
25422 +#ifdef PLATFORM_OS_XP
25423 _irqL oldirql;
25424 +#endif
25425 PEFUSE_ACCESS_STRUCT pefuse;
25426 u8 *data;
25427 u16 addr = 0, cnts = 0, max_available_size = 0;
25428 @@ -2266,9 +2361,10 @@ _func_exit_;
25429 //------------------------------------------------------------------------------
25430 NDIS_STATUS oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv)
25431 {
25432 +#ifdef PLATFORM_OS_XP
25433 _irqL oldirql;
25434 +#endif
25435 PPGPKT_STRUCT ppgpkt;
25436 - u8 tmpidx;
25437 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25438 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25439
25440 @@ -2322,7 +2418,9 @@ _func_exit_;
25441 //------------------------------------------------------------------------------
25442 NDIS_STATUS oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv)
25443 {
25444 +#ifdef PLATFORM_OS_XP
25445 _irqL oldirql;
25446 +#endif
25447 u16 size;
25448 u8 ret;
25449 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25450 @@ -2354,7 +2452,6 @@ NDIS_STATUS oid_rt_get_efuse_max_size_hdl(struct oid_par_priv *poid_par_priv)
25451 {
25452 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25453 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25454 - u16 max_size;
25455
25456 _func_enter_;
25457
25458 @@ -2398,7 +2495,9 @@ _func_exit_;
25459 //------------------------------------------------------------------------------
25460 NDIS_STATUS oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv)
25461 {
25462 +#ifdef PLATFORM_OS_XP
25463 _irqL oldirql;
25464 +#endif
25465 u8 *data;
25466 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25467 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25468 @@ -2461,7 +2560,9 @@ NDIS_STATUS oid_rt_set_crystal_cap_hdl(struct oid_par_priv *poid_par_priv)
25469 #if 0
25470 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25471
25472 +#ifdef PLATFORM_OS_XP
25473 _irqL oldirql;
25474 +#endif
25475
25476 u32 crystal_cap = 0;
25477
25478 @@ -2491,11 +2592,13 @@ _func_exit_;
25479
25480 NDIS_STATUS oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
25481 {
25482 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25483 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25484 +#ifdef PLATFORM_OS_XP
25485 _irqL oldirql;
25486 +#endif
25487 u8 rx_pkt_type;
25488 - u32 rcr_val32;
25489 +// u32 rcr_val32;
25490 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25491 +// PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
25492
25493 _func_enter_;
25494
25495 @@ -2528,9 +2631,9 @@ _func_enter_;
25496 else{
25497 rcr_val8 &= ~(RCR_AAP|RCR_APM|RCR_AM|RCR_AB|RCR_ACRC32);
25498 }
25499 - rtw_write8(Adapter, 0x10250048,rcr_val8);
25500 + rtw_write8(padapter, 0x10250048,rcr_val8);
25501 #else
25502 - rcr_val32 = rtw_read32(Adapter, RCR);//RCR = 0x10250048
25503 + rcr_val32 = rtw_read32(padapter, RCR);//RCR = 0x10250048
25504 rcr_val32 &= ~(RCR_CBSSID|RCR_AB|RCR_AM|RCR_APM|RCR_AAP);
25505 #if 0
25506 if(rx_pkt_type == RX_PKT_BROADCAST){
25507 @@ -2565,12 +2668,12 @@ _func_enter_;
25508 }
25509
25510 if (rx_pkt_type == RX_PKT_DEST_ADDR) {
25511 - Adapter->mppriv.check_mp_pkt = 1;
25512 + padapter->mppriv.check_mp_pkt = 1;
25513 } else {
25514 - Adapter->mppriv.check_mp_pkt = 0;
25515 + padapter->mppriv.check_mp_pkt = 0;
25516 }
25517 #endif
25518 - rtw_write32(Adapter, RCR, rcr_val32);
25519 + rtw_write32(padapter, RCR, rcr_val32);
25520
25521 #endif
25522 _irqlevel_changed_(&oldirql, RAISE);
25523 @@ -2585,7 +2688,9 @@ NDIS_STATUS oid_rt_pro_set_tx_agc_offset_hdl(struct oid_par_priv *poid_par_priv)
25524 #if 0
25525 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25526
25527 +#ifdef PLATFORM_OS_XP
25528 _irqL oldirql;
25529 +#endif
25530 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25531
25532 u32 txagc;
25533 @@ -2701,7 +2806,7 @@ unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
25534 struct mp_xmit_packet *pmp_xmitpkt = (struct mp_xmit_packet*)param;
25535 u8 addr3[] = {0x02, 0xE0, 0x4C, 0x87, 0x66, 0x55};
25536
25537 -// DBG_8192C("+mp_ioctl_xmit_packet_hdl\n");
25538 +// DBG_871X("+mp_ioctl_xmit_packet_hdl\n");
25539
25540 pxframe = alloc_mp_xmitframe(&padapter->mppriv);
25541 if (pxframe == NULL)
25542 @@ -2715,10 +2820,10 @@ unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
25543 pmp_pkt = (unsigned char*)pmp_xmitpkt->mem;
25544 pethhdr = (struct ethhdr *)pmp_pkt;
25545
25546 - //DBG_8192C("payload_len=%d, pkt_mem=0x%x\n", pmp_xmitpkt->len, (void*)pmp_xmitpkt->mem);
25547 + //DBG_871X("payload_len=%d, pkt_mem=0x%x\n", pmp_xmitpkt->len, (void*)pmp_xmitpkt->mem);
25548
25549 - //DBG_8192C("pxframe=0x%x\n", (void*)pxframe);
25550 - //DBG_8192C("pxframe->mem=0x%x\n", (void*)pxframe->mem);
25551 + //DBG_871X("pxframe=0x%x\n", (void*)pxframe);
25552 + //DBG_871X("pxframe->mem=0x%x\n", (void*)pxframe->mem);
25553
25554 //update attribute
25555 pattrib = &pxframe->attrib;
25556 @@ -2771,10 +2876,16 @@ unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
25557 //------------------------------------------------------------------------------
25558 NDIS_STATUS oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv)
25559 {
25560 - PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25561 - NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25562 +#ifdef PLATFORM_OS_XP
25563 _irqL oldirql;
25564 +#endif
25565 u8 bpwrup;
25566 + NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25567 +#ifdef PLATFORM_LINUX
25568 +#ifdef CONFIG_SDIO_HCI
25569 + PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
25570 +#endif
25571 +#endif
25572
25573 _func_enter_;
25574
25575 @@ -2792,7 +2903,7 @@ _func_enter_;
25576 //CALL the power_down function
25577 #ifdef PLATFORM_LINUX
25578 #ifdef CONFIG_SDIO_HCI
25579 - dev_power_down(Adapter,bpwrup);
25580 + dev_power_down(padapter,bpwrup);
25581 #endif
25582 #endif
25583 _irqlevel_changed_(&oldirql, RAISE);
25584 @@ -2810,7 +2921,9 @@ NDIS_STATUS oid_rt_get_power_mode_hdl(struct oid_par_priv *poid_par_priv)
25585 #if 0
25586 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
25587 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
25588 +//#ifdef PLATFORM_OS_XP
25589 // _irqL oldirql;
25590 +//#endif
25591
25592 _func_enter_;
25593
25594 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c b/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c
25595 index 1df9d62..66c5f96 100644
25596 --- a/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c
25597 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c
25598 @@ -25,31 +25,24 @@
25599
25600 #ifdef CONFIG_P2P
25601
25602 -int is_any_client_associated( _adapter *padapter )
25603 +int rtw_p2p_is_channel_list_ok( u8 desired_ch, u8* ch_list, u8 ch_cnt )
25604 {
25605 - _irqL irqL;
25606 - _list *phead, *plist;
25607 - int intFound = _FALSE;
25608 -
25609 - struct sta_priv *pstapriv = &padapter->stapriv;
25610 + int found = 0, i = 0;
25611
25612 - _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
25613 - phead = &pstapriv->asoc_list;
25614 - plist = get_next(phead);
25615 -
25616 - if ( rtw_end_of_queue_search(phead, plist) == _TRUE )
25617 + for( i = 0; i < ch_cnt; i++ )
25618 {
25619 - intFound = _FALSE;
25620 - }
25621 - else
25622 - {
25623 - intFound = _TRUE;
25624 + if ( ch_list[ i ] == desired_ch )
25625 + {
25626 + found = 1;
25627 + break;
25628 + }
25629 }
25630 -
25631 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
25632 + return( found );
25633 +}
25634
25635 - return( intFound );
25636 -
25637 +int is_any_client_associated(_adapter *padapter)
25638 +{
25639 + return padapter->stapriv.asoc_list_cnt ? _TRUE : _FALSE;
25640 }
25641
25642 static u32 go_add_group_info_attr(struct wifidirect_info *pwdinfo, u8 *pbuf)
25643 @@ -544,7 +537,7 @@ u32 build_beacon_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25644 u32 len=0, wfdielen = 0;
25645 _adapter *padapter = pwdinfo->padapter;
25646 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
25647 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
25648 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
25649
25650 // WFD OUI
25651 wfdielen = 0;
25652 @@ -572,24 +565,24 @@ u32 build_beacon_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25653 // Value1:
25654 // WFD device information
25655
25656 - if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
25657 + if ( P2P_ROLE_GO == pwdinfo->role )
25658 {
25659 if ( is_any_client_associated( pwdinfo->padapter ) )
25660 {
25661 - // WFD primary sink + WiFi Direct mode
25662 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
25663 + // WFD primary sink + WiFi Direct mode + WSD (WFD Service Discovery)
25664 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD );
25665 }
25666 else
25667 {
25668 - // WFD primary sink + available for WFD session + WiFi Direct mode
25669 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
25670 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD (WFD Service Discovery)
25671 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
25672 }
25673
25674 }
25675 else
25676 {
25677 - // WFD primary sink + available for WFD session + WiFi Direct mode
25678 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
25679 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
25680 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
25681 }
25682
25683 wfdielen += 2;
25684 @@ -634,13 +627,20 @@ u32 build_beacon_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25685
25686 // Length:
25687 // Note: In the WFD specification, the size of length field is 2.
25688 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
25689 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
25690 wfdielen += 2;
25691
25692 // Value:
25693 // Coupled Sink Status bitmap
25694 // Not coupled/available for Coupling
25695 wfdie[ wfdielen++ ] = 0;
25696 + // MAC Addr.
25697 + wfdie[ wfdielen++ ] = 0;
25698 + wfdie[ wfdielen++ ] = 0;
25699 + wfdie[ wfdielen++ ] = 0;
25700 + wfdie[ wfdielen++ ] = 0;
25701 + wfdie[ wfdielen++ ] = 0;
25702 + wfdie[ wfdielen++ ] = 0;
25703
25704 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
25705
25706 @@ -654,7 +654,7 @@ u32 build_probe_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25707 u32 len=0, wfdielen = 0;
25708 _adapter *padapter = pwdinfo->padapter;
25709 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
25710 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
25711 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
25712
25713 // WFD OUI
25714 wfdielen = 0;
25715 @@ -681,8 +681,23 @@ u32 build_probe_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25716
25717 // Value1:
25718 // WFD device information
25719 - // WFD primary sink + available for WFD session + WiFi Direct mode
25720 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
25721 +
25722 + if ( 1 == pwdinfo->wfd_tdls_enable )
25723 + {
25724 + // WFD primary sink + available for WFD session + WiFi TDLS mode + WSC ( WFD Service Discovery )
25725 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type |
25726 + WFD_DEVINFO_SESSION_AVAIL |
25727 + WFD_DEVINFO_WSD |
25728 + WFD_DEVINFO_PC_TDLS );
25729 + }
25730 + else
25731 + {
25732 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSC ( WFD Service Discovery )
25733 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type |
25734 + WFD_DEVINFO_SESSION_AVAIL |
25735 + WFD_DEVINFO_WSD );
25736 + }
25737 +
25738 wfdielen += 2;
25739
25740 // Value2:
25741 @@ -725,13 +740,20 @@ u32 build_probe_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25742
25743 // Length:
25744 // Note: In the WFD specification, the size of length field is 2.
25745 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
25746 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
25747 wfdielen += 2;
25748
25749 // Value:
25750 // Coupled Sink Status bitmap
25751 // Not coupled/available for Coupling
25752 wfdie[ wfdielen++ ] = 0;
25753 + // MAC Addr.
25754 + wfdie[ wfdielen++ ] = 0;
25755 + wfdie[ wfdielen++ ] = 0;
25756 + wfdie[ wfdielen++ ] = 0;
25757 + wfdie[ wfdielen++ ] = 0;
25758 + wfdie[ wfdielen++ ] = 0;
25759 + wfdie[ wfdielen++ ] = 0;
25760
25761 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
25762
25763 @@ -739,13 +761,13 @@ u32 build_probe_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25764
25765 }
25766
25767 -u32 build_probe_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25768 +u32 build_probe_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 tunneled)
25769 {
25770 u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
25771 u32 len=0, wfdielen = 0;
25772 _adapter *padapter = pwdinfo->padapter;
25773 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
25774 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
25775 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
25776
25777 // WFD OUI
25778 wfdielen = 0;
25779 @@ -773,25 +795,65 @@ u32 build_probe_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25780
25781 // Value1:
25782 // WFD device information
25783 + // WFD primary sink + available for WFD session + WiFi Direct mode
25784
25785 - if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
25786 + if ( _TRUE == pwdinfo->session_available )
25787 {
25788 - if ( is_any_client_associated( pwdinfo->padapter ) )
25789 + if ( P2P_ROLE_GO == pwdinfo->role )
25790 {
25791 - // WFD primary sink + WiFi Direct mode
25792 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
25793 + if ( is_any_client_associated( pwdinfo->padapter ) )
25794 + {
25795 + if ( pwdinfo->wfd_tdls_enable )
25796 + {
25797 + // TDLS mode + WSD ( WFD Service Discovery )
25798 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD | WFD_DEVINFO_PC_TDLS | WFD_DEVINFO_HDCP_SUPPORT);
25799 + }
25800 + else
25801 + {
25802 + // WiFi Direct mode + WSD ( WFD Service Discovery )
25803 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD | WFD_DEVINFO_HDCP_SUPPORT);
25804 + }
25805 + }
25806 + else
25807 + {
25808 + if ( pwdinfo->wfd_tdls_enable )
25809 + {
25810 + // available for WFD session + TDLS mode + WSD ( WFD Service Discovery )
25811 + 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);
25812 + }
25813 + else
25814 + {
25815 + // available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
25816 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD | WFD_DEVINFO_HDCP_SUPPORT);
25817 + }
25818 + }
25819 }
25820 else
25821 {
25822 - // WFD primary sink + available for WFD session + WiFi Direct mode
25823 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
25824 - }
25825 + if ( pwdinfo->wfd_tdls_enable )
25826 + {
25827 + // available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
25828 + 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);
25829 + }
25830 + else
25831 + {
25832
25833 + // available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
25834 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD | WFD_DEVINFO_HDCP_SUPPORT);
25835 + }
25836 + }
25837 }
25838 else
25839 {
25840 - // WFD primary sink + available for WFD session + WiFi Direct mode
25841 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
25842 + if ( pwdinfo->wfd_tdls_enable )
25843 + {
25844 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD |WFD_DEVINFO_PC_TDLS | WFD_DEVINFO_HDCP_SUPPORT);
25845 + }
25846 + else
25847 + {
25848 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD | WFD_DEVINFO_HDCP_SUPPORT);
25849 + }
25850 +
25851 }
25852
25853 wfdielen += 2;
25854 @@ -836,15 +898,22 @@ u32 build_probe_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25855
25856 // Length:
25857 // Note: In the WFD specification, the size of length field is 2.
25858 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
25859 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
25860 wfdielen += 2;
25861
25862 // Value:
25863 // Coupled Sink Status bitmap
25864 // Not coupled/available for Coupling
25865 wfdie[ wfdielen++ ] = 0;
25866 + // MAC Addr.
25867 + wfdie[ wfdielen++ ] = 0;
25868 + wfdie[ wfdielen++ ] = 0;
25869 + wfdie[ wfdielen++ ] = 0;
25870 + wfdie[ wfdielen++ ] = 0;
25871 + wfdie[ wfdielen++ ] = 0;
25872 + wfdie[ wfdielen++ ] = 0;
25873
25874 - if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) )
25875 + if ( P2P_ROLE_GO == pwdinfo->role )
25876 {
25877 // WFD Session Information ATTR
25878 // Type:
25879 @@ -858,6 +927,28 @@ u32 build_probe_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25880 // Todo: to add the list of WFD device info descriptor in WFD group.
25881
25882 }
25883 +#ifdef CONFIG_CONCURRENT_MODE
25884 +#ifdef CONFIG_TDLS
25885 + if ( ( tunneled == 0 ) && ( padapter->pbuddy_adapter->wdinfo.wfd_tdls_enable == 1 ) )
25886 + {
25887 + // Alternative MAC Address ATTR
25888 + // Type:
25889 + wfdie[ wfdielen++ ] = WFD_ATTR_ALTER_MAC;
25890 +
25891 + // Length:
25892 + // Note: In the WFD specification, the size of length field is 2.
25893 + RTW_PUT_BE16(wfdie + wfdielen, ETH_ALEN );
25894 + wfdielen += 2;
25895 +
25896 + // Value:
25897 + // Alternative MAC Address
25898 + _rtw_memcpy( wfdie + wfdielen, &padapter->pbuddy_adapter->eeprompriv.mac_addr[ 0 ], ETH_ALEN );
25899 + // This mac address is used to make the WFD session when TDLS is enable.
25900 +
25901 + wfdielen += ETH_ALEN;
25902 + }
25903 +#endif // CONFIG_TDLS
25904 +#endif // CONFIG_CONCURRENT_MODE
25905
25906 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
25907
25908 @@ -881,7 +972,7 @@ u32 build_assoc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25909
25910 padapter = pwdinfo->padapter;
25911 pmlmepriv = &padapter->mlmepriv;
25912 - pwfd_info = &padapter->wdinfo.wfd_info;
25913 + pwfd_info = padapter->wdinfo.wfd_info;
25914
25915 wfdielen = 0;
25916 wfdie[ wfdielen++ ] = 0x50;
25917 @@ -907,8 +998,8 @@ u32 build_assoc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25918
25919 // Value1:
25920 // WFD device information
25921 - // WFD primary sink + available for WFD session + WiFi Direct mode
25922 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
25923 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
25924 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
25925 wfdielen += 2;
25926
25927 // Value2:
25928 @@ -951,13 +1042,20 @@ u32 build_assoc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25929
25930 // Length:
25931 // Note: In the WFD specification, the size of length field is 2.
25932 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
25933 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
25934 wfdielen += 2;
25935
25936 // Value:
25937 // Coupled Sink Status bitmap
25938 // Not coupled/available for Coupling
25939 wfdie[ wfdielen++ ] = 0;
25940 + // MAC Addr.
25941 + wfdie[ wfdielen++ ] = 0;
25942 + wfdie[ wfdielen++ ] = 0;
25943 + wfdie[ wfdielen++ ] = 0;
25944 + wfdie[ wfdielen++ ] = 0;
25945 + wfdie[ wfdielen++ ] = 0;
25946 + wfdie[ wfdielen++ ] = 0;
25947
25948 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
25949
25950 @@ -971,7 +1069,7 @@ u32 build_assoc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25951 u32 len=0, wfdielen = 0;
25952 _adapter *padapter = pwdinfo->padapter;
25953 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
25954 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
25955 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
25956
25957 // WFD OUI
25958 wfdielen = 0;
25959 @@ -998,8 +1096,8 @@ u32 build_assoc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25960
25961 // Value1:
25962 // WFD device information
25963 - // WFD primary sink + available for WFD session + WiFi Direct mode
25964 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
25965 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
25966 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
25967 wfdielen += 2;
25968
25969 // Value2:
25970 @@ -1042,13 +1140,20 @@ u32 build_assoc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25971
25972 // Length:
25973 // Note: In the WFD specification, the size of length field is 2.
25974 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
25975 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
25976 wfdielen += 2;
25977
25978 // Value:
25979 // Coupled Sink Status bitmap
25980 // Not coupled/available for Coupling
25981 wfdie[ wfdielen++ ] = 0;
25982 + // MAC Addr.
25983 + wfdie[ wfdielen++ ] = 0;
25984 + wfdie[ wfdielen++ ] = 0;
25985 + wfdie[ wfdielen++ ] = 0;
25986 + wfdie[ wfdielen++ ] = 0;
25987 + wfdie[ wfdielen++ ] = 0;
25988 + wfdie[ wfdielen++ ] = 0;
25989
25990 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
25991
25992 @@ -1062,7 +1167,7 @@ u32 build_nego_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
25993 u32 len=0, wfdielen = 0;
25994 _adapter *padapter = pwdinfo->padapter;
25995 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
25996 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
25997 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
25998
25999 // WFD OUI
26000 wfdielen = 0;
26001 @@ -1089,8 +1194,8 @@ u32 build_nego_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26002
26003 // Value1:
26004 // WFD device information
26005 - // WFD primary sink + WiFi Direct mode
26006 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26007 + // WFD primary sink + WiFi Direct mode + WSD ( WFD Service Discovery ) + WFD Session Available
26008 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD | WFD_DEVINFO_SESSION_AVAIL);
26009 wfdielen += 2;
26010
26011 // Value2:
26012 @@ -1133,13 +1238,20 @@ u32 build_nego_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26013
26014 // Length:
26015 // Note: In the WFD specification, the size of length field is 2.
26016 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26017 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26018 wfdielen += 2;
26019
26020 // Value:
26021 // Coupled Sink Status bitmap
26022 // Not coupled/available for Coupling
26023 wfdie[ wfdielen++ ] = 0;
26024 + // MAC Addr.
26025 + wfdie[ wfdielen++ ] = 0;
26026 + wfdie[ wfdielen++ ] = 0;
26027 + wfdie[ wfdielen++ ] = 0;
26028 + wfdie[ wfdielen++ ] = 0;
26029 + wfdie[ wfdielen++ ] = 0;
26030 + wfdie[ wfdielen++ ] = 0;
26031
26032 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26033
26034 @@ -1153,7 +1265,7 @@ u32 build_nego_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26035 u32 len=0, wfdielen = 0;
26036 _adapter *padapter = pwdinfo->padapter;
26037 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26038 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26039 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26040
26041 // WFD OUI
26042 wfdielen = 0;
26043 @@ -1180,8 +1292,8 @@ u32 build_nego_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26044
26045 // Value1:
26046 // WFD device information
26047 - // WFD primary sink + WiFi Direct mode
26048 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26049 + // WFD primary sink + WiFi Direct mode + WSD ( WFD Service Discovery ) + WFD Session Available
26050 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD | WFD_DEVINFO_SESSION_AVAIL);
26051 wfdielen += 2;
26052
26053 // Value2:
26054 @@ -1224,13 +1336,20 @@ u32 build_nego_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26055
26056 // Length:
26057 // Note: In the WFD specification, the size of length field is 2.
26058 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26059 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26060 wfdielen += 2;
26061
26062 // Value:
26063 // Coupled Sink Status bitmap
26064 // Not coupled/available for Coupling
26065 wfdie[ wfdielen++ ] = 0;
26066 + // MAC Addr.
26067 + wfdie[ wfdielen++ ] = 0;
26068 + wfdie[ wfdielen++ ] = 0;
26069 + wfdie[ wfdielen++ ] = 0;
26070 + wfdie[ wfdielen++ ] = 0;
26071 + wfdie[ wfdielen++ ] = 0;
26072 + wfdie[ wfdielen++ ] = 0;
26073
26074
26075 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26076 @@ -1245,7 +1364,7 @@ u32 build_nego_confirm_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26077 u32 len=0, wfdielen = 0;
26078 _adapter *padapter = pwdinfo->padapter;
26079 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26080 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26081 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26082
26083 // WFD OUI
26084 wfdielen = 0;
26085 @@ -1272,8 +1391,8 @@ u32 build_nego_confirm_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26086
26087 // Value1:
26088 // WFD device information
26089 - // WFD primary sink + WiFi Direct mode
26090 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26091 + // WFD primary sink + WiFi Direct mode + WSD ( WFD Service Discovery ) + WFD Session Available
26092 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_WSD | WFD_DEVINFO_SESSION_AVAIL);
26093 wfdielen += 2;
26094
26095 // Value2:
26096 @@ -1316,13 +1435,20 @@ u32 build_nego_confirm_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26097
26098 // Length:
26099 // Note: In the WFD specification, the size of length field is 2.
26100 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26101 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26102 wfdielen += 2;
26103
26104 // Value:
26105 // Coupled Sink Status bitmap
26106 // Not coupled/available for Coupling
26107 wfdie[ wfdielen++ ] = 0;
26108 + // MAC Addr.
26109 + wfdie[ wfdielen++ ] = 0;
26110 + wfdie[ wfdielen++ ] = 0;
26111 + wfdie[ wfdielen++ ] = 0;
26112 + wfdie[ wfdielen++ ] = 0;
26113 + wfdie[ wfdielen++ ] = 0;
26114 + wfdie[ wfdielen++ ] = 0;
26115
26116
26117 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26118 @@ -1331,13 +1457,13 @@ u32 build_nego_confirm_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26119
26120 }
26121
26122 -u32 build_provdisc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26123 +u32 build_invitation_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26124 {
26125 u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
26126 u32 len=0, wfdielen = 0;
26127 _adapter *padapter = pwdinfo->padapter;
26128 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26129 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26130 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26131
26132 // WFD OUI
26133 wfdielen = 0;
26134 @@ -1364,8 +1490,8 @@ u32 build_provdisc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26135
26136 // Value1:
26137 // WFD device information
26138 - // WFD primary sink + available for WFD session + WiFi Direct mode
26139 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
26140 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
26141 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
26142 wfdielen += 2;
26143
26144 // Value2:
26145 @@ -1408,14 +1534,35 @@ u32 build_provdisc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26146
26147 // Length:
26148 // Note: In the WFD specification, the size of length field is 2.
26149 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26150 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26151 wfdielen += 2;
26152
26153 // Value:
26154 // Coupled Sink Status bitmap
26155 // Not coupled/available for Coupling
26156 wfdie[ wfdielen++ ] = 0;
26157 + // MAC Addr.
26158 + wfdie[ wfdielen++ ] = 0;
26159 + wfdie[ wfdielen++ ] = 0;
26160 + wfdie[ wfdielen++ ] = 0;
26161 + wfdie[ wfdielen++ ] = 0;
26162 + wfdie[ wfdielen++ ] = 0;
26163 + wfdie[ wfdielen++ ] = 0;
26164 +
26165 + if ( P2P_ROLE_GO == pwdinfo->role )
26166 + {
26167 + // WFD Session Information ATTR
26168 + // Type:
26169 + wfdie[ wfdielen++ ] = WFD_ATTR_SESSION_INFO;
26170
26171 + // Length:
26172 + // Note: In the WFD specification, the size of length field is 2.
26173 + RTW_PUT_BE16(wfdie + wfdielen, 0x0000);
26174 + wfdielen += 2;
26175 +
26176 + // Todo: to add the list of WFD device info descriptor in WFD group.
26177 +
26178 + }
26179
26180 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26181
26182 @@ -1423,13 +1570,13 @@ u32 build_provdisc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26183
26184 }
26185
26186 -u32 build_provdisc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26187 +u32 build_invitation_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26188 {
26189 u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
26190 u32 len=0, wfdielen = 0;
26191 _adapter *padapter = pwdinfo->padapter;
26192 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26193 - struct wifi_display_info* pwfd_info = &padapter->wdinfo.wfd_info;
26194 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26195
26196 // WFD OUI
26197 wfdielen = 0;
26198 @@ -1439,7 +1586,7 @@ u32 build_provdisc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26199 wfdie[ wfdielen++ ] = 0x0A; // WFA WFD v1.0
26200
26201 // Commented by Albert 20110825
26202 - // According to the WFD Specification, the provision discovery response frame should contain 3 WFD attributes
26203 + // According to the WFD Specification, the provision discovery request frame should contain 3 WFD attributes
26204 // 1. WFD Device Information
26205 // 2. Associated BSSID ( Optional )
26206 // 3. Local IP Adress ( Optional )
26207 @@ -1456,8 +1603,8 @@ u32 build_provdisc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26208
26209 // Value1:
26210 // WFD device information
26211 - // WFD primary sink + available for WFD session + WiFi Direct mode
26212 - RTW_PUT_BE16(wfdie + wfdielen, 0x0011);
26213 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
26214 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
26215 wfdielen += 2;
26216
26217 // Value2:
26218 @@ -1500,13 +1647,35 @@ u32 build_provdisc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26219
26220 // Length:
26221 // Note: In the WFD specification, the size of length field is 2.
26222 - RTW_PUT_BE16(wfdie + wfdielen, 0x0001);
26223 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26224 wfdielen += 2;
26225
26226 // Value:
26227 // Coupled Sink Status bitmap
26228 // Not coupled/available for Coupling
26229 wfdie[ wfdielen++ ] = 0;
26230 + // MAC Addr.
26231 + wfdie[ wfdielen++ ] = 0;
26232 + wfdie[ wfdielen++ ] = 0;
26233 + wfdie[ wfdielen++ ] = 0;
26234 + wfdie[ wfdielen++ ] = 0;
26235 + wfdie[ wfdielen++ ] = 0;
26236 + wfdie[ wfdielen++ ] = 0;
26237 +
26238 + if ( P2P_ROLE_GO == pwdinfo->role )
26239 + {
26240 + // WFD Session Information ATTR
26241 + // Type:
26242 + wfdie[ wfdielen++ ] = WFD_ATTR_SESSION_INFO;
26243 +
26244 + // Length:
26245 + // Note: In the WFD specification, the size of length field is 2.
26246 + RTW_PUT_BE16(wfdie + wfdielen, 0x0000);
26247 + wfdielen += 2;
26248 +
26249 + // Todo: to add the list of WFD device info descriptor in WFD group.
26250 +
26251 + }
26252
26253 pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26254
26255 @@ -1514,68 +1683,280 @@ u32 build_provdisc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26256
26257 }
26258
26259 +u32 build_provdisc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26260 +{
26261 + u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
26262 + u32 len=0, wfdielen = 0;
26263 + _adapter *padapter = pwdinfo->padapter;
26264 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26265 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26266
26267 -#endif //CONFIG_WFD
26268 + // WFD OUI
26269 + wfdielen = 0;
26270 + wfdie[ wfdielen++ ] = 0x50;
26271 + wfdie[ wfdielen++ ] = 0x6F;
26272 + wfdie[ wfdielen++ ] = 0x9A;
26273 + wfdie[ wfdielen++ ] = 0x0A; // WFA WFD v1.0
26274
26275 -u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26276 -{
26277 - u8 p2pie[ MAX_P2P_IE_LEN] = { 0x00 };
26278 - u32 len=0, p2pielen = 0;
26279 + // Commented by Albert 20110825
26280 + // According to the WFD Specification, the provision discovery request frame should contain 3 WFD attributes
26281 + // 1. WFD Device Information
26282 + // 2. Associated BSSID ( Optional )
26283 + // 3. Local IP Adress ( Optional )
26284
26285 - // P2P OUI
26286 - p2pielen = 0;
26287 - p2pie[ p2pielen++ ] = 0x50;
26288 - p2pie[ p2pielen++ ] = 0x6F;
26289 - p2pie[ p2pielen++ ] = 0x9A;
26290 - p2pie[ p2pielen++ ] = 0x09; // WFA P2P v1.0
26291
26292 - // Commented by Albert 20100907
26293 - // According to the P2P Specification, the probe response frame should contain 5 P2P attributes
26294 - // 1. P2P Capability
26295 - // 2. Extended Listen Timing
26296 - // 3. Notice of Absence ( NOA ) ( Only GO needs this )
26297 - // 4. Device Info
26298 - // 5. Group Info ( Only GO need this )
26299 + // WFD Device Information ATTR
26300 + // Type:
26301 + wfdie[ wfdielen++ ] = WFD_ATTR_DEVICE_INFO;
26302
26303 - // P2P Capability ATTR
26304 + // Length:
26305 + // Note: In the WFD specification, the size of length field is 2.
26306 + RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
26307 + wfdielen += 2;
26308 +
26309 + // Value1:
26310 + // WFD device information
26311 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
26312 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
26313 + wfdielen += 2;
26314 +
26315 + // Value2:
26316 + // Session Management Control Port
26317 + // Default TCP port for RTSP messages is 554
26318 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->rtsp_ctrlport );
26319 + wfdielen += 2;
26320 +
26321 + // Value3:
26322 + // WFD Device Maximum Throughput
26323 + // 300Mbps is the maximum throughput
26324 + RTW_PUT_BE16(wfdie + wfdielen, 300);
26325 + wfdielen += 2;
26326 +
26327 + // Associated BSSID ATTR
26328 // Type:
26329 - p2pie[ p2pielen++ ] = P2P_ATTR_CAPABILITY;
26330 + wfdie[ wfdielen++ ] = WFD_ATTR_ASSOC_BSSID;
26331
26332 // Length:
26333 - //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0002 );
26334 - RTW_PUT_LE16(p2pie + p2pielen, 0x0002);
26335 - p2pielen += 2;
26336 + // Note: In the WFD specification, the size of length field is 2.
26337 + RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
26338 + wfdielen += 2;
26339
26340 // Value:
26341 - // Device Capability Bitmap, 1 byte
26342 - // Be able to participate in additional P2P Groups and
26343 - // support the P2P Invitation Procedure
26344 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC|P2P_DEVCAP_CLIENT_DISCOVERABILITY;
26345 -
26346 - // Group Capability Bitmap, 1 byte
26347 - if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
26348 + // Associated BSSID
26349 + if ( check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE )
26350 {
26351 - p2pie[ p2pielen ] = (P2P_GRPCAP_GO | P2P_GRPCAP_INTRABSS);
26352 -
26353 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
26354 - p2pie[ p2pielen ] |= P2P_GRPCAP_GROUP_FORMATION;
26355 -
26356 - p2pielen++;
26357 + _rtw_memcpy( wfdie + wfdielen, &pmlmepriv->assoc_bssid[ 0 ], ETH_ALEN );
26358 }
26359 - else if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) )
26360 + else
26361 {
26362 - // Group Capability Bitmap, 1 byte
26363 - p2pie[ p2pielen++ ] = 0x00;
26364 + _rtw_memset( wfdie + wfdielen, 0x00, ETH_ALEN );
26365 }
26366
26367 - // Extended Listen Timing ATTR
26368 + wfdielen += ETH_ALEN;
26369 +
26370 + // Coupled Sink Information ATTR
26371 // Type:
26372 - p2pie[ p2pielen++ ] = P2P_ATTR_EX_LISTEN_TIMING;
26373 + wfdie[ wfdielen++ ] = WFD_ATTR_COUPLED_SINK_INFO;
26374
26375 // Length:
26376 - //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0004 );
26377 - RTW_PUT_LE16(p2pie + p2pielen, 0x0004);
26378 - p2pielen += 2;
26379 + // Note: In the WFD specification, the size of length field is 2.
26380 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26381 + wfdielen += 2;
26382 +
26383 + // Value:
26384 + // Coupled Sink Status bitmap
26385 + // Not coupled/available for Coupling
26386 + wfdie[ wfdielen++ ] = 0;
26387 + // MAC Addr.
26388 + wfdie[ wfdielen++ ] = 0;
26389 + wfdie[ wfdielen++ ] = 0;
26390 + wfdie[ wfdielen++ ] = 0;
26391 + wfdie[ wfdielen++ ] = 0;
26392 + wfdie[ wfdielen++ ] = 0;
26393 + wfdie[ wfdielen++ ] = 0;
26394 +
26395 +
26396 + pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26397 +
26398 + return len;
26399 +
26400 +}
26401 +
26402 +u32 build_provdisc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26403 +{
26404 + u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
26405 + u32 len=0, wfdielen = 0;
26406 + _adapter *padapter = pwdinfo->padapter;
26407 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
26408 + struct wifi_display_info* pwfd_info = padapter->wdinfo.wfd_info;
26409 +
26410 + // WFD OUI
26411 + wfdielen = 0;
26412 + wfdie[ wfdielen++ ] = 0x50;
26413 + wfdie[ wfdielen++ ] = 0x6F;
26414 + wfdie[ wfdielen++ ] = 0x9A;
26415 + wfdie[ wfdielen++ ] = 0x0A; // WFA WFD v1.0
26416 +
26417 + // Commented by Albert 20110825
26418 + // According to the WFD Specification, the provision discovery response frame should contain 3 WFD attributes
26419 + // 1. WFD Device Information
26420 + // 2. Associated BSSID ( Optional )
26421 + // 3. Local IP Adress ( Optional )
26422 +
26423 +
26424 + // WFD Device Information ATTR
26425 + // Type:
26426 + wfdie[ wfdielen++ ] = WFD_ATTR_DEVICE_INFO;
26427 +
26428 + // Length:
26429 + // Note: In the WFD specification, the size of length field is 2.
26430 + RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
26431 + wfdielen += 2;
26432 +
26433 + // Value1:
26434 + // WFD device information
26435 + // WFD primary sink + available for WFD session + WiFi Direct mode + WSD ( WFD Service Discovery )
26436 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL | WFD_DEVINFO_WSD );
26437 + wfdielen += 2;
26438 +
26439 + // Value2:
26440 + // Session Management Control Port
26441 + // Default TCP port for RTSP messages is 554
26442 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->rtsp_ctrlport );
26443 + wfdielen += 2;
26444 +
26445 + // Value3:
26446 + // WFD Device Maximum Throughput
26447 + // 300Mbps is the maximum throughput
26448 + RTW_PUT_BE16(wfdie + wfdielen, 300);
26449 + wfdielen += 2;
26450 +
26451 + // Associated BSSID ATTR
26452 + // Type:
26453 + wfdie[ wfdielen++ ] = WFD_ATTR_ASSOC_BSSID;
26454 +
26455 + // Length:
26456 + // Note: In the WFD specification, the size of length field is 2.
26457 + RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
26458 + wfdielen += 2;
26459 +
26460 + // Value:
26461 + // Associated BSSID
26462 + if ( check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE )
26463 + {
26464 + _rtw_memcpy( wfdie + wfdielen, &pmlmepriv->assoc_bssid[ 0 ], ETH_ALEN );
26465 + }
26466 + else
26467 + {
26468 + _rtw_memset( wfdie + wfdielen, 0x00, ETH_ALEN );
26469 + }
26470 +
26471 + wfdielen += ETH_ALEN;
26472 +
26473 + // Coupled Sink Information ATTR
26474 + // Type:
26475 + wfdie[ wfdielen++ ] = WFD_ATTR_COUPLED_SINK_INFO;
26476 +
26477 + // Length:
26478 + // Note: In the WFD specification, the size of length field is 2.
26479 + RTW_PUT_BE16(wfdie + wfdielen, 0x0007);
26480 + wfdielen += 2;
26481 +
26482 + // Value:
26483 + // Coupled Sink Status bitmap
26484 + // Not coupled/available for Coupling
26485 + wfdie[ wfdielen++ ] = 0;
26486 + // MAC Addr.
26487 + wfdie[ wfdielen++ ] = 0;
26488 + wfdie[ wfdielen++ ] = 0;
26489 + wfdie[ wfdielen++ ] = 0;
26490 + wfdie[ wfdielen++ ] = 0;
26491 + wfdie[ wfdielen++ ] = 0;
26492 + wfdie[ wfdielen++ ] = 0;
26493 +
26494 + pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, &len);
26495 +
26496 + return len;
26497 +
26498 +}
26499 +
26500 +#endif //CONFIG_WFD
26501 +
26502 +u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26503 +{
26504 + u8 p2pie[ MAX_P2P_IE_LEN] = { 0x00 };
26505 + u32 len=0, p2pielen = 0;
26506 +#ifdef CONFIG_INTEL_WIDI
26507 + struct mlme_priv *pmlmepriv = &(pwdinfo->padapter->mlmepriv);
26508 + u8 zero_array_check[L2SDTA_SERVICE_VE_LEN] = { 0x00 };
26509 + u8 widi_version = 0, i = 0;
26510 +
26511 + if( _rtw_memcmp( pmlmepriv->sa_ext, zero_array_check, L2SDTA_SERVICE_VE_LEN ) == _FALSE )
26512 + {
26513 + widi_version = 35;
26514 + }
26515 + else if( pmlmepriv->num_p2p_sdt != 0 )
26516 + {
26517 + widi_version = 40;
26518 + }
26519 +#endif //CONFIG_INTEL_WIDI
26520 +
26521 + // P2P OUI
26522 + p2pielen = 0;
26523 + p2pie[ p2pielen++ ] = 0x50;
26524 + p2pie[ p2pielen++ ] = 0x6F;
26525 + p2pie[ p2pielen++ ] = 0x9A;
26526 + p2pie[ p2pielen++ ] = 0x09; // WFA P2P v1.0
26527 +
26528 + // Commented by Albert 20100907
26529 + // According to the P2P Specification, the probe response frame should contain 5 P2P attributes
26530 + // 1. P2P Capability
26531 + // 2. Extended Listen Timing
26532 + // 3. Notice of Absence ( NOA ) ( Only GO needs this )
26533 + // 4. Device Info
26534 + // 5. Group Info ( Only GO need this )
26535 +
26536 + // P2P Capability ATTR
26537 + // Type:
26538 + p2pie[ p2pielen++ ] = P2P_ATTR_CAPABILITY;
26539 +
26540 + // Length:
26541 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0002 );
26542 + RTW_PUT_LE16(p2pie + p2pielen, 0x0002);
26543 + p2pielen += 2;
26544 +
26545 + // Value:
26546 + // Device Capability Bitmap, 1 byte
26547 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
26548 +
26549 + // Group Capability Bitmap, 1 byte
26550 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
26551 + {
26552 + p2pie[ p2pielen ] = (P2P_GRPCAP_GO | P2P_GRPCAP_INTRABSS);
26553 +
26554 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
26555 + p2pie[ p2pielen ] |= P2P_GRPCAP_GROUP_FORMATION;
26556 +
26557 + p2pielen++;
26558 + }
26559 + else if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) )
26560 + {
26561 + // Group Capability Bitmap, 1 byte
26562 + if ( pwdinfo->persistent_supported )
26563 + p2pie[ p2pielen++ ] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT;
26564 + else
26565 + p2pie[ p2pielen++ ] = DMP_P2P_GRPCAP_SUPPORT;
26566 +
26567 + }
26568 +
26569 + // Extended Listen Timing ATTR
26570 + // Type:
26571 + p2pie[ p2pielen++ ] = P2P_ATTR_EX_LISTEN_TIMING;
26572 +
26573 + // Length:
26574 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0004 );
26575 + RTW_PUT_LE16(p2pie + p2pielen, 0x0004);
26576 + p2pielen += 2;
26577
26578 // Value:
26579 // Availability Period
26580 @@ -1606,6 +1987,17 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26581 // 21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes)
26582 // + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes)
26583 //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 21 + pwdinfo->device_name_len );
26584 +#ifdef CONFIG_INTEL_WIDI
26585 + if( widi_version == 35 )
26586 + {
26587 + RTW_PUT_LE16(p2pie + p2pielen, 21 + 8 + pwdinfo->device_name_len);
26588 + }
26589 + else if( widi_version == 40 )
26590 + {
26591 + RTW_PUT_LE16(p2pie + p2pielen, 21 + 8 * pmlmepriv->num_p2p_sdt + pwdinfo->device_name_len);
26592 + }
26593 + else
26594 +#endif //CONFIG_INTEL_WIDI
26595 RTW_PUT_LE16(p2pie + p2pielen, 21 + pwdinfo->device_name_len);
26596 p2pielen += 2;
26597
26598 @@ -1620,23 +2012,77 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26599 RTW_PUT_BE16(p2pie + p2pielen, pwdinfo->supported_wps_cm);
26600 p2pielen += 2;
26601
26602 - // Primary Device Type
26603 - // Category ID
26604 - //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
26605 - RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_RTK_WIDI);
26606 - p2pielen += 2;
26607 +#ifdef CONFIG_INTEL_WIDI
26608 + if( widi_version == 40 )
26609 + {
26610 + // Primary Device Type
26611 + // Category ID
26612 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
26613 + RTW_PUT_BE16(p2pie + p2pielen, pmlmepriv->p2p_pdt_cid );
26614 + p2pielen += 2;
26615
26616 - // OUI
26617 - //*(u32*) ( p2pie + p2pielen ) = cpu_to_be32( WPSOUI );
26618 - RTW_PUT_BE32(p2pie + p2pielen, WPSOUI);
26619 - p2pielen += 4;
26620 + // OUI
26621 + //*(u32*) ( p2pie + p2pielen ) = cpu_to_be32( WPSOUI );
26622 + RTW_PUT_BE32(p2pie + p2pielen, WPSOUI);
26623 + p2pielen += 4;
26624
26625 - // Sub Category ID
26626 - //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
26627 - RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_RTK_DMP);
26628 - p2pielen += 2;
26629 + // Sub Category ID
26630 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
26631 + RTW_PUT_BE16(p2pie + p2pielen, pmlmepriv->p2p_pdt_scid);
26632 + p2pielen += 2;
26633 + }
26634 + else
26635 +#endif //CONFIG_INTEL_WIDI
26636 + {
26637 + // Primary Device Type
26638 + // Category ID
26639 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
26640 + RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_MULIT_MEDIA);
26641 + p2pielen += 2;
26642 +
26643 + // OUI
26644 + //*(u32*) ( p2pie + p2pielen ) = cpu_to_be32( WPSOUI );
26645 + RTW_PUT_BE32(p2pie + p2pielen, WPSOUI);
26646 + p2pielen += 4;
26647 +
26648 + // Sub Category ID
26649 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
26650 + RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_MEDIA_SERVER);
26651 + p2pielen += 2;
26652 + }
26653
26654 // Number of Secondary Device Types
26655 +#ifdef CONFIG_INTEL_WIDI
26656 + if( widi_version == 35 )
26657 + {
26658 + p2pie[ p2pielen++ ] = 0x01;
26659 +
26660 + RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_DISPLAYS);
26661 + p2pielen += 2;
26662 +
26663 + RTW_PUT_BE32(p2pie + p2pielen, INTEL_DEV_TYPE_OUI);
26664 + p2pielen += 4;
26665 +
26666 + RTW_PUT_BE16(p2pie + p2pielen, P2P_SCID_WIDI_CONSUMER_SINK);
26667 + p2pielen += 2;
26668 + }
26669 + else if( widi_version == 40 )
26670 + {
26671 + p2pie[ p2pielen++ ] = pmlmepriv->num_p2p_sdt;
26672 + for( ; i < pmlmepriv->num_p2p_sdt; i++ )
26673 + {
26674 + RTW_PUT_BE16(p2pie + p2pielen, pmlmepriv->p2p_sdt_cid[i]);
26675 + p2pielen += 2;
26676 +
26677 + RTW_PUT_BE32(p2pie + p2pielen, INTEL_DEV_TYPE_OUI);
26678 + p2pielen += 4;
26679 +
26680 + RTW_PUT_BE16(p2pie + p2pielen, pmlmepriv->p2p_sdt_scid[i]);
26681 + p2pielen += 2;
26682 + }
26683 + }
26684 + else
26685 +#endif //CONFIG_INTEL_WIDI
26686 p2pie[ p2pielen++ ] = 0x00; // No Secondary Device Type List
26687
26688 // Device Name
26689 @@ -1654,7 +2100,6 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
26690 _rtw_memcpy( p2pie + p2pielen, pwdinfo->device_name, pwdinfo->device_name_len );
26691 p2pielen += pwdinfo->device_name_len;
26692
26693 -
26694 // Group Info ATTR
26695 // Type:
26696 // Length:
26697 @@ -1701,12 +2146,13 @@ u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8
26698
26699 // Value:
26700 // Device Capability Bitmap, 1 byte
26701 - // Be able to participate in additional P2P Groups and
26702 - // support the P2P Invitation Procedure
26703 - p2pie[ p2pielen++ ] = P2P_DEVCAP_INVITATION_PROC;
26704 + p2pie[ p2pielen++ ] = DMP_P2P_DEVCAP_SUPPORT;
26705
26706 // Group Capability Bitmap, 1 byte
26707 - p2pie[ p2pielen++ ] = 0x00;
26708 + if ( pwdinfo->persistent_supported )
26709 + p2pie[ p2pielen++ ] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT;
26710 + else
26711 + p2pie[ p2pielen++ ] = DMP_P2P_GRPCAP_SUPPORT;
26712
26713
26714 // Device Info ATTR
26715 @@ -1742,8 +2188,8 @@ u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8
26716
26717 // Primary Device Type
26718 // Category ID
26719 - //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_RTK_WIDI );
26720 - RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_RTK_WIDI);
26721 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
26722 + RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_MULIT_MEDIA);
26723 p2pielen += 2;
26724
26725 // OUI
26726 @@ -1752,8 +2198,8 @@ u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8
26727 p2pielen += 4;
26728
26729 // Sub Category ID
26730 - //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_RTK_DMP );
26731 - RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_RTK_DMP);
26732 + //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
26733 + RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_MEDIA_SERVER);
26734 p2pielen += 2;
26735
26736 // Number of Secondary Device Types
26737 @@ -1896,6 +2342,7 @@ u32 process_probe_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint l
26738 p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, _SSID_IE_, (int *)&ssid_len,
26739 len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_);
26740
26741 + ssid_len &= 0xff; // Just last 1 byte is valid for ssid len of the probe request
26742 if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) || rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
26743 {
26744 if((p2pie=rtw_get_p2p_ie( pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_ , len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_ , NULL, &p2pielen)))
26745 @@ -1907,6 +2354,10 @@ u32 process_probe_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint l
26746 //Check Device ID attribute in P2P IE
26747
26748 ret = _TRUE;
26749 + }
26750 + else if ( (p != NULL) && ( ssid_len == 0 ) )
26751 + {
26752 + ret = _TRUE;
26753 }
26754 }
26755 else
26756 @@ -2182,7 +2633,7 @@ u8 process_p2p_provdisc_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint l
26757 issue_p2p_provision_resp( pwdinfo, GetAddr2Ptr(pframe), frame_body, uconfig_method);
26758 }
26759 }
26760 - DBG_8192C( "[%s] config method = %s\n", __FUNCTION__, pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req );
26761 + DBG_871X( "[%s] config method = %s\n", __FUNCTION__, pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req );
26762 return _TRUE;
26763
26764 }
26765 @@ -2193,31 +2644,93 @@ u8 process_p2p_provdisc_resp(struct wifidirect_info *pwdinfo, u8 *pframe)
26766 return _TRUE;
26767 }
26768
26769 +u8 rtw_p2p_get_peer_ch_list(struct wifidirect_info *pwdinfo, u8 *ch_content, u8 ch_cnt, u8 *peer_ch_list)
26770 +{
26771 + u8 i = 0, j = 0;
26772 + u8 temp = 0;
26773 + u8 ch_no = 0;
26774 + ch_content += 3;
26775 + ch_cnt -= 3;
26776 +
26777 + while( ch_cnt > 0)
26778 + {
26779 + ch_content += 1;
26780 + ch_cnt -= 1;
26781 + temp = *ch_content;
26782 + for( i = 0 ; i < temp ; i++, j++ )
26783 + {
26784 + peer_ch_list[j] = *( ch_content + 1 + i );
26785 + }
26786 + ch_content += (temp + 1);
26787 + ch_cnt -= (temp + 1);
26788 + ch_no += temp ;
26789 + }
26790 +
26791 + return ch_no;
26792 +}
26793 +
26794 +u8 rtw_p2p_check_peer_oper_ch(struct mlme_ext_priv *pmlmeext, u8 ch)
26795 +{
26796 + u8 i = 0;
26797 +
26798 + for( i = 0; i < pmlmeext->max_chan_nums; i++ )
26799 + {
26800 + if ( pmlmeext->channel_set[ i ].ChannelNum == ch )
26801 + {
26802 + return _SUCCESS;
26803 + }
26804 + }
26805 +
26806 + return _FAIL;
26807 +}
26808 +
26809 +u8 rtw_p2p_ch_inclusion(struct mlme_ext_priv *pmlmeext, u8 *peer_ch_list, u8 peer_ch_num, u8 *ch_list_inclusioned)
26810 +{
26811 + int i = 0, j = 0, temp = 0;
26812 + u8 ch_no = 0;
26813 +
26814 + for( i = 0; i < peer_ch_num; i++ )
26815 + {
26816 + for( j = temp; j < pmlmeext->max_chan_nums; j++ )
26817 + {
26818 + if( *( peer_ch_list + i ) == pmlmeext->channel_set[ j ].ChannelNum )
26819 + {
26820 + ch_list_inclusioned[ ch_no++ ] = *( peer_ch_list + i );
26821 + temp = j;
26822 + break;
26823 + }
26824 + }
26825 + }
26826
26827 + return ch_no;
26828 +}
26829
26830 u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe, uint len )
26831 {
26832 + _adapter *padapter = pwdinfo->padapter;
26833 u8 result = P2P_STATUS_SUCCESS;
26834 u32 p2p_ielen = 0, wps_ielen = 0;
26835 u8 * ies;
26836 u32 ies_len;
26837 - u8 * p2p_ie;
26838 - u8 *wpsie;
26839 + u8 *p2p_ie;
26840 + u8 *wpsie;
26841 u16 wps_devicepassword_id = 0x0000;
26842 uint wps_devicepassword_id_len = 0;
26843 #ifdef CONFIG_WFD
26844 u8 wfd_ie[ 128 ] = { 0x00 };
26845 u32 wfd_ielen = 0;
26846 +#ifdef CONFIG_TDLS
26847 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
26848 +#endif // CONFIG_TDLS
26849 #endif // CONFIG_WFD
26850 +#ifdef CONFIG_CONCURRENT_MODE
26851 + _adapter *pbuddy_adapter = pwdinfo->padapter->pbuddy_adapter;
26852 + struct wifidirect_info *pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
26853 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
26854 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
26855 +#endif
26856
26857 - if ( pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO )
26858 - {
26859 - result = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
26860 - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
26861 - return( result );
26862 - }
26863 -
26864 - if ( (wpsie=rtw_get_wps_ie( pframe + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen)) )
26865 + if ( (wpsie=rtw_get_wps_ie( pframe + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen)) )
26866 {
26867 // Commented by Kurt 20120113
26868 // If some device wants to do p2p handshake without sending prov_disc_req
26869 @@ -2243,12 +2756,19 @@ u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe
26870 }
26871 else
26872 {
26873 - DBG_8192C( "[%s] WPS IE not Found!!\n", __FUNCTION__ );
26874 + DBG_871X( "[%s] WPS IE not Found!!\n", __FUNCTION__ );
26875 result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM;
26876 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
26877 return( result );
26878 }
26879
26880 + if ( pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO )
26881 + {
26882 + result = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
26883 + rtw_p2p_set_state(pwdinfo, P2P_STATE_TX_INFOR_NOREADY);
26884 + return( result );
26885 + }
26886 +
26887 ies = pframe + _PUBLIC_ACTION_IE_OFFSET_;
26888 ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
26889
26890 @@ -2256,7 +2776,7 @@ u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe
26891
26892 if ( !p2p_ie )
26893 {
26894 - DBG_8192C( "[%s] P2P IE not Found!!\n", __FUNCTION__ );
26895 + DBG_871X( "[%s] P2P IE not Found!!\n", __FUNCTION__ );
26896 result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM;
26897 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
26898 }
26899 @@ -2265,12 +2785,30 @@ u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe
26900 {
26901 u8 attr_content = 0x00;
26902 u32 attr_contentlen = 0;
26903 + u8 ch_content[100] = { 0x00 };
26904 + uint ch_cnt = 0;
26905 + u8 peer_ch_list[100] = { 0x00 };
26906 + u8 peer_ch_num = 0;
26907 + u8 ch_list_inclusioned[100] = { 0x00 };
26908 + u8 ch_num_inclusioned = 0;
26909 + u16 cap_attr;
26910
26911 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING);
26912 -
26913 +
26914 + //Check P2P Capability ATTR
26915 + if(rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&cap_attr, (uint*)&attr_contentlen) )
26916 + {
26917 + cap_attr = le16_to_cpu(cap_attr);
26918 +
26919 +#if defined(CONFIG_WFD) && defined(CONFIG_TDLS)
26920 + if(!(cap_attr & P2P_GRPCAP_INTRABSS) )
26921 + ptdlsinfo->ap_prohibited = _TRUE;
26922 +#endif //defined(CONFIG_WFD) && defined(CONFIG_TDLS)
26923 + }
26924 +
26925 if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT , &attr_content, &attr_contentlen) )
26926 {
26927 - DBG_8192C( "[%s] GO Intent = %d, tie = %d\n", __FUNCTION__, attr_content >> 1, attr_content & 0x01 );
26928 + DBG_871X( "[%s] GO Intent = %d, tie = %d\n", __FUNCTION__, attr_content >> 1, attr_content & 0x01 );
26929 pwdinfo->peer_intent = attr_content; // include both intent and tie breaker values.
26930
26931 if ( pwdinfo->intent == ( pwdinfo->peer_intent >> 1 ) )
26932 @@ -2320,6 +2858,64 @@ u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe
26933 }
26934 }
26935
26936 + if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, ch_content, &ch_cnt) )
26937 + {
26938 + peer_ch_num = rtw_p2p_get_peer_ch_list(pwdinfo, ch_content, ch_cnt, peer_ch_list);
26939 + ch_num_inclusioned = rtw_p2p_ch_inclusion(&padapter->mlmeextpriv, peer_ch_list, peer_ch_num, ch_list_inclusioned);
26940 +
26941 + if( ch_num_inclusioned == 0)
26942 + {
26943 + DBG_871X( "[%s] No common channel in channel list!\n", __FUNCTION__ );
26944 + result = P2P_STATUS_FAIL_NO_COMMON_CH;
26945 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
26946 + break;
26947 + }
26948 +
26949 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
26950 + {
26951 + if ( !rtw_p2p_is_channel_list_ok( pwdinfo->operating_channel,
26952 + ch_list_inclusioned, ch_num_inclusioned) )
26953 + {
26954 +#ifdef CONFIG_CONCURRENT_MODE
26955 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
26956 + {
26957 + DBG_871X( "[%s] desired channel NOT Found!\n", __FUNCTION__ );
26958 + result = P2P_STATUS_FAIL_NO_COMMON_CH;
26959 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
26960 + break;
26961 + }
26962 + else
26963 +#endif //CONFIG_CONCURRENT_MODE
26964 + {
26965 + u8 operatingch_info[5] = { 0x00 }, peer_operating_ch = 0;
26966 + attr_contentlen = 0;
26967 +
26968 + if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen) )
26969 + {
26970 + peer_operating_ch = operatingch_info[4];
26971 + }
26972 +
26973 + if ( rtw_p2p_is_channel_list_ok( peer_operating_ch,
26974 + ch_list_inclusioned, ch_num_inclusioned) )
26975 + {
26976 + /**
26977 + * Change our operating channel as peer's for compatibility.
26978 + */
26979 + pwdinfo->operating_channel = peer_operating_ch;
26980 + DBG_871X( "[%s] Change op ch to %02x as peer's\n", __FUNCTION__, pwdinfo->operating_channel);
26981 + }
26982 + else
26983 + {
26984 + // Take first channel of ch_list_inclusioned as operating channel
26985 + pwdinfo->operating_channel = ch_list_inclusioned[0];
26986 + DBG_871X( "[%s] Change op ch to %02x\n", __FUNCTION__, pwdinfo->operating_channel);
26987 + }
26988 + }
26989 +
26990 + }
26991 + }
26992 + }
26993 +
26994 //Get the next P2P IE
26995 p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
26996 }
26997 @@ -2332,12 +2928,12 @@ u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe
26998 u8 attr_content[ 10 ] = { 0x00 };
26999 u32 attr_contentlen = 0;
27000
27001 - DBG_8192C( "[%s] WFD IE Found!!\n", __FUNCTION__ );
27002 + DBG_871X( "[%s] WFD IE Found!!\n", __FUNCTION__ );
27003 rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);
27004 if ( attr_contentlen )
27005 {
27006 - pwdinfo->wfd_info.peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
27007 - DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info.peer_rtsp_ctrlport );
27008 + pwdinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
27009 + DBG_871X( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info->peer_rtsp_ctrlport );
27010 }
27011 }
27012 #endif // CONFIG_WFD
27013 @@ -2347,6 +2943,7 @@ u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe
27014
27015 u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pframe, uint len )
27016 {
27017 + _adapter *padapter = pwdinfo->padapter;
27018 u8 result = P2P_STATUS_SUCCESS;
27019 u32 p2p_ielen, wps_ielen;
27020 u8 * ies;
27021 @@ -2355,7 +2952,10 @@ u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pfram
27022 #ifdef CONFIG_WFD
27023 u8 wfd_ie[ 128 ] = { 0x00 };
27024 u32 wfd_ielen = 0;
27025 -#endif // CONFIG_WFD
27026 +#ifdef CONFIG_TDLS
27027 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
27028 +#endif // CONFIG_TDLS
27029 +#endif // CONFIG_WFD
27030
27031 ies = pframe + _PUBLIC_ACTION_IE_OFFSET_;
27032 ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
27033 @@ -2368,7 +2968,7 @@ u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pfram
27034 }
27035 else
27036 {
27037 - DBG_8192C( "[%s] WPS IE not Found!!\n", __FUNCTION__ );
27038 + DBG_871X( "[%s] WPS IE not Found!!\n", __FUNCTION__ );
27039 result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM;
27040 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27041 }
27042 @@ -2382,28 +2982,48 @@ u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pfram
27043 }
27044 else
27045 {
27046 +
27047 u8 attr_content = 0x00;
27048 u32 attr_contentlen = 0;
27049 u8 operatingch_info[5] = { 0x00 };
27050 uint ch_cnt = 0;
27051 - u8 ch_content[50] = { 0x00 };
27052 + u8 ch_content[100] = { 0x00 };
27053 u8 groupid[ 38 ];
27054 -
27055 + u16 cap_attr;
27056 + u8 peer_ch_list[100] = { 0x00 };
27057 + u8 peer_ch_num = 0;
27058 + u8 ch_list_inclusioned[100] = { 0x00 };
27059 + u8 ch_num_inclusioned = 0;
27060 +
27061 while ( p2p_ie ) // Found the P2P IE.
27062 {
27063
27064 + //Check P2P Capability ATTR
27065 + if(rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&cap_attr, (uint*)&attr_contentlen) )
27066 + {
27067 + cap_attr = le16_to_cpu(cap_attr);
27068 +#if defined(CONFIG_WFD) && defined(CONFIG_TDLS)
27069 + if(!(cap_attr & P2P_GRPCAP_INTRABSS) )
27070 + ptdlsinfo->ap_prohibited = _TRUE;
27071 +#endif //defined(CONFIG_WFD) && defined(CONFIG_TDLS)
27072 + }
27073 +
27074 rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen);
27075 if ( attr_contentlen == 1 )
27076 {
27077 - DBG_8192C( "[%s] Status = %d\n", __FUNCTION__, attr_content );
27078 + DBG_871X( "[%s] Status = %d\n", __FUNCTION__, attr_content );
27079 if ( attr_content == P2P_STATUS_SUCCESS )
27080 {
27081 // Do nothing.
27082 }
27083 else
27084 {
27085 + if ( P2P_STATUS_FAIL_INFO_UNAVAILABLE == attr_content ) {
27086 + rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_INFOR_NOREADY);
27087 + } else {
27088 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27089 + }
27090 rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
27091 - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27092 result = attr_content;
27093 break;
27094 }
27095 @@ -2424,7 +3044,7 @@ u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pfram
27096 attr_contentlen = 0;
27097 if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT , &attr_content, &attr_contentlen) )
27098 {
27099 - DBG_8192C( "[%s] GO Intent = %d, tie = %d\n", __FUNCTION__, attr_content >> 1, attr_content & 0x01 );
27100 + DBG_871X( "[%s] GO Intent = %d, tie = %d\n", __FUNCTION__, attr_content >> 1, attr_content & 0x01 );
27101 pwdinfo->peer_intent = attr_content; // include both intent and tie breaker values.
27102
27103 if ( pwdinfo->intent == ( pwdinfo->peer_intent >> 1 ) )
27104 @@ -2439,6 +3059,7 @@ u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pfram
27105 else
27106 {
27107 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
27108 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
27109 if ( attr_content & 0x01 )
27110 {
27111 rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
27112 @@ -2452,11 +3073,13 @@ u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pfram
27113 else if ( pwdinfo->intent > ( pwdinfo->peer_intent >> 1 ) )
27114 {
27115 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
27116 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
27117 rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
27118 }
27119 else
27120 {
27121 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
27122 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
27123 rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
27124 }
27125
27126 @@ -2474,20 +3097,74 @@ u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pfram
27127 attr_contentlen = 0;
27128 if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen))
27129 {
27130 - DBG_8192C( "[%s] Peer's operating channel = %d\n", __FUNCTION__, operatingch_info[4] );
27131 + DBG_871X( "[%s] Peer's operating channel = %d\n", __FUNCTION__, operatingch_info[4] );
27132 pwdinfo->peer_operating_ch = operatingch_info[4];
27133 }
27134
27135 // Try to get the channel list information
27136 - if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, ch_content, &ch_cnt) )
27137 + if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, pwdinfo->channel_list_attr, &pwdinfo->channel_list_attr_len ) )
27138 {
27139 - pwdinfo->channel_cnt = ch_content[ 4 ]; // Number of Channels
27140 - _rtw_memcpy( pwdinfo->channel_list, &ch_content[ 5 ], pwdinfo->channel_cnt ); // Channel List
27141 - DBG_8192C( "[%s] channel count = %d\n", __FUNCTION__, pwdinfo->channel_cnt );
27142 + DBG_871X( "[%s] channel list attribute found, len = %d\n", __FUNCTION__, pwdinfo->channel_list_attr_len );
27143 +
27144 + peer_ch_num = rtw_p2p_get_peer_ch_list(pwdinfo, pwdinfo->channel_list_attr, pwdinfo->channel_list_attr_len, peer_ch_list);
27145 + ch_num_inclusioned = rtw_p2p_ch_inclusion(&padapter->mlmeextpriv, peer_ch_list, peer_ch_num, ch_list_inclusioned);
27146 +
27147 + if( ch_num_inclusioned == 0)
27148 + {
27149 + DBG_871X( "[%s] No common channel in channel list!\n", __FUNCTION__ );
27150 + result = P2P_STATUS_FAIL_NO_COMMON_CH;
27151 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27152 + break;
27153 + }
27154 +
27155 + if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
27156 + {
27157 + if ( !rtw_p2p_is_channel_list_ok( pwdinfo->operating_channel,
27158 + ch_list_inclusioned, ch_num_inclusioned) )
27159 + {
27160 +#ifdef CONFIG_CONCURRENT_MODE
27161 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
27162 + {
27163 + DBG_871X( "[%s] desired channel NOT Found!\n", __FUNCTION__ );
27164 + result = P2P_STATUS_FAIL_NO_COMMON_CH;
27165 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
27166 + break;
27167 + }
27168 + else
27169 +#endif //CONFIG_CONCURRENT_MODE
27170 + {
27171 + u8 operatingch_info[5] = { 0x00 }, peer_operating_ch = 0;
27172 + attr_contentlen = 0;
27173 +
27174 + if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen) )
27175 + {
27176 + peer_operating_ch = operatingch_info[4];
27177 + }
27178 +
27179 + if ( rtw_p2p_is_channel_list_ok( peer_operating_ch,
27180 + ch_list_inclusioned, ch_num_inclusioned) )
27181 + {
27182 + /**
27183 + * Change our operating channel as peer's for compatibility.
27184 + */
27185 + pwdinfo->operating_channel = peer_operating_ch;
27186 + DBG_871X( "[%s] Change op ch to %02x as peer's\n", __FUNCTION__, pwdinfo->operating_channel);
27187 + }
27188 + else
27189 + {
27190 + // Take first channel of ch_list_inclusioned as operating channel
27191 + pwdinfo->operating_channel = ch_list_inclusioned[0];
27192 + DBG_871X( "[%s] Change op ch to %02x\n", __FUNCTION__, pwdinfo->operating_channel);
27193 + }
27194 + }
27195 +
27196 + }
27197 + }
27198 +
27199 }
27200 else
27201 {
27202 - DBG_8192C( "[%s] channel list attribute not found!\n", __FUNCTION__);
27203 + DBG_871X( "[%s] channel list attribute not found!\n", __FUNCTION__);
27204 }
27205
27206 // Try to get the group id information if peer is GO
27207 @@ -2517,8 +3194,8 @@ u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pfram
27208 rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);
27209 if ( attr_contentlen )
27210 {
27211 - pwdinfo->wfd_info.peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
27212 - DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info.peer_rtsp_ctrlport );
27213 + pwdinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
27214 + DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info->peer_rtsp_ctrlport );
27215 }
27216 }
27217 #endif // CONFIG_WFD
27218 @@ -2534,7 +3211,6 @@ u8 process_p2p_group_negotation_confirm( struct wifidirect_info *pwdinfo, u8 *pf
27219 u8 * p2p_ie;
27220 u32 p2p_ielen = 0;
27221 u8 result = P2P_STATUS_SUCCESS;
27222 -
27223 ies = pframe + _PUBLIC_ACTION_IE_OFFSET_;
27224 ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
27225
27226 @@ -2549,7 +3225,7 @@ u8 process_p2p_group_negotation_confirm( struct wifidirect_info *pwdinfo, u8 *pf
27227 rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen);
27228 if ( attr_contentlen == 1 )
27229 {
27230 - DBG_8192C( "[%s] Status = %d\n", __FUNCTION__, attr_content );
27231 + DBG_871X( "[%s] Status = %d\n", __FUNCTION__, attr_content );
27232 result = attr_content;
27233
27234 if ( attr_content == P2P_STATUS_SUCCESS )
27235 @@ -2561,6 +3237,7 @@ u8 process_p2p_group_negotation_confirm( struct wifidirect_info *pwdinfo, u8 *pf
27236 // Commented by Albert 20100911
27237 // Todo: Need to handle the case which both Intents are the same.
27238 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
27239 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
27240 if ( ( pwdinfo->intent ) > ( pwdinfo->peer_intent >> 1 ) )
27241 {
27242 rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
27243 @@ -2581,6 +3258,14 @@ u8 process_p2p_group_negotation_confirm( struct wifidirect_info *pwdinfo, u8 *pf
27244 rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
27245 }
27246 }
27247 +
27248 +#ifdef CONFIG_CONCURRENT_MODE
27249 + if ( check_buddy_fwstate(pwdinfo->padapter , _FW_LINKED ) )
27250 + {
27251 + // Switch back to the AP channel soon.
27252 + _set_timer( &pwdinfo->ap_p2p_switch_timer, 100 );
27253 + }
27254 +#endif
27255 }
27256 else
27257 {
27258 @@ -2595,7 +3280,7 @@ u8 process_p2p_group_negotation_confirm( struct wifidirect_info *pwdinfo, u8 *pf
27259 _rtw_memset( groupid, 0x00, 38 );
27260 if ( rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen) )
27261 {
27262 - DBG_8192C( "[%s] Ssid = %s, ssidlen = %d\n", __FUNCTION__, &groupid[ETH_ALEN], strlen(&groupid[ETH_ALEN]) );
27263 + DBG_871X( "[%s] Ssid = %s, ssidlen = %d\n", __FUNCTION__, &groupid[ETH_ALEN], (u32)strlen(&groupid[ETH_ALEN]) );
27264 _rtw_memcpy( pwdinfo->groupid_info.go_device_addr, &groupid[0], ETH_ALEN );
27265 _rtw_memcpy( pwdinfo->groupid_info.ssid, &groupid[6], attr_contentlen - ETH_ALEN );
27266 }
27267 @@ -2603,7 +3288,7 @@ u8 process_p2p_group_negotation_confirm( struct wifidirect_info *pwdinfo, u8 *pf
27268 attr_contentlen = 0;
27269 if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen) )
27270 {
27271 - DBG_8192C( "[%s] Peer's operating channel = %d\n", __FUNCTION__, operatingch_info[4] );
27272 + DBG_871X( "[%s] Peer's operating channel = %d\n", __FUNCTION__, operatingch_info[4] );
27273 pwdinfo->peer_operating_ch = operatingch_info[4];
27274 }
27275
27276 @@ -2632,114 +3317,6 @@ u8 process_p2p_presence_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint le
27277 return _TRUE;
27278 }
27279
27280 -void process_p2p_ps_ie(PADAPTER padapter, u8 *IEs, u32 IELength)
27281 -{
27282 - u8 * ies;
27283 - u32 ies_len;
27284 - u8 * p2p_ie;
27285 - u32 p2p_ielen = 0;
27286 - u8 noa_attr[MAX_P2P_IE_LEN] = { 0x00 };// NoA length should be n*(13) + 2
27287 - u32 attr_contentlen = 0;
27288 -
27289 - struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
27290 - u8 find_p2p = _FALSE, find_p2p_ps = _FALSE;
27291 - u8 noa_offset, noa_num, noa_index;
27292 -
27293 -_func_enter_;
27294 -
27295 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
27296 - {
27297 - return;
27298 - }
27299 -
27300 - if(IELength <= _BEACON_IE_OFFSET_)
27301 - return;
27302 -
27303 - ies = IEs + _BEACON_IE_OFFSET_;
27304 - ies_len = IELength - _BEACON_IE_OFFSET_;
27305 -
27306 - p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen);
27307 -
27308 - while(p2p_ie)
27309 - {
27310 - find_p2p = _TRUE;
27311 - // Get Notice of Absence IE.
27312 - if(rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_NOA, noa_attr, &attr_contentlen))
27313 - {
27314 - find_p2p_ps = _TRUE;
27315 - noa_index = noa_attr[0];
27316 -
27317 - if( (pwdinfo->p2p_ps_enable == _FALSE) ||
27318 - (noa_index != pwdinfo->noa_index) )// if index change, driver should reconfigure related setting.
27319 - {
27320 - pwdinfo->noa_index = noa_index;
27321 - pwdinfo->opp_ps = noa_attr[1] >> 7;
27322 - pwdinfo->ctwindow = noa_attr[1] & 0x7F;
27323 -
27324 - noa_offset = 2;
27325 - noa_num = 0;
27326 - // NoA length should be n*(13) + 2
27327 - if(attr_contentlen > 2)
27328 - {
27329 - while(noa_offset < attr_contentlen)
27330 - {
27331 - //_rtw_memcpy(&wifidirect_info->noa_count[noa_num], &noa_attr[noa_offset], 1);
27332 - pwdinfo->noa_count[noa_num] = noa_attr[noa_offset];
27333 - noa_offset += 1;
27334 -
27335 - _rtw_memcpy(&pwdinfo->noa_duration[noa_num], &noa_attr[noa_offset], 4);
27336 - noa_offset += 4;
27337 -
27338 - _rtw_memcpy(&pwdinfo->noa_interval[noa_num], &noa_attr[noa_offset], 4);
27339 - noa_offset += 4;
27340 -
27341 - _rtw_memcpy(&pwdinfo->noa_start_time[noa_num], &noa_attr[noa_offset], 4);
27342 - noa_offset += 4;
27343 -
27344 - noa_num++;
27345 - }
27346 - }
27347 - pwdinfo->noa_num = noa_num;
27348 -
27349 - if( pwdinfo->opp_ps == 1 )
27350 - {
27351 - pwdinfo->p2p_ps_enable = _TRUE;
27352 - // driver should wait LPS for entering CTWindow
27353 - if(padapter->pwrctrlpriv.bFwCurrentInPSMode == _TRUE)
27354 - {
27355 - p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1);
27356 - }
27357 - }
27358 - else if( pwdinfo->noa_num > 0 )
27359 - {
27360 - pwdinfo->p2p_ps_enable = _TRUE;
27361 - p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1);
27362 - }
27363 - else if( pwdinfo->p2p_ps_enable == _TRUE)
27364 - {
27365 - p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
27366 - }
27367 - }
27368 -
27369 - break; // find target, just break.
27370 - }
27371 -
27372 - //Get the next P2P IE
27373 - p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
27374 -
27375 - }
27376 -
27377 - if(find_p2p == _TRUE)
27378 - {
27379 - if( (pwdinfo->p2p_ps_enable == _TRUE) && (find_p2p_ps == _FALSE) )
27380 - {
27381 - p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
27382 - }
27383 - }
27384 -
27385 -_func_exit_;
27386 -}
27387 -
27388 void find_phase_handler( _adapter* padapter )
27389 {
27390 struct wifidirect_info *pwdinfo = &padapter->wdinfo;
27391 @@ -2757,13 +3334,15 @@ _func_enter_;
27392 rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
27393
27394 _enter_critical_bh(&pmlmepriv->lock, &irqL);
27395 - _status = rtw_sitesurvey_cmd(padapter, &ssid, 1);
27396 + _status = rtw_sitesurvey_cmd(padapter, &ssid, 1, NULL, 0);
27397 _exit_critical_bh(&pmlmepriv->lock, &irqL);
27398
27399
27400 _func_exit_;
27401 }
27402
27403 +void p2p_concurrent_handler( _adapter* padapter );
27404 +
27405 void restore_p2p_state_handler( _adapter* padapter )
27406 {
27407 struct wifidirect_info *pwdinfo = &padapter->wdinfo;
27408 @@ -2771,16 +3350,56 @@ void restore_p2p_state_handler( _adapter* padapter )
27409
27410 _func_enter_;
27411
27412 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
27413 + {
27414 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
27415 + }
27416 +
27417 +#ifdef CONFIG_CONCURRENT_MODE
27418 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
27419 + {
27420 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
27421 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
27422 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
27423 +
27424 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_RSP))
27425 + {
27426 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
27427 +
27428 + issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
27429 + }
27430 + }
27431 +#endif
27432 +
27433 rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
27434 +
27435 if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE))
27436 {
27437 +#ifdef CONFIG_CONCURRENT_MODE
27438 + p2p_concurrent_handler( padapter );
27439 +#else
27440 // In the P2P client mode, the driver should not switch back to its listen channel
27441 // because this P2P client should stay at the operating channel of P2P GO.
27442 set_channel_bwmode( padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
27443 +#endif
27444 }
27445 _func_exit_;
27446 }
27447
27448 +void pre_tx_invitereq_handler( _adapter* padapter )
27449 +{
27450 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
27451 + u8 val8 = 1;
27452 +_func_enter_;
27453 +
27454 + set_channel_bwmode(padapter, pwdinfo->invitereq_info.peer_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
27455 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
27456 + issue_probereq_p2p(padapter, NULL);
27457 + _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
27458 +
27459 +_func_exit_;
27460 +}
27461 +
27462 void pre_tx_provdisc_handler( _adapter* padapter )
27463 {
27464 struct wifidirect_info *pwdinfo = &padapter->wdinfo;
27465 @@ -2788,8 +3407,8 @@ void pre_tx_provdisc_handler( _adapter* padapter )
27466 _func_enter_;
27467
27468 set_channel_bwmode(padapter, pwdinfo->tx_prov_disc_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
27469 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
27470 - issue_probereq_p2p( padapter );
27471 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
27472 + issue_probereq_p2p(padapter, NULL);
27473 _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
27474
27475 _func_exit_;
27476 @@ -2802,67 +3421,962 @@ void pre_tx_negoreq_handler( _adapter* padapter )
27477 _func_enter_;
27478
27479 set_channel_bwmode(padapter, pwdinfo->nego_req_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
27480 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
27481 - issue_probereq_p2p( padapter );
27482 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
27483 + issue_probereq_p2p(padapter, NULL);
27484 _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
27485
27486 _func_exit_;
27487 }
27488
27489 -#ifdef CONFIG_IOCTL_CFG80211
27490 -void ro_ch_handler( _adapter* padapter )
27491 +#ifdef CONFIG_CONCURRENT_MODE
27492 +void p2p_concurrent_handler( _adapter* padapter )
27493 {
27494 - struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
27495 - struct wifidirect_info *pwdinfo = &padapter->wdinfo;
27496 - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
27497 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
27498 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
27499 + //_adapter *pbuddy_adapter = padapter->pbuddy_adapter;
27500 + //struct wifidirect_info *pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
27501 + //struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
27502 + //struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
27503 + u8 val8;
27504 _func_enter_;
27505
27506 -// if( pcfg80211_wdinfo->restore_channel != pmlmeext->cur_channel )
27507 -// set_channel_bwmode(padapter, pcfg80211_wdinfo->restore_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
27508 -
27509 - #if 0
27510 - // Disable P2P Listen State
27511 - if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
27512 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
27513 {
27514 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
27515 - {
27516 - _cancel_timer_ex( &pwdinfo->find_phase_timer );
27517 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
27518 - _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
27519 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
27520 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
27521
27522 - rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
27523 - _rtw_memset(pwdinfo, 0x00, sizeof(struct wifidirect_info));
27524 + pwdinfo->operating_channel = pbuddy_mlmeext->cur_channel;
27525
27526 - if(pwrpriv->bips_processing == _FALSE){
27527 - rtw_set_pwr_state_check_timer(pwrpriv);
27528 - }
27529 - }
27530 - }
27531 - else
27532 - #endif
27533 - {
27534 - if( pcfg80211_wdinfo->restore_channel != pmlmeext->cur_channel )
27535 + if( pwdinfo->driver_interface == DRIVER_CFG80211 )
27536 {
27537 - pmlmeext->cur_channel = pcfg80211_wdinfo->restore_channel;
27538 - set_channel_bwmode(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
27539 - }
27540 + DBG_871X("%s, switch ch back to buddy's cur_channel=%d\n", __func__, pbuddy_mlmeext->cur_channel);
27541 +
27542 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
27543
27544 - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
27545 -#ifdef CONFIG_DEBUG_CFG80211
27546 - DBG_871X("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
27547 -#endif
27548 - }
27549 + issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
27550 + }
27551 + else if( pwdinfo->driver_interface == DRIVER_WEXT )
27552 + {
27553 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
27554 + {
27555 + // Now, the driver stays on the AP's channel.
27556 + // If the pwdinfo->ext_listen_period = 0, that means the P2P listen state is not available on listen channel.
27557 + if ( pwdinfo->ext_listen_period > 0 )
27558 + {
27559 + DBG_8192C( "[%s] P2P_STATE_IDLE, ext_listen_period = %d\n", __FUNCTION__, pwdinfo->ext_listen_period );
27560
27561 - cfg80211_remain_on_channel_expired(pcfg80211_wdinfo->remain_on_ch_dev,
27562 - pcfg80211_wdinfo->remain_on_ch_cookie,
27563 - &pcfg80211_wdinfo->remain_on_ch_channel,
27564 - pcfg80211_wdinfo->remain_on_ch_type, GFP_KERNEL);
27565 -_func_exit_;
27566 -}
27567 -#endif //CONFIG_IOCTL_CFG80211
27568 + if ( pbuddy_mlmeext->cur_channel != pwdinfo->listen_channel )
27569 + {
27570 + // Will switch to listen channel so that need to send the NULL data with PW bit to AP.
27571 + issue_nulldata(pbuddy_adapter, NULL, 1, 3, 500);
27572 + set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
27573 + }
27574
27575 -void p2p_protocol_wk_hdl(_adapter *padapter, int intCmdType)
27576 + rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
27577 + val8 = 1;
27578 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
27579 +
27580 + // Todo: To check the value of pwdinfo->ext_listen_period is equal to 0 or not.
27581 + _set_timer( &pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_period );
27582 + }
27583 + }
27584 + else if ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN) ||
27585 + rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL) ||
27586 + ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) && pwdinfo->nego_req_info.benable == _FALSE ) ||
27587 + rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ) )
27588 + {
27589 + // Now, the driver is in the listen state of P2P mode.
27590 + DBG_8192C( "[%s] P2P_STATE_IDLE, ext_listen_interval = %d\n", __FUNCTION__, pwdinfo->ext_listen_interval );
27591 +
27592 + // Commented by Albert 2012/11/01
27593 + // If the AP's channel is the same as the listen channel, we should still be in the listen state
27594 + // Other P2P device is still able to find this device out even this device is in the AP's channel.
27595 + // So, configure this device to be able to receive the probe request frame and set it to listen state.
27596 + if ( pbuddy_mlmeext->cur_channel != pwdinfo->listen_channel )
27597 + {
27598 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
27599 + val8 = 0;
27600 + padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
27601 + rtw_p2p_set_state(pwdinfo, P2P_STATE_IDLE);
27602 + issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
27603 + }
27604 +
27605 + // Todo: To check the value of pwdinfo->ext_listen_interval is equal to 0 or not.
27606 + _set_timer( &pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_interval );
27607 + }
27608 + else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_OK))
27609 + {
27610 + // The driver had finished the P2P handshake successfully.
27611 + val8 = 0;
27612 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
27613 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
27614 + issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
27615 + }
27616 + else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ))
27617 + {
27618 + val8 = 1;
27619 + set_channel_bwmode(padapter, pwdinfo->tx_prov_disc_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
27620 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
27621 + issue_probereq_p2p(padapter, NULL);
27622 + _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
27623 + }
27624 + else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) && pwdinfo->nego_req_info.benable == _TRUE)
27625 + {
27626 + val8 = 1;
27627 + set_channel_bwmode(padapter, pwdinfo->nego_req_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
27628 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
27629 + issue_probereq_p2p(padapter, NULL);
27630 + _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
27631 + }
27632 + else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_INVITE_REQ ) && pwdinfo->invitereq_info.benable == _TRUE)
27633 + {
27634 + /*
27635 + val8 = 1;
27636 + set_channel_bwmode(padapter, , HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
27637 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
27638 + issue_probereq_p2p(padapter, NULL);
27639 + _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
27640 + */
27641 + }
27642 + }
27643 + }
27644 + else
27645 + {
27646 + set_channel_bwmode( padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
27647 + }
27648 +
27649 +_func_exit_;
27650 +}
27651 +#endif
27652 +
27653 +#ifdef CONFIG_IOCTL_CFG80211
27654 +static void ro_ch_handler(_adapter *padapter)
27655 +{
27656 + struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
27657 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
27658 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
27659 + u8 ch, bw, offset;
27660 +_func_enter_;
27661 +
27662 + if (rtw_get_ch_setting_union(padapter, &ch, &bw, &offset) != 0) {
27663 + if (0)
27664 + DBG_871X(FUNC_ADPT_FMT" back to linked union - ch:%u, bw:%u, offset:%u\n",
27665 + FUNC_ADPT_ARG(padapter), ch, bw, offset);
27666 + }
27667 + else if (wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->listen_channel) {
27668 + ch = pwdinfo->listen_channel;
27669 + bw = HT_CHANNEL_WIDTH_20;
27670 + offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
27671 + if (0)
27672 + DBG_871X(FUNC_ADPT_FMT" back to listen ch - ch:%u, bw:%u, offset:%u\n",
27673 + FUNC_ADPT_ARG(padapter), ch, bw, offset);
27674 + }
27675 + else {
27676 + ch = pcfg80211_wdinfo->restore_channel;
27677 + bw = HT_CHANNEL_WIDTH_20;
27678 + offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
27679 + if (0)
27680 + DBG_871X(FUNC_ADPT_FMT" back to restore ch - ch:%u, bw:%u, offset:%u\n",
27681 + FUNC_ADPT_ARG(padapter), ch, bw, offset);
27682 + }
27683 +
27684 + set_channel_bwmode(padapter, ch, offset, bw);
27685 +
27686 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
27687 +#ifdef CONFIG_DEBUG_CFG80211
27688 + DBG_871X("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
27689 +#endif
27690 +
27691 + pcfg80211_wdinfo->is_ro_ch = _FALSE;
27692 +
27693 + DBG_871X("cfg80211_remain_on_channel_expired\n");
27694 +
27695 + rtw_cfg80211_remain_on_channel_expired(padapter,
27696 + pcfg80211_wdinfo->remain_on_ch_cookie,
27697 + &pcfg80211_wdinfo->remain_on_ch_channel,
27698 + pcfg80211_wdinfo->remain_on_ch_type, GFP_KERNEL);
27699 +
27700 +_func_exit_;
27701 +}
27702 +
27703 +static void ro_ch_timer_process (void *FunctionContext)
27704 +{
27705 + _adapter *adapter = (_adapter *)FunctionContext;
27706 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(adapter->rtw_wdev);
27707 +
27708 + //printk("%s \n", __FUNCTION__);
27709 +
27710 +#ifdef CONFIG_CONCURRENT_MODE
27711 + ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
27712 +#endif
27713 +
27714 + p2p_protocol_wk_cmd( adapter, P2P_RO_CH_WK);
27715 +}
27716 +
27717 +static void rtw_change_p2pie_op_ch(_adapter *padapter, const u8 *frame_body, u32 len, u8 ch)
27718 +{
27719 + u8 *ies, *p2p_ie;
27720 + u32 ies_len, p2p_ielen;
27721 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
27722 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
27723 +
27724 + ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
27725 + ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
27726 +
27727 + p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
27728 +
27729 + while ( p2p_ie ) {
27730 + u32 attr_contentlen = 0;
27731 + u8 *pattr = NULL;
27732 +
27733 + //Check P2P_ATTR_OPERATING_CH
27734 + attr_contentlen = 0;
27735 + pattr = NULL;
27736 + if((pattr = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, (uint*)&attr_contentlen))!=NULL)
27737 + {
27738 + *(pattr+4) = ch;
27739 + }
27740 +
27741 + //Get the next P2P IE
27742 + p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
27743 + }
27744 +}
27745 +
27746 +static void rtw_change_p2pie_ch_list(_adapter *padapter, const u8 *frame_body, u32 len, u8 ch)
27747 +{
27748 + u8 *ies, *p2p_ie;
27749 + u32 ies_len, p2p_ielen;
27750 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
27751 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
27752 +
27753 + ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
27754 + ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
27755 +
27756 + p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
27757 +
27758 + while (p2p_ie) {
27759 + u32 attr_contentlen = 0;
27760 + u8 *pattr = NULL;
27761 +
27762 + //Check P2P_ATTR_CH_LIST
27763 + if ((pattr=rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, NULL, (uint*)&attr_contentlen))!=NULL) {
27764 + int i;
27765 + u32 num_of_ch;
27766 + u8 *pattr_temp = pattr + 3 ;
27767 +
27768 + attr_contentlen -= 3;
27769 +
27770 + while (attr_contentlen>0) {
27771 + num_of_ch = *(pattr_temp+1);
27772 +
27773 + for(i=0; i<num_of_ch; i++)
27774 + *(pattr_temp+2+i) = ch;
27775 +
27776 + pattr_temp += (2+num_of_ch);
27777 + attr_contentlen -= (2+num_of_ch);
27778 + }
27779 + }
27780 +
27781 + //Get the next P2P IE
27782 + p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
27783 + }
27784 +}
27785 +
27786 +static bool rtw_chk_p2pie_ch_list_with_buddy(_adapter *padapter, const u8 *frame_body, u32 len)
27787 +{
27788 + bool fit = _FALSE;
27789 +#ifdef CONFIG_CONCURRENT_MODE
27790 + u8 *ies, *p2p_ie;
27791 + u32 ies_len, p2p_ielen;
27792 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
27793 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
27794 + u8 buddy_ch = pbuddy_mlmeext->cur_channel;
27795 +
27796 + ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
27797 + ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
27798 +
27799 + p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
27800 +
27801 + while (p2p_ie) {
27802 + u32 attr_contentlen = 0;
27803 + u8 *pattr = NULL;
27804 +
27805 + //Check P2P_ATTR_CH_LIST
27806 + if ((pattr=rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, NULL, (uint*)&attr_contentlen))!=NULL) {
27807 + int i;
27808 + u32 num_of_ch;
27809 + u8 *pattr_temp = pattr + 3 ;
27810 +
27811 + attr_contentlen -= 3;
27812 +
27813 + while (attr_contentlen>0) {
27814 + num_of_ch = *(pattr_temp+1);
27815 +
27816 + for(i=0; i<num_of_ch; i++) {
27817 + if (*(pattr_temp+2+i) == buddy_ch) {
27818 + DBG_871X(FUNC_ADPT_FMT" ch_list fit buddy_ch:%u\n", FUNC_ADPT_ARG(padapter), buddy_ch);
27819 + fit = _TRUE;
27820 + break;
27821 + }
27822 + }
27823 +
27824 + pattr_temp += (2+num_of_ch);
27825 + attr_contentlen -= (2+num_of_ch);
27826 + }
27827 + }
27828 +
27829 + //Get the next P2P IE
27830 + p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
27831 + }
27832 +#endif
27833 + return fit;
27834 +}
27835 +
27836 +static bool rtw_chk_p2pie_op_ch_with_buddy(_adapter *padapter, const u8 *frame_body, u32 len)
27837 +{
27838 + bool fit = _FALSE;
27839 +#ifdef CONFIG_CONCURRENT_MODE
27840 + u8 *ies, *p2p_ie;
27841 + u32 ies_len, p2p_ielen;
27842 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
27843 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
27844 + u8 buddy_ch = pbuddy_mlmeext->cur_channel;
27845 +
27846 + ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
27847 + ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
27848 +
27849 + p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
27850 +
27851 + while (p2p_ie) {
27852 + u32 attr_contentlen = 0;
27853 + u8 *pattr = NULL;
27854 +
27855 + //Check P2P_ATTR_OPERATING_CH
27856 + attr_contentlen = 0;
27857 + pattr = NULL;
27858 + if((pattr = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, (uint*)&attr_contentlen))!=NULL) {
27859 + if (*(pattr+4) == buddy_ch) {
27860 + DBG_871X(FUNC_ADPT_FMT" op_ch fit buddy_ch:%u\n", FUNC_ADPT_ARG(padapter), buddy_ch);
27861 + fit = _TRUE;
27862 + break;
27863 + }
27864 + }
27865 +
27866 + //Get the next P2P IE
27867 + p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
27868 + }
27869 +#endif
27870 + return fit;
27871 +}
27872 +
27873 +static void rtw_cfg80211_adjust_p2pie_channel(_adapter *padapter, const u8 *frame_body, u32 len)
27874 +{
27875 +#ifdef CONFIG_CONCURRENT_MODE
27876 + u8 *ies, *p2p_ie;
27877 + u32 ies_len, p2p_ielen;
27878 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
27879 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
27880 +
27881 + ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
27882 + ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
27883 +
27884 + p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
27885 +
27886 + while ( p2p_ie )
27887 + {
27888 + u32 attr_contentlen = 0;
27889 + u8 *pattr = NULL;
27890 +
27891 + //Check P2P_ATTR_CH_LIST
27892 + if((pattr=rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, NULL, (uint*)&attr_contentlen))!=NULL)
27893 + {
27894 + int i;
27895 + u32 num_of_ch;
27896 + u8 *pattr_temp = pattr + 3 ;
27897 +
27898 + attr_contentlen -= 3;
27899 +
27900 + while(attr_contentlen>0)
27901 + {
27902 + num_of_ch = *(pattr_temp+1);
27903 +
27904 + for(i=0; i<num_of_ch; i++)
27905 + *(pattr_temp+2+i) = pbuddy_mlmeext->cur_channel;//forcing to the same channel
27906 +
27907 + pattr_temp += (2+num_of_ch);
27908 + attr_contentlen -= (2+num_of_ch);
27909 + }
27910 + }
27911 +
27912 + //Check P2P_ATTR_OPERATING_CH
27913 + attr_contentlen = 0;
27914 + pattr = NULL;
27915 + if((pattr = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, (uint*)&attr_contentlen))!=NULL)
27916 + {
27917 + *(pattr+4) = pbuddy_mlmeext->cur_channel;//forcing to the same channel
27918 + }
27919 +
27920 + //Get the next P2P IE
27921 + p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
27922 +
27923 + }
27924 +
27925 +#endif
27926 +}
27927 +
27928 +#ifdef CONFIG_WFD
27929 +void rtw_append_wfd_ie(_adapter *padapter, u8 *buf, u32* len)
27930 +{
27931 + unsigned char *frame_body;
27932 + u8 category, action, OUI_Subtype, dialogToken=0;
27933 + u32 wfdielen = 0;
27934 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
27935 +
27936 + frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
27937 + category = frame_body[0];
27938 +
27939 + if(category == RTW_WLAN_CATEGORY_PUBLIC)
27940 + {
27941 + action = frame_body[1];
27942 + if (action == ACT_PUBLIC_VENDOR
27943 + && _rtw_memcmp(frame_body+2, P2P_OUI, 4) == _TRUE
27944 + )
27945 + {
27946 + OUI_Subtype = frame_body[6];
27947 + dialogToken = frame_body[7];
27948 + switch( OUI_Subtype )//OUI Subtype
27949 + {
27950 + case P2P_GO_NEGO_REQ:
27951 + {
27952 + wfdielen = build_nego_req_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
27953 + (*len) += wfdielen;
27954 + break;
27955 + }
27956 + case P2P_GO_NEGO_RESP:
27957 + {
27958 + wfdielen = build_nego_resp_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
27959 + (*len) += wfdielen;
27960 + break;
27961 + }
27962 + case P2P_GO_NEGO_CONF:
27963 + {
27964 + wfdielen = build_nego_confirm_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
27965 + (*len) += wfdielen;
27966 + break;
27967 + }
27968 + case P2P_INVIT_REQ:
27969 + {
27970 + wfdielen = build_invitation_req_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
27971 + (*len) += wfdielen;
27972 + break;
27973 + }
27974 + case P2P_INVIT_RESP:
27975 + {
27976 + wfdielen = build_invitation_resp_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
27977 + (*len) += wfdielen;
27978 + break;
27979 + }
27980 + case P2P_DEVDISC_REQ:
27981 + break;
27982 + case P2P_DEVDISC_RESP:
27983 +
27984 + break;
27985 + case P2P_PROVISION_DISC_REQ:
27986 + {
27987 + wfdielen = build_provdisc_req_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
27988 + (*len) += wfdielen;
27989 + break;
27990 + }
27991 + case P2P_PROVISION_DISC_RESP:
27992 + {
27993 + wfdielen = build_provdisc_resp_wfd_ie( &padapter->wdinfo, buf + ( *len ) );
27994 + (*len) += wfdielen;
27995 + break;
27996 + }
27997 + default:
27998 +
27999 + break;
28000 + }
28001 +
28002 + }
28003 +
28004 + }
28005 + else if(category == RTW_WLAN_CATEGORY_P2P)
28006 + {
28007 + OUI_Subtype = frame_body[5];
28008 + dialogToken = frame_body[6];
28009 +
28010 +#ifdef CONFIG_DEBUG_CFG80211
28011 + DBG_871X("ACTION_CATEGORY_P2P: OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
28012 + cpu_to_be32( *( ( u32* ) ( frame_body + 1 ) ) ), OUI_Subtype, dialogToken);
28013 +#endif
28014 +
28015 + switch(OUI_Subtype)
28016 + {
28017 + case P2P_NOTICE_OF_ABSENCE:
28018 +
28019 + break;
28020 + case P2P_PRESENCE_REQUEST:
28021 +
28022 + break;
28023 + case P2P_PRESENCE_RESPONSE:
28024 +
28025 + break;
28026 + case P2P_GO_DISC_REQUEST:
28027 +
28028 + break;
28029 + default:
28030 +
28031 + break;
28032 + }
28033 +
28034 + }
28035 + else
28036 + {
28037 + DBG_871X("%s, action frame category=%d\n", __func__, category);
28038 + //is_p2p_frame = (-1);
28039 + }
28040 +
28041 + return;
28042 +}
28043 +#endif
28044 +
28045 +u8 *dump_p2p_attr_ch_list(u8 *p2p_ie, uint p2p_ielen, u8 *buf, u32 buf_len)
28046 +{
28047 + uint attr_contentlen = 0;
28048 + u8 *pattr = NULL;
28049 + int w_sz = 0;
28050 + u8 ch_cnt = 0;
28051 + u8 ch_list[40];
28052 + bool continuous = _FALSE;
28053 +
28054 + if ((pattr=rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, NULL, &attr_contentlen))!=NULL) {
28055 + int i, j;
28056 + u32 num_of_ch;
28057 + u8 *pattr_temp = pattr + 3 ;
28058 +
28059 + attr_contentlen -= 3;
28060 +
28061 + _rtw_memset(ch_list, 0, 40);
28062 +
28063 + while (attr_contentlen>0) {
28064 + num_of_ch = *(pattr_temp+1);
28065 +
28066 + for(i=0; i<num_of_ch; i++) {
28067 + for (j=0;j<ch_cnt;j++) {
28068 + if (ch_list[j] == *(pattr_temp+2+i))
28069 + break;
28070 + }
28071 + if (j>=ch_cnt)
28072 + ch_list[ch_cnt++] = *(pattr_temp+2+i);
28073 +
28074 + }
28075 +
28076 + pattr_temp += (2+num_of_ch);
28077 + attr_contentlen -= (2+num_of_ch);
28078 + }
28079 +
28080 + for (j=0;j<ch_cnt;j++) {
28081 + if (j == 0) {
28082 + w_sz += snprintf(buf+w_sz, buf_len-w_sz, "%u", ch_list[j]);
28083 + } else if (ch_list[j] - ch_list[j-1] != 1) {
28084 + w_sz += snprintf(buf+w_sz, buf_len-w_sz, ", %u", ch_list[j]);
28085 + } else if (j != ch_cnt-1 && ch_list[j+1] - ch_list[j] == 1) {
28086 + /* empty */
28087 + } else {
28088 + w_sz += snprintf(buf+w_sz, buf_len-w_sz, "-%u", ch_list[j]);
28089 + }
28090 + }
28091 + }
28092 + return buf;
28093 +}
28094 +
28095 +/*
28096 + * return _TRUE if requester is GO, _FALSE if responder is GO
28097 + */
28098 +bool rtw_p2p_nego_intent_compare(u8 req, u8 resp)
28099 +{
28100 + if (req>>1 == resp >>1)
28101 + return req&0x01 ? _TRUE : _FALSE;
28102 + else if (req>>1 > resp>>1)
28103 + return _TRUE;
28104 + else
28105 + return _FALSE;
28106 +}
28107 +
28108 +int rtw_p2p_check_frames(_adapter *padapter, const u8 *buf, u32 len, u8 tx)
28109 +{
28110 + int is_p2p_frame = (-1);
28111 + unsigned char *frame_body;
28112 + u8 category, action, OUI_Subtype, dialogToken=0;
28113 + u8 *p2p_ie = NULL;
28114 + uint p2p_ielen = 0;
28115 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
28116 + int status = -1;
28117 + u8 ch_list_buf[128] = {'\0'};
28118 + int op_ch = -1;
28119 + int listen_ch = -1;
28120 + u8 intent = 0;
28121 +
28122 + frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
28123 + category = frame_body[0];
28124 + //just for check
28125 + if(category == RTW_WLAN_CATEGORY_PUBLIC)
28126 + {
28127 + action = frame_body[1];
28128 + if (action == ACT_PUBLIC_VENDOR
28129 + && _rtw_memcmp(frame_body+2, P2P_OUI, 4) == _TRUE
28130 + )
28131 + {
28132 + OUI_Subtype = frame_body[6];
28133 + dialogToken = frame_body[7];
28134 + is_p2p_frame = OUI_Subtype;
28135 + #ifdef CONFIG_DEBUG_CFG80211
28136 + DBG_871X("ACTION_CATEGORY_PUBLIC: ACT_PUBLIC_VENDOR, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
28137 + cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
28138 + #endif
28139 +
28140 + p2p_ie = rtw_get_p2p_ie(
28141 + (u8 *)buf+sizeof(struct rtw_ieee80211_hdr_3addr)+_PUBLIC_ACTION_IE_OFFSET_,
28142 + len-sizeof(struct rtw_ieee80211_hdr_3addr)-_PUBLIC_ACTION_IE_OFFSET_,
28143 + NULL, &p2p_ielen);
28144 +
28145 + switch( OUI_Subtype )//OUI Subtype
28146 + {
28147 + u8 *cont;
28148 + uint cont_len;
28149 + case P2P_GO_NEGO_REQ:
28150 + {
28151 + struct rtw_wdev_nego_info* nego_info = &pwdev_priv->nego_info;
28152 +
28153 + if (tx) {
28154 + #ifdef CONFIG_DRV_ISSUE_PROV_REQ // IOT FOR S2
28155 + if(pwdev_priv->provdisc_req_issued == _FALSE) {
28156 + rtw_cfg80211_issue_p2p_provision_request(padapter, buf, len);
28157 + pwdev_priv->provdisc_req_issued = _TRUE;
28158 + rtw_msleep_os(200);
28159 + }
28160 + #endif //CONFIG_DRV_ISSUE_PROV_REQ
28161 +
28162 + #ifdef CONFIG_CONCURRENT_MODE
28163 + if(check_buddy_fwstate(padapter, _FW_LINKED))
28164 + rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
28165 + #endif
28166 + }
28167 +
28168 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
28169 + op_ch = *(cont+4);
28170 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_LISTEN_CH, NULL, &cont_len)))
28171 + listen_ch = *(cont+4);
28172 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT, NULL, &cont_len)))
28173 + intent = *cont;
28174 +
28175 + if (nego_info->token != dialogToken)
28176 + rtw_wdev_nego_info_init(nego_info);
28177 +
28178 + _rtw_memcpy(nego_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN);
28179 + nego_info->active = tx ? 1 : 0;
28180 + nego_info->token = dialogToken;
28181 + nego_info->req_op_ch = op_ch;
28182 + nego_info->req_listen_ch = listen_ch;
28183 + nego_info->req_intent = intent;
28184 + nego_info->state = 0;
28185 +
28186 + dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
28187 + DBG_871X("RTW_%s:P2P_GO_NEGO_REQ, dialogToken=%d, intent:%u%s, listen_ch:%d, op_ch:%d, ch_list:%s\n",
28188 + (tx==_TRUE)?"Tx":"Rx", dialogToken, (intent>>1), intent&0x1 ? "+" : "-", listen_ch, op_ch, ch_list_buf);
28189 +
28190 + if (!tx) {
28191 + #ifdef CONFIG_CONCURRENT_MODE
28192 + if(check_buddy_fwstate(padapter, _FW_LINKED)
28193 + && rtw_chk_p2pie_ch_list_with_buddy(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr)) == _FALSE)
28194 + {
28195 + DBG_871X(FUNC_ADPT_FMT" ch_list has no intersect with buddy\n", FUNC_ADPT_ARG(padapter));
28196 + rtw_change_p2pie_ch_list(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr), 0);
28197 + }
28198 + #endif
28199 + }
28200 +
28201 + break;
28202 + }
28203 + case P2P_GO_NEGO_RESP:
28204 + {
28205 + struct rtw_wdev_nego_info* nego_info = &pwdev_priv->nego_info;
28206 +
28207 + if (tx) {
28208 + #ifdef CONFIG_CONCURRENT_MODE
28209 + if(check_buddy_fwstate(padapter, _FW_LINKED))
28210 + rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
28211 + #endif
28212 + }
28213 +
28214 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
28215 + op_ch = *(cont+4);
28216 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT, NULL, &cont_len)))
28217 + intent = *cont;
28218 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len)))
28219 + status = *cont;
28220 +
28221 + if (nego_info->token == dialogToken && nego_info->state == 0
28222 + && _rtw_memcmp(nego_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN) == _TRUE
28223 + ) {
28224 + nego_info->status = (status==-1) ? 0xff : status;
28225 + nego_info->rsp_op_ch= op_ch;
28226 + nego_info->rsp_intent = intent;
28227 + nego_info->state = 1;
28228 + if (status != 0)
28229 + nego_info->token = 0; /* init */
28230 + }
28231 +
28232 + dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
28233 + DBG_871X("RTW_%s:P2P_GO_NEGO_RESP, dialogToken=%d, intent:%u%s, status:%d, op_ch:%d, ch_list:%s\n",
28234 + (tx==_TRUE)?"Tx":"Rx", dialogToken, (intent>>1), intent&0x1 ? "+" : "-", status, op_ch, ch_list_buf);
28235 +
28236 + if (!tx) {
28237 + pwdev_priv->provdisc_req_issued = _FALSE;
28238 + #ifdef CONFIG_CONCURRENT_MODE
28239 + if(check_buddy_fwstate(padapter, _FW_LINKED)
28240 + && rtw_chk_p2pie_ch_list_with_buddy(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr)) == _FALSE)
28241 + {
28242 + DBG_871X(FUNC_ADPT_FMT" ch_list has no intersect with buddy\n", FUNC_ADPT_ARG(padapter));
28243 + rtw_change_p2pie_ch_list(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr), 0);
28244 + }
28245 + #endif
28246 + }
28247 +
28248 + break;
28249 + }
28250 + case P2P_GO_NEGO_CONF:
28251 + {
28252 + struct rtw_wdev_nego_info* nego_info = &pwdev_priv->nego_info;
28253 + bool is_go = _FALSE;
28254 +
28255 + if (tx) {
28256 + #ifdef CONFIG_CONCURRENT_MODE
28257 + if(check_buddy_fwstate(padapter, _FW_LINKED))
28258 + rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
28259 + #endif
28260 + }
28261 +
28262 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
28263 + op_ch = *(cont+4);
28264 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len)))
28265 + status = *cont;
28266 +
28267 + if (nego_info->token == dialogToken && nego_info->state == 1
28268 + && _rtw_memcmp(nego_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN) == _TRUE
28269 + ) {
28270 + nego_info->status = (status==-1) ? 0xff : status;
28271 + nego_info->conf_op_ch = (op_ch==-1) ? 0 : op_ch;
28272 + nego_info->state = 2;
28273 +
28274 + if (status == 0) {
28275 + if (rtw_p2p_nego_intent_compare(nego_info->req_intent, nego_info->rsp_intent) && tx)
28276 + is_go = _TRUE;
28277 + }
28278 +
28279 + nego_info->token = 0; /* init */
28280 + }
28281 +
28282 + dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
28283 + DBG_871X("RTW_%s:P2P_GO_NEGO_CONF, dialogToken=%d, status:%d, op_ch:%d, ch_list:%s\n",
28284 + (tx==_TRUE)?"Tx":"Rx", dialogToken, status, op_ch, ch_list_buf);
28285 +
28286 + if (!tx) {
28287 + }
28288 +
28289 + break;
28290 + }
28291 + case P2P_INVIT_REQ:
28292 + {
28293 + struct rtw_wdev_invit_info* invit_info = &pwdev_priv->invit_info;
28294 + int flags = -1;
28295 +
28296 + if (tx) {
28297 + #ifdef CONFIG_CONCURRENT_MODE
28298 + if(check_buddy_fwstate(padapter, _FW_LINKED))
28299 + rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
28300 + #endif
28301 + }
28302 +
28303 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_INVITATION_FLAGS, NULL, &cont_len)))
28304 + flags = *cont;
28305 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
28306 + op_ch = *(cont+4);
28307 +
28308 + if (invit_info->token != dialogToken)
28309 + rtw_wdev_invit_info_init(invit_info);
28310 +
28311 + _rtw_memcpy(invit_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN);
28312 + invit_info->active = tx ? 1 : 0;
28313 + invit_info->token = dialogToken;
28314 + invit_info->flags = (flags==-1) ? 0x0 : flags;
28315 + invit_info->req_op_ch= op_ch;
28316 + invit_info->state = 0;
28317 +
28318 + dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
28319 + DBG_871X("RTW_%s:P2P_INVIT_REQ, dialogToken=%d, flags:0x%02x, op_ch:%d, ch_list:%s\n",
28320 + (tx==_TRUE)?"Tx":"Rx", dialogToken, flags, op_ch, ch_list_buf);
28321 +
28322 + if (!tx) {
28323 + #ifdef CONFIG_CONCURRENT_MODE
28324 + if(check_buddy_fwstate(padapter, _FW_LINKED)) {
28325 + if (op_ch != -1 && rtw_chk_p2pie_op_ch_with_buddy(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr)) == _FALSE) {
28326 + DBG_871X(FUNC_ADPT_FMT" op_ch:%u has no intersect with buddy\n", FUNC_ADPT_ARG(padapter), op_ch);
28327 + rtw_change_p2pie_ch_list(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr), 0);
28328 + } else if (rtw_chk_p2pie_ch_list_with_buddy(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr)) == _FALSE) {
28329 + DBG_871X(FUNC_ADPT_FMT" ch_list has no intersect with buddy\n", FUNC_ADPT_ARG(padapter));
28330 + rtw_change_p2pie_ch_list(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr), 0);
28331 + }
28332 + }
28333 + #endif
28334 + }
28335 +
28336 + break;
28337 + }
28338 + case P2P_INVIT_RESP:
28339 + {
28340 + struct rtw_wdev_invit_info* invit_info = &pwdev_priv->invit_info;
28341 +
28342 + if (tx) {
28343 + #ifdef CONFIG_CONCURRENT_MODE
28344 + if(check_buddy_fwstate(padapter, _FW_LINKED))
28345 + rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
28346 + #endif
28347 + }
28348 +
28349 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len)))
28350 + {
28351 +#ifdef CONFIG_P2P_INVITE_IOT
28352 + if(tx && *cont==7)
28353 + {
28354 + DBG_871X("TX_P2P_INVITE_RESP, status is no common channel, change to unknown group\n");
28355 + *cont = 8; //unknow group status
28356 + }
28357 +#endif //CONFIG_P2P_INVITE_IOT
28358 + status = *cont;
28359 + }
28360 + if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
28361 + op_ch = *(cont+4);
28362 +
28363 + if (invit_info->token == dialogToken && invit_info->state == 0
28364 + && _rtw_memcmp(invit_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN) == _TRUE
28365 + ) {
28366 + invit_info->status = (status==-1) ? 0xff : status;
28367 + invit_info->rsp_op_ch= op_ch;
28368 + invit_info->state = 1;
28369 + invit_info->token = 0; /* init */
28370 + }
28371 +
28372 + dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
28373 + DBG_871X("RTW_%s:P2P_INVIT_RESP, dialogToken=%d, status:%d, op_ch:%d, ch_list:%s\n",
28374 + (tx==_TRUE)?"Tx":"Rx", dialogToken, status, op_ch, ch_list_buf);
28375 +
28376 + if (!tx) {
28377 + }
28378 +
28379 + break;
28380 + }
28381 + case P2P_DEVDISC_REQ:
28382 + DBG_871X("RTW_%s:P2P_DEVDISC_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
28383 + break;
28384 + case P2P_DEVDISC_RESP:
28385 + cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len);
28386 + DBG_871X("RTW_%s:P2P_DEVDISC_RESP, dialogToken=%d, status:%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken, cont?*cont:-1);
28387 + break;
28388 + case P2P_PROVISION_DISC_REQ:
28389 + {
28390 + size_t frame_body_len = len - sizeof(struct rtw_ieee80211_hdr_3addr);
28391 + u8 *p2p_ie;
28392 + uint p2p_ielen = 0;
28393 + uint contentlen = 0;
28394 +
28395 + DBG_871X("RTW_%s:P2P_PROVISION_DISC_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
28396 +
28397 + //if(tx)
28398 + {
28399 + pwdev_priv->provdisc_req_issued = _FALSE;
28400 +
28401 + if( (p2p_ie=rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, frame_body_len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen)))
28402 + {
28403 +
28404 + if(rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, NULL, &contentlen))
28405 + {
28406 + pwdev_priv->provdisc_req_issued = _FALSE;//case: p2p_client join p2p GO
28407 + }
28408 + else
28409 + {
28410 + #ifdef CONFIG_DEBUG_CFG80211
28411 + DBG_871X("provdisc_req_issued is _TRUE\n");
28412 + #endif //CONFIG_DEBUG_CFG80211
28413 + pwdev_priv->provdisc_req_issued = _TRUE;//case: p2p_devices connection before Nego req.
28414 + }
28415 +
28416 + }
28417 + }
28418 + }
28419 + break;
28420 + case P2P_PROVISION_DISC_RESP:
28421 + DBG_871X("RTW_%s:P2P_PROVISION_DISC_RESP, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
28422 + break;
28423 + default:
28424 + DBG_871X("RTW_%s:OUI_Subtype=%d, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", OUI_Subtype, dialogToken);
28425 + break;
28426 + }
28427 +
28428 + }
28429 +
28430 + }
28431 + else if(category == RTW_WLAN_CATEGORY_P2P)
28432 + {
28433 + OUI_Subtype = frame_body[5];
28434 + dialogToken = frame_body[6];
28435 +
28436 + #ifdef CONFIG_DEBUG_CFG80211
28437 + DBG_871X("ACTION_CATEGORY_P2P: OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
28438 + cpu_to_be32( *( ( u32* ) ( frame_body + 1 ) ) ), OUI_Subtype, dialogToken);
28439 + #endif
28440 +
28441 + is_p2p_frame = OUI_Subtype;
28442 +
28443 + switch(OUI_Subtype)
28444 + {
28445 + case P2P_NOTICE_OF_ABSENCE:
28446 + DBG_871X("RTW_%s:P2P_NOTICE_OF_ABSENCE, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
28447 + break;
28448 + case P2P_PRESENCE_REQUEST:
28449 + DBG_871X("RTW_%s:P2P_PRESENCE_REQUEST, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
28450 + break;
28451 + case P2P_PRESENCE_RESPONSE:
28452 + DBG_871X("RTW_%s:P2P_PRESENCE_RESPONSE, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
28453 + break;
28454 + case P2P_GO_DISC_REQUEST:
28455 + DBG_871X("RTW_%s:P2P_GO_DISC_REQUEST, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
28456 + break;
28457 + default:
28458 + DBG_871X("RTW_%s:OUI_Subtype=%d, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", OUI_Subtype, dialogToken);
28459 + break;
28460 + }
28461 +
28462 + }
28463 + else
28464 + {
28465 + DBG_871X("RTW_%s:action frame category=%d\n", (tx==_TRUE)?"TX":"RX", category);
28466 + }
28467 +
28468 + return is_p2p_frame;
28469 +}
28470 +
28471 +void rtw_init_cfg80211_wifidirect_info( _adapter* padapter)
28472 +{
28473 + struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
28474 +
28475 + _rtw_memset(pcfg80211_wdinfo, 0x00, sizeof(struct cfg80211_wifidirect_info) );
28476 +
28477 + _init_timer( &pcfg80211_wdinfo->remain_on_ch_timer, padapter->pnetdev, ro_ch_timer_process, padapter );
28478 +}
28479 +#endif //CONFIG_IOCTL_CFG80211
28480 +
28481 +void p2p_protocol_wk_hdl(_adapter *padapter, int intCmdType)
28482 {
28483 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
28484
28485 @@ -2882,14 +4396,61 @@ _func_enter_;
28486 }
28487 case P2P_PRE_TX_PROVDISC_PROCESS_WK:
28488 {
28489 +#ifdef CONFIG_CONCURRENT_MODE
28490 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
28491 + {
28492 + p2p_concurrent_handler( padapter );
28493 + }
28494 + else
28495 + {
28496 + pre_tx_provdisc_handler( padapter );
28497 + }
28498 +#else
28499 pre_tx_provdisc_handler( padapter );
28500 +#endif
28501 break;
28502 }
28503 + case P2P_PRE_TX_INVITEREQ_PROCESS_WK:
28504 + {
28505 +#ifdef CONFIG_CONCURRENT_MODE
28506 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
28507 + {
28508 + p2p_concurrent_handler( padapter );
28509 + }
28510 + else
28511 + {
28512 + pre_tx_invitereq_handler( padapter );
28513 + }
28514 +#else
28515 + pre_tx_invitereq_handler( padapter );
28516 +#endif
28517 + break;
28518 + }
28519 case P2P_PRE_TX_NEGOREQ_PROCESS_WK:
28520 {
28521 +#ifdef CONFIG_CONCURRENT_MODE
28522 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
28523 + {
28524 + p2p_concurrent_handler( padapter );
28525 + }
28526 + else
28527 + {
28528 + pre_tx_negoreq_handler( padapter );
28529 + }
28530 +#else
28531 pre_tx_negoreq_handler( padapter );
28532 +#endif
28533 break;
28534 }
28535 +#ifdef CONFIG_P2P
28536 +#ifdef CONFIG_CONCURRENT_MODE
28537 + case P2P_AP_P2P_CH_SWITCH_PROCESS_WK:
28538 + {
28539 + p2p_concurrent_handler( padapter );
28540 + break;
28541 + }
28542 +#endif
28543 +#endif
28544 #ifdef CONFIG_IOCTL_CFG80211
28545 case P2P_RO_CH_WK:
28546 {
28547 @@ -2897,12 +4458,124 @@ _func_enter_;
28548 break;
28549 }
28550 #endif //CONFIG_IOCTL_CFG80211
28551 +
28552 }
28553
28554 _func_exit_;
28555 }
28556
28557 +#ifdef CONFIG_P2P_PS
28558 +void process_p2p_ps_ie(PADAPTER padapter, u8 *IEs, u32 IELength)
28559 +{
28560 + u8 * ies;
28561 + u32 ies_len;
28562 + u8 * p2p_ie;
28563 + u32 p2p_ielen = 0;
28564 + u8 noa_attr[MAX_P2P_IE_LEN] = { 0x00 };// NoA length should be n*(13) + 2
28565 + u32 attr_contentlen = 0;
28566 +
28567 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
28568 + u8 find_p2p = _FALSE, find_p2p_ps = _FALSE;
28569 + u8 noa_offset, noa_num, noa_index;
28570 +
28571 +_func_enter_;
28572 +
28573 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
28574 + {
28575 + return;
28576 + }
28577 +
28578 +#ifdef CONFIG_CONCURRENT_MODE
28579 + if(padapter->iface_type != IFACE_PORT0)
28580 + return;
28581 +#endif
28582 + if(IELength <= _BEACON_IE_OFFSET_)
28583 + return;
28584 +
28585 + ies = IEs + _BEACON_IE_OFFSET_;
28586 + ies_len = IELength - _BEACON_IE_OFFSET_;
28587 +
28588 + p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen);
28589 +
28590 + while(p2p_ie)
28591 + {
28592 + find_p2p = _TRUE;
28593 + // Get Notice of Absence IE.
28594 + if(rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_NOA, noa_attr, &attr_contentlen))
28595 + {
28596 + find_p2p_ps = _TRUE;
28597 + noa_index = noa_attr[0];
28598 +
28599 + if( (pwdinfo->p2p_ps_mode == P2P_PS_NONE) ||
28600 + (noa_index != pwdinfo->noa_index) )// if index change, driver should reconfigure related setting.
28601 + {
28602 + pwdinfo->noa_index = noa_index;
28603 + pwdinfo->opp_ps = noa_attr[1] >> 7;
28604 + pwdinfo->ctwindow = noa_attr[1] & 0x7F;
28605 +
28606 + noa_offset = 2;
28607 + noa_num = 0;
28608 + // NoA length should be n*(13) + 2
28609 + if(attr_contentlen > 2)
28610 + {
28611 + while(noa_offset < attr_contentlen)
28612 + {
28613 + //_rtw_memcpy(&wifidirect_info->noa_count[noa_num], &noa_attr[noa_offset], 1);
28614 + pwdinfo->noa_count[noa_num] = noa_attr[noa_offset];
28615 + noa_offset += 1;
28616 +
28617 + _rtw_memcpy(&pwdinfo->noa_duration[noa_num], &noa_attr[noa_offset], 4);
28618 + noa_offset += 4;
28619 +
28620 + _rtw_memcpy(&pwdinfo->noa_interval[noa_num], &noa_attr[noa_offset], 4);
28621 + noa_offset += 4;
28622 +
28623 + _rtw_memcpy(&pwdinfo->noa_start_time[noa_num], &noa_attr[noa_offset], 4);
28624 + noa_offset += 4;
28625 +
28626 + noa_num++;
28627 + }
28628 + }
28629 + pwdinfo->noa_num = noa_num;
28630 +
28631 + if( pwdinfo->opp_ps == 1 )
28632 + {
28633 + pwdinfo->p2p_ps_mode = P2P_PS_CTWINDOW;
28634 + // driver should wait LPS for entering CTWindow
28635 + if(padapter->pwrctrlpriv.bFwCurrentInPSMode == _TRUE)
28636 + {
28637 + p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1);
28638 + }
28639 + }
28640 + else if( pwdinfo->noa_num > 0 )
28641 + {
28642 + pwdinfo->p2p_ps_mode = P2P_PS_NOA;
28643 + p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1);
28644 + }
28645 + else if( pwdinfo->p2p_ps_mode > P2P_PS_NONE)
28646 + {
28647 + p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
28648 + }
28649 + }
28650 +
28651 + break; // find target, just break.
28652 + }
28653 +
28654 + //Get the next P2P IE
28655 + p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
28656 +
28657 + }
28658 +
28659 + if(find_p2p == _TRUE)
28660 + {
28661 + if( (pwdinfo->p2p_ps_mode > P2P_PS_NONE) && (find_p2p_ps == _FALSE) )
28662 + {
28663 + p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
28664 + }
28665 + }
28666
28667 +_func_exit_;
28668 +}
28669
28670 void p2p_ps_wk_hdl(_adapter *padapter, u8 p2p_ps_state)
28671 {
28672 @@ -2911,42 +4584,53 @@ void p2p_ps_wk_hdl(_adapter *padapter, u8 p2p_ps_state)
28673
28674 _func_enter_;
28675
28676 - // Pre action for p2p state
28677 switch(p2p_ps_state)
28678 {
28679 - case P2P_PS_ENABLE:
28680 - if( pwdinfo->ctwindow > 0 )
28681 + case P2P_PS_DISABLE:
28682 + pwdinfo->p2p_ps_state = p2p_ps_state;
28683 +
28684 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_P2P_PS_OFFLOAD, (u8 *)(&p2p_ps_state));
28685 +
28686 + pwdinfo->noa_index = 0;
28687 + pwdinfo->ctwindow = 0;
28688 + pwdinfo->opp_ps = 0;
28689 + pwdinfo->noa_num = 0;
28690 + pwdinfo->p2p_ps_mode = P2P_PS_NONE;
28691 + if(padapter->pwrctrlpriv.bFwCurrentInPSMode == _TRUE)
28692 {
28693 - if(pwrpriv->smart_ps != 0)
28694 + if(pwrpriv->smart_ps == 0)
28695 {
28696 - pwrpriv->smart_ps = 0;
28697 - DBG_871X("%s(): Enter CTW, change SmartPS\n", __FUNCTION__);
28698 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(padapter->pwrctrlpriv.pwr_mode)));
28699 + pwrpriv->smart_ps = 2;
28700 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(padapter->pwrctrlpriv.pwr_mode)));
28701 }
28702 }
28703 break;
28704 - default:
28705 + case P2P_PS_ENABLE:
28706 + if (pwdinfo->p2p_ps_mode > P2P_PS_NONE) {
28707 + pwdinfo->p2p_ps_state = p2p_ps_state;
28708 +
28709 + if( pwdinfo->ctwindow > 0 )
28710 + {
28711 + if(pwrpriv->smart_ps != 0)
28712 + {
28713 + pwrpriv->smart_ps = 0;
28714 + DBG_871X("%s(): Enter CTW, change SmartPS\n", __FUNCTION__);
28715 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(padapter->pwrctrlpriv.pwr_mode)));
28716 + }
28717 + }
28718 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_P2P_PS_OFFLOAD, (u8 *)(&p2p_ps_state));
28719 + }
28720 break;
28721 - }
28722 -
28723 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_P2P_PS_OFFLOAD, (u8 *)(&p2p_ps_state));
28724 -
28725 - // clear P2P SW status
28726 - if(p2p_ps_state == P2P_PS_DISABLE)
28727 - {
28728 - pwdinfo->noa_index = 0;
28729 - pwdinfo->ctwindow = 0;
28730 - pwdinfo->opp_ps = 0;
28731 - pwdinfo->noa_num = 0;
28732 - pwdinfo->p2p_ps_enable = _FALSE;
28733 - if(padapter->pwrctrlpriv.bFwCurrentInPSMode == _TRUE)
28734 - {
28735 - if(pwrpriv->smart_ps == 0)
28736 - {
28737 - pwrpriv->smart_ps = 2;
28738 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(padapter->pwrctrlpriv.pwr_mode)));
28739 + case P2P_PS_SCAN:
28740 + case P2P_PS_SCAN_DONE:
28741 + case P2P_PS_ALLSTASLEEP:
28742 + if (pwdinfo->p2p_ps_mode > P2P_PS_NONE) {
28743 + pwdinfo->p2p_ps_state = p2p_ps_state;
28744 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_P2P_PS_OFFLOAD, (u8 *)(&p2p_ps_state));
28745 }
28746 - }
28747 + break;
28748 + default:
28749 + break;
28750 }
28751
28752 _func_exit_;
28753 @@ -2962,44 +4646,41 @@ u8 p2p_ps_wk_cmd(_adapter*padapter, u8 p2p_ps_state, u8 enqueue)
28754
28755 _func_enter_;
28756
28757 - if ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) ||
28758 - ( pwdinfo->p2p_ps == p2p_ps_state ) )
28759 + if ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)
28760 +#ifdef CONFIG_CONCURRENT_MODE
28761 + || (padapter->iface_type != IFACE_PORT0)
28762 +#endif
28763 + )
28764 {
28765 return res;
28766 }
28767
28768 - // driver only perform p2p ps when GO have Opp_Ps or NoA
28769 - if( pwdinfo->p2p_ps_enable )
28770 + if(enqueue)
28771 {
28772 - pwdinfo->p2p_ps = p2p_ps_state;
28773 -
28774 - if(enqueue)
28775 - {
28776 - ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
28777 - if(ph2c==NULL){
28778 - res= _FAIL;
28779 - goto exit;
28780 - }
28781 -
28782 - pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
28783 - if(pdrvextra_cmd_parm==NULL){
28784 - rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
28785 - res= _FAIL;
28786 - goto exit;
28787 - }
28788 + ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
28789 + if(ph2c==NULL){
28790 + res= _FAIL;
28791 + goto exit;
28792 + }
28793 +
28794 + pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
28795 + if(pdrvextra_cmd_parm==NULL){
28796 + rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
28797 + res= _FAIL;
28798 + goto exit;
28799 + }
28800
28801 - pdrvextra_cmd_parm->ec_id = P2P_PS_WK_CID;
28802 - pdrvextra_cmd_parm->type_size = p2p_ps_state;
28803 - pdrvextra_cmd_parm->pbuf = NULL;
28804 + pdrvextra_cmd_parm->ec_id = P2P_PS_WK_CID;
28805 + pdrvextra_cmd_parm->type_size = p2p_ps_state;
28806 + pdrvextra_cmd_parm->pbuf = NULL;
28807
28808 - init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
28809 + init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
28810
28811 - res = rtw_enqueue_cmd(pcmdpriv, ph2c);
28812 - }
28813 - else
28814 - {
28815 - p2p_ps_wk_hdl(padapter, p2p_ps_state);
28816 - }
28817 + res = rtw_enqueue_cmd(pcmdpriv, ph2c);
28818 + }
28819 + else
28820 + {
28821 + p2p_ps_wk_hdl(padapter, p2p_ps_state);
28822 }
28823
28824 exit:
28825 @@ -3009,6 +4690,45 @@ _func_exit_;
28826 return res;
28827
28828 }
28829 +#endif // CONFIG_P2P_PS
28830 +
28831 +static void reset_ch_sitesurvey_timer_process (void *FunctionContext)
28832 +{
28833 + _adapter *adapter = (_adapter *)FunctionContext;
28834 + struct wifidirect_info *pwdinfo = &adapter->wdinfo;
28835 +
28836 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
28837 + return;
28838 +
28839 + DBG_871X( "[%s] In\n", __FUNCTION__ );
28840 + // Reset the operation channel information
28841 + pwdinfo->rx_invitereq_info.operation_ch[0] = 0;
28842 +#ifdef P2P_OP_CHECK_SOCIAL_CH
28843 + pwdinfo->rx_invitereq_info.operation_ch[1] = 0;
28844 + pwdinfo->rx_invitereq_info.operation_ch[2] = 0;
28845 + pwdinfo->rx_invitereq_info.operation_ch[3] = 0;
28846 +#endif //P2P_OP_CHECK_SOCIAL_CH
28847 + pwdinfo->rx_invitereq_info.scan_op_ch_only = 0;
28848 +}
28849 +
28850 +static void reset_ch_sitesurvey_timer_process2 (void *FunctionContext)
28851 +{
28852 + _adapter *adapter = (_adapter *)FunctionContext;
28853 + struct wifidirect_info *pwdinfo = &adapter->wdinfo;
28854 +
28855 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
28856 + return;
28857 +
28858 + DBG_871X( "[%s] In\n", __FUNCTION__ );
28859 + // Reset the operation channel information
28860 + pwdinfo->p2p_info.operation_ch[0] = 0;
28861 +#ifdef P2P_OP_CHECK_SOCIAL_CH
28862 + pwdinfo->p2p_info.operation_ch[1] = 0;
28863 + pwdinfo->p2p_info.operation_ch[2] = 0;
28864 + pwdinfo->p2p_info.operation_ch[3] = 0;
28865 +#endif //P2P_OP_CHECK_SOCIAL_CH
28866 + pwdinfo->p2p_info.scan_op_ch_only = 0;
28867 +}
28868
28869 static void restore_p2p_state_timer_process (void *FunctionContext)
28870 {
28871 @@ -3042,7 +4762,7 @@ static void pre_tx_scan_timer_process (void *FunctionContext)
28872 if ( _TRUE == pwdinfo->tx_prov_disc_info.benable ) // the provision discovery request frame is trigger to send or not
28873 {
28874 p2p_protocol_wk_cmd( adapter, P2P_PRE_TX_PROVDISC_PROCESS_WK );
28875 - //issue_probereq_p2p( adapter );
28876 + //issue_probereq_p2p(adapter, NULL);
28877 //_set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
28878 }
28879 }
28880 @@ -3051,10 +4771,17 @@ static void pre_tx_scan_timer_process (void *FunctionContext)
28881 if ( _TRUE == pwdinfo->nego_req_info.benable )
28882 {
28883 p2p_protocol_wk_cmd( adapter, P2P_PRE_TX_NEGOREQ_PROCESS_WK );
28884 - //issue_probereq_p2p( adapter );
28885 + //issue_probereq_p2p(adapter, NULL);
28886 //_set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
28887 }
28888 }
28889 + else if ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_INVITE_REQ ) )
28890 + {
28891 + if ( _TRUE == pwdinfo->invitereq_info.benable )
28892 + {
28893 + p2p_protocol_wk_cmd( adapter, P2P_PRE_TX_INVITEREQ_PROCESS_WK );
28894 + }
28895 + }
28896 else
28897 {
28898 DBG_8192C( "[%s] p2p_state is %d, ignore!!\n", __FUNCTION__, rtw_p2p_state(pwdinfo) );
28899 @@ -3076,69 +4803,167 @@ static void find_phase_timer_process (void *FunctionContext)
28900 p2p_protocol_wk_cmd( adapter, P2P_FIND_PHASE_WK );
28901 }
28902
28903 -#ifdef CONFIG_IOCTL_CFG80211
28904 -static void ro_ch_timer_process (void *FunctionContext)
28905 +#ifdef CONFIG_CONCURRENT_MODE
28906 +void ap_p2p_switch_timer_process (void *FunctionContext)
28907 {
28908 _adapter *adapter = (_adapter *)FunctionContext;
28909 + struct wifidirect_info *pwdinfo = &adapter->wdinfo;
28910 +#ifdef CONFIG_IOCTL_CFG80211
28911 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(adapter->rtw_wdev);
28912 +#endif
28913
28914 - //printk("%s \n", __FUNCTION__);
28915 -
28916 - p2p_protocol_wk_cmd( adapter, P2P_RO_CH_WK);
28917 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
28918 + return;
28919 +
28920 +#ifdef CONFIG_IOCTL_CFG80211
28921 + ATOMIC_SET(&pwdev_priv->switch_ch_to, 1);
28922 +#endif
28923 +
28924 + p2p_protocol_wk_cmd( adapter, P2P_AP_P2P_CH_SWITCH_PROCESS_WK );
28925 }
28926 +#endif
28927
28928 -void rtw_init_cfg80211_wifidirect_info( _adapter* padapter)
28929 +void reset_global_wifidirect_info( _adapter* padapter )
28930 {
28931 - struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
28932 + struct wifidirect_info *pwdinfo;
28933
28934 - _rtw_memset(pcfg80211_wdinfo, 0x00, sizeof(struct cfg80211_wifidirect_info) );
28935 -
28936 - _init_timer( &pcfg80211_wdinfo->remain_on_ch_timer, padapter->pnetdev, ro_ch_timer_process, padapter );
28937 + pwdinfo = &padapter->wdinfo;
28938 + pwdinfo->persistent_supported = 0;
28939 + pwdinfo->session_available = _TRUE;
28940 + pwdinfo->wfd_tdls_enable = 0;
28941 + pwdinfo->wfd_tdls_weaksec = 0;
28942 +}
28943 +
28944 +#ifdef CONFIG_WFD
28945 +int rtw_init_wifi_display_info(_adapter* padapter)
28946 +{
28947 + int res = _SUCCESS;
28948 + struct wifi_display_info *pwfd_info = &padapter->wfd_info;
28949 +
28950 + // Used in P2P and TDLS
28951 + pwfd_info->rtsp_ctrlport = 554;
28952 + pwfd_info->peer_rtsp_ctrlport = 0; // Reset to 0
28953 + pwfd_info->wfd_enable = _FALSE;
28954 + pwfd_info->wfd_device_type = WFD_DEVINFO_PSINK;
28955 + pwfd_info->scan_result_type = SCAN_RESULT_P2P_ONLY;
28956 +
28957 + // Used in P2P
28958 + pwfd_info->peer_session_avail = _TRUE;
28959 + pwfd_info->wfd_pc = _FALSE;
28960 +
28961 + // Used in TDLS
28962 + _rtw_memset( pwfd_info->ip_address, 0x00, 4 );
28963 + _rtw_memset( pwfd_info->peer_ip_address, 0x00, 4 );
28964 + return res;
28965 +
28966 +}
28967 +#endif //CONFIG_WFD
28968 +
28969 +void rtw_init_wifidirect_timers(_adapter* padapter)
28970 +{
28971 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
28972 +
28973 + _init_timer( &pwdinfo->find_phase_timer, padapter->pnetdev, find_phase_timer_process, padapter );
28974 + _init_timer( &pwdinfo->restore_p2p_state_timer, padapter->pnetdev, restore_p2p_state_timer_process, padapter );
28975 + _init_timer( &pwdinfo->pre_tx_scan_timer, padapter->pnetdev, pre_tx_scan_timer_process, padapter );
28976 + _init_timer( &pwdinfo->reset_ch_sitesurvey, padapter->pnetdev, reset_ch_sitesurvey_timer_process, padapter );
28977 + _init_timer( &pwdinfo->reset_ch_sitesurvey2, padapter->pnetdev, reset_ch_sitesurvey_timer_process2, padapter );
28978 +#ifdef CONFIG_CONCURRENT_MODE
28979 + _init_timer( &pwdinfo->ap_p2p_switch_timer, padapter->pnetdev, ap_p2p_switch_timer_process, padapter );
28980 +#endif
28981 +}
28982 +
28983 +void rtw_init_wifidirect_addrs(_adapter* padapter, u8 *dev_addr, u8 *iface_addr)
28984 +{
28985 +#ifdef CONFIG_P2P
28986 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
28987 +
28988 + /*init device&interface address */
28989 + if (dev_addr) {
28990 + _rtw_memcpy(pwdinfo->device_addr, dev_addr, ETH_ALEN);
28991 + }
28992 + if (iface_addr) {
28993 + _rtw_memcpy(pwdinfo->interface_addr, iface_addr, ETH_ALEN);
28994 + }
28995 +#endif
28996 }
28997 -#endif //CONFIG_IOCTL_CFG80211
28998
28999 void init_wifidirect_info( _adapter* padapter, enum P2P_ROLE role)
29000 {
29001 struct wifidirect_info *pwdinfo;
29002 +#ifdef CONFIG_WFD
29003 + struct wifi_display_info *pwfd_info = &padapter->wfd_info;
29004 +#endif
29005 +#ifdef CONFIG_CONCURRENT_MODE
29006 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
29007 + struct wifidirect_info *pbuddy_wdinfo;
29008 + struct mlme_priv *pbuddy_mlmepriv;
29009 + struct mlme_ext_priv *pbuddy_mlmeext;
29010 +#endif
29011
29012 pwdinfo = &padapter->wdinfo;
29013
29014 pwdinfo->padapter = padapter;
29015 -
29016 - //init device&interface address
29017 - _rtw_memcpy(pwdinfo->device_addr, myid(&(padapter->eeprompriv)), ETH_ALEN);
29018 - _rtw_memcpy(pwdinfo->interface_addr, myid(&(padapter->eeprompriv)), ETH_ALEN);
29019
29020 // 1, 6, 11 are the social channel defined in the WiFi Direct specification.
29021 pwdinfo->social_chan[0] = 1;
29022 pwdinfo->social_chan[1] = 6;
29023 pwdinfo->social_chan[2] = 11;
29024 pwdinfo->social_chan[3] = 0; // channel 0 for scanning ending in site survey function.
29025 -
29026 - // Use the channel 11 as the listen channel
29027 - pwdinfo->listen_channel = 11;
29028 +
29029 +#ifdef CONFIG_CONCURRENT_MODE
29030 + if (pbuddy_adapter) {
29031 + pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
29032 + pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
29033 + pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
29034 + }
29035 +
29036 + if ( ( check_buddy_fwstate(padapter, _FW_LINKED ) == _TRUE ) &&
29037 + ( ( pbuddy_mlmeext->cur_channel == 1) || ( pbuddy_mlmeext->cur_channel == 6 ) || ( pbuddy_mlmeext->cur_channel == 11 ) )
29038 + )
29039 + {
29040 + // Use the AP's channel as the listen channel
29041 + // This will avoid the channel switch between AP's channel and listen channel.
29042 + pwdinfo->listen_channel = pbuddy_mlmeext->cur_channel;
29043 + }
29044 + else
29045 +#endif //CONFIG_CONCURRENT_MODE
29046 + {
29047 + // Use the channel 11 as the listen channel
29048 + pwdinfo->listen_channel = 11;
29049 + }
29050
29051 if (role == P2P_ROLE_DEVICE)
29052 {
29053 rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
29054 - rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
29055 + #ifdef CONFIG_CONCURRENT_MODE
29056 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) == _TRUE )
29057 + {
29058 + rtw_p2p_set_state(pwdinfo, P2P_STATE_IDLE);
29059 + }
29060 + else
29061 + #endif
29062 + {
29063 + rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
29064 + }
29065 pwdinfo->intent = 1;
29066 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_LISTEN);
29067 }
29068 else if (role == P2P_ROLE_CLIENT)
29069 {
29070 rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
29071 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
29072 pwdinfo->intent = 1;
29073 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
29074 }
29075 else if (role == P2P_ROLE_GO)
29076 {
29077 rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
29078 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
29079 pwdinfo->intent = 15;
29080 + rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
29081 }
29082
29083 - //rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_NONE);
29084 - rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_LISTEN);
29085 -
29086 // Use the OFDM rate in the P2P probe response frame. ( 6(B), 9(B), 12, 18, 24, 36, 48, 54 )
29087 pwdinfo->support_rate[0] = 0x8c; // 6(B)
29088 pwdinfo->support_rate[1] = 0x92; // 9(B)
29089 @@ -3152,12 +4977,10 @@ void init_wifidirect_info( _adapter* padapter, enum P2P_ROLE role)
29090 _rtw_memcpy( ( void* ) pwdinfo->p2p_wildcard_ssid, "DIRECT-", 7 );
29091
29092 _rtw_memset( pwdinfo->device_name, 0x00, WPS_MAX_DEVICE_NAME_LEN );
29093 - _rtw_memcpy( pwdinfo->device_name, "Realtek DMP Device", 18 );
29094 - pwdinfo->device_name_len = 18;
29095 + pwdinfo->device_name_len = 0;
29096
29097 _rtw_memset( &pwdinfo->invitereq_info, 0x00, sizeof( struct tx_invite_req_info ) );
29098 pwdinfo->invitereq_info.token = 3; // Token used for P2P invitation request frame.
29099 - pwdinfo->invitereq_info.peer_operation_ch = pwdinfo->listen_channel;
29100
29101 _rtw_memset( &pwdinfo->inviteresp_info, 0x00, sizeof( struct tx_invite_resp_info ) );
29102 pwdinfo->inviteresp_info.token = 0;
29103 @@ -3165,10 +4988,6 @@ void init_wifidirect_info( _adapter* padapter, enum P2P_ROLE role)
29104 pwdinfo->profileindex = 0;
29105 _rtw_memset( &pwdinfo->profileinfo[ 0 ], 0x00, sizeof( struct profile_info ) * P2P_MAX_PERSISTENT_GROUP_NUM );
29106
29107 - _init_timer( &pwdinfo->find_phase_timer, padapter->pnetdev, find_phase_timer_process, padapter );
29108 - _init_timer( &pwdinfo->restore_p2p_state_timer, padapter->pnetdev, restore_p2p_state_timer_process, padapter );
29109 - _init_timer( &pwdinfo->pre_tx_scan_timer, padapter->pnetdev, pre_tx_scan_timer_process, padapter );
29110 -
29111 rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
29112
29113 pwdinfo->listen_dwell = ( u8 ) (( rtw_get_current_time() % 3 ) + 1);
29114 @@ -3187,197 +5006,140 @@ void init_wifidirect_info( _adapter* padapter, enum P2P_ROLE role)
29115
29116 pwdinfo->ui_got_wps_info = P2P_NO_WPSINFO;
29117 #ifdef CONFIG_WFD
29118 - pwdinfo->supported_wps_cm = WPS_CONFIG_METHOD_DISPLAY;
29119 - _rtw_memset( &pwdinfo->wfd_info, 0x00, sizeof( struct wifi_display_info ) );
29120 - pwdinfo->wfd_info.rtsp_ctrlport = 554;
29121 - pwdinfo->wfd_info.peer_rtsp_ctrlport = 0; // Reset to 0
29122 + pwdinfo->supported_wps_cm = WPS_CONFIG_METHOD_DISPLAY | WPS_CONFIG_METHOD_PBC;
29123 + pwdinfo->wfd_info = pwfd_info;
29124 #else
29125 pwdinfo->supported_wps_cm = WPS_CONFIG_METHOD_DISPLAY | WPS_CONFIG_METHOD_PBC | WPS_CONFIG_METHOD_KEYPAD;
29126 #endif //CONFIG_WFD
29127 - pwdinfo->channel_cnt = 0;
29128 - _rtw_memset( pwdinfo->channel_list, 0x00, 13 );
29129 + pwdinfo->channel_list_attr_len = 0;
29130 + _rtw_memset( pwdinfo->channel_list_attr, 0x00, 100 );
29131
29132 _rtw_memset( pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, 0x00, 4 );
29133 _rtw_memset( pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, '0', 3 );
29134 _rtw_memset( &pwdinfo->groupid_info, 0x00, sizeof( struct group_id_info ) );
29135 -
29136 -}
29137 -
29138 +#ifdef CONFIG_CONCURRENT_MODE
29139 #ifdef CONFIG_IOCTL_CFG80211
29140 -int rtw_p2p_check_frames(_adapter *padapter, const u8 *buf, u32 len, u8 tx)
29141 -{
29142 - int is_p2p_frame = (-1);
29143 - unsigned char *frame_body;
29144 - u8 category, action, OUI_Subtype, dialogToken=0;
29145 - struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
29146 -
29147 - frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
29148 - category = frame_body[0];
29149 - //just for check
29150 - if(category == RTW_WLAN_CATEGORY_PUBLIC)
29151 - {
29152 - action = frame_body[ 1 ];
29153 - OUI_Subtype = frame_body[ 6 ];
29154 - dialogToken = frame_body[7];
29155 -
29156 - if ( action == ACT_PUBLIC_P2P )
29157 - {
29158 -#ifdef CONFIG_DEBUG_CFG80211
29159 - DBG_871X("ACTION_CATEGORY_PUBLIC: ACT_PUBLIC_P2P, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
29160 - cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
29161 + pwdinfo->ext_listen_interval = 1000; //The interval to be available with legacy AP during p2p0-find/scan
29162 + pwdinfo->ext_listen_period = 3000; //The time period to be available for P2P during nego
29163 +#else //!CONFIG_IOCTL_CFG80211
29164 + //pwdinfo->ext_listen_interval = 3000;
29165 + //pwdinfo->ext_listen_period = 400;
29166 + pwdinfo->ext_listen_interval = 1000;
29167 + pwdinfo->ext_listen_period = 1000;
29168 +#endif //!CONFIG_IOCTL_CFG80211
29169 #endif
29170
29171 - is_p2p_frame = OUI_Subtype;
29172 -
29173 - switch( OUI_Subtype )//OUI Subtype
29174 - {
29175 - case P2P_GO_NEGO_REQ:
29176 - DBG_871X("RTW_%s:P2P_GO_NEGO_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29177 -
29178 - if(tx)
29179 - {
29180 - if(pwdev_priv->provdisc_req_issued == _FALSE)
29181 - rtw_cfg80211_issue_p2p_provision_request(padapter, buf, len);
29182 -
29183 - //pwdev_priv->provdisc_req_issued = _FALSE;
29184 - }
29185 -
29186 - break;
29187 - case P2P_GO_NEGO_RESP:
29188 - DBG_871X("RTW_%s:P2P_GO_NEGO_RESP, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29189 -
29190 - if(!tx)
29191 - pwdev_priv->provdisc_req_issued = _FALSE;
29192 -
29193 - break;
29194 - case P2P_GO_NEGO_CONF:
29195 - DBG_871X("RTW_%s:P2P_GO_NEGO_CONF, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29196 - break;
29197 - case P2P_INVIT_REQ:
29198 - DBG_871X("RTW_%s:P2P_INVIT_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29199 - break;
29200 - case P2P_INVIT_RESP:
29201 - DBG_871X("RTW_%s:P2P_INVIT_RESP, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29202 - break;
29203 - case P2P_DEVDISC_REQ:
29204 - DBG_871X("RTW_%s:P2P_DEVDISC_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29205 - break;
29206 - case P2P_DEVDISC_RESP:
29207 - DBG_871X("RTW_%s:P2P_DEVDISC_RESP, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29208 - break;
29209 - case P2P_PROVISION_DISC_REQ:
29210 - {
29211 - size_t frame_body_len = len - sizeof(struct rtw_ieee80211_hdr_3addr);
29212 - u8 *p2p_ie;
29213 - uint p2p_ielen = 0;
29214 - uint contentlen = 0;
29215 -
29216 - DBG_871X("RTW_%s:P2P_PROVISION_DISC_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29217 -
29218 - //if(tx)
29219 - {
29220 - pwdev_priv->provdisc_req_issued = _FALSE;
29221 -
29222 - if( (p2p_ie=rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, frame_body_len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen)))
29223 - {
29224 -
29225 - if(rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, NULL, &contentlen))
29226 - {
29227 - pwdev_priv->provdisc_req_issued = _FALSE;//case: p2p_client join p2p GO
29228 - }
29229 - else
29230 - {
29231 - DBG_871X("provdisc_req_issued is _TRUE\n");
29232 - pwdev_priv->provdisc_req_issued = _TRUE;//case: p2p_devices connection before Nego req.
29233 - }
29234 -
29235 - }
29236 - }
29237 - }
29238 - break;
29239 - case P2P_PROVISION_DISC_RESP:
29240 - DBG_871X("RTW_%s:P2P_PROVISION_DISC_RESP, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
29241 - break;
29242 - default:
29243 - DBG_871X("RTW_%s:OUI_Subtype=%d, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", OUI_Subtype, dialogToken);
29244 - break;
29245 - }
29246 -
29247 - }
29248 - else
29249 - {
29250 - DBG_871X("ACTION_CATEGORY_PUBLIC: action=%d, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
29251 - action, cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
29252 - }
29253 -
29254 - }
29255 - else if(category == RTW_WLAN_CATEGORY_P2P)
29256 - {
29257 - OUI_Subtype = frame_body[5];
29258 - dialogToken = frame_body[6];
29259 -
29260 -#ifdef CONFIG_DEBUG_CFG80211
29261 - DBG_871X("ACTION_CATEGORY_P2P: OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
29262 - cpu_to_be32( *( ( u32* ) ( frame_body + 1 ) ) ), OUI_Subtype, dialogToken);
29263 -#endif
29264 +// Commented by Kurt 20130319
29265 +// For WiDi purpose: Use CFG80211 interface but controled WFD/RDS frame by driver itself.
29266 +#ifdef CONFIG_IOCTL_CFG80211
29267 + pwdinfo->driver_interface = DRIVER_CFG80211;
29268 +#else
29269 + pwdinfo->driver_interface = DRIVER_WEXT;
29270 +#endif //CONFIG_IOCTL_CFG80211
29271
29272 - is_p2p_frame = OUI_Subtype;
29273 + pwdinfo->wfd_tdls_enable = 0;
29274 + _rtw_memset( pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN );
29275 + _rtw_memset( pwdinfo->p2p_peer_device_addr, 0x00, ETH_ALEN );
29276 +
29277 + pwdinfo->rx_invitereq_info.operation_ch[0] = 0;
29278 + pwdinfo->rx_invitereq_info.operation_ch[1] = 0; // Used to indicate the scan end in site survey function
29279 +#ifdef P2P_OP_CHECK_SOCIAL_CH
29280 + pwdinfo->rx_invitereq_info.operation_ch[2] = 0;
29281 + pwdinfo->rx_invitereq_info.operation_ch[3] = 0;
29282 + pwdinfo->rx_invitereq_info.operation_ch[4] = 0;
29283 +#endif //P2P_OP_CHECK_SOCIAL_CH
29284 + pwdinfo->rx_invitereq_info.scan_op_ch_only = 0;
29285 + pwdinfo->p2p_info.operation_ch[0] = 0;
29286 + pwdinfo->p2p_info.operation_ch[1] = 0; // Used to indicate the scan end in site survey function
29287 +#ifdef P2P_OP_CHECK_SOCIAL_CH
29288 + pwdinfo->p2p_info.operation_ch[2] = 0;
29289 + pwdinfo->p2p_info.operation_ch[3] = 0;
29290 + pwdinfo->p2p_info.operation_ch[4] = 0;
29291 +#endif //P2P_OP_CHECK_SOCIAL_CH
29292 + pwdinfo->p2p_info.scan_op_ch_only = 0;
29293 +}
29294
29295 - switch(OUI_Subtype)
29296 - {
29297 - case P2P_NOTICE_OF_ABSENCE:
29298 - DBG_871X("RTW_%s:P2P_NOTICE_OF_ABSENCE, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
29299 - break;
29300 - case P2P_PRESENCE_REQUEST:
29301 - DBG_871X("RTW_%s:P2P_PRESENCE_REQUEST, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
29302 - break;
29303 - case P2P_PRESENCE_RESPONSE:
29304 - DBG_871X("RTW_%s:P2P_PRESENCE_RESPONSE, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
29305 - break;
29306 - case P2P_GO_DISC_REQUEST:
29307 - DBG_871X("RTW_%s:P2P_GO_DISC_REQUEST, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", dialogToken);
29308 - break;
29309 - default:
29310 - DBG_871X("RTW_%s:OUI_Subtype=%d, dialogToken=%d\n", (tx==_TRUE)?"TX":"RX", OUI_Subtype, dialogToken);
29311 - break;
29312 - }
29313 +#ifdef CONFIG_DBG_P2P
29314
29315 - }
29316 - else
29317 - {
29318 - DBG_871X("%s, action frame category=%d\n", __func__, category);
29319 - //is_p2p_frame = (-1);
29320 +/**
29321 + * rtw_p2p_role_txt - Get the p2p role name as a text string
29322 + * @role: P2P role
29323 + * Returns: The state name as a printable text string
29324 + */
29325 +const char * rtw_p2p_role_txt(enum P2P_ROLE role)
29326 +{
29327 + switch (role) {
29328 + case P2P_ROLE_DISABLE:
29329 + return "P2P_ROLE_DISABLE";
29330 + case P2P_ROLE_DEVICE:
29331 + return "P2P_ROLE_DEVICE";
29332 + case P2P_ROLE_CLIENT:
29333 + return "P2P_ROLE_CLIENT";
29334 + case P2P_ROLE_GO:
29335 + return "P2P_ROLE_GO";
29336 + default:
29337 + return "UNKNOWN";
29338 }
29339 -
29340 - return is_p2p_frame;
29341 }
29342 -#endif //CONFIG_IOCTL_CFG80211
29343
29344 -#ifdef CONFIG_DBG_P2P
29345 -char * p2p_role_str[] = {
29346 - "P2P_ROLE_DISABLE",
29347 - "P2P_ROLE_DEVICE",
29348 - "P2P_ROLE_CLIENT",
29349 - "P2P_ROLE_GO"
29350 -};
29351 -
29352 -char * p2p_state_str[] = {
29353 - "P2P_STATE_NONE",
29354 - "P2P_STATE_IDLE",
29355 - "P2P_STATE_LISTEN",
29356 - "P2P_STATE_SCAN",
29357 - "P2P_STATE_FIND_PHASE_LISTEN",
29358 - "P2P_STATE_FIND_PHASE_SEARCH",
29359 - "P2P_STATE_TX_PROVISION_DIS_REQ",
29360 - "P2P_STATE_RX_PROVISION_DIS_RSP",
29361 - "P2P_STATE_RX_PROVISION_DIS_REQ",
29362 - "P2P_STATE_GONEGO_ING",
29363 - "P2P_STATE_GONEGO_OK",
29364 - "P2P_STATE_GONEGO_FAIL",
29365 - "P2P_STATE_RECV_INVITE_REQ",
29366 - "P2P_STATE_PROVISIONING_ING",
29367 - "P2P_STATE_PROVISIONING_DONE"
29368 -};
29369 +/**
29370 + * rtw_p2p_state_txt - Get the p2p state name as a text string
29371 + * @state: P2P state
29372 + * Returns: The state name as a printable text string
29373 + */
29374 +const char * rtw_p2p_state_txt(enum P2P_STATE state)
29375 +{
29376 + switch (state) {
29377 + case P2P_STATE_NONE:
29378 + return "P2P_STATE_NONE";
29379 + case P2P_STATE_IDLE:
29380 + return "P2P_STATE_IDLE";
29381 + case P2P_STATE_LISTEN:
29382 + return "P2P_STATE_LISTEN";
29383 + case P2P_STATE_SCAN:
29384 + return "P2P_STATE_SCAN";
29385 + case P2P_STATE_FIND_PHASE_LISTEN:
29386 + return "P2P_STATE_FIND_PHASE_LISTEN";
29387 + case P2P_STATE_FIND_PHASE_SEARCH:
29388 + return "P2P_STATE_FIND_PHASE_SEARCH";
29389 + case P2P_STATE_TX_PROVISION_DIS_REQ:
29390 + return "P2P_STATE_TX_PROVISION_DIS_REQ";
29391 + case P2P_STATE_RX_PROVISION_DIS_RSP:
29392 + return "P2P_STATE_RX_PROVISION_DIS_RSP";
29393 + case P2P_STATE_RX_PROVISION_DIS_REQ:
29394 + return "P2P_STATE_RX_PROVISION_DIS_REQ";
29395 + case P2P_STATE_GONEGO_ING:
29396 + return "P2P_STATE_GONEGO_ING";
29397 + case P2P_STATE_GONEGO_OK:
29398 + return "P2P_STATE_GONEGO_OK";
29399 + case P2P_STATE_GONEGO_FAIL:
29400 + return "P2P_STATE_GONEGO_FAIL";
29401 + case P2P_STATE_RECV_INVITE_REQ_MATCH:
29402 + return "P2P_STATE_RECV_INVITE_REQ_MATCH";
29403 + case P2P_STATE_PROVISIONING_ING:
29404 + return "P2P_STATE_PROVISIONING_ING";
29405 + case P2P_STATE_PROVISIONING_DONE:
29406 + return "P2P_STATE_PROVISIONING_DONE";
29407 + case P2P_STATE_TX_INVITE_REQ:
29408 + return "P2P_STATE_TX_INVITE_REQ";
29409 + case P2P_STATE_RX_INVITE_RESP_OK:
29410 + return "P2P_STATE_RX_INVITE_RESP_OK";
29411 + case P2P_STATE_RECV_INVITE_REQ_DISMATCH:
29412 + return "P2P_STATE_RECV_INVITE_REQ_DISMATCH";
29413 + case P2P_STATE_RECV_INVITE_REQ_GO:
29414 + return "P2P_STATE_RECV_INVITE_REQ_GO";
29415 + case P2P_STATE_RECV_INVITE_REQ_JOIN:
29416 + return "P2P_STATE_RECV_INVITE_REQ_JOIN";
29417 + case P2P_STATE_RX_INVITE_RESP_FAIL:
29418 + return "P2P_STATE_RX_INVITE_RESP_FAIL";
29419 + case P2P_STATE_RX_INFOR_NOREADY:
29420 + return "P2P_STATE_RX_INFOR_NOREADY";
29421 + case P2P_STATE_TX_INFOR_NOREADY:
29422 + return "P2P_STATE_TX_INFOR_NOREADY";
29423 + default:
29424 + return "UNKNOWN";
29425 + }
29426 +}
29427
29428 void dbg_rtw_p2p_set_state(struct wifidirect_info *wdinfo, enum P2P_STATE state, const char *caller, int line)
29429 {
29430 @@ -3385,11 +5147,11 @@ void dbg_rtw_p2p_set_state(struct wifidirect_info *wdinfo, enum P2P_STATE state,
29431 enum P2P_STATE old_state = _rtw_p2p_state(wdinfo);
29432 _rtw_p2p_set_state(wdinfo, state);
29433 DBG_871X("[CONFIG_DBG_P2P]%s:%d set_state from %s to %s\n", caller, line
29434 - , p2p_state_str[old_state], p2p_state_str[_rtw_p2p_state(wdinfo)]
29435 + , rtw_p2p_state_txt(old_state), rtw_p2p_state_txt(_rtw_p2p_state(wdinfo))
29436 );
29437 } else {
29438 DBG_871X("[CONFIG_DBG_P2P]%s:%d set_state to same state %s\n", caller, line
29439 - , p2p_state_str[_rtw_p2p_state(wdinfo)]
29440 + , rtw_p2p_state_txt(_rtw_p2p_state(wdinfo))
29441 );
29442 }
29443 }
29444 @@ -3399,11 +5161,11 @@ void dbg_rtw_p2p_set_pre_state(struct wifidirect_info *wdinfo, enum P2P_STATE st
29445 enum P2P_STATE old_state = _rtw_p2p_pre_state(wdinfo);
29446 _rtw_p2p_set_pre_state(wdinfo, state);
29447 DBG_871X("[CONFIG_DBG_P2P]%s:%d set_pre_state from %s to %s\n", caller, line
29448 - , p2p_state_str[old_state], p2p_state_str[_rtw_p2p_pre_state(wdinfo)]
29449 + , rtw_p2p_state_txt(old_state), rtw_p2p_state_txt(_rtw_p2p_pre_state(wdinfo))
29450 );
29451 } else {
29452 DBG_871X("[CONFIG_DBG_P2P]%s:%d set_pre_state to same state %s\n", caller, line
29453 - , p2p_state_str[_rtw_p2p_pre_state(wdinfo)]
29454 + , rtw_p2p_state_txt(_rtw_p2p_pre_state(wdinfo))
29455 );
29456 }
29457 }
29458 @@ -3428,11 +5190,11 @@ void dbg_rtw_p2p_set_role(struct wifidirect_info *wdinfo, enum P2P_ROLE role, co
29459 enum P2P_ROLE old_role = wdinfo->role;
29460 _rtw_p2p_set_role(wdinfo, role);
29461 DBG_871X("[CONFIG_DBG_P2P]%s:%d set_role from %s to %s\n", caller, line
29462 - , p2p_role_str[old_role], p2p_role_str[wdinfo->role]
29463 + , rtw_p2p_role_txt(old_role), rtw_p2p_role_txt(wdinfo->role)
29464 );
29465 } else {
29466 DBG_871X("[CONFIG_DBG_P2P]%s:%d set_role to same role %s\n", caller, line
29467 - , p2p_role_str[wdinfo->role]
29468 + , rtw_p2p_role_txt(wdinfo->role)
29469 );
29470 }
29471 }
29472 @@ -3450,29 +5212,45 @@ int rtw_p2p_enable(_adapter *padapter, enum P2P_ROLE role)
29473 u8 channel, ch_offset;
29474 u16 bwmode;
29475
29476 - //leave IPS/Autosuspend
29477 - if(_FAIL == rtw_pwr_wakeup(padapter))
29478 +#ifdef CONFIG_CONCURRENT_MODE
29479 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
29480 + struct wifidirect_info *pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
29481 + // Commented by Albert 2011/12/30
29482 + // The driver just supports 1 P2P group operation.
29483 + // So, this function will do nothing if the buddy adapter had enabled the P2P function.
29484 + if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))
29485 {
29486 + // The buddy adapter had enabled the P2P function.
29487 + return ret;
29488 + }
29489 +#endif //CONFIG_CONCURRENT_MODE
29490 +
29491 + //leave IPS/Autosuspend
29492 + if (_FAIL == rtw_pwr_wakeup(padapter)) {
29493 ret = _FAIL;
29494 goto exit;
29495 }
29496 +
29497
29498 - #ifdef CONFIG_P2P_AGAINST_NOISE
29499 - //Sometimes dongle would difficult to receive p2p_probe_req caused by platform noise. Kurt
29500 - rtw_write8(padapter, 0xc41, 0x42);
29501 - DBG_8192C("rtw_write8(0x%x)=0x%02x\n", 0xc41, rtw_read8(padapter, 0xc41));
29502 - #endif
29503 + // Added by Albert 2011/03/22
29504 + // In the P2P mode, the driver should not support the b mode.
29505 + // So, the Tx packet shouldn't use the CCK rate
29506 + update_tx_basic_rate(padapter, WIRELESS_11AGN);
29507
29508 //Enable P2P function
29509 init_wifidirect_info(padapter, role);
29510 -
29511 }
29512 else if (role == P2P_ROLE_DISABLE)
29513 - {
29514 - #ifdef CONFIG_P2P_AGAINST_NOISE
29515 - rtw_write8(padapter, 0xc41, 0x40);
29516 - DBG_8192C("rtw_write8(0x%x)=0x%02x\n", 0xc41, rtw_read8(padapter, 0xc41));
29517 - #endif
29518 + {
29519 +#ifdef CONFIG_INTEL_WIDI
29520 + if( padapter->mlmepriv.p2p_reject_disable == _TRUE )
29521 + return ret;
29522 +#endif //CONFIG_INTEL_WIDI
29523 +
29524 + if (_FAIL == rtw_pwr_wakeup(padapter)) {
29525 + ret = _FAIL;
29526 + goto exit;
29527 + }
29528
29529 //Disable P2P function
29530 if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
29531 @@ -3480,16 +5258,34 @@ int rtw_p2p_enable(_adapter *padapter, enum P2P_ROLE role)
29532 _cancel_timer_ex( &pwdinfo->find_phase_timer );
29533 _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
29534 _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
29535 + _cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey);
29536 + _cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey2);
29537 + reset_ch_sitesurvey_timer_process( padapter );
29538 + reset_ch_sitesurvey_timer_process2( padapter );
29539 + #ifdef CONFIG_CONCURRENT_MODE
29540 + _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer);
29541 + #endif
29542 rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
29543 rtw_p2p_set_role(pwdinfo, P2P_ROLE_DISABLE);
29544 _rtw_memset(&pwdinfo->rx_prov_disc_info, 0x00, sizeof(struct rx_provdisc_req_info));
29545 }
29546 -
29547 - if(pwrpriv->bips_processing == _FALSE){
29548 - rtw_set_pwr_state_check_timer(pwrpriv);
29549 - }
29550 +
29551 + //Restore to initial setting.
29552 + update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
29553 +
29554 +#ifdef CONFIG_INTEL_WIDI
29555 + rtw_reset_widi_info(padapter);
29556 +#endif //CONFIG_INTEL_WIDI
29557 +
29558 + //For WiDi purpose.
29559 +#ifdef CONFIG_IOCTL_CFG80211
29560 + pwdinfo->driver_interface = DRIVER_CFG80211;
29561 +#else
29562 + pwdinfo->driver_interface = DRIVER_WEXT;
29563 +#endif //CONFIG_IOCTL_CFG80211
29564 +
29565 }
29566 -
29567 +
29568 exit:
29569 return ret;
29570 }
29571 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c b/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c
29572 index 92b3cb8..d1c11fa 100644
29573 --- a/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c
29574 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c
29575 @@ -16,8 +16,7 @@
29576 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
29577 *
29578 *
29579 -
29580 -******************************************************************************/
29581 + ******************************************************************************/
29582 #define _RTW_PWRCTRL_C_
29583
29584 #include <drv_conf.h>
29585 @@ -25,87 +24,78 @@
29586 #include <drv_types.h>
29587 #include <osdep_intf.h>
29588
29589 -#ifdef CONFIG_SDIO_HCI
29590 -#include <sdio_ops.h>
29591 -#endif
29592
29593 #ifdef CONFIG_IPS
29594 -void ips_enter(_adapter * padapter)
29595 +void _ips_enter(_adapter * padapter)
29596 {
29597 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
29598 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
29599 -
29600
29601 - _enter_pwrlock(&pwrpriv->lock);
29602 -
29603 - pwrpriv->bips_processing = _TRUE;
29604 + pwrpriv->bips_processing = _TRUE;
29605
29606 // syn ips_mode with request
29607 pwrpriv->ips_mode = pwrpriv->ips_mode_req;
29608 -
29609 - pwrpriv->ips_enter_cnts++;
29610 - DBG_8192C("==>ips_enter cnts:%d\n",pwrpriv->ips_enter_cnts);
29611 -
29612 - if(rf_off == pwrpriv->change_rfpwrstate )
29613 - {
29614 - DBG_8192C("==>power_saving_ctrl_wk_hdl change rf to OFF...LED(0x%08x).... \n\n",rtw_read32(padapter,0x4c));
29615 -
29616 +
29617 + pwrpriv->ips_enter_cnts++;
29618 + DBG_871X("==>ips_enter cnts:%d\n",pwrpriv->ips_enter_cnts);
29619 +
29620 + if(rf_off == pwrpriv->change_rfpwrstate)
29621 + {
29622 if(pwrpriv->ips_mode == IPS_LEVEL_2)
29623 pwrpriv->bkeepfwalive = _TRUE;
29624 -
29625 +
29626 rtw_ips_pwr_down(padapter);
29627 pwrpriv->rf_pwrstate = rf_off;
29628 - }
29629 - pwrpriv->bips_processing = _FALSE;
29630 + }
29631 + pwrpriv->bips_processing = _FALSE;
29632 +
29633 +}
29634 +
29635 +void ips_enter(_adapter * padapter)
29636 +{
29637 + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
29638 +
29639 + _enter_pwrlock(&pwrpriv->lock);
29640 + _ips_enter(padapter);
29641 _exit_pwrlock(&pwrpriv->lock);
29642 -
29643 }
29644
29645 -int ips_leave(_adapter * padapter)
29646 +int _ips_leave(_adapter * padapter)
29647 {
29648 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
29649 - struct security_priv* psecuritypriv=&(padapter->securitypriv);
29650 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
29651 int result = _SUCCESS;
29652 - sint keyid;
29653 - _enter_pwrlock(&pwrpriv->lock);
29654 +
29655 if((pwrpriv->rf_pwrstate == rf_off) &&(!pwrpriv->bips_processing))
29656 {
29657 + pwrpriv->bips_processing = _TRUE;
29658 pwrpriv->change_rfpwrstate = rf_on;
29659 pwrpriv->ips_leave_cnts++;
29660 - DBG_8192C("==>ips_leave cnts:%d\n",pwrpriv->ips_leave_cnts);
29661 -
29662 - result = rtw_ips_pwr_up(padapter);
29663 - pwrpriv->bips_processing = _TRUE;
29664 - pwrpriv->rf_pwrstate = rf_on;
29665 + DBG_871X("==>ips_leave cnts:%d\n",pwrpriv->ips_leave_cnts);
29666
29667 - if((_WEP40_ == psecuritypriv->dot11PrivacyAlgrthm) ||(_WEP104_ == psecuritypriv->dot11PrivacyAlgrthm))
29668 - {
29669 - DBG_8192C("==>%s,channel(%d),processing(%x)\n",__FUNCTION__,padapter->mlmeextpriv.cur_channel,pwrpriv->bips_processing);
29670 - set_channel_bwmode(padapter, padapter->mlmeextpriv.cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
29671 - for(keyid=0;keyid<4;keyid++){
29672 - if(pmlmepriv->key_mask & BIT(keyid)){
29673 - if(keyid == psecuritypriv->dot11PrivacyKeyIndex)
29674 - result=rtw_set_key(padapter,psecuritypriv, keyid, 1);
29675 - else
29676 - result=rtw_set_key(padapter,psecuritypriv, keyid, 0);
29677 - }
29678 - }
29679 + if ((result = rtw_ips_pwr_up(padapter)) == _SUCCESS) {
29680 + pwrpriv->rf_pwrstate = rf_on;
29681 }
29682 -
29683 - DBG_8192C("==> ips_leave.....LED(0x%08x)...\n",rtw_read32(padapter,0x4c));
29684 +
29685 + DBG_871X("==> ips_leave.....LED(0x%08x)...\n",rtw_read32(padapter,0x4c));
29686 pwrpriv->bips_processing = _FALSE;
29687
29688 pwrpriv->bkeepfwalive = _FALSE;
29689 -
29690 -
29691 }
29692 - _exit_pwrlock(&pwrpriv->lock);
29693 +
29694 return result;
29695 }
29696
29697 +int ips_leave(_adapter * padapter)
29698 +{
29699 + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
29700 + int ret;
29701
29702 -#endif
29703 + _enter_pwrlock(&pwrpriv->lock);
29704 + ret = _ips_leave(padapter);
29705 + _exit_pwrlock(&pwrpriv->lock);
29706 +
29707 + return ret;
29708 +}
29709 +#endif /* CONFIG_IPS */
29710
29711 #ifdef CONFIG_AUTOSUSPEND
29712 extern void autosuspend_enter(_adapter* padapter);
29713 @@ -117,7 +107,74 @@ int rtw_hw_suspend(_adapter *padapter );
29714 int rtw_hw_resume(_adapter *padapter);
29715 #endif
29716
29717 -#ifdef PLATFORM_LINUX
29718 +bool rtw_pwr_unassociated_idle(_adapter *adapter)
29719 +{
29720 + _adapter *buddy = adapter->pbuddy_adapter;
29721 + struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
29722 +#ifdef CONFIG_P2P
29723 + struct wifidirect_info *pwdinfo = &(adapter->wdinfo);
29724 +#ifdef CONFIG_IOCTL_CFG80211
29725 + struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &adapter->cfg80211_wdinfo;
29726 +#endif
29727 +#endif
29728 +
29729 + bool ret = _FALSE;
29730 +
29731 + if (adapter->pwrctrlpriv.ips_deny_time >= rtw_get_current_time()) {
29732 + //DBG_871X("%s ips_deny_time\n", __func__);
29733 + goto exit;
29734 + }
29735 +
29736 + if (check_fwstate(pmlmepriv, WIFI_ASOC_STATE|WIFI_SITE_MONITOR)
29737 + || check_fwstate(pmlmepriv, WIFI_UNDER_LINKING|WIFI_UNDER_WPS)
29738 + || check_fwstate(pmlmepriv, WIFI_AP_STATE)
29739 + || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)
29740 + #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211) && defined(CONFIG_P2P_IPS)
29741 + || pcfg80211_wdinfo->is_ro_ch
29742 + #elif defined(CONFIG_P2P)
29743 + || !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)
29744 + #endif
29745 + ) {
29746 + goto exit;
29747 + }
29748 +
29749 + /* consider buddy, if exist */
29750 + if (buddy) {
29751 + struct mlme_priv *b_pmlmepriv = &(buddy->mlmepriv);
29752 + #ifdef CONFIG_P2P
29753 + struct wifidirect_info *b_pwdinfo = &(buddy->wdinfo);
29754 + #ifdef CONFIG_IOCTL_CFG80211
29755 + struct cfg80211_wifidirect_info *b_pcfg80211_wdinfo = &buddy->cfg80211_wdinfo;
29756 + #endif
29757 + #endif
29758 +
29759 + if (check_fwstate(b_pmlmepriv, WIFI_ASOC_STATE|WIFI_SITE_MONITOR)
29760 + || check_fwstate(b_pmlmepriv, WIFI_UNDER_LINKING|WIFI_UNDER_WPS)
29761 + || check_fwstate(b_pmlmepriv, WIFI_AP_STATE)
29762 + || check_fwstate(b_pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)
29763 + #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211) && defined(CONFIG_P2P_IPS)
29764 + || b_pcfg80211_wdinfo->is_ro_ch
29765 + #elif defined(CONFIG_P2P)
29766 + || !rtw_p2p_chk_state(b_pwdinfo, P2P_STATE_NONE)
29767 + #endif
29768 + ) {
29769 + goto exit;
29770 + }
29771 + }
29772 +
29773 +#ifdef CONFIG_INTEL_PROXIM
29774 + if(adapter->proximity.proxim_on==_TRUE){
29775 + return;
29776 + }
29777 +#endif
29778 +
29779 + ret = _TRUE;
29780 +
29781 +exit:
29782 + return ret;
29783 +}
29784 +
29785 +#if defined (PLATFORM_LINUX)||defined (PLATFORM_FREEBSD)
29786 void rtw_ps_processor(_adapter*padapter)
29787 {
29788 #ifdef CONFIG_P2P
29789 @@ -125,13 +182,17 @@ void rtw_ps_processor(_adapter*padapter)
29790 #endif //CONFIG_P2P
29791 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
29792 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
29793 - int res;
29794 +#ifdef SUPPORT_HW_RFOFF_DETECTED
29795 rt_rf_power_state rfpwrstate;
29796 -
29797 +#endif //SUPPORT_HW_RFOFF_DETECTED
29798 +
29799 + pwrpriv->ps_processing = _TRUE;
29800 +
29801 #ifdef SUPPORT_HW_RFOFF_DETECTED
29802 - if(pwrpriv->bips_processing == _TRUE) return;
29803 + if(pwrpriv->bips_processing == _TRUE)
29804 + goto exit;
29805
29806 - //DBG_8192C("==> fw report state(0x%x)\n",rtw_read8(padapter,0x1ca));
29807 + //DBG_871X("==> fw report state(0x%x)\n",rtw_read8(padapter,0x1ca));
29808 if(padapter->pwrctrlpriv.bHWPwrPindetect)
29809 {
29810 #ifdef CONFIG_AUTOSUSPEND
29811 @@ -143,7 +204,7 @@ void rtw_ps_processor(_adapter*padapter)
29812 pwrpriv->ps_flag = _TRUE;
29813
29814 rfpwrstate = RfOnOffDetect(padapter);
29815 - DBG_8192C("@@@@- #1 %s==> rfstate:%s \n",__FUNCTION__,(rfpwrstate==rf_on)?"rf_on":"rf_off");
29816 + DBG_871X("@@@@- #1 %s==> rfstate:%s \n",__FUNCTION__,(rfpwrstate==rf_on)?"rf_on":"rf_off");
29817 if(rfpwrstate!= pwrpriv->rf_pwrstate)
29818 {
29819 if(rfpwrstate == rf_off)
29820 @@ -162,7 +223,7 @@ void rtw_ps_processor(_adapter*padapter)
29821 #endif //CONFIG_AUTOSUSPEND
29822 {
29823 rfpwrstate = RfOnOffDetect(padapter);
29824 - DBG_8192C("@@@@- #2 %s==> rfstate:%s \n",__FUNCTION__,(rfpwrstate==rf_on)?"rf_on":"rf_off");
29825 + DBG_871X("@@@@- #2 %s==> rfstate:%s \n",__FUNCTION__,(rfpwrstate==rf_on)?"rf_on":"rf_off");
29826
29827 if(rfpwrstate!= pwrpriv->rf_pwrstate)
29828 {
29829 @@ -178,46 +239,41 @@ void rtw_ps_processor(_adapter*padapter)
29830 pwrpriv->change_rfpwrstate = rf_on;
29831 rtw_hw_resume(padapter );
29832 }
29833 - DBG_8192C("current rf_pwrstate(%s)\n",(pwrpriv->rf_pwrstate == rf_off)?"rf_off":"rf_on");
29834 + DBG_871X("current rf_pwrstate(%s)\n",(pwrpriv->rf_pwrstate == rf_off)?"rf_off":"rf_on");
29835 }
29836 }
29837 pwrpriv->pwr_state_check_cnts ++;
29838 }
29839 #endif //SUPPORT_HW_RFOFF_DETECTED
29840
29841 - if( pwrpriv->power_mgnt == PS_MODE_ACTIVE ) return;
29842 + if (pwrpriv->ips_mode_req == IPS_NONE
29843 + #ifdef CONFIG_CONCURRENT_MODE
29844 + || padapter->pbuddy_adapter->pwrctrlpriv.ips_mode_req == IPS_NONE
29845 + #endif
29846 + )
29847 + goto exit;
29848 +
29849 + if (rtw_pwr_unassociated_idle(padapter) == _FALSE)
29850 + goto exit;
29851
29852 if((pwrpriv->rf_pwrstate == rf_on) && ((pwrpriv->pwr_state_check_cnts%4)==0))
29853 {
29854 - if ( (check_fwstate(pmlmepriv, _FW_LINKED|_FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE) ||
29855 - (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) ||
29856 - (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
29857 - (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE) ||
29858 - (padapter->bup == _FALSE)
29859 - #ifdef CONFIG_P2P
29860 - || !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)
29861 - #endif //CONFIG_P2P
29862 - )
29863 - {
29864 - return;
29865 - }
29866 -
29867 - DBG_8192C("==>%s .fw_state(%x)\n",__FUNCTION__,get_fwstate(pmlmepriv));
29868 + DBG_871X("==>%s .fw_state(%x)\n",__FUNCTION__,get_fwstate(pmlmepriv));
29869 pwrpriv->change_rfpwrstate = rf_off;
29870
29871 #ifdef CONFIG_AUTOSUSPEND
29872 if(padapter->registrypriv.usbss_enable)
29873 {
29874 - if(padapter->pwrctrlpriv.bHWPwrPindetect)
29875 - pwrpriv->bkeepfwalive = _TRUE;
29876 -
29877 + if(pwrpriv->bHWPwrPindetect)
29878 + pwrpriv->bkeepfwalive = _TRUE;
29879 +
29880 if(padapter->net_closed == _TRUE)
29881 pwrpriv->ps_flag = _TRUE;
29882
29883 padapter->bCardDisableWOHSM = _TRUE;
29884 autosuspend_enter(padapter);
29885 }
29886 - else if(padapter->pwrctrlpriv.bHWPwrPindetect)
29887 + else if(pwrpriv->bHWPwrPindetect)
29888 {
29889 }
29890 else
29891 @@ -228,95 +284,72 @@ void rtw_ps_processor(_adapter*padapter)
29892 #endif
29893 }
29894 }
29895 -
29896 -
29897 +exit:
29898 + rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
29899 + pwrpriv->ps_processing = _FALSE;
29900 + return;
29901 }
29902
29903 +void pwr_state_check_handler(void *FunctionContext);
29904 void pwr_state_check_handler(void *FunctionContext)
29905 {
29906 _adapter *padapter = (_adapter *)FunctionContext;
29907 - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
29908 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
29909 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
29910 -#ifdef CONFIG_P2P
29911 - struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
29912 -#endif //CONFIG_P2P
29913 - //DBG_871X("%s\n", __FUNCTION__);
29914 -
29915 -#ifdef SUPPORT_HW_RFOFF_DETECTED
29916 - //DBG_8192C("%s...bHWPwrPindetect(%d)\n",__FUNCTION__,padapter->pwrctrlpriv.bHWPwrPindetect);
29917 - if(padapter->pwrctrlpriv.bHWPwrPindetect)
29918 - {
29919 - rtw_ps_cmd(padapter);
29920 - rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
29921 - }
29922 - else
29923 -#endif
29924 - {
29925 - //if(padapter->net_closed == _TRUE) return;
29926 - //DBG_8192C("==>%s .fw_state(%x)\n", __FUNCTION__, get_fwstate(pmlmepriv));
29927 - if ( (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) ||
29928 - (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
29929 - (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE) ||
29930 - (check_fwstate(pmlmepriv, _FW_LINKED|_FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE) ||
29931 - (padapter->bup == _FALSE)
29932 -#ifdef CONFIG_P2P
29933 - || !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)
29934 -#endif //CONFIG_P2P
29935 - )
29936 - {
29937 - //other pwr ctrl....
29938 - rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
29939 - }
29940 - else
29941 - {
29942 - if((pwrpriv->rf_pwrstate == rf_on) &&(_FALSE == pwrpriv->bips_processing))
29943 - {
29944 - pwrpriv->change_rfpwrstate = rf_off;
29945 - pwrctrlpriv->pwr_state_check_cnts = 0;
29946 - DBG_8192C("==>pwr_state_check_handler .fw_state(%x)\n",get_fwstate(pmlmepriv));
29947 - rtw_ps_cmd(padapter);
29948 - }
29949 -
29950 - }
29951 - }
29952 -
29953 -
29954 -
29955 + rtw_ps_cmd(padapter);
29956 }
29957 #endif
29958
29959
29960 #ifdef CONFIG_LPS
29961 -void rtw_set_rpwm(_adapter * padapter, u8 val8)
29962 +/*
29963 + *
29964 + * Parameters
29965 + * padapter
29966 + * pslv power state level, only could be PS_STATE_S0 ~ PS_STATE_S4
29967 + *
29968 + */
29969 +void rtw_set_rpwm(PADAPTER padapter, u8 pslv)
29970 {
29971 u8 rpwm;
29972 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
29973
29974 _func_enter_;
29975
29976 - if(pwrpriv->rpwm == val8){
29977 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("Already set rpwm [%d] ! \n", val8));
29978 + pslv = PS_STATE(pslv);
29979 +
29980 + if (pwrpriv->rpwm == pslv) {
29981 + RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,
29982 + ("%s: Already set rpwm[0x%02x]!\n", __FUNCTION__, pslv));
29983 return;
29984 }
29985
29986 - if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE)){
29987 - RT_TRACE(_module_rtl871x_xmit_c_,_drv_err_,("rtw_set_rpwm=> bDriverStopped or bSurpriseRemoved \n"));
29988 + if ((padapter->bDriverStopped == _TRUE) ||
29989 + (padapter->bSurpriseRemoved == _TRUE)) {
29990 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_err_,
29991 + ("%s: bDriverStopped(%d) bSurpriseRemoved(%d)\n",
29992 + __FUNCTION__, padapter->bDriverStopped, padapter->bSurpriseRemoved));
29993 return;
29994 }
29995 - rpwm = val8 |pwrpriv->tog;
29996
29997 - pwrpriv->rpwm = val8;
29998 -
29999 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_set_rpwm: value = %x\n", rpwm));
30000 + rpwm = pslv | pwrpriv->tog;
30001 +#ifdef CONFIG_LPS_LCLK
30002 + if ((pwrpriv->cpwm < PS_STATE_S2) && (pslv >= PS_STATE_S2))
30003 + rpwm |= PS_ACK;
30004 +#endif
30005 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
30006 + ("rtw_set_rpwm: rpwm=0x%02x cpwm=0x%02x\n", rpwm, pwrpriv->cpwm));
30007 +
30008 + pwrpriv->rpwm = pslv;
30009 +
30010 + rtw_hal_set_hwreg(padapter, HW_VAR_SET_RPWM, (u8 *)(&rpwm));
30011
30012 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_SET_RPWM, (u8 *)(&rpwm));
30013 -
30014 pwrpriv->tog += 0x80;
30015
30016 + if (!(rpwm & PS_ACK)) pwrpriv->cpwm = pslv;
30017 +
30018 _func_exit_;
30019 }
30020
30021 +u8 PS_RDY_CHECK(_adapter * padapter);
30022 u8 PS_RDY_CHECK(_adapter * padapter)
30023 {
30024 u32 curr_time, delta_time;
30025 @@ -332,7 +365,9 @@ u8 PS_RDY_CHECK(_adapter * padapter)
30026 return _FALSE;
30027 }
30028
30029 - if ( (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) ||
30030 + if ((check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) ||
30031 + (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) ||
30032 + (check_fwstate(pmlmepriv, WIFI_UNDER_WPS) == _TRUE) ||
30033 (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) ||
30034 (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
30035 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE) )
30036 @@ -343,24 +378,37 @@ u8 PS_RDY_CHECK(_adapter * padapter)
30037
30038 if( (padapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) && (padapter->securitypriv.binstallGrpkey == _FALSE) )
30039 {
30040 - DBG_8192C("Group handshake still in progress !!!\n");
30041 + DBG_871X("Group handshake still in progress !!!\n");
30042 return _FALSE;
30043 }
30044
30045 +#ifdef CONFIG_IOCTL_CFG80211
30046 + if (!rtw_cfg80211_pwr_mgmt(padapter))
30047 + return _FALSE;
30048 +#endif
30049 +
30050 return _TRUE;
30051 }
30052
30053 -void rtw_set_ps_mode(_adapter * padapter, u8 ps_mode, u8 smart_ps)
30054 +void rtw_set_ps_mode(PADAPTER padapter, u8 ps_mode, u8 smart_ps)
30055 {
30056 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30057 #ifdef CONFIG_P2P
30058 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
30059 #endif //CONFIG_P2P
30060 +#ifdef CONFIG_TDLS
30061 + struct sta_priv *pstapriv = &padapter->stapriv;
30062 + _irqL irqL;
30063 + int i, j;
30064 + _list *plist, *phead;
30065 + struct sta_info *ptdls_sta;
30066 +#endif //CONFIG_TDLS
30067
30068 _func_enter_;
30069
30070 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("========= Power Mode is :%d, Smart_PS = %d\n", ps_mode,smart_ps));
30071 - //DBG_8192C("========= Power Mode is :%d, Smart_PS = %d\n", ps_mode,smart_ps);
30072 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
30073 + ("%s: PowerMode=%d Smart_PS=%d\n",
30074 + __FUNCTION__, ps_mode, smart_ps));
30075
30076 if(ps_mode > PM_Card_Disable) {
30077 RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("ps_mode:%d error\n", ps_mode));
30078 @@ -375,34 +423,108 @@ _func_enter_;
30079 //if(pwrpriv->pwr_mode == PS_MODE_ACTIVE)
30080 if(ps_mode == PS_MODE_ACTIVE)
30081 {
30082 -#ifdef CONFIG_P2P
30083 +#ifdef CONFIG_P2P_PS
30084 if(pwdinfo->opp_ps == 0)
30085 -#endif //CONFIG_P2P
30086 +#endif // CONFIG_P2P_PS
30087 {
30088 - DBG_8192C("rtw_set_ps_mode(): Busy Traffic , Leave 802.11 power save..\n");
30089 +#ifdef CONFIG_LPS_LCLK
30090 + _enter_pwrlock(&pwrpriv->lock);
30091 +#endif
30092 + DBG_871X("rtw_set_ps_mode(): Busy Traffic , Leave 802.11 power save..\n");
30093 +
30094 +#ifdef CONFIG_TDLS
30095 + _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
30096 +
30097 + for(i=0; i< NUM_STA; i++)
30098 + {
30099 + phead = &(pstapriv->sta_hash[i]);
30100 + plist = get_next(phead);
30101 +
30102 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
30103 + {
30104 + ptdls_sta = LIST_CONTAINOR(plist, struct sta_info, hash_list);
30105 +
30106 + if( ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE )
30107 + issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta, 0);
30108 + plist = get_next(plist);
30109 + }
30110 + }
30111 +
30112 + _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
30113 +#endif //CONFIG_TDLS
30114 +
30115 pwrpriv->smart_ps = smart_ps;
30116 pwrpriv->pwr_mode = ps_mode;
30117 +
30118 rtw_set_rpwm(padapter, PS_STATE_S4);
30119 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
30120 +#ifdef CONFIG_LPS_LCLK
30121 +{
30122 + u32 n = 0;
30123 + while (pwrpriv->cpwm != PS_STATE_S4) {
30124 + n++;
30125 + if (n == 10000) break;
30126 + if (padapter->bSurpriseRemoved == _TRUE) break;
30127 + rtw_msleep_os(1);
30128 + }
30129 + if (n == 10000)
30130 + printk(KERN_ERR "%s: wait CPWM to S4 too long! cpwm=0x%02x\n", __func__, pwrpriv->cpwm);
30131 +}
30132 +#endif
30133 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
30134 pwrpriv->bFwCurrentInPSMode = _FALSE;
30135 +#ifdef CONFIG_LPS_LCLK
30136 + _exit_pwrlock(&pwrpriv->lock);
30137 +#endif
30138 }
30139 }
30140 else
30141 {
30142 if(PS_RDY_CHECK(padapter))
30143 {
30144 - DBG_8192C("rtw_set_ps_mode(): Enter 802.11 power save mode...\n");
30145 +#ifdef CONFIG_LPS_LCLK
30146 + _enter_pwrlock(&pwrpriv->lock);
30147 +#endif
30148 + DBG_871X("rtw_set_ps_mode(): Enter 802.11 power save mode...\n");
30149 +
30150 +#ifdef CONFIG_TDLS
30151 + _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
30152 +
30153 + for(i=0; i< NUM_STA; i++)
30154 + {
30155 + phead = &(pstapriv->sta_hash[i]);
30156 + plist = get_next(phead);
30157 +
30158 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
30159 + {
30160 + ptdls_sta = LIST_CONTAINOR(plist, struct sta_info, hash_list);
30161 +
30162 + if( ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE )
30163 + issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta, 1);
30164 + plist = get_next(plist);
30165 + }
30166 + }
30167 +
30168 + _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
30169 +#endif //CONFIG_TDLS
30170 +
30171 pwrpriv->smart_ps = smart_ps;
30172 pwrpriv->pwr_mode = ps_mode;
30173 pwrpriv->bFwCurrentInPSMode = _TRUE;
30174 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
30175 -#ifdef CONFIG_P2P
30176 + rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
30177 +#ifdef CONFIG_P2P_PS
30178 // Set CTWindow after LPS
30179 if(pwdinfo->opp_ps == 1)
30180 - //if(pwdinfo->p2p_ps_enable == _TRUE)
30181 p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 0);
30182 -#endif //CONFIG_P2P
30183 +#endif // CONFIG_P2P_PS
30184 +#ifdef CONFIG_LPS_LCLK
30185 + if (pwrpriv->alives == 0)
30186 + rtw_set_rpwm(padapter, PS_STATE_S0);
30187 +#else
30188 rtw_set_rpwm(padapter, PS_STATE_S2);
30189 +#endif
30190 +#ifdef CONFIG_LPS_LCLK
30191 + _exit_pwrlock(&pwrpriv->lock);
30192 +#endif
30193 }
30194 //else
30195 //{
30196 @@ -422,18 +544,54 @@ void LPS_Enter(PADAPTER padapter)
30197 {
30198 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30199 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
30200 + _adapter *buddy = padapter->pbuddy_adapter;
30201
30202 _func_enter_;
30203
30204 // DBG_871X("+LeisurePSEnter\n");
30205
30206 +#ifdef CONFIG_CONCURRENT_MODE
30207 + if (padapter->iface_type != IFACE_PORT0)
30208 + return; /* Skip power saving for concurrent mode port 1*/
30209 +
30210 + /* consider buddy, if exist */
30211 + if (buddy) {
30212 + struct mlme_priv *b_pmlmepriv = &(buddy->mlmepriv);
30213 + #ifdef CONFIG_P2P
30214 + struct wifidirect_info *b_pwdinfo = &(buddy->wdinfo);
30215 + #ifdef CONFIG_IOCTL_CFG80211
30216 + struct cfg80211_wifidirect_info *b_pcfg80211_wdinfo = &buddy->cfg80211_wdinfo;
30217 + #endif
30218 + #endif
30219 +
30220 + if (check_fwstate(b_pmlmepriv, WIFI_ASOC_STATE|WIFI_SITE_MONITOR)
30221 + || check_fwstate(b_pmlmepriv, WIFI_UNDER_LINKING|WIFI_UNDER_WPS)
30222 + || check_fwstate(b_pmlmepriv, WIFI_AP_STATE)
30223 + || check_fwstate(b_pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)
30224 + #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211) && defined(CONFIG_P2P_IPS)
30225 + || b_pcfg80211_wdinfo->is_ro_ch
30226 + #elif defined(CONFIG_P2P)
30227 + || !rtw_p2p_chk_state(b_pwdinfo, P2P_STATE_NONE)
30228 + #endif
30229 + || rtw_is_scan_deny(buddy)
30230 + ) {
30231 + return;
30232 + }
30233 + }
30234 +#endif
30235 +
30236 +#ifdef CONFIG_INTEL_PROXIM
30237 + if(padapter->proximity.proxim_on==_TRUE){
30238 + return;
30239 + }
30240 +#endif
30241 if ( (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) ||
30242 (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) ||
30243 (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) ||
30244 (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
30245 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE) )
30246 return;
30247 -
30248 +
30249 if(_TRUE == pwrpriv->bInSuspend )
30250 return ;
30251
30252 @@ -451,6 +609,8 @@ _func_enter_;
30253 pwrpriv->LpsIdleCount++;
30254 }
30255
30256 +// DBG_871X("-LeisurePSEnter\n");
30257 +
30258 _func_exit_;
30259 }
30260
30261 @@ -461,21 +621,51 @@ _func_exit_;
30262 //
30263 void LPS_Leave(PADAPTER padapter)
30264 {
30265 - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30266 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
30267 +#define LPS_LEAVE_TIMEOUT_MS 100
30268
30269 + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
30270 + u32 start_time;
30271 + BOOLEAN bAwake = _FALSE;
30272 +
30273 _func_enter_;
30274
30275 - //DBG_8192C("LeisurePSLeave()...\n");
30276 +// DBG_871X("+LeisurePSLeave\n");
30277 +
30278 +#ifdef CONFIG_CONCURRENT_MODE
30279 + if (padapter->iface_type != IFACE_PORT0)
30280 + return; /* Skip power saving for concurrent mode port 1*/
30281 +#endif
30282
30283 if (pwrpriv->bLeisurePs)
30284 {
30285 if(pwrpriv->pwr_mode != PS_MODE_ACTIVE)
30286 {
30287 rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0);
30288 +
30289 + if(pwrpriv->pwr_mode == PS_MODE_ACTIVE)
30290 + {
30291 + start_time = rtw_get_current_time();
30292 + while(1)
30293 + {
30294 + rtw_hal_get_hwreg(padapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bAwake));
30295 +
30296 + if(bAwake || padapter->bSurpriseRemoved)
30297 + break;
30298 +
30299 + if(rtw_get_passing_time_ms(start_time)>LPS_LEAVE_TIMEOUT_MS)
30300 + {
30301 + DBG_871X("Wait for FW LPS leave more than %u ms!!!\n", LPS_LEAVE_TIMEOUT_MS);
30302 + break;
30303 + }
30304 + rtw_usleep_os(100);
30305 + }
30306 + }
30307 }
30308 }
30309
30310 +
30311 +// DBG_871X("-LeisurePSLeave\n");
30312 +
30313 _func_exit_;
30314 }
30315
30316 @@ -488,37 +678,18 @@ _func_exit_;
30317 void LeaveAllPowerSaveMode(IN PADAPTER Adapter)
30318 {
30319 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
30320 - u32 LPSLeaveTimeOut = 10000;
30321 - //u32 IPSLeaveTimeOut = 10000;
30322
30323 _func_enter_;
30324
30325 - //DBG_8192C("%s.....\n",__FUNCTION__);
30326 + //DBG_871X("%s.....\n",__FUNCTION__);
30327 if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
30328 { //connect
30329 -#ifdef CONFIG_P2P
30330 +#ifdef CONFIG_P2P_PS
30331 p2p_ps_wk_cmd(Adapter, P2P_PS_DISABLE, 0);
30332 -#endif //CONFIG_P2P
30333 +#endif // CONFIG_P2P_PS
30334 #ifdef CONFIG_LPS
30335 - //DBG_8192C("==> leave LPS.......\n");
30336 + //DBG_871X("==> leave LPS.......\n");
30337 LPS_Leave(Adapter);
30338 -
30339 - if (Adapter->pwrctrlpriv.bLeisurePs)
30340 - {
30341 - BOOLEAN bAwake = _TRUE;
30342 - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bAwake));
30343 - while(!bAwake)
30344 - {
30345 - rtw_usleep_os(100);
30346 - LPSLeaveTimeOut--;
30347 - if(LPSLeaveTimeOut <= 0)
30348 - {
30349 - DBG_8192C("Wait for FW LPS leave too long!!! LPSLeaveTimeOut = %d\n", LPSLeaveTimeOut );
30350 - break;
30351 - }
30352 - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bAwake));
30353 - }
30354 - }
30355 #endif
30356 }
30357 else
30358 @@ -529,11 +700,11 @@ _func_enter_;
30359 if(Adapter->registrypriv.usbss_enable)
30360 {
30361 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
30362 - usb_disable_autosuspend(Adapter->dvobjpriv.pusbdev);
30363 + usb_disable_autosuspend(adapter_to_dvobj(Adapter)->pusbdev);
30364 #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,22) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,34))
30365 - Adapter->dvobjpriv.pusbdev->autosuspend_disabled = Adapter->bDisableAutosuspend;//autosuspend disabled by the user
30366 + adapter_to_dvobj(Adapter)->pusbdev->autosuspend_disabled = Adapter->bDisableAutosuspend;//autosuspend disabled by the user
30367 #endif
30368 - }
30369 + }
30370 else
30371 #endif
30372 {
30373 @@ -541,448 +712,450 @@ _func_enter_;
30374 #ifdef CONFIG_IPS
30375 if(_FALSE == ips_leave(Adapter))
30376 {
30377 - DBG_8192C("======> ips_leave fail.............\n");
30378 + DBG_871X("======> ips_leave fail.............\n");
30379 }
30380 #endif
30381 */
30382 - }
30383 + }
30384 }
30385 }
30386
30387 _func_exit_;
30388 }
30389
30390 -#ifdef CONFIG_PWRCTRL
30391 -
30392 +#ifdef CONFIG_LPS_LCLK
30393 /*
30394 -Caller:ISR handler...
30395 -
30396 -This will be called when CPWM interrupt is up.
30397 -
30398 -using to update cpwn of drv; and drv willl make a decision to up or down pwr level
30399 -*/
30400 -void cpwm_int_hdl(_adapter *padapter, struct reportpwrstate_parm *preportpwrstate)
30401 + * Caller:ISR handler...
30402 + *
30403 + * This will be called when CPWM interrupt is up.
30404 + *
30405 + * using to update cpwn of drv; and drv willl make a decision to up or down pwr level
30406 + */
30407 +void cpwm_int_hdl(
30408 + PADAPTER padapter,
30409 + struct reportpwrstate_parm *preportpwrstate)
30410 {
30411 - struct pwrctrl_priv *pwrpriv = &(padapter->pwrctrlpriv);
30412 - struct cmd_priv *pcmdpriv = &(padapter->cmdpriv);
30413 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
30414 + struct pwrctrl_priv *pwrpriv;
30415 +
30416
30417 _func_enter_;
30418
30419 - if(pwrpriv->cpwm_tog == ((preportpwrstate->state)&0x80)){
30420 - 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));
30421 + pwrpriv = &padapter->pwrctrlpriv;
30422 +#if 0
30423 + if (pwrpriv->cpwm_tog == (preportpwrstate->state & PS_TOGGLE)) {
30424 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_err_,
30425 + ("cpwm_int_hdl: tog(old)=0x%02x cpwm(new)=0x%02x toggle bit didn't change!?\n",
30426 + pwrpriv->cpwm_tog, preportpwrstate->state));
30427 goto exit;
30428 }
30429 +#endif
30430 +// _enter_pwrlock(&pwrpriv->lock);
30431
30432 - _enter_pwrlock(&pwrpriv->lock);
30433 -
30434 - pwrpriv->cpwm = (preportpwrstate->state)&0xf;
30435 + pwrpriv->cpwm = PS_STATE(preportpwrstate->state);
30436 + pwrpriv->cpwm_tog = preportpwrstate->state & PS_TOGGLE;
30437
30438 - if(pwrpriv->cpwm >= PS_STATE_S2){
30439 - if(pwrpriv->alives & CMD_ALIVE)
30440 - _rtw_up_sema(&(pcmdpriv->cmd_queue_sema));
30441 + if (pwrpriv->cpwm >= PS_STATE_S2) {
30442 + if (pwrpriv->alives & CMD_ALIVE)
30443 + _rtw_up_sema(&padapter->cmdpriv.cmd_queue_sema);
30444
30445 - if(pwrpriv->alives & XMIT_ALIVE)
30446 - _rtw_up_sema(&(pxmitpriv->xmit_sema));
30447 + if (pwrpriv->alives & XMIT_ALIVE)
30448 + _rtw_up_sema(&padapter->xmitpriv.xmit_sema);
30449 }
30450 - pwrpriv->cpwm_tog= (preportpwrstate->state)&0x80;
30451 - _exit_pwrlock(&pwrpriv->lock);
30452 +
30453 +// _exit_pwrlock(&pwrpriv->lock);
30454 +
30455 exit:
30456 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("cpwm_int_hdl : cpwm = %x !!!\n",pwrpriv->cpwm));
30457 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
30458 + ("cpwm_int_hdl: cpwm=0x%02x\n", pwrpriv->cpwm));
30459
30460 _func_exit_;
30461 -
30462 }
30463
30464 +__inline static void register_task_alive(struct pwrctrl_priv *pwrctrl, u32 tag)
30465 +{
30466 + pwrctrl->alives |= tag;
30467 +}
30468
30469 -__inline static void register_task_alive(struct pwrctrl_priv *pwrctrl, uint tag)
30470 +__inline static void unregister_task_alive(struct pwrctrl_priv *pwrctrl, u32 tag)
30471 {
30472 -_func_enter_;
30473 - pwrctrl->alives |= tag;
30474 -_func_exit_;
30475 + pwrctrl->alives &= ~tag;
30476 }
30477
30478 -__inline static void unregister_task_alive(struct pwrctrl_priv *pwrctrl, uint tag)
30479 +/*
30480 + * Caller: rtw_xmit_thread
30481 + *
30482 + * Check if the fw_pwrstate is okay for xmit.
30483 + * If not (cpwm is less than S3), then the sub-routine
30484 + * will raise the cpwm to be greater than or equal to S3.
30485 + *
30486 + * Calling Context: Passive
30487 + *
30488 + * Return Value:
30489 + * _SUCCESS rtw_xmit_thread can write fifo/txcmd afterwards.
30490 + * _FAIL rtw_xmit_thread can not do anything.
30491 + */
30492 +s32 rtw_register_tx_alive(PADAPTER padapter)
30493 {
30494 + s32 res;
30495 + struct pwrctrl_priv *pwrctrl;
30496 +
30497 _func_enter_;
30498
30499 - if (pwrctrl->alives & tag)
30500 - pwrctrl->alives ^= tag;
30501 + res = _SUCCESS;
30502 + pwrctrl = &padapter->pwrctrlpriv;
30503
30504 -_func_exit_;
30505 -}
30506 -#endif
30507 + _enter_pwrlock(&pwrctrl->lock);
30508
30509 -#ifdef CONFIG_RESUME_IN_WORKQUEUE
30510 -static void resume_workitem_callback(struct work_struct *work);
30511 -#endif //CONFIG_RESUME_IN_WORKQUEUE
30512 + register_task_alive(pwrctrl, XMIT_ALIVE);
30513
30514 -void rtw_init_pwrctrl_priv(_adapter *padapter)
30515 + if (pwrctrl->bFwCurrentInPSMode == _TRUE)
30516 + {
30517 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_err_,
30518 + ("rtw_register_tx_alive: cpwm=0x%02x alives=0x%08x\n",
30519 + pwrctrl->cpwm, pwrctrl->alives));
30520 +
30521 + if (pwrctrl->cpwm < PS_STATE_S2) {
30522 + if (pwrctrl->rpwm < PS_STATE_S2)
30523 + rtw_set_rpwm(padapter, PS_STATE_S2);
30524 + res = _FAIL;
30525 + }
30526 + }
30527 +
30528 + _exit_pwrlock(&pwrctrl->lock);
30529 +
30530 +_func_exit_;
30531 +
30532 + return res;
30533 +}
30534 +
30535 +/*
30536 + * Caller: rtw_cmd_thread
30537 + *
30538 + * Check if the fw_pwrstate is okay for issuing cmd.
30539 + * If not (cpwm should be is less than S2), then the sub-routine
30540 + * will raise the cpwm to be greater than or equal to S2.
30541 + *
30542 + * Calling Context: Passive
30543 + *
30544 + * Return Value:
30545 + * _SUCCESS rtw_cmd_thread can issue cmds to firmware afterwards.
30546 + * _FAIL rtw_cmd_thread can not do anything.
30547 + */
30548 +s32 rtw_register_cmd_alive(PADAPTER padapter)
30549 {
30550 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
30551 + s32 res;
30552 + struct pwrctrl_priv *pwrctrl;
30553
30554 _func_enter_;
30555
30556 -#ifdef PLATFORM_WINDOWS
30557 - pwrctrlpriv->pnp_current_pwr_state=NdisDeviceStateD0;
30558 -#endif
30559 -
30560 - _init_pwrlock(&pwrctrlpriv->lock);
30561 - pwrctrlpriv->rf_pwrstate = rf_on;
30562 - pwrctrlpriv->ips_enter_cnts=0;
30563 - pwrctrlpriv->ips_leave_cnts=0;
30564 -
30565 - pwrctrlpriv->ips_mode = padapter->registrypriv.ips_mode;
30566 - pwrctrlpriv->ips_mode_req = padapter->registrypriv.ips_mode;
30567 + res = _SUCCESS;
30568 + pwrctrl = &padapter->pwrctrlpriv;
30569
30570 - pwrctrlpriv->pwr_state_check_interval = 2000;
30571 - pwrctrlpriv->pwr_state_check_cnts = 0;
30572 - pwrctrlpriv->bInternalAutoSuspend = _FALSE;
30573 - pwrctrlpriv->bInSuspend = _FALSE;
30574 - pwrctrlpriv->bkeepfwalive = _FALSE;
30575 -
30576 -#ifdef CONFIG_AUTOSUSPEND
30577 -#ifdef SUPPORT_HW_RFOFF_DETECTED
30578 - pwrctrlpriv->pwr_state_check_interval = (pwrctrlpriv->bHWPwrPindetect) ?1000:2000;
30579 -#endif
30580 -#endif
30581 -
30582 - pwrctrlpriv->LpsIdleCount = 0;
30583 - //pwrctrlpriv->FWCtrlPSMode =padapter->registrypriv.power_mgnt;// PS_MODE_MIN;
30584 - pwrctrlpriv->power_mgnt =padapter->registrypriv.power_mgnt;// PS_MODE_MIN;
30585 - pwrctrlpriv->bLeisurePs = (PS_MODE_ACTIVE != pwrctrlpriv->power_mgnt)?_TRUE:_FALSE;
30586 -
30587 - pwrctrlpriv->bFwCurrentInPSMode = _FALSE;
30588 -
30589 - pwrctrlpriv->cpwm = PS_STATE_S4;
30590 -
30591 - pwrctrlpriv->pwr_mode = PS_MODE_ACTIVE;
30592 -
30593 -
30594 - pwrctrlpriv->smart_ps = 0;
30595 -
30596 - pwrctrlpriv->tog = 0x80;
30597 -
30598 -#ifdef PLATFORM_LINUX
30599 - _init_timer(&(pwrctrlpriv->pwr_state_check_timer), padapter->pnetdev, pwr_state_check_handler, (u8 *)padapter);
30600 -#endif
30601 + _enter_pwrlock(&pwrctrl->lock);
30602
30603 - #ifdef CONFIG_RESUME_IN_WORKQUEUE
30604 - _init_workitem(&pwrctrlpriv->resume_work, resume_workitem_callback, NULL);
30605 - pwrctrlpriv->rtw_workqueue = create_singlethread_workqueue("rtw_workqueue");
30606 - #endif //CONFIG_RESUME_IN_WORKQUEUE
30607 + register_task_alive(pwrctrl, CMD_ALIVE);
30608
30609 - #if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
30610 - pwrctrlpriv->early_suspend.suspend = NULL;
30611 - rtw_register_early_suspend(pwrctrlpriv);
30612 - #endif //CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER
30613 + if (pwrctrl->bFwCurrentInPSMode == _TRUE)
30614 + {
30615 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
30616 + ("rtw_register_cmd_alive: cpwm=0x%02x alives=0x%08x\n",
30617 + pwrctrl->cpwm, pwrctrl->alives));
30618 +
30619 + if (pwrctrl->cpwm < PS_STATE_S2) {
30620 + if (pwrctrl->rpwm < PS_STATE_S2)
30621 + rtw_set_rpwm(padapter, PS_STATE_S2);
30622 + res = _FAIL;
30623 + }
30624 + }
30625
30626 + _exit_pwrlock(&pwrctrl->lock);
30627
30628 _func_exit_;
30629
30630 + return res;
30631 }
30632
30633 -
30634 -void rtw_free_pwrctrl_priv(_adapter *adapter)
30635 +/*
30636 + * Caller: rx_isr
30637 + *
30638 + * Calling Context: Dispatch/ISR
30639 + *
30640 + * Return Value:
30641 + * _SUCCESS
30642 + * _FAIL
30643 + */
30644 +s32 rtw_register_rx_alive(PADAPTER padapter)
30645 {
30646 - struct pwrctrl_priv *pwrctrlpriv = &adapter->pwrctrlpriv;
30647 + struct pwrctrl_priv *pwrctrl;
30648
30649 _func_enter_;
30650
30651 - //_rtw_memset((unsigned char *)pwrctrlpriv, 0, sizeof(struct pwrctrl_priv));
30652 -
30653 -
30654 - #ifdef CONFIG_RESUME_IN_WORKQUEUE
30655 - if (pwrctrlpriv->rtw_workqueue) {
30656 - flush_workqueue(pwrctrlpriv->rtw_workqueue);
30657 - destroy_workqueue(pwrctrlpriv->rtw_workqueue);
30658 - }
30659 - #endif
30660 + pwrctrl = &padapter->pwrctrlpriv;
30661
30662 + _enter_pwrlock(&pwrctrl->lock);
30663
30664 - #if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
30665 - rtw_unregister_early_suspend(pwrctrlpriv);
30666 - #endif //CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER
30667 + register_task_alive(pwrctrl, RECV_ALIVE);
30668 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
30669 + ("rtw_register_rx_alive: cpwm=0x%02x alives=0x%08x\n",
30670 + pwrctrl->cpwm, pwrctrl->alives));
30671
30672 - _free_pwrlock(&pwrctrlpriv->lock);
30673 + _exit_pwrlock(&pwrctrl->lock);
30674
30675 _func_exit_;
30676 -}
30677
30678 + return _SUCCESS;
30679 +}
30680
30681 /*
30682 -Caller: rtw_xmit_thread
30683 -
30684 -Check if the fw_pwrstate is okay for xmit.
30685 -If not (cpwm is less than P1 state), then the sub-routine
30686 -will raise the cpwm to be greater than or equal to P1.
30687 -
30688 -Calling Context: Passive
30689 -
30690 -Return Value:
30691 -
30692 -_SUCCESS: rtw_xmit_thread can write fifo/txcmd afterwards.
30693 -_FAIL: rtw_xmit_thread can not do anything.
30694 -*/
30695 -sint rtw_register_tx_alive(_adapter *padapter)
30696 + * Caller: evt_isr or evt_thread
30697 + *
30698 + * Calling Context: Dispatch/ISR or Passive
30699 + *
30700 + * Return Value:
30701 + * _SUCCESS
30702 + * _FAIL
30703 + */
30704 +s32 rtw_register_evt_alive(PADAPTER padapter)
30705 {
30706 - uint res = _SUCCESS;
30707 -
30708 -#ifdef CONFIG_PWRCTRL
30709 -
30710 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
30711 + struct pwrctrl_priv *pwrctrl;
30712
30713 _func_enter_;
30714
30715 - _enter_pwrlock(&pwrctrl->lock);
30716 + pwrctrl = &padapter->pwrctrlpriv;
30717
30718 - register_task_alive(pwrctrl, XMIT_ALIVE);
30719 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_register_tx_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
30720 + _enter_pwrlock(&pwrctrl->lock);
30721
30722 - if(pwrctrl->cpwm < PS_STATE_S2){
30723 - rtw_set_rpwm(padapter, PS_STATE_S3);
30724 - res = _FAIL;
30725 - }
30726 + register_task_alive(pwrctrl, EVT_ALIVE);
30727 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
30728 + ("rtw_register_evt_alive: cpwm=0x%02x alives=0x%08x\n",
30729 + pwrctrl->cpwm, pwrctrl->alives));
30730
30731 _exit_pwrlock(&pwrctrl->lock);
30732 -
30733 -_func_exit_;
30734
30735 -#endif /* CONFIG_PWRCTRL */
30736 -
30737 - return res;
30738 +_func_exit_;
30739
30740 + return _SUCCESS;
30741 }
30742
30743 /*
30744 -Caller: rtw_cmd_thread
30745 -
30746 -Check if the fw_pwrstate is okay for issuing cmd.
30747 -If not (cpwm should be is less than P2 state), then the sub-routine
30748 -will raise the cpwm to be greater than or equal to P2.
30749 -
30750 -Calling Context: Passive
30751 -
30752 -Return Value:
30753 -
30754 -_SUCCESS: rtw_cmd_thread can issue cmds to firmware afterwards.
30755 -_FAIL: rtw_cmd_thread can not do anything.
30756 -*/
30757 -sint rtw_register_cmd_alive(_adapter *padapter)
30758 + * Caller: ISR
30759 + *
30760 + * If ISR's txdone,
30761 + * No more pkts for TX,
30762 + * Then driver shall call this fun. to power down firmware again.
30763 + */
30764 +void rtw_unregister_tx_alive(PADAPTER padapter)
30765 {
30766 - uint res = _SUCCESS;
30767 -
30768 -#ifdef CONFIG_PWRCTRL
30769 -
30770 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
30771 + struct pwrctrl_priv *pwrctrl;
30772
30773 _func_enter_;
30774
30775 + pwrctrl = &padapter->pwrctrlpriv;
30776 +
30777 _enter_pwrlock(&pwrctrl->lock);
30778
30779 - register_task_alive(pwrctrl, CMD_ALIVE);
30780 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_register_cmd_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
30781 + unregister_task_alive(pwrctrl, XMIT_ALIVE);
30782
30783 - if(pwrctrl->cpwm < PS_STATE_S2){
30784 - rtw_set_rpwm(padapter, PS_STATE_S3);
30785 - res = _FAIL;
30786 + if ((pwrctrl->pwr_mode != PS_MODE_ACTIVE) &&
30787 + (pwrctrl->bFwCurrentInPSMode == _TRUE))
30788 + {
30789 + if ((pwrctrl->alives == 0) &&
30790 + (pwrctrl->cpwm > PS_STATE_S0))
30791 + {
30792 + rtw_set_rpwm(padapter, PS_STATE_S0);
30793 + }
30794 +
30795 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
30796 + ("rtw_unregister_tx_alive: cpwm=0x%02x alives=0x%08x\n",
30797 + pwrctrl->cpwm, pwrctrl->alives));
30798 }
30799
30800 _exit_pwrlock(&pwrctrl->lock);
30801 -_func_exit_;
30802 -#endif
30803
30804 - return res;
30805 +_func_exit_;
30806 }
30807
30808 -
30809 /*
30810 -Caller: rx_isr
30811 -
30812 -Calling Context: Dispatch/ISR
30813 -
30814 -Return Value:
30815 -
30816 -*/
30817 -sint rtw_register_rx_alive(_adapter *padapter)
30818 + * Caller: ISR
30819 + *
30820 + * If all commands have been done,
30821 + * and no more command to do,
30822 + * then driver shall call this fun. to power down firmware again.
30823 + */
30824 +void rtw_unregister_cmd_alive(PADAPTER padapter)
30825 {
30826 -
30827 -#ifdef CONFIG_PWRCTRL
30828 -
30829 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
30830 + struct pwrctrl_priv *pwrctrl;
30831
30832 _func_enter_;
30833
30834 + pwrctrl = &padapter->pwrctrlpriv;
30835 +
30836 _enter_pwrlock(&pwrctrl->lock);
30837
30838 - register_task_alive(pwrctrl, RECV_ALIVE);
30839 + unregister_task_alive(pwrctrl, CMD_ALIVE);
30840
30841 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_register_rx_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
30842 + if ((pwrctrl->pwr_mode != PS_MODE_ACTIVE) &&
30843 + (pwrctrl->bFwCurrentInPSMode == _TRUE))
30844 + {
30845 + if ((pwrctrl->alives == 0) &&
30846 + (pwrctrl->cpwm > PS_STATE_S0))
30847 + {
30848 + rtw_set_rpwm(padapter, PS_STATE_S0);
30849 + }
30850 +
30851 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
30852 + ("rtw_unregister_cmd_alive: cpwm=0x%02x alives=0x%08x\n",
30853 + pwrctrl->cpwm, pwrctrl->alives));
30854 + }
30855
30856 _exit_pwrlock(&pwrctrl->lock);
30857
30858 _func_exit_;
30859 -
30860 -#endif /*CONFIG_PWRCTRL*/
30861 -
30862 - return _SUCCESS;
30863 }
30864
30865 -
30866 /*
30867 -Caller: evt_isr or evt_thread
30868 -
30869 -Calling Context: Dispatch/ISR or Passive
30870 -
30871 -Return Value:
30872 -*/
30873 -sint rtw_register_evt_alive(_adapter *padapter)
30874 + * Caller: ISR
30875 + */
30876 +void rtw_unregister_rx_alive(PADAPTER padapter)
30877 {
30878 -
30879 -#ifdef CONFIG_PWRCTRL
30880 -
30881 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
30882 + struct pwrctrl_priv *pwrctrl;
30883
30884 _func_enter_;
30885
30886 + pwrctrl = &padapter->pwrctrlpriv;
30887 +
30888 _enter_pwrlock(&pwrctrl->lock);
30889
30890 - register_task_alive(pwrctrl, EVT_ALIVE);
30891 + unregister_task_alive(pwrctrl, RECV_ALIVE);
30892
30893 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_info_,("rtw_register_evt_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
30894 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
30895 + ("rtw_unregister_rx_alive: cpwm=0x%02x alives=0x%08x\n",
30896 + pwrctrl->cpwm, pwrctrl->alives));
30897
30898 _exit_pwrlock(&pwrctrl->lock);
30899
30900 _func_exit_;
30901 -
30902 -#endif /*CONFIG_PWRCTRL*/
30903 -
30904 - return _SUCCESS;
30905 }
30906
30907 -
30908 -/*
30909 -Caller: ISR
30910 -
30911 -If ISR's txdone,
30912 -No more pkts for TX,
30913 -Then driver shall call this fun. to power down firmware again.
30914 -*/
30915 -
30916 -void rtw_unregister_tx_alive(_adapter *padapter)
30917 +void rtw_unregister_evt_alive(PADAPTER padapter)
30918 {
30919 -#ifdef CONFIG_PWRCTRL
30920 -
30921 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
30922 + struct pwrctrl_priv *pwrctrl;
30923
30924 _func_enter_;
30925
30926 - _enter_pwrlock(&pwrctrl->lock);
30927 + pwrctrl = &padapter->pwrctrlpriv;
30928
30929 - unregister_task_alive(pwrctrl, XMIT_ALIVE);
30930 + unregister_task_alive(pwrctrl, EVT_ALIVE);
30931
30932 - if((pwrctrl->cpwm > PS_STATE_S2) && (pwrctrl->pwr_mode > PS_MODE_ACTIVE)){
30933 - if(pwrctrl->alives == 0){
30934 - rtw_set_rpwm(padapter, PS_STATE_S0);
30935 - }
30936 - }
30937 + RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
30938 + ("rtw_unregister_evt_alive: cpwm=0x%02x alives=0x%08x\n",
30939 + pwrctrl->cpwm, pwrctrl->alives));
30940
30941 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_unregister_tx_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
30942 -
30943 _exit_pwrlock(&pwrctrl->lock);
30944
30945 _func_exit_;
30946 -
30947 -#endif /*CONFIG_PWRCTRL*/
30948 }
30949 +#endif /* CONFIG_LPS_LCLK */
30950
30951 -/*
30952 -Caller: ISR
30953 -
30954 -If ISR's txdone,
30955 -No more pkts for TX,
30956 -Then driver shall call this fun. to power down firmware again.
30957 -*/
30958 +#ifdef CONFIG_RESUME_IN_WORKQUEUE
30959 +static void resume_workitem_callback(struct work_struct *work);
30960 +#endif //CONFIG_RESUME_IN_WORKQUEUE
30961
30962 -void rtw_unregister_cmd_alive(_adapter *padapter)
30963 +void rtw_init_pwrctrl_priv(PADAPTER padapter)
30964 {
30965 -#ifdef CONFIG_PWRCTRL
30966 -
30967 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
30968 + struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
30969
30970 _func_enter_;
30971
30972 - _enter_pwrlock(&pwrctrl->lock);
30973 +#ifdef PLATFORM_WINDOWS
30974 + pwrctrlpriv->pnp_current_pwr_state=NdisDeviceStateD0;
30975 +#endif
30976
30977 - unregister_task_alive(pwrctrl, CMD_ALIVE);
30978 + _init_pwrlock(&pwrctrlpriv->lock);
30979 + pwrctrlpriv->rf_pwrstate = rf_on;
30980 + pwrctrlpriv->ips_enter_cnts=0;
30981 + pwrctrlpriv->ips_leave_cnts=0;
30982
30983 - if((pwrctrl->cpwm > PS_STATE_S2) && (pwrctrl->pwr_mode > PS_MODE_ACTIVE)){
30984 - if((pwrctrl->alives == 0)&&(check_fwstate(&padapter->mlmepriv, _FW_UNDER_LINKING)!=_TRUE)){
30985 - rtw_set_rpwm(padapter, PS_STATE_S0);
30986 - }
30987 - }
30988 + pwrctrlpriv->ips_mode = padapter->registrypriv.ips_mode;
30989 + pwrctrlpriv->ips_mode_req = padapter->registrypriv.ips_mode;
30990
30991 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_unregister_cmd_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
30992 + pwrctrlpriv->pwr_state_check_interval = RTW_PWR_STATE_CHK_INTERVAL;
30993 + pwrctrlpriv->pwr_state_check_cnts = 0;
30994 + pwrctrlpriv->bInternalAutoSuspend = _FALSE;
30995 + pwrctrlpriv->bInSuspend = _FALSE;
30996 + pwrctrlpriv->bkeepfwalive = _FALSE;
30997
30998 - _exit_pwrlock(&pwrctrl->lock);
30999 +#ifdef CONFIG_AUTOSUSPEND
31000 +#ifdef SUPPORT_HW_RFOFF_DETECTED
31001 + pwrctrlpriv->pwr_state_check_interval = (pwrctrlpriv->bHWPwrPindetect) ?1000:2000;
31002 +#endif
31003 +#endif
31004
31005 -_func_exit_;
31006 + pwrctrlpriv->LpsIdleCount = 0;
31007 + //pwrctrlpriv->FWCtrlPSMode =padapter->registrypriv.power_mgnt;// PS_MODE_MIN;
31008 + pwrctrlpriv->power_mgnt =padapter->registrypriv.power_mgnt;// PS_MODE_MIN;
31009 + pwrctrlpriv->bLeisurePs = (PS_MODE_ACTIVE != pwrctrlpriv->power_mgnt)?_TRUE:_FALSE;
31010
31011 -#endif /*CONFIG_PWRCTRL*/
31012 -}
31013 + pwrctrlpriv->bFwCurrentInPSMode = _FALSE;
31014
31015 + pwrctrlpriv->cpwm = PS_STATE_S4;
31016
31017 -/*
31018 + pwrctrlpriv->pwr_mode = PS_MODE_ACTIVE;
31019
31020 -Caller: ISR
31021
31022 -*/
31023 -void rtw_unregister_rx_alive(_adapter *padapter)
31024 -{
31025 -#ifdef CONFIG_PWRCTRL
31026 + pwrctrlpriv->smart_ps = 0;
31027
31028 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
31029 + pwrctrlpriv->tog = 0x80;
31030
31031 -_func_enter_;
31032 +#ifdef PLATFORM_LINUX
31033 + _init_timer(&(pwrctrlpriv->pwr_state_check_timer), padapter->pnetdev, pwr_state_check_handler, (u8 *)padapter);
31034 +#endif
31035
31036 - _enter_pwrlock(&pwrctrl->lock);
31037 + #ifdef CONFIG_RESUME_IN_WORKQUEUE
31038 + _init_workitem(&pwrctrlpriv->resume_work, resume_workitem_callback, NULL);
31039 + pwrctrlpriv->rtw_workqueue = create_singlethread_workqueue("rtw_workqueue");
31040 + #endif //CONFIG_RESUME_IN_WORKQUEUE
31041
31042 - unregister_task_alive(pwrctrl, RECV_ALIVE);
31043 + #if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
31044 + pwrctrlpriv->early_suspend.suspend = NULL;
31045 + rtw_register_early_suspend(pwrctrlpriv);
31046 + #endif //CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER
31047
31048 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_unregister_rx_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
31049 -
31050 - _exit_pwrlock(&pwrctrl->lock);
31051
31052 _func_exit_;
31053
31054 -#endif
31055 }
31056
31057
31058 -void rtw_unregister_evt_alive(_adapter *padapter)
31059 +void rtw_free_pwrctrl_priv(PADAPTER adapter)
31060 {
31061 -#ifdef CONFIG_PWRCTRL
31062 -
31063 - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
31064 + struct pwrctrl_priv *pwrctrlpriv = &adapter->pwrctrlpriv;
31065
31066 _func_enter_;
31067
31068 - _enter_pwrlock(&pwrctrl->lock);
31069 + //_rtw_memset((unsigned char *)pwrctrlpriv, 0, sizeof(struct pwrctrl_priv));
31070
31071 - unregister_task_alive(pwrctrl, EVT_ALIVE);
31072
31073 - RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,("rtw_unregister_evt_alive: cpwm:%d alives:%x\n", pwrctrl->cpwm, pwrctrl->alives));
31074 -
31075 - _exit_pwrlock(&pwrctrl->lock);
31076 + #ifdef CONFIG_RESUME_IN_WORKQUEUE
31077 + if (pwrctrlpriv->rtw_workqueue) {
31078 + flush_workqueue(pwrctrlpriv->rtw_workqueue);
31079 + destroy_workqueue(pwrctrlpriv->rtw_workqueue);
31080 + }
31081 + #endif
31082
31083 -_func_exit_;
31084
31085 -#endif /*CONFIG_PWRCTRL*/
31086 + #if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
31087 + rtw_unregister_early_suspend(pwrctrlpriv);
31088 + #endif //CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER
31089 +
31090 + _free_pwrlock(&pwrctrlpriv->lock);
31091 +
31092 +_func_exit_;
31093 }
31094
31095 #ifdef CONFIG_RESUME_IN_WORKQUEUE
31096 -#ifdef CONFIG_USB_HCI
31097 -extern int rtw_resume_process(struct usb_interface *pusb_intf);
31098 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
31099 +extern int rtw_resume_process(_adapter *padapter);
31100 #endif
31101 static void resume_workitem_callback(struct work_struct *work)
31102 {
31103 @@ -991,9 +1164,8 @@ static void resume_workitem_callback(struct work_struct *work)
31104
31105 DBG_871X("%s\n",__FUNCTION__);
31106
31107 - #ifdef CONFIG_USB_HCI
31108 - rtw_resume_process(adapter->dvobjpriv.pusbintf);
31109 - #elif defined(CONFIG_PCI_HCI)
31110 + #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
31111 + rtw_resume_process(adapter);
31112 #endif
31113
31114 }
31115 @@ -1011,17 +1183,33 @@ void rtw_resume_in_workqueue(struct pwrctrl_priv *pwrpriv)
31116 }
31117 #endif //CONFIG_RESUME_IN_WORKQUEUE
31118
31119 +#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
31120 +inline bool rtw_is_earlysuspend_registered(struct pwrctrl_priv *pwrpriv)
31121 +{
31122 + return (pwrpriv->early_suspend.suspend) ? _TRUE : _FALSE;
31123 +}
31124 +
31125 +inline bool rtw_is_do_late_resume(struct pwrctrl_priv *pwrpriv)
31126 +{
31127 + return (pwrpriv->do_late_resume) ? _TRUE : _FALSE;
31128 +}
31129 +
31130 +inline void rtw_set_do_late_resume(struct pwrctrl_priv *pwrpriv, bool enable)
31131 +{
31132 + pwrpriv->do_late_resume = enable;
31133 +}
31134 +#endif
31135 +
31136 #ifdef CONFIG_HAS_EARLYSUSPEND
31137 -#ifdef CONFIG_USB_HCI
31138 -extern int rtw_resume_process(struct usb_interface *pusb_intf);
31139 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
31140 +extern int rtw_resume_process(_adapter *padapter);
31141 #endif
31142 static void rtw_early_suspend(struct early_suspend *h)
31143 {
31144 struct pwrctrl_priv *pwrpriv = container_of(h, struct pwrctrl_priv, early_suspend);
31145 DBG_871X("%s\n",__FUNCTION__);
31146 -
31147 - //jeff: do nothing but set do_late_resume to false
31148 - pwrpriv->do_late_resume = _FALSE;
31149 +
31150 + rtw_set_do_late_resume(pwrpriv, _FALSE);
31151 }
31152
31153 static void rtw_late_resume(struct early_suspend *h)
31154 @@ -1031,16 +1219,22 @@ static void rtw_late_resume(struct early_suspend *h)
31155
31156 DBG_871X("%s\n",__FUNCTION__);
31157 if(pwrpriv->do_late_resume) {
31158 - #ifdef CONFIG_USB_HCI
31159 - rtw_resume_process(adapter->dvobjpriv.pusbintf);
31160 - pwrpriv->do_late_resume = _FALSE;
31161 - #elif defined(CONFIG_PCI_HCI)
31162 + #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
31163 + rtw_set_do_late_resume(pwrpriv, _FALSE);
31164 + rtw_resume_process(adapter);
31165 #endif
31166 }
31167 }
31168
31169 void rtw_register_early_suspend(struct pwrctrl_priv *pwrpriv)
31170 {
31171 + _adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
31172 +
31173 +#if defined(CONFIG_CONCURRENT_MODE)
31174 + if (adapter->adapter_type != PRIMARY_ADAPTER)
31175 + return;
31176 +#endif
31177 +
31178 DBG_871X("%s\n", __FUNCTION__);
31179
31180 //jeff: set the early suspend level before blank screen, so we wll do late resume after scree is lit
31181 @@ -1054,9 +1248,16 @@ void rtw_register_early_suspend(struct pwrctrl_priv *pwrpriv)
31182
31183 void rtw_unregister_early_suspend(struct pwrctrl_priv *pwrpriv)
31184 {
31185 + _adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
31186 +
31187 +#if defined(CONFIG_CONCURRENT_MODE)
31188 + if (adapter->adapter_type != PRIMARY_ADAPTER)
31189 + return;
31190 +#endif
31191 +
31192 DBG_871X("%s\n", __FUNCTION__);
31193
31194 - pwrpriv->do_late_resume = _FALSE;
31195 + rtw_set_do_late_resume(pwrpriv, _FALSE);
31196
31197 if (pwrpriv->early_suspend.suspend)
31198 unregister_early_suspend(&pwrpriv->early_suspend);
31199 @@ -1067,16 +1268,15 @@ void rtw_unregister_early_suspend(struct pwrctrl_priv *pwrpriv)
31200 #endif //CONFIG_HAS_EARLYSUSPEND
31201
31202 #ifdef CONFIG_ANDROID_POWER
31203 -#ifdef CONFIG_USB_HCI
31204 -extern int rtw_resume_process(struct usb_interface *pusb_intf);
31205 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
31206 +extern int rtw_resume_process(PADAPTER padapter);
31207 #endif
31208 static void rtw_early_suspend(android_early_suspend_t *h)
31209 {
31210 struct pwrctrl_priv *pwrpriv = container_of(h, struct pwrctrl_priv, early_suspend);
31211 DBG_871X("%s\n",__FUNCTION__);
31212 -
31213 - //jeff: do nothing but set do_late_resume to false
31214 - pwrpriv->do_late_resume = _FALSE;
31215 +
31216 + rtw_set_do_late_resume(pwrpriv, _FALSE);
31217 }
31218
31219 static void rtw_late_resume(android_early_suspend_t *h)
31220 @@ -1086,16 +1286,22 @@ static void rtw_late_resume(android_early_suspend_t *h)
31221
31222 DBG_871X("%s\n",__FUNCTION__);
31223 if(pwrpriv->do_late_resume) {
31224 - #ifdef CONFIG_USB_HCI
31225 - rtw_resume_process(adapter->dvobjpriv.pusbintf);
31226 - pwrpriv->do_late_resume = _FALSE;
31227 - #elif defined(CONFIG_PCI_HCI)
31228 + #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
31229 + rtw_set_do_late_resume(pwrpriv, _FALSE);
31230 + rtw_resume_process(adapter);
31231 #endif
31232 }
31233 }
31234
31235 void rtw_register_early_suspend(struct pwrctrl_priv *pwrpriv)
31236 {
31237 + _adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
31238 +
31239 +#if defined(CONFIG_CONCURRENT_MODE)
31240 + if (adapter->adapter_type != PRIMARY_ADAPTER)
31241 + return;
31242 +#endif
31243 +
31244 DBG_871X("%s\n", __FUNCTION__);
31245
31246 //jeff: set the early suspend level before blank screen, so we wll do late resume after scree is lit
31247 @@ -1107,9 +1313,16 @@ void rtw_register_early_suspend(struct pwrctrl_priv *pwrpriv)
31248
31249 void rtw_unregister_early_suspend(struct pwrctrl_priv *pwrpriv)
31250 {
31251 + _adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
31252 +
31253 +#if defined(CONFIG_CONCURRENT_MODE)
31254 + if (adapter->adapter_type != PRIMARY_ADAPTER)
31255 + return;
31256 +#endif
31257 +
31258 DBG_871X("%s\n", __FUNCTION__);
31259
31260 - pwrpriv->do_late_resume = _FALSE;
31261 + rtw_set_do_late_resume(pwrpriv, _FALSE);
31262
31263 if (pwrpriv->early_suspend.suspend)
31264 android_unregister_early_suspend(&pwrpriv->early_suspend);
31265 @@ -1122,24 +1335,81 @@ void rtw_unregister_early_suspend(struct pwrctrl_priv *pwrpriv)
31266 u8 rtw_interface_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id,u8* val)
31267 {
31268 u8 bResult = _TRUE;
31269 - if(padapter->HalFunc.interface_ps_func)
31270 - {
31271 - bResult = padapter->HalFunc.interface_ps_func(padapter,efunc_id,val);
31272 - }
31273 +
31274 + rtw_hal_intf_ps_func(padapter,efunc_id,val);
31275 +
31276 return bResult;
31277 }
31278
31279 +
31280 +inline void rtw_set_ips_deny(_adapter *padapter, u32 ms)
31281 +{
31282 + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
31283 + pwrpriv->ips_deny_time = rtw_get_current_time() + rtw_ms_to_systime(ms);
31284 +}
31285 +
31286 /*
31287 * rtw_pwr_wakeup - Wake the NIC up from: 1)IPS. 2)USB autosuspend
31288 * @adapter: pointer to _adapter structure
31289 -*
31290 +* @ips_deffer_ms: the ms wiil prevent from falling into IPS after wakeup
31291 * Return _SUCCESS or _FAIL
31292 */
31293 -int _rtw_pwr_wakeup(_adapter *padapter, const char *caller)
31294 +int _rtw_pwr_wakeup(_adapter *padapter, u32 ips_deffer_ms, const char *caller)
31295 {
31296 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
31297 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
31298 int ret = _SUCCESS;
31299 + u32 start = rtw_get_current_time();
31300 +
31301 +#ifdef CONFIG_CONCURRENT_MODE
31302 + if (padapter->pbuddy_adapter)
31303 + LeaveAllPowerSaveMode(padapter->pbuddy_adapter);
31304 +
31305 + if ((padapter->isprimary == _FALSE) && padapter->pbuddy_adapter){
31306 + padapter = padapter->pbuddy_adapter;
31307 + pwrpriv = &padapter->pwrctrlpriv;
31308 + pmlmepriv = &padapter->mlmepriv;
31309 + }
31310 +#endif
31311 +
31312 + if (pwrpriv->ips_deny_time < rtw_get_current_time() + rtw_ms_to_systime(ips_deffer_ms))
31313 + pwrpriv->ips_deny_time = rtw_get_current_time() + rtw_ms_to_systime(ips_deffer_ms);
31314 +
31315 + if (pwrpriv->ps_processing) {
31316 + DBG_871X("%s wait ps_processing...\n", __func__);
31317 + while (pwrpriv->ps_processing && rtw_get_passing_time_ms(start) <= 3000)
31318 + rtw_msleep_os(10);
31319 + if (pwrpriv->ps_processing)
31320 + DBG_871X("%s wait ps_processing timeout\n", __func__);
31321 + else
31322 + DBG_871X("%s wait ps_processing done\n", __func__);
31323 + }
31324 +
31325 +#ifdef DBG_CONFIG_ERROR_DETECT
31326 + if (rtw_hal_sreset_inprogress(padapter)) {
31327 + DBG_871X("%s wait sreset_inprogress...\n", __func__);
31328 + while (rtw_hal_sreset_inprogress(padapter) && rtw_get_passing_time_ms(start) <= 4000)
31329 + rtw_msleep_os(10);
31330 + if (rtw_hal_sreset_inprogress(padapter))
31331 + DBG_871X("%s wait sreset_inprogress timeout\n", __func__);
31332 + else
31333 + DBG_871X("%s wait sreset_inprogress done\n", __func__);
31334 + }
31335 +#endif
31336 +
31337 + if (pwrpriv->bInternalAutoSuspend == _FALSE && pwrpriv->bInSuspend) {
31338 + DBG_871X("%s wait bInSuspend...\n", __func__);
31339 + while (pwrpriv->bInSuspend
31340 + && ((rtw_get_passing_time_ms(start) <= 3000 && !rtw_is_do_late_resume(pwrpriv))
31341 + || (rtw_get_passing_time_ms(start) <= 500 && rtw_is_do_late_resume(pwrpriv)))
31342 + ) {
31343 + rtw_msleep_os(10);
31344 + }
31345 + if (pwrpriv->bInSuspend)
31346 + DBG_871X("%s wait bInSuspend timeout\n", __func__);
31347 + else
31348 + DBG_871X("%s wait bInSuspend done\n", __func__);
31349 + }
31350
31351 //System suspend is not allowed to wakeup
31352 if((pwrpriv->bInternalAutoSuspend == _FALSE) && (_TRUE == pwrpriv->bInSuspend )){
31353 @@ -1147,11 +1417,6 @@ int _rtw_pwr_wakeup(_adapter *padapter, const char *caller)
31354 goto exit;
31355 }
31356
31357 - //I think this should be check in IPS, LPS, autosuspend functions...
31358 - //if( pwrpriv->power_mgnt == PS_MODE_ACTIVE ) {
31359 - // goto exit;
31360 - //}
31361 -
31362 //block???
31363 if((pwrpriv->bInternalAutoSuspend == _TRUE) && (padapter->net_closed == _TRUE)) {
31364 ret = _FAIL;
31365 @@ -1164,7 +1429,7 @@ int _rtw_pwr_wakeup(_adapter *padapter, const char *caller)
31366 ret = _SUCCESS;
31367 goto exit;
31368 }
31369 -
31370 +
31371 if(rf_off == pwrpriv->rf_pwrstate )
31372 {
31373 #ifdef CONFIG_USB_HCI
31374 @@ -1177,7 +1442,7 @@ int _rtw_pwr_wakeup(_adapter *padapter, const char *caller)
31375 }
31376 else if(padapter->registrypriv.usbss_enable)
31377 {
31378 - DBG_8192C("\n %s call autoresume_enter....\n",__FUNCTION__);
31379 + DBG_8192C("%s call autoresume_enter....\n",__FUNCTION__);
31380 if(_FAIL == autoresume_enter(padapter))
31381 {
31382 DBG_8192C("======> autoresume fail.............\n");
31383 @@ -1190,7 +1455,7 @@ int _rtw_pwr_wakeup(_adapter *padapter, const char *caller)
31384 #endif
31385 {
31386 #ifdef CONFIG_IPS
31387 - DBG_8192C("\n %s call ips_leave....\n",__FUNCTION__);
31388 + DBG_8192C("%s call ips_leave....\n",__FUNCTION__);
31389 if(_FAIL == ips_leave(padapter))
31390 {
31391 DBG_8192C("======> ips_leave fail.............\n");
31392 @@ -1199,10 +1464,6 @@ int _rtw_pwr_wakeup(_adapter *padapter, const char *caller)
31393 }
31394 #endif
31395 }
31396 - }else {
31397 - //Jeff: reset timer to avoid falling ips or selective suspend soon
31398 - if(pwrpriv->bips_processing == _FALSE)
31399 - rtw_set_pwr_state_check_timer(pwrpriv);
31400 }
31401
31402 //TODO: the following checking need to be merged...
31403 @@ -1220,8 +1481,60 @@ int _rtw_pwr_wakeup(_adapter *padapter, const char *caller)
31404 }
31405
31406 exit:
31407 + if (pwrpriv->ips_deny_time < rtw_get_current_time() + rtw_ms_to_systime(ips_deffer_ms))
31408 + pwrpriv->ips_deny_time = rtw_get_current_time() + rtw_ms_to_systime(ips_deffer_ms);
31409 + return ret;
31410 +
31411 +}
31412 +
31413 +int rtw_pm_set_lps(_adapter *padapter, u8 mode)
31414 +{
31415 + int ret = 0;
31416 + struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
31417 +
31418 + if ( mode < PS_MODE_NUM )
31419 + {
31420 + if(pwrctrlpriv->power_mgnt !=mode)
31421 + {
31422 + if(PS_MODE_ACTIVE == mode)
31423 + {
31424 + LeaveAllPowerSaveMode(padapter);
31425 + }
31426 + else
31427 + {
31428 + pwrctrlpriv->LpsIdleCount = 2;
31429 + }
31430 + pwrctrlpriv->power_mgnt = mode;
31431 + pwrctrlpriv->bLeisurePs = (PS_MODE_ACTIVE != pwrctrlpriv->power_mgnt)?_TRUE:_FALSE;
31432 + }
31433 + }
31434 + else
31435 + {
31436 + ret = -EINVAL;
31437 + }
31438 +
31439 return ret;
31440 +}
31441
31442 +int rtw_pm_set_ips(_adapter *padapter, u8 mode)
31443 +{
31444 + struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
31445 +
31446 + if( mode == IPS_NORMAL || mode == IPS_LEVEL_2 ) {
31447 + rtw_ips_mode_req(pwrctrlpriv, mode);
31448 + DBG_871X("%s %s\n", __FUNCTION__, mode == IPS_NORMAL?"IPS_NORMAL":"IPS_LEVEL_2");
31449 + return 0;
31450 + }
31451 + else if(mode ==IPS_NONE){
31452 + rtw_ips_mode_req(pwrctrlpriv, mode);
31453 + DBG_871X("%s %s\n", __FUNCTION__, "IPS_NONE");
31454 + if((padapter->bSurpriseRemoved ==0)&&(_FAIL == rtw_pwr_wakeup(padapter)) )
31455 + return -EFAULT;
31456 + }
31457 + else {
31458 + return -EINVAL;
31459 + }
31460 + return 0;
31461 }
31462
31463
31464 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_recv.c b/drivers/net/wireless/rtl8192cu/core/rtw_recv.c
31465 index 0d5143b..2cc8faa 100644
31466 --- a/drivers/net/wireless/rtl8192cu/core/rtw_recv.c
31467 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_recv.c
31468 @@ -16,7 +16,7 @@
31469 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
31470 *
31471 *
31472 -******************************************************************************/
31473 + ******************************************************************************/
31474 #define _RTW_RECV_C_
31475 #include <drv_conf.h>
31476 #include <osdep_service.h>
31477 @@ -81,6 +81,7 @@ _func_enter_;
31478
31479 _rtw_init_queue(&precvpriv->free_recv_queue);
31480 _rtw_init_queue(&precvpriv->recv_pending_queue);
31481 + _rtw_init_queue(&precvpriv->uc_swdec_pending_queue);
31482
31483 precvpriv->adapter = padapter;
31484
31485 @@ -124,7 +125,12 @@ _func_enter_;
31486
31487 #endif
31488
31489 - res = padapter->HalFunc.init_recv_priv(padapter);
31490 + res = rtw_hal_init_recv_priv(padapter);
31491 +
31492 + precvpriv->recvbuf_skb_alloc_fail_cnt = 0;
31493 + precvpriv->recvbuf_null_cnt = 0;
31494 + precvpriv->read_port_complete_EINPROGRESS_cnt = 0;
31495 + precvpriv->read_port_complete_other_urb_err_cnt = 0;
31496
31497 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
31498 #ifdef PLATFORM_LINUX
31499 @@ -147,6 +153,7 @@ _func_exit_;
31500
31501 }
31502
31503 +void rtw_mfree_recv_priv_lock(struct recv_priv *precvpriv);
31504 void rtw_mfree_recv_priv_lock(struct recv_priv *precvpriv)
31505 {
31506 _rtw_spinlock_free(&precvpriv->lock);
31507 @@ -171,6 +178,8 @@ void _rtw_free_recv_priv (struct recv_priv *precvpriv)
31508
31509 _func_enter_;
31510
31511 + rtw_free_uc_swdec_pending_queue(padapter);
31512 +
31513 rtw_mfree_recv_priv_lock(precvpriv);
31514
31515 rtw_os_recv_resource_free(precvpriv);
31516 @@ -179,23 +188,21 @@ _func_enter_;
31517 rtw_vmfree(precvpriv->pallocated_frame_buf, NR_RECVFRAME * sizeof(union recv_frame) + RXFRAME_ALIGN_SZ);
31518 }
31519
31520 - padapter->HalFunc.free_recv_priv(padapter);
31521 + rtw_hal_free_recv_priv(padapter);
31522
31523 _func_exit_;
31524
31525 }
31526
31527 -union recv_frame *rtw_alloc_recvframe (_queue *pfree_recv_queue)
31528 +union recv_frame *_rtw_alloc_recvframe (_queue *pfree_recv_queue)
31529 {
31530 - _irqL irqL;
31531 +
31532 union recv_frame *precvframe;
31533 _list *plist, *phead;
31534 _adapter *padapter;
31535 struct recv_priv *precvpriv;
31536 _func_enter_;
31537
31538 - _enter_critical_bh(&pfree_recv_queue->lock, &irqL);
31539 -
31540 if(_rtw_queue_empty(pfree_recv_queue) == _TRUE)
31541 {
31542 precvframe = NULL;
31543 @@ -217,28 +224,34 @@ _func_enter_;
31544 }
31545 }
31546
31547 - _exit_critical_bh(&pfree_recv_queue->lock, &irqL);
31548 -
31549 _func_exit_;
31550
31551 return precvframe;
31552
31553 }
31554
31555 +union recv_frame *rtw_alloc_recvframe (_queue *pfree_recv_queue)
31556 +{
31557 + _irqL irqL;
31558 + union recv_frame *precvframe;
31559 +
31560 + _enter_critical_bh(&pfree_recv_queue->lock, &irqL);
31561 +
31562 + precvframe = _rtw_alloc_recvframe(pfree_recv_queue);
31563 +
31564 + _exit_critical_bh(&pfree_recv_queue->lock, &irqL);
31565 +
31566 + return precvframe;
31567 +}
31568
31569 void rtw_init_recvframe(union recv_frame *precvframe, struct recv_priv *precvpriv)
31570 {
31571 - struct recv_buf *precvbuf = precvframe->u.hdr.precvbuf;
31572 -
31573 /* Perry: This can be removed */
31574 _rtw_init_listhead(&precvframe->u.hdr.list);
31575
31576 precvframe->u.hdr.len=0;
31577 -
31578 -
31579 }
31580
31581 -
31582 int rtw_free_recvframe(union recv_frame *precvframe, _queue *pfree_recv_queue)
31583 {
31584 _irqL irqL;
31585 @@ -247,41 +260,34 @@ int rtw_free_recvframe(union recv_frame *precvframe, _queue *pfree_recv_queue)
31586
31587 _func_enter_;
31588
31589 +#ifdef CONFIG_CONCURRENT_MODE
31590 + if(padapter->adapter_type > PRIMARY_ADAPTER)
31591 + {
31592 + padapter = padapter->pbuddy_adapter;//get primary_padapter
31593 + precvpriv = &padapter->recvpriv;
31594 + pfree_recv_queue = &precvpriv->free_recv_queue;
31595 + precvframe->u.hdr.adapter = padapter;
31596 + }
31597 +#endif
31598 +
31599
31600 #ifdef PLATFORM_WINDOWS
31601 rtw_os_read_port(padapter, precvframe->u.hdr.precvbuf);
31602 #endif
31603
31604 -#ifdef PLATFORM_LINUX
31605 +#if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)
31606
31607 if(precvframe->u.hdr.pkt)
31608 {
31609 - dev_kfree_skb_any(precvframe->u.hdr.pkt);//free skb by driver
31610 +#ifdef CONFIG_BSD_RX_USE_MBUF
31611 + m_freem(precvframe->u.hdr.pkt);
31612 +#else // CONFIG_BSD_RX_USE_MBUF
31613 + rtw_skb_free(precvframe->u.hdr.pkt);//free skb by driver
31614 +#endif // CONFIG_BSD_RX_USE_MBUF
31615 precvframe->u.hdr.pkt = NULL;
31616 }
31617
31618 -#ifdef CONFIG_SDIO_HCI
31619 -{
31620 - _irqL irql;
31621 - struct recv_buf *precvbuf=precvframe->u.hdr.precvbuf;
31622 - if(precvbuf !=NULL){
31623 - _enter_critical_bh(&precvbuf->recvbuf_lock, &irql);
31624 -
31625 - precvbuf->ref_cnt--;
31626 - if(precvbuf->ref_cnt == 0 ){
31627 - _enter_critical_bh(&precvpriv->free_recv_buf_queue.lock, &irqL);
31628 - rtw_list_delete(&(precvbuf->list));
31629 - rtw_list_insert_tail(&(precvbuf->list), get_list_head(&precvpriv->free_recv_buf_queue));
31630 - precvpriv->free_recv_buf_queue_cnt++;
31631 - _exit_critical_bh(&precvpriv->free_recv_buf_queue.lock, &irqL);
31632 - 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));
31633 - }
31634 - 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));
31635 - _exit_critical_bh(&precvbuf->recvbuf_lock, &irql);
31636 - }
31637 -}
31638 -#endif
31639 -#endif
31640 +#endif //defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)
31641
31642 _enter_critical_bh(&pfree_recv_queue->lock, &irqL);
31643
31644 @@ -303,24 +309,16 @@ _func_exit_;
31645 }
31646
31647
31648 -union recv_frame *rtw_dequeue_recvframe (_queue *queue)
31649 -{
31650 - return rtw_alloc_recvframe(queue);
31651 -}
31652
31653
31654 -sint rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue)
31655 +sint _rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue)
31656 {
31657 - _irqL irqL;
31658 +
31659 _adapter *padapter=precvframe->u.hdr.adapter;
31660 struct recv_priv *precvpriv = &padapter->recvpriv;
31661
31662 _func_enter_;
31663
31664 -
31665 - //_spinlock(&pfree_recv_queue->lock);
31666 - _enter_critical_bh(&queue->lock, &irqL);
31667 -
31668 //_rtw_init_listhead(&(precvframe->u.hdr.list));
31669 rtw_list_delete(&(precvframe->u.hdr.list));
31670
31671 @@ -332,15 +330,25 @@ _func_enter_;
31672 precvpriv->free_recvframe_cnt++;
31673 }
31674
31675 - //_rtw_spinunlock(&pfree_recv_queue->lock);
31676 - _exit_critical_bh(&queue->lock, &irqL);
31677 -
31678 -
31679 _func_exit_;
31680
31681 return _SUCCESS;
31682 }
31683
31684 +sint rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue)
31685 +{
31686 + sint ret;
31687 + _irqL irqL;
31688 +
31689 + //_spinlock(&pfree_recv_queue->lock);
31690 + _enter_critical_bh(&queue->lock, &irqL);
31691 + ret = _rtw_enqueue_recvframe(precvframe, queue);
31692 + //_rtw_spinunlock(&pfree_recv_queue->lock);
31693 + _exit_critical_bh(&queue->lock, &irqL);
31694 +
31695 + return ret;
31696 +}
31697 +
31698 /*
31699 sint rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue)
31700 {
31701 @@ -387,6 +395,34 @@ _func_exit_;
31702
31703 }
31704
31705 +u32 rtw_free_uc_swdec_pending_queue(_adapter *adapter)
31706 +{
31707 + u32 cnt = 0;
31708 + union recv_frame *pending_frame;
31709 + while((pending_frame=rtw_alloc_recvframe(&adapter->recvpriv.uc_swdec_pending_queue))) {
31710 + rtw_free_recvframe(pending_frame, &adapter->recvpriv.free_recv_queue);
31711 + DBG_871X("%s: dequeue uc_swdec_pending_queue\n", __func__);
31712 + cnt++;
31713 + }
31714 +
31715 + return cnt;
31716 +}
31717 +
31718 +
31719 +sint rtw_enqueue_recvbuf_to_head(struct recv_buf *precvbuf, _queue *queue)
31720 +{
31721 + _irqL irqL;
31722 +
31723 + _enter_critical(&queue->lock, &irqL);
31724 +
31725 + rtw_list_delete(&precvbuf->list);
31726 + rtw_list_insert_head(&precvbuf->list, get_list_head(queue));
31727 +
31728 + _exit_critical(&queue->lock, &irqL);
31729 +
31730 + return _SUCCESS;
31731 +}
31732 +
31733 sint rtw_enqueue_recvbuf(struct recv_buf *precvbuf, _queue *queue)
31734 {
31735 _irqL irqL;
31736 @@ -435,14 +471,16 @@ struct recv_buf *rtw_dequeue_recvbuf (_queue *queue)
31737
31738 }
31739
31740 -static sint recvframe_chkmic(_adapter *adapter, union recv_frame *precvframe){
31741 +sint recvframe_chkmic(_adapter *adapter, union recv_frame *precvframe);
31742 +sint recvframe_chkmic(_adapter *adapter, union recv_frame *precvframe){
31743
31744 sint i,res=_SUCCESS;
31745 u32 datalen;
31746 u8 miccode[8];
31747 u8 bmic_err=_FALSE,brpt_micerror = _TRUE;
31748 u8 *pframe, *payload,*pframemic;
31749 - u8 *mickey,*iv,rxdata_key_idx;
31750 + u8 *mickey;
31751 + //u8 *iv,rxdata_key_idx=0;
31752 struct sta_info *stainfo;
31753 struct rx_pkt_attrib *prxattrib=&precvframe->u.hdr.attrib;
31754 struct security_priv *psecuritypriv=&adapter->securitypriv;
31755 @@ -470,14 +508,14 @@ _func_enter_;
31756 mickey=&psecuritypriv->dot118021XGrprxmickey[prxattrib->key_index].skey[0];
31757
31758 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n recvframe_chkmic: bcmc key \n"));
31759 - //DBG_8192C("\n recvframe_chkmic: bcmc key psecuritypriv->dot118021XGrpKeyid(%d),pmlmeinfo->key_index(%d) ,recv key_id(%d)\n",
31760 + //DBG_871X("\n recvframe_chkmic: bcmc key psecuritypriv->dot118021XGrpKeyid(%d),pmlmeinfo->key_index(%d) ,recv key_id(%d)\n",
31761 // psecuritypriv->dot118021XGrpKeyid,pmlmeinfo->key_index,rxdata_key_idx);
31762
31763 if(psecuritypriv->binstallGrpkey==_FALSE)
31764 {
31765 res=_FAIL;
31766 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("\n recvframe_chkmic:didn't install group key!!!!!!!!!!\n"));
31767 - DBG_8192C("\n recvframe_chkmic:didn't install group key!!!!!!!!!!\n");
31768 + DBG_871X("\n recvframe_chkmic:didn't install group key!!!!!!!!!!\n");
31769 goto exit;
31770 }
31771 }
31772 @@ -538,16 +576,11 @@ _func_enter_;
31773 if((IS_MCAST(prxattrib->ra)==_TRUE) && (prxattrib->key_index != pmlmeinfo->key_index ))
31774 brpt_micerror = _FALSE;
31775
31776 - if((prxattrib->bdecrypted ==_TRUE)&& (brpt_micerror == _TRUE))
31777 + if(brpt_micerror == _TRUE)
31778 {
31779 rtw_handle_tkip_mic_err(adapter,(u8)IS_MCAST(prxattrib->ra));
31780 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" mic error :prxattrib->bdecrypted=%d ",prxattrib->bdecrypted));
31781 - DBG_8192C(" mic error :prxattrib->bdecrypted=%d\n",prxattrib->bdecrypted);
31782 - }
31783 - else
31784 - {
31785 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" mic error :prxattrib->bdecrypted=%d ",prxattrib->bdecrypted));
31786 - DBG_8192C(" mic error :prxattrib->bdecrypted=%d\n",prxattrib->bdecrypted);
31787 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" mic error :prxattrib->bdecrypted=%d \n", brpt_micerror));
31788 + DBG_871X(" mic error :brpt_micerror=%d\n", brpt_micerror);
31789 }
31790
31791 res=_FAIL;
31792 @@ -580,14 +613,14 @@ _func_exit_;
31793 }
31794
31795 //decrypt and set the ivlen,icvlen of the recv_frame
31796 -static union recv_frame * decryptor(_adapter *padapter,union recv_frame *precv_frame)
31797 +union recv_frame * decryptor(_adapter *padapter,union recv_frame *precv_frame);
31798 +union recv_frame * decryptor(_adapter *padapter,union recv_frame *precv_frame)
31799 {
31800 - u32 res=_SUCCESS;
31801
31802 struct rx_pkt_attrib *prxattrib = &precv_frame->u.hdr.attrib;
31803 struct security_priv *psecuritypriv=&padapter->securitypriv;
31804 union recv_frame *return_packet=precv_frame;
31805 -
31806 + u32 res=_SUCCESS;
31807 _func_enter_;
31808
31809 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("prxstat->decrypted=%x prxattrib->encrypt = 0x%03x\n",prxattrib->bdecrypted,prxattrib->encrypt));
31810 @@ -617,6 +650,10 @@ _func_enter_;
31811
31812 if((prxattrib->encrypt>0) && ((prxattrib->bdecrypted==0) ||(psecuritypriv->sw_decrypt==_TRUE)))
31813 {
31814 +
31815 +#ifdef CONFIG_CONCURRENT_MODE
31816 + if(!IS_MCAST(prxattrib->ra))//bc/mc packets use sw decryption for concurrent mode
31817 +#endif
31818 psecuritypriv->hw_decrypted=_FALSE;
31819
31820 #ifdef DBG_RX_DECRYPTOR
31821 @@ -673,7 +710,7 @@ _func_enter_;
31822 , prxattrib->bdecrypted ,prxattrib->encrypt, psecuritypriv->hw_decrypted);
31823 #endif
31824 }
31825 -
31826 +
31827 if(res == _FAIL)
31828 {
31829 rtw_free_recvframe(return_packet,&padapter->recvpriv.free_recv_queue);
31830 @@ -681,14 +718,15 @@ _func_enter_;
31831
31832 }
31833 //recvframe_chkmic(adapter, precv_frame); //move to recvframme_defrag function
31834 -
31835 +
31836 _func_exit_;
31837
31838 return return_packet;
31839
31840 }
31841 //###set the security information in the recv_frame
31842 -static union recv_frame * portctrl(_adapter *adapter,union recv_frame * precv_frame)
31843 +union recv_frame * portctrl(_adapter *adapter,union recv_frame * precv_frame);
31844 +union recv_frame * portctrl(_adapter *adapter,union recv_frame * precv_frame)
31845 {
31846 u8 *psta_addr,*ptr;
31847 uint auth_alg;
31848 @@ -771,7 +809,8 @@ _func_exit_;
31849
31850 }
31851
31852 -static sint recv_decache(union recv_frame *precv_frame, u8 bretry, struct stainfo_rxcache *prxcache)
31853 +sint recv_decache(union recv_frame *precv_frame, u8 bretry, struct stainfo_rxcache *prxcache);
31854 +sint recv_decache(union recv_frame *precv_frame, u8 bretry, struct stainfo_rxcache *prxcache)
31855 {
31856 sint tid = precv_frame->u.hdr.attrib.priority;
31857
31858 @@ -805,7 +844,8 @@ _func_exit_;
31859
31860 }
31861
31862 -static void process_pwrbit_data(_adapter *padapter, union recv_frame *precv_frame)
31863 +void process_pwrbit_data(_adapter *padapter, union recv_frame *precv_frame);
31864 +void process_pwrbit_data(_adapter *padapter, union recv_frame *precv_frame)
31865 {
31866 #ifdef CONFIG_AP_MODE
31867 unsigned char pwrbit;
31868 @@ -826,11 +866,11 @@ static void process_pwrbit_data(_adapter *padapter, union recv_frame *precv_fram
31869 {
31870 //psta->state |= WIFI_SLEEP_STATE;
31871 //pstapriv->sta_dz_bitmap |= BIT(psta->aid);
31872 -
31873 +
31874 stop_sta_xmit(padapter, psta);
31875 -
31876 +
31877 //DBG_871X("to sleep, sta_dz_bitmap=%x\n", pstapriv->sta_dz_bitmap);
31878 - }
31879 + }
31880 }
31881 else
31882 {
31883 @@ -838,10 +878,10 @@ static void process_pwrbit_data(_adapter *padapter, union recv_frame *precv_fram
31884 {
31885 //psta->state ^= WIFI_SLEEP_STATE;
31886 //pstapriv->sta_dz_bitmap &= ~BIT(psta->aid);
31887 -
31888 +
31889 wakeup_sta_to_xmit(padapter, psta);
31890
31891 - //DBG_871X("to wakeup, sta_dz_bitmap=%x\n", pstapriv->sta_dz_bitmap);
31892 + //DBG_871X("to wakeup, sta_dz_bitmap=%x\n", pstapriv->sta_dz_bitmap);
31893 }
31894 }
31895
31896 @@ -850,7 +890,8 @@ static void process_pwrbit_data(_adapter *padapter, union recv_frame *precv_fram
31897 #endif
31898 }
31899
31900 -static void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame)
31901 +void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame);
31902 +void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame)
31903 {
31904 #ifdef CONFIG_AP_MODE
31905 struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
31906 @@ -864,871 +905,91 @@ static void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame
31907 #ifdef CONFIG_TDLS
31908 if( !(psta->tdls_sta_state & TDLS_LINKED_STATE ) )
31909 {
31910 -#endif //CONFIG_TDLS
31911 -
31912 - if(!psta->qos_option)
31913 - return;
31914 -
31915 - if(!(psta->qos_info&0xf))
31916 - return;
31917 -
31918 -#ifdef CONFIG_TDLS
31919 - }
31920 -#endif //CONFIG_TDLS
31921 -
31922 - if(psta->state&WIFI_SLEEP_STATE)
31923 - {
31924 - u8 wmmps_ac=0;
31925 -
31926 - switch(pattrib->priority)
31927 - {
31928 - case 1:
31929 - case 2:
31930 - wmmps_ac = psta->uapsd_bk&BIT(1);
31931 - break;
31932 - case 4:
31933 - case 5:
31934 - wmmps_ac = psta->uapsd_vi&BIT(1);
31935 - break;
31936 - case 6:
31937 - case 7:
31938 - wmmps_ac = psta->uapsd_vo&BIT(1);
31939 - break;
31940 - case 0:
31941 - case 3:
31942 - default:
31943 - wmmps_ac = psta->uapsd_be&BIT(1);
31944 - break;
31945 - }
31946 -
31947 - if(wmmps_ac)
31948 - {
31949 - if(psta->sleepq_ac_len>0)
31950 - {
31951 - //process received triggered frame
31952 - xmit_delivery_enabled_frames(padapter, psta);
31953 - }
31954 - else
31955 - {
31956 - //issue one qos null frame with More data bit = 0 and the EOSP bit set (=1)
31957 - issue_qos_nulldata(padapter, psta->hwaddr, (u16)pattrib->priority);
31958 - }
31959 - }
31960 -
31961 - }
31962 -
31963 -
31964 -#endif
31965 -
31966 -}
31967 -
31968 -#ifdef CONFIG_TDLS
31969 -sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame)
31970 -{
31971 - struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
31972 - u8 *psa, *pmyid;
31973 - struct sta_info *ptdls_sta= NULL;
31974 - struct sta_priv *pstapriv = &adapter->stapriv;
31975 - u8 *ptr = precv_frame->u.hdr.rx_data;
31976 - struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
31977 - struct security_priv *psecuritypriv = &adapter->securitypriv;
31978 - _irqL irqL;
31979 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
31980 - u8 *prsnie, *ppairwise_cipher;
31981 - u8 i, k, pairwise_count;
31982 - u8 ccmp_have=0, rsnie_have=0;
31983 - u16 j;
31984 - u8 SNonce[32];
31985 - u32 *timeout_interval;
31986 - sint parsing_length; //frame body length, without icv_len
31987 - PNDIS_802_11_VARIABLE_IEs pIE;
31988 - u8 FIXED_IE = 5;
31989 -
31990 - psa = get_sa(ptr);
31991 - ptdls_sta = rtw_get_stainfo(pstapriv, psa);
31992 -
31993 - pmyid=myid(&(adapter->eeprompriv));
31994 - ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
31995 - parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
31996 - -prx_pkt_attrib->hdrlen
31997 - -prx_pkt_attrib->iv_len
31998 - -prx_pkt_attrib->icv_len
31999 - -LLC_HEADER_SIZE
32000 - -TYPE_LENGTH_FIELD_SIZE
32001 - -1
32002 - -FIXED_IE;
32003 -
32004 - if(ptdlsinfo->ap_prohibited == _TRUE)
32005 - {
32006 - goto exit;
32007 - }
32008 -
32009 - if(ptdls_sta==NULL ||(ptdls_sta->tdls_sta_state&TDLS_LINKED_STATE) )
32010 - {
32011 - if(ptdls_sta==NULL){
32012 - ptdls_sta = rtw_alloc_stainfo(pstapriv, psa);
32013 - }else{
32014 - //If the direct link is already set up
32015 - //Process as re-setup after tear down
32016 - DBG_8192C("re-setup a direct link\n");
32017 - }
32018 -
32019 - if(ptdls_sta)
32020 - {
32021 - //copy dialog token
32022 - ptdls_sta->dialog = *(ptr+2);
32023 -
32024 - //parsing information element
32025 - for(j=FIXED_IE; j<parsing_length;){
32026 -
32027 - pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
32028 -
32029 - switch (pIE->ElementID)
32030 - {
32031 - case _SUPPORTEDRATES_IE_:
32032 - break;
32033 - case _COUNTRY_IE_:
32034 - break;
32035 - case _EXT_SUPPORTEDRATES_IE_:
32036 - break;
32037 - case _SUPPORTED_CH_IE_:
32038 - break;
32039 - case _RSN_IE_2_:
32040 - rsnie_have=1;
32041 - if(prx_pkt_attrib->encrypt){
32042 - prsnie=(u8*)pIE;
32043 - //check whether initiator STA has CCMP pairwise_cipher.
32044 - ppairwise_cipher=prsnie+10;
32045 - _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 1);
32046 - for(k=0;k<pairwise_count;k++){
32047 - if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)
32048 - ccmp_have=1;
32049 - }
32050 - if(ccmp_have==0){
32051 - //invalid contents of RSNIE
32052 - ptdls_sta->stat_code=72;
32053 - }
32054 - }
32055 - break;
32056 - case _EXT_CAP_IE_:
32057 - break;
32058 - case _VENDOR_SPECIFIC_IE_:
32059 - break;
32060 - case _FTIE_:
32061 - if(prx_pkt_attrib->encrypt)
32062 - _rtw_memcpy(SNonce, (ptr+j+52), 32);
32063 - break;
32064 - case _TIMEOUT_ITVL_IE_:
32065 - if(prx_pkt_attrib->encrypt)
32066 - timeout_interval = (u32 *)(ptr+j+3);
32067 - break;
32068 - case _RIC_Descriptor_IE_:
32069 - break;
32070 - case _HT_CAPABILITY_IE_:
32071 - break;
32072 - case EID_BSSCoexistence:
32073 - break;
32074 - case _LINK_ID_IE_:
32075 - if(_rtw_memcmp(get_bssid(pmlmepriv), pIE->data, 6) == _FALSE)
32076 - {
32077 - //not in same BSS
32078 - ptdls_sta->stat_code=7;
32079 - }
32080 - break;
32081 - default:
32082 - break;
32083 - }
32084 -
32085 - j += (pIE->Length + 2);
32086 -
32087 - }
32088 -
32089 - //check status code
32090 - //if responder STA has/hasn't security on AP, but request hasn't/has RSNIE, it should reject
32091 - if(
32092 - ( rsnie_have && (prx_pkt_attrib->encrypt) )
32093 - ||
32094 - (rsnie_have==0 && (prx_pkt_attrib->encrypt==0) )
32095 - ){
32096 - ptdls_sta->stat_code=0;
32097 - }else if(rsnie_have && (prx_pkt_attrib->encrypt==0)){
32098 - //security disabled
32099 - ptdls_sta->stat_code=5;
32100 - }else if(rsnie_have==0 && (prx_pkt_attrib->encrypt)){
32101 - //request haven't RSNIE
32102 - ptdls_sta->stat_code=38;
32103 - }
32104 -
32105 - ptdls_sta->tdls_sta_state|= TDLS_INITIATOR_STATE;
32106 - if(prx_pkt_attrib->encrypt){
32107 - _rtw_memcpy(ptdls_sta->SNonce, SNonce, 32);
32108 - _rtw_memcpy(&(ptdls_sta->TDLS_PeerKey_Lifetime), timeout_interval, 4);
32109 - }
32110 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
32111 - ptdlsinfo->sta_cnt++;
32112 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
32113 - if( ptdlsinfo->sta_cnt == (NUM_STA - 1) )
32114 - {
32115 - ptdlsinfo->sta_maximum = _TRUE;
32116 - }
32117 - }
32118 - else
32119 - {
32120 - goto exit;
32121 - }
32122 - }
32123 - //already receiving TDLS setup request
32124 - else if(ptdls_sta->tdls_sta_state==TDLS_INITIATOR_STATE){
32125 - DBG_8192C("receive duplicated TDLS setup request frame in handshaking\n");
32126 - goto exit;
32127 - }
32128 - //When receiving and sending setup_req to the same link at the same time, STA with higher MAC_addr would be initiator
32129 - //following is to check out MAC_addr
32130 - else if(ptdls_sta->tdls_sta_state==TDLS_RESPONDER_STATE){
32131 - DBG_8192C("receive setup_req after sending setup_req\n");
32132 - for (i=0;i<6;i++){
32133 - if(*(pmyid+i)==*(psa+i)){
32134 - }
32135 - else if(*(pmyid+i)>*(psa+i)){
32136 - goto exit;
32137 - }else if(*(pmyid+i)<*(psa+i)){
32138 - ptdls_sta->tdls_sta_state=TDLS_INITIATOR_STATE;
32139 - break;
32140 - }
32141 - }
32142 - }
32143 -
32144 - issue_tdls_setup_rsp(adapter, precv_frame);
32145 - _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME);
32146 -
32147 - //status code!=0 ; setup unsuccess
32148 - if(ptdls_sta->stat_code!=0){
32149 - free_tdls_sta(adapter, ptdls_sta);
32150 - return _FAIL;
32151 - }
32152 -
32153 -exit:
32154 -
32155 - return _FAIL;
32156 -}
32157 -
32158 -
32159 -sint On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame)
32160 -{
32161 - struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
32162 - struct sta_info *ptdls_sta= NULL;
32163 - struct sta_priv *pstapriv = &adapter->stapriv;
32164 - u8 *ptr = precv_frame->u.hdr.rx_data;
32165 - _irqL irqL;
32166 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
32167 - u8 *psa;
32168 - u16 stat_code;
32169 - sint parsing_length; //frame body length, without icv_len
32170 - PNDIS_802_11_VARIABLE_IEs pIE;
32171 - u8 FIXED_IE =7;
32172 - u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic, *ppairwise_cipher;
32173 - u16 pairwise_count, j, k;
32174 - u8 verify_ccmp=0;
32175 -
32176 - psa = get_sa(ptr);
32177 - ptdls_sta = rtw_get_stainfo(pstapriv, psa);
32178 -
32179 - ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
32180 - parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
32181 - -prx_pkt_attrib->hdrlen
32182 - -prx_pkt_attrib->iv_len
32183 - -prx_pkt_attrib->icv_len
32184 - -LLC_HEADER_SIZE
32185 - -TYPE_LENGTH_FIELD_SIZE
32186 - -1
32187 - -FIXED_IE;
32188 - _rtw_memcpy(&stat_code, ptr+2, 2);
32189 -
32190 - if(stat_code!=0){
32191 - free_tdls_sta(adapter, ptdls_sta);
32192 - return _FAIL;
32193 - }
32194 -
32195 - //parsing information element
32196 - for(j=FIXED_IE; j<parsing_length;){
32197 -
32198 - pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
32199 -
32200 - switch (pIE->ElementID)
32201 - {
32202 - case _SUPPORTEDRATES_IE_:
32203 - break;
32204 - case _COUNTRY_IE_:
32205 - break;
32206 - case _EXT_SUPPORTEDRATES_IE_:
32207 - break;
32208 - case _SUPPORTED_CH_IE_:
32209 - break;
32210 - case _RSN_IE_2_:
32211 - prsnie=(u8*)pIE;
32212 - //check whether responder STA has CCMP pairwise_cipher.
32213 - ppairwise_cipher=prsnie+10;
32214 - _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 2);
32215 - for(k=0;k<pairwise_count;k++){
32216 - if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)
32217 - verify_ccmp=1;
32218 - }
32219 - case _EXT_CAP_IE_:
32220 - break;
32221 - case _VENDOR_SPECIFIC_IE_:
32222 - break;
32223 - case _FTIE_:
32224 - pftie=(u8*)pIE;
32225 - _rtw_memcpy(ptdls_sta->ANonce, (ptr+j+20), 32);
32226 - break;
32227 - case _TIMEOUT_ITVL_IE_:
32228 - ptimeout_ie=(u8*)pIE;
32229 - break;
32230 - case _RIC_Descriptor_IE_:
32231 - break;
32232 - case _HT_CAPABILITY_IE_:
32233 - break;
32234 - case EID_BSSCoexistence:
32235 - break;
32236 - case _LINK_ID_IE_:
32237 - plinkid_ie=(u8*)pIE;
32238 - break;
32239 - default:
32240 - break;
32241 - }
32242 -
32243 - j += (pIE->Length + 2);
32244 -
32245 - }
32246 -
32247 - if(prx_pkt_attrib->encrypt){
32248 - if(verify_ccmp==1){
32249 - wpa_tdls_generate_tpk(adapter, ptdls_sta);
32250 - ptdls_sta->stat_code=0;
32251 - }
32252 - else{
32253 - ptdls_sta->stat_code=72; //invalide contents of RSNIE
32254 - }
32255 - }else{
32256 - ptdls_sta->stat_code=0;
32257 - }
32258 -
32259 - if(prx_pkt_attrib->encrypt){
32260 - if(tdls_verify_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie)==0){ //0: Invalid, 1: valid
32261 - free_tdls_sta(adapter, ptdls_sta);
32262 - return _FAIL;
32263 - }
32264 - }
32265 -
32266 - DBG_871X("issue_tdls_setup_cfm\n");
32267 - issue_tdls_setup_cfm(adapter, precv_frame);
32268 -
32269 - //status code!=0 ; setup unsuccess
32270 - if(ptdls_sta->stat_code!=0){
32271 - free_tdls_sta(adapter, ptdls_sta);
32272 - return _FAIL;
32273 - }
32274 -
32275 - ptdlsinfo->setup_state = TDLS_LINKED_STATE;
32276 -
32277 - ptdls_sta->option=1;
32278 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_WRCR);
32279 -
32280 - if( ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE )
32281 - {
32282 - ptdls_sta->tdls_sta_state |= TDLS_LINKED_STATE;
32283 - _cancel_timer_ex( &ptdls_sta->handshake_timer);
32284 -#ifdef CONFIG_TDLS_AUTOCHECKALIVE
32285 - _set_timer( &ptdls_sta->alive_timer1, TDLS_ALIVE_TIMER_PH1);
32286 -#endif //CONFIG_TDLS_AUTOSETUP
32287 - }
32288 -
32289 - if(prx_pkt_attrib->encrypt){
32290 - if(ptdls_sta->cam_entry==0){
32291 - ptdls_sta->dot118021XPrivacy=_AES_;
32292 - ptdls_sta->cam_entry=ptdlsinfo->cam_entry_to_write;
32293 - if(++ptdlsinfo->cam_entry_to_write>31)
32294 - ptdlsinfo->cam_entry_to_write=6;
32295 - }
32296 - rtw_setstakey_cmd(adapter, (u8*)ptdls_sta, _TRUE);
32297 - }
32298 -
32299 - return _FAIL;
32300 -
32301 -}
32302 -
32303 -sint On_TDLS_Setup_Cfm(_adapter *adapter, union recv_frame *precv_frame)
32304 -{
32305 - struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
32306 - struct sta_info *ptdls_sta= NULL;
32307 - struct sta_priv *pstapriv = &adapter->stapriv;
32308 - u8 *ptr = precv_frame->u.hdr.rx_data;
32309 - _irqL irqL;
32310 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
32311 - u8 *psa;
32312 - u16 stat_code;
32313 - sint parsing_length;
32314 - PNDIS_802_11_VARIABLE_IEs pIE;
32315 - u8 FIXED_IE =5;
32316 - u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic, *ppairwise_cipher;
32317 - u16 j, pairwise_count;
32318 -
32319 - psa = get_sa(ptr);
32320 - ptdls_sta = rtw_get_stainfo(pstapriv, psa);
32321 -
32322 - //[+1]: payload type
32323 - ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
32324 - parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
32325 - -prx_pkt_attrib->hdrlen
32326 - -prx_pkt_attrib->iv_len
32327 - -prx_pkt_attrib->icv_len
32328 - -LLC_HEADER_SIZE
32329 - -TYPE_LENGTH_FIELD_SIZE
32330 - -1
32331 - -FIXED_IE;
32332 - _rtw_memcpy(&stat_code, ptr+2, 2);
32333 -
32334 - if(stat_code!=0){
32335 - free_tdls_sta(adapter, ptdls_sta);
32336 - return _FAIL;
32337 - }
32338 -
32339 - if(prx_pkt_attrib->encrypt){
32340 - //parsing information element
32341 - for(j=FIXED_IE; j<parsing_length;){
32342 -
32343 - pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
32344 -
32345 - switch (pIE->ElementID)
32346 - {
32347 - case _RSN_IE_2_:
32348 - prsnie=(u8*)pIE;
32349 - break;
32350 - case _VENDOR_SPECIFIC_IE_:
32351 - break;
32352 - case _FTIE_:
32353 - pftie=(u8*)pIE;
32354 - break;
32355 - case _TIMEOUT_ITVL_IE_:
32356 - ptimeout_ie=(u8*)pIE;
32357 - break;
32358 - case _HT_EXTRA_INFO_IE_:
32359 - break;
32360 - case _LINK_ID_IE_:
32361 - plinkid_ie=(u8*)pIE;
32362 - break;
32363 - default:
32364 - break;
32365 - }
32366 -
32367 - j += (pIE->Length + 2);
32368 -
32369 - }
32370 -
32371 - //verify mic in FTIE MIC field
32372 - if(tdls_verify_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie)==0){ //0: Invalid, 1: Valid
32373 - free_tdls_sta(adapter, ptdls_sta);
32374 - return _FAIL;
32375 - }
32376 -
32377 - }
32378 -
32379 - ptdlsinfo->setup_state = TDLS_LINKED_STATE;
32380 - if( ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE )
32381 - {
32382 - ptdls_sta->tdls_sta_state|=TDLS_LINKED_STATE;
32383 - _cancel_timer_ex( &ptdls_sta->handshake_timer);
32384 -#ifdef CONFIG_TDLS_AUTOCHECKALIVE
32385 - _set_timer( &ptdls_sta->alive_timer1, TDLS_ALIVE_TIMER_PH1);
32386 -#endif //CONFIG_TDLS_AUTOCHECKALIVE
32387 - }
32388 -
32389 - ptdls_sta->option=1; //write RCR DATA BIT
32390 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_WRCR);
32391 -
32392 - //Write cam
32393 - //TDLS encryption(if needed) will always be CCMP
32394 - if(prx_pkt_attrib->encrypt){
32395 - if(ptdls_sta->cam_entry==0){
32396 - ptdls_sta->dot118021XPrivacy=_AES_;
32397 - ptdls_sta->cam_entry=ptdlsinfo->cam_entry_to_write;
32398 - if(++ptdlsinfo->cam_entry_to_write>31)
32399 - ptdlsinfo->cam_entry_to_write=6;
32400 - }
32401 - rtw_setstakey_cmd(adapter, (u8*)ptdls_sta, _TRUE);
32402 - }
32403 -
32404 - return _FAIL;
32405 -
32406 -}
32407 -
32408 -sint On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame)
32409 -{
32410 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
32411 - struct sta_priv *pstapriv = &adapter->stapriv;
32412 - struct sta_info *psta_ap;
32413 - u8 *ptr = precv_frame->u.hdr.rx_data;
32414 - sint parsing_length; //frame body length, without icv_len
32415 - PNDIS_802_11_VARIABLE_IEs pIE;
32416 - u8 FIXED_IE = 3, *dst, *pdialog = NULL;
32417 - u16 j;
32418 -
32419 - ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len + LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE + 1;
32420 - pdialog=ptr+2;
32421 -
32422 - parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
32423 - -prx_pkt_attrib->hdrlen
32424 - -prx_pkt_attrib->iv_len
32425 - -prx_pkt_attrib->icv_len
32426 - -LLC_HEADER_SIZE
32427 - -TYPE_LENGTH_FIELD_SIZE
32428 - -1
32429 - -FIXED_IE;
32430 -
32431 - //parsing information element
32432 - for(j=FIXED_IE; j<parsing_length;){
32433 -
32434 - pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
32435 -
32436 - switch (pIE->ElementID)
32437 - {
32438 - case _LINK_ID_IE_:
32439 - psta_ap = rtw_get_stainfo(pstapriv, pIE->data);
32440 - if(psta_ap == NULL)
32441 - {
32442 - goto exit;
32443 - }
32444 - dst = pIE->data + 12;
32445 - if( (MacAddr_isBcst(dst) == _FALSE) && (_rtw_memcmp(myid(&(adapter->eeprompriv)), dst, 6) == _FALSE) )
32446 - {
32447 - goto exit;
32448 - }
32449 - break;
32450 - default:
32451 - break;
32452 - }
32453 -
32454 - j += (pIE->Length + 2);
32455 -
32456 - }
32457 -
32458 - //check frame contents
32459 -
32460 - issue_tdls_dis_rsp(adapter, precv_frame, *(pdialog) );
32461 -
32462 -exit:
32463 -
32464 - return _FAIL;
32465 -
32466 -}
32467 -
32468 -sint On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame)
32469 -{
32470 - u8 *psa;
32471 - u8 *ptr = precv_frame->u.hdr.rx_data;
32472 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
32473 - struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
32474 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
32475 - struct sta_priv *pstapriv = &adapter->stapriv;
32476 - struct sta_info *ptdls_sta= NULL;
32477 - _irqL irqL;
32478 -
32479 - psa = get_sa(ptr);
32480 -
32481 - ptdls_sta = rtw_get_stainfo(pstapriv, psa);
32482 - if(ptdls_sta!=NULL){
32483 -
32484 - if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){
32485 - ptdls_sta->option =3;
32486 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
32487 - }
32488 - free_tdls_sta(adapter, ptdls_sta);
32489 - }
32490 -
32491 - return _FAIL;
32492 -
32493 -}
32494 -
32495 -u8 TDLS_check_ch_state(uint state){
32496 - if( (state & TDLS_CH_SWITCH_ON_STATE) &&
32497 - (state & TDLS_AT_OFF_CH_STATE) &&
32498 - (state & TDLS_PEER_AT_OFF_STATE) ){
32499 -
32500 - if(state & TDLS_PEER_SLEEP_STATE)
32501 - return 2; //U-APSD + ch. switch
32502 - else
32503 - return 1; //ch. switch
32504 - }else
32505 - return 0;
32506 -}
32507 -
32508 -//we process buffered data for 1. U-APSD, 2. ch. switch, 3. U-APSD + ch. switch here
32509 -sint On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame)
32510 -{
32511 - struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
32512 - struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
32513 - struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
32514 - struct sta_priv *pstapriv = &adapter->stapriv;
32515 - //get peer sta infomation
32516 - struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->src);
32517 - u8 wmmps_ac=0, state=TDLS_check_ch_state(ptdls_sta->tdls_sta_state);
32518 - int i;
32519 -
32520 - ptdls_sta->sta_stats.rx_data_pkts++;
32521 -
32522 - //receive peer traffic response frame, sleeping STA wakes up
32523 - //ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_SLEEP_STATE);
32524 - process_wmmps_data( adapter, precv_frame);
32525 -
32526 - // if noticed peer STA wakes up by receiving peer traffic response
32527 - // and we want to do channel swtiching, then we will transmit channel switch request first
32528 - if(ptdls_sta->tdls_sta_state & TDLS_APSD_CHSW_STATE){
32529 - issue_tdls_ch_switch_req(adapter, pattrib->src);
32530 - ptdls_sta->tdls_sta_state &= ~(TDLS_APSD_CHSW_STATE);
32531 - return _FAIL;
32532 - }
32533 -
32534 - //check 4-AC queue bit
32535 - if(ptdls_sta->uapsd_vo || ptdls_sta->uapsd_vi || ptdls_sta->uapsd_be || ptdls_sta->uapsd_bk)
32536 - wmmps_ac=1;
32537 -
32538 - //if it's a direct link and have buffered frame
32539 - if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE){
32540 - if(wmmps_ac && state)
32541 - {
32542 - _irqL irqL;
32543 - _list *xmitframe_plist, *xmitframe_phead;
32544 - struct xmit_frame *pxmitframe=NULL;
32545 -
32546 - _enter_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
32547 -
32548 - xmitframe_phead = get_list_head(&ptdls_sta->sleep_q);
32549 - xmitframe_plist = get_next(xmitframe_phead);
32550 -
32551 - //transmit buffered frames
32552 - while ((rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) == _FALSE)
32553 - {
32554 - pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);
32555 - xmitframe_plist = get_next(xmitframe_plist);
32556 - rtw_list_delete(&pxmitframe->list);
32557 -
32558 - ptdls_sta->sleepq_len--;
32559 - if(ptdls_sta->sleepq_len>0){
32560 - pxmitframe->attrib.mdata = 1;
32561 - pxmitframe->attrib.eosp = 0;
32562 - }else{
32563 - pxmitframe->attrib.mdata = 0;
32564 - pxmitframe->attrib.eosp = 1;
32565 - }
32566 - //pxmitframe->attrib.triggered = 1; //maybe doesn't need in TDLS
32567 - if(adapter->HalFunc.hal_xmit(adapter, pxmitframe) == _TRUE)
32568 - {
32569 - rtw_os_xmit_complete(adapter, pxmitframe);
32570 - }
32571 -
32572 - }
32573 -
32574 - if(ptdls_sta->sleepq_len==0)
32575 - {
32576 - DBG_871X("no buffered packets to xmit\n");
32577 - //on U-APSD + CH. switch state, when there is no buffered date to xmit,
32578 - // we should go back to base channel
32579 - if(state==2){
32580 - ptdls_sta->option = 3;
32581 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
32582 - }else if(ptdls_sta->tdls_sta_state&TDLS_SW_OFF_STATE){
32583 - ptdls_sta->tdls_sta_state &= ~(TDLS_SW_OFF_STATE);
32584 - ptdlsinfo->candidate_ch= pmlmeext->cur_channel;
32585 - issue_tdls_ch_switch_req(adapter, pattrib->src);
32586 - DBG_8192C("issue tdls ch switch req back to base channel\n");
32587 - }
32588 -
32589 - }
32590 - else
32591 - {
32592 - DBG_871X("error!psta->sleepq_len=%d\n", ptdls_sta->sleepq_len);
32593 - ptdls_sta->sleepq_len=0;
32594 - }
32595 -
32596 - _exit_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
32597 -
32598 - }
32599 -
32600 - }
32601 -
32602 - return _FAIL;
32603 -}
32604 -
32605 -sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame)
32606 -{
32607 - struct sta_info *ptdls_sta= NULL;
32608 - struct sta_priv *pstapriv = &adapter->stapriv;
32609 - u8 *ptr = precv_frame->u.hdr.rx_data;
32610 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
32611 - u8 *psa;
32612 - sint parsing_length;
32613 - PNDIS_802_11_VARIABLE_IEs pIE;
32614 - u8 FIXED_IE =3;
32615 - u16 j;
32616 - struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
32617 -
32618 - psa = get_sa(ptr);
32619 - ptdls_sta = rtw_get_stainfo(pstapriv, psa);
32620 -
32621 - //[+1]: payload type
32622 - ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
32623 - parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
32624 - -prx_pkt_attrib->hdrlen
32625 - -prx_pkt_attrib->iv_len
32626 - -prx_pkt_attrib->icv_len
32627 - -LLC_HEADER_SIZE
32628 - -TYPE_LENGTH_FIELD_SIZE
32629 - -1
32630 - -FIXED_IE;
32631 -
32632 - ptdls_sta->off_ch = *(ptr+2);
32633 -
32634 - //parsing information element
32635 - for(j=FIXED_IE; j<parsing_length;){
32636 -
32637 - pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
32638 -
32639 - switch (pIE->ElementID)
32640 - {
32641 - case _COUNTRY_IE_:
32642 - break;
32643 - case _CH_SWTICH_ANNOUNCE_:
32644 - break;
32645 - case _LINK_ID_IE_:
32646 - break;
32647 - case _CH_SWITCH_TIMING_:
32648 - _rtw_memcpy(&ptdls_sta->ch_switch_time, pIE->data, 2);
32649 - _rtw_memcpy(&ptdls_sta->ch_switch_timeout, pIE->data+2, 2);
32650 - default:
32651 - break;
32652 - }
32653 -
32654 - j += (pIE->Length + 2);
32655 -
32656 - }
32657 -
32658 - //todo: check status
32659 - ptdls_sta->stat_code=0;
32660 - ptdls_sta->tdls_sta_state |= TDLS_CH_SWITCH_ON_STATE;
32661 -
32662 - issue_nulldata(adapter, 1);
32663 -
32664 - issue_tdls_ch_switch_rsp(adapter, psa);
32665 -
32666 - DBG_8192C("issue tdls channel switch response\n");
32667 -
32668 - if((ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE) && ptdls_sta->off_ch==pmlmeext->cur_channel){
32669 - DBG_8192C("back to base channel\n");
32670 - ptdls_sta->option=7;
32671 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_BASE_CH);
32672 - }else{
32673 - ptdls_sta->option=6;
32674 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
32675 - }
32676 - return _FAIL;
32677 -}
32678 -
32679 -sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame)
32680 -{
32681 - struct sta_info *ptdls_sta= NULL;
32682 - struct sta_priv *pstapriv = &adapter->stapriv;
32683 - u8 *ptr = precv_frame->u.hdr.rx_data;
32684 - struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
32685 - u8 *psa;
32686 - sint parsing_length;
32687 - PNDIS_802_11_VARIABLE_IEs pIE;
32688 - u8 FIXED_IE =4;
32689 - u16 stat_code, j, switch_time, switch_timeout;
32690 - struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
32691 +#endif //CONFIG_TDLS
32692
32693 - psa = get_sa(ptr);
32694 - ptdls_sta = rtw_get_stainfo(pstapriv, psa);
32695 -
32696 - //if channel switch is running and receiving Unsolicited TDLS Channel Switch Response,
32697 - //it will go back to base channel and terminate this channel switch procedure
32698 - if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE ){
32699 - if(pmlmeext->cur_channel==ptdls_sta->off_ch){
32700 - DBG_8192C("back to base channel\n");
32701 - ptdls_sta->option=7;
32702 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
32703 - }else{
32704 - DBG_8192C("receive unsolicited channel switch response \n");
32705 - ptdls_sta->option=3;
32706 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
32707 - }
32708 - return _FAIL;
32709 - }
32710 + if(!psta->qos_option)
32711 + return;
32712
32713 - //avoiding duplicated or unconditional ch. switch. rsp
32714 - if((ptdls_sta->tdls_sta_state & TDLS_CH_SW_INITIATOR_STATE) != TDLS_CH_SW_INITIATOR_STATE)
32715 - return _FAIL;
32716 -
32717 - //[+1]: payload type
32718 - ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
32719 - parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
32720 - -prx_pkt_attrib->hdrlen
32721 - -prx_pkt_attrib->iv_len
32722 - -prx_pkt_attrib->icv_len
32723 - -LLC_HEADER_SIZE
32724 - -TYPE_LENGTH_FIELD_SIZE
32725 - -1
32726 - -FIXED_IE;
32727 -
32728 - _rtw_memcpy(&stat_code, ptr+2, 2);
32729 -
32730 - if(stat_code!=0){
32731 - return _FAIL;
32732 + if(!(psta->qos_info&0xf))
32733 + return;
32734 +
32735 +#ifdef CONFIG_TDLS
32736 }
32737 -
32738 - //parsing information element
32739 - for(j=FIXED_IE; j<parsing_length;){
32740 -
32741 - pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
32742 +#endif //CONFIG_TDLS
32743
32744 - switch (pIE->ElementID)
32745 + if(psta->state&WIFI_SLEEP_STATE)
32746 + {
32747 + u8 wmmps_ac=0;
32748 +
32749 + switch(pattrib->priority)
32750 {
32751 - case _LINK_ID_IE_:
32752 + case 1:
32753 + case 2:
32754 + wmmps_ac = psta->uapsd_bk&BIT(1);
32755 break;
32756 - case _CH_SWITCH_TIMING_:
32757 - _rtw_memcpy(&switch_time, pIE->data, 2);
32758 - if(switch_time > ptdls_sta->ch_switch_time)
32759 - _rtw_memcpy(&ptdls_sta->ch_switch_time, &switch_time, 2);
32760 -
32761 - _rtw_memcpy(&switch_timeout, pIE->data+2, 2);
32762 - if(switch_timeout > ptdls_sta->ch_switch_timeout)
32763 - _rtw_memcpy(&ptdls_sta->ch_switch_timeout, &switch_timeout, 2);
32764 -
32765 - default:
32766 + case 4:
32767 + case 5:
32768 + wmmps_ac = psta->uapsd_vi&BIT(1);
32769 + break;
32770 + case 6:
32771 + case 7:
32772 + wmmps_ac = psta->uapsd_vo&BIT(1);
32773 break;
32774 + case 0:
32775 + case 3:
32776 + default:
32777 + wmmps_ac = psta->uapsd_be&BIT(1);
32778 + break;
32779 }
32780
32781 - j += (pIE->Length + 2);
32782 -
32783 + if(wmmps_ac)
32784 + {
32785 + if(psta->sleepq_ac_len>0)
32786 + {
32787 + //process received triggered frame
32788 + xmit_delivery_enabled_frames(padapter, psta);
32789 + }
32790 + else
32791 + {
32792 + //issue one qos null frame with More data bit = 0 and the EOSP bit set (=1)
32793 + issue_qos_nulldata(padapter, psta->hwaddr, (u16)pattrib->priority, 0, 0);
32794 + }
32795 + }
32796 +
32797 }
32798
32799 - ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SW_INITIATOR_STATE);
32800 - ptdls_sta->tdls_sta_state |=TDLS_CH_SWITCH_ON_STATE;
32801 -
32802 - //goto set_channel_workitem_callback()
32803 - ptdls_sta->option=6;
32804 - rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
32805 +
32806 +#endif
32807
32808 - return _FAIL;
32809 }
32810
32811 +#ifdef CONFIG_TDLS
32812 sint OnTDLS(_adapter *adapter, union recv_frame *precv_frame)
32813 {
32814 struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
32815 sint ret = _SUCCESS;
32816 u8 *paction = get_recvframe_data(precv_frame);
32817 -
32818 - //point to action field, [+8]: snap+ether_type, [+1]: payload_type, [+1]: category field
32819 - paction+=pattrib->hdrlen + pattrib->iv_len+8+1+1;
32820 + u8 category_field = 1;
32821 +#ifdef CONFIG_WFD
32822 + u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a };
32823 +#endif //CONFIG_WFD
32824 + struct tdls_info *ptdlsinfo = &(adapter->tdlsinfo);
32825 +
32826 + //point to action field
32827 + paction+=pattrib->hdrlen
32828 + + pattrib->iv_len
32829 + + SNAP_SIZE
32830 + + ETH_TYPE_LEN
32831 + + PAYLOAD_TYPE_LEN
32832 + + category_field;
32833 +
32834 + if(ptdlsinfo->enable == 0)
32835 + {
32836 + DBG_871X("recv tdls frame, "
32837 + "but tdls haven't enabled\n");
32838 + ret = _FAIL;
32839 + return ret;
32840 + }
32841
32842 switch(*paction){
32843 case TDLS_SETUP_REQUEST:
32844 @@ -1763,6 +1024,26 @@ sint OnTDLS(_adapter *adapter, union recv_frame *precv_frame)
32845 DBG_871X("recv tdls channel switch response frame\n");
32846 ret=On_TDLS_Ch_Switch_Rsp(adapter, precv_frame);
32847 break;
32848 +#ifdef CONFIG_WFD
32849 + case 0x50: //First byte of WFA OUI
32850 + if( _rtw_memcmp(WFA_OUI, (paction), 3) )
32851 + {
32852 + if( *(paction + 3) == 0x04) //Probe request frame
32853 + {
32854 + //WFDTDLS: for sigma test, do not setup direct link automatically
32855 + ptdlsinfo->dev_discovered = 1;
32856 + DBG_871X("recv tunneled probe request frame\n");
32857 + issue_tunneled_probe_rsp(adapter, precv_frame);
32858 + }
32859 + if( *(paction + 3) == 0x05) //Probe response frame
32860 + {
32861 + //WFDTDLS: for sigma test, do not setup direct link automatically
32862 + ptdlsinfo->dev_discovered = 1;
32863 + DBG_871X("recv tunneled probe response frame\n");
32864 + }
32865 + }
32866 + break;
32867 +#endif //CONFIG_WFD
32868 default:
32869 DBG_871X("receive TDLS frame but not supported\n");
32870 ret=_FAIL;
32871 @@ -1773,9 +1054,10 @@ exit:
32872 return ret;
32873
32874 }
32875 -#endif
32876 +#endif //CONFIG_TDLS
32877
32878 -static void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct sta_info*sta)
32879 +void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct sta_info*sta);
32880 +void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct sta_info*sta)
32881 {
32882 int sz;
32883 struct sta_info *psta = NULL;
32884 @@ -1791,7 +1073,7 @@ static void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct
32885 if( (!MacAddr_isBcst(pattrib->dst)) && (!IS_MCAST(pattrib->dst))){
32886 padapter->mlmepriv.LinkDetectInfo.NumRxUnicastOkInPeriod++;
32887 }
32888 -
32889 +
32890 if(sta)
32891 psta = sta;
32892 else
32893 @@ -1807,7 +1089,12 @@ static void count_rx_stats(_adapter *padapter, union recv_frame *prframe, struct
32894
32895 }
32896
32897 -static sint sta2sta_data_frame(
32898 +sint sta2sta_data_frame(
32899 + _adapter *adapter,
32900 + union recv_frame *precv_frame,
32901 + struct sta_info**psta
32902 +);
32903 +sint sta2sta_data_frame(
32904 _adapter *adapter,
32905 union recv_frame *precv_frame,
32906 struct sta_info**psta
32907 @@ -1817,7 +1104,6 @@ static sint sta2sta_data_frame(
32908 sint ret = _SUCCESS;
32909 struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
32910 struct sta_priv *pstapriv = &adapter->stapriv;
32911 - struct security_priv *psecuritypriv = &adapter->securitypriv;
32912 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
32913 u8 *mybssid = get_bssid(pmlmepriv);
32914 u8 *myhwaddr = myid(&adapter->eeprompriv);
32915 @@ -1828,9 +1114,8 @@ static sint sta2sta_data_frame(
32916 struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
32917 struct sta_info *ptdls_sta=NULL;
32918 u8 *psnap_type=ptr+pattrib->hdrlen + pattrib->iv_len+SNAP_SIZE;
32919 - //frame body located after [+2]: ether-type, [+1]: payload type
32920 - u8 *pframe_body = psnap_type+2+1;
32921 -#endif
32922 + u8 *pframe_body = psnap_type + ETH_TYPE_LEN + PAYLOAD_TYPE_LEN;
32923 +#endif //CONFIG_TDLS
32924
32925 _func_enter_;
32926
32927 @@ -1863,18 +1148,16 @@ _func_enter_;
32928 else if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
32929 {
32930 #ifdef CONFIG_TDLS
32931 -
32932 //direct link data transfer
32933 - if(ptdlsinfo->setup_state & TDLS_LINKED_STATE){
32934 + if(ptdlsinfo->setup_state == TDLS_LINKED_STATE){
32935 ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->src);
32936 if(ptdls_sta==NULL)
32937 {
32938 ret=_FAIL;
32939 goto exit;
32940 }
32941 - else if((ptdls_sta->tdls_sta_state&TDLS_LINKED_STATE)==TDLS_LINKED_STATE)
32942 + else if(ptdls_sta->tdls_sta_state&TDLS_LINKED_STATE)
32943 {
32944 -
32945 //drop QoS-SubType Data, including QoS NULL, excluding QoS-Data
32946 if( (GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE )== WIFI_QOS_DATA_TYPE)
32947 {
32948 @@ -1916,9 +1199,9 @@ _func_enter_;
32949 {
32950 DBG_871X("TDLS: recv peer null frame with pwr bit 1\n");
32951 ptdls_sta->tdls_sta_state|=TDLS_PEER_SLEEP_STATE;
32952 + }
32953 // it would be triggered when we are off channel and receiving NULL DATA
32954 // we can confirm that peer STA is at off channel
32955 - }
32956 else if(ptdls_sta->tdls_sta_state&TDLS_CH_SWITCH_ON_STATE)
32957 {
32958 if((ptdls_sta->tdls_sta_state & TDLS_PEER_AT_OFF_STATE) != TDLS_PEER_AT_OFF_STATE)
32959 @@ -1944,7 +1227,7 @@ _func_enter_;
32960
32961 }
32962 else
32963 -#endif
32964 +#endif //CONFIG_TDLS
32965 {
32966 // For Station mode, sa and bssid should always be BSSID, and DA is my mac-address
32967 if(!_rtw_memcmp(pattrib->bssid, pattrib->src, ETH_ALEN) )
32968 @@ -1956,7 +1239,6 @@ _func_enter_;
32969
32970 sta_addr = pattrib->bssid;
32971 }
32972 -
32973 }
32974 else if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
32975 {
32976 @@ -2002,6 +1284,12 @@ _func_enter_;
32977 else
32978 *psta = rtw_get_stainfo(pstapriv, sta_addr); // get ap_info
32979
32980 +#ifdef CONFIG_TDLS
32981 + if(ptdls_sta != NULL)
32982 + *psta = ptdls_sta;
32983 +#endif //CONFIG_TDLS
32984 +
32985 +
32986 if (*psta == NULL) {
32987 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("can't get psta under sta2sta_data_frame ; drop pkt\n"));
32988 #ifdef CONFIG_MP_INCLUDED
32989 @@ -2018,8 +1306,11 @@ _func_exit_;
32990
32991 }
32992
32993 -
32994 -static sint ap2sta_data_frame(
32995 +sint ap2sta_data_frame(
32996 + _adapter *adapter,
32997 + union recv_frame *precv_frame,
32998 + struct sta_info**psta );
32999 +sint ap2sta_data_frame(
33000 _adapter *adapter,
33001 union recv_frame *precv_frame,
33002 struct sta_info**psta )
33003 @@ -2028,7 +1319,6 @@ static sint ap2sta_data_frame(
33004 struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
33005 sint ret = _SUCCESS;
33006 struct sta_priv *pstapriv = &adapter->stapriv;
33007 - struct security_priv *psecuritypriv = &adapter->securitypriv;
33008 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
33009 u8 *mybssid = get_bssid(pmlmepriv);
33010 u8 *myhwaddr = myid(&adapter->eeprompriv);
33011 @@ -2042,31 +1332,6 @@ _func_enter_;
33012 )
33013 {
33014
33015 - // if NULL-frame, drop packet
33016 - if ((GetFrameSubType(ptr)) == WIFI_DATA_NULL)
33017 - {
33018 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,(" NULL frame \n"));
33019 - #ifdef DBG_RX_DROP_FRAME
33020 - DBG_871X("DBG_RX_DROP_FRAME %s NULL frame\n", __FUNCTION__);
33021 - #endif
33022 - ret= _FAIL;
33023 - goto exit;
33024 - }
33025 -
33026 - //drop QoS-SubType Data, including QoS NULL, excluding QoS-Data
33027 - if( (GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE )== WIFI_QOS_DATA_TYPE)
33028 - {
33029 - if(GetFrameSubType(ptr)&(BIT(4)|BIT(5)|BIT(6)))
33030 - {
33031 - #ifdef DBG_RX_DROP_FRAME
33032 - DBG_871X("DBG_RX_DROP_FRAME %s drop QoS-SubType Data, including QoS NULL, excluding QoS-Data\n", __FUNCTION__);
33033 - #endif
33034 - ret= _FAIL;
33035 - goto exit;
33036 - }
33037 -
33038 - }
33039 -
33040 // filter packets that SA is myself or multicast or broadcast
33041 if (_rtw_memcmp(myhwaddr, pattrib->src, ETH_ALEN)){
33042 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" SA==myself \n"));
33043 @@ -2084,19 +1349,11 @@ _func_enter_;
33044 // da should be for me
33045 if((!_rtw_memcmp(myhwaddr, pattrib->dst, ETH_ALEN))&& (!bmcast))
33046 {
33047 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,(" ap2sta_data_frame: compare DA fail; DA= %x:%x:%x:%x:%x:%x \n",
33048 - pattrib->dst[0],
33049 - pattrib->dst[1],
33050 - pattrib->dst[2],
33051 - pattrib->dst[3],
33052 - pattrib->dst[4],
33053 - pattrib->dst[5]));
33054 + RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,
33055 + (" ap2sta_data_frame: compare DA fail; DA="MAC_FMT"\n", MAC_ARG(pattrib->dst)));
33056 #ifdef DBG_RX_DROP_FRAME
33057 - DBG_871X("DBG_RX_DROP_FRAME %s compare DA fail; DA= %x:%x:%x:%x:%x:%x \n", __FUNCTION__,
33058 - pattrib->dst[0],pattrib->dst[1],pattrib->dst[2],
33059 - pattrib->dst[3],pattrib->dst[4],pattrib->dst[5]);
33060 + DBG_871X("DBG_RX_DROP_FRAME %s DA="MAC_FMT"\n", __func__, MAC_ARG(pattrib->dst));
33061 #endif
33062 -
33063 ret= _FAIL;
33064 goto exit;
33065 }
33066 @@ -2107,30 +1364,21 @@ _func_enter_;
33067 _rtw_memcmp(mybssid, "\x0\x0\x0\x0\x0\x0", ETH_ALEN) ||
33068 (!_rtw_memcmp(pattrib->bssid, mybssid, ETH_ALEN)) )
33069 {
33070 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,(" ap2sta_data_frame: compare BSSID fail ; BSSID=%x:%x:%x:%x:%x:%x\n",
33071 - pattrib->bssid[0],
33072 - pattrib->bssid[1],
33073 - pattrib->bssid[2],
33074 - pattrib->bssid[3],
33075 - pattrib->bssid[4],
33076 - pattrib->bssid[5]));
33077 -
33078 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("mybssid= %x:%x:%x:%x:%x:%x\n",
33079 - mybssid[0],
33080 - mybssid[1],
33081 - mybssid[2],
33082 - mybssid[3],
33083 - mybssid[4],
33084 - mybssid[5]));
33085 -
33086 + RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,
33087 + (" ap2sta_data_frame: compare BSSID fail ; BSSID="MAC_FMT"\n", MAC_ARG(pattrib->bssid)));
33088 + RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("mybssid="MAC_FMT"\n", MAC_ARG(mybssid)));
33089 #ifdef DBG_RX_DROP_FRAME
33090 - 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__,
33091 - pattrib->bssid[0], pattrib->bssid[1], pattrib->bssid[2],
33092 - pattrib->bssid[3], pattrib->bssid[4], pattrib->bssid[5],
33093 - mybssid[0], mybssid[1], mybssid[2],
33094 - mybssid[3], mybssid[4], mybssid[5]);
33095 + DBG_871X("DBG_RX_DROP_FRAME %s BSSID="MAC_FMT", mybssid="MAC_FMT"\n",
33096 + __FUNCTION__, MAC_ARG(pattrib->bssid), MAC_ARG(mybssid));
33097 + DBG_871X( "this adapter = %d, buddy adapter = %d\n", adapter->adapter_type, adapter->pbuddy_adapter->adapter_type );
33098 #endif
33099
33100 + if(!bmcast)
33101 + {
33102 + DBG_871X("issue_deauth to the nonassociated ap=" MAC_FMT " for the reason(7)\n", MAC_ARG(pattrib->bssid));
33103 + issue_deauth(adapter, pattrib->bssid, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
33104 + }
33105 +
33106 ret= _FAIL;
33107 goto exit;
33108 }
33109 @@ -2149,6 +1397,16 @@ _func_enter_;
33110 goto exit;
33111 }
33112
33113 + if ((GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE) == WIFI_QOS_DATA_TYPE) {
33114 + }
33115 +
33116 + if (GetFrameSubType(ptr) & BIT(6)) {
33117 + /* No data, will not indicate to upper layer, temporily count it here */
33118 + count_rx_stats(adapter, precv_frame, *psta);
33119 + ret = RTW_RX_HANDLED;
33120 + goto exit;
33121 + }
33122 +
33123 }
33124 else if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE) &&
33125 (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) )
33126 @@ -2175,8 +1433,25 @@ _func_enter_;
33127
33128
33129 }
33130 + else if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
33131 + {
33132 + /* Special case */
33133 + ret = RTW_RX_HANDLED;
33134 + goto exit;
33135 + }
33136 else
33137 {
33138 + if(_rtw_memcmp(myhwaddr, pattrib->dst, ETH_ALEN)&& (!bmcast))
33139 + {
33140 + *psta = rtw_get_stainfo(pstapriv, pattrib->bssid); // get sta_info
33141 + if (*psta == NULL)
33142 + {
33143 + DBG_871X("issue_deauth to the ap=" MAC_FMT " for the reason(7)\n", MAC_ARG(pattrib->bssid));
33144 +
33145 + issue_deauth(adapter, pattrib->bssid, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
33146 + }
33147 + }
33148 +
33149 ret = _FAIL;
33150 #ifdef DBG_RX_DROP_FRAME
33151 DBG_871X("DBG_RX_DROP_FRAME %s fw_state:0x%x\n", __FUNCTION__, get_fwstate(pmlmepriv));
33152 @@ -2191,7 +1466,11 @@ _func_exit_;
33153
33154 }
33155
33156 -static sint sta2ap_data_frame(
33157 +sint sta2ap_data_frame(
33158 + _adapter *adapter,
33159 + union recv_frame *precv_frame,
33160 + struct sta_info**psta );
33161 +sint sta2ap_data_frame(
33162 _adapter *adapter,
33163 union recv_frame *precv_frame,
33164 struct sta_info**psta )
33165 @@ -2199,7 +1478,6 @@ static sint sta2ap_data_frame(
33166 u8 *ptr = precv_frame->u.hdr.rx_data;
33167 struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
33168 struct sta_priv *pstapriv = &adapter->stapriv;
33169 - struct security_priv *psecuritypriv = &adapter->securitypriv;
33170 struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
33171 unsigned char *mybssid = get_bssid(pmlmepriv);
33172 sint ret=_SUCCESS;
33173 @@ -2208,71 +1486,48 @@ _func_enter_;
33174
33175 if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
33176 {
33177 - //For AP mode, RA=BSSID, TX=STA(SRC_ADDR), A3=DST_ADDR
33178 - if(!_rtw_memcmp(pattrib->bssid, mybssid, ETH_ALEN))
33179 - {
33180 - ret= _FAIL;
33181 - goto exit;
33182 - }
33183 -
33184 - *psta = rtw_get_stainfo(pstapriv, pattrib->src);
33185 -
33186 - if (*psta == NULL)
33187 - {
33188 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("can't get psta under AP_MODE; drop pkt\n"));
33189 - ret= _FAIL;
33190 - goto exit;
33191 - }
33192 -
33193 -
33194 - process_pwrbit_data(adapter, precv_frame);
33195 -
33196 -
33197 - // if NULL-frame, drop packet
33198 - if ((GetFrameSubType(ptr)) == WIFI_DATA_NULL)
33199 - {
33200 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,(" NULL frame \n"));
33201 -
33202 - //temporily count it here
33203 - count_rx_stats(adapter, precv_frame, *psta);
33204 -
33205 - //process_null_data(adapter, precv_frame);
33206 - //process_pwrbit_data(adapter, precv_frame);
33207 -
33208 -
33209 - ret= _FAIL;
33210 - goto exit;
33211 - }
33212 + //For AP mode, RA=BSSID, TX=STA(SRC_ADDR), A3=DST_ADDR
33213 + if(!_rtw_memcmp(pattrib->bssid, mybssid, ETH_ALEN))
33214 + {
33215 + ret= _FAIL;
33216 + goto exit;
33217 + }
33218
33219 - //drop QoS-SubType Data, including QoS NULL, excluding QoS-Data
33220 - if( (GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE )== WIFI_QOS_DATA_TYPE)
33221 - {
33222 + *psta = rtw_get_stainfo(pstapriv, pattrib->src);
33223 + if (*psta == NULL)
33224 + {
33225 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("can't get psta under AP_MODE; drop pkt\n"));
33226 + DBG_871X("issue_deauth to sta=" MAC_FMT " for the reason(7)\n", MAC_ARG(pattrib->src));
33227
33228 - if(GetFrameSubType(ptr)==WIFI_QOS_DATA_NULL)
33229 - {
33230 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,(" QoS NULL frame \n"));
33231 + issue_deauth(adapter, pattrib->src, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
33232
33233 - //temporily count it here
33234 - count_rx_stats(adapter, precv_frame, *psta);
33235 + ret = RTW_RX_HANDLED;
33236 + goto exit;
33237 + }
33238
33239 - //process_null_data(adapter, precv_frame);
33240 + process_pwrbit_data(adapter, precv_frame);
33241
33242 - ret= _FAIL;
33243 - goto exit;
33244 - }
33245 -
33246 - process_wmmps_data(adapter, precv_frame);
33247 -
33248 - /*
33249 - if(GetFrameSubType(ptr)&(BIT(4)|BIT(5)|BIT(6)))
33250 - {
33251 - process_null_data(adapter, precv_frame);
33252 - ret= _FAIL;
33253 - goto exit;
33254 - }
33255 - */
33256 - }
33257 + if ((GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE) == WIFI_QOS_DATA_TYPE) {
33258 + process_wmmps_data(adapter, precv_frame);
33259 + }
33260
33261 + if (GetFrameSubType(ptr) & BIT(6)) {
33262 + /* No data, will not indicate to upper layer, temporily count it here */
33263 + count_rx_stats(adapter, precv_frame, *psta);
33264 + ret = RTW_RX_HANDLED;
33265 + goto exit;
33266 + }
33267 + }
33268 + else {
33269 + u8 *myhwaddr = myid(&adapter->eeprompriv);
33270 + if (!_rtw_memcmp(pattrib->ra, myhwaddr, ETH_ALEN)) {
33271 + ret = RTW_RX_HANDLED;
33272 + goto exit;
33273 + }
33274 + DBG_871X("issue_deauth to sta=" MAC_FMT " for the reason(7)\n", MAC_ARG(pattrib->src));
33275 + issue_deauth(adapter, pattrib->src, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
33276 + ret = RTW_RX_HANDLED;
33277 + goto exit;
33278 }
33279
33280 exit:
33281 @@ -2283,7 +1538,8 @@ _func_exit_;
33282
33283 }
33284
33285 -static sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv_frame)
33286 +sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv_frame);
33287 +sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv_frame)
33288 {
33289 #ifdef CONFIG_AP_MODE
33290 struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
33291 @@ -2346,13 +1602,22 @@ static sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv
33292 if(wmmps_ac)
33293 return _FAIL;
33294
33295 + if(psta->state & WIFI_STA_ALIVE_CHK_STATE)
33296 + {
33297 + DBG_871X("%s alive check-rx ps-poll\n", __func__);
33298 + psta->expire_to = pstapriv->expire_to;
33299 + psta->state ^= WIFI_STA_ALIVE_CHK_STATE;
33300 + }
33301 +
33302 if((psta->state&WIFI_SLEEP_STATE) && (pstapriv->sta_dz_bitmap&BIT(psta->aid)))
33303 {
33304 _irqL irqL;
33305 _list *xmitframe_plist, *xmitframe_phead;
33306 struct xmit_frame *pxmitframe=NULL;
33307 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
33308
33309 - _enter_critical_bh(&psta->sleep_q.lock, &irqL);
33310 + //_enter_critical_bh(&psta->sleep_q.lock, &irqL);
33311 + _enter_critical_bh(&pxmitpriv->lock, &irqL);
33312
33313 xmitframe_phead = get_list_head(&psta->sleep_q);
33314 xmitframe_plist = get_next(xmitframe_phead);
33315 @@ -2376,10 +1641,15 @@ static sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv
33316
33317 //DBG_871X("handling ps-poll, q_len=%d, tim=%x\n", psta->sleepq_len, pstapriv->tim_bitmap);
33318
33319 - if(padapter->HalFunc.hal_xmit(padapter, pxmitframe) == _TRUE)
33320 +#if 0
33321 + _exit_critical_bh(&psta->sleep_q.lock, &irqL);
33322 + if(rtw_hal_xmit(padapter, pxmitframe) == _TRUE)
33323 {
33324 rtw_os_xmit_complete(padapter, pxmitframe);
33325 }
33326 + _enter_critical_bh(&psta->sleep_q.lock, &irqL);
33327 +#endif
33328 + rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
33329
33330 if(psta->sleepq_len==0)
33331 {
33332 @@ -2392,15 +1662,24 @@ static sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv
33333 update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
33334 }
33335
33336 + //_exit_critical_bh(&psta->sleep_q.lock, &irqL);
33337 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
33338 +
33339 }
33340 else
33341 {
33342 + //_exit_critical_bh(&psta->sleep_q.lock, &irqL);
33343 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
33344 +
33345 //DBG_871X("no buffered packets to xmit\n");
33346 if(pstapriv->tim_bitmap&BIT(psta->aid))
33347 {
33348 if(psta->sleepq_len==0)
33349 {
33350 DBG_871X("no buffered packets to xmit\n");
33351 +
33352 + //issue nulldata with More data bit = 0 to indicate we have no buffered packets
33353 + issue_nulldata(padapter, psta->hwaddr, 0, 0, 0);
33354 }
33355 else
33356 {
33357 @@ -2415,9 +1694,7 @@ static sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv
33358 update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
33359 }
33360
33361 - }
33362 -
33363 - _exit_critical_bh(&psta->sleep_q.lock, &irqL);
33364 + }
33365
33366 }
33367
33368 @@ -2429,37 +1706,58 @@ static sint validate_recv_ctrl_frame(_adapter *padapter, union recv_frame *precv
33369
33370 }
33371
33372 -static sint validate_recv_mgnt_frame(_adapter *adapter, union recv_frame *precv_frame)
33373 +union recv_frame* recvframe_chk_defrag(PADAPTER padapter, union recv_frame *precv_frame);
33374 +sint validate_recv_mgnt_frame(PADAPTER padapter, union recv_frame *precv_frame);
33375 +sint validate_recv_mgnt_frame(PADAPTER padapter, union recv_frame *precv_frame)
33376 {
33377 - struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
33378 + //struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
33379
33380 RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("+validate_recv_mgnt_frame\n"));
33381
33382 #if 0
33383 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
33384 {
33385 -#ifdef CONFIG_NATIVEAP_MLME
33386 - mgt_dispatcher(adapter, precv_frame);
33387 +#ifdef CONFIG_NATIVEAP_MLME
33388 + mgt_dispatcher(padapter, precv_frame);
33389 #else
33390 - rtw_hostapd_mlme_rx(adapter, precv_frame);
33391 -#endif
33392 + rtw_hostapd_mlme_rx(padapter, precv_frame);
33393 +#endif
33394 }
33395 else
33396 {
33397 - mgt_dispatcher(adapter, precv_frame);
33398 + mgt_dispatcher(padapter, precv_frame);
33399 }
33400 #endif
33401
33402 + precv_frame = recvframe_chk_defrag(padapter, precv_frame);
33403 + if (precv_frame == NULL) {
33404 + RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,("%s: fragment packet\n",__FUNCTION__));
33405 + return _SUCCESS;
33406 + }
33407 +
33408 {
33409 //for rx pkt statistics
33410 - struct sta_info *psta = rtw_get_stainfo(&adapter->stapriv, GetAddr2Ptr(precv_frame->u.hdr.rx_data));
33411 - if(psta)
33412 + struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(precv_frame->u.hdr.rx_data));
33413 + if (psta) {
33414 psta->sta_stats.rx_mgnt_pkts++;
33415 + if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_BEACON)
33416 + psta->sta_stats.rx_beacon_pkts++;
33417 + else if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_PROBEREQ)
33418 + psta->sta_stats.rx_probereq_pkts++;
33419 + else if (GetFrameSubType(precv_frame->u.hdr.rx_data) == WIFI_PROBERSP) {
33420 + if (_rtw_memcmp(padapter->eeprompriv.mac_addr, GetAddr1Ptr(precv_frame->u.hdr.rx_data), ETH_ALEN) == _TRUE)
33421 + psta->sta_stats.rx_probersp_pkts++;
33422 + else if (is_broadcast_mac_addr(GetAddr1Ptr(precv_frame->u.hdr.rx_data))
33423 + || is_multicast_mac_addr(GetAddr1Ptr(precv_frame->u.hdr.rx_data)))
33424 + psta->sta_stats.rx_probersp_bm_pkts++;
33425 + else
33426 + psta->sta_stats.rx_probersp_uo_pkts++;
33427 + }
33428 + }
33429 }
33430
33431 -
33432 #ifdef CONFIG_INTEL_PROXIM
33433 - if(adapter->proximity.proxim_on==_TRUE)
33434 + if(padapter->proximity.proxim_on==_TRUE)
33435 {
33436 struct rx_pkt_attrib * pattrib=&precv_frame->u.hdr.attrib;
33437 struct recv_stat* prxstat=( struct recv_stat * ) precv_frame->u.hdr.rx_head ;
33438 @@ -2505,32 +1803,28 @@ static sint validate_recv_mgnt_frame(_adapter *adapter, union recv_frame *precv_
33439 pattrib->priority=0;
33440 pattrib->hdrlen = pattrib->to_fr_ds==3 ? 30 : 24;
33441
33442 - adapter->proximity.proxim_rx(adapter,precv_frame);
33443 + padapter->proximity.proxim_rx(padapter,precv_frame);
33444 }
33445 #endif
33446 - mgt_dispatcher(adapter, precv_frame);
33447 -
33448 + mgt_dispatcher(padapter, precv_frame);
33449
33450 return _SUCCESS;
33451
33452 }
33453
33454 -
33455 -static sint validate_recv_data_frame(_adapter *adapter, union recv_frame *precv_frame)
33456 +sint validate_recv_data_frame(_adapter *adapter, union recv_frame *precv_frame);
33457 +sint validate_recv_data_frame(_adapter *adapter, union recv_frame *precv_frame)
33458 {
33459 - int res;
33460 u8 bretry;
33461 u8 *psa, *pda, *pbssid;
33462 struct sta_info *psta = NULL;
33463 u8 *ptr = precv_frame->u.hdr.rx_data;
33464 struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
33465 - struct sta_priv *pstapriv = &adapter->stapriv;
33466 struct security_priv *psecuritypriv = &adapter->securitypriv;
33467 sint ret = _SUCCESS;
33468 #ifdef CONFIG_TDLS
33469 struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
33470 - struct sta_info *ptdls_sta = NULL;
33471 -#endif
33472 +#endif //CONFIG_TDLS
33473
33474 _func_enter_;
33475
33476 @@ -2554,40 +1848,40 @@ _func_enter_;
33477 case 0:
33478 _rtw_memcpy(pattrib->ra, pda, ETH_ALEN);
33479 _rtw_memcpy(pattrib->ta, psa, ETH_ALEN);
33480 - res= sta2sta_data_frame(adapter, precv_frame, &psta);
33481 + ret = sta2sta_data_frame(adapter, precv_frame, &psta);
33482 break;
33483
33484 case 1:
33485 _rtw_memcpy(pattrib->ra, pda, ETH_ALEN);
33486 _rtw_memcpy(pattrib->ta, pbssid, ETH_ALEN);
33487 - res= ap2sta_data_frame(adapter, precv_frame, &psta);
33488 + ret = ap2sta_data_frame(adapter, precv_frame, &psta);
33489 break;
33490
33491 case 2:
33492 _rtw_memcpy(pattrib->ra, pbssid, ETH_ALEN);
33493 _rtw_memcpy(pattrib->ta, psa, ETH_ALEN);
33494 - res= sta2ap_data_frame(adapter, precv_frame, &psta);
33495 + ret = sta2ap_data_frame(adapter, precv_frame, &psta);
33496 break;
33497
33498 case 3:
33499 _rtw_memcpy(pattrib->ra, GetAddr1Ptr(ptr), ETH_ALEN);
33500 _rtw_memcpy(pattrib->ta, GetAddr2Ptr(ptr), ETH_ALEN);
33501 - res=_FAIL;
33502 + ret =_FAIL;
33503 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" case 3\n"));
33504 break;
33505
33506 default:
33507 - res=_FAIL;
33508 + ret =_FAIL;
33509 break;
33510
33511 }
33512
33513 - if(res==_FAIL){
33514 - //RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,(" after to_fr_ds_chk; res = fail \n"));
33515 + if(ret ==_FAIL){
33516 #ifdef DBG_RX_DROP_FRAME
33517 - DBG_871X("DBG_RX_DROP_FRAME %s case:%d, res:%d\n", __FUNCTION__, pattrib->to_fr_ds, res);
33518 + DBG_871X("DBG_RX_DROP_FRAME %s case:%d, res:%d\n", __FUNCTION__, pattrib->to_fr_ds, ret);
33519 #endif
33520 - ret= res;
33521 + goto exit;
33522 + } else if (ret == RTW_RX_HANDLED) {
33523 goto exit;
33524 }
33525
33526 @@ -2604,11 +1898,12 @@ _func_enter_;
33527
33528
33529 pattrib->amsdu=0;
33530 + pattrib->ack_policy = 0;
33531 //parsing QC field
33532 if(pattrib->qos == 1)
33533 {
33534 pattrib->priority = GetPriority((ptr + 24));
33535 - pattrib->ack_policy =GetAckpolicy((ptr + 24));
33536 + pattrib->ack_policy = GetAckpolicy((ptr + 24));
33537 pattrib->amsdu = GetAMsdu((ptr + 24));
33538 pattrib->hdrlen = pattrib->to_fr_ds==3 ? 32 : 26;
33539
33540 @@ -2638,7 +1933,8 @@ _func_enter_;
33541 ret= _FAIL;
33542 goto exit;
33543 }
33544 -#ifdef CONFIG_TDLS
33545 +
33546 +#if 0
33547 if(psta->tdls_sta_state & TDLS_LINKED_STATE )
33548 {
33549 if(psta->dot118021XPrivacy==_AES_)
33550 @@ -2649,14 +1945,18 @@ _func_enter_;
33551 if(pattrib->privacy){
33552
33553 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("validate_recv_data_frame:pattrib->privacy=%x\n", pattrib->privacy));
33554 - 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)));
33555 + 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)));
33556
33557 #ifdef CONFIG_TDLS
33558 - if(ptdls_sta==NULL)
33559 -#endif
33560 - GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, IS_MCAST(pattrib->ra));
33561 + if((psta->tdls_sta_state & TDLS_LINKED_STATE) && (psta->dot118021XPrivacy==_AES_))
33562 + {
33563 + pattrib->encrypt=psta->dot118021XPrivacy;
33564 + }
33565 + else
33566 +#endif //CONFIG_TDLS
33567 + GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, IS_MCAST(pattrib->ra));
33568
33569 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("\n pattrib->encrypt=%d\n",pattrib->encrypt));
33570 + RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n pattrib->encrypt=%d\n",pattrib->encrypt));
33571
33572 SET_ICE_IV_LEN(pattrib->iv_len, pattrib->icv_len, pattrib->encrypt);
33573 }
33574 @@ -2665,15 +1965,137 @@ _func_enter_;
33575 pattrib->encrypt = 0;
33576 pattrib->iv_len = pattrib->icv_len = 0;
33577 }
33578 -
33579 -exit:
33580 -
33581 -_func_exit_;
33582 -
33583 - return ret;
33584 +
33585 +exit:
33586 +
33587 +_func_exit_;
33588 +
33589 + return ret;
33590 +}
33591 +
33592 +#ifdef CONFIG_IEEE80211W
33593 +static sint validate_80211w_mgmt(_adapter *adapter, union recv_frame *precv_frame)
33594 +{
33595 + struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
33596 + struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
33597 + u8 *ptr = precv_frame->u.hdr.rx_data;
33598 + u8 type;
33599 + u8 subtype;
33600 +
33601 + type = GetFrameType(ptr);
33602 + subtype = GetFrameSubType(ptr); //bit(7)~bit(2)
33603 +
33604 + //only support station mode
33605 + if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED)
33606 + && adapter->securitypriv.binstallBIPkey == _TRUE)
33607 + {
33608 + //unicast management frame decrypt
33609 + if(pattrib->privacy && !(IS_MCAST(GetAddr1Ptr(ptr))) &&
33610 + (subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC || subtype == WIFI_ACTION))
33611 + {
33612 + u8 *ppp, *mgmt_DATA;
33613 + u32 data_len=0;
33614 + ppp = GetAddr2Ptr(ptr);
33615 +
33616 + pattrib->bdecrypted = 0;
33617 + pattrib->encrypt = _AES_;
33618 + pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr);
33619 + //set iv and icv length
33620 + SET_ICE_IV_LEN(pattrib->iv_len, pattrib->icv_len, pattrib->encrypt);
33621 + _rtw_memcpy(pattrib->ra, GetAddr1Ptr(ptr), ETH_ALEN);
33622 + _rtw_memcpy(pattrib->ta, GetAddr2Ptr(ptr), ETH_ALEN);
33623 + //actual management data frame body
33624 + data_len = pattrib->pkt_len - pattrib->hdrlen - pattrib->iv_len - pattrib->icv_len;
33625 + mgmt_DATA = rtw_zmalloc(data_len);
33626 + if(mgmt_DATA == NULL)
33627 + {
33628 + DBG_871X("%s mgmt allocate fail !!!!!!!!!\n", __FUNCTION__);
33629 + goto validate_80211w_fail;
33630 + }
33631 + /*//dump the packet content before decrypt
33632 + {
33633 + int pp;
33634 + printk("pattrib->pktlen = %d =>", pattrib->pkt_len);
33635 + for(pp=0;pp< pattrib->pkt_len; pp++)
33636 + printk(" %02x ", ptr[pp]);
33637 + printk("\n");
33638 + }*/
33639 +
33640 + precv_frame = decryptor(adapter, precv_frame);
33641 + //save actual management data frame body
33642 + _rtw_memcpy(mgmt_DATA, ptr+pattrib->hdrlen+pattrib->iv_len, data_len);
33643 + //overwrite the iv field
33644 + _rtw_memcpy(ptr+pattrib->hdrlen, mgmt_DATA, data_len);
33645 + //remove the iv and icv length
33646 + pattrib->pkt_len = pattrib->pkt_len - pattrib->iv_len - pattrib->icv_len;
33647 + rtw_mfree(mgmt_DATA, data_len);
33648 + /*//print packet content after decryption
33649 + {
33650 + int pp;
33651 + printk("after decryption pattrib->pktlen = %d @@=>", pattrib->pkt_len);
33652 + for(pp=0;pp< pattrib->pkt_len; pp++)
33653 + printk(" %02x ", ptr[pp]);
33654 + printk("\n");
33655 + }*/
33656 + if(!precv_frame)
33657 + {
33658 + DBG_871X("%s mgmt descrypt fail !!!!!!!!!\n", __FUNCTION__);
33659 + goto validate_80211w_fail;
33660 + }
33661 + }
33662 + else if(IS_MCAST(GetAddr1Ptr(ptr)) &&
33663 + (subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC))
33664 + {
33665 + sint BIP_ret = _SUCCESS;
33666 + //verify BIP MME IE of broadcast/multicast de-auth/disassoc packet
33667 + BIP_ret = rtw_BIP_verify(adapter, (u8 * )precv_frame);
33668 + if(BIP_ret == _FAIL)
33669 + {
33670 + //DBG_871X("802.11w BIP verify fail\n");
33671 + goto validate_80211w_fail;
33672 + }
33673 + else if(BIP_ret == RTW_RX_HANDLED)
33674 + {
33675 + //DBG_871X("802.11w recv none protected packet\n");
33676 + //issue sa query request
33677 + issue_action_SA_Query(adapter, NULL, 0, 0);
33678 + goto validate_80211w_fail;
33679 + }
33680 + }//802.11w protect
33681 + else
33682 + {
33683 + if(subtype == WIFI_ACTION)
33684 + {
33685 + //according 802.11-2012 standard, these five types are not robust types
33686 + if( ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_PUBLIC &&
33687 + ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_HT &&
33688 + ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_UNPROTECTED_WNM &&
33689 + ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_SELF_PROTECTED &&
33690 + ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_P2P)
33691 + {
33692 + DBG_871X("action frame category=%d should robust\n", ptr[WLAN_HDR_A3_LEN]);
33693 + goto validate_80211w_fail;
33694 + }
33695 + }
33696 + else if(subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC)
33697 + {
33698 + DBG_871X("802.11w recv none protected packet\n");
33699 + //issue sa query request
33700 + issue_action_SA_Query(adapter, NULL, 0, 0);
33701 + goto validate_80211w_fail;
33702 + }
33703 + }
33704 + }
33705 + return _SUCCESS;
33706 +
33707 +validate_80211w_fail:
33708 + return _FAIL;
33709 +
33710 }
33711 +#endif //CONFIG_IEEE80211W
33712
33713 -static sint validate_recv_frame(_adapter *adapter, union recv_frame *precv_frame)
33714 +sint validate_recv_frame(_adapter *adapter, union recv_frame *precv_frame);
33715 +sint validate_recv_frame(_adapter *adapter, union recv_frame *precv_frame)
33716 {
33717 //shall check frame subtype, to / from ds, da, bssid
33718
33719 @@ -2700,7 +2122,9 @@ _func_enter_;
33720
33721 #ifdef CONFIG_FIND_BEST_CHANNEL
33722 if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
33723 - pmlmeext->channel_set[pmlmeext->sitesurvey_res.channel_idx].rx_count++;
33724 + int ch_set_idx = rtw_ch_set_search_ch(pmlmeext->channel_set, rtw_get_oper_ch(adapter));
33725 + if (ch_set_idx >= 0)
33726 + pmlmeext->channel_set[ch_set_idx].rx_count++;
33727 }
33728 #endif
33729
33730 @@ -2708,19 +2132,22 @@ _func_enter_;
33731 if(ptdlsinfo->ch_sensing==1 && ptdlsinfo->cur_channel !=0){
33732 ptdlsinfo->collect_pkt_num[ptdlsinfo->cur_channel-1]++;
33733 }
33734 -#endif
33735 +#endif //CONFIG_TDLS
33736
33737 -#if 0
33738 -DBG_871X("\n");
33739 -{
33740 - int i;
33741 - for(i=0; i<64;i=i+8)
33742 - DBG_871X("%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:", *(ptr+i),
33743 - *(ptr+i+1), *(ptr+i+2) ,*(ptr+i+3) ,*(ptr+i+4),*(ptr+i+5), *(ptr+i+6), *(ptr+i+7));
33744 +#ifdef RTK_DMP_PLATFORM
33745 + if ( 0 )
33746 + {
33747 + DBG_871X("++\n");
33748 + {
33749 + int i;
33750 + for(i=0; i<64;i=i+8)
33751 + DBG_871X("%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:", *(ptr+i),
33752 + *(ptr+i+1), *(ptr+i+2) ,*(ptr+i+3) ,*(ptr+i+4),*(ptr+i+5), *(ptr+i+6), *(ptr+i+7));
33753
33754 -}
33755 -DBG_871X("\n");
33756 -#endif
33757 + }
33758 + DBG_871X("--\n");
33759 + }
33760 +#endif //RTK_DMP_PLATFORM
33761
33762 //add version chk
33763 if(ver!=0){
33764 @@ -2780,6 +2207,14 @@ else if(pHalData->bDumpRxPkt ==3){
33765 switch (type)
33766 {
33767 case WIFI_MGT_TYPE: //mgnt
33768 +#ifdef CONFIG_IEEE80211W
33769 + if(validate_80211w_mgmt(adapter, precv_frame) == _FAIL)
33770 + {
33771 + retval = _FAIL;
33772 + break;
33773 + }
33774 +#endif //CONFIG_IEEE80211W
33775 +
33776 retval = validate_recv_mgnt_frame(adapter, precv_frame);
33777 if (retval == _FAIL)
33778 {
33779 @@ -2825,7 +2260,9 @@ _func_exit_;
33780
33781 //remove the wlanhdr and add the eth_hdr
33782 #if 1
33783 -static sint wlanhdr_to_ethhdr ( union recv_frame *precvframe)
33784 +
33785 +sint wlanhdr_to_ethhdr ( union recv_frame *precvframe);
33786 +sint wlanhdr_to_ethhdr ( union recv_frame *precvframe)
33787 {
33788 sint rmv_len;
33789 u16 eth_type, len;
33790 @@ -2868,6 +2305,10 @@ _func_enter_;
33791
33792 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n===pattrib->hdrlen: %x, pattrib->iv_len:%x ===\n\n", pattrib->hdrlen, pattrib->iv_len));
33793
33794 + _rtw_memcpy(&eth_type, ptr+rmv_len, 2);
33795 + eth_type= ntohs((unsigned short )eth_type); //pattrib->ether_type
33796 + pattrib->eth_type = eth_type;
33797 +
33798 if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE))
33799 {
33800 ptr += rmv_len ;
33801 @@ -3029,8 +2470,65 @@ _func_exit_;
33802 }
33803 #endif
33804
33805 +
33806 +#ifdef CONFIG_SDIO_HCI
33807 +#ifdef PLATFORM_LINUX
33808 +static void recvframe_expand_pkt(
33809 + PADAPTER padapter,
33810 + union recv_frame *prframe)
33811 +{
33812 + struct recv_frame_hdr *pfhdr;
33813 + _pkt *ppkt;
33814 + u8 shift_sz;
33815 + u32 alloc_sz;
33816 +
33817 +
33818 + pfhdr = &prframe->u.hdr;
33819 +
33820 + // 6 is for IP header 8 bytes alignment in QoS packet case.
33821 + if (pfhdr->attrib.qos)
33822 + shift_sz = 6;
33823 + else
33824 + shift_sz = 0;
33825 +
33826 + // for first fragment packet, need to allocate
33827 + // (1536 + RXDESC_SIZE + drvinfo_sz) to reassemble packet
33828 + // 8 is for skb->data 8 bytes alignment.
33829 +// alloc_sz = _RND(1536 + RXDESC_SIZE + pfhdr->attrib.drvinfosize + shift_sz + 8, 128);
33830 + alloc_sz = 1664; // round (1536 + 24 + 32 + shift_sz + 8) to 128 bytes alignment
33831 +
33832 + //3 1. alloc new skb
33833 + // prepare extra space for 4 bytes alignment
33834 + ppkt = rtw_skb_alloc(alloc_sz);
33835 +
33836 + if (!ppkt) return; // no way to expand
33837 +
33838 + //3 2. Prepare new skb to replace & release old skb
33839 + // force ppkt->data at 8-byte alignment address
33840 + skb_reserve(ppkt, 8 - ((SIZE_PTR)ppkt->data & 7));
33841 + // force ip_hdr at 8-byte alignment address according to shift_sz
33842 + skb_reserve(ppkt, shift_sz);
33843 +
33844 + // copy data to new pkt
33845 + _rtw_memcpy(skb_put(ppkt, pfhdr->len), pfhdr->rx_data, pfhdr->len);
33846 +
33847 + rtw_skb_free(pfhdr->pkt);
33848 +
33849 + // attach new pkt to recvframe
33850 + pfhdr->pkt = ppkt;
33851 + pfhdr->rx_head = ppkt->head;
33852 + pfhdr->rx_data = ppkt->data;
33853 + pfhdr->rx_tail = skb_tail_pointer(ppkt);
33854 + pfhdr->rx_end = skb_end_pointer(ppkt);
33855 +}
33856 +#else
33857 +#warning "recvframe_expand_pkt not implement, defrag may crash system"
33858 +#endif
33859 +#endif
33860 +
33861 //perform defrag
33862 -static union recv_frame * recvframe_defrag(_adapter *adapter,_queue *defrag_q)
33863 +union recv_frame * recvframe_defrag(_adapter *adapter,_queue *defrag_q);
33864 +union recv_frame * recvframe_defrag(_adapter *adapter,_queue *defrag_q)
33865 {
33866 _list *plist, *phead;
33867 u8 *data,wlanhdr_offset;
33868 @@ -3060,6 +2558,10 @@ _func_enter_;
33869 return NULL;
33870 }
33871
33872 +#ifdef CONFIG_SDIO_HCI
33873 + recvframe_expand_pkt(adapter, prframe);
33874 +#endif
33875 +
33876 curfragnum++;
33877
33878 plist= get_list_head(defrag_q);
33879 @@ -3117,38 +2619,44 @@ _func_exit_;
33880 return prframe;
33881 }
33882
33883 -
33884 //check if need to defrag, if needed queue the frame to defrag_q
33885 -static union recv_frame * recvframe_chk_defrag(_adapter *padapter,union recv_frame* precv_frame)
33886 +union recv_frame* recvframe_chk_defrag(PADAPTER padapter, union recv_frame *precv_frame)
33887 {
33888 u8 ismfrag;
33889 u8 fragnum;
33890 u8 *psta_addr;
33891 struct recv_frame_hdr *pfhdr;
33892 - struct sta_info * psta;
33893 - struct sta_priv *pstapriv ;
33894 - _list *phead;
33895 - union recv_frame* prtnframe=NULL;
33896 + struct sta_info *psta;
33897 + struct sta_priv *pstapriv;
33898 + _list *phead;
33899 + union recv_frame *prtnframe = NULL;
33900 _queue *pfree_recv_queue, *pdefrag_q;
33901
33902 _func_enter_;
33903
33904 pstapriv = &padapter->stapriv;
33905
33906 - pfhdr=&precv_frame->u.hdr;
33907 + pfhdr = &precv_frame->u.hdr;
33908
33909 - pfree_recv_queue=&padapter->recvpriv.free_recv_queue;
33910 + pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
33911
33912 //need to define struct of wlan header frame ctrl
33913 - ismfrag= pfhdr->attrib.mfrag;
33914 - fragnum=pfhdr->attrib.frag_num;
33915 + ismfrag = pfhdr->attrib.mfrag;
33916 + fragnum = pfhdr->attrib.frag_num;
33917
33918 - psta_addr=pfhdr->attrib.ta;
33919 - psta=rtw_get_stainfo(pstapriv, psta_addr);
33920 - if (psta==NULL)
33921 - pdefrag_q = NULL;
33922 + psta_addr = pfhdr->attrib.ta;
33923 + psta = rtw_get_stainfo(pstapriv, psta_addr);
33924 + if (psta == NULL)
33925 + {
33926 + u8 type = GetFrameType(pfhdr->rx_data);
33927 + if (type != WIFI_DATA_TYPE) {
33928 + psta = rtw_get_bcmc_stainfo(padapter);
33929 + pdefrag_q = &psta->sta_recvpriv.defrag_q;
33930 + } else
33931 + pdefrag_q = NULL;
33932 + }
33933 else
33934 - pdefrag_q=&psta->sta_recvpriv.defrag_q;
33935 + pdefrag_q = &psta->sta_recvpriv.defrag_q;
33936
33937 if ((ismfrag==0) && (fragnum==0))
33938 {
33939 @@ -3239,20 +2747,28 @@ _func_exit_;
33940
33941 }
33942
33943 +#define ENDIAN_FREE 1
33944
33945 -static int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
33946 +int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe);
33947 +int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
33948 {
33949 -#ifdef PLATFORM_LINUX //for amsdu TP improvement,Creator: Thomas
33950 +#if defined (PLATFORM_LINUX) || defined (PLATFORM_FREEBSD) //for amsdu TP improvement,Creator: Thomas
33951 int a_len, padding_len;
33952 u16 eth_type, nSubframe_Length;
33953 u8 nr_subframes, i;
33954 - unsigned char *data_ptr, *pdata;
33955 + unsigned char *pdata;
33956 struct rx_pkt_attrib *pattrib;
33957 +#ifndef PLATFORM_FREEBSD
33958 + unsigned char *data_ptr;
33959 _pkt *sub_skb,*subframes[MAX_SUBFRAME_COUNT];
33960 +#endif //PLATFORM_FREEBSD
33961 struct recv_priv *precvpriv = &padapter->recvpriv;
33962 _queue *pfree_recv_queue = &(precvpriv->free_recv_queue);
33963 int ret = _SUCCESS;
33964 -
33965 +#ifdef PLATFORM_FREEBSD
33966 + struct mbuf *sub_m=NULL, *subframes[MAX_SUBFRAME_COUNT];
33967 + u8 *ptr,offset;
33968 +#endif //PLATFORM_FREEBSD
33969 nr_subframes = 0;
33970
33971 pattrib = &prframe->u.hdr.attrib;
33972 @@ -3271,26 +2787,29 @@ static int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
33973 while(a_len > ETH_HLEN) {
33974
33975 /* Offset 12 denote 2 mac address */
33976 - //nSubframe_Length = *((u16*)(pdata + 12));
33977 - //==m==>change the length order
33978 - //nSubframe_Length = (nSubframe_Length>>8) + (nSubframe_Length<<8);
33979 +#ifdef ENDIAN_FREE
33980 //nSubframe_Length = ntohs(*((u16*)(pdata + 12)));
33981 nSubframe_Length = RTW_GET_BE16(pdata + 12);
33982 -
33983 +#else // ENDIAN_FREE
33984 + nSubframe_Length = *((u16*)(pdata + 12));
33985 + //==m==>change the length order
33986 + nSubframe_Length = (nSubframe_Length>>8) + (nSubframe_Length<<8);
33987 //ntohs(nSubframe_Length);
33988 +#endif // ENDIAN_FREE
33989
33990 if( a_len < (ETHERNET_HEADER_SIZE + nSubframe_Length) ) {
33991 - DBG_8192C("nRemain_Length is %d and nSubframe_Length is : %d\n",a_len,nSubframe_Length);
33992 + DBG_871X("nRemain_Length is %d and nSubframe_Length is : %d\n",a_len,nSubframe_Length);
33993 goto exit;
33994 }
33995
33996 +#ifndef PLATFORM_FREEBSD
33997 /* move the data point to data content */
33998 pdata += ETH_HLEN;
33999 a_len -= ETH_HLEN;
34000
34001 /* Allocate new skb for releasing to upper layer */
34002 #ifdef CONFIG_SKB_COPY
34003 - sub_skb = dev_alloc_skb(nSubframe_Length + 12);
34004 + sub_skb = rtw_skb_alloc(nSubframe_Length + 12);
34005 if(sub_skb)
34006 {
34007 skb_reserve(sub_skb, 12);
34008 @@ -3298,26 +2817,43 @@ static int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
34009 _rtw_memcpy(data_ptr, pdata, nSubframe_Length);
34010 }
34011 else
34012 - {
34013 #endif // CONFIG_SKB_COPY
34014 - sub_skb = skb_clone(prframe->u.hdr.pkt, GFP_ATOMIC);
34015 + {
34016 + sub_skb = rtw_skb_clone(prframe->u.hdr.pkt);
34017 if(sub_skb)
34018 {
34019 sub_skb->data = pdata;
34020 sub_skb->len = nSubframe_Length;
34021 - sub_skb->tail = sub_skb->data + nSubframe_Length;
34022 + skb_set_tail_pointer(sub_skb, nSubframe_Length);
34023 }
34024 else
34025 {
34026 - DBG_8192C("skb_clone() Fail!!! , nr_subframes = %d\n",nr_subframes);
34027 + DBG_871X("rtw_skb_clone() Fail!!! , nr_subframes = %d\n",nr_subframes);
34028 break;
34029 }
34030 }
34031
34032 +#else // PLATFORM_FREEBSD
34033 +
34034 + //PLATFORM_FREEBSD
34035 + //Allocate a mbuff,
34036 + //sub_m =m_devget(pdata, nSubframe_Length+12, 12, padapter->pifp,NULL);
34037 + sub_m =m_devget(pdata, nSubframe_Length+ETH_HLEN, ETHER_ALIGN, padapter->pifp,NULL);
34038 +
34039 + pdata += ETH_HLEN;
34040 + a_len -= ETH_HLEN;
34041 +#endif // PLATFORM_FREEBSD
34042 +
34043 +#ifndef PLATFORM_FREEBSD
34044 //sub_skb->dev = padapter->pnetdev;
34045 subframes[nr_subframes++] = sub_skb;
34046 +#else //PLATFORM_FREEBSD
34047 + //PLATFORM_FREEBSD
34048 + subframes[nr_subframes++] = sub_m;
34049 +#endif //PLATFORM_FREEBSD
34050 +
34051 if(nr_subframes >= MAX_SUBFRAME_COUNT) {
34052 - DBG_8192C("ParseSubframe(): Too many Subframes! Packets dropped!\n");
34053 + DBG_871X("ParseSubframe(): Too many Subframes! Packets dropped!\n");
34054 break;
34055 }
34056
34057 @@ -3338,11 +2874,15 @@ static int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
34058 }
34059
34060 for(i=0; i<nr_subframes; i++){
34061 +#ifndef PLATFORM_FREEBSD
34062 sub_skb = subframes[i];
34063 /* convert hdr + possible LLC headers into Ethernet header */
34064 - //eth_type = (sub_skb->data[6] << 8) | sub_skb->data[7];
34065 +#ifdef ENDIAN_FREE
34066 //eth_type = ntohs(*(u16*)&sub_skb->data[6]);
34067 eth_type = RTW_GET_BE16(&sub_skb->data[6]);
34068 +#else // ENDIAN_FREE
34069 + eth_type = (sub_skb->data[6] << 8) | sub_skb->data[7];
34070 +#endif // ENDIAN_FREE
34071 if (sub_skb->len >= 8 &&
34072 ((_rtw_memcmp(sub_skb->data, rtw_rfc1042_header, SNAP_SIZE) &&
34073 eth_type != ETH_P_AARP && eth_type != ETH_P_IPX) ||
34074 @@ -3378,7 +2918,7 @@ static int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
34075 #endif // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
34076
34077
34078 - if( br_port && (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE) )
34079 + if( br_port && (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE) )
34080 {
34081 int nat25_handle_frame(_adapter *priv, struct sk_buff *skb);
34082 if (nat25_handle_frame(padapter, sub_skb) == -1) {
34083 @@ -3389,7 +2929,7 @@ static int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
34084 #if 1
34085 // bypass this frame to upper layer!!
34086 #else
34087 - dev_kfree_skb_any(sub_skb);
34088 + rtw_skb_free(sub_skb);
34089 continue;
34090 #endif
34091 }
34092 @@ -3407,10 +2947,74 @@ static int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
34093 }
34094 #else /* !CONFIG_TCP_CSUM_OFFLOAD_RX */
34095 sub_skb->ip_summed = CHECKSUM_NONE;
34096 -#endif
34097 +#endif //CONFIG_TCP_CSUM_OFFLOAD_RX
34098 +
34099 + rtw_netif_rx(padapter->pnetdev, sub_skb);
34100 + }
34101 +#else //PLATFORM_FREEBSD
34102
34103 - netif_rx(sub_skb);
34104 + //PLATFORM_FREEBSD
34105 + sub_m = subframes[i];
34106 + ptr=mtod(sub_m, u8 *);
34107 + offset=ETH_HLEN;
34108 + /* convert hdr + possible LLC headers into Ethernet header */
34109 +#ifdef ENDIAN_FREE
34110 + eth_type = ntohs(*(u16*)&ptr[offset+6]);
34111 +#else // ENDIAN_FREE
34112 + eth_type = ( ptr[offset+6] << 8) | ptr[offset+7];
34113 +#endif // ENDIAN_FREE
34114 + if (sub_m->m_pkthdr.len >= ETH_HLEN+8 &&
34115 + ((_rtw_memcmp(ptr+ETH_HLEN, rtw_rfc1042_header, SNAP_SIZE) &&
34116 + eth_type != ETH_P_AARP && eth_type != ETH_P_IPX) ||
34117 + _rtw_memcmp(ptr+ETH_HLEN, rtw_bridge_tunnel_header, SNAP_SIZE) )) {
34118 + /* remove RFC1042 or Bridge-Tunnel encapsulation and replace EtherType */
34119 + offset+=SNAP_SIZE;
34120 + _rtw_memcpy(&ptr[offset-ETH_ALEN], pattrib->src, ETH_ALEN);
34121 + offset-=ETH_ALEN;
34122 + _rtw_memcpy(&ptr[offset-ETH_ALEN], pattrib->dst, ETH_ALEN);
34123 + offset-=ETH_ALEN;
34124 + } else {
34125 + u16 len;
34126 + /* Leave Ethernet header part of hdr and full payload */
34127 + len = htons(sub_m->m_pkthdr.len-offset);
34128 + _rtw_memcpy(&ptr[offset- 2], &len, 2);
34129 + offset-=2;
34130 + _rtw_memcpy(&ptr[offset-ETH_ALEN], pattrib->src, ETH_ALEN);
34131 + offset-=ETH_ALEN;
34132 + _rtw_memcpy(&ptr[offset-ETH_ALEN], pattrib->dst, ETH_ALEN);
34133 + offset-=ETH_ALEN;
34134 }
34135 +
34136 + m_adj(sub_m,offset);
34137 +
34138 + /* Indicat the packets to upper layer */
34139 + if (sub_m) {
34140 +
34141 +#if 0
34142 +#ifdef CONFIG_TCP_CSUM_OFFLOAD_RX
34143 + if ( (pattrib->tcpchk_valid == 1) && (pattrib->tcp_chkrpt == 1) ) {
34144 + sub_skb->ip_summed = CHECKSUM_UNNECESSARY;
34145 + } else {
34146 + sub_skb->ip_summed = CHECKSUM_NONE;
34147 + }
34148 +#else /* !CONFIG_TCP_CSUM_OFFLOAD_RX */
34149 + sub_skb->ip_summed = CHECKSUM_NONE;
34150 +#endif //CONFIG_TCP_CSUM_OFFLOAD_RX
34151 +#endif //0
34152 +
34153 + if ( ((u32)(mtod(sub_m, caddr_t) + 14) % 4) != 0)
34154 + printf("%s()-%d: mtod(sub_m) = %p\n", __FUNCTION__, __LINE__, mtod(sub_m, caddr_t));
34155 +#ifdef CONFIG_RX_INDICATE_QUEUE
34156 + IF_ENQUEUE(&precvpriv->rx_indicate_queue, sub_m);
34157 + if (_IF_QLEN(&precvpriv->rx_indicate_queue) <= 1) {
34158 + taskqueue_enqueue(taskqueue_thread, &precvpriv->rx_indicate_tasklet);
34159 + }
34160 +#else // CONFIG_RX_INDICATE_QUEUE
34161 + (*padapter->pifp->if_input)(padapter->pifp, sub_m);
34162 +#endif // CONFIG_RX_INDICATE_QUEUE
34163 + }
34164 +
34165 +#endif //PLATFORM_FREEBSD
34166 }
34167
34168 exit:
34169 @@ -3419,8 +3023,10 @@ exit:
34170 rtw_free_recvframe(prframe, pfree_recv_queue);//free this recv_frame
34171
34172 return ret;
34173 -#else
34174 +#else // || defined (PLATFORM_LINUX) || defined (PLATFORM_FREEBSD)
34175 +#ifdef PLATFORM_WINDOWS
34176 _irqL irql;
34177 +#endif //PLATFORM_WINDOWS
34178 unsigned char *ptr, *pdata, *pbuf, *psnap_type;
34179 union recv_frame *pnrframe, *pnrframe_new;
34180 int a_len, mv_len, padding_len;
34181 @@ -3433,7 +3039,7 @@ exit:
34182 int ret = _SUCCESS;
34183 #ifdef PLATFORM_WINDOWS
34184 struct recv_buf *precvbuf = prframe->u.hdr.precvbuf;
34185 -#endif
34186 +#endif //PLATFORM_WINDOWS
34187 a_len = prframe->u.hdr.len - prframe->u.hdr.attrib.hdrlen;
34188
34189 recvframe_pull(prframe, prframe->u.hdr.attrib.hdrlen);
34190 @@ -3557,7 +3163,7 @@ exit:
34191 NDIS_PER_PACKET_INFO_FROM_PACKET(pnrframe->u.hdr.pkt, Ieee8021QInfo) = VlanPriInfo.Value;
34192
34193 }
34194 -#endif
34195 +#endif //PLATFORM_OS_XP
34196
34197 pbuf = recvframe_pull(pnrframe, (mv_len-sizeof(struct ethhdr)));
34198
34199 @@ -3584,14 +3190,11 @@ exit:
34200
34201 _rtw_init_listhead(&pnrframe_new->u.hdr.list);
34202
34203 - #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
34204 - pskb_copy = dev_alloc_skb(copy_len+64);
34205 - #else
34206 - pskb_copy = netdev_alloc_skb(padapter->pnetdev, copy_len + 64);
34207 - #endif
34208 + pskb_copy = rtw_skb_alloc(copy_len+64);
34209 +
34210 if(pskb_copy==NULL)
34211 {
34212 - DBG_8192C("amsdu_to_msdu:can not all(ocate memory for skb copy\n");
34213 + DBG_871X("amsdu_to_msdu:can not all(ocate memory for skb copy\n");
34214 }
34215
34216 pnrframe_new->u.hdr.pkt = pskb_copy;
34217 @@ -3614,7 +3217,7 @@ exit:
34218 }
34219 else
34220 {
34221 - DBG_8192C("amsdu_to_msdu:can not allocate memory for pnrframe_new\n");
34222 + DBG_871X("amsdu_to_msdu:can not allocate memory for pnrframe_new\n");
34223 }
34224
34225 }
34226 @@ -3633,7 +3236,7 @@ exit:
34227
34228 }
34229
34230 -#else
34231 +#else // 0
34232
34233 //padding_len = (4) - ((type_len + ETH_HLEN)&(4-1));
34234
34235 @@ -3653,7 +3256,9 @@ exit:
34236 //pnrframe_new->u.hdr.precvbuf = precvbuf;//precvbuf is assigned before call rtw_init_recvframe()
34237 //rtw_init_recvframe(pnrframe_new, precvpriv);
34238 {
34239 +#ifdef PLATFORM_LINUX
34240 _pkt *pskb = pnrframe->u.hdr.pkt;
34241 +#endif //PLATFORM_LINUX
34242 _rtw_init_listhead(&pnrframe_new->u.hdr.list);
34243
34244 pnrframe_new->u.hdr.len=0;
34245 @@ -3661,9 +3266,9 @@ exit:
34246 #ifdef PLATFORM_LINUX
34247 if(pskb)
34248 {
34249 - pnrframe_new->u.hdr.pkt = skb_clone(pskb, GFP_ATOMIC);
34250 + pnrframe_new->u.hdr.pkt = rtw_skb_clone(pskb);
34251 }
34252 -#endif
34253 +#endif //PLATFORM_LINUX
34254
34255 }
34256
34257 @@ -3676,7 +3281,7 @@ exit:
34258 _enter_critical_bh(&precvbuf->recvbuf_lock, &irql);
34259 precvbuf->ref_cnt++;
34260 _exit_critical_bh(&precvbuf->recvbuf_lock, &irql);
34261 -#endif
34262 +#endif //PLATFORM_WINDOWS
34263
34264 }
34265 else
34266 @@ -3703,7 +3308,7 @@ exit:
34267 }
34268
34269
34270 -#endif
34271 +#endif // end defined (PLATFORM_LINUX) || defined (PLATFORM_FREEBSD)
34272
34273 }while(pnrframe);
34274
34275 @@ -3713,8 +3318,8 @@ exit:
34276 #endif
34277 }
34278
34279 -
34280 -static int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_num)
34281 +int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_num);
34282 +int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_num)
34283 {
34284 u8 wsize = preorder_ctrl->wsize_b;
34285 u16 wend = (preorder_ctrl->indicate_seq + wsize -1) & 0xFFF;//% 4096;
34286 @@ -3740,7 +3345,7 @@ static int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_n
34287 //DbgPrint("CheckRxTsIndicateSeq(): Packet Drop! IndicateSeq: %d, NewSeq: %d\n", precvpriv->indicate_seq, seq_num);
34288
34289 #ifdef DBG_RX_DROP_FRAME
34290 - DBG_871X("DBG_RX_DROP_FRAME %s IndicateSeq: %d, NewSeq: %d\n", __FUNCTION__,
34291 + DBG_871X("%s IndicateSeq: %d > NewSeq: %d\n", __FUNCTION__,
34292 preorder_ctrl->indicate_seq, seq_num);
34293 #endif
34294
34295 @@ -3783,8 +3388,8 @@ static int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_n
34296 return _TRUE;
34297 }
34298
34299 -
34300 -static int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, union recv_frame *prframe)
34301 +int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, union recv_frame *prframe);
34302 +int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, union recv_frame *prframe)
34303 {
34304 struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
34305 _queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
34306 @@ -3845,10 +3450,10 @@ static int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, un
34307
34308 }
34309
34310 -
34311 -static int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced)
34312 +int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced);
34313 +int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced)
34314 {
34315 - _irqL irql;
34316 + //_irqL irql;
34317 //u8 bcancelled;
34318 _list *phead, *plist;
34319 union recv_frame *prframe;
34320 @@ -3894,7 +3499,7 @@ static int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ct
34321 // Prepare indication list and indication.
34322 // Check if there is any packet need indicate.
34323 while(!rtw_is_list_empty(phead))
34324 - {
34325 + {
34326
34327 prframe = LIST_CONTAINOR(plist, union recv_frame, u);
34328 pattrib = &prframe->u.hdr.attrib;
34329 @@ -3935,7 +3540,7 @@ static int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ct
34330 //PlatformCancelTimer(Adapter, &pTS->RxPktPendingTimer);
34331 if(bforced!=_TRUE)
34332 {
34333 - //DBG_8192C("_cancel_timer(&preorder_ctrl->reordering_ctrl_timer, &bcancelled);\n");
34334 + //DBG_871X("_cancel_timer(&preorder_ctrl->reordering_ctrl_timer, &bcancelled);\n");
34335 _cancel_timer(&preorder_ctrl->reordering_ctrl_timer, &bcancelled);
34336 }
34337 }
34338 @@ -3952,14 +3557,14 @@ static int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ct
34339 //DbgPrint("recv_indicatepkts_in_order, indicate_seq=%d, seq_num=%d\n", precvpriv->indicate_seq, pattrib->seq_num);
34340 if(!pattrib->amsdu)
34341 {
34342 - //DBG_8192C("recv_indicatepkts_in_order, amsdu!=1, indicate_seq=%d, seq_num=%d\n", preorder_ctrl->indicate_seq, pattrib->seq_num);
34343 + //DBG_871X("recv_indicatepkts_in_order, amsdu!=1, indicate_seq=%d, seq_num=%d\n", preorder_ctrl->indicate_seq, pattrib->seq_num);
34344
34345 if ((padapter->bDriverStopped == _FALSE) &&
34346 (padapter->bSurpriseRemoved == _FALSE))
34347 - {
34348 -
34349 - rtw_recv_indicatepkt(padapter, prframe); //indicate this recv_frame
34350 + {
34351
34352 + rtw_recv_indicatepkt(padapter, prframe);//indicate this recv_frame
34353 +
34354 }
34355 }
34356 else if(pattrib->amsdu==1)
34357 @@ -3999,7 +3604,7 @@ static int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ct
34358 // Set new pending timer.
34359 //pTS->RxIndicateState = RXTS_INDICATE_REORDER;
34360 //PlatformSetTimer(Adapter, &pTS->RxPktPendingTimer, pHTInfo->RxReorderPendingTime);
34361 - //DBG_8192C("_set_timer(&preorder_ctrl->reordering_ctrl_timer, REORDER_WAIT_TIME)\n");
34362 + //DBG_871X("_set_timer(&preorder_ctrl->reordering_ctrl_timer, REORDER_WAIT_TIME)\n");
34363 _set_timer(&preorder_ctrl->reordering_ctrl_timer, REORDER_WAIT_TIME);
34364 }
34365 else
34366 @@ -4014,12 +3619,11 @@ static int recv_indicatepkts_in_order(_adapter *padapter, struct recv_reorder_ct
34367
34368 }
34369
34370 -
34371 -static int recv_indicatepkt_reorder(_adapter *padapter, union recv_frame *prframe)
34372 +int recv_indicatepkt_reorder(_adapter *padapter, union recv_frame *prframe);
34373 +int recv_indicatepkt_reorder(_adapter *padapter, union recv_frame *prframe)
34374 {
34375 _irqL irql;
34376 int retval = _SUCCESS;
34377 - struct recv_priv *precvpriv = &padapter->recvpriv;
34378 struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
34379 struct recv_reorder_ctrl *preorder_ctrl = prframe->u.hdr.preorder_ctrl;
34380 _queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
34381 @@ -4029,7 +3633,9 @@ static int recv_indicatepkt_reorder(_adapter *padapter, union recv_frame *prfram
34382 //s1.
34383 wlanhdr_to_ethhdr(prframe);
34384
34385 - if(pattrib->qos !=1 /*|| pattrib->priority!=0 || IS_MCAST(pattrib->ra)*/)
34386 + //if ((pattrib->qos!=1) /*|| pattrib->priority!=0 || IS_MCAST(pattrib->ra)*/
34387 + // || (pattrib->eth_type==0x0806) || (pattrib->ack_policy!=0))
34388 + if (pattrib->qos!=1)
34389 {
34390 if ((padapter->bDriverStopped == _FALSE) &&
34391 (padapter->bSurpriseRemoved == _FALSE))
34392 @@ -4126,7 +3732,15 @@ static int recv_indicatepkt_reorder(_adapter *padapter, union recv_frame *prfram
34393 #ifdef DBG_RX_DROP_FRAME
34394 DBG_871X("DBG_RX_DROP_FRAME %s check_indicate_seq fail\n", __FUNCTION__);
34395 #endif
34396 +#if 0
34397 + rtw_recv_indicatepkt(padapter, prframe);
34398 +
34399 + _exit_critical_bh(&ppending_recvframe_queue->lock, &irql);
34400 +
34401 + goto _success_exit;
34402 +#else
34403 goto _err_exit;
34404 +#endif
34405 }
34406
34407
34408 @@ -4166,6 +3780,8 @@ static int recv_indicatepkt_reorder(_adapter *padapter, union recv_frame *prfram
34409 }
34410
34411
34412 +_success_exit:
34413 +
34414 return _SUCCESS;
34415
34416 _err_exit:
34417 @@ -4189,7 +3805,7 @@ void rtw_reordering_ctrl_timeout_handler(void *pcontext)
34418 return;
34419 }
34420
34421 - //DBG_8192C("+rtw_reordering_ctrl_timeout_handler()=>\n");
34422 + //DBG_871X("+rtw_reordering_ctrl_timeout_handler()=>\n");
34423
34424 _enter_critical_bh(&ppending_recvframe_queue->lock, &irql);
34425
34426 @@ -4202,19 +3818,29 @@ void rtw_reordering_ctrl_timeout_handler(void *pcontext)
34427
34428 }
34429
34430 -
34431 -static int process_recv_indicatepkts(_adapter *padapter, union recv_frame *prframe)
34432 +int process_recv_indicatepkts(_adapter *padapter, union recv_frame *prframe);
34433 +int process_recv_indicatepkts(_adapter *padapter, union recv_frame *prframe)
34434 {
34435 int retval = _SUCCESS;
34436 - struct recv_priv *precvpriv = &padapter->recvpriv;
34437 - struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
34438 + //struct recv_priv *precvpriv = &padapter->recvpriv;
34439 + //struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
34440 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
34441 +#ifdef CONFIG_TDLS
34442 + struct sta_info *psta = prframe->u.hdr.psta;
34443 +#endif //CONFIG_TDLS
34444
34445 #ifdef CONFIG_80211N_HT
34446
34447 struct ht_priv *phtpriv = &pmlmepriv->htpriv;
34448
34449 - if(phtpriv->ht_option==_TRUE) //B/G/N Mode
34450 +#ifdef CONFIG_TDLS
34451 + if( (phtpriv->ht_option==_TRUE) ||
34452 + ((psta->tdls_sta_state & TDLS_LINKED_STATE) &&
34453 + (psta->htpriv.ht_option==_TRUE) &&
34454 + (psta->htpriv.ampdu_enable==_TRUE))) //B/G/N Mode
34455 +#else
34456 + if(phtpriv->ht_option==_TRUE) //B/G/N Mode
34457 +#endif //CONFIG_TDLS
34458 {
34459 //prframe->u.hdr.preorder_ctrl = &precvpriv->recvreorder_ctrl[pattrib->priority];
34460
34461 @@ -4267,24 +3893,17 @@ static int process_recv_indicatepkts(_adapter *padapter, union recv_frame *prfra
34462 return retval;
34463
34464 }
34465 -
34466
34467 -static int recv_func(_adapter *padapter, void *pcontext)
34468 +int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe)
34469 {
34470 - struct rx_pkt_attrib *pattrib;
34471 - union recv_frame *prframe, *orig_prframe;
34472 - int retval = _SUCCESS;
34473 - _queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
34474 + int ret = _SUCCESS;
34475 + struct rx_pkt_attrib *pattrib = &rframe->u.hdr.attrib;
34476 struct recv_priv *precvpriv = &padapter->recvpriv;
34477 + _queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
34478 +
34479 +#ifdef CONFIG_MP_INCLUDED
34480 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
34481 -#ifdef CONFIG_TDLS
34482 - u8 *psnap_type, *pcategory;
34483 -#endif
34484 -
34485 - prframe = (union recv_frame *)pcontext;
34486 - orig_prframe = prframe;
34487 -
34488 - pattrib = &prframe->u.hdr.attrib;
34489 +#endif //CONFIG_MP_INCLUDED
34490
34491 #ifdef CONFIG_MP_INCLUDED
34492 if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE))//&&(padapter->mppriv.check_mp_pkt == 0))
34493 @@ -4296,21 +3915,44 @@ static int recv_func(_adapter *padapter, void *pcontext)
34494
34495 if (check_fwstate(pmlmepriv, WIFI_MP_LPBK_STATE) == _FALSE) {
34496 RT_TRACE(_module_rtl871x_recv_c_, _drv_alert_, ("MP - Not in loopback mode , drop pkt \n"));
34497 - retval = _FAIL;
34498 - rtw_free_recvframe(orig_prframe, pfree_recv_queue);//free this recv_frame
34499 - goto _exit_recv_func;
34500 + ret = _FAIL;
34501 + rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
34502 + goto exit;
34503 }
34504 }
34505 #endif
34506
34507 //check the frame crtl field and decache
34508 - retval = validate_recv_frame(padapter, prframe);
34509 - if (retval != _SUCCESS)
34510 + ret = validate_recv_frame(padapter, rframe);
34511 + if (ret != _SUCCESS)
34512 {
34513 RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("recv_func: validate_recv_frame fail! drop pkt\n"));
34514 - rtw_free_recvframe(orig_prframe, pfree_recv_queue);//free this recv_frame
34515 - goto _exit_recv_func;
34516 + rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
34517 + goto exit;
34518 }
34519 +
34520 +exit:
34521 + return ret;
34522 +}
34523 +
34524 +int recv_func_posthandle(_adapter *padapter, union recv_frame *prframe)
34525 +{
34526 + int ret = _SUCCESS;
34527 + union recv_frame *orig_prframe = prframe;
34528 + struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
34529 + struct recv_priv *precvpriv = &padapter->recvpriv;
34530 + _queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
34531 +
34532 +#ifdef CONFIG_MP_INCLUDED
34533 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
34534 +#endif //CONFIG_MP_INCLUDED
34535 +
34536 +#ifdef CONFIG_TDLS
34537 + u8 *psnap_type, *pcategory;
34538 + struct sta_info *ptdls_sta = NULL;
34539 +#endif //CONFIG_TDLS
34540 +
34541 +
34542 // DATA FRAME
34543 rtw_led_control(padapter, LED_CTL_RX);
34544
34545 @@ -4320,22 +3962,38 @@ static int recv_func(_adapter *padapter, void *pcontext)
34546 #ifdef DBG_RX_DROP_FRAME
34547 DBG_871X("DBG_RX_DROP_FRAME %s decryptor: drop pkt\n", __FUNCTION__);
34548 #endif
34549 - retval = _FAIL;
34550 + ret = _FAIL;
34551 goto _recv_data_drop;
34552 }
34553
34554 +#if 0
34555 + if ( padapter->adapter_type == PRIMARY_ADAPTER )
34556 + {
34557 + DBG_871X("+++\n");
34558 + {
34559 + int i;
34560 + u8 *ptr = get_recvframe_data(prframe);
34561 + for(i=0; i<140;i=i+8)
34562 + DBG_871X("%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X:", *(ptr+i),
34563 + *(ptr+i+1), *(ptr+i+2) ,*(ptr+i+3) ,*(ptr+i+4),*(ptr+i+5), *(ptr+i+6), *(ptr+i+7));
34564 +
34565 + }
34566 + DBG_871X("---\n");
34567 + }
34568 +#endif //RTK_DMP_PLATFORM
34569 +
34570 #ifdef CONFIG_TDLS
34571 //check TDLS frame
34572 psnap_type = get_recvframe_data(orig_prframe);
34573 psnap_type+=pattrib->hdrlen + pattrib->iv_len+SNAP_SIZE;
34574 - //[+2]: ether_type, [+1]: payload type
34575 - pcategory = psnap_type+2+1;
34576 + pcategory = psnap_type + ETH_TYPE_LEN + PAYLOAD_TYPE_LEN;
34577
34578 - if((_rtw_memcmp(psnap_type, SNAP_ETH_TYPE_TDLS, 2))&&((*pcategory==0x0c))){
34579 - retval = OnTDLS(padapter, prframe); //all of functions will return _FAIL
34580 - goto _recv_data_drop;
34581 + if((_rtw_memcmp(psnap_type, SNAP_ETH_TYPE_TDLS, ETH_TYPE_LEN)) &&
34582 + ((*pcategory==RTW_WLAN_CATEGORY_TDLS) || (*pcategory==RTW_WLAN_CATEGORY_P2P))){
34583 + ret = OnTDLS(padapter, prframe); //all of functions will return _FAIL
34584 + goto _exit_recv_func;
34585 }
34586 -#endif
34587 +#endif //CONFIG_TDLS
34588
34589 prframe = recvframe_chk_defrag(padapter, prframe);
34590 if(prframe==NULL) {
34591 @@ -4352,16 +4010,22 @@ static int recv_func(_adapter *padapter, void *pcontext)
34592 #ifdef DBG_RX_DROP_FRAME
34593 DBG_871X("DBG_RX_DROP_FRAME %s portctrl: drop pkt\n", __FUNCTION__);
34594 #endif
34595 - retval = _FAIL;
34596 + ret = _FAIL;
34597 goto _recv_data_drop;
34598 }
34599
34600 +#ifdef CONFIG_TDLS
34601 + if(padapter->tdlsinfo.setup_state == TDLS_LINKED_STATE)
34602 + ptdls_sta = rtw_get_stainfo(&padapter->stapriv, pattrib->src);
34603 + count_rx_stats(padapter, prframe, ptdls_sta);
34604 +#else
34605 count_rx_stats(padapter, prframe, NULL);
34606 +#endif //CONFIG_TDLS
34607
34608 #ifdef CONFIG_80211N_HT
34609
34610 - retval = process_recv_indicatepkts(padapter, prframe);
34611 - if (retval != _SUCCESS)
34612 + ret = process_recv_indicatepkts(padapter, prframe);
34613 + if (ret != _SUCCESS)
34614 {
34615 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recv_func: process_recv_indicatepkts fail! \n"));
34616 #ifdef DBG_RX_DROP_FRAME
34617 @@ -4371,12 +4035,12 @@ static int recv_func(_adapter *padapter, void *pcontext)
34618 goto _recv_data_drop;
34619 }
34620
34621 -#else
34622 +#else // CONFIG_80211N_HT
34623
34624 if (!pattrib->amsdu)
34625 {
34626 - retval = wlanhdr_to_ethhdr (prframe);
34627 - if (retval != _SUCCESS)
34628 + ret = wlanhdr_to_ethhdr (prframe);
34629 + if (ret != _SUCCESS)
34630 {
34631 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("wlanhdr_to_ethhdr: drop pkt \n"));
34632 #ifdef DBG_RX_DROP_FRAME
34633 @@ -4390,8 +4054,8 @@ static int recv_func(_adapter *padapter, void *pcontext)
34634 {
34635 RT_TRACE(_module_rtl871x_recv_c_, _drv_alert_, ("@@@@ recv_func: recv_func rtw_recv_indicatepkt\n" ));
34636 //indicate this recv_frame
34637 - retval = rtw_recv_indicatepkt(padapter, prframe);
34638 - if (retval != _SUCCESS)
34639 + ret = rtw_recv_indicatepkt(padapter, prframe);
34640 + if (ret != _SUCCESS)
34641 {
34642 #ifdef DBG_RX_DROP_FRAME
34643 DBG_871X("DBG_RX_DROP_FRAME %s rtw_recv_indicatepkt fail!\n", __FUNCTION__);
34644 @@ -4407,7 +4071,7 @@ static int recv_func(_adapter *padapter, void *pcontext)
34645 DBG_871X("DBG_RX_DROP_FRAME %s ecv_func:bDriverStopped(%d) OR bSurpriseRemoved(%d)\n", __FUNCTION__,
34646 padapter->bDriverStopped, padapter->bSurpriseRemoved);
34647 #endif
34648 - retval = _FAIL;
34649 + ret = _FAIL;
34650 rtw_free_recvframe(orig_prframe, pfree_recv_queue); //free this recv_frame
34651 }
34652
34653 @@ -4415,8 +4079,8 @@ static int recv_func(_adapter *padapter, void *pcontext)
34654 else if(pattrib->amsdu==1)
34655 {
34656
34657 - retval = amsdu_to_msdu(padapter, prframe);
34658 - if(retval != _SUCCESS)
34659 + ret = amsdu_to_msdu(padapter, prframe);
34660 + if(ret != _SUCCESS)
34661 {
34662 #ifdef DBG_RX_DROP_FRAME
34663 DBG_871X("DBG_RX_DROP_FRAME %s amsdu_to_msdu fail\n", __FUNCTION__);
34664 @@ -4430,14 +4094,60 @@ static int recv_func(_adapter *padapter, void *pcontext)
34665 #ifdef DBG_RX_DROP_FRAME
34666 DBG_871X("DBG_RX_DROP_FRAME %s what is this condition??\n", __FUNCTION__);
34667 #endif
34668 + goto _recv_data_drop;
34669 }
34670 -#endif
34671 +#endif // CONFIG_80211N_HT
34672 +
34673 +_exit_recv_func:
34674 + return ret;
34675 +
34676 _recv_data_drop:
34677 precvpriv->rx_drop++;
34678 + return ret;
34679 +}
34680
34681 -_exit_recv_func:
34682
34683 - return retval;
34684 +int recv_func(_adapter *padapter, union recv_frame *rframe);
34685 +int recv_func(_adapter *padapter, union recv_frame *rframe)
34686 +{
34687 + int ret;
34688 + struct rx_pkt_attrib *prxattrib = &rframe->u.hdr.attrib;
34689 + struct recv_priv *recvpriv = &padapter->recvpriv;
34690 + struct security_priv *psecuritypriv=&padapter->securitypriv;
34691 + struct mlme_priv *mlmepriv = &padapter->mlmepriv;
34692 +
34693 + /* check if need to handle uc_swdec_pending_queue*/
34694 + if (check_fwstate(mlmepriv, WIFI_STATION_STATE) && psecuritypriv->busetkipkey)
34695 + {
34696 + union recv_frame *pending_frame;
34697 + _irqL irqL;
34698 +
34699 + while((pending_frame=rtw_alloc_recvframe(&padapter->recvpriv.uc_swdec_pending_queue))) {
34700 + if (recv_func_posthandle(padapter, pending_frame) == _SUCCESS)
34701 + DBG_871X("%s: dequeue uc_swdec_pending_queue\n", __func__);
34702 + }
34703 + }
34704 +
34705 + ret = recv_func_prehandle(padapter, rframe);
34706 +
34707 + if(ret == _SUCCESS) {
34708 +
34709 + /* check if need to enqueue into uc_swdec_pending_queue*/
34710 + if (check_fwstate(mlmepriv, WIFI_STATION_STATE) &&
34711 + !IS_MCAST(prxattrib->ra) && prxattrib->encrypt>0 &&
34712 + (prxattrib->bdecrypted == 0 ||psecuritypriv->sw_decrypt == _TRUE) &&
34713 + !is_wep_enc(psecuritypriv->dot11PrivacyAlgrthm) &&
34714 + !psecuritypriv->busetkipkey) {
34715 + rtw_enqueue_recvframe(rframe, &padapter->recvpriv.uc_swdec_pending_queue);
34716 + DBG_871X("%s: no key, enqueue uc_swdec_pending_queue\n", __func__);
34717 + goto exit;
34718 + }
34719 +
34720 + ret = recv_func_posthandle(padapter, rframe);
34721 + }
34722 +
34723 +exit:
34724 + return ret;
34725 }
34726
34727
34728 @@ -4445,59 +4155,23 @@ s32 rtw_recv_entry(union recv_frame *precvframe)
34729 {
34730 _adapter *padapter;
34731 struct recv_priv *precvpriv;
34732 - //struct mlme_priv *pmlmepriv ;
34733 - //struct dvobj_priv *pdev;
34734 - //u8 *phead, *pdata, *ptail,*pend;
34735 -
34736 - //_queue *pfree_recv_queue, *ppending_recv_queue;
34737 - //u8 blk_mode = _FALSE;
34738 s32 ret=_SUCCESS;
34739 - //struct intf_hdl * pintfhdl;
34740
34741 _func_enter_;
34742
34743 // RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("+rtw_recv_entry\n"));
34744
34745 padapter = precvframe->u.hdr.adapter;
34746 - //pintfhdl = &padapter->iopriv.intf;
34747
34748 - //pdev=&padapter->dvobjpriv;
34749 - //pmlmepriv = &padapter->mlmepriv;
34750 precvpriv = &padapter->recvpriv;
34751 - //pfree_recv_queue = &precvpriv->free_recv_queue;
34752 - //ppending_recv_queue = &precvpriv->recv_pending_queue;
34753 -
34754 - //phead = precvframe->u.hdr.rx_head;
34755 - //pdata = precvframe->u.hdr.rx_data;
34756 - //ptail = precvframe->u.hdr.rx_tail;
34757 - //pend = precvframe->u.hdr.rx_end;
34758
34759 - //rtw_led_control(padapter, LED_CTL_RX);
34760 -
34761 -#ifdef CONFIG_SDIO_HCI
34762 - if (precvpriv->free_recvframe_cnt <= 1)
34763 - goto _recv_entry_drop;
34764 -#endif
34765
34766 -#ifdef CONFIG_RECV_THREAD_MODE
34767 - if (_rtw_queue_empty(ppending_recv_queue) == _TRUE)
34768 - {
34769 - //enqueue_recvframe_usb(precvframe, ppending_recv_queue);//enqueue to recv_pending_queue
34770 - rtw_enqueue_recvframe(precvframe, ppending_recv_queue);
34771 - _rtw_up_sema(&precvpriv->recv_sema);
34772 - }
34773 - else
34774 - {
34775 - //enqueue_recvframe_usb(precvframe, ppending_recv_queue);//enqueue to recv_pending_queue
34776 - rtw_enqueue_recvframe(precvframe, ppending_recv_queue);
34777 - }
34778 -#else
34779 if ((ret = recv_func(padapter, precvframe)) == _FAIL)
34780 {
34781 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("rtw_recv_entry: recv_func return fail!!!\n"));
34782 goto _recv_entry_drop;
34783 }
34784 -#endif
34785 +
34786
34787 precvpriv->rx_pkts++;
34788
34789 @@ -4507,9 +4181,6 @@ _func_exit_;
34790
34791 _recv_entry_drop:
34792
34793 -
34794 - //precvpriv->rx_drop++;
34795 -
34796 #ifdef CONFIG_MP_INCLUDED
34797 padapter->mppriv.rx_pktloss = precvpriv->rx_drop;
34798 #endif
34799 @@ -4541,53 +4212,74 @@ void rtw_signal_stat_timer_hdl(RTW_TIMER_HDL_ARGS){
34800
34801 if(recvpriv->signal_strength_data.update_req == 0) {// update_req is clear, means we got rx
34802 avg_signal_strength = recvpriv->signal_strength_data.avg_val;
34803 - avg_signal_qual = recvpriv->signal_qual_data.avg_val;
34804 + num_signal_strength = recvpriv->signal_strength_data.total_num;
34805 + // after avg_vals are accquired, we can re-stat the signal values
34806 + recvpriv->signal_strength_data.update_req = 1;
34807 }
34808
34809 if(recvpriv->signal_qual_data.update_req == 0) {// update_req is clear, means we got rx
34810 - num_signal_strength = recvpriv->signal_strength_data.total_num;
34811 + avg_signal_qual = recvpriv->signal_qual_data.avg_val;
34812 num_signal_qual = recvpriv->signal_qual_data.total_num;
34813 + // after avg_vals are accquired, we can re-stat the signal values
34814 + recvpriv->signal_qual_data.update_req = 1;
34815 }
34816 -
34817 - // after avg_vals are accquired, we can re-stat the signal values
34818 - recvpriv->signal_strength_data.update_req = 1;
34819 - recvpriv->signal_qual_data.update_req = 1;
34820
34821 - //update value of signal_strength, rssi, signal_qual
34822 - if(check_fwstate(&adapter->mlmepriv, _FW_UNDER_SURVEY) == _FALSE) {
34823 - tmp_s = (avg_signal_strength+(_alpha-1)*recvpriv->signal_strength);
34824 - if(tmp_s %_alpha)
34825 - tmp_s = tmp_s/_alpha + 1;
34826 - else
34827 - tmp_s = tmp_s/_alpha;
34828 - if(tmp_s>100)
34829 - tmp_s = 100;
34830 + if (num_signal_strength == 0) {
34831 + if (rtw_get_on_cur_ch_time(adapter) == 0
34832 + || rtw_get_passing_time_ms(rtw_get_on_cur_ch_time(adapter)) < 2 * adapter->mlmeextpriv.mlmext_info.bcn_interval
34833 + ) {
34834 + goto set_timer;
34835 + }
34836 + }
34837
34838 - tmp_q = (avg_signal_qual+(_alpha-1)*recvpriv->signal_qual);
34839 - if(tmp_q %_alpha)
34840 - tmp_q = tmp_q/_alpha + 1;
34841 - else
34842 - tmp_q = tmp_q/_alpha;
34843 - if(tmp_q>100)
34844 - tmp_q = 100;
34845 -
34846 - recvpriv->signal_strength = tmp_s;
34847 - recvpriv->rssi = (s8)translate_percentage_to_dbm(tmp_s);
34848 - recvpriv->signal_qual = tmp_q;
34849 -
34850 - #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
34851 - DBG_871X("%s signal_strength:%3u, rssi:%3d, signal_qual:%3u"
34852 - ", num_signal_strength:%u, num_signal_qual:%u"
34853 - "\n"
34854 - , __FUNCTION__
34855 - , recvpriv->signal_strength
34856 - , recvpriv->rssi
34857 - , recvpriv->signal_qual
34858 - , num_signal_strength, num_signal_qual
34859 - );
34860 - #endif
34861 + if(check_fwstate(&adapter->mlmepriv, _FW_UNDER_SURVEY) == _TRUE
34862 + || check_fwstate(&adapter->mlmepriv, _FW_LINKED) == _FALSE
34863 + ) {
34864 + goto set_timer;
34865 }
34866 +
34867 + #ifdef CONFIG_CONCURRENT_MODE
34868 + if (check_buddy_fwstate(adapter, _FW_UNDER_SURVEY) == _TRUE)
34869 + goto set_timer;
34870 + #endif
34871 +
34872 + //update value of signal_strength, rssi, signal_qual
34873 + tmp_s = (avg_signal_strength+(_alpha-1)*recvpriv->signal_strength);
34874 + if(tmp_s %_alpha)
34875 + tmp_s = tmp_s/_alpha + 1;
34876 + else
34877 + tmp_s = tmp_s/_alpha;
34878 + if(tmp_s>100)
34879 + tmp_s = 100;
34880 +
34881 + tmp_q = (avg_signal_qual+(_alpha-1)*recvpriv->signal_qual);
34882 + if(tmp_q %_alpha)
34883 + tmp_q = tmp_q/_alpha + 1;
34884 + else
34885 + tmp_q = tmp_q/_alpha;
34886 + if(tmp_q>100)
34887 + tmp_q = 100;
34888 +
34889 + recvpriv->signal_strength = tmp_s;
34890 + recvpriv->rssi = (s8)translate_percentage_to_dbm(tmp_s);
34891 + recvpriv->signal_qual = tmp_q;
34892 +
34893 + #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
34894 + DBG_871X(FUNC_ADPT_FMT" signal_strength:%3u, rssi:%3d, signal_qual:%3u"
34895 + ", num_signal_strength:%u, num_signal_qual:%u"
34896 + ", on_cur_ch_ms:%d"
34897 + "\n"
34898 + , FUNC_ADPT_ARG(adapter)
34899 + , recvpriv->signal_strength
34900 + , recvpriv->rssi
34901 + , recvpriv->signal_qual
34902 + , num_signal_strength, num_signal_qual
34903 + , rtw_get_on_cur_ch_time(adapter) ? rtw_get_passing_time_ms(rtw_get_on_cur_ch_time(adapter)) : 0
34904 + );
34905 + #endif
34906 }
34907 +
34908 +set_timer:
34909 rtw_set_signal_stat_timer(recvpriv);
34910
34911 }
34912 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_rf.c b/drivers/net/wireless/rtl8192cu/core/rtw_rf.c
34913 index 665c7e5..7ae8635 100644
34914 --- a/drivers/net/wireless/rtl8192cu/core/rtw_rf.c
34915 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_rf.c
34916 @@ -16,8 +16,7 @@
34917 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
34918 *
34919 *
34920 -
34921 -******************************************************************************/
34922 + ******************************************************************************/
34923 #define _RTW_RF_C_
34924
34925 #include <drv_conf.h>
34926 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_security.c b/drivers/net/wireless/rtl8192cu/core/rtw_security.c
34927 index 58601b6..8fa8ed5 100644
34928 --- a/drivers/net/wireless/rtl8192cu/core/rtw_security.c
34929 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_security.c
34930 @@ -16,8 +16,7 @@
34931 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
34932 *
34933 *
34934 -
34935 -******************************************************************************/
34936 + ******************************************************************************/
34937 #define _RTW_SECURITY_C_
34938
34939 #include <drv_conf.h>
34940 @@ -206,7 +205,7 @@ _func_enter_;
34941
34942 length=pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len- pattrib->icv_len;
34943
34944 - *((unsigned long *)crc)=cpu_to_le32(getcrc32(payload,length));
34945 + *((u32 *)crc)=cpu_to_le32(getcrc32(payload,length));
34946
34947 arcfour_init(&mycontext, wepkey,3+keylength);
34948 arcfour_encrypt(&mycontext, payload, payload, length);
34949 @@ -216,7 +215,7 @@ _func_enter_;
34950 else
34951 {
34952 length=pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len ;
34953 - *((unsigned long *)crc)=cpu_to_le32(getcrc32(payload,length));
34954 + *((u32 *)crc)=cpu_to_le32(getcrc32(payload,length));
34955 arcfour_init(&mycontext, wepkey,3+keylength);
34956 arcfour_encrypt(&mycontext, payload, payload, length);
34957 arcfour_encrypt(&mycontext, payload+length, crc, 4);
34958 @@ -269,7 +268,7 @@ _func_enter_;
34959 arcfour_encrypt(&mycontext, payload, payload, length);
34960
34961 //calculate icv and compare the icv
34962 - *((unsigned long *)crc)=le32_to_cpu(getcrc32(payload,length-4));
34963 + *((u32 *)crc)=le32_to_cpu(getcrc32(payload,length-4));
34964
34965 if(crc[3]!=payload[length-1] || crc[2]!=payload[length-2] || crc[1]!=payload[length-3] || crc[0]!=payload[length-4])
34966 {
34967 @@ -681,10 +680,18 @@ _func_enter_;
34968 }
34969 else
34970 {
34971 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
34972 stainfo=rtw_get_stainfo(&padapter->stapriv ,&pattrib->ra[0] );
34973 }
34974
34975 if (stainfo!=NULL){
34976 +
34977 + if(!(stainfo->state &_FW_LINKED))
34978 + {
34979 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, stainfo->state);
34980 + return _FAIL;
34981 + }
34982 +
34983 RT_TRACE(_module_rtl871x_security_c_,_drv_err_,("rtw_tkip_encrypt: stainfo!=NULL!!!\n"));
34984
34985 if(IS_MCAST(pattrib->ra))
34986 @@ -738,6 +745,7 @@ _func_enter_;
34987 }
34988 else{
34989 RT_TRACE(_module_rtl871x_security_c_,_drv_err_,("rtw_tkip_encrypt: stainfo==NULL!!!\n"));
34990 + DBG_871X("%s, psta==NUL\n", __func__);
34991 res=_FAIL;
34992 }
34993
34994 @@ -776,20 +784,47 @@ _func_enter_;
34995 if(prxattrib->encrypt==_TKIP_){
34996
34997 stainfo=rtw_get_stainfo(&padapter->stapriv ,&prxattrib->ta[0] );
34998 -
34999 -
35000 if (stainfo!=NULL){
35001
35002 if(IS_MCAST(prxattrib->ra))
35003 {
35004 + static u32 start = 0;
35005 + static u32 no_gkey_bc_cnt = 0;
35006 + static u32 no_gkey_mc_cnt = 0;
35007 +
35008 if(psecuritypriv->binstallGrpkey==_FALSE)
35009 {
35010 - res=_FAIL;
35011 - DBG_8192C("%s:rx bc/mc packets,but didn't install group key!!!!!!!!!!\n",__FUNCTION__);
35012 + res=_FAIL;
35013 +
35014 + if (start == 0)
35015 + start = rtw_get_current_time();
35016 +
35017 + if (is_broadcast_mac_addr(prxattrib->ra))
35018 + no_gkey_bc_cnt++;
35019 + else
35020 + no_gkey_mc_cnt++;
35021 +
35022 + if (rtw_get_passing_time_ms(start) > 1000) {
35023 + if (no_gkey_bc_cnt || no_gkey_mc_cnt) {
35024 + DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" no_gkey_bc_cnt:%u, no_gkey_mc_cnt:%u\n",
35025 + FUNC_ADPT_ARG(padapter), no_gkey_bc_cnt, no_gkey_mc_cnt);
35026 + }
35027 + start = rtw_get_current_time();
35028 + no_gkey_bc_cnt = 0;
35029 + no_gkey_mc_cnt = 0;
35030 + }
35031 goto exit;
35032 }
35033 -
35034 - DBG_871X("rx bc/mc packets, to perform sw rtw_tkip_decrypt\n");
35035 +
35036 + if (no_gkey_bc_cnt || no_gkey_mc_cnt) {
35037 + DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" gkey installed. no_gkey_bc_cnt:%u, no_gkey_mc_cnt:%u\n",
35038 + FUNC_ADPT_ARG(padapter), no_gkey_bc_cnt, no_gkey_mc_cnt);
35039 + }
35040 + start = 0;
35041 + no_gkey_bc_cnt = 0;
35042 + no_gkey_mc_cnt = 0;
35043 +
35044 + //DBG_871X("rx bc/mc packets, to perform sw rtw_tkip_decrypt\n");
35045 //prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
35046 prwskey = psecuritypriv->dot118021XGrpKey[prxattrib->key_index].skey;
35047 prwskeylen=16;
35048 @@ -898,11 +933,13 @@ static void construct_mic_iv(
35049 sint a4_exists,
35050 u8 *mpdu,
35051 uint payload_length,
35052 - u8 * pn_vector);
35053 + u8 * pn_vector,
35054 + uint frtype);// add for CONFIG_IEEE80211W, none 11w also can use
35055 static void construct_mic_header1(
35056 u8 *mic_header1,
35057 sint header_length,
35058 - u8 *mpdu);
35059 + u8 *mpdu,
35060 + uint frtype);// add for CONFIG_IEEE80211W, none 11w also can use
35061 static void construct_mic_header2(
35062 u8 *mic_header2,
35063 u8 *mpdu,
35064 @@ -914,7 +951,8 @@ static void construct_ctr_preload(
35065 sint qc_exists,
35066 u8 *mpdu,
35067 u8 *pn_vector,
35068 - sint c);
35069 + sint c,
35070 + uint frtype);// add for CONFIG_IEEE80211W, none 11w also can use
35071 static void xor_128(u8 *a, u8 *b, u8 *out);
35072 static void xor_32(u8 *a, u8 *b, u8 *out);
35073 static u8 sbox(u8 a);
35074 @@ -922,11 +960,13 @@ static void next_key(u8 *key, sint round);
35075 static void byte_sub(u8 *in, u8 *out);
35076 static void shift_row(u8 *in, u8 *out);
35077 static void mix_column(u8 *in, u8 *out);
35078 +#ifndef PLATFORM_FREEBSD
35079 static void add_round_key( u8 *shiftrow_in,
35080 u8 *mcol_in,
35081 u8 *block_in,
35082 sint round,
35083 u8 *out);
35084 +#endif //PLATFORM_FREEBSD
35085 static void aes128k128d(u8 *key, u8 *data, u8 *ciphertext);
35086
35087
35088 @@ -1132,6 +1172,8 @@ _func_exit_;
35089 /************************************************/
35090 /* construct_mic_iv() */
35091 /* Builds the MIC IV from header fields and PN */
35092 +/* Baron think the function is construct CCM */
35093 +/* nonce */
35094 /************************************************/
35095 static void construct_mic_iv(
35096 u8 *mic_iv,
35097 @@ -1139,7 +1181,8 @@ static void construct_mic_iv(
35098 sint a4_exists,
35099 u8 *mpdu,
35100 uint payload_length,
35101 - u8 *pn_vector
35102 + u8 *pn_vector,
35103 + uint frtype// add for CONFIG_IEEE80211W, none 11w also can use
35104 )
35105 {
35106 sint i;
35107 @@ -1148,6 +1191,11 @@ _func_enter_;
35108 if (qc_exists && a4_exists) mic_iv[1] = mpdu[30] & 0x0f; /* QoS_TC */
35109 if (qc_exists && !a4_exists) mic_iv[1] = mpdu[24] & 0x0f; /* mute bits 7-4 */
35110 if (!qc_exists) mic_iv[1] = 0x00;
35111 +#ifdef CONFIG_IEEE80211W
35112 + //802.11w management frame should set management bit(4)
35113 + if(frtype == WIFI_MGT_TYPE)
35114 + mic_iv[1] |= BIT(4);
35115 +#endif //CONFIG_IEEE80211W
35116 for (i = 2; i < 8; i++)
35117 mic_iv[i] = mpdu[i + 8]; /* mic_iv[2:7] = A2[0:5] = mpdu[10:15] */
35118 #ifdef CONSISTENT_PN_ORDER
35119 @@ -1167,17 +1215,26 @@ _func_exit_;
35120 /* construct_mic_header1() */
35121 /* Builds the first MIC header block from */
35122 /* header fields. */
35123 +/* Build AAD SC,A1,A2 */
35124 /************************************************/
35125 static void construct_mic_header1(
35126 u8 *mic_header1,
35127 sint header_length,
35128 - u8 *mpdu
35129 + u8 *mpdu,
35130 + uint frtype// add for CONFIG_IEEE80211W, none 11w also can use
35131 )
35132 {
35133 _func_enter_;
35134 mic_header1[0] = (u8)((header_length - 2) / 256);
35135 mic_header1[1] = (u8)((header_length - 2) % 256);
35136 - mic_header1[2] = mpdu[0] & 0xcf; /* Mute CF poll & CF ack bits */
35137 +#ifdef CONFIG_IEEE80211W
35138 + //802.11w management frame don't AND subtype bits 4,5,6 of frame control field
35139 + if(frtype == WIFI_MGT_TYPE)
35140 + mic_header1[2] = mpdu[0];
35141 + else
35142 +#endif //CONFIG_IEEE80211W
35143 + mic_header1[2] = mpdu[0] & 0xcf; /* Mute CF poll & CF ack bits */
35144 +
35145 mic_header1[3] = mpdu[1] & 0xc7; /* Mute retry, more data and pwr mgt bits */
35146 mic_header1[4] = mpdu[4]; /* A1 */
35147 mic_header1[5] = mpdu[5];
35148 @@ -1251,6 +1308,8 @@ _func_exit_;
35149 /* construct_mic_header2() */
35150 /* Builds the last MIC header block from */
35151 /* header fields. */
35152 +/* Baron think the function is construct CCM */
35153 +/* nonce */
35154 /************************************************/
35155 static void construct_ctr_preload(
35156 u8 *ctr_preload,
35157 @@ -1258,20 +1317,25 @@ static void construct_ctr_preload(
35158 sint qc_exists,
35159 u8 *mpdu,
35160 u8 *pn_vector,
35161 - sint c
35162 + sint c,
35163 + uint frtype // add for CONFIG_IEEE80211W, none 11w also can use
35164 )
35165 {
35166 sint i = 0;
35167 _func_enter_;
35168 for (i=0; i<16; i++) ctr_preload[i] = 0x00;
35169 i = 0;
35170 -
35171 +
35172 ctr_preload[0] = 0x01; /* flag */
35173 if (qc_exists && a4_exists)
35174 ctr_preload[1] = mpdu[30] & 0x0f; /* QoC_Control */
35175 if (qc_exists && !a4_exists)
35176 ctr_preload[1] = mpdu[24] & 0x0f;
35177 -
35178 +#ifdef CONFIG_IEEE80211W
35179 + //802.11w management frame should set management bit(4)
35180 + if(frtype == WIFI_MGT_TYPE)
35181 + ctr_preload[1] |= BIT(4);
35182 +#endif //CONFIG_IEEE80211W
35183 for (i = 2; i < 8; i++)
35184 ctr_preload[i] = mpdu[i + 8]; /* ctr_preload[2:7] = A2[0:5] = mpdu[10:15] */
35185 #ifdef CONSISTENT_PN_ORDER
35186 @@ -1343,9 +1407,9 @@ _func_enter_;
35187 a4_exists = 1;
35188
35189 if (
35190 - (frtype == WIFI_DATA_CFACK) ||
35191 - (frtype == WIFI_DATA_CFPOLL)||
35192 - (frtype == WIFI_DATA_CFACKPOLL))
35193 + ((frtype|frsubtype) == WIFI_DATA_CFACK) ||
35194 + ((frtype|frsubtype) == WIFI_DATA_CFPOLL)||
35195 + ((frtype|frsubtype) == WIFI_DATA_CFACKPOLL))
35196 {
35197 qc_exists = 1;
35198 if(hdrlen != WLAN_HDR_A3_QOS_LEN){
35199 @@ -1353,11 +1417,12 @@ _func_enter_;
35200 hdrlen += 2;
35201 }
35202 }
35203 - else if (
35204 - (frsubtype == 0x08) ||
35205 + // add for CONFIG_IEEE80211W, none 11w also can use
35206 + else if ((frtype == WIFI_DATA) &&
35207 + ((frsubtype == 0x08) ||
35208 (frsubtype == 0x09)||
35209 (frsubtype == 0x0a)||
35210 - (frsubtype == 0x0b))
35211 + (frsubtype == 0x0b)))
35212 {
35213 if(hdrlen != WLAN_HDR_A3_QOS_LEN){
35214
35215 @@ -1381,13 +1446,15 @@ _func_enter_;
35216 a4_exists,
35217 pframe, //message,
35218 plen,
35219 - pn_vector
35220 + pn_vector,
35221 + frtype // add for CONFIG_IEEE80211W, none 11w also can use
35222 );
35223
35224 construct_mic_header1(
35225 mic_header1,
35226 hdrlen,
35227 - pframe //message
35228 + pframe, //message
35229 + frtype // add for CONFIG_IEEE80211W, none 11w also can use
35230 );
35231 construct_mic_header2(
35232 mic_header2,
35233 @@ -1446,7 +1513,8 @@ _func_enter_;
35234 qc_exists,
35235 pframe, //message,
35236 pn_vector,
35237 - i+1);
35238 + i+1,
35239 + frtype); // add for CONFIG_IEEE80211W, none 11w also can use
35240 aes128k128d(key, ctr_preload, aes_out);
35241 bitwise_xor(aes_out, &pframe[payload_index], chain_buffer);//bitwise_xor(aes_out, &message[payload_index], chain_buffer);
35242 for (j=0; j<16;j++) pframe[payload_index++] = chain_buffer[j];//for (j=0; j<16;j++) message[payload_index++] = chain_buffer[j];
35243 @@ -1460,7 +1528,8 @@ _func_enter_;
35244 qc_exists,
35245 pframe, //message,
35246 pn_vector,
35247 - num_blocks+1);
35248 + num_blocks+1,
35249 + frtype); // add for CONFIG_IEEE80211W, none 11w also can use
35250
35251 for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
35252 for (j = 0; j < payload_remainder; j++)
35253 @@ -1479,7 +1548,8 @@ _func_enter_;
35254 qc_exists,
35255 pframe, //message,
35256 pn_vector,
35257 - 0);
35258 + 0,
35259 + frtype); // add for CONFIG_IEEE80211W, none 11w also can use
35260
35261 for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
35262 for (j = 0; j < 8; j++)
35263 @@ -1508,7 +1578,7 @@ u32 rtw_aes_encrypt(_adapter *padapter, u8 *pxmitframe)
35264 sint curfragnum,length;
35265 u32 prwskeylen;
35266 u8 *pframe,*prwskey; //, *payload,*iv
35267 - struct sta_info *stainfo;
35268 + struct sta_info *stainfo=NULL;
35269 struct pkt_attrib *pattrib = &((struct xmit_frame *)pxmitframe)->attrib;
35270 struct security_priv *psecuritypriv=&padapter->securitypriv;
35271 struct xmit_priv *pxmitpriv=&padapter->xmitpriv;
35272 @@ -1536,10 +1606,18 @@ _func_enter_;
35273 }
35274 else
35275 {
35276 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
35277 stainfo=rtw_get_stainfo(&padapter->stapriv ,&pattrib->ra[0] );
35278 }
35279
35280 if (stainfo!=NULL){
35281 +
35282 + if(!(stainfo->state &_FW_LINKED))
35283 + {
35284 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, stainfo->state);
35285 + return _FAIL;
35286 + }
35287 +
35288 RT_TRACE(_module_rtl871x_security_c_,_drv_err_,("rtw_aes_encrypt: stainfo!=NULL!!!\n"));
35289
35290 if(IS_MCAST(pattrib->ra))
35291 @@ -1551,6 +1629,18 @@ _func_enter_;
35292 prwskey=&stainfo->dot118021x_UncstKey.skey[0];
35293 }
35294
35295 +#ifdef CONFIG_TDLS //swencryption
35296 + {
35297 + struct sta_info *ptdls_sta;
35298 + ptdls_sta=rtw_get_stainfo(&padapter->stapriv ,&pattrib->dst[0] );
35299 + if((ptdls_sta != NULL) && (ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) )
35300 + {
35301 + DBG_871X("[%s] for tdls link\n", __FUNCTION__);
35302 + prwskey=&ptdls_sta->tpk.tk[0];
35303 + }
35304 + }
35305 +#endif //CONFIG_TDLS
35306 +
35307 prwskeylen=16;
35308
35309 for(curfragnum=0;curfragnum<pattrib->nr_frags;curfragnum++){
35310 @@ -1574,6 +1664,7 @@ _func_enter_;
35311 }
35312 else{
35313 RT_TRACE(_module_rtl871x_security_c_,_drv_err_,("rtw_aes_encrypt: stainfo==NULL!!!\n"));
35314 + DBG_871X("%s, psta==NUL\n", __func__);
35315 res=_FAIL;
35316 }
35317
35318 @@ -1591,7 +1682,6 @@ static sint aes_decipher(u8 *key, uint hdrlen,
35319 static u8 message[MAX_MSG_SIZE];
35320 uint qc_exists, a4_exists, i, j, payload_remainder,
35321 num_blocks, payload_index;
35322 -
35323 sint res = _SUCCESS;
35324 u8 pn_vector[6];
35325 u8 mic_iv[16];
35326 @@ -1623,7 +1713,7 @@ _func_enter_;
35327
35328 //start to decrypt the payload
35329
35330 - num_blocks = (plen-8) / 16; //(plen including llc, payload_length and mic )
35331 + num_blocks = (plen-8) / 16; //(plen including LLC, payload_length and mic )
35332
35333 payload_remainder = (plen-8) % 16;
35334
35335 @@ -1640,21 +1730,21 @@ _func_enter_;
35336 a4_exists = 1;
35337
35338 if (
35339 - (frtype == WIFI_DATA_CFACK) ||
35340 - (frtype == WIFI_DATA_CFPOLL)||
35341 - (frtype == WIFI_DATA_CFACKPOLL))
35342 + ((frtype|frsubtype) == WIFI_DATA_CFACK) ||
35343 + ((frtype|frsubtype) == WIFI_DATA_CFPOLL)||
35344 + ((frtype|frsubtype) == WIFI_DATA_CFACKPOLL))
35345 {
35346 qc_exists = 1;
35347 if(hdrlen != WLAN_HDR_A3_QOS_LEN){
35348
35349 hdrlen += 2;
35350 }
35351 - }
35352 - else if (
35353 - (frsubtype == 0x08) ||
35354 + }//only for data packet . add for CONFIG_IEEE80211W, none 11w also can use
35355 + else if ((frtype == WIFI_DATA) &&
35356 + ((frsubtype == 0x08) ||
35357 (frsubtype == 0x09)||
35358 (frsubtype == 0x0a)||
35359 - (frsubtype == 0x0b))
35360 + (frsubtype == 0x0b)))
35361 {
35362 if(hdrlen != WLAN_HDR_A3_QOS_LEN){
35363
35364 @@ -1678,7 +1768,8 @@ _func_enter_;
35365 qc_exists,
35366 pframe,
35367 pn_vector,
35368 - i+1
35369 + i+1,
35370 + frtype // add for CONFIG_IEEE80211W, none 11w also can use
35371 );
35372
35373 aes128k128d(key, ctr_preload, aes_out);
35374 @@ -1695,7 +1786,8 @@ _func_enter_;
35375 qc_exists,
35376 pframe,
35377 pn_vector,
35378 - num_blocks+1
35379 + num_blocks+1,
35380 + frtype // add for CONFIG_IEEE80211W, none 11w also can use
35381 );
35382
35383 for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
35384 @@ -1728,13 +1820,15 @@ _func_enter_;
35385 a4_exists,
35386 message,
35387 plen-8,
35388 - pn_vector
35389 + pn_vector,
35390 + frtype // add for CONFIG_IEEE80211W, none 11w also can use
35391 );
35392
35393 construct_mic_header1(
35394 mic_header1,
35395 hdrlen,
35396 - message
35397 + message,
35398 + frtype // add for CONFIG_IEEE80211W, none 11w also can use
35399 );
35400 construct_mic_header2(
35401 mic_header2,
35402 @@ -1793,7 +1887,8 @@ _func_enter_;
35403 qc_exists,
35404 message,
35405 pn_vector,
35406 - i+1);
35407 + i+1,
35408 + frtype); // add for CONFIG_IEEE80211W, none 11w also can use
35409 aes128k128d(key, ctr_preload, aes_out);
35410 bitwise_xor(aes_out, &message[payload_index], chain_buffer);
35411 for (j=0; j<16;j++) message[payload_index++] = chain_buffer[j];
35412 @@ -1807,7 +1902,8 @@ _func_enter_;
35413 qc_exists,
35414 message,
35415 pn_vector,
35416 - num_blocks+1);
35417 + num_blocks+1,
35418 + frtype); // add for CONFIG_IEEE80211W, none 11w also can use
35419
35420 for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
35421 for (j = 0; j < payload_remainder; j++)
35422 @@ -1826,7 +1922,8 @@ _func_enter_;
35423 qc_exists,
35424 message,
35425 pn_vector,
35426 - 0);
35427 + 0,
35428 + frtype); // add for CONFIG_IEEE80211W, none 11w also can use
35429
35430 for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
35431 for (j = 0; j < 8; j++)
35432 @@ -1841,10 +1938,23 @@ _func_enter_;
35433 //compare the mic
35434 for(i=0;i<8;i++){
35435 if(pframe[hdrlen+8+plen-8+i] != message[hdrlen+8+plen-8+i])
35436 + {
35437 RT_TRACE(_module_rtl871x_security_c_,_drv_err_,("aes_decipher:mic check error mic[%d]: pframe(%x) != message(%x) \n",
35438 i,pframe[hdrlen+8+plen-8+i],message[hdrlen+8+plen-8+i]));
35439 - res = _FAIL;
35440 + DBG_871X("aes_decipher:mic check error mic[%d]: pframe(%x) != message(%x) \n",
35441 + i,pframe[hdrlen+8+plen-8+i],message[hdrlen+8+plen-8+i]);
35442 + res = _FAIL;
35443 + }
35444 + }
35445 +
35446 + if(res == _FAIL)
35447 + {
35448 + int gg=0;
35449 + for(gg=0; gg < 32; gg++)
35450 + DBG_871X(" [%d]=%02x ", gg, pframe[gg]);
35451 + DBG_871X("error packet header \n");
35452 }
35453 +
35454 _func_exit_;
35455 return res;
35456 }
35457 @@ -1861,7 +1971,6 @@ u32 rtw_aes_decrypt(_adapter *padapter, u8 *precvframe)
35458
35459
35460 sint length;
35461 - u32 prwskeylen;
35462 u8 *pframe,*prwskey; //, *payload,*iv
35463 struct sta_info *stainfo;
35464 struct rx_pkt_attrib *prxattrib = &((union recv_frame *)precvframe)->u.hdr.attrib;
35465 @@ -1879,29 +1988,55 @@ _func_enter_;
35466
35467 if(IS_MCAST(prxattrib->ra))
35468 {
35469 + //in concurrent we should use sw descrypt in group key, so we remove this message
35470 + //DBG_871X("rx bc/mc packets, to perform sw rtw_aes_decrypt\n");
35471 + //prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
35472 if(psecuritypriv->binstallGrpkey==_FALSE)
35473 {
35474 res=_FAIL;
35475 DBG_8192C("%s:rx bc/mc packets,but didn't install group key!!!!!!!!!!\n",__FUNCTION__);
35476 goto exit;
35477 }
35478 -
35479 - DBG_871X("rx bc/mc packets, to perform sw rtw_aes_decrypt\n");
35480 - //prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
35481 prwskey = psecuritypriv->dot118021XGrpKey[prxattrib->key_index].skey;
35482 - prwskeylen=16;
35483 +
35484 + if(psecuritypriv->dot118021XGrpKeyid != prxattrib->key_index)
35485 + {
35486 + DBG_871X("not match packet_index=%d, install_index=%d \n"
35487 + , prxattrib->key_index, psecuritypriv->dot118021XGrpKeyid);
35488 + res=_FAIL;
35489 + goto exit;
35490 + }
35491 }
35492 else
35493 {
35494 prwskey=&stainfo->dot118021x_UncstKey.skey[0];
35495 - prwskeylen=16;
35496 }
35497
35498 length= ((union recv_frame *)precvframe)->u.hdr.len-prxattrib->hdrlen-prxattrib->iv_len;
35499 -
35500 - res= aes_decipher(prwskey,prxattrib->hdrlen,pframe, length);
35501 -
35502 + /*// add for CONFIG_IEEE80211W, debug
35503 + if(0)
35504 + printk("@@@@@@@@@@@@@@@@@@ length=%d, prxattrib->hdrlen=%d, prxattrib->pkt_len=%d \n"
35505 + , length, prxattrib->hdrlen, prxattrib->pkt_len);
35506 + if(0)
35507 + {
35508 + int no;
35509 + //test print PSK
35510 + printk("PSK key below:\n");
35511 + for(no=0;no<16;no++)
35512 + printk(" %02x ", prwskey[no]);
35513 + printk("\n");
35514 + }
35515 + if(0)
35516 + {
35517 + int no;
35518 + //test print PSK
35519 + printk("frame:\n");
35520 + for(no=0;no<prxattrib->pkt_len;no++)
35521 + printk(" %02x ", pframe[no]);
35522 + printk("\n");
35523 + }*/
35524
35525 + res= aes_decipher(prwskey,prxattrib->hdrlen,pframe, length);
35526 }
35527 else{
35528 RT_TRACE(_module_rtl871x_security_c_,_drv_err_,("rtw_aes_encrypt: stainfo==NULL!!!\n"));
35529 @@ -1909,11 +2044,114 @@ _func_enter_;
35530 }
35531
35532 }
35533 -_func_exit_;
35534 +_func_exit_;
35535 exit:
35536 return res;
35537 }
35538
35539 +#ifdef CONFIG_IEEE80211W
35540 +u32 rtw_BIP_verify(_adapter *padapter, u8 *precvframe)
35541 +{
35542 + struct rx_pkt_attrib *pattrib = &((union recv_frame *)precvframe)->u.hdr.attrib;
35543 + u8 *pframe;
35544 + u8 *BIP_AAD, *p;
35545 + u32 res=_FAIL;
35546 + uint len, ori_len;
35547 + struct rtw_ieee80211_hdr *pwlanhdr;
35548 + u8 mic[16];
35549 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
35550 + ori_len = pattrib->pkt_len-WLAN_HDR_A3_LEN+BIP_AAD_SIZE;
35551 + BIP_AAD = rtw_zmalloc(ori_len);
35552 +
35553 + if(BIP_AAD == NULL)
35554 + {
35555 + DBG_871X("BIP AAD allocate fail\n");
35556 + return _FAIL;
35557 + }
35558 + //PKT start
35559 + pframe=(unsigned char *)((union recv_frame*)precvframe)->u.hdr.rx_data;
35560 + //mapping to wlan header
35561 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
35562 + //save the frame body + MME
35563 + _rtw_memcpy(BIP_AAD+BIP_AAD_SIZE, pframe+WLAN_HDR_A3_LEN, pattrib->pkt_len-WLAN_HDR_A3_LEN);
35564 + //find MME IE pointer
35565 + p = rtw_get_ie(BIP_AAD+BIP_AAD_SIZE, _MME_IE_, &len, pattrib->pkt_len-WLAN_HDR_A3_LEN);
35566 + //Baron
35567 + if(p)
35568 + {
35569 + u16 keyid=0;
35570 + u64 temp_ipn=0;
35571 + //save packet number
35572 + _rtw_memcpy(&temp_ipn, p+4, 6);
35573 + temp_ipn = le64_to_cpu(temp_ipn);
35574 + //BIP packet number should bigger than previous BIP packet
35575 + if(temp_ipn <= pmlmeext->mgnt_80211w_IPN_rx)
35576 + {
35577 + DBG_871X("replay BIP packet\n");
35578 + goto BIP_exit;
35579 + }
35580 + //copy key index
35581 + _rtw_memcpy(&keyid, p+2, 2);
35582 + keyid = le16_to_cpu(keyid);
35583 + if(keyid != padapter->securitypriv.dot11wBIPKeyid)
35584 + {
35585 + DBG_871X("BIP key index error!\n");
35586 + goto BIP_exit;
35587 + }
35588 + //clear the MIC field of MME to zero
35589 + _rtw_memset(p+2+len-8, 0, 8);
35590 +
35591 + //conscruct AAD, copy frame control field
35592 + _rtw_memcpy(BIP_AAD, &pwlanhdr->frame_ctl, 2);
35593 + ClearRetry(BIP_AAD);
35594 + ClearPwrMgt(BIP_AAD);
35595 + ClearMData(BIP_AAD);
35596 + //conscruct AAD, copy address 1 to address 3
35597 + _rtw_memcpy(BIP_AAD+2, pwlanhdr->addr1, 18);
35598 +
35599 + if(omac1_aes_128(padapter->securitypriv.dot11wBIPKey[padapter->securitypriv.dot11wBIPKeyid].skey
35600 + , BIP_AAD, ori_len, mic))
35601 + goto BIP_exit;
35602 +
35603 + /*//management packet content
35604 + {
35605 + int pp;
35606 + DBG_871X("pkt: ");
35607 + for(pp=0;pp< pattrib->pkt_len; pp++)
35608 + printk(" %02x ", pframe[pp]);
35609 + DBG_871X("\n");
35610 + //BIP AAD + management frame body + MME(MIC is zero)
35611 + DBG_871X("AAD+PKT: ");
35612 + for(pp=0;pp< ori_len; pp++)
35613 + DBG_871X(" %02x ", BIP_AAD[pp]);
35614 + DBG_871X("\n");
35615 + //show the MIC result
35616 + DBG_871X("mic: ");
35617 + for(pp=0;pp<16; pp++)
35618 + DBG_871X(" %02x ", mic[pp]);
35619 + DBG_871X("\n");
35620 + }
35621 + */
35622 + //MIC field should be last 8 bytes of packet (packet without FCS)
35623 + if(_rtw_memcmp(mic, pframe+pattrib->pkt_len-8, 8))
35624 + {
35625 + pmlmeext->mgnt_80211w_IPN_rx = temp_ipn;
35626 + res=_SUCCESS;
35627 + }
35628 + else
35629 + DBG_871X("BIP MIC error!\n");
35630 +
35631 + }
35632 + else
35633 + res = RTW_RX_HANDLED;
35634 +BIP_exit:
35635 +
35636 + rtw_mfree(BIP_AAD, ori_len);
35637 + return res;
35638 +}
35639 +#endif //CONFIG_IEEE80211W
35640 +
35641 +#ifndef PLATFORM_FREEBSD
35642 /* compress 512-bits */
35643 static int sha256_compress(struct sha256_state *md, unsigned char *buf)
35644 {
35645 @@ -2179,7 +2417,7 @@ static void hmac_sha256_vector(u8 *key, size_t key_len, size_t num_elem,
35646 _len[1] = 32;
35647 sha256_vector(2, _addr, _len, mac);
35648 }
35649 -
35650 +#endif //PLATFORM_FREEBSD
35651 /**
35652 * sha256_prf - SHA256-based Pseudo-Random Function (IEEE 802.11r, 8.5.1.5.2)
35653 * @key: Key for PRF
35654 @@ -2193,6 +2431,7 @@ static void hmac_sha256_vector(u8 *key, size_t key_len, size_t num_elem,
35655 * This function is used to derive new, cryptographically separate keys from a
35656 * given key.
35657 */
35658 +#ifndef PLATFORM_FREEBSD //Baron
35659 static void sha256_prf(u8 *key, size_t key_len, char *label,
35660 u8 *data, size_t data_len, u8 *buf, size_t buf_len)
35661 {
35662 @@ -2229,6 +2468,7 @@ static void sha256_prf(u8 *key, size_t key_len, char *label,
35663 counter++;
35664 }
35665 }
35666 +#endif //PLATFORM_FREEBSD Baron
35667
35668 /* AES tables*/
35669 const u32 Te0[256] = {
35670 @@ -2407,6 +2647,7 @@ const u8 rcons[] = {
35671 *
35672 * @return the number of rounds for the given cipher key size.
35673 */
35674 +#ifndef PLATFORM_FREEBSD //Baron
35675 static void rijndaelKeySetupEnc(u32 rk[/*44*/], const u8 cipherKey[])
35676 {
35677 int i;
35678 @@ -2617,11 +2858,12 @@ static int omac1_aes_128_vector(u8 *key, size_t num_elem,
35679 * This is a mode for using block cipher (AES in this case) for authentication.
35680 * OMAC1 was standardized with the name CMAC by NIST in a Special Publication
35681 * (SP) 800-38B.
35682 - */
35683 -static int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac)
35684 + */ //modify for CONFIG_IEEE80211W
35685 +int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac)
35686 {
35687 return omac1_aes_128_vector(key, 1, &data, &data_len, mac);
35688 }
35689 +#endif //PLATFORM_FREEBSD Baron
35690
35691 #ifdef CONFIG_TDLS
35692 void wpa_tdls_generate_tpk(_adapter *padapter, struct sta_info *psta)
35693 @@ -2695,7 +2937,7 @@ int wpa_tdls_ftie_mic(u8 *kck, u8 trans_seq,
35694 2 + timeoutie[1] + 2 + ftie[1];
35695 buf = rtw_zmalloc(len);
35696 if (!buf) {
35697 - DBG_8192C("TDLS: No memory for MIC calculation\n");
35698 + DBG_871X("TDLS: No memory for MIC calculation\n");
35699 return -1;
35700 }
35701
35702 @@ -2741,7 +2983,6 @@ int tdls_verify_mic(u8 *kck, u8 trans_seq,
35703
35704 if (lnkid == NULL || rsnie == NULL ||
35705 timeoutie == NULL || ftie == NULL){
35706 - DBG_8192C("pointer fail\n");
35707 return 0;
35708 }
35709
35710 @@ -2783,16 +3024,16 @@ int tdls_verify_mic(u8 *kck, u8 trans_seq,
35711 rx_ftie = ftie+4;
35712
35713 if (os_memcmp(mic, rx_ftie, 16) == 0) {
35714 - //Valid MIC
35715 - DBG_8192C( "[%s] Valid MIC\n", __FUNCTION__);
35716 + //Valid MIC
35717 return 1;
35718 }
35719 +
35720 //Invalid MIC
35721 - DBG_8192C( "[%s] Invalid MIC\n", __FUNCTION__);
35722 + DBG_871X( "[%s] Invalid MIC\n", __FUNCTION__);
35723 return 0;
35724
35725 }
35726 -#endif
35727 +#endif //CONFIG_TDLS
35728
35729 #ifdef PLATFORM_WINDOWS
35730 void rtw_use_tkipkey_handler (
35731 @@ -2805,6 +3046,9 @@ void rtw_use_tkipkey_handler (
35732 #ifdef PLATFORM_LINUX
35733 void rtw_use_tkipkey_handler(void *FunctionContext)
35734 #endif
35735 +#ifdef PLATFORM_FREEBSD
35736 +void rtw_use_tkipkey_handler(void *FunctionContext)
35737 +#endif
35738 {
35739 _adapter *padapter = (_adapter *)FunctionContext;
35740
35741 @@ -2829,3 +3073,43 @@ _func_exit_;
35742
35743 }
35744
35745 +/* Restore HW wep key setting according to key_mask */
35746 +void rtw_sec_restore_wep_key(_adapter *adapter)
35747 +{
35748 + struct security_priv* securitypriv=&(adapter->securitypriv);
35749 + sint keyid;
35750 +
35751 + if((_WEP40_ == securitypriv->dot11PrivacyAlgrthm) ||(_WEP104_ == securitypriv->dot11PrivacyAlgrthm)) {
35752 + for(keyid=0;keyid<4;keyid++){
35753 + if(securitypriv->key_mask & BIT(keyid)){
35754 + if(keyid == securitypriv->dot11PrivacyKeyIndex)
35755 + rtw_set_key(adapter,securitypriv, keyid, 1);
35756 + else
35757 + rtw_set_key(adapter,securitypriv, keyid, 0);
35758 + }
35759 + }
35760 + }
35761 +}
35762 +
35763 +u8 rtw_handle_tkip_countermeasure(_adapter* adapter, const char *caller)
35764 +{
35765 + struct security_priv* securitypriv=&(adapter->securitypriv);
35766 + u8 status = _SUCCESS;
35767 +
35768 + if (securitypriv->btkip_countermeasure == _TRUE) {
35769 + u32 passing_ms = rtw_get_passing_time_ms(securitypriv->btkip_countermeasure_time);
35770 + if (passing_ms > 60*1000) {
35771 + LOG_LEVEL(_drv_info_, "%s("ADPT_FMT") countermeasure time:%ds > 60s \n",
35772 + caller, ADPT_ARG(adapter), passing_ms/1000);
35773 + securitypriv->btkip_countermeasure = _FALSE;
35774 + securitypriv->btkip_countermeasure_time = 0;
35775 + } else {
35776 + LOG_LEVEL(_drv_warning_, "%s("ADPT_FMT") countermeasure time:%ds < 60s \n",
35777 + caller, ADPT_ARG(adapter), passing_ms/1000);
35778 + status = _FAIL;
35779 + }
35780 + }
35781 +
35782 + return status;
35783 +}
35784 +
35785 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c b/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c
35786 new file mode 100644
35787 index 0000000..e08b1f7
35788 --- /dev/null
35789 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c
35790 @@ -0,0 +1,352 @@
35791 +/******************************************************************************
35792 + *
35793 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
35794 + *
35795 + * This program is free software; you can redistribute it and/or modify it
35796 + * under the terms of version 2 of the GNU General Public License as
35797 + * published by the Free Software Foundation.
35798 + *
35799 + * This program is distributed in the hope that it will be useful, but WITHOUT
35800 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
35801 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
35802 + * more details.
35803 + *
35804 + * You should have received a copy of the GNU General Public License along with
35805 + * this program; if not, write to the Free Software Foundation, Inc.,
35806 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
35807 + *
35808 + *
35809 + ******************************************************************************/
35810 +
35811 +#include<rtw_sreset.h>
35812 +
35813 +void sreset_init_value(_adapter *padapter)
35814 +{
35815 +#if defined(DBG_CONFIG_ERROR_DETECT)
35816 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
35817 + struct sreset_priv *psrtpriv = &pHalData->srestpriv;
35818 +
35819 + _rtw_mutex_init(&psrtpriv->silentreset_mutex);
35820 + psrtpriv->silent_reset_inprogress = _FALSE;
35821 + psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
35822 + psrtpriv->last_tx_time =0;
35823 + psrtpriv->last_tx_complete_time =0;
35824 +#endif
35825 +}
35826 +void sreset_reset_value(_adapter *padapter)
35827 +{
35828 +#if defined(DBG_CONFIG_ERROR_DETECT)
35829 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
35830 + struct sreset_priv *psrtpriv = &pHalData->srestpriv;
35831 +
35832 + psrtpriv->silent_reset_inprogress = _FALSE;
35833 + psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
35834 + psrtpriv->last_tx_time =0;
35835 + psrtpriv->last_tx_complete_time =0;
35836 +#endif
35837 +}
35838 +
35839 +u8 sreset_get_wifi_status(_adapter *padapter)
35840 +{
35841 +#if defined(DBG_CONFIG_ERROR_DETECT)
35842 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
35843 + struct sreset_priv *psrtpriv = &pHalData->srestpriv;
35844 +
35845 + u8 status = WIFI_STATUS_SUCCESS;
35846 + u32 val32 = 0;
35847 + _irqL irqL;
35848 + if(psrtpriv->silent_reset_inprogress == _TRUE)
35849 + {
35850 + return status;
35851 + }
35852 + val32 =rtw_read32(padapter,REG_TXDMA_STATUS);
35853 + if(val32==0xeaeaeaea){
35854 + psrtpriv->Wifi_Error_Status = WIFI_IF_NOT_EXIST;
35855 + }
35856 + else if(val32!=0){
35857 + DBG_8192C("txdmastatu(%x)\n",val32);
35858 + psrtpriv->Wifi_Error_Status = WIFI_MAC_TXDMA_ERROR;
35859 + }
35860 +
35861 + if(WIFI_STATUS_SUCCESS !=psrtpriv->Wifi_Error_Status)
35862 + {
35863 + DBG_8192C("==>%s error_status(0x%x) \n",__FUNCTION__,psrtpriv->Wifi_Error_Status);
35864 + status = (psrtpriv->Wifi_Error_Status &( ~(USB_READ_PORT_FAIL|USB_WRITE_PORT_FAIL)));
35865 + }
35866 + DBG_8192C("==> %s wifi_status(0x%x)\n",__FUNCTION__,status);
35867 +
35868 + //status restore
35869 + psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
35870 +
35871 + return status;
35872 +#else
35873 + return WIFI_STATUS_SUCCESS;
35874 +#endif
35875 +}
35876 +
35877 +void sreset_set_wifi_error_status(_adapter *padapter, u32 status)
35878 +{
35879 +#if defined(DBG_CONFIG_ERROR_DETECT)
35880 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
35881 + pHalData->srestpriv.Wifi_Error_Status = status;
35882 +#endif
35883 +}
35884 +
35885 +void sreset_set_trigger_point(_adapter *padapter, s32 tgp)
35886 +{
35887 +#if defined(DBG_CONFIG_ERROR_DETECT)
35888 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
35889 + pHalData->srestpriv.dbg_trigger_point = tgp;
35890 +#endif
35891 +}
35892 +
35893 +bool sreset_inprogress(_adapter *padapter)
35894 +{
35895 +#if defined(DBG_CONFIG_ERROR_RESET)
35896 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
35897 + return pHalData->srestpriv.silent_reset_inprogress;
35898 +#else
35899 + return _FALSE;
35900 +#endif
35901 +}
35902 +
35903 +void sreset_restore_security_station(_adapter *padapter)
35904 +{
35905 + u8 EntryId = 0;
35906 + struct mlme_priv *mlmepriv = &padapter->mlmepriv;
35907 + struct sta_priv * pstapriv = &padapter->stapriv;
35908 + struct sta_info *psta;
35909 + struct security_priv* psecuritypriv=&(padapter->securitypriv);
35910 + struct mlme_ext_info *pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
35911 +
35912 + {
35913 + u8 val8;
35914 +
35915 + if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X) {
35916 + val8 = 0xcc;
35917 + #ifdef CONFIG_WAPI_SUPPORT
35918 + } else if (padapter->wapiInfo.bWapiEnable && pmlmeinfo->auth_algo == dot11AuthAlgrthm_WAPI) {
35919 + //Disable TxUseDefaultKey, RxUseDefaultKey, RxBroadcastUseDefaultKey.
35920 + val8 = 0x4c;
35921 + #endif
35922 + } else {
35923 + val8 = 0xcf;
35924 + }
35925 + rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
35926 + }
35927 +
35928 + #if 0
35929 + if ( ( padapter->securitypriv.dot11PrivacyAlgrthm == _WEP40_ ) ||
35930 + ( padapter->securitypriv.dot11PrivacyAlgrthm == _WEP104_ ))
35931 + {
35932 +
35933 + for(EntryId=0; EntryId<4; EntryId++)
35934 + {
35935 + if(EntryId == psecuritypriv->dot11PrivacyKeyIndex)
35936 + rtw_set_key(padapter,&padapter->securitypriv, EntryId, 1);
35937 + else
35938 + rtw_set_key(padapter,&padapter->securitypriv, EntryId, 0);
35939 + }
35940 +
35941 + }
35942 + else
35943 + #endif
35944 + if((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
35945 + (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
35946 + {
35947 + psta = rtw_get_stainfo(pstapriv, get_bssid(mlmepriv));
35948 + if (psta == NULL) {
35949 + //DEBUG_ERR( ("Set wpa_set_encryption: Obtain Sta_info fail \n"));
35950 + }
35951 + else
35952 + {
35953 + //pairwise key
35954 + rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE);
35955 + //group key
35956 + rtw_set_key(padapter,&padapter->securitypriv,padapter->securitypriv.dot118021XGrpKeyid, 0);
35957 + }
35958 + }
35959 +}
35960 +
35961 +void sreset_restore_network_station(_adapter *padapter)
35962 +{
35963 + struct mlme_priv *mlmepriv = &padapter->mlmepriv;
35964 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
35965 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
35966 +
35967 + #if 0
35968 + {
35969 + //=======================================================
35970 + // reset related register of Beacon control
35971 +
35972 + //set MSR to nolink
35973 + Set_MSR(padapter, _HW_STATE_NOLINK_);
35974 + // reject all data frame
35975 + rtw_write16(padapter, REG_RXFLTMAP2,0x00);
35976 + //reset TSF
35977 + rtw_write8(padapter, REG_DUAL_TSF_RST, (BIT(0)|BIT(1)));
35978 +
35979 + // disable update TSF
35980 + SetBcnCtrlReg(padapter, BIT(4), 0);
35981 +
35982 + //=======================================================
35983 + }
35984 + #endif
35985 +
35986 + rtw_setopmode_cmd(padapter, Ndis802_11Infrastructure);
35987 +
35988 + {
35989 + u8 threshold;
35990 + #ifdef CONFIG_USB_HCI
35991 + // TH=1 => means that invalidate usb rx aggregation
35992 + // TH=0 => means that validate usb rx aggregation, use init value.
35993 + if(mlmepriv->htpriv.ht_option) {
35994 + if(padapter->registrypriv.wifi_spec==1)
35995 + threshold = 1;
35996 + else
35997 + threshold = 0;
35998 + rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
35999 + } else {
36000 + threshold = 1;
36001 + rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
36002 + }
36003 + #endif
36004 + }
36005 +
36006 + set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
36007 +
36008 + //disable dynamic functions, such as high power, DIG
36009 + //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
36010 +
36011 + rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pmlmeinfo->network.MacAddress);
36012 +
36013 + {
36014 + u8 join_type = 0;
36015 + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
36016 + }
36017 +
36018 + Set_MSR(padapter, (pmlmeinfo->state & 0x3));
36019 +
36020 + mlmeext_joinbss_event_callback(padapter, 1);
36021 + //restore Sequence No.
36022 + rtw_write8(padapter,0x4dc,padapter->xmitpriv.nqos_ssn);
36023 +
36024 + sreset_restore_security_station(padapter);
36025 +}
36026 +
36027 +void sreset_restore_network_status(_adapter *padapter)
36028 +{
36029 + struct mlme_priv *mlmepriv = &padapter->mlmepriv;
36030 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
36031 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
36032 +
36033 + if (check_fwstate(mlmepriv, WIFI_STATION_STATE)) {
36034 + DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_STATION_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
36035 + sreset_restore_network_station(padapter);
36036 + } else if (check_fwstate(mlmepriv, WIFI_AP_STATE)) {
36037 + DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_AP_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
36038 + rtw_ap_restore_network(padapter);
36039 + } else if (check_fwstate(mlmepriv, WIFI_ADHOC_STATE)) {
36040 + DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_ADHOC_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
36041 + } else {
36042 + DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - ???\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
36043 + }
36044 +}
36045 +
36046 +void sreset_stop_adapter(_adapter *padapter)
36047 +{
36048 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
36049 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
36050 +
36051 + if (padapter == NULL)
36052 + return;
36053 +
36054 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
36055 +
36056 + if (!rtw_netif_queue_stopped(padapter->pnetdev))
36057 + rtw_netif_stop_queue(padapter->pnetdev);
36058 +
36059 + rtw_cancel_all_timer(padapter);
36060 +
36061 + /* TODO: OS and HCI independent */
36062 + #if defined(PLATFORM_LINUX) && defined(CONFIG_USB_HCI)
36063 + tasklet_kill(&pxmitpriv->xmit_tasklet);
36064 + #endif
36065 +
36066 + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
36067 + rtw_scan_abort(padapter);
36068 +
36069 + if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
36070 + _rtw_join_timeout_handler(padapter);
36071 +
36072 +}
36073 +
36074 +void sreset_start_adapter(_adapter *padapter)
36075 +{
36076 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
36077 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
36078 +
36079 + if (padapter == NULL)
36080 + return;
36081 +
36082 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
36083 +
36084 + if (check_fwstate(pmlmepriv, _FW_LINKED)) {
36085 + sreset_restore_network_status(padapter);
36086 + }
36087 +
36088 + /* TODO: OS and HCI independent */
36089 + #if defined(PLATFORM_LINUX) && defined(CONFIG_USB_HCI)
36090 + tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
36091 + #endif
36092 +
36093 + _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
36094 +
36095 + if (rtw_netif_queue_stopped(padapter->pnetdev))
36096 + rtw_netif_wake_queue(padapter->pnetdev);
36097 +
36098 +}
36099 +
36100 +void sreset_reset(_adapter *padapter)
36101 +{
36102 +#ifdef DBG_CONFIG_ERROR_RESET
36103 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
36104 + struct sreset_priv *psrtpriv = &pHalData->srestpriv;
36105 + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
36106 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
36107 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
36108 + _irqL irqL;
36109 + u32 start = rtw_get_current_time();
36110 +
36111 + DBG_871X("%s\n", __FUNCTION__);
36112 +
36113 + psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
36114 +
36115 + _enter_pwrlock(&pwrpriv->lock);
36116 +
36117 + psrtpriv->silent_reset_inprogress = _TRUE;
36118 + pwrpriv->change_rfpwrstate = rf_off;
36119 +
36120 + sreset_stop_adapter(padapter);
36121 + #ifdef CONFIG_CONCURRENT_MODE
36122 + sreset_stop_adapter(padapter->pbuddy_adapter);
36123 + #endif
36124 +
36125 + #ifdef CONFIG_IPS
36126 + _ips_enter(padapter);
36127 + _ips_leave(padapter);
36128 + #endif
36129 +
36130 + sreset_start_adapter(padapter);
36131 + #ifdef CONFIG_CONCURRENT_MODE
36132 + sreset_start_adapter(padapter->pbuddy_adapter);
36133 + #endif
36134 +
36135 + psrtpriv->silent_reset_inprogress = _FALSE;
36136 +
36137 + _exit_pwrlock(&pwrpriv->lock);
36138 +
36139 + DBG_871X("%s done in %d ms\n", __FUNCTION__, rtw_get_passing_time_ms(start));
36140 +#endif
36141 +}
36142 +
36143 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c b/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c
36144 index 70b25c9..f818a0c 100644
36145 --- a/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c
36146 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c
36147 @@ -15,8 +15,8 @@
36148 * this program; if not, write to the Free Software Foundation, Inc.,
36149 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
36150 *
36151 - *
36152 -******************************************************************************/
36153 + *
36154 + ******************************************************************************/
36155 #define _RTW_STA_MGT_C_
36156
36157 #include <drv_conf.h>
36158 @@ -35,7 +35,7 @@
36159
36160 #include <sta_info.h>
36161
36162 -
36163 +void _rtw_init_stainfo(struct sta_info *psta);
36164 void _rtw_init_stainfo(struct sta_info *psta)
36165 {
36166
36167 @@ -84,6 +84,8 @@ _func_enter_;
36168 psta->under_exist_checking = 0;
36169 #endif // CONFIG_TX_MCAST2UNI
36170
36171 + psta->keep_alive_trycnt = 0;
36172 +
36173 #endif // CONFIG_AP_MODE
36174
36175 _func_exit_;
36176 @@ -94,7 +96,7 @@ u32 _rtw_init_sta_priv(struct sta_priv *pstapriv)
36177 {
36178 struct sta_info *psta;
36179 s32 i;
36180 -
36181 +
36182 _func_enter_;
36183
36184 pstapriv->pallocated_stainfo_buf = rtw_zvmalloc (sizeof(struct sta_info) * NUM_STA+ 4);
36185 @@ -128,6 +130,8 @@ _func_enter_;
36186 psta++;
36187 }
36188
36189 +
36190 +
36191 #ifdef CONFIG_AP_MODE
36192
36193 pstapriv->sta_dz_bitmap = 0;
36194 @@ -135,18 +139,22 @@ _func_enter_;
36195
36196 _rtw_init_listhead(&pstapriv->asoc_list);
36197 _rtw_init_listhead(&pstapriv->auth_list);
36198 -
36199 _rtw_spinlock_init(&pstapriv->asoc_list_lock);
36200 - _rtw_spinlock_init(&pstapriv->auth_list_lock);
36201 -
36202 + _rtw_spinlock_init(&pstapriv->auth_list_lock);
36203 + pstapriv->asoc_list_cnt = 0;
36204 + pstapriv->auth_list_cnt = 0;
36205 +
36206 pstapriv->auth_to = 3; // 3*2 = 6 sec
36207 pstapriv->assoc_to = 3;
36208 //pstapriv->expire_to = 900;// 900*2 = 1800 sec = 30 min, expire after no any traffic.
36209 //pstapriv->expire_to = 30;// 30*2 = 60 sec = 1 min, expire after no any traffic.
36210 +#ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
36211 + pstapriv->expire_to = 3; // 3*2 = 6 sec
36212 +#else
36213 pstapriv->expire_to = 60;// 60*2 = 120 sec = 2 min, expire after no any traffic.
36214 -
36215 +#endif
36216 pstapriv->max_num_sta = NUM_STA;
36217 -
36218 +
36219 #endif
36220
36221 _func_exit_;
36222 @@ -155,6 +163,25 @@ _func_exit_;
36223
36224 }
36225
36226 +inline int rtw_stainfo_offset(struct sta_priv *stapriv, struct sta_info *sta)
36227 +{
36228 + int offset = (((u8 *)sta) - stapriv->pstainfo_buf)/sizeof(struct sta_info);
36229 +
36230 + if (!stainfo_offset_valid(offset))
36231 + DBG_871X("%s invalid offset(%d), out of range!!!", __func__, offset);
36232 +
36233 + return offset;
36234 +}
36235 +
36236 +inline struct sta_info *rtw_get_stainfo_by_offset(struct sta_priv *stapriv, int offset)
36237 +{
36238 + if (!stainfo_offset_valid(offset))
36239 + DBG_871X("%s invalid offset(%d), out of range!!!", __func__, offset);
36240 +
36241 + return (struct sta_info *)(stapriv->pstainfo_buf + offset * sizeof(struct sta_info));
36242 +}
36243 +
36244 +void _rtw_free_sta_xmit_priv_lock(struct sta_xmit_priv *psta_xmitpriv);
36245 void _rtw_free_sta_xmit_priv_lock(struct sta_xmit_priv *psta_xmitpriv)
36246 {
36247 _func_enter_;
36248 @@ -180,6 +207,7 @@ _func_exit_;
36249
36250 }
36251
36252 +void rtw_mfree_stainfo(struct sta_info *psta);
36253 void rtw_mfree_stainfo(struct sta_info *psta)
36254 {
36255 _func_enter_;
36256 @@ -195,6 +223,7 @@ _func_exit_;
36257
36258
36259 // this function is used to free the memory of lock || sema for all stainfos
36260 +void rtw_mfree_all_stainfo(struct sta_priv *pstapriv );
36261 void rtw_mfree_all_stainfo(struct sta_priv *pstapriv )
36262 {
36263 _irqL irqL;
36264 @@ -222,9 +251,13 @@ _func_exit_;
36265
36266 }
36267
36268 -
36269 +void rtw_mfree_sta_priv_lock(struct sta_priv *pstapriv);
36270 void rtw_mfree_sta_priv_lock(struct sta_priv *pstapriv)
36271 {
36272 +#ifdef CONFIG_AP_MODE
36273 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
36274 +#endif
36275 +
36276 rtw_mfree_all_stainfo(pstapriv); //be done before free sta_hash_lock
36277
36278 _rtw_spinlock_free(&pstapriv->free_sta_queue.lock);
36279 @@ -235,15 +268,46 @@ void rtw_mfree_sta_priv_lock(struct sta_priv *pstapriv)
36280
36281 #ifdef CONFIG_AP_MODE
36282 _rtw_spinlock_free(&pstapriv->asoc_list_lock);
36283 - _rtw_spinlock_free(&pstapriv->auth_list_lock);
36284 + _rtw_spinlock_free(&pstapriv->auth_list_lock);
36285 + _rtw_spinlock_free(&pacl_list->acl_node_q.lock);
36286 #endif
36287
36288 }
36289
36290 u32 _rtw_free_sta_priv(struct sta_priv *pstapriv)
36291 {
36292 + _irqL irqL;
36293 + _list *phead, *plist;
36294 + struct sta_info *psta = NULL;
36295 + struct recv_reorder_ctrl *preorder_ctrl;
36296 + int index;
36297 +
36298 _func_enter_;
36299 if(pstapriv){
36300 +
36301 + /* delete all reordering_ctrl_timer */
36302 + _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
36303 + for(index = 0; index < NUM_STA; index++)
36304 + {
36305 + phead = &(pstapriv->sta_hash[index]);
36306 + plist = get_next(phead);
36307 +
36308 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
36309 + {
36310 + int i;
36311 + psta = LIST_CONTAINOR(plist, struct sta_info ,hash_list);
36312 + plist = get_next(plist);
36313 +
36314 + for(i=0; i < 16 ; i++)
36315 + {
36316 + preorder_ctrl = &psta->recvreorder_ctrl[i];
36317 + _cancel_timer_ex(&preorder_ctrl->reordering_ctrl_timer);
36318 + }
36319 + }
36320 + }
36321 + _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
36322 + /*===============================*/
36323 +
36324 rtw_mfree_sta_priv_lock(pstapriv);
36325
36326 if(pstapriv->pallocated_stainfo_buf) {
36327 @@ -273,11 +337,13 @@ _func_enter_;
36328
36329 pfree_sta_queue = &pstapriv->free_sta_queue;
36330
36331 - _enter_critical_bh(&(pfree_sta_queue->lock), &irqL);
36332 + //_enter_critical_bh(&(pfree_sta_queue->lock), &irqL);
36333 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
36334
36335 if (_rtw_queue_empty(pfree_sta_queue) == _TRUE)
36336 {
36337 - _exit_critical_bh(&(pfree_sta_queue->lock), &irqL);
36338 + //_exit_critical_bh(&(pfree_sta_queue->lock), &irqL);
36339 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
36340 psta = NULL;
36341 }
36342 else
36343 @@ -285,8 +351,8 @@ _func_enter_;
36344 psta = LIST_CONTAINOR(get_next(&pfree_sta_queue->queue), struct sta_info, list);
36345
36346 rtw_list_delete(&(psta->list));
36347 -
36348 - _exit_critical_bh(&(pfree_sta_queue->lock), &irqL);
36349 +
36350 + //_exit_critical_bh(&(pfree_sta_queue->lock), &irqL);
36351
36352 tmp_aid = psta->aid;
36353
36354 @@ -305,13 +371,13 @@ _func_enter_;
36355 }
36356 phash_list = &(pstapriv->sta_hash[index]);
36357
36358 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
36359 + //_enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
36360
36361 rtw_list_insert_tail(&psta->hash_list, phash_list);
36362
36363 pstapriv->asoc_sta_count ++ ;
36364
36365 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
36366 + //_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
36367
36368 // Commented by Albert 2009/08/13
36369 // For the SMC router, the sequence number of first packet of WPS handshake will be 0.
36370 @@ -336,7 +402,7 @@ _func_enter_;
36371 init_off_ch_timer(pstapriv->padapter, psta);
36372 init_handshake_timer(pstapriv->padapter, psta);
36373 init_tdls_alive_timer(pstapriv->padapter, psta);
36374 -#endif
36375 +#endif //CONFIG_TDLS
36376
36377 //for A-MPDU Rx reordering buffer control
36378 for(i=0; i < 16 ; i++)
36379 @@ -363,14 +429,18 @@ _func_enter_;
36380
36381
36382 //init for DM
36383 - psta->rssi_stat.UndecoratedSmoothedPWDB = (-1);
36384 + psta->rssi_stat.UndecoratedSmoothedPWDB = 0;
36385 psta->rssi_stat.UndecoratedSmoothedCCK = (-1);
36386
36387 + /* init for the sequence number of received management frame */
36388 + psta->RxMgmtFrameSeqNum = 0xffff;
36389 }
36390
36391 exit:
36392 -
36393 -_func_exit_;
36394 +
36395 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL2);
36396 +
36397 +_func_exit_;
36398
36399 return psta;
36400
36401 @@ -388,6 +458,7 @@ u32 rtw_free_stainfo(_adapter *padapter , struct sta_info *psta)
36402 struct sta_xmit_priv *pstaxmitpriv;
36403 struct xmit_priv *pxmitpriv= &padapter->xmitpriv;
36404 struct sta_priv *pstapriv = &padapter->stapriv;
36405 + struct hw_xmit *phwxmit;
36406
36407
36408 _func_enter_;
36409 @@ -395,6 +466,11 @@ _func_enter_;
36410 if (psta == NULL)
36411 goto exit;
36412
36413 +
36414 + _enter_critical_bh(&psta->lock, &irqL0);
36415 + psta->state &= ~_FW_LINKED;
36416 + _exit_critical_bh(&psta->lock, &irqL0);
36417 +
36418 pfree_sta_queue = &pstapriv->free_sta_queue;
36419
36420
36421 @@ -409,40 +485,42 @@ _func_enter_;
36422 rtw_free_xmitframe_queue(pxmitpriv, &psta->sleep_q);
36423 psta->sleepq_len = 0;
36424
36425 + //vo
36426 //_enter_critical_bh(&(pxmitpriv->vo_pending.lock), &irqL0);
36427 -
36428 rtw_free_xmitframe_queue( pxmitpriv, &pstaxmitpriv->vo_q.sta_pending);
36429 -
36430 rtw_list_delete(&(pstaxmitpriv->vo_q.tx_pending));
36431 -
36432 + phwxmit = pxmitpriv->hwxmits;
36433 + phwxmit->accnt -= pstaxmitpriv->vo_q.qcnt;
36434 + pstaxmitpriv->vo_q.qcnt = 0;
36435 //_exit_critical_bh(&(pxmitpriv->vo_pending.lock), &irqL0);
36436 -
36437
36438 + //vi
36439 //_enter_critical_bh(&(pxmitpriv->vi_pending.lock), &irqL0);
36440 -
36441 rtw_free_xmitframe_queue( pxmitpriv, &pstaxmitpriv->vi_q.sta_pending);
36442 -
36443 rtw_list_delete(&(pstaxmitpriv->vi_q.tx_pending));
36444 -
36445 + phwxmit = pxmitpriv->hwxmits+1;
36446 + phwxmit->accnt -= pstaxmitpriv->vi_q.qcnt;
36447 + pstaxmitpriv->vi_q.qcnt = 0;
36448 //_exit_critical_bh(&(pxmitpriv->vi_pending.lock), &irqL0);
36449
36450 -
36451 - //_enter_critical_bh(&(pxmitpriv->bk_pending.lock), &irqL0);
36452 -
36453 - rtw_free_xmitframe_queue( pxmitpriv, &pstaxmitpriv->bk_q.sta_pending);
36454 -
36455 - rtw_list_delete(&(pstaxmitpriv->bk_q.tx_pending));
36456 -
36457 - //_exit_critical_bh(&(pxmitpriv->bk_pending.lock), &irqL0);
36458 -
36459 + //be
36460 //_enter_critical_bh(&(pxmitpriv->be_pending.lock), &irqL0);
36461 -
36462 rtw_free_xmitframe_queue( pxmitpriv, &pstaxmitpriv->be_q.sta_pending);
36463 -
36464 rtw_list_delete(&(pstaxmitpriv->be_q.tx_pending));
36465 -
36466 + phwxmit = pxmitpriv->hwxmits+2;
36467 + phwxmit->accnt -= pstaxmitpriv->be_q.qcnt;
36468 + pstaxmitpriv->be_q.qcnt = 0;
36469 //_exit_critical_bh(&(pxmitpriv->be_pending.lock), &irqL0);
36470
36471 + //bk
36472 + //_enter_critical_bh(&(pxmitpriv->bk_pending.lock), &irqL0);
36473 + rtw_free_xmitframe_queue( pxmitpriv, &pstaxmitpriv->bk_q.sta_pending);
36474 + rtw_list_delete(&(pstaxmitpriv->bk_q.tx_pending));
36475 + phwxmit = pxmitpriv->hwxmits+3;
36476 + phwxmit->accnt -= pstaxmitpriv->bk_q.qcnt;
36477 + pstaxmitpriv->bk_q.qcnt = 0;
36478 + //_exit_critical_bh(&(pxmitpriv->bk_pending.lock), &irqL0);
36479 +
36480 _exit_critical_bh(&pxmitpriv->lock, &irqL0);
36481
36482 rtw_list_delete(&psta->hash_list);
36483 @@ -450,9 +528,9 @@ _func_enter_;
36484 pstapriv->asoc_sta_count --;
36485
36486
36487 - // re-init sta_info; 20061114
36488 - _rtw_init_sta_xmit_priv(&psta->sta_xmitpriv);
36489 - _rtw_init_sta_recv_priv(&psta->sta_recvpriv);
36490 + // re-init sta_info; 20061114 // will be init in alloc_stainfo
36491 + //_rtw_init_sta_xmit_priv(&psta->sta_xmitpriv);
36492 + //_rtw_init_sta_recv_priv(&psta->sta_recvpriv);
36493
36494 _cancel_timer_ex(&psta->addba_retry_timer);
36495
36496 @@ -463,7 +541,7 @@ _func_enter_;
36497 _cancel_timer_ex(&psta->off_ch_timer);
36498 _cancel_timer_ex(&psta->alive_timer1);
36499 _cancel_timer_ex(&psta->alive_timer2);
36500 -#endif
36501 +#endif //CONFIG_TDLS
36502
36503 //for A-MPDU Rx reordering buffer control, cancel reordering_ctrl_timer
36504 for(i=0; i < 16 ; i++)
36505 @@ -509,9 +587,11 @@ _func_enter_;
36506 rtw_list_delete(&psta->asoc_list);
36507 _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL0);
36508 */
36509 -
36510 _enter_critical_bh(&pstapriv->auth_list_lock, &irqL0);
36511 - rtw_list_delete(&psta->auth_list);
36512 + if (!rtw_is_list_empty(&psta->auth_list)) {
36513 + rtw_list_delete(&psta->auth_list);
36514 + pstapriv->auth_list_cnt--;
36515 + }
36516 _exit_critical_bh(&pstapriv->auth_list_lock, &irqL0);
36517
36518 psta->expire_to = 0;
36519 @@ -534,7 +614,7 @@ _func_enter_;
36520
36521 //rtw_indicate_sta_disassoc_event(padapter, psta);
36522
36523 - if (pstapriv->sta_aid[psta->aid - 1] == psta)
36524 + if ((psta->aid >0)&&(pstapriv->sta_aid[psta->aid - 1] == psta))
36525 {
36526 pstapriv->sta_aid[psta->aid - 1] = NULL;
36527 psta->aid = 0;
36528 @@ -548,11 +628,13 @@ _func_enter_;
36529
36530 #endif // CONFIG_AP_MODE
36531
36532 - _enter_critical_bh(&(pfree_sta_queue->lock), &irqL0);
36533 + _rtw_spinlock_free(&psta->lock);
36534 +
36535 + //_enter_critical_bh(&(pfree_sta_queue->lock), &irqL0);
36536 rtw_list_insert_tail(&psta->list, get_list_head(pfree_sta_queue));
36537 - _exit_critical_bh(&(pfree_sta_queue->lock), &irqL0);
36538 + //_exit_critical_bh(&(pfree_sta_queue->lock), &irqL0);
36539
36540 -exit:
36541 +exit:
36542
36543 _func_exit_;
36544
36545 @@ -713,8 +795,54 @@ _func_exit_;
36546
36547 }
36548
36549 -u8 rtw_access_ctrl(struct wlan_acl_pool* pacl_list, u8 * mac_addr)
36550 +u8 rtw_access_ctrl(_adapter *padapter, u8 *mac_addr)
36551 {
36552 - return _TRUE;
36553 + u8 res = _TRUE;
36554 +#ifdef CONFIG_AP_MODE
36555 + _irqL irqL;
36556 + _list *plist, *phead;
36557 + struct rtw_wlan_acl_node *paclnode;
36558 + u8 match = _FALSE;
36559 + struct sta_priv *pstapriv = &padapter->stapriv;
36560 + struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
36561 + _queue *pacl_node_q =&pacl_list->acl_node_q;
36562 +
36563 + _enter_critical_bh(&(pacl_node_q->lock), &irqL);
36564 + phead = get_list_head(pacl_node_q);
36565 + plist = get_next(phead);
36566 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
36567 + {
36568 + paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
36569 + plist = get_next(plist);
36570 +
36571 + if(_rtw_memcmp(paclnode->addr, mac_addr, ETH_ALEN))
36572 + {
36573 + if(paclnode->valid == _TRUE)
36574 + {
36575 + match = _TRUE;
36576 + break;
36577 + }
36578 + }
36579 + }
36580 + _exit_critical_bh(&(pacl_node_q->lock), &irqL);
36581 +
36582 +
36583 + if(pacl_list->mode == 1)//accept unless in deny list
36584 + {
36585 + res = (match == _TRUE) ? _FALSE:_TRUE;
36586 + }
36587 + else if(pacl_list->mode == 2)//deny unless in accept list
36588 + {
36589 + res = (match == _TRUE) ? _TRUE:_FALSE;
36590 + }
36591 + else
36592 + {
36593 + res = _TRUE;
36594 + }
36595 +
36596 +#endif
36597 +
36598 + return res;
36599 +
36600 }
36601
36602 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c b/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c
36603 new file mode 100644
36604 index 0000000..e8c4d4c
36605 --- /dev/null
36606 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c
36607 @@ -0,0 +1,2941 @@
36608 +/******************************************************************************
36609 + *
36610 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
36611 + *
36612 + * This program is free software; you can redistribute it and/or modify it
36613 + * under the terms of version 2 of the GNU General Public License as
36614 + * published by the Free Software Foundation.
36615 + *
36616 + * This program is distributed in the hope that it will be useful, but WITHOUT
36617 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
36618 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
36619 + * more details.
36620 + *
36621 + * You should have received a copy of the GNU General Public License along with
36622 + * this program; if not, write to the Free Software Foundation, Inc.,
36623 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
36624 + *
36625 + *
36626 + ******************************************************************************/
36627 +#define _RTW_TDLS_C_
36628 +
36629 +#include <drv_types.h>
36630 +#include <ethernet.h>
36631 +#include <rtw_tdls.h>
36632 +#include <wifi.h>
36633 +
36634 +#ifdef CONFIG_TDLS
36635 +extern unsigned char MCS_rate_2R[16];
36636 +extern unsigned char MCS_rate_1R[16];
36637 +extern void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame);
36638 +extern s32 rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe);
36639 +
36640 +void rtw_reset_tdls_info(_adapter* padapter)
36641 +{
36642 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
36643 +
36644 + ptdlsinfo->ap_prohibited = _FALSE;
36645 + ptdlsinfo->setup_state = TDLS_STATE_NONE;
36646 + ptdlsinfo->sta_cnt = 0;
36647 + ptdlsinfo->sta_maximum = _FALSE;
36648 + ptdlsinfo->macid_index= 6;
36649 + ptdlsinfo->clear_cam= 0;
36650 + ptdlsinfo->ch_sensing = 0;
36651 + ptdlsinfo->cur_channel = 0;
36652 + ptdlsinfo->candidate_ch = 1; //when inplement channel switching, default candidate channel is 1
36653 + ptdlsinfo->watchdog_count = 0;
36654 + ptdlsinfo->dev_discovered = 0;
36655 +
36656 +#ifdef CONFIG_WFD
36657 + ptdlsinfo->wfd_info = &padapter->wfd_info;
36658 +#endif //CONFIG_WFD
36659 +}
36660 +
36661 +int rtw_init_tdls_info(_adapter* padapter)
36662 +{
36663 + int res = _SUCCESS;
36664 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
36665 +
36666 + ptdlsinfo->enable = 1;
36667 + rtw_reset_tdls_info(padapter);
36668 +
36669 + _rtw_spinlock_init(&ptdlsinfo->cmd_lock);
36670 + _rtw_spinlock_init(&ptdlsinfo->hdl_lock);
36671 +
36672 + return res;
36673 +
36674 +}
36675 +
36676 +void rtw_free_tdls_info(struct tdls_info *ptdlsinfo)
36677 +{
36678 + _rtw_spinlock_free(&ptdlsinfo->cmd_lock);
36679 + _rtw_spinlock_free(&ptdlsinfo->hdl_lock);
36680 +
36681 + _rtw_memset(ptdlsinfo, 0, sizeof(struct tdls_info) );
36682 +
36683 +}
36684 +
36685 +void issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, struct sta_info *ptdls_sta, unsigned int power_mode)
36686 +{
36687 + struct xmit_frame *pmgntframe;
36688 + struct pkt_attrib *pattrib;
36689 + unsigned char *pframe;
36690 + struct rtw_ieee80211_hdr *pwlanhdr;
36691 + unsigned short *fctrl;
36692 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
36693 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
36694 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
36695 +
36696 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
36697 + {
36698 + return;
36699 + }
36700 +
36701 + //update attribute
36702 + pattrib = &pmgntframe->attrib;
36703 + update_mgntframe_attrib(padapter, pattrib);
36704 +
36705 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
36706 +
36707 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
36708 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
36709 +
36710 + fctrl = &(pwlanhdr->frame_ctl);
36711 + *(fctrl) = 0;
36712 +// SetToDs(fctrl);
36713 + if (power_mode)
36714 + {
36715 + SetPwrMgt(fctrl);
36716 + }
36717 +
36718 + _rtw_memcpy(pwlanhdr->addr1, ptdls_sta->hwaddr, ETH_ALEN);
36719 + _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
36720 + _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
36721 +
36722 + ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
36723 + ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
36724 + pattrib->seqnum = ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority];
36725 + SetSeqNum(pwlanhdr, pattrib->seqnum);
36726 +
36727 + SetFrameSubType(pframe, WIFI_DATA_NULL);
36728 +
36729 + pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
36730 + pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
36731 +
36732 + pattrib->last_txcmdsz = pattrib->pktlen;
36733 + dump_mgntframe(padapter, pmgntframe);
36734 +
36735 + return;
36736 +}
36737 +
36738 +s32 update_tdls_attrib(_adapter *padapter, struct pkt_attrib *pattrib)
36739 +{
36740 +
36741 + struct sta_info *psta = NULL;
36742 + struct sta_priv *pstapriv = &padapter->stapriv;
36743 + struct security_priv *psecuritypriv = &padapter->securitypriv;
36744 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
36745 + struct qos_priv *pqospriv= &pmlmepriv->qospriv;
36746 +
36747 + s32 res=_SUCCESS;
36748 + sint bmcast;
36749 +
36750 + bmcast = IS_MCAST(pattrib->ra);
36751 +
36752 + psta = rtw_get_stainfo(pstapriv, pattrib->ra);
36753 + if (psta == NULL) {
36754 + res =_FAIL;
36755 + goto exit;
36756 + }
36757 +
36758 + pattrib->mac_id = psta->mac_id;
36759 +
36760 + pattrib->psta = psta;
36761 +
36762 + pattrib->ack_policy = 0;
36763 + // get ether_hdr_len
36764 + pattrib->pkt_hdrlen = ETH_HLEN;//(pattrib->ether_type == 0x8100) ? (14 + 4 ): 14; //vlan tag
36765 +
36766 + if (pqospriv->qos_option && psta->qos_option) {
36767 + pattrib->priority = 1; //tdls management frame should be AC_BK
36768 + pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN;
36769 + pattrib->subtype = WIFI_QOS_DATA_TYPE;
36770 + } else {
36771 + pattrib->hdrlen = WLAN_HDR_A3_LEN;
36772 + pattrib->subtype = WIFI_DATA_TYPE;
36773 + pattrib->priority = 0;
36774 + }
36775 +
36776 + if (psta->ieee8021x_blocked == _TRUE)
36777 + {
36778 + pattrib->encrypt = 0;
36779 + }
36780 + else
36781 + {
36782 + GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, bmcast);
36783 +
36784 + switch(psecuritypriv->dot11AuthAlgrthm)
36785 + {
36786 + case dot11AuthAlgrthm_Open:
36787 + case dot11AuthAlgrthm_Shared:
36788 + case dot11AuthAlgrthm_Auto:
36789 + pattrib->key_idx = (u8)psecuritypriv->dot11PrivacyKeyIndex;
36790 + break;
36791 + case dot11AuthAlgrthm_8021X:
36792 + pattrib->key_idx = 0;
36793 + break;
36794 + default:
36795 + pattrib->key_idx = 0;
36796 + break;
36797 + }
36798 + }
36799 +
36800 + switch (pattrib->encrypt)
36801 + {
36802 + case _WEP40_:
36803 + case _WEP104_:
36804 + pattrib->iv_len = 4;
36805 + pattrib->icv_len = 4;
36806 + break;
36807 + case _TKIP_:
36808 + pattrib->iv_len = 8;
36809 + pattrib->icv_len = 4;
36810 + if(padapter->securitypriv.busetkipkey==_FAIL)
36811 + {
36812 + res =_FAIL;
36813 + goto exit;
36814 + }
36815 + break;
36816 + case _AES_:
36817 + pattrib->iv_len = 8;
36818 + pattrib->icv_len = 8;
36819 + break;
36820 + default:
36821 + pattrib->iv_len = 0;
36822 + pattrib->icv_len = 0;
36823 + break;
36824 + }
36825 +
36826 + if (pattrib->encrypt &&
36827 + ((padapter->securitypriv.sw_encrypt == _TRUE) || (psecuritypriv->hw_decrypted == _FALSE)))
36828 + {
36829 + pattrib->bswenc = _TRUE;
36830 + } else {
36831 + pattrib->bswenc = _FALSE;
36832 + }
36833 +
36834 + //qos_en, ht_en, init rate, ,bw, ch_offset, sgi
36835 + pattrib->qos_en = psta->qos_option;
36836 + pattrib->ht_en = psta->htpriv.ht_option;
36837 + pattrib->raid = psta->raid;
36838 + pattrib->bwmode = psta->htpriv.bwmode;
36839 + pattrib->ch_offset = psta->htpriv.ch_offset;
36840 + pattrib->sgi= psta->htpriv.sgi;
36841 + pattrib->ampdu_en = _FALSE;
36842 +
36843 + //if(pattrib->ht_en && psta->htpriv.ampdu_enable)
36844 + //{
36845 + // if(psta->htpriv.agg_enable_bitmap & BIT(pattrib->priority))
36846 + // pattrib->ampdu_en = _TRUE;
36847 + //}
36848 +
36849 +exit:
36850 +
36851 + return res;
36852 +}
36853 +
36854 +void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta)
36855 +{
36856 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
36857 + struct sta_priv *pstapriv = &padapter->stapriv;
36858 + _irqL irqL;
36859 +
36860 + //free peer sta_info
36861 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
36862 + if(ptdlsinfo->sta_cnt != 0)
36863 + ptdlsinfo->sta_cnt--;
36864 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
36865 + if( ptdlsinfo->sta_cnt < (NUM_STA - 2) ) // -2: AP + BC/MC sta
36866 + {
36867 + ptdlsinfo->sta_maximum = _FALSE;
36868 + _rtw_memset( &ptdlsinfo->ss_record, 0x00, sizeof(struct tdls_ss_record) );
36869 + }
36870 + //ready to clear cam
36871 + if(ptdls_sta->mac_id!=0){
36872 + ptdlsinfo->clear_cam=ptdls_sta->mac_id;
36873 + rtw_setstakey_cmd(padapter, (u8 *)ptdls_sta, _TRUE);
36874 + }
36875 +
36876 + if(ptdlsinfo->sta_cnt==0){
36877 + rtw_tdls_cmd(padapter, myid(&(padapter->eeprompriv)), TDLS_RS_RCR);
36878 + ptdlsinfo->setup_state=TDLS_STATE_NONE;
36879 + }
36880 + else
36881 + DBG_871X("Remain tdls sta:%02x\n", ptdlsinfo->sta_cnt);
36882 +
36883 + rtw_free_stainfo(padapter, ptdls_sta);
36884 +
36885 +}
36886 +
36887 +// cam entry will be the same as mac_id
36888 +void rtw_tdls_set_mac_id(struct tdls_info *ptdlsinfo, struct sta_info *ptdls_sta)
36889 +{
36890 + if(ptdls_sta->mac_id==0)
36891 + {
36892 + ptdls_sta->mac_id = ptdlsinfo->macid_index;
36893 + if( (++ptdlsinfo->macid_index) > (NUM_STA -2) )
36894 + ptdlsinfo->macid_index= TDLS_INI_MACID_ENTRY;
36895 + }
36896 +}
36897 +
36898 +//TDLS encryption(if needed) will always be CCMP
36899 +void rtw_tdls_set_key(_adapter *adapter, struct rx_pkt_attrib *prx_pkt_attrib, struct sta_info *ptdls_sta)
36900 +{
36901 + if(prx_pkt_attrib->encrypt)
36902 + {
36903 + ptdls_sta->dot118021XPrivacy=_AES_;
36904 + rtw_setstakey_cmd(adapter, (u8*)ptdls_sta, _TRUE);
36905 + }
36906 +}
36907 +
36908 +void rtw_tdls_process_ht_cap(_adapter *adapter, struct sta_info *ptdls_sta, u8 *data, u8 Length)
36909 +{
36910 + /* save HT capabilities in the sta object */
36911 + _rtw_memset(&ptdls_sta->htpriv.ht_cap, 0, sizeof(struct rtw_ieee80211_ht_cap));
36912 + if (data && Length >= sizeof(struct rtw_ieee80211_ht_cap) )
36913 + {
36914 + ptdls_sta->flags |= WLAN_STA_HT;
36915 +
36916 + ptdls_sta->flags |= WLAN_STA_WME;
36917 +
36918 + _rtw_memcpy(&ptdls_sta->htpriv.ht_cap, data, sizeof(struct rtw_ieee80211_ht_cap));
36919 +
36920 + } else
36921 + ptdls_sta->flags &= ~WLAN_STA_HT;
36922 +
36923 + if(ptdls_sta->flags & WLAN_STA_HT)
36924 + {
36925 + if(adapter->registrypriv.ht_enable == _TRUE)
36926 + {
36927 + ptdls_sta->htpriv.ht_option = _TRUE;
36928 + }
36929 + else
36930 + {
36931 + ptdls_sta->htpriv.ht_option = _FALSE;
36932 + ptdls_sta->stat_code = _STATS_FAILURE_;
36933 + }
36934 + }
36935 +
36936 + //HT related cap
36937 + if(ptdls_sta->htpriv.ht_option)
36938 + {
36939 + //check if sta supports rx ampdu
36940 + if(adapter->registrypriv.ampdu_enable==1)
36941 + ptdls_sta->htpriv.ampdu_enable = _TRUE;
36942 +
36943 + //check if sta support s Short GI
36944 + if(ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40))
36945 + {
36946 + ptdls_sta->htpriv.sgi = _TRUE;
36947 + }
36948 +
36949 + // bwmode would still followed AP's setting
36950 + if(ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))
36951 + {
36952 + ptdls_sta->htpriv.bwmode = adapter->mlmeextpriv.cur_bwmode;
36953 + ptdls_sta->htpriv.ch_offset = adapter->mlmeextpriv.cur_ch_offset;
36954 + }
36955 + }
36956 +}
36957 +
36958 +u8 *rtw_tdls_set_ht_cap(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)
36959 +{
36960 + struct rtw_ieee80211_ht_cap ht_capie;
36961 + u8 rf_type;
36962 +
36963 + //HT capabilities
36964 + _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
36965 +
36966 + ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |IEEE80211_HT_CAP_SGI_20 |IEEE80211_HT_CAP_SM_PS |
36967 + IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_TX_STBC |IEEE80211_HT_CAP_DSSSCCK40;
36968 +
36969 + {
36970 + u32 rx_packet_offset, max_recvbuf_sz;
36971 + rtw_hal_get_def_var(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
36972 + rtw_hal_get_def_var(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
36973 + if(max_recvbuf_sz-rx_packet_offset>(8191-256))
36974 + ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
36975 + }
36976 +
36977 + ht_capie.ampdu_params_info = (IEEE80211_HT_CAP_AMPDU_FACTOR&0x03);
36978 +
36979 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
36980 + switch(rf_type)
36981 + {
36982 + case RF_1T1R:
36983 + ht_capie.cap_info |= 0x0100;//RX STBC One spatial stream
36984 + _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_1R, 16);
36985 + break;
36986 +
36987 + case RF_2T2R:
36988 + case RF_1T2R:
36989 + default:
36990 + ht_capie.cap_info|= 0x0200;//RX STBC two spatial stream
36991 + _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_2R, 16);
36992 + break;
36993 + }
36994 +
36995 + return(rtw_set_ie(pframe, _HT_CAPABILITY_IE_,
36996 + sizeof(struct rtw_ieee80211_ht_cap), (unsigned char*)&ht_capie, &(pattrib->pktlen)));
36997 +}
36998 +
36999 +u8 *rtw_tdls_set_sup_ch(struct mlme_ext_priv *pmlmeext, u8 *pframe, struct pkt_attrib *pattrib)
37000 +{
37001 + u8 sup_ch[ 30 * 2 ] = { 0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
37002 + do{
37003 + if( pmlmeext->channel_set[sup_ch_idx].ChannelNum <= 14 )
37004 + {
37005 + sup_ch[0] = 1; //First channel number
37006 + sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum; //Number of channel
37007 + }
37008 + else
37009 + {
37010 + sup_ch[idx_5g++] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;
37011 + sup_ch[idx_5g++] = 1;
37012 + }
37013 +
37014 + sup_ch_idx++;
37015 + }
37016 + while( pmlmeext->channel_set[sup_ch_idx].ChannelNum != 0 );
37017 + return(rtw_set_ie(pframe, _SUPPORTED_CH_IE_, idx_5g, sup_ch, &(pattrib->pktlen)));
37018 +}
37019 +
37020 +#ifdef CONFIG_WFD
37021 +void rtw_tdls_process_wfd_ie(struct tdls_info *ptdlsinfo, u8 *ptr, u8 length)
37022 +{
37023 + u8 wfd_ie[ 128 ] = { 0x00 };
37024 + u32 wfd_ielen = 0;
37025 + u32 wfd_offset = 0;
37026 + // Try to get the TCP port information when receiving the negotiation response.
37027 + //
37028 +
37029 + wfd_offset = 0;
37030 + wfd_offset = rtw_get_wfd_ie( ptr + wfd_offset, length - wfd_offset, wfd_ie, &wfd_ielen );
37031 + while( wfd_offset )
37032 + {
37033 + u8 attr_content[ 10 ] = { 0x00 };
37034 + u32 attr_contentlen = 0;
37035 + int i;
37036 +
37037 + DBG_871X( "[%s] WFD IE Found!!\n", __FUNCTION__ );
37038 + rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);
37039 + if ( attr_contentlen )
37040 + {
37041 + ptdlsinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
37042 + DBG_871X( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, ptdlsinfo->wfd_info->peer_rtsp_ctrlport );
37043 + }
37044 +
37045 + _rtw_memset( attr_content, 0x00, 10);
37046 + attr_contentlen = 0;
37047 + rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_LOCAL_IP_ADDR, attr_content, &attr_contentlen);
37048 + if ( attr_contentlen )
37049 + {
37050 + _rtw_memcpy(ptdlsinfo->wfd_info->peer_ip_address, ( attr_content + 1 ), 4);
37051 + DBG_871X( "[%s] Peer IP = %02u.%02u.%02u.%02u \n", __FUNCTION__,
37052 + ptdlsinfo->wfd_info->peer_ip_address[0], ptdlsinfo->wfd_info->peer_ip_address[1],
37053 + ptdlsinfo->wfd_info->peer_ip_address[2], ptdlsinfo->wfd_info->peer_ip_address[3]
37054 + );
37055 + }
37056 + wfd_offset = rtw_get_wfd_ie( ptr + wfd_offset, length - wfd_offset, wfd_ie, &wfd_ielen );
37057 + }
37058 +}
37059 +
37060 +void issue_tunneled_probe_req(_adapter *padapter)
37061 +{
37062 + struct xmit_frame *pmgntframe;
37063 + struct pkt_attrib *pattrib;
37064 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37065 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37066 + u8 baddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
37067 +
37068 + DBG_871X("[%s]\n", __FUNCTION__);
37069 +
37070 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37071 + {
37072 + return;
37073 + }
37074 +
37075 + //update attribute
37076 + pattrib = &pmgntframe->attrib;
37077 +
37078 + pmgntframe->frame_tag = DATA_FRAMETAG;
37079 + pattrib->ether_type = 0x890d;
37080 + pattrib->pctrl =0;
37081 +
37082 + _rtw_memcpy(pattrib->dst, baddr, ETH_ALEN);
37083 +
37084 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37085 +
37086 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
37087 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37088 +
37089 + update_tdls_attrib(padapter, pattrib);
37090 + pattrib->qsel=pattrib->priority;
37091 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TUNNELED_PROBE_REQ) != _SUCCESS) {
37092 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
37093 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37094 + goto exit;
37095 + }
37096 + rtw_dump_xframe(padapter, pmgntframe);
37097 +
37098 +exit:
37099 +
37100 + return;
37101 +}
37102 +
37103 +void issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame)
37104 +{
37105 + struct xmit_frame *pmgntframe;
37106 + struct pkt_attrib *pattrib;
37107 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37108 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37109 + struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
37110 +
37111 + DBG_871X("[%s]\n", __FUNCTION__);
37112 +
37113 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37114 + {
37115 + return;
37116 + }
37117 +
37118 + //update attribute
37119 + pattrib = &pmgntframe->attrib;
37120 +
37121 + pmgntframe->frame_tag = DATA_FRAMETAG;
37122 + pattrib->ether_type = 0x890d;
37123 + pattrib->pctrl =0;
37124 +
37125 + _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
37126 +
37127 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37128 +
37129 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
37130 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37131 +
37132 + update_tdls_attrib(padapter, pattrib);
37133 + pattrib->qsel=pattrib->priority;
37134 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TUNNELED_PROBE_RSP) != _SUCCESS) {
37135 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
37136 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37137 + goto exit;
37138 + }
37139 + rtw_dump_xframe(padapter, pmgntframe);
37140 +
37141 +exit:
37142 +
37143 + return;
37144 +}
37145 +#endif //CONFIG_WFD
37146 +
37147 +void issue_tdls_setup_req(_adapter *padapter, u8 *mac_addr)
37148 +{
37149 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
37150 + struct xmit_frame *pmgntframe;
37151 + struct pkt_attrib *pattrib;
37152 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37153 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37154 + struct sta_priv *pstapriv = &padapter->stapriv;
37155 + struct sta_info *ptdls_sta= NULL;
37156 + _irqL irqL;
37157 + static u8 dialogtoken = 0;
37158 + u32 timeout_interval= TPK_RESEND_COUNT * 1000; //retry timer should set at least 301 sec, using TPK_count counting 301 times.
37159 +
37160 + if(ptdlsinfo->ap_prohibited == _TRUE)
37161 + goto exit;
37162 +
37163 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37164 + {
37165 + return;
37166 + }
37167 +
37168 + //update attribute
37169 + pattrib = &pmgntframe->attrib;
37170 +
37171 + pmgntframe->frame_tag = DATA_FRAMETAG;
37172 + pattrib->ether_type = 0x890d;
37173 + pattrib->pctrl =0;
37174 +
37175 + _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
37176 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37177 +
37178 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
37179 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37180 +
37181 + update_tdls_attrib(padapter, pattrib);
37182 +
37183 + //init peer sta_info
37184 + ptdls_sta = rtw_get_stainfo(pstapriv, mac_addr);
37185 + if(ptdls_sta==NULL)
37186 + {
37187 + ptdls_sta = rtw_alloc_stainfo(pstapriv, mac_addr);
37188 + if(ptdls_sta)
37189 + {
37190 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
37191 + if(!(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE))
37192 + ptdlsinfo->sta_cnt++;
37193 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
37194 + if( ptdlsinfo->sta_cnt == (NUM_STA - 2) ) // -2: AP + BC/MC sta
37195 + {
37196 + ptdlsinfo->sta_maximum = _TRUE;
37197 + }
37198 + }
37199 + else
37200 + {
37201 + rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
37202 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37203 + goto exit;
37204 + }
37205 + }
37206 +
37207 + if(ptdls_sta){
37208 + ptdls_sta->tdls_sta_state |= TDLS_RESPONDER_STATE;
37209 + //for tdls; ptdls_sta->aid is used to fill dialogtoken
37210 + ptdls_sta->dialog = dialogtoken;
37211 + dialogtoken = (dialogtoken+1)%256;
37212 + ptdls_sta->TDLS_PeerKey_Lifetime = timeout_interval;
37213 + _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME );
37214 + }
37215 +
37216 + pattrib->qsel=pattrib->priority;
37217 + if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_REQUEST) !=_SUCCESS ){
37218 + rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
37219 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37220 + goto exit;
37221 + }
37222 + rtw_dump_xframe(padapter, pmgntframe);
37223 +
37224 +exit:
37225 +
37226 + return;
37227 +}
37228 +
37229 +void issue_tdls_teardown(_adapter *padapter, u8 *mac_addr)
37230 +{
37231 + struct xmit_frame *pmgntframe;
37232 + struct pkt_attrib *pattrib;
37233 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37234 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37235 + struct sta_priv *pstapriv = &padapter->stapriv;
37236 + struct sta_info *ptdls_sta=NULL;
37237 + _irqL irqL;
37238 +
37239 + ptdls_sta = rtw_get_stainfo(pstapriv, mac_addr);
37240 + if(ptdls_sta==NULL){
37241 + DBG_871X("issue tdls teardown unsuccessful\n");
37242 + return;
37243 + }else{
37244 + ptdls_sta->tdls_sta_state=TDLS_STATE_NONE;
37245 + }
37246 +
37247 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37248 + {
37249 + return;
37250 + }
37251 +
37252 + //update attribute
37253 + pattrib = &pmgntframe->attrib;
37254 +
37255 + pmgntframe->frame_tag = DATA_FRAMETAG;
37256 + pattrib->ether_type = 0x890d;
37257 + pattrib->pctrl =0;
37258 +
37259 + _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
37260 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37261 +
37262 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
37263 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37264 +
37265 + update_tdls_attrib(padapter, pattrib);
37266 + pattrib->qsel=pattrib->priority;
37267 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_TEARDOWN) != _SUCCESS) {
37268 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
37269 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37270 + goto exit;
37271 + }
37272 + rtw_dump_xframe(padapter, pmgntframe);
37273 +
37274 + if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){
37275 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
37276 + }
37277 +
37278 + if( ptdls_sta->timer_flag == 1 )
37279 + {
37280 + _enter_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);
37281 + ptdls_sta->timer_flag = 2;
37282 + _exit_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);
37283 + }
37284 + else
37285 + rtw_tdls_cmd(padapter, mac_addr, TDLS_FREE_STA );
37286 +
37287 +
37288 +exit:
37289 +
37290 + return;
37291 +}
37292 +
37293 +void issue_tdls_dis_req(_adapter *padapter, u8 *mac_addr)
37294 +{
37295 + struct xmit_frame *pmgntframe;
37296 + struct pkt_attrib *pattrib;
37297 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37298 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37299 + u8 baddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
37300 +
37301 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37302 + {
37303 + return;
37304 + }
37305 +
37306 + //update attribute
37307 + pattrib = &pmgntframe->attrib;
37308 +
37309 + pmgntframe->frame_tag = DATA_FRAMETAG;
37310 + pattrib->ether_type = 0x890d;
37311 + pattrib->pctrl =0;
37312 +
37313 + if(mac_addr == NULL)
37314 + _rtw_memcpy(pattrib->dst, baddr, ETH_ALEN);
37315 + else
37316 + _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
37317 +
37318 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37319 +
37320 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
37321 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37322 +
37323 + update_tdls_attrib(padapter, pattrib);
37324 + pattrib->qsel=pattrib->priority;
37325 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_DISCOVERY_REQUEST) != _SUCCESS) {
37326 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
37327 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37328 + goto exit;
37329 + }
37330 + rtw_dump_xframe(padapter, pmgntframe);
37331 + DBG_871X("issue tdls dis req\n");
37332 +
37333 +exit:
37334 +
37335 + return;
37336 +}
37337 +
37338 +void issue_tdls_setup_rsp(_adapter *padapter, union recv_frame *precv_frame)
37339 +{
37340 + struct xmit_frame *pmgntframe;
37341 + struct pkt_attrib *pattrib;
37342 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37343 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
37344 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
37345 + struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
37346 + _irqL irqL;
37347 +
37348 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37349 + {
37350 + return;
37351 + }
37352 +
37353 + //update attribute
37354 + pattrib = &pmgntframe->attrib;
37355 +
37356 + pmgntframe->frame_tag = DATA_FRAMETAG;
37357 + pattrib->ether_type = 0x890d;
37358 + pattrib->pctrl =0;
37359 +
37360 + _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
37361 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37362 +
37363 + _rtw_memcpy(pattrib->ra, rx_pkt_pattrib->bssid, ETH_ALEN);
37364 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37365 +
37366 + update_tdls_attrib(padapter, pattrib);
37367 + pattrib->qsel=pattrib->priority;
37368 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_RESPONSE) != _SUCCESS) {
37369 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
37370 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37371 + goto exit;
37372 + }
37373 + rtw_dump_xframe(padapter, pmgntframe);
37374 +
37375 +exit:
37376 +
37377 + return;
37378 +
37379 +}
37380 +
37381 +void issue_tdls_setup_cfm(_adapter *padapter, union recv_frame *precv_frame)
37382 +{
37383 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
37384 + struct xmit_frame *pmgntframe;
37385 + struct pkt_attrib *pattrib;
37386 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37387 + struct sta_info *ptdls_sta=NULL;
37388 + _irqL irqL;
37389 +
37390 + struct rx_pkt_attrib *rx_pkt_pattrib = & precv_frame->u.hdr.attrib;
37391 +
37392 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37393 + {
37394 + return;
37395 + }
37396 +
37397 + //update attribute
37398 + pattrib = &pmgntframe->attrib;
37399 +
37400 + pmgntframe->frame_tag = DATA_FRAMETAG;
37401 + pattrib->ether_type = 0x890d;
37402 + pattrib->pctrl =0;
37403 +
37404 + _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
37405 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37406 +
37407 + _rtw_memcpy(pattrib->ra, rx_pkt_pattrib->bssid, ETH_ALEN);
37408 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37409 +
37410 + update_tdls_attrib(padapter, pattrib);
37411 + pattrib->qsel=pattrib->priority;
37412 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_CONFIRM) != _SUCCESS) {
37413 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
37414 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37415 + goto exit;
37416 + }
37417 +
37418 + rtw_dump_xframe(padapter, pmgntframe);
37419 +
37420 +exit:
37421 +
37422 + return;
37423 +
37424 +}
37425 +
37426 +//TDLS Discovery Response frame is a management action frame
37427 +void issue_tdls_dis_rsp(_adapter *padapter, union recv_frame *precv_frame, u8 dialog)
37428 +{
37429 + struct xmit_frame *pmgntframe;
37430 + struct pkt_attrib *pattrib;
37431 + unsigned char *pframe;
37432 + struct rtw_ieee80211_hdr *pwlanhdr;
37433 + unsigned short *fctrl;
37434 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37435 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
37436 +
37437 + struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
37438 +
37439 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37440 + {
37441 + return;
37442 + }
37443 +
37444 + //update attribute
37445 + pattrib = &pmgntframe->attrib;
37446 + update_mgntframe_attrib(padapter, pattrib);
37447 +
37448 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
37449 +
37450 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
37451 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
37452 +
37453 + fctrl = &(pwlanhdr->frame_ctl);
37454 + *(fctrl) = 0;
37455 +
37456 + // unicast probe request frame
37457 + _rtw_memcpy(pwlanhdr->addr1, rx_pkt_pattrib->src, ETH_ALEN);
37458 + _rtw_memcpy(pattrib->dst, pwlanhdr->addr1, ETH_ALEN);
37459 +
37460 + _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
37461 + _rtw_memcpy(pattrib->src, pwlanhdr->addr2, ETH_ALEN);
37462 +
37463 + _rtw_memcpy(pwlanhdr->addr3, rx_pkt_pattrib->bssid, ETH_ALEN);
37464 + _rtw_memcpy(pattrib->ra, pwlanhdr->addr3, ETH_ALEN);
37465 +
37466 + SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
37467 + pmlmeext->mgnt_seq++;
37468 + SetFrameSubType(pframe, WIFI_ACTION);
37469 +
37470 + pframe += sizeof (struct rtw_ieee80211_hdr_3addr);
37471 + pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);
37472 +
37473 + rtw_build_tdls_dis_rsp_ies(padapter, pmgntframe, pframe, dialog);
37474 +
37475 + pattrib->nr_frags = 1;
37476 + pattrib->last_txcmdsz = pattrib->pktlen;
37477 +
37478 + dump_mgntframe(padapter, pmgntframe);
37479 +
37480 + return;
37481 +}
37482 +
37483 +void issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *ptdls_sta)
37484 +{
37485 + struct xmit_frame *pmgntframe;
37486 + struct pkt_attrib *pattrib;
37487 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37488 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37489 +
37490 + static u8 dialogtoken=0;
37491 +
37492 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37493 + {
37494 + return;
37495 + }
37496 +
37497 + //update attribute
37498 + pattrib = &pmgntframe->attrib;
37499 +
37500 + pmgntframe->frame_tag = DATA_FRAMETAG;
37501 + pattrib->ether_type = 0x890d;
37502 + pattrib->pctrl =0;
37503 +
37504 + _rtw_memcpy(pattrib->dst, ptdls_sta->hwaddr, ETH_ALEN);
37505 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37506 +
37507 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
37508 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37509 +
37510 + //for tdls; pattrib->nr_frags is used to fill dialogtoken
37511 + ptdls_sta->dialog = dialogtoken;
37512 + dialogtoken = (dialogtoken+1)%256;
37513 + //PTI frame's priority should be AC_VO
37514 + pattrib->priority = 7;
37515 +
37516 + update_tdls_attrib(padapter, pattrib);
37517 + pattrib->qsel=pattrib->priority;
37518 + if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_PEER_TRAFFIC_INDICATION) != _SUCCESS) {
37519 + rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
37520 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37521 + goto exit;
37522 + }
37523 + rtw_dump_xframe(padapter, pmgntframe);
37524 +
37525 +exit:
37526 +
37527 + return;
37528 +}
37529 +
37530 +void issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr)
37531 +{
37532 + struct xmit_frame *pmgntframe;
37533 + struct pkt_attrib *pattrib;
37534 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37535 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37536 +
37537 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37538 + {
37539 + return;
37540 + }
37541 +
37542 + //update attribute
37543 + pattrib = &pmgntframe->attrib;
37544 +
37545 + pmgntframe->frame_tag = DATA_FRAMETAG;
37546 + pattrib->ether_type = 0x890d;
37547 + pattrib->pctrl =0;
37548 +
37549 + _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
37550 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37551 +
37552 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
37553 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37554 +
37555 + update_tdls_attrib(padapter, pattrib);
37556 +
37557 + pattrib->qsel=pattrib->priority;
37558 + if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_CHANNEL_SWITCH_REQUEST) !=_SUCCESS ){
37559 + rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
37560 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37561 + goto exit;
37562 + }
37563 + rtw_dump_xframe(padapter, pmgntframe);
37564 +
37565 +exit:
37566 +
37567 + return;
37568 +}
37569 +
37570 +void issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr)
37571 +{
37572 + struct xmit_frame *pmgntframe;
37573 + struct pkt_attrib *pattrib;
37574 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
37575 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
37576 +
37577 + _irqL irqL;
37578 +
37579 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
37580 + {
37581 + return;
37582 + }
37583 +
37584 + //update attribute
37585 + pattrib = &pmgntframe->attrib;
37586 +
37587 + pmgntframe->frame_tag = DATA_FRAMETAG;
37588 + pattrib->ether_type = 0x890d;
37589 + pattrib->pctrl =0;
37590 +
37591 + _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
37592 + _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
37593 +
37594 + _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
37595 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
37596 +
37597 + update_tdls_attrib(padapter, pattrib);
37598 +
37599 + pattrib->qsel=pattrib->priority;
37600 +/*
37601 + _enter_critical_bh(&pxmitpriv->lock, &irqL);
37602 + if(xmitframe_enqueue_for_tdls_sleeping_sta(padapter, pmgntframe)==_TRUE){
37603 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
37604 + return _FALSE;
37605 + }
37606 +*/
37607 + if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_CHANNEL_SWITCH_RESPONSE) !=_SUCCESS ){
37608 + rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
37609 + rtw_free_xmitframe(pxmitpriv, pmgntframe);
37610 + goto exit;
37611 + }
37612 + rtw_dump_xframe(padapter, pmgntframe);
37613 +
37614 +exit:
37615 +
37616 + return;
37617 +}
37618 +
37619 +sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame)
37620 +{
37621 + struct sta_info *ptdls_sta = NULL, *psta = rtw_get_stainfo(&(adapter->stapriv), get_bssid(&(adapter->mlmepriv)));
37622 + struct recv_priv *precvpriv = &(adapter->recvpriv);
37623 + u8 *ptr = precv_frame->u.hdr.rx_data, *psa;
37624 + struct rx_pkt_attrib *pattrib = &(precv_frame->u.hdr.attrib);
37625 + struct tdls_info *ptdlsinfo = &(adapter->tdlsinfo);
37626 + u8 empty_addr[ETH_ALEN] = { 0x00 };
37627 + int UndecoratedSmoothedPWDB;
37628 +
37629 +
37630 + //WFDTDLS: for sigma test, not to setup direct link automatically
37631 + ptdlsinfo->dev_discovered = 1;
37632 +
37633 +#ifdef CONFIG_TDLS_AUTOSETUP
37634 + psa = get_sa(ptr);
37635 + ptdls_sta = rtw_get_stainfo(&(adapter->stapriv), psa);
37636 +
37637 + if(ptdls_sta != NULL)
37638 + {
37639 + ptdls_sta->tdls_sta_state |= TDLS_ALIVE_STATE;
37640 +
37641 + //Record the tdls sta with lowest signal strength
37642 + if( (ptdlsinfo->sta_maximum == _TRUE) && (ptdls_sta->alive_count >= 1) )
37643 + {
37644 + if( _rtw_memcmp(ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN) )
37645 + {
37646 + _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);
37647 + ptdlsinfo->ss_record.RxPWDBAll = pattrib->RxPWDBAll;
37648 + }
37649 + else
37650 + {
37651 + if( ptdlsinfo->ss_record.RxPWDBAll < pattrib->RxPWDBAll )
37652 + {
37653 + _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);
37654 + ptdlsinfo->ss_record.RxPWDBAll = pattrib->RxPWDBAll;
37655 + }
37656 + }
37657 + }
37658 +
37659 + }
37660 + else
37661 + {
37662 + if( ptdlsinfo->sta_maximum == _TRUE)
37663 + {
37664 + if( _rtw_memcmp( ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN ) )
37665 + {
37666 + //All traffics are busy, do not set up another direct link.
37667 + return _FAIL;
37668 + }
37669 + else
37670 + {
37671 + if( pattrib->RxPWDBAll > ptdlsinfo->ss_record.RxPWDBAll )
37672 + {
37673 + issue_tdls_teardown(adapter, ptdlsinfo->ss_record.macaddr);
37674 + }
37675 + else
37676 + {
37677 + return _FAIL;
37678 + }
37679 + }
37680 + }
37681 +
37682 + rtw_hal_get_def_var(adapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);
37683 +
37684 + if( pattrib->RxPWDBAll + TDLS_SIGNAL_THRESH >= UndecoratedSmoothedPWDB);
37685 + {
37686 + DBG_871X("pattrib->RxPWDBAll=%d, pdmpriv->UndecoratedSmoothedPWDB=%d\n", pattrib->RxPWDBAll, UndecoratedSmoothedPWDB);
37687 + issue_tdls_setup_req(adapter, psa);
37688 + }
37689 + }
37690 +#endif //CONFIG_TDLS_AUTOSETUP
37691 +
37692 + return _SUCCESS;
37693 +}
37694 +
37695 +sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame)
37696 +{
37697 + struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
37698 + u8 *psa, *pmyid;
37699 + struct sta_info *ptdls_sta= NULL;
37700 + struct sta_priv *pstapriv = &adapter->stapriv;
37701 + u8 *ptr = precv_frame->u.hdr.rx_data;
37702 + struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
37703 + struct security_priv *psecuritypriv = &adapter->securitypriv;
37704 + _irqL irqL;
37705 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
37706 + u8 *prsnie, *ppairwise_cipher;
37707 + u8 i, k, pairwise_count;
37708 + u8 ccmp_have=0, rsnie_have=0;
37709 + u16 j;
37710 + u8 SNonce[32];
37711 + u32 *timeout_interval;
37712 + sint parsing_length; //frame body length, without icv_len
37713 + PNDIS_802_11_VARIABLE_IEs pIE;
37714 + u8 FIXED_IE = 5;
37715 + unsigned char supportRate[16];
37716 + int supportRateNum = 0;
37717 +
37718 + psa = get_sa(ptr);
37719 + ptdls_sta = rtw_get_stainfo(pstapriv, psa);
37720 +
37721 + pmyid=myid(&(adapter->eeprompriv));
37722 + ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
37723 + parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
37724 + -prx_pkt_attrib->hdrlen
37725 + -prx_pkt_attrib->iv_len
37726 + -prx_pkt_attrib->icv_len
37727 + -LLC_HEADER_SIZE
37728 + -ETH_TYPE_LEN
37729 + -PAYLOAD_TYPE_LEN
37730 + -FIXED_IE;
37731 +
37732 + if(ptdlsinfo->ap_prohibited == _TRUE)
37733 + {
37734 + goto exit;
37735 + }
37736 +
37737 + if(ptdls_sta==NULL){
37738 + ptdls_sta = rtw_alloc_stainfo(pstapriv, psa);
37739 + }else{
37740 + if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE){
37741 + //If the direct link is already set up
37742 + //Process as re-setup after tear down
37743 + DBG_871X("re-setup a direct link\n");
37744 + }
37745 + //already receiving TDLS setup request
37746 + else if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){
37747 + DBG_871X("receive duplicated TDLS setup request frame in handshaking\n");
37748 + goto exit;
37749 + }
37750 + //When receiving and sending setup_req to the same link at the same time, STA with higher MAC_addr would be initiator
37751 + //following is to check out MAC_addr
37752 + else if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){
37753 + DBG_871X("receive setup_req after sending setup_req\n");
37754 + for (i=0;i<6;i++){
37755 + if(*(pmyid+i)==*(psa+i)){
37756 + }
37757 + else if(*(pmyid+i)>*(psa+i)){
37758 + goto exit;
37759 + }else if(*(pmyid+i)<*(psa+i)){
37760 + ptdls_sta->tdls_sta_state=TDLS_INITIATOR_STATE;
37761 + break;
37762 + }
37763 + }
37764 + }
37765 + }
37766 +
37767 + if(ptdls_sta)
37768 + {
37769 + ptdls_sta->dialog = *(ptr+2); //copy dialog token
37770 + ptdls_sta->stat_code = 0;
37771 +
37772 + //parsing information element
37773 + for(j=FIXED_IE; j<parsing_length;){
37774 +
37775 + pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
37776 +
37777 + switch (pIE->ElementID)
37778 + {
37779 + case _SUPPORTEDRATES_IE_:
37780 + _rtw_memcpy(supportRate, pIE->data, pIE->Length);
37781 + supportRateNum = pIE->Length;
37782 + break;
37783 + case _COUNTRY_IE_:
37784 + break;
37785 + case _EXT_SUPPORTEDRATES_IE_:
37786 + if(supportRateNum<=sizeof(supportRate))
37787 + {
37788 + _rtw_memcpy(supportRate+supportRateNum, pIE->data, pIE->Length);
37789 + supportRateNum += pIE->Length;
37790 + }
37791 + break;
37792 + case _SUPPORTED_CH_IE_:
37793 + break;
37794 + case _RSN_IE_2_:
37795 + rsnie_have=1;
37796 + if(prx_pkt_attrib->encrypt){
37797 + prsnie=(u8*)pIE;
37798 + //check whether initiator STA has CCMP pairwise_cipher.
37799 + ppairwise_cipher=prsnie+10;
37800 + _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 1);
37801 + for(k=0;k<pairwise_count;k++){
37802 + if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)
37803 + ccmp_have=1;
37804 + }
37805 + if(ccmp_have==0){
37806 + //invalid contents of RSNIE
37807 + ptdls_sta->stat_code=72;
37808 + }
37809 + }
37810 + break;
37811 + case _EXT_CAP_IE_:
37812 + break;
37813 + case _VENDOR_SPECIFIC_IE_:
37814 + break;
37815 + case _FTIE_:
37816 + if(prx_pkt_attrib->encrypt)
37817 + _rtw_memcpy(SNonce, (ptr+j+52), 32);
37818 + break;
37819 + case _TIMEOUT_ITVL_IE_:
37820 + if(prx_pkt_attrib->encrypt)
37821 + timeout_interval = (u32 *)(ptr+j+3);
37822 + break;
37823 + case _RIC_Descriptor_IE_:
37824 + break;
37825 + case _HT_CAPABILITY_IE_:
37826 + rtw_tdls_process_ht_cap(adapter, ptdls_sta, pIE->data, pIE->Length);
37827 + break;
37828 + case EID_BSSCoexistence:
37829 + break;
37830 + case _LINK_ID_IE_:
37831 + if(_rtw_memcmp(get_bssid(pmlmepriv), pIE->data, 6) == _FALSE)
37832 + {
37833 + //not in the same BSS
37834 + ptdls_sta->stat_code=7;
37835 + }
37836 + break;
37837 + default:
37838 + break;
37839 + }
37840 +
37841 + j += (pIE->Length + 2);
37842 +
37843 + }
37844 +
37845 + //update station supportRate
37846 + ptdls_sta->bssratelen = supportRateNum;
37847 + _rtw_memcpy(ptdls_sta->bssrateset, supportRate, supportRateNum);
37848 +
37849 + //check status code
37850 + //if responder STA has/hasn't security on AP, but request hasn't/has RSNIE, it should reject
37851 + if(ptdls_sta->stat_code == 0 )
37852 + {
37853 + if(rsnie_have && (prx_pkt_attrib->encrypt==0)){
37854 + //security disabled
37855 + ptdls_sta->stat_code = 5;
37856 + }else if(rsnie_have==0 && (prx_pkt_attrib->encrypt)){
37857 + //request haven't RSNIE
37858 + ptdls_sta->stat_code = 38;
37859 + }
37860 +
37861 +#ifdef CONFIG_WFD
37862 + //WFD test plan version 0.18.2 test item 5.1.5
37863 + //SoUT does not use TDLS if AP uses weak security
37864 + if ( adapter->wdinfo.wfd_tdls_enable )
37865 + {
37866 + if(rsnie_have && (prx_pkt_attrib->encrypt != _AES_))
37867 + {
37868 + ptdls_sta->stat_code = 5;
37869 + }
37870 + }
37871 +#endif //CONFIG_WFD
37872 + }
37873 +
37874 + ptdls_sta->tdls_sta_state|= TDLS_INITIATOR_STATE;
37875 + if(prx_pkt_attrib->encrypt){
37876 + _rtw_memcpy(ptdls_sta->SNonce, SNonce, 32);
37877 + _rtw_memcpy(&(ptdls_sta->TDLS_PeerKey_Lifetime), timeout_interval, 4);
37878 + }
37879 + _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
37880 + if(!(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE))
37881 + ptdlsinfo->sta_cnt++;
37882 + _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
37883 + if( ptdlsinfo->sta_cnt == (NUM_STA - 2) ) // -2: AP + BC/MC sta
37884 + {
37885 + ptdlsinfo->sta_maximum = _TRUE;
37886 + }
37887 +
37888 +#ifdef CONFIG_WFD
37889 + rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);
37890 +#endif // CONFIG_WFD
37891 +
37892 + }
37893 + else
37894 + {
37895 + goto exit;
37896 + }
37897 +
37898 + issue_tdls_setup_rsp(adapter, precv_frame);
37899 +
37900 + if(ptdls_sta->stat_code==0)
37901 + {
37902 + _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME);
37903 + }
37904 + else //status code!=0 ; setup unsuccess
37905 + {
37906 + free_tdls_sta(adapter, ptdls_sta);
37907 + }
37908 +
37909 +exit:
37910 +
37911 + return _FAIL;
37912 +}
37913 +
37914 +sint On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame)
37915 +{
37916 + struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
37917 + struct sta_info *ptdls_sta= NULL;
37918 + struct sta_priv *pstapriv = &adapter->stapriv;
37919 + u8 *ptr = precv_frame->u.hdr.rx_data;
37920 + _irqL irqL;
37921 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
37922 + u8 *psa;
37923 + u16 stat_code;
37924 + sint parsing_length; //frame body length, without icv_len
37925 + PNDIS_802_11_VARIABLE_IEs pIE;
37926 + u8 FIXED_IE =7;
37927 + u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic, *ppairwise_cipher;
37928 + u16 pairwise_count, j, k;
37929 + u8 verify_ccmp=0;
37930 + unsigned char supportRate[16];
37931 + int supportRateNum = 0;
37932 +
37933 + psa = get_sa(ptr);
37934 + ptdls_sta = rtw_get_stainfo(pstapriv, psa);
37935 +
37936 + if ( NULL == ptdls_sta )
37937 + {
37938 + return _FAIL;
37939 + }
37940 +
37941 + ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
37942 + parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
37943 + -prx_pkt_attrib->hdrlen
37944 + -prx_pkt_attrib->iv_len
37945 + -prx_pkt_attrib->icv_len
37946 + -LLC_HEADER_SIZE
37947 + -TYPE_LENGTH_FIELD_SIZE
37948 + -1
37949 + -FIXED_IE;
37950 +
37951 + _rtw_memcpy(&stat_code, ptr+2, 2);
37952 +
37953 + if(stat_code!=0)
37954 + {
37955 + DBG_871X( "[%s] status_code = %d, free_tdls_sta\n", __FUNCTION__, stat_code );
37956 + free_tdls_sta(adapter, ptdls_sta);
37957 + return _FAIL;
37958 + }
37959 +
37960 + stat_code = 0;
37961 +
37962 + //parsing information element
37963 + for(j=FIXED_IE; j<parsing_length;)
37964 + {
37965 + pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
37966 +
37967 + switch (pIE->ElementID)
37968 + {
37969 + case _SUPPORTEDRATES_IE_:
37970 + _rtw_memcpy(supportRate, pIE->data, pIE->Length);
37971 + supportRateNum = pIE->Length;
37972 + break;
37973 + case _COUNTRY_IE_:
37974 + break;
37975 + case _EXT_SUPPORTEDRATES_IE_:
37976 + if(supportRateNum<=sizeof(supportRate))
37977 + {
37978 + _rtw_memcpy(supportRate+supportRateNum, pIE->data, pIE->Length);
37979 + supportRateNum += pIE->Length;
37980 + }
37981 + break;
37982 + case _SUPPORTED_CH_IE_:
37983 + break;
37984 + case _RSN_IE_2_:
37985 + prsnie=(u8*)pIE;
37986 + //check whether responder STA has CCMP pairwise_cipher.
37987 + ppairwise_cipher=prsnie+10;
37988 + _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 2);
37989 + for(k=0;k<pairwise_count;k++){
37990 + if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)
37991 + verify_ccmp=1;
37992 + }
37993 + case _EXT_CAP_IE_:
37994 + break;
37995 + case _VENDOR_SPECIFIC_IE_:
37996 + break;
37997 + case _FTIE_:
37998 + pftie=(u8*)pIE;
37999 + _rtw_memcpy(ptdls_sta->ANonce, (ptr+j+20), 32);
38000 + break;
38001 + case _TIMEOUT_ITVL_IE_:
38002 + ptimeout_ie=(u8*)pIE;
38003 + break;
38004 + case _RIC_Descriptor_IE_:
38005 + break;
38006 + case _HT_CAPABILITY_IE_:
38007 + rtw_tdls_process_ht_cap(adapter, ptdls_sta, pIE->data, pIE->Length);
38008 + break;
38009 + case EID_BSSCoexistence:
38010 + break;
38011 + case _LINK_ID_IE_:
38012 + plinkid_ie=(u8*)pIE;
38013 + break;
38014 + default:
38015 + break;
38016 + }
38017 +
38018 + j += (pIE->Length + 2);
38019 +
38020 + }
38021 +
38022 + //update station supportRate
38023 + ptdls_sta->bssratelen = supportRateNum;
38024 + _rtw_memcpy(ptdls_sta->bssrateset, supportRate, supportRateNum);
38025 +
38026 +#ifdef CONFIG_WFD
38027 + rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);
38028 +#endif // CONFIG_WFD
38029 +
38030 + if(stat_code != 0)
38031 + {
38032 + ptdls_sta->stat_code = stat_code;
38033 + }
38034 + else
38035 + {
38036 + if(prx_pkt_attrib->encrypt)
38037 + {
38038 + if(verify_ccmp==1)
38039 + {
38040 + wpa_tdls_generate_tpk(adapter, ptdls_sta);
38041 + ptdls_sta->stat_code=0;
38042 + if(tdls_verify_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie)==0) //0: Invalid, 1: valid
38043 + {
38044 + free_tdls_sta(adapter, ptdls_sta);
38045 + return _FAIL;
38046 + }
38047 + }
38048 + else
38049 + {
38050 + ptdls_sta->stat_code=72; //invalide contents of RSNIE
38051 + }
38052 +
38053 + }else{
38054 + ptdls_sta->stat_code=0;
38055 + }
38056 + }
38057 +
38058 + DBG_871X("issue_tdls_setup_cfm\n");
38059 + issue_tdls_setup_cfm(adapter, precv_frame);
38060 +
38061 + if(ptdls_sta->stat_code==0)
38062 + {
38063 + ptdlsinfo->setup_state = TDLS_LINKED_STATE;
38064 +
38065 + if( ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE )
38066 + {
38067 + ptdls_sta->tdls_sta_state |= TDLS_LINKED_STATE;
38068 + _cancel_timer_ex( &ptdls_sta->handshake_timer);
38069 +#ifdef CONFIG_TDLS_AUTOCHECKALIVE
38070 + _set_timer( &ptdls_sta->alive_timer1, TDLS_ALIVE_TIMER_PH1);
38071 +#endif //CONFIG_TDLS_AUTOSETUP
38072 + }
38073 +
38074 + rtw_tdls_set_mac_id(ptdlsinfo, ptdls_sta);
38075 + rtw_tdls_set_key(adapter, prx_pkt_attrib, ptdls_sta);
38076 +
38077 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_WRCR);
38078 +
38079 + }
38080 + else //status code!=0 ; setup unsuccessful
38081 + {
38082 + free_tdls_sta(adapter, ptdls_sta);
38083 + }
38084 +
38085 + return _FAIL;
38086 +
38087 +}
38088 +
38089 +sint On_TDLS_Setup_Cfm(_adapter *adapter, union recv_frame *precv_frame)
38090 +{
38091 + struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
38092 + struct sta_info *ptdls_sta= NULL;
38093 + struct sta_priv *pstapriv = &adapter->stapriv;
38094 + u8 *ptr = precv_frame->u.hdr.rx_data;
38095 + _irqL irqL;
38096 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
38097 + u8 *psa;
38098 + u16 stat_code;
38099 + sint parsing_length;
38100 + PNDIS_802_11_VARIABLE_IEs pIE;
38101 + u8 FIXED_IE =5;
38102 + u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic, *ppairwise_cipher;
38103 + u16 j, pairwise_count;
38104 +
38105 + psa = get_sa(ptr);
38106 + ptdls_sta = rtw_get_stainfo(pstapriv, psa);
38107 +
38108 + ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
38109 + parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
38110 + -prx_pkt_attrib->hdrlen
38111 + -prx_pkt_attrib->iv_len
38112 + -prx_pkt_attrib->icv_len
38113 + -LLC_HEADER_SIZE
38114 + -ETH_TYPE_LEN
38115 + -PAYLOAD_TYPE_LEN
38116 + -FIXED_IE;
38117 + _rtw_memcpy(&stat_code, ptr+2, 2);
38118 +
38119 + if(stat_code!=0){
38120 + DBG_871X( "[%s] stat_code = %d\n, free_tdls_sta", __FUNCTION__, stat_code );
38121 + free_tdls_sta(adapter, ptdls_sta);
38122 + return _FAIL;
38123 + }
38124 +
38125 + if(prx_pkt_attrib->encrypt){
38126 + //parsing information element
38127 + for(j=FIXED_IE; j<parsing_length;){
38128 +
38129 + pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
38130 +
38131 + switch (pIE->ElementID)
38132 + {
38133 + case _RSN_IE_2_:
38134 + prsnie=(u8*)pIE;
38135 + break;
38136 + case _VENDOR_SPECIFIC_IE_:
38137 + break;
38138 + case _FTIE_:
38139 + pftie=(u8*)pIE;
38140 + break;
38141 + case _TIMEOUT_ITVL_IE_:
38142 + ptimeout_ie=(u8*)pIE;
38143 + break;
38144 + case _HT_EXTRA_INFO_IE_:
38145 + break;
38146 + case _LINK_ID_IE_:
38147 + plinkid_ie=(u8*)pIE;
38148 + break;
38149 + default:
38150 + break;
38151 + }
38152 +
38153 + j += (pIE->Length + 2);
38154 +
38155 + }
38156 +
38157 + //verify mic in FTIE MIC field
38158 + if(tdls_verify_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie)==0){ //0: Invalid, 1: Valid
38159 + free_tdls_sta(adapter, ptdls_sta);
38160 + return _FAIL;
38161 + }
38162 +
38163 + }
38164 +
38165 + ptdlsinfo->setup_state = TDLS_LINKED_STATE;
38166 + if( ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE )
38167 + {
38168 + ptdls_sta->tdls_sta_state|=TDLS_LINKED_STATE;
38169 + _cancel_timer_ex( &ptdls_sta->handshake_timer);
38170 +#ifdef CONFIG_TDLS_AUTOCHECKALIVE
38171 + _set_timer( &ptdls_sta->alive_timer1, TDLS_ALIVE_TIMER_PH1);
38172 +#endif //CONFIG_TDLS_AUTOCHECKALIVE
38173 + }
38174 +
38175 + rtw_tdls_set_mac_id(ptdlsinfo, ptdls_sta);
38176 + rtw_tdls_set_key(adapter, prx_pkt_attrib, ptdls_sta);
38177 +
38178 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_WRCR);
38179 +
38180 + return _FAIL;
38181 +
38182 +}
38183 +
38184 +sint On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame)
38185 +{
38186 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
38187 + struct sta_priv *pstapriv = &adapter->stapriv;
38188 + struct sta_info *psta_ap;
38189 + u8 *ptr = precv_frame->u.hdr.rx_data;
38190 + sint parsing_length; //frame body length, without icv_len
38191 + PNDIS_802_11_VARIABLE_IEs pIE;
38192 + u8 FIXED_IE = 3, *dst, *pdialog = NULL;
38193 + u16 j;
38194 +
38195 + ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len + LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE + 1;
38196 + pdialog=ptr+2;
38197 +
38198 + parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
38199 + -prx_pkt_attrib->hdrlen
38200 + -prx_pkt_attrib->iv_len
38201 + -prx_pkt_attrib->icv_len
38202 + -LLC_HEADER_SIZE
38203 + -TYPE_LENGTH_FIELD_SIZE
38204 + -1
38205 + -FIXED_IE;
38206 +
38207 + //parsing information element
38208 + for(j=FIXED_IE; j<parsing_length;){
38209 +
38210 + pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
38211 +
38212 + switch (pIE->ElementID)
38213 + {
38214 + case _LINK_ID_IE_:
38215 + psta_ap = rtw_get_stainfo(pstapriv, pIE->data);
38216 + if(psta_ap == NULL)
38217 + {
38218 + goto exit;
38219 + }
38220 + dst = pIE->data + 12;
38221 + if( (MacAddr_isBcst(dst) == _FALSE) && (_rtw_memcmp(myid(&(adapter->eeprompriv)), dst, 6) == _FALSE) )
38222 + {
38223 + goto exit;
38224 + }
38225 + break;
38226 + default:
38227 + break;
38228 + }
38229 +
38230 + j += (pIE->Length + 2);
38231 +
38232 + }
38233 +
38234 + //check frame contents
38235 +
38236 + issue_tdls_dis_rsp(adapter, precv_frame, *(pdialog) );
38237 +
38238 +exit:
38239 +
38240 + return _FAIL;
38241 +
38242 +}
38243 +
38244 +sint On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame)
38245 +{
38246 + u8 *psa;
38247 + u8 *ptr = precv_frame->u.hdr.rx_data;
38248 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
38249 + struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
38250 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
38251 + struct sta_priv *pstapriv = &adapter->stapriv;
38252 + struct sta_info *ptdls_sta= NULL;
38253 + _irqL irqL;
38254 +
38255 + psa = get_sa(ptr);
38256 +
38257 + ptdls_sta = rtw_get_stainfo(pstapriv, psa);
38258 + if(ptdls_sta!=NULL){
38259 + if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){
38260 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
38261 + }
38262 + free_tdls_sta(adapter, ptdls_sta);
38263 + }
38264 +
38265 + return _FAIL;
38266 +
38267 +}
38268 +
38269 +u8 TDLS_check_ch_state(uint state){
38270 + if( (state & TDLS_CH_SWITCH_ON_STATE) &&
38271 + (state & TDLS_AT_OFF_CH_STATE) &&
38272 + (state & TDLS_PEER_AT_OFF_STATE) ){
38273 +
38274 + if(state & TDLS_PEER_SLEEP_STATE)
38275 + return 2; //U-APSD + ch. switch
38276 + else
38277 + return 1; //ch. switch
38278 + }else
38279 + return 0;
38280 +}
38281 +
38282 +//we process buffered data for 1. U-APSD, 2. ch. switch, 3. U-APSD + ch. switch here
38283 +sint On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame)
38284 +{
38285 + struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
38286 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
38287 + struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
38288 + struct sta_priv *pstapriv = &adapter->stapriv;
38289 + //get peer sta infomation
38290 + struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->src);
38291 + u8 wmmps_ac=0, state=TDLS_check_ch_state(ptdls_sta->tdls_sta_state);
38292 + int i;
38293 +
38294 + ptdls_sta->sta_stats.rx_data_pkts++;
38295 +
38296 + //receive peer traffic response frame, sleeping STA wakes up
38297 + //ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_SLEEP_STATE);
38298 + process_wmmps_data( adapter, precv_frame);
38299 +
38300 + // if noticed peer STA wakes up by receiving peer traffic response
38301 + // and we want to do channel swtiching, then we will transmit channel switch request first
38302 + if(ptdls_sta->tdls_sta_state & TDLS_APSD_CHSW_STATE){
38303 + issue_tdls_ch_switch_req(adapter, pattrib->src);
38304 + ptdls_sta->tdls_sta_state &= ~(TDLS_APSD_CHSW_STATE);
38305 + return _FAIL;
38306 + }
38307 +
38308 + //check 4-AC queue bit
38309 + if(ptdls_sta->uapsd_vo || ptdls_sta->uapsd_vi || ptdls_sta->uapsd_be || ptdls_sta->uapsd_bk)
38310 + wmmps_ac=1;
38311 +
38312 + //if it's a direct link and have buffered frame
38313 + if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE){
38314 + if(wmmps_ac && state)
38315 + {
38316 + _irqL irqL;
38317 + _list *xmitframe_plist, *xmitframe_phead;
38318 + struct xmit_frame *pxmitframe=NULL;
38319 +
38320 + _enter_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
38321 +
38322 + xmitframe_phead = get_list_head(&ptdls_sta->sleep_q);
38323 + xmitframe_plist = get_next(xmitframe_phead);
38324 +
38325 + //transmit buffered frames
38326 + while ((rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) == _FALSE)
38327 + {
38328 + pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);
38329 + xmitframe_plist = get_next(xmitframe_plist);
38330 + rtw_list_delete(&pxmitframe->list);
38331 +
38332 + ptdls_sta->sleepq_len--;
38333 + if(ptdls_sta->sleepq_len>0){
38334 + pxmitframe->attrib.mdata = 1;
38335 + pxmitframe->attrib.eosp = 0;
38336 + }else{
38337 + pxmitframe->attrib.mdata = 0;
38338 + pxmitframe->attrib.eosp = 1;
38339 + }
38340 + //pxmitframe->attrib.triggered = 1; //maybe doesn't need in TDLS
38341 + if(rtw_hal_xmit(adapter, pxmitframe) == _TRUE)
38342 + {
38343 + rtw_os_xmit_complete(adapter, pxmitframe);
38344 + }
38345 +
38346 + }
38347 +
38348 + if(ptdls_sta->sleepq_len==0)
38349 + {
38350 + DBG_871X("no buffered packets for tdls to xmit\n");
38351 + //on U-APSD + CH. switch state, when there is no buffered date to xmit,
38352 + // we should go back to base channel
38353 + if(state==2){
38354 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
38355 + }else if(ptdls_sta->tdls_sta_state&TDLS_SW_OFF_STATE){
38356 + ptdls_sta->tdls_sta_state &= ~(TDLS_SW_OFF_STATE);
38357 + ptdlsinfo->candidate_ch= pmlmeext->cur_channel;
38358 + issue_tdls_ch_switch_req(adapter, pattrib->src);
38359 + DBG_871X("issue tdls ch switch req back to base channel\n");
38360 + }
38361 +
38362 + }
38363 + else
38364 + {
38365 + DBG_871X("error!psta->sleepq_len=%d\n", ptdls_sta->sleepq_len);
38366 + ptdls_sta->sleepq_len=0;
38367 + }
38368 +
38369 + _exit_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
38370 +
38371 + }
38372 +
38373 + }
38374 +
38375 + return _FAIL;
38376 +}
38377 +
38378 +sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame)
38379 +{
38380 + struct sta_info *ptdls_sta= NULL;
38381 + struct sta_priv *pstapriv = &adapter->stapriv;
38382 + u8 *ptr = precv_frame->u.hdr.rx_data;
38383 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
38384 + u8 *psa;
38385 + sint parsing_length;
38386 + PNDIS_802_11_VARIABLE_IEs pIE;
38387 + u8 FIXED_IE =3;
38388 + u16 j;
38389 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
38390 +
38391 + psa = get_sa(ptr);
38392 + ptdls_sta = rtw_get_stainfo(pstapriv, psa);
38393 +
38394 + ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
38395 + parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
38396 + -prx_pkt_attrib->hdrlen
38397 + -prx_pkt_attrib->iv_len
38398 + -prx_pkt_attrib->icv_len
38399 + -LLC_HEADER_SIZE
38400 + -ETH_TYPE_LEN
38401 + -PAYLOAD_TYPE_LEN
38402 + -FIXED_IE;
38403 +
38404 + ptdls_sta->off_ch = *(ptr+2);
38405 +
38406 + //parsing information element
38407 + for(j=FIXED_IE; j<parsing_length;){
38408 +
38409 + pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
38410 +
38411 + switch (pIE->ElementID)
38412 + {
38413 + case _COUNTRY_IE_:
38414 + break;
38415 + case _CH_SWTICH_ANNOUNCE_:
38416 + break;
38417 + case _LINK_ID_IE_:
38418 + break;
38419 + case _CH_SWITCH_TIMING_:
38420 + _rtw_memcpy(&ptdls_sta->ch_switch_time, pIE->data, 2);
38421 + _rtw_memcpy(&ptdls_sta->ch_switch_timeout, pIE->data+2, 2);
38422 + default:
38423 + break;
38424 + }
38425 +
38426 + j += (pIE->Length + 2);
38427 +
38428 + }
38429 +
38430 + //todo: check status
38431 + ptdls_sta->stat_code=0;
38432 + ptdls_sta->tdls_sta_state |= TDLS_CH_SWITCH_ON_STATE;
38433 +
38434 + issue_nulldata(adapter, NULL, 1, 0, 0);
38435 +
38436 + issue_tdls_ch_switch_rsp(adapter, psa);
38437 +
38438 + DBG_871X("issue tdls channel switch response\n");
38439 +
38440 + if((ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE) && ptdls_sta->off_ch==pmlmeext->cur_channel){
38441 + DBG_871X("back to base channel %x\n", pmlmeext->cur_channel);
38442 + ptdls_sta->option=7;
38443 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_BASE_CH);
38444 + }else{
38445 + ptdls_sta->option=6;
38446 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
38447 + }
38448 + return _FAIL;
38449 +}
38450 +
38451 +sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame)
38452 +{
38453 + struct sta_info *ptdls_sta= NULL;
38454 + struct sta_priv *pstapriv = &adapter->stapriv;
38455 + u8 *ptr = precv_frame->u.hdr.rx_data;
38456 + struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
38457 + u8 *psa;
38458 + sint parsing_length;
38459 + PNDIS_802_11_VARIABLE_IEs pIE;
38460 + u8 FIXED_IE =4;
38461 + u16 stat_code, j, switch_time, switch_timeout;
38462 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
38463 +
38464 + psa = get_sa(ptr);
38465 + ptdls_sta = rtw_get_stainfo(pstapriv, psa);
38466 +
38467 + //if channel switch is running and receiving Unsolicited TDLS Channel Switch Response,
38468 + //it will go back to base channel and terminate this channel switch procedure
38469 + if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE ){
38470 + if(pmlmeext->cur_channel==ptdls_sta->off_ch){
38471 + DBG_871X("back to base channel %x\n", pmlmeext->cur_channel);
38472 + ptdls_sta->option=7;
38473 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
38474 + }else{
38475 + DBG_871X("receive unsolicited channel switch response \n");
38476 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
38477 + }
38478 + return _FAIL;
38479 + }
38480 +
38481 + //avoiding duplicated or unconditional ch. switch. rsp
38482 + if((ptdls_sta->tdls_sta_state & TDLS_CH_SW_INITIATOR_STATE) != TDLS_CH_SW_INITIATOR_STATE)
38483 + return _FAIL;
38484 +
38485 + ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
38486 + parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
38487 + -prx_pkt_attrib->hdrlen
38488 + -prx_pkt_attrib->iv_len
38489 + -prx_pkt_attrib->icv_len
38490 + -LLC_HEADER_SIZE
38491 + -ETH_TYPE_LEN
38492 + -PAYLOAD_TYPE_LEN
38493 + -FIXED_IE;
38494 +
38495 + _rtw_memcpy(&stat_code, ptr+2, 2);
38496 +
38497 + if(stat_code!=0){
38498 + return _FAIL;
38499 + }
38500 +
38501 + //parsing information element
38502 + for(j=FIXED_IE; j<parsing_length;){
38503 +
38504 + pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
38505 +
38506 + switch (pIE->ElementID)
38507 + {
38508 + case _LINK_ID_IE_:
38509 + break;
38510 + case _CH_SWITCH_TIMING_:
38511 + _rtw_memcpy(&switch_time, pIE->data, 2);
38512 + if(switch_time > ptdls_sta->ch_switch_time)
38513 + _rtw_memcpy(&ptdls_sta->ch_switch_time, &switch_time, 2);
38514 +
38515 + _rtw_memcpy(&switch_timeout, pIE->data+2, 2);
38516 + if(switch_timeout > ptdls_sta->ch_switch_timeout)
38517 + _rtw_memcpy(&ptdls_sta->ch_switch_timeout, &switch_timeout, 2);
38518 +
38519 + default:
38520 + break;
38521 + }
38522 +
38523 + j += (pIE->Length + 2);
38524 +
38525 + }
38526 +
38527 + ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SW_INITIATOR_STATE);
38528 + ptdls_sta->tdls_sta_state |=TDLS_CH_SWITCH_ON_STATE;
38529 +
38530 + //goto set_channel_workitem_callback()
38531 + ptdls_sta->option=6;
38532 + rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
38533 +
38534 + return _FAIL;
38535 +}
38536 +
38537 +#ifdef CONFIG_WFD
38538 +void wfd_ie_tdls(_adapter * padapter, u8 *pframe, u32 *pktlen )
38539 +{
38540 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
38541 + struct wifi_display_info *pwfd_info = padapter->tdlsinfo.wfd_info;
38542 + u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
38543 + u32 wfdielen = 0;
38544 +
38545 + // WFD OUI
38546 + wfdielen = 0;
38547 + wfdie[ wfdielen++ ] = 0x50;
38548 + wfdie[ wfdielen++ ] = 0x6F;
38549 + wfdie[ wfdielen++ ] = 0x9A;
38550 + wfdie[ wfdielen++ ] = 0x0A; // WFA WFD v1.0
38551 +
38552 + // Commented by Albert 20110825
38553 + // According to the WFD Specification, the negotiation request frame should contain 3 WFD attributes
38554 + // 1. WFD Device Information
38555 + // 2. Associated BSSID ( Optional )
38556 + // 3. Local IP Adress ( Optional )
38557 +
38558 + // WFD Device Information ATTR
38559 + // Type:
38560 + wfdie[ wfdielen++ ] = WFD_ATTR_DEVICE_INFO;
38561 +
38562 + // Length:
38563 + // Note: In the WFD specification, the size of length field is 2.
38564 + RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
38565 + wfdielen += 2;
38566 +
38567 + // Value1:
38568 + // WFD device information
38569 + // available for WFD session + Preferred TDLS + WSD ( WFD Service Discovery )
38570 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL
38571 + | WFD_DEVINFO_PC_TDLS | WFD_DEVINFO_WSD);
38572 + wfdielen += 2;
38573 +
38574 + // Value2:
38575 + // Session Management Control Port
38576 + // Default TCP port for RTSP messages is 554
38577 + RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->rtsp_ctrlport );
38578 + wfdielen += 2;
38579 +
38580 + // Value3:
38581 + // WFD Device Maximum Throughput
38582 + // 300Mbps is the maximum throughput
38583 + RTW_PUT_BE16(wfdie + wfdielen, 300);
38584 + wfdielen += 2;
38585 +
38586 + // Associated BSSID ATTR
38587 + // Type:
38588 + wfdie[ wfdielen++ ] = WFD_ATTR_ASSOC_BSSID;
38589 +
38590 + // Length:
38591 + // Note: In the WFD specification, the size of length field is 2.
38592 + RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
38593 + wfdielen += 2;
38594 +
38595 + // Value:
38596 + // Associated BSSID
38597 + if ( check_fwstate( pmlmepriv, _FW_LINKED) == _TRUE )
38598 + {
38599 + _rtw_memcpy( wfdie + wfdielen, &pmlmepriv->assoc_bssid[ 0 ], ETH_ALEN );
38600 + }
38601 + else
38602 + {
38603 + _rtw_memset( wfdie + wfdielen, 0x00, ETH_ALEN );
38604 + }
38605 +
38606 + // Local IP Address ATTR
38607 + wfdie[ wfdielen++ ] = WFD_ATTR_LOCAL_IP_ADDR;
38608 +
38609 + // Length:
38610 + // Note: In the WFD specification, the size of length field is 2.
38611 + RTW_PUT_BE16(wfdie + wfdielen, 0x0005);
38612 + wfdielen += 2;
38613 +
38614 + // Version:
38615 + // 0x01: Version1;IPv4
38616 + wfdie[ wfdielen++ ] = 0x01;
38617 +
38618 + // IPv4 Address
38619 + _rtw_memcpy( wfdie + wfdielen, pwfd_info->ip_address, 4 );
38620 + wfdielen += 4;
38621 +
38622 + pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, pktlen);
38623 +
38624 +}
38625 +#endif //CONFIG_WFD
38626 +
38627 +void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
38628 +{
38629 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
38630 + struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
38631 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
38632 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
38633 + struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);
38634 +
38635 + u8 payload_type = 0x02;
38636 + u8 category = RTW_WLAN_CATEGORY_TDLS;
38637 + u8 action = TDLS_SETUP_REQUEST;
38638 + u8 bssrate[NDIS_802_11_LENGTH_RATES_EX]; //Use NDIS_802_11_LENGTH_RATES_EX in order to call func.rtw_set_supported_rate
38639 + int bssrate_len = 0, i = 0 ;
38640 + u8 more_supportedrates = 0;
38641 + unsigned int ie_len;
38642 + u8 *p;
38643 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
38644 + u8 link_id_addr[18] = {0};
38645 + u8 iedata=0;
38646 + u8 sup_ch[ 30 * 2 ] = {0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
38647 + u8 timeout_itvl[5]; //set timeout interval to maximum value
38648 + u32 time;
38649 +
38650 + //SNonce
38651 + if(pattrib->encrypt){
38652 + for(i=0;i<8;i++){
38653 + time=rtw_get_current_time();
38654 + _rtw_memcpy(&ptdls_sta->SNonce[4*i], (u8 *)&time, 4);
38655 + }
38656 + }
38657 +
38658 + //payload type
38659 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
38660 + //category, action, dialog token
38661 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
38662 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
38663 + pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
38664 +
38665 + //capability
38666 + _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
38667 +
38668 + if(pattrib->encrypt)
38669 + *pframe =*pframe | BIT(4);
38670 + pframe += 2;
38671 + pattrib->pktlen += 2;
38672 +
38673 + //supported rates
38674 + rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
38675 + bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
38676 +
38677 + if (bssrate_len > 8)
38678 + {
38679 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
38680 + more_supportedrates = 1;
38681 + }
38682 + else
38683 + {
38684 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
38685 + }
38686 +
38687 + //country(optional)
38688 + //extended supported rates
38689 + if(more_supportedrates==1){
38690 + pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
38691 + }
38692 +
38693 + //supported channels
38694 + pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);
38695 +
38696 + // SRC IE
38697 + pframe = rtw_set_ie( pframe, _SRC_IE_, 16, TDLS_SRC, &(pattrib->pktlen));
38698 +
38699 + //RSNIE
38700 + if(pattrib->encrypt)
38701 + pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
38702 +
38703 + //extended capabilities
38704 + pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
38705 +
38706 + //QoS capability(WMM_IE)
38707 + pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 7, TDLS_WMMIE, &(pattrib->pktlen));
38708 +
38709 +
38710 + if(pattrib->encrypt){
38711 + //FTIE
38712 + _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
38713 + _rtw_memset(pframe, _FTIE_, 1); //version
38714 + _rtw_memset((pframe+1), 82, 1); //length
38715 + _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
38716 + pframe += 84;
38717 + pattrib->pktlen += 84;
38718 +
38719 + //Timeout interval
38720 + timeout_itvl[0]=0x02;
38721 + _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
38722 + pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
38723 + }
38724 +
38725 + //Sup_reg_classes(optional)
38726 + //HT capabilities
38727 + pframe = rtw_tdls_set_ht_cap(padapter, pframe, pattrib);
38728 +
38729 + //20/40 BSS coexistence
38730 + if(pmlmepriv->num_FortyMHzIntolerant>0)
38731 + iedata |= BIT(2);//20 MHz BSS Width Request
38732 + pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
38733 +
38734 + //Link identifier
38735 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
38736 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
38737 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
38738 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
38739 +
38740 +#ifdef CONFIG_WFD
38741 + wfd_ie_tdls( padapter, pframe, &(pattrib->pktlen) );
38742 +#endif //CONFIG_WFD
38743 +
38744 +}
38745 +
38746 +void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
38747 +{
38748 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
38749 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
38750 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
38751 + struct sta_info *ptdls_sta;
38752 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
38753 +
38754 + u8 payload_type = 0x02;
38755 + unsigned char category = RTW_WLAN_CATEGORY_TDLS;
38756 + unsigned char action = TDLS_SETUP_RESPONSE;
38757 + unsigned char bssrate[NDIS_802_11_LENGTH_RATES_EX];
38758 + int bssrate_len = 0;
38759 + u8 more_supportedrates = 0;
38760 + unsigned int ie_len;
38761 + unsigned char *p;
38762 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
38763 + u8 link_id_addr[18] = {0};
38764 + u8 iedata=0;
38765 + u8 timeout_itvl[5]; //setup response timeout interval will copy from request
38766 + u8 ANonce[32]; //maybe it can put in ontdls_req
38767 + u8 k; //for random ANonce
38768 + u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic;
38769 + u32 time;
38770 +
38771 + ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);
38772 +
38773 + if(ptdls_sta == NULL )
38774 + {
38775 + DBG_871X("[%s] %d\n", __FUNCTION__, __LINE__);
38776 + return;
38777 + }
38778 +
38779 + if(pattrib->encrypt){
38780 + for(k=0;k<8;k++){
38781 + time=rtw_get_current_time();
38782 + _rtw_memcpy(&ptdls_sta->ANonce[4*k], (u8*)&time, 4);
38783 + }
38784 + }
38785 +
38786 + //payload type
38787 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
38788 + //category, action, status code
38789 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
38790 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
38791 + pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
38792 +
38793 + if(ptdls_sta->stat_code!=0) //invalid setup request
38794 + {
38795 + DBG_871X("ptdls_sta->stat_code:%04x \n", ptdls_sta->stat_code);
38796 + return;
38797 + }
38798 +
38799 + //dialog token
38800 + pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
38801 +
38802 + //capability
38803 + _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
38804 +
38805 + if(pattrib->encrypt )
38806 + *pframe =*pframe | BIT(4);
38807 + pframe += 2;
38808 + pattrib->pktlen += 2;
38809 +
38810 + //supported rates
38811 + rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
38812 + bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
38813 +
38814 + if (bssrate_len > 8)
38815 + {
38816 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
38817 + more_supportedrates = 1;
38818 + }
38819 + else
38820 + {
38821 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
38822 + }
38823 +
38824 + //country(optional)
38825 + //extended supported rates
38826 + if(more_supportedrates==1){
38827 + pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
38828 + }
38829 +
38830 + //supported channels
38831 + pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);
38832 +
38833 + // SRC IE
38834 + pframe = rtw_set_ie(pframe, _SRC_IE_ , 16, TDLS_SRC, &(pattrib->pktlen));
38835 +
38836 + //RSNIE
38837 + if(pattrib->encrypt){
38838 + prsnie = pframe;
38839 + pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
38840 + }
38841 +
38842 + //extended capabilities
38843 + pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
38844 +
38845 + //QoS capability(WMM_IE)
38846 + pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 7, TDLS_WMMIE, &(pattrib->pktlen));
38847 +
38848 + if(pattrib->encrypt){
38849 + wpa_tdls_generate_tpk(padapter, ptdls_sta);
38850 +
38851 + //FTIE
38852 + pftie = pframe;
38853 + pftie_mic = pframe+4;
38854 + _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
38855 + _rtw_memset(pframe, _FTIE_, 1); //version
38856 + _rtw_memset((pframe+1), 82, 1); //length
38857 + _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);
38858 + _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
38859 + pframe += 84;
38860 + pattrib->pktlen += 84;
38861 +
38862 + //Timeout interval
38863 + ptimeout_ie = pframe;
38864 + timeout_itvl[0]=0x02;
38865 + _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
38866 + pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
38867 + }
38868 +
38869 + //Sup_reg_classes(optional)
38870 + //HT capabilities
38871 + pframe = rtw_tdls_set_ht_cap(padapter, pframe, pattrib);
38872 +
38873 + //20/40 BSS coexistence
38874 + if(pmlmepriv->num_FortyMHzIntolerant>0)
38875 + iedata |= BIT(2);//20 MHz BSS Width Request
38876 + pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
38877 +
38878 + //Link identifier
38879 + plinkid_ie = pframe;
38880 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
38881 + _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
38882 + _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
38883 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
38884 +
38885 + //fill FTIE mic
38886 + if(pattrib->encrypt)
38887 + wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);
38888 +
38889 +#ifdef CONFIG_WFD
38890 + wfd_ie_tdls( padapter, pframe, &(pattrib->pktlen) );
38891 +#endif //CONFIG_WFD
38892 +
38893 +}
38894 +
38895 +void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
38896 +{
38897 +
38898 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
38899 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
38900 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
38901 + struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);
38902 +
38903 + u8 payload_type = 0x02;
38904 + unsigned char category = RTW_WLAN_CATEGORY_TDLS;
38905 + unsigned char action = TDLS_SETUP_CONFIRM;
38906 + u8 more_supportedrates = 0;
38907 + unsigned int ie_len;
38908 + unsigned char *p;
38909 + u8 timeout_itvl[5]; //set timeout interval to maximum value
38910 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
38911 + u8 link_id_addr[18] = {0};
38912 + u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic;
38913 +
38914 + //payload type
38915 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
38916 + //category, action, status code, dialog token
38917 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
38918 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
38919 + pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
38920 + pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
38921 +
38922 + if(ptdls_sta->stat_code!=0) //invalid setup request
38923 + return;
38924 +
38925 + //RSNIE
38926 + if(pattrib->encrypt){
38927 + prsnie = pframe;
38928 + pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
38929 + }
38930 +
38931 + //EDCA param set; WMM param ele.
38932 + if(pattrib->encrypt){
38933 + //FTIE
38934 + pftie = pframe;
38935 + pftie_mic = pframe+4;
38936 + _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
38937 + _rtw_memset(pframe, _FTIE_, 1); //version
38938 + _rtw_memset((pframe+1), 82, 1); //length
38939 + _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);
38940 + _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
38941 + pframe += 84;
38942 + pattrib->pktlen += 84;
38943 +
38944 + //Timeout interval
38945 + ptimeout_ie = pframe;
38946 + timeout_itvl[0]=0x02;
38947 + _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
38948 + ptdls_sta->TPK_count=0;
38949 + _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);
38950 + pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
38951 + }
38952 +
38953 + //HT operation; todo
38954 + //Link identifier
38955 + plinkid_ie = pframe;
38956 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
38957 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
38958 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
38959 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
38960 +
38961 + //fill FTIE mic
38962 + if(pattrib->encrypt)
38963 + wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);
38964 +
38965 +}
38966 +
38967 +void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
38968 +{
38969 +
38970 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
38971 + u8 payload_type = 0x02;
38972 + unsigned char category = RTW_WLAN_CATEGORY_TDLS;
38973 + unsigned char action = TDLS_TEARDOWN;
38974 + u8 link_id_addr[18] = {0};
38975 +
38976 + struct sta_info *ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);
38977 + struct sta_priv *pstapriv = &padapter->stapriv;
38978 +
38979 + //payload type
38980 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
38981 + //category, action, reason code
38982 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
38983 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
38984 + pframe = rtw_set_fixed_ie(pframe, 1, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
38985 +
38986 + //Link identifier
38987 + if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){
38988 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
38989 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
38990 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
38991 + }else if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){
38992 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
38993 + _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
38994 + _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
38995 + }
38996 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
38997 +
38998 +}
38999 +
39000 +void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39001 +{
39002 +
39003 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39004 + u8 payload_type = 0x02;
39005 + u8 category = RTW_WLAN_CATEGORY_TDLS;
39006 + u8 action = TDLS_DISCOVERY_REQUEST;
39007 + u8 link_id_addr[18] = {0};
39008 + static u8 dialogtoken=0;
39009 +
39010 + //payload type
39011 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39012 + //category, action, reason code
39013 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39014 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39015 + pframe = rtw_set_fixed_ie(pframe, 1, &(dialogtoken), &(pattrib->pktlen));
39016 + dialogtoken = (dialogtoken+1)%256;
39017 +
39018 + //Link identifier
39019 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39020 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
39021 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
39022 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39023 +
39024 +}
39025 +
39026 +void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog)
39027 +{
39028 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
39029 + struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
39030 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39031 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
39032 +
39033 + u8 category = RTW_WLAN_CATEGORY_PUBLIC;
39034 + u8 action = TDLS_DISCOVERY_RESPONSE;
39035 + u8 bssrate[NDIS_802_11_LENGTH_RATES_EX];
39036 + int bssrate_len = 0;
39037 + u8 more_supportedrates = 0;
39038 + u8 *p;
39039 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
39040 + u8 link_id_addr[18] = {0};
39041 + u8 iedata=0;
39042 + u8 timeout_itvl[5]; //set timeout interval to maximum value
39043 + u32 timeout_interval= TPK_RESEND_COUNT * 1000;
39044 +
39045 + //category, action, dialog token
39046 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39047 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39048 + pframe = rtw_set_fixed_ie(pframe, 1, &(dialog), &(pattrib->pktlen));
39049 +
39050 + //capability
39051 + _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
39052 +
39053 + if(pattrib->encrypt)
39054 + *pframe =*pframe | BIT(4);
39055 + pframe += 2;
39056 + pattrib->pktlen += 2;
39057 +
39058 + //supported rates
39059 + rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
39060 + bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
39061 +
39062 + if (bssrate_len > 8)
39063 + {
39064 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
39065 + more_supportedrates = 1;
39066 + }
39067 + else
39068 + {
39069 + pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
39070 + }
39071 +
39072 + //extended supported rates
39073 + if(more_supportedrates==1){
39074 + pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
39075 + }
39076 +
39077 + //supported channels
39078 + pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);
39079 +
39080 + //RSNIE
39081 + if(pattrib->encrypt)
39082 + pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
39083 +
39084 + //extended capability
39085 + pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
39086 +
39087 + if(pattrib->encrypt){
39088 + //FTIE
39089 + _rtw_memset(pframe, 0, 84); //All fields shall be set to 0
39090 + _rtw_memset(pframe, _FTIE_, 1); //version
39091 + _rtw_memset((pframe+1), 82, 1); //length
39092 + pframe += 84;
39093 + pattrib->pktlen += 84;
39094 +
39095 + //Timeout interval
39096 + timeout_itvl[0]=0x02;
39097 + _rtw_memcpy(timeout_itvl+1, &timeout_interval, 4);
39098 + pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
39099 + }
39100 +
39101 + //Sup_reg_classes(optional)
39102 + //HT capabilities
39103 + pframe = rtw_tdls_set_ht_cap(padapter, pframe, pattrib);
39104 +
39105 + //20/40 BSS coexistence
39106 + if(pmlmepriv->num_FortyMHzIntolerant>0)
39107 + iedata |= BIT(2);//20 MHz BSS Width Request
39108 + pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
39109 +
39110 + //Link identifier
39111 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39112 + _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
39113 + _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
39114 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39115 +
39116 +}
39117 +
39118 +void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39119 +{
39120 +
39121 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39122 + u8 payload_type = 0x02;
39123 + unsigned char category = RTW_WLAN_CATEGORY_TDLS;
39124 + unsigned char action = TDLS_PEER_TRAFFIC_INDICATION;
39125 +
39126 + u8 link_id_addr[18] = {0};
39127 + u8 AC_queue=0;
39128 + struct sta_priv *pstapriv = &padapter->stapriv;
39129 + struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
39130 +
39131 + //payload type
39132 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39133 + //category, action, reason code
39134 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39135 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39136 + pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
39137 +
39138 + //Link identifier
39139 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39140 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
39141 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
39142 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39143 +
39144 + //PTI control
39145 + //PU buffer status
39146 + if(ptdls_sta->uapsd_bk&BIT(1))
39147 + AC_queue=BIT(0);
39148 + if(ptdls_sta->uapsd_be&BIT(1))
39149 + AC_queue=BIT(1);
39150 + if(ptdls_sta->uapsd_vi&BIT(1))
39151 + AC_queue=BIT(2);
39152 + if(ptdls_sta->uapsd_vo&BIT(1))
39153 + AC_queue=BIT(3);
39154 + pframe = rtw_set_ie(pframe, _PTI_BUFFER_STATUS_, 1, &AC_queue, &(pattrib->pktlen));
39155 +
39156 +}
39157 +
39158 +void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39159 +{
39160 +
39161 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39162 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
39163 + u8 payload_type = 0x02;
39164 + unsigned char category = RTW_WLAN_CATEGORY_TDLS;
39165 + unsigned char action = TDLS_CHANNEL_SWITCH_REQUEST;
39166 + u8 link_id_addr[18] = {0};
39167 + struct sta_priv *pstapriv = &padapter->stapriv;
39168 + struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
39169 + u8 ch_switch_timing[4] = {0};
39170 + u16 switch_time= CH_SWITCH_TIME, switch_timeout=CH_SWITCH_TIMEOUT;
39171 +
39172 + //payload type
39173 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39174 + //category, action, target_ch
39175 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39176 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39177 + pframe = rtw_set_fixed_ie(pframe, 1, &(ptdlsinfo->candidate_ch), &(pattrib->pktlen));
39178 +
39179 + //Link identifier
39180 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39181 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
39182 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
39183 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39184 +
39185 + //ch switch timing
39186 + _rtw_memcpy(ch_switch_timing, &switch_time, 2);
39187 + _rtw_memcpy(ch_switch_timing+2, &switch_timeout, 2);
39188 + pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
39189 +
39190 + //update ch switch attrib to sta_info
39191 + ptdls_sta->off_ch=ptdlsinfo->candidate_ch;
39192 + ptdls_sta->ch_switch_time=switch_time;
39193 + ptdls_sta->ch_switch_timeout=switch_timeout;
39194 +
39195 +}
39196 +
39197 +void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39198 +{
39199 +
39200 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39201 + u8 payload_type = 0x02;
39202 + unsigned char category = RTW_WLAN_CATEGORY_TDLS;
39203 + unsigned char action = TDLS_CHANNEL_SWITCH_RESPONSE;
39204 + u8 link_id_addr[18] = {0};
39205 + struct sta_priv *pstapriv = &padapter->stapriv;
39206 + struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
39207 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
39208 + struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
39209 + u8 ch_switch_timing[4] = {0};
39210 +
39211 + //payload type
39212 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39213 + //category, action, status_code
39214 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39215 + pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
39216 + pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
39217 +
39218 + //Link identifier
39219 + _rtw_memcpy(link_id_addr, pattrib->ra, 6);
39220 + _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
39221 + _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
39222 + pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
39223 +
39224 + //ch switch timing
39225 + _rtw_memcpy(ch_switch_timing, &ptdls_sta->ch_switch_time, 2);
39226 + _rtw_memcpy(ch_switch_timing+2, &ptdls_sta->ch_switch_timeout, 2);
39227 + pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
39228 +
39229 +}
39230 +
39231 +#ifdef CONFIG_WFD
39232 +void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39233 +{
39234 +
39235 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39236 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
39237 + struct wifidirect_info *pbuddy_wdinfo = &padapter->pbuddy_adapter->wdinfo;
39238 + u8 payload_type = 0x02;
39239 + u8 category = RTW_WLAN_CATEGORY_P2P;
39240 + u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a};
39241 + u8 probe_req = 4;
39242 + u8 wfdielen = 0;
39243 +
39244 + //payload type
39245 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39246 + //category, OUI, frame_body_type
39247 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39248 + pframe = rtw_set_fixed_ie(pframe, 3, WFA_OUI, &(pattrib->pktlen));
39249 + pframe = rtw_set_fixed_ie(pframe, 1, &(probe_req), &(pattrib->pktlen));
39250 +
39251 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
39252 + {
39253 + wfdielen = build_probe_req_wfd_ie(pwdinfo, pframe);
39254 + pframe += wfdielen;
39255 + pattrib->pktlen += wfdielen;
39256 + }
39257 + else if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))
39258 + {
39259 + wfdielen = build_probe_req_wfd_ie(pbuddy_wdinfo, pframe);
39260 + pframe += wfdielen;
39261 + pattrib->pktlen += wfdielen;
39262 + }
39263 +
39264 +}
39265 +
39266 +void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
39267 +{
39268 +
39269 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
39270 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
39271 + struct wifidirect_info *pbuddy_wdinfo = &padapter->pbuddy_adapter->wdinfo;
39272 + u8 payload_type = 0x02;
39273 + u8 category = RTW_WLAN_CATEGORY_P2P;
39274 + u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a};
39275 + u8 probe_rsp = 5;
39276 + u8 wfdielen = 0;
39277 +
39278 + //payload type
39279 + pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
39280 + //category, OUI, frame_body_type
39281 + pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
39282 + pframe = rtw_set_fixed_ie(pframe, 3, WFA_OUI, &(pattrib->pktlen));
39283 + pframe = rtw_set_fixed_ie(pframe, 1, &(probe_rsp), &(pattrib->pktlen));
39284 +
39285 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
39286 + {
39287 + wfdielen = build_probe_resp_wfd_ie(pwdinfo, pframe, 1);
39288 + pframe += wfdielen;
39289 + pattrib->pktlen += wfdielen;
39290 + }
39291 + else if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))
39292 + {
39293 + wfdielen = build_probe_resp_wfd_ie(pbuddy_wdinfo, pframe, 1);
39294 + pframe += wfdielen;
39295 + pattrib->pktlen += wfdielen;
39296 + }
39297 +
39298 +}
39299 +#endif //CONFIG_WFD
39300 +
39301 +void _TPK_timer_hdl(void *FunctionContext)
39302 +{
39303 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
39304 +
39305 + ptdls_sta->TPK_count++;
39306 + //TPK_timer set 1000 as default
39307 + //retry timer should set at least 301 sec.
39308 + if(ptdls_sta->TPK_count==TPK_RESEND_COUNT){
39309 + ptdls_sta->TPK_count=0;
39310 + issue_tdls_setup_req(ptdls_sta->padapter, ptdls_sta->hwaddr);
39311 + }
39312 +
39313 + _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);
39314 +}
39315 +
39316 +void init_TPK_timer(_adapter *padapter, struct sta_info *psta)
39317 +{
39318 + psta->padapter=padapter;
39319 +
39320 + _init_timer(&psta->TPK_timer, padapter->pnetdev, _TPK_timer_hdl, psta);
39321 +}
39322 +
39323 +// TDLS_DONE_CH_SEN: channel sensing and report candidate channel
39324 +// TDLS_OFF_CH: first time set channel to off channel
39325 +// TDLS_BASE_CH: when go back to the channel linked with AP, send null data to peer STA as an indication
39326 +void _ch_switch_timer_hdl(void *FunctionContext)
39327 +{
39328 +
39329 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
39330 + _adapter *padapter = ptdls_sta->padapter;
39331 +
39332 + if( ptdls_sta->option == TDLS_DONE_CH_SEN ){
39333 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_DONE_CH_SEN);
39334 + }else if( ptdls_sta->option == TDLS_OFF_CH ){
39335 + issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta, 0);
39336 + _set_timer(&ptdls_sta->base_ch_timer, 500);
39337 + }else if( ptdls_sta->option == TDLS_BASE_CH){
39338 + issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta, 0);
39339 + }
39340 +}
39341 +
39342 +void init_ch_switch_timer(_adapter *padapter, struct sta_info *psta)
39343 +{
39344 + psta->padapter=padapter;
39345 + _init_timer(&psta->option_timer, padapter->pnetdev, _ch_switch_timer_hdl, psta);
39346 +}
39347 +
39348 +void _base_ch_timer_hdl(void *FunctionContext)
39349 +{
39350 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
39351 + rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_OFF_CH);
39352 +}
39353 +
39354 +void init_base_ch_timer(_adapter *padapter, struct sta_info *psta)
39355 +{
39356 + psta->padapter=padapter;
39357 + _init_timer(&psta->base_ch_timer, padapter->pnetdev, _base_ch_timer_hdl, psta);
39358 +}
39359 +
39360 +void _off_ch_timer_hdl(void *FunctionContext)
39361 +{
39362 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
39363 + rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_BASE_CH );
39364 +}
39365 +
39366 +void init_off_ch_timer(_adapter *padapter, struct sta_info *psta)
39367 +{
39368 + psta->padapter=padapter;
39369 + _init_timer(&psta->off_ch_timer, padapter->pnetdev, _off_ch_timer_hdl, psta);
39370 +}
39371 +
39372 +void _tdls_handshake_timer_hdl(void *FunctionContext)
39373 +{
39374 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
39375 +
39376 + if(ptdls_sta != NULL)
39377 + {
39378 + if( !(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) )
39379 + {
39380 + DBG_871X("tdls handshake time out\n");
39381 + free_tdls_sta(ptdls_sta->padapter, ptdls_sta);
39382 + }
39383 + }
39384 +}
39385 +
39386 +void init_handshake_timer(_adapter *padapter, struct sta_info *psta)
39387 +{
39388 + psta->padapter=padapter;
39389 + _init_timer(&psta->handshake_timer, padapter->pnetdev, _tdls_handshake_timer_hdl, psta);
39390 +}
39391 +
39392 +//Check tdls peer sta alive.
39393 +void _tdls_alive_timer_phase1_hdl(void *FunctionContext)
39394 +{
39395 + _irqL irqL;
39396 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
39397 + _adapter *padapter = ptdls_sta->padapter;
39398 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
39399 +
39400 + _enter_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
39401 + ptdls_sta->timer_flag = 1;
39402 + _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
39403 +
39404 + ptdls_sta->tdls_sta_state &= (~TDLS_ALIVE_STATE);
39405 +
39406 + DBG_871X("issue_tdls_dis_req to check alive\n");
39407 + issue_tdls_dis_req( padapter, ptdls_sta->hwaddr);
39408 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH1);
39409 + sta_update_last_rx_pkts(ptdls_sta);
39410 +
39411 + if ( ptdls_sta->timer_flag == 2 )
39412 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_FREE_STA);
39413 + else
39414 + {
39415 + _enter_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
39416 + ptdls_sta->timer_flag = 0;
39417 + _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
39418 + }
39419 +
39420 +}
39421 +
39422 +void _tdls_alive_timer_phase2_hdl(void *FunctionContext)
39423 +{
39424 + _irqL irqL;
39425 + struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
39426 + _adapter *padapter = ptdls_sta->padapter;
39427 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
39428 +
39429 + _enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
39430 + ptdls_sta->timer_flag = 1;
39431 + _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
39432 +
39433 + if( (ptdls_sta->tdls_sta_state & TDLS_ALIVE_STATE) &&
39434 + (sta_last_rx_pkts(ptdls_sta) + 3 <= sta_rx_pkts(ptdls_sta)) )
39435 + {
39436 + DBG_871X("TDLS STA ALIVE, ptdls_sta->sta_stats.last_rx_pkts:%llu, ptdls_sta->sta_stats.rx_pkts:%llu\n",
39437 + sta_last_rx_pkts(ptdls_sta), sta_rx_pkts(ptdls_sta));
39438 +
39439 + ptdls_sta->alive_count = 0;
39440 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH2);
39441 + }
39442 + else
39443 + {
39444 + if( !(ptdls_sta->tdls_sta_state & TDLS_ALIVE_STATE) )
39445 + DBG_871X("TDLS STA TOO FAR\n");
39446 + if( !(sta_last_rx_pkts(ptdls_sta) + 3 <= sta_rx_pkts(ptdls_sta)))
39447 + DBG_871X("TDLS LINK WITH LOW TRAFFIC, ptdls_sta->sta_stats.last_rx_pkts:%llu, ptdls_sta->sta_stats.rx_pkts:%llu\n",
39448 + sta_last_rx_pkts(ptdls_sta), sta_rx_pkts(ptdls_sta));
39449 +
39450 + ptdls_sta->alive_count++;
39451 + if( ptdls_sta->alive_count == TDLS_ALIVE_COUNT )
39452 + {
39453 + ptdls_sta->stat_code = _RSON_TDLS_TEAR_TOOFAR_;
39454 + issue_tdls_teardown(padapter, ptdls_sta->hwaddr);
39455 + }
39456 + else
39457 + {
39458 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH2);
39459 + }
39460 + }
39461 +
39462 + if ( ptdls_sta->timer_flag == 2 )
39463 + rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_FREE_STA);
39464 + else
39465 + {
39466 + _enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
39467 + ptdls_sta->timer_flag = 0;
39468 + _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
39469 +}
39470 +
39471 +}
39472 +
39473 +void init_tdls_alive_timer(_adapter *padapter, struct sta_info *psta)
39474 +{
39475 + psta->padapter=padapter;
39476 + _init_timer(&psta->alive_timer1, padapter->pnetdev, _tdls_alive_timer_phase1_hdl, psta);
39477 + _init_timer(&psta->alive_timer2, padapter->pnetdev, _tdls_alive_timer_phase2_hdl, psta);
39478 +}
39479 +
39480 +int update_sgi_tdls(_adapter *padapter, struct sta_info *psta)
39481 +{
39482 + struct ht_priv *psta_ht = NULL;
39483 + psta_ht = &psta->htpriv;
39484 +
39485 + if(psta_ht->ht_option)
39486 + {
39487 + return psta_ht->sgi;
39488 + }
39489 + else
39490 + return _FALSE;
39491 +}
39492 +
39493 +u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta)
39494 +{
39495 + int i;
39496 + u8 rf_type, id;
39497 + unsigned char sta_band = 0;
39498 + unsigned char limit;
39499 + unsigned int tx_ra_bitmap=0;
39500 + struct ht_priv *psta_ht = NULL;
39501 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
39502 + WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
39503 +
39504 + psta_ht = &psta->htpriv;
39505 + //b/g mode ra_bitmap
39506 + for (i=0; i<sizeof(psta->bssrateset); i++)
39507 + {
39508 + if (psta->bssrateset[i])
39509 + tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
39510 + }
39511 +
39512 + //n mode ra_bitmap
39513 + if(psta_ht->ht_option)
39514 + {
39515 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
39516 + if(rf_type == RF_2T2R)
39517 + limit=16;// 2R
39518 + else
39519 + limit=8;// 1R
39520 +
39521 + for (i=0; i<limit; i++) {
39522 + if (psta_ht->ht_cap.supp_mcs_set[i/8] & BIT(i%8))
39523 + tx_ra_bitmap |= BIT(i+12);
39524 + }
39525 + }
39526 +
39527 + if ( pcur_network->Configuration.DSConfig > 14 ) {
39528 + // 5G band
39529 + if (tx_ra_bitmap & 0xffff000)
39530 + sta_band |= WIRELESS_11_5N | WIRELESS_11A;
39531 + else
39532 + sta_band |= WIRELESS_11A;
39533 + } else {
39534 + if (tx_ra_bitmap & 0xffff000)
39535 + sta_band |= WIRELESS_11_24N | WIRELESS_11G | WIRELESS_11B;
39536 + else if (tx_ra_bitmap & 0xff0)
39537 + sta_band |= WIRELESS_11G |WIRELESS_11B;
39538 + else
39539 + sta_band |= WIRELESS_11B;
39540 + }
39541 +
39542 + id = networktype_to_raid(sta_band);
39543 + tx_ra_bitmap |= ((id<<28)&0xf0000000);
39544 + return tx_ra_bitmap;
39545 +}
39546 +
39547 +#endif //CONFIG_TDLS
39548 +
39549 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c b/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c
39550 index 539b74f..56dac60d 100644
39551 --- a/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c
39552 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c
39553 @@ -16,8 +16,7 @@
39554 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
39555 *
39556 *
39557 -
39558 -******************************************************************************/
39559 + ******************************************************************************/
39560 #define _RTW_WLAN_UTIL_C_
39561
39562 #include <drv_conf.h>
39563 @@ -42,8 +41,11 @@ unsigned char AIRGOCAP_OUI[] = {0x00, 0x0a, 0xf5};
39564 unsigned char REALTEK_96B_IE[] = {0x00, 0xe0, 0x4c, 0x02, 0x01, 0x20};
39565
39566 extern unsigned char MCS_rate_2R[16];
39567 +#ifdef CONFIG_DISABLE_MCS13TO15
39568 +extern unsigned char MCS_rate_2R_MCS13TO15_OFF[16];
39569 +#endif //CONFIG_DISABLE_MCS13TO15
39570 extern unsigned char MCS_rate_1R[16];
39571 -extern unsigned char WPA_OUI[];
39572 +extern unsigned char RTW_WPA_OUI[];
39573 extern unsigned char WPA_TKIP_CIPHER[4];
39574 extern unsigned char RSN_TKIP_CIPHER[4];
39575
39576 @@ -53,6 +55,23 @@ extern unsigned char RSN_TKIP_CIPHER[4];
39577 #define WAIT_FOR_BCN_TO_MIN (6000)
39578 #define WAIT_FOR_BCN_TO_MAX (20000)
39579
39580 +static u8 rtw_basic_rate_cck[4] = {
39581 + IEEE80211_CCK_RATE_1MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_2MB|IEEE80211_BASIC_RATE_MASK,
39582 + IEEE80211_CCK_RATE_5MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_11MB|IEEE80211_BASIC_RATE_MASK
39583 +};
39584 +
39585 +static u8 rtw_basic_rate_ofdm[3] = {
39586 + IEEE80211_OFDM_RATE_6MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_OFDM_RATE_12MB|IEEE80211_BASIC_RATE_MASK,
39587 + IEEE80211_OFDM_RATE_24MB|IEEE80211_BASIC_RATE_MASK
39588 +};
39589 +
39590 +static u8 rtw_basic_rate_mix[7] = {
39591 + IEEE80211_CCK_RATE_1MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_2MB|IEEE80211_BASIC_RATE_MASK,
39592 + IEEE80211_CCK_RATE_5MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_11MB|IEEE80211_BASIC_RATE_MASK,
39593 + IEEE80211_OFDM_RATE_6MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_OFDM_RATE_12MB|IEEE80211_BASIC_RATE_MASK,
39594 + IEEE80211_OFDM_RATE_24MB|IEEE80211_BASIC_RATE_MASK
39595 +};
39596 +
39597
39598 int cckrates_included(unsigned char *rate, int ratelen)
39599 {
39600 @@ -160,6 +179,7 @@ int judge_network_type(_adapter *padapter, unsigned char *rate, int ratelen)
39601 return network_type;
39602 }
39603
39604 +unsigned char ratetbl_val_2wifirate(unsigned char rate);
39605 unsigned char ratetbl_val_2wifirate(unsigned char rate)
39606 {
39607 unsigned char val = 0;
39608 @@ -220,6 +240,7 @@ unsigned char ratetbl_val_2wifirate(unsigned char rate)
39609
39610 }
39611
39612 +int is_basicrate(_adapter *padapter, unsigned char rate);
39613 int is_basicrate(_adapter *padapter, unsigned char rate)
39614 {
39615 int i;
39616 @@ -242,7 +263,7 @@ int is_basicrate(_adapter *padapter, unsigned char rate)
39617 return _FALSE;
39618 }
39619
39620 -
39621 +unsigned int ratetbl2rateset(_adapter *padapter, unsigned char *rateset);
39622 unsigned int ratetbl2rateset(_adapter *padapter, unsigned char *rateset)
39623 {
39624 int i;
39625 @@ -288,29 +309,101 @@ void get_rate_set(_adapter *padapter, unsigned char *pbssrate, int *bssrate_len)
39626 _rtw_memcpy(pbssrate, supportedrates, *bssrate_len);
39627 }
39628
39629 +void UpdateBrateTbl(
39630 + IN PADAPTER Adapter,
39631 + IN u8 *mBratesOS
39632 +)
39633 +{
39634 + u8 i;
39635 + u8 rate;
39636 +
39637 + // 1M, 2M, 5.5M, 11M, 6M, 12M, 24M are mandatory.
39638 + for(i=0;i<NDIS_802_11_LENGTH_RATES_EX;i++)
39639 + {
39640 + rate = mBratesOS[i] & 0x7f;
39641 + switch(rate)
39642 + {
39643 + case IEEE80211_CCK_RATE_1MB:
39644 + case IEEE80211_CCK_RATE_2MB:
39645 + case IEEE80211_CCK_RATE_5MB:
39646 + case IEEE80211_CCK_RATE_11MB:
39647 + case IEEE80211_OFDM_RATE_6MB:
39648 + case IEEE80211_OFDM_RATE_12MB:
39649 + case IEEE80211_OFDM_RATE_24MB:
39650 + mBratesOS[i] |= IEEE80211_BASIC_RATE_MASK;
39651 + break;
39652 + }
39653 + }
39654 +
39655 +}
39656 +
39657 +void UpdateBrateTblForSoftAP(u8 *bssrateset, u32 bssratelen)
39658 +{
39659 + u8 i;
39660 + u8 rate;
39661 +
39662 + for(i=0;i<bssratelen;i++)
39663 + {
39664 + rate = bssrateset[i] & 0x7f;
39665 + switch(rate)
39666 + {
39667 + case IEEE80211_CCK_RATE_1MB:
39668 + case IEEE80211_CCK_RATE_2MB:
39669 + case IEEE80211_CCK_RATE_5MB:
39670 + case IEEE80211_CCK_RATE_11MB:
39671 + bssrateset[i] |= IEEE80211_BASIC_RATE_MASK;
39672 + break;
39673 + }
39674 + }
39675 +
39676 +}
39677 +
39678 void Save_DM_Func_Flag(_adapter *padapter)
39679 {
39680 u8 bSaveFlag = _TRUE;
39681
39682 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
39683 +#ifdef CONFIG_CONCURRENT_MODE
39684 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
39685 + if(pbuddy_adapter)
39686 + rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
39687 +#endif
39688 +
39689 + rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
39690 +
39691 }
39692
39693 void Restore_DM_Func_Flag(_adapter *padapter)
39694 {
39695 u8 bSaveFlag = _FALSE;
39696 -
39697 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
39698 +#ifdef CONFIG_CONCURRENT_MODE
39699 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
39700 + if(pbuddy_adapter)
39701 + rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
39702 +#endif
39703 + rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
39704 }
39705
39706 void Switch_DM_Func(_adapter *padapter, u8 mode, u8 enable)
39707 {
39708 +#ifdef CONFIG_CONCURRENT_MODE
39709 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
39710 +#endif
39711 +
39712 if(enable == _TRUE)
39713 {
39714 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_DM_FUNC_SET, (u8 *)(&mode));
39715 +#ifdef CONFIG_CONCURRENT_MODE
39716 + if(pbuddy_adapter)
39717 + rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_DM_FUNC_SET, (u8 *)(&mode));
39718 +#endif
39719 + rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_SET, (u8 *)(&mode));
39720 }
39721 else
39722 {
39723 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_DM_FUNC_CLR, (u8 *)(&mode));
39724 +#ifdef CONFIG_CONCURRENT_MODE
39725 + if(pbuddy_adapter)
39726 + rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_DM_FUNC_CLR, (u8 *)(&mode));
39727 +#endif
39728 + rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_CLR, (u8 *)(&mode));
39729 }
39730
39731 #if 0
39732 @@ -330,54 +423,176 @@ void Switch_DM_Func(_adapter *padapter, u8 mode, u8 enable)
39733
39734 }
39735
39736 -void Set_NETYPE1_MSR(_adapter *padapter, u8 type)
39737 +static void Set_NETYPE1_MSR(_adapter *padapter, u8 type)
39738 +{
39739 + rtw_hal_set_hwreg(padapter, HW_VAR_MEDIA_STATUS1, (u8 *)(&type));
39740 +}
39741 +
39742 +static void Set_NETYPE0_MSR(_adapter *padapter, u8 type)
39743 +{
39744 + rtw_hal_set_hwreg(padapter, HW_VAR_MEDIA_STATUS, (u8 *)(&type));
39745 +}
39746 +
39747 +void Set_MSR(_adapter *padapter, u8 type)
39748 {
39749 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MEDIA_STATUS1, (u8 *)(&type));
39750 +#ifdef CONFIG_CONCURRENT_MODE
39751 + if(padapter->iface_type == IFACE_PORT1)
39752 + {
39753 + Set_NETYPE1_MSR(padapter, type);
39754 + }
39755 + else
39756 +#endif
39757 + {
39758 + Set_NETYPE0_MSR(padapter, type);
39759 + }
39760 }
39761
39762 -void Set_NETYPE0_MSR(_adapter *padapter, u8 type)
39763 +inline u8 rtw_get_oper_ch(_adapter *adapter)
39764 {
39765 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MEDIA_STATUS, (u8 *)(&type));
39766 + return adapter_to_dvobj(adapter)->oper_channel;
39767 +}
39768 +
39769 +inline void rtw_set_oper_ch(_adapter *adapter, u8 ch)
39770 +{
39771 + if (adapter_to_dvobj(adapter)->oper_channel != ch)
39772 + adapter_to_dvobj(adapter)->on_oper_ch_time = rtw_get_current_time();
39773 +
39774 + adapter_to_dvobj(adapter)->oper_channel = ch;
39775 +}
39776 +
39777 +inline u8 rtw_get_oper_bw(_adapter *adapter)
39778 +{
39779 + return adapter_to_dvobj(adapter)->oper_bwmode;
39780 +}
39781 +
39782 +inline void rtw_set_oper_bw(_adapter *adapter, u8 bw)
39783 +{
39784 + adapter_to_dvobj(adapter)->oper_bwmode = bw;
39785 +}
39786 +
39787 +inline u8 rtw_get_oper_choffset(_adapter *adapter)
39788 +{
39789 + return adapter_to_dvobj(adapter)->oper_ch_offset;
39790 +}
39791 +
39792 +inline void rtw_set_oper_choffset(_adapter *adapter, u8 offset)
39793 +{
39794 + adapter_to_dvobj(adapter)->oper_ch_offset = offset;
39795 +}
39796 +
39797 +inline u32 rtw_get_on_oper_ch_time(_adapter *adapter)
39798 +{
39799 + return adapter_to_dvobj(adapter)->on_oper_ch_time;
39800 +}
39801 +
39802 +inline u32 rtw_get_on_cur_ch_time(_adapter *adapter)
39803 +{
39804 + if (adapter->mlmeextpriv.cur_channel == adapter_to_dvobj(adapter)->oper_channel)
39805 + return adapter_to_dvobj(adapter)->on_oper_ch_time;
39806 + else
39807 + return 0;
39808 }
39809
39810 void SelectChannel(_adapter *padapter, unsigned char channel)
39811 {
39812 - unsigned int scanMode;
39813 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
39814 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
39815 +
39816 +#ifdef CONFIG_DUALMAC_CONCURRENT
39817 + //saved channel info
39818 + rtw_set_oper_ch(padapter, channel);
39819 + dc_SelectChannel(padapter, channel);
39820 +#else //CONFIG_DUALMAC_CONCURRENT
39821 +
39822 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
39823
39824 - scanMode = (pmlmeext->sitesurvey_res.scan_mode == SCAN_ACTIVE)? 1: 0;//todo:
39825 + //saved channel info
39826 + rtw_set_oper_ch(padapter, channel);
39827
39828 - if(padapter->HalFunc.set_channel_handler)
39829 - padapter->HalFunc.set_channel_handler(padapter, channel);
39830 + rtw_hal_set_chan(padapter, channel);
39831
39832 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
39833 +
39834 +#endif // CONFIG_DUALMAC_CONCURRENT
39835 }
39836
39837 void SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_offset)
39838 {
39839 - if(padapter->HalFunc.set_bwmode_handler)
39840 - padapter->HalFunc.set_bwmode_handler(padapter, (HT_CHANNEL_WIDTH)bwmode, channel_offset);
39841 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
39842 +
39843 +#ifdef CONFIG_DUALMAC_CONCURRENT
39844 + //saved bw info
39845 + rtw_set_oper_bw(padapter, bwmode);
39846 + rtw_set_oper_choffset(padapter, channel_offset);
39847 + dc_SetBWMode(padapter, bwmode, channel_offset);
39848 +#else //CONFIG_DUALMAC_CONCURRENT
39849 +
39850 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setbw_mutex), NULL);
39851 +
39852 + //saved bw info
39853 + rtw_set_oper_bw(padapter, bwmode);
39854 + rtw_set_oper_choffset(padapter, channel_offset);
39855 +
39856 + rtw_hal_set_bwmode(padapter, (HT_CHANNEL_WIDTH)bwmode, channel_offset);
39857 +
39858 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setbw_mutex), NULL);
39859 +
39860 +#endif // CONFIG_DUALMAC_CONCURRENT
39861 }
39862
39863 void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode)
39864 {
39865 + u8 center_ch;
39866 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
39867 +
39868 + if ( padapter->bNotifyChannelChange )
39869 + {
39870 + DBG_871X( "[%s] ch = %d, offset = %d, bwmode = %d\n", __FUNCTION__, channel, channel_offset, bwmode );
39871 + }
39872 +
39873 if((bwmode == HT_CHANNEL_WIDTH_20)||(channel_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE))
39874 {
39875 - SelectChannel(padapter, channel);
39876 + //SelectChannel(padapter, channel);
39877 + center_ch = channel;
39878 }
39879 else
39880 {
39881 //switch to the proper channel
39882 if (channel_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
39883 {
39884 - SelectChannel(padapter, channel + 2);
39885 + //SelectChannel(padapter, channel + 2);
39886 + center_ch = channel + 2;
39887 }
39888 else
39889 {
39890 - SelectChannel(padapter, channel - 2);
39891 + //SelectChannel(padapter, channel - 2);
39892 + center_ch = channel - 2;
39893 }
39894 }
39895
39896 + //set Channel , must be independant for correct co_ch value/
39897 +#ifdef CONFIG_DUALMAC_CONCURRENT
39898 + //saved channel/bw info
39899 + rtw_set_oper_ch(padapter, channel);
39900 + rtw_set_oper_bw(padapter, bwmode);
39901 + rtw_set_oper_choffset(padapter, channel_offset);
39902 + dc_SelectChannel(padapter, center_ch);// set center channel
39903 +#else //CONFIG_DUALMAC_CONCURRENT
39904 +
39905 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
39906
39907 + //saved channel/bw info
39908 + rtw_set_oper_ch(padapter, channel);
39909 + rtw_set_oper_bw(padapter, bwmode);
39910 + rtw_set_oper_choffset(padapter, channel_offset);
39911 +
39912 + rtw_hal_set_chan(padapter, center_ch);
39913 +
39914 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->setch_mutex), NULL);
39915 +
39916 +#endif // CONFIG_DUALMAC_CONCURRENT
39917 +
39918 +
39919 + //set BandWidth
39920 SetBWMode(padapter, bwmode, channel_offset);
39921
39922 }
39923 @@ -414,8 +629,14 @@ u16 get_beacon_interval(WLAN_BSSID_EX *bss)
39924
39925 int is_client_associated_to_ap(_adapter *padapter)
39926 {
39927 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
39928 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
39929 + struct mlme_ext_priv *pmlmeext;
39930 + struct mlme_ext_info *pmlmeinfo;
39931 +
39932 + if(!padapter)
39933 + return _FAIL;
39934 +
39935 + pmlmeext = &padapter->mlmeextpriv;
39936 + pmlmeinfo = &(pmlmeext->mlmext_info);
39937
39938 if ((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) && ((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE))
39939 {
39940 @@ -481,17 +702,47 @@ void CAM_empty_entry(
39941 u8 ucIndex
39942 )
39943 {
39944 - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CAM_EMPTY_ENTRY, (u8 *)(&ucIndex));
39945 + rtw_hal_set_hwreg(Adapter, HW_VAR_CAM_EMPTY_ENTRY, (u8 *)(&ucIndex));
39946 }
39947
39948 void invalidate_cam_all(_adapter *padapter)
39949 {
39950 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_CAM_INVALID_ALL, 0);
39951 + rtw_hal_set_hwreg(padapter, HW_VAR_CAM_INVALID_ALL, 0);
39952 }
39953 +#if 0
39954 +static u32 _ReadCAM(_adapter *padapter ,u32 addr)
39955 +{
39956 + u32 count = 0, cmd;
39957 + cmd = CAM_POLLINIG |addr ;
39958 + rtw_write32(padapter, RWCAM, cmd);
39959 +
39960 + do{
39961 + if(0 == (rtw_read32(padapter,REG_CAMCMD) & CAM_POLLINIG)){
39962 + break;
39963 + }
39964 + }while(count++ < 100);
39965 +
39966 + return rtw_read32(padapter,REG_CAMREAD);
39967 +}
39968 +void read_cam(_adapter *padapter ,u8 entry)
39969 +{
39970 + u32 j,count = 0, addr, cmd;
39971 + addr = entry << 3;
39972 +
39973 + printk("********* DUMP CAM Entry_#%02d***************\n",entry);
39974 + for (j = 0; j < 6; j++)
39975 + {
39976 + cmd = _ReadCAM(padapter ,addr+j);
39977 + printk("offset:0x%02x => 0x%08x \n",addr+j,cmd);
39978 + }
39979 + printk("*********************************\n");
39980 +}
39981 +#endif
39982
39983 void write_cam(_adapter *padapter, u8 entry, u16 ctrl, u8 *mac, u8 *key)
39984 {
39985 - unsigned int i, val, addr, cmd;
39986 + unsigned int i, val, addr;
39987 + //unsigned int cmd;
39988 int j;
39989 u32 cam_val[2];
39990
39991 @@ -519,14 +770,14 @@ void write_cam(_adapter *padapter, u8 entry, u16 ctrl, u8 *mac, u8 *key)
39992 cam_val[0] = val;
39993 cam_val[1] = addr + (unsigned int)j;
39994
39995 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
39996 + rtw_hal_set_hwreg(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
39997
39998 //rtw_write32(padapter, WCAMI, val);
39999
40000 //cmd = CAM_POLLINIG | CAM_WRITE | (addr + j);
40001 //rtw_write32(padapter, RWCAM, cmd);
40002
40003 - //DBG_8192C("%s=> cam write: %x, %x\n",__FUNCTION__, cmd, val);
40004 + //DBG_871X("%s=> cam write: %x, %x\n",__FUNCTION__, cmd, val);
40005
40006 }
40007
40008 @@ -544,14 +795,14 @@ void clear_cam_entry(_adapter *padapter, u8 entry)
40009 cam_val[0] = val;
40010 cam_val[1] = addr + (unsigned int)0;
40011
40012 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
40013 + rtw_hal_set_hwreg(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
40014
40015
40016
40017 cam_val[0] = val;
40018 cam_val[1] = addr + (unsigned int)1;
40019
40020 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
40021 + rtw_hal_set_hwreg(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
40022 #else
40023
40024 unsigned char null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
40025 @@ -586,21 +837,54 @@ void flush_all_cam_entry(_adapter *padapter)
40026 {
40027 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40028 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40029 -#if 0
40030 - unsigned char null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
40031 - unsigned char null_key[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00};
40032
40033 - for (i = 0; i < NUM_STA; i++)
40034 +#ifdef CONFIG_CONCURRENT_MODE
40035 +
40036 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
40037 +
40038 + //if(check_buddy_mlmeinfo_state(padapter, _HW_STATE_NOLINK_))
40039 + if(check_buddy_fwstate(padapter, _FW_LINKED) == _FALSE)
40040 {
40041 - write_cam(padapter, i, 0, null_sta, null_key);
40042 + rtw_hal_set_hwreg(padapter, HW_VAR_CAM_INVALID_ALL, 0);
40043 }
40044 -#else
40045 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_CAM_INVALID_ALL, 0);
40046 -#endif
40047 + else
40048 + {
40049 + if(check_fwstate(pmlmepriv, WIFI_STATION_STATE))
40050 + {
40051 + struct sta_priv *pstapriv = &padapter->stapriv;
40052 + struct sta_info *psta;
40053 + u8 cam_id;//cam_entry
40054 +
40055 + psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress);
40056 + if(psta) {
40057 + if(psta->state & WIFI_AP_STATE)
40058 + {} //clear cam when ap free per sta_info
40059 + else {
40060 + if(psta->mac_id==2)
40061 + cam_id = 5;
40062 + else
40063 + cam_id = 4;
40064 + }
40065 + //clear_cam_entry(padapter, cam_id);
40066 + rtw_clearstakey_cmd(padapter, (u8*)psta, cam_id, _FALSE);
40067 + }
40068 + }
40069 + else if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
40070 + {
40071 + //clear cam when ap free per sta_info
40072 + }
40073 + }
40074 +#else //CONFIG_CONCURRENT_MODE
40075 +
40076 + rtw_hal_set_hwreg(padapter, HW_VAR_CAM_INVALID_ALL, 0);
40077 +
40078 +#endif //CONFIG_CONCURRENT_MODE
40079 +
40080 _rtw_memset((u8 *)(pmlmeinfo->FW_sta_info), 0, sizeof(pmlmeinfo->FW_sta_info));
40081 +
40082 }
40083
40084 -#ifdef CONFIG_WFD
40085 +#if defined(CONFIG_P2P) && defined(CONFIG_WFD)
40086 int WFD_info_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
40087 {
40088 struct registry_priv *pregpriv = &padapter->registrypriv;
40089 @@ -622,8 +906,8 @@ int WFD_info_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
40090 rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);
40091 if ( attr_contentlen )
40092 {
40093 - pwdinfo->wfd_info.peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
40094 - DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info.peer_rtsp_ctrlport );
40095 + pwdinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
40096 + DBG_8192C( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, pwdinfo->wfd_info->peer_rtsp_ctrlport );
40097 return( _TRUE );
40098 }
40099 }
40100 @@ -638,7 +922,7 @@ int WFD_info_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
40101
40102 int WMM_param_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
40103 {
40104 - struct registry_priv *pregpriv = &padapter->registrypriv;
40105 + //struct registry_priv *pregpriv = &padapter->registrypriv;
40106 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
40107 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40108 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40109 @@ -681,7 +965,6 @@ void WMMOnAssocRsp(_adapter *padapter)
40110 u8 acm_mask;
40111 u16 TXOP;
40112 u32 acParm, i;
40113 - struct registry_priv *pregpriv = &padapter->registrypriv;
40114 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40115 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40116
40117 @@ -715,22 +998,22 @@ void WMMOnAssocRsp(_adapter *padapter)
40118 switch (ACI)
40119 {
40120 case 0x0:
40121 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acParm));
40122 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acParm));
40123 acm_mask |= (ACM? BIT(1):0);
40124 break;
40125
40126 case 0x1:
40127 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acParm));
40128 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acParm));
40129 //acm_mask |= (ACM? BIT(0):0);
40130 break;
40131
40132 case 0x2:
40133 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acParm));
40134 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acParm));
40135 acm_mask |= (ACM? BIT(2):0);
40136 break;
40137
40138 case 0x3:
40139 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acParm));
40140 + rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acParm));
40141 acm_mask |= (ACM? BIT(3):0);
40142 break;
40143 }
40144 @@ -739,7 +1022,7 @@ void WMMOnAssocRsp(_adapter *padapter)
40145 }
40146
40147 if(padapter->registrypriv.acm_method == 1)
40148 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_ACM_CTRL, (u8 *)(&acm_mask));
40149 + rtw_hal_set_hwreg(padapter, HW_VAR_ACM_CTRL, (u8 *)(&acm_mask));
40150 else
40151 padapter->mlmepriv.acm_mask = acm_mask;
40152
40153 @@ -751,18 +1034,35 @@ static void bwmode_update_check(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pI
40154 unsigned char new_bwmode;
40155 unsigned char new_ch_offset;
40156 struct HT_info_element *pHT_info;
40157 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
40158 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40159 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40160 -
40161 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
40162 + struct ht_priv *phtpriv = &pmlmepriv->htpriv;
40163 + u8 cbw40_enable=0;
40164
40165 if(!pIE)
40166 return;
40167
40168 + if(phtpriv->ht_option == _FALSE) return;
40169 +
40170 + if(pIE->Length > sizeof(struct HT_info_element))
40171 + return;
40172 +
40173 pHT_info = (struct HT_info_element *)pIE->data;
40174
40175 - if(pHT_info->infos[0] & BIT(2))
40176 + if (pmlmeext->cur_channel > 14) {
40177 + if (pregistrypriv->cbw40_enable & BIT(1))
40178 + cbw40_enable = 1;
40179 + } else {
40180 + if (pregistrypriv->cbw40_enable & BIT(0))
40181 + cbw40_enable = 1;
40182 + }
40183 +
40184 + if((pHT_info->infos[0] & BIT(2)) && cbw40_enable )
40185 {
40186 new_bwmode = HT_CHANNEL_WIDTH_40;
40187 +
40188 switch (pHT_info->infos[0] & 0x3)
40189 {
40190 case 1:
40191 @@ -791,6 +1091,9 @@ static void bwmode_update_check(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pI
40192
40193 pmlmeext->cur_bwmode = new_bwmode;
40194 pmlmeext->cur_ch_offset = new_ch_offset;
40195 +
40196 + //update HT info also
40197 + HT_info_handler(padapter, pIE);
40198 }
40199 else
40200 {
40201 @@ -842,7 +1145,8 @@ void HT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
40202 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40203 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
40204 struct ht_priv *phtpriv = &pmlmepriv->htpriv;
40205 -
40206 + struct registry_priv *pregistrypriv = &padapter->registrypriv;
40207 +
40208 if(pIE==NULL) return;
40209
40210 if(phtpriv->ht_option == _FALSE) return;
40211 @@ -855,57 +1159,68 @@ void HT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
40212 {
40213 // Commented by Albert 2010/07/12
40214 // Got the endian issue here.
40215 - pmlmeinfo->HT_caps.HT_cap[i] &= (pIE->data[i]);
40216 + pmlmeinfo->HT_caps.u.HT_cap[i] &= (pIE->data[i]);
40217 }
40218 else
40219 {
40220 //modify from fw by Thomas 2010/11/17
40221 - if ((pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x3) > (pIE->data[i] & 0x3))
40222 + if ((pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x3) > (pIE->data[i] & 0x3))
40223 {
40224 max_AMPDU_len = (pIE->data[i] & 0x3);
40225 }
40226 else
40227 {
40228 - max_AMPDU_len = (pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x3);
40229 + max_AMPDU_len = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x3);
40230 }
40231
40232 - if ((pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x1c) > (pIE->data[i] & 0x1c))
40233 + if ((pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) > (pIE->data[i] & 0x1c))
40234 {
40235 - min_MPDU_spacing = (pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x1c);
40236 + min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c);
40237 }
40238 else
40239 {
40240 min_MPDU_spacing = (pIE->data[i] & 0x1c);
40241 }
40242
40243 - pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para = max_AMPDU_len | min_MPDU_spacing;
40244 + pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para = max_AMPDU_len | min_MPDU_spacing;
40245 }
40246 }
40247
40248 // Commented by Albert 2010/07/12
40249 // Have to handle the endian issue after copying.
40250 // HT_ext_caps didn't be used yet.
40251 - pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info = le16_to_cpu( pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info );
40252 - pmlmeinfo->HT_caps.HT_cap_element.HT_ext_caps = le16_to_cpu( pmlmeinfo->HT_caps.HT_cap_element.HT_ext_caps );
40253 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info = le16_to_cpu( pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info );
40254 + pmlmeinfo->HT_caps.u.HT_cap_element.HT_ext_caps = le16_to_cpu( pmlmeinfo->HT_caps.u.HT_cap_element.HT_ext_caps );
40255
40256 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
40257 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
40258
40259 //update the MCS rates
40260 for (i = 0; i < 16; i++)
40261 {
40262 if((rf_type == RF_1T1R) || (rf_type == RF_1T2R))
40263 {
40264 - pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
40265 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
40266 }
40267 else
40268 {
40269 - pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i];
40270 + #ifdef CONFIG_DISABLE_MCS13TO15
40271 + if(pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40 && (pregistrypriv->wifi_spec!=1))
40272 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R_MCS13TO15_OFF[i];
40273 + else
40274 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i];
40275 + #else
40276 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i];
40277 + #endif //CONFIG_DISABLE_MCS13TO15
40278 }
40279 #ifdef RTL8192C_RECONFIG_TO_1T1R
40280 {
40281 - pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
40282 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
40283 }
40284 #endif
40285 +
40286 + if(pregistrypriv->special_rf_path)
40287 + pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
40288 +
40289 }
40290
40291 return;
40292 @@ -939,7 +1254,6 @@ void HTOnAssocRsp(_adapter *padapter)
40293 //struct registry_priv *pregpriv = &padapter->registrypriv;
40294 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40295 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40296 - //WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
40297
40298 DBG_871X("%s\n", __FUNCTION__);
40299
40300 @@ -959,17 +1273,17 @@ void HTOnAssocRsp(_adapter *padapter)
40301 AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
40302 AMPDU_para [4:2]:Min MPDU Start Spacing
40303 */
40304 - max_AMPDU_len = pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x03;
40305 + max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03;
40306
40307 - min_MPDU_spacing = (pmlmeinfo->HT_caps.HT_cap_element.AMPDU_para & 0x1c) >> 2;
40308 + min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2;
40309
40310 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
40311 + rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
40312
40313 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_AMPDU_FACTOR, (u8 *)(&max_AMPDU_len));
40314 + rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_FACTOR, (u8 *)(&max_AMPDU_len));
40315
40316 #if 0 //move to rtw_update_ht_cap()
40317 if ((pregpriv->cbw40_enable) &&
40318 - (pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info & BIT(1)) &&
40319 + (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & BIT(1)) &&
40320 (pmlmeinfo->HT_info.infos[0] & BIT(2)))
40321 {
40322 //switch to the 40M Hz mode accoring to the AP
40323 @@ -999,7 +1313,7 @@ void HTOnAssocRsp(_adapter *padapter)
40324 //
40325 // Config SM Power Save setting
40326 //
40327 - pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.HT_cap_element.HT_caps_info & 0x0C) >> 2;
40328 + pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & 0x0C) >> 2;
40329 if(pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
40330 {
40331 /*u8 i;
40332 @@ -1008,7 +1322,7 @@ void HTOnAssocRsp(_adapter *padapter)
40333 {
40334 pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
40335 }*/
40336 - DBG_8192C("%s(): WLAN_HT_CAP_SM_PS_STATIC\n",__FUNCTION__);
40337 + DBG_871X("%s(): WLAN_HT_CAP_SM_PS_STATIC\n",__FUNCTION__);
40338 }
40339
40340 //
40341 @@ -1081,6 +1395,24 @@ void VCS_update(_adapter *padapter, struct sta_info *psta)
40342 }
40343 }
40344
40345 +#ifdef CONFIG_TDLS
40346 +int check_ap_tdls_prohibited(u8 *pframe, u8 pkt_len)
40347 +{
40348 + u8 tdls_prohibited_bit = 0x40; //bit(38); TDLS_prohibited
40349 +
40350 + if(pkt_len < 5)
40351 + {
40352 + return _FALSE;
40353 + }
40354 +
40355 + pframe += 4;
40356 + if( (*pframe) & tdls_prohibited_bit )
40357 + return _TRUE;
40358 +
40359 + return _FALSE;
40360 +}
40361 +#endif //CONFIG_TDLS
40362 +
40363 void update_beacon_info(_adapter *padapter, u8 *pframe, uint pkt_len, struct sta_info *psta)
40364 {
40365 unsigned int i;
40366 @@ -1090,8 +1422,8 @@ void update_beacon_info(_adapter *padapter, u8 *pframe, uint pkt_len, struct sta
40367 #ifdef CONFIG_TDLS
40368 struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
40369 u8 tdls_prohibited[] = { 0x00, 0x00, 0x00, 0x00, 0x10 }; //bit(38): TDLS_prohibited
40370 -#endif
40371 -
40372 +#endif //CONFIG_TDLS
40373 +
40374 len = pkt_len - (_BEACON_IE_OFFSET_ + WLAN_HDR_A3_LEN);
40375
40376 for (i = 0; i < len;)
40377 @@ -1122,10 +1454,10 @@ void update_beacon_info(_adapter *padapter, u8 *pframe, uint pkt_len, struct sta
40378
40379 #ifdef CONFIG_TDLS
40380 case _EXT_CAP_IE_:
40381 - if( _rtw_memcmp(pIE->data, tdls_prohibited, 5) == _TRUE )
40382 + if( check_ap_tdls_prohibited(pIE->data, pIE->Length) == _TRUE )
40383 ptdlsinfo->ap_prohibited = _TRUE;
40384 break;
40385 -#endif
40386 +#endif //CONFIG_TDLS
40387 default:
40388 break;
40389 }
40390 @@ -1181,7 +1513,7 @@ unsigned int is_ap_in_tkip(_adapter *padapter)
40391 switch (pIE->ElementID)
40392 {
40393 case _VENDOR_SPECIFIC_IE_:
40394 - if ((_rtw_memcmp(pIE->data, WPA_OUI, 4)) && (_rtw_memcmp((pIE->data + 12), WPA_TKIP_CIPHER, 4)))
40395 + if ((_rtw_memcmp(pIE->data, RTW_WPA_OUI, 4)) && (_rtw_memcmp((pIE->data + 12), WPA_TKIP_CIPHER, 4)))
40396 {
40397 return _TRUE;
40398 }
40399 @@ -1209,6 +1541,7 @@ unsigned int is_ap_in_tkip(_adapter *padapter)
40400
40401 }
40402
40403 +int wifirate2_ratetbl_inx(unsigned char rate);
40404 int wifirate2_ratetbl_inx(unsigned char rate)
40405 {
40406 int inx = 0;
40407 @@ -1303,7 +1636,7 @@ unsigned int update_MSC_rate(struct HT_caps_element *pHT_caps)
40408 {
40409 unsigned int mask = 0;
40410
40411 - mask = ((pHT_caps->HT_cap_element.MCS_rate[0] << 12) | (pHT_caps->HT_cap_element.MCS_rate[1] << 20));
40412 + mask = ((pHT_caps->u.HT_cap_element.MCS_rate[0] << 12) | (pHT_caps->u.HT_cap_element.MCS_rate[1] << 20));
40413
40414 return mask;
40415 }
40416 @@ -1322,7 +1655,7 @@ int support_short_GI(_adapter *padapter, struct HT_caps_element *pHT_caps)
40417
40418 bit_offset = (pmlmeext->cur_bwmode & HT_CHANNEL_WIDTH_40)? 6: 5;
40419
40420 - if (pHT_caps->HT_cap_element.HT_caps_info & (0x1 << bit_offset))
40421 + if (pHT_caps->u.HT_cap_element.HT_caps_info & (0x1 << bit_offset))
40422 {
40423 return _SUCCESS;
40424 }
40425 @@ -1349,11 +1682,12 @@ unsigned char get_highest_rate_idx(u32 mask)
40426 return rate_idx;
40427 }
40428
40429 +unsigned char get_highest_mcs_rate(struct HT_caps_element *pHT_caps);
40430 unsigned char get_highest_mcs_rate(struct HT_caps_element *pHT_caps)
40431 {
40432 int i, mcs_rate;
40433
40434 - mcs_rate = (pHT_caps->HT_cap_element.MCS_rate[0] | (pHT_caps->HT_cap_element.MCS_rate[1] << 8));
40435 + mcs_rate = (pHT_caps->u.HT_cap_element.MCS_rate[0] | (pHT_caps->u.HT_cap_element.MCS_rate[1] << 8));
40436
40437 for (i = 15; i >= 0; i--)
40438 {
40439 @@ -1368,9 +1702,10 @@ unsigned char get_highest_mcs_rate(struct HT_caps_element *pHT_caps)
40440
40441 void Update_RA_Entry(_adapter *padapter, u32 mac_id)
40442 {
40443 - padapter->HalFunc.UpdateRAMaskHandler(padapter, mac_id);
40444 + rtw_hal_update_ra_mask(padapter, mac_id);
40445 }
40446
40447 +void enable_rate_adaptive(_adapter *padapter, u32 mac_id);
40448 void enable_rate_adaptive(_adapter *padapter, u32 mac_id)
40449 {
40450 Update_RA_Entry(padapter, mac_id);
40451 @@ -1382,6 +1717,47 @@ void set_sta_rate(_adapter *padapter, struct sta_info *psta)
40452 enable_rate_adaptive(padapter, psta->mac_id);
40453 }
40454
40455 +// Update RRSR and Rate for USERATE
40456 +void update_tx_basic_rate(_adapter *padapter, u8 wirelessmode)
40457 +{
40458 + NDIS_802_11_RATES_EX supported_rates;
40459 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40460 +#ifdef CONFIG_P2P
40461 + struct wifidirect_info* pwdinfo = &padapter->wdinfo;
40462 +
40463 + // Added by Albert 2011/03/22
40464 + // In the P2P mode, the driver should not support the b mode.
40465 + // So, the Tx packet shouldn't use the CCK rate
40466 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
40467 + return;
40468 +#endif //CONFIG_P2P
40469 +#ifdef CONFIG_INTEL_WIDI
40470 + if (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_NONE)
40471 + return;
40472 +#endif //CONFIG_INTEL_WIDI
40473 +
40474 + _rtw_memset(supported_rates, 0, NDIS_802_11_LENGTH_RATES_EX);
40475 +
40476 + //clear B mod if current channel is in 5G band, avoid tx cck rate in 5G band.
40477 + if(pmlmeext->cur_channel > 14)
40478 + wirelessmode &= ~(WIRELESS_11B);
40479 +
40480 + if ((wirelessmode & WIRELESS_11B) && (wirelessmode == WIRELESS_11B)) {
40481 + _rtw_memcpy(supported_rates, rtw_basic_rate_cck, 4);
40482 + } else if (wirelessmode & WIRELESS_11B) {
40483 + _rtw_memcpy(supported_rates, rtw_basic_rate_mix, 7);
40484 + } else {
40485 + _rtw_memcpy(supported_rates, rtw_basic_rate_ofdm, 3);
40486 + }
40487 +
40488 + if (wirelessmode & WIRELESS_11B)
40489 + update_mgnt_tx_rate(padapter, IEEE80211_CCK_RATE_1MB);
40490 + else
40491 + update_mgnt_tx_rate(padapter, IEEE80211_OFDM_RATE_6MB);
40492 +
40493 + rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, supported_rates);
40494 +}
40495 +
40496 unsigned char check_assoc_AP(u8 *pframe, uint len)
40497 {
40498 unsigned int i;
40499 @@ -1496,7 +1872,7 @@ void update_capinfo(PADAPTER Adapter, u16 updateCap)
40500 {
40501 ShortPreamble = _TRUE;
40502 pmlmeinfo->preamble_mode = PREAMBLE_SHORT;
40503 - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_ACK_PREAMBLE, (u8 *)&ShortPreamble );
40504 + rtw_hal_set_hwreg( Adapter, HW_VAR_ACK_PREAMBLE, (u8 *)&ShortPreamble );
40505 }
40506 }
40507 else
40508 @@ -1505,7 +1881,7 @@ void update_capinfo(PADAPTER Adapter, u16 updateCap)
40509 {
40510 ShortPreamble = _FALSE;
40511 pmlmeinfo->preamble_mode = PREAMBLE_LONG;
40512 - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_ACK_PREAMBLE, (u8 *)&ShortPreamble );
40513 + rtw_hal_set_hwreg( Adapter, HW_VAR_ACK_PREAMBLE, (u8 *)&ShortPreamble );
40514 }
40515 }
40516 }
40517 @@ -1545,18 +1921,22 @@ void update_capinfo(PADAPTER Adapter, u16 updateCap)
40518 }
40519 }
40520
40521 - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_SLOT_TIME, &pmlmeinfo->slotTime );
40522 + rtw_hal_set_hwreg( Adapter, HW_VAR_SLOT_TIME, &pmlmeinfo->slotTime );
40523
40524 }
40525
40526 void update_wireless_mode(_adapter *padapter)
40527 {
40528 - int ratelen, network_type = 0;
40529 - u16 SIFS_Timer;
40530 + u8 init_rate=0;
40531 + int ratelen, network_type = 0;
40532 + u32 SIFS_Timer, mask;
40533 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
40534 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40535 WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
40536 unsigned char *rate = cur_network->SupportedRates;
40537 +#ifdef CONFIG_CONCURRENT_MODE
40538 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
40539 +#endif //CONFIG_CONCURRENT_MODE
40540
40541 ratelen = rtw_get_rateset_len(cur_network->SupportedRates);
40542
40543 @@ -1596,16 +1976,39 @@ void update_wireless_mode(_adapter *padapter)
40544 }
40545
40546 pmlmeext->cur_wireless_mode = network_type & padapter->registrypriv.wireless_mode;
40547 +
40548 + //For STA mode, driver need to modify initial data rate, or MAC will use wrong tx rate.
40549 + //Modified by Thomas 2012-12-3
40550 + mask = update_supported_rate(cur_network->SupportedRates, ratelen);
40551 + init_rate = get_highest_rate_idx(mask)&0x3f;
40552 + rtw_hal_set_hwreg( padapter, HW_VAR_INIT_DATA_RATE, (u8 *)&init_rate);
40553 +
40554 +/*
40555 if((pmlmeext->cur_wireless_mode==WIRELESS_11G) ||
40556 (pmlmeext->cur_wireless_mode==WIRELESS_11BG))//WIRELESS_MODE_G)
40557 - SIFS_Timer = 0x0a0a;
40558 + SIFS_Timer = 0x0a0a;//CCK
40559 else
40560 - SIFS_Timer = 0x0e0e;//pHalData->SifsTime;
40561 - padapter->HalFunc.SetHwRegHandler( padapter, HW_VAR_SIFS, (u8 *)&SIFS_Timer);
40562 + SIFS_Timer = 0x0e0e;//pHalData->SifsTime; //OFDM
40563 +*/
40564
40565 -}
40566 + SIFS_Timer = 0x0a0a0808; //0x0808 -> for CCK, 0x0a0a -> for OFDM
40567 + //change this value if having IOT issues.
40568 +
40569 + rtw_hal_set_hwreg( padapter, HW_VAR_RESP_SIFS, (u8 *)&SIFS_Timer);
40570
40571 + if (pmlmeext->cur_wireless_mode & WIRELESS_11B)
40572 + update_mgnt_tx_rate(padapter, IEEE80211_CCK_RATE_1MB);
40573 + else
40574 + {
40575 + update_mgnt_tx_rate(padapter, IEEE80211_OFDM_RATE_6MB);
40576 +#ifdef CONFIG_CONCURRENT_MODE
40577 + if(pbuddy_adapter && (pmlmeext->cur_wireless_mode & WIRELESS_11A))
40578 + update_mgnt_tx_rate(pbuddy_adapter, IEEE80211_OFDM_RATE_6MB);
40579 +#endif //CONFIG_CONCURRENT_MODE
40580 + }
40581 +}
40582
40583 +void fire_write_MAC_cmd(_adapter *padapter, unsigned int addr, unsigned int value);
40584 void fire_write_MAC_cmd(_adapter *padapter, unsigned int addr, unsigned int value)
40585 {
40586 #if 0
40587 @@ -1633,13 +2036,6 @@ void fire_write_MAC_cmd(_adapter *padapter, unsigned int addr, unsigned int valu
40588 #endif
40589 }
40590
40591 -u8 bmc_support_rate_ofdm[4] =
40592 - {IEEE80211_OFDM_RATE_6MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_OFDM_RATE_12MB|IEEE80211_BASIC_RATE_MASK,
40593 - IEEE80211_OFDM_RATE_18MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_OFDM_RATE_24MB|IEEE80211_BASIC_RATE_MASK};
40594 -u8 bmc_support_rate_cck[4] =
40595 - {IEEE80211_CCK_RATE_1MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_2MB|IEEE80211_BASIC_RATE_MASK,
40596 - IEEE80211_CCK_RATE_5MB|IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_11MB|IEEE80211_BASIC_RATE_MASK};
40597 -
40598 void update_bmc_sta_support_rate(_adapter *padapter, u32 mac_id)
40599 {
40600 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
40601 @@ -1648,11 +2044,11 @@ void update_bmc_sta_support_rate(_adapter *padapter, u32 mac_id)
40602 if(pmlmeext->cur_wireless_mode & WIRELESS_11B)
40603 {
40604 // Only B, B/G, and B/G/N AP could use CCK rate
40605 - _rtw_memcpy((pmlmeinfo->FW_sta_info[mac_id].SupportedRates), bmc_support_rate_cck, 4);
40606 + _rtw_memcpy((pmlmeinfo->FW_sta_info[mac_id].SupportedRates), rtw_basic_rate_cck, 4);
40607 }
40608 else
40609 {
40610 - _rtw_memcpy((pmlmeinfo->FW_sta_info[mac_id].SupportedRates), bmc_support_rate_ofdm, 4);
40611 + _rtw_memcpy((pmlmeinfo->FW_sta_info[mac_id].SupportedRates), rtw_basic_rate_ofdm, 3);
40612 }
40613 }
40614
40615 @@ -1736,12 +2132,12 @@ void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len)
40616
40617 void correct_TSF(_adapter *padapter, struct mlme_ext_priv *pmlmeext)
40618 {
40619 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_CORRECT_TSF, 0);
40620 + rtw_hal_set_hwreg(padapter, HW_VAR_CORRECT_TSF, 0);
40621 }
40622
40623 void beacon_timing_control(_adapter *padapter)
40624 {
40625 - padapter->HalFunc.SetBeaconRelatedRegistersHandler(padapter);
40626 + rtw_hal_bcn_related_reg_setting(padapter);
40627 }
40628
40629 #if 0
40630 @@ -1818,7 +2214,7 @@ unsigned int setup_beacon_frame(_adapter *padapter, unsigned char *beacon_frame)
40631
40632 if ((len + TXDESC_SIZE) > 256)
40633 {
40634 - //DBG_8192C("marc: beacon frame too large\n");
40635 + //DBG_871X("marc: beacon frame too large\n");
40636 return 0;
40637 }
40638
40639 @@ -1846,3 +2242,64 @@ unsigned int setup_beacon_frame(_adapter *padapter, unsigned char *beacon_frame)
40640 }
40641 #endif
40642
40643 +static _adapter *pbuddy_padapter = NULL;
40644 +
40645 +int rtw_handle_dualmac(_adapter *adapter, bool init)
40646 +{
40647 + int status = _SUCCESS;
40648 + struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
40649 +
40650 + if (!IS_HARDWARE_TYPE_8192D(adapter))
40651 + goto exit;
40652 +
40653 + if (init) {
40654 + rtw_hal_get_def_var(adapter, HAL_DEF_DUAL_MAC_MODE, &dvobj->DualMacMode);
40655 + if (dvobj->DualMacMode == _TRUE) {
40656 + // temply disable IPS For 92D-VC
40657 + adapter->registrypriv.ips_mode = IPS_NONE;
40658 + }
40659 +
40660 + /* For SMSP on 92DU-VC, driver do not probe another Interface. */
40661 + if ((dvobj->DualMacMode != _TRUE) && (dvobj->InterfaceNumber != 0)) {
40662 + DBG_871X("%s(): Do not init another Interface because SMSP\n",__FUNCTION__);
40663 + status = _FAIL;
40664 + goto exit;
40665 + }
40666 +
40667 +#ifndef CONFIG_CONCURRENT_MODE
40668 + if (dvobj->DualMacMode == _TRUE) {
40669 + if (pbuddy_padapter == NULL) {
40670 + pbuddy_padapter = adapter;
40671 + DBG_871X("%s(): pbuddy_padapter == NULL, Set pbuddy_padapter\n",__FUNCTION__);
40672 + } else {
40673 + adapter->pbuddy_adapter = pbuddy_padapter;
40674 + pbuddy_padapter->pbuddy_adapter = adapter;
40675 + // clear global value
40676 + pbuddy_padapter = NULL;
40677 + DBG_871X("%s(): pbuddy_padapter exist, Exchange Information\n",__FUNCTION__);
40678 + }
40679 + }
40680 +
40681 +#ifdef CONFIG_DUALMAC_CONCURRENT
40682 + if (dvobj->InterfaceNumber == 0) {
40683 + //set adapter_type/iface type
40684 + adapter->isprimary = _TRUE;
40685 + adapter->adapter_type = PRIMARY_ADAPTER;
40686 + adapter->iface_type = IFACE_PORT0;
40687 + DBG_871X("%s(): PRIMARY_ADAPTER\n",__FUNCTION__);
40688 + } else {
40689 + //set adapter_type/iface type
40690 + adapter->isprimary = _FALSE;
40691 + adapter->adapter_type = SECONDARY_ADAPTER;
40692 + adapter->iface_type = IFACE_PORT1;
40693 + DBG_871X("%s(): SECONDARY_ADAPTER\n",__FUNCTION__);
40694 + }
40695 +#endif
40696 +#endif
40697 + }else {
40698 + pbuddy_padapter = NULL;
40699 + }
40700 +exit:
40701 + return status;
40702 +}
40703 +
40704 diff --git a/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c b/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c
40705 index 178a5b7..18f1fdb 100644
40706 --- a/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c
40707 +++ b/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c
40708 @@ -15,8 +15,8 @@
40709 * this program; if not, write to the Free Software Foundation, Inc.,
40710 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
40711 *
40712 - *
40713 -******************************************************************************/
40714 + *
40715 + ******************************************************************************/
40716 #define _RTW_XMIT_C_
40717
40718 #include <drv_conf.h>
40719 @@ -28,10 +28,6 @@
40720 #include <circ_buf.h>
40721 #include <ip.h>
40722
40723 -#ifdef CONFIG_TDLS
40724 -#include <rtl8192c_hal.h>
40725 -#endif
40726 -
40727 #if defined (PLATFORM_LINUX) && defined (PLATFORM_WINDOWS)
40728 #error "Shall be Linux or Windows, but not both!\n"
40729 #endif
40730 @@ -48,11 +44,6 @@
40731 static u8 P802_1H_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 };
40732 static u8 RFC1042_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 };
40733
40734 -#ifdef CONFIG_TDLS
40735 -extern unsigned char MCS_rate_2R[16];
40736 -extern unsigned char MCS_rate_1R[16];
40737 -#endif
40738 -
40739 static void _init_txservq(struct tx_servq *ptxservq)
40740 {
40741 _func_enter_;
40742 @@ -99,11 +90,10 @@ _func_enter_;
40743 //_rtw_memset((unsigned char *)pxmitpriv, 0, sizeof(struct xmit_priv));
40744
40745 _rtw_spinlock_init(&pxmitpriv->lock);
40746 + _rtw_spinlock_init(&pxmitpriv->lock_sctx);
40747 _rtw_init_sema(&pxmitpriv->xmit_sema, 0);
40748 _rtw_init_sema(&pxmitpriv->terminate_xmitthread_sema, 0);
40749
40750 - ATOMIC_SET(&pxmitpriv->HwRdyXmitData, 1);
40751 -
40752 /*
40753 Please insert all the queue initializaiton using _rtw_init_queue below
40754 */
40755 @@ -124,7 +114,6 @@ _func_enter_;
40756
40757 _rtw_init_queue(&pxmitpriv->free_xmit_queue);
40758
40759 -
40760 /*
40761 Please allocate memory with the sz = (struct xmit_frame) * NR_XMITFRAME,
40762 and initialize free_xmit_frame below.
40763 @@ -210,6 +199,13 @@ _func_enter_;
40764 goto exit;
40765 }
40766
40767 +#ifdef CONFIG_SDIO_HCI
40768 + pxmitbuf->phead = pxmitbuf->pbuf;
40769 + pxmitbuf->pend = pxmitbuf->pbuf + MAX_XMITBUF_SZ;
40770 + pxmitbuf->len = 0;
40771 + pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->phead;
40772 +#endif
40773 +
40774 pxmitbuf->flags = XMIT_VO_QUEUE;
40775
40776 rtw_list_insert_tail(&pxmitbuf->list, &(pxmitpriv->free_xmitbuf_queue.queue));
40777 @@ -223,6 +219,39 @@ _func_enter_;
40778
40779 pxmitpriv->free_xmitbuf_cnt = NR_XMITBUFF;
40780
40781 + /* init xframe_ext queue, the same count as extbuf */
40782 + _rtw_init_queue(&pxmitpriv->free_xframe_ext_queue);
40783 +
40784 + pxmitpriv->xframe_ext_alloc_addr = rtw_zvmalloc(NR_XMIT_EXTBUFF * sizeof(struct xmit_frame) + 4);
40785 +
40786 + if (pxmitpriv->xframe_ext_alloc_addr == NULL){
40787 + pxmitpriv->xframe_ext = NULL;
40788 + RT_TRACE(_module_rtl871x_xmit_c_,_drv_err_,("alloc xframe_ext fail!\n"));
40789 + res= _FAIL;
40790 + goto exit;
40791 + }
40792 + pxmitpriv->xframe_ext = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pxmitpriv->xframe_ext_alloc_addr), 4);
40793 + pxframe = (struct xmit_frame*)pxmitpriv->xframe_ext;
40794 +
40795 + for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
40796 + _rtw_init_listhead(&(pxframe->list));
40797 +
40798 + pxframe->padapter = padapter;
40799 + pxframe->frame_tag = NULL_FRAMETAG;
40800 +
40801 + pxframe->pkt = NULL;
40802 +
40803 + pxframe->buf_addr = NULL;
40804 + pxframe->pxmitbuf = NULL;
40805 +
40806 + pxframe->ext_tag = 1;
40807 +
40808 + rtw_list_insert_tail(&(pxframe->list), &(pxmitpriv->free_xframe_ext_queue.queue));
40809 +
40810 + pxframe++;
40811 + }
40812 + pxmitpriv->free_xframe_ext_cnt = NR_XMIT_EXTBUFF;
40813 +
40814 // Init xmit extension buff
40815 _rtw_init_queue(&pxmitpriv->free_xmit_extbuf_queue);
40816
40817 @@ -262,6 +291,13 @@ _func_enter_;
40818 goto exit;
40819 }
40820
40821 +#ifdef CONFIG_SDIO_HCI
40822 + pxmitbuf->phead = pxmitbuf->pbuf;
40823 + pxmitbuf->pend = pxmitbuf->pbuf + MAX_XMIT_EXTBUF_SZ;
40824 + pxmitbuf->len = 0;
40825 + pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->phead;
40826 +#endif
40827 +
40828 rtw_list_insert_tail(&pxmitbuf->list, &(pxmitpriv->free_xmit_extbuf_queue.queue));
40829 #ifdef DBG_XMIT_BUF
40830 pxmitbuf->no=i;
40831 @@ -287,8 +323,14 @@ _func_enter_;
40832 pxmitpriv->voq_cnt = 0;
40833 #endif
40834
40835 - if(padapter->HalFunc.init_xmit_priv != NULL)
40836 - padapter->HalFunc.init_xmit_priv(padapter);
40837 +
40838 +#ifdef CONFIG_XMIT_ACK
40839 + pxmitpriv->ack_tx = _FALSE;
40840 + _rtw_mutex_init(&pxmitpriv->ack_tx_mutex);
40841 + rtw_sctx_init(&pxmitpriv->ack_tx_ops, 0);
40842 +#endif
40843 +
40844 + rtw_hal_init_xmit_priv(padapter);
40845
40846 exit:
40847
40848 @@ -297,6 +339,7 @@ _func_exit_;
40849 return res;
40850 }
40851
40852 +void rtw_mfree_xmit_priv_lock (struct xmit_priv *pxmitpriv);
40853 void rtw_mfree_xmit_priv_lock (struct xmit_priv *pxmitpriv)
40854 {
40855 _rtw_spinlock_free(&pxmitpriv->lock);
40856 @@ -327,7 +370,7 @@ void _rtw_free_xmit_priv (struct xmit_priv *pxmitpriv)
40857
40858 _func_enter_;
40859
40860 - padapter->HalFunc.free_xmit_priv(padapter);
40861 + rtw_hal_free_xmit_priv(padapter);
40862
40863 rtw_mfree_xmit_priv_lock(pxmitpriv);
40864
40865 @@ -336,7 +379,7 @@ void _rtw_free_xmit_priv (struct xmit_priv *pxmitpriv)
40866
40867 for(i=0; i<NR_XMITFRAME; i++)
40868 {
40869 - rtw_os_xmit_complete(padapter, pxmitframe);
40870 + rtw_os_xmit_complete(padapter, pxmitframe);
40871
40872 pxmitframe++;
40873 }
40874 @@ -360,6 +403,17 @@ void _rtw_free_xmit_priv (struct xmit_priv *pxmitpriv)
40875 rtw_vmfree(pxmitpriv->pallocated_xmitbuf, NR_XMITBUFF * sizeof(struct xmit_buf) + 4);
40876 }
40877
40878 + /* free xframe_ext queue, the same count as extbuf */
40879 + if ((pxmitframe = (struct xmit_frame*)pxmitpriv->xframe_ext)) {
40880 + for (i=0; i<NR_XMIT_EXTBUFF; i++) {
40881 + rtw_os_xmit_complete(padapter, pxmitframe);
40882 + pxmitframe++;
40883 + }
40884 + }
40885 + if (pxmitpriv->xframe_ext_alloc_addr)
40886 + rtw_vmfree(pxmitpriv->xframe_ext_alloc_addr, NR_XMIT_EXTBUFF * sizeof(struct xmit_frame) + 4);
40887 + _rtw_spinlock_free(&pxmitpriv->free_xframe_ext_queue.lock);
40888 +
40889 // free xmit extension buff
40890 _rtw_spinlock_free(&pxmitpriv->free_xmit_extbuf_queue.lock);
40891
40892 @@ -380,6 +434,10 @@ void _rtw_free_xmit_priv (struct xmit_priv *pxmitpriv)
40893
40894 rtw_free_hwxmits(padapter);
40895
40896 +#ifdef CONFIG_XMIT_ACK
40897 + _rtw_mutex_free(&pxmitpriv->ack_tx_mutex);
40898 +#endif
40899 +
40900 out:
40901
40902 _func_exit_;
40903 @@ -394,6 +452,27 @@ static void update_attrib_vcs_info(_adapter *padapter, struct xmit_frame *pxmitf
40904 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
40905 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
40906
40907 + if(pattrib->psta)
40908 + {
40909 + psta = pattrib->psta;
40910 + }
40911 + else
40912 + {
40913 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
40914 + psta=rtw_get_stainfo(&padapter->stapriv ,&pattrib->ra[0] );
40915 + }
40916 +
40917 + if(psta==NULL)
40918 + {
40919 + DBG_871X("%s, psta==NUL\n", __func__);
40920 + return;
40921 + }
40922 +
40923 + if(!(psta->state &_FW_LINKED))
40924 + {
40925 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
40926 + return;
40927 + }
40928
40929 if (pattrib->nr_frags != 1)
40930 {
40931 @@ -496,8 +575,6 @@ static void update_attrib_vcs_info(_adapter *padapter, struct xmit_frame *pxmitf
40932 break;
40933 }
40934 }
40935 - if(padapter->registrypriv.intel_class_mode==1)
40936 - pattrib->vcs_mode = RTS_CTS;
40937 }
40938
40939 static void update_attrib_phy_info(struct pkt_attrib *pattrib, struct sta_info *psta)
40940 @@ -527,20 +604,22 @@ static void update_attrib_phy_info(struct pkt_attrib *pattrib, struct sta_info *
40941 // if(psta->htpriv.agg_enable_bitmap & BIT(pattrib->priority))
40942 // pattrib->ampdu_en = _TRUE;
40943 //}
40944 -
40945 +
40946
40947 pattrib->retry_ctrl = _FALSE;
40948 -
40949 +
40950 }
40951
40952 -static void qos_acm(u8 acm_mask, struct pkt_attrib *pattrib)
40953 +u8 qos_acm(u8 acm_mask, u8 priority)
40954 {
40955 - switch (pattrib->priority)
40956 + u8 change_priority = priority;
40957 +
40958 + switch (priority)
40959 {
40960 case 0:
40961 case 3:
40962 if(acm_mask & BIT(1))
40963 - pattrib->priority = 2;
40964 + change_priority = 1;
40965 break;
40966 case 1:
40967 case 2:
40968 @@ -548,17 +627,19 @@ static void qos_acm(u8 acm_mask, struct pkt_attrib *pattrib)
40969 case 4:
40970 case 5:
40971 if(acm_mask & BIT(2))
40972 - pattrib->priority = 3;
40973 + change_priority = 0;
40974 break;
40975 case 6:
40976 case 7:
40977 if(acm_mask & BIT(3))
40978 - pattrib->priority = 5;
40979 + change_priority = 5;
40980 break;
40981 default:
40982 - DBG_871X("qos_acm(): invalid pattrib->priority: %d!!!\n", pattrib->priority);
40983 + DBG_871X("qos_acm(): invalid pattrib->priority: %d!!!\n", priority);
40984 break;
40985 }
40986 +
40987 + return change_priority;
40988 }
40989
40990 static void set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib)
40991 @@ -628,7 +709,7 @@ static s32 update_attrib(_adapter *padapter, _pkt *pkt, struct pkt_attrib *pattr
40992 _rtw_memcpy(pattrib->ta, get_bssid(pmlmepriv), ETH_ALEN);
40993 }
40994
40995 - pattrib->pktlen = pktfile.pkt_len; // rtw_xmitframe_coalesce() overwirte this!
40996 + pattrib->pktlen = pktfile.pkt_len;
40997
40998 if (ETH_P_IP == pattrib->ether_type)
40999 {
41000 @@ -659,12 +740,10 @@ static s32 update_attrib(_adapter *padapter, _pkt *pkt, struct pkt_attrib *pattr
41001 }
41002 }
41003
41004 - #ifdef CONFIG_SET_SCAN_DENY_TIMER
41005 if ( (pattrib->ether_type == 0x888e) || (pattrib->dhcp_pkt == 1) )
41006 {
41007 - rtw_set_scan_deny(pmlmepriv, 3000);
41008 + rtw_set_scan_deny(padapter, 3000);
41009 }
41010 - #endif
41011
41012 #ifdef CONFIG_LPS
41013 // If EAPOL , ARP , OR DHCP packet, driver must be in active mode.
41014 @@ -730,9 +809,10 @@ static s32 update_attrib(_adapter *padapter, _pkt *pkt, struct pkt_attrib *pattr
41015 if(pqospriv->qos_option)
41016 {
41017 set_qos(&pktfile, pattrib);
41018 +
41019 if(pmlmepriv->acm_mask != 0)
41020 {
41021 - qos_acm(pmlmepriv->acm_mask, pattrib);
41022 + pattrib->priority = qos_acm(pmlmepriv->acm_mask, pattrib->priority);
41023 }
41024 }
41025 }
41026 @@ -831,6 +911,13 @@ static s32 update_attrib(_adapter *padapter, _pkt *pkt, struct pkt_attrib *pattr
41027 RT_TRACE(_module_rtl871x_xmit_c_,_drv_info_,("update_attrib: bswenc=_FALSE\n"));
41028 }
41029
41030 +#ifdef CONFIG_CONCURRENT_MODE
41031 + if((pattrib->encrypt && bmcast) || (pattrib->encrypt ==_WEP40_) || (pattrib->encrypt ==_WEP104_))
41032 + {
41033 + pattrib->bswenc = _TRUE;//force using sw enc.
41034 + }
41035 +#endif
41036 +
41037 rtw_set_tx_chksum_offload(pkt, pattrib);
41038
41039 update_attrib_phy_info(pattrib, psta);
41040 @@ -860,10 +947,21 @@ static s32 xmitframe_addmic(_adapter *padapter, struct xmit_frame *pxmitframe){
41041 }
41042 else
41043 {
41044 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
41045 stainfo=rtw_get_stainfo(&padapter->stapriv ,&pattrib->ra[0]);
41046 }
41047
41048 + if(stainfo==NULL)
41049 + {
41050 + DBG_871X("%s, psta==NUL\n", __func__);
41051 + return _FAIL;
41052 + }
41053
41054 + if(!(stainfo->state &_FW_LINKED))
41055 + {
41056 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, stainfo->state);
41057 + return _FAIL;
41058 + }
41059
41060 _func_enter_;
41061
41062 @@ -982,7 +1080,7 @@ _func_enter_;
41063 //if((psecuritypriv->sw_encrypt)||(pattrib->bswenc))
41064 if(pattrib->bswenc)
41065 {
41066 - //DBG_8192C("start xmitframe_swencrypt\n");
41067 + //DBG_871X("start xmitframe_swencrypt\n");
41068 RT_TRACE(_module_rtl871x_xmit_c_,_drv_alert_,("### xmitframe_swencrypt\n"));
41069 switch(pattrib->encrypt){
41070 case _WEP40_:
41071 @@ -1015,17 +1113,13 @@ s32 rtw_make_wlanhdr (_adapter *padapter , u8 *hdr, struct pkt_attrib *pattrib)
41072 struct rtw_ieee80211_hdr *pwlanhdr = (struct rtw_ieee80211_hdr *)hdr;
41073 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
41074 struct qos_priv *pqospriv = &pmlmepriv->qospriv;
41075 - u8 qos_option = _FALSE;
41076 + u8 qos_option = _FALSE;
41077 #ifdef CONFIG_TDLS
41078 struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
41079 struct sta_priv *pstapriv = &padapter->stapriv;
41080 - struct sta_info *ptdls_sta=NULL;
41081 - u8 tdls_seq=0;
41082 -#endif
41083 -
41084 -//#ifdef CONFIG_PWRCTRL
41085 -// struct pwrctrl_priv *pwrpriv = &(padapter->pwrctrlpriv);
41086 -//#endif
41087 + struct sta_info *ptdls_sta=NULL, *psta_backup=NULL;
41088 + u8 direct_link=0;
41089 +#endif //CONFIG_TDLS
41090
41091 sint res = _SUCCESS;
41092 u16 *fctrl = &pwlanhdr->frame_ctl;
41093 @@ -1039,6 +1133,7 @@ _func_enter_;
41094 if (pattrib->psta) {
41095 psta = pattrib->psta;
41096 } else {
41097 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
41098 if(bmcst) {
41099 psta = rtw_get_bcmc_stainfo(padapter);
41100 } else {
41101 @@ -1046,6 +1141,18 @@ _func_enter_;
41102 }
41103 }
41104
41105 + if(psta==NULL)
41106 + {
41107 + DBG_871X("%s, psta==NUL\n", __func__);
41108 + return _FAIL;
41109 + }
41110 +
41111 + if(!(psta->state &_FW_LINKED))
41112 + {
41113 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
41114 + return _FAIL;
41115 + }
41116 +
41117 _rtw_memset(hdr, 0, WLANHDR_OFFSET);
41118
41119 SetFrameSubType(fctrl, pattrib->subtype);
41120 @@ -1055,16 +1162,16 @@ _func_enter_;
41121 if ((check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)) {
41122 //to_ds = 1, fr_ds = 0;
41123 #ifdef CONFIG_TDLS
41124 - if((ptdlsinfo->setup_state==TDLS_LINKED_STATE)){
41125 + if((ptdlsinfo->setup_state == TDLS_LINKED_STATE)){
41126 ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
41127 - if((ptdls_sta!=NULL)&&((ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE)==TDLS_LINKED_STATE)&&(pattrib->ether_type!=0x0806)){
41128 + if((ptdls_sta!=NULL)&&(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE)&&(pattrib->ether_type!=0x0806)){
41129 //TDLS data transfer, ToDS=0, FrDs=0
41130 _rtw_memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
41131 _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
41132 _rtw_memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
41133 - tdls_seq=1;
41134 + direct_link=1;
41135 }else{
41136 - // 1.usual data transfer
41137 + // 1.Data transfer to AP
41138 // 2.Arp pkt will relayed by AP
41139 SetToDs(fctrl);
41140 _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
41141 @@ -1072,9 +1179,9 @@ _func_enter_;
41142 _rtw_memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
41143 }
41144 }else
41145 -#endif
41146 +#endif //CONFIG_TDLS
41147 {
41148 - //usual data transfer
41149 + //Data transfer to AP
41150 SetToDs(fctrl);
41151 _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
41152 _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
41153 @@ -1110,14 +1217,6 @@ _func_enter_;
41154 goto exit;
41155 }
41156
41157 -/*#ifdef CONFIG_PWRCTRL
41158 - if (pwrpriv->cpwm >= FW_PWR1 && !(padapter->mlmepriv.sitesurveyctrl.traffic_busy))
41159 - SetPwrMgt(fctrl);
41160 -#else
41161 - if ((get_fwstate(pmlmepriv)) & WIFI_SLEEP_STATE)
41162 - SetPwrMgt(fctrl);
41163 -#endif*/
41164 -
41165 if(pattrib->mdata)
41166 SetMData(fctrl);
41167
41168 @@ -1140,31 +1239,20 @@ _func_enter_;
41169
41170 //Update Seq Num will be handled by f/w
41171 {
41172 -
41173 + if(psta){
41174 #ifdef CONFIG_TDLS
41175 - // 1. update seq_num per link by sta_info
41176 - // 2. rewrite encrypt to _AES_, also rewrite iv_len, icv_len
41177 - if(tdls_seq==1){
41178 - ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
41179 - ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
41180 -
41181 - pattrib->seqnum = ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority];
41182 -
41183 - SetSeqNum(hdr, pattrib->seqnum);
41184 -
41185 - if (pattrib->encrypt){
41186 - pattrib->encrypt= _AES_;
41187 - pattrib->iv_len=8;
41188 - pattrib->icv_len=8;
41189 + if(direct_link==1)
41190 + {
41191 + psta_backup = psta;
41192 + psta = ptdls_sta;
41193 }
41194 - }else
41195 -#endif
41196 - if(psta){
41197 +#endif //CONFIG_TDLS
41198 +
41199 psta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
41200 psta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
41201
41202 pattrib->seqnum = psta->sta_xmitpriv.txseq_tid[pattrib->priority];
41203 -
41204 +
41205 SetSeqNum(hdr, pattrib->seqnum);
41206
41207
41208 @@ -1203,6 +1291,29 @@ _func_enter_;
41209
41210 }
41211
41212 +#ifdef CONFIG_TDLS
41213 + if(direct_link==1)
41214 + {
41215 + if (pattrib->encrypt){
41216 + pattrib->encrypt= _AES_;
41217 + pattrib->iv_len=8;
41218 + pattrib->icv_len=8;
41219 + }
41220 +
41221 + //qos_en, ht_en, init rate, ,bw, ch_offset, sgi
41222 + //pattrib->qos_en = ptdls_sta->qos_option;
41223 + pattrib->ht_en = ptdls_sta->htpriv.ht_option;
41224 + pattrib->raid = ptdls_sta->raid;
41225 + pattrib->bwmode = ptdls_sta->htpriv.bwmode;
41226 + pattrib->ch_offset = ptdls_sta->htpriv.ch_offset;
41227 + pattrib->sgi= ptdls_sta->htpriv.sgi;
41228 +
41229 + pattrib->mac_id = ptdls_sta->mac_id;
41230 +
41231 + psta = psta_backup;
41232 + }
41233 +#endif //CONFIG_TDLS
41234 +
41235 }
41236 }
41237
41238 @@ -1235,7 +1346,27 @@ s32 rtw_txframes_sta_ac_pending(_adapter *padapter, struct pkt_attrib *pattrib)
41239 struct tx_servq *ptxservq;
41240 int priority = pattrib->priority;
41241
41242 + if(pattrib->psta)
41243 + {
41244 psta = pattrib->psta;
41245 + }
41246 + else
41247 + {
41248 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
41249 + psta=rtw_get_stainfo(&padapter->stapriv ,&pattrib->ra[0]);
41250 + }
41251 +
41252 + if(psta==NULL)
41253 + {
41254 + DBG_871X("%s, psta==NUL\n", __func__);
41255 + return 0;
41256 + }
41257 +
41258 + if(!(psta->state &_FW_LINKED))
41259 + {
41260 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
41261 + return 0;
41262 + }
41263
41264 switch(priority)
41265 {
41266 @@ -1263,871 +1394,121 @@ s32 rtw_txframes_sta_ac_pending(_adapter *padapter, struct pkt_attrib *pattrib)
41267 }
41268
41269 #ifdef CONFIG_TDLS
41270 -void rtw_tdls_setup_req_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
41271 -{
41272 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
41273 - struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
41274 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
41275 - struct registry_priv *pregistrypriv = &padapter->registrypriv;
41276 - struct rtw_ieee80211_ht_cap ht_capie;
41277 - struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);
41278 -
41279 - u8 payload_type = 0x02;
41280 - u8 category = RTW_WLAN_CATEGORY_TDLS;
41281 - u8 action = TDLS_SETUP_REQUEST;
41282 - u8 bssrate[NDIS_802_11_LENGTH_RATES_EX]; //Use NDIS_802_11_LENGTH_RATES_EX in order to call func.rtw_set_supported_rate
41283 - int bssrate_len = 0, i = 0 ;
41284 - u8 more_supportedrates = 0;
41285 - unsigned int ie_len;
41286 - u8 *p;
41287 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
41288 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
41289 - u8 link_id_addr[18] = {0};
41290 - u8 iedata=0;
41291 - u8 sup_ch[ 30 * 2 ] = {0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
41292 - u8 timeout_itvl[5]; //set timeout interval to maximum value
41293 - u32 time;
41294 -
41295 - //SNonce
41296 - if(pattrib->encrypt){
41297 - for(i=0;i<8;i++){
41298 - time=rtw_get_current_time();
41299 - _rtw_memcpy(&ptdls_sta->SNonce[4*i], (u8 *)&time, 4);
41300 - }
41301 - }
41302 -
41303 - //payload type
41304 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
41305 - //category, action, dialog token
41306 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
41307 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
41308 - pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
41309 -
41310 - //capability
41311 - _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
41312 -
41313 - if(pattrib->encrypt)
41314 - *pframe =*pframe | BIT(4);
41315 - pframe += 2;
41316 - pattrib->pktlen += 2;
41317 -
41318 - //supported rates
41319 - rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
41320 - bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
41321 - //for (bssrate_len = 0; bssrate_len < NumRates; bssrate_len++) {
41322 - // if (pregistrypriv->dev_network.SupportedRates[bssrate_len]== 0) break;
41323 - // bssrate[bssrate_len] = pregistrypriv->dev_network.SupportedRates[bssrate_len];
41324 - //}
41325 -
41326 - if (bssrate_len > 8)
41327 - {
41328 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
41329 - more_supportedrates = 1;
41330 - }
41331 - else
41332 - {
41333 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
41334 - }
41335
41336 - //country(optional)
41337 - //extended supported rates
41338 - if(more_supportedrates==1){
41339 - pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
41340 - }
41341 +int rtw_build_tdls_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 action)
41342 +{
41343 + int res=_SUCCESS;
41344
41345 - //supported channels
41346 - do{
41347 - if( pmlmeext->channel_set[sup_ch_idx].ChannelNum == 11 )
41348 - {
41349 - sup_ch[0] = 1; //First channel number
41350 - sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum; //Number of channel
41351 - }
41352 - else if( pmlmeext->channel_set[sup_ch_idx].ChannelNum == 13 )
41353 - {
41354 - sup_ch[0] = 1;
41355 - sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;;
41356 - }
41357 - else if( pmlmeext->channel_set[sup_ch_idx].ChannelNum > 13 )
41358 - {
41359 - sup_ch[idx_5g++] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;
41360 - sup_ch[idx_5g++] = 1;
41361 - }
41362 -
41363 - sup_ch_idx++;
41364 + switch(action){
41365 + case TDLS_SETUP_REQUEST:
41366 + rtw_build_tdls_setup_req_ies(padapter, pxmitframe, pframe);
41367 + break;
41368 + case TDLS_SETUP_RESPONSE:
41369 + rtw_build_tdls_setup_rsp_ies(padapter, pxmitframe, pframe);
41370 + break;
41371 + case TDLS_SETUP_CONFIRM:
41372 + rtw_build_tdls_setup_cfm_ies(padapter, pxmitframe, pframe);
41373 + break;
41374 + case TDLS_TEARDOWN:
41375 + rtw_build_tdls_teardown_ies(padapter, pxmitframe, pframe);
41376 + break;
41377 + case TDLS_DISCOVERY_REQUEST:
41378 + rtw_build_tdls_dis_req_ies(padapter, pxmitframe, pframe);
41379 + break;
41380 + case TDLS_PEER_TRAFFIC_INDICATION:
41381 + rtw_build_tdls_peer_traffic_indication_ies(padapter, pxmitframe, pframe);
41382 + break;
41383 + case TDLS_CHANNEL_SWITCH_REQUEST:
41384 + rtw_build_tdls_ch_switch_req_ies(padapter, pxmitframe, pframe);
41385 + break;
41386 + case TDLS_CHANNEL_SWITCH_RESPONSE:
41387 + rtw_build_tdls_ch_switch_rsp_ies(padapter, pxmitframe, pframe);
41388 + break;
41389 +#ifdef CONFIG_WFD
41390 + case TUNNELED_PROBE_REQ:
41391 + rtw_build_tunneled_probe_req_ies(padapter, pxmitframe, pframe);
41392 + break;
41393 + case TUNNELED_PROBE_RSP:
41394 + rtw_build_tunneled_probe_rsp_ies(padapter, pxmitframe, pframe);
41395 + break;
41396 +#endif //CONFIG_WFD
41397 + default:
41398 + res=_FAIL;
41399 + break;
41400 }
41401 - while( pmlmeext->channel_set[sup_ch_idx].ChannelNum != 0 );
41402 - pframe = rtw_set_ie(pframe, _SUPPORTED_CH_IE_, idx_5g + 2, sup_ch, &(pattrib->pktlen));
41403 -
41404 - //RSNIE
41405 - if(pattrib->encrypt)
41406 - pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
41407 -
41408 - //extended capabilities
41409 - pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
41410 -
41411 - //QoS capability(WMM_IE)
41412 - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 7, TDLS_WMMIE, &(pattrib->pktlen));
41413
41414 - //FTIE(optional)
41415 - if(pattrib->encrypt){
41416 - _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
41417 - _rtw_memset(pframe, _FTIE_, 1); //version
41418 - _rtw_memset((pframe+1), 82, 1); //length
41419 - _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
41420 - pframe += 84;
41421 - pattrib->pktlen += 84;
41422 + return res;
41423 +}
41424
41425 - //Timeout interval
41426 - timeout_itvl[0]=0x02;
41427 - _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
41428 - pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
41429 +s32 rtw_make_tdls_wlanhdr (_adapter *padapter , u8 *hdr, struct pkt_attrib *pattrib, u8 action)
41430 +{
41431 + u16 *qc;
41432 + struct rtw_ieee80211_hdr *pwlanhdr = (struct rtw_ieee80211_hdr *)hdr;
41433 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
41434 + struct qos_priv *pqospriv = &pmlmepriv->qospriv;
41435 + struct sta_priv *pstapriv = &padapter->stapriv;
41436 + struct sta_info *psta=NULL, *ptdls_sta=NULL;
41437 + u8 tdls_seq=0, baddr[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
41438
41439 - }
41440 + sint res = _SUCCESS;
41441 + u16 *fctrl = &pwlanhdr->frame_ctl;
41442
41443 - //Sup_reg_classes(optional)
41444 - //HT capabilities
41445 - _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
41446 +_func_enter_;
41447
41448 - ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |IEEE80211_HT_CAP_SGI_20 |IEEE80211_HT_CAP_SM_PS |
41449 - IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_TX_STBC |IEEE80211_HT_CAP_DSSSCCK40;
41450 + _rtw_memset(hdr, 0, WLANHDR_OFFSET);
41451
41452 - {
41453 - u32 rx_packet_offset, max_recvbuf_sz;
41454 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
41455 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
41456 - if(max_recvbuf_sz-rx_packet_offset>(8191-256))
41457 - ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
41458 - }
41459 -
41460 - ht_capie.ampdu_params_info = (IEEE80211_HT_CAP_AMPDU_FACTOR&0x03);
41461 + SetFrameSubType(fctrl, pattrib->subtype);
41462
41463 - switch(pHalData->rf_type)
41464 - {
41465 - case RF_1T1R:
41466 - ht_capie.cap_info |= 0x0100;//RX STBC One spatial stream
41467 - _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_1R, 16);
41468 + switch(action){
41469 + case TDLS_SETUP_REQUEST:
41470 + case TDLS_SETUP_RESPONSE:
41471 + case TDLS_SETUP_CONFIRM:
41472 + case TDLS_TEARDOWN: //directly to peer STA or via AP
41473 + case TDLS_PEER_TRAFFIC_INDICATION:
41474 + case TDLS_PEER_PSM_REQUEST: //directly to peer STA or via AP
41475 + case TUNNELED_PROBE_REQ:
41476 + case TUNNELED_PROBE_RSP:
41477 + SetToDs(fctrl);
41478 + _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
41479 + _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
41480 + _rtw_memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
41481 break;
41482 -
41483 - case RF_2T2R:
41484 - case RF_1T2R:
41485 - default:
41486 - ht_capie.cap_info|= 0x0200;//RX STBC two spatial stream
41487 - _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_2R, 16);
41488 + case TDLS_CHANNEL_SWITCH_REQUEST:
41489 + case TDLS_CHANNEL_SWITCH_RESPONSE:
41490 + case TDLS_PEER_PSM_RESPONSE:
41491 + case TDLS_PEER_TRAFFIC_RESPONSE:
41492 + _rtw_memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
41493 + _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
41494 + _rtw_memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
41495 + tdls_seq=1;
41496 + break;
41497 + case TDLS_DISCOVERY_REQUEST: //unicast: directly to peer sta, Bcast: via AP
41498 + if(_rtw_memcmp(pattrib->dst, baddr, ETH_ALEN) )
41499 + {
41500 + SetToDs(fctrl);
41501 + _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
41502 + _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
41503 + _rtw_memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
41504 + }
41505 + else
41506 + {
41507 + _rtw_memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
41508 + _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
41509 + _rtw_memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
41510 + tdls_seq=1;
41511 + }
41512 break;
41513 }
41514 -
41515 - pframe = rtw_set_ie(pframe, _HT_CAPABILITY_IE_,
41516 - sizeof(struct rtw_ieee80211_ht_cap), (unsigned char*)&ht_capie, &(pattrib->pktlen));
41517
41518 - //20/40 BSS coexistence
41519 - if(pmlmepriv->num_FortyMHzIntolerant>0)
41520 - iedata |= BIT(2);//20 MHz BSS Width Request
41521 - pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
41522 -
41523 - //Link identifier
41524 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
41525 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
41526 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
41527 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
41528 -
41529 -}
41530 + if (pattrib->encrypt)
41531 + SetPrivacy(fctrl);
41532
41533 -void rtw_tdls_setup_rsp_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
41534 -{
41535 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
41536 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
41537 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
41538 - struct sta_info *ptdls_sta;
41539 - struct registry_priv *pregistrypriv = &padapter->registrypriv;
41540 - struct rtw_ieee80211_ht_cap ht_capie;
41541 -
41542 - u8 payload_type = 0x02;
41543 - unsigned char category = RTW_WLAN_CATEGORY_TDLS;
41544 - unsigned char action = TDLS_SETUP_RESPONSE;
41545 - unsigned char bssrate[NDIS_802_11_LENGTH_RATES_EX];
41546 - int bssrate_len = 0;
41547 - u8 more_supportedrates = 0;
41548 - unsigned int ie_len;
41549 - unsigned char *p;
41550 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
41551 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
41552 - u8 link_id_addr[18] = {0};
41553 - u8 sup_ch[ 30 * 2 ] = { 0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
41554 - u8 iedata=0;
41555 - u8 timeout_itvl[5]; //setup response timeout interval will copy from request
41556 - u8 ANonce[32]; //maybe it can put in ontdls_req
41557 - u8 k; //for random ANonce
41558 - u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic;
41559 - u32 time;
41560 -
41561 - ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);
41562 -
41563 - if(ptdls_sta == NULL )
41564 + if (pqospriv->qos_option)
41565 {
41566 - DBG_8192C("[%s] %d\n", __FUNCTION__, __LINE__);
41567 - }
41568 - else
41569 - DBG_8192C("stat_code:%04x \n", ptdls_sta->stat_code);
41570 -
41571 - if(pattrib->encrypt){
41572 - for(k=0;k<8;k++){
41573 - time=rtw_get_current_time();
41574 - _rtw_memcpy(&ptdls_sta->ANonce[4*k], (u8*)&time, 4);
41575 - }
41576 - }
41577 -
41578 - //payload type
41579 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
41580 - //category, action, status code
41581 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
41582 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
41583 - pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
41584 -
41585 - if(ptdls_sta->stat_code!=0) //invalid setup request
41586 - return;
41587 -
41588 - //dialog token
41589 - pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
41590 -
41591 - //capability
41592 - _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
41593 -
41594 - if(pattrib->encrypt )
41595 - *pframe =*pframe | BIT(4);
41596 - pframe += 2;
41597 - pattrib->pktlen += 2;
41598 -
41599 - //supported rates
41600 - rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
41601 - bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
41602 - //for (bssrate_len = 0; bssrate_len < NumRates; bssrate_len++) {
41603 - // if (pregistrypriv->dev_network.SupportedRates[bssrate_len]== 0) break;
41604 - // bssrate[bssrate_len] = pregistrypriv->dev_network.SupportedRates[bssrate_len];
41605 - //}
41606 -
41607 - if (bssrate_len > 8)
41608 - {
41609 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
41610 - more_supportedrates = 1;
41611 - }
41612 - else
41613 - {
41614 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
41615 - }
41616 -
41617 - //country(optional)
41618 - //extended supported rates
41619 - if(more_supportedrates==1){
41620 - pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
41621 - }
41622 -
41623 - //supported channels
41624 - do{
41625 - if( pmlmeext->channel_set[sup_ch_idx].ChannelNum == 11 )
41626 - {
41627 - sup_ch[0] = 1; //First channel number
41628 - sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;; //Number of channel
41629 - }
41630 - else if( pmlmeext->channel_set[sup_ch_idx].ChannelNum == 13 )
41631 - {
41632 - sup_ch[0] = 1;
41633 - sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;;
41634 - }
41635 - else if( pmlmeext->channel_set[sup_ch_idx].ChannelNum > 13 )
41636 - {
41637 - sup_ch[idx_5g++] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;
41638 - sup_ch[idx_5g++] = 1;
41639 - }
41640 -
41641 - sup_ch_idx++;
41642 - }
41643 - while( pmlmeext->channel_set[sup_ch_idx].ChannelNum != 0 );
41644 - pframe = rtw_set_ie(pframe, _SUPPORTED_CH_IE_, idx_5g + 2, sup_ch, &(pattrib->pktlen));
41645 -
41646 - //RSNIE
41647 - if(pattrib->encrypt){
41648 - prsnie = pframe;
41649 - pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
41650 - }
41651 -
41652 - //extended capabilities
41653 - pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
41654 -
41655 - //QoS capability(WMM_IE)
41656 - pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 7, TDLS_WMMIE, &(pattrib->pktlen));
41657 -
41658 - //FTIE(optional)
41659 - if(pattrib->encrypt){
41660 - wpa_tdls_generate_tpk(padapter, ptdls_sta);
41661 -
41662 - pftie = pframe;
41663 - pftie_mic = pframe+4;
41664 - _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
41665 - _rtw_memset(pframe, _FTIE_, 1); //version
41666 - _rtw_memset((pframe+1), 82, 1); //length
41667 - _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);
41668 - _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
41669 - pframe += 84;
41670 - pattrib->pktlen += 84;
41671 -
41672 - //Timeout interval
41673 - ptimeout_ie = pframe;
41674 - timeout_itvl[0]=0x02;
41675 - _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
41676 - pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
41677 - }
41678 -
41679 - //Sup_reg_classes(optional)
41680 - //HT capabilities
41681 - _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
41682 -
41683 - ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |IEEE80211_HT_CAP_SGI_20 |IEEE80211_HT_CAP_SM_PS |
41684 - IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_TX_STBC |IEEE80211_HT_CAP_DSSSCCK40;
41685 -
41686 - {
41687 - u32 rx_packet_offset, max_recvbuf_sz;
41688 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
41689 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
41690 - if(max_recvbuf_sz-rx_packet_offset>(8191-256))
41691 - ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
41692 - }
41693 -
41694 - ht_capie.ampdu_params_info = (IEEE80211_HT_CAP_AMPDU_FACTOR&0x03);
41695 -
41696 - switch(pHalData->rf_type)
41697 - {
41698 - case RF_1T1R:
41699 - ht_capie.cap_info |= 0x0100;//RX STBC One spatial stream
41700 - _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_1R, 16);
41701 - break;
41702 -
41703 - case RF_2T2R:
41704 - case RF_1T2R:
41705 - default:
41706 - ht_capie.cap_info|= 0x0200;//RX STBC two spatial stream
41707 - _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_2R, 16);
41708 - break;
41709 - }
41710 -
41711 - pframe = rtw_set_ie(pframe, _HT_CAPABILITY_IE_,
41712 - sizeof(struct rtw_ieee80211_ht_cap), (unsigned char*)&ht_capie, &(pattrib->pktlen));
41713 -
41714 - //20/40 BSS coexistence
41715 - if(pmlmepriv->num_FortyMHzIntolerant>0)
41716 - iedata |= BIT(2);//20 MHz BSS Width Request
41717 - pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
41718 -
41719 - //Link identifier
41720 - plinkid_ie = pframe;
41721 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
41722 - _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
41723 - _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
41724 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
41725 -
41726 - //fill ftie mic
41727 - if(pattrib->encrypt)
41728 - wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);
41729 -
41730 -}
41731 -
41732 -void rtw_tdls_setup_cfm_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
41733 -{
41734 -
41735 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
41736 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
41737 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
41738 - struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);
41739 -
41740 - u8 payload_type = 0x02;
41741 - unsigned char category = RTW_WLAN_CATEGORY_TDLS;
41742 - unsigned char action = TDLS_SETUP_CONFIRM;
41743 - u8 more_supportedrates = 0;
41744 - unsigned int ie_len;
41745 - unsigned char *p;
41746 - u8 timeout_itvl[5]; //set timeout interval to maximum value
41747 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
41748 - u8 link_id_addr[18] = {0};
41749 - u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic;
41750 -
41751 - //payload type
41752 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
41753 - //category, action, status code, dialog token
41754 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
41755 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
41756 - pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
41757 - pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
41758 -
41759 - if(ptdls_sta->stat_code!=0) //invalid setup request
41760 - return;
41761 -
41762 - //RSNIE
41763 - if(pattrib->encrypt){
41764 - prsnie = pframe;
41765 - pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
41766 - }
41767 -
41768 - //EDCA param set; WMM param ele.
41769 - if(pattrib->encrypt){
41770 - //FTIE
41771 - pftie = pframe;
41772 - pftie_mic = pframe+4;
41773 - _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
41774 - _rtw_memset(pframe, _FTIE_, 1); //version
41775 - _rtw_memset((pframe+1), 82, 1); //length
41776 - _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);
41777 - _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
41778 - pframe += 84;
41779 - pattrib->pktlen += 84;
41780 -
41781 - //Timeout interval
41782 - ptimeout_ie = pframe;
41783 - timeout_itvl[0]=0x02;
41784 - _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
41785 - ptdls_sta->TPK_count=0;
41786 - _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);
41787 - pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
41788 - }
41789 -
41790 - //HT operation; todo
41791 - //Link identifier
41792 - plinkid_ie = pframe;
41793 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
41794 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
41795 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
41796 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
41797 -
41798 - //fill ftie mic
41799 - if(pattrib->encrypt)
41800 - wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);
41801 -
41802 -}
41803 -
41804 -void rtw_tdls_teardown_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
41805 -{
41806 -
41807 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
41808 - u8 payload_type = 0x02;
41809 - unsigned char category = RTW_WLAN_CATEGORY_TDLS;
41810 - unsigned char action = TDLS_TEARDOWN;
41811 - u8 link_id_addr[18] = {0};
41812 -
41813 - struct sta_info *ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);
41814 - struct sta_priv *pstapriv = &padapter->stapriv;
41815 -
41816 - //payload type
41817 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
41818 - //category, action, reason code
41819 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
41820 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
41821 - pframe = rtw_set_fixed_ie(pframe, 1, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
41822 -
41823 - //Link identifier
41824 - if((ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE)==TDLS_INITIATOR_STATE){
41825 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
41826 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
41827 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
41828 - }else if((ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE)==TDLS_RESPONDER_STATE){
41829 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
41830 - _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
41831 - _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
41832 - }
41833 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
41834 -
41835 -}
41836 -
41837 -void rtw_tdls_dis_req_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
41838 -{
41839 -
41840 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
41841 - u8 payload_type = 0x02;
41842 - u8 category = RTW_WLAN_CATEGORY_TDLS;
41843 - u8 action = TDLS_DISCOVERY_REQUEST;
41844 - u8 link_id_addr[18] = {0};
41845 - static u8 dialogtoken=0;
41846 -
41847 - //payload type
41848 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
41849 - //category, action, reason code
41850 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
41851 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
41852 - pframe = rtw_set_fixed_ie(pframe, 1, &(dialogtoken), &(pattrib->pktlen));
41853 - dialogtoken = (dialogtoken+1)%256;
41854 -
41855 - //Link identifier
41856 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
41857 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
41858 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
41859 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
41860 -
41861 -}
41862 -
41863 -void rtw_tdls_dis_rsp_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog)
41864 -{
41865 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
41866 - struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
41867 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
41868 - struct registry_priv *pregistrypriv = &padapter->registrypriv;
41869 - struct rtw_ieee80211_ht_cap ht_capie;
41870 -
41871 - u8 category = RTW_WLAN_CATEGORY_PUBLIC;
41872 - u8 action = TDLS_DISCOVERY_RESPONSE;
41873 - u8 bssrate[NDIS_802_11_LENGTH_RATES_EX];
41874 - int bssrate_len = 0;
41875 - u8 more_supportedrates = 0;
41876 - u8 *p;
41877 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
41878 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
41879 - u8 link_id_addr[18] = {0};
41880 - u8 sup_ch[ 30 * 2 ] = {0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
41881 - u8 iedata=0;
41882 - u8 timeout_itvl[5]; //set timeout interval to maximum value
41883 - u32 timeout_interval= TPK_RESEND_COUNT * 1000;
41884 -
41885 - //category, action, dialog token
41886 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
41887 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
41888 - pframe = rtw_set_fixed_ie(pframe, 1, &(dialog), &(pattrib->pktlen));
41889 -
41890 - //capability
41891 - _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
41892 -
41893 - if(pattrib->encrypt)
41894 - *pframe =*pframe | BIT(4);
41895 - pframe += 2;
41896 - pattrib->pktlen += 2;
41897 -
41898 - //supported rates
41899 - rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
41900 - bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
41901 - //for (bssrate_len = 0; bssrate_len < NumRates; bssrate_len++) {
41902 - // if (pregistrypriv->dev_network.SupportedRates[bssrate_len] == 0) break;
41903 - // bssrate[bssrate_len] = pregistrypriv->dev_network.SupportedRates[bssrate_len];
41904 - //}
41905 -
41906 - if (bssrate_len > 8)
41907 - {
41908 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
41909 - more_supportedrates = 1;
41910 - }
41911 - else
41912 - {
41913 - pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
41914 - }
41915 -
41916 - //extended supported rates
41917 - if(more_supportedrates==1){
41918 - pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
41919 - }
41920 -
41921 - //supported channels
41922 - do{
41923 - if( pmlmeext->channel_set[sup_ch_idx].ChannelNum == 11 )
41924 - {
41925 - sup_ch[0] = 1; //First channel number
41926 - sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;; //Number of channel
41927 - }
41928 - else if( pmlmeext->channel_set[sup_ch_idx].ChannelNum == 13 )
41929 - {
41930 - sup_ch[0] = 1;
41931 - sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;;
41932 - }
41933 - else if( pmlmeext->channel_set[sup_ch_idx].ChannelNum > 13 )
41934 - {
41935 - sup_ch[idx_5g++] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;
41936 - sup_ch[idx_5g++] = 1;
41937 - }
41938 -
41939 - sup_ch_idx++;
41940 - }
41941 - while( pmlmeext->channel_set[sup_ch_idx].ChannelNum != 0 );
41942 - pframe = rtw_set_ie(pframe, _SUPPORTED_CH_IE_, idx_5g + 2, sup_ch, &(pattrib->pktlen));
41943 -
41944 - //RSNIE
41945 - if(pattrib->encrypt)
41946 - pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
41947 -
41948 - //extended capability
41949 - pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
41950 -
41951 - //FTIE
41952 - if(pattrib->encrypt){
41953 - _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
41954 - _rtw_memset(pframe, _FTIE_, 1); //version
41955 - _rtw_memset((pframe+1), 82, 1); //length
41956 - pframe += 84;
41957 - pattrib->pktlen += 84;
41958 - //Timeout interval
41959 - timeout_itvl[0]=0x02;
41960 - _rtw_memcpy(timeout_itvl+1, &timeout_interval, 4);
41961 - pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
41962 -
41963 - }
41964 -
41965 - //Sup_reg_classes(optional)
41966 - //HT capabilities
41967 - _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
41968 -
41969 - ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |IEEE80211_HT_CAP_SGI_20 |IEEE80211_HT_CAP_SM_PS |
41970 - IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_TX_STBC |IEEE80211_HT_CAP_DSSSCCK40;
41971 -
41972 - {
41973 - u32 rx_packet_offset, max_recvbuf_sz;
41974 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
41975 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
41976 - if(max_recvbuf_sz-rx_packet_offset>(8191-256))
41977 - ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
41978 - }
41979 -
41980 - ht_capie.ampdu_params_info = (IEEE80211_HT_CAP_AMPDU_FACTOR&0x03);
41981 -
41982 - switch(pHalData->rf_type)
41983 - {
41984 - case RF_1T1R:
41985 - ht_capie.cap_info |= 0x0100;//RX STBC One spatial stream
41986 - _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_1R, 16);
41987 - break;
41988 -
41989 - case RF_2T2R:
41990 - case RF_1T2R:
41991 - default:
41992 - ht_capie.cap_info|= 0x0200;//RX STBC two spatial stream
41993 - _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_2R, 16);
41994 - break;
41995 - }
41996 -
41997 - pframe = rtw_set_ie(pframe, _HT_CAPABILITY_IE_,
41998 - sizeof(struct rtw_ieee80211_ht_cap), (unsigned char*)&ht_capie, &(pattrib->pktlen));
41999 -
42000 - //20/40 BSS coexistence
42001 - if(pmlmepriv->num_FortyMHzIntolerant>0)
42002 - iedata |= BIT(2);//20 MHz BSS Width Request
42003 - pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
42004 -
42005 - //Link identifier
42006 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42007 - _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
42008 - _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
42009 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42010 -
42011 -}
42012 -
42013 -void rtw_tdls_peer_traffic_indication_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
42014 -{
42015 -
42016 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
42017 - u8 payload_type = 0x02;
42018 - unsigned char category = RTW_WLAN_CATEGORY_TDLS;
42019 - unsigned char action = TDLS_PEER_TRAFFIC_INDICATION;
42020 -
42021 - u8 link_id_addr[18] = {0};
42022 - u8 AC_queue=0;
42023 - struct sta_priv *pstapriv = &padapter->stapriv;
42024 - struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
42025 -
42026 - //payload type
42027 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
42028 - //category, action, reason code
42029 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
42030 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
42031 - pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
42032 -
42033 - //Link identifier
42034 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42035 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
42036 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
42037 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42038 -
42039 - //PTI control
42040 - //PU buffer status
42041 - if(ptdls_sta->uapsd_bk&BIT(1))
42042 - AC_queue=BIT(0);
42043 - if(ptdls_sta->uapsd_be&BIT(1))
42044 - AC_queue=BIT(1);
42045 - if(ptdls_sta->uapsd_vi&BIT(1))
42046 - AC_queue=BIT(2);
42047 - if(ptdls_sta->uapsd_vo&BIT(1))
42048 - AC_queue=BIT(3);
42049 - pframe = rtw_set_ie(pframe, _PTI_BUFFER_STATUS_, 1, &AC_queue, &(pattrib->pktlen));
42050 -
42051 -}
42052 -
42053 -void rtw_tdls_ch_switch_req_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
42054 -{
42055 -
42056 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
42057 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
42058 - u8 payload_type = 0x02;
42059 - unsigned char category = RTW_WLAN_CATEGORY_TDLS;
42060 - unsigned char action = TDLS_CHANNEL_SWITCH_REQUEST;
42061 - u8 link_id_addr[18] = {0};
42062 - struct sta_priv *pstapriv = &padapter->stapriv;
42063 - struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
42064 - u8 ch_switch_timing[4] = {0};
42065 - u16 switch_time= CH_SWITCH_TIME, switch_timeout=CH_SWITCH_TIMEOUT;
42066 -
42067 - //payload type
42068 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
42069 - //category, action, target_ch
42070 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
42071 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
42072 - pframe = rtw_set_fixed_ie(pframe, 1, &(ptdlsinfo->candidate_ch), &(pattrib->pktlen));
42073 -
42074 - //Link identifier
42075 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42076 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
42077 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
42078 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42079 -
42080 - //ch switch timing
42081 - _rtw_memcpy(ch_switch_timing, &switch_time, 2);
42082 - _rtw_memcpy(ch_switch_timing+2, &switch_timeout, 2);
42083 - pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
42084 -
42085 - //update ch switch attrib to sta_info
42086 - ptdls_sta->off_ch=ptdlsinfo->candidate_ch;
42087 - ptdls_sta->ch_switch_time=switch_time;
42088 - ptdls_sta->ch_switch_timeout=switch_timeout;
42089 -
42090 -}
42091 -
42092 -void rtw_tdls_ch_switch_rsp_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
42093 -{
42094 -
42095 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
42096 - u8 payload_type = 0x02;
42097 - unsigned char category = RTW_WLAN_CATEGORY_TDLS;
42098 - unsigned char action = TDLS_CHANNEL_SWITCH_RESPONSE;
42099 - u8 link_id_addr[18] = {0};
42100 - struct sta_priv *pstapriv = &padapter->stapriv;
42101 - struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
42102 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
42103 - struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
42104 - u8 ch_switch_timing[4] = {0};
42105 -
42106 - //payload type
42107 - pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
42108 - //category, action, status_code
42109 - pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
42110 - pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
42111 - pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
42112 -
42113 - //Link identifier
42114 - _rtw_memcpy(link_id_addr, pattrib->ra, 6);
42115 - _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
42116 - _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
42117 - pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
42118 -
42119 - //ch switch timing
42120 - _rtw_memcpy(ch_switch_timing, &ptdls_sta->ch_switch_time, 2);
42121 - _rtw_memcpy(ch_switch_timing+2, &ptdls_sta->ch_switch_timeout, 2);
42122 - pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
42123 -
42124 -}
42125 -
42126 -int rtw_tdls_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 action)
42127 -{
42128 - int res=_SUCCESS;
42129 -
42130 - switch(action){
42131 - case TDLS_SETUP_REQUEST:
42132 - rtw_tdls_setup_req_fr(padapter, pxmitframe, pframe);
42133 - break;
42134 - case TDLS_SETUP_RESPONSE:
42135 - rtw_tdls_setup_rsp_fr(padapter, pxmitframe, pframe);
42136 - break;
42137 - case TDLS_SETUP_CONFIRM:
42138 - rtw_tdls_setup_cfm_fr(padapter, pxmitframe, pframe);
42139 - break;
42140 - case TDLS_TEARDOWN:
42141 - rtw_tdls_teardown_fr(padapter, pxmitframe, pframe);
42142 - break;
42143 - case TDLS_DISCOVERY_REQUEST:
42144 - rtw_tdls_dis_req_fr(padapter, pxmitframe, pframe);
42145 - break;
42146 - case TDLS_PEER_TRAFFIC_INDICATION:
42147 - rtw_tdls_peer_traffic_indication_fr(padapter, pxmitframe, pframe);
42148 - break;
42149 - case TDLS_CHANNEL_SWITCH_REQUEST:
42150 - rtw_tdls_ch_switch_req_fr(padapter, pxmitframe, pframe);
42151 - break;
42152 - case TDLS_CHANNEL_SWITCH_RESPONSE:
42153 - rtw_tdls_ch_switch_rsp_fr(padapter, pxmitframe, pframe);
42154 - break;
42155 - default:
42156 - res=_FAIL;
42157 - break;
42158 - }
42159 -
42160 - return res;
42161 -}
42162 -
42163 -s32 rtw_make_tdls_wlanhdr (_adapter *padapter , u8 *hdr, struct pkt_attrib *pattrib, u8 action)
42164 -{
42165 - u16 *qc;
42166 - struct rtw_ieee80211_hdr *pwlanhdr = (struct rtw_ieee80211_hdr *)hdr;
42167 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
42168 - struct qos_priv *pqospriv = &pmlmepriv->qospriv;
42169 - struct sta_priv *pstapriv = &padapter->stapriv;
42170 - struct sta_info *psta=NULL, *ptdls_sta=NULL;
42171 - u8 tdls_seq=0, baddr[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
42172 -
42173 - sint res = _SUCCESS;
42174 - u16 *fctrl = &pwlanhdr->frame_ctl;
42175 -
42176 -_func_enter_;
42177 -
42178 - _rtw_memset(hdr, 0, WLANHDR_OFFSET);
42179 -
42180 - SetFrameSubType(fctrl, pattrib->subtype);
42181 -
42182 - switch(action){
42183 - case TDLS_SETUP_REQUEST:
42184 - case TDLS_SETUP_RESPONSE:
42185 - case TDLS_SETUP_CONFIRM:
42186 - case TDLS_TEARDOWN: //directly to peer STA or via AP
42187 - case TDLS_PEER_TRAFFIC_INDICATION:
42188 - case TDLS_PEER_PSM_REQUEST: //directly to peer STA or via AP
42189 - SetToDs(fctrl);
42190 - _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
42191 - _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
42192 - _rtw_memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
42193 - break;
42194 - case TDLS_CHANNEL_SWITCH_REQUEST:
42195 - case TDLS_CHANNEL_SWITCH_RESPONSE:
42196 - case TDLS_PEER_PSM_RESPONSE:
42197 - case TDLS_PEER_TRAFFIC_RESPONSE:
42198 - _rtw_memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
42199 - _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
42200 - _rtw_memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
42201 - tdls_seq=1;
42202 - break;
42203 - case TDLS_DISCOVERY_REQUEST: //unicast: directly to peer sta, Bcast: via AP
42204 - if(_rtw_memcmp(pattrib->dst, baddr, 6) )
42205 - {
42206 - SetToDs(fctrl);
42207 - _rtw_memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
42208 - _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
42209 - _rtw_memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
42210 - }
42211 - else
42212 - {
42213 - _rtw_memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
42214 - _rtw_memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
42215 - _rtw_memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
42216 - tdls_seq=1;
42217 - }
42218 - break;
42219 - }
42220 -
42221 - if (pattrib->encrypt)
42222 - SetPrivacy(fctrl);
42223 -
42224 - if (pqospriv->qos_option)
42225 - {
42226 - qc = (unsigned short *)(hdr + pattrib->hdrlen - 2);
42227 - if (pattrib->priority)
42228 - SetPriority(qc, pattrib->priority);
42229 - SetAckpolicy(qc, pattrib->ack_policy);
42230 + qc = (unsigned short *)(hdr + pattrib->hdrlen - 2);
42231 + if (pattrib->priority)
42232 + SetPriority(qc, pattrib->priority);
42233 + SetAckpolicy(qc, pattrib->ack_policy);
42234 }
42235
42236 psta = pattrib->psta;
42237 @@ -2243,10 +1624,10 @@ _func_enter_;
42238 llc_sz = rtw_put_snap(pframe, pattrib->ether_type);
42239 pframe += llc_sz;
42240
42241 - //pattrib->pktlen will be counted in rtw_tdls_fr
42242 + //pattrib->pktlen will be counted in rtw_build_tdls_ies
42243 pattrib->pktlen = 0;
42244
42245 - rtw_tdls_fr(padapter, pxmitframe, pframe, action);
42246 + rtw_build_tdls_ies(padapter, pxmitframe, pframe, action);
42247
42248 if ((pattrib->icv_len >0 )&& (pattrib->bswenc)) {
42249 pframe += pattrib->pktlen;
42250 @@ -2273,7 +1654,24 @@ _func_exit_;
42251
42252 return res;
42253 }
42254 -#endif
42255 +#endif //CONFIG_TDLS
42256 +
42257 +/*
42258 + * Calculate wlan 802.11 packet MAX size from pkt_attrib
42259 + * This function doesn't consider fragment case
42260 + */
42261 +u32 rtw_calculate_wlan_pkt_size_by_attribue(struct pkt_attrib *pattrib)
42262 +{
42263 + u32 len = 0;
42264 +
42265 + len = pattrib->hdrlen + pattrib->iv_len; // WLAN Header and IV
42266 + len += SNAP_SIZE + sizeof(u16); // LLC
42267 + len += pattrib->pktlen;
42268 + if (pattrib->encrypt == _TKIP_) len += 8; // MIC
42269 + len += pattrib->icv_len; // ICV
42270 +
42271 + return len;
42272 +}
42273
42274 /*
42275
42276 @@ -2311,17 +1709,33 @@ s32 rtw_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxm
42277
42278 _func_enter_;
42279
42280 - if (pattrib->psta) {
42281 + if (pattrib->psta)
42282 + {
42283 psta = pattrib->psta;
42284 - } else {
42285 + } else
42286 + {
42287 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
42288 psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
42289 }
42290
42291 if(psta==NULL)
42292 + {
42293 +
42294 + DBG_871X("%s, psta==NUL\n", __func__);
42295 return _FAIL;
42296 + }
42297
42298 - if (pxmitframe->buf_addr == NULL)
42299 +
42300 + if(!(psta->state &_FW_LINKED))
42301 + {
42302 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
42303 return _FAIL;
42304 + }
42305 +
42306 + if (pxmitframe->buf_addr == NULL){
42307 + DBG_8192C("==> %s buf_addr==NULL \n",__FUNCTION__);
42308 + return _FAIL;
42309 + }
42310
42311 pbuf_start = pxmitframe->buf_addr;
42312
42313 @@ -2340,8 +1754,6 @@ _func_enter_;
42314 _rtw_open_pktfile(pkt, &pktfile);
42315 _rtw_pktfile_read(&pktfile, NULL, pattrib->pkt_hdrlen);
42316
42317 - pattrib->pktlen = pktfile.pkt_len;
42318 -
42319 frg_inx = 0;
42320 frg_len = pxmitpriv->frag_len - 4;//2346-4 = 2342
42321
42322 @@ -2435,23 +1847,10 @@ _func_enter_;
42323 ((pattrib->bswenc) ? pattrib->icv_len : 0) + mem_sz;
42324
42325 ClearMFrag(mem_start);
42326 -
42327 -#ifdef CONFIG_SDIO_HCI
42328 - 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));
42329 - pxmitframe->pxmitbuf->ptail = pxmitframe->buf_addr + _RND512(pframe-pxmitframe->buf_addr);
42330 - pxmitframe->pxmitbuf->len += pxmitframe->pxmitbuf->ptail - pxmitframe->buf_addr;//(pframe-mem_start);
42331 - 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));
42332 -#endif
42333
42334 break;
42335 -
42336 } else {
42337 -
42338 -#ifdef CONFIG_SDIO_HCI
42339 - pxmitframe->pxmitbuf->ptail = pxmitframe->buf_addr + _RND512(pframe-pxmitframe->buf_addr);
42340 - pxmitframe->pxmitbuf->len += pxmitframe->pxmitbuf->ptail - pxmitframe->buf_addr;
42341 - pframe=pxmitframe->pxmitbuf->ptail;
42342 -#endif
42343 + RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_, ("%s: There're still something in packet!\n", __FUNCTION__));
42344 }
42345
42346 addr = (SIZE_PTR)(pframe);
42347 @@ -2467,10 +1866,6 @@ _func_enter_;
42348 goto exit;
42349 }
42350
42351 -#ifdef CONFIG_SDIO_HCI
42352 - fillin_txdesc(padapter, pxmitframe);
42353 -#endif
42354 -
42355 xmitframe_swencrypt(padapter, pxmitframe);
42356
42357 if(bmcst == _FALSE)
42358 @@ -2485,6 +1880,244 @@ _func_exit_;
42359 return res;
42360 }
42361
42362 +#ifdef CONFIG_IEEE80211W
42363 +//broadcast or multicast management pkt use BIP, unicast management pkt use CCMP encryption
42364 +s32 rtw_mgmt_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxmitframe)
42365 +{
42366 + struct pkt_file pktfile;
42367 + s32 frg_inx, frg_len, mpdu_len, llc_sz, mem_sz;
42368 + SIZE_PTR addr;
42369 + u8 *pframe, *mem_start = NULL, *tmp_buf=NULL;
42370 + u8 hw_hdr_offset, subtype ;
42371 + struct sta_info *psta = NULL;
42372 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
42373 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
42374 + u8 *pbuf_start;
42375 + s32 bmcst = IS_MCAST(pattrib->ra);
42376 + s32 res = _FAIL;
42377 + u8 *BIP_AAD=NULL;
42378 + u8 *MGMT_body=NULL;
42379 +
42380 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
42381 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
42382 + struct rtw_ieee80211_hdr *pwlanhdr;
42383 + u8 MME[_MME_IE_LENGTH_];
42384 +
42385 + _irqL irqL;
42386 + u32 ori_len;
42387 + mem_start = pframe = (u8 *)(pxmitframe->buf_addr) + TXDESC_OFFSET;
42388 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
42389 +
42390 +_func_enter_;
42391 + ori_len = BIP_AAD_SIZE+pattrib->pktlen;
42392 + tmp_buf = BIP_AAD = rtw_zmalloc(ori_len);
42393 + subtype = GetFrameSubType(pframe); //bit(7)~bit(2)
42394 +
42395 + if(BIP_AAD == NULL)
42396 + return _FAIL;
42397 +
42398 + _enter_critical_bh(&padapter->security_key_mutex, &irqL);
42399 +
42400 + //only support station mode
42401 + if(!check_fwstate(pmlmepriv, WIFI_STATION_STATE) || !check_fwstate(pmlmepriv, _FW_LINKED))
42402 + goto xmitframe_coalesce_success;
42403 +
42404 + //IGTK key is not install, it may not support 802.11w
42405 + if(padapter->securitypriv.binstallBIPkey != _TRUE)
42406 + {
42407 + DBG_871X("no instll BIP key\n");
42408 + goto xmitframe_coalesce_success;
42409 + }
42410 + //station mode doesn't need TX BIP, just ready the code
42411 + if(bmcst)
42412 + {
42413 + int frame_body_len;
42414 + u8 mic[16];
42415 +
42416 + _rtw_memset(MME, 0, 18);
42417 +
42418 + //other types doesn't need the BIP
42419 + if(GetFrameSubType(pframe) != WIFI_DEAUTH && GetFrameSubType(pframe) != WIFI_DISASSOC)
42420 + goto xmitframe_coalesce_fail;
42421 +
42422 + MGMT_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
42423 + pframe += pattrib->pktlen;
42424 +
42425 + //octent 0 and 1 is key index ,BIP keyid is 4 or 5, LSB only need octent 0
42426 + MME[0]=padapter->securitypriv.dot11wBIPKeyid;
42427 + //copy packet number
42428 + _rtw_memcpy(&MME[2], &pmlmeext->mgnt_80211w_IPN, 6);
42429 + //increase the packet number
42430 + pmlmeext->mgnt_80211w_IPN++;
42431 +
42432 + //add MME IE with MIC all zero, MME string doesn't include element id and length
42433 + pframe = rtw_set_ie(pframe, _MME_IE_ , 16 , MME, &(pattrib->pktlen));
42434 + pattrib->last_txcmdsz = pattrib->pktlen;
42435 + // total frame length - header length
42436 + frame_body_len = pattrib->pktlen - sizeof(struct rtw_ieee80211_hdr_3addr);
42437 +
42438 + //conscruct AAD, copy frame control field
42439 + _rtw_memcpy(BIP_AAD, &pwlanhdr->frame_ctl, 2);
42440 + ClearRetry(BIP_AAD);
42441 + ClearPwrMgt(BIP_AAD);
42442 + ClearMData(BIP_AAD);
42443 + //conscruct AAD, copy address 1 to address 3
42444 + _rtw_memcpy(BIP_AAD+2, pwlanhdr->addr1, 18);
42445 + //copy management fram body
42446 + _rtw_memcpy(BIP_AAD+BIP_AAD_SIZE, MGMT_body, frame_body_len);
42447 + /*//dump total packet include MME with zero MIC
42448 + {
42449 + int i;
42450 + printk("Total packet: ");
42451 + for(i=0; i < BIP_AAD_SIZE+frame_body_len; i++)
42452 + printk(" %02x ", BIP_AAD[i]);
42453 + printk("\n");
42454 + }*/
42455 + //calculate mic
42456 + if(omac1_aes_128(padapter->securitypriv.dot11wBIPKey[padapter->securitypriv.dot11wBIPKeyid].skey
42457 + , BIP_AAD, BIP_AAD_SIZE+frame_body_len, mic))
42458 + goto xmitframe_coalesce_fail;
42459 +
42460 + /*//dump calculated mic result
42461 + {
42462 + int i;
42463 + printk("Calculated mic result: ");
42464 + for(i=0; i<16; i++)
42465 + printk(" %02x ", mic[i]);
42466 + printk("\n");
42467 + }*/
42468 + //copy right BIP mic value, total is 128bits, we use the 0~63 bits
42469 + _rtw_memcpy(pframe-8, mic, 8);
42470 + /*/dump all packet after mic ok
42471 + {
42472 + int pp;
42473 + printk("pattrib->pktlen = %d \n", pattrib->pktlen);
42474 + for(pp=0;pp< pattrib->pktlen; pp++)
42475 + printk(" %02x ", mem_start[pp]);
42476 + printk("\n");
42477 + }*/
42478 + }
42479 + else //unicast mgmt frame TX
42480 + {
42481 + //start to encrypt mgmt frame
42482 + if(subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC ||
42483 + subtype == WIFI_REASSOCREQ || subtype == WIFI_ACTION)
42484 + {
42485 + if (pattrib->psta)
42486 + psta = pattrib->psta;
42487 + else
42488 + {
42489 + psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
42490 + }
42491 +
42492 + if(psta==NULL)
42493 + {
42494 +
42495 + DBG_871X("%s, psta==NUL\n", __func__);
42496 + goto xmitframe_coalesce_fail;
42497 + }
42498 +
42499 + if(!(psta->state & _FW_LINKED) || pxmitframe->buf_addr==NULL)
42500 + {
42501 + DBG_871X("%s, not _FW_LINKED or addr null\n", __func__);
42502 + goto xmitframe_coalesce_fail;
42503 + }
42504 +
42505 + //DBG_871X("%s, action frame category=%d \n", __func__, pframe[WLAN_HDR_A3_LEN]);
42506 + //according 802.11-2012 standard, these five types are not robust types
42507 + if(subtype == WIFI_ACTION &&
42508 + (pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_PUBLIC ||
42509 + pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_HT ||
42510 + pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_UNPROTECTED_WNM ||
42511 + pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_SELF_PROTECTED ||
42512 + pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_P2P))
42513 + goto xmitframe_coalesce_fail;
42514 + //before encrypt dump the management packet content
42515 + /*{
42516 + int i;
42517 + printk("Management pkt: ");
42518 + for(i=0; i<pattrib->pktlen; i++)
42519 + printk(" %02x ", pframe[i]);
42520 + printk("=======\n");
42521 + }*/
42522 + if(pattrib->encrypt>0)
42523 + _rtw_memcpy(pattrib->dot118021x_UncstKey.skey, psta->dot118021x_UncstKey.skey, 16);
42524 + //bakeup original management packet
42525 + _rtw_memcpy(tmp_buf, pframe, pattrib->pktlen);
42526 + //move to data portion
42527 + pframe += pattrib->hdrlen;
42528 +
42529 + //802.11w unicast management packet must be _AES_
42530 + pattrib->iv_len = 8;
42531 + //it's MIC of AES
42532 + pattrib->icv_len = 8;
42533 +
42534 + switch(pattrib->encrypt)
42535 + {
42536 + case _AES_:
42537 + //set AES IV header
42538 + AES_IV(pattrib->iv, psta->dot11wtxpn, 0);
42539 + break;
42540 + default:
42541 + goto xmitframe_coalesce_fail;
42542 + }
42543 + //insert iv header into management frame
42544 + _rtw_memcpy(pframe, pattrib->iv, pattrib->iv_len);
42545 + pframe += pattrib->iv_len;
42546 + //copy mgmt data portion after CCMP header
42547 + _rtw_memcpy(pframe, tmp_buf+pattrib->hdrlen, pattrib->pktlen-pattrib->hdrlen);
42548 + //move pframe to end of mgmt pkt
42549 + pframe += pattrib->pktlen-pattrib->hdrlen;
42550 + //add 8 bytes CCMP IV header to length
42551 + pattrib->pktlen += pattrib->iv_len;
42552 + /*//dump management packet include AES IV header
42553 + {
42554 + int i;
42555 + printk("Management pkt + IV: ");
42556 + //for(i=0; i<pattrib->pktlen; i++)
42557 + //printk(" %02x ", mem_start[i]);
42558 + printk("@@@@@@@@@@@@@\n");
42559 + }*/
42560 +
42561 + if ((pattrib->icv_len >0 )&& (pattrib->bswenc)) {
42562 + _rtw_memcpy(pframe, pattrib->icv, pattrib->icv_len);
42563 + pframe += pattrib->icv_len;
42564 + }
42565 + //add 8 bytes MIC
42566 + pattrib->pktlen += pattrib->icv_len;
42567 + //set final tx command size
42568 + pattrib->last_txcmdsz = pattrib->pktlen;
42569 +
42570 + //set protected bit must be beofre SW encrypt
42571 + SetPrivacy(mem_start);
42572 + /*//dump management packet include AES header
42573 + {
42574 + int i;
42575 + printk("prepare to enc Management pkt + IV: ");
42576 + for(i=0; i<pattrib->pktlen; i++)
42577 + printk(" %02x ", mem_start[i]);
42578 + printk("@@@@@@@@@@@@@\n");
42579 + }*/
42580 + //software encrypt
42581 + xmitframe_swencrypt(padapter, pxmitframe);
42582 + }
42583 + }
42584 +
42585 +xmitframe_coalesce_success:
42586 + _exit_critical_bh(&padapter->security_key_mutex, &irqL);
42587 + rtw_mfree(BIP_AAD, ori_len);
42588 +_func_exit_;
42589 + return _SUCCESS;
42590 +
42591 +xmitframe_coalesce_fail:
42592 + _exit_critical_bh(&padapter->security_key_mutex, &irqL);
42593 + rtw_mfree(BIP_AAD, ori_len);
42594 +_func_exit_;
42595 +
42596 + return _FAIL;
42597 +}
42598 +#endif //CONFIG_IEEE80211W
42599 +
42600 /* Logical Link Control(LLC) SubNetwork Attachment Point(SNAP) header
42601 * IEEE LLC/SNAP header contains 8 octets
42602 * First 3 octets comprise the LLC portion
42603 @@ -2637,12 +2270,17 @@ _func_enter_;
42604
42605 #ifdef CONFIG_SDIO_HCI
42606 pxmitbuf->len = 0;
42607 - pxmitbuf->phead = pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->pbuf;
42608 - pxmitbuf->pend = pxmitbuf->pbuf + (MAX_XMIT_EXTBUF_SZ-4);
42609 + pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->phead;
42610 #endif
42611 #ifdef CONFIG_PCI_HCI
42612 pxmitbuf->len = 0;
42613 #endif
42614 +
42615 + if (pxmitbuf->sctx) {
42616 + DBG_871X("%s pxmitbuf->sctx is not NULL\n", __func__);
42617 + rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_ALLOC);
42618 + }
42619 +
42620 }
42621
42622 _exit_critical(&pfree_queue->lock, &irqL);
42623 @@ -2690,7 +2328,7 @@ struct xmit_buf *rtw_alloc_xmitbuf(struct xmit_priv *pxmitpriv)
42624
42625 _func_enter_;
42626
42627 - //DBG_8192C("+rtw_alloc_xmitbuf\n");
42628 + //DBG_871X("+rtw_alloc_xmitbuf\n");
42629
42630 _enter_critical(&pfree_xmitbuf_queue->lock, &irqL);
42631
42632 @@ -2713,18 +2351,22 @@ _func_enter_;
42633 #ifdef DBG_XMIT_BUF
42634 DBG_871X("DBG_XMIT_BUF ALLOC no=%d, free_xmitbuf_cnt=%d\n",pxmitbuf->no, pxmitpriv->free_xmitbuf_cnt);
42635 #endif
42636 - //DBG_8192C("alloc, free_xmitbuf_cnt=%d\n", pxmitpriv->free_xmitbuf_cnt);
42637 + //DBG_871X("alloc, free_xmitbuf_cnt=%d\n", pxmitpriv->free_xmitbuf_cnt);
42638
42639 pxmitbuf->priv_data = NULL;
42640
42641 #ifdef CONFIG_SDIO_HCI
42642 pxmitbuf->len = 0;
42643 - pxmitbuf->phead = pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->pbuf;
42644 - pxmitbuf->pend = pxmitbuf->pbuf + MAX_XMITBUF_SZ;
42645 + pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->phead;
42646 #endif
42647 #ifdef CONFIG_PCI_HCI
42648 pxmitbuf->len = 0;
42649 #endif
42650 +
42651 + if (pxmitbuf->sctx) {
42652 + DBG_871X("%s pxmitbuf->sctx is not NULL\n", __func__);
42653 + rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_ALLOC);
42654 + }
42655 }
42656 #ifdef DBG_XMIT_BUF
42657 else
42658 @@ -2747,13 +2389,18 @@ s32 rtw_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf)
42659
42660 _func_enter_;
42661
42662 - //DBG_8192C("+rtw_free_xmitbuf\n");
42663 + //DBG_871X("+rtw_free_xmitbuf\n");
42664
42665 if(pxmitbuf==NULL)
42666 {
42667 return _FAIL;
42668 }
42669
42670 + if (pxmitbuf->sctx) {
42671 + DBG_871X("%s pxmitbuf->sctx is not NULL\n", __func__);
42672 + rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_FREE);
42673 + }
42674 +
42675 if(pxmitbuf->ext_tag)
42676 {
42677 rtw_free_xmitbuf_ext(pxmitpriv, pxmitbuf);
42678 @@ -2767,7 +2414,7 @@ _func_enter_;
42679 rtw_list_insert_tail(&(pxmitbuf->list), get_list_head(pfree_xmitbuf_queue));
42680
42681 pxmitpriv->free_xmitbuf_cnt++;
42682 - //DBG_8192C("FREE, free_xmitbuf_cnt=%d\n", pxmitpriv->free_xmitbuf_cnt);
42683 + //DBG_871X("FREE, free_xmitbuf_cnt=%d\n", pxmitpriv->free_xmitbuf_cnt);
42684 #ifdef DBG_XMIT_BUF
42685 DBG_871X("DBG_XMIT_BUF FREE no=%d, free_xmitbuf_cnt=%d\n",pxmitbuf->no ,pxmitpriv->free_xmitbuf_cnt);
42686 #endif
42687 @@ -2779,6 +2426,40 @@ _func_exit_;
42688 return _SUCCESS;
42689 }
42690
42691 +void rtw_init_xmitframe(struct xmit_frame *pxframe)
42692 +{
42693 + if (pxframe != NULL)//default value setting
42694 + {
42695 + pxframe->buf_addr = NULL;
42696 + pxframe->pxmitbuf = NULL;
42697 +
42698 + _rtw_memset(&pxframe->attrib, 0, sizeof(struct pkt_attrib));
42699 + //pxframe->attrib.psta = NULL;
42700 +
42701 + pxframe->frame_tag = DATA_FRAMETAG;
42702 +
42703 +#ifdef CONFIG_USB_HCI
42704 + pxframe->pkt = NULL;
42705 + pxframe->pkt_offset = 1;//default use pkt_offset to fill tx desc
42706 +
42707 +#ifdef CONFIG_USB_TX_AGGREGATION
42708 + pxframe->agg_num = 1;
42709 +#endif
42710 +
42711 +#endif //#ifdef CONFIG_USB_HCI
42712 +
42713 +#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
42714 + pxframe->pg_num = 1;
42715 + pxframe->agg_num = 1;
42716 +#endif
42717 +
42718 +#ifdef CONFIG_XMIT_ACK
42719 + pxframe->ack_report = 0;
42720 +#endif
42721 +
42722 + }
42723 +}
42724 +
42725 /*
42726 Calling context:
42727 1. OS_TXENTRY
42728 @@ -2790,7 +2471,6 @@ Otherwise, we must use _enter/_exit critical to protect free_xmit_queue...
42729 Must be very very cautious...
42730
42731 */
42732 -
42733 struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv)//(_queue *pfree_xmit_queue)
42734 {
42735 /*
42736 @@ -2803,7 +2483,9 @@ struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv)//(_queue *pf
42737 struct xmit_frame *pxframe = NULL;
42738 _list *plist, *phead;
42739 _queue *pfree_xmit_queue = &pxmitpriv->free_xmit_queue;
42740 +#ifdef PLATFORM_LINUX
42741 _adapter *padapter = pxmitpriv->adapter;
42742 +#endif //PLATFORM_LINUX
42743
42744 _func_enter_;
42745
42746 @@ -2820,53 +2502,95 @@ _func_enter_;
42747 pxframe = LIST_CONTAINOR(plist, struct xmit_frame, list);
42748
42749 rtw_list_delete(&(pxframe->list));
42750 + pxmitpriv->free_xmitframe_cnt--;
42751 + RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("rtw_alloc_xmitframe():free_xmitframe_cnt=%d\n", pxmitpriv->free_xmitframe_cnt));
42752 }
42753
42754 - if (pxframe != NULL)
42755 - {
42756 - pxmitpriv->free_xmitframe_cnt--;
42757 +#ifdef PLATFORM_LINUX
42758 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35))
42759 + if(pxmitpriv->free_xmitframe_cnt==1)
42760 + {
42761 + if (!rtw_netif_queue_stopped(padapter->pnetdev))
42762 + rtw_netif_stop_queue(padapter->pnetdev);
42763 + }
42764 +#endif
42765 +#endif
42766
42767 - RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("rtw_alloc_xmitframe():free_xmitframe_cnt=%d\n", pxmitpriv->free_xmitframe_cnt));
42768 + _exit_critical_bh(&pfree_xmit_queue->lock, &irqL);
42769
42770 - pxframe->buf_addr = NULL;
42771 - pxframe->pxmitbuf = NULL;
42772 + rtw_init_xmitframe(pxframe);
42773 +
42774 +_func_exit_;
42775 +
42776 + return pxframe;
42777 +}
42778 +
42779 +struct xmit_frame *rtw_alloc_xmitframe_ext(struct xmit_priv *pxmitpriv)
42780 +{
42781 + _irqL irqL;
42782 + struct xmit_frame *pxframe = NULL;
42783 + _list *plist, *phead;
42784 + _queue *queue = &pxmitpriv->free_xframe_ext_queue;
42785 +
42786 +_func_enter_;
42787 +
42788 + _enter_critical_bh(&queue->lock, &irqL);
42789 +
42790 + if (_rtw_queue_empty(queue) == _TRUE) {
42791 + RT_TRACE(_module_rtl871x_xmit_c_,_drv_info_,("rtw_alloc_xmitframe_ext:%d\n", pxmitpriv->free_xframe_ext_cnt));
42792 + pxframe = NULL;
42793 + } else {
42794 + phead = get_list_head(queue);
42795 + plist = get_next(phead);
42796 + pxframe = LIST_CONTAINOR(plist, struct xmit_frame, list);
42797 +
42798 + rtw_list_delete(&(pxframe->list));
42799 + pxmitpriv->free_xframe_ext_cnt--;
42800 + RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("rtw_alloc_xmitframe_ext():free_xmitframe_cnt=%d\n", pxmitpriv->free_xframe_ext_cnt));
42801 + }
42802 +
42803 + _exit_critical_bh(&queue->lock, &irqL);
42804 +
42805 + rtw_init_xmitframe(pxframe);
42806
42807 - _rtw_memset(&pxframe->attrib, 0, sizeof(struct pkt_attrib));
42808 - //pxframe->attrib.psta = NULL;
42809 +_func_exit_;
42810
42811 - pxframe->frame_tag = DATA_FRAMETAG;
42812 + return pxframe;
42813 +}
42814
42815 -#ifdef CONFIG_USB_HCI
42816 - pxframe->pkt = NULL;
42817 - pxframe->pkt_offset = 1;//default use pkt_offset to fill tx desc
42818 +struct xmit_frame *rtw_alloc_xmitframe_once(struct xmit_priv *pxmitpriv)
42819 +{
42820 + struct xmit_frame *pxframe = NULL;
42821 + u8 *alloc_addr;
42822
42823 -#ifdef CONFIG_USB_TX_AGGREGATION
42824 - pxframe->agg_num = 1;
42825 -#endif
42826 + alloc_addr = rtw_zmalloc(sizeof(struct xmit_frame) + 4);
42827 +
42828 + if (alloc_addr == NULL)
42829 + goto exit;
42830 +
42831 + pxframe = (struct xmit_frame *)N_BYTE_ALIGMENT((SIZE_PTR)(alloc_addr), 4);
42832 + pxframe->alloc_addr = alloc_addr;
42833
42834 -#endif //#ifdef CONFIG_USB_HCI
42835 + pxframe->padapter = pxmitpriv->adapter;
42836 + pxframe->frame_tag = NULL_FRAMETAG;
42837
42838 -#ifdef PLATFORM_LINUX
42839 - if(pxmitpriv->free_xmitframe_cnt==1)
42840 - {
42841 - if (!netif_queue_stopped(padapter->pnetdev))
42842 - netif_stop_queue(padapter->pnetdev);
42843 - }
42844 -#endif
42845 + pxframe->pkt = NULL;
42846
42847 - }
42848 + pxframe->buf_addr = NULL;
42849 + pxframe->pxmitbuf = NULL;
42850
42851 - _exit_critical_bh(&pfree_xmit_queue->lock, &irqL);
42852 + rtw_init_xmitframe(pxframe);
42853
42854 -_func_exit_;
42855 + DBG_871X("################## %s ##################\n", __func__);
42856
42857 +exit:
42858 return pxframe;
42859 }
42860
42861 s32 rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe)
42862 {
42863 _irqL irqL;
42864 - _queue *pfree_xmit_queue = &pxmitpriv->free_xmit_queue;
42865 + _queue *queue;
42866 _adapter *padapter = pxmitpriv->adapter;
42867 _pkt *pndis_pkt = NULL;
42868
42869 @@ -2877,22 +2601,40 @@ _func_enter_;
42870 goto exit;
42871 }
42872
42873 - _enter_critical_bh(&pfree_xmit_queue->lock, &irqL);
42874 -
42875 - rtw_list_delete(&pxmitframe->list);
42876 -
42877 if (pxmitframe->pkt){
42878 pndis_pkt = pxmitframe->pkt;
42879 pxmitframe->pkt = NULL;
42880 }
42881
42882 - rtw_list_insert_tail(&pxmitframe->list, get_list_head(pfree_xmit_queue));
42883 + if (pxmitframe->alloc_addr) {
42884 + DBG_871X("################## %s with alloc_addr ##################\n", __func__);
42885 + rtw_mfree(pxmitframe->alloc_addr, sizeof(struct xmit_frame) + 4);
42886 + goto check_pkt_complete;
42887 + }
42888 +
42889 + if (pxmitframe->ext_tag == 0)
42890 + queue = &pxmitpriv->free_xmit_queue;
42891 + else if(pxmitframe->ext_tag == 1)
42892 + queue = &pxmitpriv->free_xframe_ext_queue;
42893 + else
42894 + {}
42895
42896 - pxmitpriv->free_xmitframe_cnt++;
42897 - RT_TRACE(_module_rtl871x_xmit_c_, _drv_debug_, ("rtw_free_xmitframe():free_xmitframe_cnt=%d\n", pxmitpriv->free_xmitframe_cnt));
42898 + _enter_critical_bh(&queue->lock, &irqL);
42899
42900 - _exit_critical_bh(&pfree_xmit_queue->lock, &irqL);
42901 + rtw_list_delete(&pxmitframe->list);
42902 + rtw_list_insert_tail(&pxmitframe->list, get_list_head(queue));
42903 + if (pxmitframe->ext_tag == 0) {
42904 + pxmitpriv->free_xmitframe_cnt++;
42905 + RT_TRACE(_module_rtl871x_xmit_c_, _drv_debug_, ("rtw_free_xmitframe():free_xmitframe_cnt=%d\n", pxmitpriv->free_xmitframe_cnt));
42906 + } else if(pxmitframe->ext_tag == 1) {
42907 + pxmitpriv->free_xframe_ext_cnt++;
42908 + RT_TRACE(_module_rtl871x_xmit_c_, _drv_debug_, ("rtw_free_xmitframe():free_xframe_ext_cnt=%d\n", pxmitpriv->free_xframe_ext_cnt));
42909 + } else {
42910 + }
42911
42912 + _exit_critical_bh(&queue->lock, &irqL);
42913 +
42914 +check_pkt_complete:
42915
42916 if(pndis_pkt)
42917 rtw_os_pkt_complete(padapter, pndis_pkt);
42918 @@ -2904,26 +2646,6 @@ _func_exit_;
42919 return _SUCCESS;
42920 }
42921
42922 -s32 rtw_free_xmitframe_ex(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe)
42923 -{
42924 -
42925 -_func_enter_;
42926 -
42927 - if(pxmitframe==NULL){
42928 - goto exit;
42929 - }
42930 -
42931 - RT_TRACE(_module_rtl871x_xmit_c_, _drv_debug_, ("rtw_free_xmitframe_ex()\n"));
42932 -
42933 - rtw_free_xmitframe(pxmitpriv, pxmitframe);
42934 -
42935 -exit:
42936 -
42937 -_func_exit_;
42938 -
42939 - return _SUCCESS;
42940 -}
42941 -
42942 void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, _queue *pframequeue)
42943 {
42944 _irqL irqL;
42945 @@ -2995,11 +2717,7 @@ static struct xmit_frame *dequeue_one_xmitframe(struct xmit_priv *pxmitpriv, str
42946
42947 ptxservq->qcnt--;
42948
42949 - //rtw_list_insert_tail(&pxmitframe->list, &phwxmit->pending);
42950 -
42951 - //ptxservq->qcnt--;
42952 -
42953 - break;
42954 + break;
42955
42956 pxmitframe = NULL;
42957
42958 @@ -3118,7 +2836,7 @@ _func_exit_;
42959 #if 1
42960 struct tx_servq *rtw_get_sta_pending(_adapter *padapter, struct sta_info *psta, sint up, u8 *ac)
42961 {
42962 - struct tx_servq *ptxservq;
42963 + struct tx_servq *ptxservq=NULL;
42964
42965 _func_enter_;
42966
42967 @@ -3243,15 +2961,23 @@ _func_enter_;
42968 if (pattrib->psta) {
42969 psta = pattrib->psta;
42970 } else {
42971 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
42972 psta = rtw_get_stainfo(pstapriv, pattrib->ra);
42973 }
42974
42975 if (psta == NULL) {
42976 res = _FAIL;
42977 + DBG_8192C("rtw_xmit_classifier: psta == NULL\n");
42978 RT_TRACE(_module_rtl871x_xmit_c_,_drv_err_,("rtw_xmit_classifier: psta == NULL\n"));
42979 goto exit;
42980 }
42981
42982 + if(!(psta->state &_FW_LINKED))
42983 + {
42984 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
42985 + return _FAIL;
42986 + }
42987 +
42988 ptxservq = rtw_get_sta_pending(padapter, psta, pattrib->priority, (u8 *)(&ac_index));
42989
42990 //_enter_critical(&pstapending->lock, &irqL0);
42991 @@ -3363,8 +3089,6 @@ _func_enter_;
42992 _func_exit_;
42993 }
42994
42995 -
42996 -
42997 #ifdef CONFIG_BR_EXT
42998 int rtw_br_client_tx(_adapter *padapter, struct sk_buff **pskb)
42999 {
43000 @@ -3411,7 +3135,7 @@ int rtw_br_client_tx(_adapter *padapter, struct sk_buff **pskb)
43001 *((unsigned short *)(skb->data+MACADDRLEN*2+2-i*2)) = *((unsigned short *)(skb->data+MACADDRLEN*2-2-i*2));
43002 skb_pull(skb, 4);
43003 }
43004 -
43005 + //if SA == br_mac && skb== IP => copy SIP to br_ip ?? why
43006 if (!memcmp(skb->data+MACADDRLEN, padapter->br_mac, MACADDRLEN) &&
43007 (*((unsigned short *)(skb->data+MACADDRLEN*2)) == __constant_htons(ETH_P_IP)))
43008 memcpy(padapter->br_ip, skb->data+WLAN_ETHHDR_LEN+12, 4);
43009 @@ -3455,14 +3179,14 @@ int rtw_br_client_tx(_adapter *padapter, struct sk_buff **pskb)
43010 *((unsigned short *)(skb->data+MACADDRLEN*2+2)) = vlan_hdr;
43011 }
43012
43013 - newskb = skb_copy(skb, GFP_ATOMIC);
43014 + newskb = rtw_skb_copy(skb);
43015 if (newskb == NULL) {
43016 //priv->ext_stats.tx_drops++;
43017 - DEBUG_ERR("TX DROP: skb_copy fail!\n");
43018 + DEBUG_ERR("TX DROP: rtw_skb_copy fail!\n");
43019 //goto stop_proc;
43020 return -1;
43021 }
43022 - dev_kfree_skb_any(skb);
43023 + rtw_skb_free(skb);
43024
43025 *pskb = skb = newskb;
43026 if (is_vlan_tag) {
43027 @@ -3498,7 +3222,7 @@ int rtw_br_client_tx(_adapter *padapter, struct sk_buff **pskb)
43028
43029 }
43030 // we just print warning message and let it go
43031 - DEBUG_WARN("%s()-%d: nat25_db_handle INSERT Warning!\n", __FUNCTION__, __LINE__);
43032 + //DEBUG_WARN("%s()-%d: nat25_db_handle INSERT Warning!\n", __FUNCTION__, __LINE__);
43033 //return -1; // return -1 will cause system crash on 2011/08/30!
43034 return 0;
43035 }
43036 @@ -3556,8 +3280,8 @@ static void do_queue_select(_adapter *padapter, struct pkt_attrib *pattrib)
43037 RT_TRACE(_module_rtl871x_xmit_c_,_drv_info_,("### do_queue_select priority=%d ,qsel = %d\n",pattrib->priority ,qsel));
43038
43039 #ifdef CONFIG_CONCURRENT_MODE
43040 - if (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE)
43041 - qsel = 7;//
43042 +// if (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE)
43043 +// qsel = 7;//
43044 #endif
43045
43046 pattrib->qsel = qsel;
43047 @@ -3573,6 +3297,8 @@ static void do_queue_select(_adapter *padapter, struct pkt_attrib *pattrib)
43048 */
43049 s32 rtw_xmit(_adapter *padapter, _pkt **ppkt)
43050 {
43051 + static u32 start = 0;
43052 + static u32 drop_cnt = 0;
43053 #ifdef CONFIG_AP_MODE
43054 _irqL irqL0;
43055 #endif
43056 @@ -3585,13 +3311,21 @@ s32 rtw_xmit(_adapter *padapter, _pkt **ppkt)
43057
43058 s32 res;
43059
43060 + if (start == 0)
43061 + start = rtw_get_current_time();
43062
43063 pxmitframe = rtw_alloc_xmitframe(pxmitpriv);
43064 +
43065 + if (rtw_get_passing_time_ms(start) > 2000) {
43066 + if (drop_cnt)
43067 + DBG_871X("DBG_TX_DROP_FRAME %s no more pxmitframe, drop_cnt:%u\n", __FUNCTION__, drop_cnt);
43068 + start = rtw_get_current_time();
43069 + drop_cnt = 0;
43070 + }
43071 +
43072 if (pxmitframe == NULL) {
43073 + drop_cnt ++;
43074 RT_TRACE(_module_xmit_osdep_c_, _drv_err_, ("rtw_xmit: no more pxmitframe\n"));
43075 - #ifdef DBG_TX_DROP_FRAME
43076 - DBG_871X("DBG_TX_DROP_FRAME %s no more pxmitframe\n", __FUNCTION__);
43077 - #endif
43078 return -1;
43079 }
43080
43081 @@ -3605,11 +3339,14 @@ s32 rtw_xmit(_adapter *padapter, _pkt **ppkt)
43082 rcu_read_unlock();
43083 #endif // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
43084
43085 - if( br_port && check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE)
43086 + if( br_port && check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE)
43087 {
43088 res = rtw_br_client_tx(padapter, ppkt);
43089 if (res == -1)
43090 + {
43091 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
43092 return -1;
43093 + }
43094 }
43095
43096 #endif // CONFIG_BR_EXT
43097 @@ -3629,7 +3366,7 @@ s32 rtw_xmit(_adapter *padapter, _pkt **ppkt)
43098
43099 do_queue_select(padapter, &pxmitframe->attrib);
43100
43101 -#ifdef CONFIG_AP_MODE
43102 +#if defined(CONFIG_AP_MODE) || defined(CONFIG_TDLS)
43103 _enter_critical_bh(&pxmitpriv->lock, &irqL0);
43104 if(xmitframe_enqueue_for_sleeping_sta(padapter, pxmitframe) == _TRUE)
43105 {
43106 @@ -3637,57 +3374,15 @@ s32 rtw_xmit(_adapter *padapter, _pkt **ppkt)
43107 return 1;
43108 }
43109 _exit_critical_bh(&pxmitpriv->lock, &irqL0);
43110 -#endif
43111 +#endif
43112
43113 - if (padapter->HalFunc.hal_xmit(padapter, pxmitframe) == _FALSE)
43114 + if (rtw_hal_xmit(padapter, pxmitframe) == _FALSE)
43115 return 1;
43116
43117 return 0;
43118 }
43119
43120 #ifdef CONFIG_TDLS
43121 -void process_enqueue_frame(_adapter *padapter, struct xmit_frame *pxmitframe, struct sta_info *psta)
43122 -{
43123 - _irqL irqL;
43124 - struct sta_info *ptdls_sta=NULL;
43125 - struct sta_priv *pstapriv = &padapter->stapriv;
43126 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
43127 - ptdls_sta=rtw_get_stainfo(pstapriv, pattrib->dst);
43128 -
43129 - //enqueue frame for TDLS sleeping STA
43130 - rtw_list_delete(&pxmitframe->list);
43131 - _enter_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
43132 - rtw_list_insert_tail(&pxmitframe->list, get_list_head(&ptdls_sta->sleep_q));
43133 - ptdls_sta->sleepq_len++;
43134 -
43135 - //indicate 4-AC queue bit in TDLS peer traffic indication
43136 - switch(pattrib->priority)
43137 - {
43138 - case 1:
43139 - case 2:
43140 - ptdls_sta->uapsd_bk = ptdls_sta->uapsd_bk | BIT(0);
43141 - break;
43142 - case 4:
43143 - case 5:
43144 - ptdls_sta->uapsd_vi = ptdls_sta->uapsd_vi | BIT(0);
43145 - break;
43146 - case 6:
43147 - case 7:
43148 - ptdls_sta->uapsd_vo = ptdls_sta->uapsd_vo | BIT(0);
43149 - break;
43150 - case 0:
43151 - case 3:
43152 - default:
43153 - ptdls_sta->uapsd_be = ptdls_sta->uapsd_be | BIT(0);
43154 - break;
43155 - }
43156 -
43157 - ptdls_sta->sleepq_ac_len++;
43158 -
43159 - _exit_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
43160 -
43161 -}
43162 -
43163 sint xmitframe_enqueue_for_tdls_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe)
43164 {
43165 sint ret=_FALSE;
43166 @@ -3697,7 +3392,6 @@ sint xmitframe_enqueue_for_tdls_sleeping_sta(_adapter *padapter, struct xmit_fra
43167 struct sta_priv *pstapriv = &padapter->stapriv;
43168 struct pkt_attrib *pattrib = &pxmitframe->attrib;
43169 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
43170 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
43171 int i;
43172
43173 ptdls_sta=rtw_get_stainfo(pstapriv, pattrib->dst);
43174 @@ -3709,7 +3403,7 @@ sint xmitframe_enqueue_for_tdls_sleeping_sta(_adapter *padapter, struct xmit_fra
43175 {
43176 ret = _TRUE;
43177 return ret;
43178 - }
43179 + }
43180
43181 _enter_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
43182
43183 @@ -3749,7 +3443,6 @@ sint xmitframe_enqueue_for_tdls_sleeping_sta(_adapter *padapter, struct xmit_fra
43184 if(ptdls_sta->sleepq_len==1)
43185 {
43186 //transmit TDLS PTI via AP
43187 - ptdls_sta->option=2;
43188 rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_SD_PTI);
43189 }
43190 ret = _TRUE;
43191 @@ -3762,9 +3455,9 @@ sint xmitframe_enqueue_for_tdls_sleeping_sta(_adapter *padapter, struct xmit_fra
43192 return ret;
43193
43194 }
43195 -#endif
43196 +#endif //CONFIG_TDLS
43197
43198 -#ifdef CONFIG_AP_MODE
43199 +#if defined(CONFIG_AP_MODE) || defined(CONFIG_TDLS)
43200
43201 sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe)
43202 {
43203 @@ -3778,7 +3471,7 @@ sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *p
43204 #ifdef CONFIG_TDLS
43205 struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
43206
43207 - if( ptdlsinfo->setup_state & TDLS_LINKED_STATE )
43208 + if( ptdlsinfo->setup_state == TDLS_LINKED_STATE )
43209 {
43210 ret = xmitframe_enqueue_for_tdls_sleeping_sta(padapter, pxmitframe);
43211 return ret;
43212 @@ -3794,11 +3487,21 @@ sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *p
43213 }
43214 else
43215 {
43216 + DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
43217 psta=rtw_get_stainfo(pstapriv, pattrib->ra);
43218 }
43219
43220 if(psta==NULL)
43221 - return ret;
43222 + {
43223 + DBG_871X("%s, psta==NUL\n", __func__);
43224 + return _FALSE;
43225 + }
43226 +
43227 + if(!(psta->state &_FW_LINKED))
43228 + {
43229 + DBG_871X("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
43230 + return _FALSE;
43231 + }
43232
43233 if(pattrib->triggered==1)
43234 {
43235 @@ -3925,6 +3628,7 @@ sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *p
43236
43237 static void dequeue_xmitframes_to_sleeping_queue(_adapter *padapter, struct sta_info *psta, _queue *pframequeue)
43238 {
43239 + sint ret;
43240 _list *plist, *phead;
43241 u8 ac_index;
43242 struct tx_servq *ptxservq;
43243 @@ -3941,8 +3645,10 @@ static void dequeue_xmitframes_to_sleeping_queue(_adapter *padapter, struct sta_
43244
43245 plist = get_next(plist);
43246
43247 - xmitframe_enqueue_for_sleeping_sta(padapter, pxmitframe);
43248 + ret = xmitframe_enqueue_for_sleeping_sta(padapter, pxmitframe);
43249
43250 + if(_TRUE == ret)
43251 + {
43252 pattrib = &pxmitframe->attrib;
43253
43254 ptxservq = rtw_get_sta_pending(padapter, psta, pattrib->priority, (u8 *)(&ac_index));
43255 @@ -3950,6 +3656,12 @@ static void dequeue_xmitframes_to_sleeping_queue(_adapter *padapter, struct sta_
43256 ptxservq->qcnt--;
43257 phwxmits[ac_index].accnt--;
43258 }
43259 + else
43260 + {
43261 + //DBG_871X("xmitframe_enqueue_for_sleeping_sta return _FALSE\n");
43262 + }
43263 +
43264 + }
43265
43266 }
43267
43268 @@ -3973,7 +3685,7 @@ void stop_sta_xmit(_adapter *padapter, struct sta_info *psta)
43269
43270 #ifdef CONFIG_TDLS
43271 if( !(psta->tdls_sta_state & TDLS_LINKED_STATE) )
43272 -#endif //CONFIG_TDLS
43273 +#endif //CONFIG_TDLS
43274 pstapriv->sta_dz_bitmap |= BIT(psta->aid);
43275
43276
43277 @@ -4014,7 +3726,7 @@ void stop_sta_xmit(_adapter *padapter, struct sta_info *psta)
43278 _exit_critical_bh(&pxmitpriv->lock, &irqL0);
43279
43280
43281 -}
43282 +}
43283
43284 void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta)
43285 {
43286 @@ -4024,8 +3736,13 @@ void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta)
43287 _list *xmitframe_plist, *xmitframe_phead;
43288 struct xmit_frame *pxmitframe=NULL;
43289 struct sta_priv *pstapriv = &padapter->stapriv;
43290 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
43291
43292 - _enter_critical_bh(&psta->sleep_q.lock, &irqL);
43293 + psta_bmc = rtw_get_bcmc_stainfo(padapter);
43294 +
43295 +
43296 + //_enter_critical_bh(&psta->sleep_q.lock, &irqL);
43297 + _enter_critical_bh(&pxmitpriv->lock, &irqL);
43298
43299 xmitframe_phead = get_list_head(&psta->sleep_q);
43300 xmitframe_plist = get_next(xmitframe_phead);
43301 @@ -4082,53 +3799,25 @@ void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta)
43302
43303 pxmitframe->attrib.triggered = 1;
43304
43305 +/*
43306 _exit_critical_bh(&psta->sleep_q.lock, &irqL);
43307 - if(padapter->HalFunc.hal_xmit(padapter, pxmitframe) == _TRUE)
43308 + if(rtw_hal_xmit(padapter, pxmitframe) == _TRUE)
43309 {
43310 rtw_os_xmit_complete(padapter, pxmitframe);
43311 }
43312 _enter_critical_bh(&psta->sleep_q.lock, &irqL);
43313 +*/
43314 + rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
43315
43316 - if(psta->sleepq_len==0)
43317 - {
43318 -#ifdef CONFIG_TDLS
43319 - if( psta->tdls_sta_state & TDLS_LINKED_STATE )
43320 - {
43321 - if(psta->state&WIFI_SLEEP_STATE)
43322 - psta->state ^= WIFI_SLEEP_STATE;
43323 -
43324 - _exit_critical_bh(&psta->sleep_q.lock, &irqL);
43325 - return;
43326 - }
43327 -#endif
43328 - pstapriv->tim_bitmap &= ~BIT(psta->aid);
43329 -
43330 - //DBG_871X("wakeup to xmit, qlen==0, update_BCNTIM, tim=%x\n", pstapriv->tim_bitmap);
43331 - //upate BCN for TIM IE
43332 - //update_BCNTIM(padapter);
43333 - update_mask = BIT(0);
43334 -
43335 - if(psta->state&WIFI_SLEEP_STATE)
43336 - psta->state ^= WIFI_SLEEP_STATE;
43337 -
43338 - pstapriv->sta_dz_bitmap &= ~BIT(psta->aid);
43339 -
43340 - }
43341
43342 }
43343
43344 - _exit_critical_bh(&psta->sleep_q.lock, &irqL);
43345 -
43346 -
43347 //for BC/MC Frames
43348 - psta_bmc = rtw_get_bcmc_stainfo(padapter);
43349 if(!psta_bmc)
43350 - return;
43351 + goto _exit;
43352
43353 if((pstapriv->sta_dz_bitmap&0xfffe) == 0x0)//no any sta in ps mode
43354 {
43355 - _enter_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
43356 -
43357 xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
43358 xmitframe_plist = get_next(xmitframe_phead);
43359
43360 @@ -4148,36 +3837,71 @@ void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta)
43361
43362
43363 pxmitframe->attrib.triggered = 1;
43364 -
43365 +/*
43366 _exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
43367 - if(padapter->HalFunc.hal_xmit(padapter, pxmitframe) == _TRUE)
43368 + if(rtw_hal_xmit(padapter, pxmitframe) == _TRUE)
43369 {
43370 rtw_os_xmit_complete(padapter, pxmitframe);
43371 }
43372 _enter_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
43373
43374 +*/
43375 + rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
43376
43377 - if(psta_bmc->sleepq_len==0)
43378 - {
43379 - pstapriv->tim_bitmap &= ~BIT(0);
43380 - pstapriv->sta_dz_bitmap &= ~BIT(0);
43381 -
43382 - //DBG_871X("wakeup to xmit, qlen==0, update_BCNTIM, tim=%x\n", pstapriv->tim_bitmap);
43383 - //upate BCN for TIM IE
43384 - //update_BCNTIM(padapter);
43385 - update_mask |= BIT(1);
43386 - }
43387 -
43388 }
43389
43390 - _exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
43391 + if(psta_bmc->sleepq_len==0)
43392 + {
43393 + pstapriv->tim_bitmap &= ~BIT(0);
43394 + pstapriv->sta_dz_bitmap &= ~BIT(0);
43395 +
43396 + //DBG_871X("wakeup to xmit, qlen==0, update_BCNTIM, tim=%x\n", pstapriv->tim_bitmap);
43397 + //upate BCN for TIM IE
43398 + //update_BCNTIM(padapter);
43399 + update_mask |= BIT(1);
43400 + }
43401 +
43402 + }
43403 +
43404 + if(psta->sleepq_len==0)
43405 + {
43406 +#ifdef CONFIG_TDLS
43407 + if( psta->tdls_sta_state & TDLS_LINKED_STATE )
43408 + {
43409 + if(psta->state&WIFI_SLEEP_STATE)
43410 + psta->state ^= WIFI_SLEEP_STATE;
43411
43412 + goto _exit;
43413 }
43414 +#endif //CONFIG_TDLS
43415 + pstapriv->tim_bitmap &= ~BIT(psta->aid);
43416
43417 + //DBG_871X("wakeup to xmit, qlen==0, update_BCNTIM, tim=%x\n", pstapriv->tim_bitmap);
43418 + //upate BCN for TIM IE
43419 + //update_BCNTIM(padapter);
43420 + update_mask = BIT(0);
43421 +
43422 + if(psta->state&WIFI_SLEEP_STATE)
43423 + psta->state ^= WIFI_SLEEP_STATE;
43424 +
43425 + if(psta->state & WIFI_STA_ALIVE_CHK_STATE)
43426 + {
43427 + psta->expire_to = pstapriv->expire_to;
43428 + psta->state ^= WIFI_STA_ALIVE_CHK_STATE;
43429 + }
43430 +
43431 + pstapriv->sta_dz_bitmap &= ~BIT(psta->aid);
43432 + }
43433 +
43434 +_exit:
43435 +
43436 + //_exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
43437 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
43438
43439 if(update_mask)
43440 {
43441 //update_BCNTIM(padapter);
43442 + //printk("%s => call update_beacon\n",__FUNCTION__);
43443 update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
43444 }
43445
43446 @@ -4190,8 +3914,11 @@ void xmit_delivery_enabled_frames(_adapter *padapter, struct sta_info *psta)
43447 _list *xmitframe_plist, *xmitframe_phead;
43448 struct xmit_frame *pxmitframe=NULL;
43449 struct sta_priv *pstapriv = &padapter->stapriv;
43450 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
43451
43452 - _enter_critical_bh(&psta->sleep_q.lock, &irqL);
43453 +
43454 + //_enter_critical_bh(&psta->sleep_q.lock, &irqL);
43455 + _enter_critical_bh(&pxmitpriv->lock, &irqL);
43456
43457 xmitframe_phead = get_list_head(&psta->sleep_q);
43458 xmitframe_plist = get_next(xmitframe_phead);
43459 @@ -4244,17 +3971,21 @@ void xmit_delivery_enabled_frames(_adapter *padapter, struct sta_info *psta)
43460
43461 pxmitframe->attrib.triggered = 1;
43462
43463 - if(padapter->HalFunc.hal_xmit(padapter, pxmitframe) == _TRUE)
43464 +/*
43465 + if(rtw_hal_xmit(padapter, pxmitframe) == _TRUE)
43466 {
43467 rtw_os_xmit_complete(padapter, pxmitframe);
43468 }
43469 +*/
43470 + rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
43471
43472 if((psta->sleepq_ac_len==0) && (!psta->has_legacy_ac) && (wmmps_ac))
43473 {
43474 #ifdef CONFIG_TDLS
43475 if(psta->tdls_sta_state & TDLS_LINKED_STATE )
43476 {
43477 - _exit_critical_bh(&psta->sleep_q.lock, &irqL);
43478 + //_exit_critical_bh(&psta->sleep_q.lock, &irqL);
43479 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
43480 return;
43481 }
43482 #endif //CONFIG_TDLS
43483 @@ -4267,11 +3998,159 @@ void xmit_delivery_enabled_frames(_adapter *padapter, struct sta_info *psta)
43484 //update_mask = BIT(0);
43485 }
43486
43487 - }
43488 + }
43489
43490 - _exit_critical_bh(&psta->sleep_q.lock, &irqL);
43491 + //_exit_critical_bh(&psta->sleep_q.lock, &irqL);
43492 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
43493 +
43494 +}
43495 +
43496 +#endif
43497 +
43498 +void rtw_sctx_init(struct submit_ctx *sctx, int timeout_ms)
43499 +{
43500 + sctx->timeout_ms = timeout_ms;
43501 + sctx->submit_time= rtw_get_current_time();
43502 +#ifdef PLATFORM_LINUX /* TODO: add condition wating interface for other os */
43503 + init_completion(&sctx->done);
43504 +#endif
43505 + sctx->status = RTW_SCTX_SUBMITTED;
43506 +}
43507 +
43508 +int rtw_sctx_wait(struct submit_ctx *sctx)
43509 +{
43510 + int ret = _FAIL;
43511 + unsigned long expire;
43512 + int status = 0;
43513 +
43514 +#ifdef PLATFORM_LINUX
43515 + expire= sctx->timeout_ms ? msecs_to_jiffies(sctx->timeout_ms) : MAX_SCHEDULE_TIMEOUT;
43516 + if (!wait_for_completion_timeout(&sctx->done, expire)) {
43517 + /* timeout, do something?? */
43518 + status = RTW_SCTX_DONE_TIMEOUT;
43519 + DBG_871X("%s timeout\n", __func__);
43520 + } else {
43521 + status = sctx->status;
43522 + }
43523 +#endif
43524 +
43525 + if (status == RTW_SCTX_DONE_SUCCESS) {
43526 + ret = _SUCCESS;
43527 + }
43528 +
43529 + return ret;
43530 +}
43531 +
43532 +bool rtw_sctx_chk_waring_status(int status)
43533 +{
43534 + switch(status) {
43535 + case RTW_SCTX_DONE_UNKNOWN:
43536 + case RTW_SCTX_DONE_BUF_ALLOC:
43537 + case RTW_SCTX_DONE_BUF_FREE:
43538 +
43539 + case RTW_SCTX_DONE_DRV_STOP:
43540 + case RTW_SCTX_DONE_DEV_REMOVE:
43541 + return _TRUE;
43542 + default:
43543 + return _FALSE;
43544 + }
43545 +}
43546 +
43547 +void rtw_sctx_done_err(struct submit_ctx **sctx, int status)
43548 +{
43549 + if (*sctx) {
43550 + if (rtw_sctx_chk_waring_status(status))
43551 + DBG_871X("%s status:%d\n", __func__, status);
43552 + (*sctx)->status = status;
43553 + #ifdef PLATFORM_LINUX
43554 + complete(&((*sctx)->done));
43555 + #endif
43556 + *sctx = NULL;
43557 + }
43558 +}
43559 +
43560 +void rtw_sctx_done(struct submit_ctx **sctx)
43561 +{
43562 + rtw_sctx_done_err(sctx, RTW_SCTX_DONE_SUCCESS);
43563 +}
43564 +
43565 +#ifdef CONFIG_XMIT_ACK
43566 +
43567 +#ifdef CONFIG_XMIT_ACK_POLLING
43568 +s32 c2h_evt_hdl(_adapter *adapter, struct c2h_evt_hdr *c2h_evt, c2h_id_filter filter);
43569 +
43570 +/**
43571 + * rtw_ack_tx_polling -
43572 + * @pxmitpriv: xmit_priv to address ack_tx_ops
43573 + * @timeout_ms: timeout msec
43574 + *
43575 + * Init ack_tx_ops and then do c2h_evt_hdl() and polling ack_tx_ops repeatedly
43576 + * till tx report or timeout
43577 + * Returns: _SUCCESS if TX report ok, _FAIL for others
43578 + */
43579 +int rtw_ack_tx_polling(struct xmit_priv *pxmitpriv, u32 timeout_ms)
43580 +{
43581 + int ret = _FAIL;
43582 + struct submit_ctx *pack_tx_ops = &pxmitpriv->ack_tx_ops;
43583 + _adapter *adapter = container_of(pxmitpriv, _adapter, xmitpriv);
43584 +
43585 + pack_tx_ops->submit_time = rtw_get_current_time();
43586 + pack_tx_ops->timeout_ms = timeout_ms;
43587 + pack_tx_ops->status = RTW_SCTX_SUBMITTED;
43588 +
43589 + do {
43590 + c2h_evt_hdl(adapter, NULL, rtw_hal_c2h_id_filter_ccx(adapter));
43591 + if (pack_tx_ops->status != RTW_SCTX_SUBMITTED)
43592 + break;
43593 +
43594 + if (adapter->bDriverStopped) {
43595 + pack_tx_ops->status = RTW_SCTX_DONE_DRV_STOP;
43596 + break;
43597 + }
43598 + if (adapter->bSurpriseRemoved) {
43599 + pack_tx_ops->status = RTW_SCTX_DONE_DEV_REMOVE;
43600 + break;
43601 + }
43602 +
43603 + rtw_msleep_os(10);
43604 + } while (rtw_get_passing_time_ms(pack_tx_ops->submit_time) < timeout_ms);
43605
43606 + if (pack_tx_ops->status == RTW_SCTX_SUBMITTED) {
43607 + pack_tx_ops->status = RTW_SCTX_DONE_TIMEOUT;
43608 + DBG_871X("%s timeout\n", __func__);
43609 + }
43610 +
43611 + if (pack_tx_ops->status == RTW_SCTX_DONE_SUCCESS)
43612 + ret = _SUCCESS;
43613 +
43614 + return ret;
43615 }
43616 +#endif
43617 +
43618 +int rtw_ack_tx_wait(struct xmit_priv *pxmitpriv, u32 timeout_ms)
43619 +{
43620 +#ifdef CONFIG_XMIT_ACK_POLLING
43621 + return rtw_ack_tx_polling(pxmitpriv, timeout_ms);
43622 +#else
43623 + struct submit_ctx *pack_tx_ops = &pxmitpriv->ack_tx_ops;
43624
43625 + pack_tx_ops->submit_time = rtw_get_current_time();
43626 + pack_tx_ops->timeout_ms = timeout_ms;
43627 + pack_tx_ops->status = RTW_SCTX_SUBMITTED;
43628 +
43629 + return rtw_sctx_wait(pack_tx_ops);
43630 #endif
43631 +}
43632 +
43633 +void rtw_ack_tx_done(struct xmit_priv *pxmitpriv, int status)
43634 +{
43635 + struct submit_ctx *pack_tx_ops = &pxmitpriv->ack_tx_ops;
43636 +
43637 + if (pxmitpriv->ack_tx) {
43638 + rtw_sctx_done_err(&pack_tx_ops, status);
43639 + } else {
43640 + DBG_871X("%s ack_tx not set\n", __func__);
43641 + }
43642 +}
43643 +#endif //CONFIG_XMIT_ACK
43644
43645 diff --git a/drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c b/drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c
43646 new file mode 100644
43647 index 0000000..c59bb66
43648 --- /dev/null
43649 +++ b/drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c
43650 @@ -0,0 +1,177 @@
43651 +/******************************************************************************
43652 + *
43653 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
43654 + *
43655 + * This program is free software; you can redistribute it and/or modify it
43656 + * under the terms of version 2 of the GNU General Public License as
43657 + * published by the Free Software Foundation.
43658 + *
43659 + * This program is distributed in the hope that it will be useful, but WITHOUT
43660 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
43661 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
43662 + * more details.
43663 + *
43664 + * You should have received a copy of the GNU General Public License along with
43665 + * this program; if not, write to the Free Software Foundation, Inc.,
43666 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
43667 + *
43668 + *
43669 + ******************************************************************************/
43670 +/*++
43671 +Copyright (c) Realtek Semiconductor Corp. All rights reserved.
43672 +
43673 +Module Name:
43674 + HalPwrSeqCmd.c
43675 +
43676 +Abstract:
43677 + Implement HW Power sequence configuration CMD handling routine for Realtek devices.
43678 +
43679 +Major Change History:
43680 + When Who What
43681 + ---------- --------------- -------------------------------
43682 + 2011-10-26 Lucas Modify to be compatible with SD4-CE driver.
43683 + 2011-07-07 Roger Create.
43684 +
43685 +--*/
43686 +#include <HalPwrSeqCmd.h>
43687 +#include <sdio_ops.h>
43688 +
43689 +
43690 +//
43691 +// Description:
43692 +// This routine deal with the Power Configuration CMDs parsing for RTL8723/RTL8188E Series IC.
43693 +//
43694 +// Assumption:
43695 +// We should follow specific format which was released from HW SD.
43696 +//
43697 +// 2011.07.07, added by Roger.
43698 +//
43699 +u8 HalPwrSeqCmdParsing(
43700 + PADAPTER padapter,
43701 + u8 CutVersion,
43702 + u8 FabVersion,
43703 + u8 InterfaceType,
43704 + WLAN_PWR_CFG PwrSeqCmd[])
43705 +{
43706 + WLAN_PWR_CFG PwrCfgCmd = {0};
43707 + u8 bPollingBit = _FALSE;
43708 + u32 AryIdx = 0;
43709 + u8 value = 0;
43710 + u32 offset = 0;
43711 + u32 pollingCount = 0; // polling autoload done.
43712 + u32 maxPollingCnt = 5000;
43713 +
43714 + do {
43715 + PwrCfgCmd = PwrSeqCmd[AryIdx];
43716 +
43717 + RT_TRACE(_module_hal_init_c_ , _drv_info_,
43718 + ("HalPwrSeqCmdParsing: offset(%#x) cut_msk(%#x) fab_msk(%#x) interface_msk(%#x) base(%#x) cmd(%#x) msk(%#x) value(%#x)\n",
43719 + GET_PWR_CFG_OFFSET(PwrCfgCmd),
43720 + GET_PWR_CFG_CUT_MASK(PwrCfgCmd),
43721 + GET_PWR_CFG_FAB_MASK(PwrCfgCmd),
43722 + GET_PWR_CFG_INTF_MASK(PwrCfgCmd),
43723 + GET_PWR_CFG_BASE(PwrCfgCmd),
43724 + GET_PWR_CFG_CMD(PwrCfgCmd),
43725 + GET_PWR_CFG_MASK(PwrCfgCmd),
43726 + GET_PWR_CFG_VALUE(PwrCfgCmd)));
43727 +
43728 + //2 Only Handle the command whose FAB, CUT, and Interface are matched
43729 + if ((GET_PWR_CFG_FAB_MASK(PwrCfgCmd) & FabVersion) &&
43730 + (GET_PWR_CFG_CUT_MASK(PwrCfgCmd) & CutVersion) &&
43731 + (GET_PWR_CFG_INTF_MASK(PwrCfgCmd) & InterfaceType))
43732 + {
43733 + switch (GET_PWR_CFG_CMD(PwrCfgCmd))
43734 + {
43735 + case PWR_CMD_READ:
43736 + RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_READ\n"));
43737 + break;
43738 +
43739 + case PWR_CMD_WRITE:
43740 + RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_WRITE\n"));
43741 + offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
43742 +
43743 +#ifdef CONFIG_SDIO_HCI
43744 + //
43745 + // <Roger_Notes> We should deal with interface specific address mapping for some interfaces, e.g., SDIO interface
43746 + // 2011.07.07.
43747 + //
43748 + if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
43749 + {
43750 + // Read Back SDIO Local value
43751 + value = SdioLocalCmd52Read1Byte(padapter, offset);
43752 +
43753 + value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
43754 + value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
43755 +
43756 + // Write Back SDIO Local value
43757 + SdioLocalCmd52Write1Byte(padapter, offset, value);
43758 + }
43759 + else
43760 +#endif
43761 + {
43762 + // Read the value from system register
43763 + value = rtw_read8(padapter, offset);
43764 +
43765 + value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
43766 + value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
43767 +
43768 + // Write the value back to sytem register
43769 + rtw_write8(padapter, offset, value);
43770 + }
43771 + break;
43772 +
43773 + case PWR_CMD_POLLING:
43774 + RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_POLLING\n"));
43775 +
43776 + bPollingBit = _FALSE;
43777 + offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
43778 +
43779 + do {
43780 +#ifdef CONFIG_SDIO_HCI
43781 + if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
43782 + value = SdioLocalCmd52Read1Byte(padapter, offset);
43783 + else
43784 +#endif
43785 + value = rtw_read8(padapter, offset);
43786 +
43787 + value &= GET_PWR_CFG_MASK(PwrCfgCmd);
43788 + if (value == (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd)))
43789 + bPollingBit = _TRUE;
43790 + else
43791 + rtw_udelay_os(10);
43792 +
43793 + if (pollingCount++ > maxPollingCnt) {
43794 + RT_TRACE(_module_hal_init_c_ , _drv_err_, ("Fail to polling Offset[%#x]\n", offset));
43795 + return _FALSE;
43796 + }
43797 + } while (!bPollingBit);
43798 +
43799 + break;
43800 +
43801 + case PWR_CMD_DELAY:
43802 + RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_DELAY\n"));
43803 + if (GET_PWR_CFG_VALUE(PwrCfgCmd) == PWRSEQ_DELAY_US)
43804 + rtw_udelay_os(GET_PWR_CFG_OFFSET(PwrCfgCmd));
43805 + else
43806 + rtw_udelay_os(GET_PWR_CFG_OFFSET(PwrCfgCmd)*1000);
43807 + break;
43808 +
43809 + case PWR_CMD_END:
43810 + // When this command is parsed, end the process
43811 + RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_END\n"));
43812 + return _TRUE;
43813 + break;
43814 +
43815 + default:
43816 + RT_TRACE(_module_hal_init_c_ , _drv_err_, ("HalPwrSeqCmdParsing: Unknown CMD!!\n"));
43817 + break;
43818 + }
43819 + }
43820 +
43821 + AryIdx++;//Add Array Index
43822 + }while(1);
43823 +
43824 + return _TRUE;
43825 +}
43826 +
43827 +
43828 diff --git a/drivers/net/wireless/rtl8192cu/hal/dm.c b/drivers/net/wireless/rtl8192cu/hal/dm.c
43829 new file mode 100644
43830 index 0000000..465ca82
43831 --- /dev/null
43832 +++ b/drivers/net/wireless/rtl8192cu/hal/dm.c
43833 @@ -0,0 +1,314 @@
43834 +/******************************************************************************
43835 + *
43836 + * Copyright(c) 2007 - 2013 Realtek Corporation. All rights reserved.
43837 + *
43838 + * This program is free software; you can redistribute it and/or modify it
43839 + * under the terms of version 2 of the GNU General Public License as
43840 + * published by the Free Software Foundation.
43841 + *
43842 + * This program is distributed in the hope that it will be useful, but WITHOUT
43843 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
43844 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
43845 + * more details.
43846 + *
43847 + * You should have received a copy of the GNU General Public License along with
43848 + * this program; if not, write to the Free Software Foundation, Inc.,
43849 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
43850 + *
43851 + *
43852 + ******************************************************************************/
43853 +
43854 +#include <drv_conf.h>
43855 +#include <osdep_service.h>
43856 +#include <drv_types.h>
43857 +
43858 +#ifdef CONFIG_RTL8192C
43859 +#include <rtl8192c_hal.h>
43860 +#endif
43861 +
43862 +#ifdef CONFIG_RTL8192D
43863 +#include <rtl8192d_hal.h>
43864 +#endif
43865 +
43866 +bool rtw_adapter_linked(_adapter *adapter)
43867 +{
43868 + bool linked = _FALSE;
43869 + struct mlme_priv *mlmepriv = &adapter->mlmepriv;
43870 +
43871 + if( (check_fwstate(mlmepriv, WIFI_AP_STATE) == _TRUE) ||
43872 + (check_fwstate(mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE))
43873 + {
43874 + if(adapter->stapriv.asoc_sta_count > 2)
43875 + linked = _TRUE;
43876 + }
43877 + else{//Station mode
43878 + if(check_fwstate(mlmepriv, _FW_LINKED)== _TRUE)
43879 + linked = _TRUE;
43880 + }
43881 +
43882 + return linked;
43883 +}
43884 +
43885 +bool dm_linked(_adapter *adapter)
43886 +{
43887 + bool linked;
43888 +
43889 + if ((linked = rtw_adapter_linked(adapter)))
43890 + goto exit;
43891 +
43892 +#ifdef CONFIG_CONCURRENT_MODE
43893 + if ((adapter = adapter->pbuddy_adapter) == NULL)
43894 + goto exit;
43895 + linked = rtw_adapter_linked(adapter);
43896 +#endif
43897 +
43898 +exit:
43899 + return linked;
43900 +}
43901 +
43902 +#if 0
43903 +void dm_enable_EDCCA(_adapter *adapter)
43904 +{
43905 + // Enable EDCCA. The value is suggested by SD3 Wilson.
43906 +
43907 + //
43908 + // Revised for ASUS 11b/g performance issues, suggested by BB Neil, 2012.04.13.
43909 + //
43910 + /*if((pDM_Odm->SupportICType == ODM_RTL8723A)&&(IS_WIRELESS_MODE_G(pAdapter)))
43911 + {
43912 + rtw_write8(adapter,rOFDM0_ECCAThreshold,0x00);
43913 + rtw_write8(adapter,rOFDM0_ECCAThreshold+2,0xFD);
43914 +
43915 + }
43916 + else*/
43917 + {
43918 + rtw_write8(adapter,rOFDM0_ECCAThreshold,0x03);
43919 + rtw_write8(adapter,rOFDM0_ECCAThreshold+2,0x00);
43920 + }
43921 +}
43922 +
43923 +void dm_disable_EDCCA(_adapter *adapter)
43924 +{
43925 + // Disable EDCCA..
43926 + rtw_write8(adapter, rOFDM0_ECCAThreshold, 0x7f);
43927 + rtw_write8(adapter, rOFDM0_ECCAThreshold+2, 0x7f);
43928 +}
43929 +
43930 +//
43931 +// Description: According to initial gain value to determine to enable or disable EDCCA.
43932 +//
43933 +// Suggested by SD3 Wilson. Added by tynli. 2011.11.25.
43934 +//
43935 +void dm_dynamic_EDCCA(_adapter *pAdapter)
43936 +{
43937 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
43938 + struct dm_priv *dmpriv = &pHalData->dmpriv;
43939 + u8 RegC50, RegC58;
43940 +
43941 + RegC50 = (u8)PHY_QueryBBReg(pAdapter, rOFDM0_XAAGCCore1, bMaskByte0);
43942 + RegC58 = (u8)PHY_QueryBBReg(pAdapter, rOFDM0_XBAGCCore1, bMaskByte0);
43943 +
43944 +
43945 + if((RegC50 > 0x28 && RegC58 > 0x28)
43946 + /*|| ((pDM_Odm->SupportICType == ODM_RTL8723A && IS_WIRELESS_MODE_G(pAdapter) && RegC50>0x26))
43947 + || (pDM_Odm->SupportICType == ODM_RTL8188E && RegC50 > 0x28)*/
43948 + )
43949 + {
43950 + if(!dmpriv->bPreEdccaEnable)
43951 + {
43952 + dm_enable_EDCCA(pAdapter);
43953 + dmpriv->bPreEdccaEnable = _TRUE;
43954 + }
43955 +
43956 + }
43957 + else if((RegC50 < 0x25 && RegC58 < 0x25)
43958 + /*|| (pDM_Odm->SupportICType == ODM_RTL8188E && RegC50 < 0x25)*/
43959 + )
43960 + {
43961 + if(dmpriv->bPreEdccaEnable)
43962 + {
43963 + dm_disable_EDCCA(pAdapter);
43964 + dmpriv->bPreEdccaEnable = _FALSE;
43965 + }
43966 + }
43967 +}
43968 +#endif
43969 +
43970 +#define DM_ADAPTIVITY_VER "ADAPTIVITY_V001"
43971 +
43972 +int dm_adaptivity_get_parm_str(_adapter *pAdapter, char *buf, int len)
43973 +{
43974 +#ifdef CONFIG_DM_ADAPTIVITY
43975 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
43976 + struct dm_priv *dmpriv = &pHalData->dmpriv;
43977 +
43978 + return snprintf(buf, len, DM_ADAPTIVITY_VER"\n"
43979 + "TH_L2H_ini\tTH_EDCCA_HL_diff\tIGI_Base\tForceEDCCA\tAdapEn_RSSI\tIGI_LowerBound\n"
43980 + "0x%02x\t%d\t0x%02x\t%d\t%u\t%u\n",
43981 + (u8)dmpriv->TH_L2H_ini,
43982 + dmpriv->TH_EDCCA_HL_diff,
43983 + dmpriv->IGI_Base,
43984 + dmpriv->ForceEDCCA,
43985 + dmpriv->AdapEn_RSSI,
43986 + dmpriv->IGI_LowerBound
43987 + );
43988 +#endif /* CONFIG_DM_ADAPTIVITY */
43989 + return 0;
43990 +}
43991 +
43992 +void dm_adaptivity_set_parm(_adapter *pAdapter, s8 TH_L2H_ini, s8 TH_EDCCA_HL_diff,
43993 + s8 IGI_Base, bool ForceEDCCA, u8 AdapEn_RSSI, u8 IGI_LowerBound)
43994 +{
43995 +#ifdef CONFIG_DM_ADAPTIVITY
43996 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
43997 + struct dm_priv *dmpriv = &pHalData->dmpriv;
43998 +
43999 + dmpriv->TH_L2H_ini = TH_L2H_ini;
44000 + dmpriv->TH_EDCCA_HL_diff = TH_EDCCA_HL_diff;
44001 + dmpriv->IGI_Base = IGI_Base;
44002 + dmpriv->ForceEDCCA = ForceEDCCA;
44003 + dmpriv->AdapEn_RSSI = AdapEn_RSSI;
44004 + dmpriv->IGI_LowerBound = IGI_LowerBound;
44005 +
44006 +#endif /* CONFIG_DM_ADAPTIVITY */
44007 +}
44008 +
44009 +void dm_adaptivity_init(_adapter *pAdapter)
44010 +{
44011 +#ifdef CONFIG_DM_ADAPTIVITY
44012 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
44013 + struct dm_priv *dmpriv = &pHalData->dmpriv;
44014 +
44015 + /*
44016 + if(pDM_Odm->SupportICType == ODM_RTL8723B)
44017 + {
44018 + pDM_Odm->TH_L2H_ini = 0xf8; // -8
44019 + }
44020 + if((pDM_Odm->SupportICType == ODM_RTL8192E)&&(pDM_Odm->SupportInterface == ODM_ITRF_PCIE))
44021 + {
44022 + pDM_Odm->TH_L2H_ini = 0xf0; // -16
44023 + }
44024 + else */
44025 + {
44026 + dmpriv->TH_L2H_ini = 0xf9; // -7
44027 + }
44028 +
44029 + dmpriv->TH_EDCCA_HL_diff = 7;
44030 + dmpriv->IGI_Base = 0x32;
44031 + dmpriv->IGI_target = 0x1c;
44032 + dmpriv->ForceEDCCA = 0;
44033 + dmpriv->AdapEn_RSSI = 20;
44034 + dmpriv->IGI_LowerBound = 0;
44035 +
44036 + //Reg524[11]=0 is easily to transmit packets during adaptivity test
44037 + PHY_SetBBReg(pAdapter, 0x524, BIT11, 1); // stop counting if EDCCA is asserted
44038 +
44039 +#endif /* CONFIG_DM_ADAPTIVITY */
44040 +}
44041 +
44042 +void dm_adaptivity(_adapter *pAdapter)
44043 +{
44044 +#ifdef CONFIG_DM_ADAPTIVITY
44045 + s8 TH_L2H_dmc, TH_H2L_dmc;
44046 + s8 TH_L2H, TH_H2L, Diff, IGI_target;
44047 + u32 value32;
44048 + BOOLEAN EDCCA_State;
44049 +
44050 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
44051 + struct dm_priv *dmpriv = &pHalData->dmpriv;
44052 + DIG_T *pDigTable = &dmpriv->DM_DigTable;
44053 + u8 IGI = pDigTable->CurIGValue;
44054 + u8 RSSI_Min = pDigTable->Rssi_val_min;
44055 + HT_CHANNEL_WIDTH BandWidth = pHalData->CurrentChannelBW;
44056 +
44057 + if (!(dmpriv->DMFlag & DYNAMIC_FUNC_ADAPTIVITY))
44058 + {
44059 + LOG_LEVEL(_drv_info_, "Go to odm_DynamicEDCCA() \n");
44060 + // Add by Neil Chen to enable edcca to MP Platform
44061 + // Adjust EDCCA.
44062 + /*if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
44063 + dm_dynamic_EDCCA(pAdapter);
44064 + */
44065 + return;
44066 + }
44067 + LOG_LEVEL(_drv_info_, "odm_Adaptivity() =====> \n");
44068 +
44069 + LOG_LEVEL(_drv_info_, "ForceEDCCA=%d, IGI_Base=0x%x, TH_L2H_ini = %d, TH_EDCCA_HL_diff = %d, AdapEn_RSSI = %d\n",
44070 + dmpriv->ForceEDCCA, dmpriv->IGI_Base, dmpriv->TH_L2H_ini, dmpriv->TH_EDCCA_HL_diff, dmpriv->AdapEn_RSSI);
44071 +
44072 + /*if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
44073 + PHY_SetBBReg(0x800, BIT10, 0); //ADC_mask enable
44074 + */
44075 +
44076 + if(!dm_linked(pAdapter) || pHalData->CurrentChannel > 149) /* Band4 doesn't need adaptivity */
44077 + {
44078 + /*if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)*/
44079 + {
44080 + PHY_SetBBReg(pAdapter,rOFDM0_ECCAThreshold, bMaskByte0, 0x7f);
44081 + PHY_SetBBReg(pAdapter,rOFDM0_ECCAThreshold, bMaskByte2, 0x7f);
44082 + }
44083 + /*else
44084 + {
44085 + ODM_SetBBReg(pDM_Odm, rFPGA0_XB_LSSIReadBack, 0xFFFF, (0x7f<<8) | 0x7f);
44086 + }*/
44087 + return;
44088 + }
44089 +
44090 + if(!dmpriv->ForceEDCCA)
44091 + {
44092 + if(RSSI_Min > dmpriv->AdapEn_RSSI)
44093 + EDCCA_State = 1;
44094 + else if(RSSI_Min < (dmpriv->AdapEn_RSSI - 5))
44095 + EDCCA_State = 0;
44096 + }
44097 + else
44098 + EDCCA_State = 1;
44099 + //if((pDM_Odm->SupportICType & ODM_IC_11AC_SERIES) && (*pDM_Odm->pBandType == BAND_ON_5G))
44100 + //IGI_target = pDM_Odm->IGI_Base;
44101 + //else
44102 + {
44103 +
44104 + if(BandWidth == HT_CHANNEL_WIDTH_20) //CHANNEL_WIDTH_20
44105 + IGI_target = dmpriv->IGI_Base;
44106 + else if(BandWidth == HT_CHANNEL_WIDTH_40)
44107 + IGI_target = dmpriv->IGI_Base + 2;
44108 + /*else if(*pDM_Odm->pBandWidth == ODM_BW80M)
44109 + IGI_target = pDM_Odm->IGI_Base + 6;*/
44110 + else
44111 + IGI_target = dmpriv->IGI_Base;
44112 + }
44113 +
44114 + dmpriv->IGI_target = (u8)IGI_target;
44115 +
44116 + LOG_LEVEL(_drv_info_, "BandWidth=%s, IGI_target=0x%x, EDCCA_State=%d\n",
44117 + (BandWidth==HT_CHANNEL_WIDTH_40)?"40M":"20M", IGI_target, EDCCA_State);
44118 +
44119 + if(EDCCA_State == 1)
44120 + {
44121 + Diff = IGI_target -(s8)IGI;
44122 + TH_L2H_dmc = dmpriv->TH_L2H_ini + Diff;
44123 + if(TH_L2H_dmc > 10) TH_L2H_dmc = 10;
44124 + TH_H2L_dmc = TH_L2H_dmc - dmpriv->TH_EDCCA_HL_diff;
44125 + }
44126 + else
44127 + {
44128 + TH_L2H_dmc = 0x7f;
44129 + TH_H2L_dmc = 0x7f;
44130 + }
44131 +
44132 + LOG_LEVEL(_drv_info_, "IGI=0x%x, TH_L2H_dmc = %d, TH_H2L_dmc = %d\n",
44133 + IGI, TH_L2H_dmc, TH_H2L_dmc);
44134 +
44135 + /*if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)*/
44136 + {
44137 + PHY_SetBBReg(pAdapter,rOFDM0_ECCAThreshold, bMaskByte0, (u8)TH_L2H_dmc);
44138 + PHY_SetBBReg(pAdapter,rOFDM0_ECCAThreshold, bMaskByte2, (u8)TH_H2L_dmc);
44139 + }
44140 + /*else
44141 + PHY_SetBBReg(pAdapter, rFPGA0_XB_LSSIReadBack, 0xFFFF, ((u8)TH_H2L_dmc<<8) | (u8)TH_L2H_dmc);*/
44142 +
44143 +skip_dm:
44144 + return;
44145 +#endif /* CONFIG_DM_ADAPTIVITY */
44146 +}
44147 +
44148 diff --git a/drivers/net/wireless/rtl8192cu/hal/dm.h b/drivers/net/wireless/rtl8192cu/hal/dm.h
44149 new file mode 100644
44150 index 0000000..dd9a57d
44151 --- /dev/null
44152 +++ b/drivers/net/wireless/rtl8192cu/hal/dm.h
44153 @@ -0,0 +1,30 @@
44154 +/******************************************************************************
44155 + *
44156 + * Copyright(c) 2007 - 2013 Realtek Corporation. All rights reserved.
44157 + *
44158 + * This program is free software; you can redistribute it and/or modify it
44159 + * under the terms of version 2 of the GNU General Public License as
44160 + * published by the Free Software Foundation.
44161 + *
44162 + * This program is distributed in the hope that it will be useful, but WITHOUT
44163 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
44164 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
44165 + * more details.
44166 + *
44167 + * You should have received a copy of the GNU General Public License along with
44168 + * this program; if not, write to the Free Software Foundation, Inc.,
44169 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
44170 + *
44171 + *
44172 + ******************************************************************************/
44173 +
44174 + #ifndef __DM_H__
44175 +#define __DM_H__
44176 +
44177 +int dm_adaptivity_get_parm_str(_adapter *pAdapter, char *buf, int len);
44178 +void dm_adaptivity_set_parm(_adapter *pAdapter, s8 TH_L2H_ini, s8 TH_EDCCA_HL_diff,
44179 + s8 IGI_Base, bool ForceEDCCA, u8 AdapEn_RSSI, u8 IGI_LowerBound);
44180 +void dm_adaptivity_init(_adapter *pAdapter);
44181 +void dm_adaptivity(_adapter *pAdapter);
44182 +
44183 +#endif /* __DM_H__ */
44184 diff --git a/drivers/net/wireless/rtl8192cu/hal/hal_com.c b/drivers/net/wireless/rtl8192cu/hal/hal_com.c
44185 new file mode 100644
44186 index 0000000..4dcafd6
44187 --- /dev/null
44188 +++ b/drivers/net/wireless/rtl8192cu/hal/hal_com.c
44189 @@ -0,0 +1,371 @@
44190 +/******************************************************************************
44191 + *
44192 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
44193 + *
44194 + * This program is free software; you can redistribute it and/or modify it
44195 + * under the terms of version 2 of the GNU General Public License as
44196 + * published by the Free Software Foundation.
44197 + *
44198 + * This program is distributed in the hope that it will be useful, but WITHOUT
44199 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
44200 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
44201 + * more details.
44202 + *
44203 + * You should have received a copy of the GNU General Public License along with
44204 + * this program; if not, write to the Free Software Foundation, Inc.,
44205 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
44206 + *
44207 + *
44208 + ******************************************************************************/
44209 +#include <drv_conf.h>
44210 +#include <osdep_service.h>
44211 +#include <drv_types.h>
44212 +#include <rtw_byteorder.h>
44213 +
44214 +#include <hal_intf.h>
44215 +#include <hal_com.h>
44216 +
44217 +#ifdef CONFIG_RTL8192C
44218 +#include <rtl8192c_hal.h>
44219 +#endif
44220 +#ifdef CONFIG_RTL8192D
44221 +#include <rtl8192d_hal.h>
44222 +#endif
44223 +
44224 +#define _HAL_COM_C_
44225 +
44226 +//============================================================
44227 +// Global var
44228 +//============================================================
44229 +u32 OFDMSwingTable[OFDM_TABLE_SIZE_92D] = {
44230 + 0x7f8001fe, // 0, +6.0dB
44231 + 0x788001e2, // 1, +5.5dB
44232 + 0x71c001c7, // 2, +5.0dB
44233 + 0x6b8001ae, // 3, +4.5dB
44234 + 0x65400195, // 4, +4.0dB
44235 + 0x5fc0017f, // 5, +3.5dB
44236 + 0x5a400169, // 6, +3.0dB
44237 + 0x55400155, // 7, +2.5dB
44238 + 0x50800142, // 8, +2.0dB
44239 + 0x4c000130, // 9, +1.5dB
44240 + 0x47c0011f, // 10, +1.0dB
44241 + 0x43c0010f, // 11, +0.5dB
44242 + 0x40000100, // 12, +0dB
44243 + 0x3c8000f2, // 13, -0.5dB
44244 + 0x390000e4, // 14, -1.0dB
44245 + 0x35c000d7, // 15, -1.5dB
44246 + 0x32c000cb, // 16, -2.0dB
44247 + 0x300000c0, // 17, -2.5dB
44248 + 0x2d4000b5, // 18, -3.0dB
44249 + 0x2ac000ab, // 19, -3.5dB
44250 + 0x288000a2, // 20, -4.0dB
44251 + 0x26000098, // 21, -4.5dB
44252 + 0x24000090, // 22, -5.0dB
44253 + 0x22000088, // 23, -5.5dB
44254 + 0x20000080, // 24, -6.0dB
44255 + 0x1e400079, // 25, -6.5dB
44256 + 0x1c800072, // 26, -7.0dB
44257 + 0x1b00006c, // 27. -7.5dB
44258 + 0x19800066, // 28, -8.0dB
44259 + 0x18000060, // 29, -8.5dB
44260 + 0x16c0005b, // 30, -9.0dB
44261 + 0x15800056, // 31, -9.5dB
44262 + 0x14400051, // 32, -10.0dB
44263 + 0x1300004c, // 33, -10.5dB
44264 + 0x12000048, // 34, -11.0dB
44265 + 0x11000044, // 35, -11.5dB
44266 + 0x10000040, // 36, -12.0dB
44267 + 0x0f00003c,// 37, -12.5dB
44268 + 0x0e400039,// 38, -13.0dB
44269 + 0x0d800036,// 39, -13.5dB
44270 + 0x0cc00033,// 40, -14.0dB
44271 + 0x0c000030,// 41, -14.5dB
44272 + 0x0b40002d,// 42, -15.0dB
44273 +};
44274 +
44275 +
44276 +u8 CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8] = {
44277 + {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}, // 0, +0dB
44278 + {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, // 1, -0.5dB
44279 + {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, // 2, -1.0dB
44280 + {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, // 3, -1.5dB
44281 + {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, // 4, -2.0dB
44282 + {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, // 5, -2.5dB
44283 + {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, // 6, -3.0dB
44284 + {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, // 7, -3.5dB
44285 + {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, // 8, -4.0dB
44286 + {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, // 9, -4.5dB
44287 + {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, // 10, -5.0dB
44288 + {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, // 11, -5.5dB
44289 + {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, // 12, -6.0dB
44290 + {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, // 13, -6.5dB
44291 + {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, // 14, -7.0dB
44292 + {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, // 15, -7.5dB
44293 + {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, // 16, -8.0dB
44294 + {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, // 17, -8.5dB
44295 + {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, // 18, -9.0dB
44296 + {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, // 19, -9.5dB
44297 + {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, // 20, -10.0dB
44298 + {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, // 21, -10.5dB
44299 + {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, // 22, -11.0dB
44300 + {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, // 23, -11.5dB
44301 + {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, // 24, -12.0dB
44302 + {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, // 25, -12.5dB
44303 + {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, // 26, -13.0dB
44304 + {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, // 27, -13.5dB
44305 + {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, // 28, -14.0dB
44306 + {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, // 29, -14.5dB
44307 + {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, // 30, -15.0dB
44308 + {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, // 31, -15.5dB
44309 + {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01} // 32, -16.0dB
44310 +};
44311 +
44312 +
44313 +u8 CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8]= {
44314 + {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}, // 0, +0dB
44315 + {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, // 1, -0.5dB
44316 + {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, // 2, -1.0dB
44317 + {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, // 3, -1.5dB
44318 + {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, // 4, -2.0dB
44319 + {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, // 5, -2.5dB
44320 + {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, // 6, -3.0dB
44321 + {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, // 7, -3.5dB
44322 + {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, // 8, -4.0dB
44323 + {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, // 9, -4.5dB
44324 + {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, // 10, -5.0dB
44325 + {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, // 11, -5.5dB
44326 + {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, // 12, -6.0dB
44327 + {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, // 13, -6.5dB
44328 + {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, // 14, -7.0dB
44329 + {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, // 15, -7.5dB
44330 + {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, // 16, -8.0dB
44331 + {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, // 17, -8.5dB
44332 + {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, // 18, -9.0dB
44333 + {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, // 19, -9.5dB
44334 + {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, // 20, -10.0dB
44335 + {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, // 21, -10.5dB
44336 + {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, // 22, -11.0dB
44337 + {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, // 23, -11.5dB
44338 + {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, // 24, -12.0dB
44339 + {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, // 25, -12.5dB
44340 + {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, // 26, -13.0dB
44341 + {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, // 27, -13.5dB
44342 + {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, // 28, -14.0dB
44343 + {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, // 29, -14.5dB
44344 + {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, // 30, -15.0dB
44345 + {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, // 31, -15.5dB
44346 + {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00} // 32, -16.0dB
44347 +};
44348 +
44349 +
44350 +#ifdef CONFIG_CHIP_VER_INTEGRATION
44351 +void dump_chip_info(HAL_VERSION ChipVersion)
44352 +{
44353 + if(IS_81XXC(ChipVersion)){
44354 + DBG_871X("Chip Version Info: %s_",IS_92C_SERIAL(ChipVersion)?"CHIP_8192C":"CHIP_8188C");
44355 + }
44356 + else if(IS_92D(ChipVersion)){
44357 + DBG_871X("Chip Version Info: CHIP_8192D_");
44358 + }
44359 + else if(IS_8723_SERIES(ChipVersion)){
44360 + DBG_871X("Chip Version Info: CHIP_8723A_");
44361 + }
44362 + else if(IS_8188E(ChipVersion)){
44363 + DBG_871X("Chip Version Info: CHIP_8188E_");
44364 + }
44365 +
44366 + DBG_871X("%s_",IS_NORMAL_CHIP(ChipVersion)?"Normal_Chip":"Test_Chip");
44367 + DBG_871X("%s_",IS_CHIP_VENDOR_TSMC(ChipVersion)?"TSMC":"UMC");
44368 + if(IS_A_CUT(ChipVersion)) DBG_871X("A_CUT_");
44369 + else if(IS_B_CUT(ChipVersion)) DBG_871X("B_CUT_");
44370 + else if(IS_C_CUT(ChipVersion)) DBG_871X("C_CUT_");
44371 + else if(IS_D_CUT(ChipVersion)) DBG_871X("D_CUT_");
44372 + else if(IS_E_CUT(ChipVersion)) DBG_871X("E_CUT_");
44373 + else DBG_871X("UNKNOWN_CUT(%d)_",ChipVersion.CUTVersion);
44374 +
44375 + if(IS_1T1R(ChipVersion)) DBG_871X("1T1R_");
44376 + else if(IS_1T2R(ChipVersion)) DBG_871X("1T2R_");
44377 + else if(IS_2T2R(ChipVersion)) DBG_871X("2T2R_");
44378 + else DBG_871X("UNKNOWN_RFTYPE(%d)_",ChipVersion.RFType);
44379 +
44380 +
44381 + DBG_871X("RomVer(%d)\n",ChipVersion.ROMVer);
44382 +}
44383 +
44384 +#endif
44385 +
44386 +#define EEPROM_CHANNEL_PLAN_BY_HW_MASK 0x80
44387 +
44388 +u8 //return the final channel plan decision
44389 +hal_com_get_channel_plan(
44390 + IN PADAPTER padapter,
44391 + IN u8 hw_channel_plan, //channel plan from HW (efuse/eeprom)
44392 + IN u8 sw_channel_plan, //channel plan from SW (registry/module param)
44393 + IN u8 def_channel_plan, //channel plan used when the former two is invalid
44394 + IN BOOLEAN AutoLoadFail
44395 + )
44396 +{
44397 + u8 swConfig;
44398 + u8 chnlPlan;
44399 +
44400 + swConfig = _TRUE;
44401 + if (!AutoLoadFail)
44402 + {
44403 + if (!rtw_is_channel_plan_valid(sw_channel_plan))
44404 + swConfig = _FALSE;
44405 + if (hw_channel_plan & EEPROM_CHANNEL_PLAN_BY_HW_MASK)
44406 + swConfig = _FALSE;
44407 + }
44408 +
44409 + if (swConfig == _TRUE)
44410 + chnlPlan = sw_channel_plan;
44411 + else
44412 + chnlPlan = hw_channel_plan & (~EEPROM_CHANNEL_PLAN_BY_HW_MASK);
44413 +
44414 + if (!rtw_is_channel_plan_valid(chnlPlan))
44415 + chnlPlan = def_channel_plan;
44416 +
44417 + return chnlPlan;
44418 +}
44419 +
44420 +u8 MRateToHwRate(u8 rate)
44421 +{
44422 + u8 ret = DESC_RATE1M;
44423 +
44424 + switch(rate)
44425 + {
44426 + // CCK and OFDM non-HT rates
44427 + case IEEE80211_CCK_RATE_1MB: ret = DESC_RATE1M; break;
44428 + case IEEE80211_CCK_RATE_2MB: ret = DESC_RATE2M; break;
44429 + case IEEE80211_CCK_RATE_5MB: ret = DESC_RATE5_5M; break;
44430 + case IEEE80211_CCK_RATE_11MB: ret = DESC_RATE11M; break;
44431 + case IEEE80211_OFDM_RATE_6MB: ret = DESC_RATE6M; break;
44432 + case IEEE80211_OFDM_RATE_9MB: ret = DESC_RATE9M; break;
44433 + case IEEE80211_OFDM_RATE_12MB: ret = DESC_RATE12M; break;
44434 + case IEEE80211_OFDM_RATE_18MB: ret = DESC_RATE18M; break;
44435 + case IEEE80211_OFDM_RATE_24MB: ret = DESC_RATE24M; break;
44436 + case IEEE80211_OFDM_RATE_36MB: ret = DESC_RATE36M; break;
44437 + case IEEE80211_OFDM_RATE_48MB: ret = DESC_RATE48M; break;
44438 + case IEEE80211_OFDM_RATE_54MB: ret = DESC_RATE54M; break;
44439 +
44440 + // HT rates since here
44441 + //case MGN_MCS0: ret = DESC_RATEMCS0; break;
44442 + //case MGN_MCS1: ret = DESC_RATEMCS1; break;
44443 + //case MGN_MCS2: ret = DESC_RATEMCS2; break;
44444 + //case MGN_MCS3: ret = DESC_RATEMCS3; break;
44445 + //case MGN_MCS4: ret = DESC_RATEMCS4; break;
44446 + //case MGN_MCS5: ret = DESC_RATEMCS5; break;
44447 + //case MGN_MCS6: ret = DESC_RATEMCS6; break;
44448 + //case MGN_MCS7: ret = DESC_RATEMCS7; break;
44449 +
44450 + default: break;
44451 + }
44452 +
44453 + return ret;
44454 +}
44455 +
44456 +void HalSetBrateCfg(
44457 + IN PADAPTER Adapter,
44458 + IN u8 *mBratesOS,
44459 + OUT u16 *pBrateCfg)
44460 +{
44461 + u8 i, is_brate, brate;
44462 +
44463 + for(i=0;i<NDIS_802_11_LENGTH_RATES_EX;i++)
44464 + {
44465 + is_brate = mBratesOS[i] & IEEE80211_BASIC_RATE_MASK;
44466 + brate = mBratesOS[i] & 0x7f;
44467 +
44468 + if( is_brate )
44469 + {
44470 + switch(brate)
44471 + {
44472 + case IEEE80211_CCK_RATE_1MB: *pBrateCfg |= RATE_1M; break;
44473 + case IEEE80211_CCK_RATE_2MB: *pBrateCfg |= RATE_2M; break;
44474 + case IEEE80211_CCK_RATE_5MB: *pBrateCfg |= RATE_5_5M;break;
44475 + case IEEE80211_CCK_RATE_11MB: *pBrateCfg |= RATE_11M; break;
44476 + case IEEE80211_OFDM_RATE_6MB: *pBrateCfg |= RATE_6M; break;
44477 + case IEEE80211_OFDM_RATE_9MB: *pBrateCfg |= RATE_9M; break;
44478 + case IEEE80211_OFDM_RATE_12MB: *pBrateCfg |= RATE_12M; break;
44479 + case IEEE80211_OFDM_RATE_18MB: *pBrateCfg |= RATE_18M; break;
44480 + case IEEE80211_OFDM_RATE_24MB: *pBrateCfg |= RATE_24M; break;
44481 + case IEEE80211_OFDM_RATE_36MB: *pBrateCfg |= RATE_36M; break;
44482 + case IEEE80211_OFDM_RATE_48MB: *pBrateCfg |= RATE_48M; break;
44483 + case IEEE80211_OFDM_RATE_54MB: *pBrateCfg |= RATE_54M; break;
44484 + }
44485 + }
44486 + }
44487 +}
44488 +
44489 +void hal_init_macaddr(_adapter *adapter)
44490 +{
44491 + rtw_hal_set_hwreg(adapter, HW_VAR_MAC_ADDR, adapter->eeprompriv.mac_addr);
44492 +#ifdef CONFIG_CONCURRENT_MODE
44493 + if (adapter->pbuddy_adapter)
44494 + rtw_hal_set_hwreg(adapter->pbuddy_adapter, HW_VAR_MAC_ADDR, adapter->pbuddy_adapter->eeprompriv.mac_addr);
44495 +#endif
44496 +}
44497 +
44498 +/*
44499 +* C2H event format:
44500 +* Field TRIGGER CONTENT CMD_SEQ CMD_LEN CMD_ID
44501 +* BITS [127:120] [119:16] [15:8] [7:4] [3:0]
44502 +*/
44503 +
44504 +void c2h_evt_clear(_adapter *adapter)
44505 +{
44506 + rtw_write8(adapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE);
44507 +}
44508 +
44509 +s32 c2h_evt_read(_adapter *adapter, u8 *buf)
44510 +{
44511 + s32 ret = _FAIL;
44512 + struct c2h_evt_hdr *c2h_evt;
44513 + int i;
44514 + u8 trigger;
44515 +
44516 + if (buf == NULL)
44517 + goto exit;
44518 +
44519 + trigger = rtw_read8(adapter, REG_C2HEVT_CLEAR);
44520 +
44521 + if (trigger == C2H_EVT_HOST_CLOSE) {
44522 + goto exit; /* Not ready */
44523 + } else if (trigger != C2H_EVT_FW_CLOSE) {
44524 + goto clear_evt; /* Not a valid value */
44525 + }
44526 +
44527 + c2h_evt = (struct c2h_evt_hdr *)buf;
44528 +
44529 + _rtw_memset(c2h_evt, 0, 16);
44530 +
44531 + *buf = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL);
44532 + *(buf+1) = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + 1);
44533 +
44534 + RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, "c2h_evt_read(): ",
44535 + &c2h_evt , sizeof(c2h_evt));
44536 +
44537 + if (0) {
44538 + DBG_871X("%s id:%u, len:%u, seq:%u, trigger:0x%02x\n", __func__
44539 + , c2h_evt->id, c2h_evt->plen, c2h_evt->seq, trigger);
44540 + }
44541 +
44542 + /* Read the content */
44543 + for (i = 0; i < c2h_evt->plen; i++)
44544 + c2h_evt->payload[i] = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + sizeof(*c2h_evt) + i);
44545 +
44546 + RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, "c2h_evt_read(): Command Content:\n",
44547 + c2h_evt->payload, c2h_evt->plen);
44548 +
44549 + ret = _SUCCESS;
44550 +
44551 +clear_evt:
44552 + /*
44553 + * Clear event to notify FW we have read the command.
44554 + * If this field isn't clear, the FW won't update the next command message.
44555 + */
44556 + c2h_evt_clear(adapter);
44557 +exit:
44558 + return ret;
44559 +}
44560 +
44561 diff --git a/drivers/net/wireless/rtl8192cu/hal/hal_init.c b/drivers/net/wireless/rtl8192cu/hal/hal_init.c
44562 deleted file mode 100644
44563 index edef678..0000000
44564 --- a/drivers/net/wireless/rtl8192cu/hal/hal_init.c
44565 +++ /dev/null
44566 @@ -1,120 +0,0 @@
44567 -/******************************************************************************
44568 - *
44569 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
44570 - *
44571 - * This program is free software; you can redistribute it and/or modify it
44572 - * under the terms of version 2 of the GNU General Public License as
44573 - * published by the Free Software Foundation.
44574 - *
44575 - * This program is distributed in the hope that it will be useful, but WITHOUT
44576 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
44577 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
44578 - * more details.
44579 - *
44580 - * You should have received a copy of the GNU General Public License along with
44581 - * this program; if not, write to the Free Software Foundation, Inc.,
44582 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
44583 - *
44584 - *
44585 - ******************************************************************************/
44586 -
44587 -#define _HAL_INIT_C_
44588 -#include <drv_conf.h>
44589 -#include <osdep_service.h>
44590 -#include <drv_types.h>
44591 -#include <rtw_byteorder.h>
44592 -
44593 -#include <hal_init.h>
44594 -
44595 -#ifdef CONFIG_SDIO_HCI
44596 - #include <sdio_hal.h>
44597 -#elif defined(CONFIG_USB_HCI)
44598 - #include <usb_hal.h>
44599 -#endif
44600 -
44601 -void intf_chip_configure(_adapter *padapter)
44602 -{
44603 - if(padapter->HalFunc.intf_chip_configure)
44604 - padapter->HalFunc.intf_chip_configure(padapter);
44605 -}
44606 -
44607 -void intf_read_chip_info(_adapter *padapter)
44608 -{
44609 - if(padapter->HalFunc.read_adapter_info)
44610 - padapter->HalFunc.read_adapter_info(padapter);
44611 -}
44612 -
44613 -void intf_read_chip_version(_adapter *padapter)
44614 -{
44615 - if(padapter->HalFunc.read_chip_version)
44616 - padapter->HalFunc.read_chip_version(padapter);
44617 -}
44618 -
44619 -void rtw_dm_init(_adapter *padapter)
44620 -{
44621 - if(padapter->HalFunc.dm_init)
44622 - padapter->HalFunc.dm_init(padapter);
44623 -}
44624 -
44625 -void rtw_sw_led_init(_adapter *padapter)
44626 -{
44627 - if(padapter->HalFunc.InitSwLeds)
44628 - padapter->HalFunc.InitSwLeds(padapter);
44629 -}
44630 -
44631 -void rtw_sw_led_deinit(_adapter *padapter)
44632 -{
44633 - if(padapter->HalFunc.DeInitSwLeds)
44634 - padapter->HalFunc.DeInitSwLeds(padapter);
44635 -}
44636 -
44637 -uint rtw_hal_init(_adapter *padapter)
44638 -{
44639 - uint status = _SUCCESS;
44640 -
44641 - padapter->hw_init_completed=_FALSE;
44642 -
44643 - status = padapter->HalFunc.hal_init(padapter);
44644 -
44645 - if(status == _SUCCESS){
44646 - padapter->hw_init_completed = _TRUE;
44647 - }
44648 - else{
44649 - padapter->hw_init_completed = _FALSE;
44650 - RT_TRACE(_module_hal_init_c_,_drv_err_,("rtw_hal_init: hal__init fail\n"));
44651 - }
44652 -
44653 - RT_TRACE(_module_hal_init_c_,_drv_err_,("-rtl871x_hal_init:status=0x%x\n",status));
44654 -
44655 - return status;
44656 -
44657 -}
44658 -
44659 -uint rtw_hal_deinit(_adapter *padapter)
44660 -{
44661 - uint status = _SUCCESS;
44662 -
44663 -_func_enter_;
44664 -
44665 - status = padapter->HalFunc.hal_deinit(padapter);
44666 -
44667 - if(status == _SUCCESS){
44668 - padapter->hw_init_completed = _FALSE;
44669 - }
44670 - else
44671 - {
44672 - RT_TRACE(_module_hal_init_c_,_drv_err_,("\n rtw_hal_deinit: hal_init fail\n"));
44673 - }
44674 -
44675 -_func_exit_;
44676 -
44677 - return status;
44678 -
44679 -}
44680 -#ifdef DBG_CONFIG_ERROR_DETECT
44681 -void rtw_sreset_init(_adapter *padapter)
44682 -{
44683 - if(padapter->HalFunc.sreset_init_value)
44684 - padapter->HalFunc.sreset_init_value(padapter);
44685 -}
44686 -#endif
44687 diff --git a/drivers/net/wireless/rtl8192cu/hal/hal_intf.c b/drivers/net/wireless/rtl8192cu/hal/hal_intf.c
44688 new file mode 100644
44689 index 0000000..6c56e72
44690 --- /dev/null
44691 +++ b/drivers/net/wireless/rtl8192cu/hal/hal_intf.c
44692 @@ -0,0 +1,546 @@
44693 +/******************************************************************************
44694 + *
44695 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
44696 + *
44697 + * This program is free software; you can redistribute it and/or modify it
44698 + * under the terms of version 2 of the GNU General Public License as
44699 + * published by the Free Software Foundation.
44700 + *
44701 + * This program is distributed in the hope that it will be useful, but WITHOUT
44702 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
44703 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
44704 + * more details.
44705 + *
44706 + * You should have received a copy of the GNU General Public License along with
44707 + * this program; if not, write to the Free Software Foundation, Inc.,
44708 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
44709 + *
44710 + *
44711 + ******************************************************************************/
44712 +
44713 +#define _HAL_INTF_C_
44714 +#include <drv_conf.h>
44715 +#include <osdep_service.h>
44716 +#include <drv_types.h>
44717 +#include <rtw_byteorder.h>
44718 +
44719 +#include <hal_intf.h>
44720 +
44721 +#ifdef CONFIG_SDIO_HCI
44722 + #include <sdio_hal.h>
44723 +#elif defined(CONFIG_USB_HCI)
44724 + #include <usb_hal.h>
44725 +#elif defined(CONFIG_GSPI_HCI)
44726 + #include <gspi_hal.h>
44727 +#endif
44728 +
44729 +void rtw_hal_chip_configure(_adapter *padapter)
44730 +{
44731 + if(padapter->HalFunc.intf_chip_configure)
44732 + padapter->HalFunc.intf_chip_configure(padapter);
44733 +}
44734 +
44735 +void rtw_hal_read_chip_info(_adapter *padapter)
44736 +{
44737 + if(padapter->HalFunc.read_adapter_info)
44738 + padapter->HalFunc.read_adapter_info(padapter);
44739 +}
44740 +
44741 +void rtw_hal_read_chip_version(_adapter *padapter)
44742 +{
44743 + if(padapter->HalFunc.read_chip_version)
44744 + padapter->HalFunc.read_chip_version(padapter);
44745 +}
44746 +
44747 +void rtw_hal_def_value_init(_adapter *padapter)
44748 +{
44749 + if(padapter->HalFunc.init_default_value)
44750 + padapter->HalFunc.init_default_value(padapter);
44751 +}
44752 +
44753 +void rtw_hal_free_data(_adapter *padapter)
44754 +{
44755 + if(padapter->HalFunc.free_hal_data)
44756 + padapter->HalFunc.free_hal_data(padapter);
44757 +}
44758 +
44759 +void rtw_hal_dm_init(_adapter *padapter)
44760 +{
44761 + if(padapter->HalFunc.dm_init)
44762 + padapter->HalFunc.dm_init(padapter);
44763 +}
44764 +
44765 +void rtw_hal_dm_deinit(_adapter *padapter)
44766 +{
44767 + // cancel dm timer
44768 + if(padapter->HalFunc.dm_deinit)
44769 + padapter->HalFunc.dm_deinit(padapter);
44770 +}
44771 +
44772 +void rtw_hal_sw_led_init(_adapter *padapter)
44773 +{
44774 + if(padapter->HalFunc.InitSwLeds)
44775 + padapter->HalFunc.InitSwLeds(padapter);
44776 +}
44777 +
44778 +void rtw_hal_sw_led_deinit(_adapter *padapter)
44779 +{
44780 + if(padapter->HalFunc.DeInitSwLeds)
44781 + padapter->HalFunc.DeInitSwLeds(padapter);
44782 +}
44783 +
44784 +uint rtw_hal_init(_adapter *padapter)
44785 +{
44786 + uint status = _SUCCESS;
44787 +
44788 + if(padapter->hw_init_completed == _TRUE)
44789 + {
44790 + DBG_871X("rtw_hal_init: hw_init_completed == _TRUE\n");
44791 + goto success;
44792 + }
44793 +#ifdef CONFIG_DEINIT_BEFORE_INIT
44794 + status = padapter->HalFunc.hal_deinit(padapter);
44795 + if(status != _SUCCESS){
44796 + DBG_871X("rtw_hal_init: hal_deinit before hal_init FAIL !!\n");
44797 + goto fail;
44798 + }
44799 +#endif
44800 +
44801 +#ifdef CONFIG_DUALMAC_CONCURRENT
44802 + // before init mac0, driver must init mac1 first to avoid usb rx error.
44803 + if((padapter->pbuddy_adapter != NULL) && (padapter->DualMacConcurrent == _TRUE)
44804 + && (padapter->adapter_type == PRIMARY_ADAPTER))
44805 + {
44806 + if(padapter->pbuddy_adapter->hw_init_completed == _TRUE)
44807 + {
44808 + DBG_871X("rtw_hal_init: pbuddy_adapter hw_init_completed == _TRUE\n");
44809 + }
44810 + else
44811 + {
44812 +#ifdef CONFIG_DEINIT_BEFORE_INIT
44813 + status = padapter->HalFunc.hal_deinit(padapter->pbuddy_adapter);
44814 + if(status != _SUCCESS){
44815 + DBG_871X("rtw_hal_init: hal_deinit before hal_init FAIL !!(pbuddy_adapter)\n");
44816 + goto fail;
44817 + }
44818 +#endif
44819 + status = padapter->HalFunc.hal_init(padapter->pbuddy_adapter);
44820 + if(status == _SUCCESS){
44821 + padapter->pbuddy_adapter->hw_init_completed = _TRUE;
44822 + }
44823 + else{
44824 + padapter->pbuddy_adapter->hw_init_completed = _FALSE;
44825 + RT_TRACE(_module_hal_init_c_,_drv_err_,("rtw_hal_init: hal__init fail(pbuddy_adapter)\n"));
44826 + goto fail;
44827 + }
44828 + }
44829 + }
44830 +#else
44831 + if(adapter_to_dvobj(padapter)->DualMacMode == _TRUE)
44832 + {
44833 + if(padapter->pbuddy_adapter != NULL) {
44834 + if(padapter->pbuddy_adapter->hw_init_completed == _FALSE)
44835 + {
44836 +#ifdef CONFIG_DEINIT_BEFORE_INIT
44837 + status = padapter->HalFunc.hal_deinit(padapter->pbuddy_adapter);
44838 + if(status != _SUCCESS){
44839 + DBG_871X("rtw_hal_init: hal_deinit before hal_init FAIL !!(pbuddy_adapter)\n");
44840 + goto fail;
44841 + }
44842 +#endif
44843 + status = padapter->HalFunc.hal_init(padapter->pbuddy_adapter);
44844 + if(status == _SUCCESS){
44845 + padapter->pbuddy_adapter->hw_init_completed = _TRUE;
44846 + }
44847 + else{
44848 + padapter->pbuddy_adapter->hw_init_completed = _FALSE;
44849 + RT_TRACE(_module_hal_init_c_,_drv_err_,("rtw_hal_init: hal__init fail for another interface\n"));
44850 + }
44851 + }
44852 + }
44853 + }
44854 +#endif
44855 +
44856 + padapter->hw_init_completed=_FALSE;
44857 +
44858 + status = padapter->HalFunc.hal_init(padapter);
44859 +
44860 + if(status == _SUCCESS){
44861 + padapter->hw_init_completed = _TRUE;
44862 + }
44863 + else{
44864 + padapter->hw_init_completed = _FALSE;
44865 + RT_TRACE(_module_hal_init_c_,_drv_err_,("rtw_hal_init: hal__init fail\n"));
44866 + goto fail;
44867 + }
44868 +
44869 +success:
44870 +
44871 + if (padapter->registrypriv.notch_filter == 1)
44872 + rtw_hal_notch_filter(padapter, 1);
44873 +
44874 + rtw_hal_reset_security_engine(padapter);
44875 +
44876 + rtw_sec_restore_wep_key(padapter);
44877 +
44878 + init_hw_mlme_ext(padapter);
44879 +
44880 +fail:
44881 +
44882 + RT_TRACE(_module_hal_init_c_,_drv_err_,("-rtl871x_hal_init:status=0x%x\n",status));
44883 +
44884 + return status;
44885 +}
44886 +
44887 +uint rtw_hal_deinit(_adapter *padapter)
44888 +{
44889 + uint status = _SUCCESS;
44890 +
44891 +_func_enter_;
44892 +
44893 + status = padapter->HalFunc.hal_deinit(padapter);
44894 +
44895 + if(status == _SUCCESS){
44896 + padapter->hw_init_completed = _FALSE;
44897 + }
44898 + else
44899 + {
44900 + RT_TRACE(_module_hal_init_c_,_drv_err_,("\n rtw_hal_deinit: hal_init fail\n"));
44901 + }
44902 +
44903 +_func_exit_;
44904 +
44905 + return status;
44906 +}
44907 +
44908 +void rtw_hal_set_hwreg(_adapter *padapter, u8 variable, u8 *val)
44909 +{
44910 + if (padapter->HalFunc.SetHwRegHandler)
44911 + padapter->HalFunc.SetHwRegHandler(padapter, variable, val);
44912 +}
44913 +
44914 +void rtw_hal_get_hwreg(_adapter *padapter, u8 variable, u8 *val)
44915 +{
44916 + if (padapter->HalFunc.GetHwRegHandler)
44917 + padapter->HalFunc.GetHwRegHandler(padapter, variable, val);
44918 +}
44919 +
44920 +u8 rtw_hal_set_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue)
44921 +{
44922 + if(padapter->HalFunc.SetHalDefVarHandler)
44923 + return padapter->HalFunc.SetHalDefVarHandler(padapter,eVariable,pValue);
44924 + return _FAIL;
44925 +}
44926 +
44927 +u8 rtw_hal_get_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue)
44928 +{
44929 + if(padapter->HalFunc.GetHalDefVarHandler)
44930 + return padapter->HalFunc.GetHalDefVarHandler(padapter,eVariable,pValue);
44931 + return _FAIL;
44932 +}
44933 +
44934 +void rtw_hal_enable_interrupt(_adapter *padapter)
44935 +{
44936 + if (padapter->HalFunc.enable_interrupt)
44937 + padapter->HalFunc.enable_interrupt(padapter);
44938 + else
44939 + DBG_871X("%s: HalFunc.enable_interrupt is NULL!\n", __FUNCTION__);
44940 +
44941 +}
44942 +void rtw_hal_disable_interrupt(_adapter *padapter)
44943 +{
44944 + if (padapter->HalFunc.disable_interrupt)
44945 + padapter->HalFunc.disable_interrupt(padapter);
44946 + else
44947 + DBG_871X("%s: HalFunc.disable_interrupt is NULL!\n", __FUNCTION__);
44948 +
44949 +}
44950 +
44951 +u32 rtw_hal_inirp_init(_adapter *padapter)
44952 +{
44953 + u32 rst = _FAIL;
44954 + if(padapter->HalFunc.inirp_init)
44955 + rst = padapter->HalFunc.inirp_init(padapter);
44956 + else
44957 + DBG_871X(" %s HalFunc.inirp_init is NULL!!!\n",__FUNCTION__);
44958 + return rst;
44959 +}
44960 +
44961 +u32 rtw_hal_inirp_deinit(_adapter *padapter)
44962 +{
44963 +
44964 + if(padapter->HalFunc.inirp_deinit)
44965 + return padapter->HalFunc.inirp_deinit(padapter);
44966 +
44967 + return _FAIL;
44968 +
44969 +}
44970 +
44971 +u8 rtw_hal_intf_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val)
44972 +{
44973 + if(padapter->HalFunc.interface_ps_func)
44974 + return padapter->HalFunc.interface_ps_func(padapter,efunc_id,val);
44975 + return _FAIL;
44976 +}
44977 +
44978 +s32 rtw_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe)
44979 +{
44980 + if(padapter->HalFunc.hal_xmitframe_enqueue)
44981 + return padapter->HalFunc.hal_xmitframe_enqueue(padapter, pxmitframe);
44982 +
44983 + return _FALSE;
44984 +}
44985 +
44986 +s32 rtw_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe)
44987 +{
44988 + if(padapter->HalFunc.hal_xmit)
44989 + return padapter->HalFunc.hal_xmit(padapter, pxmitframe);
44990 +
44991 + return _FALSE;
44992 +}
44993 +
44994 +s32 rtw_hal_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe)
44995 +{
44996 + s32 ret = _FAIL;
44997 + unsigned char *pframe;
44998 + struct rtw_ieee80211_hdr *pwlanhdr;
44999 +
45000 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
45001 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
45002 + _rtw_memcpy(pmgntframe->attrib.ra, pwlanhdr->addr1, ETH_ALEN);
45003 +
45004 +#ifdef CONFIG_IEEE80211W
45005 + if(padapter->securitypriv.binstallBIPkey == _TRUE)
45006 + {
45007 + if(IS_MCAST(pmgntframe->attrib.ra))
45008 + {
45009 + pmgntframe->attrib.encrypt = _BIP_;
45010 + //pmgntframe->attrib.bswenc = _TRUE;
45011 + }
45012 + else
45013 + {
45014 + pmgntframe->attrib.encrypt = _AES_;
45015 + pmgntframe->attrib.bswenc = _TRUE;
45016 + }
45017 + rtw_mgmt_xmitframe_coalesce(padapter, pmgntframe->pkt, pmgntframe);
45018 + }
45019 +#endif //CONFIG_IEEE80211W
45020 +
45021 + if(padapter->HalFunc.mgnt_xmit)
45022 + ret = padapter->HalFunc.mgnt_xmit(padapter, pmgntframe);
45023 + return ret;
45024 +}
45025 +
45026 +s32 rtw_hal_init_xmit_priv(_adapter *padapter)
45027 +{
45028 + if(padapter->HalFunc.init_xmit_priv != NULL)
45029 + return padapter->HalFunc.init_xmit_priv(padapter);
45030 + return _FAIL;
45031 +}
45032 +
45033 +void rtw_hal_free_xmit_priv(_adapter *padapter)
45034 +{
45035 + if(padapter->HalFunc.free_xmit_priv != NULL)
45036 + padapter->HalFunc.free_xmit_priv(padapter);
45037 +}
45038 +
45039 +s32 rtw_hal_init_recv_priv(_adapter *padapter)
45040 +{
45041 + if(padapter->HalFunc.init_recv_priv)
45042 + return padapter->HalFunc.init_recv_priv(padapter);
45043 +
45044 + return _FAIL;
45045 +}
45046 +
45047 +void rtw_hal_free_recv_priv(_adapter *padapter)
45048 +{
45049 + if(padapter->HalFunc.free_recv_priv)
45050 + padapter->HalFunc.free_recv_priv(padapter);
45051 +}
45052 +
45053 +void rtw_hal_update_ra_mask(_adapter *padapter, u32 mac_id)
45054 +{
45055 + if(padapter->HalFunc.UpdateRAMaskHandler)
45056 + padapter->HalFunc.UpdateRAMaskHandler(padapter,mac_id);
45057 +}
45058 +
45059 +void rtw_hal_add_ra_tid(_adapter *padapter, u32 bitmap, u8 arg)
45060 +{
45061 + if(padapter->HalFunc.Add_RateATid)
45062 + padapter->HalFunc.Add_RateATid(padapter, bitmap, arg);
45063 +}
45064 +
45065 +u32 rtw_hal_read_bbreg(_adapter *padapter, u32 RegAddr, u32 BitMask)
45066 +{
45067 + u32 data = 0;
45068 + if (padapter->HalFunc.read_bbreg)
45069 + data = padapter->HalFunc.read_bbreg(padapter, RegAddr, BitMask);
45070 + return data;
45071 +}
45072 +
45073 +void rtw_hal_write_bbreg(_adapter *padapter, u32 RegAddr, u32 BitMask, u32 Data)
45074 +{
45075 + if (padapter->HalFunc.write_bbreg)
45076 + padapter->HalFunc.write_bbreg(padapter, RegAddr, BitMask, Data);
45077 +}
45078 +
45079 +u32 rtw_hal_read_rfreg(_adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask)
45080 +{
45081 + u32 data = 0;
45082 + if (padapter->HalFunc.read_rfreg)
45083 + data = padapter->HalFunc.read_rfreg(padapter, eRFPath, RegAddr, BitMask);
45084 + return data;
45085 +}
45086 +
45087 +void rtw_hal_write_rfreg(_adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask, u32 Data)
45088 +{
45089 + if (padapter->HalFunc.write_rfreg)
45090 + padapter->HalFunc.write_rfreg(padapter, eRFPath, RegAddr, BitMask, Data);
45091 +}
45092 +
45093 +s32 rtw_hal_interrupt_handler(_adapter *padapter)
45094 +{
45095 + if(padapter->HalFunc.interrupt_handler)
45096 + return padapter->HalFunc.interrupt_handler(padapter);
45097 + return _FAIL;
45098 +}
45099 +
45100 +void rtw_hal_set_bwmode(_adapter *padapter, HT_CHANNEL_WIDTH Bandwidth, u8 Offset)
45101 +{
45102 + if(padapter->HalFunc.set_bwmode_handler)
45103 + padapter->HalFunc.set_bwmode_handler(padapter, Bandwidth, Offset);
45104 +}
45105 +
45106 +void rtw_hal_set_chan(_adapter *padapter, u8 channel)
45107 +{
45108 + if(padapter->HalFunc.set_channel_handler)
45109 + padapter->HalFunc.set_channel_handler(padapter, channel);
45110 +}
45111 +
45112 +void rtw_hal_dm_watchdog(_adapter *padapter)
45113 +{
45114 + if(padapter->HalFunc.hal_dm_watchdog)
45115 + padapter->HalFunc.hal_dm_watchdog(padapter);
45116 +}
45117 +
45118 +void rtw_hal_bcn_related_reg_setting(_adapter *padapter)
45119 +{
45120 + if(padapter->HalFunc.SetBeaconRelatedRegistersHandler)
45121 + padapter->HalFunc.SetBeaconRelatedRegistersHandler(padapter);
45122 +}
45123 +
45124 +#ifdef CONFIG_ANTENNA_DIVERSITY
45125 +u8 rtw_hal_antdiv_before_linked(_adapter *padapter)
45126 +{
45127 + if (padapter->HalFunc.AntDivBeforeLinkHandler)
45128 + return padapter->HalFunc.AntDivBeforeLinkHandler(padapter);
45129 + return _FALSE;
45130 +}
45131 +
45132 +void rtw_hal_antdiv_rssi_compared(_adapter *padapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src)
45133 +{
45134 + if (padapter->HalFunc.AntDivCompareHandler)
45135 + padapter->HalFunc.AntDivCompareHandler(padapter, dst, src);
45136 +}
45137 +#endif
45138 +
45139 +#ifdef CONFIG_HOSTAPD_MLME
45140 +s32 rtw_hal_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt)
45141 +{
45142 + if (padapter->HalFunc.hostap_mgnt_xmit_entry)
45143 + return padapter->HalFunc.hostap_mgnt_xmit_entry(padapter, pkt);
45144 + return _FAIL;
45145 +}
45146 +#endif //CONFIG_HOSTAPD_MLME
45147 +
45148 +#ifdef DBG_CONFIG_ERROR_DETECT
45149 +void rtw_hal_sreset_init(_adapter *padapter)
45150 +{
45151 + if(padapter->HalFunc.sreset_init_value)
45152 + padapter->HalFunc.sreset_init_value(padapter);
45153 +}
45154 +
45155 +void rtw_hal_sreset_reset(_adapter *padapter)
45156 +{
45157 + padapter = GET_PRIMARY_ADAPTER(padapter);
45158 +
45159 + if(padapter->HalFunc.silentreset)
45160 + padapter->HalFunc.silentreset(padapter);
45161 +}
45162 +
45163 +void rtw_hal_sreset_reset_value(_adapter *padapter)
45164 +{
45165 + if(padapter->HalFunc.sreset_reset_value)
45166 + padapter->HalFunc.sreset_reset_value(padapter);
45167 +}
45168 +
45169 +void rtw_hal_sreset_xmit_status_check(_adapter *padapter)
45170 +{
45171 +#ifdef CONFIG_CONCURRENT_MODE
45172 + if (padapter->adapter_type != PRIMARY_ADAPTER)
45173 + return;
45174 +#endif
45175 + if(padapter->HalFunc.sreset_xmit_status_check)
45176 + padapter->HalFunc.sreset_xmit_status_check(padapter);
45177 +}
45178 +
45179 +void rtw_hal_sreset_linked_status_check(_adapter *padapter)
45180 +{
45181 + if(padapter->HalFunc.sreset_linked_status_check)
45182 + padapter->HalFunc.sreset_linked_status_check(padapter);
45183 +}
45184 +
45185 +u8 rtw_hal_sreset_get_wifi_status(_adapter *padapter)
45186 +{
45187 + u8 status = 0;
45188 + if(padapter->HalFunc.sreset_get_wifi_status)
45189 + status = padapter->HalFunc.sreset_get_wifi_status(padapter);
45190 + return status;
45191 +}
45192 +
45193 +bool rtw_hal_sreset_inprogress(_adapter *padapter)
45194 +{
45195 + bool inprogress = _FALSE;
45196 +
45197 + padapter = GET_PRIMARY_ADAPTER(padapter);
45198 +
45199 + if(padapter->HalFunc.sreset_inprogress)
45200 + inprogress = padapter->HalFunc.sreset_inprogress(padapter);
45201 + return inprogress;
45202 +}
45203 +#endif //DBG_CONFIG_ERROR_DETECT
45204 +
45205 +#ifdef CONFIG_IOL
45206 +int rtw_hal_iol_cmd(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms)
45207 +{
45208 + if (adapter->HalFunc.IOL_exec_cmds_sync)
45209 + return adapter->HalFunc.IOL_exec_cmds_sync(adapter, xmit_frame, max_wating_ms);
45210 + return _FAIL;
45211 +}
45212 +#endif
45213 +
45214 +void rtw_hal_notch_filter(_adapter *adapter, bool enable)
45215 +{
45216 + if(adapter->HalFunc.hal_notch_filter)
45217 + adapter->HalFunc.hal_notch_filter(adapter,enable);
45218 +}
45219 +
45220 +void rtw_hal_reset_security_engine(_adapter * adapter)
45221 +{
45222 + if(adapter->HalFunc.hal_reset_security_engine)
45223 + adapter->HalFunc.hal_reset_security_engine(adapter);
45224 +}
45225 +
45226 +s32 rtw_hal_c2h_handler(_adapter *adapter, struct c2h_evt_hdr *c2h_evt)
45227 +{
45228 + s32 ret = _FAIL;
45229 + if (adapter->HalFunc.c2h_handler)
45230 + ret = adapter->HalFunc.c2h_handler(adapter, c2h_evt);
45231 + return ret;
45232 +}
45233 +
45234 +c2h_id_filter rtw_hal_c2h_id_filter_ccx(_adapter *adapter)
45235 +{
45236 + return adapter->HalFunc.c2h_id_filter_ccx;
45237 +}
45238 +
45239 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c
45240 index 971ef6c..33921e2 100644
45241 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c
45242 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c
45243 @@ -16,8 +16,7 @@
45244 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
45245 *
45246 *
45247 -
45248 -******************************************************************************/
45249 + ******************************************************************************/
45250 #define _RTL8192C_CMD_C_
45251
45252 #include <drv_conf.h>
45253 @@ -33,67 +32,12 @@
45254 #include <rtl8192c_hal.h>
45255
45256
45257 -#if 0
45258 -static BOOLEAN
45259 -CheckWriteMSG(
45260 - IN PADAPTER Adapter,
45261 - IN u8 BoxNum
45262 -)
45263 -{
45264 - u8 valHMETFR;
45265 - BOOLEAN Result = _FALSE;
45266 -
45267 - valHMETFR = rtw_read8(Adapter, REG_HMETFR);
45268 -
45269 - //DbgPrint("CheckWriteH2C(): Reg[0x%2x] = %x\n",REG_HMETFR, valHMETFR);
45270 -
45271 - if(((valHMETFR>>BoxNum)&BIT0) == 1)
45272 - Result = _TRUE;
45273 -
45274 - return Result;
45275 -
45276 -}
45277 -
45278 -static BOOLEAN CheckFwReadLastMSG(
45279 - IN PADAPTER Adapter,
45280 - IN u8 BoxNum
45281 -)
45282 -{
45283 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
45284 - u8 valHMETFR, valMCUTST_1;
45285 - BOOLEAN Result = _FALSE;
45286 -
45287 - valHMETFR = rtw_read8(Adapter, REG_HMETFR);
45288 - valMCUTST_1 = rtw_read8(Adapter, (REG_MCUTST_1+BoxNum));
45289 -
45290 - //DbgPrint("REG[%x] = %x, REG[%x] = %x\n",
45291 - // REG_HMETFR, valHMETFR, REG_MCUTST_1+BoxNum, valMCUTST_1 );
45292 -
45293 - // Do not seperate to 91C and 88C, we use the same setting. Suggested by SD4 Filen. 2009.12.03.
45294 - if(IS_NORMAL_CHIP(pHalData->VersionID))
45295 - {
45296 - if(((valHMETFR>>BoxNum)&BIT0) == 0)
45297 - Result = _TRUE;
45298 - }
45299 - else
45300 - {
45301 - if((((valHMETFR>>BoxNum)&BIT0) == 0) && (valMCUTST_1 == 0))
45302 - {
45303 - Result = _TRUE;
45304 - }
45305 - }
45306 -
45307 - return Result;
45308 -}
45309 -#endif
45310 -
45311 -
45312 #define RTL92C_MAX_H2C_BOX_NUMS 4
45313 #define RTL92C_MAX_CMD_LEN 5
45314 #define MESSAGE_BOX_SIZE 4
45315 #define EX_MESSAGE_BOX_SIZE 2
45316
45317 -static u8 _is_fw_read_cmd_down(_adapter* padapter, u8 isvern, u8 msgbox_num)
45318 +static u8 _is_fw_read_cmd_down(_adapter* padapter, u8 msgbox_num)
45319 {
45320 u8 read_down = _FALSE;
45321 int retry_cnts = 100;
45322 @@ -103,17 +47,10 @@ static u8 _is_fw_read_cmd_down(_adapter* padapter, u8 isvern, u8 msgbox_num)
45323 // 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);
45324
45325 do{
45326 - valid = rtw_read8(padapter,REG_HMETFR) & BIT(msgbox_num);
45327 - if(isvern){
45328 - if(0 == valid ){
45329 - read_down = _TRUE;
45330 - }
45331 - }
45332 - else{
45333 - if((0 == valid) && (0 == rtw_read8(padapter, REG_MCUTST_1+msgbox_num))){
45334 - read_down = _TRUE;
45335 - }
45336 - }
45337 + valid = rtw_read8(padapter,REG_HMETFR) & BIT(msgbox_num);
45338 + if(0 == valid ){
45339 + read_down = _TRUE;
45340 + }
45341 }while( (!read_down) && (retry_cnts--));
45342
45343 return read_down;
45344 @@ -129,19 +66,28 @@ static u8 _is_fw_read_cmd_down(_adapter* padapter, u8 isvern, u8 msgbox_num)
45345 ******************************************/
45346 int rtl8192c_FillH2CCmd(_adapter* padapter, u8 ElementID, u32 CmdLen, u8* pCmdBuffer)
45347 {
45348 -#if 1
45349 u8 bcmd_down = _FALSE;
45350 int retry_cnts = 100;
45351 u8 h2c_box_num;
45352 u32 msgbox_addr;
45353 u32 msgbox_ex_addr;
45354 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
45355 - u8 isnchip =IS_NORMAL_CHIP(pHalData->VersionID);
45356 u32 h2c_cmd = 0;
45357 u16 h2c_cmd_ex = 0;
45358 int ret = _FAIL;
45359
45360 - _func_enter_;
45361 +_func_enter_;
45362 +
45363 + padapter = GET_PRIMARY_ADAPTER(padapter);
45364 + pHalData = GET_HAL_DATA(padapter);
45365 +
45366 + if(padapter->bFWReady == _FALSE)
45367 + {
45368 + DBG_8192C("FillH2CCmd(): return H2C cmd because fw is not ready\n");
45369 + return ret;
45370 + }
45371 +
45372 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->h2c_fwcmd_mutex), NULL);
45373
45374 if(!pCmdBuffer){
45375 goto exit;
45376 @@ -153,7 +99,7 @@ int rtl8192c_FillH2CCmd(_adapter* padapter, u8 ElementID, u32 CmdLen, u8* pCmdBu
45377 do{
45378 h2c_box_num = pHalData->LastHMEBoxNum;
45379
45380 - if(!_is_fw_read_cmd_down(padapter, isnchip, h2c_box_num)){
45381 + if(!_is_fw_read_cmd_down(padapter, h2c_box_num)){
45382 DBG_8192C(" fw read cmd failed...\n");
45383 goto exit;
45384 }
45385 @@ -179,14 +125,6 @@ int rtl8192c_FillH2CCmd(_adapter* padapter, u8 ElementID, u32 CmdLen, u8* pCmdBu
45386 h2c_cmd = cpu_to_le32( h2c_cmd );
45387 rtw_write32(padapter,msgbox_addr, h2c_cmd);
45388
45389 - if(!isnchip){//for Test chip
45390 - if(! (rtw_read8(padapter, REG_HMETFR) & BIT(h2c_box_num))){
45391 - DBG_8192C("Chip test - check fw write failed, write again..\n");
45392 - continue;
45393 - }
45394 - // Fill H2C protection register.
45395 - rtw_write8(padapter,REG_MCUTST_1+h2c_box_num, 0xFF);
45396 - }
45397 bcmd_down = _TRUE;
45398
45399 // DBG_8192C("MSG_BOX:%d,CmdLen(%d), reg:0x%x =>h2c_cmd:0x%x, reg:0x%x =>h2c_cmd_ex:0x%x ..\n"
45400 @@ -202,178 +140,13 @@ int rtl8192c_FillH2CCmd(_adapter* padapter, u8 ElementID, u32 CmdLen, u8* pCmdBu
45401 DBG_8192C("H2C Cmd exe failed. \n" );
45402 */
45403 ret = _SUCCESS;
45404 - _func_exit_;
45405 -
45406 -#else
45407 - u8 BoxNum;
45408 - u16 BOXReg, BOXExtReg;
45409 - u8 BoxContent[4], BoxExtContent[2];
45410 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
45411 - u8 BufIndex=0;
45412 - u8 bWriteSucess = _FALSE;
45413 - u8 IsFwRead = _FALSE;
45414 - u8 WaitH2cLimmit = 100;
45415 -
45416 - u32 h2c_cmd = 0;
45417 - u16 h2c_cmd_ex = 0;
45418
45419 -_func_enter_;
45420 -
45421 - //DBG_8192C("FillH2CCmd : ElementID=%d \n",ElementID);
45422 -
45423 - while(!bWriteSucess)
45424 - {
45425 - // 2. Find the last BOX number which has been writen.
45426 - BoxNum = pHalData->LastHMEBoxNum;
45427 - switch(BoxNum)
45428 - {
45429 - case 0:
45430 - BOXReg = REG_HMEBOX_0;
45431 - BOXExtReg = REG_HMEBOX_EXT_0;
45432 - break;
45433 - case 1:
45434 - BOXReg = REG_HMEBOX_1;
45435 - BOXExtReg = REG_HMEBOX_EXT_1;
45436 - break;
45437 - case 2:
45438 - BOXReg = REG_HMEBOX_2;
45439 - BOXExtReg = REG_HMEBOX_EXT_2;
45440 - break;
45441 - case 3:
45442 - BOXReg = REG_HMEBOX_3;
45443 - BOXExtReg = REG_HMEBOX_EXT_3;
45444 - break;
45445 - default:
45446 - break;
45447 - }
45448 -
45449 - // 3. Check if the box content is empty.
45450 - IsFwRead = CheckFwReadLastMSG(padapter, BoxNum);
45451 - while(!IsFwRead)
45452 - {
45453 - //wait until Fw read
45454 - WaitH2cLimmit--;
45455 - if(WaitH2cLimmit == 0)
45456 - {
45457 - DBG_8192C("FillH2CCmd92C(): Wating too long for FW read clear HMEBox(%d)!!!\n", BoxNum);
45458 - break;
45459 - }
45460 - rtw_msleep_os(10); //us
45461 - IsFwRead = CheckFwReadLastMSG(padapter, BoxNum);
45462 - //U1btmp = PlatformEFIORead1Byte(Adapter, 0x1BF);
45463 - //RT_TRACE(COMP_CMD, DBG_LOUD, ("FillH2CCmd92C(): Wating for FW read clear HMEBox(%d)!!! 0x1BF = %2x\n", BoxNum, U1btmp));
45464 - }
45465 -
45466 - // If Fw has not read the last H2C cmd, break and give up this H2C.
45467 - if(!IsFwRead)
45468 - {
45469 - DBG_8192C("FillH2CCmd92C(): Write H2C register BOX[%d] fail!!!!! Fw do not read. \n", BoxNum);
45470 - break;
45471 - }
45472 -
45473 - // 4. Fill the H2C cmd into box
45474 - _rtw_memset(BoxContent, 0, sizeof(BoxContent));
45475 - _rtw_memset(BoxExtContent, 0, sizeof(BoxExtContent));
45476 -
45477 - BoxContent[0] = ElementID; // Fill element ID
45478 -
45479 - //DBG_8192C("FillH2CCmd92C():Write ElementID BOXReg(%4x) = %2x \n", BOXReg, ElementID);
45480 -
45481 - switch(CmdLen)
45482 - {
45483 - case 1:
45484 - {
45485 - BoxContent[0] &= ~(BIT7);
45486 - _rtw_memcpy((u8*)(BoxContent)+1, pCmdBuffer+BufIndex, 1);
45487 - rtw_write32(padapter, BOXReg, *((u32*)BoxContent));
45488 - h2c_cmd = *((u32*)BoxContent);
45489 - break;
45490 - }
45491 - case 2:
45492 - {
45493 - BoxContent[0] &= ~(BIT7);
45494 - _rtw_memcpy((u8*)(BoxContent)+1, pCmdBuffer+BufIndex, 2);
45495 - rtw_write32(padapter, BOXReg, *((u32*)BoxContent));
45496 - h2c_cmd = *((u32*)BoxContent);
45497 - break;
45498 - }
45499 - case 3:
45500 - {
45501 - BoxContent[0] &= ~(BIT7);
45502 - _rtw_memcpy((u8*)(BoxContent)+1, pCmdBuffer+BufIndex, 3);
45503 - rtw_write32(padapter, BOXReg, *((u32*)BoxContent));
45504 - h2c_cmd = *((u32*)BoxContent);
45505 - break;
45506 - }
45507 - case 4:
45508 - {
45509 - BoxContent[0] |= (BIT7);
45510 - _rtw_memcpy((u8*)(BoxExtContent), pCmdBuffer+BufIndex, 2);
45511 - _rtw_memcpy((u8*)(BoxContent)+1, pCmdBuffer+BufIndex+2, 2);
45512 - rtw_write16(padapter, BOXExtReg, *((u16*)BoxExtContent));
45513 - rtw_write32(padapter, BOXReg, *((u32*)BoxContent));
45514 - h2c_cmd = *((u32*)BoxContent);
45515 - h2c_cmd_ex = *((u32*)BoxExtContent);
45516 - break;
45517 - }
45518 - case 5:
45519 - {
45520 - BoxContent[0] |= (BIT7);
45521 - _rtw_memcpy((u8*)(BoxExtContent), pCmdBuffer+BufIndex, 2);
45522 - _rtw_memcpy((u8*)(BoxContent)+1, pCmdBuffer+BufIndex+2, 3);
45523 - rtw_write16(padapter, BOXExtReg, *((u16*)BoxExtContent));
45524 - rtw_write32(padapter, BOXReg, *((u32*)BoxContent));
45525 - h2c_cmd = *((u32*)BoxContent);
45526 - h2c_cmd_ex = *((u32*)BoxExtContent);
45527 - break;
45528 - }
45529 - default:
45530 - break;
45531 -
45532 - }
45533 -
45534 -
45535 - DBG_8192C("MSG_BOX:%d,CmdLen(%d), reg:0x%x =>h2c_cmd:0x%x, reg:0x%x =>h2c_cmd_ex:0x%x ..\n"
45536 - ,pHalData->LastHMEBoxNum ,CmdLen,BOXReg,h2c_cmd,BOXExtReg,h2c_cmd_ex);
45537 -
45538 - //DBG_8192C("FillH2CCmd(): BoxExtContent=0x%x\n", *(u16*)BoxExtContent);
45539 - //DBG_8192C("FillH2CCmd(): BoxContent=0x%x\n", *(u32*)BoxContent);
45540 -
45541 - if(IS_NORMAL_CHIP(pHalData->VersionID))
45542 - {
45543 - // 5. Normal chip does not need to check if the H2C cmd has be written successfully.
45544 - bWriteSucess = _TRUE;
45545 - }
45546 - else
45547 - {
45548 - // 5. Check if the H2C cmd has be written successfully.
45549 - bWriteSucess = CheckWriteMSG(padapter, BoxNum);
45550 - if(!bWriteSucess) //If not then write again.
45551 - continue;
45552 -
45553 - //6. Fill H2C protection register.
45554 -
45555 - rtw_write8(padapter, REG_MCUTST_1+BoxNum, 0xFF);
45556 - //RT_TRACE(COMP_CMD, DBG_LOUD, ("FillH2CCmd92C():Write Reg(%4x) = 0xFF \n", REG_MCUTST_1+BoxNum));
45557 - }
45558 +exit:
45559
45560 - // Record the next BoxNum
45561 - pHalData->LastHMEBoxNum = BoxNum+1;
45562 - if(pHalData->LastHMEBoxNum == 4) // loop to 0
45563 - pHalData->LastHMEBoxNum = 0;
45564 -
45565 - //DBG_8192C("FillH2CCmd92C():pHalData->LastHMEBoxNum = %d\n", pHalData->LastHMEBoxNum);
45566 -
45567 - }
45568 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->h2c_fwcmd_mutex), NULL);
45569
45570 _func_exit_;
45571
45572 -#endif
45573 -
45574 -#ifdef CONFIG_CONCURRENT_MODE
45575 - //_exit_critical_mutex(padapter->ph2c_fwcmd_mutex, NULL);
45576 -#endif
45577 -exit:
45578 return ret;
45579
45580 }
45581 @@ -445,67 +218,18 @@ _func_exit_;
45582
45583 }
45584
45585 -u8 rtl8192c_set_ext_macid_period_cmd(_adapter*padapter, u8 period)
45586 -{
45587 - u8 ext_macid_period=0;
45588 - u8 res=_SUCCESS;
45589 -
45590 -_func_enter_;
45591 -
45592 - ext_macid_period=period;
45593 -
45594 - rtl8192c_FillH2CCmd(padapter, EXT_MACID_PERIOD_EID, 1, &ext_macid_period);
45595 -
45596 -_func_exit_;
45597 -
45598 - return res;
45599 -
45600 -}
45601 -
45602 -u8 rtl8192c_set_raid64_cmd(_adapter*padapter, u32 mask, u8 arg)
45603 -{
45604 - u8 buf[5];
45605 - u8 res=_SUCCESS;
45606 -
45607 -_func_enter_;
45608 -
45609 - _rtw_memset(buf, 0, 5);
45610 - mask = cpu_to_le32( mask );
45611 - _rtw_memcpy(buf, &mask, 4);
45612 - buf[4] = arg;
45613 -
45614 - rtl8192c_FillH2CCmd(padapter, MACID64_CONFIG_EID, 5, buf);
45615 -
45616 -_func_exit_;
45617 -
45618 - return res;
45619 -
45620 -}
45621 //bitmap[0:27] = tx_rate_bitmap
45622 //bitmap[28:31]= Rate Adaptive id
45623 //arg[0:4] = macid
45624 //arg[5] = Short GI
45625 -void rtl8192c_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg, u8 mac_id)
45626 +void rtl8192c_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg)
45627 {
45628
45629 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
45630
45631 if(pHalData->fw_ractrl == _TRUE)
45632 {
45633 - DBG_8192C("%s() pHalData->fw_ractrl == _TRUE\n",__FUNCTION__);
45634 -#ifdef SUPPORT_64_STA
45635 - if(mac_id >=FW_CTRL_MACID){
45636 - rtl8192c_set_ext_macid_period_cmd(pAdapter,20);
45637 - rtl8192c_set_raid64_cmd(pAdapter, bitmap, arg);
45638 - DBG_8192C("%s() rtl8192c_set_raid64_cmd, bitmap=0x%x, arg =0x%x\n",__FUNCTION__,bitmap,arg);
45639 - }
45640 - else
45641 -#endif //SUPPORT_64_STA
45642 - {
45643 - rtl8192c_set_raid_cmd(pAdapter, bitmap, arg);
45644 - DBG_8192C("%s() rtl8192c_set_raid_cmd, bitmap=0x%x, arg =0x%x\n",__FUNCTION__,bitmap,arg);
45645 - }
45646 -
45647 + rtl8192c_set_raid_cmd(pAdapter, bitmap, arg);
45648 }
45649 else
45650 {
45651 @@ -976,7 +700,7 @@ static void SetFwRsvdPagePkt(PADAPTER Adapter, BOOLEAN bDLFinished)
45652 pattrib->pktlen = pattrib->last_txcmdsz = TotalPacketLen - TxDescLen;
45653 _rtw_memcpy(pmgntframe->buf_addr, ReservedPagePacket, TotalPacketLen);
45654
45655 - Adapter->HalFunc.mgnt_xmit(Adapter, pmgntframe);
45656 + rtw_hal_mgnt_xmit(Adapter, pmgntframe);
45657
45658 bDLOK = _TRUE;
45659
45660 @@ -1003,6 +727,8 @@ _func_enter_;
45661
45662 if(mstatus == 1)
45663 {
45664 + BOOLEAN bRecover = _FALSE;
45665 +
45666 // We should set AID, correct TSF, HW seq enable before set JoinBssReport to Fw in 88/92C.
45667 // Suggested by filen. Added by tynli.
45668 rtw_write16(padapter, REG_BCN_PSR_RPT, (0xC000|pmlmeinfo->aid));
45669 @@ -1012,52 +738,47 @@ _func_enter_;
45670 //rtw_write16(padapter, REG_NQOS_SEQ, ((pmlmeext->mgnt_seq+100)&0xFFF));
45671 //rtw_write8(padapter, REG_HWSEQ_CTRL, 0xFF);
45672
45673 - if(IS_NORMAL_CHIP(pHalData->VersionID))
45674 + //set REG_CR bit 8
45675 + //U1bTmp = rtw_read8(padapter, REG_CR+1);
45676 + rtw_write8(padapter, REG_CR+1, 0x03);
45677 +
45678 + // Disable Hw protection for a time which revserd for Hw sending beacon.
45679 + // Fix download reserved page packet fail that access collision with the protection time.
45680 + // 2010.05.11. Added by tynli.
45681 + //SetBcnCtrlReg(padapter, 0, BIT3);
45682 + //SetBcnCtrlReg(padapter, BIT4, 0);
45683 + rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)&(~BIT(3)));
45684 + rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|BIT(4));
45685 +
45686 + // Set FWHW_TXQ_CTRL 0x422[6]=0 to tell Hw the packet is not a real beacon frame.
45687 + if(pHalData->RegFwHwTxQCtrl&BIT6)
45688 + bRecover = _TRUE;
45689 +
45690 + // To tell Hw the packet is not a real beacon frame.
45691 + //U1bTmp = rtw_read8(padapter, REG_FWHW_TXQ_CTRL+2);
45692 + rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl&(~BIT6)));
45693 + pHalData->RegFwHwTxQCtrl &= (~BIT6);
45694 + SetFwRsvdPagePkt(padapter, 0);
45695 +
45696 + // 2010.05.11. Added by tynli.
45697 + //SetBcnCtrlReg(padapter, BIT3, 0);
45698 + //SetBcnCtrlReg(padapter, 0, BIT4);
45699 + rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|BIT(3));
45700 + rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)&(~BIT(4)));
45701 +
45702 + // To make sure that if there exists an adapter which would like to send beacon.
45703 + // If exists, the origianl value of 0x422[6] will be 1, we should check this to
45704 + // prevent from setting 0x422[6] to 0 after download reserved page, or it will cause
45705 + // the beacon cannot be sent by HW.
45706 + // 2010.06.23. Added by tynli.
45707 + if(bRecover)
45708 {
45709 - BOOLEAN bRecover = _FALSE;
45710 -
45711 - //set REG_CR bit 8
45712 - //U1bTmp = rtw_read8(padapter, REG_CR+1);
45713 - rtw_write8(padapter, REG_CR+1, 0x03);
45714 -
45715 - // Disable Hw protection for a time which revserd for Hw sending beacon.
45716 - // Fix download reserved page packet fail that access collision with the protection time.
45717 - // 2010.05.11. Added by tynli.
45718 - //SetBcnCtrlReg(padapter, 0, BIT3);
45719 - //SetBcnCtrlReg(padapter, BIT4, 0);
45720 - rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)&(~BIT(3)));
45721 - rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|BIT(4));
45722 -
45723 - // Set FWHW_TXQ_CTRL 0x422[6]=0 to tell Hw the packet is not a real beacon frame.
45724 - if(pHalData->RegFwHwTxQCtrl&BIT6)
45725 - bRecover = _TRUE;
45726 -
45727 - // To tell Hw the packet is not a real beacon frame.
45728 - //U1bTmp = rtw_read8(padapter, REG_FWHW_TXQ_CTRL+2);
45729 - rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl&(~BIT6)));
45730 - pHalData->RegFwHwTxQCtrl &= (~BIT6);
45731 - SetFwRsvdPagePkt(padapter, 0);
45732 -
45733 - // 2010.05.11. Added by tynli.
45734 - //SetBcnCtrlReg(padapter, BIT3, 0);
45735 - //SetBcnCtrlReg(padapter, 0, BIT4);
45736 - rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|BIT(3));
45737 - rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)&(~BIT(4)));
45738 -
45739 - // To make sure that if there exists an adapter which would like to send beacon.
45740 - // If exists, the origianl value of 0x422[6] will be 1, we should check this to
45741 - // prevent from setting 0x422[6] to 0 after download reserved page, or it will cause
45742 - // the beacon cannot be sent by HW.
45743 - // 2010.06.23. Added by tynli.
45744 - if(bRecover)
45745 - {
45746 - rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl|BIT6));
45747 - pHalData->RegFwHwTxQCtrl |= BIT6;
45748 - }
45749 -
45750 - // Clear CR[8] or beacon packet will not be send to TxBuf anymore.
45751 - rtw_write8(padapter, REG_CR+1, 0x02);
45752 + rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl|BIT6));
45753 + pHalData->RegFwHwTxQCtrl |= BIT6;
45754 }
45755 +
45756 + // Clear CR[8] or beacon packet will not be send to TxBuf anymore.
45757 + rtw_write8(padapter, REG_CR+1, 0x02);
45758 }
45759
45760 JoinBssRptParm.OpMode = mstatus;
45761 @@ -1067,7 +788,7 @@ _func_enter_;
45762 _func_exit_;
45763 }
45764
45765 -#ifdef CONFIG_P2P
45766 +#ifdef CONFIG_P2P_PS
45767 void rtl8192c_set_p2p_ctw_period_cmd(_adapter* padapter, u8 ctwindow)
45768 {
45769 struct P2P_PS_CTWPeriod_t p2p_ps_ctw;
45770 @@ -1103,7 +824,7 @@ _func_enter_;
45771 {
45772 p2p_ps_offload->CTWindow_En = 1;
45773 ctwindow = pwdinfo->ctwindow;
45774 - if(IS_HARDWARE_TYPE_8723(padapter))
45775 + if(IS_HARDWARE_TYPE_8723A(padapter))
45776 {
45777 //rtw_write16(padapter, REG_ATIMWND, ctwindow);
45778 }
45779 @@ -1174,7 +895,7 @@ _func_enter_;
45780 case P2P_PS_SCAN_DONE:
45781 DBG_8192C("P2P_PS_SCAN_DONE \n");
45782 p2p_ps_offload->discovery = 0;
45783 - pwdinfo->p2p_ps = P2P_PS_ENABLE;
45784 + pwdinfo->p2p_ps_state = P2P_PS_ENABLE;
45785 break;
45786 default:
45787 break;
45788 @@ -1185,7 +906,7 @@ _func_enter_;
45789 _func_exit_;
45790
45791 }
45792 -#endif //CONFIG_P2P
45793 +#endif // CONFIG_P2P_PS
45794
45795 #ifdef CONFIG_IOL
45796 #include <rtw_iol.h>
45797 @@ -1199,9 +920,8 @@ int rtl8192c_IOL_exec_cmds_sync(ADAPTER *adapter, struct xmit_frame *xmit_frame,
45798
45799 if (rtw_IOL_append_END_cmd(xmit_frame) != _SUCCESS)
45800 goto exit;
45801 -
45802 - //adapter->HalFunc.mgnt_xmit(adapter, xmit_frame);
45803 - rtw_dump_xframe_sync(adapter, xmit_frame);
45804 +
45805 + dump_mgntframe_and_wait(adapter, xmit_frame, max_wating_ms);
45806
45807 IoOffloadLoc.LocCmd = 0;
45808 if(_SUCCESS != rtl8192c_FillH2CCmd(adapter, H2C_92C_IO_OFFLOAD, sizeof(IO_OFFLOAD_LOC), (u8 *)&IoOffloadLoc))
45809 @@ -1274,6 +994,84 @@ exit:
45810 #endif //CONFIG_IOL
45811
45812
45813 +#ifdef CONFIG_BEACON_DISABLE_OFFLOAD
45814 +/*
45815 + rtl8192c_dis_beacon_fun_cmd()
45816 + This function shall only be called by PORT1.
45817 + PORT0's beacon function can't be disabled, because it's used by RA function in FW/HW.
45818 +
45819 + // Still has the REG_BCN_CTRL_1 modified by unknowned party issue in case of Primary Interface + PORT1 combination.
45820 +*/
45821 +u8 rtl8192c_dis_beacon_fun_cmd(_adapter* padapter)
45822 +{
45823 + u8 buf[2];
45824 + u8 res=_SUCCESS;
45825 +
45826 +_func_enter_;
45827 +
45828 + _rtw_memset(buf, 0, sizeof(buf));
45829 +
45830 + if (padapter->iface_type == IFACE_PORT0) {
45831 + //buf[0] = 0x1;
45832 + DBG_871X("%s(): ERROR! padapter->iface_type = %d\n", __FUNCTION__, padapter->iface_type);
45833 + return _FAIL;
45834 + } else
45835 + buf[1] = 0x1;
45836 +
45837 + rtl8192c_FillH2CCmd(padapter, H2C_92C_DISABLE_BCN_FUNC, 2, buf);
45838 +
45839 +_func_exit_;
45840 +
45841 + return res;
45842 +
45843 +}
45844 +#endif // CONFIG_BEACON_DISABLE_OFFLOAD
45845 +
45846 +
45847 +#ifdef CONFIG_TSF_RESET_OFFLOAD
45848 +/*
45849 + ask FW to Reset sync register at Beacon early interrupt
45850 +*/
45851 +u8 rtl8192c_reset_tsf(_adapter *padapter, u8 reset_port )
45852 +{
45853 + u8 buf[2];
45854 + u8 res=_SUCCESS;
45855 +
45856 +_func_enter_;
45857 + if (IFACE_PORT0==reset_port) {
45858 + buf[0] = 0x1; buf[1] = 0;
45859 +
45860 + } else{
45861 + buf[0] = 0x0; buf[1] = 0x1;
45862 + }
45863 + rtl8192c_FillH2CCmd(padapter, H2C_92C_RESET_TSF, 2, buf);
45864 +_func_exit_;
45865 +
45866 + return res;
45867 +}
45868 +
45869 +int reset_tsf(PADAPTER Adapter, u8 reset_port )
45870 +{
45871 + u8 reset_cnt_before = 0, reset_cnt_after = 0, loop_cnt = 0;
45872 + u32 reg_reset_tsf_cnt = (IFACE_PORT0==reset_port) ?
45873 + REG_FW_RESET_TSF_CNT_0:REG_FW_RESET_TSF_CNT_1;
45874 +
45875 + rtw_scan_abort(Adapter->pbuddy_adapter); /* site survey will cause reset_tsf fail */
45876 + reset_cnt_after = reset_cnt_before = rtw_read8(Adapter,reg_reset_tsf_cnt);
45877 + rtl8192c_reset_tsf(Adapter, reset_port);
45878 +
45879 + while ((reset_cnt_after == reset_cnt_before ) && (loop_cnt < 10)) {
45880 + rtw_msleep_os(100);
45881 + loop_cnt++;
45882 + reset_cnt_after = rtw_read8(Adapter, reg_reset_tsf_cnt);
45883 + }
45884 +
45885 + return(loop_cnt >= 10) ? _FAIL : _TRUE;
45886 +}
45887 +
45888 +
45889 +#endif // CONFIG_TSF_RESET_OFFLOAD
45890 +
45891 #ifdef CONFIG_WOWLAN
45892
45893 void rtl8192c_set_wowlan_cmd(_adapter* padapter)
45894 @@ -1310,6 +1108,8 @@ _func_enter_;
45895 pwowlan_parm.mode |=FW_WOWLAN_REKEY_WAKEUP;
45896 pwowlan_parm.mode |=FW_WOWLAN_DEAUTH_WAKEUP;
45897
45898 + rtl8192c_set_FwJoinBssReport_cmd( padapter, 1);
45899 +
45900 //GPIO3
45901 pwowlan_parm.gpio_index=3;
45902
45903 @@ -1323,7 +1123,6 @@ _func_enter_;
45904 }
45905 rtl8192c_FillH2CCmd(padapter, H2C_WO_WLAN_CMD, 4, (u8 *)&pwowlan_parm);
45906
45907 - rtl8192c_set_FwJoinBssReport_cmd( padapter, 1);
45908 //keep alive period = 3 * 10 BCN interval
45909 pwowlan_parm.mode =3;
45910 pwowlan_parm.gpio_index=3;
45911 @@ -1358,4 +1157,3 @@ _func_exit_;
45912
45913
45914
45915 -
45916 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c
45917 index be1e800..6e5634c 100644
45918 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c
45919 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c
45920 @@ -15,8 +15,8 @@
45921 * this program; if not, write to the Free Software Foundation, Inc.,
45922 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
45923 *
45924 - *
45925 -******************************************************************************/
45926 + *
45927 + ******************************************************************************/
45928 //============================================================
45929 // Description:
45930 //
45931 @@ -34,7 +34,10 @@
45932 #include <rtw_byteorder.h>
45933
45934 #include <rtl8192c_hal.h>
45935 -
45936 +#include "../dm.h"
45937 +#ifdef CONFIG_INTEL_PROXIM
45938 +#include "../proxim/intel_proxim.h"
45939 +#endif
45940 //============================================================
45941 // Global var
45942 //============================================================
45943 @@ -95,6 +98,7 @@ static void dm_DIGInit(
45944
45945 pDigTable->rx_gain_range_max = DM_DIG_MAX;
45946 pDigTable->rx_gain_range_min = DM_DIG_MIN;
45947 + pDigTable->rx_gain_range_min_nolink = 0;
45948
45949 pDigTable->BackoffVal = DM_DIG_BACKOFF_DEFAULT;
45950 pDigTable->BackoffVal_range_max = DM_DIG_BACKOFF_MAX;
45951 @@ -123,8 +127,12 @@ static u8 dm_initial_gain_MinPWDB(
45952 (pDigTable->CurSTAConnectState == DIG_STA_CONNECT) )
45953 {
45954 if(pdmpriv->EntryMinUndecoratedSmoothedPWDB != 0)
45955 +#ifdef CONFIG_CONCURRENT_MODE
45956 + Rssi_val_min = (pdmpriv->UndecoratedSmoothedPWDB+pdmpriv->EntryMinUndecoratedSmoothedPWDB)/2;
45957 +#else
45958 Rssi_val_min = (pdmpriv->EntryMinUndecoratedSmoothedPWDB > pdmpriv->UndecoratedSmoothedPWDB)?
45959 pdmpriv->UndecoratedSmoothedPWDB:pdmpriv->EntryMinUndecoratedSmoothedPWDB;
45960 +#endif //CONFIG_CONCURRENT_MODE
45961 else
45962 Rssi_val_min = pdmpriv->UndecoratedSmoothedPWDB;
45963 }
45964 @@ -151,6 +159,9 @@ dm_FalseAlarmCounterStatistics(
45965 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
45966 struct dm_priv *pdmpriv = &pHalData->dmpriv;
45967 PFALSE_ALARM_STATISTICS FalseAlmCnt = &(pdmpriv->FalseAlmCnt);
45968 +#ifdef CONFIG_CONCURRENT_MODE
45969 + PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
45970 +#endif //CONFIG_CONCURRENT_MODE
45971
45972 ret_value = PHY_QueryBBReg(Adapter, rOFDM_PHYCounter1, bMaskDWord);
45973 FalseAlmCnt->Cnt_Parity_Fail = ((ret_value&0xffff0000)>>16);
45974 @@ -183,7 +194,13 @@ dm_FalseAlarmCounterStatistics(
45975 FalseAlmCnt->Cnt_Crc8_fail +
45976 FalseAlmCnt->Cnt_Mcs_fail +
45977 FalseAlmCnt->Cnt_Cck_fail);
45978 +
45979 Adapter->recvpriv.FalseAlmCnt_all = FalseAlmCnt->Cnt_all;
45980 +#ifdef CONFIG_CONCURRENT_MODE
45981 + if(pbuddy_adapter)
45982 + pbuddy_adapter->recvpriv.FalseAlmCnt_all = FalseAlmCnt->Cnt_all;
45983 +#endif //CONFIG_CONCURRENT_MODE
45984 +
45985 //reset false alarm counter registers
45986 PHY_SetBBReg(Adapter, rOFDM1_LSTF, 0x08000000, 1);
45987 PHY_SetBBReg(Adapter, rOFDM1_LSTF, 0x08000000, 0);
45988 @@ -210,6 +227,21 @@ DM_Write_DIG(
45989 struct dm_priv *pdmpriv = &pHalData->dmpriv;
45990 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
45991
45992 +#ifdef CONFIG_CONCURRENT_MODE
45993 + if(rtw_buddy_adapter_up(pAdapter))
45994 + {
45995 + PADAPTER pbuddy_adapter = pAdapter->pbuddy_adapter;
45996 + PHAL_DATA_TYPE pbuddy_HalData = GET_HAL_DATA(pbuddy_adapter);
45997 + struct dm_priv *pbuddy_dmpriv = &pbuddy_HalData->dmpriv;
45998 + DIG_T *pbuddy_DigTable = &pbuddy_dmpriv->DM_DigTable;
45999 +
46000 + //sync IGValue
46001 + pbuddy_DigTable->PreIGValue = pDigTable->PreIGValue;
46002 + pbuddy_DigTable->CurIGValue = pDigTable->CurIGValue;
46003 + }
46004 +#endif //CONFIG_CONCURRENT_MODE
46005 +
46006 +
46007 //RT_TRACE( COMP_DIG, DBG_LOUD, ("CurIGValue = 0x%lx, PreIGValue = 0x%lx, BackoffVal = %d\n",
46008 // DM_DigTable.CurIGValue, DM_DigTable.PreIGValue, DM_DigTable.BackoffVal));
46009
46010 @@ -220,14 +252,25 @@ DM_Write_DIG(
46011 return;
46012 }
46013
46014 - if(pDigTable->PreIGValue != pDigTable->CurIGValue)
46015 + if( (pDigTable->PreIGValue != pDigTable->CurIGValue) || ( pAdapter->bForceWriteInitGain ) )
46016 {
46017 // Set initial gain.
46018 //PHY_SetBBReg(pAdapter, rOFDM0_XAAGCCore1, bMaskByte0, pDigTable->CurIGValue);
46019 //PHY_SetBBReg(pAdapter, rOFDM0_XBAGCCore1, bMaskByte0, pDigTable->CurIGValue);
46020 //printk("%s DIG(0x%02x)\n",__FUNCTION__,pDigTable->CurIGValue);
46021 - PHY_SetBBReg(pAdapter, rOFDM0_XAAGCCore1, 0x7f, pDigTable->CurIGValue);
46022 - PHY_SetBBReg(pAdapter, rOFDM0_XBAGCCore1, 0x7f, pDigTable->CurIGValue);
46023 +
46024 +#if defined CONFIG_WIDI_DIG_3E && defined CONFIG_INTEL_WIDI
46025 + if( pAdapter->mlmepriv.widi_enable == _TRUE )
46026 + {
46027 + PHY_SetBBReg(pAdapter, rOFDM0_XAAGCCore1, 0x7f, 0x3e);
46028 + PHY_SetBBReg(pAdapter, rOFDM0_XBAGCCore1, 0x7f, 0x3e);
46029 + }
46030 + else
46031 +#endif //defined CONFIG_WIDI_DIG_3E && defined CONFIG_INTEL_WIDI
46032 + {
46033 + PHY_SetBBReg(pAdapter, rOFDM0_XAAGCCore1, 0x7f, pDigTable->CurIGValue);
46034 + PHY_SetBBReg(pAdapter, rOFDM0_XBAGCCore1, 0x7f, pDigTable->CurIGValue);
46035 + }
46036 pDigTable->PreIGValue = pDigTable->CurIGValue;
46037 }
46038 }
46039 @@ -256,7 +299,7 @@ dm_CtrlInitGainByFA(
46040
46041 if(value_IGI > DM_DIG_FA_UPPER)
46042 value_IGI = DM_DIG_FA_UPPER;
46043 - if(value_IGI < DM_DIG_FA_LOWER)
46044 + if(value_IGI < DM_DIG_FA_LOWER)
46045 value_IGI = DM_DIG_FA_LOWER;
46046
46047 if(FalseAlmCnt->Cnt_all > 10000)
46048 @@ -276,7 +319,10 @@ VOID dm_CtrlInitGainByRssi( IN PADAPTER pAdapter)
46049 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
46050 struct dm_priv *pdmpriv = &pHalData->dmpriv;
46051 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
46052 - PFALSE_ALARM_STATISTICS FalseAlmCnt = &(pdmpriv->FalseAlmCnt);
46053 + PFALSE_ALARM_STATISTICS FalseAlmCnt = &(pdmpriv->FalseAlmCnt);
46054 +#ifdef CONFIG_DM_ADAPTIVITY
46055 + u8 Adap_IGI_Upper = pdmpriv->IGI_target + 30 + (u8) pdmpriv->TH_L2H_ini -(u8) pdmpriv->TH_EDCCA_HL_diff;
46056 +#endif
46057
46058 //modify DIG upper bound
46059 if((pDigTable->Rssi_val_min + 20) > DM_DIG_MAX )
46060 @@ -393,6 +439,22 @@ VOID dm_CtrlInitGainByRssi( IN PADAPTER pAdapter)
46061 if(pDigTable->CurIGValue < pDigTable->rx_gain_range_min)
46062 pDigTable->CurIGValue = pDigTable->rx_gain_range_min;
46063
46064 +#ifdef CONFIG_DM_ADAPTIVITY
46065 + if(pdmpriv->DMFlag & DYNAMIC_FUNC_ADAPTIVITY)
46066 + {
46067 + if(pDigTable->CurIGValue > Adap_IGI_Upper)
46068 + pDigTable->CurIGValue = Adap_IGI_Upper;
46069 +
46070 + if(pdmpriv->IGI_LowerBound != 0)
46071 + {
46072 + if(pDigTable->CurIGValue < pdmpriv->IGI_LowerBound)
46073 + pDigTable->CurIGValue = pdmpriv->IGI_LowerBound;
46074 + }
46075 + LOG_LEVEL(_drv_info_, FUNC_ADPT_FMT": pdmpriv->IGI_LowerBound = %d\n",
46076 + FUNC_ADPT_ARG(pAdapter), pdmpriv->IGI_LowerBound);
46077 + }
46078 +#endif /* CONFIG_DM_ADAPTIVITY */
46079 +
46080 //printk("%s => rx_gain_range_max(0x%02x) rx_gain_range_min(0x%02x)\n",__FUNCTION__,
46081 // pDigTable->rx_gain_range_max,pDigTable->rx_gain_range_min);
46082 //printk("%s CurIGValue(0x%02x) <====\n",__FUNCTION__,pDigTable->CurIGValue );
46083 @@ -408,6 +470,10 @@ static VOID dm_CtrlInitGainByRssi(IN PADAPTER pAdapter)
46084 struct dm_priv *pdmpriv = &pHalData->dmpriv;
46085 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
46086 PFALSE_ALARM_STATISTICS FalseAlmCnt = &(pdmpriv->FalseAlmCnt);
46087 + u8 RSSI_tmp = dm_initial_gain_MinPWDB(pAdapter);
46088 +#ifdef CONFIG_DM_ADAPTIVITY
46089 + u8 Adap_IGI_Upper = pdmpriv->IGI_target + 30 + (u8) pdmpriv->TH_L2H_ini -(u8) pdmpriv->TH_EDCCA_HL_diff;
46090 +#endif
46091
46092 //modify DIG upper bound
46093 if((pDigTable->Rssi_val_min + 20) > DM_DIG_MAX )
46094 @@ -415,7 +481,6 @@ static VOID dm_CtrlInitGainByRssi(IN PADAPTER pAdapter)
46095 else
46096 pDigTable->rx_gain_range_max = pDigTable->Rssi_val_min + 20;
46097 //printk("%s Rssi_val_min(0x%02x),rx_gain_range_max(0x%02x)\n",__FUNCTION__,pDigTable->Rssi_val_min,pDigTable->rx_gain_range_max);
46098 -
46099 //modify DIG lower bound, deal with abnorally large false alarm
46100 if(FalseAlmCnt->Cnt_all > 10000)
46101 {
46102 @@ -515,6 +580,14 @@ static VOID dm_CtrlInitGainByRssi(IN PADAPTER pAdapter)
46103 }
46104 #endif
46105
46106 + if(RSSI_tmp <= DM_DIG_MIN)
46107 + pDigTable->rx_gain_range_min = DM_DIG_MIN;
46108 + else if(RSSI_tmp >= DM_DIG_MAX)
46109 + pDigTable->rx_gain_range_min = DM_DIG_MAX;
46110 + else
46111 + pDigTable->rx_gain_range_min = RSSI_tmp;
46112 +
46113 +
46114 //Check initial gain by upper/lower bound
46115 if(pDigTable->CurIGValue >pDigTable->rx_gain_range_max)
46116 pDigTable->CurIGValue = pDigTable->rx_gain_range_max;
46117 @@ -522,6 +595,22 @@ static VOID dm_CtrlInitGainByRssi(IN PADAPTER pAdapter)
46118 if(pDigTable->CurIGValue < pDigTable->rx_gain_range_min)
46119 pDigTable->CurIGValue = pDigTable->rx_gain_range_min;
46120
46121 +#ifdef CONFIG_DM_ADAPTIVITY
46122 + if(pdmpriv->DMFlag & DYNAMIC_FUNC_ADAPTIVITY)
46123 + {
46124 + if(pDigTable->CurIGValue > Adap_IGI_Upper)
46125 + pDigTable->CurIGValue = Adap_IGI_Upper;
46126 +
46127 + if(pdmpriv->IGI_LowerBound != 0)
46128 + {
46129 + if(pDigTable->CurIGValue < pdmpriv->IGI_LowerBound)
46130 + pDigTable->CurIGValue = pdmpriv->IGI_LowerBound;
46131 + }
46132 + LOG_LEVEL(_drv_info_, FUNC_ADPT_FMT": pdmpriv->IGI_LowerBound = %d\n",
46133 + FUNC_ADPT_ARG(pAdapter), pdmpriv->IGI_LowerBound);
46134 + }
46135 +#endif /* CONFIG_DM_ADAPTIVITY */
46136 +
46137 //printk("%s => rx_gain_range_max(0x%02x) rx_gain_range_min(0x%02x)\n",__FUNCTION__,
46138 // pDigTable->rx_gain_range_max,pDigTable->rx_gain_range_min);
46139 //printk("%s CurIGValue(0x%02x) <====\n",__FUNCTION__,pDigTable->CurIGValue );
46140 @@ -541,6 +630,20 @@ dm_initial_gain_Multi_STA(
46141 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
46142 int rssi_strength = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
46143 BOOLEAN bMulti_STA = _FALSE;
46144 +
46145 +#ifdef CONFIG_CONCURRENT_MODE
46146 + //AP Mode
46147 + if(check_buddy_fwstate(pAdapter, WIFI_AP_STATE) == _TRUE && (rssi_strength !=0))
46148 + {
46149 + bMulti_STA = _TRUE;
46150 + }
46151 + else if(pDigTable->CurMultiSTAConnectState == DIG_MultiSTA_CONNECT && rssi_strength==0) //STA+STA MODE
46152 + {
46153 + bMulti_STA = _TRUE;
46154 + rssi_strength = pdmpriv->UndecoratedSmoothedPWDB;
46155 + }
46156 +#endif //CONFIG_CONCURRENT_MODE
46157 +
46158
46159 //ADHOC and AP Mode
46160 if(check_fwstate(pmlmepriv, WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)
46161 @@ -607,12 +710,14 @@ dm_initial_gain_STA_beforelinked(
46162 //CurrentIGI = pDM_DigTable->rx_gain_range_min;//pDM_DigTable->CurIGValue = pDM_DigTable->rx_gain_range_min
46163 //ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DIG BeforeLink\n"));
46164 //2012.03.30 LukeLee: enable DIG before link but with very high thresholds
46165 - if(pFalseAlmCnt->Cnt_all > 10000)
46166 - pDigTable->CurIGValue = pDigTable->CurIGValue + 2;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+2;
46167 - else if (pFalseAlmCnt->Cnt_all > 8000)
46168 - pDigTable->CurIGValue = pDigTable->CurIGValue + 1;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+1;
46169 + // Updated by Albert 2012/09/27
46170 + // Copy the same rule from 8192du code.
46171 + if( pFalseAlmCnt->Cnt_all > 2000 )
46172 + pDigTable->CurIGValue += 2;
46173 + else if ( ( pFalseAlmCnt->Cnt_all > 1000 ) && ( pFalseAlmCnt->Cnt_all <= 1000 ) )
46174 + pDigTable->CurIGValue += 1;
46175 else if(pFalseAlmCnt->Cnt_all < 500)
46176 - pDigTable->CurIGValue = pDigTable->CurIGValue - 1;//pDM_DigTable->CurIGValue =pDM_DigTable->PreIGValue-1;
46177 + pDigTable->CurIGValue -= 1;
46178
46179 //Check initial gain by upper/lower bound
46180 if(pDigTable->CurIGValue >pDigTable->rx_gain_range_max)
46181 @@ -647,20 +752,21 @@ dm_initial_gain_STA(
46182 {
46183 pDigTable->Rssi_val_min = dm_initial_gain_MinPWDB(pAdapter);
46184 dm_CtrlInitGainByRssi(pAdapter);
46185 - }
46186 -#ifdef CONFIG_IOCTL_CFG80211
46187 - else if((wdev_to_priv(pAdapter->rtw_wdev))->p2p_enabled == _TRUE)
46188 + }
46189 +#if 0
46190 + else if((wdev_to_priv(pAdapter->rtw_wdev))->p2p_enabled == _TRUE
46191 + && pAdapter->wdinfo.driver_interface == DRIVER_CFG80211)
46192 {
46193 - pDigTable->CurIGValue = 0x30;
46194 + //pDigTable->CurIGValue = 0x30;
46195 DM_Write_DIG(pAdapter);
46196 }
46197 -#endif
46198 +#endif
46199 else{ // pDigTable->CurSTAConnectState == DIG_STA_DISCONNECT
46200 #ifdef CONFIG_BEFORE_LINKED_DIG
46201 //printk("%s==> ##1 CurIGI(0x%02x),PreIGValue(0x%02x) \n",__FUNCTION__,pDigTable->CurIGValue,pDigTable->PreIGValue );
46202 dm_initial_gain_STA_beforelinked(pAdapter);
46203 DM_Write_DIG(pAdapter);
46204 - #endif
46205 + #endif //CONFIG_BEFORE_LINKED_DIG
46206 }
46207 }
46208 else
46209 @@ -671,11 +777,11 @@ dm_initial_gain_STA(
46210 pDigTable->BackoffVal = DM_DIG_BACKOFF_DEFAULT;
46211 pDigTable->CurIGValue = 0x20;
46212 pDigTable->PreIGValue = 0;
46213 -
46214 #ifdef CONFIG_BEFORE_LINKED_DIG
46215 //printk("%s==> ##2 CurIGI(0x%02x),PreIGValue(0x%02x) \n",__FUNCTION__,pDigTable->CurIGValue,pDigTable->PreIGValue );
46216 dm_initial_gain_STA_beforelinked(pAdapter);
46217 - #endif
46218 + #endif //CONFIG_BEFORE_LINKED_DIG
46219 +
46220
46221 DM_Write_DIG(pAdapter);
46222 }
46223 @@ -749,7 +855,15 @@ dm_CtrlInitGainByTwoPort(
46224 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
46225
46226 if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE)
46227 - return;
46228 + {
46229 +#ifdef CONFIG_IOCTL_CFG80211
46230 + if((wdev_to_priv(pAdapter->rtw_wdev))->p2p_enabled == _TRUE)
46231 + {
46232 + }
46233 + else
46234 +#endif
46235 + return;
46236 + }
46237
46238 // Decide the current status and if modify initial gain or not
46239 if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE)
46240 @@ -779,9 +893,31 @@ dm_CtrlInitGainByTwoPort(
46241 pDigTable->CurMultiSTAConnectState = DIG_MultiSTA_CONNECT;
46242 }
46243
46244 +#ifdef CONFIG_CONCURRENT_MODE
46245 + if(check_buddy_fwstate(pAdapter, WIFI_AP_STATE) == _TRUE)
46246 + {
46247 + PADAPTER pbuddy_adapter = pAdapter->pbuddy_adapter;
46248 +
46249 + if(pbuddy_adapter->stapriv.asoc_sta_count > 2)
46250 + {
46251 + pDigTable->CurSTAConnectState = DIG_STA_CONNECT;
46252 + pDigTable->CurMultiSTAConnectState = DIG_MultiSTA_CONNECT;
46253 + }
46254 + }
46255 + else if(check_buddy_fwstate(pAdapter, WIFI_STATION_STATE) == _TRUE &&
46256 + check_buddy_fwstate(pAdapter, _FW_LINKED) == _TRUE)
46257 + {
46258 + pDigTable->CurSTAConnectState = DIG_STA_CONNECT;
46259 +
46260 + }
46261 +#endif //CONFIG_CONCURRENT_MODE
46262 +
46263
46264 dm_initial_gain_STA(pAdapter);
46265 dm_initial_gain_Multi_STA(pAdapter);
46266 + //Baron temp DIG solution for DMP
46267 + //dm_CtrlInitGainByFA(pAdapter);
46268 +
46269 dm_CCK_PacketDetectionThresh(pAdapter);
46270
46271 pDigTable->PreSTAConnectState = pDigTable->CurSTAConnectState;
46272 @@ -795,7 +931,10 @@ static void dm_DIG(
46273 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
46274 struct dm_priv *pdmpriv = &pHalData->dmpriv;
46275 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
46276 -
46277 +
46278 + //Read 0x0c50; Initial gain
46279 + pDigTable->PreIGValue = (u8)PHY_QueryBBReg(pAdapter, rOFDM0_XAAGCCore1, bMaskByte0);
46280 +
46281 //RTPRINT(FDM, DM_Monitor, ("dm_DIG() ==>\n"));
46282
46283 if(pdmpriv->bDMInitialGainEnable == _FALSE)
46284 @@ -854,7 +993,11 @@ static void dm_InitDynamicTxPower(IN PADAPTER Adapter)
46285 struct dm_priv *pdmpriv = &pHalData->dmpriv;
46286
46287 #ifdef CONFIG_USB_HCI
46288 +#ifdef CONFIG_INTEL_PROXIM
46289 + if((pHalData->BoardType == BOARD_USB_High_PA)||(Adapter->proximity.proxim_support==_TRUE))
46290 +#else
46291 if(pHalData->BoardType == BOARD_USB_High_PA)
46292 +#endif
46293 {
46294 dm_SavePowerIndex(Adapter);
46295 pdmpriv->bDynamicTxPowerEnable = _TRUE;
46296 @@ -900,7 +1043,47 @@ static void dm_DynamicTxPower(IN PADAPTER Adapter)
46297 pdmpriv->LastDTPLvl=TxHighPwrLevel_Normal;
46298 return;
46299 }
46300 +#ifdef CONFIG_INTEL_PROXIM
46301 + if(Adapter->proximity.proxim_on== _TRUE){
46302 + struct proximity_priv *prox_priv=Adapter->proximity.proximity_priv;
46303 + // Intel set fixed tx power
46304 + 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);
46305 + if(prox_priv!=NULL){
46306 + if(prox_priv->proxim_modeinfo->power_output> 0)
46307
46308 + {
46309 + switch(prox_priv->proxim_modeinfo->power_output){
46310 + case 1:
46311 + pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_100;
46312 + printk("TxHighPwrLevel_100\n");
46313 + break;
46314 + case 2:
46315 + pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_70;
46316 + printk("TxHighPwrLevel_70\n");
46317 + break;
46318 + case 3:
46319 + pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_50;
46320 + printk("TxHighPwrLevel_50\n");
46321 + break;
46322 + case 4:
46323 + pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_35;
46324 + printk("TxHighPwrLevel_35\n");
46325 + break;
46326 + case 5:
46327 + pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_15;
46328 + printk("TxHighPwrLevel_15\n");
46329 + break;
46330 + default:
46331 + pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_100;
46332 + printk("TxHighPwrLevel_100\n");
46333 + break;
46334 + }
46335 + }
46336 + }
46337 + }
46338 + else
46339 +#endif
46340 +{
46341 if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) // Default port
46342 {
46343 //todo: AP Mode
46344 @@ -938,7 +1121,7 @@ static void dm_DynamicTxPower(IN PADAPTER Adapter)
46345 pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
46346 //RT_TRACE(COMP_HIPWR, DBG_LOUD, ("TxHighPwrLevel_Normal\n"));
46347 }
46348 -
46349 +}
46350 if( (pdmpriv->DynamicTxHighPowerLvl != pdmpriv->LastDTPLvl) )
46351 {
46352 PHY_SetTxPowerLevel8192C(Adapter, pHalData->CurrentChannel);
46353 @@ -1230,8 +1413,6 @@ dm_CheckEdcaTurbo(
46354 edca_param = 0x6ea42b;
46355 }
46356 #endif
46357 - if(Adapter->registrypriv.intel_class_mode==1)
46358 - edca_param=0xa44f;
46359 rtw_write32(Adapter, REG_EDCA_BE_PARAM, edca_param);
46360
46361 pdmpriv->prv_traffic_idx = trafficIndex;
46362 @@ -1260,30 +1441,28 @@ dm_CheckEdcaTurbo_EXIT:
46363
46364 }
46365
46366 -#define DPK_DELTA_MAPPING_NUM 13
46367 -#define index_mapping_HP_NUM 15
46368 -//091212 chiyokolin
46369 +#define DPK_DELTA_MAPPING_NUM 13
46370 +#define index_mapping_HP_NUM 15
46371 +
46372 static VOID
46373 dm_TXPowerTrackingCallback_ThermalMeter_92C(
46374 IN PADAPTER Adapter)
46375 {
46376 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
46377 struct dm_priv *pdmpriv = &pHalData->dmpriv;
46378 - u8 ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_HP, TimeOut = 100, ThermalValue_HP_count = 0;
46379 - u32 ThermalValue_HP = 0;
46380 - s8 delta_DPK;
46381 + u8 ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_HP, TimeOut = 100;
46382 int ele_A, ele_D, TempCCk, X, value32;
46383 int Y, ele_C;
46384 - s8 OFDM_index[2], CCK_index = 0, OFDM_index_old[2], CCK_index_old = 0, delta_APK;
46385 - int i = 0, CCKSwingNeedUpdate = 0;
46386 + s8 OFDM_index[2], CCK_index = 0, OFDM_index_old[2], CCK_index_old = 0;
46387 + int i = 0;
46388 BOOLEAN is2T = IS_92C_SERIAL(pHalData->VersionID);
46389 -#if 0
46390 -//#ifdef CONFIG_MP_INCLUDED
46391 - PMPT_CONTEXT pMptCtx = &(Adapter->MptCtx);
46392 - pu1Byte TxPwrLevel = pMptCtx->TxPwrLevel;
46393 -#endif
46394
46395 +#if MP_DRIVER == 1
46396 + PMPT_CONTEXT pMptCtx = &(Adapter->mppriv.MptCtx);
46397 + u8 *TxPwrLevel = pMptCtx->TxPwrLevel;
46398 +#endif
46399 u8 OFDM_min_index = 6, rf; //OFDM BB Swing should be less than +3.0dB, which is required by Arthur
46400 +#if 0
46401 u32 DPK_delta_mapping[2][DPK_DELTA_MAPPING_NUM] = {
46402 {0x1c, 0x1c, 0x1d, 0x1d, 0x1e,
46403 0x1f, 0x00, 0x00, 0x01, 0x01,
46404 @@ -1291,14 +1470,18 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46405 {0x1c, 0x1d, 0x1e, 0x1e, 0x1e,
46406 0x1f, 0x00, 0x00, 0x01, 0x02,
46407 0x02, 0x03, 0x03}};
46408 -
46409 - s8 index_mapping_HP[index_mapping_HP_NUM] = {
46410 +#endif
46411 +#ifdef CONFIG_USB_HCI
46412 + u8 ThermalValue_HP_count = 0;
46413 + u32 ThermalValue_HP = 0;
46414 + s32 index_mapping_HP[index_mapping_HP_NUM] = {
46415 0, 1, 3, 4, 6,
46416 7, 9, 10, 12, 13,
46417 15, 16, 18, 19, 21
46418 };
46419
46420 s8 index_HP;
46421 +#endif
46422
46423 pdmpriv->TXPowerTrackingCallbackCnt++; //cosa add for debug
46424 pdmpriv->bTXPowerTrackingInit = _TRUE;
46425 @@ -1310,12 +1493,11 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46426
46427 //DBG_8192C("===>dm_TXPowerTrackingCallback_ThermalMeter_92C\n");
46428
46429 - ThermalValue = (u8)PHY_QueryRFReg(Adapter, RF90_PATH_A, RF_T_METER, 0x1f); // 0x24: RF Reg[4:0]
46430 + ThermalValue = (u8)PHY_QueryRFReg(Adapter, RF_PATH_A, RF_T_METER, 0x1f); // 0x24: RF Reg[4:0]
46431
46432 //DBG_8192C("\n\nReadback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n",ThermalValue,pdmpriv->ThermalValue, pHalData->EEPROMThermalMeter);
46433
46434 rtl8192c_PHY_APCalibrate(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
46435 - rtl8192c_PHY_DigitalPredistortion(Adapter);
46436
46437 if(is2T)
46438 rf = 2;
46439 @@ -1328,7 +1510,7 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46440 {
46441 //Query OFDM path A default setting
46442 ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord)&bMaskOFDM_D;
46443 - for(i=0; i<OFDM_TABLE_SIZE; i++) //find the index
46444 + for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
46445 {
46446 if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
46447 {
46448 @@ -1342,7 +1524,7 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46449 if(is2T)
46450 {
46451 ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord)&bMaskOFDM_D;
46452 - for(i=0; i<OFDM_TABLE_SIZE; i++) //find the index
46453 + for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
46454 {
46455 if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
46456 {
46457 @@ -1434,7 +1616,6 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46458 }
46459 delta_LCK = (ThermalValue > pdmpriv->ThermalValue_LCK)?(ThermalValue - pdmpriv->ThermalValue_LCK):(pdmpriv->ThermalValue_LCK - ThermalValue);
46460 delta_IQK = (ThermalValue > pdmpriv->ThermalValue_IQK)?(ThermalValue - pdmpriv->ThermalValue_IQK):(pdmpriv->ThermalValue_IQK - ThermalValue);
46461 - delta_DPK = pdmpriv->ThermalValue_DPK - ThermalValue;
46462
46463 //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);
46464
46465 @@ -1480,29 +1661,26 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46466 {
46467 for(i = 0; i < rf; i++)
46468 pdmpriv->OFDM_index[i] -= delta;
46469 -
46470 pdmpriv->CCK_index -= delta;
46471 }
46472 else
46473 {
46474 for(i = 0; i < rf; i++)
46475 pdmpriv->OFDM_index[i] += delta;
46476 -
46477 pdmpriv->CCK_index += delta;
46478 }
46479 }
46480
46481 - /*
46482 - if(is2T)
46483 + /*if(is2T)
46484 {
46485 DBG_8192C("temp OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
46486 - pdmpriv->OFDM_index[0], pdmpriv->OFDM_index[1], pdmpriv->CCK_index);
46487 + pdmpriv->OFDM_index[0], pdmpriv->OFDM_index[1], pdmpriv->CCK_index);
46488 }
46489 else
46490 {
46491 - //DBG_8192C("temp OFDM_A_index=0x%x, CCK_index=0x%x\n",pdmpriv->OFDM_index[0], pdmpriv->CCK_index);
46492 - }
46493 - */
46494 + DBG_8192C("temp OFDM_A_index=0x%x, CCK_index=0x%x\n",
46495 + pdmpriv->OFDM_index[0], pdmpriv->CCK_index);
46496 + }*/
46497
46498 //no adjust
46499 #ifdef CONFIG_USB_HCI
46500 @@ -1521,8 +1699,8 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46501 OFDM_index[i] = pdmpriv->OFDM_index[i];
46502 CCK_index = pdmpriv->CCK_index;
46503 }
46504 -#if 0
46505 -//#ifdef CONFIG_MP_INCLUDED
46506 +
46507 +#if MP_DRIVER == 1
46508 for(i = 0; i < rf; i++)
46509 {
46510 if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
46511 @@ -1584,34 +1762,33 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46512
46513 for(i = 0; i < rf; i++)
46514 {
46515 - if(OFDM_index[i] > OFDM_TABLE_SIZE-1)
46516 - OFDM_index[i] = OFDM_TABLE_SIZE-1;
46517 + if(OFDM_index[i] > (OFDM_TABLE_SIZE_92C-1))
46518 + OFDM_index[i] = (OFDM_TABLE_SIZE_92C-1);
46519 else if (OFDM_index[i] < OFDM_min_index)
46520 OFDM_index[i] = OFDM_min_index;
46521 }
46522
46523 - if(CCK_index > CCK_TABLE_SIZE-1)
46524 - CCK_index = CCK_TABLE_SIZE-1;
46525 + if(CCK_index > (CCK_TABLE_SIZE-1))
46526 + CCK_index = (CCK_TABLE_SIZE-1);
46527 else if (CCK_index < 0)
46528 CCK_index = 0;
46529
46530 - /*
46531 - if(is2T)
46532 + /*if(is2T)
46533 {
46534 - 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);
46535 + DBG_8192C("new OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
46536 + OFDM_index[0], OFDM_index[1], CCK_index);
46537 }
46538 else
46539 {
46540 - //DBG_8192C("new OFDM_A_index=0x%x, CCK_index=0x%x\n", OFDM_index[0], CCK_index);
46541 - }
46542 - */
46543 -
46544 + DBG_8192C("new OFDM_A_index=0x%x, CCK_index=0x%x\n",
46545 + OFDM_index[0], CCK_index);
46546 + }*/
46547 }
46548
46549 if(pdmpriv->TxPowerTrackControl && (delta != 0 || delta_HP != 0))
46550 {
46551 //Adujst OFDM Ant_A according to IQK result
46552 - ele_D = (OFDMSwingTable[(u8)OFDM_index[0]] & 0xFFC00000)>>22;
46553 + ele_D = (OFDMSwingTable[OFDM_index[0]] & 0xFFC00000)>>22;
46554 X = pdmpriv->RegE94;
46555 Y = pdmpriv->RegE9C;
46556
46557 @@ -1642,7 +1819,7 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46558 }
46559 else
46560 {
46561 - PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[(u8)OFDM_index[0]]);
46562 + PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[0]]);
46563 PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, 0x00);
46564 PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31|BIT29, 0x00);
46565 }
46566 @@ -1651,24 +1828,24 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46567
46568 //Adjust CCK according to IQK result
46569 if(!pdmpriv->bCCKinCH14){
46570 - rtw_write8(Adapter, 0xa22, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][0]);
46571 - rtw_write8(Adapter, 0xa23, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][1]);
46572 - rtw_write8(Adapter, 0xa24, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][2]);
46573 - rtw_write8(Adapter, 0xa25, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][3]);
46574 - rtw_write8(Adapter, 0xa26, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][4]);
46575 - rtw_write8(Adapter, 0xa27, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][5]);
46576 - rtw_write8(Adapter, 0xa28, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][6]);
46577 - rtw_write8(Adapter, 0xa29, CCKSwingTable_Ch1_Ch13[(u8)CCK_index][7]);
46578 + rtw_write8(Adapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]);
46579 + rtw_write8(Adapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]);
46580 + rtw_write8(Adapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]);
46581 + rtw_write8(Adapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]);
46582 + rtw_write8(Adapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]);
46583 + rtw_write8(Adapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]);
46584 + rtw_write8(Adapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]);
46585 + rtw_write8(Adapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]);
46586 }
46587 else{
46588 - rtw_write8(Adapter, 0xa22, CCKSwingTable_Ch14[(u8)CCK_index][0]);
46589 - rtw_write8(Adapter, 0xa23, CCKSwingTable_Ch14[(u8)CCK_index][1]);
46590 - rtw_write8(Adapter, 0xa24, CCKSwingTable_Ch14[(u8)CCK_index][2]);
46591 - rtw_write8(Adapter, 0xa25, CCKSwingTable_Ch14[(u8)CCK_index][3]);
46592 - rtw_write8(Adapter, 0xa26, CCKSwingTable_Ch14[(u8)CCK_index][4]);
46593 - rtw_write8(Adapter, 0xa27, CCKSwingTable_Ch14[(u8)CCK_index][5]);
46594 - rtw_write8(Adapter, 0xa28, CCKSwingTable_Ch14[(u8)CCK_index][6]);
46595 - rtw_write8(Adapter, 0xa29, CCKSwingTable_Ch14[(u8)CCK_index][7]);
46596 + rtw_write8(Adapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]);
46597 + rtw_write8(Adapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]);
46598 + rtw_write8(Adapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]);
46599 + rtw_write8(Adapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]);
46600 + rtw_write8(Adapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]);
46601 + rtw_write8(Adapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]);
46602 + rtw_write8(Adapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]);
46603 + rtw_write8(Adapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]);
46604 }
46605
46606 if(is2T)
46607 @@ -1704,7 +1881,7 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46608
46609 }
46610 else{
46611 - PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable[(u8)OFDM_index[1]]);
46612 + PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[1]]);
46613 PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00);
46614 PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27|BIT25, 0x00);
46615 }
46616 @@ -1716,7 +1893,7 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46617 DBG_8192C("TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n", \
46618 PHY_QueryBBReg(Adapter, 0xc80, bMaskDWord),\
46619 PHY_QueryBBReg(Adapter, 0xc94, bMaskDWord), \
46620 - PHY_QueryRFReg(Adapter, RF90_PATH_A, 0x24, bMaskDWord));
46621 + PHY_QueryRFReg(Adapter, RF_PATH_A, 0x24, bMaskDWord));
46622 */
46623 }
46624
46625 @@ -1730,20 +1907,6 @@ dm_TXPowerTrackingCallback_ThermalMeter_92C(
46626 rtl8192c_PHY_IQCalibrate(Adapter,_FALSE);
46627 }
46628
46629 - if(delta_DPK != 0)
46630 - {
46631 - delta_DPK = ThermalValue - pHalData->EEPROMThermalMeter;
46632 -
46633 - //if(pdmpriv->bDPPathAOK || pdmpriv->bDPPathBOK)
46634 - // DBG_8192C("TxPwrTracking delata_DPK = %d\n", delta_DPK);
46635 -
46636 - if(pdmpriv->bDPPathAOK)
46637 - PHY_SetBBReg(Adapter, 0xb68, 0x7c00, DPK_delta_mapping[0][((delta_DPK+13)/2)]);
46638 - if(pdmpriv->bDPPathBOK)
46639 - PHY_SetBBReg(Adapter, 0xb6c, 0x7c00, DPK_delta_mapping[1][((delta_DPK+13)/2)]);
46640 - pdmpriv->ThermalValue_DPK = ThermalValue;
46641 - }
46642 -
46643 //update thermal meter value
46644 if(pdmpriv->TxPowerTrackControl)
46645 pdmpriv->ThermalValue = ThermalValue;
46646 @@ -1819,7 +1982,7 @@ dm_CheckTXPowerTracking_ThermalMeter(
46647 if(!pdmpriv->TM_Trigger) //at least delay 1 sec
46648 {
46649 //pHalData->TxPowerCheckCnt++; //cosa add for debug
46650 - PHY_SetRFReg(Adapter, RF90_PATH_A, RF_T_METER, bRFRegOffsetMask, 0x60);
46651 + PHY_SetRFReg(Adapter, RF_PATH_A, RF_T_METER, bRFRegOffsetMask, 0x60);
46652 //DBG_8192C("Trigger 92C Thermal Meter!!\n");
46653
46654 pdmpriv->TM_Trigger = 1;
46655 @@ -2998,9 +3161,9 @@ dm_CheckRfCtrlGPIO(
46656 }
46657 }
46658 else if (IS_HARDWARE_TYPE_8192CU(Adapter) ||
46659 - IS_HARDWARE_TYPE_8723U(Adapter)||
46660 + IS_HARDWARE_TYPE_8723AU(Adapter)||
46661 IS_HARDWARE_TYPE_8192DU(Adapter) ||
46662 - IS_HARDWARE_TYPE_8723S(Adapter))
46663 + IS_HARDWARE_TYPE_8723AS(Adapter))
46664 { // Not support Selective suspend
46665 RT_TRACE(COMP_RF, DBG_LOUD, ("USB SS Disable\n"));
46666 if (SUPPORT_HW_RADIO_DETECT(Adapter))
46667 @@ -3260,14 +3423,14 @@ dm_CheckStatistics(
46668 return;
46669
46670 //2008.12.10 tynli Add for getting Current_Tx_Rate_Reg flexibly.
46671 - Adapter->HalFunc.GetHwRegHandler( Adapter, HW_VAR_INIT_TX_RATE, (pu1Byte)(&Adapter->TxStats.CurrentInitTxRate) );
46672 + rtw_hal_get_hwreg( Adapter, HW_VAR_INIT_TX_RATE, (pu1Byte)(&Adapter->TxStats.CurrentInitTxRate) );
46673
46674 // Calculate current Tx Rate(Successful transmited!!)
46675
46676 // Calculate current Rx Rate(Successful received!!)
46677
46678 //for tx tx retry count
46679 - Adapter->HalFunc.GetHwRegHandler( Adapter, HW_VAR_RETRY_COUNT, (pu1Byte)(&Adapter->TxStats.NumTxRetryCount) );
46680 + rtw_hal_get_hwreg( Adapter, HW_VAR_RETRY_COUNT, (pu1Byte)(&Adapter->TxStats.NumTxRetryCount) );
46681 #endif
46682 }
46683
46684 @@ -3275,10 +3438,14 @@ static void dm_CheckPbcGPIO(_adapter *padapter)
46685 {
46686 u8 tmp1byte;
46687 u8 bPbcPressed = _FALSE;
46688 + int i=0;
46689
46690 if(!padapter->registrypriv.hw_wps_pbc)
46691 return;
46692
46693 + do
46694 + {
46695 + i++;
46696 #ifdef CONFIG_USB_HCI
46697 tmp1byte = rtw_read8(padapter, GPIO_IO_SEL);
46698 tmp1byte |= (HAL_8192C_HW_GPIO_WPS_BIT);
46699 @@ -3294,30 +3461,44 @@ static void dm_CheckPbcGPIO(_adapter *padapter)
46700 tmp1byte =rtw_read8(padapter, GPIO_IN);
46701
46702 if (tmp1byte == 0xff)
46703 - return ;
46704 + {
46705 + bPbcPressed = _FALSE;
46706 + break ;
46707 + }
46708
46709 if (tmp1byte&HAL_8192C_HW_GPIO_WPS_BIT)
46710 {
46711 bPbcPressed = _TRUE;
46712 +
46713 + if(i<=3)
46714 + rtw_msleep_os(50);
46715 }
46716 #else
46717 tmp1byte = rtw_read8(padapter, GPIO_IN);
46718 //RT_TRACE(COMP_IO, DBG_TRACE, ("dm_CheckPbcGPIO - %x\n", tmp1byte));
46719
46720 if (tmp1byte == 0xff || padapter->init_adpt_in_progress)
46721 - return ;
46722 + {
46723 + bPbcPressed = _FALSE;
46724 + break ;
46725 + }
46726
46727 if((tmp1byte&HAL_8192C_HW_GPIO_WPS_BIT)==0)
46728 {
46729 bPbcPressed = _TRUE;
46730 +
46731 + if(i<=3)
46732 + rtw_msleep_os(50);
46733 }
46734 -#endif
46735 +#endif
46736
46737 + }while(i<=3 && bPbcPressed == _TRUE);
46738 +
46739 if( _TRUE == bPbcPressed)
46740 {
46741 // Here we only set bPbcPressed to true
46742 // After trigger PBC, the variable will be set to false
46743 - DBG_8192C("CheckPbcGPIO - PBC is pressed\n");
46744 + DBG_8192C("CheckPbcGPIO - PBC is pressed, try_cnt=%d\n", i-1);
46745
46746 #ifdef RTK_DMP_PLATFORM
46747 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12))
46748 @@ -3336,7 +3517,7 @@ static void dm_CheckPbcGPIO(_adapter *padapter)
46749 rtw_signal_process(padapter->pid[0], SIGUSR1);
46750 #endif
46751 #endif
46752 - }
46753 + }
46754 }
46755
46756 #ifdef CONFIG_PCI_HCI
46757 @@ -3641,9 +3822,7 @@ rtl8192c_dm_RF_Saving(
46758 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
46759 struct dm_priv *pdmpriv = &pHalData->dmpriv;
46760 PS_T *pPSTable = &pdmpriv->DM_PSTable;
46761 -
46762 - if(pAdapter->registrypriv.intel_class_mode==1)
46763 - return;
46764 +
46765 if(pdmpriv->initialize == 0){
46766 pdmpriv->rf_saving_Reg874 = (PHY_QueryBBReg(pAdapter, rFPGA0_XCD_RFInterfaceSW, bMaskDWord)&0x1CC000)>>14;
46767 pdmpriv->rf_saving_RegC70 = (PHY_QueryBBReg(pAdapter, rOFDM0_AGCParameter1, bMaskDWord)&BIT3)>>3;
46768 @@ -4424,7 +4603,7 @@ void rtl8192c_init_dm_priv(IN PADAPTER Adapter)
46769 PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
46770 struct dm_priv *pdmpriv = &pHalData->dmpriv;
46771
46772 - _rtw_memset(pdmpriv, 0, sizeof(struct dm_priv));
46773 + //_rtw_memset(pdmpriv, 0, sizeof(struct dm_priv));
46774
46775 #ifdef CONFIG_SW_ANTENNA_DIVERSITY
46776 _init_timer(&(pdmpriv->SwAntennaSwitchTimer), Adapter->pnetdev , dm_SW_AntennaSwitchCallback, Adapter);
46777 @@ -4600,52 +4779,85 @@ rtl8192c_InitHalDm(
46778 {
46779 pdmpriv->INIDATA_RATE[i] = rtw_read8(Adapter, REG_INIDATA_RATE_SEL+i) & 0x3f;
46780 }
46781 +
46782 +#ifdef CONFIG_DM_ADAPTIVITY
46783 + pdmpriv->DMFlag |= DYNAMIC_FUNC_ADAPTIVITY;
46784 + dm_adaptivity_init(Adapter);
46785 +#endif
46786 +
46787 }
46788 -VOID
46789 -rtl8192c_HalDmPollingC2HEvt(
46790 - IN PADAPTER padapter
46791 - )
46792 +
46793 +#ifdef CONFIG_CONCURRENT_MODE
46794 +static void FindMinimumRSSI(PADAPTER Adapter)
46795 {
46796 - u8 trigger=0,evt_id=0,evt_len=0,idx=0,tmp8=0,evt_seq=0;
46797 - u8 evt_buf[15];
46798 -
46799 - trigger=rtw_read8(padapter,REG_C2HEVT_CLEAR);
46800 - while (trigger ==0xFF)
46801 - {
46802 - tmp8=rtw_read8(padapter,REG_C2HEVT_MSG_NORMAL);
46803 - evt_id=tmp8&0xf;
46804 - evt_len=(tmp8&0xf0)>>4;
46805 - evt_seq=rtw_read8(padapter,REG_C2HEVT_MSG_NORMAL+1);
46806 - DBG_8192C(" %s evt_id =0x%x evt_len=0x%x evt_seq=0x%x\n",__FUNCTION__,evt_id,evt_len,evt_seq);
46807 - for(idx=0;idx<evt_len;idx++){
46808 - evt_buf[idx]=rtw_read8(padapter,(REG_C2HEVT_MSG_NORMAL+2+idx));
46809 - }
46810 - switch(evt_id){
46811 - case EVT_EXT_RA_RPT_EID:
46812 - DBG_8192C(" %s EVT_EXT_RA_RPT_EID[0x%x] evt_len=0x%x\n",__FUNCTION__,evt_id,evt_len);
46813 - {
46814 - u8 mac_id=evt_buf[0],num_sta=evt_len-1;
46815 - struct sta_priv *pstapriv=&padapter->stapriv;
46816 - struct sta_info *psta=NULL;
46817 - DBG_8192C(" %s mac_id=%d\n",__FUNCTION__,mac_id);
46818 - for(idx=0;idx<num_sta;idx++){
46819 - psta=pstapriv->sta_aid[mac_id-2+idx];
46820 - if(psta !=NULL){
46821 - psta->init_rate=evt_buf[idx];
46822 - DBG_8192C(" %s mac_id=%d psta->init_rate=0x%x\n",__FUNCTION__,mac_id,psta->init_rate);
46823 - }
46824 - }
46825 -
46826 - }
46827 - default:
46828 - DBG_8192C(" %s evt_id =0x%x evt_len=0x%x\n",__FUNCTION__,evt_id,evt_len);
46829 - }
46830 - rtw_write8(padapter, REG_C2HEVT_CLEAR,0x0);
46831 - rtw_mdelay_os(1);
46832 - trigger=rtw_read8(padapter,REG_C2HEVT_CLEAR);
46833 + PHAL_DATA_TYPE pbuddy_HalData;
46834 + struct dm_priv *pbuddy_dmpriv;
46835 + PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
46836 + struct dm_priv *pdmpriv = &pHalData->dmpriv;
46837 + PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
46838 + struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
46839 +
46840 + if(!rtw_buddy_adapter_up(Adapter))
46841 + return;
46842 +
46843 + pbuddy_HalData = GET_HAL_DATA(pbuddy_adapter);
46844 + pbuddy_dmpriv = &pbuddy_HalData->dmpriv;
46845 +
46846 + //get min. [PWDB] when both interfaces are connected
46847 + if((check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE
46848 + && Adapter->stapriv.asoc_sta_count > 2
46849 + && check_buddy_fwstate(Adapter, _FW_LINKED)) ||
46850 + (check_buddy_fwstate(Adapter, WIFI_AP_STATE) == _TRUE
46851 + && pbuddy_adapter->stapriv.asoc_sta_count > 2
46852 + && check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) ||
46853 + (check_fwstate(pmlmepriv, WIFI_STATION_STATE)
46854 + && check_fwstate(pmlmepriv, _FW_LINKED)
46855 + && check_buddy_fwstate(Adapter,WIFI_STATION_STATE)
46856 + && check_buddy_fwstate(Adapter,_FW_LINKED)))
46857 + {
46858 + if(pdmpriv->UndecoratedSmoothedPWDB > pbuddy_dmpriv->UndecoratedSmoothedPWDB)
46859 + pdmpriv->UndecoratedSmoothedPWDB = pbuddy_dmpriv->UndecoratedSmoothedPWDB;
46860 + }//primary interface is not connected
46861 + else if((check_buddy_fwstate(Adapter, WIFI_AP_STATE) == _TRUE
46862 + && pbuddy_adapter->stapriv.asoc_sta_count > 2) ||
46863 + (check_buddy_fwstate(Adapter,WIFI_STATION_STATE)
46864 + && check_buddy_fwstate(Adapter,_FW_LINKED)))
46865 + {
46866 + pdmpriv->UndecoratedSmoothedPWDB = pbuddy_dmpriv->UndecoratedSmoothedPWDB;
46867 }
46868 - //DBG_8192C(" %s End\n",__FUNCTION__);
46869 -}
46870 + //secondary is not connected
46871 + else if((check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE
46872 + && Adapter->stapriv.asoc_sta_count > 2) ||
46873 + (check_fwstate(pmlmepriv, WIFI_STATION_STATE)
46874 + && check_fwstate(pmlmepriv, _FW_LINKED)))
46875 + {
46876 + pbuddy_dmpriv->UndecoratedSmoothedPWDB = 0;
46877 + }
46878 + //both interfaces are not connected
46879 + else
46880 + {
46881 + pdmpriv->UndecoratedSmoothedPWDB = 0;
46882 + pbuddy_dmpriv->UndecoratedSmoothedPWDB = 0;
46883 + }
46884 +
46885 + //primary interface is ap mode
46886 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE && Adapter->stapriv.asoc_sta_count > 2)
46887 + {
46888 + pbuddy_dmpriv->EntryMinUndecoratedSmoothedPWDB = 0;
46889 + }//secondary interface is ap mode
46890 + else if(check_buddy_fwstate(Adapter, WIFI_AP_STATE) == _TRUE && pbuddy_adapter->stapriv.asoc_sta_count > 2)
46891 + {
46892 + pdmpriv->EntryMinUndecoratedSmoothedPWDB = pbuddy_dmpriv->EntryMinUndecoratedSmoothedPWDB;
46893 + }
46894 + else //both interfaces are not ap mode
46895 + {
46896 + pdmpriv->EntryMinUndecoratedSmoothedPWDB = pbuddy_dmpriv->EntryMinUndecoratedSmoothedPWDB = 0;
46897 + }
46898 +
46899 +}
46900 +
46901 +#endif //CONFIG_CONCURRENT_MODE
46902 +
46903 VOID
46904 rtl8192c_HalDmWatchDog(
46905 IN PADAPTER Adapter
46906 @@ -4653,21 +4865,45 @@ rtl8192c_HalDmWatchDog(
46907 {
46908 BOOLEAN bFwCurrentInPSMode = _FALSE;
46909 BOOLEAN bFwPSAwake = _TRUE;
46910 + u8 hw_init_completed = _FALSE;
46911 PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
46912 struct dm_priv *pdmpriv = &pHalData->dmpriv;
46913 + struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
46914 +#ifdef CONFIG_CONCURRENT_MODE
46915 + PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
46916 +#endif //CONFIG_CONCURRENT_MODE
46917 +
46918 + #if defined(CONFIG_CONCURRENT_MODE)
46919 + if (Adapter->isprimary == _FALSE && pbuddy_adapter) {
46920 + hw_init_completed = pbuddy_adapter->hw_init_completed;
46921 + } else
46922 + #endif
46923 + {
46924 + hw_init_completed = Adapter->hw_init_completed;
46925 + }
46926
46927 + if (hw_init_completed == _FALSE)
46928 + goto skip_dm;
46929
46930 #ifdef CONFIG_LPS
46931 - bFwCurrentInPSMode = Adapter->pwrctrlpriv.bFwCurrentInPSMode;
46932 - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bFwPSAwake));
46933 + #if defined(CONFIG_CONCURRENT_MODE)
46934 + if (Adapter->iface_type != IFACE_PORT0 && pbuddy_adapter) {
46935 + bFwCurrentInPSMode = pbuddy_adapter->pwrctrlpriv.bFwCurrentInPSMode;
46936 + rtw_hal_get_hwreg(pbuddy_adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bFwPSAwake));
46937 + } else
46938 + #endif
46939 + {
46940 + bFwCurrentInPSMode = Adapter->pwrctrlpriv.bFwCurrentInPSMode;
46941 + rtw_hal_get_hwreg(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bFwPSAwake));
46942 + }
46943 #endif
46944
46945 -#ifdef CONFIG_P2P
46946 +#ifdef CONFIG_P2P_PS
46947 // Fw is under p2p powersaving mode, driver should stop dynamic mechanism.
46948 // modifed by thomas. 2011.06.11.
46949 - if(Adapter->wdinfo.p2p_ps_enable)
46950 + if(Adapter->wdinfo.p2p_ps_mode)
46951 bFwPSAwake = _FALSE;
46952 -#endif //CONFIG_P2P
46953 +#endif // CONFIG_P2P_PS
46954
46955 // Stop dynamic mechanism when:
46956 // 1. RF is OFF. (No need to do DM.)
46957 @@ -4679,7 +4915,7 @@ rtl8192c_HalDmWatchDog(
46958 // 4. RFChangeInProgress is TRUE. (Prevent from broken by IPS/HW/SW Rf off.)
46959 // Noted by tynli. 2010.06.01.
46960 //if(rfState == eRfOn)
46961 - if( (Adapter->hw_init_completed == _TRUE)
46962 + if( (hw_init_completed == _TRUE)
46963 && ((!bFwCurrentInPSMode) && bFwPSAwake))
46964 {
46965 //
46966 @@ -4692,14 +4928,21 @@ rtl8192c_HalDmWatchDog(
46967 //
46968 PWDB_Monitor(Adapter);
46969
46970 + dm_RSSIMonitorCheck(Adapter);
46971 +
46972 +#ifdef CONFIG_CONCURRENT_MODE
46973 + if(Adapter->adapter_type > PRIMARY_ADAPTER)
46974 + goto _record_initrate;
46975 +
46976 + FindMinimumRSSI(Adapter);
46977 +#endif
46978 +
46979 //
46980 // Dynamic Initial Gain mechanism.
46981 //
46982 -
46983 - dm_RSSIMonitorCheck(Adapter);
46984 -
46985 dm_FalseAlarmCounterStatistics(Adapter);
46986 dm_DIG(Adapter);
46987 + dm_adaptivity(Adapter);
46988
46989 //
46990 //Dynamic BB Power Saving Mechanism
46991 @@ -4714,7 +4957,12 @@ rtl8192c_HalDmWatchDog(
46992 //
46993 // Tx Power Tracking.
46994 //
46995 - rtl8192c_dm_CheckTXPowerTracking(Adapter);
46996 +#if MP_DRIVER == 0
46997 +#ifdef CONFIG_BUSY_TRAFFIC_SKIP_PWR_TRACK
46998 + if(pmlmepriv->LinkDetectInfo.bBusyTraffic == _FALSE)
46999 +#endif //CONFIG_BUSY_TRAFFIC_SKIP_PWR_TRACK
47000 +#endif
47001 + rtl8192c_dm_CheckTXPowerTracking(Adapter);
47002
47003 //
47004 // Rate Adaptive by Rx Signal Strength mechanism.
47005 @@ -4757,24 +5005,38 @@ rtl8192c_HalDmWatchDog(
47006 // PlatformScheduleWorkItem(&(GET_HAL_DATA(Adapter)->HalResetWorkItem));
47007 #endif
47008
47009 -#ifdef SUPPORT_64_STA
47010 - rtl8192c_HalDmPollingC2HEvt(Adapter);
47011 -#endif //SUPPORT_64_STA
47012 +
47013 +_record_initrate:
47014 +
47015 // Read REG_INIDATA_RATE_SEL value for TXDESC.
47016 if(check_fwstate(&Adapter->mlmepriv, WIFI_STATION_STATE) == _TRUE)
47017 {
47018 pdmpriv->INIDATA_RATE[0] = rtw_read8(Adapter, REG_INIDATA_RATE_SEL) & 0x3f;
47019 +
47020 +#ifdef CONFIG_TDLS
47021 + if(Adapter->tdlsinfo.setup_state == TDLS_LINKED_STATE)
47022 + {
47023 + u8 i=1;
47024 + for(; i < (Adapter->tdlsinfo.macid_index) ; i++)
47025 + {
47026 + pdmpriv->INIDATA_RATE[i] = rtw_read8(Adapter, (REG_INIDATA_RATE_SEL+i)) & 0x3f;
47027 + }
47028 + }
47029 +#endif //CONFIG_TDLS
47030 +
47031 }
47032 else
47033 {
47034 u8 i;
47035 - for(i=1 ;( i < (Adapter->stapriv.asoc_sta_count + 1))&&(i <FW_CTRL_MACID ); i++)
47036 + for(i=1 ; i < (Adapter->stapriv.asoc_sta_count + 1); i++)
47037 {
47038 pdmpriv->INIDATA_RATE[i] = rtw_read8(Adapter, (REG_INIDATA_RATE_SEL+i)) & 0x3f;
47039 }
47040 }
47041 }
47042
47043 +skip_dm:
47044 +
47045 // Check GPIO to determine current RF on/off and Pbc status.
47046 // Check Hardware Radio ON/OFF or not
47047 //if(Adapter->MgntInfo.PowerSaveControl.bGpioRfSw)
47048 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c
47049 index e3e2ae9..b9e91d7 100644
47050 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c
47051 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c
47052 @@ -16,7 +16,7 @@
47053 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
47054 *
47055 *
47056 - *******************************************************************************/
47057 + ******************************************************************************/
47058
47059 #define _RTL8192C_HAL_INIT_C_
47060 #include <drv_conf.h>
47061 @@ -101,7 +101,7 @@ _FWDownloadEnable(
47062 rtw_write8(Adapter, REG_MCUFWDL, tmp&0xfe);
47063
47064 // Reserved for fw extension.
47065 - //rtw_write8(Adapter, REG_MCUFWDL+1, 0x00);
47066 + rtw_write8(Adapter, REG_MCUFWDL+1, 0x00);
47067 }
47068 }
47069
47070 @@ -123,22 +123,32 @@ _BlockWrite(
47071 u8 *bufferPtr = (u8 *)buffer;
47072 u32 *pu4BytePtr = (u32 *)buffer;
47073 u32 i, offset, blockCount, remainSize;
47074 + u8 remainFW[4] = {0, 0, 0, 0};
47075 + u8 *p = NULL;
47076
47077 blockCount = size / blockSize;
47078 remainSize = size % blockSize;
47079
47080 for(i = 0 ; i < blockCount ; i++){
47081 offset = i * blockSize;
47082 - rtw_write32(Adapter, (FW_8192C_START_ADDRESS + offset), *(pu4BytePtr + i));
47083 + rtw_write32(Adapter, (FW_8192C_START_ADDRESS + offset), cpu_to_le32(*(pu4BytePtr + i)));
47084 }
47085
47086 + p = (u8*)((u32*)(bufferPtr + blockCount * blockSize));
47087 if(remainSize){
47088 - offset = blockCount * blockSize;
47089 - bufferPtr += offset;
47090 -
47091 - for(i = 0 ; i < remainSize ; i++){
47092 - rtw_write8(Adapter, (FW_8192C_START_ADDRESS + offset + i), *(bufferPtr + i));
47093 + switch (remainSize) {
47094 + case 0:
47095 + break;
47096 + case 3:
47097 + remainFW[2]=*(p+2);
47098 + case 2:
47099 + remainFW[1]=*(p+1);
47100 + case 1:
47101 + remainFW[0]=*(p);
47102 + ret = rtw_write32(Adapter, (FW_8192C_START_ADDRESS + blockCount * blockSize),
47103 + le32_to_cpu(*(u32*)remainFW));
47104 }
47105 + return ret;
47106 }
47107 #else
47108
47109 @@ -256,50 +266,36 @@ _WriteFW(
47110 // We can remove _ReadChipVersion from ReadAdapterInfo8192C later.
47111
47112 int ret = _SUCCESS;
47113 - BOOLEAN isNormalChip;
47114 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
47115 -
47116 - isNormalChip = IS_NORMAL_CHIP(pHalData->VersionID);
47117 -
47118 - if(isNormalChip){
47119 - u32 pageNums,remainSize ;
47120 - u32 page,offset;
47121 - u8* bufferPtr = (u8*)buffer;
47122 + u32 pageNums,remainSize ;
47123 + u32 page,offset;
47124 + u8* bufferPtr = (u8*)buffer;
47125
47126 #ifdef CONFIG_PCI_HCI
47127 - // 20100120 Joseph: Add for 88CE normal chip.
47128 - // Fill in zero to make firmware image to dword alignment.
47129 - _FillDummy(bufferPtr, &size);
47130 + // 20100120 Joseph: Add for 88CE normal chip.
47131 + // Fill in zero to make firmware image to dword alignment.
47132 +// _FillDummy(bufferPtr, &size);
47133 #endif
47134
47135 - pageNums = size / MAX_PAGE_SIZE ;
47136 - //RT_ASSERT((pageNums <= 4), ("Page numbers should not greater then 4 \n"));
47137 - remainSize = size % MAX_PAGE_SIZE;
47138 + pageNums = size / MAX_PAGE_SIZE ;
47139 + //RT_ASSERT((pageNums <= 4), ("Page numbers should not greater then 4 \n"));
47140 + remainSize = size % MAX_PAGE_SIZE;
47141 +
47142 + for(page = 0; page < pageNums; page++){
47143 + offset = page *MAX_PAGE_SIZE;
47144 + ret = _PageWrite(Adapter,page, (bufferPtr+offset),MAX_PAGE_SIZE);
47145
47146 - for(page = 0; page < pageNums; page++){
47147 - offset = page *MAX_PAGE_SIZE;
47148 - ret = _PageWrite(Adapter,page, (bufferPtr+offset),MAX_PAGE_SIZE);
47149 -
47150 - if(ret == _FAIL)
47151 - goto exit;
47152 - }
47153 - if(remainSize){
47154 - offset = pageNums *MAX_PAGE_SIZE;
47155 - page = pageNums;
47156 - ret = _PageWrite(Adapter,page, (bufferPtr+offset),remainSize);
47157 -
47158 - if(ret == _FAIL)
47159 - goto exit;
47160 - }
47161 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("_WriteFW Done- for Normal chip.\n"));
47162 + if(ret == _FAIL)
47163 + goto exit;
47164 }
47165 - else {
47166 - ret = _BlockWrite(Adapter,buffer,size);
47167 + if(remainSize){
47168 + offset = pageNums *MAX_PAGE_SIZE;
47169 + page = pageNums;
47170 + ret = _PageWrite(Adapter,page, (bufferPtr+offset),remainSize);
47171
47172 if(ret == _FAIL)
47173 goto exit;
47174 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("_WriteFW Done- for Test chip.\n"));
47175 - }
47176 + }
47177 + //RT_TRACE(COMP_INIT, DBG_LOUD, ("_WriteFW Done- for Normal chip.\n"));
47178
47179 exit:
47180 return ret;
47181 @@ -311,7 +307,6 @@ static int _FWFreeToGo(
47182 {
47183 u32 counter = 0;
47184 u32 value32;
47185 - u8 value8;
47186 u32 restarted = _FALSE;
47187
47188 // polling CheckSum report
47189 @@ -328,10 +323,10 @@ static int _FWFreeToGo(
47190 //RT_TRACE(COMP_INIT, DBG_LOUD, ("Checksum report OK ! REG_MCUFWDL:0x%08x .\n",value32));
47191
47192
47193 - value8 = rtw_read8(Adapter, REG_MCUFWDL);
47194 - value8 |= MCUFWDL_RDY;
47195 - value8 &= ~WINTINI_RDY;
47196 - rtw_write8(Adapter, REG_MCUFWDL, value8);
47197 + value32 = rtw_read32(Adapter, REG_MCUFWDL);
47198 + value32 |= MCUFWDL_RDY;
47199 + value32 &= ~WINTINI_RDY;
47200 + rtw_write32(Adapter, REG_MCUFWDL, value32);
47201
47202
47203 POLLING_FW_READY:
47204 @@ -432,7 +427,7 @@ int FirmwareDownload92C(
47205 s8 R92CFwImageFileName_TSMC_WW[] ={RTL8192C_FW_TSMC_WW_IMG};
47206 s8 R92CFwImageFileName_UMC_WW[] ={RTL8192C_FW_UMC_WW_IMG};
47207 s8 R92CFwImageFileName_UMC_B_WW[] ={RTL8192C_FW_UMC_B_WW_IMG};
47208 -#endif
47209 +#endif //CONFIG_WOWLAN
47210
47211 //s8 R8723FwImageFileName_UMC[] ={RTL8723_FW_UMC_IMG};
47212 u8* FwImage = NULL;
47213 @@ -442,7 +437,7 @@ int FirmwareDownload92C(
47214 u8* FwImageWoWLAN;
47215 u32 FwImageWoWLANLen;
47216 char* pFwImageFileName_WoWLAN;
47217 -#endif
47218 +#endif //CONFIG_WOWLAN
47219 u8* pucMappedFile = NULL;
47220 //vivi, merge 92c and 92s into one driver, 20090817
47221 //vivi modify this temply, consider it later!!!!!!!!
47222 @@ -461,55 +456,43 @@ int FirmwareDownload92C(
47223 goto Exit;
47224 }
47225
47226 - if(IS_NORMAL_CHIP(pHalData->VersionID))
47227 + if(IS_VENDOR_UMC_A_CUT(pHalData->VersionID) && !IS_92C_SERIAL(pHalData->VersionID))
47228 {
47229 - if(IS_VENDOR_UMC_A_CUT(pHalData->VersionID) && !IS_92C_SERIAL(pHalData->VersionID))
47230 - {
47231 - pFwImageFileName = R92CFwImageFileName_UMC;
47232 - FwImage = Rtl819XFwUMCACutImageArray;
47233 - FwImageLen = UMCACutImgArrayLength;
47234 + pFwImageFileName = R92CFwImageFileName_UMC;
47235 + FwImage = Rtl819XFwUMCACutImageArray;
47236 + FwImageLen = UMCACutImgArrayLength;
47237 #ifdef CONFIG_WOWLAN
47238 - pFwImageFileName_WoWLAN = R92CFwImageFileName_UMC_WW;
47239 - FwImageWoWLAN= Rtl8192C_FwUMCWWImageArray;
47240 - FwImageWoWLANLen =UMCACutWWImgArrayLength ;
47241 -#endif
47242 - DBG_8192C(" ===> FirmwareDownload91C() fw:Rtl819XFwImageArray_UMC\n");
47243 - }
47244 - else if(IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
47245 - {
47246 - // The ROM code of UMC B-cut Fw is the same as TSMC. by tynli. 2011.01.14.
47247 - pFwImageFileName = R92CFwImageFileName_UMC_B;
47248 - FwImage = Rtl819XFwUMCBCutImageArray;
47249 - FwImageLen = UMCBCutImgArrayLength;
47250 + pFwImageFileName_WoWLAN = R92CFwImageFileName_UMC_WW;
47251 + FwImageWoWLAN= Rtl8192C_FwUMCWWImageArray;
47252 + FwImageWoWLANLen =UMCACutWWImgArrayLength ;
47253 +#endif //CONFIG_WOWLAN
47254 + DBG_8192C(" ===> FirmwareDownload91C() fw:Rtl819XFwImageArray_UMC\n");
47255 + }
47256 + else if(IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
47257 + {
47258 + // The ROM code of UMC B-cut Fw is the same as TSMC. by tynli. 2011.01.14.
47259 + pFwImageFileName = R92CFwImageFileName_UMC_B;
47260 + FwImage = Rtl819XFwUMCBCutImageArray;
47261 + FwImageLen = UMCBCutImgArrayLength;
47262 #ifdef CONFIG_WOWLAN
47263 - pFwImageFileName_WoWLAN = R92CFwImageFileName_UMC_B_WW;
47264 - FwImageWoWLAN= Rtl8192C_FwUMCBCutWWImageArray;
47265 - FwImageWoWLANLen =UMCBCutWWImgArrayLength ;
47266 -#endif
47267 -
47268 - DBG_8192C(" ===> FirmwareDownload91C() fw:Rtl819XFwImageArray_UMC_B\n");
47269 - }
47270 - else
47271 - {
47272 - pFwImageFileName = R92CFwImageFileName_TSMC;
47273 - FwImage = Rtl819XFwTSMCImageArray;
47274 - FwImageLen = TSMCImgArrayLength;
47275 -#ifdef CONFIG_WOWLAN
47276 - pFwImageFileName_WoWLAN = R92CFwImageFileName_TSMC_WW;
47277 - FwImageWoWLAN= Rtl8192C_FwTSMCWWImageArray;
47278 - FwImageWoWLANLen =TSMCWWImgArrayLength ;
47279 -#endif
47280 - DBG_8192C(" ===> FirmwareDownload91C() fw:Rtl819XFwImageArray_TSMC\n");
47281 - }
47282 + pFwImageFileName_WoWLAN = R92CFwImageFileName_UMC_B_WW;
47283 + FwImageWoWLAN= Rtl8192C_FwUMCBCutWWImageArray;
47284 + FwImageWoWLANLen =UMCBCutWWImgArrayLength ;
47285 +#endif //CONFIG_WOWLAN
47286 +
47287 + DBG_8192C(" ===> FirmwareDownload91C() fw:Rtl819XFwImageArray_UMC_B\n");
47288 }
47289 else
47290 {
47291 - #if 0
47292 - pFwImageFileName = TestChipFwFile;
47293 - FwImage = Rtl8192CTestFwImg;
47294 - FwImageLen = Rtl8192CTestFwImgLen;
47295 - RT_TRACE(COMP_INIT, DBG_LOUD, (" ===> FirmwareDownload91C() fw:Rtl8192CTestFwImg\n"));
47296 - #endif
47297 + pFwImageFileName = R92CFwImageFileName_TSMC;
47298 + FwImage = Rtl819XFwTSMCImageArray;
47299 + FwImageLen = TSMCImgArrayLength;
47300 +#ifdef CONFIG_WOWLAN
47301 + pFwImageFileName_WoWLAN = R92CFwImageFileName_TSMC_WW;
47302 + FwImageWoWLAN= Rtl8192C_FwTSMCWWImageArray;
47303 + FwImageWoWLANLen =TSMCWWImgArrayLength ;
47304 +#endif //CONFIG_WOWLAN
47305 + DBG_8192C(" ===> FirmwareDownload91C() fw:Rtl819XFwImageArray_TSMC\n");
47306 }
47307
47308 //RT_TRACE(COMP_INIT, DBG_LOUD, (" ===> FirmwareDownload91C() fw:%s\n", pFwImageFileName));
47309 @@ -559,7 +542,7 @@ int FirmwareDownload92C(
47310 pFirmware->szWoWLANFwBuffer=FwImageWoWLAN;
47311 pFirmware->ulWoWLANFwLength = FwImageWoWLANLen;
47312 }
47313 -#endif
47314 +#endif //CONFIG_WOWLAN
47315
47316 break;
47317 }
47318 @@ -571,23 +554,20 @@ int FirmwareDownload92C(
47319 pFwHdr = (PRT_8192C_FIRMWARE_HDR)pFirmware->szWoWLANFwBuffer;
47320 }
47321 else
47322 -#endif
47323 +#endif //CONFIG_WOWLAN
47324 {
47325 - #ifdef DBG_FW_STORE_FILE_PATH //used to store firmware to file...
47326 - if(pFirmware->ulFwLength > 0)
47327 - {
47328 - rtw_store_to_file(DBG_FW_STORE_FILE_PATH, pFirmware->szFwBuffer, pFirmware->ulFwLength);
47329 - }
47330 - #endif
47331 -
47332 -
47333 -
47334 + #ifdef DBG_FW_STORE_FILE_PATH //used to store firmware to file...
47335 + if(pFirmware->ulFwLength > 0)
47336 + {
47337 + rtw_store_to_file(DBG_FW_STORE_FILE_PATH, pFirmware->szFwBuffer, pFirmware->ulFwLength);
47338 + }
47339 + #endif
47340
47341 - pFirmwareBuf = pFirmware->szFwBuffer;
47342 - FirmwareLen = pFirmware->ulFwLength;
47343 + pFirmwareBuf = pFirmware->szFwBuffer;
47344 + FirmwareLen = pFirmware->ulFwLength;
47345
47346 - // To Check Fw header. Added by tynli. 2009.12.04.
47347 - pFwHdr = (PRT_8192C_FIRMWARE_HDR)pFirmware->szFwBuffer;
47348 + // To Check Fw header. Added by tynli. 2009.12.04.
47349 + pFwHdr = (PRT_8192C_FIRMWARE_HDR)pFirmware->szFwBuffer;
47350 }
47351 pHalData->FirmwareVersion = le16_to_cpu(pFwHdr->Version);
47352 pHalData->FirmwareSubVersion = le16_to_cpu(pFwHdr->Subversion);
47353 @@ -634,6 +614,7 @@ int FirmwareDownload92C(
47354 break;
47355 }
47356 _FWDownloadEnable(Adapter, _FALSE);
47357 +
47358 if(_SUCCESS != rtStatus){
47359 DBG_8192C("DL Firmware failed!\n");
47360 goto Exit;
47361 @@ -671,7 +652,7 @@ InitializeFirmwareVars92C(
47362 pHalData->LastHMEBoxNum = 0;
47363 }
47364
47365 -
47366 +#ifdef CONFIG_WOWLAN
47367 //===========================================
47368
47369 //
47370 @@ -716,7 +697,7 @@ SetFwRelatedForWoWLAN8192CU(
47371
47372 }
47373 }
47374 -
47375 +#endif // CONFIG_WOWLAN
47376
47377 #ifdef CONFIG_BT_COEXIST
47378 static void _update_bt_param(_adapter *padapter)
47379 @@ -812,7 +793,6 @@ void rtl8192c_ReadBluetoothCoexistInfo(
47380 )
47381 {
47382 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
47383 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
47384 struct btcoexist_priv *pbtpriv = &(pHalData->bt_coexist);
47385 u8 rf_opt4;
47386
47387 @@ -825,19 +805,13 @@ void rtl8192c_ReadBluetoothCoexistInfo(
47388 return;
47389 }
47390
47391 - if(isNormal)
47392 - {
47393 - pbtpriv->BT_Coexist = (((PROMContent[EEPROM_RF_OPT1]&BOARD_TYPE_NORMAL_MASK)>>5) == BOARD_USB_COMBO)?_TRUE:_FALSE; // bit [7:5]
47394 - rf_opt4 = PROMContent[EEPROM_RF_OPT4];
47395 - pbtpriv->BT_CoexistType = ((rf_opt4&0xe)>>1); // bit [3:1]
47396 - pbtpriv->BT_Ant_Num = (rf_opt4&0x1); // bit [0]
47397 - pbtpriv->BT_Ant_isolation = ((rf_opt4&0x10)>>4); // bit [4]
47398 - pbtpriv->BT_RadioSharedType = ((rf_opt4&0x20)>>5); // bit [5]
47399 - }
47400 - else
47401 - {
47402 - pbtpriv->BT_Coexist = (PROMContent[EEPROM_RF_OPT4] >> 4) ? _TRUE : _FALSE;
47403 - }
47404 + pbtpriv->BT_Coexist = (((PROMContent[EEPROM_RF_OPT1]&BOARD_TYPE_NORMAL_MASK)>>5) == BOARD_USB_COMBO)?_TRUE:_FALSE; // bit [7:5]
47405 + rf_opt4 = PROMContent[EEPROM_RF_OPT4];
47406 + pbtpriv->BT_CoexistType = ((rf_opt4&0xe)>>1); // bit [3:1]
47407 + pbtpriv->BT_Ant_Num = (rf_opt4&0x1); // bit [0]
47408 + pbtpriv->BT_Ant_isolation = ((rf_opt4&0x10)>>4); // bit [4]
47409 + pbtpriv->BT_RadioSharedType = ((rf_opt4&0x20)>>5); // bit [5]
47410 +
47411 _update_bt_param(Adapter);
47412
47413 }
47414 @@ -859,7 +833,7 @@ rtl8192c_ReadChipVersion(
47415 {
47416 #if 0
47417 // Test chip.
47418 - if(IS_HARDWARE_TYPE_8723(Adapter)) {
47419 + if(IS_HARDWARE_TYPE_8723A(Adapter)) {
47420 ChipVersion |= ((value32 & VENDOR_ID) ? CHIP_VENDOR_UMC : 0);
47421 ChipVersion |= ((value32 & BT_FUNC) ? CHIP_8723: 0); // RTL8723 with BT function.
47422 }
47423 @@ -941,7 +915,7 @@ rtl8192c_ReadChipVersion(
47424 }
47425 else if(IS_8723_SERIES(ChipVersion))
47426 {
47427 - //RT_ASSERT(IS_HARDWARE_TYPE_8723(Adapter), ("Incorrect chip version!!\n"));
47428 + //RT_ASSERT(IS_HARDWARE_TYPE_8723A(Adapter), ("Incorrect chip version!!\n"));
47429 value32 = rtw_read32(Adapter, REG_GPIO_OUTSTS);
47430 ChipVersion |= ((value32 & RF_RL_ID)>>20); //ROM code version.
47431 }
47432 @@ -1035,35 +1009,22 @@ rtl8192c_ReadChipVersion(
47433 return ChipVersion;
47434 }
47435
47436 -
47437 -RT_CHANNEL_DOMAIN
47438 -_HalMapChannelPlan8192C(
47439 - IN PADAPTER Adapter,
47440 - IN u8 HalChannelPlan
47441 +void
47442 +rtl8192c_EfuseParseChnlPlan(
47443 + IN PADAPTER padapter,
47444 + IN u8* hwinfo,
47445 + IN BOOLEAN AutoLoadFail
47446 )
47447 {
47448 - RT_CHANNEL_DOMAIN rtChannelDomain;
47449 -
47450 - switch(HalChannelPlan)
47451 - {
47452 -#if 0 /* Not using EEPROM_CHANNEL_PLAN directly */
47453 - case EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN:
47454 - rtChannelDomain = RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN;
47455 - break;
47456 - case EEPROM_CHANNEL_PLAN_WORLD_WIDE_13:
47457 - rtChannelDomain = RT_CHANNEL_DOMAIN_WORLD_WIDE_13;
47458 - break;
47459 -#endif /* Not using EEPROM_CHANNEL_PLAN directly */
47460 - default:
47461 - if(HalChannelPlan == 0xFF)
47462 - rtChannelDomain = RT_CHANNEL_DOMAIN_WORLD_WIDE_13;
47463 - else
47464 - rtChannelDomain = (RT_CHANNEL_DOMAIN)HalChannelPlan;
47465 - break;
47466 - }
47467 -
47468 - return rtChannelDomain;
47469 -
47470 + padapter->mlmepriv.ChannelPlan = hal_com_get_channel_plan(
47471 + padapter
47472 + , hwinfo?hwinfo[EEPROM_CHANNEL_PLAN]:0xFF
47473 + , padapter->registrypriv.channel_plan
47474 + , RT_CHANNEL_DOMAIN_WORLD_WIDE_13
47475 + , AutoLoadFail
47476 + );
47477 +
47478 + DBG_871X("mlmepriv.ChannelPlan = 0x%02x\n", padapter->mlmepriv.ChannelPlan);
47479 }
47480
47481 u8 GetEEPROMSize8192C(PADAPTER Adapter)
47482 @@ -1079,42 +1040,6 @@ u8 GetEEPROMSize8192C(PADAPTER Adapter)
47483 return size;
47484 }
47485
47486 -void rtl8192c_HalSetBrateCfg(
47487 - IN PADAPTER Adapter,
47488 - IN u8 *mBratesOS,
47489 - OUT u16 *pBrateCfg
47490 -)
47491 -{
47492 - u8 is_brate;
47493 - u8 i;
47494 - u8 brate;
47495 -
47496 - for(i=0;i<NDIS_802_11_LENGTH_RATES_EX;i++)
47497 - {
47498 - is_brate = mBratesOS[i] & IEEE80211_BASIC_RATE_MASK;
47499 - brate = mBratesOS[i] & 0x7f;
47500 - if( is_brate )
47501 - {
47502 - switch(brate)
47503 - {
47504 - case IEEE80211_CCK_RATE_1MB: *pBrateCfg |= RATE_1M; break;
47505 - case IEEE80211_CCK_RATE_2MB: *pBrateCfg |= RATE_2M; break;
47506 - case IEEE80211_CCK_RATE_5MB: *pBrateCfg |= RATE_5_5M;break;
47507 - case IEEE80211_CCK_RATE_11MB: *pBrateCfg |= RATE_11M; break;
47508 - case IEEE80211_OFDM_RATE_6MB: *pBrateCfg |= RATE_6M; break;
47509 - case IEEE80211_OFDM_RATE_9MB: *pBrateCfg |= RATE_9M; break;
47510 - case IEEE80211_OFDM_RATE_12MB: *pBrateCfg |= RATE_12M; break;
47511 - case IEEE80211_OFDM_RATE_18MB: *pBrateCfg |= RATE_18M; break;
47512 - case IEEE80211_OFDM_RATE_24MB: *pBrateCfg |= RATE_24M; break;
47513 - case IEEE80211_OFDM_RATE_36MB: *pBrateCfg |= RATE_36M; break;
47514 - case IEEE80211_OFDM_RATE_48MB: *pBrateCfg |= RATE_48M; break;
47515 - case IEEE80211_OFDM_RATE_54MB: *pBrateCfg |= RATE_54M; break;
47516 - }
47517 - }
47518 -
47519 - }
47520 -}
47521 -
47522 void rtl8192c_free_hal_data(_adapter * padapter)
47523 {
47524 _func_enter_;
47525 @@ -1250,7 +1175,7 @@ rtl8192c_EfusePowerSwitch(
47526 {
47527 hal_EfusePowerSwitch_RTL8192C(pAdapter, bWrite, PwrState);
47528 }
47529 - else if(IS_HARDWARE_TYPE_8723(pAdapter))
47530 + else if(IS_HARDWARE_TYPE_8723A(pAdapter))
47531 {
47532 hal_EfusePowerSwitch_RTL8723(pAdapter, bWrite, PwrState);
47533 }
47534 @@ -1377,8 +1302,8 @@ ReadEFuse_RTL8192C(
47535 // 5. Calculate Efuse utilization.
47536 //
47537 efuse_usage = (u8)((efuse_utilized*100)/EFUSE_REAL_CONTENT_LEN);
47538 - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_utilized);
47539 - //Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_EFUSE_USAGE, (pu1Byte)&efuse_usage);
47540 + rtw_hal_set_hwreg(Adapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_utilized);
47541 + //rtw_hal_set_hwreg(Adapter, HW_VAR_EFUSE_USAGE, (pu1Byte)&efuse_usage);
47542 }
47543
47544 static VOID
47545 @@ -1539,8 +1464,8 @@ ReadEFuse_RTL8723(
47546 // 5. Calculate Efuse utilization.
47547 //
47548 efuse_usage = (u8)((efuse_utilized*100)/EFUSE_REAL_CONTENT_LEN);
47549 - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_utilized);
47550 - //Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_EFUSE_USAGE, (pu1Byte)&efuse_usage);
47551 + rtw_hal_set_hwreg(Adapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_utilized);
47552 + //rtw_hal_set_hwreg(Adapter, HW_VAR_EFUSE_USAGE, (pu1Byte)&efuse_usage);
47553 }
47554
47555 static BOOLEAN
47556 @@ -1561,7 +1486,7 @@ Hal_EfuseSwitchToBank(
47557 }
47558 else
47559 {
47560 - if(IS_HARDWARE_TYPE_8723(pAdapter) &&
47561 + if(IS_HARDWARE_TYPE_8723A(pAdapter) &&
47562 INCLUDE_MULTI_FUNC_BT(pAdapter))
47563 {
47564 value32 = rtw_read32(pAdapter, EFUSE_TEST);
47565 @@ -1828,7 +1753,7 @@ ReadEFuseByIC(
47566 {
47567 ReadEFuse_RTL8192C(Adapter, _offset, _size_byte, pbuf, bPseudoTest);
47568 }
47569 - else if(IS_HARDWARE_TYPE_8723(Adapter))
47570 + else if(IS_HARDWARE_TYPE_8723A(Adapter))
47571 {
47572 ReadEFuse_RTL8723(Adapter, _offset, _size_byte, pbuf, bPseudoTest);
47573 }
47574 @@ -1894,7 +1819,7 @@ Hal_EFUSEGetEfuseDefinition(
47575 {
47576 *pMax_section = EFUSE_MAX_SECTION;
47577 }
47578 - else if(IS_HARDWARE_TYPE_8723(pAdapter))
47579 + else if(IS_HARDWARE_TYPE_8723A(pAdapter))
47580 {
47581 *pMax_section = EFUSE_MAX_SECTION_8723;
47582 }
47583 @@ -1944,7 +1869,7 @@ Hal_EFUSEGetEfuseDefinition(
47584 {
47585 *pu2Tmp = (u16)EFUSE_MAP_LEN;
47586 }
47587 - else if(IS_HARDWARE_TYPE_8723(pAdapter))
47588 + else if(IS_HARDWARE_TYPE_8723A(pAdapter))
47589 {
47590 *pu2Tmp = (u16)EFUSE_MAP_LEN_8723;
47591 }
47592 @@ -2320,7 +2245,7 @@ hal_EfuseGetCurrentSize_8723(IN PADAPTER pAdapter,
47593 }
47594 else
47595 {
47596 - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr);
47597 + rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr);
47598 }
47599 //RTPRINT(FEEPROM, EFUSE_PG, ("hal_EfuseGetCurrentSize_8723(), start_efuse_addr = %d\n", efuse_addr));
47600
47601 @@ -2368,7 +2293,7 @@ hal_EfuseGetCurrentSize_8723(IN PADAPTER pAdapter,
47602 }
47603 else
47604 {
47605 - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr);
47606 + rtw_hal_set_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&efuse_addr);
47607 //RTPRINT(FEEPROM, EFUSE_PG, ("hal_EfuseGetCurrentSize_8723(), return %d\n", efuse_addr));
47608 }
47609
47610 @@ -2406,7 +2331,7 @@ rtl8192c_EfuseGetCurrentSize(
47611 {
47612 ret = hal_EfuseGetCurrentSize_8192C(pAdapter, bPseudoTest);
47613 }
47614 - else if(IS_HARDWARE_TYPE_8723(pAdapter))
47615 + else if(IS_HARDWARE_TYPE_8723A(pAdapter))
47616 {
47617 ret = hal_EfuseGetCurrentSize_8723(pAdapter, bPseudoTest);
47618 }
47619 @@ -2631,7 +2556,7 @@ Hal_EfusePgPacketRead( IN PADAPTER pAdapter,
47620 {
47621 ret = hal_EfusePgPacketRead_8192C(pAdapter, offset, data, bPseudoTest);
47622 }
47623 - else if(IS_HARDWARE_TYPE_8723(pAdapter))
47624 + else if(IS_HARDWARE_TYPE_8723A(pAdapter))
47625 {
47626 ret = hal_EfusePgPacketRead_8723(pAdapter, offset, data, bPseudoTest);
47627 }
47628 @@ -3044,7 +2969,7 @@ hal_EfusePartialWriteCheck(
47629 }
47630 else
47631 {
47632 - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&startAddr);
47633 + rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&startAddr);
47634 startAddr%=EFUSE_REAL_CONTENT_LEN;
47635 }
47636 }
47637 @@ -3533,7 +3458,7 @@ Hal_EfusePgPacketWrite(IN PADAPTER pAdapter,
47638 {
47639 ret = hal_EfusePgPacketWrite_8192C(pAdapter, offset, word_en, data, bPseudoTest);
47640 }
47641 - else if(IS_HARDWARE_TYPE_8723(pAdapter))
47642 + else if(IS_HARDWARE_TYPE_8723A(pAdapter))
47643 {
47644 ret = hal_EfusePgPacketWrite_8723(pAdapter, offset, word_en, data, bPseudoTest);
47645 }
47646 @@ -3591,7 +3516,62 @@ void rtl8192c_read_chip_version(PADAPTER pAdapter)
47647 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
47648 pHalData->VersionID = rtl8192c_ReadChipVersion(pAdapter);
47649 }
47650 +
47651 +void hal_notch_filter_8192c(_adapter *adapter, bool enable)
47652 +{
47653 + if (enable) {
47654 + DBG_871X("Enable notch filter\n");
47655 + rtw_write8(adapter, rOFDM0_RxDSP+1, rtw_read8(adapter, rOFDM0_RxDSP+1) | BIT1);
47656 + } else {
47657 + DBG_871X("Disable notch filter\n");
47658 + rtw_write8(adapter, rOFDM0_RxDSP+1, rtw_read8(adapter, rOFDM0_RxDSP+1) & ~BIT1);
47659 + }
47660 +}
47661 +
47662 +void hal_reset_security_engine_8192c(_adapter * adapter)
47663 +{
47664 + rtw_write8(adapter, 0x522, 0xFF);
47665 + rtw_write8(adapter, 0x21, 0x35);
47666 + rtw_usleep_os(300);
47667 + rtw_write8(adapter, 0x101, rtw_read8(adapter,0x101)&~0x02);
47668 + rtw_write8(adapter, 0x101, rtw_read8(adapter,0x101)|0x02);
47669 + rtw_write8(adapter, 0x21, 0x55);
47670 + rtw_write8(adapter, 0x522, 0x00);
47671 +}
47672 +
47673 +s32 c2h_id_filter_ccx_8192c(u8 id)
47674 +{
47675 + s32 ret = _FALSE;
47676 + if (id == C2H_CCX_TX_RPT)
47677 + ret = _TRUE;
47678
47679 + return ret;
47680 +}
47681 +
47682 +static s32 c2h_handler_8192c(_adapter *padapter, struct c2h_evt_hdr *c2h_evt)
47683 +{
47684 + s32 ret = _SUCCESS;
47685 + u8 i = 0;
47686 +
47687 + if (c2h_evt == NULL) {
47688 + DBG_8192C("%s c2h_evt is NULL\n",__FUNCTION__);
47689 + ret = _FAIL;
47690 + goto exit;
47691 + }
47692 +
47693 + switch (c2h_evt->id) {
47694 + case C2H_CCX_TX_RPT:
47695 + handle_txrpt_ccx_8192c(padapter, c2h_evt->payload);
47696 + break;
47697 + default:
47698 + ret = _FAIL;
47699 + break;
47700 + }
47701 +
47702 +exit:
47703 + return ret;
47704 +}
47705 +
47706 void rtl8192c_set_hal_ops(struct hal_ops *pHalFunc)
47707 {
47708 pHalFunc->free_hal_data = &rtl8192c_free_hal_data;
47709 @@ -3608,15 +3588,15 @@ void rtl8192c_set_hal_ops(struct hal_ops *pHalFunc)
47710 pHalFunc->Add_RateATid = &rtl8192c_Add_RateATid;
47711
47712 #ifdef CONFIG_ANTENNA_DIVERSITY
47713 - pHalFunc->SwAntDivBeforeLinkHandler = &SwAntDivBeforeLink8192C;
47714 - pHalFunc->SwAntDivCompareHandler = &SwAntDivCompare8192C;
47715 + pHalFunc->AntDivBeforeLinkHandler = &SwAntDivBeforeLink8192C;
47716 + pHalFunc->AntDivCompareHandler = &SwAntDivCompare8192C;
47717 #endif
47718
47719 pHalFunc->read_bbreg = &rtl8192c_PHY_QueryBBReg;
47720 pHalFunc->write_bbreg = &rtl8192c_PHY_SetBBReg;
47721 pHalFunc->read_rfreg = &rtl8192c_PHY_QueryRFReg;
47722 - pHalFunc->write_rfreg = &rtl8192c_PHY_SetRFReg;
47723 -
47724 + pHalFunc->write_rfreg = &rtl8192c_PHY_SetRFReg;
47725 +
47726 //Efuse related function
47727 pHalFunc->EfusePowerSwitch = &rtl8192c_EfusePowerSwitch;
47728 pHalFunc->ReadEFuse = &rtl8192c_ReadEFuse;
47729 @@ -3627,16 +3607,22 @@ void rtl8192c_set_hal_ops(struct hal_ops *pHalFunc)
47730 pHalFunc->Efuse_WordEnableDataWrite = &rtl8192c_Efuse_WordEnableDataWrite;
47731
47732 #ifdef DBG_CONFIG_ERROR_DETECT
47733 - pHalFunc->sreset_init_value = &rtl8192c_sreset_init_value;
47734 - pHalFunc->sreset_reset_value = &rtl8192c_sreset_reset_value;
47735 - pHalFunc->silentreset = &rtl8192c_silentreset_for_specific_platform;
47736 + pHalFunc->sreset_init_value = &sreset_init_value;
47737 + pHalFunc->sreset_reset_value = &sreset_reset_value;
47738 + pHalFunc->silentreset = &sreset_reset;
47739 pHalFunc->sreset_xmit_status_check = &rtl8192c_sreset_xmit_status_check;
47740 pHalFunc->sreset_linked_status_check = &rtl8192c_sreset_linked_status_check;
47741 - pHalFunc->sreset_get_wifi_status = &rtl8192c_sreset_get_wifi_status;
47742 + pHalFunc->sreset_get_wifi_status = &sreset_get_wifi_status;
47743 + pHalFunc->sreset_inprogress= &sreset_inprogress;
47744 #endif
47745
47746 #ifdef CONFIG_IOL
47747 pHalFunc->IOL_exec_cmds_sync = &rtl8192c_IOL_exec_cmds_sync;
47748 #endif
47749 + pHalFunc->hal_notch_filter = &hal_notch_filter_8192c;
47750 + pHalFunc->hal_reset_security_engine = hal_reset_security_engine_8192c;
47751 +
47752 + pHalFunc->c2h_handler = c2h_handler_8192c;
47753 + pHalFunc->c2h_id_filter_ccx = c2h_id_filter_ccx_8192c;
47754 }
47755
47756 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c
47757 index a3021a9..a4194c4 100644
47758 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c
47759 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c
47760 @@ -107,7 +107,7 @@ void Hal_mpt_SwitchRfSetting(PADAPTER pAdapter)
47761 {
47762 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
47763 struct mp_priv *pmp = &pAdapter->mppriv;
47764 - u8 ChannelToSw = pmp->channel, eRFPath = RF90_PATH_A;
47765 + u8 ChannelToSw = pmp->channel, eRFPath = RF_PATH_A;
47766 u8 ulRateIdx = pmp->rateidx;
47767 u8 ulbandwidth = pmp->bandwidth;
47768 PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.MptCtx);
47769 @@ -340,7 +340,7 @@ void Hal_MPT_CCKTxPowerAdjustbyIndex(PADAPTER pAdapter, BOOLEAN beven)
47770 PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.MptCtx;
47771
47772
47773 - if (!IS_92C_SERIAL(pHalData->VersionID) || !IS_NORMAL_CHIP(pHalData->VersionID))
47774 + if (!IS_92C_SERIAL(pHalData->VersionID))
47775 return;
47776 #if 0
47777 while(PlatformAtomicExchange(&Adapter->IntrCCKRefCount, TRUE) == TRUE)
47778 @@ -459,7 +459,7 @@ void Hal_SetChannel(PADAPTER pAdapter)
47779 for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++)
47780 {
47781 if(IS_HARDWARE_TYPE_8192D(pAdapter))
47782 - _write_rfreg(pAdapter, (RF90_RADIO_PATH_E)eRFPath, rRfChannel, 0xFF, channel);
47783 + _write_rfreg(pAdapter, (RF_RADIO_PATH_E)eRFPath, rRfChannel, 0xFF, channel);
47784 else
47785 _write_rfreg(pAdapter, eRFPath, rRfChannel, 0x3FF, channel);
47786 }
47787 @@ -475,13 +475,6 @@ void Hal_SetChannel(PADAPTER pAdapter)
47788 pHalData->dmpriv.bCCKinCH14 = _FALSE;
47789 Hal_MPT_CCKTxPowerAdjust(pAdapter, pHalData->dmpriv.bCCKinCH14);
47790 }
47791 -#if 0
47792 -//#ifdef CONFIG_USB_HCI
47793 - // Georgia add 2009-11-17, suggested by Edlu , for 8188CU ,46 PIN
47794 - if (!IS_92C_SERIAL(pHalData->VersionID) && !IS_NORMAL_CHIP(pHalData->VersionID)) {
47795 - mpt_AdjustRFRegByRateByChan92CU(pAdapter, rate, pHalData->CurrentChannel, bandwidth);
47796 - }
47797 -#endif
47798
47799 #endif
47800 }
47801 @@ -538,14 +531,6 @@ void Hal_SetOFDMTxPower(PADAPTER pAdapter, u8 *TxPower)
47802 write_bbreg(pAdapter, rTxAGC_A_Mcs11_Mcs08, bMaskDWord, TxAGC);
47803 write_bbreg(pAdapter, rTxAGC_A_Mcs15_Mcs12, bMaskDWord, TxAGC);
47804
47805 - if (pHalData->dmpriv.bAPKdone && !IS_NORMAL_CHIP(pHalData->VersionID))
47806 - {
47807 - if (tmpval > pMptCtx->APK_bound[RF_PATH_A])
47808 - write_rfreg(pAdapter, RF_PATH_A, 0xe, pHalData->dmpriv.APKoutput[0][0]);
47809 - else
47810 - write_rfreg(pAdapter, RF_PATH_A, 0xe, pHalData->dmpriv.APKoutput[0][1]);
47811 - }
47812 -
47813 // HT Tx-rf(B)
47814 tmpval = TxPower[RF_PATH_B];
47815 TxAGC = (tmpval<<24) | (tmpval<<16) | (tmpval<<8) | tmpval;
47816 @@ -557,14 +542,6 @@ void Hal_SetOFDMTxPower(PADAPTER pAdapter, u8 *TxPower)
47817 write_bbreg(pAdapter, rTxAGC_B_Mcs11_Mcs08, bMaskDWord, TxAGC);
47818 write_bbreg(pAdapter, rTxAGC_B_Mcs15_Mcs12, bMaskDWord, TxAGC);
47819
47820 - if (pHalData->dmpriv.bAPKdone && !IS_NORMAL_CHIP(pHalData->VersionID))
47821 - {
47822 - if (tmpval > pMptCtx->APK_bound[RF_PATH_B])
47823 - write_rfreg(pAdapter, RF_PATH_B, 0xe, pHalData->dmpriv.APKoutput[1][0]);
47824 - else
47825 - write_rfreg(pAdapter, RF_PATH_B, 0xe, pHalData->dmpriv.APKoutput[1][1]);
47826 - }
47827 -
47828 RT_TRACE(_module_mp_, _drv_notice_,
47829 ("-SetOFDMTxPower: A[0x%02x] B[0x%02x]\n",
47830 TxPower[RF_PATH_A], TxPower[RF_PATH_B]));
47831 @@ -800,7 +777,7 @@ void Hal_SetAntenna(PADAPTER pAdapter)
47832 // 2008/10/31 MH From SD3 Willi's suggestion. We must read RFA 2T table.
47833 if ((pHalData->VersionID == VERSION_8192S_ACUT)) // For RTL8192SU A-Cut only, by Roger, 2008.11.07.
47834 {
47835 - mpt_RFConfigFromPreParaArrary(pAdapter, 1, RF90_PATH_A);
47836 + mpt_RFConfigFromPreParaArrary(pAdapter, 1, RF_PATH_A);
47837 }
47838 #endif
47839 // 2009/01/08 MH From Sd3 Willis. We need to enable RFA/B by SW control
47840 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c
47841 index e527028..1bae6da 100644
47842 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c
47843 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c
47844 @@ -16,8 +16,7 @@
47845 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
47846 *
47847 *
47848 -
47849 -******************************************************************************/
47850 + ******************************************************************************/
47851 /******************************************************************************
47852
47853 Module: rtl8192c_phycfg.c
47854 @@ -197,7 +196,7 @@ rtl8192c_PHY_SetBBReg(
47855 if(BitMask!= bMaskDWord){//if not "double word" write
47856 OriginalValue = rtw_read32(Adapter, RegAddr);
47857 BitShift = phy_CalculateBitShift(BitMask);
47858 - Data = ((OriginalValue & (~BitMask)) | (Data << BitShift));
47859 + Data = ((OriginalValue & (~BitMask)) | ((Data << BitShift) & BitMask));
47860 }
47861
47862 rtw_write32(Adapter, RegAddr, Data);
47863 @@ -231,7 +230,7 @@ rtl8192c_PHY_SetBBReg(
47864 static u32
47865 phy_FwRFSerialRead(
47866 IN PADAPTER Adapter,
47867 - IN RF90_RADIO_PATH_E eRFPath,
47868 + IN RF_RADIO_PATH_E eRFPath,
47869 IN u32 Offset )
47870 {
47871 u32 retValue = 0;
47872 @@ -260,7 +259,7 @@ phy_FwRFSerialRead(
47873 static VOID
47874 phy_FwRFSerialWrite(
47875 IN PADAPTER Adapter,
47876 - IN RF90_RADIO_PATH_E eRFPath,
47877 + IN RF_RADIO_PATH_E eRFPath,
47878 IN u32 Offset,
47879 IN u32 Data )
47880 {
47881 @@ -275,7 +274,7 @@ phy_FwRFSerialWrite(
47882 *
47883 * Input:
47884 * PADAPTER Adapter,
47885 -* RF90_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
47886 +* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
47887 * u4Byte Offset, //The target address to be read
47888 *
47889 * Output: None
47890 @@ -290,7 +289,7 @@ phy_FwRFSerialWrite(
47891 static u32
47892 phy_RFSerialRead(
47893 IN PADAPTER Adapter,
47894 - IN RF90_RADIO_PATH_E eRFPath,
47895 + IN RF_RADIO_PATH_E eRFPath,
47896 IN u32 Offset
47897 )
47898 {
47899 @@ -327,7 +326,7 @@ phy_RFSerialRead(
47900 // For RF A/B write 0x824/82c(does not work in the future)
47901 // We must use 0x824 for RF A and B to execute read trigger
47902 tmplong = PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter2, bMaskDWord);
47903 - if(eRFPath == RF90_PATH_A)
47904 + if(eRFPath == RF_PATH_A)
47905 tmplong2 = tmplong;
47906 else
47907 tmplong2 = PHY_QueryBBReg(Adapter, pPhyReg->rfHSSIPara2, bMaskDWord);
47908 @@ -343,9 +342,9 @@ phy_RFSerialRead(
47909 PHY_SetBBReg(Adapter, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong|bLSSIReadEdge);
47910 rtw_udelay_os(10);//PlatformStallExecution(10);
47911
47912 - if(eRFPath == RF90_PATH_A)
47913 + if(eRFPath == RF_PATH_A)
47914 RfPiEnable = (u8)PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter1, BIT8);
47915 - else if(eRFPath == RF90_PATH_B)
47916 + else if(eRFPath == RF_PATH_B)
47917 RfPiEnable = (u8)PHY_QueryBBReg(Adapter, rFPGA0_XB_HSSIParameter1, BIT8);
47918
47919 if(RfPiEnable)
47920 @@ -373,7 +372,7 @@ phy_RFSerialRead(
47921 *
47922 * Input:
47923 * PADAPTER Adapter,
47924 -* RF90_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
47925 +* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
47926 * u4Byte Offset, //The target address to be read
47927 * u4Byte Data //The new register Data in the target bit position
47928 * //of the target to be read
47929 @@ -412,7 +411,7 @@ phy_RFSerialRead(
47930 static VOID
47931 phy_RFSerialWrite(
47932 IN PADAPTER Adapter,
47933 - IN RF90_RADIO_PATH_E eRFPath,
47934 + IN RF_RADIO_PATH_E eRFPath,
47935 IN u32 Offset,
47936 IN u32 Data
47937 )
47938 @@ -471,7 +470,7 @@ phy_RFSerialWrite(
47939 *
47940 * Input:
47941 * PADAPTER Adapter,
47942 -* RF90_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
47943 +* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
47944 * u4Byte RegAddr, //The target address to be read
47945 * u4Byte BitMask //The target bit position in the target address
47946 * //to be read
47947 @@ -483,7 +482,7 @@ phy_RFSerialWrite(
47948 u32
47949 rtl8192c_PHY_QueryRFReg(
47950 IN PADAPTER Adapter,
47951 - IN RF90_RADIO_PATH_E eRFPath,
47952 + IN RF_RADIO_PATH_E eRFPath,
47953 IN u32 RegAddr,
47954 IN u32 BitMask
47955 )
47956 @@ -532,7 +531,7 @@ rtl8192c_PHY_QueryRFReg(
47957 *
47958 * Input:
47959 * PADAPTER Adapter,
47960 -* RF90_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
47961 +* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
47962 * u4Byte RegAddr, //The target address to be modified
47963 * u4Byte BitMask //The target bit position in the target address
47964 * //to be modified
47965 @@ -546,7 +545,7 @@ rtl8192c_PHY_QueryRFReg(
47966 VOID
47967 rtl8192c_PHY_SetRFReg(
47968 IN PADAPTER Adapter,
47969 - IN RF90_RADIO_PATH_E eRFPath,
47970 + IN RF_RADIO_PATH_E eRFPath,
47971 IN u32 RegAddr,
47972 IN u32 BitMask,
47973 IN u32 Data
47974 @@ -716,20 +715,12 @@ PHY_MACConfig8192C(
47975 s8 *pszMACRegFile;
47976 s8 sz88CMACRegFile[] = RTL8188C_PHY_MACREG;
47977 s8 sz92CMACRegFile[] = RTL8192C_PHY_MACREG;
47978 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
47979 BOOLEAN is92C = IS_92C_SERIAL(pHalData->VersionID);
47980
47981 - if(isNormal)
47982 - {
47983 - if(is92C)
47984 - pszMACRegFile = sz92CMACRegFile;
47985 - else
47986 - pszMACRegFile = sz88CMACRegFile;
47987 - }
47988 + if(is92C)
47989 + pszMACRegFile = sz92CMACRegFile;
47990 else
47991 - {
47992 - //pszMACRegFile = TestMacRegFile;
47993 - }
47994 + pszMACRegFile = sz88CMACRegFile;
47995
47996 //
47997 // Config MAC
47998 @@ -746,7 +737,7 @@ PHY_MACConfig8192C(
47999 #ifdef CONFIG_PCI_HCI
48000 //this switching setting cause some 8192cu hw have redownload fw fail issue
48001 //improve 2-stream TX EVM by Jenyu
48002 - if(isNormal && is92C)
48003 + if(is92C)
48004 rtw_write8(Adapter, REG_SPS0_CTRL+3,0x71);
48005 #endif
48006
48007 @@ -784,102 +775,102 @@ phy_InitBBRFRegisterDefinition(
48008 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
48009
48010 // RF Interface Sowrtware Control
48011 - pHalData->PHYRegDef[RF90_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW; // 16 LSBs if read 32-bit from 0x870
48012 - pHalData->PHYRegDef[RF90_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW; // 16 MSBs if read 32-bit from 0x870 (16-bit for 0x872)
48013 - pHalData->PHYRegDef[RF90_PATH_C].rfintfs = rFPGA0_XCD_RFInterfaceSW;// 16 LSBs if read 32-bit from 0x874
48014 - pHalData->PHYRegDef[RF90_PATH_D].rfintfs = rFPGA0_XCD_RFInterfaceSW;// 16 MSBs if read 32-bit from 0x874 (16-bit for 0x876)
48015 + pHalData->PHYRegDef[RF_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW; // 16 LSBs if read 32-bit from 0x870
48016 + pHalData->PHYRegDef[RF_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW; // 16 MSBs if read 32-bit from 0x870 (16-bit for 0x872)
48017 + pHalData->PHYRegDef[RF_PATH_C].rfintfs = rFPGA0_XCD_RFInterfaceSW;// 16 LSBs if read 32-bit from 0x874
48018 + pHalData->PHYRegDef[RF_PATH_D].rfintfs = rFPGA0_XCD_RFInterfaceSW;// 16 MSBs if read 32-bit from 0x874 (16-bit for 0x876)
48019
48020 // RF Interface Readback Value
48021 - pHalData->PHYRegDef[RF90_PATH_A].rfintfi = rFPGA0_XAB_RFInterfaceRB; // 16 LSBs if read 32-bit from 0x8E0
48022 - pHalData->PHYRegDef[RF90_PATH_B].rfintfi = rFPGA0_XAB_RFInterfaceRB;// 16 MSBs if read 32-bit from 0x8E0 (16-bit for 0x8E2)
48023 - pHalData->PHYRegDef[RF90_PATH_C].rfintfi = rFPGA0_XCD_RFInterfaceRB;// 16 LSBs if read 32-bit from 0x8E4
48024 - pHalData->PHYRegDef[RF90_PATH_D].rfintfi = rFPGA0_XCD_RFInterfaceRB;// 16 MSBs if read 32-bit from 0x8E4 (16-bit for 0x8E6)
48025 + pHalData->PHYRegDef[RF_PATH_A].rfintfi = rFPGA0_XAB_RFInterfaceRB; // 16 LSBs if read 32-bit from 0x8E0
48026 + pHalData->PHYRegDef[RF_PATH_B].rfintfi = rFPGA0_XAB_RFInterfaceRB;// 16 MSBs if read 32-bit from 0x8E0 (16-bit for 0x8E2)
48027 + pHalData->PHYRegDef[RF_PATH_C].rfintfi = rFPGA0_XCD_RFInterfaceRB;// 16 LSBs if read 32-bit from 0x8E4
48028 + pHalData->PHYRegDef[RF_PATH_D].rfintfi = rFPGA0_XCD_RFInterfaceRB;// 16 MSBs if read 32-bit from 0x8E4 (16-bit for 0x8E6)
48029
48030 // RF Interface Output (and Enable)
48031 - pHalData->PHYRegDef[RF90_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE; // 16 LSBs if read 32-bit from 0x860
48032 - pHalData->PHYRegDef[RF90_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE; // 16 LSBs if read 32-bit from 0x864
48033 + pHalData->PHYRegDef[RF_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE; // 16 LSBs if read 32-bit from 0x860
48034 + pHalData->PHYRegDef[RF_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE; // 16 LSBs if read 32-bit from 0x864
48035
48036 // RF Interface (Output and) Enable
48037 - pHalData->PHYRegDef[RF90_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE; // 16 MSBs if read 32-bit from 0x860 (16-bit for 0x862)
48038 - pHalData->PHYRegDef[RF90_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE; // 16 MSBs if read 32-bit from 0x864 (16-bit for 0x866)
48039 + pHalData->PHYRegDef[RF_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE; // 16 MSBs if read 32-bit from 0x860 (16-bit for 0x862)
48040 + pHalData->PHYRegDef[RF_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE; // 16 MSBs if read 32-bit from 0x864 (16-bit for 0x866)
48041
48042 //Addr of LSSI. Wirte RF register by driver
48043 - pHalData->PHYRegDef[RF90_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter; //LSSI Parameter
48044 - pHalData->PHYRegDef[RF90_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter;
48045 + pHalData->PHYRegDef[RF_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter; //LSSI Parameter
48046 + pHalData->PHYRegDef[RF_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter;
48047
48048 // RF parameter
48049 - pHalData->PHYRegDef[RF90_PATH_A].rfLSSI_Select = rFPGA0_XAB_RFParameter; //BB Band Select
48050 - pHalData->PHYRegDef[RF90_PATH_B].rfLSSI_Select = rFPGA0_XAB_RFParameter;
48051 - pHalData->PHYRegDef[RF90_PATH_C].rfLSSI_Select = rFPGA0_XCD_RFParameter;
48052 - pHalData->PHYRegDef[RF90_PATH_D].rfLSSI_Select = rFPGA0_XCD_RFParameter;
48053 + pHalData->PHYRegDef[RF_PATH_A].rfLSSI_Select = rFPGA0_XAB_RFParameter; //BB Band Select
48054 + pHalData->PHYRegDef[RF_PATH_B].rfLSSI_Select = rFPGA0_XAB_RFParameter;
48055 + pHalData->PHYRegDef[RF_PATH_C].rfLSSI_Select = rFPGA0_XCD_RFParameter;
48056 + pHalData->PHYRegDef[RF_PATH_D].rfLSSI_Select = rFPGA0_XCD_RFParameter;
48057
48058 // Tx AGC Gain Stage (same for all path. Should we remove this?)
48059 - pHalData->PHYRegDef[RF90_PATH_A].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48060 - pHalData->PHYRegDef[RF90_PATH_B].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48061 - pHalData->PHYRegDef[RF90_PATH_C].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48062 - pHalData->PHYRegDef[RF90_PATH_D].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48063 + pHalData->PHYRegDef[RF_PATH_A].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48064 + pHalData->PHYRegDef[RF_PATH_B].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48065 + pHalData->PHYRegDef[RF_PATH_C].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48066 + pHalData->PHYRegDef[RF_PATH_D].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
48067
48068 // Tranceiver A~D HSSI Parameter-1
48069 - pHalData->PHYRegDef[RF90_PATH_A].rfHSSIPara1 = rFPGA0_XA_HSSIParameter1; //wire control parameter1
48070 - pHalData->PHYRegDef[RF90_PATH_B].rfHSSIPara1 = rFPGA0_XB_HSSIParameter1; //wire control parameter1
48071 + pHalData->PHYRegDef[RF_PATH_A].rfHSSIPara1 = rFPGA0_XA_HSSIParameter1; //wire control parameter1
48072 + pHalData->PHYRegDef[RF_PATH_B].rfHSSIPara1 = rFPGA0_XB_HSSIParameter1; //wire control parameter1
48073
48074 // Tranceiver A~D HSSI Parameter-2
48075 - pHalData->PHYRegDef[RF90_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2; //wire control parameter2
48076 - pHalData->PHYRegDef[RF90_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2; //wire control parameter2
48077 + pHalData->PHYRegDef[RF_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2; //wire control parameter2
48078 + pHalData->PHYRegDef[RF_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2; //wire control parameter2
48079
48080 // RF switch Control
48081 - pHalData->PHYRegDef[RF90_PATH_A].rfSwitchControl = rFPGA0_XAB_SwitchControl; //TR/Ant switch control
48082 - pHalData->PHYRegDef[RF90_PATH_B].rfSwitchControl = rFPGA0_XAB_SwitchControl;
48083 - pHalData->PHYRegDef[RF90_PATH_C].rfSwitchControl = rFPGA0_XCD_SwitchControl;
48084 - pHalData->PHYRegDef[RF90_PATH_D].rfSwitchControl = rFPGA0_XCD_SwitchControl;
48085 + pHalData->PHYRegDef[RF_PATH_A].rfSwitchControl = rFPGA0_XAB_SwitchControl; //TR/Ant switch control
48086 + pHalData->PHYRegDef[RF_PATH_B].rfSwitchControl = rFPGA0_XAB_SwitchControl;
48087 + pHalData->PHYRegDef[RF_PATH_C].rfSwitchControl = rFPGA0_XCD_SwitchControl;
48088 + pHalData->PHYRegDef[RF_PATH_D].rfSwitchControl = rFPGA0_XCD_SwitchControl;
48089
48090 // AGC control 1
48091 - pHalData->PHYRegDef[RF90_PATH_A].rfAGCControl1 = rOFDM0_XAAGCCore1;
48092 - pHalData->PHYRegDef[RF90_PATH_B].rfAGCControl1 = rOFDM0_XBAGCCore1;
48093 - pHalData->PHYRegDef[RF90_PATH_C].rfAGCControl1 = rOFDM0_XCAGCCore1;
48094 - pHalData->PHYRegDef[RF90_PATH_D].rfAGCControl1 = rOFDM0_XDAGCCore1;
48095 + pHalData->PHYRegDef[RF_PATH_A].rfAGCControl1 = rOFDM0_XAAGCCore1;
48096 + pHalData->PHYRegDef[RF_PATH_B].rfAGCControl1 = rOFDM0_XBAGCCore1;
48097 + pHalData->PHYRegDef[RF_PATH_C].rfAGCControl1 = rOFDM0_XCAGCCore1;
48098 + pHalData->PHYRegDef[RF_PATH_D].rfAGCControl1 = rOFDM0_XDAGCCore1;
48099
48100 // AGC control 2
48101 - pHalData->PHYRegDef[RF90_PATH_A].rfAGCControl2 = rOFDM0_XAAGCCore2;
48102 - pHalData->PHYRegDef[RF90_PATH_B].rfAGCControl2 = rOFDM0_XBAGCCore2;
48103 - pHalData->PHYRegDef[RF90_PATH_C].rfAGCControl2 = rOFDM0_XCAGCCore2;
48104 - pHalData->PHYRegDef[RF90_PATH_D].rfAGCControl2 = rOFDM0_XDAGCCore2;
48105 + pHalData->PHYRegDef[RF_PATH_A].rfAGCControl2 = rOFDM0_XAAGCCore2;
48106 + pHalData->PHYRegDef[RF_PATH_B].rfAGCControl2 = rOFDM0_XBAGCCore2;
48107 + pHalData->PHYRegDef[RF_PATH_C].rfAGCControl2 = rOFDM0_XCAGCCore2;
48108 + pHalData->PHYRegDef[RF_PATH_D].rfAGCControl2 = rOFDM0_XDAGCCore2;
48109
48110 // RX AFE control 1
48111 - pHalData->PHYRegDef[RF90_PATH_A].rfRxIQImbalance = rOFDM0_XARxIQImbalance;
48112 - pHalData->PHYRegDef[RF90_PATH_B].rfRxIQImbalance = rOFDM0_XBRxIQImbalance;
48113 - pHalData->PHYRegDef[RF90_PATH_C].rfRxIQImbalance = rOFDM0_XCRxIQImbalance;
48114 - pHalData->PHYRegDef[RF90_PATH_D].rfRxIQImbalance = rOFDM0_XDRxIQImbalance;
48115 + pHalData->PHYRegDef[RF_PATH_A].rfRxIQImbalance = rOFDM0_XARxIQImbalance;
48116 + pHalData->PHYRegDef[RF_PATH_B].rfRxIQImbalance = rOFDM0_XBRxIQImbalance;
48117 + pHalData->PHYRegDef[RF_PATH_C].rfRxIQImbalance = rOFDM0_XCRxIQImbalance;
48118 + pHalData->PHYRegDef[RF_PATH_D].rfRxIQImbalance = rOFDM0_XDRxIQImbalance;
48119
48120 // RX AFE control 1
48121 - pHalData->PHYRegDef[RF90_PATH_A].rfRxAFE = rOFDM0_XARxAFE;
48122 - pHalData->PHYRegDef[RF90_PATH_B].rfRxAFE = rOFDM0_XBRxAFE;
48123 - pHalData->PHYRegDef[RF90_PATH_C].rfRxAFE = rOFDM0_XCRxAFE;
48124 - pHalData->PHYRegDef[RF90_PATH_D].rfRxAFE = rOFDM0_XDRxAFE;
48125 + pHalData->PHYRegDef[RF_PATH_A].rfRxAFE = rOFDM0_XARxAFE;
48126 + pHalData->PHYRegDef[RF_PATH_B].rfRxAFE = rOFDM0_XBRxAFE;
48127 + pHalData->PHYRegDef[RF_PATH_C].rfRxAFE = rOFDM0_XCRxAFE;
48128 + pHalData->PHYRegDef[RF_PATH_D].rfRxAFE = rOFDM0_XDRxAFE;
48129
48130 // Tx AFE control 1
48131 - pHalData->PHYRegDef[RF90_PATH_A].rfTxIQImbalance = rOFDM0_XATxIQImbalance;
48132 - pHalData->PHYRegDef[RF90_PATH_B].rfTxIQImbalance = rOFDM0_XBTxIQImbalance;
48133 - pHalData->PHYRegDef[RF90_PATH_C].rfTxIQImbalance = rOFDM0_XCTxIQImbalance;
48134 - pHalData->PHYRegDef[RF90_PATH_D].rfTxIQImbalance = rOFDM0_XDTxIQImbalance;
48135 + pHalData->PHYRegDef[RF_PATH_A].rfTxIQImbalance = rOFDM0_XATxIQImbalance;
48136 + pHalData->PHYRegDef[RF_PATH_B].rfTxIQImbalance = rOFDM0_XBTxIQImbalance;
48137 + pHalData->PHYRegDef[RF_PATH_C].rfTxIQImbalance = rOFDM0_XCTxIQImbalance;
48138 + pHalData->PHYRegDef[RF_PATH_D].rfTxIQImbalance = rOFDM0_XDTxIQImbalance;
48139
48140 // Tx AFE control 2
48141 - pHalData->PHYRegDef[RF90_PATH_A].rfTxAFE = rOFDM0_XATxAFE;
48142 - pHalData->PHYRegDef[RF90_PATH_B].rfTxAFE = rOFDM0_XBTxAFE;
48143 - pHalData->PHYRegDef[RF90_PATH_C].rfTxAFE = rOFDM0_XCTxAFE;
48144 - pHalData->PHYRegDef[RF90_PATH_D].rfTxAFE = rOFDM0_XDTxAFE;
48145 + pHalData->PHYRegDef[RF_PATH_A].rfTxAFE = rOFDM0_XATxAFE;
48146 + pHalData->PHYRegDef[RF_PATH_B].rfTxAFE = rOFDM0_XBTxAFE;
48147 + pHalData->PHYRegDef[RF_PATH_C].rfTxAFE = rOFDM0_XCTxAFE;
48148 + pHalData->PHYRegDef[RF_PATH_D].rfTxAFE = rOFDM0_XDTxAFE;
48149
48150 // Tranceiver LSSI Readback SI mode
48151 - pHalData->PHYRegDef[RF90_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;
48152 - pHalData->PHYRegDef[RF90_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack;
48153 - pHalData->PHYRegDef[RF90_PATH_C].rfLSSIReadBack = rFPGA0_XC_LSSIReadBack;
48154 - pHalData->PHYRegDef[RF90_PATH_D].rfLSSIReadBack = rFPGA0_XD_LSSIReadBack;
48155 + pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;
48156 + pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack;
48157 + pHalData->PHYRegDef[RF_PATH_C].rfLSSIReadBack = rFPGA0_XC_LSSIReadBack;
48158 + pHalData->PHYRegDef[RF_PATH_D].rfLSSIReadBack = rFPGA0_XD_LSSIReadBack;
48159
48160 // Tranceiver LSSI Readback PI mode
48161 - pHalData->PHYRegDef[RF90_PATH_A].rfLSSIReadBackPi = TransceiverA_HSPI_Readback;
48162 - pHalData->PHYRegDef[RF90_PATH_B].rfLSSIReadBackPi = TransceiverB_HSPI_Readback;
48163 - //pHalData->PHYRegDef[RF90_PATH_C].rfLSSIReadBackPi = rFPGA0_XC_LSSIReadBack;
48164 - //pHalData->PHYRegDef[RF90_PATH_D].rfLSSIReadBackPi = rFPGA0_XD_LSSIReadBack;
48165 + pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBackPi = TransceiverA_HSPI_Readback;
48166 + pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBackPi = TransceiverB_HSPI_Readback;
48167 + //pHalData->PHYRegDef[RF_PATH_C].rfLSSIReadBackPi = rFPGA0_XC_LSSIReadBack;
48168 + //pHalData->PHYRegDef[RF_PATH_D].rfLSSIReadBackPi = rFPGA0_XD_LSSIReadBack;
48169
48170 }
48171
48172 @@ -981,56 +972,38 @@ phy_ConfigBBWithHeaderFile(
48173 //
48174 if(IS_92C_SERIAL(pHalData->VersionID))
48175 {
48176 - if(IS_NORMAL_CHIP(pHalData->VersionID))
48177 - {
48178 - AGCTAB_ArrayLen = AGCTAB_2TArrayLength;
48179 - Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_2TArray;
48180 - PHY_REGArrayLen = PHY_REG_2TArrayLength;
48181 - Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_2TArray;
48182 + AGCTAB_ArrayLen = AGCTAB_2TArrayLength;
48183 + Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_2TArray;
48184 + PHY_REGArrayLen = PHY_REG_2TArrayLength;
48185 + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_2TArray;
48186 #ifdef CONFIG_USB_HCI
48187 - if(pHalData->BoardType == BOARD_MINICARD )
48188 - {
48189 - PHY_REGArrayLen = PHY_REG_2T_mCardArrayLength;
48190 - Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_2T_mCardArray;
48191 - }
48192 -#endif
48193 - }
48194 - else
48195 + if(pHalData->BoardType == BOARD_MINICARD )
48196 {
48197 - DBG_8192C(" ===> phy_ConfigBBWithHeaderFile(): do not support test chip\n");
48198 - ret = _FAIL;
48199 - goto exit;
48200 + PHY_REGArrayLen = PHY_REG_2T_mCardArrayLength;
48201 + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_2T_mCardArray;
48202 }
48203 +#endif
48204 }
48205 else
48206 {
48207 - if(IS_NORMAL_CHIP(pHalData->VersionID))
48208 - {
48209 - AGCTAB_ArrayLen = AGCTAB_1TArrayLength;
48210 - Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_1TArray;
48211 - PHY_REGArrayLen = PHY_REG_1TArrayLength;
48212 - Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1TArray;
48213 + AGCTAB_ArrayLen = AGCTAB_1TArrayLength;
48214 + Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_1TArray;
48215 + PHY_REGArrayLen = PHY_REG_1TArrayLength;
48216 + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1TArray;
48217 #ifdef CONFIG_USB_HCI
48218 - if(pHalData->BoardType == BOARD_MINICARD )
48219 - {
48220 - PHY_REGArrayLen = PHY_REG_1T_mCardArrayLength;
48221 - Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T_mCardArray;
48222 - }
48223 - else if(pHalData->BoardType == BOARD_USB_High_PA)
48224 - {
48225 - AGCTAB_ArrayLen = AGCTAB_1T_HPArrayLength;
48226 - Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_1T_HPArray;
48227 - PHY_REGArrayLen = PHY_REG_1T_HPArrayLength;
48228 - Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T_HPArray;
48229 - }
48230 -#endif
48231 + if(pHalData->BoardType == BOARD_MINICARD )
48232 + {
48233 + PHY_REGArrayLen = PHY_REG_1T_mCardArrayLength;
48234 + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T_mCardArray;
48235 }
48236 - else
48237 + else if(pHalData->BoardType == BOARD_USB_High_PA)
48238 {
48239 - DBG_8192C(" ===> phy_ConfigBBWithHeaderFile(): do not support test chip\n");
48240 - ret = _FAIL;
48241 - goto exit;
48242 + AGCTAB_ArrayLen = AGCTAB_1T_HPArrayLength;
48243 + Rtl819XAGCTAB_Array_Table = Rtl819XAGCTAB_1T_HPArray;
48244 + PHY_REGArrayLen = PHY_REG_1T_HPArrayLength;
48245 + Rtl819XPHY_REGArray_Table = Rtl819XPHY_REG_1T_HPArray;
48246 }
48247 +#endif
48248 }
48249
48250 if(ConfigType == BaseBand_Config_PHY_REG)
48251 @@ -1095,7 +1068,7 @@ phy_ConfigBBWithHeaderFile(
48252 PHY_SetBBReg(Adapter, Rtl819XPHY_REGArray_Table[i], bMaskDWord, Rtl819XPHY_REGArray_Table[i+1]);
48253
48254 // Add 1us delay between BB/RF register setting.
48255 - rtw_udelay_os(1);
48256 + rtw_udelay_os(1);
48257
48258 //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]));
48259 }
48260 @@ -1311,31 +1284,23 @@ phy_ConfigBBWithPgHeaderFile(
48261 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
48262
48263 // Default: pHalData->RF_Type = RF_2T2R.
48264 - if(IS_NORMAL_CHIP(pHalData->VersionID))
48265 - {
48266 - PHY_REGArrayPGLen = PHY_REG_Array_PGLength;
48267 - Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG;
48268 + PHY_REGArrayPGLen = PHY_REG_Array_PGLength;
48269 + Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG;
48270
48271 #ifdef CONFIG_USB_HCI
48272 // 2010/10/19 Chiyoko According to Alex/Willson opinion, VAU/dongle can share the same PHY_REG_PG.txt
48273 /*
48274 - if(pHalData->BoardType == BOARD_MINICARD )
48275 - {
48276 - PHY_REGArrayPGLen = PHY_REG_Array_PG_mCardLength;
48277 - Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG_mCard;
48278 - }
48279 - else */if(pHalData->BoardType ==BOARD_USB_High_PA )
48280 - {
48281 - PHY_REGArrayPGLen = PHY_REG_Array_PG_HPLength;
48282 - Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG_HP;
48283 - }
48284 -#endif
48285 + if(pHalData->BoardType == BOARD_MINICARD )
48286 + {
48287 + PHY_REGArrayPGLen = PHY_REG_Array_PG_mCardLength;
48288 + Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG_mCard;
48289 }
48290 - else
48291 + else */if(pHalData->BoardType ==BOARD_USB_High_PA )
48292 {
48293 - DBG_8192C(" ===> phy_ConfigBBWithPgHeaderFile(): do not support test chip\n");
48294 - return _FAIL;
48295 + PHY_REGArrayPGLen = PHY_REG_Array_PG_HPLength;
48296 + Rtl819XPHY_REGArray_Table_PG = Rtl819XPHY_REG_Array_PG_HP;
48297 }
48298 +#endif
48299
48300 if(ConfigType == BaseBand_Config_PHY_REG)
48301 {
48302 @@ -1745,7 +1710,7 @@ PHY_BBConfig8192C(
48303
48304 phy_InitBBRFRegisterDefinition(Adapter);
48305
48306 - if(IS_HARDWARE_TYPE_8723(Adapter))
48307 + if(IS_HARDWARE_TYPE_8723A(Adapter))
48308 {
48309 // Suggested by Scott. tynli_test. 2010.12.30.
48310 //1. 0x28[1] = 1
48311 @@ -1762,6 +1727,9 @@ PHY_BBConfig8192C(
48312 TmpU1B = rtw_read8(Adapter, REG_SYS_FUNC_EN);
48313 rtw_write8(Adapter, REG_SYS_FUNC_EN, (TmpU1B|FEN_BB_GLB_RSTn|FEN_BBRSTB));
48314
48315 + //undo clock gated
48316 + rtw_write32(Adapter, rFPGA0_XCD_RFParameter, rtw_read32(Adapter, rFPGA0_XCD_RFParameter)&(~BIT31));
48317 +
48318 //4. 0x25[6] = 0
48319 TmpU1B = rtw_read8(Adapter, REG_AFE_XTAL_CTRL+1);
48320 rtw_write8(Adapter, REG_AFE_XTAL_CTRL+1, (TmpU1B&(~BIT6)));
48321 @@ -1790,24 +1758,16 @@ PHY_BBConfig8192C(
48322 #else
48323 rtw_write8(Adapter, REG_SYS_FUNC_EN, FEN_PPLL|FEN_PCIEA|FEN_DIO_PCIE|FEN_BB_GLB_RSTn|FEN_BBRSTB);
48324 #endif
48325 +
48326 + //undo clock gated
48327 + rtw_write32(Adapter, rFPGA0_XCD_RFParameter, rtw_read32(Adapter, rFPGA0_XCD_RFParameter)&(~BIT31));
48328
48329 // 2009/10/21 by SD1 Jong. Modified by tynli. Not in Documented in V8.1.
48330 - if(!IS_NORMAL_CHIP(pHalData->VersionID))
48331 - {
48332 -#ifdef CONFIG_USB_HCI
48333 - rtw_write8(Adapter, REG_LDOHCI12_CTRL, 0x1f);
48334 -#else
48335 - rtw_write8(Adapter, REG_LDOHCI12_CTRL, 0x1b);
48336 -#endif
48337 - }
48338 - else
48339 - {
48340 #ifdef CONFIG_USB_HCI
48341 - //To Fix MAC loopback mode fail. Suggested by SD4 Johnny. 2010.03.23.
48342 - rtw_write8(Adapter, REG_LDOHCI12_CTRL, 0x0f);
48343 - rtw_write8(Adapter, 0x15, 0xe9);
48344 + //To Fix MAC loopback mode fail. Suggested by SD4 Johnny. 2010.03.23.
48345 + rtw_write8(Adapter, REG_LDOHCI12_CTRL, 0x0f);
48346 + rtw_write8(Adapter, 0x15, 0xe9);
48347 #endif
48348 - }
48349
48350 rtw_write8(Adapter, REG_AFE_XTAL_CTRL+1, 0x80);
48351
48352 @@ -1854,50 +1814,6 @@ PHY_BBConfig8192C(
48353 rtw_write8(Adapter, 0xc72, 0x50);
48354 #endif
48355
48356 - // <tynli_note> For fix 8723 WL_TRSW bug. Suggested by Scott. 2011.01.24.
48357 - if(IS_HARDWARE_TYPE_8723(Adapter))
48358 - {
48359 - if(!IS_NORMAL_CHIP(pHalData->VersionID))
48360 - {
48361 - // 1. 0x40[2] = 1
48362 - value8 = rtw_read8(Adapter, REG_GPIO_MUXCFG);
48363 - rtw_write8(Adapter, REG_GPIO_MUXCFG, (value8|BIT2));
48364 -
48365 - // 2. 0x804[14] = 0 // BB disable TRSW control, enable SW control
48366 - PHY_SetBBReg(Adapter, rFPGA0_TxInfo, BIT14, 0x0);
48367 -
48368 - // 3. 0x870[6:5] = 2'b11
48369 - PHY_SetBBReg(Adapter, rFPGA0_XAB_RFInterfaceSW, (BIT5|BIT6), 0x3);
48370 -
48371 - // 4. 0x860[6:5] = 2'b00 // BB SW control TRSW pin output level
48372 - PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, (BIT5|BIT6), 0x0);
48373 - }
48374 - }
48375 -#if 0
48376 - // Check BB/RF confiuration setting.
48377 - // We only need to configure RF which is turned on.
48378 - PathMap = (u1Byte)(PHY_QueryBBReg(Adapter, rFPGA0_TxInfo, 0xf) |
48379 - PHY_QueryBBReg(Adapter, rOFDM0_TRxPathEnable, 0xf));
48380 - pHalData->RF_PathMap = PathMap;
48381 - for(index = 0; index<4; index++)
48382 - {
48383 - if((PathMap>>index)&0x1)
48384 - rf_num++;
48385 - }
48386 -
48387 - if((GET_RF_TYPE(Adapter) ==RF_1T1R && rf_num!=1) ||
48388 - (GET_RF_TYPE(Adapter)==RF_1T2R && rf_num!=2) ||
48389 - (GET_RF_TYPE(Adapter)==RF_2T2R && rf_num!=2) ||
48390 - (GET_RF_TYPE(Adapter)==RF_2T2R_GREEN && rf_num!=2) ||
48391 - (GET_RF_TYPE(Adapter)==RF_2T4R && rf_num!=4))
48392 - {
48393 - RT_TRACE(
48394 - COMP_INIT,
48395 - DBG_LOUD,
48396 - ("PHY_BBConfig8192C: RF_Type(%x) does not match RF_Num(%x)!!\n", pHalData->RF_Type, rf_num));
48397 - }
48398 -#endif
48399 -
48400 return rtStatus;
48401 }
48402
48403 @@ -1946,7 +1862,7 @@ PHY_RFConfig8192C(
48404 *
48405 * Input: PADAPTER Adapter
48406 * ps1Byte pFileName
48407 - * RF90_RADIO_PATH_E eRFPath
48408 + * RF_RADIO_PATH_E eRFPath
48409 *
48410 * Output: NONE
48411 *
48412 @@ -1958,7 +1874,7 @@ int
48413 rtl8192c_PHY_ConfigRFWithParaFile(
48414 IN PADAPTER Adapter,
48415 IN u8* pFileName,
48416 - RF90_RADIO_PATH_E eRFPath
48417 + RF_RADIO_PATH_E eRFPath
48418 )
48419 {
48420 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
48421 @@ -1992,7 +1908,7 @@ u32 Rtl8192S_HighPower_RadioA_Array[HighPowerRadioAArrayLen] = {
48422 int
48423 PHY_ConfigRFExternalPA(
48424 IN PADAPTER Adapter,
48425 - RF90_RADIO_PATH_E eRFPath
48426 + RF_RADIO_PATH_E eRFPath
48427 )
48428 {
48429 int rtStatus = _SUCCESS;
48430 @@ -2027,7 +1943,7 @@ PHY_ConfigRFExternalPA(
48431 *
48432 * Input: PADAPTER Adapter
48433 * ps1Byte pFileName
48434 - * RF90_RADIO_PATH_E eRFPath
48435 + * RF_RADIO_PATH_E eRFPath
48436 *
48437 * Output: NONE
48438 *
48439 @@ -2038,7 +1954,7 @@ PHY_ConfigRFExternalPA(
48440 int
48441 rtl8192c_PHY_ConfigRFWithHeaderFile(
48442 IN PADAPTER Adapter,
48443 - RF90_RADIO_PATH_E eRFPath
48444 + RF_RADIO_PATH_E eRFPath
48445 )
48446 {
48447
48448 @@ -2054,51 +1970,35 @@ rtl8192c_PHY_ConfigRFWithHeaderFile(
48449 //
48450 if(IS_92C_SERIAL(pHalData->VersionID))
48451 {
48452 - if(IS_NORMAL_CHIP(pHalData->VersionID))
48453 - {
48454 - RadioA_ArrayLen = RadioA_2TArrayLength;
48455 - Rtl819XRadioA_Array_Table = Rtl819XRadioA_2TArray;
48456 - RadioB_ArrayLen = RadioB_2TArrayLength;
48457 - Rtl819XRadioB_Array_Table = Rtl819XRadioB_2TArray;
48458 - }
48459 - else
48460 - {
48461 - rtStatus = _FAIL;
48462 - goto exit;
48463 - }
48464 + RadioA_ArrayLen = RadioA_2TArrayLength;
48465 + Rtl819XRadioA_Array_Table = Rtl819XRadioA_2TArray;
48466 + RadioB_ArrayLen = RadioB_2TArrayLength;
48467 + Rtl819XRadioB_Array_Table = Rtl819XRadioB_2TArray;
48468 }
48469 else
48470 {
48471 - if(IS_NORMAL_CHIP(pHalData->VersionID))
48472 - {
48473 - RadioA_ArrayLen = RadioA_1TArrayLength;
48474 - Rtl819XRadioA_Array_Table = Rtl819XRadioA_1TArray;
48475 - RadioB_ArrayLen = RadioB_1TArrayLength;
48476 - Rtl819XRadioB_Array_Table = Rtl819XRadioB_1TArray;
48477 + RadioA_ArrayLen = RadioA_1TArrayLength;
48478 + Rtl819XRadioA_Array_Table = Rtl819XRadioA_1TArray;
48479 + RadioB_ArrayLen = RadioB_1TArrayLength;
48480 + Rtl819XRadioB_Array_Table = Rtl819XRadioB_1TArray;
48481 #ifdef CONFIG_USB_HCI
48482 - if( BOARD_MINICARD == pHalData->BoardType )
48483 - {
48484 - RadioA_ArrayLen = RadioA_1T_mCardArrayLength;
48485 - Rtl819XRadioA_Array_Table = Rtl819XRadioA_1T_mCardArray;
48486 - RadioB_ArrayLen = RadioB_1T_mCardArrayLength;
48487 - Rtl819XRadioB_Array_Table = Rtl819XRadioB_1T_mCardArray;
48488 - }
48489 - else if( BOARD_USB_High_PA == pHalData->BoardType )
48490 - {
48491 - RadioA_ArrayLen = RadioA_1T_HPArrayLength;
48492 - Rtl819XRadioA_Array_Table = Rtl819XRadioA_1T_HPArray;
48493 - }
48494 -#endif
48495 + if( BOARD_MINICARD == pHalData->BoardType )
48496 + {
48497 + RadioA_ArrayLen = RadioA_1T_mCardArrayLength;
48498 + Rtl819XRadioA_Array_Table = Rtl819XRadioA_1T_mCardArray;
48499 + RadioB_ArrayLen = RadioB_1T_mCardArrayLength;
48500 + Rtl819XRadioB_Array_Table = Rtl819XRadioB_1T_mCardArray;
48501 }
48502 - else
48503 + else if( BOARD_USB_High_PA == pHalData->BoardType )
48504 {
48505 - rtStatus = _FAIL;
48506 - goto exit;
48507 + RadioA_ArrayLen = RadioA_1T_HPArrayLength;
48508 + Rtl819XRadioA_Array_Table = Rtl819XRadioA_1T_HPArray;
48509 }
48510 +#endif
48511 }
48512
48513 switch(eRFPath){
48514 - case RF90_PATH_A:
48515 + case RF_PATH_A:
48516 #ifdef CONFIG_IOL_RF_RF90_PATH_A
48517 if(rtw_IOL_applied(Adapter))
48518 {
48519 @@ -2169,7 +2069,7 @@ rtl8192c_PHY_ConfigRFWithHeaderFile(
48520 //Add for High Power PA
48521 PHY_ConfigRFExternalPA(Adapter, eRFPath);
48522 break;
48523 - case RF90_PATH_B:
48524 + case RF_PATH_B:
48525 #ifdef CONFIG_IOL_RF_RF90_PATH_B
48526 if(rtw_IOL_applied(Adapter))
48527 {
48528 @@ -2247,9 +2147,9 @@ rtl8192c_PHY_ConfigRFWithHeaderFile(
48529 }
48530
48531 break;
48532 - case RF90_PATH_C:
48533 + case RF_PATH_C:
48534 break;
48535 - case RF90_PATH_D:
48536 + case RF_PATH_D:
48537 break;
48538 }
48539
48540 @@ -2267,7 +2167,7 @@ exit:
48541 *
48542 * Input: PADAPTER Adapter
48543 * HW90_BLOCK_E CheckBlock
48544 - * RF90_RADIO_PATH_E eRFPath // it is used only when CheckBlock is HW90_BLOCK_RF
48545 + * RF_RADIO_PATH_E eRFPath // it is used only when CheckBlock is HW90_BLOCK_RF
48546 *
48547 * Output: NONE
48548 *
48549 @@ -2279,7 +2179,7 @@ int
48550 PHY_CheckBBAndRFOK(
48551 IN PADAPTER Adapter,
48552 IN HW90_BLOCK_E CheckBlock,
48553 - IN RF90_RADIO_PATH_E eRFPath
48554 + IN RF_RADIO_PATH_E eRFPath
48555 )
48556 {
48557 int rtStatus = _SUCCESS;
48558 @@ -2534,21 +2434,21 @@ static void getTxPowerIndex(
48559 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
48560 u8 index = (channel -1);
48561 // 1. CCK
48562 - cckPowerLevel[RF90_PATH_A] = pHalData->TxPwrLevelCck[RF90_PATH_A][index]; //RF-A
48563 - cckPowerLevel[RF90_PATH_B] = pHalData->TxPwrLevelCck[RF90_PATH_B][index]; //RF-B
48564 + cckPowerLevel[RF_PATH_A] = pHalData->TxPwrLevelCck[RF_PATH_A][index]; //RF-A
48565 + cckPowerLevel[RF_PATH_B] = pHalData->TxPwrLevelCck[RF_PATH_B][index]; //RF-B
48566
48567 // 2. OFDM for 1S or 2S
48568 if (GET_RF_TYPE(Adapter) == RF_1T2R || GET_RF_TYPE(Adapter) == RF_1T1R)
48569 {
48570 // Read HT 40 OFDM TX power
48571 - ofdmPowerLevel[RF90_PATH_A] = pHalData->TxPwrLevelHT40_1S[RF90_PATH_A][index];
48572 - ofdmPowerLevel[RF90_PATH_B] = pHalData->TxPwrLevelHT40_1S[RF90_PATH_B][index];
48573 + ofdmPowerLevel[RF_PATH_A] = pHalData->TxPwrLevelHT40_1S[RF_PATH_A][index];
48574 + ofdmPowerLevel[RF_PATH_B] = pHalData->TxPwrLevelHT40_1S[RF_PATH_B][index];
48575 }
48576 else if (GET_RF_TYPE(Adapter) == RF_2T2R)
48577 {
48578 // Read HT 40 OFDM TX power
48579 - ofdmPowerLevel[RF90_PATH_A] = pHalData->TxPwrLevelHT40_2S[RF90_PATH_A][index];
48580 - ofdmPowerLevel[RF90_PATH_B] = pHalData->TxPwrLevelHT40_2S[RF90_PATH_B][index];
48581 + ofdmPowerLevel[RF_PATH_A] = pHalData->TxPwrLevelHT40_2S[RF_PATH_A][index];
48582 + ofdmPowerLevel[RF_PATH_B] = pHalData->TxPwrLevelHT40_2S[RF_PATH_B][index];
48583 }
48584 //RTPRINT(FPHY, PHY_TXPWR, ("Channel-%d, set tx power index !!\n", channel));
48585 }
48586 @@ -2769,13 +2669,13 @@ PHY_ScanOperationBackup8192C(
48587 {
48588 case SCAN_OPT_BACKUP:
48589 IoType = IO_CMD_PAUSE_DM_BY_SCAN;
48590 - Adapter->HalFunc.SetHwRegHandler(Adapter,HW_VAR_IO_CMD, (pu1Byte)&IoType);
48591 + rtw_hal_set_hwreg(Adapter,HW_VAR_IO_CMD, (pu1Byte)&IoType);
48592
48593 break;
48594
48595 case SCAN_OPT_RESTORE:
48596 IoType = IO_CMD_RESUME_DM_BY_SCAN;
48597 - Adapter->HalFunc.SetHwRegHandler(Adapter,HW_VAR_IO_CMD, (pu1Byte)&IoType);
48598 + rtw_hal_set_hwreg(Adapter,HW_VAR_IO_CMD, (pu1Byte)&IoType);
48599 break;
48600
48601 default:
48602 @@ -2845,7 +2745,7 @@ _PHY_SetBWMode92C(
48603
48604 regBwOpMode = rtw_read8(Adapter, REG_BWOPMODE);
48605 regRRSR_RSC = rtw_read8(Adapter, REG_RRSR+2);
48606 - //regBwOpMode = Adapter->HalFunc.GetHwRegHandler(Adapter,HW_VAR_BWMODE,(pu1Byte)&regBwOpMode);
48607 + //regBwOpMode = rtw_hal_get_hwreg(Adapter,HW_VAR_BWMODE,(pu1Byte)&regBwOpMode);
48608
48609 switch(pHalData->CurrentChannelBW)
48610 {
48611 @@ -3041,6 +2941,11 @@ static void _PHY_SwChnl8192C(PADAPTER Adapter, u8 channel)
48612 u32 param1, param2;
48613 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
48614
48615 + if ( Adapter->bNotifyChannelChange )
48616 + {
48617 + DBG_871X( "[%s] ch = %d\n", __FUNCTION__, channel );
48618 + }
48619 +
48620 //s1. pre common command - CmdID_SetTxPowerLevel
48621 PHY_SetTxPowerLevel8192C(Adapter, channel);
48622
48623 @@ -3050,7 +2955,7 @@ static void _PHY_SwChnl8192C(PADAPTER Adapter, u8 channel)
48624 for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
48625 {
48626 pHalData->RfRegChnlVal[eRFPath] = ((pHalData->RfRegChnlVal[eRFPath] & 0xfffffc00) | param2);
48627 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, param1, bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
48628 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, param1, bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
48629 }
48630
48631
48632 @@ -3184,7 +3089,7 @@ phy_SwChnlStepByStep(
48633 pChnlAccessSetting = &Adapter->MgntInfo.Info8185.ChannelAccessSetting;
48634 RT_ASSERT((pChnlAccessSetting != NULL), ("pChnlAccessSetting should not be NULL\n"));
48635
48636 - //for(eRFPath = RF90_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
48637 + //for(eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
48638 //for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
48639 //{
48640 // <1> Fill up pre common command.
48641 @@ -3292,9 +3197,9 @@ phy_SwChnlStepByStep(
48642 {
48643 #if 1
48644 pHalData->RfRegChnlVal[eRFPath] = ((pHalData->RfRegChnlVal[eRFPath] & 0xfffffc00) | CurrentCmd->Para2);
48645 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
48646 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
48647 #else
48648 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, (CurrentCmd->Para2));
48649 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, (CurrentCmd->Para2));
48650 #endif
48651 }
48652 break;
48653 @@ -3441,7 +3346,7 @@ PHY_SetMonitorMode8192C(
48654
48655 pHalData->bInMonitorMode = TRUE;
48656 pAdapter->HalFunc.AllowAllDestAddrHandler(pAdapter, TRUE, TRUE);
48657 - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
48658 + rtw_hal_set_hwreg(pAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
48659 }
48660 else
48661 {
48662 @@ -3450,7 +3355,7 @@ PHY_SetMonitorMode8192C(
48663
48664 pAdapter->HalFunc.AllowAllDestAddrHandler(pAdapter, FALSE, TRUE);
48665 pHalData->bInMonitorMode = FALSE;
48666 - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
48667 + rtw_hal_set_hwreg(pAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
48668 }
48669 #endif
48670 }
48671 @@ -3483,11 +3388,11 @@ PHY_CheckIsLegalRfPath8192C(
48672
48673 // NOt check RF Path now.!
48674 #if 0
48675 - if (pHalData->RF_Type == RF_1T2R && eRFPath != RF90_PATH_A)
48676 + if (pHalData->RF_Type == RF_1T2R && eRFPath != RF_PATH_A)
48677 {
48678 rtValue = FALSE;
48679 }
48680 - if (pHalData->RF_Type == RF_1T2R && eRFPath != RF90_PATH_A)
48681 + if (pHalData->RF_Type == RF_1T2R && eRFPath != RF_PATH_A)
48682 {
48683
48684 }
48685 @@ -3512,48 +3417,49 @@ _PHY_PathA_IQK(
48686 {
48687 u32 regEAC, regE94, regE9C, regEA4;
48688 u8 result = 0x00;
48689 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
48690
48691 //RTPRINT(FINIT, INIT_IQK, ("Path A IQK!\n"));
48692
48693 //path-A IQK setting
48694 //RTPRINT(FINIT, INIT_IQK, ("Path-A IQK setting!\n"));
48695 - PHY_SetBBReg(pAdapter, 0xe30, bMaskDWord, 0x10008c1f);
48696 - PHY_SetBBReg(pAdapter, 0xe34, bMaskDWord, 0x10008c1f);
48697 - PHY_SetBBReg(pAdapter, 0xe38, bMaskDWord, 0x82140102);
48698 + PHY_SetBBReg(pAdapter, rTx_IQK_Tone_A, bMaskDWord, 0x10008c1f);
48699 + PHY_SetBBReg(pAdapter, rRx_IQK_Tone_A, bMaskDWord, 0x10008c1f);
48700 + PHY_SetBBReg(pAdapter, rTx_IQK_PI_A, bMaskDWord, 0x82140102);
48701
48702 - PHY_SetBBReg(pAdapter, 0xe3c, bMaskDWord, configPathB ? 0x28160202 : 0x28160502);
48703 + PHY_SetBBReg(pAdapter, rRx_IQK_PI_A, bMaskDWord, configPathB ? 0x28160202 :
48704 + IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID)?0x28160202:0x28160502);
48705
48706 -#if 1
48707 //path-B IQK setting
48708 if(configPathB)
48709 {
48710 - PHY_SetBBReg(pAdapter, 0xe50, bMaskDWord, 0x10008c22);
48711 - PHY_SetBBReg(pAdapter, 0xe54, bMaskDWord, 0x10008c22);
48712 - PHY_SetBBReg(pAdapter, 0xe58, bMaskDWord, 0x82140102);
48713 - PHY_SetBBReg(pAdapter, 0xe5c, bMaskDWord, 0x28160202);
48714 + PHY_SetBBReg(pAdapter, rTx_IQK_Tone_B, bMaskDWord, 0x10008c22);
48715 + PHY_SetBBReg(pAdapter, rRx_IQK_Tone_B, bMaskDWord, 0x10008c22);
48716 + PHY_SetBBReg(pAdapter, rTx_IQK_PI_B, bMaskDWord, 0x82140102);
48717 + PHY_SetBBReg(pAdapter, rRx_IQK_PI_B, bMaskDWord, 0x28160202);
48718 }
48719 -#endif
48720 +
48721 //LO calibration setting
48722 //RTPRINT(FINIT, INIT_IQK, ("LO calibration setting!\n"));
48723 - PHY_SetBBReg(pAdapter, 0xe4c, bMaskDWord, 0x001028d1);
48724 + PHY_SetBBReg(pAdapter, rIQK_AGC_Rsp, bMaskDWord, 0x001028d1);
48725
48726 //One shot, path A LOK & IQK
48727 //RTPRINT(FINIT, INIT_IQK, ("One shot, path A LOK & IQK!\n"));
48728 - PHY_SetBBReg(pAdapter, 0xe48, bMaskDWord, 0xf9000000);
48729 - PHY_SetBBReg(pAdapter, 0xe48, bMaskDWord, 0xf8000000);
48730 + PHY_SetBBReg(pAdapter, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
48731 + PHY_SetBBReg(pAdapter, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
48732
48733 // delay x ms
48734 //RTPRINT(FINIT, INIT_IQK, ("Delay %d ms for One shot, path A LOK & IQK.\n", IQK_DELAY_TIME));
48735 rtw_udelay_os(IQK_DELAY_TIME*1000);//PlatformStallExecution(IQK_DELAY_TIME*1000);
48736
48737 // Check failed
48738 - regEAC = PHY_QueryBBReg(pAdapter, 0xeac, bMaskDWord);
48739 + regEAC = PHY_QueryBBReg(pAdapter, rRx_Power_After_IQK_A_2, bMaskDWord);
48740 //RTPRINT(FINIT, INIT_IQK, ("0xeac = 0x%x\n", regEAC));
48741 - regE94 = PHY_QueryBBReg(pAdapter, 0xe94, bMaskDWord);
48742 + regE94 = PHY_QueryBBReg(pAdapter, rTx_Power_Before_IQK_A, bMaskDWord);
48743 //RTPRINT(FINIT, INIT_IQK, ("0xe94 = 0x%x\n", regE94));
48744 - regE9C= PHY_QueryBBReg(pAdapter, 0xe9c, bMaskDWord);
48745 + regE9C= PHY_QueryBBReg(pAdapter, rTx_Power_After_IQK_A, bMaskDWord);
48746 //RTPRINT(FINIT, INIT_IQK, ("0xe9c = 0x%x\n", regE9C));
48747 - regEA4= PHY_QueryBBReg(pAdapter, 0xea4, bMaskDWord);
48748 + regEA4= PHY_QueryBBReg(pAdapter, rRx_Power_Before_IQK_A_2, bMaskDWord);
48749 //RTPRINT(FINIT, INIT_IQK, ("0xea4 = 0x%x\n", regEA4));
48750
48751 if(!(regEAC & BIT28) &&
48752 @@ -3583,37 +3489,26 @@ _PHY_PathB_IQK(
48753 u32 regEAC, regEB4, regEBC, regEC4, regECC;
48754 u8 result = 0x00;
48755 //RTPRINT(FINIT, INIT_IQK, ("Path B IQK!\n"));
48756 -#if 0
48757 - //path-B IQK setting
48758 - RTPRINT(FINIT, INIT_IQK, ("Path-B IQK setting!\n"));
48759 - PHY_SetBBReg(pAdapter, 0xe50, bMaskDWord, 0x10008c22);
48760 - PHY_SetBBReg(pAdapter, 0xe54, bMaskDWord, 0x10008c22);
48761 - PHY_SetBBReg(pAdapter, 0xe58, bMaskDWord, 0x82140102);
48762 - PHY_SetBBReg(pAdapter, 0xe5c, bMaskDWord, 0x28160202);
48763
48764 - //LO calibration setting
48765 - RTPRINT(FINIT, INIT_IQK, ("LO calibration setting!\n"));
48766 - PHY_SetBBReg(pAdapter, 0xe4c, bMaskDWord, 0x001028d1);
48767 -#endif
48768 //One shot, path B LOK & IQK
48769 //RTPRINT(FINIT, INIT_IQK, ("One shot, path A LOK & IQK!\n"));
48770 - PHY_SetBBReg(pAdapter, 0xe60, bMaskDWord, 0x00000002);
48771 - PHY_SetBBReg(pAdapter, 0xe60, bMaskDWord, 0x00000000);
48772 + PHY_SetBBReg(pAdapter, rIQK_AGC_Cont, bMaskDWord, 0x00000002);
48773 + PHY_SetBBReg(pAdapter, rIQK_AGC_Cont, bMaskDWord, 0x00000000);
48774
48775 // delay x ms
48776 //RTPRINT(FINIT, INIT_IQK, ("Delay %d ms for One shot, path B LOK & IQK.\n", IQK_DELAY_TIME));
48777 rtw_udelay_os(IQK_DELAY_TIME*1000);//PlatformStallExecution(IQK_DELAY_TIME*1000);
48778
48779 // Check failed
48780 - regEAC = PHY_QueryBBReg(pAdapter, 0xeac, bMaskDWord);
48781 + regEAC = PHY_QueryBBReg(pAdapter, rRx_Power_After_IQK_A_2, bMaskDWord);
48782 //RTPRINT(FINIT, INIT_IQK, ("0xeac = 0x%x\n", regEAC));
48783 - regEB4 = PHY_QueryBBReg(pAdapter, 0xeb4, bMaskDWord);
48784 + regEB4 = PHY_QueryBBReg(pAdapter, rTx_Power_Before_IQK_B, bMaskDWord);
48785 //RTPRINT(FINIT, INIT_IQK, ("0xeb4 = 0x%x\n", regEB4));
48786 - regEBC= PHY_QueryBBReg(pAdapter, 0xebc, bMaskDWord);
48787 + regEBC= PHY_QueryBBReg(pAdapter, rTx_Power_After_IQK_B, bMaskDWord);
48788 //RTPRINT(FINIT, INIT_IQK, ("0xebc = 0x%x\n", regEBC));
48789 - regEC4= PHY_QueryBBReg(pAdapter, 0xec4, bMaskDWord);
48790 + regEC4= PHY_QueryBBReg(pAdapter, rRx_Power_Before_IQK_B_2, bMaskDWord);
48791 //RTPRINT(FINIT, INIT_IQK, ("0xec4 = 0x%x\n", regEC4));
48792 - regECC= PHY_QueryBBReg(pAdapter, 0xecc, bMaskDWord);
48793 + regECC= PHY_QueryBBReg(pAdapter, rRx_Power_After_IQK_B_2, bMaskDWord);
48794 //RTPRINT(FINIT, INIT_IQK, ("0xecc = 0x%x\n", regECC));
48795
48796 if(!(regEAC & BIT31) &&
48797 @@ -3638,15 +3533,15 @@ _PHY_PathB_IQK(
48798 static VOID
48799 _PHY_PathAFillIQKMatrix(
48800 IN PADAPTER pAdapter,
48801 - IN BOOLEAN bIQKOK,
48802 - IN int result[][8],
48803 - IN u8 final_candidate,
48804 - IN BOOLEAN bTxOnly
48805 + IN BOOLEAN bIQKOK,
48806 + IN int result[][8],
48807 + IN u8 final_candidate,
48808 + IN BOOLEAN bTxOnly
48809 )
48810 {
48811 u32 Oldval_0, X, TX0_A, reg;
48812 - int Y, TX0_C;
48813 -
48814 + s32 Y, TX0_C;
48815 +
48816 DBG_8192C("Path A IQ Calibration %s !\n",(bIQKOK)?"Success":"Failed");
48817
48818 if(final_candidate == 0xFF)
48819 @@ -3657,7 +3552,7 @@ _PHY_PathAFillIQKMatrix(
48820
48821 X = result[final_candidate][0];
48822 if ((X & 0x00000200) != 0)
48823 - X = X | 0xFFFFFC00;
48824 + X = X | 0xFFFFFC00;
48825 TX0_A = (X * Oldval_0) >> 8;
48826 //RTPRINT(FINIT, INIT_IQK, ("X = 0x%lx, TX0_A = 0x%lx, Oldval_0 0x%lx\n", X, TX0_A, Oldval_0));
48827 PHY_SetBBReg(pAdapter, rOFDM0_XATxIQImbalance, 0x3FF, TX0_A);
48828 @@ -3665,7 +3560,7 @@ _PHY_PathAFillIQKMatrix(
48829
48830 Y = result[final_candidate][1];
48831 if ((Y & 0x00000200) != 0)
48832 - Y = Y | 0xFFFFFC00;
48833 + Y = Y | 0xFFFFFC00;
48834 TX0_C = (Y * Oldval_0) >> 8;
48835 //RTPRINT(FINIT, INIT_IQK, ("Y = 0x%lx, TX = 0x%lx\n", Y, TX0_C));
48836 PHY_SetBBReg(pAdapter, rOFDM0_XCTxAFE, 0xF0000000, ((TX0_C&0x3C0)>>6));
48837 @@ -3680,26 +3575,26 @@ _PHY_PathAFillIQKMatrix(
48838
48839 reg = result[final_candidate][2];
48840 PHY_SetBBReg(pAdapter, rOFDM0_XARxIQImbalance, 0x3FF, reg);
48841 -
48842 +
48843 reg = result[final_candidate][3] & 0x3F;
48844 PHY_SetBBReg(pAdapter, rOFDM0_XARxIQImbalance, 0xFC00, reg);
48845
48846 reg = (result[final_candidate][3] >> 6) & 0xF;
48847 - PHY_SetBBReg(pAdapter, 0xca0, 0xF0000000, reg);
48848 + PHY_SetBBReg(pAdapter, rOFDM0_RxIQExtAnta, 0xF0000000, reg);
48849 }
48850 }
48851
48852 static VOID
48853 _PHY_PathBFillIQKMatrix(
48854 IN PADAPTER pAdapter,
48855 - IN BOOLEAN bIQKOK,
48856 - IN int result[][8],
48857 - IN u8 final_candidate,
48858 + IN BOOLEAN bIQKOK,
48859 + IN int result[][8],
48860 + IN u8 final_candidate,
48861 IN BOOLEAN bTxOnly //do Tx only
48862 )
48863 {
48864 u32 Oldval_1, X, TX1_A, reg;
48865 - int Y, TX1_C;
48866 + s32 Y, TX1_C;
48867
48868 DBG_8192C("Path B IQ Calibration %s !\n",(bIQKOK)?"Success":"Failed");
48869
48870 @@ -3731,7 +3626,7 @@ _PHY_PathBFillIQKMatrix(
48871
48872 reg = result[final_candidate][6];
48873 PHY_SetBBReg(pAdapter, rOFDM0_XBRxIQImbalance, 0x3FF, reg);
48874 -
48875 +
48876 reg = result[final_candidate][7] & 0x3F;
48877 PHY_SetBBReg(pAdapter, rOFDM0_XBRxIQImbalance, 0xFC00, reg);
48878
48879 @@ -3860,9 +3755,9 @@ _PHY_PathAStandBy(
48880 {
48881 //RTPRINT(FINIT, INIT_IQK, ("Path-A standby mode!\n"));
48882
48883 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x0);
48884 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x0);
48885 PHY_SetBBReg(pAdapter, 0x840, bMaskDWord, 0x00010000);
48886 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x80800000);
48887 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x80800000);
48888 }
48889
48890 static VOID
48891 @@ -3915,7 +3810,7 @@ _PHY_SimularityCompare(
48892 else if (result[c2][i]+result[c2][i+1] == 0)
48893 final_candidate[(i/4)] = c1;
48894 else
48895 - SimularityBitMap = SimularityBitMap|(1<<i);
48896 + SimularityBitMap = SimularityBitMap|(1<<i);
48897 }
48898 else
48899 SimularityBitMap = SimularityBitMap|(1<<i);
48900 @@ -3964,17 +3859,26 @@ _PHY_IQCalibrate(
48901 struct dm_priv *pdmpriv = &pHalData->dmpriv;
48902 u32 i;
48903 u8 PathAOK, PathBOK;
48904 - u32 ADDA_REG[IQK_ADDA_REG_NUM] = { 0x85c, 0xe6c, 0xe70, 0xe74,
48905 - 0xe78, 0xe7c, 0xe80, 0xe84,
48906 - 0xe88, 0xe8c, 0xed0, 0xed4,
48907 - 0xed8, 0xedc, 0xee0, 0xeec };
48908 -
48909 - u32 IQK_MAC_REG[IQK_MAC_REG_NUM] = {0x522, 0x550, 0x551,0x040};
48910 -
48911 - u32 IQK_BB_REG[IQK_BB_REG_NUM] = {
48912 - 0xc04, 0xc08, 0x874, 0xb68, 0xb6c,
48913 - 0x870, 0x860, 0x864, 0x800
48914 - };
48915 + u32 ADDA_REG[IQK_ADDA_REG_NUM] = {
48916 + rFPGA0_XCD_SwitchControl, rBlue_Tooth,
48917 + rRx_Wait_CCA, rTx_CCK_RFON,
48918 + rTx_CCK_BBON, rTx_OFDM_RFON,
48919 + rTx_OFDM_BBON, rTx_To_Rx,
48920 + rTx_To_Tx, rRx_CCK,
48921 + rRx_OFDM, rRx_Wait_RIFS,
48922 + rRx_TO_Rx, rStandby,
48923 + rSleep, rPMPD_ANAEN };
48924 +
48925 + u32 IQK_MAC_REG[IQK_MAC_REG_NUM] = {
48926 + REG_TXPAUSE, REG_BCN_CTRL,
48927 + REG_BCN_CTRL_1, REG_GPIO_MUXCFG};
48928 +
48929 + u32 IQK_BB_REG_92C[IQK_BB_REG_NUM] = {
48930 + rOFDM0_TRxPathEnable, rOFDM0_TRMuxPar,
48931 + rFPGA0_XCD_RFInterfaceSW, rConfig_AntA, rConfig_AntB,
48932 + rFPGA0_XAB_RFInterfaceSW, rFPGA0_XA_RFInterfaceOE,
48933 + rFPGA0_XB_RFInterfaceOE, rFPGA0_RFMOD
48934 + };
48935
48936 #if MP_DRIVER
48937 const u32 retryCount = 9;
48938 @@ -3986,11 +3890,10 @@ _PHY_IQCalibrate(
48939 // PHY_REG.txt , and radio_a, radio_b.txt
48940
48941 u32 bbvalue;
48942 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
48943
48944 if(t==0)
48945 {
48946 - bbvalue = PHY_QueryBBReg(pAdapter, 0x800, bMaskDWord);
48947 + bbvalue = PHY_QueryBBReg(pAdapter, rFPGA0_RFMOD, bMaskDWord);
48948 //RTPRINT(FINIT, INIT_IQK, ("PHY_IQCalibrate()==>0x%08lx\n",bbvalue));
48949
48950 //RTPRINT(FINIT, INIT_IQK, ("IQ Calibration for %s\n", (is2T ? "2T2R" : "1T1R")));
48951 @@ -3998,7 +3901,7 @@ _PHY_IQCalibrate(
48952 // Save ADDA parameters, turn Path A ADDA on
48953 _PHY_SaveADDARegisters(pAdapter, ADDA_REG, pdmpriv->ADDA_backup,IQK_ADDA_REG_NUM);
48954 _PHY_SaveMACRegisters(pAdapter, IQK_MAC_REG, pdmpriv->IQK_MAC_backup);
48955 - _PHY_SaveADDARegisters(pAdapter, IQK_BB_REG, pdmpriv->IQK_BB_backup, IQK_BB_REG_NUM);
48956 + _PHY_SaveADDARegisters(pAdapter, IQK_BB_REG_92C, pdmpriv->IQK_BB_backup, IQK_BB_REG_NUM);
48957 }
48958 _PHY_PathADDAOn(pAdapter, ADDA_REG, _TRUE, is2T);
48959
48960 @@ -4012,60 +3915,54 @@ _PHY_IQCalibrate(
48961 _PHY_PIModeSwitch(pAdapter, _TRUE);
48962 }
48963
48964 - PHY_SetBBReg(pAdapter, 0x800, BIT24, 0x00);
48965 - PHY_SetBBReg(pAdapter, 0xc04, bMaskDWord, 0x03a05600);
48966 - PHY_SetBBReg(pAdapter, 0xc08, bMaskDWord, 0x000800e4);
48967 - PHY_SetBBReg(pAdapter, 0x874, bMaskDWord, 0x22204000);
48968 - PHY_SetBBReg(pAdapter, 0x870, BIT10, 0x01);
48969 - PHY_SetBBReg(pAdapter, 0x870, BIT26, 0x01);
48970 - PHY_SetBBReg(pAdapter, 0x860, BIT10, 0x00);
48971 - PHY_SetBBReg(pAdapter, 0x864, BIT10, 0x00);
48972 + PHY_SetBBReg(pAdapter, rFPGA0_RFMOD, BIT24, 0x00);
48973 + PHY_SetBBReg(pAdapter, rOFDM0_TRxPathEnable, bMaskDWord, 0x03a05600);
48974 + PHY_SetBBReg(pAdapter, rOFDM0_TRMuxPar, bMaskDWord, 0x000800e4);
48975 + PHY_SetBBReg(pAdapter, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, 0x22204000);
48976 + PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 0x01);
48977 + PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 0x01);
48978 + PHY_SetBBReg(pAdapter, rFPGA0_XA_RFInterfaceOE, BIT10, 0x00);
48979 + PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0x00);
48980
48981 if(is2T)
48982 {
48983 - PHY_SetBBReg(pAdapter, 0x840, bMaskDWord, 0x00010000);
48984 - PHY_SetBBReg(pAdapter, 0x844, bMaskDWord, 0x00010000);
48985 + PHY_SetBBReg(pAdapter, rFPGA0_XA_LSSIParameter, bMaskDWord, 0x00010000);
48986 + PHY_SetBBReg(pAdapter, rFPGA0_XB_LSSIParameter, bMaskDWord, 0x00010000);
48987 }
48988
48989 //MAC settings
48990 _PHY_MACSettingCalibration(pAdapter, IQK_MAC_REG, pdmpriv->IQK_MAC_backup);
48991
48992 //Page B init
48993 - if(isNormal)
48994 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x00080000);
48995 - else
48996 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x0f600000);
48997 + PHY_SetBBReg(pAdapter, rConfig_AntA, bMaskDWord, 0x00080000);
48998
48999 if(is2T)
49000 {
49001 - if(isNormal)
49002 - PHY_SetBBReg(pAdapter, 0xb6c, bMaskDWord, 0x00080000);
49003 - else
49004 - PHY_SetBBReg(pAdapter, 0xb6c, bMaskDWord, 0x0f600000);
49005 + PHY_SetBBReg(pAdapter, rConfig_AntB, bMaskDWord, 0x00080000);
49006 }
49007
49008 // IQ calibration setting
49009 //RTPRINT(FINIT, INIT_IQK, ("IQK setting!\n"));
49010 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x80800000);
49011 - PHY_SetBBReg(pAdapter, 0xe40, bMaskDWord, 0x01007c00);
49012 - PHY_SetBBReg(pAdapter, 0xe44, bMaskDWord, 0x01004800);
49013 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x80800000);
49014 + PHY_SetBBReg(pAdapter, rTx_IQK, bMaskDWord, 0x01007c00);
49015 + PHY_SetBBReg(pAdapter, rRx_IQK, bMaskDWord, 0x01004800);
49016
49017 for(i = 0 ; i < retryCount ; i++){
49018 PathAOK = _PHY_PathA_IQK(pAdapter, is2T);
49019 if(PathAOK == 0x03){
49020 DBG_8192C("Path A IQK Success!!\n");
49021 - result[t][0] = (PHY_QueryBBReg(pAdapter, 0xe94, bMaskDWord)&0x3FF0000)>>16;
49022 - result[t][1] = (PHY_QueryBBReg(pAdapter, 0xe9c, bMaskDWord)&0x3FF0000)>>16;
49023 - result[t][2] = (PHY_QueryBBReg(pAdapter, 0xea4, bMaskDWord)&0x3FF0000)>>16;
49024 - result[t][3] = (PHY_QueryBBReg(pAdapter, 0xeac, bMaskDWord)&0x3FF0000)>>16;
49025 + result[t][0] = (PHY_QueryBBReg(pAdapter, rTx_Power_Before_IQK_A, bMaskDWord)&0x3FF0000)>>16;
49026 + result[t][1] = (PHY_QueryBBReg(pAdapter, rTx_Power_After_IQK_A, bMaskDWord)&0x3FF0000)>>16;
49027 + result[t][2] = (PHY_QueryBBReg(pAdapter, rRx_Power_Before_IQK_A_2, bMaskDWord)&0x3FF0000)>>16;
49028 + result[t][3] = (PHY_QueryBBReg(pAdapter, rRx_Power_After_IQK_A_2, bMaskDWord)&0x3FF0000)>>16;
49029 break;
49030 }
49031 else if (i == (retryCount-1) && PathAOK == 0x01) //Tx IQK OK
49032 {
49033 DBG_8192C("Path A IQK Only Tx Success!!\n");
49034
49035 - result[t][0] = (PHY_QueryBBReg(pAdapter, 0xe94, bMaskDWord)&0x3FF0000)>>16;
49036 - result[t][1] = (PHY_QueryBBReg(pAdapter, 0xe9c, bMaskDWord)&0x3FF0000)>>16;
49037 + result[t][0] = (PHY_QueryBBReg(pAdapter, rTx_Power_Before_IQK_A, bMaskDWord)&0x3FF0000)>>16;
49038 + result[t][1] = (PHY_QueryBBReg(pAdapter, rTx_Power_After_IQK_A, bMaskDWord)&0x3FF0000)>>16;
49039 }
49040 }
49041
49042 @@ -4083,17 +3980,17 @@ _PHY_IQCalibrate(
49043 PathBOK = _PHY_PathB_IQK(pAdapter);
49044 if(PathBOK == 0x03){
49045 DBG_8192C("Path B IQK Success!!\n");
49046 - result[t][4] = (PHY_QueryBBReg(pAdapter, 0xeb4, bMaskDWord)&0x3FF0000)>>16;
49047 - result[t][5] = (PHY_QueryBBReg(pAdapter, 0xebc, bMaskDWord)&0x3FF0000)>>16;
49048 - result[t][6] = (PHY_QueryBBReg(pAdapter, 0xec4, bMaskDWord)&0x3FF0000)>>16;
49049 - result[t][7] = (PHY_QueryBBReg(pAdapter, 0xecc, bMaskDWord)&0x3FF0000)>>16;
49050 + result[t][4] = (PHY_QueryBBReg(pAdapter, rTx_Power_Before_IQK_B, bMaskDWord)&0x3FF0000)>>16;
49051 + result[t][5] = (PHY_QueryBBReg(pAdapter, rTx_Power_After_IQK_B, bMaskDWord)&0x3FF0000)>>16;
49052 + result[t][6] = (PHY_QueryBBReg(pAdapter, rRx_Power_Before_IQK_B_2, bMaskDWord)&0x3FF0000)>>16;
49053 + result[t][7] = (PHY_QueryBBReg(pAdapter, rRx_Power_After_IQK_B_2, bMaskDWord)&0x3FF0000)>>16;
49054 break;
49055 }
49056 else if (i == (retryCount - 1) && PathBOK == 0x01) //Tx IQK OK
49057 {
49058 DBG_8192C("Path B Only Tx IQK Success!!\n");
49059 - result[t][4] = (PHY_QueryBBReg(pAdapter, 0xeb4, bMaskDWord)&0x3FF0000)>>16;
49060 - result[t][5] = (PHY_QueryBBReg(pAdapter, 0xebc, bMaskDWord)&0x3FF0000)>>16;
49061 + result[t][4] = (PHY_QueryBBReg(pAdapter, rTx_Power_Before_IQK_B, bMaskDWord)&0x3FF0000)>>16;
49062 + result[t][5] = (PHY_QueryBBReg(pAdapter, rTx_Power_After_IQK_B, bMaskDWord)&0x3FF0000)>>16;
49063 }
49064 }
49065
49066 @@ -4104,7 +4001,7 @@ _PHY_IQCalibrate(
49067
49068 //Back to BB mode, load original value
49069 //RTPRINT(FINIT, INIT_IQK, ("IQK:Back to BB mode, load original value!\n"));
49070 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0);
49071 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0);
49072
49073 if(t!=0)
49074 {
49075 @@ -4120,17 +4017,17 @@ _PHY_IQCalibrate(
49076 _PHY_ReloadMACRegisters(pAdapter, IQK_MAC_REG, pdmpriv->IQK_MAC_backup);
49077
49078 // Reload BB parameters
49079 - _PHY_ReloadADDARegisters(pAdapter, IQK_BB_REG, pdmpriv->IQK_BB_backup, IQK_BB_REG_NUM);
49080 + _PHY_ReloadADDARegisters(pAdapter, IQK_BB_REG_92C, pdmpriv->IQK_BB_backup, IQK_BB_REG_NUM);
49081
49082 // Restore RX initial gain
49083 - PHY_SetBBReg(pAdapter, 0x840, bMaskDWord, 0x00032ed3);
49084 + PHY_SetBBReg(pAdapter, rFPGA0_XA_LSSIParameter, bMaskDWord, 0x00032ed3);
49085 if(is2T){
49086 - PHY_SetBBReg(pAdapter, 0x844, bMaskDWord, 0x00032ed3);
49087 + PHY_SetBBReg(pAdapter, rFPGA0_XB_LSSIParameter, bMaskDWord, 0x00032ed3);
49088 }
49089
49090 //load 0xe30 IQC default value
49091 - PHY_SetBBReg(pAdapter, 0xe30, bMaskDWord, 0x01008c00);
49092 - PHY_SetBBReg(pAdapter, 0xe34, bMaskDWord, 0x01008c00);
49093 + PHY_SetBBReg(pAdapter, rTx_IQK_Tone_A, bMaskDWord, 0x01008c00);
49094 + PHY_SetBBReg(pAdapter, rRx_IQK_Tone_A, bMaskDWord, 0x01008c00);
49095
49096 }
49097 //RTPRINT(FINIT, INIT_IQK, ("_PHY_IQCalibrate() <==\n"));
49098 @@ -4146,8 +4043,6 @@ _PHY_LCCalibrate(
49099 {
49100 u8 tmpReg;
49101 u32 RF_Amode = 0, RF_Bmode = 0, LC_Cal;
49102 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
49103 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
49104
49105 //Check continuous TX and Packet TX
49106 tmpReg = rtw_read8(pAdapter, 0xd03);
49107 @@ -4161,47 +4056,43 @@ _PHY_LCCalibrate(
49108 {
49109 //1. Read original RF mode
49110 //Path-A
49111 - RF_Amode = PHY_QueryRFReg(pAdapter, RF90_PATH_A, 0x00, bMask12Bits);
49112 + RF_Amode = PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_AC, bMask12Bits);
49113
49114 //Path-B
49115 if(is2T)
49116 - RF_Bmode = PHY_QueryRFReg(pAdapter, RF90_PATH_B, 0x00, bMask12Bits);
49117 + RF_Bmode = PHY_QueryRFReg(pAdapter, RF_PATH_B, RF_AC, bMask12Bits);
49118
49119 //2. Set RF mode = standby mode
49120 //Path-A
49121 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x00, bMask12Bits, (RF_Amode&0x8FFFF)|0x10000);
49122 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_AC, bMask12Bits, (RF_Amode&0x8FFFF)|0x10000);
49123
49124 //Path-B
49125 if(is2T)
49126 - PHY_SetRFReg(pAdapter, RF90_PATH_B, 0x00, bMask12Bits, (RF_Bmode&0x8FFFF)|0x10000);
49127 + PHY_SetRFReg(pAdapter, RF_PATH_B, RF_AC, bMask12Bits, (RF_Bmode&0x8FFFF)|0x10000);
49128 }
49129
49130 //3. Read RF reg18
49131 - LC_Cal = PHY_QueryRFReg(pAdapter, RF90_PATH_A, 0x18, bMask12Bits);
49132 + LC_Cal = PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_CHNLBW, bMask12Bits);
49133
49134 //4. Set LC calibration begin
49135 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x18, bMask12Bits, LC_Cal|0x08000);
49136 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_CHNLBW, bMask12Bits, LC_Cal|0x08000);
49137
49138 - if(isNormal) {
49139 - #ifdef CONFIG_LONG_DELAY_ISSUE
49140 - rtw_msleep_os(100);
49141 - #else
49142 - rtw_mdelay_os(100);
49143 - #endif
49144 - }
49145 - else
49146 - rtw_mdelay_os(3);
49147 + #ifdef CONFIG_LONG_DELAY_ISSUE
49148 + rtw_msleep_os(100);
49149 + #else
49150 + rtw_mdelay_os(100);
49151 + #endif
49152
49153 //Restore original situation
49154 if((tmpReg&0x70) != 0) //Deal with contisuous TX case
49155 {
49156 //Path-A
49157 rtw_write8(pAdapter, 0xd03, tmpReg);
49158 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x00, bMask12Bits, RF_Amode);
49159 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_AC, bMask12Bits, RF_Amode);
49160
49161 //Path-B
49162 if(is2T)
49163 - PHY_SetRFReg(pAdapter, RF90_PATH_B, 0x00, bMask12Bits, RF_Bmode);
49164 + PHY_SetRFReg(pAdapter, RF_PATH_B, RF_AC, bMask12Bits, RF_Bmode);
49165 }
49166 else // Deal with Packet TX case
49167 {
49168 @@ -4223,17 +4114,18 @@ _PHY_APCalibrate(
49169 IN BOOLEAN is2T
49170 )
49171 {
49172 -#if 1//(PLATFORM == PLATFORM_WINDOWS)//???
49173 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
49174 struct dm_priv *pdmpriv = &pHalData->dmpriv;
49175
49176 u32 regD[PATH_NUM];
49177 - u32 tmpReg, index, offset, path, i, pathbound = PATH_NUM, apkbound;
49178 -
49179 + u32 tmpReg, index, offset, i, apkbound;
49180 + u8 path, pathbound = PATH_NUM;
49181 u32 BB_backup[APK_BB_REG_NUM];
49182 u32 BB_REG[APK_BB_REG_NUM] = {
49183 - 0x904, 0xc04, 0x800, 0xc08, 0x874,
49184 - 0x870, 0x860, 0x864 };
49185 + rFPGA1_TxBlock, rOFDM0_TRxPathEnable,
49186 + rFPGA0_RFMOD, rOFDM0_TRMuxPar,
49187 + rFPGA0_XCD_RFInterfaceSW, rFPGA0_XAB_RFInterfaceSW,
49188 + rFPGA0_XA_RFInterfaceOE, rFPGA0_XB_RFInterfaceOE };
49189 u32 BB_AP_MODE[APK_BB_REG_NUM] = {
49190 0x00000020, 0x00a05430, 0x02040000,
49191 0x000800e4, 0x00204000 };
49192 @@ -4243,14 +4135,19 @@ _PHY_APCalibrate(
49193
49194 u32 AFE_backup[IQK_ADDA_REG_NUM];
49195 u32 AFE_REG[IQK_ADDA_REG_NUM] = {
49196 - 0x85c, 0xe6c, 0xe70, 0xe74, 0xe78,
49197 - 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c,
49198 - 0xed0, 0xed4, 0xed8, 0xedc, 0xee0,
49199 - 0xeec};
49200 + rFPGA0_XCD_SwitchControl, rBlue_Tooth,
49201 + rRx_Wait_CCA, rTx_CCK_RFON,
49202 + rTx_CCK_BBON, rTx_OFDM_RFON,
49203 + rTx_OFDM_BBON, rTx_To_Rx,
49204 + rTx_To_Tx, rRx_CCK,
49205 + rRx_OFDM, rRx_Wait_RIFS,
49206 + rRx_TO_Rx, rStandby,
49207 + rSleep, rPMPD_ANAEN };
49208
49209 u32 MAC_backup[IQK_MAC_REG_NUM];
49210 u32 MAC_REG[IQK_MAC_REG_NUM] = {
49211 - 0x522, 0x550, 0x551, 0x040};
49212 + REG_TXPAUSE, REG_BCN_CTRL,
49213 + REG_BCN_CTRL_1, REG_GPIO_MUXCFG};
49214
49215 u32 APK_RF_init_value[PATH_NUM][APK_BB_REG_NUM] = {
49216 {0x0852c, 0x1852c, 0x5852c, 0x1852c, 0x5852c},
49217 @@ -4271,20 +4168,20 @@ _PHY_APCalibrate(
49218 {0x52019, 0x52017, 0x52010, 0x5200d, 0x5206a}, //path settings equal to path b settings
49219 {0x52019, 0x52017, 0x52010, 0x5200d, 0x5206a}
49220 };
49221 -
49222 +#if 0
49223 u32 APK_RF_value_A[PATH_NUM][APK_BB_REG_NUM] = {
49224 {0x1adb0, 0x1adb0, 0x1ada0, 0x1ad90, 0x1ad80},
49225 {0x00fb0, 0x00fb0, 0x00fa0, 0x00f90, 0x00f80}
49226 };
49227 -
49228 +#endif
49229 u32 AFE_on_off[PATH_NUM] = {
49230 0x04db25a4, 0x0b1b25a4}; //path A on path B off / path A off path B on
49231
49232 u32 APK_offset[PATH_NUM] = {
49233 - 0xb68, 0xb6c};
49234 + rConfig_AntA, rConfig_AntB};
49235
49236 u32 APK_normal_offset[PATH_NUM] = {
49237 - 0xb28, 0xb98};
49238 + rConfig_Pmpd_AntA, rConfig_Pmpd_AntB};
49239
49240 u32 APK_value[PATH_NUM] = {
49241 0x92fc0000, 0x12fc0000};
49242 @@ -4294,7 +4191,7 @@ _PHY_APCalibrate(
49243
49244 char APK_delta_mapping[APK_BB_REG_NUM][13] = {
49245 {-4, -3, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6},
49246 - {-4, -3, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6},
49247 + {-4, -3, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6},
49248 {-6, -4, -2, -2, -1, -1, 0, 1, 2, 3, 4, 5, 6},
49249 {-1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6},
49250 {-11, -9, -7, -5, -3, -1, 0, 0, 0, 0, 0, 0, 0}
49251 @@ -4314,17 +4211,15 @@ _PHY_APCalibrate(
49252 };
49253
49254 u32 APK_result[PATH_NUM][APK_BB_REG_NUM]; //val_1_1a, val_1_2a, val_2a, val_3a, val_4a
49255 - u32 AP_curve[PATH_NUM][APK_CURVE_REG_NUM];
49256 + //u32 AP_curve[PATH_NUM][APK_CURVE_REG_NUM];
49257
49258 int BB_offset, delta_V, delta_offset;
49259
49260 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
49261 -
49262 #if (MP_DRIVER == 1)
49263 PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.MptCtx;
49264
49265 pMptCtx->APK_bound[0] = 45;
49266 - pMptCtx->APK_bound[1] = 52;
49267 + pMptCtx->APK_bound[1] = 52;
49268 #endif
49269
49270 //RTPRINT(FINIT, INIT_IQK, ("==>PHY_APCalibrate() delta %d\n", delta));
49271 @@ -4335,48 +4230,39 @@ _PHY_APCalibrate(
49272 pathbound = 1;
49273
49274 //2 FOR NORMAL CHIP SETTINGS
49275 - if(isNormal)
49276 - {
49277 +
49278 // Temporarily do not allow normal driver to do the following settings because these offset
49279 // and value will cause RF internal PA to be unpredictably disabled by HW, such that RF Tx signal
49280 // will disappear after disable/enable card many times on 88CU. RF SD and DD have not find the
49281 // root cause, so we remove these actions temporarily. Added by tynli and SD3 Allen. 2010.05.31.
49282 #if (MP_DRIVER != 1)
49283 - return;
49284 + return;
49285 #endif
49286 -
49287 - //settings adjust for normal chip
49288 - for(index = 0; index < PATH_NUM; index ++)
49289 - {
49290 - APK_offset[index] = APK_normal_offset[index];
49291 - APK_value[index] = APK_normal_value[index];
49292 - AFE_on_off[index] = 0x6fdb25a4;
49293 - }
49294
49295 - for(index = 0; index < APK_BB_REG_NUM; index ++)
49296 - {
49297 - for(path = 0; path < pathbound; path++)
49298 - {
49299 - APK_RF_init_value[path][index] = APK_normal_RF_init_value[path][index];
49300 - APK_RF_value_0[path][index] = APK_normal_RF_value_0[path][index];
49301 - }
49302 - BB_AP_MODE[index] = BB_normal_AP_MODE[index];
49303 - }
49304 -
49305 - apkbound = 6;
49306 + //settings adjust for normal chip
49307 + for(index = 0; index < PATH_NUM; index ++)
49308 + {
49309 + APK_offset[index] = APK_normal_offset[index];
49310 + APK_value[index] = APK_normal_value[index];
49311 + AFE_on_off[index] = 0x6fdb25a4;
49312 }
49313 - else
49314 +
49315 + for(index = 0; index < APK_BB_REG_NUM; index ++)
49316 {
49317 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x0fe00000);
49318 - if(is2T)
49319 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x0fe00000);
49320 - apkbound = 12;
49321 + for(path = 0; path < pathbound; path++)
49322 + {
49323 + APK_RF_init_value[path][index] = APK_normal_RF_init_value[path][index];
49324 + APK_RF_value_0[path][index] = APK_normal_RF_value_0[path][index];
49325 + }
49326 + BB_AP_MODE[index] = BB_normal_AP_MODE[index];
49327 }
49328 -
49329 +
49330 + apkbound = 6;
49331 +
49332 //save BB default value
49333 for(index = 0; index < APK_BB_REG_NUM ; index++)
49334 {
49335 - if(index == 0 && isNormal) //skip
49336 + if(index == 0) //skip
49337 continue;
49338 BB_backup[index] = PHY_QueryBBReg(pAdapter, BB_REG[index], bMaskDWord);
49339 }
49340 @@ -4385,116 +4271,93 @@ _PHY_APCalibrate(
49341 _PHY_SaveMACRegisters(pAdapter, MAC_REG, MAC_backup);
49342
49343 //save AFE default value
49344 - _PHY_SaveADDARegisters(pAdapter, AFE_REG, AFE_backup,16);
49345 + _PHY_SaveADDARegisters(pAdapter, AFE_REG, AFE_backup, IQK_ADDA_REG_NUM);
49346
49347 for(path = 0; path < pathbound; path++)
49348 {
49349 - //save old AP curve
49350 - if(isNormal)
49351 + if(path == RF_PATH_A)
49352 {
49353 - if(path == RF90_PATH_A)
49354 + //path A APK
49355 + //load APK setting
49356 + //path-A
49357 + offset = rPdp_AntA;
49358 + for(index = 0; index < 11; index ++)
49359 {
49360 - //path A APK
49361 - //load APK setting
49362 - //path-A
49363 - offset = 0xb00;
49364 - for(index = 0; index < 11; index ++)
49365 - {
49366 - PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
49367 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
49368 -
49369 - offset += 0x04;
49370 - }
49371 + PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
49372 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
49373
49374 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x12680000);
49375 + offset += 0x04;
49376 + }
49377 +
49378 + PHY_SetBBReg(pAdapter, rConfig_Pmpd_AntB, bMaskDWord, 0x12680000);
49379 +
49380 + offset = rConfig_AntA;
49381 + for(; index < 13; index ++)
49382 + {
49383 + PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
49384 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
49385
49386 - offset = 0xb68;
49387 - for(; index < 13; index ++)
49388 - {
49389 - PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
49390 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
49391 -
49392 - offset += 0x04;
49393 - }
49394 + offset += 0x04;
49395 + }
49396 +
49397 + //page-B1
49398 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x40000000);
49399 +
49400 + //path A
49401 + offset = rPdp_AntA;
49402 + for(index = 0; index < 16; index++)
49403 + {
49404 + PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_2[index]);
49405 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
49406
49407 - //page-B1
49408 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x40000000);
49409 + offset += 0x04;
49410 + }
49411 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x00000000);
49412 + }
49413 + else if(path == RF_PATH_B)
49414 + {
49415 + //path B APK
49416 + //load APK setting
49417 + //path-B
49418 + offset = rPdp_AntB;
49419 + for(index = 0; index < 10; index ++)
49420 + {
49421 + PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
49422 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
49423
49424 - //path A
49425 - offset = 0xb00;
49426 - for(index = 0; index < 16; index++)
49427 - {
49428 - PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_2[index]);
49429 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
49430 -
49431 - offset += 0x04;
49432 - }
49433 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
49434 + offset += 0x04;
49435 }
49436 - else if(path == RF90_PATH_B)
49437 + PHY_SetBBReg(pAdapter, rConfig_Pmpd_AntA, bMaskDWord, 0x12680000);
49438 +
49439 + PHY_SetBBReg(pAdapter, rConfig_Pmpd_AntB, bMaskDWord, 0x12680000);
49440 +
49441 + offset = rConfig_AntA;
49442 + index = 11;
49443 + for(; index < 13; index ++) //offset 0xb68, 0xb6c
49444 {
49445 - //path B APK
49446 - //load APK setting
49447 - //path-B
49448 - offset = 0xb70;
49449 - for(index = 0; index < 10; index ++)
49450 - {
49451 - PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
49452 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
49453 -
49454 - offset += 0x04;
49455 - }
49456 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x12680000);
49457 -
49458 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x12680000);
49459 -
49460 - offset = 0xb68;
49461 - index = 11;
49462 - for(; index < 13; index ++) //offset 0xb68, 0xb6c
49463 - {
49464 - PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
49465 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
49466 -
49467 - offset += 0x04;
49468 - }
49469 + PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_1[index]);
49470 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
49471
49472 - //page-B1
49473 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x40000000);
49474 + offset += 0x04;
49475 + }
49476 +
49477 + //page-B1
49478 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x40000000);
49479 +
49480 + //path B
49481 + offset = 0xb60;
49482 + for(index = 0; index < 16; index++)
49483 + {
49484 + PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_2[index]);
49485 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
49486
49487 - //path B
49488 - offset = 0xb60;
49489 - for(index = 0; index < 16; index++)
49490 - {
49491 - PHY_SetBBReg(pAdapter, offset, bMaskDWord, APK_normal_setting_value_2[index]);
49492 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", offset, PHY_QueryBBReg(pAdapter, offset, bMaskDWord)));
49493 -
49494 - offset += 0x04;
49495 - }
49496 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
49497 - }
49498 -
49499 -#if 0
49500 - tmpReg = PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x3, bMaskDWord);
49501 - AP_curve[path][0] = tmpReg & 0x1F; //[4:0]
49502 -
49503 - tmpReg = PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x4, bMaskDWord);
49504 - AP_curve[path][1] = (tmpReg & 0xF8000) >> 15; //[19:15]
49505 - AP_curve[path][2] = (tmpReg & 0x7C00) >> 10; //[14:10]
49506 - AP_curve[path][3] = (tmpReg & 0x3E0) >> 5; //[9:5]
49507 -#endif
49508 - }
49509 - else
49510 - {
49511 - tmpReg = PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xe, bMaskDWord);
49512 -
49513 - AP_curve[path][0] = (tmpReg & 0xF8000) >> 15; //[19:15]
49514 - AP_curve[path][1] = (tmpReg & 0x7C00) >> 10; //[14:10]
49515 - AP_curve[path][2] = (tmpReg & 0x3E0) >> 5; //[9:5]
49516 - AP_curve[path][3] = tmpReg & 0x1F; //[4:0]
49517 - }
49518 -
49519 + offset += 0x04;
49520 + }
49521 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x00000000);
49522 + }
49523 +
49524 //save RF default value
49525 - regD[path] = PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xd, bMaskDWord);
49526 + regD[path] = PHY_QueryRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_TXBIAS_A, bRFRegOffsetMask);
49527
49528 //Path A AFE all on, path B AFE All off or vise versa
49529 for(index = 0; index < IQK_ADDA_REG_NUM ; index++)
49530 @@ -4506,7 +4369,7 @@ _PHY_APCalibrate(
49531 {
49532 for(index = 0; index < APK_BB_REG_NUM ; index++)
49533 {
49534 - if(index == 0 && isNormal) //skip
49535 + if(index == 0) //skip
49536 continue;
49537 else if (index < 5)
49538 PHY_SetBBReg(pAdapter, BB_REG[index], bMaskDWord, BB_AP_MODE[index]);
49539 @@ -4515,13 +4378,13 @@ _PHY_APCalibrate(
49540 else
49541 PHY_SetBBReg(pAdapter, BB_REG[index], BIT10, 0x0);
49542 }
49543 - PHY_SetBBReg(pAdapter, 0xe30, bMaskDWord, 0x01008c00);
49544 - PHY_SetBBReg(pAdapter, 0xe34, bMaskDWord, 0x01008c00);
49545 + PHY_SetBBReg(pAdapter, rTx_IQK_Tone_A, bMaskDWord, 0x01008c00);
49546 + PHY_SetBBReg(pAdapter, rRx_IQK_Tone_A, bMaskDWord, 0x01008c00);
49547 }
49548 else //path B
49549 {
49550 - PHY_SetBBReg(pAdapter, 0xe50, bMaskDWord, 0x01008c00);
49551 - PHY_SetBBReg(pAdapter, 0xe54, bMaskDWord, 0x01008c00);
49552 + PHY_SetBBReg(pAdapter, rTx_IQK_Tone_B, bMaskDWord, 0x01008c00);
49553 + PHY_SetBBReg(pAdapter, rRx_IQK_Tone_B, bMaskDWord, 0x01008c00);
49554 }
49555
49556 //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x800 %x\n", PHY_QueryBBReg(pAdapter, 0x800, bMaskDWord)));
49557 @@ -4529,15 +4392,15 @@ _PHY_APCalibrate(
49558 //MAC settings
49559 _PHY_MACSettingCalibration(pAdapter, MAC_REG, MAC_backup);
49560
49561 - if(path == RF90_PATH_A) //Path B to standby mode
49562 + if(path == RF_PATH_A) //Path B to standby mode
49563 {
49564 - PHY_SetRFReg(pAdapter, RF90_PATH_B, 0x0, bMaskDWord, 0x10000);
49565 + PHY_SetRFReg(pAdapter, RF_PATH_B, RF_AC, bRFRegOffsetMask, 0x10000);
49566 }
49567 else //Path A to standby mode
49568 {
49569 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x00, bMaskDWord, 0x10000);
49570 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x10, bMaskDWord, 0x1000f);
49571 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x11, bMaskDWord, 0x20103);
49572 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_AC, bRFRegOffsetMask, 0x10000);
49573 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_MODE1, bRFRegOffsetMask, 0x1000f);
49574 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_MODE2, bRFRegOffsetMask, 0x20103);
49575 }
49576
49577 delta_offset = ((delta+14)/2);
49578 @@ -4549,7 +4412,7 @@ _PHY_APCalibrate(
49579 //AP calibration
49580 for(index = 0; index < APK_BB_REG_NUM; index++)
49581 {
49582 - if(index != 1 && isNormal) //only DO PA11+PAD01001, AP RF setting
49583 + if(index != 1) //only DO PA11+PAD01001, AP RF setting
49584 continue;
49585
49586 tmpReg = APK_RF_init_value[path][index];
49587 @@ -4581,53 +4444,42 @@ _PHY_APCalibrate(
49588 tmpReg = (tmpReg & 0xFFF0FFFF) | (BB_offset << 16);
49589 }
49590 #endif
49591 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xc, bMaskDWord, 0x8992e);
49592 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0xc %x\n", PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xc, bMaskDWord)));
49593 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x0, bMaskDWord, APK_RF_value_0[path][index]);
49594 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x0 %x\n", PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x0, bMaskDWord)));
49595 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xd, bMaskDWord, tmpReg);
49596 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0xd %x\n", PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xd, bMaskDWord)));
49597 - if(!isNormal)
49598 - {
49599 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xa, bMaskDWord, APK_RF_value_A[path][index]);
49600 - //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0xa %x\n", PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xa, bMaskDWord)));
49601 - }
49602 -
49603 +
49604 +#ifdef CONFIG_PCI_HCI
49605 + if(IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
49606 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_IPA_A, bRFRegOffsetMask, 0x894ae);
49607 + else
49608 +#endif
49609 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_IPA_A, bRFRegOffsetMask, 0x8992e);
49610 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0xc %x\n", PHY_QueryRFReg(pAdapter, (RF_RADIO_PATH_E)path, 0xc, bMaskDWord)));
49611 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_AC, bRFRegOffsetMask, APK_RF_value_0[path][index]);
49612 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x0 %x\n", PHY_QueryRFReg(pAdapter, (RF_RADIO_PATH_E)path, 0x0, bMaskDWord)));
49613 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_TXBIAS_A, bRFRegOffsetMask, tmpReg);
49614 + //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0xd %x\n", PHY_QueryRFReg(pAdapter, (RF_RADIO_PATH_E)path, 0xd, bMaskDWord)));
49615 +
49616 // PA11+PAD01111, one shot
49617 i = 0;
49618 do
49619 {
49620 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x80000000);
49621 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x80000000);
49622 {
49623 PHY_SetBBReg(pAdapter, APK_offset[path], bMaskDWord, APK_value[0]);
49624 //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", APK_offset[path], PHY_QueryBBReg(pAdapter, APK_offset[path], bMaskDWord)));
49625 rtw_mdelay_os(3);
49626 PHY_SetBBReg(pAdapter, APK_offset[path], bMaskDWord, APK_value[1]);
49627 //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0x%x value 0x%x\n", APK_offset[path], PHY_QueryBBReg(pAdapter, APK_offset[path], bMaskDWord)));
49628 - if(isNormal) {
49629 - #ifdef CONFIG_LONG_DELAY_ISSUE
49630 - rtw_msleep_os(20);
49631 - #else
49632 - rtw_mdelay_os(20);
49633 - #endif
49634 - }
49635 - else
49636 - rtw_mdelay_os(3);
49637 + #ifdef CONFIG_LONG_DELAY_ISSUE
49638 + rtw_msleep_os(20);
49639 + #else
49640 + rtw_mdelay_os(20);
49641 + #endif
49642 }
49643 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
49644 + PHY_SetBBReg(pAdapter, rFPGA0_IQK, bMaskDWord, 0x00000000);
49645
49646 - if(!isNormal)
49647 - {
49648 - tmpReg = PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xb, bMaskDWord);
49649 - tmpReg = (tmpReg & 0x3E00) >> 9;
49650 - }
49651 + if(path == RF_PATH_A)
49652 + tmpReg = PHY_QueryBBReg(pAdapter, rAPK, 0x03E00000);
49653 else
49654 - {
49655 - if(path == RF90_PATH_A)
49656 - tmpReg = PHY_QueryBBReg(pAdapter, 0xbd8, 0x03E00000);
49657 - else
49658 - tmpReg = PHY_QueryBBReg(pAdapter, 0xbd8, 0xF8000000);
49659 - }
49660 + tmpReg = PHY_QueryBBReg(pAdapter, rAPK, 0xF8000000);
49661 //RTPRINT(FINIT, INIT_IQK, ("PHY_APCalibrate() offset 0xbd8[25:21] %x\n", tmpReg));
49662
49663 i++;
49664 @@ -4644,7 +4496,7 @@ _PHY_APCalibrate(
49665 //reload BB default value
49666 for(index = 0; index < APK_BB_REG_NUM ; index++)
49667 {
49668 - if(index == 0 && isNormal) //skip
49669 + if(index == 0) //skip
49670 continue;
49671 PHY_SetBBReg(pAdapter, BB_REG[index], bMaskDWord, BB_backup[index]);
49672 }
49673 @@ -4655,50 +4507,17 @@ _PHY_APCalibrate(
49674 //reload RF path default value
49675 for(path = 0; path < pathbound; path++)
49676 {
49677 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xd, bMaskDWord, regD[path]);
49678 - if(path == RF90_PATH_B)
49679 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_TXBIAS_A, bRFRegOffsetMask, regD[path]);
49680 + if(path == RF_PATH_B)
49681 {
49682 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x10, bMaskDWord, 0x1000f);
49683 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x11, bMaskDWord, 0x20101);
49684 - }
49685 -#if 1
49686 - if(!isNormal)
49687 - {
49688 - for(index = 0; index < APK_BB_REG_NUM ; index++)
49689 - {
49690 - if(APK_result[path][index] > 12)
49691 - APK_result[path][index] = AP_curve[path][index-1];
49692 - //RTPRINT(FINIT, INIT_IQK, ("apk result %d 0x%x \t", index, APK_result[path][index]));
49693 - }
49694 - }
49695 - else
49696 - { //note no index == 0
49697 - if (APK_result[path][1] > 6)
49698 - APK_result[path][1] = 6;
49699 - //RTPRINT(FINIT, INIT_IQK, ("apk path %d result %d 0x%x \t", path, 1, APK_result[path][1]));
49700 -
49701 -#if 0
49702 - if(APK_result[path][2] < 2)
49703 - APK_result[path][2] = 2;
49704 - else if (APK_result[path][2] > 6)
49705 - APK_result[path][2] = 6;
49706 - RTPRINT(FINIT, INIT_IQK, ("apk result %d 0x%x \t", 2, APK_result[path][2]));
49707 -
49708 - if(APK_result[path][3] < 2)
49709 - APK_result[path][3] = 2;
49710 - else if (APK_result[path][3] > 6)
49711 - APK_result[path][3] = 6;
49712 - RTPRINT(FINIT, INIT_IQK, ("apk result %d 0x%x \t", 3, APK_result[path][3]));
49713 -
49714 - if(APK_result[path][4] < 5)
49715 - APK_result[path][4] = 5;
49716 - else if (APK_result[path][4] > 9)
49717 - APK_result[path][4] = 9;
49718 - RTPRINT(FINIT, INIT_IQK, ("apk result %d 0x%x \t", 4, APK_result[path][4]));
49719 -#endif
49720 -
49721 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_MODE1, bRFRegOffsetMask, 0x1000f);
49722 + PHY_SetRFReg(pAdapter, RF_PATH_A, RF_MODE2, bRFRegOffsetMask, 0x20101);
49723 }
49724 -#endif
49725 +
49726 + //note no index == 0
49727 + if (APK_result[path][1] > 6)
49728 + APK_result[path][1] = 6;
49729 + //RTPRINT(FINIT, INIT_IQK, ("apk path %d result %d 0x%x \t", path, 1, APK_result[path][1]));
49730 }
49731
49732 //RTPRINT(FINIT, INIT_IQK, ("\n"));
49733 @@ -4706,489 +4525,23 @@ _PHY_APCalibrate(
49734
49735 for(path = 0; path < pathbound; path++)
49736 {
49737 - if(isNormal)
49738 - {
49739 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x3, bMaskDWord,
49740 - ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (APK_result[path][1] << 5) | APK_result[path][1]));
49741 - if(path == RF90_PATH_A)
49742 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x4, bMaskDWord,
49743 - ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (0x00 << 5) | 0x05));
49744 - else
49745 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0x4, bMaskDWord,
49746 - ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (0x02 << 5) | 0x05));
49747 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xe, bMaskDWord,
49748 - ((0x08 << 15) | (0x08 << 10) | (0x08 << 5) | 0x08));
49749 - }
49750 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_BS_PA_APSET_G1_G4, bRFRegOffsetMask,
49751 + ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (APK_result[path][1] << 5) | APK_result[path][1]));
49752 + if(path == RF_PATH_A)
49753 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_BS_PA_APSET_G5_G8, bRFRegOffsetMask,
49754 + ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (0x00 << 5) | 0x05));
49755 else
49756 - {
49757 - for(index = 0; index < 2; index++)
49758 - pdmpriv->APKoutput[path][index] = ((APK_result[path][index] << 15) | (APK_result[path][2] << 10) | (APK_result[path][3] << 5) | APK_result[path][4]);
49759 -
49760 -#if (MP_DRIVER == 1)
49761 - if(pMptCtx->TxPwrLevel[path] > pMptCtx->APK_bound[path])
49762 - {
49763 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xe, bMaskDWord,
49764 - pdmpriv->APKoutput[path][0]);
49765 - }
49766 - else
49767 - {
49768 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xe, bMaskDWord,
49769 - pdmpriv->APKoutput[path][1]);
49770 - }
49771 -#else
49772 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, 0xe, bMaskDWord,
49773 - pdmpriv->APKoutput[path][0]);
49774 -#endif
49775 - }
49776 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_BS_PA_APSET_G5_G8, bRFRegOffsetMask,
49777 + ((APK_result[path][1] << 15) | (APK_result[path][1] << 10) | (0x02 << 5) | 0x05));
49778 + PHY_SetRFReg(pAdapter, (RF_RADIO_PATH_E)path, RF_BS_PA_APSET_G9_G11, bRFRegOffsetMask,
49779 + ((0x08 << 15) | (0x08 << 10) | (0x08 << 5) | 0x08));
49780 }
49781
49782 pdmpriv->bAPKdone = _TRUE;
49783
49784 //RTPRINT(FINIT, INIT_IQK, ("<==PHY_APCalibrate()\n"));
49785 -#endif
49786 }
49787
49788 -
49789 -#define DP_BB_REG_NUM 7
49790 -#define DP_RF_REG_NUM 1
49791 -#define DP_RETRY_LIMIT 10
49792 -#define DP_PATH_NUM 2
49793 -#define DP_DPK_NUM 3
49794 -#define DP_DPK_VALUE_NUM 2
49795 -
49796 -//digital predistortion
49797 -static VOID
49798 -_PHY_DigitalPredistortion(
49799 - IN PADAPTER pAdapter,
49800 - IN BOOLEAN is2T
49801 - )
49802 -{
49803 -#if 1//(PLATFORM == PLATFORM_WINDOWS)
49804 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
49805 - struct dm_priv *pdmpriv = &pHalData->dmpriv;
49806 -
49807 - u32 tmpReg, tmpReg2, index, offset, path, i, pathbound = PATH_NUM;
49808 - u32 AFE_backup[IQK_ADDA_REG_NUM];
49809 - u32 AFE_REG[IQK_ADDA_REG_NUM] = {
49810 - 0x85c, 0xe6c, 0xe70, 0xe74, 0xe78,
49811 - 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c,
49812 - 0xed0, 0xed4, 0xed8, 0xedc, 0xee0,
49813 - 0xeec};
49814 -
49815 - u32 BB_backup[DP_BB_REG_NUM];
49816 - u32 BB_REG[DP_BB_REG_NUM] = {
49817 - 0xc04, 0x800, 0xc08, 0x874,
49818 - 0x870, 0x860, 0x864};
49819 - u32 BB_settings[DP_BB_REG_NUM] = {
49820 - 0x00a05430, 0x02040000, 0x000800e4, 0x22208000,
49821 - 0x0, 0x0, 0x0};
49822 -
49823 - u32 RF_backup[DP_PATH_NUM][DP_RF_REG_NUM];
49824 - u32 RF_REG[DP_RF_REG_NUM] = {
49825 - 0x0d};
49826 -
49827 - u32 MAC_backup[IQK_MAC_REG_NUM];
49828 - u32 MAC_REG[IQK_MAC_REG_NUM] = {
49829 - 0x522, 0x550, 0x551, 0x040};
49830 -
49831 - u32 Tx_AGC[DP_DPK_NUM][DP_DPK_VALUE_NUM] = {
49832 - {0x1e1e1e1e, 0x03901e1e},
49833 - {0x18181818, 0x03901818},
49834 - {0x0e0e0e0e, 0x03900e0e}
49835 - };
49836 -
49837 -// u32 RF_PATHA_backup[DP_RF_REG_NUM];
49838 -// u32 RF_REG_PATHA[DP_RF_REG_NUM] = {
49839 -// 0x00, 0x10, 0x11};
49840 -
49841 - u32 Reg800, Reg874, Regc04, Regc08, Reg040;
49842 -
49843 - u32 AFE_on_off[PATH_NUM] = {
49844 - 0x04db25a4, 0x0b1b25a4}; //path A on path B off / path A off path B on
49845 -
49846 - u32 RetryCount = 0;
49847 -
49848 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
49849 -
49850 - //DBG_8192C("==>_PHY_DigitalPredistortion()\n");
49851 -
49852 - //DBG_8192C("_PHY_DigitalPredistortion for %s %s\n", (is2T ? "2T2R" : "1T1R"), (isNormal ? "Normal chip" : "Test chip"));
49853 -
49854 - if(!isNormal)
49855 - return;
49856 -
49857 - //save BB default value
49858 - for(index=0; index<DP_BB_REG_NUM; index++)
49859 - BB_backup[index] = PHY_QueryBBReg(pAdapter, BB_REG[index], bMaskDWord);
49860 -
49861 - //save MAC default value
49862 - _PHY_SaveMACRegisters(pAdapter, BB_REG, MAC_backup);
49863 -
49864 - //save RF default value
49865 - for(path=0; path<DP_PATH_NUM; path++)
49866 - {
49867 - for(index=0; index<DP_RF_REG_NUM; index++)
49868 - RF_backup[path][index] = PHY_QueryRFReg(pAdapter, (RF90_RADIO_PATH_E)path, RF_REG[index], bMaskDWord);
49869 - }
49870 -
49871 - //save AFE default value
49872 - _PHY_SaveADDARegisters(pAdapter, AFE_REG, AFE_backup, IQK_ADDA_REG_NUM);
49873 -
49874 - //Path A/B AFE all on
49875 - for(index = 0; index < IQK_ADDA_REG_NUM ; index++)
49876 - PHY_SetBBReg(pAdapter, AFE_REG[index], bMaskDWord, 0x6fdb25a4);
49877 -
49878 - //BB register setting
49879 - for(index = 0; index < DP_BB_REG_NUM; index++)
49880 - {
49881 - if(index < 4)
49882 - PHY_SetBBReg(pAdapter, BB_REG[index], bMaskDWord, BB_settings[index]);
49883 - else if (index == 4)
49884 - PHY_SetBBReg(pAdapter, BB_REG[index], bMaskDWord, BB_backup[index]|BIT10|BIT26);
49885 - else
49886 - PHY_SetBBReg(pAdapter, BB_REG[index], BIT10, 0x00);
49887 - }
49888 -
49889 - //MAC register setting
49890 - _PHY_MACSettingCalibration(pAdapter, MAC_REG, MAC_backup);
49891 -
49892 - //PAGE-E IQC setting
49893 - PHY_SetBBReg(pAdapter, 0xe30, bMaskDWord, 0x01008c00);
49894 - PHY_SetBBReg(pAdapter, 0xe34, bMaskDWord, 0x01008c00);
49895 - PHY_SetBBReg(pAdapter, 0xe50, bMaskDWord, 0x01008c00);
49896 - PHY_SetBBReg(pAdapter, 0xe54, bMaskDWord, 0x01008c00);
49897 -
49898 - //path_A DPK
49899 - //Path B to standby mode
49900 - PHY_SetRFReg(pAdapter, RF90_PATH_B, RF_AC, bMaskDWord, 0x10000);
49901 -
49902 - // PA gain = 11 & PAD1 => tx_agc 1f ~11
49903 - // PA gain = 11 & PAD2 => tx_agc 10~0e
49904 - // PA gain = 01 => tx_agc 0b~0d
49905 - // PA gain = 00 => tx_agc 0a~00
49906 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x40000000);
49907 - PHY_SetBBReg(pAdapter, 0xbc0, bMaskDWord, 0x0005361f);
49908 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
49909 -
49910 - //do inner loopback DPK 3 times
49911 - for(i = 0; i < 3; i++)
49912 - {
49913 - //PA gain = 11 & PAD2 => tx_agc = 0x0f/0x0c/0x07
49914 - for(index = 0; index < 3; index++)
49915 - PHY_SetBBReg(pAdapter, 0xe00+index*4, bMaskDWord, Tx_AGC[i][0]);
49916 - PHY_SetBBReg(pAdapter, 0xe00+index*4, bMaskDWord, Tx_AGC[i][1]);
49917 - for(index = 0; index < 4; index++)
49918 - PHY_SetBBReg(pAdapter, 0xe10+index*4, bMaskDWord, Tx_AGC[i][0]);
49919 -
49920 - // PAGE_B for Path-A inner loopback DPK setting
49921 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x02097098);
49922 - PHY_SetBBReg(pAdapter, 0xb04, bMaskDWord, 0xf76d9f84);
49923 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x0004ab87);
49924 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x00880000);
49925 -
49926 - //----send one shot signal----//
49927 - // Path A
49928 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x80047788);
49929 - rtw_mdelay_os(1);
49930 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x00047788);
49931 - #ifdef CONFIG_LONG_DELAY_ISSUE
49932 - rtw_msleep_os(50);
49933 - #else
49934 - rtw_mdelay_os(50);
49935 - #endif
49936 - }
49937 -
49938 - //PA gain = 11 => tx_agc = 1a
49939 - for(index = 0; index < 3; index++)
49940 - PHY_SetBBReg(pAdapter, 0xe00+index*4, bMaskDWord, 0x34343434);
49941 - PHY_SetBBReg(pAdapter, 0xe08+index*4, bMaskDWord, 0x03903434);
49942 - for(index = 0; index < 4; index++)
49943 - PHY_SetBBReg(pAdapter, 0xe10+index*4, bMaskDWord, 0x34343434);
49944 -
49945 - //====================================
49946 - // PAGE_B for Path-A DPK setting
49947 - //====================================
49948 - // open inner loopback @ b00[19]:10 od 0xb00 0x01097018
49949 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x02017098);
49950 - PHY_SetBBReg(pAdapter, 0xb04, bMaskDWord, 0xf76d9f84);
49951 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x0004ab87);
49952 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x00880000);
49953 -
49954 - //rf_lpbk_setup
49955 - //1.rf 00:5205a, rf 0d:0e52c
49956 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x0c, bMaskDWord, 0x8992b);
49957 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x0d, bMaskDWord, 0x0e52c);
49958 - PHY_SetRFReg(pAdapter, RF90_PATH_A, 0x00, bMaskDWord, 0x5205a );
49959 -
49960 - //----send one shot signal----//
49961 - // Path A
49962 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x800477c0);
49963 - rtw_mdelay_os(1);
49964 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x000477c0);
49965 - #ifdef CONFIG_LONG_DELAY_ISSUE
49966 - rtw_msleep_os(50);
49967 - #else
49968 - rtw_mdelay_os(50);
49969 - #endif
49970 -
49971 - while(RetryCount < DP_RETRY_LIMIT && !pdmpriv->bDPPathAOK)
49972 - {
49973 - //----read back measurement results----//
49974 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x0c297018);
49975 - tmpReg = PHY_QueryBBReg(pAdapter, 0xbe0, bMaskDWord);
49976 - rtw_mdelay_os(10);
49977 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x0c29701f);
49978 - tmpReg2 = PHY_QueryBBReg(pAdapter, 0xbe8, bMaskDWord);
49979 - rtw_mdelay_os(10);
49980 -
49981 - tmpReg = (tmpReg & bMaskHWord) >> 16;
49982 - tmpReg2 = (tmpReg2 & bMaskHWord) >> 16;
49983 - if(tmpReg < 0xf0 || tmpReg > 0x105 || tmpReg2 > 0xff )
49984 - {
49985 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x02017098);
49986 -
49987 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x80000000);
49988 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
49989 - rtw_mdelay_os(1);
49990 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x800477c0);
49991 - rtw_mdelay_os(1);
49992 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x000477c0);
49993 - #ifdef CONFIG_LONG_DELAY_ISSUE
49994 - rtw_msleep_os(50);
49995 - #else
49996 - rtw_mdelay_os(50);
49997 - #endif
49998 - RetryCount++;
49999 - DBG_8192C("path A DPK RetryCount %d 0xbe0[31:16] %x 0xbe8[31:16] %x\n", RetryCount, tmpReg, tmpReg2);
50000 - }
50001 - else
50002 - {
50003 - DBG_8192C("path A DPK Sucess\n");
50004 - pdmpriv->bDPPathAOK = _TRUE;
50005 - break;
50006 - }
50007 - }
50008 - RetryCount = 0;
50009 -
50010 - //DPP path A
50011 - if(pdmpriv->bDPPathAOK)
50012 - {
50013 - // DP settings
50014 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x01017098);
50015 - PHY_SetBBReg(pAdapter, 0xb04, bMaskDWord, 0x776d9f84);
50016 - PHY_SetBBReg(pAdapter, 0xb28, bMaskDWord, 0x0004ab87);
50017 - PHY_SetBBReg(pAdapter, 0xb68, bMaskDWord, 0x00880000);
50018 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x40000000);
50019 -
50020 - for(i=0xb00; i<=0xb3c; i+=4)
50021 - {
50022 - PHY_SetBBReg(pAdapter, i, bMaskDWord, 0x40004000);
50023 - //DBG_8192C("path A ofsset = 0x%x\n", i);
50024 - }
50025 -
50026 - //pwsf
50027 - PHY_SetBBReg(pAdapter, 0xb40, bMaskDWord, 0x40404040);
50028 - PHY_SetBBReg(pAdapter, 0xb44, bMaskDWord, 0x28324040);
50029 - PHY_SetBBReg(pAdapter, 0xb48, bMaskDWord, 0x10141920);
50030 -
50031 - for(i=0xb4c; i<=0xb5c; i+=4)
50032 - {
50033 - PHY_SetBBReg(pAdapter, i, bMaskDWord, 0x0c0c0c0c);
50034 - }
50035 -
50036 - //TX_AGC boundary
50037 - PHY_SetBBReg(pAdapter, 0xbc0, bMaskDWord, 0x0005361f);
50038 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50039 - }
50040 - else
50041 - {
50042 - PHY_SetBBReg(pAdapter, 0xb00, bMaskDWord, 0x00000000);
50043 - PHY_SetBBReg(pAdapter, 0xb04, bMaskDWord, 0x00000000);
50044 - }
50045 -
50046 - //DPK path B
50047 - if(is2T)
50048 - {
50049 - //Path A to standby mode
50050 - PHY_SetRFReg(pAdapter, RF90_PATH_A, RF_AC, bMaskDWord, 0x10000);
50051 -
50052 - // LUTs => tx_agc
50053 - // PA gain = 11 & PAD1, => tx_agc 1f ~11
50054 - // PA gain = 11 & PAD2, => tx_agc 10 ~0e
50055 - // PA gain = 01 => tx_agc 0b ~0d
50056 - // PA gain = 00 => tx_agc 0a ~00
50057 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x40000000);
50058 - PHY_SetBBReg(pAdapter, 0xbc4, bMaskDWord, 0x0005361f);
50059 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50060 -
50061 - //do inner loopback DPK 3 times
50062 - for(i = 0; i < 3; i++)
50063 - {
50064 - //PA gain = 11 & PAD2 => tx_agc = 0x0f/0x0c/0x07
50065 - for(index = 0; index < 4; index++)
50066 - PHY_SetBBReg(pAdapter, 0x830+index*4, bMaskDWord, Tx_AGC[i][0]);
50067 - for(index = 0; index < 2; index++)
50068 - PHY_SetBBReg(pAdapter, 0x848+index*4, bMaskDWord, Tx_AGC[i][0]);
50069 - for(index = 0; index < 2; index++)
50070 - PHY_SetBBReg(pAdapter, 0x868+index*4, bMaskDWord, Tx_AGC[i][0]);
50071 -
50072 - // PAGE_B for Path-A inner loopback DPK setting
50073 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x02097098);
50074 - PHY_SetBBReg(pAdapter, 0xb74, bMaskDWord, 0xf76d9f84);
50075 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x0004ab87);
50076 - PHY_SetBBReg(pAdapter, 0xb6c, bMaskDWord, 0x00880000);
50077 -
50078 - //----send one shot signal----//
50079 - // Path B
50080 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x80047788);
50081 - rtw_mdelay_os(1);
50082 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x00047788);
50083 - #ifdef CONFIG_LONG_DELAY_ISSUE
50084 - rtw_msleep_os(50);
50085 - #else
50086 - rtw_mdelay_os(50);
50087 - #endif
50088 - }
50089 -
50090 - // PA gain = 11 => tx_agc = 1a
50091 - for(index = 0; index < 4; index++)
50092 - PHY_SetBBReg(pAdapter, 0x830+index*4, bMaskDWord, 0x34343434);
50093 - for(index = 0; index < 2; index++)
50094 - PHY_SetBBReg(pAdapter, 0x848+index*4, bMaskDWord, 0x34343434);
50095 - for(index = 0; index < 2; index++)
50096 - PHY_SetBBReg(pAdapter, 0x868+index*4, bMaskDWord, 0x34343434);
50097 -
50098 - // PAGE_B for Path-B DPK setting
50099 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x02017098);
50100 - PHY_SetBBReg(pAdapter, 0xb74, bMaskDWord, 0xf76d9f84);
50101 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x0004ab87);
50102 - PHY_SetBBReg(pAdapter, 0xb6c, bMaskDWord, 0x00880000);
50103 -
50104 - // RF lpbk switches on
50105 - PHY_SetBBReg(pAdapter, 0x840, bMaskDWord, 0x0101000f);
50106 - PHY_SetBBReg(pAdapter, 0x840, bMaskDWord, 0x01120103);
50107 -
50108 - //Path-B RF lpbk
50109 - PHY_SetRFReg(pAdapter, RF90_PATH_B, 0x0c, bMaskDWord, 0x8992b);
50110 - PHY_SetRFReg(pAdapter, RF90_PATH_B, 0x0d, bMaskDWord, 0x0e52c);
50111 - PHY_SetRFReg(pAdapter, RF90_PATH_B, RF_AC, bMaskDWord, 0x5205a);
50112 -
50113 - //----send one shot signal----//
50114 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x800477c0);
50115 - rtw_mdelay_os(1);
50116 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x000477c0);
50117 - #ifdef CONFIG_LONG_DELAY_ISSUE
50118 - rtw_msleep_os(50);
50119 - #else
50120 - rtw_mdelay_os(50);
50121 - #endif
50122 -
50123 - while(RetryCount < DP_RETRY_LIMIT && !pdmpriv->bDPPathBOK)
50124 - {
50125 - //----read back measurement results----//
50126 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x0c297018);
50127 - tmpReg = PHY_QueryBBReg(pAdapter, 0xbf0, bMaskDWord);
50128 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x0c29701f);
50129 - tmpReg2 = PHY_QueryBBReg(pAdapter, 0xbf8, bMaskDWord);
50130 -
50131 - tmpReg = (tmpReg & bMaskHWord) >> 16;
50132 - tmpReg2 = (tmpReg2 & bMaskHWord) >> 16;
50133 -
50134 - if(tmpReg < 0xf0 || tmpReg > 0x105 || tmpReg2 > 0xff)
50135 - {
50136 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x02017098);
50137 -
50138 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x80000000);
50139 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50140 - rtw_mdelay_os(1);
50141 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x800477c0);
50142 - rtw_mdelay_os(1);
50143 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x000477c0);
50144 - #ifdef CONFIG_LONG_DELAY_ISSUE
50145 - rtw_msleep_os(50);
50146 - #else
50147 - rtw_mdelay_os(50);
50148 - #endif
50149 - RetryCount++;
50150 - DBG_8192C("path B DPK RetryCount %d 0xbf0[31:16] %x, 0xbf8[31:16] %x\n", RetryCount , tmpReg, tmpReg2);
50151 - }
50152 - else
50153 - {
50154 - DBG_8192C("path B DPK Success\n");
50155 - pdmpriv->bDPPathBOK = _TRUE;
50156 - break;
50157 - }
50158 - }
50159 -
50160 - //DPP path B
50161 - if(pdmpriv->bDPPathBOK)
50162 - {
50163 - // DP setting
50164 - // LUT by SRAM
50165 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x01017098);
50166 - PHY_SetBBReg(pAdapter, 0xb74, bMaskDWord, 0x776d9f84);
50167 - PHY_SetBBReg(pAdapter, 0xb98, bMaskDWord, 0x0004ab87);
50168 - PHY_SetBBReg(pAdapter, 0xb6c, bMaskDWord, 0x00880000);
50169 -
50170 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x40000000);
50171 - for(i=0xb60; i<=0xb9c; i+=4)
50172 - {
50173 - PHY_SetBBReg(pAdapter, i, bMaskDWord, 0x40004000);
50174 - //DBG_8192C("path B ofsset = 0x%x\n", i);
50175 - }
50176 -
50177 - // PWSF
50178 - PHY_SetBBReg(pAdapter, 0xba0, bMaskDWord, 0x40404040);
50179 - PHY_SetBBReg(pAdapter, 0xba4, bMaskDWord, 0x28324050);
50180 - PHY_SetBBReg(pAdapter, 0xba8, bMaskDWord, 0x0c141920);
50181 -
50182 - for(i=0xbac; i<=0xbbc; i+=4)
50183 - {
50184 - PHY_SetBBReg(pAdapter, i, bMaskDWord, 0x0c0c0c0c);
50185 - }
50186 -
50187 - // tx_agc boundary
50188 - PHY_SetBBReg(pAdapter, 0xbc4, bMaskDWord, 0x0005361f);
50189 - PHY_SetBBReg(pAdapter, 0xe28, bMaskDWord, 0x00000000);
50190 -
50191 - }
50192 - else
50193 - {
50194 - PHY_SetBBReg(pAdapter, 0xb70, bMaskDWord, 0x00000000);
50195 - PHY_SetBBReg(pAdapter, 0xb74, bMaskDWord, 0x00000000);
50196 - }
50197 - }
50198 -
50199 - //reload BB default value
50200 - for(index=0; index<DP_BB_REG_NUM; index++)
50201 - PHY_SetBBReg(pAdapter, BB_REG[index], bMaskDWord, BB_backup[index]);
50202 -
50203 - //reload RF default value
50204 - for(path = 0; path<DP_PATH_NUM; path++)
50205 - {
50206 - for( i = 0 ; i < DP_RF_REG_NUM ; i++){
50207 - PHY_SetRFReg(pAdapter, (RF90_RADIO_PATH_E)path, RF_REG[i], bMaskDWord, RF_backup[path][i]);
50208 - }
50209 - }
50210 - PHY_SetRFReg(pAdapter, RF90_PATH_A, RF_MODE1, bMaskDWord, 0x1000f); //standby mode
50211 - PHY_SetRFReg(pAdapter, RF90_PATH_A, RF_MODE2, bMaskDWord, 0x20101); //RF lpbk switches off
50212 -
50213 - //reload AFE default value
50214 - _PHY_ReloadADDARegisters(pAdapter, AFE_REG, AFE_backup, IQK_ADDA_REG_NUM);
50215 -
50216 - //reload MAC default value
50217 - _PHY_ReloadMACRegisters(pAdapter, MAC_REG, MAC_backup);
50218 -
50219 -// for( i = 0 ; i < DP_RF_REG_NUM ; i++){
50220 -// PHY_SetRFReg(pAdapter, RF90_PATH_A, RF_REG_PATHA[i], bMaskDWord, RF_PATHA_backup[i]);
50221 -// }
50222 -
50223 - pdmpriv->bDPdone = _TRUE;
50224 - //DBG_8192C("<==_PHY_DigitalPredistortion()\n");
50225 -#endif
50226 -}
50227 -
50228 -
50229 static VOID _PHY_SetRFPathSwitch(
50230 IN PADAPTER pAdapter,
50231 IN BOOLEAN bMain,
50232 @@ -5255,22 +4608,6 @@ static BOOLEAN _PHY_QueryRFPathSwitch(
50233 }
50234 }
50235
50236 -
50237 -static VOID
50238 -_PHY_DumpRFReg(IN PADAPTER pAdapter)
50239 -{
50240 - u32 rfRegValue,rfRegOffset;
50241 -
50242 - //RTPRINT(FINIT, INIT_RF, ("PHY_DumpRFReg()====>\n"));
50243 -
50244 - for(rfRegOffset = 0x00;rfRegOffset<=0x30;rfRegOffset++){
50245 - rfRegValue = PHY_QueryRFReg(pAdapter,RF90_PATH_A, rfRegOffset, bMaskDWord);
50246 - //RTPRINT(FINIT, INIT_RF, (" 0x%02x = 0x%08x\n",rfRegOffset,rfRegValue));
50247 - }
50248 - //RTPRINT(FINIT, INIT_RF, ("<===== PHY_DumpRFReg()\n"));
50249 -}
50250 -
50251 -
50252 VOID
50253 rtl8192c_PHY_IQCalibrate(
50254 IN PADAPTER pAdapter,
50255 @@ -5279,27 +4616,29 @@ rtl8192c_PHY_IQCalibrate(
50256 {
50257 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
50258 struct dm_priv *pdmpriv = &pHalData->dmpriv;
50259 - u32 IQK_BB_REG[9] = {
50260 - rOFDM0_XARxIQImbalance, rOFDM0_XBRxIQImbalance, rOFDM0_ECCAThreshold, rOFDM0_AGCRSSITable,
50261 - rOFDM0_XATxIQImbalance, rOFDM0_XBTxIQImbalance, rOFDM0_XCTxAFE, rOFDM0_XDTxAFE, rOFDM0_RxIQExtAnta};
50262 - int result[4][8]; //last is final result
50263 + s32 result[4][8]; //last is final result
50264 u8 i, final_candidate;
50265 BOOLEAN bPathAOK, bPathBOK;
50266 - int RegE94, RegE9C, RegEA4, RegEAC, RegEB4, RegEBC, RegEC4, RegECC, RegTmp = 0;
50267 + s32 RegE94, RegE9C, RegEA4, RegEAC, RegEB4, RegEBC, RegEC4, RegECC, RegTmp = 0;
50268 BOOLEAN is12simular, is13simular, is23simular;
50269 + BOOLEAN bStartContTx = _FALSE, bSingleTone = _FALSE, bCarrierSuppression = _FALSE;
50270 + u32 IQK_BB_REG_92C[IQK_BB_REG_NUM] = {
50271 + rOFDM0_XARxIQImbalance, rOFDM0_XBRxIQImbalance,
50272 + rOFDM0_ECCAThreshold, rOFDM0_AGCRSSITable,
50273 + rOFDM0_XATxIQImbalance, rOFDM0_XBTxIQImbalance,
50274 + rOFDM0_XCTxAFE, rOFDM0_XDTxAFE,
50275 + rOFDM0_RxIQExtAnta};
50276 +
50277 +
50278 +#if MP_DRIVER == 1
50279 + bStartContTx = pAdapter->mppriv.MptCtx.bStartContTx;
50280 + bSingleTone = pAdapter->mppriv.MptCtx.bSingleTone;
50281 + bCarrierSuppression = pAdapter->mppriv.MptCtx.bCarrierSuppression;
50282 +#endif
50283
50284 -
50285 -#if (MP_DRIVER == 1)
50286 //ignore IQK when continuous Tx
50287 - if (pAdapter->mppriv.MptCtx.bStartContTx == _TRUE)
50288 - return;
50289 - if (pAdapter->mppriv.MptCtx.bCarrierSuppression == _TRUE)
50290 - return;
50291 - if (pAdapter->mppriv.MptCtx.bSingleCarrier == _TRUE)
50292 - return;
50293 - if (pAdapter->mppriv.MptCtx.bSingleTone == _TRUE)
50294 + if(bStartContTx || bSingleTone || bCarrierSuppression)
50295 return;
50296 -#endif
50297
50298 #if DISABLE_BB_RF
50299 return;
50300 @@ -5307,7 +4646,7 @@ rtl8192c_PHY_IQCalibrate(
50301
50302 if(bReCovery)
50303 {
50304 - _PHY_ReloadADDARegisters(pAdapter, IQK_BB_REG, pdmpriv->IQK_BB_backup_recover, 9);
50305 + _PHY_ReloadADDARegisters(pAdapter, IQK_BB_REG_92C, pdmpriv->IQK_BB_backup_recover, 9);
50306 return;
50307 }
50308 DBG_8192C("IQK:Start!!!\n");
50309 @@ -5330,7 +4669,6 @@ rtl8192c_PHY_IQCalibrate(
50310 {
50311 if(IS_92C_SERIAL( pHalData->VersionID)){
50312 _PHY_IQCalibrate(pAdapter, result, i, _TRUE);
50313 - //_PHY_DumpRFReg(pAdapter);
50314 }
50315 else{
50316 // For 88C 1T1R
50317 @@ -5401,15 +4739,8 @@ rtl8192c_PHY_IQCalibrate(
50318 }
50319 else
50320 {
50321 -
50322 - #if 0
50323 - DBG_871X("%s do _PHY_ReloadADDARegisters\n");
50324 - _PHY_ReloadADDARegisters(pAdapter, IQK_BB_REG, pdmpriv->IQK_BB_backup_recover, 9);
50325 - return;
50326 - #else
50327 - pdmpriv->RegE94 = pdmpriv->RegEB4 = 0x100; //X default value
50328 - pdmpriv->RegE9C = pdmpriv->RegEBC = 0x0; //Y default value
50329 - #endif
50330 + RegE94 = RegEB4 = pdmpriv->RegE94 = pdmpriv->RegEB4 = 0x100; //X default value
50331 + RegE9C = RegEBC = pdmpriv->RegE9C = pdmpriv->RegEBC = 0x0; //Y default value
50332 }
50333
50334 if((RegE94 != 0)/*&&(RegEA4 != 0)*/)
50335 @@ -5420,7 +4751,7 @@ rtl8192c_PHY_IQCalibrate(
50336 _PHY_PathBFillIQKMatrix(pAdapter, bPathBOK, result, final_candidate, (RegEC4 == 0));
50337 }
50338
50339 - _PHY_SaveADDARegisters(pAdapter, IQK_BB_REG, pdmpriv->IQK_BB_backup_recover, 9);
50340 + _PHY_SaveADDARegisters(pAdapter, IQK_BB_REG_92C, pdmpriv->IQK_BB_backup_recover, 9);
50341
50342 }
50343
50344 @@ -5431,24 +4762,26 @@ rtl8192c_PHY_LCCalibrate(
50345 )
50346 {
50347 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
50348 + struct mlme_ext_priv *pmlmeext = &pAdapter->mlmeextpriv;
50349 + BOOLEAN bStartContTx = _FALSE, bSingleTone = _FALSE, bCarrierSuppression = _FALSE;
50350
50351 -
50352 -#if (MP_DRIVER == 1)
50353 - // ignore LCK when continuous Tx
50354 - if (pAdapter->mppriv.MptCtx.bStartContTx == _TRUE)
50355 - return;
50356 - if (pAdapter->mppriv.MptCtx.bCarrierSuppression == _TRUE)
50357 - return;
50358 - if (pAdapter->mppriv.MptCtx.bSingleCarrier == _TRUE)
50359 - return;
50360 - if (pAdapter->mppriv.MptCtx.bSingleTone == _TRUE)
50361 - return;
50362 +#if MP_DRIVER == 1
50363 + bStartContTx = pAdapter->mppriv.MptCtx.bStartContTx;
50364 + bSingleTone = pAdapter->mppriv.MptCtx.bSingleTone;
50365 + bCarrierSuppression = pAdapter->mppriv.MptCtx.bCarrierSuppression;
50366 #endif
50367
50368 #if DISABLE_BB_RF
50369 return;
50370 #endif
50371
50372 + //ignore IQK when continuous Tx
50373 + if(bStartContTx || bSingleTone || bCarrierSuppression)
50374 + return;
50375 +
50376 + if(pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
50377 + return;
50378 +
50379 if(IS_92C_SERIAL( pHalData->VersionID)){
50380 _PHY_LCCalibrate(pAdapter, _TRUE);
50381 }
50382 @@ -5467,6 +4800,9 @@ rtl8192c_PHY_APCalibrate(
50383 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
50384 struct dm_priv *pdmpriv = &pHalData->dmpriv;
50385
50386 + //default disable APK, because Tx NG issue, suggest by Jenyu, 2011.11.25
50387 + return;
50388 +
50389 #if DISABLE_BB_RF
50390 return;
50391 #endif
50392 @@ -5474,9 +4810,6 @@ rtl8192c_PHY_APCalibrate(
50393 if(pdmpriv->bAPKdone)
50394 return;
50395
50396 -// if(IS_NORMAL_CHIP(pHalData->VersionID))
50397 -// return;
50398 -
50399 if(IS_92C_SERIAL( pHalData->VersionID)){
50400 _PHY_APCalibrate(pAdapter, delta, _TRUE);
50401 }
50402 @@ -5486,32 +4819,6 @@ rtl8192c_PHY_APCalibrate(
50403 }
50404 }
50405
50406 -VOID
50407 -rtl8192c_PHY_DigitalPredistortion(
50408 - IN PADAPTER pAdapter
50409 - )
50410 -{
50411 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
50412 - struct dm_priv *pdmpriv = &pHalData->dmpriv;
50413 -
50414 -#if DISABLE_BB_RF
50415 - return;
50416 -#endif
50417 -
50418 - return;
50419 -
50420 - if(pdmpriv->bDPdone)
50421 - return;
50422 -
50423 - if(IS_92C_SERIAL( pHalData->VersionID)){
50424 - _PHY_DigitalPredistortion(pAdapter, _TRUE);
50425 - }
50426 - else{
50427 - // For 88C 1T1R
50428 - _PHY_DigitalPredistortion(pAdapter, _FALSE);
50429 - }
50430 -}
50431 -
50432 VOID rtl8192c_PHY_SetRFPathSwitch(
50433 IN PADAPTER pAdapter,
50434 IN BOOLEAN bMain
50435 @@ -5532,52 +4839,3 @@ VOID rtl8192c_PHY_SetRFPathSwitch(
50436 }
50437 }
50438
50439 -//
50440 -// Move from phycfg.c to gen.c to be code independent later
50441 -//
50442 -//-------------------------Move to other DIR later----------------------------*/
50443 -#ifdef CONFIG_USB_HCI
50444 -
50445 -//
50446 -// Description:
50447 -// To dump all Tx FIFO LLT related link-list table.
50448 -// Added by Roger, 2009.03.10.
50449 -//
50450 -VOID
50451 -DumpBBDbgPort_92CU(
50452 - IN PADAPTER Adapter
50453 - )
50454 -{
50455 -
50456 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"));
50457 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("BaseBand Debug Ports:\n"));
50458 -
50459 - PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0000);
50460 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
50461 -
50462 - PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0803);
50463 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
50464 -
50465 - PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0a06);
50466 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
50467 -
50468 - PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0007);
50469 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
50470 -
50471 - PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0100);
50472 - PHY_SetBBReg(Adapter, 0x0a28, 0x00ff0000, 0x000f0000);
50473 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
50474 -
50475 - PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0100);
50476 - PHY_SetBBReg(Adapter, 0x0a28, 0x00ff0000, 0x00150000);
50477 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
50478 -
50479 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0x800, PHY_QueryBBReg(Adapter, 0x0800, bMaskDWord)));
50480 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0x900, PHY_QueryBBReg(Adapter, 0x0900, bMaskDWord)));
50481 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xa00, PHY_QueryBBReg(Adapter, 0x0a00, bMaskDWord)));
50482 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xa54, PHY_QueryBBReg(Adapter, 0x0a54, bMaskDWord)));
50483 - //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xa58, PHY_QueryBBReg(Adapter, 0x0a58, bMaskDWord)));
50484 -
50485 -}
50486 -#endif
50487 -
50488 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c
50489 index 593ea09..cf46969 100644
50490 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c
50491 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c
50492 @@ -16,8 +16,7 @@
50493 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
50494 *
50495 *
50496 -
50497 -******************************************************************************/
50498 + ******************************************************************************/
50499 /******************************************************************************
50500 *
50501 *
50502 @@ -109,35 +108,35 @@ void rtl8192c_RF_ChangeTxPath( IN PADAPTER Adapter,
50503 if (RF_Path_Type == 2 && (DataRate&0xF) <= 0x7)
50504 {
50505 // Set TX SYNC power G2G3 loop filter
50506 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
50507 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
50508 RF_TXPA_G2, bRFRegOffsetMask, 0x0f000);
50509 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
50510 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
50511 RF_TXPA_G3, bRFRegOffsetMask, 0xeacf1);
50512
50513 // Change TX AGC gain table
50514 for (i = 0; i < 6; i++)
50515 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
50516 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
50517 RF_TX_AGC, bRFRegOffsetMask, tx_gain_tbl1[i]);
50518
50519 // Set PA to high value
50520 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
50521 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
50522 RF_TXPA_G2, bRFRegOffsetMask, 0x01e39);
50523 }
50524 else if (RF_Path_Type == 1 && (DataRate&0xF) >= 0x8)
50525 {
50526 // Set TX SYNC power G2G3 loop filter
50527 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
50528 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
50529 RF_TXPA_G2, bRFRegOffsetMask, 0x04440);
50530 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
50531 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
50532 RF_TXPA_G3, bRFRegOffsetMask, 0xea4f1);
50533
50534 // Change TX AGC gain table
50535 for (i = 0; i < 6; i++)
50536 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
50537 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
50538 RF_TX_AGC, bRFRegOffsetMask, tx_gain_tbl2[i]);
50539
50540 // Set PA low gain
50541 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)RF90_PATH_A,
50542 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
50543 RF_TXPA_G2, bRFRegOffsetMask, 0x01e19);
50544 }
50545 #endif
50546 @@ -170,12 +169,12 @@ rtl8192c_PHY_RF6052SetBandwidth(
50547 {
50548 case HT_CHANNEL_WIDTH_20:
50549 pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff) | 0x0400);
50550 - PHY_SetRFReg(Adapter, RF90_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
50551 + PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
50552 break;
50553
50554 case HT_CHANNEL_WIDTH_40:
50555 pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff));
50556 - PHY_SetRFReg(Adapter, RF90_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
50557 + PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
50558 break;
50559
50560 default:
50561 @@ -232,14 +231,14 @@ rtl8192c_PHY_RF6052SetCckTxPower(
50562
50563 if(pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
50564 {
50565 - TxAGC[RF90_PATH_A] = 0x3f3f3f3f;
50566 - TxAGC[RF90_PATH_B] = 0x3f3f3f3f;
50567 + TxAGC[RF_PATH_A] = 0x3f3f3f3f;
50568 + TxAGC[RF_PATH_B] = 0x3f3f3f3f;
50569
50570 TurboScanOff = _TRUE;//disable turbo scan
50571
50572 if(TurboScanOff)
50573 {
50574 - for(idx1=RF90_PATH_A; idx1<=RF90_PATH_B; idx1++)
50575 + for(idx1=RF_PATH_A; idx1<=RF_PATH_B; idx1++)
50576 {
50577 TxAGC[idx1] =
50578 pPowerlevel[idx1] | (pPowerlevel[idx1]<<8) |
50579 @@ -259,17 +258,17 @@ rtl8192c_PHY_RF6052SetCckTxPower(
50580 // In the future, two mechanism shall be separated from each other and maintained independantly. Thanks for Lanhsin's reminder.
50581 if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
50582 {
50583 - TxAGC[RF90_PATH_A] = 0x10101010;
50584 - TxAGC[RF90_PATH_B] = 0x10101010;
50585 + TxAGC[RF_PATH_A] = 0x10101010;
50586 + TxAGC[RF_PATH_B] = 0x10101010;
50587 }
50588 else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
50589 {
50590 - TxAGC[RF90_PATH_A] = 0x00000000;
50591 - TxAGC[RF90_PATH_B] = 0x00000000;
50592 + TxAGC[RF_PATH_A] = 0x00000000;
50593 + TxAGC[RF_PATH_B] = 0x00000000;
50594 }
50595 else
50596 {
50597 - for(idx1=RF90_PATH_A; idx1<=RF90_PATH_B; idx1++)
50598 + for(idx1=RF_PATH_A; idx1<=RF_PATH_B; idx1++)
50599 {
50600 TxAGC[idx1] =
50601 pPowerlevel[idx1] | (pPowerlevel[idx1]<<8) |
50602 @@ -280,16 +279,16 @@ rtl8192c_PHY_RF6052SetCckTxPower(
50603 {
50604 tmpval = (pHalData->MCSTxPowerLevelOriginalOffset[0][6]) +
50605 (pHalData->MCSTxPowerLevelOriginalOffset[0][7]<<8);
50606 - TxAGC[RF90_PATH_A] += tmpval;
50607 + TxAGC[RF_PATH_A] += tmpval;
50608
50609 tmpval = (pHalData->MCSTxPowerLevelOriginalOffset[0][14]) +
50610 (pHalData->MCSTxPowerLevelOriginalOffset[0][15]<<24);
50611 - TxAGC[RF90_PATH_B] += tmpval;
50612 + TxAGC[RF_PATH_B] += tmpval;
50613 }
50614 }
50615 }
50616
50617 - for(idx1=RF90_PATH_A; idx1<=RF90_PATH_B; idx1++)
50618 + for(idx1=RF_PATH_A; idx1<=RF_PATH_B; idx1++)
50619 {
50620 ptr = (u8*)(&(TxAGC[idx1]));
50621 for(idx2=0; idx2<4; idx2++)
50622 @@ -301,18 +300,18 @@ rtl8192c_PHY_RF6052SetCckTxPower(
50623 }
50624
50625 // rf-A cck tx power
50626 - tmpval = TxAGC[RF90_PATH_A]&0xff;
50627 + tmpval = TxAGC[RF_PATH_A]&0xff;
50628 PHY_SetBBReg(Adapter, rTxAGC_A_CCK1_Mcs32, bMaskByte1, tmpval);
50629 //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 1M (rf-A) = 0x%x (reg 0x%x)\n", tmpval, rTxAGC_A_CCK1_Mcs32));
50630 - tmpval = TxAGC[RF90_PATH_A]>>8;
50631 + tmpval = TxAGC[RF_PATH_A]>>8;
50632 PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval);
50633 //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 2~11M (rf-A) = 0x%x (reg 0x%x)\n", tmpval, rTxAGC_B_CCK11_A_CCK2_11));
50634
50635 // rf-B cck tx power
50636 - tmpval = TxAGC[RF90_PATH_B]>>24;
50637 + tmpval = TxAGC[RF_PATH_B]>>24;
50638 PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte0, tmpval);
50639 //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 11M (rf-B) = 0x%x (reg 0x%x)\n", tmpval, rTxAGC_B_CCK11_A_CCK2_11));
50640 - tmpval = TxAGC[RF90_PATH_B]&0x00ffffff;
50641 + tmpval = TxAGC[RF_PATH_B]&0x00ffffff;
50642 PHY_SetBBReg(Adapter, rTxAGC_B_CCK1_55_Mcs32, 0xffffff00, tmpval);
50643 //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 1~5.5M (rf-B) = 0x%x (reg 0x%x)\n",
50644 // tmpval, rTxAGC_B_CCK1_55_Mcs32));
50645 @@ -333,7 +332,8 @@ static void getPowerBase(
50646 {
50647 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
50648 u32 powerBase0, powerBase1;
50649 - u8 Legacy_pwrdiff=0, HT20_pwrdiff=0;
50650 + u8 Legacy_pwrdiff=0;
50651 + s8 HT20_pwrdiff=0;
50652 u8 i, powerlevel[2];
50653
50654 for(i=0; i<2; i++)
50655 @@ -639,43 +639,27 @@ phy_RF6052_Config_ParaFile(
50656 {
50657 if(IS_92C_SERIAL( pHalData->VersionID))// 88c's IPA is different from 92c's
50658 {
50659 - if(IS_NORMAL_CHIP(pHalData->VersionID))
50660 - {
50661 - pszRadioAFile = sz92CRadioAFile;
50662 - pszRadioBFile = sz92CRadioBFile;
50663 - }
50664 - else
50665 - {
50666 - rtStatus = _FAIL;
50667 - return rtStatus;
50668 - }
50669 + pszRadioAFile = sz92CRadioAFile;
50670 + pszRadioBFile = sz92CRadioBFile;
50671 }
50672 else
50673 {
50674 - if(IS_NORMAL_CHIP(pHalData->VersionID))
50675 - {
50676 - pszRadioAFile = sz88CRadioAFile;
50677 - pszRadioBFile = sz88CRadioBFile;
50678 + pszRadioAFile = sz88CRadioAFile;
50679 + pszRadioBFile = sz88CRadioBFile;
50680 #ifdef CONFIG_USB_HCI
50681 - if( BOARD_MINICARD == pHalData->BoardType)
50682 - {
50683 - pszRadioAFile = sz88CRadioAFile_mCard;
50684 - pszRadioBFile = sz88CRadioBFile_mCard;
50685 - }
50686 - else if( BOARD_USB_High_PA == pHalData->BoardType)
50687 - {
50688 - pszRadioAFile = sz88CRadioAFile_HP;
50689 - }
50690 -#endif
50691 + if( BOARD_MINICARD == pHalData->BoardType)
50692 + {
50693 + pszRadioAFile = sz88CRadioAFile_mCard;
50694 + pszRadioBFile = sz88CRadioBFile_mCard;
50695 }
50696 - else
50697 + else if( BOARD_USB_High_PA == pHalData->BoardType)
50698 {
50699 - rtStatus = _FAIL;
50700 - return rtStatus;
50701 + pszRadioAFile = sz88CRadioAFile_HP;
50702 }
50703 +#endif
50704 }
50705 }
50706 - else if(IS_HARDWARE_TYPE_8723(Adapter))
50707 + else if(IS_HARDWARE_TYPE_8723A(Adapter))
50708 {
50709 pszRadioAFile = sz8723RadioAFile;
50710 pszRadioBFile = sz8723RadioBFile;
50711 @@ -684,7 +668,7 @@ phy_RF6052_Config_ParaFile(
50712 //3//-----------------------------------------------------------------
50713 //3// <2> Initialize RF
50714 //3//-----------------------------------------------------------------
50715 - //for(eRFPath = RF90_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
50716 + //for(eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
50717 for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
50718 {
50719
50720 @@ -693,12 +677,12 @@ phy_RF6052_Config_ParaFile(
50721 /*----Store original RFENV control type----*/
50722 switch(eRFPath)
50723 {
50724 - case RF90_PATH_A:
50725 - case RF90_PATH_C:
50726 + case RF_PATH_A:
50727 + case RF_PATH_C:
50728 u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV);
50729 break;
50730 - case RF90_PATH_B :
50731 - case RF90_PATH_D:
50732 + case RF_PATH_B :
50733 + case RF_PATH_D:
50734 u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV<<16);
50735 break;
50736 }
50737 @@ -721,35 +705,35 @@ phy_RF6052_Config_ParaFile(
50738 /*----Initialize RF fom connfiguration file----*/
50739 switch(eRFPath)
50740 {
50741 - case RF90_PATH_A:
50742 + case RF_PATH_A:
50743 #ifdef CONFIG_EMBEDDED_FWIMG
50744 - rtStatus= rtl8192c_PHY_ConfigRFWithHeaderFile(Adapter,(RF90_RADIO_PATH_E)eRFPath);
50745 + rtStatus= rtl8192c_PHY_ConfigRFWithHeaderFile(Adapter,(RF_RADIO_PATH_E)eRFPath);
50746 #else
50747 - rtStatus = rtl8192c_PHY_ConfigRFWithParaFile(Adapter, pszRadioAFile, (RF90_RADIO_PATH_E)eRFPath);
50748 + rtStatus = rtl8192c_PHY_ConfigRFWithParaFile(Adapter, pszRadioAFile, (RF_RADIO_PATH_E)eRFPath);
50749 #endif
50750 break;
50751 - case RF90_PATH_B:
50752 + case RF_PATH_B:
50753 #ifdef CONFIG_EMBEDDED_FWIMG
50754 - rtStatus = rtl8192c_PHY_ConfigRFWithHeaderFile(Adapter,(RF90_RADIO_PATH_E)eRFPath);
50755 + rtStatus = rtl8192c_PHY_ConfigRFWithHeaderFile(Adapter,(RF_RADIO_PATH_E)eRFPath);
50756 #else
50757 - rtStatus = rtl8192c_PHY_ConfigRFWithParaFile(Adapter, pszRadioBFile, (RF90_RADIO_PATH_E)eRFPath);
50758 + rtStatus = rtl8192c_PHY_ConfigRFWithParaFile(Adapter, pszRadioBFile, (RF_RADIO_PATH_E)eRFPath);
50759 #endif
50760 break;
50761 - case RF90_PATH_C:
50762 + case RF_PATH_C:
50763 break;
50764 - case RF90_PATH_D:
50765 + case RF_PATH_D:
50766 break;
50767 }
50768
50769 /*----Restore RFENV control type----*/;
50770 switch(eRFPath)
50771 {
50772 - case RF90_PATH_A:
50773 - case RF90_PATH_C:
50774 + case RF_PATH_A:
50775 + case RF_PATH_C:
50776 PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue);
50777 break;
50778 - case RF90_PATH_B :
50779 - case RF90_PATH_D:
50780 + case RF_PATH_B :
50781 + case RF_PATH_D:
50782 PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV<<16, u4RegValue);
50783 break;
50784 }
50785 @@ -847,7 +831,7 @@ PHY_RF6052_Config8192C(
50786 u32
50787 PHY_RFShadowRead(
50788 IN PADAPTER Adapter,
50789 - IN RF90_RADIO_PATH_E eRFPath,
50790 + IN RF_RADIO_PATH_E eRFPath,
50791 IN u32 Offset)
50792 {
50793 return RF_Shadow[eRFPath][Offset].Value;
50794 @@ -858,7 +842,7 @@ PHY_RFShadowRead(
50795 VOID
50796 PHY_RFShadowWrite(
50797 IN PADAPTER Adapter,
50798 - IN RF90_RADIO_PATH_E eRFPath,
50799 + IN RF_RADIO_PATH_E eRFPath,
50800 IN u32 Offset,
50801 IN u32 Data)
50802 {
50803 @@ -871,7 +855,7 @@ PHY_RFShadowWrite(
50804 BOOLEAN
50805 PHY_RFShadowCompare(
50806 IN PADAPTER Adapter,
50807 - IN RF90_RADIO_PATH_E eRFPath,
50808 + IN RF_RADIO_PATH_E eRFPath,
50809 IN u32 Offset)
50810 {
50811 u32 reg;
50812 @@ -897,7 +881,7 @@ PHY_RFShadowCompare(
50813 VOID
50814 PHY_RFShadowRecorver(
50815 IN PADAPTER Adapter,
50816 - IN RF90_RADIO_PATH_E eRFPath,
50817 + IN RF_RADIO_PATH_E eRFPath,
50818 IN u32 Offset)
50819 {
50820 // Check if the address is error
50821 @@ -928,7 +912,7 @@ PHY_RFShadowCompareAll(
50822 {
50823 for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
50824 {
50825 - PHY_RFShadowCompare(Adapter, (RF90_RADIO_PATH_E)eRFPath, Offset);
50826 + PHY_RFShadowCompare(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset);
50827 }
50828 }
50829
50830 @@ -946,7 +930,7 @@ PHY_RFShadowRecorverAll(
50831 {
50832 for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
50833 {
50834 - PHY_RFShadowRecorver(Adapter, (RF90_RADIO_PATH_E)eRFPath, Offset);
50835 + PHY_RFShadowRecorver(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset);
50836 }
50837 }
50838
50839 @@ -956,7 +940,7 @@ PHY_RFShadowRecorverAll(
50840 VOID
50841 PHY_RFShadowCompareFlagSet(
50842 IN PADAPTER Adapter,
50843 - IN RF90_RADIO_PATH_E eRFPath,
50844 + IN RF_RADIO_PATH_E eRFPath,
50845 IN u32 Offset,
50846 IN u8 Type)
50847 {
50848 @@ -969,7 +953,7 @@ PHY_RFShadowCompareFlagSet(
50849 VOID
50850 PHY_RFShadowRecorverFlagSet(
50851 IN PADAPTER Adapter,
50852 - IN RF90_RADIO_PATH_E eRFPath,
50853 + IN RF_RADIO_PATH_E eRFPath,
50854 IN u32 Offset,
50855 IN u8 Type)
50856 {
50857 @@ -992,9 +976,9 @@ PHY_RFShadowCompareFlagSetAll(
50858 {
50859 // 2008/11/20 MH For S3S4 test, we only check reg 26/27 now!!!!
50860 if (Offset != 0x26 && Offset != 0x27)
50861 - PHY_RFShadowCompareFlagSet(Adapter, (RF90_RADIO_PATH_E)eRFPath, Offset, _FALSE);
50862 + PHY_RFShadowCompareFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _FALSE);
50863 else
50864 - PHY_RFShadowCompareFlagSet(Adapter, (RF90_RADIO_PATH_E)eRFPath, Offset, _TRUE);
50865 + PHY_RFShadowCompareFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _TRUE);
50866 }
50867 }
50868
50869 @@ -1014,9 +998,9 @@ PHY_RFShadowRecorverFlagSetAll(
50870 {
50871 // 2008/11/20 MH For S3S4 test, we only check reg 26/27 now!!!!
50872 if (Offset != 0x26 && Offset != 0x27)
50873 - PHY_RFShadowRecorverFlagSet(Adapter, (RF90_RADIO_PATH_E)eRFPath, Offset, _FALSE);
50874 + PHY_RFShadowRecorverFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _FALSE);
50875 else
50876 - PHY_RFShadowRecorverFlagSet(Adapter, (RF90_RADIO_PATH_E)eRFPath, Offset, _TRUE);
50877 + PHY_RFShadowRecorverFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _TRUE);
50878 }
50879 }
50880
50881 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c
50882 index 5aa6e61..3e0d795 100644
50883 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c
50884 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c
50885 @@ -16,7 +16,7 @@
50886 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
50887 *
50888 *
50889 -******************************************************************************/
50890 + ******************************************************************************/
50891 #define _RTL8192C_REDESC_C_
50892 #include <drv_conf.h>
50893 #include <osdep_service.h>
50894 @@ -196,7 +196,7 @@ static s32 translate2dbm(u8 signal_strength_idx)
50895 return signal_power;
50896 }
50897
50898 -void rtl8192c_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat)
50899 +static void query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat)
50900 {
50901 PHY_STS_OFDM_8192CD_T *pOfdm_buf;
50902 PHY_STS_CCK_8192CD_T *pCck_buf;
50903 @@ -383,9 +383,9 @@ void rtl8192c_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pp
50904 //continue;
50905
50906 rx_pwr[i] = ((pOfdm_buf->trsw_gain_X[i]&0x3F)*2) - 110;
50907 - pattrib->rx_rssi[i]=query_rx_pwr_percentage(rx_pwr[i]);
50908 + padapter->recvpriv.RxRssi[i] = rx_pwr[i];
50909 /* Translate DBM to percentage. */
50910 - rssi=query_rx_pwr_percentage(rx_pwr[i]);
50911 + pattrib->rx_rssi[i] = rssi = query_rx_pwr_percentage(rx_pwr[i]);
50912 total_rssi += rssi;
50913
50914 RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], rssi));
50915 @@ -733,8 +733,7 @@ static void process_link_qual(_adapter *padapter,union recv_frame *prframe)
50916 }// Process_UiLinkQuality8192S
50917
50918
50919 -//void rtl8192c_process_phy_info(_adapter *padapter, union recv_frame *prframe)
50920 -void rtl8192c_process_phy_info(_adapter *padapter, void *prframe)
50921 +static void process_phy_info(_adapter *padapter, union recv_frame *prframe)
50922 {
50923 union recv_frame *precvframe = (union recv_frame *)prframe;
50924
50925 @@ -765,3 +764,113 @@ void rtl8192c_process_phy_info(_adapter *padapter, void *prframe)
50926 }
50927
50928
50929 +void rtl8192c_translate_rx_signal_stuff(union recv_frame *precvframe, struct phy_stat *pphy_info)
50930 +{
50931 + struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
50932 + _adapter *padapter = precvframe->u.hdr.adapter;
50933 + u8 bPacketMatchBSSID =_FALSE;
50934 + u8 bPacketToSelf = _FALSE;
50935 + u8 bPacketBeacon = _FALSE;
50936 +
50937 + if((pattrib->physt) && (pphy_info != NULL))
50938 + {
50939 + bPacketMatchBSSID = ((!IsFrameTypeCtrl(precvframe->u.hdr.rx_data)) && !(pattrib->icv_err) && !(pattrib->crc_err) &&
50940 + _rtw_memcmp(get_hdr_bssid(precvframe->u.hdr.rx_data), get_my_bssid(&padapter->mlmeextpriv.mlmext_info.network), ETH_ALEN));
50941 +
50942 +
50943 + bPacketToSelf = bPacketMatchBSSID && (_rtw_memcmp(get_da(precvframe->u.hdr.rx_data), myid(&padapter->eeprompriv), ETH_ALEN));
50944 +
50945 + bPacketBeacon =bPacketMatchBSSID && (GetFrameSubType(precvframe->u.hdr.rx_data) == WIFI_BEACON);
50946 +
50947 + query_rx_phy_status(precvframe, pphy_info);
50948 +
50949 + precvframe->u.hdr.psta = NULL;
50950 + if(bPacketMatchBSSID && check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE)
50951 + {
50952 + u8 *sa;
50953 + struct sta_info *psta=NULL;
50954 + struct sta_priv *pstapriv = &padapter->stapriv;
50955 +
50956 + sa = get_sa(precvframe->u.hdr.rx_data);
50957 +
50958 + psta = rtw_get_stainfo(pstapriv, sa);
50959 + if(psta)
50960 + {
50961 + precvframe->u.hdr.psta = psta;
50962 + process_phy_info(padapter, precvframe);
50963 + }
50964 + }
50965 + else if(bPacketToSelf || bPacketBeacon)
50966 + {
50967 + if(check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)
50968 + {
50969 + u8 *sa;
50970 + struct sta_info *psta=NULL;
50971 + struct sta_priv *pstapriv = &padapter->stapriv;
50972 +
50973 + sa = get_sa(precvframe->u.hdr.rx_data);
50974 +
50975 + psta = rtw_get_stainfo(pstapriv, sa);
50976 + if(psta)
50977 + {
50978 + precvframe->u.hdr.psta = psta;
50979 + }
50980 + }
50981 +
50982 + process_phy_info(padapter, precvframe);
50983 + }
50984 + }
50985 +}
50986 +
50987 +void rtl8192c_query_rx_desc_status(union recv_frame *precvframe, struct recv_stat *pdesc)
50988 +{
50989 + struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
50990 +
50991 + //Offset 0
50992 + pattrib->physt = (u8)((le32_to_cpu(pdesc->rxdw0) >> 26) & 0x1);
50993 + pattrib->pkt_len = (u16)(le32_to_cpu(pdesc->rxdw0)&0x00003fff);
50994 + pattrib->drvinfo_sz = (u8)((le32_to_cpu(pdesc->rxdw0) >> 16) & 0xf) * 8;//uint 2^3 = 8 bytes
50995 +
50996 + pattrib->shift_sz = (u8)((le32_to_cpu(pdesc->rxdw0) >> 24) & 0x3);
50997 +
50998 + pattrib->crc_err = (u8)((le32_to_cpu(pdesc->rxdw0) >> 14) & 0x1);
50999 + pattrib->icv_err = (u8)((le32_to_cpu(pdesc->rxdw0) >> 15) & 0x1);
51000 + pattrib->qos = (u8)(( le32_to_cpu( pdesc->rxdw0 ) >> 23) & 0x1);// Qos data, wireless lan header length is 26
51001 + pattrib->bdecrypted = (le32_to_cpu(pdesc->rxdw0) & BIT(27))? 0:1;
51002 +
51003 + //Offset 4
51004 + pattrib->mfrag = (u8)((le32_to_cpu(pdesc->rxdw1) >> 27) & 0x1);//more fragment bit
51005 +
51006 + //Offset 8
51007 + pattrib->frag_num = (u8)((le32_to_cpu(pdesc->rxdw2) >> 12) & 0xf);//fragmentation number
51008 +
51009 + //Offset 12
51010 +#ifdef CONFIG_TCP_CSUM_OFFLOAD_RX
51011 + if ( le32_to_cpu(pdesc->rxdw3) & BIT(13)){
51012 + pattrib->tcpchk_valid = 1; // valid
51013 + if ( le32_to_cpu(pdesc->rxdw3) & BIT(11) ) {
51014 + pattrib->tcp_chkrpt = 1; // correct
51015 + //DBG_8192C("tcp csum ok\n");
51016 + }
51017 + else
51018 + pattrib->tcp_chkrpt = 0; // incorrect
51019 +
51020 + if ( le32_to_cpu(pdesc->rxdw3) & BIT(12) )
51021 + pattrib->ip_chkrpt = 1; // correct
51022 + else
51023 + pattrib->ip_chkrpt = 0; // incorrect
51024 + }
51025 + else {
51026 + pattrib->tcpchk_valid = 0; // invalid
51027 + }
51028 +#endif
51029 +
51030 + pattrib->mcs_rate=(u8)((le32_to_cpu(pdesc->rxdw3))&0x3f);
51031 + pattrib->rxht=(u8)((le32_to_cpu(pdesc->rxdw3) >>6)&0x1);
51032 + pattrib->sgi=(u8)((le32_to_cpu(pdesc->rxdw3) >>8)&0x1);
51033 + //Offset 16
51034 + //Offset 20
51035 +
51036 +}
51037 +
51038 +
51039 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c
51040 index e2817f3..1368d66 100644
51041 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c
51042 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c
51043 @@ -16,189 +16,10 @@
51044 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
51045 *
51046 *
51047 -
51048 -******************************************************************************/
51049 + ******************************************************************************/
51050 #include <rtl8192c_sreset.h>
51051 #include <rtl8192c_hal.h>
51052 #ifdef DBG_CONFIG_ERROR_DETECT
51053 -extern void rtw_cancel_all_timer(_adapter *padapter);
51054 -
51055 -void rtl8192c_sreset_init_value(_adapter *padapter)
51056 -{
51057 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
51058 - struct sreset_priv *psrtpriv = &pHalData->srestpriv;
51059 -
51060 - _rtw_mutex_init(&psrtpriv->silentreset_mutex );
51061 - psrtpriv->silent_reset_inprogress = _FALSE;
51062 - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
51063 - psrtpriv->last_tx_time =0;
51064 - psrtpriv->last_tx_complete_time =0;
51065 -}
51066 -void rtl8192c_sreset_reset_value(_adapter *padapter)
51067 -{
51068 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
51069 - struct sreset_priv *psrtpriv = &pHalData->srestpriv;
51070 - psrtpriv->silent_reset_inprogress = _FALSE;
51071 - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
51072 - psrtpriv->last_tx_time =0;
51073 - psrtpriv->last_tx_complete_time =0;
51074 -}
51075 -
51076 -static void _restore_security_setting(_adapter *padapter)
51077 -{
51078 - u8 EntryId = 0;
51079 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
51080 - struct sta_priv * pstapriv = &padapter->stapriv;
51081 - struct sta_info *psta;
51082 - struct security_priv* psecuritypriv=&(padapter->securitypriv);
51083 - struct mlme_ext_info *pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
51084 -
51085 - (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X)
51086 - ? rtw_write8(padapter, REG_SECCFG, 0xcc)
51087 - : rtw_write8(padapter, REG_SECCFG, 0xcf);
51088 -
51089 - if ( ( padapter->securitypriv.dot11PrivacyAlgrthm == _WEP40_ ) ||
51090 - ( padapter->securitypriv.dot11PrivacyAlgrthm == _WEP104_ ))
51091 - {
51092 -
51093 - for(EntryId=0; EntryId<4; EntryId++)
51094 - {
51095 - if(EntryId == psecuritypriv->dot11PrivacyKeyIndex)
51096 - rtw_set_key(padapter,&padapter->securitypriv, EntryId, 1);
51097 - else
51098 - rtw_set_key(padapter,&padapter->securitypriv, EntryId, 0);
51099 - }
51100 -
51101 - }
51102 - else if((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
51103 - (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
51104 - {
51105 - psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv));
51106 - if (psta == NULL) {
51107 - //DEBUG_ERR( ("Set wpa_set_encryption: Obtain Sta_info fail \n"));
51108 - }
51109 - else
51110 - {
51111 - //pairwise key
51112 - rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE);
51113 - //group key
51114 - rtw_set_key(padapter,&padapter->securitypriv,padapter->securitypriv.dot118021XGrpKeyid, 0);
51115 - }
51116 - }
51117 -
51118 -}
51119 -
51120 -static void _restore_network_status(_adapter *padapter)
51121 -{
51122 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
51123 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
51124 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
51125 - WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
51126 - unsigned short caps;
51127 - u8 join_type;
51128 -#if 1
51129 -
51130 - //=======================================================
51131 - // reset related register of Beacon control
51132 -
51133 - //set MSR to nolink
51134 - Set_NETYPE0_MSR(padapter, _HW_STATE_NOLINK_);
51135 - // reject all data frame
51136 - rtw_write16(padapter, REG_RXFLTMAP2,0x00);
51137 - //reset TSF
51138 - rtw_write8(padapter, REG_DUAL_TSF_RST, (BIT(0)|BIT(1)));
51139 -
51140 - //disable update TSF
51141 - if(IS_NORMAL_CHIP(pHalData->VersionID))
51142 - rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|BIT(4));
51143 - else
51144 - rtw_write8(padapter, REG_BCN_CTRL, rtw_read8(padapter, REG_BCN_CTRL)|BIT(4)|BIT(5));
51145 -
51146 - //=======================================================
51147 - rtw_joinbss_reset(padapter);
51148 - set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
51149 - //pmlmeinfo->assoc_AP_vendor = maxAP;
51150 -
51151 - if (padapter->registrypriv.wifi_spec) {
51152 - // for WiFi test, follow WMM test plan spec
51153 - rtw_write32(padapter, REG_EDCA_VO_PARAM, 0x002F431C);
51154 - rtw_write32(padapter, REG_EDCA_VI_PARAM, 0x005E541C);
51155 - rtw_write32(padapter, REG_EDCA_BE_PARAM, 0x0000A525);
51156 - rtw_write32(padapter, REG_EDCA_BK_PARAM, 0x0000A549);
51157 -
51158 - // for WiFi test, mixed mode with intel STA under bg mode throughput issue
51159 - if (padapter->mlmepriv.htpriv.ht_option == 0)
51160 - rtw_write32(padapter, REG_EDCA_BE_PARAM, 0x00004320);
51161 -
51162 - } else {
51163 - rtw_write32(padapter, REG_EDCA_VO_PARAM, 0x002F3217);
51164 - rtw_write32(padapter, REG_EDCA_VI_PARAM, 0x005E4317);
51165 - rtw_write32(padapter, REG_EDCA_BE_PARAM, 0x00105320);
51166 - rtw_write32(padapter, REG_EDCA_BK_PARAM, 0x0000A444);
51167 - }
51168 -
51169 - //disable dynamic functions, such as high power, DIG
51170 - //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
51171 -#endif
51172 -
51173 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BSSID, pmlmeinfo->network.MacAddress);
51174 - join_type = 0;
51175 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
51176 -
51177 - Set_NETYPE0_MSR(padapter, (pmlmeinfo->state & 0x3));
51178 -
51179 - mlmeext_joinbss_event_callback(padapter, 1);
51180 - //restore Sequence No.
51181 - rtw_write8(padapter,0x4dc,padapter->xmitpriv.nqos_ssn);
51182 -}
51183 -void rtl8192c_silentreset_for_specific_platform(_adapter *padapter)
51184 -{
51185 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
51186 - struct sreset_priv *psrtpriv = &pHalData->srestpriv;
51187 -
51188 - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
51189 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
51190 - struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
51191 - _irqL irqL;
51192 -
51193 -#ifdef DBG_CONFIG_ERROR_RESET
51194 -
51195 - DBG_871X("%s\n", __FUNCTION__);
51196 -
51197 - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
51198 -
51199 - if (!netif_queue_stopped(padapter->pnetdev))
51200 - netif_stop_queue(padapter->pnetdev);
51201 -
51202 - rtw_cancel_all_timer(padapter);
51203 - tasklet_kill(&pxmitpriv->xmit_tasklet);
51204 -
51205 - _enter_critical_mutex(&psrtpriv->silentreset_mutex, &irqL);
51206 - psrtpriv->silent_reset_inprogress = _TRUE;
51207 - pwrpriv->change_rfpwrstate = rf_off;
51208 -#ifdef CONFIG_IPS
51209 - ips_enter(padapter);
51210 - ips_leave(padapter);
51211 -#endif
51212 - if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
51213 - {
51214 - _restore_network_status(padapter);
51215 - _restore_security_setting(padapter);
51216 - }
51217 -
51218 - _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING);
51219 -
51220 - psrtpriv->silent_reset_inprogress = _FALSE;
51221 - _exit_critical_mutex(&psrtpriv->silentreset_mutex, &irqL);
51222 -
51223 - tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
51224 - _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
51225 -
51226 - if (netif_queue_stopped(padapter->pnetdev))
51227 - netif_wake_queue(padapter->pnetdev);
51228 -#endif
51229 -}
51230 -
51231 void rtl8192c_sreset_xmit_status_check(_adapter *padapter)
51232 {
51233 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
51234 @@ -210,34 +31,44 @@ void rtl8192c_sreset_xmit_status_check(_adapter *padapter)
51235 u32 txdma_status;
51236 if( (txdma_status=rtw_read32(padapter, REG_TXDMA_STATUS)) !=0x00){
51237 DBG_871X("%s REG_TXDMA_STATUS:0x%08x\n", __FUNCTION__, txdma_status);
51238 - rtl8192c_silentreset_for_specific_platform(padapter);
51239 + rtw_hal_sreset_reset(padapter);
51240 }
51241
51242 //total xmit irp = 4
51243 //DBG_8192C("==>%s free_xmitbuf_cnt(%d),txirp_cnt(%d)\n",__FUNCTION__,pxmitpriv->free_xmitbuf_cnt,pxmitpriv->txirp_cnt);
51244 //if(pxmitpriv->txirp_cnt == NR_XMITBUFF+1)
51245 current_time = rtw_get_current_time();
51246 - if(0==pxmitpriv->free_xmitbuf_cnt)
51247 - {
51248 - diff_time = jiffies_to_msecs(current_time - psrtpriv->last_tx_time);
51249 -
51250 - if(diff_time > 2000){
51251 - if(psrtpriv->last_tx_complete_time==0){
51252 +
51253 + if(0 == pxmitpriv->free_xmitbuf_cnt || 0 == pxmitpriv->free_xmit_extbuf_cnt) {
51254 +
51255 + diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_time);
51256 +
51257 + if (diff_time > 2000) {
51258 + if (psrtpriv->last_tx_complete_time == 0) {
51259 psrtpriv->last_tx_complete_time = current_time;
51260 }
51261 else{
51262 - diff_time = jiffies_to_msecs(current_time - psrtpriv->last_tx_complete_time);
51263 - if(diff_time > 4000){
51264 + diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_complete_time);
51265 + if (diff_time > 4000) {
51266 //padapter->Wifi_Error_Status = WIFI_TX_HANG;
51267 - DBG_8192C("%s tx hang\n", __FUNCTION__);
51268 - rtl8192c_silentreset_for_specific_platform(padapter);
51269 + DBG_871X("%s tx hang\n", __FUNCTION__);
51270 + rtw_hal_sreset_reset(padapter);
51271 }
51272 }
51273 - }
51274 - }
51275 + }
51276 + }
51277 +
51278 + if (psrtpriv->dbg_trigger_point == SRESET_TGP_XMIT_STATUS) {
51279 + psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;
51280 + rtw_hal_sreset_reset(padapter);
51281 + return;
51282 + }
51283 }
51284 void rtl8192c_sreset_linked_status_check(_adapter *padapter)
51285 {
51286 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
51287 + struct sreset_priv *psrtpriv = &pHalData->srestpriv;
51288 +
51289 u32 regc50,regc58,reg824,reg800;
51290 regc50 = rtw_read32(padapter,0xc50);
51291 regc58 = rtw_read32(padapter,0xc58);
51292 @@ -250,44 +81,14 @@ void rtl8192c_sreset_linked_status_check(_adapter *padapter)
51293 {
51294 DBG_8192C("%s regc50:0x%08x, regc58:0x%08x, reg824:0x%08x, reg800:0x%08x,\n", __FUNCTION__,
51295 regc50, regc58, reg824, reg800);
51296 - rtl8192c_silentreset_for_specific_platform(padapter);
51297 - }
51298 -}
51299 -
51300 -#ifdef DBG_CONFIG_ERROR_DETECT
51301 -u8 rtl8192c_sreset_get_wifi_status(_adapter *padapter)
51302 -{
51303 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
51304 - struct sreset_priv *psrtpriv = &pHalData->srestpriv;
51305 -
51306 - u8 status = WIFI_STATUS_SUCCESS;
51307 - u32 val32 = 0;
51308 - _irqL irqL;
51309 - if(psrtpriv->silent_reset_inprogress == _TRUE)
51310 - {
51311 - return status;
51312 + rtw_hal_sreset_reset(padapter);
51313 }
51314 - val32 =rtw_read32(padapter,REG_TXDMA_STATUS);
51315 - if(val32==0xeaeaeaea){
51316 - psrtpriv->Wifi_Error_Status = WIFI_IF_NOT_EXIST;
51317 - }
51318 - else if(val32!=0){
51319 - DBG_8192C("txdmastatu(%x)\n",val32);
51320 - psrtpriv->Wifi_Error_Status = WIFI_MAC_TXDMA_ERROR;
51321 - }
51322
51323 - if(WIFI_STATUS_SUCCESS !=psrtpriv->Wifi_Error_Status)
51324 - {
51325 - DBG_8192C("==>%s error_status(0x%x) \n",__FUNCTION__,psrtpriv->Wifi_Error_Status);
51326 - status = (psrtpriv->Wifi_Error_Status &( ~(USB_READ_PORT_FAIL|USB_WRITE_PORT_FAIL)));
51327 + if (psrtpriv->dbg_trigger_point == SRESET_TGP_LINK_STATUS) {
51328 + psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;
51329 + rtw_hal_sreset_reset(padapter);
51330 + return;
51331 }
51332 - DBG_8192C("==> %s wifi_status(0x%x)\n",__FUNCTION__,status);
51333 -
51334 - //status restore
51335 - psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
51336 -
51337 - return status;
51338 }
51339 #endif
51340
51341 -#endif
51342 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c
51343 new file mode 100644
51344 index 0000000..2cfd851
51345 --- /dev/null
51346 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c
51347 @@ -0,0 +1,63 @@
51348 +/******************************************************************************
51349 + *
51350 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
51351 + *
51352 + * This program is free software; you can redistribute it and/or modify it
51353 + * under the terms of version 2 of the GNU General Public License as
51354 + * published by the Free Software Foundation.
51355 + *
51356 + * This program is distributed in the hope that it will be useful, but WITHOUT
51357 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
51358 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
51359 + * more details.
51360 + *
51361 + * You should have received a copy of the GNU General Public License along with
51362 + * this program; if not, write to the Free Software Foundation, Inc.,
51363 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
51364 + *
51365 + *
51366 + ******************************************************************************/
51367 +#define _RTL8192C_XMIT_C_
51368 +
51369 +#include <drv_conf.h>
51370 +#include <osdep_service.h>
51371 +#include <drv_types.h>
51372 +#include <rtl8192c_hal.h>
51373 +
51374 +#ifdef CONFIG_XMIT_ACK
51375 +void dump_txrpt_ccx_8192c(void *buf)
51376 +{
51377 + struct txrpt_ccx_8192c *txrpt_ccx = buf;
51378 +
51379 + DBG_871X("%s:\n"
51380 + "retry_cnt:%u, rsvd_0:%u, rts_retry_cnt:%u, rsvd_1:%u\n"
51381 + "ccx_qtime:%u, missed_pkt_num:%u, rsvd_4:%u\n"
51382 + "mac_id:%u, des1_fragssn:%u\n"
51383 + "rpt_pkt_num:%u, pkt_drop:%u, lifetime_over:%u, retry_over:%u\n"
51384 + "edca_tx_queue:%u, rsvd_7:%u, bmc:%u, pkt_ok:%u, init_ccx:%u\n"
51385 + , __func__
51386 + , txrpt_ccx->retry_cnt, txrpt_ccx->rsvd_0, txrpt_ccx->rts_retry_cnt, txrpt_ccx->rsvd_1
51387 + , txrpt_ccx_qtime_8192c(txrpt_ccx), txrpt_ccx->missed_pkt_num, txrpt_ccx->rsvd_4
51388 + , txrpt_ccx->mac_id, txrpt_ccx->des1_fragssn
51389 + , txrpt_ccx->rpt_pkt_num, txrpt_ccx->pkt_drop, txrpt_ccx->lifetime_over, txrpt_ccx->retry_over
51390 + , txrpt_ccx->edca_tx_queue, txrpt_ccx->rsvd_7, txrpt_ccx->bmc, txrpt_ccx->pkt_ok, txrpt_ccx->int_ccx
51391 + );
51392 +}
51393 +
51394 +void handle_txrpt_ccx_8192c(_adapter *adapter, void *buf)
51395 +{
51396 + struct txrpt_ccx_8192c *txrpt_ccx = buf;
51397 +
51398 + #ifdef DBG_CCX
51399 + dump_txrpt_ccx_8192c(buf);
51400 + #endif
51401 +
51402 + if (txrpt_ccx->int_ccx) {
51403 + if (txrpt_ccx->pkt_ok)
51404 + rtw_ack_tx_done(&adapter->xmitpriv, RTW_SCTX_DONE_SUCCESS);
51405 + else
51406 + rtw_ack_tx_done(&adapter->xmitpriv, RTW_SCTX_DONE_CCX_PKT_FAIL);
51407 + }
51408 +}
51409 +#endif //CONFIG_XMIT_ACK
51410 +
51411 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c
51412 index 1615b5d..b49486b 100644
51413 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c
51414 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c
51415 @@ -24,9 +24,994 @@
51416 #include "Hal8192CUHWImg.h"
51417
51418 #ifdef CONFIG_BT_COEXISTENCE
51419 -// =================== v79 TSMC COMMON 2011-10-06 =======================
51420 +// =================== v84 TSMC COMMON 2012-04-13 =======================
51421 u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
51422 -0xc1,0x88,0x02,0x00,0x4f,0x00,0x00,0x00,0x0a,0x06,0x18,0x02,0x58,0x3f,0x00,0x00,
51423 +0xc1,0x88,0x02,0x00,0x54,0x00,0x01,0x00,0x04,0x13,0x11,0x07,0x3a,0x3d,0x00,0x00,
51424 +0x58,0x97,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
51425 +0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
51426 +0x00,0x00,0x00,0x02,0x50,0xa1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
51427 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
51428 +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
51429 +0x00,0x00,0x00,0x02,0x57,0x91,0x00,0x00,0x00,0x00,0x00,0xa1,0xe8,0x00,0x00,0x00,
51430 +0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
51431 +0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
51432 +0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
51433 +0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,0x00,0x18,0x22,0x21,0x20,0x18,
51434 +0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,0x20,0x08,0x00,0x20,0x22,0x21,
51435 +0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,0x22,0x20,0x18,0x08,0x00,0x20,
51436 +0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,0x00,0x30,0x31,0x2f,0x10,0x10,
51437 +0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,0x10,0x00,0x00,0x30,0x31,0x20,
51438 +0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,0x04,0x04,0x04,0x05,0x04,0x04,
51439 +0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,
51440 +0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x07,0x0a,0x0b,
51441 +0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,0x08,0x08,0x09,0x09,0x0a,0x0c,
51442 +0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,0x07,0x07,0x08,0x0a,0x04,0x04,
51443 +0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,0x08,0x0b,0x0d,0x0f,0x04,0x04,
51444 +0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,0x04,0x04,0x05,0x05,0x06,0x0a,
51445 +0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,0x00,0x00,0x00,0x00,0x00,0x00,
51446 +0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,0x21,0x27,0x29,0x2a,0x00,0x00,
51447 +0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x18,
51448 +0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,0x00,0xc0,0x00,0xd8,0x00,0x50,
51449 +0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,0x01,0xe0,0x02,0x30,0x01,0x2c,
51450 +0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,0x06,0x40,0x07,0xd0,0x00,0x02,
51451 +0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x24,0x00,0x30,
51452 +0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,0x00,0x50,0x00,0x64,0x00,0xa0,
51453 +0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,0x00,0xf0,0x01,0x68,0x01,0xf4,
51454 +0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,
51455 +0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,0x05,0x07,0x07,0x08,0x0b,0x12,
51456 +0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,
51457 +0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x20,0x1e,
51458 +0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
51459 +0xbb,0x01,0x0c,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,0x22,0x50,
51460 +0x06,0xe9,0x25,0x82,0xf8,0xe6,0x22,0xbb,0xfe,0x06,0xe9,0x25,0x82,0xf8,0xe2,0x22,
51461 +0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe4,0x93,0x22,0xbb,0x01,0x06,
51462 +0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,0xf3,0x22,0xf8,
51463 +0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0x22,
51464 +0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,0x82,0xc8,0xf2,
51465 +0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,
51466 +0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xe0,0xf5,
51467 +0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,0xfe,0x07,0xe3,
51468 +0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,0xf0,0x74,0x01,
51469 +0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,
51470 +0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,0x08,0xe6,0x22,
51471 +0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,0xe5,0x83,0x2a,
51472 +0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
51473 +0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,0x19,0x22,0xbb,
51474 +0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,0xe5,0x82,0x29,
51475 +0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x09,
51476 +0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,0x25,0x82,0xc8,
51477 +0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,0x49,0xfd,0xec,
51478 +0x48,0xfc,0x22,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xa4,
51479 +0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,0xa3,0xe0,0xfa,
51480 +0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,0xf0,0xe5,0x82,
51481 +0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,0xa3,0xea,0xf0,
51482 +0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,
51483 +0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,
51484 +0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x48,0x29,
51485 +0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,
51486 +0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,
51487 +0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,
51488 +0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x44,0x3d,0xe4,0x7e,0x01,0x93,0x60,
51489 +0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,
51490 +0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,
51491 +0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,
51492 +0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x77,
51493 +0x00,0x41,0x9e,0xae,0x00,0x41,0x9e,0x54,0x80,0x41,0x9e,0xb0,0x00,0x00,0xf0,0x90,
51494 +0x9e,0x5d,0xe0,0x90,0x9e,0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0xd3,0x10,
51495 +0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x85,0xe0,0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,
51496 +0x45,0x12,0x35,0xab,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,
51497 +0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x85,0xf0,0x90,0x9e,0x5b,0xe0,0x90,0x9e,0x86,
51498 +0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,0x5e,0x90,0x01,0x5f,0x74,0x05,0xf0,
51499 +0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x63,0x14,0xf0,0xe5,0x61,0x54,0x0f,0xc3,
51500 +0x94,0x0c,0x50,0x03,0x12,0x54,0xe3,0x22,0x8f,0x82,0x8e,0x83,0xa3,0xa3,0xa3,0xe4,
51501 +0xf0,0x22,0xe4,0xf5,0x65,0x7f,0x60,0x7e,0x01,0x80,0xed,0x7d,0x01,0xaf,0x62,0x02,
51502 +0x54,0xe7,0xb1,0xb0,0xbf,0x01,0x12,0x90,0x9e,0x79,0xe0,0xff,0xe4,0xfd,0xf1,0x79,
51503 +0x12,0x5f,0xf7,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xb1,0xb0,0xbf,0x01,0x0f,0x90,
51504 +0x02,0x09,0xe0,0xff,0x7d,0x01,0xf1,0x79,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x22,
51505 +0x22,0x22,0x00,0x02,0x45,0x03,0x02,0x45,0x06,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
51506 +0x8b,0x20,0x8a,0x21,0x89,0x22,0x90,0x9e,0x87,0x71,0x8b,0xab,0x23,0xaa,0x24,0xa9,
51507 +0x25,0x90,0x9e,0x8a,0x71,0x8b,0xaf,0x26,0x15,0x26,0xef,0x60,0x1b,0x90,0x9e,0x8a,
51508 +0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x29,0xd9,0xff,0x90,0x9e,0x87,0xe4,0x75,0xf0,
51509 +0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x20,0xaa,0x21,0xa9,0x22,0xd0,0xd0,
51510 +0x92,0xaf,0x22,0x90,0x9e,0x11,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0x90,0x06,0xa9,
51511 +0xe0,0x90,0x9e,0x10,0xf0,0xe0,0x54,0xc0,0x70,0x08,0x53,0x64,0xfe,0x53,0x64,0xfd,
51512 +0x91,0xcb,0x90,0x9e,0x10,0xe0,0x30,0xe6,0x13,0x43,0x64,0x01,0x90,0x9e,0x66,0xe0,
51513 +0x64,0x02,0x60,0x04,0x91,0xd2,0x80,0x07,0x91,0x79,0x80,0x03,0x53,0x64,0xfe,0x90,
51514 +0x9e,0x10,0xe0,0x30,0xe7,0x16,0x43,0x64,0x02,0xe4,0x90,0x9e,0x85,0x91,0x4e,0x90,
51515 +0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x67,0x74,0x01,0xf0,0x22,0x53,0x64,0xfd,0x22,
51516 +0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x01,0xc4,0x74,0xb0,0xf0,0x74,0x45,0xa3,
51517 +0xf0,0x90,0x04,0x1d,0xe0,0x60,0x1a,0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,
51518 +0x01,0xc6,0xe0,0x44,0x40,0xf0,0x90,0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,
51519 +0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,
51520 +0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,
51521 +0x05,0xc0,0x06,0xc0,0x07,0x75,0x13,0x00,0x90,0x01,0xc4,0x74,0xe8,0xf0,0x74,0x45,
51522 +0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,0x3c,0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,
51523 +0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,0xf5,0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,
51524 +0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,0x74,0x01,0xf0,0xe5,0x34,0x30,0xe1,0x09,0x90,
51525 +0x01,0x3c,0x74,0x02,0xf0,0x12,0x61,0xc9,0xe5,0x34,0x30,0xe2,0x38,0x90,0x01,0x3c,
51526 +0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe0,0x24,0x90,0x9e,0x85,0xe4,0xf0,0x90,
51527 +0x9e,0x5b,0xe0,0x90,0x9e,0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x91,0x5e,
51528 +0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x80,0x07,0x90,0x9e,
51529 +0x64,0xe4,0xf0,0x91,0xcb,0xe5,0x34,0x30,0xe3,0x38,0x90,0x01,0x3c,0x74,0x08,0xf0,
51530 +0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,0x90,0x9e,0x85,0xe4,0xf0,0x90,0x9e,0x5b,0xe0,
51531 +0x90,0x9e,0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,0x5e,0x90,0x01,0x5f,
51532 +0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x80,0x07,0x90,0x9e,0x63,0xe4,0xf0,
51533 +0x91,0xcb,0xe5,0x34,0x30,0xe4,0x09,0x90,0x01,0x3c,0x74,0x10,0xf0,0x12,0x4b,0xfb,
51534 +0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,0x3c,0x74,0x20,0xf0,0x12,0x4c,0x3d,0xe5,0x35,
51535 +0x30,0xe0,0x44,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,0x01,0x2f,0xe0,0x44,0x7f,0xf0,
51536 +0x90,0x00,0x83,0xe0,0x54,0x0f,0xf5,0x13,0xb4,0x01,0x02,0x80,0x1c,0xe5,0x13,0xb4,
51537 +0x02,0x05,0x90,0x00,0x83,0x80,0x12,0xe5,0x13,0xb4,0x04,0x05,0x90,0x00,0x83,0x80,
51538 +0x08,0xe5,0x13,0xb4,0x0c,0x06,0x90,0x00,0x83,0xe0,0xf5,0x62,0x90,0x01,0xbb,0xe5,
51539 +0x62,0xf0,0x12,0x60,0xc0,0x91,0xcb,0xe5,0x35,0x30,0xe2,0x06,0x90,0x01,0x3d,0x74,
51540 +0x04,0xf0,0xe5,0x35,0x30,0xe4,0x06,0x90,0x01,0x3d,0x74,0x10,0xf0,0xe5,0x36,0x30,
51541 +0xe0,0x06,0x90,0x01,0x3e,0x74,0x01,0xf0,0xe5,0x36,0x30,0xe1,0x06,0x90,0x01,0x3e,
51542 +0x74,0x02,0xf0,0x74,0xe8,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,0xd0,0x07,
51543 +0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,
51544 +0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x9e,0x98,0xef,0xf0,0xa3,0xed,
51545 +0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x63,0x60,0x05,0xe4,0xff,0x12,0x54,0x97,0x90,
51546 +0x9e,0x98,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9a,0xe4,0xf0,0xa3,0x74,0x80,0xf0,0x90,
51547 +0x9e,0x98,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,0x25,0xef,0xf0,0x90,
51548 +0x9e,0x99,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,0x24,0x0f,0xf5,0x82,0xe4,0x34,0xfc,
51549 +0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
51550 +0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9a,0xa3,0xe0,0xff,0xfd,0x24,0x08,0xf5,0x82,0xe4,
51551 +0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
51552 +0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,
51553 +0xf7,0xf0,0x90,0x9e,0x9a,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0x75,0x28,0x33,0xe4,0xf5,
51554 +0x29,0x75,0x2a,0x07,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,
51555 +0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0xe4,0x90,0x9e,0x16,0xf0,0xa3,0xf0,
51556 +0x75,0x8e,0x02,0xf1,0xa1,0xf1,0xe9,0x90,0x9e,0x7e,0xef,0xf0,0xf1,0xdd,0x90,0x9e,
51557 +0x80,0xef,0xf0,0xf1,0xf6,0x90,0x9e,0x75,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xf5,0x57,
51558 +0x12,0x6e,0x77,0xf1,0xd4,0x12,0x60,0x4b,0x12,0x32,0x3d,0xf1,0xc9,0x11,0x0b,0x12,
51559 +0x50,0x0e,0xf1,0xcd,0xf1,0xb1,0x12,0x44,0xff,0xf1,0x45,0x90,0x9e,0x18,0xe5,0xd9,
51560 +0xf0,0x11,0xd0,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,0xf0,0xb1,0x45,0x75,0xe8,
51561 +0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x9e,0x16,0xe0,0x64,0x01,0xf0,0x24,0x29,0x90,
51562 +0x01,0xc4,0xf0,0x74,0x48,0xa3,0xf0,0xe5,0x57,0x30,0xe4,0x0a,0xc2,0xaf,0x53,0x57,
51563 +0xef,0xd2,0xaf,0x12,0x58,0x74,0xe5,0x57,0x30,0xe6,0x17,0xc2,0xaf,0x53,0x57,0xbf,
51564 +0xd2,0xaf,0x12,0x67,0xa1,0x90,0x9e,0x43,0xe0,0xff,0x60,0x03,0xb4,0x01,0x03,0x12,
51565 +0x7b,0x5c,0x90,0x9e,0x43,0xe0,0x70,0x03,0x12,0x7c,0x5f,0x12,0x73,0x85,0x80,0xb6,
51566 +0x90,0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,
51567 +0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x54,0x31,0x05,0x7d,0xff,0x7f,0x55,0x31,0x05,0x7d,
51568 +0xff,0x7f,0x56,0x31,0x05,0x7d,0xff,0x7f,0x57,0x80,0x0a,0xf0,0x90,0x00,0x45,0xe0,
51569 +0x54,0xfe,0xfd,0x7f,0x45,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,
51570 +0x00,0xed,0xf0,0xb1,0x45,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,
51571 +0x66,0x24,0x02,0x60,0x02,0x21,0xc1,0x90,0x9e,0x3f,0x74,0x02,0xf0,0x90,0x00,0x48,
51572 +0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x31,0x05,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,
51573 +0x47,0x31,0x05,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,
51574 +0x9e,0x3f,0xf0,0x90,0x9e,0x3b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
51575 +0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x31,
51576 +0x05,0x90,0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,0x45,0x31,0x05,0x90,0x00,0x46,0xe0,
51577 +0x44,0x10,0xfd,0x7f,0x46,0x80,0x38,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x90,0x9e,0x45,
51578 +0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,
51579 +0x90,0x00,0x45,0xe0,0x44,0x20,0xfd,0x7f,0x45,0x31,0x05,0x90,0x00,0x45,0xe0,0x44,
51580 +0x10,0xfd,0x7f,0x45,0x31,0x05,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x31,
51581 +0x05,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x41,0xf0,0x90,0x00,0x01,0x12,
51582 +0x42,0x20,0x25,0xe0,0x25,0xe0,0x90,0x9e,0x40,0xf0,0x12,0x29,0xd9,0x25,0xe0,0x25,
51583 +0xe0,0x90,0x9e,0x44,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x4f,0xf0,0x90,0x05,0x61,
51584 +0xe0,0x90,0x9e,0x50,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x51,0xf0,0x90,0x05,0x63,
51585 +0xe0,0x90,0x9e,0x52,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,0x90,
51586 +0x9e,0x40,0xe0,0xff,0x91,0xf0,0x90,0x9e,0x24,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,
51587 +0x41,0xe0,0x70,0x02,0x41,0xc8,0x90,0x9e,0x40,0xe0,0x70,0x02,0x41,0xc8,0x90,0x9e,
51588 +0x44,0xe0,0x70,0x02,0x41,0xc8,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,
51589 +0x90,0x9e,0x53,0x74,0x01,0xf0,0x90,0x9e,0x24,0xe0,0x24,0xff,0x92,0xaf,0x11,0xfc,
51590 +0x90,0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x31,0x05,0x90,0x9e,0x39,0xe0,0x60,
51591 +0x15,0x90,0x9e,0x45,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,
51592 +0x08,0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,
51593 +0x54,0xef,0xfd,0x7f,0x45,0x31,0x05,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,
51594 +0x4f,0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x50,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,
51595 +0x51,0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x52,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,
51596 +0xe4,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,
51597 +0x20,0xe4,0xff,0x12,0x37,0x00,0x80,0x2b,0x90,0x9e,0x41,0xe0,0x70,0x2d,0x90,0x9e,
51598 +0x53,0x11,0xfb,0x90,0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x31,0x05,0x90,0x05,
51599 +0x22,0xe4,0xf0,0xa2,0xaf,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,
51600 +0x12,0x36,0x92,0x90,0x9e,0x24,0xe0,0x24,0xff,0x92,0xaf,0x22,0x8b,0x14,0x8a,0x15,
51601 +0x89,0x16,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x42,0xf0,0xe0,0x30,0xe0,0x4b,
51602 +0x90,0x9e,0x39,0x74,0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x3b,
51603 +0x12,0x2a,0x7f,0xab,0x14,0xaa,0x15,0xa9,0x16,0x90,0x00,0x01,0x12,0x42,0x20,0xff,
51604 +0xe4,0xfc,0xfd,0xfe,0x78,0x1a,0x12,0x2a,0x6c,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,
51605 +0x07,0x90,0x9e,0x3b,0x12,0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,
51606 +0x45,0x12,0x2a,0x7f,0x90,0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x39,0xf0,
51607 +0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,
51608 +0x9e,0x3b,0x12,0x2a,0x7f,0x90,0x9e,0x3b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
51609 +0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x42,0xe0,0x30,0xe1,0x19,0x7d,
51610 +0x0c,0x7f,0x47,0x31,0x05,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x31,0x05,
51611 +0x90,0x00,0x46,0xe0,0x44,0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,
51612 +0x47,0x31,0x05,0x90,0x00,0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x31,0x05,0x90,0x00,
51613 +0x46,0xe0,0x54,0xef,0xfd,0x7f,0x46,0x31,0x05,0xe4,0x90,0x9e,0x3f,0xf0,0x22,0x90,
51614 +0x01,0x30,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,
51615 +0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x50,0x31,0x05,0xe4,0xfd,0x7f,0x51,0x31,0x05,0xe4,
51616 +0xfd,0x7f,0x52,0x31,0x05,0xe4,0xfd,0x7f,0x53,0x21,0x05,0xe5,0x65,0x64,0x01,0x70,
51617 +0x3b,0xd1,0x85,0xbf,0x01,0x04,0x7f,0x01,0xd1,0x79,0x90,0x00,0x46,0xe0,0x44,0x04,
51618 +0xfd,0x7f,0x46,0x31,0x05,0x90,0x00,0x44,0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x31,0x05,
51619 +0x90,0x00,0x46,0xe0,0x54,0xfb,0xfd,0x7f,0x46,0x31,0x05,0x7f,0x02,0xd1,0xa1,0x8f,
51620 +0x69,0x90,0x01,0xc9,0xe5,0x69,0xf0,0xb4,0x01,0x02,0xd1,0x19,0x22,0x90,0x9e,0x41,
51621 +0xe0,0x64,0x01,0x60,0x02,0x81,0xef,0x90,0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,
51622 +0x31,0x05,0x90,0x9e,0x53,0xe0,0x70,0x31,0x90,0x9e,0x39,0xe0,0x60,0x15,0x90,0x9e,
51623 +0x45,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,
51624 +0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x9e,0x40,0xe0,0xff,0x91,0xf0,
51625 +0x90,0x9e,0x53,0x74,0x01,0x11,0xfb,0x80,0x3f,0x90,0x9e,0x53,0xe0,0x64,0x01,0x70,
51626 +0x37,0x90,0x9e,0x44,0xe0,0xff,0x91,0xf0,0xe4,0x90,0x9e,0x53,0xf0,0x90,0x00,0x45,
51627 +0xe0,0x44,0x01,0xfd,0x7f,0x45,0x31,0x05,0x90,0x9e,0x39,0xe0,0x60,0x15,0x90,0x9e,
51628 +0x3b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,
51629 +0xd9,0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,
51630 +0x9e,0x4f,0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x50,0xe0,0x90,0x05,0x85,0xf0,0x90,
51631 +0x9e,0x51,0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x52,0xe0,0x90,0x05,0x87,0xf0,0x22,
51632 +0x90,0x05,0x60,0xe0,0x90,0x9e,0x4f,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x50,0xf0,
51633 +0x90,0x05,0x62,0xe0,0x90,0x9e,0x51,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x52,0xf0,
51634 +0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x50,0xe0,0xd3,0x9e,0x40,0x1e,0xe0,0x2f,0xf0,
51635 +0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,0xe0,0xb4,0xff,0x03,0xe4,0xf0,0x22,0x90,
51636 +0x9e,0x52,0x80,0x03,0x90,0x9e,0x51,0xe0,0x04,0xf0,0x22,0x90,0x9e,0x50,0xe0,0x2f,
51637 +0xf0,0x22,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x7f,0x10,0xdf,0xfe,
51638 +0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x2a,0xed,
51639 +0xf0,0x90,0x9e,0x29,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4e,0xa3,0xe0,0x70,0x1a,0x90,
51640 +0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
51641 +0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,
51642 +0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,
51643 +0xb1,0x45,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
51644 +0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0x80,0x59,0x90,0x9e,0x29,0xe0,0x24,0xf8,0xf0,
51645 +0xa3,0xe0,0x70,0x1d,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
51646 +0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,
51647 +0x1a,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
51648 +0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,0x43,0xe0,0x4f,0xf0,0xb1,0x45,0x90,0x9e,0x29,
51649 +0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,
51650 +0x00,0x43,0xb1,0x42,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,0xb1,
51651 +0xf0,0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x31,0x05,0x90,0x9e,0xb1,0xe0,
51652 +0x44,0xb0,0xfd,0x7f,0x49,0x21,0x05,0x90,0x9e,0x27,0xee,0xf0,0xa3,0xef,0xf0,0x75,
51653 +0x65,0x01,0x8e,0x66,0xf5,0x67,0xe4,0xfd,0x7f,0x0b,0xb1,0x55,0xe4,0xfd,0x7f,0x02,
51654 +0xb1,0x55,0xd1,0x85,0xe4,0xff,0xd1,0x79,0xe4,0xf5,0x69,0x90,0x01,0xc9,0xe5,0x69,
51655 +0xf0,0x90,0x9e,0x27,0xe0,0xfc,0xa3,0xe0,0xfd,0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,
51656 +0x7d,0x01,0x7f,0x60,0x7e,0x01,0x02,0x35,0xab,0x90,0x01,0xca,0xe5,0x68,0xf0,0xef,
51657 +0x60,0x02,0xd1,0x19,0x22,0x7f,0x0b,0xd1,0xa1,0xef,0x65,0x68,0x60,0x10,0xe5,0x68,
51658 +0xb4,0x01,0x05,0xe4,0xf5,0x68,0x80,0x03,0x75,0x68,0x01,0x7f,0x01,0x22,0x7f,0x00,
51659 +0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xb2,0xef,0xf0,0xd3,0x94,0x07,
51660 +0x50,0x43,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
51661 +0xff,0x90,0x00,0x46,0xb1,0x42,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,
51662 +0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,
51663 +0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,
51664 +0xd8,0xf8,0xff,0x80,0x4b,0x90,0x9e,0xb2,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,
51665 +0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,
51666 +0xf0,0xb1,0x45,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,
51667 +0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x42,0xe0,0xfb,0xe4,0xfe,
51668 +0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,
51669 +0xd0,0xd0,0x92,0xaf,0x22,0xe4,0xfd,0x7f,0x45,0x31,0x05,0x90,0x04,0xfd,0xe4,0xf0,
51670 +0xa3,0xf0,0x90,0x9e,0x43,0xf0,0x90,0x9e,0x49,0xf0,0x90,0x9e,0x4c,0xf0,0x90,0x9e,
51671 +0x4a,0xf0,0x90,0x9e,0x4d,0xf0,0x90,0x9e,0x4b,0xf0,0x90,0x9e,0x4e,0xf0,0x90,0x9e,
51672 +0x35,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,
51673 +0x3f,0xf0,0x90,0x9e,0x41,0xf0,0x90,0x9e,0x53,0xf0,0x90,0x9e,0x44,0xf0,0x90,0x9e,
51674 +0x40,0xf0,0x90,0x9e,0x39,0xf0,0x90,0x00,0x51,0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x21,
51675 +0x05,0xe4,0x90,0x9e,0x7d,0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,0x7f,0x80,0x21,
51676 +0x05,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,0x01,0x38,0xe5,0x30,0xf0,
51677 +0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0xe4,0xf5,0x68,0x22,0x90,0x01,0x64,
51678 +0x74,0xa0,0xf0,0x22,0x90,0x9e,0x80,0xe0,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0xf3,
51679 +0xe0,0x7f,0x00,0x30,0xe3,0x02,0x7f,0x01,0x22,0x90,0x00,0x02,0xe0,0x54,0xe0,0x7f,
51680 +0x01,0x60,0x02,0x7f,0x00,0x22,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x0c,0x90,0x00,0xf2,
51681 +0xe0,0x30,0xe7,0x05,0x7e,0xfd,0x7f,0x33,0x22,0x7e,0xfd,0x7f,0x2f,0x22,0x90,0x00,
51682 +0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,0xf0,0xa3,
51683 +0xe4,0xf0,0x22,0x90,0x01,0x02,0xe0,0x54,0x03,0xff,0xe0,0x54,0x0c,0x13,0x13,0x54,
51684 +0x3f,0xfe,0xef,0x64,0x01,0x60,0x04,0xef,0xb4,0x03,0x10,0x90,0x9e,0x10,0x74,0x01,
51685 +0xf0,0xa3,0x74,0x37,0xf0,0xa3,0x74,0x01,0xf0,0x80,0x1a,0xee,0x64,0x01,0x60,0x07,
51686 +0xaf,0x06,0xee,0x64,0x03,0x70,0x49,0x90,0x9e,0x10,0x74,0x01,0xf0,0xa3,0x74,0x3d,
51687 +0xf0,0xa3,0x74,0x40,0xf0,0x90,0x9e,0x10,0xe0,0xfe,0xa3,0xe0,0xff,0xf5,0x82,0x8e,
51688 +0x83,0xe0,0xfd,0x90,0x9e,0x12,0xe0,0xfc,0xed,0x5c,0x60,0x0c,0x8f,0x82,0x8e,0x83,
51689 +0xec,0xf0,0xe4,0x90,0x9e,0x77,0xf0,0x22,0x90,0x9e,0x77,0xe0,0x04,0xf0,0xe0,0xc3,
51690 +0x94,0x0a,0x40,0x0c,0xe4,0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x03,0x12,0x44,0xea,
51691 +0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,
51692 +0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,
51693 +0xc4,0x74,0xa1,0xf0,0x74,0x50,0xa3,0xf0,0x90,0x01,0x34,0xe0,0x55,0x28,0xf5,0x2c,
51694 +0xa3,0xe0,0x55,0x29,0xf5,0x2d,0xa3,0xe0,0x55,0x2a,0xf5,0x2e,0xa3,0xe0,0x55,0x2b,
51695 +0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x41,0x46,0x90,0x01,0x34,0x74,0x01,0xf0,0x85,
51696 +0xd1,0x4d,0x85,0xd2,0x4e,0x85,0xd3,0x4f,0x85,0xd4,0x50,0x85,0xd5,0x51,0x85,0xd6,
51697 +0x52,0x85,0xd7,0x53,0x85,0xd9,0x54,0xe5,0x54,0x54,0x40,0xc3,0x13,0xff,0xe5,0x53,
51698 +0x54,0x20,0x6f,0x70,0x02,0x21,0xf5,0xe5,0x54,0x30,0xe5,0x02,0x21,0xf5,0xe5,0x52,
51699 +0x54,0x3f,0xf5,0x08,0xe5,0x4d,0x54,0x3f,0xf5,0x09,0xe5,0x51,0x54,0x1f,0xff,0xe5,
51700 +0x08,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
51701 +0x42,0x81,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
51702 +0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x09,0xd3,0x94,0x04,0x40,
51703 +0x03,0x75,0x09,0x04,0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x5f,0x75,
51704 +0xf0,0x02,0xe5,0x09,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,0xe5,0x53,0x54,0x1f,
51705 +0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x5f,
51706 +0x75,0xf0,0x02,0xe5,0x09,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,0xf0,0xe5,0x54,0x20,
51707 +0xe6,0x24,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
51708 +0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4f,0x30,0xe7,0x36,0xaf,
51709 +0x08,0x12,0x63,0x51,0x80,0x2f,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,
51710 +0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4f,
51711 +0x30,0xe7,0x12,0xe5,0x4f,0x54,0x7f,0xfd,0xe5,0x53,0x54,0x1f,0xf5,0x0d,0xab,0x09,
51712 +0xaf,0x08,0x12,0x62,0xee,0xe5,0x63,0x14,0x24,0xfd,0x50,0x02,0x80,0x48,0x90,0x9e,
51713 +0x66,0xe0,0x60,0x3a,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0x71,
51714 +0xc3,0xef,0x64,0x01,0x70,0x30,0x90,0x9e,0x85,0xf0,0x90,0x9e,0x5b,0xe0,0x90,0x9e,
51715 +0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x44,0x5e,0x90,0x01,0x5b,0x74,
51716 +0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x9e,0x64,0xf0,0x80,0x08,0x71,0xc3,
51717 +0xbf,0x01,0x03,0x12,0x44,0xcb,0xe5,0x2c,0x30,0xe1,0x20,0x90,0x01,0x34,0x74,0x02,
51718 +0xf0,0x85,0xd1,0x58,0x85,0xd2,0x59,0x85,0xd3,0x5a,0x85,0xd4,0x5b,0x85,0xd5,0x5c,
51719 +0x85,0xd6,0x5d,0x85,0xd7,0x5e,0x85,0xd9,0x5f,0x71,0xd2,0xe5,0x2c,0x30,0xe3,0x06,
51720 +0x90,0x01,0x34,0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,
51721 +0xf0,0x43,0x57,0x10,0xe5,0x2c,0x30,0xe5,0x26,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1f,
51722 +0xe0,0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,0xe8,0x00,
51723 +0x12,0x4b,0xcf,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x12,0x4d,0x45,0x80,0xfe,0xe5,
51724 +0x2c,0x30,0xe6,0x06,0x90,0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe0,0x12,0x90,
51725 +0x9e,0x7f,0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,0x12,0x61,0x4e,0x90,0x9e,0x7f,0xe4,
51726 +0xf0,0xe5,0x2e,0x30,0xe1,0x0b,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x57,0x40,0x11,
51727 +0x23,0xe5,0x2e,0x30,0xe2,0x09,0x90,0x01,0x36,0x74,0x04,0xf0,0x12,0x60,0xdf,0xe5,
51728 +0x2e,0x30,0xe3,0x28,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,0x60,0x64,0x01,0x70,0x1c,
51729 +0xe5,0x63,0x60,0x18,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,
51730 +0x9e,0x85,0xe4,0x12,0x44,0x4e,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,
51731 +0x2b,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x60,0xb4,0x01,0x20,0xe5,0x63,0x60,0x1c,
51732 +0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x67,0xe4,0xf0,
51733 +0x53,0x64,0xfd,0xe5,0x64,0x54,0x07,0x70,0x03,0x12,0x44,0xcb,0xe5,0x2e,0x30,0xe5,
51734 +0x1f,0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x60,0xb4,0x01,0x14,0xe5,0x63,0x60,0x10,
51735 +0x90,0x9e,0x66,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xd2,0x80,0x03,0x12,0x44,0x79,
51736 +0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x60,0xb4,0x01,0x10,
51737 +0xe5,0x63,0x60,0x0c,0x53,0x64,0xfe,0xe5,0x64,0x54,0x07,0x70,0x03,0x12,0x44,0xcb,
51738 +0xe5,0x2f,0x30,0xe1,0x08,0x90,0x01,0x37,0x74,0x02,0xf0,0x91,0x64,0x74,0xa1,0x04,
51739 +0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,
51740 +0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,
51741 +0xd0,0xe0,0x32,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,0x02,0x7f,
51742 +0x00,0x22,0x90,0x9e,0x10,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,0x80,0xf0,
51743 +0x7b,0x00,0x7a,0x00,0x79,0x58,0x90,0x9e,0x90,0x12,0x43,0x8b,0x0b,0x7a,0x9e,0x79,
51744 +0x10,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x8d,0x12,0x43,0x8b,0x90,0x9e,
51745 +0xb0,0xe0,0xff,0x04,0xf0,0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x7f,0xaf,0x7e,0x01,
51746 +0x12,0x71,0x7a,0xef,0x60,0x49,0x90,0x9e,0x8d,0x12,0x43,0x6b,0x8b,0x23,0x8a,0x24,
51747 +0x89,0x25,0x75,0x26,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x45,0x09,0x90,0x9e,
51748 +0x90,0x12,0x43,0x6b,0x8b,0x23,0x8a,0x24,0x89,0x25,0x90,0x9e,0x8d,0x12,0x43,0x6b,
51749 +0x12,0x29,0xd9,0xff,0xc4,0x54,0x0f,0xf5,0x26,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x12,
51750 +0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0xd0,
51751 +0xd0,0x92,0xaf,0x22,0x90,0x9e,0xa0,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe5,0x63,
51752 +0x14,0x24,0xfd,0x50,0x02,0x80,0x1f,0x90,0x9e,0x66,0xe0,0x60,0x06,0x7d,0x01,0x7f,
51753 +0x0c,0x80,0x0d,0xe5,0x61,0x54,0x0f,0xc3,0x94,0x04,0x50,0x06,0x7d,0x01,0x7f,0x04,
51754 +0x91,0xe7,0xe4,0xff,0x91,0x97,0x22,0xef,0x60,0x0b,0x90,0x9e,0x80,0xe0,0xb4,0x01,
51755 +0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x75,
51756 +0xa5,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,0x90,0x05,0x22,0x74,0xff,0xf0,0x12,0x74,
51757 +0x12,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x36,
51758 +0xe6,0xe5,0x63,0x60,0x04,0x7f,0x01,0x91,0x97,0x12,0x74,0xd2,0x53,0x61,0xf0,0x43,
51759 +0x61,0x02,0x22,0x7d,0x01,0x7f,0x0c,0x8f,0x6a,0x8d,0x6b,0xe5,0x6a,0x54,0x0f,0xff,
51760 +0xe5,0x61,0x54,0x0f,0x6f,0x60,0x65,0xe5,0x6a,0x30,0xe2,0x28,0xe5,0x61,0x20,0xe2,
51761 +0x04,0x7f,0x01,0xd1,0xc2,0xe5,0x61,0x30,0xe3,0x0c,0xe5,0x6a,0x20,0xe3,0x07,0xb1,
51762 +0x5d,0xef,0x60,0x48,0xa1,0xa5,0xe5,0x61,0x20,0xe3,0x41,0xe5,0x6a,0x30,0xe3,0x3c,
51763 +0xaf,0x6b,0xc1,0xdc,0xe5,0x61,0x54,0x0f,0xff,0xbf,0x0c,0x0c,0xe5,0x6a,0x20,0xe3,
51764 +0x07,0xb1,0x5d,0xef,0x60,0x26,0xb1,0xa5,0xe5,0x61,0x54,0x0f,0xff,0xbf,0x04,0x0c,
51765 +0xe5,0x6a,0x20,0xe2,0x07,0xf1,0x21,0xef,0x60,0x12,0x91,0xb2,0xe5,0x61,0x54,0x0f,
51766 +0xff,0xbf,0x02,0x08,0x12,0x60,0xbd,0xef,0x60,0x02,0xd1,0xaf,0x22,0x71,0xc3,0xef,
51767 +0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x30,0x90,0x9e,0x64,0xe0,
51768 +0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x22,0x90,0x9e,0x63,0xe0,0x60,0x08,
51769 +0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x14,0xe5,0x62,0x54,0x0f,0xd3,0x94,0x04,0x40,
51770 +0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,
51771 +0x08,0xf0,0x7f,0x00,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x60,0xb4,0x01,
51772 +0x04,0x7f,0x01,0xd1,0xf6,0x53,0x61,0xf0,0x43,0x61,0x04,0x22,0xef,0x64,0x01,0x70,
51773 +0x2e,0x7d,0x78,0x7f,0x02,0x12,0x36,0x75,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0x90,
51774 +0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x91,0xe3,0xe4,0xff,0x91,0x97,
51775 +0x90,0x06,0x04,0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,
51776 +0x01,0x36,0x74,0x7b,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7b,0xff,0x12,0x36,0xe6,0x7d,
51777 +0x02,0x7f,0x03,0x12,0x36,0xe6,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,
51778 +0xe0,0x44,0x07,0xf0,0x12,0x62,0x4c,0xe5,0x60,0x20,0xe0,0x05,0xe4,0x90,0x9e,0x58,
51779 +0xf0,0x22,0x8b,0x14,0x8a,0x15,0x89,0x16,0x12,0x60,0xb1,0xab,0x14,0xaa,0x15,0xa9,
51780 +0x16,0x12,0x29,0xd9,0xf5,0x63,0x14,0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,
51781 +0x03,0x70,0x40,0x7f,0x01,0x80,0x3a,0xab,0x14,0xaa,0x15,0xa9,0x16,0x90,0x00,0x02,
51782 +0x12,0x42,0x20,0xfd,0xe4,0xff,0xd1,0x84,0x80,0x27,0xab,0x14,0xaa,0x15,0xa9,0x16,
51783 +0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x7f,0x01,0xd1,0x84,0x1f,0x80,0x13,0xab,0x14,
51784 +0xaa,0x15,0xa9,0x16,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x7f,0x02,0xd1,0x84,0xe4,
51785 +0xff,0xb1,0xbc,0x22,0xef,0x24,0xfe,0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x65,0x74,
51786 +0x01,0xf0,0x80,0x16,0xed,0x70,0x0a,0x90,0x9e,0x62,0xe0,0x90,0x9e,0x65,0xf0,0x80,
51787 +0x05,0x90,0x9e,0x65,0xed,0xf0,0x90,0x9e,0x65,0xe0,0x90,0x9e,0x56,0xf0,0x22,0x53,
51788 +0x61,0xf0,0x43,0x61,0x01,0x12,0x45,0x00,0x12,0x45,0x01,0x53,0x61,0xf0,0x43,0x61,
51789 +0x02,0x22,0x90,0x9e,0xaf,0xef,0xf0,0x12,0x74,0x53,0x90,0x9e,0xaf,0xe0,0x60,0x05,
51790 +0x90,0x05,0x22,0xe4,0xf0,0x53,0x61,0xf0,0x43,0x61,0x04,0x22,0x90,0x06,0x04,0xe0,
51791 +0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,0x60,0xb4,0x01,0x04,0xe4,0xff,0xd1,0xf6,0x53,
51792 +0x61,0xf0,0x43,0x61,0x0c,0x22,0x8f,0x27,0x12,0x45,0xb0,0xbf,0x01,0x22,0x90,0x9e,
51793 +0x7a,0xe0,0xff,0x7d,0x01,0x12,0x47,0x79,0xab,0x07,0xaa,0x06,0xad,0x03,0xac,0x02,
51794 +0xaf,0x27,0x12,0x60,0x2a,0xaf,0x03,0x12,0x5f,0xf7,0x90,0x04,0x1f,0x74,0x20,0xf0,
51795 +0x22,0x71,0xc3,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x58,
51796 +0xe5,0x64,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x4a,0xe5,0x62,
51797 +0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x39,0xe5,
51798 +0x64,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x2c,0xe5,0x64,0x30,0xe4,
51799 +0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x1f,0x90,0x9e,0x58,0xe0,0x60,0x08,0x90,
51800 +0x01,0xb9,0x74,0x20,0xf0,0x80,0x11,0x90,0x9e,0x5e,0xe0,0x60,0x08,0x90,0x01,0xb9,
51801 +0x74,0x80,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,0x7f,0x00,
51802 +0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,
51803 +0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,
51804 +0xc4,0x74,0x91,0xf0,0x74,0x57,0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,
51805 +0x90,0x00,0x55,0xe0,0x5f,0xf5,0x3d,0x90,0x00,0x52,0xe0,0xff,0x90,0x00,0x56,0xe0,
51806 +0x5f,0xf5,0x3e,0xe5,0x3d,0x30,0xe4,0x06,0x90,0x00,0x55,0x74,0x10,0xf0,0xe5,0x3d,
51807 +0x30,0xe5,0x06,0x90,0x00,0x55,0x74,0x20,0xf0,0xe5,0x3d,0x30,0xe6,0x1b,0x90,0x00,
51808 +0x55,0x74,0x40,0xf0,0x90,0x9e,0x42,0xe0,0x54,0x03,0xff,0xbf,0x03,0x0b,0x90,0x9e,
51809 +0x3f,0xe0,0x60,0x05,0x7f,0x01,0x12,0x49,0x1a,0xe5,0x3d,0x30,0xe7,0x15,0x90,0x00,
51810 +0x55,0x74,0x80,0xf0,0x90,0x9e,0x42,0xe0,0x54,0x03,0xff,0xbf,0x03,0x05,0x7f,0x02,
51811 +0x12,0x49,0x1a,0xe5,0x3e,0x30,0xe0,0x06,0x90,0x00,0x56,0x74,0x01,0xf0,0xe5,0x3e,
51812 +0x30,0xe1,0x06,0x90,0x00,0x56,0x74,0x02,0xf0,0xe5,0x3e,0x30,0xe2,0x06,0x90,0x00,
51813 +0x56,0x74,0x04,0xf0,0xe5,0x3e,0x30,0xe3,0x06,0x90,0x00,0x56,0x74,0x08,0xf0,0x90,
51814 +0x01,0xc4,0x74,0x91,0xf0,0x74,0x57,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,
51815 +0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,
51816 +0xf0,0xd0,0xe0,0x32,0x90,0x01,0xcc,0xe0,0x54,0x0f,0x90,0x9e,0x19,0xf0,0x90,0x9e,
51817 +0x19,0xe0,0xfd,0x70,0x02,0x21,0xb5,0x90,0x9e,0xae,0xe0,0xff,0x74,0x01,0x7e,0x00,
51818 +0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,
51819 +0x02,0x21,0xae,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd0,0x12,0x43,0x5f,
51820 +0xe0,0x90,0x9e,0x1a,0xf0,0x75,0x23,0x01,0x75,0x24,0x9e,0x75,0x25,0x1a,0x75,0x26,
51821 +0x01,0x7b,0x01,0x7a,0x9e,0x79,0x1b,0x12,0x45,0x09,0x90,0x9e,0x1b,0xe0,0xff,0xc4,
51822 +0x13,0x13,0x13,0x54,0x01,0x90,0x9e,0xae,0x30,0xe0,0x59,0xe0,0x75,0xf0,0x02,0x90,
51823 +0x00,0x88,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1c,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,
51824 +0x02,0x90,0x00,0x89,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1d,0xf0,0x90,0x9e,0xae,0xe0,
51825 +0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1e,0xf0,0x90,0x9e,
51826 +0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1f,0xf0,
51827 +0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,
51828 +0x20,0xf0,0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,0x90,
51829 +0x9e,0x1c,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x5f,
51830 +0xe0,0x90,0x9e,0x1d,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,
51831 +0x43,0x5f,0xe0,0x90,0x9e,0x1e,0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,0x7a,0x9e,0x79,
51832 +0x1c,0x31,0xb6,0x90,0x9e,0x19,0xe0,0xff,0x90,0x9e,0xae,0xe0,0xfe,0x74,0x01,0xa8,
51833 +0x06,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,0x90,0x9e,0x19,0xf0,0x90,0x9e,
51834 +0xae,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x90,0x01,
51835 +0xcc,0xf0,0x90,0x9e,0xae,0xe0,0x04,0xf0,0xe0,0x54,0x03,0xf0,0x01,0x7e,0x90,0x01,
51836 +0xc6,0xe0,0x44,0x02,0xf0,0x22,0x90,0x9e,0x21,0x12,0x43,0x8b,0xef,0x12,0x43,0x94,
51837 +0x59,0xfc,0x01,0x59,0xf4,0x02,0x5a,0x20,0x03,0x5a,0x29,0x05,0x5a,0x32,0x06,0x5a,
51838 +0x7e,0x07,0x5a,0x3a,0x09,0x5a,0x43,0x0b,0x5a,0x4c,0x0c,0x5a,0x55,0x0d,0x5a,0x5e,
51839 +0x0e,0x5a,0x67,0x1b,0x5a,0x6f,0x1c,0x5a,0x05,0x2d,0x5a,0x0e,0x2e,0x5a,0x17,0x3b,
51840 +0x00,0x00,0x5a,0x77,0x90,0x9e,0x21,0x12,0x43,0x6b,0xe1,0xe9,0x90,0x9e,0x21,0x12,
51841 +0x43,0x6b,0x02,0x71,0xd0,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x72,0x0b,0x90,0x9e,
51842 +0x21,0x12,0x43,0x6b,0x02,0x72,0x53,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x72,0x8c,
51843 +0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x72,0xb6,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,
51844 +0x70,0x4a,0x90,0x9e,0x21,0x12,0x43,0x6b,0x80,0x45,0x90,0x9e,0x21,0x12,0x43,0x6b,
51845 +0x02,0x72,0xfe,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x70,0xa2,0x90,0x9e,0x21,0x12,
51846 +0x43,0x6b,0x02,0x49,0xc2,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x7b,0x29,0x90,0x9e,
51847 +0x21,0x12,0x43,0x6b,0x02,0x4a,0xfc,0x90,0x9e,0x21,0x12,0x43,0x6b,0xe1,0xef,0x90,
51848 +0x9e,0x21,0x12,0x43,0x6b,0xe1,0xd1,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x90,
51849 +0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,
51850 +0xfd,0xaf,0x06,0x90,0x9e,0x24,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x8b,0x90,
51851 +0x9e,0x26,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,0x54,0x0f,
51852 +0x90,0x9e,0x29,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,0x13,0x54,
51853 +0x03,0x90,0x9e,0x2a,0xf0,0x90,0x9e,0x24,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,0x46,
51854 +0x12,0x43,0x5f,0xad,0x82,0xac,0x83,0x90,0x9e,0x2b,0xec,0xf0,0xa3,0xed,0xf0,0xef,
51855 +0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,0x12,
51856 +0x43,0x8b,0x90,0x9e,0x26,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0x0f,
51857 +0xff,0x90,0x9e,0x2d,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x26,0x12,0x43,
51858 +0x6b,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x2d,0x12,0x43,0x6b,0x90,0x00,
51859 +0x01,0xef,0x12,0x42,0x5f,0x90,0x9e,0x26,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,
51860 +0x20,0xff,0x90,0x9e,0x2b,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,
51861 +0x12,0x29,0xd9,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x29,0xe0,0xfe,0x90,0x9e,
51862 +0x24,0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,0x9e,
51863 +0x25,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,0x75,
51864 +0xf0,0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x2a,0xe0,
51865 +0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,0x14,0xef,
51866 +0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x16,0x8f,0x17,0xe5,
51867 +0x14,0x75,0xf0,0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x18,0x01,0xf5,
51868 +0x19,0x89,0x1a,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x46,0x12,0x43,0x5f,0xaf,0x82,
51869 +0x85,0x83,0x1b,0x8f,0x1c,0xe5,0x14,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,
51870 +0x35,0xf0,0x75,0x1d,0x01,0xf5,0x1e,0x89,0x1f,0x74,0x82,0x25,0x14,0xf5,0x82,0xe4,
51871 +0x34,0x95,0xf5,0x83,0xe0,0x12,0x43,0x94,0x5c,0x0d,0x00,0x5c,0x22,0x01,0x5c,0x37,
51872 +0x02,0x5c,0x4c,0x03,0x5c,0x75,0x04,0x5c,0x8a,0x05,0x5c,0x9f,0x06,0x5c,0xc5,0x0c,
51873 +0x5c,0xf2,0x0d,0x5d,0x1f,0x0e,0x5d,0x4c,0x0f,0x00,0x00,0x5d,0x80,0xe5,0x14,0x25,
51874 +0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,
51875 +0x80,0x3c,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,
51876 +0xf0,0xf0,0xa3,0x74,0x10,0x80,0x27,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
51877 +0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x14,0x25,0xe0,
51878 +0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,
51879 +0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,0xa3,
51880 +0x74,0x8f,0xf0,0xa1,0x80,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
51881 +0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x14,0x25,0xe0,0x24,0xc6,
51882 +0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,
51883 +0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0x74,
51884 +0x0d,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,
51885 +0xf0,0xa3,0xf0,0xa1,0x80,0x90,0x04,0x47,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,
51886 +0x42,0x4d,0x90,0x04,0x46,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,
51887 +0x42,0x5f,0x90,0x04,0x45,0xe0,0x85,0x17,0x82,0x85,0x16,0x83,0xf0,0x90,0x04,0x44,
51888 +0xa1,0x77,0x90,0x04,0x4b,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x4d,0x90,
51889 +0x04,0x4a,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,
51890 +0x04,0x49,0xe0,0x85,0x17,0x82,0x85,0x16,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,
51891 +0x04,0x4f,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x4d,0x90,0x04,0x4e,0xe0,
51892 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x4d,0xe0,
51893 +0x85,0x17,0x82,0x85,0x16,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,
51894 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x18,0xaa,
51895 +0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x17,0x82,
51896 +0x85,0x16,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x17,0x82,0x85,0x16,0x83,0xa3,0xf0,
51897 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,
51898 +0xab,0x1d,0xaa,0x1e,0xa9,0x1f,0x12,0x29,0xd9,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
51899 +0x12,0x42,0x4d,0xab,0x18,0xe5,0x1a,0x24,0x01,0xf9,0xe4,0x35,0x19,0xfa,0xc0,0x03,
51900 +0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,0xab,0x1d,0xaa,0x1e,0xa9,0x1f,0x90,0x00,
51901 +0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,0x17,
51902 +0x82,0x85,0x16,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x1c,0x82,0x85,0x1b,0x83,
51903 +0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x17,0x82,0x85,0x16,0x83,0xa3,
51904 +0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x1c,0x82,0x85,0x1b,0x83,0xa3,0xe0,0xfe,0xef,
51905 +0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,
51906 +0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x15,0x0b,0x74,0x01,0x7e,
51907 +0x00,0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x14,
51908 +0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,
51909 +0x5f,0x4e,0x60,0x06,0xe5,0x15,0x24,0x10,0x80,0x5d,0x15,0x15,0xe5,0x15,0xc3,0x94,
51910 +0x00,0x50,0xca,0x80,0x56,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
51911 +0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x15,0x0f,0x74,0x01,0x7e,0x00,
51912 +0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x14,0x25,
51913 +0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,
51914 +0x4e,0x60,0x08,0x90,0x9e,0x30,0xe5,0x15,0xf0,0x80,0x10,0x15,0x15,0xe5,0x15,0xc3,
51915 +0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x30,0xf0,0xe5,0x14,0x25,0xe0,0x24,
51916 +0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0xe4,
51917 +0xf5,0x15,0x74,0x01,0x7e,0x00,0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
51918 +0xd8,0xf9,0xff,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
51919 +0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x31,0xe5,0x15,0xf0,0x80,
51920 +0x5b,0x05,0x15,0xe5,0x15,0xb4,0x10,0xca,0x80,0x52,0xe5,0x14,0x25,0xe0,0x24,0x02,
51921 +0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x39,0xe4,0xf5,
51922 +0x15,0x74,0x01,0x7e,0x00,0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
51923 +0xf9,0xff,0xe5,0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,
51924 +0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x15,0x24,0x10,0x80,0x0a,0x05,0x15,
51925 +0xe5,0x15,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x31,0xf0,0x90,0x9e,0x30,0xe0,
51926 +0xff,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x48,0x12,0x43,0x5f,0xef,0xf0,0x90,0x9e,
51927 +0x31,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x49,0x12,0x43,0x5f,0xee,0xf0,
51928 +0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x06,
51929 +0x90,0x9e,0x30,0x12,0x62,0x94,0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x04,0xf5,
51930 +0x83,0xe0,0xff,0x90,0x9e,0x31,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x03,0x12,0x62,0x94,
51931 +0x90,0x9e,0x30,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,
51932 +0x22,0xef,0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,
51933 +0x94,0x03,0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,
51934 +0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,0xc4,0x13,
51935 +0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x41,0x93,0x12,0x29,0xd9,0xf5,0x60,0x22,0x12,
51936 +0x29,0xd9,0x90,0x95,0x01,0xf0,0x22,0xad,0x07,0x74,0x11,0x2d,0xf5,0x82,0xe4,0x34,
51937 +0xfc,0xf5,0x83,0xe0,0x44,0x01,0xf0,0x90,0x04,0x80,0xe0,0x54,0x0f,0xfc,0x74,0x14,
51938 +0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xc0,0x4c,0xfd,0x74,0x14,0x2f,
51939 +0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xed,0xf0,0x22,0xef,0x60,0x0f,0x74,0x21,0x2d,
51940 +0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x22,0x74,0x21,0x2d,0xf5,
51941 +0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x22,0xe4,0xf5,0x60,0xf5,0x64,
51942 +0xf5,0x63,0x75,0x62,0x0c,0x75,0x61,0x0c,0x90,0x9e,0x66,0xf0,0x90,0x9e,0x64,0xf0,
51943 +0x90,0x9e,0x63,0xf0,0x90,0x9e,0x65,0x04,0xf0,0x90,0x9e,0x56,0xf0,0xe4,0x90,0x9e,
51944 +0x67,0xf0,0x90,0x9e,0x58,0xf0,0x90,0x9e,0x61,0x74,0x07,0xf0,0xe4,0x90,0x9e,0x57,
51945 +0xf0,0x90,0x9e,0x5f,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x5c,0x74,0x0a,0xf0,0xa3,
51946 +0x74,0x05,0xf0,0x90,0x9e,0x5b,0x74,0x14,0xf0,0x90,0x9e,0x62,0x74,0x05,0xf0,0xe4,
51947 +0x90,0x9e,0x5a,0xf0,0x90,0x9e,0x55,0xf0,0x90,0x9e,0x7f,0xf0,0x90,0x9e,0x5e,0xf0,
51948 +0x22,0xe4,0x90,0x9e,0x67,0xf0,0x90,0x9e,0x57,0xf0,0xf5,0x64,0x22,0x7f,0x00,0x22,
51949 +0xe5,0x62,0x30,0xe6,0x19,0xe5,0x62,0x54,0x0f,0xff,0x90,0x9e,0x54,0xe0,0xfe,0x4f,
51950 +0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x54,0xf0,0x53,0x62,0xbf,0x22,0xe5,
51951 +0x60,0x64,0x01,0x70,0x68,0xe5,0x63,0x60,0x64,0xe5,0x63,0x64,0x02,0x60,0x06,0xe5,
51952 +0x63,0x64,0x05,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x56,0xf0,0x90,0x06,0xaa,
51953 +0xe0,0x90,0x9e,0x65,0xf0,0x90,0x9e,0x56,0xe0,0x70,0x07,0x90,0x9e,0x65,0xe0,0xff,
51954 +0x80,0x05,0x90,0x9e,0x56,0xe0,0xff,0x90,0x9e,0x56,0xef,0xf0,0x90,0x9e,0x58,0xe0,
51955 +0x60,0x03,0xe0,0x14,0xf0,0xe4,0x90,0x9e,0x57,0xf0,0x90,0x05,0x58,0x74,0x03,0xf0,
51956 +0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x53,0x64,0xfd,0x53,0x64,
51957 +0xef,0xe5,0x63,0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,0x45,0x53,0x22,0xe4,0xfb,
51958 +0x90,0x9e,0x9c,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe5,0x63,0x60,0x6a,0xe5,0x60,
51959 +0x64,0x01,0x70,0x64,0xe5,0x63,0x14,0x60,0x2b,0x24,0xfd,0x60,0x27,0x24,0x02,0x24,
51960 +0xfb,0x50,0x02,0x80,0x21,0x90,0x9e,0x56,0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,
51961 +0x60,0x14,0x90,0x9e,0x56,0xe0,0x70,0x08,0x90,0x9e,0x65,0xe0,0x90,0x9e,0x56,0xf0,
51962 +0x7b,0x01,0x80,0x02,0x7b,0x01,0xeb,0x60,0x2f,0x43,0x64,0x10,0xe4,0x90,0x9e,0x85,
51963 +0xf0,0x90,0x9e,0x57,0xe0,0x75,0xf0,0x03,0xa4,0xff,0x90,0x9e,0x61,0xe0,0x2f,0x12,
51964 +0x44,0x53,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x61,0x54,0x0f,0xc3,0x94,0x04,0x50,
51965 +0x07,0x7d,0x01,0x7f,0x04,0x12,0x54,0xe7,0x22,0xe4,0x90,0x9e,0x15,0xf0,0xe5,0x63,
51966 +0x60,0x79,0x90,0x9e,0x67,0xe0,0x60,0x0d,0xe4,0xf0,0x53,0x64,0xfd,0xe5,0x64,0x54,
51967 +0x07,0x70,0x68,0x80,0x63,0x90,0x9e,0x57,0xe0,0x04,0xf0,0x53,0x64,0xef,0x90,0x9e,
51968 +0x15,0xe0,0xf9,0xff,0x7e,0x00,0x24,0x01,0xfd,0xee,0x33,0xfc,0x90,0x9e,0x57,0xe0,
51969 +0xb5,0x05,0x06,0xe4,0xb5,0x04,0x02,0x80,0x12,0xef,0x24,0x02,0xff,0xe4,0x3e,0xfe,
51970 +0x90,0x9e,0x57,0xe0,0xb5,0x07,0x0a,0xe4,0xb5,0x06,0x06,0x90,0x05,0x58,0xe0,0x04,
51971 +0xf0,0xe9,0xff,0x90,0x9e,0x5c,0xe0,0x2f,0xff,0xe4,0x33,0xfe,0x90,0x9e,0x57,0xe0,
51972 +0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x40,0x0d,0xe5,0x60,0xb4,0x01,0x0b,
51973 +0xa3,0xe0,0x70,0x07,0xe0,0x04,0xf0,0x22,0x12,0x44,0xcb,0x22,0x90,0x9e,0x5f,0xe0,
51974 +0xa3,0xe0,0x90,0x05,0x58,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
51975 +0x93,0x12,0x43,0x8b,0x90,0x9e,0x96,0xe0,0x54,0xf0,0x44,0x06,0xff,0xf0,0xed,0x54,
51976 +0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9e,0x93,0x12,0x43,0x6b,
51977 +0x90,0x9e,0x90,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x96,0x12,0x53,0xf1,0xd0,
51978 +0xd0,0x92,0xaf,0x22,0xe0,0xfd,0x74,0x26,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
51979 +0x83,0xed,0xf0,0xaf,0x14,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,
51980 +0x50,0x0e,0x74,0x84,0x2f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,
51981 +0x74,0xa6,0x2f,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x68,0xef,
51982 +0xf0,0x24,0xa6,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x69,0xf0,0x7b,
51983 +0x01,0x7a,0x9e,0x79,0x68,0x7d,0x02,0x51,0x57,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x0a,
51984 +0x8d,0x0b,0xe5,0x0b,0x54,0x1f,0xf5,0x10,0x74,0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,
51985 +0xf5,0x83,0xe0,0xf5,0x0e,0x90,0x04,0xfd,0xe0,0xb4,0x01,0x05,0x75,0x11,0x03,0x80,
51986 +0x03,0x75,0x11,0x01,0xeb,0xc3,0x95,0x11,0x40,0x04,0xaf,0x0a,0x80,0x33,0xe5,0x0e,
51987 +0x25,0x0d,0xf5,0x0f,0xe5,0x10,0x90,0x41,0xd6,0x93,0xff,0xe5,0x0f,0xd3,0x9f,0x74,
51988 +0x01,0x40,0x11,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xad,0x0b,
51989 +0xaf,0x0a,0x41,0xa5,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe5,0x0f,0xf0,
51990 +0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,
51991 +0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xe0,0x54,0x1f,0xf5,0x12,0xd3,0x9f,
51992 +0x40,0x02,0x8f,0x12,0xe5,0x12,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,
51993 +0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x12,0x25,0xe0,0x24,0x66,0xf5,0x82,
51994 +0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,
51995 +0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,
51996 +0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x12,0x51,0xa5,0xaf,0x12,0x22,0xac,0x07,0xec,
51997 +0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
51998 +0x80,0x0b,0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,
51999 +0x1f,0xe5,0x1f,0x54,0x1f,0xff,0x90,0x9e,0x25,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,
52000 +0x49,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x27,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,
52001 +0x12,0x43,0x5f,0xe0,0xfe,0x90,0x9e,0x28,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
52002 +0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x29,0xcb,0xf0,0xa3,0xeb,
52003 +0xf0,0xec,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,
52004 +0xe0,0x90,0x9e,0x2b,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,
52005 +0x28,0xe0,0x90,0x9e,0x25,0xf0,0xf5,0x1f,0xed,0x70,0x02,0xa1,0x13,0x90,0x9e,0x26,
52006 +0xed,0xf0,0xe5,0x1f,0x30,0xe6,0x0a,0x90,0x9e,0x25,0xe0,0xf5,0x1f,0xa3,0xe0,0x14,
52007 +0xf0,0x90,0x9e,0x26,0xe0,0x70,0x02,0xa1,0x13,0x90,0x9e,0x25,0xe0,0xff,0xd3,0x94,
52008 +0x00,0x50,0x02,0xa1,0x13,0xe4,0x90,0x9e,0x24,0xf0,0xef,0x14,0x90,0x9e,0x23,0xf0,
52009 +0x90,0x9e,0x27,0xe0,0xfd,0x90,0x9e,0x23,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,
52010 +0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
52011 +0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x2b,0xe0,0x5e,0xfe,0xa3,0xe0,
52012 +0x5f,0x4e,0x70,0x27,0x90,0x9e,0x23,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,
52013 +0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
52014 +0x9e,0x29,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x23,0xe0,0xf5,
52015 +0x1f,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x26,0xe0,0xff,0x90,0x9e,0x24,0xe0,0x6f,0x60,
52016 +0x08,0x90,0x9e,0x23,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x26,0xe0,0xff,0x90,0x9e,
52017 +0x24,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x23,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x27,
52018 +0xe0,0xf5,0x1f,0xe5,0x1f,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
52019 +0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x1f,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
52020 +0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
52021 +0x13,0xff,0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
52022 +0xa3,0xef,0xf0,0xaf,0x04,0xad,0x1f,0x51,0xa5,0xaf,0x1f,0x22,0xad,0x07,0xed,0xc3,
52023 +0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,
52024 +0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x1f,
52025 +0xe5,0x1f,0x54,0x1f,0xfc,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,
52026 +0xff,0x90,0x9e,0x23,0xf0,0xed,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,
52027 +0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x24,0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,0xe0,
52028 +0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x26,
52029 +0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,
52030 +0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,0xfb,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
52031 +0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,0xeb,0xf0,0xec,0xc3,0x9f,0x40,0x02,0xc1,0x7a,
52032 +0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,0x9e,
52033 +0x23,0xe0,0xff,0xeb,0xd3,0x9f,0x40,0x02,0xc1,0xab,0xeb,0xc3,0x94,0x10,0x40,0x21,
52034 +0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,
52035 +0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x24,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,
52036 +0x23,0xeb,0xc3,0x94,0x10,0x50,0x40,0x74,0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,0x05,
52037 +0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x26,0xe0,0x5e,0xfe,0xa3,0xe0,
52038 +0x5f,0x4e,0x60,0x23,0xbb,0x11,0x09,0x90,0x9e,0x25,0xe0,0x30,0xe7,0x02,0x7b,0x17,
52039 +0xeb,0x64,0x13,0x60,0x03,0xbb,0x12,0x09,0x90,0x9e,0x24,0xe0,0x30,0xe0,0x02,0x7b,
52040 +0x18,0xac,0x03,0x8c,0x1f,0x80,0x34,0x0b,0x80,0x84,0x90,0x9e,0x23,0xe0,0xfb,0x6c,
52041 +0x70,0x69,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,
52042 +0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,0xe0,0xb4,0x01,0x0c,0xe5,0x1f,0x20,0xe6,
52043 +0x07,0xec,0x44,0x40,0xf5,0x1f,0x80,0x03,0xaf,0x1f,0x22,0xec,0x25,0xe0,0x24,0x9e,
52044 +0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,
52045 +0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,
52046 +0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
52047 +0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,
52048 +0x90,0x9e,0x23,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,
52049 +0xf0,0xac,0x07,0x8f,0x1f,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,
52050 +0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
52051 +0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
52052 +0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
52053 +0xa3,0xef,0xf0,0xaf,0x1f,0x22,0x74,0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,
52054 +0xe4,0xf0,0xaf,0x05,0xe5,0x1f,0x44,0x80,0xfd,0x51,0xa5,0xe5,0x1f,0x44,0x80,0xff,
52055 +0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,0xc4,0x54,0xf0,0xfd,
52056 +0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x0f,
52057 +0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
52058 +0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x4d,0xf0,
52059 +0x22,0xe4,0xf5,0x14,0xe5,0x14,0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,
52060 +0x95,0x01,0xe0,0xff,0x90,0x9a,0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,
52061 +0xe5,0x14,0x90,0x96,0x4b,0x12,0x43,0x5f,0xe0,0x64,0x01,0x60,0x03,0x02,0x6e,0x6a,
52062 +0xe5,0x14,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,
52063 +0xe0,0xd3,0x94,0x00,0xee,0x94,0x00,0x50,0x03,0x02,0x6e,0x6a,0xe5,0x14,0x94,0x20,
52064 +0x40,0x09,0x90,0x9a,0xc5,0xe0,0x60,0x03,0x02,0x6e,0x76,0xe5,0x14,0x75,0xf0,0x0a,
52065 +0xa4,0x24,0x00,0xf9,0x74,0x90,0x35,0xf0,0x75,0x18,0x01,0xf5,0x19,0x89,0x1a,0xe5,
52066 +0x14,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,
52067 +0x90,0x9e,0x1b,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x14,0x25,0xe0,0x24,0xc4,0xf5,0x82,
52068 +0xe4,0x34,0x98,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x1d,0xcf,0xf0,0xa3,0xef,
52069 +0xf0,0xe5,0x14,0xc3,0x94,0x20,0x50,0x14,0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,
52070 +0x04,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x19,0xf0,0x80,0x12,0x74,0xa6,0x25,0x14,
52071 +0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x19,0xf0,0x90,0x9e,
52072 +0x19,0xe0,0xfe,0x54,0x1f,0xa3,0xf0,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x48,0x12,
52073 +0x43,0x5f,0xe0,0x90,0x9e,0x20,0xf0,0x74,0xe6,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,
52074 +0xf5,0x83,0xe0,0xc3,0x94,0x05,0x40,0x02,0x41,0x9f,0x90,0x9e,0x20,0xe0,0xff,0x90,
52075 +0x9e,0x1a,0xe0,0x9f,0x40,0x13,0x90,0x9e,0x20,0xe0,0x90,0x9e,0x1a,0xf0,0xee,0x54,
52076 +0x40,0xfe,0x90,0x9e,0x19,0xf0,0xef,0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x54,0x05,0x64,
52077 +0x01,0x70,0x29,0x90,0x9e,0x1a,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,
52078 +0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,
52079 +0xda,0x80,0x30,0x90,0x9e,0x1a,0xe0,0x90,0x40,0xf6,0x80,0x27,0x90,0x9e,0x1a,0xe0,
52080 +0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
52081 +0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x41,0x12,0x80,0x07,0x90,0x9e,0x1a,0xe0,
52082 +0x90,0x41,0x2e,0x93,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1f,0xe0,0x75,0xf0,0x06,0xa4,
52083 +0x24,0x50,0xf9,0x74,0x40,0x35,0xf0,0xfa,0x7b,0xff,0x8b,0x15,0xf5,0x16,0x89,0x17,
52084 +0xe5,0x14,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xf5,0x1b,
52085 +0xa3,0xe0,0xf5,0x1c,0x12,0x29,0xd9,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,
52086 +0x12,0x42,0x97,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,
52087 +0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x01,0x12,0x42,0x20,0xff,
52088 +0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,
52089 +0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,
52090 +0xaa,0x16,0xa9,0x17,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x18,0xaa,
52091 +0x19,0xa9,0x1a,0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,
52092 +0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,
52093 +0x00,0x03,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,
52094 +0x06,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,
52095 +0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x04,0x12,0x42,0x20,
52096 +0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,
52097 +0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,
52098 +0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,
52099 +0x1b,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x29,0xf2,0xd3,0xe5,0x1c,0x9f,0xe5,0x1b,0x9e,
52100 +0x40,0x0c,0xe5,0x1c,0x9f,0xf5,0x1c,0xe5,0x1b,0x9e,0xf5,0x1b,0x80,0x05,0xe4,0xf5,
52101 +0x1b,0xf5,0x1c,0xe5,0x14,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
52102 +0xe5,0x1b,0xf0,0xa3,0xe5,0x1c,0xf0,0x90,0x9e,0x19,0xe0,0x25,0xe0,0x24,0x66,0xf5,
52103 +0x82,0xe4,0x34,0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,0x95,0x1b,
52104 +0x50,0x07,0xaf,0x14,0x12,0x65,0x5c,0xa1,0x31,0x90,0x9e,0x19,0xe0,0x25,0xe0,0x24,
52105 +0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,
52106 +0x95,0x1b,0x50,0x02,0xa1,0x31,0x7d,0x01,0xaf,0x14,0x12,0x63,0xbd,0xa1,0x31,0x74,
52107 +0xe6,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,
52108 +0x81,0x3a,0x90,0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0xc3,0x94,
52109 +0x19,0x40,0x3d,0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x1a,0xe0,0xc3,0x94,0x11,
52110 +0x40,0x2e,0x80,0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x1a,0xe0,
52111 +0xc3,0x94,0x0a,0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x1a,0xe0,0xc3,0x94,
52112 +0x03,0x40,0x0d,0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,
52113 +0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1e,0x74,0x44,
52114 +0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,
52115 +0x61,0xe7,0x90,0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0x61,0xe7,0x74,0x85,0x25,0x14,
52116 +0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,
52117 +0xe4,0x33,0xfe,0x74,0x41,0x25,0x14,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,
52118 +0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,
52119 +0x33,0xfe,0x74,0x44,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,
52120 +0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x14,0xf5,0x82,0xe4,
52121 +0x34,0x9d,0xf5,0x83,0xe0,0xff,0x90,0x9e,0x1a,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,
52122 +0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,
52123 +0x1e,0x05,0x80,0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x1e,0x03,0x80,0x03,0x75,
52124 +0x1e,0x01,0x74,0x41,0x25,0x14,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,
52125 +0x85,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x14,0xf5,0x82,
52126 +0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,
52127 +0xf5,0x83,0xe0,0x04,0xf0,0x80,0x10,0xe4,0xf5,0x1e,0x74,0xe6,0x25,0x14,0xf5,0x82,
52128 +0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x1a,0xe0,0xff,0x74,0x26,0x25,0x14,
52129 +0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,
52130 +0x34,0x98,0xf5,0x83,0xe5,0x1e,0xf0,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x4c,0x12,
52131 +0x43,0x5f,0xe0,0xb4,0x01,0x10,0xe4,0xf5,0x1e,0x74,0xe6,0x25,0x14,0xf5,0x82,0xe4,
52132 +0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xad,0x1e,0xa1,0x2c,0xec,0x64,0x06,0x60,0x02,0xa1,
52133 +0x31,0xf5,0x1b,0xf5,0x1c,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x1b,0xe0,
52134 +0xfc,0xa3,0xe0,0xfd,0x12,0x29,0xf2,0x90,0x9e,0x21,0xee,0xf0,0xa3,0xef,0xf0,0x74,
52135 +0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1e,0xe4,0xf5,0x1d,
52136 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0x75,0xf0,0x02,0xe5,0x1d,0xa4,0xf5,0x82,0x85,0xf0,
52137 +0x83,0x12,0x42,0xc2,0xfd,0xac,0xf0,0xe5,0x1d,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,
52138 +0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xc3,0x90,0x9e,
52139 +0x22,0xe0,0x95,0x1c,0x90,0x9e,0x21,0xe0,0x95,0x1b,0x40,0x07,0x05,0x1d,0xe5,0x1d,
52140 +0xb4,0x05,0xbd,0xe5,0x1d,0xc3,0x13,0xf5,0x1d,0xe5,0x1e,0xb4,0x01,0x06,0xe5,0x1d,
52141 +0x70,0x46,0x80,0x13,0xe5,0x1e,0xb4,0x03,0x15,0xe5,0x1d,0x70,0x05,0x75,0x1e,0x03,
52142 +0x80,0x39,0xe5,0x1d,0xb4,0x01,0x05,0x75,0x1e,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x1e,
52143 +0xb4,0x05,0x28,0xe5,0x1d,0x70,0x05,0x75,0x1e,0x05,0x80,0x0d,0xe5,0x1d,0xb4,0x01,
52144 +0x05,0x75,0x1e,0x03,0x80,0x03,0x75,0x1e,0x01,0xd3,0x90,0x9e,0x1e,0xe0,0x94,0x03,
52145 +0x90,0x9e,0x1d,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1e,0xd3,0x90,0x9e,0x1e,0xe0,
52146 +0x94,0x03,0x90,0x9e,0x1d,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1e,0x74,0x84,0x25,
52147 +0x14,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe5,0x1e,0xf0,0xfd,0xaf,0x14,0x12,0x67,
52148 +0x61,0x74,0xe6,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,
52149 +0x74,0xe6,0x50,0x0e,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,
52150 +0x80,0x0b,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x1d,
52151 +0xe0,0xfe,0xa3,0xe0,0xff,0xc3,0x74,0xff,0x9f,0xfd,0x74,0xff,0x9e,0xfc,0xe5,0x14,
52152 +0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xd3,
52153 +0x9d,0xea,0x9c,0xe5,0x14,0x50,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,
52154 +0xf5,0x83,0xee,0x8f,0xf0,0x12,0x42,0x81,0x80,0x10,0x25,0xe0,0x24,0xc6,0xf5,0x82,
52155 +0xe4,0x34,0x9a,0xf5,0x83,0x74,0xff,0xf0,0xa3,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x44,
52156 +0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xff,0xc3,0x74,0xff,0x9f,
52157 +0xfd,0x74,0xff,0x9e,0xfc,0xe5,0x14,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,
52158 +0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xd3,0x9d,0xea,0x9c,0xe5,0x14,0x50,0x13,0x25,0xe0,
52159 +0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xee,0x8f,0xf0,0x12,0x42,0x81,0x80,
52160 +0x10,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xff,0xf0,0xa3,
52161 +0xf0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0xe4,0xf5,0xf0,0x12,0x42,0xfa,0xab,0x18,0xaa,
52162 +0x19,0xa9,0x1a,0x90,0x00,0x02,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x04,0xe4,
52163 +0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x06,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,
52164 +0x08,0xe4,0xf5,0xf0,0x12,0x43,0x19,0xe5,0x14,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
52165 +0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x14,0x25,0xe0,0x24,0xc4,0xf5,0x82,
52166 +0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x44,0xf5,
52167 +0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x05,0x14,0xe5,0x14,0xc3,0x94,
52168 +0x40,0x50,0x03,0x02,0x67,0xa4,0x22,0x90,0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,
52169 +0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,0xf0,0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,
52170 +0x04,0xf5,0x83,0xe4,0xf0,0x0d,0xbd,0x10,0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,
52171 +0x01,0x04,0xf0,0xe4,0xfd,0x75,0xf0,0x0a,0xed,0x90,0x90,0x00,0x12,0x43,0x5f,0xe4,
52172 +0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x02,0x12,0x43,0x5f,0xe4,0xf0,0xa3,
52173 +0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x04,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,
52174 +0xf0,0x0a,0xed,0x90,0x90,0x06,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,
52175 +0xed,0x90,0x90,0x08,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,
52176 +0xe4,0x34,0x9d,0xf5,0x83,0x74,0x13,0xf0,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,
52177 +0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,
52178 +0xed,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
52179 +0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
52180 +0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
52181 +0xed,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
52182 +0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
52183 +0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
52184 +0x74,0x86,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,
52185 +0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,
52186 +0xf5,0x83,0xe4,0xf0,0x90,0x41,0xc4,0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,
52187 +0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,
52188 +0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,
52189 +0xf0,0x09,0xed,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,
52190 +0x90,0x96,0x4a,0x12,0x43,0x5f,0x74,0x01,0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,
52191 +0x95,0xf5,0x83,0x74,0x0c,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x5f,
52192 +0x74,0xff,0xf0,0xa3,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x44,0x12,0x43,0x5f,0xe4,
52193 +0xf0,0xa3,0x74,0x0f,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0x74,
52194 +0x13,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,
52195 +0x94,0x20,0x50,0x0f,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,
52196 +0xf0,0x80,0x0d,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,
52197 +0x0d,0xed,0x64,0x40,0x60,0x03,0x02,0x6e,0xa5,0x22,0x12,0x29,0xd9,0xf5,0x14,0xc3,
52198 +0x94,0x40,0x50,0x15,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x74,0x44,0x25,0x14,0xf5,
52199 +0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,0xf0,0x22,0xe5,0x14,0xb4,0x40,0x0a,0x90,0x00,
52200 +0x02,0x12,0x42,0x20,0x90,0x96,0x42,0xf0,0x22,0x90,0x9e,0x30,0x12,0x43,0x8b,0x90,
52201 +0x9e,0x33,0xe0,0x54,0xf0,0x44,0x02,0xf0,0x54,0x0f,0x44,0xc0,0xf0,0x90,0x9e,0x30,
52202 +0x12,0x43,0x6b,0x90,0x9e,0x90,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x33,0x02,
52203 +0x53,0xf1,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x90,0x00,0x01,0x12,0x42,0x20,0xfc,
52204 +0xed,0xc3,0x94,0x40,0x40,0x02,0xe4,0xfd,0xec,0xc3,0x94,0x40,0x40,0x02,0xe4,0xfc,
52205 +0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,
52206 +0xfb,0xea,0x90,0x9e,0x24,0xf0,0xeb,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,
52207 +0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xfb,0xea,0x90,0x9e,0x26,0xf0,0xeb,
52208 +0xa3,0xf0,0xa3,0xed,0xf0,0xa3,0x74,0xff,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
52209 +0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xfb,0xea,0x90,0x9e,0x2a,0xf0,0xeb,
52210 +0xa3,0xf0,0xec,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfa,
52211 +0xa3,0xe0,0xfb,0xea,0x90,0x9e,0x2c,0xf0,0xeb,0xa3,0xf0,0xa3,0xec,0xf0,0xa3,0x74,
52212 +0xff,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,
52213 +0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,
52214 +0xa3,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,
52215 +0xa3,0xf0,0xec,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,
52216 +0xa3,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x24,0x01,0x79,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
52217 +0xd0,0x90,0x9e,0xa4,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,
52218 +0xa4,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,0xa7,
52219 +0xe0,0x94,0xe8,0x90,0x9e,0xa6,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,
52220 +0x10,0xf0,0x7f,0x00,0x80,0x15,0x90,0x9e,0xa6,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,
52221 +0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,
52222 +0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x24,0x12,0x2a,0x8b,0x00,0x00,0x00,
52223 +0x00,0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x66,0xf0,0x90,0x00,0x03,0x12,0x42,
52224 +0x20,0x90,0x9e,0x55,0xf0,0x12,0x56,0x22,0x90,0x01,0xe5,0xe5,0x63,0xf0,0x90,0x9e,
52225 +0x66,0xe0,0x90,0x01,0xe6,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x00,0x02,0x12,0x42,
52226 +0x20,0xff,0x30,0xe0,0x25,0x12,0x29,0xd9,0x90,0x9e,0x5c,0xf0,0x90,0x00,0x01,0x12,
52227 +0x42,0x20,0x90,0x9e,0x5d,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x5b,0xf0,0x90,
52228 +0x00,0x03,0x12,0x42,0x20,0x90,0x9e,0x62,0xf0,0x22,0x90,0x9e,0x5c,0x74,0x0a,0xf0,
52229 +0x90,0x9e,0x5d,0x74,0x05,0xf0,0x90,0x9e,0x5b,0x74,0x14,0xf0,0x90,0x9e,0x62,0x74,
52230 +0x05,0xf0,0x22,0x12,0x29,0xd9,0x30,0xe0,0x19,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x61,
52231 +0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x5f,0xe4,0xf0,0xa3,0xef,0xf0,
52232 +0x80,0x0f,0x90,0x9e,0x61,0x74,0x07,0xf0,0x90,0x9e,0x5f,0xe4,0xf0,0xa3,0x74,0x03,
52233 +0xf0,0x90,0x9e,0x5f,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0x22,0x90,0x9e,0x24,0x12,
52234 +0x2a,0x8b,0x00,0x00,0x00,0x00,0x12,0x29,0xd9,0x60,0x0d,0x90,0x9e,0x5e,0xf0,0xe4,
52235 +0xfd,0x7f,0x04,0x12,0x54,0xe7,0x80,0x05,0xe4,0x90,0x9e,0x5e,0xf0,0x90,0x9e,0x5e,
52236 +0xe0,0x90,0x01,0xe7,0xf0,0x22,0x90,0x02,0x09,0xe0,0xfd,0x12,0x29,0xd9,0xfe,0xaf,
52237 +0x05,0xed,0x2e,0x90,0x9e,0x78,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,
52238 +0x90,0x9e,0x79,0xf0,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x7a,
52239 +0xf0,0x90,0x00,0x03,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x7b,0xf0,0x90,0x00,
52240 +0x04,0x12,0x42,0x20,0xff,0xae,0x05,0xed,0x2f,0x90,0x9e,0x7c,0xf0,0x22,0xd3,0x10,
52241 +0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x24,0x12,0x43,0x8b,0x90,0x9e,0x24,0x12,0x43,
52242 +0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xfa,0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,
52243 +0x90,0x9e,0x24,0x12,0x43,0x6b,0x90,0x00,0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,
52244 +0x29,0xd9,0xff,0x60,0x2d,0xb5,0x65,0x16,0x90,0x9e,0x24,0x12,0x43,0x6b,0x90,0x00,
52245 +0x01,0x12,0x42,0xc2,0x65,0x67,0x70,0x04,0xe5,0x66,0x65,0xf0,0x60,0x24,0x90,0x9e,
52246 +0x24,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xff,0xae,0xf0,0x12,0x4e,0x37,
52247 +0x80,0x10,0x90,0x9e,0x24,0x12,0x43,0x6b,0x12,0x29,0xd9,0x65,0x65,0x60,0x03,0x12,
52248 +0x44,0xc2,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,
52249 +0xa3,0xf0,0xa3,0xf0,0x22,0x90,0x06,0x34,0xe0,0x60,0x24,0x14,0x70,0x1a,0x7b,0x01,
52250 +0x7a,0x06,0x79,0x35,0x7f,0xf9,0x7e,0x01,0x71,0xb0,0xbf,0x01,0x09,0x90,0x06,0x35,
52251 +0xe0,0x54,0x0f,0xf0,0x80,0x04,0x80,0x00,0x80,0xcd,0xe4,0x90,0x06,0x34,0xf0,0x22,
52252 +0x8e,0x14,0x8f,0x15,0x8b,0x16,0x8a,0x17,0x89,0x18,0xe4,0x90,0x9e,0x19,0xf0,0xef,
52253 +0x90,0x00,0x31,0xf0,0x12,0x4d,0x45,0xe5,0x14,0x54,0x03,0xff,0x90,0x00,0x32,0xe0,
52254 +0x54,0xfc,0x4f,0xf0,0x12,0x4d,0x45,0x90,0x00,0x33,0xe0,0x54,0x7f,0xf0,0x12,0x4d,
52255 +0x45,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x19,0xe0,0xc3,0x94,0x64,0x50,
52256 +0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x19,0xe0,0xc3,0x94,0x64,0x50,0x10,0x90,
52257 +0x00,0x30,0xe0,0xab,0x16,0xaa,0x17,0xa9,0x18,0x12,0x42,0x4d,0x7f,0x01,0x22,0x7f,
52258 +0x00,0x22,0xe4,0x90,0x9e,0xac,0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,0xa3,
52259 +0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,0x90,
52260 +0x9e,0xad,0xe0,0x94,0xe8,0x90,0x9e,0xac,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,
52261 +0x7f,0x32,0x7e,0x00,0x12,0x37,0x54,0x90,0x9e,0xac,0xe4,0x75,0xf0,0x01,0x12,0x42,
52262 +0x81,0x80,0xc6,0x90,0x00,0x11,0xe0,0x44,0x09,0xf0,0x12,0x4d,0x45,0x90,0x9d,0xff,
52263 +0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,
52264 +0x90,0x9e,0x03,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,
52265 +0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
52266 +0x00,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x0b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
52267 +0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,
52268 +0x03,0x2d,0x95,0xe4,0xfd,0xff,0x12,0x34,0x81,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x11,
52269 +0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x34,
52270 +0x81,0x22,0x7f,0x78,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xff,0x12,0x2a,0x7f,0x7f,
52271 +0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0x03,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,
52272 +0x12,0x27,0xde,0x90,0x9e,0x07,0x12,0x2a,0x7f,0x90,0x9e,0x80,0xe0,0x90,0x9d,0xff,
52273 +0xb4,0x01,0x0d,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,0x80,0x07,
52274 +0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x78,
52275 +0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,0xff,0xec,
52276 +0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9e,0x07,
52277 +0x12,0x43,0x53,0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,
52278 +0x7e,0x08,0x12,0x2f,0xd9,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9e,0x0b,0x12,
52279 +0x2a,0x7f,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa0,0x7f,0x70,0x7e,0x0e,
52280 +0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0xff,
52281 +0x12,0x34,0x81,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,
52282 +0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x90,0x00,0x11,0xe0,0x54,
52283 +0xf6,0xf0,0x02,0x4d,0x45,0xef,0x70,0x02,0xe1,0x5c,0x90,0x9e,0x0f,0xe0,0x60,0x03,
52284 +0x02,0x7b,0x28,0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
52285 +0x8c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
52286 +0x2a,0x7f,0x7f,0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xab,0x12,0x43,0x53,0x90,
52287 +0x80,0x85,0x12,0x2a,0x7f,0x7f,0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xaf,0x12,
52288 +0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
52289 +0x9d,0xb3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,
52290 +0x2f,0xd9,0x90,0x9d,0xb7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x74,
52291 +0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
52292 +0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xbf,0x12,0x43,0x53,0x90,0x80,
52293 +0x85,0x12,0x2a,0x7f,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xc3,0x12,0x43,
52294 +0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,
52295 +0xc7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,0x2f,
52296 +0xd9,0x90,0x9d,0xcb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x88,0x7e,
52297 +0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xcf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
52298 +0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,0x80,0x85,
52299 +0x12,0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd7,0x12,0x43,0x53,
52300 +0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xdb,
52301 +0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,0x2f,0xd9,
52302 +0x90,0x9d,0xdf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,
52303 +0x12,0x2f,0xd9,0x90,0x9d,0xe3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
52304 +0xe0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
52305 +0x2a,0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xeb,0x12,0x43,0x53,0x90,
52306 +0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9d,0xef,0x12,
52307 +0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x90,
52308 +0x9d,0xf3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,
52309 +0x2f,0xd9,0x90,0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,
52310 +0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,0x0f,0xe0,
52311 +0x64,0x01,0x60,0x03,0x02,0x7b,0x28,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,
52312 +0xfb,0x12,0x2a,0x7f,0x7f,0x44,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xa7,0x12,0x2a,
52313 +0x7f,0x7f,0x5c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xab,0x12,0x2a,0x7f,0x7f,0x6c,
52314 +0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xaf,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,
52315 +0x27,0xde,0x90,0x9d,0xb3,0x12,0x2a,0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x27,0xde,0x90,
52316 +0x9d,0xb7,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbb,0x12,
52317 +0x2a,0x7f,0x7f,0x7c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbf,0x12,0x2a,0x7f,0x7f,
52318 +0x80,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xc3,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,
52319 +0x12,0x27,0xde,0x90,0x9d,0xc7,0x12,0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x27,0xde,
52320 +0x90,0x9d,0xcb,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcf,
52321 +0x12,0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd3,0x12,0x2a,0x7f,
52322 +0x7f,0xd4,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd7,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,
52323 +0x0e,0x12,0x27,0xde,0x90,0x9d,0xdb,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,0x27,
52324 +0xde,0x90,0x9d,0xdf,0x12,0x2a,0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,
52325 +0xe3,0x12,0x2a,0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe7,0x12,0x2a,
52326 +0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9d,0xeb,0x12,0x2a,0x7f,0x7f,0x04,
52327 +0x7e,0x0d,0x12,0x27,0xde,0x90,0x9d,0xef,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,
52328 +0x27,0xde,0x90,0x9d,0xf3,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,
52329 +0x9d,0xf7,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa8,0x12,
52330 +0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,0xa8,
52331 +0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
52332 +0x8c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x01,0x00,0x00,
52333 +0x7f,0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0xdb,0x25,
52334 +0xa4,0x7f,0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,
52335 +0x25,0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,
52336 +0xdb,0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,
52337 +0x04,0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,
52338 +0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,
52339 +0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,
52340 +0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,
52341 +0x85,0x12,0x2a,0x8b,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
52342 +0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2f,0xd9,
52343 +0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,
52344 +0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,
52345 +0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,
52346 +0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,
52347 +0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xdc,
52348 +0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,
52349 +0xe0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x24,0xdb,0x25,0xa4,
52350 +0x7f,0xec,0x7e,0x0e,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,
52351 +0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa8,
52352 +0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,
52353 +0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
52354 +0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9e,
52355 +0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,
52356 +0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,
52357 +0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
52358 +0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,
52359 +0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,
52360 +0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,
52361 +0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
52362 +0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,
52363 +0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xed,0x54,0x0f,0xfd,
52364 +0xec,0x54,0xf0,0xfc,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,
52365 +0xed,0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,
52366 +0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,
52367 +0xd9,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,
52368 +0xa8,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,
52369 +0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa8,0x12,0x2a,0x7f,
52370 +0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,
52371 +0x12,0x2f,0xd9,0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,
52372 +0x9e,0x43,0xf0,0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,0x14,
52373 +0xc2,0xaf,0x90,0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x49,0x05,0x7d,0x40,
52374 +0x7f,0x01,0x12,0x36,0xaf,0xe5,0x14,0x24,0xff,0x92,0xaf,0x22,0x90,0x9e,0x3a,0xe0,
52375 +0xc3,0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0x81,0x14,0x90,0x9e,0x3a,0xe0,0x64,0x14,
52376 +0x60,0x02,0x81,0x14,0x90,0x9e,0x49,0xe0,0x70,0x25,0x90,0x9e,0x4c,0xe0,0x70,0x1f,
52377 +0x90,0x9e,0x4a,0xe0,0x70,0x19,0x90,0x9e,0x4d,0xe0,0x70,0x13,0x90,0x9e,0x4b,0xe0,
52378 +0x70,0x0d,0x90,0x9e,0x4e,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,0x54,0xfe,0xf0,0x90,
52379 +0x9e,0x49,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x4a,0xe0,0x90,0x04,0x45,0xf0,0x90,
52380 +0x9e,0x4b,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x4c,0xe0,0x90,0x04,
52381 +0x48,0xf0,0x90,0x9e,0x4d,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,0x4e,0xe0,0x90,0x04,
52382 +0x4a,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x35,0xe0,0x90,0x04,0x4c,0xf0,0x90,0x9e,0x36,
52383 +0xe0,0x90,0x04,0x4d,0xf0,0x90,0x9e,0x37,0xe0,0x90,0x04,0x4e,0xf0,0x90,0x9e,0x38,
52384 +0xe0,0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0x35,0x04,0xf0,0xe4,
52385 +0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x49,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
52386 +0xa3,0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x19,0xf0,0x90,0x05,0x61,0xe0,
52387 +0x90,0x9e,0x1a,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x1b,0xf0,0x90,0x05,0x63,0xe0,
52388 +0x90,0x9e,0x1c,0xf0,0x90,0x9e,0x52,0xe0,0xff,0x90,0x9e,0x1c,0xe0,0xfe,0xd3,0x9f,
52389 +0x50,0x0b,0x90,0x9e,0x52,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,0x11,0x90,0x9e,0x40,
52390 +0xe0,0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x44,0xe0,0xff,0x12,0x4c,0xf0,0x22,0x90,
52391 +0x9e,0x53,0xe0,0x64,0x01,0x60,0x08,0x90,0x9e,0x41,0xe0,0x60,0x02,0xa1,0x36,0x90,
52392 +0x9e,0x35,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x36,
52393 +0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x37,0xe0,
52394 +0xc3,0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x36,0xf0,0x80,0x15,0x90,
52395 +0x9e,0x38,0xe0,0xc3,0x94,0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x37,0xf0,
52396 +0x90,0x9e,0x36,0xf0,0x90,0x9e,0x35,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,
52397 +0xe0,0x30,0xe2,0x32,0x90,0x9e,0x49,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,
52398 +0x80,0x24,0x90,0x9e,0x4a,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,
52399 +0x11,0x90,0x9e,0x4b,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,
52400 +0x4a,0xf0,0x90,0x9e,0x49,0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x4c,
52401 +0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x4d,0xe0,0xc3,
52402 +0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x4e,0xe0,0xc3,0x94,
52403 +0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x4d,0xf0,0x90,0x9e,0x4c,0xf0,0x90,
52404 +0x04,0xfd,0xe0,0x44,0x01,0xf0,0x22,0x00,0x37,0xda,};
52405 +
52406 +// =================== v79 UMC A Cut COMMON 2011-10-06 =====================
52407 +u8 Rtl8192CUFwUMCACutImgArray[UMCACutImgArrayLength] = {
52408 +0xc1,0x88,0x02,0x00,0x4f,0x00,0x00,0x00,0x0a,0x06,0x18,0x09,0x58,0x3f,0x01,0x00,
52409 0x61,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52410 0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52411 0x00,0x00,0x00,0x02,0x5a,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52412 @@ -99,7 +1084,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52413 0x00,0x41,0x9e,0xae,0x00,0x41,0x9e,0x4d,0x80,0x41,0x9e,0x4e,0x80,0x41,0x9e,0xb0,
52414 0x00,0x00,0xf0,0x90,0x9e,0x57,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,
52415 0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x88,0xeb,0xf0,0xa3,0xe0,
52416 -0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x35,0xab,0xd0,0xd0,0x92,0xaf,0x22,
52417 +0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x30,0x62,0xd0,0xd0,0x92,0xaf,0x22,
52418 0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x89,0xf0,
52419 0x90,0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,
52420 0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x5c,
52421 @@ -111,7 +1096,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52422 0x22,0x22,0x00,0x02,0x60,0x8d,0x02,0x60,0x94,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
52423 0x8b,0x1b,0x8a,0x1c,0x89,0x1d,0x90,0x9e,0x8b,0x71,0x8b,0xab,0x1e,0xaa,0x1f,0xa9,
52424 0x20,0x90,0x9e,0x8e,0x71,0x8b,0xaf,0x21,0x15,0x21,0xef,0x60,0x1b,0x90,0x9e,0x8e,
52425 -0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x29,0xd9,0xff,0x90,0x9e,0x8b,0xe4,0x75,0xf0,
52426 +0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x24,0x62,0xff,0x90,0x9e,0x8b,0xe4,0x75,0xf0,
52427 0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x1b,0xaa,0x1c,0xa9,0x1d,0xd0,0xd0,
52428 0x92,0xaf,0x22,0x90,0x06,0xa9,0xe0,0xf5,0x50,0x54,0xc0,0x70,0x0d,0x90,0x9e,0x63,
52429 0xe0,0x54,0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0x91,0xd3,0xe5,0x50,0x30,0xe6,0x17,0x90,
52430 @@ -168,21 +1153,21 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52431 0x60,0x0b,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x77,
52432 0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x77,0x66,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,
52433 0x90,0x05,0x22,0x74,0xff,0xf0,0x12,0x77,0x1c,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,
52434 -0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x36,0xe6,0xe5,0x74,0x60,0x04,0x7f,0x01,0x11,
52435 +0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x31,0x9d,0xe5,0x74,0x60,0x04,0x7f,0x01,0x11,
52436 0x8f,0x11,0xdf,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,0x22,0x7f,
52437 -0x78,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xff,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,
52438 -0x12,0x27,0xde,0x90,0x9e,0x03,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x27,0xde,
52439 -0x90,0x9e,0x07,0x12,0x2a,0x7f,0x90,0x9e,0x77,0xe0,0x90,0x9d,0xff,0xb4,0x01,0x0d,
52440 +0x78,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xff,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,
52441 +0x12,0x22,0x65,0x90,0x9e,0x03,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,0x12,0x22,0x65,
52442 +0x90,0x9e,0x07,0x12,0x25,0x08,0x90,0x9e,0x77,0xe0,0x90,0x9d,0xff,0xb4,0x01,0x0d,
52443 0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,0x80,0x07,0x12,0x43,0x53,
52444 -0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x08,0x12,
52445 -0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,0xff,0xec,0x90,0x80,0x85,
52446 -0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,0x43,0x53,
52447 -0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,
52448 -0x2f,0xd9,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9e,0x0b,0x12,0x2a,0x7f,0x90,
52449 -0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa0,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,
52450 -0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0xff,0x12,0x34,0x81,
52451 -0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,
52452 -0x00,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x90,0x00,0x11,0xe0,0x54,0xf6,0xf0,0x80,
52453 +0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x78,0x7e,0x08,0x12,
52454 +0x2b,0x08,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,0xff,0xec,0x90,0x80,0x96,
52455 +0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,0x9e,0x07,0x12,0x43,0x53,
52456 +0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,0x12,
52457 +0x2b,0x08,0x7f,0x70,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9e,0x0b,0x12,0x25,0x08,0x90,
52458 +0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa0,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x08,
52459 +0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x00,0x00,0x00,0xe4,0xfd,0xff,0x12,0x30,0x2c,
52460 +0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x00,0x00,
52461 +0x00,0xe4,0xfd,0x7f,0x01,0x12,0x30,0x2c,0x90,0x00,0x11,0xe0,0x54,0xf6,0xf0,0x80,
52462 0x08,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
52463 0x7f,0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
52464 0x90,0x9e,0xad,0xed,0xf0,0x90,0x9e,0xac,0xef,0xf0,0xd3,0x94,0x07,0x50,0x63,0xe0,
52465 @@ -205,15 +1190,15 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52466 0x02,0x61,0x7d,0x90,0x9e,0x1a,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,
52467 0x7f,0x48,0x51,0xc1,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,0x47,0x51,0xc1,0x90,
52468 0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,0x9e,0x1a,0xf0,0x90,
52469 -0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,
52470 -0x2f,0xd9,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x45,
52471 +0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,
52472 +0x2b,0x08,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x45,
52473 0xe0,0x54,0xef,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,
52474 0x46,0x80,0x38,0x90,0x9e,0x1a,0x74,0x01,0xf0,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,
52475 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x00,0x45,0xe0,
52476 +0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x90,0x00,0x45,0xe0,
52477 0x44,0x20,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,
52478 0x51,0xc1,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x51,0xc1,0x22,0x90,0x00,
52479 0x02,0x12,0x42,0x20,0x90,0x9e,0x1c,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0x25,0xe0,
52480 -0x25,0xe0,0x90,0x9e,0x1b,0xf0,0x12,0x29,0xd9,0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1f,
52481 +0x25,0xe0,0x90,0x9e,0x1b,0xf0,0x12,0x24,0x62,0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1f,
52482 0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x2b,
52483 0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x2d,
52484 0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x1b,0xe0,0xff,
52485 @@ -222,25 +1207,25 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52486 0x81,0x84,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x2e,0x74,
52487 0x01,0xf0,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x51,0xb8,0x90,0x00,0x46,0xe0,
52488 0x44,0x01,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,
52489 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,
52490 +0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,
52491 0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,
52492 0x45,0x51,0xc1,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,
52493 0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,
52494 0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,
52495 0x3f,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,0xe4,0xff,0x12,
52496 -0x37,0x00,0x80,0x2b,0x90,0x9e,0x1c,0xe0,0x70,0x2d,0x90,0x9e,0x2e,0x51,0xb7,0x90,
52497 +0x31,0xb7,0x80,0x2b,0x90,0x9e,0x1c,0xe0,0x70,0x2d,0x90,0x9e,0x2e,0x51,0xb7,0x90,
52498 0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x05,0x22,0xe4,0xf0,0xa2,
52499 -0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,0x36,0x92,0x90,
52500 +0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,0x31,0x49,0x90,
52501 0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x22,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x90,0x00,
52502 0x02,0x12,0x42,0x20,0x90,0x9e,0x1d,0xf0,0xe0,0x30,0xe0,0x4b,0x90,0x9e,0x14,0x74,
52503 -0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x16,0x12,0x2a,0x7f,0xab,
52504 +0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0x16,0x12,0x25,0x08,0xab,
52505 0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xe4,0xfc,0xfd,0xfe,
52506 -0x78,0x1a,0x12,0x2a,0x6c,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x16,
52507 -0x12,0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x2a,0x7f,
52508 +0x78,0x1a,0x12,0x24,0xf5,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x16,
52509 +0x12,0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x25,0x08,
52510 0x90,0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x14,0xf0,0x7f,0x80,0x7e,0x08,
52511 -0x12,0x27,0xde,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,0x2a,
52512 -0x7f,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,
52513 -0x08,0x12,0x2f,0xd9,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,0x51,
52514 +0x12,0x22,0x65,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,0x25,
52515 +0x08,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,
52516 +0x08,0x12,0x2b,0x08,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,0x51,
52517 0xc1,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x51,0xc1,0x90,0x00,0x46,0xe0,
52518 0x44,0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,0x47,0x51,0xc1,0x90,
52519 0x00,0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x51,0xc1,0x90,0x00,0x46,0xe0,0x54,0xef,
52520 @@ -256,13 +1241,13 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52521 0x46,0x51,0xc1,0x7f,0x02,0xf1,0xea,0x8f,0x26,0x90,0x01,0xc9,0xe5,0x26,0xf0,0xb4,
52522 0x01,0x02,0xf1,0x2a,0x22,0x90,0x9e,0x1c,0xe0,0x64,0x01,0x60,0x02,0xc1,0xd7,0x90,
52523 0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x9e,0x2e,0xe0,0x70,0x31,
52524 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
52525 -0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,
52526 +0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
52527 +0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,
52528 0xf0,0x90,0x9e,0x1b,0xe0,0xff,0xd1,0xd8,0x90,0x9e,0x2e,0x74,0x01,0x51,0xb7,0x80,
52529 0x3f,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x70,0x37,0x90,0x9e,0x1f,0xe0,0xff,0xd1,0xd8,
52530 0xe4,0x90,0x9e,0x2e,0xf0,0x90,0x00,0x45,0xe0,0x44,0x01,0xfd,0x7f,0x45,0x51,0xc1,
52531 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
52532 -0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,
52533 +0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
52534 +0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,
52535 0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,0x84,0xf0,0x90,
52536 0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,0x86,0xf0,0x90,
52537 0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,
52538 @@ -296,7 +1281,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52539 0x29,0x75,0x2a,0x03,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,
52540 0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0xe4,0x90,0x9e,0x31,0xf0,0xa3,0xf0,
52541 0x75,0x8e,0x02,0x12,0x4f,0xda,0x12,0x5f,0xa9,0x12,0x5f,0xbc,0xe4,0xf5,0x12,0x12,
52542 -0x6f,0xa1,0x12,0x77,0x5d,0x12,0x60,0x9b,0x12,0x32,0x3d,0x12,0x77,0x18,0x11,0x8b,
52543 +0x6f,0xa1,0x12,0x77,0x5d,0x12,0x60,0x9b,0x12,0x2e,0x01,0x12,0x77,0x18,0x11,0x8b,
52544 0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,
52545 0xf0,0xa3,0xe4,0xf0,0x12,0x5f,0xf4,0x12,0x5f,0x91,0x12,0x44,0xfe,0x12,0x7d,0x1d,
52546 0x90,0x9e,0x33,0xe5,0xd9,0xf0,0x12,0x4d,0x8b,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,
52547 @@ -353,7 +1338,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52548 0x43,0x6b,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0x90,
52549 0x00,0x01,0xef,0x12,0x42,0x5f,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,
52550 0x42,0x20,0xff,0x90,0x9e,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,
52551 -0xf0,0x12,0x29,0xd9,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,0x90,
52552 +0xf0,0x12,0x24,0x62,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,0x90,
52553 0x9e,0x3f,0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,
52554 0x9e,0x40,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,
52555 0x75,0xf0,0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x45,
52556 @@ -389,10 +1374,10 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52557 0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x5d,
52558 0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x5c,
52559 0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,
52560 -0xf0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,
52561 -0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x29,0xd9,0x5f,0xd0,0x01,0xd0,0x02,0xd0,
52562 +0xf0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x24,0x62,
52563 +0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x24,0x62,0x5f,0xd0,0x01,0xd0,0x02,0xd0,
52564 0x03,0x12,0x42,0x4d,0xab,0x5d,0xe5,0x5f,0x24,0x01,0xf9,0xe4,0x35,0x5e,0xfa,0xc0,
52565 -0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x90,
52566 +0x03,0xc0,0x02,0xc0,0x01,0x12,0x24,0x62,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x90,
52567 0x00,0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,
52568 0x5c,0x82,0x85,0x5b,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,
52569 0x83,0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x5c,0x82,0x85,0x5b,0x83,
52570 @@ -472,7 +1457,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52571 0x4d,0x31,0x76,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x45,0x90,0x9e,0x61,0xe0,
52572 0x60,0x37,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0xd1,0x05,0xef,
52573 0x64,0x01,0x70,0x2d,0x90,0x9e,0x55,0xe0,0xf5,0x44,0x75,0x45,0x00,0xe4,0xfb,0xfd,
52574 -0x7f,0x58,0x7e,0x01,0x12,0x35,0xab,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,
52575 +0x7f,0x58,0x7e,0x01,0x12,0x30,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,
52576 0x74,0x01,0xf0,0x90,0x9e,0x5d,0xf0,0x80,0x08,0xd1,0x05,0xbf,0x01,0x03,0x12,0x44,
52577 0xd3,0xe5,0x2c,0x30,0xe1,0x20,0x90,0x01,0x34,0x74,0x02,0xf0,0x85,0xd1,0x13,0x85,
52578 0xd2,0x14,0x85,0xd3,0x15,0x85,0xd4,0x16,0x85,0xd5,0x17,0x85,0xd6,0x18,0x85,0xd7,
52579 @@ -515,12 +1500,12 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52580 0x01,0xef,0x12,0x42,0x5f,0x7f,0xaf,0x7e,0x01,0xf1,0x3b,0xef,0x60,0x49,0x90,0x9e,
52581 0x91,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x75,0x21,0x02,0x7b,0x01,0x7a,
52582 0x01,0x79,0xa0,0x12,0x45,0x09,0x90,0x9e,0x94,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,
52583 -0x89,0x20,0x90,0x9e,0x91,0x12,0x43,0x6b,0x12,0x29,0xd9,0xff,0xc4,0x54,0x0f,0xf5,
52584 +0x89,0x20,0x90,0x9e,0x91,0x12,0x43,0x6b,0x12,0x24,0x62,0xff,0xc4,0x54,0x0f,0xf5,
52585 0x21,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x12,0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,
52586 0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x2f,0xe0,
52587 0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,0x80,0xf0,0x7b,0x00,0x7a,0x00,0x79,0x13,
52588 0x90,0x9e,0x94,0x12,0x43,0x8b,0x0b,0x7a,0x9e,0x79,0x2f,0xc1,0x14,0x7d,0x02,0x7f,
52589 -0x03,0x12,0x36,0x75,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x23,0x90,0x9e,0x61,
52590 +0x03,0x12,0x31,0x2c,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x23,0x90,0x9e,0x61,
52591 0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0f,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,
52592 0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x1a,0xe4,0xff,0x12,0x48,0x8f,
52593 0x22,0xd1,0x05,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x32,
52594 @@ -532,7 +1517,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52595 0x9e,0xa0,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,
52596 0xa3,0xe0,0x94,0xe8,0x90,0x9e,0xa2,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,
52597 0x44,0x10,0xf0,0x7f,0x00,0x80,0x15,0x90,0x9e,0xa2,0xe4,0x75,0xf0,0x01,0x12,0x42,
52598 -0x81,0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,
52599 +0x81,0x7f,0x0a,0x7e,0x00,0x12,0x32,0x15,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,
52600 0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,0x01,0x38,0xe5,0x30,0xf0,
52601 0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0x90,0x00,0x02,0xe0,0x54,0xe0,0x90,
52602 0x9e,0x75,0x60,0x04,0x74,0x01,0xf0,0x22,0x74,0x02,0xf0,0x22,0x90,0x00,0xf3,0xe0,
52603 @@ -558,7 +1543,7 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52604 0x9e,0x5b,0x74,0x05,0xf0,0xe4,0x90,0x9e,0x54,0xf0,0x90,0x9e,0x4f,0xf0,0x90,0x9e,
52605 0x76,0xf0,0x22,0xe4,0x90,0x9e,0x62,0xf0,0x90,0x9e,0x51,0xf0,0x90,0x9e,0x63,0xf0,
52606 0x22,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x31,0x03,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x12,
52607 -0x29,0xd9,0xf5,0x74,0x14,0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,
52608 +0x24,0x62,0xf5,0x74,0x14,0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,
52609 0x40,0x7f,0x01,0x80,0x3a,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,
52610 0x20,0xfd,0xe4,0xff,0x31,0x72,0x80,0x27,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,
52611 0x02,0x12,0x42,0x20,0xfd,0x7f,0x01,0x31,0x72,0x1f,0x80,0x13,0xab,0x59,0xaa,0x5a,
52612 @@ -567,13 +1552,13 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52613 0x80,0x16,0xed,0x70,0x0a,0x90,0x9e,0x5b,0xe0,0x90,0x9e,0x5f,0xf0,0x80,0x05,0x90,
52614 0x9e,0x5f,0xed,0xf0,0x90,0x9e,0x5f,0xe0,0x90,0x9e,0x50,0xf0,0x22,0xd3,0x10,0xaf,
52615 0x01,0xc3,0xc0,0xd0,0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x61,0xf0,0x90,0x00,
52616 -0x03,0x12,0x42,0x20,0x90,0x9e,0x4f,0xf0,0x12,0x29,0xd9,0x65,0x74,0x60,0x02,0x31,
52617 +0x03,0x12,0x42,0x20,0x90,0x9e,0x4f,0xf0,0x12,0x24,0x62,0x65,0x74,0x60,0x02,0x31,
52618 0x11,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x64,0x01,0x70,0x30,0x7d,0x7c,0x7f,0x02,0x12,
52619 -0x36,0x75,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,
52620 +0x31,0x2c,0x7d,0x02,0x7f,0x03,0x12,0x31,0x2c,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,
52621 0x3c,0x74,0x02,0xf0,0x12,0x47,0x16,0xe4,0xff,0x12,0x48,0x8f,0x90,0x06,0x04,0xe0,
52622 0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,0x7c,
52623 -0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x36,0xe6,0x7d,0x02,0x7f,0x03,0x12,
52624 -0x36,0xe6,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,0xf0,
52625 +0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x31,0x9d,0x7d,0x02,0x7f,0x03,0x12,
52626 +0x31,0x9d,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,0xf0,
52627 0x90,0x9e,0x58,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x73,0x30,0xe0,0x1b,0x90,
52628 0x9e,0x52,0xe0,0x70,0x1a,0xe0,0x04,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,0x94,
52629 0x04,0x50,0x0c,0x7d,0x01,0x7f,0x04,0x02,0x47,0x1a,0xe4,0x90,0x9e,0x52,0xf0,0x22,
52630 @@ -600,17 +1585,17 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52631 0xf0,0x22,0x90,0x9e,0xaf,0xef,0xf0,0x71,0xb0,0x90,0x9e,0xaf,0xe0,0x60,0x05,0x90,
52632 0x05,0x22,0xe4,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x04,0xf0,0x22,
52633 0x90,0x00,0x11,0xe0,0x44,0x09,0xf0,0x12,0x49,0xb9,0x90,0x9d,0xff,0x12,0x43,0x53,
52634 -0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,
52635 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,
52636 -0x90,0x9e,0x07,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,
52637 -0x12,0x2f,0xd9,0x90,0x9e,0x0b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
52638 -0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,
52639 -0xe4,0xfd,0xff,0x12,0x34,0x81,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,
52640 -0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x22,0x8f,
52641 +0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x78,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x03,
52642 +0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,
52643 +0x90,0x9e,0x07,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,
52644 +0x12,0x2b,0x08,0x90,0x9e,0x0b,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
52645 +0x70,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x03,0x2d,0x95,
52646 +0xe4,0xfd,0xff,0x12,0x30,0x2c,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x68,
52647 +0x12,0x25,0x14,0x00,0x03,0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x30,0x2c,0x22,0x8f,
52648 0x27,0xe4,0x90,0x9e,0xa8,0xf0,0xa3,0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,0x30,0xe7,
52649 0x02,0x7f,0x01,0xef,0x65,0x27,0x60,0x3e,0xc3,0x90,0x9e,0xa9,0xe0,0x94,0x88,0x90,
52650 0x9e,0xa8,0xe0,0x94,0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,
52651 -0x9e,0xa8,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x37,0x54,
52652 +0x9e,0xa8,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x32,0x15,
52653 0xd3,0x90,0x9e,0xa9,0xe0,0x94,0x32,0x90,0x9e,0xa8,0xe0,0x94,0x00,0x40,0xb9,0x90,
52654 0x01,0xc7,0xe0,0x30,0xe0,0xb2,0x22,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,
52655 0x01,0xf0,0x12,0x44,0xff,0x12,0x45,0x00,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,
52656 @@ -717,21 +1702,21 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52657 0x93,0xff,0xd3,0x90,0x9e,0x3b,0xe0,0x9f,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x09,
52658 0xe4,0xfd,0xaf,0x59,0x12,0x67,0xb1,0xe1,0x2c,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,
52659 0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xf5,0x61,0xa3,0xe0,0xf5,0x62,0xab,0x5b,0xaa,
52660 -0x5c,0xa9,0x5d,0x12,0x29,0xd9,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,
52661 -0x42,0x97,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,
52662 +0x5c,0xa9,0x5d,0x12,0x24,0x62,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,
52663 +0x42,0x97,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,
52664 0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x7e,
52665 0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,0xf0,
52666 -0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,
52667 +0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,
52668 0x5c,0xa9,0x5d,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,
52669 -0xa9,0x60,0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,
52670 +0xa9,0x60,0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,
52671 0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,
52672 0x03,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x06,
52673 -0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,
52674 +0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,
52675 0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x04,0x12,0x42,0x20,0xff,
52676 0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,0xac,
52677 -0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,
52678 +0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,
52679 0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,0x38,
52680 -0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x29,0xf2,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,
52681 +0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x24,0x7b,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,
52682 0x0c,0xe5,0x62,0x9f,0xf5,0x62,0xe5,0x61,0x9e,0xf5,0x61,0x80,0x05,0xe4,0xf5,0x61,
52683 0xf5,0x62,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,
52684 0x61,0xf0,0xa3,0xe5,0x62,0xf0,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,
52685 @@ -766,11 +1751,11 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52686 0x5f,0xe0,0xb4,0x01,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,
52687 0x9c,0xf5,0x83,0xe4,0xf0,0xad,0x63,0xc1,0xfb,0xec,0x64,0x06,0x60,0x02,0xe1,0x00,
52688 0xf5,0x61,0xf5,0x62,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,
52689 -0xa3,0xe0,0xfd,0x12,0x29,0xf2,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,
52690 +0xa3,0xe0,0xfd,0x12,0x24,0x7b,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,
52691 0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0xe4,0xf5,0x5a,0xab,
52692 0x5e,0xaa,0x5f,0xa9,0x60,0x75,0xf0,0x02,0xe5,0x5a,0xa4,0xf5,0x82,0x85,0xf0,0x83,
52693 0x12,0x42,0xc2,0xfd,0xac,0xf0,0xe5,0x5a,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,0x12,
52694 -0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,
52695 +0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,
52696 0xe0,0x95,0x62,0x90,0x9e,0x36,0xe0,0x95,0x61,0x40,0x07,0x05,0x5a,0xe5,0x5a,0xb4,
52697 0x05,0xbd,0xe5,0x5a,0xc3,0x13,0xf5,0x5a,0xe5,0x63,0xb4,0x01,0x06,0xe5,0x5a,0x70,
52698 0x46,0x80,0x13,0xe5,0x63,0xb4,0x03,0x15,0xe5,0x5a,0x70,0x05,0x75,0x63,0x03,0x80,
52699 @@ -819,36 +1804,36 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52700 0x90,0x96,0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,
52701 0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,
52702 0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x03,
52703 -0x02,0x6f,0xcf,0x22,0x12,0x29,0xd9,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,
52704 +0x02,0x6f,0xcf,0x22,0x12,0x24,0x62,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,
52705 0x02,0x12,0x42,0x20,0xff,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,
52706 0xef,0xf0,0x22,0xe5,0x59,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x96,
52707 0x42,0xf0,0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,
52708 -0xc4,0x13,0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x53,0xa4,0x12,0x29,0xd9,0x90,
52709 -0x95,0x01,0xf0,0x22,0x12,0x29,0xd9,0xf5,0x73,0x22,0x90,0x00,0x02,0x12,0x42,0x20,
52710 -0xff,0x30,0xe0,0x25,0x12,0x29,0xd9,0x90,0x9e,0x56,0xf0,0x90,0x00,0x01,0x12,0x42,
52711 +0xc4,0x13,0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x53,0xa4,0x12,0x24,0x62,0x90,
52712 +0x95,0x01,0xf0,0x22,0x12,0x24,0x62,0xf5,0x73,0x22,0x90,0x00,0x02,0x12,0x42,0x20,
52713 +0xff,0x30,0xe0,0x25,0x12,0x24,0x62,0x90,0x9e,0x56,0xf0,0x90,0x00,0x01,0x12,0x42,
52714 0x20,0x90,0x9e,0x57,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x55,0xf0,0x90,0x00,
52715 0x03,0x12,0x42,0x20,0x90,0x9e,0x5b,0xf0,0x22,0x90,0x9e,0x56,0x74,0x01,0xf0,0x90,
52716 0x9e,0x57,0x74,0x03,0xf0,0x90,0x9e,0x55,0x74,0x14,0xf0,0x90,0x9e,0x5b,0x74,0x05,
52717 -0xf0,0x22,0x12,0x29,0xd9,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x5a,0xf0,
52718 +0xf0,0x22,0x12,0x24,0x62,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x5a,0xf0,
52719 0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x58,0xe4,0xf0,0xa3,0xef,0xf0,0x22,
52720 0x90,0x9e,0x5a,0x74,0x07,0xf0,0x90,0x9e,0x58,0xe4,0xf0,0xa3,0x74,0x02,0xf0,0x22,
52721 -0x90,0x02,0x09,0xe0,0xfd,0x12,0x29,0xd9,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x67,
52722 +0x90,0x02,0x09,0xe0,0xfd,0x12,0x24,0x62,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x67,
52723 0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x68,0xf0,0x90,0x00,
52724 0x02,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x69,0xf0,0x90,0x00,0x03,0x12,0x42,
52725 0x20,0xff,0xed,0x2f,0x90,0x9e,0x6a,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0xae,
52726 0x05,0xed,0x2f,0x90,0x9e,0x6b,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,
52727 0x9e,0x3f,0x12,0x43,0x8b,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,
52728 0xc2,0xfa,0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,0x90,0x9e,0x3f,0x12,0x43,0x6b,
52729 -0x90,0x00,0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,0x29,0xd9,0xff,0x60,0x2c,0xb5,
52730 +0x90,0x00,0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,0x24,0x62,0xff,0x60,0x2c,0xb5,
52731 0x22,0x16,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0x65,0x24,
52732 0x70,0x04,0xe5,0x23,0x65,0xf0,0x60,0x23,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,
52733 0x01,0x12,0x42,0xc2,0xff,0xae,0xf0,0x71,0x00,0x80,0x10,0x90,0x9e,0x3f,0x12,0x43,
52734 -0x6b,0x12,0x29,0xd9,0x65,0x22,0x60,0x03,0x12,0x44,0xca,0xd0,0xd0,0x92,0xaf,0x22,
52735 +0x6b,0x12,0x24,0x62,0x65,0x22,0x60,0x03,0x12,0x44,0xca,0xd0,0xd0,0x92,0xaf,0x22,
52736 0x90,0x9e,0x42,0xee,0xf0,0xa3,0xef,0xf0,0x75,0x22,0x01,0x8e,0x23,0xf5,0x24,0xe4,
52737 0xfd,0x7f,0x0b,0x71,0x44,0xe4,0xfd,0x7f,0x02,0x71,0x44,0x12,0x4f,0xbe,0xe4,0xff,
52738 0x12,0x44,0xf1,0xe4,0xf5,0x26,0x90,0x01,0xc9,0xe5,0x26,0xf0,0x90,0x9e,0x42,0xe0,
52739 0xfc,0xa3,0xe0,0xfd,0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,0x7d,0x01,0x7f,0x60,0x7e,
52740 -0x01,0x02,0x35,0xab,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,
52741 +0x01,0x02,0x30,0x62,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,
52742 0x90,0x9e,0x44,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9e,
52743 0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
52744 0x90,0x00,0x47,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,
52745 @@ -875,24 +1860,24 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52746 0x80,0x1a,0xc3,0x74,0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xff,0xe5,0x61,0x7c,0x00,
52747 0x25,0x65,0xfd,0xec,0x35,0x64,0x8d,0x82,0xf5,0x83,0xef,0xf0,0x05,0x61,0x80,0xba,
52748 0xc3,0xe5,0x64,0x94,0x10,0x40,0x02,0xa1,0x93,0x90,0x9e,0x40,0xe0,0x64,0x04,0x60,
52749 -0x02,0xa1,0x93,0xaf,0x67,0xfc,0xfd,0xfe,0x78,0x10,0x12,0x2a,0x6c,0xc0,0x04,0xc0,
52750 -0x05,0xc0,0x06,0xc0,0x07,0xaf,0x66,0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x2a,0x6c,
52751 +0x02,0xa1,0x93,0xaf,0x67,0xfc,0xfd,0xfe,0x78,0x10,0x12,0x24,0xf5,0xc0,0x04,0xc0,
52752 +0x05,0xc0,0x06,0xc0,0x07,0xaf,0x66,0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x24,0xf5,
52753 0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0x12,0x43,0x46,0xc0,0x04,0xc0,0x05,0xc0,
52754 -0x06,0xc0,0x07,0xaf,0x68,0xe4,0xfc,0xfd,0xfe,0x78,0x08,0x12,0x2a,0x6c,0xd0,0x03,
52755 +0x06,0xc0,0x07,0xaf,0x68,0xe4,0xfc,0xfd,0xfe,0x78,0x08,0x12,0x24,0xf5,0xd0,0x03,
52756 0xd0,0x02,0xd0,0x01,0xd0,0x00,0x12,0x43,0x46,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,
52757 -0x07,0xaf,0x69,0xe4,0xfc,0xfd,0xfe,0x12,0x43,0x46,0xa3,0x12,0x2a,0x7f,0x90,0x9e,
52758 -0x41,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0xaf,0x65,0xae,0x64,0x12,0x2f,
52759 -0xd9,0x80,0x30,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,
52760 -0x62,0xaf,0x63,0xfe,0x12,0x37,0x54,0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,
52761 -0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,0x36,0xcb,0x80,0x04,0x7f,
52762 +0x07,0xaf,0x69,0xe4,0xfc,0xfd,0xfe,0x12,0x43,0x46,0xa3,0x12,0x25,0x08,0x90,0x9e,
52763 +0x41,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0xaf,0x65,0xae,0x64,0x12,0x2b,
52764 +0x08,0x80,0x30,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,
52765 +0x62,0xaf,0x63,0xfe,0x12,0x32,0x15,0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,
52766 +0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,0x31,0x82,0x80,0x04,0x7f,
52767 0x00,0x80,0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x6a,0xe4,0x90,0x9e,0x45,
52768 0xf0,0xe5,0x6a,0x14,0xfe,0x90,0x9e,0x45,0xe0,0xff,0xc3,0x9e,0x50,0x0e,0xef,0x04,
52769 -0xfd,0x12,0x34,0xb7,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,
52770 -0x7d,0xff,0x12,0x34,0xb7,0x90,0x9e,0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,
52771 -0x94,0xff,0x50,0x0f,0xe0,0xff,0x04,0xfd,0x12,0x34,0xb7,0x90,0x9e,0x45,0xe0,0x04,
52772 -0xf0,0x80,0xe8,0xad,0x6a,0x7f,0xff,0x02,0x34,0xb7,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
52773 +0xfd,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,
52774 +0x7d,0xff,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,
52775 +0x94,0xff,0x50,0x0f,0xe0,0xff,0x04,0xfd,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe0,0x04,
52776 +0xf0,0x80,0xe8,0xad,0x6a,0x7f,0xff,0x02,0x2d,0x4d,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
52777 0xd0,0xe4,0xf5,0x5b,0x75,0x5c,0x04,0xf5,0x5d,0xf5,0x5f,0xf5,0x60,0x90,0x02,0x09,
52778 -0xe0,0xff,0x12,0x29,0xd9,0xfe,0xef,0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,
52779 +0xe0,0xff,0x12,0x24,0x62,0xfe,0xef,0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,
52780 0x75,0x5a,0x80,0x80,0x05,0xe4,0xf5,0x59,0xf5,0x5a,0xe5,0x5e,0xc3,0x13,0x90,0xfd,
52781 0x10,0xf0,0x74,0x20,0x25,0x5b,0xf5,0x5b,0xad,0x5a,0xe5,0x5b,0x2d,0xff,0x24,0x01,
52782 0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0x9e,0x6d,0xf0,0x74,0x02,0x2f,0xf5,
52783 @@ -902,8 +1887,8 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52784 0x83,0xe0,0xfe,0x74,0x6c,0x2f,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,0xee,0xf0,0x0f,
52785 0xbf,0x08,0xe0,0x91,0x0e,0xef,0x70,0x3f,0x90,0x01,0xc3,0xe0,0x60,0x25,0xc3,0xe5,
52786 0x60,0x94,0xe8,0xe5,0x5f,0x94,0x03,0x40,0x09,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,
52787 -0x80,0x63,0x05,0x60,0xe5,0x60,0x70,0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x37,
52788 -0x54,0x80,0xd5,0x90,0x01,0xc6,0xe0,0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,
52789 +0x80,0x63,0x05,0x60,0xe5,0x60,0x70,0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x32,
52790 +0x15,0x80,0xd5,0x90,0x01,0xc6,0xe0,0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,
52791 0x80,0x43,0x74,0xff,0xf0,0x80,0x3e,0xe5,0x5b,0xb4,0x78,0x23,0xe4,0xf5,0x5b,0x05,
52792 0x5e,0xe5,0x5a,0x64,0x80,0x45,0x59,0x70,0x06,0xf5,0x59,0xf5,0x5a,0x80,0x06,0x75,
52793 0x59,0x00,0x75,0x5a,0x80,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x80,0x06,0x74,
52794 @@ -912,4208 +1897,146 @@ u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
52795 0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x22,0xe4,0xf5,0x25,0x22,0xe4,0x90,0x9e,0xaa,
52796 0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,
52797 0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,0x90,0x9e,0xab,0xe0,0x94,0xe8,0x90,
52798 -0x9e,0xaa,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x37,
52799 -0x54,0x90,0x9e,0xaa,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x80,0xc6,0x90,0x9e,0x77,
52800 +0x9e,0xaa,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x32,
52801 +0x15,0x90,0x9e,0xaa,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x80,0xc6,0x90,0x9e,0x77,
52802 0xe0,0x90,0x9e,0x0f,0xf0,0x22,0xef,0x70,0x03,0x02,0x79,0x1e,0x90,0x9e,0x0f,0xe0,
52803 -0x60,0x03,0x02,0x7c,0xe9,0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
52804 -0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,
52805 -0x85,0x12,0x2a,0x7f,0x7f,0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xab,0x12,0x43,
52806 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,
52807 -0xaf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,
52808 -0xd9,0x90,0x9d,0xb3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,
52809 -0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xb7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
52810 -0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x85,
52811 -0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xbf,0x12,0x43,0x53,
52812 -0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xc3,
52813 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,
52814 -0x90,0x9d,0xc7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,
52815 -0x12,0x2f,0xd9,0x90,0x9d,0xcb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
52816 -0x88,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xcf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
52817 -0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,
52818 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd7,0x12,
52819 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
52820 -0x9d,0xdb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,
52821 -0x2f,0xd9,0x90,0x9d,0xdf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xdc,
52822 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xe3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
52823 -0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,
52824 -0x85,0x12,0x2a,0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xeb,0x12,0x43,
52825 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9d,
52826 -0xef,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,
52827 -0xd9,0x90,0x9d,0xf3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,
52828 -0x09,0x12,0x2f,0xd9,0x90,0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
52829 -0x7f,0x04,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,
52830 -0x0f,0xe0,0x64,0x01,0x60,0x02,0x81,0xe9,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,
52831 -0x9d,0xfb,0x12,0x2a,0x7f,0x7f,0x44,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xa7,0x12,
52832 -0x2a,0x7f,0x7f,0x5c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xab,0x12,0x2a,0x7f,0x7f,
52833 -0x6c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xaf,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,
52834 -0x12,0x27,0xde,0x90,0x9d,0xb3,0x12,0x2a,0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x27,0xde,
52835 -0x90,0x9d,0xb7,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbb,
52836 -0x12,0x2a,0x7f,0x7f,0x7c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbf,0x12,0x2a,0x7f,
52837 -0x7f,0x80,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xc3,0x12,0x2a,0x7f,0x7f,0x84,0x7e,
52838 -0x0e,0x12,0x27,0xde,0x90,0x9d,0xc7,0x12,0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x27,
52839 -0xde,0x90,0x9d,0xcb,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,
52840 -0xcf,0x12,0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd3,0x12,0x2a,
52841 -0x7f,0x7f,0xd4,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd7,0x12,0x2a,0x7f,0x7f,0xd8,
52842 -0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xdb,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,
52843 -0x27,0xde,0x90,0x9d,0xdf,0x12,0x2a,0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x27,0xde,0x90,
52844 -0x9d,0xe3,0x12,0x2a,0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe7,0x12,
52845 -0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9d,0xeb,0x12,0x2a,0x7f,0x7f,
52846 -0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9d,0xef,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,
52847 -0x12,0x27,0xde,0x90,0x9d,0xf3,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,
52848 -0x90,0x9d,0xf7,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa4,
52849 -0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,
52850 -0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
52851 -0x7f,0x8c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x01,0x00,
52852 -0x00,0x7f,0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0xdb,
52853 -0x25,0xa4,0x7f,0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,
52854 -0xdb,0x25,0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,
52855 -0x20,0xdb,0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,
52856 -0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,
52857 -0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,
52858 -0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,
52859 -0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
52860 -0x80,0x85,0x12,0x2a,0x8b,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,
52861 -0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2f,
52862 -0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,
52863 -0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,
52864 -0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,
52865 -0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd8,
52866 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,
52867 -0xdc,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,
52868 -0x7f,0xe0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x24,0xdb,0x25,
52869 -0xa4,0x7f,0xec,0x7e,0x0e,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,
52870 -0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,
52871 -0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,
52872 -0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
52873 -0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,
52874 -0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,
52875 -0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,
52876 -0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,
52877 -0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,
52878 -0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,
52879 -0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,
52880 -0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,
52881 -0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,
52882 -0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x54,0x0f,
52883 -0xfd,0xec,0x54,0xf0,0xfc,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,
52884 -0x53,0xed,0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,
52885 -0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,
52886 -0x2f,0xd9,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,
52887 -0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,
52888 -0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,
52889 -0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,
52890 -0x08,0x12,0x2f,0xd9,0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,
52891 -0x90,0x9e,0x1e,0xf0,0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,
52892 -0x59,0xc2,0xaf,0x90,0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x4a,0xc1,0x7d,
52893 -0x40,0x7f,0x01,0x12,0x36,0xaf,0xe5,0x59,0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,
52894 -0x45,0x12,0x4a,0xc1,0x90,0x04,0xfd,0xe4,0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,
52895 -0x9e,0x24,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,
52896 -0x9e,0x26,0xf0,0x90,0x9e,0x29,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,
52897 -0xf0,0xa3,0xf0,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,
52898 -0x9e,0x2e,0xf0,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,
52899 -0x00,0x51,0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x02,0x4a,0xc1,0x90,0x9e,0x15,0xe0,0xc3,
52900 -0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0xc1,0x33,0x90,0x9e,0x15,0xe0,0x64,0x14,0x60,
52901 -0x02,0xc1,0x33,0x90,0x9e,0x24,0xe0,0x70,0x25,0x90,0x9e,0x27,0xe0,0x70,0x1f,0x90,
52902 -0x9e,0x25,0xe0,0x70,0x19,0x90,0x9e,0x28,0xe0,0x70,0x13,0x90,0x9e,0x26,0xe0,0x70,
52903 -0x0d,0x90,0x9e,0x29,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,0x54,0xfe,0xf0,0x90,0x9e,
52904 -0x24,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x25,0xe0,0x90,0x04,0x45,0xf0,0x90,0x9e,
52905 -0x26,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x27,0xe0,0x90,0x04,0x48,
52906 -0xf0,0x90,0x9e,0x28,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,0x29,0xe0,0x90,0x04,0x4a,
52907 -0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x10,0xe0,0x90,0x04,0x4c,0xf0,0x90,0x9e,0x11,0xe0,
52908 -0x90,0x04,0x4d,0xf0,0x90,0x9e,0x12,0xe0,0x90,0x04,0x4e,0xf0,0x90,0x9e,0x13,0xe0,
52909 -0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,
52910 -0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x24,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
52911 -0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x34,0xf0,0x90,0x05,0x61,0xe0,0x90,
52912 -0x9e,0x35,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x36,0xf0,0x90,0x05,0x63,0xe0,0x90,
52913 -0x9e,0x37,0xf0,0x90,0x9e,0x2d,0xe0,0xff,0x90,0x9e,0x37,0xe0,0xfe,0xd3,0x9f,0x50,
52914 -0x0b,0x90,0x9e,0x2d,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,0x11,0x90,0x9e,0x1b,0xe0,
52915 -0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x1f,0xe0,0xff,0x12,0x4e,0xd8,0x22,0x90,0x9e,
52916 -0x2e,0xe0,0x64,0x01,0x60,0x08,0x90,0x9e,0x1c,0xe0,0x60,0x02,0xe1,0x55,0x90,0x9e,
52917 -0x10,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x11,0xe0,
52918 -0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x12,0xe0,0xc3,
52919 -0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x11,0xf0,0x80,0x15,0x90,0x9e,
52920 -0x13,0xe0,0xc3,0x94,0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x12,0xf0,0x90,
52921 -0x9e,0x11,0xf0,0x90,0x9e,0x10,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,
52922 -0x30,0xe2,0x32,0x90,0x9e,0x24,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,
52923 -0x24,0x90,0x9e,0x25,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,
52924 -0x90,0x9e,0x26,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x25,
52925 -0xf0,0x90,0x9e,0x24,0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x27,0xe0,
52926 -0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x28,0xe0,0xc3,0x94,
52927 -0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x29,0xe0,0xc3,0x94,0xff,
52928 -0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x04,
52929 -0xfd,0xe0,0x44,0x01,0xf0,0x22,0x3a,0x01,};
52930 -
52931 -// =================== v79 UMC A Cut COMMON 2011-10-06 =====================
52932 -u8 Rtl8192CUFwUMCACutImgArray[UMCACutImgArrayLength] = {
52933 -0xc1,0x88,0x02,0x00,0x4f,0x00,0x00,0x00,0x0a,0x06,0x18,0x09,0x58,0x3f,0x01,0x00,
52934 -0x61,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52935 -0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52936 -0x00,0x00,0x00,0x02,0x5a,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52937 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52938 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52939 -0x00,0x00,0x00,0x02,0x5f,0xfb,0x00,0x00,0x00,0x00,0x00,0xa1,0xdf,0x00,0x00,0x00,
52940 -0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
52941 -0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
52942 -0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
52943 -0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,0x00,0x18,0x22,0x21,0x20,0x18,
52944 -0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,0x20,0x08,0x00,0x20,0x22,0x21,
52945 -0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,0x22,0x20,0x18,0x08,0x00,0x20,
52946 -0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,0x00,0x30,0x31,0x2f,0x10,0x10,
52947 -0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,0x10,0x00,0x00,0x30,0x31,0x20,
52948 -0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,0x04,0x04,0x04,0x05,0x04,0x04,
52949 -0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,
52950 -0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x07,0x0a,0x0b,
52951 -0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,0x08,0x08,0x09,0x09,0x0a,0x0c,
52952 -0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,0x07,0x07,0x08,0x0a,0x04,0x04,
52953 -0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,0x08,0x0b,0x0d,0x0f,0x04,0x04,
52954 -0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,0x04,0x04,0x05,0x05,0x06,0x0a,
52955 -0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,0x00,0x00,0x00,0x00,0x00,0x00,
52956 -0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,0x21,0x27,0x29,0x2a,0x00,0x00,
52957 -0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x18,
52958 -0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,0x00,0xc0,0x00,0xd8,0x00,0x50,
52959 -0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,0x01,0xe0,0x02,0x30,0x01,0x2c,
52960 -0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,0x06,0x40,0x07,0xd0,0x00,0x02,
52961 -0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x24,0x00,0x30,
52962 -0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,0x00,0x50,0x00,0x64,0x00,0xa0,
52963 -0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,0x00,0xf0,0x01,0x68,0x01,0xf4,
52964 -0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,
52965 -0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,0x05,0x07,0x07,0x08,0x0b,0x12,
52966 -0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,
52967 -0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x20,0x1e,
52968 -0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
52969 -0xbb,0x01,0x0c,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,0x22,0x50,
52970 -0x06,0xe9,0x25,0x82,0xf8,0xe6,0x22,0xbb,0xfe,0x06,0xe9,0x25,0x82,0xf8,0xe2,0x22,
52971 -0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe4,0x93,0x22,0xbb,0x01,0x06,
52972 -0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,0xf3,0x22,0xf8,
52973 -0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0x22,
52974 -0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,0x82,0xc8,0xf2,
52975 -0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,
52976 -0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xe0,0xf5,
52977 -0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,0xfe,0x07,0xe3,
52978 -0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,0xf0,0x74,0x01,
52979 -0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,
52980 -0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,0x08,0xe6,0x22,
52981 -0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,0xe5,0x83,0x2a,
52982 -0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
52983 -0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,0x19,0x22,0xbb,
52984 -0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,0xe5,0x82,0x29,
52985 -0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x09,
52986 -0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,0x25,0x82,0xc8,
52987 -0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,0x49,0xfd,0xec,
52988 -0x48,0xfc,0x22,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xa4,
52989 -0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,0xa3,0xe0,0xfa,
52990 -0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,0xf0,0xe5,0x82,
52991 -0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,0xa3,0xea,0xf0,
52992 -0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,
52993 -0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,
52994 -0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x50,0xa9,
52995 -0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,
52996 -0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,
52997 -0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,
52998 -0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x44,0x3d,0xe4,0x7e,0x01,0x93,0x60,
52999 -0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,
53000 -0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,
53001 -0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,
53002 -0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x66,
53003 -0x00,0x41,0x9e,0xae,0x00,0x41,0x9e,0x4d,0x80,0x41,0x9e,0x4e,0x80,0x41,0x9e,0xb0,
53004 -0x00,0x00,0xf0,0x90,0x9e,0x57,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,
53005 -0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x88,0xeb,0xf0,0xa3,0xe0,
53006 -0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x30,0x62,0xd0,0xd0,0x92,0xaf,0x22,
53007 -0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x89,0xf0,
53008 -0x90,0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,
53009 -0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x5c,
53010 -0x14,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x02,0xf1,0x16,0x22,
53011 -0x8f,0x82,0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0xe4,0xf5,0x22,0x7f,0x60,0x7e,
53012 -0x01,0x80,0xed,0x90,0x9e,0x60,0xe0,0xff,0x7d,0x01,0xe1,0x1a,0xb1,0xb1,0xbf,0x01,
53013 -0x0f,0x90,0x9e,0x68,0xe0,0xff,0xe4,0xfd,0xf1,0xfe,0x90,0x04,0x1f,0x74,0x20,0xf0,
53014 -0x22,0x90,0x01,0xca,0xe5,0x25,0xf0,0xef,0x60,0x03,0x12,0x4f,0x2a,0x22,0x22,0x22,
53015 -0x22,0x22,0x00,0x02,0x60,0x8d,0x02,0x60,0x94,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
53016 -0x8b,0x1b,0x8a,0x1c,0x89,0x1d,0x90,0x9e,0x8b,0x71,0x8b,0xab,0x1e,0xaa,0x1f,0xa9,
53017 -0x20,0x90,0x9e,0x8e,0x71,0x8b,0xaf,0x21,0x15,0x21,0xef,0x60,0x1b,0x90,0x9e,0x8e,
53018 -0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x24,0x62,0xff,0x90,0x9e,0x8b,0xe4,0x75,0xf0,
53019 -0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x1b,0xaa,0x1c,0xa9,0x1d,0xd0,0xd0,
53020 -0x92,0xaf,0x22,0x90,0x06,0xa9,0xe0,0xf5,0x50,0x54,0xc0,0x70,0x0d,0x90,0x9e,0x63,
53021 -0xe0,0x54,0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0x91,0xd3,0xe5,0x50,0x30,0xe6,0x17,0x90,
53022 -0x9e,0x63,0xe0,0x44,0x01,0xf0,0x90,0x9e,0x61,0xe0,0x64,0x02,0x60,0x04,0x91,0xdc,
53023 -0x80,0x0b,0x91,0x80,0x80,0x07,0x90,0x9e,0x63,0xe0,0x54,0xfe,0xf0,0xe5,0x50,0x90,
53024 -0x9e,0x63,0x30,0xe7,0x17,0xe0,0x44,0x02,0xf0,0xe4,0x90,0x9e,0x89,0x91,0x52,0x90,
53025 -0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x62,0x74,0x01,0xf0,0x22,0xe0,0x54,0xfd,0xf0,
53026 -0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x04,0x1d,0xe0,0x60,0x1a,0x90,0x05,
53027 -0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,0xe0,0x44,0x40,0xf0,0x90,0x01,0xc7,
53028 -0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xc0,
53029 -0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,
53030 -0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,
53031 -0xdf,0xf0,0x74,0x45,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,0x3c,0xe0,0x55,0x30,0xf5,
53032 -0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,0xf5,0x36,0xa3,0xe0,0x55,
53033 -0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,0x74,0x01,0xf0,0xe5,0x34,
53034 -0x30,0xe1,0x08,0x90,0x01,0x3c,0x74,0x02,0xf0,0xf1,0xbc,0xe5,0x34,0x30,0xe2,0x38,
53035 -0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe0,0x24,0x90,0x9e,0x89,
53036 -0xe4,0xf0,0x90,0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,
53037 -0x01,0x91,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x80,
53038 -0x07,0x90,0x9e,0x5d,0xe4,0xf0,0x91,0xd3,0xe5,0x34,0x30,0xe3,0x38,0x90,0x01,0x3c,
53039 -0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,0x90,0x9e,0x89,0xe4,0xf0,0x90,
53040 -0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,0x62,
53041 -0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x80,0x07,0x90,0x9e,
53042 -0x5c,0xe4,0xf0,0x91,0xd3,0xe5,0x34,0x30,0xe4,0x09,0x90,0x01,0x3c,0x74,0x10,0xf0,
53043 -0x12,0x4d,0xe2,0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,0x3c,0x74,0x20,0xf0,0x12,0x4e,
53044 -0x25,0xe5,0x35,0x30,0xe0,0x1a,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,0x01,0x2f,0xe0,
53045 -0x44,0x7f,0xf0,0x90,0x00,0x83,0xe0,0x90,0x9e,0x60,0xf0,0x12,0x64,0xa1,0x91,0xd3,
53046 -0x74,0xdf,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,
53047 -0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,
53048 -0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x7d,0x01,0x7f,0x0c,0x8f,0x71,0x8d,0x72,0xe5,0x71,
53049 -0x54,0x0f,0xff,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0x6f,0x60,0x72,0xe5,0x71,0x30,0xe2,
53050 -0x2b,0x90,0x9e,0x5e,0xe0,0x20,0xe2,0x05,0x7f,0x01,0x12,0x63,0x92,0x90,0x9e,0x5e,
53051 -0xe0,0x30,0xe3,0x07,0xe5,0x71,0x20,0xe3,0x02,0x80,0x54,0x90,0x9e,0x5e,0xe0,0x20,
53052 -0xe3,0x4c,0xe5,0x71,0x30,0xe3,0x47,0xaf,0x72,0x02,0x63,0x2e,0x90,0x9e,0x5e,0xe0,
53053 -0x54,0x0f,0xff,0xbf,0x0c,0x0d,0xe5,0x71,0x20,0xe3,0x08,0x12,0x5e,0xf1,0xef,0x60,
53054 -0x2d,0xf1,0x9f,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xff,0xbf,0x04,0x0e,0xe5,0x71,0x20,
53055 -0xe2,0x09,0x12,0x62,0x50,0xef,0x60,0x16,0x12,0x48,0xaa,0x90,0x9e,0x5e,0xe0,0x54,
53056 -0x0f,0xff,0xbf,0x02,0x09,0x12,0x62,0xbb,0xef,0x60,0x03,0x12,0x64,0x87,0x22,0x90,
53057 -0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x73,0xb4,0x01,0x05,0x7f,0x01,0x12,0x63,0x4d,
53058 -0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x04,0xf0,0x22,0x90,0x9e,0x62,0xe0,
53059 -0x60,0x0e,0xe4,0xf0,0xa3,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0x07,0x70,0x2b,0x80,0x27,
53060 -0x90,0x9e,0x51,0xe0,0x04,0xf0,0x90,0x9e,0x63,0xe0,0x54,0xef,0xf0,0x90,0x9e,0x56,
53061 -0xe0,0xff,0x90,0x9e,0x51,0xe0,0xd3,0x9f,0x40,0x0d,0xe5,0x73,0xb4,0x01,0x0a,0xa3,
53062 -0xe0,0x70,0x06,0xe0,0x04,0xf0,0x22,0x91,0xd3,0x22,0xe0,0xff,0x7d,0x01,0x90,0x9e,
53063 -0x9c,0xef,0xf0,0xa3,0xed,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x74,0x60,0x04,0xe4,
53064 -0xff,0x11,0x8f,0x90,0x9e,0x9c,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9e,0xe4,0xf0,0xa3,
53065 -0x74,0x80,0xf0,0x90,0x9e,0x9c,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,
53066 -0x25,0xef,0xf0,0x90,0x9e,0x9d,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,0x24,0x0f,0xf5,
53067 -0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,0xf5,0x82,0xe4,
53068 -0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9e,0xa3,0xe0,0xff,0xfd,0x24,
53069 -0x08,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,0xf5,0x82,0xe4,
53070 -0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,
53071 -0xf5,0x83,0xe0,0x54,0xf7,0xf0,0x90,0x9e,0x9e,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xef,
53072 -0x60,0x0b,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x77,
53073 -0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x77,0x66,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,
53074 -0x90,0x05,0x22,0x74,0xff,0xf0,0x12,0x77,0x1c,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,
53075 -0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x31,0x9d,0xe5,0x74,0x60,0x04,0x7f,0x01,0x11,
53076 -0x8f,0x11,0xdf,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,0x22,0x7f,
53077 -0x78,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xff,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,
53078 -0x12,0x22,0x65,0x90,0x9e,0x03,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,0x12,0x22,0x65,
53079 -0x90,0x9e,0x07,0x12,0x25,0x08,0x90,0x9e,0x77,0xe0,0x90,0x9d,0xff,0xb4,0x01,0x0d,
53080 -0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,0x80,0x07,0x12,0x43,0x53,
53081 -0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x78,0x7e,0x08,0x12,
53082 -0x2b,0x08,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,0xff,0xec,0x90,0x80,0x96,
53083 -0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,0x9e,0x07,0x12,0x43,0x53,
53084 -0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,0x12,
53085 -0x2b,0x08,0x7f,0x70,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9e,0x0b,0x12,0x25,0x08,0x90,
53086 -0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa0,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x08,
53087 -0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x00,0x00,0x00,0xe4,0xfd,0xff,0x12,0x30,0x2c,
53088 -0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x00,0x00,
53089 -0x00,0xe4,0xfd,0x7f,0x01,0x12,0x30,0x2c,0x90,0x00,0x11,0xe0,0x54,0xf6,0xf0,0x80,
53090 -0x08,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
53091 -0x7f,0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
53092 -0x90,0x9e,0xad,0xed,0xf0,0x90,0x9e,0xac,0xef,0xf0,0xd3,0x94,0x07,0x50,0x63,0xe0,
53093 -0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,
53094 -0x47,0xe0,0x5f,0xf0,0x31,0xb9,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
53095 -0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0x31,0xb9,0x90,
53096 -0x9e,0xad,0xe0,0x60,0x16,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
53097 -0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,0x66,0x90,0x9e,0xac,0xe0,0xff,
53098 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x45,
53099 -0x80,0x6b,0x90,0x9e,0xac,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
53100 -0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0x31,0xb1,0x90,0x9e,0xac,0xe0,0xff,
53101 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x43,0xe0,
53102 -0x4f,0xf0,0x31,0xb9,0x90,0x9e,0xad,0xe0,0x60,0x1b,0x90,0x9e,0xac,0xe0,0xff,0x74,
53103 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,
53104 -0x42,0xe0,0x4f,0x80,0x1a,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
53105 -0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x42,0xe0,0x5f,0xf0,
53106 -0x31,0xb9,0xd0,0xd0,0x92,0xaf,0x22,0xf0,0x90,0x00,0x45,0xe0,0x54,0xfe,0xfd,0x7f,
53107 -0x45,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,0x00,0xed,0xf0,0x31,
53108 -0xb9,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,0x66,0x24,0x02,0x60,
53109 -0x02,0x61,0x7d,0x90,0x9e,0x1a,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,
53110 -0x7f,0x48,0x51,0xc1,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,0x47,0x51,0xc1,0x90,
53111 -0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,0x9e,0x1a,0xf0,0x90,
53112 -0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,
53113 -0x2b,0x08,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x45,
53114 -0xe0,0x54,0xef,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,
53115 -0x46,0x80,0x38,0x90,0x9e,0x1a,0x74,0x01,0xf0,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,
53116 -0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x90,0x00,0x45,0xe0,
53117 -0x44,0x20,0xfd,0x7f,0x45,0x51,0xc1,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,
53118 -0x51,0xc1,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x51,0xc1,0x22,0x90,0x00,
53119 -0x02,0x12,0x42,0x20,0x90,0x9e,0x1c,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0x25,0xe0,
53120 -0x25,0xe0,0x90,0x9e,0x1b,0xf0,0x12,0x24,0x62,0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1f,
53121 -0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x2b,
53122 -0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x2d,
53123 -0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x1b,0xe0,0xff,
53124 -0xd1,0xd8,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,0x1c,0xe0,0x70,0x02,
53125 -0x81,0x84,0x90,0x9e,0x1b,0xe0,0x70,0x02,0x81,0x84,0x90,0x9e,0x1f,0xe0,0x70,0x02,
53126 -0x81,0x84,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x2e,0x74,
53127 -0x01,0xf0,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x51,0xb8,0x90,0x00,0x46,0xe0,
53128 -0x44,0x01,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,
53129 -0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,
53130 -0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,
53131 -0x45,0x51,0xc1,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,
53132 -0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,
53133 -0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,
53134 -0x3f,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,0xe4,0xff,0x12,
53135 -0x31,0xb7,0x80,0x2b,0x90,0x9e,0x1c,0xe0,0x70,0x2d,0x90,0x9e,0x2e,0x51,0xb7,0x90,
53136 -0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x05,0x22,0xe4,0xf0,0xa2,
53137 -0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,0x31,0x49,0x90,
53138 -0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x22,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x90,0x00,
53139 -0x02,0x12,0x42,0x20,0x90,0x9e,0x1d,0xf0,0xe0,0x30,0xe0,0x4b,0x90,0x9e,0x14,0x74,
53140 -0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0x16,0x12,0x25,0x08,0xab,
53141 -0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xe4,0xfc,0xfd,0xfe,
53142 -0x78,0x1a,0x12,0x24,0xf5,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x16,
53143 -0x12,0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x25,0x08,
53144 -0x90,0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x14,0xf0,0x7f,0x80,0x7e,0x08,
53145 -0x12,0x22,0x65,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,0x25,
53146 -0x08,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,
53147 -0x08,0x12,0x2b,0x08,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,0x51,
53148 -0xc1,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x51,0xc1,0x90,0x00,0x46,0xe0,
53149 -0x44,0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,0x47,0x51,0xc1,0x90,
53150 -0x00,0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x51,0xc1,0x90,0x00,0x46,0xe0,0x54,0xef,
53151 -0xfd,0x7f,0x46,0x51,0xc1,0xe4,0x90,0x9e,0x1a,0xf0,0x22,0x90,0x01,0x3c,0x74,0xff,
53152 -0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xfd,
53153 -0x7f,0x54,0x51,0xc1,0x7d,0xff,0x7f,0x55,0x51,0xc1,0x7d,0xff,0x7f,0x56,0x51,0xc1,
53154 -0x7d,0xff,0x7f,0x57,0x41,0xc1,0x90,0x01,0x30,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
53155 -0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x50,0x51,0xc1,
53156 -0xe4,0xfd,0x7f,0x51,0x51,0xc1,0xe4,0xfd,0x7f,0x52,0x51,0xc1,0xe4,0xfd,0x7f,0x53,
53157 -0x41,0xc1,0xe5,0x22,0x64,0x01,0x70,0x3c,0xf1,0xbe,0xbf,0x01,0x05,0x7f,0x01,0x12,
53158 -0x44,0xf1,0x90,0x00,0x46,0xe0,0x44,0x04,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x00,0x44,
53159 -0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x51,0xc1,0x90,0x00,0x46,0xe0,0x54,0xfb,0xfd,0x7f,
53160 -0x46,0x51,0xc1,0x7f,0x02,0xf1,0xea,0x8f,0x26,0x90,0x01,0xc9,0xe5,0x26,0xf0,0xb4,
53161 -0x01,0x02,0xf1,0x2a,0x22,0x90,0x9e,0x1c,0xe0,0x64,0x01,0x60,0x02,0xc1,0xd7,0x90,
53162 -0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x51,0xc1,0x90,0x9e,0x2e,0xe0,0x70,0x31,
53163 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
53164 -0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,
53165 -0xf0,0x90,0x9e,0x1b,0xe0,0xff,0xd1,0xd8,0x90,0x9e,0x2e,0x74,0x01,0x51,0xb7,0x80,
53166 -0x3f,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x70,0x37,0x90,0x9e,0x1f,0xe0,0xff,0xd1,0xd8,
53167 -0xe4,0x90,0x9e,0x2e,0xf0,0x90,0x00,0x45,0xe0,0x44,0x01,0xfd,0x7f,0x45,0x51,0xc1,
53168 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
53169 -0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,
53170 -0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,0x84,0xf0,0x90,
53171 -0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,0x86,0xf0,0x90,
53172 -0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,
53173 -0x90,0x05,0x61,0xe0,0x90,0x9e,0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,
53174 -0x90,0x05,0x63,0xe0,0x90,0x9e,0x2d,0xf0,0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x2b,
53175 -0xe0,0xd3,0x9e,0x40,0x1e,0xe0,0x2f,0xf0,0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,
53176 -0xe0,0xb4,0xff,0x03,0xe4,0xf0,0x22,0x90,0x9e,0x2d,0x80,0x03,0x90,0x9e,0x2c,0xe0,
53177 -0x04,0xf0,0x22,0x90,0x9e,0x2b,0xe0,0x2f,0xf0,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,
53178 -0xb1,0xf0,0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x51,0xc1,0x90,0x9e,0xb1,
53179 -0xe0,0x44,0xb0,0xfd,0x7f,0x49,0x41,0xc1,0x8e,0x59,0x8f,0x5a,0x8b,0x5b,0x8a,0x5c,
53180 -0x89,0x5d,0xe4,0x90,0x9e,0x34,0xf0,0xef,0x90,0x00,0x31,0xf0,0x31,0xb9,0xe5,0x59,
53181 -0x54,0x03,0xff,0x90,0x00,0x32,0xe0,0x54,0xfc,0x4f,0xf0,0x31,0xb9,0x90,0x00,0x33,
53182 -0xe0,0x54,0x7f,0xf0,0x31,0xb9,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x34,
53183 -0xe0,0xc3,0x94,0x64,0x50,0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x34,0xe0,0xc3,
53184 -0x94,0x64,0x50,0x10,0x90,0x00,0x30,0xe0,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x12,0x42,
53185 -0x4d,0x7f,0x01,0x22,0x7f,0x00,0x22,0x12,0x45,0xb1,0xbf,0x01,0x10,0x90,0x02,0x09,
53186 -0xe0,0xff,0x7d,0x01,0x12,0x47,0xfe,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x7f,0x0b,
53187 -0xf1,0xea,0xef,0x65,0x25,0x60,0x10,0xe5,0x25,0xb4,0x01,0x05,0xe4,0xf5,0x25,0x80,
53188 -0x03,0x75,0x25,0x01,0x7f,0x01,0x22,0x7f,0x00,0x22,0xe4,0x90,0x9e,0x74,0xf0,0x90,
53189 -0x00,0x80,0xe0,0x44,0x80,0xfd,0x7f,0x80,0x41,0xc1,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
53190 -0xd0,0x90,0x9e,0xb2,0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,0x01,0xa8,
53191 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,
53192 -0x12,0x49,0xb9,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,
53193 -0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,0xe4,0xfe,
53194 -0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,
53195 -0x80,0x44,0x90,0x9e,0xb2,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
53196 -0x80,0x02,0xc3,0x33,0xd8,0xfc,0x12,0x49,0xb1,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,
53197 -0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
53198 -0x00,0x42,0xe0,0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,
53199 -0x13,0xce,0x13,0xd8,0xf8,0xff,0xd0,0xd0,0x92,0xaf,0x22,0x75,0x28,0x33,0xe4,0xf5,
53200 -0x29,0x75,0x2a,0x03,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,
53201 -0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0xe4,0x90,0x9e,0x31,0xf0,0xa3,0xf0,
53202 -0x75,0x8e,0x02,0x12,0x4f,0xda,0x12,0x5f,0xa9,0x12,0x5f,0xbc,0xe4,0xf5,0x12,0x12,
53203 -0x6f,0xa1,0x12,0x77,0x5d,0x12,0x60,0x9b,0x12,0x2e,0x01,0x12,0x77,0x18,0x11,0x8b,
53204 -0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,
53205 -0xf0,0xa3,0xe4,0xf0,0x12,0x5f,0xf4,0x12,0x5f,0x91,0x12,0x44,0xfe,0x12,0x7d,0x1d,
53206 -0x90,0x9e,0x33,0xe5,0xd9,0xf0,0x12,0x4d,0x8b,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,
53207 -0x40,0xf0,0x12,0x49,0xb9,0x75,0xe8,0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x01,0xbe,
53208 -0xe0,0x04,0xf0,0x90,0x01,0xc0,0xe0,0x04,0xf0,0x90,0x9e,0x31,0xe0,0x64,0x01,0xf0,
53209 -0x24,0xa9,0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xe5,0x12,0x30,0xe4,0x09,0xc2,
53210 -0xaf,0x53,0x12,0xef,0xd2,0xaf,0x31,0x8e,0xe5,0x12,0x30,0xe6,0x17,0xc2,0xaf,0x53,
53211 -0x12,0xbf,0xd2,0xaf,0x12,0x69,0x51,0x90,0x9e,0x1e,0xe0,0xff,0x60,0x03,0xb4,0x01,
53212 -0x03,0x12,0x7d,0x7b,0x90,0x9e,0x1e,0xe0,0x70,0x03,0x12,0x7e,0x7e,0x31,0x61,0x80,
53213 -0xb8,0x90,0x06,0x34,0xe0,0x60,0x26,0x14,0x70,0x1b,0x7b,0x01,0x7a,0x06,0x79,0x35,
53214 -0x7f,0xf9,0x7e,0x01,0x12,0x4f,0x48,0xbf,0x01,0x09,0x90,0x06,0x35,0xe0,0x54,0x0f,
53215 -0xf0,0x80,0x05,0x80,0x00,0x02,0x77,0x0a,0xe4,0x90,0x06,0x34,0xf0,0x22,0x90,0x01,
53216 -0xcc,0xe0,0x54,0x0f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfd,0x70,0x02,0x41,
53217 -0xcf,0x90,0x9e,0xae,0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,
53218 -0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,0x41,0xc8,0x90,0x9e,0xae,
53219 -0xe0,0x75,0xf0,0x04,0x90,0x01,0xd0,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x35,0xf0,0x75,
53220 -0x1e,0x01,0x75,0x1f,0x9e,0x75,0x20,0x35,0x75,0x21,0x01,0x7b,0x01,0x7a,0x9e,0x79,
53221 -0x36,0x12,0x45,0x09,0x90,0x9e,0x36,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x90,
53222 -0x9e,0xae,0x30,0xe0,0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,0x12,0x43,0x5f,0xe0,
53223 -0x90,0x9e,0x37,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x02,0x90,0x00,0x89,0x12,0x43,
53224 -0x5f,0xe0,0x90,0x9e,0x38,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,
53225 -0x12,0x43,0x5f,0xe0,0x90,0x9e,0x39,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,
53226 -0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,
53227 -0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3b,0xf0,0x80,0x33,0xe0,0x75,
53228 -0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0xae,
53229 -0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x38,0xf0,0x90,
53230 -0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x39,
53231 -0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,0x7a,0x9e,0x79,0x37,0x51,0xd0,0x90,0x9e,0x34,
53232 -0xe0,0xff,0x90,0x9e,0xae,0xe0,0xfe,0x74,0x01,0xa8,0x06,0x08,0x80,0x02,0xc3,0x33,
53233 -0xd8,0xfc,0xf4,0x5f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0xae,0xe0,0xff,0x74,0x01,0xa8,
53234 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,0xf0,0x90,0x9e,0xae,0xe0,
53235 -0x04,0xf0,0xe0,0x54,0x03,0xf0,0x21,0x98,0x90,0x01,0xc6,0xe0,0x44,0x02,0xf0,0x22,
53236 -0x90,0x9e,0x3c,0x12,0x43,0x8b,0xef,0x12,0x43,0x94,0x53,0x0b,0x01,0x53,0x14,0x02,
53237 -0x53,0x2f,0x03,0x53,0x38,0x05,0x53,0x41,0x06,0x53,0x8f,0x07,0x53,0x49,0x09,0x53,
53238 -0x52,0x0c,0x53,0x5b,0x0d,0x53,0x64,0x0e,0x53,0x6d,0x1b,0x53,0x76,0x1c,0x53,0x7f,
53239 -0x2c,0x53,0x1d,0x2d,0x53,0x26,0x2e,0x00,0x00,0x53,0x88,0x90,0x9e,0x3c,0x12,0x43,
53240 -0x6b,0x02,0x61,0x9d,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0xc4,0x90,0x9e,0x3c,
53241 -0x12,0x43,0x6b,0x02,0x71,0xca,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x72,0x12,0x90,
53242 -0x9e,0x3c,0x12,0x43,0x6b,0x02,0x72,0x40,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,
53243 -0x74,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x80,0x47,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
53244 -0x72,0x88,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x4b,0x7e,0x90,0x9e,0x3c,0x12,0x43,
53245 -0x6b,0x02,0x7c,0xea,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x4c,0xb8,0x90,0x9e,0x3c,
53246 -0x12,0x43,0x6b,0x02,0x71,0xbc,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0xa3,0x90,
53247 -0x9e,0x3c,0x12,0x43,0x6b,0x02,0x75,0xea,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,
53248 -0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,
53249 -0x07,0xfd,0xaf,0x06,0x90,0x9e,0x3f,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x8b,
53250 -0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,0x54,
53251 -0x0f,0x90,0x9e,0x44,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,0x13,
53252 -0x54,0x03,0x90,0x9e,0x45,0xf0,0x90,0x9e,0x3f,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,
53253 -0x46,0x12,0x43,0x5f,0xad,0x82,0xac,0x83,0x90,0x9e,0x46,0xec,0xf0,0xa3,0xed,0xf0,
53254 -0xef,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,
53255 -0x12,0x43,0x8b,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,
53256 -0x0f,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x41,0x12,
53257 -0x43,0x6b,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0x90,
53258 -0x00,0x01,0xef,0x12,0x42,0x5f,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,
53259 -0x42,0x20,0xff,0x90,0x9e,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,
53260 -0xf0,0x12,0x24,0x62,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,0x90,
53261 -0x9e,0x3f,0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,
53262 -0x9e,0x40,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,
53263 -0x75,0xf0,0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x45,
53264 -0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,0x59,
53265 -0xef,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x5b,0x8f,0x5c,
53266 -0xe5,0x59,0x75,0xf0,0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x5d,0x01,
53267 -0xf5,0x5e,0x89,0x5f,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x46,0x12,0x43,0x5f,0xaf,
53268 -0x82,0x85,0x83,0x60,0x8f,0x61,0xe5,0x59,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,
53269 -0x96,0x35,0xf0,0x75,0x62,0x01,0xf5,0x63,0x89,0x64,0x74,0x82,0x25,0x59,0xf5,0x82,
53270 -0xe4,0x34,0x95,0xf5,0x83,0xe0,0x12,0x43,0x94,0x55,0x1e,0x00,0x55,0x33,0x01,0x55,
53271 -0x48,0x02,0x55,0x5d,0x03,0x55,0x86,0x04,0x55,0x9b,0x05,0x55,0xb0,0x06,0x55,0xd6,
53272 -0x0c,0x56,0x03,0x0d,0x56,0x30,0x0e,0x56,0x5d,0x0f,0x00,0x00,0x56,0x91,0xe5,0x59,
53273 -0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,
53274 -0x15,0x80,0x3c,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
53275 -0x74,0xf0,0xf0,0xa3,0x74,0x10,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,
53276 -0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x59,0x25,
53277 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,
53278 -0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,
53279 -0xa3,0x74,0x8f,0xf0,0xc1,0x91,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,
53280 -0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,
53281 -0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,
53282 -0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,
53283 -0x74,0x0d,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
53284 -0xe4,0xf0,0xa3,0xf0,0xc1,0x91,0x90,0x04,0x47,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,
53285 -0x12,0x42,0x4d,0x90,0x04,0x46,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,
53286 -0x12,0x42,0x5f,0x90,0x04,0x45,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,
53287 -0x44,0xc1,0x88,0x90,0x04,0x4b,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,
53288 -0x90,0x04,0x4a,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,
53289 -0x90,0x04,0x49,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,
53290 -0x90,0x04,0x4f,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x4e,
53291 -0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x4d,
53292 -0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,
53293 -0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x5d,
53294 -0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x5c,
53295 -0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,
53296 -0xf0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x24,0x62,
53297 -0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x24,0x62,0x5f,0xd0,0x01,0xd0,0x02,0xd0,
53298 -0x03,0x12,0x42,0x4d,0xab,0x5d,0xe5,0x5f,0x24,0x01,0xf9,0xe4,0x35,0x5e,0xfa,0xc0,
53299 -0x03,0xc0,0x02,0xc0,0x01,0x12,0x24,0x62,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x90,
53300 -0x00,0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,
53301 -0x5c,0x82,0x85,0x5b,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,
53302 -0x83,0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x5c,0x82,0x85,0x5b,0x83,
53303 -0xa3,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,0xa3,0xe0,0xfe,
53304 -0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,
53305 -0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x5a,0x0b,0x74,0x01,
53306 -0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,
53307 -0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,
53308 -0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x5d,0x15,0x5a,0xe5,0x5a,0xc3,
53309 -0x94,0x00,0x50,0xca,0x80,0x56,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,
53310 -0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x5a,0x0f,0x74,0x01,0x7e,
53311 -0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,
53312 -0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,
53313 -0x5f,0x4e,0x60,0x08,0x90,0x9e,0x4b,0xe5,0x5a,0xf0,0x80,0x10,0x15,0x5a,0xe5,0x5a,
53314 -0xc3,0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x4b,0xf0,0xe5,0x59,0x25,0xe0,
53315 -0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,
53316 -0xe4,0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,
53317 -0xce,0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
53318 -0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x4c,0xe5,0x5a,0xf0,
53319 -0x80,0x5b,0x05,0x5a,0xe5,0x5a,0xb4,0x10,0xca,0x80,0x52,0xe5,0x59,0x25,0xe0,0x24,
53320 -0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x39,0xe4,
53321 -0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
53322 -0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
53323 -0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x0a,0x05,
53324 -0x5a,0xe5,0x5a,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x4c,0xf0,0x90,0x9e,0x4b,
53325 -0xe0,0xff,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xef,0xf0,0x90,
53326 -0x9e,0x4c,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x49,0x12,0x43,0x5f,0xee,
53327 -0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,
53328 -0x05,0x90,0x9e,0x4b,0x11,0xe0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,
53329 -0x83,0xe0,0xff,0x90,0x9e,0x4c,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x02,0x11,0xe0,0x90,
53330 -0x9e,0x4b,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,0x22,
53331 -0xef,0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,0x94,
53332 -0x03,0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,0x22,
53333 -0xe0,0xfd,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xed,0xf0,0xaf,
53334 -0x59,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,0x50,0x0e,0x74,0x84,
53335 -0x2f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,0x74,0xa6,0x2f,0xf5,
53336 -0x82,0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x78,0xef,0xf0,0x24,0xa6,0xf5,
53337 -0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x79,0xf0,0x7b,0x01,0x7a,0x9e,0x79,
53338 -0x78,0x7d,0x02,0x31,0x3a,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
53339 -0xd0,0x90,0x9e,0x97,0x12,0x43,0x8b,0x90,0x9e,0x9a,0xe0,0x54,0xf0,0x44,0x06,0xff,
53340 -0xf0,0xed,0x54,0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9e,0x97,
53341 -0x12,0x43,0x6b,0x90,0x9e,0x94,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x9a,0xd1,
53342 -0x14,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x50,0x8d,0x51,0xe5,0x51,0x54,0x1f,0xf5,0x56,
53343 -0x74,0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,0x54,0x90,0x04,0xfd,
53344 -0xe0,0xb4,0x01,0x05,0x75,0x57,0x03,0x80,0x03,0x75,0x57,0x01,0xeb,0xc3,0x95,0x57,
53345 -0x40,0x04,0xaf,0x50,0x80,0x33,0xe5,0x54,0x25,0x53,0xf5,0x55,0xe5,0x56,0x90,0x41,
53346 -0xd6,0x93,0xff,0xe5,0x55,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,0x50,0xf5,0x82,0xe4,
53347 -0x34,0x94,0xf5,0x83,0xe4,0xf0,0xad,0x51,0xaf,0x50,0x01,0xf1,0x25,0x50,0xf5,0x82,
53348 -0xe4,0x34,0x94,0xf5,0x83,0xe5,0x55,0xf0,0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,
53349 -0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
53350 -0x83,0xe0,0x54,0x1f,0xf5,0x58,0xd3,0x9f,0x40,0x02,0x8f,0x58,0xe5,0x58,0x25,0xe0,
53351 -0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,
53352 -0xe5,0x58,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,
53353 -0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,
53354 -0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x58,
53355 -0x11,0xf1,0xaf,0x58,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,
53356 -0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,
53357 -0xc0,0x07,0x90,0x01,0xc4,0x74,0x45,0xf0,0x74,0x5a,0xa3,0xf0,0x90,0x01,0x34,0xe0,
53358 -0x55,0x28,0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,0xa3,0xe0,0x55,0x2b,
53359 -0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x61,0xe1,0x90,0x01,0x34,0x74,0x01,0xf0,0x85,
53360 -0xd1,0x08,0x85,0xd2,0x09,0x85,0xd3,0x0a,0x85,0xd4,0x0b,0x85,0xd5,0x0c,0x85,0xd6,
53361 -0x0d,0x85,0xd7,0x0e,0x85,0xd9,0x0f,0xe5,0x0f,0x54,0x40,0xc3,0x13,0xff,0xe5,0x0e,
53362 -0x54,0x20,0x6f,0x70,0x02,0x61,0x93,0xe5,0x0f,0x30,0xe5,0x02,0x61,0x93,0xe5,0x0d,
53363 -0x54,0x3f,0xf5,0x4d,0xe5,0x08,0x54,0x3f,0xf5,0x4e,0xe5,0x0c,0x54,0x1f,0xff,0xe5,
53364 -0x4d,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
53365 -0x42,0x81,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
53366 -0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4e,0xd3,0x94,0x04,0x40,
53367 -0x03,0x75,0x4e,0x04,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,0x12,0x43,0x5f,0x75,
53368 -0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,0xe5,0x0e,0x54,0x1f,
53369 -0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,0x12,0x43,0x5f,
53370 -0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,0xf0,0xe5,0x0f,0x20,
53371 -0xe6,0x23,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
53372 -0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,0x30,0xe7,0x34,0xaf,
53373 -0x4d,0x31,0xd9,0x80,0x2e,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0x44,
53374 -0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,0x30,
53375 -0xe7,0x11,0xe5,0x0a,0x54,0x7f,0xfd,0xe5,0x0e,0x54,0x1f,0xf5,0x53,0xab,0x4e,0xaf,
53376 -0x4d,0x31,0x76,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x45,0x90,0x9e,0x61,0xe0,
53377 -0x60,0x37,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0xd1,0x05,0xef,
53378 -0x64,0x01,0x70,0x2d,0x90,0x9e,0x55,0xe0,0xf5,0x44,0x75,0x45,0x00,0xe4,0xfb,0xfd,
53379 -0x7f,0x58,0x7e,0x01,0x12,0x30,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,
53380 -0x74,0x01,0xf0,0x90,0x9e,0x5d,0xf0,0x80,0x08,0xd1,0x05,0xbf,0x01,0x03,0x12,0x44,
53381 -0xd3,0xe5,0x2c,0x30,0xe1,0x20,0x90,0x01,0x34,0x74,0x02,0xf0,0x85,0xd1,0x13,0x85,
53382 -0xd2,0x14,0x85,0xd3,0x15,0x85,0xd4,0x16,0x85,0xd5,0x17,0x85,0xd6,0x18,0x85,0xd7,
53383 -0x19,0x85,0xd9,0x1a,0xd1,0x9c,0xe5,0x2c,0x30,0xe3,0x06,0x90,0x01,0x34,0x74,0x08,
53384 -0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,0xf0,0x43,0x12,0x10,0xe5,
53385 -0x2c,0x30,0xe5,0x26,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1f,0xe0,0x54,0xdf,0xf0,0x90,
53386 -0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,0xe8,0x00,0x12,0x4d,0xb6,0x90,0x00,
53387 -0x03,0xe0,0x54,0xfb,0xf0,0x12,0x49,0xb9,0x80,0xfe,0xe5,0x2c,0x30,0xe6,0x06,0x90,
53388 -0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe1,0x3c,0x90,0x01,0x36,0x74,0x02,0xf0,
53389 -0x43,0x12,0x40,0x90,0x01,0x02,0xe0,0x54,0x03,0x64,0x01,0x70,0x29,0x90,0x01,0x37,
53390 -0xe0,0x30,0xe0,0x0a,0x74,0x01,0xf0,0x90,0x9e,0x66,0xe4,0xf0,0x80,0x18,0x90,0x9e,
53391 -0x66,0xe0,0x04,0xf0,0xe0,0xc3,0x94,0x0a,0x40,0x0c,0xe4,0xf0,0x90,0x04,0x19,0xe0,
53392 -0x30,0xe0,0x03,0x12,0x4f,0xa7,0xe5,0x2e,0x30,0xe0,0x12,0x90,0x9e,0x76,0x74,0x01,
53393 -0xf0,0x90,0x01,0x36,0xf0,0x12,0x64,0xfe,0x90,0x9e,0x76,0xe4,0xf0,0xe5,0x2e,0x30,
53394 -0xe2,0x78,0x90,0x01,0x36,0x74,0x04,0xf0,0x90,0x01,0xbd,0xe0,0x04,0xf0,0xe5,0x73,
53395 -0x64,0x01,0x70,0x66,0xe5,0x74,0x60,0x62,0xe5,0x74,0x64,0x02,0x60,0x06,0xe5,0x74,
53396 -0x64,0x05,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x50,0xf0,0x90,0x06,0xaa,0xe0,
53397 -0x90,0x9e,0x5f,0xf0,0x90,0x9e,0x50,0xe0,0x70,0x07,0x90,0x9e,0x5f,0xe0,0xff,0x80,
53398 -0x05,0x90,0x9e,0x50,0xe0,0xff,0x90,0x9e,0x50,0xef,0xf0,0x90,0x9e,0x52,0xe0,0x60,
53399 -0x03,0xe0,0x14,0xf0,0x90,0x9e,0x51,0xe4,0xf0,0x90,0x01,0x57,0xf0,0x90,0x01,0x3c,
53400 -0x74,0x02,0xf0,0x90,0x9e,0x63,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xef,0xf0,0xe5,0x74,
53401 -0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,0x45,0x53,0xe5,0x2e,0x30,0xe3,0x28,0x90,
53402 -0x01,0x36,0x74,0x08,0xf0,0xe5,0x73,0x64,0x01,0x70,0x1c,0xe5,0x74,0x60,0x18,0x90,
53403 -0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x89,0xe4,0x12,0x44,
53404 -0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,0x2f,0x90,0x01,0x36,0x74,
53405 -0x10,0xf0,0xe5,0x73,0x64,0x01,0x70,0x23,0xe5,0x74,0x60,0x1f,0x90,0x01,0x57,0xe4,
53406 -0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x62,0xe4,0xf0,0x90,0x9e,0x63,0xe0,
53407 -0x54,0xfd,0xf0,0xe0,0x54,0x07,0x70,0x03,0x12,0x44,0xd3,0xe5,0x2e,0x30,0xe5,0x1f,
53408 -0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x73,0xb4,0x01,0x14,0xe5,0x74,0x60,0x10,0x90,
53409 -0x9e,0x61,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xdc,0x80,0x03,0x12,0x44,0x80,0xe5,
53410 -0x2e,0x30,0xe6,0x1e,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x73,0xb4,0x01,0x13,0xe5,
53411 -0x74,0x60,0x0f,0x90,0x9e,0x63,0xe0,0x54,0xfe,0xf0,0xe0,0x54,0x07,0x70,0x03,0x12,
53412 -0x44,0xd3,0xe5,0x2f,0x30,0xe1,0x08,0x90,0x01,0x37,0x74,0x02,0xf0,0xd1,0xbd,0x74,
53413 -0x45,0x04,0x90,0x01,0xc4,0xf0,0x74,0x5a,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,
53414 -0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,
53415 -0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,
53416 -0x02,0x7f,0x00,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x91,0x12,0x43,
53417 -0x8b,0x90,0x9e,0x75,0xe0,0x64,0x02,0x60,0x6e,0x90,0x9e,0x75,0xe0,0x64,0x01,0x70,
53418 -0x66,0x90,0x9e,0xb0,0xe0,0xff,0x04,0xf0,0x90,0x9e,0x91,0x12,0x43,0x6b,0x90,0x00,
53419 -0x01,0xef,0x12,0x42,0x5f,0x7f,0xaf,0x7e,0x01,0xf1,0x3b,0xef,0x60,0x49,0x90,0x9e,
53420 -0x91,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x75,0x21,0x02,0x7b,0x01,0x7a,
53421 -0x01,0x79,0xa0,0x12,0x45,0x09,0x90,0x9e,0x94,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,
53422 -0x89,0x20,0x90,0x9e,0x91,0x12,0x43,0x6b,0x12,0x24,0x62,0xff,0xc4,0x54,0x0f,0xf5,
53423 -0x21,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x12,0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,
53424 -0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x2f,0xe0,
53425 -0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,0x80,0xf0,0x7b,0x00,0x7a,0x00,0x79,0x13,
53426 -0x90,0x9e,0x94,0x12,0x43,0x8b,0x0b,0x7a,0x9e,0x79,0x2f,0xc1,0x14,0x7d,0x02,0x7f,
53427 -0x03,0x12,0x31,0x2c,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x23,0x90,0x9e,0x61,
53428 -0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0f,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,
53429 -0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x1a,0xe4,0xff,0x12,0x48,0x8f,
53430 -0x22,0xd1,0x05,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x32,
53431 -0x90,0x9e,0x5d,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x24,0x90,0x9e,
53432 -0x5c,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x16,0x90,0x9e,0x60,0xe0,
53433 -0x54,0x0f,0xd3,0x94,0x04,0x40,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x03,0x7f,
53434 -0x01,0x22,0x90,0x01,0xb8,0x74,0x08,0xf0,0x7f,0x00,0x22,0xd3,0x10,0xaf,0x01,0xc3,
53435 -0xc0,0xd0,0x90,0x9e,0xa0,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,
53436 -0x9e,0xa0,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,
53437 -0xa3,0xe0,0x94,0xe8,0x90,0x9e,0xa2,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,
53438 -0x44,0x10,0xf0,0x7f,0x00,0x80,0x15,0x90,0x9e,0xa2,0xe4,0x75,0xf0,0x01,0x12,0x42,
53439 -0x81,0x7f,0x0a,0x7e,0x00,0x12,0x32,0x15,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,
53440 -0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,0x01,0x38,0xe5,0x30,0xf0,
53441 -0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0x90,0x00,0x02,0xe0,0x54,0xe0,0x90,
53442 -0x9e,0x75,0x60,0x04,0x74,0x01,0xf0,0x22,0x74,0x02,0xf0,0x22,0x90,0x00,0xf3,0xe0,
53443 -0x30,0xe3,0x08,0x90,0x9e,0x77,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9e,0x77,0xf0,
53444 -0x90,0x9e,0x77,0xe0,0xb4,0x01,0x12,0x90,0x00,0xf2,0xe0,0x30,0xe7,0x0b,0x90,0x9e,
53445 -0x64,0x74,0xfd,0xf0,0xa3,0x74,0x33,0xf0,0x22,0x90,0x9e,0x64,0x74,0xfd,0xf0,0xa3,
53446 -0x74,0x2f,0xf0,0x22,0x90,0x01,0x64,0x74,0xa0,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,
53447 -0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,
53448 -0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0xfb,0xf0,0x74,0x5f,
53449 -0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,0x90,0x00,0x55,0xe0,0x5f,0xf5,
53450 -0x3d,0xe5,0x3d,0x30,0xe6,0x18,0x74,0x40,0xf0,0x90,0x9e,0x1d,0xe0,0x54,0x03,0xff,
53451 -0xbf,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0x60,0x05,0x7f,0x01,0x12,0x4a,0xd6,0xe5,0x3d,
53452 -0x30,0xe7,0x15,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x9e,0x1d,0xe0,0x54,0x03,0xff,
53453 -0xbf,0x03,0x05,0x7f,0x02,0x12,0x4a,0xd6,0x90,0x01,0xc4,0x74,0xfb,0xf0,0x74,0x5f,
53454 -0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,
53455 -0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x8f,0x6b,0x8c,
53456 -0x6c,0x8d,0x6d,0x22,0x8f,0x6e,0x8c,0x6f,0x8d,0x70,0x22,0xe4,0xf5,0x73,0x90,0x9e,
53457 -0x63,0xf0,0xf5,0x74,0x90,0x9e,0x60,0x74,0x0c,0xf0,0x90,0x9e,0x5e,0xf0,0xe4,0x90,
53458 -0x9e,0x61,0xf0,0x90,0x9e,0x5d,0xf0,0x90,0x9e,0x5c,0xf0,0x90,0x9e,0x5f,0x04,0xf0,
53459 -0x90,0x9e,0x50,0xf0,0xe4,0x90,0x9e,0x62,0xf0,0x90,0x9e,0x52,0xf0,0x90,0x9e,0x5a,
53460 -0x74,0x07,0xf0,0xe4,0x90,0x9e,0x51,0xf0,0x90,0x9e,0x58,0xf0,0xa3,0x74,0x02,0xf0,
53461 -0x90,0x9e,0x56,0x14,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x55,0x74,0x14,0xf0,0x90,
53462 -0x9e,0x5b,0x74,0x05,0xf0,0xe4,0x90,0x9e,0x54,0xf0,0x90,0x9e,0x4f,0xf0,0x90,0x9e,
53463 -0x76,0xf0,0x22,0xe4,0x90,0x9e,0x62,0xf0,0x90,0x9e,0x51,0xf0,0x90,0x9e,0x63,0xf0,
53464 -0x22,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x31,0x03,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x12,
53465 -0x24,0x62,0xf5,0x74,0x14,0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,
53466 -0x40,0x7f,0x01,0x80,0x3a,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,
53467 -0x20,0xfd,0xe4,0xff,0x31,0x72,0x80,0x27,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,
53468 -0x02,0x12,0x42,0x20,0xfd,0x7f,0x01,0x31,0x72,0x1f,0x80,0x13,0xab,0x59,0xaa,0x5a,
53469 -0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x7f,0x02,0x31,0x72,0xe4,0xff,0x31,
53470 -0xc6,0x22,0xef,0x24,0xfe,0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x5f,0x74,0x01,0xf0,
53471 -0x80,0x16,0xed,0x70,0x0a,0x90,0x9e,0x5b,0xe0,0x90,0x9e,0x5f,0xf0,0x80,0x05,0x90,
53472 -0x9e,0x5f,0xed,0xf0,0x90,0x9e,0x5f,0xe0,0x90,0x9e,0x50,0xf0,0x22,0xd3,0x10,0xaf,
53473 -0x01,0xc3,0xc0,0xd0,0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x61,0xf0,0x90,0x00,
53474 -0x03,0x12,0x42,0x20,0x90,0x9e,0x4f,0xf0,0x12,0x24,0x62,0x65,0x74,0x60,0x02,0x31,
53475 -0x11,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x64,0x01,0x70,0x30,0x7d,0x7c,0x7f,0x02,0x12,
53476 -0x31,0x2c,0x7d,0x02,0x7f,0x03,0x12,0x31,0x2c,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,
53477 -0x3c,0x74,0x02,0xf0,0x12,0x47,0x16,0xe4,0xff,0x12,0x48,0x8f,0x90,0x06,0x04,0xe0,
53478 -0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,0x7c,
53479 -0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x31,0x9d,0x7d,0x02,0x7f,0x03,0x12,
53480 -0x31,0x9d,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,0xf0,
53481 -0x90,0x9e,0x58,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x73,0x30,0xe0,0x1b,0x90,
53482 -0x9e,0x52,0xe0,0x70,0x1a,0xe0,0x04,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,0x94,
53483 -0x04,0x50,0x0c,0x7d,0x01,0x7f,0x04,0x02,0x47,0x1a,0xe4,0x90,0x9e,0x52,0xf0,0x22,
53484 -0x12,0x5e,0x05,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x52,
53485 -0x90,0x9e,0x63,0xe0,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x42,
53486 -0x90,0x9e,0x60,0xe0,0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,
53487 -0xf0,0x80,0x2f,0x90,0x9e,0x63,0xe0,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,
53488 -0x80,0x20,0x90,0x9e,0x63,0xe0,0x30,0xe4,0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,
53489 -0x11,0x90,0x9e,0x52,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x20,0xf0,0x80,0x03,0x7f,
53490 -0x01,0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,0x7f,0x00,0x22,0xe5,0x12,0x60,0x08,0x90,
53491 -0x01,0xb9,0x74,0x01,0xf0,0x80,0x5e,0x90,0x9e,0x60,0xe0,0x54,0x0f,0xd3,0x94,0x01,
53492 -0x40,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x4b,0x90,0x02,0x87,0xe0,0x60,0x08,
53493 -0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x3d,0x90,0x9e,0x75,0xe0,0xb4,0x02,0x10,0x90,
53494 -0x9e,0x64,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x17,0x80,0x26,0x90,
53495 -0x9e,0x75,0xe0,0xb4,0x01,0x0e,0x90,0x01,0xaf,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,
53496 -0x08,0xf0,0x80,0x11,0x90,0x9e,0x54,0xe0,0x70,0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,
53497 -0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,0x7f,0x00,0x22,0x90,0x06,
53498 -0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,0x73,0xb4,0x01,0x04,0xe4,0xff,0x71,
53499 -0x4d,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x0c,0xf0,0x22,0x8f,0x76,0x90,
53500 -0x9e,0x5e,0xe0,0x90,0x01,0xc1,0xf0,0xa3,0xe5,0x12,0xf0,0x12,0x45,0xb1,0xef,0x64,
53501 -0x01,0x70,0x2e,0x90,0x9e,0x69,0x12,0x47,0xfa,0xe5,0x76,0x60,0x10,0x74,0x21,0x2f,
53502 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,
53503 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,0x1f,0x74,0x20,
53504 -0xf0,0x22,0x90,0x9e,0xaf,0xef,0xf0,0x71,0xb0,0x90,0x9e,0xaf,0xe0,0x60,0x05,0x90,
53505 -0x05,0x22,0xe4,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x04,0xf0,0x22,
53506 -0x90,0x00,0x11,0xe0,0x44,0x09,0xf0,0x12,0x49,0xb9,0x90,0x9d,0xff,0x12,0x43,0x53,
53507 -0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x78,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x03,
53508 -0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,
53509 -0x90,0x9e,0x07,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,
53510 -0x12,0x2b,0x08,0x90,0x9e,0x0b,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
53511 -0x70,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x03,0x2d,0x95,
53512 -0xe4,0xfd,0xff,0x12,0x30,0x2c,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x68,
53513 -0x12,0x25,0x14,0x00,0x03,0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x30,0x2c,0x22,0x8f,
53514 -0x27,0xe4,0x90,0x9e,0xa8,0xf0,0xa3,0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,0x30,0xe7,
53515 -0x02,0x7f,0x01,0xef,0x65,0x27,0x60,0x3e,0xc3,0x90,0x9e,0xa9,0xe0,0x94,0x88,0x90,
53516 -0x9e,0xa8,0xe0,0x94,0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,
53517 -0x9e,0xa8,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x32,0x15,
53518 -0xd3,0x90,0x9e,0xa9,0xe0,0x94,0x32,0x90,0x9e,0xa8,0xe0,0x94,0x00,0x40,0xb9,0x90,
53519 -0x01,0xc7,0xe0,0x30,0xe0,0xb2,0x22,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,
53520 -0x01,0xf0,0x12,0x44,0xff,0x12,0x45,0x00,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,
53521 -0x22,0x90,0x9e,0x60,0xe0,0x30,0xe6,0x1c,0xe0,0x54,0x0f,0xff,0x90,0x9e,0x4e,0xe0,
53522 -0xfe,0x4f,0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x4e,0xf0,0x90,0x9e,0x60,
53523 -0xe0,0x54,0xbf,0xf0,0x22,0x8f,0x75,0x12,0x45,0xb1,0xef,0x64,0x01,0x70,0x2e,0x90,
53524 -0x9e,0x6a,0x12,0x47,0xfa,0xe5,0x75,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,
53525 -0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,
53526 -0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xe4,0x90,
53527 -0x9e,0x2f,0xf0,0xe5,0x74,0x60,0x6a,0xe5,0x73,0x64,0x01,0x70,0x64,0xe5,0x74,0x14,
53528 -0x60,0x29,0x24,0xfd,0x60,0x25,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x23,0x90,0x9e,
53529 -0x50,0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x16,0x90,0x9e,0x50,0xe0,0x70,
53530 -0x0a,0x90,0x9e,0x5f,0xe0,0x90,0x9e,0x50,0xf0,0x80,0x00,0x90,0x9e,0x2f,0x74,0x01,
53531 -0xf0,0x90,0x9e,0x2f,0xe0,0x60,0x2a,0x90,0x9e,0x63,0xe0,0x44,0x10,0xf0,0xe4,0x90,
53532 -0x9e,0x89,0xf0,0x90,0x9e,0x5a,0x12,0x44,0x56,0x90,0x01,0x57,0x74,0x05,0xf0,0x90,
53533 -0x9e,0x5e,0xe0,0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,
53534 -0x1a,0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,0xc4,0x54,0xf0,
53535 -0xfd,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,
53536 -0x0f,0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
53537 -0xe0,0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x4d,
53538 -0xf0,0x22,0xad,0x07,0xed,0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,0xf5,0x82,0xe4,
53539 -0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,
53540 -0x83,0xe0,0x54,0x7f,0xf5,0x64,0xe5,0x64,0x54,0x1f,0xfc,0x75,0xf0,0x09,0xed,0x90,
53541 -0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x90,0x9e,0x3e,0xf0,0xed,0x25,0xe0,0x24,0x02,
53542 -0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x3f,0xcb,0xf0,
53543 -0xa3,0xeb,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,
53544 -0xfb,0xa3,0xe0,0x90,0x9e,0x41,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x66,
53545 -0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,0xfb,0xed,0x25,
53546 -0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,0xeb,0xf0,0xec,
53547 -0xc3,0x9f,0x40,0x02,0xc1,0xc9,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,
53548 -0xec,0xf0,0x04,0xfb,0x90,0x9e,0x3e,0xe0,0xff,0xeb,0xd3,0x9f,0x40,0x02,0xc1,0xfa,
53549 -0xeb,0xc3,0x94,0x10,0x40,0x21,0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,
53550 -0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x3f,0xe0,0x5e,
53551 -0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x23,0xeb,0xc3,0x94,0x10,0x50,0x39,0x74,0x01,0x7e,
53552 -0x00,0xa8,0x03,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,
53553 -0x41,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x1c,0xeb,0x64,0x13,0x60,0x08,0xeb,
53554 -0x64,0x12,0x60,0x03,0xbb,0x11,0x09,0x90,0x9e,0x3f,0xe0,0x30,0xe0,0x02,0x7b,0x18,
53555 -0xac,0x03,0x8c,0x64,0x80,0x34,0x0b,0x80,0x8b,0x90,0x9e,0x3e,0xe0,0xfb,0x6c,0x70,
53556 -0x69,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,
53557 -0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,0xe0,0xb4,0x01,0x0c,0xe5,0x64,0x20,0xe6,0x07,
53558 -0xec,0x44,0x40,0xf5,0x64,0x80,0x03,0xaf,0x64,0x22,0xec,0x25,0xe0,0x24,0x9e,0xf5,
53559 -0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,
53560 -0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,
53561 -0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,
53562 -0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,
53563 -0x9e,0x3e,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,
53564 -0xac,0x07,0x8f,0x64,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
53565 -0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,
53566 -0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,
53567 -0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,
53568 -0xef,0xf0,0xaf,0x64,0x22,0x74,0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,
53569 -0xf0,0xaf,0x05,0xe5,0x64,0x44,0x80,0xfd,0x12,0x58,0xf1,0xe5,0x64,0x44,0x80,0xff,
53570 -0x22,0xac,0x07,0xec,0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,
53571 -0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,
53572 -0xe0,0x54,0x7f,0xf5,0x64,0xe5,0x64,0x54,0x1f,0xff,0x90,0x9e,0x40,0xf0,0x75,0xf0,
53573 -0x09,0xec,0x90,0x96,0x49,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x42,0xf0,0x75,0xf0,0x09,
53574 -0xec,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xfe,0x90,0x9e,0x43,0xf0,0xec,0x25,0xe0,
53575 -0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x44,
53576 -0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,
53577 -0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x46,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,
53578 -0x40,0x0a,0x90,0x9e,0x43,0xe0,0x90,0x9e,0x40,0xf0,0xf5,0x64,0xed,0x70,0x02,0x21,
53579 -0x07,0x90,0x9e,0x41,0xed,0xf0,0xe5,0x64,0x30,0xe6,0x0a,0x90,0x9e,0x40,0xe0,0xf5,
53580 -0x64,0xa3,0xe0,0x14,0xf0,0x90,0x9e,0x41,0xe0,0x70,0x02,0x21,0x07,0x90,0x9e,0x40,
53581 -0xe0,0xff,0xd3,0x94,0x00,0x50,0x02,0x21,0x07,0xe4,0x90,0x9e,0x3f,0xf0,0xef,0x14,
53582 -0x90,0x9e,0x3e,0xf0,0x90,0x9e,0x42,0xe0,0xfd,0x90,0x9e,0x3e,0xe0,0xff,0xd3,0x9d,
53583 -0x40,0x6b,0xef,0x94,0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,
53584 -0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x46,0xe0,
53585 -0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x27,0x90,0x9e,0x3e,0xe0,0xff,0xc3,0x94,0x10,
53586 -0x50,0x33,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
53587 -0xd8,0xf9,0xff,0x90,0x9e,0x44,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,
53588 -0x9e,0x3e,0xe0,0xf5,0x64,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,
53589 -0x3f,0xe0,0x6f,0x60,0x08,0x90,0x9e,0x3e,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x41,
53590 -0xe0,0xff,0x90,0x9e,0x3f,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x3e,0xe0,0xb5,0x05,
53591 -0x06,0x90,0x9e,0x42,0xe0,0xf5,0x64,0xe5,0x64,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,
53592 -0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x64,0x25,0xe0,0x24,
53593 -0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,
53594 -0xc3,0x13,0xfe,0xef,0x13,0xff,0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,
53595 -0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x04,0xad,0x64,0x12,0x58,0xf1,0xaf,0x64,
53596 -0x22,0xe4,0xf5,0x59,0xe5,0x59,0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,
53597 -0x95,0x01,0xe0,0xff,0x90,0x9a,0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,
53598 -0xe5,0x59,0x90,0x96,0x4b,0x12,0x43,0x5f,0xe0,0x64,0x01,0x60,0x02,0xe1,0x95,0xe5,
53599 -0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,
53600 -0xd3,0x94,0x00,0xee,0x94,0x00,0x50,0x02,0xe1,0x95,0xe5,0x59,0x94,0x20,0x40,0x08,
53601 -0x90,0x9a,0xc5,0xe0,0x60,0x02,0xe1,0xa0,0xe5,0x59,0x75,0xf0,0x0a,0xa4,0x24,0x00,
53602 -0xf9,0x74,0x90,0x35,0xf0,0x75,0x5e,0x01,0xf5,0x5f,0x89,0x60,0xe5,0x59,0x25,0xe0,
53603 -0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x38,
53604 -0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,
53605 -0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x3a,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,
53606 -0xc3,0x94,0x20,0x50,0x14,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
53607 -0xe0,0x54,0x3f,0x90,0x9e,0x34,0xf0,0x80,0x12,0x74,0xa6,0x25,0x59,0xf5,0x82,0xe4,
53608 -0x34,0x9c,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfe,
53609 -0x54,0x1f,0xa3,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,
53610 -0x90,0x9e,0x3d,0xf0,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,
53611 -0xc3,0x94,0x05,0x40,0x02,0x81,0x6e,0x90,0x9e,0x3d,0xe0,0xff,0x90,0x9e,0x35,0xe0,
53612 -0x9f,0x40,0x13,0x90,0x9e,0x3d,0xe0,0x90,0x9e,0x35,0xf0,0xee,0x54,0x40,0xfe,0x90,
53613 -0x9e,0x34,0xf0,0xef,0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x64,0x01,0x70,0x29,0x90,0x9e,
53614 -0x35,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,
53615 -0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xda,0x80,0x30,0x90,0x9e,
53616 -0x35,0xe0,0x90,0x40,0xf6,0x80,0x27,0x90,0x9e,0x35,0xe0,0xff,0x90,0x41,0x4a,0x93,
53617 -0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,
53618 -0x06,0xef,0x90,0x41,0x12,0x80,0x07,0x90,0x9e,0x35,0xe0,0x90,0x41,0x2e,0x93,0x90,
53619 -0x9e,0x3c,0xf0,0x90,0x9e,0x3c,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x50,0xf9,0x74,0x40,
53620 -0x35,0xf0,0x75,0x5b,0xff,0xf5,0x5c,0x89,0x5d,0x90,0x9e,0x34,0xe0,0x90,0x41,0xf2,
53621 -0x93,0xff,0xd3,0x90,0x9e,0x3b,0xe0,0x9f,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x09,
53622 -0xe4,0xfd,0xaf,0x59,0x12,0x67,0xb1,0xe1,0x2c,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,
53623 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xf5,0x61,0xa3,0xe0,0xf5,0x62,0xab,0x5b,0xaa,
53624 -0x5c,0xa9,0x5d,0x12,0x24,0x62,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,
53625 -0x42,0x97,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,
53626 -0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x7e,
53627 -0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,0xf0,
53628 -0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,
53629 -0x5c,0xa9,0x5d,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,
53630 -0xa9,0x60,0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,
53631 -0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,
53632 -0x03,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x06,
53633 -0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,
53634 -0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x04,0x12,0x42,0x20,0xff,
53635 -0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,0xac,
53636 -0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,
53637 -0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,0x38,
53638 -0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x24,0x7b,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,
53639 -0x0c,0xe5,0x62,0x9f,0xf5,0x62,0xe5,0x61,0x9e,0xf5,0x61,0x80,0x05,0xe4,0xf5,0x61,
53640 -0xf5,0x62,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,
53641 -0x61,0xf0,0xa3,0xe5,0x62,0xf0,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,
53642 -0xe4,0x34,0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,
53643 -0x07,0xaf,0x59,0x12,0x65,0xb2,0xe1,0x00,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x9e,
53644 -0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,
53645 -0x61,0x50,0x02,0xe1,0x00,0x7d,0x01,0xaf,0x59,0x12,0x67,0xb1,0xe1,0x00,0x74,0xe6,
53646 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,0xc1,
53647 -0x09,0x90,0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x19,
53648 -0x40,0x3d,0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x11,0x40,
53649 -0x2e,0x80,0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x35,0xe0,0xc3,
53650 -0x94,0x0a,0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x03,
53651 -0x40,0x0d,0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,
53652 -0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0x74,0x44,0x25,
53653 -0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,0xa1,
53654 -0xb6,0x90,0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0xa1,0xb6,0x74,0x85,0x25,0x59,0xf5,
53655 -0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,0xe4,
53656 -0x33,0xfe,0x74,0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,0xd3,
53657 -0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,0x33,
53658 -0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,0xee,
53659 -0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,
53660 -0x9d,0xf5,0x83,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,0x59,
53661 -0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,0x63,
53662 -0x05,0x80,0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x63,0x03,0x80,0x03,0x75,0x63,
53663 -0x01,0x74,0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,0x85,
53664 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,
53665 -0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
53666 -0x83,0xe0,0x04,0xf0,0x80,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,
53667 -0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x35,0xe0,0xff,0x74,0x26,0x25,0x59,0xf5,
53668 -0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,
53669 -0x98,0xf5,0x83,0xe5,0x63,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4c,0x12,0x43,
53670 -0x5f,0xe0,0xb4,0x01,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,
53671 -0x9c,0xf5,0x83,0xe4,0xf0,0xad,0x63,0xc1,0xfb,0xec,0x64,0x06,0x60,0x02,0xe1,0x00,
53672 -0xf5,0x61,0xf5,0x62,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,
53673 -0xa3,0xe0,0xfd,0x12,0x24,0x7b,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,
53674 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0xe4,0xf5,0x5a,0xab,
53675 -0x5e,0xaa,0x5f,0xa9,0x60,0x75,0xf0,0x02,0xe5,0x5a,0xa4,0xf5,0x82,0x85,0xf0,0x83,
53676 -0x12,0x42,0xc2,0xfd,0xac,0xf0,0xe5,0x5a,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,0x12,
53677 -0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,
53678 -0xe0,0x95,0x62,0x90,0x9e,0x36,0xe0,0x95,0x61,0x40,0x07,0x05,0x5a,0xe5,0x5a,0xb4,
53679 -0x05,0xbd,0xe5,0x5a,0xc3,0x13,0xf5,0x5a,0xe5,0x63,0xb4,0x01,0x06,0xe5,0x5a,0x70,
53680 -0x46,0x80,0x13,0xe5,0x63,0xb4,0x03,0x15,0xe5,0x5a,0x70,0x05,0x75,0x63,0x03,0x80,
53681 -0x39,0xe5,0x5a,0xb4,0x01,0x05,0x75,0x63,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x63,0xb4,
53682 -0x05,0x28,0xe5,0x5a,0x70,0x05,0x75,0x63,0x05,0x80,0x0d,0xe5,0x5a,0xb4,0x01,0x05,
53683 -0x75,0x63,0x03,0x80,0x03,0x75,0x63,0x01,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,
53684 -0x9e,0x3a,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0xd3,0x90,0x9e,0x3b,0xe0,0x94,
53685 -0x03,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0x74,0x84,0x25,0x59,
53686 -0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe5,0x63,0xf0,0xfd,0xaf,0x59,0x12,0x65,0x72,
53687 -0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,0x74,
53688 -0xe6,0x50,0x0e,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,0x80,
53689 -0x0b,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x5e,0xaa,0x5f,
53690 -0xa9,0x60,0xe4,0xf5,0xf0,0x12,0x42,0xfa,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,
53691 -0x02,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x43,0x19,
53692 -0x90,0x00,0x06,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,
53693 -0x43,0x19,0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,
53694 -0xf0,0xa3,0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,
53695 -0xe4,0xf0,0xa3,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,
53696 -0x83,0xe4,0xf0,0xa3,0xf0,0x05,0x59,0xe5,0x59,0xc3,0x94,0x40,0x50,0x02,0x21,0x54,
53697 -0x22,0x90,0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,
53698 -0xe4,0xf0,0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x0d,
53699 -0xbd,0x10,0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,0xe4,0xfd,0x75,
53700 -0xf0,0x0a,0xed,0x90,0x90,0x00,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,
53701 -0xed,0x90,0x90,0x02,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,
53702 -0x90,0x04,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x06,
53703 -0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x08,0x12,0x43,
53704 -0x5f,0xe4,0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0x74,
53705 -0x13,0xf0,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0x74,0x84,
53706 -0x2d,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,0x24,0x80,0xf5,
53707 -0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,
53708 -0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,
53709 -0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x44,0xf5,
53710 -0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,
53711 -0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,
53712 -0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,0xf5,0x82,0xe4,
53713 -0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,
53714 -0xe4,0xf0,0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x41,
53715 -0xc4,0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,0x74,0x01,0x93,0x2f,0xff,0xe4,
53716 -0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
53717 -0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4b,
53718 -0x12,0x43,0x5f,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,
53719 -0x74,0x01,0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0c,0xf0,
53720 -0x75,0xf0,0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x5f,0x74,0xff,0xf0,0xa3,0xf0,0x75,
53721 -0xf0,0x09,0xed,0x90,0x96,0x44,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0x75,
53722 -0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0x74,0x13,0xf0,0x75,0xf0,0x09,0xed,
53723 -0x90,0x96,0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,
53724 -0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,
53725 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x03,
53726 -0x02,0x6f,0xcf,0x22,0x12,0x24,0x62,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,
53727 -0x02,0x12,0x42,0x20,0xff,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,
53728 -0xef,0xf0,0x22,0xe5,0x59,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x96,
53729 -0x42,0xf0,0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,
53730 -0xc4,0x13,0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x53,0xa4,0x12,0x24,0x62,0x90,
53731 -0x95,0x01,0xf0,0x22,0x12,0x24,0x62,0xf5,0x73,0x22,0x90,0x00,0x02,0x12,0x42,0x20,
53732 -0xff,0x30,0xe0,0x25,0x12,0x24,0x62,0x90,0x9e,0x56,0xf0,0x90,0x00,0x01,0x12,0x42,
53733 -0x20,0x90,0x9e,0x57,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x55,0xf0,0x90,0x00,
53734 -0x03,0x12,0x42,0x20,0x90,0x9e,0x5b,0xf0,0x22,0x90,0x9e,0x56,0x74,0x01,0xf0,0x90,
53735 -0x9e,0x57,0x74,0x03,0xf0,0x90,0x9e,0x55,0x74,0x14,0xf0,0x90,0x9e,0x5b,0x74,0x05,
53736 -0xf0,0x22,0x12,0x24,0x62,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x5a,0xf0,
53737 -0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x58,0xe4,0xf0,0xa3,0xef,0xf0,0x22,
53738 -0x90,0x9e,0x5a,0x74,0x07,0xf0,0x90,0x9e,0x58,0xe4,0xf0,0xa3,0x74,0x02,0xf0,0x22,
53739 -0x90,0x02,0x09,0xe0,0xfd,0x12,0x24,0x62,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x67,
53740 -0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x68,0xf0,0x90,0x00,
53741 -0x02,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x69,0xf0,0x90,0x00,0x03,0x12,0x42,
53742 -0x20,0xff,0xed,0x2f,0x90,0x9e,0x6a,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0xae,
53743 -0x05,0xed,0x2f,0x90,0x9e,0x6b,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,
53744 -0x9e,0x3f,0x12,0x43,0x8b,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,
53745 -0xc2,0xfa,0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,0x90,0x9e,0x3f,0x12,0x43,0x6b,
53746 -0x90,0x00,0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,0x24,0x62,0xff,0x60,0x2c,0xb5,
53747 -0x22,0x16,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0x65,0x24,
53748 -0x70,0x04,0xe5,0x23,0x65,0xf0,0x60,0x23,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,
53749 -0x01,0x12,0x42,0xc2,0xff,0xae,0xf0,0x71,0x00,0x80,0x10,0x90,0x9e,0x3f,0x12,0x43,
53750 -0x6b,0x12,0x24,0x62,0x65,0x22,0x60,0x03,0x12,0x44,0xca,0xd0,0xd0,0x92,0xaf,0x22,
53751 -0x90,0x9e,0x42,0xee,0xf0,0xa3,0xef,0xf0,0x75,0x22,0x01,0x8e,0x23,0xf5,0x24,0xe4,
53752 -0xfd,0x7f,0x0b,0x71,0x44,0xe4,0xfd,0x7f,0x02,0x71,0x44,0x12,0x4f,0xbe,0xe4,0xff,
53753 -0x12,0x44,0xf1,0xe4,0xf5,0x26,0x90,0x01,0xc9,0xe5,0x26,0xf0,0x90,0x9e,0x42,0xe0,
53754 -0xfc,0xa3,0xe0,0xfd,0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,0x7d,0x01,0x7f,0x60,0x7e,
53755 -0x01,0x02,0x30,0x62,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,
53756 -0x90,0x9e,0x44,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9e,
53757 -0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
53758 -0x90,0x00,0x47,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,
53759 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,0x12,
53760 -0x49,0xb9,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
53761 -0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0x80,0x5a,0x90,0x9e,0x44,0xe0,0x24,0xf8,0xf0,
53762 -0xa3,0xe0,0x70,0x1d,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
53763 -0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,
53764 -0x1a,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
53765 -0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,0x43,0xe0,0x4f,0xf0,0x12,0x49,0xb9,0x90,0x9e,
53766 -0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
53767 -0x90,0x00,0x43,0xe0,0x5f,0xf0,0x12,0x49,0xb9,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,
53768 -0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x6d,0xe0,0x90,0x9e,0x40,0xf0,0x90,0x9e,0x6e,
53769 -0xe0,0xf5,0x64,0xa3,0xe0,0xf5,0x65,0xe4,0xf5,0x61,0x74,0x70,0x25,0x61,0xf5,0x82,
53770 -0xe4,0x34,0x9e,0xf5,0x83,0xe0,0xff,0x74,0x66,0x25,0x61,0xf8,0xa6,0x07,0x05,0x61,
53771 -0xe5,0x61,0xb4,0x04,0xe5,0x90,0x9e,0x40,0xe0,0x12,0x43,0x94,0x74,0x6b,0x00,0x75,
53772 -0x93,0x01,0x74,0x71,0x02,0x74,0x71,0x03,0x74,0x71,0x04,0x75,0x93,0x05,0x75,0x63,
53773 -0x80,0x75,0x79,0x81,0x75,0x93,0x82,0x00,0x00,0x75,0x8f,0xaf,0x69,0xb1,0x9a,0xa1,
53774 -0x93,0x90,0x9e,0x40,0xe0,0xff,0xb4,0x02,0x08,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x80,
53775 -0x0f,0xef,0x90,0x9e,0x3f,0xb4,0x03,0x05,0x74,0x02,0xf0,0x80,0x03,0x74,0x04,0xf0,
53776 -0xc3,0xe5,0x64,0x94,0x08,0x50,0x49,0xe4,0xf5,0x61,0x90,0x9e,0x3f,0xe0,0xff,0xe5,
53777 -0x61,0xc3,0x9f,0x40,0x02,0xa1,0x93,0xc3,0xe5,0x64,0x94,0x01,0x50,0x14,0xe5,0x61,
53778 -0x25,0x65,0xff,0xc3,0x74,0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xfd,0x12,0x4a,0xc1,
53779 -0x80,0x1a,0xc3,0x74,0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xff,0xe5,0x61,0x7c,0x00,
53780 -0x25,0x65,0xfd,0xec,0x35,0x64,0x8d,0x82,0xf5,0x83,0xef,0xf0,0x05,0x61,0x80,0xba,
53781 -0xc3,0xe5,0x64,0x94,0x10,0x40,0x02,0xa1,0x93,0x90,0x9e,0x40,0xe0,0x64,0x04,0x60,
53782 -0x02,0xa1,0x93,0xaf,0x67,0xfc,0xfd,0xfe,0x78,0x10,0x12,0x24,0xf5,0xc0,0x04,0xc0,
53783 -0x05,0xc0,0x06,0xc0,0x07,0xaf,0x66,0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x24,0xf5,
53784 -0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0x12,0x43,0x46,0xc0,0x04,0xc0,0x05,0xc0,
53785 -0x06,0xc0,0x07,0xaf,0x68,0xe4,0xfc,0xfd,0xfe,0x78,0x08,0x12,0x24,0xf5,0xd0,0x03,
53786 -0xd0,0x02,0xd0,0x01,0xd0,0x00,0x12,0x43,0x46,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,
53787 -0x07,0xaf,0x69,0xe4,0xfc,0xfd,0xfe,0x12,0x43,0x46,0xa3,0x12,0x25,0x08,0x90,0x9e,
53788 -0x41,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0xaf,0x65,0xae,0x64,0x12,0x2b,
53789 -0x08,0x80,0x30,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,
53790 -0x62,0xaf,0x63,0xfe,0x12,0x32,0x15,0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,
53791 -0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,0x31,0x82,0x80,0x04,0x7f,
53792 -0x00,0x80,0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x6a,0xe4,0x90,0x9e,0x45,
53793 -0xf0,0xe5,0x6a,0x14,0xfe,0x90,0x9e,0x45,0xe0,0xff,0xc3,0x9e,0x50,0x0e,0xef,0x04,
53794 -0xfd,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,
53795 -0x7d,0xff,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,
53796 -0x94,0xff,0x50,0x0f,0xe0,0xff,0x04,0xfd,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe0,0x04,
53797 -0xf0,0x80,0xe8,0xad,0x6a,0x7f,0xff,0x02,0x2d,0x4d,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
53798 -0xd0,0xe4,0xf5,0x5b,0x75,0x5c,0x04,0xf5,0x5d,0xf5,0x5f,0xf5,0x60,0x90,0x02,0x09,
53799 -0xe0,0xff,0x12,0x24,0x62,0xfe,0xef,0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,
53800 -0x75,0x5a,0x80,0x80,0x05,0xe4,0xf5,0x59,0xf5,0x5a,0xe5,0x5e,0xc3,0x13,0x90,0xfd,
53801 -0x10,0xf0,0x74,0x20,0x25,0x5b,0xf5,0x5b,0xad,0x5a,0xe5,0x5b,0x2d,0xff,0x24,0x01,
53802 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0x9e,0x6d,0xf0,0x74,0x02,0x2f,0xf5,
53803 -0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0xfe,0xe5,0x5b,0x2d,0x24,0x03,0xf5,0x82,0xe4,
53804 -0x34,0xfc,0xf5,0x83,0xe0,0x24,0x00,0xff,0xe4,0x3e,0x90,0x9e,0x6e,0xf0,0xa3,0xef,
53805 -0xf0,0x7f,0x04,0xe5,0x5b,0x25,0x5a,0x2f,0x24,0x00,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
53806 -0x83,0xe0,0xfe,0x74,0x6c,0x2f,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,0xee,0xf0,0x0f,
53807 -0xbf,0x08,0xe0,0x91,0x0e,0xef,0x70,0x3f,0x90,0x01,0xc3,0xe0,0x60,0x25,0xc3,0xe5,
53808 -0x60,0x94,0xe8,0xe5,0x5f,0x94,0x03,0x40,0x09,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,
53809 -0x80,0x63,0x05,0x60,0xe5,0x60,0x70,0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x32,
53810 -0x15,0x80,0xd5,0x90,0x01,0xc6,0xe0,0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,
53811 -0x80,0x43,0x74,0xff,0xf0,0x80,0x3e,0xe5,0x5b,0xb4,0x78,0x23,0xe4,0xf5,0x5b,0x05,
53812 -0x5e,0xe5,0x5a,0x64,0x80,0x45,0x59,0x70,0x06,0xf5,0x59,0xf5,0x5a,0x80,0x06,0x75,
53813 -0x59,0x00,0x75,0x5a,0x80,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x80,0x06,0x74,
53814 -0x08,0x25,0x5b,0xf5,0x5b,0xe5,0x5d,0x15,0x5d,0x70,0x02,0x15,0x5c,0xe5,0x5d,0x45,
53815 -0x5c,0x60,0x02,0xc1,0x28,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,
53816 -0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x22,0xe4,0xf5,0x25,0x22,0xe4,0x90,0x9e,0xaa,
53817 -0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,
53818 -0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,0x90,0x9e,0xab,0xe0,0x94,0xe8,0x90,
53819 -0x9e,0xaa,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x32,
53820 -0x15,0x90,0x9e,0xaa,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x80,0xc6,0x90,0x9e,0x77,
53821 -0xe0,0x90,0x9e,0x0f,0xf0,0x22,0xef,0x70,0x03,0x02,0x79,0x1e,0x90,0x9e,0x0f,0xe0,
53822 -0x60,0x03,0x02,0x7c,0xe9,0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
53823 -0x08,0x7f,0x8c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,
53824 -0x96,0x12,0x25,0x08,0x7f,0x44,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xab,0x12,0x43,
53825 -0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,
53826 -0xaf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,
53827 -0x08,0x90,0x9d,0xb3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x70,0x7e,
53828 -0x0e,0x12,0x2b,0x08,0x90,0x9d,0xb7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
53829 -0x7f,0x74,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x96,
53830 -0x12,0x25,0x08,0x7f,0x78,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xbf,0x12,0x43,0x53,
53831 -0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xc3,
53832 -0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x08,
53833 -0x90,0x9d,0xc7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x84,0x7e,0x0e,
53834 -0x12,0x2b,0x08,0x90,0x9d,0xcb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
53835 -0x88,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xcf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
53836 -0x25,0x08,0x7f,0x8c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,
53837 -0x80,0x96,0x12,0x25,0x08,0x7f,0xd0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xd7,0x12,
53838 -0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xd4,0x7e,0x0e,0x12,0x2b,0x08,0x90,
53839 -0x9d,0xdb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xd8,0x7e,0x0e,0x12,
53840 -0x2b,0x08,0x90,0x9d,0xdf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xdc,
53841 -0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xe3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
53842 -0x08,0x7f,0xe0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,
53843 -0x96,0x12,0x25,0x08,0x7f,0xec,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xeb,0x12,0x43,
53844 -0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,0x9d,
53845 -0xef,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x2b,
53846 -0x08,0x90,0x9d,0xf3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x0c,0x7e,
53847 -0x09,0x12,0x2b,0x08,0x90,0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
53848 -0x7f,0x04,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,
53849 -0x0f,0xe0,0x64,0x01,0x60,0x02,0x81,0xe9,0x7f,0x8c,0x7e,0x08,0x12,0x22,0x65,0x90,
53850 -0x9d,0xfb,0x12,0x25,0x08,0x7f,0x44,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xa7,0x12,
53851 -0x25,0x08,0x7f,0x5c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xab,0x12,0x25,0x08,0x7f,
53852 -0x6c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xaf,0x12,0x25,0x08,0x7f,0x70,0x7e,0x0e,
53853 -0x12,0x22,0x65,0x90,0x9d,0xb3,0x12,0x25,0x08,0x7f,0x74,0x7e,0x0e,0x12,0x22,0x65,
53854 -0x90,0x9d,0xb7,0x12,0x25,0x08,0x7f,0x78,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xbb,
53855 -0x12,0x25,0x08,0x7f,0x7c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xbf,0x12,0x25,0x08,
53856 -0x7f,0x80,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xc3,0x12,0x25,0x08,0x7f,0x84,0x7e,
53857 -0x0e,0x12,0x22,0x65,0x90,0x9d,0xc7,0x12,0x25,0x08,0x7f,0x88,0x7e,0x0e,0x12,0x22,
53858 -0x65,0x90,0x9d,0xcb,0x12,0x25,0x08,0x7f,0x8c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,
53859 -0xcf,0x12,0x25,0x08,0x7f,0xd0,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xd3,0x12,0x25,
53860 -0x08,0x7f,0xd4,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xd7,0x12,0x25,0x08,0x7f,0xd8,
53861 -0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xdb,0x12,0x25,0x08,0x7f,0xdc,0x7e,0x0e,0x12,
53862 -0x22,0x65,0x90,0x9d,0xdf,0x12,0x25,0x08,0x7f,0xe0,0x7e,0x0e,0x12,0x22,0x65,0x90,
53863 -0x9d,0xe3,0x12,0x25,0x08,0x7f,0xec,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xe7,0x12,
53864 -0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,0x9d,0xeb,0x12,0x25,0x08,0x7f,
53865 -0x04,0x7e,0x0d,0x12,0x22,0x65,0x90,0x9d,0xef,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,
53866 -0x12,0x22,0x65,0x90,0x9d,0xf3,0x12,0x25,0x08,0x7f,0x04,0x7e,0x08,0x12,0x22,0x65,
53867 -0x90,0x9d,0xf7,0x12,0x25,0x08,0x7f,0x8c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0xa4,
53868 -0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,
53869 -0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
53870 -0x7f,0x8c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x01,0x00,
53871 -0x00,0x7f,0x44,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0xdb,
53872 -0x25,0xa4,0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,
53873 -0xdb,0x25,0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,
53874 -0x20,0xdb,0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,
53875 -0x14,0x04,0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,
53876 -0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,
53877 -0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,
53878 -0x96,0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x08,0x90,
53879 -0x80,0x96,0x12,0x25,0x14,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2b,0x08,
53880 -0x90,0x80,0x96,0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2b,
53881 -0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,
53882 -0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,
53883 -0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,
53884 -0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd8,
53885 -0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa4,0x7f,
53886 -0xdc,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa4,
53887 -0x7f,0xe0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x24,0xdb,0x25,
53888 -0xa4,0x7f,0xec,0x7e,0x0e,0x12,0x2b,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,
53889 -0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,
53890 -0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,
53891 -0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
53892 -0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x22,0x65,0x90,
53893 -0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,
53894 -0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,
53895 -0xec,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,
53896 -0x12,0x25,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x2b,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,
53897 -0x65,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,
53898 -0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,
53899 -0xec,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,
53900 -0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x2b,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,
53901 -0x65,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x54,0x0f,
53902 -0xfd,0xec,0x54,0xf0,0xfc,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,
53903 -0x53,0xed,0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,
53904 -0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,
53905 -0x2b,0x08,0x7f,0x04,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,
53906 -0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa4,0x12,0x25,0x08,
53907 -0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa4,0x12,0x25,
53908 -0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,
53909 -0x08,0x12,0x2b,0x08,0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,
53910 -0x90,0x9e,0x1e,0xf0,0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,
53911 -0x59,0xc2,0xaf,0x90,0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x4a,0xc1,0x7d,
53912 -0x40,0x7f,0x01,0x12,0x31,0x66,0xe5,0x59,0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,
53913 -0x45,0x12,0x4a,0xc1,0x90,0x04,0xfd,0xe4,0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,
53914 -0x9e,0x24,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,
53915 -0x9e,0x26,0xf0,0x90,0x9e,0x29,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,
53916 -0xf0,0xa3,0xf0,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,
53917 -0x9e,0x2e,0xf0,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,
53918 -0x00,0x51,0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x02,0x4a,0xc1,0x90,0x9e,0x15,0xe0,0xc3,
53919 -0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0xc1,0x33,0x90,0x9e,0x15,0xe0,0x64,0x14,0x60,
53920 -0x02,0xc1,0x33,0x90,0x9e,0x24,0xe0,0x70,0x25,0x90,0x9e,0x27,0xe0,0x70,0x1f,0x90,
53921 -0x9e,0x25,0xe0,0x70,0x19,0x90,0x9e,0x28,0xe0,0x70,0x13,0x90,0x9e,0x26,0xe0,0x70,
53922 -0x0d,0x90,0x9e,0x29,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,0x54,0xfe,0xf0,0x90,0x9e,
53923 -0x24,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x25,0xe0,0x90,0x04,0x45,0xf0,0x90,0x9e,
53924 -0x26,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x27,0xe0,0x90,0x04,0x48,
53925 -0xf0,0x90,0x9e,0x28,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,0x29,0xe0,0x90,0x04,0x4a,
53926 -0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x10,0xe0,0x90,0x04,0x4c,0xf0,0x90,0x9e,0x11,0xe0,
53927 -0x90,0x04,0x4d,0xf0,0x90,0x9e,0x12,0xe0,0x90,0x04,0x4e,0xf0,0x90,0x9e,0x13,0xe0,
53928 -0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,
53929 -0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x24,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
53930 -0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x34,0xf0,0x90,0x05,0x61,0xe0,0x90,
53931 -0x9e,0x35,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x36,0xf0,0x90,0x05,0x63,0xe0,0x90,
53932 -0x9e,0x37,0xf0,0x90,0x9e,0x2d,0xe0,0xff,0x90,0x9e,0x37,0xe0,0xfe,0xd3,0x9f,0x50,
53933 -0x0b,0x90,0x9e,0x2d,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,0x11,0x90,0x9e,0x1b,0xe0,
53934 -0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x1f,0xe0,0xff,0x12,0x4e,0xd8,0x22,0x90,0x9e,
53935 -0x2e,0xe0,0x64,0x01,0x60,0x08,0x90,0x9e,0x1c,0xe0,0x60,0x02,0xe1,0x55,0x90,0x9e,
53936 -0x10,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x11,0xe0,
53937 -0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x12,0xe0,0xc3,
53938 -0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x11,0xf0,0x80,0x15,0x90,0x9e,
53939 -0x13,0xe0,0xc3,0x94,0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x12,0xf0,0x90,
53940 -0x9e,0x11,0xf0,0x90,0x9e,0x10,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,
53941 -0x30,0xe2,0x32,0x90,0x9e,0x24,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,
53942 -0x24,0x90,0x9e,0x25,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,
53943 -0x90,0x9e,0x26,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x25,
53944 -0xf0,0x90,0x9e,0x24,0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x27,0xe0,
53945 -0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x28,0xe0,0xc3,0x94,
53946 -0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x29,0xe0,0xc3,0x94,0xff,
53947 -0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x04,
53948 -0xfd,0xe0,0x44,0x01,0xf0,0x22,0xf5,0x67,};
53949 -
53950 -// =================== v79 UMC B Cut COMMON 2011-10-06 =====================
53951 -u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImgArrayLength] = {
53952 -0xc2,0x88,0x02,0x00,0x4f,0x00,0x00,0x00,0x0a,0x06,0x18,0x11,0x5e,0x3f,0x01,0x00,
53953 -0x61,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53954 -0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53955 -0x00,0x00,0x00,0x02,0x49,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53956 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53957 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53958 -0x00,0x00,0x00,0x02,0x5f,0x7b,0x00,0x00,0x00,0x00,0x00,0xa1,0xdf,0x00,0x00,0x00,
53959 -0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
53960 -0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
53961 -0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
53962 -0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,0x00,0x18,0x22,0x21,0x20,0x18,
53963 -0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,0x20,0x08,0x00,0x20,0x22,0x21,
53964 -0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,0x22,0x20,0x18,0x08,0x00,0x20,
53965 -0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,0x00,0x30,0x31,0x2f,0x10,0x10,
53966 -0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,0x10,0x00,0x00,0x30,0x31,0x20,
53967 -0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,0x04,0x04,0x04,0x05,0x04,0x04,
53968 -0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,
53969 -0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x07,0x0a,0x0b,
53970 -0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,0x08,0x08,0x09,0x09,0x0a,0x0c,
53971 -0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,0x07,0x07,0x08,0x0a,0x04,0x04,
53972 -0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,0x08,0x0b,0x0d,0x0f,0x04,0x04,
53973 -0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,0x04,0x04,0x05,0x05,0x06,0x0a,
53974 -0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,0x00,0x00,0x00,0x00,0x00,0x00,
53975 -0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,0x21,0x27,0x29,0x2a,0x00,0x00,
53976 -0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x18,
53977 -0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,0x00,0xc0,0x00,0xd8,0x00,0x50,
53978 -0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,0x01,0xe0,0x02,0x30,0x01,0x2c,
53979 -0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,0x06,0x40,0x07,0xd0,0x00,0x02,
53980 -0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x24,0x00,0x30,
53981 -0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,0x00,0x50,0x00,0x64,0x00,0xa0,
53982 -0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,0x00,0xf0,0x01,0x68,0x01,0xf4,
53983 -0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,
53984 -0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,0x05,0x07,0x07,0x08,0x0b,0x12,
53985 -0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,
53986 -0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x20,0x1e,
53987 -0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
53988 -0xbb,0x01,0x0c,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,0x22,0x50,
53989 -0x06,0xe9,0x25,0x82,0xf8,0xe6,0x22,0xbb,0xfe,0x06,0xe9,0x25,0x82,0xf8,0xe2,0x22,
53990 -0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe4,0x93,0x22,0xbb,0x01,0x06,
53991 -0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,0xf3,0x22,0xf8,
53992 -0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0x22,
53993 -0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,0x82,0xc8,0xf2,
53994 -0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,
53995 -0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xe0,0xf5,
53996 -0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,0xfe,0x07,0xe3,
53997 -0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,0xf0,0x74,0x01,
53998 -0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,
53999 -0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,0x08,0xe6,0x22,
54000 -0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,0xe5,0x83,0x2a,
54001 -0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
54002 -0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,0x19,0x22,0xbb,
54003 -0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,0xe5,0x82,0x29,
54004 -0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x09,
54005 -0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,0x25,0x82,0xc8,
54006 -0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,0x49,0xfd,0xec,
54007 -0x48,0xfc,0x22,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xa4,
54008 -0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,0xa3,0xe0,0xfa,
54009 -0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,0xf0,0xe5,0x82,
54010 -0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,0xa3,0xea,0xf0,
54011 -0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,
54012 -0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,
54013 -0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x50,0x31,
54014 -0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,
54015 -0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,
54016 -0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,
54017 -0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x44,0x3d,0xe4,0x7e,0x01,0x93,0x60,
54018 -0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,
54019 -0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,
54020 -0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,
54021 -0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x66,
54022 -0x00,0x41,0x9e,0xae,0x00,0x41,0x9e,0x4d,0x80,0x41,0x9e,0x4e,0x80,0x41,0x9e,0xb0,
54023 -0x00,0x00,0xf0,0x90,0x9e,0x57,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,
54024 -0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x88,0xeb,0xf0,0xa3,0xe0,
54025 -0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x35,0xab,0xd0,0xd0,0x92,0xaf,0x22,
54026 -0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x89,0xf0,
54027 -0x90,0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,
54028 -0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x5c,
54029 -0x14,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x02,0xf1,0x16,0x22,
54030 -0x8f,0x82,0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0xe4,0xf5,0x22,0x7f,0x60,0x7e,
54031 -0x01,0x80,0xed,0x90,0x9e,0x60,0xe0,0xff,0x7d,0x01,0xe1,0x1a,0xb1,0xb1,0xbf,0x01,
54032 -0x0f,0x90,0x9e,0x68,0xe0,0xff,0xe4,0xfd,0xf1,0xfe,0x90,0x04,0x1f,0x74,0x20,0xf0,
54033 -0x22,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,0x02,0x7f,0x00,0x22,
54034 -0x22,0x22,0x22,0x02,0x60,0x0d,0x02,0x60,0x14,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
54035 -0x8b,0x1b,0x8a,0x1c,0x89,0x1d,0x90,0x9e,0x8b,0x71,0x8b,0xab,0x1e,0xaa,0x1f,0xa9,
54036 -0x20,0x90,0x9e,0x8e,0x71,0x8b,0xaf,0x21,0x15,0x21,0xef,0x60,0x1b,0x90,0x9e,0x8e,
54037 -0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x29,0xd9,0xff,0x90,0x9e,0x8b,0xe4,0x75,0xf0,
54038 -0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x1b,0xaa,0x1c,0xa9,0x1d,0xd0,0xd0,
54039 -0x92,0xaf,0x22,0x90,0x06,0xa9,0xe0,0xf5,0x50,0x54,0xc0,0x70,0x0d,0x90,0x9e,0x63,
54040 -0xe0,0x54,0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0x91,0xd3,0xe5,0x50,0x30,0xe6,0x17,0x90,
54041 -0x9e,0x63,0xe0,0x44,0x01,0xf0,0x90,0x9e,0x61,0xe0,0x64,0x02,0x60,0x04,0x91,0xdc,
54042 -0x80,0x0b,0x91,0x80,0x80,0x07,0x90,0x9e,0x63,0xe0,0x54,0xfe,0xf0,0xe5,0x50,0x90,
54043 -0x9e,0x63,0x30,0xe7,0x17,0xe0,0x44,0x02,0xf0,0xe4,0x90,0x9e,0x89,0x91,0x52,0x90,
54044 -0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x62,0x74,0x01,0xf0,0x22,0xe0,0x54,0xfd,0xf0,
54045 -0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x04,0x1d,0xe0,0x60,0x1a,0x90,0x05,
54046 -0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,0xe0,0x44,0x40,0xf0,0x90,0x01,0xc7,
54047 -0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xc0,
54048 -0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,
54049 -0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,
54050 -0xdf,0xf0,0x74,0x45,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,0x3c,0xe0,0x55,0x30,0xf5,
54051 -0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,0xf5,0x36,0xa3,0xe0,0x55,
54052 -0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,0x74,0x01,0xf0,0xe5,0x34,
54053 -0x30,0xe1,0x08,0x90,0x01,0x3c,0x74,0x02,0xf0,0xf1,0xbc,0xe5,0x34,0x30,0xe2,0x38,
54054 -0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe0,0x24,0x90,0x9e,0x89,
54055 -0xe4,0xf0,0x90,0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,
54056 -0x01,0x91,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x80,
54057 -0x07,0x90,0x9e,0x5d,0xe4,0xf0,0x91,0xd3,0xe5,0x34,0x30,0xe3,0x38,0x90,0x01,0x3c,
54058 -0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,0x90,0x9e,0x89,0xe4,0xf0,0x90,
54059 -0x9e,0x55,0xe0,0x90,0x9e,0x8a,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,0x62,
54060 -0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x80,0x07,0x90,0x9e,
54061 -0x5c,0xe4,0xf0,0x91,0xd3,0xe5,0x34,0x30,0xe4,0x09,0x90,0x01,0x3c,0x74,0x10,0xf0,
54062 -0x12,0x71,0xa3,0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,0x3c,0x74,0x20,0xf0,0x12,0x52,
54063 -0x69,0xe5,0x35,0x30,0xe0,0x1a,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,0x01,0x2f,0xe0,
54064 -0x44,0x7f,0xf0,0x90,0x00,0x83,0xe0,0x90,0x9e,0x60,0xf0,0x12,0x63,0xac,0x91,0xd3,
54065 -0x74,0xdf,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,
54066 -0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,
54067 -0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x7d,0x01,0x7f,0x0c,0x8f,0x71,0x8d,0x72,0xe5,0x71,
54068 -0x54,0x0f,0xff,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0x6f,0x60,0x72,0xe5,0x71,0x30,0xe2,
54069 -0x2b,0x90,0x9e,0x5e,0xe0,0x20,0xe2,0x05,0x7f,0x01,0x12,0x62,0xa7,0x90,0x9e,0x5e,
54070 -0xe0,0x30,0xe3,0x07,0xe5,0x71,0x20,0xe3,0x02,0x80,0x54,0x90,0x9e,0x5e,0xe0,0x20,
54071 -0xe3,0x4c,0xe5,0x71,0x30,0xe3,0x47,0xaf,0x72,0x02,0x62,0x43,0x90,0x9e,0x5e,0xe0,
54072 -0x54,0x0f,0xff,0xbf,0x0c,0x0d,0xe5,0x71,0x20,0xe3,0x08,0x12,0x4c,0xd5,0xef,0x60,
54073 -0x2d,0xf1,0x9f,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xff,0xbf,0x04,0x0e,0xe5,0x71,0x20,
54074 -0xe2,0x09,0x12,0x5e,0x8f,0xef,0x60,0x16,0x12,0x48,0xaa,0x90,0x9e,0x5e,0xe0,0x54,
54075 -0x0f,0xff,0xbf,0x02,0x09,0x12,0x61,0xd0,0xef,0x60,0x03,0x12,0x63,0x92,0x22,0x90,
54076 -0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x73,0xb4,0x01,0x05,0x7f,0x01,0x12,0x62,0x62,
54077 -0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x04,0xf0,0x22,0x90,0x9e,0x62,0xe0,
54078 -0x60,0x0e,0xe4,0xf0,0xa3,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0x07,0x70,0x2b,0x80,0x27,
54079 -0x90,0x9e,0x51,0xe0,0x04,0xf0,0x90,0x9e,0x63,0xe0,0x54,0xef,0xf0,0x90,0x9e,0x56,
54080 -0xe0,0xff,0x90,0x9e,0x51,0xe0,0xd3,0x9f,0x40,0x0d,0xe5,0x73,0xb4,0x01,0x0a,0xa3,
54081 -0xe0,0x70,0x06,0xe0,0x04,0xf0,0x22,0x91,0xd3,0x22,0xe0,0xff,0x7d,0x01,0x90,0x9e,
54082 -0x9c,0xef,0xf0,0xa3,0xed,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x74,0x60,0x04,0xe4,
54083 -0xff,0x11,0x8f,0x90,0x9e,0x9c,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9e,0xe4,0xf0,0xa3,
54084 -0x74,0x80,0xf0,0x90,0x9e,0x9c,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,
54085 -0x25,0xef,0xf0,0x90,0x9e,0x9d,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,0x24,0x0f,0xf5,
54086 -0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,0xf5,0x82,0xe4,
54087 -0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9e,0xa3,0xe0,0xff,0xfd,0x24,
54088 -0x08,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,0xf5,0x82,0xe4,
54089 -0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,
54090 -0xf5,0x83,0xe0,0x54,0xf7,0xf0,0x90,0x9e,0x9e,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xef,
54091 -0x60,0x0b,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x77,
54092 -0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x77,0x2e,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,
54093 -0x90,0x05,0x22,0x74,0xff,0xf0,0x12,0x76,0x1a,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,
54094 -0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x36,0xe6,0xe5,0x74,0x60,0x04,0x7f,0x01,0x11,
54095 -0x8f,0x12,0x76,0x5b,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,0x22,
54096 -0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x22,
54097 -0x90,0x9e,0x61,0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0f,0x90,0x9e,0x5e,0xe0,
54098 -0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x1a,0xe4,0xff,
54099 -0x11,0x8f,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,
54100 -0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,
54101 -0x90,0x01,0xc4,0x74,0x13,0xf0,0x74,0x49,0xa3,0xf0,0x90,0x01,0x34,0xe0,0x55,0x28,
54102 -0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,0xa3,0xe0,0x55,0x2b,0xf5,0x2f,
54103 -0xe5,0x2c,0x20,0xe0,0x02,0x41,0xb3,0x90,0x01,0x34,0x74,0x01,0xf0,0x85,0xd1,0x08,
54104 -0x85,0xd2,0x09,0x85,0xd3,0x0a,0x85,0xd4,0x0b,0x85,0xd5,0x0c,0x85,0xd6,0x0d,0x85,
54105 -0xd7,0x0e,0x85,0xd9,0x0f,0xe5,0x0f,0x54,0x40,0xc3,0x13,0xff,0xe5,0x0e,0x54,0x20,
54106 -0x6f,0x70,0x02,0x41,0x63,0xe5,0x0f,0x30,0xe5,0x02,0x41,0x63,0xe5,0x0d,0x54,0x3f,
54107 -0xf5,0x4d,0xe5,0x08,0x54,0x3f,0xf5,0x4e,0xe5,0x0c,0x54,0x1f,0xff,0xe5,0x4d,0x25,
54108 -0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,
54109 -0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,
54110 -0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4e,0xd3,0x94,0x04,0x40,0x03,0x75,
54111 -0x4e,0x04,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,0x12,0x43,0x5f,0x75,0xf0,0x02,
54112 -0xe5,0x4e,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,0xe5,0x0e,0x54,0x1f,0x2f,0xff,
54113 -0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,0x12,0x43,0x5f,0x75,0xf0,
54114 -0x02,0xe5,0x4e,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,0xf0,0xe5,0x0f,0x20,0xe6,0x24,
54115 -0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,
54116 -0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,0x30,0xe7,0x36,0xaf,0x4d,0x12,
54117 -0x5b,0x6d,0x80,0x2f,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0x44,0xf5,
54118 -0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,0x30,0xe7,
54119 -0x12,0xe5,0x0a,0x54,0x7f,0xfd,0xe5,0x0e,0x54,0x1f,0xf5,0x53,0xab,0x4e,0xaf,0x4d,
54120 -0x12,0x5b,0x0a,0xe5,0x74,0x14,0x24,0xfd,0x50,0x02,0x80,0x47,0x90,0x9e,0x61,0xe0,
54121 -0x60,0x38,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0x12,0x44,0xf1,
54122 -0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x55,0xe0,0xf5,0x44,0x75,0x45,0x00,0xe4,0xfb,
54123 -0xfd,0x7f,0x58,0x7e,0x01,0x12,0x35,0xab,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,
54124 -0x92,0x74,0x01,0xf0,0x90,0x9e,0x5d,0xf0,0x80,0x09,0x12,0x44,0xf1,0xbf,0x01,0x03,
54125 -0x12,0x44,0xd3,0xe5,0x2c,0x30,0xe1,0x21,0x90,0x01,0x34,0x74,0x02,0xf0,0x85,0xd1,
54126 -0x13,0x85,0xd2,0x14,0x85,0xd3,0x15,0x85,0xd4,0x16,0x85,0xd5,0x17,0x85,0xd6,0x18,
54127 -0x85,0xd7,0x19,0x85,0xd9,0x1a,0x12,0x5c,0x61,0xe5,0x2c,0x30,0xe3,0x06,0x90,0x01,
54128 -0x34,0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,0xf0,0x43,
54129 -0x12,0x10,0xe5,0x2c,0x30,0xe5,0x24,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1d,0xe0,0x54,
54130 -0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,0xe8,0x00,0xd1,0xed,
54131 -0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0xb1,0x28,0x80,0xfe,0xe5,0x2c,0x30,0xe6,0x06,
54132 -0x90,0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe1,0x3b,0x90,0x01,0x36,0x74,0x02,
54133 -0xf0,0x43,0x12,0x40,0x90,0x01,0x02,0xe0,0x54,0x03,0x64,0x01,0x70,0x28,0x90,0x01,
54134 -0x37,0xe0,0x30,0xe0,0x0a,0x74,0x01,0xf0,0x90,0x9e,0x66,0xe4,0xf0,0x80,0x17,0x90,
54135 -0x9e,0x66,0xe0,0x04,0xf0,0xe0,0xc3,0x94,0x0a,0x40,0x0b,0xe4,0xf0,0x90,0x04,0x19,
54136 -0xe0,0x30,0xe0,0x02,0xf1,0xfc,0xe5,0x2e,0x30,0xe0,0x12,0x90,0x9e,0x76,0x74,0x01,
54137 -0xf0,0x90,0x01,0x36,0xf0,0x12,0x64,0x09,0x90,0x9e,0x76,0xe4,0xf0,0xe5,0x2e,0x30,
54138 -0xe2,0x78,0x90,0x01,0x36,0x74,0x04,0xf0,0x90,0x01,0xbd,0xe0,0x04,0xf0,0xe5,0x73,
54139 -0x64,0x01,0x70,0x66,0xe5,0x74,0x60,0x62,0xe5,0x74,0x64,0x02,0x60,0x06,0xe5,0x74,
54140 -0x64,0x05,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x50,0xf0,0x90,0x06,0xaa,0xe0,
54141 -0x90,0x9e,0x5f,0xf0,0x90,0x9e,0x50,0xe0,0x70,0x07,0x90,0x9e,0x5f,0xe0,0xff,0x80,
54142 -0x05,0x90,0x9e,0x50,0xe0,0xff,0x90,0x9e,0x50,0xef,0xf0,0x90,0x9e,0x52,0xe0,0x60,
54143 -0x03,0xe0,0x14,0xf0,0x90,0x9e,0x51,0xe4,0xf0,0x90,0x01,0x57,0xf0,0x90,0x01,0x3c,
54144 -0x74,0x02,0xf0,0x90,0x9e,0x63,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xef,0xf0,0xe5,0x74,
54145 -0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,0x45,0x53,0xe5,0x2e,0x30,0xe3,0x28,0x90,
54146 -0x01,0x36,0x74,0x08,0xf0,0xe5,0x73,0x64,0x01,0x70,0x1c,0xe5,0x74,0x60,0x18,0x90,
54147 -0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x89,0xe4,0x12,0x44,
54148 -0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,0x2f,0x90,0x01,0x36,0x74,
54149 -0x10,0xf0,0xe5,0x73,0x64,0x01,0x70,0x23,0xe5,0x74,0x60,0x1f,0x90,0x01,0x57,0xe4,
54150 -0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x62,0xe4,0xf0,0x90,0x9e,0x63,0xe0,
54151 -0x54,0xfd,0xf0,0xe0,0x54,0x07,0x70,0x03,0x12,0x44,0xd3,0xe5,0x2e,0x30,0xe5,0x1f,
54152 -0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x73,0xb4,0x01,0x14,0xe5,0x74,0x60,0x10,0x90,
54153 -0x9e,0x61,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xdc,0x80,0x03,0x12,0x44,0x80,0xe5,
54154 -0x2e,0x30,0xe6,0x1e,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x73,0xb4,0x01,0x13,0xe5,
54155 -0x74,0x60,0x0f,0x90,0x9e,0x63,0xe0,0x54,0xfe,0xf0,0xe0,0x54,0x07,0x70,0x03,0x12,
54156 -0x44,0xd3,0xe5,0x2f,0x30,0xe1,0x08,0x90,0x01,0x37,0x74,0x02,0xf0,0x11,0xe0,0x74,
54157 -0x13,0x04,0x90,0x01,0xc4,0xf0,0x74,0x49,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,
54158 -0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,
54159 -0xd0,0xf0,0xd0,0xe0,0x32,0x12,0x44,0xf1,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,
54160 -0x74,0x01,0xf0,0x80,0x32,0x90,0x9e,0x5d,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,
54161 -0xf0,0x80,0x24,0x90,0x9e,0x5c,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,
54162 -0x16,0x90,0x9e,0x60,0xe0,0x54,0x0f,0xd3,0x94,0x04,0x40,0x08,0x90,0x01,0xb9,0x74,
54163 -0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x08,0xf0,0x7f,0x00,0x22,
54164 -0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x7f,
54165 -0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,
54166 -0x9e,0xad,0xed,0xf0,0x90,0x9e,0xac,0xef,0xf0,0xd3,0x94,0x07,0x50,0x63,0xe0,0xff,
54167 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,
54168 -0xe0,0x5f,0xf0,0xb1,0x28,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
54169 -0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0xb1,0x28,0x90,0x9e,
54170 -0xad,0xe0,0x60,0x16,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
54171 -0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,0x66,0x90,0x9e,0xac,0xe0,0xff,0x74,
54172 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x45,0x80,
54173 -0x6b,0x90,0x9e,0xac,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
54174 -0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xb1,0x20,0x90,0x9e,0xac,0xe0,0xff,0x74,
54175 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x43,0xe0,0x4f,
54176 -0xf0,0xb1,0x28,0x90,0x9e,0xad,0xe0,0x60,0x1b,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,
54177 -0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,0x42,
54178 -0xe0,0x4f,0x80,0x1a,0x90,0x9e,0xac,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
54179 -0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x42,0xe0,0x5f,0xf0,0xb1,
54180 -0x28,0xd0,0xd0,0x92,0xaf,0x22,0xf0,0x90,0x00,0x45,0xe0,0x54,0xfe,0xfd,0x7f,0x45,
54181 -0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,0x00,0xed,0xf0,0xb1,0x28,
54182 -0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,0x66,0x24,0x02,0x60,0x02,
54183 -0xc1,0xec,0x90,0x9e,0x1a,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,
54184 -0x48,0xd1,0x30,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,0x47,0xd1,0x30,0x90,0x00,
54185 -0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,0x9e,0x1a,0xf0,0x90,0x9e,
54186 -0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,
54187 -0xd9,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0xd1,0x30,0x90,0x00,0x45,0xe0,
54188 -0x54,0xef,0xfd,0x7f,0x45,0xd1,0x30,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,
54189 -0x80,0x38,0x90,0x9e,0x1a,0x74,0x01,0xf0,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,
54190 -0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x00,0x45,0xe0,0x44,
54191 -0x20,0xfd,0x7f,0x45,0xd1,0x30,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0xd1,
54192 -0x30,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0xd1,0x30,0x22,0x90,0x01,0x30,
54193 -0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,0xa3,0xf0,
54194 -0xa3,0xf0,0xfd,0x7f,0x50,0xd1,0x30,0xe4,0xfd,0x7f,0x51,0xd1,0x30,0xe4,0xfd,0x7f,
54195 -0x52,0xd1,0x30,0xe4,0xfd,0x7f,0x53,0xc1,0x30,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x90,
54196 -0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x1d,0xf0,0xe0,0x30,0xe0,0x4b,0x90,0x9e,0x14,
54197 -0x74,0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x16,0x12,0x2a,0x7f,
54198 -0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xe4,0xfc,0xfd,
54199 -0xfe,0x78,0x1a,0x12,0x2a,0x6c,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,
54200 -0x16,0x12,0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x2a,
54201 -0x7f,0x90,0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x14,0xf0,0x7f,0x80,0x7e,
54202 -0x08,0x12,0x27,0xde,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,
54203 -0x2a,0x7f,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,
54204 -0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,
54205 -0xd1,0x30,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0xd1,0x30,0x90,0x00,0x46,
54206 -0xe0,0x44,0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,0x47,0xd1,0x30,
54207 -0x90,0x00,0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0xd1,0x30,0x90,0x00,0x46,0xe0,0x54,
54208 -0xef,0xfd,0x7f,0x46,0xd1,0x30,0xe4,0x90,0x9e,0x1a,0xf0,0x22,0xe4,0x90,0x9e,0x74,
54209 -0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,0x7f,0x80,0xc1,0x30,0x12,0x45,0xb1,0xbf,
54210 -0x01,0x10,0x90,0x02,0x09,0xe0,0xff,0x7d,0x01,0x12,0x47,0xfe,0x90,0x04,0x1f,0x74,
54211 -0x20,0xf0,0x22,0x75,0x28,0x33,0xe4,0xf5,0x29,0x75,0x2a,0x03,0xf5,0x2b,0x90,0x01,
54212 -0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,
54213 -0x22,0xe4,0x90,0x9e,0x31,0xf0,0xa3,0xf0,0x75,0x8e,0x02,0x12,0x4f,0xec,0x12,0x5f,
54214 -0x29,0x12,0x5f,0x3c,0xe4,0xf5,0x12,0x12,0x6d,0x11,0x12,0x77,0x25,0x12,0x60,0x1b,
54215 -0x12,0x32,0x3d,0x12,0x76,0x16,0x11,0x13,0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,
54216 -0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,0xf0,0xa3,0xe4,0xf0,0x12,0x5f,0x74,0x12,
54217 -0x5e,0x77,0x12,0x45,0x00,0x12,0x7c,0xe5,0x90,0x9e,0x33,0xe5,0xd9,0xf0,0x12,0x5e,
54218 -0xfa,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,0xf0,0x12,0x4d,0x28,0x75,0xe8,0x03,
54219 -0x43,0xa8,0x85,0xd2,0xaf,0x90,0x01,0xbe,0xe0,0x04,0xf0,0x90,0x01,0xc0,0xe0,0x04,
54220 -0xf0,0x90,0x9e,0x31,0xe0,0x64,0x01,0xf0,0x24,0x31,0x90,0x01,0xc4,0xf0,0x74,0x50,
54221 -0xa3,0xf0,0xe5,0x12,0x30,0xe4,0x09,0xc2,0xaf,0x53,0x12,0xef,0xd2,0xaf,0x71,0x1f,
54222 -0xe5,0x12,0x30,0xe6,0x16,0xc2,0xaf,0x53,0x12,0xbf,0xd2,0xaf,0x12,0x66,0xbc,0x90,
54223 -0x9e,0x1e,0xe0,0xff,0x60,0x03,0xb4,0x01,0x02,0x31,0x15,0x90,0x9e,0x1e,0xe0,0x70,
54224 -0x03,0x12,0x7d,0x43,0x11,0xe8,0x80,0xb9,0x90,0x06,0x34,0xe0,0x60,0x26,0x14,0x70,
54225 -0x1b,0x7b,0x01,0x7a,0x06,0x79,0x35,0x7f,0xf9,0x7e,0x01,0x12,0x75,0xb4,0xbf,0x01,
54226 -0x09,0x90,0x06,0x35,0xe0,0x54,0x0f,0xf0,0x80,0x05,0x80,0x00,0x02,0x75,0xa5,0xe4,
54227 -0x90,0x06,0x34,0xf0,0x22,0x90,0x9e,0x15,0xe0,0xc3,0x94,0x14,0x50,0x05,0xe0,0x04,
54228 -0xf0,0x21,0xcd,0x90,0x9e,0x15,0xe0,0x64,0x14,0x60,0x02,0x21,0xcd,0x90,0x9e,0x24,
54229 -0xe0,0x70,0x25,0x90,0x9e,0x27,0xe0,0x70,0x1f,0x90,0x9e,0x25,0xe0,0x70,0x19,0x90,
54230 -0x9e,0x28,0xe0,0x70,0x13,0x90,0x9e,0x26,0xe0,0x70,0x0d,0x90,0x9e,0x29,0xe0,0x70,
54231 -0x07,0x90,0x04,0xfd,0xe0,0x54,0xfe,0xf0,0x90,0x9e,0x24,0xe0,0x90,0x04,0x44,0xf0,
54232 -0x90,0x9e,0x25,0xe0,0x90,0x04,0x45,0xf0,0x90,0x9e,0x26,0xe0,0x90,0x04,0x46,0xf0,
54233 -0xa3,0xe4,0xf0,0x90,0x9e,0x27,0xe0,0x90,0x04,0x48,0xf0,0x90,0x9e,0x28,0xe0,0x90,
54234 -0x04,0x49,0xf0,0x90,0x9e,0x29,0xe0,0x90,0x04,0x4a,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,
54235 -0x10,0xe0,0x90,0x04,0x4c,0xf0,0x90,0x9e,0x11,0xe0,0x90,0x04,0x4d,0xf0,0x90,0x9e,
54236 -0x12,0xe0,0x90,0x04,0x4e,0xf0,0x90,0x9e,0x13,0xe0,0x90,0x04,0x4f,0xf0,0xe4,0x90,
54237 -0x9e,0x15,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,
54238 -0x9e,0x24,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x05,0x60,
54239 -0xe0,0x90,0x9e,0x34,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x35,0xf0,0x90,0x05,0x62,
54240 -0xe0,0x90,0x9e,0x36,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0x2d,
54241 -0xe0,0xff,0x90,0x9e,0x37,0xe0,0xfe,0xd3,0x9f,0x50,0x0b,0x90,0x9e,0x2d,0xe0,0xc3,
54242 -0x9e,0xd3,0x94,0x01,0x40,0x10,0x90,0x9e,0x1b,0xe0,0xb4,0x01,0x02,0x80,0x03,0x90,
54243 -0x9e,0x1f,0xe0,0xff,0x51,0x17,0x22,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,
54244 -0x05,0x61,0xe0,0x90,0x9e,0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,
54245 -0x05,0x63,0xe0,0x90,0x9e,0x2d,0xf0,0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x2b,0xe0,
54246 -0xd3,0x9e,0x40,0x1e,0xe0,0x2f,0xf0,0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,0xe0,
54247 -0xb4,0xff,0x03,0xe4,0xf0,0x22,0x90,0x9e,0x2d,0x80,0x03,0x90,0x9e,0x2c,0xe0,0x04,
54248 -0xf0,0x22,0x90,0x9e,0x2b,0xe0,0x2f,0xf0,0x22,0x90,0x9e,0x1c,0xe0,0x64,0x01,0x60,
54249 -0x02,0x61,0x1e,0x90,0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x12,0x4e,0x30,0x90,
54250 -0x9e,0x2e,0xe0,0x70,0x32,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,
54251 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x06,
54252 -0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x9e,0x1b,0xe0,0xff,0x51,0x17,0x90,0x9e,0x2e,
54253 -0x74,0x01,0x12,0x4e,0x26,0x80,0x40,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x70,0x38,0x90,
54254 -0x9e,0x1f,0xe0,0xff,0x51,0x17,0xe4,0x90,0x9e,0x2e,0xf0,0x90,0x00,0x45,0xe0,0x44,
54255 -0x01,0xfd,0x7f,0x45,0x12,0x4e,0x30,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,
54256 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,
54257 -0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,
54258 -0x2a,0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,
54259 -0x2c,0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,
54260 -0x01,0xcc,0xe0,0x54,0x0f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfd,0x70,0x02,
54261 -0x81,0x60,0x90,0x9e,0xae,0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
54262 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,0x81,0x59,0x90,0x9e,
54263 -0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd0,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x35,0xf0,
54264 -0x75,0x1e,0x01,0x75,0x1f,0x9e,0x75,0x20,0x35,0x75,0x21,0x01,0x7b,0x01,0x7a,0x9e,
54265 -0x79,0x36,0x12,0x45,0x09,0x90,0x9e,0x36,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,
54266 -0x90,0x9e,0xae,0x30,0xe0,0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,0x12,0x43,0x5f,
54267 -0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x02,0x90,0x00,0x89,0x12,
54268 -0x43,0x5f,0xe0,0x90,0x9e,0x38,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,
54269 -0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x39,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,
54270 -0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0xae,0xe0,0x75,
54271 -0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3b,0xf0,0x80,0x33,0xe0,
54272 -0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,
54273 -0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x38,0xf0,
54274 -0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,
54275 -0x39,0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,0x7a,0x9e,0x79,0x37,0x91,0x61,0x90,0x9e,
54276 -0x34,0xe0,0xff,0x90,0x9e,0xae,0xe0,0xfe,0x74,0x01,0xa8,0x06,0x08,0x80,0x02,0xc3,
54277 -0x33,0xd8,0xfc,0xf4,0x5f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0xae,0xe0,0xff,0x74,0x01,
54278 -0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,0xf0,0x90,0x9e,0xae,
54279 -0xe0,0x04,0xf0,0xe0,0x54,0x03,0xf0,0x61,0x29,0x90,0x01,0xc6,0xe0,0x44,0x02,0xf0,
54280 -0x22,0x90,0x9e,0x3c,0x12,0x43,0x8b,0xef,0x12,0x43,0x94,0x54,0x9c,0x01,0x54,0xa5,
54281 -0x02,0x54,0xc0,0x03,0x54,0xc9,0x05,0x54,0xd2,0x06,0x55,0x20,0x07,0x54,0xda,0x09,
54282 -0x54,0xe3,0x0c,0x54,0xec,0x0d,0x54,0xf5,0x0e,0x54,0xfe,0x1b,0x55,0x07,0x1c,0x55,
54283 -0x10,0x2c,0x54,0xae,0x2d,0x54,0xb7,0x2e,0x00,0x00,0x55,0x19,0x90,0x9e,0x3c,0x12,
54284 -0x43,0x6b,0x02,0x61,0x1d,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x6f,0x33,0x90,0x9e,
54285 -0x3c,0x12,0x43,0x6b,0x02,0x6f,0x39,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x6f,0x81,
54286 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x6f,0xaf,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
54287 -0x6e,0xe3,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x80,0x47,0x90,0x9e,0x3c,0x12,0x43,0x6b,
54288 -0x02,0x6f,0xf7,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x7e,0x1b,0x90,0x9e,0x3c,0x12,
54289 -0x43,0x6b,0x02,0x7c,0xb2,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x4f,0x19,0x90,0x9e,
54290 -0x3c,0x12,0x43,0x6b,0x02,0x6f,0x2b,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x6f,0x12,
54291 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x74,0x85,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,
54292 -0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,
54293 -0x54,0x07,0xfd,0xaf,0x06,0x90,0x9e,0x3f,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,
54294 -0x8b,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,
54295 -0x54,0x0f,0x90,0x9e,0x44,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,
54296 -0x13,0x54,0x03,0x90,0x9e,0x45,0xf0,0x90,0x9e,0x3f,0xe0,0xff,0x75,0xf0,0x09,0x90,
54297 -0x96,0x46,0x12,0x43,0x5f,0xad,0x82,0xac,0x83,0x90,0x9e,0x46,0xec,0xf0,0xa3,0xed,
54298 -0xf0,0xef,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,
54299 -0xa3,0x12,0x43,0x8b,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,
54300 -0x54,0x0f,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x41,
54301 -0x12,0x43,0x6b,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,
54302 -0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x01,
54303 -0x12,0x42,0x20,0xff,0x90,0x9e,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,
54304 -0xef,0xf0,0x12,0x29,0xd9,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,
54305 -0x90,0x9e,0x3f,0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
54306 -0x90,0x9e,0x40,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,
54307 -0xf0,0x75,0xf0,0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,
54308 -0x45,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,
54309 -0x59,0xef,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x5b,0x8f,
54310 -0x5c,0xe5,0x59,0x75,0xf0,0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x5d,
54311 -0x01,0xf5,0x5e,0x89,0x5f,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x46,0x12,0x43,0x5f,
54312 -0xaf,0x82,0x85,0x83,0x60,0x8f,0x61,0xe5,0x59,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,
54313 -0x74,0x96,0x35,0xf0,0x75,0x62,0x01,0xf5,0x63,0x89,0x64,0x74,0x82,0x25,0x59,0xf5,
54314 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x12,0x43,0x94,0x56,0xaf,0x00,0x56,0xc4,0x01,
54315 -0x56,0xd9,0x02,0x56,0xee,0x03,0x57,0x18,0x04,0x57,0x2d,0x05,0x57,0x42,0x06,0x57,
54316 -0x69,0x0c,0x57,0x97,0x0d,0x57,0xc4,0x0e,0x57,0xf1,0x0f,0x00,0x00,0x58,0x25,0xe5,
54317 -0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,
54318 -0x74,0x15,0x80,0x3c,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
54319 -0x83,0x74,0xf0,0xf0,0xa3,0x74,0x10,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,
54320 -0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x59,
54321 -0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,
54322 -0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,
54323 -0xf0,0xa3,0x74,0x8f,0xf0,0x02,0x58,0x25,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,
54324 -0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x59,0x25,
54325 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,
54326 -0x80,0x12,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,
54327 -0xf0,0xa3,0x74,0x0d,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,
54328 -0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x02,0x58,0x25,0x90,0x04,0x47,0xe0,0xab,0x5d,0xaa,
54329 -0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x46,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,
54330 -0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x45,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,
54331 -0xf0,0x90,0x04,0x44,0x02,0x58,0x1c,0x90,0x04,0x4b,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,
54332 -0x5f,0x12,0x42,0x4d,0x90,0x04,0x4a,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,
54333 -0x01,0x12,0x42,0x5f,0x90,0x04,0x49,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,
54334 -0x04,0x48,0x80,0x58,0x90,0x04,0x4f,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,
54335 -0x4d,0x90,0x04,0x4e,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,
54336 -0x5f,0x90,0x04,0x4d,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x4c,0x80,
54337 -0x2b,0x90,0x04,0x53,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,
54338 -0x52,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,
54339 -0x51,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x5c,0x82,
54340 -0x85,0x5b,0x83,0xa3,0xf0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,
54341 -0x01,0x12,0x29,0xd9,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x29,0xd9,0x5f,0xd0,
54342 -0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0xab,0x5d,0xe5,0x5f,0x24,0x01,0xf9,0xe4,
54343 -0x35,0x5e,0xfa,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,0xab,0x62,0xaa,
54344 -0x63,0xa9,0x64,0x90,0x00,0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
54345 -0x12,0x42,0x4d,0x85,0x5c,0x82,0x85,0x5b,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,
54346 -0x61,0x82,0x85,0x60,0x83,0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x5c,
54347 -0x82,0x85,0x5b,0x83,0xa3,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,
54348 -0x83,0xa3,0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x59,0x25,0xe0,0x24,
54349 -0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,
54350 -0x5a,0x0b,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
54351 -0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
54352 -0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x5d,0x15,
54353 -0x5a,0xe5,0x5a,0xc3,0x94,0x00,0x50,0xca,0x80,0x56,0xe5,0x59,0x25,0xe0,0x24,0xc6,
54354 -0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x5a,
54355 -0x0f,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
54356 -0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,
54357 -0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x4b,0xe5,0x5a,0xf0,0x80,0x10,
54358 -0x15,0x5a,0xe5,0x5a,0xc3,0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x4b,0xf0,
54359 -0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,
54360 -0xe0,0x4e,0x60,0x3b,0xe4,0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,
54361 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,
54362 -0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,
54363 -0x4c,0xe5,0x5a,0xf0,0x80,0x5b,0x05,0x5a,0xe5,0x5a,0xb4,0x10,0xca,0x80,0x52,0xe5,
54364 -0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,
54365 -0x4e,0x60,0x39,0xe4,0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,
54366 -0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,
54367 -0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,
54368 -0x10,0x80,0x0a,0x05,0x5a,0xe5,0x5a,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x4c,
54369 -0xf0,0x90,0x9e,0x4b,0xe0,0xff,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,
54370 -0x5f,0xef,0xf0,0x90,0x9e,0x4c,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x49,
54371 -0x12,0x43,0x5f,0xee,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
54372 -0xe0,0xd3,0x9f,0x40,0x05,0x90,0x9e,0x4b,0x51,0x74,0x74,0x84,0x25,0x59,0xf5,0x82,
54373 -0xe4,0x34,0x04,0xf5,0x83,0xe0,0xff,0x90,0x9e,0x4c,0xe0,0xfe,0xef,0xc3,0x9e,0x50,
54374 -0x02,0x51,0x74,0x90,0x9e,0x4b,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,
54375 -0x74,0x03,0xf0,0x22,0xef,0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,
54376 -0x22,0xef,0xd3,0x94,0x03,0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,
54377 -0x96,0x43,0xf0,0x22,0xe0,0xfd,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
54378 -0x83,0xed,0xf0,0xaf,0x59,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,
54379 -0x50,0x0e,0x74,0x84,0x2f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,
54380 -0x74,0xa6,0x2f,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x78,0xef,
54381 -0xf0,0x24,0xa6,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x79,0xf0,0x7b,
54382 -0x01,0x7a,0x9e,0x79,0x78,0x7d,0x02,0x51,0xce,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,
54383 -0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x97,0x12,0x43,0x8b,0x90,0x9e,0x9a,0xe0,0x54,
54384 -0xf0,0x44,0x06,0xff,0xf0,0xed,0x54,0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,
54385 -0xf0,0x90,0x9e,0x97,0x12,0x43,0x6b,0x90,0x9e,0x94,0x12,0x43,0x8b,0x7b,0x01,0x7a,
54386 -0x9e,0x79,0x9a,0x71,0xd9,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x50,0x8d,0x51,0xe5,0x51,
54387 -0x54,0x1f,0xf5,0x56,0x74,0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,
54388 -0x54,0x90,0x04,0xfd,0xe0,0xb4,0x01,0x05,0x75,0x57,0x03,0x80,0x03,0x75,0x57,0x01,
54389 -0xeb,0xc3,0x95,0x57,0x40,0x04,0xaf,0x50,0x80,0x33,0xe5,0x54,0x25,0x53,0xf5,0x55,
54390 -0xe5,0x56,0x90,0x41,0xd6,0x93,0xff,0xe5,0x55,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,
54391 -0x50,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xad,0x51,0xaf,0x50,0x41,0x85,
54392 -0x25,0x50,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe5,0x55,0xf0,0x22,0xad,0x07,0x75,
54393 -0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,
54394 -0xe4,0x34,0x9d,0xf5,0x83,0xe0,0x54,0x1f,0xf5,0x58,0xd3,0x9f,0x40,0x02,0x8f,0x58,
54395 -0xe5,0x58,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,
54396 -0x74,0x01,0x93,0xff,0xe5,0x58,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,
54397 -0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,
54398 -0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,
54399 -0xaf,0x05,0xad,0x58,0x51,0x85,0xaf,0x58,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
54400 -0x90,0x9e,0x91,0x12,0x43,0x8b,0x90,0x9e,0x75,0xe0,0x64,0x02,0x60,0x6e,0x90,0x9e,
54401 -0x75,0xe0,0x64,0x01,0x70,0x66,0x90,0x9e,0xb0,0xe0,0xff,0x04,0xf0,0x90,0x9e,0x91,
54402 -0x12,0x43,0x6b,0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x7f,0xaf,0x7e,0x01,0x91,0x82,
54403 -0xef,0x60,0x49,0x90,0x9e,0x91,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x75,
54404 -0x21,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x45,0x09,0x90,0x9e,0x94,0x12,0x43,
54405 -0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x90,0x9e,0x91,0x12,0x43,0x6b,0x12,0x29,0xd9,
54406 -0xff,0xc4,0x54,0x0f,0xf5,0x21,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x12,0x45,0x09,0x90,
54407 -0x01,0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0xd0,0xd0,0x92,0xaf,
54408 -0x22,0x90,0x9e,0x2f,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,0x80,0xf0,0x7b,
54409 -0x00,0x7a,0x00,0x79,0x13,0x90,0x9e,0x94,0x12,0x43,0x8b,0x0b,0x7a,0x9e,0x79,0x2f,
54410 -0x61,0xd9,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xa0,0xee,0xf0,0xa3,0xef,
54411 -0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0xa0,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,
54412 -0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,0xa3,0xe0,0x94,0xe8,0x90,0x9e,0xa2,0xe0,0x94,
54413 -0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x7f,0x00,0x80,0x15,0x90,0x9e,
54414 -0xa2,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,
54415 -0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xac,0x07,0xec,0xc3,0x94,0x20,0x50,0x0d,
54416 -0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2c,
54417 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x64,0xe5,0x64,0x54,0x1f,
54418 -0xff,0x90,0x9e,0x40,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x49,0x12,0x43,0x5f,0xe0,
54419 -0x90,0x9e,0x42,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xfe,
54420 -0x90,0x9e,0x43,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
54421 -0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x44,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,
54422 -0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x46,0xcb,
54423 -0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,0x43,0xe0,0x90,0x9e,0x40,
54424 -0xf0,0xf5,0x64,0xed,0x70,0x02,0xc1,0x2e,0x90,0x9e,0x41,0xed,0xf0,0xe5,0x64,0x30,
54425 -0xe6,0x0a,0x90,0x9e,0x40,0xe0,0xf5,0x64,0xa3,0xe0,0x14,0xf0,0x90,0x9e,0x41,0xe0,
54426 -0x70,0x02,0xc1,0x2e,0x90,0x9e,0x40,0xe0,0xff,0xd3,0x94,0x00,0x50,0x02,0xc1,0x2e,
54427 -0xe4,0x90,0x9e,0x3f,0xf0,0xef,0x14,0x90,0x9e,0x3e,0xf0,0x90,0x9e,0x42,0xe0,0xfd,
54428 -0x90,0x9e,0x3e,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,0x10,0x40,0x21,0xef,0x24,
54429 -0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
54430 -0xd8,0xf9,0xff,0x90,0x9e,0x46,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x27,0x90,
54431 -0x9e,0x3e,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,
54432 -0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x44,0xe0,0x5e,0xfe,
54433 -0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x3e,0xe0,0xf5,0x64,0xa3,0xe0,0x04,0xf0,
54434 -0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,0x3f,0xe0,0x6f,0x60,0x08,0x90,0x9e,0x3e,0xe0,
54435 -0x14,0xf0,0x80,0x87,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,0x3f,0xe0,0xc3,0x9f,0x50,
54436 -0x0d,0x90,0x9e,0x3e,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x42,0xe0,0xf5,0x64,0xe5,0x64,
54437 -0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,
54438 -0x93,0xff,0xe5,0x64,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,
54439 -0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xec,0x25,0xe0,
54440 -0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x04,
54441 -0xad,0x64,0x51,0x85,0xaf,0x64,0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,
54442 -0x90,0x01,0x38,0xe5,0x30,0xf0,0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0x12,
54443 -0x44,0xf1,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x52,0x90,
54444 -0x9e,0x63,0xe0,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x42,0x90,
54445 -0x9e,0x60,0xe0,0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,
54446 -0x80,0x2f,0x90,0x9e,0x63,0xe0,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,
54447 -0x20,0x90,0x9e,0x63,0xe0,0x30,0xe4,0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x11,
54448 -0x90,0x9e,0x52,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x20,0xf0,0x80,0x03,0x7f,0x01,
54449 -0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,0x7f,0x00,0x22,0x90,0x01,0x3c,0x74,0xff,0xf0,
54450 -0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,
54451 -0x54,0x12,0x4e,0x30,0x7d,0xff,0x7f,0x55,0x12,0x4e,0x30,0x7d,0xff,0x7f,0x56,0x12,
54452 -0x4e,0x30,0x7d,0xff,0x7f,0x57,0x02,0x4e,0x30,0x90,0x00,0x02,0xe0,0x54,0xe0,0x90,
54453 -0x9e,0x75,0x60,0x04,0x74,0x01,0xf0,0x22,0x74,0x02,0xf0,0x22,0x90,0x00,0xf3,0xe0,
54454 -0x30,0xe3,0x08,0x90,0x9e,0x77,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9e,0x77,0xf0,
54455 -0x90,0x9e,0x77,0xe0,0xb4,0x01,0x12,0x90,0x00,0xf2,0xe0,0x30,0xe7,0x0b,0x90,0x9e,
54456 -0x64,0x74,0xfd,0xf0,0xa3,0x74,0x33,0xf0,0x22,0x90,0x9e,0x64,0x74,0xfd,0xf0,0xa3,
54457 -0x74,0x2f,0xf0,0x22,0x90,0x01,0x64,0x74,0xa0,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,
54458 -0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,
54459 -0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0x7b,0xf0,0x74,0x5f,
54460 -0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,0x90,0x00,0x55,0xe0,0x5f,0xf5,
54461 -0x3d,0xe5,0x3d,0x30,0xe6,0x18,0x74,0x40,0xf0,0x90,0x9e,0x1d,0xe0,0x54,0x03,0xff,
54462 -0xbf,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0x60,0x05,0x7f,0x01,0x12,0x4e,0x45,0xe5,0x3d,
54463 -0x30,0xe7,0x15,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x9e,0x1d,0xe0,0x54,0x03,0xff,
54464 -0xbf,0x03,0x05,0x7f,0x02,0x12,0x4e,0x45,0x90,0x01,0xc4,0x74,0x7b,0xf0,0x74,0x5f,
54465 -0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,
54466 -0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x8f,0x6b,0x8c,
54467 -0x6c,0x8d,0x6d,0x22,0x8f,0x6e,0x8c,0x6f,0x8d,0x70,0x22,0xe4,0xf5,0x73,0x90,0x9e,
54468 -0x63,0xf0,0xf5,0x74,0x90,0x9e,0x60,0x74,0x0c,0xf0,0x90,0x9e,0x5e,0xf0,0xe4,0x90,
54469 -0x9e,0x61,0xf0,0x90,0x9e,0x5d,0xf0,0x90,0x9e,0x5c,0xf0,0x90,0x9e,0x5f,0x04,0xf0,
54470 -0x90,0x9e,0x50,0xf0,0xe4,0x90,0x9e,0x62,0xf0,0x90,0x9e,0x52,0xf0,0x90,0x9e,0x5a,
54471 -0x74,0x07,0xf0,0xe4,0x90,0x9e,0x51,0xf0,0x90,0x9e,0x58,0xf0,0xa3,0x74,0x02,0xf0,
54472 -0x90,0x9e,0x56,0x14,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x55,0x74,0x14,0xf0,0x90,
54473 -0x9e,0x5b,0x74,0x05,0xf0,0xe4,0x90,0x9e,0x54,0xf0,0x90,0x9e,0x4f,0xf0,0x90,0x9e,
54474 -0x76,0xf0,0x22,0xe4,0x90,0x9e,0x62,0xf0,0x90,0x9e,0x51,0xf0,0x90,0x9e,0x63,0xf0,
54475 -0x22,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x11,0x83,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x12,
54476 -0x29,0xd9,0xf5,0x74,0x14,0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,
54477 -0x40,0x7f,0x01,0x80,0x3a,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,
54478 -0x20,0xfd,0xe4,0xff,0x11,0xf2,0x80,0x27,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,
54479 -0x02,0x12,0x42,0x20,0xfd,0x7f,0x01,0x11,0xf2,0x1f,0x80,0x13,0xab,0x59,0xaa,0x5a,
54480 -0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x7f,0x02,0x11,0xf2,0xe4,0xff,0x31,
54481 -0x46,0x22,0xef,0x24,0xfe,0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x5f,0x74,0x01,0xf0,
54482 -0x80,0x16,0xed,0x70,0x0a,0x90,0x9e,0x5b,0xe0,0x90,0x9e,0x5f,0xf0,0x80,0x05,0x90,
54483 -0x9e,0x5f,0xed,0xf0,0x90,0x9e,0x5f,0xe0,0x90,0x9e,0x50,0xf0,0x22,0xd3,0x10,0xaf,
54484 -0x01,0xc3,0xc0,0xd0,0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x61,0xf0,0x90,0x00,
54485 -0x03,0x12,0x42,0x20,0x90,0x9e,0x4f,0xf0,0x12,0x29,0xd9,0x65,0x74,0x60,0x02,0x11,
54486 -0x91,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x64,0x01,0x70,0x30,0x7d,0x7c,0x7f,0x02,0x12,
54487 -0x36,0x75,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,
54488 -0x3c,0x74,0x02,0xf0,0x12,0x47,0x16,0xe4,0xff,0x12,0x48,0x8f,0x90,0x06,0x04,0xe0,
54489 -0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,0x7c,
54490 -0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x36,0xe6,0x7d,0x02,0x7f,0x03,0x12,
54491 -0x36,0xe6,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,0xf0,
54492 -0x90,0x9e,0x58,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x73,0x30,0xe0,0x1b,0x90,
54493 -0x9e,0x52,0xe0,0x70,0x1a,0xe0,0x04,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0x0f,0xc3,0x94,
54494 -0x04,0x50,0x0c,0x7d,0x01,0x7f,0x04,0x02,0x47,0x1a,0xe4,0x90,0x9e,0x52,0xf0,0x22,
54495 -0xe5,0x12,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x5e,0x90,0x9e,0x60,0xe0,
54496 -0x54,0x0f,0xd3,0x94,0x01,0x40,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x4b,0x90,
54497 -0x02,0x87,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x3d,0x90,0x9e,0x75,
54498 -0xe0,0xb4,0x02,0x10,0x90,0x9e,0x64,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,
54499 -0x60,0x17,0x80,0x26,0x90,0x9e,0x75,0xe0,0xb4,0x01,0x0e,0x90,0x01,0xaf,0xe0,0x60,
54500 -0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x11,0x90,0x9e,0x54,0xe0,0x70,0x08,0x90,
54501 -0x01,0xb9,0x74,0x10,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,
54502 -0x7f,0x00,0x22,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,0x73,0xb4,
54503 -0x01,0x04,0xe4,0xff,0x51,0x62,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x0c,
54504 -0xf0,0x22,0x8f,0x76,0x90,0x9e,0x5e,0xe0,0x90,0x01,0xc1,0xf0,0xa3,0xe5,0x12,0xf0,
54505 -0x12,0x45,0xb1,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x69,0x12,0x47,0xfa,0xe5,0x76,
54506 -0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,
54507 -0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,
54508 -0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x90,0x9e,0xaf,0xef,0xf0,0x51,0xc5,0x90,0x9e,
54509 -0xaf,0xe0,0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,
54510 -0xe0,0x44,0x04,0xf0,0x22,0x90,0x9d,0xff,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
54511 -0x7f,0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0x90,0x80,
54512 -0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,0x43,
54513 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,
54514 -0x0b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x2f,
54515 -0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,0xe4,0xfd,0xff,0x12,0x34,
54516 -0x81,0x90,0x9e,0x77,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,
54517 -0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x22,0x8f,0x27,0xe4,0x90,0x9e,0xa8,
54518 -0xf0,0xa3,0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0xef,0x65,
54519 -0x27,0x60,0x3e,0xc3,0x90,0x9e,0xa9,0xe0,0x94,0x88,0x90,0x9e,0xa8,0xe0,0x94,0x13,
54520 -0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0xa8,0xe4,0x75,0xf0,
54521 -0x01,0x12,0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x37,0x54,0xd3,0x90,0x9e,0xa9,0xe0,
54522 -0x94,0x32,0x90,0x9e,0xa8,0xe0,0x94,0x00,0x40,0xb9,0x90,0x01,0xc7,0xe0,0x30,0xe0,
54523 -0xb2,0x22,0x90,0x9e,0x5e,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x01,0xf0,0x12,0x45,0x01,
54524 -0x12,0x45,0x02,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,0x22,0x90,0x9e,0x60,0xe0,
54525 -0x30,0xe6,0x1c,0xe0,0x54,0x0f,0xff,0x90,0x9e,0x4e,0xe0,0xfe,0x4f,0x90,0x01,0x2f,
54526 -0xf0,0xee,0x64,0x80,0x90,0x9e,0x4e,0xf0,0x90,0x9e,0x60,0xe0,0x54,0xbf,0xf0,0x22,
54527 -0x8f,0x75,0x12,0x45,0xb1,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x6a,0x12,0x47,0xfa,
54528 -0xe5,0x75,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,
54529 -0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,
54530 -0xef,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xe4,0x90,0x9e,0x2f,0xf0,0xe5,0x74,
54531 -0x60,0x6a,0xe5,0x73,0x64,0x01,0x70,0x64,0xe5,0x74,0x14,0x60,0x29,0x24,0xfd,0x60,
54532 -0x25,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x23,0x90,0x9e,0x50,0xe0,0x14,0xf0,0xe0,
54533 -0x60,0x04,0xa3,0xe0,0x60,0x16,0x90,0x9e,0x50,0xe0,0x70,0x0a,0x90,0x9e,0x5f,0xe0,
54534 -0x90,0x9e,0x50,0xf0,0x80,0x00,0x90,0x9e,0x2f,0x74,0x01,0xf0,0x90,0x9e,0x2f,0xe0,
54535 -0x60,0x2a,0x90,0x9e,0x63,0xe0,0x44,0x10,0xf0,0xe4,0x90,0x9e,0x89,0xf0,0x90,0x9e,
54536 -0x5a,0x12,0x44,0x56,0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x5e,0xe0,0x54,0x0f,
54537 -0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x1a,0x22,0xef,0xc3,0x94,
54538 -0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,0xc4,0x54,0xf0,0xfd,0xef,0xc3,0x13,0xfe,
54539 -0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x0f,0x80,0x10,0xef,0xc3,
54540 -0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,
54541 -0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x4d,0xf0,0x22,0xad,0x07,0xed,
54542 -0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
54543 -0x80,0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,
54544 -0x64,0xe5,0x64,0x54,0x1f,0xfc,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,
54545 -0xe0,0xff,0x90,0x9e,0x3e,0xf0,0xed,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,
54546 -0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x3f,0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,
54547 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,
54548 -0x41,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,
54549 -0xf5,0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,0xfb,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,
54550 -0xe4,0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,0xeb,0xf0,0xec,0xc3,0x9f,0x40,0x02,0xa1,
54551 -0xd4,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,
54552 -0x9e,0x3e,0xe0,0xff,0xeb,0xd3,0x9f,0x40,0x02,0xc1,0x05,0xeb,0xc3,0x94,0x10,0x40,
54553 -0x21,0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,
54554 -0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x3f,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,
54555 -0x70,0x23,0xeb,0xc3,0x94,0x10,0x50,0x39,0x74,0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,
54556 -0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x41,0xe0,0x5e,0xfe,0xa3,
54557 -0xe0,0x5f,0x4e,0x60,0x1c,0xeb,0x64,0x13,0x60,0x08,0xeb,0x64,0x12,0x60,0x03,0xbb,
54558 -0x11,0x09,0x90,0x9e,0x3f,0xe0,0x30,0xe0,0x02,0x7b,0x18,0xac,0x03,0x8c,0x64,0x80,
54559 -0x34,0x0b,0x80,0x8b,0x90,0x9e,0x3e,0xe0,0xfb,0x6c,0x70,0x69,0x74,0x67,0x2d,0xf5,
54560 -0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,
54561 -0x43,0x5f,0xe0,0xb4,0x01,0x0c,0xe5,0x64,0x20,0xe6,0x07,0xec,0x44,0x40,0xf5,0x64,
54562 -0x80,0x03,0xaf,0x64,0x22,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,
54563 -0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
54564 -0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
54565 -0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
54566 -0xa3,0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,0x9e,0x3e,0xe0,0xff,0x74,
54567 -0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0xac,0x07,0x8f,0x64,0xec,
54568 -0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,
54569 -0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,
54570 -0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,
54571 -0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x64,0x22,
54572 -0x74,0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xaf,0x05,0xe5,0x64,
54573 -0x44,0x80,0xfd,0x12,0x5a,0x85,0xe5,0x64,0x44,0x80,0xff,0x22,0xe4,0xf5,0x59,0xe5,
54574 -0x59,0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,0x95,0x01,0xe0,0xff,0x90,
54575 -0x9a,0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4b,
54576 -0x12,0x43,0x5f,0xe0,0x64,0x01,0x60,0x03,0x02,0x6d,0x04,0xe5,0x59,0x25,0xe0,0x24,
54577 -0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xd3,0x94,0x00,0xee,
54578 -0x94,0x00,0x50,0x03,0x02,0x6d,0x04,0xe5,0x59,0x94,0x20,0x40,0x09,0x90,0x9a,0xc5,
54579 -0xe0,0x60,0x03,0x02,0x6d,0x10,0xe5,0x59,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf9,0x74,
54580 -0x90,0x35,0xf0,0x75,0x5e,0x01,0xf5,0x5f,0x89,0x60,0xe5,0x59,0x25,0xe0,0x24,0x80,
54581 -0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x38,0xcf,0xf0,
54582 -0xa3,0xef,0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,
54583 -0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x3a,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,0xc3,0x94,
54584 -0x20,0x50,0x14,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,
54585 -0x3f,0x90,0x9e,0x34,0xf0,0x80,0x12,0x74,0xa6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,
54586 -0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfe,0x54,0x1f,
54587 -0xa3,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0x90,0x9e,
54588 -0x3d,0xf0,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xc3,0x94,
54589 -0x05,0x40,0x03,0x02,0x69,0xdd,0x90,0x9e,0x3d,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x9f,
54590 -0x40,0x13,0x90,0x9e,0x3d,0xe0,0x90,0x9e,0x35,0xf0,0xee,0x54,0x40,0xfe,0x90,0x9e,
54591 -0x34,0xf0,0xef,0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x64,0x01,0x70,0x29,0x90,0x9e,0x35,
54592 -0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,
54593 -0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xda,0x80,0x30,0x90,0x9e,0x35,
54594 -0xe0,0x90,0x40,0xf6,0x80,0x27,0x90,0x9e,0x35,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,
54595 -0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,
54596 -0xef,0x90,0x41,0x12,0x80,0x07,0x90,0x9e,0x35,0xe0,0x90,0x41,0x2e,0x93,0x90,0x9e,
54597 -0x3c,0xf0,0x90,0x9e,0x3c,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x50,0xf9,0x74,0x40,0x35,
54598 -0xf0,0x75,0x5b,0xff,0xf5,0x5c,0x89,0x5d,0x90,0x9e,0x34,0xe0,0x90,0x41,0xf2,0x93,
54599 -0xff,0xd3,0x90,0x9e,0x3b,0xe0,0x9f,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x09,0xe4,
54600 -0xfd,0xaf,0x59,0x12,0x5c,0xd8,0x81,0x9b,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,
54601 -0xe4,0x34,0x95,0xf5,0x83,0xe0,0xf5,0x61,0xa3,0xe0,0xf5,0x62,0xab,0x5b,0xaa,0x5c,
54602 -0xa9,0x5d,0x12,0x29,0xd9,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,0x42,
54603 -0x97,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,
54604 -0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x7e,0x00,
54605 -0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,
54606 -0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,
54607 -0xa9,0x5d,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,
54608 -0x60,0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,
54609 -0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x03,
54610 -0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x06,0x12,
54611 -0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,
54612 -0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x7e,
54613 -0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,0xac,0xf0,
54614 -0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,
54615 -0x5c,0xa9,0x5d,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,
54616 -0xfc,0xa3,0xe0,0xfd,0x12,0x29,0xf2,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,0x0c,
54617 -0xe5,0x62,0x9f,0xf5,0x62,0xe5,0x61,0x9e,0xf5,0x61,0x80,0x05,0xe4,0xf5,0x61,0xf5,
54618 -0x62,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,0x61,
54619 -0xf0,0xa3,0xe5,0x62,0xf0,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
54620 -0x34,0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,0x07,
54621 -0xaf,0x59,0x12,0x64,0xbd,0x81,0x6f,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x9e,0xf5,
54622 -0x82,0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,
54623 -0x50,0x02,0x81,0x6f,0x7d,0x01,0xaf,0x59,0x12,0x5c,0xd8,0x81,0x6f,0x74,0xe6,0x25,
54624 -0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,0x61,0x78,
54625 -0x90,0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x19,0x40,
54626 -0x3d,0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x11,0x40,0x2e,
54627 -0x80,0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,
54628 -0x0a,0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x03,0x40,
54629 -0x0d,0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,0x84,
54630 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0x74,0x44,0x25,0x59,
54631 -0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,0x61,0x25,
54632 -0x90,0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0x61,0x25,0x74,0x85,0x25,0x59,0xf5,0x82,
54633 -0xe4,0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,0xe4,0x33,
54634 -0xfe,0x74,0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,0xd3,0x9f,
54635 -0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,0x33,0xfe,
54636 -0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,0xee,0x64,
54637 -0x80,0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,
54638 -0xf5,0x83,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,0x59,0xf5,
54639 -0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,0x63,0x05,
54640 -0x80,0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x63,0x03,0x80,0x03,0x75,0x63,0x01,
54641 -0x74,0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,0x85,0x25,
54642 -0x59,0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,
54643 -0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,
54644 -0xe0,0x04,0xf0,0x80,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,
54645 -0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x35,0xe0,0xff,0x74,0x26,0x25,0x59,0xf5,0x82,
54646 -0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,
54647 -0xf5,0x83,0xe5,0x63,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4c,0x12,0x43,0x5f,
54648 -0xe0,0xb4,0x01,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,
54649 -0xf5,0x83,0xe4,0xf0,0xad,0x63,0x81,0x6a,0xec,0x64,0x06,0x60,0x02,0x81,0x6f,0xf5,
54650 -0x61,0xf5,0x62,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,0xa3,
54651 -0xe0,0xfd,0x12,0x29,0xf2,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,0x25,
54652 -0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0xe4,0xf5,0x5a,0xab,0x5e,
54653 -0xaa,0x5f,0xa9,0x60,0x75,0xf0,0x02,0xe5,0x5a,0xa4,0xf5,0x82,0x85,0xf0,0x83,0x12,
54654 -0x42,0xc2,0xfd,0xac,0xf0,0xe5,0x5a,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,0x12,0x29,
54655 -0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,0xe0,
54656 -0x95,0x62,0x90,0x9e,0x36,0xe0,0x95,0x61,0x40,0x07,0x05,0x5a,0xe5,0x5a,0xb4,0x05,
54657 -0xbd,0xe5,0x5a,0xc3,0x13,0xf5,0x5a,0xe5,0x63,0xb4,0x01,0x06,0xe5,0x5a,0x70,0x46,
54658 -0x80,0x13,0xe5,0x63,0xb4,0x03,0x15,0xe5,0x5a,0x70,0x05,0x75,0x63,0x03,0x80,0x39,
54659 -0xe5,0x5a,0xb4,0x01,0x05,0x75,0x63,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x63,0xb4,0x05,
54660 -0x28,0xe5,0x5a,0x70,0x05,0x75,0x63,0x05,0x80,0x0d,0xe5,0x5a,0xb4,0x01,0x05,0x75,
54661 -0x63,0x03,0x80,0x03,0x75,0x63,0x01,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,0x9e,
54662 -0x3a,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,
54663 -0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0x74,0x84,0x25,0x59,0xf5,
54664 -0x82,0xe4,0x34,0x98,0xf5,0x83,0xe5,0x63,0xf0,0xfd,0xaf,0x59,0x12,0x64,0x7d,0x74,
54665 -0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,0x74,0xe6,
54666 -0x50,0x0e,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x0b,
54667 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x5e,0xaa,0x5f,0xa9,
54668 -0x60,0xe4,0xf5,0xf0,0x12,0x42,0xfa,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,
54669 -0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,
54670 -0x00,0x06,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,0x43,
54671 -0x19,0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,
54672 -0xa3,0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,
54673 -0xf0,0xa3,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,
54674 -0xe4,0xf0,0xa3,0xf0,0x05,0x59,0xe5,0x59,0xc3,0x94,0x40,0x50,0x03,0x02,0x66,0xbf,
54675 -0x22,0x90,0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,
54676 -0xe4,0xf0,0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x0d,
54677 -0xbd,0x10,0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,0xe4,0xfd,0x75,
54678 -0xf0,0x0a,0xed,0x90,0x90,0x00,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,
54679 -0xed,0x90,0x90,0x02,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,
54680 -0x90,0x04,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x06,
54681 -0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x08,0x12,0x43,
54682 -0x5f,0xe4,0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0x74,
54683 -0x13,0xf0,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0x74,0x84,
54684 -0x2d,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,0x24,0x80,0xf5,
54685 -0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,
54686 -0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,
54687 -0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x44,0xf5,
54688 -0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,
54689 -0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,
54690 -0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,0xf5,0x82,0xe4,
54691 -0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,
54692 -0xe4,0xf0,0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x41,
54693 -0xc4,0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,0x74,0x01,0x93,0x2f,0xff,0xe4,
54694 -0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
54695 -0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4b,
54696 -0x12,0x43,0x5f,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,
54697 -0x74,0x01,0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0c,0xf0,
54698 -0x75,0xf0,0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x5f,0x74,0xff,0xf0,0xa3,0xf0,0x75,
54699 -0xf0,0x09,0xed,0x90,0x96,0x44,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0x75,
54700 -0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0x74,0x13,0xf0,0x75,0xf0,0x09,0xed,
54701 -0x90,0x96,0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,
54702 -0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,
54703 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x02,
54704 -0xa1,0x3f,0x22,0x12,0x29,0xd9,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,0x02,
54705 -0x12,0x42,0x20,0xff,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,
54706 -0xf0,0x22,0xe5,0x59,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x96,0x42,
54707 -0xf0,0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,0xc4,
54708 -0x13,0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x55,0x35,0x12,0x29,0xd9,0x90,0x95,
54709 -0x01,0xf0,0x22,0x12,0x29,0xd9,0xf5,0x73,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0xff,
54710 -0x30,0xe0,0x25,0x12,0x29,0xd9,0x90,0x9e,0x56,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,
54711 -0x90,0x9e,0x57,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x55,0xf0,0x90,0x00,0x03,
54712 -0x12,0x42,0x20,0x90,0x9e,0x5b,0xf0,0x22,0x90,0x9e,0x56,0x74,0x01,0xf0,0x90,0x9e,
54713 -0x57,0x74,0x03,0xf0,0x90,0x9e,0x55,0x74,0x14,0xf0,0x90,0x9e,0x5b,0x74,0x05,0xf0,
54714 -0x22,0x12,0x29,0xd9,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x5a,0xf0,0x90,
54715 -0x00,0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x58,0xe4,0xf0,0xa3,0xef,0xf0,0x22,0x90,
54716 -0x9e,0x5a,0x74,0x07,0xf0,0x90,0x9e,0x58,0xe4,0xf0,0xa3,0x74,0x02,0xf0,0x22,0x90,
54717 -0x02,0x09,0xe0,0xfd,0x12,0x29,0xd9,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x67,0xf0,
54718 -0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x68,0xf0,0x90,0x00,0x02,
54719 -0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x69,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,
54720 -0xff,0xed,0x2f,0x90,0x9e,0x6a,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0xae,0x05,
54721 -0xed,0x2f,0x90,0x9e,0x6b,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
54722 -0x3f,0x12,0x43,0x8b,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,
54723 -0xfa,0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,
54724 -0x00,0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,0x29,0xd9,0xff,0x60,0x2c,0xb5,0x22,
54725 -0x16,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0x65,0x24,0x70,
54726 -0x04,0xe5,0x23,0x65,0xf0,0x60,0x23,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,
54727 -0x12,0x42,0xc2,0xff,0xae,0xf0,0x11,0x6f,0x80,0x10,0x90,0x9e,0x3f,0x12,0x43,0x6b,
54728 -0x12,0x29,0xd9,0x65,0x22,0x60,0x03,0x12,0x44,0xca,0xd0,0xd0,0x92,0xaf,0x22,0x90,
54729 -0x9e,0x42,0xee,0xf0,0xa3,0xef,0xf0,0x75,0x22,0x01,0x8e,0x23,0xf5,0x24,0xe4,0xfd,
54730 -0x7f,0x0b,0x11,0xb1,0xe4,0xfd,0x7f,0x02,0x11,0xb1,0x31,0x87,0xe4,0xff,0x31,0x7b,
54731 -0xe4,0xf5,0x26,0x90,0x01,0xc9,0xe5,0x26,0xf0,0x90,0x9e,0x42,0xe0,0xfc,0xa3,0xe0,
54732 -0xfd,0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,0x7d,0x01,0x7f,0x60,0x7e,0x01,0x02,0x35,
54733 -0xab,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,0x90,0x9e,0x44,
54734 -0xef,0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9e,0x44,0xe0,0xff,
54735 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,
54736 -0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
54737 -0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,0x12,0x4d,0x28,0x90,
54738 -0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
54739 -0xff,0x90,0x00,0x46,0x80,0x5a,0x90,0x9e,0x44,0xe0,0x24,0xf8,0xf0,0xa3,0xe0,0x70,
54740 -0x1d,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
54741 -0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,0x1a,0x90,0x9e,
54742 -0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,
54743 -0xf0,0xff,0x90,0x00,0x43,0xe0,0x4f,0xf0,0x12,0x4d,0x28,0x90,0x9e,0x44,0xe0,0xff,
54744 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,
54745 -0xe0,0x5f,0xf0,0x12,0x4d,0x28,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x01,0xca,0xe5,0x25,
54746 -0xf0,0xef,0x60,0x02,0x31,0xe8,0x22,0x7f,0x0b,0x51,0x08,0xef,0x65,0x25,0x60,0x10,
54747 -0xe5,0x25,0xb4,0x01,0x05,0xe4,0xf5,0x25,0x80,0x03,0x75,0x25,0x01,0x7f,0x01,0x22,
54748 -0x7f,0x00,0x22,0xe5,0x22,0x64,0x01,0x70,0x3e,0x31,0x87,0xbf,0x01,0x04,0x7f,0x01,
54749 -0x31,0x7b,0x90,0x00,0x46,0xe0,0x44,0x04,0xfd,0x7f,0x46,0x12,0x4e,0x30,0x90,0x00,
54750 -0x44,0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x12,0x4e,0x30,0x90,0x00,0x46,0xe0,0x54,0xfb,
54751 -0xfd,0x7f,0x46,0x12,0x4e,0x30,0x7f,0x02,0x51,0x08,0x8f,0x26,0x90,0x01,0xc9,0xe5,
54752 -0x26,0xf0,0xb4,0x01,0x02,0x31,0xe8,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,0xb1,0xf0,
54753 -0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x12,0x4e,0x30,0x90,0x9e,0xb1,0xe0,
54754 -0x44,0xb0,0xfd,0x7f,0x49,0x02,0x4e,0x30,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,
54755 -0x9e,0xb2,0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
54756 -0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,0x12,0x4d,
54757 -0x28,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,
54758 -0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,0xe4,0xfe,0xef,0x5b,
54759 -0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,0x80,0x44,
54760 -0x90,0x9e,0xb2,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
54761 -0xc3,0x33,0xd8,0xfc,0x12,0x4d,0x20,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,
54762 -0xa8,0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x42,
54763 -0xe0,0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,
54764 -0x13,0xd8,0xf8,0xff,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
54765 -0x90,0x9e,0x6d,0xe0,0x90,0x9e,0x40,0xf0,0x90,0x9e,0x6e,0xe0,0xf5,0x64,0xa3,0xe0,
54766 -0xf5,0x65,0xe4,0xf5,0x61,0x74,0x70,0x25,0x61,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,
54767 -0xe0,0xff,0x74,0x66,0x25,0x61,0xf8,0xa6,0x07,0x05,0x61,0xe5,0x61,0xb4,0x04,0xe5,
54768 -0x90,0x9e,0x40,0xe0,0x12,0x43,0x94,0x73,0x06,0x00,0x74,0x2e,0x01,0x73,0x0c,0x02,
54769 -0x73,0x0c,0x03,0x73,0x0c,0x04,0x74,0x2e,0x05,0x73,0xfe,0x80,0x74,0x14,0x81,0x74,
54770 -0x2e,0x82,0x00,0x00,0x74,0x2a,0xaf,0x69,0x91,0x35,0x81,0x2e,0x90,0x9e,0x40,0xe0,
54771 -0xff,0xb4,0x02,0x08,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x80,0x0f,0xef,0x90,0x9e,0x3f,
54772 -0xb4,0x03,0x05,0x74,0x02,0xf0,0x80,0x03,0x74,0x04,0xf0,0xc3,0xe5,0x64,0x94,0x08,
54773 -0x50,0x49,0xe4,0xf5,0x61,0x90,0x9e,0x3f,0xe0,0xff,0xe5,0x61,0xc3,0x9f,0x40,0x02,
54774 -0x81,0x2e,0xc3,0xe5,0x64,0x94,0x01,0x50,0x14,0xe5,0x61,0x25,0x65,0xff,0xc3,0x74,
54775 -0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xfd,0x12,0x4e,0x30,0x80,0x1a,0xc3,0x74,0x03,
54776 -0x95,0x61,0x24,0x66,0xf8,0xe6,0xff,0xe5,0x61,0x7c,0x00,0x25,0x65,0xfd,0xec,0x35,
54777 -0x64,0x8d,0x82,0xf5,0x83,0xef,0xf0,0x05,0x61,0x80,0xba,0xc3,0xe5,0x64,0x94,0x10,
54778 -0x40,0x02,0x81,0x2e,0x90,0x9e,0x40,0xe0,0x64,0x04,0x60,0x02,0x81,0x2e,0xaf,0x67,
54779 -0xfc,0xfd,0xfe,0x78,0x10,0x12,0x2a,0x6c,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,
54780 -0xaf,0x66,0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x2a,0x6c,0xd0,0x03,0xd0,0x02,0xd0,
54781 -0x01,0xd0,0x00,0x12,0x43,0x46,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xaf,0x68,
54782 -0xe4,0xfc,0xfd,0xfe,0x78,0x08,0x12,0x2a,0x6c,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,
54783 -0x00,0x12,0x43,0x46,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0xaf,0x69,0xe4,0xfc,
54784 -0xfd,0xfe,0x12,0x43,0x46,0xa3,0x12,0x2a,0x7f,0x90,0x9e,0x41,0x12,0x43,0x53,0x90,
54785 -0x80,0x85,0x12,0x2a,0x7f,0xaf,0x65,0xae,0x64,0x12,0x2f,0xd9,0x80,0x30,0xe5,0x68,
54786 -0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,
54787 -0x37,0x54,0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,
54788 -0xf5,0x62,0xaf,0x63,0xfe,0x12,0x36,0xcb,0x80,0x04,0x7f,0x00,0x80,0x02,0x7f,0x01,
54789 -0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x6a,0xe4,0x90,0x9e,0x45,0xf0,0xe5,0x6a,0x14,0xfe,
54790 -0x90,0x9e,0x45,0xe0,0xff,0xc3,0x9e,0x50,0x0e,0xef,0x04,0xfd,0x12,0x34,0xb7,0x90,
54791 -0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,0x7d,0xff,0x12,0x34,0xb7,
54792 -0x90,0x9e,0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,0x94,0xff,0x50,0x0f,0xe0,
54793 -0xff,0x04,0xfd,0x12,0x34,0xb7,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe8,0xad,0x6a,
54794 -0x7f,0xff,0x02,0x34,0xb7,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0xf5,0x5b,0x75,
54795 -0x5c,0x04,0xf5,0x5d,0xf5,0x5f,0xf5,0x60,0x90,0x02,0x09,0xe0,0xff,0x12,0x29,0xd9,
54796 -0xfe,0xef,0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,0x75,0x5a,0x80,0x80,0x05,
54797 -0xe4,0xf5,0x59,0xf5,0x5a,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x74,0x20,0x25,
54798 -0x5b,0xf5,0x5b,0xad,0x5a,0xe5,0x5b,0x2d,0xff,0x24,0x01,0xf5,0x82,0xe4,0x34,0xfc,
54799 -0xf5,0x83,0xe0,0x90,0x9e,0x6d,0xf0,0x74,0x02,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
54800 -0x83,0xe0,0xfe,0xe5,0x5b,0x2d,0x24,0x03,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,
54801 -0x24,0x00,0xff,0xe4,0x3e,0x90,0x9e,0x6e,0xf0,0xa3,0xef,0xf0,0x7f,0x04,0xe5,0x5b,
54802 -0x25,0x5a,0x2f,0x24,0x00,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0xfe,0x74,0x6c,
54803 -0x2f,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,0xee,0xf0,0x0f,0xbf,0x08,0xe0,0x51,0xa9,
54804 -0xef,0x70,0x3f,0x90,0x01,0xc3,0xe0,0x60,0x25,0xc3,0xe5,0x60,0x94,0xe8,0xe5,0x5f,
54805 -0x94,0x03,0x40,0x09,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x80,0x63,0x05,0x60,0xe5,
54806 -0x60,0x70,0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,0xd5,0x90,0x01,
54807 -0xc6,0xe0,0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,0x80,0x43,0x74,0xff,0xf0,
54808 -0x80,0x3e,0xe5,0x5b,0xb4,0x78,0x23,0xe4,0xf5,0x5b,0x05,0x5e,0xe5,0x5a,0x64,0x80,
54809 -0x45,0x59,0x70,0x06,0xf5,0x59,0xf5,0x5a,0x80,0x06,0x75,0x59,0x00,0x75,0x5a,0x80,
54810 -0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x80,0x06,0x74,0x08,0x25,0x5b,0xf5,0x5b,
54811 -0xe5,0x5d,0x15,0x5d,0x70,0x02,0x15,0x5c,0xe5,0x5d,0x45,0x5c,0x60,0x02,0x81,0xc3,
54812 -0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,
54813 -0xa3,0xf0,0x22,0x22,0x8e,0x59,0x8f,0x5a,0x8b,0x5b,0x8a,0x5c,0x89,0x5d,0xe4,0x90,
54814 -0x9e,0x34,0xf0,0xef,0x90,0x00,0x31,0xf0,0x12,0x4d,0x28,0xe5,0x59,0x54,0x03,0xff,
54815 -0x90,0x00,0x32,0xe0,0x54,0xfc,0x4f,0xf0,0x12,0x4d,0x28,0x90,0x00,0x33,0xe0,0x54,
54816 -0x7f,0xf0,0x12,0x4d,0x28,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x34,0xe0,
54817 -0xc3,0x94,0x64,0x50,0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x34,0xe0,0xc3,0x94,
54818 -0x64,0x50,0x10,0x90,0x00,0x30,0xe0,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x12,0x42,0x4d,
54819 -0x7f,0x01,0x22,0x7f,0x00,0x22,0xe4,0xf5,0x25,0x22,0xe4,0x90,0x9e,0xaa,0xf0,0xa3,
54820 -0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,
54821 -0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,0x90,0x9e,0xab,0xe0,0x94,0xe8,0x90,0x9e,0xaa,
54822 -0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x37,0x54,0x90,
54823 -0x9e,0xaa,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x80,0xc6,0x7f,0x78,0x7e,0x08,0x12,
54824 -0x27,0xde,0x90,0x9d,0xff,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,
54825 -0x9e,0x03,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x07,0x12,
54826 -0x2a,0x7f,0x90,0x9e,0x77,0xe0,0x90,0x9d,0xff,0xb4,0x01,0x0d,0x12,0x43,0x53,0xef,
54827 -0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,0x80,0x07,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,
54828 -0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,
54829 -0x03,0x12,0x43,0x53,0xef,0x54,0x0f,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
54830 -0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,0x43,0x53,0xef,0x44,0x02,0xff,
54831 -0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x7f,0x70,
54832 -0x7e,0x0e,0x12,0x27,0xde,0x90,0x9e,0x0b,0x12,0x2a,0x7f,0x90,0x80,0x85,0x12,0x2a,
54833 -0x8b,0x00,0x1b,0x25,0xa0,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,
54834 -0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0xff,0x12,0x34,0x81,0x90,0x9e,0x77,0xe0,
54835 -0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,
54836 -0x01,0x12,0x34,0x81,0x22,0x90,0x9e,0x77,0xe0,0x90,0x9e,0x0f,0xf0,0x22,0xef,0x70,
54837 -0x03,0x02,0x78,0xe6,0x90,0x9e,0x0f,0xe0,0x60,0x03,0x02,0x7c,0xb1,0x90,0x9d,0xfb,
54838 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x2f,0xd9,
54839 -0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x44,0x7e,0x08,
54840 -0x12,0x2f,0xd9,0x90,0x9d,0xab,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
54841 -0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xaf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
54842 -0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xb3,0x12,0x43,0x53,0x90,
54843 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xb7,0x12,
54844 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
54845 -0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x0e,0x12,
54846 -0x2f,0xd9,0x90,0x9d,0xbf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x7c,
54847 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xc3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
54848 -0x7f,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xc7,0x12,0x43,0x53,0x90,0x80,
54849 -0x85,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xcb,0x12,0x43,
54850 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,
54851 -0xcf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,
54852 -0xd9,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd0,0x7e,
54853 -0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
54854 -0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xdb,0x12,0x43,0x53,0x90,0x80,0x85,
54855 -0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xdf,0x12,0x43,0x53,
54856 -0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xe3,
54857 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x2f,0xd9,
54858 -0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xec,0x7e,0x0e,
54859 -0x12,0x2f,0xd9,0x90,0x9d,0xeb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
54860 -0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9d,0xef,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
54861 -0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x90,0x9d,0xf3,0x12,0x43,0x53,0x90,
54862 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x90,0x9d,0xf7,0x12,
54863 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x2f,0xd9,0x90,
54864 -0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,0x0f,0xe0,0x64,0x01,0x60,0x02,0x81,0xb1,
54865 -0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xfb,0x12,0x2a,0x7f,0x7f,0x44,0x7e,
54866 -0x08,0x12,0x27,0xde,0x90,0x9d,0xa7,0x12,0x2a,0x7f,0x7f,0x5c,0x7e,0x08,0x12,0x27,
54867 -0xde,0x90,0x9d,0xab,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,
54868 -0xaf,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xb3,0x12,0x2a,
54869 -0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xb7,0x12,0x2a,0x7f,0x7f,0x78,
54870 -0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbb,0x12,0x2a,0x7f,0x7f,0x7c,0x7e,0x0e,0x12,
54871 -0x27,0xde,0x90,0x9d,0xbf,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x0e,0x12,0x27,0xde,0x90,
54872 -0x9d,0xc3,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xc7,0x12,
54873 -0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcb,0x12,0x2a,0x7f,0x7f,
54874 -0x8c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcf,0x12,0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,
54875 -0x12,0x27,0xde,0x90,0x9d,0xd3,0x12,0x2a,0x7f,0x7f,0xd4,0x7e,0x0e,0x12,0x27,0xde,
54876 -0x90,0x9d,0xd7,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xdb,
54877 -0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xdf,0x12,0x2a,0x7f,
54878 -0x7f,0xe0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe3,0x12,0x2a,0x7f,0x7f,0xec,0x7e,
54879 -0x0e,0x12,0x27,0xde,0x90,0x9d,0xe7,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,
54880 -0xde,0x90,0x9d,0xeb,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9d,
54881 -0xef,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9d,0xf3,0x12,0x2a,
54882 -0x7f,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xf7,0x12,0x2a,0x7f,0x7f,0x8c,
54883 -0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,
54884 -0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,
54885 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x2f,0xd9,0x90,
54886 -0x80,0x85,0x12,0x2a,0x8b,0x00,0x01,0x00,0x00,0x7f,0x44,0x7e,0x08,0x12,0x2f,0xd9,
54887 -0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0xdb,0x25,0xa4,0x7f,0x5c,0x7e,0x08,0x12,0x2f,
54888 -0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x6c,0x7e,0x0e,0x12,
54889 -0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x70,0x7e,0x0e,
54890 -0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x74,0x7e,
54891 -0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x78,
54892 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,
54893 -0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,
54894 -0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x63,0xdb,0x25,
54895 -0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,
54896 -0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,
54897 -0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,
54898 -0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,
54899 -0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,
54900 -0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,
54901 -0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xdc,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,
54902 -0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xe0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
54903 -0x80,0x85,0x12,0x2a,0x8b,0x24,0xdb,0x25,0xa4,0x7f,0xec,0x7e,0x0e,0x12,0x2f,0xd9,
54904 -0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,
54905 -0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,
54906 -0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,
54907 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,
54908 -0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,
54909 -0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,
54910 -0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,
54911 -0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,
54912 -0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,
54913 -0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,
54914 -0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,
54915 -0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,
54916 -0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,
54917 -0x9e,0xa4,0x12,0x43,0x53,0xed,0x54,0x0f,0xfd,0xec,0x54,0xf0,0xfc,0x90,0x9e,0xa4,
54918 -0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x44,0x10,0xfd,0xec,0x44,0x01,
54919 -0xfc,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x85,
54920 -0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x08,0x12,0x27,
54921 -0xde,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,
54922 -0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,
54923 -0x01,0xff,0xec,0x90,0x9e,0xa4,0x12,0x2a,0x7f,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,
54924 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x2f,0xd9,0xe4,0x90,0x9e,0x0f,
54925 -0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x1e,0xf0,0xe0,0x60,0x04,0xe0,
54926 -0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,0x59,0xc2,0xaf,0x90,0x00,0x47,0xe0,0x54,
54927 -0xfb,0xfd,0x7f,0x47,0x12,0x4e,0x30,0x7d,0x40,0x7f,0x01,0x12,0x36,0xaf,0xe5,0x59,
54928 -0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,0x45,0x12,0x4e,0x30,0x90,0x04,0xfd,0xe4,
54929 -0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,0x9e,0x24,0xf0,0x90,0x9e,0x27,0xf0,0x90,
54930 -0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x26,0xf0,0x90,0x9e,0x29,0xf0,0x90,
54931 -0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x15,0xf0,0x90,
54932 -0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,0x9e,0x2e,0xf0,0x90,0x9e,0x1f,0xf0,0x90,
54933 -0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,0x00,0x51,0xe0,0x44,0xc0,0xfd,0x7f,0x51,
54934 -0x02,0x4e,0x30,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x60,0x08,0x90,0x9e,0x1c,0xe0,0x60,
54935 -0x02,0xc1,0x1a,0x90,0x9e,0x10,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,
54936 -0x3b,0x90,0x9e,0x11,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,
54937 -0x90,0x9e,0x12,0xe0,0xc3,0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x11,
54938 -0xf0,0x80,0x15,0x90,0x9e,0x13,0xe0,0xc3,0x94,0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,
54939 -0x90,0x9e,0x12,0xf0,0x90,0x9e,0x11,0xf0,0x90,0x9e,0x10,0xf0,0x90,0x00,0x44,0xe0,
54940 -0x54,0x0c,0x60,0x76,0xe0,0x30,0xe2,0x32,0x90,0x9e,0x24,0xe0,0xc3,0x94,0xff,0x50,
54941 -0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x25,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,
54942 -0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x26,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,
54943 -0xf0,0xe4,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x24,0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,
54944 -0x32,0x90,0x9e,0x27,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,
54945 -0x9e,0x28,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,
54946 -0x29,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x28,0xf0,0x90,
54947 -0x9e,0x27,0xf0,0x90,0x04,0xfd,0xe0,0x44,0x01,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,
54948 -0x20,0x90,0x9e,0x1c,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0x25,0xe0,0x25,0xe0,0x90,
54949 -0x9e,0x1b,0xf0,0x12,0x29,0xd9,0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1f,0xf0,0x90,0x05,
54950 -0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x2b,0xf0,0x90,0x05,
54951 -0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x2d,0xf0,0xa2,0xaf,
54952 -0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x1b,0xe0,0xff,0x12,0x52,0x17,
54953 -0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,0x1c,0xe0,0x70,0x02,0xe1,0x25,
54954 -0x90,0x9e,0x1b,0xe0,0x70,0x02,0xe1,0x25,0x90,0x9e,0x1f,0xe0,0x70,0x02,0xe1,0x25,
54955 -0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x2e,0x74,0x01,0xf0,
54956 -0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x12,0x4e,0x27,0x90,0x00,0x46,0xe0,0x44,
54957 -0x01,0xfd,0x7f,0x46,0x12,0x4e,0x30,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,
54958 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,
54959 -0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,
54960 -0x45,0x12,0x4e,0x30,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,
54961 -0x05,0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,
54962 -0x05,0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,0x33,0x90,
54963 -0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,0xe4,0xff,
54964 -0x12,0x37,0x00,0x80,0x2d,0x90,0x9e,0x1c,0xe0,0x70,0x2f,0x90,0x9e,0x2e,0x12,0x4e,
54965 -0x26,0x90,0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x12,0x4e,0x30,0x90,0x05,0x22,
54966 -0xe4,0xf0,0xa2,0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,
54967 -0x36,0x92,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x22,0x00,0x0e,0x56,};
54968 -#else
54969 -
54970 -
54971 -// =================== v80 TSMC COMMON 2011-12-14 =======================
54972 -u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
54973 -0xc1,0x88,0x02,0x00,0x50,0x00,0x00,0x00,0x12,0x14,0x15,0x52,0xd4,0x3e,0x00,0x00,
54974 -0x25,0x86,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54975 -0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54976 -0x00,0x00,0x00,0x02,0x48,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54977 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54978 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54979 -0x00,0x00,0x00,0x02,0x5e,0xff,0x00,0x00,0x00,0x00,0x00,0xa1,0xd4,0x00,0x00,0x00,
54980 -0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
54981 -0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
54982 -0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
54983 -0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,0x00,0x18,0x22,0x21,0x20,0x18,
54984 -0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,0x20,0x08,0x00,0x20,0x22,0x21,
54985 -0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,0x22,0x20,0x18,0x08,0x00,0x20,
54986 -0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,0x00,0x30,0x31,0x2f,0x10,0x10,
54987 -0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,0x10,0x00,0x00,0x30,0x31,0x20,
54988 -0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,0x04,0x04,0x04,0x05,0x04,0x04,
54989 -0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,
54990 -0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x07,0x0a,0x0b,
54991 -0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,0x08,0x08,0x09,0x09,0x0a,0x0c,
54992 -0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,0x07,0x07,0x08,0x0a,0x04,0x04,
54993 -0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,0x08,0x0b,0x0d,0x0f,0x04,0x04,
54994 -0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,0x04,0x04,0x05,0x05,0x06,0x0a,
54995 -0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,0x00,0x00,0x00,0x00,0x00,0x00,
54996 -0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,0x21,0x27,0x29,0x2a,0x00,0x00,
54997 -0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x18,
54998 -0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,0x00,0xc0,0x00,0xd8,0x00,0x50,
54999 -0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,0x01,0xe0,0x02,0x30,0x01,0x2c,
55000 -0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,0x06,0x40,0x07,0xd0,0x00,0x02,
55001 -0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x24,0x00,0x30,
55002 -0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,0x00,0x50,0x00,0x64,0x00,0xa0,
55003 -0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,0x00,0xf0,0x01,0x68,0x01,0xf4,
55004 -0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,
55005 -0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,0x05,0x07,0x07,0x08,0x0b,0x12,
55006 -0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,
55007 -0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x20,0x1e,
55008 -0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
55009 -0xbb,0x01,0x0c,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,0x22,0x50,
55010 -0x06,0xe9,0x25,0x82,0xf8,0xe6,0x22,0xbb,0xfe,0x06,0xe9,0x25,0x82,0xf8,0xe2,0x22,
55011 -0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe4,0x93,0x22,0xbb,0x01,0x06,
55012 -0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,0xf3,0x22,0xf8,
55013 -0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0x22,
55014 -0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,0x82,0xc8,0xf2,
55015 -0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,
55016 -0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xe0,0xf5,
55017 -0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,0xfe,0x07,0xe3,
55018 -0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,0xf0,0x74,0x01,
55019 -0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,
55020 -0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,0x08,0xe6,0x22,
55021 -0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,0xe5,0x83,0x2a,
55022 -0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
55023 -0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,0x19,0x22,0xbb,
55024 -0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,0xe5,0x82,0x29,
55025 -0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x09,
55026 -0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,0x25,0x82,0xc8,
55027 -0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,0x49,0xfd,0xec,
55028 -0x48,0xfc,0x22,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xa4,
55029 -0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,0xa3,0xe0,0xfa,
55030 -0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,0xf0,0xe5,0x82,
55031 -0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,0xa3,0xea,0xf0,
55032 -0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,
55033 -0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,
55034 -0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x50,0x2e,
55035 -0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,
55036 -0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,
55037 -0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,
55038 -0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x44,0x3d,0xe4,0x7e,0x01,0x93,0x60,
55039 -0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,
55040 -0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,
55041 -0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,
55042 -0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x4f,
55043 -0x00,0x41,0x9e,0xad,0x00,0x41,0x9e,0x61,0x80,0x41,0x9e,0x62,0x80,0x41,0x9e,0xaf,
55044 -0x00,0x00,0xf0,0x90,0x9e,0x6b,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,
55045 -0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x85,0xeb,0xf0,0xa3,0xe0,
55046 -0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x35,0xab,0xd0,0xd0,0x92,0xaf,0x22,
55047 -0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x86,0xf0,
55048 -0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,
55049 -0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x70,
55050 -0x14,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x02,0xf1,0x2b,0x22,0x8f,0x82,
55051 -0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0xe4,0xf5,0x71,0x7f,0x60,0x7e,0x01,0x80,
55052 -0xed,0x7d,0x01,0xaf,0x24,0xe1,0x2f,0xb1,0xa6,0xbf,0x01,0x0f,0x90,0x9e,0x51,0xe0,
55053 -0xff,0xe4,0xfd,0xf1,0xd0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x53,0x23,0xf0,0x43,
55054 -0x23,0x01,0x91,0xfd,0x91,0xfe,0x53,0x23,0xf0,0x43,0x23,0x02,0x22,0x22,0x22,0x22,
55055 -0x22,0x00,0x00,0x02,0x5f,0x91,0x02,0x5f,0x98,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
55056 -0x8b,0x1b,0x8a,0x1c,0x89,0x1d,0x90,0x9e,0x88,0x71,0x8b,0xab,0x1e,0xaa,0x1f,0xa9,
55057 -0x20,0x90,0x9e,0x8b,0x71,0x8b,0xaf,0x21,0x15,0x21,0xef,0x60,0x1b,0x90,0x9e,0x8b,
55058 -0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x29,0xd9,0xff,0x90,0x9e,0x88,0xe4,0x75,0xf0,
55059 -0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x1b,0xaa,0x1c,0xa9,0x1d,0xd0,0xd0,
55060 -0x92,0xaf,0x22,0x90,0x06,0xa9,0xe0,0x90,0x9e,0x2f,0xf0,0xe0,0x54,0xc0,0x70,0x08,
55061 -0x53,0x26,0xfe,0x53,0x26,0xfd,0x91,0xd1,0x90,0x9e,0x2f,0xe0,0x30,0xe6,0x13,0x43,
55062 -0x26,0x01,0x90,0x9e,0x73,0xe0,0x64,0x02,0x60,0x04,0x91,0xd7,0x80,0x07,0x91,0x80,
55063 -0x80,0x03,0x53,0x26,0xfe,0x90,0x9e,0x2f,0xe0,0x30,0xe7,0x16,0x43,0x26,0x02,0xe4,
55064 -0x90,0x9e,0x86,0x91,0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x74,0x74,0x01,
55065 -0xf0,0x22,0x53,0x26,0xfd,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x04,0x1d,
55066 -0xe0,0x60,0x1a,0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,0xe0,0x44,
55067 -0x40,0xf0,0x90,0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,
55068 -0xd0,0x92,0xaf,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,
55069 -0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,
55070 -0x07,0x90,0x01,0xc4,0x74,0xd4,0xf0,0x74,0x45,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,
55071 -0x3c,0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,
55072 -0xf5,0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,
55073 -0x74,0x01,0xf0,0xe5,0x34,0x30,0xe1,0x09,0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x66,
55074 -0x09,0xe5,0x34,0x30,0xe2,0x38,0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,
55075 -0x30,0xe0,0x24,0x90,0x9e,0x86,0xe4,0xf0,0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,
55076 -0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x91,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,
55077 -0x06,0x92,0x74,0x01,0xf0,0x80,0x07,0x90,0x9e,0x71,0xe4,0xf0,0x91,0xd1,0xe5,0x34,
55078 -0x30,0xe3,0x38,0x90,0x01,0x3c,0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,
55079 -0x90,0x9e,0x86,0xe4,0xf0,0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,
55080 -0x7f,0x5c,0x7e,0x01,0x91,0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,
55081 -0x02,0xf0,0x80,0x07,0x90,0x9e,0x70,0xe4,0xf0,0x91,0xd1,0xe5,0x34,0x30,0xe4,0x09,
55082 -0x90,0x01,0x3c,0x74,0x10,0xf0,0x12,0x73,0x66,0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,
55083 -0x3c,0x74,0x20,0xf0,0x12,0x52,0x64,0xe5,0x35,0x30,0xe0,0x18,0x90,0x01,0x3d,0x74,
55084 -0x01,0xf0,0x90,0x01,0x2f,0xe0,0x44,0x7f,0xf0,0x90,0x00,0x83,0xe0,0xf5,0x24,0x12,
55085 -0x64,0xe3,0x91,0xd1,0xe5,0x35,0x30,0xe2,0x06,0x90,0x01,0x3d,0x74,0x04,0xf0,0xe5,
55086 -0x36,0x30,0xe0,0x06,0x90,0x01,0x3e,0x74,0x01,0xf0,0xe5,0x36,0x30,0xe1,0x06,0x90,
55087 -0x01,0x3e,0x74,0x02,0xf0,0x74,0xd4,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,
55088 -0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,
55089 -0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x7d,0x01,0x7f,0x0c,0x90,
55090 -0x9e,0xa6,0xed,0xf0,0x90,0x9e,0xa5,0xef,0xf0,0x54,0x0f,0xff,0xe5,0x23,0x54,0x0f,
55091 -0x6f,0x60,0x70,0x90,0x9e,0xa5,0xe0,0x30,0xe2,0x2a,0xe5,0x23,0x20,0xe2,0x05,0x7f,
55092 -0x01,0x12,0x63,0xf3,0xe5,0x23,0x30,0xe3,0x09,0x90,0x9e,0xa5,0xe0,0x20,0xe3,0x02,
55093 -0x80,0x52,0xe5,0x23,0x20,0xe3,0x4c,0x90,0x9e,0xa5,0xe0,0x30,0xe3,0x45,0xa3,0xe0,
55094 -0xff,0x02,0x5e,0x95,0xe5,0x23,0x54,0x0f,0xff,0xbf,0x0c,0x0f,0x90,0x9e,0xa5,0xe0,
55095 -0x20,0xe3,0x08,0x12,0x62,0xd7,0xef,0x60,0x2a,0xf1,0xb4,0xe5,0x23,0x54,0x0f,0xff,
55096 -0xbf,0x04,0x10,0x90,0x9e,0xa5,0xe0,0x20,0xe2,0x09,0x12,0x63,0x20,0xef,0x60,0x13,
55097 -0x12,0x61,0x3a,0xe5,0x23,0x54,0x0f,0xff,0xbf,0x02,0x08,0x12,0x63,0x83,0xef,0x60,
55098 -0x02,0x91,0xec,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x22,0xb4,0x01,0x05,
55099 -0x7f,0x01,0x12,0x5e,0x5c,0x53,0x23,0xf0,0x43,0x23,0x04,0x22,0xe0,0xff,0x7d,0x01,
55100 -0x90,0x9e,0x99,0xef,0xf0,0xa3,0xed,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x25,0x60,
55101 -0x05,0xe4,0xff,0x12,0x61,0x1f,0x90,0x9e,0x99,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9b,
55102 -0xe4,0xf0,0xa3,0x74,0x80,0xf0,0x90,0x9e,0x99,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,
55103 -0xf0,0x90,0x04,0x25,0xef,0xf0,0x90,0x9e,0x9a,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,
55104 -0x24,0x0f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,
55105 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9b,0xa3,0xe0,
55106 -0xff,0xfd,0x24,0x08,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,
55107 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,
55108 -0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf7,0xf0,0x90,0x9e,0x9b,0xe0,0xfe,0xa3,0xe0,
55109 -0xff,0x22,0x12,0x45,0xa6,0xbf,0x01,0x10,0x90,0x02,0x09,0xe0,0xff,0x7d,0x01,0x12,
55110 -0x47,0xd0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,
55111 -0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,
55112 -0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0x79,0xf0,0x74,0x48,0xa3,0xf0,
55113 -0x90,0x01,0x34,0xe0,0x55,0x28,0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,
55114 -0xa3,0xe0,0x55,0x2b,0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x41,0x17,0x90,0x01,0x34,
55115 -0x74,0x01,0xf0,0x85,0xd1,0x08,0x85,0xd2,0x09,0x85,0xd3,0x0a,0x85,0xd4,0x0b,0x85,
55116 -0xd5,0x0c,0x85,0xd6,0x0d,0x85,0xd7,0x0e,0x85,0xd9,0x0f,0xe5,0x0f,0x54,0x40,0xc3,
55117 -0x13,0xff,0xe5,0x0e,0x54,0x20,0x6f,0x70,0x02,0x21,0xc9,0xe5,0x0f,0x30,0xe5,0x02,
55118 -0x21,0xc9,0xe5,0x0d,0x54,0x3f,0xf5,0x4d,0xe5,0x08,0x54,0x3f,0xf5,0x4e,0xe5,0x0c,
55119 -0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,
55120 -0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,
55121 -0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4e,
55122 -0xd3,0x94,0x04,0x40,0x03,0x75,0x4e,0x04,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,
55123 -0x12,0x43,0x5f,0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,
55124 -0xe5,0x0e,0x54,0x1f,0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,
55125 -0x00,0x12,0x43,0x5f,0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,
55126 -0xf0,0xe5,0x0f,0x20,0xe6,0x24,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,
55127 -0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,
55128 -0x30,0xe7,0x36,0xaf,0x4d,0x12,0x5b,0x68,0x80,0x2f,0xe5,0x0e,0x54,0x1f,0xff,0xe5,
55129 -0x4d,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
55130 -0x42,0x81,0xe5,0x0a,0x30,0xe7,0x12,0xe5,0x0a,0x54,0x7f,0xfd,0xe5,0x0e,0x54,0x1f,
55131 -0xf5,0x53,0xab,0x4e,0xaf,0x4d,0x12,0x5b,0x05,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,
55132 -0x80,0x45,0x90,0x9e,0x73,0xe0,0x60,0x37,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,
55133 -0x74,0x04,0xf0,0x71,0xc4,0xef,0x64,0x01,0x70,0x2d,0x90,0x9e,0x69,0xe0,0xf5,0x44,
55134 -0x75,0x45,0x00,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x35,0xab,0x90,0x01,0x5b,
55135 -0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x9e,0x71,0xf0,0x80,0x08,0x71,
55136 -0xc4,0xbf,0x01,0x03,0x12,0x44,0xd1,0xe5,0x2c,0x30,0xe1,0x21,0x90,0x01,0x34,0x74,
55137 -0x02,0xf0,0x85,0xd1,0x13,0x85,0xd2,0x14,0x85,0xd3,0x15,0x85,0xd4,0x16,0x85,0xd5,
55138 -0x17,0x85,0xd6,0x18,0x85,0xd7,0x19,0x85,0xd9,0x1a,0x12,0x5c,0x46,0xe5,0x2c,0x30,
55139 -0xe3,0x06,0x90,0x01,0x34,0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,
55140 -0x74,0x10,0xf0,0x43,0x12,0x10,0xe5,0x2c,0x30,0xe5,0x24,0x90,0x01,0xcf,0xe0,0x30,
55141 -0xe5,0x1d,0xe0,0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,
55142 -0xe8,0x00,0xd1,0xdb,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x71,0xdb,0x80,0xfe,0xe5,
55143 -0x2c,0x30,0xe6,0x06,0x90,0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe0,0x12,0x90,
55144 -0x9e,0x5f,0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,0x12,0x65,0xa3,0x90,0x9e,0x5f,0xe4,
55145 -0xf0,0xe5,0x2e,0x30,0xe1,0x3b,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x12,0x40,0x90,
55146 -0x01,0x02,0xe0,0x54,0x03,0x64,0x01,0x70,0x28,0x90,0x01,0x37,0xe0,0x30,0xe0,0x0a,
55147 -0x74,0x01,0xf0,0x90,0x9e,0x4f,0xe4,0xf0,0x80,0x17,0x90,0x9e,0x4f,0xe0,0x04,0xf0,
55148 -0xe0,0xc3,0x94,0x0a,0x40,0x0b,0xe4,0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x02,0x11,
55149 -0x62,0xe5,0x2e,0x30,0xe2,0x09,0x90,0x01,0x36,0x74,0x04,0xf0,0x12,0x65,0x3b,0xe5,
55150 -0x2e,0x30,0xe3,0x28,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,0x22,0x64,0x01,0x70,0x1c,
55151 -0xe5,0x25,0x60,0x18,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,
55152 -0x9e,0x86,0xe4,0x12,0x44,0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,
55153 -0x2b,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x22,0xb4,0x01,0x20,0xe5,0x25,0x60,0x1c,
55154 -0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x74,0xe4,0xf0,
55155 -0x53,0x26,0xfd,0xe5,0x26,0x54,0x07,0x70,0x03,0x12,0x44,0xd1,0xe5,0x2e,0x30,0xe5,
55156 -0x1f,0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x22,0xb4,0x01,0x14,0xe5,0x25,0x60,0x10,
55157 -0x90,0x9e,0x73,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xd7,0x80,0x03,0x12,0x44,0x80,
55158 -0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x22,0xb4,0x01,0x10,
55159 -0xe5,0x25,0x60,0x0c,0x53,0x26,0xfe,0xe5,0x26,0x54,0x07,0x70,0x03,0x12,0x44,0xd1,
55160 -0xe5,0x2f,0x30,0xe1,0x09,0x90,0x01,0x37,0x74,0x02,0xf0,0x12,0x61,0x92,0x74,0x79,
55161 -0x04,0x90,0x01,0xc4,0xf0,0x74,0x48,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,
55162 -0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,
55163 -0xf0,0xd0,0xe0,0x32,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,0x02,
55164 -0x7f,0x00,0x22,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,
55165 -0xc0,0xd0,0x7f,0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,
55166 -0xc0,0xd0,0x90,0x9e,0xac,0xed,0xf0,0x90,0x9e,0xab,0xef,0xf0,0xd3,0x94,0x07,0x50,
55167 -0x63,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
55168 -0x90,0x00,0x47,0xe0,0x5f,0xf0,0x71,0xdb,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,
55169 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0x71,
55170 -0xdb,0x90,0x9e,0xac,0xe0,0x60,0x16,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,0x07,
55171 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,0x66,0x90,0x9e,0xab,
55172 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,
55173 -0x00,0x45,0x80,0x6b,0x90,0x9e,0xab,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,
55174 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0x71,0xd3,0x90,0x9e,0xab,
55175 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,
55176 -0x43,0xe0,0x4f,0xf0,0x71,0xdb,0x90,0x9e,0xac,0xe0,0x60,0x1b,0x90,0x9e,0xab,0xe0,
55177 -0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xff,
55178 -0x90,0x00,0x42,0xe0,0x4f,0x80,0x1a,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,0x07,
55179 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x42,0xe0,
55180 -0x5f,0xf0,0x71,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0xf0,0x90,0x00,0x45,0xe0,0x54,0xfe,
55181 -0xfd,0x7f,0x45,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,0x00,0xed,
55182 -0xf0,0x71,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,0x66,0x24,
55183 -0x02,0x60,0x02,0xa1,0x9f,0x90,0x9e,0x1a,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,0x44,
55184 -0x0c,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,0x47,0x91,
55185 -0xe3,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,0x9e,0x1a,
55186 -0xf0,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,
55187 -0x08,0x12,0x2f,0xd9,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,
55188 -0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,0x10,
55189 -0xfd,0x7f,0x46,0x80,0x38,0x90,0x9e,0x1a,0x74,0x01,0xf0,0x90,0x9e,0x20,0x12,0x43,
55190 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x00,
55191 -0x45,0xe0,0x44,0x20,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,
55192 -0x7f,0x45,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x91,0xe3,0x22,
55193 -0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x1c,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,
55194 -0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1b,0xf0,0x12,0x29,0xd9,0x25,0xe0,0x25,0xe0,0x90,
55195 -0x9e,0x1f,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,
55196 -0x9e,0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,
55197 -0x9e,0x2d,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x1b,
55198 -0xe0,0xff,0x12,0x52,0x12,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,0x1c,
55199 -0xe0,0x70,0x02,0xc1,0xa7,0x90,0x9e,0x1b,0xe0,0x70,0x02,0xc1,0xa7,0x90,0x9e,0x1f,
55200 -0xe0,0x70,0x02,0xc1,0xa7,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,
55201 -0x9e,0x2e,0x74,0x01,0xf0,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x91,0xda,0x90,
55202 -0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x91,0xe3,0x90,0x9e,0x14,0xe0,0x60,0x15,
55203 -0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,
55204 -0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,
55205 -0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,
55206 -0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,
55207 -0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,
55208 -0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,
55209 -0xe4,0xff,0x12,0x37,0x00,0x80,0x2b,0x90,0x9e,0x1c,0xe0,0x70,0x2d,0x90,0x9e,0x2e,
55210 -0x91,0xd9,0x90,0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x91,0xe3,0x90,0x05,0x22,
55211 -0xe4,0xf0,0xa2,0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,
55212 -0x36,0x92,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x22,0x90,0x01,0x30,0xe4,0xf0,
55213 -0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
55214 -0xfd,0x7f,0x50,0x91,0xe3,0xe4,0xfd,0x7f,0x51,0x91,0xe3,0xe4,0xfd,0x7f,0x52,0x91,
55215 -0xe3,0xe4,0xfd,0x7f,0x53,0x81,0xe3,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x90,0x00,0x02,
55216 -0x12,0x42,0x20,0x90,0x9e,0x1d,0xf0,0xe0,0x30,0xe0,0x4b,0x90,0x9e,0x14,0x74,0x01,
55217 -0xf0,0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x16,0x12,0x2a,0x7f,0xab,0x59,
55218 -0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xe4,0xfc,0xfd,0xfe,0x78,
55219 -0x1a,0x12,0x2a,0x6c,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x16,0x12,
55220 -0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x2a,0x7f,0x90,
55221 -0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x14,0xf0,0x7f,0x80,0x7e,0x08,0x12,
55222 -0x27,0xde,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,0x2a,0x7f,
55223 -0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,
55224 -0x12,0x2f,0xd9,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,0x91,0xe3,
55225 -0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,
55226 -0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,0x47,0x91,0xe3,0x90,0x00,
55227 -0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x46,0xe0,0x54,0xef,0xfd,
55228 -0x7f,0x46,0x91,0xe3,0xe4,0x90,0x9e,0x1a,0xf0,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,
55229 -0xb0,0xf0,0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x91,0xe3,0x90,0x9e,0xb0,
55230 -0xe0,0x44,0xb0,0xfd,0x7f,0x49,0x81,0xe3,0x75,0x28,0x33,0xe4,0xf5,0x29,0x75,0x2a,
55231 -0x07,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,0xa3,0xe5,0x2a,
55232 -0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,
55233 -0x01,0x38,0xe5,0x30,0xf0,0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0xe4,0x90,
55234 -0x9e,0x31,0xf0,0xa3,0xf0,0x75,0x8e,0x02,0x12,0x77,0x64,0x12,0x5e,0xde,0x90,0x9e,
55235 -0x5e,0xef,0xf0,0x12,0x5e,0xeb,0x90,0x9e,0x60,0xef,0xf0,0xe4,0xf5,0x12,0x12,0x6e,
55236 -0xdf,0x12,0x77,0xdb,0x12,0x5f,0x9f,0x12,0x32,0x3d,0x12,0x77,0xd7,0x12,0x4f,0xf8,
55237 -0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,
55238 -0xf0,0xa3,0xe4,0xf0,0x12,0x5e,0xf8,0x11,0x16,0x12,0x44,0xff,0x12,0x7d,0x9b,0x90,
55239 -0x9e,0x33,0xe5,0xd9,0xf0,0x12,0x5e,0xaf,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,
55240 -0xf0,0x12,0x4b,0xdb,0x75,0xe8,0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x9e,0x31,0xe0,
55241 -0x64,0x01,0xf0,0x24,0x2e,0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xe5,0x12,0x30,
55242 -0xe4,0x09,0xc2,0xaf,0x53,0x12,0xef,0xd2,0xaf,0x71,0x1a,0xe5,0x12,0x30,0xe6,0x16,
55243 -0xc2,0xaf,0x53,0x12,0xbf,0xd2,0xaf,0x12,0x68,0x8d,0x90,0x9e,0x1e,0xe0,0xff,0x60,
55244 -0x03,0xb4,0x01,0x02,0x31,0x10,0x90,0x9e,0x1e,0xe0,0x70,0x03,0x12,0x7d,0xf9,0x11,
55245 -0xe3,0x80,0xb9,0x90,0x06,0x34,0xe0,0x60,0x26,0x14,0x70,0x1b,0x7b,0x01,0x7a,0x06,
55246 -0x79,0x35,0x7f,0xf9,0x7e,0x01,0x12,0x77,0x75,0xbf,0x01,0x09,0x90,0x06,0x35,0xe0,
55247 -0x54,0x0f,0xf0,0x80,0x05,0x80,0x00,0x02,0x77,0x56,0xe4,0x90,0x06,0x34,0xf0,0x22,
55248 -0x90,0x9e,0x15,0xe0,0xc3,0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0x21,0xc8,0x90,0x9e,
55249 -0x15,0xe0,0x64,0x14,0x60,0x02,0x21,0xc8,0x90,0x9e,0x24,0xe0,0x70,0x25,0x90,0x9e,
55250 -0x27,0xe0,0x70,0x1f,0x90,0x9e,0x25,0xe0,0x70,0x19,0x90,0x9e,0x28,0xe0,0x70,0x13,
55251 -0x90,0x9e,0x26,0xe0,0x70,0x0d,0x90,0x9e,0x29,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,
55252 -0x54,0xfe,0xf0,0x90,0x9e,0x24,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x25,0xe0,0x90,
55253 -0x04,0x45,0xf0,0x90,0x9e,0x26,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,
55254 -0x27,0xe0,0x90,0x04,0x48,0xf0,0x90,0x9e,0x28,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,
55255 -0x29,0xe0,0x90,0x04,0x4a,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x10,0xe0,0x90,0x04,0x4c,
55256 -0xf0,0x90,0x9e,0x11,0xe0,0x90,0x04,0x4d,0xf0,0x90,0x9e,0x12,0xe0,0x90,0x04,0x4e,
55257 -0xf0,0x90,0x9e,0x13,0xe0,0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x15,0xf0,0x90,0x9e,
55258 -0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x24,0xf0,0xa3,0xf0,
55259 -0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x34,0xf0,
55260 -0x90,0x05,0x61,0xe0,0x90,0x9e,0x35,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x36,0xf0,
55261 -0x90,0x05,0x63,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0x2d,0xe0,0xff,0x90,0x9e,0x37,
55262 -0xe0,0xfe,0xd3,0x9f,0x50,0x0b,0x90,0x9e,0x2d,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,
55263 -0x10,0x90,0x9e,0x1b,0xe0,0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x1f,0xe0,0xff,0x51,
55264 -0x12,0x22,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,
55265 -0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,
55266 -0x2d,0xf0,0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x2b,0xe0,0xd3,0x9e,0x40,0x1e,0xe0,
55267 -0x2f,0xf0,0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,0xe0,0xb4,0xff,0x03,0xe4,0xf0,
55268 -0x22,0x90,0x9e,0x2d,0x80,0x03,0x90,0x9e,0x2c,0xe0,0x04,0xf0,0x22,0x90,0x9e,0x2b,
55269 -0xe0,0x2f,0xf0,0x22,0x90,0x9e,0x1c,0xe0,0x64,0x01,0x60,0x02,0x61,0x19,0x90,0x00,
55270 -0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x90,0x9e,0x2e,0xe0,0x70,0x32,
55271 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
55272 -0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,
55273 -0xf0,0x90,0x9e,0x1b,0xe0,0xff,0x51,0x12,0x90,0x9e,0x2e,0x74,0x01,0x12,0x4c,0xd9,
55274 -0x80,0x40,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x70,0x38,0x90,0x9e,0x1f,0xe0,0xff,0x51,
55275 -0x12,0xe4,0x90,0x9e,0x2e,0xf0,0x90,0x00,0x45,0xe0,0x44,0x01,0xfd,0x7f,0x45,0x12,
55276 -0x4c,0xe3,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,
55277 -0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x05,0x90,0x05,0x22,
55278 -0xe4,0xf0,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,0x84,
55279 -0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,0x86,
55280 -0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,0x01,0xcc,0xe0,0x54,0x0f,
55281 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfd,0x70,0x02,0x81,0x5b,0x90,0x9e,0xad,
55282 -0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
55283 -0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,0x81,0x54,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,
55284 -0x90,0x01,0xd0,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x35,0xf0,0x75,0x1e,0x01,0x75,0x1f,
55285 -0x9e,0x75,0x20,0x35,0x75,0x21,0x01,0x7b,0x01,0x7a,0x9e,0x79,0x36,0x12,0x45,0x09,
55286 -0x90,0x9e,0x36,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x90,0x9e,0xad,0x30,0xe0,
55287 -0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,
55288 -0x90,0x9e,0xad,0xe0,0x75,0xf0,0x02,0x90,0x00,0x89,0x12,0x43,0x5f,0xe0,0x90,0x9e,
55289 -0x38,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,
55290 -0x90,0x9e,0x39,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,
55291 -0x5f,0xe0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,
55292 -0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3b,0xf0,0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,
55293 -0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,
55294 -0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x38,0xf0,0x90,0x9e,0xad,0xe0,0x75,
55295 -0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x39,0xf0,0xef,0x54,0x7f,
55296 -0xff,0x7b,0x01,0x7a,0x9e,0x79,0x37,0x91,0x5c,0x90,0x9e,0x34,0xe0,0xff,0x90,0x9e,
55297 -0xad,0xe0,0xfe,0x74,0x01,0xa8,0x06,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,
55298 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0xad,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
55299 -0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,0xf0,0x90,0x9e,0xad,0xe0,0x04,0xf0,0xe0,0x54,
55300 -0x03,0xf0,0x61,0x24,0x90,0x01,0xc6,0xe0,0x44,0x02,0xf0,0x22,0x90,0x9e,0x3c,0x12,
55301 -0x43,0x8b,0xef,0x12,0x43,0x94,0x54,0x97,0x01,0x54,0xa0,0x02,0x54,0xbb,0x03,0x54,
55302 -0xc4,0x05,0x54,0xcd,0x06,0x55,0x1b,0x07,0x54,0xd5,0x09,0x54,0xde,0x0c,0x54,0xe7,
55303 -0x0d,0x54,0xf0,0x0e,0x54,0xf9,0x1b,0x55,0x02,0x1c,0x55,0x0b,0x2c,0x54,0xa9,0x2d,
55304 -0x54,0xb2,0x2e,0x00,0x00,0x55,0x14,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x61,0x69,
55305 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0x02,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
55306 -0x71,0x08,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0x50,0x90,0x9e,0x3c,0x12,0x43,
55307 -0x6b,0x02,0x71,0x7e,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0xb2,0x90,0x9e,0x3c,
55308 -0x12,0x43,0x6b,0x80,0x47,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0xc6,0x90,0x9e,
55309 -0x3c,0x12,0x43,0x6b,0x02,0x4d,0xa0,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x7d,0x68,
55310 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x4f,0x07,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
55311 -0x70,0xfa,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0xe1,0x90,0x9e,0x3c,0x12,0x43,
55312 -0x6b,0x02,0x76,0x36,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x90,0x00,0x04,0x12,
55313 -0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,0xfd,0xaf,0x06,
55314 -0x90,0x9e,0x3f,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x8b,0x90,0x9e,0x41,0x12,
55315 -0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,0x54,0x0f,0x90,0x9e,0x44,
55316 -0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,0x13,0x54,0x03,0x90,0x9e,
55317 -0x45,0xf0,0x90,0x9e,0x3f,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,0x46,0x12,0x43,0x5f,
55318 -0xad,0x82,0xac,0x83,0x90,0x9e,0x46,0xec,0xf0,0xa3,0xed,0xf0,0xef,0x75,0xf0,0x09,
55319 -0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,0x12,0x43,0x8b,0x90,
55320 -0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0x0f,0xff,0x90,0x9e,
55321 -0x48,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,
55322 -0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0x90,0x00,0x01,0xef,0x12,
55323 -0x42,0x5f,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,
55324 -0x9e,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,0x12,0x29,0xd9,
55325 -0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,0x90,0x9e,0x3f,0xe0,0xff,
55326 -0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,0x9e,0x40,0xe0,0xfe,
55327 -0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,0x75,0xf0,0x09,0xef,
55328 -0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x45,0xe0,0xfe,0x75,0xf0,
55329 -0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,0x59,0xef,0x25,0xe0,0x24,
55330 -0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x5b,0x8f,0x5c,0xe5,0x59,0x75,0xf0,
55331 -0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x5d,0x01,0xf5,0x5e,0x89,0x5f,
55332 -0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x46,0x12,0x43,0x5f,0xaf,0x82,0x85,0x83,0x60,
55333 -0x8f,0x61,0xe5,0x59,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0x75,
55334 -0x62,0x01,0xf5,0x63,0x89,0x64,0x74,0x82,0x25,0x59,0xf5,0x82,0xe4,0x34,0x95,0xf5,
55335 -0x83,0xe0,0x12,0x43,0x94,0x56,0xaa,0x00,0x56,0xbf,0x01,0x56,0xd4,0x02,0x56,0xe9,
55336 -0x03,0x57,0x13,0x04,0x57,0x28,0x05,0x57,0x3d,0x06,0x57,0x64,0x0c,0x57,0x92,0x0d,
55337 -0x57,0xbf,0x0e,0x57,0xec,0x0f,0x00,0x00,0x58,0x20,0xe5,0x59,0x25,0xe0,0x24,0xc6,
55338 -0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,0x80,0x3c,0xe5,
55339 -0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,
55340 -0x74,0x10,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
55341 -0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,
55342 -0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,0x59,0x25,0xe0,
55343 -0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0x8f,0xf0,
55344 -0x02,0x58,0x20,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
55345 -0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,
55346 -0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,0x59,0x25,
55347 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0x74,0x0d,0xf0,
55348 -0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,
55349 -0xf0,0x02,0x58,0x20,0x90,0x04,0x47,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,
55350 -0x4d,0x90,0x04,0x46,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,
55351 -0x5f,0x90,0x04,0x45,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x44,0x02,
55352 -0x58,0x17,0x90,0x04,0x4b,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,
55353 -0x04,0x4a,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,
55354 -0x04,0x49,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,
55355 -0x04,0x4f,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x4e,0xe0,
55356 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x4d,0xe0,
55357 -0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,
55358 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x5d,0xaa,
55359 -0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x5c,0x82,
55360 -0x85,0x5b,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,0xf0,
55361 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,
55362 -0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x29,0xd9,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
55363 -0x12,0x42,0x4d,0xab,0x5d,0xe5,0x5f,0x24,0x01,0xf9,0xe4,0x35,0x5e,0xfa,0xc0,0x03,
55364 -0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x90,0x00,
55365 -0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,0x5c,
55366 -0x82,0x85,0x5b,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,
55367 -0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,
55368 -0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,0xa3,0xe0,0xfe,0xef,
55369 -0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,
55370 -0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x5a,0x0b,0x74,0x01,0x7e,
55371 -0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,
55372 -0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,
55373 -0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x5d,0x15,0x5a,0xe5,0x5a,0xc3,0x94,
55374 -0x00,0x50,0xca,0x80,0x56,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
55375 -0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x5a,0x0f,0x74,0x01,0x7e,0x00,
55376 -0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,0x25,
55377 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,
55378 -0x4e,0x60,0x08,0x90,0x9e,0x4b,0xe5,0x5a,0xf0,0x80,0x10,0x15,0x5a,0xe5,0x5a,0xc3,
55379 -0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x4b,0xf0,0xe5,0x59,0x25,0xe0,0x24,
55380 -0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0xe4,
55381 -0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
55382 -0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
55383 -0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x4c,0xe5,0x5a,0xf0,0x80,
55384 -0x5b,0x05,0x5a,0xe5,0x5a,0xb4,0x10,0xca,0x80,0x52,0xe5,0x59,0x25,0xe0,0x24,0x02,
55385 -0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x39,0xe4,0xf5,
55386 -0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
55387 -0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,
55388 -0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x0a,0x05,0x5a,
55389 -0xe5,0x5a,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x4c,0xf0,0x90,0x9e,0x4b,0xe0,
55390 -0xff,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xef,0xf0,0x90,0x9e,
55391 -0x4c,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x49,0x12,0x43,0x5f,0xee,0xf0,
55392 -0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x05,
55393 -0x90,0x9e,0x4b,0x51,0x6f,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
55394 -0xe0,0xff,0x90,0x9e,0x4c,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x02,0x51,0x6f,0x90,0x9e,
55395 -0x4b,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,0x22,0xef,
55396 -0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,0x94,0x03,
55397 -0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,0x22,0xe0,
55398 -0xfd,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xed,0xf0,0xaf,0x59,
55399 -0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,0x50,0x0e,0x74,0x84,0x2f,
55400 -0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,0x74,0xa6,0x2f,0xf5,0x82,
55401 -0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x75,0xef,0xf0,0x24,0xa6,0xf5,0x82,
55402 -0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x76,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x75,
55403 -0x7d,0x02,0x51,0xc9,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
55404 -0x90,0x9e,0x94,0x12,0x43,0x8b,0x90,0x9e,0x97,0xe0,0x54,0xf0,0x44,0x06,0xff,0xf0,
55405 -0xed,0x54,0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9e,0x94,0x12,
55406 -0x43,0x6b,0x90,0x9e,0x91,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x97,0x71,0xd4,
55407 -0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x50,0x8d,0x51,0xe5,0x51,0x54,0x1f,0xf5,0x56,0x74,
55408 -0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,0x54,0x90,0x04,0xfd,0xe0,
55409 -0xb4,0x01,0x05,0x75,0x57,0x03,0x80,0x03,0x75,0x57,0x01,0xeb,0xc3,0x95,0x57,0x40,
55410 -0x04,0xaf,0x50,0x80,0x33,0xe5,0x54,0x25,0x53,0xf5,0x55,0xe5,0x56,0x90,0x41,0xd6,
55411 -0x93,0xff,0xe5,0x55,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,0x50,0xf5,0x82,0xe4,0x34,
55412 -0x94,0xf5,0x83,0xe4,0xf0,0xad,0x51,0xaf,0x50,0x41,0x80,0x25,0x50,0xf5,0x82,0xe4,
55413 -0x34,0x94,0xf5,0x83,0xe5,0x55,0xf0,0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,0x96,
55414 -0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,
55415 -0xe0,0x54,0x1f,0xf5,0x58,0xd3,0x9f,0x40,0x02,0x8f,0x58,0xe5,0x58,0x25,0xe0,0x24,
55416 -0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,
55417 -0x58,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,
55418 -0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,
55419 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x58,0x51,
55420 -0x80,0xaf,0x58,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x8e,0x12,0x43,
55421 -0x8b,0x90,0x9e,0xaf,0xe0,0xff,0x04,0xf0,0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x7f,
55422 -0xaf,0x7e,0x01,0x91,0x67,0xef,0x60,0x49,0x90,0x9e,0x8e,0x12,0x43,0x6b,0x8b,0x1e,
55423 -0x8a,0x1f,0x89,0x20,0x75,0x21,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x45,0x09,
55424 -0x90,0x9e,0x91,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x90,0x9e,0x8e,0x12,
55425 -0x43,0x6b,0x12,0x29,0xd9,0xff,0xc4,0x54,0x0f,0xf5,0x21,0x7b,0x01,0x7a,0x01,0x79,
55426 -0xa2,0x12,0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,
55427 -0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x2f,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,
55428 -0x0f,0x44,0x80,0xf0,0x7b,0x00,0x7a,0x00,0x79,0x13,0x90,0x9e,0x91,0x12,0x43,0x8b,
55429 -0x0b,0x7a,0x9e,0x79,0x2f,0x61,0xd4,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
55430 -0x9d,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x9d,0xe0,0xfe,
55431 -0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,0xa0,0xe0,0x94,0xe8,
55432 -0x90,0x9e,0x9f,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x7f,
55433 -0x00,0x80,0x15,0x90,0x9e,0x9f,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x0a,0x7e,
55434 -0x00,0x12,0x37,0x54,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xac,0x07,0xec,
55435 -0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
55436 -0x80,0x0b,0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,
55437 -0x64,0xe5,0x64,0x54,0x1f,0xff,0x90,0x9e,0x40,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,
55438 -0x49,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x42,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,
55439 -0x12,0x43,0x5f,0xe0,0xfe,0x90,0x9e,0x43,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
55440 -0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x44,0xcb,0xf0,0xa3,0xeb,
55441 -0xf0,0xec,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,
55442 -0xe0,0x90,0x9e,0x46,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,
55443 -0x43,0xe0,0x90,0x9e,0x40,0xf0,0xf5,0x64,0xed,0x70,0x02,0xc1,0x13,0x90,0x9e,0x41,
55444 -0xed,0xf0,0xe5,0x64,0x30,0xe6,0x0a,0x90,0x9e,0x40,0xe0,0xf5,0x64,0xa3,0xe0,0x14,
55445 -0xf0,0x90,0x9e,0x41,0xe0,0x70,0x02,0xc1,0x13,0x90,0x9e,0x40,0xe0,0xff,0xd3,0x94,
55446 -0x00,0x50,0x02,0xc1,0x13,0xe4,0x90,0x9e,0x3f,0xf0,0xef,0x14,0x90,0x9e,0x3e,0xf0,
55447 -0x90,0x9e,0x42,0xe0,0xfd,0x90,0x9e,0x3e,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,
55448 -0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
55449 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x46,0xe0,0x5e,0xfe,0xa3,0xe0,
55450 -0x5f,0x4e,0x70,0x27,0x90,0x9e,0x3e,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,
55451 -0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
55452 -0x9e,0x44,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x3e,0xe0,0xf5,
55453 -0x64,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,0x3f,0xe0,0x6f,0x60,
55454 -0x08,0x90,0x9e,0x3e,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,
55455 -0x3f,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x3e,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x42,
55456 -0xe0,0xf5,0x64,0xe5,0x64,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
55457 -0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x64,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
55458 -0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
55459 -0x13,0xff,0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
55460 -0xa3,0xef,0xf0,0xaf,0x04,0xad,0x64,0x51,0x80,0xaf,0x64,0x22,0x8f,0x77,0x12,0x45,
55461 -0xa6,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x52,0x12,0x47,0xcc,0xe5,0x77,0x60,0x10,
55462 -0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,
55463 -0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,
55464 -0x1f,0x74,0x20,0xf0,0x22,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,
55465 -0x22,0xb4,0x01,0x04,0xe4,0xff,0xd1,0x5c,0x53,0x23,0xf0,0x43,0x23,0x0c,0x22,0x90,
55466 -0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,0xa3,
55467 -0xf0,0xa3,0xf0,0xfd,0x7f,0x54,0x12,0x4c,0xe3,0x7d,0xff,0x7f,0x55,0x12,0x4c,0xe3,
55468 -0x7d,0xff,0x7f,0x56,0x12,0x4c,0xe3,0x7d,0xff,0x7f,0x57,0x02,0x4c,0xe3,0x90,0x00,
55469 -0x02,0xe0,0x54,0xe0,0x7f,0x01,0x60,0x02,0x7f,0x00,0x22,0x90,0x00,0xf3,0xe0,0x7f,
55470 -0x00,0x30,0xe3,0x03,0x7f,0x01,0x22,0x22,0x90,0x01,0x64,0x74,0xa0,0xf0,0x22,0xc0,
55471 -0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,
55472 -0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,
55473 -0xff,0xf0,0x74,0x5e,0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,0x90,0x00,
55474 -0x55,0xe0,0x5f,0xf5,0x3d,0xe5,0x3d,0x30,0xe6,0x18,0x74,0x40,0xf0,0x90,0x9e,0x1d,
55475 -0xe0,0x54,0x03,0xff,0xbf,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0x60,0x05,0x7f,0x01,0x12,
55476 -0x4c,0xf8,0xe5,0x3d,0x30,0xe7,0x15,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x9e,0x1d,
55477 -0xe0,0x54,0x03,0xff,0xbf,0x03,0x05,0x7f,0x02,0x12,0x4c,0xf8,0x90,0x01,0xc4,0x74,
55478 -0xff,0xf0,0x74,0x5e,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,
55479 -0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,
55480 -0x32,0x8f,0x6b,0x8c,0x6c,0x8d,0x6d,0x22,0x8f,0x6e,0x8c,0x6f,0x8d,0x70,0x22,0xe4,
55481 -0xf5,0x22,0xf5,0x26,0xf5,0x25,0x75,0x24,0x0c,0x75,0x23,0x0c,0x90,0x9e,0x73,0xf0,
55482 -0x90,0x9e,0x71,0xf0,0x90,0x9e,0x70,0xf0,0x90,0x9e,0x72,0x04,0xf0,0x90,0x9e,0x64,
55483 -0xf0,0xe4,0x90,0x9e,0x74,0xf0,0x90,0x9e,0x66,0xf0,0x90,0x9e,0x6e,0x74,0x07,0xf0,
55484 -0xe4,0x90,0x9e,0x65,0xf0,0x90,0x9e,0x6c,0xf0,0xa3,0x74,0x02,0xf0,0x90,0x9e,0x6a,
55485 -0x14,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x69,0x74,0x14,0xf0,0x90,0x9e,0x6f,0x74,
55486 -0x05,0xf0,0xe4,0x90,0x9e,0x68,0xf0,0x90,0x9e,0x63,0xf0,0x90,0x9e,0x5f,0xf0,0x22,
55487 -0xe4,0x90,0x9e,0x74,0xf0,0x90,0x9e,0x65,0xf0,0xf5,0x26,0x22,0x8b,0x59,0x8a,0x5a,
55488 -0x89,0x5b,0x11,0x00,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x12,0x29,0xd9,0xf5,0x25,0x14,
55489 -0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,0x40,0x7f,0x01,0x80,0x3a,
55490 -0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0xe4,0xff,0x11,
55491 -0x6d,0x80,0x27,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,
55492 -0x7f,0x01,0x11,0x6d,0x1f,0x80,0x13,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,
55493 -0x12,0x42,0x20,0xfd,0x7f,0x02,0x11,0x6d,0xe4,0xff,0x11,0x98,0x22,0xef,0x24,0xfe,
55494 -0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x72,0x74,0x01,0xf0,0x80,0x16,0xed,0x70,0x0a,
55495 -0x90,0x9e,0x6f,0xe0,0x90,0x9e,0x72,0xf0,0x80,0x05,0x90,0x9e,0x72,0xed,0xf0,0x90,
55496 -0x9e,0x72,0xe0,0x90,0x9e,0x64,0xf0,0x22,0xef,0x64,0x01,0x70,0x2f,0x7d,0x7c,0x7f,
55497 -0x02,0x12,0x36,0x75,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0x90,0x01,0x57,0xe4,0xf0,
55498 -0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x47,0x2b,0xe4,0xff,0x31,0x1f,0x90,0x06,0x04,
55499 -0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,
55500 -0x7c,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x36,0xe6,0x7d,0x02,0x7f,0x03,
55501 -0x12,0x36,0xe6,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,
55502 -0xf0,0x90,0x9e,0x6c,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x22,0x30,0xe0,0x19,
55503 -0x90,0x9e,0x66,0xe0,0x70,0x18,0xe0,0x04,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x04,
55504 -0x50,0x0c,0x7d,0x01,0x7f,0x04,0x02,0x47,0x2f,0xe4,0x90,0x9e,0x66,0xf0,0x22,0xef,
55505 -0x60,0x0b,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x60,
55506 -0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x77,0xe4,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,
55507 -0x90,0x05,0x22,0x74,0xff,0xf0,0x31,0xc3,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,
55508 -0xf0,0x7d,0x02,0x7f,0x03,0x12,0x36,0xe6,0xe5,0x25,0x60,0x04,0x7f,0x01,0x31,0x1f,
55509 -0x51,0x04,0x53,0x23,0xf0,0x43,0x23,0x02,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
55510 -0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x73,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,
55511 -0x90,0x9e,0x63,0xf0,0x12,0x29,0xd9,0x65,0x25,0x60,0x02,0x11,0x0c,0xd0,0xd0,0x92,
55512 -0xaf,0x22,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,
55513 -0x80,0x20,0x90,0x9e,0x73,0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0d,0xe5,0x23,
55514 -0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x2f,0xe4,0xff,
55515 -0x31,0x1f,0x22,0xe4,0x90,0x9e,0xa9,0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,
55516 -0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,
55517 -0x90,0x9e,0xaa,0xe0,0x94,0xe8,0x90,0x9e,0xa9,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,
55518 -0x22,0x7f,0x32,0x7e,0x00,0x12,0x37,0x54,0x90,0x9e,0xa9,0xe4,0x75,0xf0,0x01,0x12,
55519 -0x42,0x81,0x80,0xc6,0x7f,0x78,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xff,0x12,0x2a,
55520 -0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0x03,0x12,0x2a,0x7f,0x7f,0x00,
55521 -0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x07,0x12,0x2a,0x7f,0x90,0x9e,0x60,0xe0,0x90,
55522 -0x9d,0xff,0xb4,0x01,0x0d,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,
55523 -0x80,0x07,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,
55524 -0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,
55525 -0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,
55526 -0x9e,0x07,0x12,0x43,0x53,0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,
55527 -0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9e,
55528 -0x0b,0x12,0x2a,0x7f,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa0,0x7f,0x70,
55529 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,
55530 -0xfd,0xff,0x12,0x34,0x81,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,
55531 -0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x90,0x00,0x11,
55532 -0xe0,0x54,0xf6,0xf0,0x02,0x4b,0xdb,0x12,0x4b,0xc4,0xef,0x64,0x01,0x60,0x08,0x90,
55533 -0x01,0xb9,0x74,0x01,0xf0,0x80,0x30,0x90,0x9e,0x71,0xe0,0x60,0x08,0x90,0x01,0xb9,
55534 -0x74,0x02,0xf0,0x80,0x22,0x90,0x9e,0x70,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,
55535 -0xf0,0x80,0x14,0xe5,0x24,0x54,0x0f,0xd3,0x94,0x04,0x40,0x08,0x90,0x01,0xb9,0x74,
55536 -0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x08,0xf0,0x7f,0x00,0x22,
55537 -0x12,0x4b,0xc4,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x4a,
55538 -0xe5,0x26,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x3c,0xe5,0x24,
55539 -0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x2b,0xe5,
55540 -0x26,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x1e,0xe5,0x26,0x30,0xe4,
55541 -0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x11,0x90,0x9e,0x66,0xe0,0x60,0x08,0x90,
55542 -0x01,0xb9,0x74,0x20,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,
55543 -0x7f,0x00,0x22,0xe5,0x12,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x5b,0xe5,
55544 -0x24,0x54,0x0f,0xd3,0x94,0x01,0x40,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x4a,
55545 -0x90,0x02,0x87,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x3c,0x90,0x9e,
55546 -0x5e,0xe0,0xb4,0x01,0x10,0x90,0x9e,0x4d,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,
55547 -0xe0,0x60,0x16,0x80,0x25,0x90,0x9e,0x5e,0xe0,0x70,0x0e,0x90,0x01,0xaf,0xe0,0x60,
55548 -0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x11,0x90,0x9e,0x68,0xe0,0x70,0x08,0x90,
55549 -0x01,0xb9,0x74,0x10,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,
55550 -0x7f,0x00,0x22,0x90,0x9e,0xae,0xef,0xf0,0x91,0x0c,0x90,0x9e,0xae,0xe0,0x60,0x05,
55551 -0x90,0x05,0x22,0xe4,0xf0,0x53,0x23,0xf0,0x43,0x23,0x04,0x22,0x90,0x00,0x11,0xe0,
55552 -0x44,0x09,0xf0,0x12,0x4b,0xdb,0x90,0x9d,0xff,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
55553 -0x2a,0x7f,0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0x90,
55554 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,
55555 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x90,
55556 -0x9e,0x0b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,
55557 -0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,0xe4,0xfd,0xff,0x12,
55558 -0x34,0x81,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,
55559 -0x03,0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x22,0x8f,0x27,0xe4,0x90,0x9e,
55560 -0xa7,0xf0,0xa3,0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0xef,
55561 -0x65,0x27,0x60,0x3e,0xc3,0x90,0x9e,0xa8,0xe0,0x94,0x88,0x90,0x9e,0xa7,0xe0,0x94,
55562 -0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0xa7,0xe4,0x75,
55563 -0xf0,0x01,0x12,0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x37,0x54,0xd3,0x90,0x9e,0xa8,
55564 -0xe0,0x94,0x32,0x90,0x9e,0xa7,0xe0,0x94,0x00,0x40,0xb9,0x90,0x01,0xc7,0xe0,0x30,
55565 -0xe0,0xb2,0x22,0xe5,0x24,0x30,0xe6,0x19,0xe5,0x24,0x54,0x0f,0xff,0x90,0x9e,0x62,
55566 -0xe0,0xfe,0x4f,0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x62,0xf0,0x53,0x24,
55567 -0xbf,0x22,0x8f,0x76,0x12,0x45,0xa6,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x53,0x12,
55568 -0x47,0xcc,0xe5,0x76,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
55569 -0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
55570 -0xe0,0x54,0xef,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xe5,0x22,0x64,0x01,0x70,
55571 -0x61,0xe5,0x25,0x60,0x5d,0xe5,0x25,0x64,0x02,0x60,0x06,0xe5,0x25,0x64,0x05,0x70,
55572 -0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x64,0xf0,0x90,0x06,0xaa,0xe0,0x90,0x9e,0x72,
55573 -0xf0,0x90,0x9e,0x64,0xe0,0x70,0x07,0x90,0x9e,0x72,0xe0,0xff,0x80,0x05,0x90,0x9e,
55574 -0x64,0xe0,0xff,0x90,0x9e,0x64,0xef,0xf0,0x90,0x9e,0x66,0xe0,0x60,0x03,0xe0,0x14,
55575 -0xf0,0xe4,0x90,0x9e,0x65,0xf0,0x90,0x01,0x57,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,
55576 -0x53,0x26,0xfd,0x53,0x26,0xef,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,
55577 -0x45,0x53,0x22,0xe4,0xff,0xe5,0x25,0x60,0x5f,0xe5,0x22,0x64,0x01,0x70,0x59,0xe5,
55578 -0x25,0x14,0x60,0x2b,0x24,0xfd,0x60,0x27,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x21,
55579 -0x90,0x9e,0x64,0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x14,0x90,0x9e,0x64,
55580 -0xe0,0x70,0x08,0x90,0x9e,0x72,0xe0,0x90,0x9e,0x64,0xf0,0x7f,0x01,0x80,0x02,0x7f,
55581 -0x01,0xef,0x60,0x24,0x43,0x26,0x10,0xe4,0x90,0x9e,0x86,0xf0,0x90,0x9e,0x6e,0x12,
55582 -0x44,0x56,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x04,0x50,
55583 -0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x2f,0x22,0xe5,0x25,0x60,0x39,0x90,0x9e,0x74,
55584 -0xe0,0x60,0x0d,0xe4,0xf0,0x53,0x26,0xfd,0xe5,0x26,0x54,0x07,0x70,0x28,0x80,0x23,
55585 -0x90,0x9e,0x65,0xe0,0x04,0xf0,0x53,0x26,0xef,0x90,0x9e,0x6a,0xe0,0xff,0x90,0x9e,
55586 -0x65,0xe0,0xd3,0x9f,0x40,0x0d,0xe5,0x22,0xb4,0x01,0x0b,0xa3,0xe0,0x70,0x07,0xe0,
55587 -0x04,0xf0,0x22,0x12,0x44,0xd1,0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,
55588 -0x17,0xed,0xc4,0x54,0xf0,0xfd,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,
55589 -0x04,0xf5,0x83,0xe0,0x54,0x0f,0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,
55590 -0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,
55591 -0x04,0xf5,0x83,0xe0,0x4d,0xf0,0x22,0xad,0x07,0xed,0xc3,0x94,0x20,0x50,0x0d,0x74,
55592 -0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2d,0xf5,
55593 -0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x64,0xe5,0x64,0x54,0x1f,0xfc,
55594 -0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x90,0x9e,0x3e,0xf0,
55595 -0xed,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,
55596 -0x90,0x9e,0x3f,0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
55597 -0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x41,0xcb,0xf0,0xa3,0xeb,0xf0,
55598 -0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfa,0x74,
55599 -0x01,0x93,0xfb,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xea,
55600 -0xf0,0xa3,0xeb,0xf0,0xec,0xc3,0x9f,0x40,0x02,0xe1,0xa5,0x74,0x67,0x2d,0xf5,0x82,
55601 -0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,0x9e,0x3e,0xe0,0xff,0xeb,0xd3,
55602 -0x9f,0x40,0x02,0xe1,0xd6,0xeb,0xc3,0x94,0x10,0x40,0x21,0xeb,0x24,0xf0,0xff,0x74,
55603 -0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,
55604 -0x90,0x9e,0x3f,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x23,0xeb,0xc3,0x94,0x10,
55605 -0x50,0x40,0x74,0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
55606 -0xd8,0xf9,0xff,0x90,0x9e,0x41,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x23,0xbb,
55607 -0x11,0x09,0x90,0x9e,0x40,0xe0,0x30,0xe7,0x02,0x7b,0x17,0xeb,0x64,0x13,0x60,0x03,
55608 -0xbb,0x12,0x09,0x90,0x9e,0x3f,0xe0,0x30,0xe0,0x02,0x7b,0x18,0xac,0x03,0x8c,0x64,
55609 -0x80,0x34,0x0b,0x80,0x84,0x90,0x9e,0x3e,0xe0,0xfb,0x6c,0x70,0x69,0x74,0x67,0x2d,
55610 -0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,
55611 -0x12,0x43,0x5f,0xe0,0xb4,0x01,0x0c,0xe5,0x64,0x20,0xe6,0x07,0xec,0x44,0x40,0xf5,
55612 -0x64,0x80,0x03,0xaf,0x64,0x22,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,
55613 -0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,
55614 -0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,
55615 -0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,
55616 -0xf0,0xa3,0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,0x9e,0x3e,0xe0,0xff,
55617 -0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0xac,0x07,0x8f,0x64,
55618 -0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,
55619 -0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,
55620 -0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,
55621 -0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x64,
55622 -0x22,0x74,0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xaf,0x05,0xe5,
55623 -0x64,0x44,0x80,0xfd,0x12,0x5a,0x80,0xe5,0x64,0x44,0x80,0xff,0x22,0xe4,0xf5,0x59,
55624 -0xe5,0x59,0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,0x95,0x01,0xe0,0xff,
55625 -0x90,0x9a,0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,
55626 -0x4b,0x12,0x43,0x5f,0xe0,0x64,0x01,0x60,0x02,0xc1,0xd3,0xe5,0x59,0x25,0xe0,0x24,
55627 -0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xd3,0x94,0x00,0xee,
55628 -0x94,0x00,0x50,0x02,0xc1,0xd3,0xe5,0x59,0x94,0x20,0x40,0x08,0x90,0x9a,0xc5,0xe0,
55629 -0x60,0x02,0xc1,0xde,0xe5,0x59,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf9,0x74,0x90,0x35,
55630 -0xf0,0x75,0x5e,0x01,0xf5,0x5f,0x89,0x60,0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,
55631 -0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x38,0xcf,0xf0,0xa3,0xef,
55632 -0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xff,
55633 -0xa3,0xe0,0x90,0x9e,0x3a,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,0xc3,0x94,0x20,0x50,
55634 -0x14,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x3f,0x90,
55635 -0x9e,0x34,0xf0,0x80,0x12,0x74,0xa6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,
55636 -0xe0,0x54,0x3f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfe,0x54,0x1f,0xa3,0xf0,
55637 -0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3d,0xf0,
55638 -0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xc3,0x94,0x05,0x40,
55639 -0x02,0x61,0xac,0x90,0x9e,0x3d,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x9f,0x40,0x13,0x90,
55640 -0x9e,0x3d,0xe0,0x90,0x9e,0x35,0xf0,0xee,0x54,0x40,0xfe,0x90,0x9e,0x34,0xf0,0xef,
55641 -0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x54,0x05,0x64,0x01,0x70,0x29,0x90,0x9e,0x35,0xe0,
55642 -0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
55643 -0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xda,0x80,0x30,0x90,0x9e,0x35,0xe0,
55644 -0x90,0x40,0xf6,0x80,0x27,0x90,0x9e,0x35,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,
55645 -0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,
55646 -0x90,0x41,0x12,0x80,0x07,0x90,0x9e,0x35,0xe0,0x90,0x41,0x2e,0x93,0x90,0x9e,0x3c,
55647 -0xf0,0x90,0x9e,0x3c,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x50,0xf9,0x74,0x40,0x35,0xf0,
55648 -0x75,0x5b,0xff,0xf5,0x5c,0x89,0x5d,0x90,0x9e,0x34,0xe0,0x90,0x41,0xf2,0x93,0xff,
55649 -0xd3,0x90,0x9e,0x3b,0xe0,0x9f,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x09,0xe4,0xfd,
55650 -0xaf,0x59,0x12,0x5c,0xbd,0xc1,0x6a,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
55651 -0x34,0x95,0xf5,0x83,0xe0,0xf5,0x61,0xa3,0xe0,0xf5,0x62,0xab,0x5b,0xaa,0x5c,0xa9,
55652 -0x5d,0x12,0x29,0xd9,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,0x42,0x97,
55653 -0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,
55654 -0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,
55655 -0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,
55656 -0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,
55657 -0x5d,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,
55658 -0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,
55659 -0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x03,0x12,
55660 -0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x06,0x12,0x42,
55661 -0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,
55662 -0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x7e,0x00,
55663 -0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,
55664 -0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,
55665 -0xa9,0x5d,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,
55666 -0xa3,0xe0,0xfd,0x12,0x29,0xf2,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,0x0c,0xe5,
55667 -0x62,0x9f,0xf5,0x62,0xe5,0x61,0x9e,0xf5,0x61,0x80,0x05,0xe4,0xf5,0x61,0xf5,0x62,
55668 -0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,0x61,0xf0,
55669 -0xa3,0xe5,0x62,0xf0,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,
55670 -0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,0x07,0xaf,
55671 -0x59,0x12,0x66,0x87,0xc1,0x3e,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x9e,0xf5,0x82,
55672 -0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,
55673 -0x02,0xc1,0x3e,0x7d,0x01,0xaf,0x59,0x12,0x5c,0xbd,0xc1,0x3e,0x74,0xe6,0x25,0x59,
55674 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,0xa1,0x47,0x90,
55675 -0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x19,0x40,0x3d,
55676 -0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x11,0x40,0x2e,0x80,
55677 -0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x0a,
55678 -0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x03,0x40,0x0d,
55679 -0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,0x84,0x25,
55680 -0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0x74,0x44,0x25,0x59,0xf5,
55681 -0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,0x81,0xf4,0x90,
55682 -0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0x81,0xf4,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,
55683 -0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,0xe4,0x33,0xfe,
55684 -0x74,0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,0xd3,0x9f,0xee,
55685 -0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,0x33,0xfe,0x74,
55686 -0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,0xee,0x64,0x80,
55687 -0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
55688 -0x83,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,0x59,0xf5,0x82,
55689 -0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,0x63,0x05,0x80,
55690 -0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x63,0x03,0x80,0x03,0x75,0x63,0x01,0x74,
55691 -0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,0x85,0x25,0x59,
55692 -0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,
55693 -0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,
55694 -0x04,0xf0,0x80,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,
55695 -0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x35,0xe0,0xff,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,
55696 -0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,
55697 -0x83,0xe5,0x63,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4c,0x12,0x43,0x5f,0xe0,
55698 -0xb4,0x01,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,
55699 -0x83,0xe4,0xf0,0xad,0x63,0xc1,0x39,0xec,0x64,0x06,0x60,0x02,0xc1,0x3e,0xf5,0x61,
55700 -0xf5,0x62,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,0xa3,0xe0,
55701 -0xfd,0x12,0x29,0xf2,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,0x25,0x59,
55702 -0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0xe4,0xf5,0x5a,0xab,0x5e,0xaa,
55703 -0x5f,0xa9,0x60,0x75,0xf0,0x02,0xe5,0x5a,0xa4,0xf5,0x82,0x85,0xf0,0x83,0x12,0x42,
55704 -0xc2,0xfd,0xac,0xf0,0xe5,0x5a,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,0x12,0x29,0xf2,
55705 -0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,0xe0,0x95,
55706 -0x62,0x90,0x9e,0x36,0xe0,0x95,0x61,0x40,0x07,0x05,0x5a,0xe5,0x5a,0xb4,0x05,0xbd,
55707 -0xe5,0x5a,0xc3,0x13,0xf5,0x5a,0xe5,0x63,0xb4,0x01,0x06,0xe5,0x5a,0x70,0x46,0x80,
55708 -0x13,0xe5,0x63,0xb4,0x03,0x15,0xe5,0x5a,0x70,0x05,0x75,0x63,0x03,0x80,0x39,0xe5,
55709 -0x5a,0xb4,0x01,0x05,0x75,0x63,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x63,0xb4,0x05,0x28,
55710 -0xe5,0x5a,0x70,0x05,0x75,0x63,0x05,0x80,0x0d,0xe5,0x5a,0xb4,0x01,0x05,0x75,0x63,
55711 -0x03,0x80,0x03,0x75,0x63,0x01,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,0x9e,0x3a,
55712 -0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,
55713 -0x9e,0x3a,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0x74,0x84,0x25,0x59,0xf5,0x82,
55714 -0xe4,0x34,0x98,0xf5,0x83,0xe5,0x63,0xf0,0xfd,0xaf,0x59,0x12,0x66,0x47,0x74,0xe6,
55715 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,0x74,0xe6,0x50,
55716 -0x0e,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x0b,0x25,
55717 -0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x5e,0xaa,0x5f,0xa9,0x60,
55718 -0xe4,0xf5,0xf0,0x12,0x42,0xfa,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0xe4,
55719 -0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,
55720 -0x06,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,0x43,0x19,
55721 -0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,
55722 -0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,
55723 -0xa3,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,
55724 -0xf0,0xa3,0xf0,0x05,0x59,0xe5,0x59,0xc3,0x94,0x40,0x50,0x02,0x01,0x90,0x22,0x90,
55725 -0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,0xf0,
55726 -0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x0d,0xbd,0x10,
55727 -0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,0xe4,0xfd,0x75,0xf0,0x0a,
55728 -0xed,0x90,0x90,0x00,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,
55729 -0x90,0x02,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x04,
55730 -0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x06,0x12,0x43,
55731 -0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x08,0x12,0x43,0x5f,0xe4,
55732 -0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0x74,0x13,0xf0,
55733 -0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2d,0xf5,
55734 -0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
55735 -0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
55736 -0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
55737 -0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,
55738 -0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
55739 -0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,
55740 -0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,0xf5,0x82,0xe4,0x34,0x9c,
55741 -0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,
55742 -0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x41,0xc4,0x93,
55743 -0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,
55744 -0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,
55745 -0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4b,0x12,0x43,
55746 -0x5f,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,0x74,0x01,
55747 -0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0c,0xf0,0x75,0xf0,
55748 -0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x5f,0x74,0xff,0xf0,0xa3,0xf0,0x75,0xf0,0x09,
55749 -0xed,0x90,0x96,0x44,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0x75,0xf0,0x09,
55750 -0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0x74,0x13,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,
55751 -0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,0x2d,0xf5,
55752 -0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,0xf5,0x82,
55753 -0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x03,0x02,0x6f,
55754 -0x0d,0x22,0x12,0x29,0xd9,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,0x02,0x12,
55755 -0x42,0x20,0xff,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,0xf0,
55756 -0x22,0xe5,0x59,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x96,0x42,0xf0,
55757 -0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,0xc4,0x13,
55758 -0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x55,0x30,0x12,0x29,0xd9,0x90,0x95,0x01,
55759 -0xf0,0x22,0x12,0x29,0xd9,0xf5,0x22,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x30,
55760 -0xe0,0x25,0x12,0x29,0xd9,0x90,0x9e,0x6a,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0x90,
55761 -0x9e,0x6b,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x69,0xf0,0x90,0x00,0x03,0x12,
55762 -0x42,0x20,0x90,0x9e,0x6f,0xf0,0x22,0x90,0x9e,0x6a,0x74,0x01,0xf0,0x90,0x9e,0x6b,
55763 -0x74,0x03,0xf0,0x90,0x9e,0x69,0x74,0x14,0xf0,0x90,0x9e,0x6f,0x74,0x05,0xf0,0x22,
55764 -0x12,0x29,0xd9,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x6e,0xf0,0x90,0x00,
55765 -0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x6c,0xe4,0xf0,0xa3,0xef,0xf0,0x22,0x90,0x9e,
55766 -0x6e,0x74,0x07,0xf0,0x90,0x9e,0x6c,0xe4,0xf0,0xa3,0x74,0x02,0xf0,0x22,0x90,0x02,
55767 -0x09,0xe0,0xfd,0x12,0x29,0xd9,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x50,0xf0,0x90,
55768 -0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x51,0xf0,0x90,0x00,0x02,0x12,
55769 -0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x52,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,0xff,
55770 -0xed,0x2f,0x90,0x9e,0x53,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0xae,0x05,0xed,
55771 -0x2f,0x90,0x9e,0x54,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x3f,
55772 -0x12,0x43,0x8b,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xfa,
55773 -0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,
55774 -0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,0x29,0xd9,0xff,0x60,0x2c,0xb5,0x71,0x16,
55775 -0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0x65,0x73,0x70,0x04,
55776 -0xe5,0x72,0x65,0xf0,0x60,0x23,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,
55777 -0x42,0xc2,0xff,0xae,0xf0,0x51,0x3e,0x80,0x10,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x12,
55778 -0x29,0xd9,0x65,0x71,0x60,0x03,0x12,0x44,0xc8,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,
55779 -0x42,0xee,0xf0,0xa3,0xef,0xf0,0x75,0x71,0x01,0x8e,0x72,0xf5,0x73,0xe4,0xfd,0x7f,
55780 -0x0b,0x51,0x80,0xe4,0xfd,0x7f,0x02,0x51,0x80,0x71,0x4a,0xe4,0xff,0x71,0xac,0xe4,
55781 -0xf5,0x75,0x90,0x01,0xc9,0xe5,0x75,0xf0,0x90,0x9e,0x42,0xe0,0xfc,0xa3,0xe0,0xfd,
55782 -0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,0x7d,0x01,0x7f,0x60,0x7e,0x01,0x02,0x35,0xab,
55783 -0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,0x90,0x9e,0x44,0xef,
55784 -0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9e,0x44,0xe0,0xff,0x74,
55785 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,0xe0,
55786 -0x5f,0xf0,0x80,0x17,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
55787 -0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x9e,
55788 -0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
55789 -0x90,0x00,0x46,0x80,0x5a,0x90,0x9e,0x44,0xe0,0x24,0xf8,0xf0,0xa3,0xe0,0x70,0x1d,
55790 -0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,
55791 -0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,0x1a,0x90,0x9e,0x44,
55792 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,
55793 -0xff,0x90,0x00,0x43,0xe0,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x9e,0x44,0xe0,0xff,0x74,
55794 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,
55795 -0x5f,0xf0,0x12,0x4b,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0x7f,0x0b,0x71,0xb9,0xef,0x65,
55796 -0x74,0x60,0x10,0xe5,0x74,0xb4,0x01,0x05,0xe4,0xf5,0x74,0x80,0x03,0x75,0x74,0x01,
55797 -0x7f,0x01,0x22,0x7f,0x00,0x22,0xe5,0x71,0x64,0x01,0x70,0x3f,0x71,0x4a,0xbf,0x01,
55798 -0x04,0x7f,0x01,0x71,0xac,0x90,0x00,0x46,0xe0,0x44,0x04,0xfd,0x7f,0x46,0x12,0x4c,
55799 -0xe3,0x90,0x00,0x44,0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x12,0x4c,0xe3,0x90,0x00,0x46,
55800 -0xe0,0x54,0xfb,0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x7f,0x02,0x71,0xb9,0x8f,0x75,0x90,
55801 -0x01,0xc9,0xe5,0x75,0xf0,0xb4,0x01,0x03,0x12,0x4f,0xda,0x22,0x90,0x01,0xca,0xe5,
55802 -0x74,0xf0,0xef,0x60,0x03,0x12,0x4f,0xda,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
55803 -0x90,0x9e,0xb1,0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,0x01,0xa8,0x07,
55804 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,0x12,
55805 -0x4b,0xdb,0x90,0x9e,0xb1,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,
55806 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,0xe4,0xfe,0xef,
55807 -0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,0x80,
55808 -0x44,0x90,0x9e,0xb1,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
55809 -0x02,0xc3,0x33,0xd8,0xfc,0x12,0x4b,0xd3,0x90,0x9e,0xb1,0xe0,0xfd,0x74,0x01,0x7e,
55810 -0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,
55811 -0x42,0xe0,0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,
55812 -0xce,0x13,0xd8,0xf8,0xff,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
55813 -0xd0,0x90,0x9e,0x56,0xe0,0x90,0x9e,0x40,0xf0,0x90,0x9e,0x57,0xe0,0xf5,0x64,0xa3,
55814 -0xe0,0xf5,0x65,0xe4,0xf5,0x61,0x74,0x59,0x25,0x61,0xf5,0x82,0xe4,0x34,0x9e,0xf5,
55815 -0x83,0xe0,0xff,0x74,0x66,0x25,0x61,0xf8,0xa6,0x07,0x05,0x61,0xe5,0x61,0xb4,0x04,
55816 -0xe5,0x90,0x9e,0x40,0xe0,0x12,0x43,0x94,0x74,0xb7,0x00,0x75,0xdf,0x01,0x74,0xbd,
55817 -0x02,0x74,0xbd,0x03,0x74,0xbd,0x04,0x75,0xdf,0x05,0x75,0xaf,0x80,0x75,0xc5,0x81,
55818 -0x75,0xdf,0x82,0x00,0x00,0x75,0xdb,0xaf,0x69,0xb1,0xe6,0xa1,0xdf,0x90,0x9e,0x40,
55819 -0xe0,0xff,0xb4,0x02,0x08,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x80,0x0f,0xef,0x90,0x9e,
55820 -0x3f,0xb4,0x03,0x05,0x74,0x02,0xf0,0x80,0x03,0x74,0x04,0xf0,0xc3,0xe5,0x64,0x94,
55821 -0x08,0x50,0x49,0xe4,0xf5,0x61,0x90,0x9e,0x3f,0xe0,0xff,0xe5,0x61,0xc3,0x9f,0x40,
55822 -0x02,0xa1,0xdf,0xc3,0xe5,0x64,0x94,0x01,0x50,0x14,0xe5,0x61,0x25,0x65,0xff,0xc3,
55823 -0x74,0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xfd,0x12,0x4c,0xe3,0x80,0x1a,0xc3,0x74,
55824 -0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xff,0xe5,0x61,0x7c,0x00,0x25,0x65,0xfd,0xec,
55825 -0x35,0x64,0x8d,0x82,0xf5,0x83,0xef,0xf0,0x05,0x61,0x80,0xba,0xc3,0xe5,0x64,0x94,
55826 -0x10,0x40,0x02,0xa1,0xdf,0x90,0x9e,0x40,0xe0,0x64,0x04,0x60,0x02,0xa1,0xdf,0xaf,
55827 -0x67,0xfc,0xfd,0xfe,0x78,0x10,0x12,0x2a,0x6c,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,
55828 -0x07,0xaf,0x66,0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x2a,0x6c,0xd0,0x03,0xd0,0x02,
55829 -0xd0,0x01,0xd0,0x00,0x12,0x43,0x46,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xaf,
55830 -0x68,0xe4,0xfc,0xfd,0xfe,0x78,0x08,0x12,0x2a,0x6c,0xd0,0x03,0xd0,0x02,0xd0,0x01,
55831 -0xd0,0x00,0x12,0x43,0x46,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0xaf,0x69,0xe4,
55832 -0xfc,0xfd,0xfe,0x12,0x43,0x46,0xa3,0x12,0x2a,0x7f,0x90,0x9e,0x41,0x12,0x43,0x53,
55833 -0x90,0x80,0x85,0x12,0x2a,0x7f,0xaf,0x65,0xae,0x64,0x12,0x2f,0xd9,0x80,0x30,0xe5,
55834 -0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,
55835 -0x12,0x37,0x54,0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,
55836 -0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,0x36,0xcb,0x80,0x04,0x7f,0x00,0x80,0x02,0x7f,
55837 -0x01,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x6a,0xe4,0x90,0x9e,0x45,0xf0,0xe5,0x6a,0x14,
55838 -0xfe,0x90,0x9e,0x45,0xe0,0xff,0xc3,0x9e,0x50,0x0e,0xef,0x04,0xfd,0x12,0x34,0xb7,
55839 -0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,0x7d,0xff,0x12,0x34,
55840 -0xb7,0x90,0x9e,0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,0x94,0xff,0x50,0x0f,
55841 -0xe0,0xff,0x04,0xfd,0x12,0x34,0xb7,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe8,0xad,
55842 -0x6a,0x7f,0xff,0x02,0x34,0xb7,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0xf5,0x5b,
55843 -0x75,0x5c,0x04,0xf5,0x5d,0xf5,0x5f,0xf5,0x60,0x90,0x02,0x09,0xe0,0xff,0x12,0x29,
55844 -0xd9,0xfe,0xef,0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,0x75,0x5a,0x80,0x80,
55845 -0x05,0xe4,0xf5,0x59,0xf5,0x5a,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x74,0x20,
55846 -0x25,0x5b,0xf5,0x5b,0xad,0x5a,0xe5,0x5b,0x2d,0xff,0x24,0x01,0xf5,0x82,0xe4,0x34,
55847 -0xfc,0xf5,0x83,0xe0,0x90,0x9e,0x56,0xf0,0x74,0x02,0x2f,0xf5,0x82,0xe4,0x34,0xfc,
55848 -0xf5,0x83,0xe0,0xfe,0xe5,0x5b,0x2d,0x24,0x03,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
55849 -0xe0,0x24,0x00,0xff,0xe4,0x3e,0x90,0x9e,0x57,0xf0,0xa3,0xef,0xf0,0x7f,0x04,0xe5,
55850 -0x5b,0x25,0x5a,0x2f,0x24,0x00,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0xfe,0x74,
55851 -0x55,0x2f,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,0xee,0xf0,0x0f,0xbf,0x08,0xe0,0x91,
55852 -0x5a,0xef,0x70,0x3f,0x90,0x01,0xc3,0xe0,0x60,0x25,0xc3,0xe5,0x60,0x94,0xe8,0xe5,
55853 -0x5f,0x94,0x03,0x40,0x09,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x80,0x63,0x05,0x60,
55854 -0xe5,0x60,0x70,0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,0xd5,0x90,
55855 -0x01,0xc6,0xe0,0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,0x80,0x43,0x74,0xff,
55856 -0xf0,0x80,0x3e,0xe5,0x5b,0xb4,0x78,0x23,0xe4,0xf5,0x5b,0x05,0x5e,0xe5,0x5a,0x64,
55857 -0x80,0x45,0x59,0x70,0x06,0xf5,0x59,0xf5,0x5a,0x80,0x06,0x75,0x59,0x00,0x75,0x5a,
55858 -0x80,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x80,0x06,0x74,0x08,0x25,0x5b,0xf5,
55859 -0x5b,0xe5,0x5d,0x15,0x5d,0x70,0x02,0x15,0x5c,0xe5,0x5d,0x45,0x5c,0x60,0x02,0xc1,
55860 -0x74,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,0xa3,
55861 -0xf0,0xa3,0xf0,0x22,0xe4,0x90,0x9e,0x5d,0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,
55862 -0x7f,0x80,0x02,0x4c,0xe3,0x8e,0x59,0x8f,0x5a,0x8b,0x5b,0x8a,0x5c,0x89,0x5d,0xe4,
55863 -0x90,0x9e,0x34,0xf0,0xef,0x90,0x00,0x31,0xf0,0x12,0x4b,0xdb,0xe5,0x59,0x54,0x03,
55864 -0xff,0x90,0x00,0x32,0xe0,0x54,0xfc,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x00,0x33,0xe0,
55865 -0x54,0x7f,0xf0,0x12,0x4b,0xdb,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x34,
55866 -0xe0,0xc3,0x94,0x64,0x50,0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x34,0xe0,0xc3,
55867 -0x94,0x64,0x50,0x10,0x90,0x00,0x30,0xe0,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x12,0x42,
55868 -0x4d,0x7f,0x01,0x22,0x7f,0x00,0x22,0xe4,0xf5,0x74,0x22,0x90,0x9e,0x60,0xe0,0x90,
55869 -0x9e,0x0f,0xf0,0x22,0xef,0x70,0x03,0x02,0x79,0x9c,0x90,0x9e,0x0f,0xe0,0x60,0x03,
55870 -0x02,0x7d,0x67,0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
55871 -0x8c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
55872 -0x2a,0x7f,0x7f,0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xab,0x12,0x43,0x53,0x90,
55873 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xaf,0x12,
55874 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
55875 -0x9d,0xb3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,
55876 -0x2f,0xd9,0x90,0x9d,0xb7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x74,
55877 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
55878 -0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xbf,0x12,0x43,0x53,0x90,0x80,
55879 -0x85,0x12,0x2a,0x7f,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xc3,0x12,0x43,
55880 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,
55881 -0xc7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,0x2f,
55882 -0xd9,0x90,0x9d,0xcb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x88,0x7e,
55883 -0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xcf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,
55884 -0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,0x80,0x85,
55885 -0x12,0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xd7,0x12,0x43,0x53,
55886 -0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xdb,
55887 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,0x2f,0xd9,
55888 -0x90,0x9d,0xdf,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,
55889 -0x12,0x2f,0xd9,0x90,0x9d,0xe3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
55890 -0xe0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
55891 -0x2a,0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x9d,0xeb,0x12,0x43,0x53,0x90,
55892 -0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9d,0xef,0x12,
55893 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x90,
55894 -0x9d,0xf3,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,
55895 -0x2f,0xd9,0x90,0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,
55896 -0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,0x0f,0xe0,
55897 -0x64,0x01,0x60,0x02,0xa1,0x67,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xfb,
55898 -0x12,0x2a,0x7f,0x7f,0x44,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xa7,0x12,0x2a,0x7f,
55899 -0x7f,0x5c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xab,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,
55900 -0x0e,0x12,0x27,0xde,0x90,0x9d,0xaf,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x27,
55901 -0xde,0x90,0x9d,0xb3,0x12,0x2a,0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,
55902 -0xb7,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbb,0x12,0x2a,
55903 -0x7f,0x7f,0x7c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbf,0x12,0x2a,0x7f,0x7f,0x80,
55904 -0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xc3,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,
55905 -0x27,0xde,0x90,0x9d,0xc7,0x12,0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x27,0xde,0x90,
55906 -0x9d,0xcb,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcf,0x12,
55907 -0x2a,0x7f,0x7f,0xd0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd3,0x12,0x2a,0x7f,0x7f,
55908 -0xd4,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd7,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,
55909 -0x12,0x27,0xde,0x90,0x9d,0xdb,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,0x27,0xde,
55910 -0x90,0x9d,0xdf,0x12,0x2a,0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe3,
55911 -0x12,0x2a,0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe7,0x12,0x2a,0x7f,
55912 -0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9d,0xeb,0x12,0x2a,0x7f,0x7f,0x04,0x7e,
55913 -0x0d,0x12,0x27,0xde,0x90,0x9d,0xef,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x27,
55914 -0xde,0x90,0x9d,0xf3,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,
55915 -0xf7,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,0x2a,
55916 -0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,0xa1,0x12,
55917 -0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,
55918 -0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x01,0x00,0x00,0x7f,
55919 -0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0xdb,0x25,0xa4,
55920 -0x7f,0x5c,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,
55921 -0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,
55922 -0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,
55923 -0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,
55924 -0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,
55925 -0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,
55926 -0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,
55927 -0x12,0x2a,0x8b,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,
55928 -0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
55929 -0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,
55930 -0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,
55931 -0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,0x12,
55932 -0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,0x0e,
55933 -0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xdc,0x7e,
55934 -0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xe0,
55935 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x24,0xdb,0x25,0xa4,0x7f,
55936 -0xec,0x7e,0x0e,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0xa1,
55937 -0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa1,0x12,
55938 -0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa1,
55939 -0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
55940 -0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9e,0xa1,
55941 -0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,
55942 -0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,
55943 -0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
55944 -0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,
55945 -0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,
55946 -0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,
55947 -0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
55948 -0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,
55949 -0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,0x54,0x0f,0xfd,0xec,
55950 -0x54,0xf0,0xfc,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,
55951 -0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,
55952 -0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,
55953 -0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,
55954 -0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,
55955 -0xa1,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,
55956 -0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,
55957 -0x2f,0xd9,0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,
55958 -0x1e,0xf0,0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,0x59,0xc2,
55959 -0xaf,0x90,0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x4c,0xe3,0x7d,0x40,0x7f,
55960 -0x01,0x12,0x36,0xaf,0xe5,0x59,0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,0x45,0x12,
55961 -0x4c,0xe3,0x90,0x04,0xfd,0xe4,0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,0x9e,0x24,
55962 -0xf0,0x90,0x9e,0x27,0xf0,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x26,
55963 -0xf0,0x90,0x9e,0x29,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,
55964 -0xf0,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,0x9e,0x2e,
55965 -0xf0,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,0x00,0x51,
55966 -0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x02,0x4c,0xe3,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x60,
55967 -0x08,0x90,0x9e,0x1c,0xe0,0x60,0x02,0xc1,0xd0,0x90,0x9e,0x10,0xe0,0xc3,0x94,0xff,
55968 -0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x11,0xe0,0xc3,0x94,0xff,0x50,0x06,
55969 -0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x12,0xe0,0xc3,0x94,0xff,0x50,0x0a,0xe0,
55970 -0x04,0xf0,0xe4,0x90,0x9e,0x11,0xf0,0x80,0x15,0x90,0x9e,0x13,0xe0,0xc3,0x94,0xff,
55971 -0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x12,0xf0,0x90,0x9e,0x11,0xf0,0x90,0x9e,
55972 -0x10,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,0x30,0xe2,0x32,0x90,0x9e,
55973 -0x24,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x25,0xe0,
55974 -0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x26,0xe0,0xc3,
55975 -0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x24,0xf0,
55976 -0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x27,0xe0,0xc3,0x94,0xff,0x50,0x05,
55977 -0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x28,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,
55978 -0xf0,0xe4,0x80,0x11,0x90,0x9e,0x29,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,
55979 -0xe4,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x04,0xfd,0xe0,0x44,0x01,0xf0,
55980 -0x22,0x00,0x89,0xad,};
55981 -
55982 -// =================== v80 UMC A Cut COMMON 2011-12-14 =====================
55983 -u8 Rtl8192CUFwUMCACutImgArray[UMCACutImgArrayLength] = {
55984 -0xc1,0x88,0x02,0x00,0x50,0x00,0x00,0x00,0x12,0x14,0x16,0x08,0xd4,0x3e,0x01,0x00,
55985 -0x25,0x86,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
55986 -0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
55987 -0x00,0x00,0x00,0x02,0x48,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
55988 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
55989 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
55990 -0x00,0x00,0x00,0x02,0x5e,0xff,0x00,0x00,0x00,0x00,0x00,0xa1,0xd4,0x00,0x00,0x00,
55991 -0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
55992 -0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
55993 -0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
55994 -0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,0x00,0x18,0x22,0x21,0x20,0x18,
55995 -0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,0x20,0x08,0x00,0x20,0x22,0x21,
55996 -0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,0x22,0x20,0x18,0x08,0x00,0x20,
55997 -0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,0x00,0x30,0x31,0x2f,0x10,0x10,
55998 -0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,0x10,0x00,0x00,0x30,0x31,0x20,
55999 -0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,0x04,0x04,0x04,0x05,0x04,0x04,
56000 -0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,
56001 -0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x07,0x0a,0x0b,
56002 -0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,0x08,0x08,0x09,0x09,0x0a,0x0c,
56003 -0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,0x07,0x07,0x08,0x0a,0x04,0x04,
56004 -0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,0x08,0x0b,0x0d,0x0f,0x04,0x04,
56005 -0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,0x04,0x04,0x05,0x05,0x06,0x0a,
56006 -0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,0x00,0x00,0x00,0x00,0x00,0x00,
56007 -0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,0x21,0x27,0x29,0x2a,0x00,0x00,
56008 -0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x18,
56009 -0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,0x00,0xc0,0x00,0xd8,0x00,0x50,
56010 -0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,0x01,0xe0,0x02,0x30,0x01,0x2c,
56011 -0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,0x06,0x40,0x07,0xd0,0x00,0x02,
56012 -0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x24,0x00,0x30,
56013 -0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,0x00,0x50,0x00,0x64,0x00,0xa0,
56014 -0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,0x00,0xf0,0x01,0x68,0x01,0xf4,
56015 -0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,
56016 -0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,0x05,0x07,0x07,0x08,0x0b,0x12,
56017 -0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,
56018 -0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x20,0x1e,
56019 -0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
56020 -0xbb,0x01,0x0c,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,0x22,0x50,
56021 -0x06,0xe9,0x25,0x82,0xf8,0xe6,0x22,0xbb,0xfe,0x06,0xe9,0x25,0x82,0xf8,0xe2,0x22,
56022 -0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe4,0x93,0x22,0xbb,0x01,0x06,
56023 -0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,0xf3,0x22,0xf8,
56024 -0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0x22,
56025 -0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,0x82,0xc8,0xf2,
56026 -0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,
56027 -0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xe0,0xf5,
56028 -0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,0xfe,0x07,0xe3,
56029 -0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,0xf0,0x74,0x01,
56030 -0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,
56031 -0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,0x08,0xe6,0x22,
56032 -0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,0xe5,0x83,0x2a,
56033 -0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
56034 -0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,0x19,0x22,0xbb,
56035 -0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,0xe5,0x82,0x29,
56036 -0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x09,
56037 -0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,0x25,0x82,0xc8,
56038 -0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,0x49,0xfd,0xec,
56039 -0x48,0xfc,0x22,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0xa4,
56040 -0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,0xa3,0xe0,0xfa,
56041 -0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,0xf0,0xe5,0x82,
56042 -0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,0xa3,0xea,0xf0,
56043 -0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,
56044 -0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,
56045 -0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x50,0x2e,
56046 -0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,
56047 -0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,
56048 -0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,
56049 -0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x44,0x3d,0xe4,0x7e,0x01,0x93,0x60,
56050 -0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,
56051 -0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,
56052 -0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,
56053 -0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x4f,
56054 -0x00,0x41,0x9e,0xad,0x00,0x41,0x9e,0x61,0x80,0x41,0x9e,0x62,0x80,0x41,0x9e,0xaf,
56055 -0x00,0x00,0xf0,0x90,0x9e,0x6b,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,
56056 -0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x85,0xeb,0xf0,0xa3,0xe0,
56057 -0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x30,0x62,0xd0,0xd0,0x92,0xaf,0x22,
56058 -0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x86,0xf0,
56059 -0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,
56060 -0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x70,
56061 -0x14,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x02,0xf1,0x2b,0x22,0x8f,0x82,
56062 -0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0xe4,0xf5,0x71,0x7f,0x60,0x7e,0x01,0x80,
56063 -0xed,0x7d,0x01,0xaf,0x24,0xe1,0x2f,0xb1,0xa6,0xbf,0x01,0x0f,0x90,0x9e,0x51,0xe0,
56064 -0xff,0xe4,0xfd,0xf1,0xd0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x53,0x23,0xf0,0x43,
56065 -0x23,0x01,0x91,0xfd,0x91,0xfe,0x53,0x23,0xf0,0x43,0x23,0x02,0x22,0x22,0x22,0x22,
56066 -0x22,0x00,0x00,0x02,0x5f,0x91,0x02,0x5f,0x98,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
56067 -0x8b,0x1b,0x8a,0x1c,0x89,0x1d,0x90,0x9e,0x88,0x71,0x8b,0xab,0x1e,0xaa,0x1f,0xa9,
56068 -0x20,0x90,0x9e,0x8b,0x71,0x8b,0xaf,0x21,0x15,0x21,0xef,0x60,0x1b,0x90,0x9e,0x8b,
56069 -0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x24,0x62,0xff,0x90,0x9e,0x88,0xe4,0x75,0xf0,
56070 -0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x1b,0xaa,0x1c,0xa9,0x1d,0xd0,0xd0,
56071 -0x92,0xaf,0x22,0x90,0x06,0xa9,0xe0,0x90,0x9e,0x2f,0xf0,0xe0,0x54,0xc0,0x70,0x08,
56072 -0x53,0x26,0xfe,0x53,0x26,0xfd,0x91,0xd1,0x90,0x9e,0x2f,0xe0,0x30,0xe6,0x13,0x43,
56073 -0x26,0x01,0x90,0x9e,0x73,0xe0,0x64,0x02,0x60,0x04,0x91,0xd7,0x80,0x07,0x91,0x80,
56074 -0x80,0x03,0x53,0x26,0xfe,0x90,0x9e,0x2f,0xe0,0x30,0xe7,0x16,0x43,0x26,0x02,0xe4,
56075 -0x90,0x9e,0x86,0x91,0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x74,0x74,0x01,
56076 -0xf0,0x22,0x53,0x26,0xfd,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x04,0x1d,
56077 -0xe0,0x60,0x1a,0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,0xe0,0x44,
56078 -0x40,0xf0,0x90,0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,
56079 -0xd0,0x92,0xaf,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,
56080 -0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,
56081 -0x07,0x90,0x01,0xc4,0x74,0xd4,0xf0,0x74,0x45,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,
56082 -0x3c,0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,
56083 -0xf5,0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,
56084 -0x74,0x01,0xf0,0xe5,0x34,0x30,0xe1,0x09,0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x66,
56085 -0x09,0xe5,0x34,0x30,0xe2,0x38,0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,
56086 -0x30,0xe0,0x24,0x90,0x9e,0x86,0xe4,0xf0,0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,
56087 -0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x91,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,
56088 -0x06,0x92,0x74,0x01,0xf0,0x80,0x07,0x90,0x9e,0x71,0xe4,0xf0,0x91,0xd1,0xe5,0x34,
56089 -0x30,0xe3,0x38,0x90,0x01,0x3c,0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,
56090 -0x90,0x9e,0x86,0xe4,0xf0,0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,
56091 -0x7f,0x5c,0x7e,0x01,0x91,0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,
56092 -0x02,0xf0,0x80,0x07,0x90,0x9e,0x70,0xe4,0xf0,0x91,0xd1,0xe5,0x34,0x30,0xe4,0x09,
56093 -0x90,0x01,0x3c,0x74,0x10,0xf0,0x12,0x73,0x66,0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,
56094 -0x3c,0x74,0x20,0xf0,0x12,0x52,0x64,0xe5,0x35,0x30,0xe0,0x18,0x90,0x01,0x3d,0x74,
56095 -0x01,0xf0,0x90,0x01,0x2f,0xe0,0x44,0x7f,0xf0,0x90,0x00,0x83,0xe0,0xf5,0x24,0x12,
56096 -0x64,0xe3,0x91,0xd1,0xe5,0x35,0x30,0xe2,0x06,0x90,0x01,0x3d,0x74,0x04,0xf0,0xe5,
56097 -0x36,0x30,0xe0,0x06,0x90,0x01,0x3e,0x74,0x01,0xf0,0xe5,0x36,0x30,0xe1,0x06,0x90,
56098 -0x01,0x3e,0x74,0x02,0xf0,0x74,0xd4,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,
56099 -0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,
56100 -0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x7d,0x01,0x7f,0x0c,0x90,
56101 -0x9e,0xa6,0xed,0xf0,0x90,0x9e,0xa5,0xef,0xf0,0x54,0x0f,0xff,0xe5,0x23,0x54,0x0f,
56102 -0x6f,0x60,0x70,0x90,0x9e,0xa5,0xe0,0x30,0xe2,0x2a,0xe5,0x23,0x20,0xe2,0x05,0x7f,
56103 -0x01,0x12,0x63,0xf3,0xe5,0x23,0x30,0xe3,0x09,0x90,0x9e,0xa5,0xe0,0x20,0xe3,0x02,
56104 -0x80,0x52,0xe5,0x23,0x20,0xe3,0x4c,0x90,0x9e,0xa5,0xe0,0x30,0xe3,0x45,0xa3,0xe0,
56105 -0xff,0x02,0x5e,0x95,0xe5,0x23,0x54,0x0f,0xff,0xbf,0x0c,0x0f,0x90,0x9e,0xa5,0xe0,
56106 -0x20,0xe3,0x08,0x12,0x62,0xd7,0xef,0x60,0x2a,0xf1,0xb4,0xe5,0x23,0x54,0x0f,0xff,
56107 -0xbf,0x04,0x10,0x90,0x9e,0xa5,0xe0,0x20,0xe2,0x09,0x12,0x63,0x20,0xef,0x60,0x13,
56108 -0x12,0x61,0x3a,0xe5,0x23,0x54,0x0f,0xff,0xbf,0x02,0x08,0x12,0x63,0x83,0xef,0x60,
56109 -0x02,0x91,0xec,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x22,0xb4,0x01,0x05,
56110 -0x7f,0x01,0x12,0x5e,0x5c,0x53,0x23,0xf0,0x43,0x23,0x04,0x22,0xe0,0xff,0x7d,0x01,
56111 -0x90,0x9e,0x99,0xef,0xf0,0xa3,0xed,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x25,0x60,
56112 -0x05,0xe4,0xff,0x12,0x61,0x1f,0x90,0x9e,0x99,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9b,
56113 -0xe4,0xf0,0xa3,0x74,0x80,0xf0,0x90,0x9e,0x99,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,
56114 -0xf0,0x90,0x04,0x25,0xef,0xf0,0x90,0x9e,0x9a,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,
56115 -0x24,0x0f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,
56116 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9b,0xa3,0xe0,
56117 -0xff,0xfd,0x24,0x08,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,
56118 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,
56119 -0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf7,0xf0,0x90,0x9e,0x9b,0xe0,0xfe,0xa3,0xe0,
56120 -0xff,0x22,0x12,0x45,0xa6,0xbf,0x01,0x10,0x90,0x02,0x09,0xe0,0xff,0x7d,0x01,0x12,
56121 -0x47,0xd0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,
56122 -0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,
56123 -0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0x79,0xf0,0x74,0x48,0xa3,0xf0,
56124 -0x90,0x01,0x34,0xe0,0x55,0x28,0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,
56125 -0xa3,0xe0,0x55,0x2b,0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x41,0x17,0x90,0x01,0x34,
56126 -0x74,0x01,0xf0,0x85,0xd1,0x08,0x85,0xd2,0x09,0x85,0xd3,0x0a,0x85,0xd4,0x0b,0x85,
56127 -0xd5,0x0c,0x85,0xd6,0x0d,0x85,0xd7,0x0e,0x85,0xd9,0x0f,0xe5,0x0f,0x54,0x40,0xc3,
56128 -0x13,0xff,0xe5,0x0e,0x54,0x20,0x6f,0x70,0x02,0x21,0xc9,0xe5,0x0f,0x30,0xe5,0x02,
56129 -0x21,0xc9,0xe5,0x0d,0x54,0x3f,0xf5,0x4d,0xe5,0x08,0x54,0x3f,0xf5,0x4e,0xe5,0x0c,
56130 -0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,
56131 -0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,
56132 -0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4e,
56133 -0xd3,0x94,0x04,0x40,0x03,0x75,0x4e,0x04,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,
56134 -0x12,0x43,0x5f,0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,
56135 -0xe5,0x0e,0x54,0x1f,0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,
56136 -0x00,0x12,0x43,0x5f,0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,
56137 -0xf0,0xe5,0x0f,0x20,0xe6,0x24,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,
56138 -0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,
56139 -0x30,0xe7,0x36,0xaf,0x4d,0x12,0x5b,0x68,0x80,0x2f,0xe5,0x0e,0x54,0x1f,0xff,0xe5,
56140 -0x4d,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
56141 -0x42,0x81,0xe5,0x0a,0x30,0xe7,0x12,0xe5,0x0a,0x54,0x7f,0xfd,0xe5,0x0e,0x54,0x1f,
56142 -0xf5,0x53,0xab,0x4e,0xaf,0x4d,0x12,0x5b,0x05,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,
56143 -0x80,0x45,0x90,0x9e,0x73,0xe0,0x60,0x37,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,
56144 -0x74,0x04,0xf0,0x71,0xc4,0xef,0x64,0x01,0x70,0x2d,0x90,0x9e,0x69,0xe0,0xf5,0x44,
56145 -0x75,0x45,0x00,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x30,0x62,0x90,0x01,0x5b,
56146 -0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x9e,0x71,0xf0,0x80,0x08,0x71,
56147 -0xc4,0xbf,0x01,0x03,0x12,0x44,0xd1,0xe5,0x2c,0x30,0xe1,0x21,0x90,0x01,0x34,0x74,
56148 -0x02,0xf0,0x85,0xd1,0x13,0x85,0xd2,0x14,0x85,0xd3,0x15,0x85,0xd4,0x16,0x85,0xd5,
56149 -0x17,0x85,0xd6,0x18,0x85,0xd7,0x19,0x85,0xd9,0x1a,0x12,0x5c,0x46,0xe5,0x2c,0x30,
56150 -0xe3,0x06,0x90,0x01,0x34,0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,
56151 -0x74,0x10,0xf0,0x43,0x12,0x10,0xe5,0x2c,0x30,0xe5,0x24,0x90,0x01,0xcf,0xe0,0x30,
56152 -0xe5,0x1d,0xe0,0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,
56153 -0xe8,0x00,0xd1,0xdb,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x71,0xdb,0x80,0xfe,0xe5,
56154 -0x2c,0x30,0xe6,0x06,0x90,0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe0,0x12,0x90,
56155 -0x9e,0x5f,0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,0x12,0x65,0xa3,0x90,0x9e,0x5f,0xe4,
56156 -0xf0,0xe5,0x2e,0x30,0xe1,0x3b,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x12,0x40,0x90,
56157 -0x01,0x02,0xe0,0x54,0x03,0x64,0x01,0x70,0x28,0x90,0x01,0x37,0xe0,0x30,0xe0,0x0a,
56158 -0x74,0x01,0xf0,0x90,0x9e,0x4f,0xe4,0xf0,0x80,0x17,0x90,0x9e,0x4f,0xe0,0x04,0xf0,
56159 -0xe0,0xc3,0x94,0x0a,0x40,0x0b,0xe4,0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x02,0x11,
56160 -0x62,0xe5,0x2e,0x30,0xe2,0x09,0x90,0x01,0x36,0x74,0x04,0xf0,0x12,0x65,0x3b,0xe5,
56161 -0x2e,0x30,0xe3,0x28,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,0x22,0x64,0x01,0x70,0x1c,
56162 -0xe5,0x25,0x60,0x18,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,
56163 -0x9e,0x86,0xe4,0x12,0x44,0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,
56164 -0x2b,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x22,0xb4,0x01,0x20,0xe5,0x25,0x60,0x1c,
56165 -0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x74,0xe4,0xf0,
56166 -0x53,0x26,0xfd,0xe5,0x26,0x54,0x07,0x70,0x03,0x12,0x44,0xd1,0xe5,0x2e,0x30,0xe5,
56167 -0x1f,0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x22,0xb4,0x01,0x14,0xe5,0x25,0x60,0x10,
56168 -0x90,0x9e,0x73,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xd7,0x80,0x03,0x12,0x44,0x80,
56169 -0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x22,0xb4,0x01,0x10,
56170 -0xe5,0x25,0x60,0x0c,0x53,0x26,0xfe,0xe5,0x26,0x54,0x07,0x70,0x03,0x12,0x44,0xd1,
56171 -0xe5,0x2f,0x30,0xe1,0x09,0x90,0x01,0x37,0x74,0x02,0xf0,0x12,0x61,0x92,0x74,0x79,
56172 -0x04,0x90,0x01,0xc4,0xf0,0x74,0x48,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,
56173 -0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,
56174 -0xf0,0xd0,0xe0,0x32,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,0x02,
56175 -0x7f,0x00,0x22,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,
56176 -0xc0,0xd0,0x7f,0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,
56177 -0xc0,0xd0,0x90,0x9e,0xac,0xed,0xf0,0x90,0x9e,0xab,0xef,0xf0,0xd3,0x94,0x07,0x50,
56178 -0x63,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
56179 -0x90,0x00,0x47,0xe0,0x5f,0xf0,0x71,0xdb,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,
56180 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0x71,
56181 -0xdb,0x90,0x9e,0xac,0xe0,0x60,0x16,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,0x07,
56182 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,0x66,0x90,0x9e,0xab,
56183 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,
56184 -0x00,0x45,0x80,0x6b,0x90,0x9e,0xab,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,
56185 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0x71,0xd3,0x90,0x9e,0xab,
56186 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,
56187 -0x43,0xe0,0x4f,0xf0,0x71,0xdb,0x90,0x9e,0xac,0xe0,0x60,0x1b,0x90,0x9e,0xab,0xe0,
56188 -0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xff,
56189 -0x90,0x00,0x42,0xe0,0x4f,0x80,0x1a,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,0x07,
56190 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x42,0xe0,
56191 -0x5f,0xf0,0x71,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0xf0,0x90,0x00,0x45,0xe0,0x54,0xfe,
56192 -0xfd,0x7f,0x45,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,0x00,0xed,
56193 -0xf0,0x71,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,0x66,0x24,
56194 -0x02,0x60,0x02,0xa1,0x9f,0x90,0x9e,0x1a,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,0x44,
56195 -0x0c,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,0x47,0x91,
56196 -0xe3,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,0x9e,0x1a,
56197 -0xf0,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,
56198 -0x08,0x12,0x2b,0x08,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,
56199 -0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,0x10,
56200 -0xfd,0x7f,0x46,0x80,0x38,0x90,0x9e,0x1a,0x74,0x01,0xf0,0x90,0x9e,0x20,0x12,0x43,
56201 -0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x90,0x00,
56202 -0x45,0xe0,0x44,0x20,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,
56203 -0x7f,0x45,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x91,0xe3,0x22,
56204 -0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x1c,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,
56205 -0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1b,0xf0,0x12,0x24,0x62,0x25,0xe0,0x25,0xe0,0x90,
56206 -0x9e,0x1f,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,
56207 -0x9e,0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,
56208 -0x9e,0x2d,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x1b,
56209 -0xe0,0xff,0x12,0x52,0x12,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,0x1c,
56210 -0xe0,0x70,0x02,0xc1,0xa7,0x90,0x9e,0x1b,0xe0,0x70,0x02,0xc1,0xa7,0x90,0x9e,0x1f,
56211 -0xe0,0x70,0x02,0xc1,0xa7,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,
56212 -0x9e,0x2e,0x74,0x01,0xf0,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x91,0xda,0x90,
56213 -0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x91,0xe3,0x90,0x9e,0x14,0xe0,0x60,0x15,
56214 -0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,
56215 -0x12,0x2b,0x08,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,
56216 -0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,
56217 -0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,
56218 -0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,
56219 -0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,
56220 -0xe4,0xff,0x12,0x31,0xb7,0x80,0x2b,0x90,0x9e,0x1c,0xe0,0x70,0x2d,0x90,0x9e,0x2e,
56221 -0x91,0xd9,0x90,0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x91,0xe3,0x90,0x05,0x22,
56222 -0xe4,0xf0,0xa2,0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,
56223 -0x31,0x49,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x22,0x90,0x01,0x30,0xe4,0xf0,
56224 -0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
56225 -0xfd,0x7f,0x50,0x91,0xe3,0xe4,0xfd,0x7f,0x51,0x91,0xe3,0xe4,0xfd,0x7f,0x52,0x91,
56226 -0xe3,0xe4,0xfd,0x7f,0x53,0x81,0xe3,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x90,0x00,0x02,
56227 -0x12,0x42,0x20,0x90,0x9e,0x1d,0xf0,0xe0,0x30,0xe0,0x4b,0x90,0x9e,0x14,0x74,0x01,
56228 -0xf0,0x7f,0x80,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0x16,0x12,0x25,0x08,0xab,0x59,
56229 -0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xe4,0xfc,0xfd,0xfe,0x78,
56230 -0x1a,0x12,0x24,0xf5,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x16,0x12,
56231 -0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x25,0x08,0x90,
56232 -0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x14,0xf0,0x7f,0x80,0x7e,0x08,0x12,
56233 -0x22,0x65,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,0x25,0x08,
56234 -0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,
56235 -0x12,0x2b,0x08,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,0x91,0xe3,
56236 -0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,
56237 -0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,0x47,0x91,0xe3,0x90,0x00,
56238 -0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x46,0xe0,0x54,0xef,0xfd,
56239 -0x7f,0x46,0x91,0xe3,0xe4,0x90,0x9e,0x1a,0xf0,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,
56240 -0xb0,0xf0,0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x91,0xe3,0x90,0x9e,0xb0,
56241 -0xe0,0x44,0xb0,0xfd,0x7f,0x49,0x81,0xe3,0x75,0x28,0x33,0xe4,0xf5,0x29,0x75,0x2a,
56242 -0x07,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,0xa3,0xe5,0x2a,
56243 -0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,
56244 -0x01,0x38,0xe5,0x30,0xf0,0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0xe4,0x90,
56245 -0x9e,0x31,0xf0,0xa3,0xf0,0x75,0x8e,0x02,0x12,0x77,0x64,0x12,0x5e,0xde,0x90,0x9e,
56246 -0x5e,0xef,0xf0,0x12,0x5e,0xeb,0x90,0x9e,0x60,0xef,0xf0,0xe4,0xf5,0x12,0x12,0x6e,
56247 -0xdf,0x12,0x77,0xdb,0x12,0x5f,0x9f,0x12,0x2e,0x01,0x12,0x77,0xd7,0x12,0x4f,0xf8,
56248 -0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,
56249 -0xf0,0xa3,0xe4,0xf0,0x12,0x5e,0xf8,0x11,0x16,0x12,0x44,0xff,0x12,0x7d,0x9b,0x90,
56250 -0x9e,0x33,0xe5,0xd9,0xf0,0x12,0x5e,0xaf,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,
56251 -0xf0,0x12,0x4b,0xdb,0x75,0xe8,0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x9e,0x31,0xe0,
56252 -0x64,0x01,0xf0,0x24,0x2e,0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xe5,0x12,0x30,
56253 -0xe4,0x09,0xc2,0xaf,0x53,0x12,0xef,0xd2,0xaf,0x71,0x1a,0xe5,0x12,0x30,0xe6,0x16,
56254 -0xc2,0xaf,0x53,0x12,0xbf,0xd2,0xaf,0x12,0x68,0x8d,0x90,0x9e,0x1e,0xe0,0xff,0x60,
56255 -0x03,0xb4,0x01,0x02,0x31,0x10,0x90,0x9e,0x1e,0xe0,0x70,0x03,0x12,0x7d,0xf9,0x11,
56256 -0xe3,0x80,0xb9,0x90,0x06,0x34,0xe0,0x60,0x26,0x14,0x70,0x1b,0x7b,0x01,0x7a,0x06,
56257 -0x79,0x35,0x7f,0xf9,0x7e,0x01,0x12,0x77,0x75,0xbf,0x01,0x09,0x90,0x06,0x35,0xe0,
56258 -0x54,0x0f,0xf0,0x80,0x05,0x80,0x00,0x02,0x77,0x56,0xe4,0x90,0x06,0x34,0xf0,0x22,
56259 -0x90,0x9e,0x15,0xe0,0xc3,0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0x21,0xc8,0x90,0x9e,
56260 -0x15,0xe0,0x64,0x14,0x60,0x02,0x21,0xc8,0x90,0x9e,0x24,0xe0,0x70,0x25,0x90,0x9e,
56261 -0x27,0xe0,0x70,0x1f,0x90,0x9e,0x25,0xe0,0x70,0x19,0x90,0x9e,0x28,0xe0,0x70,0x13,
56262 -0x90,0x9e,0x26,0xe0,0x70,0x0d,0x90,0x9e,0x29,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,
56263 -0x54,0xfe,0xf0,0x90,0x9e,0x24,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x25,0xe0,0x90,
56264 -0x04,0x45,0xf0,0x90,0x9e,0x26,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,
56265 -0x27,0xe0,0x90,0x04,0x48,0xf0,0x90,0x9e,0x28,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,
56266 -0x29,0xe0,0x90,0x04,0x4a,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x10,0xe0,0x90,0x04,0x4c,
56267 -0xf0,0x90,0x9e,0x11,0xe0,0x90,0x04,0x4d,0xf0,0x90,0x9e,0x12,0xe0,0x90,0x04,0x4e,
56268 -0xf0,0x90,0x9e,0x13,0xe0,0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x15,0xf0,0x90,0x9e,
56269 -0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x24,0xf0,0xa3,0xf0,
56270 -0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x34,0xf0,
56271 -0x90,0x05,0x61,0xe0,0x90,0x9e,0x35,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x36,0xf0,
56272 -0x90,0x05,0x63,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0x2d,0xe0,0xff,0x90,0x9e,0x37,
56273 -0xe0,0xfe,0xd3,0x9f,0x50,0x0b,0x90,0x9e,0x2d,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,
56274 -0x10,0x90,0x9e,0x1b,0xe0,0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x1f,0xe0,0xff,0x51,
56275 -0x12,0x22,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,
56276 -0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,
56277 -0x2d,0xf0,0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x2b,0xe0,0xd3,0x9e,0x40,0x1e,0xe0,
56278 -0x2f,0xf0,0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,0xe0,0xb4,0xff,0x03,0xe4,0xf0,
56279 -0x22,0x90,0x9e,0x2d,0x80,0x03,0x90,0x9e,0x2c,0xe0,0x04,0xf0,0x22,0x90,0x9e,0x2b,
56280 -0xe0,0x2f,0xf0,0x22,0x90,0x9e,0x1c,0xe0,0x64,0x01,0x60,0x02,0x61,0x19,0x90,0x00,
56281 -0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x90,0x9e,0x2e,0xe0,0x70,0x32,
56282 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
56283 -0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,
56284 -0xf0,0x90,0x9e,0x1b,0xe0,0xff,0x51,0x12,0x90,0x9e,0x2e,0x74,0x01,0x12,0x4c,0xd9,
56285 -0x80,0x40,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x70,0x38,0x90,0x9e,0x1f,0xe0,0xff,0x51,
56286 -0x12,0xe4,0x90,0x9e,0x2e,0xf0,0x90,0x00,0x45,0xe0,0x44,0x01,0xfd,0x7f,0x45,0x12,
56287 -0x4c,0xe3,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,
56288 -0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x08,0x12,0x2b,0x08,0x80,0x05,0x90,0x05,0x22,
56289 -0xe4,0xf0,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,0x84,
56290 -0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,0x86,
56291 -0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,0x01,0xcc,0xe0,0x54,0x0f,
56292 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfd,0x70,0x02,0x81,0x5b,0x90,0x9e,0xad,
56293 -0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
56294 -0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,0x81,0x54,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,
56295 -0x90,0x01,0xd0,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x35,0xf0,0x75,0x1e,0x01,0x75,0x1f,
56296 -0x9e,0x75,0x20,0x35,0x75,0x21,0x01,0x7b,0x01,0x7a,0x9e,0x79,0x36,0x12,0x45,0x09,
56297 -0x90,0x9e,0x36,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x90,0x9e,0xad,0x30,0xe0,
56298 -0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,
56299 -0x90,0x9e,0xad,0xe0,0x75,0xf0,0x02,0x90,0x00,0x89,0x12,0x43,0x5f,0xe0,0x90,0x9e,
56300 -0x38,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,
56301 -0x90,0x9e,0x39,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,
56302 -0x5f,0xe0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,
56303 -0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3b,0xf0,0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,
56304 -0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,
56305 -0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x38,0xf0,0x90,0x9e,0xad,0xe0,0x75,
56306 -0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x39,0xf0,0xef,0x54,0x7f,
56307 -0xff,0x7b,0x01,0x7a,0x9e,0x79,0x37,0x91,0x5c,0x90,0x9e,0x34,0xe0,0xff,0x90,0x9e,
56308 -0xad,0xe0,0xfe,0x74,0x01,0xa8,0x06,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,
56309 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0xad,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
56310 -0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,0xf0,0x90,0x9e,0xad,0xe0,0x04,0xf0,0xe0,0x54,
56311 -0x03,0xf0,0x61,0x24,0x90,0x01,0xc6,0xe0,0x44,0x02,0xf0,0x22,0x90,0x9e,0x3c,0x12,
56312 -0x43,0x8b,0xef,0x12,0x43,0x94,0x54,0x97,0x01,0x54,0xa0,0x02,0x54,0xbb,0x03,0x54,
56313 -0xc4,0x05,0x54,0xcd,0x06,0x55,0x1b,0x07,0x54,0xd5,0x09,0x54,0xde,0x0c,0x54,0xe7,
56314 -0x0d,0x54,0xf0,0x0e,0x54,0xf9,0x1b,0x55,0x02,0x1c,0x55,0x0b,0x2c,0x54,0xa9,0x2d,
56315 -0x54,0xb2,0x2e,0x00,0x00,0x55,0x14,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x61,0x69,
56316 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0x02,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
56317 -0x71,0x08,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0x50,0x90,0x9e,0x3c,0x12,0x43,
56318 -0x6b,0x02,0x71,0x7e,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0xb2,0x90,0x9e,0x3c,
56319 -0x12,0x43,0x6b,0x80,0x47,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0xc6,0x90,0x9e,
56320 -0x3c,0x12,0x43,0x6b,0x02,0x4d,0xa0,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x7d,0x68,
56321 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x4f,0x07,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
56322 -0x70,0xfa,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0xe1,0x90,0x9e,0x3c,0x12,0x43,
56323 -0x6b,0x02,0x76,0x36,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x90,0x00,0x04,0x12,
56324 -0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,0xfd,0xaf,0x06,
56325 -0x90,0x9e,0x3f,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x8b,0x90,0x9e,0x41,0x12,
56326 -0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,0x54,0x0f,0x90,0x9e,0x44,
56327 -0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,0x13,0x54,0x03,0x90,0x9e,
56328 -0x45,0xf0,0x90,0x9e,0x3f,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,0x46,0x12,0x43,0x5f,
56329 -0xad,0x82,0xac,0x83,0x90,0x9e,0x46,0xec,0xf0,0xa3,0xed,0xf0,0xef,0x75,0xf0,0x09,
56330 -0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,0x12,0x43,0x8b,0x90,
56331 -0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0x0f,0xff,0x90,0x9e,
56332 -0x48,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,
56333 -0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0x90,0x00,0x01,0xef,0x12,
56334 -0x42,0x5f,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,
56335 -0x9e,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,0x12,0x24,0x62,
56336 -0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,0x90,0x9e,0x3f,0xe0,0xff,
56337 -0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,0x9e,0x40,0xe0,0xfe,
56338 -0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,0x75,0xf0,0x09,0xef,
56339 -0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x45,0xe0,0xfe,0x75,0xf0,
56340 -0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,0x59,0xef,0x25,0xe0,0x24,
56341 -0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x5b,0x8f,0x5c,0xe5,0x59,0x75,0xf0,
56342 -0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x5d,0x01,0xf5,0x5e,0x89,0x5f,
56343 -0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x46,0x12,0x43,0x5f,0xaf,0x82,0x85,0x83,0x60,
56344 -0x8f,0x61,0xe5,0x59,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0x75,
56345 -0x62,0x01,0xf5,0x63,0x89,0x64,0x74,0x82,0x25,0x59,0xf5,0x82,0xe4,0x34,0x95,0xf5,
56346 -0x83,0xe0,0x12,0x43,0x94,0x56,0xaa,0x00,0x56,0xbf,0x01,0x56,0xd4,0x02,0x56,0xe9,
56347 -0x03,0x57,0x13,0x04,0x57,0x28,0x05,0x57,0x3d,0x06,0x57,0x64,0x0c,0x57,0x92,0x0d,
56348 -0x57,0xbf,0x0e,0x57,0xec,0x0f,0x00,0x00,0x58,0x20,0xe5,0x59,0x25,0xe0,0x24,0xc6,
56349 -0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,0x80,0x3c,0xe5,
56350 -0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,
56351 -0x74,0x10,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
56352 -0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,
56353 -0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,0x59,0x25,0xe0,
56354 -0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0x8f,0xf0,
56355 -0x02,0x58,0x20,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
56356 -0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,
56357 -0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,0x59,0x25,
56358 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0x74,0x0d,0xf0,
56359 -0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,
56360 -0xf0,0x02,0x58,0x20,0x90,0x04,0x47,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,
56361 -0x4d,0x90,0x04,0x46,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,
56362 -0x5f,0x90,0x04,0x45,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x44,0x02,
56363 -0x58,0x17,0x90,0x04,0x4b,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,
56364 -0x04,0x4a,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,
56365 -0x04,0x49,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,
56366 -0x04,0x4f,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x4e,0xe0,
56367 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x4d,0xe0,
56368 -0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,
56369 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x5d,0xaa,
56370 -0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x5c,0x82,
56371 -0x85,0x5b,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,0xf0,
56372 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x24,0x62,0xff,
56373 -0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x24,0x62,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
56374 -0x12,0x42,0x4d,0xab,0x5d,0xe5,0x5f,0x24,0x01,0xf9,0xe4,0x35,0x5e,0xfa,0xc0,0x03,
56375 -0xc0,0x02,0xc0,0x01,0x12,0x24,0x62,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x90,0x00,
56376 -0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,0x5c,
56377 -0x82,0x85,0x5b,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,
56378 -0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,
56379 -0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,0xa3,0xe0,0xfe,0xef,
56380 -0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,
56381 -0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x5a,0x0b,0x74,0x01,0x7e,
56382 -0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,
56383 -0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,
56384 -0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x5d,0x15,0x5a,0xe5,0x5a,0xc3,0x94,
56385 -0x00,0x50,0xca,0x80,0x56,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
56386 -0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x5a,0x0f,0x74,0x01,0x7e,0x00,
56387 -0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,0x25,
56388 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,
56389 -0x4e,0x60,0x08,0x90,0x9e,0x4b,0xe5,0x5a,0xf0,0x80,0x10,0x15,0x5a,0xe5,0x5a,0xc3,
56390 -0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x4b,0xf0,0xe5,0x59,0x25,0xe0,0x24,
56391 -0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0xe4,
56392 -0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
56393 -0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
56394 -0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x4c,0xe5,0x5a,0xf0,0x80,
56395 -0x5b,0x05,0x5a,0xe5,0x5a,0xb4,0x10,0xca,0x80,0x52,0xe5,0x59,0x25,0xe0,0x24,0x02,
56396 -0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x39,0xe4,0xf5,
56397 -0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
56398 -0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,
56399 -0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x0a,0x05,0x5a,
56400 -0xe5,0x5a,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x4c,0xf0,0x90,0x9e,0x4b,0xe0,
56401 -0xff,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xef,0xf0,0x90,0x9e,
56402 -0x4c,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x49,0x12,0x43,0x5f,0xee,0xf0,
56403 -0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x05,
56404 -0x90,0x9e,0x4b,0x51,0x6f,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
56405 -0xe0,0xff,0x90,0x9e,0x4c,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x02,0x51,0x6f,0x90,0x9e,
56406 -0x4b,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,0x22,0xef,
56407 -0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,0x94,0x03,
56408 -0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,0x22,0xe0,
56409 -0xfd,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xed,0xf0,0xaf,0x59,
56410 -0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,0x50,0x0e,0x74,0x84,0x2f,
56411 -0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,0x74,0xa6,0x2f,0xf5,0x82,
56412 -0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x75,0xef,0xf0,0x24,0xa6,0xf5,0x82,
56413 -0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x76,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x75,
56414 -0x7d,0x02,0x51,0xc9,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
56415 -0x90,0x9e,0x94,0x12,0x43,0x8b,0x90,0x9e,0x97,0xe0,0x54,0xf0,0x44,0x06,0xff,0xf0,
56416 -0xed,0x54,0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9e,0x94,0x12,
56417 -0x43,0x6b,0x90,0x9e,0x91,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x97,0x71,0xd4,
56418 -0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x50,0x8d,0x51,0xe5,0x51,0x54,0x1f,0xf5,0x56,0x74,
56419 -0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,0x54,0x90,0x04,0xfd,0xe0,
56420 -0xb4,0x01,0x05,0x75,0x57,0x03,0x80,0x03,0x75,0x57,0x01,0xeb,0xc3,0x95,0x57,0x40,
56421 -0x04,0xaf,0x50,0x80,0x33,0xe5,0x54,0x25,0x53,0xf5,0x55,0xe5,0x56,0x90,0x41,0xd6,
56422 -0x93,0xff,0xe5,0x55,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,0x50,0xf5,0x82,0xe4,0x34,
56423 -0x94,0xf5,0x83,0xe4,0xf0,0xad,0x51,0xaf,0x50,0x41,0x80,0x25,0x50,0xf5,0x82,0xe4,
56424 -0x34,0x94,0xf5,0x83,0xe5,0x55,0xf0,0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,0x96,
56425 -0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,
56426 -0xe0,0x54,0x1f,0xf5,0x58,0xd3,0x9f,0x40,0x02,0x8f,0x58,0xe5,0x58,0x25,0xe0,0x24,
56427 -0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,
56428 -0x58,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,
56429 -0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,
56430 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x58,0x51,
56431 -0x80,0xaf,0x58,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x8e,0x12,0x43,
56432 -0x8b,0x90,0x9e,0xaf,0xe0,0xff,0x04,0xf0,0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x7f,
56433 -0xaf,0x7e,0x01,0x91,0x67,0xef,0x60,0x49,0x90,0x9e,0x8e,0x12,0x43,0x6b,0x8b,0x1e,
56434 -0x8a,0x1f,0x89,0x20,0x75,0x21,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x45,0x09,
56435 -0x90,0x9e,0x91,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x90,0x9e,0x8e,0x12,
56436 -0x43,0x6b,0x12,0x24,0x62,0xff,0xc4,0x54,0x0f,0xf5,0x21,0x7b,0x01,0x7a,0x01,0x79,
56437 -0xa2,0x12,0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,
56438 -0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x2f,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,
56439 -0x0f,0x44,0x80,0xf0,0x7b,0x00,0x7a,0x00,0x79,0x13,0x90,0x9e,0x91,0x12,0x43,0x8b,
56440 -0x0b,0x7a,0x9e,0x79,0x2f,0x61,0xd4,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
56441 -0x9d,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x9d,0xe0,0xfe,
56442 -0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,0xa0,0xe0,0x94,0xe8,
56443 -0x90,0x9e,0x9f,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x7f,
56444 -0x00,0x80,0x15,0x90,0x9e,0x9f,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x0a,0x7e,
56445 -0x00,0x12,0x32,0x15,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xac,0x07,0xec,
56446 -0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
56447 -0x80,0x0b,0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,
56448 -0x64,0xe5,0x64,0x54,0x1f,0xff,0x90,0x9e,0x40,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,
56449 -0x49,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x42,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,
56450 -0x12,0x43,0x5f,0xe0,0xfe,0x90,0x9e,0x43,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
56451 -0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x44,0xcb,0xf0,0xa3,0xeb,
56452 -0xf0,0xec,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,
56453 -0xe0,0x90,0x9e,0x46,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,
56454 -0x43,0xe0,0x90,0x9e,0x40,0xf0,0xf5,0x64,0xed,0x70,0x02,0xc1,0x13,0x90,0x9e,0x41,
56455 -0xed,0xf0,0xe5,0x64,0x30,0xe6,0x0a,0x90,0x9e,0x40,0xe0,0xf5,0x64,0xa3,0xe0,0x14,
56456 -0xf0,0x90,0x9e,0x41,0xe0,0x70,0x02,0xc1,0x13,0x90,0x9e,0x40,0xe0,0xff,0xd3,0x94,
56457 -0x00,0x50,0x02,0xc1,0x13,0xe4,0x90,0x9e,0x3f,0xf0,0xef,0x14,0x90,0x9e,0x3e,0xf0,
56458 -0x90,0x9e,0x42,0xe0,0xfd,0x90,0x9e,0x3e,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,
56459 -0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
56460 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x46,0xe0,0x5e,0xfe,0xa3,0xe0,
56461 -0x5f,0x4e,0x70,0x27,0x90,0x9e,0x3e,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,
56462 -0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
56463 -0x9e,0x44,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x3e,0xe0,0xf5,
56464 -0x64,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,0x3f,0xe0,0x6f,0x60,
56465 -0x08,0x90,0x9e,0x3e,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,
56466 -0x3f,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x3e,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x42,
56467 -0xe0,0xf5,0x64,0xe5,0x64,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
56468 -0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x64,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
56469 -0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
56470 -0x13,0xff,0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
56471 -0xa3,0xef,0xf0,0xaf,0x04,0xad,0x64,0x51,0x80,0xaf,0x64,0x22,0x8f,0x77,0x12,0x45,
56472 -0xa6,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x52,0x12,0x47,0xcc,0xe5,0x77,0x60,0x10,
56473 -0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,
56474 -0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,
56475 -0x1f,0x74,0x20,0xf0,0x22,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,
56476 -0x22,0xb4,0x01,0x04,0xe4,0xff,0xd1,0x5c,0x53,0x23,0xf0,0x43,0x23,0x0c,0x22,0x90,
56477 -0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,0xa3,
56478 -0xf0,0xa3,0xf0,0xfd,0x7f,0x54,0x12,0x4c,0xe3,0x7d,0xff,0x7f,0x55,0x12,0x4c,0xe3,
56479 -0x7d,0xff,0x7f,0x56,0x12,0x4c,0xe3,0x7d,0xff,0x7f,0x57,0x02,0x4c,0xe3,0x90,0x00,
56480 -0x02,0xe0,0x54,0xe0,0x7f,0x01,0x60,0x02,0x7f,0x00,0x22,0x90,0x00,0xf3,0xe0,0x7f,
56481 -0x00,0x30,0xe3,0x03,0x7f,0x01,0x22,0x22,0x90,0x01,0x64,0x74,0xa0,0xf0,0x22,0xc0,
56482 -0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,
56483 -0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,
56484 -0xff,0xf0,0x74,0x5e,0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,0x90,0x00,
56485 -0x55,0xe0,0x5f,0xf5,0x3d,0xe5,0x3d,0x30,0xe6,0x18,0x74,0x40,0xf0,0x90,0x9e,0x1d,
56486 -0xe0,0x54,0x03,0xff,0xbf,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0x60,0x05,0x7f,0x01,0x12,
56487 -0x4c,0xf8,0xe5,0x3d,0x30,0xe7,0x15,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x9e,0x1d,
56488 -0xe0,0x54,0x03,0xff,0xbf,0x03,0x05,0x7f,0x02,0x12,0x4c,0xf8,0x90,0x01,0xc4,0x74,
56489 -0xff,0xf0,0x74,0x5e,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,
56490 -0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,
56491 -0x32,0x8f,0x6b,0x8c,0x6c,0x8d,0x6d,0x22,0x8f,0x6e,0x8c,0x6f,0x8d,0x70,0x22,0xe4,
56492 -0xf5,0x22,0xf5,0x26,0xf5,0x25,0x75,0x24,0x0c,0x75,0x23,0x0c,0x90,0x9e,0x73,0xf0,
56493 -0x90,0x9e,0x71,0xf0,0x90,0x9e,0x70,0xf0,0x90,0x9e,0x72,0x04,0xf0,0x90,0x9e,0x64,
56494 -0xf0,0xe4,0x90,0x9e,0x74,0xf0,0x90,0x9e,0x66,0xf0,0x90,0x9e,0x6e,0x74,0x07,0xf0,
56495 -0xe4,0x90,0x9e,0x65,0xf0,0x90,0x9e,0x6c,0xf0,0xa3,0x74,0x02,0xf0,0x90,0x9e,0x6a,
56496 -0x14,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x69,0x74,0x14,0xf0,0x90,0x9e,0x6f,0x74,
56497 -0x05,0xf0,0xe4,0x90,0x9e,0x68,0xf0,0x90,0x9e,0x63,0xf0,0x90,0x9e,0x5f,0xf0,0x22,
56498 -0xe4,0x90,0x9e,0x74,0xf0,0x90,0x9e,0x65,0xf0,0xf5,0x26,0x22,0x8b,0x59,0x8a,0x5a,
56499 -0x89,0x5b,0x11,0x00,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x12,0x24,0x62,0xf5,0x25,0x14,
56500 -0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,0x40,0x7f,0x01,0x80,0x3a,
56501 -0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0xe4,0xff,0x11,
56502 -0x6d,0x80,0x27,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,
56503 -0x7f,0x01,0x11,0x6d,0x1f,0x80,0x13,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,
56504 -0x12,0x42,0x20,0xfd,0x7f,0x02,0x11,0x6d,0xe4,0xff,0x11,0x98,0x22,0xef,0x24,0xfe,
56505 -0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x72,0x74,0x01,0xf0,0x80,0x16,0xed,0x70,0x0a,
56506 -0x90,0x9e,0x6f,0xe0,0x90,0x9e,0x72,0xf0,0x80,0x05,0x90,0x9e,0x72,0xed,0xf0,0x90,
56507 -0x9e,0x72,0xe0,0x90,0x9e,0x64,0xf0,0x22,0xef,0x64,0x01,0x70,0x2f,0x7d,0x7c,0x7f,
56508 -0x02,0x12,0x31,0x2c,0x7d,0x02,0x7f,0x03,0x12,0x31,0x2c,0x90,0x01,0x57,0xe4,0xf0,
56509 -0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x47,0x2b,0xe4,0xff,0x31,0x1f,0x90,0x06,0x04,
56510 -0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,
56511 -0x7c,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x31,0x9d,0x7d,0x02,0x7f,0x03,
56512 -0x12,0x31,0x9d,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,
56513 -0xf0,0x90,0x9e,0x6c,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x22,0x30,0xe0,0x19,
56514 -0x90,0x9e,0x66,0xe0,0x70,0x18,0xe0,0x04,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x04,
56515 -0x50,0x0c,0x7d,0x01,0x7f,0x04,0x02,0x47,0x2f,0xe4,0x90,0x9e,0x66,0xf0,0x22,0xef,
56516 -0x60,0x0b,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x60,
56517 -0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x77,0xe4,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,
56518 -0x90,0x05,0x22,0x74,0xff,0xf0,0x31,0xc3,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,
56519 -0xf0,0x7d,0x02,0x7f,0x03,0x12,0x31,0x9d,0xe5,0x25,0x60,0x04,0x7f,0x01,0x31,0x1f,
56520 -0x51,0x04,0x53,0x23,0xf0,0x43,0x23,0x02,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
56521 -0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x73,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,
56522 -0x90,0x9e,0x63,0xf0,0x12,0x24,0x62,0x65,0x25,0x60,0x02,0x11,0x0c,0xd0,0xd0,0x92,
56523 -0xaf,0x22,0x7d,0x02,0x7f,0x03,0x12,0x31,0x2c,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,
56524 -0x80,0x20,0x90,0x9e,0x73,0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0d,0xe5,0x23,
56525 -0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x2f,0xe4,0xff,
56526 -0x31,0x1f,0x22,0xe4,0x90,0x9e,0xa9,0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,
56527 -0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,
56528 -0x90,0x9e,0xaa,0xe0,0x94,0xe8,0x90,0x9e,0xa9,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,
56529 -0x22,0x7f,0x32,0x7e,0x00,0x12,0x32,0x15,0x90,0x9e,0xa9,0xe4,0x75,0xf0,0x01,0x12,
56530 -0x42,0x81,0x80,0xc6,0x7f,0x78,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xff,0x12,0x25,
56531 -0x08,0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,0x9e,0x03,0x12,0x25,0x08,0x7f,0x00,
56532 -0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0x07,0x12,0x25,0x08,0x90,0x9e,0x60,0xe0,0x90,
56533 -0x9d,0xff,0xb4,0x01,0x0d,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,
56534 -0x80,0x07,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,
56535 -0x7f,0x78,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,
56536 -0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,
56537 -0x9e,0x07,0x12,0x43,0x53,0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x96,0x12,0x25,0x08,
56538 -0x7f,0x00,0x7e,0x08,0x12,0x2b,0x08,0x7f,0x70,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9e,
56539 -0x0b,0x12,0x25,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa0,0x7f,0x70,
56540 -0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x00,0x00,0x00,0xe4,
56541 -0xfd,0xff,0x12,0x30,0x2c,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x11,0x90,0x80,0x68,0x12,
56542 -0x25,0x14,0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,0x01,0x12,0x30,0x2c,0x90,0x00,0x11,
56543 -0xe0,0x54,0xf6,0xf0,0x02,0x4b,0xdb,0x12,0x4b,0xc4,0xef,0x64,0x01,0x60,0x08,0x90,
56544 -0x01,0xb9,0x74,0x01,0xf0,0x80,0x30,0x90,0x9e,0x71,0xe0,0x60,0x08,0x90,0x01,0xb9,
56545 -0x74,0x02,0xf0,0x80,0x22,0x90,0x9e,0x70,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,
56546 -0xf0,0x80,0x14,0xe5,0x24,0x54,0x0f,0xd3,0x94,0x04,0x40,0x08,0x90,0x01,0xb9,0x74,
56547 -0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x08,0xf0,0x7f,0x00,0x22,
56548 -0x12,0x4b,0xc4,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x4a,
56549 -0xe5,0x26,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x3c,0xe5,0x24,
56550 -0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x2b,0xe5,
56551 -0x26,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x1e,0xe5,0x26,0x30,0xe4,
56552 -0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x11,0x90,0x9e,0x66,0xe0,0x60,0x08,0x90,
56553 -0x01,0xb9,0x74,0x20,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,
56554 -0x7f,0x00,0x22,0xe5,0x12,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x5b,0xe5,
56555 -0x24,0x54,0x0f,0xd3,0x94,0x01,0x40,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x4a,
56556 -0x90,0x02,0x87,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x3c,0x90,0x9e,
56557 -0x5e,0xe0,0xb4,0x01,0x10,0x90,0x9e,0x4d,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,
56558 -0xe0,0x60,0x16,0x80,0x25,0x90,0x9e,0x5e,0xe0,0x70,0x0e,0x90,0x01,0xaf,0xe0,0x60,
56559 -0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x11,0x90,0x9e,0x68,0xe0,0x70,0x08,0x90,
56560 -0x01,0xb9,0x74,0x10,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,
56561 -0x7f,0x00,0x22,0x90,0x9e,0xae,0xef,0xf0,0x91,0x0c,0x90,0x9e,0xae,0xe0,0x60,0x05,
56562 -0x90,0x05,0x22,0xe4,0xf0,0x53,0x23,0xf0,0x43,0x23,0x04,0x22,0x90,0x00,0x11,0xe0,
56563 -0x44,0x09,0xf0,0x12,0x4b,0xdb,0x90,0x9d,0xff,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
56564 -0x25,0x08,0x7f,0x78,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x03,0x12,0x43,0x53,0x90,
56565 -0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,0x9e,0x07,0x12,
56566 -0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x00,0x7e,0x08,0x12,0x2b,0x08,0x90,
56567 -0x9e,0x0b,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x70,0x7e,0x0e,0x12,
56568 -0x2b,0x08,0x90,0x80,0x68,0x12,0x25,0x14,0x00,0x03,0x2d,0x95,0xe4,0xfd,0xff,0x12,
56569 -0x30,0x2c,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x11,0x90,0x80,0x68,0x12,0x25,0x14,0x00,
56570 -0x03,0x2d,0x95,0xe4,0xfd,0x7f,0x01,0x12,0x30,0x2c,0x22,0x8f,0x27,0xe4,0x90,0x9e,
56571 -0xa7,0xf0,0xa3,0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0xef,
56572 -0x65,0x27,0x60,0x3e,0xc3,0x90,0x9e,0xa8,0xe0,0x94,0x88,0x90,0x9e,0xa7,0xe0,0x94,
56573 -0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0xa7,0xe4,0x75,
56574 -0xf0,0x01,0x12,0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x32,0x15,0xd3,0x90,0x9e,0xa8,
56575 -0xe0,0x94,0x32,0x90,0x9e,0xa7,0xe0,0x94,0x00,0x40,0xb9,0x90,0x01,0xc7,0xe0,0x30,
56576 -0xe0,0xb2,0x22,0xe5,0x24,0x30,0xe6,0x19,0xe5,0x24,0x54,0x0f,0xff,0x90,0x9e,0x62,
56577 -0xe0,0xfe,0x4f,0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x62,0xf0,0x53,0x24,
56578 -0xbf,0x22,0x8f,0x76,0x12,0x45,0xa6,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x53,0x12,
56579 -0x47,0xcc,0xe5,0x76,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
56580 -0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
56581 -0xe0,0x54,0xef,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xe5,0x22,0x64,0x01,0x70,
56582 -0x61,0xe5,0x25,0x60,0x5d,0xe5,0x25,0x64,0x02,0x60,0x06,0xe5,0x25,0x64,0x05,0x70,
56583 -0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x64,0xf0,0x90,0x06,0xaa,0xe0,0x90,0x9e,0x72,
56584 -0xf0,0x90,0x9e,0x64,0xe0,0x70,0x07,0x90,0x9e,0x72,0xe0,0xff,0x80,0x05,0x90,0x9e,
56585 -0x64,0xe0,0xff,0x90,0x9e,0x64,0xef,0xf0,0x90,0x9e,0x66,0xe0,0x60,0x03,0xe0,0x14,
56586 -0xf0,0xe4,0x90,0x9e,0x65,0xf0,0x90,0x01,0x57,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,
56587 -0x53,0x26,0xfd,0x53,0x26,0xef,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,
56588 -0x45,0x53,0x22,0xe4,0xff,0xe5,0x25,0x60,0x5f,0xe5,0x22,0x64,0x01,0x70,0x59,0xe5,
56589 -0x25,0x14,0x60,0x2b,0x24,0xfd,0x60,0x27,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x21,
56590 -0x90,0x9e,0x64,0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x14,0x90,0x9e,0x64,
56591 -0xe0,0x70,0x08,0x90,0x9e,0x72,0xe0,0x90,0x9e,0x64,0xf0,0x7f,0x01,0x80,0x02,0x7f,
56592 -0x01,0xef,0x60,0x24,0x43,0x26,0x10,0xe4,0x90,0x9e,0x86,0xf0,0x90,0x9e,0x6e,0x12,
56593 -0x44,0x56,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x04,0x50,
56594 -0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x2f,0x22,0xe5,0x25,0x60,0x39,0x90,0x9e,0x74,
56595 -0xe0,0x60,0x0d,0xe4,0xf0,0x53,0x26,0xfd,0xe5,0x26,0x54,0x07,0x70,0x28,0x80,0x23,
56596 -0x90,0x9e,0x65,0xe0,0x04,0xf0,0x53,0x26,0xef,0x90,0x9e,0x6a,0xe0,0xff,0x90,0x9e,
56597 -0x65,0xe0,0xd3,0x9f,0x40,0x0d,0xe5,0x22,0xb4,0x01,0x0b,0xa3,0xe0,0x70,0x07,0xe0,
56598 -0x04,0xf0,0x22,0x12,0x44,0xd1,0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,
56599 -0x17,0xed,0xc4,0x54,0xf0,0xfd,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,
56600 -0x04,0xf5,0x83,0xe0,0x54,0x0f,0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,
56601 -0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,
56602 -0x04,0xf5,0x83,0xe0,0x4d,0xf0,0x22,0xad,0x07,0xed,0xc3,0x94,0x20,0x50,0x0d,0x74,
56603 -0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2d,0xf5,
56604 -0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x64,0xe5,0x64,0x54,0x1f,0xfc,
56605 -0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x90,0x9e,0x3e,0xf0,
56606 -0xed,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,
56607 -0x90,0x9e,0x3f,0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
56608 -0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x41,0xcb,0xf0,0xa3,0xeb,0xf0,
56609 -0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfa,0x74,
56610 -0x01,0x93,0xfb,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xea,
56611 -0xf0,0xa3,0xeb,0xf0,0xec,0xc3,0x9f,0x40,0x02,0xe1,0xa5,0x74,0x67,0x2d,0xf5,0x82,
56612 -0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,0x9e,0x3e,0xe0,0xff,0xeb,0xd3,
56613 -0x9f,0x40,0x02,0xe1,0xd6,0xeb,0xc3,0x94,0x10,0x40,0x21,0xeb,0x24,0xf0,0xff,0x74,
56614 -0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,
56615 -0x90,0x9e,0x3f,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x23,0xeb,0xc3,0x94,0x10,
56616 -0x50,0x40,0x74,0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
56617 -0xd8,0xf9,0xff,0x90,0x9e,0x41,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x23,0xbb,
56618 -0x11,0x09,0x90,0x9e,0x40,0xe0,0x30,0xe7,0x02,0x7b,0x17,0xeb,0x64,0x13,0x60,0x03,
56619 -0xbb,0x12,0x09,0x90,0x9e,0x3f,0xe0,0x30,0xe0,0x02,0x7b,0x18,0xac,0x03,0x8c,0x64,
56620 -0x80,0x34,0x0b,0x80,0x84,0x90,0x9e,0x3e,0xe0,0xfb,0x6c,0x70,0x69,0x74,0x67,0x2d,
56621 -0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,
56622 -0x12,0x43,0x5f,0xe0,0xb4,0x01,0x0c,0xe5,0x64,0x20,0xe6,0x07,0xec,0x44,0x40,0xf5,
56623 -0x64,0x80,0x03,0xaf,0x64,0x22,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,
56624 -0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,
56625 -0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,
56626 -0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,
56627 -0xf0,0xa3,0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,0x9e,0x3e,0xe0,0xff,
56628 -0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0xac,0x07,0x8f,0x64,
56629 -0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,
56630 -0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,
56631 -0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,
56632 -0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x64,
56633 -0x22,0x74,0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xaf,0x05,0xe5,
56634 -0x64,0x44,0x80,0xfd,0x12,0x5a,0x80,0xe5,0x64,0x44,0x80,0xff,0x22,0xe4,0xf5,0x59,
56635 -0xe5,0x59,0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,0x95,0x01,0xe0,0xff,
56636 -0x90,0x9a,0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,
56637 -0x4b,0x12,0x43,0x5f,0xe0,0x64,0x01,0x60,0x02,0xc1,0xd3,0xe5,0x59,0x25,0xe0,0x24,
56638 -0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xd3,0x94,0x00,0xee,
56639 -0x94,0x00,0x50,0x02,0xc1,0xd3,0xe5,0x59,0x94,0x20,0x40,0x08,0x90,0x9a,0xc5,0xe0,
56640 -0x60,0x02,0xc1,0xde,0xe5,0x59,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf9,0x74,0x90,0x35,
56641 -0xf0,0x75,0x5e,0x01,0xf5,0x5f,0x89,0x60,0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,
56642 -0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x38,0xcf,0xf0,0xa3,0xef,
56643 -0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xff,
56644 -0xa3,0xe0,0x90,0x9e,0x3a,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,0xc3,0x94,0x20,0x50,
56645 -0x14,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x3f,0x90,
56646 -0x9e,0x34,0xf0,0x80,0x12,0x74,0xa6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,
56647 -0xe0,0x54,0x3f,0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfe,0x54,0x1f,0xa3,0xf0,
56648 -0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3d,0xf0,
56649 -0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xc3,0x94,0x05,0x40,
56650 -0x02,0x61,0xac,0x90,0x9e,0x3d,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x9f,0x40,0x13,0x90,
56651 -0x9e,0x3d,0xe0,0x90,0x9e,0x35,0xf0,0xee,0x54,0x40,0xfe,0x90,0x9e,0x34,0xf0,0xef,
56652 -0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x54,0x05,0x64,0x01,0x70,0x29,0x90,0x9e,0x35,0xe0,
56653 -0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
56654 -0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xda,0x80,0x30,0x90,0x9e,0x35,0xe0,
56655 -0x90,0x40,0xf6,0x80,0x27,0x90,0x9e,0x35,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,
56656 -0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,
56657 -0x90,0x41,0x12,0x80,0x07,0x90,0x9e,0x35,0xe0,0x90,0x41,0x2e,0x93,0x90,0x9e,0x3c,
56658 -0xf0,0x90,0x9e,0x3c,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x50,0xf9,0x74,0x40,0x35,0xf0,
56659 -0x75,0x5b,0xff,0xf5,0x5c,0x89,0x5d,0x90,0x9e,0x34,0xe0,0x90,0x41,0xf2,0x93,0xff,
56660 -0xd3,0x90,0x9e,0x3b,0xe0,0x9f,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x09,0xe4,0xfd,
56661 -0xaf,0x59,0x12,0x5c,0xbd,0xc1,0x6a,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
56662 -0x34,0x95,0xf5,0x83,0xe0,0xf5,0x61,0xa3,0xe0,0xf5,0x62,0xab,0x5b,0xaa,0x5c,0xa9,
56663 -0x5d,0x12,0x24,0x62,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,0x42,0x97,
56664 -0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,
56665 -0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,
56666 -0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x24,
56667 -0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,
56668 -0x5d,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,
56669 -0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,
56670 -0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x03,0x12,
56671 -0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x06,0x12,0x42,
56672 -0xc2,0xfd,0xac,0xf0,0x12,0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,
56673 -0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x7e,0x00,
56674 -0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,
56675 -0x24,0x7b,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,
56676 -0xa9,0x5d,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,
56677 -0xa3,0xe0,0xfd,0x12,0x24,0x7b,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,0x0c,0xe5,
56678 -0x62,0x9f,0xf5,0x62,0xe5,0x61,0x9e,0xf5,0x61,0x80,0x05,0xe4,0xf5,0x61,0xf5,0x62,
56679 -0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,0x61,0xf0,
56680 -0xa3,0xe5,0x62,0xf0,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,
56681 -0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,0x07,0xaf,
56682 -0x59,0x12,0x66,0x87,0xc1,0x3e,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x9e,0xf5,0x82,
56683 -0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,
56684 -0x02,0xc1,0x3e,0x7d,0x01,0xaf,0x59,0x12,0x5c,0xbd,0xc1,0x3e,0x74,0xe6,0x25,0x59,
56685 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,0xa1,0x47,0x90,
56686 -0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x19,0x40,0x3d,
56687 -0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x11,0x40,0x2e,0x80,
56688 -0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x0a,
56689 -0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x03,0x40,0x0d,
56690 -0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,0x84,0x25,
56691 -0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0x74,0x44,0x25,0x59,0xf5,
56692 -0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,0x81,0xf4,0x90,
56693 -0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0x81,0xf4,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,
56694 -0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,0xe4,0x33,0xfe,
56695 -0x74,0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,0xd3,0x9f,0xee,
56696 -0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,0x33,0xfe,0x74,
56697 -0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,0xee,0x64,0x80,
56698 -0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
56699 -0x83,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,0x59,0xf5,0x82,
56700 -0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,0x63,0x05,0x80,
56701 -0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x63,0x03,0x80,0x03,0x75,0x63,0x01,0x74,
56702 -0x41,0x25,0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,0x85,0x25,0x59,
56703 -0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,
56704 -0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,
56705 -0x04,0xf0,0x80,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,
56706 -0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x35,0xe0,0xff,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,
56707 -0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,
56708 -0x83,0xe5,0x63,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4c,0x12,0x43,0x5f,0xe0,
56709 -0xb4,0x01,0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,
56710 -0x83,0xe4,0xf0,0xad,0x63,0xc1,0x39,0xec,0x64,0x06,0x60,0x02,0xc1,0x3e,0xf5,0x61,
56711 -0xf5,0x62,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,0xa3,0xe0,
56712 -0xfd,0x12,0x24,0x7b,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,0x25,0x59,
56713 -0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0xe4,0xf5,0x5a,0xab,0x5e,0xaa,
56714 -0x5f,0xa9,0x60,0x75,0xf0,0x02,0xe5,0x5a,0xa4,0xf5,0x82,0x85,0xf0,0x83,0x12,0x42,
56715 -0xc2,0xfd,0xac,0xf0,0xe5,0x5a,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,0x12,0x24,0x7b,
56716 -0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,0xe0,0x95,
56717 -0x62,0x90,0x9e,0x36,0xe0,0x95,0x61,0x40,0x07,0x05,0x5a,0xe5,0x5a,0xb4,0x05,0xbd,
56718 -0xe5,0x5a,0xc3,0x13,0xf5,0x5a,0xe5,0x63,0xb4,0x01,0x06,0xe5,0x5a,0x70,0x46,0x80,
56719 -0x13,0xe5,0x63,0xb4,0x03,0x15,0xe5,0x5a,0x70,0x05,0x75,0x63,0x03,0x80,0x39,0xe5,
56720 -0x5a,0xb4,0x01,0x05,0x75,0x63,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x63,0xb4,0x05,0x28,
56721 -0xe5,0x5a,0x70,0x05,0x75,0x63,0x05,0x80,0x0d,0xe5,0x5a,0xb4,0x01,0x05,0x75,0x63,
56722 -0x03,0x80,0x03,0x75,0x63,0x01,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,0x9e,0x3a,
56723 -0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,
56724 -0x9e,0x3a,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0x74,0x84,0x25,0x59,0xf5,0x82,
56725 -0xe4,0x34,0x98,0xf5,0x83,0xe5,0x63,0xf0,0xfd,0xaf,0x59,0x12,0x66,0x47,0x74,0xe6,
56726 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,0x74,0xe6,0x50,
56727 -0x0e,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x0b,0x25,
56728 -0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x5e,0xaa,0x5f,0xa9,0x60,
56729 -0xe4,0xf5,0xf0,0x12,0x42,0xfa,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0xe4,
56730 -0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,
56731 -0x06,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,0x43,0x19,
56732 -0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,
56733 -0xf0,0xe5,0x59,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,
56734 -0xa3,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,
56735 -0xf0,0xa3,0xf0,0x05,0x59,0xe5,0x59,0xc3,0x94,0x40,0x50,0x02,0x01,0x90,0x22,0x90,
56736 -0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,0xf0,
56737 -0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x0d,0xbd,0x10,
56738 -0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,0xe4,0xfd,0x75,0xf0,0x0a,
56739 -0xed,0x90,0x90,0x00,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,
56740 -0x90,0x02,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x04,
56741 -0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x06,0x12,0x43,
56742 -0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x08,0x12,0x43,0x5f,0xe4,
56743 -0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0x74,0x13,0xf0,
56744 -0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2d,0xf5,
56745 -0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
56746 -0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
56747 -0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
56748 -0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,
56749 -0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
56750 -0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,
56751 -0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,0xf5,0x82,0xe4,0x34,0x9c,
56752 -0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,
56753 -0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x41,0xc4,0x93,
56754 -0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,
56755 -0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,
56756 -0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4b,0x12,0x43,
56757 -0x5f,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,0x74,0x01,
56758 -0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0c,0xf0,0x75,0xf0,
56759 -0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x5f,0x74,0xff,0xf0,0xa3,0xf0,0x75,0xf0,0x09,
56760 -0xed,0x90,0x96,0x44,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0x75,0xf0,0x09,
56761 -0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0x74,0x13,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,
56762 -0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,0x2d,0xf5,
56763 -0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,0xf5,0x82,
56764 -0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x03,0x02,0x6f,
56765 -0x0d,0x22,0x12,0x24,0x62,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,0x02,0x12,
56766 -0x42,0x20,0xff,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,0xf0,
56767 -0x22,0xe5,0x59,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x96,0x42,0xf0,
56768 -0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,0xc4,0x13,
56769 -0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x55,0x30,0x12,0x24,0x62,0x90,0x95,0x01,
56770 -0xf0,0x22,0x12,0x24,0x62,0xf5,0x22,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x30,
56771 -0xe0,0x25,0x12,0x24,0x62,0x90,0x9e,0x6a,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0x90,
56772 -0x9e,0x6b,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x69,0xf0,0x90,0x00,0x03,0x12,
56773 -0x42,0x20,0x90,0x9e,0x6f,0xf0,0x22,0x90,0x9e,0x6a,0x74,0x01,0xf0,0x90,0x9e,0x6b,
56774 -0x74,0x03,0xf0,0x90,0x9e,0x69,0x74,0x14,0xf0,0x90,0x9e,0x6f,0x74,0x05,0xf0,0x22,
56775 -0x12,0x24,0x62,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x6e,0xf0,0x90,0x00,
56776 -0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x6c,0xe4,0xf0,0xa3,0xef,0xf0,0x22,0x90,0x9e,
56777 -0x6e,0x74,0x07,0xf0,0x90,0x9e,0x6c,0xe4,0xf0,0xa3,0x74,0x02,0xf0,0x22,0x90,0x02,
56778 -0x09,0xe0,0xfd,0x12,0x24,0x62,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x50,0xf0,0x90,
56779 -0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x51,0xf0,0x90,0x00,0x02,0x12,
56780 -0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x52,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,0xff,
56781 -0xed,0x2f,0x90,0x9e,0x53,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0xae,0x05,0xed,
56782 -0x2f,0x90,0x9e,0x54,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x3f,
56783 -0x12,0x43,0x8b,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xfa,
56784 -0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,
56785 -0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,0x24,0x62,0xff,0x60,0x2c,0xb5,0x71,0x16,
56786 -0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0x65,0x73,0x70,0x04,
56787 -0xe5,0x72,0x65,0xf0,0x60,0x23,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,
56788 -0x42,0xc2,0xff,0xae,0xf0,0x51,0x3e,0x80,0x10,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x12,
56789 -0x24,0x62,0x65,0x71,0x60,0x03,0x12,0x44,0xc8,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,
56790 -0x42,0xee,0xf0,0xa3,0xef,0xf0,0x75,0x71,0x01,0x8e,0x72,0xf5,0x73,0xe4,0xfd,0x7f,
56791 -0x0b,0x51,0x80,0xe4,0xfd,0x7f,0x02,0x51,0x80,0x71,0x4a,0xe4,0xff,0x71,0xac,0xe4,
56792 -0xf5,0x75,0x90,0x01,0xc9,0xe5,0x75,0xf0,0x90,0x9e,0x42,0xe0,0xfc,0xa3,0xe0,0xfd,
56793 -0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,0x7d,0x01,0x7f,0x60,0x7e,0x01,0x02,0x30,0x62,
56794 -0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,0x90,0x9e,0x44,0xef,
56795 -0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9e,0x44,0xe0,0xff,0x74,
56796 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,0xe0,
56797 -0x5f,0xf0,0x80,0x17,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
56798 -0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x9e,
56799 -0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
56800 -0x90,0x00,0x46,0x80,0x5a,0x90,0x9e,0x44,0xe0,0x24,0xf8,0xf0,0xa3,0xe0,0x70,0x1d,
56801 -0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,
56802 -0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,0x1a,0x90,0x9e,0x44,
56803 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,
56804 -0xff,0x90,0x00,0x43,0xe0,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x9e,0x44,0xe0,0xff,0x74,
56805 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,
56806 -0x5f,0xf0,0x12,0x4b,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0x7f,0x0b,0x71,0xb9,0xef,0x65,
56807 -0x74,0x60,0x10,0xe5,0x74,0xb4,0x01,0x05,0xe4,0xf5,0x74,0x80,0x03,0x75,0x74,0x01,
56808 -0x7f,0x01,0x22,0x7f,0x00,0x22,0xe5,0x71,0x64,0x01,0x70,0x3f,0x71,0x4a,0xbf,0x01,
56809 -0x04,0x7f,0x01,0x71,0xac,0x90,0x00,0x46,0xe0,0x44,0x04,0xfd,0x7f,0x46,0x12,0x4c,
56810 -0xe3,0x90,0x00,0x44,0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x12,0x4c,0xe3,0x90,0x00,0x46,
56811 -0xe0,0x54,0xfb,0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x7f,0x02,0x71,0xb9,0x8f,0x75,0x90,
56812 -0x01,0xc9,0xe5,0x75,0xf0,0xb4,0x01,0x03,0x12,0x4f,0xda,0x22,0x90,0x01,0xca,0xe5,
56813 -0x74,0xf0,0xef,0x60,0x03,0x12,0x4f,0xda,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
56814 -0x90,0x9e,0xb1,0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,0x01,0xa8,0x07,
56815 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,0x12,
56816 -0x4b,0xdb,0x90,0x9e,0xb1,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,
56817 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,0xe4,0xfe,0xef,
56818 -0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,0x80,
56819 -0x44,0x90,0x9e,0xb1,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
56820 -0x02,0xc3,0x33,0xd8,0xfc,0x12,0x4b,0xd3,0x90,0x9e,0xb1,0xe0,0xfd,0x74,0x01,0x7e,
56821 -0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,
56822 -0x42,0xe0,0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,
56823 -0xce,0x13,0xd8,0xf8,0xff,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
56824 -0xd0,0x90,0x9e,0x56,0xe0,0x90,0x9e,0x40,0xf0,0x90,0x9e,0x57,0xe0,0xf5,0x64,0xa3,
56825 -0xe0,0xf5,0x65,0xe4,0xf5,0x61,0x74,0x59,0x25,0x61,0xf5,0x82,0xe4,0x34,0x9e,0xf5,
56826 -0x83,0xe0,0xff,0x74,0x66,0x25,0x61,0xf8,0xa6,0x07,0x05,0x61,0xe5,0x61,0xb4,0x04,
56827 -0xe5,0x90,0x9e,0x40,0xe0,0x12,0x43,0x94,0x74,0xb7,0x00,0x75,0xdf,0x01,0x74,0xbd,
56828 -0x02,0x74,0xbd,0x03,0x74,0xbd,0x04,0x75,0xdf,0x05,0x75,0xaf,0x80,0x75,0xc5,0x81,
56829 -0x75,0xdf,0x82,0x00,0x00,0x75,0xdb,0xaf,0x69,0xb1,0xe6,0xa1,0xdf,0x90,0x9e,0x40,
56830 -0xe0,0xff,0xb4,0x02,0x08,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x80,0x0f,0xef,0x90,0x9e,
56831 -0x3f,0xb4,0x03,0x05,0x74,0x02,0xf0,0x80,0x03,0x74,0x04,0xf0,0xc3,0xe5,0x64,0x94,
56832 -0x08,0x50,0x49,0xe4,0xf5,0x61,0x90,0x9e,0x3f,0xe0,0xff,0xe5,0x61,0xc3,0x9f,0x40,
56833 -0x02,0xa1,0xdf,0xc3,0xe5,0x64,0x94,0x01,0x50,0x14,0xe5,0x61,0x25,0x65,0xff,0xc3,
56834 -0x74,0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xfd,0x12,0x4c,0xe3,0x80,0x1a,0xc3,0x74,
56835 -0x03,0x95,0x61,0x24,0x66,0xf8,0xe6,0xff,0xe5,0x61,0x7c,0x00,0x25,0x65,0xfd,0xec,
56836 -0x35,0x64,0x8d,0x82,0xf5,0x83,0xef,0xf0,0x05,0x61,0x80,0xba,0xc3,0xe5,0x64,0x94,
56837 -0x10,0x40,0x02,0xa1,0xdf,0x90,0x9e,0x40,0xe0,0x64,0x04,0x60,0x02,0xa1,0xdf,0xaf,
56838 -0x67,0xfc,0xfd,0xfe,0x78,0x10,0x12,0x24,0xf5,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,
56839 -0x07,0xaf,0x66,0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x24,0xf5,0xd0,0x03,0xd0,0x02,
56840 -0xd0,0x01,0xd0,0x00,0x12,0x43,0x46,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xaf,
56841 -0x68,0xe4,0xfc,0xfd,0xfe,0x78,0x08,0x12,0x24,0xf5,0xd0,0x03,0xd0,0x02,0xd0,0x01,
56842 -0xd0,0x00,0x12,0x43,0x46,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0xaf,0x69,0xe4,
56843 -0xfc,0xfd,0xfe,0x12,0x43,0x46,0xa3,0x12,0x25,0x08,0x90,0x9e,0x41,0x12,0x43,0x53,
56844 -0x90,0x80,0x96,0x12,0x25,0x08,0xaf,0x65,0xae,0x64,0x12,0x2b,0x08,0x80,0x30,0xe5,
56845 -0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,
56846 -0x12,0x32,0x15,0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,
56847 -0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,0x31,0x82,0x80,0x04,0x7f,0x00,0x80,0x02,0x7f,
56848 -0x01,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x6a,0xe4,0x90,0x9e,0x45,0xf0,0xe5,0x6a,0x14,
56849 -0xfe,0x90,0x9e,0x45,0xe0,0xff,0xc3,0x9e,0x50,0x0e,0xef,0x04,0xfd,0x12,0x2d,0x4d,
56850 -0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,0x7d,0xff,0x12,0x2d,
56851 -0x4d,0x90,0x9e,0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,0x94,0xff,0x50,0x0f,
56852 -0xe0,0xff,0x04,0xfd,0x12,0x2d,0x4d,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe8,0xad,
56853 -0x6a,0x7f,0xff,0x02,0x2d,0x4d,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0xf5,0x5b,
56854 -0x75,0x5c,0x04,0xf5,0x5d,0xf5,0x5f,0xf5,0x60,0x90,0x02,0x09,0xe0,0xff,0x12,0x24,
56855 -0x62,0xfe,0xef,0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,0x75,0x5a,0x80,0x80,
56856 -0x05,0xe4,0xf5,0x59,0xf5,0x5a,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x74,0x20,
56857 -0x25,0x5b,0xf5,0x5b,0xad,0x5a,0xe5,0x5b,0x2d,0xff,0x24,0x01,0xf5,0x82,0xe4,0x34,
56858 -0xfc,0xf5,0x83,0xe0,0x90,0x9e,0x56,0xf0,0x74,0x02,0x2f,0xf5,0x82,0xe4,0x34,0xfc,
56859 -0xf5,0x83,0xe0,0xfe,0xe5,0x5b,0x2d,0x24,0x03,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
56860 -0xe0,0x24,0x00,0xff,0xe4,0x3e,0x90,0x9e,0x57,0xf0,0xa3,0xef,0xf0,0x7f,0x04,0xe5,
56861 -0x5b,0x25,0x5a,0x2f,0x24,0x00,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0xfe,0x74,
56862 -0x55,0x2f,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,0xee,0xf0,0x0f,0xbf,0x08,0xe0,0x91,
56863 -0x5a,0xef,0x70,0x3f,0x90,0x01,0xc3,0xe0,0x60,0x25,0xc3,0xe5,0x60,0x94,0xe8,0xe5,
56864 -0x5f,0x94,0x03,0x40,0x09,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x80,0x63,0x05,0x60,
56865 -0xe5,0x60,0x70,0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x32,0x15,0x80,0xd5,0x90,
56866 -0x01,0xc6,0xe0,0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,0x80,0x43,0x74,0xff,
56867 -0xf0,0x80,0x3e,0xe5,0x5b,0xb4,0x78,0x23,0xe4,0xf5,0x5b,0x05,0x5e,0xe5,0x5a,0x64,
56868 -0x80,0x45,0x59,0x70,0x06,0xf5,0x59,0xf5,0x5a,0x80,0x06,0x75,0x59,0x00,0x75,0x5a,
56869 -0x80,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x80,0x06,0x74,0x08,0x25,0x5b,0xf5,
56870 -0x5b,0xe5,0x5d,0x15,0x5d,0x70,0x02,0x15,0x5c,0xe5,0x5d,0x45,0x5c,0x60,0x02,0xc1,
56871 -0x74,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,0xa3,
56872 -0xf0,0xa3,0xf0,0x22,0xe4,0x90,0x9e,0x5d,0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,
56873 -0x7f,0x80,0x02,0x4c,0xe3,0x8e,0x59,0x8f,0x5a,0x8b,0x5b,0x8a,0x5c,0x89,0x5d,0xe4,
56874 -0x90,0x9e,0x34,0xf0,0xef,0x90,0x00,0x31,0xf0,0x12,0x4b,0xdb,0xe5,0x59,0x54,0x03,
56875 -0xff,0x90,0x00,0x32,0xe0,0x54,0xfc,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x00,0x33,0xe0,
56876 -0x54,0x7f,0xf0,0x12,0x4b,0xdb,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x34,
56877 -0xe0,0xc3,0x94,0x64,0x50,0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x34,0xe0,0xc3,
56878 -0x94,0x64,0x50,0x10,0x90,0x00,0x30,0xe0,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x12,0x42,
56879 -0x4d,0x7f,0x01,0x22,0x7f,0x00,0x22,0xe4,0xf5,0x74,0x22,0x90,0x9e,0x60,0xe0,0x90,
56880 -0x9e,0x0f,0xf0,0x22,0xef,0x70,0x03,0x02,0x79,0x9c,0x90,0x9e,0x0f,0xe0,0x60,0x03,
56881 -0x02,0x7d,0x67,0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
56882 -0x8c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
56883 -0x25,0x08,0x7f,0x44,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xab,0x12,0x43,0x53,0x90,
56884 -0x80,0x96,0x12,0x25,0x08,0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xaf,0x12,
56885 -0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,0x08,0x90,
56886 -0x9d,0xb3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x70,0x7e,0x0e,0x12,
56887 -0x2b,0x08,0x90,0x9d,0xb7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x74,
56888 -0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
56889 -0x08,0x7f,0x78,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xbf,0x12,0x43,0x53,0x90,0x80,
56890 -0x96,0x12,0x25,0x08,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xc3,0x12,0x43,
56891 -0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,
56892 -0xc7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x84,0x7e,0x0e,0x12,0x2b,
56893 -0x08,0x90,0x9d,0xcb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x88,0x7e,
56894 -0x0e,0x12,0x2b,0x08,0x90,0x9d,0xcf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
56895 -0x7f,0x8c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,0x80,0x96,
56896 -0x12,0x25,0x08,0x7f,0xd0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xd7,0x12,0x43,0x53,
56897 -0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xd4,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xdb,
56898 -0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xd8,0x7e,0x0e,0x12,0x2b,0x08,
56899 -0x90,0x9d,0xdf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xdc,0x7e,0x0e,
56900 -0x12,0x2b,0x08,0x90,0x9d,0xe3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
56901 -0xe0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
56902 -0x25,0x08,0x7f,0xec,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xeb,0x12,0x43,0x53,0x90,
56903 -0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,0x9d,0xef,0x12,
56904 -0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x2b,0x08,0x90,
56905 -0x9d,0xf3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,
56906 -0x2b,0x08,0x90,0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,
56907 -0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,0x0f,0xe0,
56908 -0x64,0x01,0x60,0x02,0xa1,0x67,0x7f,0x8c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xfb,
56909 -0x12,0x25,0x08,0x7f,0x44,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xa7,0x12,0x25,0x08,
56910 -0x7f,0x5c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xab,0x12,0x25,0x08,0x7f,0x6c,0x7e,
56911 -0x0e,0x12,0x22,0x65,0x90,0x9d,0xaf,0x12,0x25,0x08,0x7f,0x70,0x7e,0x0e,0x12,0x22,
56912 -0x65,0x90,0x9d,0xb3,0x12,0x25,0x08,0x7f,0x74,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,
56913 -0xb7,0x12,0x25,0x08,0x7f,0x78,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xbb,0x12,0x25,
56914 -0x08,0x7f,0x7c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xbf,0x12,0x25,0x08,0x7f,0x80,
56915 -0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xc3,0x12,0x25,0x08,0x7f,0x84,0x7e,0x0e,0x12,
56916 -0x22,0x65,0x90,0x9d,0xc7,0x12,0x25,0x08,0x7f,0x88,0x7e,0x0e,0x12,0x22,0x65,0x90,
56917 -0x9d,0xcb,0x12,0x25,0x08,0x7f,0x8c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xcf,0x12,
56918 -0x25,0x08,0x7f,0xd0,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xd3,0x12,0x25,0x08,0x7f,
56919 -0xd4,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xd7,0x12,0x25,0x08,0x7f,0xd8,0x7e,0x0e,
56920 -0x12,0x22,0x65,0x90,0x9d,0xdb,0x12,0x25,0x08,0x7f,0xdc,0x7e,0x0e,0x12,0x22,0x65,
56921 -0x90,0x9d,0xdf,0x12,0x25,0x08,0x7f,0xe0,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xe3,
56922 -0x12,0x25,0x08,0x7f,0xec,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xe7,0x12,0x25,0x08,
56923 -0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,0x9d,0xeb,0x12,0x25,0x08,0x7f,0x04,0x7e,
56924 -0x0d,0x12,0x22,0x65,0x90,0x9d,0xef,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,
56925 -0x65,0x90,0x9d,0xf3,0x12,0x25,0x08,0x7f,0x04,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,
56926 -0xf7,0x12,0x25,0x08,0x7f,0x8c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0xa1,0x12,0x25,
56927 -0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,0xa1,0x12,
56928 -0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x8c,
56929 -0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x01,0x00,0x00,0x7f,
56930 -0x44,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0xdb,0x25,0xa4,
56931 -0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,
56932 -0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,
56933 -0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x04,
56934 -0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,
56935 -0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,
56936 -0x14,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,
56937 -0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,
56938 -0x12,0x25,0x14,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,
56939 -0x96,0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2b,0x08,0x90,
56940 -0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x2b,0x08,
56941 -0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,0x2b,
56942 -0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,0x12,
56943 -0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,0x0e,
56944 -0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa4,0x7f,0xdc,0x7e,
56945 -0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa4,0x7f,0xe0,
56946 -0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x24,0xdb,0x25,0xa4,0x7f,
56947 -0xec,0x7e,0x0e,0x12,0x2b,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,0x9e,0xa1,
56948 -0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa1,0x12,
56949 -0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa1,
56950 -0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
56951 -0x04,0x7e,0x0c,0x12,0x2b,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x22,0x65,0x90,0x9e,0xa1,
56952 -0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,
56953 -0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,
56954 -0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
56955 -0x08,0x7f,0x04,0x7e,0x0d,0x12,0x2b,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,0x65,0x90,
56956 -0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,
56957 -0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,
56958 -0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
56959 -0x08,0x7f,0x0c,0x7e,0x09,0x12,0x2b,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,0x65,0x90,
56960 -0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,0x54,0x0f,0xfd,0xec,
56961 -0x54,0xf0,0xfc,0x90,0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,
56962 -0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,
56963 -0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x2b,0x08,
56964 -0x7f,0x04,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,0xa1,
56965 -0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa1,0x12,0x25,0x08,0x90,0x9e,
56966 -0xa1,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa1,0x12,0x25,0x08,0x90,
56967 -0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x08,0x12,
56968 -0x2b,0x08,0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,
56969 -0x1e,0xf0,0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,0x59,0xc2,
56970 -0xaf,0x90,0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x4c,0xe3,0x7d,0x40,0x7f,
56971 -0x01,0x12,0x31,0x66,0xe5,0x59,0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,0x45,0x12,
56972 -0x4c,0xe3,0x90,0x04,0xfd,0xe4,0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,0x9e,0x24,
56973 -0xf0,0x90,0x9e,0x27,0xf0,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x26,
56974 -0xf0,0x90,0x9e,0x29,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,
56975 -0xf0,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,0x9e,0x2e,
56976 -0xf0,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,0x00,0x51,
56977 -0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x02,0x4c,0xe3,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x60,
56978 -0x08,0x90,0x9e,0x1c,0xe0,0x60,0x02,0xc1,0xd0,0x90,0x9e,0x10,0xe0,0xc3,0x94,0xff,
56979 -0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x11,0xe0,0xc3,0x94,0xff,0x50,0x06,
56980 -0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x12,0xe0,0xc3,0x94,0xff,0x50,0x0a,0xe0,
56981 -0x04,0xf0,0xe4,0x90,0x9e,0x11,0xf0,0x80,0x15,0x90,0x9e,0x13,0xe0,0xc3,0x94,0xff,
56982 -0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x12,0xf0,0x90,0x9e,0x11,0xf0,0x90,0x9e,
56983 -0x10,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,0x30,0xe2,0x32,0x90,0x9e,
56984 -0x24,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x25,0xe0,
56985 -0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x26,0xe0,0xc3,
56986 -0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x24,0xf0,
56987 -0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x27,0xe0,0xc3,0x94,0xff,0x50,0x05,
56988 -0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x28,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,
56989 -0xf0,0xe4,0x80,0x11,0x90,0x9e,0x29,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,
56990 -0xe4,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x04,0xfd,0xe0,0x44,0x01,0xf0,
56991 -0x22,0x00,0x6a,0xe7,};
56992 +0x60,0x03,0x02,0x7c,0xe9,0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
56993 +0x08,0x7f,0x8c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,
56994 +0x96,0x12,0x25,0x08,0x7f,0x44,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,0xab,0x12,0x43,
56995 +0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9d,
56996 +0xaf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,
56997 +0x08,0x90,0x9d,0xb3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x70,0x7e,
56998 +0x0e,0x12,0x2b,0x08,0x90,0x9d,0xb7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
56999 +0x7f,0x74,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xbb,0x12,0x43,0x53,0x90,0x80,0x96,
57000 +0x12,0x25,0x08,0x7f,0x78,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xbf,0x12,0x43,0x53,
57001 +0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xc3,
57002 +0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x08,
57003 +0x90,0x9d,0xc7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x84,0x7e,0x0e,
57004 +0x12,0x2b,0x08,0x90,0x9d,0xcb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,
57005 +0x88,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xcf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,
57006 +0x25,0x08,0x7f,0x8c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xd3,0x12,0x43,0x53,0x90,
57007 +0x80,0x96,0x12,0x25,0x08,0x7f,0xd0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xd7,0x12,
57008 +0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xd4,0x7e,0x0e,0x12,0x2b,0x08,0x90,
57009 +0x9d,0xdb,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xd8,0x7e,0x0e,0x12,
57010 +0x2b,0x08,0x90,0x9d,0xdf,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0xdc,
57011 +0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xe3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
57012 +0x08,0x7f,0xe0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xe7,0x12,0x43,0x53,0x90,0x80,
57013 +0x96,0x12,0x25,0x08,0x7f,0xec,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x9d,0xeb,0x12,0x43,
57014 +0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x90,0x9d,
57015 +0xef,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x2b,
57016 +0x08,0x90,0x9d,0xf3,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x0c,0x7e,
57017 +0x09,0x12,0x2b,0x08,0x90,0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
57018 +0x7f,0x04,0x7e,0x08,0x12,0x2b,0x08,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,
57019 +0x0f,0xe0,0x64,0x01,0x60,0x02,0x81,0xe9,0x7f,0x8c,0x7e,0x08,0x12,0x22,0x65,0x90,
57020 +0x9d,0xfb,0x12,0x25,0x08,0x7f,0x44,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xa7,0x12,
57021 +0x25,0x08,0x7f,0x5c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9d,0xab,0x12,0x25,0x08,0x7f,
57022 +0x6c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xaf,0x12,0x25,0x08,0x7f,0x70,0x7e,0x0e,
57023 +0x12,0x22,0x65,0x90,0x9d,0xb3,0x12,0x25,0x08,0x7f,0x74,0x7e,0x0e,0x12,0x22,0x65,
57024 +0x90,0x9d,0xb7,0x12,0x25,0x08,0x7f,0x78,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xbb,
57025 +0x12,0x25,0x08,0x7f,0x7c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xbf,0x12,0x25,0x08,
57026 +0x7f,0x80,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xc3,0x12,0x25,0x08,0x7f,0x84,0x7e,
57027 +0x0e,0x12,0x22,0x65,0x90,0x9d,0xc7,0x12,0x25,0x08,0x7f,0x88,0x7e,0x0e,0x12,0x22,
57028 +0x65,0x90,0x9d,0xcb,0x12,0x25,0x08,0x7f,0x8c,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,
57029 +0xcf,0x12,0x25,0x08,0x7f,0xd0,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xd3,0x12,0x25,
57030 +0x08,0x7f,0xd4,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xd7,0x12,0x25,0x08,0x7f,0xd8,
57031 +0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xdb,0x12,0x25,0x08,0x7f,0xdc,0x7e,0x0e,0x12,
57032 +0x22,0x65,0x90,0x9d,0xdf,0x12,0x25,0x08,0x7f,0xe0,0x7e,0x0e,0x12,0x22,0x65,0x90,
57033 +0x9d,0xe3,0x12,0x25,0x08,0x7f,0xec,0x7e,0x0e,0x12,0x22,0x65,0x90,0x9d,0xe7,0x12,
57034 +0x25,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,0x9d,0xeb,0x12,0x25,0x08,0x7f,
57035 +0x04,0x7e,0x0d,0x12,0x22,0x65,0x90,0x9d,0xef,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,
57036 +0x12,0x22,0x65,0x90,0x9d,0xf3,0x12,0x25,0x08,0x7f,0x04,0x7e,0x08,0x12,0x22,0x65,
57037 +0x90,0x9d,0xf7,0x12,0x25,0x08,0x7f,0x8c,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0xa4,
57038 +0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,
57039 +0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,
57040 +0x7f,0x8c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x01,0x00,
57041 +0x00,0x7f,0x44,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0xdb,
57042 +0x25,0xa4,0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,
57043 +0xdb,0x25,0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,
57044 +0x20,0xdb,0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,
57045 +0x14,0x04,0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,
57046 +0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,
57047 +0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,
57048 +0x96,0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x08,0x90,
57049 +0x80,0x96,0x12,0x25,0x14,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2b,0x08,
57050 +0x90,0x80,0x96,0x12,0x25,0x14,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2b,
57051 +0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,
57052 +0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,
57053 +0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,
57054 +0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x20,0xdb,0x25,0xa4,0x7f,0xd8,
57055 +0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa4,0x7f,
57056 +0xdc,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x00,0x1b,0x25,0xa4,
57057 +0x7f,0xe0,0x7e,0x0e,0x12,0x2b,0x08,0x90,0x80,0x96,0x12,0x25,0x14,0x24,0xdb,0x25,
57058 +0xa4,0x7f,0xec,0x7e,0x0e,0x12,0x2b,0x08,0x7f,0x04,0x7e,0x0c,0x12,0x22,0x65,0x90,
57059 +0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,
57060 +0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,
57061 +0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,
57062 +0x08,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x22,0x65,0x90,
57063 +0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,
57064 +0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,
57065 +0xec,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,
57066 +0x12,0x25,0x08,0x7f,0x04,0x7e,0x0d,0x12,0x2b,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,
57067 +0x65,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xe4,0xff,0xec,
57068 +0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x11,0xff,
57069 +0xec,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,
57070 +0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x2b,0x08,0x7f,0x0c,0x7e,0x09,0x12,0x22,
57071 +0x65,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0xed,0x54,0x0f,
57072 +0xfd,0xec,0x54,0xf0,0xfc,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,0x9e,0xa4,0x12,0x43,
57073 +0x53,0xed,0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,
57074 +0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x0c,0x7e,0x09,0x12,
57075 +0x2b,0x08,0x7f,0x04,0x7e,0x08,0x12,0x22,0x65,0x90,0x9e,0xa4,0x12,0x25,0x08,0x90,
57076 +0x9e,0xa4,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa4,0x12,0x25,0x08,
57077 +0x90,0x9e,0xa4,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa4,0x12,0x25,
57078 +0x08,0x90,0x9e,0xa4,0x12,0x43,0x53,0x90,0x80,0x96,0x12,0x25,0x08,0x7f,0x04,0x7e,
57079 +0x08,0x12,0x2b,0x08,0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,
57080 +0x90,0x9e,0x1e,0xf0,0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,
57081 +0x59,0xc2,0xaf,0x90,0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x4a,0xc1,0x7d,
57082 +0x40,0x7f,0x01,0x12,0x31,0x66,0xe5,0x59,0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,
57083 +0x45,0x12,0x4a,0xc1,0x90,0x04,0xfd,0xe4,0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,
57084 +0x9e,0x24,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,
57085 +0x9e,0x26,0xf0,0x90,0x9e,0x29,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,
57086 +0xf0,0xa3,0xf0,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,
57087 +0x9e,0x2e,0xf0,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,
57088 +0x00,0x51,0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x02,0x4a,0xc1,0x90,0x9e,0x15,0xe0,0xc3,
57089 +0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0xc1,0x33,0x90,0x9e,0x15,0xe0,0x64,0x14,0x60,
57090 +0x02,0xc1,0x33,0x90,0x9e,0x24,0xe0,0x70,0x25,0x90,0x9e,0x27,0xe0,0x70,0x1f,0x90,
57091 +0x9e,0x25,0xe0,0x70,0x19,0x90,0x9e,0x28,0xe0,0x70,0x13,0x90,0x9e,0x26,0xe0,0x70,
57092 +0x0d,0x90,0x9e,0x29,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,0x54,0xfe,0xf0,0x90,0x9e,
57093 +0x24,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x25,0xe0,0x90,0x04,0x45,0xf0,0x90,0x9e,
57094 +0x26,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x27,0xe0,0x90,0x04,0x48,
57095 +0xf0,0x90,0x9e,0x28,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,0x29,0xe0,0x90,0x04,0x4a,
57096 +0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x10,0xe0,0x90,0x04,0x4c,0xf0,0x90,0x9e,0x11,0xe0,
57097 +0x90,0x04,0x4d,0xf0,0x90,0x9e,0x12,0xe0,0x90,0x04,0x4e,0xf0,0x90,0x9e,0x13,0xe0,
57098 +0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x15,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,
57099 +0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x24,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
57100 +0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x34,0xf0,0x90,0x05,0x61,0xe0,0x90,
57101 +0x9e,0x35,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x36,0xf0,0x90,0x05,0x63,0xe0,0x90,
57102 +0x9e,0x37,0xf0,0x90,0x9e,0x2d,0xe0,0xff,0x90,0x9e,0x37,0xe0,0xfe,0xd3,0x9f,0x50,
57103 +0x0b,0x90,0x9e,0x2d,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,0x11,0x90,0x9e,0x1b,0xe0,
57104 +0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x1f,0xe0,0xff,0x12,0x4e,0xd8,0x22,0x90,0x9e,
57105 +0x2e,0xe0,0x64,0x01,0x60,0x08,0x90,0x9e,0x1c,0xe0,0x60,0x02,0xe1,0x55,0x90,0x9e,
57106 +0x10,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x11,0xe0,
57107 +0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x12,0xe0,0xc3,
57108 +0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x11,0xf0,0x80,0x15,0x90,0x9e,
57109 +0x13,0xe0,0xc3,0x94,0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x12,0xf0,0x90,
57110 +0x9e,0x11,0xf0,0x90,0x9e,0x10,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,
57111 +0x30,0xe2,0x32,0x90,0x9e,0x24,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,
57112 +0x24,0x90,0x9e,0x25,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,
57113 +0x90,0x9e,0x26,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x25,
57114 +0xf0,0x90,0x9e,0x24,0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x27,0xe0,
57115 +0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x28,0xe0,0xc3,0x94,
57116 +0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x29,0xe0,0xc3,0x94,0xff,
57117 +0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x04,
57118 +0xfd,0xe0,0x44,0x01,0xf0,0x22,0xf5,0x67,};
57119
57120 -// =================== v80 UMC B Cut COMMON 2011-12-14 =====================
57121 +// =================== v84 UMC B Cut COMMON 2012-04-13 =====================
57122 u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImgArrayLength] = {
57123 -0xc2,0x88,0x02,0x00,0x50,0x00,0x00,0x00,0x12,0x14,0x16,0x10,0xc0,0x3e,0x01,0x00,
57124 -0x25,0x86,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57125 +0xc2,0x88,0x02,0x00,0x54,0x00,0x01,0x00,0x04,0x13,0x11,0x08,0x26,0x3d,0x01,0x00,
57126 +0x58,0x97,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57127 0x02,0x43,0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57128 -0x00,0x00,0x00,0x02,0x48,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57129 +0x00,0x00,0x00,0x02,0x50,0xa1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57130 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57131 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57132 -0x00,0x00,0x00,0x02,0x5e,0xff,0x00,0x00,0x00,0x00,0x00,0xa1,0xd4,0x00,0x00,0x00,
57133 +0x00,0x00,0x00,0x02,0x57,0x91,0x00,0x00,0x00,0x00,0x00,0xa1,0xe8,0x00,0x00,0x00,
57134 0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
57135 0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
57136 0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
57137 @@ -5168,7 +2091,7 @@ u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImgArrayLength] = {
57138 0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,0xa3,0xea,0xf0,
57139 0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,
57140 0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,
57141 -0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x50,0x2e,
57142 +0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x02,0x43,0xf8,0x02,0x48,0x29,
57143 0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,
57144 0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,
57145 0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,
57146 @@ -5176,833 +2099,797 @@ u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImgArrayLength] = {
57147 0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,
57148 0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,
57149 0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,
57150 -0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x4f,
57151 -0x00,0x41,0x9e,0xad,0x00,0x41,0x9e,0x61,0x80,0x41,0x9e,0x62,0x80,0x41,0x9e,0xaf,
57152 -0x00,0x00,0xf0,0x90,0x9e,0x6b,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,
57153 -0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x85,0xeb,0xf0,0xa3,0xe0,
57154 -0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,0x45,0x12,0x35,0xab,0xd0,0xd0,0x92,0xaf,0x22,
57155 -0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x86,0xf0,
57156 -0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,
57157 -0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x70,
57158 -0x14,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x02,0xf1,0x2b,0x22,0x8f,0x82,
57159 -0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0xe4,0xf5,0x71,0x7f,0x60,0x7e,0x01,0x80,
57160 -0xed,0x7d,0x01,0xaf,0x24,0xe1,0x2f,0xb1,0xa6,0xbf,0x01,0x0f,0x90,0x9e,0x51,0xe0,
57161 -0xff,0xe4,0xfd,0xf1,0xd0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x53,0x23,0xf0,0x43,
57162 -0x23,0x01,0x91,0xfd,0x91,0xfe,0x53,0x23,0xf0,0x43,0x23,0x02,0x22,0x22,0x22,0x22,
57163 -0x22,0x00,0x00,0x02,0x5f,0x91,0x02,0x5f,0x98,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
57164 -0x8b,0x1b,0x8a,0x1c,0x89,0x1d,0x90,0x9e,0x88,0x71,0x8b,0xab,0x1e,0xaa,0x1f,0xa9,
57165 -0x20,0x90,0x9e,0x8b,0x71,0x8b,0xaf,0x21,0x15,0x21,0xef,0x60,0x1b,0x90,0x9e,0x8b,
57166 -0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x29,0xd9,0xff,0x90,0x9e,0x88,0xe4,0x75,0xf0,
57167 -0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x1b,0xaa,0x1c,0xa9,0x1d,0xd0,0xd0,
57168 -0x92,0xaf,0x22,0x90,0x06,0xa9,0xe0,0x90,0x9e,0x2f,0xf0,0xe0,0x54,0xc0,0x70,0x08,
57169 -0x53,0x26,0xfe,0x53,0x26,0xfd,0x91,0xd1,0x90,0x9e,0x2f,0xe0,0x30,0xe6,0x13,0x43,
57170 -0x26,0x01,0x90,0x9e,0x73,0xe0,0x64,0x02,0x60,0x04,0x91,0xd7,0x80,0x07,0x91,0x80,
57171 -0x80,0x03,0x53,0x26,0xfe,0x90,0x9e,0x2f,0xe0,0x30,0xe7,0x16,0x43,0x26,0x02,0xe4,
57172 -0x90,0x9e,0x86,0x91,0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x74,0x74,0x01,
57173 -0xf0,0x22,0x53,0x26,0xfd,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x04,0x1d,
57174 -0xe0,0x60,0x1a,0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,0xe0,0x44,
57175 -0x40,0xf0,0x90,0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,
57176 -0xd0,0x92,0xaf,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,
57177 -0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,
57178 -0x07,0x90,0x01,0xc4,0x74,0xd4,0xf0,0x74,0x45,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,
57179 -0x3c,0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,
57180 -0xf5,0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,
57181 -0x74,0x01,0xf0,0xe5,0x34,0x30,0xe1,0x09,0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x65,
57182 -0xf6,0xe5,0x34,0x30,0xe2,0x38,0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,
57183 -0x30,0xe0,0x24,0x90,0x9e,0x86,0xe4,0xf0,0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,
57184 -0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x91,0x62,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,
57185 -0x06,0x92,0x74,0x01,0xf0,0x80,0x07,0x90,0x9e,0x71,0xe4,0xf0,0x91,0xd1,0xe5,0x34,
57186 -0x30,0xe3,0x38,0x90,0x01,0x3c,0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,
57187 -0x90,0x9e,0x86,0xe4,0xf0,0x90,0x9e,0x69,0xe0,0x90,0x9e,0x87,0xf0,0xe4,0xfb,0xfd,
57188 -0x7f,0x5c,0x7e,0x01,0x91,0x62,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,
57189 -0x02,0xf0,0x80,0x07,0x90,0x9e,0x70,0xe4,0xf0,0x91,0xd1,0xe5,0x34,0x30,0xe4,0x09,
57190 -0x90,0x01,0x3c,0x74,0x10,0xf0,0x12,0x73,0x53,0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,
57191 -0x3c,0x74,0x20,0xf0,0x12,0x52,0x64,0xe5,0x35,0x30,0xe0,0x18,0x90,0x01,0x3d,0x74,
57192 -0x01,0xf0,0x90,0x01,0x2f,0xe0,0x44,0x7f,0xf0,0x90,0x00,0x83,0xe0,0xf5,0x24,0x12,
57193 -0x64,0xd0,0x91,0xd1,0xe5,0x35,0x30,0xe2,0x06,0x90,0x01,0x3d,0x74,0x04,0xf0,0xe5,
57194 -0x36,0x30,0xe0,0x06,0x90,0x01,0x3e,0x74,0x01,0xf0,0xe5,0x36,0x30,0xe1,0x06,0x90,
57195 -0x01,0x3e,0x74,0x02,0xf0,0x74,0xd4,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,
57196 -0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,
57197 -0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x7d,0x01,0x7f,0x0c,0x90,
57198 -0x9e,0xa6,0xed,0xf0,0x90,0x9e,0xa5,0xef,0xf0,0x54,0x0f,0xff,0xe5,0x23,0x54,0x0f,
57199 -0x6f,0x60,0x70,0x90,0x9e,0xa5,0xe0,0x30,0xe2,0x2a,0xe5,0x23,0x20,0xe2,0x05,0x7f,
57200 -0x01,0x12,0x63,0xea,0xe5,0x23,0x30,0xe3,0x09,0x90,0x9e,0xa5,0xe0,0x20,0xe3,0x02,
57201 -0x80,0x52,0xe5,0x23,0x20,0xe3,0x4c,0x90,0x9e,0xa5,0xe0,0x30,0xe3,0x45,0xa3,0xe0,
57202 -0xff,0x02,0x5e,0x95,0xe5,0x23,0x54,0x0f,0xff,0xbf,0x0c,0x0f,0x90,0x9e,0xa5,0xe0,
57203 -0x20,0xe3,0x08,0x12,0x62,0xce,0xef,0x60,0x2a,0xf1,0xb4,0xe5,0x23,0x54,0x0f,0xff,
57204 -0xbf,0x04,0x10,0x90,0x9e,0xa5,0xe0,0x20,0xe2,0x09,0x12,0x63,0x17,0xef,0x60,0x13,
57205 -0x12,0x61,0x3a,0xe5,0x23,0x54,0x0f,0xff,0xbf,0x02,0x08,0x12,0x63,0x7a,0xef,0x60,
57206 -0x02,0x91,0xec,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x22,0xb4,0x01,0x05,
57207 -0x7f,0x01,0x12,0x5e,0x5c,0x53,0x23,0xf0,0x43,0x23,0x04,0x22,0xe0,0xff,0x7d,0x01,
57208 -0x90,0x9e,0x99,0xef,0xf0,0xa3,0xed,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x25,0x60,
57209 -0x05,0xe4,0xff,0x12,0x61,0x1f,0x90,0x9e,0x99,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9b,
57210 -0xe4,0xf0,0xa3,0x74,0x80,0xf0,0x90,0x9e,0x99,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,
57211 -0xf0,0x90,0x04,0x25,0xef,0xf0,0x90,0x9e,0x9a,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,
57212 -0x24,0x0f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,
57213 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9b,0xa3,0xe0,
57214 -0xff,0xfd,0x24,0x08,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,
57215 -0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,
57216 -0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf7,0xf0,0x90,0x9e,0x9b,0xe0,0xfe,0xa3,0xe0,
57217 -0xff,0x22,0x12,0x45,0xa6,0xbf,0x01,0x10,0x90,0x02,0x09,0xe0,0xff,0x7d,0x01,0x12,
57218 -0x47,0xd0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,
57219 -0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,
57220 -0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0x79,0xf0,0x74,0x48,0xa3,0xf0,
57221 -0x90,0x01,0x34,0xe0,0x55,0x28,0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,
57222 -0xa3,0xe0,0x55,0x2b,0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x41,0x17,0x90,0x01,0x34,
57223 -0x74,0x01,0xf0,0x85,0xd1,0x08,0x85,0xd2,0x09,0x85,0xd3,0x0a,0x85,0xd4,0x0b,0x85,
57224 -0xd5,0x0c,0x85,0xd6,0x0d,0x85,0xd7,0x0e,0x85,0xd9,0x0f,0xe5,0x0f,0x54,0x40,0xc3,
57225 -0x13,0xff,0xe5,0x0e,0x54,0x20,0x6f,0x70,0x02,0x21,0xc9,0xe5,0x0f,0x30,0xe5,0x02,
57226 -0x21,0xc9,0xe5,0x0d,0x54,0x3f,0xf5,0x4d,0xe5,0x08,0x54,0x3f,0xf5,0x4e,0xe5,0x0c,
57227 -0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,
57228 -0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,
57229 -0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4e,
57230 -0xd3,0x94,0x04,0x40,0x03,0x75,0x4e,0x04,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,0x00,
57231 -0x12,0x43,0x5f,0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,
57232 -0xe5,0x0e,0x54,0x1f,0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x4d,0x90,0x90,
57233 -0x00,0x12,0x43,0x5f,0x75,0xf0,0x02,0xe5,0x4e,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,
57234 -0xf0,0xe5,0x0f,0x20,0xe6,0x24,0xe5,0x0e,0x54,0x1f,0xff,0xe5,0x4d,0x25,0xe0,0x24,
57235 -0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x0a,
57236 -0x30,0xe7,0x36,0xaf,0x4d,0x12,0x5b,0x68,0x80,0x2f,0xe5,0x0e,0x54,0x1f,0xff,0xe5,
57237 -0x4d,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
57238 -0x42,0x81,0xe5,0x0a,0x30,0xe7,0x12,0xe5,0x0a,0x54,0x7f,0xfd,0xe5,0x0e,0x54,0x1f,
57239 -0xf5,0x53,0xab,0x4e,0xaf,0x4d,0x12,0x5b,0x05,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,
57240 -0x80,0x45,0x90,0x9e,0x73,0xe0,0x60,0x37,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,
57241 -0x74,0x04,0xf0,0x71,0xc4,0xef,0x64,0x01,0x70,0x2d,0x90,0x9e,0x69,0xe0,0xf5,0x44,
57242 -0x75,0x45,0x00,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x35,0xab,0x90,0x01,0x5b,
57243 -0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x9e,0x71,0xf0,0x80,0x08,0x71,
57244 -0xc4,0xbf,0x01,0x03,0x12,0x44,0xd1,0xe5,0x2c,0x30,0xe1,0x21,0x90,0x01,0x34,0x74,
57245 -0x02,0xf0,0x85,0xd1,0x13,0x85,0xd2,0x14,0x85,0xd3,0x15,0x85,0xd4,0x16,0x85,0xd5,
57246 -0x17,0x85,0xd6,0x18,0x85,0xd7,0x19,0x85,0xd9,0x1a,0x12,0x5c,0x46,0xe5,0x2c,0x30,
57247 -0xe3,0x06,0x90,0x01,0x34,0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,
57248 -0x74,0x10,0xf0,0x43,0x12,0x10,0xe5,0x2c,0x30,0xe5,0x24,0x90,0x01,0xcf,0xe0,0x30,
57249 -0xe5,0x1d,0xe0,0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,
57250 -0xe8,0x00,0xd1,0xdb,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x71,0xdb,0x80,0xfe,0xe5,
57251 +0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x41,0x9e,0x77,
57252 +0x00,0x41,0x9e,0xae,0x00,0x41,0x9e,0x54,0x80,0x41,0x9e,0xb0,0x00,0x00,0xf0,0x90,
57253 +0x9e,0x5d,0xe0,0x90,0x9e,0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0xd3,0x10,
57254 +0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x85,0xe0,0xfb,0xa3,0xe0,0xf5,0x44,0xe4,0xf5,
57255 +0x45,0x12,0x35,0xab,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,
57256 +0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x85,0xf0,0x90,0x9e,0x5b,0xe0,0x90,0x9e,0x86,
57257 +0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,0x5e,0x90,0x01,0x5f,0x74,0x05,0xf0,
57258 +0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,0x63,0x14,0xf0,0xe5,0x61,0x54,0x0f,0xc3,
57259 +0x94,0x0c,0x50,0x03,0x12,0x54,0xe3,0x22,0x8f,0x82,0x8e,0x83,0xa3,0xa3,0xa3,0xe4,
57260 +0xf0,0x22,0xe4,0xf5,0x65,0x7f,0x60,0x7e,0x01,0x80,0xed,0x7d,0x01,0xaf,0x62,0x02,
57261 +0x54,0xe7,0xb1,0xb0,0xbf,0x01,0x12,0x90,0x9e,0x79,0xe0,0xff,0xe4,0xfd,0xf1,0x79,
57262 +0x12,0x5f,0xf7,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xb1,0xb0,0xbf,0x01,0x0f,0x90,
57263 +0x02,0x09,0xe0,0xff,0x7d,0x01,0xf1,0x79,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x22,
57264 +0x22,0x22,0x00,0x02,0x45,0x03,0x02,0x45,0x06,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
57265 +0x8b,0x20,0x8a,0x21,0x89,0x22,0x90,0x9e,0x87,0x71,0x8b,0xab,0x23,0xaa,0x24,0xa9,
57266 +0x25,0x90,0x9e,0x8a,0x71,0x8b,0xaf,0x26,0x15,0x26,0xef,0x60,0x1b,0x90,0x9e,0x8a,
57267 +0xe4,0x75,0xf0,0x01,0x71,0x74,0x12,0x29,0xd9,0xff,0x90,0x9e,0x87,0xe4,0x75,0xf0,
57268 +0x01,0x71,0x74,0xef,0x51,0x4d,0x80,0xde,0xab,0x20,0xaa,0x21,0xa9,0x22,0xd0,0xd0,
57269 +0x92,0xaf,0x22,0x90,0x9e,0x11,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0x90,0x06,0xa9,
57270 +0xe0,0x90,0x9e,0x10,0xf0,0xe0,0x54,0xc0,0x70,0x08,0x53,0x64,0xfe,0x53,0x64,0xfd,
57271 +0x91,0xcb,0x90,0x9e,0x10,0xe0,0x30,0xe6,0x13,0x43,0x64,0x01,0x90,0x9e,0x66,0xe0,
57272 +0x64,0x02,0x60,0x04,0x91,0xd2,0x80,0x07,0x91,0x79,0x80,0x03,0x53,0x64,0xfe,0x90,
57273 +0x9e,0x10,0xe0,0x30,0xe7,0x16,0x43,0x64,0x02,0xe4,0x90,0x9e,0x85,0x91,0x4e,0x90,
57274 +0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x67,0x74,0x01,0xf0,0x22,0x53,0x64,0xfd,0x22,
57275 +0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x01,0xc4,0x74,0xb0,0xf0,0x74,0x45,0xa3,
57276 +0xf0,0x90,0x04,0x1d,0xe0,0x60,0x1a,0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,
57277 +0x01,0xc6,0xe0,0x44,0x40,0xf0,0x90,0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,
57278 +0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,
57279 +0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,
57280 +0x05,0xc0,0x06,0xc0,0x07,0x75,0x13,0x00,0x90,0x01,0xc4,0x74,0xe8,0xf0,0x74,0x45,
57281 +0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,0x3c,0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,
57282 +0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,0xf5,0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,
57283 +0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,0x74,0x01,0xf0,0xe5,0x34,0x30,0xe1,0x09,0x90,
57284 +0x01,0x3c,0x74,0x02,0xf0,0x12,0x61,0xc9,0xe5,0x34,0x30,0xe2,0x38,0x90,0x01,0x3c,
57285 +0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe0,0x24,0x90,0x9e,0x85,0xe4,0xf0,0x90,
57286 +0x9e,0x5b,0xe0,0x90,0x9e,0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x91,0x5e,
57287 +0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x80,0x07,0x90,0x9e,
57288 +0x64,0xe4,0xf0,0x91,0xcb,0xe5,0x34,0x30,0xe3,0x38,0x90,0x01,0x3c,0x74,0x08,0xf0,
57289 +0x90,0x06,0x92,0xe0,0x30,0xe1,0x24,0x90,0x9e,0x85,0xe4,0xf0,0x90,0x9e,0x5b,0xe0,
57290 +0x90,0x9e,0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x91,0x5e,0x90,0x01,0x5f,
57291 +0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x80,0x07,0x90,0x9e,0x63,0xe4,0xf0,
57292 +0x91,0xcb,0xe5,0x34,0x30,0xe4,0x09,0x90,0x01,0x3c,0x74,0x10,0xf0,0x12,0x4b,0xfb,
57293 +0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,0x3c,0x74,0x20,0xf0,0x12,0x4c,0x3d,0xe5,0x35,
57294 +0x30,0xe0,0x44,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,0x01,0x2f,0xe0,0x44,0x7f,0xf0,
57295 +0x90,0x00,0x83,0xe0,0x54,0x0f,0xf5,0x13,0xb4,0x01,0x02,0x80,0x1c,0xe5,0x13,0xb4,
57296 +0x02,0x05,0x90,0x00,0x83,0x80,0x12,0xe5,0x13,0xb4,0x04,0x05,0x90,0x00,0x83,0x80,
57297 +0x08,0xe5,0x13,0xb4,0x0c,0x06,0x90,0x00,0x83,0xe0,0xf5,0x62,0x90,0x01,0xbb,0xe5,
57298 +0x62,0xf0,0x12,0x60,0xc0,0x91,0xcb,0xe5,0x35,0x30,0xe2,0x06,0x90,0x01,0x3d,0x74,
57299 +0x04,0xf0,0xe5,0x35,0x30,0xe4,0x06,0x90,0x01,0x3d,0x74,0x10,0xf0,0xe5,0x36,0x30,
57300 +0xe0,0x06,0x90,0x01,0x3e,0x74,0x01,0xf0,0xe5,0x36,0x30,0xe1,0x06,0x90,0x01,0x3e,
57301 +0x74,0x02,0xf0,0x74,0xe8,0x04,0x90,0x01,0xc4,0xf0,0x74,0x45,0xa3,0xf0,0xd0,0x07,
57302 +0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,
57303 +0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x9e,0x98,0xef,0xf0,0xa3,0xed,
57304 +0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x63,0x60,0x05,0xe4,0xff,0x12,0x54,0x97,0x90,
57305 +0x9e,0x98,0xe0,0x30,0xe0,0x09,0x90,0x9e,0x9a,0xe4,0xf0,0xa3,0x74,0x80,0xf0,0x90,
57306 +0x9e,0x98,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,0x25,0xef,0xf0,0x90,
57307 +0x9e,0x99,0xe0,0x60,0x1f,0xa3,0xa3,0xe0,0xff,0x24,0x0f,0xf5,0x82,0xe4,0x34,0xfc,
57308 +0xf5,0x83,0xe0,0x44,0x80,0xf0,0x74,0x10,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
57309 +0xe0,0x44,0x80,0xf0,0x90,0x9e,0x9a,0xa3,0xe0,0xff,0xfd,0x24,0x08,0xf5,0x82,0xe4,
57310 +0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
57311 +0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,
57312 +0xf7,0xf0,0x90,0x9e,0x9a,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0x75,0x28,0x33,0xe4,0xf5,
57313 +0x29,0x75,0x2a,0x07,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,
57314 +0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0xe4,0x90,0x9e,0x16,0xf0,0xa3,0xf0,
57315 +0x75,0x8e,0x02,0xf1,0xa1,0xf1,0xe9,0x90,0x9e,0x7e,0xef,0xf0,0xf1,0xdd,0x90,0x9e,
57316 +0x80,0xef,0xf0,0xf1,0xf6,0x90,0x9e,0x75,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xf5,0x57,
57317 +0x12,0x6e,0x77,0xf1,0xd4,0x12,0x60,0x4b,0x12,0x32,0x3d,0xf1,0xc9,0x11,0x0b,0x12,
57318 +0x50,0x0e,0xf1,0xcd,0xf1,0xb1,0x12,0x44,0xff,0xf1,0x45,0x90,0x9e,0x18,0xe5,0xd9,
57319 +0xf0,0x11,0xd0,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,0xf0,0xb1,0x45,0x75,0xe8,
57320 +0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x9e,0x16,0xe0,0x64,0x01,0xf0,0x24,0x29,0x90,
57321 +0x01,0xc4,0xf0,0x74,0x48,0xa3,0xf0,0xe5,0x57,0x30,0xe4,0x0a,0xc2,0xaf,0x53,0x57,
57322 +0xef,0xd2,0xaf,0x12,0x58,0x74,0xe5,0x57,0x30,0xe6,0x17,0xc2,0xaf,0x53,0x57,0xbf,
57323 +0xd2,0xaf,0x12,0x67,0xa1,0x90,0x9e,0x43,0xe0,0xff,0x60,0x03,0xb4,0x01,0x03,0x12,
57324 +0x7b,0x49,0x90,0x9e,0x43,0xe0,0x70,0x03,0x12,0x7c,0x4c,0x12,0x73,0x85,0x80,0xb6,
57325 +0x90,0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,
57326 +0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x54,0x31,0x05,0x7d,0xff,0x7f,0x55,0x31,0x05,0x7d,
57327 +0xff,0x7f,0x56,0x31,0x05,0x7d,0xff,0x7f,0x57,0x80,0x0a,0xf0,0x90,0x00,0x45,0xe0,
57328 +0x54,0xfe,0xfd,0x7f,0x45,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,
57329 +0x00,0xed,0xf0,0xb1,0x45,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,
57330 +0x66,0x24,0x02,0x60,0x02,0x21,0xc1,0x90,0x9e,0x3f,0x74,0x02,0xf0,0x90,0x00,0x48,
57331 +0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x31,0x05,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,
57332 +0x47,0x31,0x05,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,
57333 +0x9e,0x3f,0xf0,0x90,0x9e,0x3b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
57334 +0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x31,
57335 +0x05,0x90,0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,0x45,0x31,0x05,0x90,0x00,0x46,0xe0,
57336 +0x44,0x10,0xfd,0x7f,0x46,0x80,0x38,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x90,0x9e,0x45,
57337 +0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,
57338 +0x90,0x00,0x45,0xe0,0x44,0x20,0xfd,0x7f,0x45,0x31,0x05,0x90,0x00,0x45,0xe0,0x44,
57339 +0x10,0xfd,0x7f,0x45,0x31,0x05,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x31,
57340 +0x05,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x41,0xf0,0x90,0x00,0x01,0x12,
57341 +0x42,0x20,0x25,0xe0,0x25,0xe0,0x90,0x9e,0x40,0xf0,0x12,0x29,0xd9,0x25,0xe0,0x25,
57342 +0xe0,0x90,0x9e,0x44,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x4f,0xf0,0x90,0x05,0x61,
57343 +0xe0,0x90,0x9e,0x50,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x51,0xf0,0x90,0x05,0x63,
57344 +0xe0,0x90,0x9e,0x52,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,0x90,
57345 +0x9e,0x40,0xe0,0xff,0x91,0xf0,0x90,0x9e,0x24,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,
57346 +0x41,0xe0,0x70,0x02,0x41,0xc8,0x90,0x9e,0x40,0xe0,0x70,0x02,0x41,0xc8,0x90,0x9e,
57347 +0x44,0xe0,0x70,0x02,0x41,0xc8,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,
57348 +0x90,0x9e,0x53,0x74,0x01,0xf0,0x90,0x9e,0x24,0xe0,0x24,0xff,0x92,0xaf,0x11,0xfc,
57349 +0x90,0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x31,0x05,0x90,0x9e,0x39,0xe0,0x60,
57350 +0x15,0x90,0x9e,0x45,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,
57351 +0x08,0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,
57352 +0x54,0xef,0xfd,0x7f,0x45,0x31,0x05,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,
57353 +0x4f,0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x50,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,
57354 +0x51,0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x52,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,
57355 +0xe4,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,
57356 +0x20,0xe4,0xff,0x12,0x37,0x00,0x80,0x2b,0x90,0x9e,0x41,0xe0,0x70,0x2d,0x90,0x9e,
57357 +0x53,0x11,0xfb,0x90,0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x31,0x05,0x90,0x05,
57358 +0x22,0xe4,0xf0,0xa2,0xaf,0x33,0x90,0x9e,0x24,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,
57359 +0x12,0x36,0x92,0x90,0x9e,0x24,0xe0,0x24,0xff,0x92,0xaf,0x22,0x8b,0x14,0x8a,0x15,
57360 +0x89,0x16,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x42,0xf0,0xe0,0x30,0xe0,0x4b,
57361 +0x90,0x9e,0x39,0x74,0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x3b,
57362 +0x12,0x2a,0x7f,0xab,0x14,0xaa,0x15,0xa9,0x16,0x90,0x00,0x01,0x12,0x42,0x20,0xff,
57363 +0xe4,0xfc,0xfd,0xfe,0x78,0x1a,0x12,0x2a,0x6c,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,
57364 +0x07,0x90,0x9e,0x3b,0x12,0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,
57365 +0x45,0x12,0x2a,0x7f,0x90,0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x39,0xf0,
57366 +0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,
57367 +0x9e,0x3b,0x12,0x2a,0x7f,0x90,0x9e,0x3b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,
57368 +0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x42,0xe0,0x30,0xe1,0x19,0x7d,
57369 +0x0c,0x7f,0x47,0x31,0x05,0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x31,0x05,
57370 +0x90,0x00,0x46,0xe0,0x44,0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,
57371 +0x47,0x31,0x05,0x90,0x00,0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x31,0x05,0x90,0x00,
57372 +0x46,0xe0,0x54,0xef,0xfd,0x7f,0x46,0x31,0x05,0xe4,0x90,0x9e,0x3f,0xf0,0x22,0x90,
57373 +0x01,0x30,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,
57374 +0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x50,0x31,0x05,0xe4,0xfd,0x7f,0x51,0x31,0x05,0xe4,
57375 +0xfd,0x7f,0x52,0x31,0x05,0xe4,0xfd,0x7f,0x53,0x21,0x05,0xe5,0x65,0x64,0x01,0x70,
57376 +0x3b,0xd1,0x85,0xbf,0x01,0x04,0x7f,0x01,0xd1,0x79,0x90,0x00,0x46,0xe0,0x44,0x04,
57377 +0xfd,0x7f,0x46,0x31,0x05,0x90,0x00,0x44,0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x31,0x05,
57378 +0x90,0x00,0x46,0xe0,0x54,0xfb,0xfd,0x7f,0x46,0x31,0x05,0x7f,0x02,0xd1,0xa1,0x8f,
57379 +0x69,0x90,0x01,0xc9,0xe5,0x69,0xf0,0xb4,0x01,0x02,0xd1,0x19,0x22,0x90,0x9e,0x41,
57380 +0xe0,0x64,0x01,0x60,0x02,0x81,0xef,0x90,0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,
57381 +0x31,0x05,0x90,0x9e,0x53,0xe0,0x70,0x31,0x90,0x9e,0x39,0xe0,0x60,0x15,0x90,0x9e,
57382 +0x45,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,
57383 +0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x9e,0x40,0xe0,0xff,0x91,0xf0,
57384 +0x90,0x9e,0x53,0x74,0x01,0x11,0xfb,0x80,0x3f,0x90,0x9e,0x53,0xe0,0x64,0x01,0x70,
57385 +0x37,0x90,0x9e,0x44,0xe0,0xff,0x91,0xf0,0xe4,0x90,0x9e,0x53,0xf0,0x90,0x00,0x45,
57386 +0xe0,0x44,0x01,0xfd,0x7f,0x45,0x31,0x05,0x90,0x9e,0x39,0xe0,0x60,0x15,0x90,0x9e,
57387 +0x3b,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,
57388 +0xd9,0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,
57389 +0x9e,0x4f,0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x50,0xe0,0x90,0x05,0x85,0xf0,0x90,
57390 +0x9e,0x51,0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x52,0xe0,0x90,0x05,0x87,0xf0,0x22,
57391 +0x90,0x05,0x60,0xe0,0x90,0x9e,0x4f,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x50,0xf0,
57392 +0x90,0x05,0x62,0xe0,0x90,0x9e,0x51,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x52,0xf0,
57393 +0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x50,0xe0,0xd3,0x9e,0x40,0x1e,0xe0,0x2f,0xf0,
57394 +0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,0xe0,0xb4,0xff,0x03,0xe4,0xf0,0x22,0x90,
57395 +0x9e,0x52,0x80,0x03,0x90,0x9e,0x51,0xe0,0x04,0xf0,0x22,0x90,0x9e,0x50,0xe0,0x2f,
57396 +0xf0,0x22,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x7f,0x10,0xdf,0xfe,
57397 +0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x2a,0xed,
57398 +0xf0,0x90,0x9e,0x29,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4e,0xa3,0xe0,0x70,0x1a,0x90,
57399 +0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
57400 +0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,
57401 +0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,
57402 +0xb1,0x45,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
57403 +0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0x80,0x59,0x90,0x9e,0x29,0xe0,0x24,0xf8,0xf0,
57404 +0xa3,0xe0,0x70,0x1d,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
57405 +0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,
57406 +0x1a,0x90,0x9e,0x29,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
57407 +0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,0x43,0xe0,0x4f,0xf0,0xb1,0x45,0x90,0x9e,0x29,
57408 +0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,
57409 +0x00,0x43,0xb1,0x42,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,0xb1,
57410 +0xf0,0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x31,0x05,0x90,0x9e,0xb1,0xe0,
57411 +0x44,0xb0,0xfd,0x7f,0x49,0x21,0x05,0x90,0x9e,0x27,0xee,0xf0,0xa3,0xef,0xf0,0x75,
57412 +0x65,0x01,0x8e,0x66,0xf5,0x67,0xe4,0xfd,0x7f,0x0b,0xb1,0x55,0xe4,0xfd,0x7f,0x02,
57413 +0xb1,0x55,0xd1,0x85,0xe4,0xff,0xd1,0x79,0xe4,0xf5,0x69,0x90,0x01,0xc9,0xe5,0x69,
57414 +0xf0,0x90,0x9e,0x27,0xe0,0xfc,0xa3,0xe0,0xfd,0xec,0xfb,0x8d,0x44,0xe4,0xf5,0x45,
57415 +0x7d,0x01,0x7f,0x60,0x7e,0x01,0x02,0x35,0xab,0x90,0x01,0xca,0xe5,0x68,0xf0,0xef,
57416 +0x60,0x02,0xd1,0x19,0x22,0x7f,0x0b,0xd1,0xa1,0xef,0x65,0x68,0x60,0x10,0xe5,0x68,
57417 +0xb4,0x01,0x05,0xe4,0xf5,0x68,0x80,0x03,0x75,0x68,0x01,0x7f,0x01,0x22,0x7f,0x00,
57418 +0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xb2,0xef,0xf0,0xd3,0x94,0x07,
57419 +0x50,0x43,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
57420 +0xff,0x90,0x00,0x46,0xb1,0x42,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,
57421 +0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,
57422 +0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,
57423 +0xd8,0xf8,0xff,0x80,0x4b,0x90,0x9e,0xb2,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,
57424 +0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,
57425 +0xf0,0xb1,0x45,0x90,0x9e,0xb2,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,
57426 +0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x42,0xe0,0xfb,0xe4,0xfe,
57427 +0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,
57428 +0xd0,0xd0,0x92,0xaf,0x22,0xe4,0xfd,0x7f,0x45,0x31,0x05,0x90,0x04,0xfd,0xe4,0xf0,
57429 +0xa3,0xf0,0x90,0x9e,0x43,0xf0,0x90,0x9e,0x49,0xf0,0x90,0x9e,0x4c,0xf0,0x90,0x9e,
57430 +0x4a,0xf0,0x90,0x9e,0x4d,0xf0,0x90,0x9e,0x4b,0xf0,0x90,0x9e,0x4e,0xf0,0x90,0x9e,
57431 +0x35,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,
57432 +0x3f,0xf0,0x90,0x9e,0x41,0xf0,0x90,0x9e,0x53,0xf0,0x90,0x9e,0x44,0xf0,0x90,0x9e,
57433 +0x40,0xf0,0x90,0x9e,0x39,0xf0,0x90,0x00,0x51,0xe0,0x44,0xc0,0xfd,0x7f,0x51,0x21,
57434 +0x05,0xe4,0x90,0x9e,0x7d,0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,0x7f,0x80,0x21,
57435 +0x05,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,0x01,0x38,0xe5,0x30,0xf0,
57436 +0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0xe4,0xf5,0x68,0x22,0x90,0x01,0x64,
57437 +0x74,0xa0,0xf0,0x22,0x90,0x9e,0x80,0xe0,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0xf3,
57438 +0xe0,0x7f,0x00,0x30,0xe3,0x02,0x7f,0x01,0x22,0x90,0x00,0x02,0xe0,0x54,0xe0,0x7f,
57439 +0x01,0x60,0x02,0x7f,0x00,0x22,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x0c,0x90,0x00,0xf2,
57440 +0xe0,0x30,0xe7,0x05,0x7e,0xfd,0x7f,0x33,0x22,0x7e,0xfd,0x7f,0x2f,0x22,0x90,0x00,
57441 +0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,0xf0,0xa3,
57442 +0xe4,0xf0,0x22,0x90,0x01,0x02,0xe0,0x54,0x03,0xff,0xe0,0x54,0x0c,0x13,0x13,0x54,
57443 +0x3f,0xfe,0xef,0x64,0x01,0x60,0x04,0xef,0xb4,0x03,0x10,0x90,0x9e,0x10,0x74,0x01,
57444 +0xf0,0xa3,0x74,0x37,0xf0,0xa3,0x74,0x01,0xf0,0x80,0x1a,0xee,0x64,0x01,0x60,0x07,
57445 +0xaf,0x06,0xee,0x64,0x03,0x70,0x49,0x90,0x9e,0x10,0x74,0x01,0xf0,0xa3,0x74,0x3d,
57446 +0xf0,0xa3,0x74,0x40,0xf0,0x90,0x9e,0x10,0xe0,0xfe,0xa3,0xe0,0xff,0xf5,0x82,0x8e,
57447 +0x83,0xe0,0xfd,0x90,0x9e,0x12,0xe0,0xfc,0xed,0x5c,0x60,0x0c,0x8f,0x82,0x8e,0x83,
57448 +0xec,0xf0,0xe4,0x90,0x9e,0x77,0xf0,0x22,0x90,0x9e,0x77,0xe0,0x04,0xf0,0xe0,0xc3,
57449 +0x94,0x0a,0x40,0x0c,0xe4,0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x03,0x12,0x44,0xea,
57450 +0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,
57451 +0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,
57452 +0xc4,0x74,0xa1,0xf0,0x74,0x50,0xa3,0xf0,0x90,0x01,0x34,0xe0,0x55,0x28,0xf5,0x2c,
57453 +0xa3,0xe0,0x55,0x29,0xf5,0x2d,0xa3,0xe0,0x55,0x2a,0xf5,0x2e,0xa3,0xe0,0x55,0x2b,
57454 +0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x41,0x46,0x90,0x01,0x34,0x74,0x01,0xf0,0x85,
57455 +0xd1,0x4d,0x85,0xd2,0x4e,0x85,0xd3,0x4f,0x85,0xd4,0x50,0x85,0xd5,0x51,0x85,0xd6,
57456 +0x52,0x85,0xd7,0x53,0x85,0xd9,0x54,0xe5,0x54,0x54,0x40,0xc3,0x13,0xff,0xe5,0x53,
57457 +0x54,0x20,0x6f,0x70,0x02,0x21,0xf5,0xe5,0x54,0x30,0xe5,0x02,0x21,0xf5,0xe5,0x52,
57458 +0x54,0x3f,0xf5,0x08,0xe5,0x4d,0x54,0x3f,0xf5,0x09,0xe5,0x51,0x54,0x1f,0xff,0xe5,
57459 +0x08,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
57460 +0x42,0x81,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
57461 +0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x09,0xd3,0x94,0x04,0x40,
57462 +0x03,0x75,0x09,0x04,0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x5f,0x75,
57463 +0xf0,0x02,0xe5,0x09,0x12,0x43,0x5f,0xe0,0xfe,0xa3,0xe0,0xff,0xe5,0x53,0x54,0x1f,
57464 +0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x5f,
57465 +0x75,0xf0,0x02,0xe5,0x09,0x12,0x43,0x5f,0xee,0xf0,0xa3,0xef,0xf0,0xe5,0x54,0x20,
57466 +0xe6,0x24,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,
57467 +0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4f,0x30,0xe7,0x36,0xaf,
57468 +0x08,0x12,0x63,0x51,0x80,0x2f,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,
57469 +0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x81,0xe5,0x4f,
57470 +0x30,0xe7,0x12,0xe5,0x4f,0x54,0x7f,0xfd,0xe5,0x53,0x54,0x1f,0xf5,0x0d,0xab,0x09,
57471 +0xaf,0x08,0x12,0x62,0xee,0xe5,0x63,0x14,0x24,0xfd,0x50,0x02,0x80,0x48,0x90,0x9e,
57472 +0x66,0xe0,0x60,0x3a,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0x71,
57473 +0xc3,0xef,0x64,0x01,0x70,0x30,0x90,0x9e,0x85,0xf0,0x90,0x9e,0x5b,0xe0,0x90,0x9e,
57474 +0x86,0xf0,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x44,0x5e,0x90,0x01,0x5b,0x74,
57475 +0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x9e,0x64,0xf0,0x80,0x08,0x71,0xc3,
57476 +0xbf,0x01,0x03,0x12,0x44,0xcb,0xe5,0x2c,0x30,0xe1,0x20,0x90,0x01,0x34,0x74,0x02,
57477 +0xf0,0x85,0xd1,0x58,0x85,0xd2,0x59,0x85,0xd3,0x5a,0x85,0xd4,0x5b,0x85,0xd5,0x5c,
57478 +0x85,0xd6,0x5d,0x85,0xd7,0x5e,0x85,0xd9,0x5f,0x71,0xd2,0xe5,0x2c,0x30,0xe3,0x06,
57479 +0x90,0x01,0x34,0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,
57480 +0xf0,0x43,0x57,0x10,0xe5,0x2c,0x30,0xe5,0x26,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1f,
57481 +0xe0,0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,0xe8,0x00,
57482 +0x12,0x4b,0xcf,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x12,0x4d,0x45,0x80,0xfe,0xe5,
57483 0x2c,0x30,0xe6,0x06,0x90,0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe0,0x12,0x90,
57484 -0x9e,0x5f,0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,0x12,0x65,0x90,0x90,0x9e,0x5f,0xe4,
57485 -0xf0,0xe5,0x2e,0x30,0xe1,0x3b,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x12,0x40,0x90,
57486 -0x01,0x02,0xe0,0x54,0x03,0x64,0x01,0x70,0x28,0x90,0x01,0x37,0xe0,0x30,0xe0,0x0a,
57487 -0x74,0x01,0xf0,0x90,0x9e,0x4f,0xe4,0xf0,0x80,0x17,0x90,0x9e,0x4f,0xe0,0x04,0xf0,
57488 -0xe0,0xc3,0x94,0x0a,0x40,0x0b,0xe4,0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x02,0x11,
57489 -0x62,0xe5,0x2e,0x30,0xe2,0x09,0x90,0x01,0x36,0x74,0x04,0xf0,0x12,0x65,0x28,0xe5,
57490 -0x2e,0x30,0xe3,0x28,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,0x22,0x64,0x01,0x70,0x1c,
57491 -0xe5,0x25,0x60,0x18,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,
57492 -0x9e,0x86,0xe4,0x12,0x44,0x52,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,
57493 -0x2b,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x22,0xb4,0x01,0x20,0xe5,0x25,0x60,0x1c,
57494 -0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x74,0xe4,0xf0,
57495 -0x53,0x26,0xfd,0xe5,0x26,0x54,0x07,0x70,0x03,0x12,0x44,0xd1,0xe5,0x2e,0x30,0xe5,
57496 -0x1f,0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x22,0xb4,0x01,0x14,0xe5,0x25,0x60,0x10,
57497 -0x90,0x9e,0x73,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xd7,0x80,0x03,0x12,0x44,0x80,
57498 -0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x22,0xb4,0x01,0x10,
57499 -0xe5,0x25,0x60,0x0c,0x53,0x26,0xfe,0xe5,0x26,0x54,0x07,0x70,0x03,0x12,0x44,0xd1,
57500 -0xe5,0x2f,0x30,0xe1,0x09,0x90,0x01,0x37,0x74,0x02,0xf0,0x12,0x61,0x92,0x74,0x79,
57501 -0x04,0x90,0x01,0xc4,0xf0,0x74,0x48,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,
57502 +0x9e,0x7f,0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,0x12,0x61,0x4e,0x90,0x9e,0x7f,0xe4,
57503 +0xf0,0xe5,0x2e,0x30,0xe1,0x0b,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x57,0x40,0x11,
57504 +0x23,0xe5,0x2e,0x30,0xe2,0x09,0x90,0x01,0x36,0x74,0x04,0xf0,0x12,0x60,0xdf,0xe5,
57505 +0x2e,0x30,0xe3,0x28,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,0x60,0x64,0x01,0x70,0x1c,
57506 +0xe5,0x63,0x60,0x18,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,
57507 +0x9e,0x85,0xe4,0x12,0x44,0x4e,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,
57508 +0x2b,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x60,0xb4,0x01,0x20,0xe5,0x63,0x60,0x1c,
57509 +0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x67,0xe4,0xf0,
57510 +0x53,0x64,0xfd,0xe5,0x64,0x54,0x07,0x70,0x03,0x12,0x44,0xcb,0xe5,0x2e,0x30,0xe5,
57511 +0x1f,0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x60,0xb4,0x01,0x14,0xe5,0x63,0x60,0x10,
57512 +0x90,0x9e,0x66,0xe0,0x64,0x02,0x60,0x05,0x12,0x44,0xd2,0x80,0x03,0x12,0x44,0x79,
57513 +0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x60,0xb4,0x01,0x10,
57514 +0xe5,0x63,0x60,0x0c,0x53,0x64,0xfe,0xe5,0x64,0x54,0x07,0x70,0x03,0x12,0x44,0xcb,
57515 +0xe5,0x2f,0x30,0xe1,0x08,0x90,0x01,0x37,0x74,0x02,0xf0,0x91,0x64,0x74,0xa1,0x04,
57516 +0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,
57517 +0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,
57518 +0xd0,0xe0,0x32,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,0x02,0x7f,
57519 +0x00,0x22,0x90,0x9e,0x10,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,0x80,0xf0,
57520 +0x7b,0x00,0x7a,0x00,0x79,0x58,0x90,0x9e,0x90,0x12,0x43,0x8b,0x0b,0x7a,0x9e,0x79,
57521 +0x10,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x8d,0x12,0x43,0x8b,0x90,0x9e,
57522 +0xb0,0xe0,0xff,0x04,0xf0,0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x7f,0xaf,0x7e,0x01,
57523 +0x12,0x71,0x7a,0xef,0x60,0x49,0x90,0x9e,0x8d,0x12,0x43,0x6b,0x8b,0x23,0x8a,0x24,
57524 +0x89,0x25,0x75,0x26,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x45,0x09,0x90,0x9e,
57525 +0x90,0x12,0x43,0x6b,0x8b,0x23,0x8a,0x24,0x89,0x25,0x90,0x9e,0x8d,0x12,0x43,0x6b,
57526 +0x12,0x29,0xd9,0xff,0xc4,0x54,0x0f,0xf5,0x26,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x12,
57527 +0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0xd0,
57528 +0xd0,0x92,0xaf,0x22,0x90,0x9e,0xa0,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe5,0x63,
57529 +0x14,0x24,0xfd,0x50,0x02,0x80,0x1f,0x90,0x9e,0x66,0xe0,0x60,0x06,0x7d,0x01,0x7f,
57530 +0x0c,0x80,0x0d,0xe5,0x61,0x54,0x0f,0xc3,0x94,0x04,0x50,0x06,0x7d,0x01,0x7f,0x04,
57531 +0x91,0xe7,0xe4,0xff,0x91,0x97,0x22,0xef,0x60,0x0b,0x90,0x9e,0x80,0xe0,0xb4,0x01,
57532 +0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x75,
57533 +0x92,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,0x90,0x05,0x22,0x74,0xff,0xf0,0x12,0x74,
57534 +0x12,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x36,
57535 +0xe6,0xe5,0x63,0x60,0x04,0x7f,0x01,0x91,0x97,0x12,0x74,0xc8,0x53,0x61,0xf0,0x43,
57536 +0x61,0x02,0x22,0x7d,0x01,0x7f,0x0c,0x8f,0x6a,0x8d,0x6b,0xe5,0x6a,0x54,0x0f,0xff,
57537 +0xe5,0x61,0x54,0x0f,0x6f,0x60,0x65,0xe5,0x6a,0x30,0xe2,0x28,0xe5,0x61,0x20,0xe2,
57538 +0x04,0x7f,0x01,0xd1,0xc2,0xe5,0x61,0x30,0xe3,0x0c,0xe5,0x6a,0x20,0xe3,0x07,0xb1,
57539 +0x5d,0xef,0x60,0x48,0xa1,0xa5,0xe5,0x61,0x20,0xe3,0x41,0xe5,0x6a,0x30,0xe3,0x3c,
57540 +0xaf,0x6b,0xc1,0xdc,0xe5,0x61,0x54,0x0f,0xff,0xbf,0x0c,0x0c,0xe5,0x6a,0x20,0xe3,
57541 +0x07,0xb1,0x5d,0xef,0x60,0x26,0xb1,0xa5,0xe5,0x61,0x54,0x0f,0xff,0xbf,0x04,0x0c,
57542 +0xe5,0x6a,0x20,0xe2,0x07,0xf1,0x21,0xef,0x60,0x12,0x91,0xb2,0xe5,0x61,0x54,0x0f,
57543 +0xff,0xbf,0x02,0x08,0x12,0x60,0xbd,0xef,0x60,0x02,0xd1,0xaf,0x22,0x71,0xc3,0xef,
57544 +0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x30,0x90,0x9e,0x64,0xe0,
57545 +0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x22,0x90,0x9e,0x63,0xe0,0x60,0x08,
57546 +0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x14,0xe5,0x62,0x54,0x0f,0xd3,0x94,0x04,0x40,
57547 +0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,
57548 +0x08,0xf0,0x7f,0x00,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x60,0xb4,0x01,
57549 +0x04,0x7f,0x01,0xd1,0xf6,0x53,0x61,0xf0,0x43,0x61,0x04,0x22,0xef,0x64,0x01,0x70,
57550 +0x2e,0x7d,0x78,0x7f,0x02,0x12,0x36,0x75,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0x90,
57551 +0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x91,0xe3,0xe4,0xff,0x91,0x97,
57552 +0x90,0x06,0x04,0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,
57553 +0x01,0x36,0x74,0x7b,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7b,0xff,0x12,0x36,0xe6,0x7d,
57554 +0x02,0x7f,0x03,0x12,0x36,0xe6,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,
57555 +0xe0,0x44,0x07,0xf0,0x12,0x62,0x4c,0xe5,0x60,0x20,0xe0,0x05,0xe4,0x90,0x9e,0x58,
57556 +0xf0,0x22,0x8b,0x14,0x8a,0x15,0x89,0x16,0x12,0x60,0xb1,0xab,0x14,0xaa,0x15,0xa9,
57557 +0x16,0x12,0x29,0xd9,0xf5,0x63,0x14,0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,
57558 +0x03,0x70,0x40,0x7f,0x01,0x80,0x3a,0xab,0x14,0xaa,0x15,0xa9,0x16,0x90,0x00,0x02,
57559 +0x12,0x42,0x20,0xfd,0xe4,0xff,0xd1,0x84,0x80,0x27,0xab,0x14,0xaa,0x15,0xa9,0x16,
57560 +0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x7f,0x01,0xd1,0x84,0x1f,0x80,0x13,0xab,0x14,
57561 +0xaa,0x15,0xa9,0x16,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x7f,0x02,0xd1,0x84,0xe4,
57562 +0xff,0xb1,0xbc,0x22,0xef,0x24,0xfe,0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x65,0x74,
57563 +0x01,0xf0,0x80,0x16,0xed,0x70,0x0a,0x90,0x9e,0x62,0xe0,0x90,0x9e,0x65,0xf0,0x80,
57564 +0x05,0x90,0x9e,0x65,0xed,0xf0,0x90,0x9e,0x65,0xe0,0x90,0x9e,0x56,0xf0,0x22,0x53,
57565 +0x61,0xf0,0x43,0x61,0x01,0x12,0x45,0x00,0x12,0x45,0x01,0x53,0x61,0xf0,0x43,0x61,
57566 +0x02,0x22,0x90,0x9e,0xaf,0xef,0xf0,0x12,0x74,0x53,0x90,0x9e,0xaf,0xe0,0x60,0x05,
57567 +0x90,0x05,0x22,0xe4,0xf0,0x53,0x61,0xf0,0x43,0x61,0x04,0x22,0x90,0x06,0x04,0xe0,
57568 +0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,0x60,0xb4,0x01,0x04,0xe4,0xff,0xd1,0xf6,0x53,
57569 +0x61,0xf0,0x43,0x61,0x0c,0x22,0x8f,0x27,0x12,0x45,0xb0,0xbf,0x01,0x22,0x90,0x9e,
57570 +0x7a,0xe0,0xff,0x7d,0x01,0x12,0x47,0x79,0xab,0x07,0xaa,0x06,0xad,0x03,0xac,0x02,
57571 +0xaf,0x27,0x12,0x60,0x2a,0xaf,0x03,0x12,0x5f,0xf7,0x90,0x04,0x1f,0x74,0x20,0xf0,
57572 +0x22,0x71,0xc3,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x58,
57573 +0xe5,0x64,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x4a,0xe5,0x62,
57574 +0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x39,0xe5,
57575 +0x64,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x2c,0xe5,0x64,0x30,0xe4,
57576 +0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x1f,0x90,0x9e,0x58,0xe0,0x60,0x08,0x90,
57577 +0x01,0xb9,0x74,0x20,0xf0,0x80,0x11,0x90,0x9e,0x5e,0xe0,0x60,0x08,0x90,0x01,0xb9,
57578 +0x74,0x80,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,0x7f,0x00,
57579 +0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,
57580 +0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,
57581 +0xc4,0x74,0x91,0xf0,0x74,0x57,0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,
57582 +0x90,0x00,0x55,0xe0,0x5f,0xf5,0x3d,0x90,0x00,0x52,0xe0,0xff,0x90,0x00,0x56,0xe0,
57583 +0x5f,0xf5,0x3e,0xe5,0x3d,0x30,0xe4,0x06,0x90,0x00,0x55,0x74,0x10,0xf0,0xe5,0x3d,
57584 +0x30,0xe5,0x06,0x90,0x00,0x55,0x74,0x20,0xf0,0xe5,0x3d,0x30,0xe6,0x1b,0x90,0x00,
57585 +0x55,0x74,0x40,0xf0,0x90,0x9e,0x42,0xe0,0x54,0x03,0xff,0xbf,0x03,0x0b,0x90,0x9e,
57586 +0x3f,0xe0,0x60,0x05,0x7f,0x01,0x12,0x49,0x1a,0xe5,0x3d,0x30,0xe7,0x15,0x90,0x00,
57587 +0x55,0x74,0x80,0xf0,0x90,0x9e,0x42,0xe0,0x54,0x03,0xff,0xbf,0x03,0x05,0x7f,0x02,
57588 +0x12,0x49,0x1a,0xe5,0x3e,0x30,0xe0,0x06,0x90,0x00,0x56,0x74,0x01,0xf0,0xe5,0x3e,
57589 +0x30,0xe1,0x06,0x90,0x00,0x56,0x74,0x02,0xf0,0xe5,0x3e,0x30,0xe2,0x06,0x90,0x00,
57590 +0x56,0x74,0x04,0xf0,0xe5,0x3e,0x30,0xe3,0x06,0x90,0x00,0x56,0x74,0x08,0xf0,0x90,
57591 +0x01,0xc4,0x74,0x91,0xf0,0x74,0x57,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,
57592 0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,
57593 -0xf0,0xd0,0xe0,0x32,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x7f,0x01,0x60,0x02,
57594 -0x7f,0x00,0x22,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,
57595 -0xc0,0xd0,0x7f,0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,
57596 -0xc0,0xd0,0x90,0x9e,0xac,0xed,0xf0,0x90,0x9e,0xab,0xef,0xf0,0xd3,0x94,0x07,0x50,
57597 -0x63,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,
57598 -0x90,0x00,0x47,0xe0,0x5f,0xf0,0x71,0xdb,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,
57599 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0x71,
57600 -0xdb,0x90,0x9e,0xac,0xe0,0x60,0x16,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,0x07,
57601 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,0x66,0x90,0x9e,0xab,
57602 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,
57603 -0x00,0x45,0x80,0x6b,0x90,0x9e,0xab,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,
57604 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0x71,0xd3,0x90,0x9e,0xab,
57605 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,
57606 -0x43,0xe0,0x4f,0xf0,0x71,0xdb,0x90,0x9e,0xac,0xe0,0x60,0x1b,0x90,0x9e,0xab,0xe0,
57607 -0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xff,
57608 -0x90,0x00,0x42,0xe0,0x4f,0x80,0x1a,0x90,0x9e,0xab,0xe0,0xff,0x74,0x01,0xa8,0x07,
57609 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x42,0xe0,
57610 -0x5f,0xf0,0x71,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0xf0,0x90,0x00,0x45,0xe0,0x54,0xfe,
57611 -0xfd,0x7f,0x45,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,0x00,0xed,
57612 -0xf0,0x71,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x14,0x60,0x30,0x14,0x60,0x66,0x24,
57613 -0x02,0x60,0x02,0xa1,0x9f,0x90,0x9e,0x1a,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,0x44,
57614 -0x0c,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x47,0xe0,0x44,0x08,0xfd,0x7f,0x47,0x91,
57615 -0xe3,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,0x7f,0x45,0x80,0x71,0xe4,0x90,0x9e,0x1a,
57616 -0xf0,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,
57617 -0x08,0x12,0x2f,0xd9,0x90,0x00,0x45,0xe0,0x44,0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,
57618 -0x00,0x45,0xe0,0x54,0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,0x10,
57619 -0xfd,0x7f,0x46,0x80,0x38,0x90,0x9e,0x1a,0x74,0x01,0xf0,0x90,0x9e,0x20,0x12,0x43,
57620 -0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x00,
57621 -0x45,0xe0,0x44,0x20,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x00,0x45,0xe0,0x44,0x10,0xfd,
57622 -0x7f,0x45,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,0x10,0xfd,0x7f,0x46,0x91,0xe3,0x22,
57623 -0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x1c,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,
57624 -0x25,0xe0,0x25,0xe0,0x90,0x9e,0x1b,0xf0,0x12,0x29,0xd9,0x25,0xe0,0x25,0xe0,0x90,
57625 -0x9e,0x1f,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,
57626 -0x9e,0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,
57627 -0x9e,0x2d,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x9e,0x1b,
57628 -0xe0,0xff,0x12,0x52,0x12,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x90,0x9e,0x1c,
57629 -0xe0,0x70,0x02,0xc1,0xa7,0x90,0x9e,0x1b,0xe0,0x70,0x02,0xc1,0xa7,0x90,0x9e,0x1f,
57630 -0xe0,0x70,0x02,0xc1,0xa7,0xa2,0xaf,0xe4,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,
57631 -0x9e,0x2e,0x74,0x01,0xf0,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x91,0xda,0x90,
57632 -0x00,0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x91,0xe3,0x90,0x9e,0x14,0xe0,0x60,0x15,
57633 -0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,
57634 -0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,
57635 -0xef,0xfd,0x7f,0x45,0x91,0xe3,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,
57636 -0xe0,0x90,0x05,0x84,0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,
57637 -0xe0,0x90,0x05,0x86,0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,
57638 -0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,
57639 -0xe4,0xff,0x12,0x37,0x00,0x80,0x2b,0x90,0x9e,0x1c,0xe0,0x70,0x2d,0x90,0x9e,0x2e,
57640 -0x91,0xd9,0x90,0x00,0x46,0xe0,0x54,0xfe,0xfd,0x7f,0x46,0x91,0xe3,0x90,0x05,0x22,
57641 -0xe4,0xf0,0xa2,0xaf,0x33,0x90,0x9e,0x3f,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,
57642 -0x36,0x92,0x90,0x9e,0x3f,0xe0,0x24,0xff,0x92,0xaf,0x22,0x90,0x01,0x30,0xe4,0xf0,
57643 -0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
57644 -0xfd,0x7f,0x50,0x91,0xe3,0xe4,0xfd,0x7f,0x51,0x91,0xe3,0xe4,0xfd,0x7f,0x52,0x91,
57645 -0xe3,0xe4,0xfd,0x7f,0x53,0x81,0xe3,0x8b,0x59,0x8a,0x5a,0x89,0x5b,0x90,0x00,0x02,
57646 -0x12,0x42,0x20,0x90,0x9e,0x1d,0xf0,0xe0,0x30,0xe0,0x4b,0x90,0x9e,0x14,0x74,0x01,
57647 -0xf0,0x7f,0x80,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x16,0x12,0x2a,0x7f,0xab,0x59,
57648 -0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xe4,0xfc,0xfd,0xfe,0x78,
57649 -0x1a,0x12,0x2a,0x6c,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x16,0x12,
57650 -0x43,0x53,0xec,0x54,0x03,0xfc,0x12,0x43,0x46,0x90,0x9e,0x20,0x12,0x2a,0x7f,0x90,
57651 -0x05,0x22,0xe4,0xf0,0x80,0x2d,0xe4,0x90,0x9e,0x14,0xf0,0x7f,0x80,0x7e,0x08,0x12,
57652 -0x27,0xde,0xec,0x54,0x03,0xfc,0xec,0x44,0xc0,0xfc,0x90,0x9e,0x16,0x12,0x2a,0x7f,
57653 -0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,
57654 -0x12,0x2f,0xd9,0x90,0x9e,0x1d,0xe0,0x30,0xe1,0x19,0x7d,0x0c,0x7f,0x47,0x91,0xe3,
57655 -0x90,0x00,0x48,0xe0,0x44,0x0c,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x46,0xe0,0x44,
57656 -0x10,0x80,0x1c,0x90,0x00,0x47,0xe0,0x54,0xf3,0xfd,0x7f,0x47,0x91,0xe3,0x90,0x00,
57657 -0x48,0xe0,0x54,0xf3,0xfd,0x7f,0x48,0x91,0xe3,0x90,0x00,0x46,0xe0,0x54,0xef,0xfd,
57658 -0x7f,0x46,0x91,0xe3,0xe4,0x90,0x9e,0x1a,0xf0,0x22,0x90,0x00,0x49,0xe0,0x90,0x9e,
57659 -0xb0,0xf0,0xe0,0x54,0x0f,0xf0,0x44,0xf0,0xfd,0x7f,0x49,0x91,0xe3,0x90,0x9e,0xb0,
57660 -0xe0,0x44,0xb0,0xfd,0x7f,0x49,0x81,0xe3,0x75,0x28,0x33,0xe4,0xf5,0x29,0x75,0x2a,
57661 -0x07,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,0xa3,0xe5,0x2a,
57662 -0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,
57663 -0x01,0x38,0xe5,0x30,0xf0,0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0xe4,0x90,
57664 -0x9e,0x31,0xf0,0xa3,0xf0,0x75,0x8e,0x02,0x12,0x77,0x51,0x12,0x5e,0xde,0x90,0x9e,
57665 -0x5e,0xef,0xf0,0x12,0x5e,0xeb,0x90,0x9e,0x60,0xef,0xf0,0xe4,0xf5,0x12,0x12,0x6e,
57666 -0xcc,0x12,0x77,0xc8,0x12,0x5f,0x9f,0x12,0x32,0x3d,0x12,0x77,0xc4,0x12,0x4f,0xf8,
57667 -0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,
57668 -0xf0,0xa3,0xe4,0xf0,0x12,0x5e,0xf8,0x11,0x16,0x12,0x44,0xff,0x12,0x7d,0x88,0x90,
57669 -0x9e,0x33,0xe5,0xd9,0xf0,0x12,0x5e,0xaf,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,
57670 -0xf0,0x12,0x4b,0xdb,0x75,0xe8,0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x9e,0x31,0xe0,
57671 -0x64,0x01,0xf0,0x24,0x2e,0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xe5,0x12,0x30,
57672 -0xe4,0x09,0xc2,0xaf,0x53,0x12,0xef,0xd2,0xaf,0x71,0x1a,0xe5,0x12,0x30,0xe6,0x16,
57673 -0xc2,0xaf,0x53,0x12,0xbf,0xd2,0xaf,0x12,0x68,0x7a,0x90,0x9e,0x1e,0xe0,0xff,0x60,
57674 -0x03,0xb4,0x01,0x02,0x31,0x10,0x90,0x9e,0x1e,0xe0,0x70,0x03,0x12,0x7d,0xe6,0x11,
57675 -0xe3,0x80,0xb9,0x90,0x06,0x34,0xe0,0x60,0x26,0x14,0x70,0x1b,0x7b,0x01,0x7a,0x06,
57676 -0x79,0x35,0x7f,0xf9,0x7e,0x01,0x12,0x77,0x62,0xbf,0x01,0x09,0x90,0x06,0x35,0xe0,
57677 -0x54,0x0f,0xf0,0x80,0x05,0x80,0x00,0x02,0x77,0x43,0xe4,0x90,0x06,0x34,0xf0,0x22,
57678 -0x90,0x9e,0x15,0xe0,0xc3,0x94,0x14,0x50,0x05,0xe0,0x04,0xf0,0x21,0xc8,0x90,0x9e,
57679 -0x15,0xe0,0x64,0x14,0x60,0x02,0x21,0xc8,0x90,0x9e,0x24,0xe0,0x70,0x25,0x90,0x9e,
57680 -0x27,0xe0,0x70,0x1f,0x90,0x9e,0x25,0xe0,0x70,0x19,0x90,0x9e,0x28,0xe0,0x70,0x13,
57681 -0x90,0x9e,0x26,0xe0,0x70,0x0d,0x90,0x9e,0x29,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,
57682 -0x54,0xfe,0xf0,0x90,0x9e,0x24,0xe0,0x90,0x04,0x44,0xf0,0x90,0x9e,0x25,0xe0,0x90,
57683 -0x04,0x45,0xf0,0x90,0x9e,0x26,0xe0,0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,
57684 -0x27,0xe0,0x90,0x04,0x48,0xf0,0x90,0x9e,0x28,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,
57685 -0x29,0xe0,0x90,0x04,0x4a,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x10,0xe0,0x90,0x04,0x4c,
57686 -0xf0,0x90,0x9e,0x11,0xe0,0x90,0x04,0x4d,0xf0,0x90,0x9e,0x12,0xe0,0x90,0x04,0x4e,
57687 -0xf0,0x90,0x9e,0x13,0xe0,0x90,0x04,0x4f,0xf0,0xe4,0x90,0x9e,0x15,0xf0,0x90,0x9e,
57688 -0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x24,0xf0,0xa3,0xf0,
57689 -0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x34,0xf0,
57690 -0x90,0x05,0x61,0xe0,0x90,0x9e,0x35,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x36,0xf0,
57691 -0x90,0x05,0x63,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0x2d,0xe0,0xff,0x90,0x9e,0x37,
57692 -0xe0,0xfe,0xd3,0x9f,0x50,0x0b,0x90,0x9e,0x2d,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,
57693 -0x10,0x90,0x9e,0x1b,0xe0,0xb4,0x01,0x02,0x80,0x03,0x90,0x9e,0x1f,0xe0,0xff,0x51,
57694 -0x12,0x22,0x90,0x05,0x60,0xe0,0x90,0x9e,0x2a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,
57695 -0x2b,0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x2c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,
57696 -0x2d,0xf0,0xc3,0x74,0xff,0x9f,0xfe,0x90,0x9e,0x2b,0xe0,0xd3,0x9e,0x40,0x1e,0xe0,
57697 -0x2f,0xf0,0xa3,0xe0,0xb4,0xff,0x0f,0xe4,0xf0,0xa3,0xe0,0xb4,0xff,0x03,0xe4,0xf0,
57698 -0x22,0x90,0x9e,0x2d,0x80,0x03,0x90,0x9e,0x2c,0xe0,0x04,0xf0,0x22,0x90,0x9e,0x2b,
57699 -0xe0,0x2f,0xf0,0x22,0x90,0x9e,0x1c,0xe0,0x64,0x01,0x60,0x02,0x61,0x19,0x90,0x00,
57700 -0x46,0xe0,0x44,0x01,0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x90,0x9e,0x2e,0xe0,0x70,0x32,
57701 -0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x20,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
57702 -0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,
57703 -0xf0,0x90,0x9e,0x1b,0xe0,0xff,0x51,0x12,0x90,0x9e,0x2e,0x74,0x01,0x12,0x4c,0xd9,
57704 -0x80,0x40,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x70,0x38,0x90,0x9e,0x1f,0xe0,0xff,0x51,
57705 -0x12,0xe4,0x90,0x9e,0x2e,0xf0,0x90,0x00,0x45,0xe0,0x44,0x01,0xfd,0x7f,0x45,0x12,
57706 -0x4c,0xe3,0x90,0x9e,0x14,0xe0,0x60,0x15,0x90,0x9e,0x16,0x12,0x43,0x53,0x90,0x80,
57707 -0x85,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x08,0x12,0x2f,0xd9,0x80,0x05,0x90,0x05,0x22,
57708 -0xe4,0xf0,0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x9e,0x2a,0xe0,0x90,0x05,0x84,
57709 -0xf0,0x90,0x9e,0x2b,0xe0,0x90,0x05,0x85,0xf0,0x90,0x9e,0x2c,0xe0,0x90,0x05,0x86,
57710 -0xf0,0x90,0x9e,0x2d,0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,0x01,0xcc,0xe0,0x54,0x0f,
57711 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfd,0x70,0x02,0x81,0x5b,0x90,0x9e,0xad,
57712 -0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
57713 -0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,0x81,0x54,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,
57714 -0x90,0x01,0xd0,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x35,0xf0,0x75,0x1e,0x01,0x75,0x1f,
57715 -0x9e,0x75,0x20,0x35,0x75,0x21,0x01,0x7b,0x01,0x7a,0x9e,0x79,0x36,0x12,0x45,0x09,
57716 -0x90,0x9e,0x36,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x90,0x9e,0xad,0x30,0xe0,
57717 -0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,
57718 -0x90,0x9e,0xad,0xe0,0x75,0xf0,0x02,0x90,0x00,0x89,0x12,0x43,0x5f,0xe0,0x90,0x9e,
57719 -0x38,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,
57720 -0x90,0x9e,0x39,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,
57721 -0x5f,0xe0,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,
57722 -0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3b,0xf0,0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,
57723 -0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x37,0xf0,0x90,0x9e,0xad,0xe0,0x75,0xf0,0x04,
57724 -0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x38,0xf0,0x90,0x9e,0xad,0xe0,0x75,
57725 -0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x39,0xf0,0xef,0x54,0x7f,
57726 -0xff,0x7b,0x01,0x7a,0x9e,0x79,0x37,0x91,0x5c,0x90,0x9e,0x34,0xe0,0xff,0x90,0x9e,
57727 -0xad,0xe0,0xfe,0x74,0x01,0xa8,0x06,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,
57728 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0xad,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
57729 -0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,0xf0,0x90,0x9e,0xad,0xe0,0x04,0xf0,0xe0,0x54,
57730 -0x03,0xf0,0x61,0x24,0x90,0x01,0xc6,0xe0,0x44,0x02,0xf0,0x22,0x90,0x9e,0x3c,0x12,
57731 -0x43,0x8b,0xef,0x12,0x43,0x94,0x54,0x97,0x01,0x54,0xa0,0x02,0x54,0xbb,0x03,0x54,
57732 -0xc4,0x05,0x54,0xcd,0x06,0x55,0x1b,0x07,0x54,0xd5,0x09,0x54,0xde,0x0c,0x54,0xe7,
57733 -0x0d,0x54,0xf0,0x0e,0x54,0xf9,0x1b,0x55,0x02,0x1c,0x55,0x0b,0x2c,0x54,0xa9,0x2d,
57734 -0x54,0xb2,0x2e,0x00,0x00,0x55,0x14,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x61,0x69,
57735 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0xef,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
57736 -0x70,0xf5,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0x3d,0x90,0x9e,0x3c,0x12,0x43,
57737 -0x6b,0x02,0x71,0x6b,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0x9f,0x90,0x9e,0x3c,
57738 -0x12,0x43,0x6b,0x80,0x47,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x71,0xb3,0x90,0x9e,
57739 -0x3c,0x12,0x43,0x6b,0x02,0x4d,0xa0,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x7d,0x55,
57740 -0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x4f,0x07,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,
57741 -0x70,0xe7,0x90,0x9e,0x3c,0x12,0x43,0x6b,0x02,0x70,0xce,0x90,0x9e,0x3c,0x12,0x43,
57742 -0x6b,0x02,0x76,0x23,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x90,0x00,0x04,0x12,
57743 -0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,0xfd,0xaf,0x06,
57744 -0x90,0x9e,0x3f,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x8b,0x90,0x9e,0x41,0x12,
57745 -0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,0x54,0x0f,0x90,0x9e,0x44,
57746 -0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,0x13,0x54,0x03,0x90,0x9e,
57747 -0x45,0xf0,0x90,0x9e,0x3f,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,0x46,0x12,0x43,0x5f,
57748 -0xad,0x82,0xac,0x83,0x90,0x9e,0x46,0xec,0xf0,0xa3,0xed,0xf0,0xef,0x75,0xf0,0x09,
57749 -0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,0x12,0x43,0x8b,0x90,
57750 -0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0x0f,0xff,0x90,0x9e,
57751 -0x48,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,
57752 -0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x48,0x12,0x43,0x6b,0x90,0x00,0x01,0xef,0x12,
57753 -0x42,0x5f,0x90,0x9e,0x41,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,
57754 -0x9e,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,0x12,0x29,0xd9,
57755 -0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x44,0xe0,0xfe,0x90,0x9e,0x3f,0xe0,0xff,
57756 -0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,0x9e,0x40,0xe0,0xfe,
57757 -0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,0x75,0xf0,0x09,0xef,
57758 -0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x45,0xe0,0xfe,0x75,0xf0,
57759 -0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,0x59,0xef,0x25,0xe0,0x24,
57760 -0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x5b,0x8f,0x5c,0xe5,0x59,0x75,0xf0,
57761 -0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x5d,0x01,0xf5,0x5e,0x89,0x5f,
57762 -0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x46,0x12,0x43,0x5f,0xaf,0x82,0x85,0x83,0x60,
57763 -0x8f,0x61,0xe5,0x59,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0x75,
57764 -0x62,0x01,0xf5,0x63,0x89,0x64,0x74,0x82,0x25,0x59,0xf5,0x82,0xe4,0x34,0x95,0xf5,
57765 -0x83,0xe0,0x12,0x43,0x94,0x56,0xaa,0x00,0x56,0xbf,0x01,0x56,0xd4,0x02,0x56,0xe9,
57766 -0x03,0x57,0x13,0x04,0x57,0x28,0x05,0x57,0x3d,0x06,0x57,0x64,0x0c,0x57,0x92,0x0d,
57767 -0x57,0xbf,0x0e,0x57,0xec,0x0f,0x00,0x00,0x58,0x20,0xe5,0x59,0x25,0xe0,0x24,0xc6,
57768 -0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,0x80,0x3c,0xe5,
57769 -0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,
57770 -0x74,0x10,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
57771 -0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,
57772 -0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,0x59,0x25,0xe0,
57773 -0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0x8f,0xf0,
57774 -0x02,0x58,0x20,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
57775 -0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,
57776 -0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,0x59,0x25,
57777 -0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0x74,0x0d,0xf0,
57778 -0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,
57779 -0xf0,0x02,0x58,0x20,0x90,0x04,0x47,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,
57780 -0x4d,0x90,0x04,0x46,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,
57781 -0x5f,0x90,0x04,0x45,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x44,0x02,
57782 -0x58,0x17,0x90,0x04,0x4b,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,
57783 -0x04,0x4a,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,
57784 -0x04,0x49,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,
57785 -0x04,0x4f,0xe0,0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x4e,0xe0,
57786 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x4d,0xe0,
57787 -0x85,0x5c,0x82,0x85,0x5b,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,
57788 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x5d,0xaa,
57789 -0x5e,0xa9,0x5f,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x5c,0x82,
57790 -0x85,0x5b,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,0xf0,
57791 -0xab,0x5d,0xaa,0x5e,0xa9,0x5f,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,
57792 -0xab,0x62,0xaa,0x63,0xa9,0x64,0x12,0x29,0xd9,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
57793 -0x12,0x42,0x4d,0xab,0x5d,0xe5,0x5f,0x24,0x01,0xf9,0xe4,0x35,0x5e,0xfa,0xc0,0x03,
57794 -0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,0xab,0x62,0xaa,0x63,0xa9,0x64,0x90,0x00,
57795 -0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,0x5c,
57796 -0x82,0x85,0x5b,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,
57797 -0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x5c,0x82,0x85,0x5b,0x83,0xa3,
57798 -0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x61,0x82,0x85,0x60,0x83,0xa3,0xe0,0xfe,0xef,
57799 -0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,
57800 -0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x5a,0x0b,0x74,0x01,0x7e,
57801 -0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,
57802 +0xf0,0xd0,0xe0,0x32,0x90,0x01,0xcc,0xe0,0x54,0x0f,0x90,0x9e,0x19,0xf0,0x90,0x9e,
57803 +0x19,0xe0,0xfd,0x70,0x02,0x21,0xb5,0x90,0x9e,0xae,0xe0,0xff,0x74,0x01,0x7e,0x00,
57804 +0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,
57805 +0x02,0x21,0xae,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd0,0x12,0x43,0x5f,
57806 +0xe0,0x90,0x9e,0x1a,0xf0,0x75,0x23,0x01,0x75,0x24,0x9e,0x75,0x25,0x1a,0x75,0x26,
57807 +0x01,0x7b,0x01,0x7a,0x9e,0x79,0x1b,0x12,0x45,0x09,0x90,0x9e,0x1b,0xe0,0xff,0xc4,
57808 +0x13,0x13,0x13,0x54,0x01,0x90,0x9e,0xae,0x30,0xe0,0x59,0xe0,0x75,0xf0,0x02,0x90,
57809 +0x00,0x88,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1c,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,
57810 +0x02,0x90,0x00,0x89,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1d,0xf0,0x90,0x9e,0xae,0xe0,
57811 +0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1e,0xf0,0x90,0x9e,
57812 +0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x1f,0xf0,
57813 +0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x5f,0xe0,0x90,0x9e,
57814 +0x20,0xf0,0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x5f,0xe0,0x90,
57815 +0x9e,0x1c,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x5f,
57816 +0xe0,0x90,0x9e,0x1d,0xf0,0x90,0x9e,0xae,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,
57817 +0x43,0x5f,0xe0,0x90,0x9e,0x1e,0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,0x7a,0x9e,0x79,
57818 +0x1c,0x31,0xb6,0x90,0x9e,0x19,0xe0,0xff,0x90,0x9e,0xae,0xe0,0xfe,0x74,0x01,0xa8,
57819 +0x06,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,0x90,0x9e,0x19,0xf0,0x90,0x9e,
57820 +0xae,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x90,0x01,
57821 +0xcc,0xf0,0x90,0x9e,0xae,0xe0,0x04,0xf0,0xe0,0x54,0x03,0xf0,0x01,0x7e,0x90,0x01,
57822 +0xc6,0xe0,0x44,0x02,0xf0,0x22,0x90,0x9e,0x21,0x12,0x43,0x8b,0xef,0x12,0x43,0x94,
57823 +0x59,0xfc,0x01,0x59,0xf4,0x02,0x5a,0x20,0x03,0x5a,0x29,0x05,0x5a,0x32,0x06,0x5a,
57824 +0x7e,0x07,0x5a,0x3a,0x09,0x5a,0x43,0x0b,0x5a,0x4c,0x0c,0x5a,0x55,0x0d,0x5a,0x5e,
57825 +0x0e,0x5a,0x67,0x1b,0x5a,0x6f,0x1c,0x5a,0x05,0x2d,0x5a,0x0e,0x2e,0x5a,0x17,0x3b,
57826 +0x00,0x00,0x5a,0x77,0x90,0x9e,0x21,0x12,0x43,0x6b,0xe1,0xe9,0x90,0x9e,0x21,0x12,
57827 +0x43,0x6b,0x02,0x71,0xd0,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x72,0x0b,0x90,0x9e,
57828 +0x21,0x12,0x43,0x6b,0x02,0x72,0x53,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x72,0x8c,
57829 +0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x72,0xb6,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,
57830 +0x70,0x4a,0x90,0x9e,0x21,0x12,0x43,0x6b,0x80,0x45,0x90,0x9e,0x21,0x12,0x43,0x6b,
57831 +0x02,0x72,0xfe,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x70,0xa2,0x90,0x9e,0x21,0x12,
57832 +0x43,0x6b,0x02,0x49,0xc2,0x90,0x9e,0x21,0x12,0x43,0x6b,0x02,0x7b,0x16,0x90,0x9e,
57833 +0x21,0x12,0x43,0x6b,0x02,0x4a,0xfc,0x90,0x9e,0x21,0x12,0x43,0x6b,0xe1,0xef,0x90,
57834 +0x9e,0x21,0x12,0x43,0x6b,0xe1,0xd1,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x90,
57835 +0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,
57836 +0xfd,0xaf,0x06,0x90,0x9e,0x24,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x8b,0x90,
57837 +0x9e,0x26,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0xf0,0xc4,0x54,0x0f,
57838 +0x90,0x9e,0x29,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0x54,0x40,0xc4,0x13,0x13,0x54,
57839 +0x03,0x90,0x9e,0x2a,0xf0,0x90,0x9e,0x24,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,0x46,
57840 +0x12,0x43,0x5f,0xad,0x82,0xac,0x83,0x90,0x9e,0x2b,0xec,0xf0,0xa3,0xed,0xf0,0xef,
57841 +0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,0x12,
57842 +0x43,0x8b,0x90,0x9e,0x26,0x12,0x43,0x6b,0x90,0x00,0x03,0x12,0x42,0x20,0x54,0x0f,
57843 +0xff,0x90,0x9e,0x2d,0x12,0x43,0x6b,0xef,0x12,0x42,0x4d,0x90,0x9e,0x26,0x12,0x43,
57844 +0x6b,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x90,0x9e,0x2d,0x12,0x43,0x6b,0x90,0x00,
57845 +0x01,0xef,0x12,0x42,0x5f,0x90,0x9e,0x26,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,
57846 +0x20,0xff,0x90,0x9e,0x2b,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,
57847 +0x12,0x29,0xd9,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x29,0xe0,0xfe,0x90,0x9e,
57848 +0x24,0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,0x9e,
57849 +0x25,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x5f,0xee,0xf0,0x75,
57850 +0xf0,0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x90,0x9e,0x2a,0xe0,
57851 +0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x5f,0xee,0xf0,0x8f,0x14,0xef,
57852 +0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x16,0x8f,0x17,0xe5,
57853 +0x14,0x75,0xf0,0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x18,0x01,0xf5,
57854 +0x19,0x89,0x1a,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x46,0x12,0x43,0x5f,0xaf,0x82,
57855 +0x85,0x83,0x1b,0x8f,0x1c,0xe5,0x14,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,
57856 +0x35,0xf0,0x75,0x1d,0x01,0xf5,0x1e,0x89,0x1f,0x74,0x82,0x25,0x14,0xf5,0x82,0xe4,
57857 +0x34,0x95,0xf5,0x83,0xe0,0x12,0x43,0x94,0x5c,0x0d,0x00,0x5c,0x22,0x01,0x5c,0x37,
57858 +0x02,0x5c,0x4c,0x03,0x5c,0x75,0x04,0x5c,0x8a,0x05,0x5c,0x9f,0x06,0x5c,0xc5,0x0c,
57859 +0x5c,0xf2,0x0d,0x5d,0x1f,0x0e,0x5d,0x4c,0x0f,0x00,0x00,0x5d,0x80,0xe5,0x14,0x25,
57860 +0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,
57861 +0x80,0x3c,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,
57862 +0xf0,0xf0,0xa3,0x74,0x10,0x80,0x27,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
57863 +0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x14,0x25,0xe0,
57864 +0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,
57865 +0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,0xa3,
57866 +0x74,0x8f,0xf0,0xa1,0x80,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
57867 +0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x14,0x25,0xe0,0x24,0xc6,
57868 +0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,
57869 +0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0x74,
57870 +0x0d,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,
57871 +0xf0,0xa3,0xf0,0xa1,0x80,0x90,0x04,0x47,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,
57872 +0x42,0x4d,0x90,0x04,0x46,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,
57873 +0x42,0x5f,0x90,0x04,0x45,0xe0,0x85,0x17,0x82,0x85,0x16,0x83,0xf0,0x90,0x04,0x44,
57874 +0xa1,0x77,0x90,0x04,0x4b,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x4d,0x90,
57875 +0x04,0x4a,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,
57876 +0x04,0x49,0xe0,0x85,0x17,0x82,0x85,0x16,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,
57877 +0x04,0x4f,0xe0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x4d,0x90,0x04,0x4e,0xe0,
57878 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x4d,0xe0,
57879 +0x85,0x17,0x82,0x85,0x16,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,
57880 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x4d,0x90,0x04,0x52,0xe0,0xab,0x18,0xaa,
57881 +0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x42,0x5f,0x90,0x04,0x51,0xe0,0x85,0x17,0x82,
57882 +0x85,0x16,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x17,0x82,0x85,0x16,0x83,0xa3,0xf0,
57883 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,
57884 +0xab,0x1d,0xaa,0x1e,0xa9,0x1f,0x12,0x29,0xd9,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
57885 +0x12,0x42,0x4d,0xab,0x18,0xe5,0x1a,0x24,0x01,0xf9,0xe4,0x35,0x19,0xfa,0xc0,0x03,
57886 +0xc0,0x02,0xc0,0x01,0x12,0x29,0xd9,0xff,0xab,0x1d,0xaa,0x1e,0xa9,0x1f,0x90,0x00,
57887 +0x01,0x12,0x42,0x20,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x4d,0x85,0x17,
57888 +0x82,0x85,0x16,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x1c,0x82,0x85,0x1b,0x83,
57889 +0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x17,0x82,0x85,0x16,0x83,0xa3,
57890 +0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x1c,0x82,0x85,0x1b,0x83,0xa3,0xe0,0xfe,0xef,
57891 +0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,
57892 +0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x15,0x0b,0x74,0x01,0x7e,
57893 +0x00,0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x14,
57894 0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,
57895 -0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x5d,0x15,0x5a,0xe5,0x5a,0xc3,0x94,
57896 -0x00,0x50,0xca,0x80,0x56,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
57897 -0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x5a,0x0f,0x74,0x01,0x7e,0x00,
57898 -0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x59,0x25,
57899 +0x5f,0x4e,0x60,0x06,0xe5,0x15,0x24,0x10,0x80,0x5d,0x15,0x15,0xe5,0x15,0xc3,0x94,
57900 +0x00,0x50,0xca,0x80,0x56,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
57901 +0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x15,0x0f,0x74,0x01,0x7e,0x00,
57902 +0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x14,0x25,
57903 0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,
57904 -0x4e,0x60,0x08,0x90,0x9e,0x4b,0xe5,0x5a,0xf0,0x80,0x10,0x15,0x5a,0xe5,0x5a,0xc3,
57905 -0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x4b,0xf0,0xe5,0x59,0x25,0xe0,0x24,
57906 +0x4e,0x60,0x08,0x90,0x9e,0x30,0xe5,0x15,0xf0,0x80,0x10,0x15,0x15,0xe5,0x15,0xc3,
57907 +0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x30,0xf0,0xe5,0x14,0x25,0xe0,0x24,
57908 0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0xe4,
57909 -0xf5,0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
57910 -0xd8,0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
57911 -0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x4c,0xe5,0x5a,0xf0,0x80,
57912 -0x5b,0x05,0x5a,0xe5,0x5a,0xb4,0x10,0xca,0x80,0x52,0xe5,0x59,0x25,0xe0,0x24,0x02,
57913 +0xf5,0x15,0x74,0x01,0x7e,0x00,0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
57914 +0xd8,0xf9,0xff,0xe5,0x14,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,
57915 +0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x31,0xe5,0x15,0xf0,0x80,
57916 +0x5b,0x05,0x15,0xe5,0x15,0xb4,0x10,0xca,0x80,0x52,0xe5,0x14,0x25,0xe0,0x24,0x02,
57917 0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x39,0xe4,0xf5,
57918 -0x5a,0x74,0x01,0x7e,0x00,0xa8,0x5a,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
57919 -0xf9,0xff,0xe5,0x59,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,
57920 -0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x5a,0x24,0x10,0x80,0x0a,0x05,0x5a,
57921 -0xe5,0x5a,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x4c,0xf0,0x90,0x9e,0x4b,0xe0,
57922 -0xff,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xef,0xf0,0x90,0x9e,
57923 -0x4c,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x49,0x12,0x43,0x5f,0xee,0xf0,
57924 -0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x05,
57925 -0x90,0x9e,0x4b,0x51,0x6f,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
57926 -0xe0,0xff,0x90,0x9e,0x4c,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x02,0x51,0x6f,0x90,0x9e,
57927 -0x4b,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,0x22,0xef,
57928 -0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,0x94,0x03,
57929 -0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,0x22,0xe0,
57930 -0xfd,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xed,0xf0,0xaf,0x59,
57931 -0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,0x50,0x0e,0x74,0x84,0x2f,
57932 -0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,0x74,0xa6,0x2f,0xf5,0x82,
57933 -0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x75,0xef,0xf0,0x24,0xa6,0xf5,0x82,
57934 -0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x76,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x75,
57935 -0x7d,0x02,0x51,0xc9,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
57936 -0x90,0x9e,0x94,0x12,0x43,0x8b,0x90,0x9e,0x97,0xe0,0x54,0xf0,0x44,0x06,0xff,0xf0,
57937 -0xed,0x54,0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9e,0x94,0x12,
57938 -0x43,0x6b,0x90,0x9e,0x91,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x97,0x71,0xd4,
57939 -0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x50,0x8d,0x51,0xe5,0x51,0x54,0x1f,0xf5,0x56,0x74,
57940 -0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,0x54,0x90,0x04,0xfd,0xe0,
57941 -0xb4,0x01,0x05,0x75,0x57,0x03,0x80,0x03,0x75,0x57,0x01,0xeb,0xc3,0x95,0x57,0x40,
57942 -0x04,0xaf,0x50,0x80,0x33,0xe5,0x54,0x25,0x53,0xf5,0x55,0xe5,0x56,0x90,0x41,0xd6,
57943 -0x93,0xff,0xe5,0x55,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,0x50,0xf5,0x82,0xe4,0x34,
57944 -0x94,0xf5,0x83,0xe4,0xf0,0xad,0x51,0xaf,0x50,0x41,0x80,0x25,0x50,0xf5,0x82,0xe4,
57945 -0x34,0x94,0xf5,0x83,0xe5,0x55,0xf0,0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,0x96,
57946 -0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,
57947 -0xe0,0x54,0x1f,0xf5,0x58,0xd3,0x9f,0x40,0x02,0x8f,0x58,0xe5,0x58,0x25,0xe0,0x24,
57948 -0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,
57949 -0x58,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,
57950 -0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,
57951 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x58,0x51,
57952 -0x80,0xaf,0x58,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x8e,0x12,0x43,
57953 -0x8b,0x90,0x9e,0xaf,0xe0,0xff,0x04,0xf0,0x90,0x00,0x01,0xef,0x12,0x42,0x5f,0x7f,
57954 -0xaf,0x7e,0x01,0x91,0x67,0xef,0x60,0x49,0x90,0x9e,0x8e,0x12,0x43,0x6b,0x8b,0x1e,
57955 -0x8a,0x1f,0x89,0x20,0x75,0x21,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x45,0x09,
57956 -0x90,0x9e,0x91,0x12,0x43,0x6b,0x8b,0x1e,0x8a,0x1f,0x89,0x20,0x90,0x9e,0x8e,0x12,
57957 -0x43,0x6b,0x12,0x29,0xd9,0xff,0xc4,0x54,0x0f,0xf5,0x21,0x7b,0x01,0x7a,0x01,0x79,
57958 -0xa2,0x12,0x45,0x09,0x90,0x01,0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,
57959 -0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x2f,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,
57960 -0x0f,0x44,0x80,0xf0,0x7b,0x00,0x7a,0x00,0x79,0x13,0x90,0x9e,0x91,0x12,0x43,0x8b,
57961 -0x0b,0x7a,0x9e,0x79,0x2f,0x61,0xd4,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
57962 -0x9d,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0x9d,0xe0,0xfe,
57963 -0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,0xa0,0xe0,0x94,0xe8,
57964 -0x90,0x9e,0x9f,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x7f,
57965 -0x00,0x80,0x15,0x90,0x9e,0x9f,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,0x7f,0x0a,0x7e,
57966 -0x00,0x12,0x37,0x54,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xac,0x07,0xec,
57967 +0x15,0x74,0x01,0x7e,0x00,0xa8,0x15,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
57968 +0xf9,0xff,0xe5,0x14,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,
57969 +0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x15,0x24,0x10,0x80,0x0a,0x05,0x15,
57970 +0xe5,0x15,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x31,0xf0,0x90,0x9e,0x30,0xe0,
57971 +0xff,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x48,0x12,0x43,0x5f,0xef,0xf0,0x90,0x9e,
57972 +0x31,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x49,0x12,0x43,0x5f,0xee,0xf0,
57973 +0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x06,
57974 +0x90,0x9e,0x30,0x12,0x62,0x94,0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x04,0xf5,
57975 +0x83,0xe0,0xff,0x90,0x9e,0x31,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x03,0x12,0x62,0x94,
57976 +0x90,0x9e,0x30,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,
57977 +0x22,0xef,0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,
57978 +0x94,0x03,0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,
57979 +0x22,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,0xc4,0x13,
57980 +0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x41,0x93,0x12,0x29,0xd9,0xf5,0x60,0x22,0x12,
57981 +0x29,0xd9,0x90,0x95,0x01,0xf0,0x22,0xad,0x07,0x74,0x11,0x2d,0xf5,0x82,0xe4,0x34,
57982 +0xfc,0xf5,0x83,0xe0,0x44,0x01,0xf0,0x90,0x04,0x80,0xe0,0x54,0x0f,0xfc,0x74,0x14,
57983 +0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xc0,0x4c,0xfd,0x74,0x14,0x2f,
57984 +0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xed,0xf0,0x22,0xef,0x60,0x0f,0x74,0x21,0x2d,
57985 +0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x22,0x74,0x21,0x2d,0xf5,
57986 +0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x22,0xe4,0xf5,0x60,0xf5,0x64,
57987 +0xf5,0x63,0x75,0x62,0x0c,0x75,0x61,0x0c,0x90,0x9e,0x66,0xf0,0x90,0x9e,0x64,0xf0,
57988 +0x90,0x9e,0x63,0xf0,0x90,0x9e,0x65,0x04,0xf0,0x90,0x9e,0x56,0xf0,0xe4,0x90,0x9e,
57989 +0x67,0xf0,0x90,0x9e,0x58,0xf0,0x90,0x9e,0x61,0x74,0x07,0xf0,0xe4,0x90,0x9e,0x57,
57990 +0xf0,0x90,0x9e,0x5f,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x5c,0x74,0x0a,0xf0,0xa3,
57991 +0x74,0x05,0xf0,0x90,0x9e,0x5b,0x74,0x14,0xf0,0x90,0x9e,0x62,0x74,0x05,0xf0,0xe4,
57992 +0x90,0x9e,0x5a,0xf0,0x90,0x9e,0x55,0xf0,0x90,0x9e,0x7f,0xf0,0x90,0x9e,0x5e,0xf0,
57993 +0x22,0xe4,0x90,0x9e,0x67,0xf0,0x90,0x9e,0x57,0xf0,0xf5,0x64,0x22,0x7f,0x00,0x22,
57994 +0xe5,0x62,0x30,0xe6,0x19,0xe5,0x62,0x54,0x0f,0xff,0x90,0x9e,0x54,0xe0,0xfe,0x4f,
57995 +0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x54,0xf0,0x53,0x62,0xbf,0x22,0xe5,
57996 +0x60,0x64,0x01,0x70,0x68,0xe5,0x63,0x60,0x64,0xe5,0x63,0x64,0x02,0x60,0x06,0xe5,
57997 +0x63,0x64,0x05,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x56,0xf0,0x90,0x06,0xaa,
57998 +0xe0,0x90,0x9e,0x65,0xf0,0x90,0x9e,0x56,0xe0,0x70,0x07,0x90,0x9e,0x65,0xe0,0xff,
57999 +0x80,0x05,0x90,0x9e,0x56,0xe0,0xff,0x90,0x9e,0x56,0xef,0xf0,0x90,0x9e,0x58,0xe0,
58000 +0x60,0x03,0xe0,0x14,0xf0,0xe4,0x90,0x9e,0x57,0xf0,0x90,0x05,0x58,0x74,0x03,0xf0,
58001 +0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x53,0x64,0xfd,0x53,0x64,
58002 +0xef,0xe5,0x63,0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,0x45,0x53,0x22,0xe4,0xfb,
58003 +0x90,0x9e,0x9c,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe5,0x63,0x60,0x6a,0xe5,0x60,
58004 +0x64,0x01,0x70,0x64,0xe5,0x63,0x14,0x60,0x2b,0x24,0xfd,0x60,0x27,0x24,0x02,0x24,
58005 +0xfb,0x50,0x02,0x80,0x21,0x90,0x9e,0x56,0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,
58006 +0x60,0x14,0x90,0x9e,0x56,0xe0,0x70,0x08,0x90,0x9e,0x65,0xe0,0x90,0x9e,0x56,0xf0,
58007 +0x7b,0x01,0x80,0x02,0x7b,0x01,0xeb,0x60,0x2f,0x43,0x64,0x10,0xe4,0x90,0x9e,0x85,
58008 +0xf0,0x90,0x9e,0x57,0xe0,0x75,0xf0,0x03,0xa4,0xff,0x90,0x9e,0x61,0xe0,0x2f,0x12,
58009 +0x44,0x53,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x61,0x54,0x0f,0xc3,0x94,0x04,0x50,
58010 +0x07,0x7d,0x01,0x7f,0x04,0x12,0x54,0xe7,0x22,0xe4,0x90,0x9e,0x15,0xf0,0xe5,0x63,
58011 +0x60,0x79,0x90,0x9e,0x67,0xe0,0x60,0x0d,0xe4,0xf0,0x53,0x64,0xfd,0xe5,0x64,0x54,
58012 +0x07,0x70,0x68,0x80,0x63,0x90,0x9e,0x57,0xe0,0x04,0xf0,0x53,0x64,0xef,0x90,0x9e,
58013 +0x15,0xe0,0xf9,0xff,0x7e,0x00,0x24,0x01,0xfd,0xee,0x33,0xfc,0x90,0x9e,0x57,0xe0,
58014 +0xb5,0x05,0x06,0xe4,0xb5,0x04,0x02,0x80,0x12,0xef,0x24,0x02,0xff,0xe4,0x3e,0xfe,
58015 +0x90,0x9e,0x57,0xe0,0xb5,0x07,0x0a,0xe4,0xb5,0x06,0x06,0x90,0x05,0x58,0xe0,0x04,
58016 +0xf0,0xe9,0xff,0x90,0x9e,0x5c,0xe0,0x2f,0xff,0xe4,0x33,0xfe,0x90,0x9e,0x57,0xe0,
58017 +0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x40,0x0d,0xe5,0x60,0xb4,0x01,0x0b,
58018 +0xa3,0xe0,0x70,0x07,0xe0,0x04,0xf0,0x22,0x12,0x44,0xcb,0x22,0x90,0x9e,0x5f,0xe0,
58019 +0xa3,0xe0,0x90,0x05,0x58,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
58020 +0x93,0x12,0x43,0x8b,0x90,0x9e,0x96,0xe0,0x54,0xf0,0x44,0x06,0xff,0xf0,0xed,0x54,
58021 +0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9e,0x93,0x12,0x43,0x6b,
58022 +0x90,0x9e,0x90,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x96,0x12,0x53,0xf1,0xd0,
58023 +0xd0,0x92,0xaf,0x22,0xe0,0xfd,0x74,0x26,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
58024 +0x83,0xed,0xf0,0xaf,0x14,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,
58025 +0x50,0x0e,0x74,0x84,0x2f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,
58026 +0x74,0xa6,0x2f,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x68,0xef,
58027 +0xf0,0x24,0xa6,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0x69,0xf0,0x7b,
58028 +0x01,0x7a,0x9e,0x79,0x68,0x7d,0x02,0x51,0x57,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x0a,
58029 +0x8d,0x0b,0xe5,0x0b,0x54,0x1f,0xf5,0x10,0x74,0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,
58030 +0xf5,0x83,0xe0,0xf5,0x0e,0x90,0x04,0xfd,0xe0,0xb4,0x01,0x05,0x75,0x11,0x03,0x80,
58031 +0x03,0x75,0x11,0x01,0xeb,0xc3,0x95,0x11,0x40,0x04,0xaf,0x0a,0x80,0x33,0xe5,0x0e,
58032 +0x25,0x0d,0xf5,0x0f,0xe5,0x10,0x90,0x41,0xd6,0x93,0xff,0xe5,0x0f,0xd3,0x9f,0x74,
58033 +0x01,0x40,0x11,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xad,0x0b,
58034 +0xaf,0x0a,0x41,0xa5,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe5,0x0f,0xf0,
58035 +0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x74,
58036 +0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xe0,0x54,0x1f,0xf5,0x12,0xd3,0x9f,
58037 +0x40,0x02,0x8f,0x12,0xe5,0x12,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,
58038 +0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x12,0x25,0xe0,0x24,0x66,0xf5,0x82,
58039 +0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,
58040 +0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,
58041 +0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x12,0x51,0xa5,0xaf,0x12,0x22,0xac,0x07,0xec,
58042 0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
58043 0x80,0x0b,0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,
58044 -0x64,0xe5,0x64,0x54,0x1f,0xff,0x90,0x9e,0x40,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,
58045 -0x49,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x42,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,
58046 -0x12,0x43,0x5f,0xe0,0xfe,0x90,0x9e,0x43,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
58047 -0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x44,0xcb,0xf0,0xa3,0xeb,
58048 +0x1f,0xe5,0x1f,0x54,0x1f,0xff,0x90,0x9e,0x25,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,
58049 +0x49,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x27,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,
58050 +0x12,0x43,0x5f,0xe0,0xfe,0x90,0x9e,0x28,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
58051 +0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x29,0xcb,0xf0,0xa3,0xeb,
58052 0xf0,0xec,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,
58053 -0xe0,0x90,0x9e,0x46,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,
58054 -0x43,0xe0,0x90,0x9e,0x40,0xf0,0xf5,0x64,0xed,0x70,0x02,0xc1,0x13,0x90,0x9e,0x41,
58055 -0xed,0xf0,0xe5,0x64,0x30,0xe6,0x0a,0x90,0x9e,0x40,0xe0,0xf5,0x64,0xa3,0xe0,0x14,
58056 -0xf0,0x90,0x9e,0x41,0xe0,0x70,0x02,0xc1,0x13,0x90,0x9e,0x40,0xe0,0xff,0xd3,0x94,
58057 -0x00,0x50,0x02,0xc1,0x13,0xe4,0x90,0x9e,0x3f,0xf0,0xef,0x14,0x90,0x9e,0x3e,0xf0,
58058 -0x90,0x9e,0x42,0xe0,0xfd,0x90,0x9e,0x3e,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,
58059 +0xe0,0x90,0x9e,0x2b,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,
58060 +0x28,0xe0,0x90,0x9e,0x25,0xf0,0xf5,0x1f,0xed,0x70,0x02,0xa1,0x13,0x90,0x9e,0x26,
58061 +0xed,0xf0,0xe5,0x1f,0x30,0xe6,0x0a,0x90,0x9e,0x25,0xe0,0xf5,0x1f,0xa3,0xe0,0x14,
58062 +0xf0,0x90,0x9e,0x26,0xe0,0x70,0x02,0xa1,0x13,0x90,0x9e,0x25,0xe0,0xff,0xd3,0x94,
58063 +0x00,0x50,0x02,0xa1,0x13,0xe4,0x90,0x9e,0x24,0xf0,0xef,0x14,0x90,0x9e,0x23,0xf0,
58064 +0x90,0x9e,0x27,0xe0,0xfd,0x90,0x9e,0x23,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,
58065 0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
58066 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x46,0xe0,0x5e,0xfe,0xa3,0xe0,
58067 -0x5f,0x4e,0x70,0x27,0x90,0x9e,0x3e,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,
58068 +0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x2b,0xe0,0x5e,0xfe,0xa3,0xe0,
58069 +0x5f,0x4e,0x70,0x27,0x90,0x9e,0x23,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,
58070 0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
58071 -0x9e,0x44,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x3e,0xe0,0xf5,
58072 -0x64,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,0x3f,0xe0,0x6f,0x60,
58073 -0x08,0x90,0x9e,0x3e,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x41,0xe0,0xff,0x90,0x9e,
58074 -0x3f,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x3e,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x42,
58075 -0xe0,0xf5,0x64,0xe5,0x64,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
58076 -0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x64,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
58077 +0x9e,0x29,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x23,0xe0,0xf5,
58078 +0x1f,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x26,0xe0,0xff,0x90,0x9e,0x24,0xe0,0x6f,0x60,
58079 +0x08,0x90,0x9e,0x23,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x26,0xe0,0xff,0x90,0x9e,
58080 +0x24,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x23,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x27,
58081 +0xe0,0xf5,0x1f,0xe5,0x1f,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
58082 +0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x1f,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
58083 0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
58084 0x13,0xff,0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
58085 -0xa3,0xef,0xf0,0xaf,0x04,0xad,0x64,0x51,0x80,0xaf,0x64,0x22,0x8f,0x77,0x12,0x45,
58086 -0xa6,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x52,0x12,0x47,0xcc,0xe5,0x77,0x60,0x10,
58087 -0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,
58088 -0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,
58089 -0x1f,0x74,0x20,0xf0,0x22,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,
58090 -0x22,0xb4,0x01,0x04,0xe4,0xff,0xd1,0x5c,0x53,0x23,0xf0,0x43,0x23,0x0c,0x22,0x90,
58091 -0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,0xa3,
58092 -0xf0,0xa3,0xf0,0xfd,0x7f,0x54,0x12,0x4c,0xe3,0x7d,0xff,0x7f,0x55,0x12,0x4c,0xe3,
58093 -0x7d,0xff,0x7f,0x56,0x12,0x4c,0xe3,0x7d,0xff,0x7f,0x57,0x02,0x4c,0xe3,0x90,0x00,
58094 -0x02,0xe0,0x54,0xe0,0x7f,0x01,0x60,0x02,0x7f,0x00,0x22,0x90,0x00,0xf3,0xe0,0x7f,
58095 -0x00,0x30,0xe3,0x03,0x7f,0x01,0x22,0x22,0x90,0x01,0x64,0x74,0xa0,0xf0,0x22,0xc0,
58096 -0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,
58097 -0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,
58098 -0xff,0xf0,0x74,0x5e,0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,0x90,0x00,
58099 -0x55,0xe0,0x5f,0xf5,0x3d,0xe5,0x3d,0x30,0xe6,0x18,0x74,0x40,0xf0,0x90,0x9e,0x1d,
58100 -0xe0,0x54,0x03,0xff,0xbf,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0x60,0x05,0x7f,0x01,0x12,
58101 -0x4c,0xf8,0xe5,0x3d,0x30,0xe7,0x15,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x9e,0x1d,
58102 -0xe0,0x54,0x03,0xff,0xbf,0x03,0x05,0x7f,0x02,0x12,0x4c,0xf8,0x90,0x01,0xc4,0x74,
58103 -0xff,0xf0,0x74,0x5e,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,
58104 -0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,
58105 -0x32,0x8f,0x6b,0x8c,0x6c,0x8d,0x6d,0x22,0x8f,0x6e,0x8c,0x6f,0x8d,0x70,0x22,0xe4,
58106 -0xf5,0x22,0xf5,0x26,0xf5,0x25,0x75,0x24,0x0c,0x75,0x23,0x0c,0x90,0x9e,0x73,0xf0,
58107 -0x90,0x9e,0x71,0xf0,0x90,0x9e,0x70,0xf0,0x90,0x9e,0x72,0x04,0xf0,0x90,0x9e,0x64,
58108 -0xf0,0xe4,0x90,0x9e,0x74,0xf0,0x90,0x9e,0x66,0xf0,0x90,0x9e,0x6e,0x74,0x07,0xf0,
58109 -0xe4,0x90,0x9e,0x65,0xf0,0x90,0x9e,0x6c,0xf0,0xa3,0x74,0x02,0xf0,0x90,0x9e,0x6a,
58110 -0x14,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x69,0x74,0x14,0xf0,0x90,0x9e,0x6f,0x74,
58111 -0x05,0xf0,0xe4,0x90,0x9e,0x68,0xf0,0x90,0x9e,0x63,0xf0,0x90,0x9e,0x5f,0xf0,0x22,
58112 -0xe4,0x90,0x9e,0x74,0xf0,0x90,0x9e,0x65,0xf0,0xf5,0x26,0x22,0x8b,0x59,0x8a,0x5a,
58113 -0x89,0x5b,0x11,0x00,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x12,0x29,0xd9,0xf5,0x25,0x14,
58114 -0x60,0x0e,0x14,0x60,0x1e,0x14,0x60,0x2f,0x24,0x03,0x70,0x40,0x7f,0x01,0x80,0x3a,
58115 -0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0xe4,0xff,0x11,
58116 -0x6d,0x80,0x27,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,
58117 -0x7f,0x01,0x11,0x6d,0x1f,0x80,0x13,0xab,0x59,0xaa,0x5a,0xa9,0x5b,0x90,0x00,0x02,
58118 -0x12,0x42,0x20,0xfd,0x7f,0x02,0x11,0x6d,0xe4,0xff,0x11,0x98,0x22,0xef,0x24,0xfe,
58119 -0x60,0x0b,0x04,0x70,0x22,0x90,0x9e,0x72,0x74,0x01,0xf0,0x80,0x16,0xed,0x70,0x0a,
58120 -0x90,0x9e,0x6f,0xe0,0x90,0x9e,0x72,0xf0,0x80,0x05,0x90,0x9e,0x72,0xed,0xf0,0x90,
58121 -0x9e,0x72,0xe0,0x90,0x9e,0x64,0xf0,0x22,0xef,0x64,0x01,0x70,0x2f,0x7d,0x7c,0x7f,
58122 -0x02,0x12,0x36,0x75,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0x90,0x01,0x57,0xe4,0xf0,
58123 -0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x47,0x2b,0xe4,0xff,0x31,0x1f,0x90,0x06,0x04,
58124 -0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,
58125 -0x7c,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x36,0xe6,0x7d,0x02,0x7f,0x03,
58126 -0x12,0x36,0xe6,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,
58127 -0xf0,0x90,0x9e,0x6c,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x22,0x30,0xe0,0x19,
58128 -0x90,0x9e,0x66,0xe0,0x70,0x18,0xe0,0x04,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x04,
58129 -0x50,0x0c,0x7d,0x01,0x7f,0x04,0x02,0x47,0x2f,0xe4,0x90,0x9e,0x66,0xf0,0x22,0xef,
58130 -0x60,0x0b,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x9e,0x60,
58131 -0xe0,0xb4,0x01,0x05,0x7f,0x01,0x12,0x77,0xd1,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,
58132 -0x90,0x05,0x22,0x74,0xff,0xf0,0x31,0xc3,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,
58133 -0xf0,0x7d,0x02,0x7f,0x03,0x12,0x36,0xe6,0xe5,0x25,0x60,0x04,0x7f,0x01,0x31,0x1f,
58134 -0x51,0x04,0x53,0x23,0xf0,0x43,0x23,0x02,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
58135 -0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x73,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,
58136 -0x90,0x9e,0x63,0xf0,0x12,0x29,0xd9,0x65,0x25,0x60,0x02,0x11,0x0c,0xd0,0xd0,0x92,
58137 -0xaf,0x22,0x7d,0x02,0x7f,0x03,0x12,0x36,0x75,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,
58138 -0x80,0x20,0x90,0x9e,0x73,0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0d,0xe5,0x23,
58139 -0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x47,0x2f,0xe4,0xff,
58140 -0x31,0x1f,0x22,0xe4,0x90,0x9e,0xa9,0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,
58141 -0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,
58142 -0x90,0x9e,0xaa,0xe0,0x94,0xe8,0x90,0x9e,0xa9,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,
58143 -0x22,0x7f,0x32,0x7e,0x00,0x12,0x37,0x54,0x90,0x9e,0xa9,0xe4,0x75,0xf0,0x01,0x12,
58144 -0x42,0x81,0x80,0xc6,0x7f,0x78,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xff,0x12,0x2a,
58145 -0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0x03,0x12,0x2a,0x7f,0x7f,0x00,
58146 -0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x07,0x12,0x2a,0x7f,0x90,0x9e,0x60,0xe0,0x90,
58147 -0x9d,0xff,0xb4,0x01,0x0d,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,
58148 -0x80,0x07,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,
58149 -0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0xef,0x54,0x0f,
58150 -0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,
58151 -0x9e,0x07,0x12,0x43,0x53,0xef,0x44,0x02,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,
58152 -0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9e,
58153 -0x0b,0x12,0x2a,0x7f,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa0,0x7f,0x70,
58154 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,
58155 -0xfd,0xff,0x12,0x34,0x81,0x90,0x9e,0x60,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,
58156 -0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x22,0x12,0x4b,
58157 -0xc4,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x30,0x90,0x9e,
58158 -0x71,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x22,0x90,0x9e,0x70,0xe0,
58159 -0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x14,0xe5,0x24,0x54,0x0f,0xd3,0x94,
58160 -0x04,0x40,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,
58161 -0xb8,0x74,0x08,0xf0,0x7f,0x00,0x22,0x12,0x4b,0xc4,0xef,0x64,0x01,0x60,0x08,0x90,
58162 -0x01,0xb9,0x74,0x01,0xf0,0x80,0x4a,0xe5,0x26,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,
58163 -0x74,0x02,0xf0,0x80,0x3c,0xe5,0x24,0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,
58164 -0xb9,0x74,0x04,0xf0,0x80,0x2b,0xe5,0x26,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,
58165 -0xf0,0x80,0x1e,0xe5,0x26,0x30,0xe4,0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x11,
58166 -0x90,0x9e,0x66,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x20,0xf0,0x80,0x03,0x7f,0x01,
58167 -0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,0x7f,0x00,0x22,0xe5,0x12,0x60,0x08,0x90,0x01,
58168 -0xb9,0x74,0x01,0xf0,0x80,0x5b,0xe5,0x24,0x54,0x0f,0xd3,0x94,0x01,0x40,0x08,0x90,
58169 -0x01,0xb9,0x74,0x02,0xf0,0x80,0x4a,0x90,0x02,0x87,0xe0,0x60,0x08,0x90,0x01,0xb9,
58170 -0x74,0x04,0xf0,0x80,0x3c,0x90,0x9e,0x5e,0xe0,0xb4,0x01,0x10,0x90,0x9e,0x4d,0xe0,
58171 -0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x16,0x80,0x25,0x90,0x9e,0x5e,0xe0,
58172 -0x70,0x0e,0x90,0x01,0xaf,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x11,
58173 -0x90,0x9e,0x68,0xe0,0x70,0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x03,0x7f,0x01,
58174 -0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,0x7f,0x00,0x22,0x90,0x9e,0xae,0xef,0xf0,0x91,
58175 -0x03,0x90,0x9e,0xae,0xe0,0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0x53,0x23,0xf0,0x43,
58176 -0x23,0x04,0x22,0x90,0x9d,0xff,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
58177 +0xa3,0xef,0xf0,0xaf,0x04,0xad,0x1f,0x51,0xa5,0xaf,0x1f,0x22,0xad,0x07,0xed,0xc3,
58178 +0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,
58179 +0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x1f,
58180 +0xe5,0x1f,0x54,0x1f,0xfc,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,
58181 +0xff,0x90,0x9e,0x23,0xf0,0xed,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,
58182 +0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x24,0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,0xe0,
58183 +0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x26,
58184 +0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,
58185 +0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,0xfb,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
58186 +0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,0xeb,0xf0,0xec,0xc3,0x9f,0x40,0x02,0xc1,0x7a,
58187 +0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,0x9e,
58188 +0x23,0xe0,0xff,0xeb,0xd3,0x9f,0x40,0x02,0xc1,0xab,0xeb,0xc3,0x94,0x10,0x40,0x21,
58189 +0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,
58190 +0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x24,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,
58191 +0x23,0xeb,0xc3,0x94,0x10,0x50,0x40,0x74,0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,0x05,
58192 +0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x26,0xe0,0x5e,0xfe,0xa3,0xe0,
58193 +0x5f,0x4e,0x60,0x23,0xbb,0x11,0x09,0x90,0x9e,0x25,0xe0,0x30,0xe7,0x02,0x7b,0x17,
58194 +0xeb,0x64,0x13,0x60,0x03,0xbb,0x12,0x09,0x90,0x9e,0x24,0xe0,0x30,0xe0,0x02,0x7b,
58195 +0x18,0xac,0x03,0x8c,0x1f,0x80,0x34,0x0b,0x80,0x84,0x90,0x9e,0x23,0xe0,0xfb,0x6c,
58196 +0x70,0x69,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,
58197 +0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,0xe0,0xb4,0x01,0x0c,0xe5,0x1f,0x20,0xe6,
58198 +0x07,0xec,0x44,0x40,0xf5,0x1f,0x80,0x03,0xaf,0x1f,0x22,0xec,0x25,0xe0,0x24,0x9e,
58199 +0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,
58200 +0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,
58201 +0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
58202 +0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,
58203 +0x90,0x9e,0x23,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,
58204 +0xf0,0xac,0x07,0x8f,0x1f,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,
58205 +0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,
58206 +0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,
58207 +0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,
58208 +0xa3,0xef,0xf0,0xaf,0x1f,0x22,0x74,0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,
58209 +0xe4,0xf0,0xaf,0x05,0xe5,0x1f,0x44,0x80,0xfd,0x51,0xa5,0xe5,0x1f,0x44,0x80,0xff,
58210 +0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,0xc4,0x54,0xf0,0xfd,
58211 +0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x0f,
58212 +0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
58213 +0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x4d,0xf0,
58214 +0x22,0xe4,0xf5,0x14,0xe5,0x14,0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,
58215 +0x95,0x01,0xe0,0xff,0x90,0x9a,0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,
58216 +0xe5,0x14,0x90,0x96,0x4b,0x12,0x43,0x5f,0xe0,0x64,0x01,0x60,0x03,0x02,0x6e,0x6a,
58217 +0xe5,0x14,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,
58218 +0xe0,0xd3,0x94,0x00,0xee,0x94,0x00,0x50,0x03,0x02,0x6e,0x6a,0xe5,0x14,0x94,0x20,
58219 +0x40,0x09,0x90,0x9a,0xc5,0xe0,0x60,0x03,0x02,0x6e,0x76,0xe5,0x14,0x75,0xf0,0x0a,
58220 +0xa4,0x24,0x00,0xf9,0x74,0x90,0x35,0xf0,0x75,0x18,0x01,0xf5,0x19,0x89,0x1a,0xe5,
58221 +0x14,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,
58222 +0x90,0x9e,0x1b,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x14,0x25,0xe0,0x24,0xc4,0xf5,0x82,
58223 +0xe4,0x34,0x98,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x1d,0xcf,0xf0,0xa3,0xef,
58224 +0xf0,0xe5,0x14,0xc3,0x94,0x20,0x50,0x14,0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,
58225 +0x04,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x19,0xf0,0x80,0x12,0x74,0xa6,0x25,0x14,
58226 +0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x19,0xf0,0x90,0x9e,
58227 +0x19,0xe0,0xfe,0x54,0x1f,0xa3,0xf0,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x48,0x12,
58228 +0x43,0x5f,0xe0,0x90,0x9e,0x20,0xf0,0x74,0xe6,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,
58229 +0xf5,0x83,0xe0,0xc3,0x94,0x05,0x40,0x02,0x41,0x9f,0x90,0x9e,0x20,0xe0,0xff,0x90,
58230 +0x9e,0x1a,0xe0,0x9f,0x40,0x13,0x90,0x9e,0x20,0xe0,0x90,0x9e,0x1a,0xf0,0xee,0x54,
58231 +0x40,0xfe,0x90,0x9e,0x19,0xf0,0xef,0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x54,0x05,0x64,
58232 +0x01,0x70,0x29,0x90,0x9e,0x1a,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,
58233 +0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,
58234 +0xda,0x80,0x30,0x90,0x9e,0x1a,0xe0,0x90,0x40,0xf6,0x80,0x27,0x90,0x9e,0x1a,0xe0,
58235 +0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
58236 +0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x41,0x12,0x80,0x07,0x90,0x9e,0x1a,0xe0,
58237 +0x90,0x41,0x2e,0x93,0x90,0x9e,0x1f,0xf0,0x90,0x9e,0x1f,0xe0,0x75,0xf0,0x06,0xa4,
58238 +0x24,0x50,0xf9,0x74,0x40,0x35,0xf0,0xfa,0x7b,0xff,0x8b,0x15,0xf5,0x16,0x89,0x17,
58239 +0xe5,0x14,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xf5,0x1b,
58240 +0xa3,0xe0,0xf5,0x1c,0x12,0x29,0xd9,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,
58241 +0x12,0x42,0x97,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,
58242 +0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x01,0x12,0x42,0x20,0xff,
58243 +0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,
58244 +0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,
58245 +0xaa,0x16,0xa9,0x17,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x18,0xaa,
58246 +0x19,0xa9,0x1a,0x90,0x00,0x04,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,
58247 +0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,
58248 +0x00,0x03,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,
58249 +0x06,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,
58250 +0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x04,0x12,0x42,0x20,
58251 +0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,
58252 +0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,
58253 +0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,
58254 +0x1b,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x29,0xf2,0xd3,0xe5,0x1c,0x9f,0xe5,0x1b,0x9e,
58255 +0x40,0x0c,0xe5,0x1c,0x9f,0xf5,0x1c,0xe5,0x1b,0x9e,0xf5,0x1b,0x80,0x05,0xe4,0xf5,
58256 +0x1b,0xf5,0x1c,0xe5,0x14,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
58257 +0xe5,0x1b,0xf0,0xa3,0xe5,0x1c,0xf0,0x90,0x9e,0x19,0xe0,0x25,0xe0,0x24,0x66,0xf5,
58258 +0x82,0xe4,0x34,0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,0x95,0x1b,
58259 +0x50,0x07,0xaf,0x14,0x12,0x65,0x5c,0xa1,0x31,0x90,0x9e,0x19,0xe0,0x25,0xe0,0x24,
58260 +0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,
58261 +0x95,0x1b,0x50,0x02,0xa1,0x31,0x7d,0x01,0xaf,0x14,0x12,0x63,0xbd,0xa1,0x31,0x74,
58262 +0xe6,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,
58263 +0x81,0x3a,0x90,0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x1a,0xe0,0xc3,0x94,
58264 +0x19,0x40,0x3d,0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x1a,0xe0,0xc3,0x94,0x11,
58265 +0x40,0x2e,0x80,0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x1a,0xe0,
58266 +0xc3,0x94,0x0a,0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x1a,0xe0,0xc3,0x94,
58267 +0x03,0x40,0x0d,0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,
58268 +0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1e,0x74,0x44,
58269 +0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,
58270 +0x61,0xe7,0x90,0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0x61,0xe7,0x74,0x85,0x25,0x14,
58271 +0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,
58272 +0xe4,0x33,0xfe,0x74,0x41,0x25,0x14,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,
58273 +0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,
58274 +0x33,0xfe,0x74,0x44,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,
58275 +0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x14,0xf5,0x82,0xe4,
58276 +0x34,0x9d,0xf5,0x83,0xe0,0xff,0x90,0x9e,0x1a,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,
58277 +0x14,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,
58278 +0x1e,0x05,0x80,0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x1e,0x03,0x80,0x03,0x75,
58279 +0x1e,0x01,0x74,0x41,0x25,0x14,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,
58280 +0x85,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x14,0xf5,0x82,
58281 +0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9a,
58282 +0xf5,0x83,0xe0,0x04,0xf0,0x80,0x10,0xe4,0xf5,0x1e,0x74,0xe6,0x25,0x14,0xf5,0x82,
58283 +0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x1a,0xe0,0xff,0x74,0x26,0x25,0x14,
58284 +0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x14,0xf5,0x82,0xe4,
58285 +0x34,0x98,0xf5,0x83,0xe5,0x1e,0xf0,0x75,0xf0,0x09,0xe5,0x14,0x90,0x96,0x4c,0x12,
58286 +0x43,0x5f,0xe0,0xb4,0x01,0x10,0xe4,0xf5,0x1e,0x74,0xe6,0x25,0x14,0xf5,0x82,0xe4,
58287 +0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xad,0x1e,0xa1,0x2c,0xec,0x64,0x06,0x60,0x02,0xa1,
58288 +0x31,0xf5,0x1b,0xf5,0x1c,0x90,0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x1b,0xe0,
58289 +0xfc,0xa3,0xe0,0xfd,0x12,0x29,0xf2,0x90,0x9e,0x21,0xee,0xf0,0xa3,0xef,0xf0,0x74,
58290 +0x84,0x25,0x14,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1e,0xe4,0xf5,0x1d,
58291 +0xab,0x18,0xaa,0x19,0xa9,0x1a,0x75,0xf0,0x02,0xe5,0x1d,0xa4,0xf5,0x82,0x85,0xf0,
58292 +0x83,0x12,0x42,0xc2,0xfd,0xac,0xf0,0xe5,0x1d,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,
58293 +0x12,0x29,0xf2,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xc3,0x90,0x9e,
58294 +0x22,0xe0,0x95,0x1c,0x90,0x9e,0x21,0xe0,0x95,0x1b,0x40,0x07,0x05,0x1d,0xe5,0x1d,
58295 +0xb4,0x05,0xbd,0xe5,0x1d,0xc3,0x13,0xf5,0x1d,0xe5,0x1e,0xb4,0x01,0x06,0xe5,0x1d,
58296 +0x70,0x46,0x80,0x13,0xe5,0x1e,0xb4,0x03,0x15,0xe5,0x1d,0x70,0x05,0x75,0x1e,0x03,
58297 +0x80,0x39,0xe5,0x1d,0xb4,0x01,0x05,0x75,0x1e,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x1e,
58298 +0xb4,0x05,0x28,0xe5,0x1d,0x70,0x05,0x75,0x1e,0x05,0x80,0x0d,0xe5,0x1d,0xb4,0x01,
58299 +0x05,0x75,0x1e,0x03,0x80,0x03,0x75,0x1e,0x01,0xd3,0x90,0x9e,0x1e,0xe0,0x94,0x03,
58300 +0x90,0x9e,0x1d,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1e,0xd3,0x90,0x9e,0x1e,0xe0,
58301 +0x94,0x03,0x90,0x9e,0x1d,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1e,0x74,0x84,0x25,
58302 +0x14,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe5,0x1e,0xf0,0xfd,0xaf,0x14,0x12,0x67,
58303 +0x61,0x74,0xe6,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,
58304 +0x74,0xe6,0x50,0x0e,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,
58305 +0x80,0x0b,0x25,0x14,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x1d,
58306 +0xe0,0xfe,0xa3,0xe0,0xff,0xc3,0x74,0xff,0x9f,0xfd,0x74,0xff,0x9e,0xfc,0xe5,0x14,
58307 +0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xd3,
58308 +0x9d,0xea,0x9c,0xe5,0x14,0x50,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,
58309 +0xf5,0x83,0xee,0x8f,0xf0,0x12,0x42,0x81,0x80,0x10,0x25,0xe0,0x24,0xc6,0xf5,0x82,
58310 +0xe4,0x34,0x9a,0xf5,0x83,0x74,0xff,0xf0,0xa3,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x44,
58311 +0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xff,0xc3,0x74,0xff,0x9f,
58312 +0xfd,0x74,0xff,0x9e,0xfc,0xe5,0x14,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,
58313 +0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xd3,0x9d,0xea,0x9c,0xe5,0x14,0x50,0x13,0x25,0xe0,
58314 +0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xee,0x8f,0xf0,0x12,0x42,0x81,0x80,
58315 +0x10,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xff,0xf0,0xa3,
58316 +0xf0,0xab,0x18,0xaa,0x19,0xa9,0x1a,0xe4,0xf5,0xf0,0x12,0x42,0xfa,0xab,0x18,0xaa,
58317 +0x19,0xa9,0x1a,0x90,0x00,0x02,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x04,0xe4,
58318 +0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x06,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,
58319 +0x08,0xe4,0xf5,0xf0,0x12,0x43,0x19,0xe5,0x14,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
58320 +0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x14,0x25,0xe0,0x24,0xc4,0xf5,0x82,
58321 +0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x14,0x25,0xe0,0x24,0x44,0xf5,
58322 +0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x05,0x14,0xe5,0x14,0xc3,0x94,
58323 +0x40,0x50,0x03,0x02,0x67,0xa4,0x22,0x90,0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,
58324 +0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,0xf0,0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,
58325 +0x04,0xf5,0x83,0xe4,0xf0,0x0d,0xbd,0x10,0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,
58326 +0x01,0x04,0xf0,0xe4,0xfd,0x75,0xf0,0x0a,0xed,0x90,0x90,0x00,0x12,0x43,0x5f,0xe4,
58327 +0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x02,0x12,0x43,0x5f,0xe4,0xf0,0xa3,
58328 +0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x04,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,
58329 +0xf0,0x0a,0xed,0x90,0x90,0x06,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,
58330 +0xed,0x90,0x90,0x08,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,
58331 +0xe4,0x34,0x9d,0xf5,0x83,0x74,0x13,0xf0,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,
58332 +0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,
58333 +0xed,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
58334 +0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
58335 +0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
58336 +0xed,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
58337 +0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
58338 +0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
58339 +0x74,0x86,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,
58340 +0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,
58341 +0xf5,0x83,0xe4,0xf0,0x90,0x41,0xc4,0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,
58342 +0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,
58343 +0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,
58344 +0xf0,0x09,0xed,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,
58345 +0x90,0x96,0x4a,0x12,0x43,0x5f,0x74,0x01,0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,
58346 +0x95,0xf5,0x83,0x74,0x0c,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x5f,
58347 +0x74,0xff,0xf0,0xa3,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x44,0x12,0x43,0x5f,0xe4,
58348 +0xf0,0xa3,0x74,0x0f,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0x74,
58349 +0x13,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x49,0x12,0x43,0x5f,0xe4,0xf0,0xed,0xc3,
58350 +0x94,0x20,0x50,0x0f,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,
58351 +0xf0,0x80,0x0d,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,
58352 +0x0d,0xed,0x64,0x40,0x60,0x03,0x02,0x6e,0xa5,0x22,0x12,0x29,0xd9,0xf5,0x14,0xc3,
58353 +0x94,0x40,0x50,0x15,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x74,0x44,0x25,0x14,0xf5,
58354 +0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,0xf0,0x22,0xe5,0x14,0xb4,0x40,0x0a,0x90,0x00,
58355 +0x02,0x12,0x42,0x20,0x90,0x96,0x42,0xf0,0x22,0x90,0x9e,0x30,0x12,0x43,0x8b,0x90,
58356 +0x9e,0x33,0xe0,0x54,0xf0,0x44,0x02,0xf0,0x54,0x0f,0x44,0xc0,0xf0,0x90,0x9e,0x30,
58357 +0x12,0x43,0x6b,0x90,0x9e,0x90,0x12,0x43,0x8b,0x7b,0x01,0x7a,0x9e,0x79,0x33,0x02,
58358 +0x53,0xf1,0x90,0x00,0x02,0x12,0x42,0x20,0xfd,0x90,0x00,0x01,0x12,0x42,0x20,0xfc,
58359 +0xed,0xc3,0x94,0x40,0x40,0x02,0xe4,0xfd,0xec,0xc3,0x94,0x40,0x40,0x02,0xe4,0xfc,
58360 +0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,
58361 +0xfb,0xea,0x90,0x9e,0x24,0xf0,0xeb,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,
58362 +0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xfb,0xea,0x90,0x9e,0x26,0xf0,0xeb,
58363 +0xa3,0xf0,0xa3,0xed,0xf0,0xa3,0x74,0xff,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,
58364 +0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xfa,0xa3,0xe0,0xfb,0xea,0x90,0x9e,0x2a,0xf0,0xeb,
58365 +0xa3,0xf0,0xec,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfa,
58366 +0xa3,0xe0,0xfb,0xea,0x90,0x9e,0x2c,0xf0,0xeb,0xa3,0xf0,0xa3,0xec,0xf0,0xa3,0x74,
58367 +0xff,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,
58368 +0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,
58369 +0xa3,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,
58370 +0xa3,0xf0,0xec,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,
58371 +0xa3,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x24,0x01,0x79,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
58372 +0xd0,0x90,0x9e,0xa4,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,
58373 +0xa4,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9e,0xa7,
58374 +0xe0,0x94,0xe8,0x90,0x9e,0xa6,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,
58375 +0x10,0xf0,0x7f,0x00,0x80,0x15,0x90,0x9e,0xa6,0xe4,0x75,0xf0,0x01,0x12,0x42,0x81,
58376 +0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,
58377 +0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x24,0x12,0x2a,0x8b,0x00,0x00,0x00,
58378 +0x00,0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x66,0xf0,0x90,0x00,0x03,0x12,0x42,
58379 +0x20,0x90,0x9e,0x55,0xf0,0x12,0x56,0x22,0x90,0x01,0xe5,0xe5,0x63,0xf0,0x90,0x9e,
58380 +0x66,0xe0,0x90,0x01,0xe6,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x00,0x02,0x12,0x42,
58381 +0x20,0xff,0x30,0xe0,0x25,0x12,0x29,0xd9,0x90,0x9e,0x5c,0xf0,0x90,0x00,0x01,0x12,
58382 +0x42,0x20,0x90,0x9e,0x5d,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x5b,0xf0,0x90,
58383 +0x00,0x03,0x12,0x42,0x20,0x90,0x9e,0x62,0xf0,0x22,0x90,0x9e,0x5c,0x74,0x0a,0xf0,
58384 +0x90,0x9e,0x5d,0x74,0x05,0xf0,0x90,0x9e,0x5b,0x74,0x14,0xf0,0x90,0x9e,0x62,0x74,
58385 +0x05,0xf0,0x22,0x12,0x29,0xd9,0x30,0xe0,0x19,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x61,
58386 +0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x90,0x9e,0x5f,0xe4,0xf0,0xa3,0xef,0xf0,
58387 +0x80,0x0f,0x90,0x9e,0x61,0x74,0x07,0xf0,0x90,0x9e,0x5f,0xe4,0xf0,0xa3,0x74,0x03,
58388 +0xf0,0x90,0x9e,0x5f,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0x22,0x90,0x9e,0x24,0x12,
58389 +0x2a,0x8b,0x00,0x00,0x00,0x00,0x12,0x29,0xd9,0x60,0x0d,0x90,0x9e,0x5e,0xf0,0xe4,
58390 +0xfd,0x7f,0x04,0x12,0x54,0xe7,0x80,0x05,0xe4,0x90,0x9e,0x5e,0xf0,0x90,0x9e,0x5e,
58391 +0xe0,0x90,0x01,0xe7,0xf0,0x22,0x90,0x02,0x09,0xe0,0xfd,0x12,0x29,0xd9,0xfe,0xaf,
58392 +0x05,0xed,0x2e,0x90,0x9e,0x78,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0xed,0x2f,
58393 +0x90,0x9e,0x79,0xf0,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x7a,
58394 +0xf0,0x90,0x00,0x03,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x7b,0xf0,0x90,0x00,
58395 +0x04,0x12,0x42,0x20,0xff,0xae,0x05,0xed,0x2f,0x90,0x9e,0x7c,0xf0,0x22,0xd3,0x10,
58396 +0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x24,0x12,0x43,0x8b,0x90,0x9e,0x24,0x12,0x43,
58397 +0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xfa,0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,0xfe,
58398 +0x90,0x9e,0x24,0x12,0x43,0x6b,0x90,0x00,0x01,0xee,0x8f,0xf0,0x12,0x43,0x19,0x12,
58399 +0x29,0xd9,0xff,0x60,0x2d,0xb5,0x65,0x16,0x90,0x9e,0x24,0x12,0x43,0x6b,0x90,0x00,
58400 +0x01,0x12,0x42,0xc2,0x65,0x67,0x70,0x04,0xe5,0x66,0x65,0xf0,0x60,0x24,0x90,0x9e,
58401 +0x24,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xff,0xae,0xf0,0x12,0x4e,0x37,
58402 +0x80,0x10,0x90,0x9e,0x24,0x12,0x43,0x6b,0x12,0x29,0xd9,0x65,0x65,0x60,0x03,0x12,
58403 +0x44,0xc2,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,
58404 +0xa3,0xf0,0xa3,0xf0,0x22,0x90,0x06,0x34,0xe0,0x60,0x24,0x14,0x70,0x1a,0x7b,0x01,
58405 +0x7a,0x06,0x79,0x35,0x7f,0xf9,0x7e,0x01,0x71,0xb0,0xbf,0x01,0x09,0x90,0x06,0x35,
58406 +0xe0,0x54,0x0f,0xf0,0x80,0x04,0x80,0x00,0x80,0xcd,0xe4,0x90,0x06,0x34,0xf0,0x22,
58407 +0x8e,0x14,0x8f,0x15,0x8b,0x16,0x8a,0x17,0x89,0x18,0xe4,0x90,0x9e,0x19,0xf0,0xef,
58408 +0x90,0x00,0x31,0xf0,0x12,0x4d,0x45,0xe5,0x14,0x54,0x03,0xff,0x90,0x00,0x32,0xe0,
58409 +0x54,0xfc,0x4f,0xf0,0x12,0x4d,0x45,0x90,0x00,0x33,0xe0,0x54,0x7f,0xf0,0x12,0x4d,
58410 +0x45,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x19,0xe0,0xc3,0x94,0x64,0x50,
58411 +0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x19,0xe0,0xc3,0x94,0x64,0x50,0x10,0x90,
58412 +0x00,0x30,0xe0,0xab,0x16,0xaa,0x17,0xa9,0x18,0x12,0x42,0x4d,0x7f,0x01,0x22,0x7f,
58413 +0x00,0x22,0xe4,0x90,0x9e,0xac,0xf0,0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,0xa3,
58414 +0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,0x90,
58415 +0x9e,0xad,0xe0,0x94,0xe8,0x90,0x9e,0xac,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,
58416 +0x7f,0x32,0x7e,0x00,0x12,0x37,0x54,0x90,0x9e,0xac,0xe4,0x75,0xf0,0x01,0x12,0x42,
58417 +0x81,0x80,0xc6,0x90,0x9d,0xff,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
58418 0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
58419 0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,0x43,0x53,0x90,
58420 0x80,0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x0b,0x12,
58421 0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
58422 0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,0xe4,0xfd,0xff,0x12,0x34,0x81,0x90,
58423 -0x9e,0x60,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,
58424 -0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x22,0x8f,0x27,0xe4,0x90,0x9e,0xa7,0xf0,0xa3,
58425 -0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0xef,0x65,0x27,0x60,
58426 -0x3e,0xc3,0x90,0x9e,0xa8,0xe0,0x94,0x88,0x90,0x9e,0xa7,0xe0,0x94,0x13,0x40,0x08,
58427 -0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0xa7,0xe4,0x75,0xf0,0x01,0x12,
58428 -0x42,0x81,0x7f,0x14,0x7e,0x00,0x12,0x37,0x54,0xd3,0x90,0x9e,0xa8,0xe0,0x94,0x32,
58429 -0x90,0x9e,0xa7,0xe0,0x94,0x00,0x40,0xb9,0x90,0x01,0xc7,0xe0,0x30,0xe0,0xb2,0x22,
58430 -0xe5,0x24,0x30,0xe6,0x19,0xe5,0x24,0x54,0x0f,0xff,0x90,0x9e,0x62,0xe0,0xfe,0x4f,
58431 -0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x62,0xf0,0x53,0x24,0xbf,0x22,0x8f,
58432 -0x76,0x12,0x45,0xa6,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x53,0x12,0x47,0xcc,0xe5,
58433 -0x76,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,
58434 -0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,
58435 -0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xe5,0x22,0x64,0x01,0x70,0x61,0xe5,0x25,
58436 -0x60,0x5d,0xe5,0x25,0x64,0x02,0x60,0x06,0xe5,0x25,0x64,0x05,0x70,0x27,0x90,0x06,
58437 -0xab,0xe0,0x90,0x9e,0x64,0xf0,0x90,0x06,0xaa,0xe0,0x90,0x9e,0x72,0xf0,0x90,0x9e,
58438 -0x64,0xe0,0x70,0x07,0x90,0x9e,0x72,0xe0,0xff,0x80,0x05,0x90,0x9e,0x64,0xe0,0xff,
58439 -0x90,0x9e,0x64,0xef,0xf0,0x90,0x9e,0x66,0xe0,0x60,0x03,0xe0,0x14,0xf0,0xe4,0x90,
58440 -0x9e,0x65,0xf0,0x90,0x01,0x57,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x53,0x26,0xfd,
58441 -0x53,0x26,0xef,0xe5,0x25,0x14,0x24,0xfd,0x50,0x02,0x80,0x03,0x12,0x45,0x53,0x22,
58442 -0xe4,0xff,0xe5,0x25,0x60,0x5f,0xe5,0x22,0x64,0x01,0x70,0x59,0xe5,0x25,0x14,0x60,
58443 -0x2b,0x24,0xfd,0x60,0x27,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x21,0x90,0x9e,0x64,
58444 -0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x14,0x90,0x9e,0x64,0xe0,0x70,0x08,
58445 -0x90,0x9e,0x72,0xe0,0x90,0x9e,0x64,0xf0,0x7f,0x01,0x80,0x02,0x7f,0x01,0xef,0x60,
58446 -0x24,0x43,0x26,0x10,0xe4,0x90,0x9e,0x86,0xf0,0x90,0x9e,0x6e,0x12,0x44,0x56,0x90,
58447 -0x01,0x57,0x74,0x05,0xf0,0xe5,0x23,0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,
58448 -0x7f,0x04,0x12,0x47,0x2f,0x22,0xe5,0x25,0x60,0x39,0x90,0x9e,0x74,0xe0,0x60,0x0d,
58449 -0xe4,0xf0,0x53,0x26,0xfd,0xe5,0x26,0x54,0x07,0x70,0x28,0x80,0x23,0x90,0x9e,0x65,
58450 -0xe0,0x04,0xf0,0x53,0x26,0xef,0x90,0x9e,0x6a,0xe0,0xff,0x90,0x9e,0x65,0xe0,0xd3,
58451 -0x9f,0x40,0x0d,0xe5,0x22,0xb4,0x01,0x0b,0xa3,0xe0,0x70,0x07,0xe0,0x04,0xf0,0x22,
58452 -0x12,0x44,0xd1,0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,0xc4,
58453 -0x54,0xf0,0xfd,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
58454 -0xe0,0x54,0x0f,0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,
58455 -0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
58456 -0xe0,0x4d,0xf0,0x22,0xad,0x07,0xed,0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,0xf5,
58457 -0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,
58458 -0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x64,0xe5,0x64,0x54,0x1f,0xfc,0x75,0xf0,0x09,
58459 -0xed,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0xff,0x90,0x9e,0x3e,0xf0,0xed,0x25,0xe0,
58460 -0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x3f,
58461 -0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
58462 -0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x41,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,
58463 -0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,0xfb,
58464 -0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,0xeb,
58465 -0xf0,0xec,0xc3,0x9f,0x40,0x02,0xe1,0x92,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,
58466 -0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,0x9e,0x3e,0xe0,0xff,0xeb,0xd3,0x9f,0x40,0x02,
58467 -0xe1,0xc3,0xeb,0xc3,0x94,0x10,0x40,0x21,0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,
58468 -0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x3f,
58469 -0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x23,0xeb,0xc3,0x94,0x10,0x50,0x40,0x74,
58470 -0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,
58471 -0x90,0x9e,0x41,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x23,0xbb,0x11,0x09,0x90,
58472 -0x9e,0x40,0xe0,0x30,0xe7,0x02,0x7b,0x17,0xeb,0x64,0x13,0x60,0x03,0xbb,0x12,0x09,
58473 -0x90,0x9e,0x3f,0xe0,0x30,0xe0,0x02,0x7b,0x18,0xac,0x03,0x8c,0x64,0x80,0x34,0x0b,
58474 -0x80,0x84,0x90,0x9e,0x3e,0xe0,0xfb,0x6c,0x70,0x69,0x74,0x67,0x2d,0xf5,0x82,0xe4,
58475 -0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,
58476 -0xe0,0xb4,0x01,0x0c,0xe5,0x64,0x20,0xe6,0x07,0xec,0x44,0x40,0xf5,0x64,0x80,0x03,
58477 -0xaf,0x64,0x22,0xec,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,
58478 -0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,
58479 -0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,
58480 -0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,
58481 -0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,0x9e,0x3e,0xe0,0xff,0x74,0x67,0x2d,
58482 -0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0xac,0x07,0x8f,0x64,0xec,0x25,0xe0,
58483 -0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,
58484 -0xec,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,
58485 -0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,
58486 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x64,0x22,0x74,0x01,
58487 -0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xaf,0x05,0xe5,0x64,0x44,0x80,
58488 -0xfd,0x12,0x5a,0x80,0xe5,0x64,0x44,0x80,0xff,0x22,0xe4,0xf5,0x59,0xe5,0x59,0xb4,
58489 -0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,0x95,0x01,0xe0,0xff,0x90,0x9a,0xc5,
58490 -0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4b,0x12,0x43,
58491 -0x5f,0xe0,0x64,0x01,0x60,0x02,0xc1,0xc0,0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,
58492 -0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xd3,0x94,0x00,0xee,0x94,0x00,0x50,
58493 -0x02,0xc1,0xc0,0xe5,0x59,0x94,0x20,0x40,0x08,0x90,0x9a,0xc5,0xe0,0x60,0x02,0xc1,
58494 -0xcb,0xe5,0x59,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf9,0x74,0x90,0x35,0xf0,0x75,0x5e,
58495 -0x01,0xf5,0x5f,0x89,0x60,0xe5,0x59,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,
58496 -0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x38,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,
58497 -0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,
58498 -0x9e,0x3a,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x59,0xc3,0x94,0x20,0x50,0x14,0x74,0x84,
58499 -0x25,0x59,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x34,0xf0,
58500 -0x80,0x12,0x74,0xa6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x3f,
58501 -0x90,0x9e,0x34,0xf0,0x90,0x9e,0x34,0xe0,0xfe,0x54,0x1f,0xa3,0xf0,0x75,0xf0,0x09,
58502 -0xe5,0x59,0x90,0x96,0x48,0x12,0x43,0x5f,0xe0,0x90,0x9e,0x3d,0xf0,0x74,0xe6,0x25,
58503 -0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xc3,0x94,0x05,0x40,0x02,0x61,0x99,
58504 -0x90,0x9e,0x3d,0xe0,0xff,0x90,0x9e,0x35,0xe0,0x9f,0x40,0x13,0x90,0x9e,0x3d,0xe0,
58505 -0x90,0x9e,0x35,0xf0,0xee,0x54,0x40,0xfe,0x90,0x9e,0x34,0xf0,0xef,0x4e,0xf0,0x90,
58506 -0x04,0xfd,0xe0,0x54,0x05,0x64,0x01,0x70,0x29,0x90,0x9e,0x35,0xe0,0xff,0x90,0x41,
58507 -0x4a,0x93,0xfe,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,
58508 -0x9e,0x40,0x06,0xef,0x90,0x40,0xda,0x80,0x30,0x90,0x9e,0x35,0xe0,0x90,0x40,0xf6,
58509 -0x80,0x27,0x90,0x9e,0x35,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x44,0x25,0x59,
58510 -0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x41,0x12,
58511 -0x80,0x07,0x90,0x9e,0x35,0xe0,0x90,0x41,0x2e,0x93,0x90,0x9e,0x3c,0xf0,0x90,0x9e,
58512 -0x3c,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x50,0xf9,0x74,0x40,0x35,0xf0,0x75,0x5b,0xff,
58513 -0xf5,0x5c,0x89,0x5d,0x90,0x9e,0x34,0xe0,0x90,0x41,0xf2,0x93,0xff,0xd3,0x90,0x9e,
58514 -0x3b,0xe0,0x9f,0x90,0x9e,0x3a,0xe0,0x94,0x00,0x40,0x09,0xe4,0xfd,0xaf,0x59,0x12,
58515 -0x5c,0xbd,0xc1,0x57,0xe5,0x59,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,
58516 -0x83,0xe0,0xf5,0x61,0xa3,0xe0,0xf5,0x62,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x12,0x29,
58517 -0xd9,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x12,0x42,0x97,0xfd,0xac,0xf0,
58518 -0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,
58519 -0x5c,0xa9,0x5d,0x90,0x00,0x01,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,
58520 -0xa9,0x60,0x90,0x00,0x02,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,
58521 -0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,
58522 -0x02,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x04,
58523 -0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,
58524 -0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x03,0x12,0x42,0x20,0xff,
58525 -0x7e,0x00,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x06,0x12,0x42,0xc2,0xfd,0xac,
58526 -0xf0,0x12,0x29,0xf2,0xef,0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,
58527 -0xaa,0x5c,0xa9,0x5d,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0x7e,0x00,0xab,0x5e,0xaa,
58528 -0x5f,0xa9,0x60,0x90,0x00,0x08,0x12,0x42,0xc2,0xfd,0xac,0xf0,0x12,0x29,0xf2,0xef,
58529 -0x25,0x62,0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x90,
58530 -0x00,0x05,0x12,0x42,0x20,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,0xa3,0xe0,0xfd,
58531 -0x12,0x29,0xf2,0xd3,0xe5,0x62,0x9f,0xe5,0x61,0x9e,0x40,0x0c,0xe5,0x62,0x9f,0xf5,
58532 -0x62,0xe5,0x61,0x9e,0xf5,0x61,0x80,0x05,0xe4,0xf5,0x61,0xf5,0x62,0xe5,0x59,0x25,
58533 -0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,0x61,0xf0,0xa3,0xe5,0x62,
58534 -0xf0,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
58535 -0xc3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,0x07,0xaf,0x59,0x12,0x66,
58536 -0x74,0xc1,0x2b,0x90,0x9e,0x34,0xe0,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,
58537 -0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x62,0xe4,0x93,0x95,0x61,0x50,0x02,0xc1,0x2b,
58538 -0x7d,0x01,0xaf,0x59,0x12,0x5c,0xbd,0xc1,0x2b,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,
58539 -0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,0xa1,0x34,0x90,0x96,0x43,0xe0,
58540 -0xff,0xb4,0x03,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x19,0x40,0x3d,0x80,0x2e,0xef,
58541 -0xb4,0x02,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x11,0x40,0x2e,0x80,0x1f,0x90,0x96,
58542 -0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x0a,0x40,0x1b,0x80,
58543 -0x0c,0xef,0x70,0x11,0x90,0x9e,0x35,0xe0,0xc3,0x94,0x03,0x40,0x0d,0x90,0x9a,0x84,
58544 -0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,
58545 -0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,
58546 -0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,0x81,0xe1,0x90,0x9a,0x84,0xe0,
58547 -0x64,0x01,0x60,0x02,0x81,0xe1,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
58548 -0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,0xe4,0x33,0xfe,0x74,0x41,0x25,
58549 -0x59,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,0xd3,0x9f,0xee,0x64,0x80,0xf8,
58550 -0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,0x33,0xfe,0x74,0x44,0x25,0x59,
58551 -0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,
58552 -0x98,0x50,0x14,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xe0,0xff,
58553 -0x90,0x9e,0x35,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,
58554 -0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,0x63,0x05,0x80,0x0e,0xef,0xd3,
58555 -0x94,0x39,0x40,0x05,0x75,0x63,0x03,0x80,0x03,0x75,0x63,0x01,0x74,0x41,0x25,0x59,
58556 -0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,
58557 -0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,
58558 -0xf0,0x74,0x85,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0x04,0xf0,0x80,
58559 -0x10,0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,
58560 -0xf0,0x90,0x9e,0x35,0xe0,0xff,0x74,0x26,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
58561 -0x83,0xef,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe5,0x63,
58562 -0xf0,0x75,0xf0,0x09,0xe5,0x59,0x90,0x96,0x4c,0x12,0x43,0x5f,0xe0,0xb4,0x01,0x10,
58563 -0xe4,0xf5,0x63,0x74,0xe6,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,
58564 -0xad,0x63,0xc1,0x26,0xec,0x64,0x06,0x60,0x02,0xc1,0x2b,0xf5,0x61,0xf5,0x62,0x90,
58565 -0x42,0x13,0x93,0xff,0x7e,0x00,0x90,0x9e,0x38,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x29,
58566 -0xf2,0x90,0x9e,0x36,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,
58567 -0x34,0x98,0xf5,0x83,0xe0,0xf5,0x63,0xe4,0xf5,0x5a,0xab,0x5e,0xaa,0x5f,0xa9,0x60,
58568 -0x75,0xf0,0x02,0xe5,0x5a,0xa4,0xf5,0x82,0x85,0xf0,0x83,0x12,0x42,0xc2,0xfd,0xac,
58569 -0xf0,0xe5,0x5a,0x90,0x42,0x0e,0x93,0xff,0x7e,0x00,0x12,0x29,0xf2,0xef,0x25,0x62,
58570 -0xf5,0x62,0xee,0x35,0x61,0xf5,0x61,0xc3,0x90,0x9e,0x37,0xe0,0x95,0x62,0x90,0x9e,
58571 -0x36,0xe0,0x95,0x61,0x40,0x07,0x05,0x5a,0xe5,0x5a,0xb4,0x05,0xbd,0xe5,0x5a,0xc3,
58572 -0x13,0xf5,0x5a,0xe5,0x63,0xb4,0x01,0x06,0xe5,0x5a,0x70,0x46,0x80,0x13,0xe5,0x63,
58573 -0xb4,0x03,0x15,0xe5,0x5a,0x70,0x05,0x75,0x63,0x03,0x80,0x39,0xe5,0x5a,0xb4,0x01,
58574 -0x05,0x75,0x63,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x63,0xb4,0x05,0x28,0xe5,0x5a,0x70,
58575 -0x05,0x75,0x63,0x05,0x80,0x0d,0xe5,0x5a,0xb4,0x01,0x05,0x75,0x63,0x03,0x80,0x03,
58576 -0x75,0x63,0x01,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,0x9e,0x3a,0xe0,0x94,0x00,
58577 -0x40,0x03,0xe4,0xf5,0x63,0xd3,0x90,0x9e,0x3b,0xe0,0x94,0x03,0x90,0x9e,0x3a,0xe0,
58578 -0x94,0x00,0x40,0x03,0xe4,0xf5,0x63,0x74,0x84,0x25,0x59,0xf5,0x82,0xe4,0x34,0x98,
58579 -0xf5,0x83,0xe5,0x63,0xf0,0xfd,0xaf,0x59,0x12,0x66,0x34,0x74,0xe6,0x25,0x59,0xf5,
58580 -0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,0x74,0xe6,0x50,0x0e,0x25,0x59,
58581 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x0b,0x25,0x59,0xf5,0x82,
58582 -0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0xe4,0xf5,0xf0,
58583 -0x12,0x42,0xfa,0xab,0x5e,0xaa,0x5f,0xa9,0x60,0x90,0x00,0x02,0xe4,0xf5,0xf0,0x12,
58584 -0x43,0x19,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x43,0x19,0x90,0x00,0x06,0xe4,0xf5,
58585 -0xf0,0x12,0x43,0x19,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,0x43,0x19,0xe5,0x59,0x25,
58586 -0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x59,
58587 -0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,
58588 -0x59,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,
58589 -0x05,0x59,0xe5,0x59,0xc3,0x94,0x40,0x50,0x02,0x01,0x7d,0x22,0x90,0x04,0x44,0x74,
58590 -0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,0xf0,0xfd,0x74,0xa4,
58591 -0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x0d,0xbd,0x10,0xf0,0xe4,0x90,
58592 -0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,0xe4,0xfd,0x75,0xf0,0x0a,0xed,0x90,0x90,
58593 -0x00,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x02,0x12,
58594 -0x43,0x5f,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x04,0x12,0x43,0x5f,
58595 -0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x06,0x12,0x43,0x5f,0xe4,0xf0,
58596 -0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x08,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0xf0,
58597 -0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0x74,0x13,0xf0,0x74,0x85,0x2d,
58598 -0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,
58599 -0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,
58600 -0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,
58601 -0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,
58602 -0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,
58603 -0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,
58604 -0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
58605 -0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,
58606 -0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0xe6,0x2d,
58607 -0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x41,0xc4,0x93,0xfe,0x74,0x01,
58608 -0x93,0xff,0x90,0x41,0x8c,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,
58609 -0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,
58610 -0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4b,0x12,0x43,0x5f,0x74,0x01,
58611 -0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x5f,0x74,0x01,0xf0,0x74,0x82,
58612 -0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0c,0xf0,0x75,0xf0,0x09,0xed,0x90,
58613 -0x96,0x46,0x12,0x43,0x5f,0x74,0xff,0xf0,0xa3,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,
58614 -0x44,0x12,0x43,0x5f,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,
58615 -0x48,0x12,0x43,0x5f,0x74,0x13,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x49,0x12,0x43,
58616 -0x5f,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,
58617 -0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,
58618 -0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x03,0x02,0x6e,0xfa,0x22,0x12,
58619 -0x29,0xd9,0xf5,0x59,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,0x02,0x12,0x42,0x20,0xff,
58620 -0x74,0x44,0x25,0x59,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,0xf0,0x22,0xe5,0x59,
58621 -0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x96,0x42,0xf0,0x22,0x90,0x00,
58622 -0x04,0x12,0x42,0x20,0xff,0x54,0x3f,0xfe,0xef,0x54,0x80,0xc4,0x13,0x13,0x13,0x54,
58623 -0x01,0xfd,0xaf,0x06,0x02,0x55,0x30,0x12,0x29,0xd9,0x90,0x95,0x01,0xf0,0x22,0x12,
58624 -0x29,0xd9,0xf5,0x22,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0xff,0x30,0xe0,0x25,0x12,
58625 -0x29,0xd9,0x90,0x9e,0x6a,0xf0,0x90,0x00,0x01,0x12,0x42,0x20,0x90,0x9e,0x6b,0xf0,
58626 -0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x69,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,0x90,
58627 -0x9e,0x6f,0xf0,0x22,0x90,0x9e,0x6a,0x74,0x01,0xf0,0x90,0x9e,0x6b,0x74,0x03,0xf0,
58628 -0x90,0x9e,0x69,0x74,0x14,0xf0,0x90,0x9e,0x6f,0x74,0x05,0xf0,0x22,0x12,0x29,0xd9,
58629 -0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,0x9e,0x6e,0xf0,0x90,0x00,0x01,0x12,0x42,
58630 -0x20,0xff,0x90,0x9e,0x6c,0xe4,0xf0,0xa3,0xef,0xf0,0x22,0x90,0x9e,0x6e,0x74,0x07,
58631 -0xf0,0x90,0x9e,0x6c,0xe4,0xf0,0xa3,0x74,0x02,0xf0,0x22,0x90,0x02,0x09,0xe0,0xfd,
58632 -0x12,0x29,0xd9,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0x50,0xf0,0x90,0x00,0x01,0x12,
58633 -0x42,0x20,0xff,0xed,0x2f,0x90,0x9e,0x51,0xf0,0x90,0x00,0x02,0x12,0x42,0x20,0xff,
58634 -0xed,0x2f,0x90,0x9e,0x52,0xf0,0x90,0x00,0x03,0x12,0x42,0x20,0xff,0xed,0x2f,0x90,
58635 -0x9e,0x53,0xf0,0x90,0x00,0x04,0x12,0x42,0x20,0xff,0xae,0x05,0xed,0x2f,0x90,0x9e,
58636 -0x54,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x3f,0x12,0x43,0x8b,
58637 -0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xfa,0xe5,0xf0,0x24,
58638 -0x00,0xff,0xe4,0x3a,0xfe,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0xee,0x8f,
58639 -0xf0,0x12,0x43,0x19,0x12,0x29,0xd9,0xff,0x60,0x2c,0xb5,0x71,0x16,0x90,0x9e,0x3f,
58640 -0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0x65,0x73,0x70,0x04,0xe5,0x72,0x65,
58641 -0xf0,0x60,0x23,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x90,0x00,0x01,0x12,0x42,0xc2,0xff,
58642 -0xae,0xf0,0x51,0x2b,0x80,0x10,0x90,0x9e,0x3f,0x12,0x43,0x6b,0x12,0x29,0xd9,0x65,
58643 -0x71,0x60,0x03,0x12,0x44,0xc8,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x42,0xee,0xf0,
58644 -0xa3,0xef,0xf0,0x75,0x71,0x01,0x8e,0x72,0xf5,0x73,0xe4,0xfd,0x7f,0x0b,0x51,0x6d,
58645 -0xe4,0xfd,0x7f,0x02,0x51,0x6d,0x71,0x37,0xe4,0xff,0x71,0x99,0xe4,0xf5,0x75,0x90,
58646 -0x01,0xc9,0xe5,0x75,0xf0,0x90,0x9e,0x42,0xe0,0xfc,0xa3,0xe0,0xfd,0xec,0xfb,0x8d,
58647 -0x44,0xe4,0xf5,0x45,0x7d,0x01,0x7f,0x60,0x7e,0x01,0x02,0x35,0xab,0xd3,0x10,0xaf,
58648 -0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x45,0xed,0xf0,0x90,0x9e,0x44,0xef,0xf0,0xd3,0x94,
58649 -0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,
58650 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0x80,
58651 -0x17,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
58652 -0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x9e,0x44,0xe0,0xff,
58653 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,
58654 -0x80,0x5a,0x90,0x9e,0x44,0xe0,0x24,0xf8,0xf0,0xa3,0xe0,0x70,0x1d,0x90,0x9e,0x44,
58655 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,
58656 -0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x80,0x1a,0x90,0x9e,0x44,0xe0,0xff,0x74,
58657 -0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,
58658 -0x43,0xe0,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x9e,0x44,0xe0,0xff,0x74,0x01,0xa8,0x07,
58659 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x12,
58660 -0x4b,0xdb,0xd0,0xd0,0x92,0xaf,0x22,0x7f,0x0b,0x71,0xa6,0xef,0x65,0x74,0x60,0x10,
58661 -0xe5,0x74,0xb4,0x01,0x05,0xe4,0xf5,0x74,0x80,0x03,0x75,0x74,0x01,0x7f,0x01,0x22,
58662 -0x7f,0x00,0x22,0xe5,0x71,0x64,0x01,0x70,0x3f,0x71,0x37,0xbf,0x01,0x04,0x7f,0x01,
58663 -0x71,0x99,0x90,0x00,0x46,0xe0,0x44,0x04,0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x90,0x00,
58664 -0x44,0xe0,0x54,0xfb,0xfd,0x7f,0x44,0x12,0x4c,0xe3,0x90,0x00,0x46,0xe0,0x54,0xfb,
58665 -0xfd,0x7f,0x46,0x12,0x4c,0xe3,0x7f,0x02,0x71,0xa6,0x8f,0x75,0x90,0x01,0xc9,0xe5,
58666 -0x75,0xf0,0xb4,0x01,0x03,0x12,0x4f,0xda,0x22,0x90,0x01,0xca,0xe5,0x74,0xf0,0xef,
58667 -0x60,0x03,0x12,0x4f,0xda,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xb1,
58668 -0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,
58669 -0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,0x12,0x4b,0xdb,0x90,
58670 -0x9e,0xb1,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,0x33,0xce,
58671 -0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,
58672 -0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,0x80,0x44,0x90,0x9e,
58673 -0xb1,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
58674 -0xd8,0xfc,0x12,0x4b,0xd3,0x90,0x9e,0xb1,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,
58675 -0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x42,0xe0,0xfb,
58676 -0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,
58677 -0xf8,0xff,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
58678 -0x56,0xe0,0x90,0x9e,0x40,0xf0,0x90,0x9e,0x57,0xe0,0xf5,0x64,0xa3,0xe0,0xf5,0x65,
58679 -0xe4,0xf5,0x61,0x74,0x59,0x25,0x61,0xf5,0x82,0xe4,0x34,0x9e,0xf5,0x83,0xe0,0xff,
58680 -0x74,0x66,0x25,0x61,0xf8,0xa6,0x07,0x05,0x61,0xe5,0x61,0xb4,0x04,0xe5,0x90,0x9e,
58681 -0x40,0xe0,0x12,0x43,0x94,0x74,0xa4,0x00,0x75,0xcc,0x01,0x74,0xaa,0x02,0x74,0xaa,
58682 -0x03,0x74,0xaa,0x04,0x75,0xcc,0x05,0x75,0x9c,0x80,0x75,0xb2,0x81,0x75,0xcc,0x82,
58683 -0x00,0x00,0x75,0xc8,0xaf,0x69,0xb1,0xd3,0xa1,0xcc,0x90,0x9e,0x40,0xe0,0xff,0xb4,
58684 -0x02,0x08,0x90,0x9e,0x3f,0x74,0x01,0xf0,0x80,0x0f,0xef,0x90,0x9e,0x3f,0xb4,0x03,
58685 -0x05,0x74,0x02,0xf0,0x80,0x03,0x74,0x04,0xf0,0xc3,0xe5,0x64,0x94,0x08,0x50,0x49,
58686 -0xe4,0xf5,0x61,0x90,0x9e,0x3f,0xe0,0xff,0xe5,0x61,0xc3,0x9f,0x40,0x02,0xa1,0xcc,
58687 -0xc3,0xe5,0x64,0x94,0x01,0x50,0x14,0xe5,0x61,0x25,0x65,0xff,0xc3,0x74,0x03,0x95,
58688 -0x61,0x24,0x66,0xf8,0xe6,0xfd,0x12,0x4c,0xe3,0x80,0x1a,0xc3,0x74,0x03,0x95,0x61,
58689 -0x24,0x66,0xf8,0xe6,0xff,0xe5,0x61,0x7c,0x00,0x25,0x65,0xfd,0xec,0x35,0x64,0x8d,
58690 -0x82,0xf5,0x83,0xef,0xf0,0x05,0x61,0x80,0xba,0xc3,0xe5,0x64,0x94,0x10,0x40,0x02,
58691 -0xa1,0xcc,0x90,0x9e,0x40,0xe0,0x64,0x04,0x60,0x02,0xa1,0xcc,0xaf,0x67,0xfc,0xfd,
58692 -0xfe,0x78,0x10,0x12,0x2a,0x6c,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xaf,0x66,
58693 -0xe4,0xfc,0xfd,0xfe,0x78,0x18,0x12,0x2a,0x6c,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,
58694 -0x00,0x12,0x43,0x46,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xaf,0x68,0xe4,0xfc,
58695 -0xfd,0xfe,0x78,0x08,0x12,0x2a,0x6c,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0x12,
58696 -0x43,0x46,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0xaf,0x69,0xe4,0xfc,0xfd,0xfe,
58697 -0x12,0x43,0x46,0xa3,0x12,0x2a,0x7f,0x90,0x9e,0x41,0x12,0x43,0x53,0x90,0x80,0x85,
58698 -0x12,0x2a,0x7f,0xaf,0x65,0xae,0x64,0x12,0x2f,0xd9,0x80,0x30,0xe5,0x68,0x7f,0x00,
58699 -0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,0xaf,0x63,0xfe,0x12,0x37,0x54,
58700 -0x80,0x1a,0xe5,0x68,0x7f,0x00,0xfe,0xef,0x25,0x69,0xf5,0x63,0xe4,0x3e,0xf5,0x62,
58701 -0xaf,0x63,0xfe,0x12,0x36,0xcb,0x80,0x04,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,0xd0,
58702 -0x92,0xaf,0x22,0x8f,0x6a,0xe4,0x90,0x9e,0x45,0xf0,0xe5,0x6a,0x14,0xfe,0x90,0x9e,
58703 -0x45,0xe0,0xff,0xc3,0x9e,0x50,0x0e,0xef,0x04,0xfd,0x12,0x34,0xb7,0x90,0x9e,0x45,
58704 -0xe0,0x04,0xf0,0x80,0xe5,0xe5,0x6a,0x14,0xff,0x7d,0xff,0x12,0x34,0xb7,0x90,0x9e,
58705 -0x45,0xe5,0x6a,0xf0,0x90,0x9e,0x45,0xe0,0xc3,0x94,0xff,0x50,0x0f,0xe0,0xff,0x04,
58706 -0xfd,0x12,0x34,0xb7,0x90,0x9e,0x45,0xe0,0x04,0xf0,0x80,0xe8,0xad,0x6a,0x7f,0xff,
58707 -0x02,0x34,0xb7,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0xf5,0x5b,0x75,0x5c,0x04,
58708 -0xf5,0x5d,0xf5,0x5f,0xf5,0x60,0x90,0x02,0x09,0xe0,0xff,0x12,0x29,0xd9,0xfe,0xef,
58709 -0x2e,0xf5,0x5e,0x30,0xe0,0x08,0x75,0x59,0x00,0x75,0x5a,0x80,0x80,0x05,0xe4,0xf5,
58710 -0x59,0xf5,0x5a,0xe5,0x5e,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x74,0x20,0x25,0x5b,0xf5,
58711 -0x5b,0xad,0x5a,0xe5,0x5b,0x2d,0xff,0x24,0x01,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
58712 -0xe0,0x90,0x9e,0x56,0xf0,0x74,0x02,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,
58713 -0xfe,0xe5,0x5b,0x2d,0x24,0x03,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x24,0x00,
58714 -0xff,0xe4,0x3e,0x90,0x9e,0x57,0xf0,0xa3,0xef,0xf0,0x7f,0x04,0xe5,0x5b,0x25,0x5a,
58715 -0x2f,0x24,0x00,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0xfe,0x74,0x55,0x2f,0xf5,
58716 -0x82,0xe4,0x34,0x9e,0xf5,0x83,0xee,0xf0,0x0f,0xbf,0x08,0xe0,0x91,0x47,0xef,0x70,
58717 -0x3f,0x90,0x01,0xc3,0xe0,0x60,0x25,0xc3,0xe5,0x60,0x94,0xe8,0xe5,0x5f,0x94,0x03,
58718 -0x40,0x09,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x80,0x63,0x05,0x60,0xe5,0x60,0x70,
58719 -0x02,0x05,0x5f,0x7f,0x0a,0x7e,0x00,0x12,0x37,0x54,0x80,0xd5,0x90,0x01,0xc6,0xe0,
58720 -0x90,0x01,0xc3,0x30,0xe2,0x05,0x74,0xfe,0xf0,0x80,0x43,0x74,0xff,0xf0,0x80,0x3e,
58721 -0xe5,0x5b,0xb4,0x78,0x23,0xe4,0xf5,0x5b,0x05,0x5e,0xe5,0x5a,0x64,0x80,0x45,0x59,
58722 -0x70,0x06,0xf5,0x59,0xf5,0x5a,0x80,0x06,0x75,0x59,0x00,0x75,0x5a,0x80,0xe5,0x5e,
58723 -0xc3,0x13,0x90,0xfd,0x10,0xf0,0x80,0x06,0x74,0x08,0x25,0x5b,0xf5,0x5b,0xe5,0x5d,
58724 -0x15,0x5d,0x70,0x02,0x15,0x5c,0xe5,0x5d,0x45,0x5c,0x60,0x02,0xc1,0x61,0xd0,0xd0,
58725 -0x92,0xaf,0x22,0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
58726 -0x22,0xe4,0x90,0x9e,0x5d,0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,0x7f,0x80,0x02,
58727 -0x4c,0xe3,0x8e,0x59,0x8f,0x5a,0x8b,0x5b,0x8a,0x5c,0x89,0x5d,0xe4,0x90,0x9e,0x34,
58728 -0xf0,0xef,0x90,0x00,0x31,0xf0,0x12,0x4b,0xdb,0xe5,0x59,0x54,0x03,0xff,0x90,0x00,
58729 -0x32,0xe0,0x54,0xfc,0x4f,0xf0,0x12,0x4b,0xdb,0x90,0x00,0x33,0xe0,0x54,0x7f,0xf0,
58730 -0x12,0x4b,0xdb,0x90,0x00,0x33,0xe0,0x20,0xe7,0x0e,0x90,0x9e,0x34,0xe0,0xc3,0x94,
58731 -0x64,0x50,0x05,0xe0,0x04,0xf0,0x80,0xeb,0x90,0x9e,0x34,0xe0,0xc3,0x94,0x64,0x50,
58732 -0x10,0x90,0x00,0x30,0xe0,0xab,0x5b,0xaa,0x5c,0xa9,0x5d,0x12,0x42,0x4d,0x7f,0x01,
58733 -0x22,0x7f,0x00,0x22,0xe4,0xf5,0x74,0x22,0x90,0x9e,0x60,0xe0,0x90,0x9e,0x0f,0xf0,
58734 -0x22,0xef,0x70,0x03,0x02,0x79,0x89,0x90,0x9e,0x0f,0xe0,0x60,0x03,0x02,0x7d,0x54,
58735 +0x9e,0x80,0xe0,0xb4,0x01,0x11,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x03,0x2d,0x95,
58736 +0xe4,0xfd,0x7f,0x01,0x12,0x34,0x81,0x22,0x7f,0x78,0x7e,0x08,0x12,0x27,0xde,0x90,
58737 +0x9d,0xff,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0x03,0x12,
58738 +0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0x07,0x12,0x2a,0x7f,0x90,
58739 +0x9e,0x80,0xe0,0x90,0x9d,0xff,0xb4,0x01,0x0d,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,
58740 +0xed,0x54,0xc7,0xfd,0x80,0x07,0x12,0x43,0x53,0xef,0x54,0xc7,0xff,0xec,0x90,0x80,
58741 +0x85,0x12,0x2a,0x7f,0x7f,0x78,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9e,0x03,0x12,0x43,
58742 +0x53,0xef,0x54,0x0f,0xff,0xec,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,
58743 +0x12,0x2f,0xd9,0x90,0x9e,0x07,0x12,0x43,0x53,0xef,0x44,0x02,0xff,0xec,0x90,0x80,
58744 +0x85,0x12,0x2a,0x7f,0x7f,0x00,0x7e,0x08,0x12,0x2f,0xd9,0x7f,0x70,0x7e,0x0e,0x12,
58745 +0x27,0xde,0x90,0x9e,0x0b,0x12,0x2a,0x7f,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,
58746 +0x25,0xa0,0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,
58747 +0x00,0x00,0x00,0xe4,0xfd,0xff,0x12,0x34,0x81,0x90,0x9e,0x80,0xe0,0xb4,0x01,0x11,
58748 +0x90,0x80,0x59,0x12,0x2a,0x8b,0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,0x01,0x12,0x34,
58749 +0x81,0x22,0xef,0x70,0x02,0xe1,0x49,0x90,0x9e,0x0f,0xe0,0x60,0x03,0x02,0x7b,0x15,
58750 0x90,0x9d,0xfb,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,
58751 0x12,0x2f,0xd9,0x90,0x9d,0xa7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
58752 0x44,0x7e,0x08,0x12,0x2f,0xd9,0x90,0x9d,0xab,0x12,0x43,0x53,0x90,0x80,0x85,0x12,
58753 @@ -6030,1114 +2917,3136 @@ u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImgArrayLength] = {
58754 0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x90,
58755 0x9d,0xf7,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,
58756 0x2f,0xd9,0x90,0x9e,0x0f,0x74,0x01,0xf0,0x22,0x90,0x9e,0x0f,0xe0,0x64,0x01,0x60,
58757 -0x02,0xa1,0x54,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xfb,0x12,0x2a,0x7f,
58758 -0x7f,0x44,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xa7,0x12,0x2a,0x7f,0x7f,0x5c,0x7e,
58759 -0x08,0x12,0x27,0xde,0x90,0x9d,0xab,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,0x27,
58760 -0xde,0x90,0x9d,0xaf,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,
58761 -0xb3,0x12,0x2a,0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xb7,0x12,0x2a,
58762 -0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbb,0x12,0x2a,0x7f,0x7f,0x7c,
58763 -0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbf,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x0e,0x12,
58764 -0x27,0xde,0x90,0x9d,0xc3,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,0x27,0xde,0x90,
58765 -0x9d,0xc7,0x12,0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcb,0x12,
58766 -0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcf,0x12,0x2a,0x7f,0x7f,
58767 -0xd0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd3,0x12,0x2a,0x7f,0x7f,0xd4,0x7e,0x0e,
58768 -0x12,0x27,0xde,0x90,0x9d,0xd7,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,0x27,0xde,
58769 -0x90,0x9d,0xdb,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xdf,
58770 -0x12,0x2a,0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe3,0x12,0x2a,0x7f,
58771 -0x7f,0xec,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe7,0x12,0x2a,0x7f,0x7f,0x04,0x7e,
58772 -0x0c,0x12,0x27,0xde,0x90,0x9d,0xeb,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,0x27,
58773 -0xde,0x90,0x9d,0xef,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9d,
58774 -0xf3,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xf7,0x12,0x2a,
58775 -0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,
58776 -0xa1,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,
58777 -0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,
58778 -0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x01,0x00,0x00,0x7f,0x44,0x7e,0x08,
58779 -0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0xdb,0x25,0xa4,0x7f,0x5c,0x7e,
58780 -0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x6c,
58781 -0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,
58782 -0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,0xa4,
58783 -0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,
58784 -0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,
58785 -0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,
58786 -0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,
58787 -0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,
58788 -0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,
58789 -0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,
58790 -0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,
58791 -0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
58792 -0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,0x0e,0x12,0x2f,0xd9,
58793 -0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xdc,0x7e,0x0e,0x12,0x2f,
58794 -0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xe0,0x7e,0x0e,0x12,
58795 -0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x24,0xdb,0x25,0xa4,0x7f,0xec,0x7e,0x0e,
58796 -0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,0x2a,0x7f,
58797 -0x90,0x9e,0xa1,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,
58798 -0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,
58799 -0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0c,
58800 -0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,0x2a,0x7f,
58801 -0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,
58802 -0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa1,0x12,
58803 -0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,
58804 -0x7e,0x0d,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,
58805 -0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,
58806 -0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa1,0x12,
58807 -0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,
58808 -0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,
58809 -0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,0x54,0x0f,0xfd,0xec,0x54,0xf0,0xfc,
58810 -0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,0xed,0x44,0x10,0xfd,
58811 -0xec,0x44,0x01,0xfc,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,
58812 -0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x04,0x7e,
58813 -0x08,0x12,0x27,0xde,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,0x53,
58814 -0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,0x43,
58815 -0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa1,0x12,0x2a,0x7f,0x90,0x9e,0xa1,0x12,
58816 -0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x2f,0xd9,0xe4,
58817 -0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x1e,0xf0,0xe0,
58818 -0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,0x59,0xc2,0xaf,0x90,0x00,
58819 -0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x4c,0xe3,0x7d,0x40,0x7f,0x01,0x12,0x36,
58820 -0xaf,0xe5,0x59,0x24,0xff,0x92,0xaf,0x22,0xe4,0xfd,0x7f,0x45,0x12,0x4c,0xe3,0x90,
58821 -0x04,0xfd,0xe4,0xf0,0xa3,0xf0,0x90,0x9e,0x1e,0xf0,0x90,0x9e,0x24,0xf0,0x90,0x9e,
58822 -0x27,0xf0,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x28,0xf0,0x90,0x9e,0x26,0xf0,0x90,0x9e,
58823 -0x29,0xf0,0x90,0x9e,0x10,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,
58824 -0x15,0xf0,0x90,0x9e,0x1a,0xf0,0x90,0x9e,0x1c,0xf0,0x90,0x9e,0x2e,0xf0,0x90,0x9e,
58825 -0x1f,0xf0,0x90,0x9e,0x1b,0xf0,0x90,0x9e,0x14,0xf0,0x90,0x00,0x51,0xe0,0x44,0xc0,
58826 -0xfd,0x7f,0x51,0x02,0x4c,0xe3,0x90,0x9e,0x2e,0xe0,0x64,0x01,0x60,0x08,0x90,0x9e,
58827 -0x1c,0xe0,0x60,0x02,0xc1,0xbd,0x90,0x9e,0x10,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,
58828 -0x04,0xf0,0x80,0x3b,0x90,0x9e,0x11,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,
58829 -0xe4,0x80,0x28,0x90,0x9e,0x12,0xe0,0xc3,0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0xe4,
58830 -0x90,0x9e,0x11,0xf0,0x80,0x15,0x90,0x9e,0x13,0xe0,0xc3,0x94,0xff,0x50,0x10,0xe0,
58831 -0x04,0xf0,0xe4,0x90,0x9e,0x12,0xf0,0x90,0x9e,0x11,0xf0,0x90,0x9e,0x10,0xf0,0x90,
58832 -0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,0x30,0xe2,0x32,0x90,0x9e,0x24,0xe0,0xc3,
58833 -0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x25,0xe0,0xc3,0x94,0xff,
58834 -0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x26,0xe0,0xc3,0x94,0xff,0x50,
58835 -0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x25,0xf0,0x90,0x9e,0x24,0xf0,0x90,0x00,0x44,
58836 -0xe0,0x30,0xe3,0x32,0x90,0x9e,0x27,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,
58837 -0x80,0x24,0x90,0x9e,0x28,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,
58838 -0x11,0x90,0x9e,0x29,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,
58839 -0x28,0xf0,0x90,0x9e,0x27,0xf0,0x90,0x04,0xfd,0xe0,0x44,0x01,0xf0,0x22,0x17,0xed,
58840 -};
58841 +0x03,0x02,0x7b,0x15,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xfb,0x12,0x2a,
58842 +0x7f,0x7f,0x44,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xa7,0x12,0x2a,0x7f,0x7f,0x5c,
58843 +0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xab,0x12,0x2a,0x7f,0x7f,0x6c,0x7e,0x0e,0x12,
58844 +0x27,0xde,0x90,0x9d,0xaf,0x12,0x2a,0x7f,0x7f,0x70,0x7e,0x0e,0x12,0x27,0xde,0x90,
58845 +0x9d,0xb3,0x12,0x2a,0x7f,0x7f,0x74,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xb7,0x12,
58846 +0x2a,0x7f,0x7f,0x78,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbb,0x12,0x2a,0x7f,0x7f,
58847 +0x7c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xbf,0x12,0x2a,0x7f,0x7f,0x80,0x7e,0x0e,
58848 +0x12,0x27,0xde,0x90,0x9d,0xc3,0x12,0x2a,0x7f,0x7f,0x84,0x7e,0x0e,0x12,0x27,0xde,
58849 +0x90,0x9d,0xc7,0x12,0x2a,0x7f,0x7f,0x88,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcb,
58850 +0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xcf,0x12,0x2a,0x7f,
58851 +0x7f,0xd0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xd3,0x12,0x2a,0x7f,0x7f,0xd4,0x7e,
58852 +0x0e,0x12,0x27,0xde,0x90,0x9d,0xd7,0x12,0x2a,0x7f,0x7f,0xd8,0x7e,0x0e,0x12,0x27,
58853 +0xde,0x90,0x9d,0xdb,0x12,0x2a,0x7f,0x7f,0xdc,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,
58854 +0xdf,0x12,0x2a,0x7f,0x7f,0xe0,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe3,0x12,0x2a,
58855 +0x7f,0x7f,0xec,0x7e,0x0e,0x12,0x27,0xde,0x90,0x9d,0xe7,0x12,0x2a,0x7f,0x7f,0x04,
58856 +0x7e,0x0c,0x12,0x27,0xde,0x90,0x9d,0xeb,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x0d,0x12,
58857 +0x27,0xde,0x90,0x9d,0xef,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,
58858 +0x9d,0xf3,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x27,0xde,0x90,0x9d,0xf7,0x12,
58859 +0x2a,0x7f,0x7f,0x8c,0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,
58860 +0x9e,0xa8,0x12,0x43,0x53,0xed,0x44,0xc0,0xfd,0xec,0x90,0x9e,0xa8,0x12,0x2a,0x7f,
58861 +0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x8c,0x7e,0x08,
58862 +0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x01,0x00,0x00,0x7f,0x44,0x7e,
58863 +0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0xdb,0x25,0xa4,0x7f,0x5c,
58864 +0x7e,0x08,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,
58865 +0x6c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,
58866 +0x7f,0x70,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,0x25,
58867 +0xa4,0x7f,0x74,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,0x1b,
58868 +0x25,0xa4,0x7f,0x78,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x04,
58869 +0x1b,0x25,0xa4,0x7f,0x7c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,
58870 +0x04,0x1b,0x25,0xa4,0x7f,0x80,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,
58871 +0x8b,0x63,0xdb,0x25,0xa4,0x7f,0x84,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,
58872 +0x2a,0x8b,0x04,0x1b,0x25,0xa4,0x7f,0x88,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,0x85,
58873 +0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x2f,0xd9,0x90,0x80,
58874 +0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,0x2f,0xd9,0x90,
58875 +0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,0x12,0x2f,0xd9,
58876 +0x90,0x80,0x85,0x12,0x2a,0x8b,0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,0x0e,0x12,0x2f,
58877 +0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xdc,0x7e,0x0e,0x12,
58878 +0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x00,0x1b,0x25,0xa4,0x7f,0xe0,0x7e,0x0e,
58879 +0x12,0x2f,0xd9,0x90,0x80,0x85,0x12,0x2a,0x8b,0x24,0xdb,0x25,0xa4,0x7f,0xec,0x7e,
58880 +0x0e,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0c,0x12,0x27,0xde,0x90,0x9e,0xa8,0x12,0x2a,
58881 +0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa8,0x12,0x2a,0x7f,
58882 +0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa8,0x12,0x2a,
58883 +0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,
58884 +0x0c,0x12,0x2f,0xd9,0x7f,0x04,0x7e,0x0d,0x12,0x27,0xde,0x90,0x9e,0xa8,0x12,0x2a,
58885 +0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa8,0x12,
58886 +0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa8,
58887 +0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
58888 +0x04,0x7e,0x0d,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9e,0xa8,
58889 +0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xe4,0xff,0xec,0x90,0x9e,0xa8,0x12,
58890 +0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xef,0x44,0x11,0xff,0xec,0x90,0x9e,0xa8,
58891 +0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,
58892 +0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x0c,0x7e,0x09,0x12,0x27,0xde,0x90,0x9e,0xa8,
58893 +0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xed,0x54,0x0f,0xfd,0xec,0x54,0xf0,
58894 +0xfc,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,0x53,0xed,0x44,0x10,
58895 +0xfd,0xec,0x44,0x01,0xfc,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,
58896 +0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x0c,0x7e,0x09,0x12,0x2f,0xd9,0x7f,0x04,
58897 +0x7e,0x08,0x12,0x27,0xde,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,0x43,
58898 +0x53,0xef,0x54,0xf0,0xff,0xec,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,0x12,
58899 +0x43,0x53,0xef,0x44,0x01,0xff,0xec,0x90,0x9e,0xa8,0x12,0x2a,0x7f,0x90,0x9e,0xa8,
58900 +0x12,0x43,0x53,0x90,0x80,0x85,0x12,0x2a,0x7f,0x7f,0x04,0x7e,0x08,0x12,0x2f,0xd9,
58901 +0xe4,0x90,0x9e,0x0f,0xf0,0x22,0x90,0x00,0x02,0x12,0x42,0x20,0x90,0x9e,0x43,0xf0,
58902 +0xe0,0x60,0x04,0xe0,0xf4,0x70,0x21,0xa2,0xaf,0xe4,0x33,0xf5,0x14,0xc2,0xaf,0x90,
58903 +0x00,0x47,0xe0,0x54,0xfb,0xfd,0x7f,0x47,0x12,0x49,0x05,0x7d,0x40,0x7f,0x01,0x12,
58904 +0x36,0xaf,0xe5,0x14,0x24,0xff,0x92,0xaf,0x22,0x90,0x9e,0x3a,0xe0,0xc3,0x94,0x14,
58905 +0x50,0x05,0xe0,0x04,0xf0,0x81,0x01,0x90,0x9e,0x3a,0xe0,0x64,0x14,0x60,0x02,0x81,
58906 +0x01,0x90,0x9e,0x49,0xe0,0x70,0x25,0x90,0x9e,0x4c,0xe0,0x70,0x1f,0x90,0x9e,0x4a,
58907 +0xe0,0x70,0x19,0x90,0x9e,0x4d,0xe0,0x70,0x13,0x90,0x9e,0x4b,0xe0,0x70,0x0d,0x90,
58908 +0x9e,0x4e,0xe0,0x70,0x07,0x90,0x04,0xfd,0xe0,0x54,0xfe,0xf0,0x90,0x9e,0x49,0xe0,
58909 +0x90,0x04,0x44,0xf0,0x90,0x9e,0x4a,0xe0,0x90,0x04,0x45,0xf0,0x90,0x9e,0x4b,0xe0,
58910 +0x90,0x04,0x46,0xf0,0xa3,0xe4,0xf0,0x90,0x9e,0x4c,0xe0,0x90,0x04,0x48,0xf0,0x90,
58911 +0x9e,0x4d,0xe0,0x90,0x04,0x49,0xf0,0x90,0x9e,0x4e,0xe0,0x90,0x04,0x4a,0xf0,0xa3,
58912 +0xe4,0xf0,0x90,0x9e,0x35,0xe0,0x90,0x04,0x4c,0xf0,0x90,0x9e,0x36,0xe0,0x90,0x04,
58913 +0x4d,0xf0,0x90,0x9e,0x37,0xe0,0x90,0x04,0x4e,0xf0,0x90,0x9e,0x38,0xe0,0x90,0x04,
58914 +0x4f,0xf0,0xe4,0x90,0x9e,0x3a,0xf0,0x90,0x9e,0x35,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,
58915 +0xf0,0xa3,0xf0,0x90,0x9e,0x49,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
58916 +0xf0,0x90,0x05,0x60,0xe0,0x90,0x9e,0x19,0xf0,0x90,0x05,0x61,0xe0,0x90,0x9e,0x1a,
58917 +0xf0,0x90,0x05,0x62,0xe0,0x90,0x9e,0x1b,0xf0,0x90,0x05,0x63,0xe0,0x90,0x9e,0x1c,
58918 +0xf0,0x90,0x9e,0x52,0xe0,0xff,0x90,0x9e,0x1c,0xe0,0xfe,0xd3,0x9f,0x50,0x0b,0x90,
58919 +0x9e,0x52,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,0x11,0x90,0x9e,0x40,0xe0,0xb4,0x01,
58920 +0x02,0x80,0x03,0x90,0x9e,0x44,0xe0,0xff,0x12,0x4c,0xf0,0x22,0x90,0x9e,0x53,0xe0,
58921 +0x64,0x01,0x60,0x08,0x90,0x9e,0x41,0xe0,0x60,0x02,0xa1,0x23,0x90,0x9e,0x35,0xe0,
58922 +0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x9e,0x36,0xe0,0xc3,0x94,
58923 +0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x9e,0x37,0xe0,0xc3,0x94,0xff,
58924 +0x50,0x0a,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x36,0xf0,0x80,0x15,0x90,0x9e,0x38,0xe0,
58925 +0xc3,0x94,0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x37,0xf0,0x90,0x9e,0x36,
58926 +0xf0,0x90,0x9e,0x35,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,0x30,0xe2,
58927 +0x32,0x90,0x9e,0x49,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,
58928 +0x9e,0x4a,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,
58929 +0x4b,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x4a,0xf0,0x90,
58930 +0x9e,0x49,0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x9e,0x4c,0xe0,0xc3,0x94,
58931 +0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x9e,0x4d,0xe0,0xc3,0x94,0xff,0x50,
58932 +0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x9e,0x4e,0xe0,0xc3,0x94,0xff,0x50,0x0c,
58933 +0xe0,0x04,0xf0,0xe4,0x90,0x9e,0x4d,0xf0,0x90,0x9e,0x4c,0xf0,0x90,0x04,0xfd,0xe0,
58934 +0x44,0x01,0xf0,0x22,0x68,0x4c,};
58935 +#else
58936 +// =================== v88 TSMC P2PPS with CCX report C2H 2012-12-05 =======================
58937 +u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength] = {
58938 +0xC1, 0x88, 0x02, 0x05, 0x58, 0x00, 0x02, 0x00, 0x12, 0x05, 0x17, 0x12, 0xDE, 0x3E, 0x00, 0x00,
58939 +0x94, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58940 +0x02, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58941 +0x00, 0x00, 0x00, 0x02, 0x60, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58942 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58943 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58944 +0x00, 0x00, 0x00, 0x02, 0x68, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x4B, 0x87, 0x00, 0x00,
58945 +0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03, 0x00, 0x04, 0x06, 0x05, 0x04, 0x02,
58946 +0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09, 0x08, 0x06, 0x00, 0x08, 0x0A, 0x09,
58947 +0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x00, 0x00, 0x08,
58948 +0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10, 0x00, 0x18, 0x22, 0x21, 0x20, 0x18,
58949 +0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21, 0x20, 0x08, 0x00, 0x20, 0x22, 0x21,
58950 +0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20, 0x22, 0x20, 0x18, 0x08, 0x00, 0x20,
58951 +0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00, 0x00, 0x30, 0x31, 0x2F, 0x10, 0x10,
58952 +0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28, 0x10, 0x00, 0x00, 0x30, 0x31, 0x20,
58953 +0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04,
58954 +0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05,
58955 +0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05, 0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E,
58956 +0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E,
58957 +0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A,
58958 +0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04,
58959 +0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60,
58960 +0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40,
58961 +0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40, 0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8,
58962 +0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0C,
58963 +0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x28,
58964 +0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8, 0x00, 0xF0, 0x01, 0x18, 0x00, 0x64,
58965 +0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58, 0x03, 0x20, 0x03, 0xE8, 0x02, 0x02,
58966 +0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07, 0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E,
58967 +0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
58968 +0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x05, 0x06,
58969 +0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00,
58970 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58971 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58972 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58973 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58974 +0xBB, 0x01, 0x0C, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x22, 0x50,
58975 +0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE6, 0x22, 0xBB, 0xFE, 0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0x22,
58976 +0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE4, 0x93, 0x22, 0xBB, 0x01, 0x06,
58977 +0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22, 0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8,
58978 +0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22,
58979 +0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE, 0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2,
58980 +0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0, 0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70,
58981 +0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5,
58982 +0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7, 0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3,
58983 +0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83, 0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01,
58984 +0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0,
58985 +0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22,
58986 +0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0, 0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A,
58987 +0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22, 0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A,
58988 +0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7, 0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB,
58989 +0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8, 0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29,
58990 +0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09,
58991 +0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB, 0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8,
58992 +0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC,
58993 +0x48, 0xFC, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xA4,
58994 +0x25, 0x82, 0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA,
58995 +0xA3, 0xE0, 0xF9, 0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82,
58996 +0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0,
58997 +0xA3, 0xE9, 0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93,
58998 +0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74,
58999 +0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4,
59000 +0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5,
59001 +0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60,
59002 +0xE9, 0xA3, 0xA3, 0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0x90, 0x8A, 0xC5, 0xF0, 0xE5, 0x24, 0x70, 0x03,
59003 +0x02, 0x44, 0x9D, 0xE5, 0x21, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0x9D, 0xE5, 0x24, 0x14, 0x60,
59004 +0x29, 0x24, 0xFD, 0x60, 0x25, 0x24, 0x02, 0x24, 0xFB, 0x50, 0x02, 0x80, 0x23, 0x90, 0x8B, 0x0B,
59005 +0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3, 0xE0, 0x60, 0x16, 0x90, 0x8B, 0x0B, 0xE0, 0x70, 0x0A,
59006 +0x90, 0x8B, 0x19, 0xE0, 0x90, 0x8B, 0x0B, 0xF0, 0x80, 0x00, 0x90, 0x8A, 0xC5, 0x74, 0x01, 0xF0,
59007 +0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4, 0x90, 0x8A, 0xC5,
59008 +0xF0, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x70, 0x04, 0x90, 0x8A, 0xC5, 0xF0, 0x90, 0x8A, 0xC5,
59009 +0xE0, 0x60, 0x4A, 0x43, 0x25, 0x10, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0C, 0xE0, 0x75,
59010 +0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x8B, 0x15, 0xE0, 0x2F, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
59011 +0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x22, 0x54,
59012 +0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x90, 0x8B, 0x2C,
59013 +0xE0, 0x30, 0xE0, 0x09, 0x12, 0x7D, 0xC1, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0xE4, 0xF5,
59014 +0x25, 0xF5, 0x24, 0x75, 0x23, 0x0C, 0x75, 0x22, 0x0C, 0x90, 0x8B, 0x1A, 0xF0, 0x90, 0x8B, 0x18,
59015 +0xF0, 0x90, 0x8B, 0x17, 0xF0, 0x90, 0x8B, 0x19, 0x04, 0xF0, 0x90, 0x8B, 0x0B, 0xF0, 0xE4, 0x90,
59016 +0x8B, 0x1B, 0xF0, 0x90, 0x8B, 0x0D, 0xF0, 0x90, 0x8B, 0x15, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x8B,
59017 +0x0C, 0xF0, 0x90, 0x8B, 0x13, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x10, 0xF0, 0xA3, 0x74,
59018 +0x05, 0xF0, 0x90, 0x8B, 0x0F, 0x74, 0x14, 0xF0, 0x90, 0x8B, 0x16, 0x74, 0x05, 0xF0, 0xE4, 0x90,
59019 +0x8B, 0x0E, 0xF0, 0x90, 0x8B, 0x0A, 0xF0, 0x90, 0x8B, 0x08, 0xF0, 0x90, 0x8B, 0x12, 0xF0, 0x22,
59020 +0x7F, 0x00, 0x22, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0x8E, 0x64, 0x8F, 0x65, 0xAD, 0x65, 0xAC,
59021 +0x64, 0xAF, 0x63, 0x12, 0x4A, 0x5B, 0xAF, 0x65, 0xAE, 0x64, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F,
59022 +0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01,
59023 +0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC,
59024 +0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74,
59025 +0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74,
59026 +0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53,
59027 +0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74,
59028 +0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D,
59029 +0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01,
59030 +0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x67, 0x8D, 0x68, 0xE5, 0x67, 0x54,
59031 +0x0F, 0xFF, 0xE5, 0x22, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x67, 0x30, 0xE2, 0x30, 0xE5, 0x22,
59032 +0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x4A, 0xB2, 0xE5, 0x22, 0x30, 0xE3, 0x10, 0xE5, 0x67, 0x20,
59033 +0xE3, 0x0B, 0x12, 0x49, 0xD5, 0xEF, 0x60, 0x53, 0x12, 0x4A, 0xCC, 0x80, 0x4E, 0xE5, 0x22, 0x20,
59034 +0xE3, 0x49, 0xE5, 0x67, 0x30, 0xE3, 0x44, 0xAF, 0x68, 0x12, 0x4A, 0x7C, 0x80, 0x3D, 0xE5, 0x22,
59035 +0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x67, 0x20, 0xE3, 0x09, 0x12, 0x49, 0xD5, 0xEF, 0x60,
59036 +0x2A, 0x12, 0x4A, 0xCC, 0xE5, 0x22, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E, 0xE5, 0x67, 0x20, 0xE2,
59037 +0x09, 0x12, 0x49, 0x93, 0xEF, 0x60, 0x14, 0x12, 0x4A, 0x32, 0xE5, 0x22, 0x54, 0x0F, 0xFF, 0xBF,
59038 +0x02, 0x09, 0x12, 0x45, 0x00, 0xEF, 0x60, 0x03, 0x12, 0x4B, 0x10, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
59039 +0x02, 0x46, 0x6E, 0x02, 0x50, 0xC6, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6,
59040 +0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C,
59041 +0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01,
59042 +0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4B,
59043 +0x23, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F,
59044 +0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8,
59045 +0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA,
59046 +0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE,
59047 +0xE7, 0x80, 0xBE, 0xE5, 0x21, 0x64, 0x01, 0x70, 0x67, 0xE5, 0x24, 0x60, 0x63, 0xE5, 0x24, 0x64,
59048 +0x02, 0x60, 0x06, 0xE5, 0x24, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x8B, 0x0B,
59049 +0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x8B, 0x19, 0xF0, 0x90, 0x8B, 0x0B, 0xE0, 0x70, 0x07, 0x90,
59050 +0x8B, 0x19, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x8B, 0x0B, 0xE0, 0xFF, 0x90, 0x8B, 0x0B, 0xEF, 0xF0,
59051 +0x90, 0x8B, 0x0D, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x8B, 0x0C, 0xF0, 0x90, 0x05, 0x58,
59052 +0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x53, 0x25,
59053 +0xFD, 0x53, 0x25, 0xEF, 0xE5, 0x24, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x47, 0x8E,
59054 +0x22, 0xEF, 0x64, 0x01, 0x70, 0x35, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x36, 0x75, 0x7D, 0x02, 0x7F,
59055 +0x03, 0x12, 0x36, 0x75, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12,
59056 +0x45, 0x9E, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x7D, 0xC1, 0x90, 0x06, 0x04, 0xE0,
59057 +0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B,
59058 +0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x36, 0xE6, 0x7D, 0x02, 0x7F, 0x03, 0x12,
59059 +0x36, 0xE6, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0,
59060 +0x12, 0x4B, 0x4F, 0xE5, 0x21, 0x20, 0xE0, 0x05, 0xE4, 0x90, 0x8B, 0x0D, 0xF0, 0x22, 0xE4, 0x90,
59061 +0x8A, 0xC5, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x8A, 0xC5, 0xF0, 0xE0, 0x54, 0xC0, 0x70, 0x09,
59062 +0x53, 0x25, 0xFE, 0x53, 0x25, 0xFD, 0x12, 0x4A, 0xFC, 0x90, 0x8A, 0xC5, 0xE0, 0x30, 0xE6, 0x15,
59063 +0x43, 0x25, 0x01, 0x90, 0x8B, 0x1A, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x4A, 0x97, 0x80, 0x08,
59064 +0x12, 0x49, 0x49, 0x80, 0x03, 0x53, 0x25, 0xFE, 0x90, 0x8A, 0xC5, 0xE0, 0x30, 0xE7, 0x27, 0x43,
59065 +0x25, 0x02, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x11, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4,
59066 +0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90,
59067 +0x8B, 0x1B, 0x74, 0x01, 0xF0, 0x22, 0x53, 0x25, 0xFD, 0x22, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x8B,
59068 +0x12, 0x4B, 0x43, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xF5, 0x24, 0x14, 0x60,
59069 +0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03, 0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90,
59070 +0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFD, 0xE4, 0xFF, 0x12, 0x4A,
59071 +0x07, 0x80, 0x29, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFD,
59072 +0x7F, 0x01, 0x12, 0x4A, 0x07, 0x1F, 0x80, 0x14, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00,
59073 +0x02, 0x12, 0x42, 0x20, 0xFD, 0x7F, 0x02, 0x12, 0x4A, 0x07, 0xE4, 0xFF, 0x12, 0x47, 0x21, 0x22,
59074 +0xE4, 0x90, 0x8A, 0xCB, 0xF0, 0xE5, 0x24, 0x60, 0x49, 0x90, 0x8B, 0x1B, 0xE0, 0x60, 0x0D, 0xE4,
59075 +0xF0, 0x53, 0x25, 0xFD, 0xE5, 0x25, 0x54, 0x07, 0x70, 0x38, 0x80, 0x33, 0x90, 0x8B, 0x0C, 0xE0,
59076 +0x04, 0xF0, 0x53, 0x25, 0xEF, 0x90, 0x8A, 0xCB, 0xE0, 0xFF, 0x90, 0x8B, 0x10, 0xE0, 0x2F, 0xFF,
59077 +0xE4, 0x33, 0xFE, 0x90, 0x8B, 0x0C, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
59078 +0x40, 0x0D, 0xE5, 0x21, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12,
59079 +0x4A, 0xFC, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x63, 0x90, 0x04, 0x1D, 0xE0,
59080 +0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x66, 0x74, 0xFF, 0xF0, 0x12, 0x7E, 0x9A, 0xBF, 0x01,
59081 +0x0D, 0x90, 0x8A, 0xF9, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xFD, 0x12, 0x45, 0x09, 0x90, 0x05,
59082 +0x22, 0xE5, 0x66, 0xF0, 0x80, 0x0D, 0x90, 0x8A, 0xF9, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xFD,
59083 +0x12, 0x45, 0x09, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x24,
59084 +0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x41, 0x90, 0x8B, 0x1A, 0xE0, 0x60, 0x2B, 0x12, 0x45, 0x9E,
59085 +0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
59086 +0x7F, 0x58, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92,
59087 +0x74, 0x01, 0xF0, 0x90, 0x8B, 0x18, 0xF0, 0x22, 0xE5, 0x22, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
59088 +0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01,
59089 +0x3C, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E,
59090 +0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x5F, 0x74, 0x05,
59091 +0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x17, 0x14, 0xF0, 0xE5, 0x22, 0x54, 0x0F,
59092 +0xC3, 0x94, 0x0C, 0x50, 0x0D, 0x12, 0x45, 0x9E, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x03, 0x12,
59093 +0x7D, 0xC1, 0x22, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x37, 0xE5, 0x25, 0x54, 0x03, 0x70,
59094 +0x31, 0xE5, 0x23, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x50, 0x28, 0xE5, 0x25, 0x20, 0xE2, 0x23, 0xE5,
59095 +0x25, 0x20, 0xE4, 0x1E, 0x90, 0x8B, 0x0D, 0xE0, 0x70, 0x18, 0x90, 0x8B, 0x12, 0xE0, 0x70, 0x12,
59096 +0xE5, 0x26, 0x70, 0x0E, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F,
59097 +0x01, 0x22, 0x7F, 0x00, 0x22, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x27, 0x90, 0x8B, 0x18,
59098 +0xE0, 0x70, 0x21, 0x90, 0x8B, 0x17, 0xE0, 0x70, 0x1B, 0xE5, 0x23, 0x54, 0x0F, 0xD3, 0x94, 0x04,
59099 +0x50, 0x12, 0xE5, 0x26, 0x70, 0x0E, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x08,
59100 +0xF0, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xEF, 0x24, 0xFE, 0x60, 0x0B, 0x04, 0x70, 0x22, 0x90,
59101 +0x8B, 0x19, 0x74, 0x01, 0xF0, 0x80, 0x16, 0xED, 0x70, 0x0A, 0x90, 0x8B, 0x16, 0xE0, 0x90, 0x8B,
59102 +0x19, 0xF0, 0x80, 0x05, 0x90, 0x8B, 0x19, 0xED, 0xF0, 0x90, 0x8B, 0x19, 0xE0, 0x90, 0x8B, 0x0B,
59103 +0xF0, 0x22, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x7E,
59104 +0x9A, 0xEF, 0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x36,
59105 +0xE6, 0x12, 0x7C, 0x50, 0x53, 0x22, 0xF0, 0x43, 0x22, 0x02, 0x22, 0xEF, 0x60, 0x0F, 0x74, 0x21,
59106 +0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x74, 0x21, 0x2D,
59107 +0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0,
59108 +0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A, 0xE5, 0x21, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x48, 0xB3,
59109 +0x53, 0x22, 0xF0, 0x43, 0x22, 0x0C, 0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x14, 0x90, 0x8A, 0xF8,
59110 +0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x5F, 0xFD, 0x8E, 0x69, 0x8F, 0x6A, 0x90, 0x04, 0x1F, 0x74, 0x20,
59111 +0xF0, 0x22, 0x90, 0x8B, 0x52, 0xEF, 0xF0, 0x12, 0x7D, 0x42, 0x90, 0x8B, 0x52, 0xE0, 0x60, 0x05,
59112 +0x90, 0x05, 0x22, 0xE4, 0xF0, 0x53, 0x22, 0xF0, 0x43, 0x22, 0x04, 0x22, 0x90, 0x06, 0x04, 0xE0,
59113 +0x44, 0x40, 0xF0, 0xE5, 0x21, 0xB4, 0x01, 0x05, 0x7F, 0x01, 0x12, 0x48, 0xB3, 0x53, 0x22, 0xF0,
59114 +0x43, 0x22, 0x04, 0x22, 0xE5, 0x23, 0x30, 0xE6, 0x12, 0xE5, 0x23, 0x54, 0x0F, 0xFF, 0x90, 0x01,
59115 +0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0, 0x53, 0x23, 0xBF, 0x22, 0x90, 0x8B, 0x2C, 0xE0,
59116 +0x30, 0xE0, 0x05, 0xAF, 0x23, 0x02, 0x7E, 0x06, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x22,
59117 +0x53, 0x22, 0xF0, 0x43, 0x22, 0x01, 0x12, 0x4B, 0x5A, 0x12, 0x4B, 0x5B, 0x53, 0x22, 0xF0, 0x43,
59118 +0x22, 0x02, 0x22, 0x41, 0x8A, 0xF6, 0x00, 0x41, 0x8B, 0x05, 0x00, 0x41, 0x8B, 0x51, 0x00, 0x41,
59119 +0x8B, 0x53, 0x00, 0x00, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x7F, 0x64, 0x7F, 0x7F, 0x01, 0x60, 0x02,
59120 +0x7F, 0x00, 0x22, 0xE4, 0x90, 0x8B, 0x1B, 0xF0, 0x90, 0x8B, 0x0C, 0xF0, 0xF5, 0x25, 0x22, 0x90,
59121 +0x8B, 0x13, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x22, 0x22, 0xF0, 0x90, 0x8B, 0x0F,
59122 +0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0xD3, 0x10, 0xAF, 0x01,
59123 +0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x3D, 0xE0, 0xFB, 0xA3, 0xE0, 0xF5, 0x44, 0xE4, 0xF5, 0x45, 0x12,
59124 +0x35, 0xAB, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0,
59125 +0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05,
59126 +0xC0, 0x06, 0xC0, 0x07, 0x75, 0x0E, 0x00, 0x90, 0x01, 0xC4, 0x74, 0x87, 0xF0, 0x74, 0x4B, 0xA3,
59127 +0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31,
59128 +0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34,
59129 +0x30, 0xE0, 0x51, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x1F,
59130 +0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x18, 0x90, 0x8B, 0x34, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xE0,
59131 +0x64, 0x03, 0x60, 0x0B, 0x7F, 0x01, 0xB1, 0xE0, 0xEF, 0x70, 0x04, 0x7F, 0x02, 0xD1, 0x89, 0x90,
59132 +0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x1D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x16, 0x90, 0x8B,
59133 +0x2E, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x09, 0xE4, 0xFF, 0xB1, 0xE0, 0xEF,
59134 +0x70, 0x02, 0xD1, 0x56, 0xE5, 0x34, 0x30, 0xE1, 0x08, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x11,
59135 +0x60, 0xE5, 0x34, 0x30, 0xE2, 0x28, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0,
59136 +0x30, 0xE0, 0x14, 0x90, 0x8B, 0x3D, 0xE4, 0x71, 0x5C, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90,
59137 +0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x07, 0x90, 0x8B, 0x18, 0xE4, 0xF0, 0x51, 0xFC, 0xE5, 0x34,
59138 +0x30, 0xE3, 0x38, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x24,
59139 +0x90, 0x8B, 0x3D, 0xE4, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
59140 +0x7F, 0x5C, 0x7E, 0x01, 0x71, 0x6C, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74,
59141 +0x02, 0xF0, 0x80, 0x07, 0x90, 0x8B, 0x17, 0xE4, 0xF0, 0x51, 0xFC, 0xE5, 0x34, 0x30, 0xE4, 0x09,
59142 +0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x12, 0x51, 0xC9, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01,
59143 +0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x10, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90,
59144 +0x00, 0x83, 0xE0, 0xF5, 0x23, 0x51, 0xE4, 0x51, 0xFC, 0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01,
59145 +0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90,
59146 +0x8B, 0x05, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05,
59147 +0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x75, 0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0x90,
59148 +0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x18, 0x90, 0x8B, 0x36, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x64,
59149 +0x03, 0x60, 0x0B, 0x7F, 0x01, 0xB1, 0xE0, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0xD1, 0x89, 0x90, 0x8B,
59150 +0x2C, 0xE0, 0x30, 0xE0, 0x49, 0x90, 0x8B, 0x30, 0xE4, 0xF0, 0xFF, 0xB1, 0xE0, 0xEF, 0x60, 0x3E,
59151 +0x12, 0x65, 0x5F, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0x64, 0x06, 0x60, 0x32, 0xEF, 0xB4, 0x04, 0x02,
59152 +0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF, 0x80, 0x14, 0x90, 0x8B, 0x2D,
59153 +0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x05, 0x7F,
59154 +0x01, 0x12, 0x65, 0x82, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x12, 0x7D, 0xC1, 0xE5, 0x36,
59155 +0x30, 0xE1, 0x47, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x19,
59156 +0x90, 0x8B, 0x36, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x64, 0x03, 0x60, 0x0B, 0x7F, 0x01,
59157 +0xB1, 0xE0, 0xEF, 0x70, 0x04, 0x7F, 0x02, 0xD1, 0x89, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x1A,
59158 +0x90, 0x8B, 0x30, 0x74, 0x01, 0xF0, 0x12, 0x7E, 0x2B, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60,
59159 +0x09, 0xE4, 0xFF, 0xB1, 0xE0, 0xEF, 0x70, 0x02, 0xD1, 0x56, 0x74, 0x87, 0x04, 0x90, 0x01, 0xC4,
59160 +0xF0, 0x74, 0x4B, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0,
59161 +0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32,
59162 +0xEF, 0x64, 0x01, 0x70, 0x3D, 0x90, 0x8B, 0x35, 0xE0, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B,
59163 +0x08, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x34, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22,
59164 +0x90, 0x8B, 0x32, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x54,
59165 +0x07, 0x30, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x36, 0xE0, 0x7F, 0x01, 0x60, 0x36, 0x7F,
59166 +0x00, 0x22, 0x90, 0x8B, 0x2F, 0xE0, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x08, 0xE0, 0x60,
59167 +0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x2E, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x2C,
59168 +0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x30, 0xE0, 0x7F,
59169 +0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x0D, 0xE0, 0x60, 0x16, 0x90, 0x8B, 0x2D, 0xE0,
59170 +0x70, 0x04, 0x7F, 0x05, 0x80, 0x1F, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x01, 0x70, 0x1A, 0x7F, 0x02,
59171 +0x80, 0x13, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x03, 0x80, 0x08, 0x90, 0x8B, 0x2D,
59172 +0xE0, 0x70, 0x05, 0x7F, 0x04, 0x12, 0x65, 0x82, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
59173 +0x90, 0x8B, 0x33, 0xE0, 0x90, 0x8B, 0x55, 0xF0, 0x6F, 0x70, 0x02, 0xE1, 0x55, 0xEF, 0x14, 0x60,
59174 +0x3B, 0x14, 0x60, 0x5F, 0x14, 0x70, 0x02, 0xE1, 0x30, 0x24, 0x03, 0x60, 0x02, 0xE1, 0x55, 0x90,
59175 +0x8B, 0x55, 0xE0, 0xB4, 0x03, 0x04, 0xF1, 0xC2, 0xE1, 0x55, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x02,
59176 +0x04, 0xF1, 0xAF, 0xE1, 0x55, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x04, 0x04, 0xF1, 0xC6, 0xE1, 0x55,
59177 +0x90, 0x8B, 0x55, 0xE0, 0x64, 0x01, 0x70, 0x7D, 0xF1, 0xB1, 0x80, 0x79, 0x90, 0x8B, 0x55, 0xE0,
59178 +0xFF, 0xB4, 0x03, 0x04, 0xF1, 0xCA, 0x80, 0x6D, 0xEF, 0xB4, 0x02, 0x04, 0xF1, 0xA1, 0x80, 0x65,
59179 +0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x04, 0x04, 0xF1, 0xD5, 0x80, 0x59, 0xEF, 0x70, 0x56, 0xF1,
59180 +0x8E, 0x80, 0x52, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x03, 0x05, 0x12, 0x7C, 0x41, 0x80, 0x46, 0x90,
59181 +0x8B, 0x55, 0xE0, 0xB4, 0x01, 0x04, 0xF1, 0x72, 0x80, 0x3B, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x04,
59182 +0x05, 0x12, 0x7D, 0x23, 0x80, 0x2F, 0x90, 0x8B, 0x55, 0xE0, 0x70, 0x29, 0xF1, 0x70, 0x80, 0x25,
59183 +0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x01, 0x04, 0xF1, 0x5A, 0x80, 0x19, 0xEF, 0xB4, 0x02, 0x04,
59184 +0xF1, 0x6B, 0x80, 0x11, 0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x04, 0x04, 0xF1, 0x5A, 0x80, 0x05,
59185 +0xEF, 0x70, 0x02, 0xF1, 0x67, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0,
59186 +0x90, 0x8B, 0x33, 0x74, 0x03, 0xF0, 0x22, 0xF1, 0x8E, 0x80, 0xEF, 0x12, 0x7D, 0x42, 0x80, 0xEA,
59187 +0xF1, 0x8E, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x7E, 0x9A, 0xEF, 0x70, 0x06, 0x90, 0x01,
59188 +0xC8, 0x74, 0xFD, 0xF0, 0x12, 0x7C, 0x50, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x01,
59189 +0x3E, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x37, 0x00, 0x90, 0x8B, 0x33, 0x74, 0x01, 0xF0,
59190 +0x22, 0x12, 0x7D, 0x42, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0x04, 0xF0, 0x22, 0xF1,
59191 +0xA1, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x36, 0x92, 0x90, 0x05, 0x27, 0xE4, 0xF0, 0x90, 0x8B, 0x33,
59192 +0xF0, 0x22, 0xF1, 0xCA, 0x80, 0xEB, 0xF1, 0xD5, 0x80, 0xE7, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90,
59193 +0x8B, 0x33, 0x04, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0x04, 0xF0, 0x22,
59194 +0xF1, 0x8E, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x33, 0x74, 0x04, 0xF0, 0x22, 0x90,
59195 +0x02, 0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12,
59196 +0x43, 0xBA, 0x50, 0x1A, 0x00, 0x40, 0x50, 0x42, 0x00, 0x80, 0x50, 0x6D, 0x01, 0x00, 0x50, 0x81,
59197 +0x02, 0x00, 0x50, 0x99, 0x04, 0x00, 0x00, 0x00, 0x50, 0xB6, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE,
59198 +0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06,
59199 +0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
59200 +0x80, 0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF,
59201 +0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78,
59202 +0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04,
59203 +0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80,
59204 +0x35, 0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF,
59205 +0x2D, 0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE,
59206 +0xFF, 0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D,
59207 +0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x58,
59208 +0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x22, 0xE4, 0x90, 0x8A, 0xCC, 0xF0, 0xA3, 0xF0, 0x75, 0x8E, 0x02,
59209 +0x91, 0x0E, 0x12, 0x68, 0x44, 0x90, 0x8B, 0x07, 0xEF, 0xF0, 0x12, 0x68, 0x51, 0x90, 0x8B, 0x09,
59210 +0xEF, 0xF0, 0x12, 0x68, 0x5D, 0x90, 0x8A, 0xF4, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x55,
59211 +0xF5, 0x21, 0x12, 0x72, 0x55, 0x12, 0x44, 0x9E, 0x12, 0x32, 0x3D, 0x7F, 0x03, 0x12, 0x78, 0x42,
59212 +0x12, 0x7C, 0x3D, 0x12, 0x68, 0x0A, 0x12, 0x68, 0x75, 0x12, 0x68, 0x8A, 0x12, 0x68, 0x28, 0x12,
59213 +0x68, 0x43, 0x90, 0x8A, 0xCE, 0xE5, 0xD9, 0xF0, 0x31, 0x5F, 0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0,
59214 +0x44, 0x40, 0xF0, 0x51, 0x0E, 0x75, 0xE8, 0x03, 0x43, 0xA8, 0x85, 0xD2, 0xAF, 0x11, 0xBB, 0x90,
59215 +0x8A, 0xCC, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xC6, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x50, 0xA3, 0xF0,
59216 +0xE5, 0x55, 0x30, 0xE4, 0x09, 0xC2, 0xAF, 0x53, 0x55, 0xEF, 0xD2, 0xAF, 0xB1, 0x59, 0xE5, 0x55,
59217 +0x30, 0xE6, 0xDC, 0xC2, 0xAF, 0x53, 0x55, 0xBF, 0xD2, 0xAF, 0x12, 0x6B, 0xBD, 0x80, 0xD0, 0x90,
59218 +0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3, 0xF0, 0xA3,
59219 +0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x31, 0x88, 0x7D, 0xFF, 0x7F, 0x55, 0x31, 0x88, 0x7D, 0xFF,
59220 +0x7F, 0x56, 0x31, 0x88, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F,
59221 +0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x51, 0x0E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x30,
59222 +0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
59223 +0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x31, 0x88, 0xE4, 0xFD, 0x7F, 0x51, 0x31, 0x88, 0xE4, 0xFD, 0x7F,
59224 +0x52, 0x31, 0x88, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0xE5, 0x5E, 0x64, 0x01, 0x70, 0x3B, 0x71,
59225 +0x4E, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x71, 0x42, 0x90, 0x00, 0x46, 0xE0, 0x44, 0x04, 0xFD, 0x7F,
59226 +0x46, 0x31, 0x88, 0x90, 0x00, 0x44, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x44, 0x31, 0x88, 0x90, 0x00,
59227 +0x46, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x46, 0x31, 0x88, 0x7F, 0x02, 0x71, 0x6A, 0x8F, 0x62, 0x90,
59228 +0x01, 0xC9, 0xE5, 0x62, 0xF0, 0xB4, 0x01, 0x02, 0x51, 0xE2, 0x22, 0xE0, 0x5F, 0xF0, 0xD3, 0x10,
59229 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
59230 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xE0, 0xED, 0xF0, 0x90, 0x8A, 0xDF, 0xEF, 0xF0, 0xD3,
59231 +0x94, 0x07, 0x50, 0x4E, 0xA3, 0xE0, 0x70, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8,
59232 +0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x47, 0xE0, 0x5F, 0xF0,
59233 +0x80, 0x17, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
59234 +0xD8, 0xFC, 0xFF, 0x90, 0x00, 0x47, 0xE0, 0x4F, 0xF0, 0x51, 0x0E, 0x90, 0x8A, 0xDF, 0xE0, 0xFF,
59235 +0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46,
59236 +0x80, 0x59, 0x90, 0x8A, 0xDF, 0xE0, 0x24, 0xF8, 0xF0, 0xA3, 0xE0, 0x70, 0x1D, 0x90, 0x8A, 0xDF,
59237 +0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xC4, 0x54, 0xF0,
59238 +0xF4, 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x5F, 0xF0, 0x80, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74,
59239 +0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x00,
59240 +0x43, 0xE0, 0x4F, 0xF0, 0x51, 0x0E, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08,
59241 +0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0x51, 0x0B, 0xD0, 0xD0, 0x92,
59242 +0xAF, 0x22, 0x90, 0x00, 0x49, 0xE0, 0x90, 0x8B, 0x54, 0xF0, 0xE0, 0x54, 0x0F, 0xF0, 0x44, 0xF0,
59243 +0xFD, 0x7F, 0x49, 0x31, 0x88, 0x90, 0x8B, 0x54, 0xE0, 0x44, 0xB0, 0xFD, 0x7F, 0x49, 0x21, 0x88,
59244 +0x90, 0x8A, 0xDD, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0x5E, 0x01, 0x8E, 0x5F, 0xF5, 0x60, 0xE4,
59245 +0xFD, 0x7F, 0x0B, 0x51, 0x1E, 0xE4, 0xFD, 0x7F, 0x02, 0x51, 0x1E, 0x71, 0x4E, 0xE4, 0xFF, 0x71,
59246 +0x42, 0xE4, 0xF5, 0x62, 0x90, 0x01, 0xC9, 0xE5, 0x62, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFC, 0xA3,
59247 +0xE0, 0xFD, 0xEC, 0xFB, 0x8D, 0x44, 0xE4, 0xF5, 0x45, 0x7D, 0x01, 0x7F, 0x60, 0x7E, 0x01, 0x02,
59248 +0x35, 0xAB, 0x90, 0x01, 0xCA, 0xE5, 0x61, 0xF0, 0xEF, 0x60, 0x02, 0x51, 0xE2, 0x22, 0x7F, 0x0B,
59249 +0x71, 0x6A, 0xEF, 0x65, 0x61, 0x60, 0x10, 0xE5, 0x61, 0xB4, 0x01, 0x05, 0xE4, 0xF5, 0x61, 0x80,
59250 +0x03, 0x75, 0x61, 0x01, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
59251 +0xD0, 0x90, 0x8B, 0x57, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x43, 0xE0, 0xFF, 0x74, 0x01, 0xA8,
59252 +0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0x51, 0x0B, 0x90,
59253 +0x8B, 0x57, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
59254 +0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05,
59255 +0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4B, 0x90, 0x8B,
59256 +0x57, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
59257 +0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x5F, 0xF0, 0x51, 0x0E, 0x90, 0x8B, 0x57, 0xE0,
59258 +0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
59259 +0xF9, 0xFF, 0x90, 0x00, 0x42, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06,
59260 +0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90,
59261 +0x8B, 0x04, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x21, 0x88, 0xD3, 0x10,
59262 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDA, 0x12, 0x43,
59263 +0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0xFA, 0xE5, 0xF0, 0x24, 0x00, 0xFF, 0xE4, 0x3A, 0xFE,
59264 +0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0xEE, 0x8F, 0xF0, 0x12, 0x43, 0x19, 0x12,
59265 +0x29, 0xD9, 0xFF, 0x60, 0x2C, 0xB5, 0x5E, 0x16, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00,
59266 +0x01, 0x12, 0x42, 0xC2, 0x65, 0x60, 0x70, 0x04, 0xE5, 0x5F, 0x65, 0xF0, 0x60, 0x22, 0x90, 0x8A,
59267 +0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0xFF, 0xAE, 0xF0, 0x71, 0x00, 0x80,
59268 +0x0F, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0x65, 0x5E, 0x60, 0x02, 0x91, 0x95,
59269 +0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xF5, 0x5E, 0x7F, 0x60, 0x7E, 0x01, 0x8F, 0x82, 0x8E, 0x83,
59270 +0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x8B, 0xEF, 0x12, 0x43, 0x94,
59271 +0x54, 0xE7, 0x01, 0x54, 0xDE, 0x02, 0x55, 0x0B, 0x03, 0x55, 0x14, 0x05, 0x55, 0x1D, 0x06, 0x55,
59272 +0x58, 0x07, 0x55, 0x25, 0x08, 0x55, 0x2E, 0x09, 0x55, 0x36, 0x20, 0x55, 0x3F, 0x2C, 0x54, 0xF0,
59273 +0x2D, 0x54, 0xF9, 0x2E, 0x55, 0x02, 0x3B, 0x55, 0x48, 0x4B, 0x00, 0x00, 0x55, 0x51, 0x90, 0x8A,
59274 +0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0x85, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0x8B,
59275 +0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0xB8, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02,
59276 +0x75, 0x00, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x75, 0x39, 0x90, 0x8A, 0xD7, 0x12, 0x43,
59277 +0x6B, 0x02, 0x75, 0x52, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0x0F, 0x90, 0x8A, 0xD7,
59278 +0x12, 0x43, 0x6B, 0xC1, 0xA6, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x75, 0x9A, 0x90, 0x8A,
59279 +0xD7, 0x12, 0x43, 0x6B, 0x81, 0x1E, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x78, 0x81, 0x90,
59280 +0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x7A, 0xC2, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x7C,
59281 +0x2B, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
59282 +0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFD, 0x70,
59283 +0x02, 0xC1, 0xA1, 0x90, 0x8B, 0x51, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
59284 +0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0xC1, 0x9A, 0x90,
59285 +0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD0,
59286 +0xF0, 0x75, 0x1D, 0x01, 0x75, 0x1E, 0x8A, 0x75, 0x1F, 0xD0, 0x75, 0x20, 0x01, 0x7B, 0x01, 0x7A,
59287 +0x8A, 0x79, 0xD1, 0x12, 0x5E, 0xE4, 0x90, 0x8A, 0xD1, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54,
59288 +0x01, 0x90, 0x8B, 0x51, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x88, 0x12, 0x43,
59289 +0x5F, 0xE0, 0x90, 0x8A, 0xD2, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x89,
59290 +0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD3, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90,
59291 +0x01, 0xD1, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD4, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0,
59292 +0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD5, 0xF0, 0x90, 0x8B, 0x51, 0xE0,
59293 +0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD6, 0xF0, 0x80, 0x33,
59294 +0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD2, 0xF0, 0x90,
59295 +0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD3,
59296 +0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x5F, 0xE0, 0x90,
59297 +0x8A, 0xD4, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A, 0x8A, 0x79, 0xD2, 0x91, 0xA6, 0x90,
59298 +0x8A, 0xCF, 0xE0, 0xFF, 0x90, 0x8B, 0x51, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02,
59299 +0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0xFF, 0x74,
59300 +0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x8B,
59301 +0x51, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0xA1, 0x6A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02,
59302 +0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x04, 0x12, 0x42, 0x20, 0xFF, 0x54, 0x1F, 0xFE,
59303 +0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0x90, 0x8A, 0xDA, 0xEF, 0xF0, 0xA3,
59304 +0xED, 0xF0, 0xA3, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x03, 0x12,
59305 +0x42, 0x20, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x42,
59306 +0x20, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x8A, 0xE0, 0xF0, 0x90, 0x8A, 0xDA, 0xE0,
59307 +0xFF, 0x75, 0xF0, 0x09, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0xAD, 0x82, 0xAC, 0x83, 0x90, 0x8A,
59308 +0xE1, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x23, 0xF9, 0x74, 0x87,
59309 +0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90,
59310 +0x00, 0x03, 0x12, 0x42, 0x20, 0x54, 0x0F, 0xFF, 0x90, 0x8A, 0xE3, 0x12, 0x43, 0x6B, 0xEF, 0x12,
59311 +0x42, 0x4D, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x90,
59312 +0x8A, 0xE3, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x5F, 0x90, 0x8A, 0xDC, 0x12,
59313 +0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0x90, 0x8A, 0xE1, 0xE0, 0xFC, 0xA3, 0xE0,
59314 +0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x29, 0xD9, 0x8D, 0x82, 0x8C, 0x83, 0xA3, 0xF0,
59315 +0x90, 0x8A, 0xDF, 0xE0, 0xFE, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0x24, 0xC1, 0xF5, 0x82, 0xE4, 0x34,
59316 +0x86, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xDB, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87,
59317 +0x29, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2A, 0x12, 0x43, 0x5F,
59318 +0x74, 0x01, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2B, 0x12,
59319 +0x43, 0x5F, 0xEE, 0xF0, 0x8F, 0x0F, 0xEF, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89,
59320 +0xAF, 0x82, 0xF5, 0x10, 0x8F, 0x11, 0xE5, 0x0F, 0x75, 0xF0, 0x02, 0xA4, 0x24, 0x81, 0xF9, 0x74,
59321 +0x86, 0x35, 0xF0, 0x75, 0x12, 0x01, 0xF5, 0x13, 0x89, 0x14, 0x75, 0xF0, 0x09, 0xE5, 0x0F, 0x90,
59322 +0x87, 0x25, 0x12, 0x43, 0x5F, 0xAF, 0x82, 0x85, 0x83, 0x15, 0x8F, 0x16, 0xE5, 0x0F, 0x75, 0xF0,
59323 +0x09, 0xA4, 0x24, 0x23, 0xF9, 0x74, 0x87, 0x35, 0xF0, 0x75, 0x17, 0x01, 0xF5, 0x18, 0x89, 0x19,
59324 +0x74, 0xC1, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x12, 0x43, 0x94, 0x58,
59325 +0x34, 0x00, 0x58, 0x49, 0x01, 0x58, 0x5E, 0x02, 0x58, 0x73, 0x03, 0x58, 0x9C, 0x04, 0x58, 0xB1,
59326 +0x05, 0x58, 0xC6, 0x06, 0x58, 0xEC, 0x0C, 0x59, 0x19, 0x0D, 0x59, 0x46, 0x0E, 0x59, 0x73, 0x0F,
59327 +0x00, 0x00, 0x59, 0xA7, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
59328 +0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5,
59329 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80, 0x27, 0xE5, 0x0F,
59330 +0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74,
59331 +0x05, 0x80, 0x12, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
59332 +0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34,
59333 +0x86, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0, 0x21, 0xA7, 0xE5, 0x0F, 0x25, 0xE0,
59334 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF5, 0x80,
59335 +0x27, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F,
59336 +0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34,
59337 +0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5,
59338 +0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x21, 0xA7, 0x90, 0x04, 0x47, 0xE0,
59339 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x46, 0xE0, 0xAB, 0x12, 0xAA,
59340 +0x13, 0xA9, 0x14, 0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x45, 0xE0, 0x85, 0x11, 0x82,
59341 +0x85, 0x10, 0x83, 0xF0, 0x90, 0x04, 0x44, 0x21, 0x9E, 0x90, 0x04, 0x4B, 0xE0, 0xAB, 0x12, 0xAA,
59342 +0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x4A, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
59343 +0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x49, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83,
59344 +0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
59345 +0x12, 0x42, 0x4D, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x01,
59346 +0x12, 0x42, 0x5F, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xF0, 0x90, 0x04,
59347 +0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D,
59348 +0x90, 0x04, 0x52, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x01, 0x12, 0x42, 0x5F,
59349 +0x90, 0x04, 0x51, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xF0, 0x90, 0x04, 0x50, 0xE0, 0x85,
59350 +0x11, 0x82, 0x85, 0x10, 0x83, 0xA3, 0xF0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0xC0, 0x03, 0xC0,
59351 +0x02, 0xC0, 0x01, 0x12, 0x29, 0xD9, 0xFF, 0xAB, 0x17, 0xAA, 0x18, 0xA9, 0x19, 0x12, 0x29, 0xD9,
59352 +0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x4D, 0xAB, 0x12, 0xE5, 0x14, 0x24, 0x01,
59353 +0xF9, 0xE4, 0x35, 0x13, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x29, 0xD9, 0xFF, 0xAB,
59354 +0x17, 0xAA, 0x18, 0xA9, 0x19, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x5F, 0xD0, 0x01, 0xD0, 0x02,
59355 +0xD0, 0x03, 0x12, 0x42, 0x4D, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0,
59356 +0xFF, 0x85, 0x16, 0x82, 0x85, 0x15, 0x83, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0,
59357 +0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x16, 0x82,
59358 +0x85, 0x15, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x0F, 0x25,
59359 +0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60,
59360 +0x4B, 0x90, 0x8A, 0xE6, 0x74, 0x0B, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x50,
59361 +0x02, 0x41, 0xEC, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
59362 +0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5,
59363 +0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x0A, 0x90, 0x8A, 0xE6, 0xE0, 0x24, 0x10,
59364 +0xA3, 0xF0, 0x80, 0x68, 0x90, 0x8A, 0xE6, 0xE0, 0x14, 0xF0, 0x80, 0xBB, 0xE5, 0x0F, 0x25, 0xE0,
59365 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x47,
59366 +0x90, 0x8A, 0xE6, 0x74, 0x0F, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x40, 0x3C,
59367 +0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
59368 +0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E,
59369 +0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x8A, 0xE6, 0xE0, 0xA3, 0xF0, 0x80, 0x0D, 0x90,
59370 +0x8A, 0xE6, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x8A, 0xE7, 0xF0, 0xE5, 0x0F, 0x25, 0xE0,
59371 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46,
59372 +0xE4, 0x90, 0x8A, 0xE6, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x40, 0x02, 0x61,
59373 +0xA5, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
59374 +0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0,
59375 +0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90, 0x8A, 0xE6, 0xE0, 0x80, 0x63, 0x90, 0x8A,
59376 +0xE6, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34,
59377 +0x86, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x8A, 0xE6, 0xF0, 0x90,
59378 +0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
59379 +0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81,
59380 +0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08,
59381 +0x90, 0x8A, 0xE6, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90, 0x8A, 0xE6, 0xE0, 0x04, 0xF0, 0x80, 0xBF,
59382 +0xE4, 0x90, 0x8A, 0xE8, 0xF0, 0x90, 0x8A, 0xE7, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0xE5, 0x0F, 0x90,
59383 +0x87, 0x27, 0x12, 0x43, 0x5F, 0xEF, 0xF0, 0x90, 0x8A, 0xE8, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xE5,
59384 +0x0F, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0xE5, 0x0F, 0xC3, 0x94, 0x20, 0x50, 0x32,
59385 +0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3, 0x9F, 0x40, 0x02,
59386 +0x80, 0x18, 0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xC3, 0x9E,
59387 +0x50, 0x08, 0x90, 0x8A, 0xE8, 0xE0, 0xA3, 0xF0, 0x80, 0x08, 0x90, 0x8A, 0xE7, 0xE0, 0x90, 0x8A,
59388 +0xE9, 0xF0, 0x90, 0x8A, 0xE9, 0xE0, 0xFD, 0xAF, 0x0F, 0x91, 0x4E, 0x90, 0x8A, 0xE9, 0xE0, 0xFF,
59389 +0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x8A, 0xE7,
59390 +0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x03, 0xF0, 0x22, 0xEF, 0xD3,
59391 +0x94, 0x0B, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x03, 0x40,
59392 +0x07, 0x90, 0x87, 0x22, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x87, 0x22, 0xF0, 0x22, 0xD3, 0x10,
59393 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED,
59394 +0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAC, 0x07, 0xED, 0x54, 0x1F, 0x90, 0x8A, 0xC7, 0xF0, 0x74,
59395 +0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xC5, 0xF0, 0x90, 0x8A,
59396 +0xC8, 0x74, 0x01, 0xF0, 0xEB, 0xC3, 0x94, 0x01, 0x40, 0x02, 0x80, 0x37, 0x90, 0x8A, 0xC5, 0xE0,
59397 +0x25, 0x0D, 0xFF, 0xA3, 0xF0, 0xA3, 0xE0, 0x90, 0x41, 0x9E, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40,
59398 +0x10, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x04, 0x80,
59399 +0x9D, 0x90, 0x8A, 0xC6, 0xE0, 0xFF, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
59400 +0xEF, 0xF0, 0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0,
59401 +0xFF, 0x90, 0x8A, 0xCA, 0xF0, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0,
59402 +0x54, 0x1F, 0x90, 0x8A, 0xC9, 0xF0, 0xD3, 0x9F, 0x40, 0x06, 0xA3, 0xE0, 0x90, 0x8A, 0xC9, 0xF0,
59403 +0x90, 0x8A, 0xC9, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
59404 +0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
59405 +0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13,
59406 +0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
59407 +0xEF, 0xF0, 0xAF, 0x05, 0x90, 0x8A, 0xC9, 0xE0, 0xFD, 0x91, 0x4E, 0x90, 0x8A, 0xC9, 0xE0, 0xFF,
59408 +0x22, 0xAC, 0x07, 0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F,
59409 +0x90, 0x8A, 0xDE, 0xF0, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x8A, 0xE1, 0xF0, 0x75, 0xF0, 0x09, 0xEC,
59410 +0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xE3, 0xF0, 0x75, 0xF0, 0x09, 0xEC, 0x90,
59411 +0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0xFE, 0x90, 0x8A, 0xE4, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xE4,
59412 +0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE5, 0xCB, 0xF0,
59413 +0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0,
59414 +0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE7, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C,
59415 +0x90, 0x8A, 0xE4, 0xE0, 0x90, 0x8A, 0xE1, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0xED, 0x70, 0x02, 0xC1,
59416 +0x93, 0x90, 0x8A, 0xE2, 0xED, 0xF0, 0x90, 0x8A, 0xDE, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x8A, 0xE1,
59417 +0xE0, 0x90, 0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0x14, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0x70,
59418 +0x02, 0xC1, 0x93, 0x90, 0x8A, 0xE1, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0xC1, 0x93, 0xE4,
59419 +0x90, 0x8A, 0xE0, 0xF0, 0xEF, 0x14, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x8A, 0xE3, 0xE0, 0xFD, 0x90,
59420 +0x8A, 0xDF, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0,
59421 +0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
59422 +0xF9, 0xFF, 0x90, 0x8A, 0xE7, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x8A,
59423 +0xDF, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
59424 +0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE5, 0xE0, 0x5E, 0xFE, 0xA3,
59425 +0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0x90, 0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xE0,
59426 +0xE0, 0x04, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0, 0x6F, 0x60, 0x08, 0x90,
59427 +0x8A, 0xDF, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90, 0x8A, 0xE2, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0,
59428 +0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x8A, 0xDF, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x8A, 0xE3, 0xE0, 0x90,
59429 +0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xDE, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
59430 +0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
59431 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
59432 +0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
59433 +0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x8A, 0xDE, 0xE0, 0xFD, 0x91, 0x4E, 0x90, 0x8A,
59434 +0xDE, 0xE0, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1A, 0x8A, 0x1B, 0x89,
59435 +0x1C, 0x90, 0x8B, 0x3F, 0x12, 0x43, 0x8B, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F, 0x90, 0x8B, 0x42,
59436 +0x12, 0x43, 0x8B, 0xAF, 0x20, 0x15, 0x20, 0xEF, 0x60, 0x1E, 0x90, 0x8B, 0x42, 0xE4, 0x75, 0xF0,
59437 +0x01, 0x12, 0x43, 0x74, 0x12, 0x29, 0xD9, 0xFF, 0x90, 0x8B, 0x3F, 0xE4, 0x75, 0xF0, 0x01, 0x12,
59438 +0x43, 0x74, 0xEF, 0x12, 0x42, 0x4D, 0x80, 0xDB, 0xAB, 0x1A, 0xAA, 0x1B, 0xA9, 0x1C, 0xD0, 0xD0,
59439 +0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x8B,
59440 +0x90, 0x8B, 0x53, 0xE0, 0xFF, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x5F, 0x7F, 0xAF,
59441 +0x7E, 0x01, 0x12, 0x74, 0x3B, 0xEF, 0x60, 0x47, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x6B, 0x8B, 0x1D,
59442 +0x8A, 0x1E, 0x89, 0x1F, 0x75, 0x20, 0x02, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0xD1, 0xE4, 0x90,
59443 +0x8B, 0x48, 0x12, 0x43, 0x6B, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x8B, 0x45, 0x12, 0x43,
59444 +0x6B, 0x12, 0x29, 0xD9, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x20, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2,
59445 +0xD1, 0xE4, 0x90, 0x01, 0xAF, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0,
59446 +0xD0, 0x92, 0xAF, 0x22, 0x90, 0x8A, 0xC5, 0xE0, 0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44,
59447 +0x80, 0xF0, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x56, 0x90, 0x8B, 0x48, 0x12, 0x43, 0x8B, 0x0B, 0x7A,
59448 +0x8A, 0x79, 0xC5, 0xE1, 0x33, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xC4, 0x74,
59449 +0xC5, 0xF0, 0x74, 0x5F, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0,
59450 +0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7, 0xE0, 0x30,
59451 +0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF,
59452 +0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3, 0x13,
59453 +0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x1E, 0xAF, 0x03, 0x74, 0x0F,
59454 +0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x10, 0x2F, 0xF5,
59455 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F, 0xF5,
59456 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
59457 +0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
59458 +0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x5F, 0xC5,
59459 +0xBF, 0x01, 0x10, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xFD, 0x90, 0x04, 0x1F,
59460 +0x74, 0x20, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13, 0x13,
59461 +0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x8A, 0xC5, 0x74,
59462 +0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07, 0xAF,
59463 +0x06, 0xEE, 0x64, 0x03, 0x70, 0x3B, 0x90, 0x8A, 0xC5, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D, 0xF0,
59464 +0x79, 0x40, 0x90, 0x8A, 0xC5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x59,
59465 +0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x8A, 0xF6, 0xF0, 0x22, 0x90, 0x8A, 0xF6, 0xE0, 0x04, 0xF0,
59466 +0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0B, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x02, 0x11,
59467 +0x6D, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0,
59468 +0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90,
59469 +0x01, 0xC4, 0x74, 0xF2, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28, 0xF5,
59470 +0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0, 0x55,
59471 +0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x41, 0x89, 0x90, 0x01, 0x34, 0x74, 0x01, 0xF0,
59472 +0x85, 0xD1, 0x4D, 0x85, 0xD2, 0x4E, 0x85, 0xD3, 0x4F, 0x85, 0xD4, 0x50, 0x85, 0xD5, 0x51, 0x85,
59473 +0xD6, 0x52, 0x85, 0xD7, 0x53, 0x85, 0xD9, 0x54, 0xE5, 0x54, 0x54, 0x40, 0xC3, 0x13, 0xFF, 0xE5,
59474 +0x53, 0x54, 0x20, 0x6F, 0x70, 0x02, 0x41, 0x46, 0xE5, 0x54, 0x30, 0xE5, 0x02, 0x41, 0x46, 0xE5,
59475 +0x52, 0x54, 0x1F, 0xF5, 0x08, 0xE5, 0x4D, 0x54, 0x3F, 0xF5, 0x09, 0xE5, 0x51, 0x54, 0x1F, 0xFF,
59476 +0xE5, 0x08, 0x25, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0,
59477 +0x12, 0x42, 0x81, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82,
59478 +0xE4, 0x34, 0x85, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5, 0x09, 0xD3, 0x94, 0x04,
59479 +0x40, 0x03, 0x75, 0x09, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x08, 0x90, 0x84, 0x00, 0x12, 0x43, 0x5F,
59480 +0x75, 0xF0, 0x02, 0xE5, 0x09, 0x12, 0x43, 0x5F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xE5, 0x53, 0x54,
59481 +0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x08, 0x90, 0x84, 0x00, 0x12, 0x43,
59482 +0x5F, 0x75, 0xF0, 0x02, 0xE5, 0x09, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x54,
59483 +0x20, 0xE6, 0x24, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82,
59484 +0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5, 0x4F, 0x30, 0xE7, 0x36,
59485 +0xAF, 0x08, 0x12, 0x5C, 0xC3, 0x80, 0x2F, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0,
59486 +0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5,
59487 +0x4F, 0x30, 0xE7, 0x12, 0xE5, 0x4F, 0x54, 0x7F, 0xFD, 0xE5, 0x53, 0x54, 0x1F, 0xF5, 0x0D, 0xAB,
59488 +0x09, 0xAF, 0x08, 0x12, 0x5C, 0x66, 0xE5, 0x24, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x3A, 0x90,
59489 +0x8B, 0x1A, 0xE0, 0x60, 0x2B, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0,
59490 +0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x21, 0x90, 0x8B, 0x3D, 0x12, 0x4B, 0x5C, 0x90, 0x01,
59491 +0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x18, 0xF0, 0x80, 0x09,
59492 +0x12, 0x4B, 0x34, 0xBF, 0x01, 0x03, 0x12, 0x4A, 0xFC, 0xE5, 0x2C, 0x30, 0xE1, 0x21, 0x90, 0x01,
59493 +0x34, 0x74, 0x02, 0xF0, 0x85, 0xD1, 0x56, 0x85, 0xD2, 0x57, 0x85, 0xD3, 0x58, 0x85, 0xD4, 0x59,
59494 +0x85, 0xD5, 0x5A, 0x85, 0xD6, 0x5B, 0x85, 0xD7, 0x5C, 0x85, 0xD9, 0x5D, 0x12, 0x5F, 0xA4, 0xE5,
59495 +0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90,
59496 +0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x55, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF,
59497 +0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8,
59498 +0x00, 0x75, 0xE8, 0x00, 0x12, 0x51, 0x9D, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x52,
59499 +0x0E, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x2D, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0x90, 0x8B,
59500 +0x32, 0xE0, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x05, 0x90, 0x8B, 0x34, 0xE4,
59501 +0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x05,
59502 +0x90, 0x8B, 0x2E, 0xE4, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x61, 0xE6, 0x90, 0x8B, 0x08, 0x74,
59503 +0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x8B, 0x06, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05,
59504 +0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30,
59505 +0xE0, 0x2F, 0x90, 0x8B, 0x37, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xFF, 0x13, 0x13, 0x54,
59506 +0x3F, 0x30, 0xE0, 0x1D, 0x90, 0x8B, 0x34, 0x74, 0x01, 0xF0, 0xB1, 0x39, 0x90, 0x8B, 0x33, 0xE0,
59507 +0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x05, 0x7F, 0x04, 0x12, 0x4E,
59508 +0x89, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x55, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x4E,
59509 +0x90, 0x8B, 0x2E, 0x74, 0x01, 0xF0, 0xB1, 0x39, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x3E,
59510 +0xB1, 0x5F, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0x64, 0x06, 0x60,
59511 +0x2D, 0xEF, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF,
59512 +0x80, 0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D,
59513 +0xE0, 0xB4, 0x02, 0x04, 0x7F, 0x01, 0xB1, 0x82, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x43,
59514 +0xE7, 0x90, 0x8B, 0x08, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE1, 0x2F, 0x90, 0x01, 0x36, 0x74, 0x02,
59515 +0xF0, 0x43, 0x55, 0x40, 0x11, 0x84, 0x90, 0x8B, 0x37, 0xE0, 0xB4, 0x01, 0x09, 0x90, 0x05, 0x22,
59516 +0xE4, 0xF0, 0x90, 0x8B, 0x37, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x0D, 0xE4, 0xFF, 0x12,
59517 +0x4D, 0xE0, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x16, 0x90,
59518 +0x01, 0x36, 0x74, 0x04, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x06, 0xA3, 0xE0, 0x64, 0x06,
59519 +0x60, 0x03, 0x12, 0x46, 0xB3, 0xE5, 0x2E, 0x30, 0xE3, 0x38, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0,
59520 +0xE5, 0x21, 0x64, 0x01, 0x70, 0x2C, 0xE5, 0x24, 0x60, 0x28, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90,
59521 +0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x3D, 0xE4, 0xF0, 0x90, 0x8B, 0x11, 0xE0, 0x90, 0x8B,
59522 +0x3E, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74,
59523 +0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B, 0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x21, 0xB4,
59524 +0x01, 0x20, 0xE5, 0x24, 0x60, 0x1C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02,
59525 +0xF0, 0x90, 0x8B, 0x1B, 0xE4, 0xF0, 0x53, 0x25, 0xFD, 0xE5, 0x25, 0x54, 0x07, 0x70, 0x03, 0x12,
59526 +0x4A, 0xFC, 0xE5, 0x2E, 0x30, 0xE5, 0x1F, 0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x21, 0xB4,
59527 +0x01, 0x14, 0xE5, 0x24, 0x60, 0x10, 0x90, 0x8B, 0x1A, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x4A,
59528 +0x97, 0x80, 0x03, 0x12, 0x49, 0x49, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40,
59529 +0xF0, 0xE5, 0x21, 0xB4, 0x01, 0x10, 0xE5, 0x24, 0x60, 0x0C, 0x53, 0x25, 0xFE, 0xE5, 0x25, 0x54,
59530 +0x07, 0x70, 0x03, 0x12, 0x4A, 0xFC, 0xE5, 0x2F, 0x30, 0xE1, 0x28, 0x90, 0x01, 0x37, 0x74, 0x02,
59531 +0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x18, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x08,
59532 +0x12, 0x48, 0xFE, 0x12, 0x7D, 0xC1, 0x80, 0x0B, 0x90, 0x8B, 0x31, 0x74, 0x01, 0xF0, 0x80, 0x03,
59533 +0x12, 0x48, 0xFE, 0x74, 0xF2, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0xD0, 0x07,
59534 +0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
59535 +0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x05,
59536 +0x58, 0xE0, 0xFF, 0x90, 0x8B, 0x38, 0xE0, 0x2F, 0x24, 0xFE, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB,
59537 +0xFD, 0x7F, 0x50, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x53, 0x74, 0x05, 0xF0, 0x22, 0x90,
59538 +0x8B, 0x2C, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0A, 0xA3, 0xE0, 0x64, 0x06,
59539 +0x60, 0x04, 0x7F, 0x06, 0xB1, 0x82, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x03, 0x12, 0x78,
59540 +0x35, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0x6F, 0x70,
59541 +0x02, 0xE1, 0x4E, 0xEF, 0x12, 0x43, 0x94, 0x65, 0xB0, 0x00, 0x65, 0xEA, 0x01, 0x66, 0x30, 0x02,
59542 +0x66, 0x6A, 0x03, 0x66, 0xA2, 0x04, 0x66, 0xDB, 0x05, 0x67, 0x16, 0x06, 0x00, 0x00, 0x67, 0x4E,
59543 +0xEE, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xF1, 0x81, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0xB4,
59544 +0x05, 0x04, 0xF1, 0x5D, 0xE1, 0x4E, 0xEF, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xF1, 0x72, 0x80, 0x16,
59545 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1, 0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D,
59546 +0xE0, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0xF1, 0xA4, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04,
59547 +0x06, 0x7F, 0x01, 0xF1, 0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D,
59548 +0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xF1, 0x9A, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4,
59549 +0x06, 0x06, 0x7F, 0x01, 0xF1, 0x72, 0xE1, 0x4E, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1, 0x53,
59550 +0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x02, 0x60, 0x02, 0xE1, 0x4E, 0xF1, 0x67, 0xE1, 0x4E,
59551 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xF1, 0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D,
59552 +0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D, 0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xF1, 0x9A, 0x80, 0x16,
59553 +0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xF1, 0x72, 0x80, 0x08, 0xEE, 0xB4,
59554 +0x03, 0x04, 0x7F, 0x01, 0xF1, 0x53, 0xF1, 0xD0, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04,
59555 +0x06, 0x7F, 0x01, 0xF1, 0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D,
59556 +0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xF1, 0x9A, 0x80, 0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4,
59557 +0x06, 0x06, 0xE4, 0xFF, 0xF1, 0x72, 0x80, 0x06, 0xEE, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0xF1, 0xB9,
59558 +0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xF1, 0x72, 0x80, 0x13,
59559 +0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1, 0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02,
59560 +0x02, 0xF1, 0x67, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01, 0x04, 0xF1, 0xA4, 0x80, 0x09, 0x90, 0x8B,
59561 +0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D, 0xF1, 0xAF, 0x80, 0x73, 0x90, 0x8B, 0x2D, 0xE0, 0xFE,
59562 +0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xF1, 0x72, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1,
59563 +0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0x90, 0x8B, 0x2D, 0xE0,
59564 +0xB4, 0x01, 0x04, 0xF1, 0xA4, 0x80, 0x0B, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x04, 0x7F, 0x01,
59565 +0xF1, 0x81, 0xF1, 0xC3, 0x80, 0x38, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xF1,
59566 +0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D, 0x90, 0x8B, 0x2D, 0xE0,
59567 +0x70, 0x04, 0xF1, 0x9A, 0x80, 0x16, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x06, 0xE4, 0xFF, 0xF1,
59568 +0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0xF1, 0xDD, 0xD0, 0xD0,
59569 +0x92, 0xAF, 0x22, 0x12, 0x4A, 0xB2, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x05, 0x22,
59570 +0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0x04,
59571 +0xF0, 0x22, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0,
59572 +0x22, 0x90, 0x8B, 0x56, 0xEF, 0xF0, 0x12, 0x7D, 0x42, 0x90, 0x8B, 0x56, 0xE0, 0x60, 0x05, 0x90,
59573 +0x05, 0x22, 0xE4, 0xF0, 0xE4, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x12, 0x4A, 0xCC, 0x90, 0x8B, 0x2D,
59574 +0x74, 0x01, 0xF0, 0x22, 0x7F, 0x01, 0x12, 0x4A, 0x7C, 0xE4, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x12,
59575 +0x7C, 0x4A, 0x90, 0x8B, 0x2D, 0x74, 0x04, 0xF0, 0x22, 0x12, 0x4A, 0x32, 0x90, 0x8B, 0x2D, 0x74,
59576 +0x03, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x05, 0xF0, 0x22,
59577 +0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22,
59578 +0x74, 0x6F, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x06, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
59579 +0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30, 0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10,
59580 +0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29,
59581 +0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90, 0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3,
59582 +0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B, 0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31,
59583 +0x10, 0xE4, 0xF5, 0x32, 0x90, 0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5,
59584 +0x32, 0xF0, 0x22, 0x22, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xE0, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00,
59585 +0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x09,
59586 +0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33, 0x22,
59587 +0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74,
59588 +0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0xA0, 0xF0,
59589 +0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x06,
59590 +0xC0, 0x07, 0x7D, 0x91, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x68, 0xFF, 0xA3, 0xF0, 0x53, 0x91,
59591 +0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00, 0x52,
59592 +0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90, 0x00,
59593 +0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0, 0xE5,
59594 +0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06, 0x90,
59595 +0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01, 0xF0,
59596 +0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2, 0x06,
59597 +0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74, 0x08,
59598 +0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
59599 +0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30,
59600 +0xE0, 0x17, 0xED, 0xC4, 0x54, 0xF0, 0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4,
59601 +0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5,
59602 +0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4,
59603 +0x34, 0x04, 0xF5, 0x83, 0xE0, 0x4D, 0xF0, 0x22, 0xAD, 0x07, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4,
59604 +0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x8A, 0xDE, 0xF0, 0xE0, 0xF9, 0x54, 0x1F, 0xA3,
59605 +0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0xFF, 0x90, 0x8A, 0xE1,
59606 +0xF0, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFB, 0xA3,
59607 +0xE0, 0x90, 0x8A, 0xE2, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82,
59608 +0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE4, 0xCB, 0xF0, 0xA3, 0xEB,
59609 +0xF0, 0x90, 0x8A, 0xDF, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5,
59610 +0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4,
59611 +0x34, 0x86, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE, 0xC3, 0x9F, 0x40, 0x02, 0x41, 0xB9,
59612 +0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF,
59613 +0xF0, 0xEF, 0x04, 0x90, 0x8A, 0xE0, 0xF0, 0x90, 0x8A, 0xE1, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0,
59614 +0xFE, 0xD3, 0x9F, 0x40, 0x02, 0x41, 0xF3, 0xEE, 0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0,
59615 +0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
59616 +0xF9, 0xFF, 0x90, 0x8A, 0xE2, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x8A,
59617 +0xE0, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
59618 +0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE4, 0xE0, 0x5E, 0xFE, 0xA3,
59619 +0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x8A, 0xE0, 0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x8A, 0xE3, 0xE0,
59620 +0x30, 0xE7, 0x06, 0x90, 0x8A, 0xE0, 0x74, 0x17, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xFF, 0x64, 0x13,
59621 +0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x8A, 0xE2, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x8A, 0xE0,
59622 +0x74, 0x18, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0x80,
59623 +0x42, 0x90, 0x8A, 0xE0, 0xE0, 0x04, 0xF0, 0x41, 0x17, 0x90, 0x8A, 0xE1, 0xE0, 0xFC, 0x90, 0x8A,
59624 +0xDF, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83,
59625 +0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x29, 0x12, 0x43, 0x5F, 0xE0, 0xB4, 0x01, 0x10,
59626 +0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x8A, 0xDF, 0xE0, 0x44, 0x40, 0x90, 0x8A, 0xDE, 0xF0, 0x80, 0x03,
59627 +0xAF, 0x01, 0x22, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
59628 +0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
59629 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
59630 +0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
59631 +0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90, 0x8A, 0xDF, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90,
59632 +0x8A, 0xE1, 0xE0, 0xFF, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0,
59633 +0x90, 0x8A, 0xDF, 0xEF, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24,
59634 +0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF,
59635 +0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF,
59636 +0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82,
59637 +0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D,
59638 +0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x05, 0x90, 0x8A, 0xDE, 0xE0, 0x44,
59639 +0x80, 0xFD, 0x12, 0x5C, 0x4E, 0x90, 0x8A, 0xDE, 0xE0, 0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x8A,
59640 +0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x40, 0x03, 0x02, 0x72, 0x54, 0x75,
59641 +0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2A, 0x12, 0x43, 0x5F, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x72,
59642 +0x4B, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83,
59643 +0xE0, 0xFC, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEC, 0x94, 0x00, 0x50, 0x03, 0x02, 0x72, 0x4B, 0xEF,
59644 +0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75, 0x12, 0x01, 0xF5, 0x13,
59645 +0x89, 0x14, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5,
59646 +0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x8A, 0xD4, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0,
59647 +0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x8A, 0xD6,
59648 +0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34,
59649 +0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x8A, 0xD0, 0xF0, 0xE0, 0xFD, 0x54, 0x1F, 0xA3, 0xF0,
59650 +0x75, 0xF0, 0x09, 0xEE, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD9, 0xF0, 0x90,
59651 +0x8A, 0xCF, 0xE0, 0xFB, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xC3, 0x94,
59652 +0x05, 0x40, 0x02, 0xC1, 0x9C, 0x90, 0x8A, 0xD9, 0xE0, 0xFE, 0x90, 0x8A, 0xD1, 0xE0, 0x9E, 0x40,
59653 +0x13, 0x90, 0x8A, 0xD9, 0xE0, 0x90, 0x8A, 0xD1, 0xF0, 0xED, 0x54, 0x40, 0xFD, 0x90, 0x8A, 0xD0,
59654 +0xF0, 0xEE, 0x4D, 0xF0, 0x90, 0x8A, 0xD1, 0xE0, 0xFF, 0x90, 0x41, 0x12, 0x93, 0xFE, 0x74, 0x23,
59655 +0x2B, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40, 0x06, 0xEF, 0x90, 0x40,
59656 +0xDA, 0x80, 0x07, 0x90, 0x8A, 0xD1, 0xE0, 0x90, 0x40, 0xF6, 0x93, 0x90, 0x8A, 0xD8, 0xF0, 0x90,
59657 +0x8A, 0xD8, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x50, 0xF9, 0x74, 0x40, 0x35, 0xF0, 0x75, 0x0F,
59658 +0xFF, 0xF5, 0x10, 0x89, 0x11, 0x90, 0x8A, 0xD0, 0xE0, 0x90, 0x41, 0xBA, 0x93, 0xFF, 0xD3, 0x90,
59659 +0x8A, 0xD7, 0xE0, 0x9F, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x8A, 0xCF, 0xE0,
59660 +0xFF, 0xE4, 0xFD, 0x12, 0x5D, 0x41, 0x02, 0x71, 0xE1, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24,
59661 +0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x8A, 0xD2, 0xCF,
59662 +0xF0, 0xA3, 0xEF, 0xF0, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x12, 0x29, 0xD9, 0xFF, 0x7E, 0x00,
59663 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x97, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90,
59664 +0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00,
59665 +0x01, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x02,
59666 +0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12,
59667 +0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x7E,
59668 +0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0,
59669 +0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10,
59670 +0xA9, 0x11, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9,
59671 +0x14, 0x90, 0x00, 0x06, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2,
59672 +0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x04, 0x12,
59673 +0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x08, 0x12, 0x42,
59674 +0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81,
59675 +0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x05, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0x90,
59676 +0x8A, 0xD4, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x29, 0xF2, 0xD3, 0x90, 0x8A, 0xD3, 0xE0, 0x9F,
59677 +0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x8A, 0xD2, 0xE0, 0x9E,
59678 +0xF0, 0x80, 0x07, 0xE4, 0x90, 0x8A, 0xD2, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xD2, 0xE0, 0xFC, 0xA3,
59679 +0xE0, 0xFD, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86,
59680 +0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x8A, 0xD0, 0xE0, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
59681 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xD3, 0xED, 0x9B,
59682 +0xEC, 0x9A, 0x40, 0x05, 0x31, 0x78, 0x02, 0x71, 0xAF, 0x90, 0x8A, 0xD0, 0xE0, 0x25, 0xE0, 0x24,
59683 +0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3,
59684 +0x90, 0x8A, 0xD3, 0xE0, 0x9F, 0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x40, 0x03, 0x02, 0x71, 0xAF, 0x90,
59685 +0x8A, 0xCF, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5D, 0x41, 0x02, 0x71, 0xAF, 0x90, 0x8A, 0xCF, 0xE0,
59686 +0xFF, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x03,
59687 +0x02, 0x70, 0x7D, 0x90, 0x87, 0x22, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3,
59688 +0x94, 0x19, 0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3, 0x94,
59689 +0x11, 0x40, 0x2E, 0x80, 0x1F, 0x90, 0x87, 0x22, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x8A, 0xD1,
59690 +0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x8A, 0xD1, 0xE0, 0xC3,
59691 +0x94, 0x03, 0x40, 0x0D, 0x90, 0x89, 0x43, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x89, 0x43,
59692 +0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0,
59693 +0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x23, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE,
59694 +0xC3, 0x94, 0x30, 0x50, 0x0B, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x64, 0x2F, 0x02, 0x70, 0x28,
59695 +0x90, 0x89, 0x43, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x70, 0x1D, 0x90, 0x8A, 0xCF, 0xE0, 0x24,
59696 +0x44, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x8A, 0xCF,
59697 +0xE0, 0xFF, 0xEE, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
59698 +0x86, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38,
59699 +0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x23, 0x2E, 0xF5,
59700 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
59701 +0x50, 0x16, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0,
59702 +0xFF, 0x90, 0x8A, 0xD1, 0xE0, 0x6F, 0x60, 0x56, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x23, 0xF5, 0x82,
59703 +0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x8A, 0xDD, 0x74,
59704 +0x05, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0x39, 0x90, 0x8A, 0xDD, 0x40, 0x05, 0x74, 0x03, 0xF0,
59705 +0x80, 0x03, 0x74, 0x01, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x23, 0xF5, 0x82, 0xE4, 0x34,
59706 +0x89, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE,
59707 +0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x44, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0x80, 0x2F, 0x90, 0x8A,
59708 +0xCF, 0xE0, 0xFF, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x44,
59709 +0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x8A,
59710 +0xDD, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4,
59711 +0xF0, 0x90, 0x8A, 0xD1, 0xE0, 0xFE, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x84, 0xF5, 0x82, 0xE4,
59712 +0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFE, 0x74, 0x43, 0x2F, 0xF5, 0x82,
59713 +0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2B, 0x12, 0x43,
59714 +0x5F, 0xE0, 0xB4, 0x01, 0x11, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x64, 0x2F, 0xF5, 0x82, 0xE4,
59715 +0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFD, 0x21, 0xAC, 0xEC, 0x64, 0x06,
59716 +0x60, 0x02, 0x21, 0xAF, 0x90, 0x8A, 0xD2, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xDB, 0x93, 0xFF, 0x7E,
59717 +0x00, 0x90, 0x8A, 0xD4, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xDB, 0xEE,
59718 +0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
59719 +0x83, 0xE0, 0x90, 0x8A, 0xDD, 0xF0, 0xE4, 0x90, 0x8A, 0xDA, 0xF0, 0x90, 0x8A, 0xDA, 0xE0, 0xFF,
59720 +0xD3, 0x94, 0x04, 0x50, 0x47, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x75, 0xF0, 0x02, 0xEF, 0xA4,
59721 +0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xD6, 0x93,
59722 +0xFF, 0x7E, 0x00, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0x90,
59723 +0x8A, 0xDB, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x8A, 0xD3, 0xE0, 0x9F, 0x90, 0x8A, 0xD2,
59724 +0xE0, 0x9E, 0x50, 0x08, 0x90, 0x8A, 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x8A, 0xDA, 0xE0,
59725 +0xC3, 0x13, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x8A, 0xDA, 0xE0, 0x70,
59726 +0x5D, 0x90, 0x8A, 0xDD, 0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x8A, 0xDA, 0xE0,
59727 +0xFF, 0x70, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90,
59728 +0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90, 0x8A, 0xDD, 0xE0, 0x64, 0x05, 0x70,
59729 +0x32, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x05, 0xF0, 0x80, 0x0F,
59730 +0xEF, 0x90, 0x8A, 0xDD, 0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3,
59731 +0x90, 0x8A, 0xD7, 0xE0, 0x94, 0x03, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90,
59732 +0x8A, 0xDD, 0xF0, 0xD3, 0x90, 0x8A, 0xD7, 0xE0, 0x94, 0x03, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00,
59733 +0x40, 0x05, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFD, 0x90, 0x8A, 0xCF, 0xE0,
59734 +0xFF, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xED, 0xF0, 0x12, 0x69, 0x38, 0x90,
59735 +0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xD3, 0x94,
59736 +0x05, 0x50, 0x0F, 0x74, 0x64, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0x04, 0xF0,
59737 +0x80, 0x0F, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4,
59738 +0xF0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0xE4, 0xF5, 0xF0, 0x12, 0x42, 0xFA, 0xAB, 0x12, 0xAA,
59739 +0x13, 0xA9, 0x14, 0x90, 0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00, 0x04, 0xE4,
59740 +0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00,
59741 +0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0xC0,
59742 +0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x63,
59743 +0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA3,
59744 +0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04,
59745 +0xF0, 0x02, 0x6B, 0xC2, 0x22, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0xC3,
59746 +0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE4, 0xF0,
59747 +0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF,
59748 +0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x40, 0x02, 0x81, 0x0E, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00,
59749 +0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43,
59750 +0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x5F, 0xE4,
59751 +0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3,
59752 +0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x74,
59753 +0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x44, 0x2F, 0xF5,
59754 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x43, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88,
59755 +0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83,
59756 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
59757 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
59758 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
59759 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
59760 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
59761 +0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x44, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0,
59762 +0x74, 0x24, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x64, 0x2F, 0xF5,
59763 +0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x41, 0x8C, 0x93, 0xFE, 0x74, 0x01, 0x93,
59764 +0xFF, 0x90, 0x41, 0x54, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF,
59765 +0x13, 0xFF, 0x90, 0x8A, 0xCF, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86,
59766 +0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x29, 0x12, 0x43,
59767 +0x5F, 0x74, 0x01, 0xF0, 0x74, 0xC1, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0x74, 0x0C,
59768 +0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0x74, 0xFF, 0xF0, 0xA3, 0xF0,
59769 +0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x23, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0,
59770 +0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09,
59771 +0xED, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
59772 +0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x41, 0x7D, 0x22, 0x12,
59773 +0x29, 0xD9, 0xFF, 0xC3, 0x94, 0x20, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFE, 0x74,
59774 +0x23, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4, 0x20, 0x0A,
59775 +0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0x90, 0x87, 0x21, 0xF0, 0x22, 0x90, 0x8B, 0x4B, 0xEE, 0xF0,
59776 +0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x8B, 0x4B, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5,
59777 +0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3, 0x90, 0x8B, 0x4E, 0xE0, 0x94, 0xE8, 0x90, 0x8B, 0x4D,
59778 +0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90,
59779 +0x8B, 0x4D, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x37, 0x54,
59780 +0x80, 0xC6, 0x7F, 0x01, 0x22, 0x12, 0x29, 0xD9, 0xF5, 0x21, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
59781 +0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x2A, 0x8B, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x01, 0x12,
59782 +0x42, 0x20, 0x90, 0x8B, 0x1A, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x0A, 0xF0,
59783 +0x12, 0x47, 0xFA, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x30,
59784 +0xE0, 0x25, 0x12, 0x29, 0xD9, 0x90, 0x8B, 0x10, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x90,
59785 +0x8B, 0x11, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x8B, 0x0F, 0xF0, 0x90, 0x00, 0x03, 0x12,
59786 +0x42, 0x20, 0x90, 0x8B, 0x16, 0xF0, 0x22, 0x90, 0x8B, 0x10, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x11,
59787 +0x74, 0x05, 0xF0, 0x90, 0x8B, 0x0F, 0x74, 0x14, 0xF0, 0x90, 0x8B, 0x16, 0x74, 0x05, 0xF0, 0x22,
59788 +0x12, 0x29, 0xD9, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x8B, 0x15, 0xF0, 0x90, 0x00,
59789 +0x01, 0x12, 0x42, 0x20, 0xFF, 0x90, 0x8B, 0x13, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90,
59790 +0x8B, 0x15, 0x74, 0x05, 0xF0, 0x90, 0x8B, 0x13, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x8B,
59791 +0x13, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x29, 0xD9, 0x90, 0x8B, 0x12, 0xF0,
59792 +0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x90, 0x8B, 0x12, 0xE0, 0x90, 0x01, 0xE7,
59793 +0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x29, 0xD9, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90,
59794 +0x8A, 0xF7, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xF8, 0xF0,
59795 +0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xF9, 0xF0, 0x90, 0x00, 0x03,
59796 +0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xFA, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x42, 0x20,
59797 +0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x8A, 0xFB, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
59798 +0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x8B, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x12, 0x29, 0xD9, 0xC3,
59799 +0x13, 0x20, 0xE0, 0x02, 0xC1, 0xED, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xFF,
59800 +0x54, 0x02, 0xFE, 0x90, 0x8B, 0x32, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF,
59801 +0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x29, 0xD9, 0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7,
59802 +0x4D, 0xFF, 0x90, 0x8B, 0x32, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0,
59803 +0x12, 0x29, 0xD9, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, 0x90, 0x8B, 0x32, 0xF0,
59804 +0xEE, 0x54, 0x40, 0xFE, 0xEF, 0x54, 0xBF, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xC1, 0xD9, 0x90, 0x8A,
59805 +0xDD, 0x74, 0x21, 0xF0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xFF, 0x13, 0x13,
59806 +0x54, 0x01, 0xFE, 0x90, 0x8B, 0x32, 0xE0, 0xFD, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x60, 0x2A, 0xEF,
59807 +0x54, 0x04, 0xFF, 0xED, 0x54, 0xFB, 0x4F, 0xF0, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0E,
59808 +0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x36, 0xE6, 0x80, 0x0B, 0xE4, 0x90,
59809 +0x8B, 0x34, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x36, 0x75, 0x90, 0x8B, 0x32, 0xE0, 0xFD, 0x13, 0x13,
59810 +0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x12, 0xF0, 0xED, 0xC4, 0x54,
59811 +0x0F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x14, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xC4,
59812 +0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x8B, 0x32,
59813 +0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x40, 0xF0,
59814 +0x90, 0x8A, 0xDD, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x70, 0x05, 0x7F, 0x01,
59815 +0x12, 0x4E, 0x89, 0x90, 0x8B, 0x32, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x04, 0x7F,
59816 +0x03, 0x80, 0x0E, 0x7F, 0x01, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F,
59817 +0x02, 0x12, 0x4E, 0x89, 0x7F, 0x02, 0x02, 0x78, 0x2E, 0x90, 0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x90,
59818 +0x05, 0x27, 0xF0, 0xE4, 0xFF, 0x12, 0x4E, 0x89, 0x7F, 0x03, 0x02, 0x78, 0x2E, 0x90, 0x8A, 0xDA,
59819 +0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xFF, 0x54, 0x02, 0xFE, 0x90, 0x8B, 0x2C, 0xE0, 0x54, 0xFD,
59820 +0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF, 0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x29, 0xD9,
59821 +0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x8B, 0x2C, 0xF0, 0xEE, 0x54, 0x10,
59822 +0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x29, 0xD9, 0xFE, 0x54, 0x40, 0xFD, 0xEF, 0x54,
59823 +0xBF, 0x4D, 0xFF, 0x90, 0x8B, 0x2C, 0xF0, 0xEE, 0x54, 0x04, 0xFE, 0xEF, 0x54, 0xFB, 0x4E, 0xF0,
59824 +0x20, 0xE0, 0x02, 0xE1, 0xE2, 0x90, 0x8A, 0xDD, 0x74, 0x31, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x13,
59825 +0x13, 0x54, 0x3F, 0x20, 0xE0, 0x0B, 0xE4, 0x90, 0x8B, 0x2E, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x36,
59826 +0x75, 0x90, 0x8B, 0x2C, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x8A,
59827 +0xDD, 0xE0, 0x44, 0x02, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0,
59828 +0x44, 0x04, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0x54, 0x06, 0x60, 0x0C, 0x90, 0x01, 0x3E, 0x74, 0x03,
59829 +0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x37, 0x00, 0x90, 0x8A, 0xDD, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90,
59830 +0x8B, 0x2C, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x64, 0x06,
59831 +0x60, 0x2C, 0x7F, 0x06, 0x12, 0x65, 0x82, 0x80, 0x25, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x06, 0x1B,
59832 +0x7F, 0x01, 0x12, 0x65, 0x82, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x09, 0x7D, 0x01, 0xAF,
59833 +0x23, 0x12, 0x45, 0xA2, 0x80, 0x05, 0x12, 0x4E, 0x56, 0x80, 0x03, 0x12, 0x7D, 0xC1, 0x7F, 0x01,
59834 +0x80, 0x4C, 0x90, 0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27, 0xF0, 0x7D, 0x03, 0x7F, 0x02,
59835 +0x12, 0x36, 0x92, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x06, 0x02, 0x80, 0x1B, 0x90, 0x8B, 0x2D, 0xE0,
59836 +0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF, 0x80, 0x14,
59837 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4,
59838 +0x02, 0x05, 0x7F, 0x01, 0x12, 0x65, 0x82, 0x11, 0x35, 0x12, 0x4A, 0xFC, 0x7F, 0x03, 0x11, 0x42,
59839 +0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x8B, 0x31, 0xE0, 0xB4, 0x01, 0x05, 0xE4, 0xF0, 0x12, 0x48,
59840 +0xFE, 0x22, 0xAD, 0x07, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x15, 0x90, 0x8B, 0x32,
59841 +0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
59842 +0xA3, 0xF0, 0xED, 0x64, 0x02, 0x60, 0x04, 0xED, 0xB4, 0x03, 0x15, 0x90, 0x8B, 0x2C, 0xE0, 0x54,
59843 +0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
59844 +0x22, 0x12, 0x29, 0xD9, 0x90, 0x8B, 0x38, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
59845 +0x90, 0x8A, 0xFD, 0xE0, 0x90, 0x8A, 0xE8, 0xF0, 0x90, 0x8A, 0xFE, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
59846 +0x8A, 0xE9, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x90, 0x8A, 0xE4, 0xF0, 0x90, 0x8A, 0xE4, 0xE0,
59847 +0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8B, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0xEB, 0x2F, 0xF5,
59848 +0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0x04, 0xF0, 0xE0, 0xB4,
59849 +0x04, 0xDA, 0x90, 0x8A, 0xE8, 0xE0, 0x12, 0x43, 0x94, 0x78, 0xF8, 0x00, 0x7A, 0x6B, 0x01, 0x79,
59850 +0x01, 0x02, 0x79, 0x01, 0x03, 0x79, 0x01, 0x04, 0x7A, 0x6B, 0x05, 0x7A, 0x35, 0x80, 0x7A, 0x4E,
59851 +0x81, 0x7A, 0x6B, 0x82, 0x00, 0x00, 0x7A, 0x67, 0x90, 0x8A, 0xEE, 0xE0, 0xFF, 0x51, 0x72, 0x41,
59852 +0x6B, 0x90, 0x8A, 0xE8, 0xE0, 0xFF, 0xB4, 0x02, 0x08, 0x90, 0x8A, 0xE5, 0x74, 0x01, 0xF0, 0x80,
59853 +0x0F, 0xEF, 0x90, 0x8A, 0xE5, 0xB4, 0x03, 0x05, 0x74, 0x02, 0xF0, 0x80, 0x03, 0x74, 0x04, 0xF0,
59854 +0xC3, 0x90, 0x8A, 0xE9, 0xE0, 0x94, 0x08, 0x50, 0x78, 0xE4, 0x90, 0x8A, 0xE4, 0xF0, 0x90, 0x8A,
59855 +0xE5, 0xE0, 0xFF, 0x90, 0x8A, 0xE4, 0xE0, 0xC3, 0x9F, 0x40, 0x02, 0x41, 0x6B, 0x90, 0x8A, 0xE9,
59856 +0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0xEE, 0x94, 0x01, 0x90, 0x8A, 0xE4, 0xE0, 0x50, 0x1F, 0xFE,
59857 +0x2F, 0xFF, 0xEE, 0xFD, 0xC3, 0x74, 0x03, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0xEB, 0x2D,
59858 +0xF5, 0x82, 0x74, 0x8A, 0x3C, 0xF5, 0x83, 0xE0, 0xFD, 0x12, 0x51, 0x88, 0x80, 0x2B, 0xFF, 0xFD,
59859 +0xC3, 0x74, 0x03, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0xEB, 0x2D, 0xF5, 0x82, 0x74, 0x8A,
59860 +0x3C, 0xF5, 0x83, 0xE0, 0xFE, 0xEF, 0xFD, 0x90, 0x8A, 0xEA, 0xE0, 0x2D, 0xFD, 0x90, 0x8A, 0xE9,
59861 +0xE0, 0x34, 0x00, 0x8D, 0x82, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0x04, 0xF0, 0x80,
59862 +0x8D, 0xC3, 0x90, 0x8A, 0xE9, 0xE0, 0x94, 0x10, 0x40, 0x02, 0x41, 0x6B, 0x90, 0x8A, 0xE8, 0xE0,
59863 +0x64, 0x04, 0x60, 0x02, 0x41, 0x6B, 0x90, 0x8A, 0xEC, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78,
59864 +0x10, 0x12, 0x2A, 0x6C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x8A, 0xEB, 0xE0,
59865 +0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, 0x12, 0x2A, 0x6C, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01,
59866 +0xD0, 0x00, 0x12, 0x43, 0x46, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x8A, 0xED,
59867 +0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x08, 0x12, 0x2A, 0x6C, 0xD0, 0x03, 0xD0, 0x02, 0xD0,
59868 +0x01, 0xD0, 0x00, 0x12, 0x43, 0x46, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0xA3, 0xE0,
59869 +0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x12, 0x43, 0x46, 0xA3, 0x12, 0x2A, 0x7F, 0x90, 0x8A, 0xEF, 0x12,
59870 +0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x90, 0x8A, 0xE9, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
59871 +0x12, 0x2F, 0xD9, 0x80, 0x36, 0x90, 0x8A, 0xED, 0xE0, 0xFE, 0xA3, 0xE0, 0x24, 0x00, 0xFF, 0xE4,
59872 +0x3E, 0xFE, 0x90, 0x8A, 0xE6, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x37, 0x54, 0x80, 0x1D, 0x90, 0x8A,
59873 +0xED, 0xE0, 0xFE, 0xA3, 0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x8A, 0xE6, 0xF0, 0xA3,
59874 +0xEF, 0xF0, 0x12, 0x36, 0xCB, 0x80, 0x04, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92,
59875 +0xAF, 0x22, 0x8F, 0x0F, 0xE4, 0x90, 0x8A, 0xF3, 0xF0, 0xE5, 0x0F, 0x14, 0xFE, 0x90, 0x8A, 0xF3,
59876 +0xE0, 0xFF, 0xC3, 0x9E, 0x50, 0x0E, 0xEF, 0x04, 0xFD, 0x12, 0x34, 0xB7, 0x90, 0x8A, 0xF3, 0xE0,
59877 +0x04, 0xF0, 0x80, 0xE5, 0xE5, 0x0F, 0x14, 0xFF, 0x7D, 0xFF, 0x12, 0x34, 0xB7, 0x90, 0x8A, 0xF3,
59878 +0xE5, 0x0F, 0xF0, 0x90, 0x8A, 0xF3, 0xE0, 0xC3, 0x94, 0xFF, 0x50, 0x0F, 0xE0, 0xFF, 0x04, 0xFD,
59879 +0x12, 0x34, 0xB7, 0x90, 0x8A, 0xF3, 0xE0, 0x04, 0xF0, 0x80, 0xE8, 0xAD, 0x0F, 0x7F, 0xFF, 0x02,
59880 +0x34, 0xB7, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0xA3, 0x74,
59881 +0x04, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x8A, 0xE2, 0xF0, 0xA3, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0x90,
59882 +0x8A, 0xE1, 0xF0, 0x12, 0x29, 0xD9, 0xFF, 0x90, 0x8A, 0xE1, 0xE0, 0x2F, 0x90, 0x8A, 0xE0, 0xF0,
59883 +0x30, 0xE0, 0x0B, 0x90, 0x8A, 0xDB, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x80, 0x07, 0xE4, 0x90,
59884 +0x8A, 0xDB, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90,
59885 +0x8A, 0xDD, 0xE0, 0x24, 0x20, 0xF0, 0x90, 0x8A, 0xDB, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFC, 0x2D,
59886 +0xFF, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xFD, 0xF0, 0x74,
59887 +0x02, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0xEC, 0x2D, 0x24, 0x03, 0xF5,
59888 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0x90, 0x8A, 0xFE, 0xF0,
59889 +0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xDA, 0x74, 0x04, 0xF0, 0x90, 0x8A, 0xDB, 0xA3, 0xE0, 0xFF, 0xA3,
59890 +0xE0, 0x2F, 0xFF, 0x90, 0x8A, 0xDA, 0xE0, 0xFE, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
59891 +0xF5, 0x83, 0xE0, 0xFF, 0x74, 0xFC, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0,
59892 +0x90, 0x8A, 0xDA, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x08, 0xCF, 0x11, 0x89, 0xEF, 0x70, 0x45, 0x90,
59893 +0x01, 0xC3, 0xE0, 0x60, 0x2B, 0xC3, 0x90, 0x8A, 0xE3, 0xE0, 0x94, 0xE8, 0x90, 0x8A, 0xE2, 0xE0,
59894 +0x94, 0x03, 0x40, 0x09, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x79, 0x90, 0x8A, 0xE2,
59895 +0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x37, 0x54, 0x80, 0xCF,
59896 +0x90, 0x01, 0xC6, 0xE0, 0x90, 0x01, 0xC3, 0x30, 0xE2, 0x05, 0x74, 0xFE, 0xF0, 0x80, 0x57, 0x74,
59897 +0xFF, 0xF0, 0x80, 0x52, 0x90, 0x8A, 0xDD, 0xE0, 0xB4, 0x78, 0x2E, 0xE4, 0xF0, 0x90, 0x8A, 0xE0,
59898 +0xE0, 0x04, 0xF0, 0x90, 0x8A, 0xDB, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x64, 0x80, 0x90, 0x8A, 0xDB,
59899 +0x70, 0x05, 0xF0, 0xA3, 0xF0, 0x80, 0x06, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0x8A, 0xE0,
59900 +0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x80, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x24, 0x08, 0xF0,
59901 +0x90, 0x8A, 0xDE, 0x74, 0xFF, 0xF5, 0xF0, 0x12, 0x42, 0x81, 0x90, 0x8A, 0xDE, 0xE0, 0x70, 0x02,
59902 +0xA3, 0xE0, 0x60, 0x02, 0x61, 0x16, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x29, 0xD9, 0x90, 0x8B,
59903 +0x05, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x06, 0xF0, 0x22, 0xE4, 0xF5, 0x61,
59904 +0x22, 0x91, 0x4A, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0,
59905 +0x7F, 0x78, 0x7E, 0x08, 0x12, 0x27, 0xDE, 0x90, 0x8B, 0x1C, 0x12, 0x2A, 0x7F, 0x7F, 0x04, 0x7E,
59906 +0x0C, 0x12, 0x27, 0xDE, 0x90, 0x8B, 0x20, 0x12, 0x2A, 0x7F, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x27,
59907 +0xDE, 0x90, 0x8B, 0x24, 0x12, 0x2A, 0x7F, 0x90, 0x8B, 0x09, 0xE0, 0x90, 0x8B, 0x1C, 0xB4, 0x01,
59908 +0x0D, 0x12, 0x43, 0x53, 0xEF, 0x54, 0xC7, 0xFF, 0xED, 0x54, 0xC7, 0xFD, 0x80, 0x07, 0x12, 0x43,
59909 +0x53, 0xEF, 0x54, 0xC7, 0xFF, 0xEC, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x78, 0x7E, 0x08,
59910 +0x12, 0x2F, 0xD9, 0x90, 0x8B, 0x20, 0x12, 0x43, 0x53, 0xEF, 0x54, 0x0F, 0xFF, 0xEC, 0x90, 0x80,
59911 +0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x04, 0x7E, 0x0C, 0x12, 0x2F, 0xD9, 0x90, 0x8B, 0x24, 0x12, 0x43,
59912 +0x53, 0xEF, 0x44, 0x02, 0xFF, 0xEC, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x00, 0x7E, 0x08,
59913 +0x12, 0x2F, 0xD9, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x27, 0xDE, 0x90, 0x8B, 0x28, 0x12, 0x2A, 0x7F,
59914 +0x90, 0x80, 0x85, 0x12, 0x2A, 0x8B, 0x00, 0x1B, 0x25, 0xA0, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2F,
59915 +0xD9, 0x90, 0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFD, 0xFF, 0x12, 0x34,
59916 +0x81, 0x90, 0x8B, 0x09, 0xE0, 0xB4, 0x01, 0x11, 0x90, 0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00, 0x00,
59917 +0x00, 0x00, 0xE4, 0xFD, 0x7F, 0x01, 0x12, 0x34, 0x81, 0x90, 0x00, 0x11, 0xE0, 0x54, 0xF6, 0xF0,
59918 +0x02, 0x52, 0x0E, 0x91, 0x50, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74,
59919 +0xFF, 0xF0, 0x90, 0x8B, 0x33, 0x74, 0x04, 0xF0, 0x22, 0xB1, 0x42, 0x90, 0x8B, 0x33, 0x74, 0x04,
59920 +0xF0, 0x22, 0x90, 0x00, 0x11, 0xE0, 0x44, 0x09, 0xF0, 0x12, 0x52, 0x0E, 0x90, 0x8B, 0x1C, 0x12,
59921 +0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x78, 0x7E, 0x08, 0x12, 0x2F, 0xD9, 0x90,
59922 +0x8B, 0x20, 0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x04, 0x7E, 0x0C, 0x12,
59923 +0x2F, 0xD9, 0x90, 0x8B, 0x24, 0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x00,
59924 +0x7E, 0x08, 0x12, 0x2F, 0xD9, 0x90, 0x8B, 0x28, 0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A,
59925 +0x7F, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2F, 0xD9, 0x90, 0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00, 0x03,
59926 +0x2D, 0x95, 0xE4, 0xFD, 0xFF, 0x12, 0x34, 0x81, 0x90, 0x8B, 0x09, 0xE0, 0xB4, 0x01, 0x11, 0x90,
59927 +0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00, 0x03, 0x2D, 0x95, 0xE4, 0xFD, 0x7F, 0x01, 0x12, 0x34, 0x81,
59928 +0x22, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x3C, 0xE5, 0x22, 0x54, 0x0F, 0x14, 0x60, 0x2E,
59929 +0x14, 0x60, 0x1E, 0x24, 0xFE, 0x60, 0x0E, 0x24, 0xF8, 0x70, 0x2A, 0xE4, 0x90, 0x8B, 0x2D, 0xF0,
59930 +0x90, 0x05, 0x22, 0xF0, 0x22, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x22, 0xE4, 0xF0,
59931 +0x22, 0x90, 0x8B, 0x2D, 0x74, 0x03, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0x90, 0x01,
59932 +0xC6, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0xAE, 0x07, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x18,
59933 +0x90, 0x8B, 0x2C, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x0C, 0xAF, 0x06, 0x7D, 0x01,
59934 +0x12, 0x45, 0xA2, 0xB1, 0xC1, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x01, 0x57, 0xE0, 0x60,
59935 +0x3C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x1B, 0xE0,
59936 +0x60, 0x07, 0xE4, 0xF0, 0x53, 0x25, 0xFD, 0x80, 0x24, 0x90, 0x8B, 0x0C, 0xE0, 0x04, 0xF0, 0x53,
59937 +0x25, 0xEF, 0x90, 0x8B, 0x10, 0xE0, 0xFF, 0x90, 0x8B, 0x0C, 0xE0, 0xD3, 0x9F, 0x40, 0x0E, 0xE5,
59938 +0x21, 0xB4, 0x01, 0x09, 0x90, 0x8B, 0x0D, 0xE0, 0x70, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x5B,
59939 +0xE0, 0x60, 0x10, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE4, 0x90,
59940 +0x8B, 0x18, 0xF0, 0x90, 0x01, 0x5F, 0xE0, 0x60, 0x10, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01,
59941 +0x3C, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x8B, 0x17, 0xF0, 0x22, 0xE4, 0x90, 0x8B, 0x4F, 0xF0, 0xA3,
59942 +0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3,
59943 +0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x8B, 0x50, 0xE0, 0x94, 0xE8, 0x90, 0x8B, 0x4F,
59944 +0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x37, 0x54, 0x90,
59945 +0x8B, 0x4F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x80, 0xC6, 0x00, 0x92, 0x00};
59946
59947 -#endif
59948 +// =================== v88 UMC A Cut P2PPS with CCX report C2H 2012-12-05 =====================
59949 +u8 Rtl8192CUFwUMCACutImgArray[UMCACutImgArrayLength] = {
59950 +0xC1, 0x88, 0x02, 0x05, 0x58, 0x00, 0x02, 0x00, 0x12, 0x05, 0x17, 0x11, 0xDE, 0x3E, 0x01, 0x00,
59951 +0x94, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59952 +0x02, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59953 +0x00, 0x00, 0x00, 0x02, 0x60, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59954 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59955 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59956 +0x00, 0x00, 0x00, 0x02, 0x68, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x4B, 0x87, 0x00, 0x00,
59957 +0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03, 0x00, 0x04, 0x06, 0x05, 0x04, 0x02,
59958 +0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09, 0x08, 0x06, 0x00, 0x08, 0x0A, 0x09,
59959 +0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x00, 0x00, 0x08,
59960 +0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10, 0x00, 0x18, 0x22, 0x21, 0x20, 0x18,
59961 +0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21, 0x20, 0x08, 0x00, 0x20, 0x22, 0x21,
59962 +0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20, 0x22, 0x20, 0x18, 0x08, 0x00, 0x20,
59963 +0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00, 0x00, 0x30, 0x31, 0x2F, 0x10, 0x10,
59964 +0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28, 0x10, 0x00, 0x00, 0x30, 0x31, 0x20,
59965 +0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04,
59966 +0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05,
59967 +0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05, 0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E,
59968 +0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E,
59969 +0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A,
59970 +0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04,
59971 +0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60,
59972 +0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40,
59973 +0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40, 0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8,
59974 +0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0C,
59975 +0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x28,
59976 +0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8, 0x00, 0xF0, 0x01, 0x18, 0x00, 0x64,
59977 +0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58, 0x03, 0x20, 0x03, 0xE8, 0x02, 0x02,
59978 +0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07, 0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E,
59979 +0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
59980 +0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x05, 0x06,
59981 +0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00,
59982 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59983 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59984 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59985 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59986 +0xBB, 0x01, 0x0C, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x22, 0x50,
59987 +0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE6, 0x22, 0xBB, 0xFE, 0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0x22,
59988 +0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE4, 0x93, 0x22, 0xBB, 0x01, 0x06,
59989 +0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22, 0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8,
59990 +0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22,
59991 +0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE, 0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2,
59992 +0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0, 0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70,
59993 +0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5,
59994 +0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7, 0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3,
59995 +0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83, 0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01,
59996 +0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0,
59997 +0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22,
59998 +0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0, 0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A,
59999 +0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22, 0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A,
60000 +0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7, 0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB,
60001 +0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8, 0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29,
60002 +0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09,
60003 +0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB, 0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8,
60004 +0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC,
60005 +0x48, 0xFC, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xA4,
60006 +0x25, 0x82, 0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA,
60007 +0xA3, 0xE0, 0xF9, 0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82,
60008 +0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0,
60009 +0xA3, 0xE9, 0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93,
60010 +0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74,
60011 +0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4,
60012 +0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5,
60013 +0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60,
60014 +0xE9, 0xA3, 0xA3, 0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0x90, 0x8A, 0xC5, 0xF0, 0xE5, 0x24, 0x70, 0x03,
60015 +0x02, 0x44, 0x9D, 0xE5, 0x21, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0x9D, 0xE5, 0x24, 0x14, 0x60,
60016 +0x29, 0x24, 0xFD, 0x60, 0x25, 0x24, 0x02, 0x24, 0xFB, 0x50, 0x02, 0x80, 0x23, 0x90, 0x8B, 0x0B,
60017 +0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3, 0xE0, 0x60, 0x16, 0x90, 0x8B, 0x0B, 0xE0, 0x70, 0x0A,
60018 +0x90, 0x8B, 0x19, 0xE0, 0x90, 0x8B, 0x0B, 0xF0, 0x80, 0x00, 0x90, 0x8A, 0xC5, 0x74, 0x01, 0xF0,
60019 +0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4, 0x90, 0x8A, 0xC5,
60020 +0xF0, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x70, 0x04, 0x90, 0x8A, 0xC5, 0xF0, 0x90, 0x8A, 0xC5,
60021 +0xE0, 0x60, 0x4A, 0x43, 0x25, 0x10, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0C, 0xE0, 0x75,
60022 +0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x8B, 0x15, 0xE0, 0x2F, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
60023 +0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x22, 0x54,
60024 +0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x90, 0x8B, 0x2C,
60025 +0xE0, 0x30, 0xE0, 0x09, 0x12, 0x7D, 0xC1, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0xE4, 0xF5,
60026 +0x25, 0xF5, 0x24, 0x75, 0x23, 0x0C, 0x75, 0x22, 0x0C, 0x90, 0x8B, 0x1A, 0xF0, 0x90, 0x8B, 0x18,
60027 +0xF0, 0x90, 0x8B, 0x17, 0xF0, 0x90, 0x8B, 0x19, 0x04, 0xF0, 0x90, 0x8B, 0x0B, 0xF0, 0xE4, 0x90,
60028 +0x8B, 0x1B, 0xF0, 0x90, 0x8B, 0x0D, 0xF0, 0x90, 0x8B, 0x15, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x8B,
60029 +0x0C, 0xF0, 0x90, 0x8B, 0x13, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x10, 0xF0, 0xA3, 0x74,
60030 +0x05, 0xF0, 0x90, 0x8B, 0x0F, 0x74, 0x14, 0xF0, 0x90, 0x8B, 0x16, 0x74, 0x05, 0xF0, 0xE4, 0x90,
60031 +0x8B, 0x0E, 0xF0, 0x90, 0x8B, 0x0A, 0xF0, 0x90, 0x8B, 0x08, 0xF0, 0x90, 0x8B, 0x12, 0xF0, 0x22,
60032 +0x7F, 0x00, 0x22, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0x8E, 0x64, 0x8F, 0x65, 0xAD, 0x65, 0xAC,
60033 +0x64, 0xAF, 0x63, 0x12, 0x4A, 0x5B, 0xAF, 0x65, 0xAE, 0x64, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F,
60034 +0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01,
60035 +0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC,
60036 +0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74,
60037 +0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74,
60038 +0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53,
60039 +0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74,
60040 +0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D,
60041 +0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01,
60042 +0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x67, 0x8D, 0x68, 0xE5, 0x67, 0x54,
60043 +0x0F, 0xFF, 0xE5, 0x22, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x67, 0x30, 0xE2, 0x30, 0xE5, 0x22,
60044 +0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x4A, 0xB2, 0xE5, 0x22, 0x30, 0xE3, 0x10, 0xE5, 0x67, 0x20,
60045 +0xE3, 0x0B, 0x12, 0x49, 0xD5, 0xEF, 0x60, 0x53, 0x12, 0x4A, 0xCC, 0x80, 0x4E, 0xE5, 0x22, 0x20,
60046 +0xE3, 0x49, 0xE5, 0x67, 0x30, 0xE3, 0x44, 0xAF, 0x68, 0x12, 0x4A, 0x7C, 0x80, 0x3D, 0xE5, 0x22,
60047 +0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x67, 0x20, 0xE3, 0x09, 0x12, 0x49, 0xD5, 0xEF, 0x60,
60048 +0x2A, 0x12, 0x4A, 0xCC, 0xE5, 0x22, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E, 0xE5, 0x67, 0x20, 0xE2,
60049 +0x09, 0x12, 0x49, 0x93, 0xEF, 0x60, 0x14, 0x12, 0x4A, 0x32, 0xE5, 0x22, 0x54, 0x0F, 0xFF, 0xBF,
60050 +0x02, 0x09, 0x12, 0x45, 0x00, 0xEF, 0x60, 0x03, 0x12, 0x4B, 0x10, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
60051 +0x02, 0x46, 0x6E, 0x02, 0x50, 0xC6, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6,
60052 +0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C,
60053 +0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01,
60054 +0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4B,
60055 +0x23, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F,
60056 +0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8,
60057 +0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA,
60058 +0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE,
60059 +0xE7, 0x80, 0xBE, 0xE5, 0x21, 0x64, 0x01, 0x70, 0x67, 0xE5, 0x24, 0x60, 0x63, 0xE5, 0x24, 0x64,
60060 +0x02, 0x60, 0x06, 0xE5, 0x24, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x8B, 0x0B,
60061 +0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x8B, 0x19, 0xF0, 0x90, 0x8B, 0x0B, 0xE0, 0x70, 0x07, 0x90,
60062 +0x8B, 0x19, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x8B, 0x0B, 0xE0, 0xFF, 0x90, 0x8B, 0x0B, 0xEF, 0xF0,
60063 +0x90, 0x8B, 0x0D, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x8B, 0x0C, 0xF0, 0x90, 0x05, 0x58,
60064 +0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x53, 0x25,
60065 +0xFD, 0x53, 0x25, 0xEF, 0xE5, 0x24, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x47, 0x8E,
60066 +0x22, 0xEF, 0x64, 0x01, 0x70, 0x35, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x31, 0x2C, 0x7D, 0x02, 0x7F,
60067 +0x03, 0x12, 0x31, 0x2C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12,
60068 +0x45, 0x9E, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x7D, 0xC1, 0x90, 0x06, 0x04, 0xE0,
60069 +0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B,
60070 +0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x31, 0x9D, 0x7D, 0x02, 0x7F, 0x03, 0x12,
60071 +0x31, 0x9D, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0,
60072 +0x12, 0x4B, 0x4F, 0xE5, 0x21, 0x20, 0xE0, 0x05, 0xE4, 0x90, 0x8B, 0x0D, 0xF0, 0x22, 0xE4, 0x90,
60073 +0x8A, 0xC5, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x8A, 0xC5, 0xF0, 0xE0, 0x54, 0xC0, 0x70, 0x09,
60074 +0x53, 0x25, 0xFE, 0x53, 0x25, 0xFD, 0x12, 0x4A, 0xFC, 0x90, 0x8A, 0xC5, 0xE0, 0x30, 0xE6, 0x15,
60075 +0x43, 0x25, 0x01, 0x90, 0x8B, 0x1A, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x4A, 0x97, 0x80, 0x08,
60076 +0x12, 0x49, 0x49, 0x80, 0x03, 0x53, 0x25, 0xFE, 0x90, 0x8A, 0xC5, 0xE0, 0x30, 0xE7, 0x27, 0x43,
60077 +0x25, 0x02, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x11, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4,
60078 +0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90,
60079 +0x8B, 0x1B, 0x74, 0x01, 0xF0, 0x22, 0x53, 0x25, 0xFD, 0x22, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x8B,
60080 +0x12, 0x4B, 0x43, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x12, 0x24, 0x62, 0xF5, 0x24, 0x14, 0x60,
60081 +0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03, 0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90,
60082 +0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFD, 0xE4, 0xFF, 0x12, 0x4A,
60083 +0x07, 0x80, 0x29, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFD,
60084 +0x7F, 0x01, 0x12, 0x4A, 0x07, 0x1F, 0x80, 0x14, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00,
60085 +0x02, 0x12, 0x42, 0x20, 0xFD, 0x7F, 0x02, 0x12, 0x4A, 0x07, 0xE4, 0xFF, 0x12, 0x47, 0x21, 0x22,
60086 +0xE4, 0x90, 0x8A, 0xCB, 0xF0, 0xE5, 0x24, 0x60, 0x49, 0x90, 0x8B, 0x1B, 0xE0, 0x60, 0x0D, 0xE4,
60087 +0xF0, 0x53, 0x25, 0xFD, 0xE5, 0x25, 0x54, 0x07, 0x70, 0x38, 0x80, 0x33, 0x90, 0x8B, 0x0C, 0xE0,
60088 +0x04, 0xF0, 0x53, 0x25, 0xEF, 0x90, 0x8A, 0xCB, 0xE0, 0xFF, 0x90, 0x8B, 0x10, 0xE0, 0x2F, 0xFF,
60089 +0xE4, 0x33, 0xFE, 0x90, 0x8B, 0x0C, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
60090 +0x40, 0x0D, 0xE5, 0x21, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12,
60091 +0x4A, 0xFC, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x63, 0x90, 0x04, 0x1D, 0xE0,
60092 +0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x66, 0x74, 0xFF, 0xF0, 0x12, 0x7E, 0x9A, 0xBF, 0x01,
60093 +0x0D, 0x90, 0x8A, 0xF9, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xFD, 0x12, 0x45, 0x09, 0x90, 0x05,
60094 +0x22, 0xE5, 0x66, 0xF0, 0x80, 0x0D, 0x90, 0x8A, 0xF9, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xFD,
60095 +0x12, 0x45, 0x09, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x24,
60096 +0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x41, 0x90, 0x8B, 0x1A, 0xE0, 0x60, 0x2B, 0x12, 0x45, 0x9E,
60097 +0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
60098 +0x7F, 0x58, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92,
60099 +0x74, 0x01, 0xF0, 0x90, 0x8B, 0x18, 0xF0, 0x22, 0xE5, 0x22, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
60100 +0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01,
60101 +0x3C, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E,
60102 +0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x5F, 0x74, 0x05,
60103 +0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x17, 0x14, 0xF0, 0xE5, 0x22, 0x54, 0x0F,
60104 +0xC3, 0x94, 0x0C, 0x50, 0x0D, 0x12, 0x45, 0x9E, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x03, 0x12,
60105 +0x7D, 0xC1, 0x22, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x37, 0xE5, 0x25, 0x54, 0x03, 0x70,
60106 +0x31, 0xE5, 0x23, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x50, 0x28, 0xE5, 0x25, 0x20, 0xE2, 0x23, 0xE5,
60107 +0x25, 0x20, 0xE4, 0x1E, 0x90, 0x8B, 0x0D, 0xE0, 0x70, 0x18, 0x90, 0x8B, 0x12, 0xE0, 0x70, 0x12,
60108 +0xE5, 0x26, 0x70, 0x0E, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F,
60109 +0x01, 0x22, 0x7F, 0x00, 0x22, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x27, 0x90, 0x8B, 0x18,
60110 +0xE0, 0x70, 0x21, 0x90, 0x8B, 0x17, 0xE0, 0x70, 0x1B, 0xE5, 0x23, 0x54, 0x0F, 0xD3, 0x94, 0x04,
60111 +0x50, 0x12, 0xE5, 0x26, 0x70, 0x0E, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x08,
60112 +0xF0, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xEF, 0x24, 0xFE, 0x60, 0x0B, 0x04, 0x70, 0x22, 0x90,
60113 +0x8B, 0x19, 0x74, 0x01, 0xF0, 0x80, 0x16, 0xED, 0x70, 0x0A, 0x90, 0x8B, 0x16, 0xE0, 0x90, 0x8B,
60114 +0x19, 0xF0, 0x80, 0x05, 0x90, 0x8B, 0x19, 0xED, 0xF0, 0x90, 0x8B, 0x19, 0xE0, 0x90, 0x8B, 0x0B,
60115 +0xF0, 0x22, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x7E,
60116 +0x9A, 0xEF, 0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x31,
60117 +0x9D, 0x12, 0x7C, 0x50, 0x53, 0x22, 0xF0, 0x43, 0x22, 0x02, 0x22, 0xEF, 0x60, 0x0F, 0x74, 0x21,
60118 +0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x74, 0x21, 0x2D,
60119 +0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0,
60120 +0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A, 0xE5, 0x21, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x48, 0xB3,
60121 +0x53, 0x22, 0xF0, 0x43, 0x22, 0x0C, 0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x14, 0x90, 0x8A, 0xF8,
60122 +0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x5F, 0xFD, 0x8E, 0x69, 0x8F, 0x6A, 0x90, 0x04, 0x1F, 0x74, 0x20,
60123 +0xF0, 0x22, 0x90, 0x8B, 0x52, 0xEF, 0xF0, 0x12, 0x7D, 0x42, 0x90, 0x8B, 0x52, 0xE0, 0x60, 0x05,
60124 +0x90, 0x05, 0x22, 0xE4, 0xF0, 0x53, 0x22, 0xF0, 0x43, 0x22, 0x04, 0x22, 0x90, 0x06, 0x04, 0xE0,
60125 +0x44, 0x40, 0xF0, 0xE5, 0x21, 0xB4, 0x01, 0x05, 0x7F, 0x01, 0x12, 0x48, 0xB3, 0x53, 0x22, 0xF0,
60126 +0x43, 0x22, 0x04, 0x22, 0xE5, 0x23, 0x30, 0xE6, 0x12, 0xE5, 0x23, 0x54, 0x0F, 0xFF, 0x90, 0x01,
60127 +0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0, 0x53, 0x23, 0xBF, 0x22, 0x90, 0x8B, 0x2C, 0xE0,
60128 +0x30, 0xE0, 0x05, 0xAF, 0x23, 0x02, 0x7E, 0x06, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x22,
60129 +0x53, 0x22, 0xF0, 0x43, 0x22, 0x01, 0x12, 0x4B, 0x5A, 0x12, 0x4B, 0x5B, 0x53, 0x22, 0xF0, 0x43,
60130 +0x22, 0x02, 0x22, 0x41, 0x8A, 0xF6, 0x00, 0x41, 0x8B, 0x05, 0x00, 0x41, 0x8B, 0x51, 0x00, 0x41,
60131 +0x8B, 0x53, 0x00, 0x00, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x7F, 0x64, 0x7F, 0x7F, 0x01, 0x60, 0x02,
60132 +0x7F, 0x00, 0x22, 0xE4, 0x90, 0x8B, 0x1B, 0xF0, 0x90, 0x8B, 0x0C, 0xF0, 0xF5, 0x25, 0x22, 0x90,
60133 +0x8B, 0x13, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x22, 0x22, 0xF0, 0x90, 0x8B, 0x0F,
60134 +0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0xD3, 0x10, 0xAF, 0x01,
60135 +0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x3D, 0xE0, 0xFB, 0xA3, 0xE0, 0xF5, 0x44, 0xE4, 0xF5, 0x45, 0x12,
60136 +0x30, 0x62, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0,
60137 +0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05,
60138 +0xC0, 0x06, 0xC0, 0x07, 0x75, 0x0E, 0x00, 0x90, 0x01, 0xC4, 0x74, 0x87, 0xF0, 0x74, 0x4B, 0xA3,
60139 +0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31,
60140 +0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34,
60141 +0x30, 0xE0, 0x51, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x1F,
60142 +0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x18, 0x90, 0x8B, 0x34, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xE0,
60143 +0x64, 0x03, 0x60, 0x0B, 0x7F, 0x01, 0xB1, 0xE0, 0xEF, 0x70, 0x04, 0x7F, 0x02, 0xD1, 0x89, 0x90,
60144 +0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x1D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x16, 0x90, 0x8B,
60145 +0x2E, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x09, 0xE4, 0xFF, 0xB1, 0xE0, 0xEF,
60146 +0x70, 0x02, 0xD1, 0x56, 0xE5, 0x34, 0x30, 0xE1, 0x08, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x11,
60147 +0x60, 0xE5, 0x34, 0x30, 0xE2, 0x28, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0,
60148 +0x30, 0xE0, 0x14, 0x90, 0x8B, 0x3D, 0xE4, 0x71, 0x5C, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90,
60149 +0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x07, 0x90, 0x8B, 0x18, 0xE4, 0xF0, 0x51, 0xFC, 0xE5, 0x34,
60150 +0x30, 0xE3, 0x38, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x24,
60151 +0x90, 0x8B, 0x3D, 0xE4, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
60152 +0x7F, 0x5C, 0x7E, 0x01, 0x71, 0x6C, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74,
60153 +0x02, 0xF0, 0x80, 0x07, 0x90, 0x8B, 0x17, 0xE4, 0xF0, 0x51, 0xFC, 0xE5, 0x34, 0x30, 0xE4, 0x09,
60154 +0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x12, 0x51, 0xC9, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01,
60155 +0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x10, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90,
60156 +0x00, 0x83, 0xE0, 0xF5, 0x23, 0x51, 0xE4, 0x51, 0xFC, 0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01,
60157 +0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90,
60158 +0x8B, 0x05, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05,
60159 +0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x75, 0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0x90,
60160 +0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x18, 0x90, 0x8B, 0x36, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x64,
60161 +0x03, 0x60, 0x0B, 0x7F, 0x01, 0xB1, 0xE0, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0xD1, 0x89, 0x90, 0x8B,
60162 +0x2C, 0xE0, 0x30, 0xE0, 0x49, 0x90, 0x8B, 0x30, 0xE4, 0xF0, 0xFF, 0xB1, 0xE0, 0xEF, 0x60, 0x3E,
60163 +0x12, 0x65, 0x5F, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0x64, 0x06, 0x60, 0x32, 0xEF, 0xB4, 0x04, 0x02,
60164 +0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF, 0x80, 0x14, 0x90, 0x8B, 0x2D,
60165 +0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x05, 0x7F,
60166 +0x01, 0x12, 0x65, 0x82, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x12, 0x7D, 0xC1, 0xE5, 0x36,
60167 +0x30, 0xE1, 0x47, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x19,
60168 +0x90, 0x8B, 0x36, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x64, 0x03, 0x60, 0x0B, 0x7F, 0x01,
60169 +0xB1, 0xE0, 0xEF, 0x70, 0x04, 0x7F, 0x02, 0xD1, 0x89, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x1A,
60170 +0x90, 0x8B, 0x30, 0x74, 0x01, 0xF0, 0x12, 0x7E, 0x2B, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60,
60171 +0x09, 0xE4, 0xFF, 0xB1, 0xE0, 0xEF, 0x70, 0x02, 0xD1, 0x56, 0x74, 0x87, 0x04, 0x90, 0x01, 0xC4,
60172 +0xF0, 0x74, 0x4B, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0,
60173 +0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32,
60174 +0xEF, 0x64, 0x01, 0x70, 0x3D, 0x90, 0x8B, 0x35, 0xE0, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B,
60175 +0x08, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x34, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22,
60176 +0x90, 0x8B, 0x32, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x54,
60177 +0x07, 0x30, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x36, 0xE0, 0x7F, 0x01, 0x60, 0x36, 0x7F,
60178 +0x00, 0x22, 0x90, 0x8B, 0x2F, 0xE0, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x08, 0xE0, 0x60,
60179 +0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x2E, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x2C,
60180 +0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x30, 0xE0, 0x7F,
60181 +0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x0D, 0xE0, 0x60, 0x16, 0x90, 0x8B, 0x2D, 0xE0,
60182 +0x70, 0x04, 0x7F, 0x05, 0x80, 0x1F, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x01, 0x70, 0x1A, 0x7F, 0x02,
60183 +0x80, 0x13, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x03, 0x80, 0x08, 0x90, 0x8B, 0x2D,
60184 +0xE0, 0x70, 0x05, 0x7F, 0x04, 0x12, 0x65, 0x82, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
60185 +0x90, 0x8B, 0x33, 0xE0, 0x90, 0x8B, 0x55, 0xF0, 0x6F, 0x70, 0x02, 0xE1, 0x55, 0xEF, 0x14, 0x60,
60186 +0x3B, 0x14, 0x60, 0x5F, 0x14, 0x70, 0x02, 0xE1, 0x30, 0x24, 0x03, 0x60, 0x02, 0xE1, 0x55, 0x90,
60187 +0x8B, 0x55, 0xE0, 0xB4, 0x03, 0x04, 0xF1, 0xC2, 0xE1, 0x55, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x02,
60188 +0x04, 0xF1, 0xAF, 0xE1, 0x55, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x04, 0x04, 0xF1, 0xC6, 0xE1, 0x55,
60189 +0x90, 0x8B, 0x55, 0xE0, 0x64, 0x01, 0x70, 0x7D, 0xF1, 0xB1, 0x80, 0x79, 0x90, 0x8B, 0x55, 0xE0,
60190 +0xFF, 0xB4, 0x03, 0x04, 0xF1, 0xCA, 0x80, 0x6D, 0xEF, 0xB4, 0x02, 0x04, 0xF1, 0xA1, 0x80, 0x65,
60191 +0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x04, 0x04, 0xF1, 0xD5, 0x80, 0x59, 0xEF, 0x70, 0x56, 0xF1,
60192 +0x8E, 0x80, 0x52, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x03, 0x05, 0x12, 0x7C, 0x41, 0x80, 0x46, 0x90,
60193 +0x8B, 0x55, 0xE0, 0xB4, 0x01, 0x04, 0xF1, 0x72, 0x80, 0x3B, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x04,
60194 +0x05, 0x12, 0x7D, 0x23, 0x80, 0x2F, 0x90, 0x8B, 0x55, 0xE0, 0x70, 0x29, 0xF1, 0x70, 0x80, 0x25,
60195 +0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x01, 0x04, 0xF1, 0x5A, 0x80, 0x19, 0xEF, 0xB4, 0x02, 0x04,
60196 +0xF1, 0x6B, 0x80, 0x11, 0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x04, 0x04, 0xF1, 0x5A, 0x80, 0x05,
60197 +0xEF, 0x70, 0x02, 0xF1, 0x67, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0,
60198 +0x90, 0x8B, 0x33, 0x74, 0x03, 0xF0, 0x22, 0xF1, 0x8E, 0x80, 0xEF, 0x12, 0x7D, 0x42, 0x80, 0xEA,
60199 +0xF1, 0x8E, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x7E, 0x9A, 0xEF, 0x70, 0x06, 0x90, 0x01,
60200 +0xC8, 0x74, 0xFD, 0xF0, 0x12, 0x7C, 0x50, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x01,
60201 +0x3E, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x31, 0xB7, 0x90, 0x8B, 0x33, 0x74, 0x01, 0xF0,
60202 +0x22, 0x12, 0x7D, 0x42, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0x04, 0xF0, 0x22, 0xF1,
60203 +0xA1, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x31, 0x49, 0x90, 0x05, 0x27, 0xE4, 0xF0, 0x90, 0x8B, 0x33,
60204 +0xF0, 0x22, 0xF1, 0xCA, 0x80, 0xEB, 0xF1, 0xD5, 0x80, 0xE7, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90,
60205 +0x8B, 0x33, 0x04, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0x04, 0xF0, 0x22,
60206 +0xF1, 0x8E, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x33, 0x74, 0x04, 0xF0, 0x22, 0x90,
60207 +0x02, 0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12,
60208 +0x43, 0xBA, 0x50, 0x1A, 0x00, 0x40, 0x50, 0x42, 0x00, 0x80, 0x50, 0x6D, 0x01, 0x00, 0x50, 0x81,
60209 +0x02, 0x00, 0x50, 0x99, 0x04, 0x00, 0x00, 0x00, 0x50, 0xB6, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE,
60210 +0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06,
60211 +0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
60212 +0x80, 0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF,
60213 +0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78,
60214 +0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04,
60215 +0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80,
60216 +0x35, 0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF,
60217 +0x2D, 0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE,
60218 +0xFF, 0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D,
60219 +0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x58,
60220 +0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x22, 0xE4, 0x90, 0x8A, 0xCC, 0xF0, 0xA3, 0xF0, 0x75, 0x8E, 0x02,
60221 +0x91, 0x0E, 0x12, 0x68, 0x44, 0x90, 0x8B, 0x07, 0xEF, 0xF0, 0x12, 0x68, 0x51, 0x90, 0x8B, 0x09,
60222 +0xEF, 0xF0, 0x12, 0x68, 0x5D, 0x90, 0x8A, 0xF4, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x55,
60223 +0xF5, 0x21, 0x12, 0x72, 0x55, 0x12, 0x44, 0x9E, 0x12, 0x2E, 0x01, 0x7F, 0x03, 0x12, 0x78, 0x42,
60224 +0x12, 0x7C, 0x3D, 0x12, 0x68, 0x0A, 0x12, 0x68, 0x75, 0x12, 0x68, 0x8A, 0x12, 0x68, 0x28, 0x12,
60225 +0x68, 0x43, 0x90, 0x8A, 0xCE, 0xE5, 0xD9, 0xF0, 0x31, 0x5F, 0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0,
60226 +0x44, 0x40, 0xF0, 0x51, 0x0E, 0x75, 0xE8, 0x03, 0x43, 0xA8, 0x85, 0xD2, 0xAF, 0x11, 0xBB, 0x90,
60227 +0x8A, 0xCC, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xC6, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x50, 0xA3, 0xF0,
60228 +0xE5, 0x55, 0x30, 0xE4, 0x09, 0xC2, 0xAF, 0x53, 0x55, 0xEF, 0xD2, 0xAF, 0xB1, 0x59, 0xE5, 0x55,
60229 +0x30, 0xE6, 0xDC, 0xC2, 0xAF, 0x53, 0x55, 0xBF, 0xD2, 0xAF, 0x12, 0x6B, 0xBD, 0x80, 0xD0, 0x90,
60230 +0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3, 0xF0, 0xA3,
60231 +0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x31, 0x88, 0x7D, 0xFF, 0x7F, 0x55, 0x31, 0x88, 0x7D, 0xFF,
60232 +0x7F, 0x56, 0x31, 0x88, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F,
60233 +0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x51, 0x0E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x30,
60234 +0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
60235 +0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x31, 0x88, 0xE4, 0xFD, 0x7F, 0x51, 0x31, 0x88, 0xE4, 0xFD, 0x7F,
60236 +0x52, 0x31, 0x88, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0xE5, 0x5E, 0x64, 0x01, 0x70, 0x3B, 0x71,
60237 +0x4E, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x71, 0x42, 0x90, 0x00, 0x46, 0xE0, 0x44, 0x04, 0xFD, 0x7F,
60238 +0x46, 0x31, 0x88, 0x90, 0x00, 0x44, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x44, 0x31, 0x88, 0x90, 0x00,
60239 +0x46, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x46, 0x31, 0x88, 0x7F, 0x02, 0x71, 0x6A, 0x8F, 0x62, 0x90,
60240 +0x01, 0xC9, 0xE5, 0x62, 0xF0, 0xB4, 0x01, 0x02, 0x51, 0xE2, 0x22, 0xE0, 0x5F, 0xF0, 0xD3, 0x10,
60241 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
60242 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xE0, 0xED, 0xF0, 0x90, 0x8A, 0xDF, 0xEF, 0xF0, 0xD3,
60243 +0x94, 0x07, 0x50, 0x4E, 0xA3, 0xE0, 0x70, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8,
60244 +0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x47, 0xE0, 0x5F, 0xF0,
60245 +0x80, 0x17, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
60246 +0xD8, 0xFC, 0xFF, 0x90, 0x00, 0x47, 0xE0, 0x4F, 0xF0, 0x51, 0x0E, 0x90, 0x8A, 0xDF, 0xE0, 0xFF,
60247 +0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46,
60248 +0x80, 0x59, 0x90, 0x8A, 0xDF, 0xE0, 0x24, 0xF8, 0xF0, 0xA3, 0xE0, 0x70, 0x1D, 0x90, 0x8A, 0xDF,
60249 +0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xC4, 0x54, 0xF0,
60250 +0xF4, 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x5F, 0xF0, 0x80, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74,
60251 +0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x00,
60252 +0x43, 0xE0, 0x4F, 0xF0, 0x51, 0x0E, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08,
60253 +0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0x51, 0x0B, 0xD0, 0xD0, 0x92,
60254 +0xAF, 0x22, 0x90, 0x00, 0x49, 0xE0, 0x90, 0x8B, 0x54, 0xF0, 0xE0, 0x54, 0x0F, 0xF0, 0x44, 0xF0,
60255 +0xFD, 0x7F, 0x49, 0x31, 0x88, 0x90, 0x8B, 0x54, 0xE0, 0x44, 0xB0, 0xFD, 0x7F, 0x49, 0x21, 0x88,
60256 +0x90, 0x8A, 0xDD, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0x5E, 0x01, 0x8E, 0x5F, 0xF5, 0x60, 0xE4,
60257 +0xFD, 0x7F, 0x0B, 0x51, 0x1E, 0xE4, 0xFD, 0x7F, 0x02, 0x51, 0x1E, 0x71, 0x4E, 0xE4, 0xFF, 0x71,
60258 +0x42, 0xE4, 0xF5, 0x62, 0x90, 0x01, 0xC9, 0xE5, 0x62, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFC, 0xA3,
60259 +0xE0, 0xFD, 0xEC, 0xFB, 0x8D, 0x44, 0xE4, 0xF5, 0x45, 0x7D, 0x01, 0x7F, 0x60, 0x7E, 0x01, 0x02,
60260 +0x30, 0x62, 0x90, 0x01, 0xCA, 0xE5, 0x61, 0xF0, 0xEF, 0x60, 0x02, 0x51, 0xE2, 0x22, 0x7F, 0x0B,
60261 +0x71, 0x6A, 0xEF, 0x65, 0x61, 0x60, 0x10, 0xE5, 0x61, 0xB4, 0x01, 0x05, 0xE4, 0xF5, 0x61, 0x80,
60262 +0x03, 0x75, 0x61, 0x01, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
60263 +0xD0, 0x90, 0x8B, 0x57, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x43, 0xE0, 0xFF, 0x74, 0x01, 0xA8,
60264 +0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0x51, 0x0B, 0x90,
60265 +0x8B, 0x57, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
60266 +0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05,
60267 +0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4B, 0x90, 0x8B,
60268 +0x57, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
60269 +0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x5F, 0xF0, 0x51, 0x0E, 0x90, 0x8B, 0x57, 0xE0,
60270 +0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
60271 +0xF9, 0xFF, 0x90, 0x00, 0x42, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06,
60272 +0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90,
60273 +0x8B, 0x04, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x21, 0x88, 0xD3, 0x10,
60274 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDA, 0x12, 0x43,
60275 +0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0xFA, 0xE5, 0xF0, 0x24, 0x00, 0xFF, 0xE4, 0x3A, 0xFE,
60276 +0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0xEE, 0x8F, 0xF0, 0x12, 0x43, 0x19, 0x12,
60277 +0x24, 0x62, 0xFF, 0x60, 0x2C, 0xB5, 0x5E, 0x16, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00,
60278 +0x01, 0x12, 0x42, 0xC2, 0x65, 0x60, 0x70, 0x04, 0xE5, 0x5F, 0x65, 0xF0, 0x60, 0x22, 0x90, 0x8A,
60279 +0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0xFF, 0xAE, 0xF0, 0x71, 0x00, 0x80,
60280 +0x0F, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x24, 0x62, 0x65, 0x5E, 0x60, 0x02, 0x91, 0x95,
60281 +0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xF5, 0x5E, 0x7F, 0x60, 0x7E, 0x01, 0x8F, 0x82, 0x8E, 0x83,
60282 +0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x8B, 0xEF, 0x12, 0x43, 0x94,
60283 +0x54, 0xE7, 0x01, 0x54, 0xDE, 0x02, 0x55, 0x0B, 0x03, 0x55, 0x14, 0x05, 0x55, 0x1D, 0x06, 0x55,
60284 +0x58, 0x07, 0x55, 0x25, 0x08, 0x55, 0x2E, 0x09, 0x55, 0x36, 0x20, 0x55, 0x3F, 0x2C, 0x54, 0xF0,
60285 +0x2D, 0x54, 0xF9, 0x2E, 0x55, 0x02, 0x3B, 0x55, 0x48, 0x4B, 0x00, 0x00, 0x55, 0x51, 0x90, 0x8A,
60286 +0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0x85, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0x8B,
60287 +0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0xB8, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02,
60288 +0x75, 0x00, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x75, 0x39, 0x90, 0x8A, 0xD7, 0x12, 0x43,
60289 +0x6B, 0x02, 0x75, 0x52, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74, 0x0F, 0x90, 0x8A, 0xD7,
60290 +0x12, 0x43, 0x6B, 0xC1, 0xA6, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x75, 0x9A, 0x90, 0x8A,
60291 +0xD7, 0x12, 0x43, 0x6B, 0x81, 0x1E, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x78, 0x81, 0x90,
60292 +0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x7A, 0xC2, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x7C,
60293 +0x2B, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
60294 +0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFD, 0x70,
60295 +0x02, 0xC1, 0xA1, 0x90, 0x8B, 0x51, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
60296 +0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0xC1, 0x9A, 0x90,
60297 +0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD0,
60298 +0xF0, 0x75, 0x1D, 0x01, 0x75, 0x1E, 0x8A, 0x75, 0x1F, 0xD0, 0x75, 0x20, 0x01, 0x7B, 0x01, 0x7A,
60299 +0x8A, 0x79, 0xD1, 0x12, 0x5E, 0xE4, 0x90, 0x8A, 0xD1, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54,
60300 +0x01, 0x90, 0x8B, 0x51, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x88, 0x12, 0x43,
60301 +0x5F, 0xE0, 0x90, 0x8A, 0xD2, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x89,
60302 +0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD3, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90,
60303 +0x01, 0xD1, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD4, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0,
60304 +0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD5, 0xF0, 0x90, 0x8B, 0x51, 0xE0,
60305 +0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD6, 0xF0, 0x80, 0x33,
60306 +0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD2, 0xF0, 0x90,
60307 +0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD3,
60308 +0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x5F, 0xE0, 0x90,
60309 +0x8A, 0xD4, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A, 0x8A, 0x79, 0xD2, 0x91, 0xA6, 0x90,
60310 +0x8A, 0xCF, 0xE0, 0xFF, 0x90, 0x8B, 0x51, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02,
60311 +0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0xFF, 0x74,
60312 +0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x8B,
60313 +0x51, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0xA1, 0x6A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02,
60314 +0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x04, 0x12, 0x42, 0x20, 0xFF, 0x54, 0x1F, 0xFE,
60315 +0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0x90, 0x8A, 0xDA, 0xEF, 0xF0, 0xA3,
60316 +0xED, 0xF0, 0xA3, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x03, 0x12,
60317 +0x42, 0x20, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x42,
60318 +0x20, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x8A, 0xE0, 0xF0, 0x90, 0x8A, 0xDA, 0xE0,
60319 +0xFF, 0x75, 0xF0, 0x09, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0xAD, 0x82, 0xAC, 0x83, 0x90, 0x8A,
60320 +0xE1, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x23, 0xF9, 0x74, 0x87,
60321 +0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90,
60322 +0x00, 0x03, 0x12, 0x42, 0x20, 0x54, 0x0F, 0xFF, 0x90, 0x8A, 0xE3, 0x12, 0x43, 0x6B, 0xEF, 0x12,
60323 +0x42, 0x4D, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x90,
60324 +0x8A, 0xE3, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x5F, 0x90, 0x8A, 0xDC, 0x12,
60325 +0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0x90, 0x8A, 0xE1, 0xE0, 0xFC, 0xA3, 0xE0,
60326 +0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x24, 0x62, 0x8D, 0x82, 0x8C, 0x83, 0xA3, 0xF0,
60327 +0x90, 0x8A, 0xDF, 0xE0, 0xFE, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0x24, 0xC1, 0xF5, 0x82, 0xE4, 0x34,
60328 +0x86, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xDB, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87,
60329 +0x29, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2A, 0x12, 0x43, 0x5F,
60330 +0x74, 0x01, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2B, 0x12,
60331 +0x43, 0x5F, 0xEE, 0xF0, 0x8F, 0x0F, 0xEF, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89,
60332 +0xAF, 0x82, 0xF5, 0x10, 0x8F, 0x11, 0xE5, 0x0F, 0x75, 0xF0, 0x02, 0xA4, 0x24, 0x81, 0xF9, 0x74,
60333 +0x86, 0x35, 0xF0, 0x75, 0x12, 0x01, 0xF5, 0x13, 0x89, 0x14, 0x75, 0xF0, 0x09, 0xE5, 0x0F, 0x90,
60334 +0x87, 0x25, 0x12, 0x43, 0x5F, 0xAF, 0x82, 0x85, 0x83, 0x15, 0x8F, 0x16, 0xE5, 0x0F, 0x75, 0xF0,
60335 +0x09, 0xA4, 0x24, 0x23, 0xF9, 0x74, 0x87, 0x35, 0xF0, 0x75, 0x17, 0x01, 0xF5, 0x18, 0x89, 0x19,
60336 +0x74, 0xC1, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x12, 0x43, 0x94, 0x58,
60337 +0x34, 0x00, 0x58, 0x49, 0x01, 0x58, 0x5E, 0x02, 0x58, 0x73, 0x03, 0x58, 0x9C, 0x04, 0x58, 0xB1,
60338 +0x05, 0x58, 0xC6, 0x06, 0x58, 0xEC, 0x0C, 0x59, 0x19, 0x0D, 0x59, 0x46, 0x0E, 0x59, 0x73, 0x0F,
60339 +0x00, 0x00, 0x59, 0xA7, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
60340 +0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5,
60341 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80, 0x27, 0xE5, 0x0F,
60342 +0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74,
60343 +0x05, 0x80, 0x12, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
60344 +0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34,
60345 +0x86, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0, 0x21, 0xA7, 0xE5, 0x0F, 0x25, 0xE0,
60346 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF5, 0x80,
60347 +0x27, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F,
60348 +0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34,
60349 +0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5,
60350 +0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x21, 0xA7, 0x90, 0x04, 0x47, 0xE0,
60351 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x46, 0xE0, 0xAB, 0x12, 0xAA,
60352 +0x13, 0xA9, 0x14, 0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x45, 0xE0, 0x85, 0x11, 0x82,
60353 +0x85, 0x10, 0x83, 0xF0, 0x90, 0x04, 0x44, 0x21, 0x9E, 0x90, 0x04, 0x4B, 0xE0, 0xAB, 0x12, 0xAA,
60354 +0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x4A, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
60355 +0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x49, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83,
60356 +0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
60357 +0x12, 0x42, 0x4D, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x01,
60358 +0x12, 0x42, 0x5F, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xF0, 0x90, 0x04,
60359 +0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D,
60360 +0x90, 0x04, 0x52, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x01, 0x12, 0x42, 0x5F,
60361 +0x90, 0x04, 0x51, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xF0, 0x90, 0x04, 0x50, 0xE0, 0x85,
60362 +0x11, 0x82, 0x85, 0x10, 0x83, 0xA3, 0xF0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0xC0, 0x03, 0xC0,
60363 +0x02, 0xC0, 0x01, 0x12, 0x24, 0x62, 0xFF, 0xAB, 0x17, 0xAA, 0x18, 0xA9, 0x19, 0x12, 0x24, 0x62,
60364 +0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x4D, 0xAB, 0x12, 0xE5, 0x14, 0x24, 0x01,
60365 +0xF9, 0xE4, 0x35, 0x13, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x24, 0x62, 0xFF, 0xAB,
60366 +0x17, 0xAA, 0x18, 0xA9, 0x19, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x5F, 0xD0, 0x01, 0xD0, 0x02,
60367 +0xD0, 0x03, 0x12, 0x42, 0x4D, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0,
60368 +0xFF, 0x85, 0x16, 0x82, 0x85, 0x15, 0x83, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0,
60369 +0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x16, 0x82,
60370 +0x85, 0x15, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x0F, 0x25,
60371 +0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60,
60372 +0x4B, 0x90, 0x8A, 0xE6, 0x74, 0x0B, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x50,
60373 +0x02, 0x41, 0xEC, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
60374 +0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5,
60375 +0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x0A, 0x90, 0x8A, 0xE6, 0xE0, 0x24, 0x10,
60376 +0xA3, 0xF0, 0x80, 0x68, 0x90, 0x8A, 0xE6, 0xE0, 0x14, 0xF0, 0x80, 0xBB, 0xE5, 0x0F, 0x25, 0xE0,
60377 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x47,
60378 +0x90, 0x8A, 0xE6, 0x74, 0x0F, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x40, 0x3C,
60379 +0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
60380 +0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E,
60381 +0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x8A, 0xE6, 0xE0, 0xA3, 0xF0, 0x80, 0x0D, 0x90,
60382 +0x8A, 0xE6, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x8A, 0xE7, 0xF0, 0xE5, 0x0F, 0x25, 0xE0,
60383 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46,
60384 +0xE4, 0x90, 0x8A, 0xE6, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x40, 0x02, 0x61,
60385 +0xA5, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
60386 +0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0,
60387 +0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90, 0x8A, 0xE6, 0xE0, 0x80, 0x63, 0x90, 0x8A,
60388 +0xE6, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34,
60389 +0x86, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x8A, 0xE6, 0xF0, 0x90,
60390 +0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
60391 +0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81,
60392 +0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08,
60393 +0x90, 0x8A, 0xE6, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90, 0x8A, 0xE6, 0xE0, 0x04, 0xF0, 0x80, 0xBF,
60394 +0xE4, 0x90, 0x8A, 0xE8, 0xF0, 0x90, 0x8A, 0xE7, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0xE5, 0x0F, 0x90,
60395 +0x87, 0x27, 0x12, 0x43, 0x5F, 0xEF, 0xF0, 0x90, 0x8A, 0xE8, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xE5,
60396 +0x0F, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0xE5, 0x0F, 0xC3, 0x94, 0x20, 0x50, 0x32,
60397 +0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3, 0x9F, 0x40, 0x02,
60398 +0x80, 0x18, 0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xC3, 0x9E,
60399 +0x50, 0x08, 0x90, 0x8A, 0xE8, 0xE0, 0xA3, 0xF0, 0x80, 0x08, 0x90, 0x8A, 0xE7, 0xE0, 0x90, 0x8A,
60400 +0xE9, 0xF0, 0x90, 0x8A, 0xE9, 0xE0, 0xFD, 0xAF, 0x0F, 0x91, 0x4E, 0x90, 0x8A, 0xE9, 0xE0, 0xFF,
60401 +0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x8A, 0xE7,
60402 +0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x03, 0xF0, 0x22, 0xEF, 0xD3,
60403 +0x94, 0x0B, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x03, 0x40,
60404 +0x07, 0x90, 0x87, 0x22, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x87, 0x22, 0xF0, 0x22, 0xD3, 0x10,
60405 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED,
60406 +0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAC, 0x07, 0xED, 0x54, 0x1F, 0x90, 0x8A, 0xC7, 0xF0, 0x74,
60407 +0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xC5, 0xF0, 0x90, 0x8A,
60408 +0xC8, 0x74, 0x01, 0xF0, 0xEB, 0xC3, 0x94, 0x01, 0x40, 0x02, 0x80, 0x37, 0x90, 0x8A, 0xC5, 0xE0,
60409 +0x25, 0x0D, 0xFF, 0xA3, 0xF0, 0xA3, 0xE0, 0x90, 0x41, 0x9E, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40,
60410 +0x10, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x04, 0x80,
60411 +0x9D, 0x90, 0x8A, 0xC6, 0xE0, 0xFF, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
60412 +0xEF, 0xF0, 0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0,
60413 +0xFF, 0x90, 0x8A, 0xCA, 0xF0, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0,
60414 +0x54, 0x1F, 0x90, 0x8A, 0xC9, 0xF0, 0xD3, 0x9F, 0x40, 0x06, 0xA3, 0xE0, 0x90, 0x8A, 0xC9, 0xF0,
60415 +0x90, 0x8A, 0xC9, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
60416 +0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
60417 +0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13,
60418 +0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
60419 +0xEF, 0xF0, 0xAF, 0x05, 0x90, 0x8A, 0xC9, 0xE0, 0xFD, 0x91, 0x4E, 0x90, 0x8A, 0xC9, 0xE0, 0xFF,
60420 +0x22, 0xAC, 0x07, 0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F,
60421 +0x90, 0x8A, 0xDE, 0xF0, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x8A, 0xE1, 0xF0, 0x75, 0xF0, 0x09, 0xEC,
60422 +0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xE3, 0xF0, 0x75, 0xF0, 0x09, 0xEC, 0x90,
60423 +0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0xFE, 0x90, 0x8A, 0xE4, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xE4,
60424 +0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE5, 0xCB, 0xF0,
60425 +0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0,
60426 +0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE7, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C,
60427 +0x90, 0x8A, 0xE4, 0xE0, 0x90, 0x8A, 0xE1, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0xED, 0x70, 0x02, 0xC1,
60428 +0x93, 0x90, 0x8A, 0xE2, 0xED, 0xF0, 0x90, 0x8A, 0xDE, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x8A, 0xE1,
60429 +0xE0, 0x90, 0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0x14, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0x70,
60430 +0x02, 0xC1, 0x93, 0x90, 0x8A, 0xE1, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0xC1, 0x93, 0xE4,
60431 +0x90, 0x8A, 0xE0, 0xF0, 0xEF, 0x14, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x8A, 0xE3, 0xE0, 0xFD, 0x90,
60432 +0x8A, 0xDF, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0,
60433 +0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
60434 +0xF9, 0xFF, 0x90, 0x8A, 0xE7, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x8A,
60435 +0xDF, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
60436 +0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE5, 0xE0, 0x5E, 0xFE, 0xA3,
60437 +0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0x90, 0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xE0,
60438 +0xE0, 0x04, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0, 0x6F, 0x60, 0x08, 0x90,
60439 +0x8A, 0xDF, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90, 0x8A, 0xE2, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0,
60440 +0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x8A, 0xDF, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x8A, 0xE3, 0xE0, 0x90,
60441 +0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xDE, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
60442 +0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
60443 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
60444 +0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
60445 +0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x8A, 0xDE, 0xE0, 0xFD, 0x91, 0x4E, 0x90, 0x8A,
60446 +0xDE, 0xE0, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1A, 0x8A, 0x1B, 0x89,
60447 +0x1C, 0x90, 0x8B, 0x3F, 0x12, 0x43, 0x8B, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F, 0x90, 0x8B, 0x42,
60448 +0x12, 0x43, 0x8B, 0xAF, 0x20, 0x15, 0x20, 0xEF, 0x60, 0x1E, 0x90, 0x8B, 0x42, 0xE4, 0x75, 0xF0,
60449 +0x01, 0x12, 0x43, 0x74, 0x12, 0x24, 0x62, 0xFF, 0x90, 0x8B, 0x3F, 0xE4, 0x75, 0xF0, 0x01, 0x12,
60450 +0x43, 0x74, 0xEF, 0x12, 0x42, 0x4D, 0x80, 0xDB, 0xAB, 0x1A, 0xAA, 0x1B, 0xA9, 0x1C, 0xD0, 0xD0,
60451 +0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x8B,
60452 +0x90, 0x8B, 0x53, 0xE0, 0xFF, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x5F, 0x7F, 0xAF,
60453 +0x7E, 0x01, 0x12, 0x74, 0x3B, 0xEF, 0x60, 0x47, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x6B, 0x8B, 0x1D,
60454 +0x8A, 0x1E, 0x89, 0x1F, 0x75, 0x20, 0x02, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0xD1, 0xE4, 0x90,
60455 +0x8B, 0x48, 0x12, 0x43, 0x6B, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x8B, 0x45, 0x12, 0x43,
60456 +0x6B, 0x12, 0x24, 0x62, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x20, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2,
60457 +0xD1, 0xE4, 0x90, 0x01, 0xAF, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0,
60458 +0xD0, 0x92, 0xAF, 0x22, 0x90, 0x8A, 0xC5, 0xE0, 0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44,
60459 +0x80, 0xF0, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x56, 0x90, 0x8B, 0x48, 0x12, 0x43, 0x8B, 0x0B, 0x7A,
60460 +0x8A, 0x79, 0xC5, 0xE1, 0x33, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xC4, 0x74,
60461 +0xC5, 0xF0, 0x74, 0x5F, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0,
60462 +0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7, 0xE0, 0x30,
60463 +0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF,
60464 +0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3, 0x13,
60465 +0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x1E, 0xAF, 0x03, 0x74, 0x0F,
60466 +0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x10, 0x2F, 0xF5,
60467 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F, 0xF5,
60468 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
60469 +0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
60470 +0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x5F, 0xC5,
60471 +0xBF, 0x01, 0x10, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xFD, 0x90, 0x04, 0x1F,
60472 +0x74, 0x20, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13, 0x13,
60473 +0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x8A, 0xC5, 0x74,
60474 +0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07, 0xAF,
60475 +0x06, 0xEE, 0x64, 0x03, 0x70, 0x3B, 0x90, 0x8A, 0xC5, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D, 0xF0,
60476 +0x79, 0x40, 0x90, 0x8A, 0xC5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x59,
60477 +0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x8A, 0xF6, 0xF0, 0x22, 0x90, 0x8A, 0xF6, 0xE0, 0x04, 0xF0,
60478 +0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0B, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x02, 0x11,
60479 +0x6D, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0,
60480 +0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90,
60481 +0x01, 0xC4, 0x74, 0xF2, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28, 0xF5,
60482 +0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0, 0x55,
60483 +0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x41, 0x89, 0x90, 0x01, 0x34, 0x74, 0x01, 0xF0,
60484 +0x85, 0xD1, 0x4D, 0x85, 0xD2, 0x4E, 0x85, 0xD3, 0x4F, 0x85, 0xD4, 0x50, 0x85, 0xD5, 0x51, 0x85,
60485 +0xD6, 0x52, 0x85, 0xD7, 0x53, 0x85, 0xD9, 0x54, 0xE5, 0x54, 0x54, 0x40, 0xC3, 0x13, 0xFF, 0xE5,
60486 +0x53, 0x54, 0x20, 0x6F, 0x70, 0x02, 0x41, 0x46, 0xE5, 0x54, 0x30, 0xE5, 0x02, 0x41, 0x46, 0xE5,
60487 +0x52, 0x54, 0x1F, 0xF5, 0x08, 0xE5, 0x4D, 0x54, 0x3F, 0xF5, 0x09, 0xE5, 0x51, 0x54, 0x1F, 0xFF,
60488 +0xE5, 0x08, 0x25, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0,
60489 +0x12, 0x42, 0x81, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82,
60490 +0xE4, 0x34, 0x85, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5, 0x09, 0xD3, 0x94, 0x04,
60491 +0x40, 0x03, 0x75, 0x09, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x08, 0x90, 0x84, 0x00, 0x12, 0x43, 0x5F,
60492 +0x75, 0xF0, 0x02, 0xE5, 0x09, 0x12, 0x43, 0x5F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xE5, 0x53, 0x54,
60493 +0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x08, 0x90, 0x84, 0x00, 0x12, 0x43,
60494 +0x5F, 0x75, 0xF0, 0x02, 0xE5, 0x09, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5, 0x54,
60495 +0x20, 0xE6, 0x24, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82,
60496 +0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5, 0x4F, 0x30, 0xE7, 0x36,
60497 +0xAF, 0x08, 0x12, 0x5C, 0xC3, 0x80, 0x2F, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0,
60498 +0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5,
60499 +0x4F, 0x30, 0xE7, 0x12, 0xE5, 0x4F, 0x54, 0x7F, 0xFD, 0xE5, 0x53, 0x54, 0x1F, 0xF5, 0x0D, 0xAB,
60500 +0x09, 0xAF, 0x08, 0x12, 0x5C, 0x66, 0xE5, 0x24, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x3A, 0x90,
60501 +0x8B, 0x1A, 0xE0, 0x60, 0x2B, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0,
60502 +0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x21, 0x90, 0x8B, 0x3D, 0x12, 0x4B, 0x5C, 0x90, 0x01,
60503 +0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x18, 0xF0, 0x80, 0x09,
60504 +0x12, 0x4B, 0x34, 0xBF, 0x01, 0x03, 0x12, 0x4A, 0xFC, 0xE5, 0x2C, 0x30, 0xE1, 0x21, 0x90, 0x01,
60505 +0x34, 0x74, 0x02, 0xF0, 0x85, 0xD1, 0x56, 0x85, 0xD2, 0x57, 0x85, 0xD3, 0x58, 0x85, 0xD4, 0x59,
60506 +0x85, 0xD5, 0x5A, 0x85, 0xD6, 0x5B, 0x85, 0xD7, 0x5C, 0x85, 0xD9, 0x5D, 0x12, 0x5F, 0xA4, 0xE5,
60507 +0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90,
60508 +0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x55, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF,
60509 +0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8,
60510 +0x00, 0x75, 0xE8, 0x00, 0x12, 0x51, 0x9D, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x52,
60511 +0x0E, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x2D, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0x90, 0x8B,
60512 +0x32, 0xE0, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x05, 0x90, 0x8B, 0x34, 0xE4,
60513 +0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x05,
60514 +0x90, 0x8B, 0x2E, 0xE4, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x61, 0xE6, 0x90, 0x8B, 0x08, 0x74,
60515 +0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x8B, 0x06, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05,
60516 +0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30,
60517 +0xE0, 0x2F, 0x90, 0x8B, 0x37, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xFF, 0x13, 0x13, 0x54,
60518 +0x3F, 0x30, 0xE0, 0x1D, 0x90, 0x8B, 0x34, 0x74, 0x01, 0xF0, 0xB1, 0x39, 0x90, 0x8B, 0x33, 0xE0,
60519 +0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x05, 0x7F, 0x04, 0x12, 0x4E,
60520 +0x89, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x55, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x4E,
60521 +0x90, 0x8B, 0x2E, 0x74, 0x01, 0xF0, 0xB1, 0x39, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x3E,
60522 +0xB1, 0x5F, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0x64, 0x06, 0x60,
60523 +0x2D, 0xEF, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF,
60524 +0x80, 0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D,
60525 +0xE0, 0xB4, 0x02, 0x04, 0x7F, 0x01, 0xB1, 0x82, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x43,
60526 +0xE7, 0x90, 0x8B, 0x08, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE1, 0x2F, 0x90, 0x01, 0x36, 0x74, 0x02,
60527 +0xF0, 0x43, 0x55, 0x40, 0x11, 0x84, 0x90, 0x8B, 0x37, 0xE0, 0xB4, 0x01, 0x09, 0x90, 0x05, 0x22,
60528 +0xE4, 0xF0, 0x90, 0x8B, 0x37, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x0D, 0xE4, 0xFF, 0x12,
60529 +0x4D, 0xE0, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x16, 0x90,
60530 +0x01, 0x36, 0x74, 0x04, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x06, 0xA3, 0xE0, 0x64, 0x06,
60531 +0x60, 0x03, 0x12, 0x46, 0xB3, 0xE5, 0x2E, 0x30, 0xE3, 0x38, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0,
60532 +0xE5, 0x21, 0x64, 0x01, 0x70, 0x2C, 0xE5, 0x24, 0x60, 0x28, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90,
60533 +0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x3D, 0xE4, 0xF0, 0x90, 0x8B, 0x11, 0xE0, 0x90, 0x8B,
60534 +0x3E, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74,
60535 +0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B, 0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x21, 0xB4,
60536 +0x01, 0x20, 0xE5, 0x24, 0x60, 0x1C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02,
60537 +0xF0, 0x90, 0x8B, 0x1B, 0xE4, 0xF0, 0x53, 0x25, 0xFD, 0xE5, 0x25, 0x54, 0x07, 0x70, 0x03, 0x12,
60538 +0x4A, 0xFC, 0xE5, 0x2E, 0x30, 0xE5, 0x1F, 0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x21, 0xB4,
60539 +0x01, 0x14, 0xE5, 0x24, 0x60, 0x10, 0x90, 0x8B, 0x1A, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x4A,
60540 +0x97, 0x80, 0x03, 0x12, 0x49, 0x49, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40,
60541 +0xF0, 0xE5, 0x21, 0xB4, 0x01, 0x10, 0xE5, 0x24, 0x60, 0x0C, 0x53, 0x25, 0xFE, 0xE5, 0x25, 0x54,
60542 +0x07, 0x70, 0x03, 0x12, 0x4A, 0xFC, 0xE5, 0x2F, 0x30, 0xE1, 0x28, 0x90, 0x01, 0x37, 0x74, 0x02,
60543 +0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x18, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x08,
60544 +0x12, 0x48, 0xFE, 0x12, 0x7D, 0xC1, 0x80, 0x0B, 0x90, 0x8B, 0x31, 0x74, 0x01, 0xF0, 0x80, 0x03,
60545 +0x12, 0x48, 0xFE, 0x74, 0xF2, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0xD0, 0x07,
60546 +0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
60547 +0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x05,
60548 +0x58, 0xE0, 0xFF, 0x90, 0x8B, 0x38, 0xE0, 0x2F, 0x24, 0xFE, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB,
60549 +0xFD, 0x7F, 0x50, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x53, 0x74, 0x05, 0xF0, 0x22, 0x90,
60550 +0x8B, 0x2C, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0A, 0xA3, 0xE0, 0x64, 0x06,
60551 +0x60, 0x04, 0x7F, 0x06, 0xB1, 0x82, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x03, 0x12, 0x78,
60552 +0x35, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0x6F, 0x70,
60553 +0x02, 0xE1, 0x4E, 0xEF, 0x12, 0x43, 0x94, 0x65, 0xB0, 0x00, 0x65, 0xEA, 0x01, 0x66, 0x30, 0x02,
60554 +0x66, 0x6A, 0x03, 0x66, 0xA2, 0x04, 0x66, 0xDB, 0x05, 0x67, 0x16, 0x06, 0x00, 0x00, 0x67, 0x4E,
60555 +0xEE, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xF1, 0x81, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0xB4,
60556 +0x05, 0x04, 0xF1, 0x5D, 0xE1, 0x4E, 0xEF, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xF1, 0x72, 0x80, 0x16,
60557 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1, 0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D,
60558 +0xE0, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0xF1, 0xA4, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04,
60559 +0x06, 0x7F, 0x01, 0xF1, 0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D,
60560 +0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xF1, 0x9A, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4,
60561 +0x06, 0x06, 0x7F, 0x01, 0xF1, 0x72, 0xE1, 0x4E, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1, 0x53,
60562 +0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x02, 0x60, 0x02, 0xE1, 0x4E, 0xF1, 0x67, 0xE1, 0x4E,
60563 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xF1, 0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D,
60564 +0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D, 0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xF1, 0x9A, 0x80, 0x16,
60565 +0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xF1, 0x72, 0x80, 0x08, 0xEE, 0xB4,
60566 +0x03, 0x04, 0x7F, 0x01, 0xF1, 0x53, 0xF1, 0xD0, 0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04,
60567 +0x06, 0x7F, 0x01, 0xF1, 0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D,
60568 +0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xF1, 0x9A, 0x80, 0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4,
60569 +0x06, 0x06, 0xE4, 0xFF, 0xF1, 0x72, 0x80, 0x06, 0xEE, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0xF1, 0xB9,
60570 +0xE1, 0x4E, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xF1, 0x72, 0x80, 0x13,
60571 +0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1, 0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02,
60572 +0x02, 0xF1, 0x67, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01, 0x04, 0xF1, 0xA4, 0x80, 0x09, 0x90, 0x8B,
60573 +0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D, 0xF1, 0xAF, 0x80, 0x73, 0x90, 0x8B, 0x2D, 0xE0, 0xFE,
60574 +0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xF1, 0x72, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xF1,
60575 +0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0x90, 0x8B, 0x2D, 0xE0,
60576 +0xB4, 0x01, 0x04, 0xF1, 0xA4, 0x80, 0x0B, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x04, 0x7F, 0x01,
60577 +0xF1, 0x81, 0xF1, 0xC3, 0x80, 0x38, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xF1,
60578 +0x81, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xF1, 0x5D, 0x90, 0x8B, 0x2D, 0xE0,
60579 +0x70, 0x04, 0xF1, 0x9A, 0x80, 0x16, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x06, 0xE4, 0xFF, 0xF1,
60580 +0x53, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x02, 0xF1, 0x67, 0xF1, 0xDD, 0xD0, 0xD0,
60581 +0x92, 0xAF, 0x22, 0x12, 0x4A, 0xB2, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x05, 0x22,
60582 +0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0x04,
60583 +0xF0, 0x22, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0,
60584 +0x22, 0x90, 0x8B, 0x56, 0xEF, 0xF0, 0x12, 0x7D, 0x42, 0x90, 0x8B, 0x56, 0xE0, 0x60, 0x05, 0x90,
60585 +0x05, 0x22, 0xE4, 0xF0, 0xE4, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x12, 0x4A, 0xCC, 0x90, 0x8B, 0x2D,
60586 +0x74, 0x01, 0xF0, 0x22, 0x7F, 0x01, 0x12, 0x4A, 0x7C, 0xE4, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x12,
60587 +0x7C, 0x4A, 0x90, 0x8B, 0x2D, 0x74, 0x04, 0xF0, 0x22, 0x12, 0x4A, 0x32, 0x90, 0x8B, 0x2D, 0x74,
60588 +0x03, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x05, 0xF0, 0x22,
60589 +0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22,
60590 +0x74, 0x6F, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x06, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
60591 +0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30, 0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10,
60592 +0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29,
60593 +0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90, 0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3,
60594 +0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B, 0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31,
60595 +0x10, 0xE4, 0xF5, 0x32, 0x90, 0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5,
60596 +0x32, 0xF0, 0x22, 0x22, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xE0, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00,
60597 +0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x09,
60598 +0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33, 0x22,
60599 +0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74,
60600 +0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0xA0, 0xF0,
60601 +0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x06,
60602 +0xC0, 0x07, 0x7D, 0x91, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x68, 0xFF, 0xA3, 0xF0, 0x53, 0x91,
60603 +0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00, 0x52,
60604 +0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90, 0x00,
60605 +0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0, 0xE5,
60606 +0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06, 0x90,
60607 +0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01, 0xF0,
60608 +0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2, 0x06,
60609 +0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74, 0x08,
60610 +0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
60611 +0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30,
60612 +0xE0, 0x17, 0xED, 0xC4, 0x54, 0xF0, 0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4,
60613 +0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5,
60614 +0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4,
60615 +0x34, 0x04, 0xF5, 0x83, 0xE0, 0x4D, 0xF0, 0x22, 0xAD, 0x07, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4,
60616 +0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x8A, 0xDE, 0xF0, 0xE0, 0xF9, 0x54, 0x1F, 0xA3,
60617 +0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0xFF, 0x90, 0x8A, 0xE1,
60618 +0xF0, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFB, 0xA3,
60619 +0xE0, 0x90, 0x8A, 0xE2, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82,
60620 +0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE4, 0xCB, 0xF0, 0xA3, 0xEB,
60621 +0xF0, 0x90, 0x8A, 0xDF, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5,
60622 +0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4,
60623 +0x34, 0x86, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE, 0xC3, 0x9F, 0x40, 0x02, 0x41, 0xB9,
60624 +0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF,
60625 +0xF0, 0xEF, 0x04, 0x90, 0x8A, 0xE0, 0xF0, 0x90, 0x8A, 0xE1, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0,
60626 +0xFE, 0xD3, 0x9F, 0x40, 0x02, 0x41, 0xF3, 0xEE, 0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0,
60627 +0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
60628 +0xF9, 0xFF, 0x90, 0x8A, 0xE2, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x8A,
60629 +0xE0, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
60630 +0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE4, 0xE0, 0x5E, 0xFE, 0xA3,
60631 +0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x8A, 0xE0, 0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x8A, 0xE3, 0xE0,
60632 +0x30, 0xE7, 0x06, 0x90, 0x8A, 0xE0, 0x74, 0x17, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xFF, 0x64, 0x13,
60633 +0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x8A, 0xE2, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x8A, 0xE0,
60634 +0x74, 0x18, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0x80,
60635 +0x42, 0x90, 0x8A, 0xE0, 0xE0, 0x04, 0xF0, 0x41, 0x17, 0x90, 0x8A, 0xE1, 0xE0, 0xFC, 0x90, 0x8A,
60636 +0xDF, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83,
60637 +0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x29, 0x12, 0x43, 0x5F, 0xE0, 0xB4, 0x01, 0x10,
60638 +0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x8A, 0xDF, 0xE0, 0x44, 0x40, 0x90, 0x8A, 0xDE, 0xF0, 0x80, 0x03,
60639 +0xAF, 0x01, 0x22, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
60640 +0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
60641 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
60642 +0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
60643 +0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90, 0x8A, 0xDF, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90,
60644 +0x8A, 0xE1, 0xE0, 0xFF, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0,
60645 +0x90, 0x8A, 0xDF, 0xEF, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24,
60646 +0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF,
60647 +0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF,
60648 +0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82,
60649 +0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D,
60650 +0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x05, 0x90, 0x8A, 0xDE, 0xE0, 0x44,
60651 +0x80, 0xFD, 0x12, 0x5C, 0x4E, 0x90, 0x8A, 0xDE, 0xE0, 0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x8A,
60652 +0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x40, 0x03, 0x02, 0x72, 0x54, 0x75,
60653 +0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2A, 0x12, 0x43, 0x5F, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x72,
60654 +0x4B, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83,
60655 +0xE0, 0xFC, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEC, 0x94, 0x00, 0x50, 0x03, 0x02, 0x72, 0x4B, 0xEF,
60656 +0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75, 0x12, 0x01, 0xF5, 0x13,
60657 +0x89, 0x14, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5,
60658 +0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x8A, 0xD4, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0,
60659 +0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x8A, 0xD6,
60660 +0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34,
60661 +0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x8A, 0xD0, 0xF0, 0xE0, 0xFD, 0x54, 0x1F, 0xA3, 0xF0,
60662 +0x75, 0xF0, 0x09, 0xEE, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD9, 0xF0, 0x90,
60663 +0x8A, 0xCF, 0xE0, 0xFB, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xC3, 0x94,
60664 +0x05, 0x40, 0x02, 0xC1, 0x9C, 0x90, 0x8A, 0xD9, 0xE0, 0xFE, 0x90, 0x8A, 0xD1, 0xE0, 0x9E, 0x40,
60665 +0x13, 0x90, 0x8A, 0xD9, 0xE0, 0x90, 0x8A, 0xD1, 0xF0, 0xED, 0x54, 0x40, 0xFD, 0x90, 0x8A, 0xD0,
60666 +0xF0, 0xEE, 0x4D, 0xF0, 0x90, 0x8A, 0xD1, 0xE0, 0xFF, 0x90, 0x41, 0x12, 0x93, 0xFE, 0x74, 0x23,
60667 +0x2B, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40, 0x06, 0xEF, 0x90, 0x40,
60668 +0xDA, 0x80, 0x07, 0x90, 0x8A, 0xD1, 0xE0, 0x90, 0x40, 0xF6, 0x93, 0x90, 0x8A, 0xD8, 0xF0, 0x90,
60669 +0x8A, 0xD8, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x50, 0xF9, 0x74, 0x40, 0x35, 0xF0, 0x75, 0x0F,
60670 +0xFF, 0xF5, 0x10, 0x89, 0x11, 0x90, 0x8A, 0xD0, 0xE0, 0x90, 0x41, 0xBA, 0x93, 0xFF, 0xD3, 0x90,
60671 +0x8A, 0xD7, 0xE0, 0x9F, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x8A, 0xCF, 0xE0,
60672 +0xFF, 0xE4, 0xFD, 0x12, 0x5D, 0x41, 0x02, 0x71, 0xE1, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24,
60673 +0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x8A, 0xD2, 0xCF,
60674 +0xF0, 0xA3, 0xEF, 0xF0, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x12, 0x24, 0x62, 0xFF, 0x7E, 0x00,
60675 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x97, 0xFD, 0xAC, 0xF0, 0x12, 0x24, 0x7B, 0x90,
60676 +0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00,
60677 +0x01, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x02,
60678 +0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x24, 0x7B, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12,
60679 +0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x7E,
60680 +0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0,
60681 +0x12, 0x24, 0x7B, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10,
60682 +0xA9, 0x11, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9,
60683 +0x14, 0x90, 0x00, 0x06, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x24, 0x7B, 0x90, 0x8A, 0xD2,
60684 +0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x04, 0x12,
60685 +0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x08, 0x12, 0x42,
60686 +0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x24, 0x7B, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81,
60687 +0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x05, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0x90,
60688 +0x8A, 0xD4, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x24, 0x7B, 0xD3, 0x90, 0x8A, 0xD3, 0xE0, 0x9F,
60689 +0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x8A, 0xD2, 0xE0, 0x9E,
60690 +0xF0, 0x80, 0x07, 0xE4, 0x90, 0x8A, 0xD2, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xD2, 0xE0, 0xFC, 0xA3,
60691 +0xE0, 0xFD, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86,
60692 +0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x8A, 0xD0, 0xE0, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
60693 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xD3, 0xED, 0x9B,
60694 +0xEC, 0x9A, 0x40, 0x05, 0x31, 0x78, 0x02, 0x71, 0xAF, 0x90, 0x8A, 0xD0, 0xE0, 0x25, 0xE0, 0x24,
60695 +0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3,
60696 +0x90, 0x8A, 0xD3, 0xE0, 0x9F, 0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x40, 0x03, 0x02, 0x71, 0xAF, 0x90,
60697 +0x8A, 0xCF, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5D, 0x41, 0x02, 0x71, 0xAF, 0x90, 0x8A, 0xCF, 0xE0,
60698 +0xFF, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x03,
60699 +0x02, 0x70, 0x7D, 0x90, 0x87, 0x22, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3,
60700 +0x94, 0x19, 0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3, 0x94,
60701 +0x11, 0x40, 0x2E, 0x80, 0x1F, 0x90, 0x87, 0x22, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x8A, 0xD1,
60702 +0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x8A, 0xD1, 0xE0, 0xC3,
60703 +0x94, 0x03, 0x40, 0x0D, 0x90, 0x89, 0x43, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x89, 0x43,
60704 +0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0,
60705 +0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x23, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE,
60706 +0xC3, 0x94, 0x30, 0x50, 0x0B, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x64, 0x2F, 0x02, 0x70, 0x28,
60707 +0x90, 0x89, 0x43, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x70, 0x1D, 0x90, 0x8A, 0xCF, 0xE0, 0x24,
60708 +0x44, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x8A, 0xCF,
60709 +0xE0, 0xFF, 0xEE, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
60710 +0x86, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38,
60711 +0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x23, 0x2E, 0xF5,
60712 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
60713 +0x50, 0x16, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0,
60714 +0xFF, 0x90, 0x8A, 0xD1, 0xE0, 0x6F, 0x60, 0x56, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x23, 0xF5, 0x82,
60715 +0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x8A, 0xDD, 0x74,
60716 +0x05, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0x39, 0x90, 0x8A, 0xDD, 0x40, 0x05, 0x74, 0x03, 0xF0,
60717 +0x80, 0x03, 0x74, 0x01, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x23, 0xF5, 0x82, 0xE4, 0x34,
60718 +0x89, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE,
60719 +0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x44, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0x80, 0x2F, 0x90, 0x8A,
60720 +0xCF, 0xE0, 0xFF, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x44,
60721 +0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x8A,
60722 +0xDD, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4,
60723 +0xF0, 0x90, 0x8A, 0xD1, 0xE0, 0xFE, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x84, 0xF5, 0x82, 0xE4,
60724 +0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFE, 0x74, 0x43, 0x2F, 0xF5, 0x82,
60725 +0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2B, 0x12, 0x43,
60726 +0x5F, 0xE0, 0xB4, 0x01, 0x11, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x64, 0x2F, 0xF5, 0x82, 0xE4,
60727 +0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFD, 0x21, 0xAC, 0xEC, 0x64, 0x06,
60728 +0x60, 0x02, 0x21, 0xAF, 0x90, 0x8A, 0xD2, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xDB, 0x93, 0xFF, 0x7E,
60729 +0x00, 0x90, 0x8A, 0xD4, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x24, 0x7B, 0x90, 0x8A, 0xDB, 0xEE,
60730 +0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
60731 +0x83, 0xE0, 0x90, 0x8A, 0xDD, 0xF0, 0xE4, 0x90, 0x8A, 0xDA, 0xF0, 0x90, 0x8A, 0xDA, 0xE0, 0xFF,
60732 +0xD3, 0x94, 0x04, 0x50, 0x47, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x75, 0xF0, 0x02, 0xEF, 0xA4,
60733 +0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xD6, 0x93,
60734 +0xFF, 0x7E, 0x00, 0x12, 0x24, 0x7B, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0x90,
60735 +0x8A, 0xDB, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x8A, 0xD3, 0xE0, 0x9F, 0x90, 0x8A, 0xD2,
60736 +0xE0, 0x9E, 0x50, 0x08, 0x90, 0x8A, 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x8A, 0xDA, 0xE0,
60737 +0xC3, 0x13, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x8A, 0xDA, 0xE0, 0x70,
60738 +0x5D, 0x90, 0x8A, 0xDD, 0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x8A, 0xDA, 0xE0,
60739 +0xFF, 0x70, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90,
60740 +0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90, 0x8A, 0xDD, 0xE0, 0x64, 0x05, 0x70,
60741 +0x32, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x05, 0xF0, 0x80, 0x0F,
60742 +0xEF, 0x90, 0x8A, 0xDD, 0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3,
60743 +0x90, 0x8A, 0xD7, 0xE0, 0x94, 0x03, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90,
60744 +0x8A, 0xDD, 0xF0, 0xD3, 0x90, 0x8A, 0xD7, 0xE0, 0x94, 0x03, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00,
60745 +0x40, 0x05, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFD, 0x90, 0x8A, 0xCF, 0xE0,
60746 +0xFF, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xED, 0xF0, 0x12, 0x69, 0x38, 0x90,
60747 +0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xD3, 0x94,
60748 +0x05, 0x50, 0x0F, 0x74, 0x64, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0x04, 0xF0,
60749 +0x80, 0x0F, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4,
60750 +0xF0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0xE4, 0xF5, 0xF0, 0x12, 0x42, 0xFA, 0xAB, 0x12, 0xAA,
60751 +0x13, 0xA9, 0x14, 0x90, 0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00, 0x04, 0xE4,
60752 +0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00,
60753 +0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0xC0,
60754 +0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x63,
60755 +0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA3,
60756 +0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04,
60757 +0xF0, 0x02, 0x6B, 0xC2, 0x22, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0xC3,
60758 +0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE4, 0xF0,
60759 +0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF,
60760 +0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x40, 0x02, 0x81, 0x0E, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00,
60761 +0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43,
60762 +0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x5F, 0xE4,
60763 +0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3,
60764 +0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x74,
60765 +0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x44, 0x2F, 0xF5,
60766 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x43, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88,
60767 +0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83,
60768 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
60769 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
60770 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
60771 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
60772 +0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
60773 +0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x44, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0,
60774 +0x74, 0x24, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x64, 0x2F, 0xF5,
60775 +0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x41, 0x8C, 0x93, 0xFE, 0x74, 0x01, 0x93,
60776 +0xFF, 0x90, 0x41, 0x54, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF,
60777 +0x13, 0xFF, 0x90, 0x8A, 0xCF, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86,
60778 +0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x29, 0x12, 0x43,
60779 +0x5F, 0x74, 0x01, 0xF0, 0x74, 0xC1, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0x74, 0x0C,
60780 +0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0x74, 0xFF, 0xF0, 0xA3, 0xF0,
60781 +0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x23, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0,
60782 +0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09,
60783 +0xED, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
60784 +0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x41, 0x7D, 0x22, 0x12,
60785 +0x24, 0x62, 0xFF, 0xC3, 0x94, 0x20, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFE, 0x74,
60786 +0x23, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4, 0x20, 0x0A,
60787 +0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0x90, 0x87, 0x21, 0xF0, 0x22, 0x90, 0x8B, 0x4B, 0xEE, 0xF0,
60788 +0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x8B, 0x4B, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5,
60789 +0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3, 0x90, 0x8B, 0x4E, 0xE0, 0x94, 0xE8, 0x90, 0x8B, 0x4D,
60790 +0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90,
60791 +0x8B, 0x4D, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x32, 0x15,
60792 +0x80, 0xC6, 0x7F, 0x01, 0x22, 0x12, 0x24, 0x62, 0xF5, 0x21, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
60793 +0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x25, 0x14, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x01, 0x12,
60794 +0x42, 0x20, 0x90, 0x8B, 0x1A, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x0A, 0xF0,
60795 +0x12, 0x47, 0xFA, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x30,
60796 +0xE0, 0x25, 0x12, 0x24, 0x62, 0x90, 0x8B, 0x10, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x90,
60797 +0x8B, 0x11, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x8B, 0x0F, 0xF0, 0x90, 0x00, 0x03, 0x12,
60798 +0x42, 0x20, 0x90, 0x8B, 0x16, 0xF0, 0x22, 0x90, 0x8B, 0x10, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x11,
60799 +0x74, 0x05, 0xF0, 0x90, 0x8B, 0x0F, 0x74, 0x14, 0xF0, 0x90, 0x8B, 0x16, 0x74, 0x05, 0xF0, 0x22,
60800 +0x12, 0x24, 0x62, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x8B, 0x15, 0xF0, 0x90, 0x00,
60801 +0x01, 0x12, 0x42, 0x20, 0xFF, 0x90, 0x8B, 0x13, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90,
60802 +0x8B, 0x15, 0x74, 0x05, 0xF0, 0x90, 0x8B, 0x13, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x8B,
60803 +0x13, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x24, 0x62, 0x90, 0x8B, 0x12, 0xF0,
60804 +0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x90, 0x8B, 0x12, 0xE0, 0x90, 0x01, 0xE7,
60805 +0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x24, 0x62, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90,
60806 +0x8A, 0xF7, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xF8, 0xF0,
60807 +0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xF9, 0xF0, 0x90, 0x00, 0x03,
60808 +0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xFA, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x42, 0x20,
60809 +0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x8A, 0xFB, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
60810 +0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x8B, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x12, 0x24, 0x62, 0xC3,
60811 +0x13, 0x20, 0xE0, 0x02, 0xC1, 0xED, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x24, 0x62, 0xFF,
60812 +0x54, 0x02, 0xFE, 0x90, 0x8B, 0x32, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF,
60813 +0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x24, 0x62, 0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7,
60814 +0x4D, 0xFF, 0x90, 0x8B, 0x32, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0,
60815 +0x12, 0x24, 0x62, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, 0x90, 0x8B, 0x32, 0xF0,
60816 +0xEE, 0x54, 0x40, 0xFE, 0xEF, 0x54, 0xBF, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xC1, 0xD9, 0x90, 0x8A,
60817 +0xDD, 0x74, 0x21, 0xF0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x24, 0x62, 0xFF, 0x13, 0x13,
60818 +0x54, 0x01, 0xFE, 0x90, 0x8B, 0x32, 0xE0, 0xFD, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x60, 0x2A, 0xEF,
60819 +0x54, 0x04, 0xFF, 0xED, 0x54, 0xFB, 0x4F, 0xF0, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0E,
60820 +0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x31, 0x9D, 0x80, 0x0B, 0xE4, 0x90,
60821 +0x8B, 0x34, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x31, 0x2C, 0x90, 0x8B, 0x32, 0xE0, 0xFD, 0x13, 0x13,
60822 +0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x12, 0xF0, 0xED, 0xC4, 0x54,
60823 +0x0F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x14, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xC4,
60824 +0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x8B, 0x32,
60825 +0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x40, 0xF0,
60826 +0x90, 0x8A, 0xDD, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x70, 0x05, 0x7F, 0x01,
60827 +0x12, 0x4E, 0x89, 0x90, 0x8B, 0x32, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x04, 0x7F,
60828 +0x03, 0x80, 0x0E, 0x7F, 0x01, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F,
60829 +0x02, 0x12, 0x4E, 0x89, 0x7F, 0x02, 0x02, 0x78, 0x2E, 0x90, 0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x90,
60830 +0x05, 0x27, 0xF0, 0xE4, 0xFF, 0x12, 0x4E, 0x89, 0x7F, 0x03, 0x02, 0x78, 0x2E, 0x90, 0x8A, 0xDA,
60831 +0x12, 0x43, 0x6B, 0x12, 0x24, 0x62, 0xFF, 0x54, 0x02, 0xFE, 0x90, 0x8B, 0x2C, 0xE0, 0x54, 0xFD,
60832 +0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF, 0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x24, 0x62,
60833 +0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x8B, 0x2C, 0xF0, 0xEE, 0x54, 0x10,
60834 +0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x24, 0x62, 0xFE, 0x54, 0x40, 0xFD, 0xEF, 0x54,
60835 +0xBF, 0x4D, 0xFF, 0x90, 0x8B, 0x2C, 0xF0, 0xEE, 0x54, 0x04, 0xFE, 0xEF, 0x54, 0xFB, 0x4E, 0xF0,
60836 +0x20, 0xE0, 0x02, 0xE1, 0xE2, 0x90, 0x8A, 0xDD, 0x74, 0x31, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x13,
60837 +0x13, 0x54, 0x3F, 0x20, 0xE0, 0x0B, 0xE4, 0x90, 0x8B, 0x2E, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x31,
60838 +0x2C, 0x90, 0x8B, 0x2C, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x8A,
60839 +0xDD, 0xE0, 0x44, 0x02, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0,
60840 +0x44, 0x04, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0x54, 0x06, 0x60, 0x0C, 0x90, 0x01, 0x3E, 0x74, 0x03,
60841 +0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x31, 0xB7, 0x90, 0x8A, 0xDD, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90,
60842 +0x8B, 0x2C, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x64, 0x06,
60843 +0x60, 0x2C, 0x7F, 0x06, 0x12, 0x65, 0x82, 0x80, 0x25, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x06, 0x1B,
60844 +0x7F, 0x01, 0x12, 0x65, 0x82, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x09, 0x7D, 0x01, 0xAF,
60845 +0x23, 0x12, 0x45, 0xA2, 0x80, 0x05, 0x12, 0x4E, 0x56, 0x80, 0x03, 0x12, 0x7D, 0xC1, 0x7F, 0x01,
60846 +0x80, 0x4C, 0x90, 0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27, 0xF0, 0x7D, 0x03, 0x7F, 0x02,
60847 +0x12, 0x31, 0x49, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x06, 0x02, 0x80, 0x1B, 0x90, 0x8B, 0x2D, 0xE0,
60848 +0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF, 0x80, 0x14,
60849 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4,
60850 +0x02, 0x05, 0x7F, 0x01, 0x12, 0x65, 0x82, 0x11, 0x35, 0x12, 0x4A, 0xFC, 0x7F, 0x03, 0x11, 0x42,
60851 +0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x8B, 0x31, 0xE0, 0xB4, 0x01, 0x05, 0xE4, 0xF0, 0x12, 0x48,
60852 +0xFE, 0x22, 0xAD, 0x07, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x15, 0x90, 0x8B, 0x32,
60853 +0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
60854 +0xA3, 0xF0, 0xED, 0x64, 0x02, 0x60, 0x04, 0xED, 0xB4, 0x03, 0x15, 0x90, 0x8B, 0x2C, 0xE0, 0x54,
60855 +0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
60856 +0x22, 0x12, 0x24, 0x62, 0x90, 0x8B, 0x38, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
60857 +0x90, 0x8A, 0xFD, 0xE0, 0x90, 0x8A, 0xE8, 0xF0, 0x90, 0x8A, 0xFE, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
60858 +0x8A, 0xE9, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0x90, 0x8A, 0xE4, 0xF0, 0x90, 0x8A, 0xE4, 0xE0,
60859 +0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x8B, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0xEB, 0x2F, 0xF5,
60860 +0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0x04, 0xF0, 0xE0, 0xB4,
60861 +0x04, 0xDA, 0x90, 0x8A, 0xE8, 0xE0, 0x12, 0x43, 0x94, 0x78, 0xF8, 0x00, 0x7A, 0x6B, 0x01, 0x79,
60862 +0x01, 0x02, 0x79, 0x01, 0x03, 0x79, 0x01, 0x04, 0x7A, 0x6B, 0x05, 0x7A, 0x35, 0x80, 0x7A, 0x4E,
60863 +0x81, 0x7A, 0x6B, 0x82, 0x00, 0x00, 0x7A, 0x67, 0x90, 0x8A, 0xEE, 0xE0, 0xFF, 0x51, 0x72, 0x41,
60864 +0x6B, 0x90, 0x8A, 0xE8, 0xE0, 0xFF, 0xB4, 0x02, 0x08, 0x90, 0x8A, 0xE5, 0x74, 0x01, 0xF0, 0x80,
60865 +0x0F, 0xEF, 0x90, 0x8A, 0xE5, 0xB4, 0x03, 0x05, 0x74, 0x02, 0xF0, 0x80, 0x03, 0x74, 0x04, 0xF0,
60866 +0xC3, 0x90, 0x8A, 0xE9, 0xE0, 0x94, 0x08, 0x50, 0x78, 0xE4, 0x90, 0x8A, 0xE4, 0xF0, 0x90, 0x8A,
60867 +0xE5, 0xE0, 0xFF, 0x90, 0x8A, 0xE4, 0xE0, 0xC3, 0x9F, 0x40, 0x02, 0x41, 0x6B, 0x90, 0x8A, 0xE9,
60868 +0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0xEE, 0x94, 0x01, 0x90, 0x8A, 0xE4, 0xE0, 0x50, 0x1F, 0xFE,
60869 +0x2F, 0xFF, 0xEE, 0xFD, 0xC3, 0x74, 0x03, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0xEB, 0x2D,
60870 +0xF5, 0x82, 0x74, 0x8A, 0x3C, 0xF5, 0x83, 0xE0, 0xFD, 0x12, 0x51, 0x88, 0x80, 0x2B, 0xFF, 0xFD,
60871 +0xC3, 0x74, 0x03, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0xEB, 0x2D, 0xF5, 0x82, 0x74, 0x8A,
60872 +0x3C, 0xF5, 0x83, 0xE0, 0xFE, 0xEF, 0xFD, 0x90, 0x8A, 0xEA, 0xE0, 0x2D, 0xFD, 0x90, 0x8A, 0xE9,
60873 +0xE0, 0x34, 0x00, 0x8D, 0x82, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0x04, 0xF0, 0x80,
60874 +0x8D, 0xC3, 0x90, 0x8A, 0xE9, 0xE0, 0x94, 0x10, 0x40, 0x02, 0x41, 0x6B, 0x90, 0x8A, 0xE8, 0xE0,
60875 +0x64, 0x04, 0x60, 0x02, 0x41, 0x6B, 0x90, 0x8A, 0xEC, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78,
60876 +0x10, 0x12, 0x24, 0xF5, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x8A, 0xEB, 0xE0,
60877 +0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, 0x12, 0x24, 0xF5, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01,
60878 +0xD0, 0x00, 0x12, 0x43, 0x46, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x8A, 0xED,
60879 +0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x08, 0x12, 0x24, 0xF5, 0xD0, 0x03, 0xD0, 0x02, 0xD0,
60880 +0x01, 0xD0, 0x00, 0x12, 0x43, 0x46, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0xA3, 0xE0,
60881 +0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x12, 0x43, 0x46, 0xA3, 0x12, 0x25, 0x08, 0x90, 0x8A, 0xEF, 0x12,
60882 +0x43, 0x53, 0x90, 0x80, 0x96, 0x12, 0x25, 0x08, 0x90, 0x8A, 0xE9, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
60883 +0x12, 0x2B, 0x08, 0x80, 0x36, 0x90, 0x8A, 0xED, 0xE0, 0xFE, 0xA3, 0xE0, 0x24, 0x00, 0xFF, 0xE4,
60884 +0x3E, 0xFE, 0x90, 0x8A, 0xE6, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x32, 0x15, 0x80, 0x1D, 0x90, 0x8A,
60885 +0xED, 0xE0, 0xFE, 0xA3, 0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x8A, 0xE6, 0xF0, 0xA3,
60886 +0xEF, 0xF0, 0x12, 0x31, 0x82, 0x80, 0x04, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92,
60887 +0xAF, 0x22, 0x8F, 0x0F, 0xE4, 0x90, 0x8A, 0xF3, 0xF0, 0xE5, 0x0F, 0x14, 0xFE, 0x90, 0x8A, 0xF3,
60888 +0xE0, 0xFF, 0xC3, 0x9E, 0x50, 0x0E, 0xEF, 0x04, 0xFD, 0x12, 0x2D, 0x4D, 0x90, 0x8A, 0xF3, 0xE0,
60889 +0x04, 0xF0, 0x80, 0xE5, 0xE5, 0x0F, 0x14, 0xFF, 0x7D, 0xFF, 0x12, 0x2D, 0x4D, 0x90, 0x8A, 0xF3,
60890 +0xE5, 0x0F, 0xF0, 0x90, 0x8A, 0xF3, 0xE0, 0xC3, 0x94, 0xFF, 0x50, 0x0F, 0xE0, 0xFF, 0x04, 0xFD,
60891 +0x12, 0x2D, 0x4D, 0x90, 0x8A, 0xF3, 0xE0, 0x04, 0xF0, 0x80, 0xE8, 0xAD, 0x0F, 0x7F, 0xFF, 0x02,
60892 +0x2D, 0x4D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0xA3, 0x74,
60893 +0x04, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x8A, 0xE2, 0xF0, 0xA3, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0x90,
60894 +0x8A, 0xE1, 0xF0, 0x12, 0x24, 0x62, 0xFF, 0x90, 0x8A, 0xE1, 0xE0, 0x2F, 0x90, 0x8A, 0xE0, 0xF0,
60895 +0x30, 0xE0, 0x0B, 0x90, 0x8A, 0xDB, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x80, 0x07, 0xE4, 0x90,
60896 +0x8A, 0xDB, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90,
60897 +0x8A, 0xDD, 0xE0, 0x24, 0x20, 0xF0, 0x90, 0x8A, 0xDB, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFC, 0x2D,
60898 +0xFF, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xFD, 0xF0, 0x74,
60899 +0x02, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0xEC, 0x2D, 0x24, 0x03, 0xF5,
60900 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0x90, 0x8A, 0xFE, 0xF0,
60901 +0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xDA, 0x74, 0x04, 0xF0, 0x90, 0x8A, 0xDB, 0xA3, 0xE0, 0xFF, 0xA3,
60902 +0xE0, 0x2F, 0xFF, 0x90, 0x8A, 0xDA, 0xE0, 0xFE, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
60903 +0xF5, 0x83, 0xE0, 0xFF, 0x74, 0xFC, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0,
60904 +0x90, 0x8A, 0xDA, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x08, 0xCF, 0x11, 0x89, 0xEF, 0x70, 0x45, 0x90,
60905 +0x01, 0xC3, 0xE0, 0x60, 0x2B, 0xC3, 0x90, 0x8A, 0xE3, 0xE0, 0x94, 0xE8, 0x90, 0x8A, 0xE2, 0xE0,
60906 +0x94, 0x03, 0x40, 0x09, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x79, 0x90, 0x8A, 0xE2,
60907 +0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x32, 0x15, 0x80, 0xCF,
60908 +0x90, 0x01, 0xC6, 0xE0, 0x90, 0x01, 0xC3, 0x30, 0xE2, 0x05, 0x74, 0xFE, 0xF0, 0x80, 0x57, 0x74,
60909 +0xFF, 0xF0, 0x80, 0x52, 0x90, 0x8A, 0xDD, 0xE0, 0xB4, 0x78, 0x2E, 0xE4, 0xF0, 0x90, 0x8A, 0xE0,
60910 +0xE0, 0x04, 0xF0, 0x90, 0x8A, 0xDB, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x64, 0x80, 0x90, 0x8A, 0xDB,
60911 +0x70, 0x05, 0xF0, 0xA3, 0xF0, 0x80, 0x06, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0x8A, 0xE0,
60912 +0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x80, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x24, 0x08, 0xF0,
60913 +0x90, 0x8A, 0xDE, 0x74, 0xFF, 0xF5, 0xF0, 0x12, 0x42, 0x81, 0x90, 0x8A, 0xDE, 0xE0, 0x70, 0x02,
60914 +0xA3, 0xE0, 0x60, 0x02, 0x61, 0x16, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x24, 0x62, 0x90, 0x8B,
60915 +0x05, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x06, 0xF0, 0x22, 0xE4, 0xF5, 0x61,
60916 +0x22, 0x91, 0x4A, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0,
60917 +0x7F, 0x78, 0x7E, 0x08, 0x12, 0x22, 0x65, 0x90, 0x8B, 0x1C, 0x12, 0x25, 0x08, 0x7F, 0x04, 0x7E,
60918 +0x0C, 0x12, 0x22, 0x65, 0x90, 0x8B, 0x20, 0x12, 0x25, 0x08, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x22,
60919 +0x65, 0x90, 0x8B, 0x24, 0x12, 0x25, 0x08, 0x90, 0x8B, 0x09, 0xE0, 0x90, 0x8B, 0x1C, 0xB4, 0x01,
60920 +0x0D, 0x12, 0x43, 0x53, 0xEF, 0x54, 0xC7, 0xFF, 0xED, 0x54, 0xC7, 0xFD, 0x80, 0x07, 0x12, 0x43,
60921 +0x53, 0xEF, 0x54, 0xC7, 0xFF, 0xEC, 0x90, 0x80, 0x96, 0x12, 0x25, 0x08, 0x7F, 0x78, 0x7E, 0x08,
60922 +0x12, 0x2B, 0x08, 0x90, 0x8B, 0x20, 0x12, 0x43, 0x53, 0xEF, 0x54, 0x0F, 0xFF, 0xEC, 0x90, 0x80,
60923 +0x96, 0x12, 0x25, 0x08, 0x7F, 0x04, 0x7E, 0x0C, 0x12, 0x2B, 0x08, 0x90, 0x8B, 0x24, 0x12, 0x43,
60924 +0x53, 0xEF, 0x44, 0x02, 0xFF, 0xEC, 0x90, 0x80, 0x96, 0x12, 0x25, 0x08, 0x7F, 0x00, 0x7E, 0x08,
60925 +0x12, 0x2B, 0x08, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x22, 0x65, 0x90, 0x8B, 0x28, 0x12, 0x25, 0x08,
60926 +0x90, 0x80, 0x96, 0x12, 0x25, 0x14, 0x00, 0x1B, 0x25, 0xA0, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2B,
60927 +0x08, 0x90, 0x80, 0x68, 0x12, 0x25, 0x14, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFD, 0xFF, 0x12, 0x30,
60928 +0x2C, 0x90, 0x8B, 0x09, 0xE0, 0xB4, 0x01, 0x11, 0x90, 0x80, 0x68, 0x12, 0x25, 0x14, 0x00, 0x00,
60929 +0x00, 0x00, 0xE4, 0xFD, 0x7F, 0x01, 0x12, 0x30, 0x2C, 0x90, 0x00, 0x11, 0xE0, 0x54, 0xF6, 0xF0,
60930 +0x02, 0x52, 0x0E, 0x91, 0x50, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74,
60931 +0xFF, 0xF0, 0x90, 0x8B, 0x33, 0x74, 0x04, 0xF0, 0x22, 0xB1, 0x42, 0x90, 0x8B, 0x33, 0x74, 0x04,
60932 +0xF0, 0x22, 0x90, 0x00, 0x11, 0xE0, 0x44, 0x09, 0xF0, 0x12, 0x52, 0x0E, 0x90, 0x8B, 0x1C, 0x12,
60933 +0x43, 0x53, 0x90, 0x80, 0x96, 0x12, 0x25, 0x08, 0x7F, 0x78, 0x7E, 0x08, 0x12, 0x2B, 0x08, 0x90,
60934 +0x8B, 0x20, 0x12, 0x43, 0x53, 0x90, 0x80, 0x96, 0x12, 0x25, 0x08, 0x7F, 0x04, 0x7E, 0x0C, 0x12,
60935 +0x2B, 0x08, 0x90, 0x8B, 0x24, 0x12, 0x43, 0x53, 0x90, 0x80, 0x96, 0x12, 0x25, 0x08, 0x7F, 0x00,
60936 +0x7E, 0x08, 0x12, 0x2B, 0x08, 0x90, 0x8B, 0x28, 0x12, 0x43, 0x53, 0x90, 0x80, 0x96, 0x12, 0x25,
60937 +0x08, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2B, 0x08, 0x90, 0x80, 0x68, 0x12, 0x25, 0x14, 0x00, 0x03,
60938 +0x2D, 0x95, 0xE4, 0xFD, 0xFF, 0x12, 0x30, 0x2C, 0x90, 0x8B, 0x09, 0xE0, 0xB4, 0x01, 0x11, 0x90,
60939 +0x80, 0x68, 0x12, 0x25, 0x14, 0x00, 0x03, 0x2D, 0x95, 0xE4, 0xFD, 0x7F, 0x01, 0x12, 0x30, 0x2C,
60940 +0x22, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x3C, 0xE5, 0x22, 0x54, 0x0F, 0x14, 0x60, 0x2E,
60941 +0x14, 0x60, 0x1E, 0x24, 0xFE, 0x60, 0x0E, 0x24, 0xF8, 0x70, 0x2A, 0xE4, 0x90, 0x8B, 0x2D, 0xF0,
60942 +0x90, 0x05, 0x22, 0xF0, 0x22, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x22, 0xE4, 0xF0,
60943 +0x22, 0x90, 0x8B, 0x2D, 0x74, 0x03, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0x90, 0x01,
60944 +0xC6, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0xAE, 0x07, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x18,
60945 +0x90, 0x8B, 0x2C, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x0C, 0xAF, 0x06, 0x7D, 0x01,
60946 +0x12, 0x45, 0xA2, 0xB1, 0xC1, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x01, 0x57, 0xE0, 0x60,
60947 +0x3C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x1B, 0xE0,
60948 +0x60, 0x07, 0xE4, 0xF0, 0x53, 0x25, 0xFD, 0x80, 0x24, 0x90, 0x8B, 0x0C, 0xE0, 0x04, 0xF0, 0x53,
60949 +0x25, 0xEF, 0x90, 0x8B, 0x10, 0xE0, 0xFF, 0x90, 0x8B, 0x0C, 0xE0, 0xD3, 0x9F, 0x40, 0x0E, 0xE5,
60950 +0x21, 0xB4, 0x01, 0x09, 0x90, 0x8B, 0x0D, 0xE0, 0x70, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x5B,
60951 +0xE0, 0x60, 0x10, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE4, 0x90,
60952 +0x8B, 0x18, 0xF0, 0x90, 0x01, 0x5F, 0xE0, 0x60, 0x10, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01,
60953 +0x3C, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x8B, 0x17, 0xF0, 0x22, 0xE4, 0x90, 0x8B, 0x4F, 0xF0, 0xA3,
60954 +0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3,
60955 +0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x8B, 0x50, 0xE0, 0x94, 0xE8, 0x90, 0x8B, 0x4F,
60956 +0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x32, 0x15, 0x90,
60957 +0x8B, 0x4F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x80, 0xC6, 0x00, 0xFB, 0x98};
60958
60959 -// ===================8723=========================================
60960 -u8 Rtl8192CUFwUMC8723ImgArray[UMC8723ImgArrayLength] = {
60961 -0xc1,0x88,0x02,0x00,0x39,0x00,0x01,0x00,0x09,0x09,0x16,0x47,0x80,0x3f,0x00,0x00,
60962 -0x29,0x29,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
60963 -0x02,0x74,0xc9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
60964 -0x00,0x00,0x00,0x02,0x59,0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
60965 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
60966 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
60967 -0x00,0x00,0x00,0x02,0x73,0xab,0x00,0x00,0x00,0x00,0x00,0x02,0x67,0xfe,0x00,0x00,
60968 -0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,0x00,0x04,0x06,0x05,0x04,0x02,
60969 -0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,0x08,0x06,0x00,0x08,0x0a,0x09,
60970 -0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,0x0a,0x09,0x08,0x00,0x00,0x08,
60971 -0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,0x00,0x18,0x22,0x21,0x20,0x18,
60972 -0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,0x20,0x08,0x00,0x20,0x22,0x21,
60973 -0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,0x22,0x20,0x18,0x08,0x00,0x20,
60974 -0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,0x00,0x30,0x31,0x2f,0x10,0x10,
60975 -0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,0x10,0x00,0x00,0x30,0x31,0x20,
60976 -0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,0x05,0x05,0x05,0x05,0x05,0x05,
60977 -0x05,0x07,0x07,0x07,0x08,0x0a,0x05,0x05,0x05,0x07,0x07,0x0a,0x0d,0x0e,0x05,0x05,
60978 -0x07,0x07,0x08,0x0c,0x14,0x14,0x05,0x05,0x05,0x05,0x09,0x09,0x09,0x09,0x0c,0x0e,
60979 -0x13,0x13,0x09,0x09,0x0a,0x0b,0x0d,0x11,0x13,0x13,0x09,0x09,0x09,0x09,0x0c,0x14,
60980 -0x15,0x15,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x05,0x05,
60981 -0x05,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,
60982 -0x05,0x05,0x09,0x09,0x09,0x09,0x0b,0x0d,0x10,0x12,0x05,0x09,0x0a,0x0c,0x0d,0x0e,
60983 -0x10,0x12,0x09,0x09,0x0e,0x0e,0x10,0x10,0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00,
60984 -0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,0x21,0x27,0x29,0x2a,0x00,0x00,
60985 -0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x18,
60986 -0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,0x00,0xc0,0x00,0xd8,0x00,0x50,
60987 -0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,0x01,0xe0,0x02,0x30,0x01,0x2c,
60988 -0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,0x06,0x40,0x07,0xd0,0x00,0x02,
60989 -0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x24,0x00,0x30,
60990 -0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,0x00,0x50,0x00,0x64,0x00,0xa0,
60991 -0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,0x00,0xf0,0x01,0x68,0x01,0xf4,
60992 -0x02,0x58,0x03,0x20,0x03,0xe8,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,
60993 -0x07,0x08,0x01,0x02,0x03,0x04,0x08,0x0f,0x23,0x3c,0x05,0x06,0x07,0x0f,0x19,0x32,
60994 -0x4b,0x64,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x01,0x02,
60995 -0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x22,0x1f,
60996 -0x1e,0x18,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
60997 -0x8f,0x17,0x74,0x42,0x90,0x01,0xc4,0xf0,0xa3,0x74,0x20,0xf0,0x74,0x84,0x25,0x17,
60998 -0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x7f,0x90,0x97,0x54,0xf0,0xe0,0xfb,
60999 -0x54,0x1f,0xff,0xa3,0xf0,0xe5,0x17,0x75,0xf0,0x08,0xa4,0x24,0x67,0xf5,0x82,0xe4,
61000 -0x34,0x93,0xf5,0x83,0xe0,0xfe,0x90,0x97,0x57,0xf0,0xe5,0x17,0x25,0xe0,0x24,0x81,
61001 -0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0xfd,0xa3,0xe0,0x90,0x97,0x58,0xcd,0xf0,
61002 -0xa3,0xed,0xf0,0xe5,0x17,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
61003 -0xe0,0xfd,0xa3,0xe0,0x90,0x97,0x5a,0xcd,0xf0,0xa3,0xed,0xf0,0xef,0xc3,0x9e,0x40,
61004 -0x03,0x02,0x43,0x56,0x90,0x01,0xc5,0x74,0x20,0xf0,0x90,0x97,0x55,0xe0,0xff,0x74,
61005 -0xa5,0x25,0x17,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xef,0xf0,0xef,0x04,0x90,0x97,
61006 -0x56,0xf0,0x90,0x97,0x57,0xe0,0xff,0x90,0x97,0x56,0xe0,0xfe,0xd3,0x9f,0x40,0x03,
61007 -0x02,0x43,0xa0,0xee,0xc3,0x94,0x10,0x40,0x21,0xee,0x24,0xf0,0xff,0x74,0x01,0x7e,
61008 -0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x97,
61009 -0x58,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x27,0x90,0x97,0x56,0xe0,0xff,0xc3,
61010 -0x94,0x10,0x50,0x59,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,
61011 -0x33,0xce,0xd8,0xf9,0xff,0x90,0x97,0x5a,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,
61012 -0x3c,0x90,0x97,0x56,0xe0,0xb4,0x11,0x0d,0x90,0x97,0x59,0xe0,0x30,0xe7,0x06,0x90,
61013 -0x97,0x56,0x74,0x17,0xf0,0x90,0x97,0x56,0xe0,0xff,0x64,0x13,0x60,0x04,0xef,0xb4,
61014 -0x12,0x0d,0x90,0x97,0x58,0xe0,0x30,0xe0,0x06,0x90,0x97,0x56,0x74,0x18,0xf0,0x90,
61015 -0x97,0x56,0xe0,0x90,0x97,0x55,0xf0,0x90,0x97,0x54,0xf0,0x80,0x53,0x90,0x97,0x56,
61016 -0xe0,0x04,0xf0,0x02,0x42,0xb2,0x90,0x97,0x57,0xe0,0xf9,0x90,0x97,0x55,0xe0,0xff,
61017 -0x69,0x60,0x03,0x02,0x43,0xe8,0x90,0x01,0xc5,0x74,0x40,0xf0,0x74,0xa5,0x25,0x17,
61018 -0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xef,0xf0,0xe5,0x17,0x75,0xf0,0x08,0xa4,0x24,
61019 -0x69,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xb4,0x01,0x14,0xeb,0x30,0xe6,0x06,
61020 -0x90,0x97,0x54,0xe0,0xff,0x22,0x90,0x97,0x55,0xe0,0x44,0x40,0x90,0x97,0x54,0xf0,
61021 -0x90,0x97,0x55,0xe0,0xff,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
61022 -0xe4,0x93,0xfc,0x74,0x01,0x93,0xfd,0xef,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,
61023 -0x41,0xf5,0x83,0x74,0x01,0x93,0x2d,0xff,0xe4,0x93,0x3c,0xc3,0x13,0xfe,0xef,0x13,
61024 -0xff,0xe4,0xfc,0xfd,0xe5,0x17,0x25,0xe0,0x25,0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,
61025 -0x92,0xf5,0x83,0x12,0x1d,0xa9,0x80,0x71,0x90,0x97,0x55,0xe0,0xd3,0x99,0x40,0x69,
61026 -0x90,0x01,0xc5,0x74,0x60,0xf0,0x90,0x97,0x57,0xe0,0xff,0x74,0xa5,0x25,0x17,0xf5,
61027 -0x82,0xe4,0x34,0x96,0xf5,0x83,0xef,0xf0,0x90,0x97,0x55,0xef,0xf0,0x90,0x97,0x54,
61028 -0xf0,0xfb,0xa3,0xe0,0xff,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
61029 -0xe4,0x93,0xfc,0x74,0x01,0x93,0xfd,0xef,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,
61030 -0x41,0xf5,0x83,0x74,0x01,0x93,0x2d,0xff,0xe4,0x93,0x3c,0xc3,0x13,0xfe,0xef,0x13,
61031 -0xff,0xe4,0xfc,0xfd,0xe5,0x17,0x25,0xe0,0x25,0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,
61032 -0x92,0xf5,0x83,0x12,0x1d,0xa9,0xaf,0x03,0x22,0x74,0x01,0x25,0x17,0xf5,0x82,0xe4,
61033 -0x34,0x92,0xf5,0x83,0xe4,0xf0,0x90,0x97,0x54,0xe0,0x44,0x80,0xff,0x74,0x84,0x25,
61034 -0x17,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xef,0xf0,0x22,0xef,0x14,0x60,0x20,0x14,
61035 -0x60,0x4b,0x24,0x02,0x70,0x78,0x90,0x97,0x69,0x74,0x02,0xf0,0x90,0x00,0x48,0xe0,
61036 -0x44,0x0c,0xf0,0x90,0x00,0x47,0xe0,0x44,0x08,0xf0,0x90,0x00,0x45,0x80,0x5b,0xe4,
61037 -0x90,0x97,0x69,0xf0,0x90,0x97,0x65,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,
61038 -0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x08,0x12,0x33,0xd8,0x90,
61039 -0x00,0x45,0xe0,0x44,0xef,0xf0,0xe0,0x54,0xef,0xf0,0xa3,0x80,0x2d,0x90,0x97,0x69,
61040 -0x74,0x01,0xf0,0x90,0x97,0x6f,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,
61041 -0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x08,0x12,0x33,0xd8,0x90,0x00,
61042 -0x45,0xe0,0x44,0x20,0xf0,0xe0,0x44,0x10,0xf0,0xa3,0xe0,0x44,0x10,0xf0,0x22,0xe4,
61043 -0xf5,0x61,0x22,0x02,0x7f,0x69,0x02,0x7f,0x70,0x74,0x45,0x90,0x01,0xc4,0xf0,0xa3,
61044 -0x74,0x09,0xf0,0xe4,0x90,0x97,0x3a,0xf0,0x90,0x97,0x3a,0xe0,0xff,0xc3,0x94,0x20,
61045 -0x40,0x03,0x02,0x4e,0x3a,0xef,0x75,0xf0,0x08,0xa4,0x24,0x6a,0xf5,0x82,0xe4,0x34,
61046 -0x93,0xf5,0x83,0xe0,0x64,0x01,0x60,0x03,0x02,0x4e,0x31,0x90,0x97,0x3a,0xe0,0x25,
61047 -0xe0,0x24,0xc0,0xf5,0x82,0xe4,0x34,0x91,0xf5,0x83,0xe0,0xfc,0xa3,0xe0,0xd3,0x94,
61048 -0x00,0xec,0x94,0x00,0x50,0x03,0x02,0x4e,0x31,0xef,0x75,0xf0,0x0a,0xa4,0x24,0x00,
61049 -0xf9,0x74,0x90,0x35,0xf0,0xfa,0x7b,0x01,0x8b,0x13,0xf5,0x14,0x89,0x15,0x90,0x97,
61050 -0x3a,0xe0,0x25,0xe0,0x24,0xc0,0xf5,0x82,0xe4,0x34,0x91,0xf5,0x83,0xe0,0xfd,0xa3,
61051 -0xe0,0x90,0x97,0x46,0xcd,0xf0,0xa3,0xed,0xf0,0xef,0x25,0xe0,0x24,0x63,0xf5,0x82,
61052 -0xe4,0x34,0x94,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x97,0x48,0xcf,0xf0,0xa3,0xef,
61053 -0xf0,0x90,0x00,0x02,0x12,0x66,0x20,0xff,0xae,0xf0,0x12,0x65,0xf5,0x2f,0xff,0xe5,
61054 -0xf0,0x3e,0x90,0x97,0x4f,0xf0,0xa3,0xef,0xf0,0x90,0x00,0x06,0x12,0x66,0x20,0xff,
61055 -0xae,0xf0,0x90,0x00,0x04,0x12,0x66,0x20,0x2f,0xff,0xe5,0xf0,0x3e,0x90,0x97,0x4d,
61056 -0xf0,0xa3,0xef,0xf0,0x90,0x00,0x08,0x12,0x66,0x20,0xff,0x90,0x97,0x4b,0xe5,0xf0,
61057 -0xf0,0xa3,0xef,0xf0,0x90,0x97,0x3a,0xe0,0xfe,0x24,0x84,0xf5,0x82,0xe4,0x34,0x04,
61058 -0xf5,0x83,0xe0,0x54,0x3f,0x90,0x97,0x3c,0xf0,0xe0,0xfd,0x54,0x1f,0xa3,0xf0,0xee,
61059 -0x75,0xf0,0x08,0xa4,0x24,0x67,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0x90,0x97,
61060 -0x51,0xf0,0x90,0x97,0x3a,0xe0,0xfb,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,
61061 -0xe0,0xc3,0x94,0x05,0x40,0x03,0x02,0x49,0xc2,0x90,0x97,0x51,0xe0,0xfe,0x90,0x97,
61062 -0x3d,0xe0,0x9e,0x40,0x13,0x90,0x97,0x51,0xe0,0x90,0x97,0x3d,0xf0,0xed,0x54,0x40,
61063 -0xfd,0x90,0x97,0x3c,0xf0,0xee,0x4d,0xf0,0x90,0x04,0xfd,0xe0,0x64,0x01,0x70,0x28,
61064 -0x90,0x97,0x3d,0xe0,0xff,0x90,0x41,0x4a,0x93,0xfe,0x74,0x23,0x2b,0xf5,0x82,0xe4,
61065 -0x34,0x95,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x41,0x12,0x80,0x32,0x90,
61066 -0x97,0x3d,0xe0,0x90,0x41,0x2e,0x80,0x29,0x90,0x97,0x3d,0xe0,0xff,0x90,0x41,0x4a,
61067 -0x93,0xfe,0x90,0x97,0x3a,0xe0,0x24,0x23,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,
61068 -0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xda,0x80,0x07,0x90,0x97,0x3d,0xe0,0x90,0x40,
61069 -0xf6,0x93,0x90,0x97,0x4a,0xf0,0x90,0x97,0x4a,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x50,
61070 -0xf9,0x74,0x40,0x35,0xf0,0x75,0x10,0xff,0xf5,0x11,0x89,0x12,0x90,0x97,0x3c,0xe0,
61071 -0x90,0x41,0xf2,0x93,0xff,0xd3,0x90,0x97,0x49,0xe0,0x9f,0x90,0x97,0x48,0xe0,0x94,
61072 -0x00,0x40,0x0d,0x90,0x97,0x3a,0xe0,0xff,0xe4,0xfd,0x12,0x5f,0x6d,0x02,0x4d,0xc7,
61073 -0x90,0x97,0x3a,0xe0,0x25,0xe0,0x25,0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,0x92,0xf5,
61074 -0x83,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x97,0x3e,0x12,
61075 -0x1d,0xa9,0x90,0x97,0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,
61076 -0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xab,0x10,0xaa,0x11,0xa9,0x12,0x12,0x1c,
61077 -0xd6,0xff,0x7e,0x00,0xab,0x13,0xaa,0x14,0xa9,0x15,0x12,0x65,0xf5,0xfd,0xac,0xf0,
61078 -0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xeb,0x2f,
61079 -0xff,0xea,0x3e,0xfe,0xed,0x39,0xfd,0xec,0x38,0xfc,0x90,0x97,0x3e,0x12,0x1d,0xa9,
61080 -0x90,0x97,0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xc0,0x00,
61081 -0xc0,0x01,0xc0,0x02,0xc0,0x03,0xab,0x10,0xaa,0x11,0xa9,0x12,0x90,0x00,0x01,0x12,
61082 -0x1c,0xef,0xff,0x7e,0x00,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x66,
61083 -0x20,0xfd,0xac,0xf0,0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0xd0,0x03,0xd0,0x02,0xd0,0x01,
61084 -0xd0,0x00,0xeb,0x2f,0xff,0xea,0x3e,0xfe,0xed,0x39,0xfd,0xec,0x38,0xfc,0x90,0x97,
61085 -0x3e,0x12,0x1d,0xa9,0x90,0x97,0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,
61086 -0xe0,0xfb,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xab,0x10,0xaa,0x11,0xa9,0x12,
61087 -0x90,0x00,0x02,0x12,0x1c,0xef,0xff,0x7e,0x00,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,
61088 -0x00,0x04,0x12,0x66,0x20,0xfd,0xac,0xf0,0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0xd0,0x03,
61089 -0xd0,0x02,0xd0,0x01,0xd0,0x00,0xeb,0x2f,0xff,0xea,0x3e,0xfe,0xed,0x39,0xfd,0xec,
61090 -0x38,0xfc,0x90,0x97,0x3e,0x12,0x1d,0xa9,0x90,0x97,0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,
61091 -0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xab,0x10,
61092 -0xaa,0x11,0xa9,0x12,0x90,0x00,0x03,0x12,0x1c,0xef,0xff,0x7e,0x00,0xab,0x13,0xaa,
61093 -0x14,0xa9,0x15,0x90,0x00,0x06,0x12,0x66,0x20,0xfd,0xac,0xf0,0x12,0x1d,0x1c,0xe4,
61094 -0xfc,0xfd,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xeb,0x2f,0xff,0xea,0x3e,0xfe,
61095 -0xed,0x39,0xfd,0xec,0x38,0xfc,0x90,0x97,0x3e,0x12,0x1d,0xa9,0x90,0x97,0x3e,0xe0,
61096 -0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xc0,0x00,0xc0,0x01,0xc0,0x02,
61097 -0xc0,0x03,0xab,0x10,0xaa,0x11,0xa9,0x12,0x90,0x00,0x04,0x12,0x1c,0xef,0xff,0x7e,
61098 -0x00,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x08,0x12,0x66,0x20,0xfd,0xac,0xf0,
61099 -0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xeb,0x2f,
61100 -0xff,0xea,0x3e,0xfe,0xed,0x39,0xfd,0xec,0x38,0xfc,0x90,0x97,0x3e,0x12,0x1d,0xa9,
61101 -0xab,0x10,0xaa,0x11,0xa9,0x12,0x90,0x00,0x05,0x12,0x1c,0xef,0xff,0x7e,0x00,0x90,
61102 -0x97,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0x90,0x97,0x3e,
61103 -0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xd3,0x12,0x66,0xa4,0x90,
61104 -0x97,0x3e,0x40,0x50,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0xc0,
61105 -0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xab,0x10,0xaa,0x11,0xa9,0x12,0x90,0x00,0x05,
61106 -0x12,0x1c,0xef,0xff,0x7e,0x00,0x90,0x97,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x1d,
61107 -0x1c,0xab,0x07,0xaa,0x06,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xc3,0xef,0x9b,
61108 -0xff,0xee,0x9a,0xfe,0xed,0x94,0x00,0xfd,0xec,0x94,0x00,0xfc,0x90,0x97,0x3e,0x12,
61109 -0x1d,0xa9,0x80,0x07,0x12,0x1d,0xb5,0x00,0x00,0x00,0x00,0x90,0x97,0x3e,0xe0,0xfc,
61110 -0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x97,0x3a,0xe0,0x25,0xe0,0x25,
61111 -0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0x12,0x1d,0xa9,0x90,0x97,0x3c,
61112 -0xe0,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,
61113 -0x01,0x93,0xff,0xe4,0xfc,0xfd,0x90,0x97,0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,
61114 -0xfa,0xa3,0xe0,0xfb,0xd3,0x12,0x66,0xa4,0x40,0x0b,0x90,0x97,0x3a,0xe0,0xff,0x12,
61115 -0x42,0x20,0x02,0x4d,0x3e,0x90,0x97,0x3c,0xe0,0x25,0xe0,0x24,0x9e,0xf5,0x82,0xe4,
61116 -0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe4,0xfc,0xfd,0x90,0x97,
61117 -0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xc3,0x12,0x66,0xa4,
61118 -0x40,0x03,0x02,0x4d,0x3e,0x90,0x97,0x3a,0xe0,0xff,0x7d,0x01,0x12,0x5f,0x6d,0x02,
61119 -0x4d,0x3e,0x90,0x97,0x3a,0xe0,0xff,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,
61120 -0xe0,0x64,0x05,0x60,0x03,0x02,0x4b,0x8e,0x90,0x04,0xb3,0xe0,0x64,0x01,0x70,0x03,
61121 -0x02,0x4b,0x8e,0x90,0x93,0x62,0xe0,0xfe,0xb4,0x03,0x0b,0x90,0x97,0x3d,0xe0,0xc3,
61122 -0x94,0x19,0x40,0x3d,0x80,0x2e,0xee,0xb4,0x02,0x0b,0x90,0x97,0x3d,0xe0,0xc3,0x94,
61123 -0x11,0x40,0x2e,0x80,0x1f,0x90,0x93,0x62,0xe0,0xfe,0xb4,0x01,0x0b,0x90,0x97,0x3d,
61124 -0xe0,0xc3,0x94,0x0a,0x40,0x1b,0x80,0x0c,0xee,0x70,0x11,0x90,0x97,0x3d,0xe0,0xc3,
61125 -0x94,0x03,0x40,0x0d,0x90,0x95,0x43,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x95,0x43,
61126 -0xf0,0x74,0x23,0x2f,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,
61127 -0x50,0x03,0x02,0x4b,0x2d,0x90,0x95,0x43,0xe0,0x64,0x01,0x60,0x03,0x02,0x4b,0x2d,
61128 -0x90,0x97,0x3a,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x64,0x0a,
61129 -0x60,0x56,0x90,0x97,0x3a,0xe0,0xfe,0xef,0x24,0x05,0xfd,0xe4,0x33,0xfc,0x74,0x21,
61130 -0x2e,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0xff,0xd3,0x9d,0xec,0x64,0x80,0xf8,
61131 -0x74,0x80,0x98,0x50,0x33,0xef,0x24,0x05,0xfd,0xe4,0x33,0xfc,0x74,0x23,0x2e,0xf5,
61132 -0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xd3,0x9d,0xec,0x64,0x80,0xf8,0x74,0x80,0x98,
61133 -0x50,0x16,0x90,0x97,0x3a,0xe0,0x24,0x84,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe0,
61134 -0xff,0x90,0x97,0x3d,0xe0,0x6f,0x60,0x56,0x90,0x97,0x3a,0xe0,0x24,0x23,0xf5,0x82,
61135 -0xe4,0x34,0x95,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x46,0x40,0x08,0x90,0x97,0x52,0x74,
61136 -0x05,0xf0,0x80,0x11,0xef,0xd3,0x94,0x3c,0x90,0x97,0x52,0x40,0x05,0x74,0x03,0xf0,
61137 -0x80,0x03,0x74,0x01,0xf0,0x90,0x97,0x3a,0xe0,0xff,0x24,0x23,0xf5,0x82,0xe4,0x34,
61138 -0x95,0xf5,0x83,0xe0,0xfe,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xee,
61139 -0xf0,0x90,0x97,0x3a,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x95,0x80,0x2f,0x90,0x97,
61140 -0x3a,0xe0,0xff,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe4,0xf0,0x74,0x44,
61141 -0x2f,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x14,0xe4,0x90,0x97,
61142 -0x52,0xf0,0x90,0x97,0x3a,0xe0,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe4,
61143 -0xf0,0x90,0x97,0x3d,0xe0,0xff,0x90,0x97,0x3a,0xe0,0xfe,0x24,0x84,0xf5,0x82,0xe4,
61144 -0x34,0x96,0xf5,0x83,0xef,0xf0,0xee,0x30,0xe0,0x1e,0x90,0x97,0x52,0xe0,0xc4,0x54,
61145 -0xf0,0xf0,0x90,0x97,0x3a,0xe0,0xc3,0x13,0xff,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,
61146 -0xf5,0x83,0xe0,0x54,0x0f,0x02,0x4d,0x21,0x90,0x97,0x3a,0xe0,0xc3,0x13,0xff,0x24,
61147 -0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0xf0,0x02,0x4d,0x21,0x90,0x97,
61148 -0x3a,0xe0,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe0,0x64,0x06,0x60,0x03,
61149 -0x02,0x4d,0x3e,0x90,0x04,0xb3,0xe0,0x64,0x01,0x70,0x03,0x02,0x4d,0x3e,0x90,0x97,
61150 -0x3e,0x12,0x1d,0xb5,0x00,0x00,0x00,0x00,0x90,0x42,0x13,0xe4,0x93,0xff,0x7e,0x00,
61151 -0x90,0x97,0x46,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0x90,0x97,
61152 -0x42,0x12,0x1d,0xa9,0xe4,0x90,0x97,0x3b,0xf0,0x90,0x97,0x3e,0xe0,0xf8,0xa3,0xe0,
61153 -0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xab,
61154 -0x13,0xaa,0x14,0xa9,0x15,0x90,0x97,0x3b,0xe0,0xff,0x75,0xf0,0x02,0xa4,0xf5,0x82,
61155 -0x85,0xf0,0x83,0x12,0x66,0x20,0xfd,0xac,0xf0,0xef,0x90,0x42,0x0e,0x93,0xff,0x7e,
61156 -0x00,0x12,0x1d,0x1c,0xe4,0xfc,0xfd,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xeb,
61157 -0x2f,0xff,0xea,0x3e,0xfe,0xed,0x39,0xfd,0xec,0x38,0xfc,0x90,0x97,0x3e,0x12,0x1d,
61158 -0xa9,0x90,0x97,0x42,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,
61159 -0x97,0x3e,0xe0,0xf8,0xa3,0xe0,0xf9,0xa3,0xe0,0xfa,0xa3,0xe0,0xfb,0xd3,0x12,0x66,
61160 -0xa4,0x50,0x0e,0x90,0x97,0x3b,0xe0,0x04,0xf0,0xe0,0x64,0x05,0x60,0x03,0x02,0x4b,
61161 -0xd9,0x90,0x97,0x3b,0xe0,0xc3,0x13,0xf0,0x90,0x97,0x52,0xe0,0xff,0xb4,0x01,0x0d,
61162 -0x90,0x97,0x3b,0xe0,0x70,0x5d,0x90,0x97,0x52,0x04,0xf0,0x80,0x5b,0xef,0xb4,0x03,
61163 -0x1d,0x90,0x97,0x3b,0xe0,0xff,0x70,0x08,0x90,0x97,0x52,0x74,0x03,0xf0,0x80,0x48,
61164 -0xef,0xb4,0x01,0x08,0x90,0x97,0x52,0x74,0x01,0xf0,0x80,0x3c,0x80,0x35,0x90,0x97,
61165 -0x52,0xe0,0x64,0x05,0x70,0x32,0x90,0x97,0x3b,0xe0,0xff,0x70,0x08,0x90,0x97,0x52,
61166 -0x74,0x05,0xf0,0x80,0x0f,0xef,0x90,0x97,0x52,0xb4,0x01,0x05,0x74,0x03,0xf0,0x80,
61167 -0x03,0x74,0x01,0xf0,0xd3,0x90,0x97,0x49,0xe0,0x94,0x03,0x90,0x97,0x48,0xe0,0x94,
61168 -0x00,0x40,0x05,0xe4,0x90,0x97,0x52,0xf0,0xd3,0x90,0x97,0x49,0xe0,0x94,0x03,0x90,
61169 -0x97,0x48,0xe0,0x94,0x00,0x40,0x05,0xe4,0x90,0x97,0x52,0xf0,0x90,0x97,0x3a,0xe0,
61170 -0xff,0x30,0xe0,0x1a,0x90,0x97,0x52,0xe0,0xc4,0x54,0xf0,0xf0,0xef,0xc3,0x13,0xff,
61171 -0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x0f,0x80,0x13,0x90,0x97,
61172 -0x3a,0xe0,0xc3,0x13,0xff,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,
61173 -0xf0,0xf0,0x74,0xa4,0x2f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xc0,0x83,0xc0,0x82,
61174 -0xe0,0xff,0x90,0x97,0x52,0xe0,0xfe,0xef,0x4e,0xd0,0x82,0xd0,0x83,0xf0,0x90,0x97,
61175 -0x3a,0xe0,0xff,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe0,0xd3,0x94,0x05,
61176 -0x50,0x0f,0x74,0x64,0x2f,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe0,0x04,0xf0,0x80,
61177 -0x0f,0x90,0x97,0x3a,0xe0,0x24,0x64,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe4,0xf0,
61178 -0x90,0x97,0x3a,0xe0,0xff,0x24,0x84,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,
61179 -0x1f,0xc3,0x94,0x09,0x50,0x05,0x90,0x92,0x00,0x80,0x11,0x74,0x84,0x2f,0xf5,0x82,
61180 -0xe4,0x34,0x04,0xf5,0x83,0xe0,0x90,0x92,0x00,0x20,0xe2,0x05,0x74,0x08,0xf0,0x80,
61181 -0x03,0x74,0x04,0xf0,0x90,0x97,0x3a,0xe0,0x60,0x0d,0x90,0x96,0xa4,0xe0,0xff,0x90,
61182 -0x92,0x00,0xe0,0xc3,0x9f,0x50,0x08,0x90,0x92,0x00,0xe0,0x90,0x96,0xa4,0xf0,0x90,
61183 -0x96,0xa4,0xe0,0x90,0x04,0x80,0xf0,0xab,0x13,0xaa,0x14,0xa9,0x15,0xe4,0xf5,0xf0,
61184 -0x12,0x66,0x58,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0xe4,0xf5,0xf0,0x12,
61185 -0x66,0x77,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x66,0x77,0x90,0x00,0x06,0xe4,0xf5,
61186 -0xf0,0x12,0x66,0x77,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,0x66,0x77,0x90,0x97,0x3a,
61187 -0xe0,0xff,0x25,0xe0,0x24,0xc0,0xf5,0x82,0xe4,0x34,0x91,0xf5,0x83,0xe4,0xf0,0xa3,
61188 -0xf0,0xef,0x25,0xe0,0x24,0x63,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xa3,
61189 -0xf0,0xef,0x25,0xe0,0x24,0xa3,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xa3,
61190 -0xf0,0x90,0x97,0x3a,0xe0,0x04,0xf0,0x02,0x45,0x18,0x22,0xef,0x70,0x03,0x02,0x50,
61191 -0xa3,0x90,0x97,0x2d,0xe0,0x60,0x03,0x02,0x54,0xe5,0x90,0x97,0x19,0xe0,0xfc,0xa3,
61192 -0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x8c,
61193 -0x7e,0x08,0x12,0x33,0xd8,0x90,0x96,0xc5,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,
61194 -0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x44,0x7e,0x08,0x12,0x33,0xd8,
61195 -0x90,0x96,0xc9,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,
61196 -0x56,0x12,0x1d,0xa9,0x7f,0x5c,0x7e,0x08,0x12,0x33,0xd8,0x90,0x96,0xcd,0xe0,0xfc,
61197 -0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,
61198 -0x6c,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,0xd1,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,
61199 -0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x70,0x7e,0x0e,0x12,0x33,
61200 -0xd8,0x90,0x96,0xd5,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,
61201 -0x81,0x56,0x12,0x1d,0xa9,0x7f,0x74,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,0xd9,0xe0,
61202 -0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,
61203 -0x7f,0x78,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,0xdd,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,
61204 -0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x7c,0x7e,0x0e,0x12,
61205 -0x33,0xd8,0x90,0x96,0xe1,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,
61206 -0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,0xe5,
61207 -0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,
61208 -0xa9,0x7f,0x84,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,0xe9,0xe0,0xfc,0xa3,0xe0,0xfd,
61209 -0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x88,0x7e,0x0e,
61210 -0x12,0x33,0xd8,0x90,0x96,0xed,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,
61211 -0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x8c,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,
61212 -0xf1,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,
61213 -0x1d,0xa9,0x7f,0xd0,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x96,0xf5,0xe0,0xfc,0xa3,0xe0,
61214 -0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0xd4,0x7e,
61215 -0x0e,0x12,0x33,0xd8,0x90,0x96,0xf9,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,
61216 -0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0xd8,0x7e,0x0e,0x12,0x33,0xd8,0x90,
61217 -0x96,0xfd,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,
61218 -0x12,0x1d,0xa9,0x7f,0xdc,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x97,0x01,0xe0,0xfc,0xa3,
61219 -0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0xe0,
61220 -0x7e,0x0e,0x12,0x33,0xd8,0x90,0x97,0x05,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,
61221 -0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0xec,0x7e,0x0e,0x12,0x33,0xd8,
61222 -0x90,0x97,0x09,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,
61223 -0x56,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x0c,0x12,0x33,0xd8,0x90,0x97,0x0d,0xe0,0xfc,
61224 -0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,
61225 -0x04,0x7e,0x0d,0x12,0x33,0xd8,0x90,0x97,0x11,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,
61226 -0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x0c,0x7e,0x09,0x12,0x33,
61227 -0xd8,0x90,0x97,0x15,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,
61228 -0x81,0x56,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x08,0x12,0x33,0xd8,0x90,0x97,0x2d,0x74,
61229 -0x01,0xf0,0x22,0x90,0x97,0x2d,0xe0,0x64,0x01,0x60,0x03,0x02,0x54,0xe5,0x7f,0x8c,
61230 -0x7e,0x08,0x12,0x2b,0x13,0x90,0x97,0x19,0x12,0x1d,0xa9,0x7f,0x44,0x7e,0x08,0x12,
61231 -0x2b,0x13,0x90,0x96,0xc5,0x12,0x1d,0xa9,0x7f,0x5c,0x7e,0x08,0x12,0x2b,0x13,0x90,
61232 -0x96,0xc9,0x12,0x1d,0xa9,0x7f,0x6c,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xcd,0x12,
61233 -0x1d,0xa9,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xd1,0x12,0x1d,0xa9,0x7f,
61234 -0x74,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xd5,0x12,0x1d,0xa9,0x7f,0x78,0x7e,0x0e,
61235 -0x12,0x2b,0x13,0x90,0x96,0xd9,0x12,0x1d,0xa9,0x7f,0x7c,0x7e,0x0e,0x12,0x2b,0x13,
61236 -0x90,0x96,0xdd,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xe1,
61237 -0x12,0x1d,0xa9,0x7f,0x84,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xe5,0x12,0x1d,0xa9,
61238 -0x7f,0x88,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xe9,0x12,0x1d,0xa9,0x7f,0x8c,0x7e,
61239 -0x0e,0x12,0x2b,0x13,0x90,0x96,0xed,0x12,0x1d,0xa9,0x7f,0xd0,0x7e,0x0e,0x12,0x2b,
61240 -0x13,0x90,0x96,0xf1,0x12,0x1d,0xa9,0x7f,0xd4,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,
61241 -0xf5,0x12,0x1d,0xa9,0x7f,0xd8,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xf9,0x12,0x1d,
61242 -0xa9,0x7f,0xdc,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x96,0xfd,0x12,0x1d,0xa9,0x7f,0xe0,
61243 -0x7e,0x0e,0x12,0x2b,0x13,0x90,0x97,0x01,0x12,0x1d,0xa9,0x7f,0xec,0x7e,0x0e,0x12,
61244 -0x2b,0x13,0x90,0x97,0x05,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x13,0x90,
61245 -0x97,0x09,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x0d,0x12,0x2b,0x13,0x90,0x97,0x0d,0x12,
61246 -0x1d,0xa9,0x7f,0x0c,0x7e,0x09,0x12,0x2b,0x13,0x90,0x97,0x11,0x12,0x1d,0xa9,0x7f,
61247 -0x04,0x7e,0x08,0x12,0x2b,0x13,0x90,0x97,0x15,0x12,0x1d,0xa9,0x7f,0x8c,0x7e,0x08,
61248 -0x12,0x2b,0x13,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,
61249 -0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0xed,0x44,0xc0,0xfd,0xec,0x90,0x97,0xa3,0x12,
61250 -0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,
61251 -0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x8c,0x7e,0x08,0x12,0x33,0xd8,0x90,0x81,0x56,
61252 -0x12,0x1d,0xb5,0x00,0x01,0x00,0x00,0x7f,0x44,0x7e,0x08,0x12,0x33,0xd8,0x90,0x81,
61253 -0x56,0x12,0x1d,0xb5,0x00,0xdb,0x25,0xa4,0x7f,0x5c,0x7e,0x08,0x12,0x33,0xd8,0x90,
61254 -0x81,0x56,0x12,0x1d,0xb5,0x20,0xdb,0x25,0xa4,0x7f,0x6c,0x7e,0x0e,0x12,0x33,0xd8,
61255 -0x90,0x81,0x56,0x12,0x1d,0xb5,0x20,0xdb,0x25,0xa4,0x7f,0x70,0x7e,0x0e,0x12,0x33,
61256 -0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x04,0x1b,0x25,0xa4,0x7f,0x74,0x7e,0x0e,0x12,
61257 -0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x04,0x1b,0x25,0xa4,0x7f,0x78,0x7e,0x0e,
61258 -0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x04,0x1b,0x25,0xa4,0x7f,0x7c,0x7e,
61259 -0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x04,0x1b,0x25,0xa4,0x7f,0x80,
61260 -0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x63,0xdb,0x25,0xa4,0x7f,
61261 -0x84,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x04,0x1b,0x25,0xa4,
61262 -0x7f,0x88,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x20,0xdb,0x25,
61263 -0xa4,0x7f,0x8c,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x20,0xdb,
61264 -0x25,0xa4,0x7f,0xd0,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,0x20,
61265 -0xdb,0x25,0xa4,0x7f,0xd4,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,0xb5,
61266 -0x20,0xdb,0x25,0xa4,0x7f,0xd8,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,0x1d,
61267 -0xb5,0x00,0x1b,0x25,0xa4,0x7f,0xdc,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,0x12,
61268 -0x1d,0xb5,0x00,0x1b,0x25,0xa4,0x7f,0xe0,0x7e,0x0e,0x12,0x33,0xd8,0x90,0x81,0x56,
61269 -0x12,0x1d,0xb5,0x24,0xdb,0x25,0xa4,0x7f,0xec,0x7e,0x0e,0x12,0x33,0xd8,0x7f,0x04,
61270 -0x7e,0x0c,0x12,0x2b,0x13,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,
61271 -0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xe4,0xff,0xec,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,
61272 -0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0x44,0x11,0xff,0xec,
61273 -0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,
61274 -0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x0c,0x12,0x33,
61275 -0xd8,0x7f,0x04,0x7e,0x0d,0x12,0x2b,0x13,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,
61276 -0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0x54,0xf0,0xff,0xec,0x90,
61277 -0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,
61278 -0xa3,0xe0,0x44,0x01,0xff,0xec,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,
61279 -0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,
61280 -0x7f,0x04,0x7e,0x0d,0x12,0x33,0xd8,0x7f,0x0c,0x7e,0x09,0x12,0x2b,0x13,0x90,0x97,
61281 -0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xe4,
61282 -0xff,0xec,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,
61283 -0xa3,0xe0,0xfe,0xa3,0xe0,0x44,0x11,0xff,0xec,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,
61284 -0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,
61285 -0x12,0x1d,0xa9,0x7f,0x0c,0x7e,0x09,0x12,0x33,0xd8,0x7f,0x0c,0x7e,0x09,0x12,0x2b,
61286 -0x13,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,
61287 -0xe0,0xfe,0xa3,0xe0,0xff,0xed,0x54,0x0f,0xfd,0xec,0x54,0xf0,0xfc,0x90,0x97,0xa3,
61288 -0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,
61289 -0xff,0xed,0x44,0x10,0xfd,0xec,0x44,0x01,0xfc,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,
61290 -0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,
61291 -0x12,0x1d,0xa9,0x7f,0x0c,0x7e,0x09,0x12,0x33,0xd8,0x7f,0x04,0x7e,0x08,0x12,0x2b,
61292 -0x13,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,
61293 -0xe0,0xfe,0xa3,0xe0,0x54,0xf0,0xff,0xec,0x90,0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,
61294 -0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0x44,0x01,0xff,0xec,0x90,
61295 -0x97,0xa3,0x12,0x1d,0xa9,0x90,0x97,0xa3,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,
61296 -0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x08,0x12,0x33,0xd8,
61297 -0xe4,0x90,0x97,0x2d,0xf0,0x22,0x8f,0x10,0xef,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,
61298 -0x34,0x95,0xaf,0x82,0xf5,0x11,0x8f,0x12,0xe5,0x10,0x75,0xf0,0x02,0xa4,0x24,0x81,
61299 -0xf9,0x74,0x92,0x35,0xf0,0x75,0x13,0x01,0xf5,0x14,0x89,0x15,0xe5,0x10,0x75,0xf0,
61300 -0x08,0xa4,0x24,0x65,0xf5,0x82,0xe4,0x34,0x93,0xaf,0x82,0xf5,0x16,0x8f,0x17,0xe5,
61301 -0x10,0x75,0xf0,0x08,0xa4,0x24,0x63,0xf9,0x74,0x93,0x35,0xf0,0x75,0x18,0x01,0xf5,
61302 -0x19,0x89,0x1a,0x74,0xc1,0x25,0x10,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0x12,
61303 -0x66,0xc1,0x55,0x67,0x00,0x55,0x7c,0x01,0x55,0x91,0x02,0x55,0xa6,0x03,0x55,0xd0,
61304 -0x04,0x55,0xe5,0x05,0x55,0xfa,0x06,0x56,0x21,0x0c,0x56,0x4f,0x0d,0x56,0x7c,0x0e,
61305 -0x56,0xa9,0x0f,0x00,0x00,0x56,0xdd,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,
61306 -0x34,0x95,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,0x80,0x3c,0xe5,0x10,0x25,0xe0,
61307 -0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x10,0x80,
61308 -0x27,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0xf0,
61309 -0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,
61310 -0x95,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,0x10,0x25,0xe0,0x24,0x81,0xf5,
61311 -0x82,0xe4,0x34,0x92,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0x8f,0xf0,0x02,0x56,0xdd,
61312 -0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,
61313 -0xa3,0x74,0xf5,0x80,0x27,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,
61314 -0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,0x10,0x25,0xe0,0x24,0xe4,
61315 -0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,0x74,0x0d,0xf0,0xe5,0x10,0x25,
61316 -0xe0,0x24,0x81,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x02,0x56,
61317 -0xdd,0x90,0x04,0x47,0xe0,0xab,0x13,0xaa,0x14,0xa9,0x15,0x12,0x65,0x95,0x90,0x04,
61318 -0x46,0xe0,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x01,0x12,0x65,0xa7,0x90,0x04,
61319 -0x45,0xe0,0x85,0x12,0x82,0x85,0x11,0x83,0xf0,0x90,0x04,0x44,0x02,0x56,0xd4,0x90,
61320 -0x04,0x4b,0xe0,0xab,0x13,0xaa,0x14,0xa9,0x15,0x12,0x65,0x95,0x90,0x04,0x4a,0xe0,
61321 -0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x01,0x12,0x65,0xa7,0x90,0x04,0x49,0xe0,
61322 -0x85,0x12,0x82,0x85,0x11,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,0x04,0x4f,0xe0,
61323 -0xab,0x13,0xaa,0x14,0xa9,0x15,0x12,0x65,0x95,0x90,0x04,0x4e,0xe0,0xab,0x13,0xaa,
61324 -0x14,0xa9,0x15,0x90,0x00,0x01,0x12,0x65,0xa7,0x90,0x04,0x4d,0xe0,0x85,0x12,0x82,
61325 -0x85,0x11,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,0xab,0x13,0xaa,
61326 -0x14,0xa9,0x15,0x12,0x65,0x95,0x90,0x04,0x52,0xe0,0xab,0x13,0xaa,0x14,0xa9,0x15,
61327 -0x90,0x00,0x01,0x12,0x65,0xa7,0x90,0x04,0x51,0xe0,0x85,0x12,0x82,0x85,0x11,0x83,
61328 -0xf0,0x90,0x04,0x50,0xe0,0x85,0x12,0x82,0x85,0x11,0x83,0xa3,0xf0,0xab,0x13,0xaa,
61329 -0x14,0xa9,0x15,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x1c,0xd6,0xff,0xab,0x18,0xaa,
61330 -0x19,0xa9,0x1a,0x12,0x1c,0xd6,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x65,0x95,
61331 -0xab,0x13,0xe5,0x15,0x24,0x01,0xf9,0xe4,0x35,0x14,0xfa,0xc0,0x03,0xc0,0x02,0xc0,
61332 -0x01,0x12,0x1c,0xd6,0xff,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x01,0x12,0x1c,
61333 -0xef,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x65,0x95,0x85,0x12,0x82,0x85,0x11,
61334 -0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x17,0x82,0x85,0x16,0x83,0xe0,0xfe,0xef,
61335 -0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x12,0x82,0x85,0x11,0x83,0xa3,0xc0,0x83,0xc0,
61336 -0x82,0xe0,0xff,0x85,0x17,0x82,0x85,0x16,0x83,0xa3,0xe0,0xfe,0xef,0x5e,0xd0,0x82,
61337 -0xd0,0x83,0xf0,0xe5,0x10,0x25,0xe0,0x24,0x81,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,
61338 -0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x4c,0x90,0x97,0x51,0x74,0x0b,0xf0,0x90,0x97,0x51,
61339 -0xe0,0xff,0xc3,0x94,0x00,0x50,0x03,0x02,0x58,0x23,0x74,0x01,0x7e,0x00,0xa8,0x07,
61340 -0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x10,0x25,0xe0,0x24,
61341 -0x81,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,
61342 -0x0a,0x90,0x97,0x51,0xe0,0x24,0x10,0xa3,0xf0,0x80,0x68,0x90,0x97,0x51,0xe0,0x14,
61343 -0xf0,0x80,0xba,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
61344 -0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x47,0x90,0x97,0x51,0x74,0x0f,0xf0,0x90,0x97,0x51,
61345 -0xe0,0xff,0xc3,0x94,0x00,0x40,0x3c,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
61346 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,
61347 -0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x97,
61348 -0x51,0xe0,0xa3,0xf0,0x80,0x0d,0x90,0x97,0x51,0xe0,0x14,0xf0,0x80,0xbf,0xe4,0x90,
61349 -0x97,0x52,0xf0,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
61350 -0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x47,0xe4,0x90,0x97,0x51,0xf0,0x90,0x97,0x51,0xe0,
61351 -0xff,0xc3,0x94,0x10,0x40,0x03,0x02,0x58,0xdd,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,
61352 -0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x10,0x25,0xe0,0x24,0xe4,
61353 -0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,
61354 -0x90,0x97,0x51,0xe0,0x80,0x63,0x90,0x97,0x51,0xe0,0x04,0xf0,0x80,0xbe,0xe5,0x10,
61355 -0x25,0xe0,0x24,0x81,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,
61356 -0x60,0x46,0xe4,0x90,0x97,0x51,0xf0,0x90,0x97,0x51,0xe0,0xff,0xc3,0x94,0x0c,0x50,
61357 -0x3c,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
61358 -0xf9,0xff,0xe5,0x10,0x25,0xe0,0x24,0x81,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,
61359 -0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x97,0x51,0xe0,0x24,0x10,0x80,0x09,
61360 -0x90,0x97,0x51,0xe0,0x04,0xf0,0x80,0xbf,0xe4,0x90,0x97,0x53,0xf0,0x90,0x97,0x52,
61361 -0xe0,0xff,0xe5,0x10,0x75,0xf0,0x08,0xa4,0x24,0x67,0xf5,0x82,0xe4,0x34,0x93,0xf5,
61362 -0x83,0xef,0xf0,0x90,0x97,0x53,0xe0,0xfe,0xe5,0x10,0x75,0xf0,0x08,0xa4,0x24,0x68,
61363 -0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xee,0xf0,0x74,0x84,0x25,0x10,0xf5,0x82,0xe4,
61364 -0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x1f,0x90,0x97,0x52,0xe0,0xff,0x74,0x84,
61365 -0x25,0x10,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x10,0xf5,
61366 -0x82,0xe4,0x34,0x04,0xf5,0x83,0xef,0xf0,0x90,0x97,0x52,0xe0,0xff,0xd3,0x94,0x13,
61367 -0x40,0x08,0x90,0x93,0x62,0x74,0x03,0xf0,0x80,0x21,0xef,0xd3,0x94,0x0b,0x40,0x08,
61368 -0x90,0x93,0x62,0x74,0x02,0xf0,0x80,0x13,0xef,0xd3,0x94,0x03,0x40,0x08,0x90,0x93,
61369 -0x62,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x93,0x62,0xf0,0x90,0x93,0x62,0xe0,0x90,
61370 -0x04,0xb1,0xf0,0xe5,0x10,0x25,0xe0,0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
61371 -0xe0,0xff,0xa3,0xe0,0x90,0x04,0x9c,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x10,0x25,0xe0,
61372 -0x24,0x81,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x04,0x9e,
61373 -0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x10,0x75,0xf0,0x08,0xa4,0x24,0x69,0xf5,0x82,0xe4,
61374 -0x34,0x93,0xf5,0x83,0xe0,0xc4,0x33,0x54,0xe0,0x45,0x10,0x90,0x04,0xa0,0xf0,0x74,
61375 -0xc1,0x25,0x10,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0xe0,0x90,0x04,0xa1,0xf0,0x22,
61376 -0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,
61377 -0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,
61378 -0x74,0xd0,0xf0,0x74,0x59,0xa3,0xf0,0x90,0x01,0x37,0xe0,0x55,0x2b,0xf5,0x2f,0x90,
61379 -0x01,0x34,0xe0,0x55,0x28,0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,0xe5,
61380 -0x2c,0x20,0xe0,0x03,0x02,0x5b,0x82,0x90,0x01,0x34,0x74,0x01,0xf0,0x85,0xd1,0x4d,
61381 -0x85,0xd2,0x4e,0x85,0xd3,0x4f,0x85,0xd4,0x50,0x85,0xd5,0x51,0x85,0xd6,0x52,0x85,
61382 -0xd7,0x53,0x85,0xd9,0x54,0xe5,0x54,0x54,0x40,0xc3,0x13,0xff,0xe5,0x53,0x54,0x20,
61383 -0x6f,0x70,0x03,0x02,0x5b,0x2f,0xe5,0x54,0x30,0xe5,0x03,0x02,0x5b,0x2f,0xe5,0x52,
61384 -0x54,0x1f,0xf5,0x08,0xe5,0x4d,0x54,0x3f,0xf5,0x09,0xe5,0x51,0x54,0x1f,0xff,0xe5,
61385 -0x08,0x25,0xe0,0x24,0xe3,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
61386 -0x65,0xc9,0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0xc0,0xf5,0x82,0xe4,
61387 -0x34,0x91,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x65,0xc9,0xe5,0x09,0xd3,0x94,0x04,0x40,
61388 -0x03,0x75,0x09,0x04,0x75,0xf0,0x0a,0xe5,0x08,0xa4,0x24,0x00,0xf5,0x82,0xe5,0xf0,
61389 -0x34,0x90,0xf5,0x83,0x75,0xf0,0x02,0xe5,0x09,0x12,0x66,0xb5,0xe0,0xfe,0xa3,0xe0,
61390 -0xff,0xe5,0x53,0x54,0x1f,0x2f,0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x08,0xa4,
61391 -0x24,0x00,0xf5,0x82,0xe5,0xf0,0x34,0x90,0xf5,0x83,0x75,0xf0,0x02,0xe5,0x09,0x12,
61392 -0x66,0xb5,0xee,0xf0,0xa3,0xef,0xf0,0xe5,0x54,0x20,0xe6,0x24,0xe5,0x53,0x54,0x1f,
61393 -0xff,0xe5,0x08,0x25,0xe0,0x24,0x63,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0x8f,
61394 -0xf0,0x12,0x65,0xc9,0xe5,0x4f,0x30,0xe7,0x36,0xaf,0x08,0x12,0x75,0x4c,0x80,0x2f,
61395 -0xe5,0x53,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0xa3,0xf5,0x82,0xe4,0x34,0x94,
61396 -0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x65,0xc9,0xe5,0x4f,0x30,0xe7,0x12,0xe5,0x4f,0x54,
61397 -0x7f,0xfd,0xe5,0x53,0x54,0x1f,0xf5,0x0d,0xab,0x09,0xaf,0x08,0x12,0x76,0x52,0xe5,
61398 -0x65,0x60,0x4f,0x90,0x97,0x8d,0xe0,0x60,0x35,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,
61399 -0x3c,0x74,0x04,0xf0,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x70,0x34,0x75,0x48,
61400 -0x14,0xf5,0x49,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x38,0xec,0x90,0x01,0x5b,0x74,
61401 -0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x97,0x87,0xf0,0x80,0x14,0x90,0x04,
61402 -0x1b,0xe0,0x54,0x7f,0xff,0xbf,0x7f,0x0a,0x90,0x97,0x8b,0xe0,0xff,0x7d,0x01,0x12,
61403 -0x6e,0xda,0xe5,0x2c,0x30,0xe1,0x21,0x90,0x01,0x34,0x74,0x02,0xf0,0x85,0xd1,0x56,
61404 -0x85,0xd2,0x57,0x85,0xd3,0x58,0x85,0xd4,0x59,0x85,0xd5,0x5a,0x85,0xd6,0x5b,0x85,
61405 -0xd7,0x5c,0x85,0xd9,0x5d,0x12,0x7d,0xc4,0xe5,0x2c,0x30,0xe3,0x06,0x90,0x01,0x34,
61406 -0x74,0x08,0xf0,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,0xf0,0x43,0x55,
61407 -0x10,0xe5,0x2c,0x30,0xe5,0x21,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1a,0xe0,0x54,0xdf,
61408 -0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x7f,0x10,
61409 -0x7e,0x00,0x12,0x3a,0xa8,0x80,0xfe,0xe5,0x2c,0x30,0xe6,0x06,0x90,0x01,0x34,0x74,
61410 -0x40,0xf0,0xe5,0x2e,0x30,0xe1,0x09,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x55,0x40,
61411 -0xe5,0x2e,0x30,0xe0,0x09,0x90,0x01,0x36,0x74,0x01,0xf0,0x12,0x76,0xd3,0xe5,0x2e,
61412 -0x30,0xe2,0x63,0x90,0x01,0x36,0x74,0x04,0xf0,0xe5,0x64,0x64,0x01,0x70,0x57,0xe5,
61413 -0x65,0x60,0x53,0xe5,0x65,0x64,0x02,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x97,0x7f,
61414 -0xf0,0x90,0x06,0xaa,0xe0,0x90,0x97,0x8a,0xf0,0x90,0x97,0x7f,0xe0,0x70,0x07,0x90,
61415 -0x97,0x8a,0xe0,0xff,0x80,0x05,0x90,0x97,0x7f,0xe0,0xff,0x90,0x97,0x7f,0xef,0xf0,
61416 -0x90,0x97,0x81,0xe0,0x60,0x03,0xe0,0x14,0xf0,0x90,0x97,0x80,0xe4,0xf0,0x90,0x01,
61417 -0x57,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x97,0x8f,0xe0,0x54,0xfd,0xf0,0xe0,
61418 -0x54,0xef,0xf0,0x12,0x77,0x49,0xe5,0x2e,0x30,0xe3,0x31,0x90,0x01,0x36,0x74,0x08,
61419 -0xf0,0xe5,0x64,0x64,0x01,0x70,0x25,0xe5,0x65,0x60,0x21,0x90,0x01,0x57,0xe4,0xf0,
61420 -0x90,0x01,0x3c,0x74,0x02,0xf0,0x75,0x48,0x03,0x75,0x49,0x00,0xe4,0xfb,0xfd,0x7f,
61421 -0x54,0x7e,0x01,0x12,0x38,0xec,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,
61422 -0x3a,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x64,0x64,0x01,0x70,0x2e,0xe5,0x65,0x60,
61423 -0x2a,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x97,0x8e,0xe4,
61424 -0xf0,0x90,0x97,0x8f,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0x03,0x70,0x0e,0x90,0x97,0x89,
61425 -0xf0,0x90,0x97,0x8b,0xe0,0xff,0x7d,0x01,0x12,0x6e,0xda,0xe5,0x2e,0x30,0xe5,0x12,
61426 -0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x64,0xb4,0x01,0x07,0xe5,0x65,0x60,0x03,0x12,
61427 -0x7e,0x7e,0xe5,0x2e,0x30,0xe6,0x2a,0x90,0x01,0x36,0x74,0x40,0xf0,0xe5,0x64,0x64,
61428 -0x01,0x70,0x1e,0xe5,0x65,0x60,0x1a,0x90,0x97,0x8f,0xe0,0x54,0xfe,0xf0,0xe0,0x54,
61429 -0x03,0x70,0x0e,0x90,0x97,0x89,0xf0,0x90,0x97,0x8b,0xe0,0xff,0x7d,0x01,0x12,0x6e,
61430 -0xda,0xe5,0x2f,0x30,0xe1,0x09,0x90,0x01,0x37,0x74,0x02,0xf0,0x12,0x7c,0xe8,0x74,
61431 -0xd0,0x04,0x90,0x01,0xc4,0xf0,0x74,0x59,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,
61432 -0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,
61433 -0xd0,0xf0,0xd0,0xe0,0x32,0x74,0x5d,0x90,0x01,0xc4,0xf0,0xa3,0x74,0x65,0xf0,0x90,
61434 -0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,0xf0,
61435 -0x90,0x97,0x3a,0xf0,0x90,0x97,0x3a,0xe0,0xff,0xc3,0x94,0x10,0x50,0x14,0x74,0xa4,
61436 -0x2f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x90,0x97,0x3a,0xe0,0x04,0xf0,
61437 -0x80,0xe2,0xe4,0x90,0x97,0x3a,0xf0,0x90,0x97,0x3a,0xe0,0xfb,0xc3,0x94,0x20,0x40,
61438 -0x03,0x02,0x5f,0x6c,0xe0,0xff,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf5,0x82,0xe5,0xf0,
61439 -0x34,0x90,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xef,0xa4,0x24,0x02,0xf5,
61440 -0x82,0xe5,0xf0,0x34,0x90,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xef,0xa4,
61441 -0x24,0x04,0xf5,0x82,0xe5,0xf0,0x34,0x90,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,
61442 -0x0a,0xef,0xa4,0x24,0x06,0xf5,0x82,0xe5,0xf0,0x34,0x90,0xf5,0x83,0xe4,0xf0,0xa3,
61443 -0xf0,0x75,0xf0,0x0a,0xef,0xa4,0x24,0x08,0xf5,0x82,0xe5,0xf0,0x34,0x90,0xf5,0x83,
61444 -0xe4,0xf0,0xa3,0xf0,0x74,0x84,0x2f,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0x74,0x13,
61445 -0xf0,0x74,0x44,0x2f,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xef,0x25,0xe0,
61446 -0x24,0xc0,0xf5,0x82,0xe4,0x34,0x91,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xef,0x25,0xe0,
61447 -0x24,0x63,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xef,0x25,0xe0,
61448 -0x24,0xe3,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xef,0x25,0xe0,
61449 -0x24,0xa3,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xef,0x25,0xe0,
61450 -0x24,0x64,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xef,0x25,0xe0,
61451 -0x24,0xa4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x44,0x2f,
61452 -0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe4,0xf0,0x74,0x24,0x2f,0xf5,0x82,0xe4,0x34,
61453 -0x96,0xf5,0x83,0xe4,0xf0,0x74,0x64,0x2f,0xf5,0x82,0xe4,0x34,0x96,0xf5,0x83,0xe4,
61454 -0xf0,0x90,0x41,0xc4,0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x8c,0x74,0x01,0x93,
61455 -0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xe4,0xfc,0xfd,0xeb,0x25,
61456 -0xe0,0x25,0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0x12,0x1d,0xa9,0xeb,
61457 -0x75,0xf0,0x08,0xa4,0x24,0x6a,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0x74,0x01,0xf0,
61458 -0xeb,0x75,0xf0,0x08,0xa4,0x24,0x69,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0x74,0x01,
61459 -0xf0,0x74,0xc1,0x2b,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0x74,0x0c,0xf0,0xeb,0x75,
61460 -0xf0,0x08,0xa4,0x24,0x65,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0x74,0xff,0xf0,0xa3,
61461 -0xf0,0xeb,0x75,0xf0,0x08,0xa4,0x24,0x63,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,
61462 -0xf0,0xa3,0x74,0x0f,0xf0,0xeb,0x75,0xf0,0x08,0xa4,0x24,0x67,0xf5,0x82,0xe4,0x34,
61463 -0x93,0xf5,0x83,0x74,0x13,0xf0,0xeb,0x75,0xf0,0x08,0xa4,0x24,0x68,0xf5,0x82,0xe4,
61464 -0x34,0x93,0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2b,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
61465 -0x74,0x13,0xf0,0x90,0x97,0x3a,0xe0,0x04,0xf0,0x02,0x5d,0xa7,0x22,0x8f,0x17,0x74,
61466 -0x5f,0x90,0x01,0xc4,0xf0,0xa3,0x74,0x6d,0xf0,0x74,0x84,0x25,0x17,0xf5,0x82,0xe4,
61467 -0x34,0x04,0xf5,0x83,0xe0,0x54,0x7f,0x90,0x97,0x54,0xf0,0xe0,0x54,0x1f,0xff,0x90,
61468 -0x97,0x57,0xf0,0xe5,0x17,0x75,0xf0,0x08,0xa4,0x24,0x68,0xf5,0x82,0xe4,0x34,0x93,
61469 -0xf5,0x83,0xe0,0x90,0x97,0x59,0xf0,0xe5,0x17,0x75,0xf0,0x08,0xa4,0x24,0x67,0xf5,
61470 -0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0x90,0x97,0x5a,0xf0,0xe5,0x17,0x25,0xe0,
61471 -0x24,0xe4,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x97,0x5b,
61472 -0xcb,0xf0,0xa3,0xeb,0xf0,0xe5,0x17,0x25,0xe0,0x24,0x81,0xf5,0x82,0xe4,0x34,0x92,
61473 -0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x97,0x5d,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,
61474 -0x9e,0x40,0x0c,0x90,0x97,0x5a,0xe0,0x90,0x97,0x57,0xf0,0x90,0x97,0x54,0xf0,0xed,
61475 -0x70,0x03,0x02,0x60,0xd9,0x90,0x97,0x58,0xed,0xf0,0x90,0x97,0x54,0xe0,0x30,0xe6,
61476 -0x0e,0x90,0x97,0x57,0xe0,0x90,0x97,0x54,0xf0,0x90,0x97,0x58,0xe0,0x14,0xf0,0x90,
61477 -0x97,0x58,0xe0,0x70,0x03,0x02,0x60,0xd9,0x90,0x97,0x57,0xe0,0xff,0xd3,0x94,0x00,
61478 -0x50,0x03,0x02,0x60,0xd9,0xe4,0x90,0x97,0x56,0xf0,0xef,0x14,0x90,0x97,0x55,0xf0,
61479 -0x90,0x97,0x59,0xe0,0xfd,0x90,0x97,0x55,0xe0,0xff,0xd3,0x9d,0x40,0x6f,0xef,0x94,
61480 -0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,
61481 -0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x97,0x5d,0xe0,0x5e,0xfe,0xa3,0xe0,
61482 -0x5f,0x4e,0x70,0x27,0x90,0x97,0x55,0xe0,0xff,0xc3,0x94,0x10,0x50,0x37,0x74,0x01,
61483 -0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
61484 -0x97,0x5b,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x1a,0x90,0x97,0x55,0xe0,0x90,
61485 -0x97,0x54,0xf0,0x90,0x97,0x56,0xe0,0x04,0xf0,0x90,0x97,0x58,0xe0,0xff,0x90,0x97,
61486 -0x56,0xe0,0x6f,0x60,0x08,0x90,0x97,0x55,0xe0,0x14,0xf0,0x80,0x83,0x90,0x97,0x58,
61487 -0xe0,0xff,0x90,0x97,0x56,0xe0,0xc3,0x9f,0x50,0x0f,0x90,0x97,0x55,0xe0,0xb5,0x05,
61488 -0x08,0x90,0x97,0x59,0xe0,0x90,0x97,0x54,0xf0,0x90,0x97,0x54,0xe0,0xff,0x25,0xe0,
61489 -0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfc,0x74,0x01,0x93,0xfd,
61490 -0xef,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2d,
61491 -0xff,0xe4,0x93,0x3c,0xc3,0x13,0xfe,0xef,0x13,0xff,0xe4,0xfc,0xfd,0xe5,0x17,0x25,
61492 -0xe0,0x25,0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0x12,0x1d,0xa9,0x90,
61493 -0x97,0x54,0xe0,0xff,0x74,0x84,0x25,0x17,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xef,
61494 -0xf0,0x22,0x90,0x01,0xc4,0x74,0x32,0xf0,0x74,0x61,0xa3,0xf0,0x90,0x01,0xcc,0xe0,
61495 -0x54,0x0f,0x90,0x97,0x3a,0xf0,0x90,0x97,0x3a,0xe0,0xfd,0x70,0x03,0x02,0x62,0xd2,
61496 -0x90,0x97,0xb1,0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,
61497 -0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,0x03,0x02,0x62,0xb3,0x90,0x97,0xb1,
61498 -0xe0,0x75,0xf0,0x04,0xa4,0x24,0xd0,0xf5,0x82,0xe5,0xf0,0x34,0x01,0xf5,0x83,0xe0,
61499 -0x90,0x97,0x3b,0xf0,0xa2,0xaf,0xe4,0x33,0xa3,0xf0,0xc2,0xaf,0x75,0x24,0x01,0x75,
61500 -0x25,0x97,0x75,0x26,0x3b,0x75,0x27,0x01,0x7b,0x01,0x7a,0x97,0x79,0x3d,0x12,0x79,
61501 -0x27,0x90,0x97,0x3c,0xe0,0x24,0xff,0x92,0xaf,0xa3,0xe0,0xff,0xc4,0x13,0x13,0x13,
61502 -0x54,0x01,0x90,0x97,0xb1,0x30,0xe0,0x70,0xe0,0x75,0xf0,0x02,0xa4,0x24,0x88,0xf5,
61503 -0x82,0xe4,0x35,0xf0,0xf5,0x83,0xe0,0x90,0x97,0x3e,0xf0,0x90,0x97,0xb1,0xe0,0x75,
61504 -0xf0,0x02,0xa4,0x24,0x89,0xf5,0x82,0xe4,0x35,0xf0,0xf5,0x83,0xe0,0x90,0x97,0x3f,
61505 -0xf0,0x90,0x97,0xb1,0xe0,0x75,0xf0,0x04,0xa4,0x24,0xd1,0xf5,0x82,0xe5,0xf0,0x34,
61506 -0x01,0xf5,0x83,0xe0,0x90,0x97,0x40,0xf0,0x90,0x97,0xb1,0xe0,0x75,0xf0,0x04,0xa4,
61507 -0x24,0xd2,0xf5,0x82,0xe5,0xf0,0x34,0x01,0xf5,0x83,0xe0,0x90,0x97,0x41,0xf0,0x90,
61508 -0x97,0xb1,0xe0,0x75,0xf0,0x04,0xa4,0x24,0xd3,0xf5,0x82,0xe5,0xf0,0x34,0x01,0xf5,
61509 -0x83,0xe0,0x90,0x97,0x42,0xf0,0x80,0x42,0xe0,0x75,0xf0,0x04,0xa4,0x24,0xd1,0xf5,
61510 -0x82,0xe5,0xf0,0x34,0x01,0xf5,0x83,0xe0,0x90,0x97,0x3e,0xf0,0x90,0x97,0xb1,0xe0,
61511 -0x75,0xf0,0x04,0xa4,0x24,0xd2,0xf5,0x82,0xe5,0xf0,0x34,0x01,0xf5,0x83,0xe0,0x90,
61512 -0x97,0x3f,0xf0,0x90,0x97,0xb1,0xe0,0x75,0xf0,0x04,0xa4,0x24,0xd3,0xf5,0x82,0xe5,
61513 -0xf0,0x34,0x01,0xf5,0x83,0xe0,0x90,0x97,0x40,0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,
61514 -0x7a,0x97,0x79,0x3e,0x12,0x6e,0x02,0x90,0x97,0x3a,0xe0,0xff,0x90,0x97,0xb1,0xe0,
61515 -0xfe,0x74,0x01,0xa8,0x06,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,0x90,0x97,
61516 -0x3a,0xf0,0x90,0x97,0xb1,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
61517 -0xd8,0xfc,0x90,0x01,0xcc,0xf0,0x90,0x97,0xb1,0xe0,0x04,0xf0,0xe0,0x54,0x03,0xf0,
61518 -0x02,0x61,0x46,0xc2,0xaf,0x74,0x32,0x04,0x90,0x01,0xc4,0xf0,0x74,0x61,0xa3,0xf0,
61519 -0x90,0x97,0x3a,0xe0,0x90,0x01,0xc6,0xf0,0x90,0x97,0xb1,0xe0,0x90,0x01,0xc7,0xf0,
61520 -0x80,0xfe,0x22,0xe4,0x90,0x97,0x37,0xf0,0xa3,0xf0,0x12,0x7a,0x6c,0x90,0x00,0x02,
61521 -0xe0,0x54,0xe0,0x90,0x97,0x96,0x60,0x05,0x74,0x01,0xf0,0x80,0x03,0x74,0x02,0xf0,
61522 -0x90,0x00,0xf3,0xe0,0x30,0xe3,0x08,0x90,0x97,0x97,0x74,0x01,0xf0,0x80,0x05,0xe4,
61523 -0x90,0x97,0x97,0xf0,0x90,0x97,0x97,0xe0,0xb4,0x01,0x13,0x90,0x00,0xf2,0xe0,0x30,
61524 -0xe7,0x0c,0x90,0x97,0x90,0x74,0xfd,0xf0,0xa3,0x74,0x33,0xf0,0x80,0x0a,0x90,0x97,
61525 -0x90,0x74,0xfd,0xf0,0xa3,0x74,0x2f,0xf0,0xe4,0xf5,0x55,0x12,0x5d,0x65,0x12,0x7f,
61526 -0x60,0x12,0x79,0xce,0x12,0x36,0xd1,0x12,0x44,0xff,0x75,0x28,0x33,0xe4,0xf5,0x29,
61527 -0x75,0x2a,0x02,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,0xa3,
61528 -0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,
61529 -0x41,0x74,0x10,0xf0,0x90,0x05,0x5a,0xf0,0xa3,0xe4,0xf0,0x90,0x01,0x64,0x74,0xa0,
61530 -0xf0,0x75,0x48,0xff,0xe4,0xf5,0x49,0xfb,0x7d,0x01,0x7f,0x50,0x7e,0x01,0x12,0x38,
61531 -0xec,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,0x32,0x90,0x01,0x38,0xe5,0x30,0xf0,
61532 -0xa3,0xe5,0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x12,0x78,0xd0,0x90,0x97,0x39,0xe5,0xd9,
61533 -0xf0,0x90,0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,
61534 -0xf0,0xa3,0xf0,0xa3,0xf0,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,0xf0,0x7f,0x10,
61535 -0x7e,0x00,0x12,0x3a,0xa8,0x75,0xe8,0x03,0x43,0xa8,0x85,0xd2,0xaf,0x90,0x01,0xc0,
61536 -0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0xc6,0xf0,0xa3,0xf0,0x90,0x97,
61537 -0x37,0xe0,0x64,0x01,0xf0,0x24,0xd3,0x90,0x01,0xc4,0xf0,0x74,0x62,0xa3,0xf0,0xe5,
61538 -0x55,0x30,0xe6,0x17,0xc2,0xaf,0x53,0x55,0xbf,0xd2,0xaf,0x12,0x45,0x09,0x90,0x97,
61539 -0x6d,0xe0,0xff,0x60,0x03,0xb4,0x01,0x03,0x12,0x6a,0x1f,0xe5,0x55,0x30,0xe7,0x07,
61540 -0xc2,0xaf,0x53,0x55,0x7f,0xd2,0xaf,0xe5,0x55,0x30,0xe4,0x0a,0xc2,0xaf,0x53,0x55,
61541 -0xef,0xd2,0xaf,0x12,0x61,0x32,0x90,0x97,0x6d,0xe0,0x70,0x03,0x12,0x6d,0x29,0x12,
61542 -0x7d,0x45,0x80,0xaa,0x90,0x00,0x02,0x12,0x1c,0xef,0x90,0x97,0x6b,0xf0,0x90,0x00,
61543 -0x01,0x12,0x1c,0xef,0x25,0xe0,0x25,0xe0,0x90,0x97,0x6a,0xf0,0x12,0x1c,0xd6,0x25,
61544 -0xe0,0x25,0xe0,0x90,0x97,0x6e,0xf0,0x90,0x97,0x6b,0xe0,0x90,0x04,0x98,0xf0,0x90,
61545 -0x97,0x6a,0xe0,0x13,0x13,0x54,0x3f,0x90,0x04,0x99,0xf0,0x90,0x97,0x6e,0xe0,0x13,
61546 -0x13,0x54,0x3f,0x90,0x04,0x9a,0xf0,0x90,0x05,0x60,0xe0,0x90,0x97,0x79,0xf0,0x90,
61547 -0x05,0x61,0xe0,0x90,0x97,0x7a,0xf0,0x90,0x05,0x62,0xe0,0x90,0x97,0x7b,0xf0,0x90,
61548 -0x05,0x63,0xe0,0x90,0x97,0x7c,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x97,0x49,0xf0,0xc2,
61549 -0xaf,0x90,0x97,0x6a,0xe0,0xff,0x12,0x79,0x7c,0x90,0x97,0x49,0xe0,0x24,0xff,0x92,
61550 -0xaf,0x90,0x97,0x6b,0xe0,0x70,0x03,0x02,0x65,0x61,0x90,0x97,0x6a,0xe0,0x70,0x03,
61551 -0x02,0x65,0x61,0x90,0x97,0x6e,0xe0,0x70,0x03,0x02,0x65,0x61,0xa2,0xaf,0xe4,0x33,
61552 -0x90,0x97,0x49,0xf0,0xc2,0xaf,0x90,0x97,0x7d,0x74,0x01,0xf0,0x90,0x97,0x49,0xe0,
61553 -0x24,0xff,0x92,0xaf,0x90,0x00,0x45,0xe0,0x54,0xfe,0xf0,0xa3,0xe0,0x44,0x01,0xf0,
61554 -0x90,0x97,0x63,0xe0,0x60,0x1d,0x90,0x97,0x6f,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,
61555 -0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x08,0x12,0x33,
61556 -0xd8,0x80,0x06,0x90,0x05,0x22,0x74,0x7f,0xf0,0x90,0x00,0x45,0xe0,0x54,0xef,0xf0,
61557 -0x90,0x05,0x87,0xe0,0x64,0x80,0xf0,0x90,0x97,0x79,0xe0,0x90,0x05,0x84,0xf0,0x90,
61558 -0x97,0x7a,0xe0,0x90,0x05,0x85,0xf0,0x90,0x97,0x7b,0xe0,0x90,0x05,0x86,0xf0,0x90,
61559 -0x97,0x7c,0xe0,0x90,0x05,0x87,0xf0,0xa2,0xaf,0xe4,0x33,0x90,0x97,0x49,0xf0,0xc2,
61560 -0xaf,0x90,0x01,0x3c,0xe0,0x44,0x20,0xf0,0x7d,0x20,0xe4,0xff,0x12,0x3a,0x49,0x80,
61561 -0x2b,0x90,0x97,0x6b,0xe0,0x70,0x2d,0x90,0x97,0x7d,0xf0,0x90,0x00,0x45,0xe0,0x54,
61562 -0xfe,0xf0,0xa3,0xe0,0x54,0xfe,0xf0,0x90,0x05,0x22,0xe4,0xf0,0xa2,0xaf,0x33,0x90,
61563 -0x97,0x49,0xf0,0xc2,0xaf,0x7d,0x20,0xe4,0xff,0x12,0x39,0xdb,0x90,0x97,0x49,0xe0,
61564 -0x24,0xff,0x92,0xaf,0x22,0xbb,0x01,0x06,0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,
61565 -0xf7,0x22,0xbb,0xfe,0x01,0xf3,0x22,0xf8,0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,
61566 -0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0x22,0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,
61567 -0xbb,0xfe,0x05,0xe9,0x25,0x82,0xc8,0xf2,0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,
61568 -0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xa3,
61569 -0xf8,0xe0,0xc5,0xf0,0x25,0xf0,0xf0,0xe5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,0xe0,
61570 -0xc8,0x38,0xf0,0xe8,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xe0,0xf5,0xf0,0xa3,
61571 -0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,0xfe,0x07,0xe3,0xf5,0xf0,
61572 -0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,0xf0,0x74,0x01,0x93,0x22,
61573 -0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe0,0xf5,0xf0,
61574 -0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,0x08,0xe6,0x22,0xbb,0xfe,
61575 -0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,0xe5,0x83,0x2a,0xf5,0x83,
61576 -0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,0x83,0xf0,
61577 -0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,0x19,0x22,0xbb,0xfe,0x06,
61578 -0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,0xe5,0x82,0x29,0xf5,0x82,
61579 -0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x09,0xe9,0x25,
61580 -0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,0x25,0x82,0xc8,0xf2,0xe5,
61581 -0xf0,0x08,0xf2,0x22,0xeb,0x9f,0xf5,0xf0,0xea,0x9e,0x42,0xf0,0xe9,0x9d,0x42,0xf0,
61582 -0xe8,0x9c,0x45,0xf0,0x22,0xa4,0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,
61583 -0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,0x70,0x0d,0xa3,
61584 -0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,0x02,0x93,0x68,
61585 -0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0x90,0x97,0x46,0xeb,0xf0,0xa3,0xea,0xf0,0xa3,
61586 -0xe9,0xf0,0x90,0x97,0x46,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x90,0x00,0x04,
61587 -0x12,0x1c,0xef,0xff,0x54,0x1f,0x90,0x97,0x49,0xf0,0x90,0x00,0x03,0x12,0x1c,0xef,
61588 -0x54,0xf0,0xc4,0x54,0x0f,0x90,0x97,0x4a,0xf0,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,
61589 -0xa3,0xf0,0x90,0x97,0x49,0xe0,0xff,0x75,0xf0,0x08,0xa4,0x24,0x65,0xf5,0x82,0xe4,
61590 -0x34,0x93,0xad,0x82,0x90,0x97,0x4c,0xf0,0xa3,0xed,0xf0,0xef,0x75,0xf0,0x08,0xa4,
61591 -0x24,0x63,0xf9,0x74,0x93,0x35,0xf0,0xfa,0xa3,0x74,0x01,0xf0,0xa3,0xea,0xf0,0xa3,
61592 -0xe9,0xf0,0x90,0x97,0x46,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x90,0x00,0x03,0x12,0x1c,
61593 -0xef,0x54,0x0f,0xff,0x90,0x97,0x4e,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0xef,
61594 -0x12,0x65,0x95,0x90,0x97,0x46,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x90,0x00,
61595 -0x02,0x12,0x1c,0xef,0xff,0x90,0x97,0x4e,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,
61596 -0x90,0x00,0x01,0xef,0x12,0x65,0xa7,0x90,0x97,0x46,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,
61597 -0xe0,0xf9,0x90,0x00,0x01,0x12,0x1c,0xef,0xff,0x90,0x97,0x4c,0xe0,0xfc,0xa3,0xe0,
61598 -0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,0x12,0x1c,0xd6,0x8d,0x82,0x8c,0x83,0xa3,0xf0,
61599 -0x90,0x97,0x4a,0xe0,0xfe,0x90,0x97,0x49,0xe0,0xff,0x24,0xc1,0xf5,0x82,0xe4,0x34,
61600 -0x92,0xf5,0x83,0xee,0xf0,0x90,0x97,0x4b,0xe0,0xfe,0xef,0x75,0xf0,0x08,0xa4,0x24,
61601 -0x69,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xee,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,
61602 -0x6a,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0x74,0x01,0xf0,0x02,0x54,0xe6,0xc0,0xe0,
61603 -0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,
61604 -0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0xfe,
61605 -0xf0,0x74,0x67,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,0x3c,0xe0,0x55,0x30,0xf5,0x34,
61606 -0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,0xf5,0x36,0xe5,0x34,0x30,0xe0,
61607 -0x0f,0x90,0x01,0x3c,0x74,0x01,0xf0,0x90,0x01,0x53,0x74,0x07,0xf0,0x43,0x55,0x80,
61608 -0xe5,0x34,0x30,0xe1,0x09,0x90,0x01,0x3c,0x74,0x02,0xf0,0x12,0x7b,0x00,0xe5,0x34,
61609 -0x30,0xe2,0x3a,0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe0,0x1e,
61610 -0x75,0x48,0x14,0x75,0x49,0x00,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x38,0xec,
61611 -0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x80,0x0f,0x90,0x97,
61612 -0x87,0xe4,0xf0,0x90,0x97,0x8b,0xe0,0xff,0x7d,0x01,0x12,0x6e,0xda,0xe5,0x34,0x30,
61613 -0xe3,0x06,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe5,0x34,0x30,0xe4,0x09,0x90,0x01,0x3c,
61614 -0x74,0x10,0xf0,0x12,0x7e,0xdf,0xe5,0x34,0x30,0xe5,0x09,0x90,0x01,0x3c,0x74,0x20,
61615 -0xf0,0x12,0x6f,0xa2,0xe5,0x35,0x30,0xe0,0x15,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,
61616 -0x00,0x83,0xe0,0x90,0x97,0x8b,0xf0,0xe0,0xff,0x7d,0x01,0x12,0x6e,0xda,0xe5,0x36,
61617 -0x30,0xe3,0x06,0x90,0x01,0x3e,0x74,0x08,0xf0,0x74,0xfe,0x04,0x90,0x01,0xc4,0xf0,
61618 -0x74,0x67,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,
61619 -0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x8b,
61620 -0x10,0x8a,0x11,0x89,0x12,0x90,0x00,0x02,0x12,0x1c,0xef,0x90,0x97,0x6c,0xf0,0xe0,
61621 -0x90,0x04,0x94,0xf0,0x90,0x00,0x01,0x12,0x1c,0xef,0x90,0x04,0x95,0xf0,0x90,0x97,
61622 -0x6c,0xe0,0x30,0xe0,0x74,0x90,0x97,0x63,0x74,0x01,0xf0,0x7f,0x80,0x7e,0x08,0x12,
61623 -0x2b,0x13,0x90,0x97,0x65,0x12,0x1d,0xa9,0xab,0x10,0xaa,0x11,0xa9,0x12,0x90,0x00,
61624 -0x01,0x12,0x1c,0xef,0xff,0xe4,0xfc,0xfd,0xfe,0x78,0x1a,0x12,0x1d,0x96,0xa8,0x04,
61625 -0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x97,0x65,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,
61626 -0xfe,0xa3,0xe0,0xff,0xec,0x54,0x03,0xfc,0xeb,0x4f,0xff,0xea,0x4e,0xfe,0xe9,0x4d,
61627 -0xfd,0xe8,0x4c,0xfc,0x90,0x97,0x6f,0x12,0x1d,0xa9,0x90,0x05,0x22,0xe4,0xf0,0x90,
61628 -0x97,0x6f,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x78,0x18,0x12,
61629 -0x1d,0x83,0x90,0x04,0x96,0xef,0xf0,0x80,0x45,0xe4,0x90,0x97,0x63,0xf0,0x7f,0x80,
61630 -0x7e,0x08,0x12,0x2b,0x13,0x90,0x97,0x65,0x12,0x1d,0xa9,0x90,0x97,0x65,0xe0,0xfc,
61631 -0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0xec,0x44,0xc0,0xfc,0x90,0x97,0x65,
61632 -0x12,0x1d,0xa9,0x90,0x97,0x65,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,
61633 -0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x08,0x12,0x33,0xd8,0x90,0x97,
61634 -0x6c,0xe0,0x90,0x00,0x47,0x30,0xe1,0x11,0x74,0x0c,0xf0,0xa3,0xe0,0x44,0x0c,0xf0,
61635 -0x90,0x00,0x46,0xe0,0x44,0x10,0xf0,0x80,0x10,0xe0,0x54,0xf3,0xf0,0xa3,0xe0,0x54,
61636 -0xf3,0xf0,0x90,0x00,0x46,0xe0,0x54,0xef,0xf0,0xe4,0x90,0x97,0x69,0xf0,0x22,0x90,
61637 -0x97,0x64,0xe0,0xc3,0x94,0x14,0x50,0x06,0xe0,0x04,0xf0,0x02,0x6a,0xd9,0x90,0x97,
61638 -0x64,0xe0,0x64,0x14,0x60,0x03,0x02,0x6a,0xd9,0x90,0x97,0x73,0xe0,0x70,0x25,0x90,
61639 -0x97,0x76,0xe0,0x70,0x1f,0x90,0x97,0x74,0xe0,0x70,0x19,0x90,0x97,0x77,0xe0,0x70,
61640 -0x13,0x90,0x97,0x75,0xe0,0x70,0x0d,0x90,0x97,0x78,0xe0,0x70,0x07,0x90,0x04,0xfd,
61641 -0xe0,0x54,0xfe,0xf0,0x90,0x97,0x73,0xe0,0x90,0x04,0x88,0xf0,0x90,0x97,0x74,0xe0,
61642 -0x90,0x04,0x89,0xf0,0x90,0x97,0x75,0xe0,0x90,0x04,0x8a,0xf0,0xa3,0xe4,0xf0,0x90,
61643 -0x97,0x76,0xe0,0x90,0x04,0x8c,0xf0,0x90,0x97,0x77,0xe0,0x90,0x04,0x8d,0xf0,0x90,
61644 -0x97,0x78,0xe0,0x90,0x04,0x8e,0xf0,0xa3,0xe4,0xf0,0x90,0x97,0x5f,0xe0,0x90,0x04,
61645 -0x90,0xf0,0x90,0x97,0x60,0xe0,0x90,0x04,0x91,0xf0,0x90,0x97,0x61,0xe0,0x90,0x04,
61646 -0x92,0xf0,0x90,0x97,0x62,0xe0,0x90,0x04,0x93,0xf0,0xe4,0x90,0x97,0x64,0xf0,0x90,
61647 -0x97,0x5f,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x97,0x73,0xf0,0xa3,
61648 -0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x97,0x64,0xe0,0x90,0x04,0x97,
61649 -0xf0,0x90,0x05,0x60,0xe0,0x90,0x97,0x3a,0xf0,0x90,0x05,0x61,0xe0,0x90,0x97,0x3b,
61650 -0xf0,0x90,0x05,0x62,0xe0,0x90,0x97,0x3c,0xf0,0x90,0x05,0x63,0xe0,0x90,0x97,0x3d,
61651 -0xf0,0x90,0x97,0x7c,0xe0,0xff,0x90,0x97,0x3d,0xe0,0xfe,0xd3,0x9f,0x50,0x0b,0x90,
61652 -0x97,0x7c,0xe0,0xc3,0x9e,0xd3,0x94,0x01,0x40,0x11,0x90,0x97,0x6a,0xe0,0xb4,0x01,
61653 -0x02,0x80,0x03,0x90,0x97,0x6e,0xe0,0xff,0x12,0x79,0x7c,0x22,0x90,0x97,0xb0,0xed,
61654 -0xf0,0x90,0x97,0xaf,0xef,0xf0,0xd3,0x94,0x07,0x50,0x6d,0xe0,0xff,0x74,0x01,0xa8,
61655 -0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,
61656 -0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0xaf,0xe0,0xff,0x74,0x01,0xa8,0x07,
61657 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0x7f,0x10,
61658 -0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0xb0,0xe0,0x60,0x16,0x90,0x97,0xaf,0xe0,0xff,
61659 -0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,
61660 -0x78,0x90,0x97,0xaf,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
61661 -0xfc,0xf4,0xff,0x90,0x00,0x45,0x80,0x7d,0x90,0x97,0xaf,0xe0,0x24,0xf8,0xf0,0xe0,
61662 -0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,0xf4,
61663 -0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,
61664 -0xaf,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,
61665 -0x00,0x43,0xe0,0x4f,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0xb0,0xe0,
61666 -0x60,0x1b,0x90,0x97,0xaf,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
61667 -0xd8,0xfc,0xc4,0x54,0xf0,0xff,0x90,0x00,0x42,0xe0,0x4f,0x80,0x1a,0x90,0x97,0xaf,
61668 -0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xc4,0x54,0xf0,
61669 -0xf4,0xff,0x90,0x00,0x42,0xe0,0x5f,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x22,
61670 -0x90,0x01,0xc4,0x74,0x30,0xf0,0x74,0x6c,0xa3,0xf0,0x7f,0x78,0x7e,0x08,0x12,0x2b,
61671 -0x13,0x90,0x97,0x1d,0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x0c,0x12,0x2b,0x13,0x90,0x97,
61672 -0x21,0x12,0x1d,0xa9,0x7f,0x00,0x7e,0x08,0x12,0x2b,0x13,0x90,0x97,0x25,0x12,0x1d,
61673 -0xa9,0x90,0x97,0x97,0xe0,0x90,0x97,0x1d,0xb4,0x01,0x13,0xe0,0xfc,0xa3,0xe0,0xfd,
61674 -0xa3,0xe0,0xfe,0xa3,0xe0,0x54,0xc7,0xff,0xed,0x54,0xc7,0xfd,0x80,0x0d,0xe0,0xfc,
61675 -0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0x54,0xc7,0xff,0xec,0x90,0x81,0x56,0x12,
61676 -0x1d,0xa9,0x7f,0x78,0x7e,0x08,0x12,0x33,0xd8,0x90,0x97,0x21,0xe0,0xfc,0xa3,0xe0,
61677 -0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0x54,0x0f,0xff,0xec,0x90,0x81,0x56,0x12,0x1d,0xa9,
61678 -0x7f,0x04,0x7e,0x0c,0x12,0x33,0xd8,0x90,0x97,0x25,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,
61679 -0xe0,0xfe,0xa3,0xe0,0x44,0x02,0xff,0xec,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x00,
61680 -0x7e,0x08,0x12,0x33,0xd8,0x7f,0x70,0x7e,0x0e,0x12,0x2b,0x13,0x90,0x97,0x29,0x12,
61681 -0x1d,0xa9,0x90,0x81,0x56,0x12,0x1d,0xb5,0x00,0x1b,0x25,0xa0,0x7f,0x70,0x7e,0x0e,
61682 -0x12,0x33,0xd8,0x90,0x81,0x24,0x12,0x1d,0xb5,0x00,0x00,0x00,0x00,0xe4,0xfd,0xff,
61683 -0x12,0x38,0xb6,0x90,0x97,0x97,0xe0,0xb4,0x01,0x11,0x90,0x81,0x24,0x12,0x1d,0xb5,
61684 -0x00,0x00,0x00,0x00,0xe4,0xfd,0x7f,0x01,0x12,0x38,0xb6,0x90,0x00,0x11,0xe0,0x54,
61685 -0xf6,0xf0,0x7f,0x10,0x7e,0x00,0x02,0x3a,0xa8,0x90,0x97,0x7d,0xe0,0x64,0x01,0x60,
61686 -0x09,0x90,0x97,0x6b,0xe0,0x60,0x03,0x02,0x6e,0x01,0x90,0x97,0x5f,0xe0,0xc3,0x94,
61687 -0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x3b,0x90,0x97,0x60,0xe0,0xc3,0x94,0xff,0x50,
61688 -0x06,0xe0,0x04,0xf0,0xe4,0x80,0x28,0x90,0x97,0x61,0xe0,0xc3,0x94,0xff,0x50,0x0a,
61689 -0xe0,0x04,0xf0,0xe4,0x90,0x97,0x60,0xf0,0x80,0x15,0x90,0x97,0x62,0xe0,0xc3,0x94,
61690 -0xff,0x50,0x10,0xe0,0x04,0xf0,0xe4,0x90,0x97,0x61,0xf0,0x90,0x97,0x60,0xf0,0x90,
61691 -0x97,0x5f,0xf0,0x90,0x00,0x44,0xe0,0x54,0x0c,0x60,0x76,0xe0,0x30,0xe2,0x32,0x90,
61692 -0x97,0x73,0xe0,0xc3,0x94,0xff,0x50,0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x97,0x74,
61693 -0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,0x04,0xf0,0xe4,0x80,0x11,0x90,0x97,0x75,0xe0,
61694 -0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,0xf0,0xe4,0x90,0x97,0x74,0xf0,0x90,0x97,0x73,
61695 -0xf0,0x90,0x00,0x44,0xe0,0x30,0xe3,0x32,0x90,0x97,0x76,0xe0,0xc3,0x94,0xff,0x50,
61696 -0x05,0xe0,0x04,0xf0,0x80,0x24,0x90,0x97,0x77,0xe0,0xc3,0x94,0xff,0x50,0x06,0xe0,
61697 -0x04,0xf0,0xe4,0x80,0x11,0x90,0x97,0x78,0xe0,0xc3,0x94,0xff,0x50,0x0c,0xe0,0x04,
61698 -0xf0,0xe4,0x90,0x97,0x77,0xf0,0x90,0x97,0x76,0xf0,0x90,0x04,0xfd,0xe0,0x44,0x01,
61699 -0xf0,0x22,0x90,0x97,0x43,0xeb,0xf0,0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0xad,0x07,0x90,
61700 -0x01,0xc4,0x74,0x02,0xf0,0x74,0x6e,0xa3,0xf0,0xed,0x12,0x66,0xc1,0x6e,0x3f,0x01,
61701 -0x6e,0x4d,0x02,0x6e,0x5b,0x03,0x6e,0x69,0x05,0x6e,0x77,0x06,0x6e,0x85,0x07,0x6e,
61702 -0x93,0x09,0x6e,0xa1,0x0c,0x6e,0xaf,0x0d,0x6e,0xbd,0x0e,0x00,0x00,0x6e,0xcb,0x90,
61703 -0x97,0x43,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x7d,0x9d,0x90,0x97,0x43,
61704 -0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x7f,0x77,0x90,0x97,0x43,0xe0,0xfb,
61705 -0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x7d,0x17,0x90,0x97,0x43,0xe0,0xfb,0xa3,0xe0,
61706 -0xfa,0xa3,0xe0,0xf9,0x02,0x7c,0x0b,0x90,0x97,0x43,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,
61707 -0xe0,0xf9,0x02,0x66,0xe7,0x90,0x97,0x43,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,
61708 -0x02,0x7f,0x28,0x90,0x97,0x43,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x73,
61709 -0x14,0x90,0x97,0x43,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x64,0x34,0x90,
61710 -0x97,0x43,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x7c,0x7e,0x90,0x97,0x43,
61711 -0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x02,0x69,0x0f,0xc2,0xaf,0x74,0x02,0x04,
61712 -0x90,0x01,0xc4,0xf0,0x74,0x6e,0xa3,0xf0,0x80,0xfe,0x8f,0x62,0x8d,0x63,0x90,0x01,
61713 -0xc4,0x74,0xda,0xf0,0x74,0x6e,0xa3,0xf0,0xe5,0x62,0x54,0x0f,0xff,0x90,0x97,0x88,
61714 -0xe0,0x54,0x0f,0x6f,0x60,0x78,0xe5,0x62,0x30,0xe2,0x30,0x90,0x97,0x88,0xe0,0x20,
61715 -0xe2,0x05,0x7f,0x01,0x12,0x7e,0x08,0x90,0x97,0x88,0xe0,0x30,0xe3,0x0a,0xe5,0x62,
61716 -0x20,0xe3,0x05,0x12,0x7e,0x27,0x80,0x56,0x90,0x97,0x88,0xe0,0x20,0xe3,0x4f,0xe5,
61717 -0x62,0x30,0xe3,0x4a,0xaf,0x63,0x12,0x7d,0xe8,0x80,0x43,0x90,0x97,0x88,0xe0,0x54,
61718 -0x0f,0xff,0xbf,0x0c,0x0e,0xe5,0x62,0x20,0xe3,0x09,0x12,0x7d,0x72,0xef,0x60,0x2e,
61719 -0x12,0x7e,0x27,0x90,0x97,0x88,0xe0,0x54,0x0f,0xff,0xbf,0x04,0x0e,0xe5,0x62,0x20,
61720 -0xe2,0x09,0x12,0x7b,0x8a,0xef,0x60,0x16,0x12,0x7c,0x47,0x90,0x97,0x88,0xe0,0x54,
61721 -0x0f,0xff,0xbf,0x02,0x09,0x12,0x7a,0xb8,0xef,0x60,0x03,0x12,0x7e,0x44,0x90,0x97,
61722 -0x88,0xe0,0x54,0x0f,0xff,0x90,0x97,0x8b,0xe0,0x54,0x0f,0x6f,0x70,0x23,0xe0,0x30,
61723 -0xe6,0x1f,0x90,0x97,0x88,0xe0,0x54,0x0f,0xff,0x90,0x97,0x7e,0xe0,0xfe,0x4f,0x90,
61724 -0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x97,0x7e,0xf0,0x90,0x97,0x8b,0xe0,0x54,0xbf,
61725 -0xf0,0x22,0x90,0x97,0x6b,0xe0,0x64,0x01,0x60,0x03,0x02,0x70,0x65,0x90,0x00,0x46,
61726 -0xe0,0x44,0x01,0xf0,0x90,0x97,0x7d,0xe0,0x70,0x40,0x90,0x97,0x63,0xe0,0x60,0x1d,
61727 -0x90,0x97,0x6f,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,
61728 -0x56,0x12,0x1d,0xa9,0x7f,0x80,0x7e,0x08,0x12,0x33,0xd8,0x80,0x06,0x90,0x05,0x22,
61729 -0x74,0x7f,0xf0,0x90,0x97,0x6a,0xe0,0xff,0x12,0x79,0x7c,0x90,0x97,0x7d,0x74,0x01,
61730 -0xf0,0x90,0x00,0x45,0xe0,0x54,0xfe,0xf0,0x80,0x44,0x90,0x97,0x7d,0xe0,0x64,0x01,
61731 -0x70,0x3c,0x90,0x97,0x6e,0xe0,0xff,0x12,0x79,0x7c,0xe4,0x90,0x97,0x7d,0xf0,0x90,
61732 -0x00,0x45,0xe0,0x44,0x01,0xf0,0x90,0x97,0x63,0xe0,0x60,0x1d,0x90,0x97,0x65,0xe0,
61733 -0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,
61734 -0x7f,0x80,0x7e,0x08,0x12,0x33,0xd8,0x80,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x05,
61735 -0x87,0xe0,0x64,0x80,0xf0,0x90,0x97,0x79,0xe0,0x90,0x05,0x84,0xf0,0x90,0x97,0x7a,
61736 -0xe0,0x90,0x05,0x85,0xf0,0x90,0x97,0x7b,0xe0,0x90,0x05,0x86,0xf0,0x90,0x97,0x7c,
61737 -0xe0,0x90,0x05,0x87,0xf0,0x22,0x90,0x97,0x30,0xeb,0xf0,0xa3,0xea,0xf0,0xa3,0xe9,
61738 -0xf0,0x90,0x97,0x96,0xe0,0x64,0x02,0x70,0x03,0x02,0x71,0x1b,0x90,0x01,0xaf,0xe0,
61739 -0x60,0x09,0x90,0x01,0xc7,0xe0,0x04,0xf0,0xf0,0x80,0xf1,0x90,0x97,0xb3,0xe0,0xff,
61740 -0x04,0xf0,0x90,0x97,0x30,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x90,0x00,0x01,
61741 -0xef,0x12,0x65,0xa7,0xa2,0xaf,0xe4,0x33,0x90,0x97,0x36,0xf0,0xc2,0xaf,0x90,0x97,
61742 -0x30,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0x8b,0x24,0x8a,0x25,0xf5,0x26,0x75,0x27,
61743 -0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x79,0x27,0x90,0x97,0x36,0xe0,0x24,0xff,
61744 -0x92,0xaf,0xa2,0xaf,0xe4,0x33,0xf0,0xc2,0xaf,0x90,0x97,0x33,0xe0,0xfb,0xa3,0xe0,
61745 -0xfa,0xa3,0xe0,0x8b,0x24,0x8a,0x25,0xf5,0x26,0x90,0x97,0x30,0xe0,0xfb,0xa3,0xe0,
61746 -0xfa,0xa3,0xe0,0xf9,0x12,0x1c,0xd6,0xff,0xc4,0x54,0x0f,0xf5,0x27,0x7b,0x01,0x7a,
61747 -0x01,0x79,0xa2,0x12,0x79,0x27,0x90,0x97,0x36,0xe0,0x24,0xff,0x92,0xaf,0x90,0x01,
61748 -0xaf,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0x22,0x90,0x01,0xc4,0x74,
61749 -0x1c,0xf0,0x74,0x71,0xa3,0xf0,0x90,0x00,0x11,0xe0,0x44,0x09,0xf0,0x7f,0x10,0x7e,
61750 -0x00,0x12,0x3a,0xa8,0x90,0x97,0x1d,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,
61751 -0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x78,0x7e,0x08,0x12,0x33,0xd8,0x90,
61752 -0x97,0x21,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,
61753 -0x12,0x1d,0xa9,0x7f,0x04,0x7e,0x0c,0x12,0x33,0xd8,0x90,0x97,0x25,0xe0,0xfc,0xa3,
61754 -0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x00,
61755 -0x7e,0x08,0x12,0x33,0xd8,0x90,0x97,0x29,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,
61756 -0xa3,0xe0,0xff,0x90,0x81,0x56,0x12,0x1d,0xa9,0x7f,0x70,0x7e,0x0e,0x12,0x33,0xd8,
61757 -0x90,0x81,0x24,0x12,0x1d,0xb5,0x00,0x03,0x2d,0x95,0xe4,0xfd,0xff,0x12,0x38,0xb6,
61758 -0x90,0x97,0x97,0xe0,0xb4,0x01,0x11,0x90,0x81,0x24,0x12,0x1d,0xb5,0x00,0x03,0x2d,
61759 -0x95,0xe4,0xfd,0x7f,0x01,0x12,0x38,0xb6,0x22,0x90,0x97,0x9e,0xef,0xf0,0xa3,0xed,
61760 -0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xe5,0x65,0x60,0x05,0xe4,0xff,0x12,0x7e,0x99,0x90,
61761 -0x97,0x9e,0xe0,0x30,0xe0,0x09,0x90,0x97,0xa0,0xe4,0xf0,0xa3,0x74,0x80,0xf0,0x90,
61762 -0x04,0x1d,0xe0,0x60,0x1d,0x90,0x05,0x22,0xe0,0x90,0x97,0xa2,0xf0,0xe0,0xff,0x54,
61763 -0x90,0x60,0xec,0x90,0x01,0xc8,0x74,0xfc,0xf0,0xef,0x54,0x6f,0x90,0x05,0x22,0xf0,
61764 -0x80,0xdd,0x90,0x97,0x9e,0xe0,0xff,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,0x25,
61765 -0xef,0xf0,0x90,0x97,0x9f,0xe0,0x60,0x10,0xa3,0xa3,0xe0,0x24,0x10,0xf5,0x82,0xe4,
61766 -0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0x90,0x97,0xa0,0xa3,0xe0,0xff,0xfd,0x24,
61767 -0x08,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2d,0xf5,0x82,0xe4,
61768 -0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,
61769 -0xf5,0x83,0xe0,0x54,0xf7,0xf0,0x90,0x97,0xa0,0xe0,0xfe,0xa3,0xe0,0xff,0x22,0x90,
61770 -0x97,0xb5,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4a,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
61771 -0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,0x7f,0x10,
61772 -0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0xb5,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,
61773 -0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,
61774 -0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,
61775 -0xf8,0xff,0x22,0x90,0x97,0xb5,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,
61776 -0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x7f,
61777 -0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0xb5,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,
61778 -0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x42,0xe0,
61779 -0xfb,0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,
61780 -0xd8,0xf8,0xff,0x22,0x90,0x97,0x46,0xeb,0xf0,0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0xa2,
61781 -0xaf,0xe4,0x33,0xa3,0xf0,0xc2,0xaf,0x90,0x97,0x46,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,
61782 -0xe0,0xf9,0x90,0x00,0x01,0x12,0x66,0x20,0xfa,0xe5,0xf0,0x24,0x00,0xff,0xe4,0x3a,
61783 -0xfe,0x90,0x97,0x46,0xa3,0xe0,0xfa,0x90,0x00,0x01,0xee,0x8f,0xf0,0x12,0x66,0x77,
61784 -0x12,0x1c,0xd6,0xff,0x60,0x37,0xb5,0x5e,0x1b,0x90,0x97,0x46,0xe0,0xfb,0xa3,0xe0,
61785 -0xfa,0xa3,0xe0,0xf9,0x90,0x00,0x01,0x12,0x66,0x20,0x65,0x60,0x70,0x04,0xe5,0x5f,
61786 -0x65,0xf0,0x60,0x2e,0x90,0x97,0x46,0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x90,
61787 -0x00,0x01,0x12,0x66,0x20,0xff,0xae,0xf0,0x12,0x7c,0xb4,0x80,0x15,0x90,0x97,0x46,
61788 -0xe0,0xfb,0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x12,0x1c,0xd6,0x65,0x5e,0x60,0x03,0x12,
61789 -0x7f,0x56,0x90,0x97,0x49,0xe0,0x24,0xff,0x92,0xaf,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,
61790 -0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,
61791 -0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0xab,0xf0,0x74,0x73,
61792 -0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,0xff,0x90,0x00,0x55,0xe0,0x5f,0xf5,
61793 -0x3d,0xe5,0x3d,0x30,0xe6,0x18,0x74,0x40,0xf0,0x90,0x97,0x6c,0xe0,0x54,0x03,0xff,
61794 -0xbf,0x03,0x0b,0x90,0x97,0x69,0xe0,0x60,0x05,0x7f,0x01,0x12,0x44,0x7b,0xe5,0x3d,
61795 -0x30,0xe7,0x15,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x97,0x6c,0xe0,0x54,0x03,0xff,
61796 -0xbf,0x03,0x05,0x7f,0x02,0x12,0x44,0x7b,0x90,0x01,0xc4,0x74,0xab,0xf0,0x74,0x73,
61797 -0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,
61798 -0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0xef,0x60,0x34,
61799 -0x7d,0x7d,0x7f,0x02,0x12,0x39,0xbe,0x7d,0x02,0x7f,0x03,0x12,0x39,0xbe,0x90,0x01,
61800 -0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x7d,0x01,0x7f,0x0c,0x12,0x6e,0xda,
61801 -0xe4,0xff,0x12,0x7e,0x99,0x90,0x06,0x04,0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,
61802 -0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,0x7d,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x7d,
61803 -0xff,0x12,0x3a,0x2f,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x2f,0x90,0x06,0x04,0xe0,0x44,
61804 -0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,0xf0,0x90,0x97,0x83,0xe0,0xa3,0xe0,0x90,
61805 -0x05,0x58,0xf0,0xe5,0x64,0x30,0xe0,0x1b,0x90,0x97,0x81,0xe0,0x70,0x1a,0xe0,0x04,
61806 -0xf0,0x90,0x97,0x88,0xe0,0x54,0x0f,0xc3,0x94,0x04,0x50,0x0c,0x7d,0x01,0x7f,0x04,
61807 -0x02,0x6e,0xda,0xe4,0x90,0x97,0x81,0xf0,0x22,0x02,0x75,0x07,0x02,0x62,0xd3,0xe4,
61808 -0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,0x80,
61809 -0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,0x44,
61810 -0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,0x01,
61811 -0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x7f,0x0e,0xe4,0x7e,0x01,0x93,0x60,0xbc,
61812 -0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,0x0e,
61813 -0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,0xa3,
61814 -0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,0xc5,
61815 -0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x8f,0x0f,0x74,0x75,
61816 -0x90,0x01,0xc4,0xf0,0xa3,0x74,0x4c,0xf0,0xe5,0x0f,0x75,0xf0,0x08,0xa4,0x24,0x67,
61817 -0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0x74,0xa5,0x25,0x0f,0xf5,0x82,0xe4,
61818 -0x34,0x96,0xf5,0x83,0xe0,0x54,0x1f,0xfb,0xd3,0x9f,0x40,0x02,0xab,0x07,0xeb,0x25,
61819 -0xe0,0x24,0x9e,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,
61820 -0xff,0xeb,0x25,0xe0,0x24,0x66,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,
61821 -0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xe4,0xfc,0xfd,0xe5,0x0f,
61822 -0x25,0xe0,0x25,0xe0,0x24,0xe1,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,0x12,0x1d,0xa9,
61823 -0x74,0x84,0x25,0x0f,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xeb,0xf0,0xff,0x22,0x90,
61824 -0x97,0x4c,0xef,0xf0,0xd3,0x94,0x07,0x50,0x33,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
61825 -0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0x7f,0x10,
61826 -0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0x4c,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
61827 -0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0x80,0x3b,0x90,0x97,0x4c,0xe0,
61828 -0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,
61829 -0xc4,0x54,0xf0,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x7f,0x10,0x7e,0x00,0x12,
61830 -0x3a,0xa8,0x90,0x97,0x4c,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
61831 -0xd8,0xfc,0xf4,0xff,0x90,0x00,0x43,0xe0,0x5f,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,
61832 -0xa8,0x22,0x8f,0x0a,0x8d,0x0b,0xad,0x03,0x74,0x76,0x90,0x01,0xc4,0xf0,0xa3,0x74,
61833 -0x52,0xf0,0xe5,0x0b,0x54,0x1f,0xf9,0x74,0x01,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x92,
61834 -0xf5,0x83,0xe0,0xff,0x90,0x04,0xfd,0xe0,0xb4,0x01,0x05,0x75,0x0e,0x03,0x80,0x03,
61835 -0x75,0x0e,0x01,0xed,0xd3,0x95,0x0e,0x40,0x05,0xaf,0x0a,0x02,0x75,0x4c,0x90,0x01,
61836 -0xc5,0x74,0x20,0xf0,0xe5,0x0d,0x2f,0xff,0xe9,0x90,0x41,0xd6,0x93,0xfe,0xef,0xd3,
61837 -0x9e,0x40,0x22,0x90,0x01,0xc5,0x74,0x40,0xf0,0x74,0x01,0x25,0x0a,0xf5,0x82,0xe4,
61838 -0x34,0x92,0xf5,0x83,0xe4,0xf0,0x74,0x84,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x04,0xf5,
61839 -0x83,0xe5,0x0b,0xf0,0x22,0x74,0x01,0x25,0x0a,0xf5,0x82,0xe4,0x34,0x92,0xf5,0x83,
61840 -0xef,0xf0,0x22,0xe4,0x90,0x97,0x2e,0xf0,0xe5,0x65,0x60,0x6c,0xe5,0x64,0x64,0x01,
61841 -0x70,0x66,0xe5,0x65,0x64,0x02,0x60,0x06,0xe5,0x65,0x64,0x03,0x70,0x1d,0x90,0x97,
61842 -0x7f,0xe0,0x14,0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x16,0x90,0x97,0x7f,0xe0,0x70,
61843 -0x0a,0x90,0x97,0x8a,0xe0,0x90,0x97,0x7f,0xf0,0x80,0x00,0x90,0x97,0x2e,0x74,0x01,
61844 -0xf0,0x90,0x97,0x2e,0xe0,0x60,0x31,0x90,0x97,0x8f,0xe0,0x44,0x10,0xf0,0x90,0x97,
61845 -0x85,0xe0,0xf5,0x48,0xe4,0xf5,0x49,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x38,0xec,
61846 -0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x97,0x88,0xe0,0x54,0x0f,0xc3,0x94,0x04,0x50,
61847 -0x07,0x7d,0x01,0x7f,0x04,0x12,0x6e,0xda,0x22,0x90,0x06,0xa9,0xe0,0xf5,0x0a,0x54,
61848 -0xc0,0x70,0x0e,0x90,0x97,0x89,0xf0,0x90,0x97,0x8b,0xe0,0xff,0x7d,0x01,0x02,0x6e,
61849 -0xda,0xe5,0x0a,0x30,0xe6,0x12,0x90,0x97,0x89,0x74,0x01,0xf0,0x90,0x97,0x8f,0xe0,
61850 -0x44,0x01,0xf0,0x12,0x7e,0x7e,0x80,0x07,0x90,0x97,0x8f,0xe0,0x54,0xfe,0xf0,0xe5,
61851 -0x0a,0x30,0xe7,0x29,0x90,0x97,0x89,0x74,0x01,0xf0,0x90,0x97,0x8f,0xe0,0x44,0x02,
61852 -0xf0,0x75,0x48,0x03,0xe4,0xf5,0x49,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x38,0xec,
61853 -0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x97,0x8e,0x74,0x01,0xf0,0x22,0x90,0x97,0x8f,
61854 -0xe0,0x54,0xfd,0xf0,0x22,0x90,0x00,0x2b,0xe0,0x44,0x01,0xf0,0x7f,0xe8,0x7e,0x03,
61855 -0x12,0x3a,0xa8,0x90,0x00,0x08,0xe0,0x44,0x10,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,
61856 -0xa8,0x90,0x00,0x09,0xe0,0x54,0xf7,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,
61857 -0x00,0x28,0xe0,0x54,0xfe,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x00,0x20,
61858 -0xe0,0x54,0xfe,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x00,0x25,0xe0,0x44,
61859 -0x40,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x00,0x09,0xe0,0x54,0xef,0xf0,
61860 -0x7f,0x10,0x7e,0x00,0x02,0x3a,0xa8,0x8b,0x10,0x8a,0x11,0x89,0x12,0x12,0x7e,0xcd,
61861 -0xab,0x10,0xaa,0x11,0xa9,0x12,0x12,0x1c,0xd6,0xf5,0x65,0x14,0x60,0x0e,0x14,0x60,
61862 -0x0f,0x14,0x60,0x1a,0x24,0x03,0x70,0x3c,0x7f,0x01,0x80,0x35,0xe4,0xff,0x80,0x31,
61863 -0x90,0x97,0x8a,0x74,0x01,0xf0,0x90,0x97,0x7f,0xf0,0xe4,0xff,0x80,0x23,0xab,0x10,
61864 -0xaa,0x11,0xa9,0x12,0x90,0x00,0x02,0x12,0x1c,0xef,0xff,0x90,0x97,0x8a,0x70,0x05,
61865 -0x74,0x05,0xf0,0x80,0x02,0xef,0xf0,0x90,0x97,0x8a,0xe0,0x90,0x97,0x7f,0xf0,0xe4,
61866 -0xff,0x12,0x74,0x3d,0x22,0x90,0x00,0x25,0xe0,0x54,0xbf,0xf0,0x7f,0x10,0x7e,0x00,
61867 -0x12,0x3a,0xa8,0x90,0x00,0x20,0xe0,0x44,0x01,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,
61868 -0xa8,0x90,0x00,0x28,0xe0,0x44,0x01,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,
61869 -0x00,0xf0,0xe0,0x30,0xe1,0xf9,0x90,0x00,0x09,0xe0,0x44,0x08,0xf0,0x7f,0x10,0x7e,
61870 -0x00,0x12,0x3a,0xa8,0x90,0x00,0x08,0xe0,0x54,0xef,0xf0,0x7f,0x10,0x7e,0x00,0x12,
61871 -0x3a,0xa8,0x90,0x00,0x2b,0xe0,0x54,0xfe,0xf0,0x7f,0xe8,0x7e,0x03,0x02,0x3a,0xa8,
61872 -0x90,0x00,0x45,0xe4,0xf0,0x90,0x04,0xfd,0xf0,0xa3,0xf0,0x90,0x97,0x6d,0xf0,0x90,
61873 -0x97,0x73,0xf0,0x90,0x97,0x76,0xf0,0x90,0x97,0x74,0xf0,0x90,0x97,0x77,0xf0,0x90,
61874 -0x97,0x75,0xf0,0x90,0x97,0x78,0xf0,0x90,0x97,0x5f,0x04,0xf0,0xe4,0xa3,0xf0,0xa3,
61875 -0xf0,0xa3,0xf0,0x90,0x97,0x64,0xf0,0x90,0x97,0x69,0xf0,0x90,0x97,0x6b,0xf0,0x90,
61876 -0x97,0x7d,0xf0,0x90,0x97,0x6e,0xf0,0x90,0x97,0x6a,0xf0,0x90,0x97,0x63,0xf0,0x90,
61877 -0x00,0x51,0xe0,0x44,0xc0,0xf0,0x22,0x8b,0x21,0x8a,0x22,0x89,0x23,0x90,0x97,0x98,
61878 -0xeb,0xf0,0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0xa3,0xe5,0x24,0xf0,0xa3,0xe5,0x25,0xf0,
61879 -0xa3,0xe5,0x26,0xf0,0xaf,0x27,0x15,0x27,0xef,0x60,0x2a,0x90,0x97,0x9b,0xe0,0xfb,
61880 -0xa3,0xe4,0x75,0xf0,0x01,0x12,0x65,0xdf,0xa9,0xf0,0xfa,0x12,0x1c,0xd6,0xff,0x90,
61881 -0x97,0x98,0xe0,0xfb,0xa3,0xe4,0x75,0xf0,0x01,0x12,0x65,0xdf,0xa9,0xf0,0xfa,0xef,
61882 -0x12,0x65,0x95,0x80,0xcf,0xab,0x21,0xaa,0x22,0xa9,0x23,0x22,0x90,0x05,0x60,0xe0,
61883 -0x90,0x97,0x79,0xf0,0x90,0x05,0x61,0xe0,0x90,0x97,0x7a,0xf0,0x90,0x05,0x62,0xe0,
61884 -0x90,0x97,0x7b,0xf0,0x90,0x05,0x63,0xe0,0x90,0x97,0x7c,0xf0,0xc3,0x74,0xff,0x9f,
61885 -0xfe,0x90,0x97,0x7a,0xe0,0xd3,0x9e,0x40,0x1e,0xe0,0x2f,0xf0,0xa3,0xe0,0xb4,0xff,
61886 -0x0f,0xe4,0xf0,0xa3,0xe0,0xb4,0xff,0x03,0xe4,0xf0,0x22,0x90,0x97,0x7c,0x80,0x03,
61887 -0x90,0x97,0x7b,0xe0,0x04,0xf0,0x22,0x90,0x97,0x7a,0xe0,0x2f,0xf0,0x22,0xe4,0xf5,
61888 -0x64,0x90,0x97,0x8f,0xf0,0xf5,0x65,0x90,0x97,0x8b,0x74,0x0c,0xf0,0x90,0x97,0x88,
61889 -0xf0,0xe4,0x90,0x97,0x8d,0xf0,0x90,0x97,0x87,0xf0,0x90,0x97,0x86,0xf0,0x90,0x97,
61890 -0x8a,0x04,0xf0,0x90,0x97,0x7f,0xf0,0xe4,0x90,0x97,0x8e,0xf0,0x90,0x97,0x89,0xf0,
61891 -0x90,0x97,0x81,0xf0,0x90,0x97,0x85,0x74,0x07,0xf0,0xe4,0x90,0x97,0x80,0xf0,0x90,
61892 -0x97,0x83,0xf0,0xa3,0x74,0x02,0xf0,0xe4,0x90,0x97,0x8c,0xf0,0x22,0xe4,0x90,0x97,
61893 -0xad,0xf0,0xa3,0xf0,0x90,0x01,0xc4,0x74,0x1d,0xf0,0x74,0x7a,0xa3,0xf0,0x90,0x05,
61894 -0xf8,0xe0,0x70,0x0f,0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,0x03,
61895 -0x7f,0x01,0x22,0xd3,0x90,0x97,0xae,0xe0,0x94,0xe8,0x90,0x97,0xad,0xe0,0x94,0x03,
61896 -0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x3a,0xa8,0x90,0x97,0xae,0xe0,
61897 -0x04,0xf0,0x70,0xca,0x90,0x97,0xad,0xe0,0x04,0xf0,0x80,0xc2,0xe4,0x90,0x97,0x95,
61898 -0xf0,0xa2,0xaf,0x33,0x90,0x97,0x3b,0xf0,0x90,0x00,0x80,0xe0,0x20,0xe1,0x1a,0x12,
61899 -0x3a,0xbe,0x12,0x3a,0xbe,0x90,0x97,0x3a,0xe0,0x64,0x01,0xf0,0xe0,0x24,0x6c,0x90,
61900 -0x01,0xc4,0xf0,0x74,0x7a,0xa3,0xf0,0x80,0xdf,0x90,0x06,0x30,0x74,0x01,0xf0,0xc2,
61901 -0xaf,0x90,0x00,0x80,0xe0,0x44,0x80,0xf0,0x7f,0x10,0x7e,0x00,0x12,0x3a,0xa8,0x90,
61902 -0x97,0x3b,0xe0,0x24,0xff,0x92,0xaf,0x22,0x90,0x01,0xc4,0x74,0xb8,0xf0,0x74,0x7a,
61903 -0xa3,0xf0,0xe5,0x55,0x70,0x37,0x90,0x97,0x8b,0xe0,0x54,0x0f,0xd3,0x94,0x01,0x50,
61904 -0x2c,0x90,0x02,0x87,0xe0,0x70,0x26,0x90,0x97,0x96,0xe0,0xb4,0x02,0x10,0x90,0x97,
61905 -0x90,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x08,0x80,0x0f,0x90,0x01,
61906 -0xaf,0xe0,0x70,0x09,0x90,0x97,0x8c,0xe0,0x60,0x03,0x7f,0x01,0x22,0x7f,0x00,0x22,
61907 -0x90,0x97,0x8e,0xe0,0x60,0x12,0xe4,0xf0,0xa3,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0x03,
61908 -0x70,0x33,0x90,0x97,0x89,0xf0,0x80,0x23,0x90,0x97,0x80,0xe0,0x04,0xf0,0x90,0x97,
61909 -0x8f,0xe0,0x54,0xef,0xf0,0x90,0x97,0x80,0xe0,0xd3,0x94,0x01,0x40,0x0d,0xe5,0x64,
61910 -0xb4,0x01,0x12,0xa3,0xe0,0x70,0x0e,0xe0,0x04,0xf0,0x22,0x90,0x97,0x8b,0xe0,0xff,
61911 -0x7d,0x01,0x12,0x6e,0xda,0x22,0xe4,0x90,0x97,0x3a,0xf0,0xef,0x90,0x00,0x31,0xf0,
61912 -0xee,0x54,0x03,0xff,0xa3,0xe0,0x54,0xfc,0x4f,0xf0,0xa3,0xe0,0x54,0x7f,0xf0,0x90,
61913 -0x00,0x30,0xe0,0x20,0xe7,0x0e,0x90,0x97,0x3a,0xe0,0xc3,0x94,0x64,0x50,0x05,0xe0,
61914 -0x04,0xf0,0x80,0xeb,0x90,0x97,0x3a,0xe0,0xc3,0x94,0x64,0x50,0x0a,0x90,0x00,0x30,
61915 -0xe0,0x12,0x65,0x95,0x7f,0x01,0x22,0x7f,0x00,0x22,0x90,0x01,0xc4,0x74,0x8a,0xf0,
61916 -0x74,0x7b,0xa3,0xf0,0x90,0x04,0x1b,0xe0,0x54,0x7f,0x64,0x7f,0x70,0x2b,0x90,0x97,
61917 -0x89,0xe0,0x64,0x01,0x60,0x23,0x90,0x97,0x8b,0xe0,0x54,0x0f,0xd3,0x94,0x02,0x50,
61918 -0x18,0x90,0x97,0x8f,0xe0,0x20,0xe4,0x11,0x90,0x97,0x87,0xe0,0x64,0x01,0x60,0x09,
61919 -0x90,0x97,0x81,0xe0,0x70,0x03,0x7f,0x01,0x22,0x7f,0x00,0x22,0x8f,0x66,0x90,0x01,
61920 -0xc4,0x74,0xcc,0xf0,0x74,0x7b,0xa3,0xf0,0x90,0x97,0x94,0xe0,0xff,0x7d,0x01,0x12,
61921 -0x71,0xc9,0xe5,0x66,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
61922 -0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
61923 -0xe0,0x54,0xef,0xf0,0x90,0x04,0x1f,0x74,0x01,0xf0,0x22,0x12,0x1c,0xd6,0xff,0xc3,
61924 -0x94,0x20,0x50,0x15,0x90,0x00,0x02,0x12,0x1c,0xef,0xfe,0x74,0x23,0x2f,0xf5,0x82,
61925 -0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x80,0x0e,0xef,0xb4,0x20,0x0a,0x90,0x00,0x02,
61926 -0x12,0x1c,0xef,0x90,0x93,0x61,0xf0,0x74,0x23,0x2f,0xf5,0x82,0xe4,0x34,0x95,0xf5,
61927 -0x83,0xe0,0x90,0x04,0xb2,0xf0,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,0x90,0x05,0x22,
61928 -0x74,0xff,0xf0,0x12,0x7a,0x1d,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,0xf0,0x7d,
61929 -0x02,0x7f,0x03,0x12,0x3a,0x2f,0xe5,0x65,0x60,0x05,0x7f,0x01,0x12,0x7e,0x99,0x12,
61930 -0x6c,0x30,0x90,0x97,0x88,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,0x22,0x90,0x00,
61931 -0x02,0x12,0x1c,0xef,0x90,0x97,0x6d,0xf0,0xe0,0x90,0x04,0x9b,0xf0,0x90,0x97,0x6d,
61932 -0xe0,0x60,0x04,0xe0,0xb4,0xff,0x1c,0xa2,0xaf,0xe4,0x33,0xf5,0x10,0xc2,0xaf,0x90,
61933 -0x00,0x47,0xe0,0x54,0xfb,0xf0,0x7d,0x40,0x7f,0x01,0x12,0x39,0xf8,0xe5,0x10,0x24,
61934 -0xff,0x92,0xaf,0x22,0x90,0x97,0x4a,0xee,0xf0,0xa3,0xef,0xf0,0x75,0x5e,0x01,0x8e,
61935 -0x5f,0xf5,0x60,0x7f,0x0b,0x12,0x75,0xcf,0x12,0x7e,0x61,0xe4,0xff,0x12,0x7f,0x1b,
61936 -0x90,0x97,0x4a,0xe0,0xfc,0xa3,0xe0,0xfd,0xec,0xfb,0x8d,0x48,0xe4,0xf5,0x49,0x7d,
61937 -0x01,0x7f,0x60,0x7e,0x01,0x02,0x38,0xec,0x7d,0x02,0x7f,0x03,0x12,0x39,0xbe,0xe5,
61938 -0x65,0x60,0x23,0x90,0x97,0x8d,0xe0,0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x0f,0x90,
61939 -0x97,0x88,0xe0,0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x6e,
61940 -0xda,0xe4,0xff,0x12,0x7e,0x99,0x22,0x90,0x02,0x09,0xe0,0xfd,0x12,0x1c,0xd6,0xfe,
61941 -0xaf,0x05,0xed,0x2e,0x90,0x97,0x92,0xf0,0x90,0x00,0x01,0x12,0x1c,0xef,0xff,0xed,
61942 -0x2f,0x90,0x97,0x93,0xf0,0x90,0x00,0x02,0x12,0x1c,0xef,0xff,0xae,0x05,0xed,0x2f,
61943 -0x90,0x97,0x94,0xf0,0x22,0x90,0x06,0x34,0xe0,0x60,0x26,0x14,0x70,0x1b,0x7b,0x01,
61944 -0x7a,0x06,0x79,0x35,0x7f,0xf9,0x7e,0x01,0x12,0x7b,0x46,0xbf,0x01,0x09,0x90,0x06,
61945 -0x35,0xe0,0x54,0x0f,0xf0,0x80,0x05,0x80,0x00,0x02,0x7f,0x00,0xe4,0x90,0x06,0x34,
61946 -0xf0,0x22,0x90,0x01,0xc4,0x74,0x72,0xf0,0x74,0x7d,0xa3,0xf0,0x90,0x04,0x1b,0xe0,
61947 -0x54,0x7f,0xff,0xbf,0x7f,0x14,0x90,0x97,0x87,0xe0,0x70,0x0e,0x90,0x97,0x8b,0xe0,
61948 -0x54,0x0f,0xd3,0x94,0x04,0x50,0x03,0x7f,0x01,0x22,0x7f,0x00,0x22,0x90,0x00,0x01,
61949 -0x12,0x1c,0xef,0x90,0x97,0x8d,0xf0,0x12,0x1c,0xd6,0x65,0x65,0x60,0x15,0xa2,0xaf,
61950 -0xe4,0x33,0x90,0x97,0x46,0xf0,0xc2,0xaf,0x12,0x78,0x17,0x90,0x97,0x46,0xe0,0x24,
61951 -0xff,0x92,0xaf,0x22,0x90,0x97,0x2e,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,
61952 -0x80,0xf0,0x90,0x97,0x33,0xe4,0xf0,0xa3,0x74,0x00,0xf0,0xa3,0x74,0x56,0xf0,0x7b,
61953 -0x01,0x7a,0x97,0x79,0x2e,0x02,0x70,0x66,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,
61954 -0x60,0x0a,0xe5,0x64,0xb4,0x01,0x05,0xe4,0xff,0x12,0x7b,0xcc,0x90,0x97,0x88,0xe0,
61955 -0x54,0xf0,0xf0,0xe0,0x44,0x0c,0xf0,0x22,0x90,0x97,0xb2,0xef,0xf0,0x12,0x71,0x1c,
61956 -0x90,0x97,0xb2,0xe0,0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x97,0x88,0xe0,0x54,
61957 -0xf0,0xf0,0xe0,0x44,0x04,0xf0,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x64,
61958 -0xb4,0x01,0x05,0x7f,0x01,0x12,0x7b,0xcc,0x90,0x97,0x88,0xe0,0x54,0xf0,0xf0,0xe0,
61959 -0x44,0x04,0xf0,0x22,0x90,0x97,0x88,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x01,0xf0,0x12,
61960 -0x77,0xb5,0x12,0x78,0x75,0x90,0x97,0x88,0xe0,0x54,0xf0,0xf0,0xe0,0x44,0x02,0xf0,
61961 -0x22,0x7f,0x0b,0x12,0x72,0x6f,0xef,0x65,0x61,0x60,0x10,0xe5,0x61,0xb4,0x01,0x05,
61962 -0xe4,0xf5,0x61,0x80,0x03,0x75,0x61,0x01,0x7f,0x01,0x22,0x7f,0x00,0x22,0x90,0x01,
61963 -0xc4,0x74,0x7e,0xf0,0x74,0x7e,0xa3,0xf0,0x90,0x97,0x93,0xe0,0xff,0xe4,0xfd,0x12,
61964 -0x71,0xc9,0x90,0x04,0x1f,0x74,0x01,0xf0,0x22,0xef,0x60,0x0b,0x90,0x97,0x97,0xe0,
61965 -0xb4,0x01,0x10,0xe4,0xff,0x80,0x09,0x90,0x97,0x97,0xe0,0xb4,0x01,0x05,0x7f,0x01,
61966 -0x12,0x4e,0x3b,0x22,0x90,0x00,0x49,0xe0,0x90,0x97,0xb4,0xf0,0xe0,0x54,0x0f,0xf0,
61967 -0xe0,0xff,0x44,0xf0,0x90,0x00,0x49,0xf0,0xef,0x44,0xb0,0xf0,0x22,0xe4,0x90,0x97,
61968 -0x8e,0xf0,0x90,0x97,0x80,0xf0,0x90,0x97,0x89,0xf0,0x90,0x97,0x8f,0xf0,0x22,0xe5,
61969 -0x5e,0xb4,0x01,0x0b,0x12,0x7e,0x61,0xbf,0x01,0x05,0x7f,0x01,0x12,0x7f,0x1b,0x22,
61970 -0x90,0x09,0x28,0xef,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x22,
61971 -0x90,0x06,0x34,0x74,0xff,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x22,0x41,0x97,
61972 -0xb1,0x00,0x41,0x97,0x7e,0x80,0x41,0x97,0xb3,0x00,0x00,0x90,0x01,0xca,0xe5,0x61,
61973 -0xf0,0xef,0x60,0x03,0x12,0x7e,0xb4,0x22,0x90,0x97,0x46,0xeb,0xf0,0xa3,0xea,0xf0,
61974 -0xa3,0xe9,0xf0,0x22,0x90,0x97,0xa7,0xeb,0xf0,0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0x22,
61975 -0x90,0x97,0xaa,0xeb,0xf0,0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0x22,0x8f,0x82,0x8e,0x83,
61976 -0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0xe4,0xf5,0x5e,0x7f,0x60,0x7e,0x01,0x02,0x7f,0x4c,
61977 -0x90,0x97,0x97,0xe0,0x90,0x97,0x2d,0xf0,0x22,0x8f,0x1b,0x8c,0x1c,0x8d,0x1d,0x22,
61978 -0x8f,0x1e,0x8c,0x1f,0x8d,0x20,0x22,0x12,0x1c,0xd6,0xf5,0x64,0x22,0x22,0x52,0x09,
61979 +// =================== v88 UMC B Cut P2PPS with CCX report C2H 2012-12-05 =====================
61980 +u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImgArrayLength] = {
61981 +0xC2, 0x88, 0x02, 0x05, 0x58, 0x00, 0x02, 0x00, 0x12, 0x05, 0x17, 0x10, 0xC0, 0x3E, 0x01, 0x00,
61982 +0x94, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
61983 +0x02, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
61984 +0x00, 0x00, 0x00, 0x02, 0x60, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
61985 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
61986 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
61987 +0x00, 0x00, 0x00, 0x02, 0x67, 0x5B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x4B, 0x87, 0x00, 0x00,
61988 +0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03, 0x00, 0x04, 0x06, 0x05, 0x04, 0x02,
61989 +0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09, 0x08, 0x06, 0x00, 0x08, 0x0A, 0x09,
61990 +0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x00, 0x00, 0x08,
61991 +0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10, 0x00, 0x18, 0x22, 0x21, 0x20, 0x18,
61992 +0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21, 0x20, 0x08, 0x00, 0x20, 0x22, 0x21,
61993 +0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20, 0x22, 0x20, 0x18, 0x08, 0x00, 0x20,
61994 +0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00, 0x00, 0x30, 0x31, 0x2F, 0x10, 0x10,
61995 +0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28, 0x10, 0x00, 0x00, 0x30, 0x31, 0x20,
61996 +0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04,
61997 +0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05,
61998 +0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05, 0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E,
61999 +0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E,
62000 +0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A,
62001 +0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04,
62002 +0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60,
62003 +0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40,
62004 +0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40, 0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8,
62005 +0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0C,
62006 +0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x28,
62007 +0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8, 0x00, 0xF0, 0x01, 0x18, 0x00, 0x64,
62008 +0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58, 0x03, 0x20, 0x03, 0xE8, 0x02, 0x02,
62009 +0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07, 0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E,
62010 +0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
62011 +0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x05, 0x06,
62012 +0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00,
62013 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62014 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62015 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62016 +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62017 +0xBB, 0x01, 0x0C, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x22, 0x50,
62018 +0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE6, 0x22, 0xBB, 0xFE, 0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0x22,
62019 +0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE4, 0x93, 0x22, 0xBB, 0x01, 0x06,
62020 +0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22, 0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8,
62021 +0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22,
62022 +0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE, 0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2,
62023 +0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0, 0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70,
62024 +0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5,
62025 +0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7, 0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3,
62026 +0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83, 0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01,
62027 +0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0,
62028 +0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22,
62029 +0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0, 0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A,
62030 +0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22, 0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A,
62031 +0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7, 0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB,
62032 +0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8, 0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29,
62033 +0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09,
62034 +0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB, 0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8,
62035 +0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC,
62036 +0x48, 0xFC, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xA4,
62037 +0x25, 0x82, 0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA,
62038 +0xA3, 0xE0, 0xF9, 0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82,
62039 +0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0,
62040 +0xA3, 0xE9, 0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93,
62041 +0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74,
62042 +0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4,
62043 +0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5,
62044 +0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60,
62045 +0xE9, 0xA3, 0xA3, 0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0x90, 0x8A, 0xC5, 0xF0, 0xE5, 0x24, 0x70, 0x03,
62046 +0x02, 0x44, 0x9D, 0xE5, 0x21, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0x9D, 0xE5, 0x24, 0x14, 0x60,
62047 +0x29, 0x24, 0xFD, 0x60, 0x25, 0x24, 0x02, 0x24, 0xFB, 0x50, 0x02, 0x80, 0x23, 0x90, 0x8B, 0x0B,
62048 +0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3, 0xE0, 0x60, 0x16, 0x90, 0x8B, 0x0B, 0xE0, 0x70, 0x0A,
62049 +0x90, 0x8B, 0x19, 0xE0, 0x90, 0x8B, 0x0B, 0xF0, 0x80, 0x00, 0x90, 0x8A, 0xC5, 0x74, 0x01, 0xF0,
62050 +0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4, 0x90, 0x8A, 0xC5,
62051 +0xF0, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x70, 0x04, 0x90, 0x8A, 0xC5, 0xF0, 0x90, 0x8A, 0xC5,
62052 +0xE0, 0x60, 0x4A, 0x43, 0x25, 0x10, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0C, 0xE0, 0x75,
62053 +0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x8B, 0x15, 0xE0, 0x2F, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
62054 +0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x22, 0x54,
62055 +0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x90, 0x8B, 0x2C,
62056 +0xE0, 0x30, 0xE0, 0x09, 0x12, 0x66, 0x20, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0xE4, 0xF5,
62057 +0x25, 0xF5, 0x24, 0x75, 0x23, 0x0C, 0x75, 0x22, 0x0C, 0x90, 0x8B, 0x1A, 0xF0, 0x90, 0x8B, 0x18,
62058 +0xF0, 0x90, 0x8B, 0x17, 0xF0, 0x90, 0x8B, 0x19, 0x04, 0xF0, 0x90, 0x8B, 0x0B, 0xF0, 0xE4, 0x90,
62059 +0x8B, 0x1B, 0xF0, 0x90, 0x8B, 0x0D, 0xF0, 0x90, 0x8B, 0x15, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x8B,
62060 +0x0C, 0xF0, 0x90, 0x8B, 0x13, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x10, 0xF0, 0xA3, 0x74,
62061 +0x05, 0xF0, 0x90, 0x8B, 0x0F, 0x74, 0x14, 0xF0, 0x90, 0x8B, 0x16, 0x74, 0x05, 0xF0, 0xE4, 0x90,
62062 +0x8B, 0x0E, 0xF0, 0x90, 0x8B, 0x0A, 0xF0, 0x90, 0x8B, 0x08, 0xF0, 0x90, 0x8B, 0x12, 0xF0, 0x22,
62063 +0x7F, 0x00, 0x22, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0x8E, 0x64, 0x8F, 0x65, 0xAD, 0x65, 0xAC,
62064 +0x64, 0xAF, 0x63, 0x12, 0x4A, 0x5B, 0xAF, 0x65, 0xAE, 0x64, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F,
62065 +0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01,
62066 +0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC,
62067 +0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74,
62068 +0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74,
62069 +0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53,
62070 +0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74,
62071 +0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D,
62072 +0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01,
62073 +0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x67, 0x8D, 0x68, 0xE5, 0x67, 0x54,
62074 +0x0F, 0xFF, 0xE5, 0x22, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x67, 0x30, 0xE2, 0x30, 0xE5, 0x22,
62075 +0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x4A, 0xB2, 0xE5, 0x22, 0x30, 0xE3, 0x10, 0xE5, 0x67, 0x20,
62076 +0xE3, 0x0B, 0x12, 0x49, 0xD5, 0xEF, 0x60, 0x53, 0x12, 0x4A, 0xCC, 0x80, 0x4E, 0xE5, 0x22, 0x20,
62077 +0xE3, 0x49, 0xE5, 0x67, 0x30, 0xE3, 0x44, 0xAF, 0x68, 0x12, 0x4A, 0x7C, 0x80, 0x3D, 0xE5, 0x22,
62078 +0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x67, 0x20, 0xE3, 0x09, 0x12, 0x49, 0xD5, 0xEF, 0x60,
62079 +0x2A, 0x12, 0x4A, 0xCC, 0xE5, 0x22, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E, 0xE5, 0x67, 0x20, 0xE2,
62080 +0x09, 0x12, 0x49, 0x93, 0xEF, 0x60, 0x14, 0x12, 0x4A, 0x32, 0xE5, 0x22, 0x54, 0x0F, 0xFF, 0xBF,
62081 +0x02, 0x09, 0x12, 0x45, 0x00, 0xEF, 0x60, 0x03, 0x12, 0x4B, 0x10, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
62082 +0x02, 0x46, 0x6E, 0x02, 0x51, 0x39, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6,
62083 +0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C,
62084 +0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01,
62085 +0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4B,
62086 +0x23, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F,
62087 +0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8,
62088 +0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA,
62089 +0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE,
62090 +0xE7, 0x80, 0xBE, 0xE5, 0x21, 0x64, 0x01, 0x70, 0x67, 0xE5, 0x24, 0x60, 0x63, 0xE5, 0x24, 0x64,
62091 +0x02, 0x60, 0x06, 0xE5, 0x24, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x8B, 0x0B,
62092 +0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x8B, 0x19, 0xF0, 0x90, 0x8B, 0x0B, 0xE0, 0x70, 0x07, 0x90,
62093 +0x8B, 0x19, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x8B, 0x0B, 0xE0, 0xFF, 0x90, 0x8B, 0x0B, 0xEF, 0xF0,
62094 +0x90, 0x8B, 0x0D, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x8B, 0x0C, 0xF0, 0x90, 0x05, 0x58,
62095 +0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x53, 0x25,
62096 +0xFD, 0x53, 0x25, 0xEF, 0xE5, 0x24, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x47, 0x8E,
62097 +0x22, 0xEF, 0x64, 0x01, 0x70, 0x35, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x36, 0x75, 0x7D, 0x02, 0x7F,
62098 +0x03, 0x12, 0x36, 0x75, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12,
62099 +0x45, 0x9E, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x66, 0x20, 0x90, 0x06, 0x04, 0xE0,
62100 +0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B,
62101 +0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x36, 0xE6, 0x7D, 0x02, 0x7F, 0x03, 0x12,
62102 +0x36, 0xE6, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0,
62103 +0x12, 0x4B, 0x4F, 0xE5, 0x21, 0x20, 0xE0, 0x05, 0xE4, 0x90, 0x8B, 0x0D, 0xF0, 0x22, 0xE4, 0x90,
62104 +0x8A, 0xC5, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x8A, 0xC5, 0xF0, 0xE0, 0x54, 0xC0, 0x70, 0x09,
62105 +0x53, 0x25, 0xFE, 0x53, 0x25, 0xFD, 0x12, 0x4A, 0xFC, 0x90, 0x8A, 0xC5, 0xE0, 0x30, 0xE6, 0x15,
62106 +0x43, 0x25, 0x01, 0x90, 0x8B, 0x1A, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x4A, 0x97, 0x80, 0x08,
62107 +0x12, 0x49, 0x49, 0x80, 0x03, 0x53, 0x25, 0xFE, 0x90, 0x8A, 0xC5, 0xE0, 0x30, 0xE7, 0x27, 0x43,
62108 +0x25, 0x02, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x11, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4,
62109 +0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90,
62110 +0x8B, 0x1B, 0x74, 0x01, 0xF0, 0x22, 0x53, 0x25, 0xFD, 0x22, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x8B,
62111 +0x12, 0x4B, 0x43, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xF5, 0x24, 0x14, 0x60,
62112 +0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03, 0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90,
62113 +0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFD, 0xE4, 0xFF, 0x12, 0x4A,
62114 +0x07, 0x80, 0x29, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFD,
62115 +0x7F, 0x01, 0x12, 0x4A, 0x07, 0x1F, 0x80, 0x14, 0x90, 0x8A, 0xDE, 0x12, 0x43, 0x6B, 0x90, 0x00,
62116 +0x02, 0x12, 0x42, 0x20, 0xFD, 0x7F, 0x02, 0x12, 0x4A, 0x07, 0xE4, 0xFF, 0x12, 0x47, 0x21, 0x22,
62117 +0xE4, 0x90, 0x8A, 0xCB, 0xF0, 0xE5, 0x24, 0x60, 0x49, 0x90, 0x8B, 0x1B, 0xE0, 0x60, 0x0D, 0xE4,
62118 +0xF0, 0x53, 0x25, 0xFD, 0xE5, 0x25, 0x54, 0x07, 0x70, 0x38, 0x80, 0x33, 0x90, 0x8B, 0x0C, 0xE0,
62119 +0x04, 0xF0, 0x53, 0x25, 0xEF, 0x90, 0x8A, 0xCB, 0xE0, 0xFF, 0x90, 0x8B, 0x10, 0xE0, 0x2F, 0xFF,
62120 +0xE4, 0x33, 0xFE, 0x90, 0x8B, 0x0C, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
62121 +0x40, 0x0D, 0xE5, 0x21, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12,
62122 +0x4A, 0xFC, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x63, 0x90, 0x04, 0x1D, 0xE0,
62123 +0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x66, 0x74, 0xFF, 0xF0, 0x12, 0x7E, 0x2D, 0xBF, 0x01,
62124 +0x0D, 0x90, 0x8A, 0xF9, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xDE, 0x12, 0x45, 0x09, 0x90, 0x05,
62125 +0x22, 0xE5, 0x66, 0xF0, 0x80, 0x0D, 0x90, 0x8A, 0xF9, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xDE,
62126 +0x12, 0x45, 0x09, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x24,
62127 +0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x41, 0x90, 0x8B, 0x1A, 0xE0, 0x60, 0x2B, 0x12, 0x45, 0x9E,
62128 +0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
62129 +0x7F, 0x58, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92,
62130 +0x74, 0x01, 0xF0, 0x90, 0x8B, 0x18, 0xF0, 0x22, 0xE5, 0x22, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
62131 +0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x45, 0xA2, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01,
62132 +0x3C, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E,
62133 +0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x5F, 0x74, 0x05,
62134 +0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x17, 0x14, 0xF0, 0xE5, 0x22, 0x54, 0x0F,
62135 +0xC3, 0x94, 0x0C, 0x50, 0x0D, 0x12, 0x45, 0x9E, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x03, 0x12,
62136 +0x66, 0x20, 0x22, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x37, 0xE5, 0x25, 0x54, 0x03, 0x70,
62137 +0x31, 0xE5, 0x23, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x50, 0x28, 0xE5, 0x25, 0x20, 0xE2, 0x23, 0xE5,
62138 +0x25, 0x20, 0xE4, 0x1E, 0x90, 0x8B, 0x0D, 0xE0, 0x70, 0x18, 0x90, 0x8B, 0x12, 0xE0, 0x70, 0x12,
62139 +0xE5, 0x26, 0x70, 0x0E, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F,
62140 +0x01, 0x22, 0x7F, 0x00, 0x22, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x27, 0x90, 0x8B, 0x18,
62141 +0xE0, 0x70, 0x21, 0x90, 0x8B, 0x17, 0xE0, 0x70, 0x1B, 0xE5, 0x23, 0x54, 0x0F, 0xD3, 0x94, 0x04,
62142 +0x50, 0x12, 0xE5, 0x26, 0x70, 0x0E, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x08,
62143 +0xF0, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xEF, 0x24, 0xFE, 0x60, 0x0B, 0x04, 0x70, 0x22, 0x90,
62144 +0x8B, 0x19, 0x74, 0x01, 0xF0, 0x80, 0x16, 0xED, 0x70, 0x0A, 0x90, 0x8B, 0x16, 0xE0, 0x90, 0x8B,
62145 +0x19, 0xF0, 0x80, 0x05, 0x90, 0x8B, 0x19, 0xED, 0xF0, 0x90, 0x8B, 0x19, 0xE0, 0x90, 0x8B, 0x0B,
62146 +0xF0, 0x22, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x7E,
62147 +0x2D, 0xEF, 0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x36,
62148 +0xE6, 0x12, 0x7A, 0x6D, 0x53, 0x22, 0xF0, 0x43, 0x22, 0x02, 0x22, 0xEF, 0x60, 0x0F, 0x74, 0x21,
62149 +0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x74, 0x21, 0x2D,
62150 +0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0,
62151 +0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A, 0xE5, 0x21, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x48, 0xB3,
62152 +0x53, 0x22, 0xF0, 0x43, 0x22, 0x0C, 0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x14, 0x90, 0x8A, 0xF8,
62153 +0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x5F, 0xDE, 0x8E, 0x69, 0x8F, 0x6A, 0x90, 0x04, 0x1F, 0x74, 0x20,
62154 +0xF0, 0x22, 0x90, 0x8B, 0x52, 0xEF, 0xF0, 0x12, 0x4F, 0xED, 0x90, 0x8B, 0x52, 0xE0, 0x60, 0x05,
62155 +0x90, 0x05, 0x22, 0xE4, 0xF0, 0x53, 0x22, 0xF0, 0x43, 0x22, 0x04, 0x22, 0x90, 0x06, 0x04, 0xE0,
62156 +0x44, 0x40, 0xF0, 0xE5, 0x21, 0xB4, 0x01, 0x05, 0x7F, 0x01, 0x12, 0x48, 0xB3, 0x53, 0x22, 0xF0,
62157 +0x43, 0x22, 0x04, 0x22, 0xE5, 0x23, 0x30, 0xE6, 0x12, 0xE5, 0x23, 0x54, 0x0F, 0xFF, 0x90, 0x01,
62158 +0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0, 0x53, 0x23, 0xBF, 0x22, 0x90, 0x8B, 0x2C, 0xE0,
62159 +0x30, 0xE0, 0x05, 0xAF, 0x23, 0x02, 0x66, 0x65, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x22,
62160 +0x53, 0x22, 0xF0, 0x43, 0x22, 0x01, 0x12, 0x4B, 0x5A, 0x12, 0x4B, 0x5B, 0x53, 0x22, 0xF0, 0x43,
62161 +0x22, 0x02, 0x22, 0x41, 0x8A, 0xF6, 0x00, 0x41, 0x8B, 0x05, 0x00, 0x41, 0x8B, 0x51, 0x00, 0x41,
62162 +0x8B, 0x53, 0x00, 0x00, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x7F, 0x64, 0x7F, 0x7F, 0x01, 0x60, 0x02,
62163 +0x7F, 0x00, 0x22, 0xE4, 0x90, 0x8B, 0x1B, 0xF0, 0x90, 0x8B, 0x0C, 0xF0, 0xF5, 0x25, 0x22, 0x90,
62164 +0x8B, 0x13, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x22, 0x22, 0xF0, 0x90, 0x8B, 0x0F,
62165 +0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0xD3, 0x10, 0xAF, 0x01,
62166 +0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x3D, 0xE0, 0xFB, 0xA3, 0xE0, 0xF5, 0x44, 0xE4, 0xF5, 0x45, 0x12,
62167 +0x35, 0xAB, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0,
62168 +0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05,
62169 +0xC0, 0x06, 0xC0, 0x07, 0x75, 0x0E, 0x00, 0x90, 0x01, 0xC4, 0x74, 0x87, 0xF0, 0x74, 0x4B, 0xA3,
62170 +0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31,
62171 +0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34,
62172 +0x30, 0xE0, 0x51, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x1F,
62173 +0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x18, 0x90, 0x8B, 0x34, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xE0,
62174 +0x64, 0x03, 0x60, 0x0B, 0x7F, 0x01, 0xB1, 0xE0, 0xEF, 0x70, 0x04, 0x7F, 0x02, 0xD1, 0x89, 0x90,
62175 +0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x1D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x16, 0x90, 0x8B,
62176 +0x2E, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x09, 0xE4, 0xFF, 0xB1, 0xE0, 0xEF,
62177 +0x70, 0x02, 0xD1, 0x56, 0xE5, 0x34, 0x30, 0xE1, 0x08, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x11,
62178 +0x60, 0xE5, 0x34, 0x30, 0xE2, 0x28, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0,
62179 +0x30, 0xE0, 0x14, 0x90, 0x8B, 0x3D, 0xE4, 0x71, 0x5C, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90,
62180 +0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x07, 0x90, 0x8B, 0x18, 0xE4, 0xF0, 0x51, 0xFC, 0xE5, 0x34,
62181 +0x30, 0xE3, 0x38, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x24,
62182 +0x90, 0x8B, 0x3D, 0xE4, 0xF0, 0x90, 0x8B, 0x0F, 0xE0, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD,
62183 +0x7F, 0x5C, 0x7E, 0x01, 0x71, 0x6C, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74,
62184 +0x02, 0xF0, 0x80, 0x07, 0x90, 0x8B, 0x17, 0xE4, 0xF0, 0x51, 0xFC, 0xE5, 0x34, 0x30, 0xE4, 0x09,
62185 +0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x12, 0x52, 0x3C, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01,
62186 +0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x10, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90,
62187 +0x00, 0x83, 0xE0, 0xF5, 0x23, 0x51, 0xE4, 0x51, 0xFC, 0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01,
62188 +0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90,
62189 +0x8B, 0x05, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05,
62190 +0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x75, 0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0x90,
62191 +0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x18, 0x90, 0x8B, 0x36, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x64,
62192 +0x03, 0x60, 0x0B, 0x7F, 0x01, 0xB1, 0xE0, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0xD1, 0x89, 0x90, 0x8B,
62193 +0x2C, 0xE0, 0x30, 0xE0, 0x49, 0x90, 0x8B, 0x30, 0xE4, 0xF0, 0xFF, 0xB1, 0xE0, 0xEF, 0x60, 0x3E,
62194 +0x12, 0x65, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0x64, 0x06, 0x60, 0x32, 0xEF, 0xB4, 0x04, 0x02,
62195 +0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF, 0x80, 0x14, 0x90, 0x8B, 0x2D,
62196 +0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x05, 0x7F,
62197 +0x01, 0x12, 0x7B, 0x49, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x12, 0x66, 0x20, 0xE5, 0x36,
62198 +0x30, 0xE1, 0x47, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30, 0xE0, 0x19,
62199 +0x90, 0x8B, 0x36, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x33, 0xE0, 0x64, 0x03, 0x60, 0x0B, 0x7F, 0x01,
62200 +0xB1, 0xE0, 0xEF, 0x70, 0x04, 0x7F, 0x02, 0xD1, 0x89, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x1A,
62201 +0x90, 0x8B, 0x30, 0x74, 0x01, 0xF0, 0x12, 0x7D, 0xBE, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60,
62202 +0x09, 0xE4, 0xFF, 0xB1, 0xE0, 0xEF, 0x70, 0x02, 0xD1, 0x56, 0x74, 0x87, 0x04, 0x90, 0x01, 0xC4,
62203 +0xF0, 0x74, 0x4B, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0,
62204 +0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32,
62205 +0xEF, 0x64, 0x01, 0x70, 0x3D, 0x90, 0x8B, 0x35, 0xE0, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B,
62206 +0x08, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x34, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22,
62207 +0x90, 0x8B, 0x32, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0B, 0xEF, 0xC4, 0x13, 0x54,
62208 +0x07, 0x30, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x36, 0xE0, 0x7F, 0x01, 0x60, 0x36, 0x7F,
62209 +0x00, 0x22, 0x90, 0x8B, 0x2F, 0xE0, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x08, 0xE0, 0x60,
62210 +0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x2E, 0xE0, 0x60, 0x03, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x2C,
62211 +0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x30, 0xE0, 0x7F,
62212 +0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x0D, 0xE0, 0x60, 0x16, 0x90, 0x8B, 0x2D, 0xE0,
62213 +0x70, 0x04, 0x7F, 0x05, 0x80, 0x1F, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x01, 0x70, 0x1A, 0x7F, 0x02,
62214 +0x80, 0x13, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x03, 0x80, 0x08, 0x90, 0x8B, 0x2D,
62215 +0xE0, 0x70, 0x05, 0x7F, 0x04, 0x12, 0x7B, 0x49, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
62216 +0x90, 0x8B, 0x33, 0xE0, 0x90, 0x8B, 0x55, 0xF0, 0x6F, 0x70, 0x02, 0xE1, 0x55, 0xEF, 0x14, 0x60,
62217 +0x3B, 0x14, 0x60, 0x5F, 0x14, 0x70, 0x02, 0xE1, 0x30, 0x24, 0x03, 0x60, 0x02, 0xE1, 0x55, 0x90,
62218 +0x8B, 0x55, 0xE0, 0xB4, 0x03, 0x04, 0xF1, 0xC0, 0xE1, 0x55, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x02,
62219 +0x04, 0xF1, 0xAD, 0xE1, 0x55, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x04, 0x04, 0xF1, 0xC4, 0xE1, 0x55,
62220 +0x90, 0x8B, 0x55, 0xE0, 0x64, 0x01, 0x70, 0x7D, 0xF1, 0xAF, 0x80, 0x79, 0x90, 0x8B, 0x55, 0xE0,
62221 +0xFF, 0xB4, 0x03, 0x04, 0xF1, 0xC8, 0x80, 0x6D, 0xEF, 0xB4, 0x02, 0x04, 0xF1, 0xA0, 0x80, 0x65,
62222 +0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x04, 0x04, 0xF1, 0xD3, 0x80, 0x59, 0xEF, 0x70, 0x56, 0xF1,
62223 +0x8D, 0x80, 0x52, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x03, 0x05, 0x12, 0x7A, 0x5E, 0x80, 0x46, 0x90,
62224 +0x8B, 0x55, 0xE0, 0xB4, 0x01, 0x04, 0xF1, 0x71, 0x80, 0x3B, 0x90, 0x8B, 0x55, 0xE0, 0xB4, 0x04,
62225 +0x05, 0x12, 0x7B, 0x37, 0x80, 0x2F, 0x90, 0x8B, 0x55, 0xE0, 0x70, 0x29, 0xF1, 0x6F, 0x80, 0x25,
62226 +0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x01, 0x04, 0xF1, 0x5A, 0x80, 0x19, 0xEF, 0xB4, 0x02, 0x04,
62227 +0xF1, 0x6B, 0x80, 0x11, 0x90, 0x8B, 0x55, 0xE0, 0xFF, 0xB4, 0x04, 0x04, 0xF1, 0x5A, 0x80, 0x05,
62228 +0xEF, 0x70, 0x02, 0xF1, 0x67, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0,
62229 +0x90, 0x8B, 0x33, 0x74, 0x03, 0xF0, 0x22, 0xF1, 0x8D, 0x80, 0xEF, 0xF1, 0xED, 0x80, 0xEB, 0xF1,
62230 +0x8D, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x7E, 0x2D, 0xEF, 0x70, 0x06, 0x90, 0x01, 0xC8,
62231 +0x74, 0xFD, 0xF0, 0x12, 0x7A, 0x6D, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x01, 0x3E,
62232 +0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x37, 0x00, 0x90, 0x8B, 0x33, 0x74, 0x01, 0xF0, 0x22,
62233 +0xF1, 0xED, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0x04, 0xF0, 0x22, 0xF1, 0xA0, 0x7D,
62234 +0x03, 0x7F, 0x02, 0x12, 0x36, 0x92, 0x90, 0x05, 0x27, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0xF0, 0x22,
62235 +0xF1, 0xC8, 0x80, 0xEB, 0xF1, 0xD3, 0x80, 0xE7, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33,
62236 +0x04, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x33, 0x04, 0xF0, 0x22, 0xF1, 0x8D,
62237 +0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x33, 0x74, 0x04, 0xF0, 0x22, 0x90, 0x8B, 0x1C,
62238 +0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x78, 0x7E, 0x08, 0x12, 0x2F, 0xD9,
62239 +0x90, 0x8B, 0x20, 0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x04, 0x7E, 0x0C,
62240 +0x12, 0x2F, 0xD9, 0x90, 0x8B, 0x24, 0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F,
62241 +0x00, 0x7E, 0x08, 0x12, 0x2F, 0xD9, 0x90, 0x8B, 0x28, 0x12, 0x43, 0x53, 0x90, 0x80, 0x85, 0x12,
62242 +0x2A, 0x7F, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2F, 0xD9, 0x90, 0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00,
62243 +0x03, 0x2D, 0x95, 0xE4, 0xFD, 0xFF, 0x12, 0x34, 0x81, 0x90, 0x8B, 0x09, 0xE0, 0xB4, 0x01, 0x11,
62244 +0x90, 0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00, 0x03, 0x2D, 0x95, 0xE4, 0xFD, 0x7F, 0x01, 0x12, 0x34,
62245 +0x81, 0x22, 0x90, 0x02, 0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF,
62246 +0x8E, 0xF0, 0x12, 0x43, 0xBA, 0x50, 0x8D, 0x00, 0x40, 0x50, 0xB5, 0x00, 0x80, 0x50, 0xE0, 0x01,
62247 +0x00, 0x50, 0xF4, 0x02, 0x00, 0x51, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x51, 0x29, 0xED, 0x54, 0x3F,
62248 +0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE,
62249 +0xEF, 0x78, 0x06, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33,
62250 +0xCE, 0xD8, 0xF9, 0x80, 0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00,
62251 +0x7F, 0x80, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13,
62252 +0xD8, 0xF9, 0x78, 0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49,
62253 +0xED, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D,
62254 +0x00, 0xFC, 0x80, 0x35, 0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02,
62255 +0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D,
62256 +0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13,
62257 +0x54, 0x3F, 0x7D, 0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01,
62258 +0xE4, 0x74, 0x58, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x22, 0xE4, 0x90, 0x8A, 0xCC, 0xF0, 0xA3, 0xF0,
62259 +0x75, 0x8E, 0x02, 0x91, 0x81, 0x12, 0x67, 0x0E, 0x90, 0x8B, 0x07, 0xEF, 0xF0, 0x12, 0x67, 0x1B,
62260 +0x90, 0x8B, 0x09, 0xEF, 0xF0, 0x12, 0x67, 0x27, 0x90, 0x8A, 0xF4, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
62261 +0xE4, 0xF5, 0x55, 0xF5, 0x21, 0x12, 0x71, 0x16, 0x12, 0x44, 0x9E, 0x12, 0x32, 0x3D, 0x7F, 0x03,
62262 +0x12, 0x76, 0xAB, 0x12, 0x7A, 0x5A, 0x12, 0x66, 0xD4, 0x12, 0x67, 0x3F, 0x12, 0x67, 0x54, 0x12,
62263 +0x66, 0xF2, 0x12, 0x67, 0x0D, 0x90, 0x8A, 0xCE, 0xE5, 0xD9, 0xF0, 0x31, 0xD2, 0xC2, 0xAF, 0x90,
62264 +0x00, 0x80, 0xE0, 0x44, 0x40, 0xF0, 0x51, 0x81, 0x75, 0xE8, 0x03, 0x43, 0xA8, 0x85, 0xD2, 0xAF,
62265 +0x31, 0x2E, 0x90, 0x8A, 0xCC, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0x39, 0x90, 0x01, 0xC4, 0xF0, 0x74,
62266 +0x51, 0xA3, 0xF0, 0xE5, 0x55, 0x30, 0xE4, 0x09, 0xC2, 0xAF, 0x53, 0x55, 0xEF, 0xD2, 0xAF, 0xB1,
62267 +0xCC, 0xE5, 0x55, 0x30, 0xE6, 0xDC, 0xC2, 0xAF, 0x53, 0x55, 0xBF, 0xD2, 0xAF, 0x12, 0x68, 0x42,
62268 +0x80, 0xD0, 0x90, 0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0,
62269 +0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x31, 0xFB, 0x7D, 0xFF, 0x7F, 0x55, 0x31,
62270 +0xFB, 0x7D, 0xFF, 0x7F, 0x56, 0x31, 0xFB, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
62271 +0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x51, 0x81, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
62272 +0x90, 0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3,
62273 +0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x31, 0xFB, 0xE4, 0xFD, 0x7F, 0x51, 0x31, 0xFB,
62274 +0xE4, 0xFD, 0x7F, 0x52, 0x31, 0xFB, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0xE5, 0x5E, 0x64, 0x01,
62275 +0x70, 0x3B, 0x71, 0xC1, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x71, 0xB5, 0x90, 0x00, 0x46, 0xE0, 0x44,
62276 +0x04, 0xFD, 0x7F, 0x46, 0x31, 0xFB, 0x90, 0x00, 0x44, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x44, 0x31,
62277 +0xFB, 0x90, 0x00, 0x46, 0xE0, 0x54, 0xFB, 0xFD, 0x7F, 0x46, 0x31, 0xFB, 0x7F, 0x02, 0x71, 0xDD,
62278 +0x8F, 0x62, 0x90, 0x01, 0xC9, 0xE5, 0x62, 0xF0, 0xB4, 0x01, 0x02, 0x71, 0x55, 0x22, 0xE0, 0x5F,
62279 +0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF,
62280 +0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xE0, 0xED, 0xF0, 0x90, 0x8A, 0xDF,
62281 +0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x4E, 0xA3, 0xE0, 0x70, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0xFF,
62282 +0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x47,
62283 +0xE0, 0x5F, 0xF0, 0x80, 0x17, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80,
62284 +0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xFF, 0x90, 0x00, 0x47, 0xE0, 0x4F, 0xF0, 0x51, 0x81, 0x90, 0x8A,
62285 +0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF,
62286 +0x90, 0x00, 0x46, 0x80, 0x59, 0x90, 0x8A, 0xDF, 0xE0, 0x24, 0xF8, 0xF0, 0xA3, 0xE0, 0x70, 0x1D,
62287 +0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC,
62288 +0xC4, 0x54, 0xF0, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x5F, 0xF0, 0x80, 0x1A, 0x90, 0x8A, 0xDF,
62289 +0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xC4, 0x54, 0xF0,
62290 +0xFF, 0x90, 0x00, 0x43, 0xE0, 0x4F, 0xF0, 0x51, 0x81, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0x01,
62291 +0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0x51, 0x7E,
62292 +0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x49, 0xE0, 0x90, 0x8B, 0x54, 0xF0, 0xE0, 0x54, 0x0F,
62293 +0xF0, 0x44, 0xF0, 0xFD, 0x7F, 0x49, 0x31, 0xFB, 0x90, 0x8B, 0x54, 0xE0, 0x44, 0xB0, 0xFD, 0x7F,
62294 +0x49, 0x21, 0xFB, 0x90, 0x8A, 0xDD, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0x5E, 0x01, 0x8E, 0x5F,
62295 +0xF5, 0x60, 0xE4, 0xFD, 0x7F, 0x0B, 0x51, 0x91, 0xE4, 0xFD, 0x7F, 0x02, 0x51, 0x91, 0x71, 0xC1,
62296 +0xE4, 0xFF, 0x71, 0xB5, 0xE4, 0xF5, 0x62, 0x90, 0x01, 0xC9, 0xE5, 0x62, 0xF0, 0x90, 0x8A, 0xDD,
62297 +0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 0xFB, 0x8D, 0x44, 0xE4, 0xF5, 0x45, 0x7D, 0x01, 0x7F, 0x60,
62298 +0x7E, 0x01, 0x02, 0x35, 0xAB, 0x90, 0x01, 0xCA, 0xE5, 0x61, 0xF0, 0xEF, 0x60, 0x02, 0x71, 0x55,
62299 +0x22, 0x7F, 0x0B, 0x71, 0xDD, 0xEF, 0x65, 0x61, 0x60, 0x10, 0xE5, 0x61, 0xB4, 0x01, 0x05, 0xE4,
62300 +0xF5, 0x61, 0x80, 0x03, 0x75, 0x61, 0x01, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xD3, 0x10, 0xAF,
62301 +0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x57, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x43, 0xE0, 0xFF,
62302 +0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46,
62303 +0x51, 0x7E, 0x90, 0x8B, 0x57, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05,
62304 +0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF,
62305 +0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80,
62306 +0x4B, 0x90, 0x8B, 0x57, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80,
62307 +0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x5F, 0xF0, 0x51, 0x81, 0x90,
62308 +0x8B, 0x57, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
62309 +0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x42, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05,
62310 +0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF,
62311 +0x22, 0xE4, 0x90, 0x8B, 0x04, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x21,
62312 +0xFB, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x8B, 0x90, 0x8A,
62313 +0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0xFA, 0xE5, 0xF0, 0x24, 0x00, 0xFF,
62314 +0xE4, 0x3A, 0xFE, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0xEE, 0x8F, 0xF0, 0x12,
62315 +0x43, 0x19, 0x12, 0x29, 0xD9, 0xFF, 0x60, 0x2C, 0xB5, 0x5E, 0x16, 0x90, 0x8A, 0xDA, 0x12, 0x43,
62316 +0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0x65, 0x60, 0x70, 0x04, 0xE5, 0x5F, 0x65, 0xF0, 0x60,
62317 +0x22, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0xC2, 0xFF, 0xAE, 0xF0,
62318 +0x71, 0x73, 0x80, 0x0F, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0x65, 0x5E, 0x60,
62319 +0x02, 0xB1, 0x08, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0xF5, 0x5E, 0x7F, 0x60, 0x7E, 0x01, 0x8F,
62320 +0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x8B, 0xEF,
62321 +0x12, 0x43, 0x94, 0x55, 0x5A, 0x01, 0x55, 0x51, 0x02, 0x55, 0x7E, 0x03, 0x55, 0x87, 0x05, 0x55,
62322 +0x90, 0x06, 0x55, 0xCB, 0x07, 0x55, 0x98, 0x08, 0x55, 0xA1, 0x09, 0x55, 0xA9, 0x20, 0x55, 0xB2,
62323 +0x2C, 0x55, 0x63, 0x2D, 0x55, 0x6C, 0x2E, 0x55, 0x75, 0x3B, 0x55, 0xBB, 0x4B, 0x00, 0x00, 0x55,
62324 +0xC4, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x72, 0xFC, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B,
62325 +0x02, 0x73, 0x02, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x73, 0x2F, 0x90, 0x8A, 0xD7, 0x12,
62326 +0x43, 0x6B, 0x02, 0x73, 0x77, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x73, 0xB0, 0x90, 0x8A,
62327 +0xD7, 0x12, 0x43, 0x6B, 0x02, 0x73, 0xC9, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x72, 0xD0,
62328 +0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0xE1, 0x19, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x74,
62329 +0x11, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x81, 0x91, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02,
62330 +0x76, 0xEA, 0x90, 0x8A, 0xD7, 0x12, 0x43, 0x6B, 0x02, 0x78, 0xDE, 0x90, 0x8A, 0xD7, 0x12, 0x43,
62331 +0x6B, 0x02, 0x7A, 0x48, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01,
62332 +0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF,
62333 +0xE0, 0xFD, 0x70, 0x02, 0xE1, 0x14, 0x90, 0x8B, 0x51, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8,
62334 +0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02,
62335 +0xE1, 0x0D, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x43, 0x5F, 0xE0,
62336 +0x90, 0x8A, 0xD0, 0xF0, 0x75, 0x1D, 0x01, 0x75, 0x1E, 0x8A, 0x75, 0x1F, 0xD0, 0x75, 0x20, 0x01,
62337 +0x7B, 0x01, 0x7A, 0x8A, 0x79, 0xD1, 0x12, 0x5F, 0x57, 0x90, 0x8A, 0xD1, 0xE0, 0xFF, 0xC4, 0x13,
62338 +0x13, 0x13, 0x54, 0x01, 0x90, 0x8B, 0x51, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00,
62339 +0x88, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD2, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x02,
62340 +0x90, 0x00, 0x89, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD3, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75,
62341 +0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD4, 0xF0, 0x90, 0x8B, 0x51,
62342 +0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD5, 0xF0, 0x90,
62343 +0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD6,
62344 +0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A,
62345 +0xD2, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x5F, 0xE0,
62346 +0x90, 0x8A, 0xD3, 0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43,
62347 +0x5F, 0xE0, 0x90, 0x8A, 0xD4, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A, 0x8A, 0x79, 0xD2,
62348 +0xB1, 0x19, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x90, 0x8B, 0x51, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06,
62349 +0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8B, 0x51,
62350 +0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC,
62351 +0xF0, 0x90, 0x8B, 0x51, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0xA1, 0xDD, 0x90, 0x01, 0xC6,
62352 +0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x04, 0x12, 0x42, 0x20, 0xFF,
62353 +0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0x90, 0x8A, 0xDA,
62354 +0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90,
62355 +0x00, 0x03, 0x12, 0x42, 0x20, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x00,
62356 +0x04, 0x12, 0x42, 0x20, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x8A, 0xE0, 0xF0, 0x90,
62357 +0x8A, 0xDA, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0xAD, 0x82, 0xAC,
62358 +0x83, 0x90, 0x8A, 0xE1, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x23,
62359 +0xF9, 0x74, 0x87, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0x8B, 0x90, 0x8A, 0xDC, 0x12,
62360 +0x43, 0x6B, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0x54, 0x0F, 0xFF, 0x90, 0x8A, 0xE3, 0x12, 0x43,
62361 +0x6B, 0xEF, 0x12, 0x42, 0x4D, 0x90, 0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x02, 0x12, 0x42,
62362 +0x20, 0xFF, 0x90, 0x8A, 0xE3, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x5F, 0x90,
62363 +0x8A, 0xDC, 0x12, 0x43, 0x6B, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0x90, 0x8A, 0xE1, 0xE0,
62364 +0xFC, 0xA3, 0xE0, 0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x29, 0xD9, 0x8D, 0x82, 0x8C,
62365 +0x83, 0xA3, 0xF0, 0x90, 0x8A, 0xDF, 0xE0, 0xFE, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0x24, 0xC1, 0xF5,
62366 +0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xDB, 0xE0, 0xFE, 0x75, 0xF0, 0x09,
62367 +0xEF, 0x90, 0x87, 0x29, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2A,
62368 +0x12, 0x43, 0x5F, 0x74, 0x01, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90,
62369 +0x87, 0x2B, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0x8F, 0x0F, 0xEF, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82,
62370 +0xE4, 0x34, 0x89, 0xAF, 0x82, 0xF5, 0x10, 0x8F, 0x11, 0xE5, 0x0F, 0x75, 0xF0, 0x02, 0xA4, 0x24,
62371 +0x81, 0xF9, 0x74, 0x86, 0x35, 0xF0, 0x75, 0x12, 0x01, 0xF5, 0x13, 0x89, 0x14, 0x75, 0xF0, 0x09,
62372 +0xE5, 0x0F, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0xAF, 0x82, 0x85, 0x83, 0x15, 0x8F, 0x16, 0xE5,
62373 +0x0F, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x23, 0xF9, 0x74, 0x87, 0x35, 0xF0, 0x75, 0x17, 0x01, 0xF5,
62374 +0x18, 0x89, 0x19, 0x74, 0xC1, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x12,
62375 +0x43, 0x94, 0x58, 0xA7, 0x00, 0x58, 0xBC, 0x01, 0x58, 0xD1, 0x02, 0x58, 0xE6, 0x03, 0x59, 0x0F,
62376 +0x04, 0x59, 0x24, 0x05, 0x59, 0x39, 0x06, 0x59, 0x5F, 0x0C, 0x59, 0x8C, 0x0D, 0x59, 0xB9, 0x0E,
62377 +0x59, 0xE6, 0x0F, 0x00, 0x00, 0x5A, 0x1A, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4,
62378 +0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5, 0x0F, 0x25, 0xE0,
62379 +0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80,
62380 +0x27, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0xF0,
62381 +0xF0, 0xA3, 0x74, 0x05, 0x80, 0x12, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34,
62382 +0x89, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5,
62383 +0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0, 0x41, 0x1A, 0xE5,
62384 +0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3,
62385 +0x74, 0xF5, 0x80, 0x27, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
62386 +0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5,
62387 +0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5, 0x0F, 0x25, 0xE0,
62388 +0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x41, 0x1A, 0x90,
62389 +0x04, 0x47, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x46, 0xE0,
62390 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x45, 0xE0,
62391 +0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xF0, 0x90, 0x04, 0x44, 0x41, 0x11, 0x90, 0x04, 0x4B, 0xE0,
62392 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x4A, 0xE0, 0xAB, 0x12, 0xAA,
62393 +0x13, 0xA9, 0x14, 0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x49, 0xE0, 0x85, 0x11, 0x82,
62394 +0x85, 0x10, 0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0, 0xAB, 0x12, 0xAA,
62395 +0x13, 0xA9, 0x14, 0x12, 0x42, 0x4D, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
62396 +0x90, 0x00, 0x01, 0x12, 0x42, 0x5F, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83,
62397 +0xF0, 0x90, 0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
62398 +0x12, 0x42, 0x4D, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x01,
62399 +0x12, 0x42, 0x5F, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xF0, 0x90, 0x04,
62400 +0x50, 0xE0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xA3, 0xF0, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14,
62401 +0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x29, 0xD9, 0xFF, 0xAB, 0x17, 0xAA, 0x18, 0xA9, 0x19,
62402 +0x12, 0x29, 0xD9, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x4D, 0xAB, 0x12, 0xE5,
62403 +0x14, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x13, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x29,
62404 +0xD9, 0xFF, 0xAB, 0x17, 0xAA, 0x18, 0xA9, 0x19, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x5F, 0xD0,
62405 +0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x4D, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xC0, 0x83,
62406 +0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x16, 0x82, 0x85, 0x15, 0x83, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82,
62407 +0xD0, 0x83, 0xF0, 0x85, 0x11, 0x82, 0x85, 0x10, 0x83, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF,
62408 +0x85, 0x16, 0x82, 0x85, 0x15, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0,
62409 +0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFE, 0xA3,
62410 +0xE0, 0x4E, 0x60, 0x4B, 0x90, 0x8A, 0xE6, 0x74, 0x0B, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3,
62411 +0x94, 0x00, 0x50, 0x02, 0x61, 0x5F, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3,
62412 +0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4,
62413 +0x34, 0x86, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x0A, 0x90, 0x8A, 0xE6,
62414 +0xE0, 0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x8A, 0xE6, 0xE0, 0x14, 0xF0, 0x80, 0xBB, 0xE5,
62415 +0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
62416 +0x4E, 0x60, 0x47, 0x90, 0x8A, 0xE6, 0x74, 0x0F, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94,
62417 +0x00, 0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
62418 +0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
62419 +0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x8A, 0xE6, 0xE0, 0xA3, 0xF0,
62420 +0x80, 0x0D, 0x90, 0x8A, 0xE6, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x8A, 0xE7, 0xF0, 0xE5,
62421 +0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
62422 +0x4E, 0x60, 0x46, 0xE4, 0x90, 0x8A, 0xE6, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x10,
62423 +0x40, 0x02, 0x81, 0x18, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
62424 +0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89,
62425 +0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90, 0x8A, 0xE6, 0xE0, 0x80,
62426 +0x63, 0x90, 0x8A, 0xE6, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x0F, 0x25, 0xE0, 0x24, 0x81, 0xF5,
62427 +0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x8A,
62428 +0xE6, 0xF0, 0x90, 0x8A, 0xE6, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00,
62429 +0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x0F, 0x25,
62430 +0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F,
62431 +0x4E, 0x60, 0x08, 0x90, 0x8A, 0xE6, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90, 0x8A, 0xE6, 0xE0, 0x04,
62432 +0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x8A, 0xE8, 0xF0, 0x90, 0x8A, 0xE7, 0xE0, 0xFF, 0x75, 0xF0, 0x09,
62433 +0xE5, 0x0F, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xEF, 0xF0, 0x90, 0x8A, 0xE8, 0xE0, 0xFE, 0x75,
62434 +0xF0, 0x09, 0xE5, 0x0F, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0xE5, 0x0F, 0xC3, 0x94,
62435 +0x20, 0x50, 0x32, 0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3,
62436 +0x9F, 0x40, 0x02, 0x80, 0x18, 0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
62437 +0xE0, 0xC3, 0x9E, 0x50, 0x08, 0x90, 0x8A, 0xE8, 0xE0, 0xA3, 0xF0, 0x80, 0x08, 0x90, 0x8A, 0xE7,
62438 +0xE0, 0x90, 0x8A, 0xE9, 0xF0, 0x90, 0x8A, 0xE9, 0xE0, 0xFD, 0xAF, 0x0F, 0x91, 0xC1, 0x90, 0x8A,
62439 +0xE9, 0xE0, 0xFF, 0x74, 0x84, 0x25, 0x0F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0,
62440 +0x90, 0x8A, 0xE7, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x03, 0xF0,
62441 +0x22, 0xEF, 0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3,
62442 +0x94, 0x03, 0x40, 0x07, 0x90, 0x87, 0x22, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x87, 0x22, 0xF0,
62443 +0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04,
62444 +0xF5, 0x83, 0xED, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAC, 0x07, 0xED, 0x54, 0x1F, 0x90, 0x8A,
62445 +0xC7, 0xF0, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xC5,
62446 +0xF0, 0x90, 0x8A, 0xC8, 0x74, 0x01, 0xF0, 0xEB, 0xC3, 0x94, 0x01, 0x40, 0x02, 0x80, 0x37, 0x90,
62447 +0x8A, 0xC5, 0xE0, 0x25, 0x0D, 0xFF, 0xA3, 0xF0, 0xA3, 0xE0, 0x90, 0x41, 0x9E, 0x93, 0xFE, 0xEF,
62448 +0xD3, 0x9E, 0x40, 0x10, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE4, 0xF0,
62449 +0xAF, 0x04, 0x80, 0x9D, 0x90, 0x8A, 0xC6, 0xE0, 0xFF, 0x74, 0x01, 0x2C, 0xF5, 0x82, 0xE4, 0x34,
62450 +0x86, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12,
62451 +0x43, 0x5F, 0xE0, 0xFF, 0x90, 0x8A, 0xCA, 0xF0, 0x74, 0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A,
62452 +0xF5, 0x83, 0xE0, 0x54, 0x1F, 0x90, 0x8A, 0xC9, 0xF0, 0xD3, 0x9F, 0x40, 0x06, 0xA3, 0xE0, 0x90,
62453 +0x8A, 0xC9, 0xF0, 0x90, 0x8A, 0xC9, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
62454 +0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
62455 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
62456 +0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
62457 +0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x05, 0x90, 0x8A, 0xC9, 0xE0, 0xFD, 0x91, 0xC1, 0x90, 0x8A,
62458 +0xC9, 0xE0, 0xFF, 0x22, 0xAC, 0x07, 0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
62459 +0xE0, 0x54, 0x7F, 0x90, 0x8A, 0xDE, 0xF0, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x8A, 0xE1, 0xF0, 0x75,
62460 +0xF0, 0x09, 0xEC, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xE3, 0xF0, 0x75, 0xF0,
62461 +0x09, 0xEC, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0xFE, 0x90, 0x8A, 0xE4, 0xF0, 0xEC, 0x25,
62462 +0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A,
62463 +0xE5, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34, 0x86,
62464 +0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE7, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEF, 0xD3,
62465 +0x9E, 0x40, 0x0C, 0x90, 0x8A, 0xE4, 0xE0, 0x90, 0x8A, 0xE1, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0xED,
62466 +0x70, 0x02, 0xE1, 0x06, 0x90, 0x8A, 0xE2, 0xED, 0xF0, 0x90, 0x8A, 0xDE, 0xE0, 0x30, 0xE6, 0x0E,
62467 +0x90, 0x8A, 0xE1, 0xE0, 0x90, 0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0x14, 0xF0, 0x90, 0x8A,
62468 +0xE2, 0xE0, 0x70, 0x02, 0xE1, 0x06, 0x90, 0x8A, 0xE1, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02,
62469 +0xE1, 0x06, 0xE4, 0x90, 0x8A, 0xE0, 0xF0, 0xEF, 0x14, 0x90, 0x8A, 0xDF, 0xF0, 0x90, 0x8A, 0xE3,
62470 +0xE0, 0xFD, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21,
62471 +0xEF, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
62472 +0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE7, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70,
62473 +0x27, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8,
62474 +0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE5, 0xE0,
62475 +0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x8A, 0xDF, 0xE0, 0x90, 0x8A, 0xDE, 0xF0,
62476 +0x90, 0x8A, 0xE0, 0xE0, 0x04, 0xF0, 0x90, 0x8A, 0xE2, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0, 0x6F,
62477 +0x60, 0x08, 0x90, 0x8A, 0xDF, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90, 0x8A, 0xE2, 0xE0, 0xFF, 0x90,
62478 +0x8A, 0xE0, 0xE0, 0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x8A, 0xDF, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x8A,
62479 +0xE3, 0xE0, 0x90, 0x8A, 0xDE, 0xF0, 0x90, 0x8A, 0xDE, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5,
62480 +0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0,
62481 +0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93,
62482 +0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34,
62483 +0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x8A, 0xDE, 0xE0, 0xFD, 0x91,
62484 +0xC1, 0x90, 0x8A, 0xDE, 0xE0, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1A,
62485 +0x8A, 0x1B, 0x89, 0x1C, 0x90, 0x8B, 0x3F, 0x12, 0x43, 0x8B, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F,
62486 +0x90, 0x8B, 0x42, 0x12, 0x43, 0x8B, 0xAF, 0x20, 0x15, 0x20, 0xEF, 0x60, 0x1E, 0x90, 0x8B, 0x42,
62487 +0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0x74, 0x12, 0x29, 0xD9, 0xFF, 0x90, 0x8B, 0x3F, 0xE4, 0x75,
62488 +0xF0, 0x01, 0x12, 0x43, 0x74, 0xEF, 0x12, 0x42, 0x4D, 0x80, 0xDB, 0xAB, 0x1A, 0xAA, 0x1B, 0xA9,
62489 +0x1C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xC4,
62490 +0x74, 0xA6, 0xF0, 0x74, 0x5F, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22,
62491 +0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7, 0xE0,
62492 +0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
62493 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3,
62494 +0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x1E, 0xAF, 0x03, 0x74,
62495 +0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x74, 0x10, 0x2F,
62496 +0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F,
62497 +0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
62498 +0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
62499 +0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
62500 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30, 0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3,
62501 +0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x5F,
62502 +0xA6, 0xBF, 0x01, 0x10, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5F, 0xDE, 0x90, 0x04,
62503 +0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13,
62504 +0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x8A, 0xC5,
62505 +0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07,
62506 +0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3B, 0x90, 0x8A, 0xC5, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D,
62507 +0xF0, 0x79, 0x40, 0x90, 0x8A, 0xC5, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0,
62508 +0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x8A, 0xF6, 0xF0, 0x22, 0x90, 0x8A, 0xF6, 0xE0, 0x04,
62509 +0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0B, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x02,
62510 +0x11, 0x6E, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00,
62511 +0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
62512 +0x90, 0x01, 0xC4, 0x74, 0xF3, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28,
62513 +0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0,
62514 +0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x41, 0x8A, 0x90, 0x01, 0x34, 0x74, 0x01,
62515 +0xF0, 0x85, 0xD1, 0x4D, 0x85, 0xD2, 0x4E, 0x85, 0xD3, 0x4F, 0x85, 0xD4, 0x50, 0x85, 0xD5, 0x51,
62516 +0x85, 0xD6, 0x52, 0x85, 0xD7, 0x53, 0x85, 0xD9, 0x54, 0xE5, 0x54, 0x54, 0x40, 0xC3, 0x13, 0xFF,
62517 +0xE5, 0x53, 0x54, 0x20, 0x6F, 0x70, 0x02, 0x41, 0x47, 0xE5, 0x54, 0x30, 0xE5, 0x02, 0x41, 0x47,
62518 +0xE5, 0x52, 0x54, 0x1F, 0xF5, 0x08, 0xE5, 0x4D, 0x54, 0x3F, 0xF5, 0x09, 0xE5, 0x51, 0x54, 0x1F,
62519 +0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F,
62520 +0xF0, 0x12, 0x42, 0x81, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0xC0, 0xF5,
62521 +0x82, 0xE4, 0x34, 0x85, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5, 0x09, 0xD3, 0x94,
62522 +0x04, 0x40, 0x03, 0x75, 0x09, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x08, 0x90, 0x84, 0x00, 0x12, 0x43,
62523 +0x5F, 0x75, 0xF0, 0x02, 0xE5, 0x09, 0x12, 0x43, 0x5F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xE5, 0x53,
62524 +0x54, 0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x08, 0x90, 0x84, 0x00, 0x12,
62525 +0x43, 0x5F, 0x75, 0xF0, 0x02, 0xE5, 0x09, 0x12, 0x43, 0x5F, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE5,
62526 +0x54, 0x20, 0xE6, 0x24, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25, 0xE0, 0x24, 0x63, 0xF5,
62527 +0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xE5, 0x4F, 0x30, 0xE7,
62528 +0x36, 0xAF, 0x08, 0x12, 0x5D, 0x36, 0x80, 0x2F, 0xE5, 0x53, 0x54, 0x1F, 0xFF, 0xE5, 0x08, 0x25,
62529 +0xE0, 0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x81,
62530 +0xE5, 0x4F, 0x30, 0xE7, 0x12, 0xE5, 0x4F, 0x54, 0x7F, 0xFD, 0xE5, 0x53, 0x54, 0x1F, 0xF5, 0x0D,
62531 +0xAB, 0x09, 0xAF, 0x08, 0x12, 0x5C, 0xD9, 0xE5, 0x24, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x3A,
62532 +0x90, 0x8B, 0x1A, 0xE0, 0x60, 0x2B, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04,
62533 +0xF0, 0x12, 0x4B, 0x34, 0xEF, 0x64, 0x01, 0x70, 0x21, 0x90, 0x8B, 0x3D, 0x12, 0x4B, 0x5C, 0x90,
62534 +0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x18, 0xF0, 0x80,
62535 +0x09, 0x12, 0x4B, 0x34, 0xBF, 0x01, 0x03, 0x12, 0x4A, 0xFC, 0xE5, 0x2C, 0x30, 0xE1, 0x20, 0x90,
62536 +0x01, 0x34, 0x74, 0x02, 0xF0, 0x85, 0xD1, 0x56, 0x85, 0xD2, 0x57, 0x85, 0xD3, 0x58, 0x85, 0xD4,
62537 +0x59, 0x85, 0xD5, 0x5A, 0x85, 0xD6, 0x5B, 0x85, 0xD7, 0x5C, 0x85, 0xD9, 0x5D, 0xB1, 0x5F, 0xE5,
62538 +0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90,
62539 +0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x55, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF,
62540 +0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8,
62541 +0x00, 0x75, 0xE8, 0x00, 0x12, 0x52, 0x10, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x52,
62542 +0x81, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x2D, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0x90, 0x8B,
62543 +0x32, 0xE0, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x05, 0x90, 0x8B, 0x34, 0xE4,
62544 +0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x05,
62545 +0x90, 0x8B, 0x2E, 0xE4, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x61, 0xE7, 0x90, 0x8B, 0x08, 0x74,
62546 +0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x8B, 0x06, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05,
62547 +0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0x30,
62548 +0xE0, 0x2F, 0x90, 0x8B, 0x37, 0x74, 0x01, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xFF, 0x13, 0x13, 0x54,
62549 +0x3F, 0x30, 0xE0, 0x1D, 0x90, 0x8B, 0x34, 0x74, 0x01, 0xF0, 0xB1, 0x39, 0x90, 0x8B, 0x33, 0xE0,
62550 +0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x05, 0x7F, 0x04, 0x12, 0x4E,
62551 +0x89, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0x30, 0xE0, 0x56, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x4F,
62552 +0x90, 0x8B, 0x2E, 0x74, 0x01, 0xF0, 0xB1, 0x39, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x3F,
62553 +0xB1, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0x64, 0x06, 0x60,
62554 +0x2E, 0xEF, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x04, 0xE4, 0xFF,
62555 +0x80, 0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90, 0x8B, 0x2D,
62556 +0xE0, 0xB4, 0x02, 0x05, 0x7F, 0x01, 0x12, 0x7B, 0x49, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12,
62557 +0x43, 0xE7, 0x90, 0x8B, 0x08, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE1, 0x2F, 0x90, 0x01, 0x36, 0x74,
62558 +0x02, 0xF0, 0x43, 0x55, 0x40, 0x11, 0x85, 0x90, 0x8B, 0x37, 0xE0, 0xB4, 0x01, 0x09, 0x90, 0x05,
62559 +0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x37, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x0D, 0xE4, 0xFF,
62560 +0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x16,
62561 +0x90, 0x01, 0x36, 0x74, 0x04, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x06, 0xA3, 0xE0, 0x64,
62562 +0x06, 0x60, 0x03, 0x12, 0x46, 0xB3, 0xE5, 0x2E, 0x30, 0xE3, 0x38, 0x90, 0x01, 0x36, 0x74, 0x08,
62563 +0xF0, 0xE5, 0x21, 0x64, 0x01, 0x70, 0x2C, 0xE5, 0x24, 0x60, 0x28, 0x90, 0x01, 0x57, 0xE4, 0xF0,
62564 +0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x8B, 0x3D, 0xE4, 0xF0, 0x90, 0x8B, 0x11, 0xE0, 0x90,
62565 +0x8B, 0x3E, 0xF0, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x57,
62566 +0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B, 0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x21,
62567 +0xB4, 0x01, 0x20, 0xE5, 0x24, 0x60, 0x1C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
62568 +0x02, 0xF0, 0x90, 0x8B, 0x1B, 0xE4, 0xF0, 0x53, 0x25, 0xFD, 0xE5, 0x25, 0x54, 0x07, 0x70, 0x03,
62569 +0x12, 0x4A, 0xFC, 0xE5, 0x2E, 0x30, 0xE5, 0x1F, 0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x21,
62570 +0xB4, 0x01, 0x14, 0xE5, 0x24, 0x60, 0x10, 0x90, 0x8B, 0x1A, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12,
62571 +0x4A, 0x97, 0x80, 0x03, 0x12, 0x49, 0x49, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74,
62572 +0x40, 0xF0, 0xE5, 0x21, 0xB4, 0x01, 0x10, 0xE5, 0x24, 0x60, 0x0C, 0x53, 0x25, 0xFE, 0xE5, 0x25,
62573 +0x54, 0x07, 0x70, 0x03, 0x12, 0x4A, 0xFC, 0xE5, 0x2F, 0x30, 0xE1, 0x27, 0x90, 0x01, 0x37, 0x74,
62574 +0x02, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0x30, 0xE0, 0x17, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60,
62575 +0x07, 0x12, 0x48, 0xFE, 0xD1, 0x20, 0x80, 0x0B, 0x90, 0x8B, 0x31, 0x74, 0x01, 0xF0, 0x80, 0x03,
62576 +0x12, 0x48, 0xFE, 0x74, 0xF3, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x60, 0xA3, 0xF0, 0xD0, 0x07,
62577 +0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
62578 +0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xE4, 0x90, 0x8B, 0x3D, 0xF0, 0x90, 0x05,
62579 +0x58, 0xE0, 0xFF, 0x90, 0x8B, 0x38, 0xE0, 0x2F, 0x24, 0xFE, 0x90, 0x8B, 0x3E, 0xF0, 0xE4, 0xFB,
62580 +0xFD, 0x7F, 0x50, 0x7E, 0x01, 0x12, 0x4B, 0x6C, 0x90, 0x01, 0x53, 0x74, 0x05, 0xF0, 0x22, 0x90,
62581 +0x8A, 0xC5, 0xE0, 0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A,
62582 +0x00, 0x79, 0x56, 0x90, 0x8B, 0x48, 0x12, 0x43, 0x8B, 0x0B, 0x7A, 0x8A, 0x79, 0xC5, 0xD3, 0x10,
62583 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x8B, 0x90, 0x8B, 0x53, 0xE0, 0xFF,
62584 +0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x5F, 0x7F, 0xAF, 0x7E, 0x01, 0xD1, 0x8A, 0xEF,
62585 +0x60, 0x49, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x6B, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x75, 0x20,
62586 +0x02, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0x12, 0x5F, 0x57, 0x90, 0x8B, 0x48, 0x12, 0x43, 0x6B,
62587 +0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x8B, 0x45, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xFF,
62588 +0xC4, 0x54, 0x0F, 0xF5, 0x20, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0x12, 0x5F, 0x57, 0x90, 0x01,
62589 +0xAF, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
62590 +0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0B, 0xA3, 0xE0, 0x64,
62591 +0x06, 0x60, 0x05, 0x7F, 0x06, 0x12, 0x7B, 0x49, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x02,
62592 +0xD1, 0x13, 0x22, 0x90, 0x8B, 0x31, 0xE0, 0xB4, 0x01, 0x05, 0xE4, 0xF0, 0x12, 0x48, 0xFE, 0x22,
62593 +0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x06, 0x60, 0x3C, 0xE5, 0x22, 0x54, 0x0F, 0x14, 0x60, 0x2E, 0x14,
62594 +0x60, 0x1E, 0x24, 0xFE, 0x60, 0x0E, 0x24, 0xF8, 0x70, 0x2A, 0xE4, 0x90, 0x8B, 0x2D, 0xF0, 0x90,
62595 +0x05, 0x22, 0xF0, 0x22, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22,
62596 +0x90, 0x8B, 0x2D, 0x74, 0x03, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0x90, 0x01, 0xC6,
62597 +0xE0, 0x44, 0x08, 0xF0, 0x22, 0xAE, 0x07, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF, 0x60, 0x18, 0x90,
62598 +0x8B, 0x2C, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x0C, 0xAF, 0x06, 0x7D, 0x01, 0x12,
62599 +0x45, 0xA2, 0xD1, 0x20, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x8B, 0x4B, 0xEE, 0xF0, 0xA3,
62600 +0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x8B, 0x4B, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82,
62601 +0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3, 0x90, 0x8B, 0x4E, 0xE0, 0x94, 0xE8, 0x90, 0x8B, 0x4D, 0xE0,
62602 +0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x8B,
62603 +0x4D, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x37, 0x54, 0x80,
62604 +0xC6, 0x7F, 0x01, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90,
62605 +0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B,
62606 +0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32, 0x90, 0x01,
62607 +0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32, 0xF0, 0x22, 0x22, 0x90, 0x00,
62608 +0x02, 0xE0, 0x54, 0xE0, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F,
62609 +0x00, 0x30, 0xE3, 0x02, 0x7F, 0x01, 0x22, 0x90, 0x8B, 0x09, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00,
62610 +0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33, 0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90,
62611 +0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0,
62612 +0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0xA0, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0,
62613 +0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x7D, 0x5B, 0x90, 0x01,
62614 +0xC4, 0xED, 0xF0, 0x74, 0x67, 0xFF, 0xA3, 0xF0, 0x53, 0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE,
62615 +0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00, 0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0,
62616 +0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90, 0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D,
62617 +0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0, 0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00,
62618 +0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06, 0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5,
62619 +0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01, 0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90,
62620 +0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2, 0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0,
62621 +0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0,
62622 +0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
62623 +0xE0, 0x32, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54, 0xF0,
62624 +0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54,
62625 +0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
62626 +0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x4D,
62627 +0xF0, 0x22, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x40,
62628 +0x02, 0xC1, 0xCD, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2A, 0x12, 0x43, 0x5F, 0xE0, 0x64, 0x01,
62629 +0x60, 0x02, 0xC1, 0xC5, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34,
62630 +0x85, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEC, 0x94, 0x00, 0x50, 0x02, 0xC1,
62631 +0xC5, 0xEF, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75, 0x12, 0x01,
62632 +0xF5, 0x13, 0x89, 0x14, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34,
62633 +0x85, 0xF5, 0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x8A, 0xD4, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF,
62634 +0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
62635 +0x8A, 0xD6, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFE, 0x24, 0x84, 0xF5, 0x82,
62636 +0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x8A, 0xD0, 0xF0, 0xE0, 0xFD, 0x54, 0x1F,
62637 +0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xEE, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0xE0, 0x90, 0x8A, 0xD9,
62638 +0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFB, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0,
62639 +0xC3, 0x94, 0x05, 0x40, 0x02, 0x61, 0x1A, 0x90, 0x8A, 0xD9, 0xE0, 0xFE, 0x90, 0x8A, 0xD1, 0xE0,
62640 +0x9E, 0x40, 0x13, 0x90, 0x8A, 0xD9, 0xE0, 0x90, 0x8A, 0xD1, 0xF0, 0xED, 0x54, 0x40, 0xFD, 0x90,
62641 +0x8A, 0xD0, 0xF0, 0xEE, 0x4D, 0xF0, 0x90, 0x8A, 0xD1, 0xE0, 0xFF, 0x90, 0x41, 0x12, 0x93, 0xFE,
62642 +0x74, 0x23, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40, 0x06, 0xEF,
62643 +0x90, 0x40, 0xDA, 0x80, 0x07, 0x90, 0x8A, 0xD1, 0xE0, 0x90, 0x40, 0xF6, 0x93, 0x90, 0x8A, 0xD8,
62644 +0xF0, 0x90, 0x8A, 0xD8, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x50, 0xF9, 0x74, 0x40, 0x35, 0xF0,
62645 +0x75, 0x0F, 0xFF, 0xF5, 0x10, 0x89, 0x11, 0x90, 0x8A, 0xD0, 0xE0, 0x90, 0x41, 0xBA, 0x93, 0xFF,
62646 +0xD3, 0x90, 0x8A, 0xD7, 0xE0, 0x9F, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x0C, 0x90, 0x8A,
62647 +0xCF, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x5D, 0xB4, 0xC1, 0x5B, 0x90, 0x8A, 0xCF, 0xE0, 0x25, 0xE0,
62648 +0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x8A, 0xD2,
62649 +0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x12, 0x29, 0xD9, 0xFF, 0x7E,
62650 +0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x12, 0x42, 0x97, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2,
62651 +0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90,
62652 +0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00,
62653 +0x02, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0,
62654 +0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF,
62655 +0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC2, 0xFD, 0xAC,
62656 +0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA,
62657 +0x10, 0xA9, 0x11, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13,
62658 +0xA9, 0x14, 0x90, 0x00, 0x06, 0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A,
62659 +0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x04,
62660 +0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x08, 0x12,
62661 +0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42,
62662 +0x81, 0xAB, 0x0F, 0xAA, 0x10, 0xA9, 0x11, 0x90, 0x00, 0x05, 0x12, 0x42, 0x20, 0xFF, 0x7E, 0x00,
62663 +0x90, 0x8A, 0xD4, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x29, 0xF2, 0xD3, 0x90, 0x8A, 0xD3, 0xE0,
62664 +0x9F, 0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x8A, 0xD2, 0xE0,
62665 +0x9E, 0xF0, 0x80, 0x07, 0xE4, 0x90, 0x8A, 0xD2, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xD2, 0xE0, 0xFC,
62666 +0xA3, 0xE0, 0xFD, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34,
62667 +0x86, 0xF5, 0x83, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x8A, 0xD0, 0xE0, 0x25, 0xE0, 0x24, 0x2E,
62668 +0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xD3, 0xED,
62669 +0x9B, 0xEC, 0x9A, 0x40, 0x04, 0xD1, 0xCE, 0xC1, 0x29, 0x90, 0x8A, 0xD0, 0xE0, 0x25, 0xE0, 0x24,
62670 +0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3,
62671 +0x90, 0x8A, 0xD3, 0xE0, 0x9F, 0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x40, 0x02, 0xC1, 0x29, 0x90, 0x8A,
62672 +0xCF, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x5D, 0xB4, 0xC1, 0x29, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24,
62673 +0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02, 0x81, 0xF8,
62674 +0x90, 0x87, 0x22, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3, 0x94, 0x19, 0x40,
62675 +0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3, 0x94, 0x11, 0x40, 0x2E,
62676 +0x80, 0x1F, 0x90, 0x87, 0x22, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x8A, 0xD1, 0xE0, 0xC3, 0x94,
62677 +0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x8A, 0xD1, 0xE0, 0xC3, 0x94, 0x03, 0x40,
62678 +0x0D, 0x90, 0x89, 0x43, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x89, 0x43, 0xF0, 0x90, 0x8A,
62679 +0xCF, 0xE0, 0xFE, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xDD,
62680 +0xF0, 0x74, 0x23, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xC3, 0x94, 0x30,
62681 +0x50, 0x0A, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x64, 0x2F, 0x81, 0xA3, 0x90, 0x89, 0x43, 0xE0,
62682 +0x64, 0x01, 0x60, 0x02, 0x81, 0x98, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x44, 0xF5, 0x82, 0xE4, 0x34,
62683 +0x89, 0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0xEE, 0x24, 0x05,
62684 +0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xE0, 0xFF,
62685 +0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x8A, 0xCF, 0xE0, 0xFE,
62686 +0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x23, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
62687 +0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90, 0x8A, 0xCF,
62688 +0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x8A, 0xD1, 0xE0,
62689 +0x6F, 0x60, 0x56, 0x90, 0x8A, 0xCF, 0xE0, 0x24, 0x23, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
62690 +0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x05, 0xF0, 0x80, 0x11, 0xEF,
62691 +0xD3, 0x94, 0x39, 0x90, 0x8A, 0xDD, 0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0,
62692 +0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x23, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE,
62693 +0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xCF, 0xE0,
62694 +0x24, 0x44, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0x80, 0x2F, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x64,
62695 +0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x44, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
62696 +0x89, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x90, 0x8A, 0xCF,
62697 +0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8A, 0xD1, 0xE0,
62698 +0xFE, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE,
62699 +0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFE, 0x74, 0x43, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
62700 +0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x87, 0x2B, 0x12, 0x43, 0x5F, 0xE0, 0xB4, 0x01, 0x11,
62701 +0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0x74, 0x64, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4,
62702 +0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFD, 0xC1, 0x27, 0xEC, 0x64, 0x06, 0x60, 0x02, 0xC1, 0x29, 0x90,
62703 +0x8A, 0xD2, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xDB, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x8A, 0xD4, 0xE0,
62704 +0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x29, 0xF2, 0x90, 0x8A, 0xDB, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90,
62705 +0x8A, 0xCF, 0xE0, 0x24, 0x43, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xDD,
62706 +0xF0, 0xE4, 0x90, 0x8A, 0xDA, 0xF0, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0xD3, 0x94, 0x04, 0x50, 0x47,
62707 +0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85, 0xF0, 0x83,
62708 +0x12, 0x42, 0xC2, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xD6, 0x93, 0xFF, 0x7E, 0x00, 0x12, 0x29,
62709 +0xF2, 0x90, 0x8A, 0xD2, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x81, 0x90, 0x8A, 0xDB, 0xE0, 0xFE, 0xA3,
62710 +0xE0, 0xFF, 0xD3, 0x90, 0x8A, 0xD3, 0xE0, 0x9F, 0x90, 0x8A, 0xD2, 0xE0, 0x9E, 0x50, 0x08, 0x90,
62711 +0x8A, 0xDA, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x8A, 0xDA, 0xE0, 0xC3, 0x13, 0xF0, 0x90, 0x8A,
62712 +0xDD, 0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x8A, 0xDA, 0xE0, 0x70, 0x5D, 0x90, 0x8A, 0xDD, 0x04,
62713 +0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x8A, 0xDA, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x8A,
62714 +0xDD, 0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x01, 0xF0,
62715 +0x80, 0x3C, 0x80, 0x35, 0x90, 0x8A, 0xDD, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x8A, 0xDA, 0xE0,
62716 +0xFF, 0x70, 0x08, 0x90, 0x8A, 0xDD, 0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x8A, 0xDD, 0xB4,
62717 +0x01, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x8A, 0xD7, 0xE0, 0x94,
62718 +0x03, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0xD3, 0x90,
62719 +0x8A, 0xD7, 0xE0, 0x94, 0x03, 0x90, 0x8A, 0xD6, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x8A,
62720 +0xDD, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0xFD, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x43, 0xF5, 0x82,
62721 +0xE4, 0x34, 0x88, 0xF5, 0x83, 0xED, 0xF0, 0x11, 0x02, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x24, 0x64,
62722 +0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F, 0x74, 0x64, 0x2F,
62723 +0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90, 0x8A, 0xCF, 0xE0,
62724 +0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0xAB, 0x12, 0xAA, 0x13, 0xA9,
62725 +0x14, 0xE4, 0xF5, 0xF0, 0x12, 0x42, 0xFA, 0xAB, 0x12, 0xAA, 0x13, 0xA9, 0x14, 0x90, 0x00, 0x02,
62726 +0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00, 0x04, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90,
62727 +0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x19, 0x90, 0x00, 0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43,
62728 +0x19, 0x90, 0x8A, 0xCF, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5,
62729 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
62730 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
62731 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x01, 0x47, 0x22, 0xAD, 0x07,
62732 +0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x8A, 0xDE,
62733 +0xF0, 0xE0, 0xF9, 0x54, 0x1F, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43,
62734 +0x5F, 0xE0, 0xFF, 0x90, 0x8A, 0xE1, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x81, 0xF5, 0x82, 0xE4, 0x34,
62735 +0x86, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x8A, 0xE2, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xED,
62736 +0x25, 0xE0, 0x24, 0xE4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90,
62737 +0x8A, 0xE4, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x8A, 0xDF, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x2E,
62738 +0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED, 0x25,
62739 +0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE,
62740 +0xC3, 0x9F, 0x40, 0x03, 0x02, 0x70, 0x12, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x74, 0xA5, 0x2D, 0xF5,
62741 +0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0xEF, 0x04, 0x90, 0x8A, 0xE0, 0xF0, 0x90, 0x8A,
62742 +0xE1, 0xE0, 0xFF, 0x90, 0x8A, 0xE0, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x03, 0x02, 0x70, 0x4C, 0xEE,
62743 +0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
62744 +0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x8A, 0xE2, 0xE0, 0x5E, 0xFE,
62745 +0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x8A, 0xE0, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59,
62746 +0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
62747 +0xFF, 0x90, 0x8A, 0xE4, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x8A, 0xE0,
62748 +0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x8A, 0xE3, 0xE0, 0x30, 0xE7, 0x06, 0x90, 0x8A, 0xE0, 0x74, 0x17,
62749 +0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xFF, 0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x8A,
62750 +0xE2, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x8A, 0xE0, 0x74, 0x18, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0x90,
62751 +0x8A, 0xDF, 0xF0, 0x90, 0x8A, 0xDE, 0xF0, 0x80, 0x43, 0x90, 0x8A, 0xE0, 0xE0, 0x04, 0xF0, 0x02,
62752 +0x6F, 0x6E, 0x90, 0x8A, 0xE1, 0xE0, 0xFC, 0x90, 0x8A, 0xDF, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74,
62753 +0xA5, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90,
62754 +0x87, 0x29, 0x12, 0x43, 0x5F, 0xE0, 0xB4, 0x01, 0x10, 0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x8A, 0xDF,
62755 +0xE0, 0x44, 0x40, 0x90, 0x8A, 0xDE, 0xF0, 0x80, 0x03, 0xAF, 0x01, 0x22, 0x90, 0x8A, 0xDF, 0xE0,
62756 +0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74,
62757 +0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74,
62758 +0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0,
62759 +0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66,
62760 +0x90, 0x8A, 0xDF, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90, 0x8A, 0xE1, 0xE0, 0xFF, 0x74, 0xA5, 0x2D,
62761 +0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x8A, 0xDF, 0xEF, 0xF0, 0x90, 0x8A,
62762 +0xDE, 0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5,
62763 +0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4,
62764 +0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF,
62765 +0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0xEE, 0xF0,
62766 +0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83,
62767 +0xE4, 0xF0, 0xAF, 0x05, 0x90, 0x8A, 0xDE, 0xE0, 0x44, 0x80, 0xFD, 0x12, 0x5C, 0xC1, 0x90, 0x8A,
62768 +0xDE, 0xE0, 0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0xFF,
62769 +0xC3, 0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE4,
62770 +0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8A, 0xCF, 0xF0, 0x90, 0x8A,
62771 +0xCF, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x40, 0x02, 0x41, 0xCF, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84,
62772 +0x00, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12,
62773 +0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x5F,
62774 +0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x5F, 0xE4, 0xF0,
62775 +0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0xF0,
62776 +0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x44, 0x2F,
62777 +0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x43, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
62778 +0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC0, 0xF5, 0x82, 0xE4, 0x34, 0x85, 0xF5,
62779 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x63, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
62780 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xE3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
62781 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA3, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
62782 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
62783 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
62784 +0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x44, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4,
62785 +0xF0, 0x74, 0x24, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x64, 0x2F,
62786 +0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x41, 0x8C, 0x93, 0xFE, 0x74, 0x01,
62787 +0x93, 0xFF, 0x90, 0x41, 0x54, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE,
62788 +0xEF, 0x13, 0xFF, 0x90, 0x8A, 0xCF, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0xE1, 0xF5, 0x82, 0xE4, 0x34,
62789 +0x86, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x29, 0x12,
62790 +0x43, 0x5F, 0x74, 0x01, 0xF0, 0x74, 0xC1, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x86, 0xF5, 0x83, 0x74,
62791 +0x0C, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x25, 0x12, 0x43, 0x5F, 0x74, 0xFF, 0xF0, 0xA3,
62792 +0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x23, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0xA3, 0x74, 0x0F,
62793 +0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x87, 0x27, 0x12, 0x43, 0x5F, 0x74, 0x13, 0xF0, 0x75, 0xF0,
62794 +0x09, 0xED, 0x90, 0x87, 0x28, 0x12, 0x43, 0x5F, 0xE4, 0xF0, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4,
62795 +0x34, 0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x8A, 0xCF, 0xE0, 0x04, 0xF0, 0x21, 0x3E, 0x22,
62796 +0x12, 0x29, 0xD9, 0xFF, 0xC3, 0x94, 0x20, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFE,
62797 +0x74, 0x23, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4, 0x20,
62798 +0x0A, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0x90, 0x87, 0x21, 0xF0, 0x22, 0x12, 0x29, 0xD9, 0xF5,
62799 +0x21, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x2A, 0x8B, 0x00,
62800 +0x00, 0x00, 0x00, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x1A, 0xF0, 0x90, 0x00, 0x03,
62801 +0x12, 0x42, 0x20, 0x90, 0x8B, 0x0A, 0xF0, 0x12, 0x47, 0xFA, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
62802 +0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0x30, 0xE0, 0x25, 0x12, 0x29, 0xD9, 0x90, 0x8B, 0x10, 0xF0,
62803 +0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x11, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90,
62804 +0x8B, 0x0F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x16, 0xF0, 0x22, 0x90, 0x8B,
62805 +0x10, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x11, 0x74, 0x05, 0xF0, 0x90, 0x8B, 0x0F, 0x74, 0x14, 0xF0,
62806 +0x90, 0x8B, 0x16, 0x74, 0x05, 0xF0, 0x22, 0x12, 0x29, 0xD9, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54,
62807 +0x7F, 0x90, 0x8B, 0x15, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20, 0xFF, 0x90, 0x8B, 0x13, 0xE4,
62808 +0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90, 0x8B, 0x15, 0x74, 0x05, 0xF0, 0x90, 0x8B, 0x13, 0xE4,
62809 +0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x8B, 0x13, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22,
62810 +0x12, 0x29, 0xD9, 0x90, 0x8B, 0x12, 0xF0, 0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x45, 0xA2,
62811 +0x90, 0x8B, 0x12, 0xE0, 0x90, 0x01, 0xE7, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x29,
62812 +0xD9, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x8A, 0xF7, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x20,
62813 +0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xF8, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F,
62814 +0x90, 0x8A, 0xF9, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x42, 0x20, 0xFF, 0xED, 0x2F, 0x90, 0x8A, 0xFA,
62815 +0xF0, 0x90, 0x00, 0x04, 0x12, 0x42, 0x20, 0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x8A, 0xFB, 0xF0,
62816 +0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x8B, 0xE4, 0x90,
62817 +0x8A, 0xDD, 0xF0, 0x12, 0x29, 0xD9, 0xC3, 0x13, 0x20, 0xE0, 0x02, 0xA1, 0x62, 0x90, 0x8A, 0xDA,
62818 +0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xFF, 0x54, 0x02, 0xFE, 0x90, 0x8B, 0x32, 0xE0, 0x54, 0xFD,
62819 +0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF, 0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x29, 0xD9,
62820 +0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x8B, 0x32, 0xF0, 0xEE, 0x54, 0x10,
62821 +0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x29, 0xD9, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54,
62822 +0xDF, 0x4D, 0xFF, 0x90, 0x8B, 0x32, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0xEF, 0x54, 0xBF, 0x4E, 0xF0,
62823 +0x20, 0xE0, 0x02, 0xA1, 0x4F, 0x90, 0x8A, 0xDD, 0x74, 0x21, 0xF0, 0x90, 0x8A, 0xDA, 0x12, 0x43,
62824 +0x6B, 0x12, 0x29, 0xD9, 0xFF, 0x13, 0x13, 0x54, 0x01, 0xFE, 0x90, 0x8B, 0x32, 0xE0, 0xFD, 0x13,
62825 +0x13, 0x54, 0x01, 0x6E, 0x60, 0x2A, 0xEF, 0x54, 0x04, 0xFF, 0xED, 0x54, 0xFB, 0x4F, 0xF0, 0xE0,
62826 +0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0E, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF,
62827 +0x12, 0x36, 0xE6, 0x80, 0x0B, 0xE4, 0x90, 0x8B, 0x34, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x36, 0x75,
62828 +0x90, 0x8B, 0x32, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD,
62829 +0xE0, 0x44, 0x12, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44,
62830 +0x14, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD,
62831 +0xE0, 0x44, 0x80, 0xF0, 0x90, 0x8B, 0x32, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x07,
62832 +0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90,
62833 +0x8B, 0x33, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E, 0x89, 0x90, 0x8B, 0x32, 0xE0, 0xC4, 0x13,
62834 +0x13, 0x54, 0x03, 0x30, 0xE0, 0x04, 0x7F, 0x03, 0x80, 0x0E, 0x7F, 0x01, 0x12, 0x4D, 0xE0, 0xEF,
62835 +0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0x4E, 0x89, 0x7F, 0x02, 0xC1, 0xA4, 0x90,
62836 +0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27, 0xF0, 0xE4, 0xFF, 0x12, 0x4E, 0x89, 0x7F, 0x03,
62837 +0xC1, 0xA4, 0x90, 0x8A, 0xDA, 0x12, 0x43, 0x6B, 0x12, 0x29, 0xD9, 0xFF, 0x54, 0x02, 0xFE, 0x90,
62838 +0x8B, 0x2C, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF, 0xEE, 0x54, 0xFE, 0x4F,
62839 +0xFF, 0xF0, 0x12, 0x29, 0xD9, 0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x8B,
62840 +0x2C, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0, 0x12, 0x29, 0xD9, 0xFE,
62841 +0x54, 0x40, 0xFD, 0xEF, 0x54, 0xBF, 0x4D, 0xFF, 0x90, 0x8B, 0x2C, 0xF0, 0xEE, 0x54, 0x04, 0xFE,
62842 +0xEF, 0x54, 0xFB, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xC1, 0x57, 0x90, 0x8A, 0xDD, 0x74, 0x31, 0xF0,
62843 +0x90, 0x8B, 0x2C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0, 0x0B, 0xE4, 0x90, 0x8B, 0x2E, 0xF0,
62844 +0x7D, 0x40, 0xFF, 0x12, 0x36, 0x75, 0x90, 0x8B, 0x2C, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F,
62845 +0x30, 0xE0, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x02, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0,
62846 +0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0x54, 0x06, 0x60, 0x0C,
62847 +0x90, 0x01, 0x3E, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x37, 0x00, 0x90, 0x8A, 0xDD, 0xE0,
62848 +0x90, 0x05, 0x27, 0xF0, 0x90, 0x8B, 0x2C, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
62849 +0x0D, 0xA3, 0xE0, 0x64, 0x06, 0x60, 0x2C, 0x7F, 0x06, 0x12, 0x7B, 0x49, 0x80, 0x25, 0x90, 0x8B,
62850 +0x2D, 0xE0, 0xB4, 0x06, 0x1B, 0x7F, 0x01, 0x12, 0x7B, 0x49, 0xE4, 0xFF, 0x12, 0x4D, 0xE0, 0xEF,
62851 +0x60, 0x09, 0x7D, 0x01, 0xAF, 0x23, 0x12, 0x45, 0xA2, 0x80, 0x05, 0x12, 0x4E, 0x56, 0x80, 0x03,
62852 +0x12, 0x66, 0x20, 0x7F, 0x01, 0x80, 0x4D, 0x90, 0x8A, 0xDD, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27,
62853 +0xF0, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x36, 0x92, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x06, 0x02, 0x80,
62854 +0x1B, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05,
62855 +0x04, 0xE4, 0xFF, 0x80, 0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09,
62856 +0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x05, 0x7F, 0x01, 0x12, 0x7B, 0x49, 0x12, 0x66, 0x13, 0x12,
62857 +0x4A, 0xFC, 0x7F, 0x03, 0xD1, 0xAB, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0xEF, 0x64, 0x01,
62858 +0x60, 0x04, 0xEF, 0xB4, 0x03, 0x15, 0x90, 0x8B, 0x32, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0,
62859 +0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xED, 0x64, 0x02, 0x60, 0x04,
62860 +0xED, 0xB4, 0x03, 0x15, 0x90, 0x8B, 0x2C, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3,
62861 +0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x12, 0x29, 0xD9, 0x90, 0x8B, 0x38,
62862 +0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x8A, 0xFD, 0xE0, 0x90, 0x8A, 0xE8,
62863 +0xF0, 0x90, 0x8A, 0xFE, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x8A, 0xE9, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0,
62864 +0xE4, 0x90, 0x8A, 0xE4, 0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34,
62865 +0x8B, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0xEB, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE,
62866 +0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x04, 0xDA, 0x90, 0x8A, 0xE8, 0xE0, 0x12,
62867 +0x43, 0x94, 0x77, 0x61, 0x00, 0x78, 0xD7, 0x01, 0x77, 0x6C, 0x02, 0x77, 0x6C, 0x03, 0x77, 0x6C,
62868 +0x04, 0x78, 0xD7, 0x05, 0x78, 0xA1, 0x80, 0x78, 0xBA, 0x81, 0x78, 0xD7, 0x82, 0x00, 0x00, 0x78,
62869 +0xD3, 0x90, 0x8A, 0xEE, 0xE0, 0xFF, 0x12, 0x7E, 0x6E, 0x02, 0x78, 0xD7, 0x90, 0x8A, 0xE8, 0xE0,
62870 +0xFF, 0xB4, 0x02, 0x08, 0x90, 0x8A, 0xE5, 0x74, 0x01, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x8A, 0xE5,
62871 +0xB4, 0x03, 0x05, 0x74, 0x02, 0xF0, 0x80, 0x03, 0x74, 0x04, 0xF0, 0xC3, 0x90, 0x8A, 0xE9, 0xE0,
62872 +0x94, 0x08, 0x50, 0x79, 0xE4, 0x90, 0x8A, 0xE4, 0xF0, 0x90, 0x8A, 0xE5, 0xE0, 0xFF, 0x90, 0x8A,
62873 +0xE4, 0xE0, 0xC3, 0x9F, 0x40, 0x03, 0x02, 0x78, 0xD7, 0x90, 0x8A, 0xE9, 0xE0, 0xFE, 0xA3, 0xE0,
62874 +0xFF, 0xC3, 0xEE, 0x94, 0x01, 0x90, 0x8A, 0xE4, 0xE0, 0x50, 0x1F, 0xFE, 0x2F, 0xFF, 0xEE, 0xFD,
62875 +0xC3, 0x74, 0x03, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0xEB, 0x2D, 0xF5, 0x82, 0x74, 0x8A,
62876 +0x3C, 0xF5, 0x83, 0xE0, 0xFD, 0x12, 0x51, 0xFB, 0x80, 0x2B, 0xFF, 0xFD, 0xC3, 0x74, 0x03, 0x9D,
62877 +0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x74, 0xEB, 0x2D, 0xF5, 0x82, 0x74, 0x8A, 0x3C, 0xF5, 0x83, 0xE0,
62878 +0xFE, 0xEF, 0xFD, 0x90, 0x8A, 0xEA, 0xE0, 0x2D, 0xFD, 0x90, 0x8A, 0xE9, 0xE0, 0x34, 0x00, 0x8D,
62879 +0x82, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x8A, 0xE4, 0xE0, 0x04, 0xF0, 0x80, 0x8C, 0xC3, 0x90, 0x8A,
62880 +0xE9, 0xE0, 0x94, 0x10, 0x40, 0x02, 0x01, 0xD7, 0x90, 0x8A, 0xE8, 0xE0, 0x64, 0x04, 0x60, 0x02,
62881 +0x01, 0xD7, 0x90, 0x8A, 0xEC, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x10, 0x12, 0x2A, 0x6C,
62882 +0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x8A, 0xEB, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD,
62883 +0xFE, 0x78, 0x18, 0x12, 0x2A, 0x6C, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43,
62884 +0x46, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x8A, 0xED, 0xE0, 0xFF, 0xE4, 0xFC,
62885 +0xFD, 0xFE, 0x78, 0x08, 0x12, 0x2A, 0x6C, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12,
62886 +0x43, 0x46, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0xA3, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD,
62887 +0xFE, 0x12, 0x43, 0x46, 0xA3, 0x12, 0x2A, 0x7F, 0x90, 0x8A, 0xEF, 0x12, 0x43, 0x53, 0x90, 0x80,
62888 +0x85, 0x12, 0x2A, 0x7F, 0x90, 0x8A, 0xE9, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x12, 0x2F, 0xD9, 0x80,
62889 +0x36, 0x90, 0x8A, 0xED, 0xE0, 0xFE, 0xA3, 0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x8A,
62890 +0xE6, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x37, 0x54, 0x80, 0x1D, 0x90, 0x8A, 0xED, 0xE0, 0xFE, 0xA3,
62891 +0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x8A, 0xE6, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x36,
62892 +0xCB, 0x80, 0x04, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
62893 +0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x8A, 0xDD, 0xF0, 0xA3, 0x74, 0x04, 0xF0, 0xA3, 0xE4,
62894 +0xF0, 0x90, 0x8A, 0xE2, 0xF0, 0xA3, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0x90, 0x8A, 0xE1, 0xF0, 0x12,
62895 +0x29, 0xD9, 0xFF, 0x90, 0x8A, 0xE1, 0xE0, 0x2F, 0x90, 0x8A, 0xE0, 0xF0, 0x30, 0xE0, 0x0B, 0x90,
62896 +0x8A, 0xDB, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x80, 0x07, 0xE4, 0x90, 0x8A, 0xDB, 0xF0, 0xA3,
62897 +0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x8A, 0xDD, 0xE0, 0x24,
62898 +0x20, 0xF0, 0x90, 0x8A, 0xDB, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFC, 0x2D, 0xFF, 0x24, 0x01, 0xF5,
62899 +0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0x8A, 0xFD, 0xF0, 0x74, 0x02, 0x2F, 0xF5, 0x82,
62900 +0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0xEC, 0x2D, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
62901 +0xF5, 0x83, 0xE0, 0x24, 0x00, 0xFF, 0xE4, 0x3E, 0x90, 0x8A, 0xFE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90,
62902 +0x8A, 0xDA, 0x74, 0x04, 0xF0, 0x90, 0x8A, 0xDB, 0xA3, 0xE0, 0xFF, 0xA3, 0xE0, 0x2F, 0xFF, 0x90,
62903 +0x8A, 0xDA, 0xE0, 0xFE, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFF,
62904 +0x74, 0xFC, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x8A, 0xDA, 0xE0,
62905 +0x04, 0xF0, 0xE0, 0xB4, 0x08, 0xCF, 0x12, 0x76, 0xF2, 0xEF, 0x70, 0x45, 0x90, 0x01, 0xC3, 0xE0,
62906 +0x60, 0x2B, 0xC3, 0x90, 0x8A, 0xE3, 0xE0, 0x94, 0xE8, 0x90, 0x8A, 0xE2, 0xE0, 0x94, 0x03, 0x40,
62907 +0x09, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x79, 0x90, 0x8A, 0xE2, 0xE4, 0x75, 0xF0,
62908 +0x01, 0x12, 0x42, 0x81, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x37, 0x54, 0x80, 0xCF, 0x90, 0x01, 0xC6,
62909 +0xE0, 0x90, 0x01, 0xC3, 0x30, 0xE2, 0x05, 0x74, 0xFE, 0xF0, 0x80, 0x57, 0x74, 0xFF, 0xF0, 0x80,
62910 +0x52, 0x90, 0x8A, 0xDD, 0xE0, 0xB4, 0x78, 0x2E, 0xE4, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0x04, 0xF0,
62911 +0x90, 0x8A, 0xDB, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x64, 0x80, 0x90, 0x8A, 0xDB, 0x70, 0x05, 0xF0,
62912 +0xA3, 0xF0, 0x80, 0x06, 0xE4, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0x8A, 0xE0, 0xE0, 0xC3, 0x13,
62913 +0x90, 0xFD, 0x10, 0xF0, 0x80, 0x07, 0x90, 0x8A, 0xDD, 0xE0, 0x24, 0x08, 0xF0, 0x90, 0x8A, 0xDE,
62914 +0x74, 0xFF, 0xF5, 0xF0, 0x12, 0x42, 0x81, 0x90, 0x8A, 0xDE, 0xE0, 0x70, 0x02, 0xA3, 0xE0, 0x60,
62915 +0x02, 0x21, 0x32, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x29, 0xD9, 0x90, 0x8B, 0x05, 0xF0, 0x90,
62916 +0x00, 0x01, 0x12, 0x42, 0x20, 0x90, 0x8B, 0x06, 0xF0, 0x22, 0xE4, 0xF5, 0x61, 0x22, 0x51, 0x67,
62917 +0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x7F, 0x78, 0x7E,
62918 +0x08, 0x12, 0x27, 0xDE, 0x90, 0x8B, 0x1C, 0x12, 0x2A, 0x7F, 0x7F, 0x04, 0x7E, 0x0C, 0x12, 0x27,
62919 +0xDE, 0x90, 0x8B, 0x20, 0x12, 0x2A, 0x7F, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x27, 0xDE, 0x90, 0x8B,
62920 +0x24, 0x12, 0x2A, 0x7F, 0x90, 0x8B, 0x09, 0xE0, 0x90, 0x8B, 0x1C, 0xB4, 0x01, 0x0D, 0x12, 0x43,
62921 +0x53, 0xEF, 0x54, 0xC7, 0xFF, 0xED, 0x54, 0xC7, 0xFD, 0x80, 0x07, 0x12, 0x43, 0x53, 0xEF, 0x54,
62922 +0xC7, 0xFF, 0xEC, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x78, 0x7E, 0x08, 0x12, 0x2F, 0xD9,
62923 +0x90, 0x8B, 0x20, 0x12, 0x43, 0x53, 0xEF, 0x54, 0x0F, 0xFF, 0xEC, 0x90, 0x80, 0x85, 0x12, 0x2A,
62924 +0x7F, 0x7F, 0x04, 0x7E, 0x0C, 0x12, 0x2F, 0xD9, 0x90, 0x8B, 0x24, 0x12, 0x43, 0x53, 0xEF, 0x44,
62925 +0x02, 0xFF, 0xEC, 0x90, 0x80, 0x85, 0x12, 0x2A, 0x7F, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2F, 0xD9,
62926 +0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x27, 0xDE, 0x90, 0x8B, 0x28, 0x12, 0x2A, 0x7F, 0x90, 0x80, 0x85,
62927 +0x12, 0x2A, 0x8B, 0x00, 0x1B, 0x25, 0xA0, 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2F, 0xD9, 0x90, 0x80,
62928 +0x59, 0x12, 0x2A, 0x8B, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFD, 0xFF, 0x12, 0x34, 0x81, 0x90, 0x8B,
62929 +0x09, 0xE0, 0xB4, 0x01, 0x11, 0x90, 0x80, 0x59, 0x12, 0x2A, 0x8B, 0x00, 0x00, 0x00, 0x00, 0xE4,
62930 +0xFD, 0x7F, 0x01, 0x12, 0x34, 0x81, 0x22, 0x51, 0x6D, 0x90, 0x8B, 0x33, 0x74, 0x02, 0xF0, 0x22,
62931 +0x51, 0x67, 0x90, 0x8B, 0x2D, 0x74, 0x04, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
62932 +0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0xA1, 0x15, 0xEF, 0x12, 0x43, 0x94, 0x7B, 0x77,
62933 +0x00, 0x7B, 0xB1, 0x01, 0x7B, 0xF7, 0x02, 0x7C, 0x31, 0x03, 0x7C, 0x69, 0x04, 0x7C, 0xA2, 0x05,
62934 +0x7C, 0xDD, 0x06, 0x00, 0x00, 0x7D, 0x15, 0xEE, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xB1, 0x48, 0xA1,
62935 +0x15, 0x90, 0x8B, 0x2D, 0xE0, 0xFF, 0xB4, 0x05, 0x04, 0xB1, 0x24, 0xA1, 0x15, 0xEF, 0xB4, 0x06,
62936 +0x06, 0x7F, 0x01, 0xB1, 0x39, 0x80, 0x16, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x03, 0x06, 0x7F, 0x01,
62937 +0xB1, 0x1A, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x02, 0xB1, 0x2E, 0xB1, 0x6B, 0xA1,
62938 +0x15, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xB1, 0x48, 0x80, 0x09, 0x90, 0x8B,
62939 +0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xB1, 0x24, 0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xB1, 0x61, 0xA1,
62940 +0x15, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xB1, 0x39, 0xA1, 0x15, 0xEE,
62941 +0xB4, 0x03, 0x06, 0x7F, 0x01, 0xB1, 0x1A, 0xA1, 0x15, 0x90, 0x8B, 0x2D, 0xE0, 0x64, 0x02, 0x60,
62942 +0x02, 0xA1, 0x15, 0xB1, 0x2E, 0xA1, 0x15, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01,
62943 +0xB1, 0x48, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xB1, 0x24, 0x90, 0x8B, 0x2D,
62944 +0xE0, 0x70, 0x04, 0xB1, 0x61, 0x80, 0x16, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0x7F,
62945 +0x01, 0xB1, 0x39, 0x80, 0x08, 0xEE, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0xB1, 0x1A, 0xB1, 0x8D, 0xA1,
62946 +0x15, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xB1, 0x48, 0x80, 0x09, 0x90, 0x8B,
62947 +0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xB1, 0x24, 0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xB1, 0x61, 0x80,
62948 +0x14, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xB1, 0x39, 0x80, 0x06, 0xEE,
62949 +0xB4, 0x02, 0x02, 0xB1, 0x2E, 0xB1, 0x76, 0xA1, 0x15, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06,
62950 +0x06, 0xE4, 0xFF, 0xB1, 0x39, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xB1, 0x1A, 0x80,
62951 +0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02, 0x02, 0xB1, 0x2E, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01,
62952 +0x04, 0xB1, 0x6B, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05, 0x02, 0xB1, 0x24, 0x71, 0x40,
62953 +0x80, 0x73, 0x90, 0x8B, 0x2D, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xB1, 0x39, 0x80, 0x13,
62954 +0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xB1, 0x1A, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02,
62955 +0x02, 0xB1, 0x2E, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x01, 0x04, 0xB1, 0x6B, 0x80, 0x0B, 0x90, 0x8B,
62956 +0x2D, 0xE0, 0xB4, 0x04, 0x04, 0x7F, 0x01, 0xB1, 0x48, 0xB1, 0x80, 0x80, 0x38, 0x90, 0x8B, 0x2D,
62957 +0xE0, 0xB4, 0x04, 0x06, 0x7F, 0x01, 0xB1, 0x48, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x05,
62958 +0x02, 0xB1, 0x24, 0x90, 0x8B, 0x2D, 0xE0, 0x70, 0x04, 0xB1, 0x61, 0x80, 0x16, 0x90, 0x8B, 0x2D,
62959 +0xE0, 0xB4, 0x03, 0x06, 0xE4, 0xFF, 0xB1, 0x1A, 0x80, 0x09, 0x90, 0x8B, 0x2D, 0xE0, 0xB4, 0x02,
62960 +0x02, 0xB1, 0x2E, 0xB1, 0x9A, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x4A, 0xB2, 0x90, 0x8B, 0x2D,
62961 +0x74, 0x01, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x90, 0x05,
62962 +0x22, 0xE4, 0xF0, 0x90, 0x8B, 0x2D, 0x04, 0xF0, 0x22, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4,
62963 +0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x8B, 0x56, 0xEF, 0xF0, 0x12, 0x4F, 0xED,
62964 +0x90, 0x8B, 0x56, 0xE0, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0xE4, 0x90, 0x8B, 0x2D, 0xF0,
62965 +0x22, 0x12, 0x4A, 0xCC, 0x90, 0x8B, 0x2D, 0x74, 0x01, 0xF0, 0x22, 0x7F, 0x01, 0x12, 0x4A, 0x7C,
62966 +0xE4, 0x90, 0x8B, 0x2D, 0xF0, 0x22, 0x12, 0x4A, 0x32, 0x90, 0x8B, 0x2D, 0x74, 0x03, 0xF0, 0x22,
62967 +0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x05, 0xF0, 0x22, 0x90, 0x05, 0x22,
62968 +0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x2D, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0,
62969 +0x90, 0x8B, 0x2D, 0x74, 0x06, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x8B, 0x33,
62970 +0x74, 0x04, 0xF0, 0x22, 0x12, 0x4F, 0xED, 0x90, 0x8B, 0x33, 0x74, 0x04, 0xF0, 0x22, 0x90, 0x01,
62971 +0x57, 0xE0, 0x60, 0x3C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90,
62972 +0x8B, 0x1B, 0xE0, 0x60, 0x07, 0xE4, 0xF0, 0x53, 0x25, 0xFD, 0x80, 0x24, 0x90, 0x8B, 0x0C, 0xE0,
62973 +0x04, 0xF0, 0x53, 0x25, 0xEF, 0x90, 0x8B, 0x10, 0xE0, 0xFF, 0x90, 0x8B, 0x0C, 0xE0, 0xD3, 0x9F,
62974 +0x40, 0x0E, 0xE5, 0x21, 0xB4, 0x01, 0x09, 0x90, 0x8B, 0x0D, 0xE0, 0x70, 0x03, 0xE0, 0x04, 0xF0,
62975 +0x90, 0x01, 0x5B, 0xE0, 0x60, 0x10, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04,
62976 +0xF0, 0xE4, 0x90, 0x8B, 0x18, 0xF0, 0x90, 0x01, 0x5F, 0xE0, 0x60, 0x10, 0x90, 0x01, 0x5F, 0xE4,
62977 +0xF0, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x8B, 0x17, 0xF0, 0x22, 0xE4, 0x90, 0x8B,
62978 +0x4F, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0,
62979 +0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x8B, 0x50, 0xE0, 0x94, 0xE8,
62980 +0x90, 0x8B, 0x4F, 0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12,
62981 +0x37, 0x54, 0x90, 0x8B, 0x4F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x81, 0x80, 0xC6, 0x8F, 0x0F,
62982 +0xE4, 0x90, 0x8A, 0xF3, 0xF0, 0xE5, 0x0F, 0x14, 0xFE, 0x90, 0x8A, 0xF3, 0xE0, 0xFF, 0xC3, 0x9E,
62983 +0x50, 0x0E, 0xEF, 0x04, 0xFD, 0x12, 0x34, 0xB7, 0x90, 0x8A, 0xF3, 0xE0, 0x04, 0xF0, 0x80, 0xE5,
62984 +0xE5, 0x0F, 0x14, 0xFF, 0x7D, 0xFF, 0x12, 0x34, 0xB7, 0x90, 0x8A, 0xF3, 0xE5, 0x0F, 0xF0, 0x90,
62985 +0x8A, 0xF3, 0xE0, 0xC3, 0x94, 0xFF, 0x50, 0x0F, 0xE0, 0xFF, 0x04, 0xFD, 0x12, 0x34, 0xB7, 0x90,
62986 +0x8A, 0xF3, 0xE0, 0x04, 0xF0, 0x80, 0xE8, 0xAD, 0x0F, 0x7F, 0xFF, 0x02, 0x34, 0xB7, 0xDC, 0xD3,
62987 };
62988 +#endif
62989 +
62990 +//8188C_Formal_All_PHYforMP_111117 2011-11-23
62991 +//8192C_Formal_92CU_PHYforMP_110817 2011-11-23
62992
62993 u32 Rtl8192CUPHY_REG_2TArray[PHY_REG_2TArrayLength] = {
62994 0x024,0x0011800f,
62995 @@ -7146,7 +6055,7 @@ u32 Rtl8192CUPHY_REG_2TArray[PHY_REG_2TArrayLength] = {
62996 0x804,0x00000003,
62997 0x808,0x0000fc00,
62998 0x80c,0x0000000a,
62999 -0x810,0x10005388,
63000 +0x810,0x10000330, //for Broadcom AP IOT
63001 0x814,0x020c3d10,
63002 0x818,0x02200385,
63003 0x81c,0x00000000,
63004 @@ -7220,22 +6129,22 @@ u32 Rtl8192CUPHY_REG_2TArray[PHY_REG_2TArrayLength] = {
63005 0xc44,0x000100b7,
63006 0xc48,0xec020107,
63007 0xc4c,0x007f037f,
63008 -0xc50,0x6954341e,
63009 +0xc50,0x69543420,
63010 0xc54,0x43bc0094,
63011 -0xc58,0x6954341e,
63012 +0xc58,0x69543420,
63013 0xc5c,0x433c0094,
63014 0xc60,0x00000000,
63015 0xc64,0x5116848b,
63016 0xc68,0x47c00bff,
63017 0xc6c,0x00000036,
63018 0xc70,0x2c7f000d,
63019 -0xc74,0x0186115b,
63020 +0xc74,0x2186115b,
63021 0xc78,0x0000001f,
63022 0xc7c,0x00b99612,
63023 0xc80,0x40000100,
63024 0xc84,0x20f60000,
63025 0xc88,0x40000100,
63026 -0xc8c,0x20200000,
63027 +0xc8c,0xa0e40000,
63028 0xc90,0x00121820,
63029 0xc94,0x00000000,
63030 0xc98,0x00121820,
63031 @@ -7336,7 +6245,7 @@ u32 Rtl8192CUPHY_REG_1TArray[PHY_REG_1TArrayLength] = {
63032 0x804,0x00000001,
63033 0x808,0x0000fc00,
63034 0x80c,0x0000000a,
63035 -0x810,0x10005388,
63036 +0x810,0x10000330, //for Broadcom AP IOT
63037 0x814,0x020c3d10,
63038 0x818,0x02200385,
63039 0x81c,0x00000000,
63040 @@ -7410,9 +6319,9 @@ u32 Rtl8192CUPHY_REG_1TArray[PHY_REG_1TArrayLength] = {
63041 0xc44,0x000100b7,
63042 0xc48,0xec020107,
63043 0xc4c,0x007f037f,
63044 -0xc50,0x6954341e,
63045 +0xc50,0x69543420,
63046 0xc54,0x43bc0094,
63047 -0xc58,0x6954341e,
63048 +0xc58,0x69543420,
63049 0xc5c,0x433c0094,
63050 0xc60,0x00000000,
63051 0xc64,0x5116848b,
63052 @@ -7450,7 +6359,7 @@ u32 Rtl8192CUPHY_REG_1TArray[PHY_REG_1TArrayLength] = {
63053 0xce4,0x00000000,
63054 0xce8,0x37644302,
63055 0xcec,0x2f97d40c,
63056 -0xd00,0x00080740,
63057 +0xd00,0x00000740,
63058 0xd04,0x00020401,
63059 0xd08,0x0000907f,
63060 0xd0c,0x20010201,
63061 @@ -7771,7 +6680,7 @@ u32 Rtl8192CUPHY_REG_1T_HPArray[PHY_REG_1T_HPArrayLength] = {
63062 0x804,0x00000001,
63063 0x808,0x0000fc00,
63064 0x80c,0x0000000a,
63065 -0x810,0x10005388,
63066 +0x810,0x10000330, //for Broadcom AP IOT
63067 0x814,0x020c3d10,
63068 0x818,0x02200385,
63069 0x81c,0x00000000,
63070 @@ -7885,7 +6794,7 @@ u32 Rtl8192CUPHY_REG_1T_HPArray[PHY_REG_1T_HPArrayLength] = {
63071 0xce4,0x00000000,
63072 0xce8,0x37644302,
63073 0xcec,0x2f97d40c,
63074 -0xd00,0x00080740,
63075 +0xd00,0x00000740,
63076 0xd04,0x00020401,
63077 0xd08,0x0000907f,
63078 0xd0c,0x20010201,
63079 @@ -7962,7 +6871,7 @@ u32 Rtl8192CUPHY_REG_1T_mCardArray[PHY_REG_1T_mCardArrayLength] = {
63080 0x804,0x00000001,
63081 0x808,0x0000fc00,
63082 0x80c,0x0000000a,
63083 -0x810,0x10005388,
63084 +0x810,0x10000330, //for Broadcom AP IOT
63085 0x814,0x020c3d10,
63086 0x818,0x02200385,
63087 0x81c,0x00000000,
63088 @@ -8036,9 +6945,9 @@ u32 Rtl8192CUPHY_REG_1T_mCardArray[PHY_REG_1T_mCardArrayLength] = {
63089 0xc44,0x000100b7,
63090 0xc48,0xec020107,
63091 0xc4c,0x007f037f,
63092 -0xc50,0x6954341e,
63093 +0xc50,0x69543420,
63094 0xc54,0x43bc0094,
63095 -0xc58,0x6954341e,
63096 +0xc58,0x69543420,
63097 0xc5c,0x433c0094,
63098 0xc60,0x00000000,
63099 0xc64,0x5116848b,
63100 @@ -8076,7 +6985,7 @@ u32 Rtl8192CUPHY_REG_1T_mCardArray[PHY_REG_1T_mCardArrayLength] = {
63101 0xce4,0x00000000,
63102 0xce8,0x37644302,
63103 0xcec,0x2f97d40c,
63104 -0xd00,0x00080740,
63105 +0xd00,0x00000740,
63106 0xd04,0x00020401,
63107 0xd08,0x0000907f,
63108 0xd0c,0x20010201,
63109 @@ -8152,7 +7061,7 @@ u32 Rtl8192CUPHY_REG_2T_mCardArray[PHY_REG_2T_mCardArrayLength] = {
63110 0x804,0x00000003,
63111 0x808,0x0000fc00,
63112 0x80c,0x0000000a,
63113 -0x810,0x10005388,
63114 +0x810,0x10000330, //for Broadcom AP IOT
63115 0x814,0x020c3d10,
63116 0x818,0x02200385,
63117 0x81c,0x00000000,
63118 @@ -8226,22 +7135,22 @@ u32 Rtl8192CUPHY_REG_2T_mCardArray[PHY_REG_2T_mCardArrayLength] = {
63119 0xc44,0x000100b7,
63120 0xc48,0xec020107,
63121 0xc4c,0x007f037f,
63122 -0xc50,0x6954341e,
63123 +0xc50,0x69543420,
63124 0xc54,0x43bc0094,
63125 -0xc58,0x6954341e,
63126 +0xc58,0x69543420,
63127 0xc5c,0x433c0094,
63128 0xc60,0x00000000,
63129 0xc64,0x5116848b,
63130 0xc68,0x47c00bff,
63131 0xc6c,0x00000036,
63132 0xc70,0x2c7f000d,
63133 -0xc74,0x018610db,
63134 +0xc74,0x218610db,
63135 0xc78,0x0000001f,
63136 0xc7c,0x00b91612,
63137 0xc80,0x40000100,
63138 0xc84,0x20f60000,
63139 0xc88,0x40000100,
63140 -0xc8c,0x20200000,
63141 +0xc8c,0xa0e40000,
63142 0xc90,0x00121820,
63143 0xc94,0x00000000,
63144 0xc98,0x00121820,
63145 @@ -8784,6 +7693,192 @@ u32 Rtl8192CURadioB_1TArray[RadioB_1TArrayLength] = {
63146 0x0, };
63147
63148
63149 +u32 Rtl8192CURadioA_2T_mCardArray[RadioA_2T_mCardArrayLength] = {
63150 +0x000,0x00030159,
63151 +0x001,0x00031284,
63152 +0x002,0x00098000,
63153 +0x003,0x00018c63,
63154 +0x004,0x000210e7,
63155 +0x009,0x0002044f,
63156 +0x00a,0x0001adb1,
63157 +0x00b,0x00054867,
63158 +0x00c,0x0008992e,
63159 +0x00d,0x0000e52c,
63160 +0x00e,0x00039ce7,
63161 +0x00f,0x00000451,
63162 +0x019,0x00000000,
63163 +0x01a,0x00010255,
63164 +0x01b,0x00060a00,
63165 +0x01c,0x000fc378,
63166 +0x01d,0x000a1250,
63167 +0x01e,0x0004445f,
63168 +0x01f,0x00080001,
63169 +0x020,0x0000b614,
63170 +0x021,0x0006c000,
63171 +0x022,0x00000000,
63172 +0x023,0x00001558,
63173 +0x024,0x00000060,
63174 +0x025,0x00000483,
63175 +0x026,0x0004f000,
63176 +0x027,0x000ec7d9,
63177 +0x028,0x000577c0,
63178 +0x029,0x00004783,
63179 +0x02a,0x00000001,
63180 +0x02b,0x00021334,
63181 +0x02a,0x00000000,
63182 +0x02b,0x00000054,
63183 +0x02a,0x00000001,
63184 +0x02b,0x00000808,
63185 +0x02b,0x00053333,
63186 +0x02c,0x0000000c,
63187 +0x02a,0x00000002,
63188 +0x02b,0x00000808,
63189 +0x02b,0x0005b333,
63190 +0x02c,0x0000000d,
63191 +0x02a,0x00000003,
63192 +0x02b,0x00000808,
63193 +0x02b,0x00063333,
63194 +0x02c,0x0000000d,
63195 +0x02a,0x00000004,
63196 +0x02b,0x00000808,
63197 +0x02b,0x0006b333,
63198 +0x02c,0x0000000d,
63199 +0x02a,0x00000005,
63200 +0x02b,0x00000808,
63201 +0x02b,0x00073333,
63202 +0x02c,0x0000000d,
63203 +0x02a,0x00000006,
63204 +0x02b,0x00000709,
63205 +0x02b,0x0005b333,
63206 +0x02c,0x0000000d,
63207 +0x02a,0x00000007,
63208 +0x02b,0x00000709,
63209 +0x02b,0x00063333,
63210 +0x02c,0x0000000d,
63211 +0x02a,0x00000008,
63212 +0x02b,0x0000060a,
63213 +0x02b,0x0004b333,
63214 +0x02c,0x0000000d,
63215 +0x02a,0x00000009,
63216 +0x02b,0x0000060a,
63217 +0x02b,0x00053333,
63218 +0x02c,0x0000000d,
63219 +0x02a,0x0000000a,
63220 +0x02b,0x0000060a,
63221 +0x02b,0x0005b333,
63222 +0x02c,0x0000000d,
63223 +0x02a,0x0000000b,
63224 +0x02b,0x0000060a,
63225 +0x02b,0x00063333,
63226 +0x02c,0x0000000d,
63227 +0x02a,0x0000000c,
63228 +0x02b,0x0000060a,
63229 +0x02b,0x0006b333,
63230 +0x02c,0x0000000d,
63231 +0x02a,0x0000000d,
63232 +0x02b,0x0000060a,
63233 +0x02b,0x00073333,
63234 +0x02c,0x0000000d,
63235 +0x02a,0x0000000e,
63236 +0x02b,0x0000050b,
63237 +0x02b,0x00066666,
63238 +0x02c,0x0000001a,
63239 +0x02a,0x000e0000,
63240 +0x010,0x0004000f,
63241 +0x011,0x000e31fc,
63242 +0x010,0x0006000f,
63243 +0x011,0x000ff9f8,
63244 +0x010,0x0002000f,
63245 +0x011,0x000203f9,
63246 +0x010,0x0003000f,
63247 +0x011,0x000ff500,
63248 +0x010,0x00000000,
63249 +0x011,0x00000000,
63250 +0x010,0x0008000f,
63251 +0x011,0x0003f100,
63252 +0x010,0x0009000f,
63253 +0x011,0x00023100,
63254 +0x012,0x00032000,
63255 +0x012,0x00071000,
63256 +0x012,0x000b0000,
63257 +0x012,0x000fc000,
63258 +0x013,0x000287b3,
63259 +0x013,0x000244b7,
63260 +0x013,0x000204ab,
63261 +0x013,0x0001c49f,
63262 +0x013,0x00018493,
63263 +0x013,0x0001429b,
63264 +0x013,0x00010299,
63265 +0x013,0x0000c29c,
63266 +0x013,0x000081a0,
63267 +0x013,0x000040ac,
63268 +0x013,0x00000020,
63269 +0x014,0x0001944c,
63270 +0x014,0x00059444,
63271 +0x014,0x0009944c,
63272 +0x014,0x000d9444,
63273 +0x015,0x0000f424,
63274 +0x015,0x0004f424,
63275 +0x015,0x0008f424,
63276 +0x015,0x000cf424,
63277 +0x016,0x000e0330,
63278 +0x016,0x000a0330,
63279 +0x016,0x00060330,
63280 +0x016,0x00020330,
63281 +0x000,0x00010159,
63282 +0x018,0x0000f401,
63283 +0x0fe,0x00000000,
63284 +0x0fe,0x00000000,
63285 +0x01f,0x00080003,
63286 +0x0fe,0x00000000,
63287 +0x0fe,0x00000000,
63288 +0x01e,0x00044457,
63289 +0x01f,0x00080000,
63290 +0x000,0x00030159,
63291 +};
63292 +
63293 +u32 Rtl8192CURadioB_2T_mCardArray[RadioB_2T_mCardArrayLength] = {
63294 +0x000,0x00030159,
63295 +0x001,0x00031284,
63296 +0x002,0x00098000,
63297 +0x003,0x00018c63,
63298 +0x004,0x000210e7,
63299 +0x009,0x0002044f,
63300 +0x00a,0x0001adb1,
63301 +0x00b,0x00054867,
63302 +0x00c,0x0008992e,
63303 +0x00d,0x0000e52c,
63304 +0x00e,0x00039ce7,
63305 +0x00f,0x00000451,
63306 +0x012,0x00032000,
63307 +0x012,0x00071000,
63308 +0x012,0x000b0000,
63309 +0x012,0x000fc000,
63310 +0x013,0x000287af,
63311 +0x013,0x000244b7,
63312 +0x013,0x000204ab,
63313 +0x013,0x0001c49f,
63314 +0x013,0x00018493,
63315 +0x013,0x00014297,
63316 +0x013,0x00010295,
63317 +0x013,0x0000c298,
63318 +0x013,0x0000819c,
63319 +0x013,0x000040a8,
63320 +0x013,0x0000001c,
63321 +0x014,0x0001944c,
63322 +0x014,0x00059444,
63323 +0x014,0x0009944c,
63324 +0x014,0x000d9444,
63325 +0x015,0x0000f424,
63326 +0x015,0x0004f424,
63327 +0x015,0x0008f424,
63328 +0x015,0x000cf424,
63329 +0x016,0x000e0330,
63330 +0x016,0x000a0330,
63331 +0x016,0x00060330,
63332 +0x016,0x00020330,
63333 +};
63334 +
63335 u32 Rtl8192CURadioA_1T_mCardArray[RadioA_1T_mCardArrayLength] = {
63336 0x000,0x00030159,
63337 0x001,0x00031284,
63338 @@ -9043,7 +8138,7 @@ u32 Rtl8192CURadioA_1T_HPArray[RadioA_1T_HPArrayLength] = {
63339 0x013,0x00028fb4,
63340 0x013,0x00024fa8,
63341 0x013,0x000207a4,
63342 -0x013,0x0001c798,
63343 +0x013,0x0001c3b0,
63344 0x013,0x000183a4,
63345 0x013,0x00014398,
63346 0x013,0x000101a4,
63347 @@ -9078,7 +8173,7 @@ u32 Rtl8192CURadioA_1T_HPArray[RadioA_1T_HPArrayLength] = {
63348 u32 Rtl8192CURadioB_GM_Array[RadioB_GM_ArrayLength] = {
63349 0x0, };
63350
63351 -// MAC reg V13 - 2010-12-07
63352 +// MAC reg V14 - 2011-11-23
63353 u32 Rtl8192CUMAC_2T_Array[MAC_2T_ArrayLength] = {
63354 0x420,0x00000080,
63355 0x423,0x00000000,
63356 @@ -9153,10 +8248,11 @@ u32 Rtl8192CUMAC_2T_Array[MAC_2T_ArrayLength] = {
63357 0x608,0x0000000e,
63358 0x609,0x0000002a,
63359 0x652,0x00000020,
63360 -0x63c,0x0000000a,
63361 -0x63d,0x0000000e,
63362 -0x63e,0x0000000a,
63363 -0x63f,0x0000000e,
63364 +0x652,0x00000020,
63365 +0x63c,0x00000008,
63366 +0x63d,0x00000008,
63367 +0x63e,0x0000000c,
63368 +0x63f,0x0000000c,
63369 0x66e,0x00000005,
63370 0x700,0x00000021,
63371 0x701,0x00000043,
63372 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c
63373 index f39b4cb..0d7af4a 100644
63374 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c
63375 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c
63376 @@ -16,8 +16,7 @@
63377 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
63378 *
63379 *
63380 -
63381 -******************************************************************************/
63382 + ******************************************************************************/
63383
63384 #include "drv_types.h"
63385 #include "rtl8192c_hal.h"
63386 @@ -65,7 +64,7 @@ BlinkWorkItemCallback(
63387 //
63388 static void
63389 ResetLedStatus(PLED_871x pLed) {
63390 - pLed->CurrLedState = LED_OFF; // Current LED state.
63391 + pLed->CurrLedState = RTW_LED_OFF; // Current LED state.
63392 pLed->bLedOn = _FALSE; // true if LED is ON, false if LED is OFF.
63393
63394 pLed->bLedBlinkInProgress = _FALSE; // true if it is blinking, false o.w..
63395 @@ -75,7 +74,7 @@ ResetLedStatus(PLED_871x pLed) {
63396 pLed->bLedScanBlinkInProgress = _FALSE;
63397 pLed->bLedWPSBlinkInProgress = _FALSE;
63398 pLed->BlinkTimes = 0; // Number of times to toggle led state for blinking.
63399 - pLed->BlinkingLedState = LED_UNKNOWN; // Next state for blinking, either LED_ON or LED_OFF are.
63400 + pLed->BlinkingLedState = LED_UNKNOWN; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are.
63401 }
63402
63403 //================================================================================
63404 @@ -112,7 +111,15 @@ DeInitLed871x(
63405 PLED_871x pLed
63406 )
63407 {
63408 + //call _cancel_workitem_sync(&(pLed->BlinkWorkItem))
63409 + //before _cancel_timer_ex(&(pLed->BlinkTimer)) to
63410 + //avoid led timer restarting when driver is removed
63411 +
63412 + _cancel_workitem_sync(&(pLed->BlinkWorkItem));
63413 +
63414 _cancel_timer_ex(&(pLed->BlinkTimer));
63415 +
63416 + // We should reset bLedBlinkInProgress if we cancel the LedControlTimer, 2005.03.10, by rcnjko.
63417 ResetLedStatus(pLed);
63418 }
63419
63420 @@ -318,7 +325,7 @@ SwLedBlink(
63421 u8 bStopBlinking = _FALSE;
63422
63423 // Change LED according to BlinkingLedState specified.
63424 - if( pLed->BlinkingLedState == LED_ON )
63425 + if( pLed->BlinkingLedState == RTW_LED_ON )
63426 {
63427 SwLedOn(padapter, pLed);
63428 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
63429 @@ -393,10 +400,10 @@ SwLedBlink(
63430 else
63431 {
63432 // Assign LED state to toggle.
63433 - if( pLed->BlinkingLedState == LED_ON )
63434 - pLed->BlinkingLedState = LED_OFF;
63435 + if( pLed->BlinkingLedState == RTW_LED_ON )
63436 + pLed->BlinkingLedState = RTW_LED_OFF;
63437 else
63438 - pLed->BlinkingLedState = LED_ON;
63439 + pLed->BlinkingLedState = RTW_LED_ON;
63440
63441 // Schedule a timer to toggle LED state.
63442 switch( pLed->CurrLedState )
63443 @@ -412,7 +419,7 @@ SwLedBlink(
63444
63445 case LED_BLINK_WPS:
63446 {
63447 - if( pLed->BlinkingLedState == LED_ON )
63448 + if( pLed->BlinkingLedState == RTW_LED_ON )
63449 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
63450 else
63451 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
63452 @@ -443,7 +450,7 @@ SwLedBlink1(
63453 pLed = &(ledpriv->SwLed1);
63454
63455 // Change LED according to BlinkingLedState specified.
63456 - if( pLed->BlinkingLedState == LED_ON )
63457 + if( pLed->BlinkingLedState == RTW_LED_ON )
63458 {
63459 SwLedOn(padapter, pLed);
63460 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,( "Blinktimes (%d): turn on\n", pLed->BlinkTimes));
63461 @@ -494,17 +501,17 @@ SwLedBlink1(
63462 {
63463 case LED_BLINK_SLOWLY:
63464 if( pLed->bLedOn )
63465 - pLed->BlinkingLedState = LED_OFF;
63466 + pLed->BlinkingLedState = RTW_LED_OFF;
63467 else
63468 - pLed->BlinkingLedState = LED_ON;
63469 + pLed->BlinkingLedState = RTW_LED_ON;
63470 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
63471 break;
63472
63473 case LED_BLINK_NORMAL:
63474 if( pLed->bLedOn )
63475 - pLed->BlinkingLedState = LED_OFF;
63476 + pLed->BlinkingLedState = RTW_LED_OFF;
63477 else
63478 - pLed->BlinkingLedState = LED_ON;
63479 + pLed->BlinkingLedState = RTW_LED_ON;
63480 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
63481 break;
63482
63483 @@ -522,9 +529,9 @@ SwLedBlink1(
63484 pLed->bLedLinkBlinkInProgress = _TRUE;
63485 pLed->CurrLedState = LED_BLINK_NORMAL;
63486 if( pLed->bLedOn )
63487 - pLed->BlinkingLedState = LED_OFF;
63488 + pLed->BlinkingLedState = RTW_LED_OFF;
63489 else
63490 - pLed->BlinkingLedState = LED_ON;
63491 + pLed->BlinkingLedState = RTW_LED_ON;
63492 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
63493 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
63494
63495 @@ -534,9 +541,9 @@ SwLedBlink1(
63496 pLed->bLedNoLinkBlinkInProgress = _TRUE;
63497 pLed->CurrLedState = LED_BLINK_SLOWLY;
63498 if( pLed->bLedOn )
63499 - pLed->BlinkingLedState = LED_OFF;
63500 + pLed->BlinkingLedState = RTW_LED_OFF;
63501 else
63502 - pLed->BlinkingLedState = LED_ON;
63503 + pLed->BlinkingLedState = RTW_LED_ON;
63504 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
63505 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
63506 }
63507 @@ -545,9 +552,9 @@ SwLedBlink1(
63508 else
63509 {
63510 if( pLed->bLedOn )
63511 - pLed->BlinkingLedState = LED_OFF;
63512 + pLed->BlinkingLedState = RTW_LED_OFF;
63513 else
63514 - pLed->BlinkingLedState = LED_ON;
63515 + pLed->BlinkingLedState = RTW_LED_ON;
63516 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
63517 }
63518 break;
63519 @@ -565,9 +572,9 @@ SwLedBlink1(
63520 pLed->bLedLinkBlinkInProgress = _TRUE;
63521 pLed->CurrLedState = LED_BLINK_NORMAL;
63522 if( pLed->bLedOn )
63523 - pLed->BlinkingLedState = LED_OFF;
63524 + pLed->BlinkingLedState = RTW_LED_OFF;
63525 else
63526 - pLed->BlinkingLedState = LED_ON;
63527 + pLed->BlinkingLedState = RTW_LED_ON;
63528 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
63529 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
63530 }
63531 @@ -576,9 +583,9 @@ SwLedBlink1(
63532 pLed->bLedNoLinkBlinkInProgress = _TRUE;
63533 pLed->CurrLedState = LED_BLINK_SLOWLY;
63534 if( pLed->bLedOn )
63535 - pLed->BlinkingLedState = LED_OFF;
63536 + pLed->BlinkingLedState = RTW_LED_OFF;
63537 else
63538 - pLed->BlinkingLedState = LED_ON;
63539 + pLed->BlinkingLedState = RTW_LED_ON;
63540 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
63541 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
63542 }
63543 @@ -588,23 +595,23 @@ SwLedBlink1(
63544 else
63545 {
63546 if( pLed->bLedOn )
63547 - pLed->BlinkingLedState = LED_OFF;
63548 + pLed->BlinkingLedState = RTW_LED_OFF;
63549 else
63550 - pLed->BlinkingLedState = LED_ON;
63551 + pLed->BlinkingLedState = RTW_LED_ON;
63552 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
63553 }
63554 break;
63555
63556 case LED_BLINK_WPS:
63557 if( pLed->bLedOn )
63558 - pLed->BlinkingLedState = LED_OFF;
63559 + pLed->BlinkingLedState = RTW_LED_OFF;
63560 else
63561 - pLed->BlinkingLedState = LED_ON;
63562 + pLed->BlinkingLedState = RTW_LED_ON;
63563 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
63564 break;
63565
63566 case LED_BLINK_WPS_STOP: //WPS success
63567 - if(pLed->BlinkingLedState == LED_ON)
63568 + if(pLed->BlinkingLedState == RTW_LED_ON)
63569 bStopBlinking = _FALSE;
63570 else
63571 bStopBlinking = _TRUE;
63572 @@ -614,9 +621,9 @@ SwLedBlink1(
63573 pLed->bLedLinkBlinkInProgress = _TRUE;
63574 pLed->CurrLedState = LED_BLINK_NORMAL;
63575 if( pLed->bLedOn )
63576 - pLed->BlinkingLedState = LED_OFF;
63577 + pLed->BlinkingLedState = RTW_LED_OFF;
63578 else
63579 - pLed->BlinkingLedState = LED_ON;
63580 + pLed->BlinkingLedState = RTW_LED_ON;
63581 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
63582 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
63583
63584 @@ -624,7 +631,7 @@ SwLedBlink1(
63585 }
63586 else
63587 {
63588 - pLed->BlinkingLedState = LED_OFF;
63589 + pLed->BlinkingLedState = RTW_LED_OFF;
63590 _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
63591 }
63592 break;
63593 @@ -645,7 +652,7 @@ SwLedBlink2(
63594 u8 bStopBlinking = _FALSE;
63595
63596 // Change LED according to BlinkingLedState specified.
63597 - if( pLed->BlinkingLedState == LED_ON)
63598 + if( pLed->BlinkingLedState == RTW_LED_ON)
63599 {
63600 SwLedOn(padapter, pLed);
63601 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
63602 @@ -673,16 +680,16 @@ SwLedBlink2(
63603 }
63604 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
63605 {
63606 - pLed->CurrLedState = LED_ON;
63607 - pLed->BlinkingLedState = LED_ON;
63608 + pLed->CurrLedState = RTW_LED_ON;
63609 + pLed->BlinkingLedState = RTW_LED_ON;
63610 SwLedOn(padapter, pLed);
63611 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState));
63612
63613 }
63614 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
63615 {
63616 - pLed->CurrLedState = LED_OFF;
63617 - pLed->BlinkingLedState = LED_OFF;
63618 + pLed->CurrLedState = RTW_LED_OFF;
63619 + pLed->BlinkingLedState = RTW_LED_OFF;
63620 SwLedOff(padapter, pLed);
63621 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState));
63622 }
63623 @@ -697,9 +704,9 @@ SwLedBlink2(
63624 else
63625 {
63626 if( pLed->bLedOn )
63627 - pLed->BlinkingLedState = LED_OFF;
63628 + pLed->BlinkingLedState = RTW_LED_OFF;
63629 else
63630 - pLed->BlinkingLedState = LED_ON;
63631 + pLed->BlinkingLedState = RTW_LED_ON;
63632 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
63633 }
63634 }
63635 @@ -719,16 +726,16 @@ SwLedBlink2(
63636 }
63637 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
63638 {
63639 - pLed->CurrLedState = LED_ON;
63640 - pLed->BlinkingLedState = LED_ON;
63641 + pLed->CurrLedState = RTW_LED_ON;
63642 + pLed->BlinkingLedState = RTW_LED_ON;
63643 SwLedOn(padapter, pLed);
63644 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState));
63645
63646 }
63647 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
63648 {
63649 - pLed->CurrLedState = LED_OFF;
63650 - pLed->BlinkingLedState = LED_OFF;
63651 + pLed->CurrLedState = RTW_LED_OFF;
63652 + pLed->BlinkingLedState = RTW_LED_OFF;
63653 SwLedOff(padapter, pLed);
63654 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState));
63655 }
63656 @@ -743,9 +750,9 @@ SwLedBlink2(
63657 else
63658 {
63659 if( pLed->bLedOn )
63660 - pLed->BlinkingLedState = LED_OFF;
63661 + pLed->BlinkingLedState = RTW_LED_OFF;
63662 else
63663 - pLed->BlinkingLedState = LED_ON;
63664 + pLed->BlinkingLedState = RTW_LED_ON;
63665 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
63666 }
63667 }
63668 @@ -767,7 +774,7 @@ SwLedBlink3(
63669 u8 bStopBlinking = _FALSE;
63670
63671 // Change LED according to BlinkingLedState specified.
63672 - if( pLed->BlinkingLedState == LED_ON )
63673 + if( pLed->BlinkingLedState == RTW_LED_ON )
63674 {
63675 SwLedOn(padapter, pLed);
63676 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
63677 @@ -796,8 +803,8 @@ SwLedBlink3(
63678 }
63679 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
63680 {
63681 - pLed->CurrLedState = LED_ON;
63682 - pLed->BlinkingLedState = LED_ON;
63683 + pLed->CurrLedState = RTW_LED_ON;
63684 + pLed->BlinkingLedState = RTW_LED_ON;
63685 if( !pLed->bLedOn )
63686 SwLedOn(padapter, pLed);
63687
63688 @@ -805,8 +812,8 @@ SwLedBlink3(
63689 }
63690 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
63691 {
63692 - pLed->CurrLedState = LED_OFF;
63693 - pLed->BlinkingLedState = LED_OFF;
63694 + pLed->CurrLedState = RTW_LED_OFF;
63695 + pLed->BlinkingLedState = RTW_LED_OFF;
63696 if( pLed->bLedOn )
63697 SwLedOff(padapter, pLed);
63698
63699 @@ -823,9 +830,9 @@ SwLedBlink3(
63700 else
63701 {
63702 if( pLed->bLedOn )
63703 - pLed->BlinkingLedState = LED_OFF;
63704 + pLed->BlinkingLedState = RTW_LED_OFF;
63705 else
63706 - pLed->BlinkingLedState = LED_ON;
63707 + pLed->BlinkingLedState = RTW_LED_ON;
63708 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
63709 }
63710 }
63711 @@ -845,8 +852,8 @@ SwLedBlink3(
63712 }
63713 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
63714 {
63715 - pLed->CurrLedState = LED_ON;
63716 - pLed->BlinkingLedState = LED_ON;
63717 + pLed->CurrLedState = RTW_LED_ON;
63718 + pLed->BlinkingLedState = RTW_LED_ON;
63719
63720 if( !pLed->bLedOn )
63721 SwLedOn(padapter, pLed);
63722 @@ -855,8 +862,8 @@ SwLedBlink3(
63723 }
63724 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
63725 {
63726 - pLed->CurrLedState = LED_OFF;
63727 - pLed->BlinkingLedState = LED_OFF;
63728 + pLed->CurrLedState = RTW_LED_OFF;
63729 + pLed->BlinkingLedState = RTW_LED_OFF;
63730
63731 if( pLed->bLedOn )
63732 SwLedOff(padapter, pLed);
63733 @@ -875,9 +882,9 @@ SwLedBlink3(
63734 else
63735 {
63736 if( pLed->bLedOn )
63737 - pLed->BlinkingLedState = LED_OFF;
63738 + pLed->BlinkingLedState = RTW_LED_OFF;
63739 else
63740 - pLed->BlinkingLedState = LED_ON;
63741 + pLed->BlinkingLedState = RTW_LED_ON;
63742 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
63743 }
63744 }
63745 @@ -885,16 +892,16 @@ SwLedBlink3(
63746
63747 case LED_BLINK_WPS:
63748 if( pLed->bLedOn )
63749 - pLed->BlinkingLedState = LED_OFF;
63750 + pLed->BlinkingLedState = RTW_LED_OFF;
63751 else
63752 - pLed->BlinkingLedState = LED_ON;
63753 + pLed->BlinkingLedState = RTW_LED_ON;
63754 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
63755 break;
63756
63757 case LED_BLINK_WPS_STOP: //WPS success
63758 - if(pLed->BlinkingLedState == LED_ON)
63759 + if(pLed->BlinkingLedState == RTW_LED_ON)
63760 {
63761 - pLed->BlinkingLedState = LED_OFF;
63762 + pLed->BlinkingLedState = RTW_LED_OFF;
63763 _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
63764 bStopBlinking = _FALSE;
63765 }
63766 @@ -911,8 +918,8 @@ SwLedBlink3(
63767 }
63768 else
63769 {
63770 - pLed->CurrLedState = LED_ON;
63771 - pLed->BlinkingLedState = LED_ON;
63772 + pLed->CurrLedState = RTW_LED_ON;
63773 + pLed->BlinkingLedState = RTW_LED_ON;
63774 SwLedOn(padapter, pLed);
63775 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
63776 }
63777 @@ -940,7 +947,7 @@ SwLedBlink4(
63778 u8 bStopBlinking = _FALSE;
63779
63780 // Change LED according to BlinkingLedState specified.
63781 - if( pLed->BlinkingLedState == LED_ON )
63782 + if( pLed->BlinkingLedState == RTW_LED_ON )
63783 {
63784 SwLedOn(padapter, pLed);
63785 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
63786 @@ -953,8 +960,8 @@ SwLedBlink4(
63787
63788 if(!pLed1->bLedWPSBlinkInProgress && pLed1->BlinkingLedState == LED_UNKNOWN)
63789 {
63790 - pLed1->BlinkingLedState = LED_OFF;
63791 - pLed1->CurrLedState = LED_OFF;
63792 + pLed1->BlinkingLedState = RTW_LED_OFF;
63793 + pLed1->CurrLedState = RTW_LED_OFF;
63794 SwLedOff(padapter, pLed1);
63795 }
63796
63797 @@ -962,21 +969,21 @@ SwLedBlink4(
63798 {
63799 case LED_BLINK_SLOWLY:
63800 if( pLed->bLedOn )
63801 - pLed->BlinkingLedState = LED_OFF;
63802 + pLed->BlinkingLedState = RTW_LED_OFF;
63803 else
63804 - pLed->BlinkingLedState = LED_ON;
63805 + pLed->BlinkingLedState = RTW_LED_ON;
63806 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
63807 break;
63808
63809 case LED_BLINK_StartToBlink:
63810 if( pLed->bLedOn )
63811 {
63812 - pLed->BlinkingLedState = LED_OFF;
63813 + pLed->BlinkingLedState = RTW_LED_OFF;
63814 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
63815 }
63816 else
63817 {
63818 - pLed->BlinkingLedState = LED_ON;
63819 + pLed->BlinkingLedState = RTW_LED_ON;
63820 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
63821 }
63822 break;
63823 @@ -999,9 +1006,9 @@ SwLedBlink4(
63824 pLed->bLedNoLinkBlinkInProgress = _FALSE;
63825 pLed->CurrLedState = LED_BLINK_SLOWLY;
63826 if( pLed->bLedOn )
63827 - pLed->BlinkingLedState = LED_OFF;
63828 + pLed->BlinkingLedState = RTW_LED_OFF;
63829 else
63830 - pLed->BlinkingLedState = LED_ON;
63831 + pLed->BlinkingLedState = RTW_LED_ON;
63832 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
63833 }
63834 pLed->bLedScanBlinkInProgress = _FALSE;
63835 @@ -1015,9 +1022,9 @@ SwLedBlink4(
63836 else
63837 {
63838 if( pLed->bLedOn )
63839 - pLed->BlinkingLedState = LED_OFF;
63840 + pLed->BlinkingLedState = RTW_LED_OFF;
63841 else
63842 - pLed->BlinkingLedState = LED_ON;
63843 + pLed->BlinkingLedState = RTW_LED_ON;
63844 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
63845 }
63846 }
63847 @@ -1040,9 +1047,9 @@ SwLedBlink4(
63848 pLed->bLedNoLinkBlinkInProgress = _TRUE;
63849 pLed->CurrLedState = LED_BLINK_SLOWLY;
63850 if( pLed->bLedOn )
63851 - pLed->BlinkingLedState = LED_OFF;
63852 + pLed->BlinkingLedState = RTW_LED_OFF;
63853 else
63854 - pLed->BlinkingLedState = LED_ON;
63855 + pLed->BlinkingLedState = RTW_LED_ON;
63856 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
63857 }
63858 pLed->bLedBlinkInProgress = _FALSE;
63859 @@ -1056,9 +1063,9 @@ SwLedBlink4(
63860 else
63861 {
63862 if( pLed->bLedOn )
63863 - pLed->BlinkingLedState = LED_OFF;
63864 + pLed->BlinkingLedState = RTW_LED_OFF;
63865 else
63866 - pLed->BlinkingLedState = LED_ON;
63867 + pLed->BlinkingLedState = RTW_LED_ON;
63868 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
63869 }
63870 }
63871 @@ -1067,21 +1074,21 @@ SwLedBlink4(
63872 case LED_BLINK_WPS:
63873 if( pLed->bLedOn )
63874 {
63875 - pLed->BlinkingLedState = LED_OFF;
63876 + pLed->BlinkingLedState = RTW_LED_OFF;
63877 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
63878 }
63879 else
63880 {
63881 - pLed->BlinkingLedState = LED_ON;
63882 + pLed->BlinkingLedState = RTW_LED_ON;
63883 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
63884 }
63885 break;
63886
63887 case LED_BLINK_WPS_STOP: //WPS authentication fail
63888 if( pLed->bLedOn )
63889 - pLed->BlinkingLedState = LED_OFF;
63890 + pLed->BlinkingLedState = RTW_LED_OFF;
63891 else
63892 - pLed->BlinkingLedState = LED_ON;
63893 + pLed->BlinkingLedState = RTW_LED_ON;
63894
63895 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
63896 break;
63897 @@ -1103,15 +1110,15 @@ SwLedBlink4(
63898 if(bStopBlinking)
63899 {
63900 pLed->BlinkTimes = 10;
63901 - pLed->BlinkingLedState = LED_ON;
63902 + pLed->BlinkingLedState = RTW_LED_ON;
63903 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
63904 }
63905 else
63906 {
63907 if( pLed->bLedOn )
63908 - pLed->BlinkingLedState = LED_OFF;
63909 + pLed->BlinkingLedState = RTW_LED_OFF;
63910 else
63911 - pLed->BlinkingLedState = LED_ON;
63912 + pLed->BlinkingLedState = RTW_LED_ON;
63913
63914 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
63915 }
63916 @@ -1137,7 +1144,7 @@ SwLedBlink5(
63917 u8 bStopBlinking = _FALSE;
63918
63919 // Change LED according to BlinkingLedState specified.
63920 - if( pLed->BlinkingLedState == LED_ON )
63921 + if( pLed->BlinkingLedState == RTW_LED_ON )
63922 {
63923 SwLedOn(padapter, pLed);
63924 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
63925 @@ -1161,14 +1168,14 @@ SwLedBlink5(
63926 {
63927 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
63928 {
63929 - pLed->CurrLedState = LED_OFF;
63930 - pLed->BlinkingLedState = LED_OFF;
63931 + pLed->CurrLedState = RTW_LED_OFF;
63932 + pLed->BlinkingLedState = RTW_LED_OFF;
63933 if(pLed->bLedOn)
63934 SwLedOff(padapter, pLed);
63935 }
63936 else
63937 - { pLed->CurrLedState = LED_ON;
63938 - pLed->BlinkingLedState = LED_ON;
63939 + { pLed->CurrLedState = RTW_LED_ON;
63940 + pLed->BlinkingLedState = RTW_LED_ON;
63941 if(!pLed->bLedOn)
63942 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
63943 }
63944 @@ -1184,9 +1191,9 @@ SwLedBlink5(
63945 else
63946 {
63947 if( pLed->bLedOn )
63948 - pLed->BlinkingLedState = LED_OFF;
63949 + pLed->BlinkingLedState = RTW_LED_OFF;
63950 else
63951 - pLed->BlinkingLedState = LED_ON;
63952 + pLed->BlinkingLedState = RTW_LED_ON;
63953 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
63954 }
63955 }
63956 @@ -1204,15 +1211,15 @@ SwLedBlink5(
63957 {
63958 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
63959 {
63960 - pLed->CurrLedState = LED_OFF;
63961 - pLed->BlinkingLedState = LED_OFF;
63962 + pLed->CurrLedState = RTW_LED_OFF;
63963 + pLed->BlinkingLedState = RTW_LED_OFF;
63964 if(pLed->bLedOn)
63965 SwLedOff(padapter, pLed);
63966 }
63967 else
63968 {
63969 - pLed->CurrLedState = LED_ON;
63970 - pLed->BlinkingLedState = LED_ON;
63971 + pLed->CurrLedState = RTW_LED_ON;
63972 + pLed->BlinkingLedState = RTW_LED_ON;
63973 if(!pLed->bLedOn)
63974 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
63975 }
63976 @@ -1228,9 +1235,9 @@ SwLedBlink5(
63977 else
63978 {
63979 if( pLed->bLedOn )
63980 - pLed->BlinkingLedState = LED_OFF;
63981 + pLed->BlinkingLedState = RTW_LED_OFF;
63982 else
63983 - pLed->BlinkingLedState = LED_ON;
63984 + pLed->BlinkingLedState = RTW_LED_ON;
63985 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
63986 }
63987 }
63988 @@ -1255,7 +1262,7 @@ SwLedBlink6(
63989 u8 bStopBlinking = _FALSE;
63990
63991 // Change LED according to BlinkingLedState specified.
63992 - if( pLed->BlinkingLedState == LED_ON )
63993 + if( pLed->BlinkingLedState == RTW_LED_ON )
63994 {
63995 SwLedOn(padapter, pLed);
63996 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
63997 @@ -1397,9 +1404,9 @@ SwLedControlMode0(
63998 pLed->BlinkTimes = 2;
63999
64000 if( pLed->bLedOn )
64001 - pLed->BlinkingLedState = LED_OFF;
64002 + pLed->BlinkingLedState = RTW_LED_OFF;
64003 else
64004 - pLed->BlinkingLedState = LED_ON;
64005 + pLed->BlinkingLedState = RTW_LED_ON;
64006 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
64007 }
64008 break;
64009 @@ -1413,9 +1420,9 @@ SwLedControlMode0(
64010 pLed->BlinkTimes = 24;
64011
64012 if( pLed->bLedOn )
64013 - pLed->BlinkingLedState = LED_OFF;
64014 + pLed->BlinkingLedState = RTW_LED_OFF;
64015 else
64016 - pLed->BlinkingLedState = LED_ON;
64017 + pLed->BlinkingLedState = RTW_LED_ON;
64018 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
64019 }
64020 else
64021 @@ -1425,7 +1432,7 @@ SwLedControlMode0(
64022 break;
64023
64024 case LED_CTL_LINK:
64025 - pLed->CurrLedState = LED_ON;
64026 + pLed->CurrLedState = RTW_LED_ON;
64027 if( pLed->bLedBlinkInProgress == _FALSE )
64028 {
64029 SwLedOn(padapter, pLed);
64030 @@ -1433,7 +1440,7 @@ SwLedControlMode0(
64031 break;
64032
64033 case LED_CTL_NO_LINK:
64034 - pLed->CurrLedState = LED_OFF;
64035 + pLed->CurrLedState = RTW_LED_OFF;
64036 if( pLed->bLedBlinkInProgress == _FALSE )
64037 {
64038 SwLedOff(padapter, pLed);
64039 @@ -1441,7 +1448,7 @@ SwLedControlMode0(
64040 break;
64041
64042 case LED_CTL_POWER_OFF:
64043 - pLed->CurrLedState = LED_OFF;
64044 + pLed->CurrLedState = RTW_LED_OFF;
64045 if(pLed->bLedBlinkInProgress)
64046 {
64047 _cancel_timer_ex(&(pLed->BlinkTimer));
64048 @@ -1451,7 +1458,7 @@ SwLedControlMode0(
64049 break;
64050
64051 case LED_CTL_START_WPS:
64052 - if( pLed->bLedBlinkInProgress == _FALSE || pLed->CurrLedState == LED_ON)
64053 + if( pLed->bLedBlinkInProgress == _FALSE || pLed->CurrLedState == RTW_LED_ON)
64054 {
64055 pLed->bLedBlinkInProgress = _TRUE;
64056
64057 @@ -1460,12 +1467,12 @@ SwLedControlMode0(
64058
64059 if( pLed->bLedOn )
64060 {
64061 - pLed->BlinkingLedState = LED_OFF;
64062 + pLed->BlinkingLedState = RTW_LED_OFF;
64063 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
64064 }
64065 else
64066 {
64067 - pLed->BlinkingLedState = LED_ON;
64068 + pLed->BlinkingLedState = RTW_LED_ON;
64069 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
64070 }
64071 }
64072 @@ -1474,7 +1481,7 @@ SwLedControlMode0(
64073 case LED_CTL_STOP_WPS:
64074 if(pLed->bLedBlinkInProgress)
64075 {
64076 - pLed->CurrLedState = LED_OFF;
64077 + pLed->CurrLedState = RTW_LED_OFF;
64078 _cancel_timer_ex(&(pLed->BlinkTimer));
64079 pLed->bLedBlinkInProgress = _FALSE;
64080 }
64081 @@ -1529,9 +1536,9 @@ SwLedControlMode1(
64082 pLed->bLedNoLinkBlinkInProgress = _TRUE;
64083 pLed->CurrLedState = LED_BLINK_SLOWLY;
64084 if( pLed->bLedOn )
64085 - pLed->BlinkingLedState = LED_OFF;
64086 + pLed->BlinkingLedState = RTW_LED_OFF;
64087 else
64088 - pLed->BlinkingLedState = LED_ON;
64089 + pLed->BlinkingLedState = RTW_LED_ON;
64090 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64091 }
64092 break;
64093 @@ -1556,9 +1563,9 @@ SwLedControlMode1(
64094 pLed->bLedLinkBlinkInProgress = _TRUE;
64095 pLed->CurrLedState = LED_BLINK_NORMAL;
64096 if( pLed->bLedOn )
64097 - pLed->BlinkingLedState = LED_OFF;
64098 + pLed->BlinkingLedState = RTW_LED_OFF;
64099 else
64100 - pLed->BlinkingLedState = LED_ON;
64101 + pLed->BlinkingLedState = RTW_LED_ON;
64102 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
64103 }
64104 break;
64105 @@ -1590,9 +1597,9 @@ SwLedControlMode1(
64106 pLed->CurrLedState = LED_SCAN_BLINK;
64107 pLed->BlinkTimes = 24;
64108 if( pLed->bLedOn )
64109 - pLed->BlinkingLedState = LED_OFF;
64110 + pLed->BlinkingLedState = RTW_LED_OFF;
64111 else
64112 - pLed->BlinkingLedState = LED_ON;
64113 + pLed->BlinkingLedState = RTW_LED_ON;
64114 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64115 }
64116 break;
64117 @@ -1619,9 +1626,9 @@ SwLedControlMode1(
64118 pLed->CurrLedState = LED_TXRX_BLINK;
64119 pLed->BlinkTimes = 2;
64120 if( pLed->bLedOn )
64121 - pLed->BlinkingLedState = LED_OFF;
64122 + pLed->BlinkingLedState = RTW_LED_OFF;
64123 else
64124 - pLed->BlinkingLedState = LED_ON;
64125 + pLed->BlinkingLedState = RTW_LED_ON;
64126 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64127 }
64128 break;
64129 @@ -1653,9 +1660,9 @@ SwLedControlMode1(
64130 pLed->bLedWPSBlinkInProgress = _TRUE;
64131 pLed->CurrLedState = LED_BLINK_WPS;
64132 if( pLed->bLedOn )
64133 - pLed->BlinkingLedState = LED_OFF;
64134 + pLed->BlinkingLedState = RTW_LED_OFF;
64135 else
64136 - pLed->BlinkingLedState = LED_ON;
64137 + pLed->BlinkingLedState = RTW_LED_ON;
64138 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64139 }
64140 break;
64141 @@ -1694,12 +1701,12 @@ SwLedControlMode1(
64142 pLed->CurrLedState = LED_BLINK_WPS_STOP;
64143 if(pLed->bLedOn)
64144 {
64145 - pLed->BlinkingLedState = LED_OFF;
64146 + pLed->BlinkingLedState = RTW_LED_OFF;
64147 _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
64148 }
64149 else
64150 {
64151 - pLed->BlinkingLedState = LED_ON;
64152 + pLed->BlinkingLedState = RTW_LED_ON;
64153 _set_timer(&(pLed->BlinkTimer), 0);
64154 }
64155 break;
64156 @@ -1714,15 +1721,15 @@ SwLedControlMode1(
64157 pLed->bLedNoLinkBlinkInProgress = _TRUE;
64158 pLed->CurrLedState = LED_BLINK_SLOWLY;
64159 if( pLed->bLedOn )
64160 - pLed->BlinkingLedState = LED_OFF;
64161 + pLed->BlinkingLedState = RTW_LED_OFF;
64162 else
64163 - pLed->BlinkingLedState = LED_ON;
64164 + pLed->BlinkingLedState = RTW_LED_ON;
64165 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64166 break;
64167
64168 case LED_CTL_POWER_OFF:
64169 - pLed->CurrLedState = LED_OFF;
64170 - pLed->BlinkingLedState = LED_OFF;
64171 + pLed->CurrLedState = RTW_LED_OFF;
64172 + pLed->BlinkingLedState = RTW_LED_OFF;
64173 if( pLed->bLedNoLinkBlinkInProgress)
64174 {
64175 _cancel_timer_ex(&(pLed->BlinkTimer));
64176 @@ -1790,9 +1797,9 @@ SwLedControlMode2(
64177 pLed->CurrLedState = LED_SCAN_BLINK;
64178 pLed->BlinkTimes = 24;
64179 if( pLed->bLedOn )
64180 - pLed->BlinkingLedState = LED_OFF;
64181 + pLed->BlinkingLedState = RTW_LED_OFF;
64182 else
64183 - pLed->BlinkingLedState = LED_ON;
64184 + pLed->BlinkingLedState = RTW_LED_ON;
64185 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64186 }
64187 break;
64188 @@ -1810,16 +1817,16 @@ SwLedControlMode2(
64189 pLed->CurrLedState = LED_TXRX_BLINK;
64190 pLed->BlinkTimes = 2;
64191 if( pLed->bLedOn )
64192 - pLed->BlinkingLedState = LED_OFF;
64193 + pLed->BlinkingLedState = RTW_LED_OFF;
64194 else
64195 - pLed->BlinkingLedState = LED_ON;
64196 + pLed->BlinkingLedState = RTW_LED_ON;
64197 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64198 }
64199 break;
64200
64201 case LED_CTL_LINK:
64202 - pLed->CurrLedState = LED_ON;
64203 - pLed->BlinkingLedState = LED_ON;
64204 + pLed->CurrLedState = RTW_LED_ON;
64205 + pLed->BlinkingLedState = RTW_LED_ON;
64206 if( pLed->bLedBlinkInProgress)
64207 {
64208 _cancel_timer_ex(&(pLed->BlinkTimer));
64209 @@ -1849,8 +1856,8 @@ SwLedControlMode2(
64210 pLed->bLedScanBlinkInProgress = _FALSE;
64211 }
64212 pLed->bLedWPSBlinkInProgress = _TRUE;
64213 - pLed->CurrLedState = LED_ON;
64214 - pLed->BlinkingLedState = LED_ON;
64215 + pLed->CurrLedState = RTW_LED_ON;
64216 + pLed->BlinkingLedState = RTW_LED_ON;
64217 _set_timer(&(pLed->BlinkTimer), 0);
64218 }
64219 break;
64220 @@ -1863,8 +1870,8 @@ SwLedControlMode2(
64221 }
64222 else
64223 {
64224 - pLed->CurrLedState = LED_ON;
64225 - pLed->BlinkingLedState = LED_ON;
64226 + pLed->CurrLedState = RTW_LED_ON;
64227 + pLed->BlinkingLedState = RTW_LED_ON;
64228 _set_timer(&(pLed->BlinkTimer), 0);
64229 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
64230 }
64231 @@ -1878,8 +1885,8 @@ SwLedControlMode2(
64232 }
64233 else
64234 {
64235 - pLed->CurrLedState = LED_OFF;
64236 - pLed->BlinkingLedState = LED_OFF;
64237 + pLed->CurrLedState = RTW_LED_OFF;
64238 + pLed->BlinkingLedState = RTW_LED_OFF;
64239 _set_timer(&(pLed->BlinkTimer), 0);
64240 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
64241 }
64242 @@ -1889,15 +1896,15 @@ SwLedControlMode2(
64243 case LED_CTL_NO_LINK:
64244 if(!IS_LED_BLINKING(pLed))
64245 {
64246 - pLed->CurrLedState = LED_OFF;
64247 - pLed->BlinkingLedState = LED_OFF;
64248 + pLed->CurrLedState = RTW_LED_OFF;
64249 + pLed->BlinkingLedState = RTW_LED_OFF;
64250 _set_timer(&(pLed->BlinkTimer), 0);
64251 }
64252 break;
64253
64254 case LED_CTL_POWER_OFF:
64255 - pLed->CurrLedState = LED_OFF;
64256 - pLed->BlinkingLedState = LED_OFF;
64257 + pLed->CurrLedState = RTW_LED_OFF;
64258 + pLed->BlinkingLedState = RTW_LED_OFF;
64259 if( pLed->bLedBlinkInProgress)
64260 {
64261 _cancel_timer_ex(&(pLed->BlinkTimer));
64262 @@ -1955,9 +1962,9 @@ SwLedControlMode2(
64263 pLed->CurrLedState = LED_SCAN_BLINK;
64264 pLed->BlinkTimes = 24;
64265 if( pLed->bLedOn )
64266 - pLed->BlinkingLedState = LED_OFF;
64267 + pLed->BlinkingLedState = RTW_LED_OFF;
64268 else
64269 - pLed->BlinkingLedState = LED_ON;
64270 + pLed->BlinkingLedState = RTW_LED_ON;
64271 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64272 }
64273 break;
64274 @@ -1975,9 +1982,9 @@ SwLedControlMode2(
64275 pLed->CurrLedState = LED_TXRX_BLINK;
64276 pLed->BlinkTimes = 2;
64277 if( pLed->bLedOn )
64278 - pLed->BlinkingLedState = LED_OFF;
64279 + pLed->BlinkingLedState = RTW_LED_OFF;
64280 else
64281 - pLed->BlinkingLedState = LED_ON;
64282 + pLed->BlinkingLedState = RTW_LED_ON;
64283 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64284 }
64285 break;
64286 @@ -1986,8 +1993,8 @@ SwLedControlMode2(
64287 if(IS_LED_WPS_BLINKING(pLed))
64288 return;
64289
64290 - pLed->CurrLedState = LED_ON;
64291 - pLed->BlinkingLedState = LED_ON;
64292 + pLed->CurrLedState = RTW_LED_ON;
64293 + pLed->BlinkingLedState = RTW_LED_ON;
64294 if( pLed->bLedBlinkInProgress)
64295 {
64296 _cancel_timer_ex(&(pLed->BlinkTimer));
64297 @@ -2019,9 +2026,9 @@ SwLedControlMode2(
64298 pLed->bLedWPSBlinkInProgress = _TRUE;
64299 pLed->CurrLedState = LED_BLINK_WPS;
64300 if( pLed->bLedOn )
64301 - pLed->BlinkingLedState = LED_OFF;
64302 + pLed->BlinkingLedState = RTW_LED_OFF;
64303 else
64304 - pLed->BlinkingLedState = LED_ON;
64305 + pLed->BlinkingLedState = RTW_LED_ON;
64306 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64307 }
64308 break;
64309 @@ -2040,12 +2047,12 @@ SwLedControlMode2(
64310 pLed->CurrLedState = LED_BLINK_WPS_STOP;
64311 if(pLed->bLedOn)
64312 {
64313 - pLed->BlinkingLedState = LED_OFF;
64314 + pLed->BlinkingLedState = RTW_LED_OFF;
64315 _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
64316 }
64317 else
64318 {
64319 - pLed->BlinkingLedState = LED_ON;
64320 + pLed->BlinkingLedState = RTW_LED_ON;
64321 _set_timer(&(pLed->BlinkTimer), 0);
64322 }
64323
64324 @@ -2058,8 +2065,8 @@ SwLedControlMode2(
64325 pLed->bLedWPSBlinkInProgress = _FALSE;
64326 }
64327
64328 - pLed->CurrLedState = LED_OFF;
64329 - pLed->BlinkingLedState = LED_OFF;
64330 + pLed->CurrLedState = RTW_LED_OFF;
64331 + pLed->BlinkingLedState = RTW_LED_OFF;
64332 _set_timer(&(pLed->BlinkTimer), 0);
64333 break;
64334
64335 @@ -2067,15 +2074,15 @@ SwLedControlMode2(
64336 case LED_CTL_NO_LINK:
64337 if(!IS_LED_BLINKING(pLed))
64338 {
64339 - pLed->CurrLedState = LED_OFF;
64340 - pLed->BlinkingLedState = LED_OFF;
64341 + pLed->CurrLedState = RTW_LED_OFF;
64342 + pLed->BlinkingLedState = RTW_LED_OFF;
64343 _set_timer(&(pLed->BlinkTimer), 0);
64344 }
64345 break;
64346
64347 case LED_CTL_POWER_OFF:
64348 - pLed->CurrLedState = LED_OFF;
64349 - pLed->BlinkingLedState = LED_OFF;
64350 + pLed->CurrLedState = RTW_LED_OFF;
64351 + pLed->BlinkingLedState = RTW_LED_OFF;
64352 if( pLed->bLedBlinkInProgress)
64353 {
64354 _cancel_timer_ex(&(pLed->BlinkTimer));
64355 @@ -2124,8 +2131,8 @@ SwLedControlMode4(
64356 pLed1->bLedWPSBlinkInProgress = _FALSE;
64357 _cancel_timer_ex(&(pLed1->BlinkTimer));
64358
64359 - pLed1->BlinkingLedState = LED_OFF;
64360 - pLed1->CurrLedState = LED_OFF;
64361 + pLed1->BlinkingLedState = RTW_LED_OFF;
64362 + pLed1->CurrLedState = RTW_LED_OFF;
64363
64364 if(pLed1->bLedOn)
64365 _set_timer(&(pLed->BlinkTimer), 0);
64366 @@ -2152,12 +2159,12 @@ SwLedControlMode4(
64367 pLed->CurrLedState = LED_BLINK_StartToBlink;
64368 if( pLed->bLedOn )
64369 {
64370 - pLed->BlinkingLedState = LED_OFF;
64371 + pLed->BlinkingLedState = RTW_LED_OFF;
64372 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
64373 }
64374 else
64375 {
64376 - pLed->BlinkingLedState = LED_ON;
64377 + pLed->BlinkingLedState = RTW_LED_ON;
64378 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
64379 }
64380 }
64381 @@ -2173,8 +2180,8 @@ SwLedControlMode4(
64382 pLed1->bLedWPSBlinkInProgress = _FALSE;
64383 _cancel_timer_ex(&(pLed1->BlinkTimer));
64384
64385 - pLed1->BlinkingLedState = LED_OFF;
64386 - pLed1->CurrLedState = LED_OFF;
64387 + pLed1->BlinkingLedState = RTW_LED_OFF;
64388 + pLed1->CurrLedState = RTW_LED_OFF;
64389
64390 if(pLed1->bLedOn)
64391 _set_timer(&(pLed->BlinkTimer), 0);
64392 @@ -2196,9 +2203,9 @@ SwLedControlMode4(
64393 pLed->bLedNoLinkBlinkInProgress = _TRUE;
64394 pLed->CurrLedState = LED_BLINK_SLOWLY;
64395 if( pLed->bLedOn )
64396 - pLed->BlinkingLedState = LED_OFF;
64397 + pLed->BlinkingLedState = RTW_LED_OFF;
64398 else
64399 - pLed->BlinkingLedState = LED_ON;
64400 + pLed->BlinkingLedState = RTW_LED_ON;
64401 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64402 }
64403 break;
64404 @@ -2225,9 +2232,9 @@ SwLedControlMode4(
64405 pLed->CurrLedState = LED_SCAN_BLINK;
64406 pLed->BlinkTimes = 24;
64407 if( pLed->bLedOn )
64408 - pLed->BlinkingLedState = LED_OFF;
64409 + pLed->BlinkingLedState = RTW_LED_OFF;
64410 else
64411 - pLed->BlinkingLedState = LED_ON;
64412 + pLed->BlinkingLedState = RTW_LED_ON;
64413 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64414 }
64415 break;
64416 @@ -2249,9 +2256,9 @@ SwLedControlMode4(
64417 pLed->CurrLedState = LED_TXRX_BLINK;
64418 pLed->BlinkTimes = 2;
64419 if( pLed->bLedOn )
64420 - pLed->BlinkingLedState = LED_OFF;
64421 + pLed->BlinkingLedState = RTW_LED_OFF;
64422 else
64423 - pLed->BlinkingLedState = LED_ON;
64424 + pLed->BlinkingLedState = RTW_LED_ON;
64425 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64426 }
64427 break;
64428 @@ -2263,8 +2270,8 @@ SwLedControlMode4(
64429 pLed1->bLedWPSBlinkInProgress = _FALSE;
64430 _cancel_timer_ex(&(pLed1->BlinkTimer));
64431
64432 - pLed1->BlinkingLedState = LED_OFF;
64433 - pLed1->CurrLedState = LED_OFF;
64434 + pLed1->BlinkingLedState = RTW_LED_OFF;
64435 + pLed1->CurrLedState = RTW_LED_OFF;
64436
64437 if(pLed1->bLedOn)
64438 _set_timer(&(pLed->BlinkTimer), 0);
64439 @@ -2291,12 +2298,12 @@ SwLedControlMode4(
64440 pLed->CurrLedState = LED_BLINK_WPS;
64441 if( pLed->bLedOn )
64442 {
64443 - pLed->BlinkingLedState = LED_OFF;
64444 + pLed->BlinkingLedState = RTW_LED_OFF;
64445 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
64446 }
64447 else
64448 {
64449 - pLed->BlinkingLedState = LED_ON;
64450 + pLed->BlinkingLedState = RTW_LED_ON;
64451 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
64452 }
64453 }
64454 @@ -2312,9 +2319,9 @@ SwLedControlMode4(
64455 pLed->bLedNoLinkBlinkInProgress = _TRUE;
64456 pLed->CurrLedState = LED_BLINK_SLOWLY;
64457 if( pLed->bLedOn )
64458 - pLed->BlinkingLedState = LED_OFF;
64459 + pLed->BlinkingLedState = RTW_LED_OFF;
64460 else
64461 - pLed->BlinkingLedState = LED_ON;
64462 + pLed->BlinkingLedState = RTW_LED_ON;
64463 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64464
64465 break;
64466 @@ -2329,9 +2336,9 @@ SwLedControlMode4(
64467 pLed->bLedNoLinkBlinkInProgress = _TRUE;
64468 pLed->CurrLedState = LED_BLINK_SLOWLY;
64469 if( pLed->bLedOn )
64470 - pLed->BlinkingLedState = LED_OFF;
64471 + pLed->BlinkingLedState = RTW_LED_OFF;
64472 else
64473 - pLed->BlinkingLedState = LED_ON;
64474 + pLed->BlinkingLedState = RTW_LED_ON;
64475 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64476
64477 //LED1 settings
64478 @@ -2342,9 +2349,9 @@ SwLedControlMode4(
64479
64480 pLed1->CurrLedState = LED_BLINK_WPS_STOP;
64481 if( pLed1->bLedOn )
64482 - pLed1->BlinkingLedState = LED_OFF;
64483 + pLed1->BlinkingLedState = RTW_LED_OFF;
64484 else
64485 - pLed1->BlinkingLedState = LED_ON;
64486 + pLed1->BlinkingLedState = RTW_LED_ON;
64487 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
64488
64489 break;
64490 @@ -2359,9 +2366,9 @@ SwLedControlMode4(
64491 pLed->bLedNoLinkBlinkInProgress = _TRUE;
64492 pLed->CurrLedState = LED_BLINK_SLOWLY;
64493 if( pLed->bLedOn )
64494 - pLed->BlinkingLedState = LED_OFF;
64495 + pLed->BlinkingLedState = RTW_LED_OFF;
64496 else
64497 - pLed->BlinkingLedState = LED_ON;
64498 + pLed->BlinkingLedState = RTW_LED_ON;
64499 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
64500
64501 //LED1 settings
64502 @@ -2373,16 +2380,16 @@ SwLedControlMode4(
64503 pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;
64504 pLed1->BlinkTimes = 10;
64505 if( pLed1->bLedOn )
64506 - pLed1->BlinkingLedState = LED_OFF;
64507 + pLed1->BlinkingLedState = RTW_LED_OFF;
64508 else
64509 - pLed1->BlinkingLedState = LED_ON;
64510 + pLed1->BlinkingLedState = RTW_LED_ON;
64511 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
64512
64513 break;
64514
64515 case LED_CTL_POWER_OFF:
64516 - pLed->CurrLedState = LED_OFF;
64517 - pLed->BlinkingLedState = LED_OFF;
64518 + pLed->CurrLedState = RTW_LED_OFF;
64519 + pLed->BlinkingLedState = RTW_LED_OFF;
64520
64521 if( pLed->bLedNoLinkBlinkInProgress)
64522 {
64523 @@ -2456,8 +2463,8 @@ SwLedControlMode5(
64524 case LED_CTL_POWER_ON:
64525 case LED_CTL_NO_LINK:
64526 case LED_CTL_LINK: //solid blue
64527 - pLed->CurrLedState = LED_ON;
64528 - pLed->BlinkingLedState = LED_ON;
64529 + pLed->CurrLedState = RTW_LED_ON;
64530 + pLed->BlinkingLedState = RTW_LED_ON;
64531
64532 _set_timer(&(pLed->BlinkTimer), 0);
64533 break;
64534 @@ -2476,9 +2483,9 @@ SwLedControlMode5(
64535 pLed->CurrLedState = LED_SCAN_BLINK;
64536 pLed->BlinkTimes = 24;
64537 if( pLed->bLedOn )
64538 - pLed->BlinkingLedState = LED_OFF;
64539 + pLed->BlinkingLedState = RTW_LED_OFF;
64540 else
64541 - pLed->BlinkingLedState = LED_ON;
64542 + pLed->BlinkingLedState = RTW_LED_ON;
64543 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
64544 }
64545 break;
64546 @@ -2495,16 +2502,16 @@ SwLedControlMode5(
64547 pLed->CurrLedState = LED_TXRX_BLINK;
64548 pLed->BlinkTimes = 2;
64549 if( pLed->bLedOn )
64550 - pLed->BlinkingLedState = LED_OFF;
64551 + pLed->BlinkingLedState = RTW_LED_OFF;
64552 else
64553 - pLed->BlinkingLedState = LED_ON;
64554 + pLed->BlinkingLedState = RTW_LED_ON;
64555 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
64556 }
64557 break;
64558
64559 case LED_CTL_POWER_OFF:
64560 - pLed->CurrLedState = LED_OFF;
64561 - pLed->BlinkingLedState = LED_OFF;
64562 + pLed->CurrLedState = RTW_LED_OFF;
64563 + pLed->BlinkingLedState = RTW_LED_OFF;
64564
64565 if( pLed->bLedBlinkInProgress)
64566 {
64567 @@ -2540,8 +2547,8 @@ SwLedControlMode6(
64568 case LED_CTL_LINK:
64569 case LED_CTL_NO_LINK:
64570 _cancel_timer_ex(&(pLed0->BlinkTimer));
64571 - pLed0->CurrLedState = LED_ON;
64572 - pLed0->BlinkingLedState = LED_ON;
64573 + pLed0->CurrLedState = RTW_LED_ON;
64574 + pLed0->BlinkingLedState = RTW_LED_ON;
64575 _set_timer(&(pLed0->BlinkTimer), 0);
64576 break;
64577
64578 @@ -2553,7 +2560,7 @@ SwLedControlMode6(
64579 break;
64580 }
64581
64582 - RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("ledcontrol 6 Led %d\n", pLed->CurrLedState));
64583 + RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("ledcontrol 6 Led %d\n", pLed0->CurrLedState));
64584 }
64585
64586
64587 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c
64588 index 4285d60..1119cf8 100644
64589 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c
64590 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c
64591 @@ -16,8 +16,7 @@
64592 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
64593 *
64594 *
64595 -
64596 -******************************************************************************/
64597 + ******************************************************************************/
64598 #define _RTL8192CU_RECV_C_
64599 #include <drv_conf.h>
64600 #include <osdep_service.h>
64601 @@ -150,12 +149,7 @@ int rtl8192cu_init_recv_priv(_adapter *padapter)
64602
64603 for(i=0; i<NR_PREALLOC_RECV_SKB; i++)
64604 {
64605 -
64606 - #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
64607 - pskb = dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
64608 - #else
64609 - pskb = netdev_alloc_skb(padapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
64610 - #endif
64611 + pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
64612
64613 if(pskb)
64614 {
64615 @@ -216,7 +210,7 @@ void rtl8192cu_free_recv_priv (_adapter *padapter)
64616 DBG_8192C(KERN_WARNING "rx_skb_queue not empty\n");
64617 }
64618
64619 - skb_queue_purge(&precvpriv->rx_skb_queue);
64620 + rtw_skb_queue_purge(&precvpriv->rx_skb_queue);
64621
64622 #ifdef CONFIG_PREALLOC_RECV_SKB
64623
64624 @@ -224,7 +218,7 @@ void rtl8192cu_free_recv_priv (_adapter *padapter)
64625 DBG_8192C(KERN_WARNING "free_recv_skb_queue not empty, %d\n", skb_queue_len(&precvpriv->free_recv_skb_queue));
64626 }
64627
64628 - skb_queue_purge(&precvpriv->free_recv_skb_queue);
64629 + rtw_skb_queue_purge(&precvpriv->free_recv_skb_queue);
64630
64631 #endif
64632
64633 @@ -232,149 +226,4 @@ void rtl8192cu_free_recv_priv (_adapter *padapter)
64634
64635 }
64636
64637 -void rtl8192cu_update_recvframe_attrib_from_recvstat(union recv_frame *precvframe, struct recv_stat *prxstat)
64638 -{
64639 - u8 physt, qos, shift, icverr, htc, crcerr;
64640 - u16 drvinfo_sz=0;
64641 - struct phy_stat *pphy_info;
64642 - struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
64643 - _adapter *padapter = precvframe->u.hdr.adapter;
64644 - u8 bPacketMatchBSSID =_FALSE;
64645 - u8 bPacketToSelf = _FALSE;
64646 - u8 bPacketBeacon = _FALSE;
64647 -
64648 -
64649 - //Offset 0
64650 - drvinfo_sz = (le32_to_cpu(prxstat->rxdw0)&0x000f0000)>>16;
64651 - drvinfo_sz = drvinfo_sz<<3;
64652 -
64653 - pattrib->bdecrypted = ((le32_to_cpu(prxstat->rxdw0) & BIT(27)) >> 27)? 0:1;
64654 -
64655 - physt = ((le32_to_cpu(prxstat->rxdw0) & BIT(26)) >> 26)? 1:0;
64656 -
64657 - shift = (le32_to_cpu(prxstat->rxdw0)&0x03000000)>>24;
64658 -
64659 - qos = ((le32_to_cpu(prxstat->rxdw0) & BIT(23)) >> 23)? 1:0;
64660 -
64661 - icverr = ((le32_to_cpu(prxstat->rxdw0) & BIT(15)) >> 15)? 1:0;
64662 -
64663 - pattrib->crc_err = crcerr = ((le32_to_cpu(prxstat->rxdw0) & BIT(14)) >> 14 )? 1:0;
64664 -
64665 -
64666 - //Offset 4
64667 -
64668 - //Offset 8
64669 -
64670 - //Offset 12
64671 -#ifdef CONFIG_TCP_CSUM_OFFLOAD_RX
64672 - if ( le32_to_cpu(prxstat->rxdw3) & BIT(13)) {
64673 - pattrib->tcpchk_valid = 1; // valid
64674 - if ( le32_to_cpu(prxstat->rxdw3) & BIT(11) ) {
64675 - pattrib->tcp_chkrpt = 1; // correct
64676 - //DBG_8192C("tcp csum ok\n");
64677 - } else
64678 - pattrib->tcp_chkrpt = 0; // incorrect
64679 -
64680 - if ( le32_to_cpu(prxstat->rxdw3) & BIT(12) )
64681 - pattrib->ip_chkrpt = 1; // correct
64682 - else
64683 - pattrib->ip_chkrpt = 0; // incorrect
64684 -
64685 - } else {
64686 - pattrib->tcpchk_valid = 0; // invalid
64687 - }
64688 -
64689 -#endif
64690 -
64691 - pattrib->mcs_rate=(u8)((le32_to_cpu(prxstat->rxdw3))&0x3f);
64692 - pattrib->rxht=(u8)((le32_to_cpu(prxstat->rxdw3) >>6)&0x1);
64693 -
64694 - htc = (u8)((le32_to_cpu(prxstat->rxdw3) >>10)&0x1);
64695 -
64696 - //Offset 16
64697 - //Offset 20
64698 -
64699 -
64700 -#if 0 //dump rxdesc for debug
64701 - DBG_8192C("drvinfo_sz=%d\n", drvinfo_sz);
64702 - DBG_8192C("physt=%d\n", physt);
64703 - DBG_8192C("shift=%d\n", shift);
64704 - DBG_8192C("qos=%d\n", qos);
64705 - DBG_8192C("icverr=%d\n", icverr);
64706 - DBG_8192C("htc=%d\n", htc);
64707 - DBG_8192C("bdecrypted=%d\n", pattrib->bdecrypted);
64708 - DBG_8192C("mcs_rate=%d\n", pattrib->mcs_rate);
64709 - DBG_8192C("rxht=%d\n", pattrib->rxht);
64710 -#endif
64711 -
64712 - //phy_info
64713 - if(drvinfo_sz && physt)
64714 - {
64715 - bPacketMatchBSSID = ((!IsFrameTypeCtrl(precvframe->u.hdr.rx_data)) && !icverr && !crcerr &&
64716 - _rtw_memcmp(get_hdr_bssid(precvframe->u.hdr.rx_data), get_bssid(&padapter->mlmepriv), ETH_ALEN));
64717 -
64718 - bPacketToSelf = bPacketMatchBSSID && (_rtw_memcmp(get_da(precvframe->u.hdr.rx_data), myid(&padapter->eeprompriv), ETH_ALEN));
64719 -
64720 - bPacketBeacon = (GetFrameSubType(precvframe->u.hdr.rx_data) == WIFI_BEACON);
64721 -
64722 -
64723 - pphy_info = (struct phy_stat *)(prxstat+1);
64724 -
64725 - //DBG_8192C("pphy_info, of0=0x%08x\n", *pphy_info);
64726 - //DBG_8192C("pphy_info, of1=0x%08x\n", *(pphy_info+1));
64727 - //DBG_8192C("pphy_info, of2=0x%08x\n", *(pphy_info+2));
64728 - //DBG_8192C("pphy_info, of3=0x%08x\n", *(pphy_info+3));
64729 - //DBG_8192C("pphy_info, of4=0x%08x\n", *(pphy_info+4));
64730 - //DBG_8192C("pphy_info, of5=0x%08x\n", *(pphy_info+5));
64731 - //DBG_8192C("pphy_info, of6=0x%08x\n", *(pphy_info+6));
64732 - //DBG_8192C("pphy_info, of7=0x%08x\n", *(pphy_info+7));
64733 -
64734 - rtl8192c_query_rx_phy_status(precvframe, pphy_info);
64735 -
64736 - precvframe->u.hdr.psta = NULL;
64737 - if(bPacketMatchBSSID && check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE)
64738 - {
64739 - u8 *sa;
64740 - struct sta_info *psta=NULL;
64741 - struct sta_priv *pstapriv = &padapter->stapriv;
64742 -
64743 - sa = get_sa(precvframe->u.hdr.rx_data);
64744 -
64745 - psta = rtw_get_stainfo(pstapriv, sa);
64746 - if(psta)
64747 - {
64748 - precvframe->u.hdr.psta = psta;
64749 - rtl8192c_process_phy_info(padapter, precvframe);
64750 - }
64751 - }
64752 - else if( bPacketToSelf || (bPacketBeacon && bPacketMatchBSSID) )
64753 - {
64754 - if(check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)
64755 - {
64756 - u8 *sa;
64757 - struct sta_info *psta=NULL;
64758 - struct sta_priv *pstapriv = &padapter->stapriv;
64759 -
64760 - sa = get_sa(precvframe->u.hdr.rx_data);
64761 -
64762 - psta = rtw_get_stainfo(pstapriv, sa);
64763 - if(psta)
64764 - {
64765 - precvframe->u.hdr.psta = psta;
64766 - }
64767 - }
64768 -
64769 - rtl8192c_process_phy_info(padapter, precvframe);
64770 - }
64771 -
64772 -#if 0 //dump phy_status for debug
64773 -
64774 - DBG_8192C("signal_qual=%d\n", pattrib->signal_qual);
64775 - DBG_8192C("signal_strength=%d\n", pattrib->signal_strength);
64776 -#endif
64777 -
64778 - }
64779 -
64780 -
64781 -}
64782
64783 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c
64784 index c276b51..3a4137b 100644
64785 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c
64786 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c
64787 @@ -16,8 +16,7 @@
64788 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
64789 *
64790 *
64791 -
64792 -******************************************************************************/
64793 + ******************************************************************************/
64794 #define _RTL8192C_XMIT_C_
64795 #include <drv_conf.h>
64796 #include <osdep_service.h>
64797 @@ -95,7 +94,7 @@ u32 rtw_get_ff_hwaddr(struct xmit_frame *pxmitframe)
64798 int urb_zero_packet_chk(_adapter *padapter, int sz)
64799 {
64800 int blnSetTxDescOffset;
64801 - struct dvobj_priv *pdvobj = (struct dvobj_priv*)&padapter->dvobjpriv;
64802 + struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
64803
64804 if ( pdvobj->ishighspeed )
64805 {
64806 @@ -165,7 +164,7 @@ void fill_txdesc_sectype(struct pkt_attrib *pattrib, struct tx_desc *ptxdesc)
64807
64808 }
64809
64810 -void fill_txdesc_vcs(struct pkt_attrib *pattrib, u32 *pdw)
64811 +static void fill_txdesc_vcs(struct pkt_attrib *pattrib, u32 *pdw)
64812 {
64813 //DBG_8192C("cvs_mode=%d\n", pattrib->vcs_mode);
64814
64815 @@ -182,14 +181,27 @@ void fill_txdesc_vcs(struct pkt_attrib *pattrib, u32 *pdw)
64816 break;
64817 }
64818
64819 - if(pattrib->vcs_mode)
64820 - {
64821 - *pdw |= cpu_to_le32(BIT(13));//ENABLE HW RTS
64822 - }
64823 + if(pattrib->vcs_mode) {
64824 + *pdw |= cpu_to_le32(BIT(13));
64825
64826 + // Set RTS BW
64827 + if(pattrib->ht_en)
64828 + {
64829 + *pdw |= (pattrib->bwmode&HT_CHANNEL_WIDTH_40)? cpu_to_le32(BIT(27)):0;
64830 +
64831 + if(pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
64832 + *pdw |= cpu_to_le32((0x01<<28)&0x30000000);
64833 + else if(pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
64834 + *pdw |= cpu_to_le32((0x02<<28)&0x30000000);
64835 + else if(pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)
64836 + *pdw |= 0;
64837 + else
64838 + *pdw |= cpu_to_le32((0x03<<28)&0x30000000);
64839 + }
64840 + }
64841 }
64842
64843 -void fill_txdesc_phy(struct pkt_attrib *pattrib, u32 *pdw)
64844 +static void fill_txdesc_phy(struct pkt_attrib *pattrib, u32 *pdw)
64845 {
64846 //DBG_8192C("bwmode=%d, ch_off=%d\n", pattrib->bwmode, pattrib->ch_offset);
64847
64848 @@ -198,220 +210,17 @@ void fill_txdesc_phy(struct pkt_attrib *pattrib, u32 *pdw)
64849 *pdw |= (pattrib->bwmode&HT_CHANNEL_WIDTH_40)? cpu_to_le32(BIT(25)):0;
64850
64851 if(pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
64852 - *pdw |= cpu_to_le32((0x01<<20)&0x003f0000);
64853 + *pdw |= cpu_to_le32((0x01<<20)&0x00300000);
64854 else if(pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
64855 - *pdw |= cpu_to_le32((0x02<<20)&0x003f0000);
64856 + *pdw |= cpu_to_le32((0x02<<20)&0x00300000);
64857 else if(pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)
64858 *pdw |= 0;
64859 else
64860 - *pdw |= cpu_to_le32((0x03<<20)&0x003f0000);
64861 - }
64862 -}
64863 -
64864 -#ifdef CONFIG_USB_TX_AGGREGATION
64865 -static void _update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, int sz)
64866 -{
64867 - uint qsel;
64868 - _adapter *padapter = pxmitframe->padapter;
64869 - struct ht_priv *phtpriv = &padapter->mlmepriv.htpriv;
64870 - struct mlme_ext_info *pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
64871 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
64872 - struct dm_priv *pdmpriv = &pHalData->dmpriv;
64873 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
64874 - sint bmcst = IS_MCAST(pattrib->ra);
64875 - struct tx_desc *ptxdesc = (struct tx_desc*)pmem;
64876 -
64877 -
64878 - _rtw_memset(ptxdesc, 0, sizeof(struct tx_desc));
64879 -
64880 - //4 offset 0
64881 - ptxdesc->txdw0 |= cpu_to_le32(sz & 0x0000ffff);
64882 - ptxdesc->txdw0 |= cpu_to_le32(OWN | FSG | LSG);
64883 - ptxdesc->txdw0 |= cpu_to_le32(((TXDESC_SIZE + OFFSET_SZ) << OFFSET_SHT) & 0x00ff0000);//32 bytes for TX Desc
64884 -
64885 - if (bmcst) ptxdesc->txdw0 |= cpu_to_le32(BIT(24));
64886 -
64887 - RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
64888 - ("update_txdesc: offset0=0x%08x\n", ptxdesc->txdw0));
64889 -
64890 - //4 offset 4
64891 - // pkt_offset, unit:8 bytes padding
64892 - if (pxmitframe->pkt_offset > 0)
64893 - ptxdesc->txdw1 |= cpu_to_le32((pxmitframe->pkt_offset << 26) & 0x7c000000);
64894 -
64895 -#ifdef CONFIG_USB_TX_AGGREGATION
64896 - if (pxmitframe->agg_num > 1)
64897 - ptxdesc->txdw5 |= cpu_to_le32((pxmitframe->agg_num << 24) & 0xff000000);
64898 -#endif
64899 -
64900 - if (pxmitframe->frame_tag == DATA_FRAMETAG)
64901 - {
64902 - //4 offset 4
64903 - ptxdesc->txdw1 |= cpu_to_le32(pattrib->mac_id&0x1f);
64904 -
64905 - qsel = (uint)(pattrib->qsel & 0x0000001f);
64906 - ptxdesc->txdw1 |= cpu_to_le32((qsel << QSEL_SHT) & 0x00001f00);
64907 -
64908 - ptxdesc->txdw1 |= cpu_to_le32((pattrib->raid << 16) & 0x000f0000);
64909 -
64910 - fill_txdesc_sectype(pattrib, ptxdesc);
64911 -
64912 - if(pattrib->ampdu_en==_TRUE)
64913 - ptxdesc->txdw1 |= cpu_to_le32(BIT(5));//AGG EN
64914 - else
64915 - ptxdesc->txdw1 |= cpu_to_le32(BIT(6));//AGG BK
64916 -
64917 -
64918 - //4 offset 8
64919 -
64920 -
64921 - //4 offset 12
64922 - ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum << 16) & 0xffff0000);
64923 -
64924 -
64925 - //4 offset 16 , offset 20
64926 - if (pattrib->qos_en)
64927 - ptxdesc->txdw4 |= cpu_to_le32(BIT(6));//QoS
64928 -
64929 - if ((pattrib->ether_type != 0x888e) &&
64930 - (pattrib->ether_type != 0x0806) &&
64931 - (pattrib->dhcp_pkt != 1))
64932 - {
64933 - //Non EAP & ARP & DHCP type data packet
64934 -
64935 - fill_txdesc_vcs(pattrib, &ptxdesc->txdw4);
64936 - fill_txdesc_phy(pattrib, &ptxdesc->txdw4);
64937 -
64938 - ptxdesc->txdw4 |= cpu_to_le32(0x00000008);//RTS Rate=24M
64939 - ptxdesc->txdw5 |= cpu_to_le32(0x0001ff00);
64940 - //ptxdesc->txdw5 |= cpu_to_le32(0x0000000b);//DataRate - 54M
64941 -
64942 - #ifdef SUPPORT_64_STA
64943 - if(pattrib->mac_id>FW_CTRL_MACID ){
64944 - ptxdesc->txdw5 |= cpu_to_le32(pattrib->psta->init_rate);
64945 - ptxdesc->txdw4 |=cpu_to_le32(0x00000100); //USE RATE
64946 - ptxdesc->txdw3 |=cpu_to_le32(BIT(28)); //PKT_ID
64947 - //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);
64948 - }
64949 - else //use REG_INIDATA_RATE_SEL value
64950 - ptxdesc->txdw5 |= cpu_to_le32(pdmpriv->INIDATA_RATE[pattrib->mac_id]);
64951 - if(pattrib->mac_id==1){
64952 - //bcmc sta
64953 - ptxdesc->txdw5 |= cpu_to_le32(padapter->registrypriv.bcmc_rate);
64954 - ptxdesc->txdw4 |=cpu_to_le32(0x00000100); //USE RATE
64955 - }
64956 - #else //SUPPORT_64_STA
64957 -
64958 - //use REG_INIDATA_RATE_SEL value
64959 - ptxdesc->txdw5 |= cpu_to_le32(pdmpriv->INIDATA_RATE[pattrib->mac_id]);
64960 - #endif //SUPPORT_64_STA
64961 -
64962 - if (0)//for driver dbg
64963 - {
64964 - ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
64965 -
64966 - if (pattrib->ht_en)
64967 - ptxdesc->txdw5 |= cpu_to_le32(BIT(6));//SGI
64968 -
64969 - ptxdesc->txdw5 |= cpu_to_le32(0x00000013);//init rate - mcs7
64970 - }
64971 - }
64972 - else
64973 - {
64974 - // EAP data packet and ARP packet.
64975 - // Use the 1M data rate to send the EAP/ARP packet.
64976 - // This will maybe make the handshake smooth.
64977 -
64978 - ptxdesc->txdw1 |= cpu_to_le32(BIT(6));//AGG BK
64979 - ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
64980 - }
64981 -
64982 -
64983 - //4 offset 24
64984 -#ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
64985 - if (pattrib->hw_tcp_csum == 1) {
64986 - // ptxdesc->txdw6 = 0; // clear TCP_CHECKSUM and IP_CHECKSUM. It's zero already!!
64987 - u8 ip_hdr_offset = 32 + pattrib->hdrlen + pattrib->iv_len + 8;
64988 - ptxdesc->txdw7 = (1 << 31) | (ip_hdr_offset << 16);
64989 - DBG_8192C("ptxdesc->txdw7 = %08x\n", ptxdesc->txdw7);
64990 - }
64991 -#endif
64992 - }
64993 - else if(pxmitframe->frame_tag == MGNT_FRAMETAG)
64994 - {
64995 - //DBG_8192C("pxmitframe->frame_tag == MGNT_FRAMETAG\n");
64996 -
64997 - //4 offset 4
64998 - ptxdesc->txdw1 |= cpu_to_le32(pattrib->mac_id&0x1f);
64999 -
65000 - qsel = (uint)(pattrib->qsel&0x0000001f);
65001 - ptxdesc->txdw1 |= cpu_to_le32((qsel << QSEL_SHT) & 0x00001f00);
65002 -
65003 - ptxdesc->txdw1 |= cpu_to_le32((pattrib->raid<< 16) & 0x000f0000);
65004 -
65005 - //fill_txdesc_sectype(pattrib, ptxdesc);
65006 -
65007 -
65008 - //4 offset 8
65009 -
65010 -
65011 - //4 offset 12
65012 - ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum<<16)&0xffff0000);
65013 -
65014 -
65015 - //4 offset 16
65016 - ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
65017 -
65018 -
65019 - //4 offset 20
65020 - }
65021 - else if(pxmitframe->frame_tag == TXAGG_FRAMETAG)
65022 - {
65023 - DBG_8192C("pxmitframe->frame_tag == TXAGG_FRAMETAG\n");
65024 - }
65025 - else
65026 - {
65027 - DBG_8192C("pxmitframe->frame_tag = %d\n", pxmitframe->frame_tag);
65028 -
65029 - //4 offset 4
65030 - ptxdesc->txdw1 |= cpu_to_le32((4)&0x1f);//CAM_ID(MAC_ID)
65031 -
65032 - ptxdesc->txdw1 |= cpu_to_le32((6<< 16) & 0x000f0000);//raid
65033 -
65034 -
65035 - //4 offset 8
65036 -
65037 -
65038 - //4 offset 12
65039 - ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum << 16) & 0xffff0000);
65040 -
65041 -
65042 - //4 offset 16
65043 - ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
65044 -
65045 -
65046 - //4 offset 20
65047 - }
65048 -
65049 - // 2009.11.05. tynli_test. Suggested by SD4 Filen for FW LPS.
65050 - // (1) The sequence number of each non-Qos frame / broadcast / multicast /
65051 - // mgnt frame should be controled by Hw because Fw will also send null data
65052 - // which we cannot control when Fw LPS enable.
65053 - // --> default enable non-Qos data sequense number. 2010.06.23. by tynli.
65054 - // (2) Enable HW SEQ control for beacon packet, because we use Hw beacon.
65055 - // (3) Use HW Qos SEQ to control the seq num of Ext port non-Qos packets.
65056 - // 2010.06.23. Added by tynli.
65057 - if(!pattrib->qos_en)
65058 - {
65059 - ptxdesc->txdw4 |= cpu_to_le32(BIT(7)); // Hw set sequence number
65060 - ptxdesc->txdw3 |= cpu_to_le32((8 <<28)); //set bit3 to 1. Suugested by TimChen. 2009.12.29.
65061 + *pdw |= cpu_to_le32((0x03<<20)&0x00300000);
65062 }
65063 -
65064 - rtl8192cu_cal_txdesc_chksum(ptxdesc);
65065 }
65066 -#endif
65067
65068 -static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
65069 +static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz, u8 bagg_pkt)
65070 {
65071 int pull=0;
65072 uint qsel;
65073 @@ -422,17 +231,19 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
65074 struct dm_priv *pdmpriv = &pHalData->dmpriv;
65075 struct tx_desc *ptxdesc = (struct tx_desc *)pmem;
65076 struct ht_priv *phtpriv = &pmlmepriv->htpriv;
65077 - struct mlme_ext_info *pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
65078 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
65079 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
65080 sint bmcst = IS_MCAST(pattrib->ra);
65081 #ifdef CONFIG_P2P
65082 struct wifidirect_info* pwdinfo = &padapter->wdinfo;
65083 #endif //CONFIG_P2P
65084
65085 #ifndef CONFIG_USE_USB_BUFFER_ALLOC_TX
65086 - if(urb_zero_packet_chk(padapter, sz)==0)
65087 + if((_FALSE == bagg_pkt) && (urb_zero_packet_chk(padapter, sz)==0))
65088 {
65089 ptxdesc = (struct tx_desc *)(pmem+PACKET_OFFSET_SZ);
65090 pull = 1;
65091 + pxmitframe->pkt_offset --;
65092 }
65093 #endif // CONFIG_USE_USB_BUFFER_ALLOC_TX
65094
65095 @@ -452,14 +263,13 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
65096
65097 fill_txdesc_sectype(pattrib, ptxdesc);
65098
65099 -
65100 if(pattrib->ampdu_en==_TRUE)
65101 ptxdesc->txdw1 |= cpu_to_le32(BIT(5));//AGG EN
65102 else
65103 ptxdesc->txdw1 |= cpu_to_le32(BIT(6));//AGG BK
65104
65105 //offset 8
65106 -
65107 +
65108
65109 //offset 12
65110 ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum<<16)&0xffff0000);
65111 @@ -480,26 +290,9 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
65112 ptxdesc->txdw5 |= cpu_to_le32(0x0001ff00);//
65113 //ptxdesc->txdw5 |= cpu_to_le32(0x0000000b);//DataRate - 54M
65114
65115 -
65116 - #ifdef SUPPORT_64_STA
65117 - if(pattrib->mac_id>=FW_CTRL_MACID ){
65118 - ptxdesc->txdw5 |= cpu_to_le32(pattrib->psta->init_rate);
65119 - ptxdesc->txdw4 |=cpu_to_le32(0x00000100); //USE RATE
65120 - ptxdesc->txdw3 |=cpu_to_le32(BIT(28)); //PKT_ID
65121 - //printk("%s pattrib->mac_id=%d\n",__FUNCTION__,pattrib->mac_id);
65122 - //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);
65123 - }
65124 - else //use REG_INIDATA_RATE_SEL value
65125 - ptxdesc->txdw5 |= cpu_to_le32(pdmpriv->INIDATA_RATE[pattrib->mac_id]);
65126 - if(pattrib->mac_id==1){
65127 - //bcmc sta
65128 - ptxdesc->txdw5 |= cpu_to_le32(padapter->registrypriv.bcmc_rate);
65129 - ptxdesc->txdw4 |=cpu_to_le32(0x00000100); //USE RATE
65130 - }
65131 - #else //SUPPORT_64_STA
65132 //use REG_INIDATA_RATE_SEL value
65133 ptxdesc->txdw5 |= cpu_to_le32(pdmpriv->INIDATA_RATE[pattrib->mac_id]);
65134 - #endif //SUPPORT_64_STA
65135 +
65136 if(0)//for driver dbg
65137 {
65138 ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
65139 @@ -521,20 +314,13 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
65140
65141 ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
65142
65143 -#ifdef CONFIG_P2P
65144 - // Added by Albert 2011/03/22
65145 - // In the P2P mode, the driver should not support the b mode.
65146 - // So, the Tx packet shouldn't use the CCK rate
65147 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
65148 - {
65149 - ptxdesc->txdw5 |= cpu_to_le32( 0x04 ); // Use the 6M data rate.
65150 - }
65151 -#endif //CONFIG_P2P
65152 + if (pmlmeinfo->preamble_mode == PREAMBLE_SHORT)
65153 + ptxdesc->txdw4 |= cpu_to_le32(BIT(24));// DATA_SHORT
65154
65155 + ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate(pmlmeext->tx_rate));
65156 }
65157
65158 //offset 24
65159 -
65160 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
65161 if ( pattrib->hw_tcp_csum == 1 ) {
65162 // ptxdesc->txdw6 = 0; // clear TCP_CHECKSUM and IP_CHECKSUM. It's zero already!!
65163 @@ -559,6 +345,15 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
65164 //fill_txdesc_sectype(pattrib, ptxdesc);
65165
65166 //offset 8
65167 +#ifdef CONFIG_XMIT_ACK
65168 + //CCX-TXRPT ack for xmit mgmt frames.
65169 + if (pxmitframe->ack_report) {
65170 + ptxdesc->txdw2 |= cpu_to_le32(BIT(19));
65171 + #ifdef DBG_CCX
65172 + DBG_871X("%s set ccx\n", __func__);
65173 + #endif
65174 + }
65175 +#endif //CONFIG_XMIT_ACK
65176
65177 //offset 12
65178 ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum<<16)&0xffff0000);
65179 @@ -569,26 +364,34 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
65180 //offset 20
65181 ptxdesc->txdw5 |= cpu_to_le32(BIT(17));//retry limit enable
65182 if(pattrib->retry_ctrl == _TRUE)
65183 - ptxdesc->txdw5 |= cpu_to_le32(0x00180000);//retry limit = 6
65184 - else
65185 - ptxdesc->txdw5 |= cpu_to_le32(0x00300000);//retry limit = 12
65186 -
65187 -#ifdef CONFIG_P2P
65188 - // Added by Albert 2011/03/17
65189 - // In the P2P mode, the driver should not support the b mode.
65190 - // So, the Tx packet shouldn't use the CCK rate
65191 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
65192 {
65193 - ptxdesc->txdw5 |= cpu_to_le32( 0x04 ); // Use the 6M data rate.
65194 - }
65195 +#ifdef CONFIG_P2P
65196 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
65197 + {
65198 +#ifdef CONFIG_INTEL_WIDI
65199 + if(padapter->mlmepriv.widi_enable == _TRUE)
65200 + ptxdesc->txdw5 |= cpu_to_le32(0x00180000);//retry limit = 6
65201 + else
65202 +#endif //CONFIG_INTEL_WIDI
65203 + ptxdesc->txdw5 |= cpu_to_le32(0x00080000);//retry limit = 2
65204 + }
65205 + else
65206 #endif //CONFIG_P2P
65207 + ptxdesc->txdw5 |= cpu_to_le32(0x00180000);//retry limit = 6
65208 + }
65209 + else
65210 + ptxdesc->txdw5 |= cpu_to_le32(0x00300000);//retry limit = 12
65211
65212 #ifdef CONFIG_INTEL_PROXIM
65213 if((padapter->proximity.proxim_on==_TRUE)&&(pattrib->intel_proxim==_TRUE)){
65214 printk("\n %s pattrib->rate=%d\n",__FUNCTION__,pattrib->rate);
65215 ptxdesc->txdw5 |= cpu_to_le32( pattrib->rate);
65216 }
65217 + else
65218 #endif
65219 + {
65220 + ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate(pmlmeext->tx_rate));
65221 + }
65222 }
65223 else if((pxmitframe->frame_tag&0x0f) == TXAGG_FRAMETAG)
65224 {
65225 @@ -618,6 +421,7 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
65226 ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate
65227
65228 //offset 20
65229 + ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate(pmlmeext->tx_rate));
65230 }
65231
65232 // 2009.11.05. tynli_test. Suggested by SD4 Filen for FW LPS.
65233 @@ -647,7 +451,14 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
65234 RT_TRACE(_module_rtl871x_xmit_c_,_drv_info_,("offset0-txdesc=0x%x\n", ptxdesc->txdw0));
65235
65236 //offset 4
65237 - if(!pull) ptxdesc->txdw1 |= cpu_to_le32((0x01<<26)&0xff000000);//pkt_offset, unit:8 bytes padding
65238 + // pkt_offset, unit:8 bytes padding
65239 + if (pxmitframe->pkt_offset > 0)
65240 + ptxdesc->txdw1 |= cpu_to_le32((pxmitframe->pkt_offset << 26) & 0x7c000000);
65241 +
65242 +#ifdef CONFIG_USB_TX_AGGREGATION
65243 + if (pxmitframe->agg_num > 1)
65244 + ptxdesc->txdw5 |= cpu_to_le32((pxmitframe->agg_num << 24) & 0xff000000);
65245 +#endif
65246
65247 rtl8192cu_cal_txdesc_chksum(ptxdesc);
65248
65249 @@ -655,8 +466,10 @@ static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
65250
65251 }
65252
65253 -static void _rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe, u8 sync)
65254 +static s32 rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe)
65255 {
65256 + s32 ret = _SUCCESS;
65257 + s32 inner_ret = _SUCCESS;
65258 int t, sz, w_sz, pull=0;
65259 u8 *mem_addr;
65260 u32 ff_hwaddr;
65261 @@ -679,6 +492,9 @@ static void _rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe,
65262
65263 for (t = 0; t < pattrib->nr_frags; t++)
65264 {
65265 + if (inner_ret != _SUCCESS && ret == _SUCCESS)
65266 + ret = _FAIL;
65267 +
65268 if (t != (pattrib->nr_frags - 1))
65269 {
65270 RT_TRACE(_module_rtl871x_xmit_c_,_drv_err_,("pattrib->nr_frags=%d\n", pattrib->nr_frags));
65271 @@ -691,7 +507,7 @@ static void _rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe,
65272 sz = pattrib->last_txcmdsz;
65273 }
65274
65275 - pull = update_txdesc(pxmitframe, mem_addr, sz);
65276 + pull = update_txdesc(pxmitframe, mem_addr, sz, _FALSE);
65277
65278 if(pull)
65279 {
65280 @@ -709,10 +525,7 @@ static void _rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe,
65281
65282 ff_hwaddr = rtw_get_ff_hwaddr(pxmitframe);
65283
65284 - if(sync == _TRUE)
65285 - rtw_write_port_sync(padapter, ff_hwaddr, w_sz, (unsigned char*)pxmitbuf);
65286 - else
65287 - rtw_write_port(padapter, ff_hwaddr, w_sz, (unsigned char*)pxmitbuf);
65288 + inner_ret = rtw_write_port(padapter, ff_hwaddr, w_sz, (unsigned char*)pxmitbuf);
65289
65290 rtw_count_tx_stats(padapter, pxmitframe, sz);
65291
65292 @@ -726,18 +539,12 @@ static void _rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe,
65293
65294 }
65295
65296 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
65297 -
65298 -}
65299 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
65300
65301 -inline void rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe)
65302 -{
65303 - _rtw_dump_xframe(padapter, pxmitframe, _FALSE);
65304 -}
65305 + if (ret != _SUCCESS)
65306 + rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_UNKNOWN);
65307
65308 -inline void rtw_dump_xframe_sync(_adapter *padapter, struct xmit_frame *pxmitframe)
65309 -{
65310 - _rtw_dump_xframe(padapter, pxmitframe, _TRUE);
65311 + return ret;
65312 }
65313
65314 #ifdef CONFIG_USB_TX_AGGREGATION
65315 @@ -767,7 +574,7 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65316 struct xmit_frame *pfirstframe = NULL;
65317
65318 // aggregate variable
65319 -// struct hw_xmit *phwxmit;
65320 + struct hw_xmit *phwxmit;
65321 struct sta_info *psta = NULL;
65322 struct tx_servq *ptxservq = NULL;
65323
65324 @@ -801,7 +608,7 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65325
65326 //3 1. pick up first frame
65327 do {
65328 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
65329 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
65330
65331 pxmitframe = rtw_dequeue_xframe(pxmitpriv, pxmitpriv->hwxmits, pxmitpriv->hwxmit_entry);
65332 if (pxmitframe == NULL) {
65333 @@ -816,7 +623,7 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65334 RT_TRACE(_module_rtl8192c_xmit_c_, _drv_err_,
65335 ("xmitframe_complete: frame tag(%d) is not DATA_FRAMETAG(%d)!\n",
65336 pxmitframe->frame_tag, DATA_FRAMETAG));
65337 -// rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
65338 +// rtw_free_xmitframe(pxmitpriv, pxmitframe);
65339 continue;
65340 }
65341
65342 @@ -826,7 +633,7 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65343 RT_TRACE(_module_rtl8192c_xmit_c_, _drv_err_,
65344 ("xmitframe_complete: TID(%d) should be 0~15!\n",
65345 pxmitframe->attrib.priority));
65346 -// rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
65347 +// rtw_free_xmitframe(pxmitpriv, pxmitframe);
65348 continue;
65349 }
65350 #endif
65351 @@ -838,15 +645,12 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65352 //pxmitframe->agg_num = 1; // alloc xmitframe should assign to 1.
65353 pxmitframe->pkt_offset = 1; // first frame of aggregation, reserve offset
65354
65355 -#ifdef IDEA_CONDITION
65356 - rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
65357 -#else
65358 - res = rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
65359 - if (res == _FALSE) {
65360 -// rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
65361 +
65362 + if (rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe) == _FALSE) {
65363 + DBG_871X("%s coalesce 1st xmitframe failed \n",__FUNCTION__);
65364 continue;
65365 }
65366 -#endif
65367 +
65368
65369 // always return ndis_packet after rtw_xmitframe_coalesce
65370 rtw_os_xmit_complete(padapter, pxmitframe);
65371 @@ -876,26 +680,26 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65372 case 1:
65373 case 2:
65374 ptxservq = &(psta->sta_xmitpriv.bk_q);
65375 -// phwxmit = pxmitpriv->hwxmits + 3;
65376 + phwxmit = pxmitpriv->hwxmits + 3;
65377 break;
65378
65379 case 4:
65380 case 5:
65381 ptxservq = &(psta->sta_xmitpriv.vi_q);
65382 -// phwxmit = pxmitpriv->hwxmits + 1;
65383 + phwxmit = pxmitpriv->hwxmits + 1;
65384 break;
65385
65386 case 6:
65387 case 7:
65388 ptxservq = &(psta->sta_xmitpriv.vo_q);
65389 -// phwxmit = pxmitpriv->hwxmits;
65390 + phwxmit = pxmitpriv->hwxmits;
65391 break;
65392
65393 case 0:
65394 case 3:
65395 default:
65396 ptxservq = &(psta->sta_xmitpriv.be_q);
65397 -// phwxmit = pxmitpriv->hwxmits + 2;
65398 + phwxmit = pxmitpriv->hwxmits + 2;
65399 break;
65400 }
65401
65402 @@ -913,6 +717,7 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65403
65404 rtw_list_delete(&pxmitframe->list);
65405 ptxservq->qcnt--;
65406 + phwxmit->accnt--;
65407
65408 #ifndef IDEA_CONDITION
65409 // suppose only data frames would be in queue
65410 @@ -920,7 +725,7 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65411 RT_TRACE(_module_rtl8192c_xmit_c_, _drv_err_,
65412 ("xmitframe_complete: frame tag(%d) is not DATA_FRAMETAG(%d)!\n",
65413 pxmitframe->frame_tag, DATA_FRAMETAG));
65414 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
65415 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
65416 continue;
65417 }
65418
65419 @@ -930,7 +735,7 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65420 RT_TRACE(_module_rtl8192c_xmit_c_, _drv_err_,
65421 ("xmitframe_complete: TID(%d) should be 0~15!\n",
65422 pxmitframe->attrib.priority));
65423 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
65424 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
65425 continue;
65426 }
65427 #endif
65428 @@ -941,24 +746,20 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65429 pxmitframe->agg_num = 0; // not first frame of aggregation
65430 pxmitframe->pkt_offset = 0; // not first frame of aggregation, no need to reserve offset
65431
65432 -#ifdef IDEA_CONDITION
65433 - rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
65434 -#else
65435 - res = rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
65436 - if (res == _FALSE) {
65437 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
65438 + if (rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe) == _FALSE) {
65439 + DBG_871X("%s coalesce failed \n",__FUNCTION__);
65440 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
65441 continue;
65442 }
65443 -#endif
65444
65445 // always return ndis_packet after rtw_xmitframe_coalesce
65446 rtw_os_xmit_complete(padapter, pxmitframe);
65447
65448 // (len - TXDESC_SIZE) == pxmitframe->attrib.last_txcmdsz
65449 - _update_txdesc(pxmitframe, pxmitframe->buf_addr, pxmitframe->attrib.last_txcmdsz);
65450 + update_txdesc(pxmitframe, pxmitframe->buf_addr, pxmitframe->attrib.last_txcmdsz, _TRUE);
65451
65452 // don't need xmitframe any more
65453 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
65454 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
65455
65456 // handle pointer and stop condition
65457 pbuf_tail = pbuf + len;
65458 @@ -998,7 +799,7 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65459 pfirstframe->pkt_offset = 0;
65460 }
65461 #endif // CONFIG_USE_USB_BUFFER_ALLOC_TX
65462 - _update_txdesc(pfirstframe, pfirstframe->buf_addr, pfirstframe->attrib.last_txcmdsz);
65463 + update_txdesc(pfirstframe, pfirstframe->buf_addr, pfirstframe->attrib.last_txcmdsz, _TRUE);
65464
65465 //3 4. write xmit buffer to USB FIFO
65466 ff_hwaddr = rtw_get_ff_hwaddr(pfirstframe);
65467 @@ -1013,7 +814,7 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65468
65469 rtw_count_tx_stats(padapter, pfirstframe, pbuf_tail);
65470
65471 - rtw_free_xmitframe_ex(pxmitpriv, pfirstframe);
65472 + rtw_free_xmitframe(pxmitpriv, pfirstframe);
65473
65474 return _TRUE;
65475 }
65476 @@ -1063,7 +864,7 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65477 }
65478
65479 rtw_os_xmit_complete(padapter, pxmitframe);//always return ndis_packet after rtw_xmitframe_coalesce
65480 - }
65481 + }
65482
65483
65484 RT_TRACE(_module_rtl871x_xmit_c_,_drv_info_,("xmitframe_complete(): rtw_dump_xframe\n"));
65485 @@ -1071,12 +872,12 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
65486
65487 if(res == _SUCCESS)
65488 {
65489 - rtw_dump_xframe(padapter, pxmitframe);
65490 + rtw_dump_xframe(padapter, pxmitframe);
65491 }
65492 else
65493 {
65494 rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
65495 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
65496 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
65497 }
65498
65499 xcnt++;
65500 @@ -1125,15 +926,22 @@ static s32 pre_xmitframe(_adapter *padapter, struct xmit_frame *pxmitframe)
65501 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
65502 struct pkt_attrib *pattrib = &pxmitframe->attrib;
65503 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
65504 -
65505 +
65506 +
65507 _enter_critical_bh(&pxmitpriv->lock, &irqL);
65508
65509 +
65510 if (rtw_txframes_sta_ac_pending(padapter, pattrib) > 0)
65511 goto enqueue;
65512
65513 - if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE)
65514 +
65515 + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
65516 goto enqueue;
65517
65518 +#ifdef CONFIG_CONCURRENT_MODE
65519 + if (check_buddy_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
65520 + goto enqueue;
65521 +#endif
65522
65523 pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv);
65524 if (pxmitbuf == NULL)
65525 @@ -1147,7 +955,7 @@ static s32 pre_xmitframe(_adapter *padapter, struct xmit_frame *pxmitframe)
65526
65527 if (xmitframe_direct(padapter, pxmitframe) != _SUCCESS) {
65528 rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
65529 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
65530 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
65531 }
65532
65533 return _TRUE;
65534 @@ -1158,7 +966,7 @@ enqueue:
65535
65536 if (res != _SUCCESS) {
65537 RT_TRACE(_module_xmit_osdep_c_, _drv_err_, ("pre_xmitframe: enqueue xmitframe fail\n"));
65538 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
65539 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
65540
65541 // Trick, make the statistics correct
65542 pxmitpriv->tx_pkts--;
65543 @@ -1169,9 +977,9 @@ enqueue:
65544 return _FALSE;
65545 }
65546
65547 -void rtl8192cu_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe)
65548 +s32 rtl8192cu_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe)
65549 {
65550 - rtw_dump_xframe(padapter, pmgntframe);
65551 + return rtw_dump_xframe(padapter, pmgntframe);
65552 }
65553
65554 /*
65555 @@ -1184,6 +992,30 @@ s32 rtl8192cu_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe)
65556 return pre_xmitframe(padapter, pxmitframe);
65557 }
65558
65559 +s32 rtl8192cu_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe)
65560 +{
65561 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
65562 + s32 err;
65563 +
65564 + if ((err=rtw_xmitframe_enqueue(padapter, pxmitframe)) != _SUCCESS)
65565 + {
65566 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
65567 +
65568 + // Trick, make the statistics correct
65569 + pxmitpriv->tx_pkts--;
65570 + pxmitpriv->tx_drop++;
65571 + }
65572 + else
65573 + {
65574 +#ifdef PLATFORM_LINUX
65575 + tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
65576 +#endif
65577 + }
65578 +
65579 + return err;
65580 +
65581 +}
65582 +
65583 #ifdef CONFIG_HOSTAPD_MLME
65584
65585 static void rtl8192cu_hostap_mgnt_xmit_cb(struct urb *urb)
65586 @@ -1193,7 +1025,7 @@ static void rtl8192cu_hostap_mgnt_xmit_cb(struct urb *urb)
65587
65588 //DBG_8192C("%s\n", __FUNCTION__);
65589
65590 - dev_kfree_skb_any(skb);
65591 + rtw_skb_free(skb);
65592 #endif
65593 }
65594
65595 @@ -1211,7 +1043,7 @@ s32 rtl8192cu_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt)
65596 struct hostapd_priv *phostapdpriv = padapter->phostapdpriv;
65597 struct net_device *pnetdev = padapter->pnetdev;
65598 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
65599 - struct dvobj_priv *pdvobj = &padapter->dvobjpriv;
65600 + struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
65601
65602
65603 //DBG_8192C("%s\n", __FUNCTION__);
65604 @@ -1226,11 +1058,7 @@ s32 rtl8192cu_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt)
65605 if ((fc & RTW_IEEE80211_FCTL_FTYPE) != RTW_IEEE80211_FTYPE_MGMT)
65606 goto _exit;
65607
65608 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
65609 - pxmit_skb = dev_alloc_skb(len + TXDESC_SIZE);
65610 -#else
65611 - pxmit_skb = netdev_alloc_skb(pnetdev, len + TXDESC_SIZE);
65612 -#endif
65613 + pxmit_skb = rtw_skb_alloc(len + TXDESC_SIZE);
65614
65615 if(!pxmit_skb)
65616 goto _exit;
65617 @@ -1311,7 +1139,7 @@ s32 rtl8192cu_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt)
65618
65619 _exit:
65620
65621 - dev_kfree_skb_any(skb);
65622 + rtw_skb_free(skb);
65623
65624 #endif
65625
65626 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c
65627 index 6cac2d5..ff89473 100644
65628 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c
65629 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c
65630 @@ -16,7 +16,7 @@
65631 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
65632 *
65633 *
65634 -******************************************************************************/
65635 + ******************************************************************************/
65636 #define _HCI_HAL_INIT_C_
65637
65638 #include <drv_conf.h>
65639 @@ -90,7 +90,6 @@ _OneOutEpMapping(
65640
65641 static VOID
65642 _TwoOutEpMapping(
65643 - IN BOOLEAN IsTestChip,
65644 IN HAL_DATA_TYPE *pHalData,
65645 IN BOOLEAN bWIFICfg
65646 )
65647 @@ -106,25 +105,7 @@ _TwoOutEpMapping(
65648 #define HIGH_QUEUE_INX 6
65649 #define TXCMD_QUEUE_INX 7
65650 */
65651 -
65652 - if(IsTestChip && bWIFICfg){ // test chip && wmm
65653 -
65654 -
65655 - // BK, BE, VI, VO, BCN, CMD,MGT,HIGH,HCCA
65656 - //{ 1, 0, 1, 0, 0, 0, 0, 0, 0 };
65657 - //0:H(end_number=0x02), 1:L (end_number=0x03)
65658 -
65659 - pHalData->Queue2EPNum[0] = pHalData->RtBulkOutPipe[0];//VO
65660 - pHalData->Queue2EPNum[1] = pHalData->RtBulkOutPipe[1];//VI
65661 - pHalData->Queue2EPNum[2] = pHalData->RtBulkOutPipe[0];//BE
65662 - pHalData->Queue2EPNum[3] = pHalData->RtBulkOutPipe[1];//BK
65663 -
65664 - pHalData->Queue2EPNum[4] = pHalData->RtBulkOutPipe[0];//BCN
65665 - pHalData->Queue2EPNum[5] = pHalData->RtBulkOutPipe[0];//MGT
65666 - pHalData->Queue2EPNum[6] = pHalData->RtBulkOutPipe[0];//HIGH
65667 - pHalData->Queue2EPNum[7] = pHalData->RtBulkOutPipe[0];//TXCMD
65668 - }
65669 - else if(!IsTestChip && bWIFICfg){ // Normal chip && wmm
65670 + if(bWIFICfg){ // Normal chip && wmm
65671
65672 // BK, BE, VI, VO, BCN, CMD,MGT,HIGH,HCCA
65673 //{ 0, 1, 0, 1, 0, 0, 0, 0, 0 };
65674 @@ -202,8 +183,7 @@ static VOID _ThreeOutEpMapping(
65675 static BOOLEAN
65676 _MappingOutEP(
65677 IN PADAPTER pAdapter,
65678 - IN u8 NumOutPipe,
65679 - IN BOOLEAN IsTestChip
65680 + IN u8 NumOutPipe
65681 )
65682 {
65683 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
65684 @@ -216,13 +196,9 @@ _MappingOutEP(
65685 switch(NumOutPipe)
65686 {
65687 case 2:
65688 - _TwoOutEpMapping(IsTestChip, pHalData, bWIFICfg);
65689 + _TwoOutEpMapping(pHalData, bWIFICfg);
65690 break;
65691 - case 3:
65692 - // Test chip doesn't support three out EPs.
65693 - if(IsTestChip){
65694 - return _FALSE;
65695 - }
65696 + case 3:
65697 _ThreeOutEpMapping(pHalData, bWIFICfg);
65698 break;
65699 case 1:
65700 @@ -238,53 +214,7 @@ _MappingOutEP(
65701 }
65702
65703 static VOID
65704 -_ConfigTestChipOutEP(
65705 - IN PADAPTER pAdapter,
65706 - IN u8 NumOutPipe
65707 - )
65708 -{
65709 - u8 value8,txqsele;
65710 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
65711 -
65712 - pHalData->OutEpQueueSel = 0;
65713 - pHalData->OutEpNumber = 0;
65714 -
65715 - value8 = rtw_read8(pAdapter, REG_TEST_SIE_OPTIONAL);
65716 - value8 = (value8 & USB_TEST_EP_MASK) >> USB_TEST_EP_SHIFT;
65717 -
65718 - switch(value8)
65719 - {
65720 - case 0: // 2 bulk OUT, 1 bulk IN
65721 - case 3:
65722 - pHalData->OutEpQueueSel = TX_SELE_HQ | TX_SELE_LQ;
65723 - pHalData->OutEpNumber = 2;
65724 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("EP Config: 2 bulk OUT, 1 bulk IN\n"));
65725 - break;
65726 - case 1: // 1 bulk IN/OUT => map all endpoint to Low queue
65727 - case 2: // 1 bulk IN, 1 bulk OUT => map all endpoint to High queue
65728 - txqsele = rtw_read8(pAdapter, REG_TEST_USB_TXQS);
65729 - if(txqsele & 0x0F){//map all endpoint to High queue
65730 - pHalData->OutEpQueueSel = TX_SELE_HQ;
65731 - }
65732 - else if(txqsele&0xF0){//map all endpoint to Low queue
65733 - pHalData->OutEpQueueSel = TX_SELE_LQ;
65734 - }
65735 - pHalData->OutEpNumber = 1;
65736 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("%s\n", ((1 == value8) ? "1 bulk IN/OUT" : "1 bulk IN, 1 bulk OUT")));
65737 - break;
65738 - default:
65739 - break;
65740 - }
65741 -
65742 - // TODO: Error recovery for this case
65743 - //RT_ASSERT((NumOutPipe == pHalData->OutEpNumber), ("Out EP number isn't match! %d(Descriptor) != %d (SIE reg)\n", (u4Byte)NumOutPipe, (u4Byte)pHalData->OutEpNumber));
65744 -
65745 -}
65746 -
65747 -
65748 -
65749 -static VOID
65750 -_ConfigNormalChipOutEP(
65751 +_ConfigChipOutEP(
65752 IN PADAPTER pAdapter,
65753 IN u8 NumOutPipe
65754 )
65755 @@ -302,7 +232,11 @@ _ConfigNormalChipOutEP(
65756 pHalData->OutEpQueueSel |= TX_SELE_HQ;
65757 pHalData->OutEpNumber++;
65758 }
65759 -
65760 +
65761 +#ifdef CONFIG_USB_ONE_OUT_EP
65762 + return;
65763 +#endif
65764 +
65765 if((value8 >> USB_NORMAL_SIE_EP_SHIFT) & USB_NORMAL_SIE_EP_MASK){
65766 pHalData->OutEpQueueSel |= TX_SELE_NQ;
65767 pHalData->OutEpNumber++;
65768 @@ -328,38 +262,18 @@ static BOOLEAN HalUsbSetQueuePipeMapping8192CUsb(
65769 {
65770 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
65771 BOOLEAN result = _FALSE;
65772 - BOOLEAN isNormalChip;
65773 -
65774 - //may be update UPHY Parameter == georgia
65775 -
65776
65777 - // ReadAdapterInfo8192C also call _ReadChipVersion too.
65778 - // Since we need dynamic config EP mapping, so we call this function to get chip version.
65779 - // We can remove _ReadChipVersion from ReadAdapterInfo8192C later.
65780 - //pHalData->VersionID = rtl8192c_ReadChipVersion(pAdapter);
65781 -
65782 - isNormalChip = IS_NORMAL_CHIP(pHalData->VersionID);
65783 -
65784 - if(isNormalChip){
65785 - _ConfigNormalChipOutEP(pAdapter, NumOutPipe);
65786 - }
65787 - else{
65788 - _ConfigTestChipOutEP(pAdapter, NumOutPipe);
65789 - }
65790 + _ConfigChipOutEP(pAdapter, NumOutPipe);
65791
65792 + #ifndef CONFIG_USB_ONE_OUT_EP
65793 // Normal chip with one IN and one OUT doesn't have interrupt IN EP.
65794 - if(isNormalChip && (1 == pHalData->OutEpNumber)){
65795 + if(1 == pHalData->OutEpNumber){
65796 if(1 != NumInPipe){
65797 return result;
65798 }
65799 }
65800 -
65801 - // All config other than above support one Bulk IN and one Interrupt IN.
65802 - //if(2 != NumInPipe){
65803 - // return result;
65804 - //}
65805 -
65806 - result = _MappingOutEP(pAdapter, NumOutPipe, !isNormalChip);
65807 + #endif
65808 + result = _MappingOutEP(pAdapter, NumOutPipe);
65809
65810 return result;
65811
65812 @@ -368,7 +282,7 @@ static BOOLEAN HalUsbSetQueuePipeMapping8192CUsb(
65813 void rtl8192cu_interface_configure(_adapter *padapter)
65814 {
65815 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
65816 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
65817 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
65818
65819 if (pdvobjpriv->ishighspeed == _TRUE)
65820 {
65821 @@ -399,8 +313,13 @@ void rtl8192cu_interface_configure(_adapter *padapter)
65822 pHalData->UsbRxAggPageTimeout = 0x4; //6, absolute time = 34ms/(2^6)
65823 #endif
65824
65825 - HalUsbSetQueuePipeMapping8192CUsb(padapter,
65826 - pdvobjpriv->RtNumInPipes, pdvobjpriv->RtNumOutPipes);
65827 + HalUsbSetQueuePipeMapping8192CUsb(padapter, pdvobjpriv->RtNumInPipes,
65828 + #ifdef CONFIG_USB_ONE_OUT_EP
65829 + 1
65830 + #else
65831 + pdvobjpriv->RtNumOutPipes
65832 + #endif
65833 + );
65834
65835 }
65836
65837 @@ -570,7 +489,6 @@ static void _InitPABias(_adapter *padapter)
65838 {
65839 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
65840 u8 pa_setting;
65841 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
65842 BOOLEAN is92C = IS_92C_SERIAL(pHalData->VersionID);
65843
65844 //FIXED PA current issue
65845 @@ -581,19 +499,19 @@ static void _InitPABias(_adapter *padapter)
65846
65847 if(!(pa_setting & BIT0))
65848 {
65849 - PHY_SetRFReg(padapter, RF90_PATH_A, 0x15, 0x0FFFFF, 0x0F406);
65850 - PHY_SetRFReg(padapter, RF90_PATH_A, 0x15, 0x0FFFFF, 0x4F406);
65851 - PHY_SetRFReg(padapter, RF90_PATH_A, 0x15, 0x0FFFFF, 0x8F406);
65852 - PHY_SetRFReg(padapter, RF90_PATH_A, 0x15, 0x0FFFFF, 0xCF406);
65853 + PHY_SetRFReg(padapter, RF_PATH_A, 0x15, 0x0FFFFF, 0x0F406);
65854 + PHY_SetRFReg(padapter, RF_PATH_A, 0x15, 0x0FFFFF, 0x4F406);
65855 + PHY_SetRFReg(padapter, RF_PATH_A, 0x15, 0x0FFFFF, 0x8F406);
65856 + PHY_SetRFReg(padapter, RF_PATH_A, 0x15, 0x0FFFFF, 0xCF406);
65857 //RT_TRACE(COMP_INIT, DBG_LOUD, ("PA BIAS path A\n"));
65858 }
65859
65860 - if(!(pa_setting & BIT1) && isNormal && is92C)
65861 + if(!(pa_setting & BIT1) && is92C)
65862 {
65863 - PHY_SetRFReg(padapter,RF90_PATH_B, 0x15, 0x0FFFFF, 0x0F406);
65864 - PHY_SetRFReg(padapter,RF90_PATH_B, 0x15, 0x0FFFFF, 0x4F406);
65865 - PHY_SetRFReg(padapter,RF90_PATH_B, 0x15, 0x0FFFFF, 0x8F406);
65866 - PHY_SetRFReg(padapter,RF90_PATH_B, 0x15, 0x0FFFFF, 0xCF406);
65867 + PHY_SetRFReg(padapter,RF_PATH_B, 0x15, 0x0FFFFF, 0x0F406);
65868 + PHY_SetRFReg(padapter,RF_PATH_B, 0x15, 0x0FFFFF, 0x4F406);
65869 + PHY_SetRFReg(padapter,RF_PATH_B, 0x15, 0x0FFFFF, 0x8F406);
65870 + PHY_SetRFReg(padapter,RF_PATH_B, 0x15, 0x0FFFFF, 0xCF406);
65871 //RT_TRACE(COMP_INIT, DBG_LOUD, ("PA BIAS path B\n"));
65872 }
65873
65874 @@ -788,6 +706,11 @@ _SetMacID(
65875 {
65876 u32 i;
65877 for(i=0 ; i< MAC_ADDR_LEN ; i++){
65878 +#ifdef CONFIG_CONCURRENT_MODE
65879 + if(Adapter->iface_type == IFACE_PORT1)
65880 + rtw_write32(Adapter, REG_MACID1+i, MacID[i]);
65881 + else
65882 +#endif
65883 rtw_write32(Adapter, REG_MACID+i, MacID[i]);
65884 }
65885 }
65886 @@ -799,6 +722,11 @@ _SetBSSID(
65887 {
65888 u32 i;
65889 for(i=0 ; i< MAC_ADDR_LEN ; i++){
65890 +#ifdef CONFIG_CONCURRENT_MODE
65891 + if(Adapter->iface_type == IFACE_PORT1)
65892 + rtw_write32(Adapter, REG_BSSID1+i, BSSID[i]);
65893 + else
65894 +#endif
65895 rtw_write32(Adapter, REG_BSSID+i, BSSID[i]);
65896 }
65897 }
65898 @@ -828,7 +756,6 @@ _InitQueueReservedPage(
65899 {
65900 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
65901 struct registry_priv *pregistrypriv = &Adapter->registrypriv;
65902 - BOOLEAN isNormalChip = IS_NORMAL_CHIP(pHalData->VersionID);
65903
65904 u32 outEPNum = (u32)pHalData->OutEpNumber;
65905 u32 numHQ = 0;
65906 @@ -840,64 +767,27 @@ _InitQueueReservedPage(
65907 BOOLEAN bWiFiConfig = pregistrypriv->wifi_spec;
65908 //u32 txQPageNum, txQPageUnit,txQRemainPage;
65909
65910 -#if 0
65911 - if(!pregistrypriv->wifi_spec){
65912 - numPubQ = (isNormalChip) ? NORMAL_PAGE_NUM_PUBQ : TEST_PAGE_NUM_PUBQ;
65913 - //RT_ASSERT((numPubQ < TX_TOTAL_PAGE_NUMBER), ("Public queue page number is great than total tx page number.\n"));
65914 - txQPageNum = TX_TOTAL_PAGE_NUMBER - numPubQ;
65915 -
65916 - //RT_ASSERT((0 == txQPageNum%txQPageNum), ("Total tx page number is not dividable!\n"));
65917 -
65918 - txQPageUnit = txQPageNum/outEPNum;
65919 - txQRemainPage = txQPageNum % outEPNum;
65920 -
65921 - if(pHalData->OutEpQueueSel & TX_SELE_HQ){
65922 - numHQ = txQPageUnit;
65923 - }
65924 - if(pHalData->OutEpQueueSel & TX_SELE_LQ){
65925 - numLQ = txQPageUnit;
65926 - }
65927 - // HIGH priority queue always present in the configuration of 2 or 3 out-ep
65928 - // so ,remainder pages have assigned to High queue
65929 - if((outEPNum>1) && (txQRemainPage)){
65930 - numHQ += txQRemainPage;
65931 - }
65932 -
65933 - // NOTE: This step shall be proceed before writting REG_RQPN.
65934 - if(isNormalChip){
65935 - if(pHalData->OutEpQueueSel & TX_SELE_NQ){
65936 - numNQ = txQPageUnit;
65937 - }
65938 - value8 = (u8)_NPQ(numNQ);
65939 - rtw_write8(Adapter, REG_RQPN_NPQ, value8);
65940 - }
65941 - //RT_ASSERT(((numHQ + numLQ + numNQ + numPubQ) < TX_PAGE_BOUNDARY), ("Total tx page number is greater than tx boundary!\n"));
65942 - }
65943 - else
65944 -#endif
65945 { //for WMM
65946 //RT_ASSERT((outEPNum>=2), ("for WMM ,number of out-ep must more than or equal to 2!\n"));
65947
65948 - numPubQ = (isNormalChip) ? ((bWiFiConfig)?WMM_NORMAL_PAGE_NUM_PUBQ:NORMAL_PAGE_NUM_PUBQ)
65949 - :WMM_TEST_PAGE_NUM_PUBQ;
65950 -
65951 if(pHalData->OutEpQueueSel & TX_SELE_HQ){
65952 - numHQ = (isNormalChip)?((bWiFiConfig)?WMM_NORMAL_PAGE_NUM_HPQ:NORMAL_PAGE_NUM_HPQ)
65953 - :WMM_TEST_PAGE_NUM_HPQ;
65954 + numHQ = (bWiFiConfig)?WMM_NORMAL_PAGE_NUM_HPQ:NORMAL_PAGE_NUM_HPQ;
65955 }
65956
65957 if(pHalData->OutEpQueueSel & TX_SELE_LQ){
65958 - numLQ = (isNormalChip)?((bWiFiConfig)?WMM_NORMAL_PAGE_NUM_LPQ:NORMAL_PAGE_NUM_LPQ)
65959 - :WMM_TEST_PAGE_NUM_LPQ;
65960 + numLQ = (bWiFiConfig)?WMM_NORMAL_PAGE_NUM_LPQ:NORMAL_PAGE_NUM_LPQ;
65961 }
65962 - // NOTE: This step shall be proceed before writting REG_RQPN.
65963 - if(isNormalChip){
65964 - if(pHalData->OutEpQueueSel & TX_SELE_NQ){
65965 - numNQ = (bWiFiConfig)?WMM_NORMAL_PAGE_NUM_NPQ:NORMAL_PAGE_NUM_NPQ;
65966 - }
65967 - value8 = (u8)_NPQ(numNQ);
65968 - rtw_write8(Adapter, REG_RQPN_NPQ, value8);
65969 + // NOTE: This step shall be proceed before writting REG_RQPN.
65970 + if(pHalData->OutEpQueueSel & TX_SELE_NQ){
65971 + numNQ = (bWiFiConfig)?WMM_NORMAL_PAGE_NUM_NPQ:NORMAL_PAGE_NUM_NPQ;
65972 }
65973 + value8 = (u8)_NPQ(numNQ);
65974 + rtw_write8(Adapter, REG_RQPN_NPQ, value8);
65975 +
65976 + if (bWiFiConfig)
65977 + numPubQ = WMM_NORMAL_TX_TOTAL_PAGE_NUMBER - numHQ - numLQ - numNQ;
65978 + else
65979 + numPubQ = TX_TOTAL_PAGE_NUMBER - numHQ - numLQ - numNQ;
65980 }
65981
65982 // TX DMA
65983 @@ -905,48 +795,6 @@ _InitQueueReservedPage(
65984 rtw_write32(Adapter, REG_RQPN, value32);
65985 }
65986
65987 -static void _InitID(IN PADAPTER Adapter)
65988 -{
65989 - int i;
65990 - EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
65991 -
65992 - for(i=0; i<6; i++)
65993 - {
65994 - rtw_write8(Adapter, (REG_MACID+i), pEEPROM->mac_addr[i]);
65995 - }
65996 -
65997 -/*
65998 - NicIFSetMacAddress(Adapter, Adapter->PermanentAddress);
65999 - //Ziv test
66000 -#if 1
66001 - {
66002 - u1Byte sMacAddr[6] = {0};
66003 - u4Byte i;
66004 -
66005 - for(i = 0 ; i < MAC_ADDR_LEN ; i++){
66006 - sMacAddr[i] = PlatformIORead1Byte(Adapter, (REG_MACID + i));
66007 - }
66008 - RT_PRINT_ADDR(COMP_INIT|COMP_EFUSE, DBG_LOUD, "Read back MAC Addr: ", sMacAddr);
66009 - }
66010 -#endif
66011 -
66012 -#if 0
66013 - u4Byte nMAR = 0xFFFFFFFF;
66014 - u8 m_MacID[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
66015 - u8 m_BSSID[] = {0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
66016 - int i;
66017 -
66018 - _SetMacID(Adapter, Adapter->PermanentAddress);
66019 - _SetBSSID(Adapter, m_BSSID);
66020 -
66021 - //set MAR
66022 - PlatformIOWrite4Byte(Adapter, REG_MAR, nMAR);
66023 - PlatformIOWrite4Byte(Adapter, REG_MAR+4, nMAR);
66024 -#endif
66025 -*/
66026 -}
66027 -
66028 -
66029 static VOID
66030 _InitTxBufferBoundary(
66031 IN PADAPTER Adapter
66032 @@ -961,8 +809,7 @@ _InitTxBufferBoundary(
66033 txpktbuf_bndy = TX_PAGE_BOUNDARY;
66034 }
66035 else{//for WMM
66036 - txpktbuf_bndy = ( IS_NORMAL_CHIP( pHalData->VersionID))?WMM_NORMAL_TX_PAGE_BOUNDARY
66037 - :WMM_TEST_TX_PAGE_BOUNDARY;
66038 + txpktbuf_bndy = WMM_NORMAL_TX_PAGE_BOUNDARY;
66039 }
66040
66041 rtw_write8(Adapter, REG_TXPKTBUF_BCNQ_BDNY, txpktbuf_bndy);
66042 @@ -1156,51 +1003,11 @@ _InitNormalChipQueuePriority(
66043 }
66044
66045 static VOID
66046 -_InitTestChipQueuePriority(
66047 - IN PADAPTER Adapter
66048 - )
66049 -{
66050 - u8 hq_sele ;
66051 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66052 - struct registry_priv *pregistrypriv = &Adapter->registrypriv;
66053 -
66054 - switch(pHalData->OutEpNumber)
66055 - {
66056 - case 2: // (TX_SELE_HQ|TX_SELE_LQ)
66057 - if(!pregistrypriv->wifi_spec)//typical setting
66058 - hq_sele = HQSEL_VOQ | HQSEL_VIQ | HQSEL_MGTQ | HQSEL_HIQ ;
66059 - else //for WMM
66060 - hq_sele = HQSEL_VOQ | HQSEL_BEQ | HQSEL_MGTQ | HQSEL_HIQ ;
66061 - break;
66062 - case 1:
66063 - if(TX_SELE_LQ == pHalData->OutEpQueueSel ){//map all endpoint to Low queue
66064 - hq_sele = 0;
66065 - }
66066 - else if(TX_SELE_HQ == pHalData->OutEpQueueSel){//map all endpoint to High queue
66067 - hq_sele = HQSEL_VOQ | HQSEL_VIQ | HQSEL_BEQ | HQSEL_BKQ | HQSEL_MGTQ | HQSEL_HIQ ;
66068 - }
66069 - break;
66070 - default:
66071 - //RT_ASSERT(FALSE,("Shall not reach here!\n"));
66072 - break;
66073 - }
66074 - rtw_write8(Adapter, (REG_TRXDMA_CTRL+1), hq_sele);
66075 -}
66076 -
66077 -
66078 -static VOID
66079 _InitQueuePriority(
66080 IN PADAPTER Adapter
66081 )
66082 {
66083 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66084 -
66085 - if(IS_NORMAL_CHIP( pHalData->VersionID)){
66086 - _InitNormalChipQueuePriority(Adapter);
66087 - }
66088 - else{
66089 - _InitTestChipQueuePriority(Adapter);
66090 - }
66091 + _InitNormalChipQueuePriority(Adapter);
66092 }
66093
66094 static VOID
66095 @@ -1263,7 +1070,10 @@ _InitWMACSetting(
66096 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66097
66098 //pHalData->ReceiveConfig = AAP | APM | AM | AB | APP_ICV | ADF | AMF | APP_FCS | HTC_LOC_CTRL | APP_MIC | APP_PHYSTS;
66099 - 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;
66100 + //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;
66101 + // don't turn on AAP, it will allow all packets to driver
66102 + 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;
66103 +
66104 #if (0 == RTL8192C_RX_PACKET_NO_INCLUDE_CRC)
66105 pHalData->ReceiveConfig |= ACRC32;
66106 #endif
66107 @@ -1345,10 +1155,15 @@ _InitEDCA(
66108 rtw_write16(Adapter,REG_SPEC_SIFS, 0x100a);
66109 rtw_write16(Adapter,REG_MAC_SPEC_SIFS, 0x100a);
66110
66111 - // Set SIFS for CCK
66112 + //REG514:SIFS_CCK_CTX
66113 + //REG515:SIFS_OFDM_CTX
66114 + //REG516:SIFS_CCK_TRX
66115 + //REG517:SIFS_OFDM_TRX
66116 +
66117 + // Set SIFS for CCK_CTS and OFDM_CTX
66118 rtw_write16(Adapter,REG_SIFS_CTX, 0x100a);
66119
66120 - // Set SIFS for OFDM
66121 + // Set SIFS for CCK_TRX and OFDM_TRX
66122 rtw_write16(Adapter,REG_SIFS_TRX, 0x100a);
66123
66124 // TXOP
66125 @@ -1764,18 +1579,13 @@ _InitBeaconParameters(
66126
66127 // TODO: Remove these magic number
66128 rtw_write16(Adapter, REG_TBTT_PROHIBIT,0x6404);// ms
66129 +
66130 rtw_write8(Adapter, REG_DRVERLYINT, DRIVER_EARLY_INT_TIME);// 5ms
66131 rtw_write8(Adapter, REG_BCNDMATIM, BCN_DMA_ATIME_INT_TIME); // 2ms
66132
66133 // Suggested by designer timchen. Change beacon AIFS to the largest number
66134 // beacause test chip does not contension before sending beacon. by tynli. 2009.11.03
66135 - if(IS_NORMAL_CHIP( pHalData->VersionID)){
66136 - rtw_write16(Adapter, REG_BCNTCFG, 0x660F);
66137 - }
66138 - else{
66139 - rtw_write16(Adapter, REG_BCNTCFG, 0x66FF);
66140 - }
66141 -
66142 + rtw_write16(Adapter, REG_BCNTCFG, 0x660F);
66143 }
66144
66145 static VOID
66146 @@ -1825,29 +1635,11 @@ _BeaconFunctionEnable(
66147 IN BOOLEAN Linked
66148 )
66149 {
66150 -#if 0
66151 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66152 - u8 value8 = 0;
66153 -
66154 - //value8 = Enable ? (EN_BCN_FUNCTION | EN_TXBCN_RPT) : EN_BCN_FUNCTION;
66155 -
66156 - if(_FALSE == Linked){
66157 - if(IS_NORMAL_CHIP( pHalData->VersionID)){
66158 - value8 |= DIS_TSF_UDT0_NORMAL_CHIP;
66159 - }
66160 - else{
66161 - value8 |= DIS_TSF_UDT0_TEST_CHIP;
66162 - }
66163 - }
66164 -
66165 - rtw_write8(Adapter, REG_BCN_CTRL, value8);
66166 -#else
66167 rtw_write8(Adapter, REG_BCN_CTRL, (BIT4 | BIT3 | BIT1));
66168 //SetBcnCtrlReg(Adapter, (BIT4 | BIT3 | BIT1), 0x00);
66169 //RT_TRACE(COMP_BEACON, DBG_LOUD, ("_BeaconFunctionEnable 0x550 0x%x\n", PlatformEFIORead1Byte(Adapter, 0x550)));
66170
66171 rtw_write8(Adapter, REG_RD_CTRL+1, 0x6F);
66172 -#endif
66173 }
66174
66175
66176 @@ -1882,7 +1674,7 @@ static VOID _RfPowerSave(
66177 MgntActSet_RF_State(Adapter, eRfOff, RF_CHANGE_BY_SW);
66178 // Those action will be discard in MgntActSet_RF_State because off the same state
66179 for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
66180 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0);
66181 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0);
66182 }
66183 else if(pMgntInfo->RfOffReason > RF_CHANGE_BY_PS){ // H/W or S/W RF OFF before sleep.
66184 RT_TRACE((COMP_INIT|COMP_RF), DBG_LOUD, ("InitializeAdapter8192CUsb(): Turn off RF for RfOffReason(%ld).\n", pMgntInfo->RfOffReason));
66185 @@ -1970,7 +1762,7 @@ HalDetectSelectiveSuspendMode(
66186 {
66187 u8 tmpvalue;
66188 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66189 - struct dvobj_priv *pdvobjpriv = &Adapter->dvobjpriv;
66190 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(Adapter);
66191
66192 // If support HW radio detect, we need to enable WOL ability, otherwise, we
66193 // can not use FW to notify host the power state switch.
66194 @@ -2089,7 +1881,6 @@ u32 rtl8192cu_hal_init(PADAPTER Adapter)
66195 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66196 struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv;
66197 struct registry_priv *pregistrypriv = &Adapter->registrypriv;
66198 - u8 isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
66199 u8 is92C = IS_92C_SERIAL(pHalData->VersionID);
66200 rt_rf_power_state eRfPowerStateToSet;
66201 #ifdef CONFIG_BT_COEXIST
66202 @@ -2244,7 +2035,6 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_DOWNLOAD_FW);
66203 //HalDetectPwrDownMode(Adapter);
66204 // 2010/08/26 MH If Efuse does not support sective suspend then disable the function.
66205 //HalDetectSelectiveSuspendMode(Adapter);
66206 -
66207
66208 // Set RF type for BB/RF configuration
66209 _InitRFType(Adapter);//->_ReadRFType()
66210 @@ -2258,8 +2048,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INIT_LLTT);
66211 boundary = TX_PAGE_BOUNDARY;
66212 }
66213 else{// for WMM
66214 - boundary = (IS_NORMAL_CHIP(pHalData->VersionID)) ?WMM_NORMAL_TX_PAGE_BOUNDARY
66215 - :WMM_TEST_TX_PAGE_BOUNDARY;
66216 + boundary = WMM_NORMAL_TX_PAGE_BOUNDARY;
66217 }
66218 status = InitLLTTable(Adapter, boundary);
66219 if(status == _FAIL){
66220 @@ -2281,7 +2070,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MISC02);
66221 _InitDriverInfoSize(Adapter, DRVINFO_SZ);
66222
66223 _InitInterrupt(Adapter);
66224 - _InitID(Adapter);//set mac_address
66225 + hal_init_macaddr(Adapter);//set mac_address
66226 _InitNetworkType(Adapter);//set msr
66227 _InitWMACSetting(Adapter);
66228 _InitAdaptiveCtrl(Adapter);
66229 @@ -2340,16 +2129,16 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_RF);
66230
66231 if(IS_VENDOR_UMC_A_CUT(pHalData->VersionID) && !IS_92C_SERIAL(pHalData->VersionID))
66232 {
66233 - PHY_SetRFReg(Adapter, RF90_PATH_A, RF_RX_G1, bMaskDWord, 0x30255);
66234 - PHY_SetRFReg(Adapter, RF90_PATH_A, RF_RX_G2, bMaskDWord, 0x50a00);
66235 + PHY_SetRFReg(Adapter, RF_PATH_A, RF_RX_G1, bMaskDWord, 0x30255);
66236 + PHY_SetRFReg(Adapter, RF_PATH_A, RF_RX_G2, bMaskDWord, 0x50a00);
66237 }
66238 #endif
66239
66240 //
66241 // Joseph Note: Keep RfRegChnlVal for later use.
66242 //
66243 - pHalData->RfRegChnlVal[0] = PHY_QueryRFReg(Adapter, (RF90_RADIO_PATH_E)0, RF_CHNLBW, bRFRegOffsetMask);
66244 - pHalData->RfRegChnlVal[1] = PHY_QueryRFReg(Adapter, (RF90_RADIO_PATH_E)1, RF_CHNLBW, bRFRegOffsetMask);
66245 + pHalData->RfRegChnlVal[0] = PHY_QueryRFReg(Adapter, (RF_RADIO_PATH_E)0, RF_CHNLBW, bRFRegOffsetMask);
66246 + pHalData->RfRegChnlVal[1] = PHY_QueryRFReg(Adapter, (RF_RADIO_PATH_E)1, RF_CHNLBW, bRFRegOffsetMask);
66247
66248 HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_TURN_ON_BLOCK);
66249 _BBTurnOnBlock(Adapter);
66250 @@ -2424,7 +2213,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MISC11);
66251
66252 // Those action will be discard in MgntActSet_RF_State because off the same state
66253 //for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
66254 - //PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0);
66255 + //PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, 0x4, 0xC00, 0x0);
66256 }
66257 else if(pwrctrlpriv->rfoff_reason > RF_CHANGE_BY_PS)
66258 { // H/W or S/W RF OFF before sleep.
66259 @@ -2462,7 +2251,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MISC11);
66260 pwrctrlpriv->rfoff_reason = 0;
66261 pwrctrlpriv->b_hw_radio_off = _FALSE;
66262 pwrctrlpriv->rf_pwrstate = rf_on;
66263 - rtw_led_control(Adapter, LED_CTL_POWER_ON);
66264 + rtw_led_control(Adapter, LED_CTL_POWER_ON);
66265
66266 }
66267
66268 @@ -2478,7 +2267,7 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MISC11);
66269 // our HW will be set in power-down mode if PDn source from all functions are configured.
66270 // 2010.10.06.
66271 //
66272 - //if(IS_HARDWARE_TYPE_8723U(Adapter))
66273 + //if(IS_HARDWARE_TYPE_8723AU(Adapter))
66274 //{
66275 // u1bTmp = rtw_read8(Adapter, REG_MULTI_FUNC_CTRL);
66276 // rtw_write8(Adapter, REG_MULTI_FUNC_CTRL, (u1bTmp|WL_HWPDN_EN));
66277 @@ -2572,23 +2361,20 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INIT_HAL_DM);
66278
66279 HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MISC31);
66280 rtw_write8(Adapter, 0x15, 0xe9);//suggest by Johnny for lower temperature
66281 +
66282 + rtw_write8(Adapter, 0xc87, 0x50);//suggest by Jackson for CCA
66283 +
66284 //_dbg_dump_macreg(padapter);
66285
66286 - //misc
66287 - {
66288 - int i;
66289 - u8 mac_addr[6];
66290 - for(i=0; i<6; i++)
66291 - {
66292 - mac_addr[i] = rtw_read8(Adapter, REG_MACID+i);
66293 - }
66294 -
66295 - DBG_8192C("MAC Address from REG_MACID = "MAC_FMT"\n", MAC_ARG(mac_addr));
66296 - }
66297 + rtw_write16(Adapter, REG_BCN_CTRL, 0x1818); // For 2 PORT TSF SYNC
66298 +
66299 +
66300 +
66301 +#ifdef CONFIG_XMIT_ACK
66302 + //ack for xmit mgmt frames.
66303 + rtw_write32(Adapter, REG_FWHW_TXQ_CTRL, rtw_read32(Adapter, REG_FWHW_TXQ_CTRL)|BIT(12));
66304 +#endif //CONFIG_XMIT_ACK
66305
66306 -#ifdef CONFIG_ENABLE_NOTCH_FILTER
66307 - rtw_write8(Adapter, 0xc41, 0x42);
66308 -#endif
66309 exit:
66310 HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_END);
66311
66312 @@ -2616,11 +2402,6 @@ _func_exit_;
66313
66314 #define SYNC_SD7_20110802_phy_SsPwrSwitch92CU
66315 #ifdef SYNC_SD7_20110802_phy_SsPwrSwitch92CU
66316 -#define PlatformEFIOWrite1Byte rtw_write8
66317 -#define PlatformEFIOWrite2Byte rtw_write16
66318 -#define PlatformEFIORead1Byte rtw_read8
66319 -#define delay_ms rtw_mdelay_os
66320 -#define u1Byte u8
66321
66322 VOID
66323 phy_SsPwrSwitch92CU(
66324 @@ -2630,7 +2411,7 @@ phy_SsPwrSwitch92CU(
66325 )
66326 {
66327 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66328 - u1Byte value8;
66329 + u8 value8;
66330
66331 switch( eRFPowerState )
66332 {
66333 @@ -2641,8 +2422,8 @@ phy_SsPwrSwitch92CU(
66334 //WriteXBYTE(REG_SYS_CLKR+1, ReadXBYTE(REG_SYS_CLKR+1) | BIT(3));
66335
66336 // 2. Force PWM, Enable SPS18_LDO_Marco_Block
66337 - PlatformEFIOWrite1Byte(Adapter, REG_SPS0_CTRL,
66338 - PlatformEFIORead1Byte(Adapter, REG_SPS0_CTRL) | (BIT0|BIT3));
66339 + rtw_write8(Adapter, REG_SPS0_CTRL,
66340 + rtw_read8(Adapter, REG_SPS0_CTRL) | (BIT0|BIT3));
66341
66342 // 3. restore BB, AFE control register.
66343 //RF
66344 @@ -2664,27 +2445,27 @@ phy_SsPwrSwitch92CU(
66345
66346 // 4. issue 3-wire command that RF set to Rx idle mode. This is used to re-write the RX idle mode.
66347 // We can only prvide a usual value instead and then HW will modify the value by itself.
66348 - PHY_SetRFReg(Adapter,RF90_PATH_A, 0, bRFRegOffsetMask,0x32D95);
66349 + PHY_SetRFReg(Adapter,RF_PATH_A, 0, bRFRegOffsetMask,0x32D95);
66350 if (pHalData->rf_type == RF_2T2R)
66351 {
66352 - PHY_SetRFReg(Adapter,RF90_PATH_B, 0, bRFRegOffsetMask,0x32D95);
66353 + PHY_SetRFReg(Adapter,RF_PATH_B, 0, bRFRegOffsetMask,0x32D95);
66354 }
66355 }
66356 else // Level 2 or others.
66357 {
66358 //h. AFE_PLL_CTRL 0x28[7:0] = 0x80 //disable AFE PLL
66359 - PlatformEFIOWrite1Byte(Adapter, REG_AFE_PLL_CTRL, 0x81);
66360 + rtw_write8(Adapter, REG_AFE_PLL_CTRL, 0x81);
66361
66362 // i. AFE_XTAL_CTRL 0x24[15:0] = 0x880F //gated AFE DIG_CLOCK
66363 - PlatformEFIOWrite2Byte(Adapter, REG_AFE_XTAL_CTRL, 0x800F);
66364 - delay_ms(1);
66365 + rtw_write16(Adapter, REG_AFE_XTAL_CTRL, 0x800F);
66366 + rtw_mdelay_os(1);
66367
66368 // 1. Enable MAC Clock. Can not be enabled now.
66369 //WriteXBYTE(REG_SYS_CLKR+1, ReadXBYTE(REG_SYS_CLKR+1) | BIT(3));
66370
66371 // 2. Force PWM, Enable SPS18_LDO_Marco_Block
66372 - PlatformEFIOWrite1Byte(Adapter, REG_SPS0_CTRL,
66373 - PlatformEFIORead1Byte(Adapter, REG_SPS0_CTRL) | (BIT0|BIT3));
66374 + rtw_write8(Adapter, REG_SPS0_CTRL,
66375 + rtw_read8(Adapter, REG_SPS0_CTRL) | (BIT0|BIT3));
66376
66377 // 3. restore BB, AFE control register.
66378 //RF
66379 @@ -2703,10 +2484,10 @@ phy_SsPwrSwitch92CU(
66380
66381 // 4. issue 3-wire command that RF set to Rx idle mode. This is used to re-write the RX idle mode.
66382 // We can only prvide a usual value instead and then HW will modify the value by itself.
66383 - PHY_SetRFReg(Adapter,RF90_PATH_A, 0, bRFRegOffsetMask,0x32D95);
66384 + PHY_SetRFReg(Adapter,RF_PATH_A, 0, bRFRegOffsetMask,0x32D95);
66385 if (pHalData->rf_type == RF_2T2R)
66386 {
66387 - PHY_SetRFReg(Adapter,RF90_PATH_B, 0, bRFRegOffsetMask,0x32D95);
66388 + PHY_SetRFReg(Adapter,RF_PATH_B, 0, bRFRegOffsetMask,0x32D95);
66389 }
66390
66391 // 5. gated MAC Clock
66392 @@ -2714,23 +2495,24 @@ phy_SsPwrSwitch92CU(
66393 //PlatformEFIOWrite1Byte(Adapter, REG_SYS_CLKR+1, PlatformEFIORead1Byte(Adapter, REG_SYS_CLKR+1)|(BIT3));
66394
66395 {
66396 - //u1Byte eRFPath = RF90_PATH_A,value8 = 0, retry = 0;
66397 - u1Byte bytetmp;
66398 - //PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x0, bMaskByte0, 0x0);
66399 + //u8 eRFPath = RF_PATH_A,value8 = 0, retry = 0;
66400 + u8 bytetmp;
66401 + //PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, 0x0, bMaskByte0, 0x0);
66402 // 2010/08/12 MH Add for B path under SS test.
66403 //if (pHalData->RF_Type == RF_2T2R)
66404 - //PHY_SetRFReg(Adapter, RF90_PATH_B, 0x0, bMaskByte0, 0x0);
66405 + //PHY_SetRFReg(Adapter, RF_PATH_B, 0x0, bMaskByte0, 0x0);
66406
66407 - bytetmp = PlatformEFIORead1Byte(Adapter, REG_APSD_CTRL);
66408 - PlatformEFIOWrite1Byte(Adapter, REG_APSD_CTRL, bytetmp & ~BIT6);
66409 + bytetmp = rtw_read8(Adapter, REG_APSD_CTRL);
66410 + rtw_write8(Adapter, REG_APSD_CTRL, bytetmp & ~BIT6);
66411
66412 - delay_ms(10);
66413 + rtw_mdelay_os(10);
66414
66415 // Set BB reset at first
66416 - PlatformEFIOWrite1Byte(Adapter, REG_SYS_FUNC_EN, 0x17 );//0x16
66417 -
66418 + rtw_write8(Adapter, REG_SYS_FUNC_EN, 0x17 );//0x16
66419 + //undo clock gated
66420 + rtw_write32(Adapter, rFPGA0_XCD_RFParameter, rtw_read32(Adapter, rFPGA0_XCD_RFParameter)&(~BIT31));
66421 // Enable TX
66422 - PlatformEFIOWrite1Byte(Adapter, REG_TXPAUSE, 0x0);
66423 + rtw_write8(Adapter, REG_TXPAUSE, 0x0);
66424 }
66425 //Adapter->HalFunc.InitializeAdapterHandler(Adapter, Adapter->MgntInfo.dot11CurrentChannelNumber);
66426 //CardSelectiveSuspendLeave(Adapter);
66427 @@ -2740,14 +2522,14 @@ phy_SsPwrSwitch92CU(
66428
66429 case rf_sleep:
66430 case rf_off:
66431 - value8 = PlatformEFIORead1Byte(Adapter, REG_SPS0_CTRL) ;
66432 + value8 = rtw_read8(Adapter, REG_SPS0_CTRL) ;
66433 if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
66434 value8 &= ~(BIT0);
66435 else
66436 value8 &= ~(BIT0|BIT3);
66437 if (bRegSSPwrLvl == 1)
66438 {
66439 - RT_TRACE(COMP_POWER, DBG_LOUD, ("SS LVL1\n"));
66440 + //RT_TRACE(COMP_POWER, DBG_LOUD, ("SS LVL1\n"));
66441 // Disable RF and BB only for SelectSuspend.
66442
66443 // 1. Set BB/RF to shutdown.
66444 @@ -2777,39 +2559,40 @@ phy_SsPwrSwitch92CU(
66445 PHY_SetBBReg(Adapter, rRx_Wait_CCA, bMaskDWord ,0x001B25A0);
66446
66447 // 3. issue 3-wire command that RF set to power down.
66448 - PHY_SetRFReg(Adapter,RF90_PATH_A, 0, bRFRegOffsetMask,0);
66449 + PHY_SetRFReg(Adapter,RF_PATH_A, 0, bRFRegOffsetMask,0);
66450 if (pHalData->rf_type == RF_2T2R)
66451 {
66452 - PHY_SetRFReg(Adapter,RF90_PATH_B, 0, bRFRegOffsetMask,0);
66453 + PHY_SetRFReg(Adapter,RF_PATH_B, 0, bRFRegOffsetMask,0);
66454 }
66455
66456 // 4. Force PFM , disable SPS18_LDO_Marco_Block
66457 - PlatformEFIOWrite1Byte(Adapter, REG_SPS0_CTRL, value8);
66458 + rtw_write8(Adapter, REG_SPS0_CTRL, value8);
66459
66460 // 5. gated MAC Clock
66461 //WriteXBYTE(REG_SYS_CLKR+1, ReadXBYTE(REG_SYS_CLKR+1) & ~(BIT(3)));
66462 }
66463 else // Level 2 or others.
66464 {
66465 - RT_TRACE(COMP_POWER, DBG_LOUD, ("SS LVL2\n"));
66466 + //RT_TRACE(COMP_POWER, DBG_LOUD, ("SS LVL2\n"));
66467 {
66468 - u1Byte eRFPath = RF90_PATH_A,value8 = 0;
66469 - PlatformEFIOWrite1Byte(Adapter, REG_TXPAUSE, 0xFF);
66470 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x0, bMaskByte0, 0x0);
66471 + u8 eRFPath = RF_PATH_A,value8 = 0;
66472 + rtw_write8(Adapter, REG_TXPAUSE, 0xFF);
66473 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, 0x0, bMaskByte0, 0x0);
66474 // 2010/08/12 MH Add for B path under SS test.
66475 //if (pHalData->RF_Type == RF_2T2R)
66476 - //PHY_SetRFReg(Adapter, RF90_PATH_B, 0x0, bMaskByte0, 0x0);
66477 + //PHY_SetRFReg(Adapter, RF_PATH_B, 0x0, bMaskByte0, 0x0);
66478
66479 value8 |= APSDOFF;
66480 - PlatformEFIOWrite1Byte(Adapter, REG_APSD_CTRL, value8);//0x40
66481 + rtw_write8(Adapter, REG_APSD_CTRL, value8);//0x40
66482
66483 // After switch APSD, we need to delay for stability
66484 - delay_ms(10);
66485 -
66486 + rtw_mdelay_os(10);
66487 + //before BB reset should do clock gated
66488 + rtw_write32(Adapter, rFPGA0_XCD_RFParameter, rtw_read32(Adapter, rFPGA0_XCD_RFParameter)|(BIT31));
66489 // Set BB reset at first
66490 value8 = 0 ;
66491 value8 |=( FEN_USBD | FEN_USBA | FEN_BB_GLB_RSTn);
66492 - PlatformEFIOWrite1Byte(Adapter, REG_SYS_FUNC_EN,value8 );//0x16
66493 + rtw_write8(Adapter, REG_SYS_FUNC_EN,value8 );//0x16
66494 }
66495
66496 // Disable RF and BB only for SelectSuspend.
66497 @@ -2841,22 +2624,22 @@ phy_SsPwrSwitch92CU(
66498 PHY_SetBBReg(Adapter, rRx_Wait_CCA, bMaskDWord ,0x001B25A0);
66499
66500 // 3. issue 3-wire command that RF set to power down.
66501 - PHY_SetRFReg(Adapter,RF90_PATH_A, 0, bRFRegOffsetMask,0);
66502 + PHY_SetRFReg(Adapter,RF_PATH_A, 0, bRFRegOffsetMask,0);
66503 if (pHalData->rf_type == RF_2T2R)
66504 {
66505 - PHY_SetRFReg(Adapter,RF90_PATH_B, 0, bRFRegOffsetMask,0);
66506 + PHY_SetRFReg(Adapter,RF_PATH_B, 0, bRFRegOffsetMask,0);
66507 }
66508
66509 // 4. Force PFM , disable SPS18_LDO_Marco_Block
66510 - PlatformEFIOWrite1Byte(Adapter, REG_SPS0_CTRL, value8);
66511 + rtw_write8(Adapter, REG_SPS0_CTRL, value8);
66512
66513 // 2010/10/13 MH/Isaachsu exchange sequence.
66514 //h. AFE_PLL_CTRL 0x28[7:0] = 0x80 //disable AFE PLL
66515 - PlatformEFIOWrite1Byte(Adapter, REG_AFE_PLL_CTRL, 0x80);
66516 - delay_ms(1);
66517 + rtw_write8(Adapter, REG_AFE_PLL_CTRL, 0x80);
66518 + rtw_mdelay_os(1);
66519
66520 // i. AFE_XTAL_CTRL 0x24[15:0] = 0x880F //gated AFE DIG_CLOCK
66521 - PlatformEFIOWrite2Byte(Adapter, REG_AFE_XTAL_CTRL, 0xA80F);
66522 + rtw_write16(Adapter, REG_AFE_XTAL_CTRL, 0xA80F);
66523
66524 // 5. gated MAC Clock
66525 //WriteXBYTE(REG_SYS_CLKR+1, ReadXBYTE(REG_SYS_CLKR+1) & ~(BIT(3)));
66526 @@ -2928,11 +2711,11 @@ _ResetFWDownloadRegister(
66527 IN PADAPTER Adapter
66528 )
66529 {
66530 - u8 value8;
66531 + u32 value32;
66532
66533 - value8 = rtw_read8(Adapter, REG_MCUFWDL);
66534 - value8 &= ~(MCUFWDL_EN | MCUFWDL_RDY);
66535 - rtw_write8(Adapter, REG_MCUFWDL, value8);
66536 + value32 = rtw_read32(Adapter, REG_MCUFWDL);
66537 + value32 &= ~(MCUFWDL_EN | MCUFWDL_RDY);
66538 + rtw_write32(Adapter, REG_MCUFWDL, value32);
66539 //RT_TRACE(COMP_INIT, DBG_LOUD, ("Reset FW download register.\n"));
66540 }
66541
66542 @@ -2980,7 +2763,9 @@ _ResetBB(
66543 )
66544 {
66545 u16 value16;
66546 -
66547 +
66548 + //before BB reset should do clock gated
66549 + rtw_write32(Adapter, rFPGA0_XCD_RFParameter, rtw_read32(Adapter, rFPGA0_XCD_RFParameter)|(BIT31));
66550 //reset BB
66551 value16 = rtw_read16(Adapter, REG_SYS_FUNC_EN);
66552 value16 &= ~(FEN_BBRSTB | FEN_BB_GLB_RSTn);
66553 @@ -3072,11 +2857,12 @@ e. SYS_FUNC_EN 0x02[7:0] = 0x14 //reset BB state machine
66554 ***************************************/
66555 u8 eRFPath = 0,value8 = 0;
66556 rtw_write8(Adapter, REG_TXPAUSE, 0xFF);
66557 - PHY_SetRFReg(Adapter, (RF90_RADIO_PATH_E)eRFPath, 0x0, bMaskByte0, 0x0);
66558 + PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, 0x0, bMaskByte0, 0x0);
66559
66560 value8 |= APSDOFF;
66561 rtw_write8(Adapter, REG_APSD_CTRL, value8);//0x40
66562 -
66563 + //before BB reset should do clock gated
66564 + rtw_write32(Adapter, rFPGA0_XCD_RFParameter, rtw_read32(Adapter, rFPGA0_XCD_RFParameter)|(BIT31));
66565 value8 = 0 ;
66566 value8 |=( FEN_USBD | FEN_USBA | FEN_BB_GLB_RSTn);
66567 rtw_write8(Adapter, REG_SYS_FUNC_EN,value8 );//0x16
66568 @@ -3435,7 +3221,7 @@ unsigned int rtl8192cu_inirp_init(PADAPTER Adapter)
66569 u8 i;
66570 struct recv_buf *precvbuf;
66571 uint status;
66572 - struct dvobj_priv *pdev=&Adapter->dvobjpriv;
66573 + struct dvobj_priv *pdev = adapter_to_dvobj(Adapter);
66574 struct intf_hdl * pintfhdl=&Adapter->iopriv.intf;
66575 struct recv_priv *precvpriv = &(Adapter->recvpriv);
66576 u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
66577 @@ -3498,69 +3284,6 @@ unsigned int rtl8192cu_inirp_deinit(PADAPTER Adapter)
66578 return _SUCCESS;
66579 }
66580
66581 -//-------------------------------------------------------------------------
66582 -//
66583 -// Channel Plan
66584 -//
66585 -//-------------------------------------------------------------------------
66586 -
66587 -static VOID
66588 -ReadChannelPlan(
66589 - IN PADAPTER Adapter,
66590 - IN u8* PROMContent,
66591 - IN BOOLEAN AutoLoadFail
66592 - )
66593 -{
66594 -
66595 -#define EEPROM_TEST_CHANNEL_PLAN (0x7D)
66596 -#define EEPROM_NORMAL_CHANNEL_PLAN (0x75)
66597 -
66598 - struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
66599 - struct registry_priv *pregistrypriv = &Adapter->registrypriv;
66600 - u8 channelPlan;
66601 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66602 -
66603 - if(AutoLoadFail){
66604 - channelPlan = CHPL_FCC;
66605 - }
66606 - else{
66607 - if(IS_NORMAL_CHIP(pHalData->VersionID))
66608 - channelPlan = PROMContent[EEPROM_NORMAL_CHANNEL_PLAN];
66609 - else
66610 - channelPlan = PROMContent[EEPROM_TEST_CHANNEL_PLAN];
66611 - }
66612 -
66613 - if((pregistrypriv->channel_plan>= RT_CHANNEL_DOMAIN_MAX) || (channelPlan & EEPROM_CHANNEL_PLAN_BY_HW_MASK))
66614 - {
66615 - pmlmepriv->ChannelPlan = _HalMapChannelPlan8192C(Adapter, (channelPlan & (~(EEPROM_CHANNEL_PLAN_BY_HW_MASK))));
66616 - //pMgntInfo->bChnlPlanFromHW = (channelPlan & EEPROM_CHANNEL_PLAN_BY_HW_MASK) ? _TRUE : _FALSE; // User cannot change channel plan.
66617 - }
66618 - else
66619 - {
66620 - pmlmepriv->ChannelPlan = (RT_CHANNEL_DOMAIN)pregistrypriv->channel_plan;
66621 - }
66622 -
66623 -#if 0 //todo:
66624 - switch(pMgntInfo->ChannelPlan)
66625 - {
66626 - case RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN:
66627 - {
66628 - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo);
66629 -
66630 - pDot11dInfo->bEnabled = _TRUE;
66631 - }
66632 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("Enable dot11d when RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN!\n"));
66633 - break;
66634 - }
66635 -#endif
66636 -
66637 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("RegChannelPlan(%d) EEPROMChannelPlan(%ld)", pMgntInfo->RegChannelPlan, (u4Byte)channelPlan));
66638 - //RT_TRACE(COMP_INIT, DBG_LOUD, ("ChannelPlan = %d\n" , pMgntInfo->ChannelPlan));
66639 -
66640 - MSG_8192C("RT_ChannelPlan: 0x%02x\n", pmlmepriv->ChannelPlan);
66641 -
66642 -}
66643 -
66644
66645 //-------------------------------------------------------------------------
66646 //
66647 @@ -3581,7 +3304,7 @@ _ReadPowerValueFromPROM(
66648
66649 if(AutoLoadFail){
66650 for(group = 0 ; group < CHANNEL_GROUP_MAX ; group++){
66651 - for(rfPath = 0 ; rfPath < RF90_PATH_MAX ; rfPath++){
66652 + for(rfPath = 0 ; rfPath < RF_PATH_MAX ; rfPath++){
66653 pwrInfo->CCKIndex[rfPath][group] = EEPROM_Default_TxPowerLevel;
66654 pwrInfo->HT40_1SIndex[rfPath][group] = EEPROM_Default_TxPowerLevel;
66655 pwrInfo->HT40_2SIndexDiff[rfPath][group]= EEPROM_Default_HT40_2SDiff;
66656 @@ -3598,7 +3321,7 @@ _ReadPowerValueFromPROM(
66657 return;
66658 }
66659
66660 - for(rfPath = 0 ; rfPath < RF90_PATH_MAX ; rfPath++){
66661 + for(rfPath = 0 ; rfPath < RF_PATH_MAX ; rfPath++){
66662 for(group = 0 ; group < CHANNEL_GROUP_MAX ; group++){
66663 eeAddr = EEPROM_CCK_TX_PWR_INX + (rfPath * 3) + group;
66664 pwrInfo->CCKIndex[rfPath][group] = PROMContent[eeAddr];
66665 @@ -3609,7 +3332,7 @@ _ReadPowerValueFromPROM(
66666 }
66667
66668 for(group = 0 ; group < CHANNEL_GROUP_MAX ; group++){
66669 - for(rfPath = 0 ; rfPath < RF90_PATH_MAX ; rfPath++){
66670 + for(rfPath = 0 ; rfPath < RF_PATH_MAX ; rfPath++){
66671 pwrInfo->HT40_2SIndexDiff[rfPath][group] =
66672 (PROMContent[EEPROM_HT40_2S_TX_PWR_INX_DIFF + group] >> (rfPath * 4)) & 0xF;
66673
66674 @@ -3675,7 +3398,7 @@ ReadTxPowerInfo(
66675 if(!AutoLoadFail)
66676 pHalData->bTXPowerDataReadFromEEPORM = _TRUE;
66677
66678 - for(rfPath = 0 ; rfPath < RF90_PATH_MAX ; rfPath++){
66679 + for(rfPath = 0 ; rfPath < RF_PATH_MAX ; rfPath++){
66680 for(ch = 0 ; ch < CHANNEL_MAX_NUMBER ; ch++){
66681 group = _GetChannelGroup(ch);
66682
66683 @@ -3696,7 +3419,7 @@ ReadTxPowerInfo(
66684
66685 #if DBG
66686
66687 - for(rfPath = 0 ; rfPath < RF90_PATH_MAX ; rfPath++){
66688 + for(rfPath = 0 ; rfPath < RF_PATH_MAX ; rfPath++){
66689 for(ch = 0 ; ch < CHANNEL_MAX_NUMBER ; ch++){
66690 RTPRINT(FINIT, INIT_TxPower,
66691 ("RF(%d)-Ch(%d) [CCK / HT40_1S / HT40_2S] = [0x%x / 0x%x / 0x%x]\n",
66692 @@ -3708,19 +3431,19 @@ ReadTxPowerInfo(
66693 }
66694
66695 for(ch = 0 ; ch < CHANNEL_MAX_NUMBER ; ch++){
66696 - RTPRINT(FINIT, INIT_TxPower, ("RF-A Ht20 to HT40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrHt20Diff[RF90_PATH_A][ch]));
66697 + RTPRINT(FINIT, INIT_TxPower, ("RF-A Ht20 to HT40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrHt20Diff[RF_PATH_A][ch]));
66698 }
66699
66700 for(ch = 0 ; ch < CHANNEL_MAX_NUMBER ; ch++){
66701 - RTPRINT(FINIT, INIT_TxPower, ("RF-A Legacy to Ht40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrLegacyHtDiff[RF90_PATH_A][ch]));
66702 + RTPRINT(FINIT, INIT_TxPower, ("RF-A Legacy to Ht40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrLegacyHtDiff[RF_PATH_A][ch]));
66703 }
66704
66705 for(ch = 0 ; ch < CHANNEL_MAX_NUMBER ; ch++){
66706 - RTPRINT(FINIT, INIT_TxPower, ("RF-B Ht20 to HT40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrHt20Diff[RF90_PATH_B][ch]));
66707 + RTPRINT(FINIT, INIT_TxPower, ("RF-B Ht20 to HT40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrHt20Diff[RF_PATH_B][ch]));
66708 }
66709
66710 for(ch = 0 ; ch < CHANNEL_MAX_NUMBER ; ch++){
66711 - RTPRINT(FINIT, INIT_TxPower, ("RF-B Legacy to HT40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrLegacyHtDiff[RF90_PATH_B][ch]));
66712 + RTPRINT(FINIT, INIT_TxPower, ("RF-B Legacy to HT40 Diff[%d] = 0x%x\n", ch, pHalData->TxPwrLegacyHtDiff[RF_PATH_B][ch]));
66713 }
66714
66715 #endif
66716 @@ -3786,8 +3509,6 @@ _ReadIDs(
66717 pHalData->CustomerID = RT_CID_DLINK;
66718 else if((pHalData->EEPROMVID == 0x2001) && (pHalData->EEPROMPID == 0x330a))
66719 pHalData->CustomerID = RT_CID_DLINK;
66720 - else if((pHalData->EEPROMVID == 0x2001) && (pHalData->EEPROMPID == 0x330d))
66721 - pHalData->CustomerID = RT_CID_DLINK;
66722 break;
66723 case EEPROM_CID_WHQL:
66724 /*
66725 @@ -3854,31 +3575,8 @@ _ReadBoardType(
66726 )
66727 {
66728 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66729 - BOOLEAN isNormal = IS_NORMAL_CHIP(pHalData->VersionID);
66730 u32 value32;
66731 u8 boardType = BOARD_USB_DONGLE;
66732 -#if 0
66733 - if(isNormal)
66734 - {
66735 - value32 = rtw_read32(Adapter, REG_HPON_FSM);
66736 -
66737 - DBG_8192C("first value 0x%x BoardType after 0x%x \n", CHIP_BONDING_IDENTIFIER(value32), pHalData->BoardType);
66738 -
66739 - if(!IS_92C_SERIAL(pHalData->VersionID))
66740 - {
66741 - if(CHIP_BONDING_IDENTIFIER(value32) == CHIP_BONDING_88C_USB_MCARD)
66742 - {
66743 - pHalData->BoardType = BOARD_MINICARD;
66744 - DBG_8192C("value 0x%x BoardType after 0x%x \n", CHIP_BONDING_IDENTIFIER(value32), pHalData->BoardType);
66745 - }
66746 - else if(CHIP_BONDING_IDENTIFIER(value32) == CHIP_BONDING_88C_USB_HP)
66747 - {
66748 - pHalData->BoardType = BOARD_USB_High_PA;
66749 - DBG_8192C("value 0x%x BoardType after 0x%x \n", CHIP_BONDING_IDENTIFIER(value32), pHalData->BoardType);
66750 - }
66751 - }
66752 - }
66753 -#endif
66754
66755 if(AutoloadFail){
66756 if(IS_8723_SERIES(pHalData->VersionID))
66757 @@ -3891,17 +3589,9 @@ _ReadBoardType(
66758 return;
66759 }
66760
66761 - if(isNormal)
66762 - {
66763 - boardType = PROMContent[EEPROM_NORMAL_BoardType];
66764 - boardType &= BOARD_TYPE_NORMAL_MASK;//bit[7:5]
66765 - boardType >>= 5;
66766 - }
66767 - else
66768 - {
66769 - boardType = PROMContent[EEPROM_RF_OPT4];
66770 - boardType &= BOARD_TYPE_TEST_MASK;
66771 - }
66772 + boardType = PROMContent[EEPROM_NORMAL_BoardType];
66773 + boardType &= BOARD_TYPE_NORMAL_MASK;//bit[7:5]
66774 + boardType >>= 5;
66775
66776 pHalData->BoardType = boardType;
66777 MSG_8192C("_ReadBoardType(%x)\n",pHalData->BoardType);
66778 @@ -4145,7 +3835,7 @@ readAdapterInfo_8192CU(
66779 rtl8192c_ReadBluetoothCoexistInfo(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
66780 #endif
66781
66782 - ReadChannelPlan(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
66783 + rtl8192c_EfuseParseChnlPlan(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
66784 _ReadThermalMeter(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
66785 _ReadLEDSetting(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
66786 _ReadRFSetting(Adapter, PROMContent, pEEPROM->bautoload_fail_flag);
66787 @@ -4192,7 +3882,7 @@ static void _ReadPROMContent(
66788
66789 //pHalData->EEType = IS_BOOT_FROM_EEPROM(Adapter) ? EEPROM_93C46 : EEPROM_BOOT_EFUSE;
66790
66791 - //if(IS_HARDWARE_TYPE_8723(Adapter))
66792 + //if(IS_HARDWARE_TYPE_8723A(Adapter))
66793 // readAdapterInfo_8723U(Adapter);
66794 //else
66795 readAdapterInfo_8192CU(Adapter);
66796 @@ -4287,7 +3977,7 @@ static int _ReadAdapterInfo8192CU(PADAPTER Adapter)
66797
66798 //Efuse_InitSomeVar(Adapter);
66799
66800 - //if(IS_HARDWARE_TYPE_8723(Adapter))
66801 + //if(IS_HARDWARE_TYPE_8723A(Adapter))
66802 // _EfuseCellSel(Adapter);
66803
66804 _ReadRFType(Adapter);//rf_chip -> _InitRFType()
66805 @@ -4339,20 +4029,8 @@ static void ResumeTxBeacon(_adapter *padapter)
66806 // 2010.03.01. Marked by tynli. No need to call workitem beacause we record the value
66807 // which should be read from register to a global variable.
66808
66809 - if(IS_NORMAL_CHIP(pHalData->VersionID))
66810 - {
66811 - rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) | BIT6);
66812 - pHalData->RegFwHwTxQCtrl |= BIT6;
66813 - rtw_write8(padapter, REG_TBTT_PROHIBIT+1, 0xff);
66814 - pHalData->RegReg542 |= BIT0;
66815 - rtw_write8(padapter, REG_TBTT_PROHIBIT+2, pHalData->RegReg542);
66816 - }
66817 - else
66818 - {
66819 - pHalData->RegTxPause = rtw_read8(padapter, REG_TXPAUSE);
66820 - rtw_write8(padapter, REG_TXPAUSE, pHalData->RegTxPause & (~BIT6));
66821 - }
66822 -
66823 + rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) | BIT6);
66824 + pHalData->RegFwHwTxQCtrl |= BIT6;
66825 }
66826
66827 static void StopTxBeacon(_adapter *padapter)
66828 @@ -4362,19 +4040,8 @@ static void StopTxBeacon(_adapter *padapter)
66829 // 2010.03.01. Marked by tynli. No need to call workitem beacause we record the value
66830 // which should be read from register to a global variable.
66831
66832 - if(IS_NORMAL_CHIP(pHalData->VersionID))
66833 - {
66834 - rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) & (~BIT6));
66835 - pHalData->RegFwHwTxQCtrl &= (~BIT6);
66836 - rtw_write8(padapter, REG_TBTT_PROHIBIT+1, 0x64);
66837 - pHalData->RegReg542 &= ~(BIT0);
66838 - rtw_write8(padapter, REG_TBTT_PROHIBIT+2, pHalData->RegReg542);
66839 - }
66840 - else
66841 - {
66842 - pHalData->RegTxPause = rtw_read8(padapter, REG_TXPAUSE);
66843 - rtw_write8(padapter, REG_TXPAUSE, pHalData->RegTxPause | BIT6);
66844 - }
66845 + rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) & (~BIT6));
66846 + pHalData->RegFwHwTxQCtrl &= (~BIT6);
66847
66848 //todo: CheckFwRsvdPageContent(Adapter); // 2010.06.23. Added by tynli.
66849
66850 @@ -4460,32 +4127,294 @@ u16 calc_crc(u8 * pdata,int length)
66851 return CRC;
66852 }
66853
66854 -#ifdef CONFIG_WOWLAN
66855 -static int rtw_wowlan_set_pattern(_adapter *padapter ,u8* pbuf){
66856 - struct pwrctrl_priv *pwrpriv=&padapter->pwrctrlpriv;
66857 - int res=0,crc_idx;
66858 - u32 content=0,cmd=0;
66859 - u32 *pdata;
66860 - u8 config,crc,mc,bc,uc,idx,pattern_len,packet[200],packet_len,valid;
66861 - u16 crc_val=0,i;
66862 -
66863 - config=pbuf[0];
66864 - bc=config & BIT(3)?1:0;
66865 - mc=config & BIT(4)?1:0;
66866 - uc=config & BIT(5)?1:0;
66867 - idx=config & 0x7;
66868 - crc=config & BIT(6)?1:0;
66869 - valid=config & BIT(7)?1:0;
66870 - pattern_len=pbuf[1];
66871 - packet_len=pattern_len*8;
66872 - pdata=(u32 *)pbuf;
66873 +static void hw_var_set_opmode(PADAPTER Adapter, u8 variable, u8* val)
66874 +{
66875 + u8 val8;
66876 + u8 mode = *((u8 *)val);
66877 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
66878
66879 - // Write to the Wakeup CAM
66880 - //offset 0
66881 - if(pattern_len>=4){
66882 - content=pdata[1];
66883 - }
66884 - else{
66885 +#ifdef CONFIG_CONCURRENT_MODE
66886 + if(Adapter->iface_type == IFACE_PORT1)
66887 + {
66888 + // disable Port1 TSF update
66889 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(4));
66890 +
66891 + // set net_type
66892 + val8 = rtw_read8(Adapter, MSR)&0x03;
66893 + val8 |= (mode<<2);
66894 + rtw_write8(Adapter, MSR, val8);
66895 +
66896 + //reset TSF1
66897 + rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(1));
66898 +
66899 + DBG_871X("%s()-%d mode = %d\n", __FUNCTION__, __LINE__, mode);
66900 +
66901 + if((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_))
66902 + {
66903 + if(!check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE))
66904 + {
66905 + StopTxBeacon(Adapter);
66906 + }
66907 +
66908 + rtw_write8(Adapter,REG_BCN_CTRL_1, 0x19);//disable atim wnd
66909 + //rtw_write8(Adapter,REG_BCN_CTRL_1, 0x18);
66910 + }
66911 + else if((mode == _HW_STATE_ADHOC_) /*|| (mode == _HW_STATE_AP_)*/)
66912 + {
66913 + ResumeTxBeacon(Adapter);
66914 + rtw_write8(Adapter,REG_BCN_CTRL_1, 0x1a);
66915 + }
66916 + else if(mode == _HW_STATE_AP_)
66917 + {
66918 + ResumeTxBeacon(Adapter);
66919 +
66920 + rtw_write8(Adapter, REG_BCN_CTRL_1, 0x12);
66921 +
66922 + //Set RCR
66923 + //rtw_write32(padapter, REG_RCR, 0x70002a8e);//CBSSID_DATA must set to 0
66924 + rtw_write32(Adapter, REG_RCR, 0x7000228e);//CBSSID_DATA must set to 0
66925 + //enable to rx data frame
66926 + rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF);
66927 + //enable to rx ps-poll
66928 + rtw_write16(Adapter, REG_RXFLTMAP1, 0x0400);
66929 +
66930 + //Beacon Control related register for first time
66931 + rtw_write8(Adapter, REG_BCNDMATIM, 0x02); // 2ms
66932 + rtw_write8(Adapter, REG_DRVERLYINT, 0x05);// 5ms
66933 + //rtw_write8(Adapter, REG_BCN_MAX_ERR, 0xFF);
66934 + rtw_write8(Adapter, REG_ATIMWND_1, 0x0a); // 10ms for port1
66935 + rtw_write16(Adapter, REG_BCNTCFG, 0x00);
66936 + rtw_write16(Adapter, REG_TBTT_PROHIBIT, 0xff04);
66937 + rtw_write16(Adapter, REG_TSFTR_SYN_OFFSET, 0x7fff);// +32767 (~32ms)
66938 +
66939 +
66940 + //enable BCN1 Function for if2
66941 + //don't enable update TSF1 for if2 (due to TSF update when beacon/probe rsp are received)
66942 + rtw_write8(Adapter, REG_BCN_CTRL_1, (DIS_TSF_UDT0_NORMAL_CHIP|EN_BCN_FUNCTION | EN_TXBCN_RPT|BIT(1)));
66943 +
66944 +#ifdef CONFIG_CONCURRENT_MODE
66945 + if(check_buddy_fwstate(Adapter, WIFI_FW_NULL_STATE))
66946 + rtw_write8(Adapter, REG_BCN_CTRL,
66947 + rtw_read8(Adapter, REG_BCN_CTRL) & ~EN_BCN_FUNCTION);
66948 +#endif
66949 +
66950 + DBG_871X("%s()-%d: REG_BCN_CTRL_1 = %02x\n", __FUNCTION__, __LINE__, rtw_read8(Adapter, REG_BCN_CTRL_1));
66951 +
66952 + //BCN1 TSF will sync to BCN0 TSF with offset(0x518) if if1_sta linked
66953 + //rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(5));
66954 + //rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(3));
66955 +
66956 + //dis BCN0 ATIM WND if if1 is station
66957 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(0));
66958 +#ifdef CONFIG_TSF_RESET_OFFLOAD
66959 + // Reset TSF for STA+AP concurrent mode
66960 + if ( check_buddy_fwstate(Adapter, (WIFI_STATION_STATE|WIFI_ASOC_STATE)) ) {
66961 + if (reset_tsf(Adapter, IFACE_PORT1) == _FALSE)
66962 + DBG_871X("ERROR! %s()-%d: Reset port1 TSF fail\n",
66963 + __FUNCTION__, __LINE__);
66964 + }
66965 +#endif // CONFIG_TSF_RESET_OFFLOAD
66966 + }
66967 +
66968 + }
66969 + else // (Adapter->iface_type == IFACE_PORT1)
66970 +#endif //CONFIG_CONCURRENT_MODE
66971 + {
66972 + // disable Port0 TSF update
66973 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
66974 +
66975 + // set net_type
66976 + val8 = rtw_read8(Adapter, MSR)&0x0c;
66977 + val8 |= mode;
66978 + rtw_write8(Adapter, MSR, val8);
66979 +
66980 + //reset TSF0
66981 + rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(0));
66982 +
66983 + DBG_871X("%s()-%d mode = %d\n", __FUNCTION__, __LINE__, mode);
66984 +
66985 + if((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_))
66986 + {
66987 +#ifdef CONFIG_CONCURRENT_MODE
66988 + if(!check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE))
66989 +#endif //CONFIG_CONCURRENT_MODE
66990 + {
66991 + StopTxBeacon(Adapter);
66992 + }
66993 +
66994 + rtw_write8(Adapter,REG_BCN_CTRL, 0x19);//disable atim wnd
66995 + //rtw_write8(Adapter,REG_BCN_CTRL, 0x18);
66996 + }
66997 + else if((mode == _HW_STATE_ADHOC_) /*|| (mode == _HW_STATE_AP_)*/)
66998 + {
66999 + ResumeTxBeacon(Adapter);
67000 + rtw_write8(Adapter,REG_BCN_CTRL, 0x1a);
67001 + }
67002 + else if(mode == _HW_STATE_AP_)
67003 + {
67004 + ResumeTxBeacon(Adapter);
67005 +
67006 + rtw_write8(Adapter, REG_BCN_CTRL, 0x12);
67007 +
67008 + //Set RCR
67009 + //write32(padapter, REG_RCR, 0x70002a8e);//CBSSID_DATA must set to 0
67010 + rtw_write32(Adapter, REG_RCR, 0x7000228e);//CBSSID_DATA must set to 0
67011 + //enable to rx data frame
67012 + rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF);
67013 + //enable to rx ps-poll
67014 + rtw_write16(Adapter, REG_RXFLTMAP1, 0x0400);
67015 +
67016 + //Beacon Control related register for first time
67017 +
67018 + rtw_write8(Adapter, REG_BCNDMATIM, 0x02); // 2ms
67019 + rtw_write8(Adapter, REG_DRVERLYINT, 0x05);// 5ms
67020 +
67021 + //write8(Adapter, REG_BCN_MAX_ERR, 0xFF);
67022 + rtw_write8(Adapter, REG_ATIMWND, 0x0a); // 10ms for port0
67023 + rtw_write16(Adapter, REG_BCNTCFG, 0x00);
67024 + rtw_write16(Adapter, REG_TBTT_PROHIBIT, 0xff04);
67025 + rtw_write16(Adapter, REG_TSFTR_SYN_OFFSET, 0x7fff);// +32767 (~32ms)
67026 +
67027 + //enable BCN0 Function for if1
67028 + //don't enable update TSF0 for if1 (due to TSF update when beacon/probe rsp are received)
67029 + rtw_write8(Adapter, REG_BCN_CTRL, (DIS_TSF_UDT0_NORMAL_CHIP|EN_BCN_FUNCTION | EN_TXBCN_RPT|BIT(1)));
67030 +
67031 +#ifdef CONFIG_CONCURRENT_MODE
67032 + if(check_buddy_fwstate(Adapter, WIFI_FW_NULL_STATE))
67033 + rtw_write8(Adapter, REG_BCN_CTRL_1,
67034 + rtw_read8(Adapter, REG_BCN_CTRL_1) & ~EN_BCN_FUNCTION);
67035 +#endif
67036 + //BCN1 TSF will sync to BCN0 TSF with offset(0x518) if if1_sta linked
67037 + //only interface 2 as AP MODE need to sync
67038 + //rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(5));
67039 +
67040 +
67041 + //dis BCN1 ATIM WND if if2 is station
67042 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(0));
67043 +#ifdef CONFIG_TSF_RESET_OFFLOAD
67044 + // Reset TSF for STA+AP concurrent mode
67045 + if ( check_buddy_fwstate(Adapter, (WIFI_STATION_STATE|WIFI_ASOC_STATE)) ) {
67046 + if (reset_tsf(Adapter, IFACE_PORT0) == _FALSE)
67047 + DBG_871X("ERROR! %s()-%d: Reset port0 TSF fail\n",
67048 + __FUNCTION__, __LINE__);
67049 + }
67050 +#endif // CONFIG_TSF_RESET_OFFLOAD
67051 +
67052 + }
67053 +
67054 +
67055 + }
67056 +
67057 +}
67058 +
67059 +static void hw_var_set_macaddr(PADAPTER Adapter, u8 variable, u8* val)
67060 +{
67061 + u8 idx = 0;
67062 + u32 reg_macid;
67063 +
67064 +#ifdef CONFIG_CONCURRENT_MODE
67065 + if(Adapter->iface_type == IFACE_PORT1)
67066 + {
67067 + reg_macid = REG_MACID1;
67068 + }
67069 + else
67070 +#endif
67071 + {
67072 + reg_macid = REG_MACID;
67073 + }
67074 +
67075 + for(idx = 0 ; idx < 6; idx++)
67076 + {
67077 + rtw_write8(Adapter, (reg_macid+idx), val[idx]);
67078 + }
67079 +
67080 +}
67081 +
67082 +static void hw_var_set_bssid(PADAPTER Adapter, u8 variable, u8* val)
67083 +{
67084 + u8 idx = 0;
67085 + u32 reg_bssid;
67086 +
67087 +#ifdef CONFIG_CONCURRENT_MODE
67088 + if(Adapter->iface_type == IFACE_PORT1)
67089 + {
67090 + reg_bssid = REG_BSSID1;
67091 + }
67092 + else
67093 +#endif
67094 + {
67095 + reg_bssid = REG_BSSID;
67096 + }
67097 +
67098 + for(idx = 0 ; idx < 6; idx++)
67099 + {
67100 + rtw_write8(Adapter, (reg_bssid+idx), val[idx]);
67101 + }
67102 +
67103 +}
67104 +
67105 +static void hw_var_set_bcn_func(PADAPTER Adapter, u8 variable, u8* val)
67106 +{
67107 + u32 bcn_ctrl_reg;
67108 +
67109 +#ifdef CONFIG_CONCURRENT_MODE
67110 + if(Adapter->iface_type == IFACE_PORT1)
67111 + {
67112 + bcn_ctrl_reg = REG_BCN_CTRL_1;
67113 +
67114 + if(*((u8 *)val))
67115 + {
67116 + rtw_write8(Adapter, bcn_ctrl_reg, (EN_BCN_FUNCTION | EN_TXBCN_RPT));
67117 + }
67118 + else
67119 + {
67120 + rtw_write8(Adapter, bcn_ctrl_reg, rtw_read8(Adapter, bcn_ctrl_reg)&(~(EN_BCN_FUNCTION | EN_TXBCN_RPT)));
67121 + }
67122 + }
67123 + else
67124 +#endif
67125 + {
67126 + bcn_ctrl_reg = REG_BCN_CTRL;
67127 + if(*((u8 *)val))
67128 + {
67129 + rtw_write8(Adapter, bcn_ctrl_reg, (EN_BCN_FUNCTION | EN_TXBCN_RPT));
67130 + }
67131 + else
67132 + {
67133 + //rtw_write8(Adapter, bcn_ctrl_reg, rtw_read8(Adapter, bcn_ctrl_reg)&(~(EN_BCN_FUNCTION | EN_TXBCN_RPT)));
67134 + rtw_write8(Adapter, bcn_ctrl_reg, (rtw_read8(Adapter, bcn_ctrl_reg)&(~(EN_TXBCN_RPT))) | DIS_TSF_UDT0_NORMAL_CHIP);
67135 + }
67136 + }
67137 +
67138 +
67139 +}
67140 +
67141 +#ifdef CONFIG_WOWLAN
67142 +static int rtw_wowlan_set_pattern(_adapter *padapter ,u8* pbuf){
67143 + struct pwrctrl_priv *pwrpriv=&padapter->pwrctrlpriv;
67144 + int res=0,crc_idx;
67145 + u32 content=0,cmd=0;
67146 + u32 *pdata;
67147 + u8 config,crc,mc,bc,uc,idx,pattern_len,packet[200],packet_len,valid;
67148 + u16 crc_val=0,i;
67149 +
67150 + config=pbuf[0];
67151 + bc=config & BIT(3)?1:0;
67152 + mc=config & BIT(4)?1:0;
67153 + uc=config & BIT(5)?1:0;
67154 + idx=config & 0x7;
67155 + crc=config & BIT(6)?1:0;
67156 + valid=config & BIT(7)?1:0;
67157 + pattern_len=pbuf[1];
67158 + packet_len=pattern_len*8;
67159 + pdata=(u32 *)pbuf;
67160 +
67161 + // Write to the Wakeup CAM
67162 + //offset 0
67163 + if(pattern_len>=4){
67164 + content=pdata[1];
67165 + }
67166 + else{
67167 content=0;
67168 }
67169 DBG_8192C("\nrtw_wowlan_set_pattern offset[0] content 0x%x [cpu_to_le32 0x%x]\n", content,__cpu_to_le32(content));
67170 @@ -4624,6 +4553,374 @@ void rtw_wowlan_reload_pattern(_adapter *padapter){
67171 }
67172 #endif //CONFIG_WOWLAN
67173
67174 +static void hw_var_set_correct_tsf(PADAPTER Adapter, u8 variable, u8* val)
67175 +{
67176 +#ifdef CONFIG_CONCURRENT_MODE
67177 + u64 tsf;
67178 + struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
67179 + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
67180 +
67181 + //tsf = pmlmeext->TSFValue - ((u32)pmlmeext->TSFValue % (pmlmeinfo->bcn_interval*1024)) -1024; //us
67182 + tsf = pmlmeext->TSFValue - rtw_modular64(pmlmeext->TSFValue, (pmlmeinfo->bcn_interval*1024)) -1024; //us
67183 +
67184 + if(((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
67185 + {
67186 + //pHalData->RegTxPause |= STOP_BCNQ;BIT(6)
67187 + //rtw_write8(Adapter, REG_TXPAUSE, (rtw_read8(Adapter, REG_TXPAUSE)|BIT(6)));
67188 + StopTxBeacon(Adapter);
67189 + }
67190 +
67191 + if(Adapter->iface_type == IFACE_PORT1)
67192 + {
67193 + //disable related TSF function
67194 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(3)));
67195 +
67196 + rtw_write32(Adapter, REG_TSFTR1, tsf);
67197 + rtw_write32(Adapter, REG_TSFTR1+4, tsf>>32);
67198 +
67199 + //enable related TSF function
67200 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(3));
67201 +
67202 +
67203 +#ifdef CONFIG_TSF_RESET_OFFLOAD
67204 + // Update buddy port's TSF(TBTT) if it is SoftAP for beacon TX issue!
67205 + if ( (pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE
67206 + && check_buddy_fwstate(Adapter, WIFI_AP_STATE) ) {
67207 + if (reset_tsf(Adapter, IFACE_PORT0) == _FALSE)
67208 + DBG_871X("ERROR! %s()-%d: Reset port0 TSF fail\n",
67209 + __FUNCTION__, __LINE__);
67210 + }
67211 +#endif // CONFIG_TSF_RESET_OFFLOAD
67212 +
67213 + }
67214 + else // Adapter->iface_type == IFACE_PORT1
67215 + {
67216 + //disable related TSF function
67217 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(3)));
67218 + // disable TSF update instead! May induce burst beacon TX
67219 + //rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
67220 +
67221 + rtw_write32(Adapter, REG_TSFTR, tsf);
67222 + rtw_write32(Adapter, REG_TSFTR+4, tsf>>32);
67223 +
67224 + //enable related TSF function
67225 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(3));
67226 + //rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
67227 +
67228 + // Update buddy port's TSF if it is SoftAP for beacon TX issue!
67229 + if ( (pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE
67230 + && check_buddy_fwstate(Adapter, WIFI_AP_STATE)
67231 + ) {
67232 + //disable related TSF function
67233 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(3)));
67234 + // disable TSF update instead!
67235 + //rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(4));
67236 +
67237 + rtw_write32(Adapter, REG_TSFTR1, tsf);
67238 + rtw_write32(Adapter, REG_TSFTR1+4, tsf>>32);
67239 +
67240 + //enable related TSF function
67241 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(3));
67242 + //rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(4)));
67243 + }
67244 +#ifdef CONFIG_TSF_RESET_OFFLOAD
67245 + // Update buddy port's TSF if it is SoftAP for beacon TX issue!
67246 + if ( (pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE
67247 + && check_buddy_fwstate(Adapter, WIFI_AP_STATE) ) {
67248 + if (reset_tsf(Adapter, IFACE_PORT1) == _FALSE)
67249 + DBG_871X("ERROR! %s()-%d: Reset port1 TSF fail\n",
67250 + __FUNCTION__, __LINE__);
67251 + }
67252 +#endif // CONFIG_TSF_RESET_OFFLOAD
67253 + }
67254 +
67255 + if(((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
67256 + {
67257 + //pHalData->RegTxPause &= (~STOP_BCNQ);
67258 + //rtw_write8(Adapter, REG_TXPAUSE, (rtw_read8(Adapter, REG_TXPAUSE)&(~BIT(6))));
67259 + ResumeTxBeacon(Adapter);
67260 + }
67261 +#endif // CONFIG_CONCURRENT_MODE
67262 +}
67263 +
67264 +static void hw_var_set_mlme_disconnect(PADAPTER Adapter, u8 variable, u8* val)
67265 +{
67266 +#ifdef CONFIG_CONCURRENT_MODE
67267 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
67268 + PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
67269 +
67270 +
67271 + if(check_buddy_mlmeinfo_state(Adapter, _HW_STATE_NOLINK_))
67272 + rtw_write16(Adapter, REG_RXFLTMAP2, 0x00);
67273 +
67274 +
67275 + if(Adapter->iface_type == IFACE_PORT1)
67276 + {
67277 + int i;
67278 + u8 reg_bcn_ctrl_1;
67279 +
67280 + // a.Driver set 0x422 bit 6 =0
67281 + rtw_write8(Adapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) & (~BIT6));
67282 + pHalData->RegFwHwTxQCtrl &= (~BIT6);
67283 +
67284 +
67285 +#ifdef CONFIG_BEACON_DISABLE_OFFLOAD
67286 + u8 reg_bcn_disable_cnt = rtw_read8(Adapter, REG_FW_BCN_DIS_CNT);
67287 + DBG_871X("%s()-%d: reg_bcn_disable_cnt=%02x\n", __FUNCTION__, __LINE__, reg_bcn_disable_cnt);
67288 +
67289 + reg_bcn_ctrl_1 = rtw_read8(Adapter, REG_BCN_CTRL_1);
67290 + DBG_871X("%s()-%d: reg_bcn_ctrl_1=%02x\n", __FUNCTION__, __LINE__, reg_bcn_ctrl_1);
67291 +
67292 + // b. driver set h2c cmd
67293 + rtl8192c_dis_beacon_fun_cmd(Adapter);
67294 +
67295 + /*
67296 + // FW Job for port 0
67297 +
67298 + c. 8051 set nettype to ap
67299 + d. 8051 check dma_int
67300 + e. 8051 set nettype to no_link
67301 + f.8051 dis_tsf_update 0x550 bit 4
67302 + g.8051 reset beacon function test count 0x553 bit0.
67303 + h.8051 disable beacon function 0x550 bit3
67304 + i. 8051 sent ready to driver
67305 +
67306 + */
67307 +
67308 + // The worst case is 100 + 15 ms
67309 + rtw_msleep_os(120);
67310 +
67311 + for (i=0; i< 10; i++) {
67312 + reg_bcn_ctrl_1 = rtw_read8(Adapter, REG_BCN_CTRL_1);
67313 + if ( (reg_bcn_ctrl_1 & BIT(3)) == 0 ) {
67314 + //DBG_871X("%s()-%d: BEACON_DISABLE_OFFLOAD finished! reg=%02x\n", __FUNCTION__, __LINE__, reg);
67315 + break;
67316 + }
67317 + DBG_871X("%s()-%d: BEACON_DISABLE_OFFLOAD not finished! REG_BCN_CTRL_1=%02x\n", __FUNCTION__, __LINE__, reg_bcn_ctrl_1);
67318 + DBG_871X("%s()-%d: reg_bcn_disable_cnt=%02x\n", __FUNCTION__, __LINE__, rtw_read8(Adapter, REG_FW_BCN_DIS_CNT));
67319 + DBG_871X("%s()-%d: REG_BCN_CTRL=%02x\n", __FUNCTION__, __LINE__, rtw_read8(Adapter, REG_BCN_CTRL));
67320 + DBG_871X("%s()-%d: FWISR=%08x\n", __FUNCTION__, __LINE__, rtw_read32(Adapter, REG_FWISR));
67321 + rtw_msleep_os(100);
67322 + }
67323 + DBG_871X("%s()-%d: reg_bcn_disable_cnt=%02x\n", __FUNCTION__, __LINE__, rtw_read8(Adapter, REG_FW_BCN_DIS_CNT));
67324 + DBG_871X("%s()-%d: reg_bcn_ctrl_1=%02x\n", __FUNCTION__, __LINE__, reg_bcn_ctrl_1);
67325 +
67326 +#else // CONFIG_BEACON_DISABLE_OFFLOAD
67327 +
67328 + //disable update TSF1
67329 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(4));
67330 +
67331 + //reset TSF1
67332 + rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(1));
67333 +
67334 + // disable Port1's beacon function
67335 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(3)));
67336 +
67337 +#endif // CONFIG_BEACON_DISABLE_OFFLOAD
67338 +
67339 + // j, Driver set 0x422 bit 6 =1
67340 + rtw_write8(Adapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) | BIT6);
67341 + pHalData->RegFwHwTxQCtrl |= BIT6;
67342 +
67343 + // k. re_download beacon pkt
67344 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE))
67345 + set_tx_beacon_cmd(pbuddy_adapter);
67346 +
67347 +
67348 + }
67349 + else // (Adapter->iface_type == IFACE_PORT1)
67350 + {
67351 + //disable update TSF
67352 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
67353 +
67354 + //reset TSF
67355 + rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(0));
67356 +
67357 + // Can't disable Port0's beacon function due to it is used by RA
67358 + }
67359 +#endif
67360 +}
67361 +
67362 +static void hw_var_set_mlme_sitesurvey(PADAPTER Adapter, u8 variable, u8* val)
67363 +{
67364 + u32 value_rcr, rcr_clear_bit, reg_bcn_ctl;
67365 + u16 value_rxfltmap2;
67366 + struct mlme_priv *pmlmepriv=&(Adapter->mlmepriv);
67367 +
67368 +
67369 +#ifdef CONFIG_CONCURRENT_MODE
67370 + if(Adapter->iface_type == IFACE_PORT1)
67371 + reg_bcn_ctl = REG_BCN_CTRL_1;
67372 + else
67373 +#endif
67374 + reg_bcn_ctl = REG_BCN_CTRL;
67375 +
67376 +#ifdef CONFIG_FIND_BEST_CHANNEL
67377 +
67378 + if( (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
67379 +#ifdef CONFIG_CONCURRENT_MODE
67380 + || (check_buddy_fwstate(Adapter, WIFI_AP_STATE) == _TRUE)
67381 +#endif
67382 +#ifdef CONFIG_TDLS
67383 + // TDLS will clear RCR_CBSSID_DATA bit for connection.
67384 + || ( Adapter->tdlsinfo.setup_state & TDLS_LINKED_STATE )
67385 +#endif // CONFIG_TDLS
67386 + )
67387 + {
67388 + rcr_clear_bit = RCR_CBSSID_BCN;
67389 + }
67390 + else
67391 + {
67392 + rcr_clear_bit = (RCR_CBSSID_BCN | RCR_CBSSID_DATA);
67393 + }
67394 +
67395 + // Recieve all data frames
67396 + value_rxfltmap2 = 0xFFFF;
67397 +
67398 +#else /* CONFIG_FIND_BEST_CHANNEL */
67399 +
67400 + rcr_clear_bit = RCR_CBSSID_BCN;
67401 +
67402 + //config RCR to receive different BSSID & not to receive data frame
67403 + value_rxfltmap2 = 0;
67404 +
67405 +#endif /* CONFIG_FIND_BEST_CHANNEL */
67406 +
67407 + value_rcr = rtw_read32(Adapter, REG_RCR);
67408 +
67409 + if(*((u8 *)val))//under sitesurvey
67410 + {
67411 + value_rcr &= ~(rcr_clear_bit);
67412 + rtw_write32(Adapter, REG_RCR, value_rcr);
67413 +
67414 + rtw_write16(Adapter, REG_RXFLTMAP2, value_rxfltmap2);
67415 +
67416 + if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_ADHOC_STATE |WIFI_ADHOC_MASTER_STATE)) {
67417 + //disable update TSF
67418 + rtw_write8(Adapter, reg_bcn_ctl, rtw_read8(Adapter, reg_bcn_ctl)|BIT(4));
67419 + }
67420 +
67421 +#ifdef CONFIG_CONCURRENT_MODE
67422 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
67423 + check_buddy_fwstate(Adapter, _FW_LINKED))
67424 + {
67425 + StopTxBeacon(Adapter);
67426 + }
67427 +#endif
67428 + }
67429 + else//sitesurvey done
67430 + {
67431 + if(check_fwstate(pmlmepriv, _FW_LINKED) || check_fwstate(pmlmepriv, WIFI_AP_STATE)
67432 +#ifdef CONFIG_CONCURRENT_MODE
67433 + || check_buddy_fwstate(Adapter, _FW_LINKED) || check_buddy_fwstate(Adapter, WIFI_AP_STATE)
67434 +#endif
67435 + )
67436 + {
67437 + //enable to rx data frame
67438 + rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
67439 + }
67440 +
67441 + if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_ADHOC_STATE |WIFI_ADHOC_MASTER_STATE)) {
67442 + //enable update TSF
67443 + rtw_write8(Adapter, reg_bcn_ctl, rtw_read8(Adapter, reg_bcn_ctl)&(~BIT(4)));
67444 + }
67445 +
67446 + value_rcr |= rcr_clear_bit;
67447 + rtw_write32(Adapter, REG_RCR, value_rcr);
67448 +
67449 +#ifdef CONFIG_CONCURRENT_MODE
67450 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
67451 + check_buddy_fwstate(Adapter, _FW_LINKED))
67452 + {
67453 + ResumeTxBeacon(Adapter);
67454 + }
67455 +#endif
67456 + }
67457 +}
67458 +
67459 +static void hw_var_set_mlme_join(PADAPTER Adapter, u8 variable, u8* val)
67460 +{
67461 +#ifdef CONFIG_CONCURRENT_MODE
67462 + u8 RetryLimit = 0x30;
67463 + u8 type = *((u8 *)val);
67464 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
67465 + struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
67466 +
67467 + if(type == 0) // prepare to join
67468 + {
67469 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
67470 + check_buddy_fwstate(Adapter, _FW_LINKED))
67471 + {
67472 + StopTxBeacon(Adapter);
67473 + }
67474 +
67475 + //enable to rx data frame.Accept all data frame
67476 + //rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)|RCR_ADF);
67477 + rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
67478 +
67479 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE))
67480 + rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN);
67481 + else
67482 + rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
67483 +
67484 + if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
67485 + {
67486 + RetryLimit = (pHalData->CustomerID == RT_CID_CCX) ? 7 : 48;
67487 + }
67488 + else // Ad-hoc Mode
67489 + {
67490 + RetryLimit = 0x7;
67491 + }
67492 + }
67493 + else if(type == 1) //joinbss_event call back when join res < 0
67494 + {
67495 + if(check_buddy_mlmeinfo_state(Adapter, _HW_STATE_NOLINK_))
67496 + rtw_write16(Adapter, REG_RXFLTMAP2,0x00);
67497 +
67498 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
67499 + check_buddy_fwstate(Adapter, _FW_LINKED))
67500 + {
67501 + ResumeTxBeacon(Adapter);
67502 +
67503 + //reset TSF 1/2 after ResumeTxBeacon
67504 + //rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(1)|BIT(0));
67505 +
67506 + }
67507 + }
67508 + else if(type == 2) //sta add event call back
67509 + {
67510 +
67511 + //enable update TSF
67512 + if(Adapter->iface_type == IFACE_PORT1)
67513 + rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(4)));
67514 + else
67515 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
67516 +
67517 +
67518 + if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE))
67519 + {
67520 + //fixed beacon issue for 8191su...........
67521 + rtw_write8(Adapter,0x542 ,0x02);
67522 + RetryLimit = 0x7;
67523 + }
67524 +
67525 +
67526 + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
67527 + check_buddy_fwstate(Adapter, _FW_LINKED))
67528 + {
67529 + ResumeTxBeacon(Adapter);
67530 +
67531 + //reset TSF 1/2 after ResumeTxBeacon
67532 + //rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(1)|BIT(0));
67533 + }
67534 +
67535 + }
67536 +
67537 + rtw_write16(Adapter, REG_RL, RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT);
67538 +
67539 +#endif
67540 +}
67541 +
67542 void SetHwReg8192CU(PADAPTER Adapter, u8 variable, u8* val)
67543 {
67544 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
67545 @@ -4652,74 +4949,13 @@ _func_enter_;
67546 }
67547 break;
67548 case HW_VAR_SET_OPMODE:
67549 - {
67550 - u8 val8;
67551 - u8 mode = *((u8 *)val);
67552 -
67553 - if((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_))
67554 - {
67555 - StopTxBeacon(Adapter);
67556 - rtw_write8(Adapter,REG_BCN_CTRL, 0x18);
67557 - }
67558 - else if((mode == _HW_STATE_ADHOC_) /*|| (mode == _HW_STATE_AP_)*/)
67559 - {
67560 - ResumeTxBeacon(Adapter);
67561 - rtw_write8(Adapter,REG_BCN_CTRL, 0x1a);
67562 - }
67563 - else if(mode == _HW_STATE_AP_)
67564 - {
67565 - ResumeTxBeacon(Adapter);
67566 -
67567 - rtw_write8(Adapter, REG_BCN_CTRL, 0x12);
67568 -
67569 -
67570 - //Set RCR
67571 - //rtw_write32(padapter, REG_RCR, 0x70002a8e);//CBSSID_DATA must set to 0
67572 - rtw_write32(Adapter, REG_RCR, 0x7000228e);//CBSSID_DATA must set to 0
67573 - //enable to rx data frame
67574 - rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF);
67575 - //enable to rx ps-poll
67576 - rtw_write16(Adapter, REG_RXFLTMAP1, 0x0400);
67577 -
67578 - //Beacon Control related register for first time
67579 - rtw_write8(Adapter, REG_BCNDMATIM, 0x02); // 2ms
67580 - rtw_write8(Adapter, REG_DRVERLYINT, 0x05);// 5ms
67581 - //rtw_write8(Adapter, REG_BCN_MAX_ERR, 0xFF);
67582 - rtw_write8(Adapter, REG_ATIMWND, 0x0a); // 10ms
67583 - rtw_write16(Adapter, REG_BCNTCFG, 0x00);
67584 - rtw_write16(Adapter, REG_TBTT_PROHIBIT, 0x6404);
67585 -
67586 - //reset TSF
67587 - rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(0));
67588 -
67589 - //enable TSF Function for if1
67590 - rtw_write8(Adapter, REG_BCN_CTRL, (EN_BCN_FUNCTION | EN_TXBCN_RPT));
67591 -
67592 - //enable update TSF for if1
67593 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67594 - {
67595 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
67596 - }
67597 - else
67598 - {
67599 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~(BIT(4)|BIT(5))));
67600 - }
67601 -
67602 - }
67603 -
67604 - val8 = rtw_read8(Adapter, MSR)&0x0c;
67605 - val8 |= mode;
67606 - rtw_write8(Adapter, MSR, val8);
67607 - }
67608 + hw_var_set_opmode(Adapter, variable, val);
67609 + break;
67610 + case HW_VAR_MAC_ADDR:
67611 + hw_var_set_macaddr(Adapter, variable, val);
67612 break;
67613 case HW_VAR_BSSID:
67614 - {
67615 - u8 idx = 0;
67616 - for(idx = 0 ; idx < 6; idx++)
67617 - {
67618 - rtw_write8(Adapter, (REG_BSSID+idx), val[idx]);
67619 - }
67620 - }
67621 + hw_var_set_bssid(Adapter, variable, val);
67622 break;
67623 case HW_VAR_BASIC_RATE:
67624 {
67625 @@ -4730,14 +4966,14 @@ _func_enter_;
67626 // Select RRSR (in Legacy-OFDM and CCK)
67627 // For 8190, we select only 24M, 12M, 6M, 11M, 5.5M, 2M, and 1M from the Basic rate.
67628 // We do not use other rates.
67629 - rtl8192c_HalSetBrateCfg( Adapter, val, &BrateCfg );
67630 + HalSetBrateCfg( Adapter, val, &BrateCfg );
67631
67632 //2011.03.30 add by Luke Lee
67633 //CCK 2M ACK should be disabled for some BCM and Atheros AP IOT
67634 //because CCK 2M has poor TXEVM
67635 //CCK 5.5M & 11M ACK should be enabled for better performance
67636
67637 - pHalData->BasicRateSet = BrateCfg = (BrateCfg |0xd) & 0x15d;
67638 + pHalData->BasicRateSet = BrateCfg = (BrateCfg |0xd) & 0x15d;
67639
67640 BrateCfg |= 0x01; // default enable 1M ACK rate
67641
67642 @@ -4746,6 +4982,7 @@ _func_enter_;
67643 // Set RRSR rate table.
67644 rtw_write8(Adapter, REG_RRSR, BrateCfg&0xff);
67645 rtw_write8(Adapter, REG_RRSR+1, (BrateCfg>>8)&0xff);
67646 + rtw_write8(Adapter, REG_RRSR+2, rtw_read8(Adapter, REG_RRSR+2)&0xf0);
67647
67648 // Set RTS initial rate
67649 while(BrateCfg > 0x1)
67650 @@ -4761,16 +4998,12 @@ _func_enter_;
67651 rtw_write8(Adapter, REG_TXPAUSE, *((u8 *)val));
67652 break;
67653 case HW_VAR_BCN_FUNC:
67654 - if(*((u8 *)val))
67655 - {
67656 - rtw_write8(Adapter, REG_BCN_CTRL, (EN_BCN_FUNCTION | EN_TXBCN_RPT));
67657 - }
67658 - else
67659 - {
67660 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~(EN_BCN_FUNCTION | EN_TXBCN_RPT)));
67661 - }
67662 + hw_var_set_bcn_func(Adapter, variable, val);
67663 break;
67664 case HW_VAR_CORRECT_TSF:
67665 +#ifdef CONFIG_CONCURRENT_MODE
67666 + hw_var_set_correct_tsf(Adapter, variable, val);
67667 +#else
67668 {
67669 u64 tsf;
67670 struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
67671 @@ -4803,38 +5036,26 @@ _func_enter_;
67672 ResumeTxBeacon(Adapter);
67673 }
67674 }
67675 +#endif
67676 break;
67677 case HW_VAR_CHECK_BSSID:
67678 if(*((u8 *)val))
67679 {
67680 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67681 - {
67682 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
67683 - }
67684 - else
67685 - {
67686 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA);
67687 - }
67688 + rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
67689 }
67690 else
67691 {
67692 u32 val32;
67693
67694 val32 = rtw_read32(Adapter, REG_RCR);
67695 -
67696 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67697 - {
67698 - val32 &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);
67699 - }
67700 - else
67701 - {
67702 - val32 &= 0xfffff7bf;
67703 - }
67704 -
67705 + val32 &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);
67706 rtw_write32(Adapter, REG_RCR, val32);
67707 }
67708 break;
67709 case HW_VAR_MLME_DISCONNECT:
67710 +#ifdef CONFIG_CONCURRENT_MODE
67711 + hw_var_set_mlme_disconnect(Adapter, variable, val);
67712 +#else
67713 {
67714 //Set RCR to not to receive data frame when NO LINK state
67715 //rtw_write32(Adapter, REG_RCR, rtw_read32(padapter, REG_RCR) & ~RCR_ADF);
67716 @@ -4845,90 +5066,17 @@ _func_enter_;
67717 rtw_write8(Adapter, REG_DUAL_TSF_RST, (BIT(0)|BIT(1)));
67718
67719 //disable update TSF
67720 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67721 - {
67722 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
67723 - }
67724 - else
67725 - {
67726 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)|BIT(5));
67727 - }
67728 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
67729 }
67730 +#endif
67731 break;
67732 case HW_VAR_MLME_SITESURVEY:
67733 - if(*((u8 *)val))//under sitesurvey
67734 - {
67735 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67736 - {
67737 - //config RCR to receive different BSSID & not to receive data frame
67738 - //pHalData->ReceiveConfig &= (~(RCR_CBSSID_DATA | RCR_CBSSID_BCN));
67739 - u32 v = rtw_read32(Adapter, REG_RCR);
67740 - v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN );//| RCR_ADF
67741 - rtw_write32(Adapter, REG_RCR, v);
67742 - //reject all data frame
67743 - rtw_write16(Adapter, REG_RXFLTMAP2,0x00);
67744 -
67745 - //disable update TSF
67746 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
67747 - }
67748 - else
67749 - {
67750 - //config RCR to receive different BSSID & not to receive data frame
67751 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR) & 0xfffff7bf);
67752 -
67753 -
67754 - //disable update TSF
67755 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)|BIT(5));
67756 - }
67757 - }
67758 - else//sitesurvey done
67759 - {
67760 - struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
67761 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
67762 -
67763 - if ((is_client_associated_to_ap(Adapter) == _TRUE) ||
67764 - ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) )
67765 - {
67766 - //enable to rx data frame
67767 - //rtw_write32(Adapter, REG_RCR, rtw_read32(padapter, REG_RCR)|RCR_ADF);
67768 - rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
67769 -
67770 - //enable update TSF
67771 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67772 - {
67773 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
67774 - }
67775 - else
67776 - {
67777 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~(BIT(4)|BIT(5))));
67778 - }
67779 - }
67780 - else if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
67781 - {
67782 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_ADF);
67783 -
67784 - //enable update TSF
67785 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67786 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
67787 - else
67788 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~(BIT(4)|BIT(5))));
67789 - }
67790 -
67791 -
67792 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67793 - {
67794 - if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
67795 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN);
67796 - else
67797 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
67798 - }
67799 - else
67800 - {
67801 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA);
67802 - }
67803 - }
67804 + hw_var_set_mlme_sitesurvey(Adapter, variable, val);
67805 break;
67806 case HW_VAR_MLME_JOIN:
67807 +#ifdef CONFIG_CONCURRENT_MODE
67808 + hw_var_set_mlme_join(Adapter, variable, val);
67809 +#else
67810 {
67811 u8 RetryLimit = 0x30;
67812 u8 type = *((u8 *)val);
67813 @@ -4940,14 +5088,7 @@ _func_enter_;
67814 //rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)|RCR_ADF);
67815 rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
67816
67817 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67818 - {
67819 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
67820 - }
67821 - else
67822 - {
67823 - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA);
67824 - }
67825 + rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
67826
67827 if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
67828 {
67829 @@ -4960,33 +5101,12 @@ _func_enter_;
67830 }
67831 else if(type == 1) //joinbss_event call back when join res < 0
67832 {
67833 - //if(IS_NORMAL_CHIP(pHalData->VersionID))
67834 - //{
67835 - //config RCR to receive different BSSID & not to receive data frame during linking
67836 - // u32 v = rtw_read32(Adapter, REG_RCR);
67837 - // v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN );//| RCR_ADF
67838 - // rtw_write32(Adapter, REG_RCR, v);
67839 - //}
67840 - //else
67841 - //{
67842 - //config RCR to receive different BSSID & not to receive data frame during linking
67843 - // rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR) & 0xfffff7bf);
67844 - //}
67845 -
67846 rtw_write16(Adapter, REG_RXFLTMAP2,0x00);
67847 }
67848 else if(type == 2) //sta add event call back
67849 {
67850 - if(IS_NORMAL_CHIP(pHalData->VersionID))
67851 - {
67852 - //enable update TSF
67853 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
67854 - }
67855 - else
67856 - {
67857 - //enable update TSF
67858 - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~(BIT(4)|BIT(5))));
67859 - }
67860 + //enable update TSF
67861 + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
67862
67863 if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE))
67864 {
67865 @@ -4998,7 +5118,18 @@ _func_enter_;
67866
67867 rtw_write16(Adapter, REG_RL, RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT);
67868 }
67869 +#endif
67870 + break;
67871 +
67872 + case HW_VAR_ON_RCR_AM:
67873 + rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_AM);
67874 + DBG_871X("%s, %d, RCR= %x \n", __FUNCTION__,__LINE__, rtw_read32(Adapter, REG_RCR));
67875 break;
67876 + case HW_VAR_OFF_RCR_AM:
67877 + rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)& (~RCR_AM));
67878 + DBG_871X("%s, %d, RCR= %x \n", __FUNCTION__,__LINE__, rtw_read32(Adapter, REG_RCR));
67879 + break;
67880 +
67881 case HW_VAR_BEACON_INTERVAL:
67882 rtw_write16(Adapter, REG_BCN_INTERVAL, *((u16 *)val));
67883 break;
67884 @@ -5027,8 +5158,9 @@ _func_enter_;
67885 }
67886 }
67887 break;
67888 - case HW_VAR_SIFS:
67889 + case HW_VAR_RESP_SIFS:
67890 {
67891 +#if 0
67892 // SIFS for OFDM Data ACK
67893 rtw_write8(Adapter, REG_SIFS_CTX+1, val[0]);
67894 // SIFS for OFDM consecutive tx like CTS data!
67895 @@ -5038,8 +5170,17 @@ _func_enter_;
67896 rtw_write8(Adapter,REG_MAC_SPEC_SIFS+1, val[0]);
67897
67898 // 20100719 Joseph: Revise SIFS setting due to Hardware register definition change.
67899 - rtw_write8(Adapter, REG_R2T_SIFS+1, val[0]);
67900 - rtw_write8(Adapter, REG_T2T_SIFS+1, val[0]);
67901 + rtw_write8(Adapter, REG_R2T_SIFS+1, val[0]); //0x08 - CCK
67902 + rtw_write8(Adapter, REG_T2T_SIFS+1, val[0]); //0x0e - OFDM
67903 +#else
67904 + //SIFS_Timer = 0x0a0a0808;
67905 + //RESP_SIFS for CCK
67906 + rtw_write8(Adapter, REG_R2T_SIFS, val[0]); // SIFS_T2T_CCK (0x08)
67907 + rtw_write8(Adapter, REG_R2T_SIFS+1, val[1]); //SIFS_R2T_CCK(0x08)
67908 + //RESP_SIFS for OFDM
67909 + rtw_write8(Adapter, REG_T2T_SIFS, val[2]); //SIFS_T2T_OFDM (0x0a)
67910 + rtw_write8(Adapter, REG_T2T_SIFS+1, val[3]); //SIFS_R2T_OFDM(0x0a)
67911 +#endif
67912 }
67913 break;
67914 case HW_VAR_ACK_PREAMBLE:
67915 @@ -5047,8 +5188,8 @@ _func_enter_;
67916 u8 regTmp;
67917 u8 bShortPreamble = *( (PBOOLEAN)val );
67918 // Joseph marked out for Netgear 3500 TKIP channel 7 issue.(Temporarily)
67919 - //regTmp = (pHalData->nCur40MhzPrimeSC)<<5;
67920 - regTmp = 0;
67921 + regTmp = (pHalData->nCur40MhzPrimeSC)<<5;
67922 + //regTmp = 0;
67923 if(bShortPreamble)
67924 regTmp |= 0x80;
67925
67926 @@ -5056,7 +5197,11 @@ _func_enter_;
67927 }
67928 break;
67929 case HW_VAR_SEC_CFG:
67930 +#ifdef CONFIG_CONCURRENT_MODE
67931 + rtw_write8(Adapter, REG_SECCFG, 0x0c|BIT(5));// enable tx enc and rx dec engine, and no key search for MC/BC
67932 +#else
67933 rtw_write8(Adapter, REG_SECCFG, *((u8 *)val));
67934 +#endif
67935 break;
67936 case HW_VAR_DM_FLAG:
67937 pdmpriv->DMFlag = *((u8 *)val);
67938 @@ -5240,7 +5385,6 @@ _func_enter_;
67939 u8 threshold = *((u8 *)val);
67940 if( threshold == 0)
67941 {
67942 -
67943 threshold = pHalData->UsbRxAggPageCount;
67944 }
67945 rtw_write8(Adapter, REG_RXDMA_AGG_PG_TH, threshold);
67946 @@ -5269,14 +5413,14 @@ _func_enter_;
67947 rtl8192c_set_FwJoinBssReport_cmd(Adapter, mstatus);
67948 }
67949 break;
67950 -#ifdef CONFIG_P2P
67951 +#ifdef CONFIG_P2P_PS
67952 case HW_VAR_H2C_FW_P2P_PS_OFFLOAD:
67953 {
67954 u8 p2p_ps_state = (*(u8 *)val);
67955 rtl8192c_set_p2p_ps_offload_cmd(Adapter, p2p_ps_state);
67956 }
67957 break;
67958 -#endif //CONFIG_P2P
67959 +#endif // CONFIG_P2P_PS
67960 #ifdef CONFIG_TDLS
67961 case HW_VAR_TDLS_WRCR:
67962 rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)&(~ BIT(6) ));
67963 @@ -5305,18 +5449,20 @@ _func_enter_;
67964 {
67965 DIG_T *pDigTable = &pdmpriv->DM_DigTable;
67966 u32 rx_gain = ((u32 *)(val))[0];
67967 -
67968 +
67969 if(rx_gain == 0xff){//restore rx gain
67970 pDigTable->CurIGValue = pDigTable->BackupIGValue;
67971 - rtw_write8(Adapter,rOFDM0_XAAGCCore1, pDigTable->CurIGValue);
67972 - rtw_write8(Adapter,rOFDM0_XBAGCCore1, pDigTable->CurIGValue);
67973 + PHY_SetBBReg(Adapter, rOFDM0_XAAGCCore1, 0x7f,pDigTable->CurIGValue );
67974 + PHY_SetBBReg(Adapter, rOFDM0_XBAGCCore1, 0x7f,pDigTable->CurIGValue);
67975 }
67976 else{
67977 - pDigTable->BackupIGValue = pDigTable->CurIGValue;
67978 + pDigTable->BackupIGValue = pDigTable->CurIGValue;
67979 PHY_SetBBReg(Adapter, rOFDM0_XAAGCCore1, 0x7f,rx_gain );
67980 PHY_SetBBReg(Adapter, rOFDM0_XBAGCCore1, 0x7f,rx_gain);
67981 - pDigTable->CurIGValue = rx_gain;
67982 + pDigTable->CurIGValue = (u8)rx_gain;
67983 }
67984 +
67985 +
67986 }
67987 break;
67988 case HW_VAR_TRIGGER_GPIO_0:
67989 @@ -5390,7 +5536,7 @@ _func_enter_;
67990 }
67991 }
67992 break;
67993 - case HW_VAR_WOWLAN:
67994 + case HW_VAR_WOWLAN:
67995 #ifdef CONFIG_WOWLAN
67996 {
67997 struct wowlan_ioctl_param *poidparam;
67998 @@ -5493,6 +5639,42 @@ _func_enter_;
67999
68000 break;
68001 #endif //CONFIG_WOWLAN
68002 + case HW_VAR_CHECK_TXBUF:
68003 +#ifdef CONFIG_CONCURRENT_MODE
68004 + {
68005 + int i;
68006 + u8 RetryLimit = 0x01;
68007 +
68008 + //rtw_write16(Adapter, REG_RL,0x0101);
68009 + rtw_write16(Adapter, REG_RL, RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT);
68010 +
68011 + for(i=0;i<1000;i++)
68012 + {
68013 + if(rtw_read32(Adapter, 0x200) != rtw_read32(Adapter, 0x204))
68014 + {
68015 + //DBG_871X("packet in tx packet buffer - 0x204=%x, 0x200=%x (%d)\n", rtw_read32(Adapter, 0x204), rtw_read32(Adapter, 0x200), i);
68016 + rtw_msleep_os(10);
68017 + }
68018 + else
68019 + {
68020 + DBG_871X("no packet in tx packet buffer (%d)\n", i);
68021 + break;
68022 + }
68023 + }
68024 +
68025 + RetryLimit = 0x30;
68026 + rtw_write16(Adapter, REG_RL, RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT);
68027 +
68028 + }
68029 +#endif
68030 + break;
68031 + case HW_VAR_BCN_VALID:
68032 + //BCN_VALID, BIT16 of REG_TDECTRL = BIT0 of REG_TDECTRL+2, write 1 to clear, Clear by sw
68033 + rtw_write8(Adapter, REG_TDECTRL+2, rtw_read8(Adapter, REG_TDECTRL+2) | BIT0);
68034 + break;
68035 + case HW_VAR_USB_RXAGG_PAGE_TO:
68036 + rtw_write8(Adapter, REG_USB_DMA_AGG_TO, *((u8 *)val));
68037 + break;
68038 default:
68039 break;
68040 }
68041 @@ -5513,15 +5695,9 @@ _func_enter_;
68042 case HW_VAR_TXPAUSE:
68043 val[0] = rtw_read8(Adapter, REG_TXPAUSE);
68044 break;
68045 - case HW_VAR_TX_BCN_DONE:
68046 - {
68047 - u32 xmitbcnDown;
68048 - xmitbcnDown= rtw_read32(Adapter, REG_TDECTRL);
68049 - if(xmitbcnDown & BCN_VALID ){
68050 - rtw_write32(Adapter,REG_TDECTRL, xmitbcnDown | BCN_VALID ); // write 1 to clear, Clear by sw
68051 - val[0] = _TRUE;
68052 - }
68053 - }
68054 + case HW_VAR_BCN_VALID:
68055 + //BCN_VALID, BIT16 of REG_TDECTRL = BIT0 of REG_TDECTRL+2
68056 + val[0] = (BIT0 & rtw_read8(Adapter, REG_TDECTRL+2))?_TRUE:_FALSE;
68057 break;
68058 case HW_VAR_DM_FLAG:
68059 val[0] = pHalData->dmpriv.DMFlag;
68060 @@ -5559,6 +5735,12 @@ _func_enter_;
68061 case HW_VAR_EFUSE_BYTES: // To get EFUE total used bytes, added by Roger, 2008.12.22.
68062 *((u16 *)(val)) = pHalData->EfuseUsedBytes;
68063 break;
68064 + case HW_VAR_VID:
68065 + *((u16 *)(val)) = pHalData->EEPROMVID;
68066 + break;
68067 + case HW_VAR_PID:
68068 + *((u16 *)(val)) = pHalData->EEPROMPID;
68069 + break;
68070 default:
68071 break;
68072 }
68073 @@ -5583,7 +5765,25 @@ GetHalDefVar8192CUsb(
68074 switch(eVariable)
68075 {
68076 case HAL_DEF_UNDERCORATEDSMOOTHEDPWDB:
68077 +#if 0 //trunk
68078 + {
68079 + struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
68080 + struct sta_priv * pstapriv = &Adapter->stapriv;
68081 + struct sta_info * psta;
68082 + psta = rtw_get_stainfo(pstapriv, pmlmepriv->cur_network.network.MacAddress);
68083 + if(psta)
68084 + {
68085 + *((int *)pValue) = psta->rssi_stat.UndecoratedSmoothedPWDB;
68086 + }
68087 + }
68088 +#else //v4 branch
68089 + //if(check_fwstate(&Adapter->mlmepriv, WIFI_STATION_STATE) == _TRUE){
68090 *((int *)pValue) = pHalData->dmpriv.UndecoratedSmoothedPWDB;
68091 + //}
68092 + //else{
68093 +
68094 + //}
68095 +#endif
68096 break;
68097 case HAL_DEF_IS_SUPPORT_ANT_DIV:
68098 #ifdef CONFIG_ANTENNA_DIVERSITY
68099 @@ -5609,7 +5809,7 @@ GetHalDefVar8192CUsb(
68100 break;
68101 case HAL_DEF_DBG_DM_FUNC:
68102 *(( u8*)pValue) = pHalData->dmpriv.DMFlag;
68103 - break;
68104 + break;
68105 default:
68106 //RT_TRACE(COMP_INIT, DBG_WARNING, ("GetHalDefVar8192CUsb(): Unkown variable: %d!\n", eVariable));
68107 bResult = _FALSE;
68108 @@ -5724,6 +5924,7 @@ void _update_response_rate(_adapter *padapter,unsigned int mask)
68109 // Set RRSR rate table.
68110 rtw_write8(padapter, REG_RRSR, mask&0xff);
68111 rtw_write8(padapter,REG_RRSR+1, (mask>>8)&0xff);
68112 +
68113
68114 // Set RTS initial rate
68115 while(mask > 0x1)
68116 @@ -5766,6 +5967,9 @@ void UpdateHalRAMask8192CUsb(PADAPTER padapter, u32 mac_id)
68117 switch (mac_id)
68118 {
68119 case 0:// for infra mode
68120 +#ifdef CONFIG_CONCURRENT_MODE
68121 + case 2:// first station uses macid=0, second station uses macid=2
68122 +#endif
68123 supportRateNum = rtw_get_rateset_len(cur_network->SupportedRates);
68124 networkType = judge_network_type(padapter, cur_network->SupportedRates, supportRateNum) & 0xf;
68125 //pmlmeext->cur_wireless_mode = networkType;
68126 @@ -5796,17 +6000,29 @@ void UpdateHalRAMask8192CUsb(PADAPTER padapter, u32 mac_id)
68127 break;
68128
68129 default: //for each sta in IBSS
68130 - supportRateNum = rtw_get_rateset_len(pmlmeinfo->FW_sta_info[mac_id].SupportedRates);
68131 - networkType = judge_network_type(padapter, pmlmeinfo->FW_sta_info[mac_id].SupportedRates, supportRateNum) & 0xf;
68132 - //pmlmeext->cur_wireless_mode = networkType;
68133 - raid = networktype_to_raid(networkType);
68134 -
68135 - mask = update_supported_rate(cur_network->SupportedRates, supportRateNum);
68136 - mask |= ((raid<<28)&0xf0000000);
68137 +#ifdef CONFIG_TDLS
68138 + if(psta->tdls_sta_state & TDLS_LINKED_STATE)
68139 + {
68140 + shortGIrate = update_sgi_tdls(padapter, psta);
68141 + mask = update_mask_tdls(padapter, psta);
68142 + raid = mask>>28;
68143 + break;
68144 + }
68145 + else
68146 +#endif //CONFIG_TDLS
68147 + {
68148 + supportRateNum = rtw_get_rateset_len(pmlmeinfo->FW_sta_info[mac_id].SupportedRates);
68149 + networkType = judge_network_type(padapter, pmlmeinfo->FW_sta_info[mac_id].SupportedRates, supportRateNum) & 0xf;
68150 + //pmlmeext->cur_wireless_mode = networkType;
68151 + raid = networktype_to_raid(networkType);
68152 +
68153 + mask = update_supported_rate(cur_network->SupportedRates, supportRateNum);
68154 + mask |= ((raid<<28)&0xf0000000);
68155
68156 - //todo: support HT in IBSS
68157 -
68158 - break;
68159 + //todo: support HT in IBSS
68160 +
68161 + break;
68162 + }
68163 }
68164
68165 #ifdef CONFIG_BT_COEXIST
68166 @@ -5942,6 +6158,7 @@ static void rtl8192cu_init_default_value(_adapter * padapter)
68167 for(i = 0; i < HP_THERMAL_NUM; i++)
68168 pdmpriv->ThermalValue_HP[i] = 0;
68169 }
68170 +
68171 static u8 rtl8192cu_ps_func(PADAPTER Adapter,HAL_INTF_PS_FUNC efunc_id, u8 *val)
68172 {
68173 u8 bResult = _TRUE;
68174 @@ -5949,10 +6166,10 @@ static u8 rtl8192cu_ps_func(PADAPTER Adapter,HAL_INTF_PS_FUNC efunc_id, u8 *val)
68175
68176 #if defined(CONFIG_AUTOSUSPEND) && defined(SUPPORT_HW_RFOFF_DETECTED)
68177 case HAL_USB_SELECT_SUSPEND:
68178 - {
68179 + {
68180 u8 bfwpoll = *(( u8*)val);
68181 rtl8192c_set_FwSelectSuspend_cmd(Adapter,bfwpoll ,500);//note fw to support hw power down ping detect
68182 - }
68183 + }
68184 break;
68185 #endif //CONFIG_AUTOSUSPEND && SUPPORT_HW_RFOFF_DETECTED
68186
68187 @@ -5961,6 +6178,7 @@ static u8 rtl8192cu_ps_func(PADAPTER Adapter,HAL_INTF_PS_FUNC efunc_id, u8 *val)
68188 }
68189 return bResult;
68190 }
68191 +
68192 void rtl8192cu_set_hal_ops(_adapter * padapter)
68193 {
68194 struct hal_ops *pHalFunc = &padapter->HalFunc;
68195 @@ -5972,6 +6190,7 @@ _func_enter_;
68196 DBG_8192C("cant not alloc memory for HAL DATA \n");
68197 }
68198 //_rtw_memset(padapter->HalData, 0, sizeof(HAL_DATA_TYPE));
68199 + padapter->hal_data_sz = sizeof(HAL_DATA_TYPE);
68200
68201 pHalFunc->hal_init = &rtl8192cu_hal_init;
68202 pHalFunc->hal_deinit = &rtl8192cu_hal_deinit;
68203 @@ -5991,7 +6210,7 @@ _func_enter_;
68204 pHalFunc->DeInitSwLeds = &rtl8192cu_DeInitSwLeds;
68205 #else //case of hw led or no led
68206 pHalFunc->InitSwLeds = NULL;
68207 - pHalFunc->DeInitSwLeds = NULL;
68208 + pHalFunc->DeInitSwLeds = NULL;
68209 #endif//CONFIG_SW_LED
68210
68211 //pHalFunc->dm_init = &rtl8192c_init_dm_priv;
68212 @@ -6017,13 +6236,14 @@ _func_enter_;
68213 //pHalFunc->Add_RateATid = &rtl8192c_Add_RateATid;
68214
68215 //#ifdef CONFIG_SW_ANTENNA_DIVERSITY
68216 - //pHalFunc->SwAntDivBeforeLinkHandler = &SwAntDivBeforeLink8192C;
68217 - //pHalFunc->SwAntDivCompareHandler = &SwAntDivCompare8192C;
68218 + //pHalFunc->AntDivBeforeLinkHandler = &SwAntDivBeforeLink8192C;
68219 + //pHalFunc->AntDivCompareHandler = &SwAntDivCompare8192C;
68220 //#endif
68221
68222 pHalFunc->hal_xmit = &rtl8192cu_hal_xmit;
68223 pHalFunc->mgnt_xmit = &rtl8192cu_mgnt_xmit;
68224 -
68225 + pHalFunc->hal_xmitframe_enqueue = &rtl8192cu_hal_xmitframe_enqueue;
68226 +
68227 //pHalFunc->read_bbreg = &rtl8192c_PHY_QueryBBReg;
68228 //pHalFunc->write_bbreg = &rtl8192c_PHY_SetBBReg;
68229 //pHalFunc->read_rfreg = &rtl8192c_PHY_QueryRFReg;
68230 @@ -6033,7 +6253,7 @@ _func_enter_;
68231 pHalFunc->hostap_mgnt_xmit_entry = &rtl8192cu_hostap_mgnt_xmit_entry;
68232 #endif
68233 pHalFunc->interface_ps_func = &rtl8192cu_ps_func;
68234 -
68235 +
68236 rtl8192c_set_hal_ops(pHalFunc);
68237 _func_exit_;
68238
68239 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c
68240 index 4d01b3c..9523337 100644
68241 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c
68242 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c
68243 @@ -16,8 +16,7 @@
68244 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
68245 *
68246 *
68247 -
68248 -******************************************************************************/
68249 + ******************************************************************************/
68250 #define _HCI_OPS_OS_C_
68251
68252 #include <drv_conf.h>
68253 @@ -870,7 +869,7 @@ _func_enter_;
68254
68255
68256 //not to consider tx fragment
68257 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
68258 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
68259
68260
68261 #if 1
68262 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c
68263 index d6f3376..2d627d3 100644
68264 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c
68265 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c
68266 @@ -16,8 +16,7 @@
68267 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
68268 *
68269 *
68270 -
68271 -******************************************************************************/
68272 + ******************************************************************************/
68273 #define _HCI_OPS_OS_C_
68274
68275 #include <drv_conf.h>
68276 @@ -35,41 +34,11 @@
68277
68278 #endif
68279
68280 -struct zero_bulkout_context{
68281 - void *pbuf;
68282 - void *purb;
68283 - void *pirp;
68284 - void *padapter;
68285 -};
68286 -
68287 -#define REALTEK_USB_VENQT_MAX_BUF_SIZE 254
68288 -
68289 -#define RTW_USB_CONTROL_MSG_TIMEOUT_TEST 10 //ms
68290 -#define RTW_USB_CONTROL_MSG_TIMEOUT 500 //ms
68291 -//#define RTW_USB_CONTROL_MSG_TIMEOUT 5000 //ms
68292 -
68293 -#if defined(CONFIG_VENDOR_REQ_RETRY) && defined(CONFIG_USB_VENDOR_REQ_MUTEX)
68294 -//vendor req retry should be in the situation when each vendor req is atomically submitted from others
68295 -#define MAX_USBCTRL_VENDORREQ_TIMES 10
68296 -#else
68297 -#define MAX_USBCTRL_VENDORREQ_TIMES 1
68298 -#endif
68299 -
68300 -#define RTW_USB_BULKOUT_TIMEOUT 5000 //ms
68301 -
68302 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) || (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
68303 -#define _usbctrl_vendorreq_async_callback(urb, regs) _usbctrl_vendorreq_async_callback(urb)
68304 -#define usb_bulkout_zero_complete(purb, regs) usb_bulkout_zero_complete(purb)
68305 -#define usb_write_mem_complete(purb, regs) usb_write_mem_complete(purb)
68306 -#define usb_write_port_complete(purb, regs) usb_write_port_complete(purb)
68307 -#define usb_read_port_complete(purb, regs) usb_read_port_complete(purb)
68308 -#define usb_read_interrupt_complete(purb, regs) usb_read_interrupt_complete(purb)
68309 -#endif
68310 -
68311 -static int usbctrl_vendorreq(struct dvobj_priv *pdvobjpriv, u8 request, u16 value, u16 index, void *pdata, u16 len, u8 requesttype)
68312 +static int usbctrl_vendorreq(struct intf_hdl *pintfhdl, u8 request, u16 value, u16 index, void *pdata, u16 len, u8 requesttype)
68313 {
68314 - _adapter *padapter = pdvobjpriv->padapter ;
68315 - struct usb_device *udev=pdvobjpriv->pusbdev;
68316 + _adapter *padapter = pintfhdl->padapter;
68317 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
68318 + struct usb_device *udev = pdvobjpriv->pusbdev;
68319
68320 unsigned int pipe;
68321 int status = 0;
68322 @@ -84,6 +53,16 @@ static int usbctrl_vendorreq(struct dvobj_priv *pdvobjpriv, u8 request, u16 val
68323 u8 tmp_buf[MAX_USB_IO_CTL_SIZE];
68324 #endif
68325
68326 +#ifdef CONFIG_CONCURRENT_MODE
68327 + if(padapter->adapter_type > PRIMARY_ADAPTER)
68328 + {
68329 + padapter = padapter->pbuddy_adapter;
68330 + pdvobjpriv = adapter_to_dvobj(padapter);
68331 + udev = pdvobjpriv->pusbdev;
68332 + }
68333 +#endif
68334 +
68335 +
68336 //DBG_871X("%s %s:%d\n",__FUNCTION__, current->comm, current->pid);
68337
68338 if((padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx)){
68339 @@ -153,7 +132,7 @@ static int usbctrl_vendorreq(struct dvobj_priv *pdvobjpriv, u8 request, u16 val
68340
68341 if ( status == len) // Success this control transfer.
68342 {
68343 - rtw_reset_continual_urb_error(&padapter->dvobjpriv);
68344 + rtw_reset_continual_urb_error(pdvobjpriv);
68345 if ( requesttype == 0x01 )
68346 { // For Control read transfer, we have to copy the read data from pIo_buf to pdata.
68347 _rtw_memcpy( pdata, pIo_buf, len );
68348 @@ -186,7 +165,7 @@ static int usbctrl_vendorreq(struct dvobj_priv *pdvobjpriv, u8 request, u16 val
68349 }
68350 }
68351
68352 - if(rtw_inc_and_chk_continual_urb_error(&padapter->dvobjpriv) == _TRUE ){
68353 + if(rtw_inc_and_chk_continual_urb_error(pdvobjpriv) == _TRUE ){
68354 padapter->bSurpriseRemoved = _TRUE;
68355 break;
68356 }
68357 @@ -220,8 +199,7 @@ static u8 usb_read8(struct intf_hdl *pintfhdl, u32 addr)
68358 u16 wvalue;
68359 u16 index;
68360 u16 len;
68361 - u32 data=0;
68362 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
68363 + u32 data=0;
68364
68365 _func_enter_;
68366
68367 @@ -232,7 +210,7 @@ static u8 usb_read8(struct intf_hdl *pintfhdl, u32 addr)
68368 wvalue = (u16)(addr&0x0000ffff);
68369 len = 1;
68370
68371 - usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, &data, len, requesttype);
68372 + usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype);
68373
68374 _func_exit_;
68375
68376 @@ -248,7 +226,6 @@ static u16 usb_read16(struct intf_hdl *pintfhdl, u32 addr)
68377 u16 index;
68378 u16 len;
68379 u32 data=0;
68380 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
68381
68382 _func_enter_;
68383
68384 @@ -259,7 +236,7 @@ static u16 usb_read16(struct intf_hdl *pintfhdl, u32 addr)
68385 wvalue = (u16)(addr&0x0000ffff);
68386 len = 2;
68387
68388 - usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, &data, len, requesttype);
68389 + usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype);
68390
68391 _func_exit_;
68392
68393 @@ -275,7 +252,6 @@ static u32 usb_read32(struct intf_hdl *pintfhdl, u32 addr)
68394 u16 index;
68395 u16 len;
68396 u32 data=0;
68397 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
68398
68399 _func_enter_;
68400
68401 @@ -286,7 +262,7 @@ static u32 usb_read32(struct intf_hdl *pintfhdl, u32 addr)
68402 wvalue = (u16)(addr&0x0000ffff);
68403 len = 4;
68404
68405 - usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, &data, len, requesttype);
68406 + usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype);
68407
68408 _func_exit_;
68409
68410 @@ -303,7 +279,6 @@ static int usb_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val)
68411 u16 len;
68412 u32 data;
68413 int ret;
68414 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
68415
68416 _func_enter_;
68417
68418 @@ -317,7 +292,7 @@ static int usb_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val)
68419 data = val;
68420 data = cpu_to_le32(data&0x000000ff);
68421
68422 - ret = usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, &data, len, requesttype);
68423 + ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype);
68424
68425 _func_exit_;
68426
68427 @@ -334,7 +309,6 @@ static int usb_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val)
68428 u16 len;
68429 u32 data;
68430 int ret;
68431 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
68432
68433 _func_enter_;
68434
68435 @@ -348,7 +322,7 @@ static int usb_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val)
68436 data = val;
68437 data = cpu_to_le32(data&0x0000ffff);
68438
68439 - ret = usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, &data, len, requesttype);
68440 + ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype);
68441
68442 _func_exit_;
68443
68444 @@ -365,7 +339,6 @@ static int usb_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
68445 u16 len;
68446 u32 data;
68447 int ret;
68448 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
68449
68450 _func_enter_;
68451
68452 @@ -378,14 +351,14 @@ static int usb_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
68453 data = cpu_to_le32(val);
68454
68455
68456 - ret =usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, &data, len, requesttype);
68457 + ret =usbctrl_vendorreq(pintfhdl, request, wvalue, index, &data, len, requesttype);
68458
68459 _func_exit_;
68460
68461 return ret;
68462
68463 }
68464 -#define VENDOR_CMD_MAX_DATA_LEN 254
68465 +
68466 static int usb_writeN(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata)
68467 {
68468 u8 request;
68469 @@ -395,7 +368,6 @@ static int usb_writeN(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata
68470 u16 len;
68471 u8 buf[VENDOR_CMD_MAX_DATA_LEN]={0};
68472 int ret;
68473 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
68474
68475 _func_enter_;
68476
68477 @@ -407,7 +379,7 @@ static int usb_writeN(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata
68478 len = length;
68479 _rtw_memcpy(buf, pdata, len );
68480
68481 - ret = usbctrl_vendorreq(pdvobjpriv, request, wvalue, index, buf, len, requesttype);
68482 + ret = usbctrl_vendorreq(pintfhdl, request, wvalue, index, buf, len, requesttype);
68483
68484 _func_exit_;
68485
68486 @@ -415,271 +387,6 @@ static int usb_writeN(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata
68487
68488 }
68489
68490 -#ifdef CONFIG_USB_SUPPORT_ASYNC_VDN_REQ
68491 -static void _usbctrl_vendorreq_async_callback(struct urb *urb, struct pt_regs *regs)
68492 -{
68493 - if(urb){
68494 - if(urb->context){
68495 - kfree(urb->context);
68496 - }
68497 - usb_free_urb(urb);
68498 - }
68499 -}
68500 -
68501 -static int _usbctrl_vendorreq_async_write(struct usb_device *udev, u8 request, u16 value, u16 index, void *pdata, u16 len, u8 requesttype)
68502 -{
68503 -
68504 - int rc;
68505 - unsigned int pipe;
68506 - u8 reqtype;
68507 - struct usb_ctrlrequest *dr;
68508 - struct urb *urb;
68509 - struct rtl819x_async_write_data {
68510 - u8 data[REALTEK_USB_VENQT_MAX_BUF_SIZE];
68511 - struct usb_ctrlrequest dr;
68512 - } *buf;
68513 -
68514 - if (requesttype == VENDOR_READ){
68515 - pipe = usb_rcvctrlpipe(udev, 0);//read_in
68516 - reqtype = REALTEK_USB_VENQT_READ;
68517 - }
68518 - else {
68519 - pipe = usb_sndctrlpipe(udev, 0);//write_out
68520 - reqtype = REALTEK_USB_VENQT_WRITE;
68521 - }
68522 -
68523 - //buf = kmalloc(sizeof(*buf), GFP_ATOMIC);
68524 - buf = (struct rtl819x_async_write_data *)rtw_zmalloc(sizeof(*buf));
68525 - if (!buf) {
68526 - rc = -ENOMEM;
68527 - goto exit;
68528 - }
68529 -
68530 - urb = usb_alloc_urb(0, GFP_ATOMIC);
68531 - if (!urb) {
68532 - rtw_mfree((u8*)buf,sizeof(*buf));
68533 - rc = -ENOMEM;
68534 - goto exit;
68535 - }
68536 -
68537 - dr = &buf->dr;
68538 -
68539 - dr->bRequestType = reqtype;
68540 - dr->bRequest = request;
68541 - dr->wValue = cpu_to_le16(value);
68542 - dr->wIndex = cpu_to_le16(index);
68543 - dr->wLength = cpu_to_le16(len);
68544 -
68545 - _rtw_memcpy(buf, pdata, len);
68546 -
68547 - usb_fill_control_urb(urb, udev, pipe,
68548 - (unsigned char *)dr, buf, len,
68549 - _usbctrl_vendorreq_async_callback, buf);
68550 -
68551 - rc = usb_submit_urb(urb, GFP_ATOMIC);
68552 - if (rc < 0) {
68553 - rtw_mfree((u8*)buf,sizeof(*buf));
68554 - usb_free_urb(urb);
68555 - }
68556 -
68557 -exit:
68558 - return rc;
68559 -
68560 -}
68561 -
68562 -static int usb_write_async(struct usb_device *udev, u32 addr, u32 val, u16 len)
68563 -{
68564 - u8 request;
68565 - u8 requesttype;
68566 - u16 wvalue;
68567 - u16 index;
68568 - u32 data;
68569 - int ret;
68570 -
68571 - requesttype = VENDOR_WRITE;//write_out
68572 - request = REALTEK_USB_VENQT_CMD_REQ;
68573 - index = REALTEK_USB_VENQT_CMD_IDX;//n/a
68574 -
68575 - wvalue = (u16)(addr&0x0000ffff);
68576 - data = val & (0xffffffff >> ((4 - len) * 8));
68577 - data = cpu_to_le32(data);
68578 -
68579 - ret = _usbctrl_vendorreq_async_write(udev, request, wvalue, index, &data, len, requesttype);
68580 -
68581 - return ret;
68582 -}
68583 -static int usb_async_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val)
68584 -{
68585 - u32 data;
68586 - int ret;
68587 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
68588 - struct usb_device *udev=pdvobjpriv->pusbdev;
68589 -
68590 - _func_enter_;
68591 - data = cpu_to_le32(val & 0xFF);
68592 - ret = usb_write_async(udev, addr, val, 1);
68593 - _func_exit_;
68594 -
68595 - return ret;
68596 -}
68597 -
68598 -static int usb_async_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val)
68599 -{
68600 - u32 data;
68601 - int ret;
68602 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
68603 - struct usb_device *udev=pdvobjpriv->pusbdev;
68604 -
68605 - _func_enter_;
68606 - data = cpu_to_le32(val & 0xFFFF);
68607 - ret = usb_write_async(udev, addr, val, 2);
68608 - _func_exit_;
68609 -
68610 - return ret;
68611 -}
68612 -static int usb_async_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
68613 -{
68614 - u32 data;
68615 - int ret;
68616 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
68617 - struct usb_device *udev=pdvobjpriv->pusbdev;
68618 -
68619 - _func_enter_;
68620 - data = cpu_to_le32(val);
68621 - ret = usb_write_async(udev, addr, val, 4);
68622 - _func_exit_;
68623 -
68624 - return ret;
68625 -}
68626 -#endif
68627 -
68628 -static unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr)
68629 -{
68630 - unsigned int pipe=0;
68631 - int ep_num=0;
68632 - _adapter *padapter = pdvobj->padapter;
68633 - struct usb_device *pusbd = pdvobj->pusbdev;
68634 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
68635 -
68636 - if(addr == RECV_BULK_IN_ADDR)
68637 - {
68638 - pipe=usb_rcvbulkpipe(pusbd, 0x01);
68639 -
68640 - return pipe;
68641 - }
68642 -
68643 - if(addr == RECV_INT_IN_ADDR)
68644 - {
68645 - pipe=usb_rcvbulkpipe(pusbd, 0x04);
68646 -
68647 - return pipe;
68648 - }
68649 -
68650 - if(addr < HW_QUEUE_ENTRY)
68651 - {
68652 - ep_num = (pHalData->Queue2EPNum[(u8)addr] & 0x0f);
68653 -
68654 - pipe = usb_sndbulkpipe(pusbd, ep_num);
68655 -
68656 - return pipe;
68657 - }
68658 -
68659 - return pipe;
68660 -
68661 -}
68662 -
68663 -static void usb_bulkout_zero_complete(struct urb *purb, struct pt_regs *regs)
68664 -{
68665 - struct zero_bulkout_context *pcontext = (struct zero_bulkout_context *)purb->context;
68666 -
68667 - //DBG_8192C("+usb_bulkout_zero_complete\n");
68668 -
68669 - if(pcontext)
68670 - {
68671 - if(pcontext->pbuf)
68672 - {
68673 - rtw_mfree(pcontext->pbuf, sizeof(int));
68674 - }
68675 -
68676 - if(pcontext->purb && (pcontext->purb==purb))
68677 - {
68678 - usb_free_urb(pcontext->purb);
68679 - }
68680 -
68681 -
68682 - rtw_mfree((u8*)pcontext, sizeof(struct zero_bulkout_context));
68683 - }
68684 -
68685 -
68686 -}
68687 -
68688 -static u32 usb_bulkout_zero(struct intf_hdl *pintfhdl, u32 addr)
68689 -{
68690 - int pipe, status, len;
68691 - u32 ret;
68692 - unsigned char *pbuf;
68693 - struct zero_bulkout_context *pcontext;
68694 - PURB purb = NULL;
68695 - _adapter *padapter = (_adapter *)pintfhdl->padapter;
68696 - struct dvobj_priv *pdvobj = (struct dvobj_priv *)&padapter->dvobjpriv;
68697 - struct usb_device *pusbd = pdvobj->pusbdev;
68698 -
68699 - //DBG_8192C("+usb_bulkout_zero\n");
68700 -
68701 -
68702 - if((padapter->bDriverStopped) || (padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx))
68703 - {
68704 - return _FAIL;
68705 - }
68706 -
68707 -
68708 - pcontext = (struct zero_bulkout_context *)rtw_zmalloc(sizeof(struct zero_bulkout_context));
68709 -
68710 - pbuf = (unsigned char *)rtw_zmalloc(sizeof(int));
68711 - purb = usb_alloc_urb(0, GFP_ATOMIC);
68712 -
68713 - len = 0;
68714 - pcontext->pbuf = pbuf;
68715 - pcontext->purb = purb;
68716 - pcontext->pirp = NULL;
68717 - pcontext->padapter = padapter;
68718 -
68719 -
68720 - //translate DMA FIFO addr to pipehandle
68721 - //pipe = ffaddr2pipehdl(pdvobj, addr);
68722 -
68723 - usb_fill_bulk_urb(purb, pusbd, pipe,
68724 - pbuf,
68725 - len,
68726 - usb_bulkout_zero_complete,
68727 - pcontext);//context is pcontext
68728 -
68729 - status = usb_submit_urb(purb, GFP_ATOMIC);
68730 -
68731 - if (!status)
68732 - {
68733 - ret= _SUCCESS;
68734 - }
68735 - else
68736 - {
68737 - ret= _FAIL;
68738 - }
68739 -
68740 -
68741 - return _SUCCESS;
68742 -
68743 -}
68744 -
68745 -static void usb_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
68746 -{
68747 -
68748 -}
68749 -
68750 -static void usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
68751 -{
68752 -
68753 -}
68754 -
68755 #ifdef CONFIG_USB_INTERRUPT_IN_PIPE
68756 static void usb_read_interrupt_complete(struct urb *purb, struct pt_regs *regs)
68757 {
68758 @@ -731,8 +438,8 @@ static u32 usb_read_interrupt(struct intf_hdl *pintfhdl, u32 addr)
68759 int err;
68760 unsigned int pipe;
68761 u32 ret = _SUCCESS;
68762 - struct dvobj_priv *pdvobj = (struct dvobj_priv *)pintfhdl->pintf_dev;
68763 - _adapter *adapter = (_adapter *)pdvobj->padapter;
68764 + _adapter *adapter = pintfhdl->padapter;
68765 + struct dvobj_priv *pdvobj = adapter_to_dvobj(adapter);
68766 struct recv_priv *precvpriv = &adapter->recvpriv;
68767 struct usb_device *pusbd = pdvobj->pusbdev;
68768
68769 @@ -761,17 +468,220 @@ _func_exit_;
68770 }
68771 #endif
68772
68773 +static s32 pre_recv_entry(union recv_frame *precvframe, struct recv_stat *prxstat, struct phy_stat *pphy_info)
68774 +{
68775 + s32 ret=_SUCCESS;
68776 +#ifdef CONFIG_CONCURRENT_MODE
68777 + u8 *primary_myid, *secondary_myid, *paddr1;
68778 + union recv_frame *precvframe_if2 = NULL;
68779 + _adapter *primary_padapter = precvframe->u.hdr.adapter;
68780 + _adapter *secondary_padapter = primary_padapter->pbuddy_adapter;
68781 + struct recv_priv *precvpriv = &primary_padapter->recvpriv;
68782 + _queue *pfree_recv_queue = &precvpriv->free_recv_queue;
68783 + u8 *pbuf = precvframe->u.hdr.rx_data;
68784 +
68785 + if(!secondary_padapter)
68786 + return ret;
68787 +
68788 + paddr1 = GetAddr1Ptr(precvframe->u.hdr.rx_data);
68789 +
68790 + if(IS_MCAST(paddr1) == _FALSE)//unicast packets
68791 + {
68792 + //primary_myid = myid(&primary_padapter->eeprompriv);
68793 + secondary_myid = myid(&secondary_padapter->eeprompriv);
68794 +
68795 + if(_rtw_memcmp(paddr1, secondary_myid, ETH_ALEN))
68796 + {
68797 + //change to secondary interface
68798 + precvframe->u.hdr.adapter = secondary_padapter;
68799 + }
68800 +
68801 + //ret = recv_entry(precvframe);
68802 +
68803 + }
68804 + else // Handle BC/MC Packets
68805 + {
68806 +
68807 + u8 clone = _TRUE;
68808 +#if 0
68809 + u8 type, subtype, *paddr2, *paddr3;
68810 +
68811 + type = GetFrameType(pbuf);
68812 + subtype = GetFrameSubType(pbuf); //bit(7)~bit(2)
68813 +
68814 + switch (type)
68815 + {
68816 + case WIFI_MGT_TYPE: //Handle BC/MC mgnt Packets
68817 + if(subtype == WIFI_BEACON)
68818 + {
68819 + paddr3 = GetAddr3Ptr(precvframe->u.hdr.rx_data);
68820 +
68821 + if (check_fwstate(&secondary_padapter->mlmepriv, _FW_LINKED) &&
68822 + _rtw_memcmp(paddr3, get_bssid(&secondary_padapter->mlmepriv), ETH_ALEN))
68823 + {
68824 + //change to secondary interface
68825 + precvframe->u.hdr.adapter = secondary_padapter;
68826 + clone = _FALSE;
68827 + }
68828 +
68829 + if(check_fwstate(&primary_padapter->mlmepriv, _FW_LINKED) &&
68830 + _rtw_memcmp(paddr3, get_bssid(&primary_padapter->mlmepriv), ETH_ALEN))
68831 + {
68832 + if(clone==_FALSE)
68833 + {
68834 + clone = _TRUE;
68835 + }
68836 + else
68837 + {
68838 + clone = _FALSE;
68839 + }
68840 +
68841 + precvframe->u.hdr.adapter = primary_padapter;
68842 + }
68843 +
68844 + if(check_fwstate(&primary_padapter->mlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) ||
68845 + check_fwstate(&secondary_padapter->mlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING))
68846 + {
68847 + clone = _TRUE;
68848 + precvframe->u.hdr.adapter = primary_padapter;
68849 + }
68850 +
68851 + }
68852 + else if(subtype == WIFI_PROBEREQ)
68853 + {
68854 + //probe req frame is only for interface2
68855 + //change to secondary interface
68856 + precvframe->u.hdr.adapter = secondary_padapter;
68857 + clone = _FALSE;
68858 + }
68859 + break;
68860 + case WIFI_CTRL_TYPE: // Handle BC/MC ctrl Packets
68861 +
68862 + break;
68863 + case WIFI_DATA_TYPE: //Handle BC/MC data Packets
68864 + //Notes: AP MODE never rx BC/MC data packets
68865 +
68866 + paddr2 = GetAddr2Ptr(precvframe->u.hdr.rx_data);
68867 +
68868 + if(_rtw_memcmp(paddr2, get_bssid(&secondary_padapter->mlmepriv), ETH_ALEN))
68869 + {
68870 + //change to secondary interface
68871 + precvframe->u.hdr.adapter = secondary_padapter;
68872 + clone = _FALSE;
68873 + }
68874 +
68875 + break;
68876 + default:
68877 +
68878 + break;
68879 + }
68880 +#endif
68881 +
68882 + if(_TRUE == clone)
68883 + {
68884 + //clone/copy to if2
68885 + u8 shift_sz = 0;
68886 + u32 alloc_sz, skb_len;
68887 + _pkt *pkt_copy = NULL;
68888 + struct rx_pkt_attrib *pattrib = NULL;
68889 +
68890 + precvframe_if2 = rtw_alloc_recvframe(pfree_recv_queue);
68891 + if(precvframe_if2)
68892 + {
68893 + precvframe_if2->u.hdr.adapter = secondary_padapter;
68894 +
68895 + _rtw_init_listhead(&precvframe_if2->u.hdr.list);
68896 + precvframe_if2->u.hdr.precvbuf = NULL; //can't access the precvbuf for new arch.
68897 + precvframe_if2->u.hdr.len=0;
68898 +
68899 + _rtw_memcpy(&precvframe_if2->u.hdr.attrib, &precvframe->u.hdr.attrib, sizeof(struct rx_pkt_attrib));
68900 +
68901 + pattrib = &precvframe_if2->u.hdr.attrib;
68902 +
68903 + // Modified by Albert 20101213
68904 + // For 8 bytes IP header alignment.
68905 + if (pattrib->qos) // Qos data, wireless lan header length is 26
68906 + {
68907 + shift_sz = 6;
68908 + }
68909 + else
68910 + {
68911 + shift_sz = 0;
68912 + }
68913 +
68914 + skb_len = pattrib->pkt_len;
68915 +
68916 + // for first fragment packet, driver need allocate 1536+drvinfo_sz+RXDESC_SIZE to defrag packet.
68917 + // modify alloc_sz for recvive crc error packet by thomas 2011-06-02
68918 + if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0)){
68919 + //alloc_sz = 1664; //1664 is 128 alignment.
68920 + if(skb_len <= 1650)
68921 + alloc_sz = 1664;
68922 + else
68923 + alloc_sz = skb_len + 14;
68924 + }
68925 + else {
68926 + alloc_sz = skb_len;
68927 + // 6 is for IP header 8 bytes alignment in QoS packet case.
68928 + // 8 is for skb->data 4 bytes alignment.
68929 + alloc_sz += 14;
68930 + }
68931 +
68932 + pkt_copy = rtw_skb_alloc(alloc_sz);
68933 +
68934 + if(pkt_copy)
68935 + {
68936 + pkt_copy->dev = secondary_padapter->pnetdev;
68937 + precvframe_if2->u.hdr.pkt = pkt_copy;
68938 + precvframe_if2->u.hdr.rx_head = pkt_copy->data;
68939 + precvframe_if2->u.hdr.rx_end = pkt_copy->data + alloc_sz;
68940 + skb_reserve( pkt_copy, 8 - ((SIZE_PTR)( pkt_copy->data ) & 7 ));//force pkt_copy->data at 8-byte alignment address
68941 + skb_reserve( pkt_copy, shift_sz );//force ip_hdr at 8-byte alignment address according to shift_sz.
68942 + _rtw_memcpy(pkt_copy->data, pbuf, skb_len);
68943 + precvframe_if2->u.hdr.rx_data = precvframe_if2->u.hdr.rx_tail = pkt_copy->data;
68944 +
68945 +
68946 + recvframe_put(precvframe_if2, skb_len);
68947 + //recvframe_pull(precvframe_if2, drvinfo_sz + RXDESC_SIZE);
68948 +
68949 + rtl8192c_translate_rx_signal_stuff(precvframe_if2, pphy_info);
68950 +
68951 + ret = rtw_recv_entry(precvframe_if2);
68952 +
68953 + } else {
68954 + rtw_free_recvframe(precvframe_if2, pfree_recv_queue);
68955 + DBG_8192C("%s()-%d: alloc_skb() failed!\n", __FUNCTION__, __LINE__);
68956 + }
68957 +
68958 + }
68959 +
68960 + }
68961 +
68962 + }
68963 +
68964 + rtl8192c_translate_rx_signal_stuff(precvframe, pphy_info);
68965 +
68966 + ret = rtw_recv_entry(precvframe);
68967 +
68968 +#endif
68969 +
68970 + return ret;
68971 +
68972 +}
68973 +
68974 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
68975 static int recvbuf2recvframe(_adapter *padapter, struct recv_buf *precvbuf)
68976 {
68977 u8 *pbuf;
68978 - u8 frag, mf, shift_sz = 0;
68979 + u8 shift_sz = 0;
68980 u16 pkt_cnt, drvinfo_sz;
68981 - u32 pkt_len, pkt_offset, skb_len, alloc_sz;
68982 + u32 pkt_offset, skb_len, alloc_sz;
68983 s32 transfer_len;
68984 struct recv_stat *prxstat;
68985 - _pkt *pkt_copy = NULL;
68986 - union recv_frame *precvframe = NULL;
68987 + struct phy_stat *pphy_info = NULL;
68988 + _pkt *pkt_copy = NULL;
68989 + union recv_frame *precvframe = NULL;
68990 + struct rx_pkt_attrib *pattrib = NULL;
68991 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
68992 struct recv_priv *precvpriv = &padapter->recvpriv;
68993 _queue *pfree_recv_queue = &precvpriv->free_recv_queue;
68994 @@ -795,28 +705,41 @@ static int recvbuf2recvframe(_adapter *padapter, struct recv_buf *precvbuf)
68995 ("recvbuf2recvframe: rxdesc=offsset 0:0x%08x, 4:0x%08x, 8:0x%08x, C:0x%08x\n",
68996 prxstat->rxdw0, prxstat->rxdw1, prxstat->rxdw2, prxstat->rxdw4));
68997
68998 - prxstat = (struct recv_stat *)pbuf;
68999 - pkt_len = le32_to_cpu(prxstat->rxdw0)&0x00003fff;
69000 -
69001 + prxstat = (struct recv_stat *)pbuf;
69002 +
69003 + precvframe = rtw_alloc_recvframe(pfree_recv_queue);
69004 + if(precvframe==NULL)
69005 + {
69006 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: precvframe==NULL\n"));
69007 + DBG_8192C("%s()-%d: rtw_alloc_recvframe() failed! RX Drop!\n", __FUNCTION__, __LINE__);
69008 + goto _exit_recvbuf2recvframe;
69009 + }
69010 +
69011 + _rtw_init_listhead(&precvframe->u.hdr.list);
69012 + precvframe->u.hdr.precvbuf = NULL; //can't access the precvbuf for new arch.
69013 + precvframe->u.hdr.len=0;
69014
69015 - mf = (le32_to_cpu(prxstat->rxdw1) >> 27) & 0x1;//more fragment bit
69016 - frag = (le32_to_cpu(prxstat->rxdw2) >> 12) & 0xf;//fragmentation number
69017 + rtl8192c_query_rx_desc_status(precvframe, prxstat);
69018
69019 - drvinfo_sz = (le32_to_cpu(prxstat->rxdw0) & 0x000f0000) >> 16;
69020 - drvinfo_sz = drvinfo_sz << 3;//uint (2^3) = 8 bytes; REG_RX_DRVINFO_SZ
69021 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("recvbuf2recvframe: DRV_INFO_SIZE=%d\n", drvinfo_sz));
69022 + pattrib = &precvframe->u.hdr.attrib;
69023 + if(pattrib->physt)
69024 + {
69025 + pphy_info = (struct phy_stat *)(pbuf + RXDESC_OFFSET);
69026 + }
69027
69028 - pkt_offset = pkt_len + drvinfo_sz + RXDESC_SIZE;
69029 + pkt_offset = RXDESC_SIZE + pattrib->drvinfo_sz + pattrib->shift_sz + pattrib->pkt_len;
69030
69031 - if((pkt_len<=0) || (pkt_offset>transfer_len))
69032 + if((pattrib->pkt_len<=0) || (pkt_offset>transfer_len))
69033 {
69034 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("recvbuf2recvframe: pkt_len<=0\n"));
69035 + DBG_8192C("%s()-%d: RX Warning!\n", __FUNCTION__, __LINE__);
69036 + rtw_free_recvframe(precvframe, pfree_recv_queue);
69037 goto _exit_recvbuf2recvframe;
69038 - }
69039 + }
69040
69041 // Modified by Albert 20101213
69042 // For 8 bytes IP header alignment.
69043 - if ( ( le32_to_cpu( prxstat->rxdw0 ) >> 23 ) & 0x01 ) // Qos data, wireless lan header length is 26
69044 + if (pattrib->qos) // Qos data, wireless lan header length is 26
69045 {
69046 shift_sz = 6;
69047 }
69048 @@ -825,23 +748,11 @@ static int recvbuf2recvframe(_adapter *padapter, struct recv_buf *precvbuf)
69049 shift_sz = 0;
69050 }
69051
69052 - precvframe = rtw_alloc_recvframe(pfree_recv_queue);
69053 - if(precvframe==NULL)
69054 - {
69055 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: precvframe==NULL\n"));
69056 - goto _exit_recvbuf2recvframe;
69057 - }
69058 -
69059 - _rtw_init_listhead(&precvframe->u.hdr.list);
69060 - precvframe->u.hdr.precvbuf = NULL; //can't access the precvbuf for new arch.
69061 - precvframe->u.hdr.len=0;
69062 -
69063 - //skb_len = pkt_offset;
69064 - skb_len = pkt_len;
69065 + skb_len = pattrib->pkt_len;
69066
69067 // for first fragment packet, driver need allocate 1536+drvinfo_sz+RXDESC_SIZE to defrag packet.
69068 // modify alloc_sz for recvive crc error packet by thomas 2011-06-02
69069 - if((mf ==1)&&(frag == 0)){
69070 + if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0)){
69071 //alloc_sz = 1664; //1664 is 128 alignment.
69072 if(skb_len <= 1650)
69073 alloc_sz = 1664;
69074 @@ -854,27 +765,24 @@ static int recvbuf2recvframe(_adapter *padapter, struct recv_buf *precvbuf)
69075 // 8 is for skb->data 4 bytes alignment.
69076 alloc_sz += 14;
69077 }
69078 -
69079
69080 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
69081 - pkt_copy = dev_alloc_skb(alloc_sz);
69082 -#else
69083 - pkt_copy = netdev_alloc_skb(padapter->pnetdev, alloc_sz);
69084 -#endif
69085 + pkt_copy = rtw_skb_alloc(alloc_sz);
69086 +
69087 if(pkt_copy)
69088 {
69089 pkt_copy->dev = padapter->pnetdev;
69090 precvframe->u.hdr.pkt = pkt_copy;
69091 + precvframe->u.hdr.rx_head = pkt_copy->data;
69092 + precvframe->u.hdr.rx_end = pkt_copy->data + alloc_sz;
69093 skb_reserve( pkt_copy, 8 - ((SIZE_PTR)( pkt_copy->data ) & 7 ));//force pkt_copy->data at 8-byte alignment address
69094 skb_reserve( pkt_copy, shift_sz );//force ip_hdr at 8-byte alignment address according to shift_sz.
69095 - _rtw_memcpy(pkt_copy->data, (pbuf + drvinfo_sz + RXDESC_SIZE), skb_len);
69096 - precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pkt_copy->data;
69097 - precvframe->u.hdr.rx_end = pkt_copy->data + alloc_sz;
69098 + _rtw_memcpy(pkt_copy->data, (pbuf + pattrib->shift_sz + pattrib->drvinfo_sz + RXDESC_SIZE), skb_len);
69099 + precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pkt_copy->data;
69100 }
69101 else
69102 {
69103 - DBG_8192C("recvbuf2recvframe:can not allocate memory for skb copy\n");
69104 - //precvframe->u.hdr.pkt = skb_clone(pskb, GFP_ATOMIC);
69105 + DBG_8192C("recvbuf2recvframe:can not allocate memory for skb copy\n");
69106 + //precvframe->u.hdr.pkt = rtw_skb_clone(pskb);
69107 //precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pbuf;
69108 //precvframe->u.hdr.rx_end = pbuf + (pkt_offset>1612?pkt_offset:1612);
69109
69110 @@ -901,15 +809,32 @@ static int recvbuf2recvframe(_adapter *padapter, struct recv_buf *precvbuf)
69111 default:
69112 break;
69113 }
69114 -#endif
69115 -
69116 - //because the endian issue, driver avoid reference to the rxstat after calling update_recvframe_attrib_from_recvstat();
69117 - rtl8192cu_update_recvframe_attrib_from_recvstat(precvframe, prxstat);
69118 -
69119 +#endif
69120 +
69121 +#ifdef CONFIG_CONCURRENT_MODE
69122 + if(rtw_buddy_adapter_up(padapter))
69123 + {
69124 + if(pre_recv_entry(precvframe, prxstat, pphy_info) != _SUCCESS)
69125 + {
69126 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: recv_entry(precvframe) != _SUCCESS\n"));
69127 + }
69128 + }
69129 + else
69130 + {
69131 + rtl8192c_translate_rx_signal_stuff(precvframe, pphy_info);
69132 + if(rtw_recv_entry(precvframe) != _SUCCESS)
69133 + {
69134 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n"));
69135 + }
69136 + }
69137 +
69138 +#else
69139 + rtl8192c_translate_rx_signal_stuff(precvframe, pphy_info);
69140 if(rtw_recv_entry(precvframe) != _SUCCESS)
69141 {
69142 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n"));
69143 }
69144 +#endif
69145
69146 pkt_cnt--;
69147 transfer_len -= pkt_offset;
69148 @@ -924,7 +849,7 @@ static int recvbuf2recvframe(_adapter *padapter, struct recv_buf *precvbuf)
69149
69150 _exit_recvbuf2recvframe:
69151
69152 - return _SUCCESS;
69153 + return _SUCCESS;
69154 }
69155
69156 void rtl8192cu_recv_tasklet(void *priv)
69157 @@ -977,7 +902,7 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
69158 }
69159 else
69160 {
69161 - rtw_reset_continual_urb_error(&padapter->dvobjpriv);
69162 + rtw_reset_continual_urb_error(adapter_to_dvobj(padapter));
69163
69164 precvbuf->transfer_len = purb->actual_length;
69165
69166 @@ -993,7 +918,7 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
69167
69168 DBG_8192C("###=> usb_read_port_complete => urb status(%d)\n", purb->status);
69169
69170 - if(rtw_inc_and_chk_continual_urb_error(&padapter->dvobjpriv) == _TRUE ){
69171 + if(rtw_inc_and_chk_continual_urb_error(adapter_to_dvobj(padapter)) == _TRUE ){
69172 padapter->bSurpriseRemoved = _TRUE;
69173 }
69174
69175 @@ -1009,6 +934,10 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
69176 RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port_complete:bDriverStopped=TRUE\n"));
69177 break;
69178 case -EPROTO:
69179 + case -EILSEQ:
69180 + case -ETIME:
69181 + case -ECOMM:
69182 + case -EOVERFLOW:
69183 #ifdef DBG_CONFIG_ERROR_DETECT
69184 {
69185 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
69186 @@ -1037,10 +966,10 @@ static u32 usb_read_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
69187 int err;
69188 unsigned int pipe;
69189 u32 ret = _SUCCESS;
69190 - PURB purb = NULL;
69191 + PURB purb = NULL;
69192 struct recv_buf *precvbuf = (struct recv_buf *)rmem;
69193 - struct dvobj_priv *pdvobj = (struct dvobj_priv *)pintfhdl->pintf_dev;
69194 - _adapter *adapter = (_adapter *)pdvobj->padapter;
69195 + _adapter *adapter = pintfhdl->padapter;
69196 + struct dvobj_priv *pdvobj = adapter_to_dvobj(adapter);
69197 struct recv_priv *precvpriv = &adapter->recvpriv;
69198 struct usb_device *pusbd = pdvobj->pusbdev;
69199
69200 @@ -1099,13 +1028,15 @@ _func_exit_;
69201 static int recvbuf2recvframe(_adapter *padapter, _pkt *pskb)
69202 {
69203 u8 *pbuf;
69204 - u8 frag, mf, shift_sz = 0;
69205 - u16 pkt_cnt, drvinfo_sz;
69206 - u32 pkt_len, pkt_offset, skb_len, alloc_sz;
69207 + u8 shift_sz = 0;
69208 + u16 pkt_cnt;
69209 + u32 pkt_offset, skb_len, alloc_sz;
69210 s32 transfer_len;
69211 struct recv_stat *prxstat;
69212 + struct phy_stat *pphy_info = NULL;
69213 _pkt *pkt_copy = NULL;
69214 union recv_frame *precvframe = NULL;
69215 + struct rx_pkt_attrib *pattrib = NULL;
69216 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
69217 struct recv_priv *precvpriv = &padapter->recvpriv;
69218 _queue *pfree_recv_queue = &precvpriv->free_recv_queue;
69219 @@ -1116,7 +1047,7 @@ static int recvbuf2recvframe(_adapter *padapter, _pkt *pskb)
69220
69221 prxstat = (struct recv_stat *)pbuf;
69222 pkt_cnt = (le32_to_cpu(prxstat->rxdw2)>>16) & 0xff;
69223 -
69224 +
69225 #if 0 //temp remove when disable usb rx aggregation
69226 if((pkt_cnt > 10) || (pkt_cnt < 1) || (transfer_len<RXDESC_SIZE) ||(pkt_len<=0))
69227 {
69228 @@ -1129,27 +1060,41 @@ static int recvbuf2recvframe(_adapter *padapter, _pkt *pskb)
69229 ("recvbuf2recvframe: rxdesc=offsset 0:0x%08x, 4:0x%08x, 8:0x%08x, C:0x%08x\n",
69230 prxstat->rxdw0, prxstat->rxdw1, prxstat->rxdw2, prxstat->rxdw4));
69231
69232 - prxstat = (struct recv_stat *)pbuf;
69233 - pkt_len = le32_to_cpu(prxstat->rxdw0)&0x00003fff;
69234 + prxstat = (struct recv_stat *)pbuf;
69235 +
69236 + precvframe = rtw_alloc_recvframe(pfree_recv_queue);
69237 + if(precvframe==NULL)
69238 + {
69239 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: precvframe==NULL\n"));
69240 + DBG_8192C("%s()-%d: rtw_alloc_recvframe() failed! RX Drop!\n", __FUNCTION__, __LINE__);
69241 + goto _exit_recvbuf2recvframe;
69242 + }
69243 +
69244 + _rtw_init_listhead(&precvframe->u.hdr.list);
69245 + precvframe->u.hdr.precvbuf = NULL; //can't access the precvbuf for new arch.
69246 + precvframe->u.hdr.len=0;
69247
69248 - mf = (le32_to_cpu(prxstat->rxdw1) >> 27) & 0x1;//more fragment bit
69249 - frag = (le32_to_cpu(prxstat->rxdw2) >> 12) & 0xf;//fragmentation number
69250 + rtl8192c_query_rx_desc_status(precvframe, prxstat);
69251
69252 - drvinfo_sz = (le32_to_cpu(prxstat->rxdw0) & 0x000f0000) >> 16;
69253 - drvinfo_sz = drvinfo_sz << 3;//uint (2^3) = 8 bytes; REG_RX_DRVINFO_SZ
69254 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("recvbuf2recvframe: DRV_INFO_SIZE=%d\n", drvinfo_sz));
69255 + pattrib = &precvframe->u.hdr.attrib;
69256 + if(pattrib->physt)
69257 + {
69258 + pphy_info = (struct phy_stat *)(pbuf + RXDESC_OFFSET);
69259 + }
69260
69261 - pkt_offset = pkt_len + drvinfo_sz + RXDESC_SIZE;
69262 + pkt_offset = RXDESC_SIZE + pattrib->drvinfo_sz + pattrib->shift_sz + pattrib->pkt_len;
69263
69264 - if((pkt_len<=0) || (pkt_offset>transfer_len))
69265 + if((pattrib->pkt_len<=0) || (pkt_offset>transfer_len))
69266 {
69267 RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("recvbuf2recvframe: pkt_len<=0\n"));
69268 + DBG_8192C("%s()-%d: RX Warning!\n", __FUNCTION__, __LINE__);
69269 + rtw_free_recvframe(precvframe, pfree_recv_queue);
69270 goto _exit_recvbuf2recvframe;
69271 - }
69272 + }
69273
69274 // Modified by Albert 20101213
69275 // For 8 bytes IP header alignment.
69276 - if ( ( le32_to_cpu( prxstat->rxdw0 ) >> 23 ) & 0x01 ) // Qos data, wireless lan header length is 26
69277 + if (pattrib->qos) // Qos data, wireless lan header length is 26
69278 {
69279 shift_sz = 6;
69280 }
69281 @@ -1158,23 +1103,11 @@ static int recvbuf2recvframe(_adapter *padapter, _pkt *pskb)
69282 shift_sz = 0;
69283 }
69284
69285 - precvframe = rtw_alloc_recvframe(pfree_recv_queue);
69286 - if(precvframe==NULL)
69287 - {
69288 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: precvframe==NULL\n"));
69289 - goto _exit_recvbuf2recvframe;
69290 - }
69291 -
69292 - _rtw_init_listhead(&precvframe->u.hdr.list);
69293 - precvframe->u.hdr.precvbuf = NULL; //can't access the precvbuf for new arch.
69294 - precvframe->u.hdr.len=0;
69295 -
69296 - //skb_len = pkt_offset;
69297 - skb_len = pkt_len;
69298 + skb_len = pattrib->pkt_len;
69299
69300 // for first fragment packet, driver need allocate 1536+drvinfo_sz+RXDESC_SIZE to defrag packet.
69301 // modify alloc_sz for recvive crc error packet by thomas 2011-06-02
69302 - if((mf ==1)&&(frag == 0)){
69303 + if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0)){
69304 //alloc_sz = 1664; //1664 is 128 alignment.
69305 if(skb_len <= 1650)
69306 alloc_sz = 1664;
69307 @@ -1187,26 +1120,24 @@ static int recvbuf2recvframe(_adapter *padapter, _pkt *pskb)
69308 // 8 is for skb->data 4 bytes alignment.
69309 alloc_sz += 14;
69310 }
69311 -
69312
69313 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
69314 - pkt_copy = dev_alloc_skb(alloc_sz);
69315 -#else
69316 - pkt_copy = netdev_alloc_skb(padapter->pnetdev, alloc_sz);
69317 -#endif
69318 + pkt_copy = rtw_skb_alloc(alloc_sz);
69319 +
69320 if(pkt_copy)
69321 {
69322 pkt_copy->dev = padapter->pnetdev;
69323 precvframe->u.hdr.pkt = pkt_copy;
69324 + precvframe->u.hdr.rx_head = pkt_copy->data;
69325 + precvframe->u.hdr.rx_end = pkt_copy->data + alloc_sz;
69326 skb_reserve( pkt_copy, 8 - ((SIZE_PTR)( pkt_copy->data ) & 7 ));//force pkt_copy->data at 8-byte alignment address
69327 skb_reserve( pkt_copy, shift_sz );//force ip_hdr at 8-byte alignment address according to shift_sz.
69328 - _rtw_memcpy(pkt_copy->data, (pbuf + drvinfo_sz + RXDESC_SIZE), skb_len);
69329 - precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pkt_copy->data;
69330 - precvframe->u.hdr.rx_end = pkt_copy->data + alloc_sz;
69331 + _rtw_memcpy(pkt_copy->data, (pbuf + pattrib->shift_sz + pattrib->drvinfo_sz + RXDESC_SIZE), skb_len);
69332 + precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pkt_copy->data;
69333 +
69334 }
69335 else
69336 {
69337 - precvframe->u.hdr.pkt = skb_clone(pskb, GFP_ATOMIC);
69338 + precvframe->u.hdr.pkt = rtw_skb_clone(pskb);
69339 if(pkt_copy)
69340 {
69341 precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pbuf;
69342 @@ -1214,7 +1145,8 @@ static int recvbuf2recvframe(_adapter *padapter, _pkt *pskb)
69343 }
69344 else
69345 {
69346 - DBG_8192C("recvbuf2recvframe: skb_clone fail\n");
69347 + DBG_8192C("recvbuf2recvframe: rtw_skb_clone fail\n");
69348 + rtw_free_recvframe(precvframe, pfree_recv_queue);
69349 goto _exit_recvbuf2recvframe;
69350 }
69351 }
69352 @@ -1238,13 +1170,30 @@ static int recvbuf2recvframe(_adapter *padapter, _pkt *pskb)
69353 }
69354 #endif
69355
69356 - //because the endian issue, driver avoid reference to the rxstat after calling update_recvframe_attrib_from_recvstat();
69357 - rtl8192cu_update_recvframe_attrib_from_recvstat(precvframe, prxstat);
69358 -
69359 +#ifdef CONFIG_CONCURRENT_MODE
69360 + if(rtw_buddy_adapter_up(padapter))
69361 + {
69362 + if(pre_recv_entry(precvframe, prxstat, pphy_info) != _SUCCESS)
69363 + {
69364 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: recv_entry(precvframe) != _SUCCESS\n"));
69365 + }
69366 + }
69367 + else
69368 + {
69369 + rtl8192c_translate_rx_signal_stuff(precvframe, pphy_info);
69370 + if(rtw_recv_entry(precvframe) != _SUCCESS)
69371 + {
69372 + RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n"));
69373 + }
69374 + }
69375 +
69376 +#else
69377 + rtl8192c_translate_rx_signal_stuff(precvframe, pphy_info);
69378 if(rtw_recv_entry(precvframe) != _SUCCESS)
69379 {
69380 RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n"));
69381 }
69382 +#endif
69383
69384 pkt_cnt--;
69385 transfer_len -= pkt_offset;
69386 @@ -1273,7 +1222,7 @@ void rtl8192cu_recv_tasklet(void *priv)
69387 if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
69388 {
69389 DBG_8192C("recv_tasklet => bDriverStopped or bSurpriseRemoved \n");
69390 - dev_kfree_skb_any(pskb);
69391 + rtw_skb_free(pskb);
69392 break;
69393 }
69394
69395 @@ -1281,17 +1230,14 @@ void rtl8192cu_recv_tasklet(void *priv)
69396
69397 #ifdef CONFIG_PREALLOC_RECV_SKB
69398
69399 -#ifdef NET_SKBUFF_DATA_USES_OFFSET
69400 skb_reset_tail_pointer(pskb);
69401 -#else
69402 - pskb->tail = pskb->data;
69403 -#endif
69404 +
69405 pskb->len = 0;
69406
69407 skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
69408
69409 #else
69410 - dev_kfree_skb_any(pskb);
69411 + rtw_skb_free(pskb);
69412 #endif
69413
69414 }
69415 @@ -1331,10 +1277,11 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
69416 #else
69417 if(precvbuf->pskb){
69418 DBG_8192C("==> free skb(%p)\n",precvbuf->pskb);
69419 - dev_kfree_skb_any(precvbuf->pskb);
69420 + rtw_skb_free(precvbuf->pskb);
69421 }
69422 #endif
69423 -
69424 + DBG_8192C("%s()-%d: RX Warning! bDriverStopped(%d) OR bSurpriseRemoved(%d) bReadPortCancel(%d)\n",
69425 + __FUNCTION__, __LINE__,padapter->bDriverStopped, padapter->bSurpriseRemoved,padapter->bReadPortCancel);
69426 goto exit;
69427 }
69428
69429 @@ -1345,10 +1292,11 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
69430 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"));
69431 precvbuf->reuse = _TRUE;
69432 rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);
69433 + DBG_8192C("%s()-%d: RX Warning!\n", __FUNCTION__, __LINE__);
69434 }
69435 else
69436 {
69437 - rtw_reset_continual_urb_error(&padapter->dvobjpriv);
69438 + rtw_reset_continual_urb_error(adapter_to_dvobj(padapter));
69439
69440 precvbuf->transfer_len = purb->actual_length;
69441 skb_put(precvbuf->pskb, purb->actual_length);
69442 @@ -1368,7 +1316,7 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
69443
69444 DBG_8192C("###=> usb_read_port_complete => urb status(%d)\n", purb->status);
69445
69446 - if(rtw_inc_and_chk_continual_urb_error(&padapter->dvobjpriv) == _TRUE ){
69447 + if(rtw_inc_and_chk_continual_urb_error(adapter_to_dvobj(padapter)) == _TRUE ){
69448 padapter->bSurpriseRemoved = _TRUE;
69449 }
69450
69451 @@ -1384,6 +1332,10 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
69452 RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port_complete:bDriverStopped=TRUE\n"));
69453 break;
69454 case -EPROTO:
69455 + case -EILSEQ:
69456 + case -ETIME:
69457 + case -ECOMM:
69458 + case -EOVERFLOW:
69459 #ifdef DBG_CONFIG_ERROR_DETECT
69460 {
69461 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
69462 @@ -1394,9 +1346,11 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
69463 rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);
69464 break;
69465 case -EINPROGRESS:
69466 + precvpriv->read_port_complete_EINPROGRESS_cnt++;
69467 DBG_8192C("ERROR: URB IS IN PROGRESS!/n");
69468 break;
69469 default:
69470 + precvpriv->read_port_complete_other_urb_err_cnt++;
69471 break;
69472 }
69473
69474 @@ -1418,12 +1372,11 @@ static u32 usb_read_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
69475 u32 ret = _SUCCESS;
69476 PURB purb = NULL;
69477 struct recv_buf *precvbuf = (struct recv_buf *)rmem;
69478 - struct dvobj_priv *pdvobj = (struct dvobj_priv *)pintfhdl->pintf_dev;
69479 - _adapter *adapter = (_adapter *)pdvobj->padapter;
69480 + _adapter *adapter = pintfhdl->padapter;
69481 + struct dvobj_priv *pdvobj = adapter_to_dvobj(adapter);
69482 struct recv_priv *precvpriv = &adapter->recvpriv;
69483 struct usb_device *pusbd = pdvobj->pusbdev;
69484
69485 -
69486 _func_enter_;
69487
69488 if(adapter->bDriverStopped || adapter->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)
69489 @@ -1450,15 +1403,12 @@ _func_enter_;
69490 //re-assign for linux based on skb
69491 if((precvbuf->reuse == _FALSE) || (precvbuf->pskb == NULL))
69492 {
69493 - //precvbuf->pskb = alloc_skb(MAX_RECVBUF_SZ, GFP_ATOMIC);//don't use this after v2.6.25
69494 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
69495 - precvbuf->pskb = dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
69496 -#else
69497 - precvbuf->pskb = netdev_alloc_skb(adapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
69498 -#endif
69499 + precvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
69500 +
69501 if(precvbuf->pskb == NULL)
69502 {
69503 RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("init_recvbuf(): alloc_skb fail!\n"));
69504 + precvpriv->recvbuf_skb_alloc_fail_cnt++;
69505 return _FAIL;
69506 }
69507
69508 @@ -1468,28 +1418,16 @@ _func_enter_;
69509
69510 precvbuf->phead = precvbuf->pskb->head;
69511 precvbuf->pdata = precvbuf->pskb->data;
69512 -
69513 -#ifdef NET_SKBUFF_DATA_USES_OFFSET
69514 - precvbuf->ptail = precvbuf->pskb->head + precvbuf->pskb->tail;
69515 - precvbuf->pend = precvbuf->ptail + (MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
69516 -#else
69517 - precvbuf->ptail = precvbuf->pskb->tail;
69518 - precvbuf->pend = precvbuf->pskb->end;
69519 -#endif
69520 + precvbuf->ptail = skb_tail_pointer(precvbuf->pskb);
69521 + precvbuf->pend = skb_end_pointer(precvbuf->pskb);
69522 precvbuf->pbuf = precvbuf->pskb->data;
69523 }
69524 else//reuse skb
69525 {
69526 precvbuf->phead = precvbuf->pskb->head;
69527 precvbuf->pdata = precvbuf->pskb->data;
69528 -
69529 -#ifdef NET_SKBUFF_DATA_USES_OFFSET
69530 - precvbuf->ptail = precvbuf->pskb->head + precvbuf->pskb->tail;
69531 - precvbuf->pend = precvbuf->ptail + (MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
69532 -#else
69533 - precvbuf->ptail = precvbuf->pskb->tail;
69534 - precvbuf->pend = precvbuf->pskb->end;
69535 -#endif
69536 + precvbuf->ptail = skb_tail_pointer(precvbuf->pskb);
69537 + precvbuf->pend = skb_end_pointer(precvbuf->pskb);
69538 precvbuf->pbuf = precvbuf->pskb->data;
69539
69540 precvbuf->reuse = _FALSE;
69541 @@ -1523,6 +1461,7 @@ _func_enter_;
69542 }
69543 else
69544 {
69545 + precvpriv->recvbuf_null_cnt++;
69546 RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port:precvbuf ==NULL\n"));
69547 ret = _FAIL;
69548 }
69549 @@ -1533,34 +1472,6 @@ _func_exit_;
69550 }
69551 #endif // CONFIG_USE_USB_BUFFER_ALLOC_RX
69552
69553 -static void usb_read_port_cancel(struct intf_hdl *pintfhdl)
69554 -{
69555 - int i;
69556 - struct recv_buf *precvbuf;
69557 - _adapter *padapter = pintfhdl->padapter;
69558 - precvbuf = (struct recv_buf *)padapter->recvpriv.precv_buf;
69559 -
69560 - DBG_8192C("usb_read_port_cancel \n");
69561 -
69562 - padapter->bReadPortCancel = _TRUE;
69563 -
69564 - for(i=0; i < NR_RECVBUFF ; i++)
69565 - {
69566 - precvbuf->reuse = _TRUE;
69567 - if(precvbuf->purb)
69568 - {
69569 - //DBG_8192C("usb_read_port_cancel : usb_kill_urb \n");
69570 - usb_kill_urb(precvbuf->purb);
69571 - }
69572 -
69573 - precvbuf++;
69574 - }
69575 -
69576 -#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
69577 - usb_kill_urb(padapter->recvpriv.int_in_urb);
69578 -#endif
69579 -}
69580 -
69581 void rtl8192cu_xmit_tasklet(void *priv)
69582 {
69583 int ret = _FALSE;
69584 @@ -1587,425 +1498,6 @@ void rtl8192cu_xmit_tasklet(void *priv)
69585
69586 }
69587
69588 -static void usb_write_port_complete(struct urb *purb, struct pt_regs *regs)
69589 -{
69590 - _irqL irqL;
69591 - int i;
69592 - struct xmit_buf *pxmitbuf = (struct xmit_buf *)purb->context;
69593 - //struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
69594 - //_adapter *padapter = pxmitframe->padapter;
69595 - _adapter *padapter = pxmitbuf->padapter;
69596 - struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
69597 - //struct pkt_attrib *pattrib = &pxmitframe->attrib;
69598 -
69599 -_func_enter_;
69600 -
69601 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("+usb_write_port_complete\n"));
69602 -
69603 -
69604 - switch(pxmitbuf->flags)
69605 - {
69606 - case XMIT_VO_QUEUE:
69607 - pxmitpriv->voq_cnt--;
69608 - break;
69609 - case XMIT_VI_QUEUE:
69610 - pxmitpriv->viq_cnt--;
69611 - break;
69612 - case XMIT_BE_QUEUE:
69613 - pxmitpriv->beq_cnt--;
69614 - break;
69615 - case XMIT_BK_QUEUE:
69616 - pxmitpriv->bkq_cnt--;
69617 - break;
69618 - case HIGH_QUEUE_INX:
69619 -#ifdef CONFIG_AP_MODE
69620 - rtw_chk_hi_queue_cmd(padapter);
69621 -#endif
69622 - break;
69623 - default:
69624 - break;
69625 - }
69626 -
69627 -
69628 -/*
69629 - _enter_critical(&pxmitpriv->lock, &irqL);
69630 -
69631 - pxmitpriv->txirp_cnt--;
69632 -
69633 - switch(pattrib->priority)
69634 - {
69635 - case 1:
69636 - case 2:
69637 - pxmitpriv->bkq_cnt--;
69638 - //DBG_8192C("pxmitpriv->bkq_cnt=%d\n", pxmitpriv->bkq_cnt);
69639 - break;
69640 - case 4:
69641 - case 5:
69642 - pxmitpriv->viq_cnt--;
69643 - //DBG_8192C("pxmitpriv->viq_cnt=%d\n", pxmitpriv->viq_cnt);
69644 - break;
69645 - case 6:
69646 - case 7:
69647 - pxmitpriv->voq_cnt--;
69648 - //DBG_8192C("pxmitpriv->voq_cnt=%d\n", pxmitpriv->voq_cnt);
69649 - break;
69650 - case 0:
69651 - case 3:
69652 - default:
69653 - pxmitpriv->beq_cnt--;
69654 - //DBG_8192C("pxmitpriv->beq_cnt=%d\n", pxmitpriv->beq_cnt);
69655 - break;
69656 -
69657 - }
69658 -
69659 - _exit_critical(&pxmitpriv->lock, &irqL);
69660 -
69661 -
69662 - if(pxmitpriv->txirp_cnt==0)
69663 - {
69664 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: txirp_cnt== 0, set allrxreturnevt!\n"));
69665 - _rtw_up_sema(&(pxmitpriv->tx_retevt));
69666 - }
69667 -*/
69668 - //rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
69669 -
69670 - if(padapter->bSurpriseRemoved || padapter->bDriverStopped ||padapter->bWritePortCancel)
69671 - {
69672 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)", padapter->bDriverStopped, padapter->bSurpriseRemoved));
69673 - goto check_completion;
69674 - }
69675 -
69676 -
69677 - if(purb->status==0)
69678 - {
69679 -
69680 - }
69681 - else
69682 - {
69683 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete : purb->status(%d) != 0 \n", purb->status));
69684 - DBG_8192C("###=> urb_write_port_complete status(%d)\n",purb->status);
69685 - if((purb->status==-EPIPE)||(purb->status==-EPROTO))
69686 - {
69687 - //usb_clear_halt(pusbdev, purb->pipe);
69688 - //msleep(10);
69689 - #ifdef DBG_CONFIG_ERROR_DETECT
69690 - {
69691 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
69692 - pHalData->srestpriv.Wifi_Error_Status = USB_WRITE_PORT_FAIL;
69693 - }
69694 - #endif
69695 - }
69696 - else if(purb->status == -EINPROGRESS)
69697 - {
69698 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: EINPROGESS\n"));
69699 - }
69700 - else if(purb->status == (-ESHUTDOWN))
69701 - {
69702 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: ESHUTDOWN\n"));
69703 -
69704 - padapter->bDriverStopped=_TRUE;
69705 -
69706 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bDriverStopped=TRUE\n"));
69707 -
69708 - goto check_completion;
69709 - }
69710 - else
69711 - {
69712 - padapter->bSurpriseRemoved=_TRUE;
69713 - DBG_8192C("bSurpriseRemoved=TRUE\n");
69714 - //rtl8192cu_trigger_gpio_0(padapter);
69715 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bSurpriseRemoved=TRUE\n"));
69716 -
69717 - goto check_completion;
69718 - }
69719 -
69720 -
69721 -
69722 - }
69723 -
69724 - #ifdef DBG_CONFIG_ERROR_DETECT
69725 - {
69726 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
69727 - pHalData->srestpriv.last_tx_complete_time = rtw_get_current_time();
69728 - }
69729 - #endif
69730 -
69731 -check_completion:
69732 - if(pxmitbuf->isSync) {
69733 - pxmitbuf->status = purb->status;
69734 - complete(&pxmitbuf->done);
69735 - }
69736 -
69737 - rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
69738 -
69739 - //if(rtw_txframes_pending(padapter))
69740 - {
69741 - tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
69742 - }
69743 -
69744 -
69745 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("-usb_write_port_complete\n"));
69746 -_func_exit_;
69747 -
69748 -}
69749 -
69750 -static u32 usb_write_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem, int timeout_ms)
69751 -{
69752 - _irqL irqL;
69753 - unsigned int pipe;
69754 - int status;
69755 - u32 ret, bwritezero = _FALSE;
69756 - PURB purb = NULL;
69757 - _adapter *padapter = (_adapter *)pintfhdl->padapter;
69758 - struct dvobj_priv *pdvobj = (struct dvobj_priv *)&padapter->dvobjpriv;
69759 - struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
69760 - struct xmit_buf *pxmitbuf = (struct xmit_buf *)wmem;
69761 - struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
69762 - struct usb_device *pusbd = pdvobj->pusbdev;
69763 - struct pkt_attrib *pattrib = &pxmitframe->attrib;
69764 -
69765 -_func_enter_;
69766 -
69767 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("+usb_write_port\n"));
69768 -
69769 - if((padapter->bDriverStopped) || (padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx))
69770 - {
69771 - #ifdef DBG_TX
69772 - DBG_871X(" DBG_TX %s:%d bDriverStopped%d, bSurpriseRemoved:%d, pnp_bstop_trx:%d\n",__FUNCTION__, __LINE__
69773 - ,padapter->bDriverStopped, padapter->bSurpriseRemoved, padapter->pwrctrlpriv.pnp_bstop_trx );
69774 - #endif
69775 -
69776 - rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
69777 -
69778 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port:( padapter->bDriverStopped ||padapter->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n"));
69779 - return _FAIL;
69780 - }
69781 -
69782 - _enter_critical(&pxmitpriv->lock, &irqL);
69783 -
69784 - switch(addr)
69785 - {
69786 - case VO_QUEUE_INX:
69787 - pxmitpriv->voq_cnt++;
69788 - pxmitbuf->flags = XMIT_VO_QUEUE;
69789 - break;
69790 - case VI_QUEUE_INX:
69791 - pxmitpriv->viq_cnt++;
69792 - pxmitbuf->flags = XMIT_VI_QUEUE;
69793 - break;
69794 - case BE_QUEUE_INX:
69795 - pxmitpriv->beq_cnt++;
69796 - pxmitbuf->flags = XMIT_BE_QUEUE;
69797 - break;
69798 - case BK_QUEUE_INX:
69799 - pxmitpriv->bkq_cnt++;
69800 - pxmitbuf->flags = XMIT_BK_QUEUE;
69801 - break;
69802 - case HIGH_QUEUE_INX:
69803 - pxmitbuf->flags = HIGH_QUEUE_INX;
69804 - break;
69805 - default:
69806 - pxmitbuf->flags = XMIT_VO_QUEUE;
69807 - break;
69808 - }
69809 -
69810 - _exit_critical(&pxmitpriv->lock, &irqL);
69811 -
69812 -/*
69813 - _enter_critical(&pxmitpriv->lock, &irqL);
69814 -
69815 - //total irp
69816 - pxmitpriv->txirp_cnt++;
69817 -
69818 - //per ac irp
69819 - switch(pattrib->priority)
69820 - {
69821 - case 1:
69822 - case 2:
69823 - pxmitpriv->bkq_cnt++;
69824 - break;
69825 - case 4:
69826 - case 5:
69827 - pxmitpriv->viq_cnt++;
69828 - break;
69829 - case 6:
69830 - case 7:
69831 - pxmitpriv->voq_cnt++;
69832 - break;
69833 - case 0:
69834 - case 3:
69835 - default:
69836 - pxmitpriv->beq_cnt++;
69837 - break;
69838 - }
69839 -
69840 -
69841 - _exit_critical(&pxmitpriv->lock, &irqL);
69842 -*/
69843 -
69844 - purb = pxmitbuf->pxmit_urb[0];
69845 -
69846 -#if 0
69847 - if(pdvobj->ishighspeed)
69848 - {
69849 - if(cnt> 0 && cnt%512 == 0)
69850 - {
69851 - //DBG_8192C("ishighspeed, cnt=%d\n", cnt);
69852 - bwritezero = _TRUE;
69853 - }
69854 - }
69855 - else
69856 - {
69857 - if(cnt > 0 && cnt%64 == 0)
69858 - {
69859 - //DBG_8192C("cnt=%d\n", cnt);
69860 - bwritezero = _TRUE;
69861 - }
69862 - }
69863 -#endif
69864 -
69865 - //translate DMA FIFO addr to pipehandle
69866 - pipe = ffaddr2pipehdl(pdvobj, addr);
69867 -
69868 -#ifdef CONFIG_REDUCE_USB_TX_INT
69869 - if ( pxmitpriv->free_xmitbuf_cnt%NR_XMITBUFF == 0
69870 - || pxmitbuf->ext_tag )
69871 - {
69872 - purb->transfer_flags &= (~URB_NO_INTERRUPT);
69873 - } else {
69874 - purb->transfer_flags |= URB_NO_INTERRUPT;
69875 - //DBG_8192C("URB_NO_INTERRUPT ");
69876 - }
69877 -#endif
69878 -
69879 -
69880 - usb_fill_bulk_urb(purb, pusbd, pipe,
69881 - pxmitframe->buf_addr, //= pxmitbuf->pbuf
69882 - cnt,
69883 - usb_write_port_complete,
69884 - pxmitbuf);//context is pxmitbuf
69885 -
69886 -#ifdef CONFIG_USE_USB_BUFFER_ALLOC_TX
69887 - purb->transfer_dma = pxmitbuf->dma_transfer_addr;
69888 - purb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
69889 - purb->transfer_flags |= URB_ZERO_PACKET;
69890 -#endif // CONFIG_USE_USB_BUFFER_ALLOC_TX
69891 -
69892 -#if 0
69893 - if (bwritezero)
69894 - {
69895 - purb->transfer_flags |= URB_ZERO_PACKET;
69896 - }
69897 -#endif
69898 -
69899 - status = usb_submit_urb(purb, GFP_ATOMIC);
69900 -
69901 - if (!status)
69902 - {
69903 - ret= _SUCCESS;
69904 - #ifdef DBG_CONFIG_ERROR_DETECT
69905 - {
69906 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
69907 - pHalData->srestpriv.last_tx_time = rtw_get_current_time();
69908 - }
69909 - #endif
69910 - }
69911 - else
69912 - {
69913 - DBG_8192C("usb_write_port, status=%d\n", status);
69914 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port(): usb_submit_urb, status=%x\n", status));
69915 - ret= _FAIL;
69916 - }
69917 -
69918 -// Commented by Albert 2009/10/13
69919 -// We add the URB_ZERO_PACKET flag to urb so that the host will send the zero packet automatically.
69920 -/*
69921 - if(bwritezero == _TRUE)
69922 - {
69923 - usb_bulkout_zero(pintfhdl, addr);
69924 - }
69925 -*/
69926 -
69927 - // synchronous write handling
69928 - if(timeout_ms >= 0) {
69929 - unsigned long expire = timeout_ms ? msecs_to_jiffies(timeout_ms) : MAX_SCHEDULE_TIMEOUT;
69930 - int status;
69931 - init_completion(&pxmitbuf->done);
69932 - pxmitbuf->isSync = _TRUE;
69933 - pxmitbuf->status = 0;
69934 -
69935 - if (!wait_for_completion_timeout(&pxmitbuf->done, expire)) {
69936 - usb_kill_urb(purb);
69937 - status = (pxmitbuf->status == -ENOENT ? -ETIMEDOUT : pxmitbuf->status);
69938 - } else
69939 - status = pxmitbuf->status;
69940 -
69941 - if (!status) {
69942 - ret= _SUCCESS;
69943 - } else {
69944 - DBG_8192C("usb_write_port sync, status=%d\n", status);
69945 - ret = _FAIL;
69946 - }
69947 - }
69948 -
69949 -
69950 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("-usb_write_port\n"));
69951 -
69952 -_func_exit_;
69953 -
69954 - return ret;
69955 -
69956 -}
69957 -
69958 -static inline u32 usb_write_port_async(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
69959 -{
69960 - return usb_write_port(pintfhdl, addr, cnt, wmem, -1);
69961 -}
69962 -
69963 -static inline int usb_write_port_sync(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
69964 -{
69965 - return usb_write_port(pintfhdl, addr, cnt, wmem, RTW_USB_BULKOUT_TIMEOUT);
69966 -}
69967 -
69968 -static void usb_write_port_cancel(struct intf_hdl *pintfhdl)
69969 -{
69970 - int i, j;
69971 - _adapter *padapter = pintfhdl->padapter;
69972 - struct xmit_buf *pxmitbuf = (struct xmit_buf *)padapter->xmitpriv.pxmitbuf;
69973 -
69974 - DBG_8192C("usb_write_port_cancel \n");
69975 -
69976 - padapter->bWritePortCancel = _TRUE;
69977 -
69978 - for(i=0; i<NR_XMITBUFF; i++)
69979 - {
69980 - for(j=0; j<8; j++)
69981 - {
69982 - if(pxmitbuf->pxmit_urb[j])
69983 - {
69984 - usb_kill_urb(pxmitbuf->pxmit_urb[j]);
69985 - }
69986 - }
69987 -
69988 - pxmitbuf++;
69989 - }
69990 - pxmitbuf = (struct xmit_buf*)padapter->xmitpriv.pxmit_extbuf;
69991 -
69992 - for (i = 0; i < NR_XMIT_EXTBUFF; i++)
69993 - {
69994 - for(j=0; j<8; j++)
69995 - {
69996 - if(pxmitbuf->pxmit_urb[j])
69997 - {
69998 - usb_kill_urb(pxmitbuf->pxmit_urb[j]);
69999 - }
70000 - }
70001 -
70002 - pxmitbuf++;
70003 - }
70004 -
70005 -}
70006 -
70007 void rtl8192cu_set_intf_ops(struct _io_ops *pops)
70008 {
70009 _func_enter_;
70010 @@ -2029,8 +1521,7 @@ void rtl8192cu_set_intf_ops(struct _io_ops *pops)
70011 pops->_write32_async = &usb_async_write32;
70012 #endif
70013 pops->_write_mem = &usb_write_mem;
70014 - pops->_write_port = &usb_write_port_async;
70015 - pops->_write_port_sync = &usb_write_port_sync;
70016 + pops->_write_port = &usb_write_port;
70017
70018 pops->_read_port_cancel = &usb_read_port_cancel;
70019 pops->_write_port_cancel = &usb_write_port_cancel;
70020 diff --git a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c
70021 index 82adeff..32ff645 100644
70022 --- a/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c
70023 +++ b/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c
70024 @@ -16,8 +16,7 @@
70025 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
70026 *
70027 *
70028 -
70029 -******************************************************************************/
70030 + ******************************************************************************/
70031 #define _HCI_OPS_OS_C_
70032
70033 #include <drv_conf.h>
70034 @@ -884,7 +883,7 @@ _func_enter_;
70035 if(pxmitframe !=NULL)
70036 {
70037 RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("\n usb_write_port_complete:pIrp->Cancel == _TRUE,(pxmitframe !=NULL\n"));
70038 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
70039 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
70040 }
70041
70042 return STATUS_MORE_PROCESSING_REQUIRED;
70043 @@ -930,7 +929,7 @@ _func_enter_;
70044 #else
70045
70046 //not to consider tx fragment
70047 - rtw_free_xmitframe_ex(pxmitpriv, pxmitframe);
70048 + rtw_free_xmitframe(pxmitpriv, pxmitframe);
70049
70050 #endif
70051
70052 diff --git a/drivers/net/wireless/rtl8192cu/ifcfg-wlan0 b/drivers/net/wireless/rtl8192cu/ifcfg-wlan0
70053 old mode 100644
70054 new mode 100755
70055 diff --git a/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h b/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h
70056 index 2ecb65d..4ae3630 100644
70057 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h
70058 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h
70059 @@ -25,26 +25,29 @@
70060 /*Created on 2011/ 6/15, 5:45*/
70061
70062 #ifdef CONFIG_BT_COEXISTENCE
70063 -#define TSMCImgArrayLength 16248 //v79 TSMC COMMON 2011-10-06
70064 +#define TSMCImgArrayLength 15706 //v84 TSMC COMMON 2012-04-13
70065 #else //#ifdef CONFIG_P2P
70066 -#define TSMCImgArrayLength 16404 //v79 TSMC P2PPS 2011-10-06
70067 +#define TSMCImgArrayLength 16126 //v88 TSMC P2PPS with CCX report C2H 2012-12-05
70068 #endif
70069 extern u8 Rtl8192CEFwTSMCImgArray[TSMCImgArrayLength];
70070
70071 #ifdef CONFIG_BT_COEXISTENCE
70072 #define UMCACutImgArrayLength 16248 //v79 UMC A Cut COMMON 2011-10-06
70073 #else //#ifdef CONFIG_P2P
70074 -#define UMCACutImgArrayLength 16404 //v79 UMC A Cut P2PPS 2011-10-06
70075 +#define UMCACutImgArrayLength 16126 //v88 UMC A Cut P2PPS with CCX report C2H 2012-12-05
70076 #endif
70077 extern u8 Rtl8192CEFwUMCACutImgArray[UMCACutImgArrayLength];
70078
70079 #ifdef CONFIG_BT_COEXISTENCE
70080 -#define UMCBCutImgArrayLength 16254 //v79 UMC B Cut COMMON 2011-10-06
70081 +#define UMCBCutImgArrayLength 15686 //v84 UMC B Cut COMMON 2012-04-13
70082 #else //#ifdef CONFIG_P2P
70083 -#define UMCBCutImgArrayLength 16386 //v79 UMC B Cut P2PPS 2011-10-06
70084 +#define UMCBCutImgArrayLength 16096 //v88 UMC B Cut P2PPS with CCX report C2H 2012-12-05
70085 #endif
70086 extern u8 Rtl8192CEFwUMCBCutImgArray[UMCBCutImgArrayLength];
70087
70088 +//8192C_Formal_92CE_PHYforMP_110804 2011-11-23
70089 +//8188C_Formal_88CE_PHYforMP_111117 2011-11-23
70090 +
70091 #define PHY_REG_2TArrayLength 374
70092 extern u32 Rtl8192CEPHY_REG_2TArray[PHY_REG_2TArrayLength];
70093 #define PHY_REG_1TArrayLength 374
70094 @@ -69,7 +72,8 @@ extern u32 Rtl8192CERadioA_1TArray[RadioA_1TArrayLength];
70095 extern u32 Rtl8192CERadioB_1TArray[RadioB_1TArrayLength];
70096 #define RadioB_GM_ArrayLength 1
70097 extern u32 Rtl8192CERadioB_GM_Array[RadioB_GM_ArrayLength];
70098 -#define MAC_2T_ArrayLength 172
70099 +// MAC reg V14 - 2011-11-23
70100 +#define MAC_2T_ArrayLength 174
70101 extern u32 Rtl8192CEMAC_2T_Array[MAC_2T_ArrayLength];
70102 #define MACPHY_Array_PGLength 1
70103 extern u32 Rtl8192CEMACPHY_Array_PG[MACPHY_Array_PGLength];
70104 diff --git a/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h b/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h
70105 index 6ecb754..3afb292 100644
70106 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h
70107 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h
70108 @@ -111,15 +111,7 @@ typedef enum _HW90_BLOCK{
70109 HW90_BLOCK_MAXIMUM = 4, // Never use this
70110 }HW90_BLOCK_E, *PHW90_BLOCK_E;
70111
70112 -typedef enum _RF90_RADIO_PATH{
70113 - RF90_PATH_A = 0, //Radio Path A
70114 - RF90_PATH_B = 1, //Radio Path B
70115 - RF90_PATH_C = 2, //Radio Path C
70116 - RF90_PATH_D = 3, //Radio Path D
70117 - //RF90_PATH_MAX //Max RF number 90 support
70118 -}RF90_RADIO_PATH_E, *PRF90_RADIO_PATH_E;
70119 -
70120 -#define RF90_PATH_MAX 2
70121 +#define RF_PATH_MAX 2
70122
70123 #define CHANNEL_MAX_NUMBER 14 // 14 is the max channel number
70124 #define CHANNEL_GROUP_MAX 3 // ch1~3, ch4~9, ch10~14 total three groups
70125 @@ -163,19 +155,6 @@ typedef enum _RF_TYPE_8190P{
70126 RF_PSEUDO_11N=5, // 5, It is a temporality RF.
70127 }RF_TYPE_8190P_E,*PRF_TYPE_8190P_E;
70128
70129 -
70130 -typedef enum _RATR_TABLE_MODE_8192C{
70131 - RATR_INX_WIRELESS_NGB = 0,
70132 - RATR_INX_WIRELESS_NG = 1,
70133 - RATR_INX_WIRELESS_NB = 2,
70134 - RATR_INX_WIRELESS_N = 3,
70135 - RATR_INX_WIRELESS_GB = 4,
70136 - RATR_INX_WIRELESS_G = 5,
70137 - RATR_INX_WIRELESS_B = 6,
70138 - RATR_INX_WIRELESS_MC = 7,
70139 - RATR_INX_WIRELESS_A = 8,
70140 -}RATR_TABLE_MODE_8192C, *PRATR_TABLE_MODE_8192C;
70141 -
70142 typedef struct _BB_REGISTER_DEFINITION{
70143 u32 rfintfs; // set software control:
70144 // 0x870~0x877[8 bytes]
70145 @@ -294,11 +273,11 @@ void rtl8192c_PHY_SetBBReg( IN PADAPTER Adapter,
70146 IN u32 BitMask,
70147 IN u32 Data );
70148 u32 rtl8192c_PHY_QueryRFReg( IN PADAPTER Adapter,
70149 - IN RF90_RADIO_PATH_E eRFPath,
70150 + IN RF_RADIO_PATH_E eRFPath,
70151 IN u32 RegAddr,
70152 IN u32 BitMask );
70153 void rtl8192c_PHY_SetRFReg( IN PADAPTER Adapter,
70154 - IN RF90_RADIO_PATH_E eRFPath,
70155 + IN RF_RADIO_PATH_E eRFPath,
70156 IN u32 RegAddr,
70157 IN u32 BitMask,
70158 IN u32 Data );
70159 @@ -313,14 +292,14 @@ int PHY_RFConfig8192C( IN PADAPTER Adapter );
70160 /* RF config */
70161 int rtl8192c_PHY_ConfigRFWithParaFile( IN PADAPTER Adapter,
70162 IN u8* pFileName,
70163 - IN RF90_RADIO_PATH_E eRFPath);
70164 + IN RF_RADIO_PATH_E eRFPath);
70165 int rtl8192c_PHY_ConfigRFWithHeaderFile( IN PADAPTER Adapter,
70166 - IN RF90_RADIO_PATH_E eRFPath);
70167 + IN RF_RADIO_PATH_E eRFPath);
70168
70169 /* BB/RF readback check for making sure init OK */
70170 int rtl8192c_PHY_CheckBBAndRFOK( IN PADAPTER Adapter,
70171 IN HW90_BLOCK_E CheckBlock,
70172 - IN RF90_RADIO_PATH_E eRFPath );
70173 + IN RF_RADIO_PATH_E eRFPath );
70174 /* Read initi reg value for tx power setting. */
70175 void rtl8192c_PHY_GetHWRegOriginalValue( IN PADAPTER Adapter );
70176
70177 @@ -409,8 +388,6 @@ VOID rtl8192c_PHY_LCCalibrate(IN PADAPTER pAdapter);
70178 //
70179 VOID rtl8192c_PHY_APCalibrate(IN PADAPTER pAdapter, IN char delta);
70180
70181 -VOID rtl8192c_PHY_DigitalPredistortion(IN PADAPTER pAdapter);
70182 -
70183 VOID rtl8192c_PHY_SetRFPathSwitch(IN PADAPTER pAdapter, IN BOOLEAN bMain);
70184
70185 //
70186 diff --git a/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h b/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h
70187 index 1f9f330..6364166 100644
70188 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h
70189 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h
70190 @@ -197,6 +197,19 @@
70191 #define rCCK0_FACounterUpper 0xa58 //0xa5c
70192
70193 //
70194 +// PageB(0xB00)
70195 +//
70196 +#define rPdp_AntA 0xb00
70197 +#define rPdp_AntA_4 0xb04
70198 +#define rConfig_Pmpd_AntA 0xb28
70199 +#define rConfig_AntA 0xb68
70200 +#define rConfig_AntB 0xb6c
70201 +#define rPdp_AntB 0xb70
70202 +#define rPdp_AntB_4 0xb74
70203 +#define rConfig_Pmpd_AntB 0xb98
70204 +#define rAPK 0xbd8
70205 +
70206 +//
70207 // 6. PageC(0xC00)
70208 //
70209 #define rOFDM0_LSTF 0xc00
70210 @@ -390,12 +403,20 @@
70211
70212 #define RF_IQADJ_G1 0x01 //
70213 #define RF_IQADJ_G2 0x02 //
70214 +#define RF_BS_PA_APSET_G1_G4 0x03
70215 +#define RF_BS_PA_APSET_G5_G8 0x04
70216 #define RF_POW_TRSW 0x05 //
70217
70218 #define RF_GAIN_RX 0x06 //
70219 #define RF_GAIN_TX 0x07 //
70220
70221 #define RF_TXM_IDAC 0x08 //
70222 +#define RF_IPA_G 0x09 //
70223 +#define RF_TXBIAS_G 0x0A
70224 +#define RF_TXPA_AG 0x0B
70225 +#define RF_IPA_A 0x0C //
70226 +#define RF_TXBIAS_A 0x0D
70227 +#define RF_BS_PA_APSET_G9_G11 0x0E
70228 #define RF_BS_IQGEN 0x0F //
70229
70230 #define RF_MODE1 0x10 //
70231 diff --git a/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h b/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h
70232 index 254a060..ba3c282 100644
70233 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h
70234 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h
70235 @@ -20,31 +20,31 @@
70236 #ifndef __INC_HAL8192CU_FW_IMG_H
70237 #define __INC_HAL8192CU_FW_IMG_H
70238
70239 -/*Created on 2011/12/14, 8:38*/
70240 +/*Created on 2011/ 6/15, 5:45*/
70241
70242 #ifdef CONFIG_BT_COEXISTENCE
70243 -#define TSMCImgArrayLength 16248 //v79 TSMC COMMON 2011-10-06
70244 -#else
70245 -#define TSMCImgArrayLength 16116 //v80 TSMC P2PPS 2011-12-14
70246 +#define TSMCImgArrayLength 15706 //v84 TSMC COMMON 2012-04-13
70247 +#else //#ifdef CONFIG_P2P
70248 +#define TSMCImgArrayLength 16126 //v88 TSMC P2PPS with CCX report C2H 2012-12-05
70249 #endif
70250 extern u8 Rtl8192CUFwTSMCImgArray[TSMCImgArrayLength];
70251
70252 #ifdef CONFIG_BT_COEXISTENCE
70253 #define UMCACutImgArrayLength 16248 //v79 UMC A Cut COMMON 2011-10-06
70254 #else //#ifdef CONFIG_P2P
70255 -#define UMCACutImgArrayLength 16116 //v80 UMC A Cut P2PPS 2011-12-14
70256 +#define UMCACutImgArrayLength 16126 //v88 UMC A Cut P2PPS with CCX report C2H 2012-12-05
70257 #endif
70258 extern u8 Rtl8192CUFwUMCACutImgArray[UMCACutImgArrayLength];
70259
70260 #ifdef CONFIG_BT_COEXISTENCE
70261 -#define UMCBCutImgArrayLength 16254 //v79 UMC B Cut COMMON 2011-10-06
70262 +#define UMCBCutImgArrayLength 15686 //v84 UMC B Cut COMMON 2012-04-13
70263 #else //#ifdef CONFIG_P2P
70264 -#define UMCBCutImgArrayLength 16096 //v80 UMC B Cut P2PPS 2011-12-14
70265 +#define UMCBCutImgArrayLength 16096 //v88 UMC B Cut P2PPS with CCX report C2H 2012-12-05
70266 #endif
70267 extern u8 Rtl8192CUFwUMCBCutImgArray[UMCBCutImgArrayLength];
70268
70269 -#define UMC8723ImgArrayLength 16288
70270 -extern u8 Rtl8192CUFwUMC8723ImgArray[UMC8723ImgArrayLength];
70271 +//8188C_Formal_All_PHYforMP_111117 2011-11-23
70272 +//8192C_Formal_92CU_PHYforMP_110817 2011-11-23
70273 #define PHY_REG_2TArrayLength 374
70274 extern u32 Rtl8192CUPHY_REG_2TArray[PHY_REG_2TArrayLength];
70275 #define PHY_REG_1TArrayLength 374
70276 @@ -77,6 +77,10 @@ extern u32 Rtl8192CURadioB_2TArray[RadioB_2TArrayLength];
70277 extern u32 Rtl8192CURadioA_1TArray[RadioA_1TArrayLength];
70278 #define RadioB_1TArrayLength 1
70279 extern u32 Rtl8192CURadioB_1TArray[RadioB_1TArrayLength];
70280 +#define RadioA_2T_mCardArrayLength 282
70281 +extern u32 Rtl8192CURadioA_2T_mCardArray[RadioA_2T_mCardArrayLength];
70282 +#define RadioB_2T_mCardArrayLength 78
70283 +extern u32 Rtl8192CURadioB_2T_mCardArray[RadioB_2T_mCardArrayLength];
70284 #define RadioA_1T_mCardArrayLength 282
70285 extern u32 Rtl8192CURadioA_1T_mCardArray[RadioA_1T_mCardArrayLength];
70286 #define RadioB_1T_mCardArrayLength 1
70287 @@ -85,7 +89,9 @@ extern u32 Rtl8192CURadioB_1T_mCardArray[RadioB_1T_mCardArrayLength];
70288 extern u32 Rtl8192CURadioA_1T_HPArray[RadioA_1T_HPArrayLength];
70289 #define RadioB_GM_ArrayLength 1
70290 extern u32 Rtl8192CURadioB_GM_Array[RadioB_GM_ArrayLength];
70291 -#define MAC_2T_ArrayLength 172
70292 +
70293 +// MAC reg V14 - 2011-11-23
70294 +#define MAC_2T_ArrayLength 174
70295 extern u32 Rtl8192CUMAC_2T_Array[MAC_2T_ArrayLength];
70296 #define MACPHY_Array_PGLength 1
70297 extern u32 Rtl8192CUMACPHY_Array_PG[MACPHY_Array_PGLength];
70298 diff --git a/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h b/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h
70299 index dc2bc17..0639775 100644
70300 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h
70301 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h
70302 @@ -17,50 +17,50 @@
70303 *
70304 *
70305 ******************************************************************************/
70306 -#ifndef __INC_HAL8192DU_FW_IMG_H
70307 -#define __INC_HAL8192DU_FW_IMG_H
70308 +#ifndef __INC_HAL8192DE_FW_IMG_H
70309 +#define __INC_HAL8192DE_FW_IMG_H
70310
70311 #include <basic_types.h>
70312
70313 -/*Created on 2011/ 8/ 8, 1:41*/
70314 +/*Created on 2011/11/11, 8: 8*/
70315
70316 -#define ImgArrayLength 29642
70317 -extern u8 Rtl8192DEFwImgArray[ImgArrayLength];
70318 -#define MainArrayLength 1
70319 -extern u8 Rtl8192DEFwMainArray[MainArrayLength];
70320 -#define DataArrayLength 1
70321 -extern u8 Rtl8192DEFwDataArray[DataArrayLength];
70322 -#define PHY_REG_2TArrayLength 380
70323 -extern u32 Rtl8192DEPHY_REG_2TArray[PHY_REG_2TArrayLength];
70324 -#define PHY_REG_1TArrayLength 1
70325 -extern u32 Rtl8192DEPHY_REG_1TArray[PHY_REG_1TArrayLength];
70326 -#define PHY_REG_Array_PGLength 624
70327 -extern u32 Rtl8192DEPHY_REG_Array_PG[PHY_REG_Array_PGLength];
70328 -#define PHY_REG_Array_MPLength 10
70329 -extern u32 Rtl8192DEPHY_REG_Array_MP[PHY_REG_Array_MPLength];
70330 -#define RadioA_2TArrayLength 378
70331 -extern u32 Rtl8192DERadioA_2TArray[RadioA_2TArrayLength];
70332 -#define RadioB_2TArrayLength 384
70333 -extern u32 Rtl8192DERadioB_2TArray[RadioB_2TArrayLength];
70334 -#define RadioA_1TArrayLength 1
70335 -extern u32 Rtl8192DERadioA_1TArray[RadioA_1TArrayLength];
70336 -#define RadioB_1TArrayLength 1
70337 -extern u32 Rtl8192DERadioB_1TArray[RadioB_1TArrayLength];
70338 -#define RadioA_2T_intPAArrayLength 378
70339 -extern u32 Rtl8192DERadioA_2T_intPAArray[RadioA_2T_intPAArrayLength];
70340 -#define RadioB_2T_intPAArrayLength 384
70341 -extern u32 Rtl8192DERadioB_2T_intPAArray[RadioB_2T_intPAArrayLength];
70342 -#define MAC_2TArrayLength 160
70343 -extern u32 Rtl8192DEMAC_2TArray[MAC_2TArrayLength];
70344 -#define AGCTAB_ArrayLength 386
70345 -extern u32 Rtl8192DEAGCTAB_Array[AGCTAB_ArrayLength];
70346 -#define AGCTAB_5GArrayLength 194
70347 -extern u32 Rtl8192DEAGCTAB_5GArray[AGCTAB_5GArrayLength];
70348 -#define AGCTAB_2GArrayLength 194
70349 -extern u32 Rtl8192DEAGCTAB_2GArray[AGCTAB_2GArrayLength];
70350 -#define AGCTAB_2TArrayLength 1
70351 -extern u32 Rtl8192DEAGCTAB_2TArray[AGCTAB_2TArrayLength];
70352 -#define AGCTAB_1TArrayLength 1
70353 -extern u32 Rtl8192DEAGCTAB_1TArray[AGCTAB_1TArrayLength];
70354 +#define Rtl8192DEImgArrayLength 32296
70355 +extern const u8 Rtl8192DEFwImgArray[Rtl8192DEImgArrayLength];
70356 +#define Rtl8192DEMainArrayLength 1
70357 +extern const u8 Rtl8192DEFwMainArray[Rtl8192DEMainArrayLength];
70358 +#define Rtl8192DEDataArrayLength 1
70359 +extern const u8 Rtl8192DEFwDataArray[Rtl8192DEDataArrayLength];
70360 +#define Rtl8192DEPHY_REG_2TArrayLength 372
70361 +extern const u32 Rtl8192DEPHY_REG_2TArray[Rtl8192DEPHY_REG_2TArrayLength];
70362 +#define Rtl8192DEPHY_REG_1TArrayLength 1
70363 +extern const u32 Rtl8192DEPHY_REG_1TArray[Rtl8192DEPHY_REG_1TArrayLength];
70364 +#define Rtl8192DEPHY_REG_Array_PGLength 624
70365 +extern const u32 Rtl8192DEPHY_REG_Array_PG[Rtl8192DEPHY_REG_Array_PGLength];
70366 +#define Rtl8192DEPHY_REG_Array_MPLength 12
70367 +extern const u32 Rtl8192DEPHY_REG_Array_MP[Rtl8192DEPHY_REG_Array_MPLength];
70368 +#define Rtl8192DERadioA_2TArrayLength 378
70369 +extern const u32 Rtl8192DERadioA_2TArray[Rtl8192DERadioA_2TArrayLength];
70370 +#define Rtl8192DERadioB_2TArrayLength 384
70371 +extern const u32 Rtl8192DERadioB_2TArray[Rtl8192DERadioB_2TArrayLength];
70372 +#define Rtl8192DERadioA_1TArrayLength 1
70373 +extern const u32 Rtl8192DERadioA_1TArray[Rtl8192DERadioA_1TArrayLength];
70374 +#define Rtl8192DERadioB_1TArrayLength 1
70375 +extern const u32 Rtl8192DERadioB_1TArray[Rtl8192DERadioB_1TArrayLength];
70376 +#define Rtl8192DERadioA_2T_intPAArrayLength 378
70377 +extern const u32 Rtl8192DERadioA_2T_intPAArray[Rtl8192DERadioA_2T_intPAArrayLength];
70378 +#define Rtl8192DERadioB_2T_intPAArrayLength 384
70379 +extern const u32 Rtl8192DERadioB_2T_intPAArray[Rtl8192DERadioB_2T_intPAArrayLength];
70380 +#define Rtl8192DEMAC_2T_ArrayLength 192
70381 +extern const u32 Rtl8192DEMAC_2T_Array[Rtl8192DEMAC_2T_ArrayLength];
70382 +#define Rtl8192DEAGCTAB_ArrayLength 386
70383 +extern const u32 Rtl8192DEAGCTAB_Array[Rtl8192DEAGCTAB_ArrayLength];
70384 +#define Rtl8192DEAGCTAB_5GArrayLength 194
70385 +extern const u32 Rtl8192DEAGCTAB_5GArray[Rtl8192DEAGCTAB_5GArrayLength];
70386 +#define Rtl8192DEAGCTAB_2GArrayLength 194
70387 +extern const u32 Rtl8192DEAGCTAB_2GArray[Rtl8192DEAGCTAB_2GArrayLength];
70388 +#define Rtl8192DEAGCTAB_2TArrayLength 1
70389 +extern const u32 Rtl8192DEAGCTAB_2TArray[Rtl8192DEAGCTAB_2TArrayLength];
70390 +#define Rtl8192DEAGCTAB_1TArrayLength 1
70391 +extern const u32 Rtl8192DEAGCTAB_1TArray[Rtl8192DEAGCTAB_1TArrayLength];
70392
70393 #endif //__INC_HAL8192CU_FW_IMG_H
70394 diff --git a/drivers/net/wireless/rtl8192cu/include/Hal8192DETestHWImg.h b/drivers/net/wireless/rtl8192cu/include/Hal8192DETestHWImg.h
70395 deleted file mode 100644
70396 index 2432bcd..0000000
70397 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192DETestHWImg.h
70398 +++ /dev/null
70399 @@ -1,54 +0,0 @@
70400 -/******************************************************************************
70401 - *
70402 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
70403 - *
70404 - * This program is free software; you can redistribute it and/or modify it
70405 - * under the terms of version 2 of the GNU General Public License as
70406 - * published by the Free Software Foundation.
70407 - *
70408 - * This program is distributed in the hope that it will be useful, but WITHOUT
70409 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
70410 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
70411 - * more details.
70412 - *
70413 - * You should have received a copy of the GNU General Public License along with
70414 - * this program; if not, write to the Free Software Foundation, Inc.,
70415 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
70416 - *
70417 - *
70418 - ******************************************************************************/
70419 -#ifndef __INC_HAL8192DETEST_FW_IMG_H
70420 -#define __INC_HAL8192DETEST_FW_IMG_H
70421 -
70422 -#include <basic_types.h>
70423 -
70424 -/*Created on 2010/ 5/27, 8: 6*/
70425 -
70426 -#define Rtl8192DTestImgArrayLength 15054
70427 -extern u8 Rtl8192DTestFwImgArray[Rtl8192DTestImgArrayLength];
70428 -#define Rtl8192DTestMainArrayLength 1
70429 -extern u8 Rtl8192DTestFwMainArray[Rtl8192DTestMainArrayLength];
70430 -#define Rtl8192DTestDataArrayLength 1
70431 -extern u8 Rtl8192DTestFwDataArray[Rtl8192DTestDataArrayLength];
70432 -#define Rtl8192DTestPHY_REG_2TArrayLength 376
70433 -extern u32 Rtl8192DTestPHY_REG_2TArray[Rtl8192DTestPHY_REG_2TArrayLength];
70434 -#define Rtl8192DTestPHY_REG_1TArrayLength 1
70435 -extern u32 Rtl8192DTestPHY_REG_1TArray[Rtl8192DTestPHY_REG_1TArrayLength];
70436 -#define Rtl8192DTestPHY_REG_Array_PGLength 1
70437 -extern u32 Rtl8192DTestPHY_REG_Array_PG[Rtl8192DTestPHY_REG_Array_PGLength];
70438 -#define Rtl8192DTestRadioA_2TArrayLength 340
70439 -extern u32 Rtl8192DTestRadioA_2TArray[Rtl8192DTestRadioA_2TArrayLength];
70440 -#define Rtl8192DTestRadioB_2TArrayLength 340
70441 -extern u32 Rtl8192DTestRadioB_2TArray[Rtl8192DTestRadioB_2TArrayLength];
70442 -#define Rtl8192DTestRadioA_1TArrayLength 1
70443 -extern u32 Rtl8192DTestRadioA_1TArray[Rtl8192DTestRadioA_1TArrayLength];
70444 -#define Rtl8192DTestRadioB_1TArrayLength 1
70445 -extern u32 Rtl8192DTestRadioB_1TArray[Rtl8192DTestRadioB_1TArrayLength];
70446 -#define Rtl8192DTestMAC_2TArrayLength 174
70447 -extern u32 Rtl8192DTestMAC_2TArray[Rtl8192DTestMAC_2TArrayLength];
70448 -#define Rtl8192DTestAGCTAB_5GArrayLength 514
70449 -extern u32 Rtl8192DTestAGCTAB_5GArray[Rtl8192DTestAGCTAB_5GArrayLength];
70450 -#define Rtl8192DTestAGCTAB_2GArrayLength 514
70451 -extern u32 Rtl8192DTestAGCTAB_2GArray[Rtl8192DTestAGCTAB_2GArrayLength];
70452 -
70453 -#endif //__INC_HAL8192CU_FW_IMG_H
70454 diff --git a/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h b/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h
70455 index 475cf36..624fbda 100644
70456 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h
70457 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h
70458 @@ -157,6 +157,16 @@ typedef enum _MACPHY_MODE_8192D{
70459 DUALMAC_SINGLEPHY,
70460 }MACPHY_MODE_8192D,*PMACPHY_MODE_8192D;
70461
70462 +typedef enum _MACPHY_MODE_CHANGE_ACTION{
70463 + DMDP2DMSP = 0,
70464 + DMSP2DMDP = 1,
70465 + DMDP2SMSP = 2,
70466 + SMSP2DMDP = 3,
70467 + DMSP2SMSP = 4,
70468 + SMSP2DMSP = 5,
70469 + MAXACTION
70470 +}MACPHY_MODE_CHANGE_ACTION,*PMACPHY_MODE_CHANGE_ACTION;
70471 +
70472 typedef enum _BAND_TYPE{
70473 BAND_ON_2_4G = 0,
70474 BAND_ON_5G,
70475 @@ -187,19 +197,6 @@ typedef enum _RF_TYPE_8190P{
70476 RF_PSEUDO_11N=5, // 5, It is a temporality RF.
70477 }RF_TYPE_8190P_E,*PRF_TYPE_8190P_E;
70478
70479 -
70480 -typedef enum _RATR_TABLE_MODE_8192C{
70481 - RATR_INX_WIRELESS_NGB = 0,
70482 - RATR_INX_WIRELESS_NG = 1,
70483 - RATR_INX_WIRELESS_NB = 2,
70484 - RATR_INX_WIRELESS_N = 3,
70485 - RATR_INX_WIRELESS_GB = 4,
70486 - RATR_INX_WIRELESS_G = 5,
70487 - RATR_INX_WIRELESS_B = 6,
70488 - RATR_INX_WIRELESS_MC = 7,
70489 - RATR_INX_WIRELESS_A = 8,
70490 -}RATR_TABLE_MODE_8192C, *PRATR_TABLE_MODE_8192C;
70491 -
70492 typedef struct _BB_REGISTER_DEFINITION{
70493 u32 rfintfs; // set software control:
70494 // 0x870~0x877[8 bytes]
70495 @@ -514,6 +511,9 @@ HalChangeCCKStatus8192D(
70496 IN BOOLEAN bCCKDisable
70497 );
70498
70499 +VOID
70500 +PHY_InitPABias92D(IN PADAPTER Adapter);
70501 +
70502 /*--------------------------Exported Function prototype---------------------*/
70503
70504 #define PHY_SetBBReg1Byte(Adapter, RegAddr, BitMask, Data) rtl8192d_PHY_SetBBReg1Byte((Adapter), (RegAddr), (BitMask), (Data))
70505 diff --git a/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h b/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h
70506 index d931001..d6c66d9 100644
70507 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h
70508 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h
70509 @@ -24,7 +24,7 @@
70510
70511 /*Created on 2011/11/11, 8: 8*/
70512
70513 -#define Rtl8192DUImgArrayLength 32142
70514 +#define Rtl8192DUImgArrayLength 31452
70515 extern const u8 Rtl8192DUFwImgArray[Rtl8192DUImgArrayLength];
70516 #define Rtl8192DUMainArrayLength 1
70517 extern const u8 Rtl8192DUFwMainArray[Rtl8192DUMainArrayLength];
70518 @@ -36,7 +36,7 @@ extern const u32 Rtl8192DUPHY_REG_2TArray[Rtl8192DUPHY_REG_2TArrayLength];
70519 extern const u32 Rtl8192DUPHY_REG_1TArray[Rtl8192DUPHY_REG_1TArrayLength];
70520 #define Rtl8192DUPHY_REG_Array_PGLength 624
70521 extern const u32 Rtl8192DUPHY_REG_Array_PG[Rtl8192DUPHY_REG_Array_PGLength];
70522 -#define Rtl8192DUPHY_REG_Array_MPLength 12
70523 +#define Rtl8192DUPHY_REG_Array_MPLength 14
70524 extern const u32 Rtl8192DUPHY_REG_Array_MP[Rtl8192DUPHY_REG_Array_MPLength];
70525 #define Rtl8192DURadioA_2TArrayLength 378
70526 extern const u32 Rtl8192DURadioA_2TArray[Rtl8192DURadioA_2TArrayLength];
70527 diff --git a/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h b/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h
70528 index a297e76..cc27a77 100644
70529 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h
70530 +++ b/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h
70531 @@ -23,7 +23,7 @@
70532 /*Created on 2011/11/ 8, 14:15*/
70533
70534
70535 -#define DUWWImgArrayLength 16656
70536 +#define DUWWImgArrayLength 24818
70537 extern u8 Rtl8192DUFwWWImgArray[DUWWImgArrayLength];
70538
70539 #endif //__INC_HAL8192DU_FW_IMG_WOWLAN_H
70540 diff --git a/drivers/net/wireless/rtl8192cu/include/Hal8192DUTestHWImg.h b/drivers/net/wireless/rtl8192cu/include/Hal8192DUTestHWImg.h
70541 deleted file mode 100644
70542 index e0491ff..0000000
70543 --- a/drivers/net/wireless/rtl8192cu/include/Hal8192DUTestHWImg.h
70544 +++ /dev/null
70545 @@ -1,54 +0,0 @@
70546 -/******************************************************************************
70547 - *
70548 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
70549 - *
70550 - * This program is free software; you can redistribute it and/or modify it
70551 - * under the terms of version 2 of the GNU General Public License as
70552 - * published by the Free Software Foundation.
70553 - *
70554 - * This program is distributed in the hope that it will be useful, but WITHOUT
70555 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
70556 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
70557 - * more details.
70558 - *
70559 - * You should have received a copy of the GNU General Public License along with
70560 - * this program; if not, write to the Free Software Foundation, Inc.,
70561 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
70562 - *
70563 - *
70564 - ******************************************************************************/
70565 -#ifndef __INC_HAL8192DUTEST_FW_IMG_H
70566 -#define __INC_HAL8192DUTEST_FW_IMG_H
70567 -
70568 -#include <basic_types.h>
70569 -
70570 -/*Created on 2010/ 5/27, 9:49*/
70571 -
70572 -#define Rtl8192DTestImgArrayLength 15054
70573 -extern u8 Rtl8192DTestFwImgArray[Rtl8192DTestImgArrayLength];
70574 -#define Rtl8192DTestMainArrayLength 1
70575 -extern u8 Rtl8192DTestFwMainArray[Rtl8192DTestMainArrayLength];
70576 -#define Rtl8192DTestDataArrayLength 1
70577 -extern u8 Rtl8192DTestFwDataArray[Rtl8192DTestDataArrayLength];
70578 -#define Rtl8192DTestPHY_REG_2TArrayLength 376
70579 -extern u32 Rtl8192DTestPHY_REG_2TArray[Rtl8192DTestPHY_REG_2TArrayLength];
70580 -#define Rtl8192DTestPHY_REG_1TArrayLength 1
70581 -extern u32 Rtl8192DTestPHY_REG_1TArray[Rtl8192DTestPHY_REG_1TArrayLength];
70582 -#define Rtl8192DTestPHY_REG_Array_PGLength 1
70583 -extern u32 Rtl8192DTestPHY_REG_Array_PG[Rtl8192DTestPHY_REG_Array_PGLength];
70584 -#define Rtl8192DTestRadioA_2TArrayLength 340
70585 -extern u32 Rtl8192DTestRadioA_2TArray[Rtl8192DTestRadioA_2TArrayLength];
70586 -#define Rtl8192DTestRadioB_2TArrayLength 340
70587 -extern u32 Rtl8192DTestRadioB_2TArray[Rtl8192DTestRadioB_2TArrayLength];
70588 -#define Rtl8192DTestRadioA_1TArrayLength 1
70589 -extern u32 Rtl8192DTestRadioA_1TArray[Rtl8192DTestRadioA_1TArrayLength];
70590 -#define Rtl8192DTestRadioB_1TArrayLength 1
70591 -extern u32 Rtl8192DTestRadioB_1TArray[Rtl8192DTestRadioB_1TArrayLength];
70592 -#define Rtl8192DTestMAC_2TArrayLength 174
70593 -extern u32 Rtl8192DTestMAC_2TArray[Rtl8192DTestMAC_2TArrayLength];
70594 -#define Rtl8192DTestAGCTAB_5GArrayLength 514
70595 -extern u32 Rtl8192DTestAGCTAB_5GArray[Rtl8192DTestAGCTAB_5GArrayLength];
70596 -#define Rtl8192DTestAGCTAB_2GArrayLength 514
70597 -extern u32 Rtl8192DTestAGCTAB_2GArray[Rtl8192DTestAGCTAB_2GArrayLength];
70598 -
70599 -#endif //__INC_HAL8192CU_FW_IMG_H
70600 diff --git a/drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h b/drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h
70601 new file mode 100644
70602 index 0000000..e5d151c
70603 --- /dev/null
70604 +++ b/drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h
70605 @@ -0,0 +1,137 @@
70606 +/******************************************************************************
70607 + *
70608 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
70609 + *
70610 + * This program is free software; you can redistribute it and/or modify it
70611 + * under the terms of version 2 of the GNU General Public License as
70612 + * published by the Free Software Foundation.
70613 + *
70614 + * This program is distributed in the hope that it will be useful, but WITHOUT
70615 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
70616 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
70617 + * more details.
70618 + *
70619 + * You should have received a copy of the GNU General Public License along with
70620 + * this program; if not, write to the Free Software Foundation, Inc.,
70621 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
70622 + *
70623 + *
70624 + ******************************************************************************/
70625 +#ifndef __HALPWRSEQCMD_H__
70626 +#define __HALPWRSEQCMD_H__
70627 +
70628 +#include <drv_types.h>
70629 +
70630 +/*---------------------------------------------*/
70631 +//3 The value of cmd: 4 bits
70632 +/*---------------------------------------------*/
70633 +#define PWR_CMD_READ 0x00
70634 + // offset: the read register offset
70635 + // msk: the mask of the read value
70636 + // value: N/A, left by 0
70637 + // note: dirver shall implement this function by read & msk
70638 +
70639 +#define PWR_CMD_WRITE 0x01
70640 + // offset: the read register offset
70641 + // msk: the mask of the write bits
70642 + // value: write value
70643 + // note: driver shall implement this cmd by read & msk after write
70644 +
70645 +#define PWR_CMD_POLLING 0x02
70646 + // offset: the read register offset
70647 + // msk: the mask of the polled value
70648 + // value: the value to be polled, masked by the msd field.
70649 + // note: driver shall implement this cmd by
70650 + // do{
70651 + // if( (Read(offset) & msk) == (value & msk) )
70652 + // break;
70653 + // } while(not timeout);
70654 +
70655 +#define PWR_CMD_DELAY 0x03
70656 + // offset: the value to delay
70657 + // msk: N/A
70658 + // value: the unit of delay, 0: us, 1: ms
70659 +
70660 +#define PWR_CMD_END 0x04
70661 + // offset: N/A
70662 + // msk: N/A
70663 + // value: N/A
70664 +
70665 +/*---------------------------------------------*/
70666 +//3 The value of base: 4 bits
70667 +/*---------------------------------------------*/
70668 + // define the base address of each block
70669 +#define PWR_BASEADDR_MAC 0x00
70670 +#define PWR_BASEADDR_USB 0x01
70671 +#define PWR_BASEADDR_PCIE 0x02
70672 +#define PWR_BASEADDR_SDIO 0x03
70673 +
70674 +/*---------------------------------------------*/
70675 +//3 The value of interface_msk: 4 bits
70676 +/*---------------------------------------------*/
70677 +#define PWR_INTF_SDIO_MSK BIT(0)
70678 +#define PWR_INTF_USB_MSK BIT(1)
70679 +#define PWR_INTF_PCI_MSK BIT(2)
70680 +#define PWR_INTF_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
70681 +
70682 +/*---------------------------------------------*/
70683 +//3 The value of fab_msk: 4 bits
70684 +/*---------------------------------------------*/
70685 +#define PWR_FAB_TSMC_MSK BIT(0)
70686 +#define PWR_FAB_UMC_MSK BIT(1)
70687 +#define PWR_FAB_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
70688 +
70689 +/*---------------------------------------------*/
70690 +//3 The value of cut_msk: 8 bits
70691 +/*---------------------------------------------*/
70692 +#define PWR_CUT_TESTCHIP_MSK BIT(0)
70693 +#define PWR_CUT_A_MSK BIT(1)
70694 +#define PWR_CUT_B_MSK BIT(2)
70695 +#define PWR_CUT_C_MSK BIT(3)
70696 +#define PWR_CUT_D_MSK BIT(4)
70697 +#define PWR_CUT_E_MSK BIT(5)
70698 +#define PWR_CUT_F_MSK BIT(6)
70699 +#define PWR_CUT_G_MSK BIT(7)
70700 +#define PWR_CUT_ALL_MSK 0xFF
70701 +
70702 +
70703 +typedef enum _PWRSEQ_CMD_DELAY_UNIT_
70704 +{
70705 + PWRSEQ_DELAY_US,
70706 + PWRSEQ_DELAY_MS,
70707 +} PWRSEQ_DELAY_UNIT;
70708 +
70709 +typedef struct _WL_PWR_CFG_
70710 +{
70711 + u16 offset;
70712 + u8 cut_msk;
70713 + u8 fab_msk:4;
70714 + u8 interface_msk:4;
70715 + u8 base:4;
70716 + u8 cmd:4;
70717 + u8 msk;
70718 + u8 value;
70719 +} WLAN_PWR_CFG, *PWLAN_PWR_CFG;
70720 +
70721 +
70722 +#define GET_PWR_CFG_OFFSET(__PWR_CMD) __PWR_CMD.offset
70723 +#define GET_PWR_CFG_CUT_MASK(__PWR_CMD) __PWR_CMD.cut_msk
70724 +#define GET_PWR_CFG_FAB_MASK(__PWR_CMD) __PWR_CMD.fab_msk
70725 +#define GET_PWR_CFG_INTF_MASK(__PWR_CMD) __PWR_CMD.interface_msk
70726 +#define GET_PWR_CFG_BASE(__PWR_CMD) __PWR_CMD.base
70727 +#define GET_PWR_CFG_CMD(__PWR_CMD) __PWR_CMD.cmd
70728 +#define GET_PWR_CFG_MASK(__PWR_CMD) __PWR_CMD.msk
70729 +#define GET_PWR_CFG_VALUE(__PWR_CMD) __PWR_CMD.value
70730 +
70731 +
70732 +//================================================================================
70733 +// Prototype of protected function.
70734 +//================================================================================
70735 +u8 HalPwrSeqCmdParsing(
70736 + PADAPTER padapter,
70737 + u8 CutVersion,
70738 + u8 FabVersion,
70739 + u8 InterfaceType,
70740 + WLAN_PWR_CFG PwrCfgCmd[]);
70741 +
70742 +#endif
70743 diff --git a/drivers/net/wireless/rtl8192cu/include/autoconf.h b/drivers/net/wireless/rtl8192cu/include/autoconf.h
70744 index 7d6db40..12294df 100644
70745 --- a/drivers/net/wireless/rtl8192cu/include/autoconf.h
70746 +++ b/drivers/net/wireless/rtl8192cu/include/autoconf.h
70747 @@ -31,11 +31,13 @@
70748
70749 #define PLATFORM_LINUX 1
70750
70751 -
70752 //#define CONFIG_IOCTL_CFG80211 1
70753 #ifdef CONFIG_IOCTL_CFG80211
70754 + //#define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */
70755 #define CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER
70756 //#define CONFIG_DEBUG_CFG80211 1
70757 + //#define CONFIG_DRV_ISSUE_PROV_REQ // IOT FOR S2
70758 + #define CONFIG_SET_SCAN_DENY_TIMER
70759 #endif
70760
70761 /*
70762 @@ -53,12 +55,19 @@
70763
70764 #define CONFIG_R871X_TEST 1
70765
70766 +#define CONFIG_XMIT_ACK
70767 +#ifdef CONFIG_XMIT_ACK
70768 + #define CONFIG_XMIT_ACK_POLLING
70769 + #define CONFIG_ACTIVE_KEEP_ALIVE_CHECK
70770 +#endif
70771 +
70772 #define CONFIG_80211N_HT 1
70773
70774 #define CONFIG_RECV_REORDERING_CTRL 1
70775
70776 //#define CONFIG_TCP_CSUM_OFFLOAD_RX 1
70777
70778 +//#define CONFIG_BEFORE_LINKED_DIG
70779 //#define CONFIG_DRVEXT_MODULE 1
70780
70781 #ifndef CONFIG_MP_INCLUDED
70782 @@ -66,53 +75,69 @@
70783 #ifdef CONFIG_IPS
70784 //#define CONFIG_IPS_LEVEL_2 1 //enable this to set default IPS mode to IPS_LEVEL_2
70785 #endif
70786 - #define SUPPORT_HW_RFOFF_DETECTED 1
70787
70788 + #define SUPPORT_HW_RFOFF_DETECTED 1
70789 +
70790 #define CONFIG_LPS 1
70791 #define CONFIG_BT_COEXIST 1
70792 +
70793 //befor link
70794 - #define CONFIG_ANTENNA_DIVERSITY
70795 + #define CONFIG_ANTENNA_DIVERSITY
70796 +
70797 //after link
70798 #ifdef CONFIG_ANTENNA_DIVERSITY
70799 - #define CONFIG_SW_ANTENNA_DIVERSITY
70800 - //#define CONFIG_HW_ANTENNA_DIVERSITY
70801 + #define CONFIG_SW_ANTENNA_DIVERSITY
70802 + //#define CONFIG_HW_ANTENNA_DIVERSITY
70803 #endif
70804 -
70805 +
70806 #define CONFIG_IOL
70807 -#else //#ifndef CONFIG_MP_INCLUDED
70808 +#else //#ifndef CONFIG_MP_INCLUDED
70809 #define CONFIG_MP_IWPRIV_SUPPORT 1
70810 -#endif //#ifndef CONFIG_MP_INCLUDED
70811 +#endif //#ifndef CONFIG_MP_INCLUDED
70812
70813 #define CONFIG_AP_MODE 1
70814 -#define CONFIG_NATIVEAP_MLME 1
70815 +#ifdef CONFIG_AP_MODE
70816 + #define CONFIG_NATIVEAP_MLME 1
70817 + #ifndef CONFIG_NATIVEAP_MLME
70818 + #define CONFIG_HOSTAPD_MLME 1
70819 + #endif
70820 + #define CONFIG_FIND_BEST_CHANNEL 1
70821 + //#define CONFIG_NO_WIRELESS_HANDLERS 1
70822 +#endif
70823
70824 // Added by Albert 20110314
70825 #define CONFIG_P2P 1
70826 -
70827 -
70828 #ifdef CONFIG_P2P
70829 -// Added by Albert 20110812
70830 -// The CONFIG_WFD is for supporting the Wi-Fi display
70831 -//#define CONFIG_WFD 1
70832 -
70833 -// Unmarked if there is low p2p scanned ratio; Kurt
70834 -//#define CONFIG_P2P_AGAINST_NOISE 1
70835 -#define CONFIG_P2P_REMOVE_GROUP_INFO
70836 -//#define CONFIG_DBG_P2P
70837 + //Added by Albert 20110812
70838 + //The CONFIG_WFD is for supporting the Wi-Fi display
70839 + #define CONFIG_WFD
70840 +
70841 + #ifndef CONFIG_WIFI_TEST
70842 + #define CONFIG_P2P_REMOVE_GROUP_INFO
70843 + #endif
70844 + //#define CONFIG_DBG_P2P
70845 +
70846 + //#define CONFIG_P2P_PS
70847 + //#define CONFIG_P2P_IPS
70848 +
70849 + #define P2P_OP_CHECK_SOCIAL_CH
70850 + // Added comment by Borg 2013/06/21
70851 + // Issue: Nexus 4 is hard to do miracast.
70852 + // Root Cause: After group formation,
70853 + // Nexus 4 is possible to be not at OP channel of Invitation Resp/Nego Confirm but at social channel.
70854 + // Patch: While scan OP channel,
70855 + // not only scan OP channel of Invitation Resp/Nego Confirm,
70856 + // but also scan social channel(1, 6, 11)
70857 #endif
70858
70859 // Added by Kurt 20110511
70860 //#define CONFIG_TDLS 1
70861 #ifdef CONFIG_TDLS
70862 - #define CONFIG_TDLS_AUTOSETUP 1
70863 - #define CONFIG_TDLS_AUTOCHECKALIVE 1
70864 -#endif
70865 -
70866 -#ifdef CONFIG_AP_MODE
70867 - #ifndef CONFIG_NATIVEAP_MLME
70868 - #define CONFIG_HOSTAPD_MLME 1
70869 - #endif
70870 - #define CONFIG_FIND_BEST_CHANNEL 1
70871 +// #ifndef CONFIG_WFD
70872 +// #define CONFIG_WFD 1
70873 +// #endif
70874 +// #define CONFIG_TDLS_AUTOSETUP 1
70875 +// #define CONFIG_TDLS_AUTOCHECKALIVE 1
70876 #endif
70877
70878 #define CONFIG_SKB_COPY 1//for amsdu
70879 @@ -138,6 +163,8 @@
70880 #define CONFIG_LONG_DELAY_ISSUE
70881 #define CONFIG_NEW_SIGNAL_STAT_PROCESS
70882 //#define CONFIG_SIGNAL_DISPLAY_DBM //display RX signal with dbm
70883 +#define RTW_NOTCH_FILTER 0 /* 0:Disable, 1:Enable */
70884 +#define CONFIG_DEAUTH_BEFORE_CONNECT
70885
70886 #ifdef CONFIG_IOL
70887 #define CONFIG_IOL_LLT
70888 @@ -154,12 +181,24 @@
70889 #endif // CONFIG_BR_EXT
70890
70891 #define CONFIG_TX_MCAST2UNI 1 // Support IP multicast->unicast
70892 +//#define CONFIG_DM_ADAPTIVITY
70893 //#define CONFIG_CHECK_AC_LIFETIME 1 // Check packet lifetime of 4 ACs.
70894
70895 +//#define CONFIG_CONCURRENT_MODE 1
70896 +#ifdef CONFIG_CONCURRENT_MODE
70897 + #define CONFIG_TSF_RESET_OFFLOAD 1 // For 2 PORT TSF SYNC.
70898 + //#define CONFIG_HWPORT_SWAP //Port0->Sec , Port1 -> Pri
70899 + //#define CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
70900 + //#define CONFIG_MULTI_VIR_IFACES //besides primary&secondary interfaces, extend to support more interfaces
70901 +#endif // CONFIG_CONCURRENT_MODE
70902 +
70903 +#define CONFIG_80211D
70904
70905 /*
70906 * Interface Related Config
70907 */
70908 +
70909 +//#define CONFIG_USB_ONE_OUT_EP
70910 //#define CONFIG_USB_INTERRUPT_IN_PIPE 1
70911
70912 #ifndef CONFIG_MINIMAL_MEMORY_USAGE
70913 @@ -176,6 +215,9 @@
70914 */
70915 //#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.
70916 //#define CONFIG_USE_USB_BUFFER_ALLOC_RX 1 // For RX path
70917 +#ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
70918 +#undef CONFIG_PREALLOC_RECV_SKB
70919 +#endif
70920
70921 /*
70922 * USB VENDOR REQ BUFFER ALLOCATION METHOD
70923 @@ -246,9 +288,7 @@
70924 #define CONFIG_USE_USB_BUFFER_ALLOC_RX 1
70925 #endif
70926
70927 -//#define CONFIG_BEFORE_LINKED_DIG
70928 -//#define CONFIG_ENABLE_NOTCH_FILTER
70929 -
70930 +#define CONFIG_ATTEMPT_TO_FIX_AP_BEACON_ERROR
70931
70932 /*
70933 * Debug Related Config
70934 @@ -256,7 +296,7 @@
70935 //#define CONFIG_DEBUG_RTL871X
70936
70937 #define DBG 0
70938 -//#define CONFIG_DEBUG_RTL819X
70939 +#define CONFIG_DEBUG_RTL819X
70940
70941 #define CONFIG_PROC_DEBUG 1
70942
70943 @@ -281,8 +321,16 @@
70944 //#define DBG_ROAMING_TEST
70945
70946 //#define DBG_HAL_INIT_PROFILING
70947 -#define DBG_MEMORY_LEAK 1
70948 +
70949 +//#define DBG_MEMORY_LEAK 1
70950
70951 #define DBG_CONFIG_ERROR_DETECT
70952 //#define DBG_CONFIG_ERROR_RESET
70953
70954 +//TX use 1 urb
70955 +//#define CONFIG_SINGLE_XMIT_BUF
70956 +//RX use 1 urb
70957 +//#define CONFIG_SINGLE_RECV_BUF
70958 +
70959 +//turn off power tracking when traffic is busy
70960 +//#define CONFIG_BUSY_TRAFFIC_SKIP_PWR_TRACK
70961 diff --git a/drivers/net/wireless/rtl8192cu/include/basic_types.h b/drivers/net/wireless/rtl8192cu/include/basic_types.h
70962 index f880224..f76e68f 100644
70963 --- a/drivers/net/wireless/rtl8192cu/include/basic_types.h
70964 +++ b/drivers/net/wireless/rtl8192cu/include/basic_types.h
70965 @@ -106,6 +106,51 @@
70966
70967 #endif
70968
70969 +
70970 +#ifdef PLATFORM_FREEBSD
70971 +
70972 + typedef signed char s8;
70973 + typedef unsigned char u8;
70974 +
70975 + typedef signed short s16;
70976 + typedef unsigned short u16;
70977 +
70978 + typedef signed int s32;
70979 + typedef unsigned int u32;
70980 +
70981 + typedef unsigned int uint;
70982 + typedef signed int sint;
70983 + typedef long atomic_t;
70984 +
70985 + typedef signed long long s64;
70986 + typedef unsigned long long u64;
70987 + #define IN
70988 + #define OUT
70989 + #define VOID void
70990 + #define NDIS_OID uint
70991 + #define NDIS_STATUS uint
70992 +
70993 + #ifndef PVOID
70994 + typedef void * PVOID;
70995 + //#define PVOID (void *)
70996 + #endif
70997 + typedef u32 dma_addr_t;
70998 + #define UCHAR u8
70999 + #define USHORT u16
71000 + #define UINT u32
71001 + #define ULONG u32
71002 +
71003 + typedef void (*proc_t)(void*);
71004 +
71005 + typedef unsigned int __kernel_size_t;
71006 + typedef int __kernel_ssize_t;
71007 +
71008 + typedef __kernel_size_t SIZE_T;
71009 + typedef __kernel_ssize_t SSIZE_T;
71010 + #define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field)
71011 +
71012 +#endif
71013 +
71014 #define MEM_ALIGNMENT_OFFSET (sizeof (SIZE_T))
71015 #define MEM_ALIGNMENT_PADDING (sizeof(SIZE_T) - 1)
71016
71017 diff --git a/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h b/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h
71018 index 246ba89..7c8d4d7 100644
71019 --- a/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h
71020 +++ b/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h
71021 @@ -98,7 +98,7 @@
71022 */
71023
71024
71025 -#if defined(PLATFORM_LINUX) || defined(PLATFORM_WINDOWS) || defined(PLATFORM_MPIXEL)
71026 +#if defined(PLATFORM_LINUX) || defined(PLATFORM_WINDOWS) || defined(PLATFORM_MPIXEL) || defined(PLATFORM_FREEBSD)
71027 /*
71028 * inside the kernel, we can use nicknames;
71029 * outside of it, we must avoid POSIX namespace pollution...
71030 @@ -168,13 +168,16 @@
71031 #if defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2)
71032 extern __u32 ntohl(__u32);
71033 extern __u32 htonl(__u32);
71034 -#else
71035 +#else //defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2)
71036 +#ifndef PLATFORM_FREEBSD
71037 extern unsigned long int ntohl(unsigned long int);
71038 extern unsigned long int htonl(unsigned long int);
71039 #endif
71040 +#endif
71041 +#ifndef PLATFORM_FREEBSD
71042 extern unsigned short int ntohs(unsigned short int);
71043 extern unsigned short int htons(unsigned short int);
71044 -
71045 +#endif
71046
71047 #if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) || defined(PLATFORM_MPIXEL)
71048
71049 diff --git a/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h b/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h
71050 index 117c84d..a3ca9ea 100644
71051 --- a/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h
71052 +++ b/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h
71053 @@ -16,12 +16,11 @@
71054 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
71055 *
71056 *
71057 -
71058 -******************************************************************************/
71059 + ******************************************************************************/
71060 #ifndef _LINUX_BYTEORDER_SWAB_H
71061 #define _LINUX_BYTEORDER_SWAB_H
71062
71063 -#if !defined(CONFIG_PLATFORM_MSTAR_TITANIA12)
71064 +#if !defined(CONFIG_PLATFORM_MSTAR)
71065 #ifndef __u16
71066 typedef unsigned short __u16;
71067 #endif
71068 @@ -74,7 +73,7 @@ __inline static __u64 ___swab64(__u64 x)
71069 (__u64)(((__u64)(__x) & (__u64)0x00ff000000000000ULL) >> 40) | \
71070 (__u64)(((__u64)(__x) & (__u64)0xff00000000000000ULL) >> 56) )); \
71071 }
71072 -#endif // CONFIG_PLATFORM_MSTAR_TITANIA12
71073 +#endif // CONFIG_PLATFORM_MSTAR
71074
71075 #ifndef __arch__swab16
71076 __inline static __u16 __arch__swab16(__u16 x)
71077 @@ -109,11 +108,19 @@ __inline static __u64 __arch__swab64(__u64 x)
71078 #define __swab64(x) __fswab64(x)
71079 #endif // __swab16
71080
71081 +#ifdef PLATFORM_FREEBSD
71082 +__inline static __u16 __fswab16(__u16 x)
71083 +#else
71084 __inline static const __u16 __fswab16(__u16 x)
71085 +#endif //PLATFORM_FREEBSD
71086 {
71087 return __arch__swab16(x);
71088 }
71089 +#ifdef PLATFORM_FREEBSD
71090 +__inline static __u32 __fswab32(__u32 x)
71091 +#else
71092 __inline static const __u32 __fswab32(__u32 x)
71093 +#endif //PLATFORM_FREEBSD
71094 {
71095 return __arch__swab32(x);
71096 }
71097 diff --git a/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h b/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h
71098 index 1735349..7e2a118 100644
71099 --- a/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h
71100 +++ b/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h
71101 @@ -16,8 +16,7 @@
71102 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
71103 *
71104 *
71105 -
71106 -******************************************************************************/
71107 + ******************************************************************************/
71108 #ifndef _LINUX_BYTEORDER_SWABB_H
71109 #define _LINUX_BYTEORDER_SWABB_H
71110
71111 diff --git a/drivers/net/wireless/rtl8192cu/include/drv_conf.h b/drivers/net/wireless/rtl8192cu/include/drv_conf.h
71112 index a2b6cc4..1317687 100644
71113 --- a/drivers/net/wireless/rtl8192cu/include/drv_conf.h
71114 +++ b/drivers/net/wireless/rtl8192cu/include/drv_conf.h
71115 @@ -38,7 +38,7 @@
71116 //between java and c/c++ layer (JNI). We force CONFIG_VALIDATE_SSID
71117 //for Android here. If you are sure there is no risk on your system about this,
71118 //mask this macro define to support non-printable ascii ssid.
71119 -#define CONFIG_VALIDATE_SSID
71120 +//#define CONFIG_VALIDATE_SSID
71121
71122 //Android expect dbm as the rx signal strength unit
71123 #define CONFIG_SIGNAL_DISPLAY_DBM
71124 diff --git a/drivers/net/wireless/rtl8192cu/include/drv_types.h b/drivers/net/wireless/rtl8192cu/include/drv_types.h
71125 index 95e20cc..0ac34f2 100644
71126 --- a/drivers/net/wireless/rtl8192cu/include/drv_types.h
71127 +++ b/drivers/net/wireless/rtl8192cu/include/drv_types.h
71128 @@ -1,7 +1,7 @@
71129 /******************************************************************************
71130 *
71131 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
71132 - *
71133 + *
71134 * This program is free software; you can redistribute it and/or modify it
71135 * under the terms of version 2 of the GNU General Public License as
71136 * published by the Free Software Foundation.
71137 @@ -18,7 +18,7 @@
71138 *
71139 ******************************************************************************/
71140 /*-------------------------------------------------------------------------------
71141 -
71142 +
71143 For type defines and data structure defines
71144
71145 --------------------------------------------------------------------------------*/
71146 @@ -45,17 +45,17 @@
71147 #endif
71148
71149 enum _NIC_VERSION {
71150 -
71151 +
71152 RTL8711_NIC,
71153 RTL8712_NIC,
71154 RTL8713_NIC,
71155 RTL8716_NIC
71156 -
71157 +
71158 };
71159
71160 enum{
71161 UP_LINK,
71162 - DOWN_LINK,
71163 + DOWN_LINK,
71164 };
71165 typedef struct _ADAPTER _adapter, ADAPTER,*PADAPTER;
71166
71167 @@ -65,11 +65,12 @@ typedef struct _ADAPTER _adapter, ADAPTER,*PADAPTER;
71168
71169 #include <rtw_cmd.h>
71170 #include <wlan_bssdef.h>
71171 +#include <rtw_security.h>
71172 #include <rtw_xmit.h>
71173 #include <rtw_recv.h>
71174 -#include <hal_init.h>
71175 +#include <hal_intf.h>
71176 +#include <hal_com.h>
71177 #include <rtw_qos.h>
71178 -#include <rtw_security.h>
71179 #include <rtw_pwrctrl.h>
71180 #include <rtw_io.h>
71181 #include <rtw_eeprom.h>
71182 @@ -81,6 +82,8 @@ typedef struct _ADAPTER _adapter, ADAPTER,*PADAPTER;
71183 #include <rtw_led.h>
71184 #include <rtw_mlme_ext.h>
71185 #include <rtw_p2p.h>
71186 +#include <rtw_tdls.h>
71187 +#include <rtw_ap.h>
71188
71189 #ifdef CONFIG_DRVEXT_MODULE
71190 #include <drvext_api.h>
71191 @@ -106,23 +109,23 @@ typedef struct _ADAPTER _adapter, ADAPTER,*PADAPTER;
71192 #define SPEC_DEV_ID_ASSIGN_IFNAME BIT(5)
71193
71194 struct specific_device_id{
71195 -
71196 +
71197 u32 flags;
71198 -
71199 +
71200 u16 idVendor;
71201 u16 idProduct;
71202
71203 };
71204
71205 struct registry_priv
71206 -{
71207 +{
71208 u8 chip_version;
71209 u8 rfintfs;
71210 u8 lbkmode;
71211 u8 hci;
71212 NDIS_802_11_SSID ssid;
71213 - u8 network_mode; //infra, ad-hoc, auto
71214 - u8 channel;//ad-hoc support requirement
71215 + u8 network_mode; //infra, ad-hoc, auto
71216 + u8 channel;//ad-hoc support requirement
71217 u8 wireless_mode;//A, B, G, auto
71218 u8 scan_mode;//active, passive
71219 u8 radio_enable;
71220 @@ -130,11 +133,11 @@ struct registry_priv
71221 u8 vrtl_carrier_sense;//Enable, Disable, Auto
71222 u8 vcs_type;//RTS/CTS, CTS-to-self
71223 u16 rts_thresh;
71224 - u16 frag_thresh;
71225 + u16 frag_thresh;
71226 u8 adhoc_tx_pwr;
71227 u8 soft_ap;
71228 u8 power_mgnt;
71229 - u8 ips_mode;
71230 + u8 ips_mode;
71231 u8 smart_ps;
71232 u8 long_retry_lmt;
71233 u8 short_retry_lmt;
71234 @@ -147,12 +150,12 @@ struct registry_priv
71235 u8 acm_method;
71236 //UAPSD
71237 u8 wmm_enable;
71238 - u8 uapsd_enable;
71239 + u8 uapsd_enable;
71240 u8 uapsd_max_sp;
71241 u8 uapsd_acbk_en;
71242 u8 uapsd_acbe_en;
71243 u8 uapsd_acvi_en;
71244 - u8 uapsd_acvo_en;
71245 + u8 uapsd_acvo_en;
71246
71247 WLAN_BSSID_EX dev_network;
71248
71249 @@ -164,19 +167,19 @@ struct registry_priv
71250 u8 ampdu_amsdu;//A-MPDU Supports A-MSDU is permitted
71251 #endif
71252 u8 lowrate_two_xmit;
71253 -
71254 +
71255 u8 rf_config ;
71256 u8 low_power ;
71257
71258 - u8 wifi_spec;// !turbo_mode
71259 -
71260 + u8 wifi_spec;// !turbo_mode
71261 +
71262 u8 channel_plan;
71263 #ifdef CONFIG_BT_COEXIST
71264 u8 bt_iso;
71265 u8 bt_sco;
71266 u8 bt_ampdu;
71267 #endif
71268 - BOOLEAN bAcceptAddbaReq;
71269 + BOOLEAN bAcceptAddbaReq;
71270
71271 u8 antdiv_cfg;
71272
71273 @@ -197,11 +200,21 @@ struct registry_priv
71274 #ifdef CONFIG_IOL
71275 bool force_iol; //enable iol without other concern
71276 #endif
71277 + u8 special_rf_path; //0: 2T2R ,1: only turn on path A 1T1R, 2: only turn on path B 1T1R
71278 + u8 mac_phy_mode; //0:by efuse, 1:smsp, 2:dmdp, 3:dmsp.
71279
71280 -#ifdef SUPPORT_64_STA
71281 - u8 bcmc_rate;
71282 +#ifdef CONFIG_80211D
71283 + u8 enable80211d;
71284 +#endif
71285 +
71286 + u8 ifname[16];
71287 + u8 if2name[16];
71288 +
71289 + u8 notch_filter;
71290 +
71291 +#ifdef CONFIG_MULTI_VIR_IFACES
71292 + u8 ext_iface_num;//primary/secondary iface is excluded
71293 #endif
71294 - u8 intel_class_mode;
71295 };
71296
71297
71298 @@ -213,56 +226,62 @@ struct registry_priv
71299
71300 #define MAX_CONTINUAL_URB_ERR 4
71301
71302 -struct dvobj_priv {
71303 +#ifdef CONFIG_SDIO_HCI
71304 +#include <drv_types_sdio.h>
71305 +#define INTF_DATA SDIO_DATA
71306 +#endif
71307
71308 - _adapter * padapter;
71309 +#define GET_PRIMARY_ADAPTER(padapter) (((_adapter *)padapter)->dvobj->if1)
71310
71311 - //For 92D, DMDP have 2 interface.
71312 - u8 InterfaceNumber;
71313 - u8 NumInterfaces;
71314 +#define GET_IFACE_NUMS(padapter) (((_adapter *)padapter)->dvobj->iface_nums)
71315 +#define GET_ADAPTER(padapter, iface_id) (((_adapter *)padapter)->dvobj->padapters[iface_id])
71316
71317 -/*-------- below is for SDIO INTERFACE --------*/
71318 +enum _IFACE_ID {
71319 + IFACE_ID0, //maping to PRIMARY_ADAPTER
71320 + IFACE_ID1, //maping to SECONDARY_ADAPTER
71321 + IFACE_ID2,
71322 + IFACE_ID3,
71323 + IFACE_ID_MAX,
71324 +};
71325
71326 -#ifdef CONFIG_SDIO_HCI
71327 +struct dvobj_priv
71328 +{
71329 + _adapter *if1; //PRIMARY_ADAPTER
71330 + _adapter *if2; //SECONDARY_ADAPTER
71331
71332 -#ifdef PLATFORM_OS_XP
71333 - PDEVICE_OBJECT pphysdevobj;//pPhysDevObj;
71334 - PDEVICE_OBJECT pfuncdevobj;//pFuncDevObj;
71335 - PDEVICE_OBJECT pnextdevobj;//pNextDevObj;
71336 - SDBUS_INTERFACE_STANDARD sdbusinft;//SdBusInterface;
71337 - u8 nextdevstacksz;//unsigned char NextDeviceStackSize;
71338 -#endif//PLATFORM_OS_XP
71339 + s32 processing_dev_remove;
71340
71341 -#ifdef PLATFORM_OS_CE
71342 - SD_DEVICE_HANDLE hDevice;
71343 - SD_CARD_RCA sd_rca;
71344 - SD_CARD_INTERFACE card_intf;
71345 - BOOLEAN enableIsarWithStatus;
71346 - WCHAR active_path[MAX_ACTIVE_REG_PATH];
71347 - SD_HOST_BLOCK_CAPABILITY sd_host_blk_cap;
71348 -#endif//PLATFORM_OS_CE
71349 + //for local/global synchronization
71350 + _mutex hw_init_mutex;
71351 + _mutex h2c_fwcmd_mutex;
71352 + _mutex setch_mutex;
71353 + _mutex setbw_mutex;
71354
71355 -#ifdef PLATFORM_LINUX
71356 - struct sdio_func *func;
71357 -#endif//PLATFORM_LINUX
71358 + unsigned char oper_channel; //saved channel info when call set_channel_bw
71359 + unsigned char oper_bwmode;
71360 + unsigned char oper_ch_offset;//PRIME_CHNL_OFFSET
71361 + u32 on_oper_ch_time;
71362 +
71363 + //extend to support mulitu interface
71364 + //padapters[IFACE_ID0] == if1
71365 + //padapters[IFACE_ID1] == if2
71366 + _adapter *padapters[IFACE_ID_MAX];
71367 + u8 iface_nums; // total number of ifaces used runtime
71368 +
71369 + //For 92D, DMDP have 2 interface.
71370 + u8 InterfaceNumber;
71371 + u8 NumInterfaces;
71372 + u8 DualMacMode;
71373 + u8 irq_alloc;
71374
71375 - u8 func_number;//unsigned char FunctionNumber;
71376 - u32 block_transfer_len;//unsigned long BLOCK_TRANSFER_LEN;
71377 - u32 blk_shiftbits;
71378 - u16 driver_version;
71379 - u16 rxblknum;
71380 - u16 rxblknum_rd;
71381 - u16 c2hblknum;
71382 - u8 tx_block_mode;
71383 - u8 rx_block_mode;
71384 - u8 cmdfifo_cnt;
71385 - u8 rxfifo_cnt;
71386 - u16 sdio_hisr;
71387 - u16 sdio_himr;
71388 -#endif// CONFIG_SDIO_HCI
71389 +/*-------- below is for SDIO INTERFACE --------*/
71390 +
71391 +#ifdef INTF_DATA
71392 + INTF_DATA intf_data;
71393 +#endif
71394
71395 /*-------- below is for USB INTERFACE --------*/
71396 -
71397 +
71398 #ifdef CONFIG_USB_HCI
71399
71400 u8 nr_endpoint;
71401 @@ -272,17 +291,17 @@ struct dvobj_priv {
71402 int ep_num[5]; //endpoint number
71403
71404 int RegUsbSS;
71405 -
71406 +
71407 _sema usb_suspend_sema;
71408
71409 #ifdef CONFIG_USB_VENDOR_REQ_MUTEX
71410 _mutex usb_vendor_req_mutex;
71411 #endif
71412 -
71413 +
71414 #ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
71415 u8 * usb_alloc_vendor_req_buf;
71416 u8 * usb_vendor_req_buf;
71417 -#endif
71418 +#endif
71419
71420 #ifdef PLATFORM_WINDOWS
71421 //related device objects
71422 @@ -290,7 +309,7 @@ struct dvobj_priv {
71423 PDEVICE_OBJECT pfuncdevobj;//pFuncDevObj;
71424 PDEVICE_OBJECT pnextdevobj;//pNextDevObj;
71425
71426 - u8 nextdevstacksz;//unsigned char NextDeviceStackSize; //= (CHAR)CEdevice->pUsbDevObj->StackSize + 1;
71427 + u8 nextdevstacksz;//unsigned char NextDeviceStackSize; //= (CHAR)CEdevice->pUsbDevObj->StackSize + 1;
71428
71429 //urb for control diescriptor request
71430
71431 @@ -306,7 +325,7 @@ struct dvobj_priv {
71432 _nic_hdl pipehdls_r8192c[0x10];
71433 #endif
71434
71435 - u32 config_descriptor_len;//ULONG UsbConfigurationDescriptorLength;
71436 + u32 config_descriptor_len;//ULONG UsbConfigurationDescriptorLength;
71437 #endif//PLATFORM_WINDOWS
71438
71439 #ifdef PLATFORM_LINUX
71440 @@ -314,11 +333,15 @@ struct dvobj_priv {
71441 struct usb_device *pusbdev;
71442 #endif//PLATFORM_LINUX
71443
71444 +#ifdef PLATFORM_FREEBSD
71445 + struct usb_interface *pusbintf;
71446 + struct usb_device *pusbdev;
71447 +#endif//PLATFORM_FREEBSD
71448 ATOMIC_T continual_urb_error;
71449 #endif//CONFIG_USB_HCI
71450
71451 /*-------- below is for PCIE INTERFACE --------*/
71452 -
71453 +
71454 #ifdef CONFIG_PCI_HCI
71455
71456 #ifdef PLATFORM_LINUX
71457 @@ -327,7 +350,7 @@ struct dvobj_priv {
71458 //PCI MEM map
71459 unsigned long pci_mem_end; /* shared mem end */
71460 unsigned long pci_mem_start; /* shared mem start */
71461 -
71462 +
71463 //PCI IO map
71464 unsigned long pci_base_addr; /* device I/O address */
71465
71466 @@ -336,7 +359,6 @@ struct dvobj_priv {
71467
71468 u16 irqline;
71469 u8 irq_enabled;
71470 - u8 irq_alloc;
71471 RT_ISR_CONTENT isr_content;
71472 _lock irq_th_lock;
71473
71474 @@ -349,13 +371,46 @@ struct dvobj_priv {
71475 u8 const_hostpci_aspm_setting;
71476 // pci-e device */
71477 u8 const_devicepci_aspm_setting;
71478 - u8 b_support_aspm; // If it supports ASPM, Offset[560h] = 0x40, otherwise Offset[560h] = 0x00.
71479 + u8 b_support_aspm; // If it supports ASPM, Offset[560h] = 0x40, otherwise Offset[560h] = 0x00.
71480 u8 b_support_backdoor;
71481 + u8 bdma64;
71482 #endif//PLATFORM_LINUX
71483
71484 #endif//CONFIG_PCI_HCI
71485 };
71486
71487 +#ifdef PLATFORM_LINUX
71488 +static struct device *dvobj_to_dev(struct dvobj_priv *dvobj)
71489 +{
71490 + /* todo: get interface type from dvobj and the return the dev accordingly */
71491 +#ifdef RTW_DVOBJ_CHIP_HW_TYPE
71492 +#endif
71493 +
71494 +#ifdef CONFIG_USB_HCI
71495 + return &dvobj->pusbintf->dev;
71496 +#endif
71497 +#ifdef CONFIG_SDIO_HCI
71498 + return &dvobj->intf_data.func->dev;
71499 +#endif
71500 +#ifdef CONFIG_PCI_HCI
71501 + return &dvobj->ppcidev->dev;
71502 +#endif
71503 +}
71504 +#endif
71505 +
71506 +
71507 +enum _IFACE_TYPE {
71508 + IFACE_PORT0, //mapping to port0 for C/D series chips
71509 + IFACE_PORT1, //mapping to port1 for C/D series chip
71510 + MAX_IFACE_PORT,
71511 +};
71512 +
71513 +enum _ADAPTER_TYPE {
71514 + PRIMARY_ADAPTER,
71515 + SECONDARY_ADAPTER,
71516 + MAX_ADAPTER = 0xFF,
71517 +};
71518 +
71519 typedef enum _DRIVER_STATE{
71520 DRIVER_NORMAL = 0,
71521 DRIVER_DISAPPEAR = 1,
71522 @@ -398,8 +453,8 @@ struct _ADAPTER{
71523 u16 chip_type;
71524 u16 HardwareType;
71525 u16 interface_type;//USB,SDIO,PCI
71526 -
71527 - struct dvobj_priv dvobjpriv;
71528 +
71529 + struct dvobj_priv *dvobj;
71530 struct mlme_priv mlmepriv;
71531 struct mlme_ext_priv mlmeextpriv;
71532 struct cmd_priv cmdpriv;
71533 @@ -409,13 +464,13 @@ struct _ADAPTER{
71534 struct xmit_priv xmitpriv;
71535 struct recv_priv recvpriv;
71536 struct sta_priv stapriv;
71537 - struct security_priv securitypriv;
71538 - struct registry_priv registrypriv;
71539 - struct wlan_acl_pool acl_list;
71540 + struct security_priv securitypriv;
71541 + _lock security_key_mutex; // add for CONFIG_IEEE80211W, none 11w also can use
71542 + struct registry_priv registrypriv;
71543 struct pwrctrl_priv pwrctrlpriv;
71544 struct eeprom_priv eeprompriv;
71545 struct led_priv ledpriv;
71546 -
71547 +
71548 #ifdef CONFIG_MP_INCLUDED
71549 struct mp_priv mppriv;
71550 #endif
71551 @@ -423,17 +478,17 @@ struct _ADAPTER{
71552 #ifdef CONFIG_DRVEXT_MODULE
71553 struct drvext_priv drvextpriv;
71554 #endif
71555 -
71556 +
71557 #ifdef CONFIG_AP_MODE
71558 - struct hostapd_priv *phostapdpriv;
71559 + struct hostapd_priv *phostapdpriv;
71560 #endif
71561
71562 #ifdef CONFIG_IOCTL_CFG80211
71563 #ifdef CONFIG_P2P
71564 struct cfg80211_wifidirect_info cfg80211_wdinfo;
71565 -#endif //CONFIG_IOCTL_CFG80211
71566 #endif //CONFIG_P2P
71567 -
71568 +#endif //CONFIG_IOCTL_CFG80211
71569 + u32 setband;
71570 #ifdef CONFIG_P2P
71571 struct wifidirect_info wdinfo;
71572 #endif //CONFIG_P2P
71573 @@ -442,6 +497,10 @@ struct _ADAPTER{
71574 struct tdls_info tdlsinfo;
71575 #endif //CONFIG_TDLS
71576
71577 +#ifdef CONFIG_WFD
71578 + struct wifi_display_info wfd_info;
71579 +#endif //CONFIG_WFD
71580 +
71581 PVOID HalData;
71582 u32 hal_data_sz;
71583 struct hal_ops HalFunc;
71584 @@ -449,27 +508,28 @@ struct _ADAPTER{
71585 #ifdef CONFIG_BT_COEXIST
71586 //struct btcoexist_priv bt_coexist;
71587 #endif
71588 - s32 bDriverStopped;
71589 + s32 bDriverStopped;
71590 s32 bSurpriseRemoved;
71591 s32 bCardDisableWOHSM;
71592
71593 u32 IsrContent;
71594 - u32 ImrContent;
71595 + u32 ImrContent;
71596
71597 u8 EepromAddressSize;
71598 u8 hw_init_completed;
71599 + u8 bDriverIsGoingToUnload;
71600 u8 init_adpt_in_progress;
71601 - u8 bfirst_init;
71602 u8 bHaltInProgress;
71603 -
71604 - _thread_hdl_ cmdThread;
71605 - _thread_hdl_ evtThread;
71606 - _thread_hdl_ xmitThread;
71607 - _thread_hdl_ recvThread;
71608
71609 + _thread_hdl_ cmdThread;
71610 + _thread_hdl_ evtThread;
71611 + _thread_hdl_ xmitThread;
71612 + _thread_hdl_ recvThread;
71613
71614 - NDIS_STATUS (*dvobj_init)(_adapter * adapter);
71615 - void (*dvobj_deinit)(_adapter * adapter);
71616 +#ifndef PLATFORM_LINUX
71617 + NDIS_STATUS (*dvobj_init)(struct dvobj_priv *dvobj);
71618 + void (*dvobj_deinit)(struct dvobj_priv *dvobj);
71619 +#endif
71620
71621 void (*intf_start)(_adapter * adapter);
71622 void (*intf_stop)(_adapter * adapter);
71623 @@ -479,13 +539,13 @@ struct _ADAPTER{
71624 _nic_hdl hndis_config;//hNdisConfiguration;
71625 NDIS_STRING fw_img;
71626
71627 - u32 NdisPacketFilter;
71628 + u32 NdisPacketFilter;
71629 u8 MCList[MAX_MCAST_LIST_NUM][6];
71630 - u32 MCAddrCount;
71631 + u32 MCAddrCount;
71632 #endif //end of PLATFORM_WINDOWS
71633
71634
71635 -#ifdef PLATFORM_LINUX
71636 +#ifdef PLATFORM_LINUX
71637 _nic_hdl pnetdev;
71638
71639 // used by rtw_rereg_nd_name related function
71640 @@ -495,28 +555,71 @@ struct _ADAPTER{
71641 u8 old_ips_mode;
71642 u8 old_bRegUseLed;
71643 } rereg_nd_name_priv;
71644 -
71645 +
71646 int bup;
71647 struct net_device_stats stats;
71648 struct iw_statistics iwstats;
71649 struct proc_dir_entry *dir_dev;// for proc directory
71650
71651 -
71652 #ifdef CONFIG_IOCTL_CFG80211
71653 struct wireless_dev *rtw_wdev;
71654 #endif //CONFIG_IOCTL_CFG80211
71655 -
71656 +
71657 #endif //end of PLATFORM_LINUX
71658
71659 +#ifdef PLATFORM_FREEBSD
71660 + _nic_hdl pifp;
71661 + int bup;
71662 + _lock glock;
71663 +#endif //PLATFORM_FREEBSD
71664 int net_closed;
71665
71666 u8 bFWReady;
71667 u8 bReadPortCancel;
71668 u8 bWritePortCancel;
71669 u8 bRxRSSIDisplay;
71670 + // Added by Albert 2012/07/26
71671 + // The driver will write the initial gain everytime when running in the DM_Write_DIG function.
71672 + u8 bForceWriteInitGain;
71673 + // Added by Albert 2012/10/26
71674 + // The driver will show up the desired channel number when this flag is 1.
71675 + u8 bNotifyChannelChange;
71676 +#ifdef CONFIG_P2P
71677 + // Added by Albert 2012/12/06
71678 + // The driver will show the current P2P status when the upper application reads it.
71679 + u8 bShowGetP2PState;
71680 +#endif
71681 #ifdef CONFIG_AUTOSUSPEND
71682 u8 bDisableAutosuspend;
71683 #endif
71684 +
71685 + //pbuddy_adapter is used only in two inteface case, (iface_nums=2 in struct dvobj_priv)
71686 + //PRIMARY_ADAPTER's buddy is SECONDARY_ADAPTER
71687 + //SECONDARY_ADAPTER's buddy is PRIMARY_ADAPTER
71688 + //for iface_id > SECONDARY_ADAPTER(IFACE_ID1), refer to padapters[iface_id] in struct dvobj_priv
71689 + //and their pbuddy_adapter is PRIMARY_ADAPTER.
71690 + //for PRIMARY_ADAPTER(IFACE_ID0) can directly refer to if1 in struct dvobj_priv
71691 + _adapter *pbuddy_adapter;
71692 +
71693 +#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT)
71694 + u8 isprimary; //is primary adapter or not
71695 + //notes:
71696 + // if isprimary is true, the adapter_type value is 0, iface_id is IFACE_ID0 for PRIMARY_ADAPTER
71697 + // if isprimary is false, the adapter_type value is 1, iface_id is IFACE_ID1 for SECONDARY_ADAPTER
71698 + // refer to iface_id if iface_nums>2 and isprimary is false and the adapter_type value is 0xff.
71699 + u8 adapter_type;//used only in two inteface case(PRIMARY_ADAPTER and SECONDARY_ADAPTER) .
71700 + u8 iface_type; //interface port type, it depends on HW port
71701 +#endif
71702 +
71703 + //extend to support multi interface
71704 + //IFACE_ID0 is equals to PRIMARY_ADAPTER
71705 + //IFACE_ID1 is equals to SECONDARY_ADAPTER
71706 + u8 iface_id;
71707 +
71708 +#ifdef CONFIG_DUALMAC_CONCURRENT
71709 + u8 DualMacConcurrent; // 1: DMSP 0:DMDP
71710 +#endif
71711 +
71712 #ifdef CONFIG_BR_EXT
71713 _lock br_ext_lock;
71714 //unsigned int macclone_completed;
71715 @@ -528,7 +631,7 @@ struct _ADAPTER{
71716 struct nat25_network_db_entry *scdb_entry;
71717 unsigned char br_mac[MACADDRLEN];
71718 unsigned char br_ip[4];
71719 -
71720 +
71721 struct br_ext_info ethBrExtInfo;
71722 #endif // CONFIG_BR_EXT
71723
71724 @@ -545,6 +648,10 @@ struct _ADAPTER{
71725
71726 };
71727
71728 +#define adapter_to_dvobj(adapter) (adapter->dvobj)
71729 +
71730 +int rtw_handle_dualmac(_adapter *adapter, bool init);
71731 +
71732 __inline static u8 *myid(struct eeprom_priv *peepriv)
71733 {
71734 return (peepriv->mac_addr);
71735 diff --git a/drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h b/drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h
71736 new file mode 100644
71737 index 0000000..fd467ca
71738 --- /dev/null
71739 +++ b/drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h
71740 @@ -0,0 +1,70 @@
71741 +/******************************************************************************
71742 + *
71743 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
71744 + *
71745 + * This program is free software; you can redistribute it and/or modify it
71746 + * under the terms of version 2 of the GNU General Public License as
71747 + * published by the Free Software Foundation.
71748 + *
71749 + * This program is distributed in the hope that it will be useful, but WITHOUT
71750 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
71751 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
71752 + * more details.
71753 + *
71754 + * You should have received a copy of the GNU General Public License along with
71755 + * this program; if not, write to the Free Software Foundation, Inc.,
71756 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
71757 + *
71758 + *
71759 + ******************************************************************************/
71760 +#ifndef __DRV_TYPES_SDIO_H__
71761 +#define __DRV_TYPES_SDIO_H__
71762 +
71763 +#include <drv_conf.h>
71764 +#include <basic_types.h>
71765 +
71766 +// SDIO Header Files
71767 +#ifdef PLATFORM_LINUX
71768 +#include <linux/mmc/sdio_func.h>
71769 +#endif
71770 +#ifdef PLATFORM_OS_XP
71771 +#include <wdm.h>
71772 +#include <ntddsd.h>
71773 +#endif
71774 +#ifdef PLATFORM_OS_CE
71775 +#include <sdcardddk.h>
71776 +#endif
71777 +
71778 +
71779 +typedef struct sdio_data
71780 +{
71781 + u8 func_number;
71782 +
71783 + u8 tx_block_mode;
71784 + u8 rx_block_mode;
71785 + u32 block_transfer_len;
71786 +
71787 +#ifdef PLATFORM_LINUX
71788 + struct sdio_func *func;
71789 +#endif
71790 +
71791 +#ifdef PLATFORM_OS_XP
71792 + PDEVICE_OBJECT pphysdevobj;
71793 + PDEVICE_OBJECT pfuncdevobj;
71794 + PDEVICE_OBJECT pnextdevobj;
71795 + SDBUS_INTERFACE_STANDARD sdbusinft;
71796 + u8 nextdevstacksz;
71797 +#endif
71798 +
71799 +#ifdef PLATFORM_OS_CE
71800 + SD_DEVICE_HANDLE hDevice;
71801 + SD_CARD_RCA sd_rca;
71802 + SD_CARD_INTERFACE card_intf;
71803 + BOOLEAN enableIsarWithStatus;
71804 + WCHAR active_path[MAX_ACTIVE_REG_PATH];
71805 + SD_HOST_BLOCK_CAPABILITY sd_host_blk_cap;
71806 +#endif
71807 +} SDIO_DATA, *PSDIO_DATA;
71808 +
71809 +#endif
71810 +
71811 diff --git a/drivers/net/wireless/rtl8192cu/include/farray.h b/drivers/net/wireless/rtl8192cu/include/farray.h
71812 deleted file mode 100644
71813 index 79d2a42..0000000
71814 --- a/drivers/net/wireless/rtl8192cu/include/farray.h
71815 +++ /dev/null
71816 @@ -1,31480 +0,0 @@
71817 -unsigned char f_array[125912] = {
71818 -0x12,0x87,0x09,0x10,
71819 -0x30,0x00,0x00,0x00,
71820 -0x08,0xF8,0x00,0x00,
71821 -0x50,0xF3,0x00,0x00,
71822 -0x30,0x00,0x00,0x00,
71823 -0xB8,0xF1,0x00,0x00,
71824 -0x00,0x00,0x00,0x00,
71825 -0x10,0x27,0x17,0x41,
71826 -0x87,0x12,0x12,0x01,
71827 -0x00,0x00,0x12,0x06,
71828 -0x00,0x00,0x00,0x00,
71829 -0x00,0x07,0x00,0x00,
71830 -0x00,0x00,0x00,0x00,
71831 -0x00,0x00,0x00,0x00,
71832 -0x01,0x01,0x00,0x01,
71833 -0x01,0x01,0x00,0x00,
71834 -0x01,0x00,0x01,0x00,
71835 -0x00,0x00,0x01,0x01,
71836 -0x00,0x00,0x00,0x00,
71837 -0x00,0x00,0x00,0x00,
71838 -0x7F,0x00,0x00,0x10,
71839 -0x00,0x00,0x00,0x00,
71840 -0x00,0x00,0x00,0x00,
71841 -0x00,0x00,0x00,0x00,
71842 -0x00,0x00,0x00,0x00,
71843 -0x00,0x00,0x00,0x00,
71844 -0x00,0x00,0x00,0x00,
71845 -0x00,0x00,0x00,0x00,
71846 -0x00,0x00,0x00,0x00,
71847 -0x00,0x00,0x00,0x00,
71848 -0x00,0x00,0x00,0x00,
71849 -0x00,0x00,0x00,0x00,
71850 -0x00,0x00,0x00,0x00,
71851 -0x00,0x00,0x00,0x00,
71852 -0x00,0x00,0x00,0x00,
71853 -0x00,0x00,0x00,0x00,
71854 -0x00,0x00,0x00,0x00,
71855 -0x00,0x00,0x00,0x00,
71856 -0x00,0x00,0x00,0x00,
71857 -0x00,0x00,0x00,0x00,
71858 -0x00,0x00,0x00,0x00,
71859 -0x00,0x00,0x00,0x00,
71860 -0x00,0x00,0x00,0x00,
71861 -0x00,0x00,0x00,0x00,
71862 -0x00,0x00,0x00,0x00,
71863 -0x00,0x00,0x00,0x00,
71864 -0x00,0x00,0x00,0x00,
71865 -0x00,0x00,0x00,0x00,
71866 -0x00,0x00,0x00,0x00,
71867 -0x00,0x00,0x00,0x00,
71868 -0x00,0x00,0x00,0x00,
71869 -0x00,0x00,0x00,0x00,
71870 -0x1F,0x00,0x00,0x10,
71871 -0x00,0x00,0x00,0x00,
71872 -0x00,0x00,0x00,0x00,
71873 -0x00,0x00,0x00,0x00,
71874 -0x00,0x00,0x00,0x00,
71875 -0x00,0x00,0x00,0x00,
71876 -0x00,0x00,0x00,0x00,
71877 -0x00,0x00,0x00,0x00,
71878 -0x00,0x00,0x00,0x00,
71879 -0x00,0x00,0x00,0x00,
71880 -0x00,0x00,0x00,0x00,
71881 -0x00,0x00,0x00,0x00,
71882 -0x00,0x00,0x00,0x00,
71883 -0x00,0x00,0x00,0x00,
71884 -0x00,0x00,0x00,0x00,
71885 -0x00,0x00,0x00,0x00,
71886 -0x00,0x00,0x00,0x00,
71887 -0x00,0x00,0x00,0x00,
71888 -0x00,0x00,0x00,0x00,
71889 -0x00,0x00,0x00,0x00,
71890 -0x00,0x00,0x00,0x00,
71891 -0x00,0x00,0x00,0x00,
71892 -0x00,0x00,0x00,0x00,
71893 -0x00,0x00,0x00,0x00,
71894 -0x00,0x00,0x00,0x00,
71895 -0x00,0x00,0x00,0x00,
71896 -0x00,0x00,0x00,0x00,
71897 -0x00,0x00,0x00,0x00,
71898 -0x00,0x00,0x00,0x00,
71899 -0x00,0x00,0x00,0x00,
71900 -0x00,0x00,0x00,0x00,
71901 -0x00,0x00,0x00,0x00,
71902 -0x25,0xB0,0x1A,0x3C,
71903 -0x80,0x03,0x5A,0x37,
71904 -0x00,0x80,0x1B,0x3C,
71905 -0x80,0x00,0x7B,0x37,
71906 -0x00,0x00,0x5B,0xAF,
71907 -0x25,0xB0,0x1A,0x3C,
71908 -0x18,0x03,0x5A,0x37,
71909 -0x00,0x80,0x1B,0x3C,
71910 -0x80,0x00,0x7B,0x37,
71911 -0x00,0x00,0x5B,0xAF,
71912 -0x01,0x80,0x1A,0x3C,
71913 -0x90,0xEE,0x5A,0x27,
71914 -0x08,0x00,0x40,0x03,
71915 -0x00,0x00,0x00,0x00,
71916 -0x00,0x00,0x00,0x00,
71917 -0x00,0x00,0x00,0x00,
71918 -0x00,0x00,0x00,0x00,
71919 -0x00,0x00,0x00,0x00,
71920 -0x00,0x00,0x00,0x00,
71921 -0x00,0x00,0x00,0x00,
71922 -0x00,0x00,0x00,0x00,
71923 -0x00,0x00,0x00,0x00,
71924 -0x00,0x00,0x00,0x00,
71925 -0x00,0x00,0x00,0x00,
71926 -0x00,0x00,0x00,0x00,
71927 -0x00,0x00,0x00,0x00,
71928 -0x00,0x00,0x00,0x00,
71929 -0x00,0x00,0x00,0x00,
71930 -0x00,0x00,0x00,0x00,
71931 -0x00,0x00,0x00,0x00,
71932 -0x00,0x00,0x00,0x00,
71933 -0x00,0x00,0x00,0x00,
71934 -0x00,0x00,0x00,0x00,
71935 -0x00,0x00,0x00,0x00,
71936 -0x00,0x00,0x00,0x00,
71937 -0x00,0x00,0x00,0x00,
71938 -0x00,0x00,0x00,0x00,
71939 -0x00,0x00,0x00,0x00,
71940 -0x00,0x00,0x00,0x00,
71941 -0x00,0x00,0x00,0x00,
71942 -0x00,0x00,0x00,0x00,
71943 -0x00,0x00,0x00,0x00,
71944 -0x00,0x00,0x00,0x00,
71945 -0x00,0x00,0x00,0x00,
71946 -0x00,0x00,0x00,0x00,
71947 -0x00,0x00,0x00,0x00,
71948 -0x00,0x00,0x00,0x00,
71949 -0x00,0x00,0x00,0x00,
71950 -0x00,0x00,0x00,0x00,
71951 -0x00,0x00,0x00,0x00,
71952 -0x00,0x00,0x00,0x00,
71953 -0x00,0x00,0x00,0x00,
71954 -0x00,0x00,0x00,0x00,
71955 -0x00,0x00,0x00,0x00,
71956 -0x00,0x00,0x00,0x00,
71957 -0x00,0x00,0x00,0x00,
71958 -0x00,0x00,0x00,0x00,
71959 -0x00,0x00,0x00,0x00,
71960 -0x00,0x00,0x00,0x00,
71961 -0x00,0x00,0x00,0x00,
71962 -0x00,0x00,0x00,0x00,
71963 -0x00,0x00,0x00,0x00,
71964 -0x00,0x00,0x00,0x00,
71965 -0x00,0x00,0x00,0x00,
71966 -0x04,0x00,0xA1,0xAF,
71967 -0x08,0x00,0xA2,0xAF,
71968 -0x0C,0x00,0xA3,0xAF,
71969 -0x10,0x00,0xA4,0xAF,
71970 -0x14,0x00,0xA5,0xAF,
71971 -0x18,0x00,0xA6,0xAF,
71972 -0x1C,0x00,0xA7,0xAF,
71973 -0x20,0x00,0xA8,0xAF,
71974 -0x24,0x00,0xA9,0xAF,
71975 -0x28,0x00,0xAA,0xAF,
71976 -0x2C,0x00,0xAB,0xAF,
71977 -0x30,0x00,0xAC,0xAF,
71978 -0x34,0x00,0xAD,0xAF,
71979 -0x38,0x00,0xAE,0xAF,
71980 -0x3C,0x00,0xAF,0xAF,
71981 -0x12,0x40,0x00,0x00,
71982 -0x10,0x48,0x00,0x00,
71983 -0x00,0x70,0x0A,0x40,
71984 -0x40,0x00,0xB0,0xAF,
71985 -0x44,0x00,0xB1,0xAF,
71986 -0x48,0x00,0xB2,0xAF,
71987 -0x4C,0x00,0xB3,0xAF,
71988 -0x50,0x00,0xB4,0xAF,
71989 -0x54,0x00,0xB5,0xAF,
71990 -0x58,0x00,0xB6,0xAF,
71991 -0x5C,0x00,0xB7,0xAF,
71992 -0x60,0x00,0xB8,0xAF,
71993 -0x64,0x00,0xB9,0xAF,
71994 -0x68,0x00,0xBC,0xAF,
71995 -0x6C,0x00,0xBD,0xAF,
71996 -0x70,0x00,0xBE,0xAF,
71997 -0x74,0x00,0xBF,0xAF,
71998 -0x78,0x00,0xA8,0xAF,
71999 -0x7C,0x00,0xA9,0xAF,
72000 -0x80,0x00,0xAA,0xAF,
72001 -0x32,0x3B,0x00,0x08,
72002 -0x21,0x20,0xA0,0x03,
72003 -0x00,0x00,0x00,0x00,
72004 -0x00,0x00,0x00,0x00,
72005 -0x00,0x00,0x00,0x00,
72006 -0x00,0x00,0x00,0x00,
72007 -0x00,0x00,0x00,0x00,
72008 -0x00,0x00,0x00,0x00,
72009 -0x00,0x00,0x00,0x00,
72010 -0x00,0x00,0x00,0x00,
72011 -0x00,0x00,0x00,0x00,
72012 -0x00,0x00,0x00,0x00,
72013 -0x00,0x00,0x00,0x00,
72014 -0x00,0x00,0x00,0x00,
72015 -0x00,0x00,0x00,0x00,
72016 -0x00,0x00,0x00,0x00,
72017 -0x00,0x00,0x00,0x00,
72018 -0x00,0x00,0x00,0x00,
72019 -0x00,0x00,0x00,0x00,
72020 -0x00,0x00,0x00,0x00,
72021 -0x00,0x00,0x00,0x00,
72022 -0x00,0x00,0x00,0x00,
72023 -0x00,0x00,0x00,0x00,
72024 -0x00,0x00,0x00,0x00,
72025 -0x00,0x00,0x00,0x00,
72026 -0x00,0x00,0x00,0x00,
72027 -0x00,0x00,0x00,0x00,
72028 -0x00,0x00,0x00,0x00,
72029 -0x00,0x00,0x00,0x00,
72030 -0x25,0xB0,0x05,0x3C,
72031 -0x00,0x80,0x02,0x3C,
72032 -0xE0,0xFF,0xBD,0x27,
72033 -0x18,0x03,0xA3,0x34,
72034 -0x00,0x03,0x42,0x24,
72035 -0x18,0x00,0xBF,0xAF,
72036 -0x14,0x00,0xB1,0xAF,
72037 -0x10,0x00,0xB0,0xAF,
72038 -0x00,0x00,0x62,0xAC,
72039 -0x00,0x60,0x01,0x40,
72040 -0x01,0x00,0x21,0x34,
72041 -0x00,0x60,0x81,0x40,
72042 -0x42,0xB0,0x02,0x3C,
72043 -0x03,0x00,0x46,0x34,
72044 -0x00,0x00,0xC3,0x90,
72045 -0x00,0x00,0x00,0x00,
72046 -0xFF,0x00,0x70,0x30,
72047 -0x10,0x00,0x02,0x32,
72048 -0x18,0x00,0x40,0x10,
72049 -0x02,0x80,0x11,0x3C,
72050 -0x30,0x1F,0x27,0x26,
72051 -0x78,0x36,0xE4,0x94,
72052 -0x10,0x00,0x02,0x24,
72053 -0x00,0x00,0xC2,0xA0,
72054 -0x08,0x00,0x80,0x10,
72055 -0x1C,0x03,0xA3,0x34,
72056 -0x7C,0x36,0xE2,0x94,
72057 -0xB0,0x03,0xA4,0x34,
72058 -0x00,0x00,0x62,0xAC,
72059 -0x00,0x00,0x80,0xAC,
72060 -0x78,0x36,0xE0,0xA4,
72061 -0x7C,0x36,0xE0,0xA4,
72062 -0x00,0x00,0x04,0x24,
72063 -0x02,0x80,0x05,0x3C,
72064 -0x02,0x80,0x06,0x3C,
72065 -0x14,0x5E,0xA2,0x8C,
72066 -0x18,0x5F,0xC3,0x8C,
72067 -0x01,0x00,0x84,0x24,
72068 -0x01,0x00,0x42,0x24,
72069 -0x01,0x00,0x63,0x24,
72070 -0x78,0x36,0xE4,0xA4,
72071 -0x14,0x5E,0xA2,0xAC,
72072 -0x18,0x5F,0xC3,0xAC,
72073 -0x00,0x16,0x10,0x00,
72074 -0x03,0x16,0x02,0x00,
72075 -0x7B,0x00,0x40,0x04,
72076 -0x42,0xB0,0x02,0x3C,
72077 -0x00,0x60,0x01,0x40,
72078 -0x01,0x00,0x21,0x34,
72079 -0x01,0x00,0x21,0x38,
72080 -0x00,0x60,0x81,0x40,
72081 -0x40,0x00,0x02,0x32,
72082 -0x16,0x00,0x40,0x10,
72083 -0x30,0x1F,0x24,0x26,
72084 -0x42,0xB0,0x0B,0x3C,
72085 -0x03,0x00,0x62,0x35,
72086 -0x40,0x00,0x03,0x24,
72087 -0x00,0x00,0x43,0xA0,
72088 -0x02,0x80,0x03,0x3C,
72089 -0x12,0x5F,0x62,0x90,
72090 -0x00,0x00,0x00,0x00,
72091 -0x1A,0x00,0x40,0x10,
72092 -0x02,0x80,0x04,0x3C,
72093 -0x12,0x5F,0x60,0xA0,
72094 -0x02,0x80,0x04,0x3C,
72095 -0x0E,0x5F,0x83,0x90,
72096 -0xFD,0xFF,0x02,0x24,
72097 -0x24,0x18,0x62,0x00,
72098 -0x0E,0x5F,0x83,0xA0,
72099 -0x0E,0x5F,0x82,0x90,
72100 -0x00,0x00,0x00,0x00,
72101 -0x07,0x00,0x42,0x30,
72102 -0x5D,0x00,0x40,0x10,
72103 -0x02,0x80,0x02,0x3C,
72104 -0x30,0x1F,0x24,0x26,
72105 -0xE0,0x1B,0x83,0x94,
72106 -0xDC,0x1B,0x85,0x94,
72107 -0x18,0x00,0xBF,0x8F,
72108 -0x14,0x00,0xB1,0x8F,
72109 -0x10,0x00,0xB0,0x8F,
72110 -0x80,0x00,0x63,0x30,
72111 -0x41,0xB0,0x02,0x3C,
72112 -0x25,0x18,0x65,0x00,
72113 -0x08,0x00,0x42,0x34,
72114 -0x20,0x00,0xBD,0x27,
72115 -0x00,0x00,0x43,0xA4,
72116 -0x08,0x00,0xE0,0x03,
72117 -0xDC,0x1B,0x83,0xA4,
72118 -0xFA,0x5E,0x82,0x90,
72119 -0x02,0x80,0x05,0x3C,
72120 -0x01,0x00,0x42,0x24,
72121 -0xFA,0x5E,0x82,0xA0,
72122 -0x0E,0x5F,0xA3,0x90,
72123 -0xEF,0xFF,0x02,0x24,
72124 -0x24,0x18,0x62,0x00,
72125 -0x0E,0x5F,0xA3,0xA0,
72126 -0xFA,0x5E,0x82,0x90,
72127 -0x00,0x00,0x00,0x00,
72128 -0x02,0x00,0x42,0x2C,
72129 -0x32,0x00,0x40,0x10,
72130 -0x30,0x1F,0x23,0x26,
72131 -0x25,0xB0,0x06,0x3C,
72132 -0x84,0x00,0xC4,0x34,
72133 -0x80,0x00,0xC6,0x34,
72134 -0x00,0x00,0x82,0x8C,
72135 -0x00,0x00,0xC4,0x8C,
72136 -0x02,0x80,0x08,0x3C,
72137 -0x21,0x10,0x00,0x00,
72138 -0x1C,0x5F,0x06,0x8D,
72139 -0x25,0x10,0x44,0x00,
72140 -0x02,0x80,0x04,0x3C,
72141 -0x20,0x5F,0x88,0x8C,
72142 -0x24,0x5F,0x89,0x8C,
72143 -0x00,0x00,0x65,0x91,
72144 -0x21,0x10,0x46,0x00,
72145 -0xFB,0xFF,0x04,0x24,
72146 -0x24,0x28,0xA4,0x00,
72147 -0x23,0x40,0x02,0x01,
72148 -0x00,0x00,0x65,0xA1,
72149 -0x04,0x00,0x00,0x11,
72150 -0x01,0x00,0x06,0x24,
72151 -0x80,0x10,0x08,0x00,
72152 -0x21,0x10,0x48,0x00,
72153 -0x80,0x30,0x02,0x00,
72154 -0x01,0x00,0x04,0x24,
72155 -0x8C,0x23,0x00,0x0C,
72156 -0x21,0x28,0x00,0x00,
72157 -0x42,0xB0,0x02,0x3C,
72158 -0x22,0x00,0x04,0x24,
72159 -0x03,0x00,0x42,0x34,
72160 -0x00,0x00,0x44,0xA0,
72161 -0x02,0x80,0x03,0x3C,
72162 -0xF5,0x5E,0x64,0x90,
72163 -0x01,0x00,0x05,0x24,
72164 -0x64,0x31,0x00,0x0C,
72165 -0xFF,0x00,0x84,0x30,
72166 -0x30,0x1F,0x24,0x26,
72167 -0xE0,0x1B,0x83,0x94,
72168 -0xDC,0x1B,0x85,0x94,
72169 -0x18,0x00,0xBF,0x8F,
72170 -0x14,0x00,0xB1,0x8F,
72171 -0x10,0x00,0xB0,0x8F,
72172 -0x80,0x00,0x63,0x30,
72173 -0x41,0xB0,0x02,0x3C,
72174 -0x25,0x18,0x65,0x00,
72175 -0x08,0x00,0x42,0x34,
72176 -0x20,0x00,0xBD,0x27,
72177 -0x00,0x00,0x43,0xA4,
72178 -0x08,0x00,0xE0,0x03,
72179 -0xDC,0x1B,0x83,0xA4,
72180 -0xB0,0x1B,0x62,0x94,
72181 -0x00,0x00,0x00,0x00,
72182 -0x00,0x01,0x42,0x30,
72183 -0x16,0x00,0x40,0x10,
72184 -0x02,0x80,0x02,0x3C,
72185 -0x02,0x80,0x03,0x3C,
72186 -0x15,0x5F,0x62,0x90,
72187 -0x00,0x00,0x00,0x00,
72188 -0xAB,0xFF,0x40,0x14,
72189 -0x00,0x00,0x00,0x00,
72190 -0x15,0x5F,0x62,0x90,
72191 -0x00,0x00,0x00,0x00,
72192 -0x01,0x00,0x42,0x24,
72193 -0x15,0x5F,0x62,0xA0,
72194 -0x0B,0x01,0x00,0x08,
72195 -0x30,0x1F,0x24,0x26,
72196 -0x0C,0x5F,0x40,0xA0,
72197 -0x44,0x01,0x00,0x08,
72198 -0x02,0x80,0x03,0x3C,
72199 -0x80,0xFF,0x03,0x24,
72200 -0x03,0x00,0x42,0x34,
72201 -0x00,0x00,0x43,0xA0,
72202 -0x9E,0x25,0x00,0x0C,
72203 -0x00,0x00,0x00,0x00,
72204 -0xEF,0x00,0x00,0x08,
72205 -0x00,0x00,0x00,0x00,
72206 -0x15,0x5F,0x40,0xA0,
72207 -0x0B,0x01,0x00,0x08,
72208 -0x30,0x1F,0x24,0x26,
72209 -0xFF,0x00,0x84,0x30,
72210 -0x0B,0x00,0x82,0x2C,
72211 -0xFF,0xFF,0xE7,0x30,
72212 -0x10,0x00,0xA8,0x93,
72213 -0x19,0x00,0x40,0x10,
72214 -0x21,0x18,0x00,0x00,
72215 -0x02,0x80,0x03,0x3C,
72216 -0x80,0x10,0x04,0x00,
72217 -0xD8,0xE9,0x63,0x24,
72218 -0x21,0x10,0x43,0x00,
72219 -0x00,0x00,0x44,0x8C,
72220 -0x00,0x00,0x00,0x00,
72221 -0x08,0x00,0x80,0x00,
72222 -0x00,0x00,0x00,0x00,
72223 -0x43,0xB0,0x02,0x3C,
72224 -0x78,0x00,0x44,0x34,
72225 -0x07,0x00,0xE2,0x30,
72226 -0x00,0x00,0x85,0xAC,
72227 -0x04,0x00,0x86,0xAC,
72228 -0x04,0x00,0x40,0x18,
72229 -0x00,0x00,0x00,0x00,
72230 -0xF8,0xFF,0xE2,0x30,
72231 -0x08,0x00,0x42,0x24,
72232 -0xFF,0xFF,0x47,0x30,
72233 -0x21,0x10,0xE8,0x00,
72234 -0x00,0x80,0x03,0x3C,
72235 -0x08,0x00,0x82,0xAC,
72236 -0x25,0x10,0x43,0x00,
72237 -0x08,0x00,0x82,0xAC,
72238 -0x01,0x00,0x03,0x24,
72239 -0x08,0x00,0xE0,0x03,
72240 -0x21,0x10,0x60,0x00,
72241 -0x43,0xB0,0x02,0x3C,
72242 -0x83,0x01,0x00,0x08,
72243 -0x6C,0x00,0x44,0x34,
72244 -0x43,0xB0,0x02,0x3C,
72245 -0x83,0x01,0x00,0x08,
72246 -0x60,0x00,0x44,0x34,
72247 -0x43,0xB0,0x02,0x3C,
72248 -0x83,0x01,0x00,0x08,
72249 -0x54,0x00,0x44,0x34,
72250 -0x43,0xB0,0x02,0x3C,
72251 -0x83,0x01,0x00,0x08,
72252 -0x48,0x00,0x44,0x34,
72253 -0x43,0xB0,0x02,0x3C,
72254 -0x83,0x01,0x00,0x08,
72255 -0x3C,0x00,0x44,0x34,
72256 -0x43,0xB0,0x02,0x3C,
72257 -0x83,0x01,0x00,0x08,
72258 -0x30,0x00,0x44,0x34,
72259 -0x43,0xB0,0x02,0x3C,
72260 -0x83,0x01,0x00,0x08,
72261 -0x24,0x00,0x44,0x34,
72262 -0x43,0xB0,0x02,0x3C,
72263 -0x83,0x01,0x00,0x08,
72264 -0x18,0x00,0x44,0x34,
72265 -0x43,0xB0,0x02,0x3C,
72266 -0x83,0x01,0x00,0x08,
72267 -0x0C,0x00,0x44,0x34,
72268 -0x83,0x01,0x00,0x08,
72269 -0x43,0xB0,0x04,0x3C,
72270 -0x00,0x80,0x03,0x3C,
72271 -0x25,0xB0,0x02,0x3C,
72272 -0x18,0x03,0x42,0x34,
72273 -0xC0,0x06,0x63,0x24,
72274 -0x00,0x00,0x43,0xAC,
72275 -0x01,0x00,0x05,0x24,
72276 -0x43,0xB0,0x02,0x3C,
72277 -0x04,0x28,0x85,0x00,
72278 -0x88,0x00,0x44,0x34,
72279 -0x21,0x10,0x00,0x00,
72280 -0x01,0x00,0x42,0x24,
72281 -0xFF,0xFF,0x42,0x30,
72282 -0x05,0x00,0x43,0x2C,
72283 -0xFD,0xFF,0x60,0x14,
72284 -0x01,0x00,0x42,0x24,
72285 -0x00,0x00,0x82,0x94,
72286 -0x00,0x00,0x00,0x00,
72287 -0xFF,0xFF,0x42,0x30,
72288 -0x24,0x10,0x45,0x00,
72289 -0xF5,0xFF,0x40,0x1C,
72290 -0x00,0x00,0x00,0x00,
72291 -0x08,0x00,0xE0,0x03,
72292 -0x00,0x00,0x00,0x00,
72293 -0x25,0xB0,0x08,0x3C,
72294 -0x00,0x80,0x02,0x3C,
72295 -0xC8,0xFF,0xBD,0x27,
72296 -0x18,0x03,0x03,0x35,
72297 -0x1C,0x07,0x42,0x24,
72298 -0x00,0x00,0x62,0xAC,
72299 -0x30,0x00,0xB6,0xAF,
72300 -0x28,0x00,0xB4,0xAF,
72301 -0x24,0x00,0xB3,0xAF,
72302 -0x1C,0x00,0xB1,0xAF,
72303 -0x34,0x00,0xBF,0xAF,
72304 -0x2C,0x00,0xB5,0xAF,
72305 -0x20,0x00,0xB2,0xAF,
72306 -0x18,0x00,0xB0,0xAF,
72307 -0x0C,0x00,0xF2,0x84,
72308 -0x08,0x00,0xF5,0x8C,
72309 -0xFF,0x00,0xC6,0x30,
72310 -0x00,0x01,0x02,0x24,
72311 -0x23,0x10,0x46,0x00,
72312 -0xFF,0xFF,0x51,0x30,
72313 -0xD0,0x03,0x08,0x35,
72314 -0xFF,0x00,0x96,0x30,
72315 -0x00,0x00,0x12,0xAD,
72316 -0x21,0xA0,0xA0,0x00,
72317 -0x21,0x30,0xC5,0x00,
72318 -0x00,0x00,0x15,0xAD,
72319 -0x21,0x20,0xC0,0x02,
72320 -0x21,0x28,0xA0,0x02,
72321 -0x21,0x38,0x20,0x02,
72322 -0x73,0x01,0x00,0x0C,
72323 -0x10,0x00,0xA0,0xAF,
72324 -0x23,0x18,0x51,0x02,
72325 -0xFF,0xFF,0x82,0x32,
72326 -0x00,0x94,0x03,0x00,
72327 -0x03,0x94,0x12,0x00,
72328 -0x09,0x02,0x00,0x08,
72329 -0x02,0x9A,0x02,0x00,
72330 -0x28,0xB0,0x03,0x3C,
72331 -0xC0,0x10,0x13,0x00,
72332 -0x21,0x10,0x43,0x00,
72333 -0x00,0x00,0x44,0x90,
72334 -0x25,0xB0,0x10,0x3C,
72335 -0x20,0x10,0x02,0x3C,
72336 -0xFF,0x00,0x93,0x30,
72337 -0x00,0x22,0x13,0x00,
72338 -0xFF,0xFF,0x43,0x32,
72339 -0x01,0x01,0x45,0x2A,
72340 -0x21,0xA0,0x82,0x00,
72341 -0x21,0xA8,0xB1,0x02,
72342 -0xD0,0x03,0x02,0x36,
72343 -0x00,0x01,0x11,0x24,
72344 -0x0B,0x88,0x65,0x00,
72345 -0x21,0x20,0xC0,0x02,
72346 -0x00,0x00,0x53,0xAC,
72347 -0xB0,0x01,0x00,0x0C,
72348 -0xB0,0x03,0x10,0x36,
72349 -0x21,0x30,0x80,0x02,
72350 -0x21,0x20,0xC0,0x02,
72351 -0x21,0x28,0xA0,0x02,
72352 -0x21,0x38,0x20,0x02,
72353 -0x73,0x01,0x00,0x0C,
72354 -0x10,0x00,0xA0,0xAF,
72355 -0x23,0x18,0x51,0x02,
72356 -0x00,0x94,0x03,0x00,
72357 -0x03,0x94,0x12,0x00,
72358 -0x00,0x00,0x12,0xAE,
72359 -0xE2,0xFF,0x40,0x1E,
72360 -0x00,0x00,0x00,0x00,
72361 -0x34,0x00,0xBF,0x8F,
72362 -0x30,0x00,0xB6,0x8F,
72363 -0x2C,0x00,0xB5,0x8F,
72364 -0x28,0x00,0xB4,0x8F,
72365 -0x24,0x00,0xB3,0x8F,
72366 -0x20,0x00,0xB2,0x8F,
72367 -0x1C,0x00,0xB1,0x8F,
72368 -0x18,0x00,0xB0,0x8F,
72369 -0x08,0x00,0xE0,0x03,
72370 -0x38,0x00,0xBD,0x27,
72371 -0xD8,0xFF,0xBD,0x27,
72372 -0x20,0x00,0xB2,0xAF,
72373 -0x18,0x00,0xB0,0xAF,
72374 -0x24,0x00,0xBF,0xAF,
72375 -0x1C,0x00,0xB1,0xAF,
72376 -0x04,0x00,0x8B,0x8C,
72377 -0x21,0x80,0x80,0x00,
72378 -0x08,0x00,0x84,0x8C,
72379 -0x0E,0x00,0x07,0x96,
72380 -0xFF,0xE0,0x02,0x3C,
72381 -0x10,0x00,0x08,0x8E,
72382 -0x1F,0x00,0x6A,0x31,
72383 -0xFF,0xFF,0x42,0x34,
72384 -0x24,0x20,0x82,0x00,
72385 -0x00,0x1E,0x0A,0x00,
72386 -0x25,0x48,0x83,0x00,
72387 -0x21,0x90,0xA0,0x00,
72388 -0x21,0x60,0xC0,0x00,
72389 -0x10,0x01,0x00,0x05,
72390 -0x07,0x00,0xE7,0x30,
72391 -0x00,0x00,0x02,0x96,
72392 -0x00,0x00,0x00,0x00,
72393 -0xFD,0x0F,0x42,0x28,
72394 -0xC0,0x00,0x40,0x14,
72395 -0x02,0x80,0x11,0x3C,
72396 -0xFF,0xDF,0x02,0x3C,
72397 -0xFF,0xFF,0x42,0x34,
72398 -0x24,0x48,0x22,0x01,
72399 -0x1C,0x00,0x02,0x8E,
72400 -0x00,0x40,0x03,0x3C,
72401 -0x25,0x48,0x23,0x01,
72402 -0x02,0x80,0x11,0x3C,
72403 -0xC5,0x00,0x40,0x04,
72404 -0x08,0x00,0x09,0xAE,
72405 -0xC0,0x30,0x0A,0x00,
72406 -0x21,0x10,0xCA,0x00,
72407 -0x80,0x10,0x02,0x00,
72408 -0x21,0x10,0x4A,0x00,
72409 -0x80,0x10,0x02,0x00,
72410 -0x30,0x1F,0x27,0x26,
72411 -0x21,0x28,0x47,0x00,
72412 -0x1C,0x24,0xA3,0x8C,
72413 -0x01,0x00,0x0A,0x24,
72414 -0x02,0x13,0x03,0x00,
72415 -0x01,0x00,0x42,0x30,
72416 -0xDB,0x00,0x4A,0x10,
72417 -0x42,0x18,0x03,0x00,
72418 -0x82,0x11,0x09,0x00,
72419 -0x01,0x00,0x42,0x30,
72420 -0x06,0x00,0x40,0x14,
72421 -0x02,0x80,0x02,0x3C,
72422 -0xC0,0xFF,0x02,0x24,
72423 -0x24,0x10,0x22,0x01,
72424 -0x04,0x00,0x49,0x34,
72425 -0x08,0x00,0x09,0xAE,
72426 -0x02,0x80,0x02,0x3C,
72427 -0xE9,0x5D,0x43,0x90,
72428 -0x00,0x00,0x00,0x00,
72429 -0x6C,0x00,0x60,0x14,
72430 -0x21,0x28,0xC7,0x00,
72431 -0xE8,0x22,0xA4,0x8C,
72432 -0x10,0x00,0x02,0x8E,
72433 -0xBF,0xFF,0x03,0x24,
72434 -0x40,0x00,0x84,0x30,
72435 -0x24,0x10,0x43,0x00,
72436 -0x25,0x40,0x44,0x00,
72437 -0x10,0x00,0x08,0xAE,
72438 -0xE8,0x22,0xA3,0x8C,
72439 -0x7F,0xF8,0x02,0x24,
72440 -0x24,0x10,0x02,0x01,
72441 -0x80,0x07,0x63,0x30,
72442 -0x42,0x27,0x09,0x00,
72443 -0x25,0x40,0x43,0x00,
72444 -0x01,0x00,0x84,0x30,
72445 -0xE1,0x00,0x8A,0x10,
72446 -0x10,0x00,0x08,0xAE,
72447 -0x30,0x1F,0x24,0x26,
72448 -0x21,0x20,0xC4,0x00,
72449 -0xE8,0x22,0x83,0x8C,
72450 -0xFF,0xF7,0x02,0x24,
72451 -0x24,0x10,0x02,0x01,
72452 -0x00,0x08,0x63,0x30,
72453 -0x25,0x40,0x43,0x00,
72454 -0x10,0x00,0x08,0xAE,
72455 -0xE8,0x22,0x83,0x8C,
72456 -0xFF,0xEF,0x02,0x24,
72457 -0x24,0x10,0x02,0x01,
72458 -0x00,0x10,0x63,0x30,
72459 -0x30,0x1F,0x25,0x26,
72460 -0x25,0x40,0x43,0x00,
72461 -0x10,0x00,0x08,0xAE,
72462 -0x21,0x30,0xC5,0x00,
72463 -0xE8,0x22,0xC4,0x8C,
72464 -0xFD,0xFF,0x02,0x3C,
72465 -0x02,0x00,0x03,0x3C,
72466 -0xFF,0xFF,0x42,0x34,
72467 -0x24,0x20,0x83,0x00,
72468 -0x24,0x10,0x02,0x01,
72469 -0x25,0x40,0x44,0x00,
72470 -0x10,0x00,0x08,0xAE,
72471 -0xB0,0x1B,0xA3,0x94,
72472 -0xFB,0xFF,0x02,0x3C,
72473 -0xFF,0xFF,0x42,0x34,
72474 -0xC2,0x1B,0x03,0x00,
72475 -0x24,0x10,0x02,0x01,
72476 -0x80,0x1C,0x03,0x00,
72477 -0x25,0x40,0x43,0x00,
72478 -0x10,0x00,0x08,0xAE,
72479 -0x8F,0x3E,0xA3,0x90,
72480 -0xE7,0xFF,0x02,0x3C,
72481 -0xFF,0xFF,0x42,0x34,
72482 -0x03,0x00,0x63,0x30,
72483 -0x24,0x10,0x02,0x01,
72484 -0xC0,0x1C,0x03,0x00,
72485 -0x25,0x40,0x43,0x00,
72486 -0x10,0x00,0x08,0xAE,
72487 -0xE8,0x22,0xC4,0x8C,
72488 -0xFF,0xFD,0x02,0x3C,
72489 -0x00,0x02,0x03,0x3C,
72490 -0xFF,0xFF,0x42,0x34,
72491 -0x24,0x20,0x83,0x00,
72492 -0x24,0x10,0x02,0x01,
72493 -0x25,0x40,0x44,0x00,
72494 -0x10,0x00,0x08,0xAE,
72495 -0xB0,0x1B,0xA3,0x94,
72496 -0xFF,0xFB,0x02,0x3C,
72497 -0xFF,0xFF,0x42,0x34,
72498 -0xC2,0x1B,0x03,0x00,
72499 -0x24,0x10,0x02,0x01,
72500 -0x80,0x1E,0x03,0x00,
72501 -0x25,0x40,0x43,0x00,
72502 -0x10,0x00,0x08,0xAE,
72503 -0x8F,0x3E,0xA3,0x90,
72504 -0xFF,0xE7,0x02,0x3C,
72505 -0xFF,0xFF,0x42,0x34,
72506 -0x03,0x00,0x63,0x30,
72507 -0x24,0x10,0x02,0x01,
72508 -0xC0,0x1E,0x03,0x00,
72509 -0x25,0x40,0x43,0x00,
72510 -0x10,0x00,0x08,0xAE,
72511 -0xE8,0x22,0xC3,0x8C,
72512 -0xC0,0xFF,0x02,0x24,
72513 -0x24,0x10,0x02,0x01,
72514 -0x3F,0x00,0x63,0x30,
72515 -0x25,0x10,0x43,0x00,
72516 -0x10,0x00,0x02,0xAE,
72517 -0xEC,0x22,0xC5,0x8C,
72518 -0x14,0x00,0x03,0x8E,
72519 -0xFF,0xFF,0x04,0x3C,
72520 -0xFF,0x7F,0x84,0x34,
72521 -0x24,0x18,0x64,0x00,
72522 -0x00,0x80,0xA5,0x30,
72523 -0x25,0x18,0x65,0x00,
72524 -0x14,0x00,0x03,0xAE,
72525 -0xEC,0x22,0xC2,0x8C,
72526 -0x24,0x18,0x64,0x00,
72527 -0x00,0x80,0x42,0x30,
72528 -0x25,0x18,0x62,0x00,
72529 -0x14,0x00,0x03,0xAE,
72530 -0xEE,0x22,0xC4,0x94,
72531 -0xE0,0xFF,0x02,0x3C,
72532 -0xFF,0xFF,0x42,0x34,
72533 -0x1F,0x00,0x84,0x30,
72534 -0x24,0x18,0x62,0x00,
72535 -0x00,0x24,0x04,0x00,
72536 -0x25,0x18,0x64,0x00,
72537 -0x14,0x00,0x03,0xAE,
72538 -0x02,0x00,0x02,0x92,
72539 -0x02,0x24,0x0B,0x00,
72540 -0x02,0x80,0x03,0x3C,
72541 -0x21,0x10,0x4C,0x00,
72542 -0xFF,0xFF,0x42,0x30,
72543 -0x01,0x00,0x84,0x30,
72544 -0x6A,0x00,0x80,0x10,
72545 -0x25,0x30,0x43,0x00,
72546 -0x30,0x1F,0x23,0x26,
72547 -0xF8,0x1D,0x62,0x94,
72548 -0x00,0x00,0x00,0x00,
72549 -0xFF,0x0F,0x45,0x30,
72550 -0x01,0x00,0x42,0x24,
72551 -0xF8,0x1D,0x62,0xA4,
72552 -0x0C,0x00,0x03,0x8E,
72553 -0x00,0xF0,0x02,0x3C,
72554 -0xFF,0xFF,0x42,0x34,
72555 -0x00,0x24,0x05,0x00,
72556 -0x24,0x18,0x62,0x00,
72557 -0x25,0x18,0x64,0x00,
72558 -0x0C,0x00,0x03,0xAE,
72559 -0x16,0x00,0xC2,0x94,
72560 -0x00,0x19,0x05,0x00,
72561 -0x02,0x00,0x04,0x24,
72562 -0x0F,0x00,0x42,0x30,
72563 -0x25,0x10,0x43,0x00,
72564 -0x16,0x00,0xC2,0xA4,
72565 -0x21,0x28,0x80,0x01,
72566 -0x21,0x30,0x40,0x02,
72567 -0x80,0x00,0x07,0x24,
72568 -0x01,0x00,0x02,0x24,
72569 -0x73,0x01,0x00,0x0C,
72570 -0x10,0x00,0xA2,0xAF,
72571 -0x25,0xB0,0x02,0x3C,
72572 -0xB0,0x03,0x42,0x34,
72573 -0x00,0x00,0x52,0xAC,
72574 -0xB0,0x01,0x00,0x0C,
72575 -0x02,0x00,0x04,0x24,
72576 -0x30,0x1F,0x24,0x26,
72577 -0x00,0x00,0x03,0x96,
72578 -0x94,0x3E,0x82,0x8C,
72579 -0x24,0x00,0xBF,0x8F,
72580 -0x20,0x00,0xB2,0x8F,
72581 -0x1C,0x00,0xB1,0x8F,
72582 -0x18,0x00,0xB0,0x8F,
72583 -0x21,0x10,0x43,0x00,
72584 -0x28,0x00,0xBD,0x27,
72585 -0x08,0x00,0xE0,0x03,
72586 -0x94,0x3E,0x82,0xAC,
72587 -0x08,0x00,0x09,0xAE,
72588 -0x30,0x1F,0x22,0x26,
72589 -0x1A,0x3E,0x43,0x90,
72590 -0xFF,0xDF,0x02,0x3C,
72591 -0xFF,0xFF,0x42,0x34,
72592 -0x07,0x18,0xE3,0x00,
72593 -0x01,0x00,0x63,0x30,
72594 -0x24,0x10,0x22,0x01,
72595 -0x40,0x1F,0x03,0x00,
72596 -0x25,0x48,0x43,0x00,
72597 -0x1C,0x00,0x02,0x8E,
72598 -0x00,0x00,0x00,0x00,
72599 -0x3D,0xFF,0x41,0x04,
72600 -0x08,0x00,0x09,0xAE,
72601 -0x1E,0x00,0x02,0x92,
72602 -0x04,0x00,0x03,0x24,
72603 -0x21,0x30,0x50,0x00,
72604 -0x00,0x00,0xC4,0x90,
72605 -0x00,0x00,0x00,0x00,
72606 -0xFF,0x00,0x82,0x30,
72607 -0x02,0x29,0x02,0x00,
72608 -0x50,0x00,0xA3,0x10,
72609 -0x06,0x00,0x02,0x24,
72610 -0x32,0xFF,0xA2,0x14,
72611 -0x00,0x00,0x00,0x00,
72612 -0x1A,0x00,0x02,0x96,
72613 -0x00,0x00,0x00,0x00,
72614 -0x39,0x00,0xC2,0xA0,
72615 -0x1E,0x00,0x03,0x92,
72616 -0x1A,0x00,0x02,0x96,
72617 -0x21,0x18,0x70,0x00,
72618 -0x03,0x12,0x02,0x00,
72619 -0x38,0x00,0x62,0xA0,
72620 -0x04,0x00,0x0B,0x8E,
72621 -0x08,0x00,0x09,0x8E,
72622 -0xC0,0x30,0x0A,0x00,
72623 -0x21,0x10,0xCA,0x00,
72624 -0x80,0x10,0x02,0x00,
72625 -0x21,0x10,0x4A,0x00,
72626 -0x80,0x10,0x02,0x00,
72627 -0x30,0x1F,0x27,0x26,
72628 -0x21,0x28,0x47,0x00,
72629 -0x1C,0x24,0xA3,0x8C,
72630 -0x01,0x00,0x0A,0x24,
72631 -0x02,0x13,0x03,0x00,
72632 -0x01,0x00,0x42,0x30,
72633 -0x29,0xFF,0x4A,0x14,
72634 -0x82,0x11,0x09,0x00,
72635 -0x42,0x18,0x03,0x00,
72636 -0x7F,0xFF,0x02,0x24,
72637 -0x24,0x10,0x22,0x01,
72638 -0x80,0x00,0x63,0x30,
72639 -0x25,0x48,0x43,0x00,
72640 -0x08,0x00,0x09,0xAE,
72641 -0x1C,0x24,0xA3,0x8C,
72642 -0x10,0x00,0x04,0x8E,
72643 -0xFF,0xFF,0x02,0x3C,
72644 -0x07,0x00,0x63,0x30,
72645 -0xFF,0x1F,0x42,0x34,
72646 -0x24,0x20,0x82,0x00,
72647 -0x40,0x1B,0x03,0x00,
72648 -0x25,0x40,0x83,0x00,
72649 -0x44,0x02,0x00,0x08,
72650 -0x10,0x00,0x08,0xAE,
72651 -0x0E,0x00,0x02,0x96,
72652 -0x30,0x1F,0x23,0x26,
72653 -0x07,0x00,0x42,0x30,
72654 -0x40,0x10,0x02,0x00,
72655 -0x21,0x10,0x43,0x00,
72656 -0xE8,0x1D,0x44,0x94,
72657 -0x00,0x00,0x00,0x00,
72658 -0x01,0x00,0x83,0x24,
72659 -0xFF,0x0F,0x85,0x30,
72660 -0xCA,0x02,0x00,0x08,
72661 -0xE8,0x1D,0x43,0xA4,
72662 -0x14,0x00,0x02,0x8E,
72663 -0x00,0x00,0x00,0x00,
72664 -0x42,0x12,0x02,0x00,
72665 -0x3F,0x00,0x42,0x30,
72666 -0x0C,0x00,0x42,0x28,
72667 -0xF1,0xFE,0x40,0x14,
72668 -0xFF,0xDF,0x02,0x3C,
72669 -0x29,0x02,0x00,0x08,
72670 -0x00,0x00,0x00,0x00,
72671 -0x02,0x80,0x02,0x3C,
72672 -0xE6,0x5D,0x43,0x90,
72673 -0x00,0x00,0x00,0x00,
72674 -0x1D,0xFF,0x64,0x14,
72675 -0x30,0x1F,0x24,0x26,
72676 -0x90,0x3E,0xE2,0x90,
72677 -0xFF,0xF7,0x03,0x24,
72678 -0x24,0x18,0x03,0x01,
72679 -0x01,0x00,0x42,0x30,
72680 -0xC0,0x12,0x02,0x00,
72681 -0x25,0x40,0x62,0x00,
72682 -0x10,0x00,0x08,0xAE,
72683 -0x91,0x3E,0xE2,0x90,
72684 -0xFF,0xEF,0x03,0x24,
72685 -0x24,0x18,0x03,0x01,
72686 -0x01,0x00,0x42,0x30,
72687 -0x6D,0x02,0x00,0x08,
72688 -0x00,0x13,0x02,0x00,
72689 -0x1A,0x00,0x05,0x96,
72690 -0x0F,0x00,0x84,0x30,
72691 -0x80,0x20,0x04,0x00,
72692 -0x21,0x18,0xC4,0x00,
72693 -0x11,0x00,0x65,0xA0,
72694 -0x1E,0x00,0x02,0x92,
72695 -0x1A,0x00,0x03,0x96,
72696 -0x21,0x10,0x50,0x00,
72697 -0x21,0x10,0x44,0x00,
72698 -0x03,0x1A,0x03,0x00,
72699 -0x10,0x00,0x43,0xA0,
72700 -0x04,0x00,0x0B,0x8E,
72701 -0x08,0x00,0x09,0x8E,
72702 -0x11,0x03,0x00,0x08,
72703 -0xC0,0x30,0x0A,0x00,
72704 -0x00,0x80,0x03,0x3C,
72705 -0x25,0xB0,0x02,0x3C,
72706 -0x88,0x0D,0x63,0x24,
72707 -0x18,0x03,0x42,0x34,
72708 -0x00,0x00,0x43,0xAC,
72709 -0x08,0x00,0xE0,0x03,
72710 -0x00,0x00,0x00,0x00,
72711 -0x25,0xB0,0x04,0x3C,
72712 -0x00,0x80,0x02,0x3C,
72713 -0xC0,0xFF,0xBD,0x27,
72714 -0x18,0x03,0x83,0x34,
72715 -0xA4,0x0D,0x42,0x24,
72716 -0x3C,0x00,0xBF,0xAF,
72717 -0x38,0x00,0xBE,0xAF,
72718 -0x34,0x00,0xB7,0xAF,
72719 -0x30,0x00,0xB6,0xAF,
72720 -0x2C,0x00,0xB5,0xAF,
72721 -0x28,0x00,0xB4,0xAF,
72722 -0x24,0x00,0xB3,0xAF,
72723 -0x20,0x00,0xB2,0xAF,
72724 -0x1C,0x00,0xB1,0xAF,
72725 -0x18,0x00,0xB0,0xAF,
72726 -0x00,0x00,0x62,0xAC,
72727 -0x00,0x60,0x01,0x40,
72728 -0x01,0x00,0x21,0x34,
72729 -0x00,0x60,0x81,0x40,
72730 -0x02,0x80,0x02,0x3C,
72731 -0xB0,0x03,0x9E,0x34,
72732 -0x98,0x03,0x00,0x08,
72733 -0x30,0x1F,0x55,0x24,
72734 -0x08,0x00,0x04,0xAE,
72735 -0x14,0x37,0x46,0x8E,
72736 -0x21,0x28,0x60,0x02,
72737 -0x80,0x00,0x07,0x24,
72738 -0x01,0x00,0x04,0x24,
72739 -0x01,0x00,0x14,0x24,
72740 -0x73,0x01,0x00,0x0C,
72741 -0x10,0x00,0xB4,0xAF,
72742 -0x14,0x37,0x43,0x8E,
72743 -0x01,0x00,0x04,0x24,
72744 -0x00,0x00,0xC3,0xAE,
72745 -0xB0,0x01,0x00,0x0C,
72746 -0x00,0x00,0x00,0x00,
72747 -0x2A,0x1C,0x42,0x92,
72748 -0x00,0x00,0x00,0x00,
72749 -0x5F,0x00,0x40,0x10,
72750 -0x2A,0xB0,0x02,0x3C,
72751 -0x09,0x00,0x42,0x34,
72752 -0x02,0x00,0x03,0x24,
72753 -0x00,0x00,0x54,0xA0,
72754 -0x00,0x00,0x43,0xA0,
72755 -0xFF,0x00,0x03,0x24,
72756 -0x74,0x00,0x23,0x12,
72757 -0x00,0x00,0x00,0x00,
72758 -0x10,0x37,0xA2,0x8E,
72759 -0x7C,0x37,0xB3,0x8E,
72760 -0x01,0x00,0x04,0x24,
72761 -0x00,0x00,0xC2,0xAF,
72762 -0x14,0x37,0xA2,0xAE,
72763 -0x00,0x00,0xD3,0xAF,
72764 -0xB0,0x01,0x00,0x0C,
72765 -0x00,0x00,0x00,0x00,
72766 -0x7C,0x37,0xA4,0x8E,
72767 -0x80,0x37,0xA3,0x8E,
72768 -0x02,0x80,0x02,0x3C,
72769 -0x04,0xEA,0x42,0x24,
72770 -0x00,0x00,0x52,0x8C,
72771 -0x80,0x00,0x84,0x24,
72772 -0xFF,0x00,0x62,0x24,
72773 -0x2B,0x10,0x44,0x00,
72774 -0x0A,0x18,0x82,0x00,
72775 -0x7C,0x37,0xA3,0xAE,
72776 -0x02,0x80,0x03,0x3C,
72777 -0x08,0xEA,0x63,0x24,
72778 -0x7C,0x37,0x42,0x8E,
72779 -0x00,0x00,0x76,0x8C,
72780 -0x00,0x00,0x00,0x00,
72781 -0x00,0x00,0xC2,0xAE,
72782 -0x02,0x80,0x17,0x3C,
72783 -0xFF,0xFF,0x62,0x32,
72784 -0x25,0x80,0x57,0x00,
72785 -0x00,0x00,0xD0,0xAE,
72786 -0x0C,0x00,0x02,0x92,
72787 -0x21,0x28,0x00,0x00,
72788 -0x00,0x00,0xC2,0xAE,
72789 -0x02,0x00,0x04,0x92,
72790 -0x00,0x00,0x00,0x00,
72791 -0x21,0x20,0x93,0x00,
72792 -0xFF,0xFF,0x84,0x30,
72793 -0xFB,0x60,0x00,0x0C,
72794 -0x25,0x20,0x97,0x00,
72795 -0x0C,0x00,0x11,0x92,
72796 -0x20,0x10,0x02,0x3C,
72797 -0x01,0x00,0x04,0x24,
72798 -0x00,0x1A,0x11,0x00,
72799 -0x21,0x18,0x62,0x00,
72800 -0xFF,0x00,0x02,0x24,
72801 -0x21,0x30,0x60,0x00,
72802 -0x06,0x00,0x22,0x12,
72803 -0x80,0x00,0x07,0x24,
72804 -0x7C,0x37,0x45,0x8E,
72805 -0x10,0x37,0x43,0xAE,
72806 -0xB4,0x36,0x51,0xA2,
72807 -0x73,0x01,0x00,0x0C,
72808 -0x10,0x00,0xA0,0xAF,
72809 -0x04,0x00,0x04,0x8E,
72810 -0x08,0x00,0x03,0x8E,
72811 -0xFF,0xE0,0x02,0x3C,
72812 -0xFF,0xFF,0x42,0x34,
72813 -0x1F,0x00,0x84,0x30,
72814 -0x24,0x18,0x62,0x00,
72815 -0x00,0x26,0x04,0x00,
72816 -0xFF,0xDF,0x02,0x3C,
72817 -0x25,0x18,0x64,0x00,
72818 -0xFF,0xFF,0x42,0x34,
72819 -0x24,0x18,0x62,0x00,
72820 -0x00,0x40,0x04,0x3C,
72821 -0x25,0x18,0x64,0x00,
72822 -0xC0,0xFF,0x05,0x24,
72823 -0x82,0x11,0x03,0x00,
72824 -0x24,0x20,0x65,0x00,
72825 -0x01,0x00,0x42,0x30,
72826 -0xA3,0xFF,0x40,0x10,
72827 -0x04,0x00,0x84,0x34,
72828 -0x08,0x00,0x03,0xAE,
72829 -0x14,0x37,0x46,0x8E,
72830 -0x21,0x28,0x60,0x02,
72831 -0x80,0x00,0x07,0x24,
72832 -0x01,0x00,0x04,0x24,
72833 -0x01,0x00,0x14,0x24,
72834 -0x73,0x01,0x00,0x0C,
72835 -0x10,0x00,0xB4,0xAF,
72836 -0x14,0x37,0x43,0x8E,
72837 -0x01,0x00,0x04,0x24,
72838 -0x00,0x00,0xC3,0xAE,
72839 -0xB0,0x01,0x00,0x0C,
72840 -0x00,0x00,0x00,0x00,
72841 -0x2A,0x1C,0x42,0x92,
72842 -0x00,0x00,0x00,0x00,
72843 -0xA3,0xFF,0x40,0x14,
72844 -0x2A,0xB0,0x02,0x3C,
72845 -0x00,0x60,0x01,0x40,
72846 -0x01,0x00,0x21,0x34,
72847 -0x01,0x00,0x21,0x38,
72848 -0x00,0x60,0x81,0x40,
72849 -0x2A,0x1C,0x54,0xA2,
72850 -0x02,0x00,0x02,0x92,
72851 -0x00,0x00,0x00,0x00,
72852 -0x21,0x10,0x53,0x00,
72853 -0xFF,0xFF,0x42,0x30,
72854 -0x25,0x10,0x57,0x00,
72855 -0x02,0x00,0x43,0x94,
72856 -0x00,0x00,0x00,0x00,
72857 -0xFF,0x00,0x64,0x30,
72858 -0x00,0xC0,0x84,0x24,
72859 -0xFF,0xFF,0x84,0x30,
72860 -0xC2,0x34,0x00,0x0C,
72861 -0x2B,0x1C,0x43,0xA2,
72862 -0x00,0x60,0x01,0x40,
72863 -0x01,0x00,0x21,0x34,
72864 -0x00,0x60,0x81,0x40,
72865 -0x2A,0xB0,0x02,0x3C,
72866 -0x09,0x00,0x42,0x34,
72867 -0x02,0x00,0x03,0x24,
72868 -0x00,0x00,0x54,0xA0,
72869 -0x00,0x00,0x43,0xA0,
72870 -0xFF,0x00,0x03,0x24,
72871 -0x8E,0xFF,0x23,0x16,
72872 -0x00,0x00,0x00,0x00,
72873 -0x00,0x60,0x01,0x40,
72874 -0x01,0x00,0x21,0x34,
72875 -0x01,0x00,0x21,0x38,
72876 -0x00,0x60,0x81,0x40,
72877 -0x02,0x80,0x03,0x3C,
72878 -0x30,0x1F,0x62,0x24,
72879 -0xD0,0x1B,0x43,0x8C,
72880 -0x3C,0x00,0xBF,0x8F,
72881 -0x38,0x00,0xBE,0x8F,
72882 -0x34,0x00,0xB7,0x8F,
72883 -0x30,0x00,0xB6,0x8F,
72884 -0x2C,0x00,0xB5,0x8F,
72885 -0x28,0x00,0xB4,0x8F,
72886 -0x24,0x00,0xB3,0x8F,
72887 -0x20,0x00,0xB2,0x8F,
72888 -0x1C,0x00,0xB1,0x8F,
72889 -0x18,0x00,0xB0,0x8F,
72890 -0x00,0x38,0x63,0x34,
72891 -0x41,0xB0,0x04,0x3C,
72892 -0x40,0x00,0xBD,0x27,
72893 -0x00,0x00,0x83,0xAC,
72894 -0x08,0x00,0xE0,0x03,
72895 -0xD0,0x1B,0x43,0xAC,
72896 -0x00,0x80,0x03,0x3C,
72897 -0x25,0xB0,0x02,0x3C,
72898 -0x88,0x10,0x63,0x24,
72899 -0x18,0x03,0x42,0x34,
72900 -0x00,0x00,0x43,0xAC,
72901 -0x08,0x00,0xE0,0x03,
72902 -0x00,0x00,0x00,0x00,
72903 -0xC0,0xFF,0xBD,0x27,
72904 -0x34,0x00,0xB7,0xAF,
72905 -0x3C,0x00,0xBF,0xAF,
72906 -0x38,0x00,0xBE,0xAF,
72907 -0x30,0x00,0xB6,0xAF,
72908 -0x2C,0x00,0xB5,0xAF,
72909 -0x28,0x00,0xB4,0xAF,
72910 -0x24,0x00,0xB3,0xAF,
72911 -0x20,0x00,0xB2,0xAF,
72912 -0x1C,0x00,0xB1,0xAF,
72913 -0x18,0x00,0xB0,0xAF,
72914 -0x02,0x80,0x06,0x3C,
72915 -0xCC,0x5E,0xC5,0x90,
72916 -0x00,0x80,0x03,0x3C,
72917 -0x25,0xB0,0x02,0x3C,
72918 -0x18,0x03,0x42,0x34,
72919 -0xA4,0x10,0x63,0x24,
72920 -0x40,0x00,0xA4,0x30,
72921 -0x00,0x00,0x43,0xAC,
72922 -0x21,0xB8,0x00,0x00,
72923 -0x03,0x00,0x80,0x10,
72924 -0x7F,0x00,0xA2,0x30,
72925 -0xBF,0x00,0xA2,0x30,
72926 -0x01,0x00,0x17,0x24,
72927 -0xCC,0x5E,0xC2,0xA0,
72928 -0x00,0x60,0x01,0x40,
72929 -0x01,0x00,0x21,0x34,
72930 -0x00,0x60,0x81,0x40,
72931 -0x02,0x80,0x1E,0x3C,
72932 -0x25,0xB0,0x02,0x3C,
72933 -0x30,0x1F,0xD3,0x27,
72934 -0xB0,0x03,0x55,0x34,
72935 -0x6A,0x04,0x00,0x08,
72936 -0x02,0x80,0x16,0x3C,
72937 -0x90,0x36,0x91,0xA2,
72938 -0x30,0x1F,0xC2,0x27,
72939 -0xC8,0x36,0x46,0x8C,
72940 -0x34,0x37,0x45,0x8C,
72941 -0x03,0x00,0x04,0x24,
72942 -0x80,0x00,0x07,0x24,
72943 -0x73,0x01,0x00,0x0C,
72944 -0x10,0x00,0xA0,0xAF,
72945 -0x30,0x1F,0xD4,0x27,
72946 -0xCC,0x36,0x85,0x8E,
72947 -0x21,0x20,0x00,0x02,
72948 -0x15,0x02,0x00,0x0C,
72949 -0x21,0x30,0x40,0x02,
72950 -0x2A,0xB0,0x07,0x3C,
72951 -0x0D,0x00,0xE2,0x34,
72952 -0x04,0x00,0x43,0x24,
72953 -0x0B,0x10,0x77,0x00,
72954 -0x01,0x00,0x04,0x24,
72955 -0x02,0x00,0x03,0x24,
72956 -0x00,0x00,0x44,0xA0,
72957 -0x00,0x00,0x43,0xA0,
72958 -0x1A,0x5E,0xC4,0x96,
72959 -0x25,0xB0,0x06,0x3C,
72960 -0x66,0x03,0xC5,0x34,
72961 -0x01,0x00,0x84,0x24,
72962 -0x1A,0x5E,0xC4,0xA6,
72963 -0x1A,0x5E,0xC2,0x96,
72964 -0xFF,0x00,0x03,0x24,
72965 -0x00,0x00,0xA2,0xA4,
72966 -0x2F,0x00,0x23,0x12,
72967 -0x00,0x00,0x00,0x00,
72968 -0xC8,0x36,0x62,0x8E,
72969 -0x34,0x37,0x72,0x8E,
72970 -0x03,0x00,0x04,0x24,
72971 -0x00,0x00,0xA2,0xAE,
72972 -0xCC,0x36,0x62,0xAE,
72973 -0x00,0x00,0xB2,0xAE,
72974 -0xB0,0x01,0x00,0x0C,
72975 -0x00,0x00,0x00,0x00,
72976 -0x34,0x37,0x64,0x8E,
72977 -0x38,0x37,0x63,0x8E,
72978 -0x02,0x80,0x02,0x3C,
72979 -0x0C,0xEA,0x42,0x24,
72980 -0x00,0x00,0x54,0x8C,
72981 -0x80,0x00,0x84,0x24,
72982 -0xFF,0x00,0x62,0x24,
72983 -0x2B,0x10,0x44,0x00,
72984 -0x0A,0x18,0x82,0x00,
72985 -0x34,0x37,0x63,0xAE,
72986 -0x34,0x37,0x82,0x8E,
72987 -0x00,0x00,0x00,0x00,
72988 -0x00,0x00,0xA2,0xAE,
72989 -0x02,0x80,0x03,0x3C,
72990 -0xFF,0xFF,0x42,0x32,
72991 -0x25,0x80,0x43,0x00,
72992 -0x00,0x00,0xB0,0xAE,
72993 -0x0C,0x00,0x02,0x92,
72994 -0x01,0x00,0x05,0x24,
72995 -0x00,0x00,0xA2,0xAE,
72996 -0x02,0x00,0x04,0x92,
72997 -0x00,0x00,0x00,0x00,
72998 -0x21,0x20,0x92,0x00,
72999 -0xFF,0xFF,0x84,0x30,
73000 -0xFB,0x60,0x00,0x0C,
73001 -0x25,0x20,0x83,0x00,
73002 -0x0C,0x00,0x11,0x92,
73003 -0x20,0x10,0x02,0x3C,
73004 -0xFF,0x00,0x03,0x24,
73005 -0x00,0x22,0x11,0x00,
73006 -0xC2,0xFF,0x23,0x12,
73007 -0x21,0x20,0x82,0x00,
73008 -0xB8,0xFF,0xE0,0x16,
73009 -0xC8,0x36,0x84,0xAE,
73010 -0x02,0x80,0x02,0x3C,
73011 -0x30,0x1F,0x42,0x24,
73012 -0x4C,0x04,0x00,0x08,
73013 -0x8C,0x36,0x51,0xA0,
73014 -0x21,0x00,0xE0,0x12,
73015 -0x40,0x00,0xE4,0x34,
73016 -0x90,0x36,0x83,0x92,
73017 -0x41,0x00,0xE4,0x34,
73018 -0xB0,0x03,0xC5,0x34,
73019 -0x00,0x00,0x83,0xA0,
73020 -0x00,0x00,0xA3,0xAC,
73021 -0x00,0x60,0x01,0x40,
73022 -0x01,0x00,0x21,0x34,
73023 -0x00,0x60,0x81,0x40,
73024 -0x00,0x60,0x01,0x40,
73025 -0x01,0x00,0x21,0x34,
73026 -0x01,0x00,0x21,0x38,
73027 -0x00,0x60,0x81,0x40,
73028 -0x30,0x1F,0xC5,0x27,
73029 -0xD0,0x1B,0xA4,0x8C,
73030 -0x01,0x00,0x02,0x3C,
73031 -0x3C,0x00,0xBF,0x8F,
73032 -0x38,0x00,0xBE,0x8F,
73033 -0x34,0x00,0xB7,0x8F,
73034 -0x30,0x00,0xB6,0x8F,
73035 -0x2C,0x00,0xB5,0x8F,
73036 -0x28,0x00,0xB4,0x8F,
73037 -0x24,0x00,0xB3,0x8F,
73038 -0x20,0x00,0xB2,0x8F,
73039 -0x1C,0x00,0xB1,0x8F,
73040 -0x18,0x00,0xB0,0x8F,
73041 -0x00,0x80,0x42,0x34,
73042 -0x25,0x20,0x82,0x00,
73043 -0x41,0xB0,0x03,0x3C,
73044 -0x40,0x00,0xBD,0x27,
73045 -0x00,0x00,0x64,0xAC,
73046 -0x08,0x00,0xE0,0x03,
73047 -0xD0,0x1B,0xA4,0xAC,
73048 -0x8C,0x36,0x83,0x92,
73049 -0xB0,0x03,0xC5,0x34,
73050 -0x00,0x00,0x83,0xA0,
73051 -0x00,0x00,0xA3,0xAC,
73052 -0x00,0x60,0x01,0x40,
73053 -0x01,0x00,0x21,0x34,
73054 -0x00,0x60,0x81,0x40,
73055 -0x00,0x60,0x01,0x40,
73056 -0x01,0x00,0x21,0x34,
73057 -0x01,0x00,0x21,0x38,
73058 -0x00,0x60,0x81,0x40,
73059 -0x30,0x1F,0xC5,0x27,
73060 -0xD0,0x1B,0xA4,0x8C,
73061 -0x01,0x00,0x02,0x3C,
73062 -0x3C,0x00,0xBF,0x8F,
73063 -0x38,0x00,0xBE,0x8F,
73064 -0x34,0x00,0xB7,0x8F,
73065 -0x30,0x00,0xB6,0x8F,
73066 -0x2C,0x00,0xB5,0x8F,
73067 -0x28,0x00,0xB4,0x8F,
73068 -0x24,0x00,0xB3,0x8F,
73069 -0x20,0x00,0xB2,0x8F,
73070 -0x1C,0x00,0xB1,0x8F,
73071 -0x18,0x00,0xB0,0x8F,
73072 -0x00,0x80,0x42,0x34,
73073 -0x25,0x20,0x82,0x00,
73074 -0x41,0xB0,0x03,0x3C,
73075 -0x40,0x00,0xBD,0x27,
73076 -0x00,0x00,0x64,0xAC,
73077 -0x08,0x00,0xE0,0x03,
73078 -0xD0,0x1B,0xA4,0xAC,
73079 -0xC0,0xFF,0xBD,0x27,
73080 -0x34,0x00,0xB7,0xAF,
73081 -0x3C,0x00,0xBF,0xAF,
73082 -0x38,0x00,0xBE,0xAF,
73083 -0x30,0x00,0xB6,0xAF,
73084 -0x2C,0x00,0xB5,0xAF,
73085 -0x28,0x00,0xB4,0xAF,
73086 -0x24,0x00,0xB3,0xAF,
73087 -0x20,0x00,0xB2,0xAF,
73088 -0x1C,0x00,0xB1,0xAF,
73089 -0x18,0x00,0xB0,0xAF,
73090 -0x02,0x80,0x06,0x3C,
73091 -0xCC,0x5E,0xC5,0x90,
73092 -0x00,0x80,0x03,0x3C,
73093 -0x25,0xB0,0x02,0x3C,
73094 -0x18,0x03,0x42,0x34,
73095 -0x64,0x13,0x63,0x24,
73096 -0x10,0x00,0xA4,0x30,
73097 -0x00,0x00,0x43,0xAC,
73098 -0x21,0xB8,0x00,0x00,
73099 -0x03,0x00,0x80,0x10,
73100 -0xDF,0x00,0xA2,0x30,
73101 -0xEF,0x00,0xA2,0x30,
73102 -0x01,0x00,0x17,0x24,
73103 -0xCC,0x5E,0xC2,0xA0,
73104 -0xCC,0x5E,0xC3,0x90,
73105 -0x25,0xB0,0x02,0x3C,
73106 -0xB0,0x03,0x42,0x34,
73107 -0x00,0x00,0x43,0xAC,
73108 -0x00,0x00,0x43,0xAC,
73109 -0x00,0x60,0x01,0x40,
73110 -0x01,0x00,0x21,0x34,
73111 -0x00,0x60,0x81,0x40,
73112 -0x02,0x80,0x1E,0x3C,
73113 -0x30,0x1F,0xD3,0x27,
73114 -0x21,0xA8,0x40,0x00,
73115 -0x1E,0x05,0x00,0x08,
73116 -0x02,0x80,0x16,0x3C,
73117 -0x98,0x36,0x91,0xA2,
73118 -0x30,0x1F,0xC2,0x27,
73119 -0xD4,0x36,0x46,0x8C,
73120 -0x40,0x37,0x45,0x8C,
73121 -0x04,0x00,0x04,0x24,
73122 -0x80,0x00,0x07,0x24,
73123 -0x73,0x01,0x00,0x0C,
73124 -0x10,0x00,0xA0,0xAF,
73125 -0x30,0x1F,0xD4,0x27,
73126 -0xD8,0x36,0x85,0x8E,
73127 -0x21,0x20,0x00,0x02,
73128 -0x15,0x02,0x00,0x0C,
73129 -0x21,0x30,0x40,0x02,
73130 -0x2A,0xB0,0x07,0x3C,
73131 -0x15,0x00,0xE2,0x34,
73132 -0x04,0x00,0x43,0x24,
73133 -0x0B,0x10,0x77,0x00,
73134 -0x01,0x00,0x04,0x24,
73135 -0x02,0x00,0x03,0x24,
73136 -0x00,0x00,0x44,0xA0,
73137 -0x00,0x00,0x43,0xA0,
73138 -0x1A,0x5E,0xC4,0x96,
73139 -0x25,0xB0,0x06,0x3C,
73140 -0x66,0x03,0xC5,0x34,
73141 -0x01,0x00,0x84,0x24,
73142 -0x1A,0x5E,0xC4,0xA6,
73143 -0x1A,0x5E,0xC2,0x96,
73144 -0xFF,0x00,0x03,0x24,
73145 -0x00,0x00,0xA2,0xA4,
73146 -0x2F,0x00,0x23,0x12,
73147 -0x00,0x00,0x00,0x00,
73148 -0xD4,0x36,0x62,0x8E,
73149 -0x40,0x37,0x72,0x8E,
73150 -0x04,0x00,0x04,0x24,
73151 -0x00,0x00,0xA2,0xAE,
73152 -0xD8,0x36,0x62,0xAE,
73153 -0x00,0x00,0xB2,0xAE,
73154 -0xB0,0x01,0x00,0x0C,
73155 -0x00,0x00,0x00,0x00,
73156 -0x40,0x37,0x64,0x8E,
73157 -0x44,0x37,0x63,0x8E,
73158 -0x02,0x80,0x02,0x3C,
73159 -0x10,0xEA,0x42,0x24,
73160 -0x00,0x00,0x54,0x8C,
73161 -0x80,0x00,0x84,0x24,
73162 -0xFF,0x00,0x62,0x24,
73163 -0x2B,0x10,0x44,0x00,
73164 -0x0A,0x18,0x82,0x00,
73165 -0x40,0x37,0x63,0xAE,
73166 -0x40,0x37,0x82,0x8E,
73167 -0x00,0x00,0x00,0x00,
73168 -0x00,0x00,0xA2,0xAE,
73169 -0x02,0x80,0x03,0x3C,
73170 -0xFF,0xFF,0x42,0x32,
73171 -0x25,0x80,0x43,0x00,
73172 -0x00,0x00,0xB0,0xAE,
73173 -0x0C,0x00,0x02,0x92,
73174 -0x02,0x00,0x05,0x24,
73175 -0x00,0x00,0xA2,0xAE,
73176 -0x02,0x00,0x04,0x92,
73177 -0x00,0x00,0x00,0x00,
73178 -0x21,0x20,0x92,0x00,
73179 -0xFF,0xFF,0x84,0x30,
73180 -0xFB,0x60,0x00,0x0C,
73181 -0x25,0x20,0x83,0x00,
73182 -0x0C,0x00,0x11,0x92,
73183 -0x20,0x10,0x02,0x3C,
73184 -0xFF,0x00,0x03,0x24,
73185 -0x00,0x22,0x11,0x00,
73186 -0xC2,0xFF,0x23,0x12,
73187 -0x21,0x20,0x82,0x00,
73188 -0xB8,0xFF,0xE0,0x16,
73189 -0xD4,0x36,0x84,0xAE,
73190 -0x02,0x80,0x02,0x3C,
73191 -0x30,0x1F,0x42,0x24,
73192 -0x00,0x05,0x00,0x08,
73193 -0x94,0x36,0x51,0xA0,
73194 -0x20,0x00,0xE0,0x12,
73195 -0x42,0x00,0xE4,0x34,
73196 -0x98,0x36,0x83,0x92,
73197 -0x43,0x00,0xE4,0x34,
73198 -0xB0,0x03,0xC5,0x34,
73199 -0x00,0x00,0x83,0xA0,
73200 -0x00,0x00,0xA3,0xAC,
73201 -0x00,0x60,0x01,0x40,
73202 -0x01,0x00,0x21,0x34,
73203 -0x00,0x60,0x81,0x40,
73204 -0x00,0x60,0x01,0x40,
73205 -0x01,0x00,0x21,0x34,
73206 -0x01,0x00,0x21,0x38,
73207 -0x00,0x60,0x81,0x40,
73208 -0x30,0x1F,0xC5,0x27,
73209 -0xD0,0x1B,0xA2,0x8C,
73210 -0x3C,0x00,0xBF,0x8F,
73211 -0x38,0x00,0xBE,0x8F,
73212 -0x34,0x00,0xB7,0x8F,
73213 -0x30,0x00,0xB6,0x8F,
73214 -0x2C,0x00,0xB5,0x8F,
73215 -0x28,0x00,0xB4,0x8F,
73216 -0x24,0x00,0xB3,0x8F,
73217 -0x20,0x00,0xB2,0x8F,
73218 -0x1C,0x00,0xB1,0x8F,
73219 -0x18,0x00,0xB0,0x8F,
73220 -0x06,0x00,0x03,0x3C,
73221 -0x25,0x10,0x43,0x00,
73222 -0x41,0xB0,0x04,0x3C,
73223 -0x40,0x00,0xBD,0x27,
73224 -0x00,0x00,0x82,0xAC,
73225 -0x08,0x00,0xE0,0x03,
73226 -0xD0,0x1B,0xA2,0xAC,
73227 -0x94,0x36,0x83,0x92,
73228 -0xB0,0x03,0xC5,0x34,
73229 -0x00,0x00,0x83,0xA0,
73230 -0x00,0x00,0xA3,0xAC,
73231 -0x00,0x60,0x01,0x40,
73232 -0x01,0x00,0x21,0x34,
73233 -0x00,0x60,0x81,0x40,
73234 -0x00,0x60,0x01,0x40,
73235 -0x01,0x00,0x21,0x34,
73236 -0x01,0x00,0x21,0x38,
73237 -0x00,0x60,0x81,0x40,
73238 -0x30,0x1F,0xC5,0x27,
73239 -0xD0,0x1B,0xA2,0x8C,
73240 -0x3C,0x00,0xBF,0x8F,
73241 -0x38,0x00,0xBE,0x8F,
73242 -0x34,0x00,0xB7,0x8F,
73243 -0x30,0x00,0xB6,0x8F,
73244 -0x2C,0x00,0xB5,0x8F,
73245 -0x28,0x00,0xB4,0x8F,
73246 -0x24,0x00,0xB3,0x8F,
73247 -0x20,0x00,0xB2,0x8F,
73248 -0x1C,0x00,0xB1,0x8F,
73249 -0x18,0x00,0xB0,0x8F,
73250 -0x06,0x00,0x03,0x3C,
73251 -0x25,0x10,0x43,0x00,
73252 -0x41,0xB0,0x04,0x3C,
73253 -0x40,0x00,0xBD,0x27,
73254 -0x00,0x00,0x82,0xAC,
73255 -0x08,0x00,0xE0,0x03,
73256 -0xD0,0x1B,0xA2,0xAC,
73257 -0xC0,0xFF,0xBD,0x27,
73258 -0x34,0x00,0xB7,0xAF,
73259 -0x3C,0x00,0xBF,0xAF,
73260 -0x38,0x00,0xBE,0xAF,
73261 -0x30,0x00,0xB6,0xAF,
73262 -0x2C,0x00,0xB5,0xAF,
73263 -0x28,0x00,0xB4,0xAF,
73264 -0x24,0x00,0xB3,0xAF,
73265 -0x20,0x00,0xB2,0xAF,
73266 -0x1C,0x00,0xB1,0xAF,
73267 -0x18,0x00,0xB0,0xAF,
73268 -0x02,0x80,0x06,0x3C,
73269 -0xCC,0x5E,0xC5,0x90,
73270 -0x00,0x80,0x03,0x3C,
73271 -0x25,0xB0,0x02,0x3C,
73272 -0x18,0x03,0x42,0x34,
73273 -0x2C,0x16,0x63,0x24,
73274 -0x01,0x00,0xA4,0x30,
73275 -0x00,0x00,0x43,0xAC,
73276 -0x21,0xB8,0x00,0x00,
73277 -0x03,0x00,0x80,0x10,
73278 -0xF7,0x00,0xA2,0x30,
73279 -0xFE,0x00,0xA2,0x30,
73280 -0x01,0x00,0x17,0x24,
73281 -0xCC,0x5E,0xC2,0xA0,
73282 -0xCC,0x5E,0xC3,0x90,
73283 -0x25,0xB0,0x02,0x3C,
73284 -0xB0,0x03,0x42,0x34,
73285 -0x00,0x00,0x43,0xAC,
73286 -0x00,0x60,0x01,0x40,
73287 -0x01,0x00,0x21,0x34,
73288 -0x00,0x60,0x81,0x40,
73289 -0x02,0x80,0x1E,0x3C,
73290 -0x30,0x1F,0xD3,0x27,
73291 -0x21,0xA8,0x40,0x00,
73292 -0xCF,0x05,0x00,0x08,
73293 -0x02,0x80,0x16,0x3C,
73294 -0xA8,0x36,0x91,0xA2,
73295 -0x30,0x1F,0xC2,0x27,
73296 -0xE0,0x36,0x46,0x8C,
73297 -0x4C,0x37,0x45,0x8C,
73298 -0x05,0x00,0x04,0x24,
73299 -0x80,0x00,0x07,0x24,
73300 -0x73,0x01,0x00,0x0C,
73301 -0x10,0x00,0xA0,0xAF,
73302 -0x30,0x1F,0xD4,0x27,
73303 -0xE4,0x36,0x85,0x8E,
73304 -0x21,0x20,0x00,0x02,
73305 -0x15,0x02,0x00,0x0C,
73306 -0x21,0x30,0x40,0x02,
73307 -0x2A,0xB0,0x07,0x3C,
73308 -0x1D,0x00,0xE2,0x34,
73309 -0x04,0x00,0x43,0x24,
73310 -0x0B,0x10,0x77,0x00,
73311 -0x01,0x00,0x04,0x24,
73312 -0x02,0x00,0x03,0x24,
73313 -0x00,0x00,0x44,0xA0,
73314 -0x00,0x00,0x43,0xA0,
73315 -0x1A,0x5E,0xC4,0x96,
73316 -0x25,0xB0,0x06,0x3C,
73317 -0x66,0x03,0xC5,0x34,
73318 -0x01,0x00,0x84,0x24,
73319 -0x1A,0x5E,0xC4,0xA6,
73320 -0x1A,0x5E,0xC2,0x96,
73321 -0xFF,0x00,0x03,0x24,
73322 -0x00,0x00,0xA2,0xA4,
73323 -0x2F,0x00,0x23,0x12,
73324 -0x00,0x00,0x00,0x00,
73325 -0xE0,0x36,0x62,0x8E,
73326 -0x4C,0x37,0x72,0x8E,
73327 -0x05,0x00,0x04,0x24,
73328 -0x00,0x00,0xA2,0xAE,
73329 -0xE4,0x36,0x62,0xAE,
73330 -0x00,0x00,0xB2,0xAE,
73331 -0xB0,0x01,0x00,0x0C,
73332 -0x00,0x00,0x00,0x00,
73333 -0x4C,0x37,0x64,0x8E,
73334 -0x50,0x37,0x63,0x8E,
73335 -0x02,0x80,0x02,0x3C,
73336 -0x14,0xEA,0x42,0x24,
73337 -0x00,0x00,0x54,0x8C,
73338 -0x80,0x00,0x84,0x24,
73339 -0xFF,0x00,0x62,0x24,
73340 -0x2B,0x10,0x44,0x00,
73341 -0x0A,0x18,0x82,0x00,
73342 -0x4C,0x37,0x63,0xAE,
73343 -0x4C,0x37,0x82,0x8E,
73344 -0x00,0x00,0x00,0x00,
73345 -0x00,0x00,0xA2,0xAE,
73346 -0x02,0x80,0x03,0x3C,
73347 -0xFF,0xFF,0x42,0x32,
73348 -0x25,0x80,0x43,0x00,
73349 -0x00,0x00,0xB0,0xAE,
73350 -0x0C,0x00,0x02,0x92,
73351 -0x08,0x00,0x05,0x24,
73352 -0x00,0x00,0xA2,0xAE,
73353 -0x02,0x00,0x04,0x92,
73354 -0x00,0x00,0x00,0x00,
73355 -0x21,0x20,0x92,0x00,
73356 -0xFF,0xFF,0x84,0x30,
73357 -0xFB,0x60,0x00,0x0C,
73358 -0x25,0x20,0x83,0x00,
73359 -0x0C,0x00,0x11,0x92,
73360 -0x20,0x10,0x02,0x3C,
73361 -0xFF,0x00,0x03,0x24,
73362 -0x00,0x22,0x11,0x00,
73363 -0xC2,0xFF,0x23,0x12,
73364 -0x21,0x20,0x82,0x00,
73365 -0xB8,0xFF,0xE0,0x16,
73366 -0xE0,0x36,0x84,0xAE,
73367 -0x02,0x80,0x02,0x3C,
73368 -0x30,0x1F,0x42,0x24,
73369 -0xB1,0x05,0x00,0x08,
73370 -0x9C,0x36,0x51,0xA0,
73371 -0x20,0x00,0xE0,0x12,
73372 -0x44,0x00,0xE4,0x34,
73373 -0xA8,0x36,0x83,0x92,
73374 -0x45,0x00,0xE4,0x34,
73375 -0xB0,0x03,0xC5,0x34,
73376 -0x00,0x00,0x83,0xA0,
73377 -0x00,0x00,0xA3,0xAC,
73378 -0x00,0x60,0x01,0x40,
73379 -0x01,0x00,0x21,0x34,
73380 -0x00,0x60,0x81,0x40,
73381 -0x00,0x60,0x01,0x40,
73382 -0x01,0x00,0x21,0x34,
73383 -0x01,0x00,0x21,0x38,
73384 -0x00,0x60,0x81,0x40,
73385 -0x30,0x1F,0xC5,0x27,
73386 -0xD0,0x1B,0xA2,0x8C,
73387 -0x3C,0x00,0xBF,0x8F,
73388 -0x38,0x00,0xBE,0x8F,
73389 -0x34,0x00,0xB7,0x8F,
73390 -0x30,0x00,0xB6,0x8F,
73391 -0x2C,0x00,0xB5,0x8F,
73392 -0x28,0x00,0xB4,0x8F,
73393 -0x24,0x00,0xB3,0x8F,
73394 -0x20,0x00,0xB2,0x8F,
73395 -0x1C,0x00,0xB1,0x8F,
73396 -0x18,0x00,0xB0,0x8F,
73397 -0x18,0x00,0x03,0x3C,
73398 -0x25,0x10,0x43,0x00,
73399 -0x41,0xB0,0x04,0x3C,
73400 -0x40,0x00,0xBD,0x27,
73401 -0x00,0x00,0x82,0xAC,
73402 -0x08,0x00,0xE0,0x03,
73403 -0xD0,0x1B,0xA2,0xAC,
73404 -0x9C,0x36,0x83,0x92,
73405 -0xB0,0x03,0xC5,0x34,
73406 -0x00,0x00,0x83,0xA0,
73407 -0x00,0x00,0xA3,0xAC,
73408 -0x00,0x60,0x01,0x40,
73409 -0x01,0x00,0x21,0x34,
73410 -0x00,0x60,0x81,0x40,
73411 -0x00,0x60,0x01,0x40,
73412 -0x01,0x00,0x21,0x34,
73413 -0x01,0x00,0x21,0x38,
73414 -0x00,0x60,0x81,0x40,
73415 -0x30,0x1F,0xC5,0x27,
73416 -0xD0,0x1B,0xA2,0x8C,
73417 -0x3C,0x00,0xBF,0x8F,
73418 -0x38,0x00,0xBE,0x8F,
73419 -0x34,0x00,0xB7,0x8F,
73420 -0x30,0x00,0xB6,0x8F,
73421 -0x2C,0x00,0xB5,0x8F,
73422 -0x28,0x00,0xB4,0x8F,
73423 -0x24,0x00,0xB3,0x8F,
73424 -0x20,0x00,0xB2,0x8F,
73425 -0x1C,0x00,0xB1,0x8F,
73426 -0x18,0x00,0xB0,0x8F,
73427 -0x18,0x00,0x03,0x3C,
73428 -0x25,0x10,0x43,0x00,
73429 -0x41,0xB0,0x04,0x3C,
73430 -0x40,0x00,0xBD,0x27,
73431 -0x00,0x00,0x82,0xAC,
73432 -0x08,0x00,0xE0,0x03,
73433 -0xD0,0x1B,0xA2,0xAC,
73434 -0xC0,0xFF,0xBD,0x27,
73435 -0x34,0x00,0xB7,0xAF,
73436 -0x3C,0x00,0xBF,0xAF,
73437 -0x38,0x00,0xBE,0xAF,
73438 -0x30,0x00,0xB6,0xAF,
73439 -0x2C,0x00,0xB5,0xAF,
73440 -0x28,0x00,0xB4,0xAF,
73441 -0x24,0x00,0xB3,0xAF,
73442 -0x20,0x00,0xB2,0xAF,
73443 -0x1C,0x00,0xB1,0xAF,
73444 -0x18,0x00,0xB0,0xAF,
73445 -0x02,0x80,0x06,0x3C,
73446 -0xCC,0x5E,0xC5,0x90,
73447 -0x00,0x80,0x03,0x3C,
73448 -0x25,0xB0,0x02,0x3C,
73449 -0x18,0x03,0x42,0x34,
73450 -0xF0,0x18,0x63,0x24,
73451 -0x02,0x00,0xA4,0x30,
73452 -0x00,0x00,0x43,0xAC,
73453 -0x21,0xB8,0x00,0x00,
73454 -0x03,0x00,0x80,0x10,
73455 -0xFB,0x00,0xA2,0x30,
73456 -0xFD,0x00,0xA2,0x30,
73457 -0x01,0x00,0x17,0x24,
73458 -0xCC,0x5E,0xC2,0xA0,
73459 -0xCC,0x5E,0xC3,0x90,
73460 -0x25,0xB0,0x02,0x3C,
73461 -0xB0,0x03,0x42,0x34,
73462 -0x00,0x00,0x43,0xAC,
73463 -0x00,0x60,0x01,0x40,
73464 -0x01,0x00,0x21,0x34,
73465 -0x00,0x60,0x81,0x40,
73466 -0x02,0x80,0x1E,0x3C,
73467 -0x30,0x1F,0xD3,0x27,
73468 -0x21,0xA8,0x40,0x00,
73469 -0x80,0x06,0x00,0x08,
73470 -0x02,0x80,0x16,0x3C,
73471 -0xA4,0x36,0x91,0xA2,
73472 -0x30,0x1F,0xC2,0x27,
73473 -0xEC,0x36,0x46,0x8C,
73474 -0x58,0x37,0x45,0x8C,
73475 -0x06,0x00,0x04,0x24,
73476 -0x80,0x00,0x07,0x24,
73477 -0x73,0x01,0x00,0x0C,
73478 -0x10,0x00,0xA0,0xAF,
73479 -0x30,0x1F,0xD4,0x27,
73480 -0xF0,0x36,0x85,0x8E,
73481 -0x21,0x20,0x00,0x02,
73482 -0x15,0x02,0x00,0x0C,
73483 -0x21,0x30,0x40,0x02,
73484 -0x2A,0xB0,0x07,0x3C,
73485 -0x25,0x00,0xE2,0x34,
73486 -0x04,0x00,0x43,0x24,
73487 -0x0B,0x10,0x77,0x00,
73488 -0x01,0x00,0x04,0x24,
73489 -0x02,0x00,0x03,0x24,
73490 -0x00,0x00,0x44,0xA0,
73491 -0x00,0x00,0x43,0xA0,
73492 -0x1A,0x5E,0xC4,0x96,
73493 -0x25,0xB0,0x06,0x3C,
73494 -0x66,0x03,0xC5,0x34,
73495 -0x01,0x00,0x84,0x24,
73496 -0x1A,0x5E,0xC4,0xA6,
73497 -0x1A,0x5E,0xC2,0x96,
73498 -0xFF,0x00,0x03,0x24,
73499 -0x00,0x00,0xA2,0xA4,
73500 -0x2F,0x00,0x23,0x12,
73501 -0x00,0x00,0x00,0x00,
73502 -0xEC,0x36,0x62,0x8E,
73503 -0x58,0x37,0x72,0x8E,
73504 -0x06,0x00,0x04,0x24,
73505 -0x00,0x00,0xA2,0xAE,
73506 -0xF0,0x36,0x62,0xAE,
73507 -0x00,0x00,0xB2,0xAE,
73508 -0xB0,0x01,0x00,0x0C,
73509 -0x00,0x00,0x00,0x00,
73510 -0x58,0x37,0x64,0x8E,
73511 -0x5C,0x37,0x63,0x8E,
73512 -0x02,0x80,0x02,0x3C,
73513 -0x18,0xEA,0x42,0x24,
73514 -0x00,0x00,0x54,0x8C,
73515 -0x80,0x00,0x84,0x24,
73516 -0xFF,0x00,0x62,0x24,
73517 -0x2B,0x10,0x44,0x00,
73518 -0x0A,0x18,0x82,0x00,
73519 -0x58,0x37,0x63,0xAE,
73520 -0x58,0x37,0x82,0x8E,
73521 -0x00,0x00,0x00,0x00,
73522 -0x00,0x00,0xA2,0xAE,
73523 -0x02,0x80,0x03,0x3C,
73524 -0xFF,0xFF,0x42,0x32,
73525 -0x25,0x80,0x43,0x00,
73526 -0x00,0x00,0xB0,0xAE,
73527 -0x0C,0x00,0x02,0x92,
73528 -0x04,0x00,0x05,0x24,
73529 -0x00,0x00,0xA2,0xAE,
73530 -0x02,0x00,0x04,0x92,
73531 -0x00,0x00,0x00,0x00,
73532 -0x21,0x20,0x92,0x00,
73533 -0xFF,0xFF,0x84,0x30,
73534 -0xFB,0x60,0x00,0x0C,
73535 -0x25,0x20,0x83,0x00,
73536 -0x0C,0x00,0x11,0x92,
73537 -0x20,0x10,0x02,0x3C,
73538 -0xFF,0x00,0x03,0x24,
73539 -0x00,0x22,0x11,0x00,
73540 -0xC2,0xFF,0x23,0x12,
73541 -0x21,0x20,0x82,0x00,
73542 -0xB8,0xFF,0xE0,0x16,
73543 -0xEC,0x36,0x84,0xAE,
73544 -0x02,0x80,0x02,0x3C,
73545 -0x30,0x1F,0x42,0x24,
73546 -0x62,0x06,0x00,0x08,
73547 -0xA0,0x36,0x51,0xA0,
73548 -0x20,0x00,0xE0,0x12,
73549 -0x46,0x00,0xE4,0x34,
73550 -0xA4,0x36,0x83,0x92,
73551 -0x47,0x00,0xE4,0x34,
73552 -0xB0,0x03,0xC5,0x34,
73553 -0x00,0x00,0x83,0xA0,
73554 -0x00,0x00,0xA3,0xAC,
73555 -0x00,0x60,0x01,0x40,
73556 -0x01,0x00,0x21,0x34,
73557 -0x00,0x60,0x81,0x40,
73558 -0x00,0x60,0x01,0x40,
73559 -0x01,0x00,0x21,0x34,
73560 -0x01,0x00,0x21,0x38,
73561 -0x00,0x60,0x81,0x40,
73562 -0x30,0x1F,0xC5,0x27,
73563 -0xD0,0x1B,0xA2,0x8C,
73564 -0x3C,0x00,0xBF,0x8F,
73565 -0x38,0x00,0xBE,0x8F,
73566 -0x34,0x00,0xB7,0x8F,
73567 -0x30,0x00,0xB6,0x8F,
73568 -0x2C,0x00,0xB5,0x8F,
73569 -0x28,0x00,0xB4,0x8F,
73570 -0x24,0x00,0xB3,0x8F,
73571 -0x20,0x00,0xB2,0x8F,
73572 -0x1C,0x00,0xB1,0x8F,
73573 -0x18,0x00,0xB0,0x8F,
73574 -0x60,0x00,0x03,0x3C,
73575 -0x25,0x10,0x43,0x00,
73576 -0x41,0xB0,0x04,0x3C,
73577 -0x40,0x00,0xBD,0x27,
73578 -0x00,0x00,0x82,0xAC,
73579 -0x08,0x00,0xE0,0x03,
73580 -0xD0,0x1B,0xA2,0xAC,
73581 -0xA0,0x36,0x83,0x92,
73582 -0xB0,0x03,0xC5,0x34,
73583 -0x00,0x00,0x83,0xA0,
73584 -0x00,0x00,0xA3,0xAC,
73585 -0x00,0x60,0x01,0x40,
73586 -0x01,0x00,0x21,0x34,
73587 -0x00,0x60,0x81,0x40,
73588 -0x00,0x60,0x01,0x40,
73589 -0x01,0x00,0x21,0x34,
73590 -0x01,0x00,0x21,0x38,
73591 -0x00,0x60,0x81,0x40,
73592 -0x30,0x1F,0xC5,0x27,
73593 -0xD0,0x1B,0xA2,0x8C,
73594 -0x3C,0x00,0xBF,0x8F,
73595 -0x38,0x00,0xBE,0x8F,
73596 -0x34,0x00,0xB7,0x8F,
73597 -0x30,0x00,0xB6,0x8F,
73598 -0x2C,0x00,0xB5,0x8F,
73599 -0x28,0x00,0xB4,0x8F,
73600 -0x24,0x00,0xB3,0x8F,
73601 -0x20,0x00,0xB2,0x8F,
73602 -0x1C,0x00,0xB1,0x8F,
73603 -0x18,0x00,0xB0,0x8F,
73604 -0x60,0x00,0x03,0x3C,
73605 -0x25,0x10,0x43,0x00,
73606 -0x41,0xB0,0x04,0x3C,
73607 -0x40,0x00,0xBD,0x27,
73608 -0x00,0x00,0x82,0xAC,
73609 -0x08,0x00,0xE0,0x03,
73610 -0xD0,0x1B,0xA2,0xAC,
73611 -0x00,0x80,0x03,0x3C,
73612 -0x25,0xB0,0x02,0x3C,
73613 -0xB4,0x1B,0x63,0x24,
73614 -0x18,0x03,0x42,0x34,
73615 -0x00,0x00,0x43,0xAC,
73616 -0x00,0x60,0x01,0x40,
73617 -0x01,0x00,0x21,0x34,
73618 -0x00,0x60,0x81,0x40,
73619 -0x00,0x60,0x01,0x40,
73620 -0x01,0x00,0x21,0x34,
73621 -0x01,0x00,0x21,0x38,
73622 -0x00,0x60,0x81,0x40,
73623 -0x02,0x80,0x05,0x3C,
73624 -0x30,0x1F,0xA5,0x24,
73625 -0xD8,0x1B,0xA2,0x8C,
73626 -0xD0,0x1B,0xA4,0x8C,
73627 -0x00,0x08,0x03,0x3C,
73628 -0x24,0x10,0x43,0x00,
73629 -0x25,0x20,0x82,0x00,
73630 -0x41,0xB0,0x03,0x3C,
73631 -0x00,0x00,0x64,0xAC,
73632 -0x08,0x00,0xE0,0x03,
73633 -0xD0,0x1B,0xA4,0xAC,
73634 -0x25,0xB0,0x04,0x3C,
73635 -0x00,0x80,0x02,0x3C,
73636 -0xC8,0xFF,0xBD,0x27,
73637 -0x18,0x03,0x83,0x34,
73638 -0x10,0x1C,0x42,0x24,
73639 -0x30,0x00,0xBF,0xAF,
73640 -0x2C,0x00,0xB5,0xAF,
73641 -0x28,0x00,0xB4,0xAF,
73642 -0x24,0x00,0xB3,0xAF,
73643 -0x20,0x00,0xB2,0xAF,
73644 -0x1C,0x00,0xB1,0xAF,
73645 -0x18,0x00,0xB0,0xAF,
73646 -0x00,0x00,0x62,0xAC,
73647 -0x00,0x60,0x01,0x40,
73648 -0x01,0x00,0x21,0x34,
73649 -0x00,0x60,0x81,0x40,
73650 -0x02,0x80,0x14,0x3C,
73651 -0x30,0x1F,0x93,0x26,
73652 -0xFC,0x00,0x82,0x34,
73653 -0x00,0x00,0x45,0x8C,
73654 -0xAC,0x1B,0x66,0x96,
73655 -0xD8,0x37,0x63,0x96,
73656 -0xD0,0x37,0x67,0x8E,
73657 -0x23,0x28,0xA6,0x00,
73658 -0x21,0x10,0xA3,0x00,
73659 -0x23,0x88,0x47,0x00,
73660 -0xB0,0x03,0x84,0x34,
73661 -0x23,0x30,0x23,0x02,
73662 -0x2B,0x10,0x71,0x00,
73663 -0x00,0x00,0x83,0xAC,
73664 -0x00,0x00,0x91,0xAC,
73665 -0x0B,0x88,0xC2,0x00,
73666 -0x21,0x20,0x20,0x02,
73667 -0x25,0x24,0x00,0x0C,
73668 -0xD4,0x37,0x65,0xAE,
73669 -0x4B,0x00,0x40,0x10,
73670 -0x21,0x90,0x40,0x00,
73671 -0x0C,0x00,0x51,0xAC,
73672 -0xD0,0x37,0x68,0x8E,
73673 -0xD4,0x37,0x62,0x8E,
73674 -0x08,0x00,0x45,0x8E,
73675 -0x20,0xBD,0x03,0x3C,
73676 -0x88,0x03,0x63,0x34,
73677 -0x2B,0x10,0x48,0x00,
73678 -0x40,0x10,0x15,0x3C,
73679 -0x21,0x20,0x00,0x00,
73680 -0xFF,0xFF,0x27,0x32,
73681 -0x00,0x00,0x65,0xAC,
73682 -0x28,0x00,0x40,0x14,
73683 -0x00,0x00,0x00,0x00,
73684 -0xAC,0x1B,0x66,0x96,
73685 -0x08,0x00,0x42,0x96,
73686 -0x40,0x10,0x05,0x3C,
73687 -0x21,0x20,0x00,0x00,
73688 -0x21,0x30,0x06,0x01,
73689 -0x25,0x28,0x45,0x00,
73690 -0x73,0x01,0x00,0x0C,
73691 -0x10,0x00,0xA0,0xAF,
73692 -0x02,0x80,0x02,0x3C,
73693 -0x64,0x57,0x42,0x24,
73694 -0x30,0x1F,0x84,0x26,
73695 -0xD4,0x37,0x83,0x8C,
73696 -0x04,0x00,0x45,0x8C,
73697 -0xD0,0x37,0x83,0xAC,
73698 -0x00,0x00,0x42,0xAE,
73699 -0x04,0x00,0x52,0xAC,
73700 -0x00,0x00,0xB2,0xAC,
73701 -0x04,0x00,0x45,0xAE,
73702 -0x00,0x60,0x01,0x40,
73703 -0x01,0x00,0x21,0x34,
73704 -0x01,0x00,0x21,0x38,
73705 -0x00,0x60,0x81,0x40,
73706 -0x30,0x1F,0x85,0x26,
73707 -0xD8,0x1B,0xA2,0x8C,
73708 -0xD0,0x1B,0xA3,0x8C,
73709 -0x30,0x00,0xBF,0x8F,
73710 -0x2C,0x00,0xB5,0x8F,
73711 -0x28,0x00,0xB4,0x8F,
73712 -0x24,0x00,0xB3,0x8F,
73713 -0x20,0x00,0xB2,0x8F,
73714 -0x1C,0x00,0xB1,0x8F,
73715 -0x18,0x00,0xB0,0x8F,
73716 -0x04,0x00,0x42,0x30,
73717 -0x25,0x18,0x62,0x00,
73718 -0x41,0xB0,0x04,0x3C,
73719 -0x38,0x00,0xBD,0x27,
73720 -0x00,0x00,0x83,0xAC,
73721 -0x08,0x00,0xE0,0x03,
73722 -0xD0,0x1B,0xA3,0xAC,
73723 -0xD8,0x37,0x70,0x8E,
73724 -0x08,0x00,0x45,0x96,
73725 -0xAC,0x1B,0x66,0x96,
73726 -0x23,0x80,0x08,0x02,
73727 -0xFF,0xFF,0x10,0x32,
73728 -0x21,0x30,0x06,0x01,
73729 -0x25,0x28,0xB5,0x00,
73730 -0x21,0x38,0x00,0x02,
73731 -0x73,0x01,0x00,0x0C,
73732 -0x10,0x00,0xA0,0xAF,
73733 -0xB0,0x01,0x00,0x0C,
73734 -0x21,0x20,0x00,0x00,
73735 -0x08,0x00,0x45,0x96,
73736 -0xAC,0x1B,0x62,0x96,
73737 -0x23,0x38,0x30,0x02,
73738 -0x25,0x28,0xB5,0x00,
73739 -0x21,0x10,0x06,0x3C,
73740 -0x21,0x28,0xB0,0x00,
73741 -0x21,0x30,0x46,0x00,
73742 -0xFF,0xFF,0xE7,0x30,
73743 -0x3C,0x07,0x00,0x08,
73744 -0x21,0x20,0x00,0x00,
73745 -0x00,0x60,0x02,0x40,
73746 -0x01,0x00,0x41,0x34,
73747 -0x01,0x00,0x21,0x38,
73748 -0x00,0x60,0x81,0x40,
73749 -0x02,0x80,0x04,0x3C,
73750 -0xD0,0x5E,0x83,0x8C,
73751 -0x00,0x00,0x00,0x00,
73752 -0x00,0x10,0x63,0x34,
73753 -0xD0,0x5E,0x83,0xAC,
73754 -0x00,0x60,0x82,0x40,
73755 -0x48,0x07,0x00,0x08,
73756 -0x00,0x00,0x00,0x00,
73757 -0x25,0xB0,0x04,0x3C,
73758 -0x00,0x80,0x02,0x3C,
73759 -0xC0,0xFF,0xBD,0x27,
73760 -0x18,0x03,0x83,0x34,
73761 -0xFC,0x1D,0x42,0x24,
73762 -0x3C,0x00,0xBF,0xAF,
73763 -0x38,0x00,0xBE,0xAF,
73764 -0x34,0x00,0xB7,0xAF,
73765 -0x30,0x00,0xB6,0xAF,
73766 -0x2C,0x00,0xB5,0xAF,
73767 -0x28,0x00,0xB4,0xAF,
73768 -0x24,0x00,0xB3,0xAF,
73769 -0x20,0x00,0xB2,0xAF,
73770 -0x1C,0x00,0xB1,0xAF,
73771 -0x18,0x00,0xB0,0xAF,
73772 -0x00,0x00,0x62,0xAC,
73773 -0x00,0x60,0x01,0x40,
73774 -0x01,0x00,0x21,0x34,
73775 -0x00,0x60,0x81,0x40,
73776 -0x02,0x80,0x1E,0x3C,
73777 -0x02,0x80,0x02,0x3C,
73778 -0x2A,0xB0,0x03,0x3C,
73779 -0xB0,0x03,0x96,0x34,
73780 -0x80,0xD5,0x57,0x24,
73781 -0x2C,0x00,0x73,0x34,
73782 -0x30,0x1F,0xD1,0x27,
73783 -0x02,0x80,0x15,0x3C,
73784 -0xD1,0x07,0x00,0x08,
73785 -0x02,0x80,0x14,0x3C,
73786 -0x54,0xF3,0x90,0xAE,
73787 -0x02,0x80,0x04,0x3C,
73788 -0x03,0x00,0xC3,0x90,
73789 -0x7C,0xD5,0x82,0x90,
73790 -0x7F,0x00,0x63,0x30,
73791 -0xFF,0x00,0x42,0x30,
73792 -0x6B,0x00,0x62,0x10,
73793 -0x08,0x00,0x10,0x26,
73794 -0x02,0x00,0xC2,0x90,
73795 -0x00,0x00,0x00,0x00,
73796 -0xFF,0x00,0x42,0x30,
73797 -0x37,0x00,0x42,0x28,
73798 -0x5E,0x00,0x40,0x10,
73799 -0x00,0x00,0x00,0x00,
73800 -0x02,0x00,0xC5,0x90,
73801 -0x03,0x00,0xC3,0x90,
73802 -0xFF,0x00,0xA5,0x30,
73803 -0x7F,0x00,0x63,0x30,
73804 -0x7C,0xD5,0x83,0xA0,
73805 -0x02,0x00,0xC2,0x90,
73806 -0x0E,0x00,0xA5,0x38,
73807 -0x0A,0x80,0xE5,0x00,
73808 -0xFF,0x00,0x42,0x30,
73809 -0xC0,0x10,0x02,0x00,
73810 -0x21,0x10,0x57,0x00,
73811 -0x04,0x00,0x43,0x8C,
73812 -0x02,0x80,0x04,0x3C,
73813 -0x8C,0xD7,0x84,0x24,
73814 -0x4C,0xF3,0xA3,0xAE,
73815 -0x02,0x00,0xC5,0x90,
73816 -0x2F,0x55,0x00,0x0C,
73817 -0xFF,0x00,0xA5,0x30,
73818 -0x4C,0xF3,0xA2,0x8E,
73819 -0x00,0x00,0x00,0x00,
73820 -0x09,0xF8,0x40,0x00,
73821 -0x21,0x20,0x00,0x02,
73822 -0x01,0x00,0x02,0x24,
73823 -0x02,0x00,0x03,0x24,
73824 -0x01,0x00,0x62,0xA2,
73825 -0x01,0x00,0x63,0xA2,
73826 -0x2B,0x00,0x40,0x12,
73827 -0x00,0x00,0x00,0x00,
73828 -0xB8,0x36,0x22,0x92,
73829 -0x20,0x10,0x03,0x3C,
73830 -0x88,0x37,0x25,0x8E,
73831 -0x00,0x12,0x02,0x00,
73832 -0x21,0x10,0x43,0x00,
73833 -0x21,0x30,0x40,0x00,
73834 -0x0A,0x00,0x04,0x24,
73835 -0x00,0x01,0x07,0x24,
73836 -0x1C,0x37,0x22,0xAE,
73837 -0x73,0x01,0x00,0x0C,
73838 -0x10,0x00,0xA0,0xAF,
73839 -0x88,0x37,0x30,0x8E,
73840 -0xB0,0x01,0x00,0x0C,
73841 -0x0A,0x00,0x04,0x24,
73842 -0xFF,0xFF,0x10,0x32,
73843 -0x02,0x80,0x02,0x3C,
73844 -0x25,0x80,0x02,0x02,
73845 -0x0C,0x00,0x04,0x92,
73846 -0xFF,0x00,0x02,0x24,
73847 -0x21,0x38,0x00,0x02,
73848 -0xFF,0x00,0x83,0x30,
73849 -0x20,0x00,0x10,0x26,
73850 -0x04,0x00,0x62,0x10,
73851 -0x21,0x90,0x00,0x00,
73852 -0xB8,0x36,0x24,0xA2,
73853 -0x01,0x00,0x12,0x24,
73854 -0x00,0x00,0xC3,0xAE,
73855 -0x04,0x00,0xE2,0x8C,
73856 -0x13,0x00,0x03,0x24,
73857 -0x02,0x12,0x02,0x00,
73858 -0x1F,0x00,0x45,0x30,
73859 -0xB6,0xFF,0xA3,0x10,
73860 -0x21,0x30,0x00,0x02,
73861 -0x02,0x80,0x04,0x3C,
73862 -0x2F,0x55,0x00,0x0C,
73863 -0x38,0xD7,0x84,0x24,
73864 -0x01,0x00,0x02,0x24,
73865 -0x02,0x00,0x03,0x24,
73866 -0x01,0x00,0x62,0xA2,
73867 -0x01,0x00,0x63,0xA2,
73868 -0xD7,0xFF,0x40,0x16,
73869 -0x00,0x00,0x00,0x00,
73870 -0x00,0x60,0x01,0x40,
73871 -0x01,0x00,0x21,0x34,
73872 -0x01,0x00,0x21,0x38,
73873 -0x00,0x60,0x81,0x40,
73874 -0x30,0x1F,0xC5,0x27,
73875 -0xD0,0x1B,0xA2,0x8C,
73876 -0x3C,0x00,0xBF,0x8F,
73877 -0x38,0x00,0xBE,0x8F,
73878 -0x34,0x00,0xB7,0x8F,
73879 -0x30,0x00,0xB6,0x8F,
73880 -0x2C,0x00,0xB5,0x8F,
73881 -0x28,0x00,0xB4,0x8F,
73882 -0x24,0x00,0xB3,0x8F,
73883 -0x20,0x00,0xB2,0x8F,
73884 -0x1C,0x00,0xB1,0x8F,
73885 -0x18,0x00,0xB0,0x8F,
73886 -0x00,0x04,0x03,0x3C,
73887 -0x25,0x10,0x43,0x00,
73888 -0x41,0xB0,0x04,0x3C,
73889 -0x40,0x00,0xBD,0x27,
73890 -0x00,0x00,0x82,0xAC,
73891 -0x08,0x00,0xE0,0x03,
73892 -0xD0,0x1B,0xA2,0xAC,
73893 -0x02,0x00,0xC5,0x90,
73894 -0x02,0x80,0x04,0x3C,
73895 -0x78,0xD7,0x84,0x24,
73896 -0x2F,0x55,0x00,0x0C,
73897 -0xFF,0x00,0xA5,0x30,
73898 -0xEB,0x07,0x00,0x08,
73899 -0x01,0x00,0x02,0x24,
73900 -0x02,0x00,0xC5,0x90,
73901 -0x02,0x00,0xC6,0x90,
73902 -0x7C,0xD5,0x87,0x90,
73903 -0x02,0x80,0x04,0x3C,
73904 -0x48,0xD7,0x84,0x24,
73905 -0xFF,0x00,0xA5,0x30,
73906 -0xFF,0x00,0xC6,0x30,
73907 -0x2F,0x55,0x00,0x0C,
73908 -0xFF,0x00,0xE7,0x30,
73909 -0xC1,0x07,0x00,0x08,
73910 -0x01,0x00,0x02,0x24,
73911 -0xC8,0xFF,0xBD,0x27,
73912 -0xFF,0xFF,0xA8,0x30,
73913 -0x02,0x80,0x02,0x3C,
73914 -0x25,0x40,0x02,0x01,
73915 -0x30,0x00,0xB6,0xAF,
73916 -0x20,0x00,0xB2,0xAF,
73917 -0x34,0x00,0xBF,0xAF,
73918 -0x2C,0x00,0xB5,0xAF,
73919 -0x28,0x00,0xB4,0xAF,
73920 -0x24,0x00,0xB3,0xAF,
73921 -0x1C,0x00,0xB1,0xAF,
73922 -0x18,0x00,0xB0,0xAF,
73923 -0x00,0x00,0x03,0x8D,
73924 -0xFF,0xFF,0xD2,0x30,
73925 -0x21,0xB0,0xA0,0x00,
73926 -0x00,0xC0,0x02,0x24,
73927 -0x08,0x00,0x45,0x26,
73928 -0x04,0x00,0x06,0x8D,
73929 -0x24,0x18,0x62,0x00,
73930 -0xFF,0x3F,0xA5,0x30,
73931 -0xF0,0xFF,0x02,0x3C,
73932 -0x25,0x18,0x65,0x00,
73933 -0xFF,0xFF,0x42,0x34,
73934 -0x24,0x18,0x62,0x00,
73935 -0x00,0x80,0x05,0x3C,
73936 -0x25,0x18,0x65,0x00,
73937 -0xFF,0x01,0xC6,0x34,
73938 -0x00,0x00,0x03,0xAD,
73939 -0x04,0x00,0x06,0xAD,
73940 -0x21,0x48,0x80,0x00,
73941 -0xFF,0xFF,0xE7,0x30,
73942 -0x18,0x00,0x12,0xA5,
73943 -0x1A,0x00,0x07,0xA1,
73944 -0x18,0x00,0x03,0x8D,
73945 -0xFF,0x7F,0x02,0x3C,
73946 -0xFF,0xFF,0x42,0x34,
73947 -0x24,0x18,0x62,0x00,
73948 -0x02,0x80,0x15,0x3C,
73949 -0x18,0x00,0x03,0xAD,
73950 -0x30,0x1F,0xA5,0x26,
73951 -0x7A,0x36,0xA3,0x90,
73952 -0x00,0x00,0x00,0x00,
73953 -0x01,0x00,0x62,0x24,
73954 -0x7A,0x36,0xA2,0xA0,
73955 -0x18,0x00,0x04,0x8D,
73956 -0xFF,0x80,0x02,0x3C,
73957 -0x20,0x00,0x45,0x26,
73958 -0xFF,0xFF,0x42,0x34,
73959 -0x7F,0x00,0x63,0x30,
73960 -0xFF,0xFF,0xB2,0x30,
73961 -0x24,0x20,0x82,0x00,
73962 -0x00,0x1E,0x03,0x00,
73963 -0x25,0xB0,0x02,0x3C,
73964 -0xC0,0x00,0x42,0x34,
73965 -0x25,0x20,0x83,0x00,
73966 -0x07,0x00,0x45,0x32,
73967 -0x18,0x00,0x04,0xAD,
73968 -0x00,0x00,0x52,0xA4,
73969 -0x03,0x00,0xA0,0x10,
73970 -0xFF,0xFF,0x42,0x32,
73971 -0x08,0x00,0x42,0x26,
73972 -0xFF,0xFF,0x42,0x30,
73973 -0x30,0x1F,0xB4,0x26,
73974 -0xF8,0x37,0x86,0x8E,
73975 -0xFC,0x37,0x90,0x8E,
73976 -0xF8,0xFF,0x52,0x30,
73977 -0x21,0x10,0xD2,0x00,
73978 -0x2B,0x10,0x02,0x02,
73979 -0x31,0x00,0x40,0x10,
73980 -0xFF,0x00,0x33,0x31,
73981 -0x23,0x80,0x06,0x02,
73982 -0x21,0x28,0xC0,0x02,
73983 -0xFF,0xFF,0x07,0x32,
73984 -0x01,0x00,0x11,0x24,
73985 -0x21,0x20,0x60,0x02,
73986 -0x73,0x01,0x00,0x0C,
73987 -0x10,0x00,0xB1,0xAF,
73988 -0x23,0x18,0x50,0x02,
73989 -0xFF,0xFF,0x72,0x30,
73990 -0x22,0x10,0x02,0x3C,
73991 -0x21,0x10,0x42,0x02,
73992 -0x21,0x20,0x60,0x02,
73993 -0xB0,0x01,0x00,0x0C,
73994 -0xF8,0x37,0x82,0xAE,
73995 -0x21,0x28,0xD0,0x02,
73996 -0x21,0x38,0x40,0x02,
73997 -0x21,0x20,0x60,0x02,
73998 -0x10,0x00,0xB1,0xAF,
73999 -0x22,0x10,0x06,0x3C,
74000 -0x73,0x01,0x00,0x0C,
74001 -0x30,0x1F,0xB1,0x26,
74002 -0xF8,0x37,0x23,0x8E,
74003 -0x25,0xB0,0x10,0x3C,
74004 -0xB0,0x03,0x02,0x36,
74005 -0x21,0x20,0x60,0x02,
74006 -0x00,0x00,0x43,0xAC,
74007 -0xB0,0x01,0x00,0x0C,
74008 -0x00,0x00,0x00,0x00,
74009 -0xF8,0x37,0x25,0x8E,
74010 -0xEC,0x00,0x02,0x36,
74011 -0xBD,0x00,0x04,0x36,
74012 -0x00,0x00,0x45,0xAC,
74013 -0x00,0x00,0x83,0x90,
74014 -0xC2,0x00,0x10,0x36,
74015 -0x34,0x00,0xBF,0x8F,
74016 -0x10,0x00,0x63,0x34,
74017 -0x00,0x00,0x83,0xA0,
74018 -0x30,0x00,0xB6,0x8F,
74019 -0x00,0x00,0x05,0xA6,
74020 -0x2C,0x00,0xB5,0x8F,
74021 -0x28,0x00,0xB4,0x8F,
74022 -0x24,0x00,0xB3,0x8F,
74023 -0x20,0x00,0xB2,0x8F,
74024 -0x1C,0x00,0xB1,0x8F,
74025 -0x18,0x00,0xB0,0x8F,
74026 -0x01,0x00,0x02,0x24,
74027 -0x08,0x00,0xE0,0x03,
74028 -0x38,0x00,0xBD,0x27,
74029 -0x21,0x28,0xC0,0x02,
74030 -0x21,0x20,0x60,0x02,
74031 -0x21,0x38,0x40,0x02,
74032 -0x01,0x00,0x02,0x24,
74033 -0x73,0x01,0x00,0x0C,
74034 -0x10,0x00,0xA2,0xAF,
74035 -0xF8,0x37,0x83,0x8E,
74036 -0x30,0x1F,0xB1,0x26,
74037 -0x25,0xB0,0x10,0x3C,
74038 -0x21,0x18,0x72,0x00,
74039 -0xF8,0x37,0x83,0xAE,
74040 -0xF8,0x37,0x23,0x8E,
74041 -0xB0,0x03,0x02,0x36,
74042 -0x21,0x20,0x60,0x02,
74043 -0x00,0x00,0x43,0xAC,
74044 -0xB0,0x01,0x00,0x0C,
74045 -0x00,0x00,0x00,0x00,
74046 -0xF8,0x37,0x25,0x8E,
74047 -0xEC,0x00,0x02,0x36,
74048 -0xBD,0x00,0x04,0x36,
74049 -0x00,0x00,0x45,0xAC,
74050 -0x00,0x00,0x83,0x90,
74051 -0xC2,0x00,0x10,0x36,
74052 -0x34,0x00,0xBF,0x8F,
74053 -0x10,0x00,0x63,0x34,
74054 -0x00,0x00,0x83,0xA0,
74055 -0x30,0x00,0xB6,0x8F,
74056 -0x00,0x00,0x05,0xA6,
74057 -0x2C,0x00,0xB5,0x8F,
74058 -0x28,0x00,0xB4,0x8F,
74059 -0x24,0x00,0xB3,0x8F,
74060 -0x20,0x00,0xB2,0x8F,
74061 -0x1C,0x00,0xB1,0x8F,
74062 -0x18,0x00,0xB0,0x8F,
74063 -0x01,0x00,0x02,0x24,
74064 -0x08,0x00,0xE0,0x03,
74065 -0x38,0x00,0xBD,0x27,
74066 -0xC8,0xFF,0xBD,0x27,
74067 -0x18,0x00,0xB0,0xAF,
74068 -0x34,0x00,0xBF,0xAF,
74069 -0x30,0x00,0xB6,0xAF,
74070 -0x2C,0x00,0xB5,0xAF,
74071 -0x28,0x00,0xB4,0xAF,
74072 -0x24,0x00,0xB3,0xAF,
74073 -0x20,0x00,0xB2,0xAF,
74074 -0x1C,0x00,0xB1,0xAF,
74075 -0x21,0x80,0x80,0x00,
74076 -0x00,0x60,0x14,0x40,
74077 -0x01,0x00,0x81,0x36,
74078 -0x01,0x00,0x21,0x38,
74079 -0x00,0x60,0x81,0x40,
74080 -0x14,0x00,0x83,0x8C,
74081 -0x02,0x80,0x15,0x3C,
74082 -0x16,0x00,0x02,0x24,
74083 -0x30,0x1F,0xB3,0x26,
74084 -0x21,0x28,0x00,0x00,
74085 -0x1D,0x00,0x62,0x10,
74086 -0x08,0x00,0x06,0x24,
74087 -0x08,0x00,0x82,0x94,
74088 -0x02,0x80,0x04,0x3C,
74089 -0x08,0x52,0x00,0x0C,
74090 -0x25,0x20,0x44,0x00,
74091 -0x08,0x00,0x05,0x8E,
74092 -0x0C,0x00,0x06,0x96,
74093 -0x14,0x00,0x07,0x96,
74094 -0x19,0x08,0x00,0x0C,
74095 -0x09,0x00,0x04,0x24,
74096 -0x04,0x00,0x02,0x8E,
74097 -0x00,0x00,0x03,0x8E,
74098 -0x21,0x20,0x00,0x02,
74099 -0x00,0x00,0x43,0xAC,
74100 -0x04,0x00,0x62,0xAC,
74101 -0x00,0x00,0x10,0xAE,
74102 -0x3D,0x24,0x00,0x0C,
74103 -0x04,0x00,0x10,0xAE,
74104 -0x00,0x60,0x94,0x40,
74105 -0x34,0x00,0xBF,0x8F,
74106 -0x30,0x00,0xB6,0x8F,
74107 -0x2C,0x00,0xB5,0x8F,
74108 -0x28,0x00,0xB4,0x8F,
74109 -0x24,0x00,0xB3,0x8F,
74110 -0x20,0x00,0xB2,0x8F,
74111 -0x1C,0x00,0xB1,0x8F,
74112 -0x18,0x00,0xB0,0x8F,
74113 -0x08,0x00,0xE0,0x03,
74114 -0x38,0x00,0xBD,0x27,
74115 -0xF8,0x37,0x68,0x8E,
74116 -0x0C,0x00,0x11,0x8E,
74117 -0xFC,0x37,0x62,0x8E,
74118 -0x25,0xB0,0x03,0x3C,
74119 -0x21,0x28,0x11,0x01,
74120 -0xC0,0x00,0x63,0x34,
74121 -0x23,0x90,0x48,0x00,
74122 -0x2B,0x10,0x45,0x00,
74123 -0x01,0x00,0x16,0x24,
74124 -0x09,0x00,0x04,0x24,
74125 -0xFF,0xFF,0x27,0x32,
74126 -0x21,0x30,0x00,0x01,
74127 -0x00,0x00,0x71,0xA4,
74128 -0x33,0x00,0x40,0x10,
74129 -0x01,0x00,0x02,0x24,
74130 -0x08,0x00,0x05,0x8E,
74131 -0xFF,0xFF,0x47,0x32,
74132 -0x23,0x88,0x32,0x02,
74133 -0x73,0x01,0x00,0x0C,
74134 -0x10,0x00,0xB6,0xAF,
74135 -0x22,0x10,0x03,0x3C,
74136 -0x21,0x18,0x23,0x02,
74137 -0x09,0x00,0x04,0x24,
74138 -0xB0,0x01,0x00,0x0C,
74139 -0xF8,0x37,0x63,0xAE,
74140 -0x08,0x00,0x05,0x8E,
74141 -0xFF,0xFF,0x27,0x32,
74142 -0x09,0x00,0x04,0x24,
74143 -0x21,0x28,0xB2,0x00,
74144 -0x22,0x10,0x06,0x3C,
74145 -0x73,0x01,0x00,0x0C,
74146 -0x10,0x00,0xB6,0xAF,
74147 -0xB0,0x01,0x00,0x0C,
74148 -0x09,0x00,0x04,0x24,
74149 -0x30,0x1F,0xA2,0x26,
74150 -0xF8,0x37,0x46,0x8C,
74151 -0x25,0xB0,0x03,0x3C,
74152 -0xEC,0x00,0x64,0x34,
74153 -0x00,0x00,0x86,0xAC,
74154 -0xBD,0x00,0x65,0x34,
74155 -0x00,0x00,0xA2,0x90,
74156 -0xC2,0x00,0x63,0x34,
74157 -0x21,0x20,0x00,0x02,
74158 -0x10,0x00,0x42,0x34,
74159 -0x00,0x00,0xA2,0xA0,
74160 -0x00,0x00,0x66,0xA4,
74161 -0x04,0x00,0x02,0x8E,
74162 -0x00,0x00,0x03,0x8E,
74163 -0x00,0x00,0x00,0x00,
74164 -0x00,0x00,0x43,0xAC,
74165 -0x04,0x00,0x62,0xAC,
74166 -0x00,0x00,0x10,0xAE,
74167 -0x3D,0x24,0x00,0x0C,
74168 -0x04,0x00,0x10,0xAE,
74169 -0x00,0x60,0x94,0x40,
74170 -0x34,0x00,0xBF,0x8F,
74171 -0x30,0x00,0xB6,0x8F,
74172 -0x2C,0x00,0xB5,0x8F,
74173 -0x28,0x00,0xB4,0x8F,
74174 -0x24,0x00,0xB3,0x8F,
74175 -0x20,0x00,0xB2,0x8F,
74176 -0x1C,0x00,0xB1,0x8F,
74177 -0x18,0x00,0xB0,0x8F,
74178 -0x08,0x00,0xE0,0x03,
74179 -0x38,0x00,0xBD,0x27,
74180 -0x08,0x00,0x05,0x8E,
74181 -0x21,0x30,0x00,0x01,
74182 -0x09,0x00,0x04,0x24,
74183 -0x73,0x01,0x00,0x0C,
74184 -0x10,0x00,0xA2,0xAF,
74185 -0xF8,0x37,0x63,0x8E,
74186 -0x00,0x00,0x00,0x00,
74187 -0x21,0x18,0x71,0x00,
74188 -0x05,0x09,0x00,0x08,
74189 -0xF8,0x37,0x63,0xAE,
74190 -0xE8,0xFF,0xBD,0x27,
74191 -0x14,0x00,0xBF,0xAF,
74192 -0x10,0x00,0xB0,0xAF,
74193 -0x21,0x28,0x80,0x00,
74194 -0x00,0x60,0x10,0x40,
74195 -0x01,0x00,0x01,0x36,
74196 -0x01,0x00,0x21,0x38,
74197 -0x00,0x60,0x81,0x40,
74198 -0x25,0xB0,0x02,0x3C,
74199 -0xBF,0x00,0x42,0x34,
74200 -0x00,0x00,0x43,0x90,
74201 -0x00,0x00,0x00,0x00,
74202 -0x04,0x00,0x63,0x2C,
74203 -0x05,0x00,0x60,0x10,
74204 -0x02,0x80,0x06,0x3C,
74205 -0x6C,0x57,0xC3,0x8C,
74206 -0x6C,0x57,0xC2,0x24,
74207 -0x0C,0x00,0x62,0x10,
74208 -0x00,0x00,0x00,0x00,
74209 -0x6C,0x57,0xC2,0x24,
74210 -0x04,0x00,0x43,0x8C,
74211 -0x00,0x00,0xA2,0xAC,
74212 -0x04,0x00,0x45,0xAC,
74213 -0x00,0x00,0x65,0xAC,
74214 -0x04,0x00,0xA3,0xAC,
74215 -0x00,0x60,0x90,0x40,
74216 -0x14,0x00,0xBF,0x8F,
74217 -0x10,0x00,0xB0,0x8F,
74218 -0x08,0x00,0xE0,0x03,
74219 -0x18,0x00,0xBD,0x27,
74220 -0xB4,0x08,0x00,0x0C,
74221 -0x00,0x00,0x00,0x00,
74222 -0x00,0x60,0x90,0x40,
74223 -0x14,0x00,0xBF,0x8F,
74224 -0x10,0x00,0xB0,0x8F,
74225 -0x08,0x00,0xE0,0x03,
74226 -0x18,0x00,0xBD,0x27,
74227 -0xE0,0xFF,0xBD,0x27,
74228 -0x10,0x00,0xB0,0xAF,
74229 -0x21,0x80,0x80,0x00,
74230 -0x02,0x80,0x04,0x3C,
74231 -0x98,0xD7,0x84,0x24,
74232 -0x1C,0x00,0xBF,0xAF,
74233 -0x18,0x00,0xB2,0xAF,
74234 -0x2F,0x55,0x00,0x0C,
74235 -0x14,0x00,0xB1,0xAF,
74236 -0x00,0x00,0x04,0x96,
74237 -0x00,0x00,0x00,0x00,
74238 -0x20,0x00,0x83,0x24,
74239 -0x07,0x00,0x62,0x30,
74240 -0x49,0x00,0x40,0x10,
74241 -0xC2,0x10,0x03,0x00,
74242 -0x28,0x00,0x82,0x24,
74243 -0xC2,0x10,0x02,0x00,
74244 -0x25,0x24,0x00,0x0C,
74245 -0xC0,0x20,0x02,0x00,
74246 -0x47,0x00,0x40,0x10,
74247 -0x21,0x88,0x40,0x00,
74248 -0x02,0x80,0x12,0x3C,
74249 -0x30,0x1F,0x50,0x26,
74250 -0x1C,0x37,0x05,0x8E,
74251 -0x0A,0x00,0x04,0x24,
74252 -0x28,0x00,0x06,0x24,
74253 -0xC7,0x01,0x00,0x0C,
74254 -0x21,0x38,0x40,0x00,
74255 -0xB0,0x1B,0x03,0x96,
74256 -0x00,0x00,0x00,0x00,
74257 -0x00,0x01,0x62,0x30,
74258 -0x47,0x00,0x40,0x14,
74259 -0x01,0x00,0x62,0x30,
74260 -0x02,0x80,0x02,0x3C,
74261 -0xEA,0x5D,0x48,0x90,
74262 -0x25,0xB0,0x04,0x3C,
74263 -0x2F,0x00,0x02,0x3C,
74264 -0xD0,0x01,0x85,0x34,
74265 -0x17,0x32,0x42,0x34,
74266 -0x00,0x00,0xA2,0xAC,
74267 -0x5E,0x00,0x03,0x3C,
74268 -0x10,0x00,0x02,0x3C,
74269 -0xDC,0x01,0x87,0x34,
74270 -0xD4,0x01,0x86,0x34,
74271 -0x17,0x43,0x63,0x34,
74272 -0x20,0x53,0x42,0x34,
74273 -0xD8,0x01,0x84,0x34,
74274 -0x00,0x00,0xC3,0xAC,
74275 -0x30,0x1F,0x49,0x26,
74276 -0x00,0x00,0x82,0xAC,
74277 -0x44,0xA4,0x03,0x34,
74278 -0x01,0x00,0x02,0x24,
74279 -0x00,0x00,0xE3,0xAC,
74280 -0xEC,0x38,0x20,0xAD,
74281 -0x08,0x39,0x20,0xAD,
74282 -0x50,0x3E,0x20,0xAD,
74283 -0x10,0x3E,0x20,0xAD,
74284 -0x51,0x00,0x02,0x11,
74285 -0x1A,0x3E,0x20,0xA1,
74286 -0x10,0x23,0x22,0x8D,
74287 -0xFF,0xF7,0x03,0x24,
74288 -0xFF,0xEF,0x04,0x24,
74289 -0x24,0x10,0x43,0x00,
74290 -0x24,0x10,0x44,0x00,
74291 -0x10,0x23,0x22,0xAD,
74292 -0xB0,0x01,0x00,0x0C,
74293 -0x0A,0x00,0x04,0x24,
74294 -0x08,0x00,0x22,0x96,
74295 -0x02,0x80,0x05,0x3C,
74296 -0x02,0x80,0x04,0x3C,
74297 -0x25,0x28,0x45,0x00,
74298 -0xDC,0x01,0x06,0x24,
74299 -0x10,0x52,0x00,0x0C,
74300 -0x84,0x58,0x84,0x24,
74301 -0x3D,0x24,0x00,0x0C,
74302 -0x21,0x20,0x20,0x02,
74303 -0x30,0x1F,0x43,0x26,
74304 -0x9C,0x39,0x62,0x8C,
74305 -0xD1,0x11,0x00,0x0C,
74306 -0x30,0x3B,0x62,0xA0,
74307 -0x1C,0x00,0xBF,0x8F,
74308 -0x18,0x00,0xB2,0x8F,
74309 -0x14,0x00,0xB1,0x8F,
74310 -0x10,0x00,0xB0,0x8F,
74311 -0x21,0x10,0x00,0x00,
74312 -0x08,0x00,0xE0,0x03,
74313 -0x20,0x00,0xBD,0x27,
74314 -0x25,0x24,0x00,0x0C,
74315 -0xC0,0x20,0x02,0x00,
74316 -0xBB,0xFF,0x40,0x14,
74317 -0x21,0x88,0x40,0x00,
74318 -0x02,0x80,0x04,0x3C,
74319 -0x02,0x80,0x05,0x3C,
74320 -0xA8,0xD7,0x84,0x24,
74321 -0x2F,0x55,0x00,0x0C,
74322 -0x1C,0xEA,0xA5,0x24,
74323 -0x1C,0x00,0xBF,0x8F,
74324 -0x18,0x00,0xB2,0x8F,
74325 -0x14,0x00,0xB1,0x8F,
74326 -0x10,0x00,0xB0,0x8F,
74327 -0x21,0x10,0x00,0x00,
74328 -0x08,0x00,0xE0,0x03,
74329 -0x20,0x00,0xBD,0x27,
74330 -0x32,0x00,0x40,0x14,
74331 -0x02,0x80,0x04,0x3C,
74332 -0xA3,0x51,0x00,0x0C,
74333 -0x00,0x00,0x00,0x00,
74334 -0xB0,0x1B,0x02,0x96,
74335 -0x25,0xB0,0x03,0x3C,
74336 -0x4C,0x00,0x63,0x34,
74337 -0xFF,0xFE,0x42,0x30,
74338 -0xB0,0x1B,0x02,0xA6,
74339 -0x00,0x00,0x60,0xA0,
74340 -0x02,0x80,0x02,0x3C,
74341 -0xEA,0x5D,0x48,0x90,
74342 -0x25,0xB0,0x04,0x3C,
74343 -0x2F,0x00,0x02,0x3C,
74344 -0xD0,0x01,0x85,0x34,
74345 -0x17,0x32,0x42,0x34,
74346 -0x00,0x00,0xA2,0xAC,
74347 -0x5E,0x00,0x03,0x3C,
74348 -0x10,0x00,0x02,0x3C,
74349 -0xDC,0x01,0x87,0x34,
74350 -0xD4,0x01,0x86,0x34,
74351 -0x17,0x43,0x63,0x34,
74352 -0x20,0x53,0x42,0x34,
74353 -0xD8,0x01,0x84,0x34,
74354 -0x00,0x00,0xC3,0xAC,
74355 -0x30,0x1F,0x49,0x26,
74356 -0x00,0x00,0x82,0xAC,
74357 -0x44,0xA4,0x03,0x34,
74358 -0x01,0x00,0x02,0x24,
74359 -0x00,0x00,0xE3,0xAC,
74360 -0xEC,0x38,0x20,0xAD,
74361 -0x08,0x39,0x20,0xAD,
74362 -0x50,0x3E,0x20,0xAD,
74363 -0x10,0x3E,0x20,0xAD,
74364 -0xB1,0xFF,0x02,0x15,
74365 -0x1A,0x3E,0x20,0xA1,
74366 -0x02,0x80,0x02,0x3C,
74367 -0xEB,0x5D,0x44,0x90,
74368 -0x02,0x00,0x03,0x24,
74369 -0x06,0x00,0x83,0x10,
74370 -0xFF,0xF7,0x03,0x24,
74371 -0x10,0x23,0x22,0x8D,
74372 -0x00,0x00,0x00,0x00,
74373 -0x24,0x10,0x43,0x00,
74374 -0x95,0x09,0x00,0x08,
74375 -0x00,0x10,0x42,0x34,
74376 -0x10,0x23,0x22,0x8D,
74377 -0xFF,0xEF,0x03,0x24,
74378 -0x00,0x08,0x42,0x34,
74379 -0x95,0x09,0x00,0x08,
74380 -0x24,0x10,0x43,0x00,
74381 -0x88,0x58,0x84,0x24,
74382 -0x6C,0x4C,0x00,0x0C,
74383 -0x03,0x00,0x05,0x24,
74384 -0xBE,0x09,0x00,0x08,
74385 -0x00,0x00,0x00,0x00,
74386 -0x08,0x00,0xE0,0x03,
74387 -0x21,0x10,0x00,0x00,
74388 -0xD8,0xFF,0xBD,0x27,
74389 -0x18,0x00,0xB2,0xAF,
74390 -0x02,0x80,0x12,0x3C,
74391 -0x1C,0x00,0xB3,0xAF,
74392 -0x24,0x00,0xBF,0xAF,
74393 -0x20,0x00,0xB4,0xAF,
74394 -0x14,0x00,0xB1,0xAF,
74395 -0x10,0x00,0xB0,0xAF,
74396 -0x30,0x1F,0x43,0x26,
74397 -0xB0,0x1B,0x62,0x94,
74398 -0x00,0x00,0x00,0x00,
74399 -0x00,0x10,0x42,0x30,
74400 -0x76,0x00,0x40,0x14,
74401 -0x21,0x98,0x80,0x00,
74402 -0x00,0x60,0x10,0x40,
74403 -0x01,0x00,0x01,0x36,
74404 -0x01,0x00,0x21,0x38,
74405 -0x00,0x60,0x81,0x40,
74406 -0x02,0x80,0x14,0x3C,
74407 -0xF6,0x5E,0x82,0x92,
74408 -0x00,0x00,0x00,0x00,
74409 -0x0F,0x00,0x42,0x30,
74410 -0x04,0x00,0x42,0x28,
74411 -0x74,0x00,0x40,0x14,
74412 -0x04,0x00,0x04,0x24,
74413 -0x00,0x60,0x90,0x40,
74414 -0x30,0x1F,0x42,0x8E,
74415 -0xFF,0xF0,0x03,0x24,
74416 -0x0F,0xFF,0x04,0x24,
74417 -0x24,0x10,0x43,0x00,
74418 -0x24,0x10,0x44,0x00,
74419 -0x25,0xB0,0x05,0x3C,
74420 -0xF0,0xFF,0x03,0x24,
74421 -0x24,0x10,0x43,0x00,
74422 -0x64,0x03,0xA4,0x34,
74423 -0x17,0x00,0x03,0x24,
74424 -0x00,0x00,0x80,0xA0,
74425 -0x50,0x0C,0xA3,0xA0,
74426 -0x30,0x1F,0x42,0xAE,
74427 -0x21,0x10,0x00,0x00,
74428 -0x01,0x00,0x42,0x24,
74429 -0xFF,0x00,0x42,0x30,
74430 -0x06,0x00,0x43,0x2C,
74431 -0xFD,0xFF,0x60,0x14,
74432 -0x01,0x00,0x42,0x24,
74433 -0x25,0xB0,0x02,0x3C,
74434 -0x17,0x00,0x03,0x24,
74435 -0x58,0x0C,0x43,0xA0,
74436 -0x21,0x10,0x00,0x00,
74437 -0x01,0x00,0x42,0x24,
74438 -0xFF,0x00,0x42,0x30,
74439 -0x06,0x00,0x43,0x2C,
74440 -0xFD,0xFF,0x60,0x14,
74441 -0x01,0x00,0x42,0x24,
74442 -0x30,0x1F,0x51,0x26,
74443 -0xB0,0x1B,0x22,0x96,
74444 -0x02,0x80,0x04,0x3C,
74445 -0xB4,0xD7,0x84,0x24,
74446 -0x00,0x10,0x42,0x34,
74447 -0x2F,0x55,0x00,0x0C,
74448 -0xB0,0x1B,0x22,0xA6,
74449 -0x01,0x00,0x02,0x24,
74450 -0x25,0xB0,0x03,0x3C,
74451 -0x6C,0x3B,0x22,0xAE,
74452 -0x4C,0x00,0x63,0x34,
74453 -0x08,0x00,0x66,0x8E,
74454 -0x00,0x00,0x67,0x90,
74455 -0xB0,0x1B,0x22,0x96,
74456 -0x30,0x3B,0x28,0x92,
74457 -0x31,0x3B,0x29,0x92,
74458 -0x8F,0x3E,0x2A,0x92,
74459 -0x38,0x3B,0x2B,0x92,
74460 -0x67,0x3B,0x2C,0x92,
74461 -0x74,0x3B,0x26,0xAE,
74462 -0x00,0x80,0x42,0x30,
74463 -0xA1,0x3B,0x27,0xA2,
74464 -0x21,0x20,0x00,0x00,
74465 -0x00,0x00,0x60,0xA0,
74466 -0x21,0x28,0x00,0x00,
74467 -0x99,0x3B,0x28,0xA2,
74468 -0x9A,0x3B,0x29,0xA2,
74469 -0x9E,0x3B,0x22,0xA6,
74470 -0xA0,0x3B,0x2A,0xA2,
74471 -0x30,0x3B,0x2B,0xA2,
74472 -0x31,0x3B,0x2C,0xA2,
74473 -0xA4,0x3B,0x20,0xAE,
74474 -0xA8,0x3B,0x20,0xAE,
74475 -0x9C,0x3B,0x20,0xA2,
74476 -0x12,0x0D,0x00,0x0C,
74477 -0x9B,0x3B,0x20,0xA2,
74478 -0x08,0x00,0x66,0x8E,
74479 -0x00,0x00,0x00,0x00,
74480 -0x33,0x00,0xC0,0x14,
74481 -0x0C,0x00,0x70,0x26,
74482 -0x00,0x00,0x62,0x8E,
74483 -0x21,0x20,0x20,0x02,
74484 -0xAC,0x3B,0x23,0x26,
74485 -0x70,0x3B,0x22,0xAE,
74486 -0x3F,0x00,0x02,0x24,
74487 -0xFF,0xFF,0x42,0x24,
74488 -0x00,0x00,0x60,0xA0,
74489 -0xFD,0xFF,0x41,0x04,
74490 -0x07,0x00,0x63,0x24,
74491 -0xB0,0x1B,0x83,0x94,
74492 -0x00,0x00,0x00,0x00,
74493 -0x00,0x01,0x62,0x30,
74494 -0x09,0x00,0x40,0x10,
74495 -0x30,0x1F,0x50,0x26,
74496 -0x01,0x00,0x62,0x30,
74497 -0x06,0x00,0x40,0x10,
74498 -0x00,0x00,0x00,0x00,
74499 -0xF6,0x5E,0x82,0x92,
74500 -0x0C,0x00,0x03,0x24,
74501 -0x0F,0x00,0x42,0x30,
74502 -0x2C,0x00,0x43,0x10,
74503 -0x00,0x00,0x00,0x00,
74504 -0x30,0x3B,0x04,0x92,
74505 -0x4F,0x0C,0x00,0x0C,
74506 -0x00,0x00,0x00,0x00,
74507 -0x25,0xB0,0x04,0x3C,
74508 -0x48,0x00,0x84,0x34,
74509 -0x00,0x00,0x83,0x8C,
74510 -0x70,0x3B,0x05,0x8E,
74511 -0x7B,0xFF,0x02,0x3C,
74512 -0xFF,0xFF,0x42,0x34,
74513 -0x24,0x18,0x62,0x00,
74514 -0x01,0x00,0x02,0x24,
74515 -0x00,0x00,0x83,0xAC,
74516 -0x19,0x00,0xA2,0x10,
74517 -0x3C,0x00,0x02,0x24,
74518 -0x98,0x38,0x02,0xAE,
74519 -0x24,0x00,0xBF,0x8F,
74520 -0x20,0x00,0xB4,0x8F,
74521 -0x1C,0x00,0xB3,0x8F,
74522 -0x18,0x00,0xB2,0x8F,
74523 -0x14,0x00,0xB1,0x8F,
74524 -0x10,0x00,0xB0,0x8F,
74525 -0x21,0x10,0x00,0x00,
74526 -0x08,0x00,0xE0,0x03,
74527 -0x28,0x00,0xBD,0x27,
74528 -0x64,0x31,0x00,0x0C,
74529 -0x01,0x00,0x05,0x24,
74530 -0x0F,0x0A,0x00,0x08,
74531 -0x00,0x00,0x00,0x00,
74532 -0x02,0x80,0x04,0x3C,
74533 -0x21,0x28,0x00,0x02,
74534 -0x10,0x52,0x00,0x0C,
74535 -0xA8,0x5A,0x84,0x24,
74536 -0x02,0x80,0x04,0x3C,
74537 -0xC4,0xD7,0x84,0x24,
74538 -0x2F,0x55,0x00,0x0C,
74539 -0x21,0x28,0x00,0x02,
74540 -0x54,0x0A,0x00,0x08,
74541 -0x00,0x00,0x00,0x00,
74542 -0x13,0x0F,0x00,0x0C,
74543 -0x00,0x00,0x00,0x00,
74544 -0x3C,0x00,0x02,0x24,
74545 -0x79,0x0A,0x00,0x08,
74546 -0x98,0x38,0x02,0xAE,
74547 -0xCD,0x4E,0x00,0x0C,
74548 -0x01,0x00,0x04,0x24,
74549 -0x6A,0x0A,0x00,0x08,
74550 -0x30,0x1F,0x50,0x26,
74551 -0xE8,0xFF,0xBD,0x27,
74552 -0x10,0x00,0xB0,0xAF,
74553 -0x14,0x00,0xBF,0xAF,
74554 -0x21,0x80,0x80,0x00,
74555 -0x00,0x00,0x02,0x92,
74556 -0x02,0x80,0x04,0x3C,
74557 -0x21,0x28,0x40,0x00,
74558 -0x03,0x00,0x42,0x2C,
74559 -0x06,0x00,0x40,0x14,
74560 -0xD0,0xD7,0x84,0x24,
74561 -0x14,0x00,0xBF,0x8F,
74562 -0x10,0x00,0xB0,0x8F,
74563 -0x21,0x10,0x00,0x00,
74564 -0x08,0x00,0xE0,0x03,
74565 -0x18,0x00,0xBD,0x27,
74566 -0x2F,0x55,0x00,0x0C,
74567 -0x00,0x00,0x00,0x00,
74568 -0x00,0x00,0x03,0x92,
74569 -0x14,0x00,0xBF,0x8F,
74570 -0x10,0x00,0xB0,0x8F,
74571 -0x02,0x80,0x02,0x3C,
74572 -0xA8,0x5C,0x43,0xAC,
74573 -0x18,0x00,0xBD,0x27,
74574 -0x08,0x00,0xE0,0x03,
74575 -0x21,0x10,0x00,0x00,
74576 -0x00,0x80,0x03,0x3C,
74577 -0x25,0xB0,0x02,0x3C,
74578 -0xD0,0xFF,0xBD,0x27,
74579 -0x18,0x03,0x42,0x34,
74580 -0xC8,0x2A,0x63,0x24,
74581 -0x24,0x00,0xB3,0xAF,
74582 -0x28,0x00,0xBF,0xAF,
74583 -0x20,0x00,0xB2,0xAF,
74584 -0x1C,0x00,0xB1,0xAF,
74585 -0x18,0x00,0xB0,0xAF,
74586 -0x00,0x00,0x43,0xAC,
74587 -0x02,0x80,0x04,0x3C,
74588 -0xF4,0x5E,0x82,0x90,
74589 -0x00,0x00,0x00,0x00,
74590 -0x12,0x00,0x40,0x10,
74591 -0x02,0x80,0x13,0x3C,
74592 -0x02,0x80,0x02,0x3C,
74593 -0x0D,0x5F,0x43,0x90,
74594 -0x00,0x00,0x00,0x00,
74595 -0x66,0x00,0x60,0x14,
74596 -0x01,0x00,0x04,0x24,
74597 -0x02,0x80,0x02,0x3C,
74598 -0x16,0x5F,0x44,0xA0,
74599 -0x02,0x80,0x03,0x3C,
74600 -0xF5,0x5E,0x64,0x90,
74601 -0x01,0x00,0x05,0x24,
74602 -0x64,0x31,0x00,0x0C,
74603 -0xFF,0x00,0x84,0x30,
74604 -0x02,0x80,0x02,0x3C,
74605 -0x74,0x57,0x43,0x8C,
74606 -0x74,0x57,0x42,0x24,
74607 -0xA7,0x00,0x62,0x10,
74608 -0x02,0x80,0x13,0x3C,
74609 -0x00,0x60,0x01,0x40,
74610 -0x01,0x00,0x21,0x34,
74611 -0x00,0x60,0x81,0x40,
74612 -0x2A,0xB0,0x02,0x3C,
74613 -0x36,0x00,0x42,0x34,
74614 -0x00,0x00,0x43,0x90,
74615 -0x30,0x1F,0x66,0x26,
74616 -0x00,0x38,0xC5,0x8C,
74617 -0xC0,0x18,0x03,0x00,
74618 -0x23,0xB0,0x04,0x3C,
74619 -0xF0,0x07,0x63,0x30,
74620 -0xFF,0x1F,0x02,0x3C,
74621 -0x21,0x18,0x64,0x00,
74622 -0xFF,0xFF,0x42,0x34,
74623 -0x24,0x20,0x62,0x00,
74624 -0x23,0x88,0x85,0x00,
74625 -0x00,0x04,0x22,0x26,
74626 -0x2B,0x28,0x85,0x00,
74627 -0xA4,0x37,0xC3,0x8C,
74628 -0x0B,0x88,0x45,0x00,
74629 -0xE1,0x01,0x22,0x2E,
74630 -0xA0,0x37,0xC3,0xAC,
74631 -0x04,0x38,0xC4,0xAC,
74632 -0xAA,0x37,0xC0,0xA4,
74633 -0x14,0x00,0x40,0x14,
74634 -0xA9,0x37,0xC0,0xA0,
74635 -0x20,0xFE,0x82,0x24,
74636 -0x20,0x02,0x83,0x24,
74637 -0x0A,0x18,0x45,0x00,
74638 -0x23,0x10,0x02,0x3C,
74639 -0xFF,0x03,0x42,0x34,
74640 -0x2B,0x10,0x43,0x00,
74641 -0x21,0x28,0x60,0x00,
74642 -0x34,0x00,0x40,0x14,
74643 -0x00,0x38,0xC3,0xAC,
74644 -0x04,0x38,0xC2,0x8C,
74645 -0x00,0x00,0x00,0x00,
74646 -0x2B,0x18,0x45,0x00,
74647 -0x23,0x88,0x45,0x00,
74648 -0x03,0x00,0x60,0x10,
74649 -0xE1,0x01,0x22,0x2E,
74650 -0x00,0x04,0x31,0x26,
74651 -0xE1,0x01,0x22,0x2E,
74652 -0x0E,0x00,0x40,0x10,
74653 -0x30,0x1F,0x70,0x26,
74654 -0x30,0x1F,0x70,0x26,
74655 -0x04,0x38,0x03,0x8E,
74656 -0x00,0x38,0x04,0x8E,
74657 -0x00,0x00,0x00,0x00,
74658 -0x2B,0x10,0x83,0x00,
74659 -0x2E,0x00,0x40,0x14,
74660 -0x2B,0x10,0x64,0x00,
74661 -0x5A,0x00,0x40,0x14,
74662 -0x25,0xB0,0x02,0x3C,
74663 -0x80,0x00,0x03,0x24,
74664 -0xD0,0x03,0x42,0x34,
74665 -0x00,0x00,0x43,0xAC,
74666 -0x30,0x1F,0x70,0x26,
74667 -0x00,0x38,0x03,0x96,
74668 -0x2A,0xB0,0x02,0x3C,
74669 -0x35,0x00,0x42,0x34,
74670 -0xC2,0x88,0x03,0x00,
74671 -0x00,0x00,0x51,0xA0,
74672 -0x5D,0x27,0x00,0x0C,
74673 -0x00,0x00,0x00,0x00,
74674 -0xAA,0x37,0x03,0x96,
74675 -0x25,0xB0,0x02,0x3C,
74676 -0xB0,0x03,0x42,0x34,
74677 -0x00,0x00,0x43,0xAC,
74678 -0x00,0x60,0x01,0x40,
74679 -0x01,0x00,0x21,0x34,
74680 -0x01,0x00,0x21,0x38,
74681 -0x00,0x60,0x81,0x40,
74682 -0xD0,0x1B,0x02,0x8E,
74683 -0x80,0x00,0x03,0x3C,
74684 -0x41,0xB0,0x04,0x3C,
74685 -0x25,0x10,0x43,0x00,
74686 -0x00,0x00,0x82,0xAC,
74687 -0x28,0x00,0xBF,0x8F,
74688 -0xD0,0x1B,0x02,0xAE,
74689 -0x24,0x00,0xB3,0x8F,
74690 -0x20,0x00,0xB2,0x8F,
74691 -0x1C,0x00,0xB1,0x8F,
74692 -0x18,0x00,0xB0,0x8F,
74693 -0x08,0x00,0xE0,0x03,
74694 -0x30,0x00,0xBD,0x27,
74695 -0x00,0xFC,0xA5,0x24,
74696 -0xF6,0x0A,0x00,0x08,
74697 -0x00,0x38,0xC5,0xAC,
74698 -0x17,0x30,0x00,0x0C,
74699 -0x00,0x00,0x00,0x00,
74700 -0x9F,0xFF,0x40,0x10,
74701 -0x00,0x00,0x00,0x00,
74702 -0x0D,0x30,0x00,0x0C,
74703 -0x00,0x00,0x00,0x00,
74704 -0xCF,0x0A,0x00,0x08,
74705 -0x02,0x80,0x02,0x3C,
74706 -0xA0,0x37,0x05,0x8E,
74707 -0x21,0x30,0x80,0x00,
74708 -0xFF,0xFF,0x27,0x32,
74709 -0x09,0x00,0x04,0x24,
74710 -0x73,0x01,0x00,0x0C,
74711 -0x10,0x00,0xA0,0xAF,
74712 -0xA0,0x37,0x03,0x8E,
74713 -0xAA,0x37,0x05,0x96,
74714 -0x00,0x38,0x02,0x8E,
74715 -0x21,0x18,0x71,0x00,
74716 -0x21,0x28,0x25,0x02,
74717 -0x21,0x10,0x51,0x00,
74718 -0x09,0x00,0x04,0x24,
74719 -0x00,0x38,0x02,0xAE,
74720 -0xA0,0x37,0x03,0xAE,
74721 -0xB0,0x01,0x00,0x0C,
74722 -0xAA,0x37,0x05,0xA6,
74723 -0x30,0x1F,0x70,0x26,
74724 -0x00,0x38,0x03,0x96,
74725 -0x2A,0xB0,0x02,0x3C,
74726 -0x35,0x00,0x42,0x34,
74727 -0xC2,0x88,0x03,0x00,
74728 -0x00,0x00,0x51,0xA0,
74729 -0x5D,0x27,0x00,0x0C,
74730 -0x00,0x00,0x00,0x00,
74731 -0xAA,0x37,0x03,0x96,
74732 -0x25,0xB0,0x02,0x3C,
74733 -0xB0,0x03,0x42,0x34,
74734 -0x00,0x00,0x43,0xAC,
74735 -0x00,0x60,0x01,0x40,
74736 -0x01,0x00,0x21,0x34,
74737 -0x01,0x00,0x21,0x38,
74738 -0x00,0x60,0x81,0x40,
74739 -0xD0,0x1B,0x02,0x8E,
74740 -0x80,0x00,0x03,0x3C,
74741 -0x41,0xB0,0x04,0x3C,
74742 -0x25,0x10,0x43,0x00,
74743 -0x00,0x00,0x82,0xAC,
74744 -0x28,0x00,0xBF,0x8F,
74745 -0xD0,0x1B,0x02,0xAE,
74746 -0x24,0x00,0xB3,0x8F,
74747 -0x20,0x00,0xB2,0x8F,
74748 -0x1C,0x00,0xB1,0x8F,
74749 -0x18,0x00,0xB0,0x8F,
74750 -0x08,0x00,0xE0,0x03,
74751 -0x30,0x00,0xBD,0x27,
74752 -0x08,0x38,0x02,0x8E,
74753 -0xA0,0x37,0x05,0x8E,
74754 -0x21,0x30,0x80,0x00,
74755 -0x23,0x88,0x44,0x00,
74756 -0xFF,0xFF,0x27,0x32,
74757 -0x09,0x00,0x04,0x24,
74758 -0x73,0x01,0x00,0x0C,
74759 -0x10,0x00,0xA0,0xAF,
74760 -0xA0,0x37,0x03,0x8E,
74761 -0xAA,0x37,0x02,0x96,
74762 -0x04,0x38,0x12,0x96,
74763 -0x21,0x18,0x71,0x00,
74764 -0x21,0x10,0x22,0x02,
74765 -0x23,0x10,0x11,0x3C,
74766 -0xA0,0x37,0x03,0xAE,
74767 -0xAA,0x37,0x02,0xA6,
74768 -0x15,0x00,0x40,0x16,
74769 -0x00,0x38,0x11,0xAE,
74770 -0x09,0x00,0x04,0x24,
74771 -0xB0,0x01,0x00,0x0C,
74772 -0x30,0x1F,0x70,0x26,
74773 -0x46,0x0B,0x00,0x08,
74774 -0x00,0x00,0x00,0x00,
74775 -0x17,0x30,0x00,0x0C,
74776 -0x00,0x00,0x00,0x00,
74777 -0x57,0xFF,0x40,0x10,
74778 -0x30,0x1F,0x63,0x26,
74779 -0x2A,0x1C,0x62,0x90,
74780 -0x00,0x00,0x00,0x00,
74781 -0x53,0xFF,0x40,0x10,
74782 -0x00,0x00,0x00,0x00,
74783 -0x50,0x39,0x64,0x94,
74784 -0x2A,0x1C,0x60,0xA0,
74785 -0x00,0xC0,0x84,0x24,
74786 -0xC2,0x34,0x00,0x0C,
74787 -0xFF,0xFF,0x84,0x30,
74788 -0xD3,0x0A,0x00,0x08,
74789 -0x00,0x00,0x00,0x00,
74790 -0xB0,0x01,0x00,0x0C,
74791 -0x09,0x00,0x04,0x24,
74792 -0xA0,0x37,0x05,0x8E,
74793 -0x09,0x00,0x04,0x24,
74794 -0x23,0x10,0x06,0x3C,
74795 -0x21,0x38,0x40,0x02,
74796 -0x73,0x01,0x00,0x0C,
74797 -0x10,0x00,0xA0,0xAF,
74798 -0xA0,0x37,0x03,0x8E,
74799 -0xAA,0x37,0x02,0x96,
74800 -0x21,0x20,0x51,0x02,
74801 -0x21,0x18,0x72,0x00,
74802 -0x21,0x10,0x42,0x02,
74803 -0x00,0x38,0x04,0xAE,
74804 -0x09,0x00,0x04,0x24,
74805 -0xA0,0x37,0x03,0xAE,
74806 -0x75,0x0B,0x00,0x08,
74807 -0xAA,0x37,0x02,0xA6,
74808 -0xFF,0x00,0x86,0x30,
74809 -0x02,0x80,0x02,0x3C,
74810 -0x40,0x00,0xC3,0x2C,
74811 -0x4A,0xF3,0x47,0x90,
74812 -0x00,0x00,0x63,0x38,
74813 -0x3F,0x00,0x02,0x24,
74814 -0x0A,0x30,0x43,0x00,
74815 -0x01,0x00,0x02,0x24,
74816 -0x08,0x0E,0x04,0x24,
74817 -0x00,0x7F,0x05,0x24,
74818 -0x03,0x00,0xE2,0x10,
74819 -0x31,0x00,0xC3,0x2C,
74820 -0xA9,0x45,0x00,0x08,
74821 -0x00,0x00,0x00,0x00,
74822 -0x30,0x00,0x02,0x24,
74823 -0xA9,0x45,0x00,0x08,
74824 -0x0A,0x30,0x43,0x00,
74825 -0xC0,0xFF,0xBD,0x27,
74826 -0x02,0x80,0x03,0x3C,
74827 -0x38,0x00,0xB4,0xAF,
74828 -0x34,0x00,0xB3,0xAF,
74829 -0x30,0x00,0xB2,0xAF,
74830 -0x2C,0x00,0xB1,0xAF,
74831 -0x28,0x00,0xB0,0xAF,
74832 -0x28,0xEA,0x62,0x24,
74833 -0x3C,0x00,0xBF,0xAF,
74834 -0x0A,0x00,0x4A,0x94,
74835 -0x02,0x00,0x48,0x94,
74836 -0x06,0x00,0x49,0x94,
74837 -0xFF,0x00,0x84,0x30,
74838 -0xFF,0x00,0xA5,0x30,
74839 -0x28,0xEA,0x6B,0x94,
74840 -0x04,0x00,0x4C,0x94,
74841 -0x08,0x00,0x4D,0x94,
74842 -0x00,0x1C,0x05,0x00,
74843 -0x00,0x14,0x04,0x00,
74844 -0x00,0x3E,0x05,0x00,
74845 -0x00,0x36,0x04,0x00,
74846 -0x25,0x38,0xE3,0x00,
74847 -0x25,0x30,0xC2,0x00,
74848 -0x00,0x44,0x08,0x00,
74849 -0x00,0x12,0x05,0x00,
74850 -0x00,0x4C,0x09,0x00,
74851 -0x00,0x54,0x0A,0x00,
74852 -0x00,0x1A,0x04,0x00,
74853 -0x25,0x38,0xE2,0x00,
74854 -0x25,0x40,0x0B,0x01,
74855 -0x25,0x48,0x2C,0x01,
74856 -0x25,0x50,0x4D,0x01,
74857 -0x25,0x30,0xC3,0x00,
74858 -0x02,0x80,0x02,0x3C,
74859 -0x10,0x00,0xA8,0xAF,
74860 -0x14,0x00,0xA9,0xAF,
74861 -0x18,0x00,0xAA,0xAF,
74862 -0x25,0x98,0xE5,0x00,
74863 -0x25,0x90,0xC4,0x00,
74864 -0x30,0x1F,0x54,0x24,
74865 -0x21,0x80,0x00,0x00,
74866 -0x10,0x00,0xB1,0x27,
74867 -0x02,0x00,0x02,0x2E,
74868 -0x32,0x00,0x40,0x10,
74869 -0x80,0x10,0x10,0x00,
74870 -0x21,0x10,0x54,0x00,
74871 -0xF0,0x1C,0x43,0x8C,
74872 -0x00,0x00,0x00,0x00,
74873 -0x21,0x40,0x73,0x00,
74874 -0x21,0x38,0x00,0x00,
74875 -0x7F,0x00,0x09,0x24,
74876 -0xC0,0x20,0x07,0x00,
74877 -0x04,0x10,0x89,0x00,
74878 -0x24,0x10,0x48,0x00,
74879 -0x06,0x10,0x82,0x00,
74880 -0x01,0x00,0xE5,0x24,
74881 -0xFF,0x00,0x43,0x30,
74882 -0x21,0x30,0x27,0x02,
74883 -0x40,0x00,0x63,0x2C,
74884 -0xFF,0x00,0xA7,0x30,
74885 -0x02,0x00,0x60,0x14,
74886 -0x04,0x00,0xE4,0x2C,
74887 -0x3F,0x00,0x02,0x24,
74888 -0xF3,0xFF,0x80,0x14,
74889 -0x10,0x00,0xC2,0xA0,
74890 -0x23,0x00,0xA6,0x93,
74891 -0x22,0x00,0xA2,0x93,
74892 -0x21,0x00,0xA5,0x93,
74893 -0x40,0x18,0x10,0x00,
74894 -0x00,0x14,0x02,0x00,
74895 -0x21,0x18,0x71,0x00,
74896 -0x20,0x00,0xA7,0x93,
74897 -0x00,0x36,0x06,0x00,
74898 -0x25,0x30,0xC2,0x00,
74899 -0x00,0x2A,0x05,0x00,
74900 -0x00,0x00,0x64,0x94,
74901 -0x25,0x30,0xC5,0x00,
74902 -0x7F,0x7F,0x05,0x3C,
74903 -0x25,0x30,0xC7,0x00,
74904 -0xA9,0x45,0x00,0x0C,
74905 -0x7F,0x7F,0xA5,0x34,
74906 -0x01,0x00,0x02,0x26,
74907 -0xFF,0x00,0x50,0x30,
74908 -0x06,0x00,0x03,0x2E,
74909 -0xD5,0xFF,0x60,0x14,
74910 -0x00,0x00,0x00,0x00,
74911 -0x3C,0x00,0xBF,0x8F,
74912 -0x38,0x00,0xB4,0x8F,
74913 -0x34,0x00,0xB3,0x8F,
74914 -0x30,0x00,0xB2,0x8F,
74915 -0x2C,0x00,0xB1,0x8F,
74916 -0x28,0x00,0xB0,0x8F,
74917 -0x08,0x00,0xE0,0x03,
74918 -0x40,0x00,0xBD,0x27,
74919 -0x21,0x10,0x54,0x00,
74920 -0xF0,0x1C,0x43,0x8C,
74921 -0xDC,0x0B,0x00,0x08,
74922 -0x21,0x40,0x72,0x00,
74923 -0xD8,0xFF,0xBD,0x27,
74924 -0x02,0x80,0x09,0x3C,
74925 -0x1C,0x00,0xB3,0xAF,
74926 -0x10,0x00,0xB0,0xAF,
74927 -0x20,0x00,0xBF,0xAF,
74928 -0x18,0x00,0xB2,0xAF,
74929 -0x14,0x00,0xB1,0xAF,
74930 -0x30,0x1F,0x27,0x25,
74931 -0x02,0x80,0x02,0x3C,
74932 -0xB0,0x1B,0xE3,0x94,
74933 -0xDE,0x5D,0x46,0x90,
74934 -0xFF,0x00,0x90,0x30,
74935 -0x00,0x10,0x63,0x30,
74936 -0x20,0x00,0xC5,0x30,
74937 -0x21,0x20,0x07,0x02,
74938 -0x10,0x00,0xC6,0x30,
74939 -0x02,0x00,0x60,0x14,
74940 -0x3F,0x00,0x13,0x24,
74941 -0x63,0x1D,0x93,0x90,
74942 -0x28,0x00,0xC0,0x10,
74943 -0x30,0x1F,0x22,0x25,
74944 -0x8D,0x1D,0x82,0x90,
74945 -0x7F,0x1D,0x83,0x90,
74946 -0x00,0x00,0x00,0x00,
74947 -0x23,0x10,0x43,0x00,
74948 -0x00,0x46,0x02,0x00,
74949 -0x03,0x46,0x08,0x00,
74950 -0xFF,0x00,0x71,0x30,
74951 -0x30,0x1F,0x27,0x25,
74952 -0x0F,0x00,0x08,0x31,
74953 -0x21,0x30,0x00,0x01,
74954 -0x21,0x40,0x07,0x02,
74955 -0xB7,0x1D,0x02,0x91,
74956 -0xB0,0x1B,0xE3,0x84,
74957 -0x0F,0x00,0x05,0x3C,
74958 -0x0F,0x00,0x42,0x30,
74959 -0x21,0x10,0x51,0x00,
74960 -0x0C,0x08,0x04,0x24,
74961 -0x00,0xFF,0xA5,0x34,
74962 -0x06,0x00,0x60,0x04,
74963 -0xFF,0x00,0x52,0x30,
74964 -0xC5,0x1D,0x02,0x91,
74965 -0x00,0x00,0x00,0x00,
74966 -0x0F,0x00,0x42,0x30,
74967 -0x21,0x10,0x51,0x00,
74968 -0xFF,0x00,0x51,0x30,
74969 -0xA9,0x45,0x00,0x0C,
74970 -0x00,0x00,0x00,0x00,
74971 -0x9A,0x0B,0x00,0x0C,
74972 -0x21,0x20,0x60,0x02,
74973 -0x21,0x20,0x20,0x02,
74974 -0x21,0x28,0x40,0x02,
74975 -0x21,0x30,0x00,0x02,
74976 -0x20,0x00,0xBF,0x8F,
74977 -0x1C,0x00,0xB3,0x8F,
74978 -0x18,0x00,0xB2,0x8F,
74979 -0x14,0x00,0xB1,0x8F,
74980 -0x10,0x00,0xB0,0x8F,
74981 -0xAB,0x0B,0x00,0x08,
74982 -0x28,0x00,0xBD,0x27,
74983 -0xDF,0xFF,0xA0,0x10,
74984 -0x21,0x18,0x02,0x02,
74985 -0xA9,0x1D,0x62,0x90,
74986 -0x9B,0x1D,0x63,0x90,
74987 -0x26,0x0C,0x00,0x08,
74988 -0x23,0x10,0x43,0x00,
74989 -0xE0,0xFF,0xBD,0x27,
74990 -0x14,0x00,0xB1,0xAF,
74991 -0x02,0x80,0x02,0x3C,
74992 -0x18,0x00,0xBF,0xAF,
74993 -0x10,0x00,0xB0,0xAF,
74994 -0xE9,0x5D,0x43,0x90,
74995 -0x01,0x00,0x02,0x24,
74996 -0x0D,0x00,0x62,0x10,
74997 -0xFF,0x00,0x91,0x30,
74998 -0x0D,0x0C,0x00,0x0C,
74999 -0x21,0x20,0x20,0x02,
75000 -0x21,0x30,0x20,0x02,
75001 -0x18,0x00,0x04,0x24,
75002 -0x5F,0x47,0x00,0x0C,
75003 -0xFF,0x03,0x05,0x24,
75004 -0x18,0x00,0xBF,0x8F,
75005 -0x14,0x00,0xB1,0x8F,
75006 -0x10,0x00,0xB0,0x8F,
75007 -0x0A,0x00,0x04,0x24,
75008 -0x25,0x22,0x00,0x08,
75009 -0x20,0x00,0xBD,0x27,
75010 -0x1A,0x00,0x23,0x12,
75011 -0x0B,0x00,0x02,0x24,
75012 -0x1D,0x00,0x22,0x12,
75013 -0x0F,0x00,0x05,0x3C,
75014 -0xFF,0xFF,0xA5,0x34,
75015 -0x15,0x00,0x04,0x24,
75016 -0xF4,0xF8,0x06,0x34,
75017 -0x5F,0x47,0x00,0x0C,
75018 -0x00,0x00,0x00,0x00,
75019 -0x02,0x80,0x02,0x3C,
75020 -0x48,0xF3,0x44,0x90,
75021 -0xFE,0x00,0x03,0x24,
75022 -0xE9,0xFF,0x83,0x14,
75023 -0x0F,0x00,0x10,0x3C,
75024 -0xFF,0xFF,0x05,0x36,
75025 -0x8A,0x47,0x00,0x0C,
75026 -0x15,0x00,0x04,0x24,
75027 -0xFF,0x00,0x46,0x30,
75028 -0x00,0xFF,0x03,0x36,
75029 -0x24,0x10,0x43,0x00,
75030 -0x01,0x00,0xC6,0x24,
75031 -0x25,0x30,0x46,0x00,
75032 -0xFF,0xFF,0x05,0x36,
75033 -0x5F,0x47,0x00,0x0C,
75034 -0x15,0x00,0x04,0x24,
75035 -0x5B,0x0C,0x00,0x08,
75036 -0x21,0x30,0x20,0x02,
75037 -0x0F,0x00,0x05,0x3C,
75038 -0xFF,0xFF,0xA5,0x34,
75039 -0x15,0x00,0x04,0x24,
75040 -0x6B,0x0C,0x00,0x08,
75041 -0xF4,0xA8,0x06,0x34,
75042 -0xFF,0xFF,0xA5,0x34,
75043 -0x15,0x00,0x04,0x24,
75044 -0x6B,0x0C,0x00,0x08,
75045 -0xF5,0xF8,0x06,0x34,
75046 -0xFC,0x00,0x84,0x30,
75047 -0x50,0x00,0x02,0x24,
75048 -0x11,0x00,0x82,0x10,
75049 -0x05,0x00,0x03,0x24,
75050 -0x51,0x00,0x82,0x28,
75051 -0x10,0x00,0x40,0x10,
75052 -0xA0,0x00,0x02,0x24,
75053 -0x20,0x00,0x02,0x24,
75054 -0x0B,0x00,0x82,0x10,
75055 -0x02,0x00,0x03,0x24,
75056 -0x21,0x00,0x82,0x28,
75057 -0x15,0x00,0x40,0x14,
75058 -0x30,0x00,0x02,0x24,
75059 -0x06,0x00,0x82,0x10,
75060 -0x03,0x00,0x03,0x24,
75061 -0x04,0x00,0x03,0x24,
75062 -0x40,0x00,0x02,0x24,
75063 -0x02,0x00,0x82,0x10,
75064 -0x00,0x00,0x00,0x00,
75065 -0x0C,0x00,0x03,0x24,
75066 -0x08,0x00,0xE0,0x03,
75067 -0x21,0x10,0x60,0x00,
75068 -0xFD,0xFF,0x82,0x10,
75069 -0x08,0x00,0x03,0x24,
75070 -0xA1,0x00,0x82,0x28,
75071 -0x0C,0x00,0x40,0x10,
75072 -0xC0,0x00,0x02,0x24,
75073 -0x80,0x00,0x02,0x24,
75074 -0xF7,0xFF,0x82,0x10,
75075 -0x06,0x00,0x03,0x24,
75076 -0x07,0x00,0x03,0x24,
75077 -0x99,0x0C,0x00,0x08,
75078 -0x90,0x00,0x02,0x24,
75079 -0xF2,0xFF,0x80,0x10,
75080 -0x21,0x18,0x00,0x00,
75081 -0x01,0x00,0x03,0x24,
75082 -0x99,0x0C,0x00,0x08,
75083 -0x10,0x00,0x02,0x24,
75084 -0xED,0xFF,0x82,0x10,
75085 -0x0A,0x00,0x03,0x24,
75086 -0xC1,0x00,0x82,0x28,
75087 -0x04,0x00,0x40,0x10,
75088 -0x00,0x00,0x00,0x00,
75089 -0x09,0x00,0x03,0x24,
75090 -0x99,0x0C,0x00,0x08,
75091 -0xB0,0x00,0x02,0x24,
75092 -0x0B,0x00,0x03,0x24,
75093 -0x99,0x0C,0x00,0x08,
75094 -0xD0,0x00,0x02,0x24,
75095 -0xD8,0xFF,0xBD,0x27,
75096 -0x1C,0x00,0xB3,0xAF,
75097 -0x18,0x00,0xB2,0xAF,
75098 -0x14,0x00,0xB1,0xAF,
75099 -0x20,0x00,0xBF,0xAF,
75100 -0x10,0x00,0xB0,0xAF,
75101 -0x08,0x00,0x83,0x8C,
75102 -0x25,0xB0,0x02,0x3C,
75103 -0xB0,0x03,0x42,0x34,
75104 -0x00,0x00,0x43,0xAC,
75105 -0x08,0x00,0x90,0x94,
75106 -0x02,0x80,0x02,0x3C,
75107 -0x21,0x98,0x80,0x00,
75108 -0x25,0x80,0x02,0x02,
75109 -0x21,0x20,0x00,0x02,
75110 -0xFF,0x00,0xB2,0x30,
75111 -0xFF,0x00,0xD1,0x30,
75112 -0x21,0x28,0x00,0x00,
75113 -0x08,0x52,0x00,0x0C,
75114 -0x08,0x00,0x06,0x24,
75115 -0x08,0x00,0x04,0x8E,
75116 -0x04,0x00,0x05,0x8E,
75117 -0xFF,0xDF,0x02,0x3C,
75118 -0xFF,0xFF,0x42,0x34,
75119 -0xFF,0xE0,0x03,0x24,
75120 -0x24,0x20,0x82,0x00,
75121 -0x00,0x40,0x02,0x3C,
75122 -0x10,0x00,0x06,0x8E,
75123 -0x24,0x28,0xA3,0x00,
75124 -0x25,0x20,0x82,0x00,
75125 -0x3F,0xFF,0x02,0x3C,
75126 -0x0C,0x00,0x67,0x8E,
75127 -0x7F,0xFF,0x03,0x24,
75128 -0xFF,0xFF,0x42,0x34,
75129 -0x00,0x12,0xA5,0x34,
75130 -0x01,0x00,0x52,0x32,
75131 -0x03,0x00,0x31,0x32,
75132 -0x24,0x20,0x83,0x00,
75133 -0x24,0x28,0xA2,0x00,
75134 -0xC0,0x91,0x12,0x00,
75135 -0x80,0x8D,0x11,0x00,
75136 -0x00,0x80,0x02,0x3C,
75137 -0x25,0x30,0xC2,0x00,
75138 -0x25,0x20,0x92,0x00,
75139 -0x25,0x28,0xB1,0x00,
75140 -0x20,0x00,0x02,0x24,
75141 -0x10,0x00,0x06,0xAE,
75142 -0x02,0x00,0x02,0xA2,
75143 -0x08,0x00,0x04,0xAE,
75144 -0x04,0x00,0x05,0xAE,
75145 -0x00,0x00,0x07,0xA6,
75146 -0x02,0x80,0x02,0x3C,
75147 -0xE0,0x3A,0x43,0x94,
75148 -0xFB,0xFF,0x02,0x3C,
75149 -0xFF,0xFF,0x42,0x34,
75150 -0xC2,0x1B,0x03,0x00,
75151 -0x24,0x30,0xC2,0x00,
75152 -0x80,0x1C,0x03,0x00,
75153 -0x25,0x30,0xC3,0x00,
75154 -0x14,0x00,0x05,0x8E,
75155 -0x82,0x24,0x06,0x00,
75156 -0x01,0x00,0x84,0x30,
75157 -0x0C,0x00,0x02,0x24,
75158 -0x0A,0x10,0x04,0x00,
75159 -0xFF,0x81,0x03,0x24,
75160 -0x24,0x28,0xA3,0x00,
75161 -0x40,0x12,0x02,0x00,
75162 -0x25,0x28,0xA2,0x00,
75163 -0x14,0x00,0x05,0xAE,
75164 -0x10,0x00,0x06,0xAE,
75165 -0x00,0x60,0x03,0x40,
75166 -0x01,0x00,0x61,0x34,
75167 -0x01,0x00,0x21,0x38,
75168 -0x00,0x60,0x81,0x40,
75169 -0x02,0x80,0x02,0x3C,
75170 -0x74,0x57,0x42,0x24,
75171 -0x04,0x00,0x44,0x8C,
75172 -0x00,0x00,0x62,0xAE,
75173 -0x04,0x00,0x53,0xAC,
75174 -0x00,0x00,0x93,0xAC,
75175 -0x04,0x00,0x64,0xAE,
75176 -0x00,0x60,0x83,0x40,
75177 -0x20,0x00,0xBF,0x8F,
75178 -0x1C,0x00,0xB3,0x8F,
75179 -0x18,0x00,0xB2,0x8F,
75180 -0x14,0x00,0xB1,0x8F,
75181 -0x10,0x00,0xB0,0x8F,
75182 -0x08,0x00,0xE0,0x03,
75183 -0x28,0x00,0xBD,0x27,
75184 -0xD8,0xFF,0xBD,0x27,
75185 -0x14,0x00,0xB1,0xAF,
75186 -0x20,0x00,0xBF,0xAF,
75187 -0x1C,0x00,0xB3,0xAF,
75188 -0x18,0x00,0xB2,0xAF,
75189 -0x10,0x00,0xB0,0xAF,
75190 -0xFF,0xFF,0x83,0x30,
75191 -0xFF,0x00,0xB1,0x30,
75192 -0x00,0x60,0x12,0x40,
75193 -0x01,0x00,0x41,0x36,
75194 -0x01,0x00,0x21,0x38,
75195 -0x00,0x60,0x81,0x40,
75196 -0x02,0x80,0x13,0x3C,
75197 -0x30,0x1F,0x70,0x26,
75198 -0xB0,0x1B,0x02,0x96,
75199 -0x00,0x00,0x00,0x00,
75200 -0x00,0x80,0x42,0x30,
75201 -0x2F,0x00,0x43,0x10,
75202 -0x02,0x80,0x04,0x3C,
75203 -0x00,0x80,0x02,0x34,
75204 -0x50,0xDF,0x84,0x24,
75205 -0x33,0x00,0x62,0x10,
75206 -0x21,0x30,0x20,0x02,
75207 -0x2F,0x55,0x00,0x0C,
75208 -0x00,0x00,0x00,0x00,
75209 -0x30,0x3B,0x04,0x92,
75210 -0x4F,0x0C,0x00,0x0C,
75211 -0x00,0x00,0x00,0x00,
75212 -0x25,0xB0,0x03,0x3C,
75213 -0x03,0x02,0x63,0x34,
75214 -0x00,0x00,0x62,0x90,
75215 -0x00,0x08,0x04,0x24,
75216 -0x01,0x00,0x05,0x24,
75217 -0x04,0x00,0x42,0x30,
75218 -0x00,0x00,0x62,0xA0,
75219 -0x1B,0x47,0x00,0x0C,
75220 -0x21,0x30,0x00,0x00,
75221 -0x00,0x09,0x04,0x24,
75222 -0x01,0x00,0x05,0x24,
75223 -0x1B,0x47,0x00,0x0C,
75224 -0x21,0x30,0x00,0x00,
75225 -0x84,0x08,0x04,0x24,
75226 -0xFF,0xFF,0x05,0x24,
75227 -0x1B,0x47,0x00,0x0C,
75228 -0x58,0x00,0x06,0x24,
75229 -0x00,0x0C,0x05,0x24,
75230 -0x01,0x00,0x06,0x24,
75231 -0x5F,0x47,0x00,0x0C,
75232 -0x18,0x00,0x04,0x24,
75233 -0xB0,0x1B,0x02,0x96,
75234 -0x8F,0x3E,0x11,0xA2,
75235 -0xFF,0x7F,0x42,0x30,
75236 -0xB0,0x1B,0x02,0xA6,
75237 -0x30,0x1F,0x62,0x26,
75238 -0x30,0x3B,0x44,0x90,
75239 -0x0D,0x0C,0x00,0x0C,
75240 -0x00,0x00,0x00,0x00,
75241 -0x00,0x60,0x92,0x40,
75242 -0x20,0x00,0xBF,0x8F,
75243 -0x1C,0x00,0xB3,0x8F,
75244 -0x18,0x00,0xB2,0x8F,
75245 -0x14,0x00,0xB1,0x8F,
75246 -0x10,0x00,0xB0,0x8F,
75247 -0x08,0x00,0xE0,0x03,
75248 -0x28,0x00,0xBD,0x27,
75249 -0x00,0x60,0x92,0x40,
75250 -0x20,0x00,0xBF,0x8F,
75251 -0x1C,0x00,0xB3,0x8F,
75252 -0x18,0x00,0xB2,0x8F,
75253 -0x14,0x00,0xB1,0x8F,
75254 -0x10,0x00,0xB0,0x8F,
75255 -0x08,0x00,0xE0,0x03,
75256 -0x28,0x00,0xBD,0x27,
75257 -0x30,0x3B,0x05,0x92,
75258 -0x02,0x80,0x04,0x3C,
75259 -0x2F,0x55,0x00,0x0C,
75260 -0x30,0xDF,0x84,0x24,
75261 -0x01,0x00,0x02,0x24,
75262 -0x2C,0x00,0x22,0x12,
75263 -0x00,0x00,0x00,0x00,
75264 -0x30,0x3B,0x04,0x92,
75265 -0x00,0x00,0x00,0x00,
75266 -0xFE,0xFF,0x84,0x24,
75267 -0x4F,0x0C,0x00,0x0C,
75268 -0x00,0x00,0x00,0x00,
75269 -0x25,0xB0,0x07,0x3C,
75270 -0x03,0x02,0xE7,0x34,
75271 -0x00,0x00,0xE2,0x90,
75272 -0xFB,0xFF,0x03,0x24,
75273 -0x00,0x08,0x04,0x24,
75274 -0x24,0x10,0x43,0x00,
75275 -0x00,0x00,0xE2,0xA0,
75276 -0x01,0x00,0x05,0x24,
75277 -0x1B,0x47,0x00,0x0C,
75278 -0x01,0x00,0x06,0x24,
75279 -0x03,0x00,0x30,0x32,
75280 -0x00,0x09,0x04,0x24,
75281 -0x01,0x00,0x05,0x24,
75282 -0x1B,0x47,0x00,0x0C,
75283 -0x01,0x00,0x06,0x24,
75284 -0x00,0x0A,0x04,0x24,
75285 -0x10,0x00,0x05,0x24,
75286 -0x1B,0x47,0x00,0x0C,
75287 -0x42,0x30,0x10,0x00,
75288 -0x21,0x30,0x00,0x02,
75289 -0x00,0x0D,0x04,0x24,
75290 -0x1B,0x47,0x00,0x0C,
75291 -0x00,0x0C,0x05,0x24,
75292 -0x84,0x08,0x04,0x24,
75293 -0xFF,0xFF,0x05,0x24,
75294 -0x1B,0x47,0x00,0x0C,
75295 -0x18,0x00,0x06,0x24,
75296 -0x18,0x00,0x04,0x24,
75297 -0x00,0x0C,0x05,0x24,
75298 -0x5F,0x47,0x00,0x0C,
75299 -0x21,0x30,0x00,0x00,
75300 -0x30,0x1F,0x64,0x26,
75301 -0xB0,0x1B,0x82,0x94,
75302 -0x00,0x80,0x03,0x24,
75303 -0x8F,0x3E,0x91,0xA0,
75304 -0x25,0x10,0x43,0x00,
75305 -0x47,0x0D,0x00,0x08,
75306 -0xB0,0x1B,0x82,0xA4,
75307 -0x30,0x3B,0x04,0x92,
75308 -0x65,0x0D,0x00,0x08,
75309 -0x02,0x00,0x84,0x24,
75310 -0xC8,0xFF,0xBD,0x27,
75311 -0x02,0x80,0x03,0x3C,
75312 -0x34,0x00,0xBF,0xAF,
75313 -0x30,0x00,0xB2,0xAF,
75314 -0x2C,0x00,0xB1,0xAF,
75315 -0x28,0x00,0xB0,0xAF,
75316 -0x34,0xEA,0x62,0x24,
75317 -0x01,0x00,0x44,0x90,
75318 -0x05,0x00,0x45,0x90,
75319 -0x09,0x00,0x46,0x90,
75320 -0x0D,0x00,0x47,0x90,
75321 -0x04,0x00,0x51,0x90,
75322 -0x08,0x00,0x50,0x90,
75323 -0x34,0xEA,0x72,0x90,
75324 -0x02,0x00,0x4F,0x90,
75325 -0x0C,0x00,0x43,0x90,
75326 -0x06,0x00,0x4E,0x90,
75327 -0x0A,0x00,0x4D,0x90,
75328 -0x0E,0x00,0x48,0x90,
75329 -0x03,0x00,0x49,0x90,
75330 -0x07,0x00,0x4A,0x90,
75331 -0x0B,0x00,0x4B,0x90,
75332 -0x0F,0x00,0x4C,0x90,
75333 -0x00,0x22,0x04,0x00,
75334 -0x00,0x2A,0x05,0x00,
75335 -0x00,0x32,0x06,0x00,
75336 -0x00,0x3A,0x07,0x00,
75337 -0x02,0x80,0x18,0x3C,
75338 -0x25,0x28,0xB1,0x00,
75339 -0x25,0x30,0xD0,0x00,
75340 -0x25,0x38,0xE3,0x00,
75341 -0x25,0x20,0x92,0x00,
75342 -0x11,0x00,0x51,0x90,
75343 -0x10,0x00,0x50,0x90,
75344 -0x30,0x1F,0x03,0x27,
75345 -0x00,0x7C,0x0F,0x00,
75346 -0x00,0x74,0x0E,0x00,
75347 -0x00,0x6C,0x0D,0x00,
75348 -0x00,0x44,0x08,0x00,
75349 -0x25,0x78,0xE4,0x01,
75350 -0x25,0x70,0xC5,0x01,
75351 -0x25,0x68,0xA6,0x01,
75352 -0x25,0x40,0x07,0x01,
75353 -0x5A,0x3E,0x66,0x90,
75354 -0x00,0x4E,0x09,0x00,
75355 -0x00,0x56,0x0A,0x00,
75356 -0x00,0x5E,0x0B,0x00,
75357 -0x00,0x66,0x0C,0x00,
75358 -0x25,0x48,0x2F,0x01,
75359 -0x25,0x50,0x4E,0x01,
75360 -0x25,0x58,0x6D,0x01,
75361 -0x25,0x60,0x88,0x01,
75362 -0x25,0xB0,0x05,0x3C,
75363 -0x37,0x02,0xA5,0x34,
75364 -0x10,0x00,0xA9,0xAF,
75365 -0x14,0x00,0xAA,0xAF,
75366 -0x18,0x00,0xAB,0xAF,
75367 -0x1C,0x00,0xAC,0xAF,
75368 -0x20,0x00,0xB0,0xA3,
75369 -0x21,0x00,0xB1,0xA3,
75370 -0x03,0x00,0xC7,0x30,
75371 -0x00,0x00,0xA4,0x90,
75372 -0x02,0x00,0xE2,0x24,
75373 -0x01,0x00,0x03,0x24,
75374 -0x04,0x18,0x43,0x00,
75375 -0x1C,0x00,0xC6,0x30,
75376 -0xF8,0xFF,0x02,0x24,
75377 -0x24,0x20,0x82,0x00,
75378 -0xFF,0x00,0x67,0x30,
75379 -0x82,0x30,0x06,0x00,
75380 -0x10,0x00,0xE3,0x2C,
75381 -0x25,0x20,0x86,0x00,
75382 -0x0F,0x00,0x02,0x24,
75383 -0x00,0x00,0xA4,0xA0,
75384 -0x0A,0x38,0x43,0x00,
75385 -0x21,0x28,0x00,0x00,
75386 -0x10,0x00,0xA3,0x27,
75387 -0x21,0x30,0x65,0x00,
75388 -0x00,0x00,0xC2,0x90,
75389 -0x01,0x00,0xA5,0x24,
75390 -0x2B,0x10,0xE2,0x00,
75391 -0x02,0x00,0x40,0x10,
75392 -0x11,0x00,0xA4,0x2C,
75393 -0x00,0x00,0xC7,0xA0,
75394 -0xF8,0xFF,0x80,0x14,
75395 -0x21,0x30,0x60,0x00,
75396 -0x21,0x28,0x00,0x00,
75397 -0x25,0xB0,0x07,0x3C,
75398 -0x01,0x00,0xC2,0x90,
75399 -0x00,0x00,0xC3,0x90,
75400 -0x21,0x20,0xA7,0x00,
75401 -0x00,0x11,0x02,0x00,
75402 -0x25,0x10,0x43,0x00,
75403 -0x01,0x00,0xA5,0x24,
75404 -0xFF,0x00,0x42,0x30,
75405 -0x08,0x00,0xA3,0x2C,
75406 -0xA8,0x01,0x82,0xA0,
75407 -0xF6,0xFF,0x60,0x14,
75408 -0x02,0x00,0xC6,0x24,
75409 -0x21,0x00,0xA2,0x93,
75410 -0x20,0x00,0xA4,0x93,
75411 -0x02,0x80,0x03,0x3C,
75412 -0x00,0x11,0x02,0x00,
75413 -0xF1,0x5D,0x65,0x90,
75414 -0x25,0x10,0x44,0x00,
75415 -0xFF,0x00,0x42,0x30,
75416 -0xA7,0x01,0xE3,0x34,
75417 -0x00,0x00,0x62,0xA0,
75418 -0x01,0x00,0x02,0x24,
75419 -0x07,0x00,0xA2,0x10,
75420 -0x30,0x1F,0x03,0x27,
75421 -0x34,0x00,0xBF,0x8F,
75422 -0x30,0x00,0xB2,0x8F,
75423 -0x2C,0x00,0xB1,0x8F,
75424 -0x28,0x00,0xB0,0x8F,
75425 -0x08,0x00,0xE0,0x03,
75426 -0x38,0x00,0xBD,0x27,
75427 -0x58,0x3E,0x62,0x94,
75428 -0x00,0x00,0x00,0x00,
75429 -0x02,0x00,0x42,0x30,
75430 -0xF6,0xFF,0x40,0x10,
75431 -0x00,0x00,0x00,0x00,
75432 -0x79,0x3E,0x63,0x90,
75433 -0x00,0x00,0x00,0x00,
75434 -0x04,0x00,0x62,0x30,
75435 -0xF1,0xFF,0x40,0x10,
75436 -0x03,0x00,0x63,0x30,
75437 -0x0C,0x00,0x65,0x10,
75438 -0x03,0x00,0x02,0x24,
75439 -0x05,0x00,0x62,0x10,
75440 -0x21,0x20,0x00,0x00,
75441 -0x12,0x0D,0x00,0x0C,
75442 -0x21,0x28,0x00,0x00,
75443 -0xFF,0x0D,0x00,0x08,
75444 -0x00,0x00,0x00,0x00,
75445 -0x00,0x80,0x04,0x34,
75446 -0x12,0x0D,0x00,0x0C,
75447 -0x02,0x00,0x05,0x24,
75448 -0xFF,0x0D,0x00,0x08,
75449 -0x00,0x00,0x00,0x00,
75450 -0x00,0x80,0x04,0x34,
75451 -0x12,0x0D,0x00,0x0C,
75452 -0x01,0x00,0x05,0x24,
75453 -0xFF,0x0D,0x00,0x08,
75454 -0x00,0x00,0x00,0x00,
75455 -0xE8,0xFF,0xBD,0x27,
75456 -0x02,0x80,0x06,0x3C,
75457 -0x14,0x00,0xBF,0xAF,
75458 -0x10,0x00,0xB0,0xAF,
75459 -0x88,0x58,0xC2,0x24,
75460 -0x01,0x00,0x44,0x90,
75461 -0x88,0x58,0xC3,0x90,
75462 -0x02,0x00,0x45,0x90,
75463 -0x03,0x00,0x46,0x90,
75464 -0x05,0x00,0x47,0x90,
75465 -0x04,0x00,0x48,0x90,
75466 -0x00,0x22,0x04,0x00,
75467 -0x25,0x18,0x64,0x00,
75468 -0x00,0x2C,0x05,0x00,
75469 -0x25,0xB0,0x10,0x3C,
75470 -0x25,0x18,0x65,0x00,
75471 -0x00,0x36,0x06,0x00,
75472 -0x00,0x3A,0x07,0x00,
75473 -0x25,0x18,0x66,0x00,
75474 -0x58,0x00,0x02,0x36,
75475 -0x5C,0x00,0x05,0x36,
75476 -0x25,0x40,0x07,0x01,
75477 -0x02,0x80,0x04,0x3C,
75478 -0x00,0x00,0x43,0xAC,
75479 -0x84,0x58,0x84,0x24,
75480 -0x00,0x00,0xA8,0xAC,
75481 -0x19,0x4F,0x00,0x0C,
75482 -0x00,0x00,0x00,0x00,
75483 -0x94,0x00,0x03,0x36,
75484 -0x00,0x00,0x62,0xA4,
75485 -0x48,0x00,0x10,0x36,
75486 -0x00,0x00,0x02,0x8E,
75487 -0x04,0x00,0x03,0x3C,
75488 -0x14,0x00,0xBF,0x8F,
75489 -0x25,0x10,0x43,0x00,
75490 -0x00,0x00,0x02,0xAE,
75491 -0x10,0x00,0xB0,0x8F,
75492 -0x08,0x00,0xE0,0x03,
75493 -0x18,0x00,0xBD,0x27,
75494 -0xE0,0xFF,0xBD,0x27,
75495 -0x18,0x00,0xB2,0xAF,
75496 -0x21,0x90,0x80,0x00,
75497 -0x18,0x02,0x04,0x24,
75498 -0x14,0x00,0xB1,0xAF,
75499 -0x1C,0x00,0xBF,0xAF,
75500 -0x25,0x24,0x00,0x0C,
75501 -0x10,0x00,0xB0,0xAF,
75502 -0x02,0x80,0x05,0x3C,
75503 -0x02,0x80,0x04,0x3C,
75504 -0x21,0x88,0x40,0x00,
75505 -0x84,0x58,0xA5,0x24,
75506 -0xDC,0x01,0x06,0x24,
75507 -0x18,0x00,0x40,0x10,
75508 -0x98,0xDF,0x84,0x24,
75509 -0x08,0x00,0x50,0x94,
75510 -0xF8,0x01,0x02,0x24,
75511 -0x0C,0x00,0x22,0xAE,
75512 -0x02,0x80,0x02,0x3C,
75513 -0x0A,0x00,0x03,0x24,
75514 -0x25,0x80,0x02,0x02,
75515 -0x14,0x00,0x23,0xAE,
75516 -0x3C,0x00,0x04,0x26,
75517 -0x10,0x52,0x00,0x0C,
75518 -0x20,0x00,0x10,0x26,
75519 -0x18,0x00,0x12,0xAE,
75520 -0x21,0x20,0x20,0x02,
75521 -0x30,0x09,0x00,0x0C,
75522 -0x14,0x00,0x12,0xAE,
75523 -0x02,0x80,0x04,0x3C,
75524 -0x21,0x28,0x40,0x02,
75525 -0x1C,0x00,0xBF,0x8F,
75526 -0x18,0x00,0xB2,0x8F,
75527 -0x14,0x00,0xB1,0x8F,
75528 -0x10,0x00,0xB0,0x8F,
75529 -0xA4,0xDF,0x84,0x24,
75530 -0x2F,0x55,0x00,0x08,
75531 -0x20,0x00,0xBD,0x27,
75532 -0x02,0x80,0x05,0x3C,
75533 -0x1C,0x00,0xBF,0x8F,
75534 -0x18,0x00,0xB2,0x8F,
75535 -0x14,0x00,0xB1,0x8F,
75536 -0x10,0x00,0xB0,0x8F,
75537 -0x5C,0xEA,0xA5,0x24,
75538 -0x2F,0x55,0x00,0x08,
75539 -0x20,0x00,0xBD,0x27,
75540 -0xE0,0xFF,0xBD,0x27,
75541 -0x10,0x00,0xB0,0xAF,
75542 -0x21,0x80,0x80,0x00,
75543 -0x14,0x00,0xB1,0xAF,
75544 -0x18,0x00,0xBF,0xAF,
75545 -0x25,0x24,0x00,0x0C,
75546 -0x28,0x00,0x04,0x24,
75547 -0x02,0x80,0x04,0x3C,
75548 -0x21,0x88,0x40,0x00,
75549 -0x21,0x28,0x00,0x02,
75550 -0x06,0x00,0x06,0x24,
75551 -0x15,0x00,0x40,0x10,
75552 -0xB4,0xDF,0x84,0x24,
75553 -0x08,0x00,0x44,0x94,
75554 -0x08,0x00,0x02,0x24,
75555 -0x0C,0x00,0x22,0xAE,
75556 -0x02,0x80,0x02,0x3C,
75557 -0x0C,0x00,0x03,0x24,
75558 -0x25,0x20,0x82,0x00,
75559 -0x14,0x00,0x23,0xAE,
75560 -0x10,0x52,0x00,0x0C,
75561 -0x20,0x00,0x84,0x24,
75562 -0x30,0x09,0x00,0x0C,
75563 -0x21,0x20,0x20,0x02,
75564 -0x02,0x80,0x04,0x3C,
75565 -0x2F,0x55,0x00,0x0C,
75566 -0xC0,0xDF,0x84,0x24,
75567 -0x21,0x10,0x00,0x00,
75568 -0x18,0x00,0xBF,0x8F,
75569 -0x14,0x00,0xB1,0x8F,
75570 -0x10,0x00,0xB0,0x8F,
75571 -0x08,0x00,0xE0,0x03,
75572 -0x20,0x00,0xBD,0x27,
75573 -0x02,0x80,0x05,0x3C,
75574 -0x2F,0x55,0x00,0x0C,
75575 -0x6C,0xEA,0xA5,0x24,
75576 -0x92,0x0E,0x00,0x08,
75577 -0xFF,0xFF,0x02,0x24,
75578 -0xD8,0xFF,0xBD,0x27,
75579 -0x1C,0x00,0xB3,0xAF,
75580 -0x21,0x98,0x80,0x00,
75581 -0x2C,0x00,0x04,0x24,
75582 -0x18,0x00,0xB2,0xAF,
75583 -0x14,0x00,0xB1,0xAF,
75584 -0x21,0x90,0xA0,0x00,
75585 -0x20,0x00,0xBF,0xAF,
75586 -0x25,0x24,0x00,0x0C,
75587 -0x10,0x00,0xB0,0xAF,
75588 -0x02,0x80,0x04,0x3C,
75589 -0x02,0x80,0x05,0x3C,
75590 -0x21,0x88,0x40,0x00,
75591 -0xD8,0xDF,0x84,0x24,
75592 -0x21,0x30,0x40,0x02,
75593 -0x19,0x00,0x40,0x10,
75594 -0x84,0xEA,0xA5,0x24,
75595 -0x05,0x00,0x65,0x92,
75596 -0x2F,0x55,0x00,0x0C,
75597 -0x00,0x00,0x00,0x00,
75598 -0x08,0x00,0x30,0x96,
75599 -0x02,0x80,0x02,0x3C,
75600 -0x0B,0x00,0x03,0x24,
75601 -0x25,0x80,0x02,0x02,
75602 -0x20,0x00,0x10,0x26,
75603 -0x0C,0x00,0x02,0x24,
75604 -0x21,0x20,0x00,0x02,
75605 -0x0C,0x00,0x22,0xAE,
75606 -0x14,0x00,0x23,0xAE,
75607 -0x21,0x28,0x60,0x02,
75608 -0x10,0x52,0x00,0x0C,
75609 -0x06,0x00,0x06,0x24,
75610 -0x08,0x00,0x12,0xAE,
75611 -0x21,0x20,0x20,0x02,
75612 -0x20,0x00,0xBF,0x8F,
75613 -0x1C,0x00,0xB3,0x8F,
75614 -0x18,0x00,0xB2,0x8F,
75615 -0x14,0x00,0xB1,0x8F,
75616 -0x10,0x00,0xB0,0x8F,
75617 -0x30,0x09,0x00,0x08,
75618 -0x28,0x00,0xBD,0x27,
75619 -0x02,0x80,0x04,0x3C,
75620 -0x20,0x00,0xBF,0x8F,
75621 -0x1C,0x00,0xB3,0x8F,
75622 -0x18,0x00,0xB2,0x8F,
75623 -0x14,0x00,0xB1,0x8F,
75624 -0x10,0x00,0xB0,0x8F,
75625 -0xCC,0xDF,0x84,0x24,
75626 -0x2F,0x55,0x00,0x08,
75627 -0x28,0x00,0xBD,0x27,
75628 -0xE0,0xFF,0xBD,0x27,
75629 -0x14,0x00,0xB1,0xAF,
75630 -0x18,0x00,0xBF,0xAF,
75631 -0x10,0x00,0xB0,0xAF,
75632 -0x02,0x80,0x02,0x3C,
75633 -0xF6,0x5E,0x43,0x90,
75634 -0x02,0x80,0x11,0x3C,
75635 -0x04,0x00,0x04,0x24,
75636 -0x0F,0x00,0x63,0x30,
75637 -0x04,0x00,0x63,0x28,
75638 -0x36,0x00,0x60,0x14,
75639 -0x01,0x00,0x05,0x24,
75640 -0x02,0x80,0x02,0x3C,
75641 -0x30,0x1F,0x50,0x24,
75642 -0x2C,0xE0,0x22,0x8E,
75643 -0x0F,0x00,0x05,0x3C,
75644 -0xFF,0xFF,0xA5,0x34,
75645 -0x24,0x00,0x04,0x24,
75646 -0x12,0x00,0x40,0x14,
75647 -0x60,0x00,0x06,0x24,
75648 -0x0F,0x00,0x05,0x3C,
75649 -0x5F,0x47,0x00,0x0C,
75650 -0xFF,0xFF,0xA5,0x34,
75651 -0x01,0x00,0x02,0x24,
75652 -0x2C,0xE0,0x22,0xAE,
75653 -0xD0,0x07,0x03,0x24,
75654 -0x02,0x80,0x02,0x3C,
75655 -0x70,0x58,0x43,0xAC,
75656 -0x02,0x80,0x02,0x3C,
75657 -0xF5,0x5E,0x44,0x90,
75658 -0x18,0x00,0xBF,0x8F,
75659 -0x14,0x00,0xB1,0x8F,
75660 -0x10,0x00,0xB0,0x8F,
75661 -0x01,0x00,0x05,0x24,
75662 -0xFF,0x00,0x84,0x30,
75663 -0x64,0x31,0x00,0x08,
75664 -0x20,0x00,0xBD,0x27,
75665 -0x8A,0x47,0x00,0x0C,
75666 -0x00,0x00,0x00,0x00,
75667 -0x9C,0x3E,0x04,0x92,
75668 -0xFF,0x00,0x43,0x30,
75669 -0x00,0x2C,0x03,0x00,
75670 -0x0A,0x00,0x64,0x10,
75671 -0x9D,0x3E,0x02,0xA2,
75672 -0x02,0x80,0x02,0x3C,
75673 -0x49,0xF3,0x44,0x90,
75674 -0x00,0x00,0x00,0x00,
75675 -0x00,0x22,0x04,0x00,
75676 -0x6B,0x1E,0x00,0x0C,
75677 -0x25,0x20,0xA4,0x00,
75678 -0x9D,0x3E,0x03,0x92,
75679 -0x00,0x00,0x00,0x00,
75680 -0x9C,0x3E,0x03,0xA2,
75681 -0x10,0x27,0x02,0x24,
75682 -0x40,0x39,0x02,0xAE,
75683 -0x02,0x80,0x02,0x3C,
75684 -0xF5,0x5E,0x44,0x90,
75685 -0x2C,0xE0,0x20,0xAE,
75686 -0x18,0x00,0xBF,0x8F,
75687 -0x14,0x00,0xB1,0x8F,
75688 -0x10,0x00,0xB0,0x8F,
75689 -0x01,0x00,0x05,0x24,
75690 -0xFF,0x00,0x84,0x30,
75691 -0x64,0x31,0x00,0x08,
75692 -0x20,0x00,0xBD,0x27,
75693 -0x64,0x31,0x00,0x0C,
75694 -0x00,0x00,0x00,0x00,
75695 -0xDB,0x0E,0x00,0x08,
75696 -0x02,0x80,0x02,0x3C,
75697 -0xB8,0xFF,0xBD,0x27,
75698 -0x00,0x01,0x04,0x24,
75699 -0x3C,0x00,0xB3,0xAF,
75700 -0x38,0x00,0xB2,0xAF,
75701 -0x34,0x00,0xB1,0xAF,
75702 -0x40,0x00,0xBF,0xAF,
75703 -0x30,0x00,0xB0,0xAF,
75704 -0x25,0x24,0x00,0x0C,
75705 -0x02,0x80,0x13,0x3C,
75706 -0x02,0x80,0x04,0x3C,
75707 -0x21,0x88,0x40,0x00,
75708 -0xF0,0xDD,0x65,0x26,
75709 -0x06,0x00,0x06,0x24,
75710 -0x0C,0x00,0x52,0x24,
75711 -0x4C,0x00,0x40,0x10,
75712 -0x30,0xE0,0x84,0x24,
75713 -0x08,0x00,0x50,0x94,
75714 -0x02,0x80,0x02,0x3C,
75715 -0x25,0x80,0x02,0x02,
75716 -0x24,0x00,0x04,0x26,
75717 -0x10,0x52,0x00,0x0C,
75718 -0x20,0x00,0x00,0xA6,
75719 -0x02,0x80,0x05,0x3C,
75720 -0x2A,0x00,0x04,0x26,
75721 -0x18,0x3B,0xA5,0x24,
75722 -0x10,0x52,0x00,0x0C,
75723 -0x06,0x00,0x06,0x24,
75724 -0x30,0x00,0x04,0x26,
75725 -0xF0,0xDD,0x65,0x26,
75726 -0x10,0x52,0x00,0x0C,
75727 -0x06,0x00,0x06,0x24,
75728 -0x20,0x00,0x03,0x96,
75729 -0x18,0x00,0x02,0x24,
75730 -0x02,0x80,0x04,0x3C,
75731 -0x03,0xFF,0x63,0x30,
75732 -0x40,0x00,0x63,0x34,
75733 -0x20,0x00,0x03,0xA6,
75734 -0x30,0x1F,0x84,0x24,
75735 -0x0C,0x00,0x22,0xAE,
75736 -0xF8,0x1D,0x82,0x94,
75737 -0x20,0x00,0x06,0x26,
75738 -0x02,0x80,0x07,0x3C,
75739 -0xFF,0x0F,0x43,0x30,
75740 -0x00,0x19,0x03,0x00,
75741 -0x02,0x2A,0x03,0x00,
75742 -0x01,0x00,0x42,0x24,
75743 -0xF8,0x1D,0x82,0xA4,
75744 -0x16,0x00,0xC3,0xA0,
75745 -0x17,0x00,0xC5,0xA0,
75746 -0x74,0x3B,0x86,0x8C,
75747 -0xA8,0x5A,0xE7,0x24,
75748 -0x38,0x00,0x04,0x26,
75749 -0x21,0x28,0x00,0x00,
75750 -0x41,0x4F,0x00,0x0C,
75751 -0x10,0x00,0xB2,0xAF,
75752 -0x18,0x00,0xA4,0x27,
75753 -0x28,0x00,0xA5,0x27,
75754 -0x21,0x50,0x00,0x0C,
75755 -0x21,0x80,0x40,0x00,
75756 -0x28,0x00,0xA3,0x8F,
75757 -0x21,0x20,0x00,0x02,
75758 -0x18,0x00,0xA7,0x27,
75759 -0x09,0x00,0x62,0x28,
75760 -0x01,0x00,0x05,0x24,
75761 -0x12,0x00,0x40,0x10,
75762 -0x08,0x00,0x06,0x24,
75763 -0x21,0x20,0x00,0x02,
75764 -0x21,0x30,0x60,0x00,
75765 -0x01,0x00,0x05,0x24,
75766 -0x18,0x00,0xA7,0x27,
75767 -0x41,0x4F,0x00,0x0C,
75768 -0x10,0x00,0xB2,0xAF,
75769 -0x21,0x20,0x20,0x02,
75770 -0x01,0x00,0x05,0x24,
75771 -0xB9,0x0C,0x00,0x0C,
75772 -0x21,0x30,0x00,0x00,
75773 -0x40,0x00,0xBF,0x8F,
75774 -0x3C,0x00,0xB3,0x8F,
75775 -0x38,0x00,0xB2,0x8F,
75776 -0x34,0x00,0xB1,0x8F,
75777 -0x30,0x00,0xB0,0x8F,
75778 -0x08,0x00,0xE0,0x03,
75779 -0x48,0x00,0xBD,0x27,
75780 -0x41,0x4F,0x00,0x0C,
75781 -0x10,0x00,0xB2,0xAF,
75782 -0x28,0x00,0xA6,0x8F,
75783 -0x21,0x20,0x40,0x00,
75784 -0x32,0x00,0x05,0x24,
75785 -0xF8,0xFF,0xC6,0x24,
75786 -0x59,0x0F,0x00,0x08,
75787 -0x20,0x00,0xA7,0x27,
75788 -0x02,0x80,0x05,0x3C,
75789 -0x2F,0x55,0x00,0x0C,
75790 -0x9C,0xEA,0xA5,0x24,
75791 -0x40,0x00,0xBF,0x8F,
75792 -0x3C,0x00,0xB3,0x8F,
75793 -0x38,0x00,0xB2,0x8F,
75794 -0x34,0x00,0xB1,0x8F,
75795 -0x30,0x00,0xB0,0x8F,
75796 -0x08,0x00,0xE0,0x03,
75797 -0x48,0x00,0xBD,0x27,
75798 -0xC8,0xFF,0xBD,0x27,
75799 -0x18,0x00,0xB2,0xAF,
75800 -0x10,0x00,0xB0,0xAF,
75801 -0x34,0x00,0xBF,0xAF,
75802 -0x30,0x00,0xBE,0xAF,
75803 -0x2C,0x00,0xB7,0xAF,
75804 -0x28,0x00,0xB6,0xAF,
75805 -0x24,0x00,0xB5,0xAF,
75806 -0x20,0x00,0xB4,0xAF,
75807 -0x1C,0x00,0xB3,0xAF,
75808 -0x14,0x00,0xB1,0xAF,
75809 -0x21,0x80,0x80,0x00,
75810 -0x45,0x00,0xA0,0x14,
75811 -0x21,0x90,0x00,0x00,
75812 -0x08,0x00,0x82,0x90,
75813 -0x02,0x80,0x13,0x3C,
75814 -0x30,0x1F,0x63,0x26,
75815 -0x0F,0x00,0x42,0x30,
75816 -0x14,0x3E,0x62,0xAC,
75817 -0x25,0xB0,0x02,0x3C,
75818 -0x0A,0x00,0x10,0x26,
75819 -0xD0,0x01,0x57,0x34,
75820 -0x02,0x80,0x14,0x3C,
75821 -0xD8,0x01,0x5E,0x34,
75822 -0xDC,0x01,0x55,0x34,
75823 -0xD4,0x01,0x56,0x34,
75824 -0x03,0x00,0x11,0x24,
75825 -0x00,0x00,0x06,0x92,
75826 -0x30,0x1F,0x62,0x26,
75827 -0x0C,0x3E,0x47,0x90,
75828 -0x0F,0x00,0xC3,0x30,
75829 -0x01,0x00,0x05,0x92,
75830 -0x18,0x00,0x67,0x00,
75831 -0x03,0x00,0x04,0x92,
75832 -0x02,0x00,0x02,0x92,
75833 -0x0F,0x00,0xA7,0x30,
75834 -0x00,0x3A,0x07,0x00,
75835 -0x02,0x29,0x05,0x00,
75836 -0x00,0x22,0x04,0x00,
75837 -0x25,0x20,0x82,0x00,
75838 -0x00,0x2B,0x05,0x00,
75839 -0x42,0x11,0x06,0x00,
75840 -0x00,0x24,0x04,0x00,
75841 -0x03,0x00,0x49,0x30,
75842 -0x02,0x31,0x06,0x00,
75843 -0x01,0x00,0x02,0x24,
75844 -0x01,0x00,0xC6,0x30,
75845 -0x12,0x18,0x00,0x00,
75846 -0x0A,0x00,0x63,0x24,
75847 -0xFF,0x00,0x63,0x30,
75848 -0x25,0x18,0x67,0x00,
75849 -0x25,0x18,0x65,0x00,
75850 -0x30,0x00,0x22,0x11,
75851 -0x25,0x38,0x64,0x00,
75852 -0x02,0x00,0x22,0x29,
75853 -0x3E,0x00,0x40,0x14,
75854 -0x02,0x00,0x02,0x24,
75855 -0x38,0x00,0x22,0x11,
75856 -0x03,0x00,0x02,0x24,
75857 -0x40,0x00,0x22,0x11,
75858 -0x00,0x00,0x00,0x00,
75859 -0x21,0x28,0x20,0x01,
75860 -0x3C,0xE0,0x84,0x26,
75861 -0x2F,0x55,0x00,0x0C,
75862 -0xFF,0xFF,0x31,0x26,
75863 -0xD9,0xFF,0x21,0x06,
75864 -0x04,0x00,0x10,0x26,
75865 -0x25,0xB0,0x02,0x3C,
75866 -0xE7,0x01,0x42,0x34,
75867 -0x00,0x00,0x52,0xA0,
75868 -0x34,0x00,0xBF,0x8F,
75869 -0x30,0x00,0xBE,0x8F,
75870 -0x2C,0x00,0xB7,0x8F,
75871 -0x28,0x00,0xB6,0x8F,
75872 -0x24,0x00,0xB5,0x8F,
75873 -0x20,0x00,0xB4,0x8F,
75874 -0x1C,0x00,0xB3,0x8F,
75875 -0x18,0x00,0xB2,0x8F,
75876 -0x14,0x00,0xB1,0x8F,
75877 -0x10,0x00,0xB0,0x8F,
75878 -0x08,0x00,0xE0,0x03,
75879 -0x38,0x00,0xBD,0x27,
75880 -0x02,0x80,0x13,0x3C,
75881 -0x08,0x00,0x83,0x90,
75882 -0x30,0x1F,0x62,0x26,
75883 -0x14,0x3E,0x44,0x8C,
75884 -0x0F,0x00,0x63,0x30,
75885 -0xBB,0xFF,0x83,0x14,
75886 -0x00,0x00,0x00,0x00,
75887 -0x34,0x00,0xBF,0x8F,
75888 -0x30,0x00,0xBE,0x8F,
75889 -0x2C,0x00,0xB7,0x8F,
75890 -0x28,0x00,0xB6,0x8F,
75891 -0x24,0x00,0xB5,0x8F,
75892 -0x20,0x00,0xB4,0x8F,
75893 -0x1C,0x00,0xB3,0x8F,
75894 -0x18,0x00,0xB2,0x8F,
75895 -0x14,0x00,0xB1,0x8F,
75896 -0x10,0x00,0xB0,0x8F,
75897 -0x08,0x00,0xE0,0x03,
75898 -0x38,0x00,0xBD,0x27,
75899 -0x00,0x00,0xA7,0xAE,
75900 -0x21,0x20,0x00,0x00,
75901 -0x25,0xB0,0x08,0x3C,
75902 -0x07,0x10,0x92,0x00,
75903 -0x01,0x00,0x42,0x30,
75904 -0x01,0x00,0x84,0x24,
75905 -0x02,0x00,0x40,0x10,
75906 -0x03,0x00,0x85,0x2C,
75907 -0xD0,0x01,0x07,0xAD,
75908 -0xF9,0xFF,0xA0,0x14,
75909 -0x04,0x00,0x08,0x25,
75910 -0xB6,0x0F,0x00,0x08,
75911 -0x21,0x28,0x20,0x01,
75912 -0x0D,0x00,0xC0,0x10,
75913 -0x00,0x00,0x00,0x00,
75914 -0xB5,0x0F,0x00,0x08,
75915 -0x02,0x00,0x52,0x36,
75916 -0xC7,0xFF,0x20,0x15,
75917 -0x21,0x28,0x20,0x01,
75918 -0x0D,0x00,0xC0,0x10,
75919 -0x00,0x00,0x00,0x00,
75920 -0xB6,0x0F,0x00,0x08,
75921 -0x04,0x00,0x52,0x36,
75922 -0x06,0x00,0xC0,0x10,
75923 -0x00,0x00,0x00,0x00,
75924 -0xB5,0x0F,0x00,0x08,
75925 -0x01,0x00,0x52,0x36,
75926 -0x00,0x00,0xC7,0xAE,
75927 -0xB6,0x0F,0x00,0x08,
75928 -0x21,0x28,0x20,0x01,
75929 -0x00,0x00,0xE7,0xAE,
75930 -0xB6,0x0F,0x00,0x08,
75931 -0x21,0x28,0x20,0x01,
75932 -0x00,0x00,0xC7,0xAF,
75933 -0xB6,0x0F,0x00,0x08,
75934 -0x21,0x28,0x20,0x01,
75935 -0xC8,0xFF,0xBD,0x27,
75936 -0x1C,0x00,0xB1,0xAF,
75937 -0x02,0x80,0x02,0x3C,
75938 -0x21,0x88,0x80,0x00,
75939 -0x00,0x01,0x04,0x24,
75940 -0x30,0x00,0xB6,0xAF,
75941 -0x24,0x00,0xB3,0xAF,
75942 -0x34,0x00,0xBF,0xAF,
75943 -0x2C,0x00,0xB5,0xAF,
75944 -0x28,0x00,0xB4,0xAF,
75945 -0x20,0x00,0xB2,0xAF,
75946 -0x18,0x00,0xB0,0xAF,
75947 -0x25,0x24,0x00,0x0C,
75948 -0x84,0x58,0x56,0x24,
75949 -0x74,0x00,0x40,0x10,
75950 -0x21,0x98,0x40,0x00,
75951 -0x08,0x00,0x50,0x94,
75952 -0x02,0x80,0x02,0x3C,
75953 -0x21,0x28,0x20,0x02,
75954 -0x25,0x80,0x02,0x02,
75955 -0x24,0x00,0x04,0x26,
75956 -0x20,0x00,0x00,0xA6,
75957 -0x10,0x52,0x00,0x0C,
75958 -0x06,0x00,0x06,0x24,
75959 -0x02,0x80,0x05,0x3C,
75960 -0x2A,0x00,0x04,0x26,
75961 -0x18,0x3B,0xA5,0x24,
75962 -0x10,0x52,0x00,0x0C,
75963 -0x06,0x00,0x06,0x24,
75964 -0x02,0x80,0x05,0x3C,
75965 -0x06,0x00,0x06,0x24,
75966 -0x30,0x00,0x04,0x26,
75967 -0x10,0x52,0x00,0x0C,
75968 -0x88,0x58,0xA5,0x24,
75969 -0x20,0x00,0x03,0x96,
75970 -0x02,0x80,0x04,0x3C,
75971 -0x30,0x1F,0x84,0x24,
75972 -0x03,0xFF,0x63,0x30,
75973 -0x50,0x00,0x63,0x34,
75974 -0x20,0x00,0x03,0xA6,
75975 -0xF8,0x1D,0x82,0x94,
75976 -0x20,0x00,0x12,0x26,
75977 -0x74,0x00,0xD1,0x26,
75978 -0xFF,0x0F,0x43,0x30,
75979 -0x00,0x19,0x03,0x00,
75980 -0x01,0x00,0x42,0x24,
75981 -0xF8,0x1D,0x82,0xA4,
75982 -0x02,0x2A,0x03,0x00,
75983 -0x20,0x00,0x02,0x24,
75984 -0x16,0x00,0x43,0xA2,
75985 -0x17,0x00,0x45,0xA2,
75986 -0x21,0x20,0x20,0x02,
75987 -0x17,0x4F,0x00,0x0C,
75988 -0x0C,0x00,0x62,0xAE,
75989 -0x40,0x00,0x12,0x26,
75990 -0x21,0x20,0x40,0x02,
75991 -0x21,0x28,0x40,0x00,
75992 -0x10,0x52,0x00,0x0C,
75993 -0x02,0x00,0x06,0x24,
75994 -0x0C,0x00,0x63,0x8E,
75995 -0x21,0x20,0x20,0x02,
75996 -0x42,0x00,0x12,0x26,
75997 -0x02,0x00,0x63,0x24,
75998 -0x32,0x4F,0x00,0x0C,
75999 -0x0C,0x00,0x63,0xAE,
76000 -0x21,0x28,0x40,0x00,
76001 -0x21,0x20,0x40,0x02,
76002 -0x10,0x52,0x00,0x0C,
76003 -0x02,0x00,0x06,0x24,
76004 -0x0C,0x00,0x63,0x8E,
76005 -0x44,0x00,0x04,0x26,
76006 -0x0C,0x00,0x75,0x26,
76007 -0x02,0x00,0x63,0x24,
76008 -0x0C,0x00,0x63,0xAE,
76009 -0x0C,0x00,0xC6,0x8E,
76010 -0x21,0x28,0x00,0x00,
76011 -0x10,0x00,0xC7,0x26,
76012 -0x60,0x00,0xD0,0x26,
76013 -0x41,0x4F,0x00,0x0C,
76014 -0x10,0x00,0xB5,0xAF,
76015 -0x21,0x20,0x00,0x02,
76016 -0x37,0x50,0x00,0x0C,
76017 -0x21,0x90,0x40,0x00,
76018 -0x09,0x00,0x51,0x2C,
76019 -0x08,0x00,0x06,0x24,
76020 -0x21,0x20,0x40,0x02,
76021 -0x0B,0x30,0x51,0x00,
76022 -0x21,0x38,0x00,0x02,
76023 -0x01,0x00,0x05,0x24,
76024 -0x21,0xA0,0x40,0x00,
76025 -0x41,0x4F,0x00,0x0C,
76026 -0x10,0x00,0xB5,0xAF,
76027 -0x21,0x20,0x40,0x00,
76028 -0x03,0x00,0x05,0x24,
76029 -0x01,0x00,0x06,0x24,
76030 -0x48,0x00,0xC7,0x26,
76031 -0x41,0x4F,0x00,0x0C,
76032 -0x10,0x00,0xB5,0xAF,
76033 -0x0D,0x00,0x20,0x12,
76034 -0x21,0x20,0x60,0x02,
76035 -0x34,0x00,0xBF,0x8F,
76036 -0x30,0x00,0xB6,0x8F,
76037 -0x2C,0x00,0xB5,0x8F,
76038 -0x28,0x00,0xB4,0x8F,
76039 -0x24,0x00,0xB3,0x8F,
76040 -0x20,0x00,0xB2,0x8F,
76041 -0x1C,0x00,0xB1,0x8F,
76042 -0x18,0x00,0xB0,0x8F,
76043 -0x01,0x00,0x05,0x24,
76044 -0x21,0x30,0x00,0x00,
76045 -0xB9,0x0C,0x00,0x08,
76046 -0x38,0x00,0xBD,0x27,
76047 -0xF8,0xFF,0x86,0x26,
76048 -0x21,0x20,0x40,0x00,
76049 -0x68,0x00,0xC7,0x26,
76050 -0x32,0x00,0x05,0x24,
76051 -0x41,0x4F,0x00,0x0C,
76052 -0x10,0x00,0xB5,0xAF,
76053 -0x21,0x20,0x60,0x02,
76054 -0x34,0x00,0xBF,0x8F,
76055 -0x30,0x00,0xB6,0x8F,
76056 -0x2C,0x00,0xB5,0x8F,
76057 -0x28,0x00,0xB4,0x8F,
76058 -0x24,0x00,0xB3,0x8F,
76059 -0x20,0x00,0xB2,0x8F,
76060 -0x1C,0x00,0xB1,0x8F,
76061 -0x18,0x00,0xB0,0x8F,
76062 -0x01,0x00,0x05,0x24,
76063 -0x21,0x30,0x00,0x00,
76064 -0xB9,0x0C,0x00,0x08,
76065 -0x38,0x00,0xBD,0x27,
76066 -0x02,0x80,0x04,0x3C,
76067 -0x02,0x80,0x05,0x3C,
76068 -0x34,0x00,0xBF,0x8F,
76069 -0x30,0x00,0xB6,0x8F,
76070 -0x2C,0x00,0xB5,0x8F,
76071 -0x28,0x00,0xB4,0x8F,
76072 -0x24,0x00,0xB3,0x8F,
76073 -0x20,0x00,0xB2,0x8F,
76074 -0x1C,0x00,0xB1,0x8F,
76075 -0x18,0x00,0xB0,0x8F,
76076 -0x98,0xE0,0x84,0x24,
76077 -0xAC,0xEA,0xA5,0x24,
76078 -0x2F,0x55,0x00,0x08,
76079 -0x38,0x00,0xBD,0x27,
76080 -0xB0,0xFF,0xBD,0x27,
76081 -0x50,0x00,0xA4,0xAF,
76082 -0xFC,0x01,0x04,0x24,
76083 -0x4C,0x00,0xBF,0xAF,
76084 -0x48,0x00,0xBE,0xAF,
76085 -0x44,0x00,0xB7,0xAF,
76086 -0x40,0x00,0xB6,0xAF,
76087 -0x3C,0x00,0xB5,0xAF,
76088 -0x38,0x00,0xB4,0xAF,
76089 -0x34,0x00,0xB3,0xAF,
76090 -0x30,0x00,0xB2,0xAF,
76091 -0x2C,0x00,0xB1,0xAF,
76092 -0x25,0x24,0x00,0x0C,
76093 -0x28,0x00,0xB0,0xAF,
76094 -0xE3,0x00,0x40,0x10,
76095 -0x1C,0x00,0xA2,0xAF,
76096 -0x50,0x00,0xA6,0x8F,
76097 -0x02,0x80,0x03,0x3C,
76098 -0xD0,0xEA,0x62,0x24,
76099 -0xD0,0xEA,0x68,0x90,
76100 -0x01,0x00,0x44,0x90,
76101 -0x02,0x00,0xC3,0x90,
76102 -0x02,0x00,0x45,0x90,
76103 -0x03,0x00,0x46,0x90,
76104 -0x1C,0x00,0xA2,0x8F,
76105 -0x00,0x22,0x04,0x00,
76106 -0x25,0x20,0x88,0x00,
76107 -0x08,0x00,0x47,0x94,
76108 -0x50,0x00,0xA2,0x8F,
76109 -0x00,0x2C,0x05,0x00,
76110 -0x0F,0x00,0x63,0x30,
76111 -0x00,0x00,0x48,0x8C,
76112 -0x02,0x80,0x02,0x3C,
76113 -0x25,0x38,0xE2,0x00,
76114 -0x50,0x00,0xA2,0x8F,
76115 -0x25,0x28,0xA4,0x00,
76116 -0x00,0x36,0x06,0x00,
76117 -0xC0,0x18,0x03,0x00,
76118 -0x21,0x18,0x62,0x00,
76119 -0x25,0x30,0xC5,0x00,
76120 -0x02,0x80,0x02,0x3C,
76121 -0x10,0x00,0xA6,0xAF,
76122 -0xDD,0x5A,0x55,0x24,
76123 -0x22,0x00,0x66,0x24,
76124 -0x18,0x00,0x62,0x24,
76125 -0x28,0x00,0x76,0x24,
76126 -0x02,0x80,0x03,0x3C,
76127 -0x20,0x00,0xF7,0x24,
76128 -0xFF,0x3F,0x1E,0x31,
76129 -0x21,0x90,0x00,0x00,
76130 -0x30,0x1F,0x73,0x24,
76131 -0x01,0x00,0x14,0x24,
76132 -0x21,0x80,0x00,0x00,
76133 -0x24,0x00,0xA6,0xAF,
76134 -0xD0,0x10,0x00,0x08,
76135 -0x20,0x00,0xA2,0xAF,
76136 -0x39,0x52,0x00,0x0C,
76137 -0x07,0x00,0x10,0x26,
76138 -0x19,0x00,0x40,0x10,
76139 -0x40,0x00,0x43,0x2A,
76140 -0x0E,0x00,0x60,0x10,
76141 -0xE8,0xFF,0xC2,0x27,
76142 -0x21,0x88,0x13,0x02,
76143 -0xAC,0x3B,0x22,0x92,
76144 -0x01,0x00,0x52,0x26,
76145 -0x21,0x20,0x15,0x02,
76146 -0x21,0x28,0xC0,0x02,
76147 -0xF4,0xFF,0x54,0x10,
76148 -0x06,0x00,0x06,0x24,
76149 -0x21,0x20,0x15,0x02,
76150 -0x21,0x28,0xC0,0x02,
76151 -0x10,0x52,0x00,0x0C,
76152 -0x06,0x00,0x06,0x24,
76153 -0xAC,0x3B,0x34,0xA2,
76154 -0xE8,0xFF,0xC2,0x27,
76155 -0x69,0x01,0x43,0x28,
76156 -0x16,0x00,0x60,0x14,
76157 -0x18,0x00,0xA2,0xAF,
76158 -0x02,0x80,0x06,0x3C,
76159 -0x30,0x1F,0xC3,0x24,
76160 -0xA8,0x3B,0x62,0x8C,
76161 -0x00,0x00,0x00,0x00,
76162 -0x01,0x00,0x42,0x24,
76163 -0xA8,0x3B,0x62,0xAC,
76164 -0x1C,0x00,0xA4,0x8F,
76165 -0x3D,0x24,0x00,0x0C,
76166 -0x00,0x00,0x00,0x00,
76167 -0x4C,0x00,0xBF,0x8F,
76168 -0x48,0x00,0xBE,0x8F,
76169 -0x44,0x00,0xB7,0x8F,
76170 -0x40,0x00,0xB6,0x8F,
76171 -0x3C,0x00,0xB5,0x8F,
76172 -0x38,0x00,0xB4,0x8F,
76173 -0x34,0x00,0xB3,0x8F,
76174 -0x30,0x00,0xB2,0x8F,
76175 -0x2C,0x00,0xB1,0x8F,
76176 -0x28,0x00,0xB0,0x8F,
76177 -0x08,0x00,0xE0,0x03,
76178 -0x50,0x00,0xBD,0x27,
76179 -0x21,0x20,0xE0,0x02,
76180 -0x21,0x28,0x00,0x00,
76181 -0xFF,0x51,0x00,0x0C,
76182 -0xDC,0x01,0x06,0x24,
76183 -0x20,0x00,0xA2,0x8F,
76184 -0x74,0x00,0xF4,0x26,
76185 -0x21,0x20,0x80,0x02,
76186 -0x18,0x00,0x45,0x24,
76187 -0x18,0x00,0xA2,0x8F,
76188 -0x80,0x00,0xF1,0x26,
76189 -0x74,0x00,0x42,0x24,
76190 -0x00,0x00,0xE2,0xAE,
76191 -0x18,0x00,0xA3,0x8F,
76192 -0x00,0x00,0x00,0x00,
76193 -0x21,0x30,0x60,0x00,
76194 -0x10,0x52,0x00,0x0C,
76195 -0x70,0x00,0xE3,0xAE,
76196 -0x70,0x00,0xE7,0x8E,
76197 -0x21,0x20,0x20,0x02,
76198 -0x21,0x28,0x00,0x00,
76199 -0xF4,0xFF,0xE7,0x24,
76200 -0x55,0x1D,0x00,0x0C,
76201 -0x18,0x00,0xA6,0x27,
76202 -0xD9,0xFF,0x40,0x10,
76203 -0x21,0x80,0x40,0x00,
76204 -0x02,0x80,0x03,0x3C,
76205 -0x30,0x1F,0x62,0x24,
76206 -0x74,0x3B,0x46,0x8C,
76207 -0x00,0x00,0x00,0x00,
76208 -0x0A,0x00,0xC0,0x18,
76209 -0x00,0x00,0x00,0x00,
76210 -0x18,0x00,0xA2,0x8F,
76211 -0x00,0x00,0x00,0x00,
76212 -0xCF,0xFF,0xC2,0x14,
76213 -0x02,0x80,0x04,0x3C,
76214 -0xA8,0x5A,0x84,0x24,
76215 -0x39,0x52,0x00,0x0C,
76216 -0x02,0x00,0x05,0x26,
76217 -0xCA,0xFF,0x40,0x14,
76218 -0x00,0x00,0x00,0x00,
76219 -0x01,0x00,0x06,0x92,
76220 -0x00,0x00,0x00,0x00,
76221 -0x77,0x00,0xC0,0x14,
76222 -0x10,0x00,0xE4,0x26,
76223 -0x0C,0x00,0xE0,0xAE,
76224 -0x50,0x00,0xA6,0x8F,
76225 -0x00,0x00,0x00,0x00,
76226 -0x02,0x00,0xC2,0x94,
76227 -0x00,0x00,0x00,0x00,
76228 -0x0F,0x00,0x42,0x30,
76229 -0x04,0x00,0x42,0x28,
76230 -0x68,0x00,0x40,0x10,
76231 -0x21,0x20,0xC0,0x00,
76232 -0x34,0x00,0xE0,0xAE,
76233 -0x60,0x00,0xF3,0x26,
76234 -0x21,0x20,0x60,0x02,
76235 -0x21,0x28,0x00,0x00,
76236 -0xFF,0x51,0x00,0x0C,
76237 -0x10,0x00,0x06,0x24,
76238 -0x70,0x00,0xE7,0x8E,
76239 -0x21,0x20,0x20,0x02,
76240 -0x01,0x00,0x05,0x24,
76241 -0xF4,0xFF,0xE7,0x24,
76242 -0x55,0x1D,0x00,0x0C,
76243 -0x18,0x00,0xA6,0x27,
76244 -0x06,0x00,0x40,0x10,
76245 -0x21,0x90,0x00,0x00,
76246 -0x18,0x00,0xA6,0x8F,
76247 -0x02,0x00,0x45,0x24,
76248 -0x10,0x52,0x00,0x0C,
76249 -0x21,0x20,0x60,0x02,
76250 -0x18,0x00,0xB2,0x8F,
76251 -0x70,0x00,0xE7,0x8E,
76252 -0x21,0x20,0x20,0x02,
76253 -0x32,0x00,0x05,0x24,
76254 -0xF4,0xFF,0xE7,0x24,
76255 -0x55,0x1D,0x00,0x0C,
76256 -0x18,0x00,0xA6,0x27,
76257 -0x05,0x00,0x40,0x10,
76258 -0x21,0x20,0xF2,0x02,
76259 -0x18,0x00,0xA6,0x8F,
76260 -0x60,0x00,0x84,0x24,
76261 -0x10,0x52,0x00,0x0C,
76262 -0x02,0x00,0x45,0x24,
76263 -0x18,0x00,0xA5,0x8F,
76264 -0x21,0x20,0x60,0x02,
76265 -0x7D,0x50,0x00,0x0C,
76266 -0x21,0x28,0xB2,0x00,
76267 -0x21,0x18,0x40,0x00,
76268 -0x01,0x00,0x02,0x24,
76269 -0x3F,0x00,0x62,0x10,
76270 -0x03,0x00,0x02,0x24,
76271 -0x38,0x00,0xE2,0xAE,
76272 -0x70,0x00,0xE7,0x8E,
76273 -0x21,0x20,0x20,0x02,
76274 -0x03,0x00,0x05,0x24,
76275 -0xF4,0xFF,0xE7,0x24,
76276 -0x55,0x1D,0x00,0x0C,
76277 -0x18,0x00,0xA6,0x27,
76278 -0x48,0x00,0xE0,0xAE,
76279 -0x04,0x00,0x40,0x10,
76280 -0x3C,0x00,0xE0,0xAE,
76281 -0x02,0x00,0x42,0x90,
76282 -0x00,0x00,0x00,0x00,
76283 -0x48,0x00,0xE2,0xAE,
76284 -0x17,0x4F,0x00,0x0C,
76285 -0x21,0x20,0x80,0x02,
76286 -0x21,0x28,0x40,0x00,
76287 -0x40,0x00,0xE4,0x26,
76288 -0x10,0x52,0x00,0x0C,
76289 -0x02,0x00,0x06,0x24,
76290 -0x34,0x4F,0x00,0x0C,
76291 -0x21,0x20,0xE0,0x02,
76292 -0xFF,0xFF,0x50,0x30,
76293 -0x01,0x00,0x02,0x32,
76294 -0x22,0x00,0x40,0x10,
76295 -0x21,0x28,0xC0,0x02,
76296 -0x01,0x00,0x02,0x24,
76297 -0x5C,0x00,0xE2,0xAE,
76298 -0x24,0x00,0xA5,0x8F,
76299 -0x04,0x00,0xE4,0x26,
76300 -0x10,0x52,0x00,0x0C,
76301 -0x06,0x00,0x06,0x24,
76302 -0x10,0x00,0x02,0x32,
76303 -0x1B,0x00,0x40,0x10,
76304 -0x01,0x00,0x02,0x24,
76305 -0x30,0x00,0xE2,0xAE,
76306 -0x02,0x80,0x02,0x3C,
76307 -0x44,0x00,0xE0,0xAE,
76308 -0x30,0x1F,0x44,0x24,
76309 -0xA4,0x3B,0x82,0x8C,
76310 -0x1C,0x00,0xA6,0x8F,
76311 -0xDC,0x01,0x03,0x24,
76312 -0x01,0x00,0x42,0x24,
76313 -0xA4,0x3B,0x82,0xAC,
76314 -0x08,0x00,0x02,0x24,
76315 -0x0C,0x00,0xC3,0xAC,
76316 -0x14,0x00,0xC2,0xAC,
76317 -0x1C,0x00,0xA4,0x8F,
76318 -0x30,0x09,0x00,0x0C,
76319 -0x00,0x00,0x00,0x00,
76320 -0xE9,0x10,0x00,0x08,
76321 -0x00,0x00,0x00,0x00,
76322 -0x02,0x80,0x04,0x3C,
76323 -0x02,0x80,0x05,0x3C,
76324 -0xA4,0xE0,0x84,0x24,
76325 -0x2F,0x55,0x00,0x0C,
76326 -0xBC,0xEA,0xA5,0x24,
76327 -0xE9,0x10,0x00,0x08,
76328 -0x00,0x00,0x00,0x00,
76329 -0x6D,0x11,0x00,0x08,
76330 -0x5C,0x00,0xE0,0xAE,
76331 -0x74,0x11,0x00,0x08,
76332 -0x30,0x00,0xE0,0xAE,
76333 -0x52,0x11,0x00,0x08,
76334 -0x38,0x00,0xE3,0xAE,
76335 -0xF7,0x19,0x00,0x0C,
76336 -0x18,0x00,0xC5,0x24,
76337 -0x4C,0x1A,0x00,0x0C,
76338 -0x21,0x20,0x40,0x00,
76339 -0x2B,0x11,0x00,0x08,
76340 -0x34,0x00,0xE2,0xAE,
76341 -0x10,0x52,0x00,0x0C,
76342 -0x02,0x00,0x05,0x26,
76343 -0x01,0x00,0x03,0x92,
76344 -0x22,0x11,0x00,0x08,
76345 -0x0C,0x00,0xE3,0xAE,
76346 -0x02,0x80,0x04,0x3C,
76347 -0x84,0x58,0x84,0x24,
76348 -0xE0,0xFF,0xBD,0x27,
76349 -0x18,0x00,0xBF,0xAF,
76350 -0x17,0x4F,0x00,0x0C,
76351 -0x74,0x00,0x84,0x24,
76352 -0x21,0x28,0x40,0x00,
76353 -0x10,0x00,0xA4,0x27,
76354 -0x10,0x52,0x00,0x0C,
76355 -0x02,0x00,0x06,0x24,
76356 -0x10,0x00,0xA2,0x97,
76357 -0x25,0xB0,0x04,0x3C,
76358 -0x94,0x00,0x85,0x34,
76359 -0x9A,0x00,0x87,0x34,
76360 -0x26,0xB0,0x06,0x3C,
76361 -0x00,0x08,0x03,0x24,
76362 -0x00,0x00,0xA2,0xA4,
76363 -0x0A,0x00,0x0B,0x24,
76364 -0x00,0x00,0xE3,0xA4,
76365 -0x98,0x00,0x88,0x34,
76366 -0x96,0x00,0x89,0x34,
76367 -0x7A,0x00,0xCA,0x34,
76368 -0x50,0x00,0x02,0x24,
76369 -0x04,0x00,0x03,0x24,
76370 -0x00,0x00,0x02,0xA5,
76371 -0x00,0x00,0x2B,0xA5,
76372 -0x00,0x00,0x43,0xA1,
76373 -0x10,0x00,0xA2,0x97,
76374 -0x89,0x00,0x83,0x34,
76375 -0x14,0x00,0x07,0x24,
76376 -0x40,0x11,0x02,0x00,
76377 -0xA0,0xFF,0x42,0x24,
76378 -0xFF,0xFF,0x42,0x30,
76379 -0x9C,0x00,0x85,0x34,
76380 -0x7C,0x00,0xC6,0x34,
76381 -0x00,0x00,0xC2,0xA4,
76382 -0x44,0x00,0x84,0x34,
76383 -0x00,0x00,0x67,0xA0,
76384 -0x00,0x00,0xAB,0xA0,
76385 -0x00,0x00,0x82,0x94,
76386 -0xFF,0xFD,0x03,0x24,
76387 -0x18,0x00,0xBF,0x8F,
76388 -0x24,0x10,0x43,0x00,
76389 -0x00,0x00,0x82,0xA4,
76390 -0x00,0x00,0x83,0x94,
76391 -0x02,0x80,0x02,0x3C,
76392 -0x30,0x1F,0x42,0x24,
76393 -0x00,0x02,0x63,0x34,
76394 -0x20,0x00,0xBD,0x27,
76395 -0x8E,0x3E,0x40,0xA0,
76396 -0x00,0x00,0x83,0xA4,
76397 -0x08,0x00,0xE0,0x03,
76398 -0x0C,0x3E,0x47,0xA0,
76399 -0xD8,0xFF,0xBD,0x27,
76400 -0x10,0x00,0xB0,0xAF,
76401 -0x02,0x80,0x10,0x3C,
76402 -0x84,0x58,0x04,0x26,
76403 -0x24,0x00,0xBF,0xAF,
76404 -0x14,0x00,0xB1,0xAF,
76405 -0x20,0x00,0xB4,0xAF,
76406 -0x1C,0x00,0xB3,0xAF,
76407 -0x34,0x4F,0x00,0x0C,
76408 -0x18,0x00,0xB2,0xAF,
76409 -0xFF,0xFF,0x51,0x30,
76410 -0x84,0x58,0x04,0x26,
76411 -0x19,0x4F,0x00,0x0C,
76412 -0x02,0x80,0x10,0x3C,
76413 -0x30,0x1F,0x03,0x26,
76414 -0x01,0x00,0x24,0x32,
76415 -0x08,0x3E,0x62,0xA4,
76416 -0x03,0x00,0x80,0x14,
76417 -0x02,0x00,0x05,0x24,
76418 -0x40,0x10,0x11,0x00,
76419 -0x04,0x00,0x45,0x30,
76420 -0x02,0x00,0x02,0x24,
76421 -0x59,0x00,0xA2,0x10,
76422 -0x30,0x1F,0x02,0x26,
76423 -0x0F,0x00,0x80,0x10,
76424 -0x02,0x00,0x03,0x24,
76425 -0x04,0x00,0x02,0x24,
76426 -0x11,0x00,0x62,0x10,
76427 -0x30,0x1F,0x13,0x26,
76428 -0x02,0x80,0x04,0x3C,
76429 -0x21,0x28,0x20,0x02,
76430 -0x24,0x00,0xBF,0x8F,
76431 -0x20,0x00,0xB4,0x8F,
76432 -0x1C,0x00,0xB3,0x8F,
76433 -0x18,0x00,0xB2,0x8F,
76434 -0x14,0x00,0xB1,0x8F,
76435 -0x10,0x00,0xB0,0x8F,
76436 -0x18,0xE1,0x84,0x24,
76437 -0x2F,0x55,0x00,0x08,
76438 -0x28,0x00,0xBD,0x27,
76439 -0x40,0x10,0x11,0x00,
76440 -0x04,0x00,0x43,0x30,
76441 -0x04,0x00,0x02,0x24,
76442 -0xF1,0xFF,0x62,0x14,
76443 -0x30,0x1F,0x13,0x26,
76444 -0x08,0x3E,0x66,0x96,
76445 -0x30,0x3B,0x65,0x92,
76446 -0x02,0x80,0x04,0x3C,
76447 -0xB0,0x1B,0x63,0xA6,
76448 -0xD4,0xE0,0x84,0x24,
76449 -0x2F,0x55,0x00,0x0C,
76450 -0x25,0xB0,0x10,0x3C,
76451 -0x50,0x02,0x03,0x36,
76452 -0x0F,0x00,0x02,0x24,
76453 -0x00,0x00,0x62,0xA0,
76454 -0x21,0x28,0x00,0x00,
76455 -0x12,0x0D,0x00,0x0C,
76456 -0x21,0x20,0x00,0x00,
76457 -0x30,0x3B,0x64,0x92,
76458 -0x01,0x00,0x14,0x24,
76459 -0x4F,0x0C,0x00,0x0C,
76460 -0x4C,0x00,0x10,0x36,
76461 -0x02,0x80,0x11,0x3C,
76462 -0x00,0x00,0x14,0xA2,
76463 -0x21,0x0E,0x00,0x0C,
76464 -0x00,0x00,0x00,0x00,
76465 -0x37,0x50,0x00,0x0C,
76466 -0xE4,0x58,0x24,0x26,
76467 -0x21,0x28,0x40,0x00,
76468 -0xE4,0x58,0x24,0x26,
76469 -0x7D,0x50,0x00,0x0C,
76470 -0x21,0x90,0x40,0x00,
76471 -0x0F,0x00,0x50,0x30,
76472 -0xE4,0x58,0x24,0x26,
76473 -0x96,0x50,0x00,0x0C,
76474 -0x21,0x28,0x40,0x02,
76475 -0x40,0x02,0x10,0x36,
76476 -0x02,0x80,0x04,0x3C,
76477 -0x21,0x88,0x40,0x00,
76478 -0x21,0x30,0x40,0x00,
76479 -0x21,0x28,0x00,0x02,
76480 -0x2F,0x55,0x00,0x0C,
76481 -0x04,0xE1,0x84,0x24,
76482 -0x21,0x20,0x00,0x02,
76483 -0xC1,0x5B,0x00,0x0C,
76484 -0x21,0x28,0x20,0x02,
76485 -0x02,0x80,0x04,0x3C,
76486 -0x02,0x80,0x05,0x3C,
76487 -0xF3,0x3D,0x84,0x24,
76488 -0x88,0x58,0xA5,0x24,
76489 -0x06,0x00,0x06,0x24,
76490 -0x10,0x52,0x00,0x0C,
76491 -0xC2,0x1E,0x74,0xA2,
76492 -0x0F,0x48,0x00,0x0C,
76493 -0x00,0x00,0x00,0x00,
76494 -0x9C,0x11,0x00,0x0C,
76495 -0x00,0x00,0x00,0x00,
76496 -0xB0,0x1B,0x62,0x96,
76497 -0x00,0x00,0x00,0x00,
76498 -0x00,0x01,0x42,0x34,
76499 -0x53,0x1E,0x00,0x0C,
76500 -0xB0,0x1B,0x62,0xA6,
76501 -0xEC,0x38,0x62,0xAE,
76502 -0x24,0x00,0xBF,0x8F,
76503 -0x20,0x00,0xB4,0x8F,
76504 -0x1C,0x00,0xB3,0x8F,
76505 -0x18,0x00,0xB2,0x8F,
76506 -0x14,0x00,0xB1,0x8F,
76507 -0x10,0x00,0xB0,0x8F,
76508 -0x01,0x00,0x04,0x24,
76509 -0x48,0x0E,0x00,0x08,
76510 -0x28,0x00,0xBD,0x27,
76511 -0x78,0x3D,0x44,0x8C,
76512 -0x01,0x20,0x03,0x24,
76513 -0xB0,0x1B,0x43,0xA4,
76514 -0x02,0x00,0x85,0x10,
76515 -0x0C,0x00,0x03,0x24,
76516 -0x0F,0x00,0x03,0x24,
76517 -0x25,0xB0,0x02,0x3C,
76518 -0x50,0x02,0x42,0x34,
76519 -0x00,0x00,0x43,0xA0,
76520 -0x30,0x1F,0x10,0x26,
76521 -0xB0,0x1B,0x02,0x96,
76522 -0x08,0x3E,0x06,0x96,
76523 -0x30,0x3B,0x05,0x92,
76524 -0x10,0x00,0x42,0x34,
76525 -0x02,0x80,0x04,0x3C,
76526 -0xB0,0x1B,0x02,0xA6,
76527 -0x2F,0x55,0x00,0x0C,
76528 -0xB0,0xE0,0x84,0x24,
76529 -0x21,0x28,0x00,0x00,
76530 -0x12,0x0D,0x00,0x0C,
76531 -0x21,0x20,0x00,0x00,
76532 -0x30,0x3B,0x04,0x92,
76533 -0x4F,0x0C,0x00,0x0C,
76534 -0x00,0x00,0x00,0x00,
76535 -0x53,0x1E,0x00,0x0C,
76536 -0x00,0x00,0x00,0x00,
76537 -0xEC,0x38,0x02,0xAE,
76538 -0x24,0x00,0xBF,0x8F,
76539 -0x20,0x00,0xB4,0x8F,
76540 -0x1C,0x00,0xB3,0x8F,
76541 -0x18,0x00,0xB2,0x8F,
76542 -0x14,0x00,0xB1,0x8F,
76543 -0x10,0x00,0xB0,0x8F,
76544 -0x08,0x00,0xE0,0x03,
76545 -0x28,0x00,0xBD,0x27,
76546 -0x02,0x80,0x03,0x3C,
76547 -0x30,0x1F,0x65,0x24,
76548 -0x50,0x3E,0xA2,0x8C,
76549 -0x00,0x00,0x00,0x00,
76550 -0x1F,0x00,0x40,0x10,
76551 -0x00,0x00,0x00,0x00,
76552 -0x0A,0x3E,0xA2,0x90,
76553 -0x00,0x00,0x00,0x00,
76554 -0x07,0x00,0x42,0x2C,
76555 -0x1A,0x00,0x40,0x10,
76556 -0x21,0x38,0xA0,0x00,
76557 -0x98,0x3E,0xA4,0x8C,
76558 -0x94,0x3E,0xA5,0x8C,
76559 -0x21,0x30,0x00,0x00,
76560 -0x80,0x10,0x04,0x00,
76561 -0x80,0x18,0x05,0x00,
76562 -0x2B,0x10,0x45,0x00,
76563 -0x04,0x00,0x40,0x14,
76564 -0x2B,0x18,0x64,0x00,
76565 -0x01,0x00,0x06,0x24,
76566 -0x02,0x00,0x02,0x24,
76567 -0x0A,0x30,0x43,0x00,
76568 -0x0A,0x3E,0xE2,0x90,
76569 -0x94,0x3E,0xE0,0xAC,
76570 -0x98,0x3E,0xE0,0xAC,
76571 -0x40,0x18,0x02,0x00,
76572 -0x21,0x18,0x62,0x00,
76573 -0x21,0x18,0x66,0x00,
76574 -0x02,0x80,0x02,0x3C,
76575 -0x48,0xDD,0x42,0x24,
76576 -0x80,0x18,0x03,0x00,
76577 -0x21,0x18,0x62,0x00,
76578 -0x00,0x00,0x64,0x8C,
76579 -0x25,0xB0,0x02,0x3C,
76580 -0xD8,0x01,0x42,0x34,
76581 -0x00,0x00,0x44,0xAC,
76582 -0x08,0x00,0xE0,0x03,
76583 -0x00,0x00,0x00,0x00,
76584 -0xE8,0xFF,0xBD,0x27,
76585 -0x10,0x00,0xB0,0xAF,
76586 -0x14,0x00,0xBF,0xAF,
76587 -0x21,0x80,0x80,0x00,
76588 -0x02,0x00,0x84,0x90,
76589 -0x02,0x80,0x05,0x3C,
76590 -0x18,0x3B,0xA5,0x24,
76591 -0x0F,0x00,0x84,0x30,
76592 -0xC0,0x20,0x04,0x00,
76593 -0x21,0x20,0x90,0x00,
76594 -0x1C,0x00,0x84,0x24,
76595 -0x39,0x52,0x00,0x0C,
76596 -0x06,0x00,0x06,0x24,
76597 -0x06,0x00,0x40,0x10,
76598 -0x21,0x20,0x00,0x02,
76599 -0x14,0x00,0xBF,0x8F,
76600 -0x10,0x00,0xB0,0x8F,
76601 -0x21,0x10,0x00,0x00,
76602 -0x08,0x00,0xE0,0x03,
76603 -0x18,0x00,0xBD,0x27,
76604 -0x92,0x10,0x00,0x0C,
76605 -0x00,0x00,0x00,0x00,
76606 -0x14,0x00,0xBF,0x8F,
76607 -0x10,0x00,0xB0,0x8F,
76608 -0x21,0x10,0x00,0x00,
76609 -0x08,0x00,0xE0,0x03,
76610 -0x18,0x00,0xBD,0x27,
76611 -0x80,0xFF,0xBD,0x27,
76612 -0x02,0x80,0x06,0x3C,
76613 -0x02,0x80,0x08,0x3C,
76614 -0x78,0x00,0xBE,0xAF,
76615 -0x7C,0x00,0xBF,0xAF,
76616 -0x74,0x00,0xB7,0xAF,
76617 -0x70,0x00,0xB6,0xAF,
76618 -0x6C,0x00,0xB5,0xAF,
76619 -0x68,0x00,0xB4,0xAF,
76620 -0x64,0x00,0xB3,0xAF,
76621 -0x60,0x00,0xB2,0xAF,
76622 -0x5C,0x00,0xB1,0xAF,
76623 -0x58,0x00,0xB0,0xAF,
76624 -0xD0,0xEA,0xC2,0x24,
76625 -0xE4,0xEA,0x03,0x25,
76626 -0x01,0x00,0x44,0x90,
76627 -0x01,0x00,0x65,0x90,
76628 -0xD0,0xEA,0xCB,0x90,
76629 -0xE4,0xEA,0x0A,0x91,
76630 -0x02,0x00,0x47,0x90,
76631 -0x02,0x00,0x66,0x90,
76632 -0x03,0x00,0x48,0x90,
76633 -0x03,0x00,0x69,0x90,
76634 -0x00,0x22,0x04,0x00,
76635 -0x00,0x2A,0x05,0x00,
76636 -0x25,0x20,0x8B,0x00,
76637 -0x25,0x28,0xAA,0x00,
76638 -0x00,0x3C,0x07,0x00,
76639 -0x00,0x34,0x06,0x00,
76640 -0x25,0x38,0xE4,0x00,
76641 -0x25,0x30,0xC5,0x00,
76642 -0x00,0x46,0x08,0x00,
76643 -0x00,0x4E,0x09,0x00,
76644 -0x25,0x40,0x07,0x01,
76645 -0x25,0x48,0x26,0x01,
76646 -0x00,0x02,0x04,0x24,
76647 -0x40,0x00,0xA8,0xAF,
76648 -0x25,0x24,0x00,0x0C,
76649 -0x48,0x00,0xA9,0xAF,
76650 -0xB0,0x01,0x40,0x10,
76651 -0x21,0xF0,0x40,0x00,
76652 -0x02,0x80,0x02,0x3C,
76653 -0x30,0x1F,0x52,0x24,
76654 -0xC4,0x39,0x45,0x8E,
76655 -0x02,0x80,0x04,0x3C,
76656 -0x2F,0x55,0x00,0x0C,
76657 -0x34,0xE1,0x84,0x24,
76658 -0x08,0x00,0xD1,0x97,
76659 -0x02,0x80,0x02,0x3C,
76660 -0x02,0x80,0x10,0x3C,
76661 -0x25,0x88,0x22,0x02,
76662 -0x88,0x58,0x10,0x26,
76663 -0x24,0x00,0x24,0x26,
76664 -0x21,0x28,0x00,0x02,
76665 -0x20,0x00,0x20,0xA6,
76666 -0x10,0x52,0x00,0x0C,
76667 -0x06,0x00,0x06,0x24,
76668 -0x02,0x80,0x05,0x3C,
76669 -0x2A,0x00,0x24,0x26,
76670 -0x18,0x3B,0xA5,0x24,
76671 -0x10,0x52,0x00,0x0C,
76672 -0x06,0x00,0x06,0x24,
76673 -0x21,0x28,0x00,0x02,
76674 -0x06,0x00,0x06,0x24,
76675 -0x10,0x52,0x00,0x0C,
76676 -0x30,0x00,0x24,0x26,
76677 -0x18,0x00,0x03,0x24,
76678 -0x0C,0x00,0xC3,0xAF,
76679 -0xF8,0x1D,0x42,0x96,
76680 -0x20,0x00,0x25,0x26,
76681 -0x38,0x00,0x37,0x26,
76682 -0xFF,0x0F,0x43,0x30,
76683 -0x00,0x19,0x03,0x00,
76684 -0x02,0x22,0x03,0x00,
76685 -0x01,0x00,0x42,0x24,
76686 -0xF8,0x1D,0x42,0xA6,
76687 -0x17,0x00,0xA4,0xA0,
76688 -0x02,0x80,0x04,0x3C,
76689 -0x16,0x00,0xA3,0xA0,
76690 -0x32,0x4F,0x00,0x0C,
76691 -0xF8,0x58,0x84,0x24,
76692 -0x21,0x28,0x40,0x00,
76693 -0x21,0x20,0xE0,0x02,
76694 -0x10,0x52,0x00,0x0C,
76695 -0x02,0x00,0x06,0x24,
76696 -0x3A,0x00,0x24,0x26,
76697 -0x18,0x00,0xA5,0x27,
76698 -0x02,0x00,0x06,0x24,
76699 -0x03,0x00,0x02,0x24,
76700 -0x10,0x52,0x00,0x0C,
76701 -0x18,0x00,0xA2,0xA7,
76702 -0x0C,0x00,0xC3,0x8F,
76703 -0x02,0x80,0x07,0x3C,
76704 -0x3C,0x00,0x24,0x26,
76705 -0x04,0x00,0x63,0x24,
76706 -0x0C,0x00,0xC3,0xAF,
76707 -0x60,0x39,0x46,0x8E,
76708 -0x0C,0x00,0xC2,0x27,
76709 -0x94,0x58,0xE7,0x24,
76710 -0x21,0x28,0x00,0x00,
76711 -0x54,0x00,0xA2,0xAF,
76712 -0x41,0x4F,0x00,0x0C,
76713 -0x10,0x00,0xA2,0xAF,
76714 -0x20,0x00,0xA4,0x27,
76715 -0x50,0x00,0xA5,0x27,
76716 -0x21,0x50,0x00,0x0C,
76717 -0x21,0xB8,0x40,0x00,
76718 -0x50,0x00,0xA8,0x8F,
76719 -0x21,0x88,0x00,0x00,
76720 -0x52,0x00,0x00,0x11,
76721 -0x21,0x80,0x00,0x00,
76722 -0x21,0x38,0x40,0x02,
76723 -0x18,0x00,0xA9,0x27,
76724 -0x21,0x10,0x31,0x01,
76725 -0x08,0x00,0x46,0x90,
76726 -0x21,0x20,0x00,0x00,
76727 -0x7F,0x00,0xC5,0x30,
76728 -0x21,0x10,0x87,0x00,
76729 -0xB4,0x39,0x43,0x90,
76730 -0x01,0x00,0x84,0x24,
76731 -0x7F,0x00,0x63,0x30,
76732 -0x3D,0x00,0xA3,0x10,
76733 -0x0D,0x00,0x82,0x2C,
76734 -0xFA,0xFF,0x40,0x14,
76735 -0x21,0x10,0x87,0x00,
76736 -0x01,0x00,0x31,0x26,
76737 -0x2B,0x10,0x28,0x02,
76738 -0xF2,0xFF,0x40,0x14,
76739 -0x21,0x10,0x31,0x01,
76740 -0x09,0x00,0x02,0x2E,
76741 -0x3D,0x00,0x40,0x14,
76742 -0x21,0x20,0xE0,0x02,
76743 -0x54,0x00,0xA2,0x8F,
76744 -0x01,0x00,0x05,0x24,
76745 -0x08,0x00,0x06,0x24,
76746 -0x30,0x00,0xA7,0x27,
76747 -0x41,0x4F,0x00,0x0C,
76748 -0x10,0x00,0xA2,0xAF,
76749 -0x21,0x20,0x40,0x00,
76750 -0x54,0x00,0xA2,0x8F,
76751 -0xF8,0xFF,0x06,0x26,
76752 -0x32,0x00,0x05,0x24,
76753 -0x38,0x00,0xA7,0x27,
76754 -0x41,0x4F,0x00,0x0C,
76755 -0x10,0x00,0xA2,0xAF,
76756 -0x21,0xB8,0x40,0x00,
76757 -0x02,0x80,0x02,0x3C,
76758 -0x30,0x1F,0x44,0x24,
76759 -0x78,0x3D,0x83,0x8C,
76760 -0x02,0x00,0x02,0x24,
76761 -0x37,0x00,0x62,0x14,
76762 -0x00,0x00,0x00,0x00,
76763 -0xC4,0x39,0x83,0x8C,
76764 -0x0C,0x00,0x11,0x24,
76765 -0x2B,0x10,0x23,0x02,
76766 -0x32,0x00,0x40,0x10,
76767 -0x02,0x80,0x02,0x3C,
76768 -0xF8,0x58,0x46,0x24,
76769 -0x21,0x20,0x60,0x00,
76770 -0x4D,0x13,0x00,0x08,
76771 -0x30,0x00,0x05,0x24,
76772 -0x01,0x00,0x62,0x90,
76773 -0x00,0x00,0x00,0x00,
76774 -0x21,0x10,0x51,0x00,
76775 -0x02,0x00,0x51,0x24,
76776 -0x2B,0x18,0x24,0x02,
76777 -0x27,0x00,0x60,0x10,
76778 -0x00,0x00,0x00,0x00,
76779 -0x21,0x18,0x26,0x02,
76780 -0x00,0x00,0x62,0x90,
76781 -0x00,0x00,0x00,0x00,
76782 -0xF5,0xFF,0x45,0x14,
76783 -0x02,0x80,0x07,0x3C,
76784 -0x01,0x00,0x66,0x90,
76785 -0x54,0x00,0xA2,0x8F,
76786 -0xFA,0x58,0xE7,0x24,
76787 -0x21,0x20,0xE0,0x02,
76788 -0x21,0x38,0x27,0x02,
76789 -0x30,0x00,0x05,0x24,
76790 -0x41,0x4F,0x00,0x0C,
76791 -0x10,0x00,0xA2,0xAF,
76792 -0x73,0x13,0x00,0x08,
76793 -0x21,0xB8,0x40,0x00,
76794 -0x21,0x10,0x30,0x01,
76795 -0x18,0x00,0x46,0xA0,
76796 -0x50,0x00,0xA8,0x8F,
76797 -0x01,0x00,0x31,0x26,
76798 -0x2B,0x10,0x28,0x02,
76799 -0xB4,0xFF,0x40,0x14,
76800 -0x01,0x00,0x10,0x26,
76801 -0x27,0x13,0x00,0x08,
76802 -0x09,0x00,0x02,0x2E,
76803 -0x54,0x00,0xA2,0x8F,
76804 -0x21,0x20,0xE0,0x02,
76805 -0x21,0x30,0x00,0x02,
76806 -0x01,0x00,0x05,0x24,
76807 -0x30,0x00,0xA7,0x27,
76808 -0x41,0x4F,0x00,0x0C,
76809 -0x10,0x00,0xA2,0xAF,
76810 -0x21,0xB8,0x40,0x00,
76811 -0x02,0x80,0x02,0x3C,
76812 -0x30,0x1F,0x44,0x24,
76813 -0x78,0x3D,0x83,0x8C,
76814 -0x02,0x00,0x02,0x24,
76815 -0xCB,0xFF,0x62,0x10,
76816 -0x00,0x00,0x00,0x00,
76817 -0xD5,0x1D,0x00,0x0C,
76818 -0x00,0x00,0x00,0x00,
76819 -0x16,0x00,0x40,0x14,
76820 -0x02,0x80,0x02,0x3C,
76821 -0x30,0x1F,0x43,0x24,
76822 -0xC4,0x39,0x62,0x8C,
76823 -0x0C,0x00,0x11,0x24,
76824 -0x2B,0x10,0x22,0x02,
76825 -0x10,0x00,0x40,0x10,
76826 -0x02,0x80,0x02,0x3C,
76827 -0xF8,0x58,0x52,0x24,
76828 -0x21,0x80,0x60,0x00,
76829 -0x02,0x80,0x13,0x3C,
76830 -0x21,0x20,0x32,0x02,
76831 -0x00,0x00,0x83,0x90,
76832 -0x2D,0x00,0x02,0x24,
76833 -0xCB,0x00,0x62,0x10,
76834 -0x02,0x80,0x05,0x3C,
76835 -0x01,0x00,0x82,0x90,
76836 -0xC4,0x39,0x03,0x8E,
76837 -0x21,0x10,0x51,0x00,
76838 -0x02,0x00,0x51,0x24,
76839 -0x2B,0x18,0x23,0x02,
76840 -0xF6,0xFF,0x60,0x14,
76841 -0x21,0x20,0x32,0x02,
76842 -0x02,0x80,0x02,0x3C,
76843 -0x30,0x1F,0x44,0x24,
76844 -0x78,0x3D,0x83,0x8C,
76845 -0x02,0x00,0x02,0x24,
76846 -0x82,0x00,0x62,0x10,
76847 -0x0C,0x00,0x11,0x24,
76848 -0x02,0x80,0x02,0x3C,
76849 -0x30,0x1F,0x43,0x24,
76850 -0xC4,0x39,0x62,0x8C,
76851 -0x0C,0x00,0x11,0x24,
76852 -0x2B,0x10,0x22,0x02,
76853 -0x26,0x00,0x40,0x10,
76854 -0x02,0x80,0x02,0x3C,
76855 -0xF8,0x58,0x56,0x24,
76856 -0x21,0xA8,0x60,0x00,
76857 -0xDD,0x00,0x14,0x24,
76858 -0xA5,0x13,0x00,0x08,
76859 -0x02,0x80,0x13,0x3C,
76860 -0x01,0x00,0x02,0x92,
76861 -0xC4,0x39,0xA3,0x8E,
76862 -0x21,0x10,0x51,0x00,
76863 -0x02,0x00,0x51,0x24,
76864 -0x2B,0x18,0x23,0x02,
76865 -0x1B,0x00,0x60,0x10,
76866 -0x02,0x80,0x02,0x3C,
76867 -0x21,0x80,0x36,0x02,
76868 -0x00,0x00,0x02,0x92,
76869 -0x02,0x00,0x12,0x26,
76870 -0x21,0x20,0x40,0x02,
76871 -0xD0,0xDD,0x65,0x26,
76872 -0xF3,0xFF,0x54,0x14,
76873 -0x06,0x00,0x06,0x24,
76874 -0x39,0x52,0x00,0x0C,
76875 -0x00,0x00,0x00,0x00,
76876 -0xEF,0xFF,0x40,0x14,
76877 -0x21,0x20,0xE0,0x02,
76878 -0x54,0x00,0xA2,0x8F,
76879 -0xDD,0x00,0x05,0x24,
76880 -0x21,0x38,0x40,0x02,
76881 -0x07,0x00,0x06,0x24,
76882 -0x41,0x4F,0x00,0x0C,
76883 -0x10,0x00,0xA2,0xAF,
76884 -0x08,0x00,0x04,0x92,
76885 -0x21,0xB8,0x40,0x00,
76886 -0x02,0x80,0x02,0x3C,
76887 -0x30,0x1F,0x45,0x24,
76888 -0x01,0x00,0x03,0x24,
76889 -0x02,0x80,0x02,0x3C,
76890 -0x0F,0x5F,0x44,0xA0,
76891 -0x10,0x3E,0xA3,0xAC,
76892 -0x02,0x80,0x02,0x3C,
76893 -0x30,0x1F,0x44,0x24,
76894 -0xC4,0x39,0x82,0x8C,
76895 -0x0C,0x00,0x11,0x24,
76896 -0x2B,0x10,0x22,0x02,
76897 -0x20,0x00,0x40,0x10,
76898 -0x02,0x80,0x02,0x3C,
76899 -0x02,0x80,0x03,0x3C,
76900 -0xF8,0x58,0x56,0x24,
76901 -0xFA,0x58,0x75,0x24,
76902 -0x21,0xA0,0x80,0x00,
76903 -0xD2,0x13,0x00,0x08,
76904 -0xDD,0x00,0x13,0x24,
76905 -0x01,0x00,0x02,0x92,
76906 -0xC4,0x39,0x83,0x8E,
76907 -0x21,0x10,0x51,0x00,
76908 -0x02,0x00,0x51,0x24,
76909 -0x2B,0x18,0x23,0x02,
76910 -0x14,0x00,0x60,0x10,
76911 -0x02,0x80,0x02,0x3C,
76912 -0x21,0x80,0x36,0x02,
76913 -0x00,0x00,0x02,0x92,
76914 -0x21,0x90,0x35,0x02,
76915 -0x21,0x20,0x40,0x02,
76916 -0x48,0x00,0xA5,0x27,
76917 -0xF3,0xFF,0x53,0x14,
76918 -0x04,0x00,0x06,0x24,
76919 -0x39,0x52,0x00,0x0C,
76920 -0x00,0x00,0x00,0x00,
76921 -0xEF,0xFF,0x40,0x14,
76922 -0x21,0x20,0xE0,0x02,
76923 -0x01,0x00,0x06,0x92,
76924 -0x54,0x00,0xA2,0x8F,
76925 -0x21,0x38,0x40,0x02,
76926 -0xDD,0x00,0x05,0x24,
76927 -0x41,0x4F,0x00,0x0C,
76928 -0x10,0x00,0xA2,0xAF,
76929 -0x21,0xB8,0x40,0x00,
76930 -0x02,0x80,0x02,0x3C,
76931 -0x30,0x1F,0x50,0x24,
76932 -0x0A,0x3E,0x02,0x92,
76933 -0x50,0x3E,0x03,0x8E,
76934 -0x05,0x00,0x42,0x38,
76935 -0x01,0x00,0x63,0x38,
76936 -0x01,0x00,0x42,0x2C,
76937 -0x01,0x00,0x63,0x2C,
76938 -0x24,0x10,0x43,0x00,
76939 -0x58,0x00,0x40,0x14,
76940 -0x02,0x80,0x07,0x3C,
76941 -0xC4,0x39,0x05,0x8E,
76942 -0x0C,0x00,0x11,0x24,
76943 -0x2B,0x10,0x25,0x02,
76944 -0x0F,0x00,0x40,0x10,
76945 -0x02,0x80,0x02,0x3C,
76946 -0xF8,0x58,0x46,0x24,
76947 -0x44,0x00,0x04,0x24,
76948 -0x21,0x80,0x26,0x02,
76949 -0x00,0x00,0x02,0x92,
76950 -0x00,0x00,0x00,0x00,
76951 -0x3E,0x00,0x44,0x10,
76952 -0x00,0x00,0x00,0x00,
76953 -0x01,0x00,0x02,0x92,
76954 -0x00,0x00,0x00,0x00,
76955 -0x21,0x10,0x51,0x00,
76956 -0x02,0x00,0x51,0x24,
76957 -0x2B,0x18,0x25,0x02,
76958 -0xF6,0xFF,0x60,0x14,
76959 -0x21,0x80,0x26,0x02,
76960 -0x21,0x20,0xC0,0x03,
76961 -0x21,0x28,0x00,0x00,
76962 -0xB9,0x0C,0x00,0x0C,
76963 -0x21,0x30,0x00,0x00,
76964 -0x21,0x10,0x00,0x00,
76965 -0x7C,0x00,0xBF,0x8F,
76966 -0x78,0x00,0xBE,0x8F,
76967 -0x74,0x00,0xB7,0x8F,
76968 -0x70,0x00,0xB6,0x8F,
76969 -0x6C,0x00,0xB5,0x8F,
76970 -0x68,0x00,0xB4,0x8F,
76971 -0x64,0x00,0xB3,0x8F,
76972 -0x60,0x00,0xB2,0x8F,
76973 -0x5C,0x00,0xB1,0x8F,
76974 -0x58,0x00,0xB0,0x8F,
76975 -0x08,0x00,0xE0,0x03,
76976 -0x80,0x00,0xBD,0x27,
76977 -0xC4,0x39,0x82,0x8C,
76978 -0x00,0x00,0x00,0x00,
76979 -0x2B,0x10,0x22,0x02,
76980 -0x7B,0xFF,0x40,0x10,
76981 -0x02,0x80,0x02,0x3C,
76982 -0x02,0x80,0x03,0x3C,
76983 -0xF8,0x58,0x56,0x24,
76984 -0xFA,0x58,0x75,0x24,
76985 -0x21,0xA0,0x80,0x00,
76986 -0x25,0x14,0x00,0x08,
76987 -0xDD,0x00,0x13,0x24,
76988 -0x01,0x00,0x02,0x92,
76989 -0xC4,0x39,0x83,0x8E,
76990 -0x21,0x10,0x51,0x00,
76991 -0x02,0x00,0x51,0x24,
76992 -0x2B,0x18,0x23,0x02,
76993 -0x6F,0xFF,0x60,0x10,
76994 -0x02,0x80,0x02,0x3C,
76995 -0x21,0x80,0x36,0x02,
76996 -0x00,0x00,0x02,0x92,
76997 -0x21,0x90,0x35,0x02,
76998 -0x21,0x20,0x40,0x02,
76999 -0x40,0x00,0xA5,0x27,
77000 -0xF3,0xFF,0x53,0x14,
77001 -0x04,0x00,0x06,0x24,
77002 -0x39,0x52,0x00,0x0C,
77003 -0x00,0x00,0x00,0x00,
77004 -0xEF,0xFF,0x40,0x14,
77005 -0x21,0x20,0xE0,0x02,
77006 -0x01,0x00,0x06,0x92,
77007 -0x54,0x00,0xA2,0x8F,
77008 -0x21,0x38,0x40,0x02,
77009 -0xDD,0x00,0x05,0x24,
77010 -0x41,0x4F,0x00,0x0C,
77011 -0x10,0x00,0xA2,0xAF,
77012 -0x92,0x13,0x00,0x08,
77013 -0x21,0xB8,0x40,0x00,
77014 -0x02,0x80,0x04,0x3C,
77015 -0x2F,0x55,0x00,0x0C,
77016 -0x48,0xE1,0x84,0x24,
77017 -0x01,0x00,0x06,0x92,
77018 -0x54,0x00,0xA2,0x8F,
77019 -0x02,0x80,0x07,0x3C,
77020 -0xFA,0x58,0xE7,0x24,
77021 -0x21,0x38,0x27,0x02,
77022 -0x21,0x20,0xE0,0x02,
77023 -0x44,0x00,0x05,0x24,
77024 -0x41,0x4F,0x00,0x0C,
77025 -0x10,0x00,0xA2,0xAF,
77026 -0x03,0x14,0x00,0x08,
77027 -0x21,0x20,0xC0,0x03,
77028 -0x54,0x00,0xA2,0x8F,
77029 -0x21,0x20,0xE0,0x02,
77030 -0x9C,0xDD,0xE7,0x24,
77031 -0xDD,0x00,0x05,0x24,
77032 -0x06,0x00,0x06,0x24,
77033 -0x41,0x4F,0x00,0x0C,
77034 -0x10,0x00,0xA2,0xAF,
77035 -0xEF,0x13,0x00,0x08,
77036 -0x21,0xB8,0x40,0x00,
77037 -0x02,0x80,0x14,0x3C,
77038 -0xFA,0x58,0xA5,0x24,
77039 -0x21,0x28,0x25,0x02,
77040 -0x88,0x5D,0x84,0x26,
77041 -0x10,0x52,0x00,0x0C,
77042 -0x20,0x00,0x06,0x24,
77043 -0x02,0x80,0x03,0x3C,
77044 -0xF1,0x5D,0x62,0x90,
77045 -0x00,0x00,0x00,0x00,
77046 -0x1D,0x00,0x40,0x14,
77047 -0x00,0x00,0x00,0x00,
77048 -0x58,0x3E,0x02,0x96,
77049 -0x00,0x00,0x00,0x00,
77050 -0xBD,0xFF,0x42,0x30,
77051 -0x58,0x3E,0x02,0xA6,
77052 -0x02,0x80,0x02,0x3C,
77053 -0x58,0x3E,0x03,0x96,
77054 -0xDE,0x5D,0x44,0x90,
77055 -0x0C,0x00,0x63,0x34,
77056 -0x01,0x00,0x84,0x30,
77057 -0x15,0x00,0x80,0x10,
77058 -0x58,0x3E,0x03,0xA6,
77059 -0x02,0x80,0x05,0x3C,
77060 -0x8B,0x5D,0x64,0x26,
77061 -0x3C,0xE3,0xA5,0x24,
77062 -0x10,0x52,0x00,0x0C,
77063 -0x10,0x00,0x06,0x24,
77064 -0x21,0x10,0x32,0x02,
77065 -0x01,0x00,0x46,0x90,
77066 -0x54,0x00,0xA2,0x8F,
77067 -0x21,0x20,0xE0,0x02,
77068 -0x88,0x5D,0x87,0x26,
77069 -0x2D,0x00,0x05,0x24,
77070 -0x41,0x4F,0x00,0x0C,
77071 -0x10,0x00,0xA2,0xAF,
77072 -0x21,0xB8,0x40,0x00,
77073 -0x01,0x00,0x02,0x24,
77074 -0x8C,0x13,0x00,0x08,
77075 -0x50,0x3E,0x02,0xAE,
77076 -0x58,0x3E,0x02,0x96,
77077 -0x5D,0x14,0x00,0x08,
77078 -0x02,0x00,0x42,0x34,
77079 -0x02,0x80,0x05,0x3C,
77080 -0x8B,0x5D,0x64,0x26,
77081 -0x68,0x14,0x00,0x08,
77082 -0x4C,0xE3,0xA5,0x24,
77083 -0x02,0x80,0x04,0x3C,
77084 -0x02,0x80,0x05,0x3C,
77085 -0x28,0xE1,0x84,0x24,
77086 -0x2F,0x55,0x00,0x0C,
77087 -0xD4,0xEA,0xA5,0x24,
77088 -0x07,0x14,0x00,0x08,
77089 -0xFF,0xFF,0x02,0x24,
77090 -0x02,0x80,0x02,0x3C,
77091 -0x30,0x1F,0x42,0x24,
77092 -0xB0,0x1B,0x43,0x94,
77093 -0xC8,0x00,0x04,0x24,
77094 -0xD0,0x38,0x44,0xAC,
77095 -0x9F,0xFE,0x63,0x30,
77096 -0x80,0x00,0x63,0x34,
77097 -0xB0,0x1B,0x43,0xA4,
77098 -0x6C,0x3D,0x40,0xAC,
77099 -0x70,0x3D,0x40,0xAC,
77100 -0xA5,0x12,0x00,0x08,
77101 -0xB4,0x38,0x40,0xAC,
77102 -0xD8,0xFF,0xBD,0x27,
77103 -0x28,0x00,0xA4,0xA3,
77104 -0x00,0x01,0x04,0x24,
77105 -0x18,0x00,0xB2,0xAF,
77106 -0x20,0x00,0xBF,0xAF,
77107 -0x1C,0x00,0xB3,0xAF,
77108 -0x14,0x00,0xB1,0xAF,
77109 -0x10,0x00,0xB0,0xAF,
77110 -0x2C,0x00,0xA5,0xA3,
77111 -0x25,0x24,0x00,0x0C,
77112 -0x30,0x00,0xA6,0xA7,
77113 -0x94,0x00,0x40,0x10,
77114 -0x21,0x90,0x40,0x00,
77115 -0x30,0x00,0xA7,0x97,
77116 -0x28,0x00,0xA5,0x93,
77117 -0x2C,0x00,0xA6,0x93,
77118 -0x02,0x80,0x04,0x3C,
77119 -0x2F,0x55,0x00,0x0C,
77120 -0x68,0xE1,0x84,0x24,
77121 -0x08,0x00,0x50,0x96,
77122 -0x02,0x80,0x02,0x3C,
77123 -0x02,0x80,0x11,0x3C,
77124 -0x25,0x80,0x02,0x02,
77125 -0x88,0x58,0x31,0x26,
77126 -0x21,0x28,0x20,0x02,
77127 -0x24,0x00,0x04,0x26,
77128 -0x06,0x00,0x06,0x24,
77129 -0x10,0x52,0x00,0x0C,
77130 -0x20,0x00,0x00,0xA6,
77131 -0x02,0x80,0x05,0x3C,
77132 -0x18,0x3B,0xA5,0x24,
77133 -0x2A,0x00,0x04,0x26,
77134 -0x10,0x52,0x00,0x0C,
77135 -0x06,0x00,0x06,0x24,
77136 -0x21,0x28,0x20,0x02,
77137 -0x30,0x00,0x04,0x26,
77138 -0x10,0x52,0x00,0x0C,
77139 -0x06,0x00,0x06,0x24,
77140 -0x20,0x00,0x03,0x96,
77141 -0x18,0x00,0x02,0x24,
77142 -0x20,0x00,0x05,0x26,
77143 -0x03,0xFF,0x63,0x30,
77144 -0xD0,0x00,0x63,0x34,
77145 -0x20,0x00,0x03,0xA6,
77146 -0x02,0x80,0x03,0x3C,
77147 -0x0C,0x00,0x42,0xAE,
77148 -0x30,0x1F,0x73,0x24,
77149 -0xF8,0x1D,0x62,0x96,
77150 -0x0C,0x00,0x51,0x26,
77151 -0x28,0x00,0xA6,0x27,
77152 -0xFF,0x0F,0x43,0x30,
77153 -0x00,0x19,0x03,0x00,
77154 -0x02,0x22,0x03,0x00,
77155 -0x01,0x00,0x42,0x24,
77156 -0xF8,0x1D,0x62,0xA6,
77157 -0x21,0x38,0x20,0x02,
77158 -0x16,0x00,0xA3,0xA0,
77159 -0x17,0x00,0xA4,0xA0,
77160 -0x38,0x00,0x04,0x26,
77161 -0x68,0x4F,0x00,0x0C,
77162 -0x01,0x00,0x05,0x24,
77163 -0x21,0x20,0x40,0x00,
77164 -0x01,0x00,0x05,0x24,
77165 -0x2C,0x00,0xA6,0x27,
77166 -0x68,0x4F,0x00,0x0C,
77167 -0x21,0x38,0x20,0x02,
77168 -0x28,0x00,0xA3,0x93,
77169 -0x21,0x20,0x40,0x00,
77170 -0x03,0x00,0x02,0x24,
77171 -0x0C,0x00,0x62,0x10,
77172 -0x00,0x00,0x00,0x00,
77173 -0x21,0x20,0x40,0x02,
77174 -0x21,0x28,0x00,0x00,
77175 -0xB9,0x0C,0x00,0x0C,
77176 -0x21,0x30,0x00,0x00,
77177 -0x20,0x00,0xBF,0x8F,
77178 -0x1C,0x00,0xB3,0x8F,
77179 -0x18,0x00,0xB2,0x8F,
77180 -0x14,0x00,0xB1,0x8F,
77181 -0x10,0x00,0xB0,0x8F,
77182 -0x08,0x00,0xE0,0x03,
77183 -0x28,0x00,0xBD,0x27,
77184 -0x2C,0x00,0xA3,0x93,
77185 -0x00,0x00,0x00,0x00,
77186 -0x2E,0x00,0x60,0x14,
77187 -0x01,0x00,0x02,0x24,
77188 -0x19,0x3E,0x63,0x92,
77189 -0x21,0x80,0x60,0x02,
77190 -0x01,0x00,0x68,0x24,
77191 -0xFF,0x00,0x02,0x31,
77192 -0xFD,0xFF,0x40,0x10,
77193 -0x21,0x18,0x00,0x01,
77194 -0x02,0x80,0x06,0x3C,
77195 -0x19,0x3E,0x08,0xA2,
77196 -0x21,0x38,0x20,0x02,
77197 -0x49,0x5D,0xC6,0x24,
77198 -0x68,0x4F,0x00,0x0C,
77199 -0x01,0x00,0x05,0x24,
77200 -0x30,0x00,0xA3,0x97,
77201 -0x02,0x80,0x06,0x3C,
77202 -0x21,0x38,0x20,0x02,
77203 -0x0F,0x00,0x63,0x30,
77204 -0x80,0x18,0x03,0x00,
77205 -0x02,0x08,0x63,0x34,
77206 -0x1C,0x3E,0x03,0xA6,
77207 -0x4C,0x5D,0xC6,0x24,
77208 -0x21,0x20,0x40,0x00,
77209 -0x68,0x4F,0x00,0x0C,
77210 -0x02,0x00,0x05,0x24,
77211 -0x02,0x80,0x06,0x3C,
77212 -0x21,0x38,0x20,0x02,
77213 -0x4E,0x5D,0xC6,0x24,
77214 -0x21,0x20,0x40,0x00,
77215 -0x02,0x00,0x05,0x24,
77216 -0x68,0x4F,0x00,0x0C,
77217 -0x1E,0x3E,0x00,0xA6,
77218 -0x30,0x00,0xA3,0x97,
77219 -0x21,0x20,0x40,0x00,
77220 -0x02,0x80,0x06,0x3C,
77221 -0x07,0x00,0x63,0x30,
77222 -0x40,0x18,0x03,0x00,
77223 -0x21,0x18,0x70,0x00,
77224 -0xE8,0x1D,0x62,0x94,
77225 -0x50,0x5D,0xC6,0x24,
77226 -0x21,0x38,0x20,0x02,
77227 -0x00,0x11,0x02,0x00,
77228 -0x02,0x00,0x05,0x24,
77229 -0x68,0x4F,0x00,0x0C,
77230 -0x20,0x3E,0x02,0xA6,
77231 -0xD8,0x14,0x00,0x08,
77232 -0x21,0x20,0x40,0x02,
77233 -0xC3,0xFF,0x62,0x14,
77234 -0x02,0x80,0x06,0x3C,
77235 -0x21,0x38,0x20,0x02,
77236 -0x48,0x5D,0xC6,0x24,
77237 -0x68,0x4F,0x00,0x0C,
77238 -0x01,0x00,0x05,0x24,
77239 -0x21,0x20,0x40,0x00,
77240 -0x30,0x00,0xA6,0x27,
77241 -0x21,0x38,0x20,0x02,
77242 -0x68,0x4F,0x00,0x0C,
77243 -0x02,0x00,0x05,0x24,
77244 -0x1C,0x3E,0x63,0x96,
77245 -0x02,0x80,0x06,0x3C,
77246 -0x21,0x38,0x20,0x02,
77247 -0x3F,0x00,0x63,0x30,
77248 -0x00,0x08,0x63,0x34,
77249 -0x21,0x20,0x40,0x00,
77250 -0x4C,0x5D,0xC6,0x24,
77251 -0x02,0x00,0x05,0x24,
77252 -0x68,0x4F,0x00,0x0C,
77253 -0x1C,0x3E,0x63,0xA6,
77254 -0x02,0x80,0x06,0x3C,
77255 -0x21,0x20,0x40,0x00,
77256 -0x4E,0x5D,0xC6,0x24,
77257 -0x21,0x38,0x20,0x02,
77258 -0x68,0x4F,0x00,0x0C,
77259 -0x02,0x00,0x05,0x24,
77260 -0xD8,0x14,0x00,0x08,
77261 -0x21,0x20,0x40,0x02,
77262 -0x02,0x80,0x04,0x3C,
77263 -0x02,0x80,0x05,0x3C,
77264 -0x5C,0xE1,0x84,0x24,
77265 -0x2F,0x55,0x00,0x0C,
77266 -0xE8,0xEA,0xA5,0x24,
77267 -0x20,0x00,0xBF,0x8F,
77268 -0x1C,0x00,0xB3,0x8F,
77269 -0x18,0x00,0xB2,0x8F,
77270 -0x14,0x00,0xB1,0x8F,
77271 -0x10,0x00,0xB0,0x8F,
77272 -0x08,0x00,0xE0,0x03,
77273 -0x28,0x00,0xBD,0x27,
77274 -0x00,0x80,0x03,0x3C,
77275 -0x25,0xB0,0x02,0x3C,
77276 -0xE0,0xFF,0xBD,0x27,
77277 -0x18,0x03,0x42,0x34,
77278 -0xF0,0x54,0x63,0x24,
77279 -0x14,0x00,0xB1,0xAF,
77280 -0x10,0x00,0xB0,0xAF,
77281 -0x1C,0x00,0xBF,0xAF,
77282 -0x18,0x00,0xB2,0xAF,
77283 -0x00,0x00,0x43,0xAC,
77284 -0x02,0x00,0x82,0x90,
77285 -0x02,0x80,0x05,0x3C,
77286 -0x88,0x58,0xA5,0x24,
77287 -0x0F,0x00,0x42,0x30,
77288 -0xC0,0x10,0x02,0x00,
77289 -0x21,0x80,0x44,0x00,
77290 -0x28,0x00,0x04,0x26,
77291 -0x06,0x00,0x06,0x24,
77292 -0x39,0x52,0x00,0x0C,
77293 -0x18,0x00,0x11,0x26,
77294 -0x08,0x00,0x40,0x10,
77295 -0x00,0x00,0x00,0x00,
77296 -0x1C,0x00,0xBF,0x8F,
77297 -0x18,0x00,0xB2,0x8F,
77298 -0x14,0x00,0xB1,0x8F,
77299 -0x10,0x00,0xB0,0x8F,
77300 -0x21,0x10,0x00,0x00,
77301 -0x08,0x00,0xE0,0x03,
77302 -0x20,0x00,0xBD,0x27,
77303 -0x55,0x50,0x00,0x0C,
77304 -0x21,0x20,0x20,0x02,
77305 -0x02,0x80,0x04,0x3C,
77306 -0x18,0x3B,0x84,0x24,
77307 -0x21,0x28,0x40,0x00,
77308 -0x39,0x52,0x00,0x0C,
77309 -0x06,0x00,0x06,0x24,
77310 -0xF1,0xFF,0x40,0x14,
77311 -0x03,0x00,0x02,0x24,
77312 -0x30,0x00,0x03,0x92,
77313 -0x00,0x00,0x00,0x00,
77314 -0xED,0xFF,0x62,0x14,
77315 -0x30,0x00,0x07,0x26,
77316 -0x02,0x80,0x06,0x3C,
77317 -0x30,0x1F,0xC8,0x24,
77318 -0x50,0x3E,0x02,0x8D,
77319 -0x00,0x00,0x00,0x00,
77320 -0xE7,0xFF,0x40,0x10,
77321 -0x01,0x00,0x05,0x24,
77322 -0x01,0x00,0xE3,0x90,
77323 -0x00,0x00,0x00,0x00,
77324 -0x1A,0x00,0x65,0x10,
77325 -0x02,0x00,0x62,0x28,
77326 -0x2E,0x00,0x40,0x14,
77327 -0x02,0x00,0x02,0x24,
77328 -0xDF,0xFF,0x62,0x14,
77329 -0x00,0x00,0x00,0x00,
77330 -0x03,0x00,0xE3,0x90,
77331 -0x00,0x00,0x00,0x00,
77332 -0x08,0x00,0x62,0x30,
77333 -0x0A,0x00,0x40,0x14,
77334 -0x02,0x11,0x03,0x00,
77335 -0x1A,0x3E,0x03,0x91,
77336 -0x04,0x10,0x45,0x00,
77337 -0x27,0x10,0x02,0x00,
77338 -0x24,0x10,0x43,0x00,
77339 -0x1A,0x3E,0x02,0xA1,
77340 -0x05,0x00,0xE3,0x90,
77341 -0x04,0x00,0xE2,0x90,
77342 -0x00,0x1A,0x03,0x00,
77343 -0x25,0x90,0x62,0x00,
77344 -0x1A,0x3E,0x05,0x91,
77345 -0x02,0x80,0x04,0x3C,
77346 -0x94,0xE1,0x84,0x24,
77347 -0x2F,0x55,0x00,0x0C,
77348 -0x21,0x30,0x40,0x02,
77349 -0x52,0x15,0x00,0x08,
77350 -0x00,0x00,0x00,0x00,
77351 -0x04,0x00,0xE2,0x90,
77352 -0x03,0x00,0xE4,0x90,
77353 -0x05,0x00,0xE3,0x90,
77354 -0x00,0x12,0x02,0x00,
77355 -0x25,0x10,0x44,0x00,
77356 -0x82,0x18,0x03,0x00,
77357 -0x27,0x00,0x40,0x14,
77358 -0x07,0x00,0x64,0x30,
77359 -0x1A,0x3E,0x03,0x91,
77360 -0x04,0x10,0x85,0x00,
77361 -0x25,0x10,0x43,0x00,
77362 -0x1A,0x3E,0x02,0xA1,
77363 -0x30,0x1F,0xC2,0x24,
77364 -0x4C,0x3E,0x43,0x90,
77365 -0x1A,0x3E,0x45,0x90,
77366 -0x02,0x80,0x04,0x3C,
77367 -0x21,0x18,0x62,0x00,
77368 -0x84,0xE1,0x84,0x24,
77369 -0x2F,0x55,0x00,0x0C,
77370 -0x44,0x3E,0x60,0xA0,
77371 -0x52,0x15,0x00,0x08,
77372 -0x00,0x00,0x00,0x00,
77373 -0xB2,0xFF,0x60,0x14,
77374 -0x03,0x00,0x04,0x24,
77375 -0x02,0x00,0xE2,0x90,
77376 -0x01,0x00,0x05,0x24,
77377 -0x18,0x3E,0x02,0xA1,
77378 -0x04,0x00,0xE3,0x90,
77379 -0x03,0x00,0xE2,0x90,
77380 -0x21,0x30,0x00,0x00,
77381 -0x00,0x1A,0x03,0x00,
77382 -0x25,0x18,0x62,0x00,
77383 -0x1C,0x3E,0x03,0xA5,
77384 -0x06,0x00,0xE2,0x90,
77385 -0x05,0x00,0xE3,0x90,
77386 -0x00,0x12,0x02,0x00,
77387 -0x25,0x10,0x43,0x00,
77388 -0x1E,0x3E,0x02,0xA5,
77389 -0x08,0x00,0xE3,0x90,
77390 -0x07,0x00,0xE2,0x90,
77391 -0x00,0x1A,0x03,0x00,
77392 -0x25,0x18,0x62,0x00,
77393 -0x90,0x14,0x00,0x0C,
77394 -0x20,0x3E,0x03,0xA5,
77395 -0x52,0x15,0x00,0x08,
77396 -0x00,0x00,0x00,0x00,
77397 -0x1A,0x3E,0x03,0x91,
77398 -0x04,0x10,0x85,0x00,
77399 -0x27,0x10,0x02,0x00,
77400 -0x94,0x15,0x00,0x08,
77401 -0x24,0x10,0x43,0x00,
77402 -0xC0,0xFF,0xBD,0x27,
77403 -0x34,0x00,0xB5,0xAF,
77404 -0xFF,0xFF,0x95,0x30,
77405 -0x00,0x01,0x04,0x24,
77406 -0x38,0x00,0xB6,0xAF,
77407 -0x28,0x00,0xB2,0xAF,
77408 -0x3C,0x00,0xBF,0xAF,
77409 -0x30,0x00,0xB4,0xAF,
77410 -0x2C,0x00,0xB3,0xAF,
77411 -0x24,0x00,0xB1,0xAF,
77412 -0x25,0x24,0x00,0x0C,
77413 -0x20,0x00,0xB0,0xAF,
77414 -0x21,0x90,0x40,0x00,
77415 -0x7A,0x00,0x40,0x10,
77416 -0x21,0xB0,0x00,0x00,
77417 -0x02,0x80,0x04,0x3C,
77418 -0x2F,0x55,0x00,0x0C,
77419 -0xB0,0xE1,0x84,0x24,
77420 -0x08,0x00,0x50,0x96,
77421 -0x02,0x80,0x02,0x3C,
77422 -0x02,0x80,0x11,0x3C,
77423 -0x25,0x80,0x02,0x02,
77424 -0x88,0x58,0x31,0x26,
77425 -0x24,0x00,0x04,0x26,
77426 -0x21,0x28,0x20,0x02,
77427 -0x20,0x00,0x00,0xA6,
77428 -0x10,0x52,0x00,0x0C,
77429 -0x06,0x00,0x06,0x24,
77430 -0x02,0x80,0x05,0x3C,
77431 -0x2A,0x00,0x04,0x26,
77432 -0x18,0x3B,0xA5,0x24,
77433 -0x10,0x52,0x00,0x0C,
77434 -0x06,0x00,0x06,0x24,
77435 -0x30,0x00,0x04,0x26,
77436 -0x21,0x28,0x20,0x02,
77437 -0x10,0x52,0x00,0x0C,
77438 -0x06,0x00,0x06,0x24,
77439 -0x20,0x00,0x03,0x96,
77440 -0x18,0x00,0x02,0x24,
77441 -0x02,0x80,0x13,0x3C,
77442 -0x03,0xFF,0x63,0x30,
77443 -0xB0,0x00,0x63,0x34,
77444 -0x20,0x00,0x03,0xA6,
77445 -0x30,0x1F,0x68,0x26,
77446 -0x0C,0x00,0x42,0xAE,
77447 -0xF8,0x1D,0x02,0x95,
77448 -0x20,0x00,0x14,0x26,
77449 -0x0C,0x00,0x51,0x26,
77450 -0xFF,0x0F,0x43,0x30,
77451 -0x00,0x19,0x03,0x00,
77452 -0x02,0x22,0x03,0x00,
77453 -0x01,0x00,0x42,0x24,
77454 -0xF8,0x1D,0x02,0xA5,
77455 -0x17,0x00,0x84,0xA2,
77456 -0x16,0x00,0x83,0xA2,
77457 -0x74,0x3D,0x04,0x8D,
77458 -0x03,0x00,0x02,0x24,
77459 -0x3C,0x00,0x82,0x10,
77460 -0x38,0x00,0x10,0x26,
77461 -0x30,0x1F,0x73,0x26,
77462 -0x78,0x3D,0x62,0x8E,
77463 -0x21,0x20,0x00,0x02,
77464 -0x02,0x00,0x05,0x24,
77465 -0x01,0x00,0x42,0x38,
77466 -0x01,0x00,0x42,0x2C,
77467 -0x18,0x00,0xA6,0x27,
77468 -0x21,0x38,0x20,0x02,
77469 -0x68,0x4F,0x00,0x0C,
77470 -0x18,0x00,0xA2,0xA7,
77471 -0x74,0x3D,0x63,0x8E,
77472 -0x21,0x20,0x40,0x00,
77473 -0x02,0x00,0x05,0x24,
77474 -0x18,0x00,0xA6,0x27,
77475 -0x21,0x38,0x20,0x02,
77476 -0x68,0x4F,0x00,0x0C,
77477 -0x18,0x00,0xA3,0xA7,
77478 -0x21,0x20,0x40,0x00,
77479 -0x02,0x00,0x05,0x24,
77480 -0x18,0x00,0xA6,0x27,
77481 -0x21,0x38,0x20,0x02,
77482 -0x68,0x4F,0x00,0x0C,
77483 -0x18,0x00,0xB5,0xA7,
77484 -0x74,0x3D,0x63,0x8E,
77485 -0x21,0x80,0x40,0x00,
77486 -0x03,0x00,0x02,0x24,
77487 -0x0F,0x00,0x62,0x10,
77488 -0x00,0x00,0x00,0x00,
77489 -0x21,0x20,0x40,0x02,
77490 -0x21,0x30,0xC0,0x02,
77491 -0xB9,0x0C,0x00,0x0C,
77492 -0x21,0x28,0x00,0x00,
77493 -0x3C,0x00,0xBF,0x8F,
77494 -0x38,0x00,0xB6,0x8F,
77495 -0x34,0x00,0xB5,0x8F,
77496 -0x30,0x00,0xB4,0x8F,
77497 -0x2C,0x00,0xB3,0x8F,
77498 -0x28,0x00,0xB2,0x8F,
77499 -0x24,0x00,0xB1,0x8F,
77500 -0x20,0x00,0xB0,0x8F,
77501 -0x08,0x00,0xE0,0x03,
77502 -0x40,0x00,0xBD,0x27,
77503 -0xB0,0x1B,0x62,0x96,
77504 -0x00,0x00,0x00,0x00,
77505 -0x40,0x00,0x42,0x30,
77506 -0xEF,0xFF,0x40,0x10,
77507 -0x21,0x20,0x40,0x02,
77508 -0x02,0x80,0x07,0x3C,
77509 -0x21,0x20,0x00,0x02,
77510 -0xB8,0x5C,0xE7,0x24,
77511 -0x10,0x00,0x05,0x24,
77512 -0x80,0x00,0x06,0x24,
77513 -0x41,0x4F,0x00,0x0C,
77514 -0x10,0x00,0xB1,0xAF,
77515 -0x00,0x00,0x83,0x96,
77516 -0x01,0x00,0x16,0x24,
77517 -0x00,0x40,0x63,0x34,
77518 -0x13,0x16,0x00,0x08,
77519 -0x00,0x00,0x83,0xA6,
77520 -0xB0,0x1B,0x02,0x95,
77521 -0x00,0x00,0x00,0x00,
77522 -0x40,0x00,0x42,0x30,
77523 -0xC1,0xFF,0x40,0x10,
77524 -0x21,0x20,0x00,0x02,
77525 -0x80,0x3D,0x03,0x8D,
77526 -0x84,0x3D,0x02,0x8D,
77527 -0x80,0x1F,0x03,0x00,
77528 -0x25,0x18,0x43,0x00,
77529 -0x04,0x00,0x05,0x24,
77530 -0x01,0x00,0x42,0x24,
77531 -0x1C,0x00,0xA6,0x27,
77532 -0x21,0x38,0x20,0x02,
77533 -0x84,0x3D,0x02,0xAD,
77534 -0x68,0x4F,0x00,0x0C,
77535 -0x1C,0x00,0xA3,0xAF,
77536 -0xF7,0x15,0x00,0x08,
77537 -0x21,0x80,0x40,0x00,
77538 -0x02,0x80,0x04,0x3C,
77539 -0x02,0x80,0x05,0x3C,
77540 -0xA4,0xE1,0x84,0x24,
77541 -0x2F,0x55,0x00,0x0C,
77542 -0xF8,0xEA,0xA5,0x24,
77543 -0x3C,0x00,0xBF,0x8F,
77544 -0x38,0x00,0xB6,0x8F,
77545 -0x34,0x00,0xB5,0x8F,
77546 -0x30,0x00,0xB4,0x8F,
77547 -0x2C,0x00,0xB3,0x8F,
77548 -0x28,0x00,0xB2,0x8F,
77549 -0x24,0x00,0xB1,0x8F,
77550 -0x20,0x00,0xB0,0x8F,
77551 -0x08,0x00,0xE0,0x03,
77552 -0x40,0x00,0xBD,0x27,
77553 -0x02,0x80,0x03,0x3C,
77554 -0x30,0x1F,0x63,0x24,
77555 -0xB0,0x1B,0x62,0x94,
77556 -0x01,0x00,0x05,0x24,
77557 -0x21,0x20,0x00,0x00,
77558 -0xEF,0xFF,0x42,0x30,
77559 -0x20,0x00,0x42,0x34,
77560 -0xB0,0x1B,0x62,0xA4,
77561 -0xC8,0x00,0x02,0x24,
77562 -0x74,0x3D,0x65,0xAC,
77563 -0xB4,0x38,0x62,0xAC,
77564 -0xD0,0x38,0x60,0xAC,
77565 -0x6C,0x3D,0x60,0xAC,
77566 -0xBC,0x15,0x00,0x08,
77567 -0x70,0x3D,0x60,0xAC,
77568 -0x08,0x00,0xE0,0x03,
77569 -0x00,0x00,0x00,0x00,
77570 -0xA8,0xFF,0xBD,0x27,
77571 -0x50,0x00,0xBE,0xAF,
77572 -0x40,0x00,0xB4,0xAF,
77573 -0x3C,0x00,0xB3,0xAF,
77574 -0x54,0x00,0xBF,0xAF,
77575 -0x4C,0x00,0xB7,0xAF,
77576 -0x48,0x00,0xB6,0xAF,
77577 -0x44,0x00,0xB5,0xAF,
77578 -0x38,0x00,0xB2,0xAF,
77579 -0x34,0x00,0xB1,0xAF,
77580 -0x30,0x00,0xB0,0xAF,
77581 -0x21,0xA0,0x80,0x00,
77582 -0x02,0x00,0x84,0x90,
77583 -0x21,0xF0,0x00,0x00,
77584 -0x24,0x00,0xA0,0xAF,
77585 -0x0F,0x00,0x84,0x30,
77586 -0xC0,0x20,0x04,0x00,
77587 -0x21,0x20,0x94,0x00,
77588 -0x18,0x00,0x93,0x24,
77589 -0x00,0x60,0x12,0x40,
77590 -0x01,0x00,0x41,0x36,
77591 -0x01,0x00,0x21,0x38,
77592 -0x00,0x60,0x81,0x40,
77593 -0x02,0x80,0x15,0x3C,
77594 -0x28,0x00,0x84,0x24,
77595 -0x88,0x58,0xA5,0x26,
77596 -0x39,0x52,0x00,0x0C,
77597 -0x06,0x00,0x06,0x24,
77598 -0x0F,0x00,0x40,0x14,
77599 -0x02,0x80,0x16,0x3C,
77600 -0xF4,0x5E,0xC2,0x92,
77601 -0x00,0x00,0x00,0x00,
77602 -0x29,0x00,0x40,0x14,
77603 -0x02,0x80,0x02,0x3C,
77604 -0xF4,0x5E,0xC2,0x92,
77605 -0x00,0x00,0x00,0x00,
77606 -0x07,0x00,0x40,0x14,
77607 -0x02,0x80,0x02,0x3C,
77608 -0x30,0x1F,0x50,0x24,
77609 -0xB0,0x1B,0x02,0x96,
77610 -0x00,0x00,0x00,0x00,
77611 -0x00,0x01,0x42,0x30,
77612 -0x3C,0x01,0x40,0x14,
77613 -0x05,0x00,0x05,0x24,
77614 -0x00,0x60,0x92,0x40,
77615 -0x02,0x80,0x03,0x3C,
77616 -0x30,0x1F,0x70,0x24,
77617 -0xB0,0x1B,0x03,0x96,
77618 -0x00,0x00,0x00,0x00,
77619 -0x00,0x10,0x62,0x30,
77620 -0x24,0x01,0x40,0x14,
77621 -0x10,0x00,0x62,0x30,
77622 -0xCB,0x00,0x40,0x14,
77623 -0x10,0x00,0x64,0x26,
77624 -0x02,0x80,0x04,0x3C,
77625 -0x30,0x1F,0x92,0x24,
77626 -0xB0,0x1B,0x42,0x96,
77627 -0x00,0x00,0x00,0x00,
77628 -0x00,0x01,0x42,0x30,
77629 -0x4E,0x01,0x40,0x14,
77630 -0x21,0x18,0x00,0x00,
77631 -0x54,0x00,0xBF,0x8F,
77632 -0x50,0x00,0xBE,0x8F,
77633 -0x4C,0x00,0xB7,0x8F,
77634 -0x48,0x00,0xB6,0x8F,
77635 -0x44,0x00,0xB5,0x8F,
77636 -0x40,0x00,0xB4,0x8F,
77637 -0x3C,0x00,0xB3,0x8F,
77638 -0x38,0x00,0xB2,0x8F,
77639 -0x34,0x00,0xB1,0x8F,
77640 -0x30,0x00,0xB0,0x8F,
77641 -0x21,0x10,0x60,0x00,
77642 -0x08,0x00,0xE0,0x03,
77643 -0x58,0x00,0xBD,0x27,
77644 -0x30,0x1F,0x43,0x24,
77645 -0xB0,0x1B,0x62,0x94,
77646 -0x00,0x00,0x00,0x00,
77647 -0x00,0x01,0x42,0x30,
77648 -0xD3,0xFF,0x40,0x10,
77649 -0x00,0x00,0x00,0x00,
77650 -0x6C,0x3B,0x62,0x8C,
77651 -0x00,0x00,0x00,0x00,
77652 -0xCF,0xFF,0x40,0x14,
77653 -0x02,0x80,0x0B,0x3C,
77654 -0x15,0x5F,0x62,0x91,
77655 -0x00,0x00,0x00,0x00,
77656 -0x55,0x01,0x40,0x14,
77657 -0x00,0x00,0x00,0x00,
77658 -0x02,0x80,0x02,0x3C,
77659 -0x02,0x80,0x03,0x3C,
77660 -0xFA,0x5E,0x40,0xA0,
77661 -0x1C,0x5F,0x60,0xAC,
77662 -0x02,0x80,0x03,0x3C,
77663 -0x0E,0x5F,0x62,0x90,
77664 -0xFD,0xFF,0x03,0x24,
77665 -0x02,0x80,0x04,0x3C,
77666 -0x24,0x10,0x43,0x00,
77667 -0x0E,0x5F,0x82,0xA0,
77668 -0x42,0xB0,0x17,0x3C,
77669 -0x00,0x00,0xE3,0x92,
77670 -0xEF,0xFF,0x02,0x24,
77671 -0x03,0x00,0xE4,0x36,
77672 -0x24,0x18,0x62,0x00,
77673 -0x40,0x00,0x02,0x24,
77674 -0x00,0x00,0xE3,0xA2,
77675 -0x00,0x00,0x82,0xA0,
77676 -0x02,0x80,0x04,0x3C,
77677 -0xFC,0x5E,0x82,0x94,
77678 -0x20,0x00,0x63,0x96,
77679 -0xFF,0xFF,0x42,0x30,
77680 -0x0A,0x00,0x43,0x10,
77681 -0x02,0x80,0x07,0x3C,
77682 -0x25,0xB0,0x02,0x3C,
77683 -0x94,0x00,0x42,0x34,
77684 -0xFC,0x5E,0x83,0xA4,
77685 -0x00,0x00,0x43,0xA4,
77686 -0xFC,0x5E,0x83,0x94,
77687 -0x00,0x00,0x00,0x00,
77688 -0xFF,0xFF,0x63,0x30,
77689 -0x80,0x1A,0x03,0x00,
77690 -0x00,0x5F,0xE3,0xAC,
77691 -0x25,0xB0,0x04,0x3C,
77692 -0x84,0x00,0x82,0x34,
77693 -0x00,0x00,0x50,0x8C,
77694 -0x80,0x00,0x84,0x34,
77695 -0x00,0x00,0x82,0x8C,
77696 -0x21,0x18,0x00,0x00,
77697 -0x00,0x5F,0xE6,0x8C,
77698 -0x00,0x88,0x10,0x00,
77699 -0x21,0x80,0x00,0x00,
77700 -0x25,0x80,0x02,0x02,
77701 -0x25,0x88,0x23,0x02,
77702 -0x21,0x20,0x00,0x02,
77703 -0x21,0x28,0x20,0x02,
77704 -0x28,0x00,0xA7,0xAF,
77705 -0xBA,0x34,0x00,0x0C,
77706 -0x2C,0x00,0xAB,0xAF,
77707 -0x28,0x00,0xA7,0x8F,
77708 -0x02,0x80,0x0A,0x3C,
77709 -0x21,0x28,0x00,0x00,
77710 -0x00,0x5F,0xE8,0x8C,
77711 -0x04,0x5F,0x43,0x95,
77712 -0x21,0x28,0xB1,0x00,
77713 -0x23,0x48,0x02,0x01,
77714 -0x21,0x20,0x30,0x01,
77715 -0x2B,0x10,0x90,0x00,
77716 -0xFF,0xFF,0x63,0x30,
77717 -0x80,0x1A,0x03,0x00,
77718 -0x21,0x28,0xA2,0x00,
77719 -0x21,0x38,0x00,0x00,
77720 -0x2B,0x40,0x83,0x00,
77721 -0x23,0x28,0xA7,0x00,
77722 -0x23,0x20,0x83,0x00,
77723 -0x23,0x28,0xA8,0x00,
77724 -0x02,0x80,0x03,0x3C,
77725 -0x20,0x5F,0x64,0xAC,
77726 -0x24,0x5F,0x65,0xAC,
77727 -0x04,0x5F,0x42,0x95,
77728 -0x2C,0x00,0xAB,0x8F,
77729 -0xFF,0xFF,0x42,0x30,
77730 -0x80,0x12,0x02,0x00,
77731 -0x2B,0x10,0x49,0x00,
77732 -0x31,0x01,0x40,0x10,
77733 -0x00,0x00,0x00,0x00,
77734 -0x04,0x5F,0x42,0x95,
77735 -0x00,0x00,0xE4,0x92,
77736 -0xFB,0xFF,0x03,0x24,
77737 -0xFF,0xFF,0x42,0x30,
77738 -0x80,0x12,0x02,0x00,
77739 -0x24,0x20,0x83,0x00,
77740 -0x23,0x48,0x22,0x01,
77741 -0x00,0x00,0xE4,0xA2,
77742 -0x01,0x00,0x06,0x24,
77743 -0x04,0x00,0x20,0x11,
77744 -0x01,0x00,0x04,0x24,
77745 -0x80,0x10,0x09,0x00,
77746 -0x21,0x10,0x49,0x00,
77747 -0x80,0x30,0x02,0x00,
77748 -0x8C,0x23,0x00,0x0C,
77749 -0x21,0x28,0x00,0x00,
77750 -0x42,0xB0,0x02,0x3C,
77751 -0x22,0x00,0x03,0x24,
77752 -0x03,0x00,0x42,0x34,
77753 -0x00,0x00,0x43,0xA0,
77754 -0x00,0x00,0x87,0x8E,
77755 -0x05,0x00,0x05,0x24,
77756 -0x24,0x00,0x64,0x26,
77757 -0xFF,0x3F,0xE7,0x30,
77758 -0xDC,0xFF,0xE7,0x24,
77759 -0x55,0x1D,0x00,0x0C,
77760 -0x20,0x00,0xA6,0x27,
77761 -0x2E,0x00,0x40,0x10,
77762 -0x21,0x28,0x40,0x00,
77763 -0xF4,0x5E,0xC2,0x92,
77764 -0x02,0x00,0x03,0x24,
77765 -0xFF,0x00,0x42,0x30,
77766 -0x45,0x01,0x43,0x10,
77767 -0x02,0x80,0x07,0x3C,
77768 -0x02,0x00,0xA2,0x90,
77769 -0x00,0x00,0x00,0x00,
77770 -0x08,0x00,0x40,0x14,
77771 -0x00,0x00,0x00,0x00,
77772 -0x04,0x00,0xA3,0x90,
77773 -0x00,0x00,0x00,0x00,
77774 -0x01,0x00,0x62,0x30,
77775 -0x04,0x00,0x40,0x10,
77776 -0x02,0x80,0x02,0x3C,
77777 -0x01,0x00,0x1E,0x24,
77778 -0x12,0x5F,0x5E,0xA0,
77779 -0x04,0x00,0xA3,0x90,
77780 -0x20,0x00,0xA7,0x8F,
77781 -0x00,0x00,0x00,0x00,
77782 -0x04,0x00,0xE2,0x28,
77783 -0x18,0x00,0x40,0x14,
77784 -0xFE,0x00,0x66,0x30,
77785 -0x02,0x80,0x02,0x3C,
77786 -0x30,0x1F,0x43,0x24,
77787 -0x50,0x39,0x64,0x94,
77788 -0xC0,0x10,0x06,0x00,
77789 -0x2A,0x10,0x82,0x00,
77790 -0x12,0x00,0x40,0x14,
77791 -0x02,0x80,0x03,0x3C,
77792 -0x21,0x10,0xC7,0x00,
77793 -0xFD,0xFF,0x42,0x24,
77794 -0xC0,0x10,0x02,0x00,
77795 -0x2A,0x10,0x44,0x00,
77796 -0x0C,0x00,0x40,0x14,
77797 -0xC2,0x10,0x04,0x00,
77798 -0x23,0x30,0x46,0x00,
77799 -0x21,0x18,0xA6,0x00,
77800 -0x05,0x00,0x62,0x90,
77801 -0x07,0x00,0x84,0x30,
77802 -0x01,0x00,0x03,0x24,
77803 -0x07,0x10,0x82,0x00,
77804 -0x24,0x00,0xA4,0x8F,
77805 -0x01,0x00,0x42,0x30,
77806 -0x0B,0x20,0x62,0x00,
77807 -0x24,0x00,0xA4,0xAF,
77808 -0x02,0x80,0x03,0x3C,
77809 -0x0E,0x5F,0x62,0x90,
77810 -0xEF,0xFF,0x03,0x24,
77811 -0x02,0x80,0x04,0x3C,
77812 -0x24,0x10,0x43,0x00,
77813 -0x0E,0x5F,0x82,0xA0,
77814 -0xF4,0x5E,0xC3,0x92,
77815 -0x02,0x80,0x02,0x3C,
77816 -0x24,0xE9,0x42,0x24,
77817 -0xFF,0x00,0x63,0x30,
77818 -0x80,0x18,0x03,0x00,
77819 -0x21,0x18,0x62,0x00,
77820 -0x00,0x00,0x66,0x8C,
77821 -0x24,0x00,0xA5,0x8F,
77822 -0x09,0xF8,0xC0,0x00,
77823 -0x21,0x20,0xC0,0x03,
77824 -0x90,0x16,0x00,0x08,
77825 -0x00,0x00,0x00,0x00,
77826 -0x88,0x58,0xA5,0x26,
77827 -0x39,0x52,0x00,0x0C,
77828 -0x06,0x00,0x06,0x24,
77829 -0x33,0xFF,0x40,0x14,
77830 -0x02,0x80,0x04,0x3C,
77831 -0x06,0x00,0x02,0x24,
77832 -0x0A,0x3E,0x02,0xA2,
77833 -0xEC,0x38,0x00,0xAE,
77834 -0x00,0x00,0x84,0x8E,
77835 -0x0C,0x00,0x12,0x24,
77836 -0xFF,0x3F,0x82,0x30,
77837 -0xE8,0xFF,0x42,0x24,
77838 -0x2A,0x10,0x42,0x02,
77839 -0xA4,0x00,0x40,0x10,
77840 -0x21,0xA8,0x00,0x02,
77841 -0x7D,0x17,0x00,0x08,
77842 -0x21,0x80,0x72,0x02,
77843 -0x19,0x00,0x03,0x92,
77844 -0xFF,0x3F,0x82,0x30,
77845 -0xE8,0xFF,0x42,0x24,
77846 -0x21,0x18,0x72,0x00,
77847 -0x02,0x00,0x72,0x24,
77848 -0x2A,0x10,0x42,0x02,
77849 -0x9A,0x00,0x40,0x10,
77850 -0x21,0x80,0x72,0x02,
77851 -0x18,0x00,0x03,0x92,
77852 -0xDD,0x00,0x02,0x24,
77853 -0xF5,0xFF,0x62,0x14,
77854 -0x1A,0x00,0x11,0x26,
77855 -0x02,0x80,0x05,0x3C,
77856 -0xC4,0xDD,0xA5,0x24,
77857 -0x21,0x20,0x20,0x02,
77858 -0x39,0x52,0x00,0x0C,
77859 -0x03,0x00,0x06,0x24,
77860 -0x20,0x01,0x40,0x10,
77861 -0x02,0x80,0x05,0x3C,
77862 -0xC0,0xDD,0xA5,0x24,
77863 -0x21,0x20,0x20,0x02,
77864 -0x39,0x52,0x00,0x0C,
77865 -0x03,0x00,0x06,0x24,
77866 -0x1A,0x01,0x40,0x10,
77867 -0x02,0x80,0x05,0x3C,
77868 -0xBC,0xDD,0xA5,0x24,
77869 -0x21,0x20,0x20,0x02,
77870 -0x39,0x52,0x00,0x0C,
77871 -0x03,0x00,0x06,0x24,
77872 -0x0F,0x01,0x40,0x10,
77873 -0x02,0x80,0x05,0x3C,
77874 -0xB8,0xDD,0xA5,0x24,
77875 -0x21,0x20,0x20,0x02,
77876 -0x39,0x52,0x00,0x0C,
77877 -0x03,0x00,0x06,0x24,
77878 -0x09,0x01,0x40,0x10,
77879 -0x02,0x80,0x05,0x3C,
77880 -0xB4,0xDD,0xA5,0x24,
77881 -0x21,0x20,0x20,0x02,
77882 -0x39,0x52,0x00,0x0C,
77883 -0x03,0x00,0x06,0x24,
77884 -0x03,0x01,0x40,0x10,
77885 -0x02,0x80,0x05,0x3C,
77886 -0xAC,0xDD,0xA5,0x24,
77887 -0x21,0x20,0x20,0x02,
77888 -0x39,0x52,0x00,0x0C,
77889 -0x03,0x00,0x06,0x24,
77890 -0x64,0x01,0x40,0x10,
77891 -0x02,0x80,0x05,0x3C,
77892 -0xA8,0xDD,0xA5,0x24,
77893 -0x21,0x20,0x20,0x02,
77894 -0x39,0x52,0x00,0x0C,
77895 -0x03,0x00,0x06,0x24,
77896 -0x57,0x01,0x40,0x10,
77897 -0x02,0x80,0x05,0x3C,
77898 -0xB0,0xDD,0xA5,0x24,
77899 -0x21,0x20,0x20,0x02,
77900 -0x39,0x52,0x00,0x0C,
77901 -0x03,0x00,0x06,0x24,
77902 -0x4A,0x01,0x40,0x10,
77903 -0x02,0x80,0x05,0x3C,
77904 -0x21,0x20,0x20,0x02,
77905 -0x9C,0xDD,0xA5,0x24,
77906 -0x39,0x52,0x00,0x0C,
77907 -0x06,0x00,0x06,0x24,
77908 -0x3E,0x01,0x40,0x10,
77909 -0x02,0x80,0x02,0x3C,
77910 -0x00,0x00,0x84,0x8E,
77911 -0x75,0x17,0x00,0x08,
77912 -0x00,0x00,0x00,0x00,
77913 -0x92,0x10,0x00,0x0C,
77914 -0x21,0x20,0x80,0x02,
77915 -0x21,0x18,0x00,0x00,
77916 -0x54,0x00,0xBF,0x8F,
77917 -0x50,0x00,0xBE,0x8F,
77918 -0x4C,0x00,0xB7,0x8F,
77919 -0x48,0x00,0xB6,0x8F,
77920 -0x44,0x00,0xB5,0x8F,
77921 -0x40,0x00,0xB4,0x8F,
77922 -0x3C,0x00,0xB3,0x8F,
77923 -0x38,0x00,0xB2,0x8F,
77924 -0x34,0x00,0xB1,0x8F,
77925 -0x30,0x00,0xB0,0x8F,
77926 -0x21,0x10,0x60,0x00,
77927 -0x08,0x00,0xE0,0x03,
77928 -0x58,0x00,0xBD,0x27,
77929 -0x00,0x00,0x87,0x8E,
77930 -0x24,0x00,0x64,0x26,
77931 -0xFF,0x3F,0xE7,0x30,
77932 -0xDC,0xFF,0xE7,0x24,
77933 -0x55,0x1D,0x00,0x0C,
77934 -0x20,0x00,0xA6,0x27,
77935 -0xBE,0xFE,0x40,0x10,
77936 -0x21,0x28,0x40,0x00,
77937 -0x20,0x00,0xA7,0x8F,
77938 -0x04,0x00,0x42,0x90,
77939 -0x04,0x00,0xE3,0x28,
77940 -0xB9,0xFE,0x60,0x14,
77941 -0xFE,0x00,0x46,0x30,
77942 -0x50,0x39,0x04,0x96,
77943 -0xC0,0x10,0x06,0x00,
77944 -0x2A,0x10,0x82,0x00,
77945 -0xB4,0xFE,0x40,0x14,
77946 -0x21,0x10,0xC7,0x00,
77947 -0xFD,0xFF,0x42,0x24,
77948 -0xC0,0x10,0x02,0x00,
77949 -0x2A,0x10,0x44,0x00,
77950 -0xAF,0xFE,0x40,0x14,
77951 -0xC2,0x10,0x04,0x00,
77952 -0x23,0x30,0x46,0x00,
77953 -0x21,0x18,0xA6,0x00,
77954 -0x05,0x00,0x62,0x90,
77955 -0x07,0x00,0x84,0x30,
77956 -0x07,0x10,0x82,0x00,
77957 -0x01,0x00,0x42,0x30,
77958 -0xA7,0xFE,0x40,0x10,
77959 -0x00,0x00,0x00,0x00,
77960 -0xCD,0x4E,0x00,0x0C,
77961 -0x21,0x20,0x00,0x00,
77962 -0x90,0x16,0x00,0x08,
77963 -0x00,0x00,0x00,0x00,
77964 -0x88,0x58,0xA5,0x26,
77965 -0x10,0x00,0x64,0x26,
77966 -0x39,0x52,0x00,0x0C,
77967 -0x06,0x00,0x06,0x24,
77968 -0xCB,0xFF,0x40,0x14,
77969 -0x21,0x18,0x00,0x00,
77970 -0xB0,0x1B,0x43,0x96,
77971 -0x00,0x00,0x00,0x00,
77972 -0x01,0x00,0x62,0x30,
77973 -0x0D,0x00,0x40,0x14,
77974 -0x04,0x00,0x62,0x30,
77975 -0x83,0x00,0x40,0x14,
77976 -0x02,0x80,0x03,0x3C,
77977 -0x30,0x1F,0x70,0x24,
77978 -0x0B,0x3E,0x02,0x92,
77979 -0x00,0x00,0x00,0x00,
77980 -0x01,0x00,0x44,0x24,
77981 -0xFF,0x00,0x83,0x30,
77982 -0x0B,0x00,0x02,0x24,
77983 -0x45,0x00,0x62,0x10,
77984 -0x21,0x18,0x00,0x00,
77985 -0xA1,0x16,0x00,0x08,
77986 -0x0B,0x3E,0x04,0xA2,
77987 -0x00,0x60,0x03,0x40,
77988 -0x01,0x00,0x61,0x34,
77989 -0x01,0x00,0x21,0x38,
77990 -0x00,0x60,0x81,0x40,
77991 -0xD4,0x1E,0x42,0x8E,
77992 -0x00,0x00,0x00,0x00,
77993 -0x01,0x00,0x42,0x24,
77994 -0xD4,0x1E,0x42,0xAE,
77995 -0x00,0x60,0x83,0x40,
77996 -0xFB,0x17,0x00,0x08,
77997 -0x02,0x80,0x03,0x3C,
77998 -0x15,0x5F,0x62,0x91,
77999 -0x00,0x00,0x00,0x00,
78000 -0xFF,0xFF,0x42,0x24,
78001 -0x15,0x5F,0x62,0xA1,
78002 -0xBD,0x16,0x00,0x08,
78003 -0x02,0x80,0x02,0x3C,
78004 -0x02,0x80,0x04,0x3C,
78005 -0xFC,0xE2,0x84,0x24,
78006 -0x2F,0x55,0x00,0x0C,
78007 -0x00,0x00,0x00,0x00,
78008 -0x02,0x80,0x02,0x3C,
78009 -0xE6,0x5D,0x46,0x90,
78010 -0x01,0x00,0x03,0x24,
78011 -0x10,0x00,0xC3,0x10,
78012 -0x02,0x80,0x03,0x3C,
78013 -0x53,0x16,0x00,0x0C,
78014 -0x00,0x00,0x00,0x00,
78015 -0x54,0x00,0xBF,0x8F,
78016 -0x50,0x00,0xBE,0x8F,
78017 -0x4C,0x00,0xB7,0x8F,
78018 -0x48,0x00,0xB6,0x8F,
78019 -0x44,0x00,0xB5,0x8F,
78020 -0x40,0x00,0xB4,0x8F,
78021 -0x3C,0x00,0xB3,0x8F,
78022 -0x38,0x00,0xB2,0x8F,
78023 -0x34,0x00,0xB1,0x8F,
78024 -0x30,0x00,0xB0,0x8F,
78025 -0x21,0x10,0x60,0x00,
78026 -0x08,0x00,0xE0,0x03,
78027 -0x58,0x00,0xBD,0x27,
78028 -0x30,0x1F,0x64,0x24,
78029 -0x0A,0x3E,0x83,0x90,
78030 -0x03,0x00,0x02,0x24,
78031 -0x62,0x00,0x62,0x10,
78032 -0x00,0x00,0x00,0x00,
78033 -0x91,0x3E,0x86,0xA0,
78034 -0x53,0x16,0x00,0x0C,
78035 -0x90,0x3E,0x80,0xA0,
78036 -0x21,0x18,0x00,0x08,
78037 -0x00,0x00,0x00,0x00,
78038 -0x15,0x5F,0x62,0x91,
78039 -0x00,0x00,0x00,0x00,
78040 -0x05,0x00,0x40,0x14,
78041 -0x00,0x00,0x00,0x00,
78042 -0x15,0x5F,0x62,0x91,
78043 -0x00,0x00,0x00,0x00,
78044 -0x01,0x00,0x42,0x24,
78045 -0x15,0x5F,0x62,0xA1,
78046 -0x00,0x00,0xE2,0x92,
78047 -0xFB,0xFF,0x03,0x24,
78048 -0x01,0x00,0x06,0x24,
78049 -0x24,0x10,0x43,0x00,
78050 -0x00,0x00,0xE2,0xA2,
78051 -0x11,0x17,0x00,0x08,
78052 -0x00,0x00,0x00,0x00,
78053 -0x02,0x80,0x02,0x3C,
78054 -0xE6,0x5D,0x43,0x90,
78055 -0x01,0x00,0x11,0x24,
78056 -0x53,0x00,0x71,0x10,
78057 -0x0B,0x3E,0x00,0xA2,
78058 -0x02,0x80,0x02,0x3C,
78059 -0xEA,0x5D,0x44,0x90,
78060 -0x02,0x00,0x03,0x24,
78061 -0x6E,0xFF,0x83,0x14,
78062 -0x21,0x18,0x00,0x00,
78063 -0x00,0x00,0x87,0x8E,
78064 -0x24,0x00,0x64,0x26,
78065 -0x2A,0x00,0x05,0x24,
78066 -0xFF,0x3F,0xE7,0x30,
78067 -0xDC,0xFF,0xE7,0x24,
78068 -0x55,0x1D,0x00,0x0C,
78069 -0x20,0x00,0xA6,0x27,
78070 -0x65,0xFF,0x40,0x10,
78071 -0x21,0x18,0x00,0x00,
78072 -0x02,0x00,0x43,0x90,
78073 -0x00,0x00,0x00,0x00,
78074 -0x02,0x00,0x62,0x30,
78075 -0x4D,0x00,0x40,0x10,
78076 -0x02,0x80,0x04,0x3C,
78077 -0x01,0x00,0x62,0x30,
78078 -0x4B,0x00,0x40,0x14,
78079 -0x30,0x1F,0x85,0x24,
78080 -0x02,0x80,0x02,0x3C,
78081 -0xEB,0x5D,0x43,0x90,
78082 -0x00,0x00,0x00,0x00,
78083 -0xAA,0x00,0x71,0x10,
78084 -0x00,0x00,0x00,0x00,
78085 -0x10,0x23,0x02,0x8E,
78086 -0xFF,0xEF,0x03,0x24,
78087 -0x00,0x08,0x42,0x34,
78088 -0x24,0x10,0x43,0x00,
78089 -0x10,0x23,0x02,0xAE,
78090 -0xBE,0x17,0x00,0x08,
78091 -0x21,0x18,0x00,0x00,
78092 -0x03,0x00,0xA2,0x90,
78093 -0x02,0x80,0x04,0x3C,
78094 -0x10,0x5F,0xE2,0xA0,
78095 -0x02,0x00,0xA3,0x90,
78096 -0x21,0x30,0x80,0x00,
78097 -0x11,0x5F,0x83,0xA0,
78098 -0x11,0x5F,0x82,0x90,
78099 -0x00,0x00,0x00,0x00,
78100 -0x22,0x00,0x40,0x14,
78101 -0x00,0x00,0x00,0x00,
78102 -0x10,0x5F,0xE2,0x90,
78103 -0x00,0x00,0x00,0x00,
78104 -0x11,0x5F,0xC2,0xA0,
78105 -0x2A,0x17,0x00,0x08,
78106 -0x00,0x00,0x00,0x00,
78107 -0x0A,0x00,0x76,0x26,
78108 -0x3B,0x51,0x00,0x0C,
78109 -0x21,0x20,0xC0,0x02,
78110 -0x20,0x00,0x10,0x24,
78111 -0x32,0x00,0x50,0x10,
78112 -0x21,0xA8,0x40,0x00,
78113 -0x00,0x60,0x05,0x40,
78114 -0x01,0x00,0xA1,0x34,
78115 -0x01,0x00,0x21,0x38,
78116 -0x00,0x60,0x81,0x40,
78117 -0x80,0x18,0x15,0x00,
78118 -0x21,0x18,0x75,0x00,
78119 -0x02,0x80,0x02,0x3C,
78120 -0x30,0x1F,0x44,0x24,
78121 -0xC0,0x18,0x03,0x00,
78122 -0x21,0x18,0x64,0x00,
78123 -0x0C,0x1E,0x62,0x8C,
78124 -0x00,0x00,0x00,0x00,
78125 -0x01,0x00,0x42,0x24,
78126 -0x0C,0x1E,0x62,0xAC,
78127 -0x00,0x60,0x85,0x40,
78128 -0xBE,0x17,0x00,0x08,
78129 -0x21,0x18,0x00,0x00,
78130 -0x90,0x3E,0x86,0xA0,
78131 -0x53,0x16,0x00,0x0C,
78132 -0x91,0x3E,0x80,0xA0,
78133 -0x21,0x18,0x00,0x08,
78134 -0x00,0x00,0x00,0x00,
78135 -0x11,0x5F,0x82,0x90,
78136 -0x00,0x00,0x00,0x00,
78137 -0x11,0x5F,0xC2,0xA0,
78138 -0x2A,0x17,0x00,0x08,
78139 -0x00,0x00,0x00,0x00,
78140 -0x64,0x12,0x00,0x0C,
78141 -0x00,0x00,0x00,0x00,
78142 -0x4D,0x18,0x00,0x08,
78143 -0x02,0x80,0x02,0x3C,
78144 -0x02,0x80,0x04,0x3C,
78145 -0x01,0x00,0x02,0x24,
78146 -0x90,0xE2,0x84,0x24,
78147 -0x18,0x18,0x00,0x08,
78148 -0x0A,0x3E,0xA2,0xA2,
78149 -0x02,0x80,0x04,0x3C,
78150 -0x78,0xE2,0x84,0x24,
78151 -0x18,0x18,0x00,0x08,
78152 -0x0A,0x3E,0xA0,0xA2,
78153 -0x30,0x1F,0x85,0x24,
78154 -0x10,0x23,0xA2,0x8C,
78155 -0xFF,0xEF,0x03,0x24,
78156 -0xFF,0xF7,0x04,0x24,
78157 -0x24,0x10,0x43,0x00,
78158 -0x24,0x10,0x44,0x00,
78159 -0x21,0x18,0x00,0x00,
78160 -0xBE,0x17,0x00,0x08,
78161 -0x10,0x23,0xA2,0xAC,
78162 -0xFF,0xFF,0x04,0x24,
78163 -0xE3,0x50,0x00,0x0C,
78164 -0x21,0x28,0xC0,0x02,
78165 -0xCB,0xFF,0x50,0x10,
78166 -0x21,0xA8,0x40,0x00,
78167 -0x00,0x00,0x87,0x8E,
78168 -0x24,0x00,0x70,0x26,
78169 -0x21,0x20,0x00,0x02,
78170 -0xFF,0x3F,0xE7,0x30,
78171 -0xDC,0xFF,0xE7,0x24,
78172 -0x01,0x00,0x05,0x24,
78173 -0x55,0x1D,0x00,0x0C,
78174 -0x20,0x00,0xA6,0x27,
78175 -0xDF,0xFD,0x40,0x10,
78176 -0x21,0x18,0x00,0x00,
78177 -0x20,0x00,0xA6,0x8F,
78178 -0x02,0x00,0x45,0x24,
78179 -0x10,0x52,0x00,0x0C,
78180 -0x10,0x00,0xA4,0x27,
78181 -0x00,0x00,0x87,0x8E,
78182 -0x21,0x20,0x00,0x02,
78183 -0x32,0x00,0x05,0x24,
78184 -0xFF,0x3F,0xE7,0x30,
78185 -0xDC,0xFF,0xE7,0x24,
78186 -0x20,0x00,0xB1,0x8F,
78187 -0x55,0x1D,0x00,0x0C,
78188 -0x20,0x00,0xA6,0x27,
78189 -0x09,0x00,0x40,0x10,
78190 -0x00,0x00,0x00,0x00,
78191 -0x20,0x00,0xA6,0x8F,
78192 -0x10,0x00,0xA4,0x27,
78193 -0x21,0x20,0x91,0x00,
78194 -0x10,0x52,0x00,0x0C,
78195 -0x02,0x00,0x45,0x24,
78196 -0x20,0x00,0xA3,0x8F,
78197 -0x00,0x00,0x00,0x00,
78198 -0x21,0x88,0x23,0x02,
78199 -0x10,0x00,0xA4,0x27,
78200 -0x7D,0x50,0x00,0x0C,
78201 -0x21,0x28,0x20,0x02,
78202 -0x0F,0x00,0x42,0x30,
78203 -0x00,0x81,0x15,0x00,
78204 -0x21,0x28,0x20,0x02,
78205 -0x10,0x00,0xA4,0x27,
78206 -0x25,0x80,0x02,0x02,
78207 -0xC2,0x50,0x00,0x0C,
78208 -0xFF,0xFF,0x10,0x32,
78209 -0x02,0x80,0x04,0x3C,
78210 -0x21,0x88,0x40,0x00,
78211 -0x21,0x38,0x40,0x00,
78212 -0x21,0x28,0xA0,0x02,
78213 -0x21,0x30,0x00,0x02,
78214 -0x2F,0x55,0x00,0x0C,
78215 -0x10,0xE3,0x84,0x24,
78216 -0x21,0x20,0x00,0x02,
78217 -0xC1,0x5B,0x00,0x0C,
78218 -0x21,0x28,0x20,0x02,
78219 -0x8E,0x3E,0x42,0x92,
78220 -0x21,0x20,0xC0,0x02,
78221 -0x21,0x28,0xA0,0x02,
78222 -0x01,0x00,0x42,0x24,
78223 -0x9C,0x0E,0x00,0x0C,
78224 -0x8E,0x3E,0x42,0xA2,
78225 -0x83,0x18,0x00,0x08,
78226 -0x00,0x00,0x00,0x00,
78227 -0x02,0x80,0x04,0x3C,
78228 -0x30,0x1F,0x43,0x24,
78229 -0xE4,0xE2,0x84,0x24,
78230 -0x05,0x00,0x02,0x24,
78231 -0x18,0x18,0x00,0x08,
78232 -0x0A,0x3E,0x62,0xA0,
78233 -0x02,0x80,0x02,0x3C,
78234 -0x02,0x80,0x04,0x3C,
78235 -0x30,0x1F,0x43,0x24,
78236 -0xD0,0xE2,0x84,0x24,
78237 -0x02,0x00,0x02,0x24,
78238 -0x18,0x18,0x00,0x08,
78239 -0x0A,0x3E,0x62,0xA0,
78240 -0x02,0x80,0x02,0x3C,
78241 -0x02,0x80,0x04,0x3C,
78242 -0x30,0x1F,0x43,0x24,
78243 -0xBC,0xE2,0x84,0x24,
78244 -0x04,0x00,0x02,0x24,
78245 -0x18,0x18,0x00,0x08,
78246 -0x0A,0x3E,0x62,0xA0,
78247 -0x02,0x80,0x02,0x3C,
78248 -0x02,0x80,0x04,0x3C,
78249 -0x30,0x1F,0x43,0x24,
78250 -0xA8,0xE2,0x84,0x24,
78251 -0x03,0x00,0x02,0x24,
78252 -0x18,0x18,0x00,0x08,
78253 -0x0A,0x3E,0x62,0xA0,
78254 -0x10,0x23,0x02,0x8E,
78255 -0xFF,0xF7,0x03,0x24,
78256 -0x24,0x10,0x43,0x00,
78257 -0x00,0x10,0x42,0x34,
78258 -0x6C,0x18,0x00,0x08,
78259 -0x10,0x23,0x02,0xAE,
78260 -0xE8,0xFF,0xBD,0x27,
78261 -0x10,0x00,0xB0,0xAF,
78262 -0x02,0x80,0x10,0x3C,
78263 -0x30,0x1F,0x02,0x26,
78264 -0x14,0x00,0xBF,0xAF,
78265 -0xB0,0x1B,0x43,0x94,
78266 -0x21,0x28,0x00,0x00,
78267 -0x00,0x01,0x62,0x30,
78268 -0x03,0x00,0x40,0x10,
78269 -0x01,0x00,0x64,0x30,
78270 -0x06,0x00,0x80,0x14,
78271 -0x00,0x10,0x62,0x30,
78272 -0x14,0x00,0xBF,0x8F,
78273 -0x10,0x00,0xB0,0x8F,
78274 -0x21,0x10,0xA0,0x00,
78275 -0x08,0x00,0xE0,0x03,
78276 -0x18,0x00,0xBD,0x27,
78277 -0x08,0x00,0x40,0x14,
78278 -0x02,0x00,0x03,0x3C,
78279 -0x02,0x80,0x02,0x3C,
78280 -0xF6,0x5E,0x43,0x90,
78281 -0x0C,0x00,0x02,0x24,
78282 -0x0F,0x00,0x63,0x30,
78283 -0x0A,0x00,0x62,0x10,
78284 -0x21,0x20,0x00,0x00,
78285 -0x02,0x00,0x03,0x3C,
78286 -0x30,0x1F,0x04,0x26,
78287 -0x20,0xBF,0x63,0x34,
78288 -0x08,0x39,0x83,0xAC,
78289 -0x14,0x00,0xBF,0x8F,
78290 -0x10,0x00,0xB0,0x8F,
78291 -0x21,0x10,0xA0,0x00,
78292 -0x08,0x00,0xE0,0x03,
78293 -0x18,0x00,0xBD,0x27,
78294 -0xCD,0x4E,0x00,0x0C,
78295 -0x00,0x00,0x00,0x00,
78296 -0x02,0x00,0x03,0x3C,
78297 -0x30,0x1F,0x04,0x26,
78298 -0x20,0xBF,0x63,0x34,
78299 -0x33,0x19,0x00,0x08,
78300 -0x08,0x39,0x83,0xAC,
78301 -0xE0,0xFF,0xBD,0x27,
78302 -0x14,0x00,0xB1,0xAF,
78303 -0x02,0x80,0x11,0x3C,
78304 -0x1C,0x00,0xBF,0xAF,
78305 -0x18,0x00,0xB2,0xAF,
78306 -0x10,0x00,0xB0,0xAF,
78307 -0x30,0x1F,0x25,0x26,
78308 -0x6C,0x3B,0xA2,0x8C,
78309 -0x00,0x10,0x03,0x3C,
78310 -0x24,0x10,0x43,0x00,
78311 -0x21,0x00,0x40,0x10,
78312 -0x00,0x00,0x00,0x00,
78313 -0x9B,0x3B,0xA6,0x90,
78314 -0x9C,0x3B,0xA4,0x90,
78315 -0xFF,0x00,0xC3,0x30,
78316 -0x40,0x10,0x03,0x00,
78317 -0x21,0x10,0x43,0x00,
78318 -0x80,0x10,0x02,0x00,
78319 -0x21,0x10,0x43,0x00,
78320 -0x01,0x00,0x84,0x24,
78321 -0x80,0x10,0x02,0x00,
78322 -0xFF,0x00,0x83,0x30,
78323 -0x21,0x10,0x45,0x00,
78324 -0x21,0x10,0x43,0x00,
78325 -0x9C,0x3B,0xA4,0xA0,
78326 -0x38,0x3B,0x43,0x90,
78327 -0x00,0x00,0x00,0x00,
78328 -0x21,0x00,0x60,0x10,
78329 -0x01,0x00,0xC2,0x24,
78330 -0xFF,0x00,0xC2,0x30,
78331 -0x22,0x00,0x40,0x14,
78332 -0x30,0x1F,0x30,0x26,
78333 -0x9C,0x3B,0xA2,0x90,
78334 -0x00,0x00,0x00,0x00,
78335 -0x21,0x10,0x45,0x00,
78336 -0x38,0x3B,0x43,0x90,
78337 -0x00,0x00,0x00,0x00,
78338 -0xFF,0x00,0x64,0x30,
78339 -0x1A,0x00,0x80,0x10,
78340 -0x00,0x00,0x00,0x00,
78341 -0x67,0x3B,0xA2,0x90,
78342 -0x30,0x3B,0xA3,0xA0,
78343 -0x4F,0x0C,0x00,0x0C,
78344 -0x31,0x3B,0xA2,0xA0,
78345 -0x30,0x1F,0x30,0x26,
78346 -0x70,0x3B,0x03,0x8E,
78347 -0x01,0x00,0x02,0x24,
78348 -0x7C,0x00,0x62,0x10,
78349 -0x00,0x00,0x00,0x00,
78350 -0x6C,0x3B,0x03,0x8E,
78351 -0x00,0x10,0x02,0x3C,
78352 -0x3C,0x00,0x04,0x24,
78353 -0x26,0x18,0x62,0x00,
78354 -0x98,0x38,0x04,0xAE,
78355 -0x6C,0x3B,0x03,0xAE,
78356 -0x1C,0x00,0xBF,0x8F,
78357 -0x18,0x00,0xB2,0x8F,
78358 -0x14,0x00,0xB1,0x8F,
78359 -0x10,0x00,0xB0,0x8F,
78360 -0x08,0x00,0xE0,0x03,
78361 -0x20,0x00,0xBD,0x27,
78362 -0x21,0x30,0x40,0x00,
78363 -0x9B,0x3B,0xA2,0xA0,
78364 -0x5C,0x19,0x00,0x08,
78365 -0x9C,0x3B,0xA0,0xA0,
78366 -0x99,0x3B,0x03,0x92,
78367 -0x9A,0x3B,0x02,0x92,
78368 -0xFF,0x00,0x64,0x30,
78369 -0x30,0x3B,0x03,0xA2,
78370 -0x4F,0x0C,0x00,0x0C,
78371 -0x31,0x3B,0x02,0xA2,
78372 -0xB0,0x1B,0x03,0x96,
78373 -0x00,0x00,0x00,0x00,
78374 -0x00,0x01,0x62,0x30,
78375 -0x09,0x00,0x40,0x10,
78376 -0x01,0x00,0x62,0x30,
78377 -0x08,0x00,0x40,0x10,
78378 -0x30,0x1F,0x30,0x26,
78379 -0x02,0x80,0x02,0x3C,
78380 -0xF6,0x5E,0x43,0x90,
78381 -0x0C,0x00,0x02,0x24,
78382 -0x0F,0x00,0x63,0x30,
78383 -0x61,0x00,0x62,0x10,
78384 -0x00,0x00,0x00,0x00,
78385 -0x30,0x1F,0x30,0x26,
78386 -0x9E,0x3B,0x04,0x96,
78387 -0xA0,0x3B,0x05,0x92,
78388 -0x12,0x0D,0x00,0x0C,
78389 -0x00,0x00,0x00,0x00,
78390 -0xC1,0x48,0x00,0x0C,
78391 -0x00,0x00,0x00,0x00,
78392 -0x6C,0x3B,0x00,0xAE,
78393 -0x00,0x60,0x12,0x40,
78394 -0x01,0x00,0x41,0x36,
78395 -0x01,0x00,0x21,0x38,
78396 -0x00,0x60,0x81,0x40,
78397 -0xB0,0x1B,0x02,0x96,
78398 -0x00,0x00,0x00,0x00,
78399 -0x00,0x01,0x42,0x30,
78400 -0x3F,0x00,0x40,0x10,
78401 -0x02,0x80,0x02,0x3C,
78402 -0xF4,0x5E,0x43,0x90,
78403 -0x00,0x00,0x00,0x00,
78404 -0x3C,0x00,0x60,0x10,
78405 -0x02,0x80,0x02,0x3C,
78406 -0x02,0x80,0x03,0x3C,
78407 -0xF6,0x5E,0x62,0x90,
78408 -0x00,0x00,0x00,0x00,
78409 -0x0F,0x00,0x42,0x30,
78410 -0x04,0x00,0x42,0x28,
78411 -0x41,0x00,0x40,0x14,
78412 -0x04,0x00,0x04,0x24,
78413 -0x02,0x80,0x03,0x3C,
78414 -0x15,0x5F,0x62,0x90,
78415 -0x00,0x00,0x00,0x00,
78416 -0x05,0x00,0x40,0x14,
78417 -0x00,0x00,0x00,0x00,
78418 -0x15,0x5F,0x62,0x90,
78419 -0x00,0x00,0x00,0x00,
78420 -0x01,0x00,0x42,0x24,
78421 -0x15,0x5F,0x62,0xA0,
78422 -0x00,0x60,0x92,0x40,
78423 -0x25,0xB0,0x07,0x3C,
78424 -0x30,0x1F,0x30,0x26,
78425 -0xB0,0x1B,0x04,0x96,
78426 -0x48,0x00,0xE6,0x34,
78427 -0x00,0x00,0xC3,0x8C,
78428 -0xFF,0xEF,0x84,0x30,
78429 -0x80,0x00,0x02,0x3C,
78430 -0x25,0x18,0x62,0x00,
78431 -0x00,0x01,0x85,0x30,
78432 -0x00,0x00,0xC3,0xAC,
78433 -0x02,0x80,0x08,0x3C,
78434 -0x05,0x00,0xA0,0x10,
78435 -0xB0,0x1B,0x04,0xA6,
78436 -0x00,0x00,0xC2,0x8C,
78437 -0x04,0x00,0x03,0x3C,
78438 -0x25,0x10,0x43,0x00,
78439 -0x00,0x00,0xC2,0xAC,
78440 -0x30,0x1F,0x02,0x8D,
78441 -0xFF,0xF0,0x03,0x24,
78442 -0xA1,0x3B,0x05,0x92,
78443 -0x24,0x10,0x43,0x00,
78444 -0x00,0x01,0x42,0x34,
78445 -0x0F,0xFF,0x03,0x24,
78446 -0x24,0x10,0x43,0x00,
78447 -0x10,0x00,0x42,0x34,
78448 -0xF0,0xFF,0x03,0x24,
78449 -0x1C,0x00,0xBF,0x8F,
78450 -0x18,0x00,0xB2,0x8F,
78451 -0x14,0x00,0xB1,0x8F,
78452 -0x10,0x00,0xB0,0x8F,
78453 -0x24,0x10,0x43,0x00,
78454 -0x4C,0x00,0xE3,0x34,
78455 -0x01,0x00,0x42,0x34,
78456 -0x00,0x00,0x65,0xA0,
78457 -0x64,0x03,0xE4,0x34,
78458 -0x07,0x00,0x03,0x24,
78459 -0x20,0x00,0xBD,0x27,
78460 -0x30,0x1F,0x02,0xAD,
78461 -0x00,0x00,0x83,0xA0,
78462 -0x08,0x00,0xE0,0x03,
78463 -0x00,0x00,0x00,0x00,
78464 -0x02,0x80,0x02,0x3C,
78465 -0x15,0x5F,0x40,0xA0,
78466 -0x02,0x80,0x03,0x3C,
78467 -0xF5,0x5E,0x64,0x90,
78468 -0x01,0x00,0x05,0x24,
78469 -0x64,0x31,0x00,0x0C,
78470 -0xFF,0x00,0x84,0x30,
78471 -0xB8,0x19,0x00,0x08,
78472 -0x00,0x00,0x00,0x00,
78473 -0x13,0x0F,0x00,0x0C,
78474 -0x00,0x00,0x00,0x00,
78475 -0x70,0x19,0x00,0x08,
78476 -0x00,0x00,0x00,0x00,
78477 -0x64,0x31,0x00,0x0C,
78478 -0x01,0x00,0x05,0x24,
78479 -0xB0,0x19,0x00,0x08,
78480 -0x02,0x80,0x03,0x3C,
78481 -0xCD,0x4E,0x00,0x0C,
78482 -0x21,0x20,0x00,0x00,
78483 -0x94,0x19,0x00,0x08,
78484 -0x30,0x1F,0x30,0x26,
78485 -0x0C,0x00,0x82,0x8C,
78486 -0x00,0x00,0x00,0x00,
78487 -0x3F,0x00,0x42,0x30,
78488 -0x04,0x00,0x42,0x28,
78489 -0x17,0x00,0x40,0x10,
78490 -0x00,0x00,0x00,0x00,
78491 -0x25,0xB0,0x02,0x3C,
78492 -0x24,0x08,0x42,0x34,
78493 -0x00,0x00,0x43,0x8C,
78494 -0x00,0x00,0x00,0x00,
78495 -0x00,0x02,0x63,0x30,
78496 -0x15,0x00,0x60,0x14,
78497 -0x01,0x00,0x02,0x24,
78498 -0x05,0x00,0xA3,0x90,
78499 -0x00,0x00,0x00,0x00,
78500 -0x82,0x21,0x03,0x00,
78501 -0x28,0x00,0x82,0x10,
78502 -0xF5,0xFF,0x02,0x24,
78503 -0x02,0x00,0x82,0x28,
78504 -0x3B,0x00,0x40,0x14,
78505 -0x02,0x00,0x02,0x24,
78506 -0x2F,0x00,0x82,0x10,
78507 -0xE9,0xFF,0x02,0x24,
78508 -0x03,0x00,0x02,0x24,
78509 -0x24,0x00,0x82,0x10,
78510 -0x00,0x00,0x00,0x00,
78511 -0x08,0x00,0xE0,0x03,
78512 -0x05,0x00,0xC2,0x24,
78513 -0x04,0x00,0xA2,0x90,
78514 -0x00,0x00,0x00,0x00,
78515 -0x42,0x10,0x02,0x00,
78516 -0x08,0x00,0xE0,0x03,
78517 -0x96,0xFF,0x42,0x24,
78518 -0x05,0x00,0xA3,0x90,
78519 -0x00,0x00,0x00,0x00,
78520 -0x60,0x00,0x64,0x30,
78521 -0x42,0x21,0x04,0x00,
78522 -0x0F,0x00,0x82,0x10,
78523 -0x1F,0x00,0x62,0x30,
78524 -0x02,0x00,0x82,0x28,
78525 -0x1F,0x00,0x40,0x14,
78526 -0x02,0x00,0x02,0x24,
78527 -0x16,0x00,0x82,0x10,
78528 -0x1F,0x00,0x62,0x30,
78529 -0x03,0x00,0x02,0x24,
78530 -0xEC,0xFF,0x82,0x14,
78531 -0x00,0x00,0x00,0x00,
78532 -0x1F,0x00,0x62,0x30,
78533 -0x40,0x10,0x02,0x00,
78534 -0xDD,0xFF,0x03,0x24,
78535 -0x23,0x30,0x62,0x00,
78536 -0x08,0x00,0xE0,0x03,
78537 -0x05,0x00,0xC2,0x24,
78538 -0x40,0x10,0x02,0x00,
78539 -0xF5,0xFF,0x03,0x24,
78540 -0x2A,0x1A,0x00,0x08,
78541 -0x23,0x30,0x62,0x00,
78542 -0x3E,0x00,0x63,0x30,
78543 -0x23,0x30,0x43,0x00,
78544 -0x08,0x00,0xE0,0x03,
78545 -0x05,0x00,0xC2,0x24,
78546 -0x3E,0x00,0x63,0x30,
78547 -0xDD,0xFF,0x02,0x24,
78548 -0x32,0x1A,0x00,0x08,
78549 -0x23,0x30,0x43,0x00,
78550 -0x40,0x10,0x02,0x00,
78551 -0xE9,0xFF,0x03,0x24,
78552 -0x2A,0x1A,0x00,0x08,
78553 -0x23,0x30,0x62,0x00,
78554 -0x3E,0x00,0x63,0x30,
78555 -0x32,0x1A,0x00,0x08,
78556 -0x23,0x30,0x43,0x00,
78557 -0xD1,0xFF,0x80,0x14,
78558 -0x00,0x00,0x00,0x00,
78559 -0x1F,0x00,0x62,0x30,
78560 -0x40,0x10,0x02,0x00,
78561 -0xF8,0xFF,0x03,0x24,
78562 -0x2A,0x1A,0x00,0x08,
78563 -0x23,0x30,0x62,0x00,
78564 -0xCA,0xFF,0x80,0x14,
78565 -0x00,0x00,0x00,0x00,
78566 -0x3E,0x00,0x63,0x30,
78567 -0xF8,0xFF,0x02,0x24,
78568 -0x32,0x1A,0x00,0x08,
78569 -0x23,0x30,0x43,0x00,
78570 -0x63,0x00,0x82,0x24,
78571 -0x77,0x00,0x42,0x2C,
78572 -0x00,0x00,0x85,0x28,
78573 -0x04,0x00,0x40,0x10,
78574 -0x21,0x18,0x00,0x00,
78575 -0x64,0x00,0x82,0x24,
78576 -0x64,0x00,0x03,0x24,
78577 -0x0B,0x18,0x45,0x00,
78578 -0x08,0x00,0xE0,0x03,
78579 -0x21,0x10,0x60,0x00,
78580 -0x02,0x80,0x09,0x3C,
78581 -0x30,0x1F,0x28,0x25,
78582 -0x80,0x36,0x06,0x8D,
78583 -0xFF,0xFF,0x02,0x34,
78584 -0x3F,0x00,0xC2,0x10,
78585 -0x21,0x38,0x80,0x00,
78586 -0x2B,0x10,0xC7,0x00,
78587 -0x30,0x00,0x40,0x10,
78588 -0x02,0x19,0x06,0x00,
78589 -0x21,0x10,0xC7,0x00,
78590 -0x23,0x10,0x43,0x00,
78591 -0x10,0x00,0x46,0x24,
78592 -0x80,0x36,0x06,0xAD,
78593 -0x30,0x1F,0x26,0x25,
78594 -0x04,0x00,0xC4,0x8C,
78595 -0x84,0x36,0x02,0xAD,
78596 -0xFF,0xFF,0x02,0x34,
78597 -0x2F,0x00,0x82,0x10,
78598 -0x00,0x00,0x00,0x00,
78599 -0x2B,0x10,0x87,0x00,
78600 -0x1F,0x00,0x40,0x10,
78601 -0x02,0x19,0x04,0x00,
78602 -0x21,0x10,0x87,0x00,
78603 -0x23,0x10,0x43,0x00,
78604 -0x10,0x00,0x44,0x24,
78605 -0x04,0x00,0xC4,0xAC,
78606 -0x84,0x36,0xC2,0xAC,
78607 -0xC0,0x10,0x05,0x00,
78608 -0x21,0x10,0x45,0x00,
78609 -0x80,0x10,0x02,0x00,
78610 -0x21,0x10,0x45,0x00,
78611 -0x30,0x1F,0x23,0x25,
78612 -0x80,0x10,0x02,0x00,
78613 -0x21,0x28,0x43,0x00,
78614 -0x0C,0x24,0xA6,0x8C,
78615 -0x00,0x21,0x07,0x00,
78616 -0xFF,0xFF,0xC2,0x38,
78617 -0x0A,0x30,0x82,0x00,
78618 -0x2B,0x18,0xC7,0x00,
78619 -0x07,0x00,0x60,0x10,
78620 -0x21,0x10,0xC7,0x00,
78621 -0x02,0x19,0x06,0x00,
78622 -0x23,0x10,0x43,0x00,
78623 -0x10,0x00,0x46,0x24,
78624 -0x0C,0x24,0xA6,0xAC,
78625 -0x08,0x00,0xE0,0x03,
78626 -0x10,0x24,0xA2,0xAC,
78627 -0x02,0x19,0x06,0x00,
78628 -0x23,0x10,0x43,0x00,
78629 -0x0C,0x24,0xA2,0xAC,
78630 -0x08,0x00,0xE0,0x03,
78631 -0x10,0x24,0xA2,0xAC,
78632 -0x21,0x10,0x87,0x00,
78633 -0x23,0x10,0x43,0x00,
78634 -0x70,0x1A,0x00,0x08,
78635 -0x04,0x00,0xC2,0xAC,
78636 -0x21,0x10,0xC7,0x00,
78637 -0x30,0x1F,0x26,0x25,
78638 -0x04,0x00,0xC4,0x8C,
78639 -0x23,0x10,0x43,0x00,
78640 -0x80,0x36,0x02,0xAD,
78641 -0x84,0x36,0x02,0xAD,
78642 -0xFF,0xFF,0x02,0x34,
78643 -0xD4,0xFF,0x82,0x14,
78644 -0x2B,0x10,0x87,0x00,
78645 -0x00,0x21,0x07,0x00,
78646 -0x69,0x1A,0x00,0x08,
78647 -0x04,0x00,0xC4,0xAC,
78648 -0x00,0x31,0x04,0x00,
78649 -0x5C,0x1A,0x00,0x08,
78650 -0x80,0x36,0x06,0xAD,
78651 -0xA0,0xFF,0xBD,0x27,
78652 -0x54,0x00,0xB7,0xAF,
78653 -0x5C,0x00,0xBF,0xAF,
78654 -0x58,0x00,0xBE,0xAF,
78655 -0x50,0x00,0xB6,0xAF,
78656 -0x4C,0x00,0xB5,0xAF,
78657 -0x48,0x00,0xB4,0xAF,
78658 -0x44,0x00,0xB3,0xAF,
78659 -0x40,0x00,0xB2,0xAF,
78660 -0x3C,0x00,0xB1,0xAF,
78661 -0x38,0x00,0xB0,0xAF,
78662 -0x02,0x80,0x17,0x3C,
78663 -0x02,0x80,0x02,0x3C,
78664 -0x64,0x57,0x45,0x8C,
78665 -0x00,0x80,0x04,0x3C,
78666 -0x74,0x6A,0x83,0x24,
78667 -0x64,0x57,0x44,0x24,
78668 -0x25,0xB0,0x02,0x3C,
78669 -0x18,0x03,0x42,0x34,
78670 -0x00,0x00,0x43,0xAC,
78671 -0x7F,0x00,0xA4,0x10,
78672 -0x02,0x80,0x09,0x3C,
78673 -0x02,0x80,0x02,0x3C,
78674 -0x40,0xEB,0x29,0x25,
78675 -0x44,0xEB,0x42,0x24,
78676 -0x00,0x00,0x35,0x8D,
78677 -0x00,0x00,0x53,0x8C,
78678 -0x02,0x80,0x03,0x3C,
78679 -0x48,0xEB,0x63,0x24,
78680 -0x00,0x00,0x7E,0x8C,
78681 -0x34,0x38,0xB4,0x8E,
78682 -0x21,0x20,0x00,0x00,
78683 -0x21,0xB0,0x00,0x00,
78684 -0x08,0x00,0x82,0x8E,
78685 -0x00,0x00,0x00,0x00,
78686 -0x00,0x00,0x62,0xAE,
78687 -0x08,0x00,0x83,0x96,
78688 -0x02,0x80,0x02,0x3C,
78689 -0xB0,0x01,0x00,0x0C,
78690 -0x25,0x90,0x62,0x00,
78691 -0x00,0x60,0x01,0x40,
78692 -0x01,0x00,0x21,0x34,
78693 -0x01,0x00,0x21,0x38,
78694 -0x00,0x60,0x81,0x40,
78695 -0xAC,0x1B,0xA3,0x96,
78696 -0xD0,0x37,0xA2,0x8E,
78697 -0x00,0x00,0x00,0x00,
78698 -0x21,0x10,0x43,0x00,
78699 -0x00,0x00,0xC2,0xAF,
78700 -0x00,0x60,0x01,0x40,
78701 -0x01,0x00,0x21,0x34,
78702 -0x00,0x60,0x81,0x40,
78703 -0xF4,0x1A,0x00,0x08,
78704 -0x00,0x00,0x00,0x00,
78705 -0x17,0x00,0xC7,0x90,
78706 -0x16,0x00,0xC8,0x90,
78707 -0x32,0x3B,0xA2,0x96,
78708 -0xFF,0x00,0xE3,0x30,
78709 -0x00,0x1A,0x03,0x00,
78710 -0xFF,0x00,0x05,0x31,
78711 -0x25,0x18,0x65,0x00,
78712 -0xB7,0x00,0x43,0x10,
78713 -0x24,0xE3,0x24,0x25,
78714 -0xFF,0x00,0xE2,0x30,
78715 -0xFF,0x00,0x03,0x31,
78716 -0x00,0x12,0x02,0x00,
78717 -0x25,0x10,0x43,0x00,
78718 -0x32,0x3B,0xA2,0xA6,
78719 -0x01,0x00,0xC4,0x90,
78720 -0x00,0x00,0xC2,0x90,
78721 -0x00,0x22,0x04,0x00,
78722 -0x88,0x0C,0x00,0x0C,
78723 -0x25,0x20,0x82,0x00,
78724 -0x40,0x18,0x02,0x00,
78725 -0x21,0x18,0x62,0x00,
78726 -0x80,0x18,0x03,0x00,
78727 -0x94,0xDE,0xE2,0x26,
78728 -0x21,0x18,0x62,0x00,
78729 -0x08,0x00,0x62,0x8C,
78730 -0x00,0x00,0x00,0x00,
78731 -0x09,0xF8,0x40,0x00,
78732 -0x21,0x20,0x20,0x02,
78733 -0x0C,0x00,0x82,0x8E,
78734 -0x00,0x00,0x00,0x00,
78735 -0x2B,0x10,0xC2,0x02,
78736 -0x2C,0x00,0x40,0x10,
78737 -0x00,0x00,0x00,0x00,
78738 -0x00,0x00,0x42,0x8E,
78739 -0x21,0x88,0x40,0x02,
78740 -0x42,0x1B,0x02,0x00,
78741 -0x78,0x00,0x63,0x30,
78742 -0x02,0x26,0x02,0x00,
78743 -0xFF,0x3F,0x42,0x30,
78744 -0x21,0x10,0x43,0x00,
78745 -0x03,0x00,0x84,0x30,
78746 -0x21,0x10,0x44,0x00,
78747 -0x18,0x00,0x42,0x24,
78748 -0xFF,0xFF,0x50,0x30,
78749 -0x7F,0x00,0x02,0x32,
78750 -0x80,0x00,0x03,0x26,
78751 -0x00,0x00,0x70,0xAE,
78752 -0x02,0x00,0x40,0x10,
78753 -0x80,0xFF,0x05,0x32,
78754 -0x80,0xFF,0x65,0x30,
78755 -0x00,0x00,0x65,0xAE,
78756 -0x02,0x00,0x22,0x96,
78757 -0x21,0x18,0xC5,0x02,
78758 -0xFF,0xFF,0x76,0x30,
78759 -0x0F,0x00,0x42,0x30,
78760 -0x00,0x00,0x62,0xAE,
78761 -0x00,0x00,0x23,0x8E,
78762 -0x21,0x90,0x45,0x02,
78763 -0x42,0x13,0x03,0x00,
78764 -0x78,0x00,0x42,0x30,
78765 -0x02,0x1E,0x03,0x00,
78766 -0x21,0x10,0x51,0x00,
78767 -0x03,0x00,0x63,0x30,
78768 -0x21,0x10,0x43,0x00,
78769 -0x18,0x00,0x46,0x24,
78770 -0x00,0x00,0x66,0xAE,
78771 -0x01,0x00,0xC2,0x90,
78772 -0x00,0x00,0x00,0x00,
78773 -0x00,0x12,0x02,0x00,
78774 -0x00,0x08,0x42,0x30,
78775 -0xB9,0xFF,0x40,0x14,
78776 -0x02,0x80,0x09,0x3C,
78777 -0x16,0x00,0xC8,0x90,
78778 -0x17,0x00,0xC7,0x90,
78779 -0xDD,0x1A,0x00,0x08,
78780 -0xFF,0x00,0xE2,0x30,
78781 -0x00,0x60,0x10,0x40,
78782 -0x01,0x00,0x01,0x36,
78783 -0x01,0x00,0x21,0x38,
78784 -0x00,0x60,0x81,0x40,
78785 -0x04,0x00,0x83,0x8E,
78786 -0x00,0x00,0x82,0x8E,
78787 -0x21,0x20,0x80,0x02,
78788 -0x00,0x00,0x62,0xAC,
78789 -0x04,0x00,0x43,0xAC,
78790 -0x00,0x00,0x94,0xAE,
78791 -0x3D,0x24,0x00,0x0C,
78792 -0x04,0x00,0x94,0xAE,
78793 -0x00,0x60,0x90,0x40,
78794 -0x02,0x80,0x02,0x3C,
78795 -0x64,0x57,0x43,0x8C,
78796 -0x64,0x57,0x42,0x24,
78797 -0x8B,0xFF,0x62,0x14,
78798 -0x00,0x00,0x00,0x00,
78799 -0x02,0x80,0x03,0x3C,
78800 -0x40,0xEB,0x63,0x24,
78801 -0x00,0x00,0x71,0x8C,
78802 -0x25,0xB0,0x10,0x3C,
78803 -0x04,0x01,0x02,0x36,
78804 -0x00,0x00,0x43,0x8C,
78805 -0xE8,0x37,0x27,0x8E,
78806 -0x00,0x00,0x00,0x00,
78807 -0xC8,0x00,0xE3,0x10,
78808 -0xEC,0x37,0x23,0xAE,
78809 -0x2B,0x10,0x67,0x00,
78810 -0xD2,0x00,0x40,0x14,
78811 -0x2B,0x10,0xE3,0x00,
78812 -0x08,0x01,0x40,0x14,
78813 -0x02,0x80,0x09,0x3C,
78814 -0x30,0x1F,0x24,0x25,
78815 -0xBC,0x37,0x83,0x94,
78816 -0x02,0x80,0x02,0x3C,
78817 -0x21,0x80,0x00,0x00,
78818 -0x2F,0x00,0xC0,0x1A,
78819 -0x25,0xA8,0x62,0x00,
78820 -0x21,0x98,0x80,0x00,
78821 -0x21,0x90,0x00,0x00,
78822 -0x01,0x00,0x1E,0x24,
78823 -0x21,0x88,0x55,0x02,
78824 -0x00,0x00,0x22,0x8E,
78825 -0x98,0x3E,0x63,0x8E,
78826 -0xFF,0x3F,0x42,0x30,
78827 -0x21,0x18,0x62,0x00,
78828 -0x98,0x3E,0x63,0xAE,
78829 -0x00,0x60,0x04,0x40,
78830 -0x01,0x00,0x81,0x34,
78831 -0x01,0x00,0x21,0x38,
78832 -0x00,0x60,0x81,0x40,
78833 -0xD4,0x1E,0x62,0x8E,
78834 -0x00,0x00,0x00,0x00,
78835 -0x01,0x00,0x42,0x24,
78836 -0xD4,0x1E,0x62,0xAE,
78837 -0x00,0x60,0x84,0x40,
78838 -0x04,0x00,0x22,0x8E,
78839 -0x02,0x00,0x03,0x24,
78840 -0x02,0x17,0x02,0x00,
78841 -0x03,0x00,0x42,0x30,
78842 -0x39,0x00,0x43,0x10,
78843 -0x02,0x80,0x03,0x3C,
78844 -0x21,0x10,0x55,0x02,
78845 -0x00,0x00,0x43,0x8C,
78846 -0x00,0x00,0x00,0x00,
78847 -0x08,0x00,0x60,0x10,
78848 -0x01,0x00,0x02,0x26,
78849 -0x04,0x00,0x22,0x8E,
78850 -0x00,0xF0,0x03,0x3C,
78851 -0x00,0x20,0x04,0x3C,
78852 -0x24,0x10,0x43,0x00,
78853 -0x10,0x00,0x44,0x10,
78854 -0x02,0x80,0x09,0x3C,
78855 -0x06,0x00,0x02,0x26,
78856 -0x00,0x00,0x23,0x8E,
78857 -0xFF,0xFF,0x50,0x30,
78858 -0x82,0x16,0x03,0x00,
78859 -0x01,0x00,0x42,0x30,
78860 -0x52,0x00,0x5E,0x10,
78861 -0x02,0x80,0x04,0x3C,
78862 -0x80,0x90,0x10,0x00,
78863 -0x2A,0x10,0x56,0x02,
78864 -0xD7,0xFF,0x40,0x14,
78865 -0x21,0x88,0x55,0x02,
78866 -0x3D,0x24,0x00,0x0C,
78867 -0x21,0x20,0x80,0x02,
78868 -0x08,0x1C,0x00,0x08,
78869 -0x02,0x80,0x02,0x3C,
78870 -0x40,0xEB,0x29,0x25,
78871 -0x00,0x00,0x25,0x8D,
78872 -0x00,0x00,0x00,0x00,
78873 -0xD4,0x1D,0xA2,0x8C,
78874 -0x00,0x00,0x00,0x00,
78875 -0x01,0x00,0x42,0x24,
78876 -0xD4,0x1D,0xA2,0xAC,
78877 -0x0C,0x00,0x24,0x8E,
78878 -0x0C,0x00,0x02,0x24,
78879 -0x3F,0x00,0x83,0x30,
78880 -0xBD,0x00,0x62,0x10,
78881 -0x00,0x00,0x00,0x00,
78882 -0x0D,0x00,0x02,0x24,
78883 -0xB3,0x00,0x62,0x10,
78884 -0x00,0x00,0x00,0x00,
78885 -0x3F,0x00,0x83,0x30,
78886 -0x0E,0x00,0x02,0x24,
78887 -0xE0,0xFF,0x62,0x14,
78888 -0x06,0x00,0x02,0x26,
78889 -0x02,0x80,0x03,0x3C,
78890 -0x30,0x1F,0x63,0x24,
78891 -0xE0,0x1D,0x62,0x8C,
78892 -0x00,0x00,0x00,0x00,
78893 -0x01,0x00,0x42,0x24,
78894 -0x69,0x1B,0x00,0x08,
78895 -0xE0,0x1D,0x62,0xAC,
78896 -0x2F,0x55,0x00,0x0C,
78897 -0x00,0x00,0x00,0x00,
78898 -0xEF,0x1A,0x00,0x08,
78899 -0x00,0x00,0x00,0x00,
78900 -0xF4,0x5E,0x62,0x90,
78901 -0x00,0x00,0x00,0x00,
78902 -0xC6,0xFF,0x40,0x10,
78903 -0x21,0x10,0x55,0x02,
78904 -0x00,0x60,0x01,0x40,
78905 -0x01,0x00,0x21,0x34,
78906 -0x01,0x00,0x21,0x38,
78907 -0x00,0x60,0x81,0x40,
78908 -0xF4,0x5E,0x62,0x90,
78909 -0x02,0x80,0x04,0x3C,
78910 -0xF8,0xE8,0x85,0x24,
78911 -0xFF,0x00,0x42,0x30,
78912 -0x80,0x10,0x02,0x00,
78913 -0x21,0x10,0x45,0x00,
78914 -0x00,0x00,0x43,0x8C,
78915 -0x00,0x00,0x24,0x8E,
78916 -0x04,0x00,0x25,0x8E,
78917 -0x09,0xF8,0x60,0x00,
78918 -0x00,0x00,0x00,0x00,
78919 -0x02,0x80,0x09,0x3C,
78920 -0xF6,0x5E,0x22,0x91,
78921 -0x0C,0x00,0x03,0x24,
78922 -0xFF,0x00,0x42,0x30,
78923 -0x06,0x00,0x43,0x10,
78924 -0x02,0x80,0x03,0x3C,
78925 -0x00,0x60,0x01,0x40,
78926 -0x01,0x00,0x21,0x34,
78927 -0x00,0x60,0x81,0x40,
78928 -0x5F,0x1B,0x00,0x08,
78929 -0x21,0x10,0x55,0x02,
78930 -0x0D,0x5F,0x62,0x90,
78931 -0x00,0x00,0x00,0x00,
78932 -0xF8,0xFF,0x40,0x10,
78933 -0x02,0x80,0x04,0x3C,
78934 -0x13,0x5F,0x82,0x90,
78935 -0x00,0x00,0x00,0x00,
78936 -0x01,0x00,0x42,0x24,
78937 -0x13,0x5F,0x82,0xA0,
78938 -0x00,0x60,0x01,0x40,
78939 -0x01,0x00,0x21,0x34,
78940 -0x00,0x60,0x81,0x40,
78941 -0x5F,0x1B,0x00,0x08,
78942 -0x21,0x10,0x55,0x02,
78943 -0x30,0x1F,0x82,0x8C,
78944 -0x00,0x00,0x00,0x00,
78945 -0x02,0x12,0x02,0x00,
78946 -0x0F,0x00,0x42,0x30,
78947 -0x05,0x00,0x5E,0x10,
78948 -0xC2,0x13,0x03,0x00,
78949 -0x1E,0x00,0x42,0x30,
78950 -0x21,0x10,0x50,0x00,
78951 -0x70,0x1B,0x00,0x08,
78952 -0xFF,0xFF,0x50,0x30,
78953 -0x02,0x00,0x62,0x92,
78954 -0x00,0x00,0x00,0x00,
78955 -0x1C,0x00,0x40,0x14,
78956 -0x00,0x00,0x00,0x00,
78957 -0x04,0x00,0x23,0x8E,
78958 -0x00,0x00,0x00,0x00,
78959 -0x02,0x14,0x03,0x00,
78960 -0x0F,0x00,0x42,0x30,
78961 -0x14,0x00,0x40,0x14,
78962 -0x02,0x17,0x03,0x00,
78963 -0x03,0x00,0x44,0x30,
78964 -0x08,0x00,0x80,0x10,
78965 -0x00,0xC0,0x02,0x3C,
78966 -0x24,0x10,0x62,0x00,
78967 -0x0E,0x00,0x40,0x14,
78968 -0x03,0x00,0x02,0x24,
78969 -0x0C,0x00,0x82,0x10,
78970 -0x00,0x00,0x00,0x00,
78971 -0x0A,0x00,0x80,0x10,
78972 -0x00,0x00,0x00,0x00,
78973 -0x80,0x28,0x10,0x00,
78974 -0x21,0x28,0xB5,0x00,
78975 -0xF7,0x19,0x00,0x0C,
78976 -0x21,0x20,0x20,0x02,
78977 -0x4C,0x1A,0x00,0x0C,
78978 -0x21,0x20,0x40,0x00,
78979 -0x21,0x20,0x40,0x00,
78980 -0x56,0x1A,0x00,0x0C,
78981 -0x21,0x28,0x00,0x00,
78982 -0x02,0x00,0x62,0x92,
78983 -0x00,0x00,0x00,0x00,
78984 -0x8B,0x00,0x5E,0x10,
78985 -0x00,0x00,0x00,0x00,
78986 -0x02,0x00,0x63,0x92,
78987 -0x02,0x00,0x02,0x24,
78988 -0x71,0x00,0x62,0x10,
78989 -0x00,0x00,0x00,0x00,
78990 -0x25,0xB0,0x02,0x3C,
78991 -0x4C,0x00,0x42,0x34,
78992 -0x00,0x00,0x43,0x90,
78993 -0x00,0x00,0x00,0x00,
78994 -0x03,0x00,0x63,0x30,
78995 -0x08,0x00,0x7E,0x10,
78996 -0xD0,0x02,0x02,0x24,
78997 -0x00,0x00,0x23,0x8E,
78998 -0x00,0x00,0x00,0x00,
78999 -0xC2,0x13,0x03,0x00,
79000 -0x1E,0x00,0x42,0x30,
79001 -0x21,0x10,0x50,0x00,
79002 -0x70,0x1B,0x00,0x08,
79003 -0xFF,0xFF,0x50,0x30,
79004 -0x80,0x36,0x62,0xAE,
79005 -0x00,0x00,0x23,0x8E,
79006 -0xFA,0x1B,0x00,0x08,
79007 -0xC2,0x13,0x03,0x00,
79008 -0x02,0x80,0x09,0x3C,
79009 -0x00,0x01,0x02,0x36,
79010 -0x30,0x1F,0x29,0x25,
79011 -0x00,0x00,0x47,0xAC,
79012 -0xE8,0x37,0x27,0xAD,
79013 -0x02,0x80,0x02,0x3C,
79014 -0x08,0x04,0x44,0x24,
79015 -0x21,0x28,0x00,0x00,
79016 -0x21,0x30,0x00,0x00,
79017 -0x91,0x3C,0x00,0x0C,
79018 -0x21,0x38,0x00,0x00,
79019 -0xAA,0x1A,0x00,0x08,
79020 -0x02,0x80,0x02,0x3C,
79021 -0xF0,0x37,0x22,0x8E,
79022 -0xFF,0xFF,0x73,0x30,
79023 -0x23,0x10,0x47,0x00,
79024 -0xFF,0xFF,0x52,0x30,
79025 -0x21,0x18,0x53,0x02,
79026 -0xFF,0xFF,0x76,0x30,
79027 -0x25,0x24,0x00,0x0C,
79028 -0x21,0x20,0xC0,0x02,
79029 -0xEF,0xFF,0x40,0x10,
79030 -0x21,0xA0,0x40,0x00,
79031 -0x08,0x00,0x42,0x8C,
79032 -0xE8,0x37,0x26,0x8E,
79033 -0x21,0x38,0x40,0x02,
79034 -0x21,0x18,0x56,0x00,
79035 -0xB8,0x37,0x23,0xAE,
79036 -0x21,0x28,0x40,0x00,
79037 -0x08,0x00,0x04,0x24,
79038 -0xBC,0x37,0x22,0xAE,
79039 -0x73,0x01,0x00,0x0C,
79040 -0x10,0x00,0xA0,0xAF,
79041 -0xB0,0x01,0x00,0x0C,
79042 -0x08,0x00,0x04,0x24,
79043 -0xBC,0x37,0x25,0x8E,
79044 -0x24,0x10,0x02,0x3C,
79045 -0x00,0x01,0x10,0x36,
79046 -0x00,0x00,0x02,0xAE,
79047 -0x21,0x38,0x60,0x02,
79048 -0x21,0x28,0xB2,0x00,
79049 -0x08,0x00,0x04,0x24,
79050 -0x24,0x10,0x06,0x3C,
79051 -0xE8,0x37,0x22,0xAE,
79052 -0x73,0x01,0x00,0x0C,
79053 -0x10,0x00,0xA0,0xAF,
79054 -0xEC,0x37,0x23,0x8E,
79055 -0x08,0x00,0x04,0x24,
79056 -0xB0,0x01,0x00,0x0C,
79057 -0xE8,0x37,0x23,0xAE,
79058 -0xE8,0x37,0x22,0x8E,
79059 -0x00,0x00,0x00,0x00,
79060 -0x00,0x00,0x02,0xAE,
79061 -0x40,0x1B,0x00,0x08,
79062 -0x02,0x80,0x09,0x3C,
79063 -0xDC,0x1D,0xA2,0x8C,
79064 -0x00,0x00,0x00,0x00,
79065 -0x01,0x00,0x42,0x24,
79066 -0xDC,0x1D,0xA2,0xAC,
79067 -0x0C,0x00,0x24,0x8E,
79068 -0x88,0x1B,0x00,0x08,
79069 -0x3F,0x00,0x83,0x30,
79070 -0xD8,0x1D,0xA2,0x8C,
79071 -0x00,0x00,0x00,0x00,
79072 -0x01,0x00,0x42,0x24,
79073 -0xD8,0x1D,0xA2,0xAC,
79074 -0x0C,0x00,0x24,0x8E,
79075 -0x84,0x1B,0x00,0x08,
79076 -0x3F,0x00,0x83,0x30,
79077 -0x23,0x10,0x67,0x00,
79078 -0xFF,0xFF,0x56,0x30,
79079 -0x25,0x24,0x00,0x0C,
79080 -0x21,0x20,0xC0,0x02,
79081 -0x4A,0x00,0x40,0x10,
79082 -0x21,0xA0,0x40,0x00,
79083 -0x08,0x00,0x42,0x8C,
79084 -0xE8,0x37,0x26,0x8E,
79085 -0x08,0x00,0x04,0x24,
79086 -0x21,0x18,0x56,0x00,
79087 -0xB8,0x37,0x23,0xAE,
79088 -0x21,0x28,0x40,0x00,
79089 -0x21,0x38,0xC0,0x02,
79090 -0xBC,0x37,0x22,0xAE,
79091 -0x73,0x01,0x00,0x0C,
79092 -0x10,0x00,0xA0,0xAF,
79093 -0xEC,0x37,0x23,0x8E,
79094 -0x08,0x00,0x04,0x24,
79095 -0xB0,0x01,0x00,0x0C,
79096 -0xE8,0x37,0x23,0xAE,
79097 -0xE8,0x37,0x23,0x8E,
79098 -0x00,0x01,0x02,0x36,
79099 -0x00,0x00,0x43,0xAC,
79100 -0x40,0x1B,0x00,0x08,
79101 -0x02,0x80,0x09,0x3C,
79102 -0x04,0x00,0x23,0x8E,
79103 -0x00,0x00,0x00,0x00,
79104 -0x02,0x14,0x03,0x00,
79105 -0x0F,0x00,0x42,0x30,
79106 -0x08,0x00,0x42,0x28,
79107 -0x8B,0xFF,0x40,0x10,
79108 -0x25,0xB0,0x02,0x3C,
79109 -0x02,0x17,0x03,0x00,
79110 -0x03,0x00,0x42,0x30,
79111 -0x86,0xFF,0x40,0x14,
79112 -0x00,0x00,0x00,0x00,
79113 -0x80,0x28,0x10,0x00,
79114 -0x21,0x28,0xB5,0x00,
79115 -0xF7,0x19,0x00,0x0C,
79116 -0x21,0x20,0x20,0x02,
79117 -0x4C,0x1A,0x00,0x0C,
79118 -0x21,0x20,0x40,0x00,
79119 -0x21,0x20,0x40,0x00,
79120 -0x56,0x1A,0x00,0x0C,
79121 -0x21,0x28,0x00,0x00,
79122 -0xF1,0x1B,0x00,0x08,
79123 -0x25,0xB0,0x02,0x3C,
79124 -0x04,0x00,0x23,0x8E,
79125 -0x00,0x00,0x00,0x00,
79126 -0x02,0x14,0x03,0x00,
79127 -0x0F,0x00,0x42,0x30,
79128 -0x08,0x00,0x42,0x28,
79129 -0x06,0x00,0x40,0x10,
79130 -0x00,0xC0,0x02,0x3C,
79131 -0x02,0x17,0x03,0x00,
79132 -0x03,0x00,0x42,0x30,
79133 -0x0C,0x00,0x40,0x10,
79134 -0x80,0x28,0x10,0x00,
79135 -0x00,0xC0,0x02,0x3C,
79136 -0x24,0x10,0x62,0x00,
79137 -0x68,0xFF,0x40,0x14,
79138 -0x02,0x17,0x03,0x00,
79139 -0x03,0x00,0x42,0x30,
79140 -0x03,0x00,0x03,0x24,
79141 -0x64,0xFF,0x43,0x10,
79142 -0x00,0x00,0x00,0x00,
79143 -0x62,0xFF,0x40,0x10,
79144 -0x00,0x00,0x00,0x00,
79145 -0x80,0x28,0x10,0x00,
79146 -0x21,0x28,0xB5,0x00,
79147 -0xF7,0x19,0x00,0x0C,
79148 -0x21,0x20,0x20,0x02,
79149 -0x4C,0x1A,0x00,0x0C,
79150 -0x21,0x20,0x40,0x00,
79151 -0x21,0x20,0x40,0x00,
79152 -0x56,0x1A,0x00,0x0C,
79153 -0x21,0x28,0x00,0x00,
79154 -0xEC,0x1B,0x00,0x08,
79155 -0x00,0x00,0x00,0x00,
79156 -0xEC,0x37,0x23,0x8E,
79157 -0x00,0x01,0x02,0x36,
79158 -0x00,0x00,0x43,0xAC,
79159 -0x07,0x1C,0x00,0x08,
79160 -0xE8,0x37,0x23,0xAE,
79161 -0xB8,0xFF,0xBD,0x27,
79162 -0x25,0xB0,0x03,0x3C,
79163 -0x44,0x00,0xBF,0xAF,
79164 -0x40,0x00,0xBE,0xAF,
79165 -0x3C,0x00,0xB7,0xAF,
79166 -0x38,0x00,0xB6,0xAF,
79167 -0x34,0x00,0xB5,0xAF,
79168 -0x30,0x00,0xB4,0xAF,
79169 -0x2C,0x00,0xB3,0xAF,
79170 -0x28,0x00,0xB2,0xAF,
79171 -0x24,0x00,0xB1,0xAF,
79172 -0x20,0x00,0xB0,0xAF,
79173 -0x44,0x00,0x63,0x34,
79174 -0x00,0x00,0x62,0x90,
79175 -0x00,0x00,0x00,0x00,
79176 -0x00,0x16,0x02,0x00,
79177 -0x03,0x16,0x02,0x00,
79178 -0x0E,0x00,0x40,0x04,
79179 -0x18,0x00,0xA0,0xAF,
79180 -0x21,0x20,0x60,0x00,
79181 -0x21,0x10,0x00,0x00,
79182 -0x01,0x00,0x42,0x24,
79183 -0xFF,0xFF,0x42,0x30,
79184 -0x64,0x00,0x43,0x2C,
79185 -0xFD,0xFF,0x60,0x14,
79186 -0x01,0x00,0x42,0x24,
79187 -0x00,0x00,0x82,0x90,
79188 -0x00,0x00,0x00,0x00,
79189 -0x00,0x16,0x02,0x00,
79190 -0x03,0x16,0x02,0x00,
79191 -0xF6,0xFF,0x41,0x04,
79192 -0x21,0x10,0x00,0x00,
79193 -0x02,0x80,0x02,0x3C,
79194 -0x74,0x57,0x43,0x8C,
79195 -0x00,0x80,0x06,0x3C,
79196 -0x6C,0x72,0xC2,0x24,
79197 -0x25,0xB0,0x05,0x3C,
79198 -0x02,0x80,0x06,0x3C,
79199 -0x18,0x03,0xA4,0x34,
79200 -0x74,0x57,0xD2,0x24,
79201 -0x00,0x00,0x82,0xAC,
79202 -0x67,0x00,0x72,0x10,
79203 -0x01,0x00,0x16,0x24,
79204 -0x11,0x11,0x02,0x3C,
79205 -0x2A,0xB0,0x03,0x3C,
79206 -0x22,0x22,0x5E,0x34,
79207 -0x02,0x80,0x02,0x3C,
79208 -0x21,0xB8,0x80,0x00,
79209 -0x05,0x00,0x74,0x34,
79210 -0x30,0x1F,0x55,0x24,
79211 -0x01,0x00,0x13,0x24,
79212 -0x00,0x00,0xFE,0xAE,
79213 -0x21,0x00,0xC0,0x12,
79214 -0x2A,0xB0,0x03,0x3C,
79215 -0x02,0x80,0x03,0x3C,
79216 -0xF4,0x5E,0x62,0x90,
79217 -0x00,0x00,0x00,0x00,
79218 -0x1B,0x00,0x40,0x10,
79219 -0x21,0xB0,0x00,0x00,
79220 -0x01,0x00,0x06,0x24,
79221 -0x18,0x00,0xA6,0xAF,
79222 -0x00,0x60,0x01,0x40,
79223 -0x01,0x00,0x21,0x34,
79224 -0x01,0x00,0x21,0x38,
79225 -0x00,0x60,0x81,0x40,
79226 -0x02,0x80,0x03,0x3C,
79227 -0xF6,0x5E,0x62,0x90,
79228 -0x00,0x00,0x00,0x00,
79229 -0x0F,0x00,0x42,0x30,
79230 -0x04,0x00,0x42,0x28,
79231 -0x5F,0x00,0x40,0x14,
79232 -0x04,0x00,0x04,0x24,
79233 -0x02,0x80,0x06,0x3C,
79234 -0xDE,0x5D,0xC2,0x90,
79235 -0x00,0x00,0x00,0x00,
79236 -0x02,0x00,0x42,0x30,
79237 -0x55,0x00,0x40,0x14,
79238 -0x00,0x00,0x00,0x00,
79239 -0x00,0x08,0x04,0x24,
79240 -0x00,0x02,0x05,0x3C,
79241 -0xA9,0x45,0x00,0x0C,
79242 -0x01,0x00,0x06,0x24,
79243 -0x00,0x60,0x01,0x40,
79244 -0x01,0x00,0x21,0x34,
79245 -0x00,0x60,0x81,0x40,
79246 -0x2A,0xB0,0x03,0x3C,
79247 -0x06,0x00,0x63,0x34,
79248 -0x00,0x00,0x62,0x94,
79249 -0x44,0x38,0xB1,0x8E,
79250 -0x25,0xB0,0x06,0x3C,
79251 -0xB0,0x03,0xC6,0x34,
79252 -0x00,0xFF,0x42,0x30,
79253 -0x00,0x00,0xD1,0xAC,
79254 -0x0F,0x00,0x40,0x18,
79255 -0x02,0x80,0x02,0x3C,
79256 -0x02,0x80,0x03,0x3C,
79257 -0x4C,0xEB,0x42,0x24,
79258 -0x50,0xEB,0x63,0x24,
79259 -0x00,0x00,0x45,0x8C,
79260 -0x00,0x00,0x64,0x8C,
79261 -0x02,0x80,0x06,0x3C,
79262 -0x54,0xEB,0xC6,0x24,
79263 -0x00,0x00,0xC3,0x8C,
79264 -0x00,0x00,0xA4,0xAC,
79265 -0x00,0x00,0x62,0x94,
79266 -0x00,0x00,0x00,0x00,
79267 -0x00,0xFF,0x42,0x30,
79268 -0xFB,0xFF,0x40,0x1C,
79269 -0x00,0x00,0x00,0x00,
79270 -0x0C,0x00,0x23,0x8E,
79271 -0x00,0x00,0x00,0x00,
79272 -0x07,0x00,0x62,0x30,
79273 -0x47,0x00,0x40,0x14,
79274 -0x08,0x00,0x62,0x24,
79275 -0xC2,0x10,0x03,0x00,
79276 -0x08,0x00,0x25,0x8E,
79277 -0x04,0x37,0xA6,0x8E,
79278 -0xC0,0x10,0x02,0x00,
79279 -0x20,0x00,0x42,0x24,
79280 -0xFF,0xFF,0x47,0x30,
79281 -0x01,0x00,0x04,0x24,
79282 -0x73,0x01,0x00,0x0C,
79283 -0x10,0x00,0xB3,0xAF,
79284 -0xB0,0x01,0x00,0x0C,
79285 -0x01,0x00,0x04,0x24,
79286 -0x02,0x00,0x02,0x24,
79287 -0x00,0x00,0x93,0xA2,
79288 -0x00,0x00,0x82,0xA2,
79289 -0x00,0x60,0x10,0x40,
79290 -0x01,0x00,0x01,0x36,
79291 -0x01,0x00,0x21,0x38,
79292 -0x00,0x60,0x81,0x40,
79293 -0x04,0x00,0x23,0x8E,
79294 -0x00,0x00,0x22,0x8E,
79295 -0x21,0x20,0x20,0x02,
79296 -0x00,0x00,0x62,0xAC,
79297 -0x04,0x00,0x43,0xAC,
79298 -0x00,0x00,0x31,0xAE,
79299 -0x3D,0x24,0x00,0x0C,
79300 -0x04,0x00,0x31,0xAE,
79301 -0x00,0x60,0x90,0x40,
79302 -0x00,0x00,0x42,0x8E,
79303 -0x00,0x00,0x00,0x00,
79304 -0xA3,0xFF,0x52,0x14,
79305 -0x00,0x00,0x00,0x00,
79306 -0x18,0x00,0xA2,0x8F,
79307 -0x00,0x00,0x00,0x00,
79308 -0x07,0x00,0x40,0x10,
79309 -0x02,0x80,0x02,0x3C,
79310 -0x02,0x80,0x03,0x3C,
79311 -0xF4,0x5E,0x62,0x90,
79312 -0x00,0x00,0x00,0x00,
79313 -0x11,0x00,0x40,0x14,
79314 -0x18,0x00,0xA0,0xAF,
79315 -0x02,0x80,0x02,0x3C,
79316 -0x08,0x08,0x44,0x24,
79317 -0x21,0x28,0x00,0x00,
79318 -0x21,0x30,0x00,0x00,
79319 -0x91,0x3C,0x00,0x0C,
79320 -0x21,0x38,0x00,0x00,
79321 -0xBC,0x1C,0x00,0x08,
79322 -0x02,0x80,0x02,0x3C,
79323 -0x9B,0x30,0x00,0x0C,
79324 -0x01,0x00,0x04,0x24,
79325 -0xEA,0x1C,0x00,0x08,
79326 -0x00,0x08,0x04,0x24,
79327 -0x64,0x31,0x00,0x0C,
79328 -0x01,0x00,0x05,0x24,
79329 -0xE4,0x1C,0x00,0x08,
79330 -0x02,0x80,0x06,0x3C,
79331 -0x00,0x60,0x01,0x40,
79332 -0x01,0x00,0x21,0x34,
79333 -0x01,0x00,0x21,0x38,
79334 -0x00,0x60,0x81,0x40,
79335 -0x02,0x80,0x06,0x3C,
79336 -0xF5,0x5E,0xC4,0x90,
79337 -0x01,0x00,0x05,0x24,
79338 -0x64,0x31,0x00,0x0C,
79339 -0xFF,0x00,0x84,0x30,
79340 -0x00,0x60,0x01,0x40,
79341 -0x01,0x00,0x21,0x34,
79342 -0x00,0x60,0x81,0x40,
79343 -0x36,0x1D,0x00,0x08,
79344 -0x02,0x80,0x02,0x3C,
79345 -0x0E,0x1D,0x00,0x08,
79346 -0xC2,0x10,0x02,0x00,
79347 -0x10,0x00,0xE0,0x18,
79348 -0x21,0x18,0x00,0x00,
79349 -0x00,0x00,0xC0,0xAC,
79350 -0x21,0x40,0x00,0x00,
79351 -0x00,0x00,0x82,0x90,
79352 -0x00,0x00,0x00,0x00,
79353 -0x0C,0x00,0x45,0x10,
79354 -0x21,0x18,0x80,0x00,
79355 -0x01,0x00,0x82,0x90,
79356 -0x00,0x00,0x00,0x00,
79357 -0x21,0x18,0x48,0x00,
79358 -0x02,0x00,0x68,0x24,
79359 -0x21,0x10,0x82,0x00,
79360 -0x2B,0x18,0x07,0x01,
79361 -0xF5,0xFF,0x60,0x14,
79362 -0x02,0x00,0x44,0x24,
79363 -0x21,0x18,0x00,0x00,
79364 -0x08,0x00,0xE0,0x03,
79365 -0x21,0x10,0x60,0x00,
79366 -0x01,0x00,0x82,0x90,
79367 -0x00,0x00,0x00,0x00,
79368 -0x00,0x00,0xC2,0xAC,
79369 -0x08,0x00,0xE0,0x03,
79370 -0x21,0x10,0x60,0x00,
79371 -0x02,0x80,0x07,0x3C,
79372 -0x30,0x1F,0xE5,0x24,
79373 -0x22,0x3E,0xA3,0x90,
79374 -0xFF,0x00,0x84,0x30,
79375 -0x80,0x10,0x04,0x00,
79376 -0x0C,0x00,0x60,0x14,
79377 -0x21,0x30,0x45,0x00,
79378 -0xC8,0x00,0x02,0x24,
79379 -0x24,0x39,0xA2,0xAC,
79380 -0x01,0x00,0x03,0x24,
79381 -0x30,0x1F,0xE2,0x24,
79382 -0x04,0x18,0x83,0x00,
79383 -0x4C,0x3E,0xA4,0xA0,
79384 -0x22,0x3E,0x44,0x90,
79385 -0x00,0x00,0x00,0x00,
79386 -0x25,0x18,0x64,0x00,
79387 -0x08,0x00,0xE0,0x03,
79388 -0x22,0x3E,0x43,0xA0,
79389 -0x24,0x39,0xA3,0x8C,
79390 -0xC8,0x00,0x02,0x24,
79391 -0x23,0x10,0x43,0x00,
79392 -0x24,0x3E,0xC2,0xAC,
79393 -0x01,0x00,0x03,0x24,
79394 -0x30,0x1F,0xE2,0x24,
79395 -0x04,0x18,0x83,0x00,
79396 -0x22,0x3E,0x44,0x90,
79397 -0x00,0x00,0x00,0x00,
79398 -0x25,0x18,0x64,0x00,
79399 -0x08,0x00,0xE0,0x03,
79400 -0x22,0x3E,0x43,0xA0,
79401 -0xE0,0xFF,0xBD,0x27,
79402 -0x14,0x00,0xB1,0xAF,
79403 -0x02,0x80,0x11,0x3C,
79404 -0x10,0x00,0xB0,0xAF,
79405 -0x18,0x00,0xBF,0xAF,
79406 -0x30,0x1F,0x25,0x26,
79407 -0x4C,0x3E,0xA6,0x90,
79408 -0x01,0x00,0x02,0x24,
79409 -0x04,0x10,0xC2,0x00,
79410 -0x06,0x00,0x40,0x14,
79411 -0xC9,0x00,0x10,0x24,
79412 -0x1A,0x3E,0xA2,0x90,
79413 -0x00,0x00,0x00,0x00,
79414 -0x01,0x00,0x42,0x30,
79415 -0x23,0x00,0x40,0x14,
79416 -0x21,0x20,0xC5,0x00,
79417 -0x02,0x80,0x02,0x3C,
79418 -0x30,0x1F,0x46,0x24,
79419 -0x21,0x20,0x00,0x00,
79420 -0x24,0x3E,0xC5,0x24,
79421 -0x00,0x00,0xA2,0x8C,
79422 -0x04,0x00,0xA5,0x24,
79423 -0x05,0x00,0x40,0x10,
79424 -0x2B,0x18,0x50,0x00,
79425 -0x03,0x00,0x60,0x10,
79426 -0x00,0x00,0x00,0x00,
79427 -0x21,0x80,0x40,0x00,
79428 -0x4C,0x3E,0xC4,0xA0,
79429 -0x01,0x00,0x84,0x24,
79430 -0x08,0x00,0x82,0x2C,
79431 -0xF5,0xFF,0x40,0x14,
79432 -0xC9,0x00,0x02,0x24,
79433 -0x21,0x00,0x02,0x12,
79434 -0x02,0x80,0x02,0x3C,
79435 -0x30,0x1F,0x45,0x24,
79436 -0x07,0x00,0x04,0x24,
79437 -0x24,0x3E,0xA2,0x8C,
79438 -0xFF,0xFF,0x84,0x24,
79439 -0x02,0x00,0x40,0x10,
79440 -0x23,0x18,0x50,0x00,
79441 -0x24,0x3E,0xA3,0xAC,
79442 -0xFA,0xFF,0x81,0x04,
79443 -0x04,0x00,0xA5,0x24,
79444 -0x30,0x1F,0x22,0x26,
79445 -0x24,0x39,0x50,0xAC,
79446 -0x18,0x00,0xBF,0x8F,
79447 -0x14,0x00,0xB1,0x8F,
79448 -0x10,0x00,0xB0,0x8F,
79449 -0x08,0x00,0xE0,0x03,
79450 -0x20,0x00,0xBD,0x27,
79451 -0x44,0x3E,0x83,0x90,
79452 -0x00,0x00,0x00,0x00,
79453 -0x01,0x00,0x63,0x24,
79454 -0xFF,0x00,0x62,0x30,
79455 -0x03,0x00,0x42,0x2C,
79456 -0xD8,0xFF,0x40,0x10,
79457 -0x44,0x3E,0x83,0xA0,
79458 -0x80,0x18,0x06,0x00,
79459 -0x21,0x18,0x65,0x00,
79460 -0xC8,0x00,0x02,0x24,
79461 -0x03,0x00,0x04,0x24,
79462 -0x21,0x28,0x00,0x00,
79463 -0x90,0x14,0x00,0x0C,
79464 -0x24,0x3E,0x62,0xAC,
79465 -0x9C,0x1D,0x00,0x08,
79466 -0x02,0x80,0x02,0x3C,
79467 -0x30,0x1F,0x22,0x26,
79468 -0x18,0x00,0xBF,0x8F,
79469 -0x14,0x00,0xB1,0x8F,
79470 -0x10,0x00,0xB0,0x8F,
79471 -0x20,0x00,0xBD,0x27,
79472 -0x22,0x3E,0x40,0xA0,
79473 -0x08,0x00,0xE0,0x03,
79474 -0x24,0x39,0x40,0xAC,
79475 -0xB8,0xFF,0xBD,0x27,
79476 -0x02,0x80,0x08,0x3C,
79477 -0x02,0x80,0x0B,0x3C,
79478 -0x02,0x80,0x0C,0x3C,
79479 -0x40,0x00,0xBF,0xAF,
79480 -0x3C,0x00,0xB5,0xAF,
79481 -0x38,0x00,0xB4,0xAF,
79482 -0x34,0x00,0xB3,0xAF,
79483 -0x30,0x00,0xB2,0xAF,
79484 -0x2C,0x00,0xB1,0xAF,
79485 -0x28,0x00,0xB0,0xAF,
79486 -0x40,0xED,0x63,0x25,
79487 -0x3C,0xED,0x02,0x25,
79488 -0x44,0xED,0x84,0x25,
79489 -0x01,0x00,0x45,0x90,
79490 -0x01,0x00,0x66,0x90,
79491 -0x01,0x00,0x87,0x90,
79492 -0x3C,0xED,0x0F,0x91,
79493 -0x02,0x00,0x4A,0x90,
79494 -0x40,0xED,0x6E,0x91,
79495 -0x02,0x00,0x69,0x90,
79496 -0x44,0xED,0x8D,0x91,
79497 -0x02,0x00,0x88,0x90,
79498 -0x03,0x00,0x4B,0x90,
79499 -0x03,0x00,0x6C,0x90,
79500 -0x03,0x00,0x82,0x90,
79501 -0x00,0x2A,0x05,0x00,
79502 -0x00,0x32,0x06,0x00,
79503 -0x00,0x3A,0x07,0x00,
79504 -0x25,0x28,0xAF,0x00,
79505 -0x25,0x30,0xCE,0x00,
79506 -0x25,0x38,0xED,0x00,
79507 -0x00,0x54,0x0A,0x00,
79508 -0x00,0x4C,0x09,0x00,
79509 -0x00,0x44,0x08,0x00,
79510 -0x25,0x50,0x45,0x01,
79511 -0x25,0x48,0x26,0x01,
79512 -0x25,0x40,0x07,0x01,
79513 -0x00,0x5E,0x0B,0x00,
79514 -0x00,0x66,0x0C,0x00,
79515 -0x00,0x16,0x02,0x00,
79516 -0x02,0x80,0x04,0x3C,
79517 -0x25,0x58,0x6A,0x01,
79518 -0x25,0x60,0x89,0x01,
79519 -0x25,0x10,0x48,0x00,
79520 -0x84,0x58,0x84,0x24,
79521 -0x10,0x00,0xAB,0xAF,
79522 -0x18,0x00,0xAC,0xAF,
79523 -0x34,0x4F,0x00,0x0C,
79524 -0x20,0x00,0xA2,0xAF,
79525 -0x10,0x00,0x42,0x30,
79526 -0x29,0x00,0x40,0x10,
79527 -0x21,0x18,0x00,0x00,
79528 -0x02,0x80,0x13,0x3C,
79529 -0x30,0x1F,0x63,0x26,
79530 -0xC4,0x39,0x62,0x8C,
79531 -0x0C,0x00,0x10,0x24,
79532 -0x2B,0x10,0x02,0x02,
79533 -0x2C,0x00,0x40,0x10,
79534 -0x02,0x80,0x02,0x3C,
79535 -0x02,0x80,0x03,0x3C,
79536 -0xF8,0x58,0x51,0x24,
79537 -0x02,0x59,0x72,0x24,
79538 -0x02,0x80,0x02,0x3C,
79539 -0x02,0x80,0x03,0x3C,
79540 -0xFA,0x58,0x54,0x24,
79541 -0x26,0x1E,0x00,0x08,
79542 -0x06,0x59,0x75,0x24,
79543 -0xDD,0x00,0x02,0x24,
79544 -0x21,0x20,0x14,0x02,
79545 -0x2B,0x00,0x62,0x10,
79546 -0x10,0x00,0xA5,0x27,
79547 -0x21,0x10,0x11,0x02,
79548 -0x01,0x00,0x43,0x90,
79549 -0x30,0x1F,0x64,0x26,
79550 -0xC4,0x39,0x82,0x8C,
79551 -0x21,0x18,0x70,0x00,
79552 -0x02,0x00,0x70,0x24,
79553 -0x2B,0x10,0x02,0x02,
79554 -0x17,0x00,0x40,0x10,
79555 -0x00,0x00,0x00,0x00,
79556 -0x21,0x10,0x11,0x02,
79557 -0x00,0x00,0x43,0x90,
79558 -0x30,0x00,0x02,0x24,
79559 -0x21,0x20,0x12,0x02,
79560 -0x20,0x00,0xA5,0x27,
79561 -0xED,0xFF,0x62,0x14,
79562 -0x04,0x00,0x06,0x24,
79563 -0x39,0x52,0x00,0x0C,
79564 -0x00,0x00,0x00,0x00,
79565 -0xEE,0xFF,0x40,0x14,
79566 -0x21,0x10,0x11,0x02,
79567 -0x01,0x00,0x03,0x24,
79568 -0x40,0x00,0xBF,0x8F,
79569 -0x3C,0x00,0xB5,0x8F,
79570 -0x38,0x00,0xB4,0x8F,
79571 -0x34,0x00,0xB3,0x8F,
79572 -0x30,0x00,0xB2,0x8F,
79573 -0x2C,0x00,0xB1,0x8F,
79574 -0x28,0x00,0xB0,0x8F,
79575 -0x21,0x10,0x60,0x00,
79576 -0x08,0x00,0xE0,0x03,
79577 -0x48,0x00,0xBD,0x27,
79578 -0x40,0x00,0xBF,0x8F,
79579 -0x3C,0x00,0xB5,0x8F,
79580 -0x38,0x00,0xB4,0x8F,
79581 -0x34,0x00,0xB3,0x8F,
79582 -0x30,0x00,0xB2,0x8F,
79583 -0x2C,0x00,0xB1,0x8F,
79584 -0x28,0x00,0xB0,0x8F,
79585 -0x21,0x18,0x00,0x00,
79586 -0x21,0x10,0x60,0x00,
79587 -0x08,0x00,0xE0,0x03,
79588 -0x48,0x00,0xBD,0x27,
79589 -0x39,0x52,0x00,0x0C,
79590 -0x00,0x00,0x00,0x00,
79591 -0x21,0x20,0x15,0x02,
79592 -0x18,0x00,0xA5,0x27,
79593 -0xD1,0xFF,0x40,0x14,
79594 -0x04,0x00,0x06,0x24,
79595 -0x39,0x52,0x00,0x0C,
79596 -0x00,0x00,0x00,0x00,
79597 -0xCE,0xFF,0x40,0x14,
79598 -0x21,0x10,0x11,0x02,
79599 -0x32,0x1E,0x00,0x08,
79600 -0x01,0x00,0x03,0x24,
79601 -0x02,0x80,0x02,0x3C,
79602 -0x38,0x5D,0x43,0x94,
79603 -0x00,0x00,0x00,0x00,
79604 -0x80,0x18,0x03,0x00,
79605 -0xB8,0x0B,0x62,0x28,
79606 -0x04,0x00,0x40,0x14,
79607 -0xB8,0x0B,0x04,0x24,
79608 -0x21,0x4E,0x62,0x28,
79609 -0x20,0x4E,0x04,0x24,
79610 -0x0B,0x20,0x62,0x00,
79611 -0x08,0x00,0xE0,0x03,
79612 -0x21,0x10,0x80,0x00,
79613 -0x21,0x38,0x80,0x00,
79614 -0x08,0x00,0xC0,0x10,
79615 -0xFF,0xFF,0xC3,0x24,
79616 -0xFF,0xFF,0x06,0x24,
79617 -0x00,0x00,0xA2,0x8C,
79618 -0xFF,0xFF,0x63,0x24,
79619 -0x04,0x00,0xA5,0x24,
79620 -0x00,0x00,0xE2,0xAC,
79621 -0xFB,0xFF,0x66,0x14,
79622 -0x04,0x00,0xE7,0x24,
79623 -0x08,0x00,0xE0,0x03,
79624 -0x21,0x10,0x80,0x00,
79625 -0x25,0xB0,0x03,0x3C,
79626 -0xD8,0xFF,0xBD,0x27,
79627 -0x20,0x00,0xBF,0xAF,
79628 -0x1C,0x00,0xB1,0xAF,
79629 -0x18,0x00,0xB0,0xAF,
79630 -0x94,0x0E,0x65,0x34,
79631 -0x9C,0x0E,0x66,0x34,
79632 -0xA4,0x0E,0x67,0x34,
79633 -0xAC,0x0E,0x68,0x34,
79634 -0x02,0x80,0x02,0x3C,
79635 -0x00,0x00,0xA9,0x8C,
79636 -0x30,0x1F,0x58,0x24,
79637 -0x00,0x00,0xCC,0x8C,
79638 -0x00,0x00,0xF1,0x8C,
79639 -0x00,0x00,0x05,0x8D,
79640 -0x0C,0x00,0x07,0x8F,
79641 -0x10,0x00,0x08,0x8F,
79642 -0xFF,0x03,0x0A,0x3C,
79643 -0xB4,0x0E,0x62,0x34,
79644 -0x00,0x00,0x4B,0x8C,
79645 -0x24,0x48,0x2A,0x01,
79646 -0x00,0xFC,0x02,0x24,
79647 -0x24,0x28,0xAA,0x00,
79648 -0xBC,0x0E,0x66,0x34,
79649 -0x24,0x40,0x02,0x01,
79650 -0x02,0x4C,0x09,0x00,
79651 -0x24,0x38,0xE2,0x00,
79652 -0x02,0x2C,0x05,0x00,
79653 -0xF0,0xFF,0x02,0x3C,
79654 -0x00,0x00,0xD0,0x8C,
79655 -0xFF,0x03,0x42,0x34,
79656 -0xCC,0x0E,0x66,0x34,
79657 -0x25,0x38,0xE9,0x00,
79658 -0xC4,0x0E,0x63,0x34,
79659 -0x25,0x40,0x05,0x01,
79660 -0x08,0x00,0x0D,0x8F,
79661 -0x00,0x00,0x6F,0x8C,
79662 -0x24,0x40,0x02,0x01,
79663 -0x00,0x00,0xCE,0x8C,
79664 -0x24,0x38,0xE2,0x00,
79665 -0x24,0x60,0x8A,0x01,
79666 -0x24,0x58,0x6A,0x01,
79667 -0xFF,0x9F,0x02,0x3C,
79668 -0x82,0x61,0x0C,0x00,
79669 -0x82,0x59,0x0B,0x00,
79670 -0xFF,0xFF,0x42,0x34,
79671 -0x0F,0xC0,0x05,0x3C,
79672 -0xFF,0xFF,0xA5,0x34,
79673 -0x25,0x38,0xEC,0x00,
79674 -0x25,0x40,0x0B,0x01,
79675 -0x24,0x68,0xA2,0x01,
79676 -0xFF,0x00,0x0B,0x3C,
79677 -0x00,0xFF,0x82,0x30,
79678 -0x24,0x88,0x2A,0x02,
79679 -0x24,0x80,0x0A,0x02,
79680 -0x24,0x18,0x8B,0x00,
79681 -0x24,0x40,0x05,0x01,
79682 -0x21,0x48,0x80,0x00,
79683 -0x02,0x62,0x02,0x00,
79684 -0x24,0x38,0xE5,0x00,
79685 -0x00,0x20,0x02,0x3C,
79686 -0x24,0x70,0xCA,0x01,
79687 -0x00,0x89,0x11,0x00,
79688 -0x00,0x81,0x10,0x00,
79689 -0x24,0x78,0xEA,0x01,
79690 -0x00,0xFF,0x6B,0x35,
79691 -0x25,0x68,0xA2,0x01,
79692 -0x02,0x1C,0x03,0x00,
79693 -0x02,0x80,0x04,0x3C,
79694 -0x25,0x38,0xF1,0x00,
79695 -0x25,0x40,0x10,0x01,
79696 -0x02,0x7C,0x0F,0x00,
79697 -0x02,0x74,0x0E,0x00,
79698 -0x24,0x48,0x2B,0x01,
79699 -0xDC,0xE3,0x84,0x24,
79700 -0x21,0x28,0x80,0x01,
79701 -0x21,0x30,0x60,0x00,
79702 -0x12,0x00,0x02,0x24,
79703 -0x08,0x00,0x0D,0xAF,
79704 -0x0C,0x00,0x07,0xAF,
79705 -0x10,0x00,0x08,0xAF,
79706 -0x14,0x00,0x0F,0xA7,
79707 -0x0A,0x00,0x20,0x15,
79708 -0x16,0x00,0x0E,0xA7,
79709 -0x10,0x00,0xA4,0x27,
79710 -0xC7,0x02,0x02,0xA3,
79711 -0xC8,0x5C,0x00,0x0C,
79712 -0xC3,0x02,0x02,0xA3,
79713 -0x20,0x00,0xBF,0x8F,
79714 -0x1C,0x00,0xB1,0x8F,
79715 -0x18,0x00,0xB0,0x8F,
79716 -0x08,0x00,0xE0,0x03,
79717 -0x28,0x00,0xBD,0x27,
79718 -0xC7,0x02,0x03,0xA3,
79719 -0x2F,0x55,0x00,0x0C,
79720 -0xC3,0x02,0x0C,0xA3,
79721 -0xC8,0x5C,0x00,0x0C,
79722 -0x10,0x00,0xA4,0x27,
79723 -0x20,0x00,0xBF,0x8F,
79724 -0x1C,0x00,0xB1,0x8F,
79725 -0x18,0x00,0xB0,0x8F,
79726 -0x08,0x00,0xE0,0x03,
79727 -0x28,0x00,0xBD,0x27,
79728 -0xC8,0xFF,0xBD,0x27,
79729 -0x28,0x00,0xB6,0xAF,
79730 -0x25,0xB0,0x02,0x3C,
79731 -0x00,0x80,0x16,0x3C,
79732 -0x48,0x7B,0xC3,0x26,
79733 -0x18,0x03,0x42,0x34,
79734 -0x30,0x00,0xBE,0xAF,
79735 -0x2C,0x00,0xB7,0xAF,
79736 -0x24,0x00,0xB5,0xAF,
79737 -0x20,0x00,0xB4,0xAF,
79738 -0x1C,0x00,0xB3,0xAF,
79739 -0x34,0x00,0xBF,0xAF,
79740 -0x18,0x00,0xB2,0xAF,
79741 -0x14,0x00,0xB1,0xAF,
79742 -0x10,0x00,0xB0,0xAF,
79743 -0x00,0x00,0x43,0xAC,
79744 -0x21,0x98,0x00,0x00,
79745 -0x02,0x80,0x15,0x3C,
79746 -0x00,0x80,0x1E,0x3C,
79747 -0x02,0x80,0x14,0x3C,
79748 -0x02,0x80,0x17,0x3C,
79749 -0x25,0xB0,0x10,0x3C,
79750 -0x18,0x03,0x02,0x36,
79751 -0x48,0x7B,0xC3,0x26,
79752 -0x00,0x00,0x43,0xAC,
79753 -0x30,0x1F,0xB1,0x26,
79754 -0x7C,0x36,0x24,0x96,
79755 -0x70,0x03,0x05,0x36,
79756 -0x00,0x00,0xB2,0x8C,
79757 -0x01,0x00,0x84,0x24,
79758 -0x03,0x00,0x40,0x12,
79759 -0x7C,0x36,0x24,0xA6,
79760 -0x01,0x00,0x62,0x26,
79761 -0xFF,0xFF,0x53,0x30,
79762 -0xFF,0x00,0x04,0x3C,
79763 -0xFF,0xFF,0x82,0x34,
79764 -0x2B,0x10,0x52,0x00,
79765 -0x47,0x00,0x40,0x10,
79766 -0x00,0x50,0x62,0x2E,
79767 -0x00,0xFF,0x06,0x3C,
79768 -0xFF,0x00,0xC2,0x34,
79769 -0x00,0xFD,0x05,0x3C,
79770 -0x24,0x18,0x42,0x02,
79771 -0x29,0x00,0xA2,0x34,
79772 -0xA7,0x01,0x62,0x10,
79773 -0x2B,0x10,0x43,0x00,
79774 -0x46,0x00,0x40,0x14,
79775 -0xAC,0x00,0xA2,0x34,
79776 -0x00,0xF2,0x06,0x3C,
79777 -0x01,0x00,0xC2,0x34,
79778 -0xB8,0x01,0x62,0x10,
79779 -0x2B,0x10,0x43,0x00,
79780 -0x7D,0x00,0x40,0x14,
79781 -0x07,0x00,0xA2,0x34,
79782 -0x00,0xF0,0x05,0x3C,
79783 -0x03,0x00,0xA2,0x34,
79784 -0xD5,0x01,0x62,0x10,
79785 -0x2B,0x10,0x43,0x00,
79786 -0xC8,0x00,0x40,0x14,
79787 -0x00,0xF1,0x07,0x3C,
79788 -0x21,0x02,0x65,0x10,
79789 -0x00,0xFF,0x82,0x34,
79790 -0x2B,0x10,0xA3,0x00,
79791 -0x48,0x01,0x40,0x14,
79792 -0x01,0x00,0xA2,0x34,
79793 -0x00,0xE0,0x02,0x3C,
79794 -0x73,0x01,0x62,0x10,
79795 -0x00,0xFF,0x48,0x32,
79796 -0x25,0xB0,0x02,0x3C,
79797 -0x70,0x03,0x42,0x34,
79798 -0x21,0x98,0x00,0x00,
79799 -0x00,0x00,0x40,0xAC,
79800 -0x25,0xB0,0x04,0x3C,
79801 -0x18,0x03,0x82,0x34,
79802 -0x48,0x7C,0xC3,0x27,
79803 -0x00,0x00,0x43,0xAC,
79804 -0x00,0x60,0x01,0x40,
79805 -0x01,0x00,0x21,0x34,
79806 -0x01,0x00,0x21,0x38,
79807 -0x00,0x60,0x81,0x40,
79808 -0x6C,0x57,0x82,0x8E,
79809 -0x6C,0x57,0x83,0x26,
79810 -0x10,0x00,0x43,0x10,
79811 -0x02,0x80,0x02,0x3C,
79812 -0xBF,0x00,0x92,0x34,
79813 -0x30,0x1F,0x51,0x24,
79814 -0x21,0x80,0x60,0x00,
79815 -0x00,0x00,0x42,0x92,
79816 -0x00,0x00,0x00,0x00,
79817 -0x04,0x00,0x42,0x2C,
79818 -0x08,0x00,0x40,0x10,
79819 -0x00,0x00,0x00,0x00,
79820 -0x3C,0x38,0x24,0x8E,
79821 -0xB4,0x08,0x00,0x0C,
79822 -0x00,0x00,0x00,0x00,
79823 -0x6C,0x57,0x83,0x8E,
79824 -0x00,0x00,0x00,0x00,
79825 -0xF5,0xFF,0x70,0x14,
79826 -0x00,0x00,0x00,0x00,
79827 -0x00,0x60,0x01,0x40,
79828 -0x01,0x00,0x21,0x34,
79829 -0x00,0x60,0x81,0x40,
79830 -0x21,0x28,0x00,0x00,
79831 -0x08,0x10,0xE4,0x26,
79832 -0x21,0x30,0x00,0x00,
79833 -0x91,0x3C,0x00,0x0C,
79834 -0x21,0x38,0x00,0x00,
79835 -0xE8,0x1E,0x00,0x08,
79836 -0x25,0xB0,0x10,0x3C,
79837 -0xDA,0xFF,0x40,0x14,
79838 -0x74,0x03,0x03,0x36,
79839 -0xFF,0xFF,0x02,0x24,
79840 -0x21,0x98,0x00,0x00,
79841 -0x00,0x00,0xA0,0xAC,
79842 -0x00,0x00,0x62,0xAC,
79843 -0x1B,0x1F,0x00,0x08,
79844 -0x25,0xB0,0x04,0x3C,
79845 -0x84,0x01,0x62,0x10,
79846 -0x00,0x00,0x00,0x00,
79847 -0x2B,0x10,0x43,0x00,
79848 -0x1E,0x00,0x40,0x14,
79849 -0x00,0xFE,0x07,0x3C,
79850 -0xA4,0x00,0xA2,0x34,
79851 -0x8F,0x01,0x62,0x10,
79852 -0x2B,0x10,0x43,0x00,
79853 -0x47,0x00,0x40,0x14,
79854 -0xA7,0x00,0xA2,0x34,
79855 -0xA1,0x00,0xA2,0x34,
79856 -0xEA,0x01,0x62,0x10,
79857 -0x00,0x00,0x00,0x00,
79858 -0x2B,0x10,0x43,0x00,
79859 -0xAD,0x00,0x40,0x14,
79860 -0xA2,0x00,0xA2,0x34,
79861 -0xA0,0x00,0xA2,0x34,
79862 -0xBE,0xFF,0x62,0x14,
79863 -0x25,0xB0,0x02,0x3C,
79864 -0x00,0x0F,0x42,0x32,
79865 -0x02,0x22,0x02,0x00,
79866 -0x01,0x00,0x03,0x24,
79867 -0x96,0x02,0x83,0x10,
79868 -0x00,0x00,0x00,0x00,
79869 -0x02,0x00,0x02,0x24,
79870 -0x8F,0x02,0x82,0x10,
79871 -0x00,0x00,0x00,0x00,
79872 -0x03,0x00,0x02,0x24,
79873 -0x88,0x02,0x82,0x10,
79874 -0x00,0x00,0x00,0x00,
79875 -0xCD,0x5A,0x00,0x0C,
79876 -0x21,0x20,0x00,0x00,
79877 -0x17,0x1F,0x00,0x08,
79878 -0x25,0xB0,0x02,0x3C,
79879 -0x12,0x00,0xE2,0x34,
79880 -0x65,0x01,0x62,0x10,
79881 -0x00,0x00,0x00,0x00,
79882 -0x2B,0x10,0x43,0x00,
79883 -0x37,0x00,0x40,0x14,
79884 -0x1A,0x00,0xE2,0x34,
79885 -0xAF,0x00,0xA2,0x34,
79886 -0xC8,0x01,0x62,0x10,
79887 -0x00,0x00,0x00,0x00,
79888 -0x2B,0x10,0x43,0x00,
79889 -0x97,0x00,0x40,0x14,
79890 -0x10,0x00,0xE2,0x34,
79891 -0xAD,0x00,0xA2,0x34,
79892 -0x44,0x02,0x62,0x10,
79893 -0x00,0x00,0x00,0x00,
79894 -0xAE,0x00,0xA2,0x34,
79895 -0x9C,0xFF,0x62,0x14,
79896 -0x02,0x24,0x12,0x00,
79897 -0x00,0xFF,0x45,0x32,
79898 -0xFF,0x00,0x84,0x30,
79899 -0x58,0x5A,0x00,0x0C,
79900 -0x02,0x2A,0x05,0x00,
79901 -0x25,0xB0,0x03,0x3C,
79902 -0x74,0x03,0x63,0x34,
79903 -0x00,0x00,0x62,0xA0,
79904 -0x17,0x1F,0x00,0x08,
79905 -0x25,0xB0,0x02,0x3C,
79906 -0x73,0x01,0x62,0x10,
79907 -0x00,0x00,0x00,0x00,
79908 -0x2B,0x10,0x43,0x00,
79909 -0x35,0x00,0x40,0x14,
79910 -0x18,0x00,0xA2,0x34,
79911 -0x00,0xF8,0x04,0x3C,
79912 -0x16,0x00,0x82,0x34,
79913 -0xB6,0x01,0x62,0x10,
79914 -0x00,0x00,0x00,0x00,
79915 -0x2B,0x10,0x43,0x00,
79916 -0x90,0x00,0x40,0x14,
79917 -0x17,0x00,0x82,0x34,
79918 -0x15,0x00,0x82,0x34,
79919 -0x84,0xFF,0x62,0x14,
79920 -0x00,0x00,0x00,0x00,
79921 -0xA7,0x22,0x00,0x0C,
79922 -0x00,0x00,0x00,0x00,
79923 -0x17,0x1F,0x00,0x08,
79924 -0x25,0xB0,0x02,0x3C,
79925 -0x6A,0x01,0x62,0x10,
79926 -0x2B,0x10,0x43,0x00,
79927 -0xB7,0x00,0x40,0x14,
79928 -0xAA,0x00,0xA2,0x34,
79929 -0xA5,0x00,0xA2,0x34,
79930 -0x35,0x02,0x62,0x10,
79931 -0x24,0x20,0x44,0x02,
79932 -0xA6,0x00,0xA2,0x34,
79933 -0x76,0xFF,0x62,0x14,
79934 -0x00,0x00,0x00,0x00,
79935 -0xF7,0x5B,0x00,0x0C,
79936 -0x00,0x00,0x00,0x00,
79937 -0x17,0x1F,0x00,0x08,
79938 -0x25,0xB0,0x02,0x3C,
79939 -0x75,0x01,0x62,0x10,
79940 -0x2B,0x10,0x43,0x00,
79941 -0x80,0x00,0x40,0x14,
79942 -0x0F,0x00,0xC2,0x34,
79943 -0x18,0x00,0xE2,0x34,
79944 -0xC1,0x01,0x62,0x10,
79945 -0x00,0x00,0x00,0x00,
79946 -0x19,0x00,0xE2,0x34,
79947 -0x68,0xFF,0x62,0x14,
79948 -0x00,0x00,0x00,0x00,
79949 -0x00,0x60,0x01,0x40,
79950 -0x01,0x00,0x21,0x34,
79951 -0x01,0x00,0x21,0x38,
79952 -0x00,0x60,0x81,0x40,
79953 -0x30,0x1F,0xA2,0x26,
79954 -0x2A,0x1C,0x44,0x90,
79955 -0x25,0xB0,0x03,0x3C,
79956 -0x74,0x03,0x63,0x34,
79957 -0x00,0x00,0x64,0xAC,
79958 -0x00,0x60,0x01,0x40,
79959 -0x01,0x00,0x21,0x34,
79960 -0x00,0x60,0x81,0x40,
79961 -0x17,0x1F,0x00,0x08,
79962 -0x25,0xB0,0x02,0x3C,
79963 -0x3E,0x01,0x62,0x10,
79964 -0x2B,0x10,0x43,0x00,
79965 -0x74,0x00,0x40,0x14,
79966 -0x19,0x00,0xA2,0x34,
79967 -0x14,0x00,0xA2,0x34,
79968 -0x96,0x01,0x62,0x10,
79969 -0x17,0x00,0xA2,0x34,
79970 -0x51,0xFF,0x62,0x14,
79971 -0x25,0xB0,0x04,0x3C,
79972 -0x68,0x03,0x85,0x34,
79973 -0x00,0x00,0xA3,0x8C,
79974 -0x00,0xFF,0x42,0x32,
79975 -0x00,0x12,0x02,0x00,
79976 -0xFF,0xFF,0x73,0x30,
79977 -0x25,0x10,0x53,0x00,
79978 -0x00,0x00,0xA2,0xAC,
79979 -0x64,0x03,0x84,0x34,
79980 -0x00,0x00,0x82,0x90,
79981 -0x00,0x00,0x00,0x00,
79982 -0xFF,0x00,0x53,0x30,
79983 -0x40,0x00,0x63,0x36,
79984 -0x00,0x00,0x83,0xA0,
79985 -0x17,0x1F,0x00,0x08,
79986 -0x25,0xB0,0x02,0x3C,
79987 -0x02,0x00,0xE2,0x34,
79988 -0x3F,0xFF,0x62,0x10,
79989 -0x2B,0x10,0x43,0x00,
79990 -0x9B,0x00,0x40,0x14,
79991 -0x04,0x00,0xE2,0x34,
79992 -0x08,0x00,0xA2,0x34,
79993 -0xA3,0x01,0x62,0x10,
79994 -0x00,0xFF,0x42,0x32,
79995 -0x38,0xFF,0x67,0x14,
79996 -0x25,0xB0,0x04,0x3C,
79997 -0xFF,0x00,0x05,0x3C,
79998 -0x00,0xFF,0xA5,0x34,
79999 -0x24,0x28,0x45,0x02,
80000 -0x02,0x2A,0x05,0x00,
80001 -0x94,0x00,0x83,0x34,
80002 -0x40,0x11,0x05,0x00,
80003 -0x26,0xB0,0x06,0x3C,
80004 -0x00,0x00,0x65,0xA4,
80005 -0xC0,0xFF,0x53,0x24,
80006 -0x7C,0x00,0xCC,0x34,
80007 -0x04,0x00,0x07,0x24,
80008 -0x9A,0x00,0x88,0x34,
80009 -0x98,0x00,0x89,0x34,
80010 -0x96,0x00,0x8A,0x34,
80011 -0x7A,0x00,0xC6,0x34,
80012 -0xB0,0x03,0x8B,0x34,
80013 -0x00,0x04,0x02,0x24,
80014 -0xA0,0x00,0x03,0x24,
80015 -0x00,0x00,0x02,0xA5,
80016 -0x44,0x00,0x84,0x34,
80017 -0x00,0x00,0x23,0xA5,
80018 -0x00,0x00,0x47,0xA5,
80019 -0x00,0x00,0xC7,0xA0,
80020 -0x00,0x00,0x73,0xAD,
80021 -0x00,0x00,0x93,0xA5,
80022 -0x00,0x00,0x83,0x94,
80023 -0xFF,0xFD,0x02,0x24,
80024 -0x30,0x1F,0xA6,0x26,
80025 -0x24,0x18,0x62,0x00,
80026 -0x00,0x00,0x83,0xA4,
80027 -0x00,0x00,0x82,0x94,
80028 -0xBA,0x1B,0xC5,0xA4,
80029 -0x00,0x02,0x42,0x34,
80030 -0x00,0x00,0x82,0xA4,
80031 -0x17,0x1F,0x00,0x08,
80032 -0x25,0xB0,0x02,0x3C,
80033 -0xBF,0x01,0x62,0x10,
80034 -0x25,0xB0,0x02,0x3C,
80035 -0xA3,0x00,0xA2,0x34,
80036 -0x10,0xFF,0x62,0x14,
80037 -0x25,0xB0,0x02,0x3C,
80038 -0x30,0x1F,0xA2,0x26,
80039 -0x16,0x1F,0x00,0x08,
80040 -0x30,0x38,0x40,0xAC,
80041 -0x3A,0x01,0x62,0x10,
80042 -0x11,0x00,0xE2,0x34,
80043 -0x08,0xFF,0x62,0x14,
80044 -0x00,0x00,0x00,0x00,
80045 -0x00,0x60,0x01,0x40,
80046 -0x01,0x00,0x21,0x34,
80047 -0x01,0x00,0x21,0x38,
80048 -0x00,0x60,0x81,0x40,
80049 -0xFF,0x00,0x04,0x3C,
80050 -0x00,0xFF,0x84,0x34,
80051 -0x24,0x20,0x44,0x02,
80052 -0x30,0x1F,0xA2,0x26,
80053 -0x02,0x22,0x04,0x00,
80054 -0xC2,0x34,0x00,0x0C,
80055 -0x2A,0x1C,0x40,0xA0,
80056 -0x00,0x60,0x01,0x40,
80057 -0x01,0x00,0x21,0x34,
80058 -0x00,0x60,0x81,0x40,
80059 -0x17,0x1F,0x00,0x08,
80060 -0x25,0xB0,0x02,0x3C,
80061 -0x9F,0x01,0x62,0x10,
80062 -0x00,0x00,0x00,0x00,
80063 -0x18,0x00,0x82,0x34,
80064 -0xF3,0xFE,0x62,0x14,
80065 -0x00,0x00,0x00,0x00,
80066 -0x0A,0x23,0x00,0x0C,
80067 -0x00,0x00,0x00,0x00,
80068 -0x17,0x1F,0x00,0x08,
80069 -0x25,0xB0,0x02,0x3C,
80070 -0x4E,0x01,0x62,0x10,
80071 -0x10,0x00,0xC2,0x34,
80072 -0xEC,0xFE,0x62,0x14,
80073 -0x25,0xB0,0x02,0x3C,
80074 -0x00,0xFF,0x43,0x32,
80075 -0x00,0xFF,0x02,0x34,
80076 -0xDA,0xFF,0x62,0x14,
80077 -0x30,0x1F,0xA2,0x26,
80078 -0x30,0x1F,0xA3,0x26,
80079 -0xFF,0xFF,0x02,0x34,
80080 -0x16,0x1F,0x00,0x08,
80081 -0x30,0x38,0x62,0xAC,
80082 -0x96,0x01,0x62,0x10,
80083 -0x25,0xB0,0x02,0x3C,
80084 -0x28,0x00,0xA2,0x34,
80085 -0xDE,0xFE,0x62,0x14,
80086 -0x0F,0x00,0x10,0x3C,
80087 -0xFF,0xFF,0x05,0x36,
80088 -0x60,0x00,0x06,0x24,
80089 -0x5F,0x47,0x00,0x0C,
80090 -0x24,0x00,0x04,0x24,
80091 -0x25,0x22,0x00,0x0C,
80092 -0xE8,0x03,0x04,0x24,
80093 -0x00,0x60,0x01,0x40,
80094 -0x01,0x00,0x21,0x34,
80095 -0x01,0x00,0x21,0x38,
80096 -0x00,0x60,0x81,0x40,
80097 -0x24,0x00,0x04,0x24,
80098 -0x8A,0x47,0x00,0x0C,
80099 -0xFF,0xFF,0x05,0x36,
80100 -0x1F,0x00,0x53,0x30,
80101 -0x00,0x60,0x01,0x40,
80102 -0x01,0x00,0x21,0x34,
80103 -0x00,0x60,0x81,0x40,
80104 -0x54,0x22,0x00,0x0C,
80105 -0x64,0x00,0x04,0x24,
80106 -0x25,0xB0,0x02,0x3C,
80107 -0x74,0x03,0x42,0x34,
80108 -0x00,0x00,0x53,0xA0,
80109 -0x17,0x1F,0x00,0x08,
80110 -0x25,0xB0,0x02,0x3C,
80111 -0x84,0x01,0x62,0x10,
80112 -0x00,0x00,0x00,0x00,
80113 -0xAB,0x00,0xA2,0x34,
80114 -0xC1,0xFE,0x62,0x14,
80115 -0x00,0x00,0x00,0x00,
80116 -0xE6,0x5F,0x00,0x0C,
80117 -0x21,0x20,0x40,0x02,
80118 -0x17,0x1F,0x00,0x08,
80119 -0x25,0xB0,0x02,0x3C,
80120 -0x4C,0x01,0x62,0x10,
80121 -0x25,0xB0,0x02,0x3C,
80122 -0x02,0x00,0xA2,0x34,
80123 -0xB9,0xFE,0x62,0x14,
80124 -0x25,0xB0,0x02,0x3C,
80125 -0x02,0x14,0x12,0x00,
80126 -0x00,0xFF,0x43,0x32,
80127 -0xFF,0x00,0x45,0x30,
80128 -0x04,0x00,0xA0,0x10,
80129 -0x02,0x92,0x03,0x00,
80130 -0x01,0x00,0x02,0x24,
80131 -0x02,0x00,0xA2,0x10,
80132 -0x01,0x00,0x04,0x24,
80133 -0x21,0x20,0x00,0x00,
80134 -0xE6,0x44,0x00,0x0C,
80135 -0x0F,0x00,0x10,0x3C,
80136 -0xFF,0xFF,0x05,0x36,
80137 -0x8A,0x47,0x00,0x0C,
80138 -0x21,0x20,0x40,0x02,
80139 -0xFF,0xFF,0x10,0x36,
80140 -0x24,0x98,0x50,0x00,
80141 -0x25,0xB0,0x02,0x3C,
80142 -0x74,0x03,0x42,0x34,
80143 -0x00,0x00,0x53,0xAC,
80144 -0x17,0x1F,0x00,0x08,
80145 -0x25,0xB0,0x02,0x3C,
80146 -0x15,0x01,0x62,0x10,
80147 -0x24,0x10,0x44,0x02,
80148 -0xA0,0xFE,0x66,0x14,
80149 -0x25,0xB0,0x02,0x3C,
80150 -0x25,0xB0,0x05,0x3C,
80151 -0x74,0x03,0xA3,0x34,
80152 -0x00,0x00,0x64,0x8C,
80153 -0xFF,0x0F,0x02,0x3C,
80154 -0xFF,0xFF,0x42,0x34,
80155 -0x24,0x90,0x82,0x00,
80156 -0x01,0x00,0x03,0x3C,
80157 -0x2B,0x18,0x72,0x00,
80158 -0x95,0xFE,0x60,0x10,
80159 -0x00,0xB0,0x02,0x3C,
80160 -0x25,0x90,0x42,0x02,
80161 -0x00,0x00,0x53,0x8E,
80162 -0x78,0x03,0xA2,0x34,
80163 -0x00,0x00,0x53,0xAC,
80164 -0x17,0x1F,0x00,0x08,
80165 -0x25,0xB0,0x02,0x3C,
80166 -0x02,0x1A,0x08,0x00,
80167 -0xFF,0x00,0x02,0x24,
80168 -0x56,0x01,0x62,0x10,
80169 -0x25,0xB0,0x05,0x3C,
80170 -0x0E,0x00,0x60,0x14,
80171 -0x00,0xCC,0x02,0x34,
80172 -0x25,0xB0,0x04,0x3C,
80173 -0x64,0x03,0x84,0x34,
80174 -0x30,0x1F,0xA7,0x26,
80175 -0x00,0x00,0x85,0x94,
80176 -0xE4,0x02,0xE6,0x8C,
80177 -0xFF,0xCF,0x02,0x3C,
80178 -0xFF,0xFE,0x03,0x24,
80179 -0xFF,0xFF,0x42,0x34,
80180 -0x24,0x28,0xA3,0x00,
80181 -0x24,0x30,0xC2,0x00,
80182 -0x00,0x00,0x85,0xA4,
80183 -0xE4,0x02,0xE6,0xAC,
80184 -0x00,0xCC,0x02,0x34,
80185 -0x7B,0xFE,0x02,0x15,
80186 -0x25,0xB0,0x02,0x3C,
80187 -0x30,0x1F,0xA5,0x26,
80188 -0xE4,0x02,0xA3,0x8C,
80189 -0xFF,0xCF,0x02,0x3C,
80190 -0xFF,0xFF,0x42,0x34,
80191 -0x24,0x18,0x62,0x00,
80192 -0x00,0x10,0x04,0x3C,
80193 -0x25,0x18,0x64,0x00,
80194 -0x16,0x1F,0x00,0x08,
80195 -0xE4,0x02,0xA3,0xAC,
80196 -0x02,0x14,0x12,0x00,
80197 -0x00,0x1F,0x43,0x32,
80198 -0x02,0x9A,0x03,0x00,
80199 -0x3F,0x00,0x42,0x30,
80200 -0xC1,0x02,0x22,0xA2,
80201 -0xBC,0x02,0x33,0xA2,
80202 -0x00,0x60,0x01,0x40,
80203 -0x01,0x00,0x21,0x34,
80204 -0x01,0x00,0x21,0x38,
80205 -0x00,0x60,0x81,0x40,
80206 -0x76,0x2C,0x00,0x0C,
80207 -0x00,0x00,0x00,0x00,
80208 -0x21,0x98,0x40,0x00,
80209 -0x74,0x03,0x02,0x36,
80210 -0x00,0x00,0x53,0xAC,
80211 -0x00,0x60,0x01,0x40,
80212 -0x01,0x00,0x21,0x34,
80213 -0x00,0x60,0x81,0x40,
80214 -0x03,0x00,0x22,0x92,
80215 -0x00,0x00,0x00,0x00,
80216 -0x01,0x00,0x42,0x24,
80217 -0x16,0x1F,0x00,0x08,
80218 -0x03,0x00,0x22,0xA2,
80219 -0x74,0x03,0x03,0x36,
80220 -0x00,0x00,0x64,0x8C,
80221 -0xFF,0x0F,0x02,0x3C,
80222 -0xFF,0xFF,0x42,0x34,
80223 -0x24,0x90,0x82,0x00,
80224 -0x01,0x00,0x03,0x3C,
80225 -0x2B,0x18,0x72,0x00,
80226 -0x51,0xFE,0x60,0x10,
80227 -0x78,0x03,0x02,0x36,
80228 -0x00,0x00,0x53,0x8C,
80229 -0x00,0xB0,0x03,0x3C,
80230 -0x25,0x90,0x43,0x02,
80231 -0x00,0x00,0x53,0xAE,
80232 -0x17,0x1F,0x00,0x08,
80233 -0x25,0xB0,0x02,0x3C,
80234 -0xBE,0x59,0x00,0x0C,
80235 -0x21,0x20,0x40,0x02,
80236 -0x17,0x1F,0x00,0x08,
80237 -0x25,0xB0,0x02,0x3C,
80238 -0x00,0x60,0x01,0x40,
80239 -0x01,0x00,0x21,0x34,
80240 -0x01,0x00,0x21,0x38,
80241 -0x00,0x60,0x81,0x40,
80242 -0x00,0xFF,0x82,0x34,
80243 -0x24,0x10,0x42,0x02,
80244 -0x02,0x2A,0x02,0x00,
80245 -0x2B,0x1C,0x25,0xA2,
80246 -0x00,0x60,0x01,0x40,
80247 -0x01,0x00,0x21,0x34,
80248 -0x00,0x60,0x81,0x40,
80249 -0x17,0x1F,0x00,0x08,
80250 -0x25,0xB0,0x02,0x3C,
80251 -0xFF,0xFF,0x02,0x34,
80252 -0x16,0x1F,0x00,0x08,
80253 -0x30,0x38,0x22,0xAE,
80254 -0x24,0x10,0x44,0x02,
80255 -0x00,0xFF,0x43,0x32,
80256 -0x02,0x2C,0x02,0x00,
80257 -0x04,0x00,0xA0,0x10,
80258 -0x02,0x92,0x03,0x00,
80259 -0x01,0x00,0x02,0x24,
80260 -0x02,0x00,0xA2,0x10,
80261 -0x01,0x00,0x04,0x24,
80262 -0x21,0x20,0x00,0x00,
80263 -0x25,0xB0,0x10,0x3C,
80264 -0xE6,0x44,0x00,0x0C,
80265 -0x74,0x03,0x10,0x36,
80266 -0x00,0x00,0x13,0x8E,
80267 -0x0F,0x00,0x11,0x3C,
80268 -0x21,0x20,0x40,0x02,
80269 -0x21,0x30,0x60,0x02,
80270 -0x5F,0x47,0x00,0x0C,
80271 -0xFF,0xFF,0x25,0x36,
80272 -0x21,0x20,0x40,0x02,
80273 -0x8A,0x47,0x00,0x0C,
80274 -0xFF,0xFF,0x25,0x36,
80275 -0x00,0x00,0x02,0xAE,
80276 -0x17,0x1F,0x00,0x08,
80277 -0x25,0xB0,0x02,0x3C,
80278 -0x85,0x5F,0x00,0x0C,
80279 -0x21,0x20,0x40,0x02,
80280 -0x17,0x1F,0x00,0x08,
80281 -0x25,0xB0,0x02,0x3C,
80282 -0x08,0x00,0x23,0x8E,
80283 -0xFF,0x9F,0x02,0x3C,
80284 -0xFF,0xFF,0x42,0x34,
80285 -0x24,0x18,0x62,0x00,
80286 -0x16,0x1F,0x00,0x08,
80287 -0x08,0x00,0x23,0xAE,
80288 -0x00,0xFF,0x42,0x32,
80289 -0x24,0x18,0x44,0x02,
80290 -0x02,0x9A,0x02,0x00,
80291 -0x01,0x00,0x02,0x24,
80292 -0x95,0x00,0x62,0x12,
80293 -0x02,0x1C,0x03,0x00,
80294 -0x02,0x00,0x02,0x24,
80295 -0xA9,0x00,0x62,0x12,
80296 -0xC0,0x10,0x03,0x00,
80297 -0x03,0x00,0x02,0x24,
80298 -0x09,0xFE,0x62,0x16,
80299 -0xC0,0x10,0x03,0x00,
80300 -0x21,0x10,0x43,0x00,
80301 -0x80,0x10,0x02,0x00,
80302 -0x21,0x10,0x43,0x00,
80303 -0x02,0x80,0x04,0x3C,
80304 -0x4C,0x43,0x83,0x24,
80305 -0x80,0x10,0x02,0x00,
80306 -0x21,0x10,0x43,0x00,
80307 -0x00,0x00,0x44,0x8C,
80308 -0x25,0xB0,0x03,0x3C,
80309 -0x74,0x03,0x63,0x34,
80310 -0x00,0x00,0x64,0xAC,
80311 -0x17,0x1F,0x00,0x08,
80312 -0x25,0xB0,0x02,0x3C,
80313 -0x00,0xFF,0x82,0x34,
80314 -0x24,0x10,0x42,0x02,
80315 -0x02,0x2A,0x02,0x00,
80316 -0x01,0x00,0x03,0x24,
80317 -0x77,0x00,0xA3,0x10,
80318 -0x74,0x03,0x02,0x36,
80319 -0x02,0x00,0xA2,0x28,
80320 -0xB7,0x00,0x40,0x14,
80321 -0x03,0x00,0x02,0x24,
80322 -0x06,0x00,0xA2,0x10,
80323 -0x00,0x00,0x00,0x00,
80324 -0x30,0x1F,0xA2,0x26,
80325 -0x24,0x1C,0x44,0x94,
80326 -0x25,0xB0,0x03,0x3C,
80327 -0x18,0x21,0x00,0x08,
80328 -0x74,0x03,0x63,0x34,
80329 -0x30,0x1F,0xA2,0x26,
80330 -0x26,0x1C,0x44,0x94,
80331 -0x25,0xB0,0x03,0x3C,
80332 -0x18,0x21,0x00,0x08,
80333 -0x74,0x03,0x63,0x34,
80334 -0x24,0x10,0x42,0x02,
80335 -0x02,0x92,0x02,0x00,
80336 -0x21,0x18,0x50,0x02,
80337 -0x00,0x00,0x73,0x8C,
80338 -0x74,0x03,0x02,0x36,
80339 -0x00,0x00,0x53,0xAC,
80340 -0x00,0x00,0x73,0x8C,
80341 -0x17,0x1F,0x00,0x08,
80342 -0x25,0xB0,0x02,0x3C,
80343 -0xA6,0x5A,0x00,0x0C,
80344 -0x00,0x00,0x00,0x00,
80345 -0x17,0x1F,0x00,0x08,
80346 -0x25,0xB0,0x02,0x3C,
80347 -0x24,0x20,0x44,0x02,
80348 -0x56,0x25,0x00,0x0C,
80349 -0x02,0x24,0x04,0x00,
80350 -0x17,0x1F,0x00,0x08,
80351 -0x25,0xB0,0x02,0x3C,
80352 -0xD7,0x22,0x00,0x0C,
80353 -0x00,0x00,0x00,0x00,
80354 -0x17,0x1F,0x00,0x08,
80355 -0x25,0xB0,0x02,0x3C,
80356 -0x00,0x60,0x01,0x40,
80357 -0x01,0x00,0x21,0x34,
80358 -0x01,0x00,0x21,0x38,
80359 -0x00,0x60,0x81,0x40,
80360 -0x30,0x1F,0xA3,0x26,
80361 -0x2A,0x1C,0x62,0x90,
80362 -0x00,0x00,0x00,0x00,
80363 -0x6A,0xFE,0x40,0x14,
80364 -0x00,0x00,0x00,0x00,
80365 -0x00,0xFF,0x82,0x34,
80366 -0x24,0x10,0x42,0x02,
80367 -0x02,0x2A,0x02,0x00,
80368 -0x01,0x00,0x02,0x24,
80369 -0x21,0x20,0xA0,0x00,
80370 -0x2A,0x1C,0x62,0xA0,
80371 -0xC2,0x34,0x00,0x0C,
80372 -0x2B,0x1C,0x65,0xA0,
80373 -0x1A,0x20,0x00,0x08,
80374 -0x00,0x00,0x00,0x00,
80375 -0x00,0xFF,0x82,0x34,
80376 -0x24,0x10,0x42,0x02,
80377 -0xBB,0xFD,0x40,0x10,
80378 -0x25,0xB0,0x02,0x3C,
80379 -0x30,0x1F,0xA3,0x26,
80380 -0x04,0x03,0x66,0x90,
80381 -0x24,0x20,0x44,0x02,
80382 -0x00,0xFF,0x45,0x32,
80383 -0x02,0x24,0x04,0x00,
80384 -0x02,0x2A,0x05,0x00,
80385 -0x00,0x01,0xC6,0x34,
80386 -0xFB,0xFF,0x87,0x24,
80387 -0xFB,0xFF,0xA2,0x24,
80388 -0x1F,0x03,0x62,0xA0,
80389 -0x04,0x03,0x66,0xAC,
80390 -0x1D,0x03,0x67,0xA0,
80391 -0x1C,0x03,0x64,0xA0,
80392 -0x16,0x1F,0x00,0x08,
80393 -0x1E,0x03,0x65,0xA0,
80394 -0x00,0x60,0x01,0x40,
80395 -0x01,0x00,0x21,0x34,
80396 -0x01,0x00,0x21,0x38,
80397 -0x00,0x60,0x81,0x40,
80398 -0x30,0x1F,0xA2,0x26,
80399 -0x2B,0x1C,0x44,0x90,
80400 -0x25,0xB0,0x03,0x3C,
80401 -0x74,0x03,0x63,0x34,
80402 -0x00,0x00,0x64,0xAC,
80403 -0xB8,0x1F,0x00,0x08,
80404 -0x00,0x00,0x00,0x00,
80405 -0x25,0xB0,0x03,0x3C,
80406 -0xFF,0x00,0x02,0x24,
80407 -0x56,0x01,0x63,0x34,
80408 -0x00,0x00,0x62,0xA4,
80409 -0x01,0x00,0x04,0x24,
80410 -0x02,0x80,0x02,0x3C,
80411 -0x16,0x1F,0x00,0x08,
80412 -0x08,0x5E,0x44,0xA0,
80413 -0x02,0x92,0x02,0x00,
80414 -0x05,0x00,0x40,0x12,
80415 -0x21,0x20,0x00,0x00,
80416 -0x01,0x00,0x02,0x24,
80417 -0x02,0x00,0x42,0x12,
80418 -0x01,0x00,0x04,0x24,
80419 -0x21,0x20,0x00,0x00,
80420 -0xE6,0x44,0x00,0x0C,
80421 -0x00,0x00,0x00,0x00,
80422 -0x17,0x1F,0x00,0x08,
80423 -0x25,0xB0,0x02,0x3C,
80424 -0x02,0x9C,0x02,0x00,
80425 -0x00,0xFF,0x43,0x32,
80426 -0x07,0x00,0x62,0x2E,
80427 -0x88,0xFD,0x40,0x10,
80428 -0x02,0x2A,0x03,0x00,
80429 -0x02,0x80,0x04,0x3C,
80430 -0x50,0xED,0x83,0x24,
80431 -0x80,0x10,0x13,0x00,
80432 -0x21,0x10,0x43,0x00,
80433 -0x00,0x00,0x44,0x8C,
80434 -0x00,0x00,0x00,0x00,
80435 -0x08,0x00,0x80,0x00,
80436 -0x00,0x00,0x00,0x00,
80437 -0x22,0x1C,0x23,0x96,
80438 -0x00,0x00,0x00,0x00,
80439 -0x00,0x00,0x43,0xAC,
80440 -0x17,0x1F,0x00,0x08,
80441 -0x25,0xB0,0x02,0x3C,
80442 -0xC0,0x10,0x03,0x00,
80443 -0x21,0x10,0x43,0x00,
80444 -0x80,0x10,0x02,0x00,
80445 -0x21,0x10,0x43,0x00,
80446 -0x80,0x10,0x02,0x00,
80447 -0x21,0x10,0x51,0x00,
80448 -0x14,0x24,0x44,0x8C,
80449 -0x74,0x03,0x03,0x36,
80450 -0x00,0x00,0x64,0xAC,
80451 -0x17,0x1F,0x00,0x08,
80452 -0x25,0xB0,0x02,0x3C,
80453 -0x00,0xFF,0x83,0x34,
80454 -0x74,0x03,0x44,0x34,
80455 -0x00,0x00,0x93,0x8C,
80456 -0x24,0x18,0x43,0x02,
80457 -0x02,0x92,0x03,0x00,
80458 -0x21,0x10,0x42,0x02,
80459 -0x00,0x00,0x53,0xAC,
80460 -0x00,0x00,0x53,0x8C,
80461 -0x00,0x00,0x00,0x00,
80462 -0x00,0x00,0x93,0xAC,
80463 -0x17,0x1F,0x00,0x08,
80464 -0x25,0xB0,0x02,0x3C,
80465 -0x21,0x10,0x43,0x00,
80466 -0x80,0x10,0x02,0x00,
80467 -0x21,0x10,0x43,0x00,
80468 -0x80,0x10,0x02,0x00,
80469 -0x21,0x10,0x51,0x00,
80470 -0x18,0x24,0x44,0x8C,
80471 -0xA4,0x21,0x00,0x08,
80472 -0x74,0x03,0x03,0x36,
80473 -0xCD,0x59,0x00,0x0C,
80474 -0x21,0x20,0x40,0x02,
80475 -0x17,0x1F,0x00,0x08,
80476 -0x25,0xB0,0x02,0x3C,
80477 -0x3D,0x23,0x00,0x0C,
80478 -0x00,0x00,0x00,0x00,
80479 -0x17,0x1F,0x00,0x08,
80480 -0x25,0xB0,0x02,0x3C,
80481 -0x74,0x03,0x42,0x34,
80482 -0x00,0x00,0x45,0x8C,
80483 -0x00,0xFF,0x84,0x34,
80484 -0x24,0x20,0x44,0x02,
80485 -0xC1,0x5B,0x00,0x0C,
80486 -0x02,0x22,0x04,0x00,
80487 -0x17,0x1F,0x00,0x08,
80488 -0x25,0xB0,0x02,0x3C,
80489 -0x70,0x03,0x42,0x34,
80490 -0x21,0x20,0x40,0x02,
80491 -0x00,0x00,0x40,0xAC,
80492 -0x6B,0x1E,0x00,0x0C,
80493 -0x00,0x00,0x00,0x00,
80494 -0x17,0x1F,0x00,0x08,
80495 -0x25,0xB0,0x02,0x3C,
80496 -0xF5,0x5B,0x00,0x0C,
80497 -0x02,0x24,0x04,0x00,
80498 -0x17,0x1F,0x00,0x08,
80499 -0x25,0xB0,0x02,0x3C,
80500 -0x00,0x60,0x00,0x0C,
80501 -0x00,0x00,0x00,0x00,
80502 -0x17,0x1F,0x00,0x08,
80503 -0x25,0xB0,0x02,0x3C,
80504 -0x4B,0xFF,0xA0,0x14,
80505 -0x00,0x00,0x00,0x00,
80506 -0x30,0x1F,0xA2,0x26,
80507 -0x20,0x1C,0x44,0x94,
80508 -0x25,0xB0,0x03,0x3C,
80509 -0x18,0x21,0x00,0x08,
80510 -0x74,0x03,0x63,0x34,
80511 -0x64,0x03,0xA5,0x34,
80512 -0x30,0x1F,0xA6,0x26,
80513 -0x00,0x00,0xA3,0x94,
80514 -0xE4,0x02,0xC4,0x8C,
80515 -0xFF,0xCF,0x02,0x3C,
80516 -0xFF,0xFF,0x42,0x34,
80517 -0x24,0x20,0x82,0x00,
80518 -0x00,0x01,0x63,0x34,
80519 -0x00,0x00,0xA3,0xA4,
80520 -0x9A,0x20,0x00,0x08,
80521 -0xE4,0x02,0xC4,0xAC,
80522 -0xCD,0x5A,0x00,0x0C,
80523 -0x03,0x00,0x04,0x24,
80524 -0x17,0x1F,0x00,0x08,
80525 -0x25,0xB0,0x02,0x3C,
80526 -0xCD,0x5A,0x00,0x0C,
80527 -0x02,0x00,0x04,0x24,
80528 -0x17,0x1F,0x00,0x08,
80529 -0x25,0xB0,0x02,0x3C,
80530 -0xCD,0x5A,0x00,0x0C,
80531 -0x01,0x00,0x04,0x24,
80532 -0x17,0x1F,0x00,0x08,
80533 -0x25,0xB0,0x02,0x3C,
80534 -0x00,0x19,0x05,0x00,
80535 -0x30,0x1F,0xA2,0x26,
80536 -0x21,0x18,0x62,0x00,
80537 -0x36,0x03,0x64,0x94,
80538 -0x25,0xB0,0x02,0x3C,
80539 -0x74,0x03,0x42,0x34,
80540 -0x00,0x00,0x44,0xAC,
80541 -0x17,0x1F,0x00,0x08,
80542 -0x25,0xB0,0x02,0x3C,
80543 -0x00,0x19,0x05,0x00,
80544 -0x30,0x1F,0xA2,0x26,
80545 -0x21,0x18,0x62,0x00,
80546 -0x35,0x03,0x64,0x90,
80547 -0xFD,0x21,0x00,0x08,
80548 -0x25,0xB0,0x02,0x3C,
80549 -0x00,0x19,0x05,0x00,
80550 -0x30,0x1F,0xA2,0x26,
80551 -0x21,0x18,0x62,0x00,
80552 -0x34,0x03,0x64,0x90,
80553 -0xFD,0x21,0x00,0x08,
80554 -0x25,0xB0,0x02,0x3C,
80555 -0x00,0x19,0x05,0x00,
80556 -0x30,0x1F,0xA2,0x26,
80557 -0x21,0x18,0x62,0x00,
80558 -0x32,0x03,0x64,0x94,
80559 -0xFD,0x21,0x00,0x08,
80560 -0x25,0xB0,0x02,0x3C,
80561 -0x00,0x19,0x05,0x00,
80562 -0x30,0x1F,0xA2,0x26,
80563 -0x21,0x18,0x62,0x00,
80564 -0x30,0x03,0x64,0x94,
80565 -0xFD,0x21,0x00,0x08,
80566 -0x25,0xB0,0x02,0x3C,
80567 -0x00,0x11,0x05,0x00,
80568 -0x30,0x1F,0xA3,0x26,
80569 -0x21,0x10,0x43,0x00,
80570 -0x2C,0x03,0x44,0x8C,
80571 -0xFC,0x21,0x00,0x08,
80572 -0x42,0x26,0x04,0x00,
80573 -0x00,0x11,0x05,0x00,
80574 -0x30,0x1F,0xA3,0x26,
80575 -0x21,0x10,0x43,0x00,
80576 -0x2F,0x03,0x44,0x90,
80577 -0xFC,0x21,0x00,0x08,
80578 -0x01,0x00,0x84,0x30,
80579 -0x01,0x80,0x03,0x3C,
80580 -0x25,0xB0,0x02,0x3C,
80581 -0x18,0x03,0x42,0x34,
80582 -0x94,0x88,0x63,0x24,
80583 -0x00,0x00,0x43,0xAC,
80584 -0x02,0x80,0x05,0x3C,
80585 -0xD4,0x5E,0xA5,0x8C,
80586 -0x04,0x00,0x02,0x24,
80587 -0x1E,0x00,0xA2,0x10,
80588 -0x05,0x00,0xA2,0x2C,
80589 -0x10,0x00,0x40,0x10,
80590 -0x05,0x00,0x02,0x24,
80591 -0x03,0x00,0x02,0x24,
80592 -0x08,0x00,0xA2,0x10,
80593 -0x00,0x19,0x04,0x00,
80594 -0x80,0x10,0x04,0x00,
80595 -0x21,0x10,0x44,0x00,
80596 -0xC0,0x10,0x02,0x00,
80597 -0x23,0x10,0x44,0x00,
80598 -0x00,0x11,0x02,0x00,
80599 -0x21,0x10,0x44,0x00,
80600 -0x40,0x19,0x02,0x00,
80601 -0xFF,0xFF,0x63,0x24,
80602 -0xFE,0xFF,0x60,0x14,
80603 -0x00,0x00,0x00,0x00,
80604 -0x08,0x00,0xE0,0x03,
80605 -0x00,0x00,0x00,0x00,
80606 -0xF3,0xFF,0xA2,0x10,
80607 -0x06,0x00,0x02,0x24,
80608 -0xF2,0xFF,0xA2,0x14,
80609 -0x80,0x10,0x04,0x00,
80610 -0x40,0x11,0x04,0x00,
80611 -0x23,0x10,0x44,0x00,
80612 -0x80,0x10,0x02,0x00,
80613 -0x21,0x10,0x44,0x00,
80614 -0x00,0x19,0x02,0x00,
80615 -0x23,0x18,0x62,0x00,
80616 -0x3B,0x22,0x00,0x08,
80617 -0x00,0x19,0x03,0x00,
80618 -0x80,0x10,0x04,0x00,
80619 -0x21,0x10,0x44,0x00,
80620 -0xC0,0x10,0x02,0x00,
80621 -0x23,0x10,0x44,0x00,
80622 -0x00,0x11,0x02,0x00,
80623 -0x21,0x10,0x44,0x00,
80624 -0x3B,0x22,0x00,0x08,
80625 -0x00,0x19,0x02,0x00,
80626 -0x01,0x80,0x03,0x3C,
80627 -0x25,0xB0,0x02,0x3C,
80628 -0x50,0x89,0x63,0x24,
80629 -0x18,0x03,0x42,0x34,
80630 -0x00,0x00,0x43,0xAC,
80631 -0x02,0x80,0x05,0x3C,
80632 -0xD4,0x5E,0xA3,0x8C,
80633 -0x05,0x00,0x02,0x24,
80634 -0x06,0x00,0x62,0x10,
80635 -0x06,0x00,0x62,0x2C,
80636 -0x0C,0x00,0x40,0x10,
80637 -0x06,0x00,0x02,0x24,
80638 -0x04,0x00,0x02,0x24,
80639 -0x0E,0x00,0x62,0x10,
80640 -0x80,0x10,0x04,0x00,
80641 -0x80,0x10,0x04,0x00,
80642 -0x21,0x10,0x44,0x00,
80643 -0x80,0x10,0x02,0x00,
80644 -0xFF,0xFF,0x42,0x24,
80645 -0xFE,0xFF,0x40,0x14,
80646 -0x00,0x00,0x00,0x00,
80647 -0x08,0x00,0xE0,0x03,
80648 -0x00,0x00,0x00,0x00,
80649 -0xF7,0xFF,0x62,0x14,
80650 -0x00,0x11,0x04,0x00,
80651 -0x23,0x10,0x44,0x00,
80652 -0x66,0x22,0x00,0x08,
80653 -0x40,0x10,0x02,0x00,
80654 -0x21,0x10,0x44,0x00,
80655 -0x66,0x22,0x00,0x08,
80656 -0x40,0x10,0x02,0x00,
80657 -0xFF,0xFF,0x85,0x30,
80658 -0x21,0x30,0x00,0x00,
80659 -0x25,0xB0,0x03,0x3C,
80660 -0x2A,0xB0,0x04,0x3C,
80661 -0xB4,0x00,0x63,0x34,
80662 -0x01,0x00,0xA2,0x24,
80663 -0x31,0x00,0x84,0x34,
80664 -0x00,0x00,0x65,0xA0,
80665 -0x00,0x00,0x85,0xA0,
80666 -0xFF,0xFF,0x45,0x30,
80667 -0x12,0x00,0xA0,0x10,
80668 -0x01,0x00,0x03,0x24,
80669 -0x28,0xB0,0x07,0x3C,
80670 -0x88,0x22,0x00,0x08,
80671 -0xFF,0xFF,0x08,0x24,
80672 -0x00,0x00,0x83,0xA0,
80673 -0x01,0x00,0x63,0x24,
80674 -0xFF,0xFF,0x63,0x30,
80675 -0x2B,0x10,0xA3,0x00,
80676 -0x09,0x00,0x40,0x14,
80677 -0x08,0x00,0xC6,0x24,
80678 -0xF9,0xFF,0x65,0x14,
80679 -0x21,0x20,0xC7,0x00,
80680 -0x01,0x00,0x63,0x24,
80681 -0xFF,0xFF,0x63,0x30,
80682 -0x2B,0x10,0xA3,0x00,
80683 -0x00,0x00,0x88,0xA0,
80684 -0xF9,0xFF,0x40,0x10,
80685 -0x08,0x00,0xC6,0x24,
80686 -0x00,0x01,0xA2,0x2C,
80687 -0x13,0x00,0x40,0x10,
80688 -0x21,0x18,0xA0,0x00,
80689 -0xFF,0x00,0x08,0x24,
80690 -0x28,0xB0,0x07,0x3C,
80691 -0x9C,0x22,0x00,0x08,
80692 -0xFF,0xFF,0x09,0x24,
80693 -0xFF,0xFF,0x43,0x30,
80694 -0x00,0x00,0xA2,0xA0,
80695 -0x00,0x01,0x62,0x2C,
80696 -0x0A,0x00,0x40,0x10,
80697 -0x08,0x00,0xC6,0x24,
80698 -0x01,0x00,0x62,0x24,
80699 -0xF9,0xFF,0x68,0x14,
80700 -0x21,0x28,0xC7,0x00,
80701 -0x00,0x01,0x02,0x24,
80702 -0xFF,0xFF,0x43,0x30,
80703 -0x00,0x01,0x62,0x2C,
80704 -0x00,0x00,0xA9,0xA0,
80705 -0xF8,0xFF,0x40,0x14,
80706 -0x08,0x00,0xC6,0x24,
80707 -0x08,0x00,0xE0,0x03,
80708 -0x00,0x00,0x00,0x00,
80709 -0xD0,0xFF,0xBD,0x27,
80710 -0x2C,0x00,0xBF,0xAF,
80711 -0x28,0x00,0xB6,0xAF,
80712 -0x24,0x00,0xB5,0xAF,
80713 -0x20,0x00,0xB4,0xAF,
80714 -0x1C,0x00,0xB3,0xAF,
80715 -0x18,0x00,0xB2,0xAF,
80716 -0x14,0x00,0xB1,0xAF,
80717 -0x10,0x00,0xB0,0xAF,
80718 -0x00,0x60,0x01,0x40,
80719 -0x01,0x00,0x21,0x34,
80720 -0x01,0x00,0x21,0x38,
80721 -0x00,0x60,0x81,0x40,
80722 -0x25,0xB0,0x10,0x3C,
80723 -0x40,0x00,0x03,0x36,
80724 -0x00,0x00,0x60,0xA4,
80725 -0xA8,0x00,0x13,0x36,
80726 -0xA0,0x00,0x12,0x36,
80727 -0xA4,0x00,0x10,0x36,
80728 -0x00,0x00,0x55,0x8E,
80729 -0x00,0x00,0x16,0x8E,
80730 -0x00,0x00,0x71,0x8E,
80731 -0x00,0x80,0x14,0x3C,
80732 -0xFC,0x37,0x02,0x24,
80733 -0x00,0x00,0x40,0xAE,
80734 -0xFD,0x00,0x04,0x24,
80735 -0x00,0x00,0x00,0xAE,
80736 -0x21,0x88,0x34,0x02,
80737 -0x00,0x00,0x74,0xAE,
80738 -0x00,0x00,0x62,0xA4,
80739 -0x73,0x22,0x00,0x0C,
80740 -0x00,0x00,0x00,0x00,
80741 -0x00,0x00,0x55,0xAE,
80742 -0x00,0x00,0x16,0xAE,
80743 -0x00,0x00,0x71,0xAE,
80744 -0x00,0x60,0x01,0x40,
80745 -0x01,0x00,0x21,0x34,
80746 -0x00,0x60,0x81,0x40,
80747 -0x2C,0x00,0xBF,0x8F,
80748 -0x28,0x00,0xB6,0x8F,
80749 -0x24,0x00,0xB5,0x8F,
80750 -0x20,0x00,0xB4,0x8F,
80751 -0x1C,0x00,0xB3,0x8F,
80752 -0x18,0x00,0xB2,0x8F,
80753 -0x14,0x00,0xB1,0x8F,
80754 -0x10,0x00,0xB0,0x8F,
80755 -0x08,0x00,0xE0,0x03,
80756 -0x30,0x00,0xBD,0x27,
80757 -0xD0,0xFF,0xBD,0x27,
80758 -0x2C,0x00,0xBF,0xAF,
80759 -0x28,0x00,0xB6,0xAF,
80760 -0x24,0x00,0xB5,0xAF,
80761 -0x20,0x00,0xB4,0xAF,
80762 -0x1C,0x00,0xB3,0xAF,
80763 -0x18,0x00,0xB2,0xAF,
80764 -0x14,0x00,0xB1,0xAF,
80765 -0x10,0x00,0xB0,0xAF,
80766 -0x00,0x60,0x01,0x40,
80767 -0x01,0x00,0x21,0x34,
80768 -0x01,0x00,0x21,0x38,
80769 -0x00,0x60,0x81,0x40,
80770 -0x25,0xB0,0x10,0x3C,
80771 -0x40,0x00,0x05,0x36,
80772 -0x00,0x00,0xA2,0x94,
80773 -0x24,0xFA,0x03,0x24,
80774 -0xA8,0x00,0x13,0x36,
80775 -0x24,0x10,0x43,0x00,
80776 -0x00,0x00,0xA2,0xA4,
80777 -0xA0,0x00,0x12,0x36,
80778 -0xA4,0x00,0x10,0x36,
80779 -0x00,0x00,0x55,0x8E,
80780 -0x00,0x00,0x16,0x8E,
80781 -0x00,0x00,0x71,0x8E,
80782 -0x00,0x80,0x14,0x3C,
80783 -0xFC,0x37,0x02,0x24,
80784 -0x00,0x00,0x40,0xAE,
80785 -0xFD,0x00,0x04,0x24,
80786 -0x00,0x00,0x00,0xAE,
80787 -0x21,0x88,0x34,0x02,
80788 -0x00,0x00,0x74,0xAE,
80789 -0x00,0x00,0xA2,0xA4,
80790 -0x73,0x22,0x00,0x0C,
80791 -0x00,0x00,0x00,0x00,
80792 -0x00,0x00,0x55,0xAE,
80793 -0x00,0x00,0x16,0xAE,
80794 -0x00,0x00,0x71,0xAE,
80795 -0x00,0x60,0x01,0x40,
80796 -0x01,0x00,0x21,0x34,
80797 -0x00,0x60,0x81,0x40,
80798 -0x2C,0x00,0xBF,0x8F,
80799 -0x28,0x00,0xB6,0x8F,
80800 -0x24,0x00,0xB5,0x8F,
80801 -0x20,0x00,0xB4,0x8F,
80802 -0x1C,0x00,0xB3,0x8F,
80803 -0x18,0x00,0xB2,0x8F,
80804 -0x14,0x00,0xB1,0x8F,
80805 -0x10,0x00,0xB0,0x8F,
80806 -0x08,0x00,0xE0,0x03,
80807 -0x30,0x00,0xBD,0x27,
80808 -0xD0,0xFF,0xBD,0x27,
80809 -0x2C,0x00,0xBF,0xAF,
80810 -0x28,0x00,0xB6,0xAF,
80811 -0x24,0x00,0xB5,0xAF,
80812 -0x20,0x00,0xB4,0xAF,
80813 -0x1C,0x00,0xB3,0xAF,
80814 -0x18,0x00,0xB2,0xAF,
80815 -0x14,0x00,0xB1,0xAF,
80816 -0x10,0x00,0xB0,0xAF,
80817 -0x00,0x60,0x01,0x40,
80818 -0x01,0x00,0x21,0x34,
80819 -0x01,0x00,0x21,0x38,
80820 -0x00,0x60,0x81,0x40,
80821 -0x25,0xB0,0x10,0x3C,
80822 -0x40,0x00,0x05,0x36,
80823 -0x00,0x00,0xA2,0x94,
80824 -0xAF,0xFF,0x03,0x24,
80825 -0xA8,0x00,0x13,0x36,
80826 -0x24,0x10,0x43,0x00,
80827 -0x00,0x00,0xA2,0xA4,
80828 -0xA0,0x00,0x12,0x36,
80829 -0xA4,0x00,0x10,0x36,
80830 -0x00,0x00,0x55,0x8E,
80831 -0x00,0x00,0x16,0x8E,
80832 -0x00,0x00,0x71,0x8E,
80833 -0x00,0x80,0x14,0x3C,
80834 -0xFC,0x37,0x02,0x24,
80835 -0x00,0x00,0x40,0xAE,
80836 -0xFD,0x00,0x04,0x24,
80837 -0x00,0x00,0x00,0xAE,
80838 -0x21,0x88,0x34,0x02,
80839 -0x00,0x00,0x74,0xAE,
80840 -0x00,0x00,0xA2,0xA4,
80841 -0x73,0x22,0x00,0x0C,
80842 -0x00,0x00,0x00,0x00,
80843 -0x00,0x00,0x55,0xAE,
80844 -0x00,0x00,0x16,0xAE,
80845 -0x00,0x00,0x71,0xAE,
80846 -0x00,0x60,0x01,0x40,
80847 -0x01,0x00,0x21,0x34,
80848 -0x00,0x60,0x81,0x40,
80849 -0x2C,0x00,0xBF,0x8F,
80850 -0x28,0x00,0xB6,0x8F,
80851 -0x24,0x00,0xB5,0x8F,
80852 -0x20,0x00,0xB4,0x8F,
80853 -0x1C,0x00,0xB3,0x8F,
80854 -0x18,0x00,0xB2,0x8F,
80855 -0x14,0x00,0xB1,0x8F,
80856 -0x10,0x00,0xB0,0x8F,
80857 -0x08,0x00,0xE0,0x03,
80858 -0x30,0x00,0xBD,0x27,
80859 -0x00,0x60,0x01,0x40,
80860 -0x01,0x00,0x21,0x34,
80861 -0x01,0x00,0x21,0x38,
80862 -0x00,0x60,0x81,0x40,
80863 -0x25,0xB0,0x04,0x3C,
80864 -0x40,0x00,0x84,0x34,
80865 -0x00,0x00,0x82,0x94,
80866 -0xD8,0xFD,0x03,0x24,
80867 -0x24,0x10,0x43,0x00,
80868 -0xFC,0x37,0x03,0x24,
80869 -0x00,0x00,0x82,0xA4,
80870 -0x00,0x00,0x83,0xA4,
80871 -0x00,0x60,0x01,0x40,
80872 -0x01,0x00,0x21,0x34,
80873 -0x00,0x60,0x81,0x40,
80874 -0x08,0x00,0xE0,0x03,
80875 -0x00,0x00,0x00,0x00,
80876 -0xFF,0x00,0x84,0x30,
80877 -0xFF,0xFF,0xAC,0x30,
80878 -0xC0,0x48,0x04,0x00,
80879 -0x00,0x60,0x0E,0x40,
80880 -0x01,0x00,0xC1,0x35,
80881 -0x01,0x00,0x21,0x38,
80882 -0x00,0x60,0x81,0x40,
80883 -0x25,0xB0,0x02,0x3C,
80884 -0x40,0x02,0x4D,0x34,
80885 -0xF8,0xFF,0xE7,0x24,
80886 -0x21,0x40,0x00,0x00,
80887 -0x01,0x00,0x0F,0x24,
80888 -0x44,0x02,0x4B,0x34,
80889 -0x72,0x23,0x00,0x08,
80890 -0x01,0x80,0x0A,0x3C,
80891 -0x28,0x00,0x0F,0x11,
80892 -0x00,0x00,0x00,0x00,
80893 -0x01,0x00,0xE2,0x90,
80894 -0x00,0x00,0xE4,0x90,
80895 -0x02,0x00,0xE3,0x90,
80896 -0x03,0x00,0xE5,0x90,
80897 -0x00,0x12,0x02,0x00,
80898 -0x25,0x20,0x82,0x00,
80899 -0x00,0x1C,0x03,0x00,
80900 -0x25,0x20,0x83,0x00,
80901 -0x21,0x10,0x28,0x01,
80902 -0x00,0x2E,0x05,0x00,
80903 -0x01,0x00,0x08,0x25,
80904 -0x25,0x20,0x85,0x00,
80905 -0x25,0x10,0x4A,0x00,
80906 -0x06,0x00,0x03,0x2D,
80907 -0x00,0x00,0x64,0xAD,
80908 -0x04,0x00,0xE7,0x24,
80909 -0x00,0x00,0xA2,0xAD,
80910 -0x12,0x00,0x60,0x10,
80911 -0x00,0x00,0x00,0x00,
80912 -0xEA,0xFF,0x00,0x15,
80913 -0x00,0x00,0x00,0x00,
80914 -0x00,0x00,0xC2,0x90,
80915 -0x01,0x00,0xC3,0x90,
80916 -0x04,0x00,0xE7,0x24,
80917 -0x00,0x14,0x02,0x00,
80918 -0x25,0x10,0x82,0x01,
80919 -0x00,0x1E,0x03,0x00,
80920 -0x25,0x20,0x43,0x00,
80921 -0x21,0x10,0x28,0x01,
80922 -0x01,0x00,0x08,0x25,
80923 -0x25,0x10,0x4A,0x00,
80924 -0x06,0x00,0x03,0x2D,
80925 -0x00,0x00,0x64,0xAD,
80926 -0x00,0x00,0xA2,0xAD,
80927 -0xF0,0xFF,0x60,0x14,
80928 -0x00,0x00,0x00,0x00,
80929 -0x00,0x60,0x8E,0x40,
80930 -0x08,0x00,0xE0,0x03,
80931 -0x00,0x00,0x00,0x00,
80932 -0x03,0x00,0xC2,0x90,
80933 -0x02,0x00,0xC4,0x90,
80934 -0x04,0x00,0xC3,0x90,
80935 -0x05,0x00,0xC5,0x90,
80936 -0x64,0x23,0x00,0x08,
80937 -0x00,0x12,0x02,0x00,
80938 -0xFF,0xFF,0x84,0x30,
80939 -0x42,0xB0,0x08,0x3C,
80940 -0x80,0x10,0x04,0x00,
80941 -0x21,0x10,0x48,0x00,
80942 -0x04,0x00,0x46,0xAC,
80943 -0x00,0x00,0x07,0x91,
80944 -0x40,0x18,0x04,0x00,
80945 -0x03,0x00,0x06,0x24,
80946 -0xFF,0x00,0xE7,0x30,
80947 -0x04,0x30,0x66,0x00,
80948 -0x01,0x00,0x02,0x24,
80949 -0x04,0x10,0x62,0x00,
80950 -0x25,0x30,0xC7,0x00,
80951 -0xFF,0xFF,0xA5,0x30,
80952 -0x25,0x10,0x47,0x00,
80953 -0x02,0x00,0xA0,0x14,
80954 -0xFF,0x00,0xC7,0x30,
80955 -0xFF,0x00,0x47,0x30,
80956 -0x42,0xB0,0x02,0x3C,
80957 -0x00,0x00,0x47,0xA0,
80958 -0x08,0x00,0xE0,0x03,
80959 -0x00,0x00,0x00,0x00,
80960 -0x14,0x00,0x83,0x90,
80961 -0x01,0x00,0x02,0x24,
80962 -0x08,0x00,0x86,0xAC,
80963 -0x18,0x00,0x85,0xAC,
80964 -0x00,0x00,0x84,0xAC,
80965 -0x03,0x00,0x62,0x10,
80966 -0x04,0x00,0x84,0xAC,
80967 -0x99,0x59,0x00,0x08,
80968 -0x0C,0x00,0x80,0xAC,
80969 -0x0C,0x00,0x82,0x8C,
80970 -0x99,0x59,0x00,0x08,
80971 -0x10,0x00,0x82,0xAC,
80972 -0xC8,0xFF,0xBD,0x27,
80973 -0x28,0x00,0xB6,0xAF,
80974 -0x25,0xB0,0x02,0x3C,
80975 -0x02,0x80,0x16,0x3C,
80976 -0x2C,0x00,0xB7,0xAF,
80977 -0x24,0x00,0xB5,0xAF,
80978 -0x20,0x00,0xB4,0xAF,
80979 -0x1C,0x00,0xB3,0xAF,
80980 -0x18,0x00,0xB2,0xAF,
80981 -0x30,0x00,0xBF,0xAF,
80982 -0x14,0x00,0xB1,0xAF,
80983 -0x10,0x00,0xB0,0xAF,
80984 -0x18,0x03,0x55,0x34,
80985 -0x01,0x80,0x17,0x3C,
80986 -0x02,0x80,0x13,0x3C,
80987 -0x02,0x80,0x14,0x3C,
80988 -0x08,0xE4,0xD2,0x26,
80989 -0xB8,0x8E,0xE2,0x26,
80990 -0x00,0x00,0xA2,0xAE,
80991 -0x08,0xE4,0xD0,0x8E,
80992 -0x00,0x60,0x01,0x40,
80993 -0x01,0x00,0x21,0x34,
80994 -0x01,0x00,0x21,0x38,
80995 -0x00,0x60,0x81,0x40,
80996 -0x14,0x5E,0x71,0x8E,
80997 -0x00,0x00,0x00,0x00,
80998 -0x25,0x00,0x20,0x12,
80999 -0x00,0x00,0x00,0x00,
81000 -0x14,0x5E,0x60,0xAE,
81001 -0x00,0x60,0x01,0x40,
81002 -0x01,0x00,0x21,0x34,
81003 -0x00,0x60,0x81,0x40,
81004 -0x23,0x00,0x12,0x12,
81005 -0x08,0x0C,0x84,0x26,
81006 -0x14,0x00,0x03,0x92,
81007 -0x01,0x00,0x02,0x24,
81008 -0x2B,0x00,0x62,0x10,
81009 -0x00,0x00,0x00,0x00,
81010 -0x0A,0x00,0x60,0x14,
81011 -0x02,0x00,0x02,0x24,
81012 -0x0C,0x00,0x03,0x8E,
81013 -0x00,0x00,0x00,0x00,
81014 -0x2B,0x10,0x23,0x02,
81015 -0x1E,0x00,0x40,0x10,
81016 -0x23,0x10,0x71,0x00,
81017 -0x0C,0x00,0x02,0xAE,
81018 -0x00,0x00,0x10,0x8E,
81019 -0xCE,0x23,0x00,0x08,
81020 -0x00,0x00,0x00,0x00,
81021 -0xFC,0xFF,0x62,0x14,
81022 -0x00,0x00,0x00,0x00,
81023 -0x0C,0x00,0x03,0x8E,
81024 -0x00,0x00,0x00,0x00,
81025 -0xF8,0xFF,0x60,0x10,
81026 -0x2B,0x10,0x23,0x02,
81027 -0xF5,0xFF,0x40,0x14,
81028 -0x23,0x10,0x71,0x00,
81029 -0x08,0x00,0x02,0x8E,
81030 -0x18,0x00,0x04,0x8E,
81031 -0x09,0xF8,0x40,0x00,
81032 -0x0C,0x00,0x00,0xAE,
81033 -0x00,0x00,0x10,0x8E,
81034 -0xCE,0x23,0x00,0x08,
81035 -0x00,0x00,0x00,0x00,
81036 -0x00,0x60,0x01,0x40,
81037 -0x01,0x00,0x21,0x34,
81038 -0x00,0x60,0x81,0x40,
81039 -0x08,0x0C,0x84,0x26,
81040 -0x21,0x28,0x00,0x00,
81041 -0x21,0x30,0x00,0x00,
81042 -0x91,0x3C,0x00,0x0C,
81043 -0x21,0x38,0x00,0x00,
81044 -0xC0,0x23,0x00,0x08,
81045 -0xB8,0x8E,0xE2,0x26,
81046 -0x08,0x00,0x02,0x8E,
81047 -0x18,0x00,0x04,0x8E,
81048 -0x09,0xF8,0x40,0x00,
81049 -0x00,0x00,0x00,0x00,
81050 -0xDC,0x23,0x00,0x08,
81051 -0x0C,0x00,0x02,0xAE,
81052 -0x0C,0x00,0x03,0x8E,
81053 -0x00,0x00,0x00,0x00,
81054 -0x2B,0x10,0x23,0x02,
81055 -0xD9,0xFF,0x40,0x14,
81056 -0x23,0x10,0x71,0x00,
81057 -0x08,0x00,0x02,0x8E,
81058 -0x18,0x00,0x04,0x8E,
81059 -0x09,0xF8,0x40,0x00,
81060 -0x00,0x00,0x00,0x00,
81061 -0x10,0x00,0x03,0x8E,
81062 -0x00,0x00,0x00,0x00,
81063 -0x0C,0x00,0x03,0xAE,
81064 -0x00,0x00,0x10,0x8E,
81065 -0xCE,0x23,0x00,0x08,
81066 -0x00,0x00,0x00,0x00,
81067 -0x02,0x80,0x02,0x3C,
81068 -0x9C,0x57,0x42,0x24,
81069 -0xC0,0x20,0x04,0x00,
81070 -0x21,0x20,0x82,0x00,
81071 -0x21,0x28,0x00,0x00,
81072 -0x00,0x60,0x06,0x40,
81073 -0x01,0x00,0xC1,0x34,
81074 -0x01,0x00,0x21,0x38,
81075 -0x00,0x60,0x81,0x40,
81076 -0x00,0x00,0x82,0x8C,
81077 -0x00,0x00,0x00,0x00,
81078 -0x09,0x00,0x44,0x10,
81079 -0x00,0x00,0x00,0x00,
81080 -0x04,0x00,0x43,0x8C,
81081 -0x21,0x28,0x40,0x00,
81082 -0x00,0x00,0x42,0x8C,
81083 -0x00,0x00,0x00,0x00,
81084 -0x00,0x00,0x62,0xAC,
81085 -0x04,0x00,0x43,0xAC,
81086 -0x00,0x00,0xA5,0xAC,
81087 -0x04,0x00,0xA5,0xAC,
81088 -0x00,0x60,0x86,0x40,
81089 -0x08,0x00,0xE0,0x03,
81090 -0x21,0x10,0xA0,0x00,
81091 -0x21,0x18,0x80,0x00,
81092 -0xE8,0xFF,0xBD,0x27,
81093 -0x01,0x01,0x62,0x2C,
81094 -0x10,0x00,0xBF,0xAF,
81095 -0x01,0x00,0x04,0x24,
81096 -0x01,0x02,0x65,0x2C,
81097 -0x0A,0x00,0x40,0x14,
81098 -0x21,0x30,0x00,0x00,
81099 -0x02,0x00,0x04,0x24,
81100 -0x07,0x00,0xA0,0x14,
81101 -0x01,0x08,0x62,0x2C,
81102 -0x05,0x00,0x40,0x14,
81103 -0x03,0x00,0x04,0x24,
81104 -0x10,0x00,0xBF,0x8F,
81105 -0x21,0x10,0xC0,0x00,
81106 -0x08,0x00,0xE0,0x03,
81107 -0x18,0x00,0xBD,0x27,
81108 -0x0D,0x24,0x00,0x0C,
81109 -0x00,0x00,0x00,0x00,
81110 -0x10,0x00,0xBF,0x8F,
81111 -0x21,0x30,0x40,0x00,
81112 -0x21,0x10,0xC0,0x00,
81113 -0x08,0x00,0xE0,0x03,
81114 -0x18,0x00,0xBD,0x27,
81115 -0x00,0x60,0x06,0x40,
81116 -0x01,0x00,0xC1,0x34,
81117 -0x01,0x00,0x21,0x38,
81118 -0x00,0x60,0x81,0x40,
81119 -0x10,0x00,0x83,0x8C,
81120 -0x02,0x80,0x02,0x3C,
81121 -0x9C,0x57,0x42,0x24,
81122 -0xC0,0x18,0x03,0x00,
81123 -0x21,0x18,0x62,0x00,
81124 -0x00,0x00,0x65,0x8C,
81125 -0x02,0x80,0x07,0x3C,
81126 -0x02,0x80,0x08,0x3C,
81127 -0x00,0x00,0x85,0xAC,
81128 -0x04,0x00,0xA4,0xAC,
81129 -0x04,0x00,0x83,0xAC,
81130 -0xD0,0x5E,0xE5,0x8C,
81131 -0x00,0x00,0x00,0x00,
81132 -0x05,0x00,0xA0,0x10,
81133 -0x00,0x00,0x64,0xAC,
81134 -0xBC,0x5E,0x02,0x8D,
81135 -0xD0,0x5E,0xE0,0xAC,
81136 -0x25,0x10,0x45,0x00,
81137 -0xBC,0x5E,0x02,0xAD,
81138 -0x00,0x60,0x86,0x40,
81139 -0x08,0x00,0xE0,0x03,
81140 -0x00,0x00,0x00,0x00,
81141 -0xFF,0x00,0xA5,0x30,
81142 -0x25,0xB0,0x02,0x3C,
81143 -0x21,0x28,0xA2,0x00,
81144 -0xFF,0x00,0x84,0x30,
81145 -0x60,0x01,0xA4,0xA0,
81146 -0x08,0x00,0xE0,0x03,
81147 -0x00,0x00,0x00,0x00,
81148 -0xFF,0x00,0x84,0x30,
81149 -0x01,0x00,0x03,0x24,
81150 -0x10,0x00,0x02,0x3C,
81151 -0x04,0x18,0x83,0x00,
81152 -0xF0,0x70,0x42,0x34,
81153 -0x15,0x00,0x84,0x2C,
81154 -0x06,0x00,0x80,0x10,
81155 -0x24,0x28,0x62,0x00,
81156 -0x0F,0x00,0x63,0x30,
81157 -0x04,0x00,0xA0,0x14,
81158 -0x01,0x00,0x02,0x24,
81159 -0x02,0x00,0x60,0x14,
81160 -0x02,0x00,0x02,0x24,
81161 -0x21,0x10,0x00,0x00,
81162 -0x08,0x00,0xE0,0x03,
81163 -0x00,0x00,0x00,0x00,
81164 -0xFF,0x00,0xA5,0x30,
81165 -0x04,0x00,0xA2,0x2C,
81166 -0x14,0x00,0x40,0x10,
81167 -0xFF,0x00,0x84,0x30,
81168 -0x02,0x80,0x03,0x3C,
81169 -0xDE,0x5D,0x62,0x90,
81170 -0x00,0x00,0x00,0x00,
81171 -0xEF,0xFF,0x42,0x24,
81172 -0xFF,0x00,0x42,0x30,
81173 -0x02,0x00,0x42,0x2C,
81174 -0x0E,0x00,0x40,0x10,
81175 -0x02,0x00,0x03,0x24,
81176 -0x24,0x00,0x83,0x10,
81177 -0x0F,0x10,0x02,0x3C,
81178 -0x03,0x00,0x82,0x28,
81179 -0x14,0x00,0x40,0x10,
81180 -0x03,0x00,0x02,0x24,
81181 -0x01,0x00,0x02,0x24,
81182 -0x2F,0x00,0x82,0x10,
81183 -0x00,0x00,0x00,0x00,
81184 -0xFF,0x1F,0x02,0x3C,
81185 -0x08,0x00,0xE0,0x03,
81186 -0xFF,0xFF,0x42,0x34,
81187 -0x08,0x00,0xE0,0x03,
81188 -0x00,0x00,0x00,0x00,
81189 -0x35,0x00,0x83,0x10,
81190 -0x0F,0x1F,0x02,0x3C,
81191 -0x03,0x00,0x82,0x28,
81192 -0x16,0x00,0x40,0x10,
81193 -0x03,0x00,0x02,0x24,
81194 -0x01,0x00,0x02,0x24,
81195 -0xF4,0xFF,0x82,0x14,
81196 -0x00,0x00,0x00,0x00,
81197 -0x0F,0x1F,0x02,0x3C,
81198 -0x08,0x00,0xE0,0x03,
81199 -0x00,0x80,0x42,0x34,
81200 -0xF0,0xFF,0x82,0x14,
81201 -0xFF,0x1F,0x02,0x3C,
81202 -0x01,0x00,0x02,0x24,
81203 -0x29,0x00,0xA2,0x10,
81204 -0x0F,0x10,0x02,0x3C,
81205 -0x02,0x00,0xA2,0x28,
81206 -0x1F,0x00,0x40,0x14,
81207 -0x00,0x00,0x00,0x00,
81208 -0x28,0x00,0xA3,0x10,
81209 -0x00,0x00,0x00,0x00,
81210 -0xE5,0xFF,0xA4,0x14,
81211 -0x00,0x00,0x00,0x00,
81212 -0x0F,0x10,0x02,0x3C,
81213 -0x08,0x00,0xE0,0x03,
81214 -0x00,0xF0,0x42,0x34,
81215 -0xE1,0xFF,0x82,0x14,
81216 -0xFF,0x1F,0x02,0x3C,
81217 -0x01,0x00,0x02,0x24,
81218 -0x1C,0x00,0xA2,0x10,
81219 -0x0F,0x00,0x02,0x3C,
81220 -0x02,0x00,0xA2,0x28,
81221 -0x0B,0x00,0x40,0x14,
81222 -0x00,0x00,0x00,0x00,
81223 -0x1C,0x00,0xA3,0x10,
81224 -0x00,0x00,0x00,0x00,
81225 -0xD6,0xFF,0xA4,0x14,
81226 -0x00,0x00,0x00,0x00,
81227 -0x0F,0x00,0x02,0x3C,
81228 -0x08,0x00,0xE0,0x03,
81229 -0x00,0xF0,0x42,0x34,
81230 -0x0F,0x10,0x02,0x3C,
81231 -0x08,0x00,0xE0,0x03,
81232 -0x00,0x80,0x42,0x34,
81233 -0xCE,0xFF,0xA0,0x14,
81234 -0x00,0x00,0x00,0x00,
81235 -0x0F,0x00,0x02,0x3C,
81236 -0x08,0x00,0xE0,0x03,
81237 -0x15,0xF0,0x42,0x34,
81238 -0xC9,0xFF,0xA0,0x14,
81239 -0x00,0x00,0x00,0x00,
81240 -0x0F,0x10,0x02,0x3C,
81241 -0x08,0x00,0xE0,0x03,
81242 -0x15,0xF0,0x42,0x34,
81243 -0x08,0x00,0xE0,0x03,
81244 -0x00,0xF0,0x42,0x34,
81245 -0x08,0x00,0xE0,0x03,
81246 -0x10,0xF0,0x42,0x34,
81247 -0x08,0x00,0xE0,0x03,
81248 -0x10,0xF0,0x42,0x34,
81249 -0x0F,0x10,0x02,0x3C,
81250 -0x08,0x00,0xE0,0x03,
81251 -0x05,0xF0,0x42,0x34,
81252 -0x0F,0x00,0x02,0x3C,
81253 -0x08,0x00,0xE0,0x03,
81254 -0x05,0xF0,0x42,0x34,
81255 -0xC0,0x40,0x04,0x00,
81256 -0x21,0x18,0x04,0x01,
81257 -0x80,0x18,0x03,0x00,
81258 -0x21,0x18,0x64,0x00,
81259 -0x02,0x80,0x02,0x3C,
81260 -0x80,0x18,0x03,0x00,
81261 -0x30,0x1F,0x42,0x24,
81262 -0x21,0x18,0x62,0x00,
81263 -0x18,0x24,0x66,0x8C,
81264 -0x21,0x38,0x60,0x00,
81265 -0x1E,0x24,0x60,0xA0,
81266 -0x1F,0x24,0x60,0xA0,
81267 -0x1C,0x00,0x05,0x24,
81268 -0xDA,0x24,0x00,0x08,
81269 -0x01,0x00,0x03,0x24,
81270 -0x08,0x00,0xA0,0x04,
81271 -0x21,0x10,0x04,0x01,
81272 -0x04,0x10,0xA3,0x00,
81273 -0x24,0x10,0xC2,0x00,
81274 -0xFB,0xFF,0x40,0x10,
81275 -0xFF,0xFF,0xA5,0x24,
81276 -0x01,0x00,0xA5,0x24,
81277 -0x1E,0x24,0xE5,0xA0,
81278 -0x21,0x10,0x04,0x01,
81279 -0x80,0x10,0x02,0x00,
81280 -0x21,0x10,0x44,0x00,
81281 -0x02,0x80,0x03,0x3C,
81282 -0x80,0x10,0x02,0x00,
81283 -0x30,0x1F,0x63,0x24,
81284 -0x21,0x18,0x43,0x00,
81285 -0x18,0x24,0x66,0x8C,
81286 -0x21,0x28,0x00,0x00,
81287 -0xEE,0x24,0x00,0x08,
81288 -0x01,0x00,0x07,0x24,
81289 -0x1D,0x00,0xA2,0x28,
81290 -0x08,0x00,0x40,0x10,
81291 -0x00,0x00,0x00,0x00,
81292 -0x04,0x10,0xA7,0x00,
81293 -0x24,0x10,0xC2,0x00,
81294 -0xFA,0xFF,0x40,0x10,
81295 -0x01,0x00,0xA5,0x24,
81296 -0xFF,0xFF,0xA5,0x24,
81297 -0x08,0x00,0xE0,0x03,
81298 -0x1F,0x24,0x65,0xA0,
81299 -0x08,0x00,0xE0,0x03,
81300 -0x00,0x00,0x00,0x00,
81301 -0xD8,0xFF,0xBD,0x27,
81302 -0x02,0x80,0x02,0x3C,
81303 -0x20,0x00,0xB4,0xAF,
81304 -0x1C,0x00,0xB3,0xAF,
81305 -0x14,0x00,0xB1,0xAF,
81306 -0x10,0x00,0xB0,0xAF,
81307 -0x21,0x88,0x00,0x00,
81308 -0x30,0x1F,0x50,0x24,
81309 -0xFF,0xF1,0x14,0x24,
81310 -0x25,0xB0,0x13,0x3C,
81311 -0x24,0x00,0xBF,0xAF,
81312 -0x08,0x25,0x00,0x08,
81313 -0x18,0x00,0xB2,0xAF,
81314 -0x01,0x00,0x31,0x26,
81315 -0x20,0x00,0x22,0x2E,
81316 -0x2A,0x00,0x40,0x10,
81317 -0x94,0x00,0x10,0x26,
81318 -0x1C,0x24,0x06,0x8E,
81319 -0x01,0x00,0x03,0x24,
81320 -0x02,0x13,0x06,0x00,
81321 -0x01,0x00,0x45,0x30,
81322 -0xF7,0xFF,0xA3,0x14,
81323 -0x42,0x1A,0x06,0x00,
81324 -0x0C,0x24,0x02,0x8E,
81325 -0x07,0x00,0x64,0x30,
81326 -0x02,0x11,0x02,0x00,
81327 -0x7F,0x00,0x43,0x30,
81328 -0x27,0x00,0x85,0x10,
81329 -0x07,0x00,0xD2,0x30,
81330 -0x02,0x00,0x82,0x28,
81331 -0x31,0x00,0x40,0x14,
81332 -0x02,0x00,0x02,0x24,
81333 -0x28,0x00,0x82,0x10,
81334 -0x03,0x00,0x02,0x24,
81335 -0x31,0x00,0x82,0x10,
81336 -0x1A,0x00,0x62,0x2C,
81337 -0x1C,0x24,0x02,0x8E,
81338 -0x04,0x00,0x43,0x2E,
81339 -0x42,0x12,0x02,0x00,
81340 -0x0A,0x00,0x60,0x10,
81341 -0x07,0x00,0x44,0x30,
81342 -0x6E,0x24,0x00,0x0C,
81343 -0x21,0x28,0x40,0x02,
81344 -0x80,0x18,0x12,0x00,
81345 -0x21,0x18,0x73,0x00,
81346 -0x14,0x24,0x04,0x8E,
81347 -0x84,0x01,0x65,0x8C,
81348 -0x24,0x20,0x82,0x00,
81349 -0x24,0x28,0xA4,0x00,
81350 -0x18,0x24,0x05,0xAE,
81351 -0xC9,0x24,0x00,0x0C,
81352 -0x21,0x20,0x20,0x02,
81353 -0x21,0x10,0x33,0x02,
81354 -0x01,0x00,0x31,0x26,
81355 -0x60,0x01,0x43,0x90,
81356 -0x20,0x00,0x22,0x2E,
81357 -0xD8,0xFF,0x40,0x14,
81358 -0x94,0x00,0x10,0x26,
81359 -0x24,0x00,0xBF,0x8F,
81360 -0x20,0x00,0xB4,0x8F,
81361 -0x1C,0x00,0xB3,0x8F,
81362 -0x18,0x00,0xB2,0x8F,
81363 -0x14,0x00,0xB1,0x8F,
81364 -0x10,0x00,0xB0,0x8F,
81365 -0x21,0x10,0x00,0x00,
81366 -0x08,0x00,0xE0,0x03,
81367 -0x28,0x00,0xBD,0x27,
81368 -0x32,0x00,0x62,0x2C,
81369 -0xDF,0xFF,0x40,0x10,
81370 -0x24,0x10,0xD4,0x00,
81371 -0x00,0x04,0x42,0x34,
81372 -0x1B,0x25,0x00,0x08,
81373 -0x1C,0x24,0x02,0xAE,
81374 -0x38,0x00,0x62,0x2C,
81375 -0x0D,0x00,0x40,0x14,
81376 -0x14,0x00,0x62,0x2C,
81377 -0x24,0x10,0xD4,0x00,
81378 -0x00,0x02,0x42,0x34,
81379 -0x1B,0x25,0x00,0x08,
81380 -0x1C,0x24,0x02,0xAE,
81381 -0xD3,0xFF,0x80,0x14,
81382 -0x24,0x10,0xD4,0x00,
81383 -0x1B,0x25,0x00,0x08,
81384 -0x1C,0x24,0x02,0xAE,
81385 -0xCF,0xFF,0x40,0x14,
81386 -0x24,0x10,0xD4,0x00,
81387 -0x3E,0x25,0x00,0x08,
81388 -0x00,0x04,0x42,0x34,
81389 -0xCB,0xFF,0x40,0x10,
81390 -0x24,0x10,0xD4,0x00,
81391 -0x00,0x06,0x42,0x34,
81392 -0x1B,0x25,0x00,0x08,
81393 -0x1C,0x24,0x02,0xAE,
81394 -0x08,0x00,0xE0,0x03,
81395 -0x00,0x00,0x00,0x00,
81396 -0xE0,0xFF,0xBD,0x27,
81397 -0x10,0x00,0xB0,0xAF,
81398 -0xC0,0x80,0x04,0x00,
81399 -0x21,0x80,0x04,0x02,
81400 -0x80,0x80,0x10,0x00,
81401 -0x21,0x80,0x04,0x02,
81402 -0x02,0x80,0x02,0x3C,
81403 -0x30,0x1F,0x42,0x24,
81404 -0x80,0x80,0x10,0x00,
81405 -0x18,0x00,0xBF,0xAF,
81406 -0x14,0x00,0xB1,0xAF,
81407 -0x21,0x80,0x02,0x02,
81408 -0x1C,0x24,0x03,0x8E,
81409 -0x25,0xB0,0x02,0x3C,
81410 -0x80,0x01,0x45,0x34,
81411 -0x07,0x00,0x63,0x30,
81412 -0x80,0x18,0x03,0x00,
81413 -0x21,0x18,0x62,0x00,
81414 -0x00,0x00,0xA6,0x90,
81415 -0x14,0x24,0x05,0x8E,
81416 -0x84,0x01,0x62,0x8C,
81417 -0x21,0x88,0x80,0x00,
81418 -0x24,0x10,0x45,0x00,
81419 -0xC9,0x24,0x00,0x0C,
81420 -0x18,0x24,0x02,0xAE,
81421 -0x1E,0x24,0x04,0x92,
81422 -0xFF,0x00,0x25,0x32,
81423 -0x18,0x00,0xBF,0x8F,
81424 -0x14,0x00,0xB1,0x8F,
81425 -0x10,0x00,0xB0,0x8F,
81426 -0x57,0x24,0x00,0x08,
81427 -0x20,0x00,0xBD,0x27,
81428 -0xFF,0xFF,0x84,0x30,
81429 -0x00,0x02,0x82,0x30,
81430 -0x07,0x00,0x03,0x24,
81431 -0x0D,0x00,0x40,0x14,
81432 -0x0B,0x00,0x84,0x30,
81433 -0x0C,0x00,0x82,0x2C,
81434 -0x0A,0x00,0x40,0x10,
81435 -0x00,0x00,0x00,0x00,
81436 -0x02,0x80,0x03,0x3C,
81437 -0x80,0x10,0x04,0x00,
81438 -0x74,0xED,0x63,0x24,
81439 -0x21,0x10,0x43,0x00,
81440 -0x00,0x00,0x44,0x8C,
81441 -0x00,0x00,0x00,0x00,
81442 -0x08,0x00,0x80,0x00,
81443 -0x00,0x00,0x00,0x00,
81444 -0x07,0x00,0x03,0x24,
81445 -0x08,0x00,0xE0,0x03,
81446 -0x21,0x10,0x60,0x00,
81447 -0x06,0x00,0x03,0x24,
81448 -0x08,0x00,0xE0,0x03,
81449 -0x21,0x10,0x60,0x00,
81450 -0x05,0x00,0x03,0x24,
81451 -0x08,0x00,0xE0,0x03,
81452 -0x21,0x10,0x60,0x00,
81453 -0x04,0x00,0x03,0x24,
81454 -0x08,0x00,0xE0,0x03,
81455 -0x21,0x10,0x60,0x00,
81456 -0x03,0x00,0x03,0x24,
81457 -0x08,0x00,0xE0,0x03,
81458 -0x21,0x10,0x60,0x00,
81459 -0x02,0x00,0x03,0x24,
81460 -0x08,0x00,0xE0,0x03,
81461 -0x21,0x10,0x60,0x00,
81462 -0x01,0x00,0x03,0x24,
81463 -0x08,0x00,0xE0,0x03,
81464 -0x21,0x10,0x60,0x00,
81465 -0x21,0x18,0x00,0x00,
81466 -0x08,0x00,0xE0,0x03,
81467 -0x21,0x10,0x60,0x00,
81468 -0xA8,0xFF,0xBD,0x27,
81469 -0x02,0x80,0x02,0x3C,
81470 -0x50,0x00,0xBE,0xAF,
81471 -0x4C,0x00,0xB7,0xAF,
81472 -0x48,0x00,0xB6,0xAF,
81473 -0x44,0x00,0xB5,0xAF,
81474 -0x3C,0x00,0xB3,0xAF,
81475 -0x38,0x00,0xB2,0xAF,
81476 -0x54,0x00,0xBF,0xAF,
81477 -0x40,0x00,0xB4,0xAF,
81478 -0x34,0x00,0xB1,0xAF,
81479 -0x30,0x00,0xB0,0xAF,
81480 -0xA4,0xED,0x42,0x24,
81481 -0x00,0x00,0x54,0x8C,
81482 -0x21,0x98,0x00,0x00,
81483 -0x21,0xA8,0x00,0x00,
81484 -0x21,0xB0,0x00,0x00,
81485 -0x10,0x00,0xA0,0xAF,
81486 -0x21,0xB8,0x00,0x00,
81487 -0x14,0x00,0xA0,0xAF,
81488 -0x21,0xF0,0x00,0x00,
81489 -0x18,0x00,0xA0,0xAF,
81490 -0x1C,0x00,0xA0,0xAF,
81491 -0x20,0x00,0xA0,0xAF,
81492 -0x24,0x00,0xA0,0xAF,
81493 -0x28,0x00,0xA0,0xAF,
81494 -0x2C,0x00,0xA0,0xAF,
81495 -0x21,0x90,0x80,0x02,
81496 -0x1C,0x24,0x42,0x8E,
81497 -0x00,0x00,0x00,0x00,
81498 -0x02,0x13,0x02,0x00,
81499 -0x01,0x00,0x42,0x30,
81500 -0x68,0x00,0x40,0x10,
81501 -0x25,0xB0,0x02,0x3C,
81502 -0x21,0x10,0x62,0x02,
81503 -0x60,0x01,0x44,0x90,
81504 -0x04,0x24,0x43,0x8E,
81505 -0x00,0x24,0x46,0x8E,
81506 -0xFF,0x00,0x8B,0x30,
81507 -0x02,0x80,0x04,0x3C,
81508 -0x30,0x1F,0x84,0x24,
81509 -0x21,0x10,0x64,0x01,
81510 -0xE7,0x04,0x44,0x90,
81511 -0xCA,0x04,0x45,0x90,
81512 -0xE8,0x23,0x47,0x8E,
81513 -0x18,0x00,0x64,0x00,
81514 -0x12,0x18,0x00,0x00,
81515 -0x00,0x00,0x00,0x00,
81516 -0x00,0x00,0x00,0x00,
81517 -0x18,0x00,0xC5,0x00,
81518 -0x12,0x30,0x00,0x00,
81519 -0x21,0x30,0xC3,0x00,
81520 -0x2B,0x10,0xE6,0x00,
81521 -0x02,0x01,0x40,0x14,
81522 -0x23,0x10,0xE6,0x00,
81523 -0xE8,0x23,0x42,0xAE,
81524 -0x04,0x24,0x44,0x8E,
81525 -0x00,0x24,0x47,0x8E,
81526 -0xEC,0x23,0x48,0x8E,
81527 -0xF0,0x23,0x45,0x8E,
81528 -0xF8,0x23,0x46,0x8E,
81529 -0xFC,0x23,0x43,0x8E,
81530 -0x21,0x38,0xE4,0x00,
81531 -0x02,0x80,0x04,0x3C,
81532 -0x30,0x1F,0x84,0x24,
81533 -0x21,0x10,0x64,0x01,
81534 -0x21,0x40,0x05,0x01,
81535 -0x21,0x30,0xC3,0x00,
81536 -0x3E,0x05,0x42,0x90,
81537 -0xE8,0x23,0x4A,0x8E,
81538 -0x0C,0x00,0xE0,0x10,
81539 -0x21,0x48,0x00,0x00,
81540 -0x2B,0x48,0x47,0x00,
81541 -0x0B,0x00,0x20,0x15,
81542 -0x02,0x80,0x02,0x3C,
81543 -0x07,0x00,0x62,0x2D,
81544 -0x4B,0x01,0x40,0x14,
81545 -0xC0,0x10,0x07,0x00,
81546 -0x0C,0x00,0x02,0x24,
81547 -0x47,0x01,0x62,0x11,
81548 -0x0D,0x00,0x02,0x24,
81549 -0x46,0x01,0x62,0x11,
81550 -0xC0,0x10,0x07,0x00,
81551 -0x6C,0x00,0x20,0x11,
81552 -0x02,0x80,0x02,0x3C,
81553 -0x30,0x1F,0x42,0x24,
81554 -0x80,0x18,0x0B,0x00,
81555 -0x21,0x18,0x62,0x00,
81556 -0x21,0x20,0x4B,0x02,
81557 -0x5A,0x24,0x85,0x90,
81558 -0x60,0x05,0x62,0x8C,
81559 -0x00,0x00,0x00,0x00,
81560 -0x04,0x10,0xA2,0x00,
81561 -0x2B,0x10,0x4A,0x00,
81562 -0x61,0x00,0x40,0x10,
81563 -0x00,0x00,0x00,0x00,
81564 -0x78,0x24,0x42,0x8E,
81565 -0x01,0x00,0x07,0x24,
81566 -0x04,0x18,0x67,0x01,
81567 -0x24,0x10,0x43,0x00,
81568 -0xE1,0x00,0x40,0x10,
81569 -0x1C,0x00,0x62,0x2D,
81570 -0x21,0x28,0x4B,0x02,
81571 -0x20,0x24,0xA6,0x90,
81572 -0x5A,0x24,0xA2,0x90,
81573 -0x0A,0x00,0x04,0x24,
81574 -0xFF,0x00,0xC3,0x30,
81575 -0x04,0x20,0x44,0x00,
81576 -0x2A,0x18,0x64,0x00,
81577 -0xD8,0x00,0x60,0x10,
81578 -0x1C,0x00,0x62,0x2D,
81579 -0x01,0x00,0xC2,0x24,
81580 -0xFF,0x00,0x43,0x30,
81581 -0x37,0x01,0x64,0x10,
81582 -0x20,0x24,0xA2,0xA0,
81583 -0x02,0x80,0x04,0x3C,
81584 -0x30,0x1F,0x85,0x24,
81585 -0x80,0x10,0x0B,0x00,
81586 -0x21,0x10,0x45,0x00,
81587 -0xD4,0x05,0x44,0x8C,
81588 -0x60,0x05,0x43,0x8C,
81589 -0x18,0x00,0xA2,0x8F,
81590 -0x00,0x00,0x00,0x00,
81591 -0x21,0x30,0x45,0x00,
81592 -0x40,0x10,0x04,0x00,
81593 -0x21,0x10,0x44,0x00,
81594 -0x21,0x18,0x62,0x00,
81595 -0x82,0x50,0x03,0x00,
81596 -0xE8,0x23,0xCA,0xAC,
81597 -0x30,0x38,0xA3,0x8C,
81598 -0xFF,0xFF,0x02,0x34,
81599 -0x03,0x00,0x62,0x10,
81600 -0x21,0x20,0x60,0x01,
81601 -0x57,0x24,0x00,0x0C,
81602 -0xFF,0x00,0x65,0x32,
81603 -0x9E,0x00,0x60,0x12,
81604 -0x02,0x80,0x03,0x3C,
81605 -0x02,0x80,0x04,0x3C,
81606 -0x30,0x1F,0x82,0x24,
81607 -0x21,0x10,0xA2,0x02,
81608 -0xFC,0x23,0x40,0xAC,
81609 -0x00,0x24,0x40,0xAC,
81610 -0x04,0x24,0x40,0xAC,
81611 -0xEC,0x23,0x40,0xAC,
81612 -0xF0,0x23,0x40,0xAC,
81613 -0xF4,0x23,0x40,0xAC,
81614 -0xF8,0x23,0x40,0xAC,
81615 -0x2C,0x00,0xA2,0x8F,
81616 -0x28,0x00,0xA4,0x8F,
81617 -0x01,0x00,0x73,0x26,
81618 -0x94,0x00,0x42,0x24,
81619 -0x94,0x00,0x84,0x24,
81620 -0x2C,0x00,0xA2,0xAF,
81621 -0x28,0x00,0xA4,0xAF,
81622 -0x24,0x00,0xA2,0x8F,
81623 -0x20,0x00,0xA4,0x8F,
81624 -0x20,0x00,0x63,0x2A,
81625 -0x94,0x00,0x42,0x24,
81626 -0x94,0x00,0x84,0x24,
81627 -0x24,0x00,0xA2,0xAF,
81628 -0x20,0x00,0xA4,0xAF,
81629 -0x1C,0x00,0xA2,0x8F,
81630 -0x18,0x00,0xA4,0x8F,
81631 -0x94,0x00,0x52,0x26,
81632 -0x94,0x00,0x42,0x24,
81633 -0x94,0x00,0x84,0x24,
81634 -0x1C,0x00,0xA2,0xAF,
81635 -0x18,0x00,0xA4,0xAF,
81636 -0x14,0x00,0xA2,0x8F,
81637 -0x10,0x00,0xA4,0x8F,
81638 -0x94,0x00,0xDE,0x27,
81639 -0x94,0x00,0x42,0x24,
81640 -0x94,0x00,0x84,0x24,
81641 -0x14,0x00,0xA2,0xAF,
81642 -0x94,0x00,0xF7,0x26,
81643 -0x10,0x00,0xA4,0xAF,
81644 -0x94,0x00,0x94,0x26,
81645 -0x94,0x00,0xD6,0x26,
81646 -0x69,0xFF,0x60,0x14,
81647 -0x94,0x00,0xB5,0x26,
81648 -0x54,0x00,0xBF,0x8F,
81649 -0x50,0x00,0xBE,0x8F,
81650 -0x4C,0x00,0xB7,0x8F,
81651 -0x48,0x00,0xB6,0x8F,
81652 -0x44,0x00,0xB5,0x8F,
81653 -0x40,0x00,0xB4,0x8F,
81654 -0x3C,0x00,0xB3,0x8F,
81655 -0x38,0x00,0xB2,0x8F,
81656 -0x34,0x00,0xB1,0x8F,
81657 -0x30,0x00,0xB0,0x8F,
81658 -0x08,0x00,0xE0,0x03,
81659 -0x58,0x00,0xBD,0x27,
81660 -0x79,0x00,0xE0,0x10,
81661 -0x00,0x00,0x00,0x00,
81662 -0x79,0x00,0x20,0x15,
81663 -0x02,0x80,0x03,0x3C,
81664 -0x40,0x10,0x07,0x00,
81665 -0x21,0x10,0x47,0x00,
81666 -0x82,0x10,0x02,0x00,
81667 -0x2B,0x10,0x46,0x00,
81668 -0xBE,0xFF,0x40,0x10,
81669 -0x02,0x80,0x04,0x3C,
81670 -0x30,0x1F,0x88,0x24,
81671 -0x21,0x20,0xC8,0x03,
81672 -0x21,0x30,0x8B,0x00,
81673 -0x78,0x24,0x83,0x8C,
81674 -0x01,0x00,0x05,0x24,
81675 -0x04,0x10,0x65,0x01,
81676 -0x3D,0x24,0xC7,0x90,
81677 -0x27,0x10,0x02,0x00,
81678 -0x24,0x18,0x62,0x00,
81679 -0x78,0x24,0x83,0xAC,
81680 -0x09,0x00,0xE5,0x10,
81681 -0x20,0x24,0xC0,0xA0,
81682 -0x14,0x00,0xA2,0x8F,
81683 -0x21,0x38,0x00,0x00,
81684 -0x21,0x20,0x48,0x00,
81685 -0x21,0x18,0x87,0x00,
81686 -0x01,0x00,0xE7,0x24,
81687 -0x1D,0x00,0xE2,0x28,
81688 -0xFC,0xFF,0x40,0x14,
81689 -0x5A,0x24,0x60,0xA0,
81690 -0x02,0x80,0x04,0x3C,
81691 -0x30,0x1F,0x83,0x24,
81692 -0x21,0x10,0xE3,0x02,
81693 -0x21,0x10,0x4B,0x00,
81694 -0x3D,0x24,0x40,0xA0,
81695 -0x21,0x50,0x60,0x00,
81696 -0x02,0x80,0x02,0x3C,
81697 -0x02,0x80,0x03,0x3C,
81698 -0x78,0xE8,0x49,0x24,
81699 -0x04,0xE8,0x68,0x24,
81700 -0x21,0x38,0x00,0x00,
81701 -0x80,0x18,0x07,0x00,
81702 -0x21,0x10,0x69,0x00,
81703 -0x21,0x20,0x68,0x00,
81704 -0x00,0x00,0x46,0x8C,
81705 -0x00,0x00,0x85,0x8C,
81706 -0x01,0x00,0xE7,0x24,
81707 -0x21,0x18,0x6A,0x00,
81708 -0x1D,0x00,0xE2,0x28,
81709 -0x60,0x05,0x65,0xAC,
81710 -0xF6,0xFF,0x40,0x14,
81711 -0xD4,0x05,0x66,0xAC,
81712 -0x15,0x00,0x60,0x11,
81713 -0x02,0x80,0x04,0x3C,
81714 -0x1F,0x24,0x82,0x92,
81715 -0xFF,0xFF,0x67,0x25,
81716 -0x2A,0x10,0xE2,0x00,
81717 -0x10,0x00,0x40,0x14,
81718 -0x02,0x80,0x03,0x3C,
81719 -0x10,0x00,0xA4,0x8F,
81720 -0x30,0x1F,0x62,0x24,
81721 -0x21,0x10,0x82,0x00,
81722 -0x1F,0x24,0x45,0x90,
81723 -0x18,0x24,0x44,0x8C,
81724 -0x01,0x00,0x06,0x24,
81725 -0x04,0x18,0xE6,0x00,
81726 -0x24,0x10,0x83,0x00,
81727 -0xB9,0x00,0x43,0x10,
81728 -0x00,0x00,0x00,0x00,
81729 -0xFF,0xFF,0xE7,0x24,
81730 -0x2A,0x10,0xE5,0x00,
81731 -0xFA,0xFF,0x40,0x10,
81732 -0x04,0x18,0xE6,0x00,
81733 -0x02,0x80,0x04,0x3C,
81734 -0x30,0x1F,0x83,0x24,
81735 -0x80,0x10,0x0B,0x00,
81736 -0x21,0x10,0x43,0x00,
81737 -0xD4,0x05,0x45,0x8C,
81738 -0x60,0x05,0x44,0x8C,
81739 -0x02,0x80,0x03,0x3C,
81740 -0x40,0x10,0x05,0x00,
81741 -0xDE,0x5D,0x66,0x90,
81742 -0x21,0x10,0x45,0x00,
81743 -0x21,0x20,0x82,0x00,
81744 -0x22,0x00,0x02,0x24,
81745 -0x9D,0x00,0xC2,0x10,
81746 -0x82,0x50,0x04,0x00,
81747 -0x78,0x24,0x83,0x8E,
81748 -0x01,0x00,0x02,0x24,
81749 -0x04,0x10,0x62,0x01,
81750 -0x25,0x18,0x62,0x00,
81751 -0x78,0x24,0x83,0xAE,
81752 -0x02,0x80,0x02,0x3C,
81753 -0x30,0x1F,0x43,0x24,
81754 -0x21,0x10,0xC3,0x02,
81755 -0xE8,0x23,0x4A,0xAC,
81756 -0x30,0x38,0x64,0x8C,
81757 -0xFF,0xFF,0x02,0x34,
81758 -0x62,0xFF,0x82,0x14,
81759 -0x21,0x20,0x60,0x01,
81760 -0x64,0xFF,0x60,0x16,
81761 -0x02,0x80,0x03,0x3C,
81762 -0x30,0x1F,0x70,0x24,
81763 -0xF0,0x23,0x05,0x96,
81764 -0xEC,0x23,0x02,0x96,
81765 -0x25,0xB0,0x11,0x3C,
81766 -0x00,0x2C,0x05,0x00,
81767 -0x21,0x28,0x45,0x00,
81768 -0xB5,0x59,0x00,0x0C,
81769 -0x68,0x0C,0x24,0x36,
81770 -0xFC,0x23,0x02,0x8E,
81771 -0xF8,0x23,0x05,0x8E,
81772 -0xF4,0x23,0x03,0x96,
81773 -0x6C,0x0C,0x24,0x36,
81774 -0x21,0x28,0xA2,0x00,
81775 -0x00,0x2C,0x05,0x00,
81776 -0xB5,0x59,0x00,0x0C,
81777 -0x21,0x28,0x65,0x00,
81778 -0x28,0x26,0x00,0x08,
81779 -0x02,0x80,0x04,0x3C,
81780 -0xD6,0x25,0x00,0x08,
81781 -0xE8,0x23,0x40,0xAE,
81782 -0x4C,0xFF,0x20,0x11,
81783 -0x02,0x80,0x03,0x3C,
81784 -0x30,0x1F,0x62,0x24,
81785 -0x80,0x18,0x0B,0x00,
81786 -0x21,0x18,0x62,0x00,
81787 -0xD4,0x05,0x64,0x8C,
81788 -0x00,0x00,0x00,0x00,
81789 -0x2B,0x20,0x44,0x01,
81790 -0x44,0xFF,0x80,0x10,
81791 -0x02,0x80,0x04,0x3C,
81792 -0x69,0x26,0x00,0x08,
81793 -0x30,0x1F,0x88,0x24,
81794 -0x2D,0xFF,0x40,0x10,
81795 -0x02,0x80,0x04,0x3C,
81796 -0x21,0x20,0x4B,0x02,
81797 -0x3D,0x24,0x83,0x90,
81798 -0x01,0x00,0x02,0x24,
81799 -0x53,0x00,0x62,0x10,
81800 -0x02,0x80,0x02,0x3C,
81801 -0x2C,0x00,0xA3,0x8F,
81802 -0x30,0x1F,0x42,0x24,
81803 -0x21,0x38,0x00,0x00,
81804 -0x21,0x20,0x62,0x00,
81805 -0x21,0x18,0x87,0x00,
81806 -0x01,0x00,0xE7,0x24,
81807 -0x1D,0x00,0xE2,0x28,
81808 -0xFC,0xFF,0x40,0x14,
81809 -0x5A,0x24,0x60,0xA0,
81810 -0x28,0x00,0xA4,0x8F,
81811 -0x02,0x80,0x03,0x3C,
81812 -0x30,0x1F,0x65,0x24,
81813 -0x21,0x30,0x85,0x00,
81814 -0x78,0x24,0xC2,0x8C,
81815 -0x01,0x00,0x03,0x24,
81816 -0x04,0x18,0x63,0x01,
81817 -0x27,0x18,0x03,0x00,
81818 -0x21,0x20,0xCB,0x00,
81819 -0x24,0x10,0x43,0x00,
81820 -0x3D,0x24,0x80,0xA0,
81821 -0x78,0x24,0xC2,0xAC,
81822 -0x12,0x00,0x60,0x15,
81823 -0x20,0x24,0x80,0xA0,
81824 -0x1E,0x24,0xC2,0x90,
81825 -0x00,0x00,0x00,0x00,
81826 -0x0E,0x00,0x40,0x10,
81827 -0x01,0x00,0x07,0x24,
81828 -0x24,0x00,0xA3,0x8F,
81829 -0x01,0x00,0x06,0x24,
81830 -0x21,0x10,0x65,0x00,
81831 -0x1E,0x24,0x44,0x90,
81832 -0x18,0x24,0x45,0x8C,
81833 -0x04,0x18,0xE6,0x00,
81834 -0x24,0x10,0xA3,0x00,
81835 -0x4B,0x00,0x43,0x10,
81836 -0x00,0x00,0x00,0x00,
81837 -0x01,0x00,0xE7,0x24,
81838 -0x2A,0x10,0x87,0x00,
81839 -0xFA,0xFF,0x40,0x10,
81840 -0x04,0x18,0xE6,0x00,
81841 -0x02,0x80,0x02,0x3C,
81842 -0x30,0x1F,0x44,0x24,
81843 -0x20,0x00,0xA2,0x8F,
81844 -0x01,0x00,0x67,0x25,
81845 -0x21,0x18,0x44,0x00,
81846 -0x1E,0x24,0x62,0x90,
81847 -0x00,0x00,0x00,0x00,
81848 -0x2A,0x10,0x47,0x00,
81849 -0x0E,0x00,0x40,0x14,
81850 -0x01,0x00,0x06,0x24,
81851 -0x1C,0x00,0xA3,0x8F,
81852 -0x00,0x00,0x00,0x00,
81853 -0x21,0x10,0x64,0x00,
81854 -0x1E,0x24,0x45,0x90,
81855 -0x18,0x24,0x44,0x8C,
81856 -0x04,0x18,0xE6,0x00,
81857 -0x24,0x10,0x83,0x00,
81858 -0x31,0x00,0x43,0x10,
81859 -0x00,0x00,0x00,0x00,
81860 -0x01,0x00,0xE7,0x24,
81861 -0x2A,0x10,0xA7,0x00,
81862 -0xFA,0xFF,0x40,0x10,
81863 -0x04,0x18,0xE6,0x00,
81864 -0x02,0x80,0x02,0x3C,
81865 -0xDE,0x5D,0x44,0x90,
81866 -0x22,0x00,0x03,0x24,
81867 -0xE4,0xFE,0x83,0x14,
81868 -0x02,0x80,0x04,0x3C,
81869 -0xEE,0xFF,0x62,0x25,
81870 -0xFF,0x00,0x42,0x30,
81871 -0x02,0x00,0x42,0x2C,
81872 -0x18,0x00,0x03,0x24,
81873 -0x12,0x26,0x00,0x08,
81874 -0x0B,0x58,0x62,0x00,
81875 -0xC0,0x10,0x07,0x00,
81876 -0x23,0x10,0x47,0x00,
81877 -0xC2,0x10,0x02,0x00,
81878 -0x2B,0x10,0x48,0x00,
81879 -0xC4,0xFE,0x40,0x14,
81880 -0x00,0x00,0x00,0x00,
81881 -0xF1,0x25,0x00,0x08,
81882 -0x00,0x00,0x00,0x00,
81883 -0x18,0x00,0x62,0x2D,
81884 -0x0A,0x00,0x40,0x14,
81885 -0x05,0x00,0x62,0x2D,
81886 -0x5A,0x24,0x83,0x90,
81887 -0x00,0x00,0x00,0x00,
81888 -0x05,0x00,0x62,0x2C,
81889 -0xB0,0xFF,0x40,0x10,
81890 -0x01,0x00,0x62,0x24,
81891 -0xF4,0x26,0x00,0x08,
81892 -0x5A,0x24,0x82,0xA0,
81893 -0x11,0x26,0x00,0x08,
81894 -0x3D,0x24,0xA7,0xA0,
81895 -0x04,0x00,0x40,0x10,
81896 -0x00,0x00,0x00,0x00,
81897 -0x5A,0x24,0x83,0x90,
81898 -0x43,0x27,0x00,0x08,
81899 -0x03,0x00,0x62,0x2C,
81900 -0x5A,0x24,0x83,0x90,
81901 -0x43,0x27,0x00,0x08,
81902 -0x04,0x00,0x62,0x2C,
81903 -0x13,0x00,0x02,0x24,
81904 -0x62,0xFF,0x62,0x15,
81905 -0x02,0x80,0x02,0x3C,
81906 -0xBC,0x26,0x00,0x08,
81907 -0x30,0x1F,0x43,0x24,
81908 -0xFF,0x00,0xEB,0x30,
81909 -0x2B,0x27,0x00,0x08,
81910 -0x02,0x80,0x02,0x3C,
81911 -0x13,0x27,0x00,0x08,
81912 -0xFF,0x00,0xEB,0x30,
81913 -0xA7,0x26,0x00,0x08,
81914 -0xFF,0x00,0xEB,0x30,
81915 -0xD8,0xFF,0xBD,0x27,
81916 -0x02,0x80,0x02,0x3C,
81917 -0x14,0x00,0xB1,0xAF,
81918 -0x24,0x00,0xBF,0xAF,
81919 -0x20,0x00,0xB4,0xAF,
81920 -0x1C,0x00,0xB3,0xAF,
81921 -0x18,0x00,0xB2,0xAF,
81922 -0x10,0x00,0xB0,0xAF,
81923 -0x30,0x1F,0x45,0x24,
81924 -0xA9,0x37,0xA4,0x90,
81925 -0xA4,0x37,0xA3,0x8C,
81926 -0xA0,0x37,0xA2,0x8C,
81927 -0x21,0x88,0x64,0x00,
81928 -0x2B,0x10,0x22,0x02,
81929 -0x60,0x00,0x40,0x10,
81930 -0x21,0x80,0xA0,0x00,
81931 -0x02,0x80,0x14,0x3C,
81932 -0x21,0x98,0xA0,0x00,
81933 -0x76,0x27,0x00,0x08,
81934 -0x21,0x90,0xA0,0x00,
81935 -0xA0,0x37,0x42,0x8E,
81936 -0x10,0x00,0x31,0x26,
81937 -0x2B,0x10,0x22,0x02,
81938 -0x57,0x00,0x40,0x10,
81939 -0x21,0x80,0x40,0x02,
81940 -0xA9,0x37,0x02,0x92,
81941 -0xFF,0xFF,0x23,0x32,
81942 -0x02,0x80,0x05,0x3C,
81943 -0x10,0x00,0x42,0x24,
81944 -0x25,0x28,0x65,0x00,
81945 -0x98,0x55,0x84,0x26,
81946 -0x10,0x00,0x06,0x24,
81947 -0x10,0x52,0x00,0x0C,
81948 -0xA9,0x37,0x02,0xA2,
81949 -0x6C,0x36,0x06,0x8E,
81950 -0x00,0x00,0x00,0x00,
81951 -0x42,0x24,0x06,0x00,
81952 -0x1F,0x00,0x84,0x30,
81953 -0xC0,0x10,0x04,0x00,
81954 -0x21,0x10,0x44,0x00,
81955 -0x80,0x10,0x02,0x00,
81956 -0x21,0x10,0x44,0x00,
81957 -0x80,0x10,0x02,0x00,
81958 -0x21,0x38,0x50,0x00,
81959 -0x1C,0x24,0xE3,0x8C,
81960 -0x00,0x00,0x00,0x00,
81961 -0x02,0x1B,0x03,0x00,
81962 -0x01,0x00,0x63,0x30,
81963 -0xE3,0xFF,0x60,0x10,
81964 -0x25,0xB0,0x02,0x3C,
81965 -0x68,0x36,0x05,0x8E,
81966 -0x21,0x10,0x82,0x00,
81967 -0x60,0x01,0x44,0x90,
81968 -0x82,0x1D,0x05,0x00,
81969 -0x3F,0x00,0x63,0x30,
81970 -0x04,0x00,0x0A,0x24,
81971 -0x05,0x00,0x62,0x28,
81972 -0x21,0x40,0x40,0x01,
81973 -0x0B,0x40,0x62,0x00,
81974 -0x07,0x00,0xA0,0x04,
81975 -0xFF,0x00,0x89,0x30,
81976 -0x08,0x24,0xE2,0x8C,
81977 -0x04,0x00,0x08,0x24,
81978 -0x01,0x00,0x42,0x24,
81979 -0x08,0x24,0xE2,0xAC,
81980 -0x6C,0x36,0x66,0x8E,
81981 -0x00,0x00,0x00,0x00,
81982 -0x02,0x13,0x06,0x00,
81983 -0x1F,0x00,0x42,0x30,
81984 -0x08,0x00,0x42,0x28,
81985 -0xCD,0xFF,0x40,0x10,
81986 -0x00,0x00,0x00,0x00,
81987 -0x68,0x36,0x62,0x8E,
81988 -0x00,0x00,0x00,0x00,
81989 -0x3F,0x00,0x42,0x30,
81990 -0xC8,0xFF,0x49,0x14,
81991 -0x00,0x00,0x00,0x00,
81992 -0x29,0x00,0x00,0x11,
81993 -0x01,0x00,0x02,0x24,
81994 -0x2E,0x00,0x02,0x11,
81995 -0x02,0x00,0x02,0x24,
81996 -0x33,0x00,0x02,0x11,
81997 -0x03,0x00,0x02,0x24,
81998 -0x38,0x00,0x02,0x11,
81999 -0x00,0x00,0x00,0x00,
82000 -0x3B,0x00,0x0A,0x11,
82001 -0x00,0x00,0x00,0x00,
82002 -0x0C,0x24,0xE2,0x8C,
82003 -0x21,0x18,0x33,0x01,
82004 -0x04,0x05,0x64,0x90,
82005 -0x02,0x11,0x02,0x00,
82006 -0x2B,0x10,0x44,0x00,
82007 -0x3E,0x00,0x40,0x14,
82008 -0x00,0x00,0x00,0x00,
82009 -0x00,0x24,0xE3,0x8C,
82010 -0x80,0x10,0x09,0x00,
82011 -0x21,0x10,0x49,0x00,
82012 -0x01,0x00,0x63,0x24,
82013 -0x21,0x10,0x53,0x00,
82014 -0x00,0x24,0xE3,0xAC,
82015 -0x21,0x10,0x48,0x00,
82016 -0xA8,0x03,0x44,0x90,
82017 -0xE8,0x23,0xE3,0x8C,
82018 -0x00,0x00,0x00,0x00,
82019 -0x21,0x18,0x64,0x00,
82020 -0xE8,0x23,0xE3,0xAC,
82021 -0xA0,0x37,0x42,0x8E,
82022 -0x10,0x00,0x31,0x26,
82023 -0x2B,0x10,0x22,0x02,
82024 -0xAB,0xFF,0x40,0x14,
82025 -0x21,0x80,0x40,0x02,
82026 -0x24,0x00,0xBF,0x8F,
82027 -0x20,0x00,0xB4,0x8F,
82028 -0x1C,0x00,0xB3,0x8F,
82029 -0x18,0x00,0xB2,0x8F,
82030 -0x14,0x00,0xB1,0x8F,
82031 -0x10,0x00,0xB0,0x8F,
82032 -0x08,0x00,0xE0,0x03,
82033 -0x28,0x00,0xBD,0x27,
82034 -0xEC,0x23,0xE2,0x8C,
82035 -0x00,0x00,0x00,0x00,
82036 -0x01,0x00,0x42,0x24,
82037 -0xEC,0x23,0xE2,0xAC,
82038 -0x01,0x00,0x02,0x24,
82039 -0xD4,0xFF,0x02,0x15,
82040 -0x02,0x00,0x02,0x24,
82041 -0xF0,0x23,0xE2,0x8C,
82042 -0x00,0x00,0x00,0x00,
82043 -0x01,0x00,0x42,0x24,
82044 -0xF0,0x23,0xE2,0xAC,
82045 -0x02,0x00,0x02,0x24,
82046 -0xCF,0xFF,0x02,0x15,
82047 -0x03,0x00,0x02,0x24,
82048 -0xF4,0x23,0xE2,0x8C,
82049 -0x00,0x00,0x00,0x00,
82050 -0x01,0x00,0x42,0x24,
82051 -0xF4,0x23,0xE2,0xAC,
82052 -0x03,0x00,0x02,0x24,
82053 -0xCA,0xFF,0x02,0x15,
82054 -0x00,0x00,0x00,0x00,
82055 -0xF8,0x23,0xE2,0x8C,
82056 -0x00,0x00,0x00,0x00,
82057 -0x01,0x00,0x42,0x24,
82058 -0xC7,0xFF,0x0A,0x15,
82059 -0xF8,0x23,0xE2,0xAC,
82060 -0xFC,0x23,0xE2,0x8C,
82061 -0x21,0x18,0x33,0x01,
82062 -0x01,0x00,0x42,0x24,
82063 -0xFC,0x23,0xE2,0xAC,
82064 -0x0C,0x24,0xE2,0x8C,
82065 -0x04,0x05,0x64,0x90,
82066 -0x02,0x11,0x02,0x00,
82067 -0x2B,0x10,0x44,0x00,
82068 -0xC4,0xFF,0x40,0x10,
82069 -0x00,0x00,0x00,0x00,
82070 -0x04,0x24,0xE3,0x8C,
82071 -0x80,0x10,0x09,0x00,
82072 -0x21,0x10,0x49,0x00,
82073 -0x01,0x00,0x63,0x24,
82074 -0x21,0x10,0x53,0x00,
82075 -0x04,0x24,0xE3,0xAC,
82076 -0x21,0x10,0x48,0x00,
82077 -0x39,0x04,0x44,0x90,
82078 -0xE8,0x23,0xE3,0x8C,
82079 -0x00,0x00,0x00,0x00,
82080 -0x21,0x18,0x64,0x00,
82081 -0xC7,0x27,0x00,0x08,
82082 -0xE8,0x23,0xE3,0xAC,
82083 -0x23,0x10,0xA4,0x00,
82084 -0x2B,0x18,0xA4,0x00,
82085 -0x23,0x20,0x85,0x00,
82086 -0x08,0x00,0xE0,0x03,
82087 -0x0B,0x10,0x83,0x00,
82088 -0x20,0xFF,0xBD,0x27,
82089 -0xCC,0x00,0xB5,0xAF,
82090 -0xDC,0x00,0xBF,0xAF,
82091 -0xD8,0x00,0xBE,0xAF,
82092 -0xD4,0x00,0xB7,0xAF,
82093 -0xD0,0x00,0xB6,0xAF,
82094 -0xC8,0x00,0xB4,0xAF,
82095 -0xC4,0x00,0xB3,0xAF,
82096 -0xC0,0x00,0xB2,0xAF,
82097 -0xBC,0x00,0xB1,0xAF,
82098 -0xB8,0x00,0xB0,0xAF,
82099 -0x21,0xA8,0x00,0x00,
82100 -0x40,0x11,0x15,0x00,
82101 -0x10,0x00,0xA3,0x27,
82102 -0x21,0x10,0x43,0x00,
82103 -0x07,0x00,0x16,0x24,
82104 -0xFF,0xFF,0xD6,0x26,
82105 -0x00,0x00,0x40,0xAC,
82106 -0xFD,0xFF,0xC1,0x06,
82107 -0x04,0x00,0x42,0x24,
82108 -0x01,0x00,0xB5,0x26,
82109 -0x03,0x00,0xA2,0x2E,
82110 -0xF6,0xFF,0x40,0x14,
82111 -0x40,0x11,0x15,0x00,
82112 -0x25,0xB0,0x10,0x3C,
82113 -0xC4,0x02,0x02,0x36,
82114 -0x00,0x00,0x40,0xAC,
82115 -0x04,0x00,0x03,0x36,
82116 -0x00,0x00,0x62,0x8C,
82117 -0x04,0x0C,0x03,0x36,
82118 -0x00,0x00,0x63,0x8C,
82119 -0x08,0x0C,0x04,0x36,
82120 -0x0F,0x00,0x11,0x3C,
82121 -0xAC,0x00,0xA3,0xAF,
82122 -0x00,0x00,0x84,0x8C,
82123 -0x24,0x10,0x51,0x00,
82124 -0x02,0xF4,0x02,0x00,
82125 -0xB0,0x00,0xA4,0xAF,
82126 -0x00,0x60,0x12,0x40,
82127 -0x01,0x00,0x41,0x36,
82128 -0x01,0x00,0x21,0x38,
82129 -0x00,0x60,0x81,0x40,
82130 -0x21,0x20,0x00,0x00,
82131 -0x8A,0x47,0x00,0x0C,
82132 -0xFF,0xFF,0x25,0x36,
82133 -0x70,0x00,0xA2,0xAF,
82134 -0x00,0x60,0x92,0x40,
82135 -0x54,0x22,0x00,0x0C,
82136 -0x64,0x00,0x04,0x24,
82137 -0xE6,0x44,0x00,0x0C,
82138 -0x01,0x00,0x04,0x24,
82139 -0x00,0x60,0x12,0x40,
82140 -0x01,0x00,0x41,0x36,
82141 -0x01,0x00,0x21,0x38,
82142 -0x00,0x60,0x81,0x40,
82143 -0x21,0x20,0x00,0x00,
82144 -0x8A,0x47,0x00,0x0C,
82145 -0xFF,0xFF,0x25,0x36,
82146 -0x74,0x00,0xA2,0xAF,
82147 -0x00,0x60,0x92,0x40,
82148 -0x54,0x22,0x00,0x0C,
82149 -0x64,0x00,0x04,0x24,
82150 -0xE6,0x44,0x00,0x0C,
82151 -0x21,0x20,0x00,0x00,
82152 -0xE0,0x0E,0x02,0x36,
82153 -0x21,0x20,0x40,0x00,
82154 -0x00,0x00,0x42,0x8C,
82155 -0xDC,0x0E,0x12,0x36,
82156 -0x70,0x0E,0x13,0x36,
82157 -0x78,0x00,0xA2,0xAF,
82158 -0x00,0x00,0x42,0x8E,
82159 -0x74,0x0E,0x14,0x36,
82160 -0x78,0x0E,0x15,0x36,
82161 -0x7C,0x00,0xA2,0xAF,
82162 -0x00,0x00,0x63,0x8E,
82163 -0x7C,0x0E,0x16,0x36,
82164 -0x80,0x0E,0x17,0x36,
82165 -0x80,0x00,0xA3,0xAF,
82166 -0x00,0x00,0x82,0x8E,
82167 -0xD4,0x0E,0x10,0x36,
82168 -0xED,0x3F,0x11,0x3C,
82169 -0x84,0x00,0xA2,0xAF,
82170 -0x00,0x00,0xA3,0x8E,
82171 -0xFB,0x92,0x25,0x36,
82172 -0x88,0x00,0xA3,0xAF,
82173 -0x00,0x00,0xC2,0x8E,
82174 -0x00,0x00,0x00,0x00,
82175 -0x8C,0x00,0xA2,0xAF,
82176 -0x00,0x00,0xE3,0x8E,
82177 -0x25,0xB0,0x02,0x3C,
82178 -0x84,0x0E,0x42,0x34,
82179 -0x90,0x00,0xA3,0xAF,
82180 -0x00,0x00,0x42,0x8C,
82181 -0x25,0xB0,0x03,0x3C,
82182 -0x88,0x0E,0x63,0x34,
82183 -0x94,0x00,0xA2,0xAF,
82184 -0x00,0x00,0x63,0x8C,
82185 -0x25,0xB0,0x02,0x3C,
82186 -0x8C,0x0E,0x42,0x34,
82187 -0x98,0x00,0xA3,0xAF,
82188 -0x00,0x00,0x42,0x8C,
82189 -0x25,0xB0,0x03,0x3C,
82190 -0xD0,0x0E,0x63,0x34,
82191 -0x9C,0x00,0xA2,0xAF,
82192 -0x00,0x00,0x63,0x8C,
82193 -0x00,0x00,0x00,0x00,
82194 -0xA0,0x00,0xA3,0xAF,
82195 -0x00,0x00,0x02,0x8E,
82196 -0x25,0xB0,0x03,0x3C,
82197 -0xD8,0x0E,0x63,0x34,
82198 -0xA4,0x00,0xA2,0xAF,
82199 -0x00,0x00,0x63,0x8C,
82200 -0x02,0x5C,0x00,0x0C,
82201 -0xA8,0x00,0xA3,0xAF,
82202 -0x21,0x20,0x40,0x02,
82203 -0x02,0x5C,0x00,0x0C,
82204 -0xFB,0x92,0x25,0x36,
82205 -0x21,0x20,0x60,0x02,
82206 -0x02,0x5C,0x00,0x0C,
82207 -0xFB,0x92,0x25,0x36,
82208 -0x21,0x20,0x80,0x02,
82209 -0x02,0x5C,0x00,0x0C,
82210 -0xFB,0x92,0x25,0x36,
82211 -0x21,0x20,0xA0,0x02,
82212 -0x02,0x5C,0x00,0x0C,
82213 -0xFB,0x92,0x25,0x36,
82214 -0x21,0x20,0xC0,0x02,
82215 -0x02,0x5C,0x00,0x0C,
82216 -0xFB,0x92,0x25,0x36,
82217 -0x21,0x20,0xE0,0x02,
82218 -0x02,0x5C,0x00,0x0C,
82219 -0xFB,0x92,0x25,0x36,
82220 -0x02,0x80,0x02,0x3C,
82221 -0xA8,0xED,0x42,0x24,
82222 -0x00,0x00,0x44,0x8C,
82223 -0xFB,0x92,0x25,0x36,
82224 -0x02,0x5C,0x00,0x0C,
82225 -0x25,0xB0,0x13,0x3C,
82226 -0x02,0x80,0x03,0x3C,
82227 -0xAC,0xED,0x63,0x24,
82228 -0x00,0x00,0x64,0x8C,
82229 -0xFB,0x92,0x25,0x36,
82230 -0x02,0x5C,0x00,0x0C,
82231 -0x21,0xB0,0x00,0x00,
82232 -0x02,0x80,0x02,0x3C,
82233 -0xB0,0xED,0x42,0x24,
82234 -0x00,0x00,0x44,0x8C,
82235 -0xFB,0x92,0x25,0x36,
82236 -0x02,0x5C,0x00,0x0C,
82237 -0xFF,0x03,0x14,0x3C,
82238 -0x02,0x80,0x03,0x3C,
82239 -0xB4,0xED,0x63,0x24,
82240 -0x00,0x00,0x64,0x8C,
82241 -0xFB,0x92,0x25,0x36,
82242 -0x02,0x5C,0x00,0x0C,
82243 -0x10,0x00,0xB7,0x27,
82244 -0x21,0x20,0x00,0x02,
82245 -0x02,0x5C,0x00,0x0C,
82246 -0xFB,0x92,0x25,0x36,
82247 -0x02,0x80,0x02,0x3C,
82248 -0xB8,0xED,0x42,0x24,
82249 -0x00,0x00,0x44,0x8C,
82250 -0x02,0x5C,0x00,0x0C,
82251 -0xFB,0x92,0x25,0x36,
82252 -0xE4,0x28,0x00,0x08,
82253 -0x21,0xA8,0x00,0x00,
82254 -0x6E,0x00,0xC2,0x13,
82255 -0x02,0x80,0x02,0x3C,
82256 -0xAC,0x0E,0x62,0x36,
82257 -0x94,0x0E,0x63,0x36,
82258 -0x00,0x00,0x48,0x8C,
82259 -0x00,0x00,0x64,0x8C,
82260 -0xB4,0x0E,0x62,0x36,
82261 -0x9C,0x0E,0x63,0x36,
82262 -0x00,0x00,0x45,0x8C,
82263 -0x00,0x00,0x66,0x8C,
82264 -0x25,0xB0,0x03,0x3C,
82265 -0xBC,0x0E,0x63,0x34,
82266 -0x00,0x00,0x67,0x8C,
82267 -0x24,0x20,0x94,0x00,
82268 -0x00,0xD8,0x02,0x3C,
82269 -0x24,0x10,0x02,0x01,
82270 -0x24,0x28,0xB4,0x00,
82271 -0x24,0x30,0xD4,0x00,
82272 -0x24,0x38,0xF4,0x00,
82273 -0x02,0x24,0x04,0x00,
82274 -0x20,0x01,0x03,0x24,
82275 -0x01,0x00,0x42,0x2C,
82276 -0x02,0x2C,0x05,0x00,
82277 -0x02,0x34,0x06,0x00,
82278 -0xE8,0x00,0x83,0x10,
82279 -0x02,0x3C,0x07,0x00,
82280 -0xE6,0x00,0xA3,0x10,
82281 -0x20,0x00,0x03,0x24,
82282 -0xE4,0x00,0xC3,0x10,
82283 -0x00,0x00,0x00,0x00,
82284 -0xE2,0x00,0xE3,0x10,
82285 -0x01,0x00,0x08,0x24,
82286 -0x80,0x00,0x03,0x24,
82287 -0x08,0x00,0x83,0x10,
82288 -0x21,0x20,0x00,0x00,
82289 -0x06,0x00,0xA3,0x10,
82290 -0x21,0x20,0x00,0x00,
82291 -0xE0,0x03,0x03,0x24,
82292 -0x03,0x00,0xC3,0x10,
82293 -0x00,0x00,0x00,0x00,
82294 -0xDB,0x00,0xE3,0x10,
82295 -0x01,0x00,0x04,0x24,
82296 -0x05,0x00,0x40,0x10,
82297 -0x00,0x00,0x00,0x00,
82298 -0x03,0x00,0x00,0x11,
82299 -0x00,0x00,0x00,0x00,
82300 -0xD7,0x00,0x80,0x14,
82301 -0x94,0x0E,0x63,0x36,
82302 -0x01,0x00,0xB5,0x26,
82303 -0x0A,0x00,0xA2,0x2E,
82304 -0x01,0x01,0x40,0x10,
82305 -0x00,0x00,0x00,0x00,
82306 -0xCB,0xFF,0xC0,0x17,
82307 -0x01,0x00,0x02,0x24,
82308 -0xA0,0x00,0x03,0x3C,
82309 -0x30,0x54,0x65,0x34,
82310 -0x02,0x5C,0x00,0x0C,
82311 -0x04,0x0C,0x64,0x36,
82312 -0x08,0x00,0x05,0x3C,
82313 -0xE4,0x00,0xA5,0x34,
82314 -0x02,0x5C,0x00,0x0C,
82315 -0x08,0x0C,0x64,0x36,
82316 -0x28,0x0E,0x64,0x36,
82317 -0x02,0x5C,0x00,0x0C,
82318 -0x80,0x80,0x05,0x3C,
82319 -0x14,0x02,0x02,0x3C,
82320 -0x48,0x01,0x45,0x34,
82321 -0x02,0x5C,0x00,0x0C,
82322 -0x40,0x0E,0x64,0x36,
82323 -0x16,0x68,0x05,0x3C,
82324 -0xA2,0x04,0xA5,0x34,
82325 -0x02,0x5C,0x00,0x0C,
82326 -0x44,0x0E,0x64,0x36,
82327 -0x4C,0x0E,0x64,0x36,
82328 -0x02,0x5C,0x00,0x0C,
82329 -0xD1,0x28,0x05,0x24,
82330 -0x14,0x02,0x03,0x3C,
82331 -0x4D,0x01,0x65,0x34,
82332 -0x02,0x5C,0x00,0x0C,
82333 -0x60,0x0E,0x64,0x36,
82334 -0x16,0x28,0x05,0x3C,
82335 -0xBA,0x08,0xA5,0x34,
82336 -0x02,0x5C,0x00,0x0C,
82337 -0x64,0x0E,0x64,0x36,
82338 -0x6C,0x0E,0x64,0x36,
82339 -0x02,0x5C,0x00,0x0C,
82340 -0xD1,0x28,0x05,0x24,
82341 -0x00,0xFB,0x05,0x3C,
82342 -0x01,0x00,0xA5,0x34,
82343 -0x02,0x5C,0x00,0x0C,
82344 -0x48,0x0E,0x64,0x36,
82345 -0x00,0xF8,0x05,0x3C,
82346 -0x01,0x00,0xA5,0x34,
82347 -0x02,0x5C,0x00,0x0C,
82348 -0x48,0x0E,0x64,0x36,
82349 -0x25,0x22,0x00,0x0C,
82350 -0x03,0x00,0x04,0x24,
82351 -0xA0,0x00,0x02,0x3C,
82352 -0x33,0x54,0x45,0x34,
82353 -0x02,0x5C,0x00,0x0C,
82354 -0x04,0x0C,0x64,0x36,
82355 -0x08,0x0C,0x64,0x36,
82356 -0x02,0x5C,0x00,0x0C,
82357 -0xE4,0x00,0x05,0x24,
82358 -0x28,0x0E,0x64,0x36,
82359 -0x02,0x5C,0x00,0x0C,
82360 -0x21,0x28,0x00,0x00,
82361 -0x01,0x00,0x02,0x24,
82362 -0x96,0xFF,0xC2,0x17,
82363 -0xAC,0x0E,0x62,0x36,
82364 -0x02,0x80,0x02,0x3C,
82365 -0xBC,0xED,0x42,0x24,
82366 -0x25,0xB0,0x03,0x3C,
82367 -0x00,0x00,0x44,0x8C,
82368 -0x20,0x08,0x63,0x34,
82369 -0x00,0x00,0x71,0x8C,
82370 -0x00,0x01,0x03,0x3C,
82371 -0x00,0x01,0x65,0x34,
82372 -0x02,0x5C,0x00,0x0C,
82373 -0x25,0xB0,0x12,0x3C,
82374 -0x00,0x01,0x02,0x3C,
82375 -0x00,0x01,0x45,0x34,
82376 -0x02,0x5C,0x00,0x0C,
82377 -0x28,0x08,0x44,0x36,
82378 -0xA0,0x00,0x03,0x3C,
82379 -0x30,0x54,0x65,0x34,
82380 -0x02,0x5C,0x00,0x0C,
82381 -0x04,0x0C,0x44,0x36,
82382 -0x08,0x00,0x05,0x3C,
82383 -0xE4,0x00,0xA5,0x34,
82384 -0x02,0x5C,0x00,0x0C,
82385 -0x08,0x0C,0x44,0x36,
82386 -0x28,0x0E,0x44,0x36,
82387 -0x02,0x5C,0x00,0x0C,
82388 -0x80,0x80,0x05,0x3C,
82389 -0x00,0x01,0x02,0x3C,
82390 -0x00,0x7C,0x45,0x34,
82391 -0x02,0x5C,0x00,0x0C,
82392 -0x30,0x0E,0x44,0x36,
82393 -0x00,0x01,0x03,0x3C,
82394 -0x00,0x48,0x65,0x34,
82395 -0x02,0x5C,0x00,0x0C,
82396 -0x34,0x0E,0x44,0x36,
82397 -0x00,0x10,0x02,0x3C,
82398 -0x1F,0xDC,0x45,0x34,
82399 -0x02,0x5C,0x00,0x0C,
82400 -0x38,0x0E,0x44,0x36,
82401 -0x00,0x10,0x03,0x3C,
82402 -0x1F,0x8C,0x65,0x34,
82403 -0x02,0x5C,0x00,0x0C,
82404 -0x3C,0x0E,0x44,0x36,
82405 -0x14,0x02,0x02,0x3C,
82406 -0x02,0x01,0x45,0x34,
82407 -0x02,0x5C,0x00,0x0C,
82408 -0x40,0x0E,0x44,0x36,
82409 -0x16,0x68,0x05,0x3C,
82410 -0xC7,0x04,0xA5,0x34,
82411 -0x02,0x5C,0x00,0x0C,
82412 -0x44,0x0E,0x44,0x36,
82413 -0x4C,0x0E,0x44,0x36,
82414 -0x02,0x5C,0x00,0x0C,
82415 -0xD1,0x28,0x05,0x24,
82416 -0x6C,0x0E,0x44,0x36,
82417 -0x02,0x5C,0x00,0x0C,
82418 -0xD1,0x28,0x05,0x24,
82419 -0x00,0x01,0x03,0x3C,
82420 -0x00,0x7C,0x65,0x34,
82421 -0x02,0x5C,0x00,0x0C,
82422 -0x50,0x0E,0x44,0x36,
82423 -0x00,0x01,0x02,0x3C,
82424 -0x00,0x48,0x45,0x34,
82425 -0x02,0x5C,0x00,0x0C,
82426 -0x54,0x0E,0x44,0x36,
82427 -0x00,0x10,0x03,0x3C,
82428 -0x23,0xDC,0x65,0x34,
82429 -0x02,0x5C,0x00,0x0C,
82430 -0x58,0x0E,0x44,0x36,
82431 -0x00,0x10,0x02,0x3C,
82432 -0x23,0x8C,0x45,0x34,
82433 -0x02,0x5C,0x00,0x0C,
82434 -0x5C,0x0E,0x44,0x36,
82435 -0x14,0x02,0x03,0x3C,
82436 -0x02,0x01,0x65,0x34,
82437 -0x02,0x5C,0x00,0x0C,
82438 -0x60,0x0E,0x44,0x36,
82439 -0x16,0x28,0x05,0x3C,
82440 -0x07,0x0D,0xA5,0x34,
82441 -0x02,0x5C,0x00,0x0C,
82442 -0x64,0x0E,0x44,0x36,
82443 -0x48,0x0E,0x44,0x36,
82444 -0x02,0x5C,0x00,0x0C,
82445 -0x00,0xFB,0x05,0x3C,
82446 -0x00,0xF8,0x05,0x3C,
82447 -0x02,0x5C,0x00,0x0C,
82448 -0x48,0x0E,0x44,0x36,
82449 -0x00,0x02,0x10,0x3C,
82450 -0x25,0x22,0x00,0x0C,
82451 -0x03,0x00,0x04,0x24,
82452 -0x4C,0x0E,0x44,0x36,
82453 -0x02,0x5C,0x00,0x0C,
82454 -0xD1,0x28,0x05,0x36,
82455 -0xD1,0x28,0x05,0x36,
82456 -0x02,0x5C,0x00,0x0C,
82457 -0x6C,0x0E,0x44,0x36,
82458 -0x48,0x0E,0x44,0x36,
82459 -0x02,0x5C,0x00,0x0C,
82460 -0x00,0xFB,0x05,0x3C,
82461 -0x00,0xF8,0x05,0x3C,
82462 -0x02,0x5C,0x00,0x0C,
82463 -0x48,0x0E,0x44,0x36,
82464 -0x25,0x22,0x00,0x0C,
82465 -0x03,0x00,0x04,0x24,
82466 -0xAC,0x00,0xA5,0x8F,
82467 -0x04,0x0C,0x44,0x36,
82468 -0x02,0x5C,0x00,0x0C,
82469 -0x00,0x01,0x31,0x32,
82470 -0xB0,0x00,0xA5,0x8F,
82471 -0x08,0x0C,0x44,0x36,
82472 -0x02,0x5C,0x00,0x0C,
82473 -0x2B,0x88,0x11,0x00,
82474 -0x28,0x0E,0x44,0x36,
82475 -0x02,0x5C,0x00,0x0C,
82476 -0x21,0x28,0x00,0x00,
82477 -0x23,0xFF,0x20,0x16,
82478 -0xAC,0x0E,0x62,0x36,
82479 -0x02,0x80,0x02,0x3C,
82480 -0xBC,0xED,0x42,0x24,
82481 -0x00,0x00,0x44,0x8C,
82482 -0x02,0x5C,0x00,0x0C,
82483 -0x00,0x01,0x05,0x3C,
82484 -0x28,0x08,0x44,0x36,
82485 -0x02,0x5C,0x00,0x0C,
82486 -0x00,0x01,0x05,0x3C,
82487 -0xAC,0x0E,0x62,0x36,
82488 -0x94,0x0E,0x63,0x36,
82489 -0x00,0x00,0x48,0x8C,
82490 -0x00,0x00,0x64,0x8C,
82491 -0xB4,0x0E,0x62,0x36,
82492 -0x9C,0x0E,0x63,0x36,
82493 -0x00,0x00,0x45,0x8C,
82494 -0x00,0x00,0x66,0x8C,
82495 -0x25,0xB0,0x03,0x3C,
82496 -0xBC,0x0E,0x63,0x34,
82497 -0x00,0x00,0x67,0x8C,
82498 -0x24,0x20,0x94,0x00,
82499 -0x00,0xD8,0x02,0x3C,
82500 -0x24,0x10,0x02,0x01,
82501 -0x24,0x28,0xB4,0x00,
82502 -0x24,0x30,0xD4,0x00,
82503 -0x24,0x38,0xF4,0x00,
82504 -0x02,0x24,0x04,0x00,
82505 -0x20,0x01,0x03,0x24,
82506 -0x01,0x00,0x42,0x2C,
82507 -0x02,0x2C,0x05,0x00,
82508 -0x02,0x34,0x06,0x00,
82509 -0x1A,0xFF,0x83,0x14,
82510 -0x02,0x3C,0x07,0x00,
82511 -0x80,0x00,0x03,0x24,
82512 -0x20,0xFF,0x83,0x14,
82513 -0x21,0x40,0x00,0x00,
82514 -0xDA,0x28,0x00,0x08,
82515 -0x21,0x20,0x00,0x00,
82516 -0x00,0x00,0x62,0x8C,
82517 -0x9C,0x0E,0x65,0x36,
82518 -0xA4,0x0E,0x66,0x36,
82519 -0x24,0x10,0x54,0x00,
82520 -0x02,0x14,0x02,0x00,
82521 -0x00,0x00,0xE2,0xAE,
82522 -0x00,0x00,0xA4,0x8C,
82523 -0xAC,0x0E,0x67,0x36,
82524 -0xB4,0x0E,0x65,0x36,
82525 -0x24,0x20,0x94,0x00,
82526 -0x02,0x24,0x04,0x00,
82527 -0x04,0x00,0xE4,0xAE,
82528 -0x00,0x00,0xC3,0x8C,
82529 -0xC4,0x0E,0x64,0x36,
82530 -0x24,0x18,0x74,0x00,
82531 -0x02,0x1C,0x03,0x00,
82532 -0x08,0x00,0xE3,0xAE,
82533 -0x00,0x00,0xE2,0x8C,
82534 -0x00,0x00,0x00,0x00,
82535 -0x24,0x10,0x54,0x00,
82536 -0x02,0x14,0x02,0x00,
82537 -0x0C,0x00,0xE2,0xAE,
82538 -0x00,0x00,0xA3,0x8C,
82539 -0x00,0x00,0x00,0x00,
82540 -0x24,0x18,0x74,0x00,
82541 -0x02,0x1C,0x03,0x00,
82542 -0x10,0x00,0xE3,0xAE,
82543 -0x25,0xB0,0x03,0x3C,
82544 -0xBC,0x0E,0x63,0x34,
82545 -0x00,0x00,0x62,0x8C,
82546 -0x00,0x00,0x00,0x00,
82547 -0x24,0x10,0x54,0x00,
82548 -0x02,0x14,0x02,0x00,
82549 -0x14,0x00,0xE2,0xAE,
82550 -0x00,0x00,0x83,0x8C,
82551 -0x00,0x00,0x00,0x00,
82552 -0x24,0x18,0x74,0x00,
82553 -0x02,0x1C,0x03,0x00,
82554 -0x18,0x00,0xE3,0xAE,
82555 -0x25,0xB0,0x03,0x3C,
82556 -0xCC,0x0E,0x63,0x34,
82557 -0x00,0x00,0x62,0x8C,
82558 -0x00,0x00,0x00,0x00,
82559 -0x24,0x10,0x54,0x00,
82560 -0x02,0x14,0x02,0x00,
82561 -0x1C,0x00,0xE2,0xAE,
82562 -0x01,0x00,0xD6,0x26,
82563 -0x03,0x00,0xC2,0x2E,
82564 -0xC7,0xFE,0x40,0x14,
82565 -0x20,0x00,0xF7,0x26,
82566 -0x10,0x00,0xB0,0x8F,
82567 -0x00,0x00,0x00,0x00,
82568 -0x49,0x01,0x00,0x16,
82569 -0x00,0x00,0x00,0x00,
82570 -0x30,0x00,0xB1,0x8F,
82571 -0x00,0x00,0x00,0x00,
82572 -0x06,0x00,0x20,0x16,
82573 -0x21,0x20,0x00,0x02,
82574 -0x50,0x00,0xA2,0x8F,
82575 -0x00,0x00,0x00,0x00,
82576 -0x29,0x00,0x40,0x10,
82577 -0xFF,0x00,0x05,0x24,
82578 -0x21,0x20,0x00,0x02,
82579 -0x05,0x28,0x00,0x0C,
82580 -0x21,0x28,0x20,0x02,
82581 -0x03,0x00,0x42,0x2C,
82582 -0x08,0x00,0x40,0x10,
82583 -0x00,0x00,0x00,0x00,
82584 -0x34,0x00,0xA5,0x8F,
82585 -0x14,0x00,0xA4,0x8F,
82586 -0x05,0x28,0x00,0x0C,
82587 -0x00,0x00,0x00,0x00,
82588 -0x03,0x00,0x42,0x2C,
82589 -0x1C,0x00,0x40,0x14,
82590 -0x21,0x28,0x00,0x00,
82591 -0x50,0x00,0xB2,0x8F,
82592 -0x21,0x20,0x00,0x02,
82593 -0x05,0x28,0x00,0x0C,
82594 -0x21,0x28,0x40,0x02,
82595 -0x03,0x00,0x42,0x2C,
82596 -0x09,0x00,0x40,0x10,
82597 -0x21,0x20,0x20,0x02,
82598 -0x54,0x00,0xA5,0x8F,
82599 -0x14,0x00,0xA4,0x8F,
82600 -0x05,0x28,0x00,0x0C,
82601 -0x00,0x00,0x00,0x00,
82602 -0x03,0x00,0x42,0x2C,
82603 -0x0E,0x00,0x40,0x14,
82604 -0x21,0x28,0x00,0x00,
82605 -0x21,0x20,0x20,0x02,
82606 -0x05,0x28,0x00,0x0C,
82607 -0x21,0x28,0x40,0x02,
82608 -0x03,0x00,0x42,0x2C,
82609 -0xE0,0x00,0x40,0x10,
82610 -0x00,0x00,0x00,0x00,
82611 -0x54,0x00,0xA5,0x8F,
82612 -0x34,0x00,0xA4,0x8F,
82613 -0x05,0x28,0x00,0x0C,
82614 -0x00,0x00,0x00,0x00,
82615 -0x03,0x00,0x42,0x2C,
82616 -0xD9,0x00,0x40,0x10,
82617 -0x01,0x00,0x05,0x24,
82618 -0xFF,0x00,0x02,0x24,
82619 -0xDB,0x00,0xA2,0x10,
82620 -0x25,0xB0,0x03,0x3C,
82621 -0x10,0x00,0xA2,0x27,
82622 -0x40,0x29,0x05,0x00,
82623 -0x02,0x80,0x0F,0x3C,
82624 -0x21,0x28,0xA2,0x00,
82625 -0x30,0x1F,0xEC,0x25,
82626 -0x00,0x00,0xA6,0x8C,
82627 -0x0C,0x00,0xA7,0x8C,
82628 -0x0C,0x00,0x83,0x8D,
82629 -0x10,0x00,0x84,0x8D,
82630 -0x04,0x00,0xA8,0x8C,
82631 -0x10,0x00,0xA9,0x8C,
82632 -0x00,0xFC,0x02,0x24,
82633 -0x08,0x00,0xAA,0x8C,
82634 -0x14,0x00,0xAB,0x8C,
82635 -0x24,0x20,0x82,0x00,
82636 -0xFF,0x03,0xC6,0x30,
82637 -0x24,0x18,0x62,0x00,
82638 -0xFF,0x03,0xE7,0x30,
82639 -0xF0,0xFF,0x02,0x3C,
82640 -0xFF,0x03,0x42,0x34,
82641 -0x25,0x18,0x66,0x00,
82642 -0x25,0x20,0x87,0x00,
82643 -0xFF,0x03,0x08,0x31,
82644 -0xFF,0x03,0x29,0x31,
82645 -0x24,0x20,0x82,0x00,
82646 -0x24,0x18,0x62,0x00,
82647 -0x80,0x42,0x08,0x00,
82648 -0x80,0x4A,0x09,0x00,
82649 -0x0F,0xC0,0x02,0x3C,
82650 -0x1C,0x00,0xA6,0x8C,
82651 -0x18,0x00,0xA7,0x8C,
82652 -0xFF,0xFF,0x42,0x34,
82653 -0x25,0x18,0x68,0x00,
82654 -0x25,0x20,0x89,0x00,
82655 -0xFF,0x03,0x4A,0x31,
82656 -0xFF,0x03,0x6B,0x31,
82657 -0x24,0x20,0x82,0x00,
82658 -0x00,0x55,0x0A,0x00,
82659 -0x24,0x18,0x62,0x00,
82660 -0x00,0x5D,0x0B,0x00,
82661 -0x25,0x18,0x6A,0x00,
82662 -0x25,0x20,0x8B,0x00,
82663 -0x16,0x00,0x86,0xA5,
82664 -0x0C,0x00,0x83,0xAD,
82665 -0x10,0x00,0x84,0xAD,
82666 -0x14,0x00,0x87,0xA5,
82667 -0x30,0x1F,0xF1,0x25,
82668 -0x10,0x00,0x22,0x8E,
82669 -0x01,0x00,0x03,0x24,
82670 -0x82,0x17,0x02,0x00,
82671 -0x4D,0x00,0x43,0x10,
82672 -0x25,0xB0,0x12,0x3C,
82673 -0x0C,0x00,0x23,0x8E,
82674 -0x80,0x0C,0x44,0x36,
82675 -0x00,0x00,0x88,0x8C,
82676 -0x00,0x02,0x62,0x30,
82677 -0xC0,0xFF,0x13,0x3C,
82678 -0x82,0x6D,0x08,0x00,
82679 -0x03,0x00,0x40,0x10,
82680 -0xFF,0x03,0x65,0x30,
82681 -0x00,0xFC,0x02,0x24,
82682 -0x25,0x28,0xA2,0x00,
82683 -0x18,0x00,0xAD,0x00,
82684 -0x82,0x62,0x03,0x00,
82685 -0xFF,0x03,0x8C,0x31,
82686 -0x00,0x02,0x83,0x31,
82687 -0x12,0x10,0x00,0x00,
82688 -0x02,0x12,0x02,0x00,
82689 -0x03,0x00,0x60,0x10,
82690 -0xFF,0x03,0x46,0x30,
82691 -0x00,0xFC,0x02,0x24,
82692 -0x25,0x60,0x82,0x01,
82693 -0x18,0x00,0x8D,0x01,
82694 -0x00,0xFC,0x74,0x36,
82695 -0x24,0x28,0x14,0x01,
82696 -0x12,0x80,0x00,0x00,
82697 -0x02,0x82,0x10,0x00,
82698 -0x3F,0x00,0x02,0x32,
82699 -0x00,0x14,0x02,0x00,
82700 -0x25,0x28,0xA2,0x00,
82701 -0x02,0x5C,0x00,0x0C,
82702 -0x25,0x28,0xA6,0x00,
82703 -0x94,0x0C,0x44,0x36,
82704 -0x00,0x00,0x85,0x8C,
82705 -0xFF,0x0F,0x02,0x3C,
82706 -0xFF,0xFF,0x55,0x34,
82707 -0xC0,0x03,0x10,0x32,
82708 -0x24,0x28,0xB5,0x00,
82709 -0x80,0x85,0x10,0x00,
82710 -0x02,0x5C,0x00,0x0C,
82711 -0x25,0x28,0xB0,0x00,
82712 -0x10,0x00,0x2C,0x8E,
82713 -0x88,0x0C,0x44,0x36,
82714 -0x00,0x00,0x88,0x8C,
82715 -0x82,0x2A,0x0C,0x00,
82716 -0xFF,0x03,0xA5,0x30,
82717 -0x24,0x10,0x13,0x01,
82718 -0x00,0x02,0xA3,0x30,
82719 -0x03,0x00,0x60,0x10,
82720 -0x82,0x6D,0x02,0x00,
82721 -0x00,0xFC,0x02,0x24,
82722 -0x25,0x28,0xA2,0x00,
82723 -0x18,0x00,0xAD,0x00,
82724 -0x02,0x65,0x0C,0x00,
82725 -0xFF,0x03,0x8C,0x31,
82726 -0x00,0x02,0x83,0x31,
82727 -0x12,0x10,0x00,0x00,
82728 -0x02,0x12,0x02,0x00,
82729 -0x03,0x00,0x60,0x10,
82730 -0xFF,0x03,0x46,0x30,
82731 -0x00,0xFC,0x02,0x24,
82732 -0x25,0x60,0x82,0x01,
82733 -0x18,0x00,0x8D,0x01,
82734 -0x24,0x28,0x14,0x01,
82735 -0x12,0x80,0x00,0x00,
82736 -0x02,0x82,0x10,0x00,
82737 -0x3F,0x00,0x02,0x32,
82738 -0x00,0x14,0x02,0x00,
82739 -0x25,0x28,0xA2,0x00,
82740 -0x02,0x5C,0x00,0x0C,
82741 -0x25,0x28,0xA6,0x00,
82742 -0x9C,0x0C,0x44,0x36,
82743 -0x00,0x00,0x85,0x8C,
82744 -0xC0,0x03,0x10,0x32,
82745 -0x80,0x85,0x10,0x00,
82746 -0x24,0x28,0xB5,0x00,
82747 -0x02,0x5C,0x00,0x0C,
82748 -0x25,0x28,0xB0,0x00,
82749 -0x78,0x00,0xA5,0x8F,
82750 -0x25,0xB0,0x10,0x3C,
82751 -0x02,0x5C,0x00,0x0C,
82752 -0xE0,0x0E,0x04,0x36,
82753 -0x7C,0x00,0xA5,0x8F,
82754 -0x02,0x5C,0x00,0x0C,
82755 -0xDC,0x0E,0x04,0x36,
82756 -0x80,0x00,0xA5,0x8F,
82757 -0x02,0x5C,0x00,0x0C,
82758 -0x70,0x0E,0x04,0x36,
82759 -0x84,0x00,0xA5,0x8F,
82760 -0x02,0x5C,0x00,0x0C,
82761 -0x74,0x0E,0x04,0x36,
82762 -0x88,0x00,0xA5,0x8F,
82763 -0x02,0x5C,0x00,0x0C,
82764 -0x78,0x0E,0x04,0x36,
82765 -0x8C,0x00,0xA5,0x8F,
82766 -0x02,0x5C,0x00,0x0C,
82767 -0x7C,0x0E,0x04,0x36,
82768 -0x90,0x00,0xA5,0x8F,
82769 -0x02,0x5C,0x00,0x0C,
82770 -0x80,0x0E,0x04,0x36,
82771 -0x94,0x00,0xA5,0x8F,
82772 -0x02,0x5C,0x00,0x0C,
82773 -0x84,0x0E,0x04,0x36,
82774 -0x98,0x00,0xA5,0x8F,
82775 -0x02,0x5C,0x00,0x0C,
82776 -0x88,0x0E,0x04,0x36,
82777 -0x9C,0x00,0xA5,0x8F,
82778 -0x02,0x5C,0x00,0x0C,
82779 -0x8C,0x0E,0x04,0x36,
82780 -0xA0,0x00,0xA5,0x8F,
82781 -0x02,0x5C,0x00,0x0C,
82782 -0xD0,0x0E,0x04,0x36,
82783 -0xA4,0x00,0xA5,0x8F,
82784 -0x02,0x5C,0x00,0x0C,
82785 -0xD4,0x0E,0x04,0x36,
82786 -0xA8,0x00,0xA5,0x8F,
82787 -0x88,0x0E,0x04,0x36,
82788 -0x02,0x5C,0x00,0x0C,
82789 -0x0F,0x00,0x10,0x3C,
82790 -0x70,0x00,0xA6,0x8F,
82791 -0xFF,0xFF,0x05,0x36,
82792 -0x5F,0x47,0x00,0x0C,
82793 -0x21,0x20,0x00,0x00,
82794 -0x54,0x22,0x00,0x0C,
82795 -0x64,0x00,0x04,0x24,
82796 -0xE6,0x44,0x00,0x0C,
82797 -0x01,0x00,0x04,0x24,
82798 -0x74,0x00,0xA6,0x8F,
82799 -0xFF,0xFF,0x05,0x36,
82800 -0x5F,0x47,0x00,0x0C,
82801 -0x21,0x20,0x00,0x00,
82802 -0x54,0x22,0x00,0x0C,
82803 -0x64,0x00,0x04,0x24,
82804 -0xE6,0x44,0x00,0x0C,
82805 -0x21,0x20,0x00,0x00,
82806 -0xFF,0xFF,0x05,0x36,
82807 -0x8A,0x47,0x00,0x0C,
82808 -0x1E,0x00,0x04,0x24,
82809 -0x21,0x88,0x40,0x00,
82810 -0xFD,0xFF,0x06,0x24,
82811 -0x01,0x00,0x42,0x34,
82812 -0x24,0x30,0x46,0x00,
82813 -0xFF,0xFF,0x05,0x36,
82814 -0x5F,0x47,0x00,0x0C,
82815 -0x1E,0x00,0x04,0x24,
82816 -0x25,0x22,0x00,0x0C,
82817 -0x03,0x00,0x04,0x24,
82818 -0xFF,0xFF,0x05,0x36,
82819 -0x03,0x00,0x26,0x36,
82820 -0x5F,0x47,0x00,0x0C,
82821 -0x1E,0x00,0x04,0x24,
82822 -0xDC,0x00,0xBF,0x8F,
82823 -0xD8,0x00,0xBE,0x8F,
82824 -0xD4,0x00,0xB7,0x8F,
82825 -0xD0,0x00,0xB6,0x8F,
82826 -0xCC,0x00,0xB5,0x8F,
82827 -0xC8,0x00,0xB4,0x8F,
82828 -0xC4,0x00,0xB3,0x8F,
82829 -0xC0,0x00,0xB2,0x8F,
82830 -0xBC,0x00,0xB1,0x8F,
82831 -0xB8,0x00,0xB0,0x8F,
82832 -0x08,0x00,0xE0,0x03,
82833 -0xE0,0x00,0xBD,0x27,
82834 -0xFF,0x00,0x05,0x24,
82835 -0xFF,0x00,0x02,0x24,
82836 -0x29,0xFF,0xA2,0x14,
82837 -0x10,0x00,0xA2,0x27,
82838 -0x25,0xB0,0x03,0x3C,
82839 -0x94,0x0E,0x62,0x34,
82840 -0x9C,0x0E,0x64,0x34,
82841 -0xA4,0x0E,0x65,0x34,
82842 -0xAC,0x0E,0x66,0x34,
82843 -0x02,0x80,0x0F,0x3C,
82844 -0x00,0x00,0x49,0x8C,
82845 -0x30,0x1F,0xED,0x25,
82846 -0x00,0x00,0x8C,0x8C,
82847 -0x00,0x00,0xAE,0x8C,
82848 -0x00,0x00,0xC7,0x8C,
82849 -0xB4,0x0E,0x62,0x34,
82850 -0x0C,0x00,0xA4,0x8D,
82851 -0x10,0x00,0xA5,0x8D,
82852 -0x00,0x00,0x4A,0x8C,
82853 -0xFF,0x03,0x06,0x3C,
82854 -0x00,0xFC,0x08,0x24,
82855 -0xBC,0x0E,0x62,0x34,
82856 -0x24,0x48,0x26,0x01,
82857 -0x24,0x38,0xE6,0x00,
82858 -0x00,0x00,0x4B,0x8C,
82859 -0x24,0x28,0xA8,0x00,
82860 -0x24,0x20,0x88,0x00,
82861 -0x02,0x3C,0x07,0x00,
82862 -0xCC,0x0E,0x68,0x34,
82863 -0x02,0x4C,0x09,0x00,
82864 -0xC4,0x0E,0x63,0x34,
82865 -0xF0,0xFF,0x02,0x3C,
82866 -0xFF,0x03,0x42,0x34,
82867 -0x25,0x28,0xA7,0x00,
82868 -0x25,0x20,0x89,0x00,
82869 -0x00,0x00,0x67,0x8C,
82870 -0x24,0x60,0x86,0x01,
82871 -0x00,0x00,0x03,0x8D,
82872 -0x24,0x50,0x46,0x01,
82873 -0x24,0x28,0xA2,0x00,
82874 -0x24,0x20,0x82,0x00,
82875 -0x82,0x61,0x0C,0x00,
82876 -0x82,0x51,0x0A,0x00,
82877 -0x0F,0xC0,0x02,0x3C,
82878 -0xFF,0xFF,0x42,0x34,
82879 -0x25,0x20,0x8C,0x00,
82880 -0x25,0x28,0xAA,0x00,
82881 -0x24,0x70,0xC6,0x01,
82882 -0x24,0x58,0x66,0x01,
82883 -0x24,0x28,0xA2,0x00,
82884 -0x24,0x18,0x66,0x00,
82885 -0x00,0x71,0x0E,0x00,
82886 -0x24,0x20,0x82,0x00,
82887 -0x00,0x59,0x0B,0x00,
82888 -0x24,0x38,0xE6,0x00,
82889 -0x25,0x20,0x8E,0x00,
82890 -0x25,0x28,0xAB,0x00,
82891 -0x02,0x3C,0x07,0x00,
82892 -0x02,0x1C,0x03,0x00,
82893 -0x16,0x00,0xA3,0xA5,
82894 -0x0C,0x00,0xA4,0xAD,
82895 -0x10,0x00,0xA5,0xAD,
82896 -0x4D,0x2A,0x00,0x08,
82897 -0x14,0x00,0xA7,0xA5,
82898 -0x30,0x00,0xB1,0x8F,
82899 -0xF5,0x29,0x00,0x08,
82900 -0x21,0x20,0x00,0x02,
82901 -0x25,0xB0,0x05,0x3C,
82902 -0x4C,0x00,0xA2,0x34,
82903 -0x02,0x80,0x07,0x3C,
82904 -0x00,0x00,0x43,0x90,
82905 -0x30,0x1F,0xE4,0x24,
82906 -0xC1,0x1B,0x82,0x90,
82907 -0x03,0x00,0x66,0x30,
82908 -0x24,0x00,0x46,0x10,
82909 -0x00,0x00,0x00,0x00,
82910 -0x18,0x00,0xC0,0x14,
82911 -0x25,0xB0,0x03,0x3C,
82912 -0xE6,0x02,0x82,0x90,
82913 -0x00,0x00,0x00,0x00,
82914 -0x15,0x00,0x40,0x14,
82915 -0x58,0x00,0x62,0x34,
82916 -0x1C,0x00,0x02,0x24,
82917 -0x50,0x0C,0xA3,0x34,
82918 -0x00,0x00,0x62,0xA0,
82919 -0x21,0x10,0x00,0x00,
82920 -0x01,0x00,0x42,0x24,
82921 -0xFF,0x00,0x42,0x30,
82922 -0x06,0x00,0x43,0x2C,
82923 -0xFD,0xFF,0x60,0x14,
82924 -0x01,0x00,0x42,0x24,
82925 -0x25,0xB0,0x02,0x3C,
82926 -0x58,0x0C,0x42,0x34,
82927 -0x1C,0x00,0x03,0x24,
82928 -0x00,0x00,0x43,0xA0,
82929 -0x21,0x10,0x00,0x00,
82930 -0x01,0x00,0x42,0x24,
82931 -0xFF,0x00,0x42,0x30,
82932 -0x06,0x00,0x43,0x2C,
82933 -0xFC,0xFF,0x60,0x14,
82934 -0x25,0xB0,0x03,0x3C,
82935 -0x58,0x00,0x62,0x34,
82936 -0x00,0x00,0x45,0x8C,
82937 -0x29,0xB0,0x04,0x3C,
82938 -0x5C,0x00,0x63,0x34,
82939 -0x00,0x00,0x85,0xAC,
82940 -0x00,0x00,0x65,0x8C,
82941 -0x30,0x1F,0xE2,0x24,
82942 -0x04,0x00,0x84,0x34,
82943 -0xC1,0x1B,0x46,0xA0,
82944 -0x00,0x00,0x85,0xAC,
82945 -0x08,0x00,0xE0,0x03,
82946 -0x21,0x10,0x00,0x00,
82947 -0x25,0xB0,0x02,0x3C,
82948 -0xE8,0xFF,0xBD,0x27,
82949 -0x10,0x00,0xBF,0xAF,
82950 -0x2D,0x0A,0x46,0x34,
82951 -0xA2,0x0D,0x43,0x34,
82952 -0xA4,0x0D,0x44,0x34,
82953 -0xA6,0x0D,0x45,0x34,
82954 -0xA8,0x0D,0x42,0x34,
82955 -0x00,0x00,0x67,0x94,
82956 -0x00,0x00,0x88,0x94,
82957 -0x00,0x00,0xA9,0x94,
82958 -0x00,0x00,0x44,0x94,
82959 -0x00,0x00,0xC3,0x90,
82960 -0x02,0x80,0x0A,0x3C,
82961 -0x30,0x1F,0x42,0x25,
82962 -0x40,0x00,0x63,0x34,
82963 -0xFF,0x00,0x63,0x30,
82964 -0xDE,0x02,0x44,0xA4,
82965 -0x00,0x00,0xC3,0xA0,
82966 -0xD8,0x02,0x47,0xA4,
82967 -0xDA,0x02,0x48,0xA4,
82968 -0xDC,0x02,0x49,0xA4,
82969 -0x21,0x10,0x00,0x00,
82970 -0x01,0x00,0x42,0x24,
82971 -0xFF,0x00,0x42,0x30,
82972 -0x06,0x00,0x43,0x2C,
82973 -0xFD,0xFF,0x60,0x14,
82974 -0x01,0x00,0x42,0x24,
82975 -0x25,0xB0,0x07,0x3C,
82976 -0x5B,0x0A,0xE2,0x34,
82977 -0x00,0x00,0x44,0x90,
82978 -0x30,0x1F,0x46,0x25,
82979 -0x5C,0x0A,0xE2,0x34,
82980 -0x00,0x00,0x45,0x90,
82981 -0xD8,0x02,0xC3,0x94,
82982 -0xDA,0x02,0xC2,0x94,
82983 -0xDC,0x02,0xC9,0x94,
82984 -0xDE,0x02,0xC8,0x94,
82985 -0xFF,0x00,0x84,0x30,
82986 -0x21,0x18,0x62,0x00,
82987 -0x00,0x22,0x04,0x00,
82988 -0xFF,0x00,0xA5,0x30,
82989 -0x21,0x20,0x85,0x00,
82990 -0x21,0x18,0x69,0x00,
82991 -0xFF,0xFF,0x82,0x30,
82992 -0x21,0x18,0x68,0x00,
82993 -0x21,0x18,0x62,0x00,
82994 -0x64,0x0C,0xE7,0x34,
82995 -0xFF,0xFF,0x42,0x30,
82996 -0xE0,0x02,0xC3,0xAC,
82997 -0x00,0x00,0xE2,0xA4,
82998 -0xE4,0x02,0xC4,0xA4,
82999 -0x21,0x10,0x00,0x00,
83000 -0x01,0x00,0x42,0x24,
83001 -0xFF,0x00,0x42,0x30,
83002 -0x06,0x00,0x43,0x2C,
83003 -0xFD,0xFF,0x60,0x14,
83004 -0x01,0x00,0x42,0x24,
83005 -0x30,0x1F,0x42,0x8D,
83006 -0x01,0x00,0x03,0x24,
83007 -0x0F,0x00,0x44,0x30,
83008 -0x07,0x00,0x83,0x10,
83009 -0x30,0x1F,0x45,0x25,
83010 -0xB6,0x5F,0x00,0x0C,
83011 -0x00,0x00,0x00,0x00,
83012 -0x10,0x00,0xBF,0x8F,
83013 -0x21,0x10,0x00,0x00,
83014 -0x08,0x00,0xE0,0x03,
83015 -0x18,0x00,0xBD,0x27,
83016 -0xE4,0x02,0xA2,0x8C,
83017 -0x00,0x00,0x00,0x00,
83018 -0x02,0x17,0x02,0x00,
83019 -0x03,0x00,0x42,0x30,
83020 -0xF5,0xFF,0x40,0x14,
83021 -0x25,0xB0,0x02,0x3C,
83022 -0x4C,0x00,0x42,0x34,
83023 -0x00,0x00,0x43,0x90,
83024 -0x00,0x00,0x00,0x00,
83025 -0x03,0x00,0x63,0x30,
83026 -0x3F,0x00,0x64,0x10,
83027 -0x30,0x1F,0x44,0x25,
83028 -0xE6,0x02,0x82,0x90,
83029 -0x00,0x00,0x00,0x00,
83030 -0x07,0x00,0x40,0x14,
83031 -0x01,0x00,0x03,0x24,
83032 -0x30,0x1F,0x42,0x8D,
83033 -0x00,0x00,0x00,0x00,
83034 -0x02,0x12,0x02,0x00,
83035 -0x0F,0x00,0x42,0x30,
83036 -0x3C,0x00,0x43,0x10,
83037 -0x25,0xB0,0x02,0x3C,
83038 -0x30,0x1F,0x45,0x25,
83039 -0xE6,0x02,0xA3,0x90,
83040 -0xFF,0x00,0x02,0x24,
83041 -0xE0,0xFF,0x62,0x14,
83042 -0x25,0xB0,0x03,0x3C,
83043 -0xC8,0x02,0xA2,0x94,
83044 -0xE0,0x02,0xA6,0x8C,
83045 -0x50,0x0C,0x63,0x34,
83046 -0x00,0x00,0x64,0x90,
83047 -0x2B,0x10,0xC2,0x00,
83048 -0x85,0x00,0x40,0x10,
83049 -0x7F,0x00,0x84,0x30,
83050 -0xFF,0xFF,0x82,0x24,
83051 -0xFF,0x00,0x44,0x30,
83052 -0x30,0x1F,0x45,0x25,
83053 -0xD0,0x02,0xA3,0x90,
83054 -0x00,0x00,0x00,0x00,
83055 -0x2B,0x10,0x64,0x00,
83056 -0x78,0x00,0x40,0x10,
83057 -0x00,0x00,0x00,0x00,
83058 -0x21,0x20,0x60,0x00,
83059 -0x30,0x1F,0x43,0x25,
83060 -0xE0,0x02,0x62,0x8C,
83061 -0x00,0x00,0x00,0x00,
83062 -0x11,0x27,0x42,0x2C,
83063 -0x6D,0x00,0x40,0x14,
83064 -0x3A,0x00,0x82,0x2C,
83065 -0x32,0x00,0x04,0x24,
83066 -0x44,0x00,0x03,0x24,
83067 -0x25,0xB0,0x02,0x3C,
83068 -0x30,0x0C,0x42,0x34,
83069 -0x00,0x00,0x43,0xA0,
83070 -0x25,0xB0,0x02,0x3C,
83071 -0x50,0x0C,0x42,0x34,
83072 -0x00,0x00,0x44,0xA0,
83073 -0x21,0x10,0x00,0x00,
83074 -0x01,0x00,0x42,0x24,
83075 -0xFF,0x00,0x42,0x30,
83076 -0x06,0x00,0x43,0x2C,
83077 -0xFD,0xFF,0x60,0x14,
83078 -0x01,0x00,0x42,0x24,
83079 -0x25,0xB0,0x02,0x3C,
83080 -0x58,0x0C,0x42,0x34,
83081 -0x00,0x00,0x44,0xA0,
83082 -0x21,0x10,0x00,0x00,
83083 -0x01,0x00,0x42,0x24,
83084 -0xFF,0x00,0x42,0x30,
83085 -0x06,0x00,0x43,0x2C,
83086 -0xFD,0xFF,0x60,0x14,
83087 -0x01,0x00,0x42,0x24,
83088 -0xA4,0x2B,0x00,0x08,
83089 -0x00,0x00,0x00,0x00,
83090 -0xE6,0x02,0xA2,0x90,
83091 -0x00,0x00,0x00,0x00,
83092 -0xBF,0xFF,0x40,0x14,
83093 -0x00,0x00,0x00,0x00,
83094 -0xFF,0xFF,0x02,0x24,
83095 -0xB6,0x2B,0x00,0x08,
83096 -0xE6,0x02,0xA2,0xA0,
83097 -0x4C,0x00,0x42,0x34,
83098 -0x00,0x00,0x43,0x90,
83099 -0x00,0x00,0x00,0x00,
83100 -0x03,0x00,0x63,0x30,
83101 -0xA4,0xFF,0x60,0x10,
83102 -0xFF,0xFF,0x02,0x34,
83103 -0x80,0x36,0x83,0x8C,
83104 -0x00,0x00,0x00,0x00,
83105 -0xA0,0xFF,0x62,0x10,
83106 -0x00,0x00,0x00,0x00,
83107 -0xE0,0x02,0x83,0x8C,
83108 -0x00,0x00,0x00,0x00,
83109 -0x65,0x00,0x62,0x2C,
83110 -0x59,0x00,0x40,0x14,
83111 -0x28,0x00,0x62,0x2C,
83112 -0xD2,0x02,0x83,0x90,
83113 -0x00,0x00,0x00,0x00,
83114 -0x00,0x16,0x03,0x00,
83115 -0x03,0x16,0x02,0x00,
83116 -0xFE,0xFF,0x42,0x24,
83117 -0xFC,0xFF,0x42,0x28,
83118 -0x02,0x00,0x40,0x10,
83119 -0xFE,0xFF,0x62,0x24,
83120 -0xFC,0xFF,0x02,0x24,
83121 -0xD2,0x02,0x82,0xA0,
83122 -0x30,0x1F,0x45,0x25,
83123 -0x80,0x36,0xA2,0x8C,
83124 -0xD2,0x02,0xA3,0x90,
83125 -0xCE,0x02,0xA6,0x90,
83126 -0x02,0x11,0x02,0x00,
83127 -0x7F,0x00,0x42,0x30,
83128 -0x0A,0x00,0x44,0x24,
83129 -0x23,0x18,0x83,0x00,
83130 -0x00,0x26,0x03,0x00,
83131 -0x03,0x26,0x04,0x00,
83132 -0xFF,0x00,0xC2,0x30,
83133 -0x2A,0x10,0x44,0x00,
83134 -0x4D,0x00,0x40,0x10,
83135 -0x00,0x00,0x00,0x00,
83136 -0x00,0x26,0x06,0x00,
83137 -0x03,0x26,0x04,0x00,
83138 -0x30,0x1F,0x43,0x25,
83139 -0xE0,0x02,0x62,0x8C,
83140 -0x00,0x00,0x00,0x00,
83141 -0x11,0x27,0x42,0x2C,
83142 -0x33,0x00,0x40,0x14,
83143 -0x3A,0x00,0x82,0x28,
83144 -0x32,0x00,0x82,0x28,
83145 -0x30,0x00,0x40,0x10,
83146 -0x3A,0x00,0x82,0x28,
83147 -0x32,0x00,0x04,0x24,
83148 -0x44,0x00,0x03,0x24,
83149 -0x25,0xB0,0x02,0x3C,
83150 -0x30,0x0C,0x42,0x34,
83151 -0x00,0x00,0x43,0xA0,
83152 -0x25,0xB0,0x02,0x3C,
83153 -0x50,0x0C,0x42,0x34,
83154 -0xFF,0x00,0x84,0x30,
83155 -0x00,0x00,0x44,0xA0,
83156 -0x21,0x10,0x00,0x00,
83157 -0x01,0x00,0x42,0x24,
83158 -0xFF,0x00,0x42,0x30,
83159 -0x06,0x00,0x43,0x2C,
83160 -0xFD,0xFF,0x60,0x14,
83161 -0x01,0x00,0x42,0x24,
83162 -0x25,0xB0,0x02,0x3C,
83163 -0x58,0x0C,0x42,0x34,
83164 -0x00,0x00,0x44,0xA0,
83165 -0x21,0x10,0x00,0x00,
83166 -0x01,0x00,0x42,0x24,
83167 -0xFF,0x00,0x42,0x30,
83168 -0x06,0x00,0x43,0x2C,
83169 -0xFD,0xFF,0x60,0x14,
83170 -0x01,0x00,0x42,0x24,
83171 -0xA4,0x2B,0x00,0x08,
83172 -0x00,0x00,0x00,0x00,
83173 -0x95,0xFF,0x40,0x10,
83174 -0x48,0x00,0x03,0x24,
83175 -0xDD,0x2B,0x00,0x08,
83176 -0x44,0x00,0x03,0x24,
83177 -0xD1,0x02,0xA3,0x90,
83178 -0x00,0x00,0x00,0x00,
83179 -0x2B,0x10,0x83,0x00,
83180 -0xD5,0x2B,0x00,0x08,
83181 -0x0B,0x20,0x62,0x00,
83182 -0xCA,0x02,0xA2,0x94,
83183 -0x00,0x00,0x00,0x00,
83184 -0x2B,0x10,0xC2,0x00,
83185 -0x7A,0xFF,0x40,0x14,
83186 -0x00,0x00,0x00,0x00,
83187 -0xCC,0x02,0xA2,0x94,
83188 -0x00,0x00,0x00,0x00,
83189 -0x2B,0x10,0xC2,0x00,
83190 -0x07,0x00,0x40,0x10,
83191 -0x00,0x00,0x00,0x00,
83192 -0xCD,0x2B,0x00,0x08,
83193 -0x01,0x00,0x82,0x24,
83194 -0xD2,0xFF,0x40,0x10,
83195 -0x48,0x00,0x03,0x24,
83196 -0x2F,0x2C,0x00,0x08,
83197 -0x44,0x00,0x03,0x24,
83198 -0xCD,0x2B,0x00,0x08,
83199 -0x02,0x00,0x82,0x24,
83200 -0xB2,0xFF,0x40,0x10,
83201 -0x30,0x1F,0x45,0x25,
83202 -0xD2,0x02,0x83,0x90,
83203 -0x00,0x00,0x00,0x00,
83204 -0x00,0x16,0x03,0x00,
83205 -0x03,0x16,0x02,0x00,
83206 -0x02,0x00,0x42,0x24,
83207 -0x0D,0x00,0x42,0x28,
83208 -0x09,0x00,0x40,0x14,
83209 -0x00,0x00,0x00,0x00,
83210 -0x13,0x2C,0x00,0x08,
83211 -0x0C,0x00,0x02,0x24,
83212 -0xCF,0x02,0xA3,0x80,
83213 -0x00,0x00,0x00,0x00,
83214 -0xFF,0x00,0x62,0x30,
83215 -0x2A,0x10,0x82,0x00,
83216 -0x24,0x2C,0x00,0x08,
83217 -0x0B,0x20,0x62,0x00,
83218 -0x13,0x2C,0x00,0x08,
83219 -0x02,0x00,0x62,0x24,
83220 -0xC0,0xFF,0xBD,0x27,
83221 -0x28,0x00,0xB4,0xAF,
83222 -0x25,0xB0,0x14,0x3C,
83223 -0x20,0x00,0xB2,0xAF,
83224 -0x1C,0x00,0xB1,0xAF,
83225 -0x18,0x00,0xB0,0xAF,
83226 -0x3C,0x00,0xBF,0xAF,
83227 -0x38,0x00,0xBE,0xAF,
83228 -0x34,0x00,0xB7,0xAF,
83229 -0x30,0x00,0xB6,0xAF,
83230 -0x2C,0x00,0xB5,0xAF,
83231 -0x24,0x00,0xB3,0xAF,
83232 -0xD8,0x00,0x86,0x36,
83233 -0x00,0x00,0xC3,0x90,
83234 -0x02,0x80,0x02,0x3C,
83235 -0x30,0x1F,0x51,0x24,
83236 -0x2A,0xB0,0x10,0x3C,
83237 -0xA0,0xFF,0x02,0x24,
83238 -0x25,0x18,0x62,0x00,
83239 -0x34,0x00,0x05,0x36,
83240 -0xFE,0xFF,0x02,0x24,
83241 -0xBC,0x02,0x33,0x92,
83242 -0x40,0x00,0x04,0x24,
83243 -0x00,0x00,0xC3,0xA0,
83244 -0x00,0x00,0xA2,0xA0,
83245 -0x25,0x24,0x00,0x0C,
83246 -0x00,0x9E,0x13,0x00,
83247 -0x21,0x90,0x40,0x00,
83248 -0x8A,0x00,0x40,0x12,
83249 -0x00,0x40,0x02,0x3C,
83250 -0x08,0x00,0x43,0x8E,
83251 -0xB0,0x03,0x82,0x36,
83252 -0x25,0xB0,0x1E,0x3C,
83253 -0x21,0x20,0x40,0x02,
83254 -0x00,0x00,0x43,0xAC,
83255 -0x0C,0x4D,0x00,0x0C,
83256 -0x21,0xB8,0x20,0x02,
83257 -0x42,0x00,0xD5,0x37,
83258 -0x03,0x0C,0xD1,0x37,
83259 -0x17,0x0E,0xD6,0x37,
83260 -0x04,0x00,0x14,0x24,
83261 -0x2A,0xB0,0x03,0x3C,
83262 -0x06,0x00,0x63,0x34,
83263 -0x00,0x00,0x62,0x94,
83264 -0x00,0x00,0x00,0x00,
83265 -0x00,0xFF,0x42,0x30,
83266 -0x0A,0x00,0x40,0x18,
83267 -0x00,0x00,0x00,0x00,
83268 -0x02,0x80,0x04,0x3C,
83269 -0x8C,0xF0,0x84,0x24,
83270 -0x00,0x00,0x83,0x8C,
83271 -0x00,0x00,0x00,0x00,
83272 -0x00,0x00,0x62,0x94,
83273 -0x00,0x00,0x00,0x00,
83274 -0x00,0xFF,0x42,0x30,
83275 -0xFC,0xFF,0x40,0x1C,
83276 -0x00,0x00,0x00,0x00,
83277 -0x08,0x00,0x45,0x8E,
83278 -0x20,0x10,0x06,0x3C,
83279 -0x01,0x00,0x04,0x24,
83280 -0x00,0xFE,0xC6,0x34,
83281 -0x40,0x00,0x07,0x24,
83282 -0x73,0x01,0x00,0x0C,
83283 -0x10,0x00,0xA4,0xAF,
83284 -0xB0,0x01,0x00,0x0C,
83285 -0x01,0x00,0x04,0x24,
83286 -0x02,0x80,0x02,0x3C,
83287 -0x90,0xF0,0x42,0x24,
83288 -0x00,0x00,0x45,0x8C,
83289 -0x01,0x00,0x03,0x24,
83290 -0x21,0x20,0x00,0x00,
83291 -0x00,0x00,0xA3,0xA0,
83292 -0xFF,0xFF,0x03,0x24,
83293 -0x00,0x00,0xA3,0xA2,
83294 -0x00,0x00,0x22,0x92,
83295 -0x00,0x00,0x00,0x00,
83296 -0xFF,0x00,0x42,0x30,
83297 -0x40,0x00,0x42,0x34,
83298 -0x00,0x00,0x22,0xA2,
83299 -0x01,0x00,0x82,0x24,
83300 -0xFF,0x00,0x44,0x30,
83301 -0x06,0x00,0x83,0x2C,
83302 -0xFD,0xFF,0x60,0x14,
83303 -0x01,0x00,0x82,0x24,
83304 -0x02,0x00,0x02,0x24,
83305 -0x02,0x80,0x04,0x3C,
83306 -0x00,0x00,0xA2,0xA0,
83307 -0x30,0x1F,0x83,0x24,
83308 -0xC1,0x02,0x62,0x90,
83309 -0x00,0x00,0xC4,0x92,
83310 -0x21,0x28,0x00,0x00,
83311 -0x00,0x00,0xC2,0xA2,
83312 -0xFF,0x00,0x90,0x30,
83313 -0x01,0x00,0xA2,0x24,
83314 -0xFF,0x00,0x45,0x30,
83315 -0x06,0x00,0xA3,0x2C,
83316 -0xFD,0xFF,0x60,0x14,
83317 -0x01,0x00,0xA2,0x24,
83318 -0xEF,0xFF,0x02,0x24,
83319 -0x64,0x00,0x04,0x24,
83320 -0x00,0x00,0xA2,0xA2,
83321 -0x54,0x22,0x00,0x0C,
83322 -0x00,0x00,0x00,0x00,
83323 -0x00,0x00,0x22,0x92,
83324 -0x21,0x20,0x00,0x00,
83325 -0xBF,0x00,0x42,0x30,
83326 -0x00,0x00,0x22,0xA2,
83327 -0x01,0x00,0x82,0x24,
83328 -0xFF,0x00,0x44,0x30,
83329 -0x06,0x00,0x83,0x2C,
83330 -0xFD,0xFF,0x60,0x14,
83331 -0x01,0x00,0x82,0x24,
83332 -0x54,0x22,0x00,0x0C,
83333 -0x84,0x03,0x04,0x24,
83334 -0xF4,0x08,0xC2,0x37,
83335 -0x00,0x00,0x43,0x8C,
83336 -0x00,0x80,0x04,0x3C,
83337 -0xDF,0x07,0x84,0x34,
83338 -0x00,0x00,0xD0,0xA2,
83339 -0x21,0x10,0x00,0x00,
83340 -0x24,0x28,0x64,0x00,
83341 -0x01,0x00,0x42,0x24,
83342 -0xFF,0x00,0x42,0x30,
83343 -0x06,0x00,0x43,0x2C,
83344 -0xFD,0xFF,0x60,0x14,
83345 -0x01,0x00,0x42,0x24,
83346 -0x00,0x00,0xA0,0xA2,
83347 -0x00,0x00,0x22,0x92,
83348 -0x21,0x20,0x00,0x00,
83349 -0xFF,0x00,0x42,0x30,
83350 -0x40,0x00,0x42,0x34,
83351 -0x00,0x00,0x22,0xA2,
83352 -0x01,0x00,0x82,0x24,
83353 -0xFF,0x00,0x44,0x30,
83354 -0x06,0x00,0x83,0x2C,
83355 -0xFD,0xFF,0x60,0x14,
83356 -0x01,0x00,0x82,0x24,
83357 -0xBE,0x02,0xE2,0x92,
83358 -0x1F,0x00,0xA3,0x30,
83359 -0x2B,0x10,0x62,0x00,
83360 -0x0A,0x00,0x40,0x10,
83361 -0x02,0x80,0x02,0x3C,
83362 -0xBF,0x02,0xE2,0x92,
83363 -0x00,0x00,0x00,0x00,
83364 -0x2B,0x10,0x43,0x00,
83365 -0x05,0x00,0x40,0x10,
83366 -0x02,0x80,0x02,0x3C,
83367 -0x01,0x00,0x02,0x3C,
83368 -0x25,0x10,0x62,0x00,
83369 -0x21,0x98,0x62,0x02,
83370 -0x02,0x80,0x02,0x3C,
83371 -0xDE,0x5D,0x43,0x90,
83372 -0x22,0x00,0x02,0x24,
83373 -0x19,0x00,0x62,0x10,
83374 -0x92,0x00,0x02,0x24,
83375 -0x18,0x00,0x62,0x10,
83376 -0x02,0x80,0x03,0x3C,
83377 -0xFF,0xFF,0x94,0x26,
83378 -0x54,0x22,0x00,0x0C,
83379 -0xF4,0x01,0x04,0x24,
83380 -0x89,0xFF,0x81,0x06,
83381 -0x2A,0xB0,0x03,0x3C,
83382 -0x04,0x00,0x40,0x12,
83383 -0x21,0x10,0x60,0x02,
83384 -0x3D,0x24,0x00,0x0C,
83385 -0x21,0x20,0x40,0x02,
83386 -0x21,0x10,0x60,0x02,
83387 -0x3C,0x00,0xBF,0x8F,
83388 -0x38,0x00,0xBE,0x8F,
83389 -0x34,0x00,0xB7,0x8F,
83390 -0x30,0x00,0xB6,0x8F,
83391 -0x2C,0x00,0xB5,0x8F,
83392 -0x28,0x00,0xB4,0x8F,
83393 -0x24,0x00,0xB3,0x8F,
83394 -0x20,0x00,0xB2,0x8F,
83395 -0x1C,0x00,0xB1,0x8F,
83396 -0x18,0x00,0xB0,0x8F,
83397 -0x08,0x00,0xE0,0x03,
83398 -0x40,0x00,0xBD,0x27,
83399 -0x02,0x80,0x03,0x3C,
83400 -0x30,0x1F,0x63,0x24,
83401 -0xBE,0x02,0x62,0x90,
83402 -0xC0,0x07,0xA3,0x30,
83403 -0x82,0x19,0x03,0x00,
83404 -0x2B,0x10,0x62,0x00,
83405 -0xE3,0xFF,0x40,0x10,
83406 -0x02,0x80,0x04,0x3C,
83407 -0x30,0x1F,0x84,0x24,
83408 -0xBF,0x02,0x82,0x90,
83409 -0x00,0x00,0x00,0x00,
83410 -0x2B,0x10,0x43,0x00,
83411 -0xDD,0xFF,0x40,0x10,
83412 -0x00,0x12,0x03,0x00,
83413 -0x10,0x00,0x03,0x3C,
83414 -0x25,0x10,0x43,0x00,
83415 -0x13,0x2D,0x00,0x08,
83416 -0x21,0x98,0x62,0x02,
83417 -0xE0,0xFF,0xBD,0x27,
83418 -0x10,0x00,0xB0,0xAF,
83419 -0x0F,0x00,0x10,0x3C,
83420 -0xFF,0xFF,0x05,0x36,
83421 -0xF0,0xF8,0x06,0x34,
83422 -0x15,0x00,0x04,0x24,
83423 -0x1C,0x00,0xBF,0xAF,
83424 -0x18,0x00,0xB2,0xAF,
83425 -0x5F,0x47,0x00,0x0C,
83426 -0x14,0x00,0xB1,0xAF,
83427 -0x54,0x22,0x00,0x0C,
83428 -0x64,0x00,0x04,0x24,
83429 -0x02,0x80,0x12,0x3C,
83430 -0xFF,0xFF,0x05,0x36,
83431 -0x56,0x30,0x06,0x24,
83432 -0x5F,0x47,0x00,0x0C,
83433 -0x1A,0x00,0x04,0x24,
83434 -0x30,0x1F,0x51,0x26,
83435 -0x54,0x22,0x00,0x0C,
83436 -0x64,0x00,0x04,0x24,
83437 -0x04,0x03,0x23,0x92,
83438 -0x04,0x00,0x02,0x24,
83439 -0x20,0x00,0x62,0x10,
83440 -0x25,0xB0,0x02,0x3C,
83441 -0x14,0x03,0x25,0x8E,
83442 -0x25,0xB0,0x10,0x3C,
83443 -0x43,0x60,0x00,0x0C,
83444 -0x00,0x0E,0x04,0x36,
83445 -0x14,0x03,0x25,0x8E,
83446 -0x43,0x60,0x00,0x0C,
83447 -0x04,0x0E,0x04,0x36,
83448 -0x18,0x03,0x25,0x8E,
83449 -0x43,0x60,0x00,0x0C,
83450 -0x08,0x0E,0x04,0x36,
83451 -0x14,0x03,0x25,0x8E,
83452 -0x43,0x60,0x00,0x0C,
83453 -0x10,0x0E,0x04,0x36,
83454 -0x14,0x03,0x25,0x8E,
83455 -0x43,0x60,0x00,0x0C,
83456 -0x14,0x0E,0x04,0x36,
83457 -0x14,0x03,0x25,0x8E,
83458 -0x43,0x60,0x00,0x0C,
83459 -0x18,0x0E,0x04,0x36,
83460 -0x14,0x03,0x25,0x8E,
83461 -0x43,0x60,0x00,0x0C,
83462 -0x1C,0x0E,0x04,0x36,
83463 -0x30,0x1F,0x43,0x26,
83464 -0x1C,0x00,0xBF,0x8F,
83465 -0x18,0x00,0xB2,0x8F,
83466 -0x14,0x00,0xB1,0x8F,
83467 -0x10,0x00,0xB0,0x8F,
83468 -0x04,0x00,0x02,0x24,
83469 -0x20,0x00,0xBD,0x27,
83470 -0x08,0x00,0xE0,0x03,
83471 -0x04,0x03,0x62,0xA0,
83472 -0x00,0x0E,0x42,0x34,
83473 -0x00,0x00,0x43,0x8C,
83474 -0x14,0x03,0x25,0x8E,
83475 -0x00,0x00,0x00,0x00,
83476 -0xDE,0xFF,0x65,0x14,
83477 -0x25,0xB0,0x10,0x3C,
83478 -0x6A,0x2D,0x00,0x08,
83479 -0x30,0x1F,0x43,0x26,
83480 -0xE0,0xFF,0xBD,0x27,
83481 -0x10,0x00,0xB0,0xAF,
83482 -0x0F,0x00,0x10,0x3C,
83483 -0xFF,0xFF,0x05,0x36,
83484 -0xF0,0xF8,0x06,0x34,
83485 -0x15,0x00,0x04,0x24,
83486 -0x1C,0x00,0xBF,0xAF,
83487 -0x18,0x00,0xB2,0xAF,
83488 -0x5F,0x47,0x00,0x0C,
83489 -0x14,0x00,0xB1,0xAF,
83490 -0x54,0x22,0x00,0x0C,
83491 -0x64,0x00,0x04,0x24,
83492 -0xFF,0xFF,0x05,0x36,
83493 -0x56,0x30,0x06,0x24,
83494 -0x5F,0x47,0x00,0x0C,
83495 -0x1A,0x00,0x04,0x24,
83496 -0x02,0x80,0x10,0x3C,
83497 -0x54,0x22,0x00,0x0C,
83498 -0x64,0x00,0x04,0x24,
83499 -0x30,0x1F,0x02,0x26,
83500 -0x04,0x03,0x46,0x90,
83501 -0x25,0xB0,0x11,0x3C,
83502 -0x10,0x10,0x12,0x3C,
83503 -0x01,0x00,0x03,0x24,
83504 -0x00,0x0E,0x24,0x36,
83505 -0x1E,0x00,0xC3,0x10,
83506 -0x10,0x10,0x45,0x36,
83507 -0x43,0x60,0x00,0x0C,
83508 -0x00,0x00,0x00,0x00,
83509 -0x04,0x0E,0x24,0x36,
83510 -0x43,0x60,0x00,0x0C,
83511 -0x10,0x10,0x45,0x36,
83512 -0x08,0x0E,0x24,0x36,
83513 -0x43,0x60,0x00,0x0C,
83514 -0x10,0x10,0x05,0x24,
83515 -0x10,0x0E,0x24,0x36,
83516 -0x43,0x60,0x00,0x0C,
83517 -0x10,0x10,0x45,0x36,
83518 -0x14,0x0E,0x24,0x36,
83519 -0x43,0x60,0x00,0x0C,
83520 -0x10,0x10,0x45,0x36,
83521 -0x18,0x0E,0x24,0x36,
83522 -0x43,0x60,0x00,0x0C,
83523 -0x10,0x10,0x45,0x36,
83524 -0x1C,0x0E,0x24,0x36,
83525 -0x43,0x60,0x00,0x0C,
83526 -0x10,0x10,0x45,0x36,
83527 -0x30,0x1F,0x03,0x26,
83528 -0x1C,0x00,0xBF,0x8F,
83529 -0x18,0x00,0xB2,0x8F,
83530 -0x14,0x00,0xB1,0x8F,
83531 -0x10,0x00,0xB0,0x8F,
83532 -0x01,0x00,0x02,0x24,
83533 -0x20,0x00,0xBD,0x27,
83534 -0x08,0x00,0xE0,0x03,
83535 -0x04,0x03,0x62,0xA0,
83536 -0x00,0x00,0x86,0x8C,
83537 -0x00,0x00,0x00,0x00,
83538 -0xE0,0xFF,0xC5,0x14,
83539 -0x30,0x1F,0x03,0x26,
83540 -0x1C,0x00,0xBF,0x8F,
83541 -0x18,0x00,0xB2,0x8F,
83542 -0x14,0x00,0xB1,0x8F,
83543 -0x10,0x00,0xB0,0x8F,
83544 -0x01,0x00,0x02,0x24,
83545 -0x20,0x00,0xBD,0x27,
83546 -0x08,0x00,0xE0,0x03,
83547 -0x04,0x03,0x62,0xA0,
83548 -0xD8,0xFF,0xBD,0x27,
83549 -0x1C,0x00,0xB3,0xAF,
83550 -0x02,0x80,0x13,0x3C,
83551 -0x14,0x00,0xB1,0xAF,
83552 -0x30,0x1F,0x71,0x26,
83553 -0x0C,0x03,0x26,0x8E,
83554 -0x10,0x00,0xB0,0xAF,
83555 -0x0F,0x00,0x10,0x3C,
83556 -0xFF,0xFF,0x05,0x36,
83557 -0x15,0x00,0x04,0x24,
83558 -0x20,0x00,0xBF,0xAF,
83559 -0x5F,0x47,0x00,0x0C,
83560 -0x18,0x00,0xB2,0xAF,
83561 -0x54,0x22,0x00,0x0C,
83562 -0x64,0x00,0x04,0x24,
83563 -0x10,0x03,0x26,0x8E,
83564 -0xFF,0xFF,0x05,0x36,
83565 -0x5F,0x47,0x00,0x0C,
83566 -0x1A,0x00,0x04,0x24,
83567 -0x54,0x22,0x00,0x0C,
83568 -0x64,0x00,0x04,0x24,
83569 -0x04,0x03,0x22,0x92,
83570 -0x25,0xB0,0x12,0x3C,
83571 -0x08,0x00,0x40,0x14,
83572 -0x08,0x0E,0x44,0x36,
83573 -0x25,0xB0,0x02,0x3C,
83574 -0x00,0x0E,0x42,0x34,
83575 -0x00,0x00,0x45,0x8C,
83576 -0xEC,0x02,0x23,0x8E,
83577 -0x00,0x00,0x00,0x00,
83578 -0x17,0x00,0xA3,0x10,
83579 -0x30,0x1F,0x62,0x26,
83580 -0xE8,0x02,0x25,0x8E,
83581 -0x43,0x60,0x00,0x0C,
83582 -0x00,0x00,0x00,0x00,
83583 -0xEC,0x02,0x25,0x8E,
83584 -0x43,0x60,0x00,0x0C,
83585 -0x00,0x0E,0x44,0x36,
83586 -0xF0,0x02,0x25,0x8E,
83587 -0x43,0x60,0x00,0x0C,
83588 -0x04,0x0E,0x44,0x36,
83589 -0xF4,0x02,0x25,0x8E,
83590 -0x43,0x60,0x00,0x0C,
83591 -0x10,0x0E,0x44,0x36,
83592 -0xF8,0x02,0x25,0x8E,
83593 -0x43,0x60,0x00,0x0C,
83594 -0x14,0x0E,0x44,0x36,
83595 -0xFC,0x02,0x25,0x8E,
83596 -0x43,0x60,0x00,0x0C,
83597 -0x18,0x0E,0x44,0x36,
83598 -0x00,0x03,0x25,0x8E,
83599 -0x43,0x60,0x00,0x0C,
83600 -0x1C,0x0E,0x44,0x36,
83601 -0x30,0x1F,0x62,0x26,
83602 -0x20,0x00,0xBF,0x8F,
83603 -0x1C,0x00,0xB3,0x8F,
83604 -0x18,0x00,0xB2,0x8F,
83605 -0x14,0x00,0xB1,0x8F,
83606 -0x10,0x00,0xB0,0x8F,
83607 -0x28,0x00,0xBD,0x27,
83608 -0x08,0x00,0xE0,0x03,
83609 -0x04,0x03,0x40,0xA0,
83610 -0xE0,0xFF,0xBD,0x27,
83611 -0x18,0x00,0xB2,0xAF,
83612 -0x02,0x80,0x12,0x3C,
83613 -0x14,0x00,0xB1,0xAF,
83614 -0x30,0x1F,0x51,0x26,
83615 -0x0C,0x03,0x26,0x8E,
83616 -0x10,0x00,0xB0,0xAF,
83617 -0x0F,0x00,0x10,0x3C,
83618 -0xFF,0xFF,0x05,0x36,
83619 -0x1C,0x00,0xBF,0xAF,
83620 -0x5F,0x47,0x00,0x0C,
83621 -0x15,0x00,0x04,0x24,
83622 -0x54,0x22,0x00,0x0C,
83623 -0x64,0x00,0x04,0x24,
83624 -0x10,0x03,0x26,0x8E,
83625 -0xFF,0xFF,0x05,0x36,
83626 -0x5F,0x47,0x00,0x0C,
83627 -0x1A,0x00,0x04,0x24,
83628 -0x54,0x22,0x00,0x0C,
83629 -0x64,0x00,0x04,0x24,
83630 -0x04,0x03,0x23,0x92,
83631 -0x03,0x00,0x02,0x24,
83632 -0x2C,0x00,0x62,0x10,
83633 -0x25,0xB0,0x02,0x3C,
83634 -0xEC,0x02,0x25,0x8E,
83635 -0x25,0xB0,0x10,0x3C,
83636 -0x43,0x60,0x00,0x0C,
83637 -0x00,0x0E,0x04,0x36,
83638 -0xF0,0x02,0x25,0x8E,
83639 -0x43,0x60,0x00,0x0C,
83640 -0x04,0x0E,0x04,0x36,
83641 -0xF4,0x02,0x25,0x8E,
83642 -0x43,0x60,0x00,0x0C,
83643 -0x10,0x0E,0x04,0x36,
83644 -0xF8,0x02,0x25,0x8E,
83645 -0x43,0x60,0x00,0x0C,
83646 -0x14,0x0E,0x04,0x36,
83647 -0xFC,0x02,0x25,0x8E,
83648 -0x43,0x60,0x00,0x0C,
83649 -0x18,0x0E,0x04,0x36,
83650 -0x00,0x03,0x25,0x8E,
83651 -0x43,0x60,0x00,0x0C,
83652 -0x1C,0x0E,0x04,0x36,
83653 -0x08,0x03,0x24,0x8E,
83654 -0xE8,0x02,0x22,0x8E,
83655 -0x00,0x00,0x00,0x00,
83656 -0x21,0x28,0x44,0x00,
83657 -0x00,0xFF,0xA3,0x30,
83658 -0xFF,0xFF,0x02,0x3C,
83659 -0xFF,0x00,0x42,0x34,
83660 -0x01,0x3F,0x63,0x2C,
83661 -0x24,0x10,0xA2,0x00,
83662 -0x0C,0x00,0x60,0x10,
83663 -0x08,0x0E,0x04,0x36,
83664 -0x43,0x60,0x00,0x0C,
83665 -0x00,0x00,0x00,0x00,
83666 -0x30,0x1F,0x43,0x26,
83667 -0x1C,0x00,0xBF,0x8F,
83668 -0x18,0x00,0xB2,0x8F,
83669 -0x14,0x00,0xB1,0x8F,
83670 -0x10,0x00,0xB0,0x8F,
83671 -0x03,0x00,0x02,0x24,
83672 -0x20,0x00,0xBD,0x27,
83673 -0x08,0x00,0xE0,0x03,
83674 -0x04,0x03,0x62,0xA0,
83675 -0x32,0x2E,0x00,0x08,
83676 -0x00,0x3F,0x45,0x34,
83677 -0x00,0x0E,0x42,0x34,
83678 -0x00,0x00,0x43,0x8C,
83679 -0xEC,0x02,0x25,0x8E,
83680 -0x00,0x00,0x00,0x00,
83681 -0xD2,0xFF,0x65,0x14,
83682 -0x25,0xB0,0x10,0x3C,
83683 -0x35,0x2E,0x00,0x08,
83684 -0x30,0x1F,0x43,0x26,
83685 -0xD8,0xFF,0xBD,0x27,
83686 -0x18,0x00,0xB2,0xAF,
83687 -0x02,0x80,0x12,0x3C,
83688 -0x20,0x00,0xB4,0xAF,
83689 -0x24,0x00,0xBF,0xAF,
83690 -0x1C,0x00,0xB3,0xAF,
83691 -0x14,0x00,0xB1,0xAF,
83692 -0x10,0x00,0xB0,0xAF,
83693 -0x30,0x1F,0x44,0x26,
83694 -0x0C,0x24,0x82,0x8C,
83695 -0x30,0x1F,0x43,0x8E,
83696 -0x04,0x03,0x93,0x90,
83697 -0x02,0x11,0x02,0x00,
83698 -0x7F,0x00,0x54,0x30,
83699 -0xF0,0xF0,0x63,0x30,
83700 -0x00,0x10,0x02,0x24,
83701 -0x6A,0x00,0x62,0x10,
83702 -0x01,0x00,0x02,0x24,
83703 -0x25,0xB0,0x08,0x3C,
83704 -0x4C,0x00,0x03,0x35,
83705 -0x00,0x00,0x62,0x90,
83706 -0x00,0x00,0x00,0x00,
83707 -0x03,0x00,0x42,0x30,
83708 -0x08,0x00,0x40,0x10,
83709 -0x30,0x1F,0x45,0x26,
83710 -0x30,0x1F,0x42,0x8E,
83711 -0x00,0x00,0x00,0x00,
83712 -0x02,0x13,0x02,0x00,
83713 -0x0F,0x00,0x42,0x30,
83714 -0x2F,0x00,0x40,0x10,
83715 -0x00,0x0E,0x05,0x35,
83716 -0x30,0x1F,0x45,0x26,
83717 -0x04,0x03,0xA2,0x8C,
83718 -0x00,0x00,0x00,0x00,
83719 -0x02,0x12,0x02,0x00,
83720 -0x0F,0x00,0x40,0x14,
83721 -0x30,0x1F,0x42,0x26,
83722 -0x25,0xB0,0x02,0x3C,
83723 -0x84,0x01,0x42,0x34,
83724 -0x00,0x00,0x44,0x8C,
83725 -0x0D,0x00,0x03,0x24,
83726 -0x7C,0x00,0x83,0x10,
83727 -0x3E,0x00,0x02,0x24,
83728 -0x4A,0x00,0x03,0x24,
83729 -0x1F,0x03,0xA2,0xA0,
83730 -0x1C,0x03,0xA3,0xA0,
83731 -0x45,0x00,0x02,0x24,
83732 -0x43,0x00,0x03,0x24,
83733 -0x1D,0x03,0xA2,0xA0,
83734 -0x1E,0x03,0xA3,0xA0,
83735 -0x30,0x1F,0x42,0x26,
83736 -0x0C,0x24,0x43,0x8C,
83737 -0x25,0xB0,0x02,0x3C,
83738 -0x60,0x0C,0x42,0x34,
83739 -0x02,0x19,0x03,0x00,
83740 -0xFF,0x00,0x63,0x30,
83741 -0x00,0x00,0x43,0xA0,
83742 -0x21,0x10,0x00,0x00,
83743 -0x01,0x00,0x42,0x24,
83744 -0xFF,0x00,0x42,0x30,
83745 -0x06,0x00,0x43,0x2C,
83746 -0xFD,0xFF,0x60,0x14,
83747 -0x01,0x00,0x42,0x24,
83748 -0x30,0x1F,0x45,0x8E,
83749 -0x10,0x10,0x02,0x24,
83750 -0xF0,0xF0,0xA3,0x30,
83751 -0x3F,0x00,0x62,0x10,
83752 -0x30,0x1F,0x44,0x26,
83753 -0x24,0x00,0xBF,0x8F,
83754 -0x20,0x00,0xB4,0x8F,
83755 -0x1C,0x00,0xB3,0x8F,
83756 -0x18,0x00,0xB2,0x8F,
83757 -0x14,0x00,0xB1,0x8F,
83758 -0x10,0x00,0xB0,0x8F,
83759 -0x21,0x10,0x00,0x00,
83760 -0x08,0x00,0xE0,0x03,
83761 -0x28,0x00,0xBD,0x27,
83762 -0x00,0x00,0xA2,0x8C,
83763 -0x00,0x00,0x00,0x00,
83764 -0x5F,0x00,0x40,0x10,
83765 -0x10,0x0E,0x07,0x35,
83766 -0x00,0x60,0x01,0x40,
83767 -0x01,0x00,0x21,0x34,
83768 -0x01,0x00,0x21,0x38,
83769 -0x00,0x60,0x81,0x40,
83770 -0x08,0x0E,0x02,0x35,
83771 -0x04,0x0E,0x03,0x35,
83772 -0x00,0x00,0x44,0x8C,
83773 -0x00,0x00,0xA5,0x8C,
83774 -0x00,0x00,0x66,0x8C,
83775 -0x02,0x80,0x02,0x3C,
83776 -0x30,0x1F,0x49,0x24,
83777 -0xE8,0x02,0x24,0xAD,
83778 -0xEC,0x02,0x25,0xAD,
83779 -0xF0,0x02,0x26,0xAD,
83780 -0x14,0x0E,0x04,0x35,
83781 -0x02,0x80,0x02,0x3C,
83782 -0x18,0x0E,0x05,0x35,
83783 -0x00,0x00,0xE7,0x8C,
83784 -0x1C,0x0E,0x06,0x35,
83785 -0x00,0x00,0x83,0x8C,
83786 -0xDE,0x5D,0x4A,0x90,
83787 -0x00,0x00,0xA2,0x8C,
83788 -0x00,0x00,0xC4,0x8C,
83789 -0xF4,0x02,0x27,0xAD,
83790 -0xFC,0x02,0x22,0xAD,
83791 -0x22,0x00,0x02,0x24,
83792 -0xF8,0x02,0x23,0xAD,
83793 -0x5B,0x00,0x42,0x11,
83794 -0x00,0x03,0x24,0xAD,
83795 -0x92,0x00,0x02,0x24,
83796 -0x59,0x00,0x42,0x11,
83797 -0x0D,0x08,0x02,0x35,
83798 -0x00,0x60,0x01,0x40,
83799 -0x01,0x00,0x21,0x34,
83800 -0x00,0x60,0x81,0x40,
83801 -0x30,0x1F,0x43,0x8E,
83802 -0xFF,0xFF,0x02,0x3C,
83803 -0xFF,0x0F,0x42,0x34,
83804 -0x24,0x18,0x62,0x00,
83805 -0x00,0x10,0x63,0x34,
83806 -0x66,0x2E,0x00,0x08,
83807 -0x30,0x1F,0x43,0xAE,
83808 -0x3A,0x00,0x62,0x12,
83809 -0x04,0x00,0x02,0x24,
83810 -0x38,0x00,0x62,0x12,
83811 -0x30,0x1F,0x43,0x26,
83812 -0xFF,0xFF,0x02,0x24,
83813 -0x59,0x2E,0x00,0x08,
83814 -0x04,0x03,0x62,0xA0,
83815 -0x0C,0x24,0x83,0x8C,
83816 -0xFF,0xFF,0x02,0x34,
83817 -0xBF,0xFF,0x62,0x10,
83818 -0x02,0x12,0x05,0x00,
83819 -0x0F,0x00,0x45,0x30,
83820 -0x01,0x00,0x03,0x24,
83821 -0xBB,0xFF,0xA3,0x14,
83822 -0x25,0xB0,0x02,0x3C,
83823 -0x4C,0x00,0x42,0x34,
83824 -0x00,0x00,0x43,0x90,
83825 -0x00,0x00,0x00,0x00,
83826 -0x03,0x00,0x63,0x30,
83827 -0xB5,0xFF,0x60,0x10,
83828 -0x03,0x00,0x02,0x24,
83829 -0x65,0x00,0x62,0x12,
83830 -0x04,0x00,0x62,0x2A,
83831 -0x47,0x00,0x40,0x10,
83832 -0x00,0x00,0x00,0x00,
83833 -0x6A,0x00,0x60,0x12,
83834 -0x00,0x00,0x00,0x00,
83835 -0xAD,0xFF,0x65,0x16,
83836 -0x00,0x00,0x00,0x00,
83837 -0x1C,0x03,0x82,0x90,
83838 -0x00,0x00,0x00,0x00,
83839 -0x2B,0x10,0x82,0x02,
83840 -0x56,0x00,0x40,0x10,
83841 -0x00,0x00,0x00,0x00,
83842 -0x1F,0x03,0x82,0x90,
83843 -0x00,0x00,0x00,0x00,
83844 -0x2B,0x10,0x54,0x00,
83845 -0x48,0x00,0x40,0x14,
83846 -0x00,0x00,0x00,0x00,
83847 -0xBE,0x2D,0x00,0x0C,
83848 -0x00,0x00,0x00,0x00,
83849 -0x8B,0x2E,0x00,0x08,
83850 -0x00,0x00,0x00,0x00,
83851 -0x3B,0x00,0x02,0x24,
83852 -0x46,0x00,0x03,0x24,
83853 -0x1F,0x03,0xA2,0xA0,
83854 -0x1C,0x03,0xA3,0xA0,
83855 -0x41,0x00,0x02,0x24,
83856 -0x40,0x00,0x03,0x24,
83857 -0x1D,0x03,0xA2,0xA0,
83858 -0x79,0x2E,0x00,0x08,
83859 -0x1E,0x03,0xA3,0xA0,
83860 -0x00,0x00,0xE3,0x8C,
83861 -0x3F,0x3F,0x02,0x3C,
83862 -0x3F,0x3F,0x42,0x34,
83863 -0x9E,0xFF,0x62,0x14,
83864 -0x00,0x00,0x00,0x00,
83865 -0x67,0x2E,0x00,0x08,
83866 -0x30,0x1F,0x45,0x26,
83867 -0x0F,0x00,0x10,0x3C,
83868 -0x01,0x00,0x11,0x3C,
83869 -0xFF,0xFF,0x05,0x36,
83870 -0xF4,0x98,0x26,0x36,
83871 -0x5F,0x47,0x00,0x0C,
83872 -0x15,0x00,0x04,0x24,
83873 -0x54,0x22,0x00,0x0C,
83874 -0x64,0x00,0x04,0x24,
83875 -0xFF,0xFF,0x05,0x36,
83876 -0x56,0x30,0x26,0x36,
83877 -0x5F,0x47,0x00,0x0C,
83878 -0x1A,0x00,0x04,0x24,
83879 -0x54,0x22,0x00,0x0C,
83880 -0x64,0x00,0x04,0x24,
83881 -0x30,0x1F,0x43,0x26,
83882 -0xFF,0xFF,0x02,0x24,
83883 -0x59,0x2E,0x00,0x08,
83884 -0x04,0x03,0x62,0xA0,
83885 -0x0D,0x08,0x02,0x35,
83886 -0x00,0x00,0x43,0x90,
83887 -0x00,0x00,0x00,0x00,
83888 -0x0F,0x00,0x63,0x30,
83889 -0x08,0x00,0x62,0x2C,
83890 -0x0F,0x00,0x63,0x38,
83891 -0xA2,0xFF,0x40,0x14,
83892 -0x01,0x00,0x65,0x24,
83893 -0x00,0x16,0x05,0x00,
83894 -0x00,0x24,0x05,0x00,
83895 -0x00,0x1A,0x05,0x00,
83896 -0x25,0x10,0x44,0x00,
83897 -0x25,0x10,0x43,0x00,
83898 -0x25,0x10,0x45,0x00,
83899 -0x25,0x18,0x65,0x00,
83900 -0x18,0x03,0x23,0xAD,
83901 -0xB8,0x2E,0x00,0x08,
83902 -0x14,0x03,0x22,0xAD,
83903 -0x04,0x00,0x02,0x24,
83904 -0x11,0x00,0x62,0x12,
83905 -0xFF,0x00,0x02,0x24,
83906 -0x66,0xFF,0x62,0x16,
83907 -0x00,0x00,0x00,0x00,
83908 -0x1E,0x03,0x82,0x90,
83909 -0x00,0x00,0x00,0x00,
83910 -0x2B,0x10,0x82,0x02,
83911 -0x21,0x00,0x40,0x14,
83912 -0x00,0x00,0x00,0x00,
83913 -0x1C,0x03,0x82,0x90,
83914 -0x00,0x00,0x00,0x00,
83915 -0x2B,0x10,0x82,0x02,
83916 -0x0A,0x00,0x40,0x10,
83917 -0x00,0x00,0x00,0x00,
83918 -0x7A,0x2D,0x00,0x0C,
83919 -0x00,0x00,0x00,0x00,
83920 -0x8B,0x2E,0x00,0x08,
83921 -0x00,0x00,0x00,0x00,
83922 -0x1D,0x03,0x82,0x90,
83923 -0x00,0x00,0x00,0x00,
83924 -0x2B,0x10,0x54,0x00,
83925 -0xF8,0xFF,0x40,0x10,
83926 -0x00,0x00,0x00,0x00,
83927 -0x3B,0x2D,0x00,0x0C,
83928 -0x00,0x00,0x00,0x00,
83929 -0x8B,0x2E,0x00,0x08,
83930 -0x00,0x00,0x00,0x00,
83931 -0x20,0x03,0x82,0x90,
83932 -0x00,0x00,0x00,0x00,
83933 -0x2B,0x10,0x82,0x02,
83934 -0xA8,0xFF,0x40,0x10,
83935 -0x00,0x00,0x00,0x00,
83936 -0xFC,0x2D,0x00,0x0C,
83937 -0x00,0x00,0x00,0x00,
83938 -0x8B,0x2E,0x00,0x08,
83939 -0x00,0x00,0x00,0x00,
83940 -0x1E,0x03,0x82,0x90,
83941 -0x00,0x00,0x00,0x00,
83942 -0x2B,0x10,0x82,0x02,
83943 -0xE6,0xFF,0x40,0x10,
83944 -0x00,0x00,0x00,0x00,
83945 -0x21,0x03,0x82,0x90,
83946 -0x00,0x00,0x00,0x00,
83947 -0x2B,0x10,0x54,0x00,
83948 -0x9A,0xFF,0x40,0x14,
83949 -0x00,0x00,0x00,0x00,
83950 -0xFC,0x2D,0x00,0x0C,
83951 -0x00,0x00,0x00,0x00,
83952 -0x8B,0x2E,0x00,0x08,
83953 -0x00,0x00,0x00,0x00,
83954 -0x02,0x80,0x08,0x3C,
83955 -0x30,0x1F,0x05,0x25,
83956 -0x80,0x36,0xA4,0x8C,
83957 -0xE6,0x02,0xA3,0x90,
83958 -0x02,0x11,0x04,0x00,
83959 -0x26,0x00,0x60,0x14,
83960 -0x7F,0x00,0x46,0x30,
83961 -0x25,0xB0,0x07,0x3C,
83962 -0x4C,0x00,0xE2,0x34,
83963 -0x00,0x00,0x43,0x90,
83964 -0x00,0x00,0x00,0x00,
83965 -0x20,0x00,0x60,0x10,
83966 -0x00,0x00,0x00,0x00,
83967 -0xFF,0xFF,0x02,0x34,
83968 -0x1D,0x00,0x82,0x10,
83969 -0x00,0x00,0x00,0x00,
83970 -0x00,0x08,0xE3,0x34,
83971 -0x00,0x00,0x62,0x90,
83972 -0x00,0x00,0x00,0x00,
83973 -0x01,0x00,0x42,0x30,
83974 -0x19,0x00,0x40,0x10,
83975 -0x4B,0x00,0xC2,0x2C,
83976 -0x3E,0x00,0x40,0x10,
83977 -0x01,0x00,0x04,0x24,
83978 -0xD8,0xFF,0xC2,0x24,
83979 -0x1E,0x00,0x42,0x2C,
83980 -0x49,0x00,0x40,0x10,
83981 -0x23,0x00,0xC2,0x2C,
83982 -0x30,0x1F,0x04,0x25,
83983 -0xD3,0x02,0x82,0x90,
83984 -0x00,0x00,0x00,0x00,
83985 -0x44,0x00,0x40,0x10,
83986 -0x23,0x00,0xC2,0x2C,
83987 -0x25,0xB0,0x02,0x3C,
83988 -0x87,0x0C,0x42,0x34,
83989 -0x20,0x00,0x03,0x24,
83990 -0x00,0x00,0x43,0xA0,
83991 -0xD3,0x02,0x80,0xA0,
83992 -0x21,0x10,0x00,0x00,
83993 -0x01,0x00,0x42,0x24,
83994 -0xFF,0x00,0x42,0x30,
83995 -0x06,0x00,0x43,0x2C,
83996 -0xFC,0xFF,0x60,0x14,
83997 -0x00,0x00,0x00,0x00,
83998 -0x08,0x00,0xE0,0x03,
83999 -0x21,0x10,0x00,0x00,
84000 -0x17,0x00,0x40,0x10,
84001 -0x01,0x00,0x04,0x24,
84002 -0xD8,0xFF,0xC2,0x24,
84003 -0x1E,0x00,0x42,0x2C,
84004 -0x44,0x00,0x40,0x10,
84005 -0x23,0x00,0xC2,0x2C,
84006 -0x30,0x1F,0x04,0x25,
84007 -0xD3,0x02,0x82,0x90,
84008 -0x00,0x00,0x00,0x00,
84009 -0x3F,0x00,0x40,0x10,
84010 -0x23,0x00,0xC2,0x2C,
84011 -0x25,0xB0,0x02,0x3C,
84012 -0x30,0x0C,0x42,0x34,
84013 -0x44,0x00,0x03,0x24,
84014 -0x00,0x00,0x43,0xA0,
84015 -0xD3,0x02,0x80,0xA0,
84016 -0x21,0x10,0x00,0x00,
84017 -0x01,0x00,0x42,0x24,
84018 -0xFF,0x00,0x42,0x30,
84019 -0x06,0x00,0x43,0x2C,
84020 -0xFC,0xFF,0x60,0x14,
84021 -0x00,0x00,0x00,0x00,
84022 -0x08,0x00,0xE0,0x03,
84023 -0x21,0x10,0x00,0x00,
84024 -0xD3,0x02,0xA2,0x90,
84025 -0x00,0x00,0x00,0x00,
84026 -0xE7,0xFF,0x44,0x10,
84027 -0x43,0x00,0x02,0x24,
84028 -0x30,0x0C,0xE3,0x34,
84029 -0xD3,0x02,0xA4,0xA0,
84030 -0x00,0x00,0x62,0xA0,
84031 -0x21,0x10,0x00,0x00,
84032 -0x01,0x00,0x42,0x24,
84033 -0xFF,0x00,0x42,0x30,
84034 -0x06,0x00,0x43,0x2C,
84035 -0xFC,0xFF,0x60,0x14,
84036 -0x00,0x00,0x00,0x00,
84037 -0x08,0x00,0xE0,0x03,
84038 -0x21,0x10,0x00,0x00,
84039 -0xD3,0x02,0xA2,0x90,
84040 -0x00,0x00,0x00,0x00,
84041 -0xC0,0xFF,0x44,0x10,
84042 -0x10,0x00,0x02,0x24,
84043 -0x87,0x0C,0xE3,0x34,
84044 -0xD3,0x02,0xA4,0xA0,
84045 -0x00,0x00,0x62,0xA0,
84046 -0x21,0x10,0x00,0x00,
84047 -0x01,0x00,0x42,0x24,
84048 -0xFF,0x00,0x42,0x30,
84049 -0x06,0x00,0x43,0x2C,
84050 -0xFC,0xFF,0x60,0x14,
84051 -0x00,0x00,0x00,0x00,
84052 -0x08,0x00,0xE0,0x03,
84053 -0x21,0x10,0x00,0x00,
84054 -0xC7,0xFF,0x40,0x10,
84055 -0x00,0x00,0x00,0x00,
84056 -0x30,0x1F,0x04,0x25,
84057 -0xD3,0x02,0x82,0x90,
84058 -0x02,0x00,0x03,0x24,
84059 -0xC2,0xFF,0x43,0x10,
84060 -0x00,0x00,0x00,0x00,
84061 -0x25,0xB0,0x02,0x3C,
84062 -0x87,0x0C,0x42,0x34,
84063 -0xD3,0x02,0x83,0xA0,
84064 -0x00,0x00,0x40,0xA0,
84065 -0x21,0x10,0x00,0x00,
84066 -0x01,0x00,0x42,0x24,
84067 -0xFF,0x00,0x42,0x30,
84068 -0x06,0x00,0x43,0x2C,
84069 -0xFC,0xFF,0x60,0x14,
84070 -0x00,0x00,0x00,0x00,
84071 -0x08,0x00,0xE0,0x03,
84072 -0x21,0x10,0x00,0x00,
84073 -0xB4,0xFF,0x40,0x10,
84074 -0x00,0x00,0x00,0x00,
84075 -0x30,0x1F,0x04,0x25,
84076 -0xD3,0x02,0x82,0x90,
84077 -0x02,0x00,0x03,0x24,
84078 -0xAF,0xFF,0x43,0x10,
84079 -0x00,0x00,0x00,0x00,
84080 -0x25,0xB0,0x02,0x3C,
84081 -0xD3,0x02,0x83,0xA0,
84082 -0x30,0x0C,0x42,0x34,
84083 -0x42,0x00,0x03,0x24,
84084 -0x00,0x00,0x43,0xA0,
84085 -0x21,0x10,0x00,0x00,
84086 -0x01,0x00,0x42,0x24,
84087 -0xFF,0x00,0x42,0x30,
84088 -0x06,0x00,0x43,0x2C,
84089 -0xFC,0xFF,0x60,0x14,
84090 -0x00,0x00,0x00,0x00,
84091 -0x08,0x00,0xE0,0x03,
84092 -0x21,0x10,0x00,0x00,
84093 -0x25,0xB0,0x03,0x3C,
84094 -0x01,0x80,0x02,0x3C,
84095 -0x18,0x03,0x64,0x34,
84096 -0x7C,0xBF,0x42,0x24,
84097 -0x00,0x00,0x82,0xAC,
84098 -0x00,0x60,0x07,0x40,
84099 -0x01,0x00,0xE1,0x34,
84100 -0x01,0x00,0x21,0x38,
84101 -0x00,0x60,0x81,0x40,
84102 -0x20,0x80,0x02,0x3C,
84103 -0x30,0x03,0x63,0x34,
84104 -0x00,0x00,0x62,0xAC,
84105 -0x25,0xB0,0x06,0x3C,
84106 -0x01,0x80,0x02,0x3C,
84107 -0x7D,0xBF,0x45,0x24,
84108 -0x33,0x03,0xC3,0x34,
84109 -0x00,0x00,0x85,0xAC,
84110 -0x00,0x00,0x62,0x90,
84111 -0x00,0x00,0x00,0x00,
84112 -0x40,0x00,0x42,0x30,
84113 -0xFB,0xFF,0x40,0x10,
84114 -0x30,0x03,0xC2,0x34,
84115 -0x00,0x00,0x45,0x8C,
84116 -0x0F,0x00,0x03,0x3C,
84117 -0xFF,0xFF,0x63,0x34,
84118 -0x24,0x28,0xA3,0x00,
84119 -0x40,0x11,0x05,0x00,
84120 -0x23,0x10,0x45,0x00,
84121 -0x80,0x10,0x02,0x00,
84122 -0x21,0x10,0x45,0x00,
84123 -0xAF,0x0F,0x04,0x3C,
84124 -0xC0,0x10,0x02,0x00,
84125 -0x00,0xA0,0x84,0x34,
84126 -0x1B,0x00,0x82,0x00,
84127 -0x02,0x00,0x40,0x14,
84128 -0x00,0x00,0x00,0x00,
84129 -0x0D,0x00,0x07,0x00,
84130 -0x02,0x80,0x03,0x3C,
84131 -0x30,0x1F,0x63,0x24,
84132 -0xC2,0x28,0x05,0x00,
84133 -0xA0,0x3E,0x65,0xAC,
84134 -0x12,0x20,0x00,0x00,
84135 -0xA4,0x3E,0x64,0xAC,
84136 -0x00,0x60,0x87,0x40,
84137 -0x08,0x00,0xE0,0x03,
84138 -0x00,0x00,0x00,0x00,
84139 -0x01,0x00,0x03,0x24,
84140 -0x02,0x80,0x02,0x3C,
84141 -0x14,0x5F,0x43,0xA0,
84142 -0xD0,0x07,0x04,0x24,
84143 -0x02,0x80,0x02,0x3C,
84144 -0x02,0x80,0x03,0x3C,
84145 -0xE4,0x5E,0x44,0xAC,
84146 -0x13,0x5F,0x60,0xA0,
84147 -0x08,0x00,0xE0,0x03,
84148 -0x00,0x00,0x00,0x00,
84149 -0x2A,0xB0,0x04,0x3C,
84150 -0x28,0x00,0x85,0x34,
84151 -0x02,0x00,0x82,0x94,
84152 -0x04,0x00,0x84,0x24,
84153 -0x05,0x00,0x40,0x14,
84154 -0x2B,0x18,0xA4,0x00,
84155 -0xFB,0xFF,0x60,0x10,
84156 -0x01,0x00,0x02,0x24,
84157 -0x08,0x00,0xE0,0x03,
84158 -0x00,0x00,0x00,0x00,
84159 -0x08,0x00,0xE0,0x03,
84160 -0x21,0x10,0x00,0x00,
84161 -0x25,0xB0,0x03,0x3C,
84162 -0xBE,0x00,0x63,0x34,
84163 -0x00,0x00,0x62,0x94,
84164 -0x08,0x00,0xE0,0x03,
84165 -0x01,0x00,0x42,0x2C,
84166 -0xE8,0xFF,0xBD,0x27,
84167 -0x10,0x00,0xBF,0xAF,
84168 -0x17,0x30,0x00,0x0C,
84169 -0x00,0x00,0x00,0x00,
84170 -0x02,0x80,0x03,0x3C,
84171 -0x19,0x00,0x40,0x10,
84172 -0x74,0x57,0x64,0x24,
84173 -0x74,0x57,0x62,0x8C,
84174 -0x00,0x00,0x00,0x00,
84175 -0x15,0x00,0x44,0x14,
84176 -0x02,0x80,0x02,0x3C,
84177 -0x14,0x5F,0x43,0x90,
84178 -0x01,0x00,0x02,0x24,
84179 -0xFF,0x00,0x63,0x30,
84180 -0x10,0x00,0x62,0x10,
84181 -0x02,0x80,0x03,0x3C,
84182 -0xF5,0x5E,0x62,0x90,
84183 -0x00,0x00,0x00,0x00,
84184 -0x0F,0x00,0x42,0x30,
84185 -0x05,0x00,0x42,0x28,
84186 -0x0A,0x00,0x40,0x10,
84187 -0x01,0x00,0x04,0x24,
84188 -0x02,0x80,0x02,0x3C,
84189 -0x9C,0x5A,0x43,0x8C,
84190 -0x00,0x00,0x00,0x00,
84191 -0x05,0x00,0x60,0x14,
84192 -0x21,0x10,0x80,0x00,
84193 -0x10,0x00,0xBF,0x8F,
84194 -0x00,0x00,0x00,0x00,
84195 -0x08,0x00,0xE0,0x03,
84196 -0x18,0x00,0xBD,0x27,
84197 -0x10,0x00,0xBF,0x8F,
84198 -0x21,0x20,0x00,0x00,
84199 -0x21,0x10,0x80,0x00,
84200 -0x08,0x00,0xE0,0x03,
84201 -0x18,0x00,0xBD,0x27,
84202 -0xE8,0xFF,0xBD,0x27,
84203 -0x10,0x00,0xBF,0xAF,
84204 -0x17,0x30,0x00,0x0C,
84205 -0x00,0x00,0x00,0x00,
84206 -0x2C,0x00,0x40,0x10,
84207 -0x02,0x80,0x02,0x3C,
84208 -0x74,0x57,0x43,0x8C,
84209 -0x74,0x57,0x42,0x24,
84210 -0x28,0x00,0x62,0x14,
84211 -0x02,0x80,0x03,0x3C,
84212 -0x0C,0x5F,0x62,0x90,
84213 -0x01,0x00,0x04,0x24,
84214 -0xFF,0x00,0x42,0x30,
84215 -0x23,0x00,0x44,0x10,
84216 -0x02,0x80,0x03,0x3C,
84217 -0xF5,0x5E,0x62,0x90,
84218 -0x00,0x00,0x00,0x00,
84219 -0x0F,0x00,0x42,0x30,
84220 -0x03,0x00,0x42,0x28,
84221 -0x1D,0x00,0x40,0x10,
84222 -0x02,0x80,0x03,0x3C,
84223 -0x0E,0x5F,0x62,0x90,
84224 -0x00,0x00,0x00,0x00,
84225 -0x04,0x00,0x42,0x30,
84226 -0x18,0x00,0x40,0x14,
84227 -0x00,0x00,0x00,0x00,
84228 -0x0E,0x5F,0x62,0x90,
84229 -0x00,0x00,0x00,0x00,
84230 -0x10,0x00,0x42,0x30,
84231 -0x13,0x00,0x40,0x14,
84232 -0x02,0x80,0x03,0x3C,
84233 -0x14,0x5F,0x62,0x90,
84234 -0x00,0x00,0x00,0x00,
84235 -0xFF,0x00,0x42,0x30,
84236 -0x0E,0x00,0x44,0x10,
84237 -0x02,0x80,0x02,0x3C,
84238 -0x15,0x5F,0x43,0x90,
84239 -0x00,0x00,0x00,0x00,
84240 -0x0A,0x00,0x60,0x14,
84241 -0x02,0x80,0x02,0x3C,
84242 -0x30,0x1F,0x42,0x24,
84243 -0x6C,0x3B,0x43,0x8C,
84244 -0x00,0x00,0x00,0x00,
84245 -0x06,0x00,0x60,0x14,
84246 -0x21,0x18,0x00,0x00,
84247 -0x40,0x39,0x42,0x8C,
84248 -0x00,0x00,0x00,0x00,
84249 -0x02,0x00,0x40,0x14,
84250 -0x01,0x00,0x03,0x24,
84251 -0x21,0x18,0x00,0x00,
84252 -0x10,0x00,0xBF,0x8F,
84253 -0x21,0x10,0x60,0x00,
84254 -0x08,0x00,0xE0,0x03,
84255 -0x18,0x00,0xBD,0x27,
84256 -0xE8,0xFF,0xBD,0x27,
84257 -0x10,0x00,0xBF,0xAF,
84258 -0x23,0x30,0x00,0x0C,
84259 -0x00,0x00,0x00,0x00,
84260 -0x02,0x80,0x03,0x3C,
84261 -0x0E,0x00,0x40,0x10,
84262 -0x6C,0x57,0x65,0x24,
84263 -0x6C,0x57,0x62,0x8C,
84264 -0x02,0x80,0x04,0x3C,
84265 -0x64,0x57,0x86,0x24,
84266 -0x09,0x00,0x45,0x14,
84267 -0x01,0x00,0x03,0x24,
84268 -0x64,0x57,0x82,0x8C,
84269 -0x00,0x00,0x00,0x00,
84270 -0x05,0x00,0x46,0x14,
84271 -0x21,0x10,0x60,0x00,
84272 -0x10,0x00,0xBF,0x8F,
84273 -0x00,0x00,0x00,0x00,
84274 -0x08,0x00,0xE0,0x03,
84275 -0x18,0x00,0xBD,0x27,
84276 -0x10,0x00,0xBF,0x8F,
84277 -0x21,0x18,0x00,0x00,
84278 -0x21,0x10,0x60,0x00,
84279 -0x08,0x00,0xE0,0x03,
84280 -0x18,0x00,0xBD,0x27,
84281 -0xD8,0xFF,0xBD,0x27,
84282 -0x20,0x00,0xBF,0xAF,
84283 -0x1C,0x00,0xB3,0xAF,
84284 -0x18,0x00,0xB2,0xAF,
84285 -0x14,0x00,0xB1,0xAF,
84286 -0x10,0x00,0xB0,0xAF,
84287 -0xFF,0x00,0x84,0x30,
84288 -0x00,0x60,0x12,0x40,
84289 -0x01,0x00,0x41,0x36,
84290 -0x01,0x00,0x21,0x38,
84291 -0x00,0x60,0x81,0x40,
84292 -0x0E,0x00,0x80,0x10,
84293 -0x02,0x80,0x13,0x3C,
84294 -0x44,0x5F,0x62,0x92,
84295 -0x01,0x00,0x03,0x24,
84296 -0xFF,0x00,0x42,0x30,
84297 -0x39,0x00,0x43,0x10,
84298 -0x25,0xB0,0x03,0x3C,
84299 -0x00,0x60,0x92,0x40,
84300 -0x20,0x00,0xBF,0x8F,
84301 -0x1C,0x00,0xB3,0x8F,
84302 -0x18,0x00,0xB2,0x8F,
84303 -0x14,0x00,0xB1,0x8F,
84304 -0x10,0x00,0xB0,0x8F,
84305 -0x08,0x00,0xE0,0x03,
84306 -0x28,0x00,0xBD,0x27,
84307 -0x44,0x5F,0x62,0x92,
84308 -0x02,0x00,0x03,0x24,
84309 -0xFF,0x00,0x42,0x30,
84310 -0xF4,0xFF,0x43,0x14,
84311 -0x44,0x08,0x04,0x24,
84312 -0x94,0x60,0x00,0x0C,
84313 -0x21,0x28,0x00,0x00,
84314 -0x25,0xB0,0x03,0x3C,
84315 -0x04,0x0C,0x62,0x90,
84316 -0x21,0x20,0x00,0x00,
84317 -0xFD,0x00,0x42,0x30,
84318 -0x04,0x0C,0x62,0xA0,
84319 -0x01,0x00,0x82,0x24,
84320 -0xFF,0x00,0x44,0x30,
84321 -0x06,0x00,0x83,0x2C,
84322 -0xFD,0xFF,0x60,0x14,
84323 -0x01,0x00,0x82,0x24,
84324 -0x25,0xB0,0x03,0x3C,
84325 -0x04,0x0D,0x62,0x90,
84326 -0x21,0x20,0x00,0x00,
84327 -0xFD,0x00,0x42,0x30,
84328 -0x04,0x0D,0x62,0xA0,
84329 -0x01,0x00,0x82,0x24,
84330 -0xFF,0x00,0x44,0x30,
84331 -0x06,0x00,0x83,0x2C,
84332 -0xFD,0xFF,0x60,0x14,
84333 -0x01,0x00,0x82,0x24,
84334 -0x25,0xB0,0x11,0x3C,
84335 -0x70,0x0E,0x25,0x8E,
84336 -0x7F,0xFE,0x10,0x3C,
84337 -0xFF,0xFF,0x10,0x36,
84338 -0x24,0x28,0xB0,0x00,
84339 -0x94,0x60,0x00,0x0C,
84340 -0x70,0x0E,0x04,0x24,
84341 -0x8C,0x0E,0x25,0x8E,
84342 -0x8C,0x0E,0x04,0x24,
84343 -0x94,0x60,0x00,0x0C,
84344 -0x24,0x28,0xB0,0x00,
84345 -0x01,0x00,0x02,0x24,
84346 -0x44,0x5F,0x62,0xA2,
84347 -0x00,0x60,0x92,0x40,
84348 -0x20,0x00,0xBF,0x8F,
84349 -0x1C,0x00,0xB3,0x8F,
84350 -0x18,0x00,0xB2,0x8F,
84351 -0x14,0x00,0xB1,0x8F,
84352 -0x10,0x00,0xB0,0x8F,
84353 -0x08,0x00,0xE0,0x03,
84354 -0x28,0x00,0xBD,0x27,
84355 -0x04,0x0C,0x62,0x90,
84356 -0x21,0x20,0x00,0x00,
84357 -0xFF,0x00,0x42,0x30,
84358 -0x02,0x00,0x42,0x34,
84359 -0x04,0x0C,0x62,0xA0,
84360 -0x01,0x00,0x82,0x24,
84361 -0xFF,0x00,0x44,0x30,
84362 -0x06,0x00,0x83,0x2C,
84363 -0xFD,0xFF,0x60,0x14,
84364 -0x01,0x00,0x82,0x24,
84365 -0x25,0xB0,0x03,0x3C,
84366 -0x04,0x0D,0x62,0x90,
84367 -0x21,0x20,0x00,0x00,
84368 -0xFF,0x00,0x42,0x30,
84369 -0x02,0x00,0x42,0x34,
84370 -0x04,0x0D,0x62,0xA0,
84371 -0x01,0x00,0x82,0x24,
84372 -0xFF,0x00,0x44,0x30,
84373 -0x06,0x00,0x83,0x2C,
84374 -0xFD,0xFF,0x60,0x14,
84375 -0x01,0x00,0x82,0x24,
84376 -0x25,0xB0,0x10,0x3C,
84377 -0x70,0x0E,0x05,0x8E,
84378 -0x80,0x01,0x11,0x3C,
84379 -0x70,0x0E,0x04,0x24,
84380 -0x94,0x60,0x00,0x0C,
84381 -0x25,0x28,0xB1,0x00,
84382 -0x8C,0x0E,0x05,0x8E,
84383 -0x8C,0x0E,0x04,0x24,
84384 -0x94,0x60,0x00,0x0C,
84385 -0x25,0x28,0xB1,0x00,
84386 -0x03,0x00,0x05,0x3C,
84387 -0x59,0x01,0xA5,0x34,
84388 -0x94,0x60,0x00,0x0C,
84389 -0x44,0x08,0x04,0x24,
84390 -0x02,0x00,0x02,0x24,
84391 -0x44,0x5F,0x62,0xA2,
84392 -0xDD,0x30,0x00,0x08,
84393 -0x00,0x00,0x00,0x00,
84394 -0x25,0xB0,0x03,0x3C,
84395 -0xFC,0x37,0x02,0x24,
84396 -0x40,0x00,0x64,0x34,
84397 -0x00,0x00,0x82,0xA4,
84398 -0x42,0x00,0x65,0x34,
84399 -0x03,0x00,0x02,0x24,
84400 -0x00,0x00,0xA0,0xA0,
84401 -0x03,0x08,0x62,0xA0,
84402 -0x21,0x10,0x00,0x00,
84403 -0x01,0x00,0x42,0x24,
84404 -0xFF,0x00,0x42,0x30,
84405 -0x06,0x00,0x43,0x2C,
84406 -0xFC,0xFF,0x60,0x14,
84407 -0x00,0x00,0x00,0x00,
84408 -0x08,0x00,0xE0,0x03,
84409 -0x00,0x00,0x00,0x00,
84410 -0xE0,0xFF,0xBD,0x27,
84411 -0x18,0x00,0xBF,0xAF,
84412 -0x14,0x00,0xB1,0xAF,
84413 -0x10,0x00,0xB0,0xAF,
84414 -0x02,0x80,0x02,0x3C,
84415 -0xF4,0x5E,0x43,0x90,
84416 -0x00,0x00,0x00,0x00,
84417 -0x0B,0x00,0x60,0x10,
84418 -0x25,0xB0,0x10,0x3C,
84419 -0x02,0x80,0x03,0x3C,
84420 -0xDE,0x5D,0x62,0x90,
84421 -0x00,0x00,0x00,0x00,
84422 -0x02,0x00,0x42,0x30,
84423 -0x32,0x00,0x40,0x14,
84424 -0x00,0x02,0x05,0x3C,
84425 -0x00,0x08,0x04,0x24,
84426 -0xA9,0x45,0x00,0x0C,
84427 -0x21,0x30,0x00,0x00,
84428 -0x25,0xB0,0x10,0x3C,
84429 -0x21,0x00,0x06,0x36,
84430 -0x00,0x00,0xC2,0x90,
84431 -0x18,0x00,0x03,0x36,
84432 -0x42,0x00,0x05,0x36,
84433 -0x01,0x00,0x42,0x34,
84434 -0x00,0x00,0xC2,0xA0,
84435 -0x40,0x00,0x11,0x36,
84436 -0x00,0x00,0x60,0xA0,
84437 -0xFF,0xFF,0x02,0x24,
84438 -0xFC,0x57,0x03,0x24,
84439 -0x00,0x00,0xA2,0xA0,
84440 -0x64,0x00,0x04,0x24,
84441 -0x00,0x00,0x23,0xA6,
84442 -0x54,0x22,0x00,0x0C,
84443 -0x00,0x00,0x00,0x00,
84444 -0xFC,0x77,0x02,0x24,
84445 -0x00,0x00,0x22,0xA6,
84446 -0x54,0x22,0x00,0x0C,
84447 -0x0A,0x00,0x04,0x24,
84448 -0x03,0x08,0x00,0xA2,
84449 -0x21,0x10,0x00,0x00,
84450 -0x01,0x00,0x42,0x24,
84451 -0xFF,0x00,0x42,0x30,
84452 -0x06,0x00,0x43,0x2C,
84453 -0xFD,0xFF,0x60,0x14,
84454 -0x01,0x00,0x42,0x24,
84455 -0x0A,0x00,0x04,0x24,
84456 -0x54,0x22,0x00,0x0C,
84457 -0x25,0xB0,0x10,0x3C,
84458 -0x40,0x00,0x10,0x36,
84459 -0xFC,0x37,0x02,0x24,
84460 -0x00,0x00,0x02,0xA6,
84461 -0x54,0x22,0x00,0x0C,
84462 -0x0A,0x00,0x04,0x24,
84463 -0xFC,0x77,0x02,0x24,
84464 -0x00,0x00,0x02,0xA6,
84465 -0x54,0x22,0x00,0x0C,
84466 -0x0A,0x00,0x04,0x24,
84467 -0xFC,0x57,0x02,0x24,
84468 -0x00,0x00,0x02,0xA6,
84469 -0x18,0x00,0xBF,0x8F,
84470 -0x14,0x00,0xB1,0x8F,
84471 -0x10,0x00,0xB0,0x8F,
84472 -0x08,0x00,0xE0,0x03,
84473 -0x20,0x00,0xBD,0x27,
84474 -0x9B,0x30,0x00,0x0C,
84475 -0x21,0x20,0x00,0x00,
84476 -0x00,0x08,0x04,0x24,
84477 -0x00,0x02,0x05,0x3C,
84478 -0xA9,0x45,0x00,0x0C,
84479 -0x21,0x30,0x00,0x00,
84480 -0x2F,0x31,0x00,0x08,
84481 -0x25,0xB0,0x10,0x3C,
84482 -0xC0,0xFF,0xBD,0x27,
84483 -0x28,0x00,0xB4,0xAF,
84484 -0x20,0x00,0xB2,0xAF,
84485 -0x18,0x00,0xB0,0xAF,
84486 -0x3C,0x00,0xBF,0xAF,
84487 -0x38,0x00,0xBE,0xAF,
84488 -0x34,0x00,0xB7,0xAF,
84489 -0x30,0x00,0xB6,0xAF,
84490 -0x2C,0x00,0xB5,0xAF,
84491 -0x24,0x00,0xB3,0xAF,
84492 -0x1C,0x00,0xB1,0xAF,
84493 -0xFF,0x00,0x90,0x30,
84494 -0xFF,0x00,0xB2,0x30,
84495 -0x21,0xA0,0x00,0x00,
84496 -0x00,0x60,0x16,0x40,
84497 -0x01,0x00,0xC1,0x36,
84498 -0x01,0x00,0x21,0x38,
84499 -0x00,0x60,0x81,0x40,
84500 -0x02,0x80,0x13,0x3C,
84501 -0xF6,0x5E,0x62,0x92,
84502 -0x0F,0x00,0x11,0x32,
84503 -0x0F,0x00,0x42,0x30,
84504 -0x12,0x00,0x51,0x10,
84505 -0x04,0x00,0x02,0x32,
84506 -0x40,0x00,0x40,0x14,
84507 -0x00,0x00,0x00,0x00,
84508 -0xF6,0x5E,0x62,0x92,
84509 -0x0C,0x00,0x03,0x24,
84510 -0x0F,0x00,0x42,0x30,
84511 -0x8F,0x00,0x43,0x10,
84512 -0x08,0x00,0x02,0x32,
84513 -0xF6,0x5E,0x62,0x92,
84514 -0x04,0x00,0x03,0x24,
84515 -0x0F,0x00,0x42,0x30,
84516 -0xD2,0x01,0x43,0x10,
84517 -0x00,0x00,0x00,0x00,
84518 -0xF6,0x5E,0x62,0x92,
84519 -0x02,0x00,0x03,0x24,
84520 -0x0F,0x00,0x42,0x30,
84521 -0x9B,0x00,0x43,0x10,
84522 -0x06,0x00,0x02,0x32,
84523 -0x02,0x80,0x10,0x3C,
84524 -0xF5,0x5E,0x03,0x92,
84525 -0xF6,0x5E,0x62,0x92,
84526 -0x0F,0x00,0x63,0x30,
84527 -0x0F,0x00,0x42,0x30,
84528 -0x2A,0x10,0x43,0x00,
84529 -0x1C,0x00,0x40,0x14,
84530 -0x02,0x80,0x12,0x3C,
84531 -0xF5,0x5E,0x02,0x92,
84532 -0x00,0x00,0x00,0x00,
84533 -0x40,0x00,0x42,0x30,
84534 -0x17,0x00,0x40,0x10,
84535 -0x02,0x80,0x02,0x3C,
84536 -0xDA,0x5D,0x42,0x90,
84537 -0x00,0x00,0x00,0x00,
84538 -0x02,0x00,0x43,0x30,
84539 -0x52,0x00,0x60,0x14,
84540 -0x04,0x00,0x42,0x30,
84541 -0x10,0x00,0x40,0x10,
84542 -0x00,0x00,0x00,0x00,
84543 -0xF6,0x5E,0x43,0x92,
84544 -0x02,0x80,0x06,0x3C,
84545 -0x5C,0xE9,0xC5,0x90,
84546 -0x0F,0x00,0x63,0x30,
84547 -0x25,0xB0,0x02,0x3C,
84548 -0x25,0x18,0x65,0x00,
84549 -0xDD,0x02,0x42,0x34,
84550 -0x00,0x00,0x43,0xA0,
84551 -0xF5,0x5E,0x04,0x92,
84552 -0x80,0xFF,0x02,0x24,
84553 -0xBF,0xFF,0x03,0x24,
84554 -0x26,0x28,0xA2,0x00,
84555 -0x24,0x20,0x83,0x00,
84556 -0x5C,0xE9,0xC5,0xA0,
84557 -0xF5,0x5E,0x04,0xA2,
84558 -0x00,0x60,0x96,0x40,
84559 -0x3C,0x00,0xBF,0x8F,
84560 -0x38,0x00,0xBE,0x8F,
84561 -0x34,0x00,0xB7,0x8F,
84562 -0x30,0x00,0xB6,0x8F,
84563 -0x2C,0x00,0xB5,0x8F,
84564 -0x28,0x00,0xB4,0x8F,
84565 -0x24,0x00,0xB3,0x8F,
84566 -0x20,0x00,0xB2,0x8F,
84567 -0x1C,0x00,0xB1,0x8F,
84568 -0x18,0x00,0xB0,0x8F,
84569 -0x08,0x00,0xE0,0x03,
84570 -0x40,0x00,0xBD,0x27,
84571 -0xF6,0x5E,0x62,0x92,
84572 -0x00,0x00,0x00,0x00,
84573 -0x04,0x00,0x42,0x30,
84574 -0x4C,0x00,0x40,0x10,
84575 -0x00,0x00,0x00,0x00,
84576 -0xF6,0x5E,0x62,0x92,
84577 -0x00,0x00,0x00,0x00,
84578 -0x08,0x00,0x42,0x30,
84579 -0x03,0x00,0x40,0x10,
84580 -0x08,0x00,0x02,0x32,
84581 -0x1B,0x00,0x40,0x10,
84582 -0x02,0x80,0x03,0x3C,
84583 -0xF6,0x5E,0x62,0x92,
84584 -0x00,0x00,0x00,0x00,
84585 -0x08,0x00,0x42,0x30,
84586 -0x0C,0x00,0x40,0x14,
84587 -0x08,0x00,0x02,0x32,
84588 -0x0A,0x00,0x40,0x10,
84589 -0x00,0x00,0x00,0x00,
84590 -0x08,0x00,0x40,0x12,
84591 -0x02,0x80,0x03,0x3C,
84592 -0xE0,0x3A,0x62,0x94,
84593 -0x00,0x00,0x00,0x00,
84594 -0x00,0x01,0x42,0x30,
84595 -0x03,0x00,0x40,0x10,
84596 -0x00,0x00,0x00,0x00,
84597 -0xCD,0x4E,0x00,0x0C,
84598 -0x21,0x20,0x00,0x00,
84599 -0xF6,0x5E,0x62,0x92,
84600 -0xF0,0xFF,0x03,0x24,
84601 -0x24,0x10,0x43,0x00,
84602 -0xF6,0x5E,0x62,0xA2,
84603 -0xF6,0x5E,0x63,0x92,
84604 -0x00,0x00,0x00,0x00,
84605 -0x25,0x18,0x23,0x02,
84606 -0xF6,0x5E,0x63,0xA2,
84607 -0x8E,0x31,0x00,0x08,
84608 -0x02,0x80,0x10,0x3C,
84609 -0xE0,0x3A,0x62,0x94,
84610 -0x00,0x00,0x00,0x00,
84611 -0x00,0x01,0x42,0x30,
84612 -0xF2,0xFF,0x40,0x10,
84613 -0x02,0x80,0x02,0x3C,
84614 -0x14,0x5F,0x43,0x90,
84615 -0x00,0x00,0x00,0x00,
84616 -0xA2,0xFF,0x60,0x14,
84617 -0x01,0x00,0x04,0x24,
84618 -0xCD,0x4E,0x00,0x0C,
84619 -0x00,0x00,0x00,0x00,
84620 -0xD9,0x31,0x00,0x08,
84621 -0x00,0x00,0x00,0x00,
84622 -0x25,0x24,0x00,0x0C,
84623 -0x24,0x00,0x04,0x24,
84624 -0x76,0x01,0x40,0x10,
84625 -0x21,0x88,0x40,0x00,
84626 -0x02,0x80,0x02,0x3C,
84627 -0xF4,0x5E,0x45,0x90,
84628 -0xF6,0x5E,0x44,0x92,
84629 -0xF5,0x5E,0x02,0x92,
84630 -0xBF,0xFF,0x03,0x24,
84631 -0x0F,0x00,0x84,0x30,
84632 -0x24,0x10,0x43,0x00,
84633 -0xF5,0x5E,0x02,0xA2,
84634 -0x10,0x00,0xA5,0xA3,
84635 -0x11,0x00,0xA4,0xA3,
84636 -0x08,0x00,0x24,0x96,
84637 -0x02,0x80,0x02,0x3C,
84638 -0x10,0x00,0xA5,0x27,
84639 -0x25,0x20,0x82,0x00,
84640 -0x20,0x00,0x84,0x24,
84641 -0x5F,0x1E,0x00,0x0C,
84642 -0x01,0x00,0x06,0x24,
84643 -0x04,0x00,0x03,0x24,
84644 -0x17,0x00,0x02,0x24,
84645 -0x0C,0x00,0x23,0xAE,
84646 -0x14,0x00,0x22,0xAE,
84647 -0x30,0x09,0x00,0x0C,
84648 -0x21,0x20,0x20,0x02,
84649 -0xB0,0x31,0x00,0x08,
84650 -0x00,0x00,0x00,0x00,
84651 -0x0C,0x31,0x00,0x0C,
84652 -0x00,0x00,0x00,0x00,
84653 -0xC2,0x31,0x00,0x08,
84654 -0x00,0x00,0x00,0x00,
84655 -0x71,0xFF,0x40,0x14,
84656 -0x00,0x00,0x00,0x00,
84657 -0x28,0x30,0x00,0x0C,
84658 -0x00,0x00,0x00,0x00,
84659 -0x77,0xFF,0x40,0x10,
84660 -0x00,0x00,0x00,0x00,
84661 -0xF6,0x5E,0x62,0x92,
84662 -0xF0,0xFF,0x03,0x24,
84663 -0x24,0x10,0x43,0x00,
84664 -0xF6,0x5E,0x62,0xA2,
84665 -0x02,0x80,0x03,0x3C,
84666 -0xF6,0x5E,0x62,0x92,
84667 -0xE0,0x3A,0x64,0x94,
84668 -0x04,0x00,0x42,0x34,
84669 -0x00,0x01,0x84,0x30,
84670 -0xF6,0x5E,0x62,0xA2,
84671 -0x61,0xFF,0x80,0x10,
84672 -0x00,0x00,0x00,0x00,
84673 -0xCD,0x4E,0x00,0x0C,
84674 -0x01,0x00,0x04,0x24,
84675 -0x83,0x31,0x00,0x08,
84676 -0x00,0x00,0x00,0x00,
84677 -0x65,0xFF,0x40,0x14,
84678 -0x00,0x00,0x00,0x00,
84679 -0x82,0x30,0x00,0x0C,
84680 -0x00,0x00,0x00,0x00,
84681 -0x61,0xFF,0x40,0x10,
84682 -0x00,0x00,0x00,0x00,
84683 -0xF6,0x5E,0x62,0x92,
84684 -0xF0,0xFF,0x03,0x24,
84685 -0x41,0xB0,0x04,0x3C,
84686 -0x24,0x10,0x43,0x00,
84687 -0xF6,0x5E,0x62,0xA2,
84688 -0xF6,0x5E,0x63,0x92,
84689 -0x08,0x00,0x85,0x34,
84690 -0x82,0x00,0x02,0x24,
84691 -0x01,0x00,0x63,0x34,
84692 -0x02,0x80,0x1E,0x3C,
84693 -0xF6,0x5E,0x63,0xA2,
84694 -0x00,0x00,0x80,0xAC,
84695 -0x00,0x00,0xA2,0xA4,
84696 -0x42,0xB0,0x04,0x3C,
84697 -0x30,0x1F,0xC2,0x27,
84698 -0xB0,0x1B,0x45,0x94,
84699 -0x00,0x00,0x83,0x90,
84700 -0xBE,0xFF,0x02,0x24,
84701 -0x03,0x00,0x86,0x34,
84702 -0x24,0x18,0x62,0x00,
84703 -0x00,0x01,0xA5,0x30,
84704 -0x90,0xFF,0x02,0x24,
84705 -0x00,0x00,0x83,0xA0,
84706 -0x00,0x00,0xC2,0xA0,
84707 -0x38,0x00,0xA0,0x10,
84708 -0x25,0xB0,0x06,0x3C,
84709 -0x25,0xB0,0x04,0x3C,
84710 -0x84,0x00,0x82,0x34,
84711 -0x00,0x00,0x46,0x8C,
84712 -0x80,0x00,0x84,0x34,
84713 -0x00,0x00,0x82,0x8C,
84714 -0x02,0x80,0x0B,0x3C,
84715 -0x1C,0x5F,0x64,0x8D,
84716 -0x00,0x38,0x06,0x00,
84717 -0x21,0x30,0x00,0x00,
84718 -0x25,0xA0,0xC2,0x00,
84719 -0x21,0x18,0x00,0x00,
84720 -0x02,0x80,0x0A,0x3C,
84721 -0x25,0xA8,0xE3,0x00,
84722 -0x21,0x28,0x00,0x00,
84723 -0x24,0x5F,0x42,0x8D,
84724 -0x21,0x20,0x94,0x00,
84725 -0x2B,0x18,0x94,0x00,
84726 -0x21,0x28,0xB5,0x00,
84727 -0x21,0x28,0xA3,0x00,
84728 -0x2B,0x10,0xA2,0x00,
84729 -0x24,0x01,0x40,0x14,
84730 -0x00,0x00,0x00,0x00,
84731 -0x24,0x5F,0x42,0x8D,
84732 -0x00,0x00,0x00,0x00,
84733 -0x10,0x01,0x45,0x10,
84734 -0x01,0x00,0x05,0x24,
84735 -0x30,0x1F,0xC2,0x27,
84736 -0xA4,0x3E,0x43,0x8C,
84737 -0x42,0xB0,0x07,0x3C,
84738 -0x00,0x00,0xE6,0x90,
84739 -0x18,0x00,0x65,0x00,
84740 -0xFB,0xFF,0x02,0x24,
84741 -0x24,0x30,0xC2,0x00,
84742 -0x00,0x00,0xE6,0xA0,
84743 -0x67,0x46,0x06,0x3C,
84744 -0xCF,0xAC,0xC6,0x34,
84745 -0x01,0x00,0x04,0x24,
84746 -0x21,0x28,0x00,0x00,
84747 -0x12,0x18,0x00,0x00,
84748 -0x82,0x1A,0x03,0x00,
84749 -0x40,0x10,0x03,0x00,
84750 -0x21,0x10,0x43,0x00,
84751 -0xC0,0x10,0x02,0x00,
84752 -0x21,0x10,0x43,0x00,
84753 -0x80,0x10,0x02,0x00,
84754 -0x19,0x00,0x46,0x00,
84755 -0x10,0x30,0x00,0x00,
84756 -0x23,0x10,0x46,0x00,
84757 -0x42,0x10,0x02,0x00,
84758 -0x21,0x30,0xC2,0x00,
84759 -0x02,0x33,0x06,0x00,
84760 -0x01,0x00,0x02,0x24,
84761 -0x8C,0x23,0x00,0x0C,
84762 -0x0A,0x30,0x46,0x00,
84763 -0x25,0xB0,0x06,0x3C,
84764 -0xF2,0x02,0xC3,0x34,
84765 -0x88,0xFF,0x02,0x24,
84766 -0x00,0x00,0x62,0xA0,
84767 -0x11,0x00,0xC7,0x34,
84768 -0x00,0x00,0xE2,0x90,
84769 -0x08,0x00,0xC5,0x34,
84770 -0x30,0x1F,0xC4,0x27,
84771 -0x01,0x00,0x42,0x34,
84772 -0x00,0x00,0xE2,0xA0,
84773 -0x00,0x00,0xA3,0x94,
84774 -0xB0,0x1B,0x82,0x94,
84775 -0xFF,0xFF,0x64,0x30,
84776 -0x10,0x00,0x84,0x34,
84777 -0x00,0x00,0xA4,0xA4,
84778 -0xFB,0xFF,0x84,0x30,
84779 -0x00,0x00,0xA4,0xA4,
84780 -0x00,0x01,0x42,0x30,
84781 -0x02,0x00,0x84,0x34,
84782 -0x00,0x00,0xA4,0xA4,
84783 -0x04,0x00,0x40,0x10,
84784 -0x42,0xB0,0x02,0x3C,
84785 -0x22,0x00,0x03,0x24,
84786 -0x03,0x00,0x42,0x34,
84787 -0x00,0x00,0x43,0xA0,
84788 -0xFF,0xF7,0x84,0x30,
84789 -0x00,0x00,0xA4,0xA4,
84790 -0x28,0x00,0xC4,0x34,
84791 -0x00,0x00,0x83,0x94,
84792 -0xEF,0xFE,0x02,0x24,
84793 -0xFE,0xFF,0x08,0x24,
84794 -0x24,0x18,0x62,0x00,
84795 -0x00,0x00,0x83,0xA4,
84796 -0x00,0x00,0x82,0x94,
84797 -0x26,0x00,0xC5,0x34,
84798 -0x02,0x80,0x03,0x3C,
84799 -0x24,0x10,0x48,0x00,
84800 -0x00,0x00,0x82,0xA4,
84801 -0xDA,0x5D,0x64,0x90,
84802 -0x00,0x00,0xA2,0x94,
84803 -0x04,0x00,0x84,0x30,
84804 -0x00,0x24,0x42,0x34,
84805 -0x00,0x00,0xA2,0xA4,
84806 -0x09,0x00,0x80,0x10,
84807 -0x00,0x00,0x00,0x00,
84808 -0x00,0x00,0xA2,0x94,
84809 -0x00,0x00,0x00,0x00,
84810 -0x24,0x10,0x48,0x00,
84811 -0x00,0x00,0xA2,0xA4,
84812 -0x00,0x00,0xE3,0x90,
84813 -0xFD,0xFF,0x02,0x24,
84814 -0x24,0x18,0x62,0x00,
84815 -0x00,0x00,0xE3,0xA0,
84816 -0x00,0x68,0x02,0x40,
84817 -0x00,0x08,0x42,0x30,
84818 -0xFD,0xFF,0x40,0x10,
84819 -0x00,0x00,0x00,0x00,
84820 -0x25,0xB0,0x12,0x3C,
84821 -0x11,0x00,0x43,0x36,
84822 -0x00,0x00,0x62,0x90,
84823 -0x00,0x00,0x00,0x00,
84824 -0x02,0x00,0x42,0x34,
84825 -0x00,0x00,0x62,0xA0,
84826 -0x00,0x00,0x00,0x00,
84827 -0x00,0x00,0x00,0x00,
84828 -0x00,0x00,0x00,0x00,
84829 -0x00,0x00,0x00,0x00,
84830 -0x00,0x00,0x00,0x00,
84831 -0x26,0x00,0x44,0x36,
84832 -0x00,0x00,0x82,0x94,
84833 -0x00,0x00,0x00,0x00,
84834 -0x01,0x00,0x42,0x34,
84835 -0x00,0x00,0x82,0xA4,
84836 -0x00,0x00,0x00,0x00,
84837 -0x00,0x00,0x00,0x00,
84838 -0x00,0x00,0x00,0x00,
84839 -0x00,0x00,0x00,0x00,
84840 -0x00,0x00,0x00,0x00,
84841 -0x00,0x00,0x00,0x00,
84842 -0x00,0x00,0x00,0x00,
84843 -0x00,0x00,0x00,0x00,
84844 -0x00,0x00,0x83,0x94,
84845 -0xFF,0xDB,0x02,0x24,
84846 -0x28,0x00,0x45,0x36,
84847 -0x24,0x18,0x62,0x00,
84848 -0x00,0x00,0x83,0xA4,
84849 -0x00,0x00,0xA2,0x94,
84850 -0x00,0x00,0x00,0x00,
84851 -0x01,0x00,0x42,0x34,
84852 -0x00,0x00,0xA2,0xA4,
84853 -0x00,0x00,0x00,0x00,
84854 -0x00,0x00,0x00,0x00,
84855 -0x00,0x00,0x00,0x00,
84856 -0x00,0x00,0x00,0x00,
84857 -0x00,0x00,0x00,0x00,
84858 -0x00,0x00,0x00,0x00,
84859 -0x00,0x00,0x00,0x00,
84860 -0x00,0x00,0x00,0x00,
84861 -0x00,0x00,0xA2,0x94,
84862 -0x00,0x00,0x00,0x00,
84863 -0x10,0x01,0x42,0x34,
84864 -0x00,0x00,0xA2,0xA4,
84865 -0x08,0x00,0x51,0x36,
84866 -0x00,0x00,0x23,0x96,
84867 -0x30,0x1F,0xD7,0x27,
84868 -0xB0,0x1B,0xE2,0x96,
84869 -0xFF,0xFF,0x70,0x30,
84870 -0x00,0x18,0x10,0x36,
84871 -0x00,0x00,0x30,0xA6,
84872 -0x00,0x01,0x42,0x30,
84873 -0xFD,0xFF,0x10,0x32,
84874 -0x00,0x00,0x30,0xA6,
84875 -0x05,0x00,0x40,0x10,
84876 -0x42,0xB0,0x02,0x3C,
84877 -0x00,0x00,0x43,0x90,
84878 -0xFB,0xFF,0x04,0x24,
84879 -0x24,0x18,0x64,0x00,
84880 -0x00,0x00,0x43,0xA0,
84881 -0x04,0x00,0x10,0x36,
84882 -0x54,0x22,0x00,0x0C,
84883 -0x32,0x00,0x04,0x24,
84884 -0x00,0x00,0x30,0xA6,
84885 -0x22,0x00,0x02,0x24,
84886 -0xF2,0x02,0x43,0x36,
84887 -0xEF,0xFF,0x10,0x32,
84888 -0x00,0x00,0x30,0xA6,
84889 -0xC8,0x00,0x04,0x24,
84890 -0x00,0x00,0x62,0xA0,
84891 -0x54,0x22,0x00,0x0C,
84892 -0x00,0x00,0x00,0x00,
84893 -0xB0,0x1B,0xE2,0x96,
84894 -0x00,0x00,0x00,0x00,
84895 -0x00,0x01,0x42,0x30,
84896 -0x41,0x00,0x40,0x10,
84897 -0x42,0xB0,0x06,0x3C,
84898 -0x84,0x00,0x42,0x36,
84899 -0x00,0x00,0x44,0x8C,
84900 -0x80,0x00,0x46,0x36,
84901 -0x00,0x00,0xC2,0x8C,
84902 -0x00,0x28,0x04,0x00,
84903 -0x21,0x18,0x00,0x00,
84904 -0x21,0x20,0x00,0x00,
84905 -0x25,0x30,0x82,0x00,
84906 -0x25,0x38,0xA3,0x00,
84907 -0xA4,0x3E,0xE3,0x8E,
84908 -0x23,0x28,0xD4,0x00,
84909 -0x80,0x12,0x05,0x00,
84910 -0x1B,0x00,0x43,0x00,
84911 -0x02,0x00,0x60,0x14,
84912 -0x00,0x00,0x00,0x00,
84913 -0x0D,0x00,0x07,0x00,
84914 -0x02,0x80,0x0B,0x3C,
84915 -0x1C,0x5F,0x63,0x8D,
84916 -0x12,0x10,0x00,0x00,
84917 -0x23,0x10,0x45,0x00,
84918 -0x21,0x10,0x43,0x00,
84919 -0x1C,0x5F,0x62,0xAD,
84920 -0x1C,0x5F,0x63,0x8D,
84921 -0x42,0xB0,0x02,0x3C,
84922 -0x03,0x00,0x42,0x34,
84923 -0xC4,0x09,0x63,0x24,
84924 -0x1C,0x5F,0x63,0xAD,
84925 -0x00,0x00,0x43,0x90,
84926 -0x00,0x00,0x00,0x00,
84927 -0x20,0x00,0x63,0x30,
84928 -0x20,0x00,0x60,0x14,
84929 -0x00,0x00,0x00,0x00,
84930 -0x1C,0x5F,0x62,0x8D,
84931 -0x02,0x80,0x0A,0x3C,
84932 -0x24,0x5F,0x44,0x8D,
84933 -0x21,0x40,0x46,0x00,
84934 -0x2B,0x28,0x06,0x01,
84935 -0x21,0x48,0x67,0x00,
84936 -0x21,0x48,0x25,0x01,
84937 -0x2B,0x20,0x24,0x01,
84938 -0x59,0x00,0x80,0x14,
84939 -0x00,0x00,0x00,0x00,
84940 -0x24,0x5F,0x42,0x8D,
84941 -0x00,0x00,0x00,0x00,
84942 -0x47,0x00,0x49,0x10,
84943 -0x01,0x00,0x05,0x24,
84944 -0x42,0xB0,0x02,0x3C,
84945 -0x00,0x00,0x43,0x90,
84946 -0xFB,0xFF,0x04,0x24,
84947 -0x01,0x00,0x06,0x24,
84948 -0x24,0x18,0x64,0x00,
84949 -0x00,0x00,0x43,0xA0,
84950 -0x04,0x00,0xA0,0x10,
84951 -0x01,0x00,0x04,0x24,
84952 -0x80,0x10,0x05,0x00,
84953 -0x21,0x10,0x45,0x00,
84954 -0x80,0x30,0x02,0x00,
84955 -0x8C,0x23,0x00,0x0C,
84956 -0x21,0x28,0x00,0x00,
84957 -0x42,0xB0,0x02,0x3C,
84958 -0x22,0x00,0x03,0x24,
84959 -0x03,0x00,0x42,0x34,
84960 -0x00,0x00,0x43,0xA0,
84961 -0x42,0xB0,0x06,0x3C,
84962 -0x00,0x00,0xC2,0x90,
84963 -0x30,0x1F,0xC5,0x27,
84964 -0xD0,0x1B,0xA8,0x8C,
84965 -0xDC,0x1B,0xA7,0x94,
84966 -0x41,0xB0,0x03,0x3C,
84967 -0x41,0x00,0x42,0x34,
84968 -0x08,0x00,0x64,0x34,
84969 -0x00,0x00,0xC2,0xA0,
84970 -0x00,0x00,0x68,0xAC,
84971 -0x00,0x00,0x87,0xA4,
84972 -0xF6,0x5E,0x63,0x92,
84973 -0xF0,0xFF,0x02,0x24,
84974 -0xDC,0x1B,0xA7,0xA4,
84975 -0x24,0x18,0x62,0x00,
84976 -0xF6,0x5E,0x63,0xA2,
84977 -0xF6,0x5E,0x62,0x92,
84978 -0xD0,0x1B,0xA8,0xAC,
84979 -0x02,0x00,0x42,0x34,
84980 -0xF6,0x5E,0x62,0xA2,
84981 -0x8E,0x31,0x00,0x08,
84982 -0x02,0x80,0x10,0x3C,
84983 -0x4C,0x30,0x00,0x0C,
84984 -0x00,0x00,0x00,0x00,
84985 -0x31,0xFE,0x40,0x10,
84986 -0x00,0x00,0x00,0x00,
84987 -0x1C,0x31,0x00,0x0C,
84988 -0x00,0x00,0x00,0x00,
84989 -0xF6,0x5E,0x62,0x92,
84990 -0xF0,0xFF,0x03,0x24,
84991 -0x24,0x10,0x43,0x00,
84992 -0xF6,0x5E,0x62,0xA2,
84993 -0xF6,0x5E,0x63,0x92,
84994 -0x00,0x00,0x00,0x00,
84995 -0x02,0x00,0x63,0x34,
84996 -0xF6,0x5E,0x63,0xA2,
84997 -0x88,0x31,0x00,0x08,
84998 -0x00,0x00,0x00,0x00,
84999 -0x99,0x99,0x03,0x3C,
85000 -0x25,0xB0,0x02,0x3C,
85001 -0x97,0x99,0x63,0x34,
85002 -0x18,0x03,0x42,0x34,
85003 -0x00,0x00,0x43,0xAC,
85004 -0xB0,0x31,0x00,0x08,
85005 -0x00,0x00,0x00,0x00,
85006 -0x20,0x5F,0x42,0x8D,
85007 -0x00,0x00,0x00,0x00,
85008 -0x2B,0x10,0x82,0x00,
85009 -0x0C,0x00,0x40,0x14,
85010 -0x00,0x00,0x00,0x00,
85011 -0x20,0x5F,0x42,0x8D,
85012 -0x61,0x32,0x00,0x08,
85013 -0x01,0x00,0x05,0x24,
85014 -0x20,0x5F,0x42,0x8D,
85015 -0x00,0x00,0x00,0x00,
85016 -0x2B,0x10,0x02,0x01,
85017 -0x0A,0x00,0x40,0x14,
85018 -0x00,0x00,0x00,0x00,
85019 -0x20,0x5F,0x42,0x8D,
85020 -0x32,0x33,0x00,0x08,
85021 -0x01,0x00,0x05,0x24,
85022 -0x20,0x5F,0x42,0x8D,
85023 -0x24,0x5F,0x43,0x8D,
85024 -0x1C,0x5F,0x64,0x8D,
85025 -0x23,0x10,0x54,0x00,
85026 -0x61,0x32,0x00,0x08,
85027 -0x23,0x28,0x44,0x00,
85028 -0x20,0x5F,0x42,0x8D,
85029 -0x24,0x5F,0x43,0x8D,
85030 -0x1C,0x5F,0x64,0x8D,
85031 -0x23,0x10,0x46,0x00,
85032 -0x32,0x33,0x00,0x08,
85033 -0x23,0x28,0x44,0x00,
85034 -0x02,0x80,0x02,0x3C,
85035 -0xF4,0x5E,0x43,0x90,
85036 -0x00,0x00,0x00,0x00,
85037 -0x07,0x00,0x60,0x10,
85038 -0x02,0x80,0x02,0x3C,
85039 -0xF6,0x5E,0x43,0x90,
85040 -0x04,0x00,0x04,0x24,
85041 -0x0F,0x00,0x63,0x30,
85042 -0x04,0x00,0x63,0x28,
85043 -0x03,0x00,0x60,0x14,
85044 -0x01,0x00,0x05,0x24,
85045 -0x08,0x00,0xE0,0x03,
85046 -0x00,0x00,0x00,0x00,
85047 -0x64,0x31,0x00,0x08,
85048 -0x00,0x00,0x00,0x00,
85049 -0x01,0x80,0x02,0x3C,
85050 -0x25,0xB0,0x03,0x3C,
85051 -0xE8,0xFF,0xBD,0x27,
85052 -0x6C,0xCE,0x42,0x24,
85053 -0x18,0x03,0x63,0x34,
85054 -0x14,0x00,0xBF,0xAF,
85055 -0x10,0x00,0xB0,0xAF,
85056 -0x00,0x00,0x62,0xAC,
85057 -0x00,0x60,0x10,0x40,
85058 -0x01,0x00,0x01,0x36,
85059 -0x01,0x00,0x21,0x38,
85060 -0x00,0x60,0x81,0x40,
85061 -0x02,0x80,0x04,0x3C,
85062 -0x13,0x5F,0x82,0x90,
85063 -0x00,0x00,0x00,0x00,
85064 -0x0B,0x00,0x40,0x10,
85065 -0x01,0x00,0x05,0x24,
85066 -0xD0,0x07,0x03,0x24,
85067 -0x02,0x80,0x02,0x3C,
85068 -0xE4,0x5E,0x43,0xAC,
85069 -0x13,0x5F,0x80,0xA0,
85070 -0x00,0x60,0x90,0x40,
85071 -0x14,0x00,0xBF,0x8F,
85072 -0x10,0x00,0xB0,0x8F,
85073 -0x21,0x10,0x00,0x00,
85074 -0x08,0x00,0xE0,0x03,
85075 -0x18,0x00,0xBD,0x27,
85076 -0x02,0x80,0x03,0x3C,
85077 -0x01,0x00,0x04,0x24,
85078 -0x02,0x80,0x02,0x3C,
85079 -0x16,0x5F,0x44,0xA0,
85080 -0x14,0x5F,0x60,0xA0,
85081 -0x02,0x80,0x02,0x3C,
85082 -0xF5,0x5E,0x44,0x90,
85083 -0x64,0x31,0x00,0x0C,
85084 -0xFF,0x00,0x84,0x30,
85085 -0x00,0x60,0x90,0x40,
85086 -0x14,0x00,0xBF,0x8F,
85087 -0x10,0x00,0xB0,0x8F,
85088 -0x21,0x10,0x00,0x00,
85089 -0x08,0x00,0xE0,0x03,
85090 -0x18,0x00,0xBD,0x27,
85091 -0x42,0x11,0x05,0x00,
85092 -0x0F,0x00,0x46,0x30,
85093 -0xE8,0xFF,0xBD,0x27,
85094 -0x09,0x00,0xC3,0x28,
85095 -0x14,0x00,0xBF,0xAF,
85096 -0x15,0x00,0x60,0x10,
85097 -0x10,0x00,0xB0,0xAF,
85098 -0x82,0x16,0x05,0x00,
85099 -0x01,0x00,0x42,0x30,
85100 -0x15,0x00,0x40,0x10,
85101 -0x00,0xC0,0x02,0x3C,
85102 -0x24,0x10,0xA2,0x00,
85103 -0x48,0x00,0x40,0x14,
85104 -0xC2,0x15,0x04,0x00,
85105 -0x01,0x00,0x42,0x30,
85106 -0x55,0x00,0x40,0x10,
85107 -0x00,0x00,0x00,0x00,
85108 -0x02,0x80,0x03,0x3C,
85109 -0x50,0xE9,0x63,0x24,
85110 -0x21,0x18,0xC3,0x00,
85111 -0x02,0x80,0x04,0x3C,
85112 -0x0F,0x5F,0x85,0x90,
85113 -0x00,0x00,0x62,0x90,
85114 -0x00,0x00,0x00,0x00,
85115 -0x24,0x10,0x45,0x00,
85116 -0x4B,0x00,0x40,0x10,
85117 -0x00,0x00,0x00,0x00,
85118 -0x14,0x00,0xBF,0x8F,
85119 -0x10,0x00,0xB0,0x8F,
85120 -0x08,0x00,0xE0,0x03,
85121 -0x18,0x00,0xBD,0x27,
85122 -0x24,0x10,0xA2,0x00,
85123 -0x20,0x00,0x40,0x14,
85124 -0xC2,0x15,0x04,0x00,
85125 -0x01,0x00,0x42,0x30,
85126 -0x0B,0x00,0x40,0x10,
85127 -0x02,0x80,0x04,0x3C,
85128 -0x02,0x80,0x03,0x3C,
85129 -0x50,0xE9,0x63,0x24,
85130 -0x21,0x18,0xC3,0x00,
85131 -0x02,0x80,0x04,0x3C,
85132 -0x0F,0x5F,0x85,0x90,
85133 -0x00,0x00,0x62,0x90,
85134 -0x00,0x00,0x00,0x00,
85135 -0x24,0x10,0x45,0x00,
85136 -0x3C,0x00,0x40,0x14,
85137 -0x02,0x80,0x04,0x3C,
85138 -0x0E,0x5F,0x82,0x90,
85139 -0xFE,0xFF,0x03,0x24,
85140 -0x24,0x10,0x43,0x00,
85141 -0x0E,0x5F,0x82,0xA0,
85142 -0x0E,0x5F,0x82,0x90,
85143 -0x00,0x00,0x00,0x00,
85144 -0x07,0x00,0x42,0x30,
85145 -0xE4,0xFF,0x40,0x14,
85146 -0x02,0x80,0x02,0x3C,
85147 -0x0C,0x5F,0x40,0xA0,
85148 -0x02,0x80,0x03,0x3C,
85149 -0xF5,0x5E,0x64,0x90,
85150 -0x14,0x00,0xBF,0x8F,
85151 -0x10,0x00,0xB0,0x8F,
85152 -0x01,0x00,0x05,0x24,
85153 -0xFF,0x00,0x84,0x30,
85154 -0x64,0x31,0x00,0x08,
85155 -0x18,0x00,0xBD,0x27,
85156 -0x02,0x80,0x04,0x3C,
85157 -0x0E,0x5F,0x82,0x90,
85158 -0xFD,0xFF,0x03,0x24,
85159 -0x14,0x00,0xBF,0x8F,
85160 -0x24,0x10,0x43,0x00,
85161 -0x02,0x80,0x03,0x3C,
85162 -0x0E,0x5F,0x82,0xA0,
85163 -0x12,0x5F,0x60,0xA0,
85164 -0x42,0xB0,0x04,0x3C,
85165 -0x00,0x00,0x82,0x90,
85166 -0x10,0x00,0xB0,0x8F,
85167 -0xEF,0xFF,0x03,0x24,
85168 -0x24,0x10,0x43,0x00,
85169 -0x03,0x00,0x85,0x34,
85170 -0x40,0x00,0x03,0x24,
85171 -0x18,0x00,0xBD,0x27,
85172 -0x00,0x00,0x82,0xA0,
85173 -0x00,0x00,0xA3,0xA0,
85174 -0x08,0x00,0xE0,0x03,
85175 -0x00,0x00,0x00,0x00,
85176 -0x42,0xB0,0x07,0x3C,
85177 -0x00,0x00,0xE3,0x90,
85178 -0xEF,0xFF,0x02,0x24,
85179 -0x03,0x00,0xF0,0x34,
85180 -0x24,0x18,0x62,0x00,
85181 -0x40,0x00,0x02,0x24,
85182 -0x00,0x00,0xE3,0xA0,
85183 -0x02,0x00,0x04,0x24,
85184 -0x00,0x00,0x02,0xA2,
85185 -0x21,0x28,0x00,0x00,
85186 -0x8C,0x23,0x00,0x0C,
85187 -0x00,0xF0,0x06,0x34,
85188 -0x44,0x00,0x02,0x24,
85189 -0x00,0x00,0x02,0xA2,
85190 -0xE0,0x33,0x00,0x08,
85191 -0x00,0x00,0x00,0x00,
85192 -0x14,0x00,0xBF,0x8F,
85193 -0x10,0x00,0xB0,0x8F,
85194 -0x01,0x00,0x04,0x24,
85195 -0xFE,0x4E,0x00,0x08,
85196 -0x18,0x00,0xBD,0x27,
85197 -0x0E,0x5F,0x82,0x90,
85198 -0xF6,0x33,0x00,0x08,
85199 -0xFB,0xFF,0x03,0x24,
85200 -0x82,0x16,0x05,0x00,
85201 -0xE8,0xFF,0xBD,0x27,
85202 -0x01,0x00,0x42,0x30,
85203 -0x14,0x00,0xBF,0xAF,
85204 -0x0E,0x00,0x40,0x10,
85205 -0x10,0x00,0xB0,0xAF,
85206 -0x00,0xC0,0x02,0x3C,
85207 -0x24,0x10,0xA2,0x00,
85208 -0x37,0x00,0x40,0x14,
85209 -0x02,0x80,0x02,0x3C,
85210 -0x0D,0x5F,0x43,0x90,
85211 -0x02,0x00,0x02,0x24,
85212 -0xFF,0x00,0x63,0x30,
85213 -0x44,0x00,0x62,0x10,
85214 -0x01,0x00,0x04,0x24,
85215 -0x14,0x00,0xBF,0x8F,
85216 -0x10,0x00,0xB0,0x8F,
85217 -0xFE,0x4E,0x00,0x08,
85218 -0x18,0x00,0xBD,0x27,
85219 -0x00,0xC0,0x02,0x3C,
85220 -0x24,0x10,0xA2,0x00,
85221 -0x0E,0x00,0x40,0x14,
85222 -0x02,0x80,0x06,0x3C,
85223 -0x0E,0x5F,0xC2,0x90,
85224 -0xFE,0xFF,0x03,0x24,
85225 -0x24,0x10,0x43,0x00,
85226 -0x0E,0x5F,0xC2,0xA0,
85227 -0x0E,0x5F,0xC2,0x90,
85228 -0x00,0x00,0x00,0x00,
85229 -0x07,0x00,0x42,0x30,
85230 -0x18,0x00,0x40,0x10,
85231 -0x02,0x80,0x02,0x3C,
85232 -0x14,0x00,0xBF,0x8F,
85233 -0x10,0x00,0xB0,0x8F,
85234 -0x08,0x00,0xE0,0x03,
85235 -0x18,0x00,0xBD,0x27,
85236 -0x0E,0x5F,0xC2,0x90,
85237 -0xFD,0xFF,0x03,0x24,
85238 -0x42,0xB0,0x04,0x3C,
85239 -0x24,0x10,0x43,0x00,
85240 -0x02,0x80,0x03,0x3C,
85241 -0x0E,0x5F,0xC2,0xA0,
85242 -0x12,0x5F,0x60,0xA0,
85243 -0x00,0x00,0x82,0x90,
85244 -0xEF,0xFF,0x03,0x24,
85245 -0x03,0x00,0x85,0x34,
85246 -0x24,0x10,0x43,0x00,
85247 -0x40,0x00,0x03,0x24,
85248 -0x00,0x00,0x82,0xA0,
85249 -0x00,0x00,0xA3,0xA0,
85250 -0x0E,0x5F,0xC2,0x90,
85251 -0x00,0x00,0x00,0x00,
85252 -0x07,0x00,0x42,0x30,
85253 -0xEA,0xFF,0x40,0x14,
85254 -0x02,0x80,0x02,0x3C,
85255 -0x0C,0x5F,0x40,0xA0,
85256 -0x02,0x80,0x03,0x3C,
85257 -0xF5,0x5E,0x64,0x90,
85258 -0x14,0x00,0xBF,0x8F,
85259 -0x10,0x00,0xB0,0x8F,
85260 -0x01,0x00,0x05,0x24,
85261 -0xFF,0x00,0x84,0x30,
85262 -0x64,0x31,0x00,0x08,
85263 -0x18,0x00,0xBD,0x27,
85264 -0x42,0xB0,0x07,0x3C,
85265 -0x00,0x00,0xE3,0x90,
85266 -0xEF,0xFF,0x02,0x24,
85267 -0x03,0x00,0xF0,0x34,
85268 -0x24,0x18,0x62,0x00,
85269 -0x40,0x00,0x02,0x24,
85270 -0x00,0x00,0xE3,0xA0,
85271 -0x02,0x00,0x04,0x24,
85272 -0x00,0x00,0x02,0xA2,
85273 -0x21,0x28,0x00,0x00,
85274 -0x8C,0x23,0x00,0x0C,
85275 -0x00,0xF0,0x06,0x34,
85276 -0x44,0x00,0x02,0x24,
85277 -0x00,0x00,0x02,0xA2,
85278 -0x14,0x00,0xBF,0x8F,
85279 -0x10,0x00,0xB0,0x8F,
85280 -0x08,0x00,0xE0,0x03,
85281 -0x18,0x00,0xBD,0x27,
85282 -0x0D,0x30,0x00,0x0C,
85283 -0x00,0x00,0x00,0x00,
85284 -0x14,0x00,0xBF,0x8F,
85285 -0x10,0x00,0xB0,0x8F,
85286 -0x0C,0x00,0x04,0x24,
85287 -0x01,0x00,0x05,0x24,
85288 -0x64,0x31,0x00,0x08,
85289 -0x18,0x00,0xBD,0x27,
85290 -0x01,0x80,0x02,0x3C,
85291 -0x25,0xB0,0x03,0x3C,
85292 -0xE8,0xFF,0xBD,0x27,
85293 -0x30,0xD2,0x42,0x24,
85294 -0x18,0x03,0x63,0x34,
85295 -0x10,0x00,0xB0,0xAF,
85296 -0x00,0x00,0x62,0xAC,
85297 -0x02,0x80,0x10,0x3C,
85298 -0xF5,0x5E,0x02,0x92,
85299 -0x14,0x00,0xBF,0xAF,
85300 -0x0F,0x00,0x42,0x30,
85301 -0x03,0x00,0x42,0x28,
85302 -0x05,0x00,0x40,0x10,
85303 -0x01,0x00,0x05,0x24,
85304 -0x4C,0x30,0x00,0x0C,
85305 -0x00,0x00,0x00,0x00,
85306 -0x04,0x00,0x40,0x10,
85307 -0x01,0x00,0x05,0x24,
85308 -0xF5,0x5E,0x04,0x92,
85309 -0x64,0x31,0x00,0x0C,
85310 -0xFF,0x00,0x84,0x30,
85311 -0x02,0x80,0x04,0x3C,
85312 -0x30,0x1F,0x84,0x24,
85313 -0xE0,0x1B,0x83,0x94,
85314 -0xDC,0x1B,0x85,0x94,
85315 -0x14,0x00,0xBF,0x8F,
85316 -0x10,0x00,0xB0,0x8F,
85317 -0x02,0x00,0x63,0x30,
85318 -0x41,0xB0,0x02,0x3C,
85319 -0x25,0x18,0x65,0x00,
85320 -0x08,0x00,0x42,0x34,
85321 -0x18,0x00,0xBD,0x27,
85322 -0x00,0x00,0x43,0xA4,
85323 -0x08,0x00,0xE0,0x03,
85324 -0xDC,0x1B,0x83,0xA4,
85325 -0xE8,0xFF,0xBD,0x27,
85326 -0x10,0x00,0xB0,0xAF,
85327 -0x14,0x00,0xBF,0xAF,
85328 -0x02,0x80,0x10,0x3C,
85329 -0x08,0x14,0x04,0x26,
85330 -0x21,0x28,0x00,0x00,
85331 -0x21,0x30,0x00,0x00,
85332 -0x91,0x3C,0x00,0x0C,
85333 -0x21,0x38,0x00,0x00,
85334 -0xB4,0x34,0x00,0x08,
85335 -0x08,0x14,0x04,0x26,
85336 -0xE8,0xFF,0xBD,0x27,
85337 -0x10,0x00,0xBF,0xAF,
85338 -0xCF,0x61,0x00,0x0C,
85339 -0x21,0x38,0x00,0x00,
85340 -0x10,0x00,0xBF,0x8F,
85341 -0x00,0x00,0x00,0x00,
85342 -0x08,0x00,0xE0,0x03,
85343 -0x18,0x00,0xBD,0x27,
85344 -0xFF,0xFF,0x8D,0x30,
85345 -0x00,0x60,0x0F,0x40,
85346 -0x01,0x00,0xE1,0x35,
85347 -0x01,0x00,0x21,0x38,
85348 -0x00,0x60,0x81,0x40,
85349 -0x02,0x80,0x06,0x3C,
85350 -0x30,0x1F,0xCE,0x24,
85351 -0x2A,0x1C,0xC2,0x91,
85352 -0x00,0x00,0x00,0x00,
85353 -0x1D,0x00,0x40,0x10,
85354 -0x25,0xB0,0x03,0x3C,
85355 -0x38,0x02,0x64,0x34,
85356 -0x80,0xFF,0x02,0x24,
85357 -0x00,0x00,0x82,0xA0,
85358 -0x34,0x02,0x6A,0x34,
85359 -0xD2,0x01,0x65,0x34,
85360 -0xD6,0x01,0x66,0x34,
85361 -0xDA,0x01,0x67,0x34,
85362 -0xDE,0x01,0x63,0x34,
85363 -0x00,0x00,0xA8,0x94,
85364 -0x00,0x00,0xC9,0x94,
85365 -0x00,0x00,0xEB,0x94,
85366 -0x00,0x00,0x6C,0x94,
85367 -0x00,0x00,0x44,0x95,
85368 -0xB0,0xFE,0xA2,0x25,
85369 -0xFF,0xFF,0x4D,0x30,
85370 -0x28,0x1C,0xC4,0xA5,
85371 -0x00,0x00,0xA0,0xA4,
85372 -0x20,0x1C,0xC8,0xA5,
85373 -0x00,0x00,0xC0,0xA4,
85374 -0x22,0x1C,0xC9,0xA5,
85375 -0x00,0x00,0xE0,0xA4,
85376 -0x24,0x1C,0xCB,0xA5,
85377 -0x00,0x00,0x60,0xA4,
85378 -0x00,0x00,0x4D,0xA5,
85379 -0x26,0x1C,0xCC,0xA5,
85380 -0x00,0x60,0x8F,0x40,
85381 -0x08,0x00,0xE0,0x03,
85382 -0x00,0x00,0x00,0x00,
85383 -0x2A,0xB0,0x02,0x3C,
85384 -0x0A,0x00,0x45,0x34,
85385 -0x63,0x00,0x03,0x24,
85386 -0xFF,0xFF,0x04,0x34,
85387 -0x00,0x00,0xA2,0x90,
85388 -0x00,0x00,0x00,0x00,
85389 -0x0A,0x00,0x40,0x10,
85390 -0x30,0x1F,0xC2,0x24,
85391 -0x64,0x00,0x02,0x24,
85392 -0xFF,0xFF,0x42,0x24,
85393 -0xFF,0xFF,0x42,0x30,
85394 -0xFE,0xFF,0x40,0x14,
85395 -0xFF,0xFF,0x42,0x24,
85396 -0xFF,0xFF,0x62,0x24,
85397 -0xFF,0xFF,0x43,0x30,
85398 -0xF4,0xFF,0x64,0x14,
85399 -0x30,0x1F,0xC2,0x24,
85400 -0x28,0x1C,0x48,0x94,
85401 -0x26,0x1C,0x47,0x94,
85402 -0x20,0x1C,0x49,0x94,
85403 -0x22,0x1C,0x4A,0x94,
85404 -0x24,0x1C,0x4B,0x94,
85405 -0x25,0xB0,0x03,0x3C,
85406 -0x38,0x02,0x6C,0x34,
85407 -0x34,0x02,0x62,0x34,
85408 -0xD2,0x01,0x64,0x34,
85409 -0xD6,0x01,0x65,0x34,
85410 -0xDA,0x01,0x66,0x34,
85411 -0xDE,0x01,0x63,0x34,
85412 -0x00,0x00,0x48,0xA4,
85413 -0x00,0x00,0x89,0xA4,
85414 -0x00,0x00,0xAA,0xA4,
85415 -0x00,0x00,0xCB,0xA4,
85416 -0x00,0x00,0x67,0xA4,
85417 -0x00,0x00,0x80,0xA1,
85418 -0x00,0x60,0x8F,0x40,
85419 -0x08,0x00,0xE0,0x03,
85420 -0x00,0x00,0x00,0x00,
85421 -0xD0,0xFF,0xBD,0x27,
85422 -0x28,0x00,0xB4,0xAF,
85423 -0x2C,0x00,0xBF,0xAF,
85424 -0x24,0x00,0xB3,0xAF,
85425 -0x20,0x00,0xB2,0xAF,
85426 -0x1C,0x00,0xB1,0xAF,
85427 -0x18,0x00,0xB0,0xAF,
85428 -0xFF,0xFF,0x14,0x24,
85429 -0x02,0x80,0x13,0x3C,
85430 -0x41,0xB0,0x02,0x3C,
85431 -0x30,0x1F,0x63,0x26,
85432 -0x04,0x00,0x42,0x34,
85433 -0x00,0x00,0x45,0x8C,
85434 -0xD4,0x1B,0x64,0x8C,
85435 -0xD0,0x1B,0x66,0x8C,
85436 -0x02,0x80,0x02,0x3C,
85437 -0x08,0x5E,0x47,0x90,
85438 -0x25,0xB0,0x08,0x3C,
85439 -0xB0,0x03,0x02,0x35,
85440 -0x25,0x90,0x85,0x00,
85441 -0x00,0x00,0x52,0xAC,
85442 -0x00,0x00,0x46,0xAC,
85443 -0x01,0x00,0x02,0x24,
85444 -0x8D,0x03,0xE2,0x10,
85445 -0xD4,0x1B,0x72,0xAC,
85446 -0x30,0x1F,0x64,0x26,
85447 -0xD0,0x1B,0x82,0x8C,
85448 -0x00,0x00,0x00,0x00,
85449 -0x24,0x10,0x52,0x00,
85450 -0x01,0x00,0x42,0x30,
85451 -0x0E,0x00,0x40,0x10,
85452 -0x30,0x1F,0x67,0x26,
85453 -0x25,0xB0,0x10,0x3C,
85454 -0xB0,0x03,0x02,0x36,
85455 -0x01,0x00,0x05,0x24,
85456 -0x00,0x00,0x45,0xAC,
85457 -0x04,0x00,0x0B,0x36,
85458 -0xD4,0x1B,0x83,0x8C,
85459 -0x00,0x00,0x69,0x8D,
85460 -0x40,0x00,0x02,0x3C,
85461 -0x01,0x00,0x63,0x38,
85462 -0x24,0x10,0x22,0x01,
85463 -0x2A,0x01,0x40,0x10,
85464 -0xD4,0x1B,0x83,0xAC,
85465 -0x30,0x1F,0x67,0x26,
85466 -0xD0,0x1B,0xE8,0x8C,
85467 -0x00,0x00,0x00,0x00,
85468 -0x24,0x10,0x12,0x01,
85469 -0x04,0x00,0x42,0x30,
85470 -0x18,0x00,0x40,0x10,
85471 -0x30,0x1F,0x71,0x26,
85472 -0x25,0xB0,0x03,0x3C,
85473 -0xB0,0x03,0x64,0x34,
85474 -0x04,0x00,0x02,0x24,
85475 -0x00,0x00,0x82,0xAC,
85476 -0xD4,0x1B,0xE2,0x8C,
85477 -0xFC,0x00,0x63,0x34,
85478 -0xAC,0x1B,0xE5,0x94,
85479 -0xD0,0x37,0xE4,0x8C,
85480 -0x00,0x00,0x66,0x8C,
85481 -0x04,0x00,0x42,0x38,
85482 -0x21,0x48,0x85,0x00,
85483 -0x0A,0x00,0xC9,0x10,
85484 -0xD4,0x1B,0xE2,0xAC,
85485 -0x02,0x80,0x05,0x3C,
85486 -0xBC,0x5E,0xA2,0x8C,
85487 -0xFB,0xFF,0x04,0x24,
85488 -0x24,0x20,0x04,0x01,
85489 -0x00,0x10,0x42,0x34,
85490 -0x41,0xB0,0x03,0x3C,
85491 -0xBC,0x5E,0xA2,0xAC,
85492 -0x00,0x00,0x64,0xAC,
85493 -0xD0,0x1B,0xE4,0xAC,
85494 -0x30,0x1F,0x71,0x26,
85495 -0xD0,0x1B,0x22,0x8E,
85496 -0x00,0x00,0x00,0x00,
85497 -0x24,0x10,0x52,0x00,
85498 -0x08,0x00,0x42,0x30,
85499 -0x0A,0x00,0x40,0x10,
85500 -0x00,0x00,0x00,0x00,
85501 -0xB0,0x1B,0x22,0x96,
85502 -0x00,0x00,0x00,0x00,
85503 -0x04,0x00,0x42,0x30,
85504 -0x5D,0x03,0x40,0x14,
85505 -0x00,0x80,0x02,0x3C,
85506 -0xD4,0x1B,0x22,0x8E,
85507 -0x00,0x00,0x00,0x00,
85508 -0x08,0x00,0x42,0x38,
85509 -0xD4,0x1B,0x22,0xAE,
85510 -0x30,0x1F,0x70,0x26,
85511 -0xD0,0x1B,0x02,0x8E,
85512 -0x00,0x00,0x00,0x00,
85513 -0x24,0x20,0x52,0x00,
85514 -0x00,0x08,0x83,0x30,
85515 -0x06,0x00,0x60,0x10,
85516 -0x00,0x10,0x82,0x30,
85517 -0xD4,0x1B,0x02,0x8E,
85518 -0x00,0x00,0x00,0x00,
85519 -0x00,0x08,0x42,0x38,
85520 -0xD4,0x1B,0x02,0xAE,
85521 -0x00,0x10,0x82,0x30,
85522 -0x05,0x03,0x40,0x14,
85523 -0x00,0x00,0x00,0x00,
85524 -0x30,0x1F,0x70,0x26,
85525 -0xD0,0x1B,0x03,0x8E,
85526 -0x00,0x00,0x00,0x00,
85527 -0x24,0x10,0x72,0x00,
85528 -0x00,0x20,0x42,0x30,
85529 -0xF7,0x02,0x40,0x14,
85530 -0x00,0x00,0x00,0x00,
85531 -0x24,0x10,0x72,0x00,
85532 -0x00,0x80,0x42,0x30,
85533 -0xB9,0x01,0x40,0x14,
85534 -0x01,0x00,0x03,0x3C,
85535 -0x30,0x1F,0x70,0x26,
85536 -0xD0,0x1B,0x02,0x8E,
85537 -0x00,0x00,0x00,0x00,
85538 -0x24,0x10,0x52,0x00,
85539 -0x24,0x10,0x54,0x00,
85540 -0x24,0x10,0x43,0x00,
85541 -0xF1,0x01,0x40,0x14,
85542 -0x00,0x00,0x00,0x00,
85543 -0xD0,0x1B,0x02,0x8E,
85544 -0x02,0x00,0x03,0x3C,
85545 -0x24,0x10,0x52,0x00,
85546 -0x24,0x10,0x43,0x00,
85547 -0x28,0x02,0x40,0x14,
85548 -0x00,0x00,0x00,0x00,
85549 -0x30,0x1F,0x70,0x26,
85550 -0xD0,0x1B,0x02,0x8E,
85551 -0x04,0x00,0x03,0x3C,
85552 -0x24,0x10,0x52,0x00,
85553 -0x24,0x10,0x54,0x00,
85554 -0x24,0x10,0x43,0x00,
85555 -0x62,0x02,0x40,0x14,
85556 -0x00,0x00,0x00,0x00,
85557 -0x30,0x1F,0x70,0x26,
85558 -0xD0,0x1B,0x02,0x8E,
85559 -0x08,0x00,0x03,0x3C,
85560 -0x24,0x10,0x52,0x00,
85561 -0x24,0x10,0x43,0x00,
85562 -0x9B,0x02,0x40,0x14,
85563 -0x00,0x00,0x00,0x00,
85564 -0x30,0x1F,0x70,0x26,
85565 -0xD0,0x1B,0x02,0x8E,
85566 -0x10,0x00,0x03,0x3C,
85567 -0x24,0x10,0x52,0x00,
85568 -0x24,0x10,0x54,0x00,
85569 -0x24,0x10,0x43,0x00,
85570 -0x5A,0x01,0x40,0x14,
85571 -0x00,0x00,0x00,0x00,
85572 -0x30,0x1F,0x70,0x26,
85573 -0xD0,0x1B,0x02,0x8E,
85574 -0x20,0x00,0x03,0x3C,
85575 -0x24,0x10,0x52,0x00,
85576 -0x24,0x10,0x43,0x00,
85577 -0x18,0x01,0x40,0x14,
85578 -0x00,0x00,0x00,0x00,
85579 -0x30,0x1F,0x70,0x26,
85580 -0xD0,0x1B,0x02,0x8E,
85581 -0x40,0x00,0x03,0x3C,
85582 -0x24,0x10,0x52,0x00,
85583 -0x24,0x10,0x54,0x00,
85584 -0x24,0x10,0x43,0x00,
85585 -0xD6,0x00,0x40,0x14,
85586 -0x00,0x00,0x00,0x00,
85587 -0x30,0x1F,0x65,0x26,
85588 -0xD0,0x1B,0xA2,0x8C,
85589 -0x00,0x04,0x03,0x3C,
85590 -0x24,0x10,0x52,0x00,
85591 -0x24,0x10,0x43,0x00,
85592 -0x3D,0x00,0x40,0x10,
85593 -0x30,0x1F,0x66,0x26,
85594 -0x2A,0xB0,0x02,0x3C,
85595 -0x2C,0x00,0x43,0x34,
85596 -0x00,0x00,0x69,0x8C,
85597 -0xFF,0x00,0x02,0x24,
85598 -0xFF,0x00,0x24,0x31,
85599 -0x29,0x03,0x82,0x10,
85600 -0x00,0x80,0x22,0x31,
85601 -0xF9,0x02,0x40,0x14,
85602 -0x00,0x80,0x02,0x3C,
85603 -0x00,0xFF,0x02,0x3C,
85604 -0x24,0x10,0x22,0x01,
85605 -0x0B,0x00,0x40,0x10,
85606 -0xFF,0x00,0x02,0x24,
85607 -0xB8,0x36,0xA2,0x90,
85608 -0x20,0xB0,0x03,0x3C,
85609 -0x00,0x12,0x02,0x00,
85610 -0x21,0x10,0x43,0x00,
85611 -0x0C,0x00,0x49,0x8C,
85612 -0x25,0xB0,0x03,0x3C,
85613 -0xB0,0x03,0x63,0x34,
85614 -0x00,0x00,0x69,0xAC,
85615 -0xFF,0x00,0x24,0x31,
85616 -0xFF,0x00,0x02,0x24,
85617 -0x1B,0x00,0x82,0x10,
85618 -0x30,0x1F,0x70,0x26,
85619 -0xFF,0x00,0x23,0x31,
85620 -0x88,0x37,0x05,0x8E,
85621 -0x20,0x10,0x02,0x3C,
85622 -0x00,0x1A,0x03,0x00,
85623 -0x21,0x18,0x62,0x00,
85624 -0x21,0x30,0x60,0x00,
85625 -0x1C,0x37,0x03,0xAE,
85626 -0x0A,0x00,0x04,0x24,
85627 -0xB8,0x36,0x09,0xA2,
85628 -0x00,0x01,0x07,0x24,
85629 -0x73,0x01,0x00,0x0C,
85630 -0x10,0x00,0xA0,0xAF,
85631 -0xD0,0x1B,0x05,0x8E,
85632 -0x02,0x80,0x06,0x3C,
85633 -0xBC,0x5E,0xC4,0x8C,
85634 -0x00,0x04,0x02,0x3C,
85635 -0x27,0x10,0x02,0x00,
85636 -0x24,0x28,0xA2,0x00,
85637 -0x25,0xB0,0x02,0x3C,
85638 -0x00,0x40,0x84,0x34,
85639 -0xB0,0x03,0x42,0x34,
85640 -0x41,0xB0,0x03,0x3C,
85641 -0x00,0x00,0x44,0xAC,
85642 -0x00,0x00,0x65,0xAC,
85643 -0xBC,0x5E,0xC4,0xAC,
85644 -0xD0,0x1B,0x05,0xAE,
85645 -0x30,0x1F,0x65,0x26,
85646 -0xD4,0x1B,0xA4,0x8C,
85647 -0x00,0x04,0x03,0x3C,
85648 -0x25,0xB0,0x02,0x3C,
85649 -0x26,0x20,0x83,0x00,
85650 -0xB0,0x03,0x42,0x34,
85651 -0x00,0x00,0x44,0xAC,
85652 -0xD4,0x1B,0xA4,0xAC,
85653 -0x30,0x1F,0x66,0x26,
85654 -0xD0,0x1B,0xC7,0x8C,
85655 -0x00,0x08,0x04,0x3C,
85656 -0x24,0x28,0xF2,0x00,
85657 -0x24,0x10,0xA4,0x00,
85658 -0x08,0x00,0x40,0x10,
85659 -0x80,0x00,0x08,0x3C,
85660 -0xD4,0x1B,0xC3,0x8C,
85661 -0x25,0xB0,0x02,0x3C,
85662 -0xB0,0x03,0x42,0x34,
85663 -0x26,0x18,0x64,0x00,
85664 -0x00,0x00,0x44,0xAC,
85665 -0xD4,0x1B,0xC3,0xAC,
85666 -0x80,0x00,0x08,0x3C,
85667 -0x24,0x10,0xA8,0x00,
85668 -0x21,0x00,0x40,0x10,
85669 -0x00,0x00,0x00,0x00,
85670 -0xD4,0x1B,0xC3,0x8C,
85671 -0x25,0xB0,0x09,0x3C,
85672 -0xB0,0x03,0x2A,0x35,
85673 -0x2A,0xB0,0x02,0x3C,
85674 -0x00,0x00,0x43,0xAD,
85675 -0x36,0x00,0x42,0x34,
85676 -0x00,0x00,0x43,0x90,
85677 -0x23,0xB0,0x04,0x3C,
85678 -0xFF,0x1F,0x02,0x3C,
85679 -0xC0,0x18,0x03,0x00,
85680 -0xF0,0x07,0x63,0x30,
85681 -0x00,0x38,0xC5,0x8C,
85682 -0x21,0x18,0x64,0x00,
85683 -0xFF,0xFF,0x42,0x34,
85684 -0x24,0x18,0x62,0x00,
85685 -0xCE,0x02,0x65,0x10,
85686 -0x04,0x38,0xC3,0xAC,
85687 -0x02,0x80,0x05,0x3C,
85688 -0xBC,0x5E,0xA3,0x8C,
85689 -0x27,0x20,0x08,0x00,
85690 -0x24,0x20,0xE4,0x00,
85691 -0x00,0x08,0x63,0x34,
85692 -0x41,0xB0,0x02,0x3C,
85693 -0x00,0x00,0x43,0xAD,
85694 -0x00,0x00,0x44,0xAC,
85695 -0xBC,0x5E,0xA3,0xAC,
85696 -0xD0,0x1B,0xC4,0xAC,
85697 -0x30,0x1F,0x62,0x26,
85698 -0xD4,0x1B,0x43,0x8C,
85699 -0x80,0x00,0x04,0x3C,
85700 -0x26,0x18,0x64,0x00,
85701 -0xD4,0x1B,0x43,0xAC,
85702 -0x30,0x1F,0x66,0x26,
85703 -0xD0,0x1B,0xC3,0x8C,
85704 -0x00,0x01,0x05,0x3C,
85705 -0x24,0x20,0x72,0x00,
85706 -0x24,0x10,0x85,0x00,
85707 -0x06,0x00,0x40,0x10,
85708 -0x25,0xB0,0x02,0x3C,
85709 -0xD4,0x1B,0xC3,0x8C,
85710 -0xB0,0x03,0x42,0x34,
85711 -0x26,0x18,0x65,0x00,
85712 -0x00,0x00,0x45,0xAC,
85713 -0xD4,0x1B,0xC3,0xAC,
85714 -0x00,0x02,0x05,0x3C,
85715 -0x24,0x10,0x85,0x00,
85716 -0x06,0x00,0x40,0x10,
85717 -0x25,0xB0,0x02,0x3C,
85718 -0xD4,0x1B,0xC3,0x8C,
85719 -0xB0,0x03,0x42,0x34,
85720 -0x26,0x18,0x65,0x00,
85721 -0x00,0x00,0x45,0xAC,
85722 -0xD4,0x1B,0xC3,0xAC,
85723 -0x00,0x10,0x05,0x3C,
85724 -0x24,0x10,0x85,0x00,
85725 -0x0C,0x00,0x40,0x10,
85726 -0x30,0x1F,0x63,0x26,
85727 -0xB0,0x1B,0xC3,0x94,
85728 -0x00,0x00,0x00,0x00,
85729 -0x04,0x00,0x62,0x30,
85730 -0x02,0x00,0x40,0x10,
85731 -0x00,0x08,0x62,0x34,
85732 -0xB0,0x1B,0xC2,0xA4,
85733 -0xD4,0x1B,0xC2,0x8C,
85734 -0x00,0x00,0x00,0x00,
85735 -0x26,0x10,0x45,0x00,
85736 -0xD4,0x1B,0xC2,0xAC,
85737 -0x30,0x1F,0x63,0x26,
85738 -0xD0,0x1B,0x62,0x8C,
85739 -0x00,0x20,0x05,0x3C,
85740 -0x24,0x10,0x52,0x00,
85741 -0x24,0x10,0x45,0x00,
85742 -0x0B,0x00,0x40,0x10,
85743 -0x00,0x00,0x00,0x00,
85744 -0xB0,0x1B,0x64,0x94,
85745 -0x00,0x00,0x00,0x00,
85746 -0x04,0x00,0x82,0x30,
85747 -0x02,0x00,0x40,0x10,
85748 -0xFF,0xF7,0x82,0x30,
85749 -0xB0,0x1B,0x62,0xA4,
85750 -0xD4,0x1B,0x62,0x8C,
85751 -0x00,0x00,0x00,0x00,
85752 -0x26,0x10,0x45,0x00,
85753 -0xD4,0x1B,0x62,0xAC,
85754 -0x2C,0x00,0xBF,0x8F,
85755 -0x28,0x00,0xB4,0x8F,
85756 -0x24,0x00,0xB3,0x8F,
85757 -0x20,0x00,0xB2,0x8F,
85758 -0x1C,0x00,0xB1,0x8F,
85759 -0x18,0x00,0xB0,0x8F,
85760 -0x08,0x00,0xE0,0x03,
85761 -0x30,0x00,0xBD,0x27,
85762 -0x20,0xBD,0x02,0x3C,
85763 -0xEC,0x02,0x03,0x36,
85764 -0x4D,0x00,0x07,0x36,
85765 -0xF1,0x02,0x08,0x36,
85766 -0x08,0x00,0x06,0x24,
85767 -0x78,0x02,0x42,0x34,
85768 -0x00,0x00,0x45,0xA4,
85769 -0x00,0x00,0xE0,0xA0,
85770 -0x00,0x00,0x06,0xA1,
85771 -0x00,0x00,0x60,0xAC,
85772 -0x00,0x00,0x62,0x8C,
85773 -0xFF,0x00,0x04,0x3C,
85774 -0x00,0x00,0xE0,0xA0,
85775 -0xFF,0x00,0x49,0x30,
85776 -0x25,0x48,0x24,0x01,
85777 -0x00,0x00,0x06,0xA1,
85778 -0xF2,0x02,0x05,0x36,
85779 -0x00,0x00,0x64,0xAC,
85780 -0x0A,0x00,0x0A,0x36,
85781 -0x00,0x00,0x69,0xAC,
85782 -0x80,0xFF,0x03,0x24,
85783 -0x00,0x00,0xA0,0xA0,
85784 -0x00,0x00,0x43,0xA1,
85785 -0x00,0x00,0x62,0x8D,
85786 -0x80,0x00,0x03,0x3C,
85787 -0x24,0x10,0x43,0x00,
85788 -0x02,0x00,0x40,0x10,
85789 -0x84,0xFF,0x02,0x24,
85790 -0x00,0x00,0x42,0xA1,
85791 -0x25,0x22,0x00,0x0C,
85792 -0x01,0x00,0x04,0x24,
85793 -0x02,0x00,0x02,0x36,
85794 -0x00,0x00,0x43,0x94,
85795 -0xFF,0xBF,0x04,0x24,
85796 -0x24,0x18,0x64,0x00,
85797 -0x00,0x00,0x43,0xA4,
85798 -0x3C,0x35,0x00,0x08,
85799 -0x30,0x1F,0x67,0x26,
85800 -0x8C,0x33,0x00,0x0C,
85801 -0x00,0x00,0x00,0x00,
85802 -0x25,0xB0,0x02,0x3C,
85803 -0x2A,0xB0,0x06,0x3C,
85804 -0xB0,0x03,0x42,0x34,
85805 -0x00,0x00,0x54,0xAC,
85806 -0x28,0x00,0xC3,0x34,
85807 -0x00,0x00,0x69,0x8C,
85808 -0xFF,0x00,0x05,0x24,
85809 -0xFF,0x00,0x24,0x31,
85810 -0x6D,0x03,0x85,0x10,
85811 -0x25,0xBD,0x02,0x3C,
85812 -0x00,0x80,0x22,0x31,
85813 -0x59,0x02,0x40,0x10,
85814 -0x00,0xFF,0x02,0x3C,
85815 -0x00,0x80,0x02,0x3C,
85816 -0x00,0x00,0x62,0xAC,
85817 -0xFF,0x00,0x02,0x24,
85818 -0x21,0x00,0x82,0x10,
85819 -0xFF,0x00,0x23,0x31,
85820 -0x30,0x1F,0x70,0x26,
85821 -0x58,0x37,0x05,0x8E,
85822 -0x20,0x10,0x02,0x3C,
85823 -0x00,0x1A,0x03,0x00,
85824 -0x21,0x18,0x62,0x00,
85825 -0x21,0x30,0x60,0x00,
85826 -0xA4,0x36,0x09,0xA2,
85827 -0xEC,0x36,0x03,0xAE,
85828 -0x06,0x00,0x04,0x24,
85829 -0x80,0x00,0x07,0x24,
85830 -0x73,0x01,0x00,0x0C,
85831 -0x10,0x00,0xA0,0xAF,
85832 -0x02,0x80,0x09,0x3C,
85833 -0xCC,0x5E,0x27,0x91,
85834 -0x02,0x80,0x08,0x3C,
85835 -0xBC,0x5E,0x05,0x8D,
85836 -0xD0,0x1B,0x06,0x8E,
85837 -0x60,0x00,0x02,0x3C,
85838 -0x02,0x00,0xE7,0x34,
85839 -0x27,0x10,0x02,0x00,
85840 -0x24,0x30,0xC2,0x00,
85841 -0x00,0x04,0xA5,0x34,
85842 -0x00,0x26,0x07,0x00,
85843 -0x25,0xB0,0x02,0x3C,
85844 -0x25,0x20,0x85,0x00,
85845 -0x80,0x03,0x42,0x34,
85846 -0x41,0xB0,0x03,0x3C,
85847 -0x00,0x00,0x44,0xAC,
85848 -0x00,0x00,0x66,0xAC,
85849 -0xBC,0x5E,0x05,0xAD,
85850 -0xCC,0x5E,0x27,0xA1,
85851 -0xD0,0x1B,0x06,0xAE,
85852 -0x30,0x1F,0x62,0x26,
85853 -0xD4,0x1B,0x43,0x8C,
85854 -0x40,0x00,0x04,0x3C,
85855 -0x26,0x18,0x64,0x00,
85856 -0xB5,0x35,0x00,0x08,
85857 -0xD4,0x1B,0x43,0xAC,
85858 -0x8C,0x33,0x00,0x0C,
85859 -0x00,0x00,0x00,0x00,
85860 -0x2A,0xB0,0x05,0x3C,
85861 -0x24,0x00,0xA3,0x34,
85862 -0x00,0x00,0x69,0x8C,
85863 -0xFF,0x00,0x06,0x24,
85864 -0xFF,0x00,0x24,0x31,
85865 -0x48,0x03,0x86,0x10,
85866 -0x25,0xB0,0x02,0x3C,
85867 -0x00,0x80,0x22,0x31,
85868 -0x64,0x02,0x40,0x10,
85869 -0x00,0xFF,0x02,0x3C,
85870 -0x00,0x80,0x02,0x3C,
85871 -0x00,0x00,0x62,0xAC,
85872 -0xFF,0x00,0x02,0x24,
85873 -0x25,0x00,0x82,0x10,
85874 -0x30,0x1F,0x70,0x26,
85875 -0xFF,0x00,0x23,0x31,
85876 -0x58,0x37,0x05,0x8E,
85877 -0x20,0x10,0x02,0x3C,
85878 -0x00,0x1A,0x03,0x00,
85879 -0x21,0x18,0x62,0x00,
85880 -0x21,0x30,0x60,0x00,
85881 -0xA0,0x36,0x09,0xA2,
85882 -0xEC,0x36,0x03,0xAE,
85883 -0x06,0x00,0x04,0x24,
85884 -0x80,0x00,0x07,0x24,
85885 -0x73,0x01,0x00,0x0C,
85886 -0x10,0x00,0xA0,0xAF,
85887 -0x02,0x80,0x0A,0x3C,
85888 -0xCC,0x5E,0x47,0x91,
85889 -0x02,0x80,0x09,0x3C,
85890 -0xBC,0x5E,0x25,0x8D,
85891 -0xD0,0x1B,0x06,0x8E,
85892 -0x60,0x00,0x02,0x3C,
85893 -0x04,0x00,0xE7,0x34,
85894 -0x27,0x10,0x02,0x00,
85895 -0x24,0x30,0xC2,0x00,
85896 -0x00,0x04,0xA5,0x34,
85897 -0x25,0xB0,0x03,0x3C,
85898 -0x40,0x00,0x02,0x3C,
85899 -0x00,0x26,0x07,0x00,
85900 -0x26,0xA0,0x82,0x02,
85901 -0xB0,0x03,0x68,0x34,
85902 -0x25,0x20,0x85,0x00,
85903 -0x80,0x03,0x63,0x34,
85904 -0x41,0xB0,0x02,0x3C,
85905 -0x00,0x00,0x64,0xAC,
85906 -0x00,0x00,0x46,0xAC,
85907 -0xBC,0x5E,0x25,0xAD,
85908 -0xCC,0x5E,0x47,0xA1,
85909 -0xD0,0x1B,0x06,0xAE,
85910 -0x00,0x00,0x14,0xAD,
85911 -0x30,0x1F,0x62,0x26,
85912 -0xD4,0x1B,0x43,0x8C,
85913 -0x20,0x00,0x04,0x3C,
85914 -0x26,0x18,0x64,0x00,
85915 -0xAD,0x35,0x00,0x08,
85916 -0xD4,0x1B,0x43,0xAC,
85917 -0x8C,0x33,0x00,0x0C,
85918 -0x00,0x00,0x00,0x00,
85919 -0x25,0xB0,0x05,0x3C,
85920 -0xB0,0x03,0xA2,0x34,
85921 -0x2A,0xB0,0x07,0x3C,
85922 -0x00,0x00,0x54,0xAC,
85923 -0x20,0x00,0xE3,0x34,
85924 -0x00,0x00,0x69,0x8C,
85925 -0xFF,0x00,0x06,0x24,
85926 -0xFF,0x00,0x24,0x31,
85927 -0x07,0x03,0x86,0x10,
85928 -0x90,0x03,0xA2,0x34,
85929 -0x00,0x80,0x22,0x31,
85930 -0x05,0x02,0x40,0x10,
85931 -0x00,0xFF,0x02,0x3C,
85932 -0x00,0x80,0x02,0x3C,
85933 -0x00,0x00,0x62,0xAC,
85934 -0xFF,0x00,0x02,0x24,
85935 -0x21,0x00,0x82,0x10,
85936 -0x30,0x1F,0x70,0x26,
85937 -0xFF,0x00,0x23,0x31,
85938 -0x4C,0x37,0x05,0x8E,
85939 -0x20,0x10,0x02,0x3C,
85940 -0x00,0x1A,0x03,0x00,
85941 -0x21,0x18,0x62,0x00,
85942 -0x21,0x30,0x60,0x00,
85943 -0xA8,0x36,0x09,0xA2,
85944 -0xE0,0x36,0x03,0xAE,
85945 -0x05,0x00,0x04,0x24,
85946 -0x80,0x00,0x07,0x24,
85947 -0x73,0x01,0x00,0x0C,
85948 -0x10,0x00,0xA0,0xAF,
85949 -0x02,0x80,0x09,0x3C,
85950 -0xCC,0x5E,0x27,0x91,
85951 -0x02,0x80,0x08,0x3C,
85952 -0xBC,0x5E,0x05,0x8D,
85953 -0xD0,0x1B,0x06,0x8E,
85954 -0x18,0x00,0x02,0x3C,
85955 -0x01,0x00,0xE7,0x34,
85956 -0x27,0x10,0x02,0x00,
85957 -0x24,0x30,0xC2,0x00,
85958 -0x00,0x02,0xA5,0x34,
85959 -0x00,0x26,0x07,0x00,
85960 -0x25,0xB0,0x02,0x3C,
85961 -0x25,0x20,0x85,0x00,
85962 -0x80,0x03,0x42,0x34,
85963 -0x41,0xB0,0x03,0x3C,
85964 -0x00,0x00,0x44,0xAC,
85965 -0x00,0x00,0x66,0xAC,
85966 -0xBC,0x5E,0x05,0xAD,
85967 -0xCC,0x5E,0x27,0xA1,
85968 -0xD0,0x1B,0x06,0xAE,
85969 -0x30,0x1F,0x62,0x26,
85970 -0xD4,0x1B,0x43,0x8C,
85971 -0x10,0x00,0x04,0x3C,
85972 -0x26,0x18,0x64,0x00,
85973 -0xA6,0x35,0x00,0x08,
85974 -0xD4,0x1B,0x43,0xAC,
85975 -0x8C,0x33,0x00,0x0C,
85976 -0x00,0x00,0x00,0x00,
85977 -0x2A,0xB0,0x05,0x3C,
85978 -0x0C,0x00,0xA3,0x34,
85979 -0x00,0x00,0x69,0x8C,
85980 -0xFF,0x00,0x06,0x24,
85981 -0xFF,0x00,0x24,0x31,
85982 -0xC6,0x02,0x86,0x10,
85983 -0x00,0x80,0x22,0x31,
85984 -0x54,0x02,0x40,0x10,
85985 -0x00,0xFF,0x02,0x3C,
85986 -0x00,0x80,0x02,0x3C,
85987 -0x00,0x00,0x62,0xAC,
85988 -0xFF,0x00,0x02,0x24,
85989 -0x24,0x00,0x82,0x10,
85990 -0x30,0x1F,0x70,0x26,
85991 -0xFF,0x00,0x23,0x31,
85992 -0x34,0x37,0x05,0x8E,
85993 -0x20,0x10,0x02,0x3C,
85994 -0x00,0x1A,0x03,0x00,
85995 -0x21,0x18,0x62,0x00,
85996 -0x21,0x30,0x60,0x00,
85997 -0x8C,0x36,0x09,0xA2,
85998 -0xC8,0x36,0x03,0xAE,
85999 -0x03,0x00,0x04,0x24,
86000 -0x80,0x00,0x07,0x24,
86001 -0x73,0x01,0x00,0x0C,
86002 -0x10,0x00,0xA0,0xAF,
86003 -0x02,0x80,0x0A,0x3C,
86004 -0xCC,0x5E,0x47,0x91,
86005 -0x02,0x80,0x09,0x3C,
86006 -0xBC,0x5E,0x25,0x8D,
86007 -0xD0,0x1B,0x06,0x8E,
86008 -0x01,0x00,0x08,0x3C,
86009 -0x80,0xFF,0x02,0x24,
86010 -0x25,0x38,0xE2,0x00,
86011 -0x00,0x80,0x03,0x35,
86012 -0x80,0x00,0xA5,0x34,
86013 -0x27,0x18,0x03,0x00,
86014 -0x00,0x26,0x07,0x00,
86015 -0x25,0xB0,0x02,0x3C,
86016 -0x24,0x30,0xC3,0x00,
86017 -0x25,0x20,0x85,0x00,
86018 -0x80,0x03,0x42,0x34,
86019 -0x41,0xB0,0x03,0x3C,
86020 -0x00,0x00,0x44,0xAC,
86021 -0x27,0xA0,0x08,0x00,
86022 -0x00,0x00,0x66,0xAC,
86023 -0xBC,0x5E,0x25,0xAD,
86024 -0xCC,0x5E,0x47,0xA1,
86025 -0xD0,0x1B,0x06,0xAE,
86026 -0x30,0x1F,0x63,0x26,
86027 -0xD4,0x1B,0x62,0x8C,
86028 -0x00,0x00,0x00,0x00,
86029 -0x00,0x80,0x42,0x38,
86030 -0xD4,0x1B,0x62,0xAC,
86031 -0x30,0x1F,0x70,0x26,
86032 -0xD0,0x1B,0x02,0x8E,
86033 -0x01,0x00,0x03,0x3C,
86034 -0x24,0x10,0x52,0x00,
86035 -0x24,0x10,0x54,0x00,
86036 -0x24,0x10,0x43,0x00,
86037 -0x11,0xFE,0x40,0x10,
86038 -0x00,0x00,0x00,0x00,
86039 -0x8C,0x33,0x00,0x0C,
86040 -0x00,0x00,0x00,0x00,
86041 -0x2A,0xB0,0x05,0x3C,
86042 -0x10,0x00,0xA3,0x34,
86043 -0x00,0x00,0x69,0x8C,
86044 -0xFF,0x00,0x06,0x24,
86045 -0xFF,0x00,0x24,0x31,
86046 -0x7C,0x02,0x86,0x10,
86047 -0x25,0xB0,0x02,0x3C,
86048 -0x00,0x80,0x22,0x31,
86049 -0xD0,0x01,0x40,0x10,
86050 -0x00,0x80,0x02,0x3C,
86051 -0x00,0x00,0x62,0xAC,
86052 -0xFF,0x00,0x02,0x24,
86053 -0x22,0x00,0x82,0x10,
86054 -0x30,0x1F,0x70,0x26,
86055 -0xFF,0x00,0x23,0x31,
86056 -0x34,0x37,0x05,0x8E,
86057 -0x20,0x10,0x02,0x3C,
86058 -0x00,0x1A,0x03,0x00,
86059 -0x21,0x18,0x62,0x00,
86060 -0x21,0x30,0x60,0x00,
86061 -0x90,0x36,0x09,0xA2,
86062 -0xC8,0x36,0x03,0xAE,
86063 -0x03,0x00,0x04,0x24,
86064 -0x80,0x00,0x07,0x24,
86065 -0x73,0x01,0x00,0x0C,
86066 -0x10,0x00,0xA0,0xAF,
86067 -0x02,0x80,0x09,0x3C,
86068 -0xCC,0x5E,0x27,0x91,
86069 -0x02,0x80,0x08,0x3C,
86070 -0xBC,0x5E,0x05,0x8D,
86071 -0xD0,0x1B,0x06,0x8E,
86072 -0x01,0x00,0x02,0x3C,
86073 -0x00,0x80,0x42,0x34,
86074 -0x40,0x00,0xE7,0x34,
86075 -0x27,0x10,0x02,0x00,
86076 -0x24,0x30,0xC2,0x00,
86077 -0x80,0x00,0xA5,0x34,
86078 -0x00,0x26,0x07,0x00,
86079 -0x25,0xB0,0x02,0x3C,
86080 -0x25,0x20,0x85,0x00,
86081 -0x80,0x03,0x42,0x34,
86082 -0x41,0xB0,0x03,0x3C,
86083 -0x00,0x00,0x44,0xAC,
86084 -0x00,0x00,0x66,0xAC,
86085 -0xBC,0x5E,0x05,0xAD,
86086 -0xCC,0x5E,0x27,0xA1,
86087 -0xD0,0x1B,0x06,0xAE,
86088 -0x30,0x1F,0x62,0x26,
86089 -0xD4,0x1B,0x43,0x8C,
86090 -0x01,0x00,0x04,0x3C,
86091 -0x30,0x1F,0x70,0x26,
86092 -0x26,0x18,0x64,0x00,
86093 -0xD4,0x1B,0x43,0xAC,
86094 -0xD0,0x1B,0x02,0x8E,
86095 -0x02,0x00,0x03,0x3C,
86096 -0x24,0x10,0x52,0x00,
86097 -0x24,0x10,0x43,0x00,
86098 -0xDB,0xFD,0x40,0x10,
86099 -0x00,0x00,0x00,0x00,
86100 -0x8C,0x33,0x00,0x0C,
86101 -0x00,0x00,0x00,0x00,
86102 -0x2A,0xB0,0x05,0x3C,
86103 -0x14,0x00,0xA3,0x34,
86104 -0x00,0x00,0x69,0x8C,
86105 -0xFF,0x00,0x06,0x24,
86106 -0xFF,0x00,0x24,0x31,
86107 -0x64,0x02,0x86,0x10,
86108 -0x25,0xB0,0x02,0x3C,
86109 -0x00,0x80,0x22,0x31,
86110 -0xFA,0x01,0x40,0x10,
86111 -0x00,0xFF,0x02,0x3C,
86112 -0x00,0x80,0x02,0x3C,
86113 -0x00,0x00,0x62,0xAC,
86114 -0xFF,0x00,0x02,0x24,
86115 -0x25,0x00,0x82,0x10,
86116 -0x30,0x1F,0x70,0x26,
86117 -0xFF,0x00,0x23,0x31,
86118 -0x40,0x37,0x05,0x8E,
86119 -0x20,0x10,0x02,0x3C,
86120 -0x00,0x1A,0x03,0x00,
86121 -0x21,0x18,0x62,0x00,
86122 -0x21,0x30,0x60,0x00,
86123 -0x94,0x36,0x09,0xA2,
86124 -0xD4,0x36,0x03,0xAE,
86125 -0x04,0x00,0x04,0x24,
86126 -0x80,0x00,0x07,0x24,
86127 -0x73,0x01,0x00,0x0C,
86128 -0x10,0x00,0xA0,0xAF,
86129 -0x02,0x80,0x0A,0x3C,
86130 -0xCC,0x5E,0x47,0x91,
86131 -0x02,0x80,0x09,0x3C,
86132 -0xBC,0x5E,0x25,0x8D,
86133 -0xD0,0x1B,0x06,0x8E,
86134 -0x06,0x00,0x02,0x3C,
86135 -0x20,0x00,0xE7,0x34,
86136 -0x27,0x10,0x02,0x00,
86137 -0x24,0x30,0xC2,0x00,
86138 -0x00,0x01,0xA5,0x34,
86139 -0x25,0xB0,0x03,0x3C,
86140 -0x04,0x00,0x02,0x3C,
86141 -0x00,0x26,0x07,0x00,
86142 -0x26,0xA0,0x82,0x02,
86143 -0xB0,0x03,0x68,0x34,
86144 -0x25,0x20,0x85,0x00,
86145 -0x80,0x03,0x63,0x34,
86146 -0x41,0xB0,0x02,0x3C,
86147 -0x00,0x00,0x64,0xAC,
86148 -0x00,0x00,0x46,0xAC,
86149 -0xBC,0x5E,0x25,0xAD,
86150 -0xCC,0x5E,0x47,0xA1,
86151 -0xD0,0x1B,0x06,0xAE,
86152 -0x00,0x00,0x14,0xAD,
86153 -0x30,0x1F,0x62,0x26,
86154 -0xD4,0x1B,0x43,0x8C,
86155 -0x02,0x00,0x04,0x3C,
86156 -0x30,0x1F,0x70,0x26,
86157 -0x26,0x18,0x64,0x00,
86158 -0xD4,0x1B,0x43,0xAC,
86159 -0xD0,0x1B,0x02,0x8E,
86160 -0x04,0x00,0x03,0x3C,
86161 -0x24,0x10,0x52,0x00,
86162 -0x24,0x10,0x54,0x00,
86163 -0x24,0x10,0x43,0x00,
86164 -0xA1,0xFD,0x40,0x10,
86165 -0x00,0x00,0x00,0x00,
86166 -0x8C,0x33,0x00,0x0C,
86167 -0x00,0x00,0x00,0x00,
86168 -0x25,0xB0,0x03,0x3C,
86169 -0xB0,0x03,0x62,0x34,
86170 -0x2A,0xB0,0x07,0x3C,
86171 -0x00,0x00,0x54,0xAC,
86172 -0x18,0x00,0xE5,0x34,
86173 -0x00,0x00,0xA9,0x8C,
86174 -0xFF,0x00,0x06,0x24,
86175 -0xFF,0x00,0x24,0x31,
86176 -0x16,0x02,0x86,0x10,
86177 -0x04,0x00,0x02,0x24,
86178 -0x00,0x80,0x22,0x31,
86179 -0xD6,0x01,0x40,0x10,
86180 -0x00,0xFF,0x02,0x3C,
86181 -0x00,0x80,0x02,0x3C,
86182 -0x00,0x00,0xA2,0xAC,
86183 -0xFF,0x00,0x02,0x24,
86184 -0x21,0x00,0x82,0x10,
86185 -0x30,0x1F,0x70,0x26,
86186 -0xFF,0x00,0x23,0x31,
86187 -0x40,0x37,0x05,0x8E,
86188 -0x20,0x10,0x02,0x3C,
86189 -0x00,0x1A,0x03,0x00,
86190 -0x21,0x18,0x62,0x00,
86191 -0x21,0x30,0x60,0x00,
86192 -0x98,0x36,0x09,0xA2,
86193 -0xD4,0x36,0x03,0xAE,
86194 -0x04,0x00,0x04,0x24,
86195 -0x80,0x00,0x07,0x24,
86196 -0x73,0x01,0x00,0x0C,
86197 -0x10,0x00,0xA0,0xAF,
86198 -0x02,0x80,0x09,0x3C,
86199 -0xCC,0x5E,0x27,0x91,
86200 -0x02,0x80,0x08,0x3C,
86201 -0xBC,0x5E,0x05,0x8D,
86202 -0xD0,0x1B,0x06,0x8E,
86203 -0x06,0x00,0x02,0x3C,
86204 -0x10,0x00,0xE7,0x34,
86205 -0x27,0x10,0x02,0x00,
86206 -0x24,0x30,0xC2,0x00,
86207 -0x00,0x01,0xA5,0x34,
86208 -0x00,0x26,0x07,0x00,
86209 -0x25,0xB0,0x02,0x3C,
86210 -0x25,0x20,0x85,0x00,
86211 -0x80,0x03,0x42,0x34,
86212 -0x41,0xB0,0x03,0x3C,
86213 -0x00,0x00,0x44,0xAC,
86214 -0x00,0x00,0x66,0xAC,
86215 -0xBC,0x5E,0x05,0xAD,
86216 -0xCC,0x5E,0x27,0xA1,
86217 -0xD0,0x1B,0x06,0xAE,
86218 -0x30,0x1F,0x62,0x26,
86219 -0xD4,0x1B,0x43,0x8C,
86220 -0x04,0x00,0x04,0x3C,
86221 -0x30,0x1F,0x70,0x26,
86222 -0x26,0x18,0x64,0x00,
86223 -0xD4,0x1B,0x43,0xAC,
86224 -0xD0,0x1B,0x02,0x8E,
86225 -0x08,0x00,0x03,0x3C,
86226 -0x24,0x10,0x52,0x00,
86227 -0x24,0x10,0x43,0x00,
86228 -0x68,0xFD,0x40,0x10,
86229 -0x00,0x00,0x00,0x00,
86230 -0x8C,0x33,0x00,0x0C,
86231 -0x00,0x00,0x00,0x00,
86232 -0x2A,0xB0,0x05,0x3C,
86233 -0x1C,0x00,0xA3,0x34,
86234 -0x00,0x00,0x69,0x8C,
86235 -0xFF,0x00,0x06,0x24,
86236 -0xFF,0x00,0x24,0x31,
86237 -0xDD,0x01,0x86,0x10,
86238 -0x25,0xB0,0x02,0x3C,
86239 -0x00,0x80,0x22,0x31,
86240 -0x33,0x01,0x40,0x10,
86241 -0x00,0xFF,0x02,0x3C,
86242 -0x00,0x80,0x02,0x3C,
86243 -0x00,0x00,0x62,0xAC,
86244 -0xFF,0x00,0x02,0x24,
86245 -0x25,0x00,0x82,0x10,
86246 -0x30,0x1F,0x70,0x26,
86247 -0xFF,0x00,0x23,0x31,
86248 -0x4C,0x37,0x05,0x8E,
86249 -0x20,0x10,0x02,0x3C,
86250 -0x00,0x1A,0x03,0x00,
86251 -0x21,0x18,0x62,0x00,
86252 -0x21,0x30,0x60,0x00,
86253 -0x9C,0x36,0x09,0xA2,
86254 -0xE0,0x36,0x03,0xAE,
86255 -0x05,0x00,0x04,0x24,
86256 -0x80,0x00,0x07,0x24,
86257 -0x73,0x01,0x00,0x0C,
86258 -0x10,0x00,0xA0,0xAF,
86259 -0x02,0x80,0x0A,0x3C,
86260 -0xCC,0x5E,0x47,0x91,
86261 -0x02,0x80,0x09,0x3C,
86262 -0xBC,0x5E,0x25,0x8D,
86263 -0xD0,0x1B,0x06,0x8E,
86264 -0x18,0x00,0x02,0x3C,
86265 -0x08,0x00,0xE7,0x34,
86266 -0x27,0x10,0x02,0x00,
86267 -0x24,0x30,0xC2,0x00,
86268 -0x00,0x02,0xA5,0x34,
86269 -0x25,0xB0,0x03,0x3C,
86270 -0x10,0x00,0x02,0x3C,
86271 -0x00,0x26,0x07,0x00,
86272 -0x26,0xA0,0x82,0x02,
86273 -0xB0,0x03,0x68,0x34,
86274 -0x25,0x20,0x85,0x00,
86275 -0x80,0x03,0x63,0x34,
86276 -0x41,0xB0,0x02,0x3C,
86277 -0x00,0x00,0x64,0xAC,
86278 -0x00,0x00,0x46,0xAC,
86279 -0xBC,0x5E,0x25,0xAD,
86280 -0xCC,0x5E,0x47,0xA1,
86281 -0xD0,0x1B,0x06,0xAE,
86282 -0x00,0x00,0x14,0xAD,
86283 -0x30,0x1F,0x62,0x26,
86284 -0xD4,0x1B,0x43,0x8C,
86285 -0x08,0x00,0x04,0x3C,
86286 -0x26,0x18,0x64,0x00,
86287 -0x9E,0x35,0x00,0x08,
86288 -0xD4,0x1B,0x43,0xAC,
86289 -0x8C,0x33,0x00,0x0C,
86290 -0x00,0x00,0x00,0x00,
86291 -0xD4,0x1B,0x02,0x8E,
86292 -0xD0,0x1B,0x03,0x8E,
86293 -0x00,0x20,0x42,0x38,
86294 -0x7D,0x35,0x00,0x08,
86295 -0xD4,0x1B,0x02,0xAE,
86296 -0x8C,0x33,0x00,0x0C,
86297 -0x00,0x00,0x00,0x00,
86298 -0x2A,0xB0,0x02,0x3C,
86299 -0x08,0x00,0x43,0x34,
86300 -0x00,0x00,0x69,0x8C,
86301 -0xFF,0x00,0x02,0x24,
86302 -0xFF,0x00,0x24,0x31,
86303 -0x2C,0x00,0x82,0x10,
86304 -0x00,0x80,0x22,0x31,
86305 -0x34,0x01,0x40,0x14,
86306 -0x00,0x80,0x02,0x3C,
86307 -0x00,0xFF,0x02,0x3C,
86308 -0x24,0x10,0x22,0x01,
86309 -0x0B,0x00,0x40,0x10,
86310 -0xFF,0x00,0x02,0x24,
86311 -0xB4,0x36,0x02,0x92,
86312 -0x20,0xB0,0x03,0x3C,
86313 -0x00,0x12,0x02,0x00,
86314 -0x21,0x10,0x43,0x00,
86315 -0x0C,0x00,0x49,0x8C,
86316 -0x25,0xB0,0x03,0x3C,
86317 -0xB0,0x03,0x63,0x34,
86318 -0x00,0x00,0x69,0xAC,
86319 -0xFF,0x00,0x24,0x31,
86320 -0xFF,0x00,0x02,0x24,
86321 -0x1A,0x00,0x82,0x10,
86322 -0x30,0x1F,0x70,0x26,
86323 -0xFF,0x00,0x23,0x31,
86324 -0x7C,0x37,0x05,0x8E,
86325 -0x20,0x10,0x02,0x3C,
86326 -0x00,0x1A,0x03,0x00,
86327 -0x21,0x18,0x62,0x00,
86328 -0x21,0x30,0x60,0x00,
86329 -0x10,0x37,0x03,0xAE,
86330 -0x01,0x00,0x04,0x24,
86331 -0xB4,0x36,0x09,0xA2,
86332 -0x80,0x00,0x07,0x24,
86333 -0x73,0x01,0x00,0x0C,
86334 -0x10,0x00,0xA0,0xAF,
86335 -0xD0,0x1B,0x05,0x8E,
86336 -0x02,0x80,0x06,0x3C,
86337 -0xBC,0x5E,0xC4,0x8C,
86338 -0xFF,0xC7,0x02,0x24,
86339 -0x24,0x28,0xA2,0x00,
86340 -0x25,0xB0,0x02,0x3C,
86341 -0x10,0x00,0x84,0x34,
86342 -0x80,0x03,0x42,0x34,
86343 -0x41,0xB0,0x03,0x3C,
86344 -0x00,0x00,0x44,0xAC,
86345 -0x00,0x00,0x65,0xAC,
86346 -0xBC,0x5E,0xC4,0xAC,
86347 -0xD0,0x1B,0x05,0xAE,
86348 -0x30,0x1F,0x63,0x26,
86349 -0xD4,0x1B,0x62,0x8C,
86350 -0x00,0x00,0x00,0x00,
86351 -0x00,0x10,0x42,0x38,
86352 -0x76,0x35,0x00,0x08,
86353 -0xD4,0x1B,0x62,0xAC,
86354 -0x56,0x01,0x02,0x35,
86355 -0x00,0x00,0x43,0x94,
86356 -0x00,0x00,0x00,0x00,
86357 -0x70,0xFC,0x60,0x10,
86358 -0x00,0x00,0x00,0x00,
86359 -0x93,0x55,0x00,0x0C,
86360 -0x07,0x00,0x04,0x24,
86361 -0x29,0x35,0x00,0x08,
86362 -0x30,0x1F,0x64,0x26,
86363 -0x00,0x00,0x62,0xAC,
86364 -0xD3,0x35,0x00,0x08,
86365 -0xFF,0x00,0x02,0x24,
86366 -0xF8,0x1D,0x24,0x96,
86367 -0x64,0x37,0x25,0x8E,
86368 -0xFF,0x0F,0x83,0x30,
86369 -0x25,0x28,0xA2,0x00,
86370 -0x00,0x19,0x03,0x00,
86371 -0x20,0x00,0xA6,0x24,
86372 -0x02,0x12,0x03,0x00,
86373 -0x01,0x00,0x84,0x24,
86374 -0xF8,0x1D,0x24,0xA6,
86375 -0x17,0x00,0xC2,0xA0,
86376 -0x16,0x00,0xC3,0xA0,
86377 -0x0C,0x00,0xA4,0x8C,
86378 -0x00,0xF0,0x02,0x3C,
86379 -0xFF,0xFF,0x42,0x34,
86380 -0xFF,0x0F,0x63,0x30,
86381 -0x00,0x1C,0x03,0x00,
86382 -0x24,0x20,0x82,0x00,
86383 -0x25,0x20,0x83,0x00,
86384 -0x0C,0x00,0xA4,0xAC,
86385 -0x64,0x37,0x25,0x8E,
86386 -0x01,0x00,0x10,0x24,
86387 -0x01,0x00,0x04,0x24,
86388 -0x31,0x10,0x06,0x3C,
86389 -0x00,0x01,0x07,0x24,
86390 -0x73,0x01,0x00,0x0C,
86391 -0x10,0x00,0xB0,0xAF,
86392 -0xB0,0x01,0x00,0x0C,
86393 -0x01,0x00,0x04,0x24,
86394 -0x2A,0xB0,0x02,0x3C,
86395 -0x01,0x00,0x42,0x34,
86396 -0x02,0x00,0x03,0x24,
86397 -0x00,0x00,0x50,0xA0,
86398 -0x00,0x00,0x43,0xA0,
86399 -0xD4,0x1B,0x22,0x8E,
86400 -0x00,0x00,0x00,0x00,
86401 -0x08,0x00,0x42,0x38,
86402 -0x68,0x35,0x00,0x08,
86403 -0xD4,0x1B,0x22,0xAE,
86404 -0xD0,0x03,0x23,0x35,
86405 -0x80,0x00,0x02,0x24,
86406 -0x00,0x00,0x62,0xAC,
86407 -0x24,0x36,0x00,0x08,
86408 -0x30,0x1F,0x62,0x26,
86409 -0x25,0xB0,0x02,0x3C,
86410 -0x01,0x00,0x03,0x24,
86411 -0x90,0x03,0x42,0x34,
86412 -0x00,0x00,0x43,0xAC,
86413 -0xF0,0x35,0x00,0x08,
86414 -0x30,0x1F,0x65,0x26,
86415 -0x24,0x10,0x22,0x01,
86416 -0xA9,0xFD,0x40,0x10,
86417 -0xFF,0x00,0x02,0x24,
86418 -0x47,0x00,0xC6,0x34,
86419 -0x00,0x00,0xC2,0x90,
86420 -0x00,0x00,0x00,0x00,
86421 -0xFF,0x00,0x44,0x30,
86422 -0x0E,0x00,0x85,0x10,
86423 -0x30,0x1F,0x62,0x26,
86424 -0xA4,0x36,0x04,0xA2,
86425 -0x00,0x00,0xC2,0x90,
86426 -0xFF,0x00,0x83,0x30,
86427 -0xFF,0x00,0x44,0x30,
86428 -0x07,0x00,0x83,0x10,
86429 -0x21,0x38,0x00,0x02,
86430 -0x21,0x28,0xC0,0x00,
86431 -0x00,0x00,0xA2,0x90,
86432 -0x21,0x18,0x80,0x00,
86433 -0xFD,0xFF,0x62,0x14,
86434 -0xFF,0x00,0x44,0x30,
86435 -0xA4,0x36,0xE3,0xA0,
86436 -0x30,0x1F,0x62,0x26,
86437 -0xA4,0x36,0x43,0x90,
86438 -0x20,0xB0,0x02,0x3C,
86439 -0x00,0x1A,0x03,0x00,
86440 -0x21,0x18,0x62,0x00,
86441 -0x0C,0x00,0x69,0x8C,
86442 -0x25,0xB0,0x02,0x3C,
86443 -0xB0,0x03,0x42,0x34,
86444 -0xFF,0x00,0x24,0x31,
86445 -0x00,0x00,0x49,0xAC,
86446 -0x9C,0x36,0x00,0x08,
86447 -0xFF,0x00,0x02,0x24,
86448 -0x24,0x10,0x22,0x01,
86449 -0xFD,0xFD,0x40,0x10,
86450 -0xFF,0x00,0x02,0x24,
86451 -0x45,0x00,0xE5,0x34,
86452 -0x00,0x00,0xA2,0x90,
86453 -0x00,0x00,0x00,0x00,
86454 -0xFF,0x00,0x44,0x30,
86455 -0x0E,0x00,0x86,0x10,
86456 -0x30,0x1F,0x62,0x26,
86457 -0xA8,0x36,0x04,0xA2,
86458 -0x00,0x00,0xA2,0x90,
86459 -0xFF,0x00,0x83,0x30,
86460 -0xFF,0x00,0x44,0x30,
86461 -0x08,0x00,0x83,0x10,
86462 -0x30,0x1F,0x62,0x26,
86463 -0x21,0x30,0x00,0x02,
86464 -0x00,0x00,0xA2,0x90,
86465 -0x21,0x18,0x80,0x00,
86466 -0xFD,0xFF,0x62,0x14,
86467 -0xFF,0x00,0x44,0x30,
86468 -0xA8,0x36,0xC3,0xA0,
86469 -0x30,0x1F,0x62,0x26,
86470 -0xA8,0x36,0x43,0x90,
86471 -0x20,0xB0,0x02,0x3C,
86472 -0x00,0x1A,0x03,0x00,
86473 -0x21,0x18,0x62,0x00,
86474 -0x0C,0x00,0x69,0x8C,
86475 -0x25,0xB0,0x02,0x3C,
86476 -0xB0,0x03,0x42,0x34,
86477 -0xFF,0x00,0x24,0x31,
86478 -0x00,0x00,0x49,0xAC,
86479 -0x11,0x37,0x00,0x08,
86480 -0xFF,0x00,0x02,0x24,
86481 -0x24,0x10,0x22,0x01,
86482 -0x9E,0xFD,0x40,0x10,
86483 -0xFF,0x00,0x02,0x24,
86484 -0x46,0x00,0xA5,0x34,
86485 -0x00,0x00,0xA2,0x90,
86486 -0x00,0x00,0x00,0x00,
86487 -0xFF,0x00,0x44,0x30,
86488 -0x0E,0x00,0x86,0x10,
86489 -0x30,0x1F,0x62,0x26,
86490 -0xA0,0x36,0x04,0xA2,
86491 -0x00,0x00,0xA2,0x90,
86492 -0xFF,0x00,0x83,0x30,
86493 -0xFF,0x00,0x44,0x30,
86494 -0x08,0x00,0x83,0x10,
86495 -0x30,0x1F,0x62,0x26,
86496 -0x21,0x30,0x00,0x02,
86497 -0x00,0x00,0xA2,0x90,
86498 -0x21,0x18,0x80,0x00,
86499 -0xFD,0xFF,0x62,0x14,
86500 -0xFF,0x00,0x44,0x30,
86501 -0xA0,0x36,0xC3,0xA0,
86502 -0x30,0x1F,0x62,0x26,
86503 -0xA0,0x36,0x43,0x90,
86504 -0x20,0xB0,0x02,0x3C,
86505 -0x00,0x1A,0x03,0x00,
86506 -0x21,0x18,0x62,0x00,
86507 -0x0C,0x00,0x69,0x8C,
86508 -0x25,0xB0,0x02,0x3C,
86509 -0xB0,0x03,0x42,0x34,
86510 -0xFF,0x00,0x24,0x31,
86511 -0x00,0x00,0x49,0xAC,
86512 -0xD3,0x36,0x00,0x08,
86513 -0xFF,0x00,0x02,0x24,
86514 -0x00,0xFF,0x02,0x3C,
86515 -0x24,0x10,0x22,0x01,
86516 -0x30,0xFE,0x40,0x10,
86517 -0xFF,0x00,0x02,0x24,
86518 -0x41,0x00,0xA5,0x34,
86519 -0x00,0x00,0xA2,0x90,
86520 -0x00,0x00,0x00,0x00,
86521 -0xFF,0x00,0x44,0x30,
86522 -0x0E,0x00,0x86,0x10,
86523 -0x30,0x1F,0x62,0x26,
86524 -0x90,0x36,0x04,0xA2,
86525 -0x00,0x00,0xA2,0x90,
86526 -0xFF,0x00,0x83,0x30,
86527 -0xFF,0x00,0x44,0x30,
86528 -0x08,0x00,0x83,0x10,
86529 -0x30,0x1F,0x62,0x26,
86530 -0x21,0x30,0x00,0x02,
86531 -0x00,0x00,0xA2,0x90,
86532 -0x21,0x18,0x80,0x00,
86533 -0xFD,0xFF,0x62,0x14,
86534 -0xFF,0x00,0x44,0x30,
86535 -0x90,0x36,0xC3,0xA0,
86536 -0x30,0x1F,0x62,0x26,
86537 -0x90,0x36,0x43,0x90,
86538 -0x20,0xB0,0x02,0x3C,
86539 -0x00,0x1A,0x03,0x00,
86540 -0x21,0x18,0x62,0x00,
86541 -0x0C,0x00,0x69,0x8C,
86542 -0x25,0xB0,0x02,0x3C,
86543 -0xB0,0x03,0x42,0x34,
86544 -0xFF,0x00,0x24,0x31,
86545 -0x00,0x00,0x49,0xAC,
86546 -0x87,0x37,0x00,0x08,
86547 -0xFF,0x00,0x02,0x24,
86548 -0x24,0x10,0x22,0x01,
86549 -0xCF,0xFE,0x40,0x10,
86550 -0xFF,0x00,0x02,0x24,
86551 -0x44,0x00,0xA5,0x34,
86552 -0x00,0x00,0xA2,0x90,
86553 -0x00,0x00,0x00,0x00,
86554 -0xFF,0x00,0x44,0x30,
86555 -0x0E,0x00,0x86,0x10,
86556 -0x30,0x1F,0x62,0x26,
86557 -0x9C,0x36,0x04,0xA2,
86558 -0x00,0x00,0xA2,0x90,
86559 -0xFF,0x00,0x83,0x30,
86560 -0xFF,0x00,0x44,0x30,
86561 -0x08,0x00,0x83,0x10,
86562 -0x30,0x1F,0x62,0x26,
86563 -0x21,0x30,0x00,0x02,
86564 -0x00,0x00,0xA2,0x90,
86565 -0x21,0x18,0x80,0x00,
86566 -0xFD,0xFF,0x62,0x14,
86567 -0xFF,0x00,0x44,0x30,
86568 -0x9C,0x36,0xC3,0xA0,
86569 -0x30,0x1F,0x62,0x26,
86570 -0x9C,0x36,0x43,0x90,
86571 -0x20,0xB0,0x02,0x3C,
86572 -0x00,0x1A,0x03,0x00,
86573 -0x21,0x18,0x62,0x00,
86574 -0x0C,0x00,0x69,0x8C,
86575 -0x25,0xB0,0x02,0x3C,
86576 -0xB0,0x03,0x42,0x34,
86577 -0xFF,0x00,0x24,0x31,
86578 -0x00,0x00,0x49,0xAC,
86579 -0x47,0x38,0x00,0x08,
86580 -0xFF,0x00,0x02,0x24,
86581 -0x24,0x10,0x22,0x01,
86582 -0xAE,0xFD,0x40,0x10,
86583 -0xFF,0x00,0x02,0x24,
86584 -0x40,0x00,0xA5,0x34,
86585 -0x00,0x00,0xA2,0x90,
86586 -0x00,0x00,0x00,0x00,
86587 -0xFF,0x00,0x44,0x30,
86588 -0x0E,0x00,0x86,0x10,
86589 -0x30,0x1F,0x62,0x26,
86590 -0x8C,0x36,0x04,0xA2,
86591 -0x00,0x00,0xA2,0x90,
86592 -0xFF,0x00,0x83,0x30,
86593 -0xFF,0x00,0x44,0x30,
86594 -0x08,0x00,0x83,0x10,
86595 -0x30,0x1F,0x62,0x26,
86596 -0x21,0x30,0x00,0x02,
86597 -0x00,0x00,0xA2,0x90,
86598 -0x21,0x18,0x80,0x00,
86599 -0xFD,0xFF,0x62,0x14,
86600 -0xFF,0x00,0x44,0x30,
86601 -0x8C,0x36,0xC3,0xA0,
86602 -0x30,0x1F,0x62,0x26,
86603 -0x8C,0x36,0x43,0x90,
86604 -0x20,0xB0,0x02,0x3C,
86605 -0x00,0x1A,0x03,0x00,
86606 -0x21,0x18,0x62,0x00,
86607 -0x0C,0x00,0x69,0x8C,
86608 -0x25,0xB0,0x02,0x3C,
86609 -0xB0,0x03,0x42,0x34,
86610 -0xFF,0x00,0x24,0x31,
86611 -0x00,0x00,0x49,0xAC,
86612 -0x47,0x37,0x00,0x08,
86613 -0xFF,0x00,0x02,0x24,
86614 -0x00,0x00,0x62,0xAC,
86615 -0x93,0x38,0x00,0x08,
86616 -0xFF,0x00,0x02,0x24,
86617 -0x24,0x10,0x22,0x01,
86618 -0x08,0xFE,0x40,0x10,
86619 -0xFF,0x00,0x02,0x24,
86620 -0x42,0x00,0xA5,0x34,
86621 -0x00,0x00,0xA2,0x90,
86622 -0x00,0x00,0x00,0x00,
86623 -0xFF,0x00,0x44,0x30,
86624 -0x0E,0x00,0x86,0x10,
86625 -0x30,0x1F,0x62,0x26,
86626 -0x94,0x36,0x04,0xA2,
86627 -0x00,0x00,0xA2,0x90,
86628 -0xFF,0x00,0x83,0x30,
86629 -0xFF,0x00,0x44,0x30,
86630 -0x08,0x00,0x83,0x10,
86631 -0x30,0x1F,0x62,0x26,
86632 -0x21,0x30,0x00,0x02,
86633 -0x00,0x00,0xA2,0x90,
86634 -0x21,0x18,0x80,0x00,
86635 -0xFD,0xFF,0x62,0x14,
86636 -0xFF,0x00,0x44,0x30,
86637 -0x94,0x36,0xC3,0xA0,
86638 -0x30,0x1F,0x62,0x26,
86639 -0x94,0x36,0x43,0x90,
86640 -0x20,0xB0,0x02,0x3C,
86641 -0x00,0x1A,0x03,0x00,
86642 -0x21,0x18,0x62,0x00,
86643 -0x0C,0x00,0x69,0x8C,
86644 -0x25,0xB0,0x02,0x3C,
86645 -0xB0,0x03,0x42,0x34,
86646 -0xFF,0x00,0x24,0x31,
86647 -0x00,0x00,0x49,0xAC,
86648 -0xC5,0x37,0x00,0x08,
86649 -0xFF,0x00,0x02,0x24,
86650 -0x24,0x10,0x22,0x01,
86651 -0x2C,0xFE,0x40,0x10,
86652 -0xFF,0x00,0x02,0x24,
86653 -0x43,0x00,0xE5,0x34,
86654 -0x00,0x00,0xA2,0x90,
86655 -0x00,0x00,0x00,0x00,
86656 -0xFF,0x00,0x44,0x30,
86657 -0x0E,0x00,0x86,0x10,
86658 -0x30,0x1F,0x62,0x26,
86659 -0x98,0x36,0x04,0xA2,
86660 -0x00,0x00,0xA2,0x90,
86661 -0xFF,0x00,0x83,0x30,
86662 -0xFF,0x00,0x44,0x30,
86663 -0x08,0x00,0x83,0x10,
86664 -0x30,0x1F,0x62,0x26,
86665 -0x21,0x30,0x00,0x02,
86666 -0x00,0x00,0xA2,0x90,
86667 -0x21,0x18,0x80,0x00,
86668 -0xFD,0xFF,0x62,0x14,
86669 -0xFF,0x00,0x44,0x30,
86670 -0x98,0x36,0xC3,0xA0,
86671 -0x30,0x1F,0x62,0x26,
86672 -0x98,0x36,0x43,0x90,
86673 -0x20,0xB0,0x02,0x3C,
86674 -0x00,0x1A,0x03,0x00,
86675 -0x21,0x18,0x62,0x00,
86676 -0x0C,0x00,0x69,0x8C,
86677 -0x25,0xB0,0x02,0x3C,
86678 -0xB0,0x03,0x42,0x34,
86679 -0xFF,0x00,0x24,0x31,
86680 -0x00,0x00,0x49,0xAC,
86681 -0x0A,0x38,0x00,0x08,
86682 -0xFF,0x00,0x02,0x24,
86683 -0x06,0x00,0x03,0x24,
86684 -0x90,0x03,0x42,0x34,
86685 -0x00,0x00,0x43,0xAC,
86686 -0xAB,0x37,0x00,0x08,
86687 -0x30,0x1F,0x62,0x26,
86688 -0x01,0x00,0x03,0x24,
86689 -0x90,0x03,0x42,0x34,
86690 -0x00,0x00,0x43,0xAC,
86691 -0xBF,0x36,0x00,0x08,
86692 -0x30,0x1F,0x62,0x26,
86693 -0x25,0xB0,0x02,0x3C,
86694 -0x07,0x00,0x03,0x24,
86695 -0x90,0x03,0x42,0x34,
86696 -0x00,0x00,0x43,0xAC,
86697 -0x30,0x1F,0x63,0x26,
86698 -0xD4,0x1B,0x62,0x8C,
86699 -0x00,0x00,0x00,0x00,
86700 -0x00,0x80,0x42,0x38,
86701 -0x71,0x37,0x00,0x08,
86702 -0xD4,0x1B,0x62,0xAC,
86703 -0x00,0x00,0x40,0xAC,
86704 -0x34,0x37,0x00,0x08,
86705 -0x30,0x1F,0x62,0x26,
86706 -0x02,0x00,0x03,0x24,
86707 -0x90,0x03,0x42,0x34,
86708 -0x00,0x00,0x43,0xAC,
86709 -0xFA,0x36,0x00,0x08,
86710 -0x30,0x1F,0x62,0x26,
86711 -0x90,0x03,0x63,0x34,
86712 -0x00,0x00,0x62,0xAC,
86713 -0x2D,0x38,0x00,0x08,
86714 -0x30,0x1F,0x62,0x26,
86715 -0x03,0x00,0x03,0x24,
86716 -0x90,0x03,0x42,0x34,
86717 -0x00,0x00,0x43,0xAC,
86718 -0x6E,0x38,0x00,0x08,
86719 -0x30,0x1F,0x62,0x26,
86720 -0x05,0x00,0x03,0x24,
86721 -0x90,0x03,0x42,0x34,
86722 -0x00,0x00,0x43,0xAC,
86723 -0xEC,0x37,0x00,0x08,
86724 -0x30,0x1F,0x62,0x26,
86725 -0xE0,0xFF,0xBD,0x27,
86726 -0x1C,0x00,0xBF,0xAF,
86727 -0x18,0x00,0xB2,0xAF,
86728 -0x14,0x00,0xB1,0xAF,
86729 -0x10,0x00,0xB0,0xAF,
86730 -0x25,0xB0,0x0C,0x3C,
86731 -0x01,0x80,0x02,0x3C,
86732 -0x18,0x03,0x83,0x35,
86733 -0x9C,0xE8,0x42,0x24,
86734 -0x02,0x80,0x12,0x3C,
86735 -0x41,0xB0,0x0B,0x3C,
86736 -0x00,0x00,0x62,0xAC,
86737 -0x30,0x1F,0x4A,0x26,
86738 -0x0A,0x00,0x62,0x35,
86739 -0x00,0x00,0x44,0x94,
86740 -0xDE,0x1B,0x43,0x95,
86741 -0xDC,0x1B,0x49,0x95,
86742 -0x25,0x30,0x64,0x00,
86743 -0xFF,0xFF,0xD0,0x30,
86744 -0x24,0x10,0x09,0x02,
86745 -0x02,0x00,0x42,0x30,
86746 -0xC2,0x00,0x40,0x10,
86747 -0xC0,0x03,0x83,0x35,
86748 -0x02,0x00,0x02,0x24,
86749 -0x00,0x00,0x62,0xAC,
86750 -0x02,0x80,0x08,0x3C,
86751 -0xBC,0x5E,0x04,0x8D,
86752 -0xDC,0x02,0x82,0x35,
86753 -0x00,0x00,0x47,0x90,
86754 -0xFD,0xFF,0x03,0x24,
86755 -0x00,0x80,0x02,0x3C,
86756 -0x24,0x18,0x23,0x01,
86757 -0x25,0x20,0x82,0x00,
86758 -0x02,0x00,0xC6,0x38,
86759 -0x08,0x00,0x65,0x35,
86760 -0x02,0x80,0x02,0x3C,
86761 -0xF5,0x5E,0x47,0xA0,
86762 -0xBC,0x5E,0x04,0xAD,
86763 -0xDE,0x1B,0x46,0xA5,
86764 -0x21,0x48,0x60,0x00,
86765 -0x00,0x00,0xA3,0xA4,
86766 -0xDC,0x1B,0x43,0xA5,
86767 -0x24,0x38,0x09,0x02,
86768 -0x04,0x00,0xE2,0x30,
86769 -0x0A,0x00,0x40,0x10,
86770 -0x08,0x00,0xE2,0x30,
86771 -0xDE,0x1B,0x43,0x95,
86772 -0x0C,0x00,0x64,0x35,
86773 -0xC0,0x03,0x85,0x35,
86774 -0x04,0x00,0x63,0x38,
86775 -0x04,0x00,0x02,0x24,
86776 -0x00,0x00,0x86,0x8C,
86777 -0x00,0x00,0xA2,0xAC,
86778 -0xDE,0x1B,0x43,0xA5,
86779 -0x08,0x00,0xE2,0x30,
86780 -0x08,0x00,0x40,0x10,
86781 -0x10,0x00,0xE2,0x30,
86782 -0xDE,0x1B,0x42,0x95,
86783 -0xC0,0x03,0x84,0x35,
86784 -0x08,0x00,0x03,0x24,
86785 -0x08,0x00,0x42,0x38,
86786 -0x00,0x00,0x83,0xAC,
86787 -0xDE,0x1B,0x42,0xA5,
86788 -0x10,0x00,0xE2,0x30,
86789 -0x08,0x00,0x40,0x10,
86790 -0x20,0x00,0xE2,0x30,
86791 -0xDE,0x1B,0x42,0x95,
86792 -0xC0,0x03,0x84,0x35,
86793 -0x10,0x00,0x03,0x24,
86794 -0x10,0x00,0x42,0x38,
86795 -0x00,0x00,0x83,0xAC,
86796 -0xDE,0x1B,0x42,0xA5,
86797 -0x20,0x00,0xE2,0x30,
86798 -0x08,0x00,0x40,0x10,
86799 -0x80,0x00,0xE2,0x30,
86800 -0xDE,0x1B,0x42,0x95,
86801 -0xC0,0x03,0x84,0x35,
86802 -0x20,0x00,0x03,0x24,
86803 -0x20,0x00,0x42,0x38,
86804 -0x00,0x00,0x83,0xAC,
86805 -0xDE,0x1B,0x42,0xA5,
86806 -0x80,0x00,0xE2,0x30,
86807 -0x74,0x00,0x40,0x10,
86808 -0x30,0x1F,0x47,0x26,
86809 -0xC0,0x03,0x83,0x35,
86810 -0x80,0x00,0x02,0x24,
86811 -0x42,0xB0,0x0B,0x3C,
86812 -0x00,0x00,0x62,0xAC,
86813 -0x03,0x00,0x71,0x35,
86814 -0xDE,0x1B,0x42,0x95,
86815 -0x00,0x00,0x23,0x92,
86816 -0x80,0x00,0x42,0x38,
86817 -0x20,0x00,0x63,0x30,
86818 -0x59,0x00,0x60,0x10,
86819 -0xDE,0x1B,0x42,0xA5,
86820 -0x20,0x00,0x02,0x24,
86821 -0x00,0x00,0x22,0xA2,
86822 -0x02,0x80,0x03,0x3C,
86823 -0x16,0x5F,0x62,0x90,
86824 -0x00,0x00,0x00,0x00,
86825 -0x75,0x00,0x40,0x14,
86826 -0x21,0x40,0x00,0x00,
86827 -0xB0,0x1B,0x42,0x95,
86828 -0x00,0x00,0x00,0x00,
86829 -0x00,0x01,0x42,0x30,
86830 -0x4E,0x00,0x40,0x10,
86831 -0x02,0x80,0x06,0x3C,
86832 -0x02,0x80,0x07,0x3C,
86833 -0xF4,0x5E,0xE2,0x90,
86834 -0x00,0x00,0x00,0x00,
86835 -0x49,0x00,0x40,0x10,
86836 -0x02,0x80,0x09,0x3C,
86837 -0x02,0x80,0x04,0x3C,
86838 -0x00,0x5F,0x82,0x8C,
86839 -0x20,0x5F,0x24,0x8D,
86840 -0x24,0x5F,0x25,0x8D,
86841 -0x21,0x18,0x00,0x00,
86842 -0x21,0x10,0x44,0x00,
86843 -0x2B,0x30,0x44,0x00,
86844 -0x21,0x18,0x65,0x00,
86845 -0x21,0x18,0x66,0x00,
86846 -0x20,0x5F,0x22,0xAD,
86847 -0x24,0x5F,0x23,0xAD,
86848 -0xF4,0x5E,0xE4,0x90,
86849 -0x02,0x00,0x02,0x24,
86850 -0xFF,0x00,0x84,0x30,
86851 -0x07,0x00,0x82,0x10,
86852 -0x02,0x80,0x04,0x3C,
86853 -0xF4,0x5E,0xE2,0x90,
86854 -0x03,0x00,0x03,0x24,
86855 -0xFF,0x00,0x42,0x30,
86856 -0x5A,0x00,0x43,0x14,
86857 -0x02,0x80,0x05,0x3C,
86858 -0x02,0x80,0x04,0x3C,
86859 -0x11,0x5F,0x82,0x90,
86860 -0x00,0x00,0x00,0x00,
86861 -0xFF,0xFF,0x42,0x24,
86862 -0x11,0x5F,0x82,0xA0,
86863 -0x11,0x5F,0x83,0x90,
86864 -0x00,0x00,0x00,0x00,
86865 -0x07,0x00,0x60,0x10,
86866 -0x02,0x80,0x02,0x3C,
86867 -0xFA,0x5E,0x43,0x90,
86868 -0x00,0x00,0x00,0x00,
86869 -0x03,0x00,0x60,0x14,
86870 -0x00,0x00,0x00,0x00,
86871 -0x5B,0x00,0x00,0x11,
86872 -0x80,0x00,0x86,0x35,
86873 -0x11,0x5F,0x82,0x90,
86874 -0x00,0x00,0x00,0x00,
86875 -0x06,0x00,0x40,0x14,
86876 -0x02,0x80,0x05,0x3C,
86877 -0x02,0x80,0x02,0x3C,
86878 -0x10,0x5F,0x43,0x90,
86879 -0x00,0x00,0x00,0x00,
86880 -0x11,0x5F,0x83,0xA0,
86881 -0x02,0x80,0x05,0x3C,
86882 -0x0E,0x5F,0xA2,0x90,
86883 -0x02,0x80,0x03,0x3C,
86884 -0x02,0x00,0x04,0x24,
86885 -0x10,0x00,0x42,0x34,
86886 -0x0E,0x5F,0xA2,0xA0,
86887 -0xF9,0x5E,0x62,0x90,
86888 -0x21,0x28,0x00,0x00,
86889 -0xFF,0x00,0x42,0x30,
86890 -0x80,0x30,0x02,0x00,
86891 -0x21,0x30,0xC2,0x00,
86892 -0x8C,0x23,0x00,0x0C,
86893 -0x00,0x33,0x06,0x00,
86894 -0x42,0xB0,0x02,0x3C,
86895 -0x44,0x00,0x04,0x24,
86896 -0x03,0x00,0x42,0x34,
86897 -0x00,0x00,0x44,0xA0,
86898 -0x02,0x80,0x03,0x3C,
86899 -0xF6,0x5E,0x62,0x90,
86900 -0x00,0x00,0x00,0x00,
86901 -0x0F,0x00,0x42,0x30,
86902 -0x04,0x00,0x42,0x28,
86903 -0x05,0x00,0x40,0x10,
86904 -0x02,0x80,0x06,0x3C,
86905 -0x04,0x00,0x04,0x24,
86906 -0x64,0x31,0x00,0x0C,
86907 -0x01,0x00,0x05,0x24,
86908 -0x02,0x80,0x06,0x3C,
86909 -0xBC,0x5E,0xC4,0x8C,
86910 -0x30,0x1F,0x47,0x26,
86911 -0xDC,0x1B,0xE5,0x94,
86912 -0x08,0x00,0x02,0x3C,
86913 -0x25,0x20,0x82,0x00,
86914 -0x41,0xB0,0x03,0x3C,
86915 -0x25,0xB0,0x02,0x3C,
86916 -0x7F,0xFF,0xA5,0x30,
86917 -0xB0,0x03,0x42,0x34,
86918 -0x08,0x00,0x63,0x34,
86919 -0x00,0x00,0x44,0xAC,
86920 -0x00,0x00,0x65,0xA4,
86921 -0xBC,0x5E,0xC4,0xAC,
86922 -0xDC,0x1B,0xE5,0xA4,
86923 -0x30,0x1F,0x47,0x26,
86924 -0xDC,0x1B,0xE2,0x94,
86925 -0x00,0x00,0x00,0x00,
86926 -0x24,0x10,0x50,0x00,
86927 -0x00,0x30,0x42,0x30,
86928 -0x06,0x00,0x40,0x10,
86929 -0x00,0x00,0x00,0x00,
86930 -0xDE,0x1B,0xE2,0x94,
86931 -0x00,0x00,0x00,0x00,
86932 -0x00,0x10,0x42,0x38,
86933 -0x00,0x20,0x42,0x34,
86934 -0xDE,0x1B,0xE2,0xA4,
86935 -0x1C,0x00,0xBF,0x8F,
86936 -0x18,0x00,0xB2,0x8F,
86937 -0x14,0x00,0xB1,0x8F,
86938 -0x10,0x00,0xB0,0x8F,
86939 -0x08,0x00,0xE0,0x03,
86940 -0x20,0x00,0xBD,0x27,
86941 -0x51,0x3A,0x00,0x08,
86942 -0xDE,0x1B,0x46,0xA5,
86943 -0x01,0x00,0x08,0x24,
86944 -0x16,0x5F,0x60,0xA0,
86945 -0x8D,0x3A,0x00,0x08,
86946 -0x00,0x00,0x00,0x00,
86947 -0x0E,0x5F,0xA2,0x90,
86948 -0x02,0x80,0x03,0x3C,
86949 -0x02,0x00,0x04,0x24,
86950 -0x10,0x00,0x42,0x34,
86951 -0x0E,0x5F,0xA2,0xA0,
86952 -0xF9,0x5E,0x62,0x90,
86953 -0x21,0x28,0x00,0x00,
86954 -0xFF,0x00,0x42,0x30,
86955 -0x80,0x30,0x02,0x00,
86956 -0x21,0x30,0xC2,0x00,
86957 -0x8C,0x23,0x00,0x0C,
86958 -0x00,0x33,0x06,0x00,
86959 -0x44,0x00,0x02,0x24,
86960 -0x00,0x00,0x22,0xA2,
86961 -0xD5,0x3A,0x00,0x08,
86962 -0x02,0x80,0x03,0x3C,
86963 -0x84,0x00,0x84,0x35,
86964 -0x00,0x00,0x82,0x8C,
86965 -0x02,0x80,0x08,0x3C,
86966 -0x00,0x00,0xC4,0x8C,
86967 -0x1C,0x5F,0x06,0x8D,
86968 -0x21,0x10,0x00,0x00,
86969 -0x20,0x5F,0x28,0x8D,
86970 -0x24,0x5F,0x29,0x8D,
86971 -0x00,0x00,0x65,0x91,
86972 -0x25,0x10,0x44,0x00,
86973 -0x21,0x10,0x46,0x00,
86974 -0xFB,0xFF,0x04,0x24,
86975 -0x24,0x28,0xA4,0x00,
86976 -0x23,0x40,0x02,0x01,
86977 -0x00,0x00,0x65,0xA1,
86978 -0x04,0x00,0x00,0x11,
86979 -0x01,0x00,0x06,0x24,
86980 -0x80,0x10,0x08,0x00,
86981 -0x21,0x10,0x48,0x00,
86982 -0x80,0x30,0x02,0x00,
86983 -0x01,0x00,0x04,0x24,
86984 -0x8C,0x23,0x00,0x0C,
86985 -0x21,0x28,0x00,0x00,
86986 -0x42,0xB0,0x02,0x3C,
86987 -0x22,0x00,0x03,0x24,
86988 -0x03,0x00,0x42,0x34,
86989 -0x00,0x00,0x43,0xA0,
86990 -0xDF,0x3A,0x00,0x08,
86991 -0x02,0x80,0x06,0x3C,
86992 -0xF0,0xFF,0xBD,0x27,
86993 -0x08,0x00,0xB2,0xAF,
86994 -0x04,0x00,0xB1,0xAF,
86995 -0x00,0x00,0xB0,0xAF,
86996 -0x00,0x40,0x09,0x40,
86997 -0x00,0x68,0x0A,0x40,
86998 -0x00,0x70,0x02,0x40,
86999 -0x00,0x60,0x0B,0x40,
87000 -0x25,0xB0,0x05,0x3C,
87001 -0x18,0x03,0xA7,0x34,
87002 -0x00,0x00,0xE6,0x8C,
87003 -0x01,0x80,0x02,0x3C,
87004 -0x1C,0x03,0xA3,0x34,
87005 -0xC8,0xEC,0x42,0x24,
87006 -0x00,0x00,0x66,0xAC,
87007 -0x00,0x00,0xE2,0xAC,
87008 -0x80,0x00,0x83,0x8C,
87009 -0x7C,0x02,0xA2,0x34,
87010 -0x80,0x02,0xA6,0x34,
87011 -0x84,0x02,0xA7,0x34,
87012 -0x88,0x02,0xA8,0x34,
87013 -0x00,0x00,0x43,0xAC,
87014 -0x00,0x00,0xC9,0xAC,
87015 -0x00,0x00,0xEA,0xAC,
87016 -0x00,0x00,0x0B,0xAD,
87017 -0x74,0x00,0x83,0x8C,
87018 -0x8C,0x02,0xA2,0x34,
87019 -0x90,0x02,0xA7,0x34,
87020 -0x00,0x00,0x43,0xAC,
87021 -0x08,0x00,0x86,0x8C,
87022 -0x94,0x02,0xA8,0x34,
87023 -0x98,0x02,0xA9,0x34,
87024 -0x00,0x00,0xE6,0xAC,
87025 -0x0C,0x00,0x82,0x8C,
87026 -0x9C,0x02,0xA6,0x34,
87027 -0xA0,0x02,0xA7,0x34,
87028 -0x00,0x00,0x02,0xAD,
87029 -0x10,0x00,0x83,0x8C,
87030 -0xA4,0x02,0xA8,0x34,
87031 -0xA8,0x02,0xAA,0x34,
87032 -0x00,0x00,0x23,0xAD,
87033 -0x14,0x00,0x82,0x8C,
87034 -0xAC,0x02,0xA9,0x34,
87035 -0xB0,0x02,0xAB,0x34,
87036 -0x00,0x00,0xC2,0xAC,
87037 -0x18,0x00,0x83,0x8C,
87038 -0xB4,0x02,0xAC,0x34,
87039 -0xB8,0x02,0xAD,0x34,
87040 -0x00,0x00,0xE3,0xAC,
87041 -0x1C,0x00,0x82,0x8C,
87042 -0xBC,0x02,0xA7,0x34,
87043 -0xC0,0x02,0xAE,0x34,
87044 -0x00,0x00,0x02,0xAD,
87045 -0x20,0x00,0x83,0x8C,
87046 -0xC4,0x02,0xA8,0x34,
87047 -0xC8,0x02,0xAF,0x34,
87048 -0x00,0x00,0x43,0xAD,
87049 -0x24,0x00,0x82,0x8C,
87050 -0xCC,0x02,0xAA,0x34,
87051 -0xD0,0x02,0xB0,0x34,
87052 -0x00,0x00,0x22,0xAD,
87053 -0x28,0x00,0x83,0x8C,
87054 -0xD4,0x02,0xA9,0x34,
87055 -0xD8,0x02,0xB1,0x34,
87056 -0x00,0x00,0x63,0xAD,
87057 -0x2C,0x00,0x86,0x8C,
87058 -0x70,0x02,0xAB,0x34,
87059 -0x74,0x02,0xB2,0x34,
87060 -0x00,0x00,0x86,0xAD,
87061 -0x30,0x00,0x82,0x8C,
87062 -0x78,0x02,0xA6,0x34,
87063 -0x6C,0x03,0xAC,0x34,
87064 -0x00,0x00,0xA2,0xAD,
87065 -0x34,0x00,0x83,0x8C,
87066 -0x02,0x80,0x02,0x3C,
87067 -0x00,0x00,0xE3,0xAC,
87068 -0x38,0x00,0x85,0x8C,
87069 -0x28,0xC7,0x47,0x8C,
87070 -0x00,0x00,0xC5,0xAD,
87071 -0x3C,0x00,0x82,0x8C,
87072 -0x00,0x00,0x00,0x00,
87073 -0x00,0x00,0x02,0xAD,
87074 -0x40,0x00,0x83,0x8C,
87075 -0x00,0x00,0x00,0x00,
87076 -0x00,0x00,0xE3,0xAD,
87077 -0x44,0x00,0x82,0x8C,
87078 -0x00,0x00,0x00,0x00,
87079 -0x00,0x00,0x42,0xAD,
87080 -0x48,0x00,0x83,0x8C,
87081 -0x00,0x00,0x00,0x00,
87082 -0x00,0x00,0x03,0xAE,
87083 -0x4C,0x00,0x82,0x8C,
87084 -0x00,0x00,0x00,0x00,
87085 -0x00,0x00,0x22,0xAD,
87086 -0x50,0x00,0x83,0x8C,
87087 -0x00,0x00,0x00,0x00,
87088 -0x00,0x00,0x23,0xAE,
87089 -0x54,0x00,0x82,0x8C,
87090 -0x00,0x00,0x00,0x00,
87091 -0x00,0x00,0x62,0xAD,
87092 -0x58,0x00,0x83,0x8C,
87093 -0x00,0x00,0x00,0x00,
87094 -0x00,0x00,0x43,0xAE,
87095 -0x5C,0x00,0x82,0x8C,
87096 -0x00,0x00,0x00,0x00,
87097 -0x00,0x00,0xC2,0xAC,
87098 -0x21,0x10,0xE0,0x00,
87099 -0x00,0x00,0x82,0xAD,
87100 -0x01,0x00,0xE7,0x24,
87101 -0x21,0x10,0xE0,0x00,
87102 -0x01,0x00,0xE7,0x24,
87103 -0x00,0x00,0x82,0xAD,
87104 -0x9D,0x3B,0x00,0x08,
87105 -0x21,0x10,0xE0,0x00,
87106 -0x01,0x80,0x1B,0x3C,
87107 -0x90,0xEE,0x7B,0x27,
87108 -0x25,0xB0,0x1A,0x3C,
87109 -0x18,0x03,0x5A,0x27,
87110 -0x00,0x00,0x5B,0xAF,
87111 -0x21,0xD8,0xA0,0x03,
87112 -0x82,0xDA,0x1B,0x00,
87113 -0x80,0xDA,0x1B,0x00,
87114 -0x08,0x00,0x7B,0x27,
87115 -0x04,0x00,0x61,0xAF,
87116 -0x08,0x00,0x62,0xAF,
87117 -0x0C,0x00,0x63,0xAF,
87118 -0x10,0x00,0x64,0xAF,
87119 -0x14,0x00,0x65,0xAF,
87120 -0x18,0x00,0x66,0xAF,
87121 -0x1C,0x00,0x67,0xAF,
87122 -0x20,0x00,0x68,0xAF,
87123 -0x24,0x00,0x69,0xAF,
87124 -0x28,0x00,0x6A,0xAF,
87125 -0x2C,0x00,0x6B,0xAF,
87126 -0x30,0x00,0x6C,0xAF,
87127 -0x34,0x00,0x6D,0xAF,
87128 -0x38,0x00,0x6E,0xAF,
87129 -0x3C,0x00,0x6F,0xAF,
87130 -0x12,0x40,0x00,0x00,
87131 -0x10,0x48,0x00,0x00,
87132 -0x00,0x70,0x0A,0x40,
87133 -0x40,0x00,0x70,0xAF,
87134 -0x44,0x00,0x71,0xAF,
87135 -0x48,0x00,0x72,0xAF,
87136 -0x4C,0x00,0x73,0xAF,
87137 -0x50,0x00,0x74,0xAF,
87138 -0x54,0x00,0x75,0xAF,
87139 -0x58,0x00,0x76,0xAF,
87140 -0x5C,0x00,0x77,0xAF,
87141 -0x60,0x00,0x78,0xAF,
87142 -0x64,0x00,0x79,0xAF,
87143 -0x68,0x00,0x7C,0xAF,
87144 -0x6C,0x00,0x7D,0xAF,
87145 -0x70,0x00,0x7E,0xAF,
87146 -0x74,0x00,0x7F,0xAF,
87147 -0x78,0x00,0x68,0xAF,
87148 -0x7C,0x00,0x69,0xAF,
87149 -0x80,0x00,0x6A,0xAF,
87150 -0x00,0x68,0x1A,0x40,
87151 -0x25,0xB0,0x1B,0x3C,
87152 -0x1C,0x03,0x7B,0x37,
87153 -0x00,0x00,0x00,0x00,
87154 -0x00,0x00,0x7A,0xAF,
87155 -0x7F,0x00,0x5B,0x33,
87156 -0x30,0x00,0x60,0x13,
87157 -0x00,0x00,0x00,0x00,
87158 -0x25,0xB0,0x1B,0x3C,
87159 -0x30,0x03,0x7B,0x37,
87160 -0x00,0x00,0x00,0x00,
87161 -0x00,0x00,0x7A,0xAF,
87162 -0x00,0x00,0x00,0x00,
87163 -0x21,0xD8,0xA0,0x03,
87164 -0x82,0xDA,0x1B,0x00,
87165 -0x80,0xDA,0x1B,0x00,
87166 -0x08,0x00,0x7B,0x27,
87167 -0x04,0x00,0x61,0xAF,
87168 -0x08,0x00,0x62,0xAF,
87169 -0x0C,0x00,0x63,0xAF,
87170 -0x10,0x00,0x64,0xAF,
87171 -0x14,0x00,0x65,0xAF,
87172 -0x18,0x00,0x66,0xAF,
87173 -0x1C,0x00,0x67,0xAF,
87174 -0x20,0x00,0x68,0xAF,
87175 -0x24,0x00,0x69,0xAF,
87176 -0x28,0x00,0x6A,0xAF,
87177 -0x2C,0x00,0x6B,0xAF,
87178 -0x30,0x00,0x6C,0xAF,
87179 -0x34,0x00,0x6D,0xAF,
87180 -0x38,0x00,0x6E,0xAF,
87181 -0x3C,0x00,0x6F,0xAF,
87182 -0x12,0x40,0x00,0x00,
87183 -0x10,0x48,0x00,0x00,
87184 -0x00,0x70,0x0A,0x40,
87185 -0x40,0x00,0x70,0xAF,
87186 -0x44,0x00,0x71,0xAF,
87187 -0x48,0x00,0x72,0xAF,
87188 -0x4C,0x00,0x73,0xAF,
87189 -0x50,0x00,0x74,0xAF,
87190 -0x54,0x00,0x75,0xAF,
87191 -0x58,0x00,0x76,0xAF,
87192 -0x5C,0x00,0x77,0xAF,
87193 -0x60,0x00,0x78,0xAF,
87194 -0x64,0x00,0x79,0xAF,
87195 -0x68,0x00,0x7C,0xAF,
87196 -0x6C,0x00,0x7D,0xAF,
87197 -0x70,0x00,0x7E,0xAF,
87198 -0x74,0x00,0x7F,0xAF,
87199 -0x78,0x00,0x68,0xAF,
87200 -0x7C,0x00,0x69,0xAF,
87201 -0x80,0x00,0x6A,0xAF,
87202 -0x32,0x3B,0x00,0x08,
87203 -0x21,0x20,0x60,0x03,
87204 -0x00,0x00,0x00,0x00,
87205 -0x25,0xB0,0x08,0x3C,
87206 -0x20,0x03,0x08,0x35,
87207 -0x00,0x00,0x00,0x00,
87208 -0x00,0x00,0x1A,0xAD,
87209 -0x00,0x04,0x5B,0x33,
87210 -0x0A,0x00,0x60,0x13,
87211 -0x00,0x00,0x00,0x00,
87212 -0x01,0x80,0x08,0x3C,
87213 -0x3C,0xD4,0x08,0x25,
87214 -0x00,0x00,0x00,0x00,
87215 -0x25,0xB0,0x1B,0x3C,
87216 -0x24,0x03,0x7B,0x37,
87217 -0x00,0x00,0x00,0x00,
87218 -0x00,0x00,0x68,0xAF,
87219 -0x09,0xF8,0x00,0x01,
87220 -0x00,0x00,0x00,0x00,
87221 -0x00,0x08,0x5B,0x33,
87222 -0x25,0xB0,0x08,0x3C,
87223 -0x28,0x03,0x08,0x35,
87224 -0x00,0x00,0x00,0x00,
87225 -0x00,0x00,0x1B,0xAD,
87226 -0x06,0x00,0x60,0x13,
87227 -0x00,0x00,0x00,0x00,
87228 -0x01,0x80,0x08,0x3C,
87229 -0x9C,0xE8,0x08,0x25,
87230 -0x00,0x00,0x00,0x00,
87231 -0x09,0xF8,0x00,0x01,
87232 -0x00,0x00,0x00,0x00,
87233 -0x02,0x80,0x1A,0x3C,
87234 -0xBC,0x5E,0x5A,0x27,
87235 -0x04,0x00,0x5B,0x97,
87236 -0x25,0xB0,0x08,0x3C,
87237 -0x30,0x03,0x08,0x35,
87238 -0x00,0x00,0x00,0x00,
87239 -0x00,0x00,0x1B,0xAD,
87240 -0x18,0x00,0x60,0x13,
87241 -0x00,0x00,0x00,0x00,
87242 -0x08,0xE4,0x9B,0x27,
87243 -0x00,0x00,0x00,0x00,
87244 -0x04,0x00,0x61,0x8F,
87245 -0xFC,0x03,0x70,0x7B,
87246 -0x7C,0x00,0x62,0x7B,
87247 -0xBC,0x00,0x64,0x7B,
87248 -0xFC,0x00,0x66,0x7B,
87249 -0x3C,0x01,0x68,0x7B,
87250 -0x13,0x00,0x00,0x02,
87251 -0x11,0x00,0x20,0x02,
87252 -0x7C,0x01,0x6A,0x7B,
87253 -0xBC,0x01,0x6C,0x7B,
87254 -0xFC,0x01,0x6E,0x7B,
87255 -0x3C,0x02,0x70,0x7B,
87256 -0x7C,0x02,0x72,0x7B,
87257 -0xBC,0x02,0x74,0x7B,
87258 -0xFC,0x02,0x76,0x7B,
87259 -0x3C,0x03,0x78,0x7B,
87260 -0x7C,0x03,0x7C,0x7B,
87261 -0xBC,0x03,0x7E,0x7B,
87262 -0x80,0x00,0x7B,0x8F,
87263 -0x8F,0x3C,0x00,0x08,
87264 -0x00,0x00,0x00,0x00,
87265 -0x21,0xD8,0xA0,0x03,
87266 -0x82,0xDA,0x1B,0x00,
87267 -0x80,0xDA,0x1B,0x00,
87268 -0x08,0x00,0x7B,0x27,
87269 -0x08,0x00,0x5B,0xAF,
87270 -0xFC,0xE7,0x9D,0x27,
87271 -0x00,0x00,0x4A,0x8F,
87272 -0x00,0x00,0x00,0x00,
87273 -0x21,0x00,0x40,0x11,
87274 -0x00,0x00,0x00,0x00,
87275 -0x02,0x80,0x08,0x3C,
87276 -0x1C,0x5E,0x08,0x25,
87277 -0x21,0x48,0x00,0x00,
87278 -0x21,0x58,0x00,0x00,
87279 -0x01,0x00,0x6B,0x25,
87280 -0x1A,0x00,0x40,0x11,
87281 -0x24,0x70,0x4B,0x01,
87282 -0x14,0x00,0xC0,0x11,
87283 -0x01,0x00,0x04,0x24,
87284 -0x00,0x00,0x00,0x00,
87285 -0x04,0x00,0x44,0xA3,
87286 -0x26,0x50,0x4B,0x01,
87287 -0x00,0x00,0x4A,0xAF,
87288 -0x80,0x80,0x09,0x00,
87289 -0x21,0x80,0x08,0x02,
87290 -0x00,0x00,0x10,0x8E,
87291 -0x00,0x00,0x00,0x00,
87292 -0x09,0xF8,0x00,0x02,
87293 -0x00,0x00,0x00,0x00,
87294 -0x01,0x80,0x1B,0x3C,
87295 -0x68,0xF1,0x7B,0x27,
87296 -0x25,0xB0,0x1A,0x3C,
87297 -0x18,0x03,0x5A,0x27,
87298 -0x00,0x00,0x5B,0xAF,
87299 -0x02,0x80,0x1A,0x3C,
87300 -0xBC,0x5E,0x5A,0x27,
87301 -0xE1,0xFF,0x00,0x10,
87302 -0x00,0x00,0x00,0x00,
87303 -0x01,0x00,0x29,0x25,
87304 -0x40,0x58,0x0B,0x00,
87305 -0x52,0x3C,0x00,0x08,
87306 -0x00,0x00,0x00,0x00,
87307 -0x02,0x80,0x1B,0x3C,
87308 -0xBC,0x5E,0x7B,0x27,
87309 -0x21,0x60,0x00,0x00,
87310 -0x04,0x00,0x6C,0xA7,
87311 -0x08,0x00,0x7A,0x8F,
87312 -0x00,0x00,0x00,0x00,
87313 -0xF8,0xFF,0x5A,0x27,
87314 -0x00,0x00,0x5A,0x8F,
87315 -0x00,0x00,0x00,0x00,
87316 -0x08,0x00,0x5A,0x27,
87317 -0x84,0x00,0x44,0x8F,
87318 -0x00,0x00,0x00,0x00,
87319 -0xF9,0xFF,0x80,0x10,
87320 -0x00,0x00,0x00,0x00,
87321 -0x04,0x00,0x41,0x8F,
87322 -0xFC,0x03,0x50,0x7B,
87323 -0x7C,0x00,0x42,0x7B,
87324 -0xBC,0x00,0x44,0x7B,
87325 -0xFC,0x00,0x46,0x7B,
87326 -0x3C,0x01,0x48,0x7B,
87327 -0x13,0x00,0x00,0x02,
87328 -0x11,0x00,0x20,0x02,
87329 -0x7C,0x01,0x4A,0x7B,
87330 -0xBC,0x01,0x4C,0x7B,
87331 -0xFC,0x01,0x4E,0x7B,
87332 -0x3C,0x02,0x50,0x7B,
87333 -0x7C,0x02,0x52,0x7B,
87334 -0xBC,0x02,0x54,0x7B,
87335 -0xFC,0x02,0x56,0x7B,
87336 -0x3C,0x03,0x58,0x7B,
87337 -0x7C,0x03,0x5C,0x7B,
87338 -0xBC,0x03,0x5E,0x7B,
87339 -0x80,0x00,0x5B,0x8F,
87340 -0x00,0x00,0x00,0x00,
87341 -0x08,0x00,0x60,0x03,
87342 -0x10,0x00,0x00,0x42,
87343 -0x00,0x60,0x05,0x40,
87344 -0x42,0x28,0x05,0x00,
87345 -0x40,0x28,0x05,0x00,
87346 -0x00,0x60,0x85,0x40,
87347 -0x04,0x00,0x81,0xAC,
87348 -0x08,0x00,0x82,0xAC,
87349 -0x0C,0x00,0x83,0xAC,
87350 -0x20,0x00,0x88,0xAC,
87351 -0x24,0x00,0x89,0xAC,
87352 -0x28,0x00,0x8A,0xAC,
87353 -0x2C,0x00,0x8B,0xAC,
87354 -0x30,0x00,0x8C,0xAC,
87355 -0x34,0x00,0x8D,0xAC,
87356 -0x38,0x00,0x8E,0xAC,
87357 -0x3C,0x00,0x8F,0xAC,
87358 -0x12,0x40,0x00,0x00,
87359 -0x10,0x48,0x00,0x00,
87360 -0x40,0x00,0x90,0xAC,
87361 -0x44,0x00,0x91,0xAC,
87362 -0x48,0x00,0x92,0xAC,
87363 -0x4C,0x00,0x93,0xAC,
87364 -0x50,0x00,0x94,0xAC,
87365 -0x54,0x00,0x95,0xAC,
87366 -0x58,0x00,0x96,0xAC,
87367 -0x5C,0x00,0x97,0xAC,
87368 -0x60,0x00,0x98,0xAC,
87369 -0x64,0x00,0x99,0xAC,
87370 -0x68,0x00,0x9C,0xAC,
87371 -0x6C,0x00,0x9D,0xAC,
87372 -0x70,0x00,0x9E,0xAC,
87373 -0x74,0x00,0x9F,0xAC,
87374 -0x78,0x00,0x88,0xAC,
87375 -0x7C,0x00,0x89,0xAC,
87376 -0x80,0x00,0x9F,0xAC,
87377 -0xF8,0xFF,0x84,0x24,
87378 -0x00,0x00,0x84,0x8C,
87379 -0x00,0x00,0x00,0x00,
87380 -0x08,0x00,0x84,0x24,
87381 -0x84,0x00,0x86,0x8C,
87382 -0x00,0x00,0x00,0x00,
87383 -0xF9,0xFF,0xC0,0x10,
87384 -0x00,0x00,0x00,0x00,
87385 -0x21,0xD8,0x80,0x00,
87386 -0x01,0x00,0xBA,0x34,
87387 -0x04,0x00,0x61,0x8F,
87388 -0xFC,0x03,0x70,0x7B,
87389 -0x7C,0x00,0x62,0x7B,
87390 -0xBC,0x00,0x64,0x7B,
87391 -0xFC,0x00,0x66,0x7B,
87392 -0x3C,0x01,0x68,0x7B,
87393 -0x13,0x00,0x00,0x02,
87394 -0x11,0x00,0x20,0x02,
87395 -0x7C,0x01,0x6A,0x7B,
87396 -0xBC,0x01,0x6C,0x7B,
87397 -0xFC,0x01,0x6E,0x7B,
87398 -0x3C,0x02,0x70,0x7B,
87399 -0x7C,0x02,0x72,0x7B,
87400 -0xBC,0x02,0x74,0x7B,
87401 -0xFC,0x02,0x76,0x7B,
87402 -0x3C,0x03,0x78,0x7B,
87403 -0x7C,0x03,0x7C,0x7B,
87404 -0xBC,0x03,0x7E,0x7B,
87405 -0x80,0x00,0x7B,0x8F,
87406 -0x00,0x00,0x00,0x00,
87407 -0x08,0x00,0x60,0x03,
87408 -0x00,0x60,0x9A,0x40,
87409 -0x00,0x60,0x05,0x40,
87410 -0x42,0x28,0x05,0x00,
87411 -0x40,0x28,0x05,0x00,
87412 -0x00,0x60,0x85,0x40,
87413 -0x04,0x00,0x81,0xAC,
87414 -0x08,0x00,0x82,0xAC,
87415 -0x0C,0x00,0x83,0xAC,
87416 -0x20,0x00,0x88,0xAC,
87417 -0x24,0x00,0x89,0xAC,
87418 -0x28,0x00,0x8A,0xAC,
87419 -0x2C,0x00,0x8B,0xAC,
87420 -0x30,0x00,0x8C,0xAC,
87421 -0x34,0x00,0x8D,0xAC,
87422 -0x38,0x00,0x8E,0xAC,
87423 -0x3C,0x00,0x8F,0xAC,
87424 -0x12,0x40,0x00,0x00,
87425 -0x10,0x48,0x00,0x00,
87426 -0x40,0x00,0x90,0xAC,
87427 -0x44,0x00,0x91,0xAC,
87428 -0x48,0x00,0x92,0xAC,
87429 -0x4C,0x00,0x93,0xAC,
87430 -0x50,0x00,0x94,0xAC,
87431 -0x54,0x00,0x94,0xAC,
87432 -0x58,0x00,0x96,0xAC,
87433 -0x5C,0x00,0x96,0xAC,
87434 -0x60,0x00,0x98,0xAC,
87435 -0x64,0x00,0x99,0xAC,
87436 -0x68,0x00,0x9C,0xAC,
87437 -0x6C,0x00,0x9D,0xAC,
87438 -0x70,0x00,0x9E,0xAC,
87439 -0x78,0x00,0x88,0xAC,
87440 -0x7C,0x00,0x89,0xAC,
87441 -0x80,0x00,0x9F,0xAC,
87442 -0x84,0x00,0x80,0xAC,
87443 -0xF8,0xFF,0x84,0x24,
87444 -0x00,0x00,0x84,0x8C,
87445 -0x00,0x00,0x00,0x00,
87446 -0x08,0x00,0x84,0x24,
87447 -0x84,0x00,0x86,0x8C,
87448 -0xFA,0xFF,0xC0,0x10,
87449 -0x00,0x00,0x00,0x00,
87450 -0x21,0xD8,0x80,0x00,
87451 -0x01,0x00,0xBA,0x24,
87452 -0x04,0x00,0x61,0x8F,
87453 -0xFC,0x03,0x70,0x7B,
87454 -0x7C,0x00,0x62,0x7B,
87455 -0xBC,0x00,0x64,0x7B,
87456 -0xFC,0x00,0x66,0x7B,
87457 -0x3C,0x01,0x68,0x7B,
87458 -0x13,0x00,0x00,0x02,
87459 -0x11,0x00,0x20,0x02,
87460 -0x7C,0x01,0x6A,0x7B,
87461 -0xBC,0x01,0x6C,0x7B,
87462 -0xFC,0x01,0x6E,0x7B,
87463 -0x3C,0x02,0x70,0x7B,
87464 -0x7C,0x02,0x72,0x7B,
87465 -0xBC,0x02,0x74,0x7B,
87466 -0xFC,0x02,0x76,0x7B,
87467 -0x3C,0x03,0x78,0x7B,
87468 -0x7C,0x03,0x7C,0x7B,
87469 -0xBC,0x03,0x7E,0x7B,
87470 -0x80,0x00,0x7B,0x8F,
87471 -0x08,0x00,0x60,0x03,
87472 -0x00,0x60,0x9A,0x40,
87473 -0x00,0x00,0x00,0x00,
87474 -0x00,0x00,0x00,0x00,
87475 -0x00,0x00,0x00,0x00,
87476 -0x00,0x00,0x00,0x00,
87477 -0x00,0x00,0x00,0x00,
87478 -0x00,0x00,0x00,0x00,
87479 -0x00,0x00,0x00,0x00,
87480 -0x00,0x00,0x00,0x00,
87481 -0x00,0x00,0x00,0x00,
87482 -0x00,0x00,0x00,0x00,
87483 -0x00,0x00,0x00,0x00,
87484 -0x00,0x00,0x00,0x00,
87485 -0x00,0x00,0x00,0x00,
87486 -0x00,0x00,0x00,0x00,
87487 -0x00,0x00,0x00,0x00,
87488 -0x00,0x00,0x00,0x00,
87489 -0x00,0x00,0x00,0x00,
87490 -0x00,0x00,0x00,0x00,
87491 -0x00,0x00,0x00,0x00,
87492 -0x00,0x00,0x00,0x00,
87493 -0x00,0x00,0x00,0x00,
87494 -0x00,0x00,0x00,0x00,
87495 -0x00,0x00,0x00,0x00,
87496 -0x00,0x00,0x00,0x00,
87497 -0x00,0x00,0x00,0x00,
87498 -0x00,0x00,0x00,0x00,
87499 -0x00,0x00,0x00,0x00,
87500 -0x00,0x00,0x00,0x00,
87501 -0x00,0x00,0x00,0x00,
87502 -0x00,0x00,0x00,0x00,
87503 -0x00,0x00,0x00,0x00,
87504 -0x00,0x00,0x00,0x00,
87505 -0x00,0x00,0x00,0x00,
87506 -0x00,0x00,0x00,0x00,
87507 -0x00,0x00,0x00,0x00,
87508 -0x00,0x00,0x00,0x00,
87509 -0x00,0x00,0x00,0x00,
87510 -0x00,0x00,0x00,0x00,
87511 -0x00,0x00,0x00,0x00,
87512 -0x00,0x00,0x00,0x00,
87513 -0x00,0x00,0x00,0x00,
87514 -0x00,0x00,0x00,0x00,
87515 -0x00,0x00,0x00,0x00,
87516 -0x00,0x00,0x00,0x00,
87517 -0x00,0x00,0x00,0x00,
87518 -0x00,0x00,0x00,0x00,
87519 -0x00,0x00,0x00,0x00,
87520 -0x00,0x00,0x00,0x00,
87521 -0x00,0x00,0x00,0x00,
87522 -0x00,0x00,0x00,0x00,
87523 -0x00,0x00,0x00,0x00,
87524 -0x00,0x00,0x00,0x00,
87525 -0x00,0x00,0x00,0x00,
87526 -0x00,0x00,0x00,0x00,
87527 -0x00,0x00,0x00,0x00,
87528 -0x00,0x00,0x00,0x00,
87529 -0x00,0x00,0x00,0x00,
87530 -0x00,0x00,0x00,0x00,
87531 -0x00,0x00,0x00,0x00,
87532 -0x00,0x00,0x00,0x00,
87533 -0x00,0x00,0x00,0x00,
87534 -0x00,0x00,0x00,0x00,
87535 -0x00,0x00,0x00,0x00,
87536 -0x00,0x00,0x00,0x00,
87537 -0x00,0x00,0x00,0x00,
87538 -0x00,0x00,0x00,0x00,
87539 -0x00,0x00,0x00,0x00,
87540 -0x00,0x00,0x00,0x00,
87541 -0x00,0x00,0x00,0x00,
87542 -0x00,0x00,0x00,0x00,
87543 -0x00,0x00,0x00,0x00,
87544 -0x00,0x00,0x00,0x00,
87545 -0x00,0x00,0x00,0x00,
87546 -0x00,0x00,0x00,0x00,
87547 -0x00,0x00,0x00,0x00,
87548 -0x00,0x00,0x00,0x00,
87549 -0x00,0x00,0x00,0x00,
87550 -0x00,0x00,0x00,0x00,
87551 -0x00,0x00,0x00,0x00,
87552 -0x00,0x00,0x00,0x00,
87553 -0x00,0x00,0x00,0x00,
87554 -0x00,0x00,0x00,0x00,
87555 -0x00,0x00,0x00,0x00,
87556 -0x00,0x00,0x00,0x00,
87557 -0x00,0x00,0x00,0x00,
87558 -0x00,0x00,0x00,0x00,
87559 -0x00,0x00,0x00,0x00,
87560 -0x00,0x00,0x00,0x00,
87561 -0x00,0x00,0x00,0x00,
87562 -0x00,0x00,0x00,0x00,
87563 -0x00,0x00,0x00,0x00,
87564 -0x00,0x00,0x00,0x00,
87565 -0x00,0x00,0x00,0x00,
87566 -0x00,0x00,0x00,0x00,
87567 -0x00,0x00,0x00,0x00,
87568 -0x00,0x00,0x00,0x00,
87569 -0x00,0x00,0x00,0x00,
87570 -0x00,0x00,0x00,0x00,
87571 -0x00,0x00,0x00,0x00,
87572 -0x00,0x00,0x00,0x00,
87573 -0x00,0x00,0x00,0x00,
87574 -0x00,0x00,0x00,0x00,
87575 -0x00,0x00,0x00,0x00,
87576 -0x00,0x00,0x00,0x00,
87577 -0x00,0x00,0x00,0x00,
87578 -0x00,0x00,0x00,0x00,
87579 -0x00,0x00,0x00,0x00,
87580 -0x00,0x00,0x00,0x00,
87581 -0x00,0x00,0x00,0x00,
87582 -0x00,0x00,0x00,0x00,
87583 -0x00,0x00,0x00,0x00,
87584 -0x00,0x00,0x00,0x00,
87585 -0x00,0x00,0x00,0x00,
87586 -0x00,0x00,0x00,0x00,
87587 -0x00,0x00,0x00,0x00,
87588 -0x00,0x00,0x00,0x00,
87589 -0x00,0x00,0x00,0x00,
87590 -0x00,0x00,0x00,0x00,
87591 -0x00,0x00,0x00,0x00,
87592 -0x00,0x00,0x00,0x00,
87593 -0x00,0x00,0x00,0x00,
87594 -0x00,0x00,0x00,0x00,
87595 -0x00,0x00,0x00,0x00,
87596 -0x00,0x00,0x00,0x00,
87597 -0x00,0x00,0x00,0x00,
87598 -0x00,0x00,0x00,0x00,
87599 -0x00,0x00,0x00,0x00,
87600 -0x00,0x00,0x00,0x00,
87601 -0x00,0x00,0x00,0x00,
87602 -0x00,0x00,0x00,0x00,
87603 -0x00,0x00,0x00,0x00,
87604 -0x00,0x00,0x00,0x00,
87605 -0x00,0x00,0x00,0x00,
87606 -0x00,0x00,0x00,0x00,
87607 -0x00,0x00,0x00,0x00,
87608 -0x00,0x00,0x00,0x00,
87609 -0x00,0x00,0x00,0x00,
87610 -0x00,0x00,0x00,0x00,
87611 -0x00,0x00,0x00,0x00,
87612 -0x00,0x00,0x00,0x00,
87613 -0x00,0x00,0x00,0x00,
87614 -0x00,0x00,0x00,0x00,
87615 -0x00,0x00,0x00,0x00,
87616 -0x00,0x00,0x00,0x00,
87617 -0x00,0x00,0x00,0x00,
87618 -0x00,0x00,0x00,0x00,
87619 -0x00,0x00,0x00,0x00,
87620 -0x00,0x00,0x00,0x00,
87621 -0x00,0x00,0x00,0x00,
87622 -0x00,0x00,0x00,0x00,
87623 -0x00,0x00,0x00,0x00,
87624 -0x00,0x00,0x00,0x00,
87625 -0x00,0x00,0x00,0x00,
87626 -0x00,0x00,0x00,0x00,
87627 -0x00,0x00,0x00,0x00,
87628 -0x00,0x00,0x00,0x00,
87629 -0x00,0x00,0x00,0x00,
87630 -0x00,0x00,0x00,0x00,
87631 -0x00,0x00,0x00,0x00,
87632 -0x00,0x00,0x00,0x00,
87633 -0x00,0x00,0x00,0x00,
87634 -0x00,0x00,0x00,0x00,
87635 -0x00,0x00,0x00,0x00,
87636 -0x00,0x00,0x00,0x00,
87637 -0x00,0x00,0x00,0x00,
87638 -0x00,0x00,0x00,0x00,
87639 -0x00,0x00,0x00,0x00,
87640 -0x00,0x00,0x00,0x00,
87641 -0x00,0x00,0x00,0x00,
87642 -0x00,0x00,0x00,0x00,
87643 -0x00,0x00,0x00,0x00,
87644 -0x00,0x00,0x00,0x00,
87645 -0x00,0x00,0x00,0x00,
87646 -0x00,0x00,0x00,0x00,
87647 -0x00,0x00,0x00,0x00,
87648 -0x00,0x00,0x00,0x00,
87649 -0x00,0x00,0x00,0x00,
87650 -0x00,0x00,0x00,0x00,
87651 -0x00,0x00,0x00,0x00,
87652 -0x00,0x00,0x00,0x00,
87653 -0x00,0x00,0x00,0x00,
87654 -0x00,0x00,0x00,0x00,
87655 -0x00,0x00,0x00,0x00,
87656 -0x00,0x00,0x00,0x00,
87657 -0x00,0x00,0x00,0x00,
87658 -0x00,0x00,0x00,0x00,
87659 -0x00,0x00,0x00,0x00,
87660 -0x00,0x00,0x00,0x00,
87661 -0x00,0x00,0x00,0x00,
87662 -0x00,0x00,0x00,0x00,
87663 -0x00,0x00,0x00,0x00,
87664 -0x00,0x00,0x00,0x00,
87665 -0x00,0x00,0x00,0x00,
87666 -0x00,0x00,0x00,0x00,
87667 -0x00,0x00,0x00,0x00,
87668 -0x00,0x00,0x00,0x00,
87669 -0x00,0x00,0x00,0x00,
87670 -0x00,0x00,0x00,0x00,
87671 -0x00,0x00,0x00,0x00,
87672 -0x00,0x00,0x00,0x00,
87673 -0x00,0x00,0x00,0x00,
87674 -0x00,0x00,0x00,0x00,
87675 -0x00,0x00,0x00,0x00,
87676 -0x00,0x00,0x00,0x00,
87677 -0x00,0x00,0x00,0x00,
87678 -0x00,0x00,0x00,0x00,
87679 -0x00,0x00,0x00,0x00,
87680 -0x00,0x00,0x00,0x00,
87681 -0x00,0x00,0x00,0x00,
87682 -0x00,0x00,0x00,0x00,
87683 -0x00,0x00,0x00,0x00,
87684 -0x00,0x00,0x00,0x00,
87685 -0x00,0x00,0x00,0x00,
87686 -0x00,0x00,0x00,0x00,
87687 -0x00,0x00,0x00,0x00,
87688 -0x00,0x00,0x00,0x00,
87689 -0x00,0x00,0x00,0x00,
87690 -0x00,0x00,0x00,0x00,
87691 -0x00,0x00,0x00,0x00,
87692 -0x00,0x00,0x00,0x00,
87693 -0x00,0x00,0x00,0x00,
87694 -0x00,0x00,0x00,0x00,
87695 -0x00,0x00,0x00,0x00,
87696 -0x00,0x00,0x00,0x00,
87697 -0x00,0x00,0x00,0x00,
87698 -0x00,0x00,0x00,0x00,
87699 -0x00,0x00,0x00,0x00,
87700 -0x00,0x00,0x00,0x00,
87701 -0x00,0x00,0x00,0x00,
87702 -0x00,0x00,0x00,0x00,
87703 -0x00,0x00,0x00,0x00,
87704 -0x00,0x00,0x00,0x00,
87705 -0x00,0x00,0x00,0x00,
87706 -0x00,0x00,0x00,0x00,
87707 -0x00,0x00,0x00,0x00,
87708 -0x00,0x00,0x00,0x00,
87709 -0x00,0x00,0x00,0x00,
87710 -0x83,0x4E,0x00,0x00,
87711 -0x00,0x00,0x00,0x00,
87712 -0x01,0x80,0x1B,0x3C,
87713 -0x00,0x00,0x7B,0x27,
87714 -0x25,0xB0,0x1A,0x3C,
87715 -0x18,0x03,0x5A,0x27,
87716 -0x00,0x00,0x5B,0xAF,
87717 -0x00,0x00,0x05,0x24,
87718 -0x03,0x00,0xA4,0x24,
87719 -0x00,0xA0,0x80,0x40,
87720 -0x00,0xA0,0x84,0x40,
87721 -0x01,0x80,0x04,0x3C,
87722 -0x40,0x00,0x84,0x24,
87723 -0x08,0x00,0x80,0x00,
87724 -0x00,0x00,0x00,0x00,
87725 -0x00,0x00,0x00,0x00,
87726 -0x00,0x00,0x00,0x00,
87727 -0x00,0x00,0x00,0x00,
87728 -0x01,0x80,0x1B,0x3C,
87729 -0x40,0x00,0x7B,0x27,
87730 -0x25,0xB0,0x1A,0x3C,
87731 -0x18,0x03,0x5A,0x27,
87732 -0x00,0x00,0x5B,0xAF,
87733 -0x02,0x80,0x1A,0x3C,
87734 -0x00,0x00,0x5A,0x27,
87735 -0xFC,0x03,0x5D,0x27,
87736 -0x02,0x80,0x1C,0x3C,
87737 -0x00,0x1C,0x9C,0x27,
87738 -0x00,0xF0,0x08,0x3C,
87739 -0x00,0x0C,0x08,0x35,
87740 -0x00,0x60,0x88,0x40,
87741 -0x02,0x80,0x04,0x3C,
87742 -0x00,0x00,0x84,0x24,
87743 -0xFF,0x7F,0x05,0x3C,
87744 -0xFF,0xFF,0xA5,0x34,
87745 -0x24,0x20,0x85,0x00,
87746 -0x00,0x20,0x84,0x4C,
87747 -0xFF,0xFF,0x05,0x34,
87748 -0x21,0x28,0xA4,0x00,
87749 -0x00,0x28,0x85,0x4C,
87750 -0x02,0x80,0x08,0x3C,
87751 -0x00,0x00,0x08,0x25,
87752 -0x00,0x00,0x00,0xAD,
87753 -0x03,0x80,0x09,0x3C,
87754 -0xFC,0xCC,0x29,0x25,
87755 -0x04,0x00,0x08,0x25,
87756 -0xFE,0xFF,0x09,0x15,
87757 -0x00,0x00,0x00,0xAD,
87758 -0x00,0x80,0x04,0x3C,
87759 -0x00,0x00,0x84,0x24,
87760 -0xFF,0x7F,0x05,0x3C,
87761 -0xFF,0xFF,0xA5,0x34,
87762 -0x24,0x20,0x85,0x00,
87763 -0x00,0x00,0x84,0x4C,
87764 -0xFF,0xFF,0x06,0x34,
87765 -0x21,0x30,0xC4,0x00,
87766 -0x24,0x30,0xC5,0x00,
87767 -0x00,0x08,0x86,0x4C,
87768 -0x00,0xA0,0x04,0x40,
87769 -0x10,0x00,0x84,0x34,
87770 -0x00,0xA0,0x84,0x40,
87771 -0x01,0x80,0x1B,0x3C,
87772 -0xEC,0x00,0x7B,0x27,
87773 -0x25,0xB0,0x1A,0x3C,
87774 -0x18,0x03,0x5A,0x27,
87775 -0x00,0x00,0x5B,0xAF,
87776 -0x00,0x00,0x00,0x00,
87777 -0x25,0xB0,0x04,0x3C,
87778 -0x44,0x00,0x84,0x34,
87779 -0x00,0x00,0x85,0x84,
87780 -0x20,0x00,0x06,0x24,
87781 -0x25,0x28,0xA6,0x00,
87782 -0x00,0x00,0x85,0xA4,
87783 -0x01,0x80,0x1B,0x3C,
87784 -0x1C,0x01,0x7B,0x27,
87785 -0x25,0xB0,0x1A,0x3C,
87786 -0x18,0x03,0x5A,0x27,
87787 -0x00,0x00,0x5B,0xAF,
87788 -0x25,0xB0,0x04,0x3C,
87789 -0x44,0x00,0x84,0x34,
87790 -0x00,0x00,0x85,0x8C,
87791 -0x00,0x00,0x00,0x00,
87792 -0x10,0x00,0xA5,0x30,
87793 -0xFC,0xFF,0xA0,0x10,
87794 -0x00,0x00,0x00,0x00,
87795 -0xFF,0x1F,0x07,0x3C,
87796 -0xFF,0xFF,0xE7,0x34,
87797 -0x02,0x80,0x05,0x3C,
87798 -0xD8,0x5D,0xA5,0x24,
87799 -0xFF,0xFF,0xA5,0x30,
87800 -0x40,0xB0,0x04,0x3C,
87801 -0x25,0x28,0xA4,0x00,
87802 -0x24,0x28,0xA7,0x00,
87803 -0x21,0x30,0x00,0x00,
87804 -0x43,0xB0,0x02,0x3C,
87805 -0x00,0x80,0x04,0x3C,
87806 -0x40,0x00,0x84,0x34,
87807 -0x00,0x00,0x45,0xAC,
87808 -0x04,0x00,0x46,0xAC,
87809 -0x08,0x00,0x44,0xAC,
87810 -0xEA,0x65,0x00,0x08,
87811 -0x00,0x00,0x00,0x00,
87812 -0x08,0x00,0xE0,0x03,
87813 -0x00,0x00,0x00,0x00,
87814 -0x09,0x00,0x02,0x24,
87815 -0xFF,0xFF,0x42,0x24,
87816 -0xFF,0xFF,0x41,0x04,
87817 -0xFF,0xFF,0x42,0x24,
87818 -0x08,0x00,0xE0,0x03,
87819 -0x01,0x00,0x42,0x24,
87820 -0x00,0x60,0x02,0x40,
87821 -0x01,0x00,0x41,0x34,
87822 -0x01,0x00,0x21,0x38,
87823 -0x00,0x60,0x81,0x40,
87824 -0x08,0x00,0xE0,0x03,
87825 -0x00,0x00,0x82,0xAC,
87826 -0x00,0x00,0x82,0x8C,
87827 -0x00,0x00,0x00,0x00,
87828 -0x21,0x18,0x40,0x00,
87829 -0x00,0x60,0x83,0x40,
87830 -0x08,0x00,0xE0,0x03,
87831 -0x00,0x00,0x82,0xAC,
87832 -0x00,0x60,0x01,0x40,
87833 -0x01,0x00,0x21,0x34,
87834 -0x00,0x60,0x81,0x40,
87835 -0x08,0x00,0xE0,0x03,
87836 -0x00,0x00,0x00,0x00,
87837 -0x00,0x60,0x01,0x40,
87838 -0x01,0x00,0x21,0x34,
87839 -0x01,0x00,0x21,0x38,
87840 -0x00,0x60,0x81,0x40,
87841 -0x08,0x00,0xE0,0x03,
87842 -0x00,0x00,0x00,0x00,
87843 -0x01,0x80,0x03,0x3C,
87844 -0x25,0xB0,0x02,0x3C,
87845 -0x0C,0x02,0x63,0x24,
87846 -0x18,0x03,0x42,0x34,
87847 -0x00,0x00,0x43,0xAC,
87848 -0x04,0x00,0x85,0x8C,
87849 -0x00,0xA0,0x03,0x3C,
87850 -0x01,0x00,0x02,0x24,
87851 -0x25,0x28,0xA3,0x00,
87852 -0x00,0x00,0xA4,0x8C,
87853 -0x08,0x00,0xE0,0x03,
87854 -0x00,0x00,0x00,0x00,
87855 -0x01,0x80,0x03,0x3C,
87856 -0x25,0xB0,0x02,0x3C,
87857 -0x3C,0x02,0x63,0x24,
87858 -0x18,0x03,0x42,0x34,
87859 -0x00,0x00,0x43,0xAC,
87860 -0x04,0x00,0x82,0x8C,
87861 -0x02,0x00,0x83,0x94,
87862 -0x00,0xA0,0x07,0x3C,
87863 -0x25,0x28,0x47,0x00,
87864 -0x00,0x00,0xA2,0x8C,
87865 -0x10,0x00,0x02,0x24,
87866 -0x13,0x00,0x62,0x10,
87867 -0x11,0x00,0x66,0x28,
87868 -0x06,0x00,0xC0,0x10,
87869 -0x20,0x00,0x02,0x24,
87870 -0x08,0x00,0x02,0x24,
87871 -0x17,0x00,0x62,0x10,
87872 -0x00,0x00,0x00,0x00,
87873 -0x08,0x00,0xE0,0x03,
87874 -0x01,0x00,0x02,0x24,
87875 -0xFD,0xFF,0x62,0x14,
87876 -0x00,0x00,0x00,0x00,
87877 -0x08,0x00,0x83,0x8C,
87878 -0x00,0x00,0x00,0x00,
87879 -0x00,0x00,0xA3,0xAC,
87880 -0x04,0x00,0x82,0x8C,
87881 -0x00,0x00,0x00,0x00,
87882 -0x25,0x10,0x47,0x00,
87883 -0x00,0x00,0x42,0x8C,
87884 -0x08,0x00,0xE0,0x03,
87885 -0x01,0x00,0x02,0x24,
87886 -0x08,0x00,0x82,0x8C,
87887 -0x00,0x00,0x00,0x00,
87888 -0x00,0x00,0xA2,0xA4,
87889 -0x04,0x00,0x83,0x8C,
87890 -0x00,0x00,0x00,0x00,
87891 -0x25,0x18,0x67,0x00,
87892 -0x00,0x00,0x62,0x94,
87893 -0x08,0x00,0xE0,0x03,
87894 -0x01,0x00,0x02,0x24,
87895 -0x08,0x00,0x82,0x8C,
87896 -0x00,0x00,0x00,0x00,
87897 -0x00,0x00,0xA2,0xA0,
87898 -0x04,0x00,0x83,0x8C,
87899 -0x00,0x00,0x00,0x00,
87900 -0x25,0x18,0x67,0x00,
87901 -0x00,0x00,0x62,0x90,
87902 -0x08,0x00,0xE0,0x03,
87903 -0x01,0x00,0x02,0x24,
87904 -0x02,0x80,0x02,0x3C,
87905 -0x30,0x1F,0x47,0x24,
87906 -0x30,0x37,0xE3,0x90,
87907 -0xFF,0xFF,0xA5,0x30,
87908 -0x09,0x00,0xA3,0x10,
87909 -0x21,0x20,0xC0,0x00,
87910 -0xA0,0x37,0xE2,0x8C,
87911 -0x00,0x00,0x00,0x00,
87912 -0x08,0x00,0xC2,0xAC,
87913 -0xAA,0x37,0xE3,0x94,
87914 -0x0E,0x00,0x02,0x24,
87915 -0x14,0x00,0xC2,0xAC,
87916 -0x30,0x09,0x00,0x08,
87917 -0x0C,0x00,0xC3,0xAC,
87918 -0x08,0x00,0xE0,0x03,
87919 -0x00,0x00,0x00,0x00,
87920 -0xE0,0xFF,0xBD,0x27,
87921 -0x14,0x00,0xB1,0xAF,
87922 -0x02,0x80,0x11,0x3C,
87923 -0x1C,0x00,0xBF,0xAF,
87924 -0x18,0x00,0xB2,0xAF,
87925 -0x10,0x00,0xB0,0xAF,
87926 -0x30,0x1F,0x31,0x26,
87927 -0x88,0x37,0x30,0x96,
87928 -0x02,0x80,0x02,0x3C,
87929 -0x01,0x80,0x03,0x3C,
87930 -0x25,0x80,0x02,0x02,
87931 -0x25,0xB0,0x02,0x3C,
87932 -0x40,0x03,0x63,0x24,
87933 -0x18,0x03,0x42,0x34,
87934 -0x60,0x00,0x04,0x26,
87935 -0x80,0x00,0x05,0x26,
87936 -0x00,0x00,0x43,0xAC,
87937 -0x5F,0x1E,0x00,0x0C,
87938 -0x03,0x00,0x06,0x24,
87939 -0x21,0x20,0x00,0x02,
87940 -0x21,0x28,0x00,0x00,
87941 -0x08,0x52,0x00,0x0C,
87942 -0x08,0x00,0x06,0x24,
87943 -0x88,0x37,0x22,0x8E,
87944 -0x0C,0x00,0x03,0x24,
87945 -0x0C,0x00,0x43,0xAE,
87946 -0x08,0x00,0x42,0xAE,
87947 -0x12,0x00,0x02,0x24,
87948 -0x14,0x00,0x42,0xAE,
87949 -0x21,0x20,0x40,0x02,
87950 -0x1C,0x00,0xBF,0x8F,
87951 -0x18,0x00,0xB2,0x8F,
87952 -0x14,0x00,0xB1,0x8F,
87953 -0x10,0x00,0xB0,0x8F,
87954 -0x30,0x09,0x00,0x08,
87955 -0x20,0x00,0xBD,0x27,
87956 -0x08,0x00,0xE0,0x03,
87957 -0x00,0x00,0x00,0x00,
87958 -0x08,0x00,0xE0,0x03,
87959 -0x21,0x10,0x00,0x00,
87960 -0x08,0x00,0xE0,0x03,
87961 -0x21,0x10,0x00,0x00,
87962 -0x08,0x00,0xE0,0x03,
87963 -0x21,0x10,0x00,0x00,
87964 -0xE0,0xFF,0xBD,0x27,
87965 -0x18,0x00,0xB2,0xAF,
87966 -0x1C,0x00,0xBF,0xAF,
87967 -0x14,0x00,0xB1,0xAF,
87968 -0x10,0x00,0xB0,0xAF,
87969 -0x21,0x30,0x80,0x00,
87970 -0x21,0x90,0x00,0x00,
87971 -0x00,0x60,0x11,0x40,
87972 -0x01,0x00,0x21,0x36,
87973 -0x01,0x00,0x21,0x38,
87974 -0x00,0x60,0x81,0x40,
87975 -0x0D,0x00,0x83,0x90,
87976 -0x00,0x00,0x00,0x00,
87977 -0x02,0x00,0x60,0x14,
87978 -0x02,0x80,0x02,0x3C,
87979 -0x01,0x00,0x03,0x24,
87980 -0xF8,0x5E,0x43,0xA0,
87981 -0x0C,0x00,0xC2,0x90,
87982 -0x02,0x80,0x05,0x3C,
87983 -0x0D,0x5F,0xA2,0xA0,
87984 -0x00,0x00,0xC4,0x90,
87985 -0x05,0x00,0x02,0x24,
87986 -0xFF,0x00,0x83,0x30,
87987 -0x41,0x00,0x62,0x10,
87988 -0x00,0x00,0x00,0x00,
87989 -0x03,0x00,0x02,0x24,
87990 -0x31,0x00,0x62,0x10,
87991 -0xFF,0x00,0x84,0x30,
87992 -0x09,0x00,0x82,0x2C,
87993 -0x25,0x00,0x40,0x10,
87994 -0x02,0x80,0x10,0x3C,
87995 -0xF4,0x5E,0x02,0x92,
87996 -0x00,0x00,0x00,0x00,
87997 -0xFF,0x00,0x42,0x30,
87998 -0x21,0x00,0x82,0x10,
87999 -0x00,0x00,0x00,0x00,
88000 -0xB6,0x60,0x00,0x0C,
88001 -0x00,0x00,0x00,0x00,
88002 -0xF4,0x5E,0x02,0x92,
88003 -0x00,0x00,0x00,0x00,
88004 -0x34,0x00,0x40,0x10,
88005 -0x02,0x80,0x03,0x3C,
88006 -0xE0,0x3A,0x62,0x94,
88007 -0x00,0x00,0x00,0x00,
88008 -0x00,0x01,0x42,0x30,
88009 -0x51,0x00,0x40,0x10,
88010 -0x02,0x80,0x02,0x3C,
88011 -0x02,0x80,0x03,0x3C,
88012 -0x15,0x5F,0x62,0x90,
88013 -0x00,0x00,0x00,0x00,
88014 -0x11,0x00,0x40,0x14,
88015 -0x00,0x00,0x00,0x00,
88016 -0x15,0x5F,0x62,0x90,
88017 -0x00,0x00,0x00,0x00,
88018 -0x01,0x00,0x42,0x24,
88019 -0x15,0x5F,0x62,0xA0,
88020 -0x02,0x80,0x03,0x3C,
88021 -0xF6,0x5E,0x62,0x90,
88022 -0x00,0x00,0x00,0x00,
88023 -0x0F,0x00,0x42,0x30,
88024 -0x04,0x00,0x42,0x28,
88025 -0x06,0x00,0x40,0x10,
88026 -0x04,0x00,0x04,0x24,
88027 -0x64,0x31,0x00,0x0C,
88028 -0x01,0x00,0x05,0x24,
88029 -0x40,0x41,0x00,0x08,
88030 -0x00,0x00,0x00,0x00,
88031 -0x04,0x00,0x12,0x24,
88032 -0x00,0x60,0x91,0x40,
88033 -0x21,0x10,0x40,0x02,
88034 -0x1C,0x00,0xBF,0x8F,
88035 -0x18,0x00,0xB2,0x8F,
88036 -0x14,0x00,0xB1,0x8F,
88037 -0x10,0x00,0xB0,0x8F,
88038 -0x08,0x00,0xE0,0x03,
88039 -0x20,0x00,0xBD,0x27,
88040 -0x0B,0x00,0xC2,0x90,
88041 -0x00,0x00,0x00,0x00,
88042 -0x03,0x00,0x40,0x14,
88043 -0x02,0x80,0x03,0x3C,
88044 -0x02,0x80,0x03,0x3C,
88045 -0x01,0x00,0x02,0x24,
88046 -0x10,0x5F,0x62,0xA0,
88047 -0x10,0x5F,0x63,0x90,
88048 -0x02,0x80,0x02,0x3C,
88049 -0x11,0x5F,0x43,0xA0,
88050 -0x00,0x00,0xC4,0x90,
88051 -0x18,0x41,0x00,0x08,
88052 -0xFF,0x00,0x84,0x30,
88053 -0x0D,0x5F,0xA0,0xA0,
88054 -0x00,0x00,0xC4,0x90,
88055 -0x15,0x41,0x00,0x08,
88056 -0xFF,0x00,0x83,0x30,
88057 -0x42,0xB0,0x06,0x3C,
88058 -0x00,0x00,0xC3,0x90,
88059 -0xEF,0xFF,0x02,0x24,
88060 -0x03,0x00,0xC7,0x34,
88061 -0x24,0x18,0x62,0x00,
88062 -0x40,0x00,0x02,0x24,
88063 -0x00,0x00,0xC3,0xA0,
88064 -0x0C,0x00,0x04,0x24,
88065 -0x00,0x00,0xE2,0xA0,
88066 -0x64,0x31,0x00,0x0C,
88067 -0x01,0x00,0x05,0x24,
88068 -0x02,0x80,0x03,0x3C,
88069 -0xDE,0x5D,0x62,0x90,
88070 -0x00,0x00,0x00,0x00,
88071 -0x02,0x00,0x42,0x30,
88072 -0x15,0x00,0x40,0x14,
88073 -0x00,0x00,0x00,0x00,
88074 -0x00,0x08,0x04,0x24,
88075 -0x00,0x02,0x05,0x3C,
88076 -0xA9,0x45,0x00,0x0C,
88077 -0x01,0x00,0x06,0x24,
88078 -0x02,0x80,0x02,0x3C,
88079 -0x30,0x1F,0x42,0x24,
88080 -0x2A,0x1C,0x43,0x90,
88081 -0x00,0x00,0x00,0x00,
88082 -0xCD,0xFF,0x60,0x10,
88083 -0x00,0x00,0x00,0x00,
88084 -0x50,0x39,0x44,0x94,
88085 -0x2A,0x1C,0x40,0xA0,
88086 -0x00,0xC0,0x84,0x24,
88087 -0xC2,0x34,0x00,0x0C,
88088 -0xFF,0xFF,0x84,0x30,
88089 -0x40,0x41,0x00,0x08,
88090 -0x00,0x00,0x00,0x00,
88091 -0x15,0x5F,0x40,0xA0,
88092 -0x40,0x41,0x00,0x08,
88093 -0x00,0x00,0x00,0x00,
88094 -0x9B,0x30,0x00,0x0C,
88095 -0x01,0x00,0x04,0x24,
88096 -0x6B,0x41,0x00,0x08,
88097 -0x00,0x08,0x04,0x24,
88098 -0x08,0x00,0xE0,0x03,
88099 -0x21,0x10,0x00,0x00,
88100 -0xE0,0xFF,0xBD,0x27,
88101 -0x14,0x00,0xB1,0xAF,
88102 -0x02,0x80,0x11,0x3C,
88103 -0x10,0x00,0xB0,0xAF,
88104 -0x30,0x1F,0x30,0x26,
88105 -0xB0,0x1B,0x07,0x96,
88106 -0x18,0x00,0xBF,0xAF,
88107 -0xFF,0xFF,0xE3,0x30,
88108 -0x00,0x01,0x62,0x30,
88109 -0x0E,0x00,0x40,0x10,
88110 -0x01,0x00,0x66,0x30,
88111 -0x02,0x80,0x04,0x3C,
88112 -0x88,0x58,0x84,0x24,
88113 -0x03,0x00,0x05,0x24,
88114 -0x17,0x00,0xC0,0x14,
88115 -0x04,0x00,0x62,0x30,
88116 -0x02,0x00,0x40,0x10,
88117 -0xFB,0xF6,0xE3,0x30,
88118 -0xB0,0x1B,0x03,0xA6,
88119 -0xA3,0x51,0x00,0x0C,
88120 -0x00,0x00,0x00,0x00,
88121 -0x25,0xB0,0x02,0x3C,
88122 -0x4C,0x00,0x42,0x34,
88123 -0x00,0x00,0x40,0xA0,
88124 -0x21,0x20,0x00,0x00,
88125 -0x12,0x0D,0x00,0x0C,
88126 -0x21,0x28,0x00,0x00,
88127 -0x30,0x1F,0x23,0x26,
88128 -0x18,0x00,0xBF,0x8F,
88129 -0x14,0x00,0xB1,0x8F,
88130 -0x10,0x00,0xB0,0x8F,
88131 -0x21,0x10,0x00,0x00,
88132 -0x20,0x00,0xBD,0x27,
88133 -0x10,0x3E,0x60,0xAC,
88134 -0xEC,0x38,0x60,0xAC,
88135 -0x08,0x39,0x60,0xAC,
88136 -0x08,0x00,0xE0,0x03,
88137 -0x50,0x3E,0x60,0xAC,
88138 -0x6C,0x4C,0x00,0x0C,
88139 -0x00,0x00,0x00,0x00,
88140 -0xB0,0x1B,0x02,0x96,
88141 -0x00,0x00,0x00,0x00,
88142 -0xFE,0xFE,0x42,0x30,
88143 -0xA3,0x51,0x00,0x0C,
88144 -0xB0,0x1B,0x02,0xA6,
88145 -0x25,0xB0,0x02,0x3C,
88146 -0x4C,0x00,0x42,0x34,
88147 -0x00,0x00,0x40,0xA0,
88148 -0x9D,0x41,0x00,0x08,
88149 -0x21,0x20,0x00,0x00,
88150 -0x08,0x00,0xE0,0x03,
88151 -0x21,0x10,0x00,0x00,
88152 -0x08,0x00,0xE0,0x03,
88153 -0x21,0x10,0x00,0x00,
88154 -0xE8,0xFF,0xBD,0x27,
88155 -0x10,0x00,0xBF,0xAF,
88156 -0x01,0x00,0x83,0x90,
88157 -0x02,0x80,0x02,0x3C,
88158 -0x21,0x38,0x80,0x00,
88159 -0xB0,0x5C,0x43,0xAC,
88160 -0x01,0x00,0x84,0x90,
88161 -0x00,0x00,0xE2,0x90,
88162 -0x02,0x80,0x06,0x3C,
88163 -0xFF,0x00,0x85,0x30,
88164 -0x80,0x10,0x02,0x00,
88165 -0x25,0x28,0xA2,0x00,
88166 -0xE8,0xDD,0xC6,0x24,
88167 -0xFF,0x00,0x84,0x30,
88168 -0x00,0x80,0xA5,0x34,
88169 -0x4E,0x23,0x00,0x0C,
88170 -0x03,0x00,0xE7,0x24,
88171 -0x10,0x00,0xBF,0x8F,
88172 -0x21,0x10,0x00,0x00,
88173 -0x08,0x00,0xE0,0x03,
88174 -0x18,0x00,0xBD,0x27,
88175 -0xE0,0xFF,0xBD,0x27,
88176 -0x18,0x00,0xB0,0xAF,
88177 -0x02,0x80,0x03,0x3C,
88178 -0x1C,0x00,0xBF,0xAF,
88179 -0xE0,0x3A,0x62,0x94,
88180 -0x00,0x00,0x00,0x00,
88181 -0x01,0x00,0x43,0x30,
88182 -0x00,0x01,0x42,0x30,
88183 -0x04,0x00,0x40,0x10,
88184 -0x21,0x80,0x80,0x00,
88185 -0x02,0x80,0x04,0x3C,
88186 -0x06,0x00,0x60,0x14,
88187 -0xE0,0xD7,0x84,0x24,
88188 -0x1C,0x00,0xBF,0x8F,
88189 -0x18,0x00,0xB0,0x8F,
88190 -0x21,0x10,0x00,0x00,
88191 -0x08,0x00,0xE0,0x03,
88192 -0x20,0x00,0xBD,0x27,
88193 -0x2F,0x55,0x00,0x0C,
88194 -0x00,0x00,0x00,0x00,
88195 -0x06,0x00,0x07,0x92,
88196 -0x07,0x00,0x02,0x26,
88197 -0x21,0x20,0x00,0x02,
88198 -0x80,0x38,0x07,0x00,
88199 -0x00,0x80,0xE7,0x34,
88200 -0x05,0x00,0x05,0x24,
88201 -0x21,0x30,0x00,0x00,
88202 -0x1E,0x51,0x00,0x0C,
88203 -0x10,0x00,0xA2,0xAF,
88204 -0x1C,0x00,0xBF,0x8F,
88205 -0x18,0x00,0xB0,0x8F,
88206 -0x21,0x10,0x00,0x00,
88207 -0x08,0x00,0xE0,0x03,
88208 -0x20,0x00,0xBD,0x27,
88209 -0x08,0x00,0xE0,0x03,
88210 -0x21,0x10,0x00,0x00,
88211 -0x08,0x00,0xE0,0x03,
88212 -0x21,0x10,0x00,0x00,
88213 -0x08,0x00,0xE0,0x03,
88214 -0x21,0x10,0x00,0x00,
88215 -0x08,0x00,0xE0,0x03,
88216 -0x21,0x10,0x00,0x00,
88217 -0x08,0x00,0xE0,0x03,
88218 -0x21,0x10,0x00,0x00,
88219 -0x08,0x00,0xE0,0x03,
88220 -0x21,0x10,0x00,0x00,
88221 -0x08,0x00,0xE0,0x03,
88222 -0x21,0x10,0x00,0x00,
88223 -0x08,0x00,0xE0,0x03,
88224 -0x21,0x10,0x00,0x00,
88225 -0x08,0x00,0xE0,0x03,
88226 -0x01,0x00,0x02,0x24,
88227 -0x08,0x00,0xE0,0x03,
88228 -0x21,0x10,0x00,0x00,
88229 -0x08,0x00,0xE0,0x03,
88230 -0x01,0x00,0x02,0x24,
88231 -0x08,0x00,0xE0,0x03,
88232 -0x21,0x10,0x00,0x00,
88233 -0x08,0x00,0xE0,0x03,
88234 -0x21,0x10,0x00,0x00,
88235 -0x08,0x00,0xE0,0x03,
88236 -0x01,0x00,0x02,0x24,
88237 -0x08,0x00,0xE0,0x03,
88238 -0x21,0x10,0x00,0x00,
88239 -0x08,0x00,0xE0,0x03,
88240 -0x01,0x00,0x02,0x24,
88241 -0x08,0x00,0xE0,0x03,
88242 -0x21,0x10,0x00,0x00,
88243 -0x08,0x00,0xE0,0x03,
88244 -0x00,0x00,0x00,0x00,
88245 -0x08,0x00,0xE0,0x03,
88246 -0x01,0x00,0x02,0x24,
88247 -0x08,0x00,0xE0,0x03,
88248 -0x01,0x00,0x02,0x24,
88249 -0x08,0x00,0xE0,0x03,
88250 -0x21,0x10,0x00,0x00,
88251 -0x08,0x00,0xE0,0x03,
88252 -0x01,0x00,0x02,0x24,
88253 -0x08,0x00,0xE0,0x03,
88254 -0x21,0x10,0x00,0x00,
88255 -0x08,0x00,0xE0,0x03,
88256 -0x21,0x10,0x00,0x00,
88257 -0x08,0x00,0xE0,0x03,
88258 -0x21,0x10,0x00,0x00,
88259 -0x08,0x00,0xE0,0x03,
88260 -0x21,0x10,0x00,0x00,
88261 -0x08,0x00,0xE0,0x03,
88262 -0x21,0x10,0x00,0x00,
88263 -0x08,0x00,0xE0,0x03,
88264 -0x21,0x10,0x00,0x00,
88265 -0x08,0x00,0xE0,0x03,
88266 -0x21,0x10,0x00,0x00,
88267 -0x08,0x00,0xE0,0x03,
88268 -0x21,0x10,0x00,0x00,
88269 -0xE8,0xFF,0xBD,0x27,
88270 -0x02,0x80,0x02,0x3C,
88271 -0x10,0x00,0xB0,0xAF,
88272 -0x14,0x00,0xBF,0xAF,
88273 -0x30,0x1F,0x45,0x24,
88274 -0x50,0x3E,0xA3,0x8C,
88275 -0x00,0x00,0x00,0x00,
88276 -0x06,0x00,0x60,0x14,
88277 -0x21,0x80,0x80,0x00,
88278 -0x14,0x00,0xBF,0x8F,
88279 -0x10,0x00,0xB0,0x8F,
88280 -0x21,0x10,0x00,0x00,
88281 -0x08,0x00,0xE0,0x03,
88282 -0x18,0x00,0xBD,0x27,
88283 -0x4C,0x3E,0xA2,0x90,
88284 -0x00,0x00,0x00,0x00,
88285 -0x21,0x10,0x45,0x00,
88286 -0x44,0x3E,0x40,0xA0,
88287 -0x00,0x00,0x84,0x8C,
88288 -0x6D,0x1D,0x00,0x0C,
88289 -0x00,0x00,0x00,0x00,
88290 -0x00,0x00,0x06,0x8E,
88291 -0x03,0x00,0x04,0x24,
88292 -0x90,0x14,0x00,0x0C,
88293 -0x21,0x28,0x00,0x00,
88294 -0x14,0x00,0xBF,0x8F,
88295 -0x10,0x00,0xB0,0x8F,
88296 -0x21,0x10,0x00,0x00,
88297 -0x08,0x00,0xE0,0x03,
88298 -0x18,0x00,0xBD,0x27,
88299 -0x00,0x00,0x84,0x90,
88300 -0x4F,0x0C,0x00,0x08,
88301 -0x00,0x00,0x00,0x00,
88302 -0xE0,0xFF,0xBD,0x27,
88303 -0x18,0x00,0xBF,0xAF,
88304 -0x14,0x00,0xB1,0xAF,
88305 -0x10,0x00,0xB0,0xAF,
88306 -0x00,0x00,0x86,0x90,
88307 -0x21,0x80,0x80,0x00,
88308 -0x00,0x7F,0x05,0x24,
88309 -0xA9,0x45,0x00,0x0C,
88310 -0x08,0x0E,0x04,0x24,
88311 -0x00,0x00,0x05,0x92,
88312 -0x7F,0x7F,0x11,0x3C,
88313 -0x00,0x0E,0x04,0x24,
88314 -0x00,0x14,0x05,0x00,
88315 -0x00,0x86,0x05,0x00,
88316 -0x00,0x1A,0x05,0x00,
88317 -0x25,0x80,0x02,0x02,
88318 -0x25,0x80,0x03,0x02,
88319 -0x25,0x80,0x05,0x02,
88320 -0x21,0x30,0x00,0x02,
88321 -0xA9,0x45,0x00,0x0C,
88322 -0x7F,0x7F,0x25,0x36,
88323 -0x7F,0x7F,0x25,0x36,
88324 -0x21,0x30,0x00,0x02,
88325 -0xA9,0x45,0x00,0x0C,
88326 -0x04,0x0E,0x04,0x24,
88327 -0x7F,0x7F,0x25,0x36,
88328 -0x21,0x30,0x00,0x02,
88329 -0xA9,0x45,0x00,0x0C,
88330 -0x10,0x0E,0x04,0x24,
88331 -0x7F,0x7F,0x25,0x36,
88332 -0x21,0x30,0x00,0x02,
88333 -0xA9,0x45,0x00,0x0C,
88334 -0x14,0x0E,0x04,0x24,
88335 -0x7F,0x7F,0x25,0x36,
88336 -0x21,0x30,0x00,0x02,
88337 -0xA9,0x45,0x00,0x0C,
88338 -0x18,0x0E,0x04,0x24,
88339 -0x7F,0x7F,0x25,0x36,
88340 -0x21,0x30,0x00,0x02,
88341 -0x18,0x00,0xBF,0x8F,
88342 -0x14,0x00,0xB1,0x8F,
88343 -0x10,0x00,0xB0,0x8F,
88344 -0x1C,0x0E,0x04,0x24,
88345 -0xA9,0x45,0x00,0x08,
88346 -0x20,0x00,0xBD,0x27,
88347 -0xD0,0xFF,0xBD,0x27,
88348 -0x24,0x00,0xB3,0xAF,
88349 -0x20,0x00,0xB2,0xAF,
88350 -0x1C,0x00,0xB1,0xAF,
88351 -0x18,0x00,0xB0,0xAF,
88352 -0x28,0x00,0xBF,0xAF,
88353 -0x00,0x00,0x85,0x94,
88354 -0x02,0x00,0x02,0x24,
88355 -0x21,0x98,0x80,0x00,
88356 -0x10,0x00,0xA0,0xA3,
88357 -0x21,0x80,0x00,0x00,
88358 -0x21,0x30,0x00,0x00,
88359 -0x21,0x88,0x00,0x00,
88360 -0x66,0x00,0xA2,0x10,
88361 -0x10,0x00,0xB2,0x27,
88362 -0x03,0x00,0xA2,0x28,
88363 -0x26,0x00,0x40,0x14,
88364 -0x01,0x00,0x02,0x24,
88365 -0x03,0x00,0x02,0x24,
88366 -0x75,0x00,0xA2,0x10,
88367 -0x24,0x08,0x04,0x24,
88368 -0x0C,0x09,0x04,0x24,
88369 -0xA9,0x45,0x00,0x0C,
88370 -0xFF,0xFF,0x05,0x24,
88371 -0x04,0x08,0x04,0x24,
88372 -0x21,0x30,0x00,0x02,
88373 -0xA9,0x45,0x00,0x0C,
88374 -0x0F,0x00,0x05,0x24,
88375 -0x02,0x00,0x64,0x96,
88376 -0x02,0x00,0x02,0x24,
88377 -0x35,0x00,0x82,0x10,
88378 -0x03,0x00,0x82,0x28,
88379 -0x4B,0x00,0x40,0x10,
88380 -0x03,0x00,0x02,0x24,
88381 -0x01,0x00,0x02,0x24,
88382 -0x60,0x00,0x82,0x10,
88383 -0x21,0x30,0x20,0x02,
88384 -0x04,0x0C,0x04,0x24,
88385 -0xA9,0x45,0x00,0x0C,
88386 -0x0F,0x00,0x05,0x24,
88387 -0x21,0x30,0x20,0x02,
88388 -0x04,0x0D,0x04,0x24,
88389 -0xA9,0x45,0x00,0x0C,
88390 -0x0F,0x00,0x05,0x24,
88391 -0x10,0x00,0xA6,0x93,
88392 -0x04,0x0A,0x04,0x24,
88393 -0xA9,0x45,0x00,0x0C,
88394 -0x00,0xFF,0x05,0x3C,
88395 -0x28,0x00,0xBF,0x8F,
88396 -0x24,0x00,0xB3,0x8F,
88397 -0x20,0x00,0xB2,0x8F,
88398 -0x1C,0x00,0xB1,0x8F,
88399 -0x18,0x00,0xB0,0x8F,
88400 -0x08,0x00,0xE0,0x03,
88401 -0x30,0x00,0xBD,0x27,
88402 -0xDE,0xFF,0xA2,0x14,
88403 -0x0C,0x09,0x04,0x24,
88404 -0x24,0x08,0x04,0x24,
88405 -0x0E,0x00,0x05,0x24,
88406 -0xA9,0x45,0x00,0x0C,
88407 -0x02,0x00,0x06,0x24,
88408 -0x2C,0x08,0x04,0x24,
88409 -0x01,0x00,0x06,0x24,
88410 -0xA9,0x45,0x00,0x0C,
88411 -0x0E,0x00,0x05,0x24,
88412 -0x10,0x00,0xA2,0x93,
88413 -0x80,0xFF,0x03,0x24,
88414 -0x11,0x11,0x04,0x3C,
88415 -0x0F,0x00,0x42,0x30,
88416 -0x25,0x10,0x43,0x00,
88417 -0x11,0x11,0x86,0x34,
88418 -0x03,0x00,0x10,0x24,
88419 -0x10,0x00,0xA2,0xA3,
88420 -0x0C,0x09,0x04,0x24,
88421 -0xA9,0x45,0x00,0x0C,
88422 -0xFF,0xFF,0x05,0x24,
88423 -0x04,0x08,0x04,0x24,
88424 -0x21,0x30,0x00,0x02,
88425 -0xA9,0x45,0x00,0x0C,
88426 -0x0F,0x00,0x05,0x24,
88427 -0x02,0x00,0x64,0x96,
88428 -0x02,0x00,0x02,0x24,
88429 -0xCD,0xFF,0x82,0x14,
88430 -0x03,0x00,0x82,0x28,
88431 -0x00,0x00,0x42,0x92,
88432 -0x02,0x00,0x11,0x24,
88433 -0xF5,0x00,0x42,0x30,
88434 -0x05,0x00,0x42,0x34,
88435 -0x00,0x00,0x42,0xA2,
88436 -0x21,0x30,0x20,0x02,
88437 -0x04,0x0C,0x04,0x24,
88438 -0xA9,0x45,0x00,0x0C,
88439 -0x0F,0x00,0x05,0x24,
88440 -0x21,0x30,0x20,0x02,
88441 -0x04,0x0D,0x04,0x24,
88442 -0xA9,0x45,0x00,0x0C,
88443 -0x0F,0x00,0x05,0x24,
88444 -0x10,0x00,0xA6,0x93,
88445 -0x04,0x0A,0x04,0x24,
88446 -0xA9,0x45,0x00,0x0C,
88447 -0x00,0xFF,0x05,0x3C,
88448 -0x28,0x00,0xBF,0x8F,
88449 -0x24,0x00,0xB3,0x8F,
88450 -0x20,0x00,0xB2,0x8F,
88451 -0x1C,0x00,0xB1,0x8F,
88452 -0x18,0x00,0xB0,0x8F,
88453 -0x08,0x00,0xE0,0x03,
88454 -0x30,0x00,0xBD,0x27,
88455 -0xB8,0xFF,0x82,0x14,
88456 -0x21,0x30,0x20,0x02,
88457 -0x00,0x00,0x42,0x92,
88458 -0x03,0x00,0x11,0x24,
88459 -0xF0,0x00,0x42,0x30,
88460 -0x01,0x00,0x42,0x34,
88461 -0xD4,0x42,0x00,0x08,
88462 -0x00,0x00,0x42,0xA2,
88463 -0x24,0x08,0x04,0x24,
88464 -0x0E,0x00,0x05,0x24,
88465 -0xA9,0x45,0x00,0x0C,
88466 -0x01,0x00,0x06,0x24,
88467 -0x02,0x00,0x06,0x24,
88468 -0x2C,0x08,0x04,0x24,
88469 -0xA9,0x45,0x00,0x0C,
88470 -0x0E,0x00,0x05,0x24,
88471 -0x10,0x00,0xA2,0x93,
88472 -0x22,0x22,0x03,0x3C,
88473 -0x22,0x22,0x66,0x34,
88474 -0x0F,0x00,0x42,0x30,
88475 -0x40,0x00,0x42,0x34,
88476 -0x03,0x00,0x10,0x24,
88477 -0xC4,0x42,0x00,0x08,
88478 -0x10,0x00,0xA2,0xA3,
88479 -0x00,0x00,0x42,0x92,
88480 -0x01,0x00,0x11,0x24,
88481 -0xF0,0x00,0x42,0x30,
88482 -0xD4,0x42,0x00,0x08,
88483 -0x00,0x00,0x42,0xA2,
88484 -0x0E,0x00,0x05,0x24,
88485 -0xA9,0x45,0x00,0x0C,
88486 -0x02,0x00,0x06,0x24,
88487 -0x02,0x00,0x06,0x24,
88488 -0x2C,0x08,0x04,0x24,
88489 -0xA9,0x45,0x00,0x0C,
88490 -0x0E,0x00,0x05,0x24,
88491 -0x10,0x00,0xA2,0x93,
88492 -0xC0,0xFF,0x03,0x24,
88493 -0x03,0x00,0x10,0x24,
88494 -0x0F,0x00,0x42,0x30,
88495 -0x25,0x10,0x43,0x00,
88496 -0x32,0x03,0x03,0x3C,
88497 -0x33,0x13,0x66,0x34,
88498 -0x90,0x42,0x00,0x08,
88499 -0x10,0x00,0xA2,0xA3,
88500 -0x00,0x00,0x86,0x8C,
88501 -0x00,0x0F,0x05,0x3C,
88502 -0xA9,0x45,0x00,0x08,
88503 -0x80,0x08,0x04,0x24,
88504 -0xE8,0xFF,0xBD,0x27,
88505 -0x10,0x00,0xB0,0xAF,
88506 -0x21,0x80,0x80,0x00,
88507 -0x02,0x80,0x04,0x3C,
88508 -0x14,0x00,0xBF,0xAF,
88509 -0x2F,0x55,0x00,0x0C,
88510 -0xF0,0xD7,0x84,0x24,
88511 -0x00,0x00,0x02,0x92,
88512 -0x00,0x0D,0x04,0x24,
88513 -0x00,0x10,0x05,0x3C,
88514 -0x21,0x00,0x40,0x10,
88515 -0x21,0x30,0x00,0x00,
88516 -0x00,0x08,0x04,0x24,
88517 -0xCB,0x45,0x00,0x0C,
88518 -0x00,0x02,0x05,0x3C,
88519 -0x00,0x08,0x04,0x24,
88520 -0x00,0x02,0x05,0x3C,
88521 -0x32,0x00,0x40,0x10,
88522 -0x01,0x00,0x06,0x24,
88523 -0x00,0x0A,0x04,0x24,
88524 -0x03,0x00,0x05,0x24,
88525 -0xA9,0x45,0x00,0x0C,
88526 -0x21,0x30,0x00,0x00,
88527 -0x00,0x0A,0x04,0x24,
88528 -0x08,0x00,0x05,0x24,
88529 -0xA9,0x45,0x00,0x0C,
88530 -0x01,0x00,0x06,0x24,
88531 -0x00,0x0D,0x04,0x24,
88532 -0x00,0x10,0x05,0x3C,
88533 -0xA9,0x45,0x00,0x0C,
88534 -0x21,0x30,0x00,0x00,
88535 -0x00,0x0D,0x04,0x24,
88536 -0x00,0x20,0x05,0x3C,
88537 -0xA9,0x45,0x00,0x0C,
88538 -0x01,0x00,0x06,0x24,
88539 -0x00,0x0D,0x04,0x24,
88540 -0x00,0x40,0x05,0x3C,
88541 -0x21,0x30,0x00,0x00,
88542 -0xA9,0x45,0x00,0x0C,
88543 -0x00,0x00,0x00,0x00,
88544 -0x14,0x00,0xBF,0x8F,
88545 -0x10,0x00,0xB0,0x8F,
88546 -0x08,0x00,0xE0,0x03,
88547 -0x18,0x00,0xBD,0x27,
88548 -0xA9,0x45,0x00,0x0C,
88549 -0x00,0x00,0x00,0x00,
88550 -0x00,0x0D,0x04,0x24,
88551 -0x00,0x20,0x05,0x3C,
88552 -0xA9,0x45,0x00,0x0C,
88553 -0x21,0x30,0x00,0x00,
88554 -0x00,0x40,0x05,0x3C,
88555 -0x21,0x30,0x00,0x00,
88556 -0xA9,0x45,0x00,0x0C,
88557 -0x00,0x0D,0x04,0x24,
88558 -0x54,0x22,0x00,0x0C,
88559 -0x10,0x27,0x04,0x24,
88560 -0x00,0x0F,0x04,0x24,
88561 -0x00,0x01,0x05,0x24,
88562 -0xA9,0x45,0x00,0x0C,
88563 -0x21,0x30,0x00,0x00,
88564 -0x00,0x0F,0x04,0x24,
88565 -0x00,0x01,0x05,0x24,
88566 -0xA9,0x45,0x00,0x0C,
88567 -0x01,0x00,0x06,0x24,
88568 -0x14,0x00,0xBF,0x8F,
88569 -0x10,0x00,0xB0,0x8F,
88570 -0x08,0x00,0xE0,0x03,
88571 -0x18,0x00,0xBD,0x27,
88572 -0xA9,0x45,0x00,0x0C,
88573 -0x00,0x00,0x00,0x00,
88574 -0x00,0x0A,0x04,0x24,
88575 -0x03,0x00,0x05,0x24,
88576 -0xA9,0x45,0x00,0x0C,
88577 -0x21,0x30,0x00,0x00,
88578 -0x00,0x0A,0x04,0x24,
88579 -0x08,0x00,0x05,0x24,
88580 -0xA9,0x45,0x00,0x0C,
88581 -0x01,0x00,0x06,0x24,
88582 -0x00,0x0D,0x04,0x24,
88583 -0x00,0x10,0x05,0x3C,
88584 -0xA9,0x45,0x00,0x0C,
88585 -0x21,0x30,0x00,0x00,
88586 -0x00,0x0D,0x04,0x24,
88587 -0x00,0x20,0x05,0x3C,
88588 -0xA9,0x45,0x00,0x0C,
88589 -0x01,0x00,0x06,0x24,
88590 -0x00,0x0D,0x04,0x24,
88591 -0x00,0x40,0x05,0x3C,
88592 -0x3E,0x43,0x00,0x08,
88593 -0x21,0x30,0x00,0x00,
88594 -0xE0,0xFF,0xBD,0x27,
88595 -0x10,0x00,0xB0,0xAF,
88596 -0x21,0x80,0x80,0x00,
88597 -0x02,0x80,0x04,0x3C,
88598 -0x18,0x00,0xB2,0xAF,
88599 -0x14,0x00,0xB1,0xAF,
88600 -0x1C,0x00,0xBF,0xAF,
88601 -0x2F,0x55,0x00,0x0C,
88602 -0x08,0xD8,0x84,0x24,
88603 -0x00,0x00,0x02,0x92,
88604 -0x0F,0x00,0x12,0x3C,
88605 -0x0F,0x00,0x11,0x3C,
88606 -0x00,0x08,0x04,0x24,
88607 -0x00,0x01,0x05,0x3C,
88608 -0x20,0x00,0x40,0x10,
88609 -0x21,0x30,0x00,0x00,
88610 -0xA9,0x45,0x00,0x0C,
88611 -0x00,0x00,0x00,0x00,
88612 -0x00,0x02,0x05,0x3C,
88613 -0x21,0x30,0x00,0x00,
88614 -0xA9,0x45,0x00,0x0C,
88615 -0x00,0x08,0x04,0x24,
88616 -0x01,0x00,0x04,0x92,
88617 -0xE6,0x44,0x00,0x0C,
88618 -0x00,0x00,0x00,0x00,
88619 -0x0D,0x00,0x06,0x3C,
88620 -0xFF,0xFF,0x45,0x36,
88621 -0x00,0x40,0xC6,0x34,
88622 -0x5F,0x47,0x00,0x0C,
88623 -0x21,0x00,0x04,0x24,
88624 -0x54,0x22,0x00,0x0C,
88625 -0x64,0x00,0x04,0x24,
88626 -0xE6,0x44,0x00,0x0C,
88627 -0x21,0x20,0x00,0x00,
88628 -0x02,0x00,0x06,0x3C,
88629 -0xFF,0xFF,0x45,0x36,
88630 -0x1F,0x00,0xC6,0x34,
88631 -0x5F,0x47,0x00,0x0C,
88632 -0x21,0x20,0x00,0x00,
88633 -0x54,0x22,0x00,0x0C,
88634 -0x64,0x00,0x04,0x24,
88635 -0x1C,0x00,0xBF,0x8F,
88636 -0x18,0x00,0xB2,0x8F,
88637 -0x14,0x00,0xB1,0x8F,
88638 -0x10,0x00,0xB0,0x8F,
88639 -0x08,0x00,0xE0,0x03,
88640 -0x20,0x00,0xBD,0x27,
88641 -0xA9,0x45,0x00,0x0C,
88642 -0x01,0x00,0x06,0x24,
88643 -0x00,0x02,0x05,0x3C,
88644 -0x01,0x00,0x06,0x24,
88645 -0xA9,0x45,0x00,0x0C,
88646 -0x00,0x08,0x04,0x24,
88647 -0x01,0x00,0x04,0x92,
88648 -0xE6,0x44,0x00,0x0C,
88649 -0x00,0x00,0x00,0x00,
88650 -0x05,0x00,0x06,0x3C,
88651 -0xFF,0xFF,0x25,0x36,
88652 -0x00,0x40,0xC6,0x34,
88653 -0x5F,0x47,0x00,0x0C,
88654 -0x21,0x00,0x04,0x24,
88655 -0x54,0x22,0x00,0x0C,
88656 -0x64,0x00,0x04,0x24,
88657 -0xFF,0xFF,0x25,0x36,
88658 -0x21,0x20,0x00,0x00,
88659 -0x5F,0x47,0x00,0x0C,
88660 -0x03,0x00,0x06,0x3C,
88661 -0x54,0x22,0x00,0x0C,
88662 -0x64,0x00,0x04,0x24,
88663 -0x1C,0x00,0xBF,0x8F,
88664 -0x18,0x00,0xB2,0x8F,
88665 -0x14,0x00,0xB1,0x8F,
88666 -0x10,0x00,0xB0,0x8F,
88667 -0x08,0x00,0xE0,0x03,
88668 -0x20,0x00,0xBD,0x27,
88669 -0xE8,0xFF,0xBD,0x27,
88670 -0x10,0x00,0xB0,0xAF,
88671 -0x21,0x80,0x80,0x00,
88672 -0x02,0x80,0x04,0x3C,
88673 -0x14,0x00,0xBF,0xAF,
88674 -0x2F,0x55,0x00,0x0C,
88675 -0x20,0xD8,0x84,0x24,
88676 -0x00,0x00,0x02,0x92,
88677 -0x00,0x00,0x00,0x00,
88678 -0x0A,0x00,0x40,0x10,
88679 -0x00,0x0A,0x04,0x24,
88680 -0x04,0x00,0x02,0x8E,
88681 -0x00,0x08,0x04,0x24,
88682 -0x04,0x00,0x42,0x2C,
88683 -0x1C,0x00,0x40,0x14,
88684 -0x00,0x01,0x05,0x3C,
88685 -0x14,0x00,0xBF,0x8F,
88686 -0x10,0x00,0xB0,0x8F,
88687 -0x08,0x00,0xE0,0x03,
88688 -0x18,0x00,0xBD,0x27,
88689 -0x04,0x00,0x02,0x8E,
88690 -0x03,0x00,0x05,0x24,
88691 -0x04,0x00,0x42,0x2C,
88692 -0xF8,0xFF,0x40,0x10,
88693 -0x21,0x30,0x00,0x00,
88694 -0xA9,0x45,0x00,0x0C,
88695 -0x00,0x00,0x00,0x00,
88696 -0x00,0x0A,0x04,0x24,
88697 -0x08,0x00,0x05,0x24,
88698 -0xA9,0x45,0x00,0x0C,
88699 -0x01,0x00,0x06,0x24,
88700 -0x00,0x0F,0x04,0x24,
88701 -0x00,0x01,0x05,0x24,
88702 -0xA9,0x45,0x00,0x0C,
88703 -0x21,0x30,0x00,0x00,
88704 -0x00,0x0F,0x04,0x24,
88705 -0x00,0x01,0x05,0x24,
88706 -0xA9,0x45,0x00,0x0C,
88707 -0x01,0x00,0x06,0x24,
88708 -0x14,0x00,0xBF,0x8F,
88709 -0x10,0x00,0xB0,0x8F,
88710 -0x08,0x00,0xE0,0x03,
88711 -0x18,0x00,0xBD,0x27,
88712 -0xCB,0x45,0x00,0x0C,
88713 -0x00,0x00,0x00,0x00,
88714 -0x00,0x08,0x04,0x24,
88715 -0x00,0x01,0x05,0x3C,
88716 -0x1B,0x00,0x40,0x10,
88717 -0x01,0x00,0x06,0x24,
88718 -0x00,0x0D,0x04,0x24,
88719 -0x00,0x10,0x05,0x3C,
88720 -0xA9,0x45,0x00,0x0C,
88721 -0x21,0x30,0x00,0x00,
88722 -0x00,0x0D,0x04,0x24,
88723 -0x00,0x20,0x05,0x3C,
88724 -0xA9,0x45,0x00,0x0C,
88725 -0x21,0x30,0x00,0x00,
88726 -0x00,0x0D,0x04,0x24,
88727 -0x00,0x40,0x05,0x3C,
88728 -0xA9,0x45,0x00,0x0C,
88729 -0x21,0x30,0x00,0x00,
88730 -0x00,0x0A,0x04,0x24,
88731 -0x03,0x00,0x05,0x24,
88732 -0xA9,0x45,0x00,0x0C,
88733 -0x02,0x00,0x06,0x24,
88734 -0x00,0x0A,0x04,0x24,
88735 -0x08,0x00,0x05,0x24,
88736 -0xA9,0x45,0x00,0x0C,
88737 -0x21,0x30,0x00,0x00,
88738 -0x00,0x0A,0x04,0x24,
88739 -0x00,0x30,0x05,0x24,
88740 -0xA9,0x45,0x00,0x0C,
88741 -0x21,0x30,0x00,0x00,
88742 -0xE4,0x43,0x00,0x08,
88743 -0x00,0x00,0x00,0x00,
88744 -0xA9,0x45,0x00,0x0C,
88745 -0x00,0x00,0x00,0x00,
88746 -0xEF,0x43,0x00,0x08,
88747 -0x00,0x0D,0x04,0x24,
88748 -0xE8,0xFF,0xBD,0x27,
88749 -0x10,0x00,0xB0,0xAF,
88750 -0x21,0x80,0x80,0x00,
88751 -0x02,0x80,0x04,0x3C,
88752 -0x14,0x00,0xBF,0xAF,
88753 -0x2F,0x55,0x00,0x0C,
88754 -0x40,0xD8,0x84,0x24,
88755 -0x04,0x00,0x03,0x8E,
88756 -0x00,0x00,0x00,0x00,
88757 -0x04,0x00,0x62,0x2C,
88758 -0x2C,0x00,0x40,0x14,
88759 -0xFC,0xFF,0x62,0x24,
88760 -0x18,0x00,0x42,0x2C,
88761 -0x05,0x00,0x40,0x14,
88762 -0x00,0x00,0x00,0x00,
88763 -0x14,0x00,0xBF,0x8F,
88764 -0x10,0x00,0xB0,0x8F,
88765 -0x08,0x00,0xE0,0x03,
88766 -0x18,0x00,0xBD,0x27,
88767 -0x02,0x80,0x04,0x3C,
88768 -0x2F,0x55,0x00,0x0C,
88769 -0x6C,0xD8,0x84,0x24,
88770 -0x00,0x00,0x02,0x92,
88771 -0x00,0x00,0x00,0x00,
88772 -0x54,0x00,0x40,0x10,
88773 -0x00,0x0D,0x04,0x24,
88774 -0x00,0x08,0x04,0x24,
88775 -0xCB,0x45,0x00,0x0C,
88776 -0x00,0x02,0x05,0x3C,
88777 -0x63,0x00,0x40,0x10,
88778 -0x00,0x08,0x04,0x24,
88779 -0x00,0x0A,0x04,0x24,
88780 -0x03,0x00,0x05,0x24,
88781 -0xA9,0x45,0x00,0x0C,
88782 -0x21,0x30,0x00,0x00,
88783 -0x00,0x0A,0x04,0x24,
88784 -0x08,0x00,0x05,0x24,
88785 -0xA9,0x45,0x00,0x0C,
88786 -0x01,0x00,0x06,0x24,
88787 -0x00,0x0D,0x04,0x24,
88788 -0x00,0x10,0x05,0x3C,
88789 -0xA9,0x45,0x00,0x0C,
88790 -0x01,0x00,0x06,0x24,
88791 -0x00,0x0D,0x04,0x24,
88792 -0x00,0x20,0x05,0x3C,
88793 -0xA9,0x45,0x00,0x0C,
88794 -0x21,0x30,0x00,0x00,
88795 -0x00,0x0D,0x04,0x24,
88796 -0x00,0x40,0x05,0x3C,
88797 -0xA9,0x45,0x00,0x0C,
88798 -0x21,0x30,0x00,0x00,
88799 -0x14,0x00,0xBF,0x8F,
88800 -0x10,0x00,0xB0,0x8F,
88801 -0x08,0x00,0xE0,0x03,
88802 -0x18,0x00,0xBD,0x27,
88803 -0x02,0x80,0x04,0x3C,
88804 -0x2F,0x55,0x00,0x0C,
88805 -0x58,0xD8,0x84,0x24,
88806 -0x00,0x00,0x02,0x92,
88807 -0x00,0x00,0x00,0x00,
88808 -0x21,0x00,0x40,0x10,
88809 -0x00,0x0A,0x04,0x24,
88810 -0x00,0x08,0x04,0x24,
88811 -0xCB,0x45,0x00,0x0C,
88812 -0x00,0x01,0x05,0x3C,
88813 -0x3A,0x00,0x40,0x10,
88814 -0x00,0x08,0x04,0x24,
88815 -0x00,0x0D,0x04,0x24,
88816 -0x00,0x10,0x05,0x3C,
88817 -0xA9,0x45,0x00,0x0C,
88818 -0x21,0x30,0x00,0x00,
88819 -0x00,0x0D,0x04,0x24,
88820 -0x00,0x20,0x05,0x3C,
88821 -0xA9,0x45,0x00,0x0C,
88822 -0x21,0x30,0x00,0x00,
88823 -0x00,0x0D,0x04,0x24,
88824 -0x00,0x40,0x05,0x3C,
88825 -0xA9,0x45,0x00,0x0C,
88826 -0x21,0x30,0x00,0x00,
88827 -0x04,0x00,0x06,0x8E,
88828 -0x00,0x0A,0x04,0x24,
88829 -0xA9,0x45,0x00,0x0C,
88830 -0x00,0x30,0x05,0x24,
88831 -0x00,0x0A,0x04,0x24,
88832 -0x03,0x00,0x05,0x24,
88833 -0xA9,0x45,0x00,0x0C,
88834 -0x02,0x00,0x06,0x24,
88835 -0x00,0x0A,0x04,0x24,
88836 -0x08,0x00,0x05,0x24,
88837 -0x01,0x00,0x06,0x24,
88838 -0xA9,0x45,0x00,0x0C,
88839 -0x00,0x00,0x00,0x00,
88840 -0x3F,0x44,0x00,0x08,
88841 -0x00,0x00,0x00,0x00,
88842 -0x03,0x00,0x05,0x24,
88843 -0xA9,0x45,0x00,0x0C,
88844 -0x21,0x30,0x00,0x00,
88845 -0x00,0x0A,0x04,0x24,
88846 -0x08,0x00,0x05,0x24,
88847 -0xA9,0x45,0x00,0x0C,
88848 -0x01,0x00,0x06,0x24,
88849 -0x00,0x0F,0x04,0x24,
88850 -0x00,0x01,0x05,0x24,
88851 -0xA9,0x45,0x00,0x0C,
88852 -0x21,0x30,0x00,0x00,
88853 -0x00,0x0F,0x04,0x24,
88854 -0x00,0x01,0x05,0x24,
88855 -0x66,0x44,0x00,0x08,
88856 -0x01,0x00,0x06,0x24,
88857 -0x00,0x10,0x05,0x3C,
88858 -0xA9,0x45,0x00,0x0C,
88859 -0x21,0x30,0x00,0x00,
88860 -0x00,0x0D,0x04,0x24,
88861 -0x00,0x20,0x05,0x3C,
88862 -0xA9,0x45,0x00,0x0C,
88863 -0x21,0x30,0x00,0x00,
88864 -0x00,0x40,0x05,0x3C,
88865 -0x21,0x30,0x00,0x00,
88866 -0xA9,0x45,0x00,0x0C,
88867 -0x00,0x0D,0x04,0x24,
88868 -0x54,0x22,0x00,0x0C,
88869 -0x10,0x27,0x04,0x24,
88870 -0x72,0x44,0x00,0x08,
88871 -0x00,0x0F,0x04,0x24,
88872 -0x00,0x01,0x05,0x3C,
88873 -0xA9,0x45,0x00,0x0C,
88874 -0x01,0x00,0x06,0x24,
88875 -0x50,0x44,0x00,0x08,
88876 -0x00,0x0D,0x04,0x24,
88877 -0x00,0x02,0x05,0x3C,
88878 -0xA9,0x45,0x00,0x0C,
88879 -0x01,0x00,0x06,0x24,
88880 -0x2C,0x44,0x00,0x08,
88881 -0x00,0x0A,0x04,0x24,
88882 -0xE8,0xFF,0xBD,0x27,
88883 -0x25,0xB0,0x02,0x3C,
88884 -0x14,0x00,0xBF,0xAF,
88885 -0x10,0x00,0xB0,0xAF,
88886 -0x03,0x02,0x42,0x34,
88887 -0x00,0x00,0x43,0x90,
88888 -0x00,0x00,0x90,0x90,
88889 -0x25,0xB0,0x02,0x3C,
88890 -0xFF,0x00,0x63,0x30,
88891 -0xFB,0x00,0x65,0x30,
88892 -0x00,0x00,0x04,0x3A,
88893 -0x04,0x00,0x63,0x34,
88894 -0x0B,0x18,0xA4,0x00,
88895 -0x03,0x02,0x42,0x34,
88896 -0x00,0x00,0x43,0xA0,
88897 -0x12,0x00,0x00,0x12,
88898 -0x01,0x00,0x02,0x24,
88899 -0x22,0x00,0x02,0x12,
88900 -0x00,0x08,0x04,0x24,
88901 -0x1A,0x00,0x00,0x12,
88902 -0x01,0x00,0x02,0x24,
88903 -0x08,0x00,0x02,0x16,
88904 -0x00,0x00,0x00,0x00,
88905 -0xE6,0x44,0x00,0x0C,
88906 -0x21,0x20,0x00,0x00,
88907 -0x18,0x00,0x04,0x24,
88908 -0x00,0x0C,0x05,0x24,
88909 -0x21,0x30,0x00,0x00,
88910 -0x5F,0x47,0x00,0x0C,
88911 -0x00,0x00,0x00,0x00,
88912 -0x14,0x00,0xBF,0x8F,
88913 -0x10,0x00,0xB0,0x8F,
88914 -0x08,0x00,0xE0,0x03,
88915 -0x18,0x00,0xBD,0x27,
88916 -0x00,0x08,0x04,0x24,
88917 -0x01,0x00,0x05,0x24,
88918 -0xA9,0x45,0x00,0x0C,
88919 -0x21,0x30,0x00,0x00,
88920 -0x00,0x09,0x04,0x24,
88921 -0x01,0x00,0x05,0x24,
88922 -0xA9,0x45,0x00,0x0C,
88923 -0x21,0x30,0x00,0x00,
88924 -0x84,0x08,0x04,0x24,
88925 -0xFF,0xFF,0x05,0x24,
88926 -0xA9,0x45,0x00,0x0C,
88927 -0x58,0x00,0x06,0x24,
88928 -0xE6,0x44,0x00,0x0C,
88929 -0x21,0x20,0x00,0x00,
88930 -0x18,0x00,0x04,0x24,
88931 -0x00,0x0C,0x05,0x24,
88932 -0xAE,0x44,0x00,0x08,
88933 -0x01,0x00,0x06,0x24,
88934 -0x01,0x00,0x05,0x24,
88935 -0xA9,0x45,0x00,0x0C,
88936 -0x01,0x00,0x06,0x24,
88937 -0x00,0x09,0x04,0x24,
88938 -0x01,0x00,0x05,0x24,
88939 -0xA9,0x45,0x00,0x0C,
88940 -0x01,0x00,0x06,0x24,
88941 -0x00,0x0A,0x04,0x24,
88942 -0x10,0x00,0x05,0x24,
88943 -0xA9,0x45,0x00,0x0C,
88944 -0x21,0x30,0x00,0x00,
88945 -0x00,0x0D,0x04,0x24,
88946 -0x00,0x0C,0x05,0x24,
88947 -0xA9,0x45,0x00,0x0C,
88948 -0x21,0x30,0x00,0x00,
88949 -0x84,0x08,0x04,0x24,
88950 -0xFF,0xFF,0x05,0x24,
88951 -0xA9,0x45,0x00,0x0C,
88952 -0x18,0x00,0x06,0x24,
88953 -0xA5,0x44,0x00,0x08,
88954 -0x00,0x00,0x00,0x00,
88955 -0x25,0xB0,0x02,0x3C,
88956 -0x21,0x20,0x82,0x00,
88957 -0x00,0x00,0x85,0xAC,
88958 -0x21,0x10,0x00,0x00,
88959 -0x01,0x00,0x42,0x24,
88960 -0xFF,0x00,0x42,0x30,
88961 -0x06,0x00,0x43,0x2C,
88962 -0xFC,0xFF,0x60,0x14,
88963 -0x00,0x00,0x00,0x00,
88964 -0x08,0x00,0xE0,0x03,
88965 -0x00,0x00,0x00,0x00,
88966 -0x25,0xB0,0x05,0x3C,
88967 -0x01,0x80,0x03,0x3C,
88968 -0x21,0x38,0x80,0x00,
88969 -0x18,0x03,0xA2,0x34,
88970 -0x98,0x13,0x63,0x24,
88971 -0x01,0x00,0x04,0x24,
88972 -0x00,0x00,0x43,0xAC,
88973 -0x35,0x00,0xE4,0x10,
88974 -0x00,0x00,0x00,0x00,
88975 -0x08,0x00,0xE0,0x10,
88976 -0x20,0x08,0xA2,0x34,
88977 -0x02,0x00,0x02,0x24,
88978 -0x83,0x00,0xE2,0x10,
88979 -0x03,0x00,0x02,0x24,
88980 -0x5A,0x00,0xE2,0x10,
88981 -0x00,0x00,0x00,0x00,
88982 -0x08,0x00,0xE0,0x03,
88983 -0x00,0x00,0x00,0x00,
88984 -0x02,0x80,0x03,0x3C,
88985 -0x00,0x00,0x44,0x8C,
88986 -0x30,0x1F,0x66,0x24,
88987 -0x70,0x08,0x02,0x24,
88988 -0xE0,0x08,0x03,0x24,
88989 -0x34,0x1C,0xC2,0xAC,
88990 -0x40,0x08,0x02,0x24,
88991 -0x38,0x1C,0xC3,0xAC,
88992 -0x44,0x1C,0xC2,0xAC,
88993 -0x78,0x08,0x03,0x24,
88994 -0x0C,0x08,0x02,0x24,
88995 -0x48,0x1C,0xC3,0xAC,
88996 -0x4C,0x1C,0xC2,0xAC,
88997 -0x10,0x08,0x03,0x24,
88998 -0x20,0x08,0x02,0x24,
88999 -0x50,0x1C,0xC3,0xAC,
89000 -0x54,0x1C,0xC2,0xAC,
89001 -0x24,0x08,0x03,0x24,
89002 -0x58,0x08,0x02,0x24,
89003 -0x58,0x1C,0xC3,0xAC,
89004 -0x5C,0x1C,0xC2,0xAC,
89005 -0x50,0x0C,0x03,0x24,
89006 -0x54,0x0C,0x02,0x24,
89007 -0x60,0x1C,0xC3,0xAC,
89008 -0x64,0x1C,0xC2,0xAC,
89009 -0x14,0x0C,0x03,0x24,
89010 -0x10,0x0C,0x02,0x24,
89011 -0x60,0x08,0x05,0x24,
89012 -0x68,0x1C,0xC3,0xAC,
89013 -0x6C,0x1C,0xC2,0xAC,
89014 -0x80,0x0C,0x03,0x24,
89015 -0x84,0x0C,0x02,0x24,
89016 -0x00,0x01,0x84,0x30,
89017 -0x74,0x1C,0xC2,0xAC,
89018 -0x40,0x1C,0xC5,0xAC,
89019 -0x70,0x1C,0xC3,0xAC,
89020 -0x31,0x1C,0xC0,0xA0,
89021 -0x3C,0x1C,0xC5,0xAC,
89022 -0x02,0x00,0x80,0x10,
89023 -0xA0,0x08,0x02,0x24,
89024 -0xB8,0x08,0x02,0x24,
89025 -0x08,0x00,0xE0,0x03,
89026 -0x78,0x1C,0xC2,0xAC,
89027 -0x28,0x08,0xA2,0x34,
89028 -0x02,0x80,0x03,0x3C,
89029 -0x00,0x00,0x44,0x8C,
89030 -0x30,0x1F,0x66,0x24,
89031 -0x70,0x08,0x02,0x24,
89032 -0xE0,0x08,0x03,0x24,
89033 -0x34,0x1C,0xC2,0xAC,
89034 -0x44,0x08,0x02,0x24,
89035 -0x38,0x1C,0xC3,0xAC,
89036 -0x44,0x1C,0xC2,0xAC,
89037 -0x78,0x08,0x03,0x24,
89038 -0x0C,0x08,0x02,0x24,
89039 -0x48,0x1C,0xC3,0xAC,
89040 -0x4C,0x1C,0xC2,0xAC,
89041 -0x14,0x08,0x03,0x24,
89042 -0x28,0x08,0x02,0x24,
89043 -0x50,0x1C,0xC3,0xAC,
89044 -0x54,0x1C,0xC2,0xAC,
89045 -0x2C,0x08,0x03,0x24,
89046 -0x58,0x08,0x02,0x24,
89047 -0x58,0x1C,0xC3,0xAC,
89048 -0x5C,0x1C,0xC2,0xAC,
89049 -0x58,0x0C,0x03,0x24,
89050 -0x5C,0x0C,0x02,0x24,
89051 -0x60,0x1C,0xC3,0xAC,
89052 -0x64,0x1C,0xC2,0xAC,
89053 -0x1C,0x0C,0x03,0x24,
89054 -0x18,0x0C,0x02,0x24,
89055 -0x64,0x08,0x05,0x24,
89056 -0x68,0x1C,0xC3,0xAC,
89057 -0x6C,0x1C,0xC2,0xAC,
89058 -0x88,0x0C,0x03,0x24,
89059 -0x8C,0x0C,0x02,0x24,
89060 -0x00,0x01,0x84,0x30,
89061 -0x74,0x1C,0xC2,0xAC,
89062 -0x31,0x1C,0xC7,0xA0,
89063 -0x40,0x1C,0xC5,0xAC,
89064 -0x70,0x1C,0xC3,0xAC,
89065 -0x3C,0x1C,0xC5,0xAC,
89066 -0xD6,0xFF,0x80,0x10,
89067 -0xA4,0x08,0x02,0x24,
89068 -0xBC,0x08,0x02,0x24,
89069 -0x08,0x00,0xE0,0x03,
89070 -0x78,0x1C,0xC2,0xAC,
89071 -0x02,0x80,0x02,0x3C,
89072 -0x30,0x1F,0x42,0x24,
89073 -0xAC,0x08,0x03,0x24,
89074 -0x78,0x1C,0x43,0xAC,
89075 -0x74,0x08,0x03,0x24,
89076 -0xE4,0x08,0x04,0x24,
89077 -0x34,0x1C,0x43,0xAC,
89078 -0x4C,0x08,0x03,0x24,
89079 -0x38,0x1C,0x44,0xAC,
89080 -0x44,0x1C,0x43,0xAC,
89081 -0x7C,0x08,0x04,0x24,
89082 -0x0C,0x08,0x03,0x24,
89083 -0x48,0x1C,0x44,0xAC,
89084 -0x4C,0x1C,0x43,0xAC,
89085 -0x1C,0x08,0x04,0x24,
89086 -0x38,0x08,0x03,0x24,
89087 -0x50,0x1C,0x44,0xAC,
89088 -0x54,0x1C,0x43,0xAC,
89089 -0x3C,0x08,0x04,0x24,
89090 -0x5C,0x08,0x03,0x24,
89091 -0x58,0x1C,0x44,0xAC,
89092 -0x5C,0x1C,0x43,0xAC,
89093 -0x68,0x0C,0x04,0x24,
89094 -0x6C,0x0C,0x03,0x24,
89095 -0x60,0x1C,0x44,0xAC,
89096 -0x64,0x1C,0x43,0xAC,
89097 -0x2C,0x0C,0x04,0x24,
89098 -0x28,0x0C,0x03,0x24,
89099 -0x6C,0x08,0x05,0x24,
89100 -0x68,0x1C,0x44,0xAC,
89101 -0x6C,0x1C,0x43,0xAC,
89102 -0x98,0x0C,0x04,0x24,
89103 -0x9C,0x0C,0x03,0x24,
89104 -0x31,0x1C,0x47,0xA0,
89105 -0x40,0x1C,0x45,0xAC,
89106 -0x70,0x1C,0x44,0xAC,
89107 -0x74,0x1C,0x43,0xAC,
89108 -0x08,0x00,0xE0,0x03,
89109 -0x3C,0x1C,0x45,0xAC,
89110 -0x02,0x80,0x02,0x3C,
89111 -0x30,0x1F,0x42,0x24,
89112 -0xA8,0x08,0x03,0x24,
89113 -0x78,0x1C,0x43,0xAC,
89114 -0x74,0x08,0x03,0x24,
89115 -0xE4,0x08,0x04,0x24,
89116 -0x34,0x1C,0x43,0xAC,
89117 -0x48,0x08,0x03,0x24,
89118 -0x38,0x1C,0x44,0xAC,
89119 -0x44,0x1C,0x43,0xAC,
89120 -0x7C,0x08,0x04,0x24,
89121 -0x0C,0x08,0x03,0x24,
89122 -0x48,0x1C,0x44,0xAC,
89123 -0x4C,0x1C,0x43,0xAC,
89124 -0x18,0x08,0x04,0x24,
89125 -0x30,0x08,0x03,0x24,
89126 -0x50,0x1C,0x44,0xAC,
89127 -0x54,0x1C,0x43,0xAC,
89128 -0x34,0x08,0x04,0x24,
89129 -0x5C,0x08,0x03,0x24,
89130 -0x58,0x1C,0x44,0xAC,
89131 -0x5C,0x1C,0x43,0xAC,
89132 -0x60,0x0C,0x04,0x24,
89133 -0x64,0x0C,0x03,0x24,
89134 -0x60,0x1C,0x44,0xAC,
89135 -0x64,0x1C,0x43,0xAC,
89136 -0x24,0x0C,0x04,0x24,
89137 -0x20,0x0C,0x03,0x24,
89138 -0x68,0x08,0x05,0x24,
89139 -0x68,0x1C,0x44,0xAC,
89140 -0x6C,0x1C,0x43,0xAC,
89141 -0x90,0x0C,0x04,0x24,
89142 -0x94,0x0C,0x03,0x24,
89143 -0x31,0x1C,0x47,0xA0,
89144 -0x40,0x1C,0x45,0xAC,
89145 -0x70,0x1C,0x44,0xAC,
89146 -0x74,0x1C,0x43,0xAC,
89147 -0x08,0x00,0xE0,0x03,
89148 -0x3C,0x1C,0x45,0xAC,
89149 -0xA2,0x45,0x00,0x08,
89150 -0x21,0x18,0x00,0x00,
89151 -0x20,0x00,0x62,0x2C,
89152 -0x06,0x00,0x40,0x10,
89153 -0x00,0x00,0x00,0x00,
89154 -0x06,0x10,0x64,0x00,
89155 -0x01,0x00,0x42,0x30,
89156 -0xFA,0xFF,0x40,0x10,
89157 -0x01,0x00,0x63,0x24,
89158 -0xFF,0xFF,0x63,0x24,
89159 -0x08,0x00,0xE0,0x03,
89160 -0x21,0x10,0x60,0x00,
89161 -0xD8,0xFF,0xBD,0x27,
89162 -0x14,0x00,0xB1,0xAF,
89163 -0x25,0xB0,0x02,0x3C,
89164 -0x21,0x88,0xA0,0x00,
89165 -0xFF,0xFF,0x03,0x24,
89166 -0x1C,0x00,0xB3,0xAF,
89167 -0x18,0x00,0xB2,0xAF,
89168 -0x10,0x00,0xB0,0xAF,
89169 -0x20,0x00,0xBF,0xAF,
89170 -0x21,0x98,0xC0,0x00,
89171 -0x21,0x28,0xC0,0x00,
89172 -0x21,0x90,0x80,0x00,
89173 -0x09,0x00,0x23,0x12,
89174 -0x21,0x80,0x82,0x00,
89175 -0x00,0x00,0x10,0x8E,
89176 -0x9D,0x45,0x00,0x0C,
89177 -0x21,0x20,0x20,0x02,
89178 -0x27,0x28,0x11,0x00,
89179 -0x24,0x28,0xB0,0x00,
89180 -0x04,0x10,0x53,0x00,
89181 -0x25,0x28,0xA2,0x00,
89182 -0x21,0x20,0x40,0x02,
89183 -0x20,0x00,0xBF,0x8F,
89184 -0x1C,0x00,0xB3,0x8F,
89185 -0x18,0x00,0xB2,0x8F,
89186 -0x14,0x00,0xB1,0x8F,
89187 -0x10,0x00,0xB0,0x8F,
89188 -0xDB,0x44,0x00,0x08,
89189 -0x28,0x00,0xBD,0x27,
89190 -0x02,0x80,0x02,0x3C,
89191 -0x21,0x30,0x80,0x00,
89192 -0x74,0x3B,0x44,0x8C,
89193 -0xA9,0x45,0x00,0x08,
89194 -0xFF,0xFF,0x05,0x24,
89195 -0xE0,0xFF,0xBD,0x27,
89196 -0x25,0xB0,0x02,0x3C,
89197 -0x18,0x00,0xBF,0xAF,
89198 -0x14,0x00,0xB1,0xAF,
89199 -0x10,0x00,0xB0,0xAF,
89200 -0x21,0x20,0x82,0x00,
89201 -0x00,0x00,0x90,0x8C,
89202 -0x21,0x88,0xA0,0x00,
89203 -0x9D,0x45,0x00,0x0C,
89204 -0x21,0x20,0xA0,0x00,
89205 -0x24,0x80,0x11,0x02,
89206 -0x06,0x10,0x50,0x00,
89207 -0x18,0x00,0xBF,0x8F,
89208 -0x14,0x00,0xB1,0x8F,
89209 -0x10,0x00,0xB0,0x8F,
89210 -0x08,0x00,0xE0,0x03,
89211 -0x20,0x00,0xBD,0x27,
89212 -0xD8,0xFF,0xBD,0x27,
89213 -0x14,0x00,0xB1,0xAF,
89214 -0x02,0x80,0x11,0x3C,
89215 -0x20,0x00,0xBF,0xAF,
89216 -0x18,0x00,0xB2,0xAF,
89217 -0x1C,0x00,0xB3,0xAF,
89218 -0x10,0x00,0xB0,0xAF,
89219 -0x30,0x1F,0x31,0x26,
89220 -0x58,0x1C,0x23,0x8E,
89221 -0x25,0xB0,0x02,0x3C,
89222 -0x24,0x08,0x53,0x8C,
89223 -0x21,0x18,0x62,0x00,
89224 -0x00,0x00,0x70,0x8C,
89225 -0x7F,0x80,0x02,0x3C,
89226 -0xFF,0xFF,0x42,0x34,
89227 -0xFF,0x7F,0x05,0x3C,
89228 -0x24,0x80,0x02,0x02,
89229 -0xC0,0x25,0x04,0x00,
89230 -0xFF,0xFF,0xA5,0x34,
89231 -0x24,0x28,0x65,0x02,
89232 -0x25,0x80,0x04,0x02,
89233 -0xDB,0x44,0x00,0x0C,
89234 -0x24,0x08,0x04,0x24,
89235 -0x25,0x22,0x00,0x0C,
89236 -0x01,0x00,0x04,0x24,
89237 -0x00,0x80,0x12,0x3C,
89238 -0x58,0x1C,0x24,0x8E,
89239 -0x25,0x80,0x12,0x02,
89240 -0xDB,0x44,0x00,0x0C,
89241 -0x21,0x28,0x00,0x02,
89242 -0x25,0x22,0x00,0x0C,
89243 -0x01,0x00,0x04,0x24,
89244 -0x25,0x28,0x72,0x02,
89245 -0xDB,0x44,0x00,0x0C,
89246 -0x24,0x08,0x04,0x24,
89247 -0x25,0x22,0x00,0x0C,
89248 -0x01,0x00,0x04,0x24,
89249 -0x78,0x1C,0x24,0x8E,
89250 -0x0F,0x00,0x05,0x3C,
89251 -0x20,0x00,0xBF,0x8F,
89252 -0x1C,0x00,0xB3,0x8F,
89253 -0x18,0x00,0xB2,0x8F,
89254 -0x14,0x00,0xB1,0x8F,
89255 -0x10,0x00,0xB0,0x8F,
89256 -0xFF,0xFF,0xA5,0x34,
89257 -0xCB,0x45,0x00,0x08,
89258 -0x28,0x00,0xBD,0x27,
89259 -0xE0,0xFF,0xBD,0x27,
89260 -0x14,0x00,0xB1,0xAF,
89261 -0x02,0x80,0x11,0x3C,
89262 -0x10,0x00,0xB0,0xAF,
89263 -0x18,0x00,0xBF,0xAF,
89264 -0x30,0x1F,0x27,0x26,
89265 -0x33,0x1C,0xE5,0x90,
89266 -0x01,0x80,0x03,0x3C,
89267 -0x25,0xB0,0x02,0x3C,
89268 -0x2C,0x18,0x63,0x24,
89269 -0x18,0x03,0x42,0x34,
89270 -0x02,0x00,0x06,0x24,
89271 -0x00,0x00,0x43,0xAC,
89272 -0x34,0x00,0xA6,0x10,
89273 -0x21,0x80,0x80,0x00,
89274 -0x03,0x00,0x03,0x24,
89275 -0x3A,0x00,0xA3,0x10,
89276 -0x2E,0x00,0x02,0x2E,
89277 -0x10,0x00,0x02,0x2E,
89278 -0x07,0x00,0x40,0x10,
89279 -0x00,0x00,0x00,0x00,
89280 -0xFF,0x00,0x04,0x32,
89281 -0x18,0x00,0xBF,0x8F,
89282 -0x14,0x00,0xB1,0x8F,
89283 -0x10,0x00,0xB0,0x8F,
89284 -0xDC,0x45,0x00,0x08,
89285 -0x20,0x00,0xBD,0x27,
89286 -0xFA,0xFF,0xA6,0x14,
89287 -0xFF,0x00,0x04,0x32,
89288 -0x31,0x1C,0xE4,0x90,
89289 -0x01,0x00,0x02,0x24,
89290 -0x33,0x00,0x82,0x10,
89291 -0x02,0x00,0x82,0x28,
89292 -0x38,0x00,0x40,0x14,
89293 -0x00,0x00,0x00,0x00,
89294 -0x38,0x00,0x85,0x10,
89295 -0x30,0x1F,0x22,0x26,
89296 -0x2E,0x00,0x83,0x10,
89297 -0x00,0x00,0x00,0x00,
89298 -0x00,0x08,0x04,0x24,
89299 -0xCB,0x45,0x00,0x0C,
89300 -0xFF,0xFF,0x05,0x24,
89301 -0xFF,0xFC,0x06,0x3C,
89302 -0xFF,0xFF,0xC6,0x34,
89303 -0x24,0x30,0x46,0x00,
89304 -0x00,0x08,0x04,0x24,
89305 -0xA9,0x45,0x00,0x0C,
89306 -0xFF,0xFF,0x05,0x24,
89307 -0x30,0x1F,0x22,0x26,
89308 -0x31,0x1C,0x44,0x90,
89309 -0x01,0x00,0x03,0x24,
89310 -0x07,0x00,0x83,0x10,
89311 -0x02,0x00,0x82,0x28,
89312 -0x2C,0x00,0x40,0x14,
89313 -0x02,0x00,0x02,0x24,
89314 -0x2C,0x00,0x82,0x10,
89315 -0x03,0x00,0x02,0x24,
89316 -0xDB,0xFF,0x82,0x14,
89317 -0x00,0x00,0x00,0x00,
89318 -0x30,0x1F,0x22,0x26,
89319 -0x34,0x1C,0x44,0x8C,
89320 -0x0F,0x00,0x05,0x3C,
89321 -0xA9,0x45,0x00,0x0C,
89322 -0x21,0x30,0x00,0x00,
89323 -0x21,0x46,0x00,0x08,
89324 -0xFF,0x00,0x04,0x32,
89325 -0x25,0x00,0x82,0x2C,
89326 -0xCC,0xFF,0x40,0x14,
89327 -0x03,0x00,0x03,0x24,
89328 -0x18,0x00,0xBF,0x8F,
89329 -0x14,0x00,0xB1,0x8F,
89330 -0x10,0x00,0xB0,0x8F,
89331 -0x21,0x10,0x00,0x00,
89332 -0x08,0x00,0xE0,0x03,
89333 -0x20,0x00,0xBD,0x27,
89334 -0xC7,0xFF,0x40,0x14,
89335 -0x10,0x00,0x02,0x2E,
89336 -0x18,0x00,0xBF,0x8F,
89337 -0x14,0x00,0xB1,0x8F,
89338 -0x10,0x00,0xB0,0x8F,
89339 -0x21,0x10,0x00,0x00,
89340 -0x08,0x00,0xE0,0x03,
89341 -0x20,0x00,0xBD,0x27,
89342 -0x30,0x1F,0x22,0x26,
89343 -0x34,0x1C,0x44,0x8C,
89344 -0x0F,0x00,0x05,0x3C,
89345 -0xA9,0x45,0x00,0x0C,
89346 -0x0F,0x00,0x06,0x24,
89347 -0x33,0x46,0x00,0x08,
89348 -0x00,0x08,0x04,0x24,
89349 -0xCC,0xFF,0x80,0x14,
89350 -0x30,0x1F,0x22,0x26,
89351 -0x34,0x1C,0x44,0x8C,
89352 -0x0F,0x00,0x05,0x24,
89353 -0xA9,0x45,0x00,0x0C,
89354 -0x0F,0x00,0x06,0x24,
89355 -0x33,0x46,0x00,0x08,
89356 -0x00,0x08,0x04,0x24,
89357 -0xB2,0xFF,0x80,0x14,
89358 -0x00,0x00,0x00,0x00,
89359 -0x30,0x1F,0x22,0x26,
89360 -0x34,0x1C,0x44,0x8C,
89361 -0x0F,0x00,0x05,0x24,
89362 -0xA9,0x45,0x00,0x0C,
89363 -0x21,0x30,0x00,0x00,
89364 -0x21,0x46,0x00,0x08,
89365 -0xFF,0x00,0x04,0x32,
89366 -0xE0,0xFF,0xBD,0x27,
89367 -0x14,0x00,0xB1,0xAF,
89368 -0x02,0x80,0x11,0x3C,
89369 -0x30,0x1F,0x28,0x26,
89370 -0x33,0x1C,0x06,0x91,
89371 -0x01,0x80,0x03,0x3C,
89372 -0x25,0xB0,0x02,0x3C,
89373 -0xD8,0x19,0x63,0x24,
89374 -0x18,0x03,0x42,0x34,
89375 -0x02,0x00,0x07,0x24,
89376 -0x18,0x00,0xB2,0xAF,
89377 -0x10,0x00,0xB0,0xAF,
89378 -0x1C,0x00,0xBF,0xAF,
89379 -0x00,0x00,0x43,0xAC,
89380 -0x21,0x90,0xA0,0x00,
89381 -0x39,0x00,0xC7,0x10,
89382 -0xFF,0x00,0x90,0x30,
89383 -0x03,0x00,0x03,0x24,
89384 -0x3F,0x00,0xC3,0x10,
89385 -0x2E,0x00,0x02,0x2E,
89386 -0x10,0x00,0x02,0x2E,
89387 -0x0C,0x00,0x40,0x10,
89388 -0x00,0x00,0x00,0x00,
89389 -0x0F,0x00,0x04,0x3C,
89390 -0xFF,0xFF,0x84,0x34,
89391 -0x24,0x20,0x44,0x02,
89392 -0x00,0x15,0x10,0x00,
89393 -0x1C,0x00,0xBF,0x8F,
89394 -0x18,0x00,0xB2,0x8F,
89395 -0x14,0x00,0xB1,0x8F,
89396 -0x10,0x00,0xB0,0x8F,
89397 -0x25,0x20,0x44,0x00,
89398 -0xC6,0x45,0x00,0x08,
89399 -0x20,0x00,0xBD,0x27,
89400 -0xF5,0xFF,0xC7,0x14,
89401 -0x0F,0x00,0x04,0x3C,
89402 -0x31,0x1C,0x04,0x91,
89403 -0x01,0x00,0x02,0x24,
89404 -0x33,0x00,0x82,0x10,
89405 -0x02,0x00,0x82,0x28,
89406 -0x38,0x00,0x40,0x14,
89407 -0x00,0x00,0x00,0x00,
89408 -0x38,0x00,0x86,0x10,
89409 -0x30,0x1F,0x22,0x26,
89410 -0x2E,0x00,0x83,0x10,
89411 -0x00,0x00,0x00,0x00,
89412 -0x00,0x08,0x04,0x24,
89413 -0xCB,0x45,0x00,0x0C,
89414 -0xFF,0xFF,0x05,0x24,
89415 -0xFF,0xFC,0x06,0x3C,
89416 -0xFF,0xFF,0xC6,0x34,
89417 -0x24,0x30,0x46,0x00,
89418 -0x00,0x08,0x04,0x24,
89419 -0xA9,0x45,0x00,0x0C,
89420 -0xFF,0xFF,0x05,0x24,
89421 -0x30,0x1F,0x22,0x26,
89422 -0x31,0x1C,0x44,0x90,
89423 -0x01,0x00,0x03,0x24,
89424 -0x07,0x00,0x83,0x10,
89425 -0x02,0x00,0x82,0x28,
89426 -0x2C,0x00,0x40,0x14,
89427 -0x02,0x00,0x02,0x24,
89428 -0x2C,0x00,0x82,0x10,
89429 -0x03,0x00,0x02,0x24,
89430 -0xD6,0xFF,0x82,0x14,
89431 -0x00,0x00,0x00,0x00,
89432 -0x30,0x1F,0x22,0x26,
89433 -0x34,0x1C,0x44,0x8C,
89434 -0x0F,0x00,0x05,0x3C,
89435 -0xA9,0x45,0x00,0x0C,
89436 -0x21,0x30,0x00,0x00,
89437 -0x8E,0x46,0x00,0x08,
89438 -0x0F,0x00,0x04,0x3C,
89439 -0x25,0x00,0x02,0x2E,
89440 -0xC7,0xFF,0x40,0x14,
89441 -0x03,0x00,0x03,0x24,
89442 -0x1C,0x00,0xBF,0x8F,
89443 -0x18,0x00,0xB2,0x8F,
89444 -0x14,0x00,0xB1,0x8F,
89445 -0x10,0x00,0xB0,0x8F,
89446 -0x08,0x00,0xE0,0x03,
89447 -0x20,0x00,0xBD,0x27,
89448 -0xC1,0xFF,0x40,0x14,
89449 -0x00,0x00,0x00,0x00,
89450 -0x1C,0x00,0xBF,0x8F,
89451 -0x18,0x00,0xB2,0x8F,
89452 -0x14,0x00,0xB1,0x8F,
89453 -0x10,0x00,0xB0,0x8F,
89454 -0x08,0x00,0xE0,0x03,
89455 -0x20,0x00,0xBD,0x27,
89456 -0x30,0x1F,0x22,0x26,
89457 -0x34,0x1C,0x44,0x8C,
89458 -0x0F,0x00,0x05,0x3C,
89459 -0xA9,0x45,0x00,0x0C,
89460 -0x0F,0x00,0x06,0x24,
89461 -0xA5,0x46,0x00,0x08,
89462 -0x00,0x08,0x04,0x24,
89463 -0xCC,0xFF,0x80,0x14,
89464 -0x30,0x1F,0x22,0x26,
89465 -0x34,0x1C,0x44,0x8C,
89466 -0x0F,0x00,0x05,0x24,
89467 -0xA9,0x45,0x00,0x0C,
89468 -0x0F,0x00,0x06,0x24,
89469 -0xA5,0x46,0x00,0x08,
89470 -0x00,0x08,0x04,0x24,
89471 -0xAD,0xFF,0x80,0x14,
89472 -0x00,0x00,0x00,0x00,
89473 -0x30,0x1F,0x22,0x26,
89474 -0x34,0x1C,0x44,0x8C,
89475 -0x0F,0x00,0x05,0x24,
89476 -0xA9,0x45,0x00,0x0C,
89477 -0x21,0x30,0x00,0x00,
89478 -0x8E,0x46,0x00,0x08,
89479 -0x0F,0x00,0x04,0x3C,
89480 -0xE8,0xFF,0xBD,0x27,
89481 -0x10,0x00,0xB0,0xAF,
89482 -0x21,0x80,0x80,0x00,
89483 -0x14,0x00,0xBF,0xAF,
89484 -0xDC,0x45,0x00,0x0C,
89485 -0x21,0x20,0x00,0x00,
89486 -0x40,0x01,0x44,0x34,
89487 -0x21,0x18,0x40,0x00,
89488 -0x1F,0x00,0x02,0x2E,
89489 -0x00,0x23,0x04,0x00,
89490 -0x10,0x00,0x40,0x10,
89491 -0x10,0x00,0x05,0x2E,
89492 -0x00,0x01,0x64,0x34,
89493 -0x06,0x00,0xA0,0x10,
89494 -0x00,0x23,0x04,0x00,
89495 -0x21,0x10,0x00,0x02,
89496 -0x14,0x00,0xBF,0x8F,
89497 -0x10,0x00,0xB0,0x8F,
89498 -0x08,0x00,0xE0,0x03,
89499 -0x18,0x00,0xBD,0x27,
89500 -0xC6,0x45,0x00,0x0C,
89501 -0xF1,0xFF,0x10,0x26,
89502 -0x21,0x10,0x00,0x02,
89503 -0x14,0x00,0xBF,0x8F,
89504 -0x10,0x00,0xB0,0x8F,
89505 -0x08,0x00,0xE0,0x03,
89506 -0x18,0x00,0xBD,0x27,
89507 -0xC6,0x45,0x00,0x0C,
89508 -0xE2,0xFF,0x10,0x26,
89509 -0x21,0x10,0x00,0x02,
89510 -0x14,0x00,0xBF,0x8F,
89511 -0x10,0x00,0xB0,0x8F,
89512 -0x08,0x00,0xE0,0x03,
89513 -0x18,0x00,0xBD,0x27,
89514 -0xE0,0xFF,0xBD,0x27,
89515 -0x25,0xB0,0x02,0x3C,
89516 -0x18,0x00,0xBF,0xAF,
89517 -0x14,0x00,0xB1,0xAF,
89518 -0x10,0x00,0xB0,0xAF,
89519 -0x21,0x20,0x82,0x00,
89520 -0x00,0x00,0x90,0x8C,
89521 -0x21,0x88,0xA0,0x00,
89522 -0x9D,0x45,0x00,0x0C,
89523 -0x21,0x20,0xA0,0x00,
89524 -0x24,0x80,0x11,0x02,
89525 -0x06,0x10,0x50,0x00,
89526 -0x18,0x00,0xBF,0x8F,
89527 -0x14,0x00,0xB1,0x8F,
89528 -0x10,0x00,0xB0,0x8F,
89529 -0x08,0x00,0xE0,0x03,
89530 -0x20,0x00,0xBD,0x27,
89531 -0xD8,0xFF,0xBD,0x27,
89532 -0x25,0xB0,0x02,0x3C,
89533 -0x18,0x00,0xB2,0xAF,
89534 -0x21,0x90,0x82,0x00,
89535 -0xFF,0xFF,0x02,0x24,
89536 -0x1C,0x00,0xB3,0xAF,
89537 -0x14,0x00,0xB1,0xAF,
89538 -0x20,0x00,0xBF,0xAF,
89539 -0x10,0x00,0xB0,0xAF,
89540 -0x21,0x88,0xA0,0x00,
89541 -0x21,0x20,0xA0,0x00,
89542 -0x21,0x18,0x40,0x02,
89543 -0x10,0x00,0xA2,0x10,
89544 -0x21,0x98,0xC0,0x00,
89545 -0x00,0x00,0x50,0x8E,
89546 -0x9D,0x45,0x00,0x0C,
89547 -0x00,0x00,0x00,0x00,
89548 -0x27,0x18,0x11,0x00,
89549 -0x24,0x18,0x70,0x00,
89550 -0x04,0x10,0x53,0x00,
89551 -0x25,0x18,0x62,0x00,
89552 -0x00,0x00,0x43,0xAE,
89553 -0x20,0x00,0xBF,0x8F,
89554 -0x1C,0x00,0xB3,0x8F,
89555 -0x18,0x00,0xB2,0x8F,
89556 -0x14,0x00,0xB1,0x8F,
89557 -0x10,0x00,0xB0,0x8F,
89558 -0x08,0x00,0xE0,0x03,
89559 -0x28,0x00,0xBD,0x27,
89560 -0x20,0x00,0xBF,0x8F,
89561 -0x1C,0x00,0xB3,0x8F,
89562 -0x18,0x00,0xB2,0x8F,
89563 -0x14,0x00,0xB1,0x8F,
89564 -0x10,0x00,0xB0,0x8F,
89565 -0x28,0x00,0xBD,0x27,
89566 -0x00,0x00,0x66,0xAC,
89567 -0x08,0x00,0xE0,0x03,
89568 -0x00,0x00,0x00,0x00,
89569 -0x25,0xB0,0x02,0x3C,
89570 -0x21,0x38,0x82,0x00,
89571 -0xFF,0xFF,0x02,0x24,
89572 -0x27,0x40,0x05,0x00,
89573 -0x08,0x00,0xA2,0x10,
89574 -0x24,0x18,0xC5,0x00,
89575 -0x00,0x00,0xE2,0x8C,
89576 -0x00,0x00,0x00,0x00,
89577 -0x24,0x10,0x02,0x01,
89578 -0x25,0x10,0x43,0x00,
89579 -0x00,0x00,0xE2,0xAC,
89580 -0x08,0x00,0xE0,0x03,
89581 -0x00,0x00,0x00,0x00,
89582 -0x00,0x00,0xE6,0xAC,
89583 -0x08,0x00,0xE0,0x03,
89584 -0x00,0x00,0x00,0x00,
89585 -0x21,0x38,0xA0,0x00,
89586 -0x25,0xB0,0x02,0x3C,
89587 -0xFF,0xFF,0x03,0x24,
89588 -0x27,0x48,0x05,0x00,
89589 -0x24,0x40,0xC7,0x00,
89590 -0x21,0x28,0xC0,0x00,
89591 -0x05,0x00,0xE3,0x10,
89592 -0x21,0x30,0x82,0x00,
89593 -0x00,0x00,0xC5,0x8C,
89594 -0x00,0x00,0x00,0x00,
89595 -0x24,0x28,0x25,0x01,
89596 -0x25,0x28,0xA8,0x00,
89597 -0xDB,0x44,0x00,0x08,
89598 -0x00,0x00,0x00,0x00,
89599 -0x01,0x80,0x02,0x3C,
89600 -0x25,0xB0,0x03,0x3C,
89601 -0xD8,0xFF,0xBD,0x27,
89602 -0x7C,0x1D,0x42,0x24,
89603 -0x18,0x03,0x63,0x34,
89604 -0x20,0x00,0xB4,0xAF,
89605 -0x1C,0x00,0xB3,0xAF,
89606 -0x14,0x00,0xB1,0xAF,
89607 -0x24,0x00,0xBF,0xAF,
89608 -0x18,0x00,0xB2,0xAF,
89609 -0x10,0x00,0xB0,0xAF,
89610 -0x00,0x00,0x62,0xAC,
89611 -0x21,0x88,0xA0,0x00,
89612 -0x21,0x98,0xC0,0x00,
89613 -0x21,0xA0,0x80,0x00,
89614 -0x00,0x60,0x12,0x40,
89615 -0x01,0x00,0x41,0x36,
89616 -0x01,0x00,0x21,0x38,
89617 -0x00,0x60,0x81,0x40,
89618 -0x0F,0x00,0x02,0x3C,
89619 -0xFF,0xFF,0x42,0x34,
89620 -0x0A,0x00,0x22,0x12,
89621 -0x21,0x28,0xC0,0x00,
89622 -0x0B,0x46,0x00,0x0C,
89623 -0x00,0x00,0x00,0x00,
89624 -0x21,0x20,0x20,0x02,
89625 -0x9D,0x45,0x00,0x0C,
89626 -0x21,0x80,0x40,0x00,
89627 -0x27,0x28,0x11,0x00,
89628 -0x24,0x28,0xB0,0x00,
89629 -0x04,0x10,0x53,0x00,
89630 -0x25,0x28,0xA2,0x00,
89631 -0x76,0x46,0x00,0x0C,
89632 -0xFF,0x00,0x84,0x32,
89633 -0x00,0x60,0x92,0x40,
89634 -0x24,0x00,0xBF,0x8F,
89635 -0x20,0x00,0xB4,0x8F,
89636 -0x1C,0x00,0xB3,0x8F,
89637 -0x18,0x00,0xB2,0x8F,
89638 -0x14,0x00,0xB1,0x8F,
89639 -0x10,0x00,0xB0,0x8F,
89640 -0x08,0x00,0xE0,0x03,
89641 -0x28,0x00,0xBD,0x27,
89642 -0x01,0x80,0x03,0x3C,
89643 -0x25,0xB0,0x02,0x3C,
89644 -0x28,0x1E,0x63,0x24,
89645 -0x18,0x03,0x42,0x34,
89646 -0xE0,0xFF,0xBD,0x27,
89647 -0x00,0x00,0x43,0xAC,
89648 -0x18,0x00,0xBF,0xAF,
89649 -0x14,0x00,0xB1,0xAF,
89650 -0x10,0x00,0xB0,0xAF,
89651 -0x0B,0x46,0x00,0x0C,
89652 -0x21,0x88,0xA0,0x00,
89653 -0x21,0x80,0x40,0x00,
89654 -0x9D,0x45,0x00,0x0C,
89655 -0x21,0x20,0x20,0x02,
89656 -0x24,0x80,0x11,0x02,
89657 -0x06,0x10,0x50,0x00,
89658 -0x18,0x00,0xBF,0x8F,
89659 -0x14,0x00,0xB1,0x8F,
89660 -0x10,0x00,0xB0,0x8F,
89661 -0x08,0x00,0xE0,0x03,
89662 -0x20,0x00,0xBD,0x27,
89663 -0xD0,0xFF,0xBD,0x27,
89664 -0x24,0x00,0xB5,0xAF,
89665 -0xFF,0x00,0x84,0x30,
89666 -0x21,0xA8,0xC0,0x00,
89667 -0x28,0x00,0xB6,0xAF,
89668 -0x1C,0x00,0xB3,0xAF,
89669 -0x2C,0x00,0xBF,0xAF,
89670 -0x20,0x00,0xB4,0xAF,
89671 -0x18,0x00,0xB2,0xAF,
89672 -0x14,0x00,0xB1,0xAF,
89673 -0x10,0x00,0xB0,0xAF,
89674 -0x21,0xB0,0xA0,0x00,
89675 -0xE6,0x44,0x00,0x0C,
89676 -0x21,0x98,0x00,0x00,
89677 -0x21,0x00,0xA0,0x16,
89678 -0x80,0x10,0x13,0x00,
89679 -0xDD,0x47,0x00,0x08,
89680 -0x00,0x00,0x00,0x00,
89681 -0xFD,0x00,0x02,0x24,
89682 -0x23,0x00,0x02,0x12,
89683 -0x05,0x00,0x04,0x24,
89684 -0xFC,0x00,0x02,0x24,
89685 -0x37,0x00,0x02,0x12,
89686 -0x00,0x00,0x00,0x00,
89687 -0xFB,0x00,0x02,0x24,
89688 -0x30,0x00,0x02,0x12,
89689 -0x32,0x00,0x04,0x24,
89690 -0xFA,0x00,0x02,0x24,
89691 -0x2D,0x00,0x02,0x12,
89692 -0x05,0x00,0x04,0x24,
89693 -0xF9,0x00,0x02,0x24,
89694 -0x29,0x00,0x02,0x12,
89695 -0x0F,0x00,0x05,0x3C,
89696 -0x04,0x00,0xD1,0x8C,
89697 -0xFF,0xFF,0xA5,0x34,
89698 -0x21,0x20,0x00,0x02,
89699 -0x5F,0x47,0x00,0x0C,
89700 -0x21,0x30,0x20,0x02,
89701 -0x25,0x22,0x00,0x0C,
89702 -0x01,0x00,0x04,0x24,
89703 -0x19,0x00,0x02,0x24,
89704 -0x28,0x00,0x02,0x12,
89705 -0x21,0x90,0x00,0x00,
89706 -0x02,0x00,0x62,0x26,
89707 -0xFF,0x00,0x53,0x30,
89708 -0x2B,0x18,0x75,0x02,
89709 -0x0F,0x00,0x60,0x10,
89710 -0x80,0x10,0x13,0x00,
89711 -0x21,0x30,0x56,0x00,
89712 -0x00,0x00,0xD0,0x8C,
89713 -0xFF,0x00,0x02,0x24,
89714 -0x0A,0x00,0x02,0x12,
89715 -0xFE,0x00,0x02,0x24,
89716 -0xDC,0xFF,0x02,0x16,
89717 -0x32,0x00,0x04,0x24,
89718 -0x25,0x22,0x00,0x0C,
89719 -0x00,0x00,0x00,0x00,
89720 -0x02,0x00,0x62,0x26,
89721 -0xFF,0x00,0x53,0x30,
89722 -0x2B,0x18,0x75,0x02,
89723 -0xF3,0xFF,0x60,0x14,
89724 -0x80,0x10,0x13,0x00,
89725 -0x2C,0x00,0xBF,0x8F,
89726 -0x28,0x00,0xB6,0x8F,
89727 -0x24,0x00,0xB5,0x8F,
89728 -0x20,0x00,0xB4,0x8F,
89729 -0x1C,0x00,0xB3,0x8F,
89730 -0x18,0x00,0xB2,0x8F,
89731 -0x14,0x00,0xB1,0x8F,
89732 -0x10,0x00,0xB0,0x8F,
89733 -0x01,0x00,0x02,0x24,
89734 -0x08,0x00,0xE0,0x03,
89735 -0x30,0x00,0xBD,0x27,
89736 -0x01,0x00,0x04,0x24,
89737 -0x54,0x22,0x00,0x0C,
89738 -0x00,0x00,0x00,0x00,
89739 -0xCB,0x47,0x00,0x08,
89740 -0x02,0x00,0x62,0x26,
89741 -0x25,0x22,0x00,0x0C,
89742 -0x01,0x00,0x04,0x24,
89743 -0xD9,0x47,0x00,0x08,
89744 -0x02,0x00,0x62,0x26,
89745 -0x0F,0x00,0x14,0x3C,
89746 -0x21,0x20,0x00,0x02,
89747 -0x8A,0x47,0x00,0x0C,
89748 -0xFF,0xFF,0x85,0x36,
89749 -0x21,0x20,0x00,0x02,
89750 -0xFF,0xFF,0x85,0x36,
89751 -0xD2,0xFF,0x51,0x10,
89752 -0x21,0x30,0x20,0x02,
89753 -0x5F,0x47,0x00,0x0C,
89754 -0x00,0x00,0x00,0x00,
89755 -0x25,0x22,0x00,0x0C,
89756 -0x01,0x00,0x04,0x24,
89757 -0x01,0x00,0x42,0x26,
89758 -0xFF,0x00,0x52,0x30,
89759 -0x0A,0x00,0x43,0x2E,
89760 -0xF2,0xFF,0x60,0x14,
89761 -0x21,0x20,0x00,0x02,
89762 -0xE6,0x44,0x00,0x0C,
89763 -0x21,0x20,0x00,0x00,
89764 -0x2C,0x00,0xBF,0x8F,
89765 -0x28,0x00,0xB6,0x8F,
89766 -0x24,0x00,0xB5,0x8F,
89767 -0x20,0x00,0xB4,0x8F,
89768 -0x1C,0x00,0xB3,0x8F,
89769 -0x18,0x00,0xB2,0x8F,
89770 -0x14,0x00,0xB1,0x8F,
89771 -0x10,0x00,0xB0,0x8F,
89772 -0x21,0x10,0x00,0x00,
89773 -0x08,0x00,0xE0,0x03,
89774 -0x30,0x00,0xBD,0x27,
89775 -0xB8,0xFF,0xBD,0x27,
89776 -0x02,0x80,0x02,0x3C,
89777 -0x44,0x00,0xBF,0xAF,
89778 -0x40,0x00,0xBE,0xAF,
89779 -0x3C,0x00,0xB7,0xAF,
89780 -0x38,0x00,0xB6,0xAF,
89781 -0x34,0x00,0xB5,0xAF,
89782 -0x30,0x00,0xB4,0xAF,
89783 -0x2C,0x00,0xB3,0xAF,
89784 -0x28,0x00,0xB2,0xAF,
89785 -0x24,0x00,0xB1,0xAF,
89786 -0x20,0x00,0xB0,0xAF,
89787 -0x30,0x1F,0x57,0x24,
89788 -0x64,0x37,0xE3,0x96,
89789 -0x02,0x80,0x02,0x3C,
89790 -0x02,0x80,0x05,0x3C,
89791 -0x25,0xA0,0x62,0x00,
89792 -0xF0,0xDD,0xA5,0x24,
89793 -0x24,0x00,0x84,0x26,
89794 -0x06,0x00,0x06,0x24,
89795 -0x02,0x80,0x02,0x3C,
89796 -0x20,0x00,0x80,0xA6,
89797 -0x10,0x52,0x00,0x0C,
89798 -0x84,0x58,0x56,0x24,
89799 -0x02,0x80,0x05,0x3C,
89800 -0x18,0x3B,0xA5,0x24,
89801 -0x2A,0x00,0x84,0x26,
89802 -0x10,0x52,0x00,0x0C,
89803 -0x06,0x00,0x06,0x24,
89804 -0x02,0x80,0x05,0x3C,
89805 -0x88,0x58,0xA5,0x24,
89806 -0x06,0x00,0x06,0x24,
89807 -0x10,0x52,0x00,0x0C,
89808 -0x30,0x00,0x84,0x26,
89809 -0x20,0x00,0x83,0x96,
89810 -0x74,0x00,0xD0,0x26,
89811 -0x21,0x20,0x00,0x02,
89812 -0x03,0xFF,0x63,0x30,
89813 -0x80,0x00,0x63,0x34,
89814 -0x20,0x00,0x83,0xA6,
89815 -0x20,0x00,0x1E,0x24,
89816 -0x40,0x00,0x93,0x26,
89817 -0x17,0x4F,0x00,0x0C,
89818 -0x1C,0x00,0xBE,0xAF,
89819 -0x21,0x28,0x40,0x00,
89820 -0x21,0x20,0x60,0x02,
89821 -0x10,0x52,0x00,0x0C,
89822 -0x02,0x00,0x06,0x24,
89823 -0x1C,0x00,0xA2,0x8F,
89824 -0x21,0x20,0x00,0x02,
89825 -0x42,0x00,0x93,0x26,
89826 -0x02,0x00,0x42,0x24,
89827 -0x32,0x4F,0x00,0x0C,
89828 -0x1C,0x00,0xA2,0xAF,
89829 -0x21,0x28,0x40,0x00,
89830 -0x21,0x20,0x60,0x02,
89831 -0x10,0x52,0x00,0x0C,
89832 -0x02,0x00,0x06,0x24,
89833 -0x1C,0x00,0xA2,0x8F,
89834 -0x0C,0x00,0xC6,0x8E,
89835 -0x1C,0x00,0xB0,0x27,
89836 -0x21,0x28,0x00,0x00,
89837 -0x10,0x00,0xC7,0x26,
89838 -0x02,0x00,0x42,0x24,
89839 -0x44,0x00,0x84,0x26,
89840 -0x60,0x00,0xD1,0x26,
89841 -0x1C,0x00,0xA2,0xAF,
89842 -0x41,0x4F,0x00,0x0C,
89843 -0x10,0x00,0xB0,0xAF,
89844 -0x21,0x20,0x20,0x02,
89845 -0x37,0x50,0x00,0x0C,
89846 -0x21,0x98,0x40,0x00,
89847 -0x09,0x00,0x52,0x2C,
89848 -0x08,0x00,0x06,0x24,
89849 -0x21,0x20,0x60,0x02,
89850 -0x0B,0x30,0x52,0x00,
89851 -0x21,0x38,0x20,0x02,
89852 -0x01,0x00,0x05,0x24,
89853 -0x21,0xA8,0x40,0x00,
89854 -0x41,0x4F,0x00,0x0C,
89855 -0x10,0x00,0xB0,0xAF,
89856 -0x21,0x20,0x40,0x00,
89857 -0x03,0x00,0x05,0x24,
89858 -0x01,0x00,0x06,0x24,
89859 -0x48,0x00,0xC7,0x26,
89860 -0x41,0x4F,0x00,0x0C,
89861 -0x10,0x00,0xB0,0xAF,
89862 -0x21,0x20,0x40,0x00,
89863 -0x06,0x00,0x05,0x24,
89864 -0x02,0x00,0x06,0x24,
89865 -0x18,0x00,0xA7,0x27,
89866 -0x18,0x00,0xA0,0xA7,
89867 -0x41,0x4F,0x00,0x0C,
89868 -0x10,0x00,0xB0,0xAF,
89869 -0x18,0x00,0xA5,0x97,
89870 -0x02,0x80,0x04,0x3C,
89871 -0x68,0xDF,0x84,0x24,
89872 -0x2F,0x55,0x00,0x0C,
89873 -0x21,0x98,0x40,0x00,
89874 -0x13,0x00,0x40,0x12,
89875 -0x21,0x20,0x60,0x02,
89876 -0x1C,0x00,0xA2,0x8F,
89877 -0x00,0x00,0x00,0x00,
89878 -0x20,0x00,0x42,0x24,
89879 -0x01,0x01,0x42,0x2C,
89880 -0x18,0x00,0x40,0x14,
89881 -0x21,0x20,0x80,0x02,
89882 -0x44,0x00,0xBF,0x8F,
89883 -0x40,0x00,0xBE,0x8F,
89884 -0x3C,0x00,0xB7,0x8F,
89885 -0x38,0x00,0xB6,0x8F,
89886 -0x34,0x00,0xB5,0x8F,
89887 -0x30,0x00,0xB4,0x8F,
89888 -0x2C,0x00,0xB3,0x8F,
89889 -0x28,0x00,0xB2,0x8F,
89890 -0x24,0x00,0xB1,0x8F,
89891 -0x20,0x00,0xB0,0x8F,
89892 -0x08,0x00,0xE0,0x03,
89893 -0x48,0x00,0xBD,0x27,
89894 -0xF8,0xFF,0xA6,0x26,
89895 -0x68,0x00,0xC7,0x26,
89896 -0x32,0x00,0x05,0x24,
89897 -0x41,0x4F,0x00,0x0C,
89898 -0x10,0x00,0xB0,0xAF,
89899 -0x1C,0x00,0xA2,0x8F,
89900 -0x00,0x00,0x00,0x00,
89901 -0x20,0x00,0x42,0x24,
89902 -0x01,0x01,0x42,0x2C,
89903 -0xEA,0xFF,0x40,0x10,
89904 -0x21,0x20,0x80,0x02,
89905 -0x21,0x28,0x00,0x00,
89906 -0x08,0x52,0x00,0x0C,
89907 -0x08,0x00,0x06,0x24,
89908 -0x08,0x00,0x84,0x8E,
89909 -0x04,0x00,0x85,0x8E,
89910 -0xFF,0xDF,0x02,0x3C,
89911 -0x10,0x00,0x86,0x8E,
89912 -0x14,0x00,0x87,0x8E,
89913 -0xFF,0xFF,0x42,0x34,
89914 -0x1C,0x00,0xA8,0x8F,
89915 -0x24,0x20,0x82,0x00,
89916 -0x00,0x40,0x03,0x3C,
89917 -0xFF,0xE0,0x02,0x24,
89918 -0x24,0x28,0xA2,0x00,
89919 -0x25,0x20,0x83,0x00,
89920 -0x00,0x80,0x02,0x3C,
89921 -0xFF,0x81,0x03,0x24,
89922 -0x24,0x38,0xE3,0x00,
89923 -0x25,0x30,0xC2,0x00,
89924 -0x00,0x10,0xA5,0x34,
89925 -0x80,0x00,0x84,0x34,
89926 -0x08,0x00,0x84,0xAE,
89927 -0x00,0x00,0x88,0xA6,
89928 -0x02,0x00,0x9E,0xA2,
89929 -0x14,0x00,0x87,0xAE,
89930 -0x04,0x00,0x85,0xAE,
89931 -0x10,0x00,0x86,0xAE,
89932 -0xF8,0x36,0xE6,0x8E,
89933 -0x64,0x37,0xE5,0x8E,
89934 -0x01,0x00,0x04,0x24,
89935 -0x00,0x01,0x07,0x24,
89936 -0x01,0x00,0x02,0x24,
89937 -0x73,0x01,0x00,0x0C,
89938 -0x10,0x00,0xA2,0xAF,
89939 -0xB0,0x01,0x00,0x0C,
89940 -0x01,0x00,0x04,0x24,
89941 -0x44,0x00,0xBF,0x8F,
89942 -0x40,0x00,0xBE,0x8F,
89943 -0x3C,0x00,0xB7,0x8F,
89944 -0x38,0x00,0xB6,0x8F,
89945 -0x34,0x00,0xB5,0x8F,
89946 -0x30,0x00,0xB4,0x8F,
89947 -0x2C,0x00,0xB3,0x8F,
89948 -0x28,0x00,0xB2,0x8F,
89949 -0x24,0x00,0xB1,0x8F,
89950 -0x20,0x00,0xB0,0x8F,
89951 -0x08,0x00,0xE0,0x03,
89952 -0x48,0x00,0xBD,0x27,
89953 -0xE8,0xFF,0xBD,0x27,
89954 -0x10,0x00,0xB0,0xAF,
89955 -0x14,0x00,0xBF,0xAF,
89956 -0x25,0x24,0x00,0x0C,
89957 -0x24,0x00,0x04,0x24,
89958 -0x21,0x30,0x40,0x00,
89959 -0x02,0x80,0x05,0x3C,
89960 -0x02,0x80,0x02,0x3C,
89961 -0x30,0x1F,0x50,0x24,
89962 -0x21,0x20,0xC0,0x00,
89963 -0x13,0x00,0xC0,0x10,
89964 -0x48,0xEA,0xA5,0x24,
89965 -0x04,0x00,0x02,0x24,
89966 -0x09,0x00,0x03,0x24,
89967 -0x0C,0x00,0xC2,0xAC,
89968 -0x14,0x00,0xC3,0xAC,
89969 -0x08,0x00,0xC5,0x94,
89970 -0xA4,0x3B,0x03,0x8E,
89971 -0x02,0x80,0x02,0x3C,
89972 -0x25,0x28,0xA2,0x00,
89973 -0x30,0x09,0x00,0x0C,
89974 -0x20,0x00,0xA3,0xAC,
89975 -0xA8,0x3B,0x06,0x8E,
89976 -0xA4,0x3B,0x05,0x8E,
89977 -0x02,0x80,0x04,0x3C,
89978 -0x14,0x00,0xBF,0x8F,
89979 -0x10,0x00,0xB0,0x8F,
89980 -0x80,0xDF,0x84,0x24,
89981 -0x2F,0x55,0x00,0x08,
89982 -0x18,0x00,0xBD,0x27,
89983 -0x02,0x80,0x04,0x3C,
89984 -0x14,0x00,0xBF,0x8F,
89985 -0x10,0x00,0xB0,0x8F,
89986 -0x74,0xDF,0x84,0x24,
89987 -0x2F,0x55,0x00,0x08,
89988 -0x18,0x00,0xBD,0x27,
89989 -0xD8,0xFF,0xBD,0x27,
89990 -0x18,0x00,0xB2,0xAF,
89991 -0x14,0x00,0xB1,0xAF,
89992 -0x10,0x00,0xB0,0xAF,
89993 -0x24,0x00,0xBF,0xAF,
89994 -0x20,0x00,0xB4,0xAF,
89995 -0x1C,0x00,0xB3,0xAF,
89996 -0x02,0x00,0x82,0x90,
89997 -0x02,0x80,0x12,0x3C,
89998 -0x30,0x1F,0x51,0x26,
89999 -0xB0,0x1B,0x25,0x96,
90000 -0x0F,0x00,0x42,0x30,
90001 -0xC0,0x10,0x02,0x00,
90002 -0x21,0x80,0x44,0x00,
90003 -0x00,0x01,0xA3,0x30,
90004 -0x04,0x00,0x60,0x10,
90005 -0x18,0x00,0x04,0x26,
90006 -0x00,0x10,0xA2,0x30,
90007 -0x0B,0x00,0x40,0x10,
90008 -0x04,0x00,0xA2,0x30,
90009 -0x21,0x18,0x00,0x00,
90010 -0x24,0x00,0xBF,0x8F,
90011 -0x20,0x00,0xB4,0x8F,
90012 -0x1C,0x00,0xB3,0x8F,
90013 -0x18,0x00,0xB2,0x8F,
90014 -0x14,0x00,0xB1,0x8F,
90015 -0x10,0x00,0xB0,0x8F,
90016 -0x21,0x10,0x60,0x00,
90017 -0x08,0x00,0xE0,0x03,
90018 -0x28,0x00,0xBD,0x27,
90019 -0xF5,0xFF,0x40,0x14,
90020 -0x00,0x00,0x00,0x00,
90021 -0x55,0x50,0x00,0x0C,
90022 -0x00,0x00,0x00,0x00,
90023 -0x02,0x80,0x04,0x3C,
90024 -0x18,0x3B,0x84,0x24,
90025 -0x21,0x28,0x40,0x00,
90026 -0x39,0x52,0x00,0x0C,
90027 -0x06,0x00,0x06,0x24,
90028 -0xED,0xFF,0x40,0x14,
90029 -0x21,0x18,0x00,0x00,
90030 -0x02,0x80,0x02,0x3C,
90031 -0x88,0x58,0x53,0x24,
90032 -0x22,0x00,0x14,0x26,
90033 -0x21,0x20,0x80,0x02,
90034 -0x21,0x28,0x60,0x02,
90035 -0x39,0x52,0x00,0x0C,
90036 -0x06,0x00,0x06,0x24,
90037 -0xE4,0xFF,0x40,0x14,
90038 -0x21,0x18,0x00,0x00,
90039 -0x28,0x00,0x04,0x26,
90040 -0x21,0x28,0x60,0x02,
90041 -0x39,0x52,0x00,0x0C,
90042 -0x06,0x00,0x06,0x24,
90043 -0xDE,0xFF,0x40,0x14,
90044 -0x21,0x18,0x00,0x00,
90045 -0x02,0x80,0x04,0x3C,
90046 -0x2F,0x55,0x00,0x0C,
90047 -0xE8,0xDF,0x84,0x24,
90048 -0xB0,0x1B,0x24,0x96,
90049 -0x00,0x00,0x00,0x00,
90050 -0xFF,0xFF,0x83,0x30,
90051 -0x01,0x00,0x62,0x30,
90052 -0x08,0x00,0x40,0x10,
90053 -0x00,0x20,0x62,0x30,
90054 -0x15,0x00,0x40,0x10,
90055 -0xFF,0xDE,0x82,0x30,
90056 -0xFE,0xFF,0x04,0x24,
90057 -0xB0,0x1B,0x22,0xA6,
90058 -0xD0,0x38,0x20,0xAE,
90059 -0x48,0x0E,0x00,0x0C,
90060 -0xB4,0x38,0x20,0xAE,
90061 -0x25,0xB0,0x02,0x3C,
90062 -0x30,0x1F,0x50,0x26,
90063 -0x4C,0x00,0x42,0x34,
90064 -0x00,0x00,0x40,0xA0,
90065 -0x21,0x20,0x00,0x00,
90066 -0x21,0x28,0x00,0x00,
90067 -0x12,0x0D,0x00,0x0C,
90068 -0xA1,0x3B,0x00,0xA2,
90069 -0x10,0x3E,0x00,0xAE,
90070 -0xEC,0x38,0x00,0xAE,
90071 -0x08,0x39,0x00,0xAE,
90072 -0xA3,0x51,0x00,0x0C,
90073 -0x50,0x3E,0x00,0xAE,
90074 -0xFA,0x48,0x00,0x08,
90075 -0x21,0x18,0x00,0x00,
90076 -0x76,0x0E,0x00,0x0C,
90077 -0x21,0x20,0x80,0x02,
90078 -0xBB,0xFF,0x40,0x14,
90079 -0xFF,0xFF,0x03,0x24,
90080 -0xB0,0x1B,0x22,0x96,
90081 -0x00,0x00,0x00,0x00,
90082 -0xFF,0xFE,0x42,0x30,
90083 -0x2D,0x49,0x00,0x08,
90084 -0xB0,0x1B,0x22,0xA6,
90085 -0xD0,0xFF,0xBD,0x27,
90086 -0x20,0x00,0xB4,0xAF,
90087 -0x02,0x80,0x14,0x3C,
90088 -0x14,0x00,0xB1,0xAF,
90089 -0x28,0x00,0xBF,0xAF,
90090 -0x24,0x00,0xB5,0xAF,
90091 -0x1C,0x00,0xB3,0xAF,
90092 -0x18,0x00,0xB2,0xAF,
90093 -0x10,0x00,0xB0,0xAF,
90094 -0x30,0x1F,0x91,0x26,
90095 -0xB0,0x1B,0x23,0x96,
90096 -0x00,0x00,0x00,0x00,
90097 -0x10,0x00,0x62,0x30,
90098 -0x3A,0x00,0x40,0x14,
90099 -0x00,0x01,0x62,0x30,
90100 -0x2E,0x00,0x40,0x10,
90101 -0x00,0x10,0x62,0x30,
90102 -0x29,0x00,0x40,0x14,
90103 -0x01,0x00,0x62,0x30,
90104 -0x1D,0x00,0x40,0x14,
90105 -0x04,0x00,0x62,0x30,
90106 -0x25,0x00,0x40,0x10,
90107 -0x02,0x80,0x02,0x3C,
90108 -0x21,0x90,0x20,0x02,
90109 -0x2B,0x3D,0x55,0x24,
90110 -0x01,0x00,0x13,0x24,
90111 -0xF0,0x00,0x10,0x24,
90112 -0x65,0x49,0x00,0x08,
90113 -0x19,0x00,0x11,0x24,
90114 -0xFF,0xFF,0x31,0x26,
90115 -0x1C,0x00,0x20,0x06,
90116 -0x28,0x00,0x10,0x26,
90117 -0x21,0x18,0x12,0x02,
90118 -0xFA,0x1D,0x62,0x90,
90119 -0x00,0x00,0x00,0x00,
90120 -0xF9,0xFF,0x53,0x14,
90121 -0x00,0x00,0x00,0x00,
90122 -0x0C,0x1E,0x62,0x8C,
90123 -0x00,0x00,0x00,0x00,
90124 -0x33,0x00,0x40,0x10,
90125 -0x21,0x20,0x15,0x02,
90126 -0x00,0x60,0x02,0x40,
90127 -0x01,0x00,0x41,0x34,
90128 -0x01,0x00,0x21,0x38,
90129 -0x00,0x60,0x81,0x40,
90130 -0x0C,0x1E,0x60,0xAC,
90131 -0x00,0x60,0x82,0x40,
90132 -0x63,0x49,0x00,0x08,
90133 -0xFF,0xFF,0x31,0x26,
90134 -0xD4,0x1E,0x22,0x8E,
90135 -0x00,0x00,0x00,0x00,
90136 -0x2F,0x00,0x40,0x10,
90137 -0x02,0x80,0x04,0x3C,
90138 -0x00,0x60,0x02,0x40,
90139 -0x01,0x00,0x41,0x34,
90140 -0x01,0x00,0x21,0x38,
90141 -0x00,0x60,0x81,0x40,
90142 -0xD4,0x1E,0x20,0xAE,
90143 -0x00,0x60,0x82,0x40,
90144 -0x53,0x1E,0x00,0x0C,
90145 -0x30,0x1F,0x90,0x26,
90146 -0xEC,0x38,0x02,0xAE,
90147 -0x28,0x00,0xBF,0x8F,
90148 -0x24,0x00,0xB5,0x8F,
90149 -0x20,0x00,0xB4,0x8F,
90150 -0x1C,0x00,0xB3,0x8F,
90151 -0x18,0x00,0xB2,0x8F,
90152 -0x14,0x00,0xB1,0x8F,
90153 -0x10,0x00,0xB0,0x8F,
90154 -0x21,0x10,0x00,0x00,
90155 -0x08,0x00,0xE0,0x03,
90156 -0x30,0x00,0xBD,0x27,
90157 -0x02,0x80,0x04,0x3C,
90158 -0x2F,0x55,0x00,0x0C,
90159 -0xF8,0xDF,0x84,0x24,
90160 -0xB0,0x1B,0x22,0x96,
90161 -0xEC,0x38,0x20,0xAE,
90162 -0xFD,0xFF,0x04,0x24,
90163 -0xEF,0xDF,0x42,0x30,
90164 -0x48,0x0E,0x00,0x0C,
90165 -0xB0,0x1B,0x22,0xA6,
90166 -0x28,0x00,0xBF,0x8F,
90167 -0x24,0x00,0xB5,0x8F,
90168 -0x20,0x00,0xB4,0x8F,
90169 -0x1C,0x00,0xB3,0x8F,
90170 -0x18,0x00,0xB2,0x8F,
90171 -0x14,0x00,0xB1,0x8F,
90172 -0x10,0x00,0xB0,0x8F,
90173 -0x21,0x10,0x00,0x00,
90174 -0x08,0x00,0xE0,0x03,
90175 -0x30,0x00,0xBD,0x27,
90176 -0x8E,0x3E,0x42,0x92,
90177 -0x00,0x00,0x00,0x00,
90178 -0xFF,0xFF,0x42,0x24,
90179 -0x8E,0x3E,0x42,0xA2,
90180 -0x76,0x0E,0x00,0x0C,
90181 -0xFA,0x1D,0x60,0xA0,
90182 -0x63,0x49,0x00,0x08,
90183 -0xFF,0xFF,0x31,0x26,
90184 -0x2F,0x55,0x00,0x0C,
90185 -0x18,0xE0,0x84,0x24,
90186 -0xB0,0x1B,0x23,0x96,
90187 -0x25,0xB0,0x02,0x3C,
90188 -0x4C,0x00,0x42,0x34,
90189 -0xFE,0xFE,0x63,0x30,
90190 -0xB0,0x1B,0x23,0xA6,
90191 -0x21,0x20,0x00,0x00,
90192 -0x00,0x00,0x40,0xA0,
90193 -0x21,0x28,0x00,0x00,
90194 -0xA1,0x3B,0x20,0xA2,
90195 -0x12,0x0D,0x00,0x0C,
90196 -0xC2,0x1E,0x20,0xA2,
90197 -0x02,0x80,0x04,0x3C,
90198 -0x76,0x0E,0x00,0x0C,
90199 -0x88,0x58,0x84,0x24,
90200 -0x83,0x49,0x00,0x08,
90201 -0x00,0x00,0x00,0x00,
90202 -0x08,0x00,0xE0,0x03,
90203 -0x21,0x10,0x00,0x00,
90204 -0xA8,0xFF,0xBD,0x27,
90205 -0x48,0x00,0xB6,0xAF,
90206 -0x3C,0x00,0xB3,0xAF,
90207 -0x38,0x00,0xB2,0xAF,
90208 -0x30,0x00,0xB0,0xAF,
90209 -0x54,0x00,0xBF,0xAF,
90210 -0x50,0x00,0xBE,0xAF,
90211 -0x4C,0x00,0xB7,0xAF,
90212 -0x44,0x00,0xB5,0xAF,
90213 -0x40,0x00,0xB4,0xAF,
90214 -0x34,0x00,0xB1,0xAF,
90215 -0x02,0x00,0x82,0x90,
90216 -0x00,0x00,0x83,0x8C,
90217 -0x21,0xB0,0x00,0x00,
90218 -0x0F,0x00,0x42,0x30,
90219 -0xC0,0x10,0x02,0x00,
90220 -0x21,0x80,0x44,0x00,
90221 -0x18,0x00,0x12,0x26,
90222 -0x21,0x20,0x40,0x02,
90223 -0x55,0x50,0x00,0x0C,
90224 -0xFF,0x3F,0x73,0x30,
90225 -0x02,0x80,0x04,0x3C,
90226 -0x18,0x3B,0x84,0x24,
90227 -0x21,0x28,0x40,0x00,
90228 -0x39,0x52,0x00,0x0C,
90229 -0x06,0x00,0x06,0x24,
90230 -0x0B,0x00,0x40,0x14,
90231 -0x02,0x80,0x15,0x3C,
90232 -0x30,0x1F,0xB1,0x26,
90233 -0xB0,0x1B,0x23,0x96,
90234 -0x00,0x00,0x00,0x00,
90235 -0x01,0x00,0x62,0x30,
90236 -0x05,0x00,0x40,0x10,
90237 -0x00,0x10,0x62,0x30,
90238 -0x03,0x00,0x40,0x14,
90239 -0x00,0x01,0x62,0x30,
90240 -0x0E,0x00,0x40,0x10,
90241 -0x20,0x00,0xB4,0x27,
90242 -0x54,0x00,0xBF,0x8F,
90243 -0x50,0x00,0xBE,0x8F,
90244 -0x4C,0x00,0xB7,0x8F,
90245 -0x48,0x00,0xB6,0x8F,
90246 -0x44,0x00,0xB5,0x8F,
90247 -0x40,0x00,0xB4,0x8F,
90248 -0x3C,0x00,0xB3,0x8F,
90249 -0x38,0x00,0xB2,0x8F,
90250 -0x34,0x00,0xB1,0x8F,
90251 -0x30,0x00,0xB0,0x8F,
90252 -0x21,0x10,0x00,0x00,
90253 -0x08,0x00,0xE0,0x03,
90254 -0x58,0x00,0xBD,0x27,
90255 -0x32,0x00,0x05,0x26,
90256 -0x21,0x20,0x80,0x02,
90257 -0x10,0x52,0x00,0x0C,
90258 -0x02,0x00,0x06,0x24,
90259 -0x20,0x00,0xA5,0x97,
90260 -0x00,0x00,0x00,0x00,
90261 -0xC2,0x00,0xA0,0x14,
90262 -0x02,0x80,0x04,0x3C,
90263 -0x21,0x20,0x80,0x02,
90264 -0x34,0x00,0x05,0x26,
90265 -0x10,0x52,0x00,0x0C,
90266 -0x02,0x00,0x06,0x24,
90267 -0x20,0x00,0xA2,0x97,
90268 -0x21,0x20,0x80,0x02,
90269 -0x30,0x00,0x05,0x26,
90270 -0xFF,0x3F,0x42,0x30,
90271 -0x02,0x00,0x06,0x24,
90272 -0x50,0x39,0x22,0xA6,
90273 -0x10,0x52,0x00,0x0C,
90274 -0x28,0x00,0xA2,0xAF,
90275 -0x20,0x00,0xA3,0x97,
90276 -0x21,0x40,0x20,0x02,
90277 -0x00,0x04,0x63,0x30,
90278 -0x02,0x00,0x60,0x14,
90279 -0x09,0x00,0x02,0x24,
90280 -0x14,0x00,0x02,0x24,
90281 -0x1E,0x00,0x5E,0x26,
90282 -0xE2,0xFF,0x74,0x26,
90283 -0x21,0x20,0xC0,0x03,
90284 -0x01,0x00,0x05,0x24,
90285 -0x24,0x00,0xA6,0x27,
90286 -0x21,0x38,0x80,0x02,
90287 -0x55,0x1D,0x00,0x0C,
90288 -0x0C,0x3E,0x02,0xA1,
90289 -0xA8,0x00,0x40,0x10,
90290 -0x02,0x00,0x45,0x24,
90291 -0x24,0x00,0xA6,0x8F,
90292 -0x10,0x52,0x00,0x0C,
90293 -0x10,0x00,0xA4,0x27,
90294 -0x21,0x20,0xC0,0x03,
90295 -0x32,0x00,0x05,0x24,
90296 -0x24,0x00,0xA6,0x27,
90297 -0x24,0x00,0xB7,0x8F,
90298 -0x55,0x1D,0x00,0x0C,
90299 -0x21,0x38,0x80,0x02,
90300 -0x08,0x00,0x40,0x10,
90301 -0x10,0x00,0xA4,0x27,
90302 -0x24,0x00,0xA6,0x8F,
90303 -0x21,0x20,0x97,0x00,
90304 -0x10,0x52,0x00,0x0C,
90305 -0x02,0x00,0x45,0x24,
90306 -0x24,0x00,0xA3,0x8F,
90307 -0x00,0x00,0x00,0x00,
90308 -0x21,0xB8,0xE3,0x02,
90309 -0x02,0x80,0x02,0x3C,
90310 -0xEA,0x5D,0x44,0x90,
90311 -0x02,0x00,0x03,0x24,
90312 -0xE5,0x00,0x83,0x10,
90313 -0x21,0x20,0xC0,0x03,
90314 -0x30,0x1F,0xA4,0x26,
90315 -0x10,0x3E,0x82,0x8C,
90316 -0x00,0x00,0x00,0x00,
90317 -0x22,0x00,0x40,0x10,
90318 -0x30,0x1F,0xB1,0x26,
90319 -0x02,0x80,0x02,0x3C,
90320 -0xE6,0x5D,0x43,0x90,
90321 -0x00,0x00,0x00,0x00,
90322 -0x1D,0x00,0x60,0x14,
90323 -0x23,0x10,0xD2,0x03,
90324 -0x2B,0x10,0x53,0x00,
90325 -0x1A,0x00,0x40,0x10,
90326 -0x21,0x80,0xC0,0x03,
90327 -0x02,0x80,0x11,0x3C,
90328 -0x21,0x20,0x00,0x02,
90329 -0xDD,0x00,0x05,0x24,
90330 -0x24,0x00,0xA6,0x27,
90331 -0x55,0x1D,0x00,0x0C,
90332 -0x21,0x38,0x80,0x02,
90333 -0x21,0x80,0x40,0x00,
90334 -0x02,0x00,0x44,0x24,
90335 -0xC8,0xDD,0x25,0x26,
90336 -0x0E,0x01,0x40,0x10,
90337 -0x06,0x00,0x06,0x24,
90338 -0x39,0x52,0x00,0x0C,
90339 -0x00,0x00,0x00,0x00,
90340 -0x10,0x01,0x40,0x10,
90341 -0x00,0x00,0x00,0x00,
90342 -0x24,0x00,0xA2,0x8F,
90343 -0x00,0x00,0x00,0x00,
90344 -0x21,0x18,0x02,0x02,
90345 -0x02,0x00,0x70,0x24,
90346 -0x23,0x20,0x12,0x02,
90347 -0x03,0x01,0x40,0x10,
90348 -0x2B,0x20,0x93,0x00,
90349 -0xEB,0xFF,0x80,0x14,
90350 -0x21,0x20,0x00,0x02,
90351 -0x30,0x1F,0xB1,0x26,
90352 -0x50,0x3E,0x22,0x8E,
90353 -0x00,0x00,0x00,0x00,
90354 -0x6A,0x00,0x40,0x14,
90355 -0x24,0x00,0xA6,0x27,
90356 -0x53,0x1E,0x00,0x0C,
90357 -0x30,0x1F,0xB2,0x26,
90358 -0x25,0xB0,0x14,0x3C,
90359 -0xB0,0x1B,0x45,0x96,
90360 -0x02,0x00,0x03,0x24,
90361 -0x4C,0x00,0x84,0x36,
90362 -0x00,0x00,0x83,0xA0,
90363 -0xEC,0x38,0x42,0xAE,
90364 -0x02,0x00,0x02,0x3C,
90365 -0x00,0x01,0xA5,0x34,
90366 -0x20,0xBF,0x42,0x34,
90367 -0x08,0x39,0x42,0xAE,
90368 -0x21,0x0E,0x00,0x0C,
90369 -0xB0,0x1B,0x45,0xA6,
90370 -0x10,0x00,0xA4,0x27,
90371 -0x7D,0x50,0x00,0x0C,
90372 -0x21,0x28,0xE0,0x02,
90373 -0x0F,0x00,0x50,0x30,
90374 -0x10,0x00,0xA4,0x27,
90375 -0x96,0x50,0x00,0x0C,
90376 -0x21,0x28,0xE0,0x02,
90377 -0x40,0x02,0x13,0x36,
90378 -0x02,0x80,0x04,0x3C,
90379 -0x21,0x88,0x40,0x00,
90380 -0x21,0x30,0x40,0x00,
90381 -0x21,0x28,0x60,0x02,
90382 -0x2F,0x55,0x00,0x0C,
90383 -0x6C,0xE0,0x84,0x24,
90384 -0x21,0x20,0x60,0x02,
90385 -0xC1,0x5B,0x00,0x0C,
90386 -0x21,0x28,0x20,0x02,
90387 -0x21,0x28,0xE0,0x02,
90388 -0xC2,0x50,0x00,0x0C,
90389 -0x10,0x00,0xA4,0x27,
90390 -0x21,0x88,0x40,0x00,
90391 -0x50,0x3E,0x42,0x8E,
90392 -0x00,0x00,0x00,0x00,
90393 -0x16,0x00,0x40,0x10,
90394 -0x50,0x00,0x13,0x36,
90395 -0x5B,0x3E,0x42,0x92,
90396 -0x5C,0x3E,0x43,0x92,
90397 -0x0A,0x3E,0x44,0x92,
90398 -0x00,0x13,0x02,0x00,
90399 -0x00,0x1D,0x03,0x00,
90400 -0x25,0x10,0x43,0x00,
90401 -0x04,0x00,0x03,0x24,
90402 -0xA0,0x00,0x83,0x10,
90403 -0x25,0x88,0x22,0x02,
90404 -0x54,0x3E,0x43,0x8E,
90405 -0x00,0x00,0x00,0x00,
90406 -0x07,0x00,0x60,0x14,
90407 -0x01,0x00,0x02,0x24,
90408 -0x58,0x3E,0x42,0x96,
90409 -0x00,0x00,0x00,0x00,
90410 -0x20,0x00,0x42,0x30,
90411 -0xA1,0x00,0x40,0x14,
90412 -0x00,0x10,0x02,0x3C,
90413 -0x01,0x00,0x02,0x24,
90414 -0x98,0x00,0x62,0x10,
90415 -0x00,0x00,0x00,0x00,
90416 -0x02,0x80,0x04,0x3C,
90417 -0x80,0xE0,0x84,0x24,
90418 -0x21,0x28,0x60,0x02,
90419 -0x21,0x38,0xC0,0x02,
90420 -0x2F,0x55,0x00,0x0C,
90421 -0x21,0x30,0x20,0x02,
90422 -0x21,0x20,0x60,0x02,
90423 -0xC1,0x5B,0x00,0x0C,
90424 -0x21,0x28,0x20,0x02,
90425 -0x30,0x1F,0xA2,0x26,
90426 -0xB0,0x1B,0x43,0x94,
90427 -0x0A,0x3E,0x44,0x90,
90428 -0xB4,0x38,0x40,0xAC,
90429 -0xFF,0xDF,0x63,0x30,
90430 -0xB0,0x1B,0x43,0xA4,
90431 -0x04,0x00,0x03,0x24,
90432 -0xD0,0x38,0x40,0xAC,
90433 -0x94,0x3E,0x40,0xAC,
90434 -0x06,0x00,0x83,0x10,
90435 -0x98,0x3E,0x40,0xAC,
90436 -0x28,0x00,0xA4,0x8F,
90437 -0x48,0x0E,0x00,0x0C,
90438 -0x00,0x00,0x00,0x00,
90439 -0xE2,0x49,0x00,0x08,
90440 -0x00,0x00,0x00,0x00,
90441 -0x25,0xB0,0x06,0x3C,
90442 -0x64,0x03,0xC6,0x34,
90443 -0x30,0x1F,0xA4,0x8E,
90444 -0x00,0x00,0xC5,0x90,
90445 -0x0F,0xFF,0x02,0x24,
90446 -0xFD,0xFF,0x03,0x24,
90447 -0x24,0x20,0x82,0x00,
90448 -0x24,0x28,0xA3,0x00,
90449 -0x30,0x1F,0xA4,0xAE,
90450 -0x00,0x00,0xC5,0xA0,
90451 -0x28,0x00,0xA4,0x8F,
90452 -0x48,0x0E,0x00,0x0C,
90453 -0x00,0x00,0x00,0x00,
90454 -0xE2,0x49,0x00,0x08,
90455 -0x00,0x00,0x00,0x00,
90456 -0x2F,0x55,0x00,0x0C,
90457 -0x50,0xE0,0x84,0x24,
90458 -0xFF,0xFF,0x02,0x24,
90459 -0x99,0x4A,0x00,0x08,
90460 -0x28,0x00,0xA2,0xAF,
90461 -0x21,0x20,0xC0,0x03,
90462 -0x2D,0x00,0x05,0x24,
90463 -0x55,0x1D,0x00,0x0C,
90464 -0x21,0x38,0x80,0x02,
90465 -0x91,0x00,0x40,0x10,
90466 -0x00,0x00,0x00,0x00,
90467 -0x24,0x00,0xAB,0x8F,
90468 -0x00,0x00,0x00,0x00,
90469 -0x1F,0x00,0x60,0x19,
90470 -0x21,0x40,0x00,0x00,
90471 -0x02,0x00,0x49,0x24,
90472 -0x21,0x50,0x20,0x02,
90473 -0x02,0x00,0x0C,0x24,
90474 -0xD5,0x4A,0x00,0x08,
90475 -0x21,0x68,0x20,0x01,
90476 -0x58,0x3E,0x82,0x90,
90477 -0x00,0x00,0x23,0x91,
90478 -0x00,0x00,0x00,0x00,
90479 -0x24,0x10,0x43,0x00,
90480 -0x58,0x3E,0x82,0xA0,
90481 -0x01,0x00,0x08,0x25,
90482 -0x2A,0x10,0x0B,0x01,
90483 -0x11,0x00,0x40,0x10,
90484 -0x01,0x00,0x29,0x25,
90485 -0xF6,0xFF,0x0C,0x15,
90486 -0x21,0x20,0x0A,0x01,
90487 -0x5A,0x3E,0x43,0x91,
90488 -0x00,0x00,0x25,0x91,
90489 -0x02,0x00,0xA2,0x91,
90490 -0x1C,0x00,0x64,0x30,
90491 -0x1C,0x00,0xA5,0x30,
90492 -0x03,0x00,0x42,0x30,
90493 -0x03,0x00,0x63,0x30,
90494 -0x2A,0x30,0x43,0x00,
90495 -0x2A,0x38,0xA4,0x00,
90496 -0x0A,0x10,0x66,0x00,
90497 -0x0A,0x20,0xA7,0x00,
90498 -0x25,0x10,0x44,0x00,
90499 -0xD1,0x4A,0x00,0x08,
90500 -0x5A,0x3E,0x42,0xA1,
90501 -0x02,0x80,0x02,0x3C,
90502 -0xDE,0x5D,0x43,0x90,
90503 -0x02,0x80,0x02,0x3C,
90504 -0x3C,0xE3,0x47,0x24,
90505 -0x10,0x00,0x65,0x30,
90506 -0x02,0x80,0x02,0x3C,
90507 -0x02,0x80,0x03,0x3C,
90508 -0x4C,0xE3,0x66,0x24,
90509 -0x30,0x1F,0x44,0x24,
90510 -0xF8,0x4A,0x00,0x08,
90511 -0x21,0x40,0x00,0x00,
90512 -0x00,0x00,0x43,0x90,
90513 -0x5B,0x3E,0x82,0x90,
90514 -0x01,0x00,0x08,0x25,
90515 -0x24,0x10,0x43,0x00,
90516 -0x5B,0x3E,0x82,0xA0,
90517 -0x10,0x00,0x02,0x29,
90518 -0x07,0x00,0x40,0x10,
90519 -0x01,0x00,0x84,0x24,
90520 -0x21,0x10,0x07,0x01,
90521 -0xF6,0xFF,0xA0,0x14,
90522 -0x21,0x18,0x06,0x01,
90523 -0x00,0x00,0x63,0x90,
90524 -0xF1,0x4A,0x00,0x08,
90525 -0x00,0x00,0x00,0x00,
90526 -0x21,0x20,0xC0,0x03,
90527 -0x21,0x38,0x80,0x02,
90528 -0x3D,0x00,0x05,0x24,
90529 -0x55,0x1D,0x00,0x0C,
90530 -0x24,0x00,0xA6,0x27,
90531 -0x48,0x00,0x40,0x10,
90532 -0x00,0x00,0x00,0x00,
90533 -0x24,0x00,0xA6,0x8F,
90534 -0x02,0x80,0x04,0x3C,
90535 -0xA8,0x5D,0x84,0x24,
90536 -0x10,0x52,0x00,0x0C,
90537 -0x02,0x00,0x45,0x24,
90538 -0x90,0x0D,0x00,0x0C,
90539 -0x00,0x00,0x00,0x00,
90540 -0x54,0x4A,0x00,0x08,
90541 -0x00,0x00,0x00,0x00,
90542 -0x2A,0x00,0x05,0x24,
90543 -0x24,0x00,0xA6,0x27,
90544 -0x55,0x1D,0x00,0x0C,
90545 -0x21,0x38,0x80,0x02,
90546 -0x30,0x00,0x40,0x10,
90547 -0x30,0x1F,0xA5,0x26,
90548 -0x02,0x00,0x42,0x90,
90549 -0x00,0x00,0x00,0x00,
90550 -0x02,0x00,0x42,0x30,
90551 -0x2B,0x00,0x40,0x10,
90552 -0x02,0x80,0x02,0x3C,
90553 -0xEB,0x5D,0x44,0x90,
90554 -0x01,0x00,0x03,0x24,
90555 -0x3E,0x00,0x83,0x10,
90556 -0x30,0x1F,0xA2,0x26,
90557 -0x10,0x23,0x43,0x8C,
90558 -0xFF,0xEF,0x04,0x24,
90559 -0x00,0x08,0x63,0x34,
90560 -0x24,0x18,0x64,0x00,
90561 -0x2A,0x4A,0x00,0x08,
90562 -0x10,0x23,0x43,0xAC,
90563 -0xF6,0x01,0x82,0x36,
90564 -0x00,0x00,0x40,0xA4,
90565 -0x91,0x4A,0x00,0x08,
90566 -0x02,0x80,0x04,0x3C,
90567 -0x58,0x3E,0x42,0x96,
90568 -0x00,0x00,0x00,0x00,
90569 -0x40,0x00,0x42,0x30,
90570 -0x66,0xFF,0x40,0x10,
90571 -0x02,0x80,0x04,0x3C,
90572 -0x00,0x10,0x02,0x3C,
90573 -0x25,0x88,0x22,0x02,
90574 -0x0F,0x00,0x08,0x24,
90575 -0x01,0x00,0x03,0x24,
90576 -0x0C,0x00,0x02,0x25,
90577 -0x04,0x10,0x43,0x00,
90578 -0x24,0x10,0x51,0x00,
90579 -0x16,0x00,0x40,0x14,
90580 -0x00,0x00,0x00,0x00,
90581 -0xFF,0xFF,0x08,0x25,
90582 -0xFA,0xFF,0x01,0x05,
90583 -0x0C,0x00,0x02,0x25,
90584 -0x00,0x12,0x16,0x00,
90585 -0x00,0x1B,0x16,0x00,
90586 -0x25,0x18,0x62,0x00,
90587 -0x00,0x21,0x16,0x00,
90588 -0x25,0x18,0x64,0x00,
90589 -0x25,0xB0,0x02,0x3C,
90590 -0x25,0x18,0x76,0x00,
90591 -0xF6,0x01,0x42,0x34,
90592 -0x00,0x00,0x43,0xA4,
90593 -0x91,0x4A,0x00,0x08,
90594 -0x02,0x80,0x04,0x3C,
90595 -0x10,0x23,0xA2,0x8C,
90596 -0xFF,0xF7,0x03,0x24,
90597 -0xFF,0xEF,0x04,0x24,
90598 -0x24,0x10,0x43,0x00,
90599 -0x24,0x10,0x44,0x00,
90600 -0x2A,0x4A,0x00,0x08,
90601 -0x10,0x23,0xA2,0xAC,
90602 -0x38,0x4B,0x00,0x08,
90603 -0xFF,0x00,0x16,0x31,
90604 -0x30,0x1F,0xA2,0x26,
90605 -0x54,0x4A,0x00,0x08,
90606 -0x50,0x3E,0x40,0xAC,
90607 -0x02,0x80,0x02,0x3C,
90608 -0x30,0x1F,0x42,0x24,
90609 -0x4F,0x4A,0x00,0x08,
90610 -0x10,0x3E,0x40,0xAC,
90611 -0x54,0x4A,0x00,0x08,
90612 -0x50,0x3E,0x20,0xAE,
90613 -0x21,0x20,0x00,0x02,
90614 -0x78,0x0F,0x00,0x0C,
90615 -0x21,0x28,0x00,0x00,
90616 -0x50,0x4A,0x00,0x08,
90617 -0x30,0x1F,0xB1,0x26,
90618 -0x10,0x23,0x43,0x8C,
90619 -0xFF,0xF7,0x04,0x24,
90620 -0x24,0x18,0x64,0x00,
90621 -0x00,0x10,0x63,0x34,
90622 -0x2A,0x4A,0x00,0x08,
90623 -0x10,0x23,0x43,0xAC,
90624 -0xD8,0xFF,0xBD,0x27,
90625 -0x1C,0x00,0xB1,0xAF,
90626 -0x18,0x00,0xB0,0xAF,
90627 -0x20,0x00,0xBF,0xAF,
90628 -0x02,0x00,0x82,0x90,
90629 -0x02,0x80,0x03,0x3C,
90630 -0xE0,0x3A,0x65,0x94,
90631 -0x0F,0x00,0x42,0x30,
90632 -0x00,0x00,0x83,0x8C,
90633 -0xC0,0x10,0x02,0x00,
90634 -0x21,0x20,0x44,0x00,
90635 -0x00,0x10,0xA8,0x30,
90636 -0x02,0x80,0x02,0x3C,
90637 -0x00,0x08,0xA5,0x30,
90638 -0x84,0x58,0x51,0x24,
90639 -0xFF,0x3F,0x63,0x30,
90640 -0x06,0x00,0xA0,0x10,
90641 -0x18,0x00,0x90,0x24,
90642 -0xE8,0xFF,0x67,0x24,
90643 -0x30,0x00,0x84,0x24,
90644 -0x21,0x28,0x00,0x00,
90645 -0x07,0x00,0x00,0x11,
90646 -0x10,0x00,0xA6,0x27,
90647 -0x20,0x00,0xBF,0x8F,
90648 -0x1C,0x00,0xB1,0x8F,
90649 -0x18,0x00,0xB0,0x8F,
90650 -0x21,0x10,0x00,0x00,
90651 -0x08,0x00,0xE0,0x03,
90652 -0x28,0x00,0xBD,0x27,
90653 -0x55,0x1D,0x00,0x0C,
90654 -0x00,0x00,0x00,0x00,
90655 -0xF7,0xFF,0x40,0x10,
90656 -0x00,0x00,0x00,0x00,
90657 -0x02,0x00,0x44,0x24,
90658 -0x10,0x00,0xA2,0x8F,
90659 -0x00,0x00,0x00,0x00,
90660 -0x06,0x00,0x40,0x10,
90661 -0x10,0x00,0x25,0x26,
90662 -0x0C,0x00,0x26,0x8E,
90663 -0x39,0x52,0x00,0x0C,
90664 -0x00,0x00,0x00,0x00,
90665 -0xED,0xFF,0x40,0x14,
90666 -0x00,0x00,0x00,0x00,
90667 -0x42,0x50,0x00,0x0C,
90668 -0x21,0x20,0x00,0x02,
90669 -0x01,0x10,0x00,0x0C,
90670 -0x21,0x20,0x40,0x00,
90671 -0x77,0x4B,0x00,0x08,
90672 -0x00,0x00,0x00,0x00,
90673 -0x08,0x00,0xE0,0x03,
90674 -0x21,0x10,0x00,0x00,
90675 -0xE8,0xFF,0xBD,0x27,
90676 -0x10,0x00,0xBF,0xAF,
90677 -0xE5,0x48,0x00,0x0C,
90678 -0xFE,0xFF,0x05,0x24,
90679 -0x10,0x00,0xBF,0x8F,
90680 -0x21,0x10,0x00,0x00,
90681 -0x08,0x00,0xE0,0x03,
90682 -0x18,0x00,0xBD,0x27,
90683 -0xE8,0xFF,0xBD,0x27,
90684 -0x10,0x00,0xBF,0xAF,
90685 -0xE5,0x48,0x00,0x0C,
90686 -0xFF,0xFF,0x05,0x24,
90687 -0x10,0x00,0xBF,0x8F,
90688 -0x21,0x10,0x00,0x00,
90689 -0x08,0x00,0xE0,0x03,
90690 -0x18,0x00,0xBD,0x27,
90691 -0x25,0xB0,0x03,0x3C,
90692 -0x01,0x80,0x02,0x3C,
90693 -0xB0,0x03,0x65,0x34,
90694 -0x8C,0x2E,0x42,0x24,
90695 -0x18,0x03,0x63,0x34,
90696 -0x00,0x00,0x62,0xAC,
90697 -0x00,0x00,0xA4,0xAC,
90698 -0x00,0x00,0x83,0x8C,
90699 -0x21,0x10,0x00,0x00,
90700 -0xFF,0x3F,0x63,0x30,
90701 -0x00,0x00,0xA3,0xAC,
90702 -0x08,0x00,0xE0,0x03,
90703 -0x00,0x00,0x00,0x00,
90704 -0xE8,0xFF,0xBD,0x27,
90705 -0x02,0x80,0x02,0x3C,
90706 -0x10,0x00,0xB0,0xAF,
90707 -0x14,0x00,0xBF,0xAF,
90708 -0x30,0x1F,0x50,0x24,
90709 -0x70,0x3D,0x03,0x8E,
90710 -0xFE,0xFF,0x04,0x24,
90711 -0x01,0x00,0x63,0x24,
90712 -0x05,0x00,0x62,0x2C,
90713 -0x12,0x00,0x40,0x10,
90714 -0x70,0x3D,0x03,0xAE,
90715 -0xB0,0x1B,0x02,0x96,
90716 -0x00,0x00,0x00,0x00,
90717 -0x00,0x01,0x42,0x30,
90718 -0x05,0x00,0x40,0x10,
90719 -0x00,0x00,0x00,0x00,
90720 -0x14,0x00,0xBF,0x8F,
90721 -0x10,0x00,0xB0,0x8F,
90722 -0x08,0x00,0xE0,0x03,
90723 -0x18,0x00,0xBD,0x27,
90724 -0xA5,0x12,0x00,0x0C,
90725 -0x00,0x00,0x00,0x00,
90726 -0xC8,0x00,0x03,0x24,
90727 -0xD0,0x38,0x03,0xAE,
90728 -0x14,0x00,0xBF,0x8F,
90729 -0x10,0x00,0xB0,0x8F,
90730 -0x08,0x00,0xE0,0x03,
90731 -0x18,0x00,0xBD,0x27,
90732 -0xB0,0x1B,0x02,0x96,
90733 -0x00,0x00,0x00,0x00,
90734 -0xFF,0xDF,0x42,0x30,
90735 -0x48,0x0E,0x00,0x0C,
90736 -0xB0,0x1B,0x02,0xA6,
90737 -0x14,0x00,0xBF,0x8F,
90738 -0x10,0x00,0xB0,0x8F,
90739 -0x08,0x00,0xE0,0x03,
90740 -0x18,0x00,0xBD,0x27,
90741 -0xD0,0xFF,0xBD,0x27,
90742 -0x28,0x00,0xB4,0xAF,
90743 -0x24,0x00,0xB3,0xAF,
90744 -0x20,0x00,0xB2,0xAF,
90745 -0x1C,0x00,0xB1,0xAF,
90746 -0x18,0x00,0xB0,0xAF,
90747 -0x2C,0x00,0xBF,0xAF,
90748 -0x02,0x00,0x82,0x90,
90749 -0x02,0x80,0x14,0x3C,
90750 -0x30,0x1F,0x92,0x26,
90751 -0xB0,0x1B,0x43,0x96,
90752 -0x00,0x00,0x85,0x8C,
90753 -0x0F,0x00,0x42,0x30,
90754 -0xC0,0x10,0x02,0x00,
90755 -0x21,0x80,0x44,0x00,
90756 -0x01,0x00,0x63,0x30,
90757 -0xFF,0x3F,0xB3,0x30,
90758 -0x18,0x00,0x11,0x26,
90759 -0x0A,0x00,0x60,0x14,
90760 -0x21,0x20,0x00,0x00,
90761 -0x2C,0x00,0xBF,0x8F,
90762 -0x28,0x00,0xB4,0x8F,
90763 -0x24,0x00,0xB3,0x8F,
90764 -0x20,0x00,0xB2,0x8F,
90765 -0x1C,0x00,0xB1,0x8F,
90766 -0x18,0x00,0xB0,0x8F,
90767 -0x21,0x10,0x80,0x00,
90768 -0x08,0x00,0xE0,0x03,
90769 -0x30,0x00,0xBD,0x27,
90770 -0x55,0x50,0x00,0x0C,
90771 -0x21,0x20,0x20,0x02,
90772 -0x02,0x80,0x04,0x3C,
90773 -0x18,0x3B,0x84,0x24,
90774 -0x21,0x28,0x40,0x00,
90775 -0x39,0x52,0x00,0x0C,
90776 -0x06,0x00,0x06,0x24,
90777 -0xEF,0xFF,0x40,0x14,
90778 -0x21,0x20,0x00,0x00,
90779 -0xB0,0x1B,0x42,0x96,
90780 -0x00,0x00,0x00,0x00,
90781 -0x00,0x10,0x42,0x30,
90782 -0xEA,0xFF,0x40,0x14,
90783 -0x00,0x00,0x00,0x00,
90784 -0x18,0x00,0x03,0x96,
90785 -0x04,0x00,0x04,0x24,
90786 -0x21,0x10,0x80,0x00,
90787 -0x00,0x40,0x63,0x30,
90788 -0x0A,0x10,0x03,0x00,
90789 -0x21,0x10,0x22,0x02,
90790 -0x1C,0x00,0x43,0x94,
90791 -0x1A,0x00,0x45,0x94,
90792 -0x2F,0x00,0x60,0x14,
90793 -0x02,0x00,0x02,0x24,
90794 -0x14,0x00,0xA2,0x10,
90795 -0x01,0x00,0x02,0x24,
90796 -0x0E,0x00,0xA4,0x14,
90797 -0x02,0x80,0x04,0x3C,
90798 -0x78,0x3D,0x43,0x8E,
90799 -0x00,0x00,0x00,0x00,
90800 -0x06,0x00,0x62,0x10,
90801 -0x30,0x1F,0x83,0x26,
90802 -0xB0,0x1B,0x62,0x94,
90803 -0xFF,0xFF,0x04,0x24,
90804 -0xFF,0xDF,0x42,0x30,
90805 -0xE9,0x4B,0x00,0x08,
90806 -0xB0,0x1B,0x62,0xA4,
90807 -0x84,0x14,0x00,0x0C,
90808 -0x00,0x00,0x00,0x00,
90809 -0xE9,0x4B,0x00,0x08,
90810 -0x21,0x20,0x00,0x00,
90811 -0x2F,0x55,0x00,0x0C,
90812 -0xEC,0xE1,0x84,0x24,
90813 -0x12,0x4C,0x00,0x08,
90814 -0x30,0x1F,0x83,0x26,
90815 -0x78,0x3D,0x43,0x8E,
90816 -0x00,0x00,0x00,0x00,
90817 -0xF5,0xFF,0x62,0x14,
90818 -0xE2,0xFF,0x67,0x26,
90819 -0x36,0x00,0x04,0x26,
90820 -0x10,0x00,0x05,0x24,
90821 -0x55,0x1D,0x00,0x0C,
90822 -0x10,0x00,0xA6,0x27,
90823 -0x16,0x00,0x40,0x10,
90824 -0x00,0x00,0x00,0x00,
90825 -0x10,0x00,0xA6,0x8F,
90826 -0x02,0x80,0x04,0x3C,
90827 -0xB8,0x5C,0x84,0x24,
90828 -0x10,0x52,0x00,0x0C,
90829 -0x02,0x00,0x45,0x24,
90830 -0xB0,0x1B,0x43,0x96,
90831 -0x21,0x20,0x00,0x00,
90832 -0x03,0x00,0x02,0x24,
90833 -0xDF,0xFF,0x63,0x30,
90834 -0x40,0x00,0x63,0x34,
90835 -0xB0,0x1B,0x43,0xA6,
90836 -0xBC,0x15,0x00,0x0C,
90837 -0x74,0x3D,0x42,0xAE,
90838 -0xE9,0x4B,0x00,0x08,
90839 -0x21,0x20,0x00,0x00,
90840 -0x02,0x80,0x04,0x3C,
90841 -0xBC,0xE1,0x84,0x24,
90842 -0x2F,0x55,0x00,0x0C,
90843 -0x21,0x28,0x60,0x00,
90844 -0x12,0x4C,0x00,0x08,
90845 -0x30,0x1F,0x83,0x26,
90846 -0x02,0x80,0x04,0x3C,
90847 -0x2F,0x55,0x00,0x0C,
90848 -0xD8,0xE1,0x84,0x24,
90849 -0x12,0x4C,0x00,0x08,
90850 -0x30,0x1F,0x83,0x26,
90851 -0xE8,0xFF,0xBD,0x27,
90852 -0x02,0x80,0x02,0x3C,
90853 -0x10,0x00,0xB0,0xAF,
90854 -0x14,0x00,0xBF,0xAF,
90855 -0x30,0x1F,0x50,0x24,
90856 -0x6C,0x3D,0x03,0x8E,
90857 -0xFF,0xFF,0x04,0x24,
90858 -0x01,0x00,0x63,0x24,
90859 -0x05,0x00,0x62,0x2C,
90860 -0x16,0x00,0x40,0x10,
90861 -0x6C,0x3D,0x03,0xAE,
90862 -0xB0,0x1B,0x03,0x96,
90863 -0xBF,0xFF,0x02,0x24,
90864 -0x21,0x20,0x00,0x00,
90865 -0x24,0x10,0x62,0x00,
90866 -0x80,0x00,0x63,0x30,
90867 -0x05,0x00,0x60,0x10,
90868 -0x20,0x00,0x45,0x34,
90869 -0x14,0x00,0xBF,0x8F,
90870 -0x10,0x00,0xB0,0x8F,
90871 -0x08,0x00,0xE0,0x03,
90872 -0x18,0x00,0xBD,0x27,
90873 -0x01,0x00,0x02,0x24,
90874 -0x74,0x3D,0x02,0xAE,
90875 -0xBC,0x15,0x00,0x0C,
90876 -0xB0,0x1B,0x05,0xA6,
90877 -0xC8,0x00,0x03,0x24,
90878 -0xB4,0x38,0x03,0xAE,
90879 -0x14,0x00,0xBF,0x8F,
90880 -0x10,0x00,0xB0,0x8F,
90881 -0x08,0x00,0xE0,0x03,
90882 -0x18,0x00,0xBD,0x27,
90883 -0xB0,0x1B,0x02,0x96,
90884 -0x00,0x00,0x00,0x00,
90885 -0xFF,0xDF,0x42,0x30,
90886 -0x48,0x0E,0x00,0x0C,
90887 -0xB0,0x1B,0x02,0xA6,
90888 -0x14,0x00,0xBF,0x8F,
90889 -0x10,0x00,0xB0,0x8F,
90890 -0x08,0x00,0xE0,0x03,
90891 -0x18,0x00,0xBD,0x27,
90892 -0xD0,0xFF,0xBD,0x27,
90893 -0x20,0x00,0xB2,0xAF,
90894 -0x21,0x90,0x80,0x00,
90895 -0x00,0x01,0x04,0x24,
90896 -0x24,0x00,0xB3,0xAF,
90897 -0x1C,0x00,0xB1,0xAF,
90898 -0x21,0x98,0xA0,0x00,
90899 -0x28,0x00,0xBF,0xAF,
90900 -0x25,0x24,0x00,0x0C,
90901 -0x18,0x00,0xB0,0xAF,
90902 -0x02,0x80,0x04,0x3C,
90903 -0x02,0x80,0x05,0x3C,
90904 -0x21,0x88,0x40,0x00,
90905 -0x20,0xE2,0x84,0x24,
90906 -0x37,0x00,0x40,0x10,
90907 -0x04,0xEB,0xA5,0x24,
90908 -0x2F,0x55,0x00,0x0C,
90909 -0x00,0x00,0x00,0x00,
90910 -0x08,0x00,0x30,0x96,
90911 -0x02,0x80,0x02,0x3C,
90912 -0x21,0x28,0x40,0x02,
90913 -0x25,0x80,0x02,0x02,
90914 -0x24,0x00,0x04,0x26,
90915 -0x20,0x00,0x00,0xA6,
90916 -0x10,0x52,0x00,0x0C,
90917 -0x06,0x00,0x06,0x24,
90918 -0x02,0x80,0x05,0x3C,
90919 -0x2A,0x00,0x04,0x26,
90920 -0x18,0x3B,0xA5,0x24,
90921 -0x10,0x52,0x00,0x0C,
90922 -0x06,0x00,0x06,0x24,
90923 -0x02,0x80,0x05,0x3C,
90924 -0x30,0x00,0x04,0x26,
90925 -0x88,0x58,0xA5,0x24,
90926 -0x10,0x52,0x00,0x0C,
90927 -0x06,0x00,0x06,0x24,
90928 -0x20,0x00,0x03,0x96,
90929 -0x18,0x00,0x02,0x24,
90930 -0x02,0x80,0x05,0x3C,
90931 -0x03,0xFF,0x63,0x30,
90932 -0xC0,0x00,0x63,0x34,
90933 -0x20,0x00,0x03,0xA6,
90934 -0x30,0x1F,0xA5,0x24,
90935 -0x0C,0x00,0x22,0xAE,
90936 -0xF8,0x1D,0xA3,0x94,
90937 -0x20,0x00,0x07,0x26,
90938 -0x38,0x00,0x04,0x26,
90939 -0xFF,0x0F,0x62,0x30,
90940 -0x00,0x11,0x02,0x00,
90941 -0x02,0x32,0x02,0x00,
90942 -0x01,0x00,0x63,0x24,
90943 -0xF8,0x1D,0xA3,0xA4,
90944 -0x17,0x00,0xE6,0xA0,
90945 -0x16,0x00,0xE2,0xA0,
90946 -0x10,0x00,0xA6,0x27,
90947 -0x0C,0x00,0x27,0x26,
90948 -0x02,0x00,0x05,0x24,
90949 -0x68,0x4F,0x00,0x0C,
90950 -0x10,0x00,0xB3,0xA7,
90951 -0x21,0x20,0x20,0x02,
90952 -0x21,0x28,0x00,0x00,
90953 -0xB9,0x0C,0x00,0x0C,
90954 -0x21,0x30,0x00,0x00,
90955 -0x28,0x00,0xBF,0x8F,
90956 -0x24,0x00,0xB3,0x8F,
90957 -0x20,0x00,0xB2,0x8F,
90958 -0x1C,0x00,0xB1,0x8F,
90959 -0x18,0x00,0xB0,0x8F,
90960 -0x08,0x00,0xE0,0x03,
90961 -0x30,0x00,0xBD,0x27,
90962 -0x02,0x80,0x04,0x3C,
90963 -0x2F,0x55,0x00,0x0C,
90964 -0x14,0xE2,0x84,0x24,
90965 -0x28,0x00,0xBF,0x8F,
90966 -0x24,0x00,0xB3,0x8F,
90967 -0x20,0x00,0xB2,0x8F,
90968 -0x1C,0x00,0xB1,0x8F,
90969 -0x18,0x00,0xB0,0x8F,
90970 -0x08,0x00,0xE0,0x03,
90971 -0x30,0x00,0xBD,0x27,
90972 -0xD0,0xFF,0xBD,0x27,
90973 -0x20,0x00,0xB2,0xAF,
90974 -0x21,0x90,0x80,0x00,
90975 -0x00,0x01,0x04,0x24,
90976 -0x24,0x00,0xB3,0xAF,
90977 -0x1C,0x00,0xB1,0xAF,
90978 -0x21,0x98,0xA0,0x00,
90979 -0x28,0x00,0xBF,0xAF,
90980 -0x25,0x24,0x00,0x0C,
90981 -0x18,0x00,0xB0,0xAF,
90982 -0x02,0x80,0x04,0x3C,
90983 -0x02,0x80,0x05,0x3C,
90984 -0x21,0x88,0x40,0x00,
90985 -0x3C,0xE2,0x84,0x24,
90986 -0x37,0x00,0x40,0x10,
90987 -0x14,0xEB,0xA5,0x24,
90988 -0x2F,0x55,0x00,0x0C,
90989 -0x00,0x00,0x00,0x00,
90990 -0x08,0x00,0x30,0x96,
90991 -0x02,0x80,0x02,0x3C,
90992 -0x21,0x28,0x40,0x02,
90993 -0x25,0x80,0x02,0x02,
90994 -0x24,0x00,0x04,0x26,
90995 -0x20,0x00,0x00,0xA6,
90996 -0x10,0x52,0x00,0x0C,
90997 -0x06,0x00,0x06,0x24,
90998 -0x02,0x80,0x05,0x3C,
90999 -0x2A,0x00,0x04,0x26,
91000 -0x18,0x3B,0xA5,0x24,
91001 -0x10,0x52,0x00,0x0C,
91002 -0x06,0x00,0x06,0x24,
91003 -0x02,0x80,0x05,0x3C,
91004 -0x30,0x00,0x04,0x26,
91005 -0x88,0x58,0xA5,0x24,
91006 -0x10,0x52,0x00,0x0C,
91007 -0x06,0x00,0x06,0x24,
91008 -0x20,0x00,0x03,0x96,
91009 -0x18,0x00,0x02,0x24,
91010 -0x02,0x80,0x05,0x3C,
91011 -0x03,0xFF,0x63,0x30,
91012 -0xA0,0x00,0x63,0x34,
91013 -0x20,0x00,0x03,0xA6,
91014 -0x30,0x1F,0xA5,0x24,
91015 -0x0C,0x00,0x22,0xAE,
91016 -0xF8,0x1D,0xA3,0x94,
91017 -0x20,0x00,0x07,0x26,
91018 -0x38,0x00,0x04,0x26,
91019 -0xFF,0x0F,0x62,0x30,
91020 -0x00,0x11,0x02,0x00,
91021 -0x02,0x32,0x02,0x00,
91022 -0x01,0x00,0x63,0x24,
91023 -0xF8,0x1D,0xA3,0xA4,
91024 -0x17,0x00,0xE6,0xA0,
91025 -0x16,0x00,0xE2,0xA0,
91026 -0x10,0x00,0xA6,0x27,
91027 -0x0C,0x00,0x27,0x26,
91028 -0x02,0x00,0x05,0x24,
91029 -0x68,0x4F,0x00,0x0C,
91030 -0x10,0x00,0xB3,0xA7,
91031 -0x21,0x20,0x20,0x02,
91032 -0x21,0x28,0x00,0x00,
91033 -0xB9,0x0C,0x00,0x0C,
91034 -0x21,0x30,0x00,0x00,
91035 -0x28,0x00,0xBF,0x8F,
91036 -0x24,0x00,0xB3,0x8F,
91037 -0x20,0x00,0xB2,0x8F,
91038 -0x1C,0x00,0xB1,0x8F,
91039 -0x18,0x00,0xB0,0x8F,
91040 -0x08,0x00,0xE0,0x03,
91041 -0x30,0x00,0xBD,0x27,
91042 -0x02,0x80,0x04,0x3C,
91043 -0x2F,0x55,0x00,0x0C,
91044 -0x30,0xE2,0x84,0x24,
91045 -0x28,0x00,0xBF,0x8F,
91046 -0x24,0x00,0xB3,0x8F,
91047 -0x20,0x00,0xB2,0x8F,
91048 -0x1C,0x00,0xB1,0x8F,
91049 -0x18,0x00,0xB0,0x8F,
91050 -0x08,0x00,0xE0,0x03,
91051 -0x30,0x00,0xBD,0x27,
91052 -0xC8,0xFF,0xBD,0x27,
91053 -0x2C,0x00,0xB1,0xAF,
91054 -0xFF,0xFF,0x05,0x24,
91055 -0x21,0x88,0x80,0x00,
91056 -0x02,0x00,0x06,0x24,
91057 -0x10,0x00,0xA4,0x27,
91058 -0x34,0x00,0xBF,0xAF,
91059 -0x30,0x00,0xB2,0xAF,
91060 -0x08,0x52,0x00,0x0C,
91061 -0x28,0x00,0xB0,0xAF,
91062 -0x08,0x00,0x30,0x96,
91063 -0x02,0x80,0x02,0x3C,
91064 -0x21,0x28,0x00,0x00,
91065 -0x25,0x80,0x02,0x02,
91066 -0x21,0x20,0x00,0x02,
91067 -0x08,0x52,0x00,0x0C,
91068 -0x10,0x00,0x06,0x24,
91069 -0x20,0x00,0x02,0x96,
91070 -0x24,0x00,0x04,0x26,
91071 -0x10,0x00,0xA5,0x27,
91072 -0x03,0xFF,0x42,0x30,
91073 -0xC8,0x00,0x42,0x34,
91074 -0x20,0x00,0x02,0xA6,
91075 -0x10,0x52,0x00,0x0C,
91076 -0x06,0x00,0x06,0x24,
91077 -0x25,0xB0,0x03,0x3C,
91078 -0x50,0x00,0x62,0x34,
91079 -0x00,0x00,0x44,0x8C,
91080 -0x54,0x00,0x65,0x34,
91081 -0x58,0x00,0x66,0x34,
91082 -0x18,0x00,0xA4,0xAF,
91083 -0x00,0x00,0xA2,0x8C,
91084 -0x5C,0x00,0x63,0x34,
91085 -0x2A,0x00,0x04,0x26,
91086 -0x1C,0x00,0xA2,0xAF,
91087 -0x00,0x00,0xC7,0x8C,
91088 -0x18,0x00,0xA5,0x27,
91089 -0x06,0x00,0x06,0x24,
91090 -0x20,0x00,0xA7,0xAF,
91091 -0x00,0x00,0x62,0x8C,
91092 -0x1A,0x00,0x12,0x24,
91093 -0x10,0x52,0x00,0x0C,
91094 -0x24,0x00,0xA2,0xAF,
91095 -0x30,0x00,0x04,0x26,
91096 -0x20,0x00,0xA5,0x27,
91097 -0x10,0x52,0x00,0x0C,
91098 -0x06,0x00,0x06,0x24,
91099 -0x13,0x00,0x03,0x24,
91100 -0x14,0x00,0x23,0xAE,
91101 -0x0C,0x00,0x32,0xAE,
91102 -0x08,0x00,0x05,0x8E,
91103 -0x04,0x00,0x04,0x8E,
91104 -0xFF,0xDF,0x02,0x3C,
91105 -0x14,0x00,0x06,0x8E,
91106 -0xFF,0xFF,0x42,0x34,
91107 -0x10,0x00,0x07,0x8E,
91108 -0xFF,0xE0,0x03,0x24,
91109 -0x24,0x28,0xA2,0x00,
91110 -0x00,0x40,0x02,0x3C,
91111 -0x24,0x20,0x83,0x00,
91112 -0x25,0x28,0xA2,0x00,
91113 -0xFF,0x81,0x03,0x24,
91114 -0xFE,0xFF,0x02,0x3C,
91115 -0x24,0x30,0xC3,0x00,
91116 -0xFF,0xFF,0x42,0x34,
91117 -0x00,0x12,0x84,0x34,
91118 -0x00,0x80,0x03,0x3C,
91119 -0x24,0x20,0x82,0x00,
91120 -0x25,0x38,0xE3,0x00,
91121 -0x00,0x26,0xC6,0x34,
91122 -0x80,0x00,0xA5,0x34,
91123 -0x20,0x00,0x02,0x24,
91124 -0x00,0x00,0x12,0xA6,
91125 -0x10,0x00,0x07,0xAE,
91126 -0x02,0x00,0x02,0xA2,
91127 -0x14,0x00,0x06,0xAE,
91128 -0x04,0x00,0x04,0xAE,
91129 -0x08,0x00,0x05,0xAE,
91130 -0x34,0x00,0xBF,0x8F,
91131 -0x30,0x00,0xB2,0x8F,
91132 -0x2C,0x00,0xB1,0x8F,
91133 -0x28,0x00,0xB0,0x8F,
91134 -0x08,0x00,0xE0,0x03,
91135 -0x38,0x00,0xBD,0x27,
91136 -0xC8,0xFF,0xBD,0x27,
91137 -0x1C,0x00,0xB1,0xAF,
91138 -0x01,0x80,0x02,0x3C,
91139 -0x25,0xB0,0x11,0x3C,
91140 -0x18,0x03,0x23,0x36,
91141 -0x80,0x35,0x42,0x24,
91142 -0x28,0x00,0xB4,0xAF,
91143 -0x20,0x00,0xB2,0xAF,
91144 -0x21,0xA0,0x80,0x00,
91145 -0x48,0x00,0xB2,0x93,
91146 -0xFF,0x00,0xE4,0x30,
91147 -0x00,0x00,0x62,0xAC,
91148 -0x24,0x00,0xB3,0xAF,
91149 -0x18,0x00,0xB0,0xAF,
91150 -0x30,0x00,0xBF,0xAF,
91151 -0x2C,0x00,0xB5,0xAF,
91152 -0xFF,0x00,0xB3,0x30,
91153 -0x0D,0x24,0x00,0x0C,
91154 -0xFF,0x00,0xD0,0x30,
91155 -0x66,0x00,0x40,0x10,
91156 -0x10,0x00,0xA2,0xAF,
91157 -0x08,0x00,0x44,0x8C,
91158 -0xB0,0x03,0x22,0x36,
91159 -0x00,0x00,0x44,0xAC,
91160 -0x10,0x00,0xA3,0x8F,
91161 -0x02,0x80,0x02,0x3C,
91162 -0x08,0x00,0x64,0x94,
91163 -0x00,0x00,0x00,0x00,
91164 -0x25,0x88,0x82,0x00,
91165 -0x41,0x00,0x40,0x16,
91166 -0x20,0x00,0x24,0x26,
91167 -0x48,0x00,0x02,0x24,
91168 -0x43,0x00,0x02,0x12,
91169 -0x20,0x00,0x30,0xA6,
91170 -0x04,0x00,0x02,0x24,
91171 -0x47,0x00,0x62,0x16,
91172 -0x21,0x28,0x80,0x02,
91173 -0xA4,0x00,0x02,0x24,
91174 -0x61,0x00,0x02,0x12,
91175 -0x02,0x80,0x02,0x3C,
91176 -0x10,0x00,0xA2,0x8F,
91177 -0x25,0xB0,0x10,0x3C,
91178 -0xB0,0x03,0x10,0x36,
91179 -0x0C,0x00,0x55,0xAC,
91180 -0x10,0x00,0xA2,0x8F,
91181 -0x12,0x00,0x03,0x24,
91182 -0x21,0x28,0x00,0x00,
91183 -0x14,0x00,0x43,0xAC,
91184 -0x00,0x00,0x15,0xAE,
91185 -0x10,0x00,0xA2,0x8F,
91186 -0x08,0x00,0x06,0x24,
91187 -0x08,0x00,0x43,0x8C,
91188 -0x00,0x00,0x00,0x00,
91189 -0x00,0x00,0x03,0xAE,
91190 -0x10,0x00,0xA2,0x8F,
91191 -0x02,0x80,0x03,0x3C,
91192 -0x08,0x00,0x44,0x94,
91193 -0x00,0x00,0x00,0x00,
91194 -0x25,0x88,0x83,0x00,
91195 -0x08,0x52,0x00,0x0C,
91196 -0x21,0x20,0x20,0x02,
91197 -0x14,0x00,0x25,0x8E,
91198 -0x08,0x00,0x24,0x8E,
91199 -0xFF,0xDF,0x02,0x3C,
91200 -0xFF,0x81,0x03,0x24,
91201 -0xFF,0xFF,0x42,0x34,
91202 -0x24,0x28,0xA3,0x00,
91203 -0x24,0x20,0x82,0x00,
91204 -0x00,0x40,0x03,0x3C,
91205 -0x25,0x20,0x83,0x00,
91206 -0x20,0x00,0x02,0x24,
91207 -0x00,0x24,0xA5,0x34,
91208 -0x00,0x00,0x35,0xA6,
91209 -0x02,0x00,0x22,0xA2,
91210 -0x08,0x00,0x24,0xAE,
91211 -0x14,0x00,0x25,0xAE,
91212 -0x02,0x80,0x02,0x3C,
91213 -0x10,0x00,0xA3,0x8F,
91214 -0x74,0x57,0x42,0x24,
91215 -0x04,0x00,0x44,0x8C,
91216 -0x00,0x00,0x62,0xAC,
91217 -0x04,0x00,0x43,0xAC,
91218 -0x10,0x00,0xA2,0x27,
91219 -0x00,0x00,0x83,0xAC,
91220 -0x04,0x00,0x64,0xAC,
91221 -0x30,0x00,0xBF,0x8F,
91222 -0x00,0x00,0x02,0xAE,
91223 -0x2C,0x00,0xB5,0x8F,
91224 -0x28,0x00,0xB4,0x8F,
91225 -0x24,0x00,0xB3,0x8F,
91226 -0x20,0x00,0xB2,0x8F,
91227 -0x1C,0x00,0xB1,0x8F,
91228 -0x18,0x00,0xB0,0x8F,
91229 -0x08,0x00,0xE0,0x03,
91230 -0x38,0x00,0xBD,0x27,
91231 -0x00,0x10,0x02,0x36,
91232 -0x20,0x00,0x22,0xA6,
91233 -0x48,0x00,0x02,0x24,
91234 -0xC0,0xFF,0x02,0x16,
91235 -0x04,0x00,0x02,0x24,
91236 -0x20,0x00,0x22,0x96,
91237 -0x00,0x00,0x00,0x00,
91238 -0x00,0x01,0x42,0x34,
91239 -0x20,0x00,0x22,0xA6,
91240 -0x04,0x00,0x02,0x24,
91241 -0xBB,0xFF,0x62,0x12,
91242 -0x21,0x28,0x80,0x02,
91243 -0x24,0x00,0x24,0x26,
91244 -0x10,0x52,0x00,0x0C,
91245 -0x06,0x00,0x06,0x24,
91246 -0x02,0x80,0x05,0x3C,
91247 -0x18,0x3B,0xA5,0x24,
91248 -0x2A,0x00,0x24,0x26,
91249 -0x10,0x52,0x00,0x0C,
91250 -0x06,0x00,0x06,0x24,
91251 -0x02,0x80,0x05,0x3C,
91252 -0x30,0x00,0x24,0x26,
91253 -0x88,0x58,0xA5,0x24,
91254 -0x10,0x52,0x00,0x0C,
91255 -0x06,0x00,0x06,0x24,
91256 -0x88,0x4D,0x00,0x08,
91257 -0x18,0x00,0x15,0x24,
91258 -0x02,0x80,0x04,0x3C,
91259 -0x02,0x80,0x05,0x3C,
91260 -0x4C,0xE2,0x84,0x24,
91261 -0x2F,0x55,0x00,0x0C,
91262 -0x24,0xEB,0xA5,0x24,
91263 -0x30,0x00,0xBF,0x8F,
91264 -0x2C,0x00,0xB5,0x8F,
91265 -0x28,0x00,0xB4,0x8F,
91266 -0x24,0x00,0xB3,0x8F,
91267 -0x20,0x00,0xB2,0x8F,
91268 -0x1C,0x00,0xB1,0x8F,
91269 -0x18,0x00,0xB0,0x8F,
91270 -0x08,0x00,0xE0,0x03,
91271 -0x38,0x00,0xBD,0x27,
91272 -0x80,0x58,0x43,0x94,
91273 -0x02,0x80,0x05,0x3C,
91274 -0x88,0x58,0xA5,0x24,
91275 -0x00,0xC0,0x63,0x24,
91276 -0xFF,0xFF,0x63,0x30,
91277 -0x02,0x12,0x03,0x00,
91278 -0x02,0x00,0x83,0xA0,
91279 -0x03,0x00,0x82,0xA0,
91280 -0x06,0x00,0x06,0x24,
91281 -0x10,0x52,0x00,0x0C,
91282 -0x24,0x00,0x24,0x26,
91283 -0x02,0x80,0x05,0x3C,
91284 -0x2A,0x00,0x24,0x26,
91285 -0x18,0x3B,0xA5,0x24,
91286 -0x10,0x52,0x00,0x0C,
91287 -0x06,0x00,0x06,0x24,
91288 -0x88,0x4D,0x00,0x08,
91289 -0x18,0x00,0x15,0x24,
91290 -0xB0,0xFF,0xBD,0x27,
91291 -0x3C,0x00,0xB5,0xAF,
91292 -0x38,0x00,0xB4,0xAF,
91293 -0xFF,0xFF,0xF5,0x30,
91294 -0x25,0xB0,0x14,0x3C,
91295 -0x01,0x80,0x02,0x3C,
91296 -0x2C,0x00,0xB1,0xAF,
91297 -0x18,0x03,0x83,0x36,
91298 -0xE8,0x37,0x42,0x24,
91299 -0x20,0x00,0xB1,0x26,
91300 -0x44,0x00,0xB7,0xAF,
91301 -0x34,0x00,0xB3,0xAF,
91302 -0x21,0xB8,0x80,0x00,
91303 -0x60,0x00,0xB3,0x93,
91304 -0x21,0x20,0x20,0x02,
91305 -0x00,0x00,0x62,0xAC,
91306 -0x40,0x00,0xB6,0xAF,
91307 -0x30,0x00,0xB2,0xAF,
91308 -0x48,0x00,0xBF,0xAF,
91309 -0x28,0x00,0xB0,0xAF,
91310 -0xFF,0x00,0xB6,0x30,
91311 -0x25,0x24,0x00,0x0C,
91312 -0xFF,0x00,0xD2,0x30,
91313 -0x11,0x00,0x40,0x14,
91314 -0x20,0x00,0xA2,0xAF,
91315 -0x02,0x80,0x04,0x3C,
91316 -0x02,0x80,0x05,0x3C,
91317 -0x58,0xE2,0x84,0x24,
91318 -0x2F,0x55,0x00,0x0C,
91319 -0x30,0xEB,0xA5,0x24,
91320 -0x48,0x00,0xBF,0x8F,
91321 -0x44,0x00,0xB7,0x8F,
91322 -0x40,0x00,0xB6,0x8F,
91323 -0x3C,0x00,0xB5,0x8F,
91324 -0x38,0x00,0xB4,0x8F,
91325 -0x34,0x00,0xB3,0x8F,
91326 -0x30,0x00,0xB2,0x8F,
91327 -0x2C,0x00,0xB1,0x8F,
91328 -0x28,0x00,0xB0,0x8F,
91329 -0x08,0x00,0xE0,0x03,
91330 -0x50,0x00,0xBD,0x27,
91331 -0x08,0x00,0x43,0x8C,
91332 -0xB0,0x03,0x82,0x36,
91333 -0x02,0x80,0x10,0x3C,
91334 -0x00,0x00,0x43,0xAC,
91335 -0x20,0x00,0xA2,0x8F,
91336 -0x21,0x30,0x20,0x02,
91337 -0x21,0x28,0x00,0x00,
91338 -0x08,0x00,0x44,0x94,
91339 -0xFF,0x51,0x00,0x0C,
91340 -0x25,0x20,0x90,0x00,
91341 -0x20,0x00,0xA3,0x8F,
91342 -0x00,0x00,0x00,0x00,
91343 -0x08,0x00,0x62,0x94,
91344 -0x00,0x00,0x00,0x00,
91345 -0x25,0x88,0x50,0x00,
91346 -0x51,0x00,0x60,0x16,
91347 -0x20,0x00,0x30,0x26,
91348 -0x20,0x00,0x32,0xA6,
91349 -0x48,0x00,0x02,0x24,
91350 -0x6C,0x00,0x42,0x12,
91351 -0x50,0x00,0x82,0x36,
91352 -0x04,0x00,0x02,0x24,
91353 -0x4D,0x00,0xC2,0x16,
91354 -0x21,0x28,0xE0,0x02,
91355 -0xA4,0x00,0x02,0x24,
91356 -0x7E,0x00,0x42,0x12,
91357 -0x02,0x80,0x02,0x3C,
91358 -0x20,0x00,0xA2,0x8F,
91359 -0x25,0xB0,0x10,0x3C,
91360 -0xB0,0x03,0x10,0x36,
91361 -0x0C,0x00,0x55,0xAC,
91362 -0x20,0x00,0xA2,0x8F,
91363 -0x12,0x00,0x03,0x24,
91364 -0x21,0x28,0x00,0x00,
91365 -0x14,0x00,0x43,0xAC,
91366 -0x00,0x00,0x15,0xAE,
91367 -0x20,0x00,0xA2,0x8F,
91368 -0x08,0x00,0x06,0x24,
91369 -0x08,0x00,0x43,0x8C,
91370 -0x00,0x00,0x00,0x00,
91371 -0x00,0x00,0x03,0xAE,
91372 -0x20,0x00,0xA2,0x8F,
91373 -0x02,0x80,0x03,0x3C,
91374 -0x08,0x00,0x44,0x94,
91375 -0x00,0x00,0x00,0x00,
91376 -0x25,0x88,0x83,0x00,
91377 -0x08,0x52,0x00,0x0C,
91378 -0x21,0x20,0x20,0x02,
91379 -0x04,0x00,0x25,0x8E,
91380 -0x08,0x00,0x26,0x8E,
91381 -0x14,0x00,0x27,0x8E,
91382 -0x10,0x00,0x24,0x8E,
91383 -0xFF,0xE0,0x03,0x24,
91384 -0xFF,0xDF,0x02,0x3C,
91385 -0x24,0x28,0xA3,0x00,
91386 -0xFF,0xFF,0x42,0x34,
91387 -0xFF,0x81,0x03,0x24,
91388 -0x24,0x38,0xE3,0x00,
91389 -0x24,0x30,0xC2,0x00,
91390 -0x00,0x80,0x03,0x3C,
91391 -0x00,0x40,0x02,0x3C,
91392 -0x25,0x30,0xC2,0x00,
91393 -0x25,0x20,0x83,0x00,
91394 -0x00,0x12,0xA5,0x34,
91395 -0x20,0x00,0x02,0x24,
91396 -0x10,0x00,0x24,0xAE,
91397 -0x00,0x00,0x35,0xA6,
91398 -0x02,0x00,0x22,0xA2,
91399 -0x04,0x00,0x25,0xAE,
91400 -0x14,0x00,0x27,0xAE,
91401 -0x08,0x00,0x26,0xAE,
91402 -0x00,0x60,0x05,0x40,
91403 -0x01,0x00,0xA1,0x34,
91404 -0x01,0x00,0x21,0x38,
91405 -0x00,0x60,0x81,0x40,
91406 -0x02,0x80,0x02,0x3C,
91407 -0x20,0x00,0xA3,0x8F,
91408 -0x74,0x57,0x42,0x24,
91409 -0x04,0x00,0x44,0x8C,
91410 -0x00,0x00,0x62,0xAC,
91411 -0x04,0x00,0x43,0xAC,
91412 -0x20,0x00,0xA2,0x27,
91413 -0x00,0x00,0x83,0xAC,
91414 -0x04,0x00,0x64,0xAC,
91415 -0x00,0x00,0x02,0xAE,
91416 -0x00,0x60,0x85,0x40,
91417 -0x48,0x00,0xBF,0x8F,
91418 -0x44,0x00,0xB7,0x8F,
91419 -0x40,0x00,0xB6,0x8F,
91420 -0x3C,0x00,0xB5,0x8F,
91421 -0x38,0x00,0xB4,0x8F,
91422 -0x34,0x00,0xB3,0x8F,
91423 -0x30,0x00,0xB2,0x8F,
91424 -0x2C,0x00,0xB1,0x8F,
91425 -0x28,0x00,0xB0,0x8F,
91426 -0x08,0x00,0xE0,0x03,
91427 -0x50,0x00,0xBD,0x27,
91428 -0x00,0x10,0x42,0x36,
91429 -0x35,0x4E,0x00,0x08,
91430 -0x20,0x00,0x22,0xA6,
91431 -0x24,0x00,0x24,0x26,
91432 -0x10,0x52,0x00,0x0C,
91433 -0x06,0x00,0x06,0x24,
91434 -0x02,0x80,0x05,0x3C,
91435 -0x18,0x3B,0xA5,0x24,
91436 -0x2A,0x00,0x24,0x26,
91437 -0x10,0x52,0x00,0x0C,
91438 -0x06,0x00,0x06,0x24,
91439 -0x02,0x80,0x05,0x3C,
91440 -0x30,0x00,0x24,0x26,
91441 -0x88,0x58,0xA5,0x24,
91442 -0x10,0x52,0x00,0x0C,
91443 -0x06,0x00,0x06,0x24,
91444 -0x02,0x80,0x05,0x3C,
91445 -0x30,0x1F,0xA5,0x24,
91446 -0xF8,0x1D,0xA6,0x94,
91447 -0x00,0x00,0x00,0x00,
91448 -0x01,0x00,0xC2,0x24,
91449 -0x00,0x21,0x06,0x00,
91450 -0xFF,0xFF,0x46,0x30,
91451 -0xFF,0xFF,0x84,0x30,
91452 -0x00,0x10,0xC2,0x2C,
91453 -0x0A,0x30,0x02,0x00,
91454 -0x02,0x1A,0x04,0x00,
91455 -0x17,0x00,0x03,0xA2,
91456 -0x16,0x00,0x04,0xA2,
91457 -0x3E,0x4E,0x00,0x08,
91458 -0xF8,0x1D,0xA6,0xA4,
91459 -0x00,0x00,0x43,0x8C,
91460 -0x54,0x00,0x84,0x36,
91461 -0x58,0x00,0x85,0x36,
91462 -0x10,0x00,0xA3,0xAF,
91463 -0x00,0x00,0x82,0x8C,
91464 -0x5C,0x00,0x87,0x36,
91465 -0x2A,0x00,0x24,0x26,
91466 -0x14,0x00,0xA2,0xAF,
91467 -0x00,0x00,0xA3,0x8C,
91468 -0x06,0x00,0x06,0x24,
91469 -0x10,0x00,0xA5,0x27,
91470 -0x18,0x00,0xA3,0xAF,
91471 -0x00,0x00,0xE2,0x8C,
91472 -0x10,0x52,0x00,0x0C,
91473 -0x1C,0x00,0xA2,0xAF,
91474 -0x30,0x00,0x24,0x26,
91475 -0x18,0x00,0xA5,0x27,
91476 -0x10,0x52,0x00,0x0C,
91477 -0x06,0x00,0x06,0x24,
91478 -0x20,0x00,0x23,0x96,
91479 -0x00,0x00,0x00,0x00,
91480 -0x00,0x01,0x63,0x34,
91481 -0x38,0x4E,0x00,0x08,
91482 -0x20,0x00,0x23,0xA6,
91483 -0x80,0x58,0x43,0x94,
91484 -0x02,0x80,0x05,0x3C,
91485 -0x24,0x00,0x24,0x26,
91486 -0x00,0xC0,0x63,0x24,
91487 -0xFF,0xFF,0x63,0x30,
91488 -0x02,0x12,0x03,0x00,
91489 -0x88,0x58,0xA5,0x24,
91490 -0x03,0x00,0x02,0xA2,
91491 -0x02,0x00,0x03,0xA2,
91492 -0x10,0x52,0x00,0x0C,
91493 -0x06,0x00,0x06,0x24,
91494 -0x02,0x80,0x05,0x3C,
91495 -0x2A,0x00,0x24,0x26,
91496 -0x18,0x3B,0xA5,0x24,
91497 -0x10,0x52,0x00,0x0C,
91498 -0x06,0x00,0x06,0x24,
91499 -0x3E,0x4E,0x00,0x08,
91500 -0x00,0x00,0x00,0x00,
91501 -0xE0,0xFF,0xBD,0x27,
91502 -0x18,0x00,0xB0,0xAF,
91503 -0xFF,0x00,0x90,0x30,
91504 -0x02,0x80,0x04,0x3C,
91505 -0x21,0x28,0x00,0x02,
91506 -0x1C,0x00,0xBF,0xAF,
91507 -0x2F,0x55,0x00,0x0C,
91508 -0x64,0xE2,0x84,0x24,
91509 -0x02,0x80,0x04,0x3C,
91510 -0x88,0x58,0x84,0x24,
91511 -0x08,0x00,0x05,0x24,
91512 -0x48,0x00,0x06,0x24,
91513 -0x18,0x00,0x07,0x24,
91514 -0xFA,0x4D,0x00,0x0C,
91515 -0x10,0x00,0xB0,0xAF,
91516 -0x1C,0x00,0xBF,0x8F,
91517 -0x18,0x00,0xB0,0x8F,
91518 -0x08,0x00,0xE0,0x03,
91519 -0x20,0x00,0xBD,0x27,
91520 -0xE0,0xFF,0xBD,0x27,
91521 -0x01,0x00,0x02,0x24,
91522 -0x21,0x28,0x00,0x00,
91523 -0x90,0x00,0x06,0x24,
91524 -0x21,0x38,0x00,0x00,
91525 -0x18,0x00,0xBF,0xAF,
91526 -0x60,0x4D,0x00,0x0C,
91527 -0x10,0x00,0xA2,0xAF,
91528 -0x18,0x00,0xBF,0x8F,
91529 -0x00,0x00,0x00,0x00,
91530 -0x08,0x00,0xE0,0x03,
91531 -0x20,0x00,0xBD,0x27,
91532 -0xD8,0xFF,0xBD,0x27,
91533 -0x20,0x00,0xB0,0xAF,
91534 -0xFF,0xFF,0x05,0x24,
91535 -0xFF,0x00,0x90,0x30,
91536 -0x02,0x00,0x06,0x24,
91537 -0x24,0x00,0xBF,0xAF,
91538 -0x08,0x52,0x00,0x0C,
91539 -0x18,0x00,0xA4,0x27,
91540 -0x18,0x00,0xA4,0x27,
91541 -0x08,0x00,0x05,0x24,
91542 -0xC8,0x00,0x06,0x24,
91543 -0x21,0x38,0x00,0x00,
91544 -0x60,0x4D,0x00,0x0C,
91545 -0x10,0x00,0xB0,0xAF,
91546 -0x24,0x00,0xBF,0x8F,
91547 -0x20,0x00,0xB0,0x8F,
91548 -0x08,0x00,0xE0,0x03,
91549 -0x28,0x00,0xBD,0x27,
91550 -0xE0,0xFF,0xBD,0x27,
91551 -0x02,0x80,0x05,0x3C,
91552 -0x1C,0x00,0xBF,0xAF,
91553 -0x18,0x00,0xB0,0xAF,
91554 -0x30,0x1F,0xA5,0x24,
91555 -0x50,0x39,0xA2,0x94,
91556 -0x01,0x00,0x03,0x24,
91557 -0xFF,0x00,0x90,0x30,
91558 -0x00,0xC0,0x42,0x24,
91559 -0xFF,0xFF,0x44,0x30,
91560 -0xC2,0x34,0x00,0x0C,
91561 -0x2A,0x1C,0xA3,0xA0,
91562 -0x02,0x80,0x04,0x3C,
91563 -0x88,0x58,0x84,0x24,
91564 -0x04,0x00,0x05,0x24,
91565 -0xA4,0x00,0x06,0x24,
91566 -0x10,0x00,0x07,0x24,
91567 -0xFA,0x4D,0x00,0x0C,
91568 -0x10,0x00,0xB0,0xAF,
91569 -0x1C,0x00,0xBF,0x8F,
91570 -0x18,0x00,0xB0,0x8F,
91571 -0x08,0x00,0xE0,0x03,
91572 -0x20,0x00,0xBD,0x27,
91573 -0x08,0x00,0xE0,0x03,
91574 -0x21,0x10,0x80,0x00,
91575 -0x08,0x00,0xE0,0x03,
91576 -0x08,0x00,0x82,0x24,
91577 -0xE0,0xFF,0xBD,0x27,
91578 -0x18,0x00,0xBF,0xAF,
91579 -0x17,0x4F,0x00,0x0C,
91580 -0x74,0x00,0x84,0x24,
91581 -0x21,0x28,0x40,0x00,
91582 -0x10,0x00,0xA4,0x27,
91583 -0x10,0x52,0x00,0x0C,
91584 -0x02,0x00,0x06,0x24,
91585 -0x10,0x00,0xA2,0x97,
91586 -0x18,0x00,0xBF,0x8F,
91587 -0x00,0x00,0x00,0x00,
91588 -0x08,0x00,0xE0,0x03,
91589 -0x20,0x00,0xBD,0x27,
91590 -0xE0,0xFF,0xBD,0x27,
91591 -0x18,0x00,0xBF,0xAF,
91592 -0x17,0x4F,0x00,0x0C,
91593 -0x10,0x00,0xA5,0xA7,
91594 -0x21,0x20,0x40,0x00,
91595 -0x10,0x00,0xA5,0x27,
91596 -0x10,0x52,0x00,0x0C,
91597 -0x02,0x00,0x06,0x24,
91598 -0x18,0x00,0xBF,0x8F,
91599 -0x00,0x00,0x00,0x00,
91600 -0x08,0x00,0xE0,0x03,
91601 -0x20,0x00,0xBD,0x27,
91602 -0x08,0x00,0xE0,0x03,
91603 -0x0A,0x00,0x82,0x24,
91604 -0xE0,0xFF,0xBD,0x27,
91605 -0x18,0x00,0xBF,0xAF,
91606 -0x32,0x4F,0x00,0x0C,
91607 -0x74,0x00,0x84,0x24,
91608 -0x21,0x28,0x40,0x00,
91609 -0x10,0x00,0xA4,0x27,
91610 -0x10,0x52,0x00,0x0C,
91611 -0x02,0x00,0x06,0x24,
91612 -0x10,0x00,0xA2,0x97,
91613 -0x18,0x00,0xBF,0x8F,
91614 -0x00,0x00,0x00,0x00,
91615 -0x08,0x00,0xE0,0x03,
91616 -0x20,0x00,0xBD,0x27,
91617 -0xE0,0xFF,0xBD,0x27,
91618 -0x10,0x00,0xB0,0xAF,
91619 -0x21,0x80,0x80,0x00,
91620 -0x00,0x00,0x05,0xA2,
91621 -0x01,0x00,0x06,0xA2,
91622 -0x18,0x00,0xB2,0xAF,
91623 -0x14,0x00,0xB1,0xAF,
91624 -0x1C,0x00,0xBF,0xAF,
91625 -0x21,0x88,0xC0,0x00,
91626 -0x02,0x00,0x84,0x24,
91627 -0x30,0x00,0xB2,0x8F,
91628 -0x0D,0x00,0xC0,0x14,
91629 -0x21,0x28,0xE0,0x00,
91630 -0x00,0x00,0x43,0x8E,
91631 -0x21,0x10,0x11,0x02,
91632 -0x1C,0x00,0xBF,0x8F,
91633 -0x21,0x18,0x71,0x00,
91634 -0x02,0x00,0x63,0x24,
91635 -0x00,0x00,0x43,0xAE,
91636 -0x14,0x00,0xB1,0x8F,
91637 -0x18,0x00,0xB2,0x8F,
91638 -0x10,0x00,0xB0,0x8F,
91639 -0x02,0x00,0x42,0x24,
91640 -0x08,0x00,0xE0,0x03,
91641 -0x20,0x00,0xBD,0x27,
91642 -0x10,0x52,0x00,0x0C,
91643 -0x00,0x00,0x00,0x00,
91644 -0x00,0x00,0x43,0x8E,
91645 -0x21,0x10,0x11,0x02,
91646 -0x1C,0x00,0xBF,0x8F,
91647 -0x21,0x18,0x71,0x00,
91648 -0x02,0x00,0x63,0x24,
91649 -0x00,0x00,0x43,0xAE,
91650 -0x14,0x00,0xB1,0x8F,
91651 -0x18,0x00,0xB2,0x8F,
91652 -0x10,0x00,0xB0,0x8F,
91653 -0x02,0x00,0x42,0x24,
91654 -0x08,0x00,0xE0,0x03,
91655 -0x20,0x00,0xBD,0x27,
91656 -0xE0,0xFF,0xBD,0x27,
91657 -0x10,0x00,0xB0,0xAF,
91658 -0x21,0x80,0xA0,0x00,
91659 -0x18,0x00,0xB2,0xAF,
91660 -0x21,0x28,0xC0,0x00,
91661 -0x21,0x90,0xE0,0x00,
91662 -0x21,0x30,0x00,0x02,
91663 -0x1C,0x00,0xBF,0xAF,
91664 -0x14,0x00,0xB1,0xAF,
91665 -0x10,0x52,0x00,0x0C,
91666 -0x21,0x88,0x80,0x00,
91667 -0x00,0x00,0x43,0x8E,
91668 -0x21,0x10,0x30,0x02,
91669 -0x1C,0x00,0xBF,0x8F,
91670 -0x21,0x18,0x70,0x00,
91671 -0x00,0x00,0x43,0xAE,
91672 -0x14,0x00,0xB1,0x8F,
91673 -0x18,0x00,0xB2,0x8F,
91674 -0x10,0x00,0xB0,0x8F,
91675 -0x08,0x00,0xE0,0x03,
91676 -0x20,0x00,0xBD,0x27,
91677 -0x7F,0x00,0x84,0x30,
91678 -0x6D,0x00,0x82,0x2C,
91679 -0x0A,0x00,0x40,0x10,
91680 -0x21,0x28,0x00,0x00,
91681 -0x02,0x80,0x03,0x3C,
91682 -0x80,0x10,0x04,0x00,
91683 -0x58,0xEB,0x63,0x24,
91684 -0x21,0x10,0x43,0x00,
91685 -0x00,0x00,0x44,0x8C,
91686 -0x00,0x00,0x00,0x00,
91687 -0x08,0x00,0x80,0x00,
91688 -0x00,0x00,0x00,0x00,
91689 -0x21,0x28,0x00,0x00,
91690 -0x08,0x00,0xE0,0x03,
91691 -0x21,0x10,0xA0,0x00,
91692 -0x0B,0x00,0x05,0x24,
91693 -0x08,0x00,0xE0,0x03,
91694 -0x21,0x10,0xA0,0x00,
91695 -0x0A,0x00,0x05,0x24,
91696 -0x08,0x00,0xE0,0x03,
91697 -0x21,0x10,0xA0,0x00,
91698 -0x09,0x00,0x05,0x24,
91699 -0x08,0x00,0xE0,0x03,
91700 -0x21,0x10,0xA0,0x00,
91701 -0x08,0x00,0x05,0x24,
91702 -0x08,0x00,0xE0,0x03,
91703 -0x21,0x10,0xA0,0x00,
91704 -0x07,0x00,0x05,0x24,
91705 -0x08,0x00,0xE0,0x03,
91706 -0x21,0x10,0xA0,0x00,
91707 -0x06,0x00,0x05,0x24,
91708 -0x08,0x00,0xE0,0x03,
91709 -0x21,0x10,0xA0,0x00,
91710 -0x03,0x00,0x05,0x24,
91711 -0x08,0x00,0xE0,0x03,
91712 -0x21,0x10,0xA0,0x00,
91713 -0x05,0x00,0x05,0x24,
91714 -0x08,0x00,0xE0,0x03,
91715 -0x21,0x10,0xA0,0x00,
91716 -0x04,0x00,0x05,0x24,
91717 -0x08,0x00,0xE0,0x03,
91718 -0x21,0x10,0xA0,0x00,
91719 -0x02,0x00,0x05,0x24,
91720 -0x08,0x00,0xE0,0x03,
91721 -0x21,0x10,0xA0,0x00,
91722 -0x01,0x00,0x05,0x24,
91723 -0x08,0x00,0xE0,0x03,
91724 -0x21,0x10,0xA0,0x00,
91725 -0x7F,0x00,0x84,0x30,
91726 -0x0C,0x00,0x82,0x2C,
91727 -0x0A,0x00,0x40,0x10,
91728 -0x21,0x18,0x00,0x00,
91729 -0x02,0x80,0x03,0x3C,
91730 -0x80,0x10,0x04,0x00,
91731 -0x0C,0xED,0x63,0x24,
91732 -0x21,0x10,0x43,0x00,
91733 -0x00,0x00,0x44,0x8C,
91734 -0x00,0x00,0x00,0x00,
91735 -0x08,0x00,0x80,0x00,
91736 -0x00,0x00,0x00,0x00,
91737 -0x6C,0x00,0x03,0x24,
91738 -0x08,0x00,0xE0,0x03,
91739 -0x21,0x10,0x60,0x00,
91740 -0x60,0x00,0x03,0x24,
91741 -0x08,0x00,0xE0,0x03,
91742 -0x21,0x10,0x60,0x00,
91743 -0x48,0x00,0x03,0x24,
91744 -0x08,0x00,0xE0,0x03,
91745 -0x21,0x10,0x60,0x00,
91746 -0x30,0x00,0x03,0x24,
91747 -0x08,0x00,0xE0,0x03,
91748 -0x21,0x10,0x60,0x00,
91749 -0x24,0x00,0x03,0x24,
91750 -0x08,0x00,0xE0,0x03,
91751 -0x21,0x10,0x60,0x00,
91752 -0x18,0x00,0x03,0x24,
91753 -0x08,0x00,0xE0,0x03,
91754 -0x21,0x10,0x60,0x00,
91755 -0x12,0x00,0x03,0x24,
91756 -0x08,0x00,0xE0,0x03,
91757 -0x21,0x10,0x60,0x00,
91758 -0x0C,0x00,0x03,0x24,
91759 -0x08,0x00,0xE0,0x03,
91760 -0x21,0x10,0x60,0x00,
91761 -0x16,0x00,0x03,0x24,
91762 -0x08,0x00,0xE0,0x03,
91763 -0x21,0x10,0x60,0x00,
91764 -0x0B,0x00,0x03,0x24,
91765 -0x08,0x00,0xE0,0x03,
91766 -0x21,0x10,0x60,0x00,
91767 -0x04,0x00,0x03,0x24,
91768 -0x08,0x00,0xE0,0x03,
91769 -0x21,0x10,0x60,0x00,
91770 -0x02,0x00,0x03,0x24,
91771 -0x08,0x00,0xE0,0x03,
91772 -0x21,0x10,0x60,0x00,
91773 -0xC8,0xFF,0xBD,0x27,
91774 -0x24,0x00,0xB5,0xAF,
91775 -0x02,0x80,0x15,0x3C,
91776 -0x2C,0x00,0xB7,0xAF,
91777 -0x28,0x00,0xB6,0xAF,
91778 -0x20,0x00,0xB4,0xAF,
91779 -0x1C,0x00,0xB3,0xAF,
91780 -0x30,0x00,0xBF,0xAF,
91781 -0x18,0x00,0xB2,0xAF,
91782 -0x14,0x00,0xB1,0xAF,
91783 -0x10,0x00,0xB0,0xAF,
91784 -0x21,0xB8,0x80,0x00,
91785 -0x21,0xA0,0x00,0x00,
91786 -0x21,0x98,0x00,0x00,
91787 -0x30,0x1F,0xB6,0x26,
91788 -0x30,0x1F,0xA2,0x26,
91789 -0x21,0x10,0x62,0x02,
91790 -0xFB,0x1B,0x51,0x90,
91791 -0xFE,0x00,0x03,0x24,
91792 -0x1E,0x00,0x23,0x12,
91793 -0xFF,0x00,0x02,0x24,
91794 -0x21,0x00,0x22,0x12,
91795 -0x21,0x10,0x80,0x02,
91796 -0xAD,0x4F,0x00,0x0C,
91797 -0x21,0x20,0x20,0x02,
91798 -0x21,0x88,0x40,0x00,
91799 -0x21,0x80,0x00,0x00,
91800 -0x21,0x90,0xC0,0x02,
91801 -0x21,0x10,0x12,0x02,
91802 -0xEE,0x1B,0x44,0x90,
91803 -0x00,0x00,0x00,0x00,
91804 -0x02,0x00,0x82,0x24,
91805 -0xFF,0x00,0x42,0x30,
91806 -0x02,0x00,0x42,0x2C,
91807 -0x05,0x00,0x40,0x14,
91808 -0x01,0x00,0x10,0x26,
91809 -0xAD,0x4F,0x00,0x0C,
91810 -0x00,0x00,0x00,0x00,
91811 -0x05,0x00,0x51,0x10,
91812 -0x01,0x00,0x03,0x24,
91813 -0x0D,0x00,0x02,0x2A,
91814 -0xF3,0xFF,0x40,0x14,
91815 -0x21,0x10,0x12,0x02,
91816 -0x21,0x18,0x00,0x00,
91817 -0x01,0x00,0x02,0x24,
91818 -0x14,0x00,0x62,0x10,
91819 -0xFF,0x00,0x22,0x32,
91820 -0x21,0x10,0xF4,0x02,
91821 -0x00,0x00,0x51,0xA0,
91822 -0x01,0x00,0x94,0x26,
91823 -0x01,0x00,0x73,0x26,
91824 -0x0D,0x00,0x62,0x2A,
91825 -0xDB,0xFF,0x40,0x14,
91826 -0x30,0x1F,0xA2,0x26,
91827 -0x21,0x10,0x80,0x02,
91828 -0x30,0x00,0xBF,0x8F,
91829 -0x2C,0x00,0xB7,0x8F,
91830 -0x28,0x00,0xB6,0x8F,
91831 -0x24,0x00,0xB5,0x8F,
91832 -0x20,0x00,0xB4,0x8F,
91833 -0x1C,0x00,0xB3,0x8F,
91834 -0x18,0x00,0xB2,0x8F,
91835 -0x14,0x00,0xB1,0x8F,
91836 -0x10,0x00,0xB0,0x8F,
91837 -0x08,0x00,0xE0,0x03,
91838 -0x38,0x00,0xBD,0x27,
91839 -0x0C,0x50,0x00,0x08,
91840 -0x80,0x00,0x51,0x34,
91841 -0xD0,0xFF,0xBD,0x27,
91842 -0x24,0x00,0xB1,0xAF,
91843 -0x20,0x00,0xB0,0xAF,
91844 -0x21,0x88,0x80,0x00,
91845 -0x21,0x80,0xA0,0x00,
91846 -0x0D,0x00,0x06,0x24,
91847 -0x21,0x28,0x00,0x00,
91848 -0x28,0x00,0xBF,0xAF,
91849 -0xFF,0x51,0x00,0x0C,
91850 -0x10,0x00,0xA4,0x27,
91851 -0xDD,0x4F,0x00,0x0C,
91852 -0x10,0x00,0xA4,0x27,
91853 -0x00,0x00,0x02,0xAE,
91854 -0x21,0x20,0x20,0x02,
91855 -0x10,0x00,0xA5,0x27,
91856 -0x10,0x52,0x00,0x0C,
91857 -0x21,0x30,0x40,0x00,
91858 -0x28,0x00,0xBF,0x8F,
91859 -0x24,0x00,0xB1,0x8F,
91860 -0x20,0x00,0xB0,0x8F,
91861 -0x08,0x00,0xE0,0x03,
91862 -0x30,0x00,0xBD,0x27,
91863 -0x21,0x28,0x00,0x00,
91864 -0x21,0x10,0x85,0x00,
91865 -0x00,0x00,0x43,0x90,
91866 -0x00,0x00,0x00,0x00,
91867 -0x04,0x00,0x60,0x10,
91868 -0x0D,0x00,0xA2,0x2C,
91869 -0xFA,0xFF,0x40,0x14,
91870 -0x01,0x00,0xA5,0x24,
91871 -0xFF,0xFF,0xA5,0x24,
91872 -0x08,0x00,0xE0,0x03,
91873 -0x21,0x10,0xA0,0x00,
91874 -0x00,0x00,0x82,0x94,
91875 -0x21,0x30,0x80,0x00,
91876 -0x10,0x00,0x85,0x24,
91877 -0x42,0x1A,0x02,0x00,
91878 -0xC2,0x11,0x02,0x00,
91879 -0x02,0x00,0x42,0x30,
91880 -0x01,0x00,0x63,0x30,
91881 -0x25,0x18,0x43,0x00,
91882 -0x01,0x00,0x04,0x24,
91883 -0x07,0x00,0x64,0x10,
91884 -0x00,0x00,0x00,0x00,
91885 -0x05,0x00,0x60,0x10,
91886 -0x0A,0x00,0xC5,0x24,
91887 -0x02,0x00,0x02,0x24,
91888 -0x02,0x00,0x62,0x10,
91889 -0x00,0x00,0x00,0x00,
91890 -0x18,0x00,0xC5,0x24,
91891 -0x08,0x00,0xE0,0x03,
91892 -0x21,0x10,0xA0,0x00,
91893 -0x00,0x00,0x82,0x94,
91894 -0x21,0x30,0x80,0x00,
91895 -0x04,0x00,0x85,0x24,
91896 -0x42,0x1A,0x02,0x00,
91897 -0xC2,0x11,0x02,0x00,
91898 -0x02,0x00,0x42,0x30,
91899 -0x01,0x00,0x63,0x30,
91900 -0x25,0x18,0x43,0x00,
91901 -0x01,0x00,0x04,0x24,
91902 -0x04,0x00,0x64,0x10,
91903 -0x00,0x00,0x00,0x00,
91904 -0x02,0x00,0x60,0x10,
91905 -0x00,0x00,0x00,0x00,
91906 -0x10,0x00,0xC5,0x24,
91907 -0x08,0x00,0xE0,0x03,
91908 -0x21,0x10,0xA0,0x00,
91909 -0x13,0x00,0xA0,0x18,
91910 -0x21,0x30,0x00,0x00,
91911 -0x02,0x00,0x07,0x24,
91912 -0x04,0x00,0x08,0x24,
91913 -0x0B,0x00,0x09,0x24,
91914 -0x16,0x00,0x0A,0x24,
91915 -0x21,0x10,0x86,0x00,
91916 -0x00,0x00,0x43,0x90,
91917 -0x01,0x00,0xC6,0x24,
91918 -0x7F,0x00,0x63,0x30,
91919 -0x07,0x00,0x67,0x10,
91920 -0x2A,0x10,0xC5,0x00,
91921 -0x05,0x00,0x68,0x10,
91922 -0x00,0x00,0x00,0x00,
91923 -0x03,0x00,0x69,0x10,
91924 -0x00,0x00,0x00,0x00,
91925 -0x05,0x00,0x6A,0x14,
91926 -0x00,0x00,0x00,0x00,
91927 -0xF3,0xFF,0x40,0x14,
91928 -0x00,0x00,0x00,0x00,
91929 -0x08,0x00,0xE0,0x03,
91930 -0x01,0x00,0x02,0x24,
91931 -0x08,0x00,0xE0,0x03,
91932 -0x21,0x10,0x00,0x00,
91933 -0xE8,0xFF,0xBD,0x27,
91934 -0x10,0x00,0xB0,0xAF,
91935 -0x14,0x00,0xBF,0xAF,
91936 -0x02,0x80,0x02,0x3C,
91937 -0x80,0x5D,0x43,0x8C,
91938 -0x08,0x00,0x10,0x24,
91939 -0x06,0x00,0xA0,0x14,
91940 -0x0A,0x80,0x03,0x00,
91941 -0x21,0x10,0x00,0x02,
91942 -0x14,0x00,0xBF,0x8F,
91943 -0x10,0x00,0xB0,0x8F,
91944 -0x08,0x00,0xE0,0x03,
91945 -0x18,0x00,0xBD,0x27,
91946 -0x65,0x50,0x00,0x0C,
91947 -0x00,0x00,0x00,0x00,
91948 -0x01,0x00,0x03,0x36,
91949 -0x01,0x00,0x42,0x38,
91950 -0x03,0x00,0x04,0x36,
91951 -0x21,0x80,0x60,0x00,
91952 -0x0B,0x80,0x82,0x00,
91953 -0x21,0x10,0x00,0x02,
91954 -0x14,0x00,0xBF,0x8F,
91955 -0x10,0x00,0xB0,0x8F,
91956 -0x08,0x00,0xE0,0x03,
91957 -0x18,0x00,0xBD,0x27,
91958 -0xD8,0xFF,0xBD,0x27,
91959 -0x14,0x00,0xB1,0xAF,
91960 -0x0E,0x00,0xA3,0x2C,
91961 -0x21,0x88,0xA0,0x00,
91962 -0x0D,0x00,0x02,0x24,
91963 -0x0A,0x88,0x43,0x00,
91964 -0x1C,0x00,0xB3,0xAF,
91965 -0x18,0x00,0xB2,0xAF,
91966 -0x10,0x00,0xB0,0xAF,
91967 -0x24,0x00,0xBF,0xAF,
91968 -0x20,0x00,0xB4,0xAF,
91969 -0x21,0x98,0x80,0x00,
91970 -0x21,0x90,0x00,0x00,
91971 -0x15,0x00,0x20,0x12,
91972 -0x21,0x80,0x00,0x00,
91973 -0xAA,0x50,0x00,0x08,
91974 -0x01,0x00,0x14,0x24,
91975 -0x2B,0x10,0x11,0x02,
91976 -0x11,0x00,0x40,0x10,
91977 -0x21,0x10,0x40,0x02,
91978 -0x21,0x18,0x70,0x02,
91979 -0x00,0x00,0x62,0x90,
91980 -0x00,0x00,0x00,0x00,
91981 -0xFF,0x00,0x44,0x30,
91982 -0x00,0x16,0x02,0x00,
91983 -0x03,0x16,0x02,0x00,
91984 -0xF6,0xFF,0x41,0x04,
91985 -0x01,0x00,0x10,0x26,
91986 -0x7D,0x4F,0x00,0x0C,
91987 -0x00,0x00,0x00,0x00,
91988 -0x04,0x10,0x54,0x00,
91989 -0x25,0x90,0x42,0x02,
91990 -0x2B,0x10,0x11,0x02,
91991 -0xF3,0xFF,0x40,0x14,
91992 -0x21,0x18,0x70,0x02,
91993 -0x21,0x10,0x40,0x02,
91994 -0x24,0x00,0xBF,0x8F,
91995 -0x20,0x00,0xB4,0x8F,
91996 -0x1C,0x00,0xB3,0x8F,
91997 -0x18,0x00,0xB2,0x8F,
91998 -0x14,0x00,0xB1,0x8F,
91999 -0x10,0x00,0xB0,0x8F,
92000 -0x08,0x00,0xE0,0x03,
92001 -0x28,0x00,0xBD,0x27,
92002 -0xD8,0xFF,0xBD,0x27,
92003 -0x14,0x00,0xB1,0xAF,
92004 -0x0E,0x00,0xA3,0x2C,
92005 -0x21,0x88,0xA0,0x00,
92006 -0x0D,0x00,0x02,0x24,
92007 -0x0A,0x88,0x43,0x00,
92008 -0x20,0x00,0xB4,0xAF,
92009 -0x18,0x00,0xB2,0xAF,
92010 -0x10,0x00,0xB0,0xAF,
92011 -0x24,0x00,0xBF,0xAF,
92012 -0x1C,0x00,0xB3,0xAF,
92013 -0x21,0xA0,0x80,0x00,
92014 -0x21,0x90,0x00,0x00,
92015 -0x0A,0x00,0x20,0x12,
92016 -0x21,0x80,0x00,0x00,
92017 -0x01,0x00,0x13,0x24,
92018 -0x21,0x10,0x90,0x02,
92019 -0x00,0x00,0x44,0x90,
92020 -0x7D,0x4F,0x00,0x0C,
92021 -0x01,0x00,0x10,0x26,
92022 -0x04,0x10,0x53,0x00,
92023 -0x2B,0x18,0x11,0x02,
92024 -0xF9,0xFF,0x60,0x14,
92025 -0x25,0x90,0x42,0x02,
92026 -0x21,0x10,0x40,0x02,
92027 -0x24,0x00,0xBF,0x8F,
92028 -0x20,0x00,0xB4,0x8F,
92029 -0x1C,0x00,0xB3,0x8F,
92030 -0x18,0x00,0xB2,0x8F,
92031 -0x14,0x00,0xB1,0x8F,
92032 -0x10,0x00,0xB0,0x8F,
92033 -0x08,0x00,0xE0,0x03,
92034 -0x28,0x00,0xBD,0x27,
92035 -0xE8,0xFF,0xBD,0x27,
92036 -0xFF,0xFF,0x02,0x24,
92037 -0x10,0x00,0xB0,0xAF,
92038 -0x14,0x00,0xBF,0xAF,
92039 -0x21,0x30,0xA0,0x00,
92040 -0x1B,0x00,0x82,0x10,
92041 -0x20,0x00,0x10,0x24,
92042 -0x20,0x00,0x82,0x28,
92043 -0x06,0x00,0x40,0x14,
92044 -0x80,0x18,0x04,0x00,
92045 -0x21,0x10,0x00,0x02,
92046 -0x14,0x00,0xBF,0x8F,
92047 -0x10,0x00,0xB0,0x8F,
92048 -0x08,0x00,0xE0,0x03,
92049 -0x18,0x00,0xBD,0x27,
92050 -0x21,0x18,0x64,0x00,
92051 -0x21,0x80,0x80,0x00,
92052 -0x02,0x80,0x02,0x3C,
92053 -0x02,0x80,0x04,0x3C,
92054 -0xC0,0x18,0x03,0x00,
92055 -0x30,0x1F,0x42,0x24,
92056 -0x2B,0x3D,0x84,0x24,
92057 -0x21,0x20,0x64,0x00,
92058 -0x21,0x18,0x62,0x00,
92059 -0x01,0x00,0x02,0x24,
92060 -0x06,0x00,0x06,0x24,
92061 -0x10,0x52,0x00,0x0C,
92062 -0xFA,0x1D,0x62,0xA0,
92063 -0x21,0x10,0x00,0x02,
92064 -0x14,0x00,0xBF,0x8F,
92065 -0x10,0x00,0xB0,0x8F,
92066 -0x08,0x00,0xE0,0x03,
92067 -0x18,0x00,0xBD,0x27,
92068 -0x02,0x80,0x02,0x3C,
92069 -0x30,0x1F,0x42,0x24,
92070 -0xC8,0x00,0x47,0x24,
92071 -0x05,0x00,0x10,0x24,
92072 -0xC2,0x1E,0x43,0x24,
92073 -0x10,0x51,0x00,0x08,
92074 -0xC8,0x00,0x05,0x24,
92075 -0x01,0x00,0x10,0x26,
92076 -0x20,0x00,0x02,0x2E,
92077 -0x28,0x00,0xA5,0x24,
92078 -0xDE,0xFF,0x40,0x10,
92079 -0x28,0x00,0xE7,0x24,
92080 -0x00,0x00,0x62,0x90,
92081 -0x00,0x00,0x00,0x00,
92082 -0xF8,0xFF,0x40,0x14,
92083 -0x28,0x00,0x63,0x24,
92084 -0x02,0x80,0x04,0x3C,
92085 -0x2B,0x3D,0x84,0x24,
92086 -0x01,0x00,0x02,0x24,
92087 -0x21,0x20,0xA4,0x00,
92088 -0xFA,0x1D,0xE2,0xA0,
92089 -0x21,0x28,0xC0,0x00,
92090 -0x10,0x52,0x00,0x0C,
92091 -0x06,0x00,0x06,0x24,
92092 -0x00,0x51,0x00,0x08,
92093 -0x21,0x10,0x00,0x02,
92094 -0xE0,0xFF,0xBD,0x27,
92095 -0x18,0x00,0xB2,0xAF,
92096 -0x14,0x00,0xB1,0xAF,
92097 -0x30,0x00,0xB2,0x8F,
92098 -0x21,0x88,0x80,0x00,
92099 -0x21,0x20,0xA0,0x00,
92100 -0x21,0x28,0x20,0x02,
92101 -0x10,0x00,0xB0,0xAF,
92102 -0x1C,0x00,0xBF,0xAF,
92103 -0xE3,0x50,0x00,0x0C,
92104 -0xFF,0xFF,0xF0,0x30,
92105 -0x20,0x00,0x03,0x24,
92106 -0x21,0x20,0x40,0x00,
92107 -0x21,0x28,0x00,0x02,
92108 -0x21,0x30,0x20,0x02,
92109 -0x07,0x00,0x43,0x10,
92110 -0x21,0x38,0x40,0x02,
92111 -0x1C,0x00,0xBF,0x8F,
92112 -0x18,0x00,0xB2,0x8F,
92113 -0x14,0x00,0xB1,0x8F,
92114 -0x10,0x00,0xB0,0x8F,
92115 -0x4E,0x23,0x00,0x08,
92116 -0x20,0x00,0xBD,0x27,
92117 -0x1C,0x00,0xBF,0x8F,
92118 -0x18,0x00,0xB2,0x8F,
92119 -0x14,0x00,0xB1,0x8F,
92120 -0x10,0x00,0xB0,0x8F,
92121 -0x08,0x00,0xE0,0x03,
92122 -0x20,0x00,0xBD,0x27,
92123 -0xD0,0xFF,0xBD,0x27,
92124 -0x02,0x80,0x02,0x3C,
92125 -0x02,0x80,0x03,0x3C,
92126 -0x24,0x00,0xB5,0xAF,
92127 -0x20,0x00,0xB4,0xAF,
92128 -0x1C,0x00,0xB3,0xAF,
92129 -0x18,0x00,0xB2,0xAF,
92130 -0x14,0x00,0xB1,0xAF,
92131 -0x10,0x00,0xB0,0xAF,
92132 -0x21,0xA8,0x80,0x00,
92133 -0x30,0x1F,0x54,0x24,
92134 -0x2B,0x3D,0x73,0x24,
92135 -0x05,0x00,0x11,0x24,
92136 -0x01,0x00,0x12,0x24,
92137 -0xC8,0x00,0x10,0x24,
92138 -0x50,0x51,0x00,0x08,
92139 -0x28,0x00,0xBF,0xAF,
92140 -0x01,0x00,0x31,0x26,
92141 -0x20,0x00,0x22,0x2A,
92142 -0x0E,0x00,0x40,0x10,
92143 -0x21,0x10,0x20,0x02,
92144 -0x21,0x10,0x14,0x02,
92145 -0xFA,0x1D,0x43,0x90,
92146 -0x21,0x20,0x13,0x02,
92147 -0x21,0x28,0xA0,0x02,
92148 -0x06,0x00,0x06,0x24,
92149 -0xF6,0xFF,0x72,0x14,
92150 -0x28,0x00,0x10,0x26,
92151 -0x39,0x52,0x00,0x0C,
92152 -0x00,0x00,0x00,0x00,
92153 -0xF3,0xFF,0x40,0x14,
92154 -0x01,0x00,0x31,0x26,
92155 -0xFF,0xFF,0x31,0x26,
92156 -0x21,0x10,0x20,0x02,
92157 -0x28,0x00,0xBF,0x8F,
92158 -0x24,0x00,0xB5,0x8F,
92159 -0x20,0x00,0xB4,0x8F,
92160 -0x1C,0x00,0xB3,0x8F,
92161 -0x18,0x00,0xB2,0x8F,
92162 -0x14,0x00,0xB1,0x8F,
92163 -0x10,0x00,0xB0,0x8F,
92164 -0x08,0x00,0xE0,0x03,
92165 -0x30,0x00,0xBD,0x27,
92166 -0xD0,0xFF,0xBD,0x27,
92167 -0x02,0x80,0x02,0x3C,
92168 -0x02,0x80,0x03,0x3C,
92169 -0x28,0x00,0xB6,0xAF,
92170 -0x24,0x00,0xB5,0xAF,
92171 -0x20,0x00,0xB4,0xAF,
92172 -0x1C,0x00,0xB3,0xAF,
92173 -0x14,0x00,0xB1,0xAF,
92174 -0x10,0x00,0xB0,0xAF,
92175 -0x21,0x98,0x80,0x00,
92176 -0x30,0x1F,0x56,0x24,
92177 -0x2B,0x3D,0x75,0x24,
92178 -0x21,0x88,0x00,0x00,
92179 -0x01,0x00,0x14,0x24,
92180 -0x21,0x80,0x00,0x00,
92181 -0x2C,0x00,0xBF,0xAF,
92182 -0x7C,0x51,0x00,0x08,
92183 -0x18,0x00,0xB2,0xAF,
92184 -0x01,0x00,0x31,0x26,
92185 -0x20,0x00,0x22,0x2A,
92186 -0x1E,0x00,0x40,0x10,
92187 -0x00,0x00,0x00,0x00,
92188 -0x21,0x90,0x16,0x02,
92189 -0xFA,0x1D,0x42,0x92,
92190 -0x21,0x20,0x15,0x02,
92191 -0x21,0x28,0x60,0x02,
92192 -0x06,0x00,0x06,0x24,
92193 -0xF6,0xFF,0x54,0x14,
92194 -0x28,0x00,0x10,0x26,
92195 -0x39,0x52,0x00,0x0C,
92196 -0x00,0x00,0x00,0x00,
92197 -0xF3,0xFF,0x40,0x14,
92198 -0x01,0x00,0x31,0x26,
92199 -0xFF,0xFF,0x31,0x26,
92200 -0x02,0x80,0x06,0x3C,
92201 -0x02,0x80,0x07,0x3C,
92202 -0x21,0x20,0x20,0x02,
92203 -0xFA,0x1D,0x40,0xA2,
92204 -0x2C,0x00,0xBF,0x8F,
92205 -0x28,0x00,0xB6,0x8F,
92206 -0x24,0x00,0xB5,0x8F,
92207 -0x20,0x00,0xB4,0x8F,
92208 -0x1C,0x00,0xB3,0x8F,
92209 -0x18,0x00,0xB2,0x8F,
92210 -0x14,0x00,0xB1,0x8F,
92211 -0x10,0x00,0xB0,0x8F,
92212 -0xE8,0xDD,0xC6,0x24,
92213 -0xD8,0xDD,0xE7,0x24,
92214 -0x21,0x28,0x00,0x00,
92215 -0x4E,0x23,0x00,0x08,
92216 -0x30,0x00,0xBD,0x27,
92217 -0x2C,0x00,0xBF,0x8F,
92218 -0x28,0x00,0xB6,0x8F,
92219 -0x24,0x00,0xB5,0x8F,
92220 -0x20,0x00,0xB4,0x8F,
92221 -0x1C,0x00,0xB3,0x8F,
92222 -0x18,0x00,0xB2,0x8F,
92223 -0x14,0x00,0xB1,0x8F,
92224 -0x10,0x00,0xB0,0x8F,
92225 -0x08,0x00,0xE0,0x03,
92226 -0x30,0x00,0xBD,0x27,
92227 -0xC8,0xFF,0xBD,0x27,
92228 -0x02,0x80,0x02,0x3C,
92229 -0x18,0x00,0xB2,0xAF,
92230 -0x30,0x1F,0x52,0x24,
92231 -0x30,0x00,0xBE,0xAF,
92232 -0x2C,0x00,0xB7,0xAF,
92233 -0x28,0x00,0xB6,0xAF,
92234 -0x24,0x00,0xB5,0xAF,
92235 -0x20,0x00,0xB4,0xAF,
92236 -0x1C,0x00,0xB3,0xAF,
92237 -0x14,0x00,0xB1,0xAF,
92238 -0x10,0x00,0xB0,0xAF,
92239 -0x34,0x00,0xBF,0xAF,
92240 -0x21,0x80,0x00,0x00,
92241 -0x02,0x80,0x1E,0x3C,
92242 -0x02,0x80,0x17,0x3C,
92243 -0x02,0x80,0x16,0x3C,
92244 -0x01,0x00,0x13,0x24,
92245 -0xFF,0xF7,0x15,0x24,
92246 -0xFF,0xEF,0x14,0x24,
92247 -0x21,0x88,0x40,0x02,
92248 -0xFA,0x1D,0x22,0x92,
92249 -0xC0,0x48,0x10,0x00,
92250 -0xEA,0x5D,0xC7,0x93,
92251 -0x41,0x00,0x53,0x10,
92252 -0x21,0x30,0x32,0x01,
92253 -0xE8,0x22,0xC2,0x8C,
92254 -0xBF,0xFF,0x03,0x24,
92255 -0x24,0x28,0x43,0x00,
92256 -0x80,0x07,0xA3,0x34,
92257 -0x24,0x10,0x75,0x00,
92258 -0x31,0x00,0xF3,0x10,
92259 -0x24,0x10,0x54,0x00,
92260 -0xE8,0x22,0xC2,0xAC,
92261 -0x21,0x48,0x32,0x01,
92262 -0xE8,0x22,0x23,0x8D,
92263 -0xFD,0xFF,0x02,0x3C,
92264 -0xFF,0xFF,0x42,0x34,
92265 -0x24,0x18,0x62,0x00,
92266 -0xFB,0xFF,0x02,0x3C,
92267 -0xFF,0xFF,0x42,0x34,
92268 -0x24,0x18,0x62,0x00,
92269 -0xE7,0xFF,0x02,0x3C,
92270 -0xFF,0xFF,0x42,0x34,
92271 -0x24,0x18,0x62,0x00,
92272 -0xFF,0xFD,0x02,0x3C,
92273 -0xFF,0xFF,0x42,0x34,
92274 -0xEC,0x22,0x28,0x8D,
92275 -0x24,0x18,0x62,0x00,
92276 -0xFF,0xFB,0x02,0x3C,
92277 -0xFF,0xFF,0x42,0x34,
92278 -0x24,0x18,0x62,0x00,
92279 -0xFF,0xE7,0x02,0x3C,
92280 -0xFF,0xFF,0x42,0x34,
92281 -0x1F,0x00,0x06,0x3C,
92282 -0x00,0x80,0x08,0x35,
92283 -0x24,0x18,0x62,0x00,
92284 -0x25,0x40,0x06,0x01,
92285 -0x21,0x20,0x00,0x02,
92286 -0xE8,0x22,0x23,0xAD,
92287 -0x01,0x00,0x10,0x26,
92288 -0x21,0x28,0x00,0x00,
92289 -0xE8,0xDD,0xE6,0x26,
92290 -0xD8,0xDD,0xC7,0x26,
92291 -0x4E,0x23,0x00,0x0C,
92292 -0xEC,0x22,0x28,0xAD,
92293 -0x20,0x00,0x03,0x2A,
92294 -0xD1,0xFF,0x60,0x14,
92295 -0x28,0x00,0x31,0x26,
92296 -0x34,0x00,0xBF,0x8F,
92297 -0x30,0x00,0xBE,0x8F,
92298 -0x2C,0x00,0xB7,0x8F,
92299 -0x28,0x00,0xB6,0x8F,
92300 -0x24,0x00,0xB5,0x8F,
92301 -0x20,0x00,0xB4,0x8F,
92302 -0x1C,0x00,0xB3,0x8F,
92303 -0x18,0x00,0xB2,0x8F,
92304 -0x14,0x00,0xB1,0x8F,
92305 -0x10,0x00,0xB0,0x8F,
92306 -0x08,0x00,0xE0,0x03,
92307 -0x38,0x00,0xBD,0x27,
92308 -0x02,0x80,0x02,0x3C,
92309 -0xEB,0x5D,0x44,0x90,
92310 -0x24,0x18,0x75,0x00,
92311 -0x80,0x0F,0xA2,0x34,
92312 -0x00,0x10,0x63,0x34,
92313 -0xCA,0xFF,0x87,0x14,
92314 -0x24,0x10,0x54,0x00,
92315 -0xC5,0x51,0x00,0x08,
92316 -0xE8,0x22,0xC3,0xAC,
92317 -0xBD,0x51,0x00,0x08,
92318 -0xFA,0x1D,0x20,0xA2,
92319 -0x04,0x52,0x00,0x08,
92320 -0xFF,0x00,0xA5,0x30,
92321 -0x00,0x00,0x85,0xA0,
92322 -0xFF,0xFF,0xC6,0x24,
92323 -0x01,0x00,0x84,0x24,
92324 -0xFC,0xFF,0xC0,0x14,
92325 -0x00,0x00,0x00,0x00,
92326 -0x08,0x00,0xE0,0x03,
92327 -0x00,0x00,0x00,0x00,
92328 -0x05,0x00,0xC0,0x10,
92329 -0x00,0x00,0x00,0x00,
92330 -0x00,0x00,0x85,0xAC,
92331 -0xFF,0xFF,0xC6,0x24,
92332 -0xFD,0xFF,0xC0,0x14,
92333 -0x04,0x00,0x84,0x24,
92334 -0x08,0x00,0xE0,0x03,
92335 -0x00,0x00,0x00,0x00,
92336 -0x21,0x38,0x80,0x00,
92337 -0x08,0x00,0xC0,0x10,
92338 -0xFF,0xFF,0xC3,0x24,
92339 -0xFF,0xFF,0x06,0x24,
92340 -0x00,0x00,0xA2,0x90,
92341 -0xFF,0xFF,0x63,0x24,
92342 -0x01,0x00,0xA5,0x24,
92343 -0x00,0x00,0xE2,0xA0,
92344 -0xFB,0xFF,0x66,0x14,
92345 -0x01,0x00,0xE7,0x24,
92346 -0x08,0x00,0xE0,0x03,
92347 -0x21,0x10,0x80,0x00,
92348 -0x2B,0x10,0xA4,0x00,
92349 -0x0D,0x00,0x40,0x14,
92350 -0xFF,0xFF,0x02,0x24,
92351 -0xFF,0xFF,0xC6,0x24,
92352 -0x08,0x00,0xC2,0x10,
92353 -0x21,0x18,0x80,0x00,
92354 -0xFF,0xFF,0x07,0x24,
92355 -0x00,0x00,0xA2,0x90,
92356 -0xFF,0xFF,0xC6,0x24,
92357 -0x01,0x00,0xA5,0x24,
92358 -0x00,0x00,0x62,0xA0,
92359 -0xFB,0xFF,0xC7,0x14,
92360 -0x01,0x00,0x63,0x24,
92361 -0x08,0x00,0xE0,0x03,
92362 -0x21,0x10,0x80,0x00,
92363 -0x21,0x28,0xA6,0x00,
92364 -0x21,0x18,0x86,0x00,
92365 -0xFF,0xFF,0xC6,0x24,
92366 -0xFA,0xFF,0xC2,0x10,
92367 -0x00,0x00,0x00,0x00,
92368 -0xFF,0xFF,0x07,0x24,
92369 -0xFF,0xFF,0xA5,0x24,
92370 -0x00,0x00,0xA2,0x90,
92371 -0xFF,0xFF,0x63,0x24,
92372 -0xFF,0xFF,0xC6,0x24,
92373 -0xFB,0xFF,0xC7,0x14,
92374 -0x00,0x00,0x62,0xA0,
92375 -0x08,0x00,0xE0,0x03,
92376 -0x21,0x10,0x80,0x00,
92377 -0x0C,0x00,0xC0,0x10,
92378 -0x00,0x00,0x00,0x00,
92379 -0x00,0x00,0x82,0x90,
92380 -0x00,0x00,0xA3,0x90,
92381 -0x01,0x00,0x84,0x24,
92382 -0x23,0x10,0x43,0x00,
92383 -0x00,0x16,0x02,0x00,
92384 -0x03,0x16,0x02,0x00,
92385 -0x04,0x00,0x40,0x14,
92386 -0x01,0x00,0xA5,0x24,
92387 -0xFF,0xFF,0xC6,0x24,
92388 -0xF6,0xFF,0xC0,0x14,
92389 -0x00,0x00,0x00,0x00,
92390 -0x08,0x00,0xE0,0x03,
92391 -0x21,0x10,0xC0,0x00,
92392 -0x4F,0x52,0x00,0x08,
92393 -0x21,0x18,0x86,0x00,
92394 -0x00,0x00,0x82,0x90,
92395 -0x00,0x00,0x00,0x00,
92396 -0x04,0x00,0x45,0x10,
92397 -0x00,0x00,0x00,0x00,
92398 -0x01,0x00,0x84,0x24,
92399 -0xFA,0xFF,0x83,0x14,
92400 -0x00,0x00,0x00,0x00,
92401 -0x08,0x00,0xE0,0x03,
92402 -0x21,0x10,0x80,0x00,
92403 -0x09,0x00,0xC0,0x10,
92404 -0xFF,0xFF,0xC3,0x24,
92405 -0xFF,0x00,0xA5,0x30,
92406 -0xFF,0xFF,0x06,0x24,
92407 -0x00,0x00,0x82,0x90,
92408 -0xFF,0xFF,0x63,0x24,
92409 -0x05,0x00,0x45,0x10,
92410 -0x01,0x00,0x84,0x24,
92411 -0xFB,0xFF,0x66,0x14,
92412 -0x00,0x00,0x00,0x00,
92413 -0x08,0x00,0xE0,0x03,
92414 -0x21,0x10,0x00,0x00,
92415 -0x08,0x00,0xE0,0x03,
92416 -0xFF,0xFF,0x82,0x24,
92417 -0x21,0x38,0x00,0x00,
92418 -0x1F,0x00,0xC0,0x10,
92419 -0x21,0x18,0x00,0x00,
92420 -0x02,0x80,0x02,0x3C,
92421 -0x40,0xF2,0x4B,0x24,
92422 -0x00,0x00,0x87,0x90,
92423 -0x00,0x00,0xA3,0x90,
92424 -0xFF,0xFF,0xC6,0x24,
92425 -0x01,0x00,0x84,0x24,
92426 -0x21,0x10,0xEB,0x00,
92427 -0x16,0x00,0xE0,0x10,
92428 -0x01,0x00,0xA5,0x24,
92429 -0x14,0x00,0x60,0x10,
92430 -0x21,0x48,0x6B,0x00,
92431 -0x10,0x00,0xE3,0x10,
92432 -0x20,0x00,0xE8,0x24,
92433 -0x00,0x00,0x42,0x90,
92434 -0x00,0x00,0x00,0x00,
92435 -0x01,0x00,0x42,0x30,
92436 -0x02,0x00,0x40,0x10,
92437 -0x20,0x00,0x6A,0x24,
92438 -0xFF,0x00,0x07,0x31,
92439 -0x00,0x00,0x22,0x91,
92440 -0x00,0x00,0x00,0x00,
92441 -0x01,0x00,0x42,0x30,
92442 -0x02,0x00,0x40,0x10,
92443 -0xFF,0x00,0xE7,0x30,
92444 -0xFF,0x00,0x43,0x31,
92445 -0xFF,0x00,0x63,0x30,
92446 -0x03,0x00,0xE3,0x14,
92447 -0x00,0x00,0x00,0x00,
92448 -0xE5,0xFF,0xC0,0x14,
92449 -0x00,0x00,0x00,0x00,
92450 -0x08,0x00,0xE0,0x03,
92451 -0x23,0x10,0xE3,0x00,
92452 -0x21,0x18,0x80,0x00,
92453 -0x00,0x00,0xA2,0x90,
92454 -0x01,0x00,0xA5,0x24,
92455 -0x00,0x00,0x82,0xA0,
92456 -0xFC,0xFF,0x40,0x14,
92457 -0x01,0x00,0x84,0x24,
92458 -0x08,0x00,0xE0,0x03,
92459 -0x21,0x10,0x60,0x00,
92460 -0x21,0x38,0x80,0x00,
92461 -0xFF,0xFF,0x03,0x24,
92462 -0xFF,0xFF,0xC6,0x24,
92463 -0x06,0x00,0xC3,0x10,
92464 -0x00,0x00,0x00,0x00,
92465 -0x00,0x00,0xA2,0x90,
92466 -0x01,0x00,0xA5,0x24,
92467 -0x00,0x00,0x82,0xA0,
92468 -0xF9,0xFF,0x40,0x14,
92469 -0x01,0x00,0x84,0x24,
92470 -0x08,0x00,0xE0,0x03,
92471 -0x21,0x10,0xE0,0x00,
92472 -0x00,0x00,0x82,0x80,
92473 -0x9E,0x52,0x00,0x08,
92474 -0x21,0x18,0x80,0x00,
92475 -0x01,0x00,0x84,0x24,
92476 -0x00,0x00,0x82,0x80,
92477 -0x00,0x00,0x00,0x00,
92478 -0xFC,0xFF,0x40,0x14,
92479 -0x00,0x00,0x00,0x00,
92480 -0x00,0x00,0xA2,0x90,
92481 -0x01,0x00,0xA5,0x24,
92482 -0x00,0x00,0x82,0xA0,
92483 -0xFC,0xFF,0x40,0x14,
92484 -0x01,0x00,0x84,0x24,
92485 -0x08,0x00,0xE0,0x03,
92486 -0x21,0x10,0x60,0x00,
92487 -0x12,0x00,0xC0,0x10,
92488 -0x21,0x18,0x80,0x00,
92489 -0x00,0x00,0x82,0x80,
92490 -0xAF,0x52,0x00,0x08,
92491 -0x00,0x00,0x00,0x00,
92492 -0x01,0x00,0x84,0x24,
92493 -0x00,0x00,0x82,0x80,
92494 -0x00,0x00,0x00,0x00,
92495 -0xFC,0xFF,0x40,0x14,
92496 -0x00,0x00,0x00,0x00,
92497 -0x00,0x00,0xA2,0x90,
92498 -0x01,0x00,0xA5,0x24,
92499 -0x00,0x00,0x82,0xA0,
92500 -0x05,0x00,0x40,0x10,
92501 -0x01,0x00,0x84,0x24,
92502 -0xFF,0xFF,0xC6,0x24,
92503 -0xF9,0xFF,0xC0,0x14,
92504 -0x00,0x00,0x00,0x00,
92505 -0x00,0x00,0x80,0xA0,
92506 -0x08,0x00,0xE0,0x03,
92507 -0x21,0x10,0x60,0x00,
92508 -0x00,0x00,0x83,0x90,
92509 -0x00,0x00,0xA2,0x90,
92510 -0x01,0x00,0x84,0x24,
92511 -0x23,0x10,0x62,0x00,
92512 -0x00,0x16,0x02,0x00,
92513 -0x03,0x16,0x02,0x00,
92514 -0x03,0x00,0x40,0x14,
92515 -0x01,0x00,0xA5,0x24,
92516 -0xF7,0xFF,0x60,0x14,
92517 -0x00,0x00,0x00,0x00,
92518 -0x08,0x00,0xE0,0x03,
92519 -0x00,0x00,0x00,0x00,
92520 -0x21,0x10,0x00,0x00,
92521 -0x0B,0x00,0xC0,0x10,
92522 -0x00,0x00,0x00,0x00,
92523 -0x00,0x00,0xA2,0x90,
92524 -0x00,0x00,0x83,0x90,
92525 -0xFF,0xFF,0xC6,0x24,
92526 -0x23,0x10,0x62,0x00,
92527 -0x00,0x16,0x02,0x00,
92528 -0x03,0x16,0x02,0x00,
92529 -0x03,0x00,0x40,0x14,
92530 -0x01,0x00,0xA5,0x24,
92531 -0xF5,0xFF,0x60,0x14,
92532 -0x01,0x00,0x84,0x24,
92533 -0x08,0x00,0xE0,0x03,
92534 -0x00,0x00,0x00,0x00,
92535 -0x00,0x00,0x83,0x80,
92536 -0x00,0x2E,0x05,0x00,
92537 -0x21,0x10,0x80,0x00,
92538 -0xE0,0x52,0x00,0x08,
92539 -0x03,0x2E,0x05,0x00,
92540 -0x07,0x00,0x60,0x10,
92541 -0x01,0x00,0x42,0x24,
92542 -0x00,0x00,0x43,0x80,
92543 -0x00,0x00,0x00,0x00,
92544 -0xFB,0xFF,0x65,0x14,
92545 -0x00,0x00,0x00,0x00,
92546 -0x08,0x00,0xE0,0x03,
92547 -0x00,0x00,0x00,0x00,
92548 -0x08,0x00,0xE0,0x03,
92549 -0x21,0x10,0x00,0x00,
92550 -0x00,0x00,0x82,0x80,
92551 -0xEC,0x52,0x00,0x08,
92552 -0x21,0x18,0x80,0x00,
92553 -0x01,0x00,0x63,0x24,
92554 -0x00,0x00,0x62,0x80,
92555 -0x00,0x00,0x00,0x00,
92556 -0xFC,0xFF,0x40,0x14,
92557 -0x23,0x10,0x64,0x00,
92558 -0x08,0x00,0xE0,0x03,
92559 -0x00,0x00,0x00,0x00,
92560 -0xE0,0xFF,0xBD,0x27,
92561 -0x10,0x00,0xB0,0xAF,
92562 -0x21,0x80,0xA0,0x00,
92563 -0x14,0x00,0xB1,0xAF,
92564 -0x18,0x00,0xBF,0xAF,
92565 -0x21,0x88,0x80,0x00,
92566 -0xE6,0x52,0x00,0x0C,
92567 -0x00,0x86,0x10,0x00,
92568 -0x21,0x18,0x51,0x00,
92569 -0x03,0x86,0x10,0x00,
92570 -0x00,0x00,0x62,0x80,
92571 -0x00,0x00,0x00,0x00,
92572 -0x0A,0x00,0x50,0x10,
92573 -0x21,0x10,0x60,0x00,
92574 -0xFF,0xFF,0x63,0x24,
92575 -0x2B,0x10,0x71,0x00,
92576 -0xF9,0xFF,0x40,0x10,
92577 -0x21,0x10,0x00,0x00,
92578 -0x18,0x00,0xBF,0x8F,
92579 -0x14,0x00,0xB1,0x8F,
92580 -0x10,0x00,0xB0,0x8F,
92581 -0x08,0x00,0xE0,0x03,
92582 -0x20,0x00,0xBD,0x27,
92583 -0x18,0x00,0xBF,0x8F,
92584 -0x14,0x00,0xB1,0x8F,
92585 -0x10,0x00,0xB0,0x8F,
92586 -0x08,0x00,0xE0,0x03,
92587 -0x20,0x00,0xBD,0x27,
92588 -0x21,0x30,0x80,0x00,
92589 -0x0D,0x00,0xA0,0x10,
92590 -0xFF,0xFF,0xA3,0x24,
92591 -0x00,0x00,0x82,0x80,
92592 -0x00,0x00,0x00,0x00,
92593 -0x09,0x00,0x40,0x10,
92594 -0x00,0x00,0x00,0x00,
92595 -0xFF,0xFF,0x05,0x24,
92596 -0xFF,0xFF,0x63,0x24,
92597 -0x05,0x00,0x65,0x10,
92598 -0x01,0x00,0xC6,0x24,
92599 -0x00,0x00,0xC2,0x80,
92600 -0x00,0x00,0x00,0x00,
92601 -0xFA,0xFF,0x40,0x14,
92602 -0x00,0x00,0x00,0x00,
92603 -0x08,0x00,0xE0,0x03,
92604 -0x23,0x10,0xC4,0x00,
92605 -0x00,0x00,0x82,0x90,
92606 -0x00,0x00,0x00,0x00,
92607 -0x19,0x00,0x40,0x10,
92608 -0x21,0x40,0x00,0x00,
92609 -0x00,0x00,0xA9,0x80,
92610 -0x00,0x00,0x00,0x00,
92611 -0x17,0x00,0x20,0x11,
92612 -0x21,0x30,0xA0,0x00,
92613 -0x00,0x3E,0x02,0x00,
92614 -0x03,0x3E,0x07,0x00,
92615 -0x21,0x18,0x20,0x01,
92616 -0x15,0x00,0xE3,0x10,
92617 -0x00,0x00,0x00,0x00,
92618 -0x01,0x00,0xC6,0x24,
92619 -0x00,0x00,0xC2,0x90,
92620 -0x00,0x00,0x00,0x00,
92621 -0x00,0x1E,0x02,0x00,
92622 -0x03,0x1E,0x03,0x00,
92623 -0xF8,0xFF,0x60,0x14,
92624 -0x00,0x16,0x02,0x00,
92625 -0x03,0x16,0x02,0x00,
92626 -0x06,0x00,0x40,0x10,
92627 -0x00,0x00,0x00,0x00,
92628 -0x01,0x00,0x84,0x24,
92629 -0x00,0x00,0x82,0x90,
92630 -0x00,0x00,0x00,0x00,
92631 -0xEB,0xFF,0x40,0x14,
92632 -0x01,0x00,0x08,0x25,
92633 -0x08,0x00,0xE0,0x03,
92634 -0x21,0x10,0x00,0x01,
92635 -0x00,0x00,0xA2,0x90,
92636 -0x31,0x53,0x00,0x08,
92637 -0x00,0x16,0x02,0x00,
92638 -0x00,0x00,0xC2,0x90,
92639 -0x31,0x53,0x00,0x08,
92640 -0x00,0x16,0x02,0x00,
92641 -0x00,0x00,0x87,0x90,
92642 -0x00,0x00,0x00,0x00,
92643 -0x14,0x00,0xE0,0x10,
92644 -0x21,0x10,0x80,0x00,
92645 -0x00,0x00,0xA4,0x90,
92646 -0x00,0x00,0x00,0x00,
92647 -0x00,0x1E,0x04,0x00,
92648 -0x03,0x1E,0x03,0x00,
92649 -0x09,0x00,0x60,0x10,
92650 -0x21,0x30,0xA0,0x00,
92651 -0x00,0x3E,0x07,0x00,
92652 -0x03,0x3E,0x07,0x00,
92653 -0x0B,0x00,0xE3,0x10,
92654 -0x01,0x00,0xC6,0x24,
92655 -0x00,0x00,0xC3,0x80,
92656 -0x00,0x00,0x00,0x00,
92657 -0xFB,0xFF,0x60,0x14,
92658 -0x00,0x00,0x00,0x00,
92659 -0x01,0x00,0x42,0x24,
92660 -0x00,0x00,0x47,0x90,
92661 -0x00,0x00,0x00,0x00,
92662 -0xF0,0xFF,0xE0,0x14,
92663 -0x00,0x00,0x00,0x00,
92664 -0x21,0x10,0x00,0x00,
92665 -0x08,0x00,0xE0,0x03,
92666 -0x00,0x00,0x00,0x00,
92667 -0xE0,0xFF,0xBD,0x27,
92668 -0x14,0x00,0xB1,0xAF,
92669 -0x10,0x00,0xB0,0xAF,
92670 -0x18,0x00,0xBF,0xAF,
92671 -0x21,0x80,0x80,0x00,
92672 -0x1D,0x00,0x80,0x10,
92673 -0x21,0x88,0xA0,0x00,
92674 -0x1D,0x53,0x00,0x0C,
92675 -0x21,0x20,0x00,0x02,
92676 -0x21,0x80,0x02,0x02,
92677 -0x00,0x00,0x02,0x82,
92678 -0x21,0x28,0x20,0x02,
92679 -0x21,0x20,0x00,0x02,
92680 -0x22,0x00,0x40,0x10,
92681 -0x21,0x18,0x00,0x00,
92682 -0x41,0x53,0x00,0x0C,
92683 -0x00,0x00,0x00,0x00,
92684 -0x05,0x00,0x40,0x10,
92685 -0x21,0x18,0x40,0x00,
92686 -0x00,0x00,0x42,0x80,
92687 -0x00,0x00,0x00,0x00,
92688 -0x0A,0x00,0x40,0x14,
92689 -0x00,0x00,0x00,0x00,
92690 -0x02,0x80,0x02,0x3C,
92691 -0x5C,0xF3,0x43,0xAC,
92692 -0x21,0x18,0x00,0x02,
92693 -0x18,0x00,0xBF,0x8F,
92694 -0x14,0x00,0xB1,0x8F,
92695 -0x10,0x00,0xB0,0x8F,
92696 -0x21,0x10,0x60,0x00,
92697 -0x08,0x00,0xE0,0x03,
92698 -0x20,0x00,0xBD,0x27,
92699 -0x00,0x00,0x60,0xA0,
92700 -0x72,0x53,0x00,0x08,
92701 -0x01,0x00,0x63,0x24,
92702 -0x02,0x80,0x02,0x3C,
92703 -0x5C,0xF3,0x50,0x8C,
92704 -0x00,0x00,0x00,0x00,
92705 -0xF3,0xFF,0x00,0x12,
92706 -0x21,0x18,0x00,0x00,
92707 -0x1D,0x53,0x00,0x0C,
92708 -0x21,0x20,0x00,0x02,
92709 -0x21,0x80,0x02,0x02,
92710 -0x00,0x00,0x02,0x82,
92711 -0x21,0x28,0x20,0x02,
92712 -0x21,0x20,0x00,0x02,
92713 -0xE0,0xFF,0x40,0x14,
92714 -0x21,0x18,0x00,0x00,
92715 -0x18,0x00,0xBF,0x8F,
92716 -0x14,0x00,0xB1,0x8F,
92717 -0x10,0x00,0xB0,0x8F,
92718 -0x02,0x80,0x02,0x3C,
92719 -0x5C,0xF3,0x40,0xAC,
92720 -0x20,0x00,0xBD,0x27,
92721 -0x08,0x00,0xE0,0x03,
92722 -0x21,0x10,0x60,0x00,
92723 -0xE0,0xFF,0xBD,0x27,
92724 -0x18,0x00,0xB2,0xAF,
92725 -0x14,0x00,0xB1,0xAF,
92726 -0x1C,0x00,0xBF,0xAF,
92727 -0x10,0x00,0xB0,0xAF,
92728 -0x00,0x00,0x90,0x8C,
92729 -0x21,0x90,0x80,0x00,
92730 -0x21,0x88,0xA0,0x00,
92731 -0x21,0x18,0x00,0x00,
92732 -0x0F,0x00,0x00,0x12,
92733 -0x21,0x20,0x00,0x02,
92734 -0x1D,0x53,0x00,0x0C,
92735 -0x00,0x00,0x00,0x00,
92736 -0x21,0x80,0x02,0x02,
92737 -0x00,0x00,0x02,0x82,
92738 -0x21,0x28,0x20,0x02,
92739 -0x21,0x20,0x00,0x02,
92740 -0x07,0x00,0x40,0x10,
92741 -0x21,0x18,0x00,0x00,
92742 -0x41,0x53,0x00,0x0C,
92743 -0x00,0x00,0x00,0x00,
92744 -0x21,0x18,0x40,0x00,
92745 -0x09,0x00,0x40,0x14,
92746 -0x00,0x00,0x42,0xAE,
92747 -0x21,0x18,0x00,0x02,
92748 -0x1C,0x00,0xBF,0x8F,
92749 -0x18,0x00,0xB2,0x8F,
92750 -0x14,0x00,0xB1,0x8F,
92751 -0x10,0x00,0xB0,0x8F,
92752 -0x21,0x10,0x60,0x00,
92753 -0x08,0x00,0xE0,0x03,
92754 -0x20,0x00,0xBD,0x27,
92755 -0x00,0x00,0x42,0x80,
92756 -0x00,0x00,0x00,0x00,
92757 -0xF5,0xFF,0x40,0x10,
92758 -0x01,0x00,0x64,0x24,
92759 -0x00,0x00,0x60,0xA0,
92760 -0xAB,0x53,0x00,0x08,
92761 -0x00,0x00,0x44,0xAE,
92762 -0xD8,0xFF,0xBD,0x27,
92763 -0x14,0x00,0xB1,0xAF,
92764 -0x21,0x88,0x80,0x00,
92765 -0x21,0x20,0xA0,0x00,
92766 -0x1C,0x00,0xB3,0xAF,
92767 -0x18,0x00,0xB2,0xAF,
92768 -0x20,0x00,0xBF,0xAF,
92769 -0x10,0x00,0xB0,0xAF,
92770 -0xE6,0x52,0x00,0x0C,
92771 -0x21,0x98,0xA0,0x00,
92772 -0x21,0x90,0x40,0x00,
92773 -0x08,0x00,0x40,0x16,
92774 -0x21,0x10,0x20,0x02,
92775 -0x20,0x00,0xBF,0x8F,
92776 -0x1C,0x00,0xB3,0x8F,
92777 -0x18,0x00,0xB2,0x8F,
92778 -0x14,0x00,0xB1,0x8F,
92779 -0x10,0x00,0xB0,0x8F,
92780 -0x08,0x00,0xE0,0x03,
92781 -0x28,0x00,0xBD,0x27,
92782 -0xE6,0x52,0x00,0x0C,
92783 -0x21,0x20,0x20,0x02,
92784 -0x21,0x80,0x40,0x00,
92785 -0x2A,0x10,0x52,0x00,
92786 -0x0A,0x00,0x40,0x14,
92787 -0x00,0x00,0x00,0x00,
92788 -0x21,0x20,0x20,0x02,
92789 -0x21,0x28,0x60,0x02,
92790 -0x21,0x30,0x40,0x02,
92791 -0x39,0x52,0x00,0x0C,
92792 -0xFF,0xFF,0x10,0x26,
92793 -0x0B,0x00,0x40,0x10,
92794 -0x2A,0x18,0x12,0x02,
92795 -0xF8,0xFF,0x60,0x10,
92796 -0x01,0x00,0x31,0x26,
92797 -0x20,0x00,0xBF,0x8F,
92798 -0x1C,0x00,0xB3,0x8F,
92799 -0x18,0x00,0xB2,0x8F,
92800 -0x14,0x00,0xB1,0x8F,
92801 -0x10,0x00,0xB0,0x8F,
92802 -0x21,0x10,0x00,0x00,
92803 -0x08,0x00,0xE0,0x03,
92804 -0x28,0x00,0xBD,0x27,
92805 -0xC7,0x53,0x00,0x08,
92806 -0x21,0x10,0x20,0x02,
92807 -0x00,0x00,0x87,0x90,
92808 -0x00,0x00,0x00,0x00,
92809 -0x27,0x00,0xE0,0x10,
92810 -0x00,0x00,0x00,0x00,
92811 -0x00,0x00,0xA6,0x90,
92812 -0x00,0x00,0x00,0x00,
92813 -0x0A,0x00,0xC0,0x10,
92814 -0xDF,0xFF,0x02,0x24,
92815 -0x24,0x18,0xC2,0x00,
92816 -0x24,0x10,0xE2,0x00,
92817 -0x00,0x16,0x02,0x00,
92818 -0x00,0x1E,0x03,0x00,
92819 -0x03,0x16,0x02,0x00,
92820 -0x03,0x1E,0x03,0x00,
92821 -0x0A,0x00,0x43,0x10,
92822 -0x00,0x00,0x00,0x00,
92823 -0xDF,0xFF,0x02,0x24,
92824 -0x24,0x18,0xC2,0x00,
92825 -0x24,0x10,0xE2,0x00,
92826 -0x00,0x16,0x02,0x00,
92827 -0x00,0x1E,0x03,0x00,
92828 -0x03,0x1E,0x03,0x00,
92829 -0x03,0x16,0x02,0x00,
92830 -0x08,0x00,0xE0,0x03,
92831 -0x23,0x10,0x43,0x00,
92832 -0x0A,0x54,0x00,0x08,
92833 -0xDF,0xFF,0x08,0x24,
92834 -0x00,0x00,0xA6,0x90,
92835 -0x00,0x00,0x00,0x00,
92836 -0x24,0x10,0x06,0x01,
92837 -0x00,0x16,0x02,0x00,
92838 -0xF0,0xFF,0xC0,0x10,
92839 -0x03,0x16,0x02,0x00,
92840 -0xEF,0xFF,0x62,0x14,
92841 -0xDF,0xFF,0x02,0x24,
92842 -0x01,0x00,0x84,0x24,
92843 -0x00,0x00,0x87,0x90,
92844 -0x01,0x00,0xA5,0x24,
92845 -0x24,0x10,0x07,0x01,
92846 -0x00,0x1E,0x02,0x00,
92847 -0xF2,0xFF,0xE0,0x14,
92848 -0x03,0x1E,0x03,0x00,
92849 -0x00,0x00,0xA6,0x90,
92850 -0xDF,0xFF,0x02,0x24,
92851 -0x24,0x18,0xC2,0x00,
92852 -0x24,0x10,0xE2,0x00,
92853 -0x00,0x16,0x02,0x00,
92854 -0x00,0x1E,0x03,0x00,
92855 -0x03,0x1E,0x03,0x00,
92856 -0x03,0x16,0x02,0x00,
92857 -0x08,0x00,0xE0,0x03,
92858 -0x23,0x10,0x43,0x00,
92859 -0xA8,0xFF,0xBD,0x27,
92860 -0x44,0x00,0xB5,0xAF,
92861 -0x40,0x00,0xB4,0xAF,
92862 -0x38,0x00,0xB2,0xAF,
92863 -0x34,0x00,0xB1,0xAF,
92864 -0x54,0x00,0xBF,0xAF,
92865 -0x50,0x00,0xBE,0xAF,
92866 -0x4C,0x00,0xB7,0xAF,
92867 -0x48,0x00,0xB6,0xAF,
92868 -0x3C,0x00,0xB3,0xAF,
92869 -0x30,0x00,0xB0,0xAF,
92870 -0x21,0x90,0xA0,0x00,
92871 -0x00,0x00,0xA5,0x90,
92872 -0x21,0xA0,0x80,0x00,
92873 -0x21,0xA8,0xC0,0x00,
92874 -0x00,0x26,0x05,0x00,
92875 -0x03,0x26,0x04,0x00,
92876 -0x11,0x00,0x80,0x10,
92877 -0x21,0x88,0x80,0x02,
92878 -0x25,0x00,0x02,0x24,
92879 -0x29,0x00,0x82,0x10,
92880 -0x0A,0x00,0x02,0x24,
92881 -0x1B,0x00,0x82,0x10,
92882 -0x00,0x00,0x00,0x00,
92883 -0x1E,0x00,0x80,0x12,
92884 -0x00,0x00,0x00,0x00,
92885 -0x00,0x00,0x25,0xA2,
92886 -0x01,0x00,0x31,0x26,
92887 -0x01,0x00,0x52,0x26,
92888 -0x00,0x00,0x45,0x92,
92889 -0x00,0x00,0x00,0x00,
92890 -0x00,0x26,0x05,0x00,
92891 -0x03,0x26,0x04,0x00,
92892 -0xF2,0xFF,0x80,0x14,
92893 -0x25,0x00,0x02,0x24,
92894 -0x02,0x00,0x80,0x12,
92895 -0x23,0x10,0x34,0x02,
92896 -0x00,0x00,0x20,0xA2,
92897 -0x54,0x00,0xBF,0x8F,
92898 -0x50,0x00,0xBE,0x8F,
92899 -0x4C,0x00,0xB7,0x8F,
92900 -0x48,0x00,0xB6,0x8F,
92901 -0x44,0x00,0xB5,0x8F,
92902 -0x40,0x00,0xB4,0x8F,
92903 -0x3C,0x00,0xB3,0x8F,
92904 -0x38,0x00,0xB2,0x8F,
92905 -0x34,0x00,0xB1,0x8F,
92906 -0x30,0x00,0xB0,0x8F,
92907 -0x08,0x00,0xE0,0x03,
92908 -0x58,0x00,0xBD,0x27,
92909 -0xE7,0xFF,0x80,0x16,
92910 -0x00,0x00,0x00,0x00,
92911 -0x77,0x55,0x00,0x0C,
92912 -0x0D,0x00,0x04,0x24,
92913 -0x0A,0x00,0x04,0x24,
92914 -0x77,0x55,0x00,0x0C,
92915 -0x01,0x00,0x52,0x26,
92916 -0x00,0x00,0x45,0x92,
92917 -0x00,0x00,0x00,0x00,
92918 -0x00,0x26,0x05,0x00,
92919 -0x3C,0x54,0x00,0x08,
92920 -0x03,0x26,0x04,0x00,
92921 -0x01,0x00,0x52,0x26,
92922 -0x00,0x00,0x45,0x92,
92923 -0x73,0x00,0x02,0x24,
92924 -0x00,0x1E,0x05,0x00,
92925 -0x03,0x1E,0x03,0x00,
92926 -0x2C,0x00,0x62,0x10,
92927 -0x10,0x00,0xB3,0x27,
92928 -0x23,0x00,0x02,0x24,
92929 -0x21,0xF0,0x60,0x02,
92930 -0x21,0x38,0x00,0x00,
92931 -0x34,0x00,0x62,0x10,
92932 -0x1C,0x00,0x04,0x24,
92933 -0x00,0x16,0x05,0x00,
92934 -0x03,0x16,0x02,0x00,
92935 -0x68,0x00,0x03,0x24,
92936 -0x36,0x00,0x43,0x10,
92937 -0x00,0x00,0x00,0x00,
92938 -0x00,0x16,0x05,0x00,
92939 -0x03,0x16,0x02,0x00,
92940 -0x39,0x00,0x43,0x10,
92941 -0x00,0x00,0x00,0x00,
92942 -0x20,0x00,0xA2,0x34,
92943 -0x00,0x16,0x02,0x00,
92944 -0x03,0x16,0x02,0x00,
92945 -0x78,0x00,0x03,0x24,
92946 -0x3C,0x00,0x43,0x10,
92947 -0x20,0x00,0xA6,0x30,
92948 -0x00,0x1E,0x05,0x00,
92949 -0x03,0x1E,0x03,0x00,
92950 -0x64,0x00,0x02,0x24,
92951 -0x49,0x00,0x62,0x10,
92952 -0x40,0x00,0x02,0x24,
92953 -0x81,0x00,0x62,0x10,
92954 -0x21,0x00,0x02,0x24,
92955 -0x92,0x00,0x62,0x10,
92956 -0x63,0x00,0x02,0x24,
92957 -0xA2,0x00,0x62,0x10,
92958 -0x11,0x00,0xB3,0x27,
92959 -0x10,0x00,0xA5,0xA3,
92960 -0x21,0x80,0xC0,0x03,
92961 -0x2B,0x10,0x13,0x02,
92962 -0xB4,0xFF,0x40,0x10,
92963 -0x00,0x00,0x00,0x00,
92964 -0x6C,0x00,0x80,0x12,
92965 -0x00,0x00,0x00,0x00,
92966 -0x00,0x00,0x02,0x92,
92967 -0x01,0x00,0x10,0x26,
92968 -0x00,0x00,0x22,0xA2,
92969 -0x81,0x54,0x00,0x08,
92970 -0x01,0x00,0x31,0x26,
92971 -0x00,0x00,0xA2,0x8E,
92972 -0x04,0x00,0xB5,0x26,
92973 -0x21,0x80,0x40,0x00,
92974 -0x00,0x00,0x02,0x92,
92975 -0x00,0x00,0x00,0x00,
92976 -0xA6,0xFF,0x40,0x10,
92977 -0x00,0x00,0x00,0x00,
92978 -0x63,0x00,0x80,0x12,
92979 -0x00,0x00,0x00,0x00,
92980 -0x00,0x00,0x22,0xA2,
92981 -0x01,0x00,0x10,0x26,
92982 -0x8E,0x54,0x00,0x08,
92983 -0x01,0x00,0x31,0x26,
92984 -0x01,0x00,0x52,0x26,
92985 -0x00,0x00,0x45,0x92,
92986 -0x68,0x00,0x03,0x24,
92987 -0x00,0x16,0x05,0x00,
92988 -0x03,0x16,0x02,0x00,
92989 -0xCC,0xFF,0x43,0x14,
92990 -0x01,0x00,0x07,0x24,
92991 -0x01,0x00,0x52,0x26,
92992 -0x00,0x00,0x45,0x92,
92993 -0x00,0x00,0x00,0x00,
92994 -0x00,0x16,0x05,0x00,
92995 -0x03,0x16,0x02,0x00,
92996 -0xC9,0xFF,0x43,0x14,
92997 -0x0C,0x00,0x04,0x24,
92998 -0x01,0x00,0x52,0x26,
92999 -0x00,0x00,0x45,0x92,
93000 -0x78,0x00,0x03,0x24,
93001 -0x20,0x00,0xA2,0x34,
93002 -0x00,0x16,0x02,0x00,
93003 -0x03,0x16,0x02,0x00,
93004 -0xC7,0xFF,0x43,0x14,
93005 -0x04,0x00,0x04,0x24,
93006 -0x20,0x00,0xA6,0x30,
93007 -0x00,0x00,0xA5,0x8E,
93008 -0x35,0x00,0xE0,0x14,
93009 -0x04,0x00,0xB5,0x26,
93010 -0xCD,0xFF,0x80,0x04,
93011 -0x02,0x80,0x02,0x3C,
93012 -0x48,0xED,0x42,0x24,
93013 -0x00,0x00,0x47,0x8C,
93014 -0x07,0x10,0x85,0x00,
93015 -0x0F,0x00,0x42,0x30,
93016 -0x21,0x10,0x47,0x00,
93017 -0x00,0x00,0x43,0x90,
93018 -0xFC,0xFF,0x84,0x24,
93019 -0x25,0x18,0xC3,0x00,
93020 -0x00,0x00,0x63,0xA2,
93021 -0xF8,0xFF,0x81,0x04,
93022 -0x01,0x00,0x73,0x26,
93023 -0x81,0x54,0x00,0x08,
93024 -0x21,0x80,0xC0,0x03,
93025 -0x00,0x00,0xA2,0x8E,
93026 -0x04,0x00,0xB5,0x26,
93027 -0x28,0x00,0x40,0x04,
93028 -0x21,0x28,0x40,0x00,
93029 -0x21,0x80,0x60,0x02,
93030 -0x02,0x80,0x02,0x3C,
93031 -0x4C,0xED,0x42,0x24,
93032 -0x00,0x00,0x46,0x8C,
93033 -0x00,0x00,0x00,0x00,
93034 -0x18,0x00,0xA6,0x00,
93035 -0xC3,0x27,0x05,0x00,
93036 -0x10,0x10,0x00,0x00,
93037 -0x83,0x10,0x02,0x00,
93038 -0x23,0x10,0x44,0x00,
93039 -0x80,0x18,0x02,0x00,
93040 -0x21,0x18,0x62,0x00,
93041 -0x40,0x18,0x03,0x00,
93042 -0x23,0x18,0xA3,0x00,
93043 -0x30,0x00,0x63,0x24,
93044 -0x00,0x00,0x63,0xA2,
93045 -0x21,0x28,0x40,0x00,
93046 -0xF3,0xFF,0x40,0x14,
93047 -0x01,0x00,0x73,0x26,
93048 -0xE1,0x54,0x00,0x08,
93049 -0xFF,0xFF,0x63,0x26,
93050 -0x00,0x00,0x65,0x80,
93051 -0x00,0x00,0x02,0x92,
93052 -0x00,0x00,0x00,0x00,
93053 -0x00,0x00,0x62,0xA0,
93054 -0x00,0x00,0x05,0xA2,
93055 -0xFF,0xFF,0x63,0x24,
93056 -0x01,0x00,0x10,0x26,
93057 -0x2B,0x10,0x03,0x02,
93058 -0xF7,0xFF,0x40,0x14,
93059 -0x00,0x00,0x00,0x00,
93060 -0x81,0x54,0x00,0x08,
93061 -0x21,0x80,0xC0,0x03,
93062 -0x58,0x00,0xC3,0x34,
93063 -0x30,0x00,0x02,0x24,
93064 -0x12,0x00,0xB3,0x27,
93065 -0x10,0x00,0xA2,0xA3,
93066 -0xB2,0x54,0x00,0x08,
93067 -0x11,0x00,0xA3,0xA3,
93068 -0x2D,0x00,0x02,0x24,
93069 -0x23,0x28,0x05,0x00,
93070 -0x11,0x00,0xB3,0x27,
93071 -0xC5,0x54,0x00,0x08,
93072 -0x10,0x00,0xA2,0xA3,
93073 -0x00,0x00,0x04,0x82,
93074 -0x77,0x55,0x00,0x0C,
93075 -0x01,0x00,0x10,0x26,
93076 -0x82,0x54,0x00,0x08,
93077 -0x2B,0x10,0x13,0x02,
93078 -0x00,0x00,0x04,0x82,
93079 -0x77,0x55,0x00,0x0C,
93080 -0x01,0x00,0x10,0x26,
93081 -0x8E,0x54,0x00,0x08,
93082 -0x00,0x00,0x00,0x00,
93083 -0x00,0x00,0xA3,0x8E,
93084 -0x28,0x00,0xB0,0x27,
93085 -0x2C,0x00,0xA4,0x27,
93086 -0x2B,0x10,0x04,0x02,
93087 -0x28,0x00,0xA3,0xAF,
93088 -0x0B,0x00,0x40,0x10,
93089 -0x04,0x00,0xB5,0x26,
93090 -0x21,0xB8,0x80,0x00,
93091 -0x02,0x80,0x16,0x3C,
93092 -0x00,0x00,0x06,0x92,
93093 -0x21,0x20,0x60,0x02,
93094 -0x01,0x00,0x10,0x26,
93095 -0x24,0x55,0x00,0x0C,
93096 -0xD0,0xE3,0xC5,0x26,
93097 -0x2B,0x18,0x17,0x02,
93098 -0xF9,0xFF,0x60,0x14,
93099 -0x21,0x98,0x62,0x02,
93100 -0x80,0x54,0x00,0x08,
93101 -0xFF,0xFF,0x73,0x26,
93102 -0x00,0x00,0xA2,0x8E,
93103 -0x00,0x00,0x00,0x00,
93104 -0x06,0x00,0x56,0x24,
93105 -0x21,0x80,0x40,0x00,
93106 -0x2B,0x10,0x56,0x00,
93107 -0xF8,0xFF,0x40,0x10,
93108 -0x04,0x00,0xB5,0x26,
93109 -0x02,0x80,0x17,0x3C,
93110 -0x00,0x00,0x06,0x82,
93111 -0x21,0x20,0x60,0x02,
93112 -0x01,0x00,0x10,0x26,
93113 -0x24,0x55,0x00,0x0C,
93114 -0xD4,0xE3,0xE5,0x26,
93115 -0x2B,0x18,0x16,0x02,
93116 -0xF9,0xFF,0x60,0x14,
93117 -0x21,0x98,0x62,0x02,
93118 -0x80,0x54,0x00,0x08,
93119 -0xFF,0xFF,0x73,0x26,
93120 -0x00,0x00,0xA2,0x8E,
93121 -0x04,0x00,0xB5,0x26,
93122 -0x80,0x54,0x00,0x08,
93123 -0x10,0x00,0xA2,0xA3,
93124 -0xE8,0xFF,0xBD,0x27,
93125 -0x20,0x00,0xA6,0xAF,
93126 -0x20,0x00,0xA6,0x27,
93127 -0x10,0x00,0xBF,0xAF,
93128 -0x24,0x00,0xA7,0xAF,
93129 -0x1B,0x54,0x00,0x0C,
93130 -0x1C,0x00,0xA5,0xAF,
93131 -0x10,0x00,0xBF,0x8F,
93132 -0x00,0x00,0x00,0x00,
93133 -0x08,0x00,0xE0,0x03,
93134 -0x18,0x00,0xBD,0x27,
93135 -0xE0,0xFF,0xBD,0x27,
93136 -0x18,0x00,0xBF,0xAF,
93137 -0x14,0x00,0xB1,0xAF,
93138 -0x10,0x00,0xB0,0xAF,
93139 -0x24,0x00,0xA5,0xAF,
93140 -0x28,0x00,0xA6,0xAF,
93141 -0x2C,0x00,0xA7,0xAF,
93142 -0x20,0x00,0xA4,0xAF,
93143 -0x00,0x60,0x11,0x40,
93144 -0x01,0x00,0x21,0x36,
93145 -0x01,0x00,0x21,0x38,
93146 -0x00,0x60,0x81,0x40,
93147 -0x25,0x24,0x00,0x0C,
93148 -0xA0,0x00,0x04,0x24,
93149 -0x19,0x00,0x40,0x10,
93150 -0x21,0x80,0x40,0x00,
93151 -0x08,0x00,0x44,0x94,
93152 -0x20,0x00,0xA5,0x8F,
93153 -0x02,0x80,0x02,0x3C,
93154 -0x25,0x20,0x82,0x00,
93155 -0x20,0x00,0x84,0x24,
93156 -0x1B,0x54,0x00,0x0C,
93157 -0x24,0x00,0xA6,0x27,
93158 -0x01,0x00,0x42,0x24,
93159 -0x13,0x00,0x03,0x24,
93160 -0x81,0x00,0x44,0x2C,
93161 -0x14,0x00,0x03,0xAE,
93162 -0x17,0x00,0x80,0x14,
93163 -0x0C,0x00,0x02,0xAE,
93164 -0x00,0x60,0x01,0x40,
93165 -0x01,0x00,0x21,0x34,
93166 -0x01,0x00,0x21,0x38,
93167 -0x00,0x60,0x81,0x40,
93168 -0x88,0x88,0x03,0x3C,
93169 -0x25,0xB0,0x02,0x3C,
93170 -0x88,0x88,0x63,0x34,
93171 -0x18,0x03,0x42,0x34,
93172 -0x00,0x00,0x43,0xAC,
93173 -0x55,0x55,0x00,0x08,
93174 -0x00,0x00,0x00,0x00,
93175 -0x00,0x60,0x91,0x40,
93176 -0x99,0x99,0x03,0x3C,
93177 -0x25,0xB0,0x02,0x3C,
93178 -0x99,0x99,0x63,0x34,
93179 -0x18,0x03,0x42,0x34,
93180 -0x00,0x00,0x43,0xAC,
93181 -0x18,0x00,0xBF,0x8F,
93182 -0x14,0x00,0xB1,0x8F,
93183 -0x10,0x00,0xB0,0x8F,
93184 -0x08,0x00,0xE0,0x03,
93185 -0x20,0x00,0xBD,0x27,
93186 -0x30,0x09,0x00,0x0C,
93187 -0x21,0x20,0x00,0x02,
93188 -0x00,0x60,0x91,0x40,
93189 -0x5D,0x55,0x00,0x08,
93190 -0x00,0x00,0x00,0x00,
93191 -0xE8,0xFF,0xBD,0x27,
93192 -0x10,0x00,0xBF,0xAF,
93193 -0x02,0x80,0x06,0x3C,
93194 -0x60,0xF3,0xC5,0x8C,
93195 -0x02,0x80,0x02,0x3C,
93196 -0x40,0xF3,0x42,0x24,
93197 -0x03,0x00,0xA3,0x30,
93198 -0x21,0x18,0x62,0x00,
93199 -0x00,0x00,0x64,0x80,
93200 -0x01,0x00,0xA5,0x24,
93201 -0x77,0x55,0x00,0x0C,
93202 -0x60,0xF3,0xC5,0xAC,
93203 -0x10,0x00,0xBF,0x8F,
93204 -0x08,0x00,0x04,0x24,
93205 -0x77,0x55,0x00,0x08,
93206 -0x18,0x00,0xBD,0x27,
93207 -0x00,0x26,0x04,0x00,
93208 -0x03,0x26,0x04,0x00,
93209 -0x00,0x00,0x84,0x48,
93210 -0x08,0x00,0xE0,0x03,
93211 -0x00,0x00,0x00,0x00,
93212 -0x00,0x26,0x04,0x00,
93213 -0x03,0x26,0x04,0x00,
93214 -0xF7,0xFF,0x82,0x24,
93215 -0x05,0x00,0x42,0x2C,
93216 -0x06,0x00,0x40,0x14,
93217 -0x21,0x18,0x00,0x00,
93218 -0x20,0x00,0x02,0x24,
93219 -0x03,0x00,0x82,0x10,
93220 -0x00,0x00,0x00,0x00,
93221 -0x08,0x00,0xE0,0x03,
93222 -0x21,0x10,0x60,0x00,
93223 -0x01,0x00,0x03,0x24,
93224 -0x08,0x00,0xE0,0x03,
93225 -0x21,0x10,0x60,0x00,
93226 -0x00,0x60,0x02,0x40,
93227 -0x01,0x00,0x41,0x34,
93228 -0x01,0x00,0x21,0x38,
93229 -0x00,0x60,0x81,0x40,
93230 -0x02,0x80,0x03,0x3C,
93231 -0xD4,0x5E,0x64,0xAC,
93232 -0x00,0x60,0x82,0x40,
93233 -0x08,0x00,0xE0,0x03,
93234 -0x00,0x00,0x00,0x00,
93235 -0x25,0xB0,0x05,0x3C,
93236 -0x01,0x00,0x06,0x24,
93237 -0x01,0x80,0x02,0x3C,
93238 -0x04,0x30,0x86,0x00,
93239 -0xF1,0x02,0xA7,0x34,
93240 -0xED,0x02,0xA4,0x34,
93241 -0x4C,0x56,0x42,0x24,
93242 -0x18,0x03,0xA5,0x34,
93243 -0x08,0x00,0x03,0x24,
93244 -0x00,0x00,0xA2,0xAC,
93245 -0x00,0x00,0xE3,0xA0,
93246 -0x00,0x00,0x80,0xA0,
93247 -0x00,0x00,0x86,0xA0,
93248 -0x00,0x00,0x80,0xA0,
93249 -0x00,0x00,0x86,0xA0,
93250 -0x00,0x00,0x80,0xA0,
93251 -0x00,0x00,0x86,0xA0,
93252 -0x00,0x00,0x80,0xA0,
93253 -0x00,0x00,0x86,0xA0,
93254 -0x00,0x00,0x80,0xA0,
93255 -0x00,0x00,0xE0,0xA0,
93256 -0x08,0x00,0xE0,0x03,
93257 -0x00,0x00,0x00,0x00,
93258 -0x00,0x00,0x82,0x8C,
93259 -0x08,0x00,0xE0,0x03,
93260 -0x00,0x00,0x00,0x00,
93261 -0xFF,0xFF,0xC6,0x30,
93262 -0x10,0x00,0x02,0x24,
93263 -0x0C,0x00,0xC2,0x10,
93264 -0x11,0x00,0xC3,0x28,
93265 -0x06,0x00,0x60,0x10,
93266 -0x20,0x00,0x02,0x24,
93267 -0x08,0x00,0x02,0x24,
93268 -0x0D,0x00,0xC2,0x10,
93269 -0x00,0x00,0x00,0x00,
93270 -0x08,0x00,0xE0,0x03,
93271 -0x00,0x00,0x00,0x00,
93272 -0x06,0x00,0xC2,0x10,
93273 -0x00,0x00,0x00,0x00,
93274 -0x08,0x00,0xE0,0x03,
93275 -0x00,0x00,0x00,0x00,
93276 -0x00,0x00,0x85,0xA4,
93277 -0x08,0x00,0xE0,0x03,
93278 -0x00,0x00,0x00,0x00,
93279 -0x00,0x00,0x85,0xAC,
93280 -0x08,0x00,0xE0,0x03,
93281 -0x00,0x00,0x00,0x00,
93282 -0x00,0x00,0x85,0xA0,
93283 -0x08,0x00,0xE0,0x03,
93284 -0x00,0x00,0x00,0x00,
93285 -0x08,0x00,0xE0,0x03,
93286 -0x21,0x10,0x00,0x00,
93287 -0x08,0x00,0xE0,0x03,
93288 -0x21,0x10,0x00,0x00,
93289 -0x25,0xB0,0x02,0x3C,
93290 -0x0A,0x00,0x42,0x34,
93291 -0x00,0x00,0x43,0x90,
93292 -0xFF,0xFF,0xA5,0x24,
93293 -0x00,0x2C,0x05,0x00,
93294 -0xFD,0x00,0x63,0x30,
93295 -0x03,0x2C,0x05,0x00,
93296 -0xFF,0xFF,0x87,0x30,
93297 -0x00,0x00,0x43,0xA0,
93298 -0x1A,0x00,0xA0,0x04,
93299 -0x00,0x00,0x00,0x00,
93300 -0x21,0x30,0x40,0x00,
93301 -0x07,0x10,0xA7,0x00,
93302 -0x01,0x00,0x42,0x30,
93303 -0xFD,0x00,0x64,0x30,
93304 -0x00,0x00,0x42,0x38,
93305 -0x02,0x00,0x63,0x34,
93306 -0x0A,0x18,0x82,0x00,
93307 -0x00,0x00,0xC3,0xA0,
93308 -0x04,0x00,0x63,0x34,
93309 -0x00,0x00,0xC3,0xA0,
93310 -0x09,0x00,0x02,0x24,
93311 -0xFF,0xFF,0x42,0x24,
93312 -0xFF,0xFF,0x41,0x04,
93313 -0xFF,0xFF,0x42,0x24,
93314 -0xFB,0x00,0x63,0x30,
93315 -0x00,0x00,0xC3,0xA0,
93316 -0x04,0x00,0x02,0x24,
93317 -0xFF,0xFF,0x42,0x24,
93318 -0xFF,0xFF,0x41,0x04,
93319 -0xFF,0xFF,0x42,0x24,
93320 -0xFF,0xFF,0xA2,0x24,
93321 -0x00,0x2C,0x02,0x00,
93322 -0x03,0x2C,0x05,0x00,
93323 -0xEA,0xFF,0xA1,0x04,
93324 -0x07,0x10,0xA7,0x00,
93325 -0x08,0x00,0xE0,0x03,
93326 -0x00,0x00,0x00,0x00,
93327 -0x25,0xB0,0x02,0x3C,
93328 -0x0A,0x00,0x42,0x34,
93329 -0x00,0x00,0x43,0x90,
93330 -0xFF,0xFF,0x84,0x24,
93331 -0x00,0x24,0x04,0x00,
93332 -0x03,0x24,0x04,0x00,
93333 -0xFF,0x00,0x65,0x30,
93334 -0x1D,0x00,0x80,0x04,
93335 -0x21,0x38,0x00,0x00,
93336 -0x21,0x30,0x40,0x00,
93337 -0x01,0x00,0x08,0x24,
93338 -0x04,0x00,0xA5,0x34,
93339 -0x00,0x00,0xC5,0xA0,
93340 -0x00,0x00,0xC2,0x90,
93341 -0x00,0x00,0x00,0x00,
93342 -0xFF,0x00,0x45,0x30,
93343 -0x01,0x00,0xA3,0x30,
93344 -0x05,0x00,0x60,0x10,
93345 -0x04,0x00,0x02,0x24,
93346 -0x04,0x10,0x88,0x00,
93347 -0x25,0x10,0x47,0x00,
93348 -0xFF,0xFF,0x47,0x30,
93349 -0x04,0x00,0x02,0x24,
93350 -0xFF,0xFF,0x42,0x24,
93351 -0xFF,0xFF,0x41,0x04,
93352 -0xFF,0xFF,0x42,0x24,
93353 -0xFB,0x00,0xA5,0x30,
93354 -0x00,0x00,0xC5,0xA0,
93355 -0x09,0x00,0x02,0x24,
93356 -0xFF,0xFF,0x42,0x24,
93357 -0xFF,0xFF,0x41,0x04,
93358 -0xFF,0xFF,0x42,0x24,
93359 -0xFF,0xFF,0x82,0x24,
93360 -0x00,0x24,0x02,0x00,
93361 -0x03,0x24,0x04,0x00,
93362 -0xE7,0xFF,0x81,0x04,
93363 -0x00,0x00,0x00,0x00,
93364 -0x08,0x00,0xE0,0x03,
93365 -0x21,0x10,0xE0,0x00,
93366 -0xE0,0xFF,0xBD,0x27,
93367 -0x10,0x00,0xB0,0xAF,
93368 -0x25,0xB0,0x10,0x3C,
93369 -0x0A,0x00,0x10,0x36,
93370 -0x18,0x00,0xBF,0xAF,
93371 -0x14,0x00,0xB1,0xAF,
93372 -0x00,0x00,0x02,0x92,
93373 -0xFF,0xFF,0x91,0x30,
93374 -0x03,0x00,0x05,0x24,
93375 -0xC0,0x00,0x42,0x30,
93376 -0x80,0x00,0x43,0x34,
93377 -0x00,0x00,0x03,0xA2,
93378 -0x04,0x00,0x63,0x34,
93379 -0x00,0x00,0x03,0xA2,
93380 -0xFB,0x00,0x63,0x30,
93381 -0x00,0x00,0x03,0xA2,
93382 -0x08,0x00,0x63,0x34,
93383 -0x00,0x00,0x03,0xA2,
93384 -0x04,0x00,0x63,0x34,
93385 -0x00,0x00,0x03,0xA2,
93386 -0xFB,0x00,0x63,0x30,
93387 -0x00,0x00,0x03,0xA2,
93388 -0xC9,0x55,0x00,0x0C,
93389 -0x06,0x00,0x04,0x24,
93390 -0x42,0x20,0x11,0x00,
93391 -0xC9,0x55,0x00,0x0C,
93392 -0x06,0x00,0x05,0x24,
93393 -0xEF,0x55,0x00,0x0C,
93394 -0x10,0x00,0x04,0x24,
93395 -0x00,0x00,0x03,0x92,
93396 -0x18,0x00,0xBF,0x8F,
93397 -0x14,0x00,0xB1,0x8F,
93398 -0xC0,0x00,0x63,0x30,
93399 -0x00,0x00,0x03,0xA2,
93400 -0x10,0x00,0xB0,0x8F,
93401 -0x08,0x00,0xE0,0x03,
93402 -0x20,0x00,0xBD,0x27,
93403 -0xE0,0xFF,0xBD,0x27,
93404 -0x14,0x00,0xB1,0xAF,
93405 -0xFF,0xFF,0xB1,0x30,
93406 -0x18,0x00,0xB2,0xAF,
93407 -0x10,0x00,0xB0,0xAF,
93408 -0x1C,0x00,0xBF,0xAF,
93409 -0x21,0x90,0xC0,0x00,
93410 -0x0A,0x00,0x20,0x12,
93411 -0xFF,0xFF,0x90,0x30,
93412 -0x16,0x56,0x00,0x0C,
93413 -0x21,0x20,0x00,0x02,
93414 -0xFE,0xFF,0x23,0x26,
93415 -0x02,0x00,0x04,0x26,
93416 -0x00,0x00,0x42,0xA6,
93417 -0xFF,0xFF,0x71,0x30,
93418 -0xFF,0xFF,0x90,0x30,
93419 -0xF8,0xFF,0x20,0x16,
93420 -0x02,0x00,0x52,0x26,
93421 -0x1C,0x00,0xBF,0x8F,
93422 -0x18,0x00,0xB2,0x8F,
93423 -0x14,0x00,0xB1,0x8F,
93424 -0x10,0x00,0xB0,0x8F,
93425 -0x08,0x00,0xE0,0x03,
93426 -0x20,0x00,0xBD,0x27,
93427 -0xC8,0xFF,0xBD,0x27,
93428 -0x25,0xB0,0x03,0x3C,
93429 -0x1C,0x00,0xB3,0xAF,
93430 -0x18,0x00,0xB2,0xAF,
93431 -0x14,0x00,0xB1,0xAF,
93432 -0x10,0x00,0xB0,0xAF,
93433 -0x34,0x00,0xBF,0xAF,
93434 -0x30,0x00,0xBE,0xAF,
93435 -0x2C,0x00,0xB7,0xAF,
93436 -0x28,0x00,0xB6,0xAF,
93437 -0x24,0x00,0xB5,0xAF,
93438 -0x20,0x00,0xB4,0xAF,
93439 -0x0A,0x00,0x67,0x34,
93440 -0x00,0x00,0xE2,0x90,
93441 -0xFF,0xFF,0xB2,0x30,
93442 -0x21,0x98,0xC0,0x00,
93443 -0xFF,0x00,0x91,0x30,
93444 -0x20,0x00,0x40,0x12,
93445 -0xFF,0x00,0x50,0x30,
93446 -0x21,0xA0,0xE0,0x00,
93447 -0x0C,0x00,0x77,0x34,
93448 -0x0B,0x00,0x76,0x34,
93449 -0x21,0xF0,0xE0,0x00,
93450 -0xC0,0xFF,0x15,0x24,
93451 -0x25,0x10,0x15,0x02,
93452 -0xFF,0x00,0x50,0x30,
93453 -0x00,0x00,0xD1,0xA2,
93454 -0x00,0x00,0x90,0xA2,
93455 -0x00,0x00,0x82,0x92,
93456 -0x00,0x00,0x00,0x00,
93457 -0xFF,0x00,0x50,0x30,
93458 -0xC0,0x00,0x03,0x32,
93459 -0x07,0x00,0x60,0x10,
93460 -0x21,0x20,0xC0,0x03,
93461 -0x00,0x00,0x82,0x90,
93462 -0x00,0x00,0x00,0x00,
93463 -0xFF,0x00,0x50,0x30,
93464 -0xC0,0x00,0x03,0x32,
93465 -0xFB,0xFF,0x60,0x14,
93466 -0x00,0x00,0x00,0x00,
93467 -0x00,0x00,0xE2,0x8E,
93468 -0x04,0x00,0x23,0x26,
93469 -0x64,0x00,0x04,0x24,
93470 -0x00,0x00,0x62,0xAE,
93471 -0x25,0x22,0x00,0x0C,
93472 -0xFF,0x00,0x71,0x30,
93473 -0xFC,0xFF,0x42,0x26,
93474 -0xFF,0xFF,0x52,0x30,
93475 -0xE7,0xFF,0x40,0x16,
93476 -0x04,0x00,0x73,0x26,
93477 -0x34,0x00,0xBF,0x8F,
93478 -0x30,0x00,0xBE,0x8F,
93479 -0x2C,0x00,0xB7,0x8F,
93480 -0x28,0x00,0xB6,0x8F,
93481 -0x24,0x00,0xB5,0x8F,
93482 -0x20,0x00,0xB4,0x8F,
93483 -0x1C,0x00,0xB3,0x8F,
93484 -0x18,0x00,0xB2,0x8F,
93485 -0x14,0x00,0xB1,0x8F,
93486 -0x10,0x00,0xB0,0x8F,
93487 -0x08,0x00,0xE0,0x03,
93488 -0x38,0x00,0xBD,0x27,
93489 -0x25,0xB0,0x06,0x3C,
93490 -0x31,0x00,0xC2,0x34,
93491 -0xFF,0xFF,0x84,0x30,
93492 -0x00,0x00,0x44,0xA0,
93493 -0x32,0x00,0xC7,0x34,
93494 -0x00,0x00,0xE3,0x90,
93495 -0xFC,0xFF,0x02,0x24,
93496 -0x02,0x22,0x04,0x00,
93497 -0x24,0x18,0x62,0x00,
93498 -0x03,0x00,0x84,0x30,
93499 -0x25,0x20,0x83,0x00,
93500 -0x33,0x00,0xC6,0x34,
93501 -0x72,0x00,0x02,0x24,
93502 -0x00,0x00,0xE4,0xA0,
93503 -0x00,0x00,0xC2,0xA0,
93504 -0x00,0x00,0xC3,0x90,
93505 -0x00,0x00,0x00,0x00,
93506 -0x00,0x1E,0x03,0x00,
93507 -0x03,0x1E,0x03,0x00,
93508 -0x05,0x00,0x61,0x04,
93509 -0x21,0x10,0x00,0x00,
93510 -0xB5,0x56,0x00,0x08,
93511 -0x25,0xB0,0x02,0x3C,
93512 -0x11,0x00,0x80,0x10,
93513 -0x00,0x00,0x00,0x00,
93514 -0x00,0x00,0xC3,0x90,
93515 -0x01,0x00,0x42,0x24,
93516 -0xFF,0x00,0x42,0x30,
93517 -0x00,0x1E,0x03,0x00,
93518 -0x03,0x1E,0x03,0x00,
93519 -0xF8,0xFF,0x61,0x04,
93520 -0x64,0x00,0x44,0x2C,
93521 -0x64,0x00,0x44,0x2C,
93522 -0x07,0x00,0x80,0x10,
93523 -0x00,0x00,0x00,0x00,
93524 -0x25,0xB0,0x02,0x3C,
93525 -0x30,0x00,0x42,0x34,
93526 -0x00,0x00,0x43,0x90,
93527 -0x01,0x00,0x02,0x24,
93528 -0x08,0x00,0xE0,0x03,
93529 -0x00,0x00,0xA3,0xA0,
93530 -0xFF,0xFF,0x02,0x24,
93531 -0x00,0x00,0xA2,0xA0,
93532 -0x08,0x00,0xE0,0x03,
93533 -0x21,0x10,0x00,0x00,
93534 -0x25,0xB0,0x06,0x3C,
93535 -0x31,0x00,0xC2,0x34,
93536 -0xFF,0xFF,0x84,0x30,
93537 -0x00,0x00,0x44,0xA0,
93538 -0x32,0x00,0xC3,0x34,
93539 -0x00,0x00,0x62,0x90,
93540 -0x02,0x22,0x04,0x00,
93541 -0x03,0x00,0x84,0x30,
93542 -0x25,0x20,0x82,0x00,
93543 -0x00,0x00,0x64,0xA0,
93544 -0x33,0x00,0xC7,0x34,
93545 -0xFF,0x00,0xA5,0x30,
93546 -0x30,0x00,0xC6,0x34,
93547 -0xF2,0xFF,0x03,0x24,
93548 -0x00,0x00,0xC5,0xA0,
93549 -0x00,0x00,0xE3,0xA0,
93550 -0x00,0x00,0xE2,0x90,
93551 -0x00,0x00,0x00,0x00,
93552 -0x00,0x16,0x02,0x00,
93553 -0x03,0x16,0x02,0x00,
93554 -0x03,0x00,0x40,0x04,
93555 -0x21,0x20,0x00,0x00,
93556 -0x08,0x00,0xE0,0x03,
93557 -0x01,0x00,0x02,0x24,
93558 -0xDA,0x56,0x00,0x08,
93559 -0x21,0x30,0xE0,0x00,
93560 -0x0B,0x00,0x40,0x10,
93561 -0x00,0x00,0x00,0x00,
93562 -0x00,0x00,0xC3,0x90,
93563 -0x01,0x00,0x82,0x24,
93564 -0xFF,0x00,0x44,0x30,
93565 -0x00,0x1E,0x03,0x00,
93566 -0x03,0x1E,0x03,0x00,
93567 -0xF8,0xFF,0x60,0x04,
93568 -0x64,0x00,0x82,0x2C,
93569 -0x64,0x00,0x82,0x2C,
93570 -0xF1,0xFF,0x40,0x14,
93571 -0x00,0x00,0x00,0x00,
93572 -0x08,0x00,0xE0,0x03,
93573 -0x21,0x10,0x00,0x00,
93574 -0xE0,0xFF,0xBD,0x27,
93575 -0x25,0xB0,0x02,0x3C,
93576 -0x18,0x00,0xB0,0xAF,
93577 -0xF8,0x02,0x45,0x34,
93578 -0x25,0xB0,0x10,0x3C,
93579 -0xFF,0x00,0x83,0x30,
93580 -0x01,0x00,0x02,0x24,
93581 -0x1C,0x00,0xBF,0xAF,
93582 -0x03,0x00,0x06,0x36,
93583 -0x0A,0x00,0x62,0x10,
93584 -0x0A,0x00,0x04,0x24,
93585 -0x00,0x00,0xA2,0x90,
93586 -0x1C,0x00,0xBF,0x8F,
93587 -0x18,0x00,0xB0,0x8F,
93588 -0xFE,0xFF,0x03,0x24,
93589 -0x24,0x10,0x43,0x00,
93590 -0x20,0x00,0xBD,0x27,
93591 -0x00,0x00,0xA2,0xA0,
93592 -0x08,0x00,0xE0,0x03,
93593 -0x00,0x00,0x00,0x00,
93594 -0x00,0x00,0xC2,0x90,
93595 -0x00,0x00,0x00,0x00,
93596 -0xFF,0x00,0x42,0x30,
93597 -0x20,0x00,0x43,0x34,
93598 -0x20,0x00,0x42,0x30,
93599 -0x02,0x00,0x40,0x14,
93600 -0x00,0x00,0x00,0x00,
93601 -0x00,0x00,0xC3,0xA0,
93602 -0x25,0x22,0x00,0x0C,
93603 -0x00,0x00,0x00,0x00,
93604 -0x01,0x00,0x04,0x36,
93605 -0x00,0x00,0x82,0x90,
93606 -0xFE,0xFF,0x03,0x24,
93607 -0xF8,0x02,0x06,0x36,
93608 -0x24,0x10,0x43,0x00,
93609 -0x00,0x00,0x82,0xA0,
93610 -0x00,0x00,0xC3,0x90,
93611 -0x10,0x00,0xA5,0x27,
93612 -0x21,0x20,0x00,0x00,
93613 -0x03,0x00,0x63,0x34,
93614 -0x00,0x00,0xC3,0xA0,
93615 -0x91,0x56,0x00,0x0C,
93616 -0x00,0x00,0x00,0x00,
93617 -0x1C,0x00,0xBF,0x8F,
93618 -0x18,0x00,0xB0,0x8F,
93619 -0x08,0x00,0xE0,0x03,
93620 -0x20,0x00,0xBD,0x27,
93621 -0xFF,0x00,0x84,0x30,
93622 -0x21,0x38,0x00,0x00,
93623 -0x21,0x28,0x00,0x00,
93624 -0x01,0x00,0xA3,0x24,
93625 -0x07,0x10,0xA4,0x00,
93626 -0x01,0x00,0x42,0x30,
93627 -0xFF,0x00,0x65,0x30,
93628 -0x01,0x00,0xE6,0x24,
93629 -0x02,0x00,0x40,0x14,
93630 -0x04,0x00,0xA3,0x2C,
93631 -0xFF,0x00,0xC7,0x30,
93632 -0xF7,0xFF,0x60,0x14,
93633 -0x21,0x10,0xE0,0x00,
93634 -0x08,0x00,0xE0,0x03,
93635 -0x00,0x00,0x00,0x00,
93636 -0xFF,0x00,0x8C,0x30,
93637 -0x21,0x48,0x00,0x00,
93638 -0x21,0x38,0x00,0x00,
93639 -0x40,0x10,0x07,0x00,
93640 -0xFF,0x00,0x42,0x30,
93641 -0x21,0x50,0x46,0x00,
93642 -0x01,0x00,0xE3,0x24,
93643 -0x07,0x10,0xEC,0x00,
93644 -0x01,0x00,0x42,0x30,
93645 -0xFF,0x00,0x67,0x30,
93646 -0x21,0x58,0x25,0x01,
93647 -0x01,0x00,0x24,0x25,
93648 -0x09,0x00,0x40,0x14,
93649 -0x04,0x00,0xE8,0x2C,
93650 -0x00,0x00,0x63,0x91,
93651 -0xFF,0x00,0x89,0x30,
93652 -0x21,0x20,0x25,0x01,
93653 -0x00,0x00,0x43,0xA1,
93654 -0x00,0x00,0x83,0x90,
93655 -0x01,0x00,0x22,0x25,
93656 -0xFF,0x00,0x49,0x30,
93657 -0x01,0x00,0x43,0xA1,
93658 -0xED,0xFF,0x00,0x15,
93659 -0x40,0x10,0x07,0x00,
93660 -0x08,0x00,0xE0,0x03,
93661 -0x00,0x00,0x00,0x00,
93662 -0xD8,0xFF,0xBD,0x27,
93663 -0x20,0x00,0xB2,0xAF,
93664 -0x1C,0x00,0xB1,0xAF,
93665 -0x18,0x00,0xB0,0xAF,
93666 -0x24,0x00,0xBF,0xAF,
93667 -0x01,0x00,0x12,0x24,
93668 -0x21,0x80,0x00,0x00,
93669 -0x57,0x57,0x00,0x08,
93670 -0xFF,0x00,0x11,0x24,
93671 -0x91,0x56,0x00,0x0C,
93672 -0x00,0x00,0x00,0x00,
93673 -0x10,0x00,0x40,0x10,
93674 -0x00,0x02,0x03,0x2E,
93675 -0x0F,0x00,0x60,0x10,
93676 -0x21,0x10,0x00,0x02,
93677 -0x10,0x00,0xA2,0x93,
93678 -0x00,0x00,0x00,0x00,
93679 -0x0A,0x00,0x51,0x10,
93680 -0x0F,0x00,0x44,0x30,
93681 -0x15,0x57,0x00,0x0C,
93682 -0x00,0x00,0x00,0x00,
93683 -0x40,0x10,0x02,0x00,
93684 -0x21,0x10,0x50,0x00,
93685 -0x01,0x00,0x42,0x24,
93686 -0xFF,0xFF,0x50,0x30,
93687 -0x21,0x20,0x00,0x02,
93688 -0xEE,0xFF,0x40,0x16,
93689 -0x10,0x00,0xA5,0x27,
93690 -0x21,0x10,0x00,0x02,
93691 -0x24,0x00,0xBF,0x8F,
93692 -0x20,0x00,0xB2,0x8F,
93693 -0x1C,0x00,0xB1,0x8F,
93694 -0x18,0x00,0xB0,0x8F,
93695 -0x08,0x00,0xE0,0x03,
93696 -0x28,0x00,0xBD,0x27,
93697 -0xB8,0xFF,0xBD,0x27,
93698 -0x3C,0x00,0xB7,0xAF,
93699 -0x38,0x00,0xB6,0xAF,
93700 -0x34,0x00,0xB5,0xAF,
93701 -0x30,0x00,0xB4,0xAF,
93702 -0x2C,0x00,0xB3,0xAF,
93703 -0x24,0x00,0xB1,0xAF,
93704 -0x20,0x00,0xB0,0xAF,
93705 -0x44,0x00,0xBF,0xAF,
93706 -0x40,0x00,0xBE,0xAF,
93707 -0x28,0x00,0xB2,0xAF,
93708 -0x21,0x98,0xA0,0x00,
93709 -0xFF,0x00,0x96,0x30,
93710 -0x01,0x00,0x10,0x24,
93711 -0x01,0x00,0x17,0x24,
93712 -0x21,0xA0,0x00,0x00,
93713 -0x21,0x88,0x00,0x00,
93714 -0x21,0xA8,0x00,0x00,
93715 -0x04,0x00,0xA0,0x10,
93716 -0x21,0x18,0x00,0x00,
93717 -0x10,0x00,0xC2,0x2E,
93718 -0x0E,0x00,0x40,0x14,
93719 -0x21,0x20,0xA0,0x00,
93720 -0x44,0x00,0xBF,0x8F,
93721 -0x40,0x00,0xBE,0x8F,
93722 -0x3C,0x00,0xB7,0x8F,
93723 -0x38,0x00,0xB6,0x8F,
93724 -0x34,0x00,0xB5,0x8F,
93725 -0x30,0x00,0xB4,0x8F,
93726 -0x2C,0x00,0xB3,0x8F,
93727 -0x28,0x00,0xB2,0x8F,
93728 -0x24,0x00,0xB1,0x8F,
93729 -0x20,0x00,0xB0,0x8F,
93730 -0x21,0x10,0x60,0x00,
93731 -0x08,0x00,0xE0,0x03,
93732 -0x48,0x00,0xBD,0x27,
93733 -0x08,0x00,0x06,0x24,
93734 -0xFF,0x51,0x00,0x0C,
93735 -0xFF,0x00,0x05,0x24,
93736 -0x18,0x00,0xA4,0x27,
93737 -0xFF,0x00,0x05,0x24,
93738 -0xFF,0x51,0x00,0x0C,
93739 -0x08,0x00,0x06,0x24,
93740 -0xE6,0x56,0x00,0x0C,
93741 -0x01,0x00,0x04,0x24,
93742 -0x96,0x57,0x00,0x08,
93743 -0x10,0x00,0xBE,0x27,
93744 -0x1C,0x00,0x40,0x14,
93745 -0x21,0x20,0xA0,0x02,
93746 -0x37,0x00,0xE0,0x12,
93747 -0x00,0x02,0x22,0x2E,
93748 -0x35,0x00,0x40,0x10,
93749 -0x00,0x00,0x00,0x00,
93750 -0x01,0x00,0x02,0x32,
93751 -0xF8,0xFF,0x40,0x10,
93752 -0x20,0x00,0x02,0x32,
93753 -0x21,0x20,0x20,0x02,
93754 -0x91,0x56,0x00,0x0C,
93755 -0x10,0x00,0xA5,0x27,
93756 -0x2D,0x00,0x40,0x10,
93757 -0xFF,0x00,0x02,0x24,
93758 -0x10,0x00,0xB0,0x93,
93759 -0x00,0x00,0x00,0x00,
93760 -0x29,0x00,0x02,0x12,
93761 -0x0F,0x00,0x15,0x32,
93762 -0x15,0x57,0x00,0x0C,
93763 -0x21,0x20,0xA0,0x02,
93764 -0x02,0x81,0x10,0x00,
93765 -0x10,0x00,0x16,0x12,
93766 -0x21,0xA0,0x40,0x00,
93767 -0x40,0x10,0x14,0x00,
93768 -0x21,0x10,0x51,0x00,
93769 -0x01,0x00,0x42,0x24,
93770 -0xFF,0xFF,0x51,0x30,
93771 -0x92,0x57,0x00,0x08,
93772 -0x01,0x00,0x10,0x24,
93773 -0x18,0x00,0xA5,0x27,
93774 -0x24,0x57,0x00,0x0C,
93775 -0x21,0x30,0x60,0x02,
93776 -0x40,0x10,0x14,0x00,
93777 -0x21,0x10,0x51,0x00,
93778 -0x01,0x00,0x42,0x24,
93779 -0xFF,0xFF,0x51,0x30,
93780 -0x92,0x57,0x00,0x08,
93781 -0x01,0x00,0x10,0x24,
93782 -0x40,0x90,0x02,0x00,
93783 -0x10,0x00,0x40,0x1A,
93784 -0x21,0x80,0x00,0x00,
93785 -0x21,0x20,0x30,0x02,
93786 -0x01,0x00,0x84,0x24,
93787 -0xFF,0xFF,0x84,0x30,
93788 -0x91,0x56,0x00,0x0C,
93789 -0x10,0x00,0xA5,0x27,
93790 -0x01,0x00,0x03,0x26,
93791 -0x21,0x20,0xD0,0x03,
93792 -0xFF,0x00,0x70,0x30,
93793 -0x04,0x00,0x40,0x10,
93794 -0x2A,0x18,0x12,0x02,
93795 -0x10,0x00,0xA2,0x93,
93796 -0x00,0x00,0x00,0x00,
93797 -0x08,0x00,0x82,0xA0,
93798 -0xF3,0xFF,0x60,0x14,
93799 -0x21,0x20,0x30,0x02,
93800 -0x92,0x57,0x00,0x08,
93801 -0x20,0x00,0x10,0x24,
93802 -0xE6,0x56,0x00,0x0C,
93803 -0x21,0x20,0x00,0x00,
93804 -0x00,0x00,0x63,0x92,
93805 -0xFF,0x00,0x02,0x24,
93806 -0x0F,0x00,0x62,0x10,
93807 -0x00,0x00,0x00,0x00,
93808 -0x01,0x00,0x03,0x24,
93809 -0x44,0x00,0xBF,0x8F,
93810 -0x40,0x00,0xBE,0x8F,
93811 -0x3C,0x00,0xB7,0x8F,
93812 -0x38,0x00,0xB6,0x8F,
93813 -0x34,0x00,0xB5,0x8F,
93814 -0x30,0x00,0xB4,0x8F,
93815 -0x2C,0x00,0xB3,0x8F,
93816 -0x28,0x00,0xB2,0x8F,
93817 -0x24,0x00,0xB1,0x8F,
93818 -0x20,0x00,0xB0,0x8F,
93819 -0x21,0x10,0x60,0x00,
93820 -0x08,0x00,0xE0,0x03,
93821 -0x48,0x00,0xBD,0x27,
93822 -0x01,0x00,0x62,0x92,
93823 -0x00,0x00,0x00,0x00,
93824 -0xF0,0xFF,0x43,0x14,
93825 -0x01,0x00,0x03,0x24,
93826 -0x02,0x00,0x63,0x92,
93827 -0x00,0x00,0x00,0x00,
93828 -0xEB,0xFF,0x62,0x14,
93829 -0x00,0x00,0x00,0x00,
93830 -0x03,0x00,0x62,0x92,
93831 -0x00,0x00,0x00,0x00,
93832 -0xE8,0xFF,0x43,0x14,
93833 -0x01,0x00,0x03,0x24,
93834 -0x04,0x00,0x63,0x92,
93835 -0x00,0x00,0x00,0x00,
93836 -0xE3,0xFF,0x62,0x14,
93837 -0x00,0x00,0x00,0x00,
93838 -0x05,0x00,0x62,0x92,
93839 -0x00,0x00,0x00,0x00,
93840 -0xDF,0xFF,0x43,0x14,
93841 -0x00,0x00,0x00,0x00,
93842 -0x06,0x00,0x67,0x92,
93843 -0x00,0x00,0x00,0x00,
93844 -0xDC,0xFF,0xE2,0x14,
93845 -0x01,0x00,0x03,0x24,
93846 -0x07,0x00,0x62,0x92,
93847 -0x00,0x00,0x00,0x00,
93848 -0x7F,0xFF,0x47,0x10,
93849 -0x21,0x18,0x00,0x00,
93850 -0xD1,0x57,0x00,0x08,
93851 -0x01,0x00,0x03,0x24,
93852 -0xC0,0xFF,0xBD,0x27,
93853 -0x38,0x00,0xBE,0xAF,
93854 -0x30,0x00,0xB6,0xAF,
93855 -0x2C,0x00,0xB5,0xAF,
93856 -0x21,0xF0,0xC0,0x00,
93857 -0xFF,0x00,0xB6,0x30,
93858 -0xFF,0xFF,0x95,0x30,
93859 -0xFF,0x00,0x05,0x24,
93860 -0x10,0x00,0xA4,0x27,
93861 -0x08,0x00,0x06,0x24,
93862 -0x34,0x00,0xB7,0xAF,
93863 -0x24,0x00,0xB3,0xAF,
93864 -0x3C,0x00,0xBF,0xAF,
93865 -0x28,0x00,0xB4,0xAF,
93866 -0x20,0x00,0xB2,0xAF,
93867 -0x1C,0x00,0xB1,0xAF,
93868 -0x18,0x00,0xB0,0xAF,
93869 -0xFF,0x51,0x00,0x0C,
93870 -0x0F,0x00,0x17,0x24,
93871 -0x21,0x98,0x00,0x00,
93872 -0x40,0x10,0x13,0x00,
93873 -0xFF,0x00,0x52,0x30,
93874 -0x07,0x10,0x76,0x02,
93875 -0x01,0x00,0x42,0x30,
93876 -0x21,0xA0,0x5E,0x02,
93877 -0x21,0x88,0xA0,0x02,
93878 -0x21,0x20,0xA0,0x02,
93879 -0x13,0x00,0x40,0x10,
93880 -0x01,0x00,0xA3,0x26,
93881 -0x01,0x00,0x62,0x26,
93882 -0xFF,0x00,0x53,0x30,
93883 -0x04,0x00,0x63,0x2E,
93884 -0xF4,0xFF,0x60,0x14,
93885 -0x40,0x10,0x13,0x00,
93886 -0x21,0x10,0xE0,0x02,
93887 -0x3C,0x00,0xBF,0x8F,
93888 -0x38,0x00,0xBE,0x8F,
93889 -0x34,0x00,0xB7,0x8F,
93890 -0x30,0x00,0xB6,0x8F,
93891 -0x2C,0x00,0xB5,0x8F,
93892 -0x28,0x00,0xB4,0x8F,
93893 -0x24,0x00,0xB3,0x8F,
93894 -0x20,0x00,0xB2,0x8F,
93895 -0x1C,0x00,0xB1,0x8F,
93896 -0x18,0x00,0xB0,0x8F,
93897 -0x08,0x00,0xE0,0x03,
93898 -0x40,0x00,0xBD,0x27,
93899 -0x00,0x00,0x85,0x92,
93900 -0xFF,0xFF,0x75,0x30,
93901 -0xBE,0x56,0x00,0x0C,
93902 -0x21,0x80,0xA0,0x02,
93903 -0x01,0x00,0x85,0x92,
93904 -0x21,0x20,0xA0,0x02,
93905 -0x01,0x00,0xA2,0x26,
93906 -0xBE,0x56,0x00,0x0C,
93907 -0xFF,0xFF,0x55,0x30,
93908 -0x10,0x00,0xA3,0x27,
93909 -0x21,0x90,0x72,0x00,
93910 -0x21,0x20,0x20,0x02,
93911 -0x91,0x56,0x00,0x0C,
93912 -0x21,0x28,0x40,0x02,
93913 -0x21,0x20,0x00,0x02,
93914 -0x91,0x56,0x00,0x0C,
93915 -0x01,0x00,0x45,0x26,
93916 -0x00,0x00,0x84,0x92,
93917 -0x00,0x00,0x42,0x92,
93918 -0x01,0x00,0x03,0x24,
93919 -0x04,0x18,0x63,0x02,
93920 -0x03,0x00,0x82,0x10,
93921 -0x27,0x30,0x03,0x00,
93922 -0x19,0x58,0x00,0x08,
93923 -0x24,0xB8,0xD7,0x00,
93924 -0x01,0x00,0x83,0x92,
93925 -0x01,0x00,0x42,0x92,
93926 -0x00,0x00,0x00,0x00,
93927 -0xD2,0xFF,0x62,0x10,
93928 -0x01,0x00,0x62,0x26,
93929 -0x1A,0x58,0x00,0x08,
93930 -0x24,0xB8,0xD7,0x00,
93931 -0x98,0xFF,0xBD,0x27,
93932 -0x50,0x00,0xB4,0xAF,
93933 -0xFF,0x00,0x94,0x30,
93934 -0x01,0x00,0x04,0x24,
93935 -0x64,0x00,0xBF,0xAF,
93936 -0x60,0x00,0xBE,0xAF,
93937 -0x5C,0x00,0xB7,0xAF,
93938 -0x58,0x00,0xB6,0xAF,
93939 -0x4C,0x00,0xB3,0xAF,
93940 -0x48,0x00,0xB2,0xAF,
93941 -0x44,0x00,0xB1,0xAF,
93942 -0x21,0x98,0xC0,0x00,
93943 -0xFF,0x00,0xB1,0x30,
93944 -0x54,0x00,0xB5,0xAF,
93945 -0xE6,0x56,0x00,0x0C,
93946 -0x40,0x00,0xB0,0xAF,
93947 -0x3E,0x57,0x00,0x0C,
93948 -0x01,0x00,0x16,0x24,
93949 -0x21,0x18,0x40,0x00,
93950 -0xFF,0x01,0x42,0x2C,
93951 -0x01,0x00,0x17,0x24,
93952 -0x01,0x00,0x1E,0x24,
93953 -0x21,0x90,0x00,0x00,
93954 -0x0E,0x00,0x40,0x14,
93955 -0x21,0x20,0x00,0x00,
93956 -0x64,0x00,0xBF,0x8F,
93957 -0x60,0x00,0xBE,0x8F,
93958 -0x5C,0x00,0xB7,0x8F,
93959 -0x58,0x00,0xB6,0x8F,
93960 -0x54,0x00,0xB5,0x8F,
93961 -0x50,0x00,0xB4,0x8F,
93962 -0x4C,0x00,0xB3,0x8F,
93963 -0x48,0x00,0xB2,0x8F,
93964 -0x44,0x00,0xB1,0x8F,
93965 -0x40,0x00,0xB0,0x8F,
93966 -0x21,0x10,0x80,0x00,
93967 -0x08,0x00,0xE0,0x03,
93968 -0x68,0x00,0xBD,0x27,
93969 -0xFF,0x01,0x02,0x24,
93970 -0x23,0x10,0x43,0x00,
93971 -0x1A,0x00,0xA4,0x27,
93972 -0xFF,0x00,0x05,0x24,
93973 -0x08,0x00,0x06,0x24,
93974 -0xFF,0xFF,0x50,0x30,
93975 -0x18,0x00,0xB4,0xA3,
93976 -0xFF,0x51,0x00,0x0C,
93977 -0x19,0x00,0xB1,0xA3,
93978 -0x21,0x20,0x20,0x02,
93979 -0x21,0x28,0x60,0x02,
93980 -0x24,0x57,0x00,0x0C,
93981 -0x1A,0x00,0xA6,0x27,
93982 -0x19,0x00,0xA4,0x93,
93983 -0x15,0x57,0x00,0x0C,
93984 -0x00,0x00,0x00,0x00,
93985 -0x21,0xA8,0x40,0x00,
93986 -0xFF,0xFF,0x42,0x30,
93987 -0x2B,0x10,0x02,0x02,
93988 -0xDF,0xFF,0x40,0x14,
93989 -0x21,0x20,0x00,0x00,
93990 -0x01,0x00,0x02,0x24,
93991 -0x09,0x00,0xC2,0x12,
93992 -0x20,0x00,0x02,0x24,
93993 -0x22,0x00,0xC2,0x12,
93994 -0x00,0x00,0x00,0x00,
93995 -0x3B,0x00,0xE0,0x12,
93996 -0x00,0x02,0x42,0x2E,
93997 -0x39,0x00,0x40,0x10,
93998 -0x01,0x00,0x02,0x24,
93999 -0xF9,0xFF,0xC2,0x16,
94000 -0x20,0x00,0x02,0x24,
94001 -0x21,0x20,0x40,0x02,
94002 -0x10,0x00,0xA5,0x27,
94003 -0x91,0x56,0x00,0x0C,
94004 -0x01,0x00,0x13,0x24,
94005 -0x41,0x00,0x40,0x10,
94006 -0xFF,0x00,0x02,0x24,
94007 -0x10,0x00,0xA5,0x93,
94008 -0x00,0x00,0x00,0x00,
94009 -0xFF,0x00,0xA4,0x30,
94010 -0x3C,0x00,0x82,0x10,
94011 -0x0F,0x00,0xA3,0x30,
94012 -0x02,0x11,0x04,0x00,
94013 -0x21,0x20,0x60,0x00,
94014 -0x29,0x00,0xA3,0xA3,
94015 -0x28,0x00,0xA2,0xA3,
94016 -0x15,0x57,0x00,0x0C,
94017 -0x11,0x00,0xA5,0xA3,
94018 -0x21,0x80,0x40,0x00,
94019 -0x28,0x00,0xA3,0x93,
94020 -0x18,0x00,0xA2,0x93,
94021 -0x00,0x00,0x00,0x00,
94022 -0x5F,0x00,0x62,0x10,
94023 -0x40,0x10,0x10,0x00,
94024 -0x21,0x10,0x52,0x00,
94025 -0x01,0x00,0x42,0x24,
94026 -0x8B,0x58,0x00,0x08,
94027 -0xFF,0xFF,0x52,0x30,
94028 -0x19,0x00,0xA5,0x93,
94029 -0x01,0x00,0x44,0x26,
94030 -0xFF,0xFF,0x84,0x30,
94031 -0xFC,0x57,0x00,0x0C,
94032 -0x1A,0x00,0xA6,0x27,
94033 -0x21,0x28,0x40,0x00,
94034 -0x0F,0x00,0x43,0x30,
94035 -0x0F,0x00,0x02,0x24,
94036 -0x12,0x00,0x62,0x10,
94037 -0x40,0x10,0x15,0x00,
94038 -0x21,0x10,0x52,0x00,
94039 -0x01,0x00,0x42,0x24,
94040 -0x21,0x20,0xA0,0x00,
94041 -0xFF,0xFF,0x52,0x30,
94042 -0x18,0x00,0xB4,0xA3,
94043 -0x15,0x57,0x00,0x0C,
94044 -0x19,0x00,0xA5,0xA3,
94045 -0x21,0xA8,0x40,0x00,
94046 -0x02,0x80,0x03,0x3C,
94047 -0x04,0xE4,0x62,0x8C,
94048 -0x02,0x80,0x04,0x3C,
94049 -0x01,0x00,0x16,0x24,
94050 -0x01,0x00,0x42,0x24,
94051 -0x04,0x00,0x43,0x28,
94052 -0xC6,0xFF,0x60,0x14,
94053 -0x04,0xE4,0x82,0xAC,
94054 -0x21,0xF0,0x00,0x00,
94055 -0xE6,0x56,0x00,0x0C,
94056 -0x21,0x20,0x00,0x00,
94057 -0x21,0x20,0xC0,0x03,
94058 -0x64,0x00,0xBF,0x8F,
94059 -0x60,0x00,0xBE,0x8F,
94060 -0x5C,0x00,0xB7,0x8F,
94061 -0x58,0x00,0xB6,0x8F,
94062 -0x54,0x00,0xB5,0x8F,
94063 -0x50,0x00,0xB4,0x8F,
94064 -0x4C,0x00,0xB3,0x8F,
94065 -0x48,0x00,0xB2,0x8F,
94066 -0x44,0x00,0xB1,0x8F,
94067 -0x40,0x00,0xB0,0x8F,
94068 -0x21,0x10,0x80,0x00,
94069 -0x08,0x00,0xE0,0x03,
94070 -0x68,0x00,0xBD,0x27,
94071 -0x3E,0x57,0x00,0x0C,
94072 -0x00,0x00,0x00,0x00,
94073 -0xFF,0x01,0x03,0x24,
94074 -0x23,0x18,0x62,0x00,
94075 -0xFF,0xFF,0x70,0x30,
94076 -0xFF,0xFF,0xA2,0x32,
94077 -0x2B,0x10,0x02,0x02,
94078 -0xE7,0xFF,0x40,0x14,
94079 -0x21,0x20,0x40,0x02,
94080 -0x18,0x00,0xB0,0x93,
94081 -0x19,0x00,0xA2,0x93,
94082 -0x00,0x81,0x10,0x00,
94083 -0x25,0x80,0x02,0x02,
94084 -0xFF,0x00,0x10,0x32,
94085 -0xBE,0x56,0x00,0x0C,
94086 -0x21,0x28,0x00,0x02,
94087 -0x21,0x20,0x40,0x02,
94088 -0x91,0x56,0x00,0x0C,
94089 -0x11,0x00,0xA5,0x27,
94090 -0x11,0x00,0xA3,0x93,
94091 -0x00,0x00,0x00,0x00,
94092 -0xFF,0x00,0x64,0x30,
94093 -0x9D,0xFF,0x90,0x10,
94094 -0x20,0x00,0x16,0x24,
94095 -0xFF,0x00,0x02,0x24,
94096 -0xCD,0xFF,0x82,0x10,
94097 -0x0F,0x00,0x63,0x30,
94098 -0x02,0x11,0x04,0x00,
94099 -0x21,0x20,0x60,0x00,
94100 -0x29,0x00,0xA3,0xA3,
94101 -0x15,0x57,0x00,0x0C,
94102 -0x28,0x00,0xA2,0xA3,
94103 -0x38,0x00,0xA4,0x27,
94104 -0xFF,0x00,0x05,0x24,
94105 -0x08,0x00,0x06,0x24,
94106 -0xFF,0x51,0x00,0x0C,
94107 -0x21,0x80,0x40,0x00,
94108 -0x28,0x00,0xA4,0x93,
94109 -0x61,0x57,0x00,0x0C,
94110 -0x38,0x00,0xA5,0x27,
94111 -0x1F,0x00,0x40,0x14,
94112 -0x01,0x00,0x44,0x26,
94113 -0x40,0x10,0x10,0x00,
94114 -0x21,0x10,0x52,0x00,
94115 -0x01,0x00,0x42,0x24,
94116 -0xBE,0x58,0x00,0x08,
94117 -0xFF,0xFF,0x52,0x30,
94118 -0x40,0x88,0x10,0x00,
94119 -0x27,0x00,0x20,0x1A,
94120 -0x21,0x80,0x00,0x00,
94121 -0xFF,0x00,0x16,0x24,
94122 -0x21,0x20,0x50,0x02,
94123 -0x01,0x00,0x84,0x24,
94124 -0xFF,0xFF,0x84,0x30,
94125 -0x91,0x56,0x00,0x0C,
94126 -0x10,0x00,0xA5,0x27,
94127 -0x01,0x00,0x03,0x26,
94128 -0xFF,0x00,0x70,0x30,
94129 -0x05,0x00,0x40,0x10,
94130 -0x2A,0x18,0x11,0x02,
94131 -0x10,0x00,0xA2,0x93,
94132 -0x00,0x00,0x00,0x00,
94133 -0x26,0x10,0x56,0x00,
94134 -0x0B,0x98,0x02,0x00,
94135 -0xF3,0xFF,0x60,0x14,
94136 -0x21,0x20,0x50,0x02,
94137 -0x15,0x00,0x60,0x16,
94138 -0x21,0x10,0x32,0x02,
94139 -0x01,0x00,0x42,0x24,
94140 -0xFF,0xFF,0x52,0x30,
94141 -0x8B,0x58,0x00,0x08,
94142 -0x01,0x00,0x16,0x24,
94143 -0x29,0x00,0xA5,0x93,
94144 -0xFF,0xFF,0x84,0x30,
94145 -0xFC,0x57,0x00,0x0C,
94146 -0x38,0x00,0xA6,0x27,
94147 -0x21,0x28,0x40,0x00,
94148 -0x0F,0x00,0x43,0x30,
94149 -0x0F,0x00,0x02,0x24,
94150 -0xDB,0xFF,0x62,0x10,
94151 -0x40,0x10,0x10,0x00,
94152 -0x28,0x00,0xA4,0x93,
94153 -0x4B,0x58,0x00,0x0C,
94154 -0x38,0x00,0xA6,0x27,
94155 -0x3E,0x57,0x00,0x0C,
94156 -0x00,0x00,0x00,0x00,
94157 -0xBE,0x58,0x00,0x08,
94158 -0x21,0x90,0x40,0x00,
94159 -0x19,0x00,0xA3,0x93,
94160 -0x29,0x00,0xA6,0x93,
94161 -0x0F,0x00,0x13,0x24,
94162 -0x0E,0x00,0x10,0x24,
94163 -0x25,0x18,0x66,0x00,
94164 -0x01,0x00,0x62,0x30,
94165 -0x0A,0x98,0x02,0x02,
94166 -0x02,0x00,0x64,0x30,
94167 -0xFD,0x00,0x62,0x32,
94168 -0x0A,0x98,0x44,0x00,
94169 -0x04,0x00,0x65,0x30,
94170 -0xFB,0x00,0x62,0x32,
94171 -0x0A,0x98,0x45,0x00,
94172 -0x08,0x00,0x63,0x30,
94173 -0xF7,0x00,0x62,0x32,
94174 -0x0A,0x98,0x43,0x00,
94175 -0x0F,0x00,0x64,0x32,
94176 -0x0F,0x00,0x16,0x24,
94177 -0x25,0x00,0x96,0x10,
94178 -0x21,0x28,0xC0,0x00,
94179 -0x01,0x00,0x44,0x26,
94180 -0xFF,0xFF,0x84,0x30,
94181 -0xFC,0x57,0x00,0x0C,
94182 -0x1A,0x00,0xA6,0x27,
94183 -0x21,0x28,0x40,0x00,
94184 -0x0F,0x00,0x42,0x30,
94185 -0x03,0x00,0x56,0x10,
94186 -0x21,0x20,0x80,0x02,
94187 -0x4B,0x58,0x00,0x0C,
94188 -0x38,0x00,0xA6,0x27,
94189 -0x19,0x00,0xA5,0x93,
94190 -0x00,0x00,0x00,0x00,
94191 -0x26,0x10,0x65,0x02,
94192 -0x01,0x00,0x42,0x30,
94193 -0x0A,0x80,0xC2,0x02,
94194 -0x26,0x18,0x65,0x02,
94195 -0x02,0x00,0x63,0x30,
94196 -0xFD,0x00,0x04,0x32,
94197 -0x0B,0x80,0x83,0x00,
94198 -0x26,0x10,0x65,0x02,
94199 -0x04,0x00,0x42,0x30,
94200 -0xFB,0x00,0x03,0x32,
94201 -0x0B,0x80,0x62,0x00,
94202 -0x26,0x28,0x65,0x02,
94203 -0x08,0x00,0xA5,0x30,
94204 -0xF7,0x00,0x02,0x32,
94205 -0x0B,0x80,0x45,0x00,
94206 -0x0F,0x00,0x03,0x32,
94207 -0x0D,0x00,0x76,0x10,
94208 -0x00,0x00,0x00,0x00,
94209 -0x3E,0x57,0x00,0x0C,
94210 -0x00,0x00,0x00,0x00,
94211 -0x21,0x90,0x40,0x00,
94212 -0x19,0x00,0xB0,0xA3,
94213 -0xBE,0x58,0x00,0x08,
94214 -0x18,0x00,0xB4,0xA3,
94215 -0x21,0x10,0x32,0x02,
94216 -0x01,0x00,0x42,0x24,
94217 -0xFF,0xFF,0x52,0x30,
94218 -0x01,0x00,0x16,0x24,
94219 -0x8B,0x58,0x00,0x08,
94220 -0x18,0x00,0xB4,0xA3,
94221 -0xBE,0x58,0x00,0x08,
94222 -0x21,0xB8,0x00,0x00,
94223 -0x01,0x80,0x02,0x3C,
94224 -0x25,0xB0,0x03,0x3C,
94225 -0xBC,0x65,0x42,0x24,
94226 -0x18,0x03,0x63,0x34,
94227 -0x00,0x00,0x62,0xAC,
94228 -0x00,0x00,0x83,0x90,
94229 -0x30,0x00,0x02,0x24,
94230 -0x05,0x00,0x62,0x10,
94231 -0x21,0x20,0x00,0x00,
94232 -0x31,0x00,0x02,0x24,
94233 -0x02,0x00,0x62,0x10,
94234 -0x01,0x00,0x04,0x24,
94235 -0x07,0x00,0x04,0x24,
94236 -0x93,0x55,0x00,0x08,
94237 -0x00,0x00,0x00,0x00,
94238 -0x01,0x80,0x02,0x3C,
94239 -0x25,0xB0,0x03,0x3C,
94240 -0xF8,0x65,0x42,0x24,
94241 -0x18,0x03,0x63,0x34,
94242 -0x02,0x80,0x04,0x3C,
94243 -0x00,0x00,0x62,0xAC,
94244 -0x08,0x00,0xE0,0x03,
94245 -0x14,0x5E,0x80,0xAC,
94246 -0x42,0xB0,0x02,0x3C,
94247 -0x03,0x00,0x47,0x34,
94248 -0x00,0x00,0xE3,0x90,
94249 -0xFF,0x00,0x84,0x30,
94250 -0x04,0x00,0x84,0x24,
94251 -0xFF,0x00,0x65,0x30,
94252 -0x01,0x00,0x02,0x24,
94253 -0x04,0x30,0x82,0x00,
94254 -0x07,0x18,0x85,0x00,
94255 -0x25,0xB0,0x02,0x3C,
94256 -0xE8,0x03,0x42,0x34,
94257 -0x01,0x00,0x63,0x30,
94258 -0x21,0x20,0xC0,0x00,
94259 -0x00,0x00,0x45,0xA0,
94260 -0x02,0x00,0x60,0x10,
94261 -0x00,0x00,0x00,0x00,
94262 -0x00,0x00,0xE6,0xA0,
94263 -0x08,0x00,0xE0,0x03,
94264 -0x24,0x10,0x85,0x00,
94265 -0x00,0x60,0x03,0x40,
94266 -0x01,0x00,0x61,0x34,
94267 -0x01,0x00,0x21,0x38,
94268 -0x00,0x60,0x81,0x40,
94269 -0x02,0x80,0x02,0x3C,
94270 -0x08,0xE4,0x42,0x24,
94271 -0x04,0x00,0x45,0x8C,
94272 -0x00,0x00,0x82,0xAC,
94273 -0x04,0x00,0x44,0xAC,
94274 -0x00,0x00,0xA4,0xAC,
94275 -0x04,0x00,0x85,0xAC,
94276 -0x00,0x60,0x83,0x40,
94277 -0x08,0x00,0xE0,0x03,
94278 -0x00,0x00,0x00,0x00,
94279 -0x00,0x60,0x03,0x40,
94280 -0x01,0x00,0x61,0x34,
94281 -0x01,0x00,0x21,0x38,
94282 -0x00,0x60,0x81,0x40,
94283 -0x04,0x00,0x85,0x8C,
94284 -0x00,0x00,0x82,0x8C,
94285 -0x00,0x00,0x00,0x00,
94286 -0x00,0x00,0xA2,0xAC,
94287 -0x04,0x00,0x45,0xAC,
94288 -0x00,0x00,0x84,0xAC,
94289 -0x04,0x00,0x84,0xAC,
94290 -0x00,0x60,0x83,0x40,
94291 -0x08,0x00,0xE0,0x03,
94292 -0x00,0x00,0x00,0x00,
94293 -0x00,0x00,0x85,0xAC,
94294 -0x21,0x10,0x00,0x00,
94295 -0x01,0x00,0x42,0x24,
94296 -0xFF,0x00,0x42,0x30,
94297 -0x06,0x00,0x43,0x2C,
94298 -0xFC,0xFF,0x60,0x14,
94299 -0x00,0x00,0x00,0x00,
94300 -0x08,0x00,0xE0,0x03,
94301 -0x00,0x00,0x00,0x00,
94302 -0x02,0x24,0x04,0x00,
94303 -0xFF,0x00,0x84,0x30,
94304 -0xC0,0x18,0x04,0x00,
94305 -0x21,0x18,0x64,0x00,
94306 -0x80,0x18,0x03,0x00,
94307 -0x21,0x18,0x64,0x00,
94308 -0x02,0x80,0x02,0x3C,
94309 -0x30,0x1F,0x42,0x24,
94310 -0x80,0x18,0x03,0x00,
94311 -0x21,0x18,0x62,0x00,
94312 -0x1C,0x24,0x64,0x8C,
94313 -0xFF,0xF1,0x02,0x24,
94314 -0x24,0x20,0x82,0x00,
94315 -0x08,0x00,0xE0,0x03,
94316 -0x1C,0x24,0x64,0xAC,
94317 -0x02,0x24,0x04,0x00,
94318 -0xFF,0x00,0x84,0x30,
94319 -0xC0,0x18,0x04,0x00,
94320 -0x21,0x18,0x64,0x00,
94321 -0x80,0x18,0x03,0x00,
94322 -0x21,0x18,0x64,0x00,
94323 -0x02,0x80,0x02,0x3C,
94324 -0x30,0x1F,0x42,0x24,
94325 -0x80,0x18,0x03,0x00,
94326 -0x21,0x18,0x62,0x00,
94327 -0x1C,0x24,0x64,0x8C,
94328 -0xFF,0xF1,0x02,0x24,
94329 -0x24,0x20,0x82,0x00,
94330 -0x00,0x02,0x84,0x34,
94331 -0x08,0x00,0xE0,0x03,
94332 -0x1C,0x24,0x64,0xAC,
94333 -0xE0,0xFF,0xBD,0x27,
94334 -0x10,0x00,0xB0,0xAF,
94335 -0xC0,0x80,0x04,0x00,
94336 -0x21,0x80,0x04,0x02,
94337 -0x80,0x80,0x10,0x00,
94338 -0x21,0x80,0x04,0x02,
94339 -0x02,0x80,0x02,0x3C,
94340 -0x30,0x1F,0x42,0x24,
94341 -0x80,0x80,0x10,0x00,
94342 -0x21,0x80,0x02,0x02,
94343 -0x1C,0x00,0xBF,0xAF,
94344 -0x18,0x00,0xB2,0xAF,
94345 -0x14,0x00,0xB1,0xAF,
94346 -0x1C,0x24,0x05,0x8E,
94347 -0xFF,0x1F,0x02,0x3C,
94348 -0x25,0xB0,0x12,0x3C,
94349 -0xFF,0xFF,0x42,0x34,
94350 -0x14,0x24,0x02,0xAE,
94351 -0x84,0x01,0x43,0x36,
94352 -0xF8,0xFF,0x02,0x24,
94353 -0x00,0x00,0x66,0x8C,
94354 -0x24,0x28,0xA2,0x00,
94355 -0xFF,0xFE,0x02,0x24,
94356 -0x24,0x28,0xA2,0x00,
94357 -0xFF,0xEF,0x03,0x24,
94358 -0x24,0x28,0xA3,0x00,
94359 -0x18,0x24,0x06,0xAE,
94360 -0x1C,0x24,0x05,0xAE,
94361 -0xC9,0x24,0x00,0x0C,
94362 -0x21,0x88,0x80,0x00,
94363 -0x1E,0x24,0x02,0x92,
94364 -0x21,0x88,0x32,0x02,
94365 -0x1C,0x00,0xBF,0x8F,
94366 -0x60,0x01,0x22,0xA2,
94367 -0x18,0x00,0xB2,0x8F,
94368 -0x08,0x24,0x00,0xAE,
94369 -0xEC,0x23,0x00,0xAE,
94370 -0xF0,0x23,0x00,0xAE,
94371 -0xF4,0x23,0x00,0xAE,
94372 -0xF8,0x23,0x00,0xAE,
94373 -0xFC,0x23,0x00,0xAE,
94374 -0x00,0x24,0x00,0xAE,
94375 -0x04,0x24,0x00,0xAE,
94376 -0x14,0x00,0xB1,0x8F,
94377 -0x10,0x00,0xB0,0x8F,
94378 -0x08,0x00,0xE0,0x03,
94379 -0x20,0x00,0xBD,0x27,
94380 -0xFF,0x00,0xA5,0x30,
94381 -0xC0,0x10,0x05,0x00,
94382 -0x21,0x10,0x45,0x00,
94383 -0x80,0x10,0x02,0x00,
94384 -0x21,0x10,0x45,0x00,
94385 -0x02,0x80,0x03,0x3C,
94386 -0x30,0x1F,0x63,0x24,
94387 -0x80,0x10,0x02,0x00,
94388 -0x21,0x10,0x43,0x00,
94389 -0x1C,0x24,0x43,0x8C,
94390 -0x25,0xB0,0x05,0x3C,
94391 -0xFF,0x00,0xC6,0x30,
94392 -0x21,0x30,0xC5,0x00,
94393 -0xAF,0x01,0xC2,0x90,
94394 -0x07,0x00,0x63,0x30,
94395 -0x80,0x18,0x03,0x00,
94396 -0x21,0x18,0x65,0x00,
94397 -0xFF,0x00,0x88,0x30,
94398 -0xFF,0x00,0x49,0x30,
94399 -0x84,0x01,0x66,0x8C,
94400 -0x21,0x50,0x00,0x00,
94401 -0x21,0x58,0x00,0x00,
94402 -0x2B,0x00,0x20,0x11,
94403 -0x21,0x20,0x00,0x01,
94404 -0x2B,0x00,0xC0,0x10,
94405 -0x2B,0x10,0x09,0x01,
94406 -0x21,0x28,0x00,0x00,
94407 -0x2D,0x5A,0x00,0x08,
94408 -0x01,0x00,0x07,0x24,
94409 -0xFF,0x00,0x65,0x30,
94410 -0x1D,0x00,0xA2,0x2C,
94411 -0x07,0x00,0x40,0x10,
94412 -0xFF,0xFF,0x02,0x25,
94413 -0x04,0x10,0xA7,0x00,
94414 -0x24,0x10,0x46,0x00,
94415 -0xF9,0xFF,0x40,0x10,
94416 -0x01,0x00,0xA3,0x24,
94417 -0x21,0x58,0xA0,0x00,
94418 -0xFF,0xFF,0x02,0x25,
94419 -0xFF,0x00,0x45,0x30,
94420 -0x2B,0x18,0xAB,0x00,
94421 -0x0F,0x00,0x60,0x14,
94422 -0x2B,0x10,0x49,0x01,
94423 -0x01,0x00,0x04,0x24,
94424 -0x04,0x10,0xA4,0x00,
94425 -0x24,0x10,0x46,0x00,
94426 -0xFF,0xFF,0xA7,0x24,
94427 -0x04,0x00,0x40,0x10,
94428 -0x01,0x00,0x43,0x25,
94429 -0x17,0x00,0x49,0x11,
94430 -0xFF,0x00,0x6A,0x30,
94431 -0x21,0x40,0xA0,0x00,
94432 -0xFF,0x00,0xE5,0x30,
94433 -0x2B,0x10,0xAB,0x00,
94434 -0xF6,0xFF,0x40,0x10,
94435 -0x04,0x10,0xA4,0x00,
94436 -0x2B,0x10,0x49,0x01,
94437 -0x08,0x00,0x40,0x10,
94438 -0x21,0x20,0x00,0x01,
94439 -0x23,0x10,0x2A,0x01,
94440 -0x2A,0x10,0x62,0x01,
94441 -0x04,0x00,0x40,0x14,
94442 -0x21,0x20,0x00,0x00,
94443 -0x23,0x10,0x69,0x01,
94444 -0x21,0x10,0x4A,0x00,
94445 -0xFF,0x00,0x44,0x30,
94446 -0x08,0x00,0xE0,0x03,
94447 -0x21,0x10,0x80,0x00,
94448 -0xFD,0xFF,0x40,0x14,
94449 -0x21,0x20,0x00,0x00,
94450 -0x23,0x10,0x09,0x01,
94451 -0x4E,0x5A,0x00,0x08,
94452 -0xFF,0x00,0x44,0x30,
94453 -0x21,0x20,0x00,0x01,
94454 -0x08,0x00,0xE0,0x03,
94455 -0x21,0x10,0x80,0x00,
94456 -0xFF,0x00,0x84,0x30,
94457 -0xC0,0x10,0x04,0x00,
94458 -0x21,0x10,0x44,0x00,
94459 -0x80,0x10,0x02,0x00,
94460 -0x21,0x10,0x44,0x00,
94461 -0x02,0x80,0x03,0x3C,
94462 -0x30,0x1F,0x63,0x24,
94463 -0x80,0x10,0x02,0x00,
94464 -0x21,0x10,0x43,0x00,
94465 -0x25,0xB0,0x06,0x3C,
94466 -0x1C,0x24,0x43,0x8C,
94467 -0xFF,0x00,0xA5,0x30,
94468 -0x21,0x20,0x86,0x00,
94469 -0x21,0x28,0xA6,0x00,
94470 -0x60,0x01,0x82,0x90,
94471 -0xAF,0x01,0xA4,0x90,
94472 -0x07,0x00,0x63,0x30,
94473 -0x80,0x18,0x03,0x00,
94474 -0x21,0x18,0x66,0x00,
94475 -0xFF,0x00,0x48,0x30,
94476 -0xFF,0x00,0x89,0x30,
94477 -0x84,0x01,0x66,0x8C,
94478 -0x21,0x50,0x00,0x00,
94479 -0x21,0x58,0x00,0x00,
94480 -0x2B,0x00,0x20,0x11,
94481 -0x21,0x20,0x00,0x01,
94482 -0x2B,0x00,0xC0,0x10,
94483 -0x2B,0x10,0x09,0x01,
94484 -0x21,0x28,0x00,0x00,
94485 -0x7B,0x5A,0x00,0x08,
94486 -0x01,0x00,0x07,0x24,
94487 -0xFF,0x00,0x65,0x30,
94488 -0x1D,0x00,0xA2,0x2C,
94489 -0x07,0x00,0x40,0x10,
94490 -0xFF,0xFF,0x02,0x25,
94491 -0x04,0x10,0xA7,0x00,
94492 -0x24,0x10,0x46,0x00,
94493 -0xF9,0xFF,0x40,0x10,
94494 -0x01,0x00,0xA3,0x24,
94495 -0x21,0x58,0xA0,0x00,
94496 -0xFF,0xFF,0x02,0x25,
94497 -0xFF,0x00,0x45,0x30,
94498 -0x2B,0x18,0xAB,0x00,
94499 -0x0F,0x00,0x60,0x14,
94500 -0x2B,0x10,0x49,0x01,
94501 -0x01,0x00,0x04,0x24,
94502 -0x04,0x10,0xA4,0x00,
94503 -0x24,0x10,0x46,0x00,
94504 -0xFF,0xFF,0xA7,0x24,
94505 -0x04,0x00,0x40,0x10,
94506 -0x01,0x00,0x43,0x25,
94507 -0x17,0x00,0x49,0x11,
94508 -0xFF,0x00,0x6A,0x30,
94509 -0x21,0x40,0xA0,0x00,
94510 -0xFF,0x00,0xE5,0x30,
94511 -0x2B,0x10,0xAB,0x00,
94512 -0xF6,0xFF,0x40,0x10,
94513 -0x04,0x10,0xA4,0x00,
94514 -0x2B,0x10,0x49,0x01,
94515 -0x08,0x00,0x40,0x10,
94516 -0x21,0x20,0x00,0x01,
94517 -0x23,0x10,0x2A,0x01,
94518 -0x2A,0x10,0x62,0x01,
94519 -0x04,0x00,0x40,0x14,
94520 -0x21,0x20,0x00,0x00,
94521 -0x23,0x10,0x69,0x01,
94522 -0x21,0x10,0x4A,0x00,
94523 -0xFF,0x00,0x44,0x30,
94524 -0x08,0x00,0xE0,0x03,
94525 -0x21,0x10,0x80,0x00,
94526 -0xFD,0xFF,0x40,0x14,
94527 -0x21,0x20,0x00,0x00,
94528 -0x23,0x10,0x09,0x01,
94529 -0x9C,0x5A,0x00,0x08,
94530 -0xFF,0x00,0x44,0x30,
94531 -0x21,0x20,0x00,0x01,
94532 -0x08,0x00,0xE0,0x03,
94533 -0x21,0x10,0x80,0x00,
94534 -0xE0,0xFF,0xBD,0x27,
94535 -0x02,0x80,0x02,0x3C,
94536 -0x10,0x00,0xB0,0xAF,
94537 -0x30,0x1F,0x50,0x24,
94538 -0x18,0x00,0xB2,0xAF,
94539 -0x14,0x00,0xB1,0xAF,
94540 -0x1C,0x00,0xBF,0xAF,
94541 -0x21,0x88,0x00,0x00,
94542 -0x21,0x90,0x00,0x02,
94543 -0xDD,0x59,0x00,0x0C,
94544 -0x21,0x20,0x20,0x02,
94545 -0x1E,0x24,0x02,0x92,
94546 -0x21,0x28,0x00,0x00,
94547 -0x80,0x10,0x02,0x00,
94548 -0x21,0x10,0x52,0x00,
94549 -0x60,0x05,0x44,0x8C,
94550 -0xD4,0x05,0x43,0x8C,
94551 -0x00,0x00,0x00,0x00,
94552 -0x21,0x18,0x64,0x00,
94553 -0x42,0x18,0x03,0x00,
94554 -0xE8,0x23,0x03,0xAE,
94555 -0x21,0x10,0x05,0x02,
94556 -0x01,0x00,0xA5,0x24,
94557 -0x1D,0x00,0xA3,0x28,
94558 -0x5A,0x24,0x40,0xA0,
94559 -0x20,0x24,0x40,0xA0,
94560 -0xFA,0xFF,0x60,0x14,
94561 -0x3D,0x24,0x40,0xA0,
94562 -0x01,0x00,0x31,0x26,
94563 -0x20,0x00,0x22,0x2A,
94564 -0x78,0x24,0x00,0xAE,
94565 -0xE9,0xFF,0x40,0x14,
94566 -0x94,0x00,0x10,0x26,
94567 -0x1C,0x00,0xBF,0x8F,
94568 -0x18,0x00,0xB2,0x8F,
94569 -0x14,0x00,0xB1,0x8F,
94570 -0x10,0x00,0xB0,0x8F,
94571 -0x08,0x00,0xE0,0x03,
94572 -0x20,0x00,0xBD,0x27,
94573 -0xD0,0xFF,0xBD,0x27,
94574 -0x28,0x00,0xB6,0xAF,
94575 -0x02,0x80,0x16,0x3C,
94576 -0x24,0x00,0xB5,0xAF,
94577 -0x30,0x1F,0xC6,0x26,
94578 -0x2C,0x00,0xBF,0xAF,
94579 -0x20,0x00,0xB4,0xAF,
94580 -0x1C,0x00,0xB3,0xAF,
94581 -0x18,0x00,0xB2,0xAF,
94582 -0x14,0x00,0xB1,0xAF,
94583 -0x10,0x00,0xB0,0xAF,
94584 -0x30,0x38,0xC2,0x8C,
94585 -0xFF,0x00,0x8D,0x30,
94586 -0xFF,0x00,0x03,0x24,
94587 -0xFF,0xFF,0x42,0x38,
94588 -0x21,0xA8,0x00,0x00,
94589 -0xFF,0xFF,0x04,0x34,
94590 -0x0A,0xA8,0x62,0x00,
94591 -0xA4,0x00,0xA0,0x11,
94592 -0x30,0x38,0xC4,0xAC,
94593 -0x02,0x80,0x02,0x3C,
94594 -0xE4,0xE7,0x45,0x24,
94595 -0x04,0x05,0xC4,0x24,
94596 -0xEB,0x5A,0x00,0x08,
94597 -0x21,0x80,0x00,0x00,
94598 -0x01,0x00,0x10,0x26,
94599 -0x00,0x00,0x82,0xA0,
94600 -0x1D,0x00,0x02,0x2A,
94601 -0x0B,0x00,0x40,0x10,
94602 -0x01,0x00,0x84,0x24,
94603 -0x21,0x10,0x05,0x02,
94604 -0x00,0x00,0x42,0x90,
94605 -0x00,0x00,0x00,0x00,
94606 -0xF7,0xFF,0x40,0x10,
94607 -0xFD,0xFF,0x43,0x24,
94608 -0x01,0x00,0x10,0x26,
94609 -0x1D,0x00,0x02,0x2A,
94610 -0x00,0x00,0x83,0xA0,
94611 -0xF7,0xFF,0x40,0x14,
94612 -0x01,0x00,0x84,0x24,
94613 -0x02,0x80,0x02,0x3C,
94614 -0x30,0x1F,0x4A,0x24,
94615 -0x02,0x80,0x03,0x3C,
94616 -0x02,0x80,0x02,0x3C,
94617 -0x7C,0xE5,0x6C,0x24,
94618 -0x04,0xE5,0x4B,0x24,
94619 -0x21,0x80,0x00,0x00,
94620 -0x21,0x48,0x00,0x00,
94621 -0x21,0x30,0x00,0x00,
94622 -0x21,0x40,0x2A,0x01,
94623 -0x21,0x38,0x2C,0x01,
94624 -0x21,0x10,0xE6,0x00,
94625 -0x91,0x00,0x44,0x90,
94626 -0x00,0x00,0x45,0x90,
94627 -0x21,0x18,0x06,0x01,
94628 -0x01,0x00,0xC6,0x24,
94629 -0x05,0x00,0xC2,0x28,
94630 -0x39,0x04,0x64,0xA0,
94631 -0xF8,0xFF,0x40,0x14,
94632 -0xA8,0x03,0x65,0xA0,
94633 -0x21,0x10,0x0B,0x02,
94634 -0x1D,0x00,0x44,0x90,
94635 -0x00,0x00,0x45,0x90,
94636 -0x21,0x18,0x0A,0x02,
94637 -0x01,0x00,0x10,0x26,
94638 -0x1D,0x00,0x02,0x2A,
94639 -0xE7,0x04,0x64,0xA0,
94640 -0xCA,0x04,0x65,0xA0,
94641 -0xEB,0xFF,0x40,0x14,
94642 -0x05,0x00,0x29,0x25,
94643 -0x9A,0x00,0xA0,0x11,
94644 -0x02,0x80,0x02,0x3C,
94645 -0x30,0x1F,0x48,0x24,
94646 -0x02,0x80,0x03,0x3C,
94647 -0x02,0x80,0x02,0x3C,
94648 -0x78,0xE8,0x69,0x24,
94649 -0x04,0xE8,0x47,0x24,
94650 -0x21,0x80,0x00,0x00,
94651 -0x80,0x18,0x10,0x00,
94652 -0x21,0x10,0x69,0x00,
94653 -0x21,0x20,0x67,0x00,
94654 -0x00,0x00,0x46,0x8C,
94655 -0x00,0x00,0x85,0x8C,
94656 -0x01,0x00,0x10,0x26,
94657 -0x21,0x18,0x68,0x00,
94658 -0x04,0x00,0x02,0x2A,
94659 -0x60,0x05,0x65,0xAC,
94660 -0xF6,0xFF,0x40,0x14,
94661 -0xD4,0x05,0x66,0xAC,
94662 -0x02,0x80,0x02,0x3C,
94663 -0x30,0x1F,0x49,0x24,
94664 -0x02,0x80,0x03,0x3C,
94665 -0x02,0x80,0x02,0x3C,
94666 -0x78,0xE8,0x68,0x24,
94667 -0x04,0xE8,0x47,0x24,
94668 -0x04,0x00,0x10,0x24,
94669 -0x80,0x20,0x10,0x00,
94670 -0x21,0x10,0x88,0x00,
94671 -0x21,0x30,0x87,0x00,
94672 -0x00,0x00,0x45,0x8C,
94673 -0x00,0x00,0xC3,0x8C,
94674 -0x01,0x00,0x10,0x26,
94675 -0x21,0x20,0x89,0x00,
94676 -0x82,0x28,0x05,0x00,
94677 -0x82,0x18,0x03,0x00,
94678 -0x1D,0x00,0x02,0x2A,
94679 -0x60,0x05,0x83,0xAC,
94680 -0xF4,0xFF,0x40,0x14,
94681 -0xD4,0x05,0x85,0xAC,
94682 -0x02,0x80,0x02,0x3C,
94683 -0x30,0x1F,0x53,0x24,
94684 -0x21,0x80,0x00,0x00,
94685 -0x21,0xA0,0x60,0x02,
94686 -0x21,0x90,0x00,0x00,
94687 -0x46,0x5B,0x00,0x08,
94688 -0x21,0x88,0x60,0x02,
94689 -0x01,0x00,0x10,0x26,
94690 -0x20,0x00,0x02,0x2A,
94691 -0x94,0x00,0x31,0x26,
94692 -0x32,0x00,0x40,0x10,
94693 -0x94,0x00,0x52,0x26,
94694 -0x1C,0x24,0x24,0x8E,
94695 -0x01,0x00,0x03,0x24,
94696 -0x02,0x13,0x04,0x00,
94697 -0x01,0x00,0x42,0x30,
94698 -0xF6,0xFF,0x43,0x14,
94699 -0x07,0x00,0x82,0x30,
94700 -0x25,0xB0,0x03,0x3C,
94701 -0x80,0x10,0x02,0x00,
94702 -0x21,0x10,0x43,0x00,
94703 -0x84,0x01,0x45,0x8C,
94704 -0x14,0x24,0x23,0x8E,
94705 -0x21,0x20,0x00,0x02,
94706 -0x24,0x28,0xA3,0x00,
94707 -0xC9,0x24,0x00,0x0C,
94708 -0x18,0x24,0x25,0xAE,
94709 -0x1E,0x24,0x24,0x92,
94710 -0x57,0x24,0x00,0x0C,
94711 -0xFF,0x00,0x05,0x32,
94712 -0x1E,0x24,0x23,0x92,
94713 -0xEC,0x23,0x20,0xAE,
94714 -0xF0,0x23,0x20,0xAE,
94715 -0x80,0x18,0x03,0x00,
94716 -0xF4,0x23,0x20,0xAE,
94717 -0xF8,0x23,0x20,0xAE,
94718 -0xFC,0x23,0x20,0xAE,
94719 -0x00,0x24,0x20,0xAE,
94720 -0x04,0x24,0x20,0xAE,
94721 -0x08,0x24,0x20,0xAE,
94722 -0x21,0x18,0x74,0x00,
94723 -0x60,0x05,0x64,0x8C,
94724 -0xD4,0x05,0x62,0x8C,
94725 -0x21,0x30,0x00,0x00,
94726 -0x21,0x28,0x53,0x02,
94727 -0x21,0x10,0x44,0x00,
94728 -0x42,0x10,0x02,0x00,
94729 -0xE8,0x23,0x22,0xAE,
94730 -0x21,0x10,0xA6,0x00,
94731 -0x01,0x00,0xC6,0x24,
94732 -0x1D,0x00,0xC3,0x28,
94733 -0x5A,0x24,0x40,0xA0,
94734 -0x20,0x24,0x40,0xA0,
94735 -0xFA,0xFF,0x60,0x14,
94736 -0x3D,0x24,0x40,0xA0,
94737 -0x01,0x00,0x10,0x26,
94738 -0x20,0x00,0x02,0x2A,
94739 -0x78,0x24,0xA0,0xAC,
94740 -0x94,0x00,0x31,0x26,
94741 -0xD0,0xFF,0x40,0x14,
94742 -0x94,0x00,0x52,0x26,
94743 -0x02,0x00,0xA0,0x16,
94744 -0x30,0x1F,0xC2,0x26,
94745 -0x30,0x38,0x40,0xAC,
94746 -0x2C,0x00,0xBF,0x8F,
94747 -0x28,0x00,0xB6,0x8F,
94748 -0x24,0x00,0xB5,0x8F,
94749 -0x20,0x00,0xB4,0x8F,
94750 -0x1C,0x00,0xB3,0x8F,
94751 -0x18,0x00,0xB2,0x8F,
94752 -0x14,0x00,0xB1,0x8F,
94753 -0x10,0x00,0xB0,0x8F,
94754 -0x08,0x00,0xE0,0x03,
94755 -0x30,0x00,0xBD,0x27,
94756 -0x02,0x80,0x02,0x3C,
94757 -0xE4,0xE7,0x45,0x24,
94758 -0x04,0x05,0xC4,0x24,
94759 -0x21,0x80,0x00,0x00,
94760 -0x21,0x10,0x05,0x02,
94761 -0x00,0x00,0x43,0x90,
94762 -0x01,0x00,0x10,0x26,
94763 -0x1D,0x00,0x02,0x2A,
94764 -0x00,0x00,0x83,0xA0,
94765 -0xFA,0xFF,0x40,0x14,
94766 -0x01,0x00,0x84,0x24,
94767 -0x02,0x80,0x02,0x3C,
94768 -0x30,0x1F,0x4A,0x24,
94769 -0x02,0x80,0x03,0x3C,
94770 -0x02,0x80,0x02,0x3C,
94771 -0xA0,0xE6,0x6C,0x24,
94772 -0x40,0xE5,0x4B,0x24,
94773 -0x21,0x80,0x00,0x00,
94774 -0x21,0x48,0x00,0x00,
94775 -0x21,0x30,0x00,0x00,
94776 -0x21,0x40,0x2A,0x01,
94777 -0x21,0x38,0x2C,0x01,
94778 -0x21,0x10,0xE6,0x00,
94779 -0x91,0x00,0x44,0x90,
94780 -0x00,0x00,0x45,0x90,
94781 -0x21,0x18,0x06,0x01,
94782 -0x01,0x00,0xC6,0x24,
94783 -0x05,0x00,0xC2,0x28,
94784 -0x39,0x04,0x64,0xA0,
94785 -0xF8,0xFF,0x40,0x14,
94786 -0xA8,0x03,0x65,0xA0,
94787 -0x21,0x10,0x0B,0x02,
94788 -0x1D,0x00,0x44,0x90,
94789 -0x00,0x00,0x45,0x90,
94790 -0x21,0x18,0x0A,0x02,
94791 -0x01,0x00,0x10,0x26,
94792 -0x1D,0x00,0x02,0x2A,
94793 -0xE7,0x04,0x64,0xA0,
94794 -0xCA,0x04,0x65,0xA0,
94795 -0xEB,0xFF,0x40,0x14,
94796 -0x05,0x00,0x29,0x25,
94797 -0x02,0x80,0x02,0x3C,
94798 -0x30,0x1F,0x49,0x24,
94799 -0x02,0x80,0x03,0x3C,
94800 -0x02,0x80,0x02,0x3C,
94801 -0x78,0xE8,0x68,0x24,
94802 -0x04,0xE8,0x47,0x24,
94803 -0x21,0x80,0x00,0x00,
94804 -0x80,0x18,0x10,0x00,
94805 -0x21,0x10,0x68,0x00,
94806 -0x21,0x20,0x67,0x00,
94807 -0x00,0x00,0x46,0x8C,
94808 -0x00,0x00,0x85,0x8C,
94809 -0x01,0x00,0x10,0x26,
94810 -0x21,0x18,0x69,0x00,
94811 -0x1D,0x00,0x02,0x2A,
94812 -0x60,0x05,0x65,0xAC,
94813 -0xF6,0xFF,0x40,0x14,
94814 -0xD4,0x05,0x66,0xAC,
94815 -0x3B,0x5B,0x00,0x08,
94816 -0x02,0x80,0x02,0x3C,
94817 -0xD8,0xFF,0xBD,0x27,
94818 -0xFF,0xFF,0x84,0x30,
94819 -0x18,0x00,0xB2,0xAF,
94820 -0xF0,0x01,0x92,0x30,
94821 -0x02,0x91,0x12,0x00,
94822 -0x14,0x00,0xB1,0xAF,
94823 -0xC0,0x88,0x12,0x00,
94824 -0x21,0x88,0x32,0x02,
94825 -0x80,0x88,0x11,0x00,
94826 -0x21,0x88,0x32,0x02,
94827 -0x02,0x80,0x02,0x3C,
94828 -0x30,0x1F,0x42,0x24,
94829 -0x80,0x88,0x11,0x00,
94830 -0x21,0x88,0x22,0x02,
94831 -0x20,0x00,0xBF,0xAF,
94832 -0x1C,0x00,0xB3,0xAF,
94833 -0x10,0x00,0xB0,0xAF,
94834 -0x1C,0x24,0x30,0x8E,
94835 -0x00,0x02,0x82,0x30,
94836 -0xFF,0xFE,0x03,0x24,
94837 -0x2B,0x10,0x02,0x00,
94838 -0x00,0x10,0x10,0x36,
94839 -0x24,0x80,0x03,0x02,
94840 -0x00,0x12,0x02,0x00,
94841 -0x25,0x80,0x02,0x02,
94842 -0x14,0x24,0x25,0xAE,
94843 -0x1C,0x24,0x30,0xAE,
94844 -0x76,0x25,0x00,0x0C,
94845 -0x21,0x98,0xA0,0x00,
94846 -0xF8,0xFF,0x03,0x24,
94847 -0x24,0x80,0x03,0x02,
94848 -0x07,0x00,0x42,0x30,
94849 -0x25,0x80,0x02,0x02,
94850 -0x07,0x00,0x03,0x32,
94851 -0x25,0xB0,0x02,0x3C,
94852 -0x80,0x18,0x03,0x00,
94853 -0x1C,0x24,0x30,0xAE,
94854 -0x21,0x18,0x62,0x00,
94855 -0x84,0x01,0x62,0x8C,
94856 -0x21,0x20,0x40,0x02,
94857 -0x24,0x10,0x53,0x00,
94858 -0xC9,0x24,0x00,0x0C,
94859 -0x18,0x24,0x22,0xAE,
94860 -0x1E,0x24,0x24,0x92,
94861 -0x21,0x28,0x40,0x02,
94862 -0x20,0x00,0xBF,0x8F,
94863 -0x1C,0x00,0xB3,0x8F,
94864 -0x18,0x00,0xB2,0x8F,
94865 -0x14,0x00,0xB1,0x8F,
94866 -0x10,0x00,0xB0,0x8F,
94867 -0x57,0x24,0x00,0x08,
94868 -0x28,0x00,0xBD,0x27,
94869 -0xDD,0x59,0x00,0x08,
94870 -0xFF,0x00,0x84,0x30,
94871 -0x02,0x80,0x02,0x3C,
94872 -0x30,0x1F,0x43,0x24,
94873 -0x1F,0x00,0x04,0x24,
94874 -0x1C,0x24,0x62,0x8C,
94875 -0xFF,0xFF,0x84,0x24,
94876 -0x00,0x10,0x42,0x34,
94877 -0x1C,0x24,0x62,0xAC,
94878 -0xFB,0xFF,0x81,0x04,
94879 -0x94,0x00,0x63,0x24,
94880 -0x08,0x00,0xE0,0x03,
94881 -0x00,0x00,0x00,0x00,
94882 -0x00,0x00,0x85,0xAC,
94883 -0x21,0x10,0x00,0x00,
94884 -0x01,0x00,0x42,0x24,
94885 -0xFF,0x00,0x42,0x30,
94886 -0x06,0x00,0x43,0x2C,
94887 -0xFC,0xFF,0x60,0x14,
94888 -0x00,0x00,0x00,0x00,
94889 -0x08,0x00,0xE0,0x03,
94890 -0x00,0x00,0x00,0x00,
94891 -0xE0,0xFF,0xBD,0x27,
94892 -0x44,0x00,0x02,0x24,
94893 -0x10,0x00,0xA2,0xA3,
94894 -0x49,0x00,0x03,0x24,
94895 -0x47,0x00,0x02,0x24,
94896 -0x02,0x80,0x07,0x3C,
94897 -0xD4,0xF3,0xE7,0x24,
94898 -0x11,0x00,0xA3,0xA3,
94899 -0x12,0x00,0xA2,0xA3,
94900 -0x10,0x27,0x03,0x24,
94901 -0x01,0x00,0x02,0x24,
94902 -0x01,0x80,0x06,0x3C,
94903 -0x10,0x00,0xA5,0x27,
94904 -0x21,0x20,0xE0,0x00,
94905 -0x20,0x73,0xC6,0x24,
94906 -0x0C,0x00,0xE3,0xAC,
94907 -0x14,0x00,0xE2,0xA0,
94908 -0x18,0x00,0xBF,0xAF,
94909 -0xA2,0x23,0x00,0x0C,
94910 -0x13,0x00,0xA0,0xA3,
94911 -0x18,0x00,0xBF,0x8F,
94912 -0x00,0x00,0x00,0x00,
94913 -0x08,0x00,0xE0,0x03,
94914 -0x20,0x00,0xBD,0x27,
94915 -0xD0,0xFF,0xBD,0x27,
94916 -0x25,0xB0,0x03,0x3C,
94917 -0x20,0x00,0xB4,0xAF,
94918 -0x1C,0x00,0xB3,0xAF,
94919 -0x2C,0x00,0xBF,0xAF,
94920 -0x28,0x00,0xB6,0xAF,
94921 -0x24,0x00,0xB5,0xAF,
94922 -0x18,0x00,0xB2,0xAF,
94923 -0x14,0x00,0xB1,0xAF,
94924 -0x10,0x00,0xB0,0xAF,
94925 -0x03,0x0D,0x64,0x34,
94926 -0x00,0x00,0x82,0x90,
94927 -0x00,0x00,0x00,0x00,
94928 -0xFF,0x00,0x54,0x30,
94929 -0x70,0x00,0x93,0x32,
94930 -0x5D,0x00,0x60,0x12,
94931 -0x42,0x00,0x63,0x34,
94932 -0x8F,0x00,0x82,0x32,
94933 -0x00,0x00,0x82,0xA0,
94934 -0x21,0x10,0x00,0x00,
94935 -0x01,0x00,0x42,0x24,
94936 -0xFF,0x00,0x42,0x30,
94937 -0x06,0x00,0x43,0x2C,
94938 -0xFD,0xFF,0x60,0x14,
94939 -0x01,0x00,0x42,0x24,
94940 -0x55,0x00,0x60,0x12,
94941 -0x00,0x00,0x00,0x00,
94942 -0x00,0x60,0x12,0x40,
94943 -0x01,0x00,0x41,0x36,
94944 -0x01,0x00,0x21,0x38,
94945 -0x00,0x60,0x81,0x40,
94946 -0x0F,0x00,0x11,0x3C,
94947 -0x21,0x20,0x00,0x00,
94948 -0x8A,0x47,0x00,0x0C,
94949 -0xFF,0xFF,0x25,0x36,
94950 -0x21,0xA8,0x40,0x00,
94951 -0x00,0x60,0x92,0x40,
94952 -0x54,0x22,0x00,0x0C,
94953 -0x64,0x00,0x04,0x24,
94954 -0xE6,0x44,0x00,0x0C,
94955 -0x01,0x00,0x04,0x24,
94956 -0x00,0x60,0x12,0x40,
94957 -0x01,0x00,0x41,0x36,
94958 -0x01,0x00,0x21,0x38,
94959 -0x00,0x60,0x81,0x40,
94960 -0x21,0x20,0x00,0x00,
94961 -0x8A,0x47,0x00,0x0C,
94962 -0xFF,0xFF,0x25,0x36,
94963 -0x21,0xB0,0x40,0x00,
94964 -0x00,0x60,0x92,0x40,
94965 -0x64,0x00,0x04,0x24,
94966 -0x54,0x22,0x00,0x0C,
94967 -0x08,0x00,0x10,0x3C,
94968 -0xFF,0xFF,0x10,0x36,
94969 -0xE6,0x44,0x00,0x0C,
94970 -0x21,0x20,0x00,0x00,
94971 -0x01,0x00,0x12,0x3C,
94972 -0x24,0x30,0xB0,0x02,
94973 -0x25,0x30,0xD2,0x00,
94974 -0xFF,0xFF,0x25,0x36,
94975 -0x5F,0x47,0x00,0x0C,
94976 -0x21,0x20,0x00,0x00,
94977 -0x54,0x22,0x00,0x0C,
94978 -0x64,0x00,0x04,0x24,
94979 -0x24,0x80,0xD0,0x02,
94980 -0xE6,0x44,0x00,0x0C,
94981 -0x01,0x00,0x04,0x24,
94982 -0x25,0x30,0x12,0x02,
94983 -0xFF,0xFF,0x25,0x36,
94984 -0x5F,0x47,0x00,0x0C,
94985 -0x21,0x20,0x00,0x00,
94986 -0x54,0x22,0x00,0x0C,
94987 -0x64,0x00,0x04,0x24,
94988 -0xE6,0x44,0x00,0x0C,
94989 -0x21,0x20,0x00,0x00,
94990 -0x00,0x60,0x12,0x40,
94991 -0x01,0x00,0x41,0x36,
94992 -0x01,0x00,0x21,0x38,
94993 -0x00,0x60,0x81,0x40,
94994 -0x0F,0x00,0x10,0x3C,
94995 -0x18,0x00,0x04,0x24,
94996 -0x8A,0x47,0x00,0x0C,
94997 -0xFF,0xFF,0x05,0x36,
94998 -0x21,0x88,0x40,0x00,
94999 -0x00,0x60,0x92,0x40,
95000 -0x54,0x22,0x00,0x0C,
95001 -0x64,0x00,0x04,0x24,
95002 -0x18,0x00,0x04,0x24,
95003 -0xFF,0xFF,0x05,0x36,
95004 -0x5F,0x47,0x00,0x0C,
95005 -0x00,0x80,0x26,0x36,
95006 -0x25,0x22,0x00,0x0C,
95007 -0x03,0x00,0x04,0x24,
95008 -0x25,0x00,0x60,0x16,
95009 -0x25,0xB0,0x02,0x3C,
95010 -0x2C,0x00,0xBF,0x8F,
95011 -0x28,0x00,0xB6,0x8F,
95012 -0x24,0x00,0xB5,0x8F,
95013 -0x20,0x00,0xB4,0x8F,
95014 -0x1C,0x00,0xB3,0x8F,
95015 -0x18,0x00,0xB2,0x8F,
95016 -0x14,0x00,0xB1,0x8F,
95017 -0x10,0x00,0xB0,0x8F,
95018 -0x25,0xB0,0x02,0x3C,
95019 -0x42,0x00,0x42,0x34,
95020 -0x30,0x00,0xBD,0x27,
95021 -0x00,0x00,0x40,0xA0,
95022 -0x08,0x00,0xE0,0x03,
95023 -0x00,0x00,0x00,0x00,
95024 -0xFF,0xFF,0x02,0x24,
95025 -0x00,0x00,0x62,0xA0,
95026 -0x00,0x60,0x12,0x40,
95027 -0x01,0x00,0x41,0x36,
95028 -0x01,0x00,0x21,0x38,
95029 -0x00,0x60,0x81,0x40,
95030 -0x0F,0x00,0x10,0x3C,
95031 -0x18,0x00,0x04,0x24,
95032 -0x8A,0x47,0x00,0x0C,
95033 -0xFF,0xFF,0x05,0x36,
95034 -0x21,0x88,0x40,0x00,
95035 -0x00,0x60,0x92,0x40,
95036 -0x54,0x22,0x00,0x0C,
95037 -0x64,0x00,0x04,0x24,
95038 -0x18,0x00,0x04,0x24,
95039 -0xFF,0xFF,0x05,0x36,
95040 -0x5F,0x47,0x00,0x0C,
95041 -0x00,0x80,0x26,0x36,
95042 -0x25,0x22,0x00,0x0C,
95043 -0x03,0x00,0x04,0x24,
95044 -0xDD,0xFF,0x60,0x12,
95045 -0x25,0xB0,0x02,0x3C,
95046 -0x03,0x0D,0x42,0x34,
95047 -0x00,0x00,0x54,0xA0,
95048 -0x21,0x10,0x00,0x00,
95049 -0x01,0x00,0x42,0x24,
95050 -0xFF,0x00,0x42,0x30,
95051 -0x06,0x00,0x43,0x2C,
95052 -0xFD,0xFF,0x60,0x14,
95053 -0x01,0x00,0x42,0x24,
95054 -0x0F,0x00,0x10,0x3C,
95055 -0x21,0x30,0xA0,0x02,
95056 -0xFF,0xFF,0x05,0x36,
95057 -0x5F,0x47,0x00,0x0C,
95058 -0x21,0x20,0x00,0x00,
95059 -0x54,0x22,0x00,0x0C,
95060 -0x64,0x00,0x04,0x24,
95061 -0xE6,0x44,0x00,0x0C,
95062 -0x01,0x00,0x04,0x24,
95063 -0xFF,0xFF,0x05,0x36,
95064 -0x21,0x30,0xC0,0x02,
95065 -0x5F,0x47,0x00,0x0C,
95066 -0x21,0x20,0x00,0x00,
95067 -0x54,0x22,0x00,0x0C,
95068 -0x64,0x00,0x04,0x24,
95069 -0x2C,0x00,0xBF,0x8F,
95070 -0x28,0x00,0xB6,0x8F,
95071 -0x24,0x00,0xB5,0x8F,
95072 -0x20,0x00,0xB4,0x8F,
95073 -0x1C,0x00,0xB3,0x8F,
95074 -0x18,0x00,0xB2,0x8F,
95075 -0x14,0x00,0xB1,0x8F,
95076 -0x10,0x00,0xB0,0x8F,
95077 -0x21,0x20,0x00,0x00,
95078 -0xE6,0x44,0x00,0x08,
95079 -0x30,0x00,0xBD,0x27,
95080 -0xC8,0xFF,0xBD,0x27,
95081 -0x28,0x00,0xB4,0xAF,
95082 -0x02,0x80,0x14,0x3C,
95083 -0x30,0x00,0xB6,0xAF,
95084 -0x34,0x00,0xBF,0xAF,
95085 -0x2C,0x00,0xB5,0xAF,
95086 -0x24,0x00,0xB3,0xAF,
95087 -0x20,0x00,0xB2,0xAF,
95088 -0x1C,0x00,0xB1,0xAF,
95089 -0x18,0x00,0xB0,0xAF,
95090 -0x30,0x1F,0x85,0x26,
95091 -0x0C,0x00,0xA2,0x8C,
95092 -0x00,0x00,0x00,0x00,
95093 -0x82,0x17,0x02,0x00,
95094 -0x01,0x00,0x42,0x30,
95095 -0x08,0x00,0x40,0x14,
95096 -0x06,0x00,0x16,0x24,
95097 -0x08,0x00,0xA2,0x8C,
95098 -0x01,0x00,0x03,0x24,
95099 -0x42,0x17,0x02,0x00,
95100 -0x03,0x00,0x42,0x30,
95101 -0x57,0x00,0x43,0x10,
95102 -0x25,0xB0,0x02,0x3C,
95103 -0x30,0x1F,0x85,0x26,
95104 -0x0C,0x00,0xA2,0x8C,
95105 -0x01,0x00,0x03,0x24,
95106 -0x82,0x17,0x02,0x00,
95107 -0x01,0x00,0x44,0x30,
95108 -0x0B,0x00,0x83,0x10,
95109 -0x21,0x10,0x00,0x00,
95110 -0x34,0x00,0xBF,0x8F,
95111 -0x30,0x00,0xB6,0x8F,
95112 -0x2C,0x00,0xB5,0x8F,
95113 -0x28,0x00,0xB4,0x8F,
95114 -0x24,0x00,0xB3,0x8F,
95115 -0x20,0x00,0xB2,0x8F,
95116 -0x1C,0x00,0xB1,0x8F,
95117 -0x18,0x00,0xB0,0x8F,
95118 -0x08,0x00,0xE0,0x03,
95119 -0x38,0x00,0xBD,0x27,
95120 -0x08,0x00,0xA2,0x8C,
95121 -0x00,0x00,0x00,0x00,
95122 -0x42,0x17,0x02,0x00,
95123 -0x03,0x00,0x43,0x30,
95124 -0xF1,0xFF,0x64,0x14,
95125 -0x21,0x10,0x00,0x00,
95126 -0x10,0x00,0xA2,0x8C,
95127 -0x00,0x00,0x00,0x00,
95128 -0x82,0x17,0x02,0x00,
95129 -0x50,0x02,0x43,0x10,
95130 -0x25,0xB0,0x02,0x3C,
95131 -0xC7,0x02,0xB3,0x90,
95132 -0x62,0x0C,0x42,0x34,
95133 -0xFF,0x00,0x63,0x32,
95134 -0x00,0x00,0x43,0xA0,
95135 -0x21,0x10,0x00,0x00,
95136 -0x01,0x00,0x42,0x24,
95137 -0xFF,0x00,0x42,0x30,
95138 -0x06,0x00,0x43,0x2C,
95139 -0xFD,0xFF,0x60,0x14,
95140 -0x01,0x00,0x42,0x24,
95141 -0x30,0x1F,0x90,0x26,
95142 -0xC6,0x02,0x02,0x92,
95143 -0x00,0x00,0x00,0x00,
95144 -0x83,0x00,0x40,0x10,
95145 -0x01,0x00,0x02,0x24,
95146 -0x25,0xB0,0x11,0x3C,
95147 -0x03,0x0D,0x23,0x36,
95148 -0x00,0x00,0x62,0x90,
95149 -0x00,0x00,0x00,0x00,
95150 -0x70,0x00,0x42,0x30,
95151 -0xA9,0x00,0x40,0x14,
95152 -0xCC,0x00,0x02,0x24,
95153 -0xC4,0x02,0x02,0x96,
95154 -0x00,0x00,0x00,0x00,
95155 -0x23,0x20,0x53,0x00,
95156 -0x2B,0x18,0x53,0x00,
95157 -0x23,0x10,0x62,0x02,
95158 -0x0A,0x10,0x83,0x00,
95159 -0x03,0x00,0x42,0x2C,
95160 -0x76,0x00,0x40,0x10,
95161 -0x00,0x00,0x00,0x00,
95162 -0xC4,0x02,0x03,0x92,
95163 -0x63,0x0C,0x22,0x36,
95164 -0x21,0x20,0x00,0x00,
95165 -0x00,0x00,0x43,0xA0,
95166 -0x01,0x00,0x82,0x24,
95167 -0xFF,0x00,0x44,0x30,
95168 -0x06,0x00,0x83,0x2C,
95169 -0xFD,0xFF,0x60,0x14,
95170 -0x01,0x00,0x82,0x24,
95171 -0x30,0x1F,0x83,0x26,
95172 -0xC3,0x02,0x62,0x90,
95173 -0x08,0x00,0x66,0x8C,
95174 -0xC2,0x02,0x73,0xA0,
95175 -0x23,0x20,0x53,0x00,
95176 -0x02,0x2C,0x06,0x00,
95177 -0x2B,0x40,0x62,0x02,
95178 -0x23,0x90,0x62,0x02,
95179 -0x0B,0x90,0x88,0x00,
95180 -0x3F,0x00,0xA7,0x30,
95181 -0x3F,0x00,0xC6,0x30,
95182 -0x24,0x00,0x02,0x24,
95183 -0x20,0x00,0x03,0x24,
95184 -0x23,0x10,0x46,0x00,
95185 -0x91,0x00,0x40,0x16,
95186 -0x23,0x20,0x67,0x00,
95187 -0xE6,0x5C,0x00,0x08,
95188 -0x00,0x00,0x00,0x00,
95189 -0x80,0x0C,0x42,0x34,
95190 -0x00,0x00,0x43,0x8C,
95191 -0x21,0x30,0xA0,0x00,
95192 -0xC0,0xFF,0x02,0x3C,
95193 -0x24,0x20,0x62,0x00,
95194 -0x21,0x88,0x00,0x00,
95195 -0xC0,0xFF,0x05,0x3C,
95196 -0x42,0x5D,0x00,0x08,
95197 -0x18,0x00,0xC3,0x24,
95198 -0x01,0x00,0x31,0x26,
95199 -0x25,0x00,0x22,0x2E,
95200 -0x0D,0x00,0x40,0x10,
95201 -0x02,0x80,0x02,0x3C,
95202 -0x00,0x00,0x62,0x8C,
95203 -0x00,0x00,0x00,0x00,
95204 -0x24,0x10,0x45,0x00,
95205 -0xF8,0xFF,0x44,0x14,
95206 -0x04,0x00,0x63,0x24,
95207 -0x08,0x00,0xC2,0x8C,
95208 -0xC0,0xFF,0x03,0x24,
95209 -0x3F,0x00,0x24,0x32,
95210 -0x24,0x10,0x43,0x00,
95211 -0x25,0x10,0x44,0x00,
95212 -0x08,0x00,0xC2,0xAC,
95213 -0x02,0x80,0x02,0x3C,
95214 -0xDE,0x5D,0x44,0x90,
95215 -0x22,0x00,0x03,0x24,
95216 -0x42,0x00,0x83,0x10,
95217 -0x92,0x00,0x02,0x24,
95218 -0x41,0x00,0x82,0x10,
95219 -0x25,0xB0,0x02,0x3C,
95220 -0x25,0xB0,0x02,0x3C,
95221 -0x24,0x0A,0x42,0x34,
95222 -0x00,0x00,0x44,0x8C,
95223 -0x3F,0x3F,0x03,0x3C,
95224 -0x3F,0x3F,0x63,0x34,
95225 -0x24,0x20,0x83,0x00,
95226 -0x02,0x80,0x02,0x3C,
95227 -0x02,0x80,0x03,0x3C,
95228 -0xDE,0x1F,0x53,0x24,
95229 -0xE6,0x20,0x72,0x24,
95230 -0x21,0x88,0x00,0x00,
95231 -0x69,0x5D,0x00,0x08,
95232 -0x10,0x00,0xA4,0xAF,
95233 -0x39,0x52,0x00,0x0C,
95234 -0x00,0x00,0x00,0x00,
95235 -0x4B,0x00,0x40,0x10,
95236 -0x30,0x1F,0x85,0x26,
95237 -0x01,0x00,0x31,0x26,
95238 -0x21,0x00,0x22,0x2E,
95239 -0x17,0x00,0x40,0x10,
95240 -0x30,0x1F,0x82,0x26,
95241 -0xC0,0x80,0x11,0x00,
95242 -0x10,0x00,0xA4,0x27,
95243 -0x21,0x28,0x13,0x02,
95244 -0x39,0x52,0x00,0x0C,
95245 -0x04,0x00,0x06,0x24,
95246 -0x21,0x28,0x12,0x02,
95247 -0x10,0x00,0xA4,0x27,
95248 -0xF0,0xFF,0x40,0x14,
95249 -0x04,0x00,0x06,0x24,
95250 -0x30,0x1F,0x85,0x26,
95251 -0x08,0x00,0xA3,0x8C,
95252 -0xC0,0xFF,0x02,0x3C,
95253 -0xFF,0xFF,0x42,0x34,
95254 -0x3F,0x00,0x24,0x32,
95255 -0x24,0x18,0x62,0x00,
95256 -0x00,0x24,0x04,0x00,
95257 -0xFF,0x7F,0x02,0x3C,
95258 -0x25,0x18,0x64,0x00,
95259 -0xFF,0xFF,0x42,0x34,
95260 -0x24,0x18,0x62,0x00,
95261 -0x08,0x00,0xA3,0xAC,
95262 -0x30,0x1F,0x82,0x26,
95263 -0x0C,0x00,0x43,0x8C,
95264 -0x00,0x40,0x04,0x3C,
95265 -0x30,0x1F,0x85,0x26,
95266 -0x25,0x18,0x64,0x00,
95267 -0x0C,0x00,0x43,0xAC,
95268 -0x0C,0x00,0xA2,0x8C,
95269 -0x01,0x00,0x03,0x24,
95270 -0x82,0x17,0x02,0x00,
95271 -0x01,0x00,0x44,0x30,
95272 -0x5D,0xFF,0x83,0x14,
95273 -0x21,0x10,0x00,0x00,
95274 -0xF0,0x5C,0x00,0x08,
95275 -0x00,0x00,0x00,0x00,
95276 -0xC6,0x02,0x02,0xA2,
95277 -0x0A,0x5D,0x00,0x08,
95278 -0xC4,0x02,0x13,0xA6,
95279 -0x23,0x5C,0x00,0x0C,
95280 -0x00,0x00,0x00,0x00,
95281 -0x1A,0x5D,0x00,0x08,
95282 -0xC4,0x02,0x13,0xA6,
95283 -0x25,0xB0,0x02,0x3C,
95284 -0x88,0x0C,0x42,0x34,
95285 -0x00,0x00,0x44,0x8C,
95286 -0x02,0x80,0x03,0x3C,
95287 -0x30,0x1F,0x66,0x24,
95288 -0xC0,0xFF,0x02,0x3C,
95289 -0x24,0x20,0x82,0x00,
95290 -0x21,0x88,0x00,0x00,
95291 -0xC0,0xFF,0x05,0x3C,
95292 -0xA2,0x5D,0x00,0x08,
95293 -0x18,0x00,0xC3,0x24,
95294 -0x01,0x00,0x31,0x26,
95295 -0x25,0x00,0x22,0x2E,
95296 -0xB4,0xFF,0x40,0x10,
95297 -0x25,0xB0,0x02,0x3C,
95298 -0x00,0x00,0x62,0x8C,
95299 -0x00,0x00,0x00,0x00,
95300 -0x24,0x10,0x45,0x00,
95301 -0xF8,0xFF,0x44,0x14,
95302 -0x04,0x00,0x63,0x24,
95303 -0x08,0x00,0xC2,0x8C,
95304 -0x3F,0x00,0x23,0x32,
95305 -0xFF,0xC0,0x04,0x24,
95306 -0x24,0x10,0x44,0x00,
95307 -0x00,0x1A,0x03,0x00,
95308 -0x25,0x10,0x43,0x00,
95309 -0x54,0x5D,0x00,0x08,
95310 -0x08,0x00,0xC2,0xAC,
95311 -0x08,0x00,0xA3,0x8C,
95312 -0xC0,0xFF,0x02,0x3C,
95313 -0xFF,0xFF,0x42,0x34,
95314 -0x3F,0x00,0x24,0x32,
95315 -0x24,0x18,0x62,0x00,
95316 -0x00,0x24,0x04,0x00,
95317 -0x25,0x18,0x64,0x00,
95318 -0x00,0x80,0x02,0x3C,
95319 -0x7D,0x5D,0x00,0x08,
95320 -0x25,0x18,0x62,0x00,
95321 -0x63,0x0C,0x23,0x36,
95322 -0x00,0x00,0x62,0xA0,
95323 -0x21,0x10,0x00,0x00,
95324 -0x01,0x00,0x42,0x24,
95325 -0xFF,0x00,0x42,0x30,
95326 -0x06,0x00,0x43,0x2C,
95327 -0xFD,0xFF,0x60,0x14,
95328 -0x01,0x00,0x42,0x24,
95329 -0x24,0x5D,0x00,0x08,
95330 -0x30,0x1F,0x83,0x26,
95331 -0x71,0x01,0x00,0x11,
95332 -0x23,0x28,0xF2,0x00,
95333 -0x2B,0x10,0x42,0x02,
95334 -0x21,0x18,0xD2,0x00,
95335 -0x00,0x00,0x42,0x38,
95336 -0x24,0x00,0x08,0x24,
95337 -0x2B,0x20,0x44,0x02,
95338 -0x0B,0x40,0x62,0x00,
95339 -0x06,0x00,0x80,0x10,
95340 -0x20,0x00,0x15,0x24,
95341 -0x30,0x1F,0x83,0x26,
95342 -0x0A,0x00,0x62,0x94,
95343 -0x00,0x00,0x00,0x00,
95344 -0x3F,0x00,0x42,0x30,
95345 -0x21,0xA8,0x52,0x00,
95346 -0x2B,0x28,0xC8,0x02,
95347 -0x5E,0x01,0xA0,0x10,
95348 -0x30,0x1F,0x82,0x26,
95349 -0x80,0x10,0x08,0x00,
95350 -0x30,0x1F,0x83,0x26,
95351 -0x21,0x10,0x43,0x00,
95352 -0x18,0x00,0x44,0x8C,
95353 -0x00,0x00,0x00,0x00,
95354 -0x82,0x25,0x04,0x00,
95355 -0x30,0x1F,0x86,0x26,
95356 -0x0C,0x00,0xC3,0x8C,
95357 -0x00,0x00,0x00,0x00,
95358 -0xFF,0x03,0x67,0x30,
95359 -0x47,0x01,0xE0,0x10,
95360 -0x00,0x02,0x62,0x30,
95361 -0x04,0x00,0x40,0x10,
95362 -0x18,0x00,0xE4,0x00,
95363 -0x00,0xFC,0x02,0x24,
95364 -0x25,0x38,0xE2,0x00,
95365 -0x18,0x00,0xE4,0x00,
95366 -0x82,0x82,0x03,0x00,
95367 -0xFF,0x03,0x10,0x32,
95368 -0x00,0x02,0x03,0x32,
95369 -0x12,0x10,0x00,0x00,
95370 -0x02,0x12,0x02,0x00,
95371 -0x03,0x00,0x60,0x10,
95372 -0xFF,0x03,0x45,0x30,
95373 -0x00,0xFC,0x02,0x24,
95374 -0x25,0x80,0x02,0x02,
95375 -0x18,0x00,0x04,0x02,
95376 -0x80,0x1D,0x04,0x00,
95377 -0x25,0xB0,0x11,0x3C,
95378 -0x80,0x0C,0x24,0x36,
95379 -0x94,0x0C,0x31,0x36,
95380 -0x12,0x80,0x00,0x00,
95381 -0x02,0x82,0x10,0x00,
95382 -0x3F,0x00,0x02,0x32,
95383 -0x00,0x14,0x02,0x00,
95384 -0x25,0x18,0x62,0x00,
95385 -0x25,0x18,0x65,0x00,
95386 -0x21,0x28,0x60,0x00,
95387 -0x02,0x5C,0x00,0x0C,
95388 -0x10,0x00,0xA3,0xAF,
95389 -0x00,0x00,0x23,0x8E,
95390 -0xFF,0x0F,0x02,0x3C,
95391 -0xC0,0x03,0x10,0x32,
95392 -0xFF,0xFF,0x42,0x34,
95393 -0x24,0x18,0x62,0x00,
95394 -0x80,0x85,0x10,0x00,
95395 -0x25,0x18,0x70,0x00,
95396 -0x21,0x20,0x20,0x02,
95397 -0x21,0x28,0x60,0x00,
95398 -0x10,0x00,0xA3,0xAF,
95399 -0x02,0x5C,0x00,0x0C,
95400 -0x00,0x00,0x00,0x00,
95401 -0x30,0x1F,0x83,0x26,
95402 -0x08,0x00,0x62,0x8C,
95403 -0x00,0x00,0x00,0x00,
95404 -0xB9,0x00,0x40,0x04,
95405 -0xC0,0x28,0x15,0x00,
95406 -0x21,0x10,0xA3,0x00,
95407 -0xAC,0x00,0x44,0x90,
95408 -0x25,0xB0,0x03,0x3C,
95409 -0x22,0x0A,0x63,0x34,
95410 -0x00,0x00,0x64,0xA0,
95411 -0x21,0x10,0x00,0x00,
95412 -0x01,0x00,0x42,0x24,
95413 -0xFF,0x00,0x42,0x30,
95414 -0x06,0x00,0x43,0x2C,
95415 -0xFD,0xFF,0x60,0x14,
95416 -0x01,0x00,0x42,0x24,
95417 -0x30,0x1F,0x82,0x26,
95418 -0x21,0x10,0xA2,0x00,
95419 -0xAD,0x00,0x44,0x90,
95420 -0x25,0xB0,0x03,0x3C,
95421 -0x23,0x0A,0x63,0x34,
95422 -0x00,0x00,0x64,0xA0,
95423 -0x21,0x10,0x00,0x00,
95424 -0x01,0x00,0x42,0x24,
95425 -0xFF,0x00,0x42,0x30,
95426 -0x06,0x00,0x43,0x2C,
95427 -0xFD,0xFF,0x60,0x14,
95428 -0x01,0x00,0x42,0x24,
95429 -0x30,0x1F,0x82,0x26,
95430 -0x21,0x10,0xA2,0x00,
95431 -0xAE,0x00,0x44,0x90,
95432 -0x25,0xB0,0x03,0x3C,
95433 -0x24,0x0A,0x63,0x34,
95434 -0x00,0x00,0x64,0xA0,
95435 -0x21,0x10,0x00,0x00,
95436 -0x01,0x00,0x42,0x24,
95437 -0xFF,0x00,0x42,0x30,
95438 -0x06,0x00,0x43,0x2C,
95439 -0xFD,0xFF,0x60,0x14,
95440 -0x01,0x00,0x42,0x24,
95441 -0x30,0x1F,0x82,0x26,
95442 -0x21,0x10,0xA2,0x00,
95443 -0xAF,0x00,0x44,0x90,
95444 -0x25,0xB0,0x03,0x3C,
95445 -0x25,0x0A,0x63,0x34,
95446 -0x00,0x00,0x64,0xA0,
95447 -0x21,0x10,0x00,0x00,
95448 -0x01,0x00,0x42,0x24,
95449 -0xFF,0x00,0x42,0x30,
95450 -0x06,0x00,0x43,0x2C,
95451 -0xFD,0xFF,0x60,0x14,
95452 -0x01,0x00,0x42,0x24,
95453 -0x30,0x1F,0x82,0x26,
95454 -0x21,0x10,0xA2,0x00,
95455 -0xB0,0x00,0x44,0x90,
95456 -0x25,0xB0,0x03,0x3C,
95457 -0x26,0x0A,0x63,0x34,
95458 -0x00,0x00,0x64,0xA0,
95459 -0x21,0x10,0x00,0x00,
95460 -0x01,0x00,0x42,0x24,
95461 -0xFF,0x00,0x42,0x30,
95462 -0x06,0x00,0x43,0x2C,
95463 -0xFD,0xFF,0x60,0x14,
95464 -0x01,0x00,0x42,0x24,
95465 -0x30,0x1F,0x82,0x26,
95466 -0x21,0x10,0xA2,0x00,
95467 -0xB1,0x00,0x44,0x90,
95468 -0x25,0xB0,0x03,0x3C,
95469 -0x27,0x0A,0x63,0x34,
95470 -0x00,0x00,0x64,0xA0,
95471 -0x21,0x10,0x00,0x00,
95472 -0x01,0x00,0x42,0x24,
95473 -0xFF,0x00,0x42,0x30,
95474 -0x06,0x00,0x43,0x2C,
95475 -0xFD,0xFF,0x60,0x14,
95476 -0x01,0x00,0x42,0x24,
95477 -0x30,0x1F,0x82,0x26,
95478 -0x21,0x10,0xA2,0x00,
95479 -0xB2,0x00,0x44,0x90,
95480 -0x25,0xB0,0x03,0x3C,
95481 -0x28,0x0A,0x63,0x34,
95482 -0x00,0x00,0x64,0xA0,
95483 -0x21,0x10,0x00,0x00,
95484 -0x01,0x00,0x42,0x24,
95485 -0xFF,0x00,0x42,0x30,
95486 -0x06,0x00,0x43,0x2C,
95487 -0xFD,0xFF,0x60,0x14,
95488 -0x01,0x00,0x42,0x24,
95489 -0x30,0x1F,0x82,0x26,
95490 -0x21,0x10,0xA2,0x00,
95491 -0xB3,0x00,0x44,0x90,
95492 -0x25,0xB0,0x03,0x3C,
95493 -0x29,0x0A,0x63,0x34,
95494 -0x00,0x00,0x64,0xA0,
95495 -0x21,0x10,0x00,0x00,
95496 -0x01,0x00,0x42,0x24,
95497 -0xFF,0x00,0x42,0x30,
95498 -0x06,0x00,0x43,0x2C,
95499 -0xFD,0xFF,0x60,0x14,
95500 -0x01,0x00,0x42,0x24,
95501 -0x02,0x80,0x02,0x3C,
95502 -0xDE,0x5D,0x44,0x90,
95503 -0x22,0x00,0x03,0x24,
95504 -0x03,0x00,0x83,0x10,
95505 -0x92,0x00,0x02,0x24,
95506 -0x73,0xFE,0x82,0x14,
95507 -0x21,0x10,0x00,0x00,
95508 -0x30,0x1F,0x82,0x26,
95509 -0x08,0x00,0x43,0x8C,
95510 -0x01,0x00,0x44,0x3A,
95511 -0x24,0x00,0x02,0x24,
95512 -0x02,0x1A,0x03,0x00,
95513 -0x3F,0x00,0x63,0x30,
95514 -0x01,0x00,0x84,0x30,
95515 -0xF3,0x00,0x80,0x10,
95516 -0x23,0x28,0x43,0x00,
95517 -0x42,0x18,0x12,0x00,
95518 -0x40,0x10,0x03,0x00,
95519 -0x21,0x90,0x43,0x00,
95520 -0x30,0x1F,0x83,0x26,
95521 -0xC3,0x02,0x62,0x90,
95522 -0x00,0x00,0x00,0x00,
95523 -0x2B,0x10,0x62,0x02,
95524 -0xB8,0x00,0x40,0x10,
95525 -0x2B,0x10,0x45,0x02,
95526 -0x06,0x00,0x40,0x10,
95527 -0x24,0x00,0x06,0x24,
95528 -0x08,0x00,0x62,0x8C,
95529 -0x00,0x00,0x00,0x00,
95530 -0x02,0x12,0x02,0x00,
95531 -0x3F,0x00,0x42,0x30,
95532 -0x21,0x30,0x52,0x00,
95533 -0x2B,0x28,0xC6,0x02,
95534 -0xB8,0x00,0xA0,0x10,
95535 -0x30,0x1F,0x82,0x26,
95536 -0x80,0x10,0x06,0x00,
95537 -0x30,0x1F,0x83,0x26,
95538 -0x21,0x10,0x43,0x00,
95539 -0x18,0x00,0x44,0x8C,
95540 -0x00,0x00,0x00,0x00,
95541 -0x82,0x25,0x04,0x00,
95542 -0x30,0x1F,0x83,0x26,
95543 -0x10,0x00,0x70,0x8C,
95544 -0x00,0x00,0x00,0x00,
95545 -0x82,0x3A,0x10,0x00,
95546 -0xFF,0x03,0xE7,0x30,
95547 -0xC5,0x00,0xE0,0x10,
95548 -0x00,0x02,0xE2,0x30,
95549 -0x04,0x00,0x40,0x10,
95550 -0x18,0x00,0xE4,0x00,
95551 -0x00,0xFC,0x02,0x24,
95552 -0x25,0x38,0xE2,0x00,
95553 -0x18,0x00,0xE4,0x00,
95554 -0x02,0x85,0x10,0x00,
95555 -0xFF,0x03,0x10,0x32,
95556 -0x00,0x02,0x03,0x32,
95557 -0x12,0x10,0x00,0x00,
95558 -0x02,0x12,0x02,0x00,
95559 -0x03,0x00,0x60,0x10,
95560 -0xFF,0x03,0x45,0x30,
95561 -0x00,0xFC,0x02,0x24,
95562 -0x25,0x80,0x02,0x02,
95563 -0x18,0x00,0x04,0x02,
95564 -0x80,0x1D,0x04,0x00,
95565 -0x25,0xB0,0x11,0x3C,
95566 -0x88,0x0C,0x24,0x36,
95567 -0x9C,0x0C,0x31,0x36,
95568 -0x12,0x80,0x00,0x00,
95569 -0x02,0x82,0x10,0x00,
95570 -0x3F,0x00,0x02,0x32,
95571 -0x00,0x14,0x02,0x00,
95572 -0x25,0x18,0x62,0x00,
95573 -0x25,0x18,0x65,0x00,
95574 -0x21,0x28,0x60,0x00,
95575 -0x02,0x5C,0x00,0x0C,
95576 -0x10,0x00,0xA3,0xAF,
95577 -0x00,0x00,0x23,0x8E,
95578 -0xFF,0x0F,0x02,0x3C,
95579 -0xFF,0xFF,0x42,0x34,
95580 -0xC0,0x03,0x10,0x32,
95581 -0x24,0x18,0x62,0x00,
95582 -0x80,0x85,0x10,0x00,
95583 -0x25,0x18,0x70,0x00,
95584 -0x21,0x20,0x20,0x02,
95585 -0x21,0x28,0x60,0x00,
95586 -0x02,0x5C,0x00,0x0C,
95587 -0x10,0x00,0xA3,0xAF,
95588 -0xE6,0x5C,0x00,0x08,
95589 -0x21,0x10,0x00,0x00,
95590 -0x21,0x10,0xA3,0x00,
95591 -0xB4,0x01,0x44,0x90,
95592 -0x25,0xB0,0x03,0x3C,
95593 -0x22,0x0A,0x63,0x34,
95594 -0x00,0x00,0x64,0xA0,
95595 -0x21,0x10,0x00,0x00,
95596 -0x01,0x00,0x42,0x24,
95597 -0xFF,0x00,0x42,0x30,
95598 -0x06,0x00,0x43,0x2C,
95599 -0xFD,0xFF,0x60,0x14,
95600 -0x01,0x00,0x42,0x24,
95601 -0x30,0x1F,0x82,0x26,
95602 -0x21,0x10,0xA2,0x00,
95603 -0xB5,0x01,0x44,0x90,
95604 -0x25,0xB0,0x03,0x3C,
95605 -0x23,0x0A,0x63,0x34,
95606 -0x00,0x00,0x64,0xA0,
95607 -0x21,0x10,0x00,0x00,
95608 -0x01,0x00,0x42,0x24,
95609 -0xFF,0x00,0x42,0x30,
95610 -0x06,0x00,0x43,0x2C,
95611 -0xFD,0xFF,0x60,0x14,
95612 -0x01,0x00,0x42,0x24,
95613 -0x30,0x1F,0x82,0x26,
95614 -0x21,0x10,0xA2,0x00,
95615 -0xB6,0x01,0x44,0x90,
95616 -0x25,0xB0,0x03,0x3C,
95617 -0x24,0x0A,0x63,0x34,
95618 -0x00,0x00,0x64,0xA0,
95619 -0x21,0x10,0x00,0x00,
95620 -0x01,0x00,0x42,0x24,
95621 -0xFF,0x00,0x42,0x30,
95622 -0x06,0x00,0x43,0x2C,
95623 -0xFD,0xFF,0x60,0x14,
95624 -0x01,0x00,0x42,0x24,
95625 -0x30,0x1F,0x82,0x26,
95626 -0x21,0x10,0xA2,0x00,
95627 -0xB7,0x01,0x44,0x90,
95628 -0x25,0xB0,0x03,0x3C,
95629 -0x25,0x0A,0x63,0x34,
95630 -0x00,0x00,0x64,0xA0,
95631 -0x21,0x10,0x00,0x00,
95632 -0x01,0x00,0x42,0x24,
95633 -0xFF,0x00,0x42,0x30,
95634 -0x06,0x00,0x43,0x2C,
95635 -0xFD,0xFF,0x60,0x14,
95636 -0x01,0x00,0x42,0x24,
95637 -0x30,0x1F,0x82,0x26,
95638 -0x21,0x10,0xA2,0x00,
95639 -0xB8,0x01,0x44,0x90,
95640 -0x25,0xB0,0x03,0x3C,
95641 -0x26,0x0A,0x63,0x34,
95642 -0x00,0x00,0x64,0xA0,
95643 -0x21,0x10,0x00,0x00,
95644 -0x01,0x00,0x42,0x24,
95645 -0xFF,0x00,0x42,0x30,
95646 -0x06,0x00,0x43,0x2C,
95647 -0xFD,0xFF,0x60,0x14,
95648 -0x01,0x00,0x42,0x24,
95649 -0x30,0x1F,0x82,0x26,
95650 -0x21,0x10,0xA2,0x00,
95651 -0xB9,0x01,0x44,0x90,
95652 -0x25,0xB0,0x03,0x3C,
95653 -0x27,0x0A,0x63,0x34,
95654 -0x00,0x00,0x64,0xA0,
95655 -0x21,0x10,0x00,0x00,
95656 -0x01,0x00,0x42,0x24,
95657 -0xFF,0x00,0x42,0x30,
95658 -0x06,0x00,0x43,0x2C,
95659 -0xFD,0xFF,0x60,0x14,
95660 -0x01,0x00,0x42,0x24,
95661 -0x30,0x1F,0x82,0x26,
95662 -0x21,0x10,0xA2,0x00,
95663 -0xBA,0x01,0x44,0x90,
95664 -0x25,0xB0,0x03,0x3C,
95665 -0x28,0x0A,0x63,0x34,
95666 -0x00,0x00,0x64,0xA0,
95667 -0x21,0x10,0x00,0x00,
95668 -0x01,0x00,0x42,0x24,
95669 -0xFF,0x00,0x42,0x30,
95670 -0x06,0x00,0x43,0x2C,
95671 -0xFD,0xFF,0x60,0x14,
95672 -0x01,0x00,0x42,0x24,
95673 -0x30,0x1F,0x82,0x26,
95674 -0x21,0x10,0xA2,0x00,
95675 -0xBB,0x01,0x44,0x90,
95676 -0x25,0xB0,0x03,0x3C,
95677 -0x29,0x0A,0x63,0x34,
95678 -0x00,0x00,0x64,0xA0,
95679 -0x21,0x10,0x00,0x00,
95680 -0x01,0x00,0x42,0x24,
95681 -0xFF,0x00,0x42,0x30,
95682 -0x06,0x00,0x43,0x2C,
95683 -0xFC,0xFF,0x60,0x14,
95684 -0x00,0x00,0x00,0x00,
95685 -0x6E,0x5E,0x00,0x08,
95686 -0x02,0x80,0x02,0x3C,
95687 -0x36,0x00,0xA0,0x10,
95688 -0x80,0x10,0x08,0x00,
95689 -0x21,0x10,0x46,0x00,
95690 -0x18,0x00,0x45,0x8C,
95691 -0x25,0xB0,0x04,0x3C,
95692 -0x02,0x5C,0x00,0x0C,
95693 -0x80,0x0C,0x84,0x34,
95694 -0x25,0xB0,0x04,0x3C,
95695 -0x94,0x0C,0x84,0x34,
95696 -0x07,0x5E,0x00,0x08,
95697 -0x21,0x28,0x00,0x00,
95698 -0x30,0x00,0x43,0x8C,
95699 -0xDB,0x5D,0x00,0x08,
95700 -0x82,0x25,0x03,0x00,
95701 -0x23,0x20,0xD2,0x00,
95702 -0x2B,0x10,0x46,0x02,
95703 -0x2B,0x18,0x47,0x02,
95704 -0x21,0x40,0x00,0x00,
95705 -0x21,0xA8,0x00,0x00,
95706 -0x0B,0x40,0x82,0x00,
95707 -0xD2,0x5D,0x00,0x08,
95708 -0x0B,0xA8,0xA3,0x00,
95709 -0x08,0x00,0x62,0x8C,
95710 -0x00,0x00,0x00,0x00,
95711 -0x02,0x12,0x02,0x00,
95712 -0x3F,0x00,0x42,0x30,
95713 -0x2B,0x18,0x42,0x02,
95714 -0x4A,0xFF,0x60,0x14,
95715 -0x23,0x30,0x52,0x00,
95716 -0x21,0x30,0x00,0x00,
95717 -0x21,0x28,0x00,0x00,
95718 -0x30,0x1F,0x82,0x26,
95719 -0x30,0x00,0x43,0x8C,
95720 -0x96,0x5E,0x00,0x08,
95721 -0x82,0x25,0x03,0x00,
95722 -0x0F,0x00,0x11,0x3C,
95723 -0xFF,0xFF,0x25,0x36,
95724 -0x60,0x00,0x06,0x24,
95725 -0x5F,0x47,0x00,0x0C,
95726 -0x24,0x00,0x04,0x24,
95727 -0x25,0x22,0x00,0x0C,
95728 -0xE8,0x03,0x04,0x24,
95729 -0x00,0x60,0x10,0x40,
95730 -0x01,0x00,0x01,0x36,
95731 -0x01,0x00,0x21,0x38,
95732 -0x00,0x60,0x81,0x40,
95733 -0x24,0x00,0x04,0x24,
95734 -0x8A,0x47,0x00,0x0C,
95735 -0xFF,0xFF,0x25,0x36,
95736 -0x1F,0x00,0x53,0x30,
95737 -0x00,0x60,0x90,0x40,
95738 -0x54,0x22,0x00,0x0C,
95739 -0x64,0x00,0x04,0x24,
95740 -0x06,0x5D,0x00,0x08,
95741 -0x30,0x1F,0x90,0x26,
95742 -0x30,0x00,0xC5,0x8C,
95743 -0x2C,0x5F,0x00,0x08,
95744 -0x25,0xB0,0x04,0x3C,
95745 -0x13,0x00,0xA0,0x10,
95746 -0x00,0x00,0x00,0x00,
95747 -0x80,0x10,0x06,0x00,
95748 -0x21,0x10,0x43,0x00,
95749 -0x18,0x00,0x45,0x8C,
95750 -0x25,0xB0,0x04,0x3C,
95751 -0x02,0x5C,0x00,0x0C,
95752 -0x88,0x0C,0x84,0x34,
95753 -0x25,0xB0,0x04,0x3C,
95754 -0x9C,0x0C,0x84,0x34,
95755 -0x02,0x5C,0x00,0x0C,
95756 -0x21,0x28,0x00,0x00,
95757 -0xE6,0x5C,0x00,0x08,
95758 -0x21,0x10,0x00,0x00,
95759 -0xFF,0xFF,0x43,0x26,
95760 -0x42,0x18,0x03,0x00,
95761 -0x40,0x10,0x03,0x00,
95762 -0x21,0x10,0x43,0x00,
95763 -0x80,0x5E,0x00,0x08,
95764 -0x01,0x00,0x52,0x24,
95765 -0x30,0x00,0x65,0x8C,
95766 -0x67,0x5F,0x00,0x08,
95767 -0x25,0xB0,0x04,0x3C,
95768 -0x00,0xFF,0x84,0x30,
95769 -0x02,0x22,0x04,0x00,
95770 -0x08,0x00,0x80,0x10,
95771 -0x02,0x80,0x02,0x3C,
95772 -0xFF,0x00,0x02,0x24,
95773 -0x04,0x00,0x82,0x10,
95774 -0xCC,0xFF,0x03,0x24,
95775 -0x02,0x80,0x02,0x3C,
95776 -0x08,0x00,0xE0,0x03,
95777 -0x16,0x22,0x43,0xA0,
95778 -0x02,0x80,0x02,0x3C,
95779 -0x08,0x00,0xE0,0x03,
95780 -0x16,0x22,0x44,0xA0,
95781 -0x02,0x24,0x04,0x00,
95782 -0xFF,0x00,0x84,0x30,
95783 -0xC0,0x10,0x04,0x00,
95784 -0x21,0x10,0x44,0x00,
95785 -0x80,0x10,0x02,0x00,
95786 -0x21,0x10,0x44,0x00,
95787 -0x02,0x80,0x03,0x3C,
95788 -0x80,0x10,0x02,0x00,
95789 -0x30,0x1F,0x63,0x24,
95790 -0x20,0x00,0x84,0x2C,
95791 -0x09,0x00,0x80,0x10,
95792 -0x21,0x10,0x43,0x00,
95793 -0x0C,0x24,0x43,0x8C,
95794 -0x25,0xB0,0x02,0x3C,
95795 -0x74,0x03,0x42,0x34,
95796 -0x02,0x19,0x03,0x00,
95797 -0x7F,0x00,0x63,0x30,
95798 -0x00,0x00,0x43,0xAC,
95799 -0x08,0x00,0xE0,0x03,
95800 -0x00,0x00,0x00,0x00,
95801 -0x02,0x80,0x02,0x3C,
95802 -0xB0,0x55,0x43,0x8C,
95803 -0x25,0xB0,0x02,0x3C,
95804 -0x74,0x03,0x42,0x34,
95805 -0x02,0x19,0x03,0x00,
95806 -0x7F,0x00,0x63,0x30,
95807 -0x00,0x00,0x43,0xAC,
95808 -0x08,0x00,0xE0,0x03,
95809 -0x00,0x00,0x00,0x00,
95810 -0xFF,0x00,0x85,0x30,
95811 -0xD2,0xFF,0xA3,0x24,
95812 -0xFE,0xFF,0xA2,0x24,
95813 -0xDA,0xFF,0xA4,0x24,
95814 -0x04,0x00,0x63,0x2C,
95815 -0x08,0x00,0x84,0x2C,
95816 -0x06,0x00,0x60,0x14,
95817 -0xFF,0x00,0x42,0x30,
95818 -0xF0,0xFF,0xA2,0x24,
95819 -0xFC,0xFF,0xA3,0x24,
95820 -0x16,0x00,0x46,0x2C,
95821 -0x03,0x00,0x80,0x10,
95822 -0xFF,0x00,0x62,0x30,
95823 -0x08,0x00,0xE0,0x03,
95824 -0x00,0x00,0x00,0x00,
95825 -0xFA,0xFF,0xA3,0x24,
95826 -0xFC,0xFF,0xC0,0x10,
95827 -0x21,0x10,0xA0,0x00,
95828 -0x08,0x00,0xE0,0x03,
95829 -0xFF,0x00,0x62,0x30,
95830 -0x25,0xB0,0x03,0x3C,
95831 -0x03,0x0D,0x63,0x34,
95832 -0x00,0x00,0x62,0x90,
95833 -0x21,0x20,0x00,0x00,
95834 -0xFF,0x00,0x42,0x30,
95835 -0x08,0x00,0x42,0x34,
95836 -0x00,0x00,0x62,0xA0,
95837 -0x01,0x00,0x82,0x24,
95838 -0xFF,0x00,0x44,0x30,
95839 -0x06,0x00,0x83,0x2C,
95840 -0xFD,0xFF,0x60,0x14,
95841 -0x01,0x00,0x82,0x24,
95842 -0x25,0xB0,0x03,0x3C,
95843 -0x03,0x0D,0x63,0x34,
95844 -0x00,0x00,0x62,0x90,
95845 -0x21,0x20,0x00,0x00,
95846 -0xF7,0x00,0x42,0x30,
95847 -0x00,0x00,0x62,0xA0,
95848 -0x01,0x00,0x82,0x24,
95849 -0xFF,0x00,0x44,0x30,
95850 -0x06,0x00,0x83,0x2C,
95851 -0xFD,0xFF,0x60,0x14,
95852 -0x01,0x00,0x82,0x24,
95853 -0x25,0xB0,0x03,0x3C,
95854 -0x2D,0x0A,0x63,0x34,
95855 -0x00,0x00,0x62,0x90,
95856 -0x21,0x20,0x00,0x00,
95857 -0x3F,0x00,0x42,0x30,
95858 -0x00,0x00,0x62,0xA0,
95859 -0x01,0x00,0x82,0x24,
95860 -0xFF,0x00,0x44,0x30,
95861 -0x06,0x00,0x83,0x2C,
95862 -0xFD,0xFF,0x60,0x14,
95863 -0x01,0x00,0x82,0x24,
95864 -0x25,0xB0,0x03,0x3C,
95865 -0x2D,0x0A,0x63,0x34,
95866 -0x00,0x00,0x62,0x90,
95867 -0x21,0x20,0x00,0x00,
95868 -0xFF,0x00,0x42,0x30,
95869 -0x80,0x00,0x42,0x34,
95870 -0x00,0x00,0x62,0xA0,
95871 -0x01,0x00,0x82,0x24,
95872 -0xFF,0x00,0x44,0x30,
95873 -0x06,0x00,0x83,0x2C,
95874 -0xFC,0xFF,0x60,0x14,
95875 -0x00,0x00,0x00,0x00,
95876 -0x08,0x00,0xE0,0x03,
95877 -0x00,0x00,0x00,0x00,
95878 -0x25,0xB0,0x02,0x3C,
95879 -0xFF,0x00,0x03,0x3C,
95880 -0x82,0x01,0x49,0x34,
95881 -0x81,0x01,0x48,0x34,
95882 -0x24,0x10,0x83,0x00,
95883 -0x02,0x3C,0x02,0x00,
95884 -0x00,0xFF,0x63,0x34,
95885 -0x02,0x80,0x02,0x3C,
95886 -0x30,0x1F,0x45,0x24,
95887 -0x02,0x32,0x04,0x00,
95888 -0x01,0x00,0x02,0x24,
95889 -0x24,0x20,0x83,0x00,
95890 -0xE6,0x1D,0xA2,0xA0,
95891 -0xD4,0x1D,0xA0,0xAC,
95892 -0xD8,0x1D,0xA0,0xAC,
95893 -0xDC,0x1D,0xA0,0xAC,
95894 -0x06,0x00,0x80,0x14,
95895 -0xE0,0x1D,0xA0,0xAC,
95896 -0x00,0x00,0x02,0x91,
95897 -0x00,0x00,0x23,0x91,
95898 -0xE4,0x1D,0xA2,0xA0,
95899 -0x08,0x00,0xE0,0x03,
95900 -0xE5,0x1D,0xA3,0xA0,
95901 -0xE5,0x1D,0xA7,0xA0,
95902 -0x08,0x00,0xE0,0x03,
95903 -0xE4,0x1D,0xA6,0xA0,
95904 -0x02,0x80,0x03,0x3C,
95905 -0x30,0x1F,0x63,0x24,
95906 -0xE5,0x1D,0x66,0x90,
95907 -0xE4,0x1D,0x65,0x90,
95908 -0x25,0xB0,0x02,0x3C,
95909 -0x82,0x01,0x44,0x34,
95910 -0x81,0x01,0x42,0x34,
95911 -0x00,0x00,0x45,0xA0,
95912 -0x00,0x00,0x86,0xA0,
95913 -0x08,0x00,0xE0,0x03,
95914 -0xE6,0x1D,0x60,0xA0,
95915 -0x02,0x80,0x08,0x3C,
95916 -0x30,0x1F,0x04,0x25,
95917 -0xE6,0x1D,0x82,0x90,
95918 -0x00,0x00,0x00,0x00,
95919 -0x15,0x00,0x40,0x10,
95920 -0x21,0x18,0x00,0x00,
95921 -0xD8,0x1D,0x82,0x8C,
95922 -0xD4,0x1D,0x85,0x8C,
95923 -0x25,0xB0,0x03,0x3C,
95924 -0x40,0x11,0x02,0x00,
95925 -0x2B,0x10,0xA2,0x00,
95926 -0x82,0x01,0x67,0x34,
95927 -0x0F,0x00,0x40,0x10,
95928 -0x81,0x01,0x66,0x34,
95929 -0xE5,0x1D,0x83,0x90,
95930 -0xE4,0x1D,0x82,0x90,
95931 -0xF0,0x00,0x63,0x30,
95932 -0x1F,0x00,0x42,0x30,
95933 -0x00,0x00,0xC2,0xA0,
95934 -0x00,0x00,0xE3,0xA0,
95935 -0x30,0x1F,0x02,0x25,
95936 -0x01,0x00,0x03,0x24,
95937 -0xE0,0x1D,0x40,0xAC,
95938 -0xD4,0x1D,0x40,0xAC,
95939 -0xD8,0x1D,0x40,0xAC,
95940 -0xDC,0x1D,0x40,0xAC,
95941 -0x08,0x00,0xE0,0x03,
95942 -0x21,0x10,0x60,0x00,
95943 -0xDC,0x1D,0x82,0x8C,
95944 -0x25,0xB0,0x03,0x3C,
95945 -0x82,0x01,0x69,0x34,
95946 -0x40,0x11,0x02,0x00,
95947 -0x2B,0x10,0xA2,0x00,
95948 -0x0E,0x00,0x40,0x14,
95949 -0x81,0x01,0x66,0x34,
95950 -0xE0,0x1D,0x82,0x8C,
95951 -0x00,0x00,0x00,0x00,
95952 -0x40,0x11,0x02,0x00,
95953 -0x2B,0x10,0xA2,0x00,
95954 -0x08,0x00,0x40,0x14,
95955 -0x00,0x00,0x00,0x00,
95956 -0xE5,0x1D,0x83,0x90,
95957 -0xE4,0x1D,0x82,0x90,
95958 -0x00,0x00,0x00,0x00,
95959 -0x00,0x00,0xC2,0xA0,
95960 -0x00,0x00,0x23,0xA1,
95961 -0x20,0x60,0x00,0x08,
95962 -0x30,0x1F,0x02,0x25,
95963 -0xE5,0x1D,0x83,0x90,
95964 -0xE4,0x1D,0x82,0x90,
95965 -0xF0,0x00,0x63,0x30,
95966 -0x7F,0x00,0x42,0x30,
95967 -0x00,0x00,0xC2,0xA0,
95968 -0x00,0x00,0x23,0xA1,
95969 -0x20,0x60,0x00,0x08,
95970 -0x30,0x1F,0x02,0x25,
95971 -0x00,0x00,0x85,0xAC,
95972 -0x21,0x10,0x00,0x00,
95973 -0x01,0x00,0x42,0x24,
95974 -0xFF,0x00,0x42,0x30,
95975 -0x06,0x00,0x43,0x2C,
95976 -0xFC,0xFF,0x60,0x14,
95977 -0x00,0x00,0x00,0x00,
95978 -0x08,0x00,0xE0,0x03,
95979 -0x00,0x00,0x00,0x00,
95980 -0x25,0xB0,0x03,0x3C,
95981 -0x33,0x02,0x65,0x34,
95982 -0x00,0x11,0x04,0x00,
95983 -0x00,0x00,0xA2,0xA0,
95984 -0x30,0x02,0x63,0x34,
95985 -0x00,0x00,0x65,0x8C,
95986 -0x0F,0x00,0x02,0x3C,
95987 -0xFF,0xFF,0x42,0x34,
95988 -0x24,0x28,0xA2,0x00,
95989 -0x01,0x00,0x03,0x24,
95990 -0x04,0x18,0x83,0x00,
95991 -0x02,0x00,0xA0,0x10,
95992 -0x21,0x10,0x00,0x00,
95993 -0xFF,0xFF,0x62,0x30,
95994 -0x08,0x00,0xE0,0x03,
95995 -0x00,0x00,0x00,0x00,
95996 -0xE0,0xFF,0xBD,0x27,
95997 -0x14,0x00,0xB1,0xAF,
95998 -0x25,0xB0,0x11,0x3C,
95999 -0x18,0x00,0xB2,0xAF,
96000 -0x4C,0x00,0x22,0x36,
96001 -0x1C,0x00,0xBF,0xAF,
96002 -0x10,0x00,0xB0,0xAF,
96003 -0x00,0x00,0x44,0x90,
96004 -0x02,0x80,0x03,0x3C,
96005 -0x02,0x00,0x02,0x24,
96006 -0xFF,0x00,0x84,0x30,
96007 -0x07,0x00,0x82,0x10,
96008 -0x30,0x1F,0x72,0x24,
96009 -0x1C,0x00,0xBF,0x8F,
96010 -0x18,0x00,0xB2,0x8F,
96011 -0x14,0x00,0xB1,0x8F,
96012 -0x10,0x00,0xB0,0x8F,
96013 -0x08,0x00,0xE0,0x03,
96014 -0x20,0x00,0xBD,0x27,
96015 -0x8A,0x36,0x43,0x96,
96016 -0x01,0x00,0x02,0x24,
96017 -0xF7,0xFF,0x62,0x14,
96018 -0x00,0x00,0x00,0x00,
96019 -0x02,0x80,0x02,0x3C,
96020 -0xF4,0x5E,0x43,0x90,
96021 -0x00,0x00,0x00,0x00,
96022 -0xF2,0xFF,0x60,0x14,
96023 -0x21,0x20,0x00,0x00,
96024 -0x4C,0x60,0x00,0x0C,
96025 -0x00,0x00,0x00,0x00,
96026 -0x04,0x00,0x04,0x24,
96027 -0x4C,0x60,0x00,0x0C,
96028 -0x21,0x80,0x40,0x00,
96029 -0x25,0x80,0x02,0x02,
96030 -0x02,0x80,0x04,0x3C,
96031 -0x33,0x02,0x23,0x36,
96032 -0x08,0x00,0x02,0x24,
96033 -0xFF,0xFF,0x10,0x32,
96034 -0x40,0x00,0x27,0x36,
96035 -0xEC,0xE8,0x84,0x24,
96036 -0x00,0x00,0x62,0xA0,
96037 -0xE3,0xFF,0x00,0x16,
96038 -0x00,0x00,0x00,0x00,
96039 -0x00,0x00,0xE2,0x94,
96040 -0x88,0x36,0x43,0x96,
96041 -0xFF,0xDF,0x42,0x30,
96042 -0x01,0x00,0x63,0x24,
96043 -0x00,0x20,0x46,0x34,
96044 -0x88,0x36,0x43,0xA6,
96045 -0xFF,0xFF,0x65,0x30,
96046 -0x00,0x00,0xE2,0xA4,
96047 -0x00,0x00,0xE6,0xA4,
96048 -0x2F,0x55,0x00,0x0C,
96049 -0x00,0x00,0x00,0x00,
96050 -0x69,0x60,0x00,0x08,
96051 -0x00,0x00,0x00,0x00,
96052 -0x25,0xB0,0x02,0x3C,
96053 -0x21,0x20,0x82,0x00,
96054 -0x00,0x00,0x85,0xAC,
96055 -0x21,0x10,0x00,0x00,
96056 -0x01,0x00,0x42,0x24,
96057 -0xFF,0x00,0x42,0x30,
96058 -0x06,0x00,0x43,0x2C,
96059 -0xFC,0xFF,0x60,0x14,
96060 -0x00,0x00,0x00,0x00,
96061 -0x08,0x00,0xE0,0x03,
96062 -0x00,0x00,0x00,0x00,
96063 -0xE8,0xFF,0xBD,0x27,
96064 -0x10,0x00,0xBF,0xAF,
96065 -0xDF,0x2F,0x00,0x0C,
96066 -0x00,0x00,0x00,0x00,
96067 -0x10,0x00,0xBF,0x8F,
96068 -0x02,0x80,0x02,0x3C,
96069 -0xE8,0x03,0x03,0x24,
96070 -0x34,0x5F,0x43,0xAC,
96071 -0x18,0x00,0xBD,0x27,
96072 -0x08,0x00,0xE0,0x03,
96073 -0x21,0x10,0x00,0x00,
96074 -0x08,0x00,0xE0,0x03,
96075 -0x00,0x00,0x00,0x00,
96076 -0x08,0x00,0xE0,0x03,
96077 -0x00,0x00,0x00,0x00,
96078 -0x08,0x00,0xE0,0x03,
96079 -0x00,0x00,0x00,0x00,
96080 -0x08,0x00,0xE0,0x03,
96081 -0x00,0x00,0x00,0x00,
96082 -0x08,0x00,0xE0,0x03,
96083 -0x00,0x00,0x00,0x00,
96084 -0x08,0x00,0xE0,0x03,
96085 -0x00,0x00,0x00,0x00,
96086 -0x02,0x80,0x02,0x3C,
96087 -0xFA,0x5E,0x40,0xA0,
96088 -0xFF,0x00,0x85,0x30,
96089 -0x02,0x80,0x03,0x3C,
96090 -0x02,0x80,0x02,0x3C,
96091 -0x0C,0x5F,0x60,0xA0,
96092 -0x08,0x00,0xA4,0x2C,
96093 -0x0E,0x5F,0x40,0xA0,
96094 -0x02,0x80,0x03,0x3C,
96095 -0x02,0x80,0x02,0x3C,
96096 -0x16,0x5F,0x60,0xA0,
96097 -0xF4,0x5E,0x45,0xA0,
96098 -0x2C,0x00,0x80,0x10,
96099 -0x02,0x80,0x03,0x3C,
96100 -0x80,0x10,0x05,0x00,
96101 -0x94,0xF0,0x63,0x24,
96102 -0x21,0x10,0x43,0x00,
96103 -0x00,0x00,0x44,0x8C,
96104 -0x00,0x00,0x00,0x00,
96105 -0x08,0x00,0x80,0x00,
96106 -0x00,0x00,0x00,0x00,
96107 -0x02,0x80,0x05,0x3C,
96108 -0x30,0x1F,0xA5,0x24,
96109 -0xD0,0x1B,0xA4,0x8C,
96110 -0x00,0x70,0x02,0x3C,
96111 -0x02,0x00,0x42,0x34,
96112 -0x25,0x20,0x82,0x00,
96113 -0x41,0xB0,0x03,0x3C,
96114 -0x00,0x00,0x64,0xAC,
96115 -0x08,0x00,0xE0,0x03,
96116 -0xD0,0x1B,0xA4,0xAC,
96117 -0x02,0x80,0x05,0x3C,
96118 -0x30,0x1F,0xA5,0x24,
96119 -0xD0,0x1B,0xA4,0x8C,
96120 -0x00,0x70,0x02,0x3C,
96121 -0x02,0x00,0x42,0x34,
96122 -0x27,0x10,0x02,0x00,
96123 -0x24,0x20,0x82,0x00,
96124 -0x41,0xB0,0x03,0x3C,
96125 -0x00,0x00,0x64,0xAC,
96126 -0x08,0x00,0xE0,0x03,
96127 -0xD0,0x1B,0xA4,0xAC,
96128 -0x02,0x80,0x05,0x3C,
96129 -0x30,0x1F,0xA5,0x24,
96130 -0xD0,0x1B,0xA4,0x8C,
96131 -0x00,0x70,0x02,0x3C,
96132 -0x27,0x10,0x02,0x00,
96133 -0x24,0x20,0x82,0x00,
96134 -0x02,0x80,0x07,0x3C,
96135 -0x41,0xB0,0x02,0x3C,
96136 -0x01,0x00,0x03,0x24,
96137 -0x00,0x00,0x44,0xAC,
96138 -0x10,0x5F,0xE3,0xA0,
96139 -0x10,0x5F,0xE6,0x90,
96140 -0x02,0x80,0x02,0x3C,
96141 -0xD0,0x1B,0xA4,0xAC,
96142 -0x11,0x5F,0x46,0xA0,
96143 -0x08,0x00,0xE0,0x03,
96144 -0x00,0x00,0x00,0x00,
96145 -0x02,0x80,0x05,0x3C,
96146 -0x30,0x1F,0xA5,0x24,
96147 -0xD0,0x1B,0xA4,0x8C,
96148 -0x00,0x70,0x02,0x3C,
96149 -0x27,0x10,0x02,0x00,
96150 -0x24,0x20,0x82,0x00,
96151 -0x41,0xB0,0x03,0x3C,
96152 -0x00,0x00,0x64,0xAC,
96153 -0x08,0x00,0xE0,0x03,
96154 -0xD0,0x1B,0xA4,0xAC,
96155 -0xE0,0xFF,0xBD,0x27,
96156 -0x10,0x00,0xB0,0xAF,
96157 -0x02,0x80,0x10,0x3C,
96158 -0xF4,0x5E,0x02,0x92,
96159 -0x18,0x00,0xB2,0xAF,
96160 -0x14,0x00,0xB1,0xAF,
96161 -0x1C,0x00,0xBF,0xAF,
96162 -0x21,0x90,0x80,0x00,
96163 -0x1C,0x00,0x40,0x10,
96164 -0xFF,0x00,0xB1,0x30,
96165 -0x02,0x80,0x03,0x3C,
96166 -0xDE,0x5D,0x62,0x90,
96167 -0x00,0x00,0x00,0x00,
96168 -0x02,0x00,0x42,0x30,
96169 -0x1C,0x00,0x40,0x14,
96170 -0x00,0x00,0x00,0x00,
96171 -0x00,0x08,0x04,0x24,
96172 -0x00,0x02,0x05,0x3C,
96173 -0xA9,0x45,0x00,0x0C,
96174 -0x01,0x00,0x06,0x24,
96175 -0x02,0x80,0x03,0x3C,
96176 -0xF6,0x5E,0x62,0x90,
96177 -0x00,0x00,0x00,0x00,
96178 -0x0F,0x00,0x42,0x30,
96179 -0x0C,0x00,0x42,0x28,
96180 -0x06,0x00,0x40,0x10,
96181 -0x08,0x00,0x02,0x24,
96182 -0x00,0x00,0x44,0x96,
96183 -0x00,0x00,0x00,0x00,
96184 -0x0C,0x00,0x83,0x30,
96185 -0x1B,0x00,0x62,0x10,
96186 -0x02,0x80,0x02,0x3C,
96187 -0xF4,0x5E,0x02,0x92,
96188 -0x05,0x00,0x03,0x24,
96189 -0xFF,0x00,0x42,0x30,
96190 -0x0B,0x00,0x43,0x10,
96191 -0x02,0x80,0x03,0x3C,
96192 -0x1C,0x00,0xBF,0x8F,
96193 -0x18,0x00,0xB2,0x8F,
96194 -0x14,0x00,0xB1,0x8F,
96195 -0x10,0x00,0xB0,0x8F,
96196 -0x08,0x00,0xE0,0x03,
96197 -0x20,0x00,0xBD,0x27,
96198 -0x9B,0x30,0x00,0x0C,
96199 -0x01,0x00,0x04,0x24,
96200 -0x0C,0x61,0x00,0x08,
96201 -0x00,0x08,0x04,0x24,
96202 -0x0F,0x5F,0x62,0x90,
96203 -0x00,0x00,0x00,0x00,
96204 -0x24,0x10,0x22,0x02,
96205 -0xF2,0xFF,0x40,0x10,
96206 -0x02,0x80,0x03,0x3C,
96207 -0x0E,0x5F,0x62,0x90,
96208 -0x00,0x00,0x00,0x00,
96209 -0x04,0x00,0x42,0x34,
96210 -0x0E,0x5F,0x62,0xA0,
96211 -0x20,0x61,0x00,0x08,
96212 -0x00,0x00,0x00,0x00,
96213 -0x0D,0x5F,0x43,0x90,
96214 -0x00,0x00,0x00,0x00,
96215 -0x03,0x00,0x60,0x14,
96216 -0x00,0x10,0x82,0x34,
96217 -0x1B,0x61,0x00,0x08,
96218 -0x00,0x00,0x42,0xA6,
96219 -0x0C,0x00,0x04,0x24,
96220 -0x64,0x31,0x00,0x0C,
96221 -0x21,0x28,0x00,0x00,
96222 -0x1B,0x61,0x00,0x08,
96223 -0x00,0x00,0x00,0x00,
96224 -0xE8,0xFF,0xBD,0x27,
96225 -0xFF,0x00,0xA5,0x30,
96226 -0x10,0x00,0xB0,0xAF,
96227 -0x14,0x00,0xBF,0xAF,
96228 -0x18,0x00,0xA0,0x14,
96229 -0xFF,0x00,0x90,0x30,
96230 -0x2C,0x00,0x00,0x12,
96231 -0x01,0x00,0x05,0x24,
96232 -0x02,0x80,0x03,0x3C,
96233 -0x01,0x00,0x07,0x24,
96234 -0x0C,0x5F,0x67,0xA0,
96235 -0x02,0x80,0x08,0x3C,
96236 -0x0E,0x5F,0x02,0x91,
96237 -0x02,0x00,0x04,0x24,
96238 -0x21,0x28,0x00,0x00,
96239 -0x02,0x00,0x42,0x34,
96240 -0x00,0xF0,0x06,0x34,
96241 -0x0E,0x5F,0x02,0xA1,
96242 -0x8C,0x23,0x00,0x0C,
96243 -0x00,0x00,0x00,0x00,
96244 -0x14,0x00,0xBF,0x8F,
96245 -0x10,0x00,0xB0,0x8F,
96246 -0x42,0xB0,0x02,0x3C,
96247 -0x44,0x00,0x03,0x24,
96248 -0x03,0x00,0x42,0x34,
96249 -0x18,0x00,0xBD,0x27,
96250 -0x00,0x00,0x43,0xA0,
96251 -0x08,0x00,0xE0,0x03,
96252 -0x00,0x00,0x00,0x00,
96253 -0x01,0x00,0x03,0x24,
96254 -0x02,0x80,0x02,0x3C,
96255 -0x0C,0x5F,0x43,0xA0,
96256 -0x02,0x80,0x02,0x3C,
96257 -0x0F,0x5F,0x43,0x90,
96258 -0x0F,0x00,0x02,0x24,
96259 -0x02,0x80,0x05,0x3C,
96260 -0x0F,0x00,0x63,0x30,
96261 -0x07,0x00,0x62,0x10,
96262 -0x01,0x00,0x04,0x24,
96263 -0x0E,0x5F,0xA2,0x90,
96264 -0x00,0x00,0x00,0x00,
96265 -0x01,0x00,0x42,0x34,
96266 -0x0E,0x5F,0xA2,0xA0,
96267 -0xFE,0x4E,0x00,0x0C,
96268 -0x00,0x00,0x00,0x00,
96269 -0xDB,0xFF,0x00,0x16,
96270 -0x02,0x80,0x03,0x3C,
96271 -0x14,0x00,0xBF,0x8F,
96272 -0x10,0x00,0xB0,0x8F,
96273 -0x08,0x00,0xE0,0x03,
96274 -0x18,0x00,0xBD,0x27,
96275 -0x02,0x80,0x02,0x3C,
96276 -0x0C,0x5F,0x40,0xA0,
96277 -0x02,0x80,0x03,0x3C,
96278 -0xF5,0x5E,0x64,0x90,
96279 -0x14,0x00,0xBF,0x8F,
96280 -0x10,0x00,0xB0,0x8F,
96281 -0xFF,0x00,0x84,0x30,
96282 -0x64,0x31,0x00,0x08,
96283 -0x18,0x00,0xBD,0x27,
96284 -0xE0,0xFF,0xBD,0x27,
96285 -0xFF,0x00,0xA5,0x30,
96286 -0x14,0x00,0xB1,0xAF,
96287 -0x18,0x00,0xBF,0xAF,
96288 -0x10,0x00,0xB0,0xAF,
96289 -0x03,0x00,0xA0,0x14,
96290 -0xFF,0x00,0x91,0x30,
96291 -0x3A,0x00,0x20,0x12,
96292 -0x02,0x80,0x02,0x3C,
96293 -0x02,0x80,0x10,0x3C,
96294 -0x0E,0x5F,0x02,0x92,
96295 -0xFB,0xFF,0x03,0x24,
96296 -0x24,0x10,0x43,0x00,
96297 -0x0E,0x5F,0x02,0xA2,
96298 -0x10,0x00,0xA0,0x14,
96299 -0x02,0x80,0x03,0x3C,
96300 -0x0E,0x5F,0x02,0x92,
96301 -0xFE,0xFF,0x03,0x24,
96302 -0x24,0x10,0x43,0x00,
96303 -0x0E,0x5F,0x02,0xA2,
96304 -0x19,0x00,0x20,0x16,
96305 -0x02,0x80,0x02,0x3C,
96306 -0x0E,0x5F,0x02,0x92,
96307 -0xFD,0xFF,0x03,0x24,
96308 -0x18,0x00,0xBF,0x8F,
96309 -0x24,0x10,0x43,0x00,
96310 -0x0E,0x5F,0x02,0xA2,
96311 -0x14,0x00,0xB1,0x8F,
96312 -0x10,0x00,0xB0,0x8F,
96313 -0x08,0x00,0xE0,0x03,
96314 -0x20,0x00,0xBD,0x27,
96315 -0x01,0x00,0x04,0x24,
96316 -0x0C,0x5F,0x64,0xA0,
96317 -0x0E,0x5F,0x02,0x92,
96318 -0x02,0x80,0x03,0x3C,
96319 -0x01,0x00,0x42,0x34,
96320 -0x0E,0x5F,0x02,0xA2,
96321 -0x0D,0x5F,0x62,0x90,
96322 -0x02,0x00,0x03,0x24,
96323 -0xFF,0x00,0x42,0x30,
96324 -0x23,0x00,0x43,0x10,
96325 -0x00,0x00,0x00,0x00,
96326 -0xFE,0x4E,0x00,0x0C,
96327 -0x01,0x00,0x04,0x24,
96328 -0xE9,0xFF,0x20,0x12,
96329 -0x02,0x80,0x02,0x3C,
96330 -0x01,0x00,0x04,0x24,
96331 -0x0C,0x5F,0x44,0xA0,
96332 -0x0E,0x5F,0x03,0x92,
96333 -0x02,0x00,0x04,0x24,
96334 -0x21,0x28,0x00,0x00,
96335 -0x02,0x00,0x63,0x34,
96336 -0x00,0xF0,0x06,0x34,
96337 -0x0E,0x5F,0x03,0xA2,
96338 -0x8C,0x23,0x00,0x0C,
96339 -0x00,0x00,0x00,0x00,
96340 -0x18,0x00,0xBF,0x8F,
96341 -0x14,0x00,0xB1,0x8F,
96342 -0x10,0x00,0xB0,0x8F,
96343 -0x42,0xB0,0x02,0x3C,
96344 -0x44,0x00,0x03,0x24,
96345 -0x03,0x00,0x42,0x34,
96346 -0x20,0x00,0xBD,0x27,
96347 -0x00,0x00,0x43,0xA0,
96348 -0x08,0x00,0xE0,0x03,
96349 -0x00,0x00,0x00,0x00,
96350 -0x0C,0x5F,0x40,0xA0,
96351 -0x02,0x80,0x03,0x3C,
96352 -0xF5,0x5E,0x64,0x90,
96353 -0x18,0x00,0xBF,0x8F,
96354 -0x14,0x00,0xB1,0x8F,
96355 -0x10,0x00,0xB0,0x8F,
96356 -0x01,0x00,0x05,0x24,
96357 -0xFF,0x00,0x84,0x30,
96358 -0x64,0x31,0x00,0x08,
96359 -0x20,0x00,0xBD,0x27,
96360 -0x0D,0x30,0x00,0x0C,
96361 -0x00,0x00,0x00,0x00,
96362 -0x0C,0x00,0x04,0x24,
96363 -0x64,0x31,0x00,0x0C,
96364 -0x01,0x00,0x05,0x24,
96365 -0x90,0x61,0x00,0x08,
96366 -0x00,0x00,0x00,0x00,
96367 -0xE8,0xFF,0xBD,0x27,
96368 -0x10,0x00,0xB2,0xAF,
96369 -0x0C,0x00,0xB1,0xAF,
96370 -0x08,0x00,0xB0,0xAF,
96371 -0x21,0x40,0xE0,0x00,
96372 -0x21,0x90,0xA0,0x03,
96373 -0x21,0x60,0xC0,0x00,
96374 -0x21,0x78,0x80,0x00,
96375 -0x45,0x00,0xE0,0x14,
96376 -0x21,0x50,0xA0,0x00,
96377 -0x2B,0x10,0xA6,0x00,
96378 -0x78,0x00,0x40,0x10,
96379 -0xFF,0xFF,0x02,0x34,
96380 -0x2B,0x10,0x46,0x00,
96381 -0x8F,0x01,0x40,0x10,
96382 -0x21,0x28,0xC0,0x00,
96383 -0xFF,0x00,0x02,0x3C,
96384 -0xFF,0xFF,0x42,0x34,
96385 -0x10,0x00,0x03,0x24,
96386 -0x2B,0x10,0x46,0x00,
96387 -0x18,0x00,0x04,0x24,
96388 -0x21,0x30,0x60,0x00,
96389 -0x0B,0x30,0x82,0x00,
96390 -0x02,0x80,0x03,0x3C,
96391 -0x06,0x10,0xC5,0x00,
96392 -0xB4,0xF0,0x63,0x24,
96393 -0x21,0x10,0x43,0x00,
96394 -0x00,0x00,0x44,0x90,
96395 -0x20,0x00,0x02,0x24,
96396 -0x21,0x20,0x86,0x00,
96397 -0x23,0x30,0x44,0x00,
96398 -0x08,0x00,0xC0,0x10,
96399 -0x02,0x4C,0x0C,0x00,
96400 -0x23,0x10,0x46,0x00,
96401 -0x06,0x10,0x4F,0x00,
96402 -0x04,0x18,0xCA,0x00,
96403 -0x25,0x50,0x62,0x00,
96404 -0x04,0x60,0xCC,0x00,
96405 -0x04,0x78,0xCF,0x00,
96406 -0x02,0x4C,0x0C,0x00,
96407 -0x1B,0x00,0x49,0x01,
96408 -0x02,0x00,0x20,0x15,
96409 -0x00,0x00,0x00,0x00,
96410 -0x0D,0x00,0x07,0x00,
96411 -0xFF,0xFF,0x87,0x31,
96412 -0x02,0x24,0x0F,0x00,
96413 -0x12,0x18,0x00,0x00,
96414 -0x10,0x28,0x00,0x00,
96415 -0x00,0x14,0x05,0x00,
96416 -0x25,0x28,0x44,0x00,
96417 -0x18,0x00,0x67,0x00,
96418 -0x12,0x58,0x00,0x00,
96419 -0x2B,0x18,0xAB,0x00,
96420 -0x00,0x00,0x00,0x00,
96421 -0x1B,0x00,0x49,0x01,
96422 -0x02,0x00,0x20,0x15,
96423 -0x00,0x00,0x00,0x00,
96424 -0x0D,0x00,0x07,0x00,
96425 -0x08,0x00,0x60,0x10,
96426 -0x00,0x00,0x00,0x00,
96427 -0x21,0x28,0xAC,0x00,
96428 -0x2B,0x10,0xAC,0x00,
96429 -0x04,0x00,0x40,0x14,
96430 -0x2B,0x10,0xAB,0x00,
96431 -0x00,0x00,0x42,0x38,
96432 -0x21,0x18,0xAC,0x00,
96433 -0x0B,0x28,0x62,0x00,
96434 -0x23,0x28,0xAB,0x00,
96435 -0x1B,0x00,0xA9,0x00,
96436 -0x02,0x00,0x20,0x15,
96437 -0x00,0x00,0x00,0x00,
96438 -0x0D,0x00,0x07,0x00,
96439 -0xFF,0xFF,0xE4,0x31,
96440 -0x12,0x18,0x00,0x00,
96441 -0x10,0x40,0x00,0x00,
96442 -0x00,0x00,0x00,0x00,
96443 -0x8F,0x62,0x00,0x08,
96444 -0x18,0x00,0x67,0x00,
96445 -0x2B,0x10,0xA7,0x00,
96446 -0x0A,0x00,0x40,0x10,
96447 -0xFF,0xFF,0x02,0x34,
96448 -0x10,0x00,0xB2,0x8F,
96449 -0x0C,0x00,0xB1,0x8F,
96450 -0x08,0x00,0xB0,0x8F,
96451 -0x21,0x10,0x80,0x00,
96452 -0x21,0x18,0xA0,0x00,
96453 -0x00,0x00,0xA4,0xAF,
96454 -0x04,0x00,0xA5,0xAF,
96455 -0x08,0x00,0xE0,0x03,
96456 -0x18,0x00,0xBD,0x27,
96457 -0x2B,0x10,0x47,0x00,
96458 -0xD2,0x00,0x40,0x10,
96459 -0x00,0x01,0xE3,0x2C,
96460 -0xFF,0x00,0x02,0x3C,
96461 -0x10,0x00,0x03,0x24,
96462 -0xFF,0xFF,0x42,0x34,
96463 -0x2B,0x10,0x47,0x00,
96464 -0x18,0x00,0x04,0x24,
96465 -0x21,0x28,0x60,0x00,
96466 -0x0B,0x28,0x82,0x00,
96467 -0x06,0x10,0xA8,0x00,
96468 -0x02,0x80,0x03,0x3C,
96469 -0xB4,0xF0,0x63,0x24,
96470 -0x21,0x10,0x43,0x00,
96471 -0x00,0x00,0x44,0x90,
96472 -0x20,0x00,0x02,0x24,
96473 -0x21,0x20,0x85,0x00,
96474 -0x23,0x30,0x44,0x00,
96475 -0xCE,0x00,0xC0,0x14,
96476 -0x23,0x38,0x46,0x00,
96477 -0x2B,0x10,0x0A,0x01,
96478 -0x04,0x00,0x40,0x14,
96479 -0x23,0x20,0xEC,0x01,
96480 -0x2B,0x10,0xEC,0x01,
96481 -0x05,0x00,0x40,0x14,
96482 -0x00,0x00,0x00,0x00,
96483 -0x2B,0x10,0xE4,0x01,
96484 -0x23,0x18,0x48,0x01,
96485 -0x23,0x50,0x62,0x00,
96486 -0x21,0x78,0x80,0x00,
96487 -0x04,0x00,0x40,0x12,
96488 -0x21,0xC0,0xE0,0x01,
96489 -0x21,0xC8,0x40,0x01,
96490 -0x00,0x00,0x58,0xAE,
96491 -0x04,0x00,0x59,0xAE,
96492 -0x00,0x00,0xA2,0x8F,
96493 -0x04,0x00,0xA3,0x8F,
96494 -0x10,0x00,0xB2,0x8F,
96495 -0x0C,0x00,0xB1,0x8F,
96496 -0x08,0x00,0xB0,0x8F,
96497 -0x08,0x00,0xE0,0x03,
96498 -0x18,0x00,0xBD,0x27,
96499 -0x53,0x00,0xC0,0x10,
96500 -0x01,0x00,0x02,0x24,
96501 -0xFF,0xFF,0x02,0x34,
96502 -0x2B,0x10,0x4C,0x00,
96503 -0x59,0x00,0x40,0x14,
96504 -0xFF,0x00,0x02,0x3C,
96505 -0x00,0x01,0x83,0x2D,
96506 -0x08,0x00,0x02,0x24,
96507 -0x21,0x28,0x00,0x00,
96508 -0x0A,0x28,0x43,0x00,
96509 -0x06,0x10,0xAC,0x00,
96510 -0x02,0x80,0x03,0x3C,
96511 -0xB4,0xF0,0x63,0x24,
96512 -0x21,0x10,0x43,0x00,
96513 -0x00,0x00,0x44,0x90,
96514 -0x20,0x00,0x02,0x24,
96515 -0x21,0x20,0x85,0x00,
96516 -0x23,0x30,0x44,0x00,
96517 -0x5B,0x00,0xC0,0x14,
96518 -0x00,0x00,0x00,0x00,
96519 -0x23,0x50,0x4C,0x01,
96520 -0x02,0x4C,0x0C,0x00,
96521 -0xFF,0xFF,0x8D,0x31,
96522 -0x1B,0x00,0x49,0x01,
96523 -0x02,0x00,0x20,0x15,
96524 -0x00,0x00,0x00,0x00,
96525 -0x0D,0x00,0x07,0x00,
96526 -0x02,0x24,0x0F,0x00,
96527 -0x12,0x18,0x00,0x00,
96528 -0x10,0x28,0x00,0x00,
96529 -0x00,0x14,0x05,0x00,
96530 -0x25,0x28,0x44,0x00,
96531 -0x18,0x00,0x6D,0x00,
96532 -0x12,0x58,0x00,0x00,
96533 -0x2B,0x18,0xAB,0x00,
96534 -0x00,0x00,0x00,0x00,
96535 -0x1B,0x00,0x49,0x01,
96536 -0x02,0x00,0x20,0x15,
96537 -0x00,0x00,0x00,0x00,
96538 -0x0D,0x00,0x07,0x00,
96539 -0x08,0x00,0x60,0x10,
96540 -0x00,0x00,0x00,0x00,
96541 -0x21,0x28,0xAC,0x00,
96542 -0x2B,0x10,0xAC,0x00,
96543 -0x04,0x00,0x40,0x14,
96544 -0x2B,0x10,0xAB,0x00,
96545 -0x00,0x00,0x42,0x38,
96546 -0x21,0x18,0xAC,0x00,
96547 -0x0B,0x28,0x62,0x00,
96548 -0x23,0x28,0xAB,0x00,
96549 -0x1B,0x00,0xA9,0x00,
96550 -0x02,0x00,0x20,0x15,
96551 -0x00,0x00,0x00,0x00,
96552 -0x0D,0x00,0x07,0x00,
96553 -0xFF,0xFF,0xE4,0x31,
96554 -0x12,0x18,0x00,0x00,
96555 -0x10,0x40,0x00,0x00,
96556 -0x00,0x00,0x00,0x00,
96557 -0x00,0x00,0x00,0x00,
96558 -0x18,0x00,0x6D,0x00,
96559 -0x00,0x14,0x08,0x00,
96560 -0x12,0x58,0x00,0x00,
96561 -0x25,0x40,0x44,0x00,
96562 -0x2B,0x18,0x0B,0x01,
96563 -0x1B,0x00,0xA9,0x00,
96564 -0x02,0x00,0x20,0x15,
96565 -0x00,0x00,0x00,0x00,
96566 -0x0D,0x00,0x07,0x00,
96567 -0x08,0x00,0x60,0x10,
96568 -0x00,0x00,0x00,0x00,
96569 -0x21,0x40,0x0C,0x01,
96570 -0x2B,0x10,0x0C,0x01,
96571 -0x04,0x00,0x40,0x14,
96572 -0x2B,0x10,0x0B,0x01,
96573 -0x21,0x18,0x0C,0x01,
96574 -0x00,0x00,0x42,0x38,
96575 -0x0B,0x40,0x62,0x00,
96576 -0xAB,0xFF,0x40,0x12,
96577 -0x23,0x78,0x0B,0x01,
96578 -0x06,0xC0,0xCF,0x00,
96579 -0x21,0xC8,0x00,0x00,
96580 -0x00,0x00,0x58,0xAE,
96581 -0x4C,0x62,0x00,0x08,
96582 -0x04,0x00,0x59,0xAE,
96583 -0x1B,0x00,0x47,0x00,
96584 -0x02,0x00,0xE0,0x14,
96585 -0x00,0x00,0x00,0x00,
96586 -0x0D,0x00,0x07,0x00,
96587 -0xFF,0xFF,0x02,0x34,
96588 -0x12,0x60,0x00,0x00,
96589 -0x2B,0x10,0x4C,0x00,
96590 -0xAB,0xFF,0x40,0x10,
96591 -0x00,0x01,0x83,0x2D,
96592 -0xFF,0x00,0x02,0x3C,
96593 -0x10,0x00,0x03,0x24,
96594 -0xFF,0xFF,0x42,0x34,
96595 -0x2B,0x10,0x4C,0x00,
96596 -0x18,0x00,0x04,0x24,
96597 -0x21,0x28,0x60,0x00,
96598 -0x0B,0x28,0x82,0x00,
96599 -0x02,0x80,0x03,0x3C,
96600 -0x06,0x10,0xAC,0x00,
96601 -0xB4,0xF0,0x63,0x24,
96602 -0x21,0x10,0x43,0x00,
96603 -0x00,0x00,0x44,0x90,
96604 -0x20,0x00,0x02,0x24,
96605 -0x21,0x20,0x85,0x00,
96606 -0x23,0x30,0x44,0x00,
96607 -0xA7,0xFF,0xC0,0x10,
96608 -0x00,0x00,0x00,0x00,
96609 -0x23,0x38,0x46,0x00,
96610 -0x04,0x60,0xCC,0x00,
96611 -0x06,0x58,0xEA,0x00,
96612 -0x02,0x4C,0x0C,0x00,
96613 -0x1B,0x00,0x69,0x01,
96614 -0x02,0x00,0x20,0x15,
96615 -0x00,0x00,0x00,0x00,
96616 -0x0D,0x00,0x07,0x00,
96617 -0xFF,0xFF,0x8D,0x31,
96618 -0x06,0x18,0xEF,0x00,
96619 -0x04,0x10,0xCA,0x00,
96620 -0x25,0x50,0x43,0x00,
96621 -0x02,0x24,0x0A,0x00,
96622 -0x12,0x28,0x00,0x00,
96623 -0x10,0x40,0x00,0x00,
96624 -0x00,0x14,0x08,0x00,
96625 -0x25,0x40,0x44,0x00,
96626 -0x18,0x00,0xAD,0x00,
96627 -0x12,0x28,0x00,0x00,
96628 -0x2B,0x18,0x05,0x01,
96629 -0x00,0x00,0x00,0x00,
96630 -0x1B,0x00,0x69,0x01,
96631 -0x02,0x00,0x20,0x15,
96632 -0x00,0x00,0x00,0x00,
96633 -0x0D,0x00,0x07,0x00,
96634 -0x05,0x00,0x60,0x10,
96635 -0x04,0x78,0xCF,0x00,
96636 -0x21,0x40,0x0C,0x01,
96637 -0x2B,0x10,0x0C,0x01,
96638 -0x93,0x00,0x40,0x10,
96639 -0x2B,0x10,0x05,0x01,
96640 -0x23,0x40,0x05,0x01,
96641 -0x1B,0x00,0x09,0x01,
96642 -0x02,0x00,0x20,0x15,
96643 -0x00,0x00,0x00,0x00,
96644 -0x0D,0x00,0x07,0x00,
96645 -0xFF,0xFF,0x44,0x31,
96646 -0x12,0x18,0x00,0x00,
96647 -0x10,0x58,0x00,0x00,
96648 -0x00,0x14,0x0B,0x00,
96649 -0x25,0x58,0x44,0x00,
96650 -0x18,0x00,0x6D,0x00,
96651 -0x12,0x28,0x00,0x00,
96652 -0x2B,0x18,0x65,0x01,
96653 -0x00,0x00,0x00,0x00,
96654 -0x1B,0x00,0x09,0x01,
96655 -0x02,0x00,0x20,0x15,
96656 -0x00,0x00,0x00,0x00,
96657 -0x0D,0x00,0x07,0x00,
96658 -0x77,0xFF,0x60,0x10,
96659 -0x23,0x50,0x65,0x01,
96660 -0x21,0x58,0x6C,0x01,
96661 -0x2B,0x10,0x6C,0x01,
96662 -0x04,0x00,0x40,0x14,
96663 -0x2B,0x10,0x65,0x01,
96664 -0x00,0x00,0x42,0x38,
96665 -0x21,0x18,0x6C,0x01,
96666 -0x0B,0x58,0x62,0x00,
96667 -0x6A,0x62,0x00,0x08,
96668 -0x23,0x50,0x65,0x01,
96669 -0x08,0x00,0x02,0x24,
96670 -0x21,0x28,0x00,0x00,
96671 -0x0A,0x28,0x43,0x00,
96672 -0x02,0x80,0x03,0x3C,
96673 -0x06,0x10,0xA8,0x00,
96674 -0xB4,0xF0,0x63,0x24,
96675 -0x21,0x10,0x43,0x00,
96676 -0x00,0x00,0x44,0x90,
96677 -0x20,0x00,0x02,0x24,
96678 -0x21,0x20,0x85,0x00,
96679 -0x23,0x30,0x44,0x00,
96680 -0x34,0xFF,0xC0,0x10,
96681 -0x23,0x38,0x46,0x00,
96682 -0x06,0x10,0xEC,0x00,
96683 -0x04,0x18,0xC8,0x00,
96684 -0x25,0x40,0x62,0x00,
96685 -0x06,0x58,0xEA,0x00,
96686 -0x02,0x6C,0x08,0x00,
96687 -0x1B,0x00,0x6D,0x01,
96688 -0x02,0x00,0xA0,0x15,
96689 -0x00,0x00,0x00,0x00,
96690 -0x0D,0x00,0x07,0x00,
96691 -0xFF,0xFF,0x11,0x31,
96692 -0x06,0x10,0xEF,0x00,
96693 -0x04,0x18,0xCA,0x00,
96694 -0x25,0x50,0x62,0x00,
96695 -0x02,0x24,0x0A,0x00,
96696 -0x04,0x60,0xCC,0x00,
96697 -0x12,0x80,0x00,0x00,
96698 -0x10,0x48,0x00,0x00,
96699 -0x00,0x14,0x09,0x00,
96700 -0x25,0x48,0x44,0x00,
96701 -0x12,0x28,0x00,0x00,
96702 -0x00,0x00,0x00,0x00,
96703 -0x00,0x00,0x00,0x00,
96704 -0x18,0x00,0x11,0x02,
96705 -0x12,0x70,0x00,0x00,
96706 -0x2B,0x18,0x2E,0x01,
96707 -0x00,0x00,0x00,0x00,
96708 -0x1B,0x00,0x6D,0x01,
96709 -0x02,0x00,0xA0,0x15,
96710 -0x00,0x00,0x00,0x00,
96711 -0x0D,0x00,0x07,0x00,
96712 -0x0A,0x00,0x60,0x10,
96713 -0x04,0x78,0xCF,0x00,
96714 -0x21,0x48,0x28,0x01,
96715 -0x2B,0x10,0x28,0x01,
96716 -0x06,0x00,0x40,0x14,
96717 -0xFF,0xFF,0xB0,0x24,
96718 -0x2B,0x10,0x2E,0x01,
96719 -0x03,0x00,0x40,0x10,
96720 -0x00,0x00,0x00,0x00,
96721 -0xFF,0xFF,0x10,0x26,
96722 -0x21,0x48,0x28,0x01,
96723 -0x23,0x48,0x2E,0x01,
96724 -0x1B,0x00,0x2D,0x01,
96725 -0x02,0x00,0xA0,0x15,
96726 -0x00,0x00,0x00,0x00,
96727 -0x0D,0x00,0x07,0x00,
96728 -0xFF,0xFF,0x44,0x31,
96729 -0x12,0x28,0x00,0x00,
96730 -0x10,0x58,0x00,0x00,
96731 -0x00,0x14,0x0B,0x00,
96732 -0x25,0x58,0x44,0x00,
96733 -0x18,0x00,0xB1,0x00,
96734 -0x12,0x70,0x00,0x00,
96735 -0x2B,0x18,0x6E,0x01,
96736 -0x00,0x00,0x00,0x00,
96737 -0x1B,0x00,0x2D,0x01,
96738 -0x02,0x00,0xA0,0x15,
96739 -0x00,0x00,0x00,0x00,
96740 -0x0D,0x00,0x07,0x00,
96741 -0x0B,0x00,0x60,0x10,
96742 -0x00,0x14,0x10,0x00,
96743 -0x21,0x58,0x68,0x01,
96744 -0x2B,0x10,0x68,0x01,
96745 -0x06,0x00,0x40,0x14,
96746 -0xFF,0xFF,0xA5,0x24,
96747 -0x2B,0x10,0x6E,0x01,
96748 -0x04,0x00,0x40,0x10,
96749 -0x00,0x14,0x10,0x00,
96750 -0xFF,0xFF,0xA5,0x24,
96751 -0x21,0x58,0x68,0x01,
96752 -0x00,0x14,0x10,0x00,
96753 -0x25,0x10,0x45,0x00,
96754 -0x23,0x58,0x6E,0x01,
96755 -0x19,0x00,0x4C,0x00,
96756 -0x10,0x28,0x00,0x00,
96757 -0x2B,0x18,0x65,0x01,
96758 -0x12,0x48,0x00,0x00,
96759 -0x05,0x00,0x60,0x14,
96760 -0x23,0x20,0x2C,0x01,
96761 -0x07,0x00,0xAB,0x14,
96762 -0x2B,0x10,0xE9,0x01,
96763 -0x05,0x00,0x40,0x10,
96764 -0x00,0x00,0x00,0x00,
96765 -0x2B,0x10,0x24,0x01,
96766 -0x23,0x18,0xA8,0x00,
96767 -0x23,0x28,0x62,0x00,
96768 -0x21,0x48,0x80,0x00,
96769 -0xEA,0xFE,0x40,0x12,
96770 -0x23,0x18,0xE9,0x01,
96771 -0x23,0x20,0x65,0x01,
96772 -0x2B,0x10,0xE3,0x01,
96773 -0x23,0x50,0x82,0x00,
96774 -0x04,0x28,0xEA,0x00,
96775 -0x06,0x18,0xC3,0x00,
96776 -0x25,0xC0,0xA3,0x00,
96777 -0x06,0xC8,0xCA,0x00,
96778 -0x00,0x00,0x58,0xAE,
96779 -0x4C,0x62,0x00,0x08,
96780 -0x04,0x00,0x59,0xAE,
96781 -0x00,0x01,0xC3,0x2C,
96782 -0x08,0x00,0x02,0x24,
96783 -0x21,0x30,0x00,0x00,
96784 -0xE6,0x61,0x00,0x08,
96785 -0x0A,0x30,0x43,0x00,
96786 -0x00,0x00,0x42,0x38,
96787 -0x21,0x18,0x0C,0x01,
96788 -0xE0,0x62,0x00,0x08,
96789 -0x0B,0x40,0x62,0x00,
96790 -0x25,0xB0,0x02,0x3C,
96791 -0xFF,0x00,0x03,0x3C,
96792 -0xEC,0x02,0x42,0x34,
96793 -0x00,0x00,0x43,0xAC,
96794 -0x08,0x00,0xE0,0x03,
96795 -0x00,0x00,0x00,0x00,
96796 -0x02,0x80,0x03,0x3C,
96797 -0x25,0xB0,0x02,0x3C,
96798 -0xF0,0x8D,0x63,0x24,
96799 -0x18,0x03,0x42,0x34,
96800 -0x00,0x00,0x43,0xAC,
96801 -0x08,0x00,0xE0,0x03,
96802 -0x00,0x00,0x00,0x00,
96803 -0x7F,0x00,0x02,0x3C,
96804 -0x0D,0xB8,0x44,0x34,
96805 -0x80,0x04,0x03,0x3C,
96806 -0x25,0x20,0x83,0x00,
96807 -0x00,0x08,0x02,0x3C,
96808 -0x25,0x20,0x82,0x00,
96809 -0x00,0x30,0x03,0x3C,
96810 -0x02,0x80,0x02,0x3C,
96811 -0x30,0x1F,0x42,0x24,
96812 -0x25,0x20,0x83,0x00,
96813 -0x41,0xB0,0x03,0x3C,
96814 -0x00,0x00,0x64,0xAC,
96815 -0xD8,0x1B,0x44,0xAC,
96816 -0xD0,0x1B,0x44,0xAC,
96817 -0x08,0x00,0x63,0x34,
96818 -0x86,0x00,0x04,0x24,
96819 -0x00,0x00,0x64,0xA4,
96820 -0xDC,0x1B,0x44,0xA4,
96821 -0xD4,0x1B,0x40,0xAC,
96822 -0xDE,0x1B,0x40,0xA4,
96823 -0x08,0x00,0xE0,0x03,
96824 -0xE0,0x1B,0x44,0xA4,
96825 -0x99,0x63,0x00,0x08,
96826 -0x00,0x00,0x00,0x00,
96827 -0x42,0xB0,0x03,0x3C,
96828 -0x01,0x00,0x63,0x34,
96829 -0x02,0x00,0x02,0x24,
96830 -0xE8,0xFF,0xBD,0x27,
96831 -0x00,0x00,0x62,0xA0,
96832 -0x10,0x00,0xBF,0xAF,
96833 -0xDF,0x2F,0x00,0x0C,
96834 -0x00,0x00,0x00,0x00,
96835 -0x21,0x20,0x00,0x00,
96836 -0x01,0x00,0x05,0x24,
96837 -0x8C,0x23,0x00,0x0C,
96838 -0x00,0x50,0x06,0x24,
96839 -0x1F,0x00,0x06,0x3C,
96840 -0x10,0x00,0xBF,0x8F,
96841 -0x00,0x40,0xC6,0x34,
96842 -0x03,0x00,0x04,0x24,
96843 -0x01,0x00,0x05,0x24,
96844 -0x8C,0x23,0x00,0x08,
96845 -0x18,0x00,0xBD,0x27,
96846 -0x25,0xB0,0x03,0x3C,
96847 -0x02,0x80,0x02,0x3C,
96848 -0xC8,0xFF,0xBD,0x27,
96849 -0x18,0x03,0x64,0x34,
96850 -0xB8,0x8E,0x42,0x24,
96851 -0x00,0x00,0x82,0xAC,
96852 -0x30,0x00,0xBE,0xAF,
96853 -0x2C,0x00,0xB7,0xAF,
96854 -0x28,0x00,0xB6,0xAF,
96855 -0x24,0x00,0xB5,0xAF,
96856 -0x20,0x00,0xB4,0xAF,
96857 -0x1C,0x00,0xB3,0xAF,
96858 -0x18,0x00,0xB2,0xAF,
96859 -0x14,0x00,0xB1,0xAF,
96860 -0x10,0x00,0xB0,0xAF,
96861 -0x34,0x00,0xBF,0xAF,
96862 -0xB6,0x00,0x63,0x34,
96863 -0x00,0x00,0x62,0x90,
96864 -0x02,0x80,0x03,0x3C,
96865 -0x30,0x1F,0x70,0x24,
96866 -0xAB,0x1B,0x02,0xA2,
96867 -0x28,0x6B,0x00,0x0C,
96868 -0x7A,0x36,0x00,0xA2,
96869 -0x48,0x01,0x03,0x24,
96870 -0x84,0x36,0x03,0xAE,
96871 -0x80,0x36,0x03,0xAE,
96872 -0xFD,0xFF,0x02,0x3C,
96873 -0xFB,0xFF,0x03,0x3C,
96874 -0x21,0x98,0x00,0x02,
96875 -0x21,0xA0,0x00,0x02,
96876 -0xFF,0xFF,0x55,0x34,
96877 -0xFF,0xFF,0x76,0x34,
96878 -0x21,0x88,0x00,0x00,
96879 -0x02,0x80,0x1E,0x3C,
96880 -0x02,0x80,0x17,0x3C,
96881 -0x21,0x90,0x00,0x02,
96882 -0x80,0x10,0x11,0x00,
96883 -0x21,0x10,0x51,0x00,
96884 -0xC0,0x10,0x02,0x00,
96885 -0x21,0x10,0x53,0x00,
96886 -0xE8,0x1D,0x42,0x24,
96887 -0x07,0x00,0x03,0x24,
96888 -0xFF,0xFF,0x63,0x24,
96889 -0x00,0x00,0x40,0xA4,
96890 -0xFD,0xFF,0x61,0x04,
96891 -0x02,0x00,0x42,0x24,
96892 -0xC0,0x80,0x11,0x00,
96893 -0x18,0x42,0xC4,0x27,
96894 -0x21,0x20,0x04,0x02,
96895 -0x21,0x28,0x00,0x00,
96896 -0x02,0x00,0x06,0x24,
96897 -0xF8,0x1D,0x40,0xA6,
96898 -0x08,0x52,0x00,0x0C,
96899 -0xFA,0x1D,0x40,0xA2,
96900 -0x21,0x20,0x13,0x02,
96901 -0xE8,0x22,0x83,0x8C,
96902 -0xEA,0x5D,0xE7,0x92,
96903 -0xBF,0xFF,0x02,0x24,
96904 -0x24,0x28,0x62,0x00,
96905 -0x01,0x00,0x02,0x24,
96906 -0x63,0x00,0xE2,0x10,
96907 -0x80,0x07,0xA6,0x34,
96908 -0xFF,0xF7,0x03,0x24,
96909 -0x24,0x10,0xC3,0x00,
96910 -0xFF,0xEF,0x03,0x24,
96911 -0x24,0x10,0x43,0x00,
96912 -0xE8,0x22,0x82,0xAC,
96913 -0x21,0x30,0x14,0x02,
96914 -0xE8,0x22,0xC4,0x8C,
96915 -0xE7,0xFF,0x02,0x3C,
96916 -0xFF,0xFF,0x42,0x34,
96917 -0x24,0x20,0x95,0x00,
96918 -0x24,0x20,0x96,0x00,
96919 -0xFF,0xFD,0x03,0x3C,
96920 -0x24,0x20,0x82,0x00,
96921 -0xFF,0xFF,0x63,0x34,
96922 -0xFF,0xFB,0x02,0x3C,
96923 -0x24,0x20,0x83,0x00,
96924 -0xEC,0x22,0xC5,0x8C,
96925 -0xFF,0xFF,0x42,0x34,
96926 -0xFF,0xE7,0x03,0x3C,
96927 -0x24,0x20,0x82,0x00,
96928 -0xFF,0xFF,0x63,0x34,
96929 -0xFF,0xFF,0x02,0x3C,
96930 -0x24,0x20,0x83,0x00,
96931 -0xFF,0x7F,0x42,0x34,
96932 -0xC0,0xFF,0x03,0x24,
96933 -0x24,0x28,0xA2,0x00,
96934 -0x24,0x20,0x83,0x00,
96935 -0x1F,0x00,0x02,0x3C,
96936 -0x01,0x00,0x31,0x26,
96937 -0x25,0x28,0xA2,0x00,
96938 -0x08,0x00,0x84,0x34,
96939 -0x20,0x00,0x22,0x2A,
96940 -0xE8,0x22,0xC4,0xAC,
96941 -0xEC,0x22,0xC5,0xAC,
96942 -0xC3,0xFF,0x40,0x14,
96943 -0x28,0x00,0x52,0x26,
96944 -0x25,0xB0,0x02,0x3C,
96945 -0x10,0x00,0x03,0x24,
96946 -0xB0,0x03,0x42,0x34,
96947 -0x02,0x80,0x04,0x3C,
96948 -0x00,0x00,0x43,0xAC,
96949 -0x58,0x22,0x84,0x24,
96950 -0x21,0x28,0x00,0x00,
96951 -0x08,0x52,0x00,0x0C,
96952 -0x20,0x00,0x06,0x24,
96953 -0x02,0x80,0x02,0x3C,
96954 -0xE9,0x5D,0x43,0x90,
96955 -0x00,0x00,0x00,0x00,
96956 -0x3A,0x00,0x60,0x10,
96957 -0x02,0x80,0x02,0x3C,
96958 -0x30,0x1F,0x50,0x24,
96959 -0x24,0x03,0x00,0xA2,
96960 -0x38,0x70,0x00,0x0C,
96961 -0x25,0x03,0x00,0xA2,
96962 -0x02,0x80,0x09,0x3C,
96963 -0x64,0x57,0x22,0x25,
96964 -0x02,0x80,0x0A,0x3C,
96965 -0x02,0x80,0x0B,0x3C,
96966 -0x02,0x80,0x0C,0x3C,
96967 -0x02,0x80,0x0D,0x3C,
96968 -0x02,0x80,0x0E,0x3C,
96969 -0x02,0x80,0x0F,0x3C,
96970 -0x04,0x00,0x42,0xAC,
96971 -0x64,0x57,0x22,0xAD,
96972 -0x6C,0x57,0x43,0x25,
96973 -0x74,0x57,0x64,0x25,
96974 -0x7C,0x57,0x85,0x25,
96975 -0x84,0x57,0xA6,0x25,
96976 -0x8C,0x57,0xC7,0x25,
96977 -0x94,0x57,0xE8,0x25,
96978 -0x09,0x00,0x02,0x24,
96979 -0x04,0x00,0x63,0xAC,
96980 -0x6C,0x57,0x43,0xAD,
96981 -0x04,0x00,0x84,0xAC,
96982 -0x74,0x57,0x64,0xAD,
96983 -0x04,0x00,0xA5,0xAC,
96984 -0x7C,0x57,0x85,0xAD,
96985 -0x04,0x00,0xC6,0xAC,
96986 -0x84,0x57,0xA6,0xAD,
96987 -0x04,0x00,0xE7,0xAC,
96988 -0x8C,0x57,0xC7,0xAD,
96989 -0x94,0x57,0xE8,0xAD,
96990 -0x04,0x00,0x08,0xAD,
96991 -0x34,0x00,0xBF,0x8F,
96992 -0x0C,0x3E,0x02,0xA2,
96993 -0x32,0x3B,0x00,0xA6,
96994 -0x8E,0x3E,0x00,0xA2,
96995 -0x30,0x00,0xBE,0x8F,
96996 -0x2C,0x00,0xB7,0x8F,
96997 -0x28,0x00,0xB6,0x8F,
96998 -0x24,0x00,0xB5,0x8F,
96999 -0x20,0x00,0xB4,0x8F,
97000 -0x1C,0x00,0xB3,0x8F,
97001 -0x18,0x00,0xB2,0x8F,
97002 -0x14,0x00,0xB1,0x8F,
97003 -0x10,0x00,0xB0,0x8F,
97004 -0x08,0x00,0xE0,0x03,
97005 -0x38,0x00,0xBD,0x27,
97006 -0x02,0x80,0x02,0x3C,
97007 -0xEB,0x5D,0x43,0x90,
97008 -0x00,0x00,0x00,0x00,
97009 -0x9C,0xFF,0x67,0x14,
97010 -0x80,0x0F,0xA2,0x34,
97011 -0xFF,0xF7,0x03,0x24,
97012 -0x24,0x10,0xC3,0x00,
97013 -0xF0,0x63,0x00,0x08,
97014 -0x00,0x10,0x42,0x34,
97015 -0xFA,0x6B,0x00,0x0C,
97016 -0x00,0x00,0x00,0x00,
97017 -0x50,0x6E,0x00,0x0C,
97018 -0x30,0x38,0x80,0xAE,
97019 -0x6E,0x6F,0x00,0x0C,
97020 -0x00,0x00,0x00,0x00,
97021 -0x02,0x80,0x03,0x3C,
97022 -0xDE,0x5D,0x64,0x90,
97023 -0x92,0x00,0x02,0x24,
97024 -0x03,0x00,0x82,0x10,
97025 -0x00,0x00,0x00,0x00,
97026 -0xCA,0x6F,0x00,0x0C,
97027 -0x00,0x00,0x00,0x00,
97028 -0xB0,0x6F,0x00,0x0C,
97029 -0x00,0x00,0x00,0x00,
97030 -0x6A,0x6E,0x00,0x0C,
97031 -0x00,0x00,0x00,0x00,
97032 -0x01,0x00,0x03,0x24,
97033 -0x8A,0x36,0x83,0xA6,
97034 -0x1E,0x70,0x00,0x0C,
97035 -0x88,0x36,0x80,0xA6,
97036 -0x1E,0x64,0x00,0x08,
97037 -0x02,0x80,0x02,0x3C,
97038 -0x02,0x80,0x03,0x3C,
97039 -0x25,0xB0,0x02,0x3C,
97040 -0xC8,0xFF,0xBD,0x27,
97041 -0xB8,0x91,0x63,0x24,
97042 -0x18,0x03,0x42,0x34,
97043 -0x18,0x00,0xB0,0xAF,
97044 -0x34,0x00,0xBF,0xAF,
97045 -0x30,0x00,0xB6,0xAF,
97046 -0x2C,0x00,0xB5,0xAF,
97047 -0x28,0x00,0xB4,0xAF,
97048 -0x24,0x00,0xB3,0xAF,
97049 -0x20,0x00,0xB2,0xAF,
97050 -0x1C,0x00,0xB1,0xAF,
97051 -0x00,0x00,0x43,0xAC,
97052 -0x21,0x80,0x00,0x00,
97053 -0x01,0x00,0x02,0x26,
97054 -0xFF,0xFF,0x50,0x30,
97055 -0x64,0x00,0x03,0x2E,
97056 -0xFD,0xFF,0x60,0x14,
97057 -0x01,0x00,0x02,0x26,
97058 -0x02,0x80,0x03,0x3C,
97059 -0xDB,0x5D,0x68,0x90,
97060 -0x02,0x80,0x02,0x3C,
97061 -0x02,0x80,0x03,0x3C,
97062 -0xD8,0x5D,0x4B,0x94,
97063 -0xF3,0x5D,0x6A,0x90,
97064 -0x02,0x80,0x02,0x3C,
97065 -0x02,0x80,0x03,0x3C,
97066 -0x02,0x80,0x14,0x3C,
97067 -0xFA,0x5D,0x67,0x90,
97068 -0xE8,0x5D,0x49,0x90,
97069 -0xDA,0x5D,0x83,0x92,
97070 -0x02,0x80,0x0C,0x3C,
97071 -0x02,0x80,0x02,0x3C,
97072 -0xF5,0x5D,0x46,0x90,
97073 -0xF8,0x5D,0x85,0x91,
97074 -0x25,0xB0,0x04,0x3C,
97075 -0xB0,0x03,0x82,0x34,
97076 -0x00,0x00,0x4B,0xAC,
97077 -0x00,0x00,0x48,0xAC,
97078 -0x00,0x00,0x49,0xAC,
97079 -0x00,0x00,0x43,0xAC,
97080 -0x02,0x80,0x03,0x3C,
97081 -0x00,0x00,0x4A,0xAC,
97082 -0x0A,0x00,0x88,0x34,
97083 -0x00,0x00,0x46,0xAC,
97084 -0x00,0x00,0x45,0xAC,
97085 -0x00,0x00,0x47,0xAC,
97086 -0x1A,0x5E,0x60,0xA4,
97087 -0x00,0x00,0x06,0x91,
97088 -0x02,0x80,0x02,0x3C,
97089 -0x0B,0x00,0x04,0x24,
97090 -0x02,0x80,0x16,0x3C,
97091 -0xE5,0x5D,0x44,0xA0,
97092 -0x02,0x80,0x02,0x3C,
97093 -0x30,0x1F,0xC5,0x26,
97094 -0x00,0x78,0x03,0x24,
97095 -0x08,0x5E,0x40,0xA0,
97096 -0xF0,0xFF,0x02,0x24,
97097 -0x01,0x00,0x07,0x24,
97098 -0x02,0x80,0x15,0x3C,
97099 -0xAC,0x1B,0xA3,0xA4,
97100 -0xAA,0x1B,0xA2,0xA0,
97101 -0xFF,0x07,0x03,0x24,
97102 -0xFF,0xFF,0x02,0x24,
97103 -0x20,0x00,0xC6,0x30,
97104 -0xF8,0x5D,0x87,0xA1,
97105 -0xA8,0x1B,0xA7,0xA0,
97106 -0xAE,0x1B,0xA3,0xA4,
97107 -0x48,0xF3,0xA2,0xA2,
97108 -0xB1,0x00,0xC0,0x10,
97109 -0xB0,0x1B,0xA0,0xA4,
97110 -0x00,0x00,0x02,0x91,
97111 -0x00,0x00,0x00,0x00,
97112 -0x10,0x00,0x42,0x30,
97113 -0xFB,0x00,0x40,0x14,
97114 -0x02,0x80,0x13,0x3C,
97115 -0x21,0x80,0x00,0x00,
97116 -0x21,0x88,0x00,0x00,
97117 -0xB8,0xF1,0x72,0x26,
97118 -0xFF,0x00,0x24,0x32,
97119 -0x61,0x57,0x00,0x0C,
97120 -0x21,0x28,0x12,0x02,
97121 -0x08,0x00,0x03,0x26,
97122 -0xFF,0xFF,0x70,0x30,
97123 -0x01,0x00,0x22,0x26,
97124 -0x80,0x00,0x03,0x2E,
97125 -0xF8,0xFF,0x60,0x14,
97126 -0xFF,0xFF,0x51,0x30,
97127 -0xDA,0x5D,0x83,0x92,
97128 -0x00,0x00,0x00,0x00,
97129 -0x02,0x00,0x62,0x30,
97130 -0xC1,0x00,0x40,0x14,
97131 -0x04,0x00,0x62,0x30,
97132 -0x9A,0x00,0x40,0x10,
97133 -0x25,0xB0,0x03,0x3C,
97134 -0x25,0xB0,0x04,0x3C,
97135 -0x02,0x80,0x05,0x3C,
97136 -0x06,0x00,0x06,0x24,
97137 -0x50,0x00,0x84,0x34,
97138 -0x10,0x52,0x00,0x0C,
97139 -0x07,0xF2,0xA5,0x24,
97140 -0xB8,0xF1,0x63,0x26,
97141 -0x7B,0x00,0x66,0x90,
97142 -0x00,0x00,0x00,0x00,
97143 -0x02,0x00,0xC2,0x2C,
97144 -0x04,0x00,0x40,0x14,
97145 -0x02,0x00,0x0B,0x24,
97146 -0x79,0x00,0x62,0x90,
97147 -0x00,0x00,0x00,0x00,
97148 -0x03,0x00,0x4B,0x30,
97149 -0x04,0x00,0xC2,0x2C,
97150 -0xDC,0x00,0x40,0x10,
97151 -0xB8,0xF1,0x62,0x26,
97152 -0x02,0x80,0x02,0x3C,
97153 -0x4A,0xF3,0x40,0xA0,
97154 -0x02,0x80,0x02,0x3C,
97155 -0xE7,0x5D,0x43,0x90,
97156 -0x01,0x00,0x02,0x24,
97157 -0x02,0x00,0x62,0x10,
97158 -0xFC,0xFF,0x08,0x24,
97159 -0x21,0x40,0x00,0x00,
97160 -0x02,0x80,0x02,0x3C,
97161 -0x02,0x80,0x03,0x3C,
97162 -0xB8,0xF1,0x4A,0x24,
97163 -0x30,0x1F,0x69,0x24,
97164 -0x21,0x60,0x00,0x00,
97165 -0x21,0x80,0x00,0x00,
97166 -0x01,0x00,0x02,0x26,
97167 -0x21,0x30,0x30,0x01,
97168 -0x03,0x00,0x03,0x2E,
97169 -0x08,0x00,0x04,0x2E,
97170 -0xFF,0xFF,0x50,0x30,
97171 -0x0E,0x00,0x07,0x2E,
97172 -0x04,0x00,0x60,0x14,
97173 -0x21,0x88,0x00,0x00,
97174 -0x01,0x00,0x11,0x24,
97175 -0x02,0x00,0x02,0x24,
97176 -0x0A,0x88,0x44,0x00,
97177 -0x21,0x10,0x51,0x01,
97178 -0x61,0x00,0x43,0x90,
97179 -0x55,0x00,0x44,0x90,
97180 -0x5B,0x00,0x45,0x90,
97181 -0x21,0x18,0x03,0x01,
97182 -0x21,0x20,0x04,0x01,
97183 -0x21,0x28,0x05,0x01,
97184 -0x9C,0x1D,0xC3,0xA0,
97185 -0x64,0x1D,0xC4,0xA0,
97186 -0xEB,0xFF,0xE0,0x14,
97187 -0x80,0x1D,0xC5,0xA0,
97188 -0x01,0x00,0x8C,0x25,
97189 -0x02,0x00,0x82,0x2D,
97190 -0x0E,0x00,0x29,0x25,
97191 -0xE5,0xFF,0x40,0x14,
97192 -0x03,0x00,0x4A,0x25,
97193 -0x02,0x80,0x02,0x3C,
97194 -0x02,0x80,0x03,0x3C,
97195 -0x30,0x1F,0x47,0x24,
97196 -0xB8,0xF1,0x66,0x24,
97197 -0x21,0x80,0x00,0x00,
97198 -0x03,0x00,0x02,0x2E,
97199 -0x21,0x20,0x07,0x02,
97200 -0xB9,0x00,0x40,0x10,
97201 -0x08,0x00,0x03,0x2E,
97202 -0x71,0x00,0xC3,0x90,
97203 -0x6E,0x00,0xC2,0x90,
97204 -0x00,0x00,0x00,0x00,
97205 -0xC6,0x1D,0x82,0xA0,
97206 -0xB8,0x1D,0x83,0xA0,
97207 -0x01,0x00,0x02,0x26,
97208 -0xFF,0xFF,0x50,0x30,
97209 -0x0E,0x00,0x03,0x2E,
97210 -0xF4,0xFF,0x60,0x14,
97211 -0x03,0x00,0x02,0x2E,
97212 -0x03,0x00,0x02,0x24,
97213 -0x2A,0x00,0x62,0x15,
97214 -0x02,0x80,0x02,0x3C,
97215 -0x02,0x80,0x03,0x3C,
97216 -0xB8,0xF1,0x4E,0x24,
97217 -0x34,0xD9,0x6F,0x24,
97218 -0x21,0x60,0x00,0x00,
97219 -0x21,0x68,0x00,0x00,
97220 -0x21,0x10,0xAE,0x01,
97221 -0x74,0x00,0x43,0x90,
97222 -0x21,0x80,0x00,0x00,
97223 -0x0F,0x00,0x6A,0x30,
97224 -0x02,0x49,0x03,0x00,
97225 -0x21,0x10,0xB0,0x01,
97226 -0x00,0x11,0x02,0x00,
97227 -0x21,0x58,0x4F,0x00,
97228 -0x21,0x38,0x00,0x00,
97229 -0x21,0x40,0x67,0x01,
97230 -0x00,0x00,0x03,0x91,
97231 -0x00,0x31,0x09,0x00,
97232 -0x01,0x00,0xE7,0x24,
97233 -0x02,0x11,0x03,0x00,
97234 -0x00,0x21,0x02,0x00,
97235 -0x0F,0x00,0x63,0x30,
97236 -0x2B,0x10,0x49,0x00,
97237 -0x0A,0x20,0xC2,0x00,
97238 -0x2B,0x28,0x6A,0x00,
97239 -0x00,0x00,0xA5,0x38,
97240 -0x25,0x18,0x83,0x00,
97241 -0xFF,0xFF,0xE7,0x30,
97242 -0x25,0x20,0x8A,0x00,
97243 -0x0A,0x18,0x85,0x00,
97244 -0x10,0x00,0xE2,0x2C,
97245 -0xEF,0xFF,0x40,0x14,
97246 -0x00,0x00,0x03,0xA1,
97247 -0x01,0x00,0x02,0x26,
97248 -0xFF,0xFF,0x50,0x30,
97249 -0x03,0x00,0x03,0x2E,
97250 -0xE7,0xFF,0x60,0x14,
97251 -0x21,0x10,0xB0,0x01,
97252 -0x01,0x00,0x8C,0x25,
97253 -0x02,0x00,0x82,0x2D,
97254 -0xDD,0xFF,0x40,0x14,
97255 -0x03,0x00,0xAD,0x25,
97256 -0xE6,0x56,0x00,0x0C,
97257 -0x01,0x00,0x04,0x24,
97258 -0x48,0xF3,0xA5,0x26,
97259 -0x91,0x56,0x00,0x0C,
97260 -0xFA,0x01,0x04,0x24,
97261 -0xE6,0x56,0x00,0x0C,
97262 -0x21,0x20,0x00,0x00,
97263 -0x02,0x80,0x04,0x3C,
97264 -0x25,0xB0,0x05,0x3C,
97265 -0x18,0x3B,0x84,0x24,
97266 -0x50,0x00,0xA5,0x34,
97267 -0x10,0x52,0x00,0x0C,
97268 -0x06,0x00,0x06,0x24,
97269 -0x30,0x1F,0xC5,0x26,
97270 -0x01,0x00,0x02,0x24,
97271 -0x06,0x00,0x03,0x24,
97272 -0x05,0x00,0x04,0x24,
97273 -0x33,0x1C,0xA2,0xA0,
97274 -0x8A,0x55,0x00,0x0C,
97275 -0x30,0x3B,0xA3,0xA0,
97276 -0x34,0x00,0xBF,0x8F,
97277 -0x30,0x00,0xB6,0x8F,
97278 -0x2C,0x00,0xB5,0x8F,
97279 -0x28,0x00,0xB4,0x8F,
97280 -0x24,0x00,0xB3,0x8F,
97281 -0x20,0x00,0xB2,0x8F,
97282 -0x1C,0x00,0xB1,0x8F,
97283 -0x18,0x00,0xB0,0x8F,
97284 -0x08,0x00,0xE0,0x03,
97285 -0x38,0x00,0xBD,0x27,
97286 -0x25,0xB0,0x03,0x3C,
97287 -0x4C,0x87,0x02,0x3C,
97288 -0x54,0x00,0x65,0x34,
97289 -0x00,0xE0,0x42,0x34,
97290 -0x50,0x00,0x63,0x34,
97291 -0x00,0x00,0x62,0xAC,
97292 -0x12,0x01,0x04,0x24,
97293 -0x02,0x80,0x02,0x3C,
97294 -0x00,0x00,0xA4,0xAC,
97295 -0x30,0x1F,0x46,0x24,
97296 -0x21,0x60,0x00,0x00,
97297 -0x10,0x00,0x05,0x24,
97298 -0x21,0x80,0x00,0x00,
97299 -0x01,0x00,0x02,0x26,
97300 -0x21,0x18,0xD0,0x00,
97301 -0xFF,0xFF,0x50,0x30,
97302 -0x0E,0x00,0x04,0x2E,
97303 -0x80,0x1D,0x65,0xA0,
97304 -0x64,0x1D,0x65,0xA0,
97305 -0xF9,0xFF,0x80,0x14,
97306 -0x9C,0x1D,0x65,0xA0,
97307 -0x01,0x00,0x8C,0x25,
97308 -0x02,0x00,0x82,0x2D,
97309 -0xF4,0xFF,0x40,0x14,
97310 -0x0E,0x00,0xC6,0x24,
97311 -0x02,0x80,0x02,0x3C,
97312 -0x30,0x1F,0x46,0x24,
97313 -0x21,0x80,0x00,0x00,
97314 -0x04,0x00,0x05,0x24,
97315 -0x01,0x00,0x02,0x26,
97316 -0x21,0x18,0x06,0x02,
97317 -0xFF,0xFF,0x50,0x30,
97318 -0x0E,0x00,0x04,0x2E,
97319 -0xC6,0x1D,0x60,0xA0,
97320 -0xFA,0xFF,0x80,0x14,
97321 -0xB8,0x1D,0x65,0xA0,
97322 -0x48,0x65,0x00,0x08,
97323 -0x00,0x00,0x00,0x00,
97324 -0x25,0xB0,0x04,0x3C,
97325 -0x02,0x80,0x05,0x3C,
97326 -0x50,0x00,0x84,0x34,
97327 -0xCA,0xF1,0xA5,0x24,
97328 -0x10,0x52,0x00,0x0C,
97329 -0x06,0x00,0x06,0x24,
97330 -0xB8,0xF1,0x62,0x92,
97331 -0xB8,0xF1,0x64,0x26,
97332 -0x01,0x00,0x85,0x90,
97333 -0x21,0x18,0x40,0x00,
97334 -0x10,0x00,0xA2,0xA3,
97335 -0x29,0x00,0x02,0x24,
97336 -0x11,0x00,0xA5,0xA3,
97337 -0x50,0x00,0x86,0x90,
97338 -0x3B,0x00,0x62,0x10,
97339 -0xFF,0x00,0xA3,0x30,
97340 -0xB8,0xF1,0x65,0x26,
97341 -0x68,0x00,0xA2,0x90,
97342 -0x02,0x80,0x03,0x3C,
97343 -0x04,0x00,0xC4,0x2C,
97344 -0x1F,0x00,0x42,0x30,
97345 -0x24,0x00,0x80,0x14,
97346 -0x49,0xF3,0x62,0xA0,
97347 -0x7A,0x00,0xA2,0x90,
97348 -0x79,0x00,0xA4,0x90,
97349 -0x02,0x80,0x03,0x3C,
97350 -0x04,0x00,0x42,0x30,
97351 -0x83,0x10,0x02,0x00,
97352 -0x03,0x00,0x8B,0x30,
97353 -0x4A,0xF3,0x62,0xA0,
97354 -0x06,0x00,0xC2,0x2C,
97355 -0x37,0xFF,0x40,0x14,
97356 -0x02,0x80,0x02,0x3C,
97357 -0xB8,0xF1,0x63,0x26,
97358 -0x69,0x00,0x62,0x90,
97359 -0x00,0x00,0x00,0x00,
97360 -0x01,0x00,0x42,0x30,
97361 -0x31,0xFF,0x40,0x14,
97362 -0x02,0x80,0x02,0x3C,
97363 -0xE8,0x64,0x00,0x08,
97364 -0x21,0x40,0x00,0x00,
97365 -0x21,0x20,0x00,0x00,
97366 -0x80,0x00,0x05,0x24,
97367 -0x53,0x56,0x00,0x0C,
97368 -0xB8,0xF1,0x66,0x26,
97369 -0xC7,0x64,0x00,0x08,
97370 -0x00,0x00,0x00,0x00,
97371 -0x7D,0x00,0x43,0x90,
97372 -0x69,0x00,0x44,0x90,
97373 -0x02,0x80,0x02,0x3C,
97374 -0x04,0x00,0x63,0x30,
97375 -0x01,0x00,0x84,0x30,
97376 -0x83,0x18,0x03,0x00,
97377 -0x01,0x00,0x84,0x2C,
97378 -0x1F,0xFF,0x80,0x10,
97379 -0x4A,0xF3,0x43,0xA0,
97380 -0xE8,0x64,0x00,0x08,
97381 -0x21,0x40,0x00,0x00,
97382 -0x02,0x80,0x02,0x3C,
97383 -0x02,0x00,0x0B,0x24,
97384 -0xAA,0x65,0x00,0x08,
97385 -0x4A,0xF3,0x40,0xA0,
97386 -0x21,0x28,0x07,0x02,
97387 -0x06,0x00,0x60,0x10,
97388 -0x21,0x20,0xA0,0x00,
97389 -0x67,0x00,0xC3,0x90,
97390 -0x6F,0x00,0xC2,0x90,
97391 -0xB8,0x1D,0xA3,0xA0,
97392 -0x17,0x65,0x00,0x08,
97393 -0xC6,0x1D,0xA2,0xA0,
97394 -0x72,0x00,0xC3,0x90,
97395 -0x70,0x00,0xC2,0x90,
97396 -0x16,0x65,0x00,0x08,
97397 -0xC6,0x1D,0x82,0xA0,
97398 -0x81,0x00,0x02,0x24,
97399 -0xC4,0xFF,0x62,0x14,
97400 -0x01,0x00,0x02,0x24,
97401 -0x54,0x00,0x83,0x90,
97402 -0x00,0x00,0x00,0x00,
97403 -0x0A,0x00,0x62,0x10,
97404 -0x02,0x00,0x02,0x24,
97405 -0x04,0x00,0x62,0x10,
97406 -0x11,0x00,0x03,0x24,
97407 -0x02,0x80,0x02,0x3C,
97408 -0x9C,0x65,0x00,0x08,
97409 -0xDE,0x5D,0x43,0xA0,
97410 -0x22,0x00,0x03,0x24,
97411 -0x02,0x80,0x02,0x3C,
97412 -0x9C,0x65,0x00,0x08,
97413 -0xDE,0x5D,0x43,0xA0,
97414 -0x12,0x00,0x03,0x24,
97415 -0x02,0x80,0x02,0x3C,
97416 -0x9C,0x65,0x00,0x08,
97417 -0xDE,0x5D,0x43,0xA0,
97418 -0xD8,0xFF,0xBD,0x27,
97419 -0x18,0x00,0xB0,0xAF,
97420 -0x02,0x80,0x02,0x3C,
97421 -0x25,0xB0,0x10,0x3C,
97422 -0x18,0x03,0x03,0x36,
97423 -0xA8,0x97,0x42,0x24,
97424 -0x00,0x00,0x62,0xAC,
97425 -0x20,0x00,0xB2,0xAF,
97426 -0x02,0x80,0x12,0x3C,
97427 -0x24,0x00,0xBF,0xAF,
97428 -0x6E,0x64,0x00,0x0C,
97429 -0x1C,0x00,0xB1,0xAF,
97430 -0x9C,0x66,0x00,0x0C,
97431 -0x00,0x00,0x00,0x00,
97432 -0x36,0x69,0x00,0x0C,
97433 -0x00,0x00,0x00,0x00,
97434 -0x1A,0x6A,0x00,0x0C,
97435 -0x00,0x00,0x00,0x00,
97436 -0x7C,0x6C,0x00,0x0C,
97437 -0x00,0x00,0x00,0x00,
97438 -0x82,0x69,0x00,0x0C,
97439 -0x00,0x00,0x00,0x00,
97440 -0x30,0x1F,0x43,0x26,
97441 -0x30,0x3B,0x64,0x90,
97442 -0x0D,0x0C,0x00,0x0C,
97443 -0x00,0x00,0x00,0x00,
97444 -0x76,0x63,0x00,0x0C,
97445 -0x00,0x00,0x00,0x00,
97446 -0x64,0x40,0x00,0x0C,
97447 -0x00,0x00,0x00,0x00,
97448 -0x44,0x00,0x03,0x36,
97449 -0x00,0x00,0x62,0x94,
97450 -0x00,0x00,0x00,0x00,
97451 -0x40,0x00,0x42,0x34,
97452 -0x00,0x00,0x62,0xA4,
97453 -0xAE,0x63,0x00,0x0C,
97454 -0x00,0x00,0x00,0x00,
97455 -0x7C,0x63,0x00,0x0C,
97456 -0x00,0x00,0x00,0x00,
97457 -0x9B,0x63,0x00,0x0C,
97458 -0x00,0x00,0x00,0x00,
97459 -0xE6,0x69,0x00,0x0C,
97460 -0x00,0x00,0x00,0x00,
97461 -0xA3,0x69,0x00,0x0C,
97462 -0x00,0x00,0x00,0x00,
97463 -0x00,0x80,0x04,0x3C,
97464 -0x74,0x6A,0x84,0x24,
97465 -0x03,0x6A,0x00,0x0C,
97466 -0x01,0x00,0x05,0x24,
97467 -0x00,0x80,0x04,0x3C,
97468 -0x6C,0x72,0x84,0x24,
97469 -0x03,0x6A,0x00,0x0C,
97470 -0x02,0x00,0x05,0x24,
97471 -0x00,0x80,0x04,0x3C,
97472 -0x48,0x7B,0x84,0x24,
97473 -0x03,0x6A,0x00,0x0C,
97474 -0x04,0x00,0x05,0x24,
97475 -0x7E,0x59,0x00,0x0C,
97476 -0x00,0x00,0x00,0x00,
97477 -0x01,0x80,0x04,0x3C,
97478 -0xB8,0x8E,0x84,0x24,
97479 -0x03,0x6A,0x00,0x0C,
97480 -0x03,0x00,0x05,0x24,
97481 -0x02,0x80,0x03,0x3C,
97482 -0xE8,0x5D,0x63,0x90,
97483 -0x00,0x00,0x00,0x00,
97484 -0x60,0x00,0x60,0x10,
97485 -0x43,0x00,0x02,0x36,
97486 -0x07,0x00,0x02,0x24,
97487 -0x0C,0x00,0x62,0x10,
97488 -0x03,0x00,0x02,0x24,
97489 -0x25,0xB0,0x04,0x3C,
97490 -0x43,0x00,0x85,0x34,
97491 -0x10,0x02,0x86,0x34,
97492 -0x10,0x00,0x03,0x24,
97493 -0x00,0x00,0xA2,0xA0,
97494 -0xD8,0x00,0x84,0x34,
97495 -0x00,0x00,0xC3,0xA0,
97496 -0x00,0x00,0x82,0x90,
97497 -0x80,0xFF,0x03,0x24,
97498 -0x25,0x10,0x43,0x00,
97499 -0x00,0x00,0x82,0xA0,
97500 -0xE0,0x6A,0x00,0x0C,
97501 -0x00,0x00,0x00,0x00,
97502 -0x42,0xB0,0x03,0x3C,
97503 -0x00,0x00,0x62,0x90,
97504 -0x25,0xB0,0x10,0x3C,
97505 -0x02,0x80,0x11,0x3C,
97506 -0x01,0x00,0x42,0x34,
97507 -0x00,0x00,0x62,0xA0,
97508 -0x83,0x63,0x00,0x0C,
97509 -0x00,0x00,0x00,0x00,
97510 -0x44,0x00,0x05,0x36,
97511 -0x00,0x00,0xA2,0x94,
97512 -0x02,0x80,0x03,0x3C,
97513 -0x8C,0xC6,0x64,0x8C,
97514 -0xC0,0x00,0x42,0x34,
97515 -0x00,0x00,0xA2,0xA4,
97516 -0x2F,0x55,0x00,0x0C,
97517 -0x80,0x0C,0x10,0x36,
97518 -0x02,0x80,0x02,0x3C,
97519 -0x02,0x80,0x03,0x3C,
97520 -0xDA,0x5D,0x45,0x90,
97521 -0xDF,0x5D,0x66,0x90,
97522 -0x02,0x80,0x04,0x3C,
97523 -0x2F,0x55,0x00,0x0C,
97524 -0x90,0xC6,0x84,0x24,
97525 -0x02,0x80,0x02,0x3C,
97526 -0x02,0x80,0x03,0x3C,
97527 -0xDE,0x5D,0x45,0x90,
97528 -0x48,0xF3,0x66,0x90,
97529 -0x02,0x80,0x02,0x3C,
97530 -0x02,0x80,0x03,0x3C,
97531 -0xE7,0x5D,0x47,0x90,
97532 -0x4A,0xF3,0x62,0x90,
97533 -0x02,0x80,0x04,0x3C,
97534 -0xA4,0xC6,0x84,0x24,
97535 -0x2F,0x55,0x00,0x0C,
97536 -0x10,0x00,0xA2,0xAF,
97537 -0x02,0x80,0x02,0x3C,
97538 -0x00,0x00,0x07,0x8E,
97539 -0xE6,0x5D,0x46,0x90,
97540 -0xE9,0x5D,0x25,0x92,
97541 -0x02,0x80,0x04,0x3C,
97542 -0x2F,0x55,0x00,0x0C,
97543 -0xC0,0xC6,0x84,0x24,
97544 -0x02,0x80,0x03,0x3C,
97545 -0x02,0x80,0x02,0x3C,
97546 -0xEB,0x5D,0x66,0x90,
97547 -0xEA,0x5D,0x45,0x90,
97548 -0x02,0x80,0x04,0x3C,
97549 -0x30,0x1F,0x50,0x26,
97550 -0x2F,0x55,0x00,0x0C,
97551 -0xDC,0xC6,0x84,0x24,
97552 -0xA0,0x3E,0x06,0x8E,
97553 -0xA4,0x3E,0x05,0x8E,
97554 -0x02,0x80,0x04,0x3C,
97555 -0x2F,0x55,0x00,0x0C,
97556 -0xF0,0xC6,0x84,0x24,
97557 -0x02,0x80,0x02,0x3C,
97558 -0x49,0xF3,0x45,0x90,
97559 -0x02,0x80,0x04,0x3C,
97560 -0x2F,0x55,0x00,0x0C,
97561 -0x10,0xC7,0x84,0x24,
97562 -0xE9,0x5D,0x23,0x92,
97563 -0x10,0x27,0x02,0x24,
97564 -0x02,0x80,0x04,0x3C,
97565 -0x0B,0x10,0x03,0x00,
97566 -0x40,0x39,0x02,0xAE,
97567 -0x08,0x00,0x84,0x24,
97568 -0x21,0x28,0x00,0x00,
97569 -0x21,0x30,0x00,0x00,
97570 -0x91,0x3C,0x00,0x0C,
97571 -0x21,0x38,0x00,0x00,
97572 -0x99,0x63,0x00,0x0C,
97573 -0x00,0x00,0x00,0x00,
97574 -0x24,0x00,0xBF,0x8F,
97575 -0x20,0x00,0xB2,0x8F,
97576 -0x1C,0x00,0xB1,0x8F,
97577 -0x18,0x00,0xB0,0x8F,
97578 -0x01,0x00,0x02,0x24,
97579 -0x08,0x00,0xE0,0x03,
97580 -0x28,0x00,0xBD,0x27,
97581 -0xD8,0x00,0x04,0x36,
97582 -0x00,0x00,0x40,0xA0,
97583 -0x38,0x66,0x00,0x08,
97584 -0x00,0x00,0x00,0x00,
97585 -0x21,0x20,0x00,0x00,
97586 -0x20,0xB0,0x06,0x3C,
97587 -0xFF,0xFF,0x05,0x34,
97588 -0x21,0x18,0x86,0x00,
97589 -0x04,0x00,0x84,0x24,
97590 -0x2A,0x10,0xA4,0x00,
97591 -0x00,0x00,0x60,0xAC,
97592 -0xFB,0xFF,0x40,0x10,
97593 -0x00,0x00,0x00,0x00,
97594 -0x08,0x00,0xE0,0x03,
97595 -0x00,0x00,0x00,0x00,
97596 -0xB8,0xFF,0xBD,0x27,
97597 -0x24,0x00,0xB1,0xAF,
97598 -0x44,0x00,0xBF,0xAF,
97599 -0x40,0x00,0xBE,0xAF,
97600 -0x3C,0x00,0xB7,0xAF,
97601 -0x38,0x00,0xB6,0xAF,
97602 -0x34,0x00,0xB5,0xAF,
97603 -0x30,0x00,0xB4,0xAF,
97604 -0x2C,0x00,0xB3,0xAF,
97605 -0x28,0x00,0xB2,0xAF,
97606 -0x20,0x00,0xB0,0xAF,
97607 -0x02,0x80,0x02,0x3C,
97608 -0xDA,0x5D,0x42,0x90,
97609 -0x25,0xB0,0x11,0x3C,
97610 -0x58,0x00,0x25,0x36,
97611 -0x10,0x00,0xA2,0xAF,
97612 -0x4C,0x81,0x02,0x3C,
97613 -0x00,0xE0,0x42,0x34,
97614 -0x00,0x00,0xA2,0xAC,
97615 -0xFF,0xFF,0x04,0x24,
97616 -0x96,0x01,0x03,0x24,
97617 -0x28,0x28,0x02,0x24,
97618 -0x5C,0x00,0x26,0x36,
97619 -0x60,0x00,0x27,0x36,
97620 -0x64,0x00,0x28,0x36,
97621 -0x8A,0x00,0x29,0x36,
97622 -0x00,0x00,0xC3,0xAC,
97623 -0x00,0x00,0xE4,0xAC,
97624 -0x00,0x00,0x04,0xAD,
97625 -0x00,0x00,0x22,0xA5,
97626 -0x0E,0x0E,0x02,0x3C,
97627 -0x09,0x00,0x03,0x24,
97628 -0x0A,0x0A,0x42,0x34,
97629 -0x89,0x00,0x2A,0x36,
97630 -0x8C,0x00,0x2B,0x36,
97631 -0x00,0x00,0x43,0xA1,
97632 -0x90,0x00,0x2C,0x36,
97633 -0x00,0x00,0x62,0xAD,
97634 -0x13,0x00,0x03,0x24,
97635 -0x30,0x00,0x02,0x24,
97636 -0x91,0x00,0x2D,0x36,
97637 -0x00,0x00,0x83,0xA1,
97638 -0x92,0x00,0x2E,0x36,
97639 -0x00,0x00,0xA2,0xA1,
97640 -0x3A,0x01,0x03,0x24,
97641 -0x21,0x00,0x02,0x24,
97642 -0xB5,0x00,0x2F,0x36,
97643 -0x00,0x00,0xC3,0xA5,
97644 -0x00,0x00,0xE2,0xA1,
97645 -0x10,0x00,0xA2,0x8F,
97646 -0x12,0x00,0x03,0x24,
97647 -0x89,0x01,0x43,0x10,
97648 -0x07,0x07,0x02,0x3C,
97649 -0x07,0x07,0x42,0x34,
97650 -0xA0,0x00,0x24,0x36,
97651 -0x00,0x00,0x82,0xAC,
97652 -0xA4,0x00,0x25,0x36,
97653 -0x00,0x07,0x03,0x24,
97654 -0x00,0xC0,0x02,0x3C,
97655 -0xA8,0x00,0x26,0x36,
97656 -0x00,0x00,0xA3,0xAC,
97657 -0x00,0xC4,0x42,0x34,
97658 -0x00,0x00,0xC2,0xAC,
97659 -0x02,0x80,0x03,0x3C,
97660 -0x30,0x1F,0x62,0x24,
97661 -0xAC,0x1B,0x45,0x94,
97662 -0xAE,0x1B,0x46,0x94,
97663 -0xAA,0x1B,0x42,0x90,
97664 -0x02,0x80,0x03,0x3C,
97665 -0x21,0xB0,0x07,0x3C,
97666 -0x14,0x00,0xA2,0xA3,
97667 -0xE9,0x5D,0x63,0x90,
97668 -0x20,0xB0,0x02,0x3C,
97669 -0xFF,0xFF,0x42,0x34,
97670 -0x18,0x00,0xA3,0xAF,
97671 -0x23,0xB0,0x03,0x3C,
97672 -0xFF,0xFF,0x63,0x34,
97673 -0x24,0xB0,0x08,0x3C,
97674 -0xFF,0x1F,0x04,0x3C,
97675 -0x25,0xB0,0x1E,0x3C,
97676 -0xFF,0xFF,0x84,0x34,
97677 -0x21,0x38,0xA7,0x00,
97678 -0x21,0x40,0xC8,0x00,
97679 -0x21,0x28,0xA2,0x00,
97680 -0x21,0x30,0xC3,0x00,
97681 -0x24,0x40,0x04,0x01,
97682 -0x24,0x28,0xA4,0x00,
97683 -0x24,0x38,0xE4,0x00,
97684 -0x24,0x30,0xC4,0x00,
97685 -0x35,0x00,0x02,0x24,
97686 -0x20,0x00,0xC4,0x37,
97687 -0x00,0x00,0x82,0xA0,
97688 -0x22,0x00,0x03,0x24,
97689 -0x09,0x00,0x02,0x24,
97690 -0x03,0x05,0xC9,0x37,
97691 -0x60,0x05,0xCA,0x37,
97692 -0xAC,0x00,0xCB,0x37,
97693 -0xF8,0x00,0xCC,0x37,
97694 -0xB0,0x00,0xCD,0x37,
97695 -0x08,0x01,0xCE,0x37,
97696 -0xD8,0x00,0xCF,0x37,
97697 -0x00,0x00,0x23,0xA1,
97698 -0x00,0x00,0x42,0xA1,
97699 -0x00,0x00,0x65,0xAD,
97700 -0x00,0x00,0x87,0xAD,
97701 -0x00,0x00,0xA6,0xAD,
97702 -0x00,0x00,0xC8,0xAD,
97703 -0x00,0x00,0xE0,0xA1,
97704 -0x14,0x00,0xA3,0x93,
97705 -0x25,0xB0,0x02,0x3C,
97706 -0xB4,0x00,0x42,0x34,
97707 -0x00,0x00,0x43,0xA0,
97708 -0xB6,0x00,0xD1,0x37,
97709 -0x04,0x00,0x02,0x24,
97710 -0x25,0xB0,0x03,0x3C,
97711 -0x00,0x00,0x22,0xA2,
97712 -0xB9,0x00,0x63,0x34,
97713 -0xFF,0xFF,0x02,0x24,
97714 -0x00,0x00,0x62,0xA0,
97715 -0x25,0xB0,0x03,0x3C,
97716 -0x0F,0x00,0x02,0x24,
97717 -0xBA,0x00,0x63,0x34,
97718 -0x00,0x00,0x62,0xA4,
97719 -0x16,0x01,0xD4,0x37,
97720 -0x3F,0x3F,0x03,0x24,
97721 -0x2F,0x00,0x02,0x3C,
97722 -0x00,0x00,0x83,0xA6,
97723 -0x17,0x32,0x42,0x34,
97724 -0xFF,0xCF,0x03,0x24,
97725 -0x18,0x01,0xD5,0x37,
97726 -0x1A,0x01,0xD6,0x37,
97727 -0xDC,0x00,0xD7,0x37,
97728 -0xD0,0x01,0xD8,0x37,
97729 -0x00,0x00,0xA0,0xA6,
97730 -0x00,0x00,0xC0,0xA6,
97731 -0x00,0x00,0xE3,0xAE,
97732 -0x00,0x00,0x02,0xAF,
97733 -0x5E,0x00,0x03,0x3C,
97734 -0x25,0xB0,0x02,0x3C,
97735 -0x17,0x43,0x63,0x34,
97736 -0xD4,0x01,0x42,0x34,
97737 -0x00,0x00,0x43,0xAC,
97738 -0x10,0x00,0x02,0x3C,
97739 -0x20,0x53,0x42,0x34,
97740 -0xD8,0x01,0xDF,0x37,
97741 -0x00,0x00,0xE2,0xAF,
97742 -0x25,0xB0,0x02,0x3C,
97743 -0x44,0xA4,0x03,0x34,
97744 -0xDC,0x01,0x42,0x34,
97745 -0x00,0x00,0x43,0xAC,
97746 -0x25,0xB0,0x03,0x3C,
97747 -0x1A,0x06,0x02,0x24,
97748 -0xE0,0x01,0x63,0x34,
97749 -0x00,0x00,0x62,0xA4,
97750 -0xC2,0x00,0x02,0x3C,
97751 -0x30,0x30,0x03,0x24,
97752 -0x51,0x10,0x42,0x34,
97753 -0xF4,0x01,0xD0,0x37,
97754 -0xF8,0x01,0xD3,0x37,
97755 -0x00,0x00,0x03,0xA6,
97756 -0x00,0x02,0xD2,0x37,
97757 -0x00,0x00,0x62,0xAE,
97758 -0x26,0x00,0x03,0x24,
97759 -0x03,0x02,0xD9,0x37,
97760 -0x04,0x00,0x02,0x24,
97761 -0x00,0x00,0x43,0xA6,
97762 -0x00,0x00,0x22,0xA3,
97763 -0x18,0x00,0xA3,0x8F,
97764 -0x00,0x00,0x00,0x00,
97765 -0xE5,0x00,0x60,0x14,
97766 -0x36,0x02,0xC2,0x37,
97767 -0x04,0x00,0x03,0x24,
97768 -0x00,0x00,0x43,0xA0,
97769 -0x02,0x80,0x0B,0x3C,
97770 -0xDE,0x5D,0x66,0x91,
97771 -0x25,0xB0,0x09,0x3C,
97772 -0x80,0x00,0x02,0x24,
97773 -0x34,0x02,0x24,0x35,
97774 -0x00,0x00,0x82,0xA4,
97775 -0x37,0x02,0x25,0x35,
97776 -0x53,0x00,0x03,0x24,
97777 -0x22,0x00,0x02,0x24,
97778 -0x00,0x00,0xA3,0xA0,
97779 -0xE6,0x00,0xC2,0x10,
97780 -0x1B,0x1B,0x02,0x3C,
97781 -0x13,0x13,0x02,0x3C,
97782 -0x13,0x13,0x42,0x34,
97783 -0x60,0x01,0x23,0x35,
97784 -0x64,0x01,0x24,0x35,
97785 -0x68,0x01,0x25,0x35,
97786 -0x7C,0x01,0x2A,0x35,
97787 -0x6C,0x01,0x26,0x35,
97788 -0x70,0x01,0x27,0x35,
97789 -0x74,0x01,0x28,0x35,
97790 -0x78,0x01,0x29,0x35,
97791 -0x00,0x00,0x62,0xAC,
97792 -0x00,0x00,0x82,0xAC,
97793 -0x00,0x00,0xA2,0xAC,
97794 -0x00,0x00,0xC2,0xAC,
97795 -0x00,0x00,0xE2,0xAC,
97796 -0x00,0x00,0x02,0xAD,
97797 -0x00,0x00,0x22,0xAD,
97798 -0x00,0x00,0x42,0xAD,
97799 -0xDE,0x5D,0x65,0x91,
97800 -0x25,0xB0,0x0C,0x3C,
97801 -0x01,0x00,0x03,0x3C,
97802 -0x80,0x01,0x82,0x35,
97803 -0x08,0x5F,0x63,0x34,
97804 -0x22,0x00,0x04,0x24,
97805 -0x00,0x00,0x43,0xAC,
97806 -0xE5,0x00,0xA4,0x10,
97807 -0x0F,0x1F,0x02,0x3C,
97808 -0x92,0x00,0x02,0x24,
97809 -0xE2,0x00,0xA2,0x10,
97810 -0x0F,0x1F,0x02,0x3C,
97811 -0x0F,0x10,0x02,0x3C,
97812 -0x00,0xF0,0x4F,0x34,
97813 -0xF7,0x01,0x91,0x35,
97814 -0x15,0xF0,0x4D,0x34,
97815 -0x77,0x00,0x0E,0x24,
97816 -0x84,0x01,0x87,0x35,
97817 -0x88,0x01,0x88,0x35,
97818 -0x10,0xF0,0x44,0x34,
97819 -0x8C,0x01,0x85,0x35,
97820 -0x05,0xF0,0x42,0x34,
97821 -0x00,0x00,0xED,0xAC,
97822 -0x90,0x01,0x83,0x35,
97823 -0x00,0x00,0x04,0xAD,
97824 -0x94,0x01,0x86,0x35,
97825 -0x00,0x00,0xA2,0xAC,
97826 -0xF5,0x0F,0x02,0x24,
97827 -0x00,0x00,0x6F,0xAC,
97828 -0x98,0x01,0x89,0x35,
97829 -0x00,0x00,0xC2,0xAC,
97830 -0x9C,0x01,0x8A,0x35,
97831 -0xA0,0x01,0x8B,0x35,
97832 -0xF0,0x0F,0x03,0x24,
97833 -0xF6,0x01,0x8C,0x35,
97834 -0x0D,0x00,0x02,0x24,
97835 -0x00,0x00,0x23,0xAD,
97836 -0x00,0x00,0x42,0xAD,
97837 -0x00,0x00,0x6D,0xAD,
97838 -0x02,0x80,0x02,0x3C,
97839 -0x00,0x00,0x8E,0xA1,
97840 -0x00,0x00,0x2E,0xA2,
97841 -0xFB,0x5D,0x42,0x90,
97842 -0x25,0xB0,0x1F,0x3C,
97843 -0xA7,0x01,0xE7,0x37,
97844 -0x1C,0x00,0xA2,0xAF,
97845 -0xFF,0xFF,0x02,0x24,
97846 -0x00,0x00,0xE2,0xA0,
97847 -0x05,0x06,0x03,0x3C,
97848 -0x25,0xB0,0x02,0x3C,
97849 -0x03,0x04,0x63,0x34,
97850 -0x0C,0x00,0x04,0x24,
97851 -0xFF,0xFF,0x05,0x24,
97852 -0x01,0x02,0x06,0x3C,
97853 -0xC2,0x01,0x42,0x34,
97854 -0xA8,0x01,0xE8,0x37,
97855 -0xAC,0x01,0xE9,0x37,
97856 -0xB0,0x01,0xEA,0x37,
97857 -0xB4,0x01,0xEB,0x37,
97858 -0xB8,0x01,0xEC,0x37,
97859 -0xBC,0x01,0xED,0x37,
97860 -0xC0,0x01,0xEE,0x37,
97861 -0xC1,0x01,0xEF,0x37,
97862 -0x00,0x00,0x05,0xAD,
97863 -0x00,0x00,0x25,0xAD,
97864 -0x00,0x00,0x46,0xAD,
97865 -0x00,0x00,0x63,0xAD,
97866 -0x00,0x00,0x86,0xAD,
97867 -0x00,0x00,0xA3,0xAD,
97868 -0x00,0x00,0xC4,0xA1,
97869 -0x25,0xB0,0x03,0x3C,
97870 -0x00,0x00,0xE4,0xA1,
97871 -0x00,0x00,0x44,0xA0,
97872 -0x25,0xB0,0x02,0x3C,
97873 -0x0D,0x00,0x17,0x24,
97874 -0x0E,0x00,0x18,0x24,
97875 -0xC4,0x01,0x63,0x34,
97876 -0xC5,0x01,0x42,0x34,
97877 -0xC3,0x01,0xF1,0x37,
97878 -0x00,0x00,0x37,0xA2,
97879 -0xC6,0x01,0xF4,0x37,
97880 -0x00,0x00,0x77,0xA0,
97881 -0xC7,0x01,0xF5,0x37,
97882 -0x00,0x00,0x58,0xA0,
97883 -0x0F,0x00,0x02,0x24,
97884 -0x00,0x00,0x98,0xA2,
97885 -0x00,0x00,0xA2,0xA2,
97886 -0xD3,0x01,0x02,0x3C,
97887 -0x46,0x00,0xF6,0x37,
97888 -0x48,0x00,0xFE,0x37,
97889 -0x0E,0xF0,0x42,0x34,
97890 -0x00,0x00,0xC0,0xA6,
97891 -0x00,0x00,0xC2,0xAF,
97892 -0x1C,0x00,0xA3,0x8F,
97893 -0x00,0x00,0x00,0x00,
97894 -0x09,0x00,0x60,0x10,
97895 -0x44,0x00,0xF7,0x37,
97896 -0x00,0x00,0xE2,0x8E,
97897 -0x00,0x02,0x03,0x3C,
97898 -0x25,0x10,0x43,0x00,
97899 -0x00,0x00,0xE2,0xAE,
97900 -0x00,0x00,0xC3,0x8F,
97901 -0x00,0x04,0x02,0x3C,
97902 -0x25,0x18,0x62,0x00,
97903 -0x00,0x00,0xC3,0xAF,
97904 -0x4C,0x00,0xE2,0x37,
97905 -0x00,0x00,0x40,0xA0,
97906 -0x4D,0x00,0xE3,0x37,
97907 -0xF1,0x02,0xE4,0x37,
97908 -0x08,0x00,0x02,0x24,
97909 -0x00,0x00,0x60,0xA0,
97910 -0x40,0x00,0xE6,0x37,
97911 -0x00,0x00,0x82,0xA0,
97912 -0x64,0x03,0xE5,0x37,
97913 -0xBC,0x00,0x03,0x24,
97914 -0xFC,0x37,0x02,0x24,
97915 -0x00,0x00,0xC3,0xA4,
97916 -0x00,0x00,0xA0,0xA0,
97917 -0x00,0x00,0xC2,0xA4,
97918 -0x02,0x80,0x02,0x3C,
97919 -0xD8,0x00,0xE9,0x37,
97920 -0x30,0x1F,0x43,0x24,
97921 -0x00,0x00,0x26,0x91,
97922 -0xAA,0x1B,0x64,0x90,
97923 -0x2A,0xB0,0x05,0x3C,
97924 -0xA0,0xFF,0x02,0x24,
97925 -0x26,0xB0,0x07,0x3C,
97926 -0x25,0x30,0xC2,0x00,
97927 -0x30,0x00,0xAD,0x34,
97928 -0x34,0x00,0xA8,0x34,
97929 -0x01,0x00,0x83,0x24,
97930 -0x38,0x00,0xA5,0x34,
97931 -0x20,0x20,0x02,0x24,
97932 -0x00,0x00,0x26,0xA1,
97933 -0x79,0x00,0xEA,0x34,
97934 -0x00,0x00,0x03,0xA1,
97935 -0x00,0x00,0xA2,0xA4,
97936 -0x40,0x00,0x03,0x24,
97937 -0x16,0x00,0x02,0x24,
97938 -0x00,0x00,0xA3,0xA1,
97939 -0x94,0x00,0xEB,0x37,
97940 -0x00,0x00,0x42,0xA1,
97941 -0x98,0x00,0xEC,0x37,
97942 -0x64,0x00,0x03,0x24,
97943 -0x22,0x00,0x02,0x24,
97944 -0x00,0x00,0x63,0xA5,
97945 -0x7C,0x00,0xF4,0x34,
97946 -0x00,0x00,0x82,0xA5,
97947 -0x7A,0x00,0xE7,0x34,
97948 -0x04,0x00,0x03,0x24,
97949 -0x20,0x0C,0x02,0x24,
97950 -0x00,0x00,0xE3,0xA0,
97951 -0x9C,0x00,0xEE,0x37,
97952 -0x00,0x00,0x82,0xA6,
97953 -0x9A,0x00,0xEF,0x37,
97954 -0x0A,0x00,0x03,0x24,
97955 -0xFF,0x03,0x02,0x24,
97956 -0x00,0x00,0xC3,0xA1,
97957 -0x00,0x00,0xE2,0xA5,
97958 -0x25,0xB0,0x02,0x3C,
97959 -0x02,0x00,0x03,0x24,
97960 -0x96,0x00,0x42,0x34,
97961 -0x00,0x00,0x43,0xA4,
97962 -0x89,0x00,0xF5,0x37,
97963 -0xB7,0x00,0xF1,0x37,
97964 -0x20,0x00,0x02,0x24,
97965 -0x09,0x00,0x03,0x24,
97966 -0x00,0x00,0x22,0xA2,
97967 -0x00,0x00,0xA3,0xA2,
97968 -0x00,0x00,0xE2,0x96,
97969 -0xFF,0xFD,0x03,0x24,
97970 -0x04,0x02,0x05,0x24,
97971 -0x24,0x10,0x43,0x00,
97972 -0x00,0x00,0xE2,0xA6,
97973 -0x00,0x00,0xE3,0x96,
97974 -0x29,0xB0,0x02,0x3C,
97975 -0x40,0x00,0x42,0x34,
97976 -0x00,0x02,0x63,0x34,
97977 -0x00,0x00,0xE3,0xA6,
97978 -0xFF,0x00,0x84,0x30,
97979 -0x00,0x00,0x45,0xA4,
97980 -0x73,0x22,0x00,0x0C,
97981 -0x00,0x00,0x00,0x00,
97982 -0x44,0x00,0xBF,0x8F,
97983 -0x40,0x00,0xBE,0x8F,
97984 -0x3C,0x00,0xB7,0x8F,
97985 -0x38,0x00,0xB6,0x8F,
97986 -0x34,0x00,0xB5,0x8F,
97987 -0x30,0x00,0xB4,0x8F,
97988 -0x2C,0x00,0xB3,0x8F,
97989 -0x28,0x00,0xB2,0x8F,
97990 -0x24,0x00,0xB1,0x8F,
97991 -0x20,0x00,0xB0,0x8F,
97992 -0x01,0x00,0x02,0x24,
97993 -0x08,0x00,0xE0,0x03,
97994 -0x48,0x00,0xBD,0x27,
97995 -0xFF,0xFF,0x03,0x24,
97996 -0x00,0x00,0x43,0xA0,
97997 -0x02,0x80,0x0B,0x3C,
97998 -0xDE,0x5D,0x66,0x91,
97999 -0x25,0xB0,0x09,0x3C,
98000 -0x80,0x00,0x02,0x24,
98001 -0x34,0x02,0x24,0x35,
98002 -0x00,0x00,0x82,0xA4,
98003 -0x37,0x02,0x25,0x35,
98004 -0x53,0x00,0x03,0x24,
98005 -0x22,0x00,0x02,0x24,
98006 -0x00,0x00,0xA3,0xA0,
98007 -0x1E,0xFF,0xC2,0x14,
98008 -0x13,0x13,0x02,0x3C,
98009 -0x1B,0x1B,0x02,0x3C,
98010 -0x1B,0x1B,0x42,0x34,
98011 -0x60,0x01,0x23,0x35,
98012 -0x64,0x01,0x24,0x35,
98013 -0x68,0x01,0x25,0x35,
98014 -0x7C,0x01,0x2A,0x35,
98015 -0x6C,0x01,0x26,0x35,
98016 -0x70,0x01,0x27,0x35,
98017 -0x74,0x01,0x28,0x35,
98018 -0x78,0x01,0x29,0x35,
98019 -0x00,0x00,0x62,0xAC,
98020 -0x00,0x00,0x82,0xAC,
98021 -0x00,0x00,0xA2,0xAC,
98022 -0x00,0x00,0xC2,0xAC,
98023 -0x00,0x00,0xE2,0xAC,
98024 -0x00,0x00,0x02,0xAD,
98025 -0x00,0x00,0x22,0xAD,
98026 -0x00,0x00,0x42,0xAD,
98027 -0xDE,0x5D,0x65,0x91,
98028 -0x25,0xB0,0x0C,0x3C,
98029 -0x01,0x00,0x03,0x3C,
98030 -0x80,0x01,0x82,0x35,
98031 -0x08,0x5F,0x63,0x34,
98032 -0x22,0x00,0x04,0x24,
98033 -0x00,0x00,0x43,0xAC,
98034 -0x1D,0xFF,0xA4,0x14,
98035 -0x0F,0x1F,0x02,0x3C,
98036 -0x00,0xF0,0x4F,0x34,
98037 -0xF7,0x01,0x91,0x35,
98038 -0x15,0xF0,0x4D,0x34,
98039 -0x78,0x67,0x00,0x08,
98040 -0xFF,0xFF,0x0E,0x24,
98041 -0x02,0x80,0x02,0x3C,
98042 -0xDF,0x5D,0x44,0x90,
98043 -0x06,0x00,0x03,0x24,
98044 -0x0C,0x00,0x83,0x10,
98045 -0x00,0x1C,0x02,0x3C,
98046 -0x00,0x1C,0x42,0x34,
98047 -0xA0,0x00,0x24,0x36,
98048 -0x00,0x00,0x82,0xAC,
98049 -0x00,0xE0,0x02,0x3C,
98050 -0xA4,0x00,0x25,0x36,
98051 -0x00,0x04,0x03,0x24,
98052 -0xA8,0x00,0x26,0x36,
98053 -0x00,0xB0,0x42,0x34,
98054 -0x00,0x00,0xA3,0xAC,
98055 -0xDA,0x66,0x00,0x08,
98056 -0x00,0x00,0x00,0x00,
98057 -0x16,0x16,0x02,0x3C,
98058 -0x07,0x07,0x42,0x34,
98059 -0xA0,0x00,0x23,0x36,
98060 -0x00,0x00,0x62,0xAC,
98061 -0x00,0xC0,0x02,0x3C,
98062 -0xA8,0x00,0x25,0x36,
98063 -0xA4,0x00,0x24,0x36,
98064 -0x00,0xB4,0x42,0x34,
98065 -0x00,0x00,0x80,0xAC,
98066 -0x00,0x00,0xA2,0xAC,
98067 -0xDC,0x66,0x00,0x08,
98068 -0x02,0x80,0x03,0x3C,
98069 -0xE8,0xFF,0xBD,0x27,
98070 -0x01,0x00,0x06,0x24,
98071 -0xE8,0x0E,0x04,0x24,
98072 -0x10,0x00,0xBF,0xAF,
98073 -0xA9,0x45,0x00,0x0C,
98074 -0x00,0x10,0x05,0x3C,
98075 -0x60,0x08,0x04,0x24,
98076 -0xCB,0x45,0x00,0x0C,
98077 -0xFF,0xFF,0x05,0x24,
98078 -0x20,0x04,0x06,0x3C,
98079 -0x20,0x04,0xC6,0x34,
98080 -0x25,0x30,0x46,0x00,
98081 -0x60,0x08,0x04,0x24,
98082 -0xA9,0x45,0x00,0x0C,
98083 -0xFF,0xFF,0x05,0x24,
98084 -0x70,0x08,0x04,0x24,
98085 -0x00,0x04,0x05,0x24,
98086 -0xA9,0x45,0x00,0x0C,
98087 -0x21,0x30,0x00,0x00,
98088 -0x00,0x20,0x06,0x3C,
98089 -0x80,0x00,0xC6,0x34,
98090 -0x80,0x0C,0x04,0x24,
98091 -0xA9,0x45,0x00,0x0C,
98092 -0xFF,0xFF,0x05,0x24,
98093 -0x00,0x40,0x06,0x3C,
98094 -0x10,0x00,0xBF,0x8F,
98095 -0x00,0x01,0xC6,0x34,
98096 -0x88,0x0C,0x04,0x24,
98097 -0xFF,0xFF,0x05,0x24,
98098 -0xA9,0x45,0x00,0x08,
98099 -0x18,0x00,0xBD,0x27,
98100 -0x10,0x00,0xA0,0x10,
98101 -0x21,0x38,0x00,0x00,
98102 -0x25,0xB0,0x08,0x3C,
98103 -0x00,0x00,0x82,0x8C,
98104 -0x04,0x00,0x83,0x8C,
98105 -0x21,0x30,0x00,0x00,
98106 -0x21,0x10,0x48,0x00,
98107 -0x00,0x00,0x43,0xAC,
98108 -0x01,0x00,0xC2,0x24,
98109 -0xFF,0x00,0x46,0x30,
98110 -0x06,0x00,0xC3,0x2C,
98111 -0xFD,0xFF,0x60,0x14,
98112 -0x01,0x00,0xC2,0x24,
98113 -0x02,0x00,0xE7,0x24,
98114 -0x2B,0x10,0xE5,0x00,
98115 -0xF3,0xFF,0x40,0x14,
98116 -0x08,0x00,0x84,0x24,
98117 -0x08,0x00,0xE0,0x03,
98118 -0x00,0x00,0x00,0x00,
98119 -0xE0,0xFF,0xBD,0x27,
98120 -0x18,0x00,0xB2,0xAF,
98121 -0x14,0x00,0xB1,0xAF,
98122 -0x1C,0x00,0xBF,0xAF,
98123 -0x10,0x00,0xB0,0xAF,
98124 -0x21,0x90,0xA0,0x00,
98125 -0x0B,0x00,0xA0,0x10,
98126 -0x21,0x88,0x00,0x00,
98127 -0x21,0x80,0x80,0x00,
98128 -0x00,0x00,0x04,0x8E,
98129 -0x04,0x00,0x05,0x8E,
98130 -0x08,0x00,0x06,0x8E,
98131 -0x03,0x00,0x31,0x26,
98132 -0xA9,0x45,0x00,0x0C,
98133 -0x0C,0x00,0x10,0x26,
98134 -0x2B,0x10,0x32,0x02,
98135 -0xF8,0xFF,0x40,0x14,
98136 -0x00,0x00,0x00,0x00,
98137 -0x1C,0x00,0xBF,0x8F,
98138 -0x18,0x00,0xB2,0x8F,
98139 -0x14,0x00,0xB1,0x8F,
98140 -0x10,0x00,0xB0,0x8F,
98141 -0x08,0x00,0xE0,0x03,
98142 -0x20,0x00,0xBD,0x27,
98143 -0x21,0x40,0x80,0x00,
98144 -0x21,0x48,0x00,0x00,
98145 -0x1E,0x00,0xA0,0x10,
98146 -0x21,0x38,0x00,0x00,
98147 -0x80,0x30,0x07,0x00,
98148 -0x21,0x10,0xC8,0x00,
98149 -0x00,0x00,0x43,0x8C,
98150 -0x00,0x00,0x00,0x00,
98151 -0x00,0xF2,0x63,0x24,
98152 -0x1D,0x00,0x62,0x2C,
98153 -0x12,0x00,0x40,0x10,
98154 -0x80,0x10,0x03,0x00,
98155 -0x02,0x80,0x03,0x3C,
98156 -0x64,0xE9,0x63,0x24,
98157 -0x21,0x10,0x43,0x00,
98158 -0x00,0x00,0x44,0x8C,
98159 -0x00,0x00,0x00,0x00,
98160 -0x08,0x00,0x80,0x00,
98161 -0x00,0x00,0x00,0x00,
98162 -0x21,0x10,0xC8,0x00,
98163 -0xC0,0x18,0x09,0x00,
98164 -0x23,0x18,0x69,0x00,
98165 -0x08,0x00,0x44,0x8C,
98166 -0x02,0x80,0x02,0x3C,
98167 -0x80,0x18,0x03,0x00,
98168 -0x30,0x1F,0x42,0x24,
98169 -0x21,0x18,0x62,0x00,
98170 -0x04,0x1D,0x64,0xAC,
98171 -0x01,0x00,0x29,0x25,
98172 -0x03,0x00,0xE7,0x24,
98173 -0x2B,0x10,0xE5,0x00,
98174 -0xE5,0xFF,0x40,0x14,
98175 -0x80,0x30,0x07,0x00,
98176 -0x08,0x00,0xE0,0x03,
98177 -0x00,0x00,0x00,0x00,
98178 -0x21,0x10,0xC8,0x00,
98179 -0xC0,0x18,0x09,0x00,
98180 -0x08,0x00,0x44,0x8C,
98181 -0x23,0x18,0x69,0x00,
98182 -0x02,0x80,0x02,0x3C,
98183 -0x30,0x1F,0x42,0x24,
98184 -0x80,0x18,0x03,0x00,
98185 -0x03,0x00,0xE7,0x24,
98186 -0x21,0x18,0x62,0x00,
98187 -0x2B,0x10,0xE5,0x00,
98188 -0xD6,0xFF,0x40,0x14,
98189 -0x00,0x1D,0x64,0xAC,
98190 -0xE0,0x68,0x00,0x08,
98191 -0x00,0x00,0x00,0x00,
98192 -0x21,0x10,0xC8,0x00,
98193 -0xC0,0x18,0x09,0x00,
98194 -0x08,0x00,0x44,0x8C,
98195 -0x23,0x18,0x69,0x00,
98196 -0x02,0x80,0x02,0x3C,
98197 -0x30,0x1F,0x42,0x24,
98198 -0x80,0x18,0x03,0x00,
98199 -0x03,0x00,0xE7,0x24,
98200 -0x21,0x18,0x62,0x00,
98201 -0x2B,0x10,0xE5,0x00,
98202 -0xC8,0xFF,0x40,0x14,
98203 -0xFC,0x1C,0x64,0xAC,
98204 -0xE0,0x68,0x00,0x08,
98205 -0x00,0x00,0x00,0x00,
98206 -0x21,0x10,0xC8,0x00,
98207 -0xC0,0x18,0x09,0x00,
98208 -0x08,0x00,0x44,0x8C,
98209 -0x23,0x18,0x69,0x00,
98210 -0x02,0x80,0x02,0x3C,
98211 -0x30,0x1F,0x42,0x24,
98212 -0x80,0x18,0x03,0x00,
98213 -0x03,0x00,0xE7,0x24,
98214 -0x21,0x18,0x62,0x00,
98215 -0x2B,0x10,0xE5,0x00,
98216 -0xBA,0xFF,0x40,0x14,
98217 -0xF8,0x1C,0x64,0xAC,
98218 -0xE0,0x68,0x00,0x08,
98219 -0x00,0x00,0x00,0x00,
98220 -0x21,0x10,0xC8,0x00,
98221 -0xC0,0x18,0x09,0x00,
98222 -0x08,0x00,0x44,0x8C,
98223 -0x23,0x18,0x69,0x00,
98224 -0x02,0x80,0x02,0x3C,
98225 -0x30,0x1F,0x42,0x24,
98226 -0x80,0x18,0x03,0x00,
98227 -0x03,0x00,0xE7,0x24,
98228 -0x21,0x18,0x62,0x00,
98229 -0x2B,0x10,0xE5,0x00,
98230 -0xAC,0xFF,0x40,0x14,
98231 -0x08,0x1D,0x64,0xAC,
98232 -0xE0,0x68,0x00,0x08,
98233 -0x00,0x00,0x00,0x00,
98234 -0x21,0x10,0xC8,0x00,
98235 -0xC0,0x18,0x09,0x00,
98236 -0x08,0x00,0x44,0x8C,
98237 -0x23,0x18,0x69,0x00,
98238 -0x02,0x80,0x02,0x3C,
98239 -0x30,0x1F,0x42,0x24,
98240 -0x80,0x18,0x03,0x00,
98241 -0x03,0x00,0xE7,0x24,
98242 -0x21,0x18,0x62,0x00,
98243 -0x2B,0x10,0xE5,0x00,
98244 -0x9E,0xFF,0x40,0x14,
98245 -0xF4,0x1C,0x64,0xAC,
98246 -0xE0,0x68,0x00,0x08,
98247 -0x00,0x00,0x00,0x00,
98248 -0x21,0x10,0xC8,0x00,
98249 -0xC0,0x18,0x09,0x00,
98250 -0x08,0x00,0x44,0x8C,
98251 -0x23,0x18,0x69,0x00,
98252 -0x02,0x80,0x02,0x3C,
98253 -0x30,0x1F,0x42,0x24,
98254 -0x80,0x18,0x03,0x00,
98255 -0x03,0x00,0xE7,0x24,
98256 -0x21,0x18,0x62,0x00,
98257 -0x2B,0x10,0xE5,0x00,
98258 -0x90,0xFF,0x40,0x14,
98259 -0xF0,0x1C,0x64,0xAC,
98260 -0xE0,0x68,0x00,0x08,
98261 -0x00,0x00,0x00,0x00,
98262 -0x25,0xB0,0x02,0x3C,
98263 -0xFC,0x37,0x03,0x24,
98264 -0x40,0x00,0x42,0x34,
98265 -0x02,0x80,0x04,0x3C,
98266 -0x00,0x00,0x43,0xA4,
98267 -0xE8,0xFF,0xBD,0x27,
98268 -0xA4,0xCF,0x84,0x24,
98269 -0x10,0x00,0xBF,0xAF,
98270 -0x94,0x68,0x00,0x0C,
98271 -0x74,0x01,0x05,0x24,
98272 -0x02,0x80,0x02,0x3C,
98273 -0xDE,0x5D,0x44,0x90,
98274 -0x12,0x00,0x03,0x24,
98275 -0x34,0x00,0x83,0x10,
98276 -0x13,0x00,0x82,0x28,
98277 -0x17,0x00,0x40,0x14,
98278 -0x11,0x00,0x02,0x24,
98279 -0x22,0x00,0x02,0x24,
98280 -0x36,0x00,0x82,0x10,
98281 -0x02,0x80,0x04,0x3C,
98282 -0x02,0x80,0x04,0x3C,
98283 -0x2C,0xCC,0x84,0x24,
98284 -0xBF,0x68,0x00,0x0C,
98285 -0x54,0x00,0x05,0x24,
98286 -0x02,0x80,0x02,0x3C,
98287 -0x4A,0xF3,0x44,0x90,
98288 -0x01,0x00,0x03,0x24,
98289 -0x1A,0x00,0x83,0x10,
98290 -0x00,0x00,0x00,0x00,
98291 -0x02,0x80,0x04,0x3C,
98292 -0x2C,0xC7,0x84,0x24,
98293 -0x94,0x68,0x00,0x0C,
98294 -0x40,0x01,0x05,0x24,
98295 -0x10,0x00,0xBF,0x8F,
98296 -0x84,0x08,0x04,0x24,
98297 -0xFF,0x00,0x05,0x24,
98298 -0x58,0x00,0x06,0x24,
98299 -0x1B,0x47,0x00,0x08,
98300 -0x18,0x00,0xBD,0x27,
98301 -0xED,0xFF,0x82,0x14,
98302 -0x02,0x80,0x04,0x3C,
98303 -0x02,0x80,0x04,0x3C,
98304 -0xE4,0xCE,0x84,0x24,
98305 -0xA7,0x68,0x00,0x0C,
98306 -0x30,0x00,0x05,0x24,
98307 -0x02,0x80,0x04,0x3C,
98308 -0x2C,0xCC,0x84,0x24,
98309 -0xBF,0x68,0x00,0x0C,
98310 -0x54,0x00,0x05,0x24,
98311 -0x02,0x80,0x02,0x3C,
98312 -0x4A,0xF3,0x44,0x90,
98313 -0x01,0x00,0x03,0x24,
98314 -0xE8,0xFF,0x83,0x14,
98315 -0x00,0x00,0x00,0x00,
98316 -0x75,0x68,0x00,0x0C,
98317 -0x00,0x00,0x00,0x00,
98318 -0x02,0x80,0x04,0x3C,
98319 -0x2C,0xC7,0x84,0x24,
98320 -0x94,0x68,0x00,0x0C,
98321 -0x40,0x01,0x05,0x24,
98322 -0x10,0x00,0xBF,0x8F,
98323 -0x84,0x08,0x04,0x24,
98324 -0xFF,0x00,0x05,0x24,
98325 -0x58,0x00,0x06,0x24,
98326 -0x1B,0x47,0x00,0x08,
98327 -0x18,0x00,0xBD,0x27,
98328 -0x02,0x80,0x04,0x3C,
98329 -0x30,0xCE,0x84,0x24,
98330 -0x2D,0x00,0x05,0x24,
98331 -0xA7,0x68,0x00,0x0C,
98332 -0x00,0x00,0x00,0x00,
98333 -0x64,0x69,0x00,0x08,
98334 -0x02,0x80,0x04,0x3C,
98335 -0x7C,0xCD,0x84,0x24,
98336 -0x7B,0x69,0x00,0x08,
98337 -0x2D,0x00,0x05,0x24,
98338 -0xE8,0xFF,0xBD,0x27,
98339 -0x10,0x00,0xB0,0xAF,
98340 -0x50,0x0C,0x04,0x24,
98341 -0xFF,0x00,0x05,0x24,
98342 -0x02,0x80,0x10,0x3C,
98343 -0x14,0x00,0xBF,0xAF,
98344 -0x0A,0x47,0x00,0x0C,
98345 -0x30,0x1F,0x10,0x26,
98346 -0x60,0x1D,0x02,0xA2,
98347 -0x58,0x0C,0x04,0x24,
98348 -0x0A,0x47,0x00,0x0C,
98349 -0xFF,0x00,0x05,0x24,
98350 -0x61,0x1D,0x02,0xA2,
98351 -0x60,0x0C,0x04,0x24,
98352 -0x0A,0x47,0x00,0x0C,
98353 -0xFF,0x00,0x05,0x24,
98354 -0x62,0x1D,0x02,0xA2,
98355 -0x68,0x0C,0x04,0x24,
98356 -0x0A,0x47,0x00,0x0C,
98357 -0xFF,0x00,0x05,0x24,
98358 -0x63,0x1D,0x02,0xA2,
98359 -0x38,0x0C,0x04,0x24,
98360 -0x0A,0x47,0x00,0x0C,
98361 -0xFF,0x00,0x05,0x24,
98362 -0xE8,0x1C,0x02,0xA2,
98363 -0x34,0x0C,0x04,0x24,
98364 -0x0A,0x47,0x00,0x0C,
98365 -0xFF,0xFF,0x05,0x24,
98366 -0xEC,0x1C,0x02,0xAE,
98367 -0x14,0x00,0xBF,0x8F,
98368 -0x10,0x00,0xB0,0x8F,
98369 -0x08,0x00,0xE0,0x03,
98370 -0x18,0x00,0xBD,0x27,
98371 -0x02,0x80,0x02,0x3C,
98372 -0x02,0x80,0x05,0x3C,
98373 -0x02,0x80,0x03,0x3C,
98374 -0x84,0xA7,0x42,0x24,
98375 -0xBC,0x5E,0x60,0xAC,
98376 -0x1C,0x5E,0xA2,0xAC,
98377 -0x02,0x80,0x03,0x3C,
98378 -0x00,0x80,0x02,0x3C,
98379 -0xC0,0x5E,0x60,0xA4,
98380 -0x1C,0x5E,0xA4,0x24,
98381 -0x88,0x0D,0x42,0x24,
98382 -0x02,0x80,0x03,0x3C,
98383 -0xC2,0x5E,0x60,0xA4,
98384 -0x08,0x00,0x82,0xAC,
98385 -0x00,0x80,0x03,0x3C,
98386 -0x00,0x80,0x02,0x3C,
98387 -0x02,0x80,0x06,0x3C,
98388 -0x88,0x10,0x42,0x24,
98389 -0xA4,0x0D,0x63,0x24,
98390 -0xC4,0x5E,0xC7,0x24,
98391 -0x14,0x00,0x82,0xAC,
98392 -0x10,0x00,0x83,0xAC,
98393 -0x02,0x80,0x02,0x3C,
98394 -0x02,0x80,0x03,0x3C,
98395 -0xC4,0x5E,0xC0,0xAC,
98396 -0x04,0x00,0xE0,0xAC,
98397 -0xCC,0x5E,0x40,0xA0,
98398 -0xD0,0x5E,0x60,0xAC,
98399 -0x01,0x80,0x02,0x3C,
98400 -0x30,0xD2,0x42,0x24,
98401 -0x7C,0x00,0x82,0xAC,
98402 -0x00,0x80,0x03,0x3C,
98403 -0x00,0x80,0x02,0x3C,
98404 -0xA4,0x10,0x63,0x24,
98405 -0x64,0x13,0x42,0x24,
98406 -0x1C,0x00,0x83,0xAC,
98407 -0x20,0x00,0x82,0xAC,
98408 -0x00,0x80,0x03,0x3C,
98409 -0x00,0x80,0x02,0x3C,
98410 -0x2C,0x16,0x63,0x24,
98411 -0xF0,0x18,0x42,0x24,
98412 -0x24,0x00,0x83,0xAC,
98413 -0x28,0x00,0x82,0xAC,
98414 -0x00,0x80,0x03,0x3C,
98415 -0x01,0x80,0x02,0x3C,
98416 -0xC8,0x2A,0x63,0x24,
98417 -0x98,0x01,0x42,0x24,
98418 -0x2C,0x00,0x83,0xAC,
98419 -0x50,0x00,0x82,0xAC,
98420 -0x00,0x80,0x03,0x3C,
98421 -0x00,0x80,0x02,0x3C,
98422 -0x10,0x1C,0x63,0x24,
98423 -0xFC,0x1D,0x42,0x24,
98424 -0x30,0x00,0x83,0xAC,
98425 -0x38,0x00,0x82,0xAC,
98426 -0x00,0x80,0x03,0x3C,
98427 -0x00,0x80,0x02,0x3C,
98428 -0x00,0x03,0x63,0x24,
98429 -0xB4,0x1B,0x42,0x24,
98430 -0x4C,0x00,0x83,0xAC,
98431 -0x08,0x00,0xE0,0x03,
98432 -0x3C,0x00,0x82,0xAC,
98433 -0x25,0xB0,0x02,0x3C,
98434 -0x08,0x00,0x42,0x34,
98435 -0x00,0x00,0x43,0x8C,
98436 -0x08,0x00,0xE0,0x03,
98437 -0x00,0x00,0x00,0x00,
98438 -0x02,0x80,0x0E,0x3C,
98439 -0x02,0x80,0x08,0x3C,
98440 -0x02,0x80,0x02,0x3C,
98441 -0x02,0x80,0x03,0x3C,
98442 -0xF8,0x03,0x4D,0x24,
98443 -0x00,0x1C,0x6C,0x24,
98444 -0x01,0x00,0x07,0x24,
98445 -0x00,0x00,0xCB,0x25,
98446 -0xFF,0xFF,0x0A,0x24,
98447 -0x00,0x04,0x09,0x25,
98448 -0x80,0x1A,0x07,0x00,
98449 -0x21,0x10,0x6B,0x00,
98450 -0x00,0x00,0x42,0xAC,
98451 -0x90,0x00,0x4A,0xAC,
98452 -0x00,0x04,0x04,0x8D,
98453 -0x01,0x00,0xE7,0x24,
98454 -0x08,0x00,0x45,0x24,
98455 -0x21,0x18,0x6D,0x00,
98456 -0x07,0x00,0xE6,0x28,
98457 -0x04,0x00,0x82,0xAC,
98458 -0x00,0x00,0x44,0xAC,
98459 -0x04,0x00,0x49,0xAC,
98460 -0x00,0x04,0x02,0xAD,
98461 -0x8C,0x00,0x40,0xAC,
98462 -0x6C,0x00,0xA3,0xAC,
98463 -0xF0,0xFF,0xC0,0x14,
98464 -0x68,0x00,0xAC,0xAC,
98465 -0x08,0x00,0xE0,0x03,
98466 -0x00,0x00,0xC9,0xAD,
98467 -0x07,0x00,0xA2,0x2C,
98468 -0x13,0x00,0x40,0x10,
98469 -0xFF,0xFF,0x07,0x24,
98470 -0x02,0x80,0x02,0x3C,
98471 -0x80,0x1A,0x05,0x00,
98472 -0x00,0x00,0x42,0x24,
98473 -0x0E,0x00,0xA0,0x10,
98474 -0x21,0x30,0x62,0x00,
98475 -0x90,0x00,0xC3,0x8C,
98476 -0xFF,0xFF,0x02,0x24,
98477 -0x0A,0x00,0x62,0x14,
98478 -0x00,0x00,0x00,0x00,
98479 -0x8C,0x00,0xC2,0x8C,
98480 -0x00,0x00,0x00,0x00,
98481 -0x06,0x00,0x40,0x14,
98482 -0x00,0x00,0x00,0x00,
98483 -0x01,0x00,0x02,0x24,
98484 -0x88,0x00,0xC4,0xAC,
98485 -0x8C,0x00,0xC2,0xAC,
98486 -0x90,0x00,0xC5,0xAC,
98487 -0x21,0x38,0xA0,0x00,
98488 -0x08,0x00,0xE0,0x03,
98489 -0x21,0x10,0xE0,0x00,
98490 -0x25,0xB0,0x06,0x3C,
98491 -0x02,0x80,0x02,0x3C,
98492 -0xE0,0xFF,0xBD,0x27,
98493 -0x68,0xA8,0x42,0x24,
98494 -0xDB,0xFF,0x03,0x24,
98495 -0x18,0x03,0xC4,0x34,
98496 -0x27,0x00,0xC5,0x34,
98497 -0x00,0x00,0x82,0xAC,
98498 -0x1C,0x00,0xBF,0xAF,
98499 -0x18,0x00,0xB2,0xAF,
98500 -0x14,0x00,0xB1,0xAF,
98501 -0x10,0x00,0xB0,0xAF,
98502 -0x00,0x00,0xA3,0xA0,
98503 -0x06,0x00,0xC2,0x34,
98504 -0x00,0x00,0x43,0x90,
98505 -0x00,0x00,0x00,0x00,
98506 -0x0F,0x00,0x63,0x30,
98507 -0x5A,0x00,0x60,0x14,
98508 -0x01,0x00,0x02,0x24,
98509 -0x1B,0x00,0xC3,0x34,
98510 -0x07,0x00,0x02,0x24,
98511 -0x00,0x00,0x62,0xA0,
98512 -0xE6,0x44,0x00,0x0C,
98513 -0x21,0x20,0x00,0x00,
98514 -0x02,0x80,0x02,0x3C,
98515 -0x30,0x1F,0x50,0x24,
98516 -0x34,0x1C,0x04,0x8E,
98517 -0xCB,0x45,0x00,0x0C,
98518 -0x10,0x00,0x05,0x24,
98519 -0x40,0x1C,0x04,0x8E,
98520 -0x10,0x00,0x05,0x3C,
98521 -0x01,0x00,0x06,0x24,
98522 -0xA9,0x45,0x00,0x0C,
98523 -0x21,0x90,0x40,0x00,
98524 -0x3C,0x1C,0x04,0x8E,
98525 -0x10,0x00,0x05,0x24,
98526 -0xA9,0x45,0x00,0x0C,
98527 -0x01,0x00,0x06,0x24,
98528 -0x58,0x1C,0x04,0x8E,
98529 -0x00,0x04,0x05,0x24,
98530 -0xA9,0x45,0x00,0x0C,
98531 -0x21,0x30,0x00,0x00,
98532 -0x58,0x1C,0x04,0x8E,
98533 -0x00,0x08,0x05,0x24,
98534 -0xA9,0x45,0x00,0x0C,
98535 -0x21,0x30,0x00,0x00,
98536 -0x02,0x80,0x05,0x3C,
98537 -0xEC,0xD9,0xA5,0x24,
98538 -0x21,0x20,0x00,0x00,
98539 -0x9F,0x47,0x00,0x0C,
98540 -0xCA,0x00,0x06,0x24,
98541 -0x31,0x00,0x40,0x10,
98542 -0x21,0x18,0x00,0x00,
98543 -0x02,0x80,0x02,0x3C,
98544 -0xE7,0x5D,0x43,0x90,
98545 -0x01,0x00,0x11,0x24,
98546 -0x57,0x00,0x71,0x10,
98547 -0x02,0x80,0x05,0x3C,
98548 -0x02,0x80,0x02,0x3C,
98549 -0x4A,0xF3,0x43,0x90,
98550 -0x00,0x00,0x00,0x00,
98551 -0x58,0x00,0x71,0x10,
98552 -0x02,0x80,0x05,0x3C,
98553 -0x34,0x1C,0x04,0x8E,
98554 -0x21,0x30,0x40,0x02,
98555 -0x10,0x00,0x05,0x24,
98556 -0xA9,0x45,0x00,0x0C,
98557 -0x02,0x80,0x11,0x3C,
98558 -0xDE,0x5D,0x23,0x92,
98559 -0x11,0x00,0x02,0x24,
98560 -0x2E,0x00,0x62,0x10,
98561 -0x00,0x08,0x04,0x24,
98562 -0xE6,0x44,0x00,0x0C,
98563 -0x01,0x00,0x04,0x24,
98564 -0x34,0x1C,0x04,0x8E,
98565 -0xCB,0x45,0x00,0x0C,
98566 -0x10,0x00,0x05,0x3C,
98567 -0x40,0x1C,0x04,0x8E,
98568 -0x10,0x00,0x05,0x3C,
98569 -0x01,0x00,0x06,0x24,
98570 -0xA9,0x45,0x00,0x0C,
98571 -0x21,0x90,0x40,0x00,
98572 -0x3C,0x1C,0x04,0x8E,
98573 -0x10,0x00,0x05,0x24,
98574 -0xA9,0x45,0x00,0x0C,
98575 -0x01,0x00,0x06,0x24,
98576 -0x58,0x1C,0x04,0x8E,
98577 -0x00,0x04,0x05,0x24,
98578 -0xA9,0x45,0x00,0x0C,
98579 -0x21,0x30,0x00,0x00,
98580 -0x58,0x1C,0x04,0x8E,
98581 -0x00,0x08,0x05,0x24,
98582 -0xA9,0x45,0x00,0x0C,
98583 -0x21,0x30,0x00,0x00,
98584 -0x02,0x80,0x05,0x3C,
98585 -0x94,0xD9,0xA5,0x24,
98586 -0x01,0x00,0x04,0x24,
98587 -0x9F,0x47,0x00,0x0C,
98588 -0x16,0x00,0x06,0x24,
98589 -0x0C,0x00,0x40,0x14,
98590 -0x21,0x18,0x00,0x00,
98591 -0x1C,0x00,0xBF,0x8F,
98592 -0x18,0x00,0xB2,0x8F,
98593 -0x14,0x00,0xB1,0x8F,
98594 -0x10,0x00,0xB0,0x8F,
98595 -0x21,0x10,0x60,0x00,
98596 -0x08,0x00,0xE0,0x03,
98597 -0x20,0x00,0xBD,0x27,
98598 -0xA9,0xFF,0x62,0x14,
98599 -0x1F,0x00,0xC3,0x34,
98600 -0x2F,0x6A,0x00,0x08,
98601 -0x07,0x00,0x02,0x24,
98602 -0x34,0x1C,0x04,0x8E,
98603 -0x21,0x30,0x40,0x02,
98604 -0xA9,0x45,0x00,0x0C,
98605 -0x10,0x00,0x05,0x3C,
98606 -0x00,0x08,0x04,0x24,
98607 -0x00,0x01,0x05,0x3C,
98608 -0xA9,0x45,0x00,0x0C,
98609 -0x01,0x00,0x06,0x24,
98610 -0x00,0x08,0x04,0x24,
98611 -0x00,0x02,0x05,0x3C,
98612 -0xA9,0x45,0x00,0x0C,
98613 -0x01,0x00,0x06,0x24,
98614 -0xDE,0x5D,0x23,0x92,
98615 -0x11,0x00,0x02,0x24,
98616 -0x1D,0x00,0x62,0x10,
98617 -0x00,0x08,0x04,0x24,
98618 -0xE6,0x44,0x00,0x0C,
98619 -0x21,0x20,0x00,0x00,
98620 -0x0F,0x00,0x05,0x3C,
98621 -0x0C,0x00,0x06,0x3C,
98622 -0xFF,0xFF,0xA5,0x34,
98623 -0x00,0xB4,0xC6,0x34,
98624 -0x5F,0x47,0x00,0x0C,
98625 -0x08,0x00,0x04,0x24,
98626 -0x1C,0x00,0xBF,0x8F,
98627 -0x18,0x00,0xB2,0x8F,
98628 -0x14,0x00,0xB1,0x8F,
98629 -0x10,0x00,0xB0,0x8F,
98630 -0x01,0x00,0x03,0x24,
98631 -0x21,0x10,0x60,0x00,
98632 -0x08,0x00,0xE0,0x03,
98633 -0x20,0x00,0xBD,0x27,
98634 -0x84,0xD8,0xA5,0x24,
98635 -0x21,0x20,0x00,0x00,
98636 -0x9F,0x47,0x00,0x0C,
98637 -0x16,0x00,0x06,0x24,
98638 -0x55,0x6A,0x00,0x08,
98639 -0x02,0x80,0x02,0x3C,
98640 -0xDC,0xD8,0xA5,0x24,
98641 -0x21,0x20,0x00,0x00,
98642 -0x9F,0x47,0x00,0x0C,
98643 -0x16,0x00,0x06,0x24,
98644 -0x59,0x6A,0x00,0x08,
98645 -0x00,0x00,0x00,0x00,
98646 -0x00,0xFF,0x05,0x3C,
98647 -0xA9,0x45,0x00,0x0C,
98648 -0x03,0x00,0x06,0x24,
98649 -0x9A,0x6A,0x00,0x08,
98650 -0x00,0x00,0x00,0x00,
98651 -0x08,0x00,0xE0,0x03,
98652 -0x00,0x00,0x00,0x00,
98653 -0xE8,0xFF,0xBD,0x27,
98654 -0x10,0x00,0xBF,0xAF,
98655 -0x02,0x80,0x02,0x3C,
98656 -0x61,0x5A,0x47,0x90,
98657 -0x02,0x80,0x04,0x3C,
98658 -0x02,0x80,0x05,0x3C,
98659 -0x03,0x00,0x03,0x24,
98660 -0x1E,0x3B,0x84,0x24,
98661 -0xAC,0xE3,0xA5,0x24,
98662 -0x0F,0x00,0xE3,0x10,
98663 -0x0D,0x00,0x06,0x24,
98664 -0x02,0x80,0x04,0x3C,
98665 -0x02,0x80,0x05,0x3C,
98666 -0x1E,0x3B,0x84,0x24,
98667 -0x5C,0xE3,0xA5,0x24,
98668 -0x10,0x52,0x00,0x0C,
98669 -0x0D,0x00,0x06,0x24,
98670 -0x02,0x80,0x04,0x3C,
98671 -0x02,0x80,0x05,0x3C,
98672 -0x10,0x00,0xBF,0x8F,
98673 -0x2B,0x3B,0x84,0x24,
98674 -0x6C,0xE3,0xA5,0x24,
98675 -0x0D,0x00,0x06,0x24,
98676 -0x10,0x52,0x00,0x08,
98677 -0x18,0x00,0xBD,0x27,
98678 -0x10,0x52,0x00,0x0C,
98679 -0x00,0x00,0x00,0x00,
98680 -0x02,0x80,0x04,0x3C,
98681 -0x02,0x80,0x05,0x3C,
98682 -0x10,0x00,0xBF,0x8F,
98683 -0x2B,0x3B,0x84,0x24,
98684 -0x9C,0xE3,0xA5,0x24,
98685 -0x0D,0x00,0x06,0x24,
98686 -0x10,0x52,0x00,0x08,
98687 -0x18,0x00,0xBD,0x27,
98688 -0xE0,0xFF,0xBD,0x27,
98689 -0x14,0x00,0xB1,0xAF,
98690 -0x10,0x00,0xB0,0xAF,
98691 -0x02,0x80,0x11,0x3C,
98692 -0x02,0x80,0x05,0x3C,
98693 -0x02,0x80,0x10,0x3C,
98694 -0x30,0x1F,0x10,0x26,
98695 -0x64,0x5A,0x24,0x26,
98696 -0x14,0xDD,0xA5,0x24,
98697 -0x34,0x00,0x06,0x24,
98698 -0x18,0x00,0xBF,0xAF,
98699 -0x10,0x52,0x00,0x0C,
98700 -0x64,0x5A,0x31,0x26,
98701 -0xBD,0x6A,0x00,0x0C,
98702 -0x68,0x3B,0x11,0xAE,
98703 -0x02,0x00,0x11,0x24,
98704 -0x02,0x80,0x04,0x3C,
98705 -0x00,0x80,0x06,0x3C,
98706 -0xA0,0x38,0x11,0xA2,
98707 -0xBC,0x57,0x84,0x24,
98708 -0xFC,0x64,0xC6,0x24,
98709 -0x21,0x28,0x00,0x00,
98710 -0xA2,0x23,0x00,0x0C,
98711 -0x98,0x38,0x00,0xAE,
98712 -0x02,0x80,0x04,0x3C,
98713 -0x01,0x80,0x06,0x3C,
98714 -0xBC,0x38,0x11,0xA2,
98715 -0xD8,0x57,0x84,0x24,
98716 -0x0C,0x31,0xC6,0x24,
98717 -0x21,0x28,0x00,0x00,
98718 -0xA2,0x23,0x00,0x0C,
98719 -0xB4,0x38,0x00,0xAE,
98720 -0x02,0x80,0x04,0x3C,
98721 -0x01,0x80,0x06,0x3C,
98722 -0xD8,0x38,0x11,0xA2,
98723 -0xF4,0x57,0x84,0x24,
98724 -0xC0,0x2E,0xC6,0x24,
98725 -0x21,0x28,0x00,0x00,
98726 -0xA2,0x23,0x00,0x0C,
98727 -0xD0,0x38,0x00,0xAE,
98728 -0x02,0x80,0x04,0x3C,
98729 -0x01,0x80,0x06,0x3C,
98730 -0xF4,0x38,0x11,0xA2,
98731 -0x10,0x58,0x84,0x24,
98732 -0x14,0x25,0xC6,0x24,
98733 -0x21,0x28,0x00,0x00,
98734 -0xA2,0x23,0x00,0x0C,
98735 -0xEC,0x38,0x00,0xAE,
98736 -0x02,0x80,0x04,0x3C,
98737 -0x00,0x80,0x06,0x3C,
98738 -0x10,0x39,0x11,0xA2,
98739 -0x2C,0x58,0x84,0x24,
98740 -0x58,0x64,0xC6,0x24,
98741 -0x21,0x28,0x00,0x00,
98742 -0xA2,0x23,0x00,0x0C,
98743 -0x08,0x39,0x00,0xAE,
98744 -0x02,0x80,0x04,0x3C,
98745 -0x00,0x80,0x06,0x3C,
98746 -0x48,0x39,0x11,0xA2,
98747 -0x40,0x39,0x00,0xAE,
98748 -0x64,0x58,0x84,0x24,
98749 -0x38,0x3B,0xC6,0x24,
98750 -0xA2,0x23,0x00,0x0C,
98751 -0x21,0x28,0x00,0x00,
98752 -0x02,0x80,0x02,0x3C,
98753 -0x49,0xF3,0x43,0x90,
98754 -0x18,0x00,0xBF,0x8F,
98755 -0x14,0x00,0xB1,0x8F,
98756 -0x9C,0x3E,0x03,0xA2,
98757 -0x10,0x00,0xB0,0x8F,
98758 -0x08,0x00,0xE0,0x03,
98759 -0x20,0x00,0xBD,0x27,
98760 -0x03,0x80,0x05,0x3C,
98761 -0x00,0x80,0xA5,0x24,
98762 -0x40,0x10,0x0D,0x3C,
98763 -0xFF,0xFF,0xA5,0x30,
98764 -0x02,0x80,0x02,0x3C,
98765 -0x30,0x1F,0x42,0x24,
98766 -0x25,0xC8,0xAD,0x00,
98767 -0x38,0x37,0x59,0xAC,
98768 -0x00,0x01,0x39,0x27,
98769 -0xE0,0xFF,0xBD,0x27,
98770 -0x44,0x37,0x59,0xAC,
98771 -0x00,0x01,0x39,0x27,
98772 -0x1C,0x00,0xB7,0xAF,
98773 -0x18,0x00,0xB6,0xAF,
98774 -0x14,0x00,0xB5,0xAF,
98775 -0x10,0x00,0xB4,0xAF,
98776 -0x0C,0x00,0xB3,0xAF,
98777 -0x08,0x00,0xB2,0xAF,
98778 -0x04,0x00,0xB1,0xAF,
98779 -0x00,0x00,0xB0,0xAF,
98780 -0x50,0x37,0x59,0xAC,
98781 -0x00,0x01,0x39,0x27,
98782 -0x5C,0x37,0x59,0xAC,
98783 -0xAA,0x1B,0x44,0x90,
98784 -0x00,0x01,0x39,0x27,
98785 -0x68,0x37,0x59,0xAC,
98786 -0x00,0x01,0x39,0x27,
98787 -0x74,0x37,0x59,0xAC,
98788 -0x20,0xB0,0x06,0x3C,
98789 -0x44,0x37,0x48,0x8C,
98790 -0x50,0x37,0x49,0x8C,
98791 -0x5C,0x37,0x4A,0x8C,
98792 -0x68,0x37,0x4B,0x8C,
98793 -0x74,0x37,0x4C,0x8C,
98794 -0x00,0x22,0x04,0x00,
98795 -0x00,0x01,0xC7,0x34,
98796 -0xFF,0x1F,0x03,0x3C,
98797 -0x00,0x01,0x39,0x27,
98798 -0xFF,0xFF,0x63,0x34,
98799 -0x21,0x38,0x87,0x00,
98800 -0x21,0x20,0x86,0x00,
98801 -0x24,0x38,0xE3,0x00,
98802 -0x20,0x10,0x06,0x3C,
98803 -0x24,0x20,0x83,0x00,
98804 -0x80,0x37,0x59,0xAC,
98805 -0x21,0x78,0x20,0x03,
98806 -0x25,0x28,0xAD,0x00,
98807 -0x25,0xB0,0x0E,0x3C,
98808 -0x00,0x01,0x39,0x27,
98809 -0x34,0x37,0x45,0xAC,
98810 -0x40,0x37,0x48,0xAC,
98811 -0x4C,0x37,0x49,0xAC,
98812 -0x58,0x37,0x4A,0xAC,
98813 -0xF8,0x36,0x44,0xAC,
98814 -0x64,0x37,0x4B,0xAC,
98815 -0x04,0x37,0x47,0xAC,
98816 -0x70,0x37,0x4C,0xAC,
98817 -0xAC,0x00,0xC3,0x35,
98818 -0xCC,0x36,0x46,0xAC,
98819 -0xC8,0x36,0x46,0xAC,
98820 -0xD8,0x36,0x46,0xAC,
98821 -0xD4,0x36,0x46,0xAC,
98822 -0xE4,0x36,0x46,0xAC,
98823 -0x8C,0x37,0x59,0xAC,
98824 -0xFC,0x36,0x44,0xAC,
98825 -0x08,0x37,0x47,0xAC,
98826 -0x7C,0x37,0x4F,0xAC,
98827 -0xE0,0x36,0x46,0xAC,
98828 -0xF0,0x36,0x46,0xAC,
98829 -0xEC,0x36,0x46,0xAC,
98830 -0x14,0x37,0x46,0xAC,
98831 -0x10,0x37,0x46,0xAC,
98832 -0x00,0x02,0x39,0x27,
98833 -0x00,0x00,0x68,0x8C,
98834 -0xAC,0x1B,0x47,0x94,
98835 -0xA4,0x37,0x59,0xAC,
98836 -0xB0,0x00,0xC3,0x35,
98837 -0x00,0x00,0x75,0x8C,
98838 -0x21,0x10,0x05,0x3C,
98839 -0x8C,0x37,0x52,0x8C,
98840 -0x23,0x10,0x0B,0x3C,
98841 -0x22,0x10,0x0F,0x3C,
98842 -0x02,0x80,0x14,0x3C,
98843 -0x02,0x80,0x16,0x3C,
98844 -0x02,0x80,0x17,0x3C,
98845 -0x02,0x80,0x18,0x3C,
98846 -0x00,0x80,0xA4,0x34,
98847 -0x21,0x98,0x20,0x03,
98848 -0x23,0x20,0x87,0x00,
98849 -0x00,0x04,0x39,0x27,
98850 -0x24,0x10,0x07,0x3C,
98851 -0x9C,0x57,0x8A,0x26,
98852 -0xA4,0x57,0xC9,0x26,
98853 -0xAC,0x57,0xEC,0x26,
98854 -0xB4,0x57,0x0D,0x27,
98855 -0x00,0x04,0x70,0x35,
98856 -0x01,0x00,0x08,0x25,
98857 -0x00,0x40,0xF1,0x35,
98858 -0x00,0x01,0xCE,0x35,
98859 -0x01,0x00,0x03,0x24,
98860 -0x88,0x37,0x52,0xAC,
98861 -0x91,0x37,0x43,0xA0,
98862 -0xA0,0x37,0x53,0xAC,
98863 -0x08,0x38,0x50,0xAC,
98864 -0xCC,0x37,0x48,0xAC,
98865 -0xD8,0x37,0x44,0xAC,
98866 -0xFC,0x37,0x51,0xAC,
98867 -0xF0,0x37,0x55,0xAC,
98868 -0x00,0x00,0xC7,0xAD,
98869 -0xEC,0x37,0x47,0xAC,
98870 -0x0C,0x38,0x46,0xAC,
98871 -0x20,0x37,0x46,0xAC,
98872 -0x1C,0x37,0x46,0xAC,
98873 -0xAA,0x37,0x40,0xA4,
98874 -0xA9,0x37,0x40,0xA0,
98875 -0xA8,0x37,0x40,0xA0,
98876 -0x00,0x38,0x4B,0xAC,
98877 -0x04,0x38,0x4B,0xAC,
98878 -0xC4,0x37,0x45,0xAC,
98879 -0xC8,0x37,0x45,0xAC,
98880 -0xD0,0x37,0x45,0xAC,
98881 -0xD4,0x37,0x45,0xAC,
98882 -0xF4,0x37,0x4F,0xAC,
98883 -0xF8,0x37,0x4F,0xAC,
98884 -0xE8,0x37,0x47,0xAC,
98885 -0x10,0x38,0x46,0xAC,
98886 -0x1C,0x38,0x59,0xAC,
98887 -0x18,0x38,0x59,0xAC,
98888 -0x04,0x00,0x4A,0xAD,
98889 -0x9C,0x57,0x8A,0xAE,
98890 -0x04,0x00,0x8C,0xAD,
98891 -0xA4,0x57,0xC9,0xAE,
98892 -0x04,0x00,0xAD,0xAD,
98893 -0xAC,0x57,0xEC,0xAE,
98894 -0xB4,0x57,0x0D,0xAF,
98895 -0x04,0x00,0x29,0xAD,
98896 -0x02,0x80,0x02,0x3C,
98897 -0x00,0x1C,0x43,0x24,
98898 -0x01,0x00,0x05,0x24,
98899 -0x21,0x20,0x20,0x01,
98900 -0x0F,0x00,0x06,0x24,
98901 -0x21,0x10,0x80,0x00,
98902 -0xFF,0xFF,0xC6,0x24,
98903 -0x08,0x00,0x79,0xAC,
98904 -0x00,0x00,0x63,0xAC,
98905 -0x10,0x00,0x65,0xAC,
98906 -0x00,0x00,0x69,0xAC,
98907 -0x21,0x20,0x60,0x00,
98908 -0x04,0x00,0x62,0xAC,
98909 -0x00,0x00,0x43,0xAC,
98910 -0x00,0x01,0x39,0x27,
98911 -0xF5,0xFF,0xC1,0x04,
98912 -0x18,0x00,0x63,0x24,
98913 -0x02,0x80,0x02,0x3C,
98914 -0xAC,0x57,0x48,0x24,
98915 -0x02,0x80,0x03,0x3C,
98916 -0x02,0x80,0x02,0x3C,
98917 -0x04,0x00,0x07,0x8D,
98918 -0x80,0x1D,0x4B,0x24,
98919 -0x04,0x00,0x24,0xAD,
98920 -0x00,0x1C,0x6A,0x24,
98921 -0x02,0x00,0x09,0x24,
98922 -0x21,0x28,0x00,0x00,
98923 -0x0F,0x00,0x06,0x24,
98924 -0x21,0x20,0xAB,0x00,
98925 -0x21,0x10,0xAA,0x00,
98926 -0xFF,0xFF,0xC6,0x24,
98927 -0x88,0x01,0x59,0xAC,
98928 -0x90,0x01,0x49,0xAC,
98929 -0x18,0x00,0xA5,0x24,
98930 -0x00,0x00,0x88,0xAC,
98931 -0x04,0x00,0x87,0xAC,
98932 -0x00,0x00,0xE4,0xAC,
98933 -0x00,0x02,0x39,0x27,
98934 -0xF5,0xFF,0xC1,0x04,
98935 -0x21,0x38,0x80,0x00,
98936 -0x02,0x80,0x02,0x3C,
98937 -0xB4,0x57,0x49,0x24,
98938 -0x02,0x80,0x03,0x3C,
98939 -0x02,0x80,0x02,0x3C,
98940 -0x04,0x00,0x27,0x8D,
98941 -0x00,0x1F,0x4B,0x24,
98942 -0x04,0x00,0x04,0xAD,
98943 -0x00,0x1C,0x6A,0x24,
98944 -0x03,0x00,0x08,0x24,
98945 -0x21,0x28,0x00,0x00,
98946 -0x01,0x00,0x06,0x24,
98947 -0x21,0x20,0xAB,0x00,
98948 -0x21,0x10,0xAA,0x00,
98949 -0xFF,0xFF,0xC6,0x24,
98950 -0x08,0x03,0x59,0xAC,
98951 -0x10,0x03,0x48,0xAC,
98952 -0x18,0x00,0xA5,0x24,
98953 -0x00,0x00,0x89,0xAC,
98954 -0x04,0x00,0x87,0xAC,
98955 -0x00,0x00,0xE4,0xAC,
98956 -0x00,0x08,0x39,0x27,
98957 -0xF5,0xFF,0xC1,0x04,
98958 -0x21,0x38,0x80,0x00,
98959 -0x1C,0x00,0xB7,0x8F,
98960 -0x18,0x00,0xB6,0x8F,
98961 -0x14,0x00,0xB5,0x8F,
98962 -0x10,0x00,0xB4,0x8F,
98963 -0x0C,0x00,0xB3,0x8F,
98964 -0x08,0x00,0xB2,0x8F,
98965 -0x04,0x00,0xB1,0x8F,
98966 -0x00,0x00,0xB0,0x8F,
98967 -0x20,0x00,0xBD,0x27,
98968 -0x08,0x00,0xE0,0x03,
98969 -0x04,0x00,0x24,0xAD,
98970 -0xD0,0xFF,0xBD,0x27,
98971 -0x02,0x80,0x02,0x3C,
98972 -0x20,0x00,0xB2,0xAF,
98973 -0x02,0x80,0x03,0x3C,
98974 -0x78,0xE8,0x52,0x24,
98975 -0x02,0x80,0x02,0x3C,
98976 -0x28,0x00,0xB4,0xAF,
98977 -0x24,0x00,0xB3,0xAF,
98978 -0x1C,0x00,0xB1,0xAF,
98979 -0x18,0x00,0xB0,0xAF,
98980 -0x2C,0x00,0xBF,0xAF,
98981 -0x04,0xE8,0x73,0x24,
98982 -0x30,0x1F,0x50,0x24,
98983 -0x21,0x88,0x00,0x00,
98984 -0x02,0x80,0x14,0x3C,
98985 -0xDD,0x59,0x00,0x0C,
98986 -0x21,0x20,0x20,0x02,
98987 -0x1C,0x24,0x05,0x8E,
98988 -0x6C,0x00,0x66,0x8E,
98989 -0xE4,0xE7,0x82,0x26,
98990 -0x6C,0x00,0x43,0x8E,
98991 -0x1B,0x00,0x44,0x90,
98992 -0xFF,0xF1,0x02,0x24,
98993 -0x21,0x18,0x66,0x00,
98994 -0x24,0x28,0xA2,0x00,
98995 -0x00,0x21,0x04,0x00,
98996 -0x42,0x18,0x03,0x00,
98997 -0x00,0x02,0xA5,0x34,
98998 -0xE8,0x23,0x03,0xAE,
98999 -0x0C,0x24,0x04,0xAE,
99000 -0x1C,0x24,0x05,0xAE,
99001 -0x10,0x24,0x04,0xAE,
99002 -0x21,0x30,0x00,0x00,
99003 -0x21,0x10,0x06,0x02,
99004 -0x01,0x00,0xC6,0x24,
99005 -0x1D,0x00,0xC3,0x28,
99006 -0x3D,0x24,0x40,0xA0,
99007 -0x20,0x24,0x40,0xA0,
99008 -0xFA,0xFF,0x60,0x14,
99009 -0x5A,0x24,0x40,0xA0,
99010 -0x01,0x00,0x31,0x26,
99011 -0x20,0x00,0x22,0x2A,
99012 -0x78,0x24,0x00,0xAE,
99013 -0xE3,0xFF,0x40,0x14,
99014 -0x94,0x00,0x10,0x26,
99015 -0x02,0x80,0x02,0x3C,
99016 -0x02,0x80,0x03,0x3C,
99017 -0x30,0x1F,0x4B,0x24,
99018 -0x02,0x80,0x02,0x3C,
99019 -0x78,0xE8,0x6F,0x24,
99020 -0x04,0xE8,0x4D,0x24,
99021 -0x02,0x80,0x03,0x3C,
99022 -0x02,0x80,0x02,0x3C,
99023 -0xE4,0xE7,0x6E,0x24,
99024 -0xC4,0xE7,0x4C,0x24,
99025 -0x21,0x88,0x00,0x00,
99026 -0x80,0x18,0x11,0x00,
99027 -0x21,0x20,0x6D,0x00,
99028 -0x21,0x10,0x6F,0x00,
99029 -0x21,0x28,0x2E,0x02,
99030 -0x21,0x30,0x2C,0x02,
99031 -0x00,0x00,0x88,0x8C,
99032 -0x00,0x00,0xA9,0x90,
99033 -0x00,0x00,0xC7,0x90,
99034 -0x00,0x00,0x4A,0x8C,
99035 -0x21,0x10,0x2B,0x02,
99036 -0x01,0x00,0x31,0x26,
99037 -0x21,0x18,0x6B,0x00,
99038 -0x1D,0x00,0x24,0x2A,
99039 -0x60,0x05,0x68,0xAC,
99040 -0x3E,0x05,0x47,0xA0,
99041 -0xD4,0x05,0x6A,0xAC,
99042 -0xEF,0xFF,0x80,0x14,
99043 -0x04,0x05,0x49,0xA0,
99044 -0x02,0x80,0x02,0x3C,
99045 -0x30,0x1F,0x4A,0x24,
99046 -0x02,0x80,0x03,0x3C,
99047 -0x02,0x80,0x02,0x3C,
99048 -0xA0,0xE6,0x6B,0x24,
99049 -0x40,0xE5,0x4C,0x24,
99050 -0x21,0x88,0x00,0x00,
99051 -0x21,0x48,0x00,0x00,
99052 -0x21,0x30,0x00,0x00,
99053 -0x21,0x40,0x2A,0x01,
99054 -0x21,0x38,0x2B,0x01,
99055 -0x21,0x10,0xE6,0x00,
99056 -0x91,0x00,0x44,0x90,
99057 -0x00,0x00,0x45,0x90,
99058 -0x21,0x18,0x06,0x01,
99059 -0x01,0x00,0xC6,0x24,
99060 -0x05,0x00,0xC2,0x28,
99061 -0x39,0x04,0x64,0xA0,
99062 -0xF8,0xFF,0x40,0x14,
99063 -0xA8,0x03,0x65,0xA0,
99064 -0x21,0x10,0x2C,0x02,
99065 -0x1D,0x00,0x44,0x90,
99066 -0x00,0x00,0x45,0x90,
99067 -0x21,0x18,0x2A,0x02,
99068 -0x01,0x00,0x31,0x26,
99069 -0x1D,0x00,0x22,0x2A,
99070 -0xE7,0x04,0x64,0xA0,
99071 -0xCA,0x04,0x65,0xA0,
99072 -0xEB,0xFF,0x40,0x14,
99073 -0x05,0x00,0x29,0x25,
99074 -0x52,0x00,0x02,0x24,
99075 -0x10,0x00,0xA2,0xA3,
99076 -0x41,0x00,0x03,0x24,
99077 -0x4D,0x00,0x02,0x24,
99078 -0x02,0x80,0x07,0x3C,
99079 -0x64,0xF3,0xE7,0x24,
99080 -0x11,0x00,0xA3,0xA3,
99081 -0x12,0x00,0xA2,0xA3,
99082 -0xE8,0x03,0x03,0x24,
99083 -0x01,0x00,0x02,0x24,
99084 -0x01,0x80,0x06,0x3C,
99085 -0x10,0x00,0xA5,0x27,
99086 -0x21,0x20,0xE0,0x00,
99087 -0xDC,0x93,0xC6,0x24,
99088 -0x0C,0x00,0xE3,0xAC,
99089 -0x14,0x00,0xE2,0xA0,
99090 -0xA2,0x23,0x00,0x0C,
99091 -0x13,0x00,0xA0,0xA3,
99092 -0x2C,0x00,0xBF,0x8F,
99093 -0x28,0x00,0xB4,0x8F,
99094 -0x24,0x00,0xB3,0x8F,
99095 -0x20,0x00,0xB2,0x8F,
99096 -0x1C,0x00,0xB1,0x8F,
99097 -0x18,0x00,0xB0,0x8F,
99098 -0x08,0x00,0xE0,0x03,
99099 -0x30,0x00,0xBD,0x27,
99100 -0x90,0xFF,0xBD,0x27,
99101 -0x48,0x00,0xB0,0xAF,
99102 -0x25,0xB0,0x10,0x3C,
99103 -0x6C,0x00,0xBF,0xAF,
99104 -0x68,0x00,0xBE,0xAF,
99105 -0x64,0x00,0xB7,0xAF,
99106 -0x58,0x00,0xB4,0xAF,
99107 -0x54,0x00,0xB3,0xAF,
99108 -0x50,0x00,0xB2,0xAF,
99109 -0x4C,0x00,0xB1,0xAF,
99110 -0x60,0x00,0xB6,0xAF,
99111 -0x5C,0x00,0xB5,0xAF,
99112 -0xE0,0x0E,0x02,0x36,
99113 -0x21,0x20,0x40,0x00,
99114 -0x00,0x00,0x42,0x8C,
99115 -0xDC,0x0E,0x12,0x36,
99116 -0x70,0x0E,0x13,0x36,
99117 -0x10,0x00,0xA2,0xAF,
99118 -0x00,0x00,0x42,0x8E,
99119 -0x78,0x0E,0x1E,0x36,
99120 -0x7C,0x0E,0x14,0x36,
99121 -0x14,0x00,0xA2,0xAF,
99122 -0x00,0x00,0x63,0x8E,
99123 -0x25,0xB0,0x02,0x3C,
99124 -0x74,0x0E,0x42,0x34,
99125 -0x18,0x00,0xA3,0xAF,
99126 -0x00,0x00,0x42,0x8C,
99127 -0xD4,0x0E,0x10,0x36,
99128 -0xED,0x3F,0x11,0x3C,
99129 -0x1C,0x00,0xA2,0xAF,
99130 -0x00,0x00,0xC3,0x8F,
99131 -0xFB,0x92,0x25,0x36,
99132 -0x25,0xB0,0x17,0x3C,
99133 -0x20,0x00,0xA3,0xAF,
99134 -0x00,0x00,0x82,0x8E,
99135 -0x25,0xB0,0x03,0x3C,
99136 -0x80,0x0E,0x63,0x34,
99137 -0x24,0x00,0xA2,0xAF,
99138 -0x00,0x00,0x63,0x8C,
99139 -0x25,0xB0,0x02,0x3C,
99140 -0x84,0x0E,0x42,0x34,
99141 -0x28,0x00,0xA3,0xAF,
99142 -0x00,0x00,0x42,0x8C,
99143 -0x25,0xB0,0x03,0x3C,
99144 -0x88,0x0E,0x63,0x34,
99145 -0x2C,0x00,0xA2,0xAF,
99146 -0x00,0x00,0x63,0x8C,
99147 -0x25,0xB0,0x02,0x3C,
99148 -0x8C,0x0E,0x42,0x34,
99149 -0x30,0x00,0xA3,0xAF,
99150 -0x00,0x00,0x42,0x8C,
99151 -0x25,0xB0,0x03,0x3C,
99152 -0xD0,0x0E,0x63,0x34,
99153 -0x34,0x00,0xA2,0xAF,
99154 -0x00,0x00,0x63,0x8C,
99155 -0x00,0x00,0x00,0x00,
99156 -0x38,0x00,0xA3,0xAF,
99157 -0x00,0x00,0x02,0x8E,
99158 -0x25,0xB0,0x03,0x3C,
99159 -0xD8,0x0E,0x63,0x34,
99160 -0x3C,0x00,0xA2,0xAF,
99161 -0x00,0x00,0x63,0x8C,
99162 -0x02,0x5C,0x00,0x0C,
99163 -0x40,0x00,0xA3,0xAF,
99164 -0x21,0x20,0x40,0x02,
99165 -0x02,0x5C,0x00,0x0C,
99166 -0xFB,0x92,0x25,0x36,
99167 -0x21,0x20,0x60,0x02,
99168 -0x02,0x5C,0x00,0x0C,
99169 -0xFB,0x92,0x25,0x36,
99170 -0x02,0x80,0x05,0x3C,
99171 -0xC0,0xED,0xA5,0x24,
99172 -0x00,0x00,0xA4,0x8C,
99173 -0xFB,0x92,0x25,0x36,
99174 -0x02,0x5C,0x00,0x0C,
99175 -0x00,0x01,0x13,0x3C,
99176 -0xFB,0x92,0x25,0x36,
99177 -0x02,0x5C,0x00,0x0C,
99178 -0x21,0x20,0xC0,0x03,
99179 -0xFB,0x92,0x25,0x36,
99180 -0x02,0x5C,0x00,0x0C,
99181 -0x21,0x20,0x80,0x02,
99182 -0x02,0x80,0x02,0x3C,
99183 -0xC4,0xED,0x42,0x24,
99184 -0x00,0x00,0x44,0x8C,
99185 -0xFB,0x92,0x25,0x36,
99186 -0x02,0x5C,0x00,0x0C,
99187 -0xA0,0x00,0x12,0x3C,
99188 -0x02,0x80,0x03,0x3C,
99189 -0xC8,0xED,0x63,0x24,
99190 -0x00,0x00,0x64,0x8C,
99191 -0x02,0x5C,0x00,0x0C,
99192 -0xFB,0x92,0x25,0x36,
99193 -0x02,0x80,0x05,0x3C,
99194 -0xCC,0xED,0xA5,0x24,
99195 -0x00,0x00,0xA4,0x8C,
99196 -0x02,0x5C,0x00,0x0C,
99197 -0xFB,0x92,0x25,0x36,
99198 -0x02,0x80,0x02,0x3C,
99199 -0xD0,0xED,0x42,0x24,
99200 -0x00,0x00,0x44,0x8C,
99201 -0x02,0x5C,0x00,0x0C,
99202 -0xFB,0x92,0x25,0x36,
99203 -0x02,0x80,0x03,0x3C,
99204 -0xD4,0xED,0x63,0x24,
99205 -0x00,0x00,0x64,0x8C,
99206 -0x02,0x5C,0x00,0x0C,
99207 -0xFB,0x92,0x25,0x36,
99208 -0x21,0x20,0x00,0x02,
99209 -0x02,0x5C,0x00,0x0C,
99210 -0xFB,0x92,0x25,0x36,
99211 -0x02,0x80,0x05,0x3C,
99212 -0xD8,0xED,0xA5,0x24,
99213 -0x00,0x00,0xA4,0x8C,
99214 -0xFB,0x92,0x25,0x36,
99215 -0x02,0x5C,0x00,0x0C,
99216 -0x21,0x80,0x00,0x00,
99217 -0x14,0x02,0x11,0x3C,
99218 -0x20,0x08,0xE4,0x36,
99219 -0x02,0x5C,0x00,0x0C,
99220 -0x00,0x01,0x65,0x36,
99221 -0x28,0x08,0xE4,0x36,
99222 -0x02,0x5C,0x00,0x0C,
99223 -0x00,0x01,0x65,0x36,
99224 -0x30,0x54,0x45,0x36,
99225 -0x02,0x5C,0x00,0x0C,
99226 -0x04,0x0C,0xE4,0x36,
99227 -0x54,0x22,0x00,0x0C,
99228 -0x05,0x00,0x04,0x24,
99229 -0x08,0x00,0x05,0x3C,
99230 -0xE4,0x00,0xA5,0x34,
99231 -0x02,0x5C,0x00,0x0C,
99232 -0x08,0x0C,0xE4,0x36,
99233 -0x54,0x22,0x00,0x0C,
99234 -0x05,0x00,0x04,0x24,
99235 -0x80,0x80,0x05,0x3C,
99236 -0x02,0x5C,0x00,0x0C,
99237 -0x28,0x0E,0xE4,0x36,
99238 -0x54,0x22,0x00,0x0C,
99239 -0x05,0x00,0x04,0x24,
99240 -0x02,0x01,0x25,0x36,
99241 -0x02,0x5C,0x00,0x0C,
99242 -0x40,0x0E,0xE4,0x36,
99243 -0x54,0x22,0x00,0x0C,
99244 -0x05,0x00,0x04,0x24,
99245 -0x16,0x68,0x05,0x3C,
99246 -0xC2,0x04,0xA5,0x34,
99247 -0x02,0x5C,0x00,0x0C,
99248 -0x44,0x0E,0xE4,0x36,
99249 -0x54,0x22,0x00,0x0C,
99250 -0x05,0x00,0x04,0x24,
99251 -0xD1,0x28,0x05,0x24,
99252 -0x02,0x5C,0x00,0x0C,
99253 -0x4C,0x0E,0xE4,0x36,
99254 -0x54,0x22,0x00,0x0C,
99255 -0x05,0x00,0x04,0x24,
99256 -0x02,0x01,0x25,0x36,
99257 -0x02,0x5C,0x00,0x0C,
99258 -0x60,0x0E,0xE4,0x36,
99259 -0x54,0x22,0x00,0x0C,
99260 -0x05,0x00,0x04,0x24,
99261 -0x16,0x28,0x05,0x3C,
99262 -0x05,0x0D,0xA5,0x34,
99263 -0x02,0x5C,0x00,0x0C,
99264 -0x64,0x0E,0xE4,0x36,
99265 -0x54,0x22,0x00,0x0C,
99266 -0x05,0x00,0x04,0x24,
99267 -0x00,0xFB,0x05,0x3C,
99268 -0x02,0x5C,0x00,0x0C,
99269 -0x48,0x0E,0xE4,0x36,
99270 -0x54,0x22,0x00,0x0C,
99271 -0x05,0x00,0x04,0x24,
99272 -0x00,0xF8,0x05,0x3C,
99273 -0x02,0x5C,0x00,0x0C,
99274 -0x48,0x0E,0xE4,0x36,
99275 -0x54,0x22,0x00,0x0C,
99276 -0x05,0x00,0x04,0x24,
99277 -0x25,0x22,0x00,0x0C,
99278 -0x02,0x00,0x04,0x24,
99279 -0x00,0x02,0x05,0x3C,
99280 -0xD1,0x28,0xA5,0x34,
99281 -0x02,0x5C,0x00,0x0C,
99282 -0x6C,0x0E,0xE4,0x36,
99283 -0x54,0x22,0x00,0x0C,
99284 -0x05,0x00,0x04,0x24,
99285 -0x00,0xFB,0x05,0x3C,
99286 -0x02,0x5C,0x00,0x0C,
99287 -0x48,0x0E,0xE4,0x36,
99288 -0x54,0x22,0x00,0x0C,
99289 -0x05,0x00,0x04,0x24,
99290 -0x00,0xF8,0x05,0x3C,
99291 -0x02,0x5C,0x00,0x0C,
99292 -0x48,0x0E,0xE4,0x36,
99293 -0x25,0x22,0x00,0x0C,
99294 -0x02,0x00,0x04,0x24,
99295 -0x33,0x54,0x45,0x36,
99296 -0x02,0x5C,0x00,0x0C,
99297 -0x04,0x0C,0xE4,0x36,
99298 -0x54,0x22,0x00,0x0C,
99299 -0x05,0x00,0x04,0x24,
99300 -0xE4,0x00,0x05,0x24,
99301 -0x02,0x5C,0x00,0x0C,
99302 -0x08,0x0C,0xE4,0x36,
99303 -0x54,0x22,0x00,0x0C,
99304 -0x05,0x00,0x04,0x24,
99305 -0x28,0x0E,0xE4,0x36,
99306 -0x02,0x5C,0x00,0x0C,
99307 -0x21,0x28,0x00,0x00,
99308 -0x20,0x08,0xE4,0x36,
99309 -0x02,0x5C,0x00,0x0C,
99310 -0x00,0x01,0x05,0x3C,
99311 -0x28,0x08,0xE4,0x36,
99312 -0x02,0x5C,0x00,0x0C,
99313 -0x00,0x01,0x05,0x3C,
99314 -0x25,0xB0,0x02,0x3C,
99315 -0xAC,0x0E,0x42,0x34,
99316 -0x00,0x00,0x5E,0x8C,
99317 -0x00,0xD8,0x02,0x3C,
99318 -0x24,0x10,0xC2,0x03,
99319 -0x37,0x00,0x40,0x10,
99320 -0x01,0x00,0x10,0x26,
99321 -0x0A,0x00,0x02,0x2E,
99322 -0x97,0xFF,0x40,0x14,
99323 -0x00,0x00,0x00,0x00,
99324 -0x10,0x00,0xA5,0x8F,
99325 -0x25,0xB0,0x10,0x3C,
99326 -0x02,0x5C,0x00,0x0C,
99327 -0xE0,0x0E,0x04,0x36,
99328 -0x14,0x00,0xA5,0x8F,
99329 -0x02,0x5C,0x00,0x0C,
99330 -0xDC,0x0E,0x04,0x36,
99331 -0x18,0x00,0xA5,0x8F,
99332 -0x02,0x5C,0x00,0x0C,
99333 -0x70,0x0E,0x04,0x36,
99334 -0x1C,0x00,0xA5,0x8F,
99335 -0x02,0x5C,0x00,0x0C,
99336 -0x74,0x0E,0x04,0x36,
99337 -0x20,0x00,0xA5,0x8F,
99338 -0x02,0x5C,0x00,0x0C,
99339 -0x78,0x0E,0x04,0x36,
99340 -0x24,0x00,0xA5,0x8F,
99341 -0x02,0x5C,0x00,0x0C,
99342 -0x7C,0x0E,0x04,0x36,
99343 -0x28,0x00,0xA5,0x8F,
99344 -0x02,0x5C,0x00,0x0C,
99345 -0x80,0x0E,0x04,0x36,
99346 -0x2C,0x00,0xA5,0x8F,
99347 -0x02,0x5C,0x00,0x0C,
99348 -0x84,0x0E,0x04,0x36,
99349 -0x30,0x00,0xA5,0x8F,
99350 -0x02,0x5C,0x00,0x0C,
99351 -0x88,0x0E,0x04,0x36,
99352 -0x34,0x00,0xA5,0x8F,
99353 -0x02,0x5C,0x00,0x0C,
99354 -0x8C,0x0E,0x04,0x36,
99355 -0x38,0x00,0xA5,0x8F,
99356 -0x02,0x5C,0x00,0x0C,
99357 -0xD0,0x0E,0x04,0x36,
99358 -0x3C,0x00,0xA5,0x8F,
99359 -0x02,0x5C,0x00,0x0C,
99360 -0xD4,0x0E,0x04,0x36,
99361 -0x40,0x00,0xA5,0x8F,
99362 -0x88,0x0E,0x04,0x36,
99363 -0x6C,0x00,0xBF,0x8F,
99364 -0x68,0x00,0xBE,0x8F,
99365 -0x64,0x00,0xB7,0x8F,
99366 -0x60,0x00,0xB6,0x8F,
99367 -0x5C,0x00,0xB5,0x8F,
99368 -0x58,0x00,0xB4,0x8F,
99369 -0x54,0x00,0xB3,0x8F,
99370 -0x50,0x00,0xB2,0x8F,
99371 -0x4C,0x00,0xB1,0x8F,
99372 -0x48,0x00,0xB0,0x8F,
99373 -0x02,0x5C,0x00,0x08,
99374 -0x70,0x00,0xBD,0x27,
99375 -0x80,0x0C,0xF1,0x36,
99376 -0x94,0x0E,0xE3,0x36,
99377 -0x00,0x00,0x24,0x8E,
99378 -0x00,0x00,0x62,0x8C,
99379 -0xFF,0x03,0x03,0x3C,
99380 -0xFF,0x03,0x95,0x30,
99381 -0x24,0x10,0x43,0x00,
99382 -0x02,0x14,0x02,0x00,
99383 -0x18,0x00,0x55,0x00,
99384 -0x02,0x80,0x10,0x3C,
99385 -0x30,0x1F,0x10,0x26,
99386 -0x0C,0x00,0x02,0x8E,
99387 -0x00,0xFC,0x12,0x24,
99388 -0x00,0x00,0x3E,0x8E,
99389 -0x24,0x10,0x52,0x00,
99390 -0x21,0x20,0x20,0x02,
99391 -0x24,0x30,0xD2,0x03,
99392 -0xFF,0xFF,0x13,0x3C,
99393 -0xFF,0x03,0x73,0x36,
99394 -0x12,0x18,0x00,0x00,
99395 -0x02,0x1A,0x03,0x00,
99396 -0xFF,0x03,0x63,0x30,
99397 -0x25,0x10,0x43,0x00,
99398 -0xFF,0x03,0x45,0x30,
99399 -0x25,0x28,0xC5,0x00,
99400 -0x02,0x5C,0x00,0x0C,
99401 -0x0C,0x00,0x02,0xAE,
99402 -0x54,0x22,0x00,0x0C,
99403 -0x05,0x00,0x04,0x24,
99404 -0x9C,0x0E,0xE3,0x36,
99405 -0x00,0x00,0x62,0x8C,
99406 -0xFF,0x03,0x03,0x3C,
99407 -0x0C,0x00,0x06,0x8E,
99408 -0x24,0x10,0x43,0x00,
99409 -0x02,0xB4,0x02,0x00,
99410 -0x18,0x00,0xD5,0x02,
99411 -0xF0,0xFF,0x02,0x3C,
99412 -0xFF,0x03,0x42,0x34,
99413 -0x24,0x30,0xC2,0x00,
99414 -0x00,0x00,0x3E,0x8E,
99415 -0xC0,0xFF,0x04,0x3C,
99416 -0xFF,0xFF,0x84,0x34,
99417 -0x24,0x10,0xC4,0x03,
99418 -0x21,0x20,0x20,0x02,
99419 -0xFF,0x0F,0x11,0x3C,
99420 -0xFF,0xFF,0x31,0x36,
99421 -0x12,0x18,0x00,0x00,
99422 -0x02,0x1A,0x03,0x00,
99423 -0xFF,0x03,0x63,0x30,
99424 -0x80,0x1A,0x03,0x00,
99425 -0x25,0x30,0xC3,0x00,
99426 -0x82,0x2A,0x06,0x00,
99427 -0x3F,0x00,0xA5,0x30,
99428 -0x00,0x2C,0x05,0x00,
99429 -0x0C,0x00,0x06,0xAE,
99430 -0x02,0x5C,0x00,0x0C,
99431 -0x25,0x28,0x45,0x00,
99432 -0x94,0x0C,0xE4,0x36,
99433 -0x00,0x00,0x9E,0x8C,
99434 -0x82,0x29,0x16,0x00,
99435 -0x00,0x2F,0x05,0x00,
99436 -0x24,0x10,0xD1,0x03,
99437 -0x02,0x5C,0x00,0x0C,
99438 -0x25,0x28,0x45,0x00,
99439 -0x54,0x22,0x00,0x0C,
99440 -0x05,0x00,0x04,0x24,
99441 -0x25,0xB0,0x05,0x3C,
99442 -0xA4,0x0E,0xE3,0x36,
99443 -0x14,0x0C,0xA5,0x34,
99444 -0x00,0x00,0xBE,0x8C,
99445 -0x00,0x00,0x62,0x8C,
99446 -0xFF,0x03,0x05,0x3C,
99447 -0x02,0x80,0x03,0x3C,
99448 -0xDC,0xED,0x63,0x24,
99449 -0x24,0x10,0x45,0x00,
99450 -0x00,0x00,0x64,0x8C,
99451 -0x02,0x14,0x02,0x00,
99452 -0x24,0x18,0xD2,0x03,
99453 -0x25,0xF0,0x62,0x00,
99454 -0x02,0x5C,0x00,0x0C,
99455 -0x21,0x28,0xC0,0x03,
99456 -0x25,0xB0,0x02,0x3C,
99457 -0xAC,0x0E,0x42,0x34,
99458 -0x00,0x00,0x45,0x8C,
99459 -0x3F,0x00,0x03,0x3C,
99460 -0x24,0x10,0xD3,0x03,
99461 -0x24,0x28,0xA3,0x00,
99462 -0x82,0x29,0x05,0x00,
99463 -0x25,0x28,0x45,0x00,
99464 -0x02,0x80,0x02,0x3C,
99465 -0xDC,0xED,0x42,0x24,
99466 -0x00,0x00,0x44,0x8C,
99467 -0x02,0x5C,0x00,0x0C,
99468 -0x00,0x00,0x00,0x00,
99469 -0x54,0x22,0x00,0x0C,
99470 -0x05,0x00,0x04,0x24,
99471 -0x25,0xB0,0x05,0x3C,
99472 -0xB4,0x0E,0xE3,0x36,
99473 -0x88,0x0C,0xA5,0x34,
99474 -0x00,0x00,0xA4,0x8C,
99475 -0x00,0x00,0x62,0x8C,
99476 -0xFF,0x03,0x03,0x3C,
99477 -0xFF,0x03,0x95,0x30,
99478 -0x24,0x10,0x43,0x00,
99479 -0x02,0x14,0x02,0x00,
99480 -0x18,0x00,0x55,0x00,
99481 -0x0C,0x00,0x06,0x8E,
99482 -0x00,0x00,0xBE,0x8C,
99483 -0x02,0x80,0x02,0x3C,
99484 -0x24,0x30,0xD2,0x00,
99485 -0xE0,0xED,0x42,0x24,
99486 -0x00,0x00,0x44,0x8C,
99487 -0x24,0x10,0xD2,0x03,
99488 -0x12,0x18,0x00,0x00,
99489 -0x02,0x1A,0x03,0x00,
99490 -0xFF,0x03,0x63,0x30,
99491 -0x25,0x30,0xC3,0x00,
99492 -0xFF,0x03,0xC5,0x30,
99493 -0x25,0x28,0x45,0x00,
99494 -0x02,0x5C,0x00,0x0C,
99495 -0x0C,0x00,0x06,0xAE,
99496 -0x54,0x22,0x00,0x0C,
99497 -0x05,0x00,0x04,0x24,
99498 -0xBC,0x0E,0xE2,0x36,
99499 -0x00,0x00,0x43,0x8C,
99500 -0xFF,0x03,0x05,0x3C,
99501 -0x0C,0x00,0x06,0x8E,
99502 -0x24,0x18,0x65,0x00,
99503 -0x02,0xB4,0x03,0x00,
99504 -0x18,0x00,0xD5,0x02,
99505 -0x25,0xB0,0x04,0x3C,
99506 -0x88,0x0C,0x84,0x34,
99507 -0xF0,0xFF,0x03,0x3C,
99508 -0x00,0x00,0x9E,0x8C,
99509 -0xFF,0x03,0x63,0x34,
99510 -0x24,0x30,0xC3,0x00,
99511 -0xC0,0xFF,0x04,0x3C,
99512 -0x02,0x80,0x05,0x3C,
99513 -0xFF,0xFF,0x84,0x34,
99514 -0xE0,0xED,0xA5,0x24,
99515 -0x24,0xF0,0xC4,0x03,
99516 -0x00,0x00,0xA4,0x8C,
99517 -0x44,0x00,0xBE,0xAF,
99518 -0x12,0x10,0x00,0x00,
99519 -0x02,0x12,0x02,0x00,
99520 -0xFF,0x03,0x42,0x30,
99521 -0x80,0x12,0x02,0x00,
99522 -0x25,0x30,0xC2,0x00,
99523 -0x82,0x2A,0x06,0x00,
99524 -0x3F,0x00,0xA5,0x30,
99525 -0x00,0x2C,0x05,0x00,
99526 -0x0C,0x00,0x06,0xAE,
99527 -0x02,0x5C,0x00,0x0C,
99528 -0x25,0x28,0xC5,0x03,
99529 -0x9C,0x0C,0xE4,0x36,
99530 -0x00,0x00,0x9E,0x8C,
99531 -0x82,0x29,0x16,0x00,
99532 -0x00,0x2F,0x05,0x00,
99533 -0x24,0x88,0xD1,0x03,
99534 -0x02,0x5C,0x00,0x0C,
99535 -0x25,0x28,0x25,0x02,
99536 -0x54,0x22,0x00,0x0C,
99537 -0x05,0x00,0x04,0x24,
99538 -0x25,0xB0,0x02,0x3C,
99539 -0xC4,0x0E,0xE3,0x36,
99540 -0x1C,0x0C,0x42,0x34,
99541 -0x00,0x00,0x5E,0x8C,
99542 -0x00,0x00,0x62,0x8C,
99543 -0xFF,0x03,0x05,0x3C,
99544 -0x02,0x80,0x03,0x3C,
99545 -0xE4,0xED,0x63,0x24,
99546 -0x24,0x10,0x45,0x00,
99547 -0x00,0x00,0x64,0x8C,
99548 -0x02,0x14,0x02,0x00,
99549 -0x24,0x90,0xD2,0x03,
99550 -0x25,0xF0,0x42,0x02,
99551 -0x02,0x5C,0x00,0x0C,
99552 -0x21,0x28,0xC0,0x03,
99553 -0xCC,0x0E,0xE2,0x36,
99554 -0x00,0x00,0x45,0x8C,
99555 -0x02,0x80,0x02,0x3C,
99556 -0xE4,0xED,0x42,0x24,
99557 -0x3F,0x00,0x03,0x3C,
99558 -0x00,0x00,0x44,0x8C,
99559 -0x24,0x28,0xA3,0x00,
99560 -0x24,0x98,0xD3,0x03,
99561 -0x82,0x29,0x05,0x00,
99562 -0x02,0x5C,0x00,0x0C,
99563 -0x25,0x28,0x65,0x02,
99564 -0x54,0x22,0x00,0x0C,
99565 -0x05,0x00,0x04,0x24,
99566 -0x5C,0x6D,0x00,0x08,
99567 -0x00,0x00,0x00,0x00,
99568 -0xE0,0xFF,0xBD,0x27,
99569 -0x02,0x80,0x02,0x3C,
99570 -0x42,0x00,0x03,0x24,
99571 -0x10,0x00,0xA3,0xA3,
99572 -0xF1,0x3A,0x40,0xA0,
99573 -0x4E,0x00,0x03,0x24,
99574 -0x43,0x00,0x02,0x24,
99575 -0x02,0x80,0x07,0x3C,
99576 -0x9C,0xF3,0xE7,0x24,
99577 -0x11,0x00,0xA2,0xA3,
99578 -0x12,0x00,0xA3,0xA3,
99579 -0xD0,0x07,0x02,0x24,
99580 -0x01,0x00,0x03,0x24,
99581 -0x01,0x80,0x06,0x3C,
99582 -0x10,0x00,0xA5,0x27,
99583 -0x21,0x20,0xE0,0x00,
99584 -0xDC,0xAC,0xC6,0x24,
99585 -0x0C,0x00,0xE2,0xAC,
99586 -0x14,0x00,0xE3,0xA0,
99587 -0x18,0x00,0xBF,0xAF,
99588 -0xA2,0x23,0x00,0x0C,
99589 -0x13,0x00,0xA0,0xA3,
99590 -0x18,0x00,0xBF,0x8F,
99591 -0x00,0x00,0x00,0x00,
99592 -0x08,0x00,0xE0,0x03,
99593 -0x20,0x00,0xBD,0x27,
99594 -0x02,0x80,0x02,0x3C,
99595 -0x48,0xFD,0xBD,0x27,
99596 -0xE8,0xED,0x46,0x24,
99597 -0x02,0x80,0x03,0x3C,
99598 -0xB0,0x02,0xB2,0xAF,
99599 -0xAC,0x02,0xB1,0xAF,
99600 -0xA8,0x02,0xB0,0xAF,
99601 -0x33,0x1F,0x60,0xA0,
99602 -0x21,0x38,0xA0,0x03,
99603 -0x90,0x00,0xC8,0x24,
99604 -0x00,0x00,0xC2,0x8C,
99605 -0x04,0x00,0xC3,0x8C,
99606 -0x08,0x00,0xC4,0x8C,
99607 -0x0C,0x00,0xC5,0x8C,
99608 -0x10,0x00,0xC6,0x24,
99609 -0x00,0x00,0xE2,0xAC,
99610 -0x04,0x00,0xE3,0xAC,
99611 -0x08,0x00,0xE4,0xAC,
99612 -0x0C,0x00,0xE5,0xAC,
99613 -0xF6,0xFF,0xC8,0x14,
99614 -0x10,0x00,0xE7,0x24,
99615 -0x00,0x00,0xC3,0x8C,
99616 -0x02,0x80,0x02,0x3C,
99617 -0x7C,0xEE,0x58,0x24,
99618 -0x00,0x00,0xE3,0xAC,
99619 -0x98,0x00,0xB9,0x27,
99620 -0x00,0x01,0x12,0x27,
99621 -0x01,0x00,0x02,0x93,
99622 -0x05,0x00,0x03,0x93,
99623 -0x09,0x00,0x04,0x93,
99624 -0x0D,0x00,0x05,0x93,
99625 -0x00,0x00,0x11,0x93,
99626 -0x02,0x00,0x0D,0x93,
99627 -0x04,0x00,0x10,0x93,
99628 -0x06,0x00,0x0C,0x93,
99629 -0x08,0x00,0x0F,0x93,
99630 -0x0A,0x00,0x07,0x93,
99631 -0x0C,0x00,0x0E,0x93,
99632 -0x0E,0x00,0x06,0x93,
99633 -0x03,0x00,0x08,0x93,
99634 -0x07,0x00,0x09,0x93,
99635 -0x0B,0x00,0x0A,0x93,
99636 -0x0F,0x00,0x0B,0x93,
99637 -0x00,0x12,0x02,0x00,
99638 -0x00,0x1A,0x03,0x00,
99639 -0x00,0x22,0x04,0x00,
99640 -0x00,0x2A,0x05,0x00,
99641 -0x25,0x10,0x51,0x00,
99642 -0x25,0x18,0x70,0x00,
99643 -0x25,0x20,0x8F,0x00,
99644 -0x25,0x28,0xAE,0x00,
99645 -0x00,0x6C,0x0D,0x00,
99646 -0x00,0x64,0x0C,0x00,
99647 -0x00,0x3C,0x07,0x00,
99648 -0x00,0x34,0x06,0x00,
99649 -0x25,0x68,0xA2,0x01,
99650 -0x25,0x60,0x83,0x01,
99651 -0x25,0x38,0xE4,0x00,
99652 -0x25,0x30,0xC5,0x00,
99653 -0x00,0x46,0x08,0x00,
99654 -0x00,0x4E,0x09,0x00,
99655 -0x00,0x56,0x0A,0x00,
99656 -0x00,0x5E,0x0B,0x00,
99657 -0x25,0x40,0x0D,0x01,
99658 -0x25,0x48,0x2C,0x01,
99659 -0x25,0x50,0x47,0x01,
99660 -0x25,0x58,0x66,0x01,
99661 -0x10,0x00,0x18,0x27,
99662 -0x00,0x00,0x28,0xAF,
99663 -0x04,0x00,0x29,0xAF,
99664 -0x08,0x00,0x2A,0xAF,
99665 -0x0C,0x00,0x2B,0xAF,
99666 -0xD2,0xFF,0x12,0x17,
99667 -0x10,0x00,0x39,0x27,
99668 -0x01,0x00,0x02,0x93,
99669 -0x05,0x00,0x03,0x93,
99670 -0x00,0x00,0x09,0x93,
99671 -0x02,0x00,0x04,0x93,
99672 -0x04,0x00,0x08,0x93,
99673 -0x06,0x00,0x05,0x93,
99674 -0x07,0x00,0x06,0x93,
99675 -0x03,0x00,0x07,0x93,
99676 -0x00,0x12,0x02,0x00,
99677 -0x00,0x1A,0x03,0x00,
99678 -0x25,0x10,0x49,0x00,
99679 -0x25,0x18,0x68,0x00,
99680 -0x00,0x24,0x04,0x00,
99681 -0x00,0x2C,0x05,0x00,
99682 -0x25,0x20,0x82,0x00,
99683 -0x25,0x28,0xA3,0x00,
99684 -0x00,0x3E,0x07,0x00,
99685 -0x00,0x36,0x06,0x00,
99686 -0x02,0x80,0x02,0x3C,
99687 -0x25,0x38,0xE4,0x00,
99688 -0x25,0x30,0xC5,0x00,
99689 -0x84,0xEF,0x58,0x24,
99690 -0x04,0x00,0x26,0xAF,
99691 -0x00,0x00,0x27,0xAF,
99692 -0x00,0x01,0x12,0x27,
99693 -0xA0,0x01,0xB9,0x27,
99694 -0x01,0x00,0x02,0x93,
99695 -0x05,0x00,0x03,0x93,
99696 -0x09,0x00,0x04,0x93,
99697 -0x0D,0x00,0x05,0x93,
99698 -0x00,0x00,0x11,0x93,
99699 -0x02,0x00,0x0D,0x93,
99700 -0x04,0x00,0x10,0x93,
99701 -0x06,0x00,0x0C,0x93,
99702 -0x08,0x00,0x0F,0x93,
99703 -0x0A,0x00,0x07,0x93,
99704 -0x0C,0x00,0x0E,0x93,
99705 -0x0E,0x00,0x06,0x93,
99706 -0x03,0x00,0x08,0x93,
99707 -0x07,0x00,0x09,0x93,
99708 -0x0B,0x00,0x0A,0x93,
99709 -0x0F,0x00,0x0B,0x93,
99710 -0x00,0x12,0x02,0x00,
99711 -0x00,0x1A,0x03,0x00,
99712 -0x00,0x22,0x04,0x00,
99713 -0x00,0x2A,0x05,0x00,
99714 -0x25,0x10,0x51,0x00,
99715 -0x25,0x18,0x70,0x00,
99716 -0x25,0x20,0x8F,0x00,
99717 -0x25,0x28,0xAE,0x00,
99718 -0x00,0x6C,0x0D,0x00,
99719 -0x00,0x64,0x0C,0x00,
99720 -0x00,0x3C,0x07,0x00,
99721 -0x00,0x34,0x06,0x00,
99722 -0x25,0x68,0xA2,0x01,
99723 -0x25,0x60,0x83,0x01,
99724 -0x25,0x38,0xE4,0x00,
99725 -0x25,0x30,0xC5,0x00,
99726 -0x00,0x46,0x08,0x00,
99727 -0x00,0x4E,0x09,0x00,
99728 -0x00,0x56,0x0A,0x00,
99729 -0x00,0x5E,0x0B,0x00,
99730 -0x25,0x40,0x0D,0x01,
99731 -0x25,0x48,0x2C,0x01,
99732 -0x25,0x50,0x47,0x01,
99733 -0x25,0x58,0x66,0x01,
99734 -0x10,0x00,0x18,0x27,
99735 -0x00,0x00,0x28,0xAF,
99736 -0x04,0x00,0x29,0xAF,
99737 -0x08,0x00,0x2A,0xAF,
99738 -0x0C,0x00,0x2B,0xAF,
99739 -0xD2,0xFF,0x12,0x17,
99740 -0x10,0x00,0x39,0x27,
99741 -0x01,0x00,0x02,0x93,
99742 -0x05,0x00,0x03,0x93,
99743 -0x00,0x00,0x09,0x93,
99744 -0x02,0x00,0x04,0x93,
99745 -0x04,0x00,0x08,0x93,
99746 -0x06,0x00,0x05,0x93,
99747 -0x07,0x00,0x06,0x93,
99748 -0x03,0x00,0x07,0x93,
99749 -0x00,0x12,0x02,0x00,
99750 -0x00,0x1A,0x03,0x00,
99751 -0x25,0x10,0x49,0x00,
99752 -0x25,0x18,0x68,0x00,
99753 -0x00,0x24,0x04,0x00,
99754 -0x00,0x2C,0x05,0x00,
99755 -0x25,0x20,0x82,0x00,
99756 -0x25,0x28,0xA3,0x00,
99757 -0x00,0x3E,0x07,0x00,
99758 -0x00,0x36,0x06,0x00,
99759 -0x25,0x30,0xC5,0x00,
99760 -0x25,0x38,0xE4,0x00,
99761 -0x02,0x80,0x02,0x3C,
99762 -0x04,0x00,0x26,0xAF,
99763 -0x00,0x00,0x27,0xAF,
99764 -0x30,0x1F,0x46,0x24,
99765 -0x21,0x50,0x00,0x00,
99766 -0x80,0x20,0x0A,0x00,
99767 -0x21,0x10,0x9D,0x00,
99768 -0x00,0x00,0x45,0x8C,
99769 -0x01,0x00,0x43,0x25,
99770 -0xFF,0x00,0x6A,0x30,
99771 -0x21,0x20,0x86,0x00,
99772 -0x25,0x00,0x42,0x2D,
99773 -0xF8,0xFF,0x40,0x14,
99774 -0x18,0x00,0x85,0xAC,
99775 -0x02,0x80,0x02,0x3C,
99776 -0x30,0x1F,0x4B,0x24,
99777 -0x21,0x50,0x00,0x00,
99778 -0xC0,0x10,0x0A,0x00,
99779 -0x21,0x48,0x5D,0x00,
99780 -0x21,0x38,0x00,0x00,
99781 -0x21,0x40,0x4B,0x00,
99782 -0x21,0x10,0x27,0x01,
99783 -0xA0,0x01,0x46,0x90,
99784 -0x98,0x00,0x45,0x90,
99785 -0x01,0x00,0xE4,0x24,
99786 -0x21,0x18,0x07,0x01,
99787 -0xFF,0x00,0x87,0x30,
99788 -0x08,0x00,0xE2,0x2C,
99789 -0xB4,0x01,0x66,0xA0,
99790 -0xF7,0xFF,0x40,0x14,
99791 -0xAC,0x00,0x65,0xA0,
99792 -0x01,0x00,0x42,0x25,
99793 -0xFF,0x00,0x4A,0x30,
99794 -0x21,0x00,0x43,0x2D,
99795 -0xEF,0xFF,0x60,0x14,
99796 -0xC0,0x10,0x0A,0x00,
99797 -0x08,0x00,0x64,0x8D,
99798 -0xFF,0x7F,0x07,0x3C,
99799 -0xFF,0xFF,0xE7,0x34,
99800 -0xC0,0xFF,0x02,0x24,
99801 -0x24,0x20,0x87,0x00,
99802 -0x24,0x20,0x82,0x00,
99803 -0x0C,0x00,0x84,0x34,
99804 -0xFF,0xC0,0x02,0x24,
99805 -0x24,0x20,0x82,0x00,
99806 -0xC0,0xFF,0x02,0x3C,
99807 -0xFF,0xFF,0x42,0x34,
99808 -0x00,0x18,0x84,0x34,
99809 -0xBF,0xFF,0x03,0x3C,
99810 -0x24,0x20,0x82,0x00,
99811 -0xFF,0xFF,0x63,0x34,
99812 -0x7F,0xFF,0x02,0x3C,
99813 -0x24,0x20,0x83,0x00,
99814 -0xFF,0xFF,0x42,0x34,
99815 -0x24,0x20,0x82,0x00,
99816 -0x0C,0x00,0x65,0x8D,
99817 -0x7F,0xFF,0x03,0x24,
99818 -0x40,0x40,0x84,0x34,
99819 -0xFF,0xFF,0x02,0x3C,
99820 -0x24,0x20,0x83,0x00,
99821 -0xFF,0x7F,0x42,0x34,
99822 -0xFF,0xBF,0x03,0x3C,
99823 -0x10,0x00,0x66,0x8D,
99824 -0x24,0x20,0x82,0x00,
99825 -0xFF,0xFF,0x63,0x34,
99826 -0xFF,0x9F,0x02,0x3C,
99827 -0x24,0x28,0xA3,0x00,
99828 -0xFF,0xFF,0x42,0x34,
99829 -0xFF,0x3F,0x03,0x3C,
99830 -0x24,0x20,0x82,0x00,
99831 -0xFF,0xFF,0x63,0x34,
99832 -0x12,0x00,0x02,0x24,
99833 -0xB0,0x02,0xB2,0x8F,
99834 -0xAC,0x02,0xB1,0x8F,
99835 -0xA8,0x02,0xB0,0x8F,
99836 -0x24,0x30,0xC3,0x00,
99837 -0xC7,0x02,0x62,0xA1,
99838 -0x1F,0x00,0x03,0x24,
99839 -0x01,0x00,0x02,0x24,
99840 -0x24,0x28,0xA7,0x00,
99841 -0xBE,0x02,0x63,0xA1,
99842 -0xC0,0x02,0x62,0xA1,
99843 -0xFF,0x00,0x03,0x24,
99844 -0xFF,0xFF,0x02,0x24,
99845 -0xB8,0x02,0xBD,0x27,
99846 -0x08,0x00,0x64,0xAD,
99847 -0x10,0x00,0x66,0xAD,
99848 -0x0C,0x00,0x65,0xAD,
99849 -0xC2,0x02,0x62,0xA1,
99850 -0xC4,0x02,0x63,0xA5,
99851 -0xBF,0x02,0x60,0xA1,
99852 -0x08,0x00,0xE0,0x03,
99853 -0xC6,0x02,0x60,0xA1,
99854 -0x02,0x80,0x0B,0x3C,
99855 -0x30,0x1F,0x67,0x25,
99856 -0xE0,0xFF,0xBD,0x27,
99857 -0xE6,0x02,0xE0,0xA0,
99858 -0x18,0x00,0xBF,0xAF,
99859 -0xE4,0x02,0xE8,0x8C,
99860 -0xFF,0xCF,0x02,0x3C,
99861 -0xFF,0xFF,0x42,0x34,
99862 -0x30,0x1F,0x69,0x8D,
99863 -0x24,0x40,0x02,0x01,
99864 -0xFF,0xBF,0x02,0x3C,
99865 -0xFF,0xFF,0x42,0x34,
99866 -0xF0,0xFF,0x03,0x24,
99867 -0x24,0x40,0x02,0x01,
99868 -0xFF,0x7F,0x02,0x3C,
99869 -0x24,0x48,0x23,0x01,
99870 -0xFF,0xFF,0x42,0x34,
99871 -0xFF,0xF0,0x03,0x24,
99872 -0x24,0x48,0x23,0x01,
99873 -0x24,0x40,0x02,0x01,
99874 -0x20,0x00,0x03,0x24,
99875 -0x0A,0x00,0x02,0x24,
99876 -0x30,0x1F,0x69,0xAD,
99877 -0xD2,0x02,0xE2,0xA0,
99878 -0xD7,0x02,0xE3,0xA0,
99879 -0x20,0x00,0x02,0x24,
99880 -0x00,0x01,0x03,0x24,
99881 -0xC8,0x02,0xE2,0xA4,
99882 -0xCA,0x02,0xE3,0xA4,
99883 -0x00,0x02,0x02,0x24,
99884 -0x49,0x00,0x03,0x24,
99885 -0x02,0x80,0x0A,0x3C,
99886 -0xE4,0x02,0xE8,0xAC,
99887 -0x80,0xF3,0x4A,0x25,
99888 -0xFF,0xFF,0x0D,0x34,
99889 -0x3E,0x00,0x0E,0x24,
99890 -0x1C,0x00,0x0F,0x24,
99891 -0x01,0x00,0x0C,0x24,
99892 -0x11,0x00,0xA3,0xA3,
99893 -0xCC,0x02,0xE2,0xA4,
99894 -0xD0,0x07,0x03,0x24,
99895 -0x44,0x00,0x02,0x24,
99896 -0x01,0x80,0x06,0x3C,
99897 -0x10,0x00,0xA2,0xA3,
99898 -0x10,0x00,0xA5,0x27,
99899 -0x47,0x00,0x02,0x24,
99900 -0x21,0x20,0x40,0x01,
99901 -0x94,0xAD,0xC6,0x24,
99902 -0x04,0x00,0xED,0xAC,
99903 -0xD0,0x02,0xEE,0xA0,
99904 -0xD1,0x02,0xEF,0xA0,
99905 -0x02,0x00,0xEC,0xA0,
99906 -0x0C,0x00,0x43,0xAD,
99907 -0x14,0x00,0x4C,0xA1,
99908 -0x80,0x36,0xED,0xAC,
99909 -0xCE,0x02,0xEE,0xA0,
99910 -0xCF,0x02,0xEF,0xA0,
99911 -0xD6,0x02,0xE0,0xA0,
99912 -0xD4,0x02,0xE0,0xA0,
99913 -0x12,0x00,0xA2,0xA3,
99914 -0xA2,0x23,0x00,0x0C,
99915 -0x13,0x00,0xA0,0xA3,
99916 -0x18,0x00,0xBF,0x8F,
99917 -0x00,0x00,0x00,0x00,
99918 -0x08,0x00,0xE0,0x03,
99919 -0x20,0x00,0xBD,0x27,
99920 -0xE0,0xFF,0xBD,0x27,
99921 -0x02,0x80,0x02,0x3C,
99922 -0x50,0x00,0x03,0x24,
99923 -0x10,0x00,0xA3,0xA3,
99924 -0x16,0x3D,0x40,0xA0,
99925 -0x41,0x00,0x03,0x24,
99926 -0x52,0x00,0x02,0x24,
99927 -0x02,0x80,0x07,0x3C,
99928 -0x0C,0xF4,0xE7,0x24,
99929 -0x11,0x00,0xA2,0xA3,
99930 -0x12,0x00,0xA3,0xA3,
99931 -0xD0,0x07,0x02,0x24,
99932 -0x01,0x00,0x03,0x24,
99933 -0x02,0x80,0x06,0x3C,
99934 -0x10,0x00,0xA5,0x27,
99935 -0x21,0x20,0xE0,0x00,
99936 -0x2C,0x80,0xC6,0x24,
99937 -0x0C,0x00,0xE2,0xAC,
99938 -0x14,0x00,0xE3,0xA0,
99939 -0x18,0x00,0xBF,0xAF,
99940 -0xA2,0x23,0x00,0x0C,
99941 -0x13,0x00,0xA0,0xA3,
99942 -0x18,0x00,0xBF,0x8F,
99943 -0x00,0x00,0x00,0x00,
99944 -0x08,0x00,0xE0,0x03,
99945 -0x20,0x00,0xBD,0x27,
99946 -0x02,0x80,0x09,0x3C,
99947 -0x30,0x1F,0x23,0x8D,
99948 -0xFF,0xFF,0x02,0x24,
99949 -0xFF,0x00,0x4B,0x30,
99950 -0x0F,0xFF,0x02,0x24,
99951 -0x24,0x18,0x62,0x00,
99952 -0xFF,0xFF,0x02,0x3C,
99953 -0xFF,0x0F,0x42,0x34,
99954 -0x24,0x18,0x62,0x00,
99955 -0xD8,0xFF,0xBD,0x27,
99956 -0x30,0x1F,0x23,0xAD,
99957 -0x47,0x00,0x02,0x24,
99958 -0x3B,0x00,0x03,0x24,
99959 -0x02,0x80,0x08,0x3C,
99960 -0x28,0xF4,0x08,0x25,
99961 -0x18,0x00,0xB0,0xAF,
99962 -0x10,0x00,0xA2,0xA3,
99963 -0x30,0x1F,0x30,0x25,
99964 -0x11,0x00,0xA3,0xA3,
99965 -0xD0,0x07,0x02,0x24,
99966 -0x01,0x00,0x03,0x24,
99967 -0x01,0x00,0x07,0x3C,
99968 -0x01,0x80,0x06,0x3C,
99969 -0x04,0x03,0x0B,0xAE,
99970 -0x1C,0x00,0xB1,0xAF,
99971 -0x56,0x30,0xEA,0x34,
99972 -0x43,0x00,0x11,0x24,
99973 -0xF4,0x98,0xE7,0x34,
99974 -0x10,0x00,0xA5,0x27,
99975 -0x0C,0x00,0x02,0xAD,
99976 -0x14,0x00,0x03,0xA1,
99977 -0x21,0x20,0x00,0x01,
99978 -0x1C,0xB9,0xC6,0x24,
99979 -0x20,0x00,0xBF,0xAF,
99980 -0x12,0x00,0xB1,0xA3,
99981 -0x0C,0x03,0x07,0xAE,
99982 -0x10,0x03,0x0A,0xAE,
99983 -0x13,0x00,0xA0,0xA3,
99984 -0x08,0x03,0x00,0xAE,
99985 -0x14,0x03,0x00,0xAE,
99986 -0xA2,0x23,0x00,0x0C,
99987 -0x18,0x03,0x00,0xAE,
99988 -0x1E,0x00,0x02,0x24,
99989 -0x21,0x03,0x02,0xA2,
99990 -0x4A,0x00,0x03,0x24,
99991 -0x45,0x00,0x02,0x24,
99992 -0x1C,0x03,0x03,0xA2,
99993 -0x1D,0x03,0x02,0xA2,
99994 -0x23,0x00,0x03,0x24,
99995 -0x3E,0x00,0x02,0x24,
99996 -0x1E,0x03,0x11,0xA2,
99997 -0x1F,0x03,0x02,0xA2,
99998 -0x20,0x03,0x03,0xA2,
99999 -0x20,0x00,0xBF,0x8F,
100000 -0x1C,0x00,0xB1,0x8F,
100001 -0x18,0x00,0xB0,0x8F,
100002 -0x08,0x00,0xE0,0x03,
100003 -0x28,0x00,0xBD,0x27,
100004 -0xE0,0xFF,0xBD,0x27,
100005 -0x3B,0x00,0x02,0x24,
100006 -0x43,0x00,0x03,0x24,
100007 -0x10,0x00,0xA2,0xA3,
100008 -0x11,0x00,0xA3,0xA3,
100009 -0x36,0x00,0x02,0x24,
100010 -0x02,0x80,0x03,0x3C,
100011 -0x02,0x80,0x07,0x3C,
100012 -0x44,0xF4,0xE7,0x24,
100013 -0x12,0x00,0xA2,0xA3,
100014 -0x03,0x22,0x60,0xA0,
100015 -0xD0,0x07,0x02,0x24,
100016 -0x01,0x00,0x03,0x24,
100017 -0x01,0x80,0x06,0x3C,
100018 -0x10,0x00,0xA5,0x27,
100019 -0x21,0x20,0xE0,0x00,
100020 -0x50,0xBD,0xC6,0x24,
100021 -0x0C,0x00,0xE2,0xAC,
100022 -0x14,0x00,0xE3,0xA0,
100023 -0x18,0x00,0xBF,0xAF,
100024 -0xA2,0x23,0x00,0x0C,
100025 -0x13,0x00,0xA0,0xA3,
100026 -0x18,0x00,0xBF,0x8F,
100027 -0x00,0x00,0x00,0x00,
100028 -0x08,0x00,0xE0,0x03,
100029 -0x20,0x00,0xBD,0x27,
100030 -0xE0,0xFF,0xBD,0x27,
100031 -0x02,0x80,0x02,0x3C,
100032 -0x52,0x00,0x03,0x24,
100033 -0x10,0x00,0xA3,0xA3,
100034 -0xB8,0x55,0x40,0xA4,
100035 -0x54,0x00,0x03,0x24,
100036 -0x53,0x00,0x02,0x24,
100037 -0x02,0x80,0x07,0x3C,
100038 -0x7C,0xF4,0xE7,0x24,
100039 -0x11,0x00,0xA2,0xA3,
100040 -0x12,0x00,0xA3,0xA3,
100041 -0xF4,0x01,0x02,0x24,
100042 -0x01,0x00,0x03,0x24,
100043 -0x02,0x80,0x06,0x3C,
100044 -0x10,0x00,0xA5,0x27,
100045 -0x21,0x20,0xE0,0x00,
100046 -0x70,0x81,0xC6,0x24,
100047 -0x0C,0x00,0xE2,0xAC,
100048 -0x14,0x00,0xE3,0xA0,
100049 -0x18,0x00,0xBF,0xAF,
100050 -0xA2,0x23,0x00,0x0C,
100051 -0x13,0x00,0xA0,0xA3,
100052 -0x18,0x00,0xBF,0x8F,
100053 -0x00,0x00,0x00,0x00,
100054 -0x08,0x00,0xE0,0x03,
100055 -0x20,0x00,0xBD,0x27,
100056 -0xD8,0xFF,0xBD,0x27,
100057 -0x02,0x80,0x03,0x3C,
100058 -0x20,0x00,0xBF,0xAF,
100059 -0x1C,0x00,0xB1,0xAF,
100060 -0x18,0x00,0xB0,0xAF,
100061 -0x58,0xE9,0x62,0x24,
100062 -0x58,0xE9,0x67,0x94,
100063 -0x02,0x00,0x48,0x90,
100064 -0x02,0x80,0x02,0x3C,
100065 -0xD8,0x5E,0x42,0x24,
100066 -0x02,0x00,0x11,0x24,
100067 -0x01,0x80,0x06,0x3C,
100068 -0x21,0x20,0x40,0x00,
100069 -0x14,0x00,0x51,0xA0,
100070 -0x10,0x00,0xA5,0x27,
100071 -0x6C,0xCE,0xC6,0x24,
100072 -0x02,0x80,0x10,0x3C,
100073 -0x10,0x00,0xA7,0xA7,
100074 -0x28,0x5F,0x10,0x26,
100075 -0x12,0x00,0xA8,0xA3,
100076 -0xA2,0x23,0x00,0x0C,
100077 -0x13,0x00,0xA0,0xA3,
100078 -0x02,0x80,0x06,0x3C,
100079 -0x21,0x20,0x00,0x02,
100080 -0x10,0x00,0xA5,0x27,
100081 -0x14,0x00,0x11,0xA2,
100082 -0xA2,0x23,0x00,0x0C,
100083 -0x7C,0x82,0xC6,0x24,
100084 -0x02,0x80,0x03,0x3C,
100085 -0xDE,0x5D,0x62,0x90,
100086 -0x02,0x00,0x07,0x24,
100087 -0x0C,0x00,0x04,0x24,
100088 -0x02,0x00,0x42,0x30,
100089 -0x01,0x00,0x42,0x2C,
100090 -0x23,0x38,0xE2,0x00,
100091 -0xE8,0x03,0x02,0x24,
100092 -0x0C,0x00,0x02,0xAE,
100093 -0x02,0x80,0x03,0x3C,
100094 -0x02,0x80,0x02,0x3C,
100095 -0xF4,0x5E,0x60,0xA0,
100096 -0xF5,0x5E,0x44,0xA0,
100097 -0x02,0x80,0x03,0x3C,
100098 -0x02,0x80,0x02,0x3C,
100099 -0xF6,0x5E,0x64,0xA0,
100100 -0x0D,0x5F,0x40,0xA0,
100101 -0x02,0x80,0x03,0x3C,
100102 -0x02,0x80,0x02,0x3C,
100103 -0x13,0x5F,0x60,0xA0,
100104 -0x01,0x00,0x06,0x24,
100105 -0x14,0x5F,0x40,0xA0,
100106 -0x02,0x80,0x03,0x3C,
100107 -0x02,0x80,0x02,0x3C,
100108 -0xF8,0x5E,0x66,0xA0,
100109 -0x0F,0x00,0x04,0x24,
100110 -0x15,0x5F,0x40,0xA0,
100111 -0x02,0x80,0x03,0x3C,
100112 -0x02,0x80,0x02,0x3C,
100113 -0xF7,0x5E,0x66,0xA0,
100114 -0xF9,0x5E,0x44,0xA0,
100115 -0x02,0x80,0x03,0x3C,
100116 -0x08,0x00,0x04,0x24,
100117 -0x02,0x80,0x02,0x3C,
100118 -0xFA,0x5E,0x60,0xA0,
100119 -0x64,0x00,0x05,0x24,
100120 -0x04,0x5F,0x44,0xA4,
100121 -0x02,0x80,0x03,0x3C,
100122 -0x01,0x00,0x02,0x3C,
100123 -0xFC,0x5E,0x65,0xA4,
100124 -0x00,0x90,0x42,0x34,
100125 -0x02,0x80,0x03,0x3C,
100126 -0x00,0x5F,0x62,0xAC,
100127 -0x02,0x80,0x04,0x3C,
100128 -0x02,0x80,0x02,0x3C,
100129 -0x08,0x5F,0x80,0xAC,
100130 -0x02,0x80,0x03,0x3C,
100131 -0x0C,0x5F,0x40,0xA0,
100132 -0x02,0x80,0x02,0x3C,
100133 -0x0E,0x5F,0x60,0xA0,
100134 -0x16,0x5F,0x40,0xA0,
100135 -0x02,0x80,0x03,0x3C,
100136 -0x02,0x80,0x02,0x3C,
100137 -0x44,0x5F,0x67,0xA0,
100138 -0x20,0x00,0xBF,0x8F,
100139 -0x0F,0x5F,0x40,0xA0,
100140 -0x02,0x80,0x03,0x3C,
100141 -0x02,0x80,0x02,0x3C,
100142 -0x1C,0x00,0xB1,0x8F,
100143 -0x18,0x00,0xB0,0x8F,
100144 -0x10,0x5F,0x66,0xA0,
100145 -0x11,0x5F,0x46,0xA0,
100146 -0x02,0x80,0x03,0x3C,
100147 -0x02,0x80,0x02,0x3C,
100148 -0x12,0x5F,0x60,0xA0,
100149 -0x21,0x20,0x00,0x00,
100150 -0x18,0x5F,0x40,0xAC,
100151 -0x02,0x80,0x03,0x3C,
100152 -0x02,0x80,0x02,0x3C,
100153 -0x21,0x28,0x00,0x00,
100154 -0x28,0x00,0xBD,0x27,
100155 -0x1C,0x5F,0x60,0xAC,
100156 -0x20,0x5F,0x44,0xAC,
100157 -0x24,0x5F,0x45,0xAC,
100158 -0x08,0x00,0xE0,0x03,
100159 -0x00,0x00,0x00,0x00,
100160 -0xD8,0xFF,0xBD,0x27,
100161 -0x1C,0x00,0xB3,0xAF,
100162 -0x18,0x00,0xB2,0xAF,
100163 -0x14,0x00,0xB1,0xAF,
100164 -0x10,0x00,0xB0,0xAF,
100165 -0x20,0x00,0xBF,0xAF,
100166 -0x21,0x80,0x80,0x00,
100167 -0x21,0x98,0xA0,0x00,
100168 -0x21,0x88,0xC0,0x00,
100169 -0x21,0x90,0x00,0x00,
100170 -0x00,0x00,0x04,0x82,
100171 -0x7C,0x55,0x00,0x0C,
100172 -0x00,0x00,0x00,0x00,
100173 -0xFC,0xFF,0x40,0x14,
100174 -0x01,0x00,0x10,0x26,
100175 -0xFF,0xFF,0x10,0x26,
100176 -0x00,0x00,0x04,0x92,
100177 -0x2B,0x00,0x02,0x24,
100178 -0x00,0x1E,0x04,0x00,
100179 -0x03,0x1E,0x03,0x00,
100180 -0x41,0x00,0x62,0x10,
100181 -0x00,0x00,0x00,0x00,
100182 -0x10,0x00,0x02,0x24,
100183 -0x30,0x00,0x22,0x12,
100184 -0x00,0x1E,0x04,0x00,
100185 -0x07,0x00,0x20,0x16,
100186 -0x21,0x18,0x80,0x00,
100187 -0x00,0x1E,0x04,0x00,
100188 -0x03,0x1E,0x03,0x00,
100189 -0x30,0x00,0x02,0x24,
100190 -0x3B,0x00,0x62,0x10,
100191 -0x0A,0x00,0x11,0x24,
100192 -0x21,0x18,0x80,0x00,
100193 -0x00,0x16,0x03,0x00,
100194 -0x03,0x16,0x02,0x00,
100195 -0x1A,0x00,0x40,0x10,
100196 -0xFF,0x00,0x64,0x30,
100197 -0xA9,0xFF,0x82,0x24,
100198 -0x61,0x00,0x83,0x2C,
100199 -0xFF,0x00,0x45,0x30,
100200 -0x09,0x00,0x60,0x10,
100201 -0x41,0x00,0x86,0x2C,
100202 -0xC9,0xFF,0x82,0x24,
100203 -0xFF,0x00,0x45,0x30,
100204 -0x05,0x00,0xC0,0x10,
100205 -0x3A,0x00,0x87,0x2C,
100206 -0xD0,0xFF,0x82,0x24,
100207 -0x02,0x00,0xE0,0x10,
100208 -0xFF,0x00,0x05,0x24,
100209 -0xFF,0x00,0x45,0x30,
100210 -0x2A,0x10,0xB1,0x00,
100211 -0x0A,0x00,0x40,0x10,
100212 -0x18,0x00,0x51,0x02,
100213 -0x01,0x00,0x10,0x26,
100214 -0x12,0x10,0x00,0x00,
100215 -0x2B,0x18,0x52,0x00,
100216 -0x23,0x00,0x60,0x14,
100217 -0x21,0x90,0xA2,0x00,
100218 -0x00,0x00,0x03,0x92,
100219 -0x00,0x00,0x00,0x00,
100220 -0xE8,0xFF,0x60,0x14,
100221 -0xFF,0x00,0x64,0x30,
100222 -0x02,0x00,0x60,0x12,
100223 -0x21,0x10,0x40,0x02,
100224 -0x00,0x00,0x70,0xAE,
100225 -0x20,0x00,0xBF,0x8F,
100226 -0x1C,0x00,0xB3,0x8F,
100227 -0x18,0x00,0xB2,0x8F,
100228 -0x14,0x00,0xB1,0x8F,
100229 -0x10,0x00,0xB0,0x8F,
100230 -0x08,0x00,0xE0,0x03,
100231 -0x28,0x00,0xBD,0x27,
100232 -0x03,0x1E,0x03,0x00,
100233 -0x30,0x00,0x02,0x24,
100234 -0xCE,0xFF,0x62,0x14,
100235 -0x00,0x00,0x00,0x00,
100236 -0x01,0x00,0x03,0x82,
100237 -0x78,0x00,0x02,0x24,
100238 -0x03,0x00,0x62,0x10,
100239 -0x58,0x00,0x02,0x24,
100240 -0xD0,0xFF,0x62,0x14,
100241 -0x21,0x18,0x80,0x00,
100242 -0x02,0x00,0x10,0x26,
100243 -0x00,0x00,0x04,0x92,
100244 -0xC0,0x70,0x00,0x08,
100245 -0x10,0x00,0x11,0x24,
100246 -0x01,0x00,0x10,0x26,
100247 -0x00,0x00,0x04,0x92,
100248 -0xB7,0x70,0x00,0x08,
100249 -0x10,0x00,0x02,0x24,
100250 -0xEC,0x70,0x00,0x08,
100251 -0x08,0x00,0x11,0x24,
100252 -0x20,0x00,0xBF,0x8F,
100253 -0x1C,0x00,0xB3,0x8F,
100254 -0x18,0x00,0xB2,0x8F,
100255 -0x14,0x00,0xB1,0x8F,
100256 -0x10,0x00,0xB0,0x8F,
100257 -0xFF,0xFF,0x02,0x24,
100258 -0x08,0x00,0xE0,0x03,
100259 -0x28,0x00,0xBD,0x27,
100260 -0x21,0x48,0x80,0x00,
100261 -0x31,0x00,0xC0,0x14,
100262 -0x21,0x50,0x00,0x00,
100263 -0x00,0x00,0x87,0x90,
100264 -0x30,0x00,0x02,0x24,
100265 -0x00,0x1E,0x07,0x00,
100266 -0x03,0x1E,0x03,0x00,
100267 -0x2E,0x00,0x62,0x10,
100268 -0x0A,0x00,0x06,0x24,
100269 -0x02,0x80,0x02,0x3C,
100270 -0x40,0xF2,0x4B,0x24,
100271 -0xFF,0x00,0xE8,0x30,
100272 -0x21,0x10,0x0B,0x01,
100273 -0x00,0x00,0x44,0x90,
100274 -0x00,0x1E,0x07,0x00,
100275 -0x03,0x1E,0x03,0x00,
100276 -0x44,0x00,0x82,0x30,
100277 -0x02,0x00,0x87,0x30,
100278 -0xD0,0xFF,0x63,0x24,
100279 -0x1A,0x00,0x40,0x10,
100280 -0x04,0x00,0x84,0x30,
100281 -0x07,0x00,0x80,0x14,
100282 -0x2B,0x10,0x66,0x00,
100283 -0x21,0x10,0x00,0x01,
100284 -0x02,0x00,0xE0,0x10,
100285 -0xE0,0xFF,0x03,0x25,
100286 -0xFF,0x00,0x62,0x30,
100287 -0xC9,0xFF,0x43,0x24,
100288 -0x2B,0x10,0x66,0x00,
100289 -0x10,0x00,0x40,0x10,
100290 -0x18,0x00,0x46,0x01,
100291 -0x01,0x00,0x29,0x25,
100292 -0x00,0x00,0x27,0x91,
100293 -0x00,0x00,0x00,0x00,
100294 -0xFF,0x00,0xE8,0x30,
100295 -0x12,0x10,0x00,0x00,
100296 -0x21,0x50,0x43,0x00,
100297 -0x21,0x10,0x0B,0x01,
100298 -0x00,0x00,0x44,0x90,
100299 -0x00,0x1E,0x07,0x00,
100300 -0x03,0x1E,0x03,0x00,
100301 -0x44,0x00,0x82,0x30,
100302 -0x02,0x00,0x87,0x30,
100303 -0xD0,0xFF,0x63,0x24,
100304 -0xE8,0xFF,0x40,0x14,
100305 -0x04,0x00,0x84,0x30,
100306 -0x02,0x00,0xA0,0x10,
100307 -0x00,0x00,0x00,0x00,
100308 -0x00,0x00,0xA9,0xAC,
100309 -0x08,0x00,0xE0,0x03,
100310 -0x21,0x10,0x40,0x01,
100311 -0x00,0x00,0x87,0x90,
100312 -0x0E,0x71,0x00,0x08,
100313 -0x02,0x80,0x02,0x3C,
100314 -0x01,0x00,0x89,0x24,
100315 -0x00,0x00,0x27,0x91,
100316 -0x78,0x00,0x02,0x24,
100317 -0x00,0x1E,0x07,0x00,
100318 -0x03,0x1E,0x03,0x00,
100319 -0xCD,0xFF,0x62,0x14,
100320 -0x08,0x00,0x06,0x24,
100321 -0x01,0x00,0x22,0x91,
100322 -0x02,0x80,0x03,0x3C,
100323 -0x40,0xF2,0x63,0x24,
100324 -0x21,0x10,0x43,0x00,
100325 -0x00,0x00,0x44,0x90,
100326 -0x00,0x00,0x00,0x00,
100327 -0x44,0x00,0x84,0x30,
100328 -0xC5,0xFF,0x80,0x10,
100329 -0x02,0x80,0x02,0x3C,
100330 -0x01,0x00,0x29,0x25,
100331 -0x00,0x00,0x27,0x91,
100332 -0x0E,0x71,0x00,0x08,
100333 -0x10,0x00,0x06,0x24,
100334 -0xE8,0xFF,0xBD,0x27,
100335 -0x10,0x00,0xBF,0xAF,
100336 -0x00,0x00,0x83,0x80,
100337 -0x2D,0x00,0x02,0x24,
100338 -0x04,0x00,0x62,0x10,
100339 -0x00,0x00,0x00,0x00,
100340 -0x10,0x00,0xBF,0x8F,
100341 -0x04,0x71,0x00,0x08,
100342 -0x18,0x00,0xBD,0x27,
100343 -0x04,0x71,0x00,0x0C,
100344 -0x01,0x00,0x84,0x24,
100345 -0x10,0x00,0xBF,0x8F,
100346 -0x23,0x10,0x02,0x00,
100347 -0x08,0x00,0xE0,0x03,
100348 -0x18,0x00,0xBD,0x27,
100349 -0xD8,0xFF,0xBD,0x27,
100350 -0x1C,0x00,0xB3,0xAF,
100351 -0x18,0x00,0xB2,0xAF,
100352 -0x14,0x00,0xB1,0xAF,
100353 -0x10,0x00,0xB0,0xAF,
100354 -0x20,0x00,0xBF,0xAF,
100355 -0x21,0x80,0x80,0x00,
100356 -0x21,0x90,0xA0,0x00,
100357 -0x21,0x98,0xC0,0x00,
100358 -0x21,0x88,0x00,0x00,
100359 -0x00,0x00,0x04,0x82,
100360 -0x7C,0x55,0x00,0x0C,
100361 -0x00,0x00,0x00,0x00,
100362 -0xFC,0xFF,0x40,0x14,
100363 -0x01,0x00,0x10,0x26,
100364 -0xFF,0xFF,0x10,0x26,
100365 -0x00,0x00,0x03,0x82,
100366 -0x2D,0x00,0x02,0x24,
100367 -0x0F,0x00,0x62,0x10,
100368 -0x21,0x20,0x00,0x02,
100369 -0x21,0x28,0x40,0x02,
100370 -0xA0,0x70,0x00,0x0C,
100371 -0x21,0x30,0x60,0x02,
100372 -0x12,0x00,0x40,0x04,
100373 -0x21,0x18,0x40,0x00,
100374 -0x23,0x10,0x02,0x00,
100375 -0x0A,0x10,0x71,0x00,
100376 -0x20,0x00,0xBF,0x8F,
100377 -0x1C,0x00,0xB3,0x8F,
100378 -0x18,0x00,0xB2,0x8F,
100379 -0x14,0x00,0xB1,0x8F,
100380 -0x10,0x00,0xB0,0x8F,
100381 -0x08,0x00,0xE0,0x03,
100382 -0x28,0x00,0xBD,0x27,
100383 -0x01,0x00,0x10,0x26,
100384 -0x21,0x20,0x00,0x02,
100385 -0x21,0x28,0x40,0x02,
100386 -0xA0,0x70,0x00,0x0C,
100387 -0x21,0x30,0x60,0x02,
100388 -0xFF,0xFF,0x11,0x24,
100389 -0xF0,0xFF,0x41,0x04,
100390 -0x21,0x18,0x40,0x00,
100391 -0xF0,0xFF,0x20,0x16,
100392 -0x00,0x80,0x02,0x3C,
100393 -0x20,0x00,0xBF,0x8F,
100394 -0x1C,0x00,0xB3,0x8F,
100395 -0x18,0x00,0xB2,0x8F,
100396 -0x14,0x00,0xB1,0x8F,
100397 -0x10,0x00,0xB0,0x8F,
100398 -0xFF,0x7F,0x02,0x3C,
100399 -0xFF,0xFF,0x42,0x34,
100400 -0x08,0x00,0xE0,0x03,
100401 -0x28,0x00,0xBD,0x27,
100402 -0x00,0x00,0x00,0x00,
100403 -0x00,0x00,0x00,0x00,
100404 -0x52,0x54,0x4C,0x38,
100405 -0x37,0x31,0x32,0x20,
100406 -0x46,0x57,0x20,0x76,
100407 -0x65,0x72,0x73,0x69,
100408 -0x6F,0x6E,0x20,0x30,
100409 -0x2E,0x30,0x2E,0x31,
100410 -0x23,0x20,0xE4,0xB8,
100411 -0x89,0x20,0x31,0x30,
100412 -0xE6,0x9C,0x88,0x20,
100413 -0x32,0x38,0x20,0x31,
100414 -0x37,0x3A,0x34,0x31,
100415 -0x3A,0x34,0x37,0x20,
100416 -0x43,0x53,0x54,0x20,
100417 -0x32,0x30,0x30,0x39,
100418 -0x0A,0x00,0x00,0x00,
100419 -0x50,0xC6,0x01,0x80,
100420 -0x48,0x43,0x49,0x20,
100421 -0x74,0x79,0x70,0x65,
100422 -0x3A,0x20,0x25,0x78,
100423 -0x28,0x25,0x78,0x29,
100424 -0x0A,0x00,0x00,0x00,
100425 -0x72,0x66,0x5F,0x63,
100426 -0x6F,0x66,0x69,0x67,
100427 -0x3A,0x20,0x25,0x78,
100428 -0x28,0x25,0x78,0x2C,
100429 -0x20,0x25,0x78,0x2C,
100430 -0x20,0x25,0x78,0x29,
100431 -0x0A,0x00,0x00,0x00,
100432 -0x6D,0x70,0x5F,0x6D,
100433 -0x6F,0x64,0x65,0x3A,
100434 -0x20,0x25,0x78,0x28,
100435 -0x25,0x78,0x29,0x2C,
100436 -0x20,0x49,0x51,0x4B,
100437 -0x3A,0x20,0x25,0x78,
100438 -0x0A,0x00,0x00,0x00,
100439 -0x76,0x63,0x73,0x20,
100440 -0x74,0x79,0x70,0x65,
100441 -0x3A,0x20,0x25,0x78,
100442 -0x28,0x25,0x78,0x29,
100443 -0x0A,0x00,0x00,0x00,
100444 -0x33,0x32,0x6B,0x20,
100445 -0x63,0x61,0x6C,0x69,
100446 -0x62,0x72,0x61,0x3A,
100447 -0x20,0x25,0x64,0x2C,
100448 -0x20,0x33,0x32,0x4B,
100449 -0x20,0x54,0x53,0x46,
100450 -0x3A,0x20,0x25,0x78,
100451 -0x00,0x00,0x00,0x00,
100452 -0x74,0x61,0x72,0x67,
100453 -0x65,0x74,0x20,0x74,
100454 -0x68,0x65,0x72,0x6D,
100455 -0x61,0x6C,0x3A,0x20,
100456 -0x25,0x78,0x0A,0x00,
100457 -0x00,0x00,0x00,0x00,
100458 -0x00,0x00,0x00,0x00,
100459 -0x78,0x0C,0x00,0x00,
100460 -0x01,0x00,0x00,0x7F,
100461 -0x78,0x0C,0x00,0x00,
100462 -0x01,0x00,0x01,0x7F,
100463 -0x78,0x0C,0x00,0x00,
100464 -0x01,0x00,0x02,0x7E,
100465 -0x78,0x0C,0x00,0x00,
100466 -0x01,0x00,0x03,0x7D,
100467 -0x78,0x0C,0x00,0x00,
100468 -0x01,0x00,0x04,0x7C,
100469 -0x78,0x0C,0x00,0x00,
100470 -0x01,0x00,0x05,0x7B,
100471 -0x78,0x0C,0x00,0x00,
100472 -0x01,0x00,0x06,0x7A,
100473 -0x78,0x0C,0x00,0x00,
100474 -0x01,0x00,0x07,0x79,
100475 -0x78,0x0C,0x00,0x00,
100476 -0x01,0x00,0x08,0x78,
100477 -0x78,0x0C,0x00,0x00,
100478 -0x01,0x00,0x09,0x77,
100479 -0x78,0x0C,0x00,0x00,
100480 -0x01,0x00,0x0A,0x76,
100481 -0x78,0x0C,0x00,0x00,
100482 -0x01,0x00,0x0B,0x75,
100483 -0x78,0x0C,0x00,0x00,
100484 -0x01,0x00,0x0C,0x74,
100485 -0x78,0x0C,0x00,0x00,
100486 -0x01,0x00,0x0D,0x73,
100487 -0x78,0x0C,0x00,0x00,
100488 -0x01,0x00,0x0E,0x72,
100489 -0x78,0x0C,0x00,0x00,
100490 -0x01,0x00,0x0F,0x71,
100491 -0x78,0x0C,0x00,0x00,
100492 -0x01,0x00,0x10,0x70,
100493 -0x78,0x0C,0x00,0x00,
100494 -0x01,0x00,0x11,0x6F,
100495 -0x78,0x0C,0x00,0x00,
100496 -0x01,0x00,0x12,0x6F,
100497 -0x78,0x0C,0x00,0x00,
100498 -0x01,0x00,0x13,0x6E,
100499 -0x78,0x0C,0x00,0x00,
100500 -0x01,0x00,0x14,0x6D,
100501 -0x78,0x0C,0x00,0x00,
100502 -0x01,0x00,0x15,0x6D,
100503 -0x78,0x0C,0x00,0x00,
100504 -0x01,0x00,0x16,0x6C,
100505 -0x78,0x0C,0x00,0x00,
100506 -0x01,0x00,0x17,0x6B,
100507 -0x78,0x0C,0x00,0x00,
100508 -0x01,0x00,0x18,0x6A,
100509 -0x78,0x0C,0x00,0x00,
100510 -0x01,0x00,0x19,0x6A,
100511 -0x78,0x0C,0x00,0x00,
100512 -0x01,0x00,0x1A,0x69,
100513 -0x78,0x0C,0x00,0x00,
100514 -0x01,0x00,0x1B,0x68,
100515 -0x78,0x0C,0x00,0x00,
100516 -0x01,0x00,0x1C,0x67,
100517 -0x78,0x0C,0x00,0x00,
100518 -0x01,0x00,0x1D,0x66,
100519 -0x78,0x0C,0x00,0x00,
100520 -0x01,0x00,0x1E,0x65,
100521 -0x78,0x0C,0x00,0x00,
100522 -0x01,0x00,0x1F,0x64,
100523 -0x78,0x0C,0x00,0x00,
100524 -0x01,0x00,0x20,0x63,
100525 -0x78,0x0C,0x00,0x00,
100526 -0x01,0x00,0x21,0x4C,
100527 -0x78,0x0C,0x00,0x00,
100528 -0x01,0x00,0x22,0x4B,
100529 -0x78,0x0C,0x00,0x00,
100530 -0x01,0x00,0x23,0x4A,
100531 -0x78,0x0C,0x00,0x00,
100532 -0x01,0x00,0x24,0x49,
100533 -0x78,0x0C,0x00,0x00,
100534 -0x01,0x00,0x25,0x48,
100535 -0x78,0x0C,0x00,0x00,
100536 -0x01,0x00,0x26,0x47,
100537 -0x78,0x0C,0x00,0x00,
100538 -0x01,0x00,0x27,0x46,
100539 -0x78,0x0C,0x00,0x00,
100540 -0x01,0x00,0x28,0x45,
100541 -0x78,0x0C,0x00,0x00,
100542 -0x01,0x00,0x29,0x44,
100543 -0x78,0x0C,0x00,0x00,
100544 -0x01,0x00,0x2A,0x2C,
100545 -0x78,0x0C,0x00,0x00,
100546 -0x01,0x00,0x2B,0x2B,
100547 -0x78,0x0C,0x00,0x00,
100548 -0x01,0x00,0x2C,0x2A,
100549 -0x78,0x0C,0x00,0x00,
100550 -0x01,0x00,0x2D,0x29,
100551 -0x78,0x0C,0x00,0x00,
100552 -0x01,0x00,0x2E,0x28,
100553 -0x78,0x0C,0x00,0x00,
100554 -0x01,0x00,0x2F,0x27,
100555 -0x78,0x0C,0x00,0x00,
100556 -0x01,0x00,0x30,0x26,
100557 -0x78,0x0C,0x00,0x00,
100558 -0x01,0x00,0x31,0x25,
100559 -0x78,0x0C,0x00,0x00,
100560 -0x01,0x00,0x32,0x24,
100561 -0x78,0x0C,0x00,0x00,
100562 -0x01,0x00,0x33,0x23,
100563 -0x78,0x0C,0x00,0x00,
100564 -0x01,0x00,0x34,0x22,
100565 -0x78,0x0C,0x00,0x00,
100566 -0x01,0x00,0x35,0x09,
100567 -0x78,0x0C,0x00,0x00,
100568 -0x01,0x00,0x36,0x08,
100569 -0x78,0x0C,0x00,0x00,
100570 -0x01,0x00,0x37,0x07,
100571 -0x78,0x0C,0x00,0x00,
100572 -0x01,0x00,0x38,0x06,
100573 -0x78,0x0C,0x00,0x00,
100574 -0x01,0x00,0x39,0x05,
100575 -0x78,0x0C,0x00,0x00,
100576 -0x01,0x00,0x3A,0x04,
100577 -0x78,0x0C,0x00,0x00,
100578 -0x01,0x00,0x3B,0x03,
100579 -0x78,0x0C,0x00,0x00,
100580 -0x01,0x00,0x3C,0x02,
100581 -0x78,0x0C,0x00,0x00,
100582 -0x01,0x00,0x3D,0x01,
100583 -0x78,0x0C,0x00,0x00,
100584 -0x01,0x00,0x3E,0x00,
100585 -0x78,0x0C,0x00,0x00,
100586 -0x01,0x00,0x3F,0x00,
100587 -0x78,0x0C,0x00,0x00,
100588 -0x01,0x00,0x40,0x7F,
100589 -0x78,0x0C,0x00,0x00,
100590 -0x01,0x00,0x41,0x7F,
100591 -0x78,0x0C,0x00,0x00,
100592 -0x01,0x00,0x42,0x7E,
100593 -0x78,0x0C,0x00,0x00,
100594 -0x01,0x00,0x43,0x7D,
100595 -0x78,0x0C,0x00,0x00,
100596 -0x01,0x00,0x44,0x7C,
100597 -0x78,0x0C,0x00,0x00,
100598 -0x01,0x00,0x45,0x7B,
100599 -0x78,0x0C,0x00,0x00,
100600 -0x01,0x00,0x46,0x7A,
100601 -0x78,0x0C,0x00,0x00,
100602 -0x01,0x00,0x47,0x79,
100603 -0x78,0x0C,0x00,0x00,
100604 -0x01,0x00,0x48,0x78,
100605 -0x78,0x0C,0x00,0x00,
100606 -0x01,0x00,0x49,0x77,
100607 -0x78,0x0C,0x00,0x00,
100608 -0x01,0x00,0x4A,0x76,
100609 -0x78,0x0C,0x00,0x00,
100610 -0x01,0x00,0x4B,0x75,
100611 -0x78,0x0C,0x00,0x00,
100612 -0x01,0x00,0x4C,0x74,
100613 -0x78,0x0C,0x00,0x00,
100614 -0x01,0x00,0x4D,0x73,
100615 -0x78,0x0C,0x00,0x00,
100616 -0x01,0x00,0x4E,0x72,
100617 -0x78,0x0C,0x00,0x00,
100618 -0x01,0x00,0x4F,0x71,
100619 -0x78,0x0C,0x00,0x00,
100620 -0x01,0x00,0x50,0x70,
100621 -0x78,0x0C,0x00,0x00,
100622 -0x01,0x00,0x51,0x6F,
100623 -0x78,0x0C,0x00,0x00,
100624 -0x01,0x00,0x52,0x6F,
100625 -0x78,0x0C,0x00,0x00,
100626 -0x01,0x00,0x53,0x6E,
100627 -0x78,0x0C,0x00,0x00,
100628 -0x01,0x00,0x54,0x6D,
100629 -0x78,0x0C,0x00,0x00,
100630 -0x01,0x00,0x55,0x6D,
100631 -0x78,0x0C,0x00,0x00,
100632 -0x01,0x00,0x56,0x6C,
100633 -0x78,0x0C,0x00,0x00,
100634 -0x01,0x00,0x57,0x6B,
100635 -0x78,0x0C,0x00,0x00,
100636 -0x01,0x00,0x58,0x6A,
100637 -0x78,0x0C,0x00,0x00,
100638 -0x01,0x00,0x59,0x6A,
100639 -0x78,0x0C,0x00,0x00,
100640 -0x01,0x00,0x5A,0x69,
100641 -0x78,0x0C,0x00,0x00,
100642 -0x01,0x00,0x5B,0x68,
100643 -0x78,0x0C,0x00,0x00,
100644 -0x01,0x00,0x5C,0x67,
100645 -0x78,0x0C,0x00,0x00,
100646 -0x01,0x00,0x5D,0x66,
100647 -0x78,0x0C,0x00,0x00,
100648 -0x01,0x00,0x5E,0x65,
100649 -0x78,0x0C,0x00,0x00,
100650 -0x01,0x00,0x5F,0x64,
100651 -0x78,0x0C,0x00,0x00,
100652 -0x01,0x00,0x60,0x63,
100653 -0x78,0x0C,0x00,0x00,
100654 -0x01,0x00,0x61,0x4C,
100655 -0x78,0x0C,0x00,0x00,
100656 -0x01,0x00,0x62,0x4B,
100657 -0x78,0x0C,0x00,0x00,
100658 -0x01,0x00,0x63,0x4A,
100659 -0x78,0x0C,0x00,0x00,
100660 -0x01,0x00,0x64,0x49,
100661 -0x78,0x0C,0x00,0x00,
100662 -0x01,0x00,0x65,0x48,
100663 -0x78,0x0C,0x00,0x00,
100664 -0x01,0x00,0x66,0x47,
100665 -0x78,0x0C,0x00,0x00,
100666 -0x01,0x00,0x67,0x46,
100667 -0x78,0x0C,0x00,0x00,
100668 -0x01,0x00,0x68,0x45,
100669 -0x78,0x0C,0x00,0x00,
100670 -0x01,0x00,0x69,0x44,
100671 -0x78,0x0C,0x00,0x00,
100672 -0x01,0x00,0x6A,0x2C,
100673 -0x78,0x0C,0x00,0x00,
100674 -0x01,0x00,0x6B,0x2B,
100675 -0x78,0x0C,0x00,0x00,
100676 -0x01,0x00,0x6C,0x2A,
100677 -0x78,0x0C,0x00,0x00,
100678 -0x01,0x00,0x6D,0x29,
100679 -0x78,0x0C,0x00,0x00,
100680 -0x01,0x00,0x6E,0x28,
100681 -0x78,0x0C,0x00,0x00,
100682 -0x01,0x00,0x6F,0x27,
100683 -0x78,0x0C,0x00,0x00,
100684 -0x01,0x00,0x70,0x26,
100685 -0x78,0x0C,0x00,0x00,
100686 -0x01,0x00,0x71,0x25,
100687 -0x78,0x0C,0x00,0x00,
100688 -0x01,0x00,0x72,0x24,
100689 -0x78,0x0C,0x00,0x00,
100690 -0x01,0x00,0x73,0x23,
100691 -0x78,0x0C,0x00,0x00,
100692 -0x01,0x00,0x74,0x22,
100693 -0x78,0x0C,0x00,0x00,
100694 -0x01,0x00,0x75,0x09,
100695 -0x78,0x0C,0x00,0x00,
100696 -0x01,0x00,0x76,0x08,
100697 -0x78,0x0C,0x00,0x00,
100698 -0x01,0x00,0x77,0x07,
100699 -0x78,0x0C,0x00,0x00,
100700 -0x01,0x00,0x78,0x06,
100701 -0x78,0x0C,0x00,0x00,
100702 -0x01,0x00,0x79,0x05,
100703 -0x78,0x0C,0x00,0x00,
100704 -0x01,0x00,0x7A,0x04,
100705 -0x78,0x0C,0x00,0x00,
100706 -0x01,0x00,0x7B,0x03,
100707 -0x78,0x0C,0x00,0x00,
100708 -0x01,0x00,0x7C,0x02,
100709 -0x78,0x0C,0x00,0x00,
100710 -0x01,0x00,0x7D,0x01,
100711 -0x78,0x0C,0x00,0x00,
100712 -0x01,0x00,0x7E,0x00,
100713 -0x78,0x0C,0x00,0x00,
100714 -0x01,0x00,0x7F,0x00,
100715 -0x78,0x0C,0x00,0x00,
100716 -0x1E,0x00,0x00,0x30,
100717 -0x78,0x0C,0x00,0x00,
100718 -0x1E,0x00,0x01,0x30,
100719 -0x78,0x0C,0x00,0x00,
100720 -0x1E,0x00,0x02,0x30,
100721 -0x78,0x0C,0x00,0x00,
100722 -0x1E,0x00,0x03,0x30,
100723 -0x78,0x0C,0x00,0x00,
100724 -0x1E,0x00,0x04,0x30,
100725 -0x78,0x0C,0x00,0x00,
100726 -0x1E,0x00,0x05,0x34,
100727 -0x78,0x0C,0x00,0x00,
100728 -0x1E,0x00,0x06,0x38,
100729 -0x78,0x0C,0x00,0x00,
100730 -0x1E,0x00,0x07,0x3E,
100731 -0x78,0x0C,0x00,0x00,
100732 -0x1E,0x00,0x08,0x3E,
100733 -0x78,0x0C,0x00,0x00,
100734 -0x1E,0x00,0x09,0x44,
100735 -0x78,0x0C,0x00,0x00,
100736 -0x1E,0x00,0x0A,0x46,
100737 -0x78,0x0C,0x00,0x00,
100738 -0x1E,0x00,0x0B,0x48,
100739 -0x78,0x0C,0x00,0x00,
100740 -0x1E,0x00,0x0C,0x48,
100741 -0x78,0x0C,0x00,0x00,
100742 -0x1E,0x00,0x0D,0x4E,
100743 -0x78,0x0C,0x00,0x00,
100744 -0x1E,0x00,0x0E,0x56,
100745 -0x78,0x0C,0x00,0x00,
100746 -0x1E,0x00,0x0F,0x5A,
100747 -0x78,0x0C,0x00,0x00,
100748 -0x1E,0x00,0x10,0x5E,
100749 -0x78,0x0C,0x00,0x00,
100750 -0x1E,0x00,0x11,0x62,
100751 -0x78,0x0C,0x00,0x00,
100752 -0x1E,0x00,0x12,0x6C,
100753 -0x78,0x0C,0x00,0x00,
100754 -0x1E,0x00,0x13,0x72,
100755 -0x78,0x0C,0x00,0x00,
100756 -0x1E,0x00,0x14,0x72,
100757 -0x78,0x0C,0x00,0x00,
100758 -0x1E,0x00,0x15,0x72,
100759 -0x78,0x0C,0x00,0x00,
100760 -0x1E,0x00,0x16,0x72,
100761 -0x78,0x0C,0x00,0x00,
100762 -0x1E,0x00,0x17,0x72,
100763 -0x78,0x0C,0x00,0x00,
100764 -0x1E,0x00,0x18,0x72,
100765 -0x78,0x0C,0x00,0x00,
100766 -0x1E,0x00,0x19,0x72,
100767 -0x78,0x0C,0x00,0x00,
100768 -0x1E,0x00,0x1A,0x72,
100769 -0x78,0x0C,0x00,0x00,
100770 -0x1E,0x00,0x1B,0x72,
100771 -0x78,0x0C,0x00,0x00,
100772 -0x1E,0x00,0x1C,0x72,
100773 -0x78,0x0C,0x00,0x00,
100774 -0x1E,0x00,0x1D,0x72,
100775 -0x78,0x0C,0x00,0x00,
100776 -0x1E,0x00,0x1E,0x72,
100777 -0x78,0x0C,0x00,0x00,
100778 -0x1E,0x00,0x1F,0x72,
100779 -0x00,0x0E,0x00,0x00,
100780 -0xFF,0xFF,0xFF,0xFF,
100781 -0x06,0x06,0x06,0x04,
100782 -0x04,0x0E,0x00,0x00,
100783 -0xFF,0xFF,0xFF,0xFF,
100784 -0x04,0x02,0x02,0x00,
100785 -0x08,0x0E,0x00,0x00,
100786 -0x00,0xFF,0x00,0x00,
100787 -0x00,0x00,0x00,0x00,
100788 -0x10,0x0E,0x00,0x00,
100789 -0xFF,0xFF,0xFF,0xFF,
100790 -0x0A,0x08,0x08,0x04,
100791 -0x14,0x0E,0x00,0x00,
100792 -0xFF,0xFF,0xFF,0xFF,
100793 -0x04,0x02,0x02,0x00,
100794 -0x18,0x0E,0x00,0x00,
100795 -0xFF,0xFF,0xFF,0xFF,
100796 -0x0A,0x08,0x08,0x04,
100797 -0x1C,0x0E,0x00,0x00,
100798 -0xFF,0xFF,0xFF,0xFF,
100799 -0x04,0x02,0x02,0x00,
100800 -0x00,0x0E,0x00,0x00,
100801 -0xFF,0xFF,0xFF,0xFF,
100802 -0x00,0x00,0x00,0x00,
100803 -0x04,0x0E,0x00,0x00,
100804 -0xFF,0xFF,0xFF,0xFF,
100805 -0x00,0x00,0x00,0x00,
100806 -0x08,0x0E,0x00,0x00,
100807 -0x00,0xFF,0x00,0x00,
100808 -0x00,0x00,0x00,0x00,
100809 -0x10,0x0E,0x00,0x00,
100810 -0xFF,0xFF,0xFF,0xFF,
100811 -0x00,0x00,0x00,0x00,
100812 -0x14,0x0E,0x00,0x00,
100813 -0xFF,0xFF,0xFF,0xFF,
100814 -0x00,0x00,0x00,0x00,
100815 -0x18,0x0E,0x00,0x00,
100816 -0xFF,0xFF,0xFF,0xFF,
100817 -0x00,0x00,0x00,0x00,
100818 -0x1C,0x0E,0x00,0x00,
100819 -0xFF,0xFF,0xFF,0xFF,
100820 -0x00,0x00,0x00,0x00,
100821 -0x00,0x0E,0x00,0x00,
100822 -0xFF,0xFF,0xFF,0xFF,
100823 -0x00,0x00,0x00,0x00,
100824 -0x04,0x0E,0x00,0x00,
100825 -0xFF,0xFF,0xFF,0xFF,
100826 -0x00,0x00,0x00,0x00,
100827 -0x08,0x0E,0x00,0x00,
100828 -0x00,0xFF,0x00,0x00,
100829 -0x00,0x00,0x00,0x00,
100830 -0x10,0x0E,0x00,0x00,
100831 -0xFF,0xFF,0xFF,0xFF,
100832 -0x00,0x00,0x00,0x00,
100833 -0x14,0x0E,0x00,0x00,
100834 -0xFF,0xFF,0xFF,0xFF,
100835 -0x00,0x00,0x00,0x00,
100836 -0x18,0x0E,0x00,0x00,
100837 -0xFF,0xFF,0xFF,0xFF,
100838 -0x00,0x00,0x00,0x00,
100839 -0x1C,0x0E,0x00,0x00,
100840 -0xFF,0xFF,0xFF,0xFF,
100841 -0x00,0x00,0x00,0x00,
100842 -0x00,0x0E,0x00,0x00,
100843 -0xFF,0xFF,0xFF,0xFF,
100844 -0x00,0x00,0x00,0x00,
100845 -0x04,0x0E,0x00,0x00,
100846 -0xFF,0xFF,0xFF,0xFF,
100847 -0x00,0x00,0x00,0x00,
100848 -0x08,0x0E,0x00,0x00,
100849 -0x00,0xFF,0x00,0x00,
100850 -0x00,0x00,0x00,0x00,
100851 -0x10,0x0E,0x00,0x00,
100852 -0xFF,0xFF,0xFF,0xFF,
100853 -0x00,0x00,0x00,0x00,
100854 -0x14,0x0E,0x00,0x00,
100855 -0xFF,0xFF,0xFF,0xFF,
100856 -0x00,0x00,0x00,0x00,
100857 -0x18,0x0E,0x00,0x00,
100858 -0xFF,0xFF,0xFF,0xFF,
100859 -0x00,0x00,0x00,0x00,
100860 -0x1C,0x0E,0x00,0x00,
100861 -0xFF,0xFF,0xFF,0xFF,
100862 -0x00,0x00,0x00,0x00,
100863 -0x04,0x08,0x00,0x00,
100864 -0x0F,0x00,0x00,0x00,
100865 -0x03,0x00,0x00,0x00,
100866 -0x24,0x08,0x00,0x00,
100867 -0x0F,0x00,0xF0,0x00,
100868 -0x04,0x00,0x30,0x00,
100869 -0x2C,0x08,0x00,0x00,
100870 -0x0F,0x00,0xF0,0x00,
100871 -0x04,0x00,0x30,0x00,
100872 -0x70,0x08,0x00,0x00,
100873 -0x00,0x00,0x00,0x04,
100874 -0x01,0x00,0x00,0x00,
100875 -0x64,0x08,0x00,0x00,
100876 -0x00,0x04,0x00,0x00,
100877 -0x01,0x00,0x00,0x00,
100878 -0x78,0x08,0x00,0x00,
100879 -0x0F,0x00,0x0F,0x00,
100880 -0x02,0x00,0x02,0x00,
100881 -0x74,0x0E,0x00,0x00,
100882 -0x00,0x00,0x00,0x0F,
100883 -0x06,0x00,0x00,0x00,
100884 -0x78,0x0E,0x00,0x00,
100885 -0x00,0x00,0x00,0x0F,
100886 -0x06,0x00,0x00,0x00,
100887 -0x7C,0x0E,0x00,0x00,
100888 -0x00,0x00,0x00,0x0F,
100889 -0x06,0x00,0x00,0x00,
100890 -0x80,0x0E,0x00,0x00,
100891 -0x00,0x00,0x00,0x0F,
100892 -0x06,0x00,0x00,0x00,
100893 -0x0C,0x09,0x00,0x00,
100894 -0xFF,0x00,0x00,0x00,
100895 -0x33,0x00,0x00,0x00,
100896 -0x04,0x0C,0x00,0x00,
100897 -0xFF,0x00,0x00,0x00,
100898 -0x33,0x00,0x00,0x00,
100899 -0x04,0x0D,0x00,0x00,
100900 -0x0F,0x00,0x00,0x00,
100901 -0x03,0x00,0x00,0x00,
100902 -0xF4,0x01,0x00,0x00,
100903 -0x00,0x00,0xFF,0xFF,
100904 -0xFF,0xFF,0x00,0x00,
100905 -0x34,0x02,0x00,0x00,
100906 -0x00,0x00,0x00,0xF8,
100907 -0x13,0x00,0x00,0x00,
100908 -0x04,0x08,0x00,0x00,
100909 -0x0F,0x00,0x00,0x00,
100910 -0x03,0x00,0x00,0x00,
100911 -0x24,0x08,0x00,0x00,
100912 -0x0F,0x00,0xF0,0x00,
100913 -0x04,0x00,0x30,0x00,
100914 -0x2C,0x08,0x00,0x00,
100915 -0x0F,0x00,0xF0,0x00,
100916 -0x02,0x00,0x30,0x00,
100917 -0x70,0x08,0x00,0x00,
100918 -0x00,0x00,0x00,0x04,
100919 -0x01,0x00,0x00,0x00,
100920 -0x64,0x08,0x00,0x00,
100921 -0x00,0x04,0x00,0x00,
100922 -0x00,0x00,0x00,0x00,
100923 -0x78,0x08,0x00,0x00,
100924 -0x0F,0x00,0x0F,0x00,
100925 -0x02,0x00,0x00,0x00,
100926 -0x74,0x0E,0x00,0x00,
100927 -0x00,0x00,0x00,0x0F,
100928 -0x02,0x00,0x00,0x00,
100929 -0x78,0x0E,0x00,0x00,
100930 -0x00,0x00,0x00,0x0F,
100931 -0x02,0x00,0x00,0x00,
100932 -0x7C,0x0E,0x00,0x00,
100933 -0x00,0x00,0x00,0x0F,
100934 -0x02,0x00,0x00,0x00,
100935 -0x80,0x0E,0x00,0x00,
100936 -0x00,0x00,0x00,0x0F,
100937 -0x02,0x00,0x00,0x00,
100938 -0x0C,0x09,0x00,0x00,
100939 -0xFF,0x00,0x00,0x00,
100940 -0x11,0x00,0x00,0x00,
100941 -0x04,0x0C,0x00,0x00,
100942 -0xFF,0x00,0x00,0x00,
100943 -0x33,0x00,0x00,0x00,
100944 -0x04,0x0D,0x00,0x00,
100945 -0x0F,0x00,0x00,0x00,
100946 -0x03,0x00,0x00,0x00,
100947 -0xF4,0x01,0x00,0x00,
100948 -0x00,0x00,0xFF,0xFF,
100949 -0x77,0x77,0x00,0x00,
100950 -0x34,0x02,0x00,0x00,
100951 -0x00,0x00,0x00,0xF8,
100952 -0x0A,0x00,0x00,0x00,
100953 -0x44,0x08,0x00,0x00,
100954 -0xFF,0xFF,0xFF,0xFF,
100955 -0x00,0x00,0x01,0x00,
100956 -0x04,0x08,0x00,0x00,
100957 -0x0F,0x00,0x00,0x00,
100958 -0x01,0x00,0x00,0x00,
100959 -0x24,0x08,0x00,0x00,
100960 -0x0F,0x00,0xF0,0x00,
100961 -0x04,0x00,0x30,0x00,
100962 -0x2C,0x08,0x00,0x00,
100963 -0x0F,0x00,0xF0,0x00,
100964 -0x02,0x00,0x10,0x00,
100965 -0x70,0x08,0x00,0x00,
100966 -0x00,0x00,0x00,0x04,
100967 -0x01,0x00,0x00,0x00,
100968 -0x64,0x08,0x00,0x00,
100969 -0x00,0x04,0x00,0x00,
100970 -0x00,0x00,0x00,0x00,
100971 -0x78,0x08,0x00,0x00,
100972 -0x0F,0x00,0x0F,0x00,
100973 -0x02,0x00,0x00,0x00,
100974 -0x74,0x0E,0x00,0x00,
100975 -0x00,0x00,0x00,0x0F,
100976 -0x02,0x00,0x00,0x00,
100977 -0x78,0x0E,0x00,0x00,
100978 -0x00,0x00,0x00,0x0F,
100979 -0x02,0x00,0x00,0x00,
100980 -0x7C,0x0E,0x00,0x00,
100981 -0x00,0x00,0x00,0x0F,
100982 -0x02,0x00,0x00,0x00,
100983 -0x80,0x0E,0x00,0x00,
100984 -0x00,0x00,0x00,0x0F,
100985 -0x02,0x00,0x00,0x00,
100986 -0x0C,0x09,0x00,0x00,
100987 -0xFF,0x00,0x00,0x00,
100988 -0x11,0x00,0x00,0x00,
100989 -0x04,0x0C,0x00,0x00,
100990 -0xFF,0x00,0x00,0x00,
100991 -0x11,0x00,0x00,0x00,
100992 -0x04,0x0D,0x00,0x00,
100993 -0x0F,0x00,0x00,0x00,
100994 -0x01,0x00,0x00,0x00,
100995 -0xF4,0x01,0x00,0x00,
100996 -0x00,0x00,0xFF,0xFF,
100997 -0x77,0x77,0x00,0x00,
100998 -0x34,0x02,0x00,0x00,
100999 -0x00,0x00,0x00,0xF8,
101000 -0x0A,0x00,0x00,0x00,
101001 -0x1C,0x00,0x00,0x00,
101002 -0x00,0x00,0x00,0x07,
101003 -0x00,0x08,0x00,0x00,
101004 -0x00,0x00,0x04,0x00,
101005 -0x04,0x08,0x00,0x00,
101006 -0x03,0x80,0x00,0x00,
101007 -0x08,0x08,0x00,0x00,
101008 -0x00,0xFC,0x00,0x00,
101009 -0x0C,0x08,0x00,0x00,
101010 -0x0A,0x00,0x00,0x00,
101011 -0x10,0x08,0x00,0x00,
101012 -0x88,0x50,0x00,0x10,
101013 -0x14,0x08,0x00,0x00,
101014 -0x10,0x3D,0x0C,0x02,
101015 -0x18,0x08,0x00,0x00,
101016 -0x85,0x01,0x20,0x00,
101017 -0x1C,0x08,0x00,0x00,
101018 -0x00,0x00,0x00,0x00,
101019 -0x20,0x08,0x00,0x00,
101020 -0x00,0x00,0x00,0x01,
101021 -0x24,0x08,0x00,0x00,
101022 -0x04,0x00,0x39,0x00,
101023 -0x28,0x08,0x00,0x00,
101024 -0x00,0x00,0x00,0x01,
101025 -0x2C,0x08,0x00,0x00,
101026 -0x04,0x00,0x39,0x00,
101027 -0x30,0x08,0x00,0x00,
101028 -0x04,0x00,0x00,0x00,
101029 -0x34,0x08,0x00,0x00,
101030 -0x00,0x02,0x69,0x00,
101031 -0x38,0x08,0x00,0x00,
101032 -0x04,0x00,0x00,0x00,
101033 -0x3C,0x08,0x00,0x00,
101034 -0x00,0x02,0x69,0x00,
101035 -0x40,0x08,0x00,0x00,
101036 -0x00,0x00,0x01,0x00,
101037 -0x44,0x08,0x00,0x00,
101038 -0x00,0x00,0x01,0x00,
101039 -0x48,0x08,0x00,0x00,
101040 -0x00,0x00,0x00,0x00,
101041 -0x4C,0x08,0x00,0x00,
101042 -0x00,0x00,0x00,0x00,
101043 -0x50,0x08,0x00,0x00,
101044 -0x00,0x00,0x00,0x00,
101045 -0x54,0x08,0x00,0x00,
101046 -0x00,0x00,0x00,0x00,
101047 -0x58,0x08,0x00,0x00,
101048 -0x48,0x48,0x48,0x48,
101049 -0x5C,0x08,0x00,0x00,
101050 -0xA9,0x65,0xA9,0x65,
101051 -0x60,0x08,0x00,0x00,
101052 -0x30,0x01,0x7F,0x0F,
101053 -0x64,0x08,0x00,0x00,
101054 -0x30,0x01,0x7F,0x0F,
101055 -0x68,0x08,0x00,0x00,
101056 -0x30,0x01,0x7F,0x0F,
101057 -0x6C,0x08,0x00,0x00,
101058 -0x30,0x01,0x7F,0x0F,
101059 -0x70,0x08,0x00,0x00,
101060 -0x00,0x07,0x00,0x03,
101061 -0x74,0x08,0x00,0x00,
101062 -0x00,0x03,0x00,0x03,
101063 -0x78,0x08,0x00,0x00,
101064 -0x02,0x00,0x02,0x00,
101065 -0x7C,0x08,0x00,0x00,
101066 -0x01,0x02,0x4F,0x00,
101067 -0x80,0x08,0x00,0x00,
101068 -0xC1,0x0A,0x30,0xA8,
101069 -0x84,0x08,0x00,0x00,
101070 -0x58,0x00,0x00,0x00,
101071 -0x88,0x08,0x00,0x00,
101072 -0x08,0x00,0x00,0x00,
101073 -0x8C,0x08,0x00,0x00,
101074 -0x04,0x00,0x00,0x00,
101075 -0x90,0x08,0x00,0x00,
101076 -0x00,0x00,0x00,0x00,
101077 -0x94,0x08,0x00,0x00,
101078 -0xFE,0xFF,0xFF,0xFF,
101079 -0x98,0x08,0x00,0x00,
101080 -0x10,0x20,0x30,0x40,
101081 -0x9C,0x08,0x00,0x00,
101082 -0x50,0x60,0x70,0x00,
101083 -0xB0,0x08,0x00,0x00,
101084 -0x00,0x00,0x00,0x00,
101085 -0xE0,0x08,0x00,0x00,
101086 -0x00,0x00,0x00,0x00,
101087 -0xE4,0x08,0x00,0x00,
101088 -0x00,0x00,0x00,0x00,
101089 -0x00,0x0E,0x00,0x00,
101090 -0x33,0x33,0x33,0x30,
101091 -0x04,0x0E,0x00,0x00,
101092 -0x2F,0x2E,0x2D,0x2A,
101093 -0x08,0x0E,0x00,0x00,
101094 -0x32,0x32,0x00,0x00,
101095 -0x10,0x0E,0x00,0x00,
101096 -0x33,0x33,0x33,0x30,
101097 -0x14,0x0E,0x00,0x00,
101098 -0x2F,0x2E,0x2D,0x2A,
101099 -0x18,0x0E,0x00,0x00,
101100 -0x33,0x33,0x33,0x30,
101101 -0x1C,0x0E,0x00,0x00,
101102 -0x2F,0x2E,0x2D,0x2A,
101103 -0x30,0x0E,0x00,0x00,
101104 -0x00,0x7C,0x00,0x01,
101105 -0x34,0x0E,0x00,0x00,
101106 -0x00,0x48,0x00,0x01,
101107 -0x38,0x0E,0x00,0x00,
101108 -0x1F,0xDC,0x00,0x10,
101109 -0x3C,0x0E,0x00,0x00,
101110 -0x1F,0x8C,0x00,0x10,
101111 -0x40,0x0E,0x00,0x00,
101112 -0xA0,0x00,0x14,0x02,
101113 -0x44,0x0E,0x00,0x00,
101114 -0xA0,0x00,0x16,0x28,
101115 -0x48,0x0E,0x00,0x00,
101116 -0x01,0x00,0x00,0xF8,
101117 -0x4C,0x0E,0x00,0x00,
101118 -0x10,0x29,0x00,0x00,
101119 -0x50,0x0E,0x00,0x00,
101120 -0x00,0x7C,0x00,0x01,
101121 -0x54,0x0E,0x00,0x00,
101122 -0x00,0x48,0x00,0x01,
101123 -0x58,0x0E,0x00,0x00,
101124 -0x1F,0xDC,0x00,0x10,
101125 -0x5C,0x0E,0x00,0x00,
101126 -0x1F,0x8C,0x00,0x10,
101127 -0x60,0x0E,0x00,0x00,
101128 -0xA0,0x00,0x14,0x02,
101129 -0x64,0x0E,0x00,0x00,
101130 -0xA0,0x00,0x16,0x28,
101131 -0x6C,0x0E,0x00,0x00,
101132 -0x10,0x29,0x00,0x00,
101133 -0x70,0x0E,0x00,0x00,
101134 -0xFB,0x92,0xED,0x31,
101135 -0x74,0x0E,0x00,0x00,
101136 -0xFB,0x36,0x15,0x36,
101137 -0x78,0x0E,0x00,0x00,
101138 -0xFB,0x36,0x15,0x36,
101139 -0x7C,0x0E,0x00,0x00,
101140 -0xFB,0x36,0x15,0x36,
101141 -0x80,0x0E,0x00,0x00,
101142 -0xFB,0x36,0x15,0x36,
101143 -0x84,0x0E,0x00,0x00,
101144 -0xFB,0x92,0x0D,0x00,
101145 -0x88,0x0E,0x00,0x00,
101146 -0xFB,0x92,0x0D,0x00,
101147 -0x8C,0x0E,0x00,0x00,
101148 -0xFB,0x92,0xED,0x31,
101149 -0xD0,0x0E,0x00,0x00,
101150 -0xFB,0x92,0xED,0x31,
101151 -0xD4,0x0E,0x00,0x00,
101152 -0xFB,0x92,0xED,0x31,
101153 -0xD8,0x0E,0x00,0x00,
101154 -0xFB,0x92,0x0D,0x00,
101155 -0xDC,0x0E,0x00,0x00,
101156 -0xFB,0x92,0x0D,0x00,
101157 -0xE0,0x0E,0x00,0x00,
101158 -0xFB,0x92,0x0D,0x00,
101159 -0xE4,0x0E,0x00,0x00,
101160 -0x48,0x54,0x5E,0x01,
101161 -0xE8,0x0E,0x00,0x00,
101162 -0x48,0x54,0x55,0x21,
101163 -0x00,0x09,0x00,0x00,
101164 -0x00,0x00,0x00,0x00,
101165 -0x04,0x09,0x00,0x00,
101166 -0x23,0x00,0x00,0x00,
101167 -0x08,0x09,0x00,0x00,
101168 -0x00,0x00,0x00,0x00,
101169 -0x0C,0x09,0x00,0x00,
101170 -0x13,0x13,0x12,0x01,
101171 -0x00,0x0A,0x00,0x00,
101172 -0xC8,0x47,0xD0,0x00,
101173 -0x04,0x0A,0x00,0x00,
101174 -0x08,0x00,0xFF,0x80,
101175 -0x08,0x0A,0x00,0x00,
101176 -0x00,0x83,0xCD,0x88,
101177 -0x0C,0x0A,0x00,0x00,
101178 -0x0F,0x12,0x62,0x2E,
101179 -0x10,0x0A,0x00,0x00,
101180 -0x78,0xBB,0x00,0x95,
101181 -0x14,0x0A,0x00,0x00,
101182 -0x28,0x40,0x14,0x11,
101183 -0x18,0x0A,0x00,0x00,
101184 -0x17,0x11,0x88,0x00,
101185 -0x1C,0x0A,0x00,0x00,
101186 -0x00,0x0F,0x14,0x89,
101187 -0x20,0x0A,0x00,0x00,
101188 -0x00,0x00,0x1B,0x1A,
101189 -0x24,0x0A,0x00,0x00,
101190 -0x17,0x13,0x0E,0x09,
101191 -0x28,0x0A,0x00,0x00,
101192 -0x04,0x02,0x00,0x00,
101193 -0x2C,0x0A,0x00,0x00,
101194 -0x00,0x00,0xD3,0x10,
101195 -0x00,0x0C,0x00,0x00,
101196 -0x40,0x1D,0x07,0x40,
101197 -0x04,0x0C,0x00,0x00,
101198 -0x33,0x56,0xA0,0x00,
101199 -0x08,0x0C,0x00,0x00,
101200 -0xE4,0x00,0x00,0x00,
101201 -0x0C,0x0C,0x00,0x00,
101202 -0x6C,0x6C,0x6C,0x6C,
101203 -0x10,0x0C,0x00,0x00,
101204 -0x00,0x00,0x80,0x08,
101205 -0x14,0x0C,0x00,0x00,
101206 -0x00,0x01,0x00,0x40,
101207 -0x18,0x0C,0x00,0x00,
101208 -0x00,0x00,0x00,0x08,
101209 -0x1C,0x0C,0x00,0x00,
101210 -0x00,0x01,0x00,0x40,
101211 -0x20,0x0C,0x00,0x00,
101212 -0x00,0x00,0x00,0x08,
101213 -0x24,0x0C,0x00,0x00,
101214 -0x00,0x01,0x00,0x40,
101215 -0x28,0x0C,0x00,0x00,
101216 -0x00,0x00,0x00,0x08,
101217 -0x2C,0x0C,0x00,0x00,
101218 -0x00,0x01,0x00,0x40,
101219 -0x30,0x0C,0x00,0x00,
101220 -0x44,0xAC,0xE9,0x6D,
101221 -0x34,0x0C,0x00,0x00,
101222 -0xCF,0x52,0x96,0x46,
101223 -0x38,0x0C,0x00,0x00,
101224 -0x94,0x59,0x79,0x49,
101225 -0x3C,0x0C,0x00,0x00,
101226 -0x64,0x97,0x97,0x0A,
101227 -0x40,0x0C,0x00,0x00,
101228 -0x3F,0x40,0x7C,0x1F,
101229 -0x44,0x0C,0x00,0x00,
101230 -0xB7,0x00,0x01,0x00,
101231 -0x48,0x0C,0x00,0x00,
101232 -0x00,0x00,0x02,0xEC,
101233 -0x4C,0x0C,0x00,0x00,
101234 -0x7F,0x03,0x7F,0x00,
101235 -0x50,0x0C,0x00,0x00,
101236 -0x20,0x34,0x54,0x69,
101237 -0x54,0x0C,0x00,0x00,
101238 -0x94,0x00,0x3C,0x43,
101239 -0x58,0x0C,0x00,0x00,
101240 -0x20,0x34,0x54,0x69,
101241 -0x5C,0x0C,0x00,0x00,
101242 -0x94,0x00,0x3C,0x43,
101243 -0x60,0x0C,0x00,0x00,
101244 -0x20,0x34,0x54,0x69,
101245 -0x64,0x0C,0x00,0x00,
101246 -0x94,0x00,0x3C,0x43,
101247 -0x68,0x0C,0x00,0x00,
101248 -0x20,0x34,0x54,0x69,
101249 -0x6C,0x0C,0x00,0x00,
101250 -0x94,0x00,0x3C,0x43,
101251 -0x70,0x0C,0x00,0x00,
101252 -0x0D,0x00,0x7F,0x2C,
101253 -0x74,0x0C,0x00,0x00,
101254 -0x5B,0x17,0x86,0x01,
101255 -0x78,0x0C,0x00,0x00,
101256 -0x1F,0x00,0x00,0x00,
101257 -0x7C,0x0C,0x00,0x00,
101258 -0x12,0x16,0xB9,0x00,
101259 -0x80,0x0C,0x00,0x00,
101260 -0x00,0x01,0x00,0x40,
101261 -0x84,0x0C,0x00,0x00,
101262 -0x00,0x00,0xF6,0x20,
101263 -0x88,0x0C,0x00,0x00,
101264 -0x80,0x00,0x00,0x20,
101265 -0x8C,0x0C,0x00,0x00,
101266 -0x00,0x00,0x20,0x20,
101267 -0x90,0x0C,0x00,0x00,
101268 -0x00,0x01,0x00,0x40,
101269 -0x94,0x0C,0x00,0x00,
101270 -0x00,0x00,0x00,0x00,
101271 -0x98,0x0C,0x00,0x00,
101272 -0x00,0x01,0x00,0x40,
101273 -0x9C,0x0C,0x00,0x00,
101274 -0x00,0x00,0x00,0x00,
101275 -0xA0,0x0C,0x00,0x00,
101276 -0x92,0x24,0x49,0x00,
101277 -0xA4,0x0C,0x00,0x00,
101278 -0x00,0x00,0x00,0x00,
101279 -0xA8,0x0C,0x00,0x00,
101280 -0x00,0x00,0x00,0x00,
101281 -0xAC,0x0C,0x00,0x00,
101282 -0x00,0x00,0x00,0x00,
101283 -0xB0,0x0C,0x00,0x00,
101284 -0x00,0x00,0x00,0x00,
101285 -0xB4,0x0C,0x00,0x00,
101286 -0x00,0x00,0x00,0x00,
101287 -0xB8,0x0C,0x00,0x00,
101288 -0x00,0x00,0x00,0x00,
101289 -0xBC,0x0C,0x00,0x00,
101290 -0x00,0x00,0x00,0x28,
101291 -0xC0,0x0C,0x00,0x00,
101292 -0x00,0x00,0x00,0x00,
101293 -0xC4,0x0C,0x00,0x00,
101294 -0x00,0x00,0x00,0x00,
101295 -0xC8,0x0C,0x00,0x00,
101296 -0x00,0x00,0x00,0x00,
101297 -0xCC,0x0C,0x00,0x00,
101298 -0x00,0x00,0x00,0x00,
101299 -0xD0,0x0C,0x00,0x00,
101300 -0x00,0x00,0x00,0x00,
101301 -0xD4,0x0C,0x00,0x00,
101302 -0x00,0x00,0x00,0x00,
101303 -0xD8,0x0C,0x00,0x00,
101304 -0x27,0x24,0xB2,0x64,
101305 -0xDC,0x0C,0x00,0x00,
101306 -0x32,0x69,0x76,0x00,
101307 -0xE0,0x0C,0x00,0x00,
101308 -0x22,0x22,0x22,0x00,
101309 -0xE4,0x0C,0x00,0x00,
101310 -0x00,0x00,0x00,0x00,
101311 -0xE8,0x0C,0x00,0x00,
101312 -0x02,0x43,0x64,0x37,
101313 -0xEC,0x0C,0x00,0x00,
101314 -0x0C,0xD4,0x97,0x2F,
101315 -0x00,0x0D,0x00,0x00,
101316 -0x50,0x07,0x00,0x00,
101317 -0x04,0x0D,0x00,0x00,
101318 -0x03,0x04,0x00,0x00,
101319 -0x08,0x0D,0x00,0x00,
101320 -0x7F,0x90,0x00,0x00,
101321 -0x0C,0x0D,0x00,0x00,
101322 -0x01,0x00,0x00,0x00,
101323 -0x10,0x0D,0x00,0x00,
101324 -0x33,0x33,0x63,0xA0,
101325 -0x14,0x0D,0x00,0x00,
101326 -0x63,0x3C,0x33,0x33,
101327 -0x18,0x0D,0x00,0x00,
101328 -0x6B,0x5B,0x8F,0x6A,
101329 -0x1C,0x0D,0x00,0x00,
101330 -0x00,0x00,0x00,0x00,
101331 -0x20,0x0D,0x00,0x00,
101332 -0x00,0x00,0x00,0x00,
101333 -0x24,0x0D,0x00,0x00,
101334 -0x00,0x00,0x00,0x00,
101335 -0x28,0x0D,0x00,0x00,
101336 -0x00,0x00,0x00,0x00,
101337 -0x2C,0x0D,0x00,0x00,
101338 -0x75,0x99,0x97,0xCC,
101339 -0x30,0x0D,0x00,0x00,
101340 -0x00,0x00,0x00,0x00,
101341 -0x34,0x0D,0x00,0x00,
101342 -0x00,0x00,0x00,0x00,
101343 -0x38,0x0D,0x00,0x00,
101344 -0x00,0x00,0x00,0x00,
101345 -0x3C,0x0D,0x00,0x00,
101346 -0x93,0x72,0x02,0x00,
101347 -0x40,0x0D,0x00,0x00,
101348 -0x00,0x00,0x00,0x00,
101349 -0x44,0x0D,0x00,0x00,
101350 -0x00,0x00,0x00,0x00,
101351 -0x48,0x0D,0x00,0x00,
101352 -0x00,0x00,0x00,0x00,
101353 -0x50,0x0D,0x00,0x00,
101354 -0x0A,0x14,0x37,0x64,
101355 -0x54,0x0D,0x00,0x00,
101356 -0x02,0xBD,0x4D,0x02,
101357 -0x58,0x0D,0x00,0x00,
101358 -0x00,0x00,0x00,0x00,
101359 -0x5C,0x0D,0x00,0x00,
101360 -0x64,0x20,0x03,0x30,
101361 -0x60,0x0D,0x00,0x00,
101362 -0x68,0xDE,0x53,0x46,
101363 -0x64,0x0D,0x00,0x00,
101364 -0x3C,0x8A,0x51,0x00,
101365 -0x68,0x0D,0x00,0x00,
101366 -0x01,0x21,0x00,0x00,
101367 -0x14,0x0F,0x00,0x00,
101368 -0x03,0x00,0x00,0x00,
101369 -0x4C,0x0F,0x00,0x00,
101370 -0x00,0x00,0x00,0x00,
101371 -0x00,0x0F,0x00,0x00,
101372 -0x00,0x03,0x00,0x00,
101373 -0x40,0x01,0x00,0x00,
101374 -0x04,0x00,0x00,0x00,
101375 -0xFF,0x00,0x00,0x00,
101376 -0x10,0x00,0x00,0x00,
101377 -0x0C,0x02,0x01,0x80,
101378 -0x10,0x00,0x00,0x00,
101379 -0x3C,0x02,0x01,0x80,
101380 -0x10,0x00,0x00,0x00,
101381 -0x2C,0x08,0x01,0x80,
101382 -0x10,0x00,0x00,0x00,
101383 -0x34,0x08,0x01,0x80,
101384 -0x10,0x00,0x00,0x00,
101385 -0x3C,0x08,0x01,0x80,
101386 -0x10,0x00,0x00,0x00,
101387 -0x44,0x08,0x01,0x80,
101388 -0x10,0x00,0x00,0x00,
101389 -0x1C,0x08,0x01,0x80,
101390 -0x10,0x00,0x00,0x00,
101391 -0x24,0x08,0x01,0x80,
101392 -0x10,0x00,0x00,0x00,
101393 -0x7C,0x08,0x01,0x80,
101394 -0x10,0x00,0x00,0x00,
101395 -0x84,0x08,0x01,0x80,
101396 -0x10,0x00,0x00,0x00,
101397 -0xE0,0x03,0x01,0x80,
101398 -0x10,0x00,0x00,0x00,
101399 -0xD8,0x03,0x01,0x80,
101400 -0x10,0x00,0x00,0x00,
101401 -0x8C,0x08,0x01,0x80,
101402 -0x10,0x00,0x00,0x00,
101403 -0x94,0x08,0x01,0x80,
101404 -0xDC,0x01,0x00,0x00,
101405 -0x54,0x25,0x00,0x80,
101406 -0x04,0x00,0x00,0x00,
101407 -0x10,0x06,0x01,0x80,
101408 -0xDC,0x01,0x00,0x00,
101409 -0x54,0x25,0x00,0x80,
101410 -0x04,0x00,0x00,0x00,
101411 -0xD0,0x27,0x00,0x80,
101412 -0x30,0x00,0x00,0x00,
101413 -0xD8,0x27,0x00,0x80,
101414 -0x04,0x00,0x00,0x00,
101415 -0x64,0x2A,0x00,0x80,
101416 -0x13,0x00,0x00,0x00,
101417 -0xE8,0x06,0x01,0x80,
101418 -0x17,0x00,0x00,0x00,
101419 -0x3C,0x07,0x01,0x80,
101420 -0x06,0x00,0x00,0x00,
101421 -0xC4,0x07,0x01,0x80,
101422 -0x06,0x00,0x00,0x00,
101423 -0xCC,0x07,0x01,0x80,
101424 -0x08,0x00,0x00,0x00,
101425 -0xD4,0x07,0x01,0x80,
101426 -0x0C,0x00,0x00,0x00,
101427 -0xDC,0x07,0x01,0x80,
101428 -0x04,0x00,0x00,0x00,
101429 -0xE4,0x07,0x01,0x80,
101430 -0x0E,0x00,0x00,0x00,
101431 -0xEC,0x07,0x01,0x80,
101432 -0x01,0x00,0x00,0x00,
101433 -0xF4,0x07,0x01,0x80,
101434 -0x38,0x00,0x00,0x00,
101435 -0xFC,0x07,0x01,0x80,
101436 -0x04,0x00,0x00,0x00,
101437 -0x04,0x08,0x01,0x80,
101438 -0x02,0x00,0x00,0x00,
101439 -0x0C,0x08,0x01,0x80,
101440 -0x04,0x00,0x00,0x00,
101441 -0x14,0x08,0x01,0x80,
101442 -0x01,0x00,0x00,0x00,
101443 -0x54,0x08,0x01,0x80,
101444 -0x01,0x00,0x00,0x00,
101445 -0x5C,0x08,0x01,0x80,
101446 -0x0C,0x00,0x00,0x00,
101447 -0xE8,0x03,0x01,0x80,
101448 -0x0E,0x00,0x00,0x00,
101449 -0xF0,0x03,0x01,0x80,
101450 -0x0C,0x00,0x00,0x00,
101451 -0x08,0x06,0x01,0x80,
101452 -0x34,0x00,0x00,0x00,
101453 -0x64,0x08,0x01,0x80,
101454 -0x04,0x00,0x00,0x00,
101455 -0x6C,0x08,0x01,0x80,
101456 -0x04,0x00,0x00,0x00,
101457 -0x9C,0x08,0x01,0x80,
101458 -0x04,0x00,0x00,0x00,
101459 -0xA4,0x08,0x01,0x80,
101460 -0x04,0x00,0x00,0x00,
101461 -0xAC,0x08,0x01,0x80,
101462 -0x04,0x00,0x00,0x00,
101463 -0x74,0x08,0x01,0x80,
101464 -0x08,0x00,0x00,0x00,
101465 -0x40,0x03,0x01,0x80,
101466 -0x04,0x00,0x00,0x00,
101467 -0xB4,0x08,0x01,0x80,
101468 -0x04,0x00,0x00,0x00,
101469 -0x2C,0x09,0x01,0x80,
101470 -0x04,0x00,0x00,0x00,
101471 -0x38,0x09,0x01,0x80,
101472 -0x04,0x00,0x00,0x00,
101473 -0xEC,0x09,0x01,0x80,
101474 -0x04,0x00,0x00,0x00,
101475 -0x50,0x0C,0x01,0x80,
101476 -0x04,0x00,0x00,0x00,
101477 -0x60,0x0C,0x01,0x80,
101478 -0x04,0x00,0x00,0x00,
101479 -0xC8,0x0D,0x01,0x80,
101480 -0x04,0x00,0x00,0x00,
101481 -0xF4,0x0E,0x01,0x80,
101482 -0x04,0x00,0x00,0x00,
101483 -0x30,0x10,0x01,0x80,
101484 -0x04,0x00,0x00,0x00,
101485 -0x48,0x12,0x01,0x80,
101486 -0x51,0x73,0x65,0x6C,
101487 -0x20,0x45,0x72,0x72,
101488 -0x6F,0x72,0x2C,0x20,
101489 -0x25,0x78,0x00,0x00,
101490 -0x72,0x65,0x70,0x65,
101491 -0x61,0x74,0x65,0x64,
101492 -0x20,0x65,0x6C,0x65,
101493 -0x6D,0x65,0x6E,0x74,
101494 -0x20,0x49,0x44,0x3A,
101495 -0x20,0x25,0x78,0x2C,
101496 -0x20,0x63,0x6D,0x64,
101497 -0x20,0x73,0x65,0x71,
101498 -0x3D,0x25,0x78,0x2C,
101499 -0x20,0x68,0x32,0x64,
101500 -0x73,0x65,0x71,0x3D,
101501 -0x25,0x78,0x0A,0x00,
101502 -0x69,0x6E,0x76,0x61,
101503 -0x6C,0x69,0x64,0x20,
101504 -0x63,0x6D,0x64,0x20,
101505 -0x69,0x64,0x3A,0x20,
101506 -0x25,0x78,0x0A,0x00,
101507 -0x48,0x32,0x43,0x3A,
101508 -0x20,0x25,0x78,0x0A,
101509 -0x00,0x00,0x00,0x00,
101510 -0x67,0x65,0x74,0x20,
101511 -0x6A,0x6F,0x69,0x6E,
101512 -0x20,0x63,0x6D,0x64,
101513 -0x0A,0x00,0x00,0x00,
101514 -0x4E,0x6F,0x20,0x69,
101515 -0x72,0x70,0x20,0x25,
101516 -0x73,0x0A,0x00,0x00,
101517 -0x67,0x65,0x74,0x20,
101518 -0x73,0x75,0x72,0x76,
101519 -0x65,0x79,0x20,0x63,
101520 -0x6D,0x64,0x0A,0x00,
101521 -0x53,0x53,0x49,0x44,
101522 -0x3A,0x20,0x25,0x73,
101523 -0x0A,0x00,0x00,0x00,
101524 -0x73,0x65,0x74,0x41,
101525 -0x75,0x74,0x68,0x3A,
101526 -0x20,0x25,0x78,0x0A,
101527 -0x00,0x00,0x00,0x00,
101528 -0x72,0x63,0x76,0x20,
101529 -0x73,0x65,0x74,0x5F,
101530 -0x73,0x74,0x61,0x6B,
101531 -0x65,0x79,0x0A,0x00,
101532 -0x53,0x65,0x74,0x53,
101533 -0x69,0x6E,0x67,0x6C,
101534 -0x65,0x43,0x61,0x72,
101535 -0x72,0x69,0x65,0x72,
101536 -0x54,0x78,0x5F,0x68,
101537 -0x64,0x6C,0x0A,0x00,
101538 -0x53,0x65,0x74,0x53,
101539 -0x69,0x6E,0x67,0x6C,
101540 -0x65,0x54,0x6F,0x6E,
101541 -0x65,0x54,0x78,0x5F,
101542 -0x68,0x64,0x6C,0x0A,
101543 -0x00,0x00,0x00,0x00,
101544 -0x53,0x65,0x74,0x43,
101545 -0x61,0x72,0x72,0x69,
101546 -0x65,0x72,0x53,0x75,
101547 -0x70,0x70,0x72,0x65,
101548 -0x73,0x73,0x69,0x6F,
101549 -0x6E,0x54,0x78,0x5F,
101550 -0x68,0x64,0x6C,0x0A,
101551 -0x00,0x00,0x00,0x00,
101552 -0x53,0x65,0x74,0x43,
101553 -0x6F,0x6E,0x74,0x69,
101554 -0x6E,0x75,0x6F,0x75,
101555 -0x73,0x54,0x78,0x5F,
101556 -0x68,0x64,0x6C,0x0A,
101557 -0x00,0x00,0x00,0x00,
101558 -0x53,0x65,0x74,0x43,
101559 -0x43,0x4B,0x43,0x6F,
101560 -0x6E,0x74,0x69,0x6E,
101561 -0x75,0x6F,0x75,0x73,
101562 -0x54,0x78,0x0A,0x00,
101563 -0x53,0x65,0x74,0x4F,
101564 -0x46,0x44,0x4D,0x43,
101565 -0x6F,0x6E,0x74,0x69,
101566 -0x6E,0x75,0x6F,0x75,
101567 -0x73,0x54,0x78,0x0A,
101568 -0x00,0x00,0x00,0x00,
101569 -0x13,0x00,0x00,0x00,
101570 -0xF8,0x9E,0x02,0x00,
101571 -0x13,0x00,0x00,0x00,
101572 -0xC8,0x5E,0x02,0x00,
101573 -0x13,0x00,0x00,0x00,
101574 -0xF8,0x0E,0x02,0x00,
101575 -0x13,0x00,0x00,0x00,
101576 -0xC8,0xCE,0x01,0x00,
101577 -0x13,0x00,0x00,0x00,
101578 -0xD4,0x8E,0x01,0x00,
101579 -0x13,0x00,0x00,0x00,
101580 -0xA4,0x4E,0x01,0x00,
101581 -0x13,0x00,0x00,0x00,
101582 -0xD0,0x0E,0x01,0x00,
101583 -0x13,0x00,0x00,0x00,
101584 -0xA0,0xCE,0x00,0x00,
101585 -0x13,0x00,0x00,0x00,
101586 -0xD0,0x86,0x00,0x00,
101587 -0x13,0x00,0x00,0x00,
101588 -0xA0,0x46,0x00,0x00,
101589 -0x13,0x00,0x00,0x00,
101590 -0x70,0x06,0x00,0x00,
101591 -0x13,0x00,0x00,0x00,
101592 -0xA4,0x9E,0x02,0x00,
101593 -0x13,0x00,0x00,0x00,
101594 -0x74,0x5E,0x02,0x00,
101595 -0x13,0x00,0x00,0x00,
101596 -0xA4,0x0E,0x02,0x00,
101597 -0x13,0x00,0x00,0x00,
101598 -0xD0,0xCE,0x01,0x00,
101599 -0x13,0x00,0x00,0x00,
101600 -0x40,0x9F,0x01,0x00,
101601 -0x13,0x00,0x00,0x00,
101602 -0x70,0x4E,0x01,0x00,
101603 -0x13,0x00,0x00,0x00,
101604 -0xA0,0x06,0x01,0x00,
101605 -0x13,0x00,0x00,0x00,
101606 -0x70,0xC6,0x00,0x00,
101607 -0x13,0x00,0x00,0x00,
101608 -0xA0,0x82,0x00,0x00,
101609 -0x13,0x00,0x00,0x00,
101610 -0x70,0x42,0x00,0x00,
101611 -0x13,0x00,0x00,0x00,
101612 -0x40,0x02,0x00,0x00,
101613 -0xAA,0x88,0x88,0x44,
101614 -0x44,0x22,0x22,0x00,
101615 -0xAA,0x88,0x88,0x44,
101616 -0x44,0x22,0x22,0x00,
101617 -0xAA,0x88,0x88,0x44,
101618 -0x44,0x22,0x22,0x00,
101619 -0xAA,0x88,0x88,0x44,
101620 -0x44,0x22,0x22,0x00,
101621 -0xAA,0x88,0x88,0x44,
101622 -0x44,0x22,0x22,0x00,
101623 -0xAA,0x88,0x88,0x44,
101624 -0x44,0x22,0x22,0x00,
101625 -0xAA,0x88,0x88,0x44,
101626 -0x44,0x22,0x22,0x00,
101627 -0xAA,0x88,0x88,0x44,
101628 -0x44,0x22,0x22,0x00,
101629 -0xAA,0x88,0x88,0x44,
101630 -0x44,0x22,0x22,0x00,
101631 -0xAA,0x88,0x88,0x44,
101632 -0x44,0x22,0x22,0x00,
101633 -0xAA,0x88,0x88,0x44,
101634 -0x44,0x22,0x22,0x00,
101635 -0xAA,0x88,0x88,0x44,
101636 -0x44,0x22,0x22,0x00,
101637 -0x00,0x00,0x00,0x00,
101638 -0x59,0x01,0x03,0x00,
101639 -0x01,0x00,0x00,0x00,
101640 -0x41,0x10,0x00,0x00,
101641 -0x02,0x00,0x00,0x00,
101642 -0x00,0x10,0x01,0x00,
101643 -0x05,0x00,0x00,0x00,
101644 -0xC0,0x0F,0x08,0x00,
101645 -0x07,0x00,0x00,0x00,
101646 -0x03,0xC8,0x0F,0x00,
101647 -0x13,0x00,0x00,0x00,
101648 -0xB0,0x7C,0x01,0x00,
101649 -0x13,0x00,0x00,0x00,
101650 -0xC0,0x1C,0x01,0x00,
101651 -0x13,0x00,0x00,0x00,
101652 -0x60,0xDC,0x00,0x00,
101653 -0x13,0x00,0x00,0x00,
101654 -0x60,0x8C,0x00,0x00,
101655 -0x13,0x00,0x00,0x00,
101656 -0x50,0x44,0x00,0x00,
101657 -0x13,0x00,0x00,0x00,
101658 -0x20,0x00,0x00,0x00,
101659 -0x00,0x00,0x00,0x00,
101660 -0x59,0x01,0x03,0x00,
101661 -0x01,0x00,0x00,0x00,
101662 -0x50,0x02,0x03,0x00,
101663 -0x02,0x00,0x00,0x00,
101664 -0x00,0x00,0x01,0x00,
101665 -0x10,0x00,0x00,0x00,
101666 -0x0F,0x00,0x08,0x00,
101667 -0x11,0x00,0x00,0x00,
101668 -0xFC,0x31,0x02,0x00,
101669 -0x10,0x00,0x00,0x00,
101670 -0x0F,0x00,0x0C,0x00,
101671 -0x11,0x00,0x00,0x00,
101672 -0xF8,0xF9,0x03,0x00,
101673 -0x10,0x00,0x00,0x00,
101674 -0x0F,0x00,0x02,0x00,
101675 -0x11,0x00,0x00,0x00,
101676 -0x01,0x01,0x02,0x00,
101677 -0x14,0x00,0x00,0x00,
101678 -0x3E,0x09,0x01,0x00,
101679 -0x14,0x00,0x00,0x00,
101680 -0x3E,0x09,0x09,0x00,
101681 -0x15,0x00,0x00,0x00,
101682 -0xF4,0x98,0x01,0x00,
101683 -0x17,0x00,0x00,0x00,
101684 -0x00,0x65,0x0F,0x00,
101685 -0x1A,0x00,0x00,0x00,
101686 -0x56,0x30,0x01,0x00,
101687 -0x1B,0x00,0x00,0x00,
101688 -0x00,0x00,0x06,0x00,
101689 -0x1C,0x00,0x00,0x00,
101690 -0x00,0x03,0x00,0x00,
101691 -0x1E,0x00,0x00,0x00,
101692 -0x59,0x10,0x03,0x00,
101693 -0x21,0x00,0x00,0x00,
101694 -0x00,0x40,0x05,0x00,
101695 -0x22,0x00,0x00,0x00,
101696 -0x3C,0x08,0x00,0x00,
101697 -0x23,0x00,0x00,0x00,
101698 -0x58,0x15,0x00,0x00,
101699 -0x24,0x00,0x00,0x00,
101700 -0x60,0x00,0x00,0x00,
101701 -0x25,0x00,0x00,0x00,
101702 -0x83,0x25,0x02,0x00,
101703 -0x26,0x00,0x00,0x00,
101704 -0x00,0xF2,0x00,0x00,
101705 -0x27,0x00,0x00,0x00,
101706 -0xF1,0xAC,0x0E,0x00,
101707 -0x28,0x00,0x00,0x00,
101708 -0x54,0xBD,0x09,0x00,
101709 -0x29,0x00,0x00,0x00,
101710 -0x82,0x45,0x00,0x00,
101711 -0x2A,0x00,0x00,0x00,
101712 -0x01,0x00,0x00,0x00,
101713 -0x2B,0x00,0x00,0x00,
101714 -0x34,0x13,0x02,0x00,
101715 -0x2A,0x00,0x00,0x00,
101716 -0x00,0x00,0x00,0x00,
101717 -0x2B,0x00,0x00,0x00,
101718 -0x0A,0x00,0x00,0x00,
101719 -0x2A,0x00,0x00,0x00,
101720 -0x01,0x00,0x00,0x00,
101721 -0x2B,0x00,0x00,0x00,
101722 -0x08,0x08,0x00,0x00,
101723 -0x2B,0x00,0x00,0x00,
101724 -0x33,0x33,0x05,0x00,
101725 -0x2C,0x00,0x00,0x00,
101726 -0x0C,0x00,0x00,0x00,
101727 -0x2A,0x00,0x00,0x00,
101728 -0x02,0x00,0x00,0x00,
101729 -0x2B,0x00,0x00,0x00,
101730 -0x08,0x08,0x00,0x00,
101731 -0x2B,0x00,0x00,0x00,
101732 -0x33,0xB3,0x05,0x00,
101733 -0x2C,0x00,0x00,0x00,
101734 -0x0D,0x00,0x00,0x00,
101735 -0x2A,0x00,0x00,0x00,
101736 -0x03,0x00,0x00,0x00,
101737 -0x2B,0x00,0x00,0x00,
101738 -0x08,0x08,0x00,0x00,
101739 -0x2B,0x00,0x00,0x00,
101740 -0x33,0x33,0x06,0x00,
101741 -0x2C,0x00,0x00,0x00,
101742 -0x0D,0x00,0x00,0x00,
101743 -0x2A,0x00,0x00,0x00,
101744 -0x04,0x00,0x00,0x00,
101745 -0x2B,0x00,0x00,0x00,
101746 -0x08,0x08,0x00,0x00,
101747 -0x2B,0x00,0x00,0x00,
101748 -0x33,0xB3,0x06,0x00,
101749 -0x2C,0x00,0x00,0x00,
101750 -0x0D,0x00,0x00,0x00,
101751 -0x2A,0x00,0x00,0x00,
101752 -0x05,0x00,0x00,0x00,
101753 -0x2B,0x00,0x00,0x00,
101754 -0x09,0x07,0x00,0x00,
101755 -0x2B,0x00,0x00,0x00,
101756 -0x33,0x33,0x05,0x00,
101757 -0x2C,0x00,0x00,0x00,
101758 -0x0D,0x00,0x00,0x00,
101759 -0x2A,0x00,0x00,0x00,
101760 -0x06,0x00,0x00,0x00,
101761 -0x2B,0x00,0x00,0x00,
101762 -0x09,0x07,0x00,0x00,
101763 -0x2B,0x00,0x00,0x00,
101764 -0x33,0xB3,0x05,0x00,
101765 -0x2C,0x00,0x00,0x00,
101766 -0x0D,0x00,0x00,0x00,
101767 -0x2A,0x00,0x00,0x00,
101768 -0x07,0x00,0x00,0x00,
101769 -0x2B,0x00,0x00,0x00,
101770 -0x09,0x07,0x00,0x00,
101771 -0x2B,0x00,0x00,0x00,
101772 -0x33,0x33,0x06,0x00,
101773 -0x2C,0x00,0x00,0x00,
101774 -0x0D,0x00,0x00,0x00,
101775 -0x2A,0x00,0x00,0x00,
101776 -0x08,0x00,0x00,0x00,
101777 -0x2B,0x00,0x00,0x00,
101778 -0x09,0x07,0x00,0x00,
101779 -0x2B,0x00,0x00,0x00,
101780 -0x33,0xB3,0x06,0x00,
101781 -0x2C,0x00,0x00,0x00,
101782 -0x0D,0x00,0x00,0x00,
101783 -0x2A,0x00,0x00,0x00,
101784 -0x09,0x00,0x00,0x00,
101785 -0x2B,0x00,0x00,0x00,
101786 -0x0A,0x06,0x00,0x00,
101787 -0x2B,0x00,0x00,0x00,
101788 -0x33,0x33,0x05,0x00,
101789 -0x2C,0x00,0x00,0x00,
101790 -0x0D,0x00,0x00,0x00,
101791 -0x2A,0x00,0x00,0x00,
101792 -0x0A,0x00,0x00,0x00,
101793 -0x2B,0x00,0x00,0x00,
101794 -0x0A,0x06,0x00,0x00,
101795 -0x2B,0x00,0x00,0x00,
101796 -0x33,0xB3,0x05,0x00,
101797 -0x2C,0x00,0x00,0x00,
101798 -0x0D,0x00,0x00,0x00,
101799 -0x2A,0x00,0x00,0x00,
101800 -0x0B,0x00,0x00,0x00,
101801 -0x2B,0x00,0x00,0x00,
101802 -0x0A,0x06,0x00,0x00,
101803 -0x2B,0x00,0x00,0x00,
101804 -0x33,0x33,0x06,0x00,
101805 -0x2C,0x00,0x00,0x00,
101806 -0x0D,0x00,0x00,0x00,
101807 -0x2A,0x00,0x00,0x00,
101808 -0x0C,0x00,0x00,0x00,
101809 -0x2B,0x00,0x00,0x00,
101810 -0x0A,0x06,0x00,0x00,
101811 -0x2B,0x00,0x00,0x00,
101812 -0x33,0xB3,0x06,0x00,
101813 -0x2C,0x00,0x00,0x00,
101814 -0x0D,0x00,0x00,0x00,
101815 -0x2A,0x00,0x00,0x00,
101816 -0x0D,0x00,0x00,0x00,
101817 -0x2B,0x00,0x00,0x00,
101818 -0x0B,0x05,0x00,0x00,
101819 -0x2B,0x00,0x00,0x00,
101820 -0x33,0x33,0x05,0x00,
101821 -0x2C,0x00,0x00,0x00,
101822 -0x0D,0x00,0x00,0x00,
101823 -0x2A,0x00,0x00,0x00,
101824 -0x0E,0x00,0x00,0x00,
101825 -0x2B,0x00,0x00,0x00,
101826 -0x0B,0x05,0x00,0x00,
101827 -0x2B,0x00,0x00,0x00,
101828 -0x23,0x66,0x06,0x00,
101829 -0x2C,0x00,0x00,0x00,
101830 -0x1A,0x00,0x00,0x00,
101831 -0x2A,0x00,0x00,0x00,
101832 -0x00,0x40,0x0E,0x00,
101833 -0x30,0x00,0x00,0x00,
101834 -0x00,0x00,0x02,0x00,
101835 -0x31,0x00,0x00,0x00,
101836 -0x31,0x96,0x0B,0x00,
101837 -0x32,0x00,0x00,0x00,
101838 -0x0D,0x13,0x00,0x00,
101839 -0x33,0x00,0x00,0x00,
101840 -0x87,0x01,0x00,0x00,
101841 -0x13,0x00,0x00,0x00,
101842 -0x6C,0x9E,0x01,0x00,
101843 -0x13,0x00,0x00,0x00,
101844 -0x94,0x5E,0x01,0x00,
101845 -0x00,0x00,0x00,0x00,
101846 -0x59,0x01,0x01,0x00,
101847 -0x18,0x00,0x00,0x00,
101848 -0x01,0xF4,0x00,0x00,
101849 -0xFE,0x00,0x00,0x00,
101850 -0x00,0x00,0x00,0x00,
101851 -0x1E,0x00,0x00,0x00,
101852 -0x5B,0x10,0x03,0x00,
101853 -0xFE,0x00,0x00,0x00,
101854 -0x00,0x00,0x00,0x00,
101855 -0x00,0x00,0x00,0x00,
101856 -0x59,0x01,0x03,0x00,
101857 -0x10,0x00,0x00,0x00,
101858 -0x0F,0x00,0x04,0x00,
101859 -0x11,0x00,0x00,0x00,
101860 -0xF9,0x03,0x02,0x00,
101861 -0x6C,0x09,0x00,0x00,
101862 -0x01,0x02,0x03,0x04,
101863 -0x05,0x06,0x07,0x08,
101864 -0x09,0x0A,0x0B,0x00,
101865 -0x00,0x00,0x00,0x12,
101866 -0x12,0x12,0x12,0x12,
101867 -0x12,0x12,0x12,0x12,
101868 -0x12,0x12,0x00,0x00,
101869 -0x00,0x00,0x0F,0x0F,
101870 -0x0F,0x0F,0x0F,0x0F,
101871 -0x0F,0x0F,0x0F,0x0F,
101872 -0x0F,0x00,0x00,0x00,
101873 -0x00,0x17,0x05,0x03,
101874 -0x22,0x43,0x5E,0x00,
101875 -0x4F,0xA4,0x00,0x00,
101876 -0x4F,0xA4,0x00,0x00,
101877 -0x22,0x43,0x5E,0x00,
101878 -0x4F,0xA4,0x00,0x00,
101879 -0x22,0x43,0x5E,0x00,
101880 -0x4F,0xA4,0x3E,0x00,
101881 -0x30,0xA6,0x00,0x00,
101882 -0x4F,0xA4,0x3E,0x00,
101883 -0x2B,0xA4,0x5E,0x00,
101884 -0x2B,0xA4,0x00,0x00,
101885 -0x2B,0xA4,0x5E,0x00,
101886 -0x22,0xA4,0x5E,0x00,
101887 -0x4F,0xA4,0x00,0x00,
101888 -0x4F,0xA4,0x00,0x00,
101889 -0x4F,0xA4,0x5E,0x00,
101890 -0x4F,0xA4,0x5E,0x00,
101891 -0x4F,0xA4,0x5E,0x00,
101892 -0x4F,0xA4,0x5E,0x00,
101893 -0x4F,0xA4,0x00,0x00,
101894 -0x4F,0xA4,0x5E,0x00,
101895 -0x00,0xE0,0x4C,0x02,
101896 -0x01,0x20,0x00,0x00,
101897 -0x00,0xE0,0x4C,0x00,
101898 -0x00,0x0C,0x43,0x00,
101899 -0x00,0x50,0x43,0x00,
101900 -0x00,0x40,0x96,0x00,
101901 -0x00,0x05,0xB5,0x00,
101902 -0x00,0x0A,0xF7,0x00,
101903 -0x00,0x10,0x18,0x00,
101904 -0x00,0x13,0x74,0x00,
101905 -0x00,0x03,0x7F,0x00,
101906 -0x00,0x50,0xF2,0x02,
101907 -0x01,0x01,0x00,0x00,
101908 -0x00,0x50,0xF2,0x02,
101909 -0x00,0x01,0x00,0x00,
101910 -0x00,0x00,0x00,0x00,
101911 -0x00,0x00,0x00,0x00,
101912 -0x00,0x00,0x00,0x00,
101913 -0x00,0x00,0x00,0x00,
101914 -0x00,0x00,0x00,0x00,
101915 -0x00,0x00,0x00,0x00,
101916 -0xFF,0xFF,0xFF,0xFF,
101917 -0xFF,0xFF,0x00,0x00,
101918 -0x4F,0x6E,0x41,0x73,
101919 -0x73,0x6F,0x63,0x52,
101920 -0x65,0x71,0x00,0x00,
101921 -0x4F,0x6E,0x41,0x73,
101922 -0x73,0x6F,0x63,0x52,
101923 -0x73,0x70,0x00,0x00,
101924 -0x4F,0x6E,0x52,0x65,
101925 -0x41,0x73,0x73,0x6F,
101926 -0x63,0x52,0x65,0x71,
101927 -0x00,0x00,0x00,0x00,
101928 -0x4F,0x6E,0x52,0x65,
101929 -0x41,0x73,0x73,0x6F,
101930 -0x63,0x52,0x73,0x70,
101931 -0x00,0x00,0x00,0x00,
101932 -0x4F,0x6E,0x50,0x72,
101933 -0x6F,0x62,0x65,0x52,
101934 -0x65,0x71,0x00,0x00,
101935 -0x4F,0x6E,0x50,0x72,
101936 -0x6F,0x62,0x65,0x52,
101937 -0x73,0x70,0x00,0x00,
101938 -0x4F,0x6E,0x42,0x65,
101939 -0x61,0x63,0x6F,0x6E,
101940 -0x00,0x00,0x00,0x00,
101941 -0x4F,0x6E,0x41,0x54,
101942 -0x49,0x4D,0x00,0x00,
101943 -0x4F,0x6E,0x44,0x69,
101944 -0x73,0x61,0x73,0x73,
101945 -0x6F,0x63,0x00,0x00,
101946 -0x4F,0x6E,0x41,0x75,
101947 -0x74,0x68,0x00,0x00,
101948 -0x4F,0x6E,0x44,0x65,
101949 -0x41,0x75,0x74,0x68,
101950 -0x00,0x00,0x00,0x00,
101951 -0x4F,0x6E,0x41,0x63,
101952 -0x74,0x69,0x6F,0x6E,
101953 -0x00,0x00,0x00,0x00,
101954 -0x4F,0x6E,0x45,0x78,
101955 -0x63,0x65,0x70,0x74,
101956 -0x69,0x6F,0x6E,0x00,
101957 -0x00,0x00,0x00,0x00,
101958 -0xF8,0xDD,0x01,0x80,
101959 -0xE8,0x26,0x01,0x80,
101960 -0x10,0x00,0x00,0x00,
101961 -0x04,0xDE,0x01,0x80,
101962 -0xF0,0x26,0x01,0x80,
101963 -0x20,0x00,0x00,0x00,
101964 -0x10,0xDE,0x01,0x80,
101965 -0xE8,0x26,0x01,0x80,
101966 -0x30,0x00,0x00,0x00,
101967 -0x20,0xDE,0x01,0x80,
101968 -0xF0,0x26,0x01,0x80,
101969 -0x40,0x00,0x00,0x00,
101970 -0x30,0xDE,0x01,0x80,
101971 -0x80,0x2D,0x01,0x80,
101972 -0x50,0x00,0x00,0x00,
101973 -0x3C,0xDE,0x01,0x80,
101974 -0x28,0x4A,0x00,0x80,
101975 -0x80,0x00,0x00,0x00,
101976 -0x48,0xDE,0x01,0x80,
101977 -0x90,0x59,0x00,0x80,
101978 -0x90,0x00,0x00,0x00,
101979 -0x54,0xDE,0x01,0x80,
101980 -0x44,0x2E,0x01,0x80,
101981 -0xA0,0x00,0x00,0x00,
101982 -0x5C,0xDE,0x01,0x80,
101983 -0x4C,0x2E,0x01,0x80,
101984 -0xB0,0x00,0x00,0x00,
101985 -0x68,0xDE,0x01,0x80,
101986 -0x54,0x2F,0x01,0x80,
101987 -0xC0,0x00,0x00,0x00,
101988 -0x70,0xDE,0x01,0x80,
101989 -0x6C,0x2E,0x01,0x80,
101990 -0xD0,0x00,0x00,0x00,
101991 -0x7C,0xDE,0x01,0x80,
101992 -0xF0,0x54,0x00,0x80,
101993 -0x0C,0x00,0x00,0x00,
101994 -0x88,0xDE,0x01,0x80,
101995 -0x8C,0x2E,0x01,0x80,
101996 -0x73,0x77,0x69,0x74,
101997 -0x63,0x68,0x20,0x74,
101998 -0x6F,0x20,0x34,0x30,
101999 -0x4D,0x20,0x48,0x7A,
102000 -0x20,0x6D,0x6F,0x64,
102001 -0x65,0x28,0x25,0x78,
102002 -0x2C,0x20,0x25,0x78,
102003 -0x29,0x0A,0x00,0x00,
102004 -0x73,0x77,0x69,0x74,
102005 -0x63,0x68,0x20,0x74,
102006 -0x6F,0x20,0x32,0x30,
102007 -0x4D,0x20,0x48,0x7A,
102008 -0x20,0x6D,0x6F,0x64,
102009 -0x65,0x0A,0x00,0x00,
102010 -0x41,0x54,0x49,0x4D,
102011 -0x3A,0x20,0x25,0x78,
102012 -0x0A,0x00,0x00,0x00,
102013 -0x4E,0x6F,0x20,0x69,
102014 -0x72,0x70,0x20,0x25,
102015 -0x73,0x0A,0x00,0x00,
102016 -0x73,0x75,0x72,0x76,
102017 -0x65,0x79,0x20,0x64,
102018 -0x6F,0x6E,0x65,0x28,
102019 -0x25,0x78,0x2C,0x20,
102020 -0x25,0x78,0x29,0x0A,
102021 -0x00,0x00,0x00,0x00,
102022 -0x4E,0x6F,0x20,0x69,
102023 -0x72,0x70,0x20,0x25,
102024 -0x73,0x0A,0x00,0x00,
102025 -0x6A,0x6F,0x69,0x6E,
102026 -0x20,0x72,0x65,0x73,
102027 -0x28,0x25,0x78,0x29,
102028 -0x0A,0x00,0x00,0x00,
102029 -0x4E,0x6F,0x20,0x69,
102030 -0x72,0x70,0x20,0x25,
102031 -0x73,0x0A,0x00,0x00,
102032 -0x64,0x65,0x6C,0x20,
102033 -0x73,0x74,0x61,0x0A,
102034 -0x00,0x00,0x00,0x00,
102035 -0x4E,0x6F,0x20,0x69,
102036 -0x72,0x70,0x20,0x25,
102037 -0x73,0x0A,0x00,0x00,
102038 -0x61,0x64,0x64,0x20,
102039 -0x73,0x74,0x61,0x3A,
102040 -0x25,0x78,0x2C,0x20,
102041 -0x25,0x78,0x0A,0x00,
102042 -0x72,0x63,0x76,0x20,
102043 -0x64,0x69,0x73,0x63,
102044 -0x6F,0x6E,0x6E,0x65,
102045 -0x63,0x74,0x0A,0x00,
102046 -0x64,0x69,0x73,0x63,
102047 -0x6F,0x6E,0x6E,0x65,
102048 -0x63,0x74,0x20,0x74,
102049 -0x69,0x6D,0x65,0x72,
102050 -0x3A,0x20,0x6E,0x6F,
102051 -0x20,0x62,0x65,0x61,
102052 -0x63,0x6F,0x6E,0x0A,
102053 -0x00,0x00,0x00,0x00,
102054 -0x64,0x69,0x73,0x63,
102055 -0x6F,0x6E,0x6E,0x65,
102056 -0x63,0x74,0x20,0x74,
102057 -0x69,0x6D,0x65,0x72,
102058 -0x0A,0x00,0x00,0x00,
102059 -0x00,0x00,0x00,0x00,
102060 -0x4E,0x6F,0x20,0x69,
102061 -0x72,0x70,0x20,0x40,
102062 -0x25,0x73,0x0A,0x00,
102063 -0x57,0x4D,0x4D,0x28,
102064 -0x25,0x78,0x29,0x3A,
102065 -0x20,0x25,0x78,0x2C,
102066 -0x20,0x25,0x78,0x0A,
102067 -0x00,0x00,0x00,0x00,
102068 -0x61,0x73,0x73,0x6F,
102069 -0x63,0x20,0x72,0x65,
102070 -0x6A,0x65,0x63,0x74,
102071 -0x2C,0x20,0x73,0x74,
102072 -0x61,0x74,0x75,0x73,
102073 -0x3A,0x20,0x25,0x64,
102074 -0x0A,0x00,0x00,0x00,
102075 -0x6D,0x61,0x63,0x20,
102076 -0x69,0x64,0x20,0x23,
102077 -0x34,0x3A,0x20,0x25,
102078 -0x78,0x2C,0x20,0x25,
102079 -0x78,0x0A,0x00,0x00,
102080 -0x6D,0x61,0x63,0x20,
102081 -0x69,0x64,0x20,0x23,
102082 -0x35,0x3A,0x20,0x25,
102083 -0x78,0x2C,0x20,0x25,
102084 -0x78,0x2C,0x20,0x25,
102085 -0x78,0x0A,0x00,0x00,
102086 -0x4E,0x6F,0x20,0x69,
102087 -0x72,0x70,0x20,0x40,
102088 -0x25,0x73,0x0A,0x00,
102089 -0x4E,0x6F,0x20,0x69,
102090 -0x72,0x70,0x20,0x25,
102091 -0x73,0x0A,0x00,0x00,
102092 -0x63,0x75,0x72,0x20,
102093 -0x63,0x68,0x61,0x6E,
102094 -0x6E,0x65,0x6C,0x3A,
102095 -0x20,0x25,0x78,0x2C,
102096 -0x20,0x62,0x63,0x6E,
102097 -0x20,0x69,0x6E,0x74,
102098 -0x65,0x72,0x76,0x61,
102099 -0x6C,0x3A,0x20,0x25,
102100 -0x78,0x0A,0x00,0x00,
102101 -0x49,0x42,0x53,0x53,
102102 -0x20,0x6D,0x6F,0x64,
102103 -0x65,0x2C,0x20,0x63,
102104 -0x75,0x72,0x20,0x63,
102105 -0x68,0x61,0x6E,0x6E,
102106 -0x65,0x6C,0x3A,0x20,
102107 -0x25,0x78,0x2C,0x20,
102108 -0x62,0x63,0x6E,0x20,
102109 -0x69,0x6E,0x74,0x65,
102110 -0x72,0x76,0x61,0x6C,
102111 -0x3A,0x20,0x25,0x78,
102112 -0x0A,0x00,0x00,0x00,
102113 -0x6D,0x61,0x63,0x20,
102114 -0x69,0x64,0x20,0x23,
102115 -0x34,0x3A,0x20,0x25,
102116 -0x78,0x2C,0x20,0x25,
102117 -0x78,0x0A,0x00,0x00,
102118 -0x69,0x6E,0x76,0x61,
102119 -0x6C,0x69,0x64,0x20,
102120 -0x63,0x61,0x70,0x3A,
102121 -0x25,0x78,0x0A,0x00,
102122 -0x4E,0x6F,0x20,0x69,
102123 -0x72,0x70,0x20,0x25,
102124 -0x73,0x0A,0x00,0x00,
102125 -0x69,0x73,0x73,0x75,
102126 -0x65,0x20,0x61,0x73,
102127 -0x73,0x6F,0x63,0x72,
102128 -0x65,0x71,0x28,0x25,
102129 -0x78,0x29,0x0A,0x00,
102130 -0x5B,0x57,0x41,0x50,
102131 -0x49,0x5D,0x20,0x67,
102132 -0x65,0x74,0x20,0x77,
102133 -0x61,0x70,0x69,0x20,
102134 -0x49,0x45,0x0A,0x00,
102135 -0x4E,0x6F,0x20,0x69,
102136 -0x72,0x70,0x20,0x25,
102137 -0x73,0x0A,0x00,0x00,
102138 -0x69,0x73,0x73,0x75,
102139 -0x65,0x20,0x61,0x63,
102140 -0x74,0x69,0x6F,0x6E,
102141 -0x3A,0x20,0x25,0x78,
102142 -0x2C,0x20,0x25,0x78,
102143 -0x2C,0x20,0x25,0x78,
102144 -0x20,0x0A,0x00,0x00,
102145 -0x41,0x44,0x44,0x42,
102146 -0x41,0x20,0x52,0x53,
102147 -0x50,0x3A,0x20,0x25,
102148 -0x78,0x0A,0x00,0x00,
102149 -0x44,0x45,0x4C,0x42,
102150 -0x41,0x3A,0x20,0x25,
102151 -0x78,0x28,0x25,0x78,
102152 -0x29,0x0A,0x00,0x00,
102153 -0x4E,0x6F,0x20,0x69,
102154 -0x72,0x70,0x20,0x25,
102155 -0x73,0x0A,0x00,0x00,
102156 -0x69,0x73,0x73,0x75,
102157 -0x65,0x20,0x61,0x75,
102158 -0x74,0x68,0x0A,0x00,
102159 -0x63,0x6C,0x6E,0x74,
102160 -0x20,0x61,0x75,0x74,
102161 -0x68,0x20,0x66,0x61,
102162 -0x69,0x6C,0x2C,0x20,
102163 -0x73,0x74,0x61,0x74,
102164 -0x75,0x73,0x3A,0x20,
102165 -0x25,0x64,0x0A,0x00,
102166 -0x6E,0x6F,0x20,0x63,
102167 -0x68,0x61,0x6C,0x6C,
102168 -0x65,0x6E,0x67,0x65,
102169 -0x20,0x74,0x65,0x78,
102170 -0x74,0x3F,0x0A,0x00,
102171 -0x63,0x6C,0x6E,0x74,
102172 -0x20,0x61,0x75,0x74,
102173 -0x68,0x20,0x66,0x61,
102174 -0x69,0x6C,0x65,0x64,
102175 -0x20,0x64,0x75,0x65,
102176 -0x20,0x74,0x6F,0x20,
102177 -0x69,0x6C,0x6C,0x65,
102178 -0x67,0x61,0x6C,0x20,
102179 -0x73,0x65,0x71,0x3D,
102180 -0x25,0x78,0x0A,0x00,
102181 -0x4E,0x6F,0x20,0x69,
102182 -0x72,0x70,0x20,0x25,
102183 -0x73,0x0A,0x00,0x00,
102184 -0x69,0x73,0x73,0x75,
102185 -0x65,0x5F,0x64,0x65,
102186 -0x61,0x75,0x74,0x68,
102187 -0x0A,0x00,0x00,0x00,
102188 -0x4E,0x6F,0x20,0x69,
102189 -0x72,0x70,0x20,0x25,
102190 -0x73,0x0A,0x00,0x00,
102191 -0x69,0x73,0x73,0x75,
102192 -0x65,0x5F,0x64,0x69,
102193 -0x73,0x61,0x73,0x73,
102194 -0x6F,0x63,0x0A,0x00,
102195 -0x4E,0x6F,0x20,0x69,
102196 -0x72,0x70,0x20,0x25,
102197 -0x73,0x0A,0x00,0x00,
102198 -0x4E,0x6F,0x20,0x69,
102199 -0x72,0x70,0x20,0x25,
102200 -0x73,0x0A,0x00,0x00,
102201 -0x69,0x73,0x73,0x75,
102202 -0x65,0x20,0x6E,0x75,
102203 -0x6C,0x6C,0x20,0x64,
102204 -0x61,0x74,0x61,0x28,
102205 -0x25,0x64,0x29,0x00,
102206 -0x6C,0x69,0x6E,0x6B,
102207 -0x20,0x74,0x6F,0x20,
102208 -0x41,0x72,0x74,0x68,
102209 -0x65,0x72,0x6F,0x73,
102210 -0x20,0x41,0x50,0x0A,
102211 -0x00,0x00,0x00,0x00,
102212 -0x6C,0x69,0x6E,0x6B,
102213 -0x20,0x74,0x6F,0x20,
102214 -0x42,0x72,0x6F,0x61,
102215 -0x64,0x63,0x6F,0x6D,
102216 -0x20,0x41,0x50,0x0A,
102217 -0x00,0x00,0x00,0x00,
102218 -0x6C,0x69,0x6E,0x6B,
102219 -0x20,0x74,0x6F,0x20,
102220 -0x4D,0x61,0x72,0x76,
102221 -0x65,0x6C,0x6C,0x20,
102222 -0x41,0x50,0x0A,0x00,
102223 -0x6C,0x69,0x6E,0x6B,
102224 -0x20,0x74,0x6F,0x20,
102225 -0x52,0x61,0x6C,0x69,
102226 -0x6E,0x6B,0x20,0x41,
102227 -0x50,0x0A,0x00,0x00,
102228 -0x6C,0x69,0x6E,0x6B,
102229 -0x20,0x74,0x6F,0x20,
102230 -0x43,0x69,0x73,0x63,
102231 -0x6F,0x20,0x41,0x50,
102232 -0x0A,0x00,0x00,0x00,
102233 -0x6C,0x69,0x6E,0x6B,
102234 -0x20,0x74,0x6F,0x20,
102235 -0x52,0x65,0x61,0x6C,
102236 -0x74,0x65,0x6B,0x20,
102237 -0x39,0x36,0x42,0x20,
102238 -0x41,0x50,0x0A,0x00,
102239 -0x6C,0x69,0x6E,0x6B,
102240 -0x20,0x74,0x6F,0x20,
102241 -0x75,0x6E,0x6B,0x6E,
102242 -0x6F,0x77,0x6E,0x20,
102243 -0x41,0x50,0x0A,0x00,
102244 -0x6D,0x61,0x63,0x20,
102245 -0x69,0x64,0x20,0x23,
102246 -0x25,0x78,0x3A,0x20,
102247 -0x25,0x78,0x2C,0x20,
102248 -0x25,0x78,0x0A,0x00,
102249 -0x64,0x72,0x6F,0x70,
102250 -0x20,0x64,0x75,0x65,
102251 -0x20,0x74,0x6F,0x20,
102252 -0x64,0x65,0x63,0x61,
102253 -0x63,0x68,0x65,0x0A,
102254 -0x00,0x00,0x00,0x00,
102255 -0xFF,0x00,0x00,0x00,
102256 -0x01,0x00,0x00,0x00,
102257 -0x00,0x00,0x00,0x00,
102258 -0x00,0x00,0x00,0x00,
102259 -0xFF,0xFF,0x00,0x00,
102260 -0x01,0x00,0x00,0x00,
102261 -0x00,0x00,0x00,0x00,
102262 -0x00,0x00,0x00,0x00,
102263 -0x00,0x01,0x02,0x03,
102264 -0xFF,0x00,0x00,0x00,
102265 -0x00,0x00,0x00,0x00,
102266 -0x00,0x00,0x00,0x00,
102267 -0x00,0x01,0x02,0x03,
102268 -0x04,0x05,0x06,0x07,
102269 -0x08,0x09,0x0A,0x0B,
102270 -0xFF,0x00,0x00,0x00,
102271 -0x04,0x05,0x06,0x07,
102272 -0x08,0x09,0x0A,0x0B,
102273 -0xFF,0x00,0x00,0x00,
102274 -0x00,0x00,0x00,0x00,
102275 -0x04,0x05,0x06,0x07,
102276 -0x08,0xFF,0x00,0x00,
102277 -0x00,0x00,0x00,0x00,
102278 -0x00,0x00,0x00,0x00,
102279 -0x00,0x01,0x02,0x03,
102280 -0xFF,0x00,0x00,0x00,
102281 -0x00,0x00,0x00,0x00,
102282 -0x00,0x00,0x00,0x00,
102283 -0x00,0x01,0x01,0x03,
102284 -0xFF,0x00,0x00,0x00,
102285 -0x00,0x00,0x00,0x00,
102286 -0x00,0x00,0x00,0x00,
102287 -0x30,0x31,0x32,0x33,
102288 -0x34,0x35,0x36,0x37,
102289 -0x38,0x39,0x41,0x42,
102290 -0x43,0x44,0x45,0x46,
102291 -0x00,0x00,0x00,0x00,
102292 -0x25,0x64,0x2E,0x00,
102293 -0x25,0x68,0x68,0x58,
102294 -0x3A,0x00,0x00,0x00,
102295 -0x74,0x61,0x72,0x67,
102296 -0x65,0x74,0x20,0x74,
102297 -0x68,0x65,0x72,0x6D,
102298 -0x61,0x6C,0x3A,0x20,
102299 -0x25,0x78,0x2C,0x20,
102300 -0x63,0x75,0x72,0x20,
102301 -0x74,0x68,0x65,0x72,
102302 -0x6D,0x61,0x6C,0x3A,
102303 -0x20,0x25,0x78,0x0A,
102304 -0x00,0x00,0x00,0x00,
102305 -0x00,0x00,0x00,0x00,
102306 -0x08,0xE4,0x01,0x80,
102307 -0x08,0xE4,0x01,0x80,
102308 -0x31,0x10,0x10,0x00,
102309 -0x00,0x30,0x00,0x00,
102310 -0x31,0x20,0x10,0x00,
102311 -0x00,0x30,0x00,0x00,
102312 -0x31,0x28,0x10,0x00,
102313 -0x00,0x30,0x00,0x00,
102314 -0x31,0x2C,0x10,0x10,
102315 -0x00,0x30,0x00,0x00,
102316 -0x31,0x2F,0x10,0x10,
102317 -0x00,0x30,0x00,0x00,
102318 -0x31,0x30,0x18,0x00,
102319 -0x00,0x30,0x00,0x00,
102320 -0x31,0x30,0x20,0x10,
102321 -0x00,0x30,0x00,0x00,
102322 -0x22,0x20,0x18,0x08,
102323 -0x00,0x20,0x00,0x00,
102324 -0x22,0x21,0x14,0x08,
102325 -0x00,0x20,0x00,0x00,
102326 -0x22,0x21,0x1C,0x08,
102327 -0x00,0x20,0x00,0x00,
102328 -0x22,0x21,0x20,0x08,
102329 -0x00,0x20,0x00,0x00,
102330 -0x22,0x21,0x20,0x10,
102331 -0x00,0x20,0x00,0x00,
102332 -0x22,0x21,0x20,0x18,
102333 -0x00,0x20,0x00,0x00,
102334 -0x1A,0x19,0x18,0x10,
102335 -0x00,0x18,0x00,0x00,
102336 -0x12,0x11,0x10,0x08,
102337 -0x00,0x10,0x00,0x00,
102338 -0x0A,0x09,0x08,0x00,
102339 -0x00,0x08,0x00,0x00,
102340 -0x0A,0x09,0x08,0x02,
102341 -0x00,0x08,0x00,0x00,
102342 -0x0A,0x09,0x08,0x04,
102343 -0x00,0x08,0x00,0x00,
102344 -0x0A,0x09,0x08,0x06,
102345 -0x00,0x08,0x00,0x00,
102346 -0x08,0x07,0x06,0x04,
102347 -0x00,0x06,0x00,0x00,
102348 -0x06,0x05,0x04,0x02,
102349 -0x00,0x04,0x00,0x00,
102350 -0x06,0x05,0x04,0x03,
102351 -0x00,0x04,0x00,0x00,
102352 -0x05,0x04,0x03,0x02,
102353 -0x00,0x03,0x00,0x00,
102354 -0x09,0x08,0x07,0x06,
102355 -0x07,0x06,0x06,0x05,
102356 -0x05,0x04,0x04,0x03,
102357 -0x06,0x05,0x05,0x04,
102358 -0x04,0x03,0x03,0x03,
102359 -0x05,0x04,0x04,0x03,
102360 -0x03,0x02,0x02,0x02,
102361 -0x00,0x09,0x08,0x07,
102362 -0x06,0x07,0x06,0x06,
102363 -0x05,0x05,0x04,0x04,
102364 -0x03,0x05,0x04,0x04,
102365 -0x03,0x03,0x02,0x02,
102366 -0x02,0x04,0x03,0x03,
102367 -0x02,0x02,0x01,0x01,
102368 -0x01,0x00,0x00,0x00,
102369 -0x08,0x08,0x08,0x08,
102370 -0x08,0x08,0x08,0x08,
102371 -0x08,0x10,0x10,0x20,
102372 -0x08,0x08,0x08,0x08,
102373 -0x20,0x20,0x20,0x20,
102374 -0x08,0x08,0x08,0x08,
102375 -0x08,0x20,0x20,0x20,
102376 -0x30,0x08,0x08,0x08,
102377 -0x08,0x18,0x18,0x18,
102378 -0x18,0x18,0x20,0x30,
102379 -0x30,0x10,0x20,0x20,
102380 -0x20,0x20,0x20,0x30,
102381 -0x30,0x08,0x10,0x20,
102382 -0x30,0x30,0x30,0x30,
102383 -0x30,0x30,0x00,0x00,
102384 -0x08,0x08,0x08,0x08,
102385 -0x08,0x08,0x08,0x08,
102386 -0x08,0x10,0x10,0x20,
102387 -0x08,0x08,0x08,0x08,
102388 -0x08,0x20,0x20,0x20,
102389 -0x08,0x08,0x08,0x08,
102390 -0x08,0x20,0x20,0x20,
102391 -0x20,0x08,0x08,0x08,
102392 -0x08,0x18,0x18,0x18,
102393 -0x18,0x18,0x20,0x30,
102394 -0x30,0x10,0x20,0x20,
102395 -0x20,0x20,0x20,0x30,
102396 -0x30,0x08,0x10,0x20,
102397 -0x30,0x30,0x30,0x30,
102398 -0x30,0x30,0x00,0x00,
102399 -0x0A,0x09,0x08,0x04,
102400 -0x00,0x0A,0x09,0x08,
102401 -0x04,0x00,0x0A,0x09,
102402 -0x08,0x04,0x00,0x0A,
102403 -0x09,0x08,0x04,0x00,
102404 -0x0A,0x09,0x08,0x00,
102405 -0x00,0x0A,0x09,0x08,
102406 -0x00,0x00,0x0A,0x09,
102407 -0x08,0x00,0x00,0x0A,
102408 -0x09,0x08,0x00,0x00,
102409 -0x0A,0x09,0x08,0x00,
102410 -0x00,0x12,0x11,0x10,
102411 -0x08,0x00,0x12,0x11,
102412 -0x10,0x08,0x00,0x22,
102413 -0x21,0x20,0x18,0x00,
102414 -0x0A,0x09,0x08,0x00,
102415 -0x00,0x0A,0x09,0x08,
102416 -0x00,0x00,0x0A,0x09,
102417 -0x08,0x00,0x00,0x0A,
102418 -0x09,0x08,0x00,0x00,
102419 -0x22,0x21,0x20,0x18,
102420 -0x00,0x22,0x21,0x20,
102421 -0x18,0x00,0x22,0x21,
102422 -0x1C,0x08,0x00,0x22,
102423 -0x20,0x18,0x08,0x00,
102424 -0x0A,0x09,0x08,0x02,
102425 -0x00,0x0A,0x09,0x08,
102426 -0x02,0x00,0x0A,0x09,
102427 -0x08,0x02,0x00,0x0A,
102428 -0x09,0x08,0x02,0x00,
102429 -0x0A,0x09,0x08,0x00,
102430 -0x00,0x22,0x21,0x20,
102431 -0x10,0x00,0x22,0x21,
102432 -0x20,0x08,0x00,0x22,
102433 -0x21,0x1C,0x08,0x00,
102434 -0x31,0x30,0x18,0x00,
102435 -0x00,0x0A,0x09,0x08,
102436 -0x04,0x00,0x0A,0x09,
102437 -0x08,0x04,0x00,0x0A,
102438 -0x09,0x08,0x04,0x00,
102439 -0x0A,0x09,0x08,0x04,
102440 -0x00,0x1A,0x19,0x18,
102441 -0x10,0x00,0x1A,0x19,
102442 -0x18,0x10,0x00,0x1A,
102443 -0x19,0x18,0x10,0x00,
102444 -0x1A,0x19,0x18,0x10,
102445 -0x00,0x1A,0x19,0x18,
102446 -0x10,0x00,0x22,0x21,
102447 -0x20,0x08,0x00,0x31,
102448 -0x2C,0x10,0x10,0x00,
102449 -0x31,0x28,0x10,0x00,
102450 -0x00,0x12,0x11,0x10,
102451 -0x08,0x00,0x22,0x21,
102452 -0x20,0x18,0x00,0x22,
102453 -0x21,0x20,0x18,0x00,
102454 -0x22,0x21,0x20,0x08,
102455 -0x00,0x22,0x21,0x14,
102456 -0x08,0x00,0x22,0x20,
102457 -0x18,0x08,0x00,0x31,
102458 -0x30,0x20,0x10,0x00,
102459 -0x31,0x2C,0x10,0x10,
102460 -0x00,0x0A,0x09,0x08,
102461 -0x00,0x00,0x12,0x11,
102462 -0x10,0x08,0x00,0x22,
102463 -0x21,0x20,0x18,0x00,
102464 -0x22,0x21,0x20,0x18,
102465 -0x00,0x31,0x30,0x20,
102466 -0x10,0x00,0x31,0x2F,
102467 -0x10,0x10,0x00,0x31,
102468 -0x2F,0x10,0x10,0x00,
102469 -0x31,0x10,0x10,0x00,
102470 -0x00,0x31,0x2C,0x10,
102471 -0x10,0x00,0x00,0x00,
102472 -0x0A,0x09,0x08,0x04,
102473 -0x00,0x0A,0x09,0x08,
102474 -0x04,0x00,0x0A,0x09,
102475 -0x08,0x04,0x00,0x0A,
102476 -0x09,0x08,0x04,0x00,
102477 -0x0A,0x09,0x08,0x00,
102478 -0x00,0x0A,0x09,0x08,
102479 -0x00,0x00,0x0A,0x09,
102480 -0x08,0x00,0x00,0x0A,
102481 -0x09,0x08,0x00,0x00,
102482 -0x0A,0x09,0x08,0x00,
102483 -0x00,0x12,0x11,0x10,
102484 -0x08,0x00,0x12,0x11,
102485 -0x10,0x08,0x00,0x22,
102486 -0x21,0x20,0x18,0x00,
102487 -0x0A,0x09,0x08,0x04,
102488 -0x00,0x0A,0x09,0x08,
102489 -0x04,0x00,0x0A,0x09,
102490 -0x08,0x02,0x00,0x0A,
102491 -0x09,0x08,0x00,0x00,
102492 -0x0A,0x09,0x08,0x00,
102493 -0x00,0x22,0x21,0x20,
102494 -0x18,0x00,0x22,0x21,
102495 -0x1C,0x08,0x00,0x22,
102496 -0x21,0x14,0x08,0x00,
102497 -0x0A,0x09,0x08,0x02,
102498 -0x00,0x0A,0x09,0x08,
102499 -0x02,0x00,0x0A,0x09,
102500 -0x08,0x02,0x00,0x0A,
102501 -0x09,0x08,0x02,0x00,
102502 -0x0A,0x09,0x08,0x00,
102503 -0x00,0x22,0x21,0x20,
102504 -0x10,0x00,0x22,0x21,
102505 -0x20,0x08,0x00,0x22,
102506 -0x21,0x14,0x08,0x00,
102507 -0x22,0x21,0x14,0x08,
102508 -0x00,0x0A,0x09,0x08,
102509 -0x04,0x00,0x0A,0x09,
102510 -0x08,0x04,0x00,0x0A,
102511 -0x09,0x08,0x04,0x00,
102512 -0x0A,0x09,0x08,0x04,
102513 -0x00,0x1A,0x19,0x18,
102514 -0x10,0x00,0x1A,0x19,
102515 -0x18,0x10,0x00,0x1A,
102516 -0x19,0x18,0x10,0x00,
102517 -0x1A,0x19,0x18,0x10,
102518 -0x00,0x1A,0x19,0x18,
102519 -0x10,0x00,0x22,0x21,
102520 -0x20,0x08,0x00,0x31,
102521 -0x2C,0x10,0x10,0x00,
102522 -0x31,0x28,0x10,0x00,
102523 -0x00,0x12,0x11,0x10,
102524 -0x08,0x00,0x22,0x21,
102525 -0x20,0x18,0x00,0x22,
102526 -0x21,0x20,0x18,0x00,
102527 -0x22,0x21,0x20,0x08,
102528 -0x00,0x22,0x21,0x14,
102529 -0x08,0x00,0x22,0x20,
102530 -0x18,0x08,0x00,0x31,
102531 -0x30,0x20,0x10,0x00,
102532 -0x31,0x2C,0x10,0x10,
102533 -0x00,0x0A,0x09,0x08,
102534 -0x00,0x00,0x12,0x11,
102535 -0x10,0x08,0x00,0x22,
102536 -0x21,0x20,0x18,0x00,
102537 -0x22,0x21,0x20,0x18,
102538 -0x00,0x31,0x30,0x20,
102539 -0x10,0x00,0x31,0x2F,
102540 -0x10,0x10,0x00,0x31,
102541 -0x2F,0x10,0x10,0x00,
102542 -0x31,0x10,0x10,0x00,
102543 -0x00,0x31,0x2C,0x10,
102544 -0x10,0x00,0x00,0x00,
102545 -0x01,0x02,0x04,0x08,
102546 -0x02,0x04,0x08,0x0C,
102547 -0x10,0x18,0x20,0x30,
102548 -0x02,0x04,0x08,0x0C,
102549 -0x10,0x18,0x20,0x30,
102550 -0x06,0x0C,0x10,0x18,
102551 -0x24,0x30,0x3C,0x48,
102552 -0x48,0x00,0x00,0x00,
102553 -0x00,0x00,0x00,0x00,
102554 -0x00,0x00,0x00,0x00,
102555 -0x00,0x25,0x27,0x2C,
102556 -0x19,0x1B,0x1E,0x20,
102557 -0x23,0x29,0x2A,0x2B,
102558 -0x00,0x00,0x00,0x00,
102559 -0x25,0x29,0x2B,0x2E,
102560 -0x2E,0x00,0x00,0x00,
102561 -0x04,0x00,0x00,0x00,
102562 -0x04,0x00,0x00,0x00,
102563 -0x08,0x00,0x00,0x00,
102564 -0x10,0x00,0x00,0x00,
102565 -0x18,0x00,0x00,0x00,
102566 -0x24,0x00,0x00,0x00,
102567 -0x30,0x00,0x00,0x00,
102568 -0x48,0x00,0x00,0x00,
102569 -0x60,0x00,0x00,0x00,
102570 -0x90,0x00,0x00,0x00,
102571 -0xC0,0x00,0x00,0x00,
102572 -0xD8,0x00,0x00,0x00,
102573 -0x50,0x00,0x00,0x00,
102574 -0x78,0x00,0x00,0x00,
102575 -0xA0,0x00,0x00,0x00,
102576 -0xC8,0x00,0x00,0x00,
102577 -0x40,0x01,0x00,0x00,
102578 -0x90,0x01,0x00,0x00,
102579 -0xE0,0x01,0x00,0x00,
102580 -0x30,0x02,0x00,0x00,
102581 -0x2C,0x01,0x00,0x00,
102582 -0x40,0x01,0x00,0x00,
102583 -0xE0,0x01,0x00,0x00,
102584 -0xD0,0x02,0x00,0x00,
102585 -0x80,0x0C,0x00,0x00,
102586 -0x80,0x0C,0x00,0x00,
102587 -0x80,0x0C,0x00,0x00,
102588 -0xA0,0x0F,0x00,0x00,
102589 -0xA0,0x0F,0x00,0x00,
102590 -0x02,0x00,0x00,0x00,
102591 -0x02,0x00,0x00,0x00,
102592 -0x04,0x00,0x00,0x00,
102593 -0x08,0x00,0x00,0x00,
102594 -0x0C,0x00,0x00,0x00,
102595 -0x12,0x00,0x00,0x00,
102596 -0x18,0x00,0x00,0x00,
102597 -0x24,0x00,0x00,0x00,
102598 -0x30,0x00,0x00,0x00,
102599 -0x48,0x00,0x00,0x00,
102600 -0x60,0x00,0x00,0x00,
102601 -0x6C,0x00,0x00,0x00,
102602 -0x28,0x00,0x00,0x00,
102603 -0x3C,0x00,0x00,0x00,
102604 -0x50,0x00,0x00,0x00,
102605 -0x64,0x00,0x00,0x00,
102606 -0xA0,0x00,0x00,0x00,
102607 -0xC8,0x00,0x00,0x00,
102608 -0xF0,0x00,0x00,0x00,
102609 -0x18,0x01,0x00,0x00,
102610 -0x64,0x00,0x00,0x00,
102611 -0xA0,0x00,0x00,0x00,
102612 -0xF0,0x00,0x00,0x00,
102613 -0x68,0x01,0x00,0x00,
102614 -0x40,0x06,0x00,0x00,
102615 -0x40,0x06,0x00,0x00,
102616 -0x40,0x06,0x00,0x00,
102617 -0xD0,0x07,0x00,0x00,
102618 -0xD0,0x07,0x00,0x00,
102619 -0x72,0x65,0x73,0x65,
102620 -0x74,0x28,0x25,0x78,
102621 -0x29,0x0A,0x00,0x00,
102622 -0xC8,0x82,0x01,0x80,
102623 -0xC8,0xD0,0x00,0x80,
102624 -0xC8,0xD0,0x00,0x80,
102625 -0xC8,0xD0,0x00,0x80,
102626 -0xC8,0xD0,0x00,0x80,
102627 -0x14,0xCF,0x00,0x80,
102628 -0xD0,0x82,0x01,0x80,
102629 -0xC8,0x82,0x01,0x80,
102630 -0xC8,0x82,0x01,0x80,
102631 -0x00,0x00,0x00,0x00,
102632 -0x00,0x00,0x00,0x00,
102633 -0xF0,0x85,0x01,0x80,
102634 -0xF0,0x85,0x01,0x80,
102635 -0xF0,0x85,0x01,0x80,
102636 -0xF0,0x85,0x01,0x80,
102637 -0xA8,0x82,0x01,0x80,
102638 -0x00,0x85,0x01,0x80,
102639 -0xB0,0x82,0x01,0x80,
102640 -0xB8,0x82,0x01,0x80,
102641 -0xC0,0x82,0x01,0x80,
102642 -0x00,0x00,0x00,0x00,
102643 -0x00,0x00,0x00,0x00,
102644 -0x08,0x04,0x04,0x08,
102645 -0x02,0x02,0x01,0x01,
102646 -0x50,0x53,0x00,0x00,
102647 -0x80,0x00,0x00,0x00,
102648 -0x00,0x00,0x00,0x00,
102649 -0xA0,0xA4,0x01,0x80,
102650 -0x70,0xA3,0x01,0x80,
102651 -0x70,0xA3,0x01,0x80,
102652 -0x70,0xA3,0x01,0x80,
102653 -0x68,0xA4,0x01,0x80,
102654 -0x70,0xA3,0x01,0x80,
102655 -0x70,0xA3,0x01,0x80,
102656 -0x70,0xA3,0x01,0x80,
102657 -0x30,0xA4,0x01,0x80,
102658 -0x70,0xA3,0x01,0x80,
102659 -0x70,0xA3,0x01,0x80,
102660 -0x70,0xA3,0x01,0x80,
102661 -0x70,0xA3,0x01,0x80,
102662 -0x70,0xA3,0x01,0x80,
102663 -0x70,0xA3,0x01,0x80,
102664 -0x70,0xA3,0x01,0x80,
102665 -0xF8,0xA3,0x01,0x80,
102666 -0x70,0xA3,0x01,0x80,
102667 -0x70,0xA3,0x01,0x80,
102668 -0x70,0xA3,0x01,0x80,
102669 -0xC0,0xA3,0x01,0x80,
102670 -0x70,0xA3,0x01,0x80,
102671 -0x70,0xA3,0x01,0x80,
102672 -0x70,0xA3,0x01,0x80,
102673 -0x88,0xA3,0x01,0x80,
102674 -0x70,0xA3,0x01,0x80,
102675 -0x70,0xA3,0x01,0x80,
102676 -0x70,0xA3,0x01,0x80,
102677 -0x48,0xA3,0x01,0x80,
102678 -0xB8,0x06,0x00,0x80,
102679 -0xAC,0x06,0x00,0x80,
102680 -0xA0,0x06,0x00,0x80,
102681 -0x94,0x06,0x00,0x80,
102682 -0x88,0x06,0x00,0x80,
102683 -0x7C,0x06,0x00,0x80,
102684 -0x70,0x06,0x00,0x80,
102685 -0x64,0x06,0x00,0x80,
102686 -0x58,0x06,0x00,0x80,
102687 -0x4C,0x06,0x00,0x80,
102688 -0x04,0x06,0x00,0x80,
102689 -0x30,0x1F,0x02,0x80,
102690 -0xB0,0x03,0x25,0xB0,
102691 -0x30,0x1F,0x02,0x80,
102692 -0x30,0x1F,0x02,0x80,
102693 -0x30,0x1F,0x02,0x80,
102694 -0x30,0x1F,0x02,0x80,
102695 -0x6A,0x6F,0x69,0x6E,
102696 -0x62,0x73,0x73,0x5F,
102697 -0x68,0x64,0x6C,0x00,
102698 -0x00,0x0E,0x04,0x0E,
102699 -0x10,0x0E,0x14,0x0E,
102700 -0x18,0x0E,0x1C,0x0E,
102701 -0x02,0x04,0x04,0x07,
102702 -0x07,0x0D,0x0D,0x0D,
102703 -0x02,0x07,0x07,0x0D,
102704 -0x0D,0x0F,0x0F,0x0F,
102705 -0x0F,0x00,0x00,0x00,
102706 -0x72,0x65,0x70,0x6F,
102707 -0x72,0x74,0x5F,0x73,
102708 -0x75,0x72,0x76,0x65,
102709 -0x79,0x5F,0x64,0x6F,
102710 -0x6E,0x65,0x00,0x00,
102711 -0x72,0x65,0x70,0x6F,
102712 -0x72,0x74,0x5F,0x6A,
102713 -0x6F,0x69,0x6E,0x5F,
102714 -0x72,0x65,0x73,0x00,
102715 -0x72,0x65,0x70,0x6F,
102716 -0x72,0x74,0x5F,0x64,
102717 -0x65,0x6C,0x5F,0x73,
102718 -0x74,0x61,0x5F,0x65,
102719 -0x76,0x65,0x6E,0x74,
102720 -0x00,0x00,0x00,0x00,
102721 -0x72,0x65,0x70,0x6F,
102722 -0x72,0x74,0x5F,0x61,
102723 -0x64,0x64,0x5F,0x73,
102724 -0x74,0x61,0x5F,0x65,
102725 -0x76,0x65,0x6E,0x74,
102726 -0x00,0x00,0x00,0x00,
102727 -0x69,0x73,0x73,0x75,
102728 -0x65,0x5F,0x70,0x72,
102729 -0x6F,0x62,0x65,0x72,
102730 -0x65,0x71,0x00,0x00,
102731 -0x69,0x73,0x73,0x75,
102732 -0x65,0x5F,0x70,0x72,
102733 -0x6F,0x62,0x65,0x72,
102734 -0x73,0x70,0x00,0x00,
102735 -0x72,0x65,0x70,0x6F,
102736 -0x72,0x74,0x5F,0x42,
102737 -0x53,0x53,0x49,0x44,
102738 -0x5F,0x69,0x6E,0x66,
102739 -0x6F,0x00,0x00,0x00,
102740 -0x00,0x50,0xF2,0x01,
102741 -0x69,0x73,0x73,0x75,
102742 -0x65,0x5F,0x61,0x73,
102743 -0x73,0x6F,0x63,0x72,
102744 -0x65,0x71,0x00,0x00,
102745 -0x00,0x50,0xF2,0x04,
102746 -0x69,0x73,0x73,0x75,
102747 -0x65,0x5F,0x61,0x63,
102748 -0x74,0x69,0x6F,0x6E,
102749 -0x00,0x00,0x00,0x00,
102750 -0x69,0x73,0x73,0x75,
102751 -0x65,0x5F,0x61,0x75,
102752 -0x74,0x68,0x00,0x00,
102753 -0x69,0x73,0x73,0x75,
102754 -0x65,0x5F,0x64,0x65,
102755 -0x61,0x75,0x74,0x68,
102756 -0x00,0x00,0x00,0x00,
102757 -0x69,0x73,0x73,0x75,
102758 -0x65,0x5F,0x64,0x69,
102759 -0x73,0x61,0x73,0x73,
102760 -0x6F,0x63,0x00,0x00,
102761 -0x69,0x73,0x73,0x75,
102762 -0x65,0x5F,0x66,0x72,
102763 -0x61,0x6D,0x65,0x00,
102764 -0x69,0x73,0x73,0x75,
102765 -0x65,0x5F,0x66,0x72,
102766 -0x61,0x6D,0x65,0x5F,
102767 -0x6C,0x65,0x6E,0x00,
102768 -0x30,0x1F,0x02,0x80,
102769 -0xB0,0x03,0x25,0xB0,
102770 -0xF8,0x00,0x25,0xB0,
102771 -0x18,0x03,0x25,0xB0,
102772 -0x44,0x44,0x33,0x33,
102773 -0x06,0x00,0x2A,0xB0,
102774 -0x28,0x3E,0x01,0x80,
102775 -0x28,0x3E,0x01,0x80,
102776 -0x24,0x3E,0x01,0x80,
102777 -0x28,0x3E,0x01,0x80,
102778 -0xA8,0x3E,0x01,0x80,
102779 -0x28,0x3E,0x01,0x80,
102780 -0x28,0x3E,0x01,0x80,
102781 -0x28,0x3E,0x01,0x80,
102782 -0x28,0x3E,0x01,0x80,
102783 -0x28,0x3E,0x01,0x80,
102784 -0x28,0x3E,0x01,0x80,
102785 -0x9C,0x3E,0x01,0x80,
102786 -0x90,0x3E,0x01,0x80,
102787 -0x28,0x3E,0x01,0x80,
102788 -0x28,0x3E,0x01,0x80,
102789 -0x28,0x3E,0x01,0x80,
102790 -0x28,0x3E,0x01,0x80,
102791 -0x28,0x3E,0x01,0x80,
102792 -0x84,0x3E,0x01,0x80,
102793 -0x28,0x3E,0x01,0x80,
102794 -0x28,0x3E,0x01,0x80,
102795 -0x28,0x3E,0x01,0x80,
102796 -0x78,0x3E,0x01,0x80,
102797 -0x28,0x3E,0x01,0x80,
102798 -0x6C,0x3E,0x01,0x80,
102799 -0x28,0x3E,0x01,0x80,
102800 -0x28,0x3E,0x01,0x80,
102801 -0x28,0x3E,0x01,0x80,
102802 -0x28,0x3E,0x01,0x80,
102803 -0x28,0x3E,0x01,0x80,
102804 -0x28,0x3E,0x01,0x80,
102805 -0x28,0x3E,0x01,0x80,
102806 -0x28,0x3E,0x01,0x80,
102807 -0x28,0x3E,0x01,0x80,
102808 -0x28,0x3E,0x01,0x80,
102809 -0x28,0x3E,0x01,0x80,
102810 -0x60,0x3E,0x01,0x80,
102811 -0x28,0x3E,0x01,0x80,
102812 -0x28,0x3E,0x01,0x80,
102813 -0x28,0x3E,0x01,0x80,
102814 -0x28,0x3E,0x01,0x80,
102815 -0x28,0x3E,0x01,0x80,
102816 -0x28,0x3E,0x01,0x80,
102817 -0x28,0x3E,0x01,0x80,
102818 -0x28,0x3E,0x01,0x80,
102819 -0x28,0x3E,0x01,0x80,
102820 -0x28,0x3E,0x01,0x80,
102821 -0x28,0x3E,0x01,0x80,
102822 -0x54,0x3E,0x01,0x80,
102823 -0x28,0x3E,0x01,0x80,
102824 -0x28,0x3E,0x01,0x80,
102825 -0x28,0x3E,0x01,0x80,
102826 -0x28,0x3E,0x01,0x80,
102827 -0x28,0x3E,0x01,0x80,
102828 -0x28,0x3E,0x01,0x80,
102829 -0x28,0x3E,0x01,0x80,
102830 -0x28,0x3E,0x01,0x80,
102831 -0x28,0x3E,0x01,0x80,
102832 -0x28,0x3E,0x01,0x80,
102833 -0x28,0x3E,0x01,0x80,
102834 -0x28,0x3E,0x01,0x80,
102835 -0x28,0x3E,0x01,0x80,
102836 -0x28,0x3E,0x01,0x80,
102837 -0x28,0x3E,0x01,0x80,
102838 -0x28,0x3E,0x01,0x80,
102839 -0x28,0x3E,0x01,0x80,
102840 -0x28,0x3E,0x01,0x80,
102841 -0x28,0x3E,0x01,0x80,
102842 -0x28,0x3E,0x01,0x80,
102843 -0x28,0x3E,0x01,0x80,
102844 -0x28,0x3E,0x01,0x80,
102845 -0x28,0x3E,0x01,0x80,
102846 -0x48,0x3E,0x01,0x80,
102847 -0x28,0x3E,0x01,0x80,
102848 -0x28,0x3E,0x01,0x80,
102849 -0x28,0x3E,0x01,0x80,
102850 -0x28,0x3E,0x01,0x80,
102851 -0x28,0x3E,0x01,0x80,
102852 -0x28,0x3E,0x01,0x80,
102853 -0x28,0x3E,0x01,0x80,
102854 -0x28,0x3E,0x01,0x80,
102855 -0x28,0x3E,0x01,0x80,
102856 -0x28,0x3E,0x01,0x80,
102857 -0x28,0x3E,0x01,0x80,
102858 -0x28,0x3E,0x01,0x80,
102859 -0x28,0x3E,0x01,0x80,
102860 -0x28,0x3E,0x01,0x80,
102861 -0x28,0x3E,0x01,0x80,
102862 -0x28,0x3E,0x01,0x80,
102863 -0x28,0x3E,0x01,0x80,
102864 -0x28,0x3E,0x01,0x80,
102865 -0x28,0x3E,0x01,0x80,
102866 -0x28,0x3E,0x01,0x80,
102867 -0x28,0x3E,0x01,0x80,
102868 -0x28,0x3E,0x01,0x80,
102869 -0x28,0x3E,0x01,0x80,
102870 -0x3C,0x3E,0x01,0x80,
102871 -0x28,0x3E,0x01,0x80,
102872 -0x28,0x3E,0x01,0x80,
102873 -0x28,0x3E,0x01,0x80,
102874 -0x28,0x3E,0x01,0x80,
102875 -0x28,0x3E,0x01,0x80,
102876 -0x28,0x3E,0x01,0x80,
102877 -0x28,0x3E,0x01,0x80,
102878 -0x28,0x3E,0x01,0x80,
102879 -0x28,0x3E,0x01,0x80,
102880 -0x28,0x3E,0x01,0x80,
102881 -0x28,0x3E,0x01,0x80,
102882 -0x30,0x3E,0x01,0x80,
102883 -0x68,0x3F,0x01,0x80,
102884 -0x5C,0x3F,0x01,0x80,
102885 -0x50,0x3F,0x01,0x80,
102886 -0x44,0x3F,0x01,0x80,
102887 -0x38,0x3F,0x01,0x80,
102888 -0x2C,0x3F,0x01,0x80,
102889 -0x20,0x3F,0x01,0x80,
102890 -0x14,0x3F,0x01,0x80,
102891 -0x08,0x3F,0x01,0x80,
102892 -0xFC,0x3E,0x01,0x80,
102893 -0xF0,0x3E,0x01,0x80,
102894 -0xE4,0x3E,0x01,0x80,
102895 -0x00,0x50,0xF2,0x01,
102896 -0x00,0x50,0xF2,0x02,
102897 -0x00,0x0F,0xAC,0x02,
102898 -0xBC,0xE3,0x01,0x80,
102899 -0x67,0x66,0x66,0x66,
102900 -0x7C,0x88,0x00,0x80,
102901 -0x64,0x88,0x00,0x80,
102902 -0x4C,0x88,0x00,0x80,
102903 -0x34,0x88,0x00,0x80,
102904 -0x1C,0x88,0x00,0x80,
102905 -0x04,0x88,0x00,0x80,
102906 -0xE0,0x87,0x00,0x80,
102907 -0x00,0x02,0x00,0x00,
102908 -0x08,0x09,0x00,0x00,
102909 -0x18,0x96,0x00,0x80,
102910 -0x24,0x96,0x00,0x80,
102911 -0x30,0x96,0x00,0x80,
102912 -0x3C,0x96,0x00,0x80,
102913 -0x18,0x96,0x00,0x80,
102914 -0x18,0x96,0x00,0x80,
102915 -0x18,0x96,0x00,0x80,
102916 -0x18,0x96,0x00,0x80,
102917 -0x48,0x96,0x00,0x80,
102918 -0x54,0x96,0x00,0x80,
102919 -0x60,0x96,0x00,0x80,
102920 -0x6C,0x96,0x00,0x80,
102921 -0x30,0x1F,0x02,0x80,
102922 -0x84,0x0E,0x25,0xB0,
102923 -0x88,0x0E,0x25,0xB0,
102924 -0x8C,0x0E,0x25,0xB0,
102925 -0xD0,0x0E,0x25,0xB0,
102926 -0xD8,0x0E,0x25,0xB0,
102927 -0x20,0x08,0x25,0xB0,
102928 -0x74,0x0E,0x25,0xB0,
102929 -0x80,0x0E,0x25,0xB0,
102930 -0x84,0x0E,0x25,0xB0,
102931 -0x88,0x0E,0x25,0xB0,
102932 -0x8C,0x0E,0x25,0xB0,
102933 -0xD0,0x0E,0x25,0xB0,
102934 -0xD8,0x0E,0x25,0xB0,
102935 -0x14,0x0C,0x25,0xB0,
102936 -0x88,0x0C,0x25,0xB0,
102937 -0x1C,0x0C,0x25,0xB0,
102938 -0xFE,0x01,0x80,0x7F,
102939 -0xE2,0x01,0x80,0x78,
102940 -0xC7,0x01,0xC0,0x71,
102941 -0xAE,0x01,0x80,0x6B,
102942 -0x95,0x01,0x40,0x65,
102943 -0x7F,0x01,0xC0,0x5F,
102944 -0x69,0x01,0x40,0x5A,
102945 -0x55,0x01,0x40,0x55,
102946 -0x42,0x01,0x80,0x50,
102947 -0x30,0x01,0x00,0x4C,
102948 -0x1F,0x01,0xC0,0x47,
102949 -0x0F,0x01,0xC0,0x43,
102950 -0x00,0x01,0x00,0x40,
102951 -0xF2,0x00,0x80,0x3C,
102952 -0xE4,0x00,0x00,0x39,
102953 -0xD7,0x00,0xC0,0x35,
102954 -0xCB,0x00,0xC0,0x32,
102955 -0xC0,0x00,0x00,0x30,
102956 -0xB5,0x00,0x40,0x2D,
102957 -0xAB,0x00,0xC0,0x2A,
102958 -0xA2,0x00,0x80,0x28,
102959 -0x98,0x00,0x00,0x26,
102960 -0x90,0x00,0x00,0x24,
102961 -0x88,0x00,0x00,0x22,
102962 -0x80,0x00,0x00,0x20,
102963 -0x79,0x00,0x40,0x1E,
102964 -0x72,0x00,0x80,0x1C,
102965 -0x6C,0x00,0x00,0x1B,
102966 -0x66,0x00,0x80,0x19,
102967 -0x60,0x00,0x00,0x18,
102968 -0x5B,0x00,0xC0,0x16,
102969 -0x56,0x00,0x80,0x15,
102970 -0x51,0x00,0x40,0x14,
102971 -0x4C,0x00,0x00,0x13,
102972 -0x48,0x00,0x00,0x12,
102973 -0x44,0x00,0x00,0x11,
102974 -0x40,0x00,0x00,0x10,
102975 -0x36,0x35,0x2E,0x25,
102976 -0x1C,0x12,0x09,0x04,
102977 -0x33,0x32,0x2B,0x23,
102978 -0x1A,0x11,0x08,0x04,
102979 -0x30,0x2F,0x29,0x21,
102980 -0x19,0x10,0x08,0x03,
102981 -0x2D,0x2D,0x27,0x1F,
102982 -0x18,0x0F,0x08,0x03,
102983 -0x2B,0x2A,0x25,0x1E,
102984 -0x16,0x0E,0x07,0x03,
102985 -0x28,0x28,0x22,0x1C,
102986 -0x15,0x0D,0x07,0x03,
102987 -0x26,0x25,0x21,0x1B,
102988 -0x14,0x0D,0x06,0x03,
102989 -0x24,0x23,0x1F,0x19,
102990 -0x13,0x0C,0x06,0x03,
102991 -0x22,0x21,0x1D,0x18,
102992 -0x11,0x0B,0x06,0x02,
102993 -0x20,0x20,0x1B,0x16,
102994 -0x11,0x08,0x05,0x02,
102995 -0x1F,0x1E,0x1A,0x15,
102996 -0x10,0x0A,0x05,0x02,
102997 -0x1D,0x1C,0x18,0x14,
102998 -0x0F,0x0A,0x05,0x02,
102999 -0x1B,0x1A,0x17,0x13,
103000 -0x0E,0x09,0x04,0x02,
103001 -0x1A,0x19,0x16,0x12,
103002 -0x0D,0x09,0x04,0x02,
103003 -0x18,0x17,0x15,0x11,
103004 -0x0C,0x08,0x04,0x02,
103005 -0x17,0x16,0x13,0x10,
103006 -0x0C,0x08,0x04,0x02,
103007 -0x16,0x15,0x12,0x0F,
103008 -0x0B,0x07,0x04,0x01,
103009 -0x14,0x14,0x11,0x0E,
103010 -0x0B,0x07,0x03,0x02,
103011 -0x13,0x13,0x10,0x0D,
103012 -0x0A,0x06,0x03,0x01,
103013 -0x12,0x12,0x0F,0x0C,
103014 -0x09,0x06,0x03,0x01,
103015 -0x11,0x11,0x0F,0x0C,
103016 -0x09,0x06,0x03,0x01,
103017 -0x10,0x10,0x0E,0x0B,
103018 -0x08,0x05,0x03,0x01,
103019 -0x0F,0x0F,0x0D,0x0B,
103020 -0x08,0x05,0x03,0x01,
103021 -0x0E,0x0E,0x0C,0x0A,
103022 -0x08,0x05,0x02,0x01,
103023 -0x0D,0x0D,0x0C,0x0A,
103024 -0x07,0x05,0x02,0x01,
103025 -0x0D,0x0C,0x0B,0x09,
103026 -0x07,0x04,0x02,0x01,
103027 -0x0C,0x0C,0x0A,0x09,
103028 -0x06,0x04,0x02,0x01,
103029 -0x0B,0x0B,0x0A,0x08,
103030 -0x06,0x04,0x02,0x01,
103031 -0x0B,0x0A,0x09,0x08,
103032 -0x06,0x04,0x02,0x01,
103033 -0x0A,0x0A,0x09,0x07,
103034 -0x05,0x03,0x02,0x01,
103035 -0x0A,0x09,0x08,0x07,
103036 -0x05,0x03,0x02,0x01,
103037 -0x09,0x09,0x08,0x06,
103038 -0x05,0x03,0x01,0x01,
103039 -0x09,0x08,0x07,0x06,
103040 -0x04,0x03,0x01,0x01,
103041 -0x36,0x35,0x2E,0x1B,
103042 -0x00,0x00,0x00,0x00,
103043 -0x33,0x32,0x2B,0x19,
103044 -0x00,0x00,0x00,0x00,
103045 -0x30,0x2F,0x29,0x18,
103046 -0x00,0x00,0x00,0x00,
103047 -0x2D,0x2D,0x17,0x17,
103048 -0x00,0x00,0x00,0x00,
103049 -0x2B,0x2A,0x25,0x15,
103050 -0x00,0x00,0x00,0x00,
103051 -0x28,0x28,0x24,0x14,
103052 -0x00,0x00,0x00,0x00,
103053 -0x26,0x25,0x21,0x13,
103054 -0x00,0x00,0x00,0x00,
103055 -0x24,0x23,0x1F,0x12,
103056 -0x00,0x00,0x00,0x00,
103057 -0x22,0x21,0x1D,0x11,
103058 -0x00,0x00,0x00,0x00,
103059 -0x20,0x20,0x1B,0x10,
103060 -0x00,0x00,0x00,0x00,
103061 -0x1F,0x1E,0x1A,0x0F,
103062 -0x00,0x00,0x00,0x00,
103063 -0x1D,0x1C,0x18,0x0E,
103064 -0x00,0x00,0x00,0x00,
103065 -0x1B,0x1A,0x17,0x0E,
103066 -0x00,0x00,0x00,0x00,
103067 -0x1A,0x19,0x16,0x0D,
103068 -0x00,0x00,0x00,0x00,
103069 -0x18,0x17,0x15,0x0C,
103070 -0x00,0x00,0x00,0x00,
103071 -0x17,0x16,0x13,0x0B,
103072 -0x00,0x00,0x00,0x00,
103073 -0x16,0x15,0x12,0x0B,
103074 -0x00,0x00,0x00,0x00,
103075 -0x14,0x14,0x11,0x0A,
103076 -0x00,0x00,0x00,0x00,
103077 -0x13,0x13,0x10,0x0A,
103078 -0x00,0x00,0x00,0x00,
103079 -0x12,0x12,0x0F,0x09,
103080 -0x00,0x00,0x00,0x00,
103081 -0x11,0x11,0x0F,0x09,
103082 -0x00,0x00,0x00,0x00,
103083 -0x10,0x10,0x0E,0x08,
103084 -0x00,0x00,0x00,0x00,
103085 -0x0F,0x0F,0x0D,0x08,
103086 -0x00,0x00,0x00,0x00,
103087 -0x0E,0x0E,0x0C,0x07,
103088 -0x00,0x00,0x00,0x00,
103089 -0x0D,0x0D,0x0C,0x07,
103090 -0x00,0x00,0x00,0x00,
103091 -0x0D,0x0C,0x0B,0x06,
103092 -0x00,0x00,0x00,0x00,
103093 -0x0C,0x0C,0x0A,0x06,
103094 -0x00,0x00,0x00,0x00,
103095 -0x0B,0x0B,0x0A,0x06,
103096 -0x00,0x00,0x00,0x00,
103097 -0x0B,0x0A,0x09,0x05,
103098 -0x00,0x00,0x00,0x00,
103099 -0x0A,0x0A,0x09,0x05,
103100 -0x00,0x00,0x00,0x00,
103101 -0x0A,0x09,0x08,0x05,
103102 -0x00,0x00,0x00,0x00,
103103 -0x09,0x09,0x08,0x05,
103104 -0x00,0x00,0x00,0x00,
103105 -0x09,0x08,0x07,0x04,
103106 -0x00,0x00,0x00,0x00,
103107 -0x06,0x00,0x2A,0xB0,
103108 -0x05,0x00,0x2A,0xB0,
103109 -0x54,0x83,0x01,0x80,
103110 -0xC4,0x83,0x01,0x80,
103111 -0x80,0x83,0x01,0x80,
103112 -0xC4,0x83,0x01,0x80,
103113 -0xC4,0x83,0x01,0x80,
103114 -0xC4,0x83,0x01,0x80,
103115 -0xC4,0x83,0x01,0x80,
103116 -0x2C,0x83,0x01,0x80,
103117 -0x00,0x01,0x02,0x02,
103118 -0x03,0x03,0x03,0x03,
103119 -0x04,0x04,0x04,0x04,
103120 -0x04,0x04,0x04,0x04,
103121 -0x05,0x05,0x05,0x05,
103122 -0x05,0x05,0x05,0x05,
103123 -0x05,0x05,0x05,0x05,
103124 -0x05,0x05,0x05,0x05,
103125 -0x06,0x06,0x06,0x06,
103126 -0x06,0x06,0x06,0x06,
103127 -0x06,0x06,0x06,0x06,
103128 -0x06,0x06,0x06,0x06,
103129 -0x06,0x06,0x06,0x06,
103130 -0x06,0x06,0x06,0x06,
103131 -0x06,0x06,0x06,0x06,
103132 -0x06,0x06,0x06,0x06,
103133 -0x07,0x07,0x07,0x07,
103134 -0x07,0x07,0x07,0x07,
103135 -0x07,0x07,0x07,0x07,
103136 -0x07,0x07,0x07,0x07,
103137 -0x07,0x07,0x07,0x07,
103138 -0x07,0x07,0x07,0x07,
103139 -0x07,0x07,0x07,0x07,
103140 -0x07,0x07,0x07,0x07,
103141 -0x07,0x07,0x07,0x07,
103142 -0x07,0x07,0x07,0x07,
103143 -0x07,0x07,0x07,0x07,
103144 -0x07,0x07,0x07,0x07,
103145 -0x07,0x07,0x07,0x07,
103146 -0x07,0x07,0x07,0x07,
103147 -0x07,0x07,0x07,0x07,
103148 -0x07,0x07,0x07,0x07,
103149 -0x08,0x08,0x08,0x08,
103150 -0x08,0x08,0x08,0x08,
103151 -0x08,0x08,0x08,0x08,
103152 -0x08,0x08,0x08,0x08,
103153 -0x08,0x08,0x08,0x08,
103154 -0x08,0x08,0x08,0x08,
103155 -0x08,0x08,0x08,0x08,
103156 -0x08,0x08,0x08,0x08,
103157 -0x08,0x08,0x08,0x08,
103158 -0x08,0x08,0x08,0x08,
103159 -0x08,0x08,0x08,0x08,
103160 -0x08,0x08,0x08,0x08,
103161 -0x08,0x08,0x08,0x08,
103162 -0x08,0x08,0x08,0x08,
103163 -0x08,0x08,0x08,0x08,
103164 -0x08,0x08,0x08,0x08,
103165 -0x08,0x08,0x08,0x08,
103166 -0x08,0x08,0x08,0x08,
103167 -0x08,0x08,0x08,0x08,
103168 -0x08,0x08,0x08,0x08,
103169 -0x08,0x08,0x08,0x08,
103170 -0x08,0x08,0x08,0x08,
103171 -0x08,0x08,0x08,0x08,
103172 -0x08,0x08,0x08,0x08,
103173 -0x08,0x08,0x08,0x08,
103174 -0x08,0x08,0x08,0x08,
103175 -0x08,0x08,0x08,0x08,
103176 -0x08,0x08,0x08,0x08,
103177 -0x08,0x08,0x08,0x08,
103178 -0x08,0x08,0x08,0x08,
103179 -0x08,0x08,0x08,0x08,
103180 -0x08,0x08,0x08,0x08,
103181 -0x00,0x00,0x00,0x00,
103182 -0x00,0x00,0x00,0x00,
103183 -0x00,0x00,0x00,0x00,
103184 -0x00,0x00,0x00,0x00,
103185 -0x00,0x00,0x00,0x00,
103186 -0x00,0x00,0x00,0x00,
103187 -0x00,0x00,0x00,0x00,
103188 -0x00,0x00,0x00,0x00,
103189 -0x00,0x00,0x00,0x00,
103190 -0x00,0x00,0x00,0x00,
103191 -0x00,0x00,0x00,0x00,
103192 -0x00,0x00,0x00,0x00,
103193 -0x00,0x00,0x00,0x00,
103194 -0x00,0x00,0x00,0x00,
103195 -0x00,0x00,0x00,0x00,
103196 -0x00,0x00,0x00,0x00,
103197 -0x00,0x00,0x00,0x00,
103198 -0x00,0x00,0x00,0x00,
103199 -0x00,0x00,0x00,0x00,
103200 -0x00,0x00,0x00,0x00,
103201 -0x00,0x00,0x00,0x00,
103202 -0x00,0x00,0x00,0x00,
103203 -0x00,0x00,0x00,0x00,
103204 -0x00,0x00,0x00,0x00,
103205 -0x00,0x00,0x00,0x00,
103206 -0x00,0x00,0x00,0x00,
103207 -0x00,0x00,0x00,0x00,
103208 -0x00,0x00,0x00,0x00,
103209 -0x00,0x00,0x00,0x00,
103210 -0x00,0x00,0x00,0x00,
103211 -0x00,0x00,0x00,0x00,
103212 -0x00,0x00,0x00,0x00,
103213 -0x00,0x00,0x00,0x00,
103214 -0x00,0x00,0x00,0x00,
103215 -0x00,0x00,0x00,0x00,
103216 -0x08,0x08,0x08,0x08,
103217 -0x08,0x08,0x08,0x08,
103218 -0x08,0x28,0x28,0x28,
103219 -0x28,0x28,0x08,0x08,
103220 -0x08,0x08,0x08,0x08,
103221 -0x08,0x08,0x08,0x08,
103222 -0x08,0x08,0x08,0x08,
103223 -0x08,0x08,0x08,0x08,
103224 -0xA0,0x10,0x10,0x10,
103225 -0x10,0x10,0x10,0x10,
103226 -0x10,0x10,0x10,0x10,
103227 -0x10,0x10,0x10,0x10,
103228 -0x04,0x04,0x04,0x04,
103229 -0x04,0x04,0x04,0x04,
103230 -0x04,0x04,0x10,0x10,
103231 -0x10,0x10,0x10,0x10,
103232 -0x10,0x41,0x41,0x41,
103233 -0x41,0x41,0x41,0x01,
103234 -0x01,0x01,0x01,0x01,
103235 -0x01,0x01,0x01,0x01,
103236 -0x01,0x01,0x01,0x01,
103237 -0x01,0x01,0x01,0x01,
103238 -0x01,0x01,0x01,0x10,
103239 -0x10,0x10,0x10,0x10,
103240 -0x10,0x42,0x42,0x42,
103241 -0x42,0x42,0x42,0x02,
103242 -0x02,0x02,0x02,0x02,
103243 -0x02,0x02,0x02,0x02,
103244 -0x02,0x02,0x02,0x02,
103245 -0x02,0x02,0x02,0x02,
103246 -0x02,0x02,0x02,0x10,
103247 -0x10,0x10,0x10,0x08,
103248 -0x00,0x00,0x00,0x00,
103249 -0x00,0x00,0x00,0x00,
103250 -0x00,0x00,0x00,0x00,
103251 -0x00,0x00,0x00,0x00,
103252 -0x00,0x00,0x00,0x00,
103253 -0x00,0x00,0x00,0x00,
103254 -0x00,0x00,0x00,0x00,
103255 -0x00,0x00,0x00,0x00,
103256 -0xA0,0x10,0x10,0x10,
103257 -0x10,0x10,0x10,0x10,
103258 -0x10,0x10,0x10,0x10,
103259 -0x10,0x10,0x10,0x10,
103260 -0x10,0x10,0x10,0x10,
103261 -0x10,0x10,0x10,0x10,
103262 -0x10,0x10,0x10,0x10,
103263 -0x10,0x10,0x10,0x10,
103264 -0x01,0x01,0x01,0x01,
103265 -0x01,0x01,0x01,0x01,
103266 -0x01,0x01,0x01,0x01,
103267 -0x01,0x01,0x01,0x01,
103268 -0x01,0x01,0x01,0x01,
103269 -0x01,0x01,0x01,0x10,
103270 -0x01,0x01,0x01,0x01,
103271 -0x01,0x01,0x01,0x02,
103272 -0x02,0x02,0x02,0x02,
103273 -0x02,0x02,0x02,0x02,
103274 -0x02,0x02,0x02,0x02,
103275 -0x02,0x02,0x02,0x02,
103276 -0x02,0x02,0x02,0x02,
103277 -0x02,0x02,0x02,0x10,
103278 -0x02,0x02,0x02,0x02,
103279 -0x02,0x02,0x02,0x00,
103280 -0x2D,0x5C,0x7C,0x2F,
103281 -0x00,0x00,0x00,0x00,
103282 -0xFD,0xFA,0x00,0x00,
103283 -0x00,0x00,0x00,0x00,
103284 -0x00,0x45,0xC4,0xF0,
103285 -0x00,0x45,0xC4,0xF0,
103286 -0x00,0x00,0x00,0x00,
103287 -0x00,0x00,0x00,0x00,
103288 -0x00,0x00,0x00,0x00,
103289 -0x00,0x45,0xB5,0x60,
103290 -0xFF,0xFF,0xFF,0xFF,
103291 -0x00,0x00,0x00,0x02,
103292 -0x00,0x00,0x00,0x00,
103293 -0x00,0x00,0x00,0x00,
103294 -0x08,0xFB,0x90,0xB8,
103295 -0xFF,0xFF,0xFF,0xFF,
103296 -};
103297 diff --git a/drivers/net/wireless/rtl8192cu/include/hal_com.h b/drivers/net/wireless/rtl8192cu/include/hal_com.h
103298 new file mode 100644
103299 index 0000000..42aae0e
103300 --- /dev/null
103301 +++ b/drivers/net/wireless/rtl8192cu/include/hal_com.h
103302 @@ -0,0 +1,146 @@
103303 +/******************************************************************************
103304 + *
103305 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
103306 + *
103307 + * This program is free software; you can redistribute it and/or modify it
103308 + * under the terms of version 2 of the GNU General Public License as
103309 + * published by the Free Software Foundation.
103310 + *
103311 + * This program is distributed in the hope that it will be useful, but WITHOUT
103312 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
103313 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
103314 + * more details.
103315 + *
103316 + * You should have received a copy of the GNU General Public License along with
103317 + * this program; if not, write to the Free Software Foundation, Inc.,
103318 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
103319 + *
103320 + *
103321 + ******************************************************************************/
103322 +#ifndef __HAL_COMMON_H__
103323 +#define __HAL_COMMON_H__
103324 +
103325 +//CCK
103326 +#define RATE_1M BIT(0)
103327 +#define RATE_2M BIT(1)
103328 +#define RATE_5_5M BIT(2)
103329 +#define RATE_11M BIT(3)
103330 +//OFDM
103331 +#define RATE_6M BIT(4)
103332 +#define RATE_9M BIT(5)
103333 +#define RATE_12M BIT(6)
103334 +#define RATE_18M BIT(7)
103335 +#define RATE_24M BIT(8)
103336 +#define RATE_36M BIT(9)
103337 +#define RATE_48M BIT(10)
103338 +#define RATE_54M BIT(11)
103339 +//MCS 1 Spatial Stream
103340 +#define RATE_MCS0 BIT(12)
103341 +#define RATE_MCS1 BIT(13)
103342 +#define RATE_MCS2 BIT(14)
103343 +#define RATE_MCS3 BIT(15)
103344 +#define RATE_MCS4 BIT(16)
103345 +#define RATE_MCS5 BIT(17)
103346 +#define RATE_MCS6 BIT(18)
103347 +#define RATE_MCS7 BIT(19)
103348 +//MCS 2 Spatial Stream
103349 +#define RATE_MCS8 BIT(20)
103350 +#define RATE_MCS9 BIT(21)
103351 +#define RATE_MCS10 BIT(22)
103352 +#define RATE_MCS11 BIT(23)
103353 +#define RATE_MCS12 BIT(24)
103354 +#define RATE_MCS13 BIT(25)
103355 +#define RATE_MCS14 BIT(26)
103356 +#define RATE_MCS15 BIT(27)
103357 +
103358 +// ALL CCK Rate
103359 +#define RATE_ALL_CCK RATR_1M|RATR_2M|RATR_55M|RATR_11M
103360 +#define RATE_ALL_OFDM_AG RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\
103361 + RATR_36M|RATR_48M|RATR_54M
103362 +#define RATE_ALL_OFDM_1SS RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\
103363 + RATR_MCS4|RATR_MCS5|RATR_MCS6 |RATR_MCS7
103364 +#define RATE_ALL_OFDM_2SS RATR_MCS8|RATR_MCS9 |RATR_MCS10|RATR_MCS11|\
103365 + RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15
103366 +
103367 +/*------------------------------ Tx Desc definition Macro ------------------------*/
103368 +//#pragma mark -- Tx Desc related definition. --
103369 +//----------------------------------------------------------------------------
103370 +//-----------------------------------------------------------
103371 +// Rate
103372 +//-----------------------------------------------------------
103373 +// CCK Rates, TxHT = 0
103374 +#define DESC_RATE1M 0x00
103375 +#define DESC_RATE2M 0x01
103376 +#define DESC_RATE5_5M 0x02
103377 +#define DESC_RATE11M 0x03
103378 +
103379 +// OFDM Rates, TxHT = 0
103380 +#define DESC_RATE6M 0x04
103381 +#define DESC_RATE9M 0x05
103382 +#define DESC_RATE12M 0x06
103383 +#define DESC_RATE18M 0x07
103384 +#define DESC_RATE24M 0x08
103385 +#define DESC_RATE36M 0x09
103386 +#define DESC_RATE48M 0x0a
103387 +#define DESC_RATE54M 0x0b
103388 +
103389 +// MCS Rates, TxHT = 1
103390 +#define DESC_RATEMCS0 0x0c
103391 +#define DESC_RATEMCS1 0x0d
103392 +#define DESC_RATEMCS2 0x0e
103393 +#define DESC_RATEMCS3 0x0f
103394 +#define DESC_RATEMCS4 0x10
103395 +#define DESC_RATEMCS5 0x11
103396 +#define DESC_RATEMCS6 0x12
103397 +#define DESC_RATEMCS7 0x13
103398 +#define DESC_RATEMCS8 0x14
103399 +#define DESC_RATEMCS9 0x15
103400 +#define DESC_RATEMCS10 0x16
103401 +#define DESC_RATEMCS11 0x17
103402 +#define DESC_RATEMCS12 0x18
103403 +#define DESC_RATEMCS13 0x19
103404 +#define DESC_RATEMCS14 0x1a
103405 +#define DESC_RATEMCS15 0x1b
103406 +#define DESC_RATEMCS15_SG 0x1c
103407 +#define DESC_RATEMCS32 0x20
103408 +
103409 +//============================================================
103410 +// Global var
103411 +//============================================================
103412 +#define OFDM_TABLE_SIZE_92C 37
103413 +#define OFDM_TABLE_SIZE_92D 43
103414 +#define CCK_TABLE_SIZE 33
103415 +
103416 +extern u32 OFDMSwingTable[OFDM_TABLE_SIZE_92D] ;
103417 +
103418 +extern u8 CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];
103419 +
103420 +extern u8 CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8];
103421 +
103422 +#ifdef CONFIG_CHIP_VER_INTEGRATION
103423 +void dump_chip_info(HAL_VERSION ChipVersion);
103424 +#endif
103425 +
103426 +u8 //return the final channel plan decision
103427 +hal_com_get_channel_plan(
103428 + IN PADAPTER padapter,
103429 + IN u8 hw_channel_plan, //channel plan from HW (efuse/eeprom)
103430 + IN u8 sw_channel_plan, //channel plan from SW (registry/module param)
103431 + IN u8 def_channel_plan, //channel plan used when the former two is invalid
103432 + IN BOOLEAN AutoLoadFail
103433 + );
103434 +
103435 +void HalSetBrateCfg(
103436 + IN PADAPTER Adapter,
103437 + IN u8 *mBratesOS,
103438 + OUT u16 *pBrateCfg);
103439 +
103440 +u8 MRateToHwRate(u8 rate);
103441 +
103442 +void hal_init_macaddr(_adapter *adapter);
103443 +
103444 +void c2h_evt_clear(_adapter *adapter);
103445 +s32 c2h_evt_read(_adapter *adapter, u8 *buf);
103446 +
103447 +#endif //__HAL_COMMON_H__
103448 +
103449 diff --git a/drivers/net/wireless/rtl8192cu/include/hal_init.h b/drivers/net/wireless/rtl8192cu/include/hal_init.h
103450 deleted file mode 100644
103451 index ec48f83..0000000
103452 --- a/drivers/net/wireless/rtl8192cu/include/hal_init.h
103453 +++ /dev/null
103454 @@ -1,305 +0,0 @@
103455 -/******************************************************************************
103456 - *
103457 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
103458 - *
103459 - * This program is free software; you can redistribute it and/or modify it
103460 - * under the terms of version 2 of the GNU General Public License as
103461 - * published by the Free Software Foundation.
103462 - *
103463 - * This program is distributed in the hope that it will be useful, but WITHOUT
103464 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
103465 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
103466 - * more details.
103467 - *
103468 - * You should have received a copy of the GNU General Public License along with
103469 - * this program; if not, write to the Free Software Foundation, Inc.,
103470 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
103471 - *
103472 - *
103473 - ******************************************************************************/
103474 -#ifndef __HAL_INIT_H__
103475 -#define __HAL_INIT_H__
103476 -
103477 -#include <drv_conf.h>
103478 -#include <osdep_service.h>
103479 -#include <drv_types.h>
103480 -
103481 -#ifdef CONFIG_PCI_HCI
103482 -#include <pci_hal.h>
103483 -#endif
103484 -
103485 -
103486 -enum RTL871X_HCI_TYPE {
103487 -
103488 - RTW_SDIO,
103489 - RTW_USB,
103490 - RTW_PCIE
103491 -};
103492 -
103493 -enum _CHIP_TYPE {
103494 -
103495 - NULL_CHIP_TYPE,
103496 - RTL8712_8188S_8191S_8192S,
103497 - RTL8188C_8192C,
103498 - RTL8192D,
103499 - MAX_CHIP_TYPE
103500 -};
103501 -
103502 -
103503 -typedef enum _HW_VARIABLES{
103504 - HW_VAR_MEDIA_STATUS,
103505 - HW_VAR_MEDIA_STATUS1,
103506 - HW_VAR_SET_OPMODE,
103507 - HW_VAR_MAC_ADDR,
103508 - HW_VAR_BSSID,
103509 - HW_VAR_INIT_RTS_RATE,
103510 - HW_VAR_BASIC_RATE,
103511 - HW_VAR_TXPAUSE,
103512 - HW_VAR_BCN_FUNC,
103513 - HW_VAR_CORRECT_TSF,
103514 - HW_VAR_CHECK_BSSID,
103515 - HW_VAR_MLME_DISCONNECT,
103516 - HW_VAR_MLME_SITESURVEY,
103517 - HW_VAR_MLME_JOIN,
103518 - HW_VAR_BEACON_INTERVAL,
103519 - HW_VAR_SLOT_TIME,
103520 - HW_VAR_SIFS,
103521 - HW_VAR_ACK_PREAMBLE,
103522 - HW_VAR_SEC_CFG,
103523 - HW_VAR_TX_BCN_DONE,
103524 - HW_VAR_RF_TYPE,
103525 - HW_VAR_DM_FLAG,
103526 - HW_VAR_DM_FUNC_OP,
103527 - HW_VAR_DM_FUNC_SET,
103528 - HW_VAR_DM_FUNC_CLR,
103529 - HW_VAR_CAM_EMPTY_ENTRY,
103530 - HW_VAR_CAM_INVALID_ALL,
103531 - HW_VAR_CAM_WRITE,
103532 - HW_VAR_AC_PARAM_VO,
103533 - HW_VAR_AC_PARAM_VI,
103534 - HW_VAR_AC_PARAM_BE,
103535 - HW_VAR_AC_PARAM_BK,
103536 - HW_VAR_ACM_CTRL,
103537 - HW_VAR_AMPDU_MIN_SPACE,
103538 - HW_VAR_AMPDU_FACTOR,
103539 - HW_VAR_RXDMA_AGG_PG_TH,
103540 - HW_VAR_SET_RPWM,
103541 - HW_VAR_H2C_FW_PWRMODE,
103542 - HW_VAR_H2C_FW_JOINBSSRPT,
103543 - HW_VAR_FWLPS_RF_ON,
103544 - HW_VAR_H2C_FW_P2P_PS_OFFLOAD,
103545 - HW_VAR_TDLS_WRCR,
103546 - HW_VAR_TDLS_INIT_CH_SEN,
103547 - HW_VAR_TDLS_RS_RCR,
103548 - HW_VAR_TDLS_DONE_CH_SEN,
103549 - HW_VAR_INITIAL_GAIN,
103550 - HW_VAR_TRIGGER_GPIO_0,
103551 - HW_VAR_BT_SET_COEXIST,
103552 - HW_VAR_BT_ISSUE_DELBA,
103553 - HW_VAR_CURRENT_ANTENNA,
103554 - HW_VAR_ANTENNA_DIVERSITY_LINK,
103555 - HW_VAR_ANTENNA_DIVERSITY_SELECT,
103556 - HW_VAR_SWITCH_EPHY_WoWLAN,
103557 - HW_VAR_EFUSE_BYTES,
103558 - HW_VAR_FIFO_CLEARN_UP,
103559 - HW_VAR_CHECK_TXBUF,
103560 - HW_VAR_APFM_ON_MAC, //Auto FSM to Turn On, include clock, isolation, power control for MAC only HW_VAR_WOWLAN,}HW_VARIABLES;
103561 - HW_VAR_WOWLAN,
103562 -}HW_VARIABLES;
103563 -
103564 -typedef enum _HAL_DEF_VARIABLE{
103565 - HAL_DEF_UNDERCORATEDSMOOTHEDPWDB,
103566 - HAL_DEF_IS_SUPPORT_ANT_DIV,
103567 - HAL_DEF_CURRENT_ANTENNA,
103568 - HAL_DEF_DRVINFO_SZ,
103569 - HAL_DEF_MAX_RECVBUF_SZ,
103570 - HAL_DEF_RX_PACKET_OFFSET,
103571 - HAL_DEF_DBG_DUMP_RXPKT,//for dbg
103572 - HAL_DEF_DBG_DM_FUNC,//for dbg
103573 -}HAL_DEF_VARIABLE;
103574 -
103575 -typedef enum _HAL_INTF_PS_FUNC{
103576 - HAL_USB_SELECT_SUSPEND,
103577 - HAL_MAX_ID,
103578 -}HAL_INTF_PS_FUNC;
103579 -
103580 -struct hal_ops {
103581 - u32 (*hal_init)(PADAPTER Adapter);
103582 - u32 (*hal_deinit)(PADAPTER Adapter);
103583 -
103584 - void (*free_hal_data)(PADAPTER Adapter);
103585 -
103586 - u32 (*inirp_init)(PADAPTER Adapter);
103587 - u32 (*inirp_deinit)(PADAPTER Adapter);
103588 -
103589 - s32 (*init_xmit_priv)(PADAPTER Adapter);
103590 - void (*free_xmit_priv)(PADAPTER Adapter);
103591 -
103592 - s32 (*init_recv_priv)(PADAPTER Adapter);
103593 - void (*free_recv_priv)(PADAPTER Adapter);
103594 -
103595 - void (*InitSwLeds)(PADAPTER Adapter);
103596 - void (*DeInitSwLeds)(PADAPTER Adapter);
103597 -
103598 - void (*dm_init)(PADAPTER Adapter);
103599 - void (*dm_deinit)(PADAPTER Adapter);
103600 - void (*read_chip_version)(PADAPTER Adapter);
103601 -
103602 - void (*init_default_value)(PADAPTER Adapter);
103603 -
103604 - void (*intf_chip_configure)(PADAPTER Adapter);
103605 -
103606 - void (*read_adapter_info)(PADAPTER Adapter);
103607 -
103608 - void (*enable_interrupt)(PADAPTER Adapter);
103609 - void (*disable_interrupt)(PADAPTER Adapter);
103610 - s32 (*interrupt_handler)(PADAPTER Adapter);
103611 -
103612 - void (*set_bwmode_handler)(PADAPTER Adapter, HT_CHANNEL_WIDTH Bandwidth, u8 Offset);
103613 - void (*set_channel_handler)(PADAPTER Adapter, u8 channel);
103614 -
103615 - void (*hal_dm_watchdog)(PADAPTER Adapter);
103616 -
103617 - void (*SetHwRegHandler)(PADAPTER Adapter, u8 variable,u8* val);
103618 - void (*GetHwRegHandler)(PADAPTER Adapter, u8 variable,u8* val);
103619 -
103620 - u8 (*GetHalDefVarHandler)(PADAPTER Adapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
103621 - u8 (*SetHalDefVarHandler)(PADAPTER Adapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
103622 -
103623 - void (*UpdateRAMaskHandler)(PADAPTER Adapter, u32 mac_id);
103624 - void (*SetBeaconRelatedRegistersHandler)(PADAPTER Adapter);
103625 -
103626 - void (*Add_RateATid)(PADAPTER Adapter, u32 bitmap, u8 arg, u8 mac_id);
103627 -
103628 -#ifdef CONFIG_ANTENNA_DIVERSITY
103629 - u8 (*SwAntDivBeforeLinkHandler)(PADAPTER Adapter);
103630 - void (*SwAntDivCompareHandler)(PADAPTER Adapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
103631 -#endif
103632 - u8 (*interface_ps_func)(PADAPTER Adapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
103633 -
103634 - s32 (*hal_xmit)(PADAPTER Adapter, struct xmit_frame *pxmitframe);
103635 - void (*mgnt_xmit)(PADAPTER Adapter, struct xmit_frame *pmgntframe);
103636 -
103637 - u32 (*read_bbreg)(PADAPTER Adapter, u32 RegAddr, u32 BitMask);
103638 - void (*write_bbreg)(PADAPTER Adapter, u32 RegAddr, u32 BitMask, u32 Data);
103639 - u32 (*read_rfreg)(PADAPTER Adapter, u32 eRFPath, u32 RegAddr, u32 BitMask);
103640 - void (*write_rfreg)(PADAPTER Adapter, u32 eRFPath, u32 RegAddr, u32 BitMask, u32 Data);
103641 -
103642 -#ifdef CONFIG_HOSTAPD_MLME
103643 - s32 (*hostap_mgnt_xmit_entry)(PADAPTER Adapter, _pkt *pkt);
103644 -#endif
103645 - void (*EfusePowerSwitch)(PADAPTER pAdapter, u8 bWrite, u8 PwrState);
103646 - void (*ReadEFuse)(PADAPTER Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, BOOLEAN bPseudoTest);
103647 - void (*EFUSEGetEfuseDefinition)(PADAPTER pAdapter, u8 efuseType, u8 type, PVOID *pOut, BOOLEAN bPseudoTest);
103648 - u16 (*EfuseGetCurrentSize)(PADAPTER pAdapter, u8 efuseType, BOOLEAN bPseudoTest);
103649 - int (*Efuse_PgPacketRead)(PADAPTER pAdapter, u8 offset, u8 *data, BOOLEAN bPseudoTest);
103650 - int (*Efuse_PgPacketWrite)(PADAPTER pAdapter, u8 offset, u8 word_en, u8 *data, BOOLEAN bPseudoTest);
103651 - u8 (*Efuse_WordEnableDataWrite)(PADAPTER pAdapter, u16 efuse_addr, u8 word_en, u8 *data, BOOLEAN bPseudoTest);
103652 -
103653 -#ifdef DBG_CONFIG_ERROR_DETECT
103654 - void (*sreset_init_value)(_adapter *padapter);
103655 - void (*sreset_reset_value)(_adapter *padapter);
103656 - void (*silentreset)(_adapter *padapter);
103657 - void (*sreset_xmit_status_check)(_adapter *padapter);
103658 - void (*sreset_linked_status_check) (_adapter *padapter);
103659 - u8 (*sreset_get_wifi_status)(_adapter *padapter);
103660 -#endif
103661 -
103662 -#ifdef CONFIG_IOL
103663 - int (*IOL_exec_cmds_sync)(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms);
103664 -#endif
103665 -};
103666 -
103667 -typedef enum _RT_EEPROM_TYPE{
103668 - EEPROM_93C46,
103669 - EEPROM_93C56,
103670 - EEPROM_BOOT_EFUSE,
103671 -}RT_EEPROM_TYPE,*PRT_EEPROM_TYPE;
103672 -
103673 -#define USB_HIGH_SPEED_BULK_SIZE 512
103674 -#define USB_FULL_SPEED_BULK_SIZE 64
103675 -
103676 -#define RF_CHANGE_BY_INIT 0
103677 -#define RF_CHANGE_BY_IPS BIT28
103678 -#define RF_CHANGE_BY_PS BIT29
103679 -#define RF_CHANGE_BY_HW BIT30
103680 -#define RF_CHANGE_BY_SW BIT31
103681 -
103682 -typedef enum _HARDWARE_TYPE{
103683 - HARDWARE_TYPE_RTL8180,
103684 - HARDWARE_TYPE_RTL8185,
103685 - HARDWARE_TYPE_RTL8187,
103686 - HARDWARE_TYPE_RTL8188,
103687 - HARDWARE_TYPE_RTL8190P,
103688 - HARDWARE_TYPE_RTL8192E,
103689 - HARDWARE_TYPE_RTL819xU,
103690 - HARDWARE_TYPE_RTL8192SE,
103691 - HARDWARE_TYPE_RTL8192SU,
103692 - HARDWARE_TYPE_RTL8192CE,
103693 - HARDWARE_TYPE_RTL8192CU,
103694 - HARDWARE_TYPE_RTL8192DE,
103695 - HARDWARE_TYPE_RTL8192DU,
103696 - HARDWARE_TYPE_RTL8723E,
103697 - HARDWARE_TYPE_RTL8723U,
103698 -}HARDWARE_TYPE;
103699 -
103700 -#define IS_HARDWARE_TYPE_8192CE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192CE)
103701 -#define IS_HARDWARE_TYPE_8192CU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192CU)
103702 -
103703 -#define IS_HARDWARE_TYPE_8192DE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192DE)
103704 -#define IS_HARDWARE_TYPE_8192DU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192DU)
103705 -
103706 -#define IS_HARDWARE_TYPE_8723E(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723E)
103707 -#define IS_HARDWARE_TYPE_8723U(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723U)
103708 -
103709 -#define IS_HARDWARE_TYPE_8192C(_Adapter) \
103710 -(IS_HARDWARE_TYPE_8192CE(_Adapter) || IS_HARDWARE_TYPE_8192CU(_Adapter))
103711 -
103712 -#define IS_HARDWARE_TYPE_8192D(_Adapter) \
103713 -(IS_HARDWARE_TYPE_8192DE(_Adapter) || IS_HARDWARE_TYPE_8192DU(_Adapter))
103714 -
103715 -#define IS_HARDWARE_TYPE_8723(_Adapter) \
103716 -(IS_HARDWARE_TYPE_8723E(_Adapter) || IS_HARDWARE_TYPE_8723U(_Adapter))
103717 -
103718 -
103719 -typedef struct eeprom_priv EEPROM_EFUSE_PRIV, *PEEPROM_EFUSE_PRIV;
103720 -#define GET_EEPROM_EFUSE_PRIV(priv) (&priv->eeprompriv)
103721 -
103722 -typedef enum _wowlan_subcode{
103723 - WOWLAN_PATTERN_MATCH = 1,
103724 - WOWLAN_MAGIC_PACKET = 2,
103725 - WOWLAN_UNICAST = 3,
103726 - WOWLAN_SET_PATTERN = 4,
103727 - WOWLAN_DUMP_REG = 5,
103728 - WOWLAN_ENABLE = 6,
103729 - WOWLAN_DISABLE = 7,
103730 - WOWLAN_STATUS = 8,
103731 - WOWLAN_DEBUG_RELOAD_FW = 9,
103732 - WOWLAN_DEBUG_1 =10,
103733 - WOWLAN_DEBUG_2 =11
103734 -}wowlan_subcode;
103735 -
103736 -struct wowlan_ioctl_param{
103737 - unsigned int subcode;
103738 - unsigned int subcode_value;
103739 - unsigned int wakeup_reason;
103740 - unsigned int len;
103741 - unsigned char pattern[0];
103742 -};
103743 -void rtw_dm_init(_adapter *padapter);
103744 -void rtw_sw_led_init(_adapter *padapter);
103745 -void rtw_sw_led_deinit(_adapter *padapter);
103746 -
103747 -uint rtw_hal_init(_adapter *padapter);
103748 -uint rtw_hal_deinit(_adapter *padapter);
103749 -void rtw_hal_stop(_adapter *padapter);
103750 -
103751 -void intf_chip_configure(_adapter *padapter);
103752 -void intf_read_chip_info(_adapter *padapter);
103753 -void intf_read_chip_version(_adapter *padapter);
103754 -#ifdef DBG_CONFIG_ERROR_DETECT
103755 -void rtw_sreset_init(_adapter *padapter);
103756 -#endif
103757 -
103758 -#endif //__HAL_INIT_H__
103759 -
103760 diff --git a/drivers/net/wireless/rtl8192cu/include/hal_intf.h b/drivers/net/wireless/rtl8192cu/include/hal_intf.h
103761 new file mode 100644
103762 index 0000000..dd82662
103763 --- /dev/null
103764 +++ b/drivers/net/wireless/rtl8192cu/include/hal_intf.h
103765 @@ -0,0 +1,432 @@
103766 +/******************************************************************************
103767 + *
103768 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
103769 + *
103770 + * This program is free software; you can redistribute it and/or modify it
103771 + * under the terms of version 2 of the GNU General Public License as
103772 + * published by the Free Software Foundation.
103773 + *
103774 + * This program is distributed in the hope that it will be useful, but WITHOUT
103775 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
103776 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
103777 + * more details.
103778 + *
103779 + * You should have received a copy of the GNU General Public License along with
103780 + * this program; if not, write to the Free Software Foundation, Inc.,
103781 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
103782 + *
103783 + *
103784 + ******************************************************************************/
103785 +#ifndef __HAL_INTF_H__
103786 +#define __HAL_INTF_H__
103787 +
103788 +#include <drv_conf.h>
103789 +#include <osdep_service.h>
103790 +#include <drv_types.h>
103791 +
103792 +#ifdef CONFIG_PCI_HCI
103793 +#include <pci_hal.h>
103794 +#endif
103795 +
103796 +
103797 +enum RTL871X_HCI_TYPE {
103798 +
103799 + RTW_SDIO,
103800 + RTW_USB,
103801 + RTW_PCIE
103802 +};
103803 +
103804 +enum _CHIP_TYPE {
103805 +
103806 + NULL_CHIP_TYPE,
103807 + RTL8712_8188S_8191S_8192S,
103808 + RTL8188C_8192C,
103809 + RTL8192D,
103810 + RTL8723A,
103811 + RTL8188E,
103812 + MAX_CHIP_TYPE
103813 +};
103814 +
103815 +
103816 +typedef enum _HW_VARIABLES{
103817 + HW_VAR_MEDIA_STATUS,
103818 + HW_VAR_MEDIA_STATUS1,
103819 + HW_VAR_SET_OPMODE,
103820 + HW_VAR_MAC_ADDR,
103821 + HW_VAR_BSSID,
103822 + HW_VAR_INIT_RTS_RATE,
103823 + HW_VAR_INIT_DATA_RATE,
103824 + HW_VAR_BASIC_RATE,
103825 + HW_VAR_TXPAUSE,
103826 + HW_VAR_BCN_FUNC,
103827 + HW_VAR_CORRECT_TSF,
103828 + HW_VAR_CHECK_BSSID,
103829 + HW_VAR_MLME_DISCONNECT,
103830 + HW_VAR_MLME_SITESURVEY,
103831 + HW_VAR_MLME_JOIN,
103832 + HW_VAR_ON_RCR_AM,
103833 + HW_VAR_OFF_RCR_AM,
103834 + HW_VAR_BEACON_INTERVAL,
103835 + HW_VAR_SLOT_TIME,
103836 + HW_VAR_RESP_SIFS,
103837 + HW_VAR_ACK_PREAMBLE,
103838 + HW_VAR_SEC_CFG,
103839 + HW_VAR_BCN_VALID,
103840 + HW_VAR_RF_TYPE,
103841 + HW_VAR_DM_FLAG,
103842 + HW_VAR_DM_FUNC_OP,
103843 + HW_VAR_DM_FUNC_SET,
103844 + HW_VAR_DM_FUNC_CLR,
103845 + HW_VAR_DM_INIT_PWDB,
103846 + HW_VAR_CAM_EMPTY_ENTRY,
103847 + HW_VAR_CAM_INVALID_ALL,
103848 + HW_VAR_CAM_WRITE,
103849 + HW_VAR_CAM_READ,
103850 + HW_VAR_AC_PARAM_VO,
103851 + HW_VAR_AC_PARAM_VI,
103852 + HW_VAR_AC_PARAM_BE,
103853 + HW_VAR_AC_PARAM_BK,
103854 + HW_VAR_ACM_CTRL,
103855 + HW_VAR_AMPDU_MIN_SPACE,
103856 + HW_VAR_AMPDU_FACTOR,
103857 + HW_VAR_RXDMA_AGG_PG_TH,
103858 + HW_VAR_SET_RPWM,
103859 + HW_VAR_H2C_FW_PWRMODE,
103860 + HW_VAR_H2C_FW_JOINBSSRPT,
103861 + HW_VAR_FWLPS_RF_ON,
103862 + HW_VAR_H2C_FW_P2P_PS_OFFLOAD,
103863 + HW_VAR_TDLS_WRCR,
103864 + HW_VAR_TDLS_INIT_CH_SEN,
103865 + HW_VAR_TDLS_RS_RCR,
103866 + HW_VAR_TDLS_DONE_CH_SEN,
103867 + HW_VAR_INITIAL_GAIN,
103868 + HW_VAR_TRIGGER_GPIO_0,
103869 + HW_VAR_BT_SET_COEXIST,
103870 + HW_VAR_BT_ISSUE_DELBA,
103871 + HW_VAR_CURRENT_ANTENNA,
103872 + HW_VAR_ANTENNA_DIVERSITY_LINK,
103873 + HW_VAR_ANTENNA_DIVERSITY_SELECT,
103874 + HW_VAR_SWITCH_EPHY_WoWLAN,
103875 + HW_VAR_EFUSE_BYTES,
103876 + HW_VAR_FIFO_CLEARN_UP,
103877 + HW_VAR_CHECK_TXBUF,
103878 + HW_VAR_APFM_ON_MAC, //Auto FSM to Turn On, include clock, isolation, power control for MAC only
103879 + HW_VAR_WOWLAN,
103880 + HW_VAR_VID,
103881 + HW_VAR_PID,
103882 + HW_VAR_MBSSID_CAM_WRITE,
103883 + HW_VAR_MBSSID_CAM_CLEAR,
103884 + HW_VAR_RCR_MBSSID_EN,
103885 + HW_VAR_USB_RXAGG_PAGE_TO,
103886 +}HW_VARIABLES;
103887 +
103888 +typedef enum _HAL_DEF_VARIABLE{
103889 + HAL_DEF_UNDERCORATEDSMOOTHEDPWDB,
103890 + HAL_DEF_IS_SUPPORT_ANT_DIV,
103891 + HAL_DEF_CURRENT_ANTENNA,
103892 + HAL_DEF_DRVINFO_SZ,
103893 + HAL_DEF_MAX_RECVBUF_SZ,
103894 + HAL_DEF_RX_PACKET_OFFSET,
103895 + HAL_DEF_DBG_DUMP_RXPKT,//for dbg
103896 + HAL_DEF_DBG_DM_FUNC,//for dbg
103897 + HAL_DEF_DUAL_MAC_MODE,
103898 +}HAL_DEF_VARIABLE;
103899 +
103900 +typedef enum _HAL_INTF_PS_FUNC{
103901 + HAL_USB_SELECT_SUSPEND,
103902 + HAL_MAX_ID,
103903 +}HAL_INTF_PS_FUNC;
103904 +
103905 +typedef s32 (*c2h_id_filter)(u8 id);
103906 +
103907 +struct hal_ops {
103908 + u32 (*hal_init)(PADAPTER Adapter);
103909 + u32 (*hal_deinit)(PADAPTER Adapter);
103910 +
103911 + void (*free_hal_data)(PADAPTER Adapter);
103912 +
103913 + u32 (*inirp_init)(PADAPTER Adapter);
103914 + u32 (*inirp_deinit)(PADAPTER Adapter);
103915 +
103916 + s32 (*init_xmit_priv)(PADAPTER Adapter);
103917 + void (*free_xmit_priv)(PADAPTER Adapter);
103918 +
103919 + s32 (*init_recv_priv)(PADAPTER Adapter);
103920 + void (*free_recv_priv)(PADAPTER Adapter);
103921 +
103922 + void (*InitSwLeds)(PADAPTER Adapter);
103923 + void (*DeInitSwLeds)(PADAPTER Adapter);
103924 +
103925 + void (*dm_init)(PADAPTER Adapter);
103926 + void (*dm_deinit)(PADAPTER Adapter);
103927 + void (*read_chip_version)(PADAPTER Adapter);
103928 +
103929 + void (*init_default_value)(PADAPTER Adapter);
103930 +
103931 + void (*intf_chip_configure)(PADAPTER Adapter);
103932 +
103933 + void (*read_adapter_info)(PADAPTER Adapter);
103934 +
103935 + void (*enable_interrupt)(PADAPTER Adapter);
103936 + void (*disable_interrupt)(PADAPTER Adapter);
103937 + s32 (*interrupt_handler)(PADAPTER Adapter);
103938 +
103939 + void (*set_bwmode_handler)(PADAPTER Adapter, HT_CHANNEL_WIDTH Bandwidth, u8 Offset);
103940 + void (*set_channel_handler)(PADAPTER Adapter, u8 channel);
103941 +
103942 + void (*hal_dm_watchdog)(PADAPTER Adapter);
103943 +
103944 + void (*SetHwRegHandler)(PADAPTER Adapter, u8 variable,u8* val);
103945 + void (*GetHwRegHandler)(PADAPTER Adapter, u8 variable,u8* val);
103946 +
103947 + u8 (*GetHalDefVarHandler)(PADAPTER Adapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
103948 + u8 (*SetHalDefVarHandler)(PADAPTER Adapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
103949 +
103950 + void (*UpdateRAMaskHandler)(PADAPTER Adapter, u32 mac_id);
103951 + void (*SetBeaconRelatedRegistersHandler)(PADAPTER Adapter);
103952 +
103953 + void (*Add_RateATid)(PADAPTER Adapter, u32 bitmap, u8 arg);
103954 +
103955 +#ifdef CONFIG_ANTENNA_DIVERSITY
103956 + u8 (*AntDivBeforeLinkHandler)(PADAPTER Adapter);
103957 + void (*AntDivCompareHandler)(PADAPTER Adapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
103958 +#endif
103959 + u8 (*interface_ps_func)(PADAPTER Adapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
103960 +
103961 + s32 (*hal_xmit)(PADAPTER Adapter, struct xmit_frame *pxmitframe);
103962 + s32 (*mgnt_xmit)(PADAPTER Adapter, struct xmit_frame *pmgntframe);
103963 + s32 (*hal_xmitframe_enqueue)(_adapter *padapter, struct xmit_frame *pxmitframe);
103964 +
103965 + u32 (*read_bbreg)(PADAPTER Adapter, u32 RegAddr, u32 BitMask);
103966 + void (*write_bbreg)(PADAPTER Adapter, u32 RegAddr, u32 BitMask, u32 Data);
103967 + u32 (*read_rfreg)(PADAPTER Adapter, u32 eRFPath, u32 RegAddr, u32 BitMask);
103968 + void (*write_rfreg)(PADAPTER Adapter, u32 eRFPath, u32 RegAddr, u32 BitMask, u32 Data);
103969 +
103970 +#ifdef CONFIG_HOSTAPD_MLME
103971 + s32 (*hostap_mgnt_xmit_entry)(PADAPTER Adapter, _pkt *pkt);
103972 +#endif
103973 + void (*EfusePowerSwitch)(PADAPTER pAdapter, u8 bWrite, u8 PwrState);
103974 + void (*ReadEFuse)(PADAPTER Adapter, u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf, BOOLEAN bPseudoTest);
103975 + void (*EFUSEGetEfuseDefinition)(PADAPTER pAdapter, u8 efuseType, u8 type, PVOID *pOut, BOOLEAN bPseudoTest);
103976 + u16 (*EfuseGetCurrentSize)(PADAPTER pAdapter, u8 efuseType, BOOLEAN bPseudoTest);
103977 + int (*Efuse_PgPacketRead)(PADAPTER pAdapter, u8 offset, u8 *data, BOOLEAN bPseudoTest);
103978 + int (*Efuse_PgPacketWrite)(PADAPTER pAdapter, u8 offset, u8 word_en, u8 *data, BOOLEAN bPseudoTest);
103979 + u8 (*Efuse_WordEnableDataWrite)(PADAPTER pAdapter, u16 efuse_addr, u8 word_en, u8 *data, BOOLEAN bPseudoTest);
103980 +
103981 +#ifdef DBG_CONFIG_ERROR_DETECT
103982 + void (*sreset_init_value)(_adapter *padapter);
103983 + void (*sreset_reset_value)(_adapter *padapter);
103984 + void (*silentreset)(_adapter *padapter);
103985 + void (*sreset_xmit_status_check)(_adapter *padapter);
103986 + void (*sreset_linked_status_check) (_adapter *padapter);
103987 + u8 (*sreset_get_wifi_status)(_adapter *padapter);
103988 + bool (*sreset_inprogress)(_adapter *padapter);
103989 +#endif
103990 +
103991 +#ifdef CONFIG_IOL
103992 + int (*IOL_exec_cmds_sync)(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms);
103993 +#endif
103994 + void (*hal_notch_filter)(_adapter * adapter, bool enable);
103995 + void (*hal_reset_security_engine)(_adapter * adapter);
103996 +
103997 + s32 (*c2h_handler)(_adapter *padapter, struct c2h_evt_hdr *c2h_evt);
103998 + c2h_id_filter c2h_id_filter_ccx;
103999 +};
104000 +
104001 +typedef enum _RT_EEPROM_TYPE{
104002 + EEPROM_93C46,
104003 + EEPROM_93C56,
104004 + EEPROM_BOOT_EFUSE,
104005 +}RT_EEPROM_TYPE,*PRT_EEPROM_TYPE;
104006 +
104007 +#define USB_HIGH_SPEED_BULK_SIZE 512
104008 +#define USB_FULL_SPEED_BULK_SIZE 64
104009 +
104010 +#define RF_CHANGE_BY_INIT 0
104011 +#define RF_CHANGE_BY_IPS BIT28
104012 +#define RF_CHANGE_BY_PS BIT29
104013 +#define RF_CHANGE_BY_HW BIT30
104014 +#define RF_CHANGE_BY_SW BIT31
104015 +
104016 +typedef enum _HARDWARE_TYPE{
104017 + HARDWARE_TYPE_RTL8180,
104018 + HARDWARE_TYPE_RTL8185,
104019 + HARDWARE_TYPE_RTL8187,
104020 + HARDWARE_TYPE_RTL8188,
104021 + HARDWARE_TYPE_RTL8190P,
104022 + HARDWARE_TYPE_RTL8192E,
104023 + HARDWARE_TYPE_RTL819xU,
104024 + HARDWARE_TYPE_RTL8192SE,
104025 + HARDWARE_TYPE_RTL8192SU,
104026 + HARDWARE_TYPE_RTL8192CE,
104027 + HARDWARE_TYPE_RTL8192CU,
104028 + HARDWARE_TYPE_RTL8192DE,
104029 + HARDWARE_TYPE_RTL8192DU,
104030 + HARDWARE_TYPE_RTL8723AE,
104031 + HARDWARE_TYPE_RTL8723AU,
104032 + HARDWARE_TYPE_RTL8723AS,
104033 + HARDWARE_TYPE_RTL8188EE,
104034 + HARDWARE_TYPE_RTL8188EU,
104035 + HARDWARE_TYPE_RTL8188ES,
104036 + HARDWARE_TYPE_MAX,
104037 +}HARDWARE_TYPE;
104038 +
104039 +//
104040 +// RTL8192C Series
104041 +//
104042 +#define IS_HARDWARE_TYPE_8192CE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192CE)
104043 +#define IS_HARDWARE_TYPE_8192CU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192CU)
104044 +#define IS_HARDWARE_TYPE_8192C(_Adapter) \
104045 +(IS_HARDWARE_TYPE_8192CE(_Adapter) || IS_HARDWARE_TYPE_8192CU(_Adapter))
104046 +
104047 +//
104048 +// RTL8192D Series
104049 +//
104050 +#define IS_HARDWARE_TYPE_8192DE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192DE)
104051 +#define IS_HARDWARE_TYPE_8192DU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192DU)
104052 +#define IS_HARDWARE_TYPE_8192D(_Adapter) \
104053 +(IS_HARDWARE_TYPE_8192DE(_Adapter) || IS_HARDWARE_TYPE_8192DU(_Adapter))
104054 +
104055 +//
104056 +// RTL8723A Series
104057 +//
104058 +#define IS_HARDWARE_TYPE_8723AE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723AE)
104059 +#define IS_HARDWARE_TYPE_8723AU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723AU)
104060 +#define IS_HARDWARE_TYPE_8723AS(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723AS)
104061 +#define IS_HARDWARE_TYPE_8723A(_Adapter) \
104062 +(IS_HARDWARE_TYPE_8723AE(_Adapter) || IS_HARDWARE_TYPE_8723AU(_Adapter) || IS_HARDWARE_TYPE_8723AS(_Adapter))
104063 +
104064 +//
104065 +// RTL8188E Series
104066 +//
104067 +#define IS_HARDWARE_TYPE_8188EE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188EE)
104068 +#define IS_HARDWARE_TYPE_8188EU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188EU)
104069 +#define IS_HARDWARE_TYPE_8188ES(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188ES)
104070 +#define IS_HARDWARE_TYPE_8188E(_Adapter) \
104071 +(IS_HARDWARE_TYPE_8188EE(_Adapter) || IS_HARDWARE_TYPE_8188EU(_Adapter) || IS_HARDWARE_TYPE_8188ES(_Adapter))
104072 +
104073 +
104074 +typedef struct eeprom_priv EEPROM_EFUSE_PRIV, *PEEPROM_EFUSE_PRIV;
104075 +#define GET_EEPROM_EFUSE_PRIV(priv) (&priv->eeprompriv)
104076 +
104077 +#ifdef CONFIG_WOWLAN
104078 +typedef enum _wowlan_subcode{
104079 + WOWLAN_PATTERN_MATCH = 1,
104080 + WOWLAN_MAGIC_PACKET = 2,
104081 + WOWLAN_UNICAST = 3,
104082 + WOWLAN_SET_PATTERN = 4,
104083 + WOWLAN_DUMP_REG = 5,
104084 + WOWLAN_ENABLE = 6,
104085 + WOWLAN_DISABLE = 7,
104086 + WOWLAN_STATUS = 8,
104087 + WOWLAN_DEBUG_RELOAD_FW = 9,
104088 + WOWLAN_DEBUG_1 =10,
104089 + WOWLAN_DEBUG_2 =11
104090 +}wowlan_subcode;
104091 +
104092 +struct wowlan_ioctl_param{
104093 + unsigned int subcode;
104094 + unsigned int subcode_value;
104095 + unsigned int wakeup_reason;
104096 + unsigned int len;
104097 + unsigned char pattern[0];
104098 +};
104099 +
104100 +#define Rx_Pairwisekey BIT(0)
104101 +#define Rx_GTK BIT(1)
104102 +#define Rx_DisAssoc BIT(2)
104103 +#define Rx_DeAuth BIT(3)
104104 +#define FWDecisionDisconnect BIT(4)
104105 +#define Rx_MagicPkt BIT(5)
104106 +#define FinishBtFwPatch BIT(7)
104107 +
104108 +#endif // CONFIG_WOWLAN
104109 +
104110 +void rtw_hal_def_value_init(_adapter *padapter);
104111 +void rtw_hal_free_data(_adapter *padapter);
104112 +
104113 +void rtw_hal_dm_init(_adapter *padapter);
104114 +void rtw_hal_dm_deinit(_adapter *padapter);
104115 +void rtw_hal_sw_led_init(_adapter *padapter);
104116 +void rtw_hal_sw_led_deinit(_adapter *padapter);
104117 +
104118 +uint rtw_hal_init(_adapter *padapter);
104119 +uint rtw_hal_deinit(_adapter *padapter);
104120 +void rtw_hal_stop(_adapter *padapter);
104121 +
104122 +void rtw_hal_set_hwreg(PADAPTER padapter, u8 variable, u8 *val);
104123 +void rtw_hal_get_hwreg(PADAPTER padapter, u8 variable, u8 *val);
104124 +
104125 +void rtw_hal_chip_configure(_adapter *padapter);
104126 +void rtw_hal_read_chip_info(_adapter *padapter);
104127 +void rtw_hal_read_chip_version(_adapter *padapter);
104128 +
104129 +u8 rtw_hal_set_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
104130 +u8 rtw_hal_get_def_var(_adapter *padapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);
104131 +
104132 +void rtw_hal_enable_interrupt(_adapter *padapter);
104133 +void rtw_hal_disable_interrupt(_adapter *padapter);
104134 +
104135 +u32 rtw_hal_inirp_init(_adapter *padapter);
104136 +u32 rtw_hal_inirp_deinit(_adapter *padapter);
104137 +
104138 +u8 rtw_hal_intf_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id, u8* val);
104139 +
104140 +s32 rtw_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
104141 +s32 rtw_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe);
104142 +s32 rtw_hal_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
104143 +
104144 +s32 rtw_hal_init_xmit_priv(_adapter *padapter);
104145 +void rtw_hal_free_xmit_priv(_adapter *padapter);
104146 +
104147 +s32 rtw_hal_init_recv_priv(_adapter *padapter);
104148 +void rtw_hal_free_recv_priv(_adapter *padapter);
104149 +
104150 +void rtw_hal_update_ra_mask(_adapter *padapter, u32 mac_id);
104151 +void rtw_hal_add_ra_tid(_adapter *padapter, u32 bitmap, u8 arg);
104152 +
104153 +void rtw_hal_bcn_related_reg_setting(_adapter *padapter);
104154 +
104155 +u32 rtw_hal_read_bbreg(_adapter *padapter, u32 RegAddr, u32 BitMask);
104156 +void rtw_hal_write_bbreg(_adapter *padapter, u32 RegAddr, u32 BitMask, u32 Data);
104157 +u32 rtw_hal_read_rfreg(_adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask);
104158 +void rtw_hal_write_rfreg(_adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask, u32 Data);
104159 +
104160 +s32 rtw_hal_interrupt_handler(_adapter *padapter);
104161 +
104162 +void rtw_hal_set_bwmode(_adapter *padapter, HT_CHANNEL_WIDTH Bandwidth, u8 Offset);
104163 +void rtw_hal_set_chan(_adapter *padapter, u8 channel);
104164 +
104165 +void rtw_hal_dm_watchdog(_adapter *padapter);
104166 +
104167 +#ifdef CONFIG_ANTENNA_DIVERSITY
104168 +u8 rtw_hal_antdiv_before_linked(_adapter *padapter);
104169 +void rtw_hal_antdiv_rssi_compared(_adapter *padapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src);
104170 +#endif
104171 +
104172 +#ifdef CONFIG_HOSTAPD_MLME
104173 +s32 rtw_hal_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt);
104174 +#endif
104175 +
104176 +#ifdef DBG_CONFIG_ERROR_DETECT
104177 +void rtw_hal_sreset_init(_adapter *padapter);
104178 +void rtw_hal_sreset_reset(_adapter *padapter);
104179 +void rtw_hal_sreset_reset_value(_adapter *padapter);
104180 +void rtw_hal_sreset_xmit_status_check(_adapter *padapter);
104181 +void rtw_hal_sreset_linked_status_check(_adapter *padapter);
104182 +u8 rtw_hal_sreset_get_wifi_status(_adapter *padapter);
104183 +bool rtw_hal_sreset_inprogress(_adapter *padapter);
104184 +#endif
104185 +
104186 +#ifdef CONFIG_IOL
104187 +int rtw_hal_iol_cmd(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms);
104188 +#endif
104189 +
104190 +void rtw_hal_notch_filter(_adapter * adapter, bool enable);
104191 +void rtw_hal_reset_security_engine(_adapter * adapter);
104192 +
104193 +s32 rtw_hal_c2h_handler(_adapter *adapter, struct c2h_evt_hdr *c2h_evt);
104194 +c2h_id_filter rtw_hal_c2h_id_filter_ccx(_adapter *adapter);
104195 +
104196 +#endif //__HAL_INTF_H__
104197 +
104198 diff --git a/drivers/net/wireless/rtl8192cu/include/ieee80211.h b/drivers/net/wireless/rtl8192cu/include/ieee80211.h
104199 index 5c17a28..e283a5f 100644
104200 --- a/drivers/net/wireless/rtl8192cu/include/ieee80211.h
104201 +++ b/drivers/net/wireless/rtl8192cu/include/ieee80211.h
104202 @@ -43,6 +43,8 @@
104203 #define MGMT_QUEUE_NUM 5
104204
104205 #define ETH_ALEN 6
104206 +#define ETH_TYPE_LEN 2
104207 +#define PAYLOAD_TYPE_LEN 1
104208
104209 #ifdef CONFIG_AP_MODE
104210
104211 @@ -71,6 +73,9 @@ enum {
104212 RTL871X_HOSTAPD_SET_WPS_PROBE_RESP = 18,
104213 RTL871X_HOSTAPD_SET_WPS_ASSOC_RESP = 19,
104214 RTL871X_HOSTAPD_SET_HIDDEN_SSID = 20,
104215 + RTL871X_HOSTAPD_SET_MACADDR_ACL = 21,
104216 + RTL871X_HOSTAPD_ACL_ADD_STA = 22,
104217 + RTL871X_HOSTAPD_ACL_REMOVE_STA = 23,
104218 };
104219
104220 /* STA flags */
104221 @@ -131,31 +136,43 @@ enum {
104222
104223
104224 #define WPA_SELECTOR_LEN 4
104225 -static u8 WPA_OUI_TYPE[] = { 0x00, 0x50, 0xf2, 1 };
104226 -static u16 WPA_VERSION = 1;
104227 -static u8 WPA_AUTH_KEY_MGMT_NONE[] = { 0x00, 0x50, 0xf2, 0 };
104228 -static u8 WPA_AUTH_KEY_MGMT_UNSPEC_802_1X[] = { 0x00, 0x50, 0xf2, 1 };
104229 -static u8 WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X[] = { 0x00, 0x50, 0xf2, 2 };
104230 -static u8 WPA_CIPHER_SUITE_NONE[] = { 0x00, 0x50, 0xf2, 0 };
104231 -static u8 WPA_CIPHER_SUITE_WEP40[] = { 0x00, 0x50, 0xf2, 1 };
104232 -static u8 WPA_CIPHER_SUITE_TKIP[] = { 0x00, 0x50, 0xf2, 2 };
104233 -//static u8 WPA_CIPHER_SUITE_WRAP[] = { 0x00, 0x50, 0xf2, 3 };
104234 -static u8 WPA_CIPHER_SUITE_CCMP[] = { 0x00, 0x50, 0xf2, 4 };
104235 -static u8 WPA_CIPHER_SUITE_WEP104[] = { 0x00, 0x50, 0xf2, 5 };
104236 +extern u8 RTW_WPA_OUI_TYPE[] ;
104237 +extern u16 RTW_WPA_VERSION ;
104238 +extern u8 WPA_AUTH_KEY_MGMT_NONE[];
104239 +extern u8 WPA_AUTH_KEY_MGMT_UNSPEC_802_1X[];
104240 +extern u8 WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X[];
104241 +extern u8 WPA_CIPHER_SUITE_NONE[];
104242 +extern u8 WPA_CIPHER_SUITE_WEP40[];
104243 +extern u8 WPA_CIPHER_SUITE_TKIP[];
104244 +extern u8 WPA_CIPHER_SUITE_WRAP[];
104245 +extern u8 WPA_CIPHER_SUITE_CCMP[];
104246 +extern u8 WPA_CIPHER_SUITE_WEP104[];
104247
104248
104249 #define RSN_HEADER_LEN 4
104250 #define RSN_SELECTOR_LEN 4
104251 -static u16 RSN_VERSION = 1;
104252 -static u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X[] = { 0x00, 0x0f, 0xac, 1 };
104253 -static u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X[] = { 0x00, 0x0f, 0xac, 2 };
104254 -static u8 RSN_CIPHER_SUITE_NONE[] = { 0x00, 0x0f, 0xac, 0 };
104255 -static u8 RSN_CIPHER_SUITE_WEP40[] = { 0x00, 0x0f, 0xac, 1 };
104256 -static u8 RSN_CIPHER_SUITE_TKIP[] = { 0x00, 0x0f, 0xac, 2 };
104257 -//static u8 RSN_CIPHER_SUITE_WRAP[] = { 0x00, 0x0f, 0xac, 3 };
104258 -static u8 RSN_CIPHER_SUITE_CCMP[] = { 0x00, 0x0f, 0xac, 4 };
104259 -static u8 RSN_CIPHER_SUITE_WEP104[] = { 0x00, 0x0f, 0xac, 5 };
104260
104261 +extern u16 RSN_VERSION_BSD;
104262 +extern u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X[];
104263 +extern u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X[];
104264 +extern u8 RSN_CIPHER_SUITE_NONE[];
104265 +extern u8 RSN_CIPHER_SUITE_WEP40[];
104266 +extern u8 RSN_CIPHER_SUITE_TKIP[];
104267 +extern u8 RSN_CIPHER_SUITE_WRAP[];
104268 +extern u8 RSN_CIPHER_SUITE_CCMP[];
104269 +extern u8 RSN_CIPHER_SUITE_WEP104[];
104270 +
104271 +typedef enum _RATR_TABLE_MODE{
104272 + RATR_INX_WIRELESS_NGB = 0, // BGN 40 Mhz 2SS 1SS
104273 + RATR_INX_WIRELESS_NG = 1, // GN or N
104274 + RATR_INX_WIRELESS_NB = 2, // BGN 20 Mhz 2SS 1SS or BN
104275 + RATR_INX_WIRELESS_N = 3,
104276 + RATR_INX_WIRELESS_GB = 4,
104277 + RATR_INX_WIRELESS_G = 5,
104278 + RATR_INX_WIRELESS_B = 6,
104279 + RATR_INX_WIRELESS_MC = 7,
104280 + RATR_INX_WIRELESS_AC_N = 8,
104281 +}RATR_TABLE_MODE, *PRATR_TABLE_MODE;
104282
104283 enum NETWORK_TYPE
104284 {
104285 @@ -166,12 +183,15 @@ enum NETWORK_TYPE
104286 WIRELESS_11A = BIT(2), // tx: ofdm only, rx: ofdm only, hw: ofdm only
104287 WIRELESS_11_24N = BIT(3), // tx: MCS only, rx: MCS & cck, hw: MCS & cck
104288 WIRELESS_11_5N = BIT(4), // tx: MCS only, rx: MCS & ofdm, hw: ofdm only
104289 + //WIRELESS_AUTO = BIT(5),
104290 + WIRELESS_AC = BIT(6),
104291
104292 //Combination
104293 WIRELESS_11BG = (WIRELESS_11B|WIRELESS_11G), // tx: cck & ofdm, rx: cck & ofdm & MCS, hw: cck & ofdm
104294 WIRELESS_11G_24N = (WIRELESS_11G|WIRELESS_11_24N), // tx: ofdm & MCS, rx: ofdm & cck & MCS, hw: cck & ofdm
104295 WIRELESS_11A_5N = (WIRELESS_11A|WIRELESS_11_5N), // tx: ofdm & MCS, rx: ofdm & MCS, hw: ofdm only
104296 WIRELESS_11BG_24N = (WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N), // tx: ofdm & cck & MCS, rx: ofdm & cck & MCS, hw: ofdm & cck
104297 + WIRELESS_11AGN = (WIRELESS_11A|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11_5N), // tx: ofdm & MCS, rx: ofdm & MCS, hw: ofdm only
104298 WIRELESS_11ABGN = (WIRELESS_11A|WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N|WIRELESS_11_5N),
104299 };
104300
104301 @@ -196,7 +216,7 @@ enum NETWORK_TYPE
104302 typedef struct ieee_param {
104303 u32 cmd;
104304 u8 sta_addr[ETH_ALEN];
104305 - union {
104306 + union {
104307 struct {
104308 u8 name;
104309 u32 value;
104310 @@ -236,6 +256,30 @@ typedef struct ieee_param {
104311 } u;
104312 }ieee_param;
104313
104314 +#ifdef CONFIG_AP_MODE
104315 +typedef struct ieee_param_ex {
104316 + u32 cmd;
104317 + u8 sta_addr[ETH_ALEN];
104318 + u8 data[0];
104319 +}ieee_param_ex;
104320 +
104321 +struct sta_data{
104322 + u16 aid;
104323 + u16 capability;
104324 + int flags;
104325 + u32 sta_set;
104326 + u8 tx_supp_rates[16];
104327 + u32 tx_supp_rates_len;
104328 + struct rtw_ieee80211_ht_cap ht_cap;
104329 + u64 rx_pkts;
104330 + u64 rx_bytes;
104331 + u64 rx_drops;
104332 + u64 tx_pkts;
104333 + u64 tx_bytes;
104334 + u64 tx_drops;
104335 +};
104336 +#endif
104337 +
104338
104339 #if WIRELESS_EXT < 17
104340 #define IW_QUAL_QUAL_INVALID 0x10
104341 @@ -271,7 +315,7 @@ struct ieee_ibss_seq {
104342 _list list;
104343 };
104344
104345 -#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW)
104346 +#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW)||defined(PLATFORM_FREEBSD)
104347
104348 struct rtw_ieee80211_hdr {
104349 u16 frame_ctl;
104350 @@ -304,7 +348,7 @@ struct rtw_ieee80211_hdr_qos {
104351 u16 qc;
104352 } __attribute__ ((packed));
104353
104354 -struct rtw_ieee80211_hdr_3addr_qos {
104355 +struct rtw_ieee80211_hdr_3addr_qos {
104356 u16 frame_ctl;
104357 u16 duration_id;
104358 u8 addr1[ETH_ALEN];
104359 @@ -350,11 +394,11 @@ struct rtw_ieee80211_hdr_3addr {
104360
104361
104362 struct rtw_ieee80211_hdr_qos {
104363 - struct rtw_ieee80211_hdr wlan_hdr;
104364 + struct rtw_ieee80211_hdr wlan_hdr;
104365 u16 qc;
104366 };
104367
104368 -struct rtw_ieee80211_hdr_3addr_qos {
104369 +struct rtw_ieee80211_hdr_3addr_qos {
104370 struct rtw_ieee80211_hdr_3addr wlan_hdr;
104371 u16 qc;
104372 };
104373 @@ -388,21 +432,23 @@ enum eap_type {
104374 #define MAX_FRAG_THRESHOLD 2346U
104375
104376 /* Frame control field constants */
104377 -#define RTW_IEEE80211_FCTL_VERS 0x0002
104378 +#define RTW_IEEE80211_FCTL_VERS 0x0003
104379 #define RTW_IEEE80211_FCTL_FTYPE 0x000c
104380 #define RTW_IEEE80211_FCTL_STYPE 0x00f0
104381 #define RTW_IEEE80211_FCTL_TODS 0x0100
104382 -#define RTW_IEEE80211_FCTL_FROMDS 0x0200
104383 +#define RTW_IEEE80211_FCTL_FROMDS 0x0200
104384 #define RTW_IEEE80211_FCTL_MOREFRAGS 0x0400
104385 #define RTW_IEEE80211_FCTL_RETRY 0x0800
104386 #define RTW_IEEE80211_FCTL_PM 0x1000
104387 #define RTW_IEEE80211_FCTL_MOREDATA 0x2000
104388 -#define RTW_IEEE80211_FCTL_WEP 0x4000
104389 +#define RTW_IEEE80211_FCTL_PROTECTED 0x4000
104390 #define RTW_IEEE80211_FCTL_ORDER 0x8000
104391 +#define RTW_IEEE80211_FCTL_CTL_EXT 0x0f00
104392
104393 #define RTW_IEEE80211_FTYPE_MGMT 0x0000
104394 #define RTW_IEEE80211_FTYPE_CTL 0x0004
104395 #define RTW_IEEE80211_FTYPE_DATA 0x0008
104396 +#define RTW_IEEE80211_FTYPE_EXT 0x000c
104397
104398 /* management */
104399 #define RTW_IEEE80211_STYPE_ASSOC_REQ 0x0000
104400 @@ -416,14 +462,18 @@ enum eap_type {
104401 #define RTW_IEEE80211_STYPE_DISASSOC 0x00A0
104402 #define RTW_IEEE80211_STYPE_AUTH 0x00B0
104403 #define RTW_IEEE80211_STYPE_DEAUTH 0x00C0
104404 +#define RTW_IEEE80211_STYPE_ACTION 0x00D0
104405
104406 /* control */
104407 +#define RTW_IEEE80211_STYPE_CTL_EXT 0x0060
104408 +#define RTW_IEEE80211_STYPE_BACK_REQ 0x0080
104409 +#define RTW_IEEE80211_STYPE_BACK 0x0090
104410 #define RTW_IEEE80211_STYPE_PSPOLL 0x00A0
104411 #define RTW_IEEE80211_STYPE_RTS 0x00B0
104412 #define RTW_IEEE80211_STYPE_CTS 0x00C0
104413 #define RTW_IEEE80211_STYPE_ACK 0x00D0
104414 #define RTW_IEEE80211_STYPE_CFEND 0x00E0
104415 -#define RTW_IEEE80211_STYPE_CFENDACK 0x00F0
104416 +#define RTW_IEEE80211_STYPE_CFENDACK 0x00F0
104417
104418 /* data */
104419 #define RTW_IEEE80211_STYPE_DATA 0x0000
104420 @@ -434,11 +484,23 @@ enum eap_type {
104421 #define RTW_IEEE80211_STYPE_CFACK 0x0050
104422 #define RTW_IEEE80211_STYPE_CFPOLL 0x0060
104423 #define RTW_IEEE80211_STYPE_CFACKPOLL 0x0070
104424 -#define RTW_IEEE80211_QOS_DATAGRP 0x0080
104425 -#define RTW_IEEE80211_QoS_DATAGRP RTW_IEEE80211_QOS_DATAGRP
104426 +#define RTW_IEEE80211_STYPE_QOS_DATA 0x0080
104427 +#define RTW_IEEE80211_STYPE_QOS_DATA_CFACK 0x0090
104428 +#define RTW_IEEE80211_STYPE_QOS_DATA_CFPOLL 0x00A0
104429 +#define RTW_IEEE80211_STYPE_QOS_DATA_CFACKPOLL 0x00B0
104430 +#define RTW_IEEE80211_STYPE_QOS_NULLFUNC 0x00C0
104431 +#define RTW_IEEE80211_STYPE_QOS_CFACK 0x00D0
104432 +#define RTW_IEEE80211_STYPE_QOS_CFPOLL 0x00E0
104433 +#define RTW_IEEE80211_STYPE_QOS_CFACKPOLL 0x00F0
104434 +
104435 +/* sequence control field */
104436 +#define RTW_IEEE80211_SCTL_FRAG 0x000F
104437 +#define RTW_IEEE80211_SCTL_SEQ 0xFFF0
104438
104439 -#define RTW_IEEE80211_SCTL_FRAG 0x000F
104440 -#define RTW_IEEE80211_SCTL_SEQ 0xFFF0
104441 +
104442 +#define RTW_ERP_INFO_NON_ERP_PRESENT BIT(0)
104443 +#define RTW_ERP_INFO_USE_PROTECTION BIT(1)
104444 +#define RTW_ERP_INFO_BARKER_PREAMBLE_MODE BIT(2)
104445
104446 /* QoS,QOS */
104447 #define NORMAL_ACK 0
104448 @@ -462,7 +524,7 @@ enum eap_type {
104449
104450 #define P80211_OUI_LEN 3
104451
104452 -#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW)
104453 +#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW) || defined(PLATFORM_FREEBSD)
104454
104455 struct ieee80211_snap_hdr {
104456
104457 @@ -545,6 +607,7 @@ struct ieee80211_snap_hdr {
104458 #define WLAN_REASON_DISASSOC_STA_HAS_LEFT 8
104459 #define WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH 9
104460 #define WLAN_REASON_JOIN_WRONG_CHANNEL 65534
104461 +#define WLAN_REASON_EXPIRATION_CHK 65535
104462
104463 /* Information Element IDs */
104464 #define WLAN_EID_SSID 0
104465 @@ -694,6 +757,7 @@ struct ieee80211_frag_entry {
104466 u8 dst_addr[ETH_ALEN];
104467 };
104468
104469 +#ifndef PLATFORM_FREEBSD //Baron BSD has already defined
104470 struct ieee80211_stats {
104471 uint tx_unicast_frames;
104472 uint tx_multicast_frames;
104473 @@ -717,7 +781,7 @@ struct ieee80211_stats {
104474 uint rx_message_in_msg_fragments;
104475 uint rx_message_in_bad_msg_fragments;
104476 };
104477 -
104478 +#endif //PLATFORM_FREEBSD
104479 struct ieee80211_softmac_stats{
104480 uint rx_ass_ok;
104481 uint rx_ass_err;
104482 @@ -757,7 +821,10 @@ struct ieee80211_softmac_stats{
104483 #define WEP_KEYS 4
104484 #define WEP_KEY_LEN 13
104485
104486 -
104487 +#ifdef CONFIG_IEEE80211W
104488 +#define BIP_MAX_KEYID 5
104489 +#define BIP_AAD_SIZE 20
104490 +#endif //CONFIG_IEEE80211W
104491
104492 #if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW)
104493
104494 @@ -847,52 +914,6 @@ struct ieee80211_info_element {
104495 } __attribute__ ((packed));
104496 #endif
104497
104498 -#ifdef CONFIG_TDLS
104499 -/* TDLS */
104500 -#define TDLS_MIC_LEN 16
104501 -#define WPA_NONCE_LEN 32
104502 -#define TDLS_TIMEOUT_LEN 4
104503 -
104504 -struct wpa_tdls_ftie {
104505 - u8 ie_type; /* FTIE */
104506 - u8 ie_len;
104507 - u8 mic_ctrl[2];
104508 - u8 mic[TDLS_MIC_LEN];
104509 - u8 Anonce[WPA_NONCE_LEN]; /* Responder Nonce in TDLS */
104510 - u8 Snonce[WPA_NONCE_LEN]; /* Initiator Nonce in TDLS */
104511 - /* followed by optional elements */
104512 -} ;
104513 -
104514 -struct wpa_tdls_timeoutie {
104515 - u8 ie_type; /* Timeout IE */
104516 - u8 ie_len;
104517 - u8 interval_type;
104518 - u8 value[TDLS_TIMEOUT_LEN];
104519 -} ;
104520 -
104521 -struct wpa_tdls_lnkid {
104522 - u8 ie_type; /* Link Identifier IE */
104523 - u8 ie_len;
104524 - u8 bssid[ETH_ALEN];
104525 - u8 init_sta[ETH_ALEN];
104526 - u8 resp_sta[ETH_ALEN];
104527 -} ;
104528 -
104529 -static u8 TDLS_RSNIE[]={ 0x01, 0x00, //version shall be set to 1
104530 - 0x00, 0x0f, 0xac, 0x07, //group sipher suite
104531 - 0x01, 0x00, //pairwise cipher suite count
104532 - 0x00, 0x0f, 0xac, 0x04, //pairwise cipher suite list; CCMP only
104533 - 0x01, 0x00, //AKM suite count
104534 - 0x00, 0x0f, 0xac, 0x07, //TPK Handshake
104535 - 0x00, 0x02,
104536 - //PMKID shall not be present
104537 - };
104538 -
104539 -static u8 TDLS_WMMIE[]={0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; //Qos info all set zero
104540 -
104541 -static u8 TDLS_EXT_CAPIE[] = {0x00, 0x00, 0x00, 0x50, 0x20}; //bit(28), bit(30), bit(37)
104542 -#endif
104543 -
104544 #ifdef PLATFORM_WINDOWS
104545
104546 #pragma pack(1)
104547 @@ -1052,7 +1073,7 @@ struct ieee80211_txb {
104548
104549 #define CRC_LENGTH 4U
104550
104551 -#define MAX_WPA_IE_LEN (128)
104552 +#define MAX_WPA_IE_LEN (256)
104553 #define MAX_WPS_IE_LEN (512)
104554 #define MAX_P2P_IE_LEN (256)
104555 #define MAX_WFD_IE_LEN (128)
104556 @@ -1120,6 +1141,8 @@ join_res:
104557 > 0: TID
104558 */
104559
104560 +#ifndef PLATFORM_FREEBSD //Baron BSD has already defined
104561 +
104562 enum ieee80211_state {
104563
104564 /* the card is not linked at all */
104565 @@ -1158,12 +1181,19 @@ enum ieee80211_state {
104566 IEEE80211_LINKED_SCANNING,
104567
104568 };
104569 +#endif //PLATFORM_FREEBSD
104570
104571 #define DEFAULT_MAX_SCAN_AGE (15 * HZ)
104572 #define DEFAULT_FTS 2346
104573 #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x"
104574 #define MAC_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5]
104575
104576 +#ifdef PLATFORM_FREEBSD //Baron change func to macro
104577 +#define is_multicast_mac_addr(Addr) ((((Addr[0]) & 0x01) == 0x01) && ((Addr[0]) != 0xff))
104578 +#define is_broadcast_mac_addr(Addr) ((((Addr[0]) & 0xff) == 0xff) && (((Addr[1]) & 0xff) == 0xff) && \
104579 +(((Addr[2]) & 0xff) == 0xff) && (((Addr[3]) & 0xff) == 0xff) && (((Addr[4]) & 0xff) == 0xff) && \
104580 +(((Addr[5]) & 0xff) == 0xff))
104581 +#else
104582 extern __inline int is_multicast_mac_addr(const u8 *addr)
104583 {
104584 return ((addr[0] != 0xff) && (0x01 & addr[0]));
104585 @@ -1175,6 +1205,13 @@ extern __inline int is_broadcast_mac_addr(const u8 *addr)
104586 (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
104587 }
104588
104589 +extern __inline int is_zero_mac_addr(const u8 *addr)
104590 +{
104591 + return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && \
104592 + (addr[3] == 0x00) && (addr[4] == 0x00) && (addr[5] == 0x00));
104593 +}
104594 +#endif //PLATFORM_FREEBSD
104595 +
104596 #define CFG_IEEE80211_RESERVE_FCS (1<<0)
104597 #define CFG_IEEE80211_COMPUTE_FCS (1<<1)
104598
104599 @@ -1192,48 +1229,9 @@ typedef struct tx_pending_t{
104600 #define IEEE_G (1<<2)
104601 #define IEEE_MODE_MASK (IEEE_A|IEEE_B|IEEE_G)
104602
104603 -extern __inline int ieee80211_is_empty_essid(const char *essid, int essid_len)
104604 -{
104605 - /* Single white space is for Linksys APs */
104606 - if (essid_len == 1 && essid[0] == ' ')
104607 - return 1;
104608 -
104609 - /* Otherwise, if the entire essid is 0, we assume it is hidden */
104610 - while (essid_len) {
104611 - essid_len--;
104612 - if (essid[essid_len] != '\0')
104613 - return 0;
104614 - }
104615 -
104616 - return 1;
104617 -}
104618 -
104619 -extern __inline int ieee80211_get_hdrlen(u16 fc)
104620 -{
104621 - int hdrlen = 24;
104622 -
104623 - switch (WLAN_FC_GET_TYPE(fc)) {
104624 - case RTW_IEEE80211_FTYPE_DATA:
104625 - if (fc & RTW_IEEE80211_QOS_DATAGRP)
104626 - hdrlen += 2;
104627 - if ((fc & RTW_IEEE80211_FCTL_FROMDS) && (fc & RTW_IEEE80211_FCTL_TODS))
104628 - hdrlen += 6; /* Addr4 */
104629 - break;
104630 - case RTW_IEEE80211_FTYPE_CTL:
104631 - switch (WLAN_FC_GET_STYPE(fc)) {
104632 - case RTW_IEEE80211_STYPE_CTS:
104633 - case RTW_IEEE80211_STYPE_ACK:
104634 - hdrlen = 10;
104635 - break;
104636 - default:
104637 - hdrlen = 16;
104638 - break;
104639 - }
104640 - break;
104641 - }
104642 -
104643 - return hdrlen;
104644 -}
104645 +//Baron move to ieee80211.c
104646 +int ieee80211_is_empty_essid(const char *essid, int essid_len);
104647 +int ieee80211_get_hdrlen(u16 fc);
104648
104649 #if 0
104650 /* Action frame categories (IEEE 802.11-2007, 7.3.1.11, Table 7-24) */
104651 @@ -1259,7 +1257,9 @@ enum rtw_ieee80211_category {
104652 RTW_WLAN_CATEGORY_FT = 6,
104653 RTW_WLAN_CATEGORY_HT = 7,
104654 RTW_WLAN_CATEGORY_SA_QUERY = 8,
104655 + RTW_WLAN_CATEGORY_UNPROTECTED_WNM = 11, // add for CONFIG_IEEE80211W, none 11w also can use
104656 RTW_WLAN_CATEGORY_TDLS = 12,
104657 + RTW_WLAN_CATEGORY_SELF_PROTECTED = 15, // add for CONFIG_IEEE80211W, none 11w also can use
104658 RTW_WLAN_CATEGORY_WMM = 17,
104659 RTW_WLAN_CATEGORY_P2P = 0x7f,//P2P action frames
104660 };
104661 @@ -1276,8 +1276,22 @@ enum rtw_ieee80211_spectrum_mgmt_actioncode {
104662
104663 enum _PUBLIC_ACTION{
104664 ACT_PUBLIC_BSSCOEXIST = 0, // 20/40 BSS Coexistence
104665 + ACT_PUBLIC_DSE_ENABLE = 1,
104666 + ACT_PUBLIC_DSE_DEENABLE = 2,
104667 + ACT_PUBLIC_DSE_REG_LOCATION = 3,
104668 + ACT_PUBLIC_EXT_CHL_SWITCH = 4,
104669 + ACT_PUBLIC_DSE_MSR_REQ = 5,
104670 + ACT_PUBLIC_DSE_MSR_RPRT = 6,
104671 ACT_PUBLIC_MP = 7, // Measurement Pilot
104672 - ACT_PUBLIC_P2P = 9, // WIFI_DIRECT
104673 + ACT_PUBLIC_DSE_PWR_CONSTRAINT = 8,
104674 + ACT_PUBLIC_VENDOR = 9, // for WIFI_DIRECT
104675 + ACT_PUBLIC_GAS_INITIAL_REQ = 10,
104676 + ACT_PUBLIC_GAS_INITIAL_RSP = 11,
104677 + ACT_PUBLIC_GAS_COMEBACK_REQ = 12,
104678 + ACT_PUBLIC_GAS_COMEBACK_RSP = 13,
104679 + ACT_PUBLIC_TDLS_DISCOVERY_RSP = 14,
104680 + ACT_PUBLIC_LOCATION_TRACK = 15,
104681 + ACT_PUBLIC_MAX
104682 };
104683
104684 #ifdef CONFIG_TDLS
104685 @@ -1295,7 +1309,10 @@ enum TDLS_ACTION_FIELD{
104686 TDLS_DISCOVERY_REQUEST = 10,
104687 TDLS_DISCOVERY_RESPONSE = 14, //it's used in public action frame
104688 };
104689 -#endif
104690 +
104691 +#define TUNNELED_PROBE_REQ 15
104692 +#define TUNNELED_PROBE_RSP 16
104693 +#endif //CONFIG_TDLS
104694
104695 /* BACK action code */
104696 enum rtw_ieee80211_back_actioncode {
104697 @@ -1327,8 +1344,9 @@ enum rtw_ieee80211_back_parties {
104698
104699 #define OUI_MICROSOFT 0x0050f2 /* Microsoft (also used in Wi-Fi specs)
104700 * 00:50:F2 */
104701 -
104702 +#ifndef PLATFORM_FREEBSD //Baron BSD has defined
104703 #define WME_OUI_TYPE 2
104704 +#endif //PLATFORM_FREEBSD
104705 #define WME_OUI_SUBTYPE_INFORMATION_ELEMENT 0
104706 #define WME_OUI_SUBTYPE_PARAMETER_ELEMENT 1
104707 #define WME_OUI_SUBTYPE_TSPEC_ELEMENT 2
104708 @@ -1351,8 +1369,76 @@ enum rtw_ieee80211_back_parties {
104709
104710 #define VENDOR_HT_CAPAB_OUI_TYPE 0x33 /* 00-90-4c:0x33 */
104711
104712 +/**
104713 + * enum rtw_ieee80211_channel_flags - channel flags
104714 + *
104715 + * Channel flags set by the regulatory control code.
104716 + *
104717 + * @RTW_IEEE80211_CHAN_DISABLED: This channel is disabled.
104718 + * @RTW_IEEE80211_CHAN_PASSIVE_SCAN: Only passive scanning is permitted
104719 + * on this channel.
104720 + * @RTW_IEEE80211_CHAN_NO_IBSS: IBSS is not allowed on this channel.
104721 + * @RTW_IEEE80211_CHAN_RADAR: Radar detection is required on this channel.
104722 + * @RTW_IEEE80211_CHAN_NO_HT40PLUS: extension channel above this channel
104723 + * is not permitted.
104724 + * @RTW_IEEE80211_CHAN_NO_HT40MINUS: extension channel below this channel
104725 + * is not permitted.
104726 + */
104727 + enum rtw_ieee80211_channel_flags {
104728 + RTW_IEEE80211_CHAN_DISABLED = 1<<0,
104729 + RTW_IEEE80211_CHAN_PASSIVE_SCAN = 1<<1,
104730 + RTW_IEEE80211_CHAN_NO_IBSS = 1<<2,
104731 + RTW_IEEE80211_CHAN_RADAR = 1<<3,
104732 + RTW_IEEE80211_CHAN_NO_HT40PLUS = 1<<4,
104733 + RTW_IEEE80211_CHAN_NO_HT40MINUS = 1<<5,
104734 + };
104735 +
104736 + #define RTW_IEEE80211_CHAN_NO_HT40 \
104737 + (RTW_IEEE80211_CHAN_NO_HT40PLUS | RTW_IEEE80211_CHAN_NO_HT40MINUS)
104738 +
104739 +/* Represent channel details, subset of ieee80211_channel */
104740 +struct rtw_ieee80211_channel {
104741 + //enum ieee80211_band band;
104742 + //u16 center_freq;
104743 + u16 hw_value;
104744 + u32 flags;
104745 + //int max_antenna_gain;
104746 + //int max_power;
104747 + //int max_reg_power;
104748 + //bool beacon_found;
104749 + //u32 orig_flags;
104750 + //int orig_mag;
104751 + //int orig_mpwr;
104752 +};
104753 +
104754 +#define CHAN_FMT \
104755 + /*"band:%d, "*/ \
104756 + /*"center_freq:%u, "*/ \
104757 + "hw_value:%u, " \
104758 + "flags:0x%08x" \
104759 + /*"max_antenna_gain:%d\n"*/ \
104760 + /*"max_power:%d\n"*/ \
104761 + /*"max_reg_power:%d\n"*/ \
104762 + /*"beacon_found:%u\n"*/ \
104763 + /*"orig_flags:0x%08x\n"*/ \
104764 + /*"orig_mag:%d\n"*/ \
104765 + /*"orig_mpwr:%d\n"*/
104766 +
104767 +#define CHAN_ARG(channel) \
104768 + /*(channel)->band*/ \
104769 + /*, (channel)->center_freq*/ \
104770 + (channel)->hw_value \
104771 + , (channel)->flags \
104772 + /*, (channel)->max_antenna_gain*/ \
104773 + /*, (channel)->max_power*/ \
104774 + /*, (channel)->max_reg_power*/ \
104775 + /*, (channel)->beacon_found*/ \
104776 + /*, (channel)->orig_flags*/ \
104777 + /*, (channel)->orig_mag*/ \
104778 + /*, (channel)->orig_mpwr*/ \
104779 +
104780 /* Parsed Information Elements */
104781 -struct ieee802_11_elems {
104782 +struct rtw_ieee802_11_elems {
104783 u8 *ssid;
104784 u8 ssid_len;
104785 u8 *supp_rates;
104786 @@ -1404,12 +1490,27 @@ struct ieee802_11_elems {
104787 typedef enum { ParseOK = 0, ParseUnknown = 1, ParseFailed = -1 } ParseRes;
104788
104789 ParseRes rtw_ieee802_11_parse_elems(u8 *start, uint len,
104790 - struct ieee802_11_elems *elems,
104791 + struct rtw_ieee802_11_elems *elems,
104792 int show_errors);
104793
104794 u8 *rtw_set_fixed_ie(unsigned char *pbuf, unsigned int len, unsigned char *source, unsigned int *frlen);
104795 u8 *rtw_set_ie(u8 *pbuf, sint index, uint len, u8 *source, uint *frlen);
104796 +
104797 +enum secondary_ch_offset {
104798 + SCN = 0, /* no secondary channel */
104799 + SCA = 1, /* secondary channel above */
104800 + SCB = 3, /* secondary channel below */
104801 +};
104802 +u8 secondary_ch_offset_to_hal_ch_offset(u8 ch_offset);
104803 +u8 hal_ch_offset_to_secondary_ch_offset(u8 ch_offset);
104804 +u8 *rtw_set_ie_ch_switch(u8 *buf, u32 *buf_len, u8 ch_switch_mode, u8 new_ch, u8 ch_switch_cnt);
104805 +u8 *rtw_set_ie_secondary_ch_offset(u8 *buf, u32 *buf_len, u8 secondary_ch_offset);
104806 +u8 *rtw_set_ie_mesh_ch_switch_parm(u8 *buf, u32 *buf_len, u8 ttl, u8 flags, u16 reason, u16 precedence);
104807 +
104808 u8 *rtw_get_ie(u8*pbuf, sint index, sint *len, sint limit);
104809 +u8 *rtw_get_ie_ex(u8 *in_ie, uint in_len, u8 eid, u8 *oui, u8 oui_len, u8 *ie, uint *ielen);
104810 +int rtw_ies_remove_ie(u8 *ies, uint *ies_len, uint offset, u8 eid, u8 *oui, u8 oui_len);
104811 +
104812 void rtw_set_supported_rate(u8* SupportedRates, uint mode) ;
104813
104814 unsigned char *rtw_get_wpa_ie(unsigned char *pie, int *wpa_ie_len, int limit);
104815 @@ -1426,19 +1527,31 @@ u8 *rtw_get_wps_ie(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen);
104816 u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr);
104817 u8 *rtw_get_wps_attr_content(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content);
104818
104819 -u8 *rtw_get_p2p_ie(u8 *in_ie, uint in_len, u8 *p2p_ie, uint *p2p_ielen);
104820 -u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id ,u8 *buf_attr, u32 *len_attr);
104821 -u8 *rtw_get_p2p_attr_content(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id ,u8 *buf_content, uint *len_content);
104822 -u32 rtw_set_p2p_attr_content(u8 *pbuf, u8 attr_id, u16 attr_len, u8 *pdata_attr);
104823 +/**
104824 + * for_each_ie - iterate over continuous IEs
104825 + * @ie:
104826 + * @buf:
104827 + * @buf_len:
104828 + */
104829 +#define for_each_ie(ie, buf, buf_len) \
104830 + for (ie = (void*)buf; (((u8*)ie) - ((u8*)buf) + 1) < buf_len; ie = (void*)(((u8*)ie) + *(((u8*)ie)+1) + 2))
104831
104832 void dump_ies(u8 *buf, u32 buf_len);
104833 void dump_wps_ie(u8 *ie, u32 ie_len);
104834 +
104835 #ifdef CONFIG_P2P
104836 +u32 rtw_get_p2p_merged_ies_len(u8 *in_ie, u32 in_len);
104837 +int rtw_p2p_merge_ies(u8 *in_ie, u32 in_len, u8 *merge_ie);
104838 void dump_p2p_ie(u8 *ie, u32 ie_len);
104839 +u8 *rtw_get_p2p_ie(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen);
104840 +u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id ,u8 *buf_attr, u32 *len_attr);
104841 +u8 *rtw_get_p2p_attr_content(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id ,u8 *buf_content, uint *len_content);
104842 +u32 rtw_set_p2p_attr_content(u8 *pbuf, u8 attr_id, u16 attr_len, u8 *pdata_attr);
104843 void rtw_WLAN_BSSID_EX_remove_p2p_attr(WLAN_BSSID_EX *bss_ex, u8 attr_id);
104844 #endif
104845 +
104846 #ifdef CONFIG_WFD
104847 -int rtw_get_wfd_ie(u8 *in_ie, uint in_len, u8 *wfd_ie, uint *wfd_ielen);
104848 +int rtw_get_wfd_ie(u8 *in_ie, int in_len, u8 *wfd_ie, uint *wfd_ielen);
104849 int rtw_get_wfd_attr_content(u8 *wfd_ie, uint wfd_ielen, u8 target_attr_id ,u8 *attr_content, uint *attr_contentlen);
104850 #endif // CONFIG_WFD
104851
104852 @@ -1457,5 +1570,11 @@ uint rtw_is_cckratesonly_included(u8 *rate);
104853 int rtw_check_network_type(unsigned char *rate, int ratelen, int channel);
104854
104855 void rtw_macaddr_cfg(u8 *mac_addr);
104856 +
104857 +u16 rtw_mcs_rate(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, unsigned char * MCS_rate);
104858 +
104859 +int rtw_action_frame_parse(const u8 *frame, u32 frame_len, u8* category, u8 *action);
104860 +const char *action_public_str(u8 action);
104861 +
104862 #endif /* IEEE80211_H */
104863
104864 diff --git a/drivers/net/wireless/rtl8192cu/include/if_ether.h b/drivers/net/wireless/rtl8192cu/include/if_ether.h
104865 index 045c067..9e36d7f 100644
104866 --- a/drivers/net/wireless/rtl8192cu/include/if_ether.h
104867 +++ b/drivers/net/wireless/rtl8192cu/include/if_ether.h
104868 @@ -1,22 +1,22 @@
104869 -/*
104870 - * INET An implementation of the TCP/IP protocol suite for the LINUX
104871 - * operating system. INET is implemented using the BSD Socket
104872 - * interface as the means of communication with the user level.
104873 +/******************************************************************************
104874 *
104875 - * Global definitions for the Ethernet IEEE 802.3 interface.
104876 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
104877 + *
104878 + * This program is free software; you can redistribute it and/or modify it
104879 + * under the terms of version 2 of the GNU General Public License as
104880 + * published by the Free Software Foundation.
104881 *
104882 - * Version: @(#)if_ether.h 1.0.1a 02/08/94
104883 + * This program is distributed in the hope that it will be useful, but WITHOUT
104884 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
104885 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
104886 + * more details.
104887 *
104888 - * Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
104889 - * Donald Becker, <becker@super.org>
104890 - * Alan Cox, <alan@redhat.com>
104891 - * Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
104892 + * You should have received a copy of the GNU General Public License along with
104893 + * this program; if not, write to the Free Software Foundation, Inc.,
104894 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
104895 *
104896 - * This program is free software; you can redistribute it and/or
104897 - * modify it under the terms of the GNU General Public License
104898 - * as published by the Free Software Foundation; either version
104899 - * 2 of the License, or (at your option) any later version.
104900 - */
104901 + *
104902 + ******************************************************************************/
104903
104904 #ifndef _LINUX_IF_ETHER_H
104905 #define _LINUX_IF_ETHER_H
104906 diff --git a/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h b/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h
104907 index 7846927..ceb0db8 100644
104908 --- a/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h
104909 +++ b/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h
104910 @@ -27,6 +27,62 @@
104911 #error "We haven't verify our cfg80211 solution below kernel version 2.6.35"
104912 #endif
104913
104914 +#if defined(RTW_USE_CFG80211_STA_EVENT)
104915 + #undef CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER
104916 +#endif
104917 +
104918 +struct rtw_wdev_invit_info {
104919 + u8 state; /* 0: req, 1:rep */
104920 + u8 peer_mac[ETH_ALEN];
104921 + u8 active;
104922 + u8 token;
104923 + u8 flags;
104924 + u8 status;
104925 + u8 req_op_ch;
104926 + u8 rsp_op_ch;
104927 +};
104928 +
104929 +#define rtw_wdev_invit_info_init(invit_info) \
104930 + do { \
104931 + (invit_info)->state = 0xff; \
104932 + _rtw_memset((invit_info)->peer_mac, 0, ETH_ALEN); \
104933 + (invit_info)->active = 0xff; \
104934 + (invit_info)->token = 0; \
104935 + (invit_info)->flags = 0x00; \
104936 + (invit_info)->status = 0xff; \
104937 + (invit_info)->req_op_ch = 0; \
104938 + (invit_info)->rsp_op_ch = 0; \
104939 + } while (0)
104940 +
104941 +struct rtw_wdev_nego_info {
104942 + u8 state; /* 0: req, 1:rep, 3:conf */
104943 + u8 peer_mac[ETH_ALEN];
104944 + u8 active;
104945 + u8 token;
104946 + u8 status;
104947 + u8 req_intent;
104948 + u8 req_op_ch;
104949 + u8 req_listen_ch;
104950 + u8 rsp_intent;
104951 + u8 rsp_op_ch;
104952 + u8 conf_op_ch;
104953 +};
104954 +
104955 +#define rtw_wdev_nego_info_init(nego_info) \
104956 + do { \
104957 + (nego_info)->state = 0xff; \
104958 + _rtw_memset((nego_info)->peer_mac, 0, ETH_ALEN); \
104959 + (nego_info)->active = 0xff; \
104960 + (nego_info)->token = 0; \
104961 + (nego_info)->status = 0xff; \
104962 + (nego_info)->req_intent = 0xff; \
104963 + (nego_info)->req_op_ch = 0; \
104964 + (nego_info)->req_listen_ch = 0; \
104965 + (nego_info)->rsp_intent = 0xff; \
104966 + (nego_info)->rsp_op_ch = 0; \
104967 + (nego_info)->conf_op_ch = 0; \
104968 + } while (0)
104969 +
104970 struct rtw_wdev_priv
104971 {
104972 struct wireless_dev *rtw_wdev;
104973 @@ -43,8 +99,18 @@ struct rtw_wdev_priv
104974
104975 u8 provdisc_req_issued;
104976
104977 + struct rtw_wdev_invit_info invit_info;
104978 + struct rtw_wdev_nego_info nego_info;
104979 +
104980 + u8 bandroid_scan;
104981 bool block;
104982 + bool power_mgmt;
104983
104984 +#ifdef CONFIG_CONCURRENT_MODE
104985 + ATOMIC_T ro_ch_to;
104986 + ATOMIC_T switch_ch_to;
104987 +#endif
104988 +
104989 };
104990
104991 #define wdev_to_priv(w) ((struct rtw_wdev_priv *)(wdev_priv(w)))
104992 @@ -53,15 +119,14 @@ struct rtw_wdev_priv
104993
104994 #define wiphy_to_wdev(x) (struct wireless_dev *)(((struct rtw_wdev_priv*)wiphy_priv(x))->rtw_wdev)
104995
104996 -
104997 -
104998 int rtw_wdev_alloc(_adapter *padapter, struct device *dev);
104999 void rtw_wdev_free(struct wireless_dev *wdev);
105000 +void rtw_wdev_unregister(struct wireless_dev *wdev);
105001
105002 void rtw_cfg80211_init_wiphy(_adapter *padapter);
105003
105004 void rtw_cfg80211_surveydone_event_callback(_adapter *padapter);
105005 -
105006 +int rtw_cfg80211_check_bss(_adapter *padapter);
105007 void rtw_cfg80211_indicate_connect(_adapter *padapter);
105008 void rtw_cfg80211_indicate_disconnect(_adapter *padapter);
105009 void rtw_cfg80211_indicate_scan_done(struct rtw_wdev_priv *pwdev_priv, bool aborted);
105010 @@ -74,8 +139,42 @@ void rtw_cfg80211_indicate_sta_disassoc(_adapter *padapter, unsigned char *da, u
105011 void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf, size_t len);
105012 void rtw_cfg80211_rx_p2p_action_public(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);
105013 void rtw_cfg80211_rx_action_p2p(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);
105014 +void rtw_cfg80211_rx_action(_adapter *adapter, u8 *frame, uint frame_len, const char*msg);
105015
105016 int rtw_cfg80211_set_mgnt_wpsp2pie(struct net_device *net, char *buf, int len, int type);
105017
105018 +bool rtw_cfg80211_pwr_mgmt(_adapter *adapter);
105019 +
105020 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE)
105021 +#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, buf, len, gfp)
105022 +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
105023 +#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, sig_dbm, buf, len, gfp)
105024 +#else
105025 +#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, gfp)
105026 +#endif
105027 +
105028 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE)
105029 +#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, buf, len)
105030 +#else
105031 +#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, bss, buf, len)
105032 +#endif
105033 +
105034 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
105035 +#define rtw_cfg80211_mgmt_tx_status(adapter, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status((adapter)->pnetdev, cookie, buf, len, ack, gfp)
105036 +#else
105037 +#define rtw_cfg80211_mgmt_tx_status(adapter, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status((adapter)->rtw_wdev, cookie, buf, len, ack, gfp)
105038 +#endif
105039 +
105040 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
105041 +#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)
105042 +#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)
105043 +#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
105044 +#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)
105045 +#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)
105046 +#else
105047 +#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel((adapter)->rtw_wdev, cookie, chan, duration, gfp)
105048 +#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->rtw_wdev, cookie, chan, gfp)
105049 +#endif
105050 +
105051 #endif //__IOCTL_CFG80211_H__
105052
105053 diff --git a/drivers/net/wireless/rtl8192cu/include/ip.h b/drivers/net/wireless/rtl8192cu/include/ip.h
105054 index 5846347..d7f723d 100644
105055 --- a/drivers/net/wireless/rtl8192cu/include/ip.h
105056 +++ b/drivers/net/wireless/rtl8192cu/include/ip.h
105057 @@ -1,19 +1,22 @@
105058 -/*
105059 - * INET An implementation of the TCP/IP protocol suite for the LINUX
105060 - * operating system. INET is implemented using the BSD Socket
105061 - * interface as the means of communication with the user level.
105062 +/******************************************************************************
105063 *
105064 - * Definitions for the IP protocol.
105065 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
105066 + *
105067 + * This program is free software; you can redistribute it and/or modify it
105068 + * under the terms of version 2 of the GNU General Public License as
105069 + * published by the Free Software Foundation.
105070 *
105071 - * Version: @(#)ip.h 1.0.2 04/28/93
105072 + * This program is distributed in the hope that it will be useful, but WITHOUT
105073 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
105074 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
105075 + * more details.
105076 *
105077 - * Authors: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
105078 + * You should have received a copy of the GNU General Public License along with
105079 + * this program; if not, write to the Free Software Foundation, Inc.,
105080 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
105081 *
105082 - * This program is free software; you can redistribute it and/or
105083 - * modify it under the terms of the GNU General Public License
105084 - * as published by the Free Software Foundation; either version
105085 - * 2 of the License, or (at your option) any later version.
105086 - */
105087 + *
105088 + ******************************************************************************/
105089 #ifndef _LINUX_IP_H
105090 #define _LINUX_IP_H
105091 #include <rtw_byteorder.h>
105092 diff --git a/drivers/net/wireless/rtl8192cu/include/linux/wireless.h b/drivers/net/wireless/rtl8192cu/include/linux/wireless.h
105093 new file mode 100644
105094 index 0000000..24a22d6
105095 --- /dev/null
105096 +++ b/drivers/net/wireless/rtl8192cu/include/linux/wireless.h
105097 @@ -0,0 +1,90 @@
105098 +/******************************************************************************
105099 + *
105100 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
105101 + *
105102 + * This program is free software; you can redistribute it and/or modify it
105103 + * under the terms of version 2 of the GNU General Public License as
105104 + * published by the Free Software Foundation.
105105 + *
105106 + * This program is distributed in the hope that it will be useful, but WITHOUT
105107 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
105108 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
105109 + * more details.
105110 + *
105111 + * You should have received a copy of the GNU General Public License along with
105112 + * this program; if not, write to the Free Software Foundation, Inc.,
105113 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
105114 + *
105115 + *
105116 + ******************************************************************************/
105117 +
105118 +#ifndef _LINUX_WIRELESS_H
105119 +#define _LINUX_WIRELESS_H
105120 +
105121 +/***************************** INCLUDES *****************************/
105122 +
105123 +#if 0
105124 +#include <linux/types.h> /* for __u* and __s* typedefs */
105125 +#include <linux/socket.h> /* for "struct sockaddr" et al */
105126 +#include <linux/if.h> /* for IFNAMSIZ and co... */
105127 +#else
105128 +#define __user
105129 +//typedef uint16_t __u16;
105130 +#include <sys/socket.h> /* for "struct sockaddr" et al */
105131 +#include <net/if.h> /* for IFNAMSIZ and co... */
105132 +#endif
105133 +
105134 +/****************************** TYPES ******************************/
105135 +
105136 +/* --------------------------- SUBTYPES --------------------------- */
105137 +/*
105138 + * For all data larger than 16 octets, we need to use a
105139 + * pointer to memory allocated in user space.
105140 + */
105141 +struct iw_point
105142 +{
105143 + void __user *pointer; /* Pointer to the data (in user space) */
105144 + __u16 length; /* number of fields or size in bytes */
105145 + __u16 flags; /* Optional params */
105146 +};
105147 +
105148 +
105149 +/* ------------------------ IOCTL REQUEST ------------------------ */
105150 +/*
105151 + * This structure defines the payload of an ioctl, and is used
105152 + * below.
105153 + *
105154 + * Note that this structure should fit on the memory footprint
105155 + * of iwreq (which is the same as ifreq), which mean a max size of
105156 + * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
105157 + * You should check this when increasing the structures defined
105158 + * above in this file...
105159 + */
105160 +union iwreq_data
105161 +{
105162 + /* Config - generic */
105163 + char name[IFNAMSIZ];
105164 + /* Name : used to verify the presence of wireless extensions.
105165 + * Name of the protocol/provider... */
105166 +
105167 + struct iw_point data; /* Other large parameters */
105168 +};
105169 +
105170 +/*
105171 + * The structure to exchange data for ioctl.
105172 + * This structure is the same as 'struct ifreq', but (re)defined for
105173 + * convenience...
105174 + * Do I need to remind you about structure size (32 octets) ?
105175 + */
105176 +struct iwreq
105177 +{
105178 + union
105179 + {
105180 + char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */
105181 + } ifr_ifrn;
105182 +
105183 + /* Data part (defined just above) */
105184 + union iwreq_data u;
105185 +};
105186 +
105187 +#endif /* _LINUX_WIRELESS_H */
105188 diff --git a/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h b/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h
105189 index 1583053..75754db 100644
105190 --- a/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h
105191 +++ b/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h
105192 @@ -34,10 +34,6 @@ extern void rtw_os_indicate_connect( _adapter *adapter );
105193 void rtw_os_indicate_scan_done( _adapter *padapter, bool aborted);
105194 extern void rtw_report_sec_ie(_adapter *adapter,u8 authmode,u8 *sec_ie);
105195
105196 -#ifdef CONFIG_AP_MODE
105197 -void rtw_indicate_sta_assoc_event(_adapter *padapter, struct sta_info *psta);
105198 -void rtw_indicate_sta_disassoc_event(_adapter *padapter, struct sta_info *psta);
105199 -#endif
105200 void rtw_reset_securitypriv( _adapter *adapter );
105201
105202 #endif //_MLME_OSDEP_H_
105203 diff --git a/drivers/net/wireless/rtl8192cu/include/osdep_intf.h b/drivers/net/wireless/rtl8192cu/include/osdep_intf.h
105204 index 86b3f1f..3cd1659 100644
105205 --- a/drivers/net/wireless/rtl8192cu/include/osdep_intf.h
105206 +++ b/drivers/net/wireless/rtl8192cu/include/osdep_intf.h
105207 @@ -1,7 +1,7 @@
105208 /******************************************************************************
105209 *
105210 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
105211 - *
105212 + *
105213 * This program is free software; you can redistribute it and/or modify it
105214 * under the terms of version 2 of the GNU General Public License as
105215 * published by the Free Software Foundation.
105216 @@ -25,11 +25,8 @@
105217 #include <osdep_service.h>
105218 #include <drv_types.h>
105219
105220 -#define RND4(x) (((x >> 2) + (((x & 3) == 0) ? 0: 1)) << 2)
105221 -
105222 -
105223 struct intf_priv {
105224 -
105225 +
105226 u8 *intf_dev;
105227 u32 max_iosz; //USB2.0: 128, USB1.1: 64, SDIO:64
105228 u32 max_xmitsz; //USB2.0: unlimited, SDIO:512
105229 @@ -39,9 +36,9 @@ struct intf_priv {
105230 volatile u8 *allocated_io_rwmem;
105231 u32 io_wsz; //unit: 4bytes
105232 u32 io_rsz;//unit: 4bytes
105233 - u8 intf_status;
105234 -
105235 - void (*_bus_io)(u8 *priv);
105236 + u8 intf_status;
105237 +
105238 + void (*_bus_io)(u8 *priv);
105239
105240 /*
105241 Under Sync. IRP (SDIO/USB)
105242 @@ -53,9 +50,9 @@ The protection mechanism is through the pending queue.
105243
105244 _mutex ioctl_mutex;
105245
105246 -
105247 -#ifdef PLATFORM_LINUX
105248 - #ifdef CONFIG_USB_HCI
105249 +
105250 +#ifdef PLATFORM_LINUX
105251 + #ifdef CONFIG_USB_HCI
105252 // when in USB, IO is through interrupt in/out endpoints
105253 struct usb_device *udev;
105254 PURB piorw_urb;
105255 @@ -70,7 +67,7 @@ The protection mechanism is through the pending queue.
105256
105257 #ifdef PLATFORM_OS_XP
105258 #ifdef CONFIG_SDIO_HCI
105259 - // below is for io_rwmem...
105260 + // below is for io_rwmem...
105261 PMDL pmdl;
105262 PSDBUS_REQUEST_PACKET sdrp;
105263 PSDBUS_REQUEST_PACKET recv_sdrp;
105264 @@ -84,11 +81,11 @@ The protection mechanism is through the pending queue.
105265 PIRP piorw_irp;
105266 u8 io_irp_cnt;
105267 u8 bio_irp_pending;
105268 - _sema io_retevt;
105269 - #endif
105270 + _sema io_retevt;
105271 + #endif
105272 #endif
105273
105274 -};
105275 +};
105276
105277
105278 #ifdef CONFIG_R871X_TEST
105279 @@ -96,6 +93,9 @@ int rtw_start_pseudo_adhoc(_adapter *padapter);
105280 int rtw_stop_pseudo_adhoc(_adapter *padapter);
105281 #endif
105282
105283 +struct dvobj_priv *devobj_init(void);
105284 +void devobj_deinit(struct dvobj_priv *pdvobj);
105285 +
105286 u8 rtw_init_drv_sw(_adapter *padapter);
105287 u8 rtw_free_drv_sw(_adapter *padapter);
105288 u8 rtw_reset_drv_sw(_adapter *padapter);
105289 @@ -109,20 +109,47 @@ int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
105290
105291 int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname);
105292 struct net_device *rtw_init_netdev(_adapter *padapter);
105293 +void rtw_unregister_netdevs(struct dvobj_priv *dvobj);
105294 +
105295 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
105296 +u16 rtw_recv_select_queue(struct sk_buff *skb);
105297 +#endif //LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35)
105298
105299 #ifdef CONFIG_PROC_DEBUG
105300 void rtw_proc_init_one(struct net_device *dev);
105301 void rtw_proc_remove_one(struct net_device *dev);
105302 -#endif
105303 -#endif
105304 +#else //!CONFIG_PROC_DEBUG
105305 +static void rtw_proc_init_one(struct net_device *dev){}
105306 +static void rtw_proc_remove_one(struct net_device *dev){}
105307 +#endif //!CONFIG_PROC_DEBUG
105308 +#endif //PLATFORM_LINUX
105309
105310
105311 +#ifdef PLATFORM_FREEBSD
105312 +extern int rtw_ioctl(struct ifnet * ifp, u_long cmd, caddr_t data);
105313 +#endif
105314 +
105315 void rtw_ips_dev_unload(_adapter *padapter);
105316 #ifdef CONFIG_IPS
105317 int rtw_ips_pwr_up(_adapter *padapter);
105318 void rtw_ips_pwr_down(_adapter *padapter);
105319 #endif
105320
105321 +#ifdef CONFIG_CONCURRENT_MODE
105322 +struct _io_ops;
105323 +_adapter *rtw_drv_if2_init(_adapter *primary_padapter, void (*set_intf_ops)(struct _io_ops *pops));
105324 +void rtw_drv_if2_free(_adapter *if2);
105325 +void rtw_drv_if2_stop(_adapter *if2);
105326 +#ifdef CONFIG_MULTI_VIR_IFACES
105327 +struct dvobj_priv;
105328 +_adapter *rtw_drv_add_vir_if(_adapter *primary_padapter, void (*set_intf_ops)(struct _io_ops *pops));
105329 +void rtw_drv_stop_vir_ifaces(struct dvobj_priv *dvobj);
105330 +void rtw_drv_free_vir_ifaces(struct dvobj_priv *dvobj);
105331 +#endif //CONFIG_MULTI_VIR_IFACES
105332 +#endif
105333 +
105334 +int rtw_drv_register_netdev(_adapter *padapter);
105335 +void rtw_ndev_destructor(_nic_hdl ndev);
105336
105337 #endif //_OSDEP_INTF_H_
105338
105339 diff --git a/drivers/net/wireless/rtl8192cu/include/osdep_service.h b/drivers/net/wireless/rtl8192cu/include/osdep_service.h
105340 index 6fedff4..c5c465e 100644
105341 --- a/drivers/net/wireless/rtl8192cu/include/osdep_service.h
105342 +++ b/drivers/net/wireless/rtl8192cu/include/osdep_service.h
105343 @@ -24,8 +24,9 @@
105344 #include <basic_types.h>
105345 //#include <rtl871x_byteorder.h>
105346
105347 -#define _SUCCESS 1
105348 #define _FAIL 0
105349 +#define _SUCCESS 1
105350 +#define RTW_RX_HANDLED 2
105351 //#define RTW_STATUS_TIMEDOUT -110
105352
105353 #undef _TRUE
105354 @@ -33,6 +34,719 @@
105355
105356 #undef _FALSE
105357 #define _FALSE 0
105358 +
105359 +
105360 +#ifdef PLATFORM_FREEBSD
105361 +#include <sys/cdefs.h>
105362 +#include <sys/types.h>
105363 +#include <sys/systm.h>
105364 +#include <sys/param.h>
105365 +#include <sys/sockio.h>
105366 +#include <sys/sysctl.h>
105367 +#include <sys/lock.h>
105368 +#include <sys/mutex.h>
105369 +#include <sys/mbuf.h>
105370 +#include <sys/kernel.h>
105371 +#include <sys/socket.h>
105372 +#include <sys/systm.h>
105373 +#include <sys/malloc.h>
105374 +#include <sys/module.h>
105375 +#include <sys/bus.h>
105376 +#include <sys/endian.h>
105377 +#include <sys/kdb.h>
105378 +#include <sys/kthread.h>
105379 +#include <machine/atomic.h>
105380 +
105381 +#include <machine/bus.h>
105382 +#include <machine/resource.h>
105383 +#include <sys/rman.h>
105384 +
105385 +#include <net/bpf.h>
105386 +#include <net/if.h>
105387 +#include <net/if_arp.h>
105388 +#include <net/ethernet.h>
105389 +#include <net/if_dl.h>
105390 +#include <net/if_media.h>
105391 +#include <net/if_types.h>
105392 +#include <net/route.h>
105393 +
105394 +
105395 +#include <netinet/in.h>
105396 +#include <netinet/in_systm.h>
105397 +#include <netinet/in_var.h>
105398 +#include <netinet/if_ether.h>
105399 +
105400 +#include <net80211/ieee80211_var.h>
105401 +#include <net80211/ieee80211_regdomain.h>
105402 +#include <net80211/ieee80211_radiotap.h>
105403 +#include <net80211/ieee80211_ratectl.h>
105404 +
105405 +#include <dev/usb/usb.h>
105406 +#include <dev/usb/usbdi.h>
105407 +#include "usbdevs.h"
105408 +
105409 +#define USB_DEBUG_VAR rum_debug
105410 +#include <dev/usb/usb_debug.h>
105411 +
105412 +#if 1 //Baron porting from linux, it's all temp solution, needs to check again
105413 +#include <sys/sema.h>
105414 +#include <sys/pcpu.h> /* XXX for PCPU_GET */
105415 +// typedef struct semaphore _sema;
105416 + typedef struct sema _sema;
105417 +// typedef spinlock_t _lock;
105418 + typedef struct mtx _lock;
105419 + typedef struct mtx _mutex;
105420 + typedef struct timer_list _timer;
105421 + struct list_head {
105422 + struct list_head *next, *prev;
105423 + };
105424 + struct __queue {
105425 + struct list_head queue;
105426 + _lock lock;
105427 + };
105428 +
105429 + //typedef struct sk_buff _pkt;
105430 + typedef struct mbuf _pkt;
105431 + typedef struct mbuf _buffer;
105432 +
105433 + typedef struct __queue _queue;
105434 + typedef struct list_head _list;
105435 + typedef int _OS_STATUS;
105436 + //typedef u32 _irqL;
105437 + typedef unsigned long _irqL;
105438 + typedef struct ifnet * _nic_hdl;
105439 +
105440 + typedef pid_t _thread_hdl_;
105441 +// typedef struct thread _thread_hdl_;
105442 + typedef void thread_return;
105443 + typedef void* thread_context;
105444 +
105445 + //#define thread_exit() complete_and_exit(NULL, 0)
105446 +
105447 + typedef void timer_hdl_return;
105448 + typedef void* timer_hdl_context;
105449 + typedef struct work_struct _workitem;
105450 +
105451 +#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
105452 +/* emulate a modern version */
105453 +#define LINUX_VERSION_CODE KERNEL_VERSION(2, 6, 35)
105454 +
105455 +#define WIRELESS_EXT -1
105456 +#define HZ hz
105457 +#define spin_lock_irqsave mtx_lock_irqsave
105458 +#define spin_lock_bh mtx_lock_irqsave
105459 +#define mtx_lock_irqsave(lock, x) mtx_lock(lock)//{local_irq_save((x)); mtx_lock_spin((lock));}
105460 +//#define IFT_RTW 0xf9 //ifnet allocate type for RTW
105461 +#define free_netdev if_free
105462 +#define LIST_CONTAINOR(ptr, type, member) \
105463 + ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member)))
105464 +#define container_of(p,t,n) (t*)((p)-&(((t*)0)->n))
105465 +/*
105466 + * Linux timers are emulated using FreeBSD callout functions
105467 + * (and taskqueue functionality).
105468 + *
105469 + * Currently no timer stats functionality.
105470 + *
105471 + * See (linux_compat) processes.c
105472 + *
105473 + */
105474 +struct timer_list {
105475 +
105476 + /* FreeBSD callout related fields */
105477 + struct callout callout;
105478 +
105479 + //timeout function
105480 + void (*function)(void*);
105481 + //argument
105482 + void *arg;
105483 +
105484 +};
105485 +struct workqueue_struct;
105486 +struct work_struct;
105487 +typedef void (*work_func_t)(struct work_struct *work);
105488 +/* Values for the state of an item of work (work_struct) */
105489 +typedef enum work_state {
105490 + WORK_STATE_UNSET = 0,
105491 + WORK_STATE_CALLOUT_PENDING = 1,
105492 + WORK_STATE_TASK_PENDING = 2,
105493 + WORK_STATE_WORK_CANCELLED = 3
105494 +} work_state_t;
105495 +
105496 +struct work_struct {
105497 + struct task task; /* FreeBSD task */
105498 + work_state_t state; /* the pending or otherwise state of work. */
105499 + work_func_t func;
105500 +};
105501 +#define spin_unlock_irqrestore mtx_unlock_irqrestore
105502 +#define spin_unlock_bh mtx_unlock_irqrestore
105503 +#define mtx_unlock_irqrestore(lock,x) mtx_unlock(lock);
105504 +extern void _rtw_spinlock_init(_lock *plock);
105505 +
105506 +//modify private structure to match freebsd
105507 +#define BITS_PER_LONG 32
105508 +union ktime {
105509 + s64 tv64;
105510 +#if BITS_PER_LONG != 64 && !defined(CONFIG_KTIME_SCALAR)
105511 + struct {
105512 +#ifdef __BIG_ENDIAN
105513 + s32 sec, nsec;
105514 +#else
105515 + s32 nsec, sec;
105516 +#endif
105517 + } tv;
105518 +#endif
105519 +};
105520 +#define kmemcheck_bitfield_begin(name)
105521 +#define kmemcheck_bitfield_end(name)
105522 +#define CHECKSUM_NONE 0
105523 +typedef unsigned char *sk_buff_data_t;
105524 +typedef union ktime ktime_t; /* Kill this */
105525 +
105526 +void rtw_mtx_lock(_lock *plock);
105527 +
105528 +void rtw_mtx_unlock(_lock *plock);
105529 +
105530 +/**
105531 + * struct sk_buff - socket buffer
105532 + * @next: Next buffer in list
105533 + * @prev: Previous buffer in list
105534 + * @sk: Socket we are owned by
105535 + * @tstamp: Time we arrived
105536 + * @dev: Device we arrived on/are leaving by
105537 + * @transport_header: Transport layer header
105538 + * @network_header: Network layer header
105539 + * @mac_header: Link layer header
105540 + * @_skb_refdst: destination entry (with norefcount bit)
105541 + * @sp: the security path, used for xfrm
105542 + * @cb: Control buffer. Free for use by every layer. Put private vars here
105543 + * @len: Length of actual data
105544 + * @data_len: Data length
105545 + * @mac_len: Length of link layer header
105546 + * @hdr_len: writable header length of cloned skb
105547 + * @csum: Checksum (must include start/offset pair)
105548 + * @csum_start: Offset from skb->head where checksumming should start
105549 + * @csum_offset: Offset from csum_start where checksum should be stored
105550 + * @local_df: allow local fragmentation
105551 + * @cloned: Head may be cloned (check refcnt to be sure)
105552 + * @nohdr: Payload reference only, must not modify header
105553 + * @pkt_type: Packet class
105554 + * @fclone: skbuff clone status
105555 + * @ip_summed: Driver fed us an IP checksum
105556 + * @priority: Packet queueing priority
105557 + * @users: User count - see {datagram,tcp}.c
105558 + * @protocol: Packet protocol from driver
105559 + * @truesize: Buffer size
105560 + * @head: Head of buffer
105561 + * @data: Data head pointer
105562 + * @tail: Tail pointer
105563 + * @end: End pointer
105564 + * @destructor: Destruct function
105565 + * @mark: Generic packet mark
105566 + * @nfct: Associated connection, if any
105567 + * @ipvs_property: skbuff is owned by ipvs
105568 + * @peeked: this packet has been seen already, so stats have been
105569 + * done for it, don't do them again
105570 + * @nf_trace: netfilter packet trace flag
105571 + * @nfctinfo: Relationship of this skb to the connection
105572 + * @nfct_reasm: netfilter conntrack re-assembly pointer
105573 + * @nf_bridge: Saved data about a bridged frame - see br_netfilter.c
105574 + * @skb_iif: ifindex of device we arrived on
105575 + * @rxhash: the packet hash computed on receive
105576 + * @queue_mapping: Queue mapping for multiqueue devices
105577 + * @tc_index: Traffic control index
105578 + * @tc_verd: traffic control verdict
105579 + * @ndisc_nodetype: router type (from link layer)
105580 + * @dma_cookie: a cookie to one of several possible DMA operations
105581 + * done by skb DMA functions
105582 + * @secmark: security marking
105583 + * @vlan_tci: vlan tag control information
105584 + */
105585 +
105586 +struct sk_buff {
105587 + /* These two members must be first. */
105588 + struct sk_buff *next;
105589 + struct sk_buff *prev;
105590 +
105591 + ktime_t tstamp;
105592 +
105593 + struct sock *sk;
105594 + //struct net_device *dev;
105595 + struct ifnet *dev;
105596 +
105597 + /*
105598 + * This is the control buffer. It is free to use for every
105599 + * layer. Please put your private variables there. If you
105600 + * want to keep them across layers you have to do a skb_clone()
105601 + * first. This is owned by whoever has the skb queued ATM.
105602 + */
105603 + char cb[48] __aligned(8);
105604 +
105605 + unsigned long _skb_refdst;
105606 +#ifdef CONFIG_XFRM
105607 + struct sec_path *sp;
105608 +#endif
105609 + unsigned int len,
105610 + data_len;
105611 + u16 mac_len,
105612 + hdr_len;
105613 + union {
105614 + u32 csum;
105615 + struct {
105616 + u16 csum_start;
105617 + u16 csum_offset;
105618 + }smbol2;
105619 + }smbol1;
105620 + u32 priority;
105621 + kmemcheck_bitfield_begin(flags1);
105622 + u8 local_df:1,
105623 + cloned:1,
105624 + ip_summed:2,
105625 + nohdr:1,
105626 + nfctinfo:3;
105627 + u8 pkt_type:3,
105628 + fclone:2,
105629 + ipvs_property:1,
105630 + peeked:1,
105631 + nf_trace:1;
105632 + kmemcheck_bitfield_end(flags1);
105633 + u16 protocol;
105634 +
105635 + void (*destructor)(struct sk_buff *skb);
105636 +#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
105637 + struct nf_conntrack *nfct;
105638 + struct sk_buff *nfct_reasm;
105639 +#endif
105640 +#ifdef CONFIG_BRIDGE_NETFILTER
105641 + struct nf_bridge_info *nf_bridge;
105642 +#endif
105643 +
105644 + int skb_iif;
105645 +#ifdef CONFIG_NET_SCHED
105646 + u16 tc_index; /* traffic control index */
105647 +#ifdef CONFIG_NET_CLS_ACT
105648 + u16 tc_verd; /* traffic control verdict */
105649 +#endif
105650 +#endif
105651 +
105652 + u32 rxhash;
105653 +
105654 + kmemcheck_bitfield_begin(flags2);
105655 + u16 queue_mapping:16;
105656 +#ifdef CONFIG_IPV6_NDISC_NODETYPE
105657 + u8 ndisc_nodetype:2,
105658 + deliver_no_wcard:1;
105659 +#else
105660 + u8 deliver_no_wcard:1;
105661 +#endif
105662 + kmemcheck_bitfield_end(flags2);
105663 +
105664 + /* 0/14 bit hole */
105665 +
105666 +#ifdef CONFIG_NET_DMA
105667 + dma_cookie_t dma_cookie;
105668 +#endif
105669 +#ifdef CONFIG_NETWORK_SECMARK
105670 + u32 secmark;
105671 +#endif
105672 + union {
105673 + u32 mark;
105674 + u32 dropcount;
105675 + }symbol3;
105676 +
105677 + u16 vlan_tci;
105678 +
105679 + sk_buff_data_t transport_header;
105680 + sk_buff_data_t network_header;
105681 + sk_buff_data_t mac_header;
105682 + /* These elements must be at the end, see alloc_skb() for details. */
105683 + sk_buff_data_t tail;
105684 + sk_buff_data_t end;
105685 + unsigned char *head,
105686 + *data;
105687 + unsigned int truesize;
105688 + atomic_t users;
105689 +};
105690 +struct sk_buff_head {
105691 + /* These two members must be first. */
105692 + struct sk_buff *next;
105693 + struct sk_buff *prev;
105694 +
105695 + u32 qlen;
105696 + _lock lock;
105697 +};
105698 +#define skb_tail_pointer(skb) skb->tail
105699 +static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len)
105700 +{
105701 + unsigned char *tmp = skb_tail_pointer(skb);
105702 + //SKB_LINEAR_ASSERT(skb);
105703 + skb->tail += len;
105704 + skb->len += len;
105705 + return tmp;
105706 +}
105707 +
105708 +static inline unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len)
105709 +{
105710 + skb->len -= len;
105711 + if(skb->len < skb->data_len)
105712 + printf("%s(),%d,error!\n",__FUNCTION__,__LINE__);
105713 + return skb->data += len;
105714 +}
105715 +static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned int len)
105716 +{
105717 + #ifdef PLATFORM_FREEBSD
105718 + return __skb_pull(skb, len);
105719 + #else
105720 + return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len);
105721 + #endif //PLATFORM_FREEBSD
105722 +}
105723 +static inline u32 skb_queue_len(const struct sk_buff_head *list_)
105724 +{
105725 + return list_->qlen;
105726 +}
105727 +static inline void __skb_insert(struct sk_buff *newsk,
105728 + struct sk_buff *prev, struct sk_buff *next,
105729 + struct sk_buff_head *list)
105730 +{
105731 + newsk->next = next;
105732 + newsk->prev = prev;
105733 + next->prev = prev->next = newsk;
105734 + list->qlen++;
105735 +}
105736 +static inline void __skb_queue_before(struct sk_buff_head *list,
105737 + struct sk_buff *next,
105738 + struct sk_buff *newsk)
105739 +{
105740 + __skb_insert(newsk, next->prev, next, list);
105741 +}
105742 +static inline void skb_queue_tail(struct sk_buff_head *list,
105743 + struct sk_buff *newsk)
105744 +{
105745 + mtx_lock(&list->lock);
105746 + __skb_queue_before(list, (struct sk_buff *)list, newsk);
105747 + mtx_unlock(&list->lock);
105748 +}
105749 +static inline struct sk_buff *skb_peek(struct sk_buff_head *list_)
105750 +{
105751 + struct sk_buff *list = ((struct sk_buff *)list_)->next;
105752 + if (list == (struct sk_buff *)list_)
105753 + list = NULL;
105754 + return list;
105755 +}
105756 +static inline void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list)
105757 +{
105758 + struct sk_buff *next, *prev;
105759 +
105760 + list->qlen--;
105761 + next = skb->next;
105762 + prev = skb->prev;
105763 + skb->next = skb->prev = NULL;
105764 + next->prev = prev;
105765 + prev->next = next;
105766 +}
105767 +
105768 +static inline struct sk_buff *skb_dequeue(struct sk_buff_head *list)
105769 +{
105770 + mtx_lock(&list->lock);
105771 +
105772 + struct sk_buff *skb = skb_peek(list);
105773 + if (skb)
105774 + __skb_unlink(skb, list);
105775 +
105776 + mtx_unlock(&list->lock);
105777 +
105778 + return skb;
105779 +}
105780 +static inline void skb_reserve(struct sk_buff *skb, int len)
105781 +{
105782 + skb->data += len;
105783 + skb->tail += len;
105784 +}
105785 +static inline void __skb_queue_head_init(struct sk_buff_head *list)
105786 +{
105787 + list->prev = list->next = (struct sk_buff *)list;
105788 + list->qlen = 0;
105789 +}
105790 +/*
105791 + * This function creates a split out lock class for each invocation;
105792 + * this is needed for now since a whole lot of users of the skb-queue
105793 + * infrastructure in drivers have different locking usage (in hardirq)
105794 + * than the networking core (in softirq only). In the long run either the
105795 + * network layer or drivers should need annotation to consolidate the
105796 + * main types of usage into 3 classes.
105797 + */
105798 +static inline void skb_queue_head_init(struct sk_buff_head *list)
105799 +{
105800 + _rtw_spinlock_init(&list->lock);
105801 + __skb_queue_head_init(list);
105802 +}
105803 +unsigned long copy_from_user(void *to, const void *from, unsigned long n);
105804 +unsigned long copy_to_user(void *to, const void *from, unsigned long n);
105805 +struct sk_buff * dev_alloc_skb(unsigned int size);
105806 +struct sk_buff *skb_clone(const struct sk_buff *skb);
105807 +void dev_kfree_skb_any(struct sk_buff *skb);
105808 +#endif //Baron porting from linux, it's all temp solution, needs to check again
105809 +
105810 +
105811 +#if 1 // kenny add Linux compatibility code for Linux USB driver
105812 +#include <dev/usb/usb_compat_linux.h>
105813 +
105814 +#define __init // __attribute ((constructor))
105815 +#define __exit // __attribute ((destructor))
105816 +
105817 +/*
105818 + * Definitions for module_init and module_exit macros.
105819 + *
105820 + * These macros will use the SYSINIT framework to call a specified
105821 + * function (with no arguments) on module loading or unloading.
105822 + *
105823 + */
105824 +
105825 +void module_init_exit_wrapper(void *arg);
105826 +
105827 +#define module_init(initfn) \
105828 + SYSINIT(mod_init_ ## initfn, \
105829 + SI_SUB_KLD, SI_ORDER_FIRST, \
105830 + module_init_exit_wrapper, initfn)
105831 +
105832 +#define module_exit(exitfn) \
105833 + SYSUNINIT(mod_exit_ ## exitfn, \
105834 + SI_SUB_KLD, SI_ORDER_ANY, \
105835 + module_init_exit_wrapper, exitfn)
105836 +
105837 +/*
105838 + * The usb_register and usb_deregister functions are used to register
105839 + * usb drivers with the usb subsystem.
105840 + */
105841 +int usb_register(struct usb_driver *driver);
105842 +int usb_deregister(struct usb_driver *driver);
105843 +
105844 +/*
105845 + * usb_get_dev and usb_put_dev - increment/decrement the reference count
105846 + * of the usb device structure.
105847 + *
105848 + * Original body of usb_get_dev:
105849 + *
105850 + * if (dev)
105851 + * get_device(&dev->dev);
105852 + * return dev;
105853 + *
105854 + * Reference counts are not currently used in this compatibility
105855 + * layer. So these functions will do nothing.
105856 + */
105857 +static inline struct usb_device *
105858 +usb_get_dev(struct usb_device *dev)
105859 +{
105860 + return dev;
105861 +}
105862 +
105863 +static inline void
105864 +usb_put_dev(struct usb_device *dev)
105865 +{
105866 + return;
105867 +}
105868 +
105869 +
105870 +// rtw_usb_compat_linux
105871 +int rtw_usb_submit_urb(struct urb *urb, uint16_t mem_flags);
105872 +int rtw_usb_unlink_urb(struct urb *urb);
105873 +int rtw_usb_clear_halt(struct usb_device *dev, struct usb_host_endpoint *uhe);
105874 +int rtw_usb_control_msg(struct usb_device *dev, struct usb_host_endpoint *uhe,
105875 + uint8_t request, uint8_t requesttype,
105876 + uint16_t value, uint16_t index, void *data,
105877 + uint16_t size, usb_timeout_t timeout);
105878 +int rtw_usb_set_interface(struct usb_device *dev, uint8_t iface_no, uint8_t alt_index);
105879 +int rtw_usb_setup_endpoint(struct usb_device *dev,
105880 + struct usb_host_endpoint *uhe, usb_size_t bufsize);
105881 +struct urb *rtw_usb_alloc_urb(uint16_t iso_packets, uint16_t mem_flags);
105882 +struct usb_host_endpoint *rtw_usb_find_host_endpoint(struct usb_device *dev, uint8_t type, uint8_t ep);
105883 +struct usb_host_interface *rtw_usb_altnum_to_altsetting(const struct usb_interface *intf, uint8_t alt_index);
105884 +struct usb_interface *rtw_usb_ifnum_to_if(struct usb_device *dev, uint8_t iface_no);
105885 +void *rtw_usb_buffer_alloc(struct usb_device *dev, usb_size_t size, uint8_t *dma_addr);
105886 +void *rtw_usbd_get_intfdata(struct usb_interface *intf);
105887 +void rtw_usb_linux_register(void *arg);
105888 +void rtw_usb_linux_deregister(void *arg);
105889 +void rtw_usb_linux_free_device(struct usb_device *dev);
105890 +void rtw_usb_buffer_free(struct usb_device *dev, usb_size_t size,
105891 + void *addr, uint8_t dma_addr);
105892 +void rtw_usb_free_urb(struct urb *urb);
105893 +void rtw_usb_init_urb(struct urb *urb);
105894 +void rtw_usb_kill_urb(struct urb *urb);
105895 +void rtw_usb_set_intfdata(struct usb_interface *intf, void *data);
105896 +void rtw_usb_fill_bulk_urb(struct urb *urb, struct usb_device *udev,
105897 + struct usb_host_endpoint *uhe, void *buf,
105898 + int length, usb_complete_t callback, void *arg);
105899 +int rtw_usb_bulk_msg(struct usb_device *udev, struct usb_host_endpoint *uhe,
105900 + void *data, int len, uint16_t *pactlen, usb_timeout_t timeout);
105901 +void *usb_get_intfdata(struct usb_interface *intf);
105902 +int usb_linux_init_endpoints(struct usb_device *udev);
105903 +
105904 +
105905 +
105906 +typedef struct urb * PURB;
105907 +
105908 +typedef unsigned gfp_t;
105909 +#define __GFP_WAIT ((gfp_t)0x10u) /* Can wait and reschedule? */
105910 +#define __GFP_HIGH ((gfp_t)0x20u) /* Should access emergency pools? */
105911 +#define __GFP_IO ((gfp_t)0x40u) /* Can start physical IO? */
105912 +#define __GFP_FS ((gfp_t)0x80u) /* Can call down to low-level FS? */
105913 +#define __GFP_COLD ((gfp_t)0x100u) /* Cache-cold page required */
105914 +#define __GFP_NOWARN ((gfp_t)0x200u) /* Suppress page allocation failure warning */
105915 +#define __GFP_REPEAT ((gfp_t)0x400u) /* Retry the allocation. Might fail */
105916 +#define __GFP_NOFAIL ((gfp_t)0x800u) /* Retry for ever. Cannot fail */
105917 +#define __GFP_NORETRY ((gfp_t)0x1000u)/* Do not retry. Might fail */
105918 +#define __GFP_NO_GROW ((gfp_t)0x2000u)/* Slab internal usage */
105919 +#define __GFP_COMP ((gfp_t)0x4000u)/* Add compound page metadata */
105920 +#define __GFP_ZERO ((gfp_t)0x8000u)/* Return zeroed page on success */
105921 +#define __GFP_NOMEMALLOC ((gfp_t)0x10000u) /* Don't use emergency reserves */
105922 +#define __GFP_HARDWALL ((gfp_t)0x20000u) /* Enforce hardwall cpuset memory allocs */
105923 +
105924 +/* This equals 0, but use constants in case they ever change */
105925 +#define GFP_NOWAIT (GFP_ATOMIC & ~__GFP_HIGH)
105926 +/* GFP_ATOMIC means both !wait (__GFP_WAIT not set) and use emergency pool */
105927 +#define GFP_ATOMIC (__GFP_HIGH)
105928 +#define GFP_NOIO (__GFP_WAIT)
105929 +#define GFP_NOFS (__GFP_WAIT | __GFP_IO)
105930 +#define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS)
105931 +#define GFP_USER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL)
105932 +#define GFP_HIGHUSER (__GFP_WAIT | __GFP_IO | __GFP_FS | __GFP_HARDWALL | \
105933 + __GFP_HIGHMEM)
105934 +
105935 +
105936 +#endif // kenny add Linux compatibility code for Linux USB
105937 +
105938 +
105939 +
105940 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
105941 + #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
105942 +#endif
105943 +
105944 +__inline static _list *get_next(_list *list)
105945 +{
105946 + return list->next;
105947 +}
105948 +
105949 +__inline static _list *get_list_head(_queue *queue)
105950 +{
105951 + return (&(queue->queue));
105952 +}
105953 +
105954 +
105955 +#define LIST_CONTAINOR(ptr, type, member) \
105956 + ((type *)((char *)(ptr)-(SIZE_T)(&((type *)0)->member)))
105957 +
105958 +
105959 +__inline static void _enter_critical(_lock *plock, _irqL *pirqL)
105960 +{
105961 + spin_lock_irqsave(plock, *pirqL);
105962 +}
105963 +
105964 +__inline static void _exit_critical(_lock *plock, _irqL *pirqL)
105965 +{
105966 + spin_unlock_irqrestore(plock, *pirqL);
105967 +}
105968 +
105969 +__inline static void _enter_critical_ex(_lock *plock, _irqL *pirqL)
105970 +{
105971 + spin_lock_irqsave(plock, *pirqL);
105972 +}
105973 +
105974 +__inline static void _exit_critical_ex(_lock *plock, _irqL *pirqL)
105975 +{
105976 + spin_unlock_irqrestore(plock, *pirqL);
105977 +}
105978 +
105979 +__inline static void _enter_critical_bh(_lock *plock, _irqL *pirqL)
105980 +{
105981 + spin_lock_bh(plock, *pirqL);
105982 +}
105983 +
105984 +__inline static void _exit_critical_bh(_lock *plock, _irqL *pirqL)
105985 +{
105986 + spin_unlock_bh(plock, *pirqL);
105987 +}
105988 +
105989 +__inline static void _enter_critical_mutex(_mutex *pmutex, _irqL *pirqL)
105990 +{
105991 +
105992 + mtx_lock(pmutex);
105993 +
105994 +}
105995 +
105996 +
105997 +__inline static void _exit_critical_mutex(_mutex *pmutex, _irqL *pirqL)
105998 +{
105999 +
106000 + mtx_unlock(pmutex);
106001 +
106002 +}
106003 +static inline void __list_del(struct list_head * prev, struct list_head * next)
106004 +{
106005 + next->prev = prev;
106006 + prev->next = next;
106007 +}
106008 +static inline void INIT_LIST_HEAD(struct list_head *list)
106009 +{
106010 + list->next = list;
106011 + list->prev = list;
106012 +}
106013 +__inline static void rtw_list_delete(_list *plist)
106014 +{
106015 + __list_del(plist->prev, plist->next);
106016 + INIT_LIST_HEAD(plist);
106017 +}
106018 +
106019 +__inline static void _init_timer(_timer *ptimer,_nic_hdl padapter,void *pfunc,void* cntx)
106020 +{
106021 + ptimer->function = pfunc;
106022 + ptimer->arg = cntx;
106023 + callout_init(&ptimer->callout, CALLOUT_MPSAFE);
106024 +}
106025 +
106026 +__inline static void _set_timer(_timer *ptimer,u32 delay_time)
106027 +{
106028 + // mod_timer(ptimer , (jiffies+(delay_time*HZ/1000)));
106029 + if(ptimer->function && ptimer->arg){
106030 + rtw_mtx_lock(NULL);
106031 + callout_reset(&ptimer->callout, delay_time,ptimer->function, ptimer->arg);
106032 + rtw_mtx_unlock(NULL);
106033 + }
106034 +}
106035 +
106036 +__inline static void _cancel_timer(_timer *ptimer,u8 *bcancelled)
106037 +{
106038 + // del_timer_sync(ptimer);
106039 + // *bcancelled= _TRUE;//TRUE ==1; FALSE==0
106040 + rtw_mtx_lock(NULL);
106041 + callout_drain(&ptimer->callout);
106042 + rtw_mtx_unlock(NULL);
106043 +}
106044 +
106045 +__inline static void _init_workitem(_workitem *pwork, void *pfunc, PVOID cntx)
106046 +{
106047 + printf("%s Not implement yet! \n",__FUNCTION__);
106048 +}
106049 +
106050 +__inline static void _set_workitem(_workitem *pwork)
106051 +{
106052 + printf("%s Not implement yet! \n",__FUNCTION__);
106053 +// schedule_work(pwork);
106054 +}
106055 +
106056 +//
106057 +// Global Mutex: can only be used at PASSIVE level.
106058 +//
106059 +
106060 +#define ACQUIRE_GLOBAL_MUTEX(_MutexCounter) \
106061 +{ \
106062 +}
106063 +
106064 +#define RELEASE_GLOBAL_MUTEX(_MutexCounter) \
106065 +{ \
106066 +}
106067 +
106068 +#define ATOMIC_INIT(i) { (i) }
106069 +
106070 +#endif //PLATFORM_FREEBSD
106071
106072
106073 #ifdef PLATFORM_LINUX
106074 @@ -69,16 +783,18 @@
106075 #include <linux/rtnetlink.h>
106076 #include <linux/delay.h>
106077 #include <linux/proc_fs.h> // Necessary because we use the proc fs
106078 + #include <linux/interrupt.h> // for struct tasklet_struct
106079 + #include <linux/ip.h>
106080 + #include <linux/kthread.h>
106081
106082 #ifdef CONFIG_IOCTL_CFG80211
106083 // #include <linux/ieee80211.h>
106084 - #include <net/ieee80211_radiotap.h>
106085 + #include <net/ieee80211_radiotap.h>
106086 #include <net/cfg80211.h>
106087 #endif //CONFIG_IOCTL_CFG80211
106088
106089 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
106090 #include <linux/in.h>
106091 - #include <linux/ip.h>
106092 #include <linux/udp.h>
106093 #endif
106094
106095 @@ -91,18 +807,10 @@
106096 #endif
106097 #endif
106098
106099 -#ifdef CONFIG_SDIO_HCI
106100 - #include <linux/mmc/sdio_func.h>
106101 - #include <linux/mmc/sdio_ids.h>
106102 -#endif
106103 -
106104 #ifdef CONFIG_PCI_HCI
106105 #include <linux/pci.h>
106106 #endif
106107
106108 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0))
106109 - #include <linux/kthread.h>
106110 -#endif
106111
106112 #ifdef CONFIG_USB_HCI
106113 typedef struct urb * PURB;
106114 @@ -136,12 +844,8 @@
106115 //typedef u32 _irqL;
106116 typedef unsigned long _irqL;
106117 typedef struct net_device * _nic_hdl;
106118 -
106119 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0))
106120 - typedef pid_t _thread_hdl_;
106121 -#else
106122 - typedef struct task_struct * _thread_hdl_;
106123 -#endif
106124 +
106125 + typedef void* _thread_hdl_;
106126 typedef int thread_return;
106127 typedef void* thread_context;
106128
106129 @@ -156,7 +860,26 @@
106130 #endif
106131
106132 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22))
106133 - #define skb_tail_pointer(skb) skb->tail
106134 +// Porting from linux kernel, for compatible with old kernel.
106135 +static inline unsigned char *skb_tail_pointer(const struct sk_buff *skb)
106136 +{
106137 + return skb->tail;
106138 +}
106139 +
106140 +static inline void skb_reset_tail_pointer(struct sk_buff *skb)
106141 +{
106142 + skb->tail = skb->data;
106143 +}
106144 +
106145 +static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset)
106146 +{
106147 + skb->tail = skb->data + offset;
106148 +}
106149 +
106150 +static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)
106151 +{
106152 + return skb->end;
106153 +}
106154 #endif
106155
106156 __inline static _list *get_next(_list *list)
106157 @@ -271,6 +994,15 @@ __inline static void _set_workitem(_workitem *pwork)
106158 schedule_work(pwork);
106159 }
106160
106161 +__inline static void _cancel_workitem_sync(_workitem *pwork)
106162 +{
106163 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,22))
106164 + cancel_work_sync(pwork);
106165 +#else
106166 + flush_scheduled_work();
106167 +#endif
106168 +}
106169 +
106170 //
106171 // Global Mutex: can only be used at PASSIVE level.
106172 //
106173 @@ -289,6 +1021,45 @@ __inline static void _set_workitem(_workitem *pwork)
106174 atomic_dec((atomic_t *)&(_MutexCounter)); \
106175 }
106176
106177 +static inline int rtw_netif_queue_stopped(struct net_device *pnetdev)
106178 +{
106179 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
106180 + return (netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 0)) &&
106181 + netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 1)) &&
106182 + netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 2)) &&
106183 + netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 3)) );
106184 +#else
106185 + return netif_queue_stopped(pnetdev);
106186 +#endif
106187 +}
106188 +
106189 +static inline void rtw_netif_wake_queue(struct net_device *pnetdev)
106190 +{
106191 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
106192 + netif_tx_wake_all_queues(pnetdev);
106193 +#else
106194 + netif_wake_queue(pnetdev);
106195 +#endif
106196 +}
106197 +
106198 +static inline void rtw_netif_start_queue(struct net_device *pnetdev)
106199 +{
106200 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
106201 + netif_tx_start_all_queues(pnetdev);
106202 +#else
106203 + netif_start_queue(pnetdev);
106204 +#endif
106205 +}
106206 +
106207 +static inline void rtw_netif_stop_queue(struct net_device *pnetdev)
106208 +{
106209 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
106210 + netif_tx_stop_all_queues(pnetdev);
106211 +#else
106212 + netif_stop_queue(pnetdev);
106213 +#endif
106214 +}
106215 +
106216 #endif // PLATFORM_LINUX
106217
106218
106219 @@ -296,7 +1067,6 @@ __inline static void _set_workitem(_workitem *pwork)
106220
106221 #include <ndis.h>
106222 #include <ntddk.h>
106223 - #include <ntddsd.h>
106224 #include <ntddndis.h>
106225 #include <ntdef.h>
106226
106227 @@ -470,46 +1240,160 @@ extern int RTW_STATUS_CODE(int error_code);
106228
106229 #define CONFIG_USE_VMALLOC
106230
106231 +/* flags used for rtw_mstat_update() */
106232 +enum mstat_f {
106233 + /* type: 0x00ff */
106234 + MSTAT_TYPE_VIR = 0x00,
106235 + MSTAT_TYPE_PHY= 0x01,
106236 + MSTAT_TYPE_SKB = 0x02,
106237 + MSTAT_TYPE_USB = 0x03,
106238 + MSTAT_TYPE_MAX = 0x04,
106239 +
106240 + /* func: 0xff00 */
106241 + MSTAT_FUNC_UNSPECIFIED = 0x00<<8,
106242 + MSTAT_FUNC_IO = 0x01<<8,
106243 + MSTAT_FUNC_TX_IO = 0x02<<8,
106244 + MSTAT_FUNC_RX_IO = 0x03<<8,
106245 + MSTAT_FUNC_TX = 0x04<<8,
106246 + MSTAT_FUNC_RX = 0x05<<8,
106247 + MSTAT_FUNC_MAX = 0x06<<8,
106248 +};
106249 +
106250 +#define mstat_tf_idx(flags) ((flags)&0xff)
106251 +#define mstat_ff_idx(flags) (((flags)&0xff00) >> 8)
106252 +
106253 +typedef enum mstat_status{
106254 + MSTAT_ALLOC_SUCCESS = 0,
106255 + MSTAT_ALLOC_FAIL,
106256 + MSTAT_FREE
106257 +} MSTAT_STATUS;
106258 +
106259 #ifdef DBG_MEM_ALLOC
106260 -void rtw_dump_mem_stat (void);
106261 -extern u8* dbg_rtw_vmalloc(u32 sz, const char *func, int line);
106262 -extern u8* dbg_rtw_zvmalloc(u32 sz, const char *func, int line);
106263 -extern void dbg_rtw_vmfree(u8 *pbuf, u32 sz, const char *func, int line);
106264 -extern u8* dbg_rtw_malloc(u32 sz, const char *func, int line);
106265 -extern u8* dbg_rtw_zmalloc(u32 sz, const char *func, int line);
106266 -extern void dbg_rtw_mfree(u8 *pbuf, u32 sz, const char *func, int line);
106267 +void rtw_mstat_update(const enum mstat_f flags, const MSTAT_STATUS status, u32 sz);
106268 +int _rtw_mstat_dump(char *buf, int len);
106269 +void rtw_mstat_dump (void);
106270 +u8* dbg_rtw_vmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
106271 +u8* dbg_rtw_zvmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
106272 +void dbg_rtw_vmfree(u8 *pbuf, const enum mstat_f flags, u32 sz, const char *func, const int line);
106273 +u8* dbg_rtw_malloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
106274 +u8* dbg_rtw_zmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
106275 +void dbg_rtw_mfree(u8 *pbuf, const enum mstat_f flags, u32 sz, const char *func, const int line);
106276 +
106277 +struct sk_buff * dbg_rtw_skb_alloc(unsigned int size, const enum mstat_f flags, const char *func, const int line);
106278 +void dbg_rtw_skb_free(struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line);
106279 +struct sk_buff *dbg_rtw_skb_copy(const struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line);
106280 +struct sk_buff *dbg_rtw_skb_clone(struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line);
106281 +int dbg_rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb, const enum mstat_f flags, const char *func, int line);
106282 +void dbg_rtw_skb_queue_purge(struct sk_buff_head *list, enum mstat_f flags, const char *func, int line);
106283 +
106284 +#ifdef CONFIG_USB_HCI
106285 +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);
106286 +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);
106287 +#endif /* CONFIG_USB_HCI */
106288 +
106289 #ifdef CONFIG_USE_VMALLOC
106290 -#define rtw_vmalloc(sz) dbg_rtw_vmalloc((sz), __FUNCTION__, __LINE__)
106291 -#define rtw_zvmalloc(sz) dbg_rtw_zvmalloc((sz), __FUNCTION__, __LINE__)
106292 -#define rtw_vmfree(pbuf, sz) dbg_rtw_vmfree((pbuf), (sz), __FUNCTION__, __LINE__)
106293 -#else //CONFIG_USE_VMALLOC
106294 -#define rtw_vmalloc(sz) dbg_rtw_malloc((sz), __FUNCTION__, __LINE__)
106295 -#define rtw_zvmalloc(sz) dbg_rtw_zmalloc((sz), __FUNCTION__, __LINE__)
106296 -#define rtw_vmfree(pbuf, sz) dbg_rtw_mfree((pbuf), (sz), __FUNCTION__, __LINE__)
106297 -#endif //CONFIG_USE_VMALLOC
106298 -#define rtw_malloc(sz) dbg_rtw_malloc((sz), __FUNCTION__, __LINE__)
106299 -#define rtw_zmalloc(sz) dbg_rtw_zmalloc((sz), __FUNCTION__, __LINE__)
106300 -#define rtw_mfree(pbuf, sz) dbg_rtw_mfree((pbuf), (sz), __FUNCTION__, __LINE__)
106301 -#else
106302 -extern u8* _rtw_vmalloc(u32 sz);
106303 -extern u8* _rtw_zvmalloc(u32 sz);
106304 -extern void _rtw_vmfree(u8 *pbuf, u32 sz);
106305 -extern u8* _rtw_zmalloc(u32 sz);
106306 -extern u8* _rtw_malloc(u32 sz);
106307 -extern void _rtw_mfree(u8 *pbuf, u32 sz);
106308 +#define rtw_vmalloc(sz) dbg_rtw_vmalloc((sz), MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
106309 +#define rtw_zvmalloc(sz) dbg_rtw_zvmalloc((sz), MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
106310 +#define rtw_vmfree(pbuf, sz) dbg_rtw_vmfree((pbuf), (sz), MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
106311 +#define rtw_vmalloc_f(sz, mstat_f) dbg_rtw_vmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
106312 +#define rtw_zvmalloc_f(sz, mstat_f) dbg_rtw_zvmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
106313 +#define rtw_vmfree_f(pbuf, sz, mstat_f) dbg_rtw_vmfree((pbuf), (sz), ((mstat_f)&0xff00)|MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
106314 +#else /* CONFIG_USE_VMALLOC */
106315 +#define rtw_vmalloc(sz) dbg_rtw_malloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106316 +#define rtw_zvmalloc(sz) dbg_rtw_zmalloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106317 +#define rtw_vmfree(pbuf, sz) dbg_rtw_mfree((pbuf), (sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106318 +#define rtw_vmalloc_f(sz, mstat_f) dbg_rtw_malloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106319 +#define rtw_zvmalloc_f(sz, mstat_f) dbg_rtw_zmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106320 +#define rtw_vmfree_f(pbuf, sz, mstat_f) dbg_rtw_mfree((pbuf), (sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106321 +#endif /* CONFIG_USE_VMALLOC */
106322 +#define rtw_malloc(sz) dbg_rtw_malloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106323 +#define rtw_zmalloc(sz) dbg_rtw_zmalloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106324 +#define rtw_mfree(pbuf, sz) dbg_rtw_mfree((pbuf), (sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106325 +#define rtw_malloc_f(sz, mstat_f) dbg_rtw_malloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106326 +#define rtw_zmalloc_f(sz, mstat_f) dbg_rtw_zmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106327 +#define rtw_mfree_f(pbuf, sz, mstat_f) dbg_rtw_mfree((pbuf), (sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
106328 +
106329 +#define rtw_skb_alloc(size) dbg_rtw_skb_alloc((size), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106330 +#define rtw_skb_free(skb) dbg_rtw_skb_free((skb), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106331 +#define rtw_skb_alloc_f(size, mstat_f) dbg_rtw_skb_alloc((size), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106332 +#define rtw_skb_free_f(skb, mstat_f) dbg_rtw_skb_free((skb), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106333 +#define rtw_skb_copy(skb) dbg_rtw_skb_copy((skb), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106334 +#define rtw_skb_clone(skb) dbg_rtw_skb_clone((skb), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106335 +#define rtw_skb_copy_f(skb, mstat_f) dbg_rtw_skb_copy((skb), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106336 +#define rtw_skb_clone_f(skb, mstat_f) dbg_rtw_skb_clone((skb), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106337 +#define rtw_netif_rx(ndev, skb) dbg_rtw_netif_rx(ndev, skb, MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106338 +#define rtw_skb_queue_purge(sk_buff_head) dbg_rtw_skb_queue_purge(sk_buff_head, MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
106339 +#ifdef CONFIG_USB_HCI
106340 +#define rtw_usb_buffer_alloc(dev, size, dma) dbg_rtw_usb_buffer_alloc((dev), (size), (dma), MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
106341 +#define rtw_usb_buffer_free(dev, size, addr, dma) dbg_rtw_usb_buffer_free((dev), (size), (addr), (dma), MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
106342 +#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__)
106343 +#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__)
106344 +#endif /* CONFIG_USB_HCI */
106345 +
106346 +#else /* DBG_MEM_ALLOC */
106347 +#define rtw_mstat_update(flag, status, sz) do {} while(0)
106348 +#define rtw_mstat_dump() do {} while(0)
106349 +u8* _rtw_vmalloc(u32 sz);
106350 +u8* _rtw_zvmalloc(u32 sz);
106351 +void _rtw_vmfree(u8 *pbuf, u32 sz);
106352 +u8* _rtw_zmalloc(u32 sz);
106353 +u8* _rtw_malloc(u32 sz);
106354 +void _rtw_mfree(u8 *pbuf, u32 sz);
106355 +
106356 +struct sk_buff *_rtw_skb_alloc(u32 sz);
106357 +void _rtw_skb_free(struct sk_buff *skb);
106358 +struct sk_buff *_rtw_skb_copy(const struct sk_buff *skb);
106359 +struct sk_buff *_rtw_skb_clone(struct sk_buff *skb);
106360 +int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb);
106361 +void _rtw_skb_queue_purge(struct sk_buff_head *list);
106362 +
106363 +#ifdef CONFIG_USB_HCI
106364 +void *_rtw_usb_buffer_alloc(struct usb_device *dev, size_t size, dma_addr_t *dma);
106365 +void _rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma);
106366 +#endif /* CONFIG_USB_HCI */
106367 +
106368 #ifdef CONFIG_USE_VMALLOC
106369 #define rtw_vmalloc(sz) _rtw_vmalloc((sz))
106370 #define rtw_zvmalloc(sz) _rtw_zvmalloc((sz))
106371 #define rtw_vmfree(pbuf, sz) _rtw_vmfree((pbuf), (sz))
106372 -#else //CONFIG_USE_VMALLOC
106373 +#define rtw_vmalloc_f(sz, mstat_f) _rtw_vmalloc((sz))
106374 +#define rtw_zvmalloc_f(sz, mstat_f) _rtw_zvmalloc((sz))
106375 +#define rtw_vmfree_f(pbuf, sz, mstat_f) _rtw_vmfree((pbuf), (sz))
106376 +#else /* CONFIG_USE_VMALLOC */
106377 #define rtw_vmalloc(sz) _rtw_malloc((sz))
106378 #define rtw_zvmalloc(sz) _rtw_zmalloc((sz))
106379 #define rtw_vmfree(pbuf, sz) _rtw_mfree((pbuf), (sz))
106380 -#endif //CONFIG_USE_VMALLOC
106381 +#define rtw_vmalloc_f(sz, mstat_f) _rtw_malloc((sz))
106382 +#define rtw_zvmalloc_f(sz, mstat_f) _rtw_zmalloc((sz))
106383 +#define rtw_vmfree_f(pbuf, sz, mstat_f) _rtw_mfree((pbuf), (sz))
106384 +#endif /* CONFIG_USE_VMALLOC */
106385 #define rtw_malloc(sz) _rtw_malloc((sz))
106386 #define rtw_zmalloc(sz) _rtw_zmalloc((sz))
106387 #define rtw_mfree(pbuf, sz) _rtw_mfree((pbuf), (sz))
106388 -#endif
106389 +#define rtw_malloc_f(sz, mstat_f) _rtw_malloc((sz))
106390 +#define rtw_zmalloc_f(sz, mstat_f) _rtw_zmalloc((sz))
106391 +#define rtw_mfree_f(pbuf, sz, mstat_f) _rtw_mfree((pbuf), (sz))
106392 +
106393 +#define rtw_skb_alloc(size) _rtw_skb_alloc((size))
106394 +#define rtw_skb_free(skb) _rtw_skb_free((skb))
106395 +#define rtw_skb_alloc_f(size, mstat_f) _rtw_skb_alloc((size))
106396 +#define rtw_skb_free_f(skb, mstat_f) _rtw_skb_free((skb))
106397 +#define rtw_skb_copy(skb) _rtw_skb_copy((skb))
106398 +#define rtw_skb_clone(skb) _rtw_skb_clone((skb))
106399 +#define rtw_skb_copy_f(skb, mstat_f) _rtw_skb_copy((skb))
106400 +#define rtw_skb_clone_f(skb, mstat_f) _rtw_skb_clone((skb))
106401 +#define rtw_netif_rx(ndev, skb) _rtw_netif_rx(ndev, skb)
106402 +#define rtw_skb_queue_purge(sk_buff_head) _rtw_skb_queue_purge(sk_buff_head)
106403 +#ifdef CONFIG_USB_HCI
106404 +#define rtw_usb_buffer_alloc(dev, size, dma) _rtw_usb_buffer_alloc((dev), (size), (dma))
106405 +#define rtw_usb_buffer_free(dev, size, addr, dma) _rtw_usb_buffer_free((dev), (size), (addr), (dma))
106406 +#define rtw_usb_buffer_alloc_f(dev, size, dma, mstat_f) _rtw_usb_buffer_alloc((dev), (size), (dma))
106407 +#define rtw_usb_buffer_free_f(dev, size, addr, dma, mstat_f) _rtw_usb_buffer_free((dev), (size), (addr), (dma))
106408 +#endif /* CONFIG_USB_HCI */
106409 +#endif /* DBG_MEM_ALLOC */
106410 +
106411 +extern void* rtw_malloc2d(int h, int w, int size);
106412 +extern void rtw_mfree2d(void *pbuf, int h, int w, int size);
106413
106414 extern void _rtw_memcpy(void* dec, void* sour, u32 sz);
106415 extern int _rtw_memcmp(void *dst, void *src, u32 sz);
106416 @@ -517,8 +1401,11 @@ extern void _rtw_memset(void *pbuf, int c, u32 sz);
106417
106418 extern void _rtw_init_listhead(_list *list);
106419 extern u32 rtw_is_list_empty(_list *phead);
106420 +extern void rtw_list_insert_head(_list *plist, _list *phead);
106421 extern void rtw_list_insert_tail(_list *plist, _list *phead);
106422 +#ifndef PLATFORM_FREEBSD
106423 extern void rtw_list_delete(_list *plist);
106424 +#endif //PLATFORM_FREEBSD
106425
106426 extern void _rtw_init_sema(_sema *sema, int init_val);
106427 extern void _rtw_free_sema(_sema *sema);
106428 @@ -526,7 +1413,9 @@ extern void _rtw_up_sema(_sema *sema);
106429 extern u32 _rtw_down_sema(_sema *sema);
106430 extern void _rtw_mutex_init(_mutex *pmutex);
106431 extern void _rtw_mutex_free(_mutex *pmutex);
106432 +#ifndef PLATFORM_FREEBSD
106433 extern void _rtw_spinlock_init(_lock *plock);
106434 +#endif //PLATFORM_FREEBSD
106435 extern void _rtw_spinlock_free(_lock *plock);
106436 extern void _rtw_spinlock(_lock *plock);
106437 extern void _rtw_spinunlock(_lock *plock);
106438 @@ -539,6 +1428,7 @@ extern u32 rtw_end_of_queue_search(_list *queue, _list *pelement);
106439
106440 extern u32 rtw_get_current_time(void);
106441 extern u32 rtw_systime_to_ms(u32 systime);
106442 +extern u32 rtw_ms_to_systime(u32 ms);
106443 extern s32 rtw_get_passing_time_ms(u32 start);
106444 extern s32 rtw_get_time_interval_ms(u32 start, u32 end);
106445
106446 @@ -547,6 +1437,8 @@ extern void rtw_sleep_schedulable(int ms);
106447 extern void rtw_msleep_os(int ms);
106448 extern void rtw_usleep_os(int us);
106449
106450 +extern u32 rtw_atoi(u8* s);
106451 +
106452 #ifdef DBG_DELAY_OS
106453 #define rtw_mdelay_os(ms) _rtw_mdelay_os((ms), __FUNCTION__, __LINE__)
106454 #define rtw_udelay_os(ms) _rtw_udelay_os((ms), __FUNCTION__, __LINE__)
106455 @@ -557,6 +1449,7 @@ extern void rtw_mdelay_os(int ms);
106456 extern void rtw_udelay_os(int us);
106457 #endif
106458
106459 +extern void rtw_yield_os(void);
106460
106461
106462 __inline static unsigned char _cancel_timer_ex(_timer *ptimer)
106463 @@ -564,7 +1457,10 @@ __inline static unsigned char _cancel_timer_ex(_timer *ptimer)
106464 #ifdef PLATFORM_LINUX
106465 return del_timer_sync(ptimer);
106466 #endif
106467 -
106468 +#ifdef PLATFORM_FREEBSD
106469 + _cancel_timer(ptimer,0);
106470 + return 0;
106471 +#endif
106472 #ifdef PLATFORM_WINDOWS
106473 u8 bcancelled;
106474
106475 @@ -574,16 +1470,25 @@ __inline static unsigned char _cancel_timer_ex(_timer *ptimer)
106476 #endif
106477 }
106478
106479 -__inline static void thread_enter(void *context)
106480 +#ifdef PLATFORM_FREEBSD
106481 +static __inline void thread_enter(void *context);
106482 +#endif //PLATFORM_FREEBSD
106483 +static __inline void thread_enter(char *name)
106484 {
106485 #ifdef PLATFORM_LINUX
106486 - //struct net_device *pnetdev = (struct net_device *)context;
106487 - //daemonize("%s", pnetdev->name);
106488 - //daemonize("%s", "RTKTHREAD");
106489 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0))
106490 + daemonize("%s", name);
106491 + #endif
106492 allow_signal(SIGTERM);
106493 #endif
106494 +#ifdef PLATFORM_FREEBSD
106495 + printf("%s", "RTKTHREAD_enter");
106496 +#endif
106497 }
106498
106499 +#ifdef PLATFORM_FREEBSD
106500 +#define thread_exit() do{printf("%s", "RTKTHREAD_exit");}while(0)
106501 +#endif //PLATFORM_FREEBSD
106502 __inline static void flush_signals_thread(void)
106503 {
106504 #ifdef PLATFORM_LINUX
106505 @@ -598,7 +1503,7 @@ __inline static _OS_STATUS res_to_status(sint res)
106506 {
106507
106508
106509 -#if defined (PLATFORM_LINUX) || defined (PLATFORM_MPIXEL)
106510 +#if defined (PLATFORM_LINUX) || defined (PLATFORM_MPIXEL) || defined (PLATFORM_FREEBSD)
106511 return res;
106512 #endif
106513
106514 @@ -613,6 +1518,22 @@ __inline static _OS_STATUS res_to_status(sint res)
106515
106516 }
106517
106518 +__inline static void rtw_dump_stack(void)
106519 +{
106520 +#ifdef PLATFORM_LINUX
106521 + dump_stack();
106522 +#endif
106523 +}
106524 +
106525 +#ifdef PLATFORM_LINUX
106526 +#define rtw_warn_on(condition) WARN_ON(condition)
106527 +#else
106528 +#define rtw_warn_on(condition) do {} while (0)
106529 +#endif
106530 +
106531 +#define _RND(sz, r) ((((sz)+((r)-1))/(r))*(r))
106532 +#define RND4(x) (((x >> 2) + (((x & 3) == 0) ? 0: 1)) << 2)
106533 +
106534 __inline static u32 _RND4(u32 sz)
106535 {
106536
106537 @@ -712,6 +1633,7 @@ extern void rtw_suspend_lock_init(void);
106538 extern void rtw_suspend_lock_uninit(void);
106539 extern void rtw_lock_suspend(void);
106540 extern void rtw_unlock_suspend(void);
106541 +extern void rtw_lock_suspend_timeout(u32 timeout_ms);
106542
106543
106544 //Atomic integer operations
106545 @@ -719,6 +1641,8 @@ extern void rtw_unlock_suspend(void);
106546 #define ATOMIC_T atomic_t
106547 #elif defined(PLATFORM_WINDOWS)
106548 #define ATOMIC_T LONG
106549 +#elif defined(PLATFORM_FREEBSD)
106550 + typedef uint32_t ATOMIC_T ;
106551 #endif
106552
106553 extern void ATOMIC_SET(ATOMIC_T *v, int i);
106554 @@ -738,7 +1662,6 @@ extern int rtw_retrive_from_file(char *path, u8* buf, u32 sz);
106555 extern int rtw_store_to_file(char *path, u8* buf, u32 sz);
106556
106557
106558 -
106559 #if 1 //#ifdef MEM_ALLOC_REFINE_ADAPTOR
106560 struct rtw_netdev_priv_indicator {
106561 void *priv;
106562 @@ -746,20 +1669,58 @@ struct rtw_netdev_priv_indicator {
106563 };
106564 struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, void *old_priv);
106565 extern struct net_device * rtw_alloc_etherdev(int sizeof_priv);
106566 +
106567 +#ifndef PLATFORM_FREEBSD
106568 #define rtw_netdev_priv(netdev) ( ((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv )
106569 +#else //PLATFORM_FREEBSD
106570 +#define rtw_netdev_priv(netdev) (((struct ifnet *)netdev)->if_softc)
106571 +#endif //PLATFORM_FREEBSD
106572 +
106573 +#ifndef PLATFORM_FREEBSD
106574 extern void rtw_free_netdev(struct net_device * netdev);
106575 -#else
106576 +#else //PLATFORM_FREEBSD
106577 +#define rtw_free_netdev(netdev) if_free((netdev))
106578 +#endif //PLATFORM_FREEBSD
106579 +
106580 +#else //MEM_ALLOC_REFINE_ADAPTOR
106581 +
106582 #define rtw_alloc_etherdev(sizeof_priv) alloc_etherdev((sizeof_priv))
106583 +
106584 +#ifndef PLATFORM_FREEBSD
106585 #define rtw_netdev_priv(netdev) netdev_priv((netdev))
106586 #define rtw_free_netdev(netdev) free_netdev((netdev))
106587 +#else //PLATFORM_FREEBSD
106588 +#define rtw_netdev_priv(netdev) (((struct ifnet *)netdev)->if_softc)
106589 +#define rtw_free_netdev(netdev) if_free((netdev))
106590 +#endif //PLATFORM_FREEBSD
106591 +#endif
106592 +
106593 +#ifdef PLATFORM_LINUX
106594 +#define NDEV_FMT "%s"
106595 +#define NDEV_ARG(ndev) ndev->name
106596 +#define ADPT_FMT "%s"
106597 +#define ADPT_ARG(adapter) adapter->pnetdev->name
106598 +#define FUNC_NDEV_FMT "%s(%s)"
106599 +#define FUNC_NDEV_ARG(ndev) __func__, ndev->name
106600 +#define FUNC_ADPT_FMT "%s(%s)"
106601 +#define FUNC_ADPT_ARG(adapter) __func__, adapter->pnetdev->name
106602 +#else
106603 +#define NDEV_FMT "%s"
106604 +#define NDEV_ARG(ndev) ""
106605 +#define ADPT_FMT "%s"
106606 +#define ADPT_ARG(adapter) ""
106607 +#define FUNC_NDEV_FMT "%s"
106608 +#define FUNC_NDEV_ARG(ndev) __func__
106609 +#define FUNC_ADPT_FMT "%s"
106610 +#define FUNC_ADPT_ARG(adapter) __func__
106611 #endif
106612
106613 #ifdef PLATFORM_LINUX
106614 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
106615 #define rtw_signal_process(pid, sig) kill_pid(find_vpid((pid)),(sig), 1)
106616 -#else
106617 +#else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
106618 #define rtw_signal_process(pid, sig) kill_proc((pid), (sig), 1)
106619 -#endif
106620 +#endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27))
106621 #endif //PLATFORM_LINUX
106622
106623 extern u64 rtw_modular64(u64 x, u64 y);
106624 @@ -832,10 +1793,23 @@ extern u64 rtw_division64(u64 x, u64 y);
106625 (((u64) (a)[3]) << 24) | (((u64) (a)[2]) << 16) | \
106626 (((u64) (a)[1]) << 8) | ((u64) (a)[0]))
106627
106628 -#endif
106629 +void rtw_buf_free(u8 **buf, u32 *buf_len);
106630 +void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len);
106631 +
106632 +struct rtw_cbuf {
106633 + u32 write;
106634 + u32 read;
106635 + u32 size;
106636 + void *bufs[0];
106637 +};
106638 +
106639 +bool rtw_cbuf_full(struct rtw_cbuf *cbuf);
106640 +bool rtw_cbuf_empty(struct rtw_cbuf *cbuf);
106641 +bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf);
106642 +void *rtw_cbuf_pop(struct rtw_cbuf *cbuf);
106643 +struct rtw_cbuf *rtw_cbuf_alloc(u32 size);
106644 +void rtw_cbuf_free(struct rtw_cbuf *cbuf);
106645
106646 -#ifdef PLATFORM_LINUX
106647 -extern int start_kthread(_thread_hdl_ *t_hdl, int (*threadfn)(void *data),
106648 - void *data, const char *name);
106649 #endif
106650
106651 +
106652 diff --git a/drivers/net/wireless/rtl8192cu/include/pci_ops.h b/drivers/net/wireless/rtl8192cu/include/pci_ops.h
106653 index dd63f5f..9404ff4 100644
106654 --- a/drivers/net/wireless/rtl8192cu/include/pci_ops.h
106655 +++ b/drivers/net/wireless/rtl8192cu/include/pci_ops.h
106656 @@ -37,6 +37,7 @@ void rtl8192ce_xmit_tasklet(void *priv);
106657 void rtl8192ce_recv_tasklet(void *priv);
106658 void rtl8192ce_prepare_bcn_tasklet(void *priv);
106659 void rtl8192ce_set_intf_ops(struct _io_ops *pops);
106660 +#define pci_set_intf_ops rtl8192ce_set_intf_ops
106661 #endif
106662
106663 #ifdef CONFIG_RTL8192D
106664 @@ -51,6 +52,7 @@ void rtl8192de_xmit_tasklet(void *priv);
106665 void rtl8192de_recv_tasklet(void *priv);
106666 void rtl8192de_prepare_bcn_tasklet(void *priv);
106667 void rtl8192de_set_intf_ops(struct _io_ops *pops);
106668 +#define pci_set_intf_ops rtl8192de_set_intf_ops
106669 u32 MpReadPCIDwordDBI8192D(IN PADAPTER Adapter, IN u16 Offset, IN u8 Direct);
106670 void MpWritePCIDwordDBI8192D(IN PADAPTER Adapter, IN u16 Offset, IN u32 Value, IN u8 Direct);
106671 #endif
106672 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h b/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h
106673 index 1689c54..c54cc31 100644
106674 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h
106675 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h
106676 @@ -16,8 +16,7 @@
106677 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
106678 *
106679 *
106680 -
106681 -******************************************************************************/
106682 + ******************************************************************************/
106683 #ifndef __RTL8192C_CMD_H_
106684 #define __RTL8192C_CMD_H_
106685
106686 @@ -35,15 +34,23 @@ enum cmd_msg_element_id
106687 MACID_PS_MODE_EID=7,
106688 P2P_PS_OFFLOAD_EID=8,
106689 SELECTIVE_SUSPEND_ROF_CMD=9,
106690 +#ifdef CONFIG_WOWLAN
106691 H2C_WO_WLAN_CMD = 26, // Wake on Wlan.
106692 EXT_MACID_PERIOD_EID = 27, // support macid to 64
106693 MACID64_CONFIG_EID = 28, // support macid to 64
106694 +#endif // CONFIG_WOWLAN
106695 P2P_PS_CTW_CMD_EID=32,
106696 H2C_92C_IO_OFFLOAD=44,
106697 +#ifdef CONFIG_WOWLAN
106698 KEEP_ALIVE_CONTROL_CMD=48,
106699 DISCONNECT_DECISION_CTRL_CMD=49,
106700 REMOTE_WAKE_CTRL_CMD=60,
106701 - H2C_92C_CMD_MAX};
106702 +#endif // CONFIG_WOWLAN
106703 + H2C_92C_TSF_SYNC=67,
106704 + H2C_92C_DISABLE_BCN_FUNC=68,
106705 + H2C_92C_RESET_TSF = 75,
106706 + H2C_92C_CMD_MAX
106707 +};
106708
106709 struct cmd_msg_parm {
106710 u8 eid; //element id
106711 @@ -51,31 +58,13 @@ struct cmd_msg_parm {
106712 u8 buf[6];
106713 };
106714
106715 -enum evt_msg_element_id
106716 -{
106717 - EVT_DBG_EID=0,
106718 - EVT_TSF_EID=1,
106719 - EVT_AP_RPT_RSP_EID=2,
106720 - EVT_CCX_TXRPT_EID=3,
106721 - EVT_BT_RSSI_EID=4,
106722 - EVT_BT_OPMODE_EID=5,
106723 - EVT_EXT_RA_RPT_EID=6,
106724 - EVT_BT_TYPE_RPT_EID=7,
106725 - EVT_INIT_OFFLOAD_EID=8,
106726 - EVT_PSD_CONTROL_EID=9,
106727 - EVT_HW_INFO_EXCHGNGE_EID=10,
106728 - EVT_C2H_H2C_TEST_EID=11,
106729 - EVT_BT_INTO_EID=12,
106730 - EVT_BT_RPT_EID=13,
106731 - H2C_92C_EVT_MAX};
106732 -
106733 -
106734 typedef struct _SETPWRMODE_PARM{
106735 u8 Mode;
106736 u8 SmartPS;
106737 u8 BcnPassTime; // unit: 100ms
106738 }SETPWRMODE_PARM, *PSETPWRMODE_PARM;
106739
106740 +#ifdef CONFIG_WOWLAN
106741 typedef struct _SETWOWLAN_PARM{
106742 u8 mode;
106743 u8 gpio_index;
106744 @@ -95,6 +84,7 @@ typedef struct _SETWOWLAN_PARM{
106745
106746 #define FW_WOWLAN_GPIO_WAKEUP_EN BIT(0)
106747 #define FW_FW_PARSE_MAGIC_PKT BIT(1)
106748 +#endif // CONFIG_WOWLAN
106749
106750 struct H2C_SS_RFOFF_PARAM{
106751 u8 ROFOn; // 1: on, 0:off
106752 @@ -132,8 +122,7 @@ void rtl8192c_set_FwPwrMode_cmd(_adapter*padapter, u8 Mode);
106753 void rtl8192c_set_FwJoinBssReport_cmd(_adapter* padapter, u8 mstatus);
106754 u8 rtl8192c_set_rssi_cmd(_adapter*padapter, u8 *param);
106755 u8 rtl8192c_set_raid_cmd(_adapter*padapter, u32 mask, u8 arg);
106756 -u8 rtl8192c_set_raid64_cmd(_adapter*padapter, u32 mask, u8 arg);
106757 -void rtl8192c_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg, u8 mac_id);
106758 +void rtl8192c_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg);
106759 u8 rtl8192c_set_FwSelectSuspend_cmd(_adapter*padapter,u8 bfwpoll, u16 period);
106760 #ifdef CONFIG_P2P
106761 void rtl8192c_set_p2p_ps_offload_cmd(_adapter* padapter, u8 p2p_ps_state);
106762 @@ -146,8 +135,19 @@ typedef struct _IO_OFFLOAD_LOC{
106763 int rtl8192c_IOL_exec_cmds_sync(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms);
106764 #endif //CONFIG_IOL
106765
106766 -#endif
106767 +#ifdef CONFIG_BEACON_DISABLE_OFFLOAD
106768 +u8 rtl8192c_dis_beacon_fun_cmd(_adapter* padapter);
106769 +#endif // CONFIG_BEACON_DISABLE_OFFLOAD
106770 +
106771 +
106772 +#ifdef CONFIG_TSF_RESET_OFFLOAD
106773 +int reset_tsf(PADAPTER Adapter, u8 reset_port );
106774 +#endif // CONFIG_TSF_RESET_OFFLOAD
106775 +
106776 #ifdef CONFIG_WOWLAN
106777 void rtl8192c_set_wowlan_cmd(_adapter* padapter);
106778 void SetFwRelatedForWoWLAN8192CU(_adapter* padapter,u8 bHostIsGoingtoSleep);
106779 #endif // CONFIG_WOWLAN
106780 +
106781 +#endif // __RTL8192C_CMD_H_
106782 +
106783 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h b/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h
106784 index 80b4a67..9d06540 100644
106785 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h
106786 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h
106787 @@ -16,8 +16,7 @@
106788 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
106789 *
106790 *
106791 -
106792 -******************************************************************************/
106793 + ******************************************************************************/
106794 #ifndef __RTL8192C_DM_H__
106795 #define __RTL8192C_DM_H__
106796 //============================================================
106797 @@ -28,125 +27,10 @@
106798 //
106799 //============================================================
106800
106801 -#define RSSI_CCK 0
106802 -#define RSSI_OFDM 1
106803 +#define RSSI_CCK 0
106804 +#define RSSI_OFDM 1
106805 #define RSSI_DEFAULT 2
106806
106807 -#define OFDM_TABLE_SIZE 37
106808 -#define CCK_TABLE_SIZE 33
106809 -
106810 -static u32 OFDMSwingTable[OFDM_TABLE_SIZE] = {
106811 - 0x7f8001fe, // 0, +6.0dB
106812 - 0x788001e2, // 1, +5.5dB
106813 - 0x71c001c7, // 2, +5.0dB
106814 - 0x6b8001ae, // 3, +4.5dB
106815 - 0x65400195, // 4, +4.0dB
106816 - 0x5fc0017f, // 5, +3.5dB
106817 - 0x5a400169, // 6, +3.0dB
106818 - 0x55400155, // 7, +2.5dB
106819 - 0x50800142, // 8, +2.0dB
106820 - 0x4c000130, // 9, +1.5dB
106821 - 0x47c0011f, // 10, +1.0dB
106822 - 0x43c0010f, // 11, +0.5dB
106823 - 0x40000100, // 12, +0dB
106824 - 0x3c8000f2, // 13, -0.5dB
106825 - 0x390000e4, // 14, -1.0dB
106826 - 0x35c000d7, // 15, -1.5dB
106827 - 0x32c000cb, // 16, -2.0dB
106828 - 0x300000c0, // 17, -2.5dB
106829 - 0x2d4000b5, // 18, -3.0dB
106830 - 0x2ac000ab, // 19, -3.5dB
106831 - 0x288000a2, // 20, -4.0dB
106832 - 0x26000098, // 21, -4.5dB
106833 - 0x24000090, // 22, -5.0dB
106834 - 0x22000088, // 23, -5.5dB
106835 - 0x20000080, // 24, -6.0dB
106836 - 0x1e400079, // 25, -6.5dB
106837 - 0x1c800072, // 26, -7.0dB
106838 - 0x1b00006c, // 27. -7.5dB
106839 - 0x19800066, // 28, -8.0dB
106840 - 0x18000060, // 29, -8.5dB
106841 - 0x16c0005b, // 30, -9.0dB
106842 - 0x15800056, // 31, -9.5dB
106843 - 0x14400051, // 32, -10.0dB
106844 - 0x1300004c, // 33, -10.5dB
106845 - 0x12000048, // 34, -11.0dB
106846 - 0x11000044, // 35, -11.5dB
106847 - 0x10000040, // 36, -12.0dB
106848 -};
106849 -
106850 -static u8 CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8] = {
106851 -{0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}, // 0, +0dB
106852 -{0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, // 1, -0.5dB
106853 -{0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, // 2, -1.0dB
106854 -{0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, // 3, -1.5dB
106855 -{0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, // 4, -2.0dB
106856 -{0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, // 5, -2.5dB
106857 -{0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, // 6, -3.0dB
106858 -{0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, // 7, -3.5dB
106859 -{0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, // 8, -4.0dB
106860 -{0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, // 9, -4.5dB
106861 -{0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, // 10, -5.0dB
106862 -{0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, // 11, -5.5dB
106863 -{0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, // 12, -6.0dB
106864 -{0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, // 13, -6.5dB
106865 -{0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, // 14, -7.0dB
106866 -{0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, // 15, -7.5dB
106867 -{0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, // 16, -8.0dB
106868 -{0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, // 17, -8.5dB
106869 -{0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, // 18, -9.0dB
106870 -{0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, // 19, -9.5dB
106871 -{0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, // 20, -10.0dB
106872 -{0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, // 21, -10.5dB
106873 -{0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, // 22, -11.0dB
106874 -{0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, // 23, -11.5dB
106875 -{0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, // 24, -12.0dB
106876 -{0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, // 25, -12.5dB
106877 -{0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, // 26, -13.0dB
106878 -{0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, // 27, -13.5dB
106879 -{0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, // 28, -14.0dB
106880 -{0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, // 29, -14.5dB
106881 -{0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, // 30, -15.0dB
106882 -{0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, // 31, -15.5dB
106883 -{0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01} // 32, -16.0dB
106884 -};
106885 -
106886 -static u8 CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8]= {
106887 -{0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}, // 0, +0dB
106888 -{0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, // 1, -0.5dB
106889 -{0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, // 2, -1.0dB
106890 -{0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, // 3, -1.5dB
106891 -{0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, // 4, -2.0dB
106892 -{0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, // 5, -2.5dB
106893 -{0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, // 6, -3.0dB
106894 -{0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, // 7, -3.5dB
106895 -{0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, // 8, -4.0dB
106896 -{0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, // 9, -4.5dB
106897 -{0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, // 10, -5.0dB
106898 -{0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, // 11, -5.5dB
106899 -{0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, // 12, -6.0dB
106900 -{0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, // 13, -6.5dB
106901 -{0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, // 14, -7.0dB
106902 -{0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, // 15, -7.5dB
106903 -{0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, // 16, -8.0dB
106904 -{0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, // 17, -8.5dB
106905 -{0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, // 18, -9.0dB
106906 -{0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, // 19, -9.5dB
106907 -{0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, // 20, -10.0dB
106908 -{0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, // 21, -10.5dB
106909 -{0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, // 22, -11.0dB
106910 -{0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, // 23, -11.5dB
106911 -{0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, // 24, -12.0dB
106912 -{0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, // 25, -12.5dB
106913 -{0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, // 26, -13.0dB
106914 -{0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, // 27, -13.5dB
106915 -{0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, // 28, -14.0dB
106916 -{0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, // 29, -14.5dB
106917 -{0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, // 30, -15.0dB
106918 -{0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, // 31, -15.5dB
106919 -{0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00} // 32, -16.0dB
106920 -};
106921 -
106922 //============================================================
106923 // structure and define
106924 //============================================================
106925 @@ -211,6 +95,7 @@ typedef struct _Dynamic_Initial_Gain_Threshold_
106926 u8 LargeFAHit;
106927 u8 ForbiddenIGI;
106928 u32 Recover_cnt;
106929 + u8 rx_gain_range_min_nolink;
106930
106931 }DIG_T;
106932
106933 @@ -351,7 +236,7 @@ struct btcoexist_priv {
106934 #define DM_DIG_MAX 0x3e
106935 #define DM_DIG_MIN 0x1e //0x22//0x1c
106936
106937 -#define DM_DIG_FA_UPPER 0x32
106938 +#define DM_DIG_FA_UPPER 0x3e
106939 #define DM_DIG_FA_LOWER 0x20
106940 #define DM_DIG_FA_TH0 0x20
106941 #define DM_DIG_FA_TH1 0x100
106942 @@ -577,6 +462,21 @@ struct dm_priv
106943
106944 // Add for Reading Initial Data Rate SEL Register 0x484 during watchdog. Using for fill tx desc. 2011.3.21 by Thomas
106945 u8 INIDATA_RATE[32];
106946 +
106947 +#ifdef CONFIG_DM_ADAPTIVITY
106948 + /* Ported from ODM, for ESTI Adaptivity test */
106949 + s8 TH_L2H_ini;
106950 + s8 TH_EDCCA_HL_diff;
106951 + s8 IGI_Base;
106952 + u8 IGI_target;
106953 + bool ForceEDCCA;
106954 + u8 AdapEn_RSSI;
106955 + s8 Force_TH_H;
106956 + s8 Force_TH_L;
106957 + u8 IGI_LowerBound;
106958 +
106959 + bool bPreEdccaEnable;
106960 +#endif
106961 };
106962
106963
106964 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h b/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h
106965 index 131b658..1013f74 100644
106966 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h
106967 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h
106968 @@ -16,8 +16,7 @@
106969 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
106970 *
106971 *
106972 -
106973 -******************************************************************************/
106974 + ******************************************************************************/
106975 #ifndef _RTL8192C_EVENT_H_
106976 #define _RTL8192C_EVENT_H_
106977
106978 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h b/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h
106979 index cddd998..3348971 100644
106980 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h
106981 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h
106982 @@ -16,11 +16,11 @@
106983 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
106984 *
106985 *
106986 -
106987 -******************************************************************************/
106988 + ******************************************************************************/
106989 #ifndef __RTL8192C_HAL_H__
106990 #define __RTL8192C_HAL_H__
106991
106992 +#include "hal_com.h"
106993 #include "rtl8192c_spec.h"
106994 #include "Hal8192CPhyReg.h"
106995 #include "Hal8192CPhyCfg.h"
106996 @@ -123,9 +123,11 @@
106997 #define RTL8192C_FW_TSMC_IMG "rtl8192CU\\rtl8192cfwT.bin"
106998 #define RTL8192C_FW_UMC_IMG "rtl8192CU\\rtl8192cfwU.bin"
106999 #define RTL8192C_FW_UMC_B_IMG "rtl8192CU\\rtl8192cfwU_B.bin"
107000 +#ifdef CONFIG_WOWLAN
107001 #define RTL8192C_FW_TSMC_WW_IMG "rtl8192CU\\rtl8192cfwTww.bin"
107002 #define RTL8192C_FW_UMC_WW_IMG "rtl8192CU\\rtl8192cfwUww.bin"
107003 #define RTL8192C_FW_UMC_B_WW_IMG "rtl8192CU\\rtl8192cfwU_Bww.bin"
107004 +#endif // CONFIG_WOWLAN
107005 //#define RTL819X_FW_BOOT_IMG "rtl8192CU\\boot.img"
107006 //#define RTL819X_FW_MAIN_IMG "rtl8192CU\\main.img"
107007 //#define RTL819X_FW_DATA_IMG "rtl8192CU\\data.img"
107008 @@ -307,10 +309,10 @@ typedef enum _USB_RX_AGG_MODE{
107009 #define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER 0xF5
107010 #define WMM_NORMAL_TX_PAGE_BOUNDARY (WMM_TEST_TX_TOTAL_PAGE_NUMBER + 1) //F6
107011
107012 -#define WMM_NORMAL_PAGE_NUM_PUBQ 0xB0
107013 -#define WMM_NORMAL_PAGE_NUM_HPQ 0x29
107014 -#define WMM_NORMAL_PAGE_NUM_LPQ 0x1C
107015 -#define WMM_NORMAL_PAGE_NUM_NPQ 0x1C
107016 +#define WMM_NORMAL_PAGE_NUM_PUBQ 0x65
107017 +#define WMM_NORMAL_PAGE_NUM_HPQ 0x30
107018 +#define WMM_NORMAL_PAGE_NUM_LPQ 0x30
107019 +#define WMM_NORMAL_PAGE_NUM_NPQ 0x30
107020
107021 //-------------------------------------------------------------------------
107022 // Chip specific
107023 @@ -428,13 +430,13 @@ enum ChannelPlan{
107024 };
107025
107026 typedef struct _TxPowerInfo{
107027 - u8 CCKIndex[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107028 - u8 HT40_1SIndex[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107029 - u8 HT40_2SIndexDiff[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107030 - u8 HT20IndexDiff[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107031 - u8 OFDMIndexDiff[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107032 - u8 HT40MaxOffset[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107033 - u8 HT20MaxOffset[RF90_PATH_MAX][CHANNEL_GROUP_MAX];
107034 + u8 CCKIndex[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107035 + u8 HT40_1SIndex[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107036 + u8 HT40_2SIndexDiff[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107037 + s8 HT20IndexDiff[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107038 + u8 OFDMIndexDiff[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107039 + u8 HT40MaxOffset[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107040 + u8 HT20MaxOffset[RF_PATH_MAX][CHANNEL_GROUP_MAX];
107041 u8 TSSI_A;
107042 u8 TSSI_B;
107043 }TxPowerInfo, *PTxPowerInfo;
107044 @@ -490,6 +492,21 @@ typedef enum _RT_REGULATOR_MODE{
107045 RT_LDO_REGULATOR = 1,
107046 }RT_REGULATOR_MODE,*PRT_REGULATOR_MODE;
107047
107048 +enum c2h_id_8192c {
107049 + C2H_DBG = 0,
107050 + C2H_TSF = 1,
107051 + C2H_AP_RPT_RSP = 2,
107052 + C2H_CCX_TX_RPT = 3,
107053 + C2H_BT_RSSI = 4,
107054 + C2H_BT_OP_MODE = 5,
107055 + C2H_EXT_RA_RPT = 6,
107056 + C2H_HW_INFO_EXCH = 10,
107057 + C2H_C2H_H2C_TEST = 11,
107058 + C2H_BT_INFO = 12,
107059 + C2H_BT_MP_INFO = 15,
107060 + MAX_C2HEVENT
107061 +};
107062 +
107063 #ifdef CONFIG_PCI_HCI
107064 struct hal_data_8192ce
107065 {
107066 @@ -553,14 +570,14 @@ struct hal_data_8192ce
107067 u8 bDefaultAntenna;
107068 u8 bIQKInitialized;
107069
107070 - u8 TxPwrLevelCck[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];
107071 - u8 TxPwrLevelHT40_1S[RF90_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107072 - u8 TxPwrLevelHT40_2S[RF90_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107073 - u8 TxPwrHt20Diff[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff
107074 - u8 TxPwrLegacyHtDiff[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff
107075 + u8 TxPwrLevelCck[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
107076 + u8 TxPwrLevelHT40_1S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107077 + u8 TxPwrLevelHT40_2S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107078 + s8 TxPwrHt20Diff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff
107079 + u8 TxPwrLegacyHtDiff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff
107080 // For power group
107081 - u8 PwrGroupHT20[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];
107082 - u8 PwrGroupHT40[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];
107083 + u8 PwrGroupHT20[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
107084 + u8 PwrGroupHT40[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
107085
107086 u8 LegacyHTTxPowerDiff;// Legacy to HT rate power diff
107087
107088 @@ -672,7 +689,7 @@ typedef struct hal_data_8192ce HAL_DATA_TYPE, *PHAL_DATA_TYPE;
107089 #define IS_MULTI_FUNC_CHIP(_Adapter) (((((PHAL_DATA_TYPE)(_Adapter->HalData))->MultiFunc) & (RT_MULTI_FUNC_BT|RT_MULTI_FUNC_GPS)) ? _TRUE : _FALSE)
107090
107091 void InterruptRecognized8192CE(PADAPTER Adapter, PRT_ISR_CONTENT pIsrContent);
107092 -VOID UpdateInterruptMask8192CE(PADAPTER Adapter, u32 AddMSR, u32 RemoveMSR);
107093 +VOID UpdateInterruptMask8192CE(PADAPTER Adapter, u32 AddMSR, u32 AddMSR1, u32 RemoveMSR, u32 RemoveMSR1);
107094 #endif
107095
107096 #ifdef CONFIG_USB_HCI
107097 @@ -722,14 +739,14 @@ struct hal_data_8192cu
107098
107099 u8 bIQKInitialized;
107100
107101 - u8 TxPwrLevelCck[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];
107102 - u8 TxPwrLevelHT40_1S[RF90_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107103 - u8 TxPwrLevelHT40_2S[RF90_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107104 - u8 TxPwrHt20Diff[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff
107105 - u8 TxPwrLegacyHtDiff[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff
107106 + u8 TxPwrLevelCck[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
107107 + u8 TxPwrLevelHT40_1S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107108 + u8 TxPwrLevelHT40_2S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
107109 + s8 TxPwrHt20Diff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff
107110 + u8 TxPwrLegacyHtDiff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff
107111 // For power group
107112 - u8 PwrGroupHT20[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];
107113 - u8 PwrGroupHT40[RF90_PATH_MAX][CHANNEL_MAX_NUMBER];
107114 + u8 PwrGroupHT20[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
107115 + u8 PwrGroupHT40[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
107116
107117 u8 LegacyHTTxPowerDiff;// Legacy to HT rate power diff
107118
107119 @@ -876,12 +893,45 @@ VOID rtl8192c_FirmwareSelfReset(IN PADAPTER Adapter);
107120 int FirmwareDownload92C(IN PADAPTER Adapter,IN BOOLEAN bUsedWoWLANFw);
107121 VOID InitializeFirmwareVars92C(PADAPTER Adapter);
107122 u8 GetEEPROMSize8192C(PADAPTER Adapter);
107123 -RT_CHANNEL_DOMAIN _HalMapChannelPlan8192C(PADAPTER Adapter, u8 HalChannelPlan);
107124 +void rtl8192c_EfuseParseChnlPlan(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
107125 VERSION_8192C rtl8192c_ReadChipVersion(IN PADAPTER Adapter);
107126 void rtl8192c_ReadBluetoothCoexistInfo(PADAPTER Adapter, u8 *PROMContent, BOOLEAN AutoloadFail);
107127 -void rtl8192c_HalSetBrateCfg(PADAPTER Adapter, u8 *mBratesOS, u16 *pBrateCfg);
107128 //void rtl8192c_free_hal_data(_adapter * padapter);
107129 VOID rtl8192c_EfuseParseIDCode(PADAPTER pAdapter, u8 *hwinfo);
107130 void rtl8192c_set_hal_ops(struct hal_ops *pHalFunc);
107131
107132 +s32 c2h_id_filter_ccx_8192c(u8 id);
107133 #endif
107134 +
107135 +#ifdef CONFIG_MP_INCLUDED
107136 +
107137 +extern void Hal_SetAntenna(PADAPTER pAdapter);
107138 +extern void Hal_SetBandwidth(PADAPTER pAdapter);
107139 +
107140 +extern void Hal_SetTxPower(PADAPTER pAdapter);
107141 +extern void Hal_SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart);
107142 +extern void Hal_SetSingleToneTx ( PADAPTER pAdapter , u8 bStart );
107143 +extern void Hal_SetSingleCarrierTx (PADAPTER pAdapter, u8 bStart);
107144 +extern void Hal_SetContinuousTx (PADAPTER pAdapter, u8 bStart);
107145 +
107146 +extern void Hal_SetDataRate(PADAPTER pAdapter);
107147 +extern void Hal_SetChannel(PADAPTER pAdapter);
107148 +extern void Hal_SetAntennaPathPower(PADAPTER pAdapter);
107149 +extern s32 Hal_SetThermalMeter(PADAPTER pAdapter, u8 target_ther);
107150 +extern s32 Hal_SetPowerTracking(PADAPTER padapter, u8 enable);
107151 +extern void Hal_GetPowerTracking(PADAPTER padapter, u8 * enable);
107152 +extern void Hal_GetThermalMeter(PADAPTER pAdapter, u8 *value);
107153 +extern void Hal_mpt_SwitchRfSetting(PADAPTER pAdapter);
107154 +extern void Hal_MPT_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14);
107155 +extern void Hal_MPT_CCKTxPowerAdjustbyIndex(PADAPTER pAdapter, BOOLEAN beven);
107156 +extern void Hal_SetCCKTxPower(PADAPTER pAdapter, u8 * TxPower);
107157 +extern void Hal_SetOFDMTxPower(PADAPTER pAdapter, u8 * TxPower);
107158 +extern void Hal_TriggerRFThermalMeter(PADAPTER pAdapter);
107159 +extern u8 Hal_ReadRFThermalMeter(PADAPTER pAdapter);
107160 +extern void Hal_SetCCKContinuousTx(PADAPTER pAdapter, u8 bStart);
107161 +extern void Hal_SetOFDMContinuousTx(PADAPTER pAdapter, u8 bStart);
107162 +
107163 +#endif
107164 +
107165 +
107166 +
107167 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h b/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h
107168 index b361ba5..1ccf935 100644
107169 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h
107170 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h
107171 @@ -16,8 +16,7 @@
107172 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107173 *
107174 *
107175 -
107176 -******************************************************************************/
107177 + ******************************************************************************/
107178 #ifndef __RTL8192C_LED_H_
107179 #define __RTL8192C_LED_H_
107180
107181 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h b/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h
107182 index b532a59..d5656f5 100644
107183 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h
107184 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h
107185 @@ -16,8 +16,7 @@
107186 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107187 *
107188 *
107189 -
107190 -******************************************************************************/
107191 + ******************************************************************************/
107192 #ifndef _RTL8192C_RECV_H_
107193 #define _RTL8192C_RECV_H_
107194
107195 @@ -54,7 +53,11 @@
107196 //#define MAX_RECVBUF_SZ (32768) // 32k
107197 //#define MAX_RECVBUF_SZ (16384) //16K
107198 //#define MAX_RECVBUF_SZ (10240) //10K
107199 - #define MAX_RECVBUF_SZ (15360) // 15k < 16k
107200 + #ifdef CONFIG_PLATFORM_MSTAR
107201 + #define MAX_RECVBUF_SZ (8192) // 8K
107202 + #else
107203 + #define MAX_RECVBUF_SZ (15360) // 15k < 16k
107204 + #endif
107205 //#define MAX_RECVBUF_SZ (8192+1024) // 8K+1k
107206 #else
107207 #define MAX_RECVBUF_SZ (4000) // about 4K
107208 @@ -62,11 +65,11 @@
107209 #endif
107210
107211 #elif defined(CONFIG_PCI_HCI)
107212 -#ifndef CONFIG_MINIMAL_MEMORY_USAGE
107213 - #define MAX_RECVBUF_SZ (9100)
107214 -#else
107215 +//#ifndef CONFIG_MINIMAL_MEMORY_USAGE
107216 +// #define MAX_RECVBUF_SZ (9100)
107217 +//#else
107218 #define MAX_RECVBUF_SZ (4000) // about 4K
107219 -#endif
107220 +//#endif
107221
107222 #define RX_MPDU_QUEUE 0
107223 #define RX_CMD_QUEUE 1
107224 @@ -167,17 +170,15 @@ typedef struct _INTERRUPT_MSG_FORMAT_EX{
107225 void rtl8192cu_init_recvbuf(_adapter *padapter, struct recv_buf *precvbuf);
107226 int rtl8192cu_init_recv_priv(_adapter * padapter);
107227 void rtl8192cu_free_recv_priv(_adapter * padapter);
107228 -void rtl8192cu_update_recvframe_attrib_from_recvstat(union recv_frame *precvframe, struct recv_stat *prxstat);
107229 #endif
107230
107231 #ifdef CONFIG_PCI_HCI
107232 int rtl8192ce_init_recv_priv(_adapter * padapter);
107233 void rtl8192ce_free_recv_priv(_adapter * padapter);
107234 -void rtl8192ce_update_recvframe_attrib_from_recvstat(union recv_frame *precvframe, struct recv_stat *prxstat);
107235 #endif
107236
107237 -void rtl8192c_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat);
107238 -void rtl8192c_process_phy_info(_adapter *padapter, void *prframe);
107239 +void rtl8192c_translate_rx_signal_stuff(union recv_frame *precvframe, struct phy_stat *pphy_info);
107240 +void rtl8192c_query_rx_desc_status(union recv_frame *precvframe, struct recv_stat *pdesc);
107241
107242 #endif
107243
107244 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h b/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h
107245 index d3c4b67..26c678a 100644
107246 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h
107247 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h
107248 @@ -16,8 +16,7 @@
107249 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107250 *
107251 *
107252 -
107253 -******************************************************************************/
107254 + ******************************************************************************/
107255 /******************************************************************************
107256 *
107257 *
107258 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h b/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h
107259 index 27e0f0e..8ff13a7 100644
107260 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h
107261 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h
107262 @@ -16,8 +16,7 @@
107263 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107264 *
107265 *
107266 -
107267 -******************************************************************************/
107268 + ******************************************************************************/
107269 #ifndef __RTL8192C_SPEC_H__
107270 #define __RTL8192C_SPEC_H__
107271
107272 @@ -115,7 +114,9 @@
107273 #define REG_GPIO_IO_SEL_2 0x0062 // RTL8723 WIFI/BT/GPS Multi-Function GPIO Select.
107274 #define REG_MULTI_FUNC_CTRL 0x0068 // RTL8723 WIFI/BT/GPS Multi-Function control source.
107275 #define REG_MCUFWDL 0x0080
107276 +#ifdef CONFIG_WOWLAN
107277 #define REG_WOWLAN_REASON 0x0081
107278 +#endif //CONFIG_WOWLAN
107279 #define REG_HMEBOX_EXT_0 0x0088
107280 #define REG_HMEBOX_EXT_1 0x008A
107281 #define REG_HMEBOX_EXT_2 0x008C
107282 @@ -264,6 +265,12 @@
107283 #define REG_RD_RESP_PKT_TH 0x0463
107284 #define REG_INIRTS_RATE_SEL 0x0480
107285 #define REG_INIDATA_RATE_SEL 0x0484
107286 +
107287 +//#define REG_FW_TSF_SYNC_CNT 0x04A0
107288 +#define REG_FW_RESET_TSF_CNT_1 0x05FC
107289 +#define REG_FW_RESET_TSF_CNT_0 0x05FD
107290 +#define REG_FW_BCN_DIS_CNT 0x05FE
107291 +
107292 #define REG_POWER_STATUS 0x04A4
107293 #define REG_POWER_STAGE1 0x04B4
107294 #define REG_POWER_STAGE2 0x04B8
107295 @@ -300,6 +307,7 @@
107296 #define REG_SIFS_OFDM 0x0516
107297 #define REG_SIFS_CTX 0x0514
107298 #define REG_SIFS_TRX 0x0516
107299 +#define REG_TSFTR_SYN_OFFSET 0x0518
107300 #define REG_AGGR_BREAK_TIME 0x051A
107301 #define REG_SLOT 0x051B
107302 #define REG_TX_PTCL_CTRL 0x0520
107303 @@ -322,7 +330,9 @@
107304 #define REG_RXTSF_OFFSET_CCK 0x055E
107305 #define REG_RXTSF_OFFSET_OFDM 0x055F
107306 #define REG_TSFTR 0x0560
107307 +#define REG_TSFTR1 0x0568
107308 #define REG_INIT_TSFTR 0x0564
107309 +#define REG_ATIMWND_1 0x0570
107310 #define REG_PSTIMER 0x0580
107311 #define REG_TIMER0 0x0584
107312 #define REG_TIMER1 0x0588
107313 @@ -397,6 +407,9 @@
107314 #define REG_BT_COEX_TABLE 0x06C0
107315 #define REG_WMAC_RESP_TXINFO 0x06D8
107316
107317 +#define REG_MACID1 0x0700
107318 +#define REG_BSSID1 0x0708
107319 +
107320
107321 //-----------------------------------------------------
107322 //
107323 @@ -594,53 +607,6 @@ Default: 00b.
107324 #define RATR_MCS14 0x04000000
107325 #define RATR_MCS15 0x08000000
107326
107327 -
107328 -// NOTE: For 92CU - Ziv
107329 -//CCK
107330 -#define RATE_1M BIT(0)
107331 -#define RATE_2M BIT(1)
107332 -#define RATE_5_5M BIT(2)
107333 -#define RATE_11M BIT(3)
107334 -//OFDM
107335 -#define RATE_6M BIT(4)
107336 -#define RATE_9M BIT(5)
107337 -#define RATE_12M BIT(6)
107338 -#define RATE_18M BIT(7)
107339 -#define RATE_24M BIT(8)
107340 -#define RATE_36M BIT(9)
107341 -#define RATE_48M BIT(10)
107342 -#define RATE_54M BIT(11)
107343 -//MCS 1 Spatial Stream
107344 -#define RATE_MCS0 BIT(12)
107345 -#define RATE_MCS1 BIT(13)
107346 -#define RATE_MCS2 BIT(14)
107347 -#define RATE_MCS3 BIT(15)
107348 -#define RATE_MCS4 BIT(16)
107349 -#define RATE_MCS5 BIT(17)
107350 -#define RATE_MCS6 BIT(18)
107351 -#define RATE_MCS7 BIT(19)
107352 -//MCS 2 Spatial Stream
107353 -#define RATE_MCS8 BIT(20)
107354 -#define RATE_MCS9 BIT(21)
107355 -#define RATE_MCS10 BIT(22)
107356 -#define RATE_MCS11 BIT(23)
107357 -#define RATE_MCS12 BIT(24)
107358 -#define RATE_MCS13 BIT(25)
107359 -#define RATE_MCS14 BIT(26)
107360 -#define RATE_MCS15 BIT(27)
107361 -
107362 -
107363 -
107364 -
107365 -// ALL CCK Rate
107366 -#define RATE_ALL_CCK RATR_1M|RATR_2M|RATR_55M|RATR_11M
107367 -#define RATE_ALL_OFDM_AG RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\
107368 - RATR_36M|RATR_48M|RATR_54M
107369 -#define RATE_ALL_OFDM_1SS RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\
107370 - RATR_MCS4|RATR_MCS5|RATR_MCS6 |RATR_MCS7
107371 -#define RATE_ALL_OFDM_2SS RATR_MCS8|RATR_MCS9 |RATR_MCS10|RATR_MCS11|\
107372 - RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15
107373 -
107374 //----------------------------------------------------------------------------
107375 // 8192C BW_OPMODE bits (Offset 0x203, 8bit)
107376 //----------------------------------------------------------------------------
107377 @@ -724,6 +690,7 @@ Default: 00b.
107378 #define IMR_TX_MASK (IMR_VODOK|IMR_VIDOK|IMR_BEDOK|IMR_BKDOK|IMR_MGNTDOK|IMR_HIGHDOK|IMR_BDOK)
107379
107380 // 13. Host Interrupt Status Extension Register (Offset: 0x012C-012Eh)
107381 +#define IMR_BcnInt_E BIT12
107382 #define IMR_TXERR BIT11
107383 #define IMR_RXERR BIT10
107384 #define IMR_C2HCMD BIT9
107385 @@ -1697,7 +1664,6 @@ Current IOREG MAP
107386 #define EN_MBSSID BIT(1)
107387 #define EN_TXBCN_RPT BIT(2)
107388 #define EN_BCN_FUNCTION BIT(3)
107389 -
107390 // The same function but different bit field.
107391 #define DIS_TSF_UDT0_NORMAL_CHIP BIT(4)
107392 #define DIS_TSF_UDT0_TEST_CHIP BIT(5)
107393 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h b/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h
107394 index dace413..20e88b5 100644
107395 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h
107396 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h
107397 @@ -16,39 +16,17 @@
107398 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107399 *
107400 *
107401 -
107402 -******************************************************************************/
107403 + ******************************************************************************/
107404 #ifndef _RTL8192C_SRESET_C_
107405 #define _RTL8192C_SRESET_C_
107406
107407 #include <drv_conf.h>
107408 #include <osdep_service.h>
107409 #include <drv_types.h>
107410 +#include <rtw_sreset.h>
107411
107412 #ifdef DBG_CONFIG_ERROR_DETECT
107413 -#define WIFI_STATUS_SUCCESS 0
107414 -#define USB_VEN_REQ_CMD_FAIL BIT0
107415 -#define USB_READ_PORT_FAIL BIT1
107416 -#define USB_WRITE_PORT_FAIL BIT2
107417 -#define WIFI_MAC_TXDMA_ERROR BIT3
107418 -#define WIFI_TX_HANG BIT4
107419 -#define WIFI_RX_HANG BIT5
107420 -#define WIFI_IF_NOT_EXIST BIT6
107421 -
107422 -struct sreset_priv {
107423 - _mutex silentreset_mutex;
107424 - u8 silent_reset_inprogress;
107425 - u8 Wifi_Error_Status;
107426 - unsigned long last_tx_time;
107427 - unsigned long last_tx_complete_time;
107428 -};
107429 -
107430 -
107431 -extern void rtl8192c_sreset_init_value(_adapter *padapter);
107432 -extern void rtl8192c_sreset_reset_value(_adapter *padapter);
107433 -extern void rtl8192c_silentreset_for_specific_platform(_adapter *padapter);
107434 extern void rtl8192c_sreset_xmit_status_check(_adapter *padapter);
107435 extern void rtl8192c_sreset_linked_status_check(_adapter *padapter);
107436 -extern u8 rtl8192c_sreset_get_wifi_status(_adapter *padapter);
107437 #endif
107438 #endif
107439 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h b/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h
107440 index efb5f99..7d2059d 100644
107441 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h
107442 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h
107443 @@ -16,22 +16,10 @@
107444 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107445 *
107446 *
107447 -
107448 -******************************************************************************/
107449 + ******************************************************************************/
107450 #ifndef _RTL8192C_XMIT_H_
107451 #define _RTL8192C_XMIT_H_
107452
107453 -#define VO_QUEUE_INX 0
107454 -#define VI_QUEUE_INX 1
107455 -#define BE_QUEUE_INX 2
107456 -#define BK_QUEUE_INX 3
107457 -#define BCN_QUEUE_INX 4
107458 -#define MGT_QUEUE_INX 5
107459 -#define HIGH_QUEUE_INX 6
107460 -#define TXCMD_QUEUE_INX 7
107461 -
107462 -#define HW_QUEUE_ENTRY 8
107463 -
107464 //
107465 // Queue Select Value in TxDesc
107466 //
107467 @@ -44,6 +32,51 @@
107468 #define QSLT_MGNT 0x12
107469 #define QSLT_CMD 0x13
107470
107471 +struct txrpt_ccx_8192c {
107472 + /* offset 0 */
107473 + u8 retry_cnt:6;
107474 + u8 rsvd_0:2;
107475 +
107476 + /* offset 1 */
107477 + u8 rts_retry_cnt:6;
107478 + u8 rsvd_1:2;
107479 +
107480 + /* offset 2 */
107481 + u8 ccx_qtime0;
107482 + u8 ccx_qtime1;
107483 +
107484 + /* offset 4 */
107485 + u8 missed_pkt_num:5;
107486 + u8 rsvd_4:3;
107487 +
107488 + /* offset 5 */
107489 + u8 mac_id:5;
107490 + u8 des1_fragssn:3;
107491 +
107492 + /* offset 6 */
107493 + u8 rpt_pkt_num:5;
107494 + u8 pkt_drop:1;
107495 + u8 lifetime_over:1;
107496 + u8 retry_over:1;
107497 +
107498 + /* offset 7*/
107499 + u8 edca_tx_queue:4;
107500 + u8 rsvd_7:1;
107501 + u8 bmc:1;
107502 + u8 pkt_ok:1;
107503 + u8 int_ccx:1;
107504 +};
107505 +
107506 +#define txrpt_ccx_qtime_8192c(txrpt_ccx) ((txrpt_ccx)->ccx_qtime0+((txrpt_ccx)->ccx_qtime1<<8))
107507 +
107508 +#ifdef CONFIG_XMIT_ACK
107509 +void dump_txrpt_ccx_8192c(void *buf);
107510 +void handle_txrpt_ccx_8192c(_adapter *adapter, void *buf);
107511 +#else
107512 +#define dump_txrpt_ccx_8192c(buf) do {} while(0)
107513 +#define handle_txrpt_ccx_8192c(adapter, buf) do {} while(0)
107514 +#endif
107515 +
107516 #ifdef CONFIG_USB_HCI
107517
107518 #ifdef CONFIG_USB_TX_AGGREGATION
107519 @@ -58,10 +91,12 @@ void rtl8192cu_cal_txdesc_chksum(struct tx_desc *ptxdesc);
107520
107521 s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
107522
107523 -void rtl8192cu_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
107524 +s32 rtl8192cu_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
107525
107526 s32 rtl8192cu_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe);
107527
107528 +s32 rtl8192cu_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
107529 +
107530 #ifdef CONFIG_HOSTAPD_MLME
107531 s32 rtl8192cu_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt);
107532 #endif
107533 @@ -77,10 +112,13 @@ struct xmit_buf *rtl8192ce_dequeue_xmitbuf(struct rtw_tx_ring *ring);
107534
107535 void rtl8192ce_xmitframe_resume(_adapter *padapter);
107536
107537 -void rtl8192ce_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
107538 +s32 rtl8192ce_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
107539
107540 s32 rtl8192ce_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe);
107541
107542 +s32 rtl8192ce_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
107543 +
107544 +
107545 #ifdef CONFIG_HOSTAPD_MLME
107546 s32 rtl8192ce_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt);
107547 #endif
107548 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h b/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h
107549 index cb414a1..ad7e783 100644
107550 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h
107551 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h
107552 @@ -16,8 +16,7 @@
107553 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107554 *
107555 *
107556 -
107557 -******************************************************************************/
107558 + ******************************************************************************/
107559 #ifndef __RTL8192D_CMD_H_
107560 #define __RTL8192D_CMD_H_
107561
107562 @@ -75,12 +74,18 @@ typedef enum _RTL8192D_H2C_CMD
107563 H2C_P2P_PS_OFFLOAD = 8,
107564 H2C_MAC_MODE_SEL = 9,
107565 H2C_PWRM=15,
107566 +#ifdef CONFIG_WOWLAN
107567 H2C_WO_WLAN_CMD = 20, // Wake on Wlan.
107568 +#endif // CONFIG_WOWLAN
107569 H2C_P2P_PS_CTW_CMD = 24,
107570 H2C_PathDiv = 26, //PathDiv--NeilChen--2011.07.15
107571 +#ifdef CONFIG_WOWLAN
107572 KEEP_ALIVE_CONTROL_CMD=31, //keep alive for wake on wlan
107573 DISCONNECT_DECISION_CTRL_CMD=32,
107574 REMOTE_WAKE_CTRL_CMD=34,
107575 +#endif // CONFIG_WOWLAN
107576 + H2C_92D_TSF_SYNC=36,
107577 + H2C_92D_RESET_TSF = 43,
107578 H2C_CMD_MAX
107579 }RTL8192D_H2C_CMD;
107580
107581 @@ -98,12 +103,14 @@ void rtl8192d_set_FwPwrMode_cmd(_adapter*padapter, u8 Mode);
107582 void rtl8192d_set_FwJoinBssReport_cmd(_adapter* padapter, u8 mstatus);
107583 u8 rtl8192d_set_rssi_cmd(_adapter*padapter, u8 *param);
107584 u8 rtl8192d_set_raid_cmd(_adapter*padapter, u32 mask, u8 arg);
107585 -void rtl8192d_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg, u8 mac_id);
107586 +void rtl8192d_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg);
107587 #ifdef CONFIG_P2P
107588 void rtl8192d_set_p2p_ps_offload_cmd(_adapter* padapter, u8 p2p_ps_state);
107589 #endif //CONFIG_P2P
107590
107591 -#endif
107592 +#ifdef CONFIG_TSF_RESET_OFFLOAD
107593 +int reset_tsf(PADAPTER Adapter, u8 reset_port );
107594 +#endif // CONFIG_TSF_RESET_OFFLOAD
107595
107596 #ifdef CONFIG_WOWLAN
107597 typedef struct _SETWOWLAN_PARM{
107598 @@ -130,4 +137,6 @@ void rtl8192d_set_wowlan_cmd(_adapter* padapter);
107599 void SetFwRelatedForWoWLAN8192DU(_adapter* padapter,u8 bHostIsGoingtoSleep);
107600 #endif // CONFIG_WOWLAN
107601
107602 +#endif // __RTL8192D_CMD_H_
107603 +
107604
107605 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h b/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h
107606 index ce674f8..ab5e5f7 100644
107607 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h
107608 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h
107609 @@ -16,7 +16,7 @@
107610 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107611 *
107612 *
107613 -******************************************************************************/
107614 + ******************************************************************************/
107615 #ifndef __RTL8192D_DM_H__
107616 #define __RTL8192D_DM_H__
107617 //============================================================
107618 @@ -32,15 +32,6 @@
107619
107620 extern u32 EDCAParam[maxAP][3] ;
107621
107622 -#define OFDM_TABLE_SIZE 37
107623 -#define OFDM_TABLE_SIZE_92D 43
107624 -#define CCK_TABLE_SIZE 33
107625 -extern u32 OFDMSwingTable[OFDM_TABLE_SIZE_92D] ;
107626 -
107627 -extern u8 CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];
107628 -
107629 -extern u8 CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8];
107630 -
107631 //============================================================
107632 // structure and define
107633 //============================================================
107634 @@ -101,7 +92,9 @@ typedef struct _Dynamic_Initial_Gain_Threshold_
107635 u8 LargeFAHit;
107636 u8 ForbiddenIGI;
107637 u32 Recover_cnt;
107638 + u8 rx_gain_range_min_nolink;
107639 }DIG_T,*pDIG_T;
107640 +
107641 typedef enum tag_Dynamic_Init_Gain_Operation_Type_Definition
107642 {
107643 DIG_TYPE_THRESH_HIGH = 0,
107644 @@ -176,8 +169,8 @@ typedef enum tag_DIG_Connect_Definition
107645 #define DM_DIG_FA_TH2 0x400//0x200
107646 //this is for 92d
107647 #define DM_DIG_FA_TH0_92D 0x100
107648 -#define DM_DIG_FA_TH1_92D 0x400
107649 -#define DM_DIG_FA_TH2_92D 0x600
107650 +#define DM_DIG_FA_TH1_92D 0x150
107651 +#define DM_DIG_FA_TH2_92D 0x250
107652
107653 #define DM_DIG_BACKOFF_MAX 12
107654 #define DM_DIG_BACKOFF_MIN (-4)
107655 @@ -304,6 +297,15 @@ struct dm_priv
107656 int EntryMaxUndecoratedSmoothedPWDB;
107657 int MinUndecoratedPWDBForDM;
107658 int LastMinUndecoratedPWDBForDM;
107659 +#ifdef CONFIG_DUALMAC_CONCURRENT
107660 + int RssiValMinForAnotherMacOfDMSP;
107661 + u32 CurDigValueForAnotherMacOfDMSP;
107662 + BOOLEAN bWriteDigForAnotherMacOfDMSP;
107663 + BOOLEAN bChangeCCKPDStateForAnotherMacOfDMSP;
107664 + u8 CurCCKPDStateForAnotherMacOfDMSP;
107665 + BOOLEAN bChangeTxHighPowerLvlForAnotherMacOfDMSP;
107666 + u8 CurTxHighLvlForAnotherMacOfDMSP;
107667 +#endif
107668
107669 //for High Power
107670 u8 bDynamicTxPowerEnable;
107671 @@ -364,17 +366,6 @@ struct dm_priv
107672
107673 SWAT_T DM_SWAT_Table;
107674
107675 - //Neil Chen----2011--06--23-----
107676 - //3 Path Diversity
107677 - BOOLEAN bPathDiv_Enable; //For 92D Non-interrupt Antenna Diversity by Neil ,add by wl.2011.07.19
107678 - BOOLEAN RSSI_test;
107679 - s32 RSSI_sum_A;
107680 - s32 RSSI_cnt_A;
107681 - s32 RSSI_sum_B;
107682 - s32 RSSI_cnt_B;
107683 - struct sta_info *RSSI_target;
107684 - _timer PathDivSwitchTimer;
107685 -
107686 //for TxPwrTracking
107687 int RegE94;
107688 int RegE9C;
107689 @@ -392,6 +383,21 @@ struct dm_priv
107690
107691 // Add for Reading Initial Data Rate SEL Register 0x484 during watchdog. Using for fill tx desc. 2011.3.21 by Thomas
107692 u8 INIDATA_RATE[32];
107693 +
107694 +#ifdef CONFIG_DM_ADAPTIVITY
107695 + /* Ported from ODM, for ESTI Adaptivity test */
107696 + s8 TH_L2H_ini;
107697 + s8 TH_EDCCA_HL_diff;
107698 + s8 IGI_Base;
107699 + u8 IGI_target;
107700 + bool ForceEDCCA;
107701 + u8 AdapEn_RSSI;
107702 + s8 Force_TH_H;
107703 + s8 Force_TH_L;
107704 + u8 IGI_LowerBound;
107705 +
107706 + bool bPreEdccaEnable;
107707 +#endif
107708 };
107709
107710
107711 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h b/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h
107712 index 30f2955..1ab5f98 100644
107713 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h
107714 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h
107715 @@ -20,6 +20,7 @@
107716 #ifndef __RTL8192D_HAL_H__
107717 #define __RTL8192D_HAL_H__
107718
107719 +#include "hal_com.h"
107720 #include "rtl8192d_spec.h"
107721 #include "Hal8192DPhyReg.h"
107722 #include "Hal8192DPhyCfg.h"
107723 @@ -29,6 +30,136 @@
107724 #include "rtl8192d_xmit.h"
107725 #include "rtl8192d_cmd.h"
107726
107727 +/*---------------------------Define Local Constant---------------------------*/
107728 +/* Channel switch:The size of command tables for switch channel*/
107729 +#define MAX_PRECMD_CNT 16
107730 +#define MAX_RFDEPENDCMD_CNT 16
107731 +#define MAX_POSTCMD_CNT 16
107732 +
107733 +#define MAX_DOZE_WAITING_TIMES_9x 64
107734 +
107735 +#define MAX_RF_IMR_INDEX 12
107736 +#define MAX_RF_IMR_INDEX_NORMAL 13
107737 +#define RF_REG_NUM_for_C_CUT_5G 6
107738 +#define RF_REG_NUM_for_C_CUT_5G_internalPA 7
107739 +#define RF_REG_NUM_for_C_CUT_2G 5
107740 +#define RF_CHNL_NUM_5G 19
107741 +#define RF_CHNL_NUM_5G_40M 17
107742 +#define TARGET_CHNL_NUM_5G 221
107743 +#define TARGET_CHNL_NUM_2G 14
107744 +#define TARGET_CHNL_NUM_2G_5G 59
107745 +#define CV_CURVE_CNT 64
107746 +
107747 +//static u32 RF_REG_FOR_5G_SWCHNL[MAX_RF_IMR_INDEX]={0,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x38,0x39,0x0};
107748 +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};
107749 +
107750 +static u8 RF_REG_for_C_CUT_5G[RF_REG_NUM_for_C_CUT_5G] =
107751 + {RF_SYN_G1, RF_SYN_G2, RF_SYN_G3, RF_SYN_G4, RF_SYN_G5, RF_SYN_G6};
107752 +
107753 +static u8 RF_REG_for_C_CUT_5G_internalPA[RF_REG_NUM_for_C_CUT_5G_internalPA] =
107754 + {0x0B, 0x48, 0x49, 0x4B, 0x03, 0x04, 0x0E};
107755 +static u8 RF_REG_for_C_CUT_2G[RF_REG_NUM_for_C_CUT_2G] =
107756 + {RF_SYN_G1, RF_SYN_G2, RF_SYN_G3, RF_SYN_G7, RF_SYN_G8};
107757 +
107758 +#if DBG
107759 +static u32 RF_REG_MASK_for_C_CUT_2G[RF_REG_NUM_for_C_CUT_2G] =
107760 + {BIT19|BIT18|BIT17|BIT14|BIT1, BIT10|BIT9,
107761 + BIT18|BIT17|BIT16|BIT1, BIT2|BIT1,
107762 + BIT15|BIT14|BIT13|BIT12|BIT11};
107763 +#endif //amy, temp remove
107764 +static u8 RF_CHNL_5G[RF_CHNL_NUM_5G] =
107765 + {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140};
107766 +static u8 RF_CHNL_5G_40M[RF_CHNL_NUM_5G_40M] =
107767 + {38,42,46,50,54,58,62,102,106,110,114,118,122,126,130,134,138};
107768 +
107769 +static u32 RF_REG_Param_for_C_CUT_5G[5][RF_REG_NUM_for_C_CUT_5G] = {
107770 + {0xE43BE, 0xFC638, 0x77C0A, 0xDE471, 0xd7110, 0x8EB04},
107771 + {0xE43BE, 0xFC078, 0xF7C1A, 0xE0C71, 0xD7550, 0xAEB04},
107772 + {0xE43BF, 0xFF038, 0xF7C0A, 0xDE471, 0xE5550, 0xAEB04},
107773 + {0xE43BF, 0xFF079, 0xF7C1A, 0xDE471, 0xE5550, 0xAEB04},
107774 + {0xE43BF, 0xFF038, 0xF7C1A, 0xDE471, 0xd7550, 0xAEB04}};
107775 +
107776 +static u32 RF_REG_Param_for_C_CUT_2G[3][RF_REG_NUM_for_C_CUT_2G] = {
107777 + {0x643BC, 0xFC038, 0x77C1A, 0x41289, 0x01840},
107778 + {0x643BC, 0xFC038, 0x07C1A, 0x41289, 0x01840},
107779 + {0x243BC, 0xFC438, 0x07C1A, 0x4128B, 0x0FC41}};
107780 +
107781 +#if SWLCK == 1
107782 +static u32 RF_REG_SYN_G4_for_C_CUT_2G = 0xD1C31&0x7FF;
107783 +#endif
107784 +
107785 +static u32 RF_REG_Param_for_C_CUT_5G_internalPA[3][RF_REG_NUM_for_C_CUT_5G_internalPA] = {
107786 + {0x01a00, 0x40443, 0x00eb5, 0x89bec, 0x94a12, 0x94a12, 0x94a12},
107787 + {0x01800, 0xc0443, 0x00730, 0x896ee, 0x94a52, 0x94a52, 0x94a52},
107788 + {0x01800, 0xc0443, 0x00730, 0x896ee, 0x94a12, 0x94a12, 0x94a12}};
107789 +
107790 +
107791 +
107792 +//[mode][patha+b][reg]
107793 +static u32 RF_IMR_Param_Normal[1][3][MAX_RF_IMR_INDEX_NORMAL]={{
107794 + {0x70000,0x00ff0,0x4400f,0x00ff0,0x0,0x0,0x0,0x0,0x0,0x64888,0xe266c,0x00090,0x22fff},// channel 1-14.
107795 + {0x70000,0x22880,0x4470f,0x55880,0x00070, 0x88000, 0x0,0x88080,0x70000,0x64a82,0xe466c,0x00090,0x32c9a}, //path 36-64
107796 + {0x70000,0x44880,0x4477f,0x77880,0x00070, 0x88000, 0x0,0x880b0,0x0,0x64b82,0xe466c,0x00090,0x32c9a} //100 -165
107797 +}
107798 +};
107799 +
107800 +//static u32 CurveIndex_5G[TARGET_CHNL_NUM_5G]={0};
107801 +//static u32 CurveIndex_2G[TARGET_CHNL_NUM_2G]={0};
107802 +static u32 CurveIndex[TARGET_CHNL_NUM_2G_5G]={0};
107803 +
107804 +static u32 TargetChnl_5G[TARGET_CHNL_NUM_5G] = {
107805 +25141, 25116, 25091, 25066, 25041,
107806 +25016, 24991, 24966, 24941, 24917,
107807 +24892, 24867, 24843, 24818, 24794,
107808 +24770, 24765, 24721, 24697, 24672,
107809 +24648, 24624, 24600, 24576, 24552,
107810 +24528, 24504, 24480, 24457, 24433,
107811 +24409, 24385, 24362, 24338, 24315,
107812 +24291, 24268, 24245, 24221, 24198,
107813 +24175, 24151, 24128, 24105, 24082,
107814 +24059, 24036, 24013, 23990, 23967,
107815 +23945, 23922, 23899, 23876, 23854,
107816 +23831, 23809, 23786, 23764, 23741,
107817 +23719, 23697, 23674, 23652, 23630,
107818 +23608, 23586, 23564, 23541, 23519,
107819 +23498, 23476, 23454, 23432, 23410,
107820 +23388, 23367, 23345, 23323, 23302,
107821 +23280, 23259, 23237, 23216, 23194,
107822 +23173, 23152, 23130, 23109, 23088,
107823 +23067, 23046, 23025, 23003, 22982,
107824 +22962, 22941, 22920, 22899, 22878,
107825 +22857, 22837, 22816, 22795, 22775,
107826 +22754, 22733, 22713, 22692, 22672,
107827 +22652, 22631, 22611, 22591, 22570,
107828 +22550, 22530, 22510, 22490, 22469,
107829 +22449, 22429, 22409, 22390, 22370,
107830 +22350, 22336, 22310, 22290, 22271,
107831 +22251, 22231, 22212, 22192, 22173,
107832 +22153, 22134, 22114, 22095, 22075,
107833 +22056, 22037, 22017, 21998, 21979,
107834 +21960, 21941, 21921, 21902, 21883,
107835 +21864, 21845, 21826, 21807, 21789,
107836 +21770, 21751, 21732, 21713, 21695,
107837 +21676, 21657, 21639, 21620, 21602,
107838 +21583, 21565, 21546, 21528, 21509,
107839 +21491, 21473, 21454, 21436, 21418,
107840 +21400, 21381, 21363, 21345, 21327,
107841 +21309, 21291, 21273, 21255, 21237,
107842 +21219, 21201, 21183, 21166, 21148,
107843 +21130, 21112, 21095, 21077, 21059,
107844 +21042, 21024, 21007, 20989, 20972,
107845 +25679, 25653, 25627, 25601, 25575,
107846 +25549, 25523, 25497, 25471, 25446,
107847 +25420, 25394, 25369, 25343, 25318,
107848 +25292, 25267, 25242, 25216, 25191,
107849 +25166 };
107850 +
107851 +static u32 TargetChnl_2G[TARGET_CHNL_NUM_2G] = { // channel 1~14
107852 +26084, 26030, 25976, 25923, 25869, 25816, 25764,
107853 +25711, 25658, 25606, 25554, 25502, 25451, 25328
107854 +};
107855 +
107856 +
107857 #ifdef CONFIG_PCI_HCI
107858 #include <pci_ops.h>
107859 #include "Hal8192DEHWImg.h"
107860 @@ -79,7 +210,7 @@
107861 #define Rtl8192D_RadioB_2T_intPAArray Rtl8192DERadioB_2T_intPAArray
107862
107863 // Array length
107864 - #define Rtl8192D_FwImageArrayLength Rtl8192DEImgArrayLength
107865 + #define Rtl8192D_FwImageArrayLength Rtl8192DEImgArrayLength
107866 #define Rtl8192D_MAC_ArrayLength Rtl8192DEMAC_2T_ArrayLength
107867 #define Rtl8192D_AGCTAB_5GArrayLength Rtl8192DEAGCTAB_5GArrayLength
107868 #define Rtl8192D_AGCTAB_2GArrayLength Rtl8192DEAGCTAB_2GArrayLength
107869 @@ -201,8 +332,9 @@
107870 (le16_to_cpu(_pFwHdr->Signature)&0xFFFF) == 0x92D2 ||\
107871 (le16_to_cpu(_pFwHdr->Signature)&0xFFFF) == 0x92D3 )
107872
107873 -#define FW_8192D_SIZE 0x8000
107874 +#define FW_8192D_SIZE 0x8020 // Max FW len = 32k + 32(FW header length).
107875 #define FW_8192D_START_ADDRESS 0x1000
107876 +#define FW_8192D_END_ADDRESS 0x1FFF
107877
107878 #define MAX_PAGE_SIZE 4096 // @ page : 4k bytes
107879
107880 @@ -344,7 +476,7 @@ typedef enum _USB_RX_AGG_MODE{
107881
107882 // For Test Chip Setting
107883 // (HPQ + LPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER
107884 -#define TEST_PAGE_NUM_PUBQ 0x89
107885 +#define TEST_PAGE_NUM_PUBQ_92DU 0x89
107886 #define TX_TOTAL_PAGE_NUMBER_92D_DUAL_MAC 0x7A
107887 #define NORMAL_PAGE_NUM_PUBQ_92D_DUAL_MAC 0x5A
107888 #define NORMAL_PAGE_NUM_HPQ_92D_DUAL_MAC 0x10
107889 @@ -366,16 +498,16 @@ typedef enum _USB_RX_AGG_MODE{
107890 #define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER 0xF5
107891 #define WMM_NORMAL_TX_PAGE_BOUNDARY (WMM_TEST_TX_TOTAL_PAGE_NUMBER + 1) //F6
107892
107893 -#define WMM_NORMAL_PAGE_NUM_PUBQ 0xB0
107894 -#define WMM_NORMAL_PAGE_NUM_HPQ 0x29
107895 -#define WMM_NORMAL_PAGE_NUM_LPQ 0x1C
107896 -#define WMM_NORMAL_PAGE_NUM_NPQ 0x1C
107897 -
107898 #define WMM_NORMAL_PAGE_NUM_PUBQ_92D 0X65//0x82
107899 #define WMM_NORMAL_PAGE_NUM_HPQ_92D 0X30//0x29
107900 #define WMM_NORMAL_PAGE_NUM_LPQ_92D 0X30
107901 #define WMM_NORMAL_PAGE_NUM_NPQ_92D 0X30
107902
107903 +#define WMM_NORMAL_PAGE_NUM_PUBQ_92D_DUAL_MAC 0X32
107904 +#define WMM_NORMAL_PAGE_NUM_HPQ_92D_DUAL_MAC 0X18
107905 +#define WMM_NORMAL_PAGE_NUM_LPQ_92D_DUAL_MAC 0X18
107906 +#define WMM_NORMAL_PAGE_NUM_NPQ_92D_DUAL_MAC 0X18
107907 +
107908 //-------------------------------------------------------------------------
107909 // Chip specific
107910 //-------------------------------------------------------------------------
107911 @@ -524,6 +656,22 @@ typedef enum _PA_MODE {
107912 PA_MODE_INTERNAL_SPDT = 0x02
107913 } PA_MODE;
107914
107915 +/* Copy from rtl8192c */
107916 +enum c2h_id_8192d {
107917 + C2H_DBG = 0,
107918 + C2H_TSF = 1,
107919 + C2H_AP_RPT_RSP = 2,
107920 + C2H_CCX_TX_RPT = 3,
107921 + C2H_BT_RSSI = 4,
107922 + C2H_BT_OP_MODE = 5,
107923 + C2H_EXT_RA_RPT = 6,
107924 + C2H_HW_INFO_EXCH = 10,
107925 + C2H_C2H_H2C_TEST = 11,
107926 + C2H_BT_INFO = 12,
107927 + C2H_BT_MP_INFO = 15,
107928 + MAX_C2HEVENT
107929 +};
107930 +
107931 #ifdef CONFIG_PCI_HCI
107932 struct hal_data_8192de
107933 {
107934 @@ -658,8 +806,6 @@ struct hal_data_8192de
107935
107936 BOOLEAN bEarlyModeEnable;
107937
107938 - ATOMIC_T IQKRdyForXmit;// Tx must wait for IQK done
107939 -
107940 #if 1
107941 IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];
107942 #else
107943 @@ -857,8 +1003,6 @@ struct hal_data_8192du
107944
107945 BOOLEAN bEarlyModeEnable;
107946
107947 - ATOMIC_T IQKRdyForXmit;// Tx must wait for IQK done
107948 -
107949 #if 1
107950 IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];
107951 #else
107952 @@ -935,11 +1079,10 @@ typedef struct hal_data_8192du HAL_DATA_TYPE, *PHAL_DATA_TYPE;
107953 int FirmwareDownload92D(IN PADAPTER Adapter,IN BOOLEAN bUsedWoWLANFw);
107954 VOID rtl8192d_FirmwareSelfReset(IN PADAPTER Adapter);
107955 void rtl8192d_ReadChipVersion(IN PADAPTER Adapter);
107956 -VOID rtl8192d_ReadChannelPlan(PADAPTER Adapter, u8* PROMContent, BOOLEAN AutoLoadFail);
107957 +VOID rtl8192d_EfuseParseChnlPlan(PADAPTER Adapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
107958 VOID rtl8192d_ReadTxPowerInfo(PADAPTER Adapter, u8* PROMContent, BOOLEAN AutoLoadFail);
107959 VOID rtl8192d_ResetDualMacSwitchVariables(IN PADAPTER Adapter);
107960 u8 GetEEPROMSize8192D(PADAPTER Adapter);
107961 -void rtl8192d_HalSetBrateCfg(PADAPTER Adapter, u8 *mBratesOS, u16 *pBrateCfg);
107962 BOOLEAN PHY_CheckPowerOffFor8192D(PADAPTER Adapter);
107963 VOID PHY_SetPowerOnFor8192D(PADAPTER Adapter);
107964 //void PHY_ConfigMacPhyMode92D(PADAPTER Adapter);
107965 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h b/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h
107966 index 454a1b8..d736bda4 100644
107967 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h
107968 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h
107969 @@ -16,8 +16,7 @@
107970 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
107971 *
107972 *
107973 -
107974 -******************************************************************************/
107975 + ******************************************************************************/
107976 #ifndef __RTL8192D_LED_H_
107977 #define __RTL8192D_LED_H_
107978
107979 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h b/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h
107980 index 3ffc646..36cc232 100644
107981 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h
107982 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h
107983 @@ -61,7 +61,11 @@
107984 //#define MAX_RECVBUF_SZ (32768) // 32k
107985 //#define MAX_RECVBUF_SZ (16384) //16K
107986 //#define MAX_RECVBUF_SZ (10240) //10K
107987 - #define MAX_RECVBUF_SZ (15360) // 15k < 16k
107988 + #ifdef CONFIG_PLATFORM_MSTAR
107989 + #define MAX_RECVBUF_SZ (8192) // 8K
107990 + #else
107991 + #define MAX_RECVBUF_SZ (15360) // 15k < 16k
107992 + #endif
107993 #else
107994 #define MAX_RECVBUF_SZ (4000) // about 4K
107995 #endif
107996 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h b/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h
107997 index 6995464..0b439a3 100644
107998 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h
107999 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h
108000 @@ -16,8 +16,7 @@
108001 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108002 *
108003 *
108004 -
108005 -******************************************************************************/
108006 + ******************************************************************************/
108007 /******************************************************************************
108008 *
108009 *
108010 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h b/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h
108011 index 9bba78a..bef7184 100644
108012 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h
108013 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h
108014 @@ -113,7 +113,9 @@
108015 #define REG_FSISR 0x0054
108016
108017 #define REG_MCUFWDL 0x0080
108018 -#define REG_WOWLAN_REASON 0x0081
108019 +#ifdef CONFIG_WOWLAN
108020 +#define REG_WOWLAN_REASON 0x00FC
108021 +#endif // CONFIG_WOWLAN
108022 #define REG_HMEBOX_EXT_0 0x0088
108023 #define REG_HMEBOX_EXT_1 0x008A
108024 #define REG_HMEBOX_EXT_2 0x008C
108025 @@ -277,6 +279,12 @@
108026 #define REG_RD_RESP_PKT_TH 0x0463
108027 #define REG_INIRTS_RATE_SEL 0x0480
108028 #define REG_INIDATA_RATE_SEL 0x0484
108029 +
108030 +//#define REG_FW_TSF_SYNC_CNT 0x04A0
108031 +#define REG_FW_RESET_TSF_CNT_1 0x05FC
108032 +#define REG_FW_RESET_TSF_CNT_0 0x05FD
108033 +#define REG_FW_BCN_DIS_CNT 0x05FE
108034 +
108035 #define REG_POWER_STATUS 0x04A4
108036 #define REG_POWER_STAGE1 0x04B4
108037 #define REG_POWER_STAGE2 0x04B8
108038 @@ -617,53 +625,6 @@ Default: 00b.
108039 #define RATR_MCS14 0x04000000
108040 #define RATR_MCS15 0x08000000
108041
108042 -
108043 -// NOTE: For 92CU - Ziv
108044 -//CCK
108045 -#define RATE_1M BIT(0)
108046 -#define RATE_2M BIT(1)
108047 -#define RATE_5_5M BIT(2)
108048 -#define RATE_11M BIT(3)
108049 -//OFDM
108050 -#define RATE_6M BIT(4)
108051 -#define RATE_9M BIT(5)
108052 -#define RATE_12M BIT(6)
108053 -#define RATE_18M BIT(7)
108054 -#define RATE_24M BIT(8)
108055 -#define RATE_36M BIT(9)
108056 -#define RATE_48M BIT(10)
108057 -#define RATE_54M BIT(11)
108058 -//MCS 1 Spatial Stream
108059 -#define RATE_MCS0 BIT(12)
108060 -#define RATE_MCS1 BIT(13)
108061 -#define RATE_MCS2 BIT(14)
108062 -#define RATE_MCS3 BIT(15)
108063 -#define RATE_MCS4 BIT(16)
108064 -#define RATE_MCS5 BIT(17)
108065 -#define RATE_MCS6 BIT(18)
108066 -#define RATE_MCS7 BIT(19)
108067 -//MCS 2 Spatial Stream
108068 -#define RATE_MCS8 BIT(20)
108069 -#define RATE_MCS9 BIT(21)
108070 -#define RATE_MCS10 BIT(22)
108071 -#define RATE_MCS11 BIT(23)
108072 -#define RATE_MCS12 BIT(24)
108073 -#define RATE_MCS13 BIT(25)
108074 -#define RATE_MCS14 BIT(26)
108075 -#define RATE_MCS15 BIT(27)
108076 -
108077 -
108078 -
108079 -
108080 -// ALL CCK Rate
108081 -#define RATE_ALL_CCK RATR_1M|RATR_2M|RATR_55M|RATR_11M
108082 -#define RATE_ALL_OFDM_AG RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\
108083 - RATR_36M|RATR_48M|RATR_54M
108084 -#define RATE_ALL_OFDM_1SS RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\
108085 - RATR_MCS4|RATR_MCS5|RATR_MCS6|RATR_MCS7
108086 -#define RATE_ALL_OFDM_2SS RATR_MCS8|RATR_MCS9|RATR_MCS10|RATR_MCS11|\
108087 - RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15
108088 -
108089 //----------------------------------------------------------------------------
108090 // 8192C BW_OPMODE bits (Offset 0x203, 8bit)
108091 //----------------------------------------------------------------------------
108092 @@ -921,7 +882,9 @@ Default: 00b.
108093 #define EEPROM_VID 0xC // SE Vendor ID.A-B
108094 #define EEPROM_PID 0xE // SE Device ID. C-D
108095 #define EEPROM_ENDPOINT_SETTING 0x10
108096 +#ifdef CONFIG_WOWLAN
108097 #define EEPROM_Option_Setting 0x11
108098 +#endif // CONFIG_WOWLAN
108099 #define EEPROM_CHIRP_K 0x12 // Changed
108100 #define EEPROM_USB_PHY 0x13 // Changed
108101 #define EEPROM_NORMAL_BoardType EEPROM_RF_OPT1 //[7:5]
108102 @@ -1696,7 +1659,6 @@ Current IOREG MAP
108103 #define EN_MBSSID BIT(1)
108104 #define EN_TXBCN_RPT BIT(2)
108105 #define EN_BCN_FUNCTION BIT(3)
108106 -
108107 // The same function but different bit field.
108108 #define DIS_TSF_UDT0_NORMAL_CHIP BIT(4)
108109 #define DIS_TSF_UDT0_TEST_CHIP BIT(5)
108110 diff --git a/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h b/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h
108111 index 0babb27..d01fb4a 100644
108112 --- a/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h
108113 +++ b/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h
108114 @@ -16,22 +16,10 @@
108115 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108116 *
108117 *
108118 -
108119 -******************************************************************************/
108120 + ******************************************************************************/
108121 #ifndef _RTL8192D_XMIT_H_
108122 #define _RTL8192D_XMIT_H_
108123
108124 -#define VO_QUEUE_INX 0
108125 -#define VI_QUEUE_INX 1
108126 -#define BE_QUEUE_INX 2
108127 -#define BK_QUEUE_INX 3
108128 -#define BCN_QUEUE_INX 4
108129 -#define MGT_QUEUE_INX 5
108130 -#define HIGH_QUEUE_INX 6
108131 -#define TXCMD_QUEUE_INX 7
108132 -
108133 -#define HW_QUEUE_ENTRY 8
108134 -
108135 //
108136 // Queue Select Value in TxDesc
108137 //
108138 @@ -58,6 +46,52 @@
108139 #define SET_EARLYMODE_LEN3(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 8, 12, __Value)
108140 #define SET_EARLYMODE_LEN4(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 20, 12, __Value)
108141
108142 +/* Copy from rtl8192c */
108143 +struct txrpt_ccx_8192d {
108144 + /* offset 0 */
108145 + u8 retry_cnt:6;
108146 + u8 rsvd_0:2;
108147 +
108148 + /* offset 1 */
108149 + u8 rts_retry_cnt:6;
108150 + u8 rsvd_1:2;
108151 +
108152 + /* offset 2 */
108153 + u8 ccx_qtime0;
108154 + u8 ccx_qtime1;
108155 +
108156 + /* offset 4 */
108157 + u8 missed_pkt_num:5;
108158 + u8 rsvd_4:3;
108159 +
108160 + /* offset 5 */
108161 + u8 mac_id:5;
108162 + u8 des1_fragssn:3;
108163 +
108164 + /* offset 6 */
108165 + u8 rpt_pkt_num:5;
108166 + u8 pkt_drop:1;
108167 + u8 lifetime_over:1;
108168 + u8 retry_over:1;
108169 +
108170 + /* offset 7*/
108171 + u8 edca_tx_queue:4;
108172 + u8 rsvd_7:1;
108173 + u8 bmc:1;
108174 + u8 pkt_ok:1;
108175 + u8 int_ccx:1;
108176 +};
108177 +
108178 +#define txrpt_ccx_qtime_8192d(txrpt_ccx) ((txrpt_ccx)->ccx_qtime0+((txrpt_ccx)->ccx_qtime1<<8))
108179 +
108180 +#ifdef CONFIG_XMIT_ACK
108181 +void dump_txrpt_ccx_8192d(void *buf);
108182 +void handle_txrpt_ccx_8192d(_adapter *adapter, void *buf);
108183 +#else
108184 +#define dump_txrpt_ccx_8192d(buf) do {} while(0)
108185 +#define handle_txrpt_ccx_8192d(adapter, buf) do {} while(0)
108186 +#endif
108187 +
108188 #ifdef CONFIG_USB_HCI
108189
108190 #ifdef CONFIG_USB_TX_AGGREGATION
108191 @@ -72,10 +106,13 @@ void rtl8192du_cal_txdesc_chksum(struct tx_desc *ptxdesc);
108192
108193 s32 rtl8192du_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
108194
108195 -void rtl8192du_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
108196 +s32 rtl8192du_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
108197
108198 s32 rtl8192du_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe);
108199
108200 +s32 rtl8192du_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
108201 +
108202 +
108203 #ifdef CONFIG_HOSTAPD_MLME
108204 s32 rtl8192du_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt);
108205 #endif
108206 @@ -91,10 +128,12 @@ struct xmit_buf *rtl8192de_dequeue_xmitbuf(struct rtw_tx_ring *ring);
108207
108208 void rtl8192de_xmitframe_resume(_adapter *padapter);
108209
108210 -void rtl8192de_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
108211 +s32 rtl8192de_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe);
108212
108213 s32 rtl8192de_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe);
108214
108215 +s32 rtl8192de_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
108216 +
108217 #ifdef CONFIG_HOSTAPD_MLME
108218 s32 rtl8192de_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt);
108219 #endif
108220 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_android.h b/drivers/net/wireless/rtl8192cu/include/rtw_android.h
108221 index e1a0432..f9214c2 100644
108222 --- a/drivers/net/wireless/rtl8192cu/include/rtw_android.h
108223 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_android.h
108224 @@ -59,22 +59,32 @@ enum ANDROID_WIFI_CMD {
108225
108226 ANDROID_WIFI_CMD_BLOCK,
108227
108228 + ANDROID_WIFI_CMD_WFD_ENABLE,
108229 + ANDROID_WIFI_CMD_WFD_DISABLE,
108230 +
108231 + ANDROID_WIFI_CMD_WFD_SET_TCPPORT,
108232 + ANDROID_WIFI_CMD_WFD_SET_MAX_TPUT,
108233 + ANDROID_WIFI_CMD_WFD_SET_DEVTYPE,
108234 +
108235 ANDROID_WIFI_CMD_MAX
108236 };
108237
108238 int rtw_android_cmdstr_to_num(char *cmdstr);
108239 int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd);
108240
108241 -#if defined(CONFIG_WIFI_CONTROL_FUNC) && 0
108242 -int wl_android_wifictrl_func_add(void);
108243 -void wl_android_wifictrl_func_del(void);
108244 +#if defined(RTW_ENABLE_WIFI_CONTROL_FUNC)
108245 +int rtw_android_wifictrl_func_add(void);
108246 +void rtw_android_wifictrl_func_del(void);
108247 void* wl_android_prealloc(int section, unsigned long size);
108248
108249 int wifi_get_irq_number(unsigned long *irq_flags_ptr);
108250 int wifi_set_power(int on, unsigned long msec);
108251 int wifi_get_mac_addr(unsigned char *buf);
108252 void *wifi_get_country_code(char *ccode);
108253 -#endif /* CONFIG_WIFI_CONTROL_FUNC */
108254 +#else
108255 +static int rtw_android_wifictrl_func_add(void) { return 0; }
108256 +static void rtw_android_wifictrl_func_del(void) {}
108257 +#endif /* defined(RTW_ENABLE_WIFI_CONTROL_FUNC) */
108258
108259 #endif //__RTW_ANDROID_H__
108260
108261 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_ap.h b/drivers/net/wireless/rtl8192cu/include/rtw_ap.h
108262 new file mode 100644
108263 index 0000000..42be4c6
108264 --- /dev/null
108265 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_ap.h
108266 @@ -0,0 +1,64 @@
108267 +/******************************************************************************
108268 + *
108269 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
108270 + *
108271 + * This program is free software; you can redistribute it and/or modify it
108272 + * under the terms of version 2 of the GNU General Public License as
108273 + * published by the Free Software Foundation.
108274 + *
108275 + * This program is distributed in the hope that it will be useful, but WITHOUT
108276 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
108277 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
108278 + * more details.
108279 + *
108280 + * You should have received a copy of the GNU General Public License along with
108281 + * this program; if not, write to the Free Software Foundation, Inc.,
108282 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108283 + *
108284 + *
108285 + ******************************************************************************/
108286 +#ifndef __RTW_AP_H_
108287 +#define __RTW_AP_H_
108288 +
108289 +#include <drv_conf.h>
108290 +#include <osdep_service.h>
108291 +#include <drv_types.h>
108292 +
108293 +
108294 +#ifdef CONFIG_AP_MODE
108295 +
108296 +//external function
108297 +extern void rtw_indicate_sta_assoc_event(_adapter *padapter, struct sta_info *psta);
108298 +extern void rtw_indicate_sta_disassoc_event(_adapter *padapter, struct sta_info *psta);
108299 +
108300 +
108301 +void init_mlme_ap_info(_adapter *padapter);
108302 +void free_mlme_ap_info(_adapter *padapter);
108303 +//void update_BCNTIM(_adapter *padapter);
108304 +void rtw_add_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index, u8 *data, u8 len);
108305 +void rtw_remove_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index);
108306 +void update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx);
108307 +void expire_timeout_chk(_adapter *padapter);
108308 +void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta);
108309 +int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len);
108310 +void rtw_ap_restore_network(_adapter *padapter);
108311 +void rtw_set_macaddr_acl(_adapter *padapter, int mode);
108312 +int rtw_acl_add_sta(_adapter *padapter, u8 *addr);
108313 +int rtw_acl_remove_sta(_adapter *padapter, u8 *addr);
108314 +
108315 +#ifdef CONFIG_NATIVEAP_MLME
108316 +void associated_clients_update(_adapter *padapter, u8 updated);
108317 +void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta);
108318 +u8 bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta);
108319 +void sta_info_update(_adapter *padapter, struct sta_info *psta);
108320 +void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta);
108321 +u8 ap_free_sta(_adapter *padapter, struct sta_info *psta, bool active, u16 reason);
108322 +int rtw_sta_flush(_adapter *padapter);
108323 +int rtw_ap_inform_ch_switch(_adapter *padapter, u8 new_ch, u8 ch_offset);
108324 +void start_ap_mode(_adapter *padapter);
108325 +void stop_ap_mode(_adapter *padapter);
108326 +#endif
108327 +#endif //end of CONFIG_AP_MODE
108328 +
108329 +#endif
108330 +
108331 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h b/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h
108332 index 1313a25..0f06b7a 100644
108333 --- a/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h
108334 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h
108335 @@ -16,8 +16,7 @@
108336 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108337 *
108338 *
108339 -
108340 -******************************************************************************/
108341 + ******************************************************************************/
108342 #ifndef _RTL871X_BYTEORDER_H_
108343 #define _RTL871X_BYTEORDER_H_
108344
108345 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h b/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h
108346 index 0556d0b..ab115c5 100644
108347 --- a/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h
108348 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h
108349 @@ -16,8 +16,7 @@
108350 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108351 *
108352 *
108353 -
108354 -******************************************************************************/
108355 + ******************************************************************************/
108356 #ifndef __RTW_CMD_H_
108357 #define __RTW_CMD_H_
108358
108359 @@ -47,6 +46,7 @@
108360 #endif
108361
108362 struct cmd_obj {
108363 + _adapter *padapter;
108364 u16 cmdcode;
108365 u8 res;
108366 u8 *parmbuf;
108367 @@ -71,6 +71,7 @@
108368 u32 cmd_done_cnt;
108369 u32 rsp_cnt;
108370 u8 cmdthd_running;
108371 + u8 stop_req;
108372 _adapter *padapter;
108373 };
108374
108375 @@ -89,7 +90,15 @@
108376 _sema evt_notify;
108377 _sema terminate_evtthread_sema;
108378 _queue evt_queue;
108379 -#endif
108380 +#endif
108381 +
108382 +//#define CONFIG_C2H_WK
108383 +#ifdef CONFIG_C2H_WK
108384 + _workitem c2h_wk;
108385 + bool c2h_wk_alive;
108386 + struct rtw_cbuf *c2h_queue;
108387 + #define C2H_QUEUE_MAX_LEN 10
108388 +#endif
108389
108390 #ifdef CONFIG_H2CLBK
108391 _sema lbkevt_done;
108392 @@ -121,6 +130,15 @@ do {\
108393 pcmd->rspsz = 0;\
108394 } while(0)
108395
108396 +struct c2h_evt_hdr {
108397 + u8 id:4;
108398 + u8 plen:4;
108399 + u8 seq;
108400 + u8 payload[0];
108401 +};
108402 +
108403 +#define c2h_evt_exist(c2h_evt) ((c2h_evt)->id || (c2h_evt)->plen)
108404 +
108405 extern u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj);
108406 extern struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv);
108407 extern void rtw_free_cmd_obj(struct cmd_obj *pcmd);
108408 @@ -131,6 +149,7 @@ extern struct evt_obj *rtw_dequeue_evt(_queue *queue);
108409 extern void rtw_free_evt_obj(struct evt_obj *pcmd);
108410 #endif
108411
108412 +void rtw_stop_cmd_thread(_adapter *adapter);
108413 thread_return rtw_cmd_thread(thread_context context);
108414
108415 extern u32 rtw_init_cmd_priv (struct cmd_priv *pcmdpriv);
108416 @@ -160,6 +179,10 @@ enum rtw_drvextra_cmd_id
108417 P2P_PS_WK_CID,
108418 P2P_PROTO_WK_CID,
108419 CHECK_HIQ_WK_CID,//for softap mode, check hi queue if empty
108420 + INTEl_WIDI_WK_CID,
108421 + C2H_WK_CID,
108422 + RESET_SECURITYPRIV, // add for CONFIG_IEEE80211W, none 11w also can use
108423 + FREE_ASSOC_RESOURCES, // add for CONFIG_IEEE80211W, none 11w also can use
108424 MAX_WK_CID
108425 };
108426
108427 @@ -220,7 +243,7 @@ Command Mode
108428
108429 */
108430 struct disconnect_parm {
108431 - u32 rsvd;
108432 + u32 deauth_timeout_ms;
108433 };
108434
108435 /*
108436 @@ -267,11 +290,14 @@ Command-Event Mode
108437 */
108438
108439 #define RTW_SSID_SCAN_AMOUNT 9 // for WEXT_CSCAN_AMOUNT 9
108440 +#define RTW_CHANNEL_SCAN_AMOUNT (14+37)
108441 struct sitesurvey_parm {
108442 sint scan_mode; //active: 1, passive: 0
108443 - sint bsslimit; // 1 ~ 48
108444 - // for up to 9 probreq with specific ssid
108445 + /* sint bsslimit; // 1 ~ 48 */
108446 + u8 ssid_num;
108447 + u8 ch_num;
108448 NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
108449 + struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
108450 };
108451
108452 /*
108453 @@ -320,6 +346,7 @@ when shared key ==> algorithm/keyid
108454 struct set_stakey_parm {
108455 u8 addr[ETH_ALEN];
108456 u8 algorithm;
108457 + u8 id;// currently for erasing cam entry if algorithm == _NO_PRIVACY_
108458 u8 key[16];
108459 };
108460
108461 @@ -793,9 +820,10 @@ struct addBaReq_parm
108462 };
108463
108464 /*H2C Handler index: 46 */
108465 -struct SetChannel_parm
108466 -{
108467 - u32 curr_ch;
108468 +struct set_ch_parm {
108469 + u8 ch;
108470 + u8 bw;
108471 + u8 ch_offset;
108472 };
108473
108474 #ifdef MP_FIRMWARE_OFFLOAD
108475 @@ -908,13 +936,14 @@ Result:
108476
108477 extern u8 rtw_setassocsta_cmd(_adapter *padapter, u8 *mac_addr);
108478 extern u8 rtw_setstandby_cmd(_adapter *padapter, uint action);
108479 -extern u8 rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *pssid, int ssid_max_num);
108480 +u8 rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *ssid, int ssid_num, struct rtw_ieee80211_channel *ch, int ch_num);
108481 extern u8 rtw_createbss_cmd(_adapter *padapter);
108482 extern u8 rtw_createbss_cmd_ex(_adapter *padapter, unsigned char *pbss, unsigned int sz);
108483 extern u8 rtw_setphy_cmd(_adapter *padapter, u8 modem, u8 ch);
108484 extern u8 rtw_setstakey_cmd(_adapter *padapter, u8 *psta, u8 unicast_key);
108485 +extern u8 rtw_clearstakey_cmd(_adapter *padapter, u8 *psta, u8 entry, u8 enqueue);
108486 extern u8 rtw_joinbss_cmd(_adapter *padapter, struct wlan_network* pnetwork);
108487 -extern u8 rtw_disassoc_cmd(_adapter *padapter);
108488 +u8 rtw_disassoc_cmd(_adapter *padapter, u32 deauth_timeout_ms, bool enqueue);
108489 extern u8 rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
108490 extern u8 rtw_setdatarate_cmd(_adapter *padapter, u8 *rateset);
108491 extern u8 rtw_setbasicrate_cmd(_adapter *padapter, u8 *rateset);
108492 @@ -931,7 +960,9 @@ extern u8 rtw_setfwdig_cmd(_adapter*padapter, u8 type);
108493 extern u8 rtw_setfwra_cmd(_adapter*padapter, u8 type);
108494
108495 extern u8 rtw_addbareq_cmd(_adapter*padapter, u8 tid, u8 *addr);
108496 -
108497 +// add for CONFIG_IEEE80211W, none 11w also can use
108498 +extern u8 rtw_reset_securitypriv_cmd(_adapter*padapter);
108499 +extern u8 rtw_free_assoc_resources_cmd(_adapter *padapter);
108500 extern u8 rtw_dynamic_chk_wk_cmd(_adapter *adapter);
108501
108502 u8 rtw_lps_ctrl_wk_cmd(_adapter*padapter, u8 lps_ctrl_type, u8 enqueue);
108503 @@ -947,11 +978,14 @@ extern u8 rtw_ps_cmd(_adapter*padapter);
108504 u8 rtw_chk_hi_queue_cmd(_adapter*padapter);
108505 #endif
108506
108507 -extern u8 rtw_set_chplan_cmd(_adapter*padapter, u8 chplan, u8 enaueue);
108508 +u8 rtw_set_ch_cmd(_adapter*padapter, u8 ch, u8 bw, u8 ch_offset, u8 enqueue);
108509 +extern u8 rtw_set_chplan_cmd(_adapter*padapter, u8 chplan, u8 enqueue);
108510 extern u8 rtw_led_blink_cmd(_adapter*padapter, PLED_871x pLed);
108511 extern u8 rtw_set_csa_cmd(_adapter*padapter, u8 new_ch_no);
108512 extern u8 rtw_tdls_cmd(_adapter*padapter, u8 *addr, u8 option);
108513
108514 +extern u8 rtw_c2h_wk_cmd(PADAPTER padapter, u8 *c2h_evt);
108515 +
108516 u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf);
108517
108518 extern void rtw_survey_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd);
108519 @@ -1041,7 +1075,7 @@ enum rtw_h2c_cmd
108520
108521 GEN_CMD_CODE(_SetChannelPlan), /*59*/
108522 GEN_CMD_CODE(_LedBlink), /*60*/
108523 -
108524 +
108525 GEN_CMD_CODE(_SetChannelSwitch), /*61*/
108526 GEN_CMD_CODE(_TDLS), /*62*/
108527
108528 @@ -1123,6 +1157,7 @@ struct _cmd_callback rtw_cmd_callback[] =
108529 {GEN_CMD_CODE(_Set_H2C_MSG), NULL},/*58*/
108530 {GEN_CMD_CODE(_SetChannelPlan), NULL},/*59*/
108531 {GEN_CMD_CODE(_LedBlink), NULL},/*60*/
108532 +
108533 {GEN_CMD_CODE(_SetChannelSwitch), NULL},/*61*/
108534 {GEN_CMD_CODE(_TDLS), NULL},/*62*/
108535 };
108536 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_debug.h b/drivers/net/wireless/rtl8192cu/include/rtw_debug.h
108537 index eca6692..0ccf220 100644
108538 --- a/drivers/net/wireless/rtl8192cu/include/rtw_debug.h
108539 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_debug.h
108540 @@ -1,7 +1,7 @@
108541 /******************************************************************************
108542 *
108543 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
108544 - *
108545 + *
108546 * This program is free software; you can redistribute it and/or modify it
108547 * under the terms of version 2 of the GNU General Public License as
108548 * published by the Free Software Foundation.
108549 @@ -25,6 +25,7 @@
108550 #include <drv_types.h>
108551
108552
108553 +#define _no_debug_ 0
108554 #define _drv_emerg_ 1
108555 #define _drv_alert_ 2
108556 #define _drv_crit_ 3
108557 @@ -34,72 +35,75 @@
108558 #define _drv_info_ 7
108559 #define _drv_dump_ 8
108560 #define _drv_debug_ 9
108561 -
108562 -
108563 -#define _module_rtl871x_xmit_c_ BIT(0)
108564 -#define _module_xmit_osdep_c_ BIT(1)
108565 -#define _module_rtl871x_recv_c_ BIT(2)
108566 -#define _module_recv_osdep_c_ BIT(3)
108567 -#define _module_rtl871x_mlme_c_ BIT(4)
108568 -#define _module_mlme_osdep_c_ BIT(5)
108569 -#define _module_rtl871x_sta_mgt_c_ BIT(6)
108570 -#define _module_rtl871x_cmd_c_ BIT(7)
108571 -#define _module_cmd_osdep_c_ BIT(8)
108572 -#define _module_rtl871x_io_c_ BIT(9)
108573 -#define _module_io_osdep_c_ BIT(10)
108574 -#define _module_os_intfs_c_ BIT(11)
108575 -#define _module_rtl871x_security_c_ BIT(12)
108576 -#define _module_rtl871x_eeprom_c_ BIT(13)
108577 -#define _module_hal_init_c_ BIT(14)
108578 -#define _module_hci_hal_init_c_ BIT(15)
108579 -#define _module_rtl871x_ioctl_c_ BIT(16)
108580 -#define _module_rtl871x_ioctl_set_c_ BIT(17)
108581 -#define _module_rtl871x_ioctl_query_c_ BIT(18)
108582 -#define _module_rtl871x_pwrctrl_c_ BIT(19)
108583 -#define _module_hci_intfs_c_ BIT(20)
108584 -#define _module_hci_ops_c_ BIT(21)
108585 -#define _module_osdep_service_c_ BIT(22)
108586 +#define _drv_always_ _drv_emerg_
108587 +
108588 +#define _module_rtl871x_xmit_c_ BIT(0)
108589 +#define _module_xmit_osdep_c_ BIT(1)
108590 +#define _module_rtl871x_recv_c_ BIT(2)
108591 +#define _module_recv_osdep_c_ BIT(3)
108592 +#define _module_rtl871x_mlme_c_ BIT(4)
108593 +#define _module_mlme_osdep_c_ BIT(5)
108594 +#define _module_rtl871x_sta_mgt_c_ BIT(6)
108595 +#define _module_rtl871x_cmd_c_ BIT(7)
108596 +#define _module_cmd_osdep_c_ BIT(8)
108597 +#define _module_rtl871x_io_c_ BIT(9)
108598 +#define _module_io_osdep_c_ BIT(10)
108599 +#define _module_os_intfs_c_ BIT(11)
108600 +#define _module_rtl871x_security_c_ BIT(12)
108601 +#define _module_rtl871x_eeprom_c_ BIT(13)
108602 +#define _module_hal_init_c_ BIT(14)
108603 +#define _module_hci_hal_init_c_ BIT(15)
108604 +#define _module_rtl871x_ioctl_c_ BIT(16)
108605 +#define _module_rtl871x_ioctl_set_c_ BIT(17)
108606 +#define _module_rtl871x_ioctl_query_c_ BIT(18)
108607 +#define _module_rtl871x_pwrctrl_c_ BIT(19)
108608 +#define _module_hci_intfs_c_ BIT(20)
108609 +#define _module_hci_ops_c_ BIT(21)
108610 +#define _module_osdep_service_c_ BIT(22)
108611 #define _module_mp_ BIT(23)
108612 -#define _module_hci_ops_os_c_ BIT(24)
108613 -#define _module_rtl871x_ioctl_os_c BIT(25)
108614 -#define _module_rtl8712_cmd_c_ BIT(26)
108615 +#define _module_hci_ops_os_c_ BIT(24)
108616 +#define _module_rtl871x_ioctl_os_c BIT(25)
108617 +#define _module_rtl8712_cmd_c_ BIT(26)
108618 //#define _module_efuse_ BIT(27)
108619 #define _module_rtl8192c_xmit_c_ BIT(28)
108620 -#define _module_efuse_ BIT(29)
108621 -#define _module_rtl8712_recv_c_ BIT(30)
108622 -#define _module_rtl8712_led_c_ BIT(31)
108623 +#define _module_hal_xmit_c_ BIT(28)
108624 +#define _module_efuse_ BIT(29)
108625 +#define _module_rtl8712_recv_c_ BIT(30)
108626 +#define _module_rtl8712_led_c_ BIT(31)
108627
108628 #undef _MODULE_DEFINE_
108629
108630 -#if defined _RTL871X_XMIT_C_
108631 +#if defined _RTW_XMIT_C_
108632 #define _MODULE_DEFINE_ _module_rtl871x_xmit_c_
108633 #elif defined _XMIT_OSDEP_C_
108634 #define _MODULE_DEFINE_ _module_xmit_osdep_c_
108635 -#elif defined _RTL871X_RECV_C_
108636 +#elif defined _RTW_RECV_C_
108637 #define _MODULE_DEFINE_ _module_rtl871x_recv_c_
108638 #elif defined _RECV_OSDEP_C_
108639 #define _MODULE_DEFINE_ _module_recv_osdep_c_
108640 -#elif defined _RTL871X_MLME_C_
108641 +#elif defined _RTW_MLME_C_
108642 #define _MODULE_DEFINE_ _module_rtl871x_mlme_c_
108643 #elif defined _MLME_OSDEP_C_
108644 #define _MODULE_DEFINE_ _module_mlme_osdep_c_
108645 -#elif defined _RTL871X_STA_MGT_C_
108646 +#elif defined _RTW_MLME_EXT_C_
108647 + #define _MODULE_DEFINE_ 1
108648 +#elif defined _RTW_STA_MGT_C_
108649 #define _MODULE_DEFINE_ _module_rtl871x_sta_mgt_c_
108650 -#elif defined _RTL871X_CMD_C_
108651 +#elif defined _RTW_CMD_C_
108652 #define _MODULE_DEFINE_ _module_rtl871x_cmd_c_
108653 #elif defined _CMD_OSDEP_C_
108654 #define _MODULE_DEFINE_ _module_cmd_osdep_c_
108655 -#elif defined _RTL871X_IO_C_
108656 +#elif defined _RTW_IO_C_
108657 #define _MODULE_DEFINE_ _module_rtl871x_io_c_
108658 #elif defined _IO_OSDEP_C_
108659 #define _MODULE_DEFINE_ _module_io_osdep_c_
108660 #elif defined _OS_INTFS_C_
108661 #define _MODULE_DEFINE_ _module_os_intfs_c_
108662 -#elif defined _RTL871X_SECURITY_C_
108663 +#elif defined _RTW_SECURITY_C_
108664 #define _MODULE_DEFINE_ _module_rtl871x_security_c_
108665 -#elif defined _RTL871X_EEPROM_C_
108666 +#elif defined _RTW_EEPROM_C_
108667 #define _MODULE_DEFINE_ _module_rtl871x_eeprom_c_
108668 -#elif defined _HAL_INIT_C_
108669 +#elif defined _HAL_INTF_C_
108670 #define _MODULE_DEFINE_ _module_hal_init_c_
108671 #elif defined _HCI_HAL_INIT_C_
108672 #define _MODULE_DEFINE_ _module_hci_hal_init_c_
108673 @@ -111,10 +115,14 @@
108674 #define _MODULE_DEFINE_ _module_rtl871x_ioctl_query_c_
108675 #elif defined _RTL871X_PWRCTRL_C_
108676 #define _MODULE_DEFINE_ _module_rtl871x_pwrctrl_c_
108677 +#elif defined _RTW_PWRCTRL_C_
108678 + #define _MODULE_DEFINE_ 1
108679 #elif defined _HCI_INTF_C_
108680 #define _MODULE_DEFINE_ _module_hci_intfs_c_
108681 #elif defined _HCI_OPS_C_
108682 #define _MODULE_DEFINE_ _module_hci_ops_c_
108683 +#elif defined _SDIO_OPS_C_
108684 + #define _MODULE_DEFINE_ 1
108685 #elif defined _OSDEP_HCI_INTF_C_
108686 #define _MODULE_DEFINE_ _module_hci_intfs_c_
108687 #elif defined _OSDEP_SERVICE_C_
108688 @@ -126,7 +134,9 @@
108689 #elif defined _RTL8712_CMD_C_
108690 #define _MODULE_DEFINE_ _module_rtl8712_cmd_c_
108691 #elif defined _RTL8192C_XMIT_C_
108692 - #define _MODULE_DEFINE_ _module_rtl8192c_xmit_c_
108693 + #define _MODULE_DEFINE_ 1
108694 +#elif defined _RTL8723AS_XMIT_C_
108695 + #define _MODULE_DEFINE_ 1
108696 #elif defined _RTL8712_RECV_C_
108697 #define _MODULE_DEFINE_ _module_rtl8712_recv_c_
108698 #elif defined _RTL8192CU_RECV_C_
108699 @@ -161,19 +171,23 @@ extern void rtl871x_cedbg(const char *fmt, ...);
108700
108701 #ifdef PLATFORM_WINDOWS
108702
108703 - #ifdef PLATFORM_OS_XP
108704 + #ifdef PLATFORM_OS_XP
108705
108706 - #define _dbgdump DbgPrint
108707 + #define _dbgdump DbgPrint
108708
108709 - #elif defined PLATFORM_OS_CE
108710 + #elif defined PLATFORM_OS_CE
108711
108712 - #define _dbgdump rtl871x_cedbg
108713 + #define _dbgdump rtl871x_cedbg
108714
108715 - #endif
108716 + #endif
108717
108718 - #elif defined PLATFORM_LINUX
108719 +#elif defined PLATFORM_LINUX
108720
108721 - #define _dbgdump printk
108722 + #define _dbgdump printk
108723 +
108724 +#elif defined PLATFORM_FREEBSD
108725 +
108726 + #define _dbgdump printf
108727
108728 #endif
108729
108730 @@ -186,8 +200,8 @@ extern void rtl871x_cedbg(const char *fmt, ...);
108731 #define RT_TRACE(_Comp, _Level, Fmt)\
108732 do {\
108733 if((_Comp & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) {\
108734 - _dbgdump("%s [0x%08x,%d]", RTL871X_MODULE_NAME, (unsigned int)_Comp, _Level);\
108735 - _dbgdump Fmt; \
108736 + _dbgdump("%s [0x%08x,%d]", RTL871X_MODULE_NAME, (unsigned int)_Comp, _Level);\
108737 + _dbgdump Fmt;\
108738 }\
108739 }while(0)
108740
108741 @@ -233,21 +247,34 @@ extern void rtl871x_cedbg(const char *fmt, ...);
108742
108743
108744 #ifdef CONFIG_DEBUG_RTL819X
108745 - #ifdef PLATFORM_WINDOWS
108746
108747 - #ifdef PLATFORM_OS_XP
108748 - #define _dbgdump DbgPrint
108749 -
108750 - #elif defined PLATFORM_OS_CE
108751 - #define _dbgdump rtl871x_cedbg
108752 +#undef _dbgdump
108753 +
108754 +#ifdef PLATFORM_WINDOWS
108755 +
108756 + #ifdef PLATFORM_OS_XP
108757 +
108758 + #define _dbgdump DbgPrint
108759 +
108760 + #elif defined PLATFORM_OS_CE
108761
108762 - #endif
108763 + #define _dbgdump rtl871x_cedbg
108764
108765 - #elif defined PLATFORM_LINUX
108766 - #define _dbgdump printk
108767 #endif
108768 +
108769 +#elif defined PLATFORM_LINUX
108770 +
108771 + #define _dbgdump printk
108772 +
108773 +#elif defined PLATFORM_FREEBSD
108774 +
108775 + #define _dbgdump printf
108776 +
108777 #endif
108778
108779 +#endif /* CONFIG_DEBUG_RTL819X */
108780 +
108781 +
108782 #ifdef PLATFORM_WINDOWS
108783 #define DBG_871X do {} while(0)
108784 #define MSG_8192C do {} while(0)
108785 @@ -264,15 +291,38 @@ extern void rtl871x_cedbg(const char *fmt, ...);
108786 #define ERR_8192C(x,...) do {} while(0)
108787 #endif
108788
108789 -#if defined (_dbgdump)
108790 - #undef DBG_871X
108791 - #define DBG_871X _dbgdump
108792 +#ifdef PLATFORM_FREEBSD
108793 + #define _dbgdump printf
108794 + #define DBG_871X(x, ...) do {} while(0)
108795 + #define MSG_8192C(x, ...) do {} while(0)
108796 + #define DBG_8192C(x,...) do {} while(0)
108797 + #define WRN_8192C(x,...) do {} while(0)
108798 + #define ERR_8192C(x,...) do {} while(0)
108799 +#endif
108800 +
108801 +extern u32 GlobalDebugLevel;
108802 +#define LOG_LEVEL(level, ...)\
108803 + do {\
108804 + if(level <= GlobalDebugLevel) {\
108805 + printk(__VA_ARGS__);\
108806 + }\
108807 + }while(0)
108808 +
108809 +#define DBG_871X_LEVEL LOG_LEVEL
108810
108811 - #undef MSG_8192C
108812 - #define MSG_8192C _dbgdump
108813 +#if defined (_dbgdump)
108814 + #undef DBG_871X
108815 +// #define DBG_871X _dbgdump
108816 + #define DBG_871X(...) LOG_LEVEL(_drv_emerg_ , __VA_ARGS__)
108817 +
108818 + #undef MSG_8192C
108819 +// #define MSG_8192C _dbgdump
108820 + #define MSG_8192C(...) LOG_LEVEL(_drv_emerg_ , __VA_ARGS__)
108821 +
108822 + #undef DBG_8192C
108823 +// #define DBG_8192C _dbgdump
108824 + #define DBG_8192C(...) LOG_LEVEL(_drv_emerg_ , __VA_ARGS__)
108825
108826 - #undef DBG_8192C
108827 - #define DBG_8192C _dbgdump
108828
108829 #undef WRN_8192C
108830 #define WRN_8192C _dbgdump
108831 @@ -282,13 +332,25 @@ extern void rtl871x_cedbg(const char *fmt, ...);
108832 #endif
108833
108834
108835 -
108836 #ifdef CONFIG_PROC_DEBUG
108837
108838 int proc_get_drv_version(char *page, char **start,
108839 off_t offset, int count,
108840 int *eof, void *data);
108841
108842 + int proc_get_log_level(char *page, char **start,
108843 + off_t offset, int count,
108844 + int *eof, void *data);
108845 +
108846 + int proc_set_log_level(struct file *file, const char *buffer,
108847 + unsigned long count, void *data);
108848 +
108849 +#ifdef DBG_MEM_ALLOC
108850 + int proc_get_mstat(char *page, char **start,
108851 + off_t offset, int count,
108852 + int *eof, void *data);
108853 +#endif /* DBG_MEM_ALLOC */
108854 +
108855 int proc_get_write_reg(char *page, char **start,
108856 off_t offset, int count,
108857 int *eof, void *data);
108858 @@ -340,6 +402,45 @@ extern void rtl871x_cedbg(const char *fmt, ...);
108859 off_t offset, int count,
108860 int *eof, void *data);
108861
108862 + int proc_get_mac_reg_dump1(char *page, char **start,
108863 + off_t offset, int count,
108864 + int *eof, void *data);
108865 +
108866 + int proc_get_mac_reg_dump2(char *page, char **start,
108867 + off_t offset, int count,
108868 + int *eof, void *data);
108869 +
108870 + int proc_get_mac_reg_dump3(char *page, char **start,
108871 + off_t offset, int count,
108872 + int *eof, void *data);
108873 +
108874 + int proc_get_bb_reg_dump1(char *page, char **start,
108875 + off_t offset, int count,
108876 + int *eof, void *data);
108877 +
108878 + int proc_get_bb_reg_dump2(char *page, char **start,
108879 + off_t offset, int count,
108880 + int *eof, void *data);
108881 +
108882 + int proc_get_bb_reg_dump3(char *page, char **start,
108883 + off_t offset, int count,
108884 + int *eof, void *data);
108885 +
108886 + int proc_get_rf_reg_dump1(char *page, char **start,
108887 + off_t offset, int count,
108888 + int *eof, void *data);
108889 +
108890 + int proc_get_rf_reg_dump2(char *page, char **start,
108891 + off_t offset, int count,
108892 + int *eof, void *data);
108893 +
108894 + int proc_get_rf_reg_dump3(char *page, char **start,
108895 + off_t offset, int count,
108896 + int *eof, void *data);
108897 +
108898 + int proc_get_rf_reg_dump4(char *page, char **start,
108899 + off_t offset, int count,
108900 + int *eof, void *data);
108901
108902 #ifdef CONFIG_AP_MODE
108903
108904 @@ -359,6 +460,8 @@ extern void rtl871x_cedbg(const char *fmt, ...);
108905 int proc_get_best_channel(char *page, char **start,
108906 off_t offset, int count,
108907 int *eof, void *data);
108908 + int proc_set_best_channel(struct file *file, const char *buffer,
108909 + unsigned long count, void *data);
108910 #endif
108911
108912 int proc_get_rx_signal(char *page, char **start,
108913 @@ -367,13 +470,47 @@ extern void rtl871x_cedbg(const char *fmt, ...);
108914
108915 int proc_set_rx_signal(struct file *file, const char *buffer,
108916 unsigned long count, void *data);
108917 +
108918 + int proc_get_ht_enable(char *page, char **start,
108919 + off_t offset, int count,
108920 + int *eof, void *data);
108921 +
108922 + int proc_set_ht_enable(struct file *file, const char *buffer,
108923 + unsigned long count, void *data);
108924 +
108925 + int proc_get_cbw40_enable(char *page, char **start,
108926 + off_t offset, int count,
108927 + int *eof, void *data);
108928
108929 + int proc_set_cbw40_enable(struct file *file, const char *buffer,
108930 + unsigned long count, void *data);
108931 +
108932 int proc_get_ampdu_enable(char *page, char **start,
108933 off_t offset, int count,
108934 int *eof, void *data);
108935
108936 int proc_set_ampdu_enable(struct file *file, const char *buffer,
108937 unsigned long count, void *data);
108938 +
108939 + int proc_get_two_path_rssi(char *page, char **start,
108940 + off_t offset, int count,
108941 + int *eof, void *data);
108942 +
108943 + int proc_get_rx_stbc(char *page, char **start,
108944 + off_t offset, int count,
108945 + int *eof, void *data);
108946 +
108947 + int proc_set_rx_stbc(struct file *file, const char *buffer,
108948 + unsigned long count, void *data);
108949 +
108950 +
108951 + int proc_get_vid(char *page, char **start,
108952 + off_t offset, int count,
108953 + int *eof, void *data);
108954 +
108955 + int proc_get_pid(char *page, char **start,
108956 + off_t offset, int count,
108957 + int *eof, void *data);
108958
108959 int proc_get_rssi_disp(char *page, char **start,
108960 off_t offset, int count,
108961 @@ -381,7 +518,19 @@ extern void rtl871x_cedbg(const char *fmt, ...);
108962
108963 int proc_set_rssi_disp(struct file *file, const char *buffer,
108964 unsigned long count, void *data);
108965 -
108966 +
108967 +#if defined(DBG_CONFIG_ERROR_DETECT)
108968 +int proc_get_sreset(char *page, char **start, off_t offset, int count, int *eof, void *data);
108969 +int proc_set_sreset(struct file *file, const char *buffer, unsigned long count, void *data);
108970 +#endif /* DBG_CONFIG_ERROR_DETECT */
108971 +
108972 +#ifdef CONFIG_DM_ADAPTIVITY
108973 +int proc_get_dm_adaptivity(char *page, char **start,
108974 + off_t offset, int count,
108975 + int *eof, void *data);
108976 +int proc_set_dm_adaptivity(struct file *file, const char *buffer,
108977 + unsigned long count, void *data);
108978 +#endif /* CONFIG_DM_ADAPTIVITY */
108979
108980 #endif //CONFIG_PROC_DEBUG
108981
108982 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h b/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h
108983 index 9d31998..ce834dd 100644
108984 --- a/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h
108985 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h
108986 @@ -16,8 +16,7 @@
108987 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
108988 *
108989 *
108990 -
108991 -******************************************************************************/
108992 + ******************************************************************************/
108993 #ifndef __RTW_EEPROM_H__
108994 #define __RTW_EEPROM_H__
108995
108996 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h b/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h
108997 index 66be910..224aa4f 100644
108998 --- a/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h
108999 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h
109000 @@ -1,7 +1,7 @@
109001 /******************************************************************************
109002 *
109003 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
109004 - *
109005 + *
109006 * This program is free software; you can redistribute it and/or modify it
109007 * under the terms of version 2 of the GNU General Public License as
109008 * published by the Free Software Foundation.
109009 @@ -106,7 +106,7 @@ u8 rtw_efuse_map_write(PADAPTER padapter, u16 addr, u16 cnts, u8 *data);
109010 u16 Efuse_GetCurrentSize(PADAPTER pAdapter, u8 efuseType, BOOLEAN bPseudoTest);
109011 u8 Efuse_CalculateWordCnts(u8 word_en);
109012 void ReadEFuseByte(PADAPTER Adapter, u16 _offset, u8 *pbuf, BOOLEAN bPseudoTest) ;
109013 -void EFUSE_GetEfuseDefinition(PADAPTER pAdapter, u8 efuseType, u8 type, PVOID *pOut, BOOLEAN bPseudoTest);
109014 +void EFUSE_GetEfuseDefinition(PADAPTER pAdapter, u8 efuseType, u8 type, void *pOut, BOOLEAN bPseudoTest);
109015 u8 efuse_OneByteRead(PADAPTER pAdapter, u16 addr, u8 *data, BOOLEAN bPseudoTest);
109016 u8 efuse_OneByteWrite(PADAPTER pAdapter, u16 addr, u8 data, BOOLEAN bPseudoTest);
109017
109018 @@ -121,3 +121,4 @@ void EFUSE_ShadowMapUpdate(PADAPTER pAdapter, u8 efuseType, BOOLEAN bPseudoTest)
109019 void EFUSE_ShadowRead(PADAPTER pAdapter, u8 Type, u16 Offset, u32 *Value);
109020
109021 #endif
109022 +
109023 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_event.h b/drivers/net/wireless/rtl8192cu/include/rtw_event.h
109024 index dd9f097..4299ddc 100644
109025 --- a/drivers/net/wireless/rtl8192cu/include/rtw_event.h
109026 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_event.h
109027 @@ -16,8 +16,7 @@
109028 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109029 *
109030 *
109031 -
109032 -******************************************************************************/
109033 + ******************************************************************************/
109034 #ifndef _RTW_EVENT_H_
109035 #define _RTW_EVENT_H_
109036 #include <drv_conf.h>
109037 @@ -92,7 +91,8 @@ struct stassoc_event {
109038
109039 struct stadel_event {
109040 unsigned char macaddr[6];
109041 - unsigned char rsvd[2];
109042 + unsigned char rsvd[2]; //for reason
109043 + int mac_id;
109044 };
109045
109046 struct addba_event
109047 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_ht.h b/drivers/net/wireless/rtl8192cu/include/rtw_ht.h
109048 index 4dcad2b..3cd904d 100644
109049 --- a/drivers/net/wireless/rtl8192cu/include/rtw_ht.h
109050 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_ht.h
109051 @@ -16,8 +16,7 @@
109052 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109053 *
109054 *
109055 -
109056 -******************************************************************************/
109057 + ******************************************************************************/
109058 #ifndef _RTW_HT_H_
109059 #define _RTW_HT_H_
109060
109061 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_io.h b/drivers/net/wireless/rtl8192cu/include/rtw_io.h
109062 index b1f57c1..c66845c 100644
109063 --- a/drivers/net/wireless/rtl8192cu/include/rtw_io.h
109064 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_io.h
109065 @@ -16,8 +16,8 @@
109066 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109067 *
109068 *
109069 -
109070 -******************************************************************************/
109071 + ******************************************************************************/
109072 +
109073 #ifndef _RTW_IO_H_
109074 #define _RTW_IO_H_
109075
109076 @@ -44,16 +44,6 @@
109077 #else
109078 #include <linux/usb/ch9.h>
109079 #endif
109080 -
109081 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
109082 -#define rtw_usb_buffer_alloc(dev, size, mem_flags, dma) usb_alloc_coherent((dev), (size), (mem_flags), (dma))
109083 -#define rtw_usb_buffer_free(dev, size, addr, dma) usb_free_coherent((dev), (size), (addr), (dma))
109084 -#else
109085 -#define rtw_usb_buffer_alloc(dev, size, mem_flags, dma) usb_buffer_alloc((dev), (size), (mem_flags), (dma))
109086 -#define rtw_usb_buffer_free(dev, size, addr, dma) usb_buffer_free((dev), (size), (addr), (dma))
109087 -#endif
109088 -
109089 -
109090 #endif //CONFIG_USB_HCI
109091
109092 #endif //PLATFORM_LINUX
109093 @@ -129,72 +119,39 @@
109094 #define _INTF_ASYNC_ BIT(0) //support async io
109095
109096 struct intf_priv;
109097 -struct intf_hdl;
109098 +struct intf_hdl;
109099 struct io_queue;
109100
109101 -struct _io_ops {
109102 -
109103 -
109104 - uint (*_sdbus_read_bytes_to_membuf)(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
109105 - uint (*_sdbus_read_blocks_to_membuf)(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
109106 -
109107 - void (*_attrib_read)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109108 -
109109 +struct _io_ops
109110 +{
109111 u8 (*_read8)(struct intf_hdl *pintfhdl, u32 addr);
109112 -
109113 u16 (*_read16)(struct intf_hdl *pintfhdl, u32 addr);
109114 -
109115 u32 (*_read32)(struct intf_hdl *pintfhdl, u32 addr);
109116
109117 -
109118 - uint (*_sdbus_write_blocks_from_membuf)(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf,u8 async);
109119 -
109120 - uint (*_sdbus_write_bytes_from_membuf)(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
109121 - u8 (*_cmd52r)(struct intf_priv *pintfpriv, u32 addr);
109122 - void (*_cmd52w)(struct intf_priv *pintfpriv, u32 addr, u8 val8);
109123 - u8 (*_cmdfunc152r)(struct intf_priv *pintfpriv, u32 addr);
109124 - void (*_cmdfunc152w)(struct intf_priv *pintfpriv, u32 addr, u8 val8);
109125 -
109126 -
109127 - void (*_attrib_write)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109128 -
109129 int (*_write8)(struct intf_hdl *pintfhdl, u32 addr, u8 val);
109130 -
109131 int (*_write16)(struct intf_hdl *pintfhdl, u32 addr, u16 val);
109132 -
109133 int (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val);
109134 -
109135 int (*_writeN)(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata);
109136
109137 int (*_write8_async)(struct intf_hdl *pintfhdl, u32 addr, u8 val);
109138 -
109139 int (*_write16_async)(struct intf_hdl *pintfhdl, u32 addr, u16 val);
109140 -
109141 int (*_write32_async)(struct intf_hdl *pintfhdl, u32 addr, u32 val);
109142 -
109143
109144 void (*_read_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109145 -
109146 void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109147 -
109148 - void (*_sync_irp_protocol_rw)(struct io_queue *pio_q);
109149
109150 + void (*_sync_irp_protocol_rw)(struct io_queue *pio_q);
109151
109152 u32 (*_read_interrupt)(struct intf_hdl *pintfhdl, u32 addr);
109153
109154 u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109155 -
109156 u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109157
109158 - int (*_write_port_sync)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
109159 -
109160 u32 (*_write_scsi)(struct intf_hdl *pintfhdl,u32 cnt, u8 *pmem);
109161
109162 -
109163 void (*_read_port_cancel)(struct intf_hdl *pintfhdl);
109164 -
109165 void (*_write_port_cancel)(struct intf_hdl *pintfhdl);
109166 -
109167 +
109168 };
109169
109170 struct io_req {
109171 @@ -424,26 +381,30 @@ extern int _rtw_write16_async(_adapter *adapter, u32 addr, u16 val);
109172 extern int _rtw_write32_async(_adapter *adapter, u32 addr, u32 val);
109173
109174 extern void _rtw_write_mem(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
109175 -extern void _rtw_write_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
109176 -extern int _rtw_write_port_sync(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
109177 +extern u32 _rtw_write_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
109178 +u32 _rtw_write_port_and_wait(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem, int timeout_ms);
109179 extern void _rtw_write_port_cancel(_adapter *adapter);
109180
109181 #ifdef DBG_IO
109182 +bool match_read_sniff_ranges(u16 addr, u16 len);
109183 +bool match_write_sniff_ranges(u16 addr, u16 len);
109184 +
109185 +extern u8 dbg_rtw_read8(_adapter *adapter, u32 addr, const char *caller, const int line);
109186 +extern u16 dbg_rtw_read16(_adapter *adapter, u32 addr, const char *caller, const int line);
109187 +extern u32 dbg_rtw_read32(_adapter *adapter, u32 addr, const char *caller, const int line);
109188 +
109189 extern int dbg_rtw_write8(_adapter *adapter, u32 addr, u8 val, const char *caller, const int line);
109190 extern int dbg_rtw_write16(_adapter *adapter, u32 addr, u16 val, const char *caller, const int line);
109191 extern int dbg_rtw_write32(_adapter *adapter, u32 addr, u32 val, const char *caller, const int line);
109192 extern int dbg_rtw_writeN(_adapter *adapter, u32 addr ,u32 length , u8 *data, const char *caller, const int line);
109193
109194 -#define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr))
109195 -#define rtw_read16(adapter, addr) _rtw_read16((adapter), (addr))
109196 -#define rtw_read32(adapter, addr) _rtw_read32((adapter), (addr))
109197 +#define rtw_read8(adapter, addr) dbg_rtw_read8((adapter), (addr), __FUNCTION__, __LINE__)
109198 +#define rtw_read16(adapter, addr) dbg_rtw_read16((adapter), (addr), __FUNCTION__, __LINE__)
109199 +#define rtw_read32(adapter, addr) dbg_rtw_read32((adapter), (addr), __FUNCTION__, __LINE__)
109200 #define rtw_read_mem(adapter, addr, cnt, mem) _rtw_read_mem((adapter), (addr), (cnt), (mem))
109201 #define rtw_read_port(adapter, addr, cnt, mem) _rtw_read_port((adapter), (addr), (cnt), (mem))
109202 #define rtw_read_port_cancel(adapter) _rtw_read_port_cancel((adapter))
109203
109204 -#define DBG_IO_WRITE_SNIFF_ADDR_START 0x24 //0x4c //0x4c // the starting address to sniff
109205 -#define DBG_IO_WRITE_SNIFF_ADDR_END 0x27 //0x4c+ 1 // the ending address to sniff
109206 -
109207 #define rtw_write8(adapter, addr, val) dbg_rtw_write8((adapter), (addr), (val), __FUNCTION__, __LINE__)
109208 #define rtw_write16(adapter, addr, val) dbg_rtw_write16((adapter), (addr), (val), __FUNCTION__, __LINE__)
109209 #define rtw_write32(adapter, addr, val) dbg_rtw_write32((adapter), (addr), (val), __FUNCTION__, __LINE__)
109210 @@ -455,7 +416,7 @@ extern int dbg_rtw_writeN(_adapter *adapter, u32 addr ,u32 length , u8 *data, co
109211
109212 #define rtw_write_mem(adapter, addr, cnt, mem) _rtw_write_mem((adapter), addr, cnt, mem)
109213 #define rtw_write_port(adapter, addr, cnt, mem) _rtw_write_port(adapter, addr, cnt, mem)
109214 -#define rtw_write_port_sync(adapter, addr, cnt, mem) _rtw_write_port_sync((adapter), (addr), (cnt), (mem))
109215 +#define rtw_write_port_and_wait(adapter, addr, cnt, mem, timeout_ms) _rtw_write_port_and_wait((adapter), (addr), (cnt), (mem), (timeout_ms))
109216 #define rtw_write_port_cancel(adapter) _rtw_write_port_cancel(adapter)
109217 #else //DBG_IO
109218 #define rtw_read8(adapter, addr) _rtw_read8((adapter), (addr))
109219 @@ -476,7 +437,7 @@ extern int dbg_rtw_writeN(_adapter *adapter, u32 addr ,u32 length , u8 *data, co
109220
109221 #define rtw_write_mem(adapter, addr, cnt, mem) _rtw_write_mem((adapter), (addr), (cnt), (mem))
109222 #define rtw_write_port(adapter, addr, cnt, mem) _rtw_write_port((adapter), (addr), (cnt), (mem))
109223 -#define rtw_write_port_sync(adapter, addr, cnt, mem) _rtw_write_port_sync((adapter), (addr), (cnt), (mem))
109224 +#define rtw_write_port_and_wait(adapter, addr, cnt, mem, timeout_ms) _rtw_write_port_and_wait((adapter), (addr), (cnt), (mem), (timeout_ms))
109225 #define rtw_write_port_cancel(adapter) _rtw_write_port_cancel((adapter))
109226 #endif //DBG_IO
109227
109228 @@ -512,7 +473,7 @@ extern void async_write_mem(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
109229 extern void async_write_port(_adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
109230
109231
109232 -int rtw_init_io_priv(_adapter *padapter);
109233 +int rtw_init_io_priv(_adapter *padapter, void (*set_intf_ops)(struct _io_ops *pops));
109234
109235
109236 extern uint alloc_io_queue(_adapter *adapter);
109237 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h b/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h
109238 index e6d34f0..c4da301 100644
109239 --- a/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h
109240 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h
109241 @@ -16,8 +16,7 @@
109242 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109243 *
109244 *
109245 -
109246 -******************************************************************************/
109247 + ******************************************************************************/
109248 #ifndef _RTW_IOCTL_H_
109249 #define _RTW_IOCTL_H_
109250
109251 @@ -88,14 +87,14 @@ struct oid_funs_node {
109252
109253 struct oid_par_priv
109254 {
109255 - void *adapter_context;
109256 - NDIS_OID oid;
109257 - void* information_buf;
109258 + void *adapter_context;
109259 + NDIS_OID oid;
109260 + void *information_buf;
109261 u32 information_buf_len;
109262 - u32* bytes_rw;
109263 - u32* bytes_needed;
109264 + u32 *bytes_rw;
109265 + u32 *bytes_needed;
109266 enum oid_type type_of_oid;
109267 - u32 dbg;
109268 + u32 dbg;
109269 };
109270
109271 struct oid_obj_priv {
109272 @@ -103,7 +102,8 @@ struct oid_obj_priv {
109273 NDIS_STATUS (*oidfuns)(struct oid_par_priv *poid_par_priv);
109274 };
109275
109276 -#ifdef CONFIG_MP_INCLUDED
109277 +#if (defined(CONFIG_MP_INCLUDED) && defined(_RTW_MP_IOCTL_C_)) || \
109278 + (defined(PLATFORM_WINDOWS) && defined(_RTW_IOCTL_RTL_C_))
109279 static NDIS_STATUS oid_null_function(struct oid_par_priv* poid_par_priv)
109280 {
109281 _func_enter_;
109282 @@ -243,10 +243,8 @@ void Set_802_3_MULTICAST_LIST(ADAPTER *pAdapter, UCHAR *MCListbuf, ULONG MCListl
109283 #endif// end of PLATFORM_WINDOWS
109284
109285
109286 -#ifdef PLATFORM_LINUX
109287 -
109288 +#if defined(PLATFORM_LINUX) && defined(CONFIG_WIRELESS_EXT)
109289 extern struct iw_handler_def rtw_handlers_def;
109290 -
109291 #endif
109292
109293 extern NDIS_STATUS drv_query_info(
109294 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h b/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h
109295 index e9ad16f1..5b6018a 100644
109296 --- a/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h
109297 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h
109298 @@ -16,8 +16,7 @@
109299 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109300 *
109301 *
109302 -
109303 -******************************************************************************/
109304 + ******************************************************************************/
109305 #ifndef _RTW_IOCTL_QUERY_H_
109306 #define _RTW_IOCTL_QUERY_H_
109307
109308 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h b/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h
109309 index 1ea8f21..3bff766 100644
109310 --- a/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h
109311 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h
109312 @@ -16,8 +16,7 @@
109313 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109314 *
109315 *
109316 -
109317 -******************************************************************************/
109318 + ******************************************************************************/
109319 #ifndef _RTW_IOCTL_RTL_H_
109320 #define _RTW_IOCTL_RTL_H_
109321
109322 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h b/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h
109323 index 577af51..82f9810 100644
109324 --- a/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h
109325 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h
109326 @@ -16,8 +16,7 @@
109327 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109328 *
109329 *
109330 -
109331 -******************************************************************************/
109332 + ******************************************************************************/
109333 #ifndef __RTW_IOCTL_SET_H_
109334 #define __RTW_IOCTL_SET_H_
109335
109336 @@ -60,19 +59,21 @@ u8 rtw_set_802_11_authentication_mode(_adapter *pdapter, NDIS_802_11_AUTHENTICAT
109337 u8 rtw_set_802_11_bssid(_adapter* padapter, u8 *bssid);
109338 u8 rtw_set_802_11_add_wep(_adapter * padapter, NDIS_802_11_WEP * wep);
109339 u8 rtw_set_802_11_disassociate(_adapter * padapter);
109340 -u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter);
109341 +u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter, NDIS_802_11_SSID *pssid, int ssid_max_num);
109342 u8 rtw_set_802_11_infrastructure_mode(_adapter * padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
109343 u8 rtw_set_802_11_remove_wep(_adapter * padapter, u32 keyindex);
109344 u8 rtw_set_802_11_ssid(_adapter * padapter, NDIS_802_11_SSID * ssid);
109345 +u8 rtw_set_802_11_connect(_adapter* padapter, u8 *bssid, NDIS_802_11_SSID *ssid);
109346 u8 rtw_set_802_11_remove_key(_adapter * padapter, NDIS_802_11_REMOVE_KEY * key);
109347
109348 -
109349 +u8 rtw_validate_bssid(u8 *bssid);
109350 u8 rtw_validate_ssid(NDIS_802_11_SSID *ssid);
109351
109352 -u16 rtw_get_network_max_rate(_adapter *adapter, WLAN_BSSID_EX *bss);
109353 +u16 rtw_get_cur_max_rate(_adapter *adapter);
109354 int rtw_set_scan_mode(_adapter *adapter, RT_SCAN_TYPE scan_mode);
109355 int rtw_set_channel_plan(_adapter *adapter, u8 channel_plan);
109356 int rtw_set_country(_adapter *adapter, const char *country_code);
109357 +int rtw_set_band(_adapter *adapter, enum _BAND band);
109358
109359 #endif
109360
109361 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_led.h b/drivers/net/wireless/rtl8192cu/include/rtw_led.h
109362 index 72634f8..b5365ba 100644
109363 --- a/drivers/net/wireless/rtl8192cu/include/rtw_led.h
109364 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_led.h
109365 @@ -16,8 +16,7 @@
109366 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109367 *
109368 *
109369 -
109370 -******************************************************************************/
109371 + ******************************************************************************/
109372 #ifndef __RTW_LED_H_
109373 #define __RTW_LED_H_
109374
109375 @@ -44,15 +43,15 @@ typedef enum _LED_CTL_MODE{
109376 }LED_CTL_MODE;
109377
109378
109379 -#ifdef CONFIG_USB_HCI
109380 +#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
109381 //================================================================================
109382 // LED object.
109383 //================================================================================
109384
109385 typedef enum _LED_STATE_871x{
109386 LED_UNKNOWN = 0,
109387 - LED_ON = 1,
109388 - LED_OFF = 2,
109389 + RTW_LED_ON = 1,
109390 + RTW_LED_OFF = 2,
109391 LED_BLINK_NORMAL = 3,
109392 LED_BLINK_SLOWLY = 4,
109393 LED_POWER_ON_BLINK = 5,
109394 @@ -95,10 +94,10 @@ typedef struct _LED_871x{
109395 u8 bLedWPSBlinkInProgress;
109396
109397 u32 BlinkTimes; // Number of times to toggle led state for blinking.
109398 - LED_STATE_871x BlinkingLedState; // Next state for blinking, either LED_ON or LED_OFF are.
109399 + LED_STATE_871x BlinkingLedState; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are.
109400
109401 _timer BlinkTimer; // Timer object for led blinking.
109402 -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
109403 +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)|| defined PLATFORM_FREEBSD
109404 _workitem BlinkWorkItem; // Workitem used by BlinkTimer to manipulate H/W to blink LED.
109405 #endif
109406 } LED_871x, *PLED_871x;
109407 @@ -127,8 +126,8 @@ typedef enum _LED_STRATEGY_871x{
109408
109409 typedef enum _LED_STATE_871x{
109410 LED_UNKNOWN = 0,
109411 - LED_ON = 1,
109412 - LED_OFF = 2,
109413 + RTW_LED_ON = 1,
109414 + RTW_LED_OFF = 2,
109415 LED_BLINK_NORMAL = 3,
109416 LED_BLINK_SLOWLY = 4,
109417 LED_POWER_ON_BLINK = 5,
109418 @@ -160,9 +159,13 @@ typedef struct _LED_871x{
109419
109420 u8 bLedSlowBlinkInProgress;//added by vivi, for led new mode
109421 u32 BlinkTimes; // Number of times to toggle led state for blinking.
109422 - LED_STATE_871x BlinkingLedState; // Next state for blinking, either LED_ON or LED_OFF are.
109423 + LED_STATE_871x BlinkingLedState; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are.
109424
109425 _timer BlinkTimer; // Timer object for led blinking.
109426 +
109427 + u8 bLedLinkBlinkInProgress;
109428 + u8 bLedNoLinkBlinkInProgress;
109429 + u8 bLedScanBlinkInProgress;
109430 } LED_871x, *PLED_871x;
109431
109432
109433 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h b/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h
109434 index 0beca93..d9d6456 100644
109435 --- a/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h
109436 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h
109437 @@ -16,18 +16,21 @@
109438 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109439 *
109440 *
109441 -
109442 -******************************************************************************/
109443 + ******************************************************************************/
109444 #ifndef __RTW_MLME_H_
109445 #define __RTW_MLME_H_
109446
109447 #include <drv_conf.h>
109448 #include <osdep_service.h>
109449 +#include <mlme_osdep.h>
109450 #include <drv_types.h>
109451 #include <wlan_bssdef.h>
109452
109453 +#ifdef CONFIG_INTEL_WIDI
109454 +#include <rtw_intel_widi.h>
109455 +#endif
109456
109457 -#define MAX_BSS_CNT 64
109458 +#define MAX_BSS_CNT 128
109459 //#define MAX_JOIN_TIMEOUT 2000
109460 //#define MAX_JOIN_TIMEOUT 2500
109461 #define MAX_JOIN_TIMEOUT 6500
109462 @@ -45,39 +48,48 @@
109463 #define SCANQUEUE_LIFETIME 20 // unit:sec
109464 #endif
109465
109466 -#define WIFI_NULL_STATE 0x00000000
109467 -#define WIFI_ASOC_STATE 0x00000001 // Under Linked state...
109468 -#define WIFI_REASOC_STATE 0x00000002
109469 -#define WIFI_SLEEP_STATE 0x00000004
109470 -#define WIFI_STATION_STATE 0x00000008
109471 +#define WIFI_NULL_STATE 0x00000000
109472 +
109473 +#define WIFI_ASOC_STATE 0x00000001 // Under Linked state...
109474 +#define WIFI_REASOC_STATE 0x00000002
109475 +#define WIFI_SLEEP_STATE 0x00000004
109476 +#define WIFI_STATION_STATE 0x00000008
109477 +
109478 #define WIFI_AP_STATE 0x00000010
109479 #define WIFI_ADHOC_STATE 0x00000020
109480 #define WIFI_ADHOC_MASTER_STATE 0x00000040
109481 #define WIFI_UNDER_LINKING 0x00000080
109482 -//#define WIFI_UNDER_CMD 0x00000200
109483 -// ========== P2P Section Start ===============
109484 -#define WIFI_P2P_LISTEN_STATE 0x00010000
109485 -#define WIFI_P2P_GROUP_FORMATION_STATE 0x00020000
109486 -// ========== P2P Section End ===============
109487 -#define WIFI_SITE_MONITOR 0x00000800 //to indicate the station is under site surveying
109488 +
109489 +#define WIFI_UNDER_WPS 0x00000100
109490 +//#define WIFI_UNDER_CMD 0x00000200
109491 +//#define WIFI_UNDER_P2P 0x00000400
109492 +#define WIFI_STA_ALIVE_CHK_STATE 0x00000400
109493 +#define WIFI_SITE_MONITOR 0x00000800 //to indicate the station is under site surveying
109494
109495 #ifdef WDS
109496 -#define WIFI_WDS 0x00001000
109497 -#define WIFI_WDS_RX_BEACON 0x00002000 // already rx WDS AP beacon
109498 +#define WIFI_WDS 0x00001000
109499 +#define WIFI_WDS_RX_BEACON 0x00002000 // already rx WDS AP beacon
109500 #endif
109501 #ifdef AUTO_CONFIG
109502 -#define WIFI_AUTOCONF 0x00004000
109503 -#define WIFI_AUTOCONF_IND 0x00008000
109504 +#define WIFI_AUTOCONF 0x00004000
109505 +#define WIFI_AUTOCONF_IND 0x00008000
109506 #endif
109507
109508 +/*
109509 +// ========== P2P Section Start ===============
109510 +#define WIFI_P2P_LISTEN_STATE 0x00010000
109511 +#define WIFI_P2P_GROUP_FORMATION_STATE 0x00020000
109512 +// ========== P2P Section End ===============
109513 +*/
109514 +
109515 //#ifdef UNDER_MPTEST
109516 -#define WIFI_MP_STATE 0x00010000
109517 -#define WIFI_MP_CTX_BACKGROUND 0x00020000 // in continous tx background
109518 -#define WIFI_MP_CTX_ST 0x00040000 // in continous tx with single-tone
109519 +#define WIFI_MP_STATE 0x00010000
109520 +#define WIFI_MP_CTX_BACKGROUND 0x00020000 // in continous tx background
109521 +#define WIFI_MP_CTX_ST 0x00040000 // in continous tx with single-tone
109522 #define WIFI_MP_CTX_BACKGROUND_PENDING 0x00080000 // pending in continous tx background due to out of skb
109523 -#define WIFI_MP_CTX_CCK_HW 0x00100000 // in continous tx
109524 -#define WIFI_MP_CTX_CCK_CS 0x00200000 // in continous tx with carrier suppression
109525 -#define WIFI_MP_LPBK_STATE 0x00400000
109526 +#define WIFI_MP_CTX_CCK_HW 0x00100000 // in continous tx
109527 +#define WIFI_MP_CTX_CCK_CS 0x00200000 // in continous tx with carrier suppression
109528 +#define WIFI_MP_LPBK_STATE 0x00400000
109529 //#endif
109530
109531 //#define _FW_UNDER_CMD WIFI_UNDER_CMD
109532 @@ -85,6 +97,7 @@
109533 #define _FW_LINKED WIFI_ASOC_STATE
109534 #define _FW_UNDER_SURVEY WIFI_SITE_MONITOR
109535
109536 +
109537 enum dot11AuthAlgrthmNum {
109538 dot11AuthAlgrthm_Open = 0,
109539 dot11AuthAlgrthm_Shared,
109540 @@ -101,6 +114,29 @@ typedef enum _RT_SCAN_TYPE
109541 SCAN_MIX,
109542 }RT_SCAN_TYPE, *PRT_SCAN_TYPE;
109543
109544 +enum DriverInterface {
109545 + DRIVER_WEXT = 1,
109546 + DRIVER_CFG80211 = 2
109547 +};
109548 +
109549 +enum _BAND
109550 +{
109551 + GHZ24_50 = 0,
109552 + GHZ_50,
109553 + GHZ_24,
109554 + GHZ_MAX,
109555 +};
109556 +
109557 +#define rtw_band_valid(band) ((band) >= GHZ24_50 && (band) < GHZ_MAX)
109558 +
109559 +enum SCAN_RESULT_TYPE
109560 +{
109561 + SCAN_RESULT_P2P_ONLY = 0, // Will return all the P2P devices.
109562 + SCAN_RESULT_ALL = 1, // Will return all the scanned device, include AP.
109563 + SCAN_RESULT_WFD_TYPE = 2 // Will just return the correct WFD device.
109564 + // If this device is Miracast sink device, it will just return all the Miracast source devices.
109565 +};
109566 +
109567 /*
109568
109569 there are several "locks" in mlme_priv,
109570 @@ -136,6 +172,7 @@ typedef struct _RT_LINK_DETECT_T{
109571 BOOLEAN bRxBusyTraffic;
109572 BOOLEAN bHigherBusyTraffic; // For interrupt migration purpose.
109573 BOOLEAN bHigherBusyRxTraffic; // We may disable Tx interrupt according as Rx traffic.
109574 + BOOLEAN bHigherBusyTxTraffic; // We may disable Tx interrupt according as Tx traffic.
109575 }RT_LINK_DETECT_T, *PRT_LINK_DETECT_T;
109576
109577 struct profile_info {
109578 @@ -146,9 +183,14 @@ struct profile_info {
109579
109580 struct tx_invite_req_info{
109581 u8 token;
109582 - u8 ssid[ WLAN_SSID_MAXLEN ];
109583 + u8 benable;
109584 + u8 go_ssid[ WLAN_SSID_MAXLEN ];
109585 u8 ssidlen;
109586 - u8 peer_operation_ch;
109587 + u8 go_bssid[ ETH_ALEN ];
109588 + u8 peer_macaddr[ ETH_ALEN ];
109589 + u8 operating_ch; // This information will be set by using the p2p_set op_ch=x
109590 + u8 peer_ch; // The listen channel for peer P2P device
109591 +
109592 };
109593
109594 struct tx_invite_resp_info{
109595 @@ -158,9 +200,25 @@ struct tx_invite_resp_info{
109596 #ifdef CONFIG_WFD
109597
109598 struct wifi_display_info{
109599 - u16 rtsp_ctrlport; // TCP port number at which the this WFD device listens for RTSP messages
109600 - u16 peer_rtsp_ctrlport; // TCP port number at which the peer WFD device listens for RTSP messages
109601 - // This filed should be filled when receiving the gropu negotiation request
109602 + u16 wfd_enable; // Eanble/Disable the WFD function.
109603 + u16 rtsp_ctrlport; // TCP port number at which the this WFD device listens for RTSP messages
109604 + u16 peer_rtsp_ctrlport; // TCP port number at which the peer WFD device listens for RTSP messages
109605 + // This filed should be filled when receiving the gropu negotiation request
109606 +
109607 + u8 peer_session_avail; // WFD session is available or not for the peer wfd device.
109608 + // This variable will be set when sending the provisioning discovery request to peer WFD device.
109609 + // And this variable will be reset when it is read by using the iwpriv p2p_get wfd_sa command.
109610 +
109611 + u8 ip_address[4];
109612 + u8 peer_ip_address[4];
109613 + u8 wfd_pc; // WFD preferred connection
109614 + // 0 -> Prefer to use the P2P for WFD connection on peer side.
109615 + // 1 -> Prefer to use the TDLS for WFD connection on peer side.
109616 +
109617 + u8 wfd_device_type; // WFD Device Type
109618 + // 0 -> WFD Source Device
109619 + // 1 -> WFD Primary Sink Device
109620 + enum SCAN_RESULT_TYPE scan_result_type; // Used when P2P is enable. This parameter will impact the scan result.
109621 };
109622 #endif //CONFIG_WFD
109623
109624 @@ -190,6 +248,15 @@ struct group_id_info{
109625 u8 ssid[ WLAN_SSID_MAXLEN ]; // The SSID of this P2P group
109626 };
109627
109628 +struct scan_limit_info{
109629 + u8 scan_op_ch_only; // When this flag is set, the driver should just scan the operation channel
109630 +#ifndef P2P_OP_CHECK_SOCIAL_CH
109631 + u8 operation_ch[2]; // Store the operation channel of invitation request frame
109632 +#else
109633 + u8 operation_ch[5]; // Store additional channel 1,6,11 for Android 4.2 IOT & Nexus 4
109634 +#endif //P2P_OP_CHECK_SOCIAL_CH
109635 +};
109636 +
109637 #ifdef CONFIG_IOCTL_CFG80211
109638 struct cfg80211_wifidirect_info{
109639 _timer remain_on_ch_timer;
109640 @@ -197,8 +264,7 @@ struct cfg80211_wifidirect_info{
109641 struct ieee80211_channel remain_on_ch_channel;
109642 enum nl80211_channel_type remain_on_ch_type;
109643 u64 remain_on_ch_cookie;
109644 - struct net_device *remain_on_ch_dev;
109645 -
109646 + bool is_ro_ch;
109647 };
109648 #endif //CONFIG_IOCTL_CFG80211
109649
109650 @@ -209,6 +275,12 @@ struct wifidirect_info{
109651
109652 // Used to do the scanning. After confirming the peer is availalble, the driver transmits the P2P frame to peer.
109653 _timer pre_tx_scan_timer;
109654 + _timer reset_ch_sitesurvey;
109655 + _timer reset_ch_sitesurvey2; // Just for resetting the scan limit function by using p2p nego
109656 +#ifdef CONFIG_CONCURRENT_MODE
109657 + // Used to switch the channel between legacy AP and listen state.
109658 + _timer ap_p2p_switch_timer;
109659 +#endif
109660 struct tx_provdisc_req_info tx_prov_disc_info;
109661 struct rx_provdisc_req_info rx_prov_disc_info;
109662 struct tx_invite_req_info invitereq_info;
109663 @@ -216,9 +288,11 @@ struct wifidirect_info{
109664 struct tx_invite_resp_info inviteresp_info;
109665 struct tx_nego_req_info nego_req_info;
109666 struct group_id_info groupid_info; // Store the group id information when doing the group negotiation handshake.
109667 + struct scan_limit_info rx_invitereq_info; // Used for get the limit scan channel from the Invitation procedure
109668 + struct scan_limit_info p2p_info; // Used for get the limit scan channel from the P2P negotiation handshake
109669 #ifdef CONFIG_WFD
109670 - struct wifi_display_info wfd_info;
109671 -#endif
109672 + struct wifi_display_info *wfd_info;
109673 +#endif
109674 enum P2P_ROLE role;
109675 enum P2P_STATE pre_p2p_state;
109676 enum P2P_STATE p2p_state;
109677 @@ -232,6 +306,7 @@ struct wifidirect_info{
109678 u8 p2p_wildcard_ssid[P2P_WILDCARD_SSID_LEN];
109679 u8 intent; // should only include the intent value.
109680 u8 p2p_peer_interface_addr[ ETH_ALEN ];
109681 + u8 p2p_peer_device_addr[ ETH_ALEN ];
109682 u8 peer_intent; // Included the intent value and tie breaker value.
109683 u8 device_name[ WPS_MAX_DEVICE_NAME_LEN ]; // Device name for displaying on searching device screen
109684 u8 device_name_len;
109685 @@ -244,15 +319,41 @@ struct wifidirect_info{
109686 u8 nego_ssidlen;
109687 u8 p2p_group_ssid[WLAN_SSID_MAXLEN];
109688 u8 p2p_group_ssid_len;
109689 -
109690 - 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.
109691 - u16 supported_wps_cm; // This field describes the WPS config method which this driver supported.
109692 - // The value should be the combination of config method defined in page104 of WPS v2.0 spec.
109693 - u8 channel_cnt; // This field is the count number for P2P Channel List attribute of group negotitation response frame.
109694 - u8 channel_list[13]; // This field will contain the channel number of P2P Channel List attribute of group negotitation response frame.
109695 - // We will use the channel_cnt and channel_list fields when constructing the group negotitation confirm frame.
109696 - u8 p2p_ps_enable;
109697 - enum P2P_PS p2p_ps; // indicate p2p ps state
109698 + u8 persistent_supported; // Flag to know the persistent function should be supported or not.
109699 + // In the Sigma test, the Sigma will provide this enable from the sta_set_p2p CAPI.
109700 + // 0: disable
109701 + // 1: enable
109702 + u8 session_available; // Flag to set the WFD session available to enable or disable "by Sigma"
109703 + // In the Sigma test, the Sigma will disable the session available by using the sta_preset CAPI.
109704 + // 0: disable
109705 + // 1: enable
109706 + u8 wfd_tdls_enable; // Flag to enable or disable the TDLS by WFD Sigma
109707 + // 0: disable
109708 + // 1: enable
109709 + u8 wfd_tdls_weaksec; // Flag to enable or disable the weak security function for TDLS by WFD Sigma
109710 + // 0: disable
109711 + // In this case, the driver can't issue the tdsl setup request frame.
109712 + // 1: enable
109713 + // In this case, the driver can issue the tdls setup request frame
109714 + // even the current security is weak security.
109715 +
109716 + 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.
109717 + u16 supported_wps_cm; // This field describes the WPS config method which this driver supported.
109718 + // The value should be the combination of config method defined in page104 of WPS v2.0 spec.
109719 + u8 external_uuid; // UUID flag
109720 + u8 uuid[16]; // UUID
109721 + uint channel_list_attr_len; // This field will contain the length of body of P2P Channel List attribute of group negotitation response frame.
109722 + u8 channel_list_attr[100]; // This field will contain the body of P2P Channel List attribute of group negotitation response frame.
109723 + // We will use the channel_cnt and channel_list fields when constructing the group negotitation confirm frame.
109724 + u8 driver_interface; // Indicate DRIVER_WEXT or DRIVER_CFG80211
109725 +
109726 +#ifdef CONFIG_CONCURRENT_MODE
109727 + u16 ext_listen_interval; // The interval to be available with legacy AP (ms)
109728 + u16 ext_listen_period; // The time period to be available for P2P listen state (ms)
109729 +#endif
109730 +#ifdef CONFIG_P2P_PS
109731 + enum P2P_PS_MODE p2p_ps_mode; // indicate p2p ps mode
109732 + enum P2P_PS_STATE p2p_ps_state; // indicate p2p ps state
109733 u8 noa_index; // Identifies and instance of Notice of Absence timing.
109734 u8 ctwindow; // Client traffic window. A period of time in TU after TBTT.
109735 u8 opp_ps; // opportunistic power save.
109736 @@ -261,11 +362,12 @@ struct wifidirect_info{
109737 u32 noa_duration[P2P_MAX_NOA_NUM]; // Max duration for owner, preferred or min acceptable duration for client.
109738 u32 noa_interval[P2P_MAX_NOA_NUM]; // Length of interval for owner, preferred or max acceptable interval of client.
109739 u32 noa_start_time[P2P_MAX_NOA_NUM]; // schedule expressed in terms of the lower 4 bytes of the TSF timer.
109740 +#endif // CONFIG_P2P_PS
109741 };
109742
109743 -struct tdls_ss_record{ //signal strength record
109744 +struct tdls_ss_record{ //signal strength record; recording the tdls sta with lowerest ss
109745 u8 macaddr[ETH_ALEN];
109746 - u8 signal_strength;
109747 + u8 RxPWDBAll;
109748 u8 is_tdls_sta; // _TRUE: direct link sta, _FALSE: else
109749 };
109750
109751 @@ -275,16 +377,20 @@ struct tdls_info{
109752 u8 sta_cnt;
109753 u8 sta_maximum; // 1:tdls sta is equal (NUM_STA-1), reach max direct link number; 0: else;
109754 struct tdls_ss_record ss_record;
109755 - u8 cam_entry_to_write; //cam entry that is empty to write
109756 - u8 cam_entry_to_clear; //cam entry that is trying to clear, using in direct link teardown
109757 + u8 macid_index; //macid entry that is ready to write
109758 + u8 clear_cam; //cam entry that is trying to clear, using it in direct link teardown
109759 u8 ch_sensing;
109760 u8 cur_channel;
109761 u8 candidate_ch;
109762 u8 collect_pkt_num[MAX_CHANNEL_NUM];
109763 _lock cmd_lock;
109764 _lock hdl_lock;
109765 - _lock timer_lock;
109766 u8 watchdog_count;
109767 + u8 dev_discovered; //WFD_TDLS: for sigma test
109768 + u8 enable;
109769 +#ifdef CONFIG_WFD
109770 + struct wifi_display_info *wfd_info;
109771 +#endif
109772 };
109773
109774 struct mlme_priv {
109775 @@ -299,6 +405,7 @@ struct mlme_priv {
109776
109777 u8 *nic_hdl;
109778
109779 + u8 not_indic_disco;
109780 _list *pscanned;
109781 _queue free_bss_pool;
109782 _queue scanned_queue;
109783 @@ -317,6 +424,7 @@ struct mlme_priv {
109784 _timer assoc_timer;
109785
109786 uint assoc_by_bssid;
109787 + uint assoc_by_rssi;
109788
109789 _timer scan_to_timer; // driver itself handles scan_timeout status.
109790 u32 scan_start_time; // used to evaluate the time spent in scanning
109791 @@ -346,10 +454,9 @@ struct mlme_priv {
109792 RT_LINK_DETECT_T LinkDetectInfo;
109793 _timer dynamic_chk_timer; //dynamic/periodic check timer
109794
109795 - u8 key_mask; //use for ips to set wep key after ips_leave
109796 u8 acm_mask; // for wmm acm mask
109797 u8 ChannelPlan;
109798 - RT_SCAN_TYPE scan_mode; // active: 1, passive: 0
109799 + RT_SCAN_TYPE scan_mode; // active: 1, passive: 0
109800
109801 //u8 probereq_wpsie[MAX_WPS_IE_LEN];//added in probe req
109802 //int probereq_wpsie_len;
109803 @@ -385,15 +492,20 @@ struct mlme_priv {
109804 u16 ht_op_mode;
109805 #endif /* CONFIG_80211N_HT */
109806
109807 + u8 *assoc_req;
109808 + u32 assoc_req_len;
109809 + u8 *assoc_rsp;
109810 + u32 assoc_rsp_len;
109811 +
109812 u8 *wps_beacon_ie;
109813 //u8 *wps_probe_req_ie;
109814 u8 *wps_probe_resp_ie;
109815 - u8 *wps_assoc_resp_ie; // for CONFIG_IOCTL_CFG80211, this IE could include p2p ie
109816 + u8 *wps_assoc_resp_ie; // for CONFIG_IOCTL_CFG80211, this IE could include p2p ie / wfd ie
109817
109818 u32 wps_beacon_ie_len;
109819 //u32 wps_probe_req_ie_len;
109820 u32 wps_probe_resp_ie_len;
109821 - u32 wps_assoc_resp_ie_len;
109822 + u32 wps_assoc_resp_ie_len; // for CONFIG_IOCTL_CFG80211, this IE len could include p2p ie / wfd ie
109823
109824 u8 *p2p_beacon_ie;
109825 u8 *p2p_probe_req_ie;
109826 @@ -425,12 +537,58 @@ struct mlme_priv {
109827
109828 #endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
109829
109830 +#if defined(CONFIG_WFD) && defined(CONFIG_IOCTL_CFG80211)
109831 +
109832 + u8 *wfd_beacon_ie;
109833 + u8 *wfd_probe_req_ie;
109834 + u8 *wfd_probe_resp_ie;
109835 + u8 *wfd_go_probe_resp_ie; //for GO
109836 + u8 *wfd_assoc_req_ie;
109837 +
109838 + u32 wfd_beacon_ie_len;
109839 + u32 wfd_probe_req_ie_len;
109840 + u32 wfd_probe_resp_ie_len;
109841 + u32 wfd_go_probe_resp_ie_len; //for GO
109842 + u32 wfd_assoc_req_ie_len;
109843 +
109844 +#endif
109845 +
109846 #ifdef RTK_DMP_PLATFORM
109847 // DMP kobject_hotplug function signal need in passive level
109848 _workitem Linkup_workitem;
109849 _workitem Linkdown_workitem;
109850 #endif
109851
109852 +#ifdef CONFIG_INTEL_WIDI
109853 + int widi_state;
109854 + int listen_state;
109855 + _timer listen_timer;
109856 + ATOMIC_T rx_probe_rsp; // 1:receive probe respone from RDS source.
109857 + u8 *l2sdTaBuffer;
109858 + u8 channel_idx;
109859 + s8 group_cnt; //For WiDi 3.5, they specified another scan algo. for WFD/RDS co-existed
109860 + u8 sa_ext[L2SDTA_SERVICE_VE_LEN];
109861 +
109862 + u8 widi_enable;
109863 + /**
109864 + * For WiDi 4; upper layer would set
109865 + * p2p_primary_device_type_category_id
109866 + * p2p_primary_device_type_sub_category_id
109867 + * p2p_secondary_device_type_category_id
109868 + * p2p_secondary_device_type_sub_category_id
109869 + */
109870 + u16 p2p_pdt_cid;
109871 + u16 p2p_pdt_scid;
109872 + u8 num_p2p_sdt;
109873 + u16 p2p_sdt_cid[MAX_NUM_P2P_SDT];
109874 + u16 p2p_sdt_scid[MAX_NUM_P2P_SDT];
109875 + u8 p2p_reject_disable; //When starting NL80211 wpa_supplicant/hostapd, it will call netdev_close
109876 + //such that it will cause p2p disabled. Use this flag to reject.
109877 +#endif // CONFIG_INTEL_WIDI
109878 +
109879 +#ifdef CONFIG_CONCURRENT_MODE
109880 + u8 scanning_via_buddy_intf;
109881 +#endif
109882 };
109883
109884 #ifdef CONFIG_AP_MODE
109885 @@ -479,7 +637,7 @@ extern void _rtw_scan_timeout_handler (
109886
109887 #endif
109888
109889 -#ifdef PLATFORM_LINUX
109890 +#if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
109891 extern int event_thread(void *context);
109892 extern void rtw_join_timeout_handler(void* FunctionContext);
109893 extern void _rtw_scan_timeout_handler(void* FunctionContext);
109894 @@ -563,6 +721,11 @@ __inline static void up_scanned_network(struct mlme_priv *pmlmepriv)
109895 _exit_critical_bh(&pmlmepriv->lock, &irqL);
109896 }
109897
109898 +#ifdef CONFIG_CONCURRENT_MODE
109899 +sint rtw_buddy_adapter_up(_adapter *padapter);
109900 +sint check_buddy_fwstate(_adapter *padapter, sint state);
109901 +#endif //CONFIG_CONCURRENT_MODE
109902 +
109903 __inline static void down_scanned_network(struct mlme_priv *pmlmepriv)
109904 {
109905 _irqL irqL;
109906 @@ -592,6 +755,7 @@ extern void rtw_free_assoc_resources(_adapter* adapter, int lock_scanned_queue);
109907 extern void rtw_indicate_disconnect(_adapter* adapter);
109908 extern void rtw_indicate_connect(_adapter* adapter);
109909 void rtw_indicate_scan_done( _adapter *padapter, bool aborted);
109910 +void rtw_scan_abort(_adapter *adapter);
109911
109912 extern int rtw_restruct_sec_ie(_adapter *adapter,u8 *in_ie,u8 *out_ie,uint in_len);
109913 extern int rtw_restruct_wmm_ie(_adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_len, uint initial_out_len);
109914 @@ -606,8 +770,15 @@ extern void rtw_scan_timeout_handler(_adapter *adapter);
109915
109916 extern void rtw_dynamic_check_timer_handlder(_adapter *adapter);
109917 #ifdef CONFIG_SET_SCAN_DENY_TIMER
109918 -extern void rtw_set_scan_deny_timer_hdl(_adapter *adapter);
109919 -void rtw_set_scan_deny(struct mlme_priv *mlmepriv, u32 ms);
109920 +bool rtw_is_scan_deny(_adapter *adapter);
109921 +void rtw_clear_scan_deny(_adapter *adapter);
109922 +void rtw_set_scan_deny_timer_hdl(_adapter *adapter);
109923 +void rtw_set_scan_deny(_adapter *adapter, u32 ms);
109924 +#else
109925 +#define rtw_is_scan_deny(adapter) _FALSE
109926 +#define rtw_clear_scan_deny(adapter) do {} while (0)
109927 +#define rtw_set_scan_deny_timer_hdl(adapter) do {} while (0)
109928 +#define rtw_set_scan_deny(adapter, ms) do {} while (0)
109929 #endif
109930
109931
109932 @@ -643,16 +814,24 @@ u8 *rtw_get_beacon_interval_from_ie(u8 *ie);
109933 void rtw_joinbss_reset(_adapter *padapter);
109934
109935 #ifdef CONFIG_80211N_HT
109936 -unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len);
109937 -void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len);
109938 +unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len, u8 channel);
109939 +void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len, u8 channel);
109940 void rtw_issue_addbareq_cmd(_adapter *padapter, struct xmit_frame *pxmitframe);
109941 #endif
109942
109943 int rtw_is_same_ibss(_adapter *adapter, struct wlan_network *pnetwork);
109944 +int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst);
109945
109946 #ifdef CONFIG_LAYER2_ROAMING
109947 -void rtw_roaming(_adapter *padapter, struct wlan_network *tgt_network);
109948 -void _rtw_roaming(_adapter *padapter, struct wlan_network *tgt_network);
109949 +void _rtw_roaming(_adapter *adapter, struct wlan_network *tgt_network);
109950 +void rtw_roaming(_adapter *adapter, struct wlan_network *tgt_network);
109951 +void rtw_set_roaming(_adapter *adapter, u8 to_roaming);
109952 +u8 rtw_to_roaming(_adapter *adapter);
109953 +#else
109954 +#define _rtw_roaming(adapter, tgt_network) do {} while(0)
109955 +#define rtw_roaming(adapter, tgt_network) do {} while(0)
109956 +#define rtw_set_roaming(adapter, to_roaming) do {} while(0)
109957 +#define rtw_to_roaming(adapter) 0
109958 #endif
109959
109960
109961 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h b/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h
109962 index d9a203f..5cddca4 100644
109963 --- a/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h
109964 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h
109965 @@ -16,8 +16,7 @@
109966 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
109967 *
109968 *
109969 -
109970 -******************************************************************************/
109971 + ******************************************************************************/
109972 #ifndef __RTW_MLME_EXT_H_
109973 #define __RTW_MLME_EXT_H_
109974
109975 @@ -41,8 +40,8 @@
109976
109977 #define LINKED_TO (1) //unit:2 sec, 1x2=2 sec
109978
109979 -#define REAUTH_LIMIT (2)
109980 -#define REASSOC_LIMIT (2)
109981 +#define REAUTH_LIMIT (4)
109982 +#define REASSOC_LIMIT (4)
109983 #define READDBA_LIMIT (2)
109984
109985 //#define IOCMD_REG0 0x10250370
109986 @@ -61,6 +60,7 @@
109987 #define DYNAMIC_FUNC_SS BIT(2) //Tx Power Tracking
109988 #define DYNAMIC_FUNC_BT BIT(3)
109989 #define DYNAMIC_FUNC_ANT_DIV BIT(4)
109990 +#define DYNAMIC_FUNC_ADAPTIVITY BIT(5)
109991
109992 #define _HW_STATE_NOLINK_ 0x00
109993 #define _HW_STATE_ADHOC_ 0x01
109994 @@ -82,6 +82,16 @@
109995 #define _54M_RATE_ 11
109996
109997
109998 +extern unsigned char RTW_WPA_OUI[];
109999 +extern unsigned char WMM_OUI[];
110000 +extern unsigned char WPS_OUI[];
110001 +extern unsigned char WFD_OUI[];
110002 +extern unsigned char P2P_OUI[];
110003 +
110004 +extern unsigned char WMM_INFO_OUI[];
110005 +extern unsigned char WMM_PARA_OUI[];
110006 +
110007 +
110008 //
110009 // Channel Plan Type.
110010 // Note:
110011 @@ -113,7 +123,7 @@ typedef enum _RT_CHANNEL_DOMAIN
110012 RT_CHANNEL_DOMAIN_FCC_NO_DFS = 0x11,
110013 RT_CHANNEL_DOMAIN_JAPAN_NO_DFS = 0x12,
110014 RT_CHANNEL_DOMAIN_WORLD_WIDE_5G = 0x13,
110015 - RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS = 0x14,
110016 + RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS = 0x14,
110017
110018 //===== new channel plan mapping, (2GDOMAIN_5GDOMAIN) =====//
110019 RT_CHANNEL_DOMAIN_WORLD_NULL = 0x20,
110020 @@ -150,6 +160,7 @@ typedef enum _RT_CHANNEL_DOMAIN_2G
110021 RT_CHANNEL_DOMAIN_2G_FCC1 = 0x02, //US
110022 RT_CHANNEL_DOMAIN_2G_MKK1 = 0x03, //Japan
110023 RT_CHANNEL_DOMAIN_2G_ETSI2 = 0x04, //France
110024 + RT_CHANNEL_DOMAIN_2G_NULL = 0x05,
110025 //===== Add new channel plan above this line===============//
110026 RT_CHANNEL_DOMAIN_2G_MAX,
110027 }RT_CHANNEL_DOMAIN_2G, *PRT_CHANNEL_DOMAIN_2G;
110028 @@ -177,6 +188,7 @@ typedef enum _RT_CHANNEL_DOMAIN_5G
110029 //===== Driver Self Defined =====//
110030 RT_CHANNEL_DOMAIN_5G_FCC = 0x11,
110031 RT_CHANNEL_DOMAIN_5G_JAPAN_NO_DFS = 0x12,
110032 + RT_CHANNEL_DOMAIN_5G_FCC4_NO_DFS = 0x13,
110033 RT_CHANNEL_DOMAIN_5G_MAX,
110034 }RT_CHANNEL_DOMAIN_5G, *PRT_CHANNEL_DOMAIN_5G;
110035
110036 @@ -247,7 +259,10 @@ struct ss_res
110037 int bss_cnt;
110038 int channel_idx;
110039 int scan_mode;
110040 + u8 ssid_num;
110041 + u8 ch_num;
110042 NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
110043 + struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
110044 };
110045
110046 //#define AP_MODE 0x0C
110047 @@ -270,33 +285,6 @@ struct ss_res
110048 #define WIFI_FW_LINKING_STATE (WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE | WIFI_FW_AUTH_SUCCESS |WIFI_FW_ASSOC_STATE)
110049
110050 #ifdef CONFIG_TDLS
110051 -/* TDLS STA state */
110052 -#define UN_TDLS_STATE 0x00000000 //default state
110053 -#define TDLS_INITIATOR_STATE 0x10000000
110054 -#define TDLS_RESPONDER_STATE 0x20000000
110055 -#define TDLS_LINKED_STATE 0x40000000
110056 -#define TDLS_CH_SWITCH_ON_STATE 0x01000000
110057 -#define TDLS_PEER_AT_OFF_STATE 0x02000000 //could send pkt on target ch
110058 -#define TDLS_AT_OFF_CH_STATE 0x04000000
110059 -#define TDLS_CH_SW_INITIATOR_STATE 0x08000000 //avoiding duplicated or unconditional ch. switch rsp.
110060 -#define TDLS_APSD_CHSW_STATE 0x00100000 //in APSD and want to setup channel switch
110061 -#define TDLS_PEER_SLEEP_STATE 0x00200000 //peer sta is sleeping
110062 -#define TDLS_SW_OFF_STATE 0x00400000 //terminate channel swithcing
110063 -#define TDLS_ALIVE_STATE 0x00010000 //Check if peer sta is alived.
110064 -
110065 -#define TPK_RESEND_COUNT 301
110066 -#define CH_SWITCH_TIME 10
110067 -#define CH_SWITCH_TIMEOUT 30
110068 -#define TDLS_STAY_TIME 500
110069 -#define TDLS_SIGNAL_THRESH 0x20
110070 -#define TDLS_WATCHDOG_PERIOD 10 //Periodically sending tdls discovery request in TDLS_WATCHDOG_PERIOD * 2 sec
110071 -#define TDLS_ALIVE_TIMER_PH1 5000
110072 -#define TDLS_ALIVE_TIMER_PH2 2000
110073 -#define TDLS_STAY_TIME 500
110074 -#define TDLS_HANDSHAKE_TIME 5000
110075 -#define TDLS_ALIVE_COUNT 3
110076 -
110077 -
110078 // 1: Write RCR DATA BIT
110079 // 2: Issue peer traffic indication
110080 // 3: Go back to the channel linked with AP, terminating channel switch procedure
110081 @@ -308,6 +296,8 @@ struct ss_res
110082 // 9: Set channel back to off channel
110083 // 10: Restore RCR DATA BIT
110084 // 11: Check alive
110085 +// 12: Check alive
110086 +// 13: Free TDLS sta
110087 enum TDLS_option
110088 {
110089 TDLS_WRCR = 1,
110090 @@ -326,7 +316,7 @@ enum TDLS_option
110091 maxTDLS,
110092 };
110093
110094 -#endif
110095 +#endif //CONFIG_TDLS
110096
110097 struct FW_Sta_Info
110098 {
110099 @@ -337,6 +327,30 @@ struct FW_Sta_Info
110100 NDIS_802_11_RATES_EX SupportedRates;
110101 };
110102
110103 +/*
110104 + * Usage:
110105 + * When one iface acted as AP mode and the other iface is STA mode and scanning,
110106 + * it should switch back to AP's operating channel periodically.
110107 + * Parameters info:
110108 + * When the driver scanned RTW_SCAN_NUM_OF_CH channels, it would switch back to AP's operating channel for
110109 + * RTW_STAY_AP_CH_MILLISECOND * SURVEY_TO milliseconds.
110110 + * Example:
110111 + * For chip supports 2.4G + 5GHz and AP mode is operating in channel 1,
110112 + * RTW_SCAN_NUM_OF_CH is 8, RTW_STAY_AP_CH_MILLISECOND is 3 and SURVEY_TO is 100.
110113 + * When it's STA mode gets set_scan command,
110114 + * it would
110115 + * 1. Doing the scan on channel 1.2.3.4.5.6.7.8
110116 + * 2. Back to channel 1 for 300 milliseconds
110117 + * 3. Go through doing site survey on channel 9.10.11.36.40.44.48.52
110118 + * 4. Back to channel 1 for 300 milliseconds
110119 + * 5. ... and so on, till survey done.
110120 + */
110121 +#if defined CONFIG_STA_MODE_SCAN_UNDER_AP_MODE && defined CONFIG_CONCURRENT_MODE
110122 +#define RTW_SCAN_NUM_OF_CH 8
110123 +#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
110124 + // 3 * SURVEY_TO millisecond.
110125 +#endif //defined CONFIG_STA_MODE_SCAN_UNDER_AP_MODE && defined CONFIG_CONCURRENT_MODE
110126 +
110127 struct mlme_ext_info
110128 {
110129 u32 state;
110130 @@ -381,6 +395,10 @@ struct mlme_ext_info
110131 struct HT_info_element HT_info;
110132 WLAN_BSSID_EX network;//join network or bss_network, if in ap mode, it is the same to cur_network.network
110133 struct FW_Sta_Info FW_sta_info[NUM_STA];
110134 +
110135 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
110136 + u8 scan_cnt;
110137 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
110138 };
110139
110140 // The channel information about this channel including joining, scanning, and power constraints.
110141 @@ -396,7 +414,41 @@ typedef struct _RT_CHANNEL_INFO
110142 #endif
110143 }RT_CHANNEL_INFO, *PRT_CHANNEL_INFO;
110144
110145 -extern int rtw_is_channel_set_contains_channel(RT_CHANNEL_INFO *channel_set, const u32 channel_num);
110146 +int rtw_ch_set_search_ch(RT_CHANNEL_INFO *ch_set, const u32 ch);
110147 +bool rtw_mlme_band_check(_adapter *adapter, const u32 ch);
110148 +
110149 +// P2P_MAX_REG_CLASSES - Maximum number of regulatory classes
110150 +#define P2P_MAX_REG_CLASSES 10
110151 +
110152 +// P2P_MAX_REG_CLASS_CHANNELS - Maximum number of channels per regulatory class
110153 +#define P2P_MAX_REG_CLASS_CHANNELS 20
110154 +
110155 +// struct p2p_channels - List of supported channels
110156 +struct p2p_channels {
110157 + // struct p2p_reg_class - Supported regulatory class
110158 + struct p2p_reg_class {
110159 + // reg_class - Regulatory class (IEEE 802.11-2007, Annex J)
110160 + u8 reg_class;
110161 +
110162 + // channel - Supported channels
110163 + u8 channel[P2P_MAX_REG_CLASS_CHANNELS];
110164 +
110165 + // channels - Number of channel entries in use
110166 + size_t channels;
110167 + } reg_class[P2P_MAX_REG_CLASSES];
110168 +
110169 + // reg_classes - Number of reg_class entries in use
110170 + size_t reg_classes;
110171 +};
110172 +
110173 +struct p2p_oper_class_map {
110174 + enum hw_mode {IEEE80211G,IEEE80211A} mode;
110175 + u8 op_class;
110176 + u8 min_chan;
110177 + u8 max_chan;
110178 + u8 inc;
110179 + enum { BW20, BW40PLUS, BW40MINUS } bw;
110180 +};
110181
110182 struct mlme_ext_priv
110183 {
110184 @@ -404,15 +456,21 @@ struct mlme_ext_priv
110185 u8 mlmeext_init;
110186 ATOMIC_T event_seq;
110187 u16 mgnt_seq;
110188 -
110189 +#ifdef CONFIG_IEEE80211W
110190 + u16 sa_query_seq;
110191 + u64 mgnt_80211w_IPN;
110192 + u64 mgnt_80211w_IPN_rx;
110193 +#endif //CONFIG_IEEE80211W
110194 //struct fw_priv fwpriv;
110195
110196 unsigned char cur_channel;
110197 unsigned char cur_bwmode;
110198 unsigned char cur_ch_offset;//PRIME_CHNL_OFFSET
110199 unsigned char cur_wireless_mode;
110200 +
110201 unsigned char max_chan_nums;
110202 RT_CHANNEL_INFO channel_set[MAX_CHANNEL_NUM];
110203 + struct p2p_channels channel_list;
110204 unsigned char basicrate[NumRates];
110205 unsigned char datarate[NumRates];
110206
110207 @@ -421,10 +479,14 @@ struct mlme_ext_priv
110208 //for ap mode, network includes ap's cap_info
110209 _timer survey_timer;
110210 _timer link_timer;
110211 +#ifdef CONFIG_IEEE80211W
110212 + _timer sa_query_timer;
110213 +#endif //CONFIG_IEEE80211W
110214 //_timer ADDBA_timer;
110215 u16 chan_scan_time;
110216
110217 - u8 scan_abort;
110218 + u8 scan_abort;
110219 + u8 tx_rate; // TXRATE when USERATE is set.
110220
110221 u32 retry; //retry for issue probereq
110222
110223 @@ -434,9 +496,18 @@ struct mlme_ext_priv
110224 unsigned char bstart_bss;
110225 #endif
110226
110227 - //recv_decache check for Action_public frame
110228 + //recv_decache check for Action_public frame
110229 + u8 action_public_dialog_token;
110230 u16 action_public_rxseq;
110231
110232 +#ifdef CONFIG_80211D
110233 + u8 update_channel_plan_by_ap_done;
110234 +#endif
110235 +
110236 +#ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
110237 + u8 active_keep_alive_check;
110238 +#endif
110239 +
110240 };
110241
110242 int init_mlme_ext_priv(_adapter* padapter);
110243 @@ -444,26 +515,34 @@ int init_hw_mlme_ext(_adapter *padapter);
110244 void free_mlme_ext_priv (struct mlme_ext_priv *pmlmeext);
110245 extern void init_mlme_ext_timer(_adapter *padapter);
110246 extern void init_addba_retry_timer(_adapter *padapter, struct sta_info *psta);
110247 -
110248 -#ifdef CONFIG_TDLS
110249 -int rtw_init_tdls_info(_adapter* padapter);
110250 -void rtw_free_tdls_info(struct tdls_info *ptdlsinfo);
110251 -#endif //CONFIG_TDLS
110252 -
110253 extern struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv);
110254 +struct xmit_frame *alloc_mgtxmitframe_once(struct xmit_priv *pxmitpriv);
110255
110256 //void fill_fwpriv(_adapter * padapter, struct fw_priv *pfwpriv);
110257
110258 unsigned char networktype_to_raid(unsigned char network_type);
110259 int judge_network_type(_adapter *padapter, unsigned char *rate, int ratelen);
110260 void get_rate_set(_adapter *padapter, unsigned char *pbssrate, int *bssrate_len);
110261 +void UpdateBrateTbl(_adapter *padapter,u8 *mBratesOS);
110262 +void UpdateBrateTblForSoftAP(u8 *bssrateset, u32 bssratelen);
110263 +void change_band_update_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork);
110264
110265 void Save_DM_Func_Flag(_adapter *padapter);
110266 void Restore_DM_Func_Flag(_adapter *padapter);
110267 void Switch_DM_Func(_adapter *padapter, u8 mode, u8 enable);
110268
110269 -void Set_NETYPE1_MSR(_adapter *padapter, u8 type);
110270 -void Set_NETYPE0_MSR(_adapter *padapter, u8 type);
110271 +//void Set_NETYPE1_MSR(_adapter *padapter, u8 type);
110272 +//void Set_NETYPE0_MSR(_adapter *padapter, u8 type);
110273 +void Set_MSR(_adapter *padapter, u8 type);
110274 +
110275 +u8 rtw_get_oper_ch(_adapter *adapter);
110276 +void rtw_set_oper_ch(_adapter *adapter, u8 ch);
110277 +u8 rtw_get_oper_bw(_adapter *adapter);
110278 +void rtw_set_oper_bw(_adapter *adapter, u8 bw);
110279 +u8 rtw_get_oper_choffset(_adapter *adapter);
110280 +void rtw_set_oper_choffset(_adapter *adapter, u8 offset);
110281 +u32 rtw_get_on_oper_ch_time(_adapter *adapter);
110282 +u32 rtw_get_on_cur_ch_time(_adapter *adapter);
110283
110284 void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode);
110285 void SelectChannel(_adapter *padapter, unsigned char channel);
110286 @@ -500,7 +579,6 @@ int WMM_param_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
110287 #ifdef CONFIG_WFD
110288 int WFD_info_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
110289 #endif
110290 -
110291 void WMMOnAssocRsp(_adapter *padapter);
110292
110293 void HT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
110294 @@ -517,6 +595,7 @@ void process_csa_ie(_adapter *padapter, u8 *pframe, uint len);
110295 void update_IOT_info(_adapter *padapter);
110296 void update_capinfo(PADAPTER Adapter, u16 updateCap);
110297 void update_wireless_mode(_adapter * padapter);
110298 +void update_tx_basic_rate(_adapter *padapter, u8 modulation);
110299 void update_bmc_sta_support_rate(_adapter *padapter, u32 mac_id);
110300 int update_sta_support_rate(_adapter *padapter, u8* pvar_ie, uint var_ie_len, int cam_idx);
110301
110302 @@ -544,50 +623,37 @@ void report_add_sta_event(_adapter *padapter, unsigned char* MacAddr, int cam_id
110303 void beacon_timing_control(_adapter *padapter);
110304 extern u8 set_tx_beacon_cmd(_adapter*padapter);
110305 unsigned int setup_beacon_frame(_adapter *padapter, unsigned char *beacon_frame);
110306 +void update_mgnt_tx_rate(_adapter *padapter, u8 rate);
110307 void update_mgntframe_attrib(_adapter *padapter, struct pkt_attrib *pattrib);
110308 void dump_mgntframe(_adapter *padapter, struct xmit_frame *pmgntframe);
110309 +s32 dump_mgntframe_and_wait(_adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms);
110310 +s32 dump_mgntframe_and_wait_ack(_adapter *padapter, struct xmit_frame *pmgntframe);
110311
110312 #ifdef CONFIG_P2P
110313 void issue_probersp_p2p(_adapter *padapter, unsigned char *da);
110314 -void issue_p2p_provision_request( _adapter *padapter, u8* pinterface_raddr, u8* pssid, u8 ussidlen, u8* pdev_raddr);
110315 +void issue_p2p_provision_request( _adapter *padapter, u8* pssid, u8 ussidlen, u8* pdev_raddr);
110316 void issue_p2p_GO_request(_adapter *padapter, u8* raddr);
110317 -void issue_probereq_p2p(_adapter *padapter);
110318 +void issue_probereq_p2p(_adapter *padapter, u8 *da);
110319 +int issue_probereq_p2p_ex(_adapter *adapter, u8 *da, int try_cnt, int wait_ms);
110320 void issue_p2p_invitation_response(_adapter *padapter, u8* raddr, u8 dialogToken, u8 success);
110321 void issue_p2p_invitation_request(_adapter *padapter, u8* raddr );
110322 #endif //CONFIG_P2P
110323 -#ifdef CONFIG_TDLS
110324 -void issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, struct sta_info *ptdls_sta, unsigned int power_mode);
110325 -void init_TPK_timer(_adapter *padapter, struct sta_info *psta);
110326 -void init_ch_switch_timer(_adapter *padapter, struct sta_info *psta);
110327 -void init_base_ch_timer(_adapter *padapter, struct sta_info *psta);
110328 -void init_off_ch_timer(_adapter *padapter, struct sta_info *psta);
110329 -void init_tdls_alive_timer(_adapter *padapter, struct sta_info *psta);
110330 -void init_handshake_timer(_adapter *padapter, struct sta_info *psta);
110331 -void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta);
110332 -void issue_tdls_dis_req(_adapter *padapter, u8 *mac_addr);
110333 -void issue_tdls_setup_req(_adapter *padapter, u8 *mac_addr);
110334 -void issue_tdls_setup_rsp(_adapter *padapter, union recv_frame *precv_frame);
110335 -void issue_tdls_setup_cfm(_adapter *padapter, union recv_frame *precv_frame);
110336 -void issue_tdls_dis_rsp(_adapter * padapter, union recv_frame * precv_frame, u8 dialog);
110337 -void issue_tdls_teardown(_adapter *padapter, u8 *mac_addr);
110338 -void issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *psta);
110339 -void issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr);
110340 -void issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr);
110341 -sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame);
110342 -#endif
110343 void issue_beacon(_adapter *padapter);
110344 void issue_probersp(_adapter *padapter, unsigned char *da, u8 is_valid_p2p_probereq);
110345 void issue_assocreq(_adapter *padapter);
110346 void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *pstat, int pkt_type);
110347 void issue_auth(_adapter *padapter, struct sta_info *psta, unsigned short status);
110348 -// Added by Albert 2010/07/26
110349 -// blnbc: 1 -> broadcast probe request
110350 -// blnbc: 0 -> unicast probe request. The address 1 will be the BSSID.
110351 -void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 blnbc);
110352 -void issue_nulldata(_adapter *padapter, unsigned int power_mode);
110353 -void issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid);
110354 -void issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason);
110355 +void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 *da);
110356 +s32 issue_probereq_ex(_adapter *padapter, NDIS_802_11_SSID *pssid, u8* da, int try_cnt, int wait_ms);
110357 +int issue_nulldata(_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms);
110358 +int issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid, int try_cnt, int wait_ms);
110359 +int issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason);
110360 +int issue_deauth_ex(_adapter *padapter, u8 *da, unsigned short reason, int try_cnt, int wait_ms);
110361 +void issue_action_spct_ch_switch(_adapter *padapter, u8 *ra, u8 new_ch, u8 ch_offset);
110362 void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short status);
110363 +#ifdef CONFIG_IEEE80211W
110364 +void issue_action_SA_Query(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short tid);
110365 +#endif //CONFIG_IEEE80211W
110366 unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr);
110367 unsigned int send_beacon(_adapter *padapter);
110368
110369 @@ -609,11 +675,15 @@ unsigned int OnAuthClient(_adapter *padapter, union recv_frame *precv_frame);
110370 unsigned int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame);
110371 unsigned int OnAction(_adapter *padapter, union recv_frame *precv_frame);
110372
110373 +unsigned int on_action_spct(_adapter *padapter, union recv_frame *precv_frame);
110374 unsigned int OnAction_qos(_adapter *padapter, union recv_frame *precv_frame);
110375 unsigned int OnAction_dls(_adapter *padapter, union recv_frame *precv_frame);
110376 unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame);
110377 -unsigned int OnAction_public(_adapter *padapter, union recv_frame *precv_frame);
110378 +unsigned int on_action_public(_adapter *padapter, union recv_frame *precv_frame);
110379 unsigned int OnAction_ht(_adapter *padapter, union recv_frame *precv_frame);
110380 +#ifdef CONFIG_IEEE80211W
110381 +unsigned int OnAction_sa_query(_adapter *padapter, union recv_frame *precv_frame);
110382 +#endif //CONFIG_IEEE80211W
110383 unsigned int OnAction_wmm(_adapter *padapter, union recv_frame *precv_frame);
110384 unsigned int OnAction_p2p(_adapter *padapter, union recv_frame *precv_frame);
110385
110386 @@ -627,6 +697,9 @@ void linked_status_chk(_adapter *padapter);
110387 void survey_timer_hdl (_adapter *padapter);
110388 void link_timer_hdl (_adapter *padapter);
110389 void addba_timer_hdl(struct sta_info *psta);
110390 +#ifdef CONFIG_IEEE80211W
110391 +void sa_query_timer_hdl(_adapter *padapter);
110392 +#endif //CONFIG_IEEE80211W
110393 //void reauth_timer_hdl(_adapter *padapter);
110394 //void reassoc_timer_hdl(_adapter *padapter);
110395
110396 @@ -641,7 +714,13 @@ void addba_timer_hdl(struct sta_info *psta);
110397 /*DBG_871X("%s set_link_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms));*/ \
110398 _set_timer(&(mlmeext)->link_timer, (ms)); \
110399 } while(0)
110400 -
110401 +#ifdef CONFIG_IEEE80211W
110402 +#define set_sa_query_timer(mlmeext, ms) \
110403 + do { \
110404 + DBG_871X("%s set_sa_query_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms)); \
110405 + _set_timer(&(mlmeext)->sa_query_timer, (ms)); \
110406 + } while(0)
110407 +#endif //CONFIG_IEEE80211W
110408 extern int cckrates_included(unsigned char *rate, int ratelen);
110409 extern int cckratesonly_included(unsigned char *rate, int ratelen);
110410
110411 @@ -650,24 +729,29 @@ extern void process_addba_req(_adapter *padapter, u8 *paddba_req, u8 *addr);
110412 extern void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len);
110413 extern void correct_TSF(_adapter *padapter, struct mlme_ext_priv *pmlmeext);
110414
110415 -#ifdef CONFIG_AP_MODE
110416 -void init_mlme_ap_info(_adapter *padapter);
110417 -void free_mlme_ap_info(_adapter *padapter);
110418 -//void update_BCNTIM(_adapter *padapter);
110419 -void update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx);
110420 -void expire_timeout_chk(_adapter *padapter);
110421 -void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta);
110422 -int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len);
110423 -#ifdef CONFIG_NATIVEAP_MLME
110424 -void bss_cap_update(_adapter *padapter, struct sta_info *psta);
110425 -void sta_info_update(_adapter *padapter, struct sta_info *psta);
110426 -void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta);
110427 -void ap_free_sta(_adapter *padapter, struct sta_info *psta);
110428 -int rtw_sta_flush(_adapter *padapter);
110429 -void start_ap_mode(_adapter *padapter);
110430 -void stop_ap_mode(_adapter *padapter);
110431 +
110432 +#ifdef CONFIG_CONCURRENT_MODE
110433 + sint check_buddy_mlmeinfo_state(_adapter *padapter, u32 state);
110434 +void concurrent_chk_joinbss_done(_adapter *padapter, int join_res);
110435 +#endif //CONFIG_CONCURRENT_MODE
110436 +
110437 +#ifdef CONFIG_DUALMAC_CONCURRENT
110438 +void dc_SelectChannel(_adapter *padapter, unsigned char channel);
110439 +void dc_SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_offset);
110440 +void dc_set_channel_bwmode_disconnect(_adapter *padapter);
110441 +u8 dc_handle_join_request(_adapter *padapter);
110442 +void dc_handle_join_done(_adapter *padapter, u8 join_res);
110443 +sint dc_check_fwstate(_adapter *padapter, sint fw_state);
110444 +u8 dc_handle_site_survey(_adapter *padapter);
110445 +void dc_report_survey_event(_adapter *padapter, union recv_frame *precv_frame);
110446 +void dc_set_channel_bwmode_survey_done(_adapter *padapter);
110447 +void dc_set_ap_channel_bandwidth(_adapter *padapter, u8 channel, u8 channel_offset, u8 bwmode);
110448 +void dc_resume_xmit(_adapter *padapter);
110449 +u8 dc_check_xmit(_adapter *padapter);
110450 #endif
110451 -#endif //end of CONFIG_AP_MODE
110452 +
110453 +int rtw_chk_start_clnt_join(_adapter *padapter);
110454 +int rtw_get_ch_setting_union(_adapter *adapter, u8 *ch, u8 *bw, u8 *offset);
110455
110456 struct cmd_hdl {
110457 uint parmsize;
110458 @@ -699,6 +783,7 @@ u8 add_ba_hdl(_adapter *padapter, unsigned char *pbuf);
110459 u8 mlme_evt_hdl(_adapter *padapter, unsigned char *pbuf);
110460 u8 h2c_msg_hdl(_adapter *padapter, unsigned char *pbuf);
110461 u8 tx_beacon_hdl(_adapter *padapter, unsigned char *pbuf);
110462 +u8 set_ch_hdl(_adapter *padapter, u8 *pbuf);
110463 u8 set_chplan_hdl(_adapter *padapter, unsigned char *pbuf);
110464 u8 led_blink_hdl(_adapter *padapter, unsigned char *pbuf);
110465 u8 set_csa_hdl(_adapter *padapter, unsigned char *pbuf); //Kurt: Handling DFS channel switch announcement ie.
110466 @@ -758,7 +843,7 @@ struct cmd_hdl wlancmds[] =
110467 GEN_MLME_EXT_HANDLER(0, NULL)
110468 GEN_MLME_EXT_HANDLER(0, NULL)
110469 GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm), add_ba_hdl)
110470 - GEN_MLME_EXT_HANDLER(0, NULL)
110471 + GEN_MLME_EXT_HANDLER(sizeof(struct set_ch_parm), set_ch_hdl) /* 46 */
110472 GEN_MLME_EXT_HANDLER(0, NULL)
110473 GEN_MLME_EXT_HANDLER(0, NULL)
110474 GEN_MLME_EXT_HANDLER(0, NULL)
110475 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_mp.h b/drivers/net/wireless/rtl8192cu/include/rtw_mp.h
110476 index a468714..0ebb1ba 100644
110477 --- a/drivers/net/wireless/rtl8192cu/include/rtw_mp.h
110478 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_mp.h
110479 @@ -192,7 +192,7 @@ struct mp_tx
110480 u8 *pallocated_buf;
110481 u8 *buf;
110482 u32 buf_size, write_size;
110483 - _thread_hdl_ PktTxThread;
110484 + _thread_hdl_ PktTxThread;
110485 };
110486
110487 //#if (MP_DRIVER == 1)
110488 @@ -606,6 +606,12 @@ typedef enum _ENCRY_CTRL_STATE_ {
110489 SW_ENCRY_HW_DECRY //sw encryption & hw decryption
110490 }ENCRY_CTRL_STATE;
110491
110492 +typedef enum _OFDM_TX_MODE {
110493 + OFDM_ALL_OFF = 0,
110494 + OFDM_ContinuousTx = 1,
110495 + OFDM_SingleCarrier = 2,
110496 + OFDM_SingleTone = 4,
110497 +} OFDM_TX_MODE;
110498
110499 //=======================================================================
110500 //extern struct mp_xmit_frame *alloc_mp_xmitframe(struct mp_priv *pmp_priv);
110501 @@ -673,8 +679,6 @@ extern void GetPowerTracking(PADAPTER padapter, u8 *enable);
110502
110503 extern u32 mp_query_psd(PADAPTER pAdapter, u8 *data);
110504
110505 -extern u32 rtw_atoi(u8 *s);
110506 -
110507
110508 extern void Hal_SetAntenna(PADAPTER pAdapter);
110509 extern void Hal_SetBandwidth(PADAPTER pAdapter);
110510 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h b/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h
110511 index e16df40..962bc38 100644
110512 --- a/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h
110513 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h
110514 @@ -1,7 +1,7 @@
110515 /******************************************************************************
110516 *
110517 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
110518 - *
110519 + *
110520 * This program is free software; you can redistribute it and/or modify it
110521 * under the terms of version 2 of the GNU General Public License as
110522 * published by the Free Software Foundation.
110523 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h b/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h
110524 index 4906005..0b47cb5 100644
110525 --- a/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h
110526 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h
110527 @@ -16,8 +16,7 @@
110528 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
110529 *
110530 *
110531 -
110532 -******************************************************************************/
110533 + ******************************************************************************/
110534 /*****************************************************************************
110535 *
110536 * Module: __RTW_MP_PHY_REGDEF_H_
110537 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h b/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h
110538 index a29ceaa..4249bc9 100644
110539 --- a/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h
110540 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h
110541 @@ -29,11 +29,13 @@ u32 build_assoc_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 status
110542 u32 build_deauth_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
110543 #ifdef CONFIG_WFD
110544 u32 build_probe_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
110545 -u32 build_probe_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
110546 +u32 build_probe_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 tunneled);
110547 u32 build_beacon_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
110548 u32 build_nego_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
110549 u32 build_nego_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
110550 u32 build_nego_confirm_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
110551 +u32 build_invitation_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
110552 +u32 build_invitation_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
110553 u32 build_assoc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
110554 u32 build_assoc_resp_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
110555 u32 build_provdisc_req_wfd_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
110556 @@ -51,16 +53,24 @@ u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pfram
110557 u8 process_p2p_group_negotation_confirm( struct wifidirect_info *pwdinfo, u8 *pframe, uint len );
110558 u8 process_p2p_presence_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint len);
110559
110560 -void process_p2p_ps_ie(PADAPTER padapter, u8 *IEs, u32 IELength);
110561 -void p2p_ps_wk_hdl(_adapter *padapter, u8 p2p_ps_state);
110562 void p2p_protocol_wk_hdl(_adapter *padapter, int intCmdType);
110563 -u8 p2p_ps_wk_cmd(_adapter*padapter, u8 p2p_ps_state, u8 enqueue);
110564 +
110565 +#ifdef CONFIG_P2P_PS
110566 +void process_p2p_ps_ie(PADAPTER padapter, u8 *IEs, u32 IELength);
110567 +void p2p_ps_wk_hdl(_adapter *padapter, u8 p2p_ps_state);
110568 +u8 p2p_ps_wk_cmd(_adapter*padapter, u8 p2p_ps_state, u8 enqueue);
110569 +#endif // CONFIG_P2P_PS
110570
110571 #ifdef CONFIG_IOCTL_CFG80211
110572 void rtw_init_cfg80211_wifidirect_info( _adapter* padapter);
110573 int rtw_p2p_check_frames(_adapter *padapter, const u8 *buf, u32 len, u8 tx);
110574 +void rtw_append_wfd_ie(_adapter *padapter, u8 *buf, u32 *len);
110575 #endif //CONFIG_IOCTL_CFG80211
110576
110577 +void reset_global_wifidirect_info( _adapter* padapter );
110578 +int rtw_init_wifi_display_info(_adapter* padapter);
110579 +void rtw_init_wifidirect_timers(_adapter* padapter);
110580 +void rtw_init_wifidirect_addrs(_adapter* padapter, u8 *dev_addr, u8 *iface_addr);
110581 void init_wifidirect_info( _adapter* padapter, enum P2P_ROLE role);
110582 int rtw_p2p_enable(_adapter *padapter, enum P2P_ROLE role);
110583
110584 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h b/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h
110585 index 2b00beb..a4cb292 100644
110586 --- a/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h
110587 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h
110588 @@ -16,8 +16,7 @@
110589 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
110590 *
110591 *
110592 -
110593 -******************************************************************************/
110594 + ******************************************************************************/
110595 #ifndef __RTW_PWRCTRL_H_
110596 #define __RTW_PWRCTRL_H_
110597
110598 @@ -74,31 +73,35 @@ enum Power_Mgnt
110599 BIT[4] = sub-state
110600 */
110601
110602 -#define PS_DPS BIT(0)
110603 -#define PS_LCLK (PS_DPS)
110604 -#define PS_RF_OFF BIT(1)
110605 -#define PS_ALL_ON BIT(2)
110606 -#define PS_ST_ACTIVE BIT(3)
110607 -#define PS_LP BIT(4) // low performance
110608 +#define PS_DPS BIT(0)
110609 +#define PS_LCLK (PS_DPS)
110610 +#define PS_RF_OFF BIT(1)
110611 +#define PS_ALL_ON BIT(2)
110612 +#define PS_ST_ACTIVE BIT(3)
110613
110614 -#define PS_STATE_MASK (0x0F)
110615 -#define PS_STATE_HW_MASK (0x07)
110616 -#define PS_SEQ_MASK (0xc0)
110617 +#define PS_ISR_ENABLE BIT(4)
110618 +#define PS_IMR_ENABLE BIT(5)
110619 +#define PS_ACK BIT(6)
110620 +#define PS_TOGGLE BIT(7)
110621
110622 -#define PS_STATE(x) (PS_STATE_MASK & (x))
110623 -#define PS_STATE_HW(x) (PS_STATE_HW_MASK & (x))
110624 -#define PS_SEQ(x) (PS_SEQ_MASK & (x))
110625 +#define PS_STATE_MASK (0x0F)
110626 +#define PS_STATE_HW_MASK (0x07)
110627 +#define PS_SEQ_MASK (0xc0)
110628
110629 -#define PS_STATE_S0 (PS_DPS)
110630 -#define PS_STATE_S1 (PS_LCLK)
110631 -#define PS_STATE_S2 (PS_RF_OFF)
110632 -#define PS_STATE_S3 (PS_ALL_ON)
110633 -#define PS_STATE_S4 ((PS_ST_ACTIVE) | (PS_ALL_ON))
110634 +#define PS_STATE(x) (PS_STATE_MASK & (x))
110635 +#define PS_STATE_HW(x) (PS_STATE_HW_MASK & (x))
110636 +#define PS_SEQ(x) (PS_SEQ_MASK & (x))
110637
110638 +#define PS_STATE_S0 (PS_DPS)
110639 +#define PS_STATE_S1 (PS_LCLK)
110640 +#define PS_STATE_S2 (PS_RF_OFF)
110641 +#define PS_STATE_S3 (PS_ALL_ON)
110642 +#define PS_STATE_S4 ((PS_ST_ACTIVE) | (PS_ALL_ON))
110643
110644 -#define PS_IS_RF_ON(x) ((x) & (PS_ALL_ON))
110645 -#define PS_IS_ACTIVE(x) ((x) & (PS_ST_ACTIVE))
110646 -#define CLR_PS_STATE(x) ((x) = ((x) & (0xF0)))
110647 +
110648 +#define PS_IS_RF_ON(x) ((x) & (PS_ALL_ON))
110649 +#define PS_IS_ACTIVE(x) ((x) & (PS_ST_ACTIVE))
110650 +#define CLR_PS_STATE(x) ((x) = ((x) & (0xF0)))
110651
110652
110653 struct reportpwrstate_parm {
110654 @@ -174,12 +177,13 @@ enum _PS_BBRegBackup_ {
110655 };
110656
110657 enum { // for ips_mode
110658 - IPS_NORMAL = 0,
110659 - IPS_LEVEL_2,
110660 - IPS_NONE,
110661 + IPS_NONE=0,
110662 + IPS_NORMAL,
110663 + IPS_LEVEL_2,
110664 };
110665
110666 -struct pwrctrl_priv {
110667 +struct pwrctrl_priv
110668 +{
110669 _pwrlock lock;
110670 volatile u8 rpwm; // requested power state for fw
110671 volatile u8 cpwm; // fw current power state. updated when 1. read from HCPWM 2. driver lowers power level
110672 @@ -187,7 +191,7 @@ struct pwrctrl_priv {
110673 volatile u8 cpwm_tog; // toggling
110674 u8 pwr_mode;
110675 u8 smart_ps;
110676 - uint alives;
110677 + u32 alives;
110678
110679 u8 b_hw_radio_off;
110680 u8 reg_rfoff;
110681 @@ -198,7 +202,7 @@ struct pwrctrl_priv {
110682 u32 cur_ps_level;
110683 u32 reg_rfps_level;
110684
110685 -
110686 +
110687
110688 #ifdef CONFIG_PCI_HCI
110689 //just for PCIE ASPM
110690 @@ -209,16 +213,14 @@ struct pwrctrl_priv {
110691 u8 const_amdpci_aspm;
110692 #endif
110693
110694 - //u8 ips_enable;//for dbg
110695 - //u8 lps_enable;//for dbg
110696 -
110697 uint ips_enter_cnts;
110698 uint ips_leave_cnts;
110699 -
110700 - _timer ips_check_timer;
110701
110702 u8 ips_mode;
110703 u8 ips_mode_req; // used to accept the mode setting request, will update to ipsmode later
110704 + uint bips_processing;
110705 + u32 ips_deny_time; /* will deny IPS when system time is smaller than this */
110706 + u8 ps_processing; /* temporarily used to mark whether in rtw_ps_processor */
110707
110708 u8 bLeisurePs;
110709 u8 LpsIdleCount;
110710 @@ -233,16 +235,17 @@ struct pwrctrl_priv {
110711 u8 bInternalAutoSuspend;
110712 u8 bInSuspend;
110713 u8 bSupportRemoteWakeup;
110714 +#ifdef CONFIG_WOWLAN
110715 u8 wowlan_mode;
110716 u8 wowlan_pattern;
110717 u8 wowlan_magic;
110718 u8 wowlan_unicast;
110719 u8 wowlan_pattern_idx;
110720 u32 wowlan_pattern_context[8][5];
110721 +#endif // CONFIG_WOWLAN
110722 _timer pwr_state_check_timer;
110723 int pwr_state_check_interval;
110724 u8 pwr_state_check_cnts;
110725 - uint bips_processing;
110726
110727 int ps_flag;
110728
110729 @@ -250,7 +253,6 @@ struct pwrctrl_priv {
110730 //rt_rf_power_state current_rfpwrstate;
110731 rt_rf_power_state change_rfpwrstate;
110732
110733 - u8 wepkeymask;
110734 u8 bHWPowerdown;//if support hw power down
110735 u8 bHWPwrPindetect;
110736 u8 bkeepfwalive;
110737 @@ -266,15 +268,12 @@ struct pwrctrl_priv {
110738 struct early_suspend early_suspend;
110739 u8 do_late_resume;
110740 #endif //CONFIG_HAS_EARLYSUSPEND
110741 -
110742 +
110743 #ifdef CONFIG_ANDROID_POWER
110744 android_early_suspend_t early_suspend;
110745 u8 do_late_resume;
110746 #endif
110747 -
110748 - #ifdef CONFIG_INTEL_PROXIM
110749 - u8 stored_power_mgnt;
110750 - #endif
110751 +
110752 };
110753
110754 #define rtw_get_ips_mode_req(pwrctrlpriv) \
110755 @@ -283,6 +282,8 @@ struct pwrctrl_priv {
110756 #define rtw_ips_mode_req(pwrctrlpriv, ips_mode) \
110757 (pwrctrlpriv)->ips_mode_req = (ips_mode)
110758
110759 +#define RTW_PWR_STATE_CHK_INTERVAL 2000
110760 +
110761 #define _rtw_set_pwr_state_check_timer(pwrctrlpriv, ms) \
110762 do { \
110763 /*DBG_871X("%s _rtw_set_pwr_state_check_timer(%p, %d)\n", __FUNCTION__, (pwrctrlpriv), (ms));*/ \
110764 @@ -294,20 +295,26 @@ struct pwrctrl_priv {
110765
110766 extern void rtw_init_pwrctrl_priv(_adapter *adapter);
110767 extern void rtw_free_pwrctrl_priv(_adapter * adapter);
110768 -extern sint rtw_register_tx_alive(_adapter *padapter);
110769 -extern void rtw_unregister_tx_alive(_adapter *padapter);
110770 -extern sint rtw_register_rx_alive(_adapter *padapter);
110771 -extern void rtw_unregister_rx_alive(_adapter *padapter);
110772 -extern sint rtw_register_cmd_alive(_adapter *padapter);
110773 -extern void rtw_unregister_cmd_alive(_adapter *padapter);
110774 -extern sint rtw_register_evt_alive(_adapter *padapter);
110775 -extern void rtw_unregister_evt_alive(_adapter *padapter);
110776 -extern void cpwm_int_hdl(_adapter *padapter, struct reportpwrstate_parm *preportpwrstate);
110777 +
110778 +#ifdef CONFIG_LPS_LCLK
110779 +extern s32 rtw_register_tx_alive(PADAPTER padapter);
110780 +extern void rtw_unregister_tx_alive(PADAPTER padapter);
110781 +extern s32 rtw_register_rx_alive(PADAPTER padapter);
110782 +extern void rtw_unregister_rx_alive(PADAPTER padapter);
110783 +extern s32 rtw_register_cmd_alive(PADAPTER padapter);
110784 +extern void rtw_unregister_cmd_alive(PADAPTER padapter);
110785 +extern s32 rtw_register_evt_alive(PADAPTER padapter);
110786 +extern void rtw_unregister_evt_alive(PADAPTER padapter);
110787 +extern void cpwm_int_hdl(PADAPTER padapter, struct reportpwrstate_parm *preportpwrstate);
110788 +#endif
110789 +
110790 extern void rtw_set_ps_mode(_adapter * padapter, u8 ps_mode, u8 smart_ps);
110791 extern void rtw_set_rpwm(_adapter * padapter, u8 val8);
110792 extern void LeaveAllPowerSaveMode(PADAPTER Adapter);
110793 #ifdef CONFIG_IPS
110794 +void _ips_enter(_adapter * padapter);
110795 void ips_enter(_adapter * padapter);
110796 +int _ips_leave(_adapter * padapter);
110797 int ips_leave(_adapter * padapter);
110798 #endif
110799
110800 @@ -331,13 +338,25 @@ void rtw_resume_in_workqueue(struct pwrctrl_priv *pwrpriv);
110801 #endif //CONFIG_RESUME_IN_WORKQUEUE
110802
110803 #if defined(CONFIG_HAS_EARLYSUSPEND ) || defined(CONFIG_ANDROID_POWER)
110804 -#define rtw_is_earlysuspend_registered(pwrpriv) (pwrpriv)->early_suspend.suspend
110805 +bool rtw_is_earlysuspend_registered(struct pwrctrl_priv *pwrpriv);
110806 +bool rtw_is_do_late_resume(struct pwrctrl_priv *pwrpriv);
110807 +void rtw_set_do_late_resume(struct pwrctrl_priv *pwrpriv, bool enable);
110808 void rtw_register_early_suspend(struct pwrctrl_priv *pwrpriv);
110809 void rtw_unregister_early_suspend(struct pwrctrl_priv *pwrpriv);
110810 -#endif //CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER
110811 +#else
110812 +#define rtw_is_earlysuspend_registered(pwrpriv) _FALSE
110813 +#define rtw_is_do_late_resume(pwrpriv) _FALSE
110814 +#define rtw_set_do_late_resume(pwrpriv, enable) do {} while (0)
110815 +#define rtw_register_early_suspend(pwrpriv) do {} while (0)
110816 +#define rtw_unregister_early_suspend(pwrpriv) do {} while (0)
110817 +#endif /* CONFIG_HAS_EARLYSUSPEND || CONFIG_ANDROID_POWER */
110818
110819 u8 rtw_interface_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id,u8* val);
110820 -int _rtw_pwr_wakeup(_adapter *padapter, const char *caller);
110821 -#define rtw_pwr_wakeup(adapter) _rtw_pwr_wakeup(adapter, __FUNCTION__)
110822 +void rtw_set_ips_deny(_adapter *padapter, u32 ms);
110823 +int _rtw_pwr_wakeup(_adapter *padapter, u32 ips_deffer_ms, const char *caller);
110824 +#define rtw_pwr_wakeup(adapter) _rtw_pwr_wakeup(adapter, RTW_PWR_STATE_CHK_INTERVAL, __FUNCTION__)
110825 +#define rtw_pwr_wakeup_ex(adapter, ips_deffer_ms) _rtw_pwr_wakeup(adapter, ips_deffer_ms, __FUNCTION__)
110826 +int rtw_pm_set_ips(_adapter *padapter, u8 mode);
110827 +int rtw_pm_set_lps(_adapter *padapter, u8 mode);
110828
110829 #endif //__RTL871X_PWRCTRL_H_
110830 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_qos.h b/drivers/net/wireless/rtl8192cu/include/rtw_qos.h
110831 index e35b77f..a359c5f 100644
110832 --- a/drivers/net/wireless/rtl8192cu/include/rtw_qos.h
110833 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_qos.h
110834 @@ -16,8 +16,7 @@
110835 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
110836 *
110837 *
110838 -
110839 -******************************************************************************/
110840 + ******************************************************************************/
110841
110842
110843 #ifndef _RTW_QOS_H_
110844 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_recv.h b/drivers/net/wireless/rtl8192cu/include/rtw_recv.h
110845 index e204ef3..3a4b14b 100644
110846 --- a/drivers/net/wireless/rtl8192cu/include/rtw_recv.h
110847 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_recv.h
110848 @@ -1,7 +1,7 @@
110849 /******************************************************************************
110850 *
110851 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
110852 - *
110853 + *
110854 * This program is free software; you can redistribute it and/or modify it
110855 * under the terms of version 2 of the GNU General Public License as
110856 * published by the Free Software Foundation.
110857 @@ -16,8 +16,7 @@
110858 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
110859 *
110860 *
110861 -
110862 -******************************************************************************/
110863 + ******************************************************************************/
110864 #ifndef _RTW_RECV_H_
110865 #define _RTW_RECV_H_
110866
110867 @@ -61,14 +60,14 @@ struct recv_reorder_ctrl
110868 u8 enable;
110869 u16 indicate_seq;//=wstart_b, init_value=0xffff
110870 u16 wend_b;
110871 - u8 wsize_b;
110872 + u8 wsize_b;
110873 _queue pending_recvframe_queue;
110874 _timer reordering_ctrl_timer;
110875 };
110876
110877 struct stainfo_rxcache {
110878 u16 tid_rxseq[16];
110879 -/*
110880 +/*
110881 unsigned short tid0_rxseq;
110882 unsigned short tid1_rxseq;
110883 unsigned short tid2_rxseq;
110884 @@ -103,49 +102,53 @@ struct signal_stat {
110885 u32 total_val; //sum of valid elements
110886 };
110887
110888 -struct rx_pkt_attrib {
110889 +struct rx_pkt_attrib
110890 +{
110891 u16 pkt_len;
110892 u8 physt;
110893 u8 drvinfo_sz;
110894 u8 shift_sz;
110895 + u8 hdrlen; //the WLAN Header Len
110896 + u8 to_fr_ds;
110897 u8 amsdu;
110898 - u8 order;
110899 u8 qos;
110900 - u8 to_fr_ds;
110901 + u8 priority;
110902 + u8 pw_save;
110903 + u8 mdata;
110904 u16 seq_num;
110905 u8 frag_num;
110906 - u8 pw_save;
110907 u8 mfrag;
110908 - u8 mdata;
110909 + u8 order;
110910 u8 privacy; //in frame_ctrl field
110911 u8 bdecrypted;
110912 - int hdrlen; //the WLAN Header Len
110913 - int iv_len;
110914 - int icv_len;
110915 - u8 encrypt; //when 0 indicate no encrypt. when non-zero, indicate the encrypt algorith
110916 - u8 priority;
110917 - u8 ack_policy;
110918 - u8 crc_err;
110919 + u8 encrypt; //when 0 indicate no encrypt. when non-zero, indicate the encrypt algorith
110920 + u8 iv_len;
110921 + u8 icv_len;
110922 + u8 crc_err;
110923 u8 icv_err;
110924
110925 + u16 eth_type;
110926 +
110927 u8 dst[ETH_ALEN];
110928 u8 src[ETH_ALEN];
110929 u8 ta[ETH_ALEN];
110930 u8 ra[ETH_ALEN];
110931 u8 bssid[ETH_ALEN];
110932 -#ifdef CONFIG_TCP_CSUM_OFFLOAD_RX
110933 +
110934 + u8 ack_policy;
110935 +
110936 +//#ifdef CONFIG_TCP_CSUM_OFFLOAD_RX
110937 u8 tcpchk_valid; // 0: invalid, 1: valid
110938 u8 ip_chkrpt; //0: incorrect, 1: correct
110939 u8 tcp_chkrpt; //0: incorrect, 1: correct
110940 -#endif
110941 -
110942 +//#endif
110943 u8 key_index;
110944
110945 u8 mcs_rate;
110946 u8 rxht;
110947 u8 sgi;
110948 u8 signal_qual;
110949 - s8 rx_mimo_signal_qual[2];
110950 + s8 rx_mimo_signal_qual[2];
110951 u8 signal_strength;
110952 u8 rx_rssi[2]; //This value is percentage
110953 u8 rx_snr[2];
110954 @@ -159,7 +162,7 @@ struct rx_pkt_attrib {
110955 #define SN_EQUAL(a, b) (a == b)
110956 //#define REORDER_WIN_SIZE 128
110957 //#define REORDER_ENTRY_NUM 128
110958 -#define REORDER_WAIT_TIME (30) // (ms)
110959 +#define REORDER_WAIT_TIME (50) // (ms)
110960
110961 #define RECVBUFF_ALIGN_SZ 8
110962
110963 @@ -190,8 +193,8 @@ struct recv_stat
110964 #define EOR BIT(30)
110965
110966 #ifdef CONFIG_PCI_HCI
110967 -#define PCI_MAX_RX_QUEUE 2// MSDU packet queue, Rx Command Queue
110968 -#define PCI_MAX_RX_COUNT 64
110969 +#define PCI_MAX_RX_QUEUE 1// MSDU packet queue, Rx Command Queue
110970 +#define PCI_MAX_RX_COUNT 128
110971
110972 struct rtw_rx_ring {
110973 struct recv_stat *desc;
110974 @@ -207,27 +210,28 @@ accesser of recv_priv: rtw_recv_entry(dispatch / passive level); recv_thread(pas
110975
110976 using enter_critical section to protect
110977 */
110978 -struct recv_priv {
110979 -
110980 +struct recv_priv
110981 +{
110982 _lock lock;
110983
110984 -#ifdef CONFIG_RECV_THREAD_MODE
110985 +#ifdef CONFIG_RECV_THREAD_MODE
110986 _sema recv_sema;
110987 _sema terminate_recvthread_sema;
110988 #endif
110989 -
110990 +
110991 //_queue blk_strms[MAX_RX_NUMBLKS]; // keeping the block ack frame until return ack
110992 _queue free_recv_queue;
110993 _queue recv_pending_queue;
110994 -
110995 + _queue uc_swdec_pending_queue;
110996 +
110997
110998 u8 *pallocated_frame_buf;
110999 - u8 *precv_frame_buf;
111000 -
111001 + u8 *precv_frame_buf;
111002 +
111003 uint free_recvframe_cnt;
111004 -
111005 +
111006 _adapter *adapter;
111007 -
111008 +
111009 #ifdef PLATFORM_WINDOWS
111010 _nic_hdl RxPktPoolHdl;
111011 _nic_hdl RxBufPoolHdl;
111012 @@ -235,9 +239,9 @@ struct recv_priv {
111013 #ifdef PLATFORM_OS_XP
111014 PMDL pbytecnt_mdl;
111015 #endif
111016 - uint counter; //record the number that up-layer will return to drv; only when counter==0 can we release recv_priv
111017 + uint counter; //record the number that up-layer will return to drv; only when counter==0 can we release recv_priv
111018 NDIS_EVENT recv_resource_evt ;
111019 -#endif
111020 +#endif
111021
111022 u32 bIsAnyNonBEPkts;
111023 u64 rx_bytes;
111024 @@ -250,12 +254,12 @@ struct recv_priv {
111025 uint rx_smallpacket_crcerr;
111026 uint rx_middlepacket_crcerr;
111027
111028 -#ifdef CONFIG_USB_HCI
111029 +#ifdef CONFIG_USB_HCI
111030 //u8 *pallocated_urb_buf;
111031 _sema allrxreturnevt;
111032 uint ff_hwaddr;
111033 u8 rx_pending_cnt;
111034 -
111035 +
111036 #ifdef CONFIG_USB_INTERRUPT_IN_PIPE
111037 #ifdef PLATFORM_LINUX
111038 PURB int_in_urb;
111039 @@ -264,28 +268,34 @@ struct recv_priv {
111040 u8 *int_in_buf;
111041 #endif
111042
111043 -#endif
111044 -#ifdef PLATFORM_LINUX
111045 +#endif
111046 +#if defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)
111047 +#ifdef PLATFORM_FREEBSD
111048 + struct task irq_prepare_beacon_tasklet;
111049 + struct task recv_tasklet;
111050 +#else //PLATFORM_FREEBSD
111051 struct tasklet_struct irq_prepare_beacon_tasklet;
111052 struct tasklet_struct recv_tasklet;
111053 +#endif //PLATFORM_FREEBSD
111054 struct sk_buff_head free_recv_skb_queue;
111055 struct sk_buff_head rx_skb_queue;
111056 +#ifdef CONFIG_RX_INDICATE_QUEUE
111057 + struct task rx_indicate_tasklet;
111058 + struct ifqueue rx_indicate_queue;
111059 +#endif // CONFIG_RX_INDICATE_QUEUE
111060
111061 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
111062 _queue recv_buf_pending_queue;
111063 #endif // CONFIG_USE_USB_BUFFER_ALLOC_RX
111064 -#endif
111065 +#endif //defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)
111066
111067 u8 *pallocated_recv_buf;
111068 - u8 *precv_buf; // 4 alignment
111069 + u8 *precv_buf; // 4 alignment
111070 _queue free_recv_buf_queue;
111071 u32 free_recv_buf_queue_cnt;
111072
111073 #ifdef CONFIG_SDIO_HCI
111074 - u8 bytecnt_buf[512];
111075 - //u8 * recvbuf_drop_ori;
111076 - //u8 * recvbuf_drop;
111077 - struct recv_buf *recvbuf_drop;
111078 + _queue recv_buf_pending_queue;
111079 #endif
111080
111081 #ifdef CONFIG_PCI_HCI
111082 @@ -317,7 +327,13 @@ struct recv_priv {
111083 struct smooth_rssi_data signal_qual_data;
111084 struct smooth_rssi_data signal_strength_data;
111085 #endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
111086 +
111087 + u32 recvbuf_skb_alloc_fail_cnt;
111088 + u32 recvbuf_null_cnt;
111089 + u32 read_port_complete_EINPROGRESS_cnt;
111090 + u32 read_port_complete_other_urb_err_cnt;
111091
111092 +
111093 };
111094
111095 #ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
111096 @@ -325,15 +341,15 @@ struct recv_priv {
111097 #endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
111098
111099 struct sta_recv_priv {
111100 -
111101 - _lock lock;
111102 - sint option;
111103 -
111104 +
111105 + _lock lock;
111106 + sint option;
111107 +
111108 //_queue blk_strms[MAX_RX_NUMBLKS];
111109 _queue defrag_q; //keeping the fragment frame until defrag
111110 -
111111 - struct stainfo_rxcache rxcache;
111112 -
111113 +
111114 + struct stainfo_rxcache rxcache;
111115 +
111116 //uint sta_rx_bytes;
111117 //uint sta_rx_pkts;
111118 //uint sta_rx_fail;
111119 @@ -341,26 +357,28 @@ struct sta_recv_priv {
111120 };
111121
111122
111123 -struct recv_buf{
111124 -
111125 +struct recv_buf
111126 +{
111127 _list list;
111128
111129 _lock recvbuf_lock;
111130
111131 u32 ref_cnt;
111132
111133 - _adapter *adapter;
111134 + PADAPTER adapter;
111135
111136 -#ifdef CONFIG_SDIO_HCI
111137 -#ifdef PLATFORM_OS_XP
111138 - PMDL mdl_ptr;
111139 -#endif
111140 - u8 cmd_fail;
111141 -#endif
111142 + u8 *pbuf;
111143 + u8 *pallocated_buf;
111144 +
111145 + u32 len;
111146 + u8 *phead;
111147 + u8 *pdata;
111148 + u8 *ptail;
111149 + u8 *pend;
111150
111151 #ifdef CONFIG_USB_HCI
111152
111153 - #if defined(PLATFORM_OS_XP)||defined(PLATFORM_LINUX)
111154 + #if defined(PLATFORM_OS_XP)||defined(PLATFORM_LINUX)||defined(PLATFORM_FREEBSD)
111155 PURB purb;
111156 dma_addr_t dma_transfer_addr; /* (in) dma addr for transfer_buffer */
111157 u32 alloc_sz;
111158 @@ -383,16 +401,10 @@ struct recv_buf{
111159 _pkt *pskb;
111160 u8 reuse;
111161 #endif
111162 -
111163 - uint len;
111164 - u8 *phead;
111165 - u8 *pdata;
111166 - u8 *ptail;
111167 - u8 *pend;
111168 -
111169 - u8 *pbuf;
111170 - u8 *pallocated_buf;
111171 -
111172 +#ifdef PLATFORM_FREEBSD //skb solution
111173 + struct sk_buff *pskb;
111174 + u8 reuse;
111175 +#endif //PLATFORM_FREEBSD //skb solution
111176 };
111177
111178
111179 @@ -411,14 +423,19 @@ struct recv_buf{
111180 len = (unsigned int )(tail - data);
111181
111182 */
111183 -struct recv_frame_hdr{
111184 -
111185 +struct recv_frame_hdr
111186 +{
111187 _list list;
111188 +#ifndef CONFIG_BSD_RX_USE_MBUF
111189 + struct sk_buff *pkt;
111190 + struct sk_buff *pkt_newalloc;
111191 +#else // CONFIG_BSD_RX_USE_MBUF
111192 _pkt *pkt;
111193 _pkt *pkt_newalloc;
111194 +#endif // CONFIG_BSD_RX_USE_MBUF
111195
111196 _adapter *adapter;
111197 -
111198 +
111199 u8 fragcnt;
111200
111201 int frame_tag;
111202 @@ -456,13 +473,19 @@ union recv_frame{
111203 };
111204
111205
111206 +extern union recv_frame *_rtw_alloc_recvframe (_queue *pfree_recv_queue); //get a free recv_frame from pfree_recv_queue
111207 extern union recv_frame *rtw_alloc_recvframe (_queue *pfree_recv_queue); //get a free recv_frame from pfree_recv_queue
111208 extern void rtw_init_recvframe(union recv_frame *precvframe ,struct recv_priv *precvpriv);
111209 -extern int rtw_free_recvframe(union recv_frame *precvframe, _queue *pfree_recv_queue);
111210 -extern union recv_frame *rtw_dequeue_recvframe (_queue *queue);
111211 -extern int rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue);
111212 -extern void rtw_free_recvframe_queue(_queue *pframequeue, _queue *pfree_recv_queue);
111213 +extern int rtw_free_recvframe(union recv_frame *precvframe, _queue *pfree_recv_queue);
111214 +
111215 +#define rtw_dequeue_recvframe(queue) rtw_alloc_recvframe(queue)
111216 +extern int _rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue);
111217 +extern int rtw_enqueue_recvframe(union recv_frame *precvframe, _queue *queue);
111218
111219 +extern void rtw_free_recvframe_queue(_queue *pframequeue, _queue *pfree_recv_queue);
111220 +u32 rtw_free_uc_swdec_pending_queue(_adapter *adapter);
111221 +
111222 +sint rtw_enqueue_recvbuf_to_head(struct recv_buf *precvbuf, _queue *queue);
111223 sint rtw_enqueue_recvbuf(struct recv_buf *precvbuf, _queue *queue);
111224 struct recv_buf *rtw_dequeue_recvbuf (_queue *queue);
111225
111226 @@ -479,32 +502,32 @@ __inline static u8 *get_rxmem(union recv_frame *precvframe)
111227
111228 __inline static u8 *get_rx_status(union recv_frame *precvframe)
111229 {
111230 -
111231 +
111232 return get_rxmem(precvframe);
111233 -
111234 +
111235 }
111236
111237 __inline static u8 *get_recvframe_data(union recv_frame *precvframe)
111238 {
111239 -
111240 - //alwasy return rx_data
111241 +
111242 + //alwasy return rx_data
111243 if(precvframe==NULL)
111244 return NULL;
111245
111246 return precvframe->u.hdr.rx_data;
111247 -
111248 +
111249 }
111250
111251 __inline static u8 *recvframe_push(union recv_frame *precvframe, sint sz)
111252 -{
111253 - // append data before rx_data
111254 +{
111255 + // append data before rx_data
111256
111257 /* add data to the start of recv_frame
111258 *
111259 * This function extends the used data area of the recv_frame at the buffer
111260 * start. rx_data must be still larger than rx_head, after pushing.
111261 */
111262 -
111263 +
111264 if(precvframe==NULL)
111265 return NULL;
111266
111267 @@ -519,7 +542,7 @@ __inline static u8 *recvframe_push(union recv_frame *precvframe, sint sz)
111268 precvframe->u.hdr.len +=sz;
111269
111270 return precvframe->u.hdr.rx_data;
111271 -
111272 +
111273 }
111274
111275
111276 @@ -533,7 +556,7 @@ __inline static u8 *recvframe_pull(union recv_frame *precvframe, sint sz)
111277 if(precvframe==NULL)
111278 return NULL;
111279
111280 -
111281 +
111282 precvframe->u.hdr.rx_data += sz;
111283
111284 if(precvframe->u.hdr.rx_data > precvframe->u.hdr.rx_tail)
111285 @@ -543,9 +566,9 @@ __inline static u8 *recvframe_pull(union recv_frame *precvframe, sint sz)
111286 }
111287
111288 precvframe->u.hdr.len -=sz;
111289 -
111290 +
111291 return precvframe->u.hdr.rx_data;
111292 -
111293 +
111294 }
111295
111296 __inline static u8 *recvframe_put(union recv_frame *precvframe, sint sz)
111297 @@ -553,16 +576,16 @@ __inline static u8 *recvframe_put(union recv_frame *precvframe, sint sz)
111298 // rx_tai += sz; move rx_tail sz bytes hereafter
111299
111300 //used for append sz bytes from ptr to rx_tail, update rx_tail and return the updated rx_tail to the caller
111301 - //after putting, rx_tail must be still larger than rx_end.
111302 + //after putting, rx_tail must be still larger than rx_end.
111303 unsigned char * prev_rx_tail;
111304
111305 if(precvframe==NULL)
111306 return NULL;
111307
111308 prev_rx_tail = precvframe->u.hdr.rx_tail;
111309 -
111310 +
111311 precvframe->u.hdr.rx_tail += sz;
111312 -
111313 +
111314 if(precvframe->u.hdr.rx_tail > precvframe->u.hdr.rx_end)
111315 {
111316 precvframe->u.hdr.rx_tail -= sz;
111317 @@ -580,7 +603,7 @@ __inline static u8 *recvframe_put(union recv_frame *precvframe, sint sz)
111318 __inline static u8 *recvframe_pull_tail(union recv_frame *precvframe, sint sz)
111319 {
111320 // rmv data from rx_tail (by yitsen)
111321 -
111322 +
111323 //used for extract sz bytes from rx_end, update rx_end and return the updated rx_end to the caller
111324 //after pulling, rx_end must be still larger than rx_data.
111325
111326 @@ -606,10 +629,10 @@ __inline static u8 *recvframe_pull_tail(union recv_frame *precvframe, sint sz)
111327 __inline static _buffer * get_rxbuf_desc(union recv_frame *precvframe)
111328 {
111329 _buffer * buf_desc;
111330 -
111331 +
111332 if(precvframe==NULL)
111333 return NULL;
111334 -#ifdef PLATFORM_WINDOWS
111335 +#ifdef PLATFORM_WINDOWS
111336 NdisQueryPacket(precvframe->u.hdr.pkt, NULL, NULL, &buf_desc, NULL);
111337 #endif
111338
111339 @@ -619,18 +642,17 @@ __inline static _buffer * get_rxbuf_desc(union recv_frame *precvframe)
111340
111341 __inline static union recv_frame *rxmem_to_recvframe(u8 *rxmem)
111342 {
111343 - //due to the design of 2048 bytes alignment of recv_frame, we can reference the union recv_frame
111344 + //due to the design of 2048 bytes alignment of recv_frame, we can reference the union recv_frame
111345 //from any given member of recv_frame.
111346 // rxmem indicates the any member/address in recv_frame
111347 -
111348 - //return (union recv_frame*)(((uint)rxmem>>RXFRAME_ALIGN) <<RXFRAME_ALIGN) ;
111349 - //return (union recv_frame*)(((SIZE_PTR)rxmem >> RXFRAME_ALIGN) << RXFRAME_ALIGN);
111350 - return (union recv_frame*)(((ulong)rxmem>>RXFRAME_ALIGN) <<RXFRAME_ALIGN) ;
111351 +
111352 + return (union recv_frame*)(((SIZE_PTR)rxmem >> RXFRAME_ALIGN) << RXFRAME_ALIGN);
111353 +
111354 }
111355
111356 __inline static union recv_frame *pkt_to_recvframe(_pkt *pkt)
111357 {
111358 -
111359 +
111360 u8 * buf_star;
111361 union recv_frame * precv_frame;
111362 #ifdef PLATFORM_WINDOWS
111363 @@ -648,7 +670,7 @@ __inline static union recv_frame *pkt_to_recvframe(_pkt *pkt)
111364 __inline static u8 *pkt_to_recvmem(_pkt *pkt)
111365 {
111366 // return the rx_head
111367 -
111368 +
111369 union recv_frame * precv_frame = pkt_to_recvframe(pkt);
111370
111371 return precv_frame->u.hdr.rx_head;
111372 @@ -662,7 +684,7 @@ __inline static u8 *pkt_to_recvdata(_pkt *pkt)
111373 union recv_frame * precv_frame =pkt_to_recvframe(pkt);
111374
111375 return precv_frame->u.hdr.rx_data;
111376 -
111377 +
111378 }
111379
111380
111381 @@ -686,13 +708,14 @@ __inline static u8 query_rx_pwr_percentage(s8 antpower )
111382 return (100+antpower);
111383 }
111384 }
111385 +
111386 __inline static s32 translate_percentage_to_dbm(u32 SignalStrengthIndex)
111387 {
111388 s32 SignalPower; // in dBm.
111389
111390 // Translate to dBm (x=0.5y-95).
111391 - SignalPower = (s32)((SignalStrengthIndex + 1) >> 1);
111392 - SignalPower -= 95;
111393 + SignalPower = (s32)((SignalStrengthIndex + 1) >> 1);
111394 + SignalPower -= 95;
111395
111396 return SignalPower;
111397 }
111398 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_rf.h b/drivers/net/wireless/rtl8192cu/include/rtw_rf.h
111399 index 7414c1b6..697dd4e 100644
111400 --- a/drivers/net/wireless/rtl8192cu/include/rtw_rf.h
111401 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_rf.h
111402 @@ -16,7 +16,7 @@
111403 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
111404 *
111405 *
111406 -******************************************************************************/
111407 + ******************************************************************************/
111408 #ifndef __RTW_RF_H_
111409 #define __RTW_RF_H_
111410
111411 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_security.h b/drivers/net/wireless/rtl8192cu/include/rtw_security.h
111412 index 02ef9b0..835677c3 100644
111413 --- a/drivers/net/wireless/rtl8192cu/include/rtw_security.h
111414 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_security.h
111415 @@ -16,8 +16,7 @@
111416 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
111417 *
111418 *
111419 -
111420 -******************************************************************************/
111421 + ******************************************************************************/
111422 #ifndef __RTW_SECURITY_H_
111423 #define __RTW_SECURITY_H_
111424
111425 @@ -33,6 +32,10 @@
111426 #define _TKIP_WTMIC_ 0x3
111427 #define _AES_ 0x4
111428 #define _WEP104_ 0x5
111429 +#ifdef CONFIG_IEEE80211W
111430 +#define _BIP_ 0x8
111431 +#endif //CONFIG_IEEE80211W
111432 +#define is_wep_enc(alg) (((alg) == _WEP40_) || ((alg) == _WEP104_))
111433
111434 #define _WPA_IE_ID_ 0xdd
111435 #define _WPA2_IE_ID_ 0x30
111436 @@ -109,6 +112,7 @@ struct security_priv
111437 u32 dot11PrivacyKeyIndex; // this is only valid for legendary wep, 0~3 for key id. (tx key index)
111438 union Keytype dot11DefKey[4]; // this is only valid for def. key
111439 u32 dot11DefKeylen[4];
111440 + u8 key_mask; /* use to restore wep key after hal_init */
111441
111442 u32 dot118021XGrpPrivacy; // This specify the privacy algthm. used for Grp key
111443 u32 dot118021XGrpKeyid; // key id used for Grp Key ( tx key index)
111444 @@ -117,7 +121,12 @@ struct security_priv
111445 union Keytype dot118021XGrprxmickey[4];
111446 union pn48 dot11Grptxpn; // PN48 used for Grp Key xmit.
111447 union pn48 dot11Grprxpn; // PN48 used for Grp Key recv.
111448 -
111449 +#ifdef CONFIG_IEEE80211W
111450 + u32 dot11wBIPKeyid; // key id used for BIP Key ( tx key index)
111451 + union Keytype dot11wBIPKey[6]; // BIP Key, for index4 and index5
111452 + union pn48 dot11wBIPtxpn; // PN48 used for Grp Key xmit.
111453 + union pn48 dot11wBIPrxpn; // PN48 used for Grp Key recv.
111454 +#endif //CONFIG_IEEE80211W
111455 #ifdef CONFIG_AP_MODE
111456 //extend security capabilities for AP_MODE
111457 unsigned int dot8021xalg;//0:disable, 1:psk, 2:802.1x
111458 @@ -128,12 +137,14 @@ struct security_priv
111459 unsigned int wpa2_pairwise_cipher;
111460 #endif
111461
111462 - u8 wps_phase;//for wps
111463 u8 wps_ie[MAX_WPS_IE_LEN];//added in assoc req
111464 int wps_ie_len;
111465
111466
111467 u8 binstallGrpkey;
111468 +#ifdef CONFIG_IEEE80211W
111469 + u8 binstallBIPkey;
111470 +#endif //CONFIG_IEEE80211W
111471 u8 busetkipkey;
111472 //_timer tkip_timer;
111473 u8 bcheck_grpkey;
111474 @@ -181,6 +192,7 @@ struct security_priv
111475 //u32 PMKIDCount; // Added by Annie, 2006-10-13.
111476 //u8 szCapability[256]; // For WPA2-PSK using zero-config, by Annie, 2005-09-20.
111477
111478 + u8 bWepDefaultKeyIdxSet;
111479 };
111480
111481 struct sha256_state {
111482 @@ -377,7 +389,9 @@ static const unsigned long K[64] = {
111483 #ifndef MIN
111484 #define MIN(x, y) (((x) < (y)) ? (x) : (y))
111485 #endif
111486 -
111487 +#ifdef CONFIG_IEEE80211W
111488 +int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac);
111489 +#endif //CONFIG_IEEE80211W
111490 void rtw_secmicsetkey(struct mic_data *pmicdata, u8 * key );
111491 void rtw_secmicappendbyte(struct mic_data *pmicdata, u8 b );
111492 void rtw_secmicappend(struct mic_data *pmicdata, u8 * src, u32 nBytes );
111493 @@ -398,7 +412,9 @@ void rtw_wep_encrypt(_adapter *padapter, u8 *pxmitframe);
111494 u32 rtw_aes_decrypt(_adapter *padapter, u8 *precvframe);
111495 u32 rtw_tkip_decrypt(_adapter *padapter, u8 *precvframe);
111496 void rtw_wep_decrypt(_adapter *padapter, u8 *precvframe);
111497 -
111498 +#ifdef CONFIG_IEEE80211W
111499 +u32 rtw_BIP_verify(_adapter *padapter, u8 *precvframe);
111500 +#endif //CONFIG_IEEE80211W
111501 #ifdef CONFIG_TDLS
111502 void wpa_tdls_generate_tpk(_adapter *padapter, struct sta_info *psta);
111503 int wpa_tdls_ftie_mic(u8 *kck, u8 trans_seq,
111504 @@ -406,7 +422,7 @@ int wpa_tdls_ftie_mic(u8 *kck, u8 trans_seq,
111505 u8 *mic);
111506 int tdls_verify_mic(u8 *kck, u8 trans_seq,
111507 u8 *lnkid, u8 *rsnie, u8 *timeoutie, u8 *ftie);
111508 -#endif
111509 +#endif //CONFIG_TDLS
111510
111511 #ifdef PLATFORM_WINDOWS
111512 void rtw_use_tkipkey_handler (
111513 @@ -419,5 +435,13 @@ void rtw_use_tkipkey_handler (
111514 #ifdef PLATFORM_LINUX
111515 void rtw_use_tkipkey_handler(void* FunctionContext);
111516 #endif
111517 +
111518 +#ifdef PLATFORM_FREEBSD
111519 +void rtw_use_tkipkey_handler(void* FunctionContext);
111520 +#endif //PLATFORM_FREEBSD
111521 +
111522 +void rtw_sec_restore_wep_key(_adapter *adapter);
111523 +u8 rtw_handle_tkip_countermeasure(_adapter* adapter, const char *caller);
111524 +
111525 #endif //__RTL871X_SECURITY_H_
111526
111527 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h b/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h
111528 new file mode 100644
111529 index 0000000..45dd2bf
111530 --- /dev/null
111531 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h
111532 @@ -0,0 +1,74 @@
111533 +/******************************************************************************
111534 + *
111535 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
111536 + *
111537 + * This program is free software; you can redistribute it and/or modify it
111538 + * under the terms of version 2 of the GNU General Public License as
111539 + * published by the Free Software Foundation.
111540 + *
111541 + * This program is distributed in the hope that it will be useful, but WITHOUT
111542 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
111543 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
111544 + * more details.
111545 + *
111546 + * You should have received a copy of the GNU General Public License along with
111547 + * this program; if not, write to the Free Software Foundation, Inc.,
111548 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
111549 + *
111550 + *
111551 + ******************************************************************************/
111552 +#ifndef _RTW_SRESET_C_
111553 +#define _RTW_SRESET_C_
111554 +
111555 +#include <drv_conf.h>
111556 +#include <osdep_service.h>
111557 +#include <drv_types.h>
111558 +
111559 +enum {
111560 + SRESET_TGP_NULL = 0,
111561 + SRESET_TGP_XMIT_STATUS = 1,
111562 + SRESET_TGP_LINK_STATUS = 2,
111563 +};
111564 +
111565 +struct sreset_priv {
111566 + _mutex silentreset_mutex;
111567 + u8 silent_reset_inprogress;
111568 + u8 Wifi_Error_Status;
111569 + unsigned long last_tx_time;
111570 + unsigned long last_tx_complete_time;
111571 +
111572 + s32 dbg_trigger_point;
111573 +};
111574 +
111575 +#ifdef CONFIG_RTL8192C
111576 +#include <rtl8192c_hal.h>
111577 +#endif
111578 +#ifdef CONFIG_RTL8192D
111579 +#include <rtl8192d_hal.h>
111580 +#endif
111581 +#ifdef CONFIG_RTL8723A
111582 +#include <rtl8723a_hal.h>
111583 +#endif
111584 +#ifdef CONFIG_RTL8188E
111585 +#include <rtl8188e_hal.h>
111586 +#endif
111587 +
111588 +#define WIFI_STATUS_SUCCESS 0
111589 +#define USB_VEN_REQ_CMD_FAIL BIT0
111590 +#define USB_READ_PORT_FAIL BIT1
111591 +#define USB_WRITE_PORT_FAIL BIT2
111592 +#define WIFI_MAC_TXDMA_ERROR BIT3
111593 +#define WIFI_TX_HANG BIT4
111594 +#define WIFI_RX_HANG BIT5
111595 +#define WIFI_IF_NOT_EXIST BIT6
111596 +
111597 +void sreset_init_value(_adapter *padapter);
111598 +void sreset_reset_value(_adapter *padapter);
111599 +u8 sreset_get_wifi_status(_adapter *padapter);
111600 +void sreset_set_wifi_error_status(_adapter *padapter, u32 status);
111601 +void sreset_set_trigger_point(_adapter *padapter, s32 tgp);
111602 +bool sreset_inprogress(_adapter *padapter);
111603 +void sreset_reset(_adapter *padapter);
111604 +
111605 +#endif
111606 +
111607 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h b/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h
111608 new file mode 100644
111609 index 0000000..1005331
111610 --- /dev/null
111611 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h
111612 @@ -0,0 +1,143 @@
111613 +/******************************************************************************
111614 + *
111615 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
111616 + *
111617 + * This program is free software; you can redistribute it and/or modify it
111618 + * under the terms of version 2 of the GNU General Public License as
111619 + * published by the Free Software Foundation.
111620 + *
111621 + * This program is distributed in the hope that it will be useful, but WITHOUT
111622 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
111623 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
111624 + * more details.
111625 + *
111626 + * You should have received a copy of the GNU General Public License along with
111627 + * this program; if not, write to the Free Software Foundation, Inc.,
111628 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
111629 + *
111630 + *
111631 + ******************************************************************************/
111632 +#ifndef __RTW_TDLS_H_
111633 +#define __RTW_TDLS_H_
111634 +
111635 +#include <drv_types.h>
111636 +
111637 +#ifdef CONFIG_TDLS
111638 +/* TDLS STA state */
111639 +#define TDLS_STATE_NONE 0x00000000 //default state
111640 +#define TDLS_INITIATOR_STATE 0x10000000
111641 +#define TDLS_RESPONDER_STATE 0x20000000
111642 +#define TDLS_LINKED_STATE 0x40000000
111643 +#define TDLS_CH_SWITCH_ON_STATE 0x01000000
111644 +#define TDLS_PEER_AT_OFF_STATE 0x02000000 //could send pkt on target ch
111645 +#define TDLS_AT_OFF_CH_STATE 0x04000000
111646 +#define TDLS_CH_SW_INITIATOR_STATE 0x08000000 //avoiding duplicated or unconditional ch. switch rsp.
111647 +#define TDLS_APSD_CHSW_STATE 0x00100000 //in APSD and want to setup channel switch
111648 +#define TDLS_PEER_SLEEP_STATE 0x00200000 //peer sta is sleeping
111649 +#define TDLS_SW_OFF_STATE 0x00400000 //terminate channel swithcing
111650 +#define TDLS_ALIVE_STATE 0x00010000 //Check if peer sta is alived.
111651 +
111652 +#define TPK_RESEND_COUNT 301
111653 +#define CH_SWITCH_TIME 10
111654 +#define CH_SWITCH_TIMEOUT 30
111655 +#define TDLS_STAY_TIME 500
111656 +#define TDLS_SIGNAL_THRESH 0x20
111657 +#define TDLS_WATCHDOG_PERIOD 10 //Periodically sending tdls discovery request in TDLS_WATCHDOG_PERIOD * 2 sec
111658 +#define TDLS_ALIVE_TIMER_PH1 5000
111659 +#define TDLS_ALIVE_TIMER_PH2 2000
111660 +#define TDLS_STAY_TIME 500
111661 +#define TDLS_HANDSHAKE_TIME 2000
111662 +#define TDLS_ALIVE_COUNT 3
111663 +#define TDLS_INI_MACID_ENTRY 6
111664 +
111665 +/* TDLS */
111666 +#define TDLS_MIC_LEN 16
111667 +#define WPA_NONCE_LEN 32
111668 +#define TDLS_TIMEOUT_LEN 4
111669 +
111670 +struct wpa_tdls_ftie {
111671 + u8 ie_type; /* FTIE */
111672 + u8 ie_len;
111673 + u8 mic_ctrl[2];
111674 + u8 mic[TDLS_MIC_LEN];
111675 + u8 Anonce[WPA_NONCE_LEN]; /* Responder Nonce in TDLS */
111676 + u8 Snonce[WPA_NONCE_LEN]; /* Initiator Nonce in TDLS */
111677 + /* followed by optional elements */
111678 +} ;
111679 +
111680 +struct wpa_tdls_lnkid {
111681 + u8 ie_type; /* Link Identifier IE */
111682 + u8 ie_len;
111683 + u8 bssid[ETH_ALEN];
111684 + u8 init_sta[ETH_ALEN];
111685 + u8 resp_sta[ETH_ALEN];
111686 +} ;
111687 +
111688 +static u8 TDLS_RSNIE[]={ 0x01, 0x00, //version shall be set to 1
111689 + 0x00, 0x0f, 0xac, 0x07, //group sipher suite
111690 + 0x01, 0x00, //pairwise cipher suite count
111691 + 0x00, 0x0f, 0xac, 0x04, //pairwise cipher suite list; CCMP only
111692 + 0x01, 0x00, //AKM suite count
111693 + 0x00, 0x0f, 0xac, 0x07, //TPK Handshake
111694 + 0x00, 0x02,
111695 + //PMKID shall not be present
111696 + };
111697 +
111698 +static u8 TDLS_WMMIE[]={0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; //Qos info all set zero
111699 +
111700 +static u8 TDLS_EXT_CAPIE[] = {0x00, 0x00, 0x00, 0x50, 0x20}; //bit(28), bit(30), bit(37)
111701 +
111702 +// SRC: Supported Regulatory Classes
111703 +static u8 TDLS_SRC[] = { 0x01, 0x01, 0x02, 0x03, 0x04, 0x0c, 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1e, 0x20, 0x21 };
111704 +
111705 +void rtw_reset_tdls_info(_adapter* padapter);
111706 +int rtw_init_tdls_info(_adapter* padapter);
111707 +void rtw_free_tdls_info(struct tdls_info *ptdlsinfo);
111708 +void issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, struct sta_info *ptdls_sta, unsigned int power_mode);
111709 +void init_TPK_timer(_adapter *padapter, struct sta_info *psta);
111710 +void init_ch_switch_timer(_adapter *padapter, struct sta_info *psta);
111711 +void init_base_ch_timer(_adapter *padapter, struct sta_info *psta);
111712 +void init_off_ch_timer(_adapter *padapter, struct sta_info *psta);
111713 +void init_tdls_alive_timer(_adapter *padapter, struct sta_info *psta);
111714 +void init_handshake_timer(_adapter *padapter, struct sta_info *psta);
111715 +void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta);
111716 +#ifdef CONFIG_WFD
111717 +void issue_tunneled_probe_req(_adapter *padapter);
111718 +void issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame);
111719 +#endif //CONFIG_WFD
111720 +void issue_tdls_dis_req(_adapter *padapter, u8 *mac_addr);
111721 +void issue_tdls_setup_req(_adapter *padapter, u8 *mac_addr);
111722 +void issue_tdls_setup_rsp(_adapter *padapter, union recv_frame *precv_frame);
111723 +void issue_tdls_setup_cfm(_adapter *padapter, union recv_frame *precv_frame);
111724 +void issue_tdls_dis_rsp(_adapter * padapter, union recv_frame * precv_frame, u8 dialog);
111725 +void issue_tdls_teardown(_adapter *padapter, u8 *mac_addr);
111726 +void issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *psta);
111727 +void issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr);
111728 +void issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr);
111729 +sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame);
111730 +sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame);
111731 +sint On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame);
111732 +sint On_TDLS_Setup_Cfm(_adapter *adapter, union recv_frame *precv_frame);
111733 +sint On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame);
111734 +sint On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame);
111735 +sint On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame);
111736 +sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame);
111737 +sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame);
111738 +void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
111739 +void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
111740 +void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
111741 +void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
111742 +void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
111743 +void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog);
111744 +void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
111745 +void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
111746 +void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
111747 +void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
111748 +void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
111749 +
111750 +int update_sgi_tdls(_adapter *padapter, struct sta_info *psta);
111751 +u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta);
111752 +#endif //CONFIG_TDLS
111753 +
111754 +#endif
111755 +
111756 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_version.h b/drivers/net/wireless/rtl8192cu/include/rtw_version.h
111757 index f88ea77..4fb9dd4 100644
111758 --- a/drivers/net/wireless/rtl8192cu/include/rtw_version.h
111759 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_version.h
111760 @@ -1 +1 @@
111761 -#define DRIVERVERSION "v3.4.4_4749.20121105"
111762 +#define DRIVERVERSION "v4.0.2_9000.20130911"
111763 diff --git a/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h b/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h
111764 index 54e0b2d..f7eaf4a 100644
111765 --- a/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h
111766 +++ b/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h
111767 @@ -1,7 +1,7 @@
111768 /******************************************************************************
111769 *
111770 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
111771 - *
111772 + *
111773 * This program is free software; you can redistribute it and/or modify it
111774 * under the terms of version 2 of the GNU General Public License as
111775 * published by the Free Software Foundation.
111776 @@ -16,25 +16,34 @@
111777 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
111778 *
111779 *
111780 -******************************************************************************/
111781 + ******************************************************************************/
111782 #ifndef _RTW_XMIT_H_
111783 #define _RTW_XMIT_H_
111784
111785 #include <drv_conf.h>
111786 #include <osdep_service.h>
111787 #include <drv_types.h>
111788 -#include <xmit_osdep.h>
111789 +#ifdef PLATFORM_FREEBSD
111790 +#include <if_ether.h>
111791 +#endif //PLATFORM_FREEBSD
111792
111793 #ifdef CONFIG_SDIO_HCI
111794 -#define MAX_XMITBUF_SZ (30720)// (2048)
111795 +//#define MAX_XMITBUF_SZ (30720)// (2048)
111796 +#define MAX_XMITBUF_SZ (12288)
111797 #define NR_XMITBUFF (16)
111798
111799 #elif defined (CONFIG_USB_HCI)
111800 #ifdef CONFIG_USB_TX_AGGREGATION
111801 -#define MAX_XMITBUF_SZ 20480 // 20k
111802 + #if defined(CONFIG_PLATFORM_ARM_SUNxI) || defined(CONFIG_PLATFORM_ARM_SUN6I)
111803 + #define MAX_XMITBUF_SZ (12288) //12k 1536*8
111804 + #elif defined (CONFIG_PLATFORM_MSTAR)
111805 + #define MAX_XMITBUF_SZ 7680 // 7.5k
111806 + #else
111807 + #define MAX_XMITBUF_SZ (20480) // 20k
111808 + #endif
111809 #else
111810 #define MAX_XMITBUF_SZ (2048)
111811 -#endif
111812 +#endif //CONFIG_USB_TX_AGGREGATION
111813 #ifdef CONFIG_SINGLE_XMIT_BUF
111814 #define NR_XMITBUFF (1)
111815 #else
111816 @@ -57,7 +66,7 @@
111817 #endif
111818
111819 // xmit extension buff defination
111820 -#define MAX_XMIT_EXTBUF_SZ (2048)
111821 +#define MAX_XMIT_EXTBUF_SZ (1536)
111822 #ifdef CONFIG_SINGLE_XMIT_BUF
111823 #define NR_XMIT_EXTBUFF (1)
111824 #else
111825 @@ -71,9 +80,20 @@
111826 #define XMIT_BE_QUEUE (2)
111827 #define XMIT_BK_QUEUE (3)
111828
111829 +#define VO_QUEUE_INX 0
111830 +#define VI_QUEUE_INX 1
111831 +#define BE_QUEUE_INX 2
111832 +#define BK_QUEUE_INX 3
111833 +#define BCN_QUEUE_INX 4
111834 +#define MGT_QUEUE_INX 5
111835 +#define HIGH_QUEUE_INX 6
111836 +#define TXCMD_QUEUE_INX 7
111837 +
111838 +#define HW_QUEUE_ENTRY 8
111839 +
111840 #ifdef CONFIG_PCI_HCI
111841 -#define TXDESC_NUM 64
111842 -//#define TXDESC_NUM 128
111843 +//#define TXDESC_NUM 64
111844 +#define TXDESC_NUM 128
111845 #define TXDESC_NUM_BE_QUEUE 128
111846 #endif
111847
111848 @@ -117,9 +137,13 @@ do{\
111849 #define HWXMIT_ENTRY 4
111850
111851 #define TXDESC_SIZE 32
111852 -#define PACKET_OFFSET_SZ (8)
111853 +
111854 +#ifdef CONFIG_SDIO_HCI
111855 +#define TXDESC_OFFSET TXDESC_SIZE
111856 +#endif
111857
111858 #ifdef CONFIG_USB_HCI
111859 +#define PACKET_OFFSET_SZ (8)
111860 #define TXDESC_OFFSET (TXDESC_SIZE + PACKET_OFFSET_SZ)
111861 #endif
111862
111863 @@ -212,7 +236,7 @@ struct tx_desc{
111864
111865 union txdesc {
111866 struct tx_desc txdesc;
111867 - unsigned int value[TXDESC_SIZE>>2];
111868 + unsigned int value[TXDESC_SIZE>>2];
111869 };
111870
111871 #ifdef CONFIG_PCI_HCI
111872 @@ -230,36 +254,36 @@ struct rtw_tx_ring {
111873
111874 struct hw_xmit {
111875 //_lock xmit_lock;
111876 - //_list pending;
111877 + //_list pending;
111878 _queue *sta_queue;
111879 //struct hw_txqueue *phwtxqueue;
111880 - //sint txcmdcnt;
111881 + //sint txcmdcnt;
111882 int accnt;
111883 };
111884
111885 #if 0
111886 struct pkt_attrib
111887 -{
111888 +{
111889 u8 type;
111890 u8 subtype;
111891 u8 bswenc;
111892 u8 dhcp_pkt;
111893 - u16 ether_type;
111894 + u16 ether_type;
111895 int pktlen; //the original 802.3 pkt raw_data len (not include ether_hdr data)
111896 int pkt_hdrlen; //the original 802.3 pkt header len
111897 - int hdrlen; //the WLAN Header Len
111898 + int hdrlen; //the WLAN Header Len
111899 int nr_frags;
111900 int last_txcmdsz;
111901 int encrypt; //when 0 indicate no encrypt. when non-zero, indicate the encrypt algorith
111902 u8 iv[8];
111903 int iv_len;
111904 - u8 icv[8];
111905 + u8 icv[8];
111906 int icv_len;
111907 int priority;
111908 int ack_policy;
111909 int mac_id;
111910 - int vcs_mode; //virtual carrier sense method
111911 -
111912 + int vcs_mode; //virtual carrier sense method
111913 +
111914 u8 dst[ETH_ALEN];
111915 u8 src[ETH_ALEN];
111916 u8 ta[ETH_ALEN];
111917 @@ -268,7 +292,7 @@ struct pkt_attrib
111918 u8 key_idx;
111919
111920 u8 qos_en;
111921 - u8 ht_en;
111922 + u8 ht_en;
111923 u8 raid;//rate adpative id
111924 u8 bwmode;
111925 u8 ch_offset;//PRIME_CHNL_OFFSET
111926 @@ -279,19 +303,19 @@ struct pkt_attrib
111927
111928 u8 pctrl;//per packet txdesc control enable
111929 u8 triggered;//for ap mode handling Power Saving sta
111930 -
111931 +
111932 u32 qsel;
111933 u16 seqnum;
111934
111935 struct sta_info * psta;
111936 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
111937 u8 hw_tcp_csum;
111938 -#endif
111939 +#endif
111940 };
111941 #else
111942 //reduce size
111943 struct pkt_attrib
111944 -{
111945 +{
111946 u8 type;
111947 u8 subtype;
111948 u8 bswenc;
111949 @@ -318,7 +342,7 @@ struct pkt_attrib
111950 u8 ra[ETH_ALEN];
111951 u8 key_idx;
111952 u8 qos_en;
111953 - u8 ht_en;
111954 + u8 ht_en;
111955 u8 raid;//rate adpative id
111956 u8 bwmode;
111957 u8 ch_offset;//PRIME_CHNL_OFFSET
111958 @@ -335,10 +359,28 @@ struct pkt_attrib
111959 struct sta_info * psta;
111960 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
111961 u8 hw_tcp_csum;
111962 -#endif
111963 +#endif
111964 + union Keytype dot11tkiptxmickey;
111965 + //union Keytype dot11tkiprxmickey;
111966 + union Keytype dot118021x_UncstKey;
111967 };
111968 #endif
111969
111970 +#ifdef PLATFORM_FREEBSD
111971 +#define ETH_ALEN 6 /* Octets in one ethernet addr */
111972 +#define ETH_HLEN 14 /* Total octets in header. */
111973 +#define ETH_P_IP 0x0800 /* Internet Protocol packet */
111974 +
111975 +/*struct rtw_ieee80211_hdr {
111976 + uint16_t frame_control;
111977 + uint16_t duration_id;
111978 + u8 addr1[6];
111979 + u8 addr2[6];
111980 + u8 addr3[6];
111981 + uint16_t seq_ctrl;
111982 + u8 addr4[6];
111983 +} ;*/
111984 +#endif //PLATFORM_FREEBSD
111985
111986 #define WLANHDR_OFFSET 64
111987
111988 @@ -355,6 +397,35 @@ struct pkt_attrib
111989
111990 #define TXAGG_FRAMETAG 0x08
111991
111992 +struct submit_ctx{
111993 + u32 submit_time; /* */
111994 + u32 timeout_ms; /* <0: not synchronous, 0: wait forever, >0: up to ms waiting */
111995 + int status; /* status for operation */
111996 +#ifdef PLATFORM_LINUX
111997 + struct completion done;
111998 +#endif
111999 +};
112000 +
112001 +enum {
112002 + RTW_SCTX_SUBMITTED = -1,
112003 + RTW_SCTX_DONE_SUCCESS = 0,
112004 + RTW_SCTX_DONE_UNKNOWN,
112005 + RTW_SCTX_DONE_TIMEOUT,
112006 + RTW_SCTX_DONE_BUF_ALLOC,
112007 + RTW_SCTX_DONE_BUF_FREE,
112008 + RTW_SCTX_DONE_WRITE_PORT_ERR,
112009 + RTW_SCTX_DONE_TX_DESC_NA,
112010 + RTW_SCTX_DONE_TX_DENY,
112011 + RTW_SCTX_DONE_CCX_PKT_FAIL,
112012 + RTW_SCTX_DONE_DRV_STOP,
112013 + RTW_SCTX_DONE_DEV_REMOVE,
112014 +};
112015 +
112016 +
112017 +void rtw_sctx_init(struct submit_ctx *sctx, int timeout_ms);
112018 +int rtw_sctx_wait(struct submit_ctx *sctx);
112019 +void rtw_sctx_done_err(struct submit_ctx **sctx, int status);
112020 +void rtw_sctx_done(struct submit_ctx **sctx);
112021
112022 struct xmit_buf
112023 {
112024 @@ -372,11 +443,13 @@ struct xmit_buf
112025 u16 flags;
112026 u32 alloc_sz;
112027
112028 + struct submit_ctx *sctx;
112029 +
112030 #ifdef CONFIG_USB_HCI
112031 -
112032 - u32 sz[8];
112033
112034 -#if defined(PLATFORM_OS_XP)||defined(PLATFORM_LINUX)
112035 + u32 sz[8];
112036 +
112037 +#if defined(PLATFORM_OS_XP)||defined(PLATFORM_LINUX) || defined(PLATFORM_FREEBSD)
112038 PURB pxmit_urb[8];
112039 dma_addr_t dma_transfer_addr; /* (in) dma addr for transfer_buffer */
112040 #endif
112041 @@ -389,20 +462,14 @@ struct xmit_buf
112042 USB_TRANSFER usb_transfer_write_port;
112043 #endif
112044
112045 -#ifdef PLATFORM_LINUX
112046 - u8 isSync; //is this synchronous?
112047 - int status; // keeping urb status for synchronous call to access
112048 - struct completion done; // for wirte_port synchronously
112049 -#endif
112050 -
112051 u8 bpending[8];
112052 -
112053 +
112054 sint last[8];
112055 -
112056 +
112057 #endif
112058
112059 #ifdef CONFIG_SDIO_HCI
112060 - u32 len;
112061 + u32 len;
112062 u8 *phead;
112063 u8 *pdata;
112064 u8 *ptail;
112065 @@ -410,9 +477,9 @@ struct xmit_buf
112066 u32 ff_hwaddr;
112067 #ifdef PLATFORM_OS_XP
112068 PMDL pxmitbuf_mdl;
112069 - PIRP pxmitbuf_irp;
112070 + PIRP pxmitbuf_irp;
112071 PSDBUS_REQUEST_PACKET pxmitbuf_sdrp;
112072 -#endif
112073 +#endif
112074 #endif
112075
112076 #ifdef CONFIG_PCI_HCI
112077 @@ -443,6 +510,7 @@ struct xmit_frame
112078
112079 #ifdef CONFIG_SDIO_HCI
112080 u8 pg_num;
112081 + u8 agg_num;
112082 #endif
112083
112084 #ifdef CONFIG_USB_HCI
112085 @@ -455,12 +523,19 @@ struct xmit_frame
112086 u16 EMPktLen[5];//The max value by HW
112087 #endif
112088 #endif
112089 +#ifdef CONFIG_XMIT_ACK
112090 + u8 ack_report;
112091 +#endif
112092 +
112093 + u8 *alloc_addr; /* the actual address this xmitframe allocated */
112094 + u8 ext_tag; /* 0:data, 1:mgmt */
112095 +
112096 };
112097
112098 struct tx_servq {
112099 _list tx_pending;
112100 - _queue sta_pending;
112101 - int qcnt;
112102 + _queue sta_pending;
112103 + int qcnt;
112104 };
112105
112106
112107 @@ -473,7 +548,7 @@ struct sta_xmit_priv
112108
112109
112110 //struct tx_servq blk_q[MAX_NUMBLKS];
112111 - struct tx_servq be_q; //priority == 0,3
112112 + struct tx_servq be_q; //priority == 0,3
112113 struct tx_servq bk_q; //priority == 1,2
112114 struct tx_servq vi_q; //priority == 4,5
112115 struct tx_servq vo_q; //priority == 6,7
112116 @@ -492,7 +567,7 @@ struct sta_xmit_priv
112117 struct hw_txqueue {
112118 volatile sint head;
112119 volatile sint tail;
112120 - volatile sint free_sz; //in units of 64 bytes
112121 + volatile sint free_sz; //in units of 64 bytes
112122 volatile sint free_cmdsz;
112123 volatile sint txsz[8];
112124 uint ff_hwaddr;
112125 @@ -502,30 +577,34 @@ struct hw_txqueue {
112126
112127
112128 struct xmit_priv {
112129 -
112130 +
112131 _lock lock;
112132
112133 _sema xmit_sema;
112134 _sema terminate_xmitthread_sema;
112135 -
112136 +
112137 //_queue blk_strms[MAX_NUMBLKS];
112138 _queue be_pending;
112139 _queue bk_pending;
112140 _queue vi_pending;
112141 _queue vo_pending;
112142 _queue bm_pending;
112143 -
112144 +
112145 //_queue legacy_dz_queue;
112146 //_queue apsd_queue;
112147 -
112148 +
112149 u8 *pallocated_frame_buf;
112150 u8 *pxmit_frame_buf;
112151 uint free_xmitframe_cnt;
112152 + _queue free_xmit_queue;
112153
112154 //uint mapping_addr;
112155 - //uint pkt_sz;
112156 -
112157 - _queue free_xmit_queue;
112158 + //uint pkt_sz;
112159 +
112160 + u8 *xframe_ext_alloc_addr;
112161 + u8 *xframe_ext;
112162 + uint free_xframe_ext_cnt;
112163 + _queue free_xframe_ext_queue;
112164
112165 //struct hw_txqueue be_txqueue;
112166 //struct hw_txqueue bk_txqueue;
112167 @@ -536,25 +615,25 @@ struct xmit_priv {
112168 uint frag_len;
112169
112170 _adapter *adapter;
112171 -
112172 +
112173 u8 vcs_setting;
112174 u8 vcs;
112175 u8 vcs_type;
112176 //u16 rts_thresh;
112177 -
112178 +
112179 u64 tx_bytes;
112180 u64 tx_pkts;
112181 u64 tx_drop;
112182 u64 last_tx_bytes;
112183 u64 last_tx_pkts;
112184 -
112185 +
112186 struct hw_xmit *hwxmits;
112187 u8 hwxmit_entry;
112188
112189 #ifdef CONFIG_USB_HCI
112190 _sema tx_retevt;//all tx return event;
112191 u8 txirp_cnt;//
112192 -
112193 +
112194 #ifdef PLATFORM_OS_CE
112195 USB_TRANSFER usb_transfer_write_port;
112196 // USB_TRANSFER usb_transfer_write_mem;
112197 @@ -562,33 +641,20 @@ struct xmit_priv {
112198 #ifdef PLATFORM_LINUX
112199 struct tasklet_struct xmit_tasklet;
112200 #endif
112201 +#ifdef PLATFORM_FREEBSD
112202 + struct task xmit_tasklet;
112203 +#endif
112204 //per AC pending irp
112205 int beq_cnt;
112206 int bkq_cnt;
112207 int viq_cnt;
112208 int voq_cnt;
112209 -
112210 -#endif
112211 -
112212 -#ifdef CONFIG_SDIO_HCI
112213 - u8 free_pg[8];
112214 - u8 public_pgsz;
112215 - u8 required_pgsz;
112216 - u8 used_pgsz;
112217 - u8 init_pgsz;
112218 -#ifdef PLATFORM_OS_XP
112219 - PMDL prd_freesz_mdl[2];
112220 - u8 brd_freesz_pending[2];
112221 - PIRP prd_freesz_irp[2];
112222 - PSDBUS_REQUEST_PACKET prd_freesz_sdrp[2];
112223 - u8 rd_freesz_irp_idx;
112224 -#endif
112225
112226 #endif
112227
112228 #ifdef CONFIG_PCI_HCI
112229 // Tx
112230 - struct rtw_tx_ring tx_ring[PCI_MAX_TX_QUEUE_COUNT];
112231 + struct rtw_tx_ring tx_ring[PCI_MAX_TX_QUEUE_COUNT];
112232 int txringcount[PCI_MAX_TX_QUEUE_COUNT];
112233 #ifdef PLATFORM_LINUX
112234 struct tasklet_struct xmit_tasklet;
112235 @@ -596,18 +662,24 @@ struct xmit_priv {
112236 #endif
112237
112238 _queue free_xmitbuf_queue;
112239 - _queue pending_xmitbuf_queue; // unused??
112240 + _queue pending_xmitbuf_queue;
112241 u8 *pallocated_xmitbuf;
112242 u8 *pxmitbuf;
112243 uint free_xmitbuf_cnt;
112244 -
112245 +
112246 _queue free_xmit_extbuf_queue;
112247 u8 *pallocated_xmit_extbuf;
112248 u8 *pxmit_extbuf;
112249 uint free_xmit_extbuf_cnt;
112250
112251 u16 nqos_ssn;
112252 - ATOMIC_T HwRdyXmitData; // driver should wait hw setting done for join event callback, only for Data Frame. 1:done 0:not yet.
112253 +
112254 +#ifdef CONFIG_XMIT_ACK
112255 + int ack_tx;
112256 + _mutex ack_tx_mutex;
112257 + struct submit_ctx ack_tx_ops;
112258 +#endif
112259 + _lock lock_sctx;
112260 };
112261
112262 extern struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv);
112263 @@ -622,6 +694,8 @@ extern s32 rtw_make_wlanhdr(_adapter *padapter, u8 *hdr, struct pkt_attrib *patt
112264 extern s32 rtw_put_snap(u8 *data, u16 h_proto);
112265
112266 extern struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv);
112267 +struct xmit_frame *rtw_alloc_xmitframe_ext(struct xmit_priv *pxmitpriv);
112268 +struct xmit_frame *rtw_alloc_xmitframe_once(struct xmit_priv *pxmitpriv);
112269 extern s32 rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe);
112270 extern void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, _queue *pframequeue);
112271 struct tx_servq *rtw_get_sta_pending(_adapter *padapter, struct sta_info *psta, sint up, u8 *ac);
112272 @@ -630,15 +704,15 @@ extern struct xmit_frame* rtw_dequeue_xframe(struct xmit_priv *pxmitpriv, struct
112273
112274 extern s32 rtw_xmit_classifier(_adapter *padapter, struct xmit_frame *pxmitframe);
112275 extern thread_return rtw_xmit_thread(thread_context context);
112276 +extern u32 rtw_calculate_wlan_pkt_size_by_attribue(struct pkt_attrib *pattrib);
112277 +#define rtw_wlan_pkt_size(f) rtw_calculate_wlan_pkt_size_by_attribue(&f->attrib)
112278 extern s32 rtw_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxmitframe);
112279 +#ifdef CONFIG_IEEE80211W
112280 +extern s32 rtw_mgmt_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxmitframe);
112281 +#endif //CONFIG_IEEE80211W
112282 #ifdef CONFIG_TDLS
112283 -extern void rtw_tdls_dis_rsp_fr(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog);
112284 -extern s32 rtw_xmit_tdls_coalesce(_adapter *padapter, struct xmit_frame *pxmitframe, u8 action);
112285 -void rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe);
112286 -#endif
112287 -#ifdef CONFIG_IOL
112288 -void rtw_dump_xframe_sync(_adapter *padapter, struct xmit_frame *pxmitframe);
112289 -#endif
112290 +s32 rtw_xmit_tdls_coalesce(_adapter *padapter, struct xmit_frame *pxmitframe, u8 action);
112291 +#endif //CONFIG_TDLS
112292 s32 _rtw_init_hw_txqueue(struct hw_txqueue* phw_txqueue, u8 ac_tag);
112293 void _rtw_init_sta_xmit_priv(struct sta_xmit_priv *psta_xmitpriv);
112294
112295 @@ -655,20 +729,26 @@ void _rtw_free_xmit_priv (struct xmit_priv *pxmitpriv);
112296 void rtw_alloc_hwxmits(_adapter *padapter);
112297 void rtw_free_hwxmits(_adapter *padapter);
112298
112299 -s32 rtw_free_xmitframe_ex(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe);
112300
112301 s32 rtw_xmit(_adapter *padapter, _pkt **pkt);
112302
112303 -#ifdef CONFIG_TDLS
112304 -sint xmitframe_enqueue_for_tdls_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe);
112305 -#endif
112306 -
112307 -#ifdef CONFIG_AP_MODE
112308 +#if defined(CONFIG_AP_MODE) || defined(CONFIG_TDLS)
112309 sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe);
112310 void stop_sta_xmit(_adapter *padapter, struct sta_info *psta);
112311 void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta);
112312 void xmit_delivery_enabled_frames(_adapter *padapter, struct sta_info *psta);
112313 #endif
112314
112315 +u8 qos_acm(u8 acm_mask, u8 priority);
112316 +
112317 +#ifdef CONFIG_XMIT_ACK
112318 +int rtw_ack_tx_wait(struct xmit_priv *pxmitpriv, u32 timeout_ms);
112319 +void rtw_ack_tx_done(struct xmit_priv *pxmitpriv, int status);
112320 +#endif //CONFIG_XMIT_ACK
112321 +
112322 +
112323 +//include after declaring struct xmit_buf, in order to avoid warning
112324 +#include <xmit_osdep.h>
112325 +
112326 #endif //_RTL871X_XMIT_H_
112327
112328 diff --git a/drivers/net/wireless/rtl8192cu/include/sdio_hal.h b/drivers/net/wireless/rtl8192cu/include/sdio_hal.h
112329 deleted file mode 100644
112330 index 51139bb..0000000
112331 --- a/drivers/net/wireless/rtl8192cu/include/sdio_hal.h
112332 +++ /dev/null
112333 @@ -1,34 +0,0 @@
112334 -/******************************************************************************
112335 - *
112336 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
112337 - *
112338 - * This program is free software; you can redistribute it and/or modify it
112339 - * under the terms of version 2 of the GNU General Public License as
112340 - * published by the Free Software Foundation.
112341 - *
112342 - * This program is distributed in the hope that it will be useful, but WITHOUT
112343 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
112344 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
112345 - * more details.
112346 - *
112347 - * You should have received a copy of the GNU General Public License along with
112348 - * this program; if not, write to the Free Software Foundation, Inc.,
112349 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112350 - *
112351 - *
112352 -
112353 -******************************************************************************/
112354 -#ifndef __SDIO_HAL_H__
112355 -
112356 -#define __SDIO_HAL_H__
112357 -
112358 -extern u8 sd_hal_bus_init(_adapter * adapter);
112359 -extern u8 sd_hal_bus_deinit(_adapter * adapter);
112360 -
112361 -
112362 -u8 sd_int_isr (IN PADAPTER padapter);
112363 -void sd_int_dpc(PADAPTER padapter);
112364 -
112365 -
112366 -#endif //__SDIO_HAL_H__
112367 -
112368 diff --git a/drivers/net/wireless/rtl8192cu/include/sdio_ops.h b/drivers/net/wireless/rtl8192cu/include/sdio_ops.h
112369 deleted file mode 100644
112370 index b1e9b63..0000000
112371 --- a/drivers/net/wireless/rtl8192cu/include/sdio_ops.h
112372 +++ /dev/null
112373 @@ -1,80 +0,0 @@
112374 -/******************************************************************************
112375 - *
112376 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
112377 - *
112378 - * This program is free software; you can redistribute it and/or modify it
112379 - * under the terms of version 2 of the GNU General Public License as
112380 - * published by the Free Software Foundation.
112381 - *
112382 - * This program is distributed in the hope that it will be useful, but WITHOUT
112383 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
112384 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
112385 - * more details.
112386 - *
112387 - * You should have received a copy of the GNU General Public License along with
112388 - * this program; if not, write to the Free Software Foundation, Inc.,
112389 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112390 - *
112391 - *
112392 -
112393 -******************************************************************************/
112394 -#ifndef __SDIO_OPS_H_
112395 -#define __SDIO_OPS_H_
112396 -
112397 -#include <drv_conf.h>
112398 -#include <osdep_service.h>
112399 -#include <drv_types.h>
112400 -#include <osdep_intf.h>
112401 -
112402 -#ifdef PLATFORM_LINUX
112403 -#include <sdio_ops_linux.h>
112404 -#endif
112405 -
112406 -
112407 -
112408 -#ifdef PLATFORM_WINDOWS
112409 -
112410 -#ifdef PLATFORM_OS_XP
112411 -#include <sdio_ops_xp.h>
112412 -struct async_context
112413 -{
112414 - PMDL pmdl;
112415 - PSDBUS_REQUEST_PACKET sdrp;
112416 - unsigned char* r_buf;
112417 - unsigned char* padapter;
112418 -};
112419 -#endif
112420 -#ifdef PLATFORM_OS_CE
112421 -#include <sdio_ops_ce.h>
112422 -#endif
112423 -#endif
112424 -
112425 -
112426 -
112427 -extern void sdio_set_intf_option(u32 *poption);
112428 -
112429 -extern void sdio_set_intf_funs(struct intf_hdl *pintf_hdl);
112430 -
112431 -extern uint sdio_init_intf_priv(struct intf_priv *pintfpriv);
112432 -
112433 -extern void sdio_unload_intf_priv(struct intf_priv *pintfpriv);
112434 -
112435 -extern void sdio_intf_hdl_init(u8 *priv);
112436 -
112437 -extern void sdio_intf_hdl_unload(u8 *priv);
112438 -
112439 -extern void sdio_intf_hdl_open(u8 *priv);
112440 -
112441 -extern void sdio_intf_hdl_close(u8 *priv);
112442 -
112443 -extern void sdio_set_intf_ops(struct _io_ops *pops);
112444 -
112445 -//extern void sdio_set_intf_callbacks(struct _io_callbacks *pcallbacks);
112446 -extern void sdio_func1cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem);
112447 -extern void sdio_func1cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem);
112448 -
112449 -extern uint __inline _cvrt2ftaddr(const u32 addr, u32 *pftaddr) ;
112450 -
112451 -
112452 -#endif
112453 -
112454 diff --git a/drivers/net/wireless/rtl8192cu/include/sdio_ops_ce.h b/drivers/net/wireless/rtl8192cu/include/sdio_ops_ce.h
112455 deleted file mode 100644
112456 index 81687c9..0000000
112457 --- a/drivers/net/wireless/rtl8192cu/include/sdio_ops_ce.h
112458 +++ /dev/null
112459 @@ -1,56 +0,0 @@
112460 -/******************************************************************************
112461 - *
112462 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
112463 - *
112464 - * This program is free software; you can redistribute it and/or modify it
112465 - * under the terms of version 2 of the GNU General Public License as
112466 - * published by the Free Software Foundation.
112467 - *
112468 - * This program is distributed in the hope that it will be useful, but WITHOUT
112469 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
112470 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
112471 - * more details.
112472 - *
112473 - * You should have received a copy of the GNU General Public License along with
112474 - * this program; if not, write to the Free Software Foundation, Inc.,
112475 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112476 - *
112477 - *
112478 -
112479 -******************************************************************************/
112480 -#ifndef _SDIO_OPS_WINCE_H_
112481 -#define _SDIO_OPS_WINCE_H_
112482 -
112483 -#include <drv_conf.h>
112484 -#include <osdep_service.h>
112485 -#include <drv_types.h>
112486 -#include <osdep_intf.h>
112487 -
112488 -
112489 -#ifdef PLATFORM_OS_CE
112490 -
112491 -
112492 -extern u8 sdbus_cmd52r_ce(struct intf_priv *pintfpriv, u32 addr);
112493 -
112494 -
112495 -extern void sdbus_cmd52w_ce(struct intf_priv *pintfpriv, u32 addr,u8 val8);
112496 -
112497 -
112498 -uint sdbus_read_blocks_to_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
112499 -
112500 -extern uint sdbus_read_bytes_to_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
112501 -
112502 -
112503 -extern uint sdbus_write_blocks_from_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf,u8 async);
112504 -
112505 -extern uint sdbus_write_bytes_from_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
112506 -extern u8 sdbus_func1cmd52r_ce(struct intf_priv *pintfpriv, u32 addr);
112507 -extern void sdbus_func1cmd52w_ce(struct intf_priv *pintfpriv, u32 addr, u8 val8);
112508 -extern uint sdbus_read_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
112509 -extern uint sdbus_write_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
112510 -extern void sdio_read_int(_adapter *padapter, u32 addr,u8 sz,void *pdata);
112511 -
112512 -#endif
112513 -
112514 -#endif
112515 -
112516 diff --git a/drivers/net/wireless/rtl8192cu/include/sdio_ops_linux.h b/drivers/net/wireless/rtl8192cu/include/sdio_ops_linux.h
112517 deleted file mode 100644
112518 index c58ab08..0000000
112519 --- a/drivers/net/wireless/rtl8192cu/include/sdio_ops_linux.h
112520 +++ /dev/null
112521 @@ -1,55 +0,0 @@
112522 -/******************************************************************************
112523 - *
112524 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
112525 - *
112526 - * This program is free software; you can redistribute it and/or modify it
112527 - * under the terms of version 2 of the GNU General Public License as
112528 - * published by the Free Software Foundation.
112529 - *
112530 - * This program is distributed in the hope that it will be useful, but WITHOUT
112531 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
112532 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
112533 - * more details.
112534 - *
112535 - * You should have received a copy of the GNU General Public License along with
112536 - * this program; if not, write to the Free Software Foundation, Inc.,
112537 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112538 - *
112539 - *
112540 -
112541 -******************************************************************************/
112542 -#ifndef _SDIO_OPS_LINUX_H_
112543 -#define _SDIO_OPS_LINUX_H_
112544 -
112545 -#include <drv_conf.h>
112546 -#include <osdep_service.h>
112547 -#include <drv_types.h>
112548 -#include <osdep_intf.h>
112549 -
112550 -
112551 -#ifdef PLATFORM_LINUX
112552 -
112553 -
112554 -extern u8 sdbus_cmd52r(struct intf_priv *pintfpriv, u32 addr);
112555 -
112556 -
112557 -extern void sdbus_cmd52w(struct intf_priv *pintfpriv, u32 addr,u8 val8);
112558 -extern u8 sdbus_direct_read8(struct intf_priv *pintfpriv, u32 addr);
112559 -extern void sdbus_direct_write8(struct intf_priv *pintfpriv, u32 addr, u8 val8);
112560 -
112561 -extern uint sdbus_read_bytes_to_recvbuf(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
112562 -extern uint sdbus_read_blocks_to_recvbuf(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
112563 -
112564 -
112565 -extern uint sdbus_write_blocks_from_xmitbuf(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf,u8 async);
112566 -
112567 -extern uint sdbus_write_bytes_from_xmitbuf(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
112568 -
112569 -
112570 -extern uint sdbus_read_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
112571 -extern uint sdbus_write_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
112572 -extern void sdio_read_int(_adapter *padapter, u32 addr,u8 sz,void *pdata);
112573 -#endif
112574 -
112575 -#endif
112576 -
112577 diff --git a/drivers/net/wireless/rtl8192cu/include/sdio_ops_xp.h b/drivers/net/wireless/rtl8192cu/include/sdio_ops_xp.h
112578 deleted file mode 100644
112579 index 3569611..0000000
112580 --- a/drivers/net/wireless/rtl8192cu/include/sdio_ops_xp.h
112581 +++ /dev/null
112582 @@ -1,56 +0,0 @@
112583 -/******************************************************************************
112584 - *
112585 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
112586 - *
112587 - * This program is free software; you can redistribute it and/or modify it
112588 - * under the terms of version 2 of the GNU General Public License as
112589 - * published by the Free Software Foundation.
112590 - *
112591 - * This program is distributed in the hope that it will be useful, but WITHOUT
112592 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
112593 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
112594 - * more details.
112595 - *
112596 - * You should have received a copy of the GNU General Public License along with
112597 - * this program; if not, write to the Free Software Foundation, Inc.,
112598 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112599 - *
112600 - *
112601 -
112602 -******************************************************************************/
112603 -#ifndef _SDIO_OPS_XP_H_
112604 -#define _SDIO_OPS_XP_H_
112605 -
112606 -#include <drv_conf.h>
112607 -#include <osdep_service.h>
112608 -#include <drv_types.h>
112609 -#include <osdep_intf.h>
112610 -
112611 -
112612 -#ifdef PLATFORM_OS_XP
112613 -
112614 -
112615 -extern u8 sdbus_cmd52r_xp(struct intf_priv *pintfpriv, u32 addr);
112616 -
112617 -
112618 -extern void sdbus_cmd52w_xp(struct intf_priv *pintfpriv, u32 addr,u8 val8);
112619 -
112620 -
112621 -uint sdbus_read_blocks_to_membuf_xp(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
112622 -
112623 -extern uint sdbus_read_bytes_to_membuf_xp(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
112624 -
112625 -
112626 -extern uint sdbus_write_blocks_from_membuf_xp(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf,u8 async);
112627 -
112628 -extern uint sdbus_write_bytes_from_membuf_xp(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
112629 -extern u8 sdbus_func1cmd52r_xp(struct intf_priv *pintfpriv, u32 addr);
112630 -extern void sdbus_func1cmd52w_xp(struct intf_priv *pintfpriv, u32 addr, u8 val8);
112631 -extern uint sdbus_read_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
112632 -extern uint sdbus_write_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
112633 -extern void sdio_read_int(_adapter *padapter, u32 addr,u8 sz,void *pdata);
112634 -
112635 -#endif
112636 -
112637 -#endif
112638 -
112639 diff --git a/drivers/net/wireless/rtl8192cu/include/sdio_osintf.h b/drivers/net/wireless/rtl8192cu/include/sdio_osintf.h
112640 deleted file mode 100644
112641 index 099262b..0000000
112642 --- a/drivers/net/wireless/rtl8192cu/include/sdio_osintf.h
112643 +++ /dev/null
112644 @@ -1,48 +0,0 @@
112645 -/******************************************************************************
112646 - *
112647 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
112648 - *
112649 - * This program is free software; you can redistribute it and/or modify it
112650 - * under the terms of version 2 of the GNU General Public License as
112651 - * published by the Free Software Foundation.
112652 - *
112653 - * This program is distributed in the hope that it will be useful, but WITHOUT
112654 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
112655 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
112656 - * more details.
112657 - *
112658 - * You should have received a copy of the GNU General Public License along with
112659 - * this program; if not, write to the Free Software Foundation, Inc.,
112660 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112661 - *
112662 - *
112663 -
112664 -******************************************************************************/
112665 -#ifndef __SDIO_OSINTF_H
112666 -#define __SDIO_OSINTF_H
112667 -
112668 -
112669 -#include <drv_conf.h>
112670 -#include <osdep_service.h>
112671 -#include <drv_types.h>
112672 -
112673 -
112674 -extern unsigned int sd_dvobj_init(_adapter * adapter);
112675 -extern void sd_dvobj_deinit(_adapter * adapter);
112676 -
112677 -void rtl871x_intf_stop(_adapter *padapter);
112678 -
112679 -u8 sd_hal_bus_init(_adapter * padapter);
112680 -u8 sd_hal_bus_deinit(_adapter * padapter);
112681 -void update_xmit_hw_res(_adapter * padapter);
112682 -void sd_c2h_hdl( PADAPTER padapter);
112683 -
112684 -#ifdef PLATFORM_OS_CE
112685 -extern NDIS_STATUS ce_sd_get_dev_hdl(_adapter *padapter );
112686 -SD_API_STATUS
112687 -ce_sd_int_callback(SD_DEVICE_HANDLE hDevice, _adapter* padapter);
112688 -extern void sd_setup_irs(_adapter *padapter);
112689 -#endif
112690 -
112691 -#endif
112692 -
112693 diff --git a/drivers/net/wireless/rtl8192cu/include/sta_info.h b/drivers/net/wireless/rtl8192cu/include/sta_info.h
112694 index 8f01f21..75763db 100644
112695 --- a/drivers/net/wireless/rtl8192cu/include/sta_info.h
112696 +++ b/drivers/net/wireless/rtl8192cu/include/sta_info.h
112697 @@ -15,8 +15,8 @@
112698 * this program; if not, write to the Free Software Foundation, Inc.,
112699 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112700 *
112701 - *
112702 -******************************************************************************/
112703 + *
112704 + ******************************************************************************/
112705 #ifndef __STA_INFO_H_
112706 #define __STA_INFO_H_
112707
112708 @@ -26,13 +26,8 @@
112709 #include <wifi.h>
112710
112711 #define IBSS_START_MAC_ID 2
112712 -#ifdef SUPPORT_64_STA
112713 -#define NUM_STA 64
112714 -#else
112715 #define NUM_STA 32
112716 -#endif
112717 -#define FW_CTRL_MACID 32
112718 -#define NUM_ACL 64
112719 +#define NUM_ACL 16
112720
112721
112722 //if mode ==0, then the sta is allowed once the addr is hit.
112723 @@ -40,27 +35,44 @@
112724 struct rtw_wlan_acl_node {
112725 _list list;
112726 u8 addr[ETH_ALEN];
112727 - u8 mode;
112728 + u8 valid;
112729 };
112730
112731 +//mode=0, disable
112732 +//mode=1, accept unless in deny list
112733 +//mode=2, deny unless in accept list
112734 struct wlan_acl_pool {
112735 - struct rtw_wlan_acl_node aclnode[NUM_ACL];
112736 + int mode;
112737 + int num;
112738 + struct rtw_wlan_acl_node aclnode[NUM_ACL];
112739 + _queue acl_node_q;
112740 };
112741
112742 typedef struct _RSSI_STA{
112743 - int UndecoratedSmoothedPWDB;
112744 - int UndecoratedSmoothedCCK;
112745 + s32 UndecoratedSmoothedPWDB;
112746 + s32 UndecoratedSmoothedCCK;
112747 + s32 UndecoratedSmoothedOFDM;
112748 + u64 PacketMap;
112749 + u8 ValidBit;
112750 }RSSI_STA, *PRSSI_STA;
112751
112752 struct stainfo_stats {
112753
112754 - //u64 rx_pkts;
112755 u64 rx_mgnt_pkts;
112756 + u64 rx_beacon_pkts;
112757 + u64 rx_probereq_pkts;
112758 + u64 rx_probersp_pkts;
112759 + u64 rx_probersp_bm_pkts;
112760 + u64 rx_probersp_uo_pkts;
112761 u64 rx_ctrl_pkts;
112762 u64 rx_data_pkts;
112763
112764 - //u64 last_rx_pkts;
112765 u64 last_rx_mgnt_pkts;
112766 + u64 last_rx_beacon_pkts;
112767 + u64 last_rx_probereq_pkts;
112768 + u64 last_rx_probersp_pkts;
112769 + u64 last_rx_probersp_bm_pkts;
112770 + u64 last_rx_probersp_uo_pkts;
112771 u64 last_rx_ctrl_pkts;
112772 u64 last_rx_data_pkts;
112773
112774 @@ -78,7 +90,7 @@ struct TDLS_PeerKey {
112775 u8 kck[16]; /* TPK-KCK */
112776 u8 tk[16]; /* TPK-TK; only CCMP will be used */
112777 } ;
112778 -#endif
112779 +#endif //CONFIG_TDLS
112780
112781 struct sta_info {
112782
112783 @@ -107,6 +119,9 @@ struct sta_info {
112784 union Keytype dot11tkiprxmickey;
112785 union Keytype dot118021x_UncstKey;
112786 union pn48 dot11txpn; // PN48 used for Unicast xmit.
112787 +#ifdef CONFIG_IEEE80211W
112788 + union pn48 dot11wtxpn; // PN48 used for Unicast mgmt xmit.
112789 +#endif //CONFIG_IEEE80211W
112790 union pn48 dot11rxpn; // PN48 used for Unicast recv.
112791
112792
112793 @@ -133,7 +148,6 @@ struct sta_info {
112794 _timer TPK_timer;
112795 struct TDLS_PeerKey tpk;
112796 _adapter *padapter;
112797 - u8 cam_entry;
112798 u16 stat_code;
112799 u8 off_ch;
112800 u16 ch_switch_time;
112801 @@ -148,7 +162,7 @@ struct sta_info {
112802 _timer alive_timer2;
112803 u8 timer_flag;
112804 u8 alive_count;
112805 -#endif
112806 +#endif //CONFIG_TDLS
112807
112808 //for A-MPDU TX, ADDBA timeout check
112809 _timer addba_retry_timer;
112810 @@ -240,6 +254,8 @@ struct sta_info {
112811 u8 under_exist_checking;
112812 #endif // CONFIG_TX_MCAST2UNI
112813
112814 + u8 keep_alive_trycnt;
112815 +
112816 #endif // CONFIG_AP_MODE
112817
112818 #ifdef CONFIG_IOCTL_CFG80211
112819 @@ -250,7 +266,8 @@ struct sta_info {
112820 //for DM
112821 RSSI_STA rssi_stat;
112822
112823 -
112824 + /* To store the sequence number of received management frame */
112825 + u16 RxMgmtFrameSeqNum;
112826 };
112827
112828 #define sta_rx_pkts(sta) \
112829 @@ -263,9 +280,56 @@ struct sta_info {
112830 + sta->sta_stats.last_rx_ctrl_pkts \
112831 + sta->sta_stats.last_rx_data_pkts)
112832
112833 +#define sta_rx_data_pkts(sta) \
112834 + (sta->sta_stats.rx_data_pkts)
112835 +
112836 +#define sta_last_rx_data_pkts(sta) \
112837 + (sta->sta_stats.last_rx_data_pkts)
112838 +
112839 +#define sta_rx_mgnt_pkts(sta) \
112840 + (sta->sta_stats.rx_mgnt_pkts)
112841 +
112842 +#define sta_last_rx_mgnt_pkts(sta) \
112843 + (sta->sta_stats.last_rx_mgnt_pkts)
112844 +
112845 +#define sta_rx_beacon_pkts(sta) \
112846 + (sta->sta_stats.rx_beacon_pkts)
112847 +
112848 +#define sta_last_rx_beacon_pkts(sta) \
112849 + (sta->sta_stats.last_rx_beacon_pkts)
112850 +
112851 +#define sta_rx_probereq_pkts(sta) \
112852 + (sta->sta_stats.rx_probereq_pkts)
112853 +
112854 +#define sta_last_rx_probereq_pkts(sta) \
112855 + (sta->sta_stats.last_rx_probereq_pkts)
112856 +
112857 +#define sta_rx_probersp_pkts(sta) \
112858 + (sta->sta_stats.rx_probersp_pkts)
112859 +
112860 +#define sta_last_rx_probersp_pkts(sta) \
112861 + (sta->sta_stats.last_rx_probersp_pkts)
112862 +
112863 +#define sta_rx_probersp_bm_pkts(sta) \
112864 + (sta->sta_stats.rx_probersp_bm_pkts)
112865 +
112866 +#define sta_last_rx_probersp_bm_pkts(sta) \
112867 + (sta->sta_stats.last_rx_probersp_bm_pkts)
112868 +
112869 +#define sta_rx_probersp_uo_pkts(sta) \
112870 + (sta->sta_stats.rx_probersp_uo_pkts)
112871 +
112872 +#define sta_last_rx_probersp_uo_pkts(sta) \
112873 + (sta->sta_stats.last_rx_probersp_uo_pkts)
112874 +
112875 #define sta_update_last_rx_pkts(sta) \
112876 do { \
112877 sta->sta_stats.last_rx_mgnt_pkts = sta->sta_stats.rx_mgnt_pkts; \
112878 + sta->sta_stats.last_rx_beacon_pkts = sta->sta_stats.rx_beacon_pkts; \
112879 + sta->sta_stats.last_rx_probereq_pkts = sta->sta_stats.rx_probereq_pkts; \
112880 + sta->sta_stats.last_rx_probersp_pkts = sta->sta_stats.rx_probersp_pkts; \
112881 + sta->sta_stats.last_rx_probersp_bm_pkts = sta->sta_stats.rx_probersp_bm_pkts; \
112882 + sta->sta_stats.last_rx_probersp_uo_pkts = sta->sta_stats.rx_probersp_uo_pkts; \
112883 sta->sta_stats.last_rx_ctrl_pkts = sta->sta_stats.rx_ctrl_pkts; \
112884 sta->sta_stats.last_rx_data_pkts = sta->sta_stats.rx_data_pkts; \
112885 } while(0)
112886 @@ -280,6 +344,11 @@ struct sta_info {
112887 , sta->sta_stats.last_rx_ctrl_pkts \
112888 , sta->sta_stats.last_rx_data_pkts
112889
112890 +#define STA_RX_PKTS_DIFF_ARG(sta) \
112891 + sta->sta_stats.rx_mgnt_pkts - sta->sta_stats.last_rx_mgnt_pkts \
112892 + , sta->sta_stats.rx_ctrl_pkts - sta->sta_stats.last_rx_ctrl_pkts \
112893 + , sta->sta_stats.rx_data_pkts -sta->sta_stats.last_rx_data_pkts
112894 +
112895 #define STA_PKTS_FMT "(m:%llu, c:%llu, d:%llu)"
112896
112897 struct sta_priv {
112898 @@ -302,6 +371,8 @@ struct sta_priv {
112899 _list auth_list;
112900 _lock asoc_list_lock;
112901 _lock auth_list_lock;
112902 + u8 asoc_list_cnt;
112903 + u8 auth_list_cnt;
112904
112905 unsigned int auth_to; //sec, time to expire in authenticating.
112906 unsigned int assoc_to; //sec, time to expire before associating.
112907 @@ -317,6 +388,8 @@ struct sta_priv {
112908 u16 tim_bitmap;//only support 15 stations, aid=0~15 mapping bit0~bit15
112909
112910 u16 max_num_sta;
112911 +
112912 + struct wlan_acl_pool acl_list;
112913 #endif
112914
112915 };
112916 @@ -342,12 +415,18 @@ __inline static u32 wifi_mac_hash(u8 *mac)
112917
112918 extern u32 _rtw_init_sta_priv(struct sta_priv *pstapriv);
112919 extern u32 _rtw_free_sta_priv(struct sta_priv *pstapriv);
112920 +
112921 +#define stainfo_offset_valid(offset) (offset < NUM_STA && offset >= 0)
112922 +int rtw_stainfo_offset(struct sta_priv *stapriv, struct sta_info *sta);
112923 +struct sta_info *rtw_get_stainfo_by_offset(struct sta_priv *stapriv, int offset);
112924 +
112925 extern struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr);
112926 extern u32 rtw_free_stainfo(_adapter *padapter , struct sta_info *psta);
112927 extern void rtw_free_all_stainfo(_adapter *padapter);
112928 extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr);
112929 extern u32 rtw_init_bcmc_stainfo(_adapter* padapter);
112930 extern struct sta_info* rtw_get_bcmc_stainfo(_adapter* padapter);
112931 -extern u8 rtw_access_ctrl(struct wlan_acl_pool* pacl_list, u8 * mac_addr);
112932 +extern u8 rtw_access_ctrl(_adapter *padapter, u8 *mac_addr);
112933
112934 #endif //_STA_INFO_H_
112935 +
112936 diff --git a/drivers/net/wireless/rtl8192cu/include/usb_hal.h b/drivers/net/wireless/rtl8192cu/include/usb_hal.h
112937 index 9cd21f3..d765b82 100644
112938 --- a/drivers/net/wireless/rtl8192cu/include/usb_hal.h
112939 +++ b/drivers/net/wireless/rtl8192cu/include/usb_hal.h
112940 @@ -16,8 +16,7 @@
112941 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112942 *
112943 *
112944 -
112945 -******************************************************************************/
112946 + ******************************************************************************/
112947 #ifndef __USB_HAL_H__
112948 #define __USB_HAL_H__
112949
112950 @@ -28,5 +27,11 @@ void rtl8192du_set_hal_ops(_adapter * padapter);
112951 #ifdef CONFIG_INTEL_PROXIM
112952 extern _adapter *rtw_usb_get_sw_pointer(void);
112953 #endif //CONFIG_INTEL_PROXIM
112954 +#ifdef CONFIG_WOWLAN
112955 +#ifdef CONFIG_WOWLAN_MANUAL
112956 +extern int rtw_suspend_toshiba(PADAPTER Adapter);
112957 +extern int rtw_resume_toshiba(PADAPTER Adapter);
112958 +#endif // CONFIG_WOWLAN_MANUAL
112959 +#endif //CONFIG_WOWLAN
112960 #endif //__USB_HAL_H__
112961
112962 diff --git a/drivers/net/wireless/rtl8192cu/include/usb_ops.h b/drivers/net/wireless/rtl8192cu/include/usb_ops.h
112963 index 3868bc0..8bbec2d 100644
112964 --- a/drivers/net/wireless/rtl8192cu/include/usb_ops.h
112965 +++ b/drivers/net/wireless/rtl8192cu/include/usb_ops.h
112966 @@ -16,8 +16,7 @@
112967 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
112968 *
112969 *
112970 -
112971 -******************************************************************************/
112972 + ******************************************************************************/
112973 #ifndef __USB_OPS_H_
112974 #define __USB_OPS_H_
112975
112976 @@ -53,10 +52,12 @@ enum{
112977 usb_bulk_msg((usb_dev), (pipe), (data), (len), (actual_length), \
112978 ((timeout_ms) == 0) ||((timeout_ms)*HZ/1000>0)?((timeout_ms)*HZ/1000):1)
112979 #endif
112980 +#include <usb_ops_linux.h>
112981 #endif //PLATFORM_LINUX
112982
112983 #ifdef CONFIG_RTL8192C
112984 void rtl8192cu_set_intf_ops(struct _io_ops *pops);
112985 +#define usb_set_intf_ops rtl8192cu_set_intf_ops
112986
112987 void rtl8192cu_recv_tasklet(void *priv);
112988
112989 @@ -65,8 +66,16 @@ void rtl8192cu_xmit_tasklet(void *priv);
112990
112991 #ifdef CONFIG_RTL8192D
112992 void rtl8192du_set_intf_ops(struct _io_ops *pops);
112993 +#define usb_set_intf_ops rtl8192du_set_intf_ops
112994
112995 +#ifndef PLATFORM_FREEBSD
112996 void rtl8192du_recv_tasklet(void *priv);
112997 +#else // PLATFORM_FREEBSD
112998 +void rtl8192du_recv_tasklet(void *priv, int npending);
112999 +#ifdef CONFIG_RX_INDICATE_QUEUE
113000 +void rtw_rx_indicate_tasklet(void *priv, int npending);
113001 +#endif // CONFIG_RX_INDICATE_QUEUE
113002 +#endif // PLATFORM_FREEBSD
113003
113004 void rtl8192du_xmit_tasklet(void *priv);
113005 #endif
113006 @@ -76,15 +85,15 @@ void rtl8192du_xmit_tasklet(void *priv);
113007 * @return _TRUE:
113008 * @return _FALSE:
113009 */
113010 -static inline int rtw_inc_and_chk_continual_urb_error(struct dvobj_priv *dvobjpriv)
113011 +static inline int rtw_inc_and_chk_continual_urb_error(struct dvobj_priv *dvobj)
113012 {
113013 int ret = _FALSE;
113014 int value;
113015 - if( (value=ATOMIC_INC_RETURN(&dvobjpriv->continual_urb_error)) > MAX_CONTINUAL_URB_ERR) {
113016 - DBG_871X("[dvobjpriv:%p][ERROR] continual_urb_error:%d > %d\n", dvobjpriv, value, MAX_CONTINUAL_URB_ERR);
113017 + if( (value=ATOMIC_INC_RETURN(&dvobj->continual_urb_error)) > MAX_CONTINUAL_URB_ERR) {
113018 + DBG_871X("[dvobj:%p][ERROR] continual_urb_error:%d > %d\n", dvobj, value, MAX_CONTINUAL_URB_ERR);
113019 ret = _TRUE;
113020 } else {
113021 - //DBG_871X("[dvobjpriv:%p] continual_urb_error:%d\n", dvobjpriv, value);
113022 + //DBG_871X("[dvobj:%p] continual_urb_error:%d\n", dvobj, value);
113023 }
113024 return ret;
113025 }
113026 @@ -92,9 +101,10 @@ static inline int rtw_inc_and_chk_continual_urb_error(struct dvobj_priv *dvobjpr
113027 /*
113028 * Set the continual_urb_error of this @param dvobjprive to 0
113029 */
113030 -static inline void rtw_reset_continual_urb_error(struct dvobj_priv *dvobjpriv)
113031 +static inline void rtw_reset_continual_urb_error(struct dvobj_priv *dvobj)
113032 {
113033 - ATOMIC_SET(&dvobjpriv->continual_urb_error, 0);
113034 + ATOMIC_SET(&dvobj->continual_urb_error, 0);
113035 }
113036
113037 #endif //__USB_OPS_H_
113038 +
113039 diff --git a/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h b/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h
113040 new file mode 100644
113041 index 0000000..d418ba2
113042 --- /dev/null
113043 +++ b/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h
113044 @@ -0,0 +1,63 @@
113045 +/******************************************************************************
113046 + *
113047 + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
113048 + *
113049 + * This program is free software; you can redistribute it and/or modify it
113050 + * under the terms of version 2 of the GNU General Public License as
113051 + * published by the Free Software Foundation.
113052 + *
113053 + * This program is distributed in the hope that it will be useful, but WITHOUT
113054 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
113055 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
113056 + * more details.
113057 + *
113058 + * You should have received a copy of the GNU General Public License along with
113059 + * this program; if not, write to the Free Software Foundation, Inc.,
113060 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113061 + *
113062 + *
113063 + ******************************************************************************/
113064 +#ifndef __USB_OPS_LINUX_H__
113065 +#define __USB_OPS_LINUX_H__
113066 +
113067 +#define VENDOR_CMD_MAX_DATA_LEN 254
113068 +
113069 +#define RTW_USB_CONTROL_MSG_TIMEOUT_TEST 10//ms
113070 +#define RTW_USB_CONTROL_MSG_TIMEOUT 500//ms
113071 +
113072 +#if defined(CONFIG_VENDOR_REQ_RETRY) && defined(CONFIG_USB_VENDOR_REQ_MUTEX)
113073 +/* vendor req retry should be in the situation when each vendor req is atomically submitted from others */
113074 +#define MAX_USBCTRL_VENDORREQ_TIMES 10
113075 +#else
113076 +#define MAX_USBCTRL_VENDORREQ_TIMES 1
113077 +#endif
113078 +
113079 +#define RTW_USB_BULKOUT_TIMEOUT 5000//ms
113080 +
113081 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) || (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
113082 +#define _usbctrl_vendorreq_async_callback(urb, regs) _usbctrl_vendorreq_async_callback(urb)
113083 +#define usb_bulkout_zero_complete(purb, regs) usb_bulkout_zero_complete(purb)
113084 +#define usb_write_mem_complete(purb, regs) usb_write_mem_complete(purb)
113085 +#define usb_write_port_complete(purb, regs) usb_write_port_complete(purb)
113086 +#define usb_read_port_complete(purb, regs) usb_read_port_complete(purb)
113087 +#define usb_read_interrupt_complete(purb, regs) usb_read_interrupt_complete(purb)
113088 +#endif
113089 +
113090 +#ifdef CONFIG_USB_SUPPORT_ASYNC_VDN_REQ
113091 +int usb_async_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val);
113092 +int usb_async_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val);
113093 +int usb_async_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val);
113094 +#endif /* CONFIG_USB_SUPPORT_ASYNC_VDN_REQ */
113095 +
113096 +unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr);
113097 +
113098 +void usb_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem);
113099 +void usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem);
113100 +
113101 +void usb_read_port_cancel(struct intf_hdl *pintfhdl);
113102 +
113103 +u32 usb_write_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem);
113104 +void usb_write_port_cancel(struct intf_hdl *pintfhdl);
113105 +
113106 +#endif
113107 +
113108 diff --git a/drivers/net/wireless/rtl8192cu/include/usb_osintf.h b/drivers/net/wireless/rtl8192cu/include/usb_osintf.h
113109 index 8642aa2..753013d 100644
113110 --- a/drivers/net/wireless/rtl8192cu/include/usb_osintf.h
113111 +++ b/drivers/net/wireless/rtl8192cu/include/usb_osintf.h
113112 @@ -16,8 +16,7 @@
113113 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113114 *
113115 *
113116 -
113117 -******************************************************************************/
113118 + ******************************************************************************/
113119 #ifndef __USB_OSINTF_H
113120 #define __USB_OSINTF_H
113121
113122 diff --git a/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h b/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h
113123 index 72864de..f33e982 100644
113124 --- a/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h
113125 +++ b/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h
113126 @@ -16,8 +16,7 @@
113127 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113128 *
113129 *
113130 -
113131 -******************************************************************************/
113132 + ******************************************************************************/
113133 #ifndef _USB_VENDOR_REQUEST_H_
113134 #define _USB_VENDOR_REQUEST_H_
113135
113136 diff --git a/drivers/net/wireless/rtl8192cu/include/wifi.h b/drivers/net/wireless/rtl8192cu/include/wifi.h
113137 index a80a805..0bb55bb 100644
113138 --- a/drivers/net/wireless/rtl8192cu/include/wifi.h
113139 +++ b/drivers/net/wireless/rtl8192cu/include/wifi.h
113140 @@ -16,8 +16,7 @@
113141 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113142 *
113143 *
113144 -
113145 -******************************************************************************/
113146 + ******************************************************************************/
113147 #ifndef _WIFI_H_
113148 #define _WIFI_H_
113149
113150 @@ -551,6 +550,7 @@ __inline static int IsFrameTypeCtrl(unsigned char *pframe)
113151 #define _IBSS_PARA_IE_ 6
113152 #define _COUNTRY_IE_ 7
113153 #define _CHLGETXT_IE_ 16
113154 +#define _POW_CAP_IE_ 33
113155 #define _SUPPORTED_CH_IE_ 36
113156 #define _CH_SWTICH_ANNOUNCE_ 37 //Secondary Channel Offset
113157 #define _RSN_IE_2_ 48
113158 @@ -561,6 +561,7 @@ __inline static int IsFrameTypeCtrl(unsigned char *pframe)
113159 #define _HT_CAPABILITY_IE_ 45
113160 #define _FTIE_ 55
113161 #define _TIMEOUT_ITVL_IE_ 56
113162 +#define _SRC_IE_ 59
113163 #define _HT_EXTRA_INFO_IE_ 61
113164 #define _HT_ADD_INFO_IE_ 61 //_HT_EXTRA_INFO_IE_
113165
113166 @@ -568,6 +569,9 @@ __inline static int IsFrameTypeCtrl(unsigned char *pframe)
113167 #define EID_BSSIntolerantChlReport 73
113168 #define _RIC_Descriptor_IE_ 75
113169
113170 +#ifdef CONFIG_IEEE80211W
113171 +#define _MME_IE_ 76 //802.11w Management MIC element
113172 +#endif //CONFIG_IEEE80211W
113173 #define _LINK_ID_IE_ 101
113174 #define _CH_SWITCH_TIMING_ 104
113175 #define _PTI_BUFFER_STATUS_ 106
113176 @@ -624,7 +628,10 @@ __inline static int IsFrameTypeCtrl(unsigned char *pframe)
113177 #define _WEP_104_PRIVACY_ 5
113178 #define _WEP_WPA_MIXED_PRIVACY_ 6 // WEP + WPA
113179 */
113180 -
113181 +
113182 +#ifdef CONFIG_IEEE80211W
113183 +#define _MME_IE_LENGTH_ 18
113184 +#endif //CONFIG_IEEE80211W
113185 /*-----------------------------------------------------------------------------
113186 Below is the definition for WMM
113187 ------------------------------------------------------------------------------*/
113188 @@ -654,7 +661,7 @@ __inline static int IsFrameTypeCtrl(unsigned char *pframe)
113189
113190
113191 /**
113192 - * struct ieee80211_bar - HT Block Ack Request
113193 + * struct rtw_ieee80211_bar - HT Block Ack Request
113194 *
113195 * This structure refers to "HT BlockAckReq" as
113196 * described in 802.11n draft section 7.2.1.7.1
113197 @@ -675,7 +682,9 @@ struct rtw_ieee80211_bar {
113198 #define IEEE80211_BAR_CTRL_CBMTID_COMPRESSED_BA 0x0004
113199
113200
113201 - #if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8712FW)
113202 + #if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8712FW) || defined(PLATFORM_FREEBSD)
113203 +
113204 +
113205
113206 /**
113207 * struct rtw_ieee80211_ht_cap - HT capabilities
113208 @@ -722,7 +731,7 @@ struct HT_caps_element
113209 unsigned char ASEL_caps;
113210 } HT_cap_element;
113211 unsigned char HT_cap[26];
113212 - };
113213 + }u;
113214 } __attribute__ ((packed));
113215
113216 struct HT_info_element
113217 @@ -887,7 +896,7 @@ struct ADDBA_request
113218 #define WLAN_HT_CAP_SM_PS_INVALID 2
113219 #define WLAN_HT_CAP_SM_PS_DISABLED 3
113220
113221 -#ifdef CONFIG_AP_MODE
113222 +
113223 #define OP_MODE_PURE 0
113224 #define OP_MODE_MAY_BE_LEGACY_STAS 1
113225 #define OP_MODE_20MHZ_HT_STA_ASSOCED 2
113226 @@ -914,7 +923,7 @@ struct ADDBA_request
113227 #define HT_INFO_STBC_PARAM_LSIG_TXOP_PROTECT_ALLOWED ((u16) BIT(9))
113228 #define HT_INFO_STBC_PARAM_PCO_ACTIVE ((u16) BIT(10))
113229 #define HT_INFO_STBC_PARAM_PCO_PHASE ((u16) BIT(11))
113230 -#endif
113231 +
113232
113233
113234 //#endif
113235 @@ -932,6 +941,7 @@ struct ADDBA_request
113236 #define WPS_ATTR_MODEL_NUMBER 0x1024
113237 #define WPS_ATTR_SERIAL_NUMBER 0x1042
113238 #define WPS_ATTR_PRIMARY_DEV_TYPE 0x1054
113239 +#define WPS_ATTR_SEC_DEV_TYPE_LIST 0x1055
113240 #define WPS_ATTR_DEVICE_NAME 0x1011
113241 #define WPS_ATTR_CONF_METHOD 0x1008
113242 #define WPS_ATTR_RF_BANDS 0x103C
113243 @@ -940,7 +950,7 @@ struct ADDBA_request
113244 #define WPS_ATTR_ASSOCIATION_STATE 0x1002
113245 #define WPS_ATTR_CONFIG_ERROR 0x1009
113246 #define WPS_ATTR_VENDOR_EXT 0x1049
113247 -#define WPA_ATTR_SELECTED_REGISTRAR 0x1041
113248 +#define WPS_ATTR_SELECTED_REGISTRAR 0x1041
113249
113250 // Value of WPS attribute "WPS_ATTR_DEVICE_NAME
113251 #define WPS_MAX_DEVICE_NAME_LEN 32
113252 @@ -980,12 +990,13 @@ struct ADDBA_request
113253 #define WPS_CONFIG_METHOD_PDISPLAY 0x4008
113254
113255 // Value of Category ID of WPS Primary Device Type Attribute
113256 +#define WPS_PDT_CID_DISPLAYS 0x0007
113257 #define WPS_PDT_CID_MULIT_MEDIA 0x0008
113258 -#define WPS_PDT_CID_RTK_WIDI 0x001E
113259 +#define WPS_PDT_CID_RTK_WIDI WPS_PDT_CID_MULIT_MEDIA
113260
113261 // Value of Sub Category ID of WPS Primary Device Type Attribute
113262 #define WPS_PDT_SCID_MEDIA_SERVER 0x0005
113263 -#define WPS_PDT_SCID_RTK_DMP 0x0001
113264 +#define WPS_PDT_SCID_RTK_DMP WPS_PDT_SCID_MEDIA_SERVER
113265
113266 // Value of Device Password ID
113267 #define WPS_DPID_PIN 0x0000
113268 @@ -995,6 +1006,16 @@ struct ADDBA_request
113269 #define WPS_DPID_PBC 0x0004
113270 #define WPS_DPID_REGISTRAR_SPEC 0x0005
113271
113272 +// Value of WPS RF Bands Attribute
113273 +#define WPS_RF_BANDS_2_4_GHZ 0x01
113274 +#define WPS_RF_BANDS_5_GHZ 0x02
113275 +
113276 +// Value of WPS Association State Attribute
113277 +#define WPS_ASSOC_STATE_NOT_ASSOCIATED 0x00
113278 +#define WPS_ASSOC_STATE_CONNECTION_SUCCESS 0x01
113279 +#define WPS_ASSOC_STATE_CONFIGURATION_FAILURE 0x02
113280 +#define WPS_ASSOC_STATE_ASSOCIATION_FAILURE 0x03
113281 +#define WPS_ASSOC_STATE_IP_FAILURE 0x04
113282
113283 // =====================P2P Section=====================
113284 // For P2P
113285 @@ -1038,6 +1059,12 @@ struct ADDBA_request
113286 // Value of Inviation Flags Attribute
113287 #define P2P_INVITATION_FLAGS_PERSISTENT BIT(0)
113288
113289 +#define DMP_P2P_DEVCAP_SUPPORT (P2P_DEVCAP_SERVICE_DISCOVERY | \
113290 + P2P_DEVCAP_CLIENT_DISCOVERABILITY | \
113291 + P2P_DEVCAP_CONCURRENT_OPERATION | \
113292 + P2P_DEVCAP_INVITATION_PROC)
113293 +
113294 +#define DMP_P2P_GRPCAP_SUPPORT (P2P_GRPCAP_INTRABSS)
113295
113296 // Value of Device Capability Bitmap
113297 #define P2P_DEVCAP_SERVICE_DISCOVERY BIT(0)
113298 @@ -1090,9 +1117,13 @@ struct ADDBA_request
113299 #define P2P_FINDPHASE_EX_SOCIAL_LAST P2P_FINDPHASE_EX_MAX
113300
113301 #define P2P_PROVISION_TIMEOUT 5000 // 5 seconds timeout for sending the provision discovery request
113302 +#define P2P_CONCURRENT_PROVISION_TIMEOUT 3000 // 3 seconds timeout for sending the provision discovery request under concurrent mode
113303 #define P2P_GO_NEGO_TIMEOUT 5000 // 5 seconds timeout for receiving the group negotation response
113304 +#define P2P_CONCURRENT_GO_NEGO_TIMEOUT 3000 // 3 seconds timeout for sending the negotiation request under concurrent mode
113305 #define P2P_TX_PRESCAN_TIMEOUT 100 // 100ms
113306 -
113307 +#define P2P_INVITE_TIMEOUT 5000 // 5 seconds timeout for sending the invitation request
113308 +#define P2P_CONCURRENT_INVITE_TIMEOUT 3000 // 3 seconds timeout for sending the invitation request under concurrent mode
113309 +#define P2P_RESET_SCAN_CH 15000 // 15 seconds timeout to reset the scan channel ( based on channel plan )
113310 #define P2P_MAX_INTENT 15
113311
113312 #define P2P_MAX_NOA_NUM 2
113313 @@ -1119,21 +1150,29 @@ enum P2P_ROLE {
113314 };
113315
113316 enum P2P_STATE {
113317 - P2P_STATE_NONE = 0, // P2P disable
113318 - P2P_STATE_IDLE = 1, // P2P had enabled and do nothing
113319 - P2P_STATE_LISTEN = 2, // In pure listen state
113320 - P2P_STATE_SCAN = 3, // In scan phase
113321 - P2P_STATE_FIND_PHASE_LISTEN = 4, // In the listen state of find phase
113322 - P2P_STATE_FIND_PHASE_SEARCH = 5, // In the search state of find phase
113323 - P2P_STATE_TX_PROVISION_DIS_REQ = 6, // In P2P provisioning discovery
113324 + P2P_STATE_NONE = 0, // P2P disable
113325 + P2P_STATE_IDLE = 1, // P2P had enabled and do nothing
113326 + P2P_STATE_LISTEN = 2, // In pure listen state
113327 + P2P_STATE_SCAN = 3, // In scan phase
113328 + P2P_STATE_FIND_PHASE_LISTEN = 4, // In the listen state of find phase
113329 + P2P_STATE_FIND_PHASE_SEARCH = 5, // In the search state of find phase
113330 + P2P_STATE_TX_PROVISION_DIS_REQ = 6, // In P2P provisioning discovery
113331 P2P_STATE_RX_PROVISION_DIS_RSP = 7,
113332 P2P_STATE_RX_PROVISION_DIS_REQ = 8,
113333 - P2P_STATE_GONEGO_ING = 9, // Doing the group owner negoitation handshake
113334 - P2P_STATE_GONEGO_OK = 10, // finish the group negoitation handshake with success
113335 - P2P_STATE_GONEGO_FAIL = 11, // finish the group negoitation handshake with failure
113336 - P2P_STATE_RECV_INVITE_REQ = 12, // receiving the P2P Inviation request
113337 - P2P_STATE_PROVISIONING_ING = 13, // Doing the P2P WPS
113338 - P2P_STATE_PROVISIONING_DONE = 14, // Finish the P2P WPS
113339 + P2P_STATE_GONEGO_ING = 9, // Doing the group owner negoitation handshake
113340 + P2P_STATE_GONEGO_OK = 10, // finish the group negoitation handshake with success
113341 + P2P_STATE_GONEGO_FAIL = 11, // finish the group negoitation handshake with failure
113342 + P2P_STATE_RECV_INVITE_REQ_MATCH = 12, // receiving the P2P Inviation request and match with the profile.
113343 + P2P_STATE_PROVISIONING_ING = 13, // Doing the P2P WPS
113344 + P2P_STATE_PROVISIONING_DONE = 14, // Finish the P2P WPS
113345 + P2P_STATE_TX_INVITE_REQ = 15, // Transmit the P2P Invitation request
113346 + P2P_STATE_RX_INVITE_RESP_OK = 16, // Receiving the P2P Invitation response with sucess
113347 + P2P_STATE_RECV_INVITE_REQ_DISMATCH = 17, // receiving the P2P Inviation request and dismatch with the profile.
113348 + P2P_STATE_RECV_INVITE_REQ_GO = 18, // receiving the P2P Inviation request and this wifi is GO.
113349 + P2P_STATE_RECV_INVITE_REQ_JOIN = 19, // receiving the P2P Inviation request to join an existing P2P Group.
113350 + P2P_STATE_RX_INVITE_RESP_FAIL = 20, // recveing the P2P Inviation response with failure
113351 + P2P_STATE_RX_INFOR_NOREADY = 21, // receiving p2p negoitation response with information is not available
113352 + P2P_STATE_TX_INFOR_NOREADY = 22, // sending p2p negoitation response with information is not available
113353 };
113354
113355 enum P2P_WPSINFO {
113356 @@ -1150,34 +1189,51 @@ enum P2P_PROTO_WK_ID
113357 P2P_FIND_PHASE_WK = 0,
113358 P2P_RESTORE_STATE_WK = 1,
113359 P2P_PRE_TX_PROVDISC_PROCESS_WK = 2,
113360 - P2P_PRE_TX_NEGOREQ_PROCESS_WK = 3,
113361 - P2P_RO_CH_WK = 4,
113362 + P2P_PRE_TX_NEGOREQ_PROCESS_WK = 3,
113363 + P2P_PRE_TX_INVITEREQ_PROCESS_WK = 4,
113364 + P2P_AP_P2P_CH_SWITCH_PROCESS_WK =5,
113365 + P2P_RO_CH_WK = 6,
113366 };
113367
113368 -enum P2P_PS
113369 +#ifdef CONFIG_P2P_PS
113370 +enum P2P_PS_STATE
113371 {
113372 - P2P_PS_DISABLE=0,
113373 - P2P_PS_ENABLE=1,
113374 - P2P_PS_SCAN=2,
113375 - P2P_PS_SCAN_DONE=3,
113376 - P2P_PS_ALLSTASLEEP=4, // for owner
113377 + P2P_PS_DISABLE = 0,
113378 + P2P_PS_ENABLE = 1,
113379 + P2P_PS_SCAN = 2,
113380 + P2P_PS_SCAN_DONE = 3,
113381 + P2P_PS_ALLSTASLEEP = 4, // for P2P GO
113382 };
113383
113384 +enum P2P_PS_MODE
113385 +{
113386 + P2P_PS_NONE = 0,
113387 + P2P_PS_CTWINDOW = 1,
113388 + P2P_PS_NOA = 2,
113389 + P2P_PS_MIX = 3, // CTWindow and NoA
113390 +};
113391 +#endif // CONFIG_P2P_PS
113392 +
113393 // =====================WFD Section=====================
113394 // For Wi-Fi Display
113395 #define WFD_ATTR_DEVICE_INFO 0x00
113396 #define WFD_ATTR_ASSOC_BSSID 0x01
113397 #define WFD_ATTR_COUPLED_SINK_INFO 0x06
113398 +#define WFD_ATTR_LOCAL_IP_ADDR 0x08
113399 #define WFD_ATTR_SESSION_INFO 0x09
113400 +#define WFD_ATTR_ALTER_MAC 0x0a
113401
113402 // For WFD Device Information Attribute
113403 -#define WFD_DEVINFO_SOURCE 0
113404 -#define WFD_DEVINFO_PRIARY_SINK 1
113405 -#define WFD_DEVINFO_SECARY_SINK 2
113406 -#define WFD_DEVINFO_SOURCE_PRIARY_SINK 3
113407 +#define WFD_DEVINFO_SOURCE 0x0000
113408 +#define WFD_DEVINFO_PSINK 0x0001
113409 +#define WFD_DEVINFO_SSINK 0x0002
113410 +#define WFD_DEVINFO_DUAL 0x0003
113411 +
113412 +#define WFD_DEVINFO_SESSION_AVAIL 0x0010
113413 +#define WFD_DEVINFO_WSD 0x0040
113414 +#define WFD_DEVINFO_PC_TDLS 0x0080
113415 +#define WFD_DEVINFO_HDCP_SUPPORT 0x0100
113416
113417 -#define WFD_DEVINFO_NO_COUPLED_SINK 0
113418 -#define WFD_DEVINFO_COUPLED_SINK 4
113419
113420 #ifdef CONFIG_TX_MCAST2UNI
113421 #define IP_MCAST_MAC(mac) ((mac[0]==0x01)&&(mac[1]==0x00)&&(mac[2]==0x5e))
113422 diff --git a/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h b/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h
113423 index fe555c6..1cf93dc 100644
113424 --- a/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h
113425 +++ b/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h
113426 @@ -16,8 +16,7 @@
113427 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113428 *
113429 *
113430 -
113431 -******************************************************************************/
113432 + ******************************************************************************/
113433 #ifndef __WLAN_BSSDEF_H__
113434 #define __WLAN_BSSDEF_H__
113435
113436 @@ -295,6 +294,275 @@ typedef struct _NDIS_802_11_TEST
113437
113438 #endif //end of #ifdef PLATFORM_LINUX
113439
113440 +#ifdef PLATFORM_FREEBSD
113441 +
113442 +#define NDIS_802_11_LENGTH_SSID 32
113443 +#define NDIS_802_11_LENGTH_RATES 8
113444 +#define NDIS_802_11_LENGTH_RATES_EX 16
113445 +
113446 +typedef unsigned char NDIS_802_11_MAC_ADDRESS[6];
113447 +typedef long NDIS_802_11_RSSI; // in dBm
113448 +typedef unsigned char NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; // Set of 8 data rates
113449 +typedef unsigned char NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; // Set of 16 data rates
113450 +
113451 +
113452 +typedef ULONG NDIS_802_11_KEY_INDEX;
113453 +typedef unsigned long long NDIS_802_11_KEY_RSC;
113454 +
113455 +
113456 +typedef struct _NDIS_802_11_SSID
113457 +{
113458 + ULONG SsidLength;
113459 + UCHAR Ssid[32];
113460 +} NDIS_802_11_SSID, *PNDIS_802_11_SSID;
113461 +
113462 +typedef enum _NDIS_802_11_NETWORK_TYPE
113463 +{
113464 + Ndis802_11FH,
113465 + Ndis802_11DS,
113466 + Ndis802_11OFDM5,
113467 + Ndis802_11OFDM24,
113468 + Ndis802_11NetworkTypeMax // not a real type, defined as an upper bound
113469 +} NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE;
113470 +
113471 +typedef struct _NDIS_802_11_CONFIGURATION_FH
113472 +{
113473 + ULONG Length; // Length of structure
113474 + ULONG HopPattern; // As defined by 802.11, MSB set
113475 + ULONG HopSet; // to one if non-802.11
113476 + ULONG DwellTime; // units are Kusec
113477 +} NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH;
113478 +
113479 +
113480 +/*
113481 + FW will only save the channel number in DSConfig.
113482 + ODI Handler will convert the channel number to freq. number.
113483 +*/
113484 +typedef struct _NDIS_802_11_CONFIGURATION
113485 +{
113486 + ULONG Length; // Length of structure
113487 + ULONG BeaconPeriod; // units are Kusec
113488 + ULONG ATIMWindow; // units are Kusec
113489 + ULONG DSConfig; // Frequency, units are kHz
113490 + NDIS_802_11_CONFIGURATION_FH FHConfig;
113491 +} NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;
113492 +
113493 +
113494 +
113495 +typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE
113496 +{
113497 + Ndis802_11IBSS,
113498 + Ndis802_11Infrastructure,
113499 + Ndis802_11AutoUnknown,
113500 + Ndis802_11InfrastructureMax, // Not a real value, defined as upper bound
113501 + Ndis802_11APMode
113502 +} NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE;
113503 +
113504 +
113505 +
113506 +
113507 +
113508 +typedef struct _NDIS_802_11_FIXED_IEs
113509 +{
113510 + UCHAR Timestamp[8];
113511 + USHORT BeaconInterval;
113512 + USHORT Capabilities;
113513 +} NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs;
113514 +
113515 +
113516 +
113517 +typedef struct _NDIS_802_11_VARIABLE_IEs
113518 +{
113519 + UCHAR ElementID;
113520 + UCHAR Length;
113521 + UCHAR data[1];
113522 +} NDIS_802_11_VARIABLE_IEs, *PNDIS_802_11_VARIABLE_IEs;
113523 +
113524 +
113525 +
113526 +/*
113527 +
113528 +
113529 +
113530 +Length is the 4 bytes multiples of the sume of
113531 + sizeof (NDIS_802_11_MAC_ADDRESS) + 2 + sizeof (NDIS_802_11_SSID) + sizeof (ULONG)
113532 ++ sizeof (NDIS_802_11_RSSI) + sizeof (NDIS_802_11_NETWORK_TYPE) + sizeof (NDIS_802_11_CONFIGURATION)
113533 ++ sizeof (NDIS_802_11_RATES_EX) + IELength
113534 +
113535 +Except the IELength, all other fields are fixed length. Therefore, we can define a marco to present the
113536 +partial sum.
113537 +
113538 +*/
113539 +#if 0
113540 +typedef struct _NDIS_WLAN_BSSID_EX
113541 +{
113542 + ULONG Length;
113543 + NDIS_802_11_MAC_ADDRESS MacAddress;
113544 + UCHAR Reserved[2];//[0]: IS beacon frame, [1]:optimum_antenna=>For antenna diversity;
113545 + NDIS_802_11_SSID Ssid;
113546 + ULONG Privacy;
113547 + NDIS_802_11_RSSI Rssi;
113548 + NDIS_802_11_NETWORK_TYPE NetworkTypeInUse;
113549 + NDIS_802_11_CONFIGURATION Configuration;
113550 + NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode;
113551 + NDIS_802_11_RATES_EX SupportedRates;
113552 + ULONG IELength;
113553 + UCHAR IEs[MAX_IE_SZ]; //(timestamp, beacon interval, and capability information)
113554 +} NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX;
113555 +
113556 +
113557 +typedef struct _NDIS_802_11_BSSID_LIST_EX
113558 +{
113559 + ULONG NumberOfItems;
113560 + NDIS_WLAN_BSSID_EX Bssid[1];
113561 +} NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX;
113562 +#endif
113563 +
113564 +typedef enum _NDIS_802_11_AUTHENTICATION_MODE
113565 +{
113566 + Ndis802_11AuthModeOpen,
113567 + Ndis802_11AuthModeShared,
113568 + Ndis802_11AuthModeAutoSwitch,
113569 + Ndis802_11AuthModeWPA,
113570 + Ndis802_11AuthModeWPAPSK,
113571 + Ndis802_11AuthModeWPANone,
113572 + Ndis802_11AuthModeMax // Not a real mode, defined as upper bound
113573 +} NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE;
113574 +
113575 +typedef enum _NDIS_802_11_WEP_STATUS
113576 +{
113577 + Ndis802_11WEPEnabled,
113578 + Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
113579 + Ndis802_11WEPDisabled,
113580 + Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
113581 + Ndis802_11WEPKeyAbsent,
113582 + Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
113583 + Ndis802_11WEPNotSupported,
113584 + Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
113585 + Ndis802_11Encryption2Enabled,
113586 + Ndis802_11Encryption2KeyAbsent,
113587 + Ndis802_11Encryption3Enabled,
113588 + Ndis802_11Encryption3KeyAbsent
113589 +} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS,
113590 + NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS;
113591 +
113592 +
113593 +#define NDIS_802_11_AI_REQFI_CAPABILITIES 1
113594 +#define NDIS_802_11_AI_REQFI_LISTENINTERVAL 2
113595 +#define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS 4
113596 +
113597 +#define NDIS_802_11_AI_RESFI_CAPABILITIES 1
113598 +#define NDIS_802_11_AI_RESFI_STATUSCODE 2
113599 +#define NDIS_802_11_AI_RESFI_ASSOCIATIONID 4
113600 +
113601 +typedef struct _NDIS_802_11_AI_REQFI
113602 +{
113603 + USHORT Capabilities;
113604 + USHORT ListenInterval;
113605 + NDIS_802_11_MAC_ADDRESS CurrentAPAddress;
113606 +} NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI;
113607 +
113608 +typedef struct _NDIS_802_11_AI_RESFI
113609 +{
113610 + USHORT Capabilities;
113611 + USHORT StatusCode;
113612 + USHORT AssociationId;
113613 +} NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI;
113614 +
113615 +typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION
113616 +{
113617 + ULONG Length;
113618 + USHORT AvailableRequestFixedIEs;
113619 + NDIS_802_11_AI_REQFI RequestFixedIEs;
113620 + ULONG RequestIELength;
113621 + ULONG OffsetRequestIEs;
113622 + USHORT AvailableResponseFixedIEs;
113623 + NDIS_802_11_AI_RESFI ResponseFixedIEs;
113624 + ULONG ResponseIELength;
113625 + ULONG OffsetResponseIEs;
113626 +} NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION;
113627 +
113628 +typedef enum _NDIS_802_11_RELOAD_DEFAULTS
113629 +{
113630 + Ndis802_11ReloadWEPKeys
113631 +} NDIS_802_11_RELOAD_DEFAULTS, *PNDIS_802_11_RELOAD_DEFAULTS;
113632 +
113633 +
113634 +// Key mapping keys require a BSSID
113635 +typedef struct _NDIS_802_11_KEY
113636 +{
113637 + ULONG Length; // Length of this structure
113638 + ULONG KeyIndex;
113639 + ULONG KeyLength; // length of key in bytes
113640 + NDIS_802_11_MAC_ADDRESS BSSID;
113641 + NDIS_802_11_KEY_RSC KeyRSC;
113642 + UCHAR KeyMaterial[32]; // variable length depending on above field
113643 +} NDIS_802_11_KEY, *PNDIS_802_11_KEY;
113644 +
113645 +typedef struct _NDIS_802_11_REMOVE_KEY
113646 +{
113647 + ULONG Length; // Length of this structure
113648 + ULONG KeyIndex;
113649 + NDIS_802_11_MAC_ADDRESS BSSID;
113650 +} NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY;
113651 +
113652 +typedef struct _NDIS_802_11_WEP
113653 +{
113654 + ULONG Length; // Length of this structure
113655 + ULONG KeyIndex; // 0 is the per-client key, 1-N are the global keys
113656 + ULONG KeyLength; // length of key in bytes
113657 + UCHAR KeyMaterial[16];// variable length depending on above field
113658 +} NDIS_802_11_WEP, *PNDIS_802_11_WEP;
113659 +
113660 +typedef struct _NDIS_802_11_AUTHENTICATION_REQUEST
113661 +{
113662 + ULONG Length; // Length of structure
113663 + NDIS_802_11_MAC_ADDRESS Bssid;
113664 + ULONG Flags;
113665 +} NDIS_802_11_AUTHENTICATION_REQUEST, *PNDIS_802_11_AUTHENTICATION_REQUEST;
113666 +
113667 +typedef enum _NDIS_802_11_STATUS_TYPE
113668 +{
113669 + Ndis802_11StatusType_Authentication,
113670 + Ndis802_11StatusType_MediaStreamMode,
113671 + Ndis802_11StatusType_PMKID_CandidateList,
113672 + Ndis802_11StatusTypeMax // not a real type, defined as an upper bound
113673 +} NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE;
113674 +
113675 +typedef struct _NDIS_802_11_STATUS_INDICATION
113676 +{
113677 + NDIS_802_11_STATUS_TYPE StatusType;
113678 +} NDIS_802_11_STATUS_INDICATION, *PNDIS_802_11_STATUS_INDICATION;
113679 +
113680 +// mask for authentication/integrity fields
113681 +#define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS 0x0f
113682 +#define NDIS_802_11_AUTH_REQUEST_REAUTH 0x01
113683 +#define NDIS_802_11_AUTH_REQUEST_KEYUPDATE 0x02
113684 +#define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR 0x06
113685 +#define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0E
113686 +
113687 +// MIC check time, 60 seconds.
113688 +#define MIC_CHECK_TIME 60000000
113689 +
113690 +typedef struct _NDIS_802_11_AUTHENTICATION_EVENT
113691 +{
113692 + NDIS_802_11_STATUS_INDICATION Status;
113693 + NDIS_802_11_AUTHENTICATION_REQUEST Request[1];
113694 +} NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT;
113695 +
113696 +typedef struct _NDIS_802_11_TEST
113697 +{
113698 + ULONG Length;
113699 + ULONG Type;
113700 + union
113701 + {
113702 + NDIS_802_11_AUTHENTICATION_EVENT AuthenticationEvent;
113703 + NDIS_802_11_RSSI RssiTrigger;
113704 + }tt;
113705 +} NDIS_802_11_TEST, *PNDIS_802_11_TEST;
113706 +
113707 +
113708 +#endif //PLATFORM_FREEBSD
113709 #ifndef Ndis802_11APMode
113710 #define Ndis802_11APMode (Ndis802_11InfrastructureMax+1)
113711 #endif
113712 @@ -340,25 +608,7 @@ WLAN_BSSID_EX, *PWLAN_BSSID_EX;
113713
113714 __inline static uint get_WLAN_BSSID_EX_sz(WLAN_BSSID_EX *bss)
113715 {
113716 - uint t_len;
113717 -
113718 - t_len = sizeof (ULONG)
113719 - + sizeof (NDIS_802_11_MAC_ADDRESS)
113720 - + 2
113721 - + sizeof (NDIS_802_11_SSID)
113722 - + sizeof (ULONG)
113723 - + sizeof (NDIS_802_11_RSSI)
113724 - + sizeof (NDIS_802_11_NETWORK_TYPE)
113725 - + sizeof (NDIS_802_11_CONFIGURATION)
113726 - + sizeof (NDIS_802_11_NETWORK_INFRASTRUCTURE)
113727 - + sizeof (NDIS_802_11_RATES_EX)
113728 - //all new member add here
113729 - + sizeof(WLAN_PHY_INFO)
113730 - //all new member add here
113731 - + sizeof (ULONG)
113732 - + bss->IELength;
113733 - return t_len;
113734 -
113735 + return (sizeof(WLAN_BSSID_EX) - MAX_IE_SZ + bss->IELength);
113736 }
113737
113738 struct wlan_network {
113739 diff --git a/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h b/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h
113740 index 7d28d43..e5848ec 100644
113741 --- a/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h
113742 +++ b/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h
113743 @@ -16,8 +16,7 @@
113744 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
113745 *
113746 *
113747 -
113748 -******************************************************************************/
113749 + ******************************************************************************/
113750 #ifndef __XMIT_OSDEP_H_
113751 #define __XMIT_OSDEP_H_
113752
113753 @@ -56,6 +55,11 @@ IN UINT flags
113754
113755 #endif
113756
113757 +#ifdef PLATFORM_FREEBSD
113758 +#define NR_XMITFRAME 256
113759 +extern int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev);
113760 +extern void rtw_xmit_entry_wrap (struct ifnet * pifp);
113761 +#endif //PLATFORM_FREEBSD
113762
113763 #ifdef PLATFORM_LINUX
113764
113765 @@ -67,6 +71,7 @@ struct sta_xmit_priv;
113766 struct xmit_frame;
113767 struct xmit_buf;
113768
113769 +extern int _rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev);
113770 extern int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev);
113771
113772 #endif
113773 @@ -86,5 +91,5 @@ extern sint rtw_endofpktfile (struct pkt_file *pfile);
113774 extern void rtw_os_pkt_complete(_adapter *padapter, _pkt *pkt);
113775 extern void rtw_os_xmit_complete(_adapter *padapter, struct xmit_frame *pxframe);
113776
113777 -#endif //
113778 +#endif //__XMIT_OSDEP_H_
113779
113780 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c
113781 index b592e27..5975d1e 100644
113782 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c
113783 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c
113784 @@ -1,6 +1,6 @@
113785 /******************************************************************************
113786 *
113787 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
113788 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
113789 *
113790 * This program is free software; you can redistribute it and/or modify it
113791 * under the terms of version 2 of the GNU General Public License as
113792 @@ -31,6 +31,8 @@
113793
113794 #include "ioctl_cfg80211.h"
113795
113796 +#define RTW_MAX_MGMT_TX_CNT (8)
113797 +
113798 #define RTW_SCAN_IE_LEN_MAX 2304
113799 #define RTW_MAX_REMAIN_ON_CHANNEL_DURATION 65535 //ms
113800 #define RTW_MAX_NUM_PMKIDS 4
113801 @@ -42,6 +44,9 @@ static const u32 rtw_cipher_suites[] = {
113802 WLAN_CIPHER_SUITE_WEP104,
113803 WLAN_CIPHER_SUITE_TKIP,
113804 WLAN_CIPHER_SUITE_CCMP,
113805 +#ifdef CONFIG_IEEE80211W
113806 + WLAN_CIPHER_SUITE_AES_CMAC,
113807 +#endif //CONFIG_IEEE80211W
113808 };
113809
113810 #define RATETAB_ENT(_rate, _rateid, _flags) \
113811 @@ -85,9 +90,12 @@ static struct ieee80211_rate rtw_rates[] = {
113812 };
113813
113814 #define rtw_a_rates (rtw_rates + 4)
113815 -#define rtw_a_rates_size 8
113816 +#define RTW_A_RATES_NUM 8
113817 #define rtw_g_rates (rtw_rates + 0)
113818 -#define rtw_g_rates_size 12
113819 +#define RTW_G_RATES_NUM 12
113820 +
113821 +#define RTW_2G_CHANNELS_NUM 14
113822 +#define RTW_5G_CHANNELS_NUM 37
113823
113824 static struct ieee80211_channel rtw_2ghz_channels[] = {
113825 CHAN2G(1, 2412, 0),
113826 @@ -106,8 +114,6 @@ static struct ieee80211_channel rtw_2ghz_channels[] = {
113827 CHAN2G(14, 2484, 0),
113828 };
113829
113830 -//{{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
113831 -
113832 static struct ieee80211_channel rtw_5ghz_a_channels[] = {
113833 CHAN5G(34, 0), CHAN5G(36, 0),
113834 CHAN5G(38, 0), CHAN5G(40, 0),
113835 @@ -130,23 +136,116 @@ static struct ieee80211_channel rtw_5ghz_a_channels[] = {
113836 CHAN5G(216, 0),
113837 };
113838
113839 -static struct ieee80211_supported_band rtw_band_2ghz = {
113840 - .band = IEEE80211_BAND_2GHZ,
113841 - .channels = rtw_2ghz_channels,
113842 - .n_channels = ARRAY_SIZE(rtw_2ghz_channels),
113843 - .bitrates = rtw_g_rates,
113844 - .n_bitrates = rtw_g_rates_size,
113845 -};
113846
113847 -static struct ieee80211_supported_band rtw_band_5ghz = {
113848 - .band = IEEE80211_BAND_5GHZ,
113849 - .channels = rtw_5ghz_a_channels,
113850 - .n_channels = ARRAY_SIZE(rtw_5ghz_a_channels),
113851 - .bitrates = rtw_a_rates,
113852 - .n_bitrates = rtw_a_rates_size,
113853 -};
113854 +void rtw_2g_channels_init(struct ieee80211_channel *channels)
113855 +{
113856 + _rtw_memcpy((void*)channels, (void*)rtw_2ghz_channels,
113857 + sizeof(struct ieee80211_channel)*RTW_2G_CHANNELS_NUM
113858 + );
113859 +}
113860 +
113861 +void rtw_5g_channels_init(struct ieee80211_channel *channels)
113862 +{
113863 + _rtw_memcpy((void*)channels, (void*)rtw_5ghz_a_channels,
113864 + sizeof(struct ieee80211_channel)*RTW_5G_CHANNELS_NUM
113865 + );
113866 +}
113867 +
113868 +void rtw_2g_rates_init(struct ieee80211_rate *rates)
113869 +{
113870 + _rtw_memcpy(rates, rtw_g_rates,
113871 + sizeof(struct ieee80211_rate)*RTW_G_RATES_NUM
113872 + );
113873 +}
113874 +
113875 +void rtw_5g_rates_init(struct ieee80211_rate *rates)
113876 +{
113877 + _rtw_memcpy(rates, rtw_a_rates,
113878 + sizeof(struct ieee80211_rate)*RTW_A_RATES_NUM
113879 + );
113880 +}
113881 +
113882 +struct ieee80211_supported_band *rtw_spt_band_alloc(
113883 + enum ieee80211_band band
113884 + )
113885 +{
113886 + struct ieee80211_supported_band *spt_band = NULL;
113887 + int n_channels, n_bitrates;
113888 +
113889 + if(band == IEEE80211_BAND_2GHZ)
113890 + {
113891 + n_channels = RTW_2G_CHANNELS_NUM;
113892 + n_bitrates = RTW_G_RATES_NUM;
113893 + }
113894 + else if(band == IEEE80211_BAND_5GHZ)
113895 + {
113896 + n_channels = RTW_5G_CHANNELS_NUM;
113897 + n_bitrates = RTW_A_RATES_NUM;
113898 + }
113899 + else
113900 + {
113901 + goto exit;
113902 + }
113903 +
113904 + spt_band = (struct ieee80211_supported_band *)rtw_zmalloc(
113905 + sizeof(struct ieee80211_supported_band)
113906 + + sizeof(struct ieee80211_channel)*n_channels
113907 + + sizeof(struct ieee80211_rate)*n_bitrates
113908 + );
113909 + if(!spt_band)
113910 + goto exit;
113911 +
113912 + spt_band->channels = (struct ieee80211_channel*)(((u8*)spt_band)+sizeof(struct ieee80211_supported_band));
113913 + spt_band->bitrates= (struct ieee80211_rate*)(((u8*)spt_band->channels)+sizeof(struct ieee80211_channel)*n_channels);
113914 + spt_band->band = band;
113915 + spt_band->n_channels = n_channels;
113916 + spt_band->n_bitrates = n_bitrates;
113917 +
113918 + if(band == IEEE80211_BAND_2GHZ)
113919 + {
113920 + rtw_2g_channels_init(spt_band->channels);
113921 + rtw_2g_rates_init(spt_band->bitrates);
113922 + }
113923 + else if(band == IEEE80211_BAND_5GHZ)
113924 + {
113925 + rtw_5g_channels_init(spt_band->channels);
113926 + rtw_5g_rates_init(spt_band->bitrates);
113927 + }
113928 +
113929 + //spt_band.ht_cap
113930 +
113931 +exit:
113932 +
113933 + return spt_band;
113934 +}
113935 +
113936 +void rtw_spt_band_free(struct ieee80211_supported_band *spt_band)
113937 +{
113938 + u32 size;
113939 +
113940 + if(!spt_band)
113941 + return;
113942 +
113943 + if(spt_band->band == IEEE80211_BAND_2GHZ)
113944 + {
113945 + size = sizeof(struct ieee80211_supported_band)
113946 + + sizeof(struct ieee80211_channel)*RTW_2G_CHANNELS_NUM
113947 + + sizeof(struct ieee80211_rate)*RTW_G_RATES_NUM;
113948 + }
113949 + else if(spt_band->band == IEEE80211_BAND_5GHZ)
113950 + {
113951 + size = sizeof(struct ieee80211_supported_band)
113952 + + sizeof(struct ieee80211_channel)*RTW_5G_CHANNELS_NUM
113953 + + sizeof(struct ieee80211_rate)*RTW_A_RATES_NUM;
113954 + }
113955 + else
113956 + {
113957 +
113958 + }
113959 + rtw_mfree((u8*)spt_band, size);
113960 +}
113961
113962 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
113963 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
113964 static const struct ieee80211_txrx_stypes
113965 rtw_cfg80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = {
113966 [NL80211_IFTYPE_ADHOC] = {
113967 @@ -217,6 +316,7 @@ static int rtw_ieee80211_channel_to_frequency(int chan, int band)
113968 }
113969 }
113970
113971 +#define MAX_BSSINFO_LEN 1000
113972 static int rtw_cfg80211_inform_bss(_adapter *padapter, struct wlan_network *pnetwork)
113973 {
113974 int ret=0;
113975 @@ -231,30 +331,102 @@ static int rtw_cfg80211_inform_bss(_adapter *padapter, struct wlan_network *pnet
113976 u8 *notify_ie;
113977 size_t notify_ielen;
113978 s32 notify_signal;
113979 - u8 buf[768], *pbuf;
113980 - size_t len;
113981 + u8 buf[MAX_BSSINFO_LEN], *pbuf;
113982 + size_t len,bssinf_len=0;
113983 struct rtw_ieee80211_hdr *pwlanhdr;
113984 unsigned short *fctrl;
113985 u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
113986
113987 struct wireless_dev *wdev = padapter->rtw_wdev;
113988 struct wiphy *wiphy = wdev->wiphy;
113989 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
113990
113991
113992 - //printk("%s\n", __func__);
113993 -
113994 + //DBG_8192C("%s\n", __func__);
113995
113996 - channel = pnetwork->network.Configuration.DSConfig;
113997 - if (channel <= RTW_CH_MAX_2G_CHANNEL)
113998 + bssinf_len = pnetwork->network.IELength+sizeof (struct rtw_ieee80211_hdr_3addr);
113999 + if(bssinf_len > MAX_BSSINFO_LEN){
114000 + DBG_871X("%s IE Length too long > %d byte \n",__FUNCTION__,MAX_BSSINFO_LEN);
114001 + goto exit;
114002 + }
114003 +
114004 + //To reduce PBC Overlap rate
114005 + //_enter_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
114006 + if(wdev_to_priv(wdev)->scan_request != NULL)
114007 {
114008 - //band = wiphy->bands[IEEE80211_BAND_2GHZ];
114009 + u8 *psr=NULL, sr = 0;
114010 + NDIS_802_11_SSID *pssid = &pnetwork->network.Ssid;
114011 + struct cfg80211_scan_request *request = wdev_to_priv(wdev)->scan_request;
114012 + struct cfg80211_ssid *ssids = request->ssids;
114013 + u32 wpsielen=0;
114014 + u8 *wpsie=NULL;
114015 +
114016 + wpsie = rtw_get_wps_ie(pnetwork->network.IEs+_FIXED_IE_LENGTH_, pnetwork->network.IELength-_FIXED_IE_LENGTH_, NULL, &wpsielen);
114017 +
114018 + if(wpsie && wpsielen>0)
114019 + psr = rtw_get_wps_attr_content(wpsie, wpsielen, WPS_ATTR_SELECTED_REGISTRAR, (u8*)(&sr), NULL);
114020 +
114021 + if (sr != 0)
114022 + {
114023 + if(request->n_ssids == 1 && request->n_channels == 1) // it means under processing WPS
114024 + {
114025 + DBG_8192C("ssid=%s, len=%d\n", pssid->Ssid, pssid->SsidLength);
114026 +
114027 + if(pssid->SsidLength == ssids[0].ssid_len &&
114028 + _rtw_memcmp(pssid->Ssid, ssids[0].ssid, ssids[0].ssid_len))
114029 + {
114030 + DBG_871X("%s, got sr and ssid match!\n", __func__);
114031 + }
114032 + else
114033 + {
114034 + if(psr !=NULL)
114035 + *psr = 0; //clear sr
114036 +
114037 +#if 0
114038 + WLAN_BSSID_EX *pselect_network = &pnetwork->network;
114039 + struct cfg80211_bss *pselect_bss = NULL;
114040 + struct ieee80211_channel *notify_channel = NULL;
114041 + u32 freq;
114042 +
114043 + DBG_871X("%s, got sr, but ssid mismatch, to remove this bss\n", __func__);
114044 +
114045 + if (pselect_network->Configuration.DSConfig <= RTW_CH_MAX_2G_CHANNEL)
114046 + freq = rtw_ieee80211_channel_to_frequency(pselect_network->Configuration.DSConfig, IEEE80211_BAND_2GHZ);
114047 + else
114048 + freq = rtw_ieee80211_channel_to_frequency(pselect_network->Configuration.DSConfig, IEEE80211_BAND_5GHZ);
114049 +
114050 + notify_channel = ieee80211_get_channel(wiphy, freq);
114051 + pselect_bss = cfg80211_get_bss(wiphy, NULL/*notify_channel*/,
114052 + pselect_network->MacAddress, pselect_network->Ssid.Ssid,
114053 + pselect_network->Ssid.SsidLength, 0/*WLAN_CAPABILITY_ESS*/,
114054 + 0/*WLAN_CAPABILITY_ESS*/);
114055 +
114056 + if(pselect_bss)
114057 + {
114058 + DBG_871X("%s, got bss for cfg80211 for unlinking bss\n", __func__);
114059 +
114060 + cfg80211_unlink_bss(wiphy, pselect_bss);
114061 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
114062 + cfg80211_put_bss(wiphy, pselect_bss);
114063 +#else
114064 + cfg80211_put_bss(pselect_bss);
114065 +#endif
114066 +
114067 + }
114068 +
114069 + goto exit;
114070 +#endif
114071 + }
114072 + }
114073 + }
114074 + }
114075 + //_exit_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
114076 +
114077 + channel = pnetwork->network.Configuration.DSConfig;
114078 + if (channel <= RTW_CH_MAX_2G_CHANNEL)
114079 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
114080 - }
114081 else
114082 - {
114083 - //band = wiphy->bands[IEEE80211_BAND_5GHZ];
114084 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
114085 - }
114086
114087 notify_channel = ieee80211_get_channel(wiphy, freq);
114088
114089 @@ -267,53 +439,59 @@ static int rtw_cfg80211_inform_bss(_adapter *padapter, struct wlan_network *pnet
114090
114091 notify_ie = pnetwork->network.IEs+_FIXED_IE_LENGTH_;
114092 notify_ielen = pnetwork->network.IELength-_FIXED_IE_LENGTH_;
114093 -
114094 - //notify_signal = (s16)le16_to_cpu(bi->RSSI) * 100;
114095
114096 //We've set wiphy's signal_type as CFG80211_SIGNAL_TYPE_MBM: signal strength in mBm (100*dBm)
114097 - notify_signal = 100*translate_percentage_to_dbm(pnetwork->network.PhyInfo.SignalStrength);//dbm
114098 + if ( check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE &&
114099 + is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network)) {
114100 + notify_signal = 100*translate_percentage_to_dbm(padapter->recvpriv.signal_strength);//dbm
114101 + } else {
114102 + notify_signal = 100*translate_percentage_to_dbm(pnetwork->network.PhyInfo.SignalStrength);//dbm
114103 + }
114104
114105 /*
114106 - printk("bssid: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n",
114107 + DBG_8192C("bssid: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n",
114108 pnetwork->network.MacAddress[0], pnetwork->network.MacAddress[1], pnetwork->network.MacAddress[2],
114109 pnetwork->network.MacAddress[3], pnetwork->network.MacAddress[4], pnetwork->network.MacAddress[5]);
114110 - printk("Channel: %d(%d)\n", channel, freq);
114111 - printk("Capability: %X\n", notify_capability);
114112 - printk("Beacon interval: %d\n", notify_interval);
114113 - printk("Signal: %d\n", notify_signal);
114114 - printk("notify_timestamp: %#018llx\n", notify_timestamp);
114115 + DBG_8192C("Channel: %d(%d)\n", channel, freq);
114116 + DBG_8192C("Capability: %X\n", notify_capability);
114117 + DBG_8192C("Beacon interval: %d\n", notify_interval);
114118 + DBG_8192C("Signal: %d\n", notify_signal);
114119 + DBG_8192C("notify_timestamp: %#018llx\n", notify_timestamp);
114120 */
114121
114122 pbuf = buf;
114123 +
114124 pwlanhdr = (struct rtw_ieee80211_hdr *)pbuf;
114125 fctrl = &(pwlanhdr->frame_ctl);
114126 - *(fctrl) = 0;
114127 -
114128 + *(fctrl) = 0;
114129 +
114130 SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
114131 //pmlmeext->mgnt_seq++;
114132 -
114133 - if (pnetwork->network.Reserved[0] == 1) { // WIFI_BEACON
114134
114135 + if (pnetwork->network.Reserved[0] == 1) { // WIFI_BEACON
114136 _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
114137 -
114138 SetFrameSubType(pbuf, WIFI_BEACON);
114139 -
114140 } else {
114141 -
114142 - _rtw_memcpy(pwlanhdr->addr1, myid(&(padapter->eeprompriv)), ETH_ALEN);
114143 -
114144 + _rtw_memcpy(pwlanhdr->addr1, myid(&(padapter->eeprompriv)), ETH_ALEN);
114145 SetFrameSubType(pbuf, WIFI_PROBERSP);
114146 }
114147
114148 _rtw_memcpy(pwlanhdr->addr2, pnetwork->network.MacAddress, ETH_ALEN);
114149 _rtw_memcpy(pwlanhdr->addr3, pnetwork->network.MacAddress, ETH_ALEN);
114150 -
114151 +
114152
114153 pbuf += sizeof(struct rtw_ieee80211_hdr_3addr);
114154 len = sizeof (struct rtw_ieee80211_hdr_3addr);
114155
114156 _rtw_memcpy(pbuf, pnetwork->network.IEs, pnetwork->network.IELength);
114157 len += pnetwork->network.IELength;
114158 +
114159 + //#ifdef CONFIG_P2P
114160 + //if(rtw_get_p2p_ie(pnetwork->network.IEs+12, pnetwork->network.IELength-12, NULL, NULL))
114161 + //{
114162 + // DBG_8192C("%s, got p2p_ie\n", __func__);
114163 + //}
114164 + //#endif
114165
114166
114167 #if 1
114168 @@ -327,26 +505,96 @@ static int rtw_cfg80211_inform_bss(_adapter *padapter, struct wlan_network *pnet
114169 #endif
114170
114171 if (unlikely(!bss)) {
114172 - printk("rtw_cfg80211_inform_bss error\n");
114173 + DBG_8192C("rtw_cfg80211_inform_bss error\n");
114174 return -EINVAL;
114175 }
114176
114177 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
114178 +#ifndef COMPAT_KERNEL_RELEASE
114179 + //patch for cfg80211, update beacon ies to information_elements
114180 + if (pnetwork->network.Reserved[0] == 1) { // WIFI_BEACON
114181 +
114182 + if(bss->len_information_elements != bss->len_beacon_ies)
114183 + {
114184 + bss->information_elements = bss->beacon_ies;
114185 + bss->len_information_elements = bss->len_beacon_ies;
114186 + }
114187 + }
114188 +#endif //COMPAT_KERNEL_RELEASE
114189 +#endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
114190 +
114191 +/*
114192 + {
114193 + if( bss->information_elements == bss->proberesp_ies)
114194 + {
114195 + if( bss->len_information_elements != bss->len_proberesp_ies)
114196 + {
114197 + DBG_8192C("error!, len_information_elements != bss->len_proberesp_ies\n");
114198 + }
114199 +
114200 + }
114201 + else if(bss->len_information_elements < bss->len_beacon_ies)
114202 + {
114203 + bss->information_elements = bss->beacon_ies;
114204 + bss->len_information_elements = bss->len_beacon_ies;
114205 + }
114206 + }
114207 +*/
114208 +
114209 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
114210 + cfg80211_put_bss(wiphy, bss);
114211 +#else
114212 + cfg80211_put_bss(bss);
114213 +#endif
114214 +
114215 +exit:
114216 return ret;
114217
114218 }
114219
114220 +/*
114221 + Check the given bss is valid by kernel API cfg80211_get_bss()
114222 + @padapter : the given adapter
114223 +
114224 + return _TRUE if bss is valid, _FALSE for not found.
114225 +*/
114226 +int rtw_cfg80211_check_bss(_adapter *padapter)
114227 +{
114228 + WLAN_BSSID_EX *pnetwork = &(padapter->mlmeextpriv.mlmext_info.network);
114229 + struct cfg80211_bss *bss = NULL;
114230 + struct ieee80211_channel *notify_channel = NULL;
114231 + u32 freq;
114232 +
114233 + if (!(pnetwork) || !(padapter->rtw_wdev))
114234 + return _FALSE;
114235 +
114236 + if (pnetwork->Configuration.DSConfig <= RTW_CH_MAX_2G_CHANNEL)
114237 + freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, IEEE80211_BAND_2GHZ);
114238 + else
114239 + freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, IEEE80211_BAND_5GHZ);
114240 +
114241 + notify_channel = ieee80211_get_channel(padapter->rtw_wdev->wiphy, freq);
114242 + bss = cfg80211_get_bss(padapter->rtw_wdev->wiphy, notify_channel,
114243 + pnetwork->MacAddress, pnetwork->Ssid.Ssid,
114244 + pnetwork->Ssid.SsidLength,
114245 + WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
114246 +
114247 + return (bss!=NULL);
114248 +}
114249 +
114250 void rtw_cfg80211_indicate_connect(_adapter *padapter)
114251 {
114252 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
114253 struct wlan_network *cur_network = &(pmlmepriv->cur_network);
114254 struct wireless_dev *pwdev = padapter->rtw_wdev;
114255 +#ifdef CONFIG_P2P
114256 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
114257 +#endif
114258 + struct cfg80211_bss *bss = NULL;
114259
114260 -
114261 - printk("%s\n", __func__);
114262 -
114263 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
114264 if (pwdev->iftype != NL80211_IFTYPE_STATION
114265 - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114266 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
114267 && pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT
114268 #endif
114269 ) {
114270 @@ -355,33 +603,59 @@ void rtw_cfg80211_indicate_connect(_adapter *padapter)
114271
114272 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
114273 return;
114274 -
114275 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
114276 +
114277 +#ifdef CONFIG_P2P
114278 + if(pwdinfo->driver_interface == DRIVER_CFG80211 )
114279 {
114280 - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
114281 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
114282 - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
114283 - 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));
114284 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
114285 + {
114286 + rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
114287 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
114288 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
114289 + 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));
114290 + }
114291 }
114292 +#endif //CONFIG_P2P
114293
114294 #ifdef CONFIG_LAYER2_ROAMING
114295 - if(pmlmepriv->to_roaming > 0) {
114296 - //rtw_cfg80211_inform_bss(padapter, cur_network);
114297 + if (rtw_to_roaming(padapter) > 0) {
114298 + #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) || defined(COMPAT_KERNEL_RELEASE)
114299 + struct wiphy *wiphy = pwdev->wiphy;
114300 + struct ieee80211_channel *notify_channel;
114301 + u32 freq;
114302 + u16 channel = cur_network->network.Configuration.DSConfig;
114303 +
114304 + if (channel <= RTW_CH_MAX_2G_CHANNEL)
114305 + freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
114306 + else
114307 + freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
114308 +
114309 + notify_channel = ieee80211_get_channel(wiphy, freq);
114310 + #endif
114311 +
114312 DBG_871X("%s call cfg80211_roamed\n", __FUNCTION__);
114313 - cfg80211_roamed(padapter->pnetdev,
114314 - #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39)
114315 - NULL,
114316 + cfg80211_roamed(padapter->pnetdev
114317 + #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) || defined(COMPAT_KERNEL_RELEASE)
114318 + , notify_channel
114319 #endif
114320 - cur_network->network.MacAddress,
114321 - cur_network->network.IEs+_FIXED_IE_LENGTH_, cur_network->network.IELength-_FIXED_IE_LENGTH_,
114322 - NULL, 0, GFP_ATOMIC
114323 - );
114324 + , cur_network->network.MacAddress
114325 + , pmlmepriv->assoc_req+sizeof(struct rtw_ieee80211_hdr_3addr)+2
114326 + , pmlmepriv->assoc_req_len-sizeof(struct rtw_ieee80211_hdr_3addr)-2
114327 + , pmlmepriv->assoc_rsp+sizeof(struct rtw_ieee80211_hdr_3addr)+6
114328 + , pmlmepriv->assoc_rsp_len-sizeof(struct rtw_ieee80211_hdr_3addr)-6
114329 + , GFP_ATOMIC);
114330 }
114331 else
114332 #endif
114333 {
114334 - cfg80211_connect_result(padapter->pnetdev, cur_network->network.MacAddress, NULL, 0, NULL, 0,
114335 - WLAN_STATUS_SUCCESS, GFP_ATOMIC/*GFP_KERNEL*/);
114336 + DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state);
114337 + cfg80211_connect_result(padapter->pnetdev, cur_network->network.MacAddress
114338 + , pmlmepriv->assoc_req+sizeof(struct rtw_ieee80211_hdr_3addr)+2
114339 + , pmlmepriv->assoc_req_len-sizeof(struct rtw_ieee80211_hdr_3addr)-2
114340 + , pmlmepriv->assoc_rsp+sizeof(struct rtw_ieee80211_hdr_3addr)+6
114341 + , pmlmepriv->assoc_rsp_len-sizeof(struct rtw_ieee80211_hdr_3addr)-6
114342 + , WLAN_STATUS_SUCCESS, GFP_ATOMIC);
114343 + DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state);
114344 }
114345 }
114346
114347 @@ -389,12 +663,14 @@ void rtw_cfg80211_indicate_disconnect(_adapter *padapter)
114348 {
114349 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
114350 struct wireless_dev *pwdev = padapter->rtw_wdev;
114351 +#ifdef CONFIG_P2P
114352 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
114353 +#endif
114354
114355 - printk("%s\n", __func__);
114356 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
114357
114358 if (pwdev->iftype != NL80211_IFTYPE_STATION
114359 - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114360 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
114361 && pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT
114362 #endif
114363 ) {
114364 @@ -404,28 +680,36 @@ void rtw_cfg80211_indicate_disconnect(_adapter *padapter)
114365 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
114366 return;
114367
114368 -
114369 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
114370 +#ifdef CONFIG_P2P
114371 + if( pwdinfo->driver_interface == DRIVER_CFG80211 )
114372 {
114373 - _cancel_timer_ex( &pwdinfo->find_phase_timer );
114374 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
114375 - _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
114376 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
114377 + {
114378 + _cancel_timer_ex( &pwdinfo->find_phase_timer );
114379 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
114380 + _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
114381
114382 - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
114383 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
114384 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
114385 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
114386
114387 - 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));
114388 + 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));
114389 + }
114390 }
114391 +#endif //CONFIG_P2P
114392
114393 - if(pwdev->sme_state==CFG80211_SME_CONNECTING)
114394 - cfg80211_connect_result(padapter->pnetdev, NULL, NULL, 0, NULL, 0,
114395 - WLAN_STATUS_UNSPECIFIED_FAILURE, GFP_ATOMIC/*GFP_KERNEL*/);
114396 - else if(pwdev->sme_state==CFG80211_SME_CONNECTED)
114397 - cfg80211_disconnected(padapter->pnetdev, 0,
114398 - NULL, 0, GFP_ATOMIC);
114399 - else
114400 - printk("pwdev->sme_state=%d\n", pwdev->sme_state);
114401 + if (!padapter->mlmepriv.not_indic_disco) {
114402 + DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state);
114403
114404 + if(pwdev->sme_state==CFG80211_SME_CONNECTING)
114405 + cfg80211_connect_result(padapter->pnetdev, NULL, NULL, 0, NULL, 0,
114406 + WLAN_STATUS_UNSPECIFIED_FAILURE, GFP_ATOMIC/*GFP_KERNEL*/);
114407 + else if(pwdev->sme_state==CFG80211_SME_CONNECTED)
114408 + cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, GFP_ATOMIC);
114409 + //else
114410 + //DBG_8192C("pwdev->sme_state=%d\n", pwdev->sme_state);
114411 +
114412 + DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state);
114413 + }
114414 }
114415
114416
114417 @@ -493,6 +777,8 @@ static int set_group_key(_adapter *padapter, u8 *key, u8 alg, int keyid)
114418 _rtw_memset(psetkeyparm, 0, sizeof(struct setkey_parm));
114419
114420 psetkeyparm->keyid=(u8)keyid;
114421 + if (is_wep_enc(alg))
114422 + padapter->securitypriv.key_mask |= BIT(psetkeyparm->keyid);
114423
114424 psetkeyparm->algorithm = alg;
114425
114426 @@ -558,7 +844,6 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, struct ieee_pa
114427 {
114428 int ret = 0;
114429 u32 wep_key_idx, wep_key_len,wep_total_len;
114430 - NDIS_802_11_WEP *pwep = NULL;
114431 struct sta_info *psta = NULL, *pbcmc_sta = NULL;
114432 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
114433 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
114434 @@ -624,67 +909,33 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, struct ieee_pa
114435 goto exit;
114436 }
114437
114438 -
114439 if (wep_key_len > 0)
114440 {
114441 wep_key_len = wep_key_len <= 5 ? 5 : 13;
114442 - wep_total_len = wep_key_len + FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial);
114443 - pwep =(NDIS_802_11_WEP *)rtw_malloc(wep_total_len);
114444 - if(pwep == NULL){
114445 - DBG_8192C(" r871x_set_encryption: pwep allocate fail !!!\n");
114446 - goto exit;
114447 - }
114448 -
114449 - _rtw_memset(pwep, 0, wep_total_len);
114450 -
114451 - pwep->KeyLength = wep_key_len;
114452 - pwep->Length = wep_total_len;
114453 -
114454 }
114455
114456 - pwep->KeyIndex = wep_key_idx;
114457 -
114458 - _rtw_memcpy(pwep->KeyMaterial, param->u.crypt.key, pwep->KeyLength);
114459 -
114460 - if(param->u.crypt.set_tx)
114461 + if (psecuritypriv->bWepDefaultKeyIdxSet == 0)
114462 {
114463 - DBG_8192C("wep, set_tx=1\n");
114464 + //wep default key has not been set, so use this key index as default key.
114465
114466 psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
114467 psecuritypriv->dot11PrivacyAlgrthm=_WEP40_;
114468 psecuritypriv->dot118021XGrpPrivacy=_WEP40_;
114469
114470 - if(pwep->KeyLength==13)
114471 + if(wep_key_len == 13)
114472 {
114473 psecuritypriv->dot11PrivacyAlgrthm=_WEP104_;
114474 psecuritypriv->dot118021XGrpPrivacy=_WEP104_;
114475 }
114476
114477 -
114478 psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx;
114479 -
114480 - _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), pwep->KeyMaterial, pwep->KeyLength);
114481 -
114482 - psecuritypriv->dot11DefKeylen[wep_key_idx]=pwep->KeyLength;
114483 -
114484 - set_wep_key(padapter, pwep->KeyMaterial, pwep->KeyLength, wep_key_idx);
114485 -
114486 -
114487 }
114488 - else
114489 - {
114490 - DBG_8192C("wep, set_tx=0\n");
114491
114492 - //don't update "psecuritypriv->dot11PrivacyAlgrthm" and
114493 - //"psecuritypriv->dot11PrivacyKeyIndex=keyid", but can rtw_set_key to cam
114494 + _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), param->u.crypt.key, wep_key_len);
114495
114496 - _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), pwep->KeyMaterial, pwep->KeyLength);
114497 + psecuritypriv->dot11DefKeylen[wep_key_idx] = wep_key_len;
114498
114499 - psecuritypriv->dot11DefKeylen[wep_key_idx] = pwep->KeyLength;
114500 -
114501 - set_wep_key(padapter, pwep->KeyMaterial, pwep->KeyLength, wep_key_idx);
114502 -
114503 - }
114504 + set_wep_key(padapter, param->u.crypt.key, wep_key_len, wep_key_idx);
114505
114506 goto exit;
114507
114508 @@ -693,8 +944,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, struct ieee_pa
114509
114510 if(!psta && check_fwstate(pmlmepriv, WIFI_AP_STATE)) // //group key
114511 {
114512 - //if(param->u.crypt.set_tx == 1)
114513 - if(param->u.crypt.set_tx == 0)
114514 + if(param->u.crypt.set_tx == 0) //group key
114515 {
114516 if(strcmp(param->u.crypt.alg, "WEP") == 0)
114517 {
114518 @@ -765,7 +1015,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, struct ieee_pa
114519 {
114520 if(check_fwstate(pmlmepriv, WIFI_AP_STATE))
114521 {
114522 - if(param->u.crypt.set_tx ==1)
114523 + if(param->u.crypt.set_tx ==1) //pairwise key
114524 {
114525 _rtw_memcpy(psta->dot118021x_UncstKey.skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
114526
114527 @@ -874,11 +1124,6 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, struct ieee_pa
114528
114529 exit:
114530
114531 - if(pwep)
114532 - {
114533 - rtw_mfree((u8 *)pwep, wep_total_len);
114534 - }
114535 -
114536 return ret;
114537
114538 }
114539 @@ -888,7 +1133,6 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, struct ieee_param
114540 {
114541 int ret = 0;
114542 u32 wep_key_idx, wep_key_len,wep_total_len;
114543 - NDIS_802_11_WEP *pwep = NULL;
114544 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
114545 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
114546 struct security_priv *psecuritypriv = &padapter->securitypriv;
114547 @@ -898,7 +1142,7 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, struct ieee_param
114548
114549 _func_enter_;
114550
114551 - printk("%s\n", __func__);
114552 + DBG_8192C("%s\n", __func__);
114553
114554 param->u.crypt.err = 0;
114555 param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0';
114556 @@ -913,9 +1157,13 @@ _func_enter_;
114557 param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
114558 param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
114559 {
114560 - if (param->u.crypt.idx >= WEP_KEYS)
114561 + if (param->u.crypt.idx >= WEP_KEYS
114562 +#ifdef CONFIG_IEEE80211W
114563 + && param->u.crypt.idx > BIP_MAX_KEYID
114564 +#endif //CONFIG_IEEE80211W
114565 + )
114566 {
114567 - ret = -EINVAL;
114568 + ret = -EINVAL;
114569 goto exit;
114570 }
114571 } else {
114572 @@ -928,77 +1176,39 @@ _func_enter_;
114573 RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("wpa_set_encryption, crypt.alg = WEP\n"));
114574 DBG_8192C("wpa_set_encryption, crypt.alg = WEP\n");
114575
114576 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
114577 - padapter->securitypriv.dot11PrivacyAlgrthm=_WEP40_;
114578 - padapter->securitypriv.dot118021XGrpPrivacy=_WEP40_;
114579 -
114580 wep_key_idx = param->u.crypt.idx;
114581 wep_key_len = param->u.crypt.key_len;
114582
114583 - RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_info_,("(1)wep_key_idx=%d\n", wep_key_idx));
114584 - DBG_8192C("(1)wep_key_idx=%d\n", wep_key_idx);
114585 -
114586 - if (wep_key_idx > WEP_KEYS)
114587 - return -EINVAL;
114588 -
114589 - RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_info_,("(2)wep_key_idx=%d\n", wep_key_idx));
114590 -
114591 - if (wep_key_len > 0)
114592 + if ((wep_key_idx > WEP_KEYS) || (wep_key_len <= 0))
114593 {
114594 - wep_key_len = wep_key_len <= 5 ? 5 : 13;
114595 - wep_total_len = wep_key_len + FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial);
114596 - pwep =(NDIS_802_11_WEP *) rtw_malloc(wep_total_len);
114597 - if(pwep == NULL){
114598 - RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,(" wpa_set_encryption: pwep allocate fail !!!\n"));
114599 - goto exit;
114600 - }
114601 -
114602 - _rtw_memset(pwep, 0, wep_total_len);
114603 -
114604 - pwep->KeyLength = wep_key_len;
114605 - pwep->Length = wep_total_len;
114606 -
114607 - if(wep_key_len==13)
114608 - {
114609 - padapter->securitypriv.dot11PrivacyAlgrthm=_WEP104_;
114610 - padapter->securitypriv.dot118021XGrpPrivacy=_WEP104_;
114611 - }
114612 - }
114613 - else {
114614 ret = -EINVAL;
114615 goto exit;
114616 }
114617
114618 - pwep->KeyIndex = wep_key_idx;
114619 - pwep->KeyIndex |= 0x80000000;
114620 + if (psecuritypriv->bWepDefaultKeyIdxSet == 0)
114621 + {
114622 + //wep default key has not been set, so use this key index as default key.
114623
114624 - _rtw_memcpy(pwep->KeyMaterial, param->u.crypt.key, pwep->KeyLength);
114625 + wep_key_len = wep_key_len <= 5 ? 5 : 13;
114626
114627 - if(param->u.crypt.set_tx)
114628 - {
114629 - DBG_8192C("wep, set_tx=1\n");
114630 + psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
114631 + psecuritypriv->dot11PrivacyAlgrthm = _WEP40_;
114632 + psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
114633
114634 - if(rtw_set_802_11_add_wep(padapter, pwep) == (u8)_FAIL)
114635 + if(wep_key_len==13)
114636 {
114637 - ret = -EOPNOTSUPP ;
114638 + psecuritypriv->dot11PrivacyAlgrthm = _WEP104_;
114639 + psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
114640 }
114641 +
114642 + psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx;
114643 }
114644 - else
114645 - {
114646 - DBG_8192C("wep, set_tx=0\n");
114647
114648 - //don't update "psecuritypriv->dot11PrivacyAlgrthm" and
114649 - //"psecuritypriv->dot11PrivacyKeyIndex=keyid", but can rtw_set_key to fw/cam
114650 + _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), param->u.crypt.key, wep_key_len);
114651
114652 - if (wep_key_idx >= WEP_KEYS) {
114653 - ret = -EOPNOTSUPP ;
114654 - goto exit;
114655 - }
114656 + psecuritypriv->dot11DefKeylen[wep_key_idx] = wep_key_len;
114657
114658 - _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), pwep->KeyMaterial, pwep->KeyLength);
114659 - psecuritypriv->dot11DefKeylen[wep_key_idx]=pwep->KeyLength;
114660 - rtw_set_key(padapter, psecuritypriv, wep_key_idx, 0);
114661 - }
114662 + rtw_set_key(padapter, psecuritypriv, wep_key_idx, 0);
114663
114664 goto exit;
114665 }
114666 @@ -1008,14 +1218,14 @@ _func_enter_;
114667 struct sta_info * psta,*pbcmc_sta;
114668 struct sta_priv * pstapriv = &padapter->stapriv;
114669
114670 - //printk("%s, : dot11AuthAlgrthm == dot11AuthAlgrthm_8021X \n", __func__);
114671 + //DBG_8192C("%s, : dot11AuthAlgrthm == dot11AuthAlgrthm_8021X \n", __func__);
114672
114673 if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_MP_STATE) == _TRUE) //sta mode
114674 {
114675 psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv));
114676 if (psta == NULL) {
114677 //DEBUG_ERR( ("Set wpa_set_encryption: Obtain Sta_info fail \n"));
114678 - printk("%s, : Obtain Sta_info fail \n", __func__);
114679 + DBG_8192C("%s, : Obtain Sta_info fail \n", __func__);
114680 }
114681 else
114682 {
114683 @@ -1033,7 +1243,7 @@ _func_enter_;
114684 if(param->u.crypt.set_tx ==1)//pairwise key
114685 {
114686
114687 - printk("%s, : param->u.crypt.set_tx ==1 \n", __func__);
114688 + DBG_8192C("%s, : param->u.crypt.set_tx ==1 \n", __func__);
114689
114690 _rtw_memcpy(psta->dot118021x_UncstKey.skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
114691
114692 @@ -1047,29 +1257,50 @@ _func_enter_;
114693 //_set_timer(&padapter->securitypriv.tkip_timer, 50);
114694 }
114695
114696 - //DEBUG_ERR(("\n param->u.crypt.key_len=%d\n",param->u.crypt.key_len));
114697 - //DEBUG_ERR(("\n ~~~~stastakey:unicastkey\n"));
114698 - DBG_871X("\n ~~~~stastakey:unicastkey\n");
114699 + //DEBUG_ERR((" param->u.crypt.key_len=%d\n",param->u.crypt.key_len));
114700 + DBG_871X(" ~~~~set sta key:unicastkey\n");
114701
114702 rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE);
114703 }
114704 else//group key
114705 - {
114706 - _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));
114707 - _rtw_memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[16]),8);
114708 - _rtw_memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[24]),8);
114709 - padapter->securitypriv.binstallGrpkey = _TRUE;
114710 - //DEBUG_ERR(("\n param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
114711 - //DEBUG_ERR(("\n ~~~~stastakey:groupkey\n"));
114712 - DBG_871X("\n ~~~~stastakey:groupkey\n");
114713 -
114714 - padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
114715 -
114716 - rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1);
114717 + {
114718 + if(strcmp(param->u.crypt.alg, "TKIP") == 0 || strcmp(param->u.crypt.alg, "CCMP") == 0)
114719 + {
114720 + _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));
114721 + _rtw_memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[16]),8);
114722 + _rtw_memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[24]),8);
114723 + padapter->securitypriv.binstallGrpkey = _TRUE;
114724 + //DEBUG_ERR((" param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
114725 + DBG_871X(" ~~~~set sta key:groupkey\n");
114726 +
114727 + padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
114728 +
114729 + rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1);
114730 + }
114731 +#ifdef CONFIG_IEEE80211W
114732 + else if(strcmp(param->u.crypt.alg, "BIP") == 0)
114733 + {
114734 + int no;
114735 + //DBG_871X("BIP key_len=%d , index=%d @@@@@@@@@@@@@@@@@@\n", param->u.crypt.key_len, param->u.crypt.idx);
114736 + //save the IGTK key, length 16 bytes
114737 + _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));
114738 + /*DBG_871X("IGTK key below:\n");
114739 + for(no=0;no<16;no++)
114740 + printk(" %02x ", padapter->securitypriv.dot11wBIPKey[param->u.crypt.idx].skey[no]);
114741 + DBG_871X("\n");*/
114742 + padapter->securitypriv.dot11wBIPKeyid = param->u.crypt.idx;
114743 + padapter->securitypriv.binstallBIPkey = _TRUE;
114744 + DBG_871X(" ~~~~set sta key:IGKT\n");
114745 + }
114746 +#endif //CONFIG_IEEE80211W
114747 +
114748 #ifdef CONFIG_P2P
114749 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
114750 + if(pwdinfo->driver_interface == DRIVER_CFG80211 )
114751 {
114752 - rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_DONE);
114753 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
114754 + {
114755 + rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_DONE);
114756 + }
114757 }
114758 #endif //CONFIG_P2P
114759
114760 @@ -1101,11 +1332,7 @@ _func_enter_;
114761
114762 exit:
114763
114764 - printk("%s, ret=%d\n", __func__, ret);
114765 -
114766 - if (pwep) {
114767 - rtw_mfree((u8 *)pwep,wep_total_len);
114768 - }
114769 + DBG_8192C("%s, ret=%d\n", __func__, ret);
114770
114771 _func_exit_;
114772
114773 @@ -1113,7 +1340,7 @@ exit:
114774 }
114775
114776 static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
114777 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114778 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
114779 u8 key_index, bool pairwise, const u8 *mac_addr,
114780 #else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114781 u8 key_index, const u8 *mac_addr,
114782 @@ -1128,22 +1355,15 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
114783 _adapter *padapter = wiphy_to_adapter(wiphy);
114784 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
114785
114786 -
114787 - printk("%s, Adding key for %pM\n", __func__, mac_addr);
114788 -
114789 - printk("cipher=0x%x\n", params->cipher);
114790 -
114791 - printk("key_len=0x%x\n", params->key_len);
114792 -
114793 - printk("seq_len=0x%x\n", params->seq_len);
114794 -
114795 - printk("key_index=%d\n", key_index);
114796 -
114797 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114798 - printk("pairwise=%d\n", pairwise);
114799 + DBG_871X(FUNC_NDEV_FMT" adding key for %pM\n", FUNC_NDEV_ARG(ndev), mac_addr);
114800 + DBG_871X("cipher=0x%x\n", params->cipher);
114801 + DBG_871X("key_len=0x%x\n", params->key_len);
114802 + DBG_871X("seq_len=0x%x\n", params->seq_len);
114803 + DBG_871X("key_index=%d\n", key_index);
114804 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
114805 + DBG_871X("pairwise=%d\n", pairwise);
114806 #endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114807
114808 -
114809 param_len = sizeof(struct ieee_param) + params->key_len;
114810 param = (struct ieee_param *)rtw_malloc(param_len);
114811 if (param == NULL)
114812 @@ -1170,6 +1390,11 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
114813 case WLAN_CIPHER_SUITE_CCMP:
114814 alg_name = "CCMP";
114815 break;
114816 +#ifdef CONFIG_IEEE80211W
114817 + case WLAN_CIPHER_SUITE_AES_CMAC:
114818 + alg_name = "BIP";
114819 + break;
114820 +#endif //CONFIG_IEEE80211W
114821 default:
114822 return -ENOTSUPP;
114823 }
114824 @@ -1179,9 +1404,9 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
114825
114826 if (!mac_addr || is_broadcast_ether_addr(mac_addr))
114827 {
114828 - param->u.crypt.set_tx = 0;
114829 + param->u.crypt.set_tx = 0; //for wpa/wpa2 group key
114830 } else {
114831 - param->u.crypt.set_tx = 1;
114832 + param->u.crypt.set_tx = 1; //for wpa/wpa2 pairwise key
114833 }
114834
114835
114836 @@ -1199,12 +1424,11 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
114837 _rtw_memcpy(param->u.crypt.key, params->key, params->key_len);
114838 }
114839
114840 - //if(rtw_wdev->iftype == NL80211_IFTYPE_STATION)
114841 if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
114842 {
114843 ret = rtw_cfg80211_set_encryption(ndev, param, param_len);
114844 }
114845 - else if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)//else if(rtw_wdev->iftype == NL80211_IFTYPE_AP)
114846 + else if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
114847 {
114848 #ifdef CONFIG_AP_MODE
114849 if(mac_addr)
114850 @@ -1215,7 +1439,7 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
114851 }
114852 else
114853 {
114854 - printk("error! fw_state=0x%x, iftype=%d\n", pmlmepriv->fw_state, rtw_wdev->iftype);
114855 + DBG_8192C("error! fw_state=0x%x, iftype=%d\n", pmlmepriv->fw_state, rtw_wdev->iftype);
114856
114857 }
114858
114859 @@ -1229,7 +1453,7 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
114860 }
114861
114862 static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct net_device *ndev,
114863 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114864 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
114865 u8 key_index, bool pairwise, const u8 *mac_addr,
114866 #else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114867 u8 key_index, const u8 *mac_addr,
114868 @@ -1256,123 +1480,165 @@ static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct net_device *ndev,
114869 callback(cookie, &params);
114870
114871 return key->key_len ? 0 : -ENOENT;
114872 -#endif
114873 - printk("%s\n", __func__);
114874 +#endif
114875 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
114876 return 0;
114877 }
114878
114879 static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev,
114880 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114881 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
114882 u8 key_index, bool pairwise, const u8 *mac_addr)
114883 #else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114884 u8 key_index, const u8 *mac_addr)
114885 #endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
114886 {
114887 -#if 0
114888 - struct iwm_priv *iwm = ndev_to_iwm(ndev);
114889 - struct iwm_key *key = &iwm->keys[key_index];
114890 + _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
114891 + struct security_priv *psecuritypriv = &padapter->securitypriv;
114892
114893 - if (!iwm->keys[key_index].key_len) {
114894 - IWM_DBG_WEXT(iwm, DBG, "Key %d not used\n", key_index);
114895 - return 0;
114896 - }
114897 + DBG_871X(FUNC_NDEV_FMT" key_index=%d\n", FUNC_NDEV_ARG(ndev), key_index);
114898
114899 - if (key_index == iwm->default_key)
114900 - iwm->default_key = -1;
114901 + if (key_index == psecuritypriv->dot11PrivacyKeyIndex)
114902 + {
114903 + //clear the flag of wep default key set.
114904 + psecuritypriv->bWepDefaultKeyIdxSet = 0;
114905 + }
114906
114907 - return iwm_set_key(iwm, 1, key);
114908 -#endif
114909 - printk("%s\n", __func__);
114910 return 0;
114911 }
114912
114913 static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
114914 - struct net_device *ndev,
114915 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
114916 - u8 key_index, bool unicast, bool multicast)
114917 -#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
114918 - u8 key_index)
114919 -#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
114920 + struct net_device *ndev, u8 key_index
114921 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
114922 + , bool unicast, bool multicast
114923 + #endif
114924 + )
114925 {
114926 -#if 0
114927 - struct iwm_priv *iwm = ndev_to_iwm(ndev);
114928 + _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
114929 + struct security_priv *psecuritypriv = &padapter->securitypriv;
114930
114931 - IWM_DBG_WEXT(iwm, DBG, "Default key index is: %d\n", key_index);
114932 + DBG_871X(FUNC_NDEV_FMT" key_index=%d"
114933 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
114934 + ", unicast=%d, multicast=%d"
114935 + #endif
114936 + ".\n", FUNC_NDEV_ARG(ndev), key_index
114937 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
114938 + , unicast, multicast
114939 + #endif
114940 + );
114941
114942 - if (!iwm->keys[key_index].key_len) {
114943 - IWM_ERR(iwm, "Key %d not used\n", key_index);
114944 - return -EINVAL;
114945 - }
114946 + if ((key_index < WEP_KEYS) && ((psecuritypriv->dot11PrivacyAlgrthm == _WEP40_) || (psecuritypriv->dot11PrivacyAlgrthm == _WEP104_))) //set wep default key
114947 + {
114948 + psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
114949
114950 - iwm->default_key = key_index;
114951 + psecuritypriv->dot11PrivacyKeyIndex = key_index;
114952 +
114953 + psecuritypriv->dot11PrivacyAlgrthm = _WEP40_;
114954 + psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
114955 + if (psecuritypriv->dot11DefKeylen[key_index] == 13)
114956 + {
114957 + psecuritypriv->dot11PrivacyAlgrthm = _WEP104_;
114958 + psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
114959 + }
114960 +
114961 + psecuritypriv->bWepDefaultKeyIdxSet = 1; //set the flag to represent that wep default key has been set
114962 + }
114963
114964 - return iwm_set_tx_key(iwm, key_index);
114965 -#endif
114966 - printk("%s\n", __func__);
114967 return 0;
114968 +
114969 }
114970
114971 static int cfg80211_rtw_get_station(struct wiphy *wiphy,
114972 struct net_device *ndev,
114973 u8 *mac, struct station_info *sinfo)
114974 {
114975 + int ret = 0;
114976 _adapter *padapter = wiphy_to_adapter(wiphy);
114977 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
114978 + struct sta_info *psta = NULL;
114979 + struct sta_priv *pstapriv = &padapter->stapriv;
114980 +
114981 + sinfo->filled = 0;
114982 +
114983 + if (!mac) {
114984 + DBG_871X(FUNC_NDEV_FMT" mac==%p\n", FUNC_NDEV_ARG(ndev), mac);
114985 + ret = -ENOENT;
114986 + goto exit;
114987 + }
114988
114989 - if(!mac) {
114990 - DBG_871X("%s, mac==%p\n", __func__, mac);
114991 - return -ENOENT;
114992 + psta = rtw_get_stainfo(pstapriv, mac);
114993 + if (psta == NULL) {
114994 + DBG_8192C("%s, sta_info is null\n", __func__);
114995 + ret = -ENOENT;
114996 + goto exit;
114997 }
114998
114999 #ifdef CONFIG_DEBUG_CFG80211
115000 - DBG_871X("%s, mac="MAC_FMT"\n", __func__, MAC_ARG(mac));
115001 + DBG_871X(FUNC_NDEV_FMT" mac="MAC_FMT"\n", FUNC_NDEV_ARG(ndev), MAC_ARG(mac));
115002 #endif
115003
115004 //for infra./P2PClient mode
115005 - if(check_fwstate(pmlmepriv, WIFI_STATION_STATE)
115006 + if( check_fwstate(pmlmepriv, WIFI_STATION_STATE)
115007 && check_fwstate(pmlmepriv, _FW_LINKED)
115008 )
115009 {
115010 struct wlan_network *cur_network = &(pmlmepriv->cur_network);
115011 -
115012 - if (_rtw_memcmp(mac, cur_network->network.MacAddress, ETH_ALEN) == _FALSE)
115013 - {
115014 +
115015 + if (_rtw_memcmp(mac, cur_network->network.MacAddress, ETH_ALEN) == _FALSE) {
115016 DBG_871X("%s, mismatch bssid="MAC_FMT"\n", __func__, MAC_ARG(cur_network->network.MacAddress));
115017 - return -ENOENT;
115018 + ret = -ENOENT;
115019 + goto exit;
115020 }
115021
115022 sinfo->filled |= STATION_INFO_SIGNAL;
115023 sinfo->signal = translate_percentage_to_dbm(padapter->recvpriv.signal_strength);
115024
115025 sinfo->filled |= STATION_INFO_TX_BITRATE;
115026 - sinfo->txrate.legacy = 10 * rtw_get_network_max_rate(padapter, &pmlmepriv->cur_network.network);
115027 + sinfo->txrate.legacy = rtw_get_cur_max_rate(padapter);
115028 +
115029 + sinfo->filled |= STATION_INFO_RX_PACKETS;
115030 + sinfo->rx_packets = sta_rx_data_pkts(psta);
115031 +
115032 + sinfo->filled |= STATION_INFO_TX_PACKETS;
115033 + sinfo->tx_packets = psta->sta_stats.tx_pkts;
115034 +
115035 }
115036 -
115037 +
115038 //for Ad-Hoc/AP mode
115039 if ((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)
115040 - ||check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)
115041 - ||check_fwstate(pmlmepriv, WIFI_AP_STATE) )
115042 + ||check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)
115043 + ||check_fwstate(pmlmepriv, WIFI_AP_STATE))
115044 && check_fwstate(pmlmepriv, _FW_LINKED)
115045 )
115046 {
115047 - struct sta_info *psta = NULL;
115048 - struct sta_priv *pstapriv = &padapter->stapriv;
115049 -
115050 - psta = rtw_get_stainfo(pstapriv, mac);
115051 - if(psta == NULL)
115052 - {
115053 - printk("%s, sta_info is null\n", __func__);
115054 - return -ENOENT;
115055 - }
115056 -
115057 //TODO: should acquire station info...
115058 }
115059
115060 - return 0;
115061 +exit:
115062 + return ret;
115063 }
115064
115065 extern int netdev_open(struct net_device *pnetdev);
115066 +#ifdef CONFIG_CONCURRENT_MODE
115067 +extern int netdev_if2_open(struct net_device *pnetdev);
115068 +#endif
115069
115070 +/*
115071 +enum nl80211_iftype {
115072 + NL80211_IFTYPE_UNSPECIFIED,
115073 + NL80211_IFTYPE_ADHOC, //1
115074 + NL80211_IFTYPE_STATION, //2
115075 + NL80211_IFTYPE_AP, //3
115076 + NL80211_IFTYPE_AP_VLAN,
115077 + NL80211_IFTYPE_WDS,
115078 + NL80211_IFTYPE_MONITOR, //6
115079 + NL80211_IFTYPE_MESH_POINT,
115080 + NL80211_IFTYPE_P2P_CLIENT, //8
115081 + NL80211_IFTYPE_P2P_GO, //9
115082 + //keep last
115083 + NUM_NL80211_IFTYPES,
115084 + NL80211_IFTYPE_MAX = NUM_NL80211_IFTYPES - 1
115085 +};
115086 +*/
115087 static int cfg80211_rtw_change_iface(struct wiphy *wiphy,
115088 struct net_device *ndev,
115089 enum nl80211_iftype type, u32 *flags,
115090 @@ -1381,60 +1647,99 @@ static int cfg80211_rtw_change_iface(struct wiphy *wiphy,
115091 enum nl80211_iftype old_type;
115092 NDIS_802_11_NETWORK_INFRASTRUCTURE networkType ;
115093 _adapter *padapter = wiphy_to_adapter(wiphy);
115094 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
115095 struct wireless_dev *rtw_wdev = wiphy_to_wdev(wiphy);
115096 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
115097 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
115098 + _irqL irqL;
115099 + _queue *queue = &pmlmepriv->scanned_queue;
115100 +#ifdef CONFIG_P2P
115101 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
115102 +#endif
115103 int ret = 0;
115104 u8 change = _FALSE;
115105
115106 -
115107 - DBG_871X("%s call netdev_open\n", __FUNCTION__);
115108 - if(netdev_open(ndev) != 0) {
115109 + if (adapter_to_dvobj(padapter)->processing_dev_remove == _TRUE) {
115110 ret= -EPERM;
115111 goto exit;
115112 }
115113
115114 +#ifdef CONFIG_CONCURRENT_MODE
115115 + if(padapter->adapter_type == SECONDARY_ADAPTER)
115116 + {
115117 + DBG_871X(FUNC_NDEV_FMT" call netdev_if2_open\n", FUNC_NDEV_ARG(ndev));
115118 + if(netdev_if2_open(ndev) != 0) {
115119 + ret= -EPERM;
115120 + goto exit;
115121 + }
115122 + }
115123 + else if(padapter->adapter_type == PRIMARY_ADAPTER)
115124 +#endif //CONFIG_CONCURRENT_MODE
115125 + {
115126 + DBG_871X(FUNC_NDEV_FMT" call netdev_open\n", FUNC_NDEV_ARG(ndev));
115127 + if(netdev_open(ndev) != 0) {
115128 + ret= -EPERM;
115129 + goto exit;
115130 + }
115131 + }
115132 +
115133 if(_FAIL == rtw_pwr_wakeup(padapter)) {
115134 ret= -EPERM;
115135 goto exit;
115136 }
115137
115138 old_type = rtw_wdev->iftype;
115139 - printk("%s, old_iftype=%d, new_iftype=%d\n", __func__, old_type, type);
115140 -
115141 -
115142 + DBG_871X(FUNC_NDEV_FMT" old_iftype=%d, new_iftype=%d\n",
115143 + FUNC_NDEV_ARG(ndev), old_type, type);
115144
115145 if(old_type != type)
115146 + {
115147 change = _TRUE;
115148 + pmlmeext->action_public_rxseq = 0xffff;
115149 + pmlmeext->action_public_dialog_token = 0xff;
115150 + }
115151
115152 -
115153 switch (type) {
115154 case NL80211_IFTYPE_ADHOC:
115155 networkType = Ndis802_11IBSS;
115156 break;
115157 +#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
115158 + case NL80211_IFTYPE_P2P_CLIENT:
115159 +#endif
115160 case NL80211_IFTYPE_STATION:
115161 networkType = Ndis802_11Infrastructure;
115162 - if(change && rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
115163 + #ifdef CONFIG_P2P
115164 + if(pwdinfo->driver_interface == DRIVER_CFG80211 )
115165 {
115166 + if(change && rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
115167 + {
115168 + _cancel_timer_ex( &pwdinfo->find_phase_timer );
115169 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
115170 + _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
115171
115172 - _cancel_timer_ex( &pwdinfo->find_phase_timer );
115173 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
115174 - _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
115175 -
115176 - //it means remove GO and change mode from AP(GO) to station(P2P DEVICE)
115177 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
115178 - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
115179 + //it means remove GO and change mode from AP(GO) to station(P2P DEVICE)
115180 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
115181 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
115182
115183 - 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));
115184 -
115185 + 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));
115186 + }
115187 }
115188 + #endif //CONFIG_P2P
115189 break;
115190 +#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
115191 + case NL80211_IFTYPE_P2P_GO:
115192 +#endif
115193 case NL80211_IFTYPE_AP:
115194 networkType = Ndis802_11APMode;
115195 - if(change && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
115196 + #ifdef CONFIG_P2P
115197 + if(pwdinfo->driver_interface == DRIVER_CFG80211 )
115198 {
115199 - //it means P2P Group created, we will be GO and change mode from P2P DEVICE to AP(GO)
115200 - rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
115201 - }
115202 + if(change && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
115203 + {
115204 + //it means P2P Group created, we will be GO and change mode from P2P DEVICE to AP(GO)
115205 + rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
115206 + }
115207 + }
115208 + #endif //CONFIG_P2P
115209 break;
115210 default:
115211 return -EOPNOTSUPP;
115212 @@ -1442,12 +1747,19 @@ static int cfg80211_rtw_change_iface(struct wiphy *wiphy,
115213
115214 rtw_wdev->iftype = type;
115215
115216 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
115217 + _enter_critical_bh(&queue->lock, &irqL);
115218 +
115219 if (rtw_set_802_11_infrastructure_mode(padapter, networkType) ==_FALSE)
115220 {
115221 rtw_wdev->iftype = old_type;
115222 ret = -EPERM;
115223 + _exit_critical_bh(&queue->lock, &irqL);
115224 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
115225 goto exit;
115226 }
115227 + _exit_critical_bh(&queue->lock, &irqL);
115228 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
115229
115230 rtw_setopmode_cmd(padapter, networkType);
115231
115232 @@ -1465,18 +1777,27 @@ void rtw_cfg80211_indicate_scan_done(struct rtw_wdev_priv *pwdev_priv, bool abor
115233 {
115234 //struct cfg80211_scan_request *scan_request = pwdev_priv->scan_request;
115235
115236 -#ifdef CONFIG_DEBUG_CFG80211
115237 + #ifdef CONFIG_DEBUG_CFG80211
115238 DBG_871X("%s with scan req\n", __FUNCTION__);
115239 -#endif
115240 + #endif
115241
115242 //avoid WARN_ON(request != wiphy_to_dev(request->wiphy)->scan_req);
115243 //if(scan_request == wiphy_to_dev(scan_request->wiphy)->scan_req)
115244 + if(pwdev_priv->scan_request->wiphy != pwdev_priv->rtw_wdev->wiphy)
115245 + {
115246 + DBG_8192C("error wiphy compare\n");
115247 + }
115248 + else
115249 + {
115250 + cfg80211_scan_done(pwdev_priv->scan_request, aborted);
115251 + }
115252
115253 - cfg80211_scan_done(pwdev_priv->scan_request, aborted);
115254 pwdev_priv->scan_request = NULL;
115255
115256 } else {
115257 - DBG_871X("%s without scan req\n", __FUNCTION__);
115258 + #ifdef CONFIG_DEBUG_CFG80211
115259 + DBG_871X("%s without scan req\n", __FUNCTION__);
115260 + #endif
115261 }
115262 _exit_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
115263 }
115264 @@ -1498,46 +1819,7 @@ void rtw_cfg80211_surveydone_event_callback(_adapter *padapter)
115265 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
115266
115267 #ifdef CONFIG_DEBUG_CFG80211
115268 - printk("%s\n", __func__);
115269 -#endif
115270 -
115271 -#if 0
115272 - if(padapter->pwrctrlpriv.brfoffbyhw && padapter->bDriverStopped)
115273 - {
115274 - return;
115275 - }
115276 -
115277 -#ifdef CONFIG_P2P
115278 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
115279 - {
115280 - // P2P is enabled
115281 - wait_for_surveydone = 200;
115282 - }
115283 - else
115284 - {
115285 - // P2P is disabled
115286 - wait_for_surveydone = 100;
115287 - }
115288 -#else
115289 - {
115290 - wait_for_surveydone = 100;
115291 - }
115292 -#endif //CONFIG_P2P
115293 -
115294 -
115295 - wait_status = _FW_UNDER_SURVEY
115296 - #ifndef CONFIG_ANDROID
115297 - |_FW_UNDER_LINKING
115298 - #endif
115299 - ;
115300 -
115301 - while(check_fwstate(pmlmepriv, wait_status) == _TRUE)
115302 - {
115303 - rtw_msleep_os(30);
115304 - cnt++;
115305 - if(cnt > wait_for_surveydone )
115306 - break;
115307 - }
115308 + DBG_8192C("%s\n", __func__);
115309 #endif
115310
115311 _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
115312 @@ -1553,10 +1835,9 @@ void rtw_cfg80211_surveydone_event_callback(_adapter *padapter)
115313 pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
115314
115315 //report network only if the current channel set contains the channel to which this network belongs
115316 - if( _TRUE == rtw_is_channel_set_contains_channel(padapter->mlmeextpriv.channel_set, pnetwork->network.Configuration.DSConfig)
115317 - #ifdef CONFIG_VALIDATE_SSID
115318 + if(rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, pnetwork->network.Configuration.DSConfig) >= 0
115319 + && rtw_mlme_band_check(padapter, pnetwork->network.Configuration.DSConfig) == _TRUE
115320 && _TRUE == rtw_validate_ssid(&(pnetwork->network.Ssid))
115321 - #endif
115322 )
115323 {
115324 //ev=translate_scan(padapter, a, pnetwork, ev, stop);
115325 @@ -1568,44 +1849,24 @@ void rtw_cfg80211_surveydone_event_callback(_adapter *padapter)
115326 }
115327
115328 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
115329 -
115330 - #if 0
115331 - // Disable P2P Listen State
115332 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
115333 - {
115334 - _cancel_timer_ex( &pwdinfo->find_phase_timer );
115335 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
115336 - _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
115337 -
115338 - //rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
115339 - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
115340 -#ifdef CONFIG_DEBUG_CFG80211
115341 - printk("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
115342 -#endif
115343 -
115344 - if(pwrpriv->bips_processing == _FALSE){
115345 - rtw_set_pwr_state_check_timer(pwrpriv);
115346 - }
115347 - }
115348 - #endif
115349 -
115350 +
115351 //call this after other things have been done
115352 - rtw_indicate_scan_done(padapter, _FALSE);
115353 -
115354 + rtw_cfg80211_indicate_scan_done(wdev_to_priv(padapter->rtw_wdev), _FALSE);
115355 }
115356
115357 -static int rtw_cfg80211_set_probe_req_wpsp2pie(struct net_device *net, char *buf, int len)
115358 +static int rtw_cfg80211_set_probe_req_wpsp2pie(_adapter *padapter, char *buf, int len)
115359 {
115360 int ret = 0;
115361 uint wps_ielen = 0;
115362 u8 *wps_ie;
115363 u32 p2p_ielen = 0;
115364 u8 *p2p_ie;
115365 - _adapter *padapter = (_adapter *)rtw_netdev_priv(net);
115366 + u32 wfd_ielen = 0;
115367 + u8 *wfd_ie;
115368 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
115369
115370 #ifdef CONFIG_DEBUG_CFG80211
115371 - printk("%s, ielen=%d\n", __func__, len);
115372 + DBG_8192C("%s, ielen=%d\n", __func__, len);
115373 #endif
115374
115375 if(len>0)
115376 @@ -1613,7 +1874,7 @@ static int rtw_cfg80211_set_probe_req_wpsp2pie(struct net_device *net, char *buf
115377 if((wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen)))
115378 {
115379 #ifdef CONFIG_DEBUG_CFG80211
115380 - printk("probe_req_wps_ielen=%d\n", wps_ielen);
115381 + DBG_8192C("probe_req_wps_ielen=%d\n", wps_ielen);
115382 #endif
115383
115384 if(pmlmepriv->wps_probe_req_ie)
115385 @@ -1626,7 +1887,7 @@ static int rtw_cfg80211_set_probe_req_wpsp2pie(struct net_device *net, char *buf
115386
115387 pmlmepriv->wps_probe_req_ie = rtw_malloc(wps_ielen);
115388 if ( pmlmepriv->wps_probe_req_ie == NULL) {
115389 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
115390 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
115391 return -EINVAL;
115392
115393 }
115394 @@ -1634,12 +1895,18 @@ static int rtw_cfg80211_set_probe_req_wpsp2pie(struct net_device *net, char *buf
115395 pmlmepriv->wps_probe_req_ie_len = wps_ielen;
115396 }
115397
115398 - buf += wps_ielen;
115399 - len -= wps_ielen;
115400 + //buf += wps_ielen;
115401 + //len -= wps_ielen;
115402 +
115403 + #ifdef CONFIG_P2P
115404 if((p2p_ie=rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen)))
115405 {
115406 + struct wifidirect_info *wdinfo = &padapter->wdinfo;
115407 + u32 attr_contentlen = 0;
115408 + u8 listen_ch_attr[5];
115409 +
115410 #ifdef CONFIG_DEBUG_CFG80211
115411 - printk("probe_req_p2p_ielen=%d\n", p2p_ielen);
115412 + DBG_8192C("probe_req_p2p_ielen=%d\n", p2p_ielen);
115413 #endif
115414
115415 if(pmlmepriv->p2p_probe_req_ie)
115416 @@ -1650,58 +1917,67 @@ static int rtw_cfg80211_set_probe_req_wpsp2pie(struct net_device *net, char *buf
115417 pmlmepriv->p2p_probe_req_ie = NULL;
115418 }
115419
115420 - pmlmepriv->p2p_probe_req_ie = rtw_malloc(len);
115421 + pmlmepriv->p2p_probe_req_ie = rtw_malloc(p2p_ielen);
115422 if ( pmlmepriv->p2p_probe_req_ie == NULL) {
115423 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
115424 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
115425 return -EINVAL;
115426
115427 }
115428 _rtw_memcpy(pmlmepriv->p2p_probe_req_ie, p2p_ie, p2p_ielen);
115429 pmlmepriv->p2p_probe_req_ie_len = p2p_ielen;
115430 - }
115431 -
115432 - }
115433 -
115434 - return ret;
115435 -
115436 -}
115437 -
115438 -static void rtw_cfg80211_scan_abort(_adapter *padapter)
115439 -{
115440 - u32 cnt=0;
115441 - u32 wait_for_surveydone;
115442 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
115443 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
115444
115445 -#ifdef CONFIG_DEBUG_CFG80211
115446 - printk("%s\n", __func__);
115447 -#endif
115448 + if(rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_LISTEN_CH, (u8*)listen_ch_attr, (uint*) &attr_contentlen)
115449 + && attr_contentlen == 5)
115450 + {
115451 + if (wdinfo->listen_channel != listen_ch_attr[4]) {
115452 + DBG_871X(FUNC_ADPT_FMT" listen channel - country:%c%c%c, class:%u, ch:%u\n",
115453 + FUNC_ADPT_ARG(padapter), listen_ch_attr[0], listen_ch_attr[1], listen_ch_attr[2],
115454 + listen_ch_attr[3], listen_ch_attr[4]);
115455 + wdinfo->listen_channel = listen_ch_attr[4];
115456 + }
115457 + }
115458 + }
115459 + #endif //CONFIG_P2P
115460 +
115461 + //buf += p2p_ielen;
115462 + //len -= p2p_ielen;
115463
115464 - wait_for_surveydone = 10;
115465 + #ifdef CONFIG_WFD
115466 + if(rtw_get_wfd_ie(buf, len, NULL, &wfd_ielen))
115467 + {
115468 + #ifdef CONFIG_DEBUG_CFG80211
115469 + DBG_8192C("probe_req_wfd_ielen=%d\n", wfd_ielen);
115470 + #endif
115471
115472 - pmlmeext->scan_abort = _TRUE;
115473 + if(pmlmepriv->wfd_probe_req_ie)
115474 + {
115475 + u32 free_len = pmlmepriv->wfd_probe_req_ie_len;
115476 + pmlmepriv->wfd_probe_req_ie_len = 0;
115477 + rtw_mfree(pmlmepriv->wfd_probe_req_ie, free_len);
115478 + pmlmepriv->wfd_probe_req_ie = NULL;
115479 + }
115480
115481 - while(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE)
115482 - {
115483 - printk("%s : fw_state=_FW_UNDER_SURVEY!\n", __func__);
115484 + pmlmepriv->wfd_probe_req_ie = rtw_malloc(wfd_ielen);
115485 + if ( pmlmepriv->wfd_probe_req_ie == NULL) {
115486 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
115487 + return -EINVAL;
115488 +
115489 + }
115490 + rtw_get_wfd_ie(buf, len, pmlmepriv->wfd_probe_req_ie, &pmlmepriv->wfd_probe_req_ie_len);
115491 + }
115492 + #endif //CONFIG_WFD
115493
115494 - rtw_msleep_os(20);
115495 - cnt++;
115496 - if(cnt > wait_for_surveydone )
115497 - {
115498 - printk("waiting for scan_abort time out!\n");
115499 - break;
115500 - }
115501 }
115502
115503 - pmlmeext->scan_abort = _FALSE;
115504 -
115505 - rtw_cfg80211_indicate_scan_done(wdev_to_priv(padapter->rtw_wdev), _TRUE);
115506 -
115507 + return ret;
115508 +
115509 }
115510
115511 -static int cfg80211_rtw_scan(struct wiphy *wiphy, struct net_device *ndev,
115512 - struct cfg80211_scan_request *request)
115513 +static int cfg80211_rtw_scan(struct wiphy *wiphy
115514 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))
115515 + , struct net_device *ndev
115516 + #endif
115517 + , struct cfg80211_scan_request *request)
115518 {
115519 int i;
115520 u8 _status = _FALSE;
115521 @@ -1709,11 +1985,14 @@ static int cfg80211_rtw_scan(struct wiphy *wiphy, struct net_device *ndev,
115522 _adapter *padapter = wiphy_to_adapter(wiphy);
115523 struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
115524 NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
115525 + struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
115526 _irqL irqL;
115527 u8 *wps_ie=NULL;
115528 uint wps_ielen=0;
115529 u8 *p2p_ie=NULL;
115530 uint p2p_ielen=0;
115531 + u8 survey_times=3;
115532 + u8 survey_times_for_one_ch=6;
115533 #ifdef CONFIG_P2P
115534 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
115535 #endif //CONFIG_P2P
115536 @@ -1721,10 +2000,21 @@ static int cfg80211_rtw_scan(struct wiphy *wiphy, struct net_device *ndev,
115537 struct cfg80211_ssid *ssids = request->ssids;
115538 int social_channel = 0, j = 0;
115539 bool need_indicate_scan_done = _FALSE;
115540 -
115541 -#ifdef CONFIG_DEBUG_CFG80211
115542 - printk("%s\n", __func__);
115543 -#endif
115544 +#ifdef CONFIG_CONCURRENT_MODE
115545 + PADAPTER pbuddy_adapter = NULL;
115546 + struct mlme_priv *pbuddy_mlmepriv = NULL;
115547 +#endif //CONFIG_CONCURRENT_MODE
115548 +
115549 +//#ifdef CONFIG_DEBUG_CFG80211
115550 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
115551 +//#endif
115552 +
115553 +#ifdef CONFIG_CONCURRENT_MODE
115554 + if (padapter->pbuddy_adapter) {
115555 + pbuddy_adapter = padapter->pbuddy_adapter;
115556 + pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
115557 + }
115558 +#endif //CONFIG_CONCURRENT_MODE
115559
115560 #ifdef CONFIG_MP_INCLUDED
115561 if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
115562 @@ -1740,8 +2030,22 @@ static int cfg80211_rtw_scan(struct wiphy *wiphy, struct net_device *ndev,
115563
115564 if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
115565 {
115566 - //need_indicate_scan_done = _TRUE;
115567 - //goto check_need_indicate_scan_done;
115568 +#ifdef CONFIG_DEBUG_CFG80211
115569 + DBG_871X("%s under WIFI_AP_STATE\n", __FUNCTION__);
115570 +#endif
115571 +
115572 + if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS|_FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
115573 + {
115574 + DBG_8192C("%s, fwstate=0x%x\n", __func__, pmlmepriv->fw_state);
115575 +
115576 + if(check_fwstate(pmlmepriv, WIFI_UNDER_WPS))
115577 + {
115578 + DBG_8192C("AP mode process WPS \n");
115579 + }
115580 +
115581 + need_indicate_scan_done = _TRUE;
115582 + goto check_need_indicate_scan_done;
115583 + }
115584 }
115585
115586 if(_FAIL == rtw_pwr_wakeup(padapter)) {
115587 @@ -1749,26 +2053,31 @@ static int cfg80211_rtw_scan(struct wiphy *wiphy, struct net_device *ndev,
115588 goto check_need_indicate_scan_done;
115589 }
115590
115591 - if( ssids->ssid != NULL )
115592 + #ifdef CONFIG_P2P
115593 + if( pwdinfo->driver_interface == DRIVER_CFG80211 )
115594 {
115595 - if( _rtw_memcmp(ssids->ssid, "DIRECT-", 7)
115596 + if(ssids->ssid != NULL
115597 + && _rtw_memcmp(ssids->ssid, "DIRECT-", 7)
115598 && rtw_get_p2p_ie((u8 *)request->ie, request->ie_len, NULL, NULL)
115599 )
115600 {
115601 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
115602 {
115603 + u32 initialgain = 0x30;
115604 rtw_p2p_enable(padapter, P2P_ROLE_DEVICE);
115605 wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _TRUE;
115606 + padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)&(initialgain));
115607 + padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_INITIAL_GAIN, (u8 *)&(initialgain));
115608 }
115609 else
115610 {
115611 rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
115612 #ifdef CONFIG_DEBUG_CFG80211
115613 - printk("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
115614 + DBG_8192C("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
115615 #endif
115616 }
115617 rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
115618 -
115619 +
115620 if(request->n_channels == 3 &&
115621 request->channels[0]->hw_value == 1 &&
115622 request->channels[1]->hw_value == 6 &&
115623 @@ -1779,37 +2088,72 @@ static int cfg80211_rtw_scan(struct wiphy *wiphy, struct net_device *ndev,
115624 }
115625 }
115626 }
115627 + #endif //CONFIG_P2P
115628
115629 if(request->ie && request->ie_len>0)
115630 {
115631 - rtw_cfg80211_set_probe_req_wpsp2pie( ndev, (u8 *)request->ie, request->ie_len );
115632 + rtw_cfg80211_set_probe_req_wpsp2pie(padapter, (u8 *)request->ie, request->ie_len );
115633 }
115634
115635 if (pmlmepriv->LinkDetectInfo.bBusyTraffic == _TRUE)
115636 {
115637 - printk("%s, bBusyTraffic == _TRUE\n", __func__);
115638 + DBG_8192C("%s, bBusyTraffic == _TRUE\n", __func__);
115639 need_indicate_scan_done = _TRUE;
115640 goto check_need_indicate_scan_done;
115641 - }
115642 + }
115643 + if (rtw_is_scan_deny(padapter)){
115644 + DBG_871X(FUNC_ADPT_FMT ": scan deny\n", FUNC_ADPT_ARG(padapter));
115645 + need_indicate_scan_done = _TRUE;
115646 + goto check_need_indicate_scan_done;
115647 + }
115648 +
115649 +#ifdef CONFIG_CONCURRENT_MODE
115650 + if(pbuddy_mlmepriv && (pbuddy_mlmepriv->LinkDetectInfo.bBusyTraffic == _TRUE))
115651 + {
115652 + DBG_8192C("%s, bBusyTraffic == _TRUE at buddy_intf\n", __func__);
115653 + need_indicate_scan_done = _TRUE;
115654 + goto check_need_indicate_scan_done;
115655 + }
115656 +#endif //CONFIG_CONCURRENT_MODE
115657
115658 if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
115659 {
115660 - printk("%s, fwstate=0x%x\n", __func__, pmlmepriv->fw_state);
115661 + DBG_8192C("%s, fwstate=0x%x\n", __func__, pmlmepriv->fw_state);
115662 need_indicate_scan_done = _TRUE;
115663 goto check_need_indicate_scan_done;
115664 }
115665
115666 +#ifdef CONFIG_CONCURRENT_MODE
115667 + if (check_buddy_fwstate(padapter,
115668 + _FW_UNDER_SURVEY|_FW_UNDER_LINKING|WIFI_UNDER_WPS) == _TRUE)
115669 + {
115670 + if(check_buddy_fwstate(padapter, _FW_UNDER_SURVEY))
115671 + {
115672 + DBG_8192C("scanning_via_buddy_intf\n");
115673 + pmlmepriv->scanning_via_buddy_intf = _TRUE;
115674 + }
115675 +
115676 + DBG_8192C("buddy_intf's mlme state:0x%x\n", pbuddy_mlmepriv->fw_state);
115677 +
115678 + need_indicate_scan_done = _TRUE;
115679 + goto check_need_indicate_scan_done;
115680 + }
115681 +#endif
115682 +
115683
115684 #ifdef CONFIG_P2P
115685 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
115686 + if( pwdinfo->driver_interface == DRIVER_CFG80211 )
115687 {
115688 - rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
115689 - rtw_free_network_queue(padapter, _TRUE);
115690 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
115691 + {
115692 + rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
115693 + rtw_free_network_queue(padapter, _TRUE);
115694
115695 - if(social_channel == 0)
115696 - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
115697 - else
115698 - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_SOCIAL_LAST);
115699 + if(social_channel == 0)
115700 + rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
115701 + else
115702 + rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_SOCIAL_LAST);
115703 + }
115704 }
115705 #endif //CONFIG_P2P
115706
115707 @@ -1818,20 +2162,38 @@ static int cfg80211_rtw_scan(struct wiphy *wiphy, struct net_device *ndev,
115708 //parsing request ssids, n_ssids
115709 for (i = 0; i < request->n_ssids && i < RTW_SSID_SCAN_AMOUNT; i++) {
115710 #ifdef CONFIG_DEBUG_CFG80211
115711 - printk("ssid=%s, len=%d\n", ssids[i].ssid, ssids[i].ssid_len);
115712 + DBG_8192C("ssid=%s, len=%d\n", ssids[i].ssid, ssids[i].ssid_len);
115713 #endif
115714 _rtw_memcpy(ssid[i].Ssid, ssids[i].ssid, ssids[i].ssid_len);
115715 ssid[i].SsidLength = ssids[i].ssid_len;
115716 }
115717
115718
115719 -#ifdef CONFIG_DEBUG_CFG80211
115720 - //parsing channels, n_channels
115721 - DBG_871X("%s n_channels:%u\n", __FUNCTION__, request->n_channels);
115722 -#endif
115723 + /* parsing channels, n_channels */
115724 + _rtw_memset(ch, 0, sizeof(struct rtw_ieee80211_channel)*RTW_CHANNEL_SCAN_AMOUNT);
115725 + for (i=0;i<request->n_channels && i<RTW_CHANNEL_SCAN_AMOUNT;i++) {
115726 + #ifdef CONFIG_DEBUG_CFG80211
115727 + DBG_871X(FUNC_ADPT_FMT CHAN_FMT"\n", FUNC_ADPT_ARG(padapter), CHAN_ARG(request->channels[i]));
115728 + #endif
115729 + ch[i].hw_value = request->channels[i]->hw_value;
115730 + ch[i].flags = request->channels[i]->flags;
115731 + }
115732
115733 - _enter_critical_bh(&pmlmepriv->lock, &irqL);
115734 - _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT);
115735 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
115736 + if (request->n_channels == 1) {
115737 + for(i=1;i<survey_times_for_one_ch;i++)
115738 + _rtw_memcpy(&ch[i], &ch[0], sizeof(struct rtw_ieee80211_channel));
115739 + _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, ch, survey_times_for_one_ch);
115740 + } else if (request->n_channels == 2) {
115741 + _rtw_memcpy(&ch[3], &ch[1], sizeof(struct rtw_ieee80211_channel));
115742 + for(i=1;i<survey_times;i++) {
115743 + _rtw_memcpy(&ch[i], &ch[0], sizeof(struct rtw_ieee80211_channel));
115744 + _rtw_memcpy(&ch[i+3], &ch[3], sizeof(struct rtw_ieee80211_channel));
115745 + }
115746 + _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, ch, survey_times * 2);
115747 + } else {
115748 + _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, NULL, 0);
115749 + }
115750 _exit_critical_bh(&pmlmepriv->lock, &irqL);
115751
115752
115753 @@ -1881,11 +2243,11 @@ static int cfg80211_rtw_set_wiphy_params(struct wiphy *wiphy, u32 changed)
115754 return ret;
115755 }
115756 #endif
115757 - printk("%s\n", __func__);
115758 + DBG_8192C("%s\n", __func__);
115759 return 0;
115760 }
115761
115762 -static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *dev,
115763 +static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
115764 struct cfg80211_ibss_params *params)
115765 {
115766 #if 0
115767 @@ -1908,11 +2270,11 @@ static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *dev,
115768
115769 return iwm_send_mlme_profile(iwm);
115770 #endif
115771 - printk("%s\n", __func__);
115772 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
115773 return 0;
115774 }
115775
115776 -static int cfg80211_rtw_leave_ibss(struct wiphy *wiphy, struct net_device *dev)
115777 +static int cfg80211_rtw_leave_ibss(struct wiphy *wiphy, struct net_device *ndev)
115778 {
115779 #if 0
115780 struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
115781 @@ -1920,14 +2282,13 @@ static int cfg80211_rtw_leave_ibss(struct wiphy *wiphy, struct net_device *dev)
115782 if (iwm->umac_profile_active)
115783 return iwm_invalidate_mlme_profile(iwm);
115784 #endif
115785 - printk("%s\n", __func__);
115786 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
115787 return 0;
115788 }
115789
115790 static int rtw_cfg80211_set_wpa_version(struct security_priv *psecuritypriv, u32 wpa_version)
115791 {
115792 - printk("%s, wpa_version=%d\n", __func__, wpa_version);
115793 -
115794 + DBG_8192C("%s, wpa_version=%d\n", __func__, wpa_version);
115795
115796 if (!wpa_version) {
115797 psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
115798 @@ -1954,7 +2315,7 @@ static int rtw_cfg80211_set_wpa_version(struct security_priv *psecuritypriv, u32
115799 static int rtw_cfg80211_set_auth_type(struct security_priv *psecuritypriv,
115800 enum nl80211_auth_type sme_auth_type)
115801 {
115802 - printk("%s, nl80211_auth_type=%d\n", __func__, sme_auth_type);
115803 + DBG_8192C("%s, nl80211_auth_type=%d\n", __func__, sme_auth_type);
115804
115805
115806 switch (sme_auth_type) {
115807 @@ -1995,7 +2356,7 @@ static int rtw_cfg80211_set_cipher(struct security_priv *psecuritypriv, u32 ciph
115808 u32 *profile_cipher = ucast ? &psecuritypriv->dot11PrivacyAlgrthm :
115809 &psecuritypriv->dot118021XGrpPrivacy;
115810
115811 - printk("%s, ucast=%d, cipher=0x%x\n", __func__, ucast, cipher);
115812 + DBG_8192C("%s, ucast=%d, cipher=0x%x\n", __func__, ucast, cipher);
115813
115814
115815 if (!cipher) {
115816 @@ -2026,7 +2387,7 @@ static int rtw_cfg80211_set_cipher(struct security_priv *psecuritypriv, u32 ciph
115817 ndisencryptstatus = Ndis802_11Encryption3Enabled;
115818 break;
115819 default:
115820 - printk("Unsupported cipher: 0x%x\n", cipher);
115821 + DBG_8192C("Unsupported cipher: 0x%x\n", cipher);
115822 return -ENOTSUPP;
115823 }
115824
115825 @@ -2043,7 +2404,7 @@ static int rtw_cfg80211_set_cipher(struct security_priv *psecuritypriv, u32 ciph
115826
115827 static int rtw_cfg80211_set_key_mgt(struct security_priv *psecuritypriv, u32 key_mgt)
115828 {
115829 - printk("%s, key_mgt=0x%x\n", __func__, key_mgt);
115830 + DBG_8192C("%s, key_mgt=0x%x\n", __func__, key_mgt);
115831
115832 if (key_mgt == WLAN_AKM_SUITE_8021X)
115833 //*auth_type = UMAC_AUTH_TYPE_8021X;
115834 @@ -2051,7 +2412,7 @@ static int rtw_cfg80211_set_key_mgt(struct security_priv *psecuritypriv, u32 key
115835 else if (key_mgt == WLAN_AKM_SUITE_PSK) {
115836 psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
115837 } else {
115838 - printk("Invalid key mgt: 0x%x\n", key_mgt);
115839 + DBG_8192C("Invalid key mgt: 0x%x\n", key_mgt);
115840 //return -EINVAL;
115841 }
115842
115843 @@ -2064,230 +2425,225 @@ static int rtw_cfg80211_set_wpa_ie(_adapter *padapter, u8 *pie, size_t ielen)
115844 u32 left;
115845 int group_cipher = 0, pairwise_cipher = 0;
115846 int ret = 0;
115847 -#ifdef CONFIG_P2P
115848 - struct wifidirect_info* pwdinfo = &padapter->wdinfo;
115849 -#endif //CONFIG_P2P
115850 int wpa_ielen=0;
115851 int wpa2_ielen=0;
115852 u8 *pwpa, *pwpa2;
115853 + u8 null_addr[]= {0,0,0,0,0,0};
115854
115855 + if (pie == NULL || !ielen) {
115856 + /* Treat this as normal case, but need to clear WIFI_UNDER_WPS */
115857 + _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
115858 + goto exit;
115859 + }
115860
115861 - if((ielen > MAX_WPA_IE_LEN+MAX_WPS_IE_LEN+MAX_P2P_IE_LEN) || (pie == NULL)){
115862 - padapter->securitypriv.wps_phase = _FALSE;
115863 - if(pie == NULL)
115864 - return ret;
115865 - else
115866 - return -EINVAL;
115867 + if (ielen > MAX_WPA_IE_LEN+MAX_WPS_IE_LEN+MAX_P2P_IE_LEN) {
115868 + ret = -EINVAL;
115869 + goto exit;
115870 }
115871
115872 - if(ielen)
115873 - {
115874 - buf = rtw_zmalloc(ielen);
115875 - if (buf == NULL){
115876 - ret = -ENOMEM;
115877 - goto exit;
115878 - }
115879 -
115880 - _rtw_memcpy(buf, pie , ielen);
115881 + buf = rtw_zmalloc(ielen);
115882 + if (buf == NULL){
115883 + ret = -ENOMEM;
115884 + goto exit;
115885 + }
115886
115887 - //dump
115888 - {
115889 - int i;
115890 - DBG_8192C("set wpa_ie(length:%d):\n", ielen);
115891 - for(i=0;i<ielen;i=i+8)
115892 - 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]);
115893 - }
115894 -
115895 - pos = buf;
115896 - if(ielen < RSN_HEADER_LEN){
115897 - RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("Ie len too short %d\n", ielen));
115898 - ret = -1;
115899 - goto exit;
115900 - }
115901 + _rtw_memcpy(buf, pie , ielen);
115902
115903 -#if 0
115904 - pos += RSN_HEADER_LEN;
115905 - left = ielen - RSN_HEADER_LEN;
115906 -
115907 - if (left >= RSN_SELECTOR_LEN){
115908 - pos += RSN_SELECTOR_LEN;
115909 - left -= RSN_SELECTOR_LEN;
115910 - }
115911 - else if (left > 0){
115912 - RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("Ie length mismatch, %u too much \n", left));
115913 - ret =-1;
115914 - goto exit;
115915 - }
115916 -#endif
115917 -
115918 - pwpa = rtw_get_wpa_ie(buf, &wpa_ielen, ielen);
115919 - pwpa2 = rtw_get_wpa2_ie(buf, &wpa2_ielen, ielen);
115920 -
115921 - if(pwpa && wpa_ielen>0)
115922 + //dump
115923 + {
115924 + int i;
115925 + DBG_8192C("set wpa_ie(length:%zu):\n", ielen);
115926 + for(i=0;i<ielen;i=i+8)
115927 + 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]);
115928 + }
115929 +
115930 + pos = buf;
115931 + if(ielen < RSN_HEADER_LEN){
115932 + RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("Ie len too short %d\n", ielen));
115933 + ret = -1;
115934 + goto exit;
115935 + }
115936 +
115937 + pwpa = rtw_get_wpa_ie(buf, &wpa_ielen, ielen);
115938 + if(pwpa && wpa_ielen>0)
115939 + {
115940 + if(rtw_parse_wpa_ie(pwpa, wpa_ielen+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
115941 {
115942 - if(rtw_parse_wpa_ie(pwpa, wpa_ielen+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
115943 - {
115944 - padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
115945 - padapter->securitypriv.ndisauthtype=Ndis802_11AuthModeWPAPSK;
115946 - _rtw_memcpy(padapter->securitypriv.supplicant_ie, &pwpa[0], wpa_ielen+2);
115947 + padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
115948 + padapter->securitypriv.ndisauthtype=Ndis802_11AuthModeWPAPSK;
115949 + _rtw_memcpy(padapter->securitypriv.supplicant_ie, &pwpa[0], wpa_ielen+2);
115950
115951 - printk("got wpa_ie\n");
115952 - }
115953 + DBG_8192C("got wpa_ie, wpa_ielen:%u\n", wpa_ielen);
115954 }
115955 -
115956 - if(pwpa2 && wpa2_ielen>0)
115957 + }
115958 +
115959 + pwpa2 = rtw_get_wpa2_ie(buf, &wpa2_ielen, ielen);
115960 + if(pwpa2 && wpa2_ielen>0)
115961 + {
115962 + if(rtw_parse_wpa2_ie(pwpa2, wpa2_ielen+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
115963 {
115964 - if(rtw_parse_wpa2_ie(pwpa2, wpa2_ielen+2, &group_cipher, &pairwise_cipher) == _SUCCESS)
115965 - {
115966 - padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
115967 - padapter->securitypriv.ndisauthtype=Ndis802_11AuthModeWPA2PSK;
115968 - _rtw_memcpy(padapter->securitypriv.supplicant_ie, &pwpa2[0], wpa2_ielen+2);
115969 + padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
115970 + padapter->securitypriv.ndisauthtype=Ndis802_11AuthModeWPA2PSK;
115971 + _rtw_memcpy(padapter->securitypriv.supplicant_ie, &pwpa2[0], wpa2_ielen+2);
115972
115973 - printk("got wpa2_ie\n");
115974 - }
115975 + DBG_8192C("got wpa2_ie, wpa2_ielen:%u\n", wpa2_ielen);
115976 }
115977 -
115978 - switch(group_cipher)
115979 - {
115980 - case WPA_CIPHER_NONE:
115981 - padapter->securitypriv.dot118021XGrpPrivacy=_NO_PRIVACY_;
115982 - padapter->securitypriv.ndisencryptstatus=Ndis802_11EncryptionDisabled;
115983 - break;
115984 - case WPA_CIPHER_WEP40:
115985 - padapter->securitypriv.dot118021XGrpPrivacy=_WEP40_;
115986 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
115987 - break;
115988 - case WPA_CIPHER_TKIP:
115989 - padapter->securitypriv.dot118021XGrpPrivacy=_TKIP_;
115990 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
115991 - break;
115992 - case WPA_CIPHER_CCMP:
115993 - padapter->securitypriv.dot118021XGrpPrivacy=_AES_;
115994 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
115995 - break;
115996 - case WPA_CIPHER_WEP104:
115997 - padapter->securitypriv.dot118021XGrpPrivacy=_WEP104_;
115998 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
115999 - break;
116000 + }
116001 +
116002 + if (group_cipher == 0)
116003 + {
116004 + group_cipher = WPA_CIPHER_NONE;
116005 + }
116006 + if (pairwise_cipher == 0)
116007 + {
116008 + pairwise_cipher = WPA_CIPHER_NONE;
116009 + }
116010 +
116011 + switch(group_cipher)
116012 + {
116013 + case WPA_CIPHER_NONE:
116014 + padapter->securitypriv.dot118021XGrpPrivacy=_NO_PRIVACY_;
116015 + padapter->securitypriv.ndisencryptstatus=Ndis802_11EncryptionDisabled;
116016 + break;
116017 + case WPA_CIPHER_WEP40:
116018 + padapter->securitypriv.dot118021XGrpPrivacy=_WEP40_;
116019 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116020 + break;
116021 + case WPA_CIPHER_TKIP:
116022 + padapter->securitypriv.dot118021XGrpPrivacy=_TKIP_;
116023 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
116024 + break;
116025 + case WPA_CIPHER_CCMP:
116026 + padapter->securitypriv.dot118021XGrpPrivacy=_AES_;
116027 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
116028 + break;
116029 + case WPA_CIPHER_WEP104:
116030 + padapter->securitypriv.dot118021XGrpPrivacy=_WEP104_;
116031 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116032 + break;
116033 + }
116034 +
116035 + switch(pairwise_cipher)
116036 + {
116037 + case WPA_CIPHER_NONE:
116038 + padapter->securitypriv.dot11PrivacyAlgrthm=_NO_PRIVACY_;
116039 + padapter->securitypriv.ndisencryptstatus=Ndis802_11EncryptionDisabled;
116040 + break;
116041 + case WPA_CIPHER_WEP40:
116042 + padapter->securitypriv.dot11PrivacyAlgrthm=_WEP40_;
116043 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116044 + break;
116045 + case WPA_CIPHER_TKIP:
116046 + padapter->securitypriv.dot11PrivacyAlgrthm=_TKIP_;
116047 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
116048 + break;
116049 + case WPA_CIPHER_CCMP:
116050 + padapter->securitypriv.dot11PrivacyAlgrthm=_AES_;
116051 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
116052 + break;
116053 + case WPA_CIPHER_WEP104:
116054 + padapter->securitypriv.dot11PrivacyAlgrthm=_WEP104_;
116055 + padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116056 + break;
116057 + }
116058 +
116059 + {/* handle wps_ie */
116060 + uint wps_ielen;
116061 + u8 *wps_ie;
116062 +
116063 + wps_ie = rtw_get_wps_ie(buf, ielen, NULL, &wps_ielen);
116064 + if (wps_ie && wps_ielen > 0) {
116065 + DBG_8192C("got wps_ie, wps_ielen:%u\n", wps_ielen);
116066 + padapter->securitypriv.wps_ie_len = wps_ielen<MAX_WPS_IE_LEN?wps_ielen:MAX_WPS_IE_LEN;
116067 + _rtw_memcpy(padapter->securitypriv.wps_ie, wps_ie, padapter->securitypriv.wps_ie_len);
116068 + set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
116069 + } else {
116070 + _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
116071 }
116072 + }
116073 +
116074 + #ifdef CONFIG_P2P
116075 + {//check p2p_ie for assoc req;
116076 + uint p2p_ielen=0;
116077 + u8 *p2p_ie;
116078 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
116079
116080 - switch(pairwise_cipher)
116081 + if((p2p_ie=rtw_get_p2p_ie(buf, ielen, NULL, &p2p_ielen)))
116082 {
116083 - case WPA_CIPHER_NONE:
116084 - padapter->securitypriv.dot11PrivacyAlgrthm=_NO_PRIVACY_;
116085 - padapter->securitypriv.ndisencryptstatus=Ndis802_11EncryptionDisabled;
116086 - break;
116087 - case WPA_CIPHER_WEP40:
116088 - padapter->securitypriv.dot11PrivacyAlgrthm=_WEP40_;
116089 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116090 - break;
116091 - case WPA_CIPHER_TKIP:
116092 - padapter->securitypriv.dot11PrivacyAlgrthm=_TKIP_;
116093 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
116094 - break;
116095 - case WPA_CIPHER_CCMP:
116096 - padapter->securitypriv.dot11PrivacyAlgrthm=_AES_;
116097 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
116098 - break;
116099 - case WPA_CIPHER_WEP104:
116100 - padapter->securitypriv.dot11PrivacyAlgrthm=_WEP104_;
116101 - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
116102 - break;
116103 - }
116104 -
116105 + #ifdef CONFIG_DEBUG_CFG80211
116106 + DBG_8192C("%s p2p_assoc_req_ielen=%d\n", __FUNCTION__, p2p_ielen);
116107 + #endif
116108
116109 -
116110 - padapter->securitypriv.wps_phase = _FALSE;
116111 - {//set wps_ie
116112 - u16 cnt = 0;
116113 - u8 eid, wps_oui[4]={0x0,0x50,0xf2,0x04};
116114 - uint wps_ielen=0;
116115 - u8 *pwps;
116116 -
116117 - pwps = rtw_get_wps_ie(buf, ielen, NULL, &wps_ielen);
116118 -
116119 - //while( cnt < ielen )
116120 - while( cnt < wps_ielen )
116121 + if(pmlmepriv->p2p_assoc_req_ie)
116122 {
116123 - //eid = buf[cnt];
116124 - eid = pwps[cnt];
116125 -
116126 - if((eid==_VENDOR_SPECIFIC_IE_)&&(_rtw_memcmp(&pwps[cnt+2], wps_oui, 4)==_TRUE))
116127 - {
116128 - DBG_8192C("SET WPS_IE\n");
116129 + u32 free_len = pmlmepriv->p2p_assoc_req_ie_len;
116130 + pmlmepriv->p2p_assoc_req_ie_len = 0;
116131 + rtw_mfree(pmlmepriv->p2p_assoc_req_ie, free_len);
116132 + pmlmepriv->p2p_assoc_req_ie = NULL;
116133 + }
116134
116135 - padapter->securitypriv.wps_ie_len = ( (pwps[cnt+1]+2) < (MAX_WPA_IE_LEN<<2)) ? (pwps[cnt+1]+2):(MAX_WPA_IE_LEN<<2);
116136 -
116137 - _rtw_memcpy(padapter->securitypriv.wps_ie, &pwps[cnt], padapter->securitypriv.wps_ie_len);
116138 -
116139 - if(pwpa==NULL && pwpa2==NULL)
116140 - {
116141 - padapter->securitypriv.wps_phase = _TRUE;
116142 -
116143 - DBG_8192C("SET WPS_IE, wps_phase==_TRUE\n");
116144 - }
116145 -#ifdef CONFIG_P2P
116146 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_OK))
116147 - {
116148 - //rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_ING);
116149 - }
116150 -#endif //CONFIG_P2P
116151 + pmlmepriv->p2p_assoc_req_ie = rtw_malloc(p2p_ielen);
116152 + if ( pmlmepriv->p2p_assoc_req_ie == NULL) {
116153 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
116154 + goto exit;
116155 + }
116156 + _rtw_memcpy(pmlmepriv->p2p_assoc_req_ie, p2p_ie, p2p_ielen);
116157 + pmlmepriv->p2p_assoc_req_ie_len = p2p_ielen;
116158 + }
116159 + }
116160 + #endif //CONFIG_P2P
116161
116162 - cnt += pwps[cnt+1]+2;
116163 -
116164 - break;
116165 - } else {
116166 - cnt += pwps[cnt+1]+2; //goto next
116167 - }
116168 - }
116169 - }//set wps_ie
116170 + #ifdef CONFIG_WFD
116171 + {//check wfd_ie for assoc req;
116172 + uint wfd_ielen=0;
116173 + u8 *wfd_ie;
116174 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
116175
116176 - {//check p2p_ie for assoc req;
116177 - uint p2p_ielen=0;
116178 - u8 *p2p_ie;
116179 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
116180 + if(rtw_get_wfd_ie(buf, ielen, NULL, &wfd_ielen))
116181 + {
116182 + #ifdef CONFIG_DEBUG_CFG80211
116183 + DBG_8192C("%s wfd_assoc_req_ielen=%d\n", __FUNCTION__, wfd_ielen);
116184 + #endif
116185
116186 - if((p2p_ie=rtw_get_p2p_ie(buf, ielen, NULL, &p2p_ielen)))
116187 + if(pmlmepriv->wfd_assoc_req_ie)
116188 {
116189 - #ifdef CONFIG_DEBUG_CFG80211
116190 - printk("%s p2p_assoc_req_ielen=%d\n", __FUNCTION__, p2p_ielen);
116191 - #endif
116192 -
116193 - if(pmlmepriv->p2p_assoc_req_ie)
116194 - {
116195 - u32 free_len = pmlmepriv->p2p_assoc_req_ie_len;
116196 - pmlmepriv->p2p_assoc_req_ie_len = 0;
116197 - rtw_mfree(pmlmepriv->p2p_assoc_req_ie, free_len);
116198 - pmlmepriv->p2p_assoc_req_ie = NULL;
116199 - }
116200 + u32 free_len = pmlmepriv->wfd_assoc_req_ie_len;
116201 + pmlmepriv->wfd_assoc_req_ie_len = 0;
116202 + rtw_mfree(pmlmepriv->wfd_assoc_req_ie, free_len);
116203 + pmlmepriv->wfd_assoc_req_ie = NULL;
116204 + }
116205
116206 - pmlmepriv->p2p_assoc_req_ie = rtw_malloc(p2p_ielen);
116207 - if ( pmlmepriv->p2p_assoc_req_ie == NULL) {
116208 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
116209 - goto exit;
116210 -
116211 - }
116212 - _rtw_memcpy(pmlmepriv->p2p_assoc_req_ie, p2p_ie, p2p_ielen);
116213 - pmlmepriv->p2p_assoc_req_ie_len = p2p_ielen;
116214 -
116215 + pmlmepriv->wfd_assoc_req_ie = rtw_malloc(wfd_ielen);
116216 + if ( pmlmepriv->wfd_assoc_req_ie == NULL) {
116217 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
116218 + goto exit;
116219 }
116220 + rtw_get_wfd_ie(buf, ielen, pmlmepriv->wfd_assoc_req_ie, &pmlmepriv->wfd_assoc_req_ie_len);
116221 }
116222 -
116223 }
116224 -
116225 -
116226 + #endif //CONFIG_WFD
116227 +
116228 + //TKIP and AES disallow multicast packets until installing group key
116229 + if(padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_
116230 + || padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_WTMIC_
116231 + || padapter->securitypriv.dot11PrivacyAlgrthm == _AES_)
116232 + //WPS open need to enable multicast
116233 + //|| check_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS) == _TRUE)
116234 + rtw_hal_set_hwreg(padapter, HW_VAR_OFF_RCR_AM, null_addr);
116235 +
116236 RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
116237 - ("rtw_set_wpa_ie: pairwise_cipher=0x%08x padapter->securitypriv.ndisencryptstatus=%d padapter->securitypriv.ndisauthtype=%d\n",
116238 - pairwise_cipher, padapter->securitypriv.ndisencryptstatus, padapter->securitypriv.ndisauthtype));
116239 -
116240 -exit:
116241 + ("rtw_set_wpa_ie: pairwise_cipher=0x%08x padapter->securitypriv.ndisencryptstatus=%d padapter->securitypriv.ndisauthtype=%d\n",
116242 + pairwise_cipher, padapter->securitypriv.ndisencryptstatus, padapter->securitypriv.ndisauthtype));
116243
116244 - if (buf) rtw_mfree(buf, ielen);
116245 -
116246 - return ret;
116247 +exit:
116248 + if (buf)
116249 + rtw_mfree(buf, ielen);
116250 + if (ret)
116251 + _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
116252 + return ret;
116253 }
116254
116255 -static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *dev,
116256 +static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
116257 struct cfg80211_connect_params *sme)
116258 {
116259 int ret=0;
116260 @@ -2306,10 +2662,9 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *dev,
116261 struct security_priv *psecuritypriv = &padapter->securitypriv;
116262 _queue *queue = &pmlmepriv->scanned_queue;
116263
116264 - printk("\n=>%s\n",__FUNCTION__);
116265 -
116266 -
116267 - printk("privacy=%d, key=%p, key_len=%d, key_idx=%d\n", sme->privacy, sme->key, sme->key_len, sme->key_idx);
116268 + DBG_871X("=>"FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
116269 + DBG_871X("privacy=%d, key=%p, key_len=%d, key_idx=%d\n",
116270 + sme->privacy, sme->key, sme->key_len, sme->key_idx);
116271
116272
116273 if(wdev_to_priv(padapter->rtw_wdev)->block == _TRUE)
116274 @@ -2319,6 +2674,22 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *dev,
116275 goto exit;
116276 }
116277
116278 +#ifdef CONFIG_PLATFORM_MSTAR
116279 + printk("MStar Android!\n");
116280 + if((wdev_to_priv(padapter->rtw_wdev))->bandroid_scan == _FALSE)
116281 + {
116282 +#ifdef CONFIG_P2P
116283 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
116284 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
116285 +#endif //CONFIG_P2P
116286 + {
116287 + ret = -EBUSY;
116288 + printk("Android hasn't attached yet!\n");
116289 + goto exit;
116290 + }
116291 + }
116292 +#endif
116293 +
116294 if(_FAIL == rtw_pwr_wakeup(padapter)) {
116295 ret= -EPERM;
116296 goto exit;
116297 @@ -2329,6 +2700,17 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *dev,
116298 goto exit;
116299 }
116300
116301 +#ifdef CONFIG_CONCURRENT_MODE
116302 + if (check_buddy_fwstate(padapter, _FW_UNDER_LINKING) == _TRUE) {
116303 + DBG_8192C("%s, but buddy_intf is under linking\n", __FUNCTION__);
116304 + ret = -EINVAL;
116305 + goto exit;
116306 + }
116307 + if (check_buddy_fwstate(padapter, _FW_UNDER_SURVEY) == _TRUE) {
116308 + rtw_scan_abort(padapter->pbuddy_adapter);
116309 + }
116310 +#endif
116311 +
116312 if (!sme->ssid || !sme->ssid_len)
116313 {
116314 ret = -EINVAL;
116315 @@ -2341,104 +2723,25 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *dev,
116316 goto exit;
116317 }
116318
116319 -
116320 _rtw_memset(&ndis_ssid, 0, sizeof(NDIS_802_11_SSID));
116321 ndis_ssid.SsidLength = sme->ssid_len;
116322 _rtw_memcpy(ndis_ssid.Ssid, sme->ssid, sme->ssid_len);
116323
116324 - DBG_8192C("ssid=%s, len=%d\n", ndis_ssid.Ssid, sme->ssid_len);
116325 + DBG_8192C("ssid=%s, len=%zu\n", ndis_ssid.Ssid, sme->ssid_len);
116326
116327
116328 if (sme->bssid)
116329 - printk("bssid="MAC_FMT"\n", MAC_ARG(sme->bssid));
116330 + DBG_8192C("bssid="MAC_FMT"\n", MAC_ARG(sme->bssid));
116331
116332
116333 - if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
116334 - {
116335 + if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE) {
116336 ret = -EBUSY;
116337 - printk("%s, fw_state=0x%x, goto exit\n", __FUNCTION__, pmlmepriv->fw_state);
116338 + DBG_8192C("%s, fw_state=0x%x, goto exit\n", __FUNCTION__, pmlmepriv->fw_state);
116339 goto exit;
116340 - }
116341 -
116342 -
116343 - _enter_critical_bh(&queue->lock, &irqL);
116344 -
116345 - phead = get_list_head(queue);
116346 - pmlmepriv->pscanned = get_next(phead);
116347 -
116348 - while (1)
116349 - {
116350 - if (rtw_end_of_queue_search(phead, pmlmepriv->pscanned) == _TRUE)
116351 - {
116352 - break;
116353 - }
116354 -
116355 - pnetwork = LIST_CONTAINOR(pmlmepriv->pscanned, struct wlan_network, list);
116356 - pmlmepriv->pscanned = get_next(pmlmepriv->pscanned);
116357 -
116358 - dst_ssid = pnetwork->network.Ssid.Ssid;
116359 - dst_bssid = pnetwork->network.MacAddress;
116360 -
116361 - if(sme->bssid) {
116362 - if(_rtw_memcmp(pnetwork->network.MacAddress, sme->bssid, ETH_ALEN) == _FALSE)
116363 - continue;
116364 - }
116365 -
116366 - if(sme->ssid && sme->ssid_len) {
116367 - if( pnetwork->network.Ssid.SsidLength != sme->ssid_len
116368 - || _rtw_memcmp(pnetwork->network.Ssid.Ssid, sme->ssid, sme->ssid_len) == _FALSE
116369 - )
116370 - continue;
116371 - }
116372 -
116373 -
116374 - if (sme->bssid)
116375 - {
116376 - src_bssid = sme->bssid;
116377 -
116378 - if ((_rtw_memcmp(dst_bssid, src_bssid, ETH_ALEN)) == _TRUE)
116379 - {
116380 - printk("matched by bssid\n");
116381 -
116382 - ndis_ssid.SsidLength = pnetwork->network.Ssid.SsidLength;
116383 - _rtw_memcpy(ndis_ssid.Ssid, pnetwork->network.Ssid.Ssid, pnetwork->network.Ssid.SsidLength);
116384 -
116385 - matched=_TRUE;
116386 - break;
116387 - }
116388 -
116389 - }
116390 - else if (sme->ssid && sme->ssid_len)
116391 - {
116392 - src_ssid = ndis_ssid.Ssid;
116393 -
116394 - if ((_rtw_memcmp(dst_ssid, src_ssid, ndis_ssid.SsidLength) == _TRUE) &&
116395 - (pnetwork->network.Ssid.SsidLength==ndis_ssid.SsidLength))
116396 - {
116397 - printk("matched by ssid\n");
116398 - matched=_TRUE;
116399 - break;
116400 - }
116401 - }
116402 -
116403 - }
116404 -
116405 - _exit_critical_bh(&queue->lock, &irqL);
116406 -
116407 - if((matched == _FALSE) || (pnetwork== NULL))
116408 - {
116409 - ret = -ENOENT;
116410 - printk("connect, matched == _FALSE, goto exit\n");
116411 - goto exit;
116412 }
116413 -
116414 -
116415 - if (rtw_set_802_11_infrastructure_mode(padapter, pnetwork->network.InfrastructureMode) == _FALSE)
116416 - {
116417 - ret = -EPERM;
116418 - goto exit;
116419 + if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) {
116420 + rtw_scan_abort(padapter);
116421 }
116422 -
116423
116424 psecuritypriv->ndisencryptstatus = Ndis802_11EncryptionDisabled;
116425 psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
116426 @@ -2455,6 +2758,11 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *dev,
116427 if (ret < 0)
116428 goto exit;
116429
116430 + DBG_8192C("%s, ie_len=%zu\n", __func__, sme->ie_len);
116431 +
116432 + ret = rtw_cfg80211_set_wpa_ie(padapter, sme->ie, sme->ie_len);
116433 + if (ret < 0)
116434 + goto exit;
116435
116436 if (sme->crypto.n_ciphers_pairwise) {
116437 ret = rtw_cfg80211_set_cipher(psecuritypriv, sme->crypto.ciphers_pairwise[0], _TRUE);
116438 @@ -2534,24 +2842,17 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *dev,
116439 goto exit;
116440 }
116441
116442 - printk("%s, ie_len=%d\n", __func__, sme->ie_len);
116443 -
116444 - ret = rtw_cfg80211_set_wpa_ie(padapter, sme->ie, sme->ie_len);
116445 - if (ret < 0)
116446 - goto exit;
116447 -
116448 authmode = psecuritypriv->ndisauthtype;
116449 rtw_set_802_11_authentication_mode(padapter, authmode);
116450
116451 //rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus);
116452
116453 - if (rtw_set_802_11_ssid(padapter, &ndis_ssid) == _FALSE) {
116454 + if (rtw_set_802_11_connect(padapter, sme->bssid, &ndis_ssid) == _FALSE) {
116455 ret = -1;
116456 goto exit;
116457 }
116458
116459 -
116460 - printk("set ssid:dot11AuthAlgrthm=%d, dot11PrivacyAlgrthm=%d, dot118021XGrpPrivacy=%d\n", psecuritypriv->dot11AuthAlgrthm, psecuritypriv->dot11PrivacyAlgrthm, psecuritypriv->dot118021XGrpPrivacy);
116461 + DBG_8192C("set ssid:dot11AuthAlgrthm=%d, dot11PrivacyAlgrthm=%d, dot118021XGrpPrivacy=%d\n", psecuritypriv->dot11AuthAlgrthm, psecuritypriv->dot11PrivacyAlgrthm, psecuritypriv->dot118021XGrpPrivacy);
116462
116463 exit:
116464
116465 @@ -2560,20 +2861,26 @@ exit:
116466 return ret;
116467 }
116468
116469 -static int cfg80211_rtw_disconnect(struct wiphy *wiphy, struct net_device *dev,
116470 +static int cfg80211_rtw_disconnect(struct wiphy *wiphy, struct net_device *ndev,
116471 u16 reason_code)
116472 {
116473 _adapter *padapter = wiphy_to_adapter(wiphy);
116474
116475 - printk("\n%s\n", __func__);
116476 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
116477 +
116478 + rtw_set_roaming(padapter, 0);
116479
116480 if(check_fwstate(&padapter->mlmepriv, _FW_LINKED))
116481 {
116482 - rtw_disassoc_cmd(padapter);
116483 + rtw_scan_abort(padapter);
116484 + LeaveAllPowerSaveMode(padapter);
116485 + rtw_disassoc_cmd(padapter, 500, _FALSE);
116486
116487 - DBG_871X("%s...call rtw_indicate_disconnect\n ", __FUNCTION__);
116488 + DBG_871X("%s...call rtw_indicate_disconnect\n", __FUNCTION__);
116489
116490 + padapter->mlmepriv.not_indic_disco = _TRUE;
116491 rtw_indicate_disconnect(padapter);
116492 + padapter->mlmepriv.not_indic_disco = _FALSE;
116493
116494 rtw_free_assoc_resources(padapter, 1);
116495 }
116496 @@ -2582,11 +2889,14 @@ static int cfg80211_rtw_disconnect(struct wiphy *wiphy, struct net_device *dev,
116497 }
116498
116499 static int cfg80211_rtw_set_txpower(struct wiphy *wiphy,
116500 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36))
116501 - enum nl80211_tx_power_setting type, int mbm)
116502 -#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36))
116503 - enum tx_power_setting type, int dbm)
116504 -#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36))
116505 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
116506 + struct wireless_dev *wdev,
116507 +#endif
116508 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) || defined(COMPAT_KERNEL_RELEASE)
116509 + enum nl80211_tx_power_setting type, int mbm)
116510 +#else
116511 + enum tx_power_setting type, int dbm)
116512 +#endif
116513 {
116514 #if 0
116515 struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
116516 @@ -2614,44 +2924,47 @@ static int cfg80211_rtw_set_txpower(struct wiphy *wiphy,
116517 return -EOPNOTSUPP;
116518 }
116519 #endif
116520 - printk("%s\n", __func__);
116521 + DBG_8192C("%s\n", __func__);
116522 return 0;
116523 }
116524
116525 -static int cfg80211_rtw_get_txpower(struct wiphy *wiphy, int *dbm)
116526 +static int cfg80211_rtw_get_txpower(struct wiphy *wiphy,
116527 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
116528 + struct wireless_dev *wdev,
116529 +#endif
116530 + int *dbm)
116531 {
116532 //_adapter *padapter = wiphy_to_adapter(wiphy);
116533
116534 - printk("%s\n", __func__);
116535 + DBG_8192C("%s\n", __func__);
116536
116537 *dbm = (12);
116538
116539 return 0;
116540 }
116541
116542 +inline bool rtw_cfg80211_pwr_mgmt(_adapter *adapter)
116543 +{
116544 + struct rtw_wdev_priv *rtw_wdev_priv = wdev_to_priv(adapter->rtw_wdev);
116545 + return rtw_wdev_priv->power_mgmt;
116546 +}
116547 +
116548 static int cfg80211_rtw_set_power_mgmt(struct wiphy *wiphy,
116549 - struct net_device *dev,
116550 + struct net_device *ndev,
116551 bool enabled, int timeout)
116552 {
116553 -#if 0
116554 - struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
116555 - u32 power_index;
116556 -
116557 - if (enabled)
116558 - power_index = IWM_POWER_INDEX_DEFAULT;
116559 - else
116560 - power_index = IWM_POWER_INDEX_MIN;
116561 -
116562 - if (power_index == iwm->conf.power_index)
116563 - return 0;
116564 -
116565 - iwm->conf.power_index = power_index;
116566 + _adapter *padapter = wiphy_to_adapter(wiphy);
116567 + struct rtw_wdev_priv *rtw_wdev_priv = wdev_to_priv(padapter->rtw_wdev);
116568 +
116569 + DBG_871X(FUNC_NDEV_FMT" enabled:%u, timeout:%d\n", FUNC_NDEV_ARG(ndev),
116570 + enabled, timeout);
116571
116572 - return iwm_umac_set_config_fix(iwm, UMAC_PARAM_TBL_CFG_FIX,
116573 - CFG_POWER_INDEX, iwm->conf.power_index);
116574 -#endif
116575 + rtw_wdev_priv->power_mgmt = enabled;
116576
116577 - printk("%s\n", __func__);
116578 + #ifdef CONFIG_LPS
116579 + if (!enabled)
116580 + LPS_Leave(padapter);
116581 + #endif
116582
116583 return 0;
116584 }
116585 @@ -2660,12 +2973,52 @@ static int cfg80211_rtw_set_pmksa(struct wiphy *wiphy,
116586 struct net_device *netdev,
116587 struct cfg80211_pmksa *pmksa)
116588 {
116589 - //struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
116590 - _adapter *padapter = wiphy_to_adapter(wiphy);
116591 + u8 index,blInserted = _FALSE;
116592 + _adapter *padapter = wiphy_to_adapter(wiphy);
116593 + struct security_priv *psecuritypriv = &padapter->securitypriv;
116594 + u8 strZeroMacAddress[ ETH_ALEN ] = { 0x00 };
116595 +
116596 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(netdev));
116597 +
116598 + if ( _rtw_memcmp( pmksa->bssid, strZeroMacAddress, ETH_ALEN ) == _TRUE )
116599 + {
116600 + return -EINVAL;
116601 + }
116602 +
116603 + blInserted = _FALSE;
116604 +
116605 + //overwrite PMKID
116606 + for(index=0 ; index<NUM_PMKID_CACHE; index++)
116607 + {
116608 + if( _rtw_memcmp( psecuritypriv->PMKIDList[index].Bssid, pmksa->bssid, ETH_ALEN) ==_TRUE )
116609 + { // BSSID is matched, the same AP => rewrite with new PMKID.
116610 + DBG_871X(FUNC_NDEV_FMT" BSSID exists in the PMKList.\n", FUNC_NDEV_ARG(netdev));
116611 +
116612 + _rtw_memcpy( psecuritypriv->PMKIDList[index].PMKID, pmksa->pmkid, WLAN_PMKID_LEN);
116613 + psecuritypriv->PMKIDList[index].bUsed = _TRUE;
116614 + psecuritypriv->PMKIDIndex = index+1;
116615 + blInserted = _TRUE;
116616 + break;
116617 + }
116618 + }
116619
116620 - printk("%s\n", __func__);
116621 + if(!blInserted)
116622 + {
116623 + // Find a new entry
116624 + DBG_871X(FUNC_NDEV_FMT" Use the new entry index = %d for this PMKID.\n",
116625 + FUNC_NDEV_ARG(netdev), psecuritypriv->PMKIDIndex );
116626 +
116627 + _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].Bssid, pmksa->bssid, ETH_ALEN);
116628 + _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].PMKID, pmksa->pmkid, WLAN_PMKID_LEN);
116629 +
116630 + psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].bUsed = _TRUE;
116631 + psecuritypriv->PMKIDIndex++ ;
116632 + if(psecuritypriv->PMKIDIndex==16)
116633 + {
116634 + psecuritypriv->PMKIDIndex =0;
116635 + }
116636 + }
116637
116638 - //return iwm_send_pmkid_update(iwm, pmksa, IWM_CMD_PMKID_ADD);
116639 return 0;
116640 }
116641
116642 @@ -2673,28 +3026,45 @@ static int cfg80211_rtw_del_pmksa(struct wiphy *wiphy,
116643 struct net_device *netdev,
116644 struct cfg80211_pmksa *pmksa)
116645 {
116646 - //struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
116647 - _adapter *padapter = wiphy_to_adapter(wiphy);
116648 + u8 index, bMatched = _FALSE;
116649 + _adapter *padapter = wiphy_to_adapter(wiphy);
116650 + struct security_priv *psecuritypriv = &padapter->securitypriv;
116651 +
116652 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(netdev));
116653 +
116654 + for(index=0 ; index<NUM_PMKID_CACHE; index++)
116655 + {
116656 + if( _rtw_memcmp( psecuritypriv->PMKIDList[index].Bssid, pmksa->bssid, ETH_ALEN) ==_TRUE )
116657 + { // BSSID is matched, the same AP => Remove this PMKID information and reset it.
116658 + _rtw_memset( psecuritypriv->PMKIDList[index].Bssid, 0x00, ETH_ALEN );
116659 + _rtw_memset( psecuritypriv->PMKIDList[index].PMKID, 0x00, WLAN_PMKID_LEN );
116660 + psecuritypriv->PMKIDList[index].bUsed = _FALSE;
116661 + bMatched = _TRUE;
116662 + break;
116663 + }
116664 + }
116665
116666 - printk("%s\n", __func__);
116667 + if(_FALSE == bMatched)
116668 + {
116669 + DBG_871X(FUNC_NDEV_FMT" do not have matched BSSID\n"
116670 + , FUNC_NDEV_ARG(netdev));
116671 + return -EINVAL;
116672 + }
116673
116674 - //return iwm_send_pmkid_update(iwm, pmksa, IWM_CMD_PMKID_DEL);
116675 return 0;
116676 }
116677
116678 static int cfg80211_rtw_flush_pmksa(struct wiphy *wiphy,
116679 struct net_device *netdev)
116680 {
116681 - //struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
116682 - _adapter *padapter = wiphy_to_adapter(wiphy);
116683 - struct cfg80211_pmksa pmksa;
116684 + _adapter *padapter = wiphy_to_adapter(wiphy);
116685 + struct security_priv *psecuritypriv = &padapter->securitypriv;
116686
116687 - printk("%s\n", __func__);
116688 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(netdev));
116689
116690 - memset(&pmksa, 0, sizeof(struct cfg80211_pmksa));
116691 + _rtw_memset( &psecuritypriv->PMKIDList[ 0 ], 0x00, sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE );
116692 + psecuritypriv->PMKIDIndex = 0;
116693
116694 -
116695 - //return iwm_send_pmkid_update(iwm, &pmksa, IWM_CMD_PMKID_FLUSH);
116696 return 0;
116697 }
116698
116699 @@ -2705,30 +3075,50 @@ void rtw_cfg80211_indicate_sta_assoc(_adapter *padapter, u8 *pmgmt_frame, uint f
116700 int channel;
116701 struct wireless_dev *pwdev = padapter->rtw_wdev;
116702 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
116703 + struct net_device *ndev = padapter->pnetdev;
116704
116705 - printk("%s\n", __func__);
116706 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
116707
116708 +#if defined(RTW_USE_CFG80211_STA_EVENT) || defined(COMPAT_KERNEL_RELEASE)
116709 + {
116710 + struct station_info sinfo;
116711 + u8 ie_offset;
116712 + if (GetFrameSubType(pmgmt_frame) == WIFI_ASSOCREQ)
116713 + ie_offset = _ASOCREQ_IE_OFFSET_;
116714 + else // WIFI_REASSOCREQ
116715 + ie_offset = _REASOCREQ_IE_OFFSET_;
116716 +
116717 + sinfo.filled = 0;
116718 + sinfo.filled = STATION_INFO_ASSOC_REQ_IES;
116719 + sinfo.assoc_req_ies = pmgmt_frame + WLAN_HDR_A3_LEN + ie_offset;
116720 + sinfo.assoc_req_ies_len = frame_len - WLAN_HDR_A3_LEN - ie_offset;
116721 + cfg80211_new_sta(ndev, GetAddr2Ptr(pmgmt_frame), &sinfo, GFP_ATOMIC);
116722 + }
116723 +#else /* defined(RTW_USE_CFG80211_STA_EVENT) */
116724 channel = pmlmeext->cur_channel;
116725 -
116726 if (channel <= RTW_CH_MAX_2G_CHANNEL)
116727 - {
116728 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
116729 - }
116730 else
116731 - {
116732 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
116733 - }
116734
116735 -
116736 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
116737 - cfg80211_rx_mgmt(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
116738 -#else
116739 - //to avoid WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION) when calling cfg80211_send_rx_assoc()
116740 - pwdev->iftype = NL80211_IFTYPE_STATION;
116741 - cfg80211_send_rx_assoc(padapter->pnetdev, pmgmt_frame, frame_len);
116742 - pwdev->iftype = NL80211_IFTYPE_AP;
116743 - //cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
116744 -#endif
116745 + #ifdef COMPAT_KERNEL_RELEASE
116746 + rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
116747 + #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
116748 + rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
116749 + #else //COMPAT_KERNEL_RELEASE
116750 + {
116751 + //to avoid WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION) when calling cfg80211_send_rx_assoc()
116752 + #ifndef CONFIG_PLATFORM_MSTAR
116753 + pwdev->iftype = NL80211_IFTYPE_STATION;
116754 + #endif //CONFIG_PLATFORM_MSTAR
116755 + DBG_8192C("iftype=%d before call cfg80211_send_rx_assoc()\n", pwdev->iftype);
116756 + rtw_cfg80211_send_rx_assoc(padapter, NULL, pmgmt_frame, frame_len);
116757 + DBG_8192C("iftype=%d after call cfg80211_send_rx_assoc()\n", pwdev->iftype);
116758 + pwdev->iftype = NL80211_IFTYPE_AP;
116759 + //cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
116760 + }
116761 + #endif //COMPAT_KERNEL_RELEASE
116762 +#endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
116763
116764 }
116765
116766 @@ -2743,21 +3133,18 @@ void rtw_cfg80211_indicate_sta_disassoc(_adapter *padapter, unsigned char *da, u
116767 u8 mgmt_buf[128] = {0};
116768 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
116769 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
116770 + struct net_device *ndev = padapter->pnetdev;
116771
116772 -
116773 - printk("%s\n", __func__);
116774 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
116775
116776 +#if defined(RTW_USE_CFG80211_STA_EVENT) || defined(COMPAT_KERNEL_RELEASE)
116777 + cfg80211_del_sta(ndev, da, GFP_ATOMIC);
116778 +#else /* defined(RTW_USE_CFG80211_STA_EVENT) */
116779 channel = pmlmeext->cur_channel;
116780 -
116781 if (channel <= RTW_CH_MAX_2G_CHANNEL)
116782 - {
116783 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
116784 - }
116785 else
116786 - {
116787 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
116788 - }
116789 -
116790
116791 pmgmt_frame = mgmt_buf;
116792 pwlanhdr = (struct rtw_ieee80211_hdr *)pmgmt_frame;
116793 @@ -2781,20 +3168,22 @@ void rtw_cfg80211_indicate_sta_disassoc(_adapter *padapter, unsigned char *da, u
116794 reason = cpu_to_le16(reason);
116795 pmgmt_frame = rtw_set_fixed_ie(pmgmt_frame, _RSON_CODE_ , (unsigned char *)&reason, &frame_len);
116796
116797 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
116798 - cfg80211_rx_mgmt(padapter->pnetdev, freq, mgmt_buf, frame_len, GFP_ATOMIC);
116799 -#else
116800 + #ifdef COMPAT_KERNEL_RELEASE
116801 + rtw_cfg80211_rx_mgmt(padapter, freq, 0, mgmt_buf, frame_len, GFP_ATOMIC);
116802 + #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
116803 + rtw_cfg80211_rx_mgmt(padapter, freq, 0, mgmt_buf, frame_len, GFP_ATOMIC);
116804 + #else //COMPAT_KERNEL_RELEASE
116805 cfg80211_send_disassoc(padapter->pnetdev, mgmt_buf, frame_len);
116806 //cfg80211_rx_action(padapter->pnetdev, freq, mgmt_buf, frame_len, GFP_ATOMIC);
116807 -#endif
116808 -
116809 + #endif //COMPAT_KERNEL_RELEASE
116810 +#endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
116811 }
116812
116813 static int rtw_cfg80211_monitor_if_open(struct net_device *ndev)
116814 {
116815 int ret = 0;
116816
116817 - printk("%s\n", __func__);
116818 + DBG_8192C("%s\n", __func__);
116819
116820 return ret;
116821 }
116822 @@ -2803,7 +3192,7 @@ static int rtw_cfg80211_monitor_if_close(struct net_device *ndev)
116823 {
116824 int ret = 0;
116825
116826 - printk("%s\n", __func__);
116827 + DBG_8192C("%s\n", __func__);
116828
116829 return ret;
116830 }
116831 @@ -2816,14 +3205,17 @@ static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_de
116832 int dot11_hdr_len = 24;
116833 int snap_len = 6;
116834 unsigned char *pdata;
116835 - unsigned short frame_ctl;
116836 + u16 frame_ctl;
116837 unsigned char src_mac_addr[6];
116838 unsigned char dst_mac_addr[6];
116839 struct ieee80211_hdr *dot11_hdr;
116840 struct ieee80211_radiotap_header *rtap_hdr;
116841 _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
116842
116843 - printk("%s\n", __func__);
116844 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
116845 +
116846 + if (skb)
116847 + rtw_mstat_update(MSTAT_TYPE_SKB, MSTAT_ALLOC_SUCCESS, skb->truesize);
116848
116849 if (unlikely(skb->len < sizeof(struct ieee80211_radiotap_header)))
116850 goto fail;
116851 @@ -2838,7 +3230,7 @@ static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_de
116852
116853 if(rtap_len != 14)
116854 {
116855 - printk("radiotap len (should be 14): %d\n", rtap_len);
116856 + DBG_8192C("radiotap len (should be 14): %d\n", rtap_len);
116857 goto fail;
116858 }
116859
116860 @@ -2848,7 +3240,7 @@ static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_de
116861 dot11_hdr = (struct ieee80211_hdr *)skb->data;
116862 frame_ctl = le16_to_cpu(dot11_hdr->frame_control);
116863 /* Check if the QoS bit is set */
116864 - if ((frame_ctl & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) {
116865 + if ((frame_ctl & RTW_IEEE80211_FCTL_FTYPE) == RTW_IEEE80211_FTYPE_DATA) {
116866 /* Check if this ia a Wireless Distribution System (WDS) frame
116867 * which has 4 MAC addresses
116868 */
116869 @@ -2868,15 +3260,17 @@ static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_de
116870 memcpy(pdata, dst_mac_addr, sizeof(dst_mac_addr));
116871 memcpy(pdata + sizeof(dst_mac_addr), src_mac_addr, sizeof(src_mac_addr));
116872
116873 - printk("should be eapol packet\n");
116874 + DBG_8192C("should be eapol packet\n");
116875
116876 /* Use the real net device to transmit the packet */
116877 - ret = rtw_xmit_entry(skb, padapter->pnetdev);
116878 + ret = _rtw_xmit_entry(skb, padapter->pnetdev);
116879
116880 return ret;
116881
116882 }
116883 - else if((frame_ctl & (IEEE80211_FCTL_FTYPE|IEEE80211_FCTL_STYPE)) == cpu_to_le16(IEEE80211_STYPE_ACTION))
116884 + else if ((frame_ctl & (RTW_IEEE80211_FCTL_FTYPE|RTW_IEEE80211_FCTL_STYPE))
116885 + == (RTW_IEEE80211_FTYPE_MGMT|RTW_IEEE80211_STYPE_ACTION)
116886 + )
116887 {
116888 //only for action frames
116889 struct xmit_frame *pmgntframe;
116890 @@ -2889,50 +3283,27 @@ static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_de
116891 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
116892 u8 *buf = skb->data;
116893 u32 len = skb->len;
116894 + u8 category, action;
116895 + int type = -1;
116896
116897 - if(rtw_p2p_check_frames(padapter, buf, len, _TRUE) < 0)
116898 - {
116899 + if (rtw_action_frame_parse(buf, len, &category, &action) == _FALSE) {
116900 + DBG_8192C(FUNC_NDEV_FMT" frame_control:0x%x\n", FUNC_NDEV_ARG(ndev),
116901 + le16_to_cpu(((struct rtw_ieee80211_hdr_3addr *)buf)->frame_ctl));
116902 goto fail;
116903 - }
116904 -
116905 -/*
116906 - frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
116907 - category = frame_body[0];
116908 - //just for check
116909 - if(category == RTW_WLAN_CATEGORY_PUBLIC)
116910 - {
116911 - action = frame_body[ 1 ];
116912 - OUI_Subtype = frame_body[ 6 ];
116913 - dialogToken = frame_body[7];
116914 -
116915 - if ( action == ACT_PUBLIC_P2P )
116916 - {
116917 - printk("ACTION_CATEGORY_PUBLIC: ACT_PUBLIC_P2P, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
116918 - cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
116919 - }
116920 - else
116921 - {
116922 - printk("ACTION_CATEGORY_PUBLIC: action=%d, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
116923 - action, cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
116924 - }
116925 + }
116926
116927 - }
116928 - else if(category == RTW_WLAN_CATEGORY_P2P)
116929 - {
116930 - OUI_Subtype = frame_body[5];
116931 - dialogToken = frame_body[6];
116932 -
116933 - printk("ACTION_CATEGORY_P2P: OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
116934 - cpu_to_be32( *( ( u32* ) ( frame_body + 1 ) ) ), OUI_Subtype, dialogToken);
116935 + DBG_8192C("RTW_Tx:da="MAC_FMT" via "FUNC_NDEV_FMT"\n",
116936 + MAC_ARG(GetAddr1Ptr(buf)), FUNC_NDEV_ARG(ndev));
116937 + #ifdef CONFIG_P2P
116938 + if((type = rtw_p2p_check_frames(padapter, buf, len, _TRUE)) >= 0)
116939 + goto dump;
116940 + #endif
116941 + if (category == RTW_WLAN_CATEGORY_PUBLIC)
116942 + DBG_871X("RTW_Tx:%s\n", action_public_str(action));
116943 + else
116944 + DBG_871X("RTW_Tx:category(%u), action(%u)\n", category, action);
116945
116946 - }
116947 - else
116948 - {
116949 - printk("%s, action frame category=%d, drop!\n", __func__, category);
116950 - goto fail;
116951 - }
116952 -*/
116953 -
116954 +dump:
116955 //starting alloc mgmt frame to dump it
116956 if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
116957 {
116958 @@ -2949,6 +3320,19 @@ static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_de
116959 pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
116960
116961 _rtw_memcpy(pframe, (void*)buf, len);
116962 + #ifdef CONFIG_WFD
116963 + if (type >= 0)
116964 + {
116965 + struct wifi_display_info *pwfd_info;
116966 +
116967 + pwfd_info = padapter->wdinfo.wfd_info;
116968 +
116969 + if ( _TRUE == pwfd_info->wfd_enable )
116970 + {
116971 + rtw_append_wfd_ie( padapter, pframe, &len );
116972 + }
116973 + }
116974 + #endif // CONFIG_WFD
116975 pattrib->pktlen = len;
116976
116977 pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
116978 @@ -2961,12 +3345,11 @@ static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_de
116979 pattrib->last_txcmdsz = pattrib->pktlen;
116980
116981 dump_mgntframe(padapter, pmgntframe);
116982 -
116983
116984 }
116985 else
116986 {
116987 - printk("frame_ctl=0x%x\n", frame_ctl & (IEEE80211_FCTL_FTYPE|IEEE80211_FCTL_STYPE));
116988 + DBG_8192C("frame_ctl=0x%x\n", frame_ctl & (RTW_IEEE80211_FCTL_FTYPE|RTW_IEEE80211_FCTL_STYPE));
116989 }
116990
116991
116992 @@ -2980,14 +3363,14 @@ fail:
116993
116994 static void rtw_cfg80211_monitor_if_set_multicast_list(struct net_device *ndev)
116995 {
116996 - printk("%s\n", __func__);
116997 + DBG_8192C("%s\n", __func__);
116998 }
116999
117000 static int rtw_cfg80211_monitor_if_set_mac_address(struct net_device *ndev, void *addr)
117001 {
117002 int ret = 0;
117003
117004 - printk("%s\n", __func__);
117005 + DBG_8192C("%s\n", __func__);
117006
117007 return ret;
117008 }
117009 @@ -2997,181 +3380,210 @@ static const struct net_device_ops rtw_cfg80211_monitor_if_ops = {
117010 .ndo_open = rtw_cfg80211_monitor_if_open,
117011 .ndo_stop = rtw_cfg80211_monitor_if_close,
117012 .ndo_start_xmit = rtw_cfg80211_monitor_if_xmit_entry,
117013 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0))
117014 .ndo_set_multicast_list = rtw_cfg80211_monitor_if_set_multicast_list,
117015 + #endif
117016 .ndo_set_mac_address = rtw_cfg80211_monitor_if_set_mac_address,
117017 };
117018 #endif
117019
117020 -static struct net_device *rtw_cfg80211_add_monitor_if(_adapter *padapter, char *name)
117021 +static int rtw_cfg80211_add_monitor_if(_adapter *padapter, char *name, struct net_device **ndev)
117022 {
117023 int ret = 0;
117024 - struct net_device* ndev = NULL;
117025 + struct net_device* mon_ndev = NULL;
117026 + struct wireless_dev* mon_wdev = NULL;
117027 struct rtw_netdev_priv_indicator *pnpi;
117028 struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
117029 -
117030 - printk("%s\n", __func__);
117031
117032 - if (!name ) {
117033 + if (!name ) {
117034 + DBG_871X(FUNC_ADPT_FMT" without specific name\n", FUNC_ADPT_ARG(padapter));
117035 ret = -EINVAL;
117036 goto out;
117037 }
117038
117039 - if((strnicmp(name, pwdev_priv->ifname_mon, strlen(name)) ==0)
117040 - && pwdev_priv->pmon_ndev)
117041 - {
117042 - ndev = pwdev_priv->pmon_ndev;
117043 -
117044 - printk("%s, monitor interface(%s) has existed\n", __func__, name);
117045 -
117046 + if (pwdev_priv->pmon_ndev) {
117047 + DBG_871X(FUNC_ADPT_FMT" monitor interface exist: "NDEV_FMT"\n",
117048 + FUNC_ADPT_ARG(padapter), NDEV_ARG(pwdev_priv->pmon_ndev));
117049 + ret = -EBUSY;
117050 goto out;
117051 }
117052 -
117053 -
117054 - ndev = alloc_etherdev(sizeof(struct rtw_netdev_priv_indicator));
117055 - if (!ndev) {
117056 +
117057 + mon_ndev = alloc_etherdev(sizeof(struct rtw_netdev_priv_indicator));
117058 + if (!mon_ndev) {
117059 + DBG_871X(FUNC_ADPT_FMT" allocate ndev fail\n", FUNC_ADPT_ARG(padapter));
117060 ret = -ENOMEM;
117061 goto out;
117062 }
117063
117064 - ndev->type = ARPHRD_IEEE80211_RADIOTAP;
117065 - strncpy(ndev->name, name, IFNAMSIZ);
117066 - ndev->name[IFNAMSIZ - 1] = 0;
117067 + mon_ndev->type = ARPHRD_IEEE80211_RADIOTAP;
117068 + strncpy(mon_ndev->name, name, IFNAMSIZ);
117069 + mon_ndev->name[IFNAMSIZ - 1] = 0;
117070 + mon_ndev->destructor = rtw_ndev_destructor;
117071
117072 -#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
117073 - ndev->netdev_ops = &rtw_cfg80211_monitor_if_ops;
117074 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
117075 + mon_ndev->netdev_ops = &rtw_cfg80211_monitor_if_ops;
117076 #else
117077 - ndev->open = rtw_cfg80211_monitor_if_open;
117078 - ndev->stop = rtw_cfg80211_monitor_if_close;
117079 - ndev->hard_start_xmit = rtw_cfg80211_monitor_if_xmit_entry;
117080 - ndev->set_mac_address = rtw_cfg80211_monitor_if_set_mac_address;
117081 + mon_ndev->open = rtw_cfg80211_monitor_if_open;
117082 + mon_ndev->stop = rtw_cfg80211_monitor_if_close;
117083 + mon_ndev->hard_start_xmit = rtw_cfg80211_monitor_if_xmit_entry;
117084 + mon_ndev->set_mac_address = rtw_cfg80211_monitor_if_set_mac_address;
117085 #endif
117086
117087 - pnpi = netdev_priv(ndev);
117088 + pnpi = netdev_priv(mon_ndev);
117089 pnpi->priv = padapter;
117090 pnpi->sizeof_priv = sizeof(_adapter);
117091
117092 - ret = register_netdevice(ndev);
117093 - if (ret) {
117094 + /* wdev */
117095 + mon_wdev = (struct wireless_dev *)rtw_zmalloc(sizeof(struct wireless_dev));
117096 + if (!mon_wdev) {
117097 + DBG_871X(FUNC_ADPT_FMT" allocate mon_wdev fail\n", FUNC_ADPT_ARG(padapter));
117098 + ret = -ENOMEM;
117099 goto out;
117100 }
117101
117102 - pwdev_priv->pmon_ndev = ndev;
117103 + mon_wdev->wiphy = padapter->rtw_wdev->wiphy;
117104 + mon_wdev->netdev = mon_ndev;
117105 + mon_wdev->iftype = NL80211_IFTYPE_MONITOR;
117106 + mon_ndev->ieee80211_ptr = mon_wdev;
117107 +
117108 + ret = register_netdevice(mon_ndev);
117109 + if (ret) {
117110 + goto out;
117111 + }
117112 +
117113 + *ndev = pwdev_priv->pmon_ndev = mon_ndev;
117114 _rtw_memcpy(pwdev_priv->ifname_mon, name, IFNAMSIZ+1);
117115
117116 out:
117117 - if (ret && ndev)
117118 - {
117119 - free_netdev(ndev);
117120 - ndev = NULL;
117121 + if (ret && mon_wdev) {
117122 + rtw_mfree((u8*)mon_wdev, sizeof(struct wireless_dev));
117123 + mon_wdev = NULL;
117124 }
117125 -
117126 -
117127 - printk("%s, ndev=%p, pmon_ndev=%p, ret=%d\n", __func__, ndev, pwdev_priv->pmon_ndev, ret);
117128 -
117129 - return ndev;
117130 +
117131 + if (ret && mon_ndev) {
117132 + free_netdev(mon_ndev);
117133 + *ndev = mon_ndev = NULL;
117134 + }
117135 +
117136 + return ret;
117137 }
117138
117139 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117140 -static struct net_device * cfg80211_rtw_add_virtual_intf(struct wiphy *wiphy, char *name,
117141 -#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117142 -static int cfg80211_rtw_add_virtual_intf(struct wiphy *wiphy, char *name,
117143 -#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117144 - enum nl80211_iftype type, u32 *flags,
117145 - struct vif_params *params)
117146 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
117147 +static struct wireless_dev *
117148 +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
117149 +static struct net_device *
117150 +#else
117151 +static int
117152 +#endif
117153 + cfg80211_rtw_add_virtual_intf(
117154 + struct wiphy *wiphy,
117155 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0))
117156 + const char *name,
117157 + #else
117158 + char *name,
117159 + #endif
117160 + enum nl80211_iftype type, u32 *flags, struct vif_params *params)
117161 {
117162 + int ret = 0;
117163 struct net_device* ndev = NULL;
117164 - _adapter *padapter = wiphy_to_adapter(wiphy);
117165 + _adapter *padapter = wiphy_to_adapter(wiphy);
117166 +
117167 + DBG_871X(FUNC_ADPT_FMT " wiphy:%s, name:%s, type:%d\n",
117168 + FUNC_ADPT_ARG(padapter), wiphy_name(wiphy), name, type);
117169
117170 - printk("%s, ifname=%s, type=%d\n", __func__, name, type);
117171 -
117172 -
117173 switch (type) {
117174 case NL80211_IFTYPE_ADHOC:
117175 case NL80211_IFTYPE_AP_VLAN:
117176 case NL80211_IFTYPE_WDS:
117177 case NL80211_IFTYPE_MESH_POINT:
117178 -
117179 + ret = -ENODEV;
117180 break;
117181 case NL80211_IFTYPE_MONITOR:
117182 - ndev = rtw_cfg80211_add_monitor_if(padapter, name);
117183 + ret = rtw_cfg80211_add_monitor_if(padapter, (char *)name, &ndev);
117184 break;
117185
117186 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
117187 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
117188 case NL80211_IFTYPE_P2P_CLIENT:
117189 #endif
117190 case NL80211_IFTYPE_STATION:
117191 -
117192 + ret = -ENODEV;
117193 break;
117194
117195 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
117196 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
117197 case NL80211_IFTYPE_P2P_GO:
117198 #endif
117199 case NL80211_IFTYPE_AP:
117200 -
117201 + ret = -ENODEV;
117202 break;
117203 default:
117204 - printk("Unsupported interface type\n");
117205 + ret = -ENODEV;
117206 + DBG_871X("Unsupported interface type\n");
117207 break;
117208 }
117209
117210 - printk("ndev=%p\n", ndev);
117211 -
117212 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117213 - return ndev;
117214 -#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117215 - return 0;
117216 -#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117217 -
117218 + DBG_871X(FUNC_ADPT_FMT" ndev:%p, ret:%d\n", FUNC_ADPT_ARG(padapter), ndev, ret);
117219 +
117220 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
117221 + return ndev ? ndev->ieee80211_ptr : ERR_PTR(ret);
117222 +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
117223 + return ndev ? ndev : ERR_PTR(ret);
117224 +#else
117225 + return ret;
117226 +#endif
117227 }
117228
117229 -static int cfg80211_rtw_del_virtual_intf(struct wiphy *wiphy, struct net_device *dev)
117230 +static int cfg80211_rtw_del_virtual_intf(struct wiphy *wiphy,
117231 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
117232 + struct wireless_dev *wdev
117233 +#else
117234 + struct net_device *ndev
117235 +#endif
117236 +)
117237 {
117238 - _adapter *padapter = wiphy_to_adapter(wiphy);
117239 struct rtw_wdev_priv *pwdev_priv = (struct rtw_wdev_priv *)wiphy_priv(wiphy);
117240 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
117241 + struct net_device *ndev;
117242 + ndev = wdev ? wdev->netdev : NULL;
117243 +#endif
117244 +
117245 + if (!ndev)
117246 + goto exit;
117247
117248 - printk("%s\n", __func__);
117249 + unregister_netdevice(ndev);
117250
117251 - if(dev)
117252 - {
117253 - unregister_netdev(dev);
117254 -
117255 - free_netdev(dev);
117256 + if (ndev == pwdev_priv->pmon_ndev) {
117257 + pwdev_priv->pmon_ndev = NULL;
117258 + pwdev_priv->ifname_mon[0] = '\0';
117259 + DBG_871X(FUNC_NDEV_FMT" remove monitor interface\n", FUNC_NDEV_ARG(ndev));
117260 + }
117261
117262 - if(dev == pwdev_priv->pmon_ndev)
117263 - {
117264 - printk("remove monitor interface\n");
117265 - pwdev_priv->pmon_ndev = NULL;
117266 - pwdev_priv->ifname_mon[0] = '\0';
117267 - }
117268 - }
117269 -
117270 +exit:
117271 return 0;
117272 }
117273
117274 -static int cfg80211_rtw_add_beacon(struct wiphy *wiphy, struct net_device *dev,
117275 - struct beacon_parameters *info)
117276 +static int rtw_add_beacon(_adapter *adapter, const u8 *head, size_t head_len, const u8 *tail, size_t tail_len)
117277 {
117278 int ret=0;
117279 u8 *pbuf = NULL;
117280 uint len, wps_ielen=0;
117281 uint p2p_ielen=0;
117282 u8 *p2p_ie;
117283 - _adapter *padapter = wiphy_to_adapter(wiphy);
117284 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
117285 + u8 got_p2p_ie = _FALSE;
117286 + struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
117287 //struct sta_priv *pstapriv = &padapter->stapriv;
117288
117289
117290 - printk("%s, beacon_head_len=%d, beacon_tail_len=%d\n", __FUNCTION__, info->head_len, info->tail_len);
117291 + DBG_8192C("%s beacon_head_len=%zu, beacon_tail_len=%zu\n", __FUNCTION__, head_len, tail_len);
117292
117293
117294 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
117295 return -EINVAL;
117296
117297 - if(info->head_len<24)
117298 + if(head_len<24)
117299 return -EINVAL;
117300
117301
117302 - pbuf = rtw_zmalloc(info->head_len+info->tail_len);
117303 + pbuf = rtw_zmalloc(head_len+tail_len);
117304 if(!pbuf)
117305 return -ENOMEM;
117306
117307 @@ -3182,38 +3594,33 @@ static int cfg80211_rtw_add_beacon(struct wiphy *wiphy, struct net_device *dev,
117308 // pstapriv->max_num_sta = NUM_STA;
117309
117310
117311 - _rtw_memcpy(pbuf, info->head+24, info->head_len-24);// 24=beacon header len.
117312 - _rtw_memcpy(pbuf+info->head_len-24, info->tail, info->tail_len);
117313 + _rtw_memcpy(pbuf, (void *)head+24, head_len-24);// 24=beacon header len.
117314 + _rtw_memcpy(pbuf+head_len-24, (void *)tail, tail_len);
117315
117316 - len = info->head_len+info->tail_len-24;
117317 + len = head_len+tail_len-24;
117318
117319 //check wps ie if inclued
117320 if(rtw_get_wps_ie(pbuf+_FIXED_IE_LENGTH_, len-_FIXED_IE_LENGTH_, NULL, &wps_ielen))
117321 - printk("add bcn, wps_ielen=%d\n", wps_ielen);
117322 + DBG_8192C("add bcn, wps_ielen=%d\n", wps_ielen);
117323
117324 -
117325 +#ifdef CONFIG_P2P
117326 //check p2p ie if inclued
117327 - if(rtw_get_p2p_ie(pbuf+_FIXED_IE_LENGTH_, len-_FIXED_IE_LENGTH_, NULL, &p2p_ielen))
117328 - printk("got p2p_ie, len=%d\n", p2p_ielen);
117329 -
117330 -
117331 -
117332 - // pbss_network->IEs will not include p2p_ie
117333 - if(rtw_check_beacon_data(padapter, pbuf, len-p2p_ielen) == _SUCCESS)
117334 - //if(rtw_check_beacon_data(padapter, pbuf, len) == _SUCCESS)
117335 + if( adapter->wdinfo.driver_interface == DRIVER_CFG80211 )
117336 {
117337 -#ifdef CONFIG_P2P
117338 //check p2p if enable
117339 - if((p2p_ie=rtw_get_p2p_ie(pbuf+_FIXED_IE_LENGTH_, len-_FIXED_IE_LENGTH_, NULL, &p2p_ielen)))
117340 + if(rtw_get_p2p_ie(pbuf+_FIXED_IE_LENGTH_, len-_FIXED_IE_LENGTH_, NULL, &p2p_ielen))
117341 {
117342 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
117343 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
117344 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
117345 + struct wifidirect_info *pwdinfo= &(adapter->wdinfo);
117346 +
117347 + DBG_8192C("got p2p_ie, len=%d\n", p2p_ielen);
117348 + got_p2p_ie = _TRUE;
117349
117350 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
117351 - {
117352 - printk("Enable P2P function for the first time\n");
117353 - rtw_p2p_enable(padapter, P2P_ROLE_GO);
117354 - wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _TRUE;
117355 + {
117356 + DBG_8192C("Enable P2P function for the first time\n");
117357 + rtw_p2p_enable(adapter, P2P_ROLE_GO);
117358 + wdev_to_priv(adapter->rtw_wdev)->p2p_enabled = _TRUE;
117359 }
117360 else
117361 {
117362 @@ -3221,20 +3628,32 @@ static int cfg80211_rtw_add_beacon(struct wiphy *wiphy, struct net_device *dev,
117363 _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
117364 _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
117365
117366 - printk("enter GO Mode, p2p_ielen=%d\n", p2p_ielen);
117367 + DBG_8192C("enter GO Mode, p2p_ielen=%d\n", p2p_ielen);
117368
117369 rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
117370 rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
117371 pwdinfo->intent = 15;
117372 - }
117373 + }
117374 + }
117375 + }
117376 +#endif // CONFIG_P2P
117377 +
117378 + /* pbss_network->IEs will not include p2p_ie, wfd ie */
117379 + rtw_ies_remove_ie(pbuf, &len, _BEACON_IE_OFFSET_, _VENDOR_SPECIFIC_IE_, P2P_OUI, 4);
117380 + rtw_ies_remove_ie(pbuf, &len, _BEACON_IE_OFFSET_, _VENDOR_SPECIFIC_IE_, WFD_OUI, 4);
117381
117382 + if (rtw_check_beacon_data(adapter, pbuf, len) == _SUCCESS)
117383 + {
117384 +#ifdef CONFIG_P2P
117385 + //check p2p if enable
117386 + if(got_p2p_ie == _TRUE)
117387 + {
117388 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
117389 + struct wifidirect_info *pwdinfo= &(adapter->wdinfo);
117390 pwdinfo->operating_channel = pmlmeext->cur_channel;
117391 -
117392 }
117393 #endif //CONFIG_P2P
117394 -
117395 ret = 0;
117396 -
117397 }
117398 else
117399 {
117400 @@ -3242,66 +3661,136 @@ static int cfg80211_rtw_add_beacon(struct wiphy *wiphy, struct net_device *dev,
117401 }
117402
117403
117404 - rtw_mfree(pbuf, info->head_len+info->tail_len);
117405 + rtw_mfree(pbuf, head_len+tail_len);
117406
117407 return ret;
117408 -
117409 }
117410
117411 -static int cfg80211_rtw_set_beacon(struct wiphy *wiphy, struct net_device *dev,
117412 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE)
117413 +static int cfg80211_rtw_add_beacon(struct wiphy *wiphy, struct net_device *ndev,
117414 + struct beacon_parameters *info)
117415 +{
117416 + int ret=0;
117417 + _adapter *adapter = wiphy_to_adapter(wiphy);
117418 +
117419 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117420 + ret = rtw_add_beacon(adapter, info->head, info->head_len, info->tail, info->tail_len);
117421 +
117422 + return ret;
117423 +}
117424 +
117425 +static int cfg80211_rtw_set_beacon(struct wiphy *wiphy, struct net_device *ndev,
117426 struct beacon_parameters *info)
117427 {
117428 _adapter *padapter = wiphy_to_adapter(wiphy);
117429 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
117430
117431 - printk("%s\n", __func__);
117432 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117433
117434 pmlmeext->bstart_bss = _TRUE;
117435
117436 - cfg80211_rtw_add_beacon(wiphy, dev, info);
117437 + cfg80211_rtw_add_beacon(wiphy, ndev, info);
117438
117439 return 0;
117440 }
117441
117442 -static int cfg80211_rtw_del_beacon(struct wiphy *wiphy, struct net_device *dev)
117443 +static int cfg80211_rtw_del_beacon(struct wiphy *wiphy, struct net_device *ndev)
117444 {
117445 - printk("%s\n", __func__);
117446 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117447 +
117448 + return 0;
117449 +}
117450 +#else
117451 +static int cfg80211_rtw_start_ap(struct wiphy *wiphy, struct net_device *ndev,
117452 + struct cfg80211_ap_settings *settings)
117453 +{
117454 + int ret = 0;
117455 + _adapter *adapter = wiphy_to_adapter(wiphy);
117456
117457 + DBG_871X(FUNC_NDEV_FMT" hidden_ssid:%d, auth_type:%d\n", FUNC_NDEV_ARG(ndev),
117458 + settings->hidden_ssid, settings->auth_type);
117459 +
117460 + ret = rtw_add_beacon(adapter, settings->beacon.head, settings->beacon.head_len,
117461 + settings->beacon.tail, settings->beacon.tail_len);
117462 +
117463 + adapter->mlmeextpriv.mlmext_info.hidden_ssid_mode = settings->hidden_ssid;
117464 +
117465 + if (settings->ssid && settings->ssid_len) {
117466 + WLAN_BSSID_EX *pbss_network = &adapter->mlmepriv.cur_network.network;
117467 + WLAN_BSSID_EX *pbss_network_ext = &adapter->mlmeextpriv.mlmext_info.network;
117468 +
117469 + if(0)
117470 + DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%d), from ie:(%s,%d)\n", FUNC_ADPT_ARG(adapter),
117471 + settings->ssid, settings->ssid_len,
117472 + pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength);
117473 +
117474 + _rtw_memcpy(pbss_network->Ssid.Ssid, (void *)settings->ssid, settings->ssid_len);
117475 + pbss_network->Ssid.SsidLength = settings->ssid_len;
117476 + _rtw_memcpy(pbss_network_ext->Ssid.Ssid, (void *)settings->ssid, settings->ssid_len);
117477 + pbss_network_ext->Ssid.SsidLength = settings->ssid_len;
117478 +
117479 + if(0)
117480 + DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),
117481 + pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,
117482 + pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);
117483 + }
117484 +
117485 + return ret;
117486 +}
117487 +
117488 +static int cfg80211_rtw_change_beacon(struct wiphy *wiphy, struct net_device *ndev,
117489 + struct cfg80211_beacon_data *info)
117490 +{
117491 + int ret = 0;
117492 + _adapter *adapter = wiphy_to_adapter(wiphy);
117493 +
117494 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117495 +
117496 + ret = rtw_add_beacon(adapter, info->head, info->head_len, info->tail, info->tail_len);
117497 +
117498 + return ret;
117499 +}
117500 +
117501 +static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev)
117502 +{
117503 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117504 return 0;
117505 }
117506
117507 +#endif //(LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))
117508
117509 -static int cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *dev,
117510 +static int cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *ndev,
117511 u8 *mac, struct station_parameters *params)
117512 {
117513 - printk("%s\n", __func__);
117514 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117515
117516 return 0;
117517 }
117518
117519 -static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *dev,
117520 +static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev,
117521 u8 *mac)
117522 {
117523 int ret=0;
117524 _irqL irqL;
117525 _list *phead, *plist;
117526 + u8 updated;
117527 struct sta_info *psta = NULL;
117528 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
117529 + _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
117530 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
117531 struct sta_priv *pstapriv = &padapter->stapriv;
117532
117533 - printk("+%s\n", __func__);
117534 + DBG_871X("+"FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117535
117536 if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != _TRUE)
117537 {
117538 - printk("%s, fw_state != FW_LINKED|WIFI_AP_STATE\n", __func__);
117539 + DBG_8192C("%s, fw_state != FW_LINKED|WIFI_AP_STATE\n", __func__);
117540 return -EINVAL;
117541 }
117542
117543
117544 if(!mac)
117545 {
117546 - printk("flush all sta, and cam_entry\n");
117547 + DBG_8192C("flush all sta, and cam_entry\n");
117548
117549 flush_all_cam_entry(padapter); //clear CAM
117550
117551 @@ -3311,7 +3800,7 @@ static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *dev,
117552 }
117553
117554
117555 - printk("free sta macaddr =" MAC_FMT "\n", MAC_ARG(mac));
117556 + DBG_8192C("free sta macaddr =" MAC_FMT "\n", MAC_ARG(mac));
117557
117558 if (mac[0] == 0xff && mac[1] == 0xff &&
117559 mac[2] == 0xff && mac[3] == 0xff &&
117560 @@ -3344,9 +3833,10 @@ static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *dev,
117561 DBG_8192C("free psta=%p, aid=%d\n", psta, psta->aid);
117562
117563 rtw_list_delete(&psta->asoc_list);
117564 + pstapriv->asoc_list_cnt--;
117565
117566 //_exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
117567 - ap_free_sta(padapter, psta);
117568 + updated = ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_DEAUTH_LEAVING);
117569 //_enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
117570
117571 psta = NULL;
117572 @@ -3360,73 +3850,48 @@ static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *dev,
117573
117574 _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
117575
117576 -
117577 -#if 0
117578 - psta = rtw_get_stainfo(pstapriv, mac);
117579 - if(psta)
117580 - {
117581 - //DBG_8192C("free psta=%p, aid=%d\n", psta, psta->aid);
117582 -
117583 - _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
117584 - if(rtw_is_list_empty(&psta->asoc_list)==_FALSE)
117585 - {
117586 - rtw_list_delete(&psta->asoc_list);
117587 - ap_free_sta(padapter, psta);
117588 -
117589 - psta = NULL;
117590 + associated_clients_update(padapter, updated);
117591
117592 - }
117593 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
117594 -
117595 - }
117596 - else
117597 - {
117598 - DBG_8192C("cfg80211_rtw_del_station(), sta has already been removed or never been added\n");
117599 -
117600 - //ret = -1;
117601 - }
117602 -#endif
117603 -
117604 - printk("-%s\n", __func__);
117605 + DBG_871X("-"FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117606
117607 return ret;
117608
117609 }
117610
117611 -static int cfg80211_rtw_change_station(struct wiphy *wiphy, struct net_device *dev,
117612 +static int cfg80211_rtw_change_station(struct wiphy *wiphy, struct net_device *ndev,
117613 u8 *mac, struct station_parameters *params)
117614 {
117615 - printk("%s\n", __func__);
117616 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117617
117618 return 0;
117619 }
117620
117621 -static int cfg80211_rtw_dump_station(struct wiphy *wiphy, struct net_device *dev,
117622 +static int cfg80211_rtw_dump_station(struct wiphy *wiphy, struct net_device *ndev,
117623 int idx, u8 *mac, struct station_info *sinfo)
117624 {
117625 - printk("%s\n", __func__);
117626 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117627
117628 //TODO: dump scanned queue
117629
117630 return -ENOENT;
117631 }
117632
117633 -static int cfg80211_rtw_change_bss(struct wiphy *wiphy, struct net_device *dev,
117634 +static int cfg80211_rtw_change_bss(struct wiphy *wiphy, struct net_device *ndev,
117635 struct bss_parameters *params)
117636 {
117637 u8 i;
117638
117639 - printk("%s\n", __func__);
117640 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117641 /*
117642 - printk("use_cts_prot=%d\n", params->use_cts_prot);
117643 - printk("use_short_preamble=%d\n", params->use_short_preamble);
117644 - printk("use_short_slot_time=%d\n", params->use_short_slot_time);
117645 - printk("ap_isolate=%d\n", params->ap_isolate);
117646 + DBG_8192C("use_cts_prot=%d\n", params->use_cts_prot);
117647 + DBG_8192C("use_short_preamble=%d\n", params->use_short_preamble);
117648 + DBG_8192C("use_short_slot_time=%d\n", params->use_short_slot_time);
117649 + DBG_8192C("ap_isolate=%d\n", params->ap_isolate);
117650
117651 - printk("basic_rates_len=%d\n", params->basic_rates_len);
117652 + DBG_8192C("basic_rates_len=%d\n", params->basic_rates_len);
117653 for(i=0; i<params->basic_rates_len; i++)
117654 {
117655 - printk("basic_rates=%d\n", params->basic_rates[i]);
117656 + DBG_8192C("basic_rates=%d\n", params->basic_rates[i]);
117657
117658 }
117659 */
117660 @@ -3434,27 +3899,31 @@ static int cfg80211_rtw_change_bss(struct wiphy *wiphy, struct net_device *dev,
117661
117662 }
117663
117664 -static int cfg80211_rtw_set_channel(struct wiphy *wiphy, struct net_device *dev,
117665 - struct ieee80211_channel *chan,
117666 - enum nl80211_channel_type channel_type)
117667 +static int cfg80211_rtw_set_channel(struct wiphy *wiphy
117668 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
117669 + , struct net_device *ndev
117670 + #endif
117671 + , struct ieee80211_channel *chan, enum nl80211_channel_type channel_type)
117672 {
117673 - printk("%s\n", __func__);
117674 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
117675 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117676 + #endif
117677
117678 return 0;
117679 }
117680
117681 -static int cfg80211_rtw_auth(struct wiphy *wiphy, struct net_device *dev,
117682 +static int cfg80211_rtw_auth(struct wiphy *wiphy, struct net_device *ndev,
117683 struct cfg80211_auth_request *req)
117684 {
117685 - printk("%s\n", __func__);
117686 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117687
117688 return 0;
117689 }
117690
117691 -static int cfg80211_rtw_assoc(struct wiphy *wiphy, struct net_device *dev,
117692 +static int cfg80211_rtw_assoc(struct wiphy *wiphy, struct net_device *ndev,
117693 struct cfg80211_assoc_request *req)
117694 {
117695 - printk("%s\n", __func__);
117696 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
117697
117698 return 0;
117699 }
117700 @@ -3462,66 +3931,108 @@ static int cfg80211_rtw_assoc(struct wiphy *wiphy, struct net_device *dev,
117701
117702 void rtw_cfg80211_rx_action_p2p(_adapter *padapter, u8 *pmgmt_frame, uint frame_len)
117703 {
117704 + int type;
117705 s32 freq;
117706 - int channel;
117707 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
117708 + int channel;
117709 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
117710 + u8 category, action;
117711
117712 -#ifdef CONFIG_DEBUG_CFG80211
117713 - printk("%s\n", __func__);
117714 -#endif
117715 + channel = rtw_get_oper_ch(padapter);
117716
117717 - rtw_p2p_check_frames(padapter, pmgmt_frame, frame_len, _FALSE);
117718 + DBG_8192C("RTW_Rx:cur_ch=%d\n", channel);
117719 + #ifdef CONFIG_P2P
117720 + type = rtw_p2p_check_frames(padapter, pmgmt_frame, frame_len, _FALSE);
117721 + if (type >= 0)
117722 + goto indicate;
117723 + #endif
117724 + rtw_action_frame_parse(pmgmt_frame, frame_len, &category, &action);
117725 + DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
117726
117727 - channel = pmlmeext->cur_channel;
117728 -
117729 +indicate:
117730 if (channel <= RTW_CH_MAX_2G_CHANNEL)
117731 - {
117732 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
117733 - }
117734 else
117735 - {
117736 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
117737 - }
117738
117739 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
117740 - cfg80211_rx_mgmt(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
117741 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
117742 + rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
117743 #else
117744 cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
117745 #endif
117746 -
117747 }
117748
117749 void rtw_cfg80211_rx_p2p_action_public(_adapter *padapter, u8 *pmgmt_frame, uint frame_len)
117750 {
117751 + int type;
117752 s32 freq;
117753 int channel;
117754 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
117755 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
117756 + u8 category, action;
117757 +
117758 + channel = rtw_get_oper_ch(padapter);
117759 +
117760 + DBG_8192C("RTW_Rx:cur_ch=%d\n", channel);
117761 + #ifdef CONFIG_P2P
117762 + type = rtw_p2p_check_frames(padapter, pmgmt_frame, frame_len, _FALSE);
117763 + if (type >= 0) {
117764 + switch (type) {
117765 + case P2P_GO_NEGO_CONF:
117766 + case P2P_PROVISION_DISC_RESP:
117767 + case P2P_INVIT_RESP:
117768 + rtw_set_scan_deny(padapter, 2000);
117769 + rtw_clear_scan_deny(padapter);
117770 + }
117771 + goto indicate;
117772 + }
117773 + #endif
117774 + rtw_action_frame_parse(pmgmt_frame, frame_len, &category, &action);
117775 + DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
117776
117777 -#ifdef CONFIG_DEBUG_CFG80211
117778 - printk("%s\n", __func__);
117779 +indicate:
117780 + if (channel <= RTW_CH_MAX_2G_CHANNEL)
117781 + freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
117782 + else
117783 + freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
117784 +
117785 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
117786 + rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
117787 +#else
117788 + cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
117789 #endif
117790 +}
117791
117792 - rtw_p2p_check_frames(padapter, pmgmt_frame, frame_len, _FALSE);
117793 +void rtw_cfg80211_rx_action(_adapter *adapter, u8 *frame, uint frame_len, const char*msg)
117794 +{
117795 + s32 freq;
117796 + int channel;
117797 + struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
117798 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(adapter->rtw_wdev);
117799 + u8 category, action;
117800 +
117801 + channel = rtw_get_oper_ch(adapter);
117802 +
117803 + rtw_action_frame_parse(frame, frame_len, &category, &action);
117804 +
117805 + DBG_8192C("RTW_Rx:cur_ch=%d\n", channel);
117806 + if (msg)
117807 + DBG_871X("RTW_Rx:%s\n", msg);
117808 + else
117809 + DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
117810
117811 - channel = pmlmeext->cur_channel;
117812 -
117813 if (channel <= RTW_CH_MAX_2G_CHANNEL)
117814 - {
117815 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
117816 - }
117817 else
117818 - {
117819 freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
117820 - }
117821
117822 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
117823 - cfg80211_rx_mgmt(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
117824 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
117825 + rtw_cfg80211_rx_mgmt(adapter, freq, 0, frame, frame_len, GFP_ATOMIC);
117826 #else
117827 - cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
117828 + cfg80211_rx_action(adapter->pnetdev, freq, frame, frame_len, GFP_ATOMIC);
117829 #endif
117830
117831 }
117832
117833 +#ifdef CONFIG_P2P
117834 void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf, size_t len)
117835 {
117836 u16 wps_devicepassword_id = 0x0000;
117837 @@ -3625,9 +4136,9 @@ void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf,
117838 fctrl = &(pwlanhdr->frame_ctl);
117839 *(fctrl) = 0;
117840
117841 - _rtw_memcpy(pwlanhdr->addr1, pwdinfo->tx_prov_disc_info.peerIFAddr, ETH_ALEN);
117842 + _rtw_memcpy(pwlanhdr->addr1, pwdinfo->tx_prov_disc_info.peerDevAddr, ETH_ALEN);
117843 _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
117844 - _rtw_memcpy(pwlanhdr->addr3, pwdinfo->tx_prov_disc_info.peerIFAddr, ETH_ALEN);
117845 + _rtw_memcpy(pwlanhdr->addr3, pwdinfo->tx_prov_disc_info.peerDevAddr, ETH_ALEN);
117846
117847 SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
117848 pmlmeext->mgnt_seq++;
117849 @@ -3668,8 +4179,7 @@ void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf,
117850
117851 // Value:
117852 // Device Capability Bitmap, 1 byte
117853 - // Be able to participate in additional P2P Groups and
117854 - // support the P2P Invitation Procedure
117855 + // Group Capability Bitmap, 1 byte
117856 _rtw_memcpy(p2p_ie + p2pielen, &capability, 2);
117857 p2pielen += 2;
117858
117859 @@ -3736,344 +4246,528 @@ void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf,
117860
117861 pattrib->last_txcmdsz = pattrib->pktlen;
117862
117863 - dump_mgntframe(padapter, pmgntframe);
117864 + //dump_mgntframe(padapter, pmgntframe);
117865 + if (dump_mgntframe_and_wait_ack(padapter, pmgntframe) != _SUCCESS)
117866 + DBG_8192C("%s, ack to\n", __func__);
117867
117868 //if(wps_devicepassword_id == WPS_DPID_REGISTRAR_SPEC)
117869 //{
117870 - // printk("waiting for p2p peer key-in PIN CODE\n");
117871 + // DBG_8192C("waiting for p2p peer key-in PIN CODE\n");
117872 // rtw_msleep_os(15000); // 15 sec for key in PIN CODE, workaround for GS2 before issuing Nego Req.
117873 //}
117874
117875 }
117876
117877 -static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, struct net_device *dev,
117878 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117879 - struct ieee80211_channel *chan, bool offchan,
117880 - enum nl80211_channel_type channel_type,
117881 - bool channel_type_valid, unsigned int wait,
117882 -#else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117883 - struct ieee80211_channel *chan,
117884 - enum nl80211_channel_type channel_type,
117885 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
117886 - bool channel_type_valid,
117887 +static s32 cfg80211_rtw_remain_on_channel(struct wiphy *wiphy,
117888 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
117889 + struct wireless_dev *wdev,
117890 +#else
117891 + struct net_device *ndev,
117892 +#endif
117893 + struct ieee80211_channel * channel,
117894 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
117895 + enum nl80211_channel_type channel_type,
117896 #endif
117897 -#endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
117898 - const u8 *buf, size_t len, u64 *cookie)
117899 + unsigned int duration, u64 *cookie)
117900 {
117901 - struct xmit_frame *pmgntframe;
117902 - struct pkt_attrib *pattrib;
117903 - unsigned char *pframe;
117904 - const struct ieee80211_mgmt *mgmt;
117905 - //u8 category, action, OUI_Subtype, dialogToken=0;
117906 - //unsigned char *frame_body;
117907 - int ret = 0;
117908 - int type = (-1);
117909 - u16 fc;
117910 - bool ack = _TRUE;
117911 - struct rtw_ieee80211_hdr *pwlanhdr;
117912 - _adapter *padapter = wiphy_to_adapter(wiphy);
117913 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
117914 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
117915 + s32 err = 0;
117916 + _adapter *padapter = wiphy_to_adapter(wiphy);
117917 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
117918 + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
117919 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
117920 + struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
117921 + u8 remain_ch = (u8) ieee80211_frequency_to_channel(channel->center_freq);
117922 + u8 ready_on_channel = _FALSE;
117923
117924 + DBG_871X(FUNC_ADPT_FMT" ch:%u duration:%d\n", FUNC_ADPT_ARG(padapter), remain_ch, duration);
117925
117926 - /* cookie generation */
117927 - *cookie = (unsigned long) buf;
117928 + if(pcfg80211_wdinfo->is_ro_ch == _TRUE)
117929 + {
117930 + DBG_8192C("%s, cancel ro ch timer\n", __func__);
117931 +
117932 + _cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
117933 +
117934 +#ifdef CONFIG_CONCURRENT_MODE
117935 + ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
117936 +#endif //CONFIG_CONCURRENT_MODE
117937 +
117938 + p2p_protocol_wk_hdl(padapter, P2P_RO_CH_WK);
117939 + }
117940 +
117941 + pcfg80211_wdinfo->is_ro_ch = _TRUE;
117942 +
117943 + if(_FAIL == rtw_pwr_wakeup(padapter)) {
117944 + err = -EFAULT;
117945 + goto exit;
117946 + }
117947
117948 + _rtw_memcpy(&pcfg80211_wdinfo->remain_on_ch_channel, channel, sizeof(struct ieee80211_channel));
117949 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
117950 + pcfg80211_wdinfo->remain_on_ch_type= channel_type;
117951 + #endif
117952 + pcfg80211_wdinfo->remain_on_ch_cookie= *cookie;
117953
117954 - printk("%s, len=%d, ch=%d, ch_type=%d\n", __func__, len,
117955 - ieee80211_frequency_to_channel(chan->center_freq), channel_type);
117956 + rtw_scan_abort(padapter);
117957 +#ifdef CONFIG_CONCURRENT_MODE
117958 + if(rtw_buddy_adapter_up(padapter))
117959 + rtw_scan_abort(padapter->pbuddy_adapter);
117960 +#endif //CONFIG_CONCURRENT_MODE
117961
117962 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
117963 - printk("channel_type_valid=%d\n", channel_type_valid);
117964 + //if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
117965 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
117966 + {
117967 + rtw_p2p_enable(padapter, P2P_ROLE_DEVICE);
117968 + wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _TRUE;
117969 + }
117970 + else
117971 + {
117972 + rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
117973 +#ifdef CONFIG_DEBUG_CFG80211
117974 + DBG_8192C("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
117975 #endif
117976 + }
117977 +
117978 +
117979 + rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
117980 +
117981 +
117982 + if(duration < 400)
117983 + duration = duration*3;//extend from exper.
117984
117985 - mgmt = (const struct ieee80211_mgmt *) buf;
117986 - fc = mgmt->frame_control;
117987 - if (fc != IEEE80211_STYPE_ACTION)
117988 +
117989 +#ifdef CONFIG_CONCURRENT_MODE
117990 + if(check_buddy_fwstate(padapter, _FW_LINKED) &&
117991 + (duration<pwdinfo->ext_listen_interval))
117992 {
117993 - if (fc == IEEE80211_STYPE_PROBE_RESP)
117994 + duration = duration + pwdinfo->ext_listen_interval;
117995 + }
117996 +#endif
117997 +
117998 + pcfg80211_wdinfo->restore_channel = rtw_get_oper_ch(padapter);
117999 +
118000 + if(rtw_ch_set_search_ch(pmlmeext->channel_set, remain_ch) >= 0) {
118001 +#ifdef CONFIG_CONCURRENT_MODE
118002 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
118003 {
118004 - printk("%s, fc == IEEE80211_STYPE_PROBE_RESP\n", __func__);
118005 - }
118006 - else
118007 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
118008 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
118009 +
118010 + if(remain_ch != pbuddy_mlmeext->cur_channel)
118011 + {
118012 + if(ATOMIC_READ(&pwdev_priv->switch_ch_to)==1 ||
118013 + (remain_ch != pmlmeext->cur_channel))
118014 + {
118015 + DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);
118016 + issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);
118017 +
118018 + ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);
118019 +
118020 + DBG_8192C("%s, set switch ch timer, duration=%d\n", __func__, duration-pwdinfo->ext_listen_interval);
118021 + _set_timer(&pwdinfo->ap_p2p_switch_timer, duration-pwdinfo->ext_listen_interval);
118022 + }
118023 + }
118024 +
118025 + ready_on_channel = _TRUE;
118026 + //pmlmeext->cur_channel = remain_ch;
118027 + //set_channel_bwmode(padapter, remain_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118028 + }else
118029 +#endif //CONFIG_CONCURRENT_MODE
118030 + if(remain_ch != pmlmeext->cur_channel )
118031 {
118032 - printk("%s, frame_control == 0x%x\n", __func__, fc);
118033 + ready_on_channel = _TRUE;
118034 + //pmlmeext->cur_channel = remain_ch;
118035 + //set_channel_bwmode(padapter, remain_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118036 }
118037 -
118038 - //cfg80211_mgmt_tx_status(dev, *cookie, buf, len, ack, GFP_KERNEL);
118039 -
118040 - goto exit;
118041 -
118042 - }
118043 - else
118044 + } else {
118045 + DBG_871X("%s remain_ch:%u not in channel plan!!!!\n", __FUNCTION__, remain_ch);
118046 + }
118047 +
118048 +
118049 + //call this after other things have been done
118050 +#ifdef CONFIG_CONCURRENT_MODE
118051 + if(ATOMIC_READ(&pwdev_priv->ro_ch_to)==1 ||
118052 + (remain_ch != pmlmeext->cur_channel))
118053 {
118054 - u32 cnt=0;
118055 - u32 wait_for_surveydone;
118056 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
118057 + u8 co_channel = 0xff;
118058 + ATOMIC_SET(&pwdev_priv->ro_ch_to, 0);
118059 +#endif
118060
118061 -#ifdef CONFIG_DEBUG_CFG80211
118062 - printk("%s, do: scan_abort\n", __func__);
118063 + if(ready_on_channel == _TRUE)
118064 + {
118065 + if ( !check_fwstate(&padapter->mlmepriv, _FW_LINKED ) )
118066 + pmlmeext->cur_channel = remain_ch;
118067 +
118068 +#ifdef CONFIG_CONCURRENT_MODE
118069 + co_channel = rtw_get_oper_ch(padapter);
118070 +
118071 + if(co_channel !=remain_ch)
118072 #endif
118073 -
118074 - /* Abort the dwell time of any previous off-channel action frame that may
118075 - * be still in effect. Sending off-channel action frames relies on the
118076 - * driver's scan engine. If a previous off-channel action frame tx is
118077 - * still in progress (including the dwell time), then this new action
118078 - * frame will not be sent out.
118079 - */
118080 -
118081 - rtw_cfg80211_scan_abort(padapter);
118082 - }
118083 -#if 0
118084 - if (wl->p2p->vif_created) {
118085 - wifi_p2p_pub_act_frame_t *act_frm =
118086 - (wifi_p2p_pub_act_frame_t *) (action_frame->data);
118087 - WL_DBG(("action_frame->len: %d chan %d category %d subtype %d\n",
118088 - action_frame->len, af_params->channel,
118089 - act_frm->category, act_frm->subtype));
118090 - /*
118091 - * To make sure to send successfully action frame, we have to turn off mpc
118092 - */
118093 - if ((act_frm->subtype == P2P_PAF_GON_REQ)||
118094 - (act_frm->subtype == P2P_PAF_GON_RSP)) {
118095 - wldev_iovar_setint(dev, "mpc", 0);
118096 - } else if (act_frm->subtype == P2P_PAF_GON_CONF) {
118097 - wldev_iovar_setint(dev, "mpc", 1);
118098 - } else if (act_frm->subtype == P2P_PAF_DEVDIS_REQ) {
118099 - af_params->dwell_time = WL_LONG_DWELL_TIME;
118100 + {
118101 + if (!padapter->mlmepriv.LinkDetectInfo.bBusyTraffic)
118102 + set_channel_bwmode(padapter, remain_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118103 + }
118104 }
118105 + DBG_8192C("%s, set ro ch timer, duration=%d\n", __func__, duration);
118106 + _set_timer( &pcfg80211_wdinfo->remain_on_ch_timer, duration);
118107 +
118108 +#ifdef CONFIG_CONCURRENT_MODE
118109 }
118110 #endif
118111
118112 -/*
118113 - frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
118114 - category = frame_body[0];
118115 - //just for check
118116 - if(category == RTW_WLAN_CATEGORY_PUBLIC)
118117 - {
118118 - action = frame_body[ 1 ];
118119 - OUI_Subtype = frame_body[ 6 ];
118120 - dialogToken = frame_body[7];
118121 + rtw_cfg80211_ready_on_channel(padapter, *cookie, channel, channel_type, duration, GFP_KERNEL);
118122
118123 - if ( action == ACT_PUBLIC_P2P )
118124 - {
118125 - printk("ACTION_CATEGORY_PUBLIC: ACT_PUBLIC_P2P, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
118126 - cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
118127 - }
118128 - else
118129 - {
118130 - printk("ACTION_CATEGORY_PUBLIC: action=%d, OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
118131 - action, cpu_to_be32( *( ( u32* ) ( frame_body + 2 ) ) ), OUI_Subtype, dialogToken);
118132 - }
118133 -
118134 - }
118135 - else if(category == RTW_WLAN_CATEGORY_P2P)
118136 - {
118137 - OUI_Subtype = frame_body[5];
118138 - dialogToken = frame_body[6];
118139 +exit:
118140 + if (err)
118141 + pcfg80211_wdinfo->is_ro_ch = _FALSE;
118142
118143 - printk("ACTION_CATEGORY_P2P: OUI=0x%x, OUI_Subtype=%d, dialogToken=%d\n",
118144 - cpu_to_be32( *( ( u32* ) ( frame_body + 1 ) ) ), OUI_Subtype, dialogToken);
118145 + return err;
118146 +}
118147
118148 - }
118149 - else
118150 - {
118151 - printk("%s, action frame category=%d\n", __func__, category);
118152 - ack = _FALSE;
118153 - goto exit;
118154 +static s32 cfg80211_rtw_cancel_remain_on_channel(struct wiphy *wiphy,
118155 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
118156 + struct wireless_dev *wdev,
118157 +#else
118158 + struct net_device *ndev,
118159 +#endif
118160 + u64 cookie)
118161 +{
118162 + s32 err = 0;
118163 + _adapter *padapter = wiphy_to_adapter(wiphy);
118164 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
118165 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
118166 + struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
118167 + struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
118168 +
118169 + DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
118170 +
118171 + if (pcfg80211_wdinfo->is_ro_ch == _TRUE) {
118172 + DBG_8192C("%s, cancel ro ch timer\n", __func__);
118173 + _cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
118174 + #ifdef CONFIG_CONCURRENT_MODE
118175 + ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
118176 + #endif
118177 + p2p_protocol_wk_hdl(padapter, P2P_RO_CH_WK);
118178 }
118179 -*/
118180
118181 - if( ieee80211_frequency_to_channel(chan->center_freq) != pmlmeext->cur_channel )
118182 + #if 0
118183 + // Disable P2P Listen State
118184 + if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
118185 {
118186 - pmlmeext->cur_channel = ieee80211_frequency_to_channel(chan->center_freq);
118187 - set_channel_bwmode(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118188 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
118189 + {
118190 + _cancel_timer_ex( &pwdinfo->find_phase_timer );
118191 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
118192 + _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
118193 +
118194 + rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
118195 + _rtw_memset(pwdinfo, 0x00, sizeof(struct wifidirect_info));
118196 + }
118197 }
118198 -
118199 -
118200 - if( (type = rtw_p2p_check_frames(padapter, buf, len, _TRUE)) < 0)
118201 + else
118202 + #endif
118203 {
118204 - ack = _FALSE;
118205 - goto exit;
118206 - }
118207 + rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
118208 +#ifdef CONFIG_DEBUG_CFG80211
118209 + DBG_8192C("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
118210 +#endif
118211 + }
118212 + pcfg80211_wdinfo->is_ro_ch = _FALSE;
118213
118214 + return err;
118215 +}
118216
118217 - //if(type == P2P_GO_NEGO_REQ)
118218 - //{
118219 - // rtw_cfg80211_issue_p2p_provision_request(padapter, buf, len);
118220 - //}
118221 -
118222 -
118223 - //starting alloc mgmt frame to dump it
118224 - if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
118225 - {
118226 - ack = _FALSE;
118227 - ret = -ENOMEM;
118228 +#endif //CONFIG_P2P
118229 +
118230 +static int _cfg80211_rtw_mgmt_tx(_adapter *padapter, u8 tx_ch, const u8 *buf, size_t len)
118231 +{
118232 + struct xmit_frame *pmgntframe;
118233 + struct pkt_attrib *pattrib;
118234 + unsigned char *pframe;
118235 + int ret = _FAIL;
118236 + bool ack = _TRUE;
118237 + struct rtw_ieee80211_hdr *pwlanhdr;
118238 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
118239 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
118240 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
118241 + struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
118242 + struct wifidirect_info *pwdinfo = &padapter->wdinfo;
118243 + //struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
118244 +
118245 + if(_FAIL == rtw_pwr_wakeup(padapter)) {
118246 + ret = -EFAULT;
118247 goto exit;
118248 }
118249
118250 - //update attribute
118251 - pattrib = &pmgntframe->attrib;
118252 - update_mgntframe_attrib(padapter, pattrib);
118253 - pattrib->retry_ctrl = _FALSE;
118254 + rtw_set_scan_deny(padapter, 1000);
118255
118256 - _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
118257 + rtw_scan_abort(padapter);
118258 + #ifdef CONFIG_CONCURRENT_MODE
118259 + if(rtw_buddy_adapter_up(padapter))
118260 + rtw_scan_abort(padapter->pbuddy_adapter);
118261 + #endif /* CONFIG_CONCURRENT_MODE */
118262
118263 - pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
118264 + if (padapter->cfg80211_wdinfo.is_ro_ch == _TRUE) {
118265 + //DBG_8192C("%s, cancel ro ch timer\n", __func__);
118266 + //_cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
118267 + //padapter->cfg80211_wdinfo.is_ro_ch = _FALSE;
118268 + #ifdef CONFIG_CONCURRENT_MODE
118269 + if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
118270 + {
118271 + DBG_8192C("%s, extend ro ch time\n", __func__);
118272 + _set_timer( &padapter->cfg80211_wdinfo.remain_on_ch_timer, pwdinfo->ext_listen_period);
118273 + }
118274 + #endif //CONFIG_CONCURRENT_MODE
118275 + }
118276
118277 - _rtw_memcpy(pframe, (void*)buf, len);
118278 - pattrib->pktlen = len;
118279 -
118280 - pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
118281 - //update seq number
118282 - pmlmeext->mgnt_seq = GetSequence(pwlanhdr);
118283 - pattrib->seqnum = pmlmeext->mgnt_seq;
118284 - pmlmeext->mgnt_seq++;
118285 +#ifdef CONFIG_CONCURRENT_MODE
118286 + if (check_buddy_fwstate(padapter, _FW_LINKED )) {
118287 + u8 co_channel=0xff;
118288 + PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
118289 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
118290
118291 -
118292 - pattrib->last_txcmdsz = pattrib->pktlen;
118293 -
118294 -#ifdef CONFIG_DEBUG_CFG80211
118295 - printk("%s, ack=%d, ok!\n", __func__, ack );
118296 -#endif
118297 + co_channel = rtw_get_oper_ch(padapter);
118298
118299 - //indicate ack before issue frame to avoid racing with rsp frame
118300 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
118301 - cfg80211_mgmt_tx_status(dev, *cookie, buf, len, ack, GFP_KERNEL);
118302 -#elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35))
118303 - cfg80211_action_tx_status(dev, *cookie, buf, len, ack, GFP_KERNEL);
118304 -#endif
118305 -
118306 - dump_mgntframe(padapter, pmgntframe);
118307 -
118308 - return ret;
118309 -
118310 -exit:
118311 -
118312 - printk("%s, ack=%d \n", __func__, ack );
118313 + if (tx_ch != pbuddy_mlmeext->cur_channel) {
118314
118315 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
118316 - cfg80211_mgmt_tx_status(dev, *cookie, buf, len, ack, GFP_KERNEL);
118317 -#elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35))
118318 - cfg80211_action_tx_status(dev, *cookie, buf, len, ack, GFP_KERNEL);
118319 -#endif
118320 -
118321 - return ret;
118322 + u16 ext_listen_period;
118323
118324 -}
118325 + if (ATOMIC_READ(&pwdev_priv->switch_ch_to)==1) {
118326 + DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);
118327 + issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);
118328
118329 -static s32 cfg80211_rtw_remain_on_channel(struct wiphy *wiphy, struct net_device *dev,
118330 - struct ieee80211_channel * channel,
118331 - enum nl80211_channel_type channel_type,
118332 - unsigned int duration, u64 *cookie)
118333 -{
118334 - s32 err = 0;
118335 - _adapter *padapter = wiphy_to_adapter(wiphy);
118336 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
118337 - struct wifidirect_info *pwdinfo = &padapter->wdinfo;
118338 - struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
118339 - u8 remain_ch = (u8) ieee80211_frequency_to_channel(channel->center_freq);
118340 + ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);
118341 +
118342 + //DBG_8192C("%s, set switch ch timer, period=%d\n", __func__, pwdinfo->ext_listen_period);
118343 + //_set_timer(&pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_period);
118344 + }
118345 +
118346 + if (check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
118347 + {
118348 + ext_listen_period = 500;// 500ms
118349 + }
118350 + else
118351 + {
118352 + ext_listen_period = pwdinfo->ext_listen_period;
118353 + }
118354 +
118355 + DBG_8192C("%s, set switch ch timer, period=%d\n", __func__, ext_listen_period);
118356 + _set_timer(&pwdinfo->ap_p2p_switch_timer, ext_listen_period);
118357 +
118358 + }
118359
118360 - printk("%s channel %02u duration %d\n", __func__, remain_ch, duration);
118361 + if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
118362 + pmlmeext->cur_channel = tx_ch;
118363 +
118364 + if (tx_ch != co_channel)
118365 + set_channel_bwmode(padapter, tx_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118366 + }else
118367 +#endif //CONFIG_CONCURRENT_MODE
118368 + //if (tx_ch != pmlmeext->cur_channel) {
118369 + if(tx_ch != rtw_get_oper_ch(padapter)) {
118370 + if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
118371 + pmlmeext->cur_channel = tx_ch;
118372 + set_channel_bwmode(padapter, tx_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118373 + }
118374
118375 - if(_FAIL == rtw_pwr_wakeup(padapter)) {
118376 - err = -EFAULT;
118377 + //starting alloc mgmt frame to dump it
118378 + if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
118379 + {
118380 + //ret = -ENOMEM;
118381 + ret = _FAIL;
118382 goto exit;
118383 }
118384
118385 - pcfg80211_wdinfo->remain_on_ch_dev = dev;
118386 - _rtw_memcpy(&pcfg80211_wdinfo->remain_on_ch_channel, channel, sizeof(struct ieee80211_channel));
118387 - pcfg80211_wdinfo->remain_on_ch_type= channel_type;
118388 - pcfg80211_wdinfo->remain_on_ch_cookie= *cookie;
118389 - cfg80211_ready_on_channel(dev, *cookie, channel, channel_type, duration, GFP_KERNEL);
118390 + //update attribute
118391 + pattrib = &pmgntframe->attrib;
118392 + update_mgntframe_attrib(padapter, pattrib);
118393 + pattrib->retry_ctrl = _FALSE;
118394 +
118395 + _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
118396
118397 - pcfg80211_wdinfo->restore_channel = pmlmeext->cur_channel;
118398 + pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
118399
118400 - rtw_cfg80211_scan_abort(padapter);
118401 + _rtw_memcpy(pframe, (void*)buf, len);
118402 + pattrib->pktlen = len;
118403 +
118404 + pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
118405 + //update seq number
118406 + pmlmeext->mgnt_seq = GetSequence(pwlanhdr);
118407 + pattrib->seqnum = pmlmeext->mgnt_seq;
118408 + pmlmeext->mgnt_seq++;
118409
118410 - if( remain_ch != pmlmeext->cur_channel )
118411 +#ifdef CONFIG_WFD
118412 {
118413 - if(rtw_is_channel_set_contains_channel(pmlmeext->channel_set, remain_ch)) {
118414 - pmlmeext->cur_channel = remain_ch;
118415 - set_channel_bwmode(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
118416 - } else {
118417 - DBG_871X("%s remain_ch:%u not in channel plan!!!!\n", __FUNCTION__, remain_ch);
118418 + struct wifi_display_info *pwfd_info;
118419 +
118420 + pwfd_info = padapter->wdinfo.wfd_info;
118421 +
118422 + if ( _TRUE == pwfd_info->wfd_enable )
118423 + {
118424 + rtw_append_wfd_ie( padapter, pframe, &pattrib->pktlen );
118425 }
118426 }
118427 +#endif // CONFIG_WFD
118428 +
118429 + pattrib->last_txcmdsz = pattrib->pktlen;
118430
118431 - //if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
118432 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
118433 + if (dump_mgntframe_and_wait_ack(padapter, pmgntframe) != _SUCCESS)
118434 {
118435 - rtw_p2p_enable(padapter, P2P_ROLE_DEVICE);
118436 - wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _TRUE;
118437 + ack = _FALSE;
118438 + ret = _FAIL;
118439 +
118440 + #ifdef CONFIG_DEBUG_CFG80211
118441 + DBG_8192C("%s, ack == _FAIL\n", __func__);
118442 + #endif
118443 }
118444 - else
118445 + else
118446 {
118447 - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
118448 -#ifdef CONFIG_DEBUG_CFG80211
118449 - printk("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
118450 -#endif
118451 + #ifdef CONFIG_DEBUG_CFG80211
118452 + DBG_8192C("%s, ack=%d, ok!\n", __func__, ack);
118453 + #endif
118454 + ret = _SUCCESS;
118455 }
118456 -
118457 - rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
118458 - pwdinfo->listen_channel = pmlmeext->cur_channel;
118459 -
118460 - //call this after other things have been done
118461 - _set_timer( &pcfg80211_wdinfo->remain_on_ch_timer, duration);
118462 -
118463 +
118464 exit:
118465 - return err;
118466 +
118467 + #ifdef CONFIG_DEBUG_CFG80211
118468 + DBG_8192C("%s, ret=%d\n", __func__, ret);
118469 + #endif
118470 +
118471 + return ret;
118472 +
118473 }
118474
118475 -static s32 cfg80211_rtw_cancel_remain_on_channel(struct wiphy *wiphy, struct net_device *dev,
118476 - u64 cookie)
118477 +static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy,
118478 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
118479 + struct wireless_dev *wdev,
118480 +#else
118481 + struct net_device *ndev,
118482 +#endif
118483 + struct ieee80211_channel *chan,
118484 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
118485 + bool offchan,
118486 +#endif
118487 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
118488 + enum nl80211_channel_type channel_type,
118489 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
118490 + bool channel_type_valid,
118491 + #endif
118492 +#endif
118493 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
118494 + unsigned int wait,
118495 +#endif
118496 + const u8 *buf, size_t len,
118497 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
118498 + bool no_cck,
118499 +#endif
118500 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
118501 + bool dont_wait_for_ack,
118502 +#endif
118503 + u64 *cookie)
118504 {
118505 - s32 err = 0;
118506 - _adapter *padapter = wiphy_to_adapter(wiphy);
118507 - struct wifidirect_info *pwdinfo = &padapter->wdinfo;
118508 - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
118509 -
118510 - printk("%s\n", __func__);
118511 + _adapter *padapter = (_adapter *)wiphy_to_adapter(wiphy);
118512 + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
118513 + int ret = 0;
118514 + int tx_ret;
118515 + u32 dump_limit = RTW_MAX_MGMT_TX_CNT;
118516 + u32 dump_cnt = 0;
118517 + bool ack = _TRUE;
118518 + u8 tx_ch = (u8)ieee80211_frequency_to_channel(chan->center_freq);
118519 + u8 category, action;
118520 + int type = (-1);
118521 + u32 start = rtw_get_current_time();
118522
118523 - //Modified bu Kurt 20120114
118524 - _cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
118525 + /* cookie generation */
118526 + *cookie = (unsigned long) buf;
118527
118528 - #if 0
118529 - // Disable P2P Listen State
118530 - if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
118531 - {
118532 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
118533 - {
118534 - _cancel_timer_ex( &pwdinfo->find_phase_timer );
118535 - _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
118536 - _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
118537 -
118538 - rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
118539 - _rtw_memset(pwdinfo, 0x00, sizeof(struct wifidirect_info));
118540 +#ifdef CONFIG_DEBUG_CFG80211
118541 + DBG_871X(FUNC_ADPT_FMT" len=%zu, ch=%d"
118542 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
118543 + ", ch_type=%d"
118544 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
118545 + ", channel_type_valid=%d"
118546 + #endif
118547 + #endif
118548 + "\n", FUNC_ADPT_ARG(padapter),
118549 + len, tx_ch
118550 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
118551 + , channel_type
118552 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
118553 + , channel_type_valid
118554 + #endif
118555 + #endif
118556 + );
118557 +#endif /* CONFIG_DEBUG_CFG80211 */
118558
118559 - if(pwrpriv->bips_processing == _FALSE){
118560 - rtw_set_pwr_state_check_timer(pwrpriv);
118561 - }
118562 - }
118563 + /* indicate ack before issue frame to avoid racing with rsp frame */
118564 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
118565 + rtw_cfg80211_mgmt_tx_status(padapter, *cookie, buf, len, ack, GFP_KERNEL);
118566 +#elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35))
118567 + cfg80211_action_tx_status(ndev, *cookie, buf, len, ack, GFP_KERNEL);
118568 +#endif
118569 +
118570 + if (rtw_action_frame_parse(buf, len, &category, &action) == _FALSE) {
118571 + DBG_8192C(FUNC_ADPT_FMT" frame_control:0x%x\n", FUNC_ADPT_ARG(padapter),
118572 + le16_to_cpu(((struct rtw_ieee80211_hdr_3addr *)buf)->frame_ctl));
118573 + goto exit;
118574 + }
118575 +
118576 + DBG_8192C("RTW_Tx:tx_ch=%d, da="MAC_FMT"\n", tx_ch, MAC_ARG(GetAddr1Ptr(buf)));
118577 + #ifdef CONFIG_P2P
118578 + if((type = rtw_p2p_check_frames(padapter, buf, len, _TRUE)) >= 0) {
118579 + goto dump;
118580 }
118581 - else
118582 #endif
118583 - {
118584 - rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
118585 -#ifdef CONFIG_DEBUG_CFG80211
118586 - printk("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
118587 -#endif
118588 + if (category == RTW_WLAN_CATEGORY_PUBLIC)
118589 + DBG_871X("RTW_Tx:%s\n", action_public_str(action));
118590 + else
118591 + DBG_871X("RTW_Tx:category(%u), action(%u)\n", category, action);
118592 +
118593 +dump:
118594 + do {
118595 + dump_cnt++;
118596 + tx_ret = _cfg80211_rtw_mgmt_tx(padapter, tx_ch, buf, len);
118597 + } while (dump_cnt < dump_limit && tx_ret != _SUCCESS);
118598 +
118599 + if (tx_ret != _SUCCESS || dump_cnt > 1) {
118600 + DBG_871X(FUNC_ADPT_FMT" %s (%d/%d) in %d ms\n", FUNC_ADPT_ARG(padapter),
118601 + tx_ret==_SUCCESS?"OK":"FAIL", dump_cnt, dump_limit, rtw_get_passing_time_ms(start));
118602 }
118603
118604 - return err;
118605 + switch (type) {
118606 + case P2P_GO_NEGO_CONF:
118607 + rtw_clear_scan_deny(padapter);
118608 + break;
118609 + case P2P_INVIT_RESP:
118610 + if (pwdev_priv->invit_info.flags & BIT(0)
118611 + && pwdev_priv->invit_info.status == 0)
118612 + {
118613 + DBG_871X(FUNC_ADPT_FMT" agree with invitation of persistent group\n",
118614 + FUNC_ADPT_ARG(padapter));
118615 + rtw_set_scan_deny(padapter, 5000);
118616 + rtw_pwr_wakeup_ex(padapter, 5000);
118617 + rtw_clear_scan_deny(padapter);
118618 + }
118619 + break;
118620 + }
118621 +
118622 +exit:
118623 + return ret;
118624 }
118625
118626 -static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy, struct net_device *dev,
118627 +static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy,
118628 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0))
118629 + struct wireless_dev *wdev,
118630 +#else
118631 + struct net_device *ndev,
118632 +#endif
118633 u16 frame_type, bool reg)
118634 {
118635 + _adapter *adapter = wiphy_to_adapter(wiphy);
118636
118637 #ifdef CONFIG_DEBUG_CFG80211
118638 - printk("%s: frame_type: %x, reg: %d\n", __func__, frame_type, reg);
118639 + DBG_871X(FUNC_ADPT_FMT" frame_type:%x, reg:%d\n", FUNC_ADPT_ARG(adapter),
118640 + frame_type, reg);
118641 #endif
118642
118643 if (frame_type != (IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_REQ))
118644 @@ -4082,7 +4776,7 @@ static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy, struct net_dev
118645 return;
118646 }
118647
118648 -static int rtw_cfg80211_set_beacon_wpsp2pie(struct net_device *net, char *buf, int len)
118649 +static int rtw_cfg80211_set_beacon_wpsp2pie(struct net_device *ndev, char *buf, int len)
118650 {
118651 int ret = 0;
118652 uint wps_ielen = 0;
118653 @@ -4090,18 +4784,20 @@ static int rtw_cfg80211_set_beacon_wpsp2pie(struct net_device *net, char *buf, i
118654 u32 p2p_ielen = 0;
118655 u8 wps_oui[8]={0x0,0x50,0xf2,0x04};
118656 u8 *p2p_ie;
118657 - _adapter *padapter = (_adapter *)rtw_netdev_priv(net);
118658 + u32 wfd_ielen = 0;
118659 + u8 *wfd_ie;
118660 + _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
118661 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
118662 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
118663
118664 - printk("%s, ielen=%d\n", __func__, len);
118665 + DBG_871X(FUNC_NDEV_FMT" ielen=%d\n", FUNC_NDEV_ARG(ndev), len);
118666
118667 if(len>0)
118668 {
118669 if((wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen)))
118670 {
118671 #ifdef CONFIG_DEBUG_CFG80211
118672 - printk("bcn_wps_ielen=%d\n", wps_ielen);
118673 + DBG_8192C("bcn_wps_ielen=%d\n", wps_ielen);
118674 #endif
118675
118676 if(pmlmepriv->wps_beacon_ie)
118677 @@ -4114,7 +4810,7 @@ static int rtw_cfg80211_set_beacon_wpsp2pie(struct net_device *net, char *buf, i
118678
118679 pmlmepriv->wps_beacon_ie = rtw_malloc(wps_ielen);
118680 if ( pmlmepriv->wps_beacon_ie == NULL) {
118681 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118682 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118683 return -EINVAL;
118684
118685 }
118686 @@ -4126,13 +4822,14 @@ static int rtw_cfg80211_set_beacon_wpsp2pie(struct net_device *net, char *buf, i
118687
118688 }
118689
118690 - buf += wps_ielen;
118691 - len -= wps_ielen;
118692 -
118693 + //buf += wps_ielen;
118694 + //len -= wps_ielen;
118695 +
118696 + #ifdef CONFIG_P2P
118697 if((p2p_ie=rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen)))
118698 {
118699 #ifdef CONFIG_DEBUG_CFG80211
118700 - printk("bcn_p2p_ielen=%d\n", p2p_ielen);
118701 + DBG_8192C("bcn_p2p_ielen=%d\n", p2p_ielen);
118702 #endif
118703
118704 if(pmlmepriv->p2p_beacon_ie)
118705 @@ -4145,7 +4842,7 @@ static int rtw_cfg80211_set_beacon_wpsp2pie(struct net_device *net, char *buf, i
118706
118707 pmlmepriv->p2p_beacon_ie = rtw_malloc(p2p_ielen);
118708 if ( pmlmepriv->p2p_beacon_ie == NULL) {
118709 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118710 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118711 return -EINVAL;
118712
118713 }
118714 @@ -4154,6 +4851,35 @@ static int rtw_cfg80211_set_beacon_wpsp2pie(struct net_device *net, char *buf, i
118715 pmlmepriv->p2p_beacon_ie_len = p2p_ielen;
118716
118717 }
118718 + #endif //CONFIG_P2P
118719 +
118720 + //buf += p2p_ielen;
118721 + //len -= p2p_ielen;
118722 +
118723 + #ifdef CONFIG_WFD
118724 + if(rtw_get_wfd_ie(buf, len, NULL, &wfd_ielen))
118725 + {
118726 + #ifdef CONFIG_DEBUG_CFG80211
118727 + DBG_8192C("bcn_wfd_ielen=%d\n", wfd_ielen);
118728 + #endif
118729 +
118730 + if(pmlmepriv->wfd_beacon_ie)
118731 + {
118732 + u32 free_len = pmlmepriv->wfd_beacon_ie_len;
118733 + pmlmepriv->wfd_beacon_ie_len = 0;
118734 + rtw_mfree(pmlmepriv->wfd_beacon_ie, free_len);
118735 + pmlmepriv->wfd_beacon_ie = NULL;
118736 + }
118737 +
118738 + pmlmepriv->wfd_beacon_ie = rtw_malloc(wfd_ielen);
118739 + if ( pmlmepriv->wfd_beacon_ie == NULL) {
118740 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118741 + return -EINVAL;
118742 +
118743 + }
118744 + rtw_get_wfd_ie(buf, len, pmlmepriv->wfd_beacon_ie, &pmlmepriv->wfd_beacon_ie_len);
118745 + }
118746 + #endif //CONFIG_WFD
118747
118748 pmlmeext->bstart_bss = _TRUE;
118749
118750 @@ -4170,11 +4896,13 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
118751 u8 *wps_ie;
118752 u32 p2p_ielen = 0;
118753 u8 *p2p_ie;
118754 + u32 wfd_ielen = 0;
118755 + u8 *wfd_ie;
118756 _adapter *padapter = (_adapter *)rtw_netdev_priv(net);
118757 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
118758
118759 #ifdef CONFIG_DEBUG_CFG80211
118760 - printk("%s, ielen=%d\n", __func__, len);
118761 + DBG_8192C("%s, ielen=%d\n", __func__, len);
118762 #endif
118763
118764 if(len>0)
118765 @@ -4185,9 +4913,25 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
118766 u16 uconfig_method, *puconfig_method = NULL;
118767
118768 #ifdef CONFIG_DEBUG_CFG80211
118769 - printk("probe_resp_wps_ielen=%d\n", wps_ielen);
118770 + DBG_8192C("probe_resp_wps_ielen=%d\n", wps_ielen);
118771 #endif
118772 -
118773 +
118774 + if(check_fwstate(pmlmepriv, WIFI_UNDER_WPS))
118775 + {
118776 + u8 sr = 0;
118777 + rtw_get_wps_attr_content(wps_ie, wps_ielen, WPS_ATTR_SELECTED_REGISTRAR, (u8*)(&sr), NULL);
118778 +
118779 + if (sr != 0)
118780 + {
118781 + DBG_871X("%s, got sr\n", __func__);
118782 + }
118783 + else
118784 + {
118785 + DBG_8192C("GO mode process WPS under site-survey, sr no set\n");
118786 + return ret;
118787 + }
118788 + }
118789 +
118790 if(pmlmepriv->wps_probe_resp_ie)
118791 {
118792 u32 free_len = pmlmepriv->wps_probe_resp_ie_len;
118793 @@ -4198,7 +4942,7 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
118794
118795 pmlmepriv->wps_probe_resp_ie = rtw_malloc(wps_ielen);
118796 if ( pmlmepriv->wps_probe_resp_ie == NULL) {
118797 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118798 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118799 return -EINVAL;
118800
118801 }
118802 @@ -4221,9 +4965,10 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
118803
118804 }
118805
118806 - buf += wps_ielen;
118807 - len -= wps_ielen;
118808 -
118809 + //buf += wps_ielen;
118810 + //len -= wps_ielen;
118811 +
118812 + #ifdef CONFIG_P2P
118813 if((p2p_ie=rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen)))
118814 {
118815 u8 is_GO = _FALSE;
118816 @@ -4231,7 +4976,7 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
118817 u16 cap_attr=0;
118818
118819 #ifdef CONFIG_DEBUG_CFG80211
118820 - printk("probe_resp_p2p_ielen=%d\n", p2p_ielen);
118821 + DBG_8192C("probe_resp_p2p_ielen=%d\n", p2p_ielen);
118822 #endif
118823
118824 //Check P2P Capability ATTR
118825 @@ -4245,7 +4990,7 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
118826 is_GO = (grp_cap&BIT(0)) ? _TRUE:_FALSE;
118827
118828 if(is_GO)
118829 - printk("Got P2P Capability Attr, grp_cap=0x%x, is_GO\n", grp_cap);
118830 + DBG_8192C("Got P2P Capability Attr, grp_cap=0x%x, is_GO\n", grp_cap);
118831 }
118832
118833
118834 @@ -4261,7 +5006,7 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
118835
118836 pmlmepriv->p2p_probe_resp_ie = rtw_malloc(p2p_ielen);
118837 if ( pmlmepriv->p2p_probe_resp_ie == NULL) {
118838 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118839 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118840 return -EINVAL;
118841
118842 }
118843 @@ -4280,7 +5025,7 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
118844
118845 pmlmepriv->p2p_go_probe_resp_ie = rtw_malloc(p2p_ielen);
118846 if ( pmlmepriv->p2p_go_probe_resp_ie == NULL) {
118847 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118848 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118849 return -EINVAL;
118850
118851 }
118852 @@ -4288,7 +5033,36 @@ static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *bu
118853 pmlmepriv->p2p_go_probe_resp_ie_len = p2p_ielen;
118854 }
118855
118856 - }
118857 + }
118858 + #endif //CONFIG_P2P
118859 +
118860 + //buf += p2p_ielen;
118861 + //len -= p2p_ielen;
118862 +
118863 + #ifdef CONFIG_WFD
118864 + if(rtw_get_wfd_ie(buf, len, NULL, &wfd_ielen))
118865 + {
118866 + #ifdef CONFIG_DEBUG_CFG80211
118867 + DBG_8192C("probe_resp_wfd_ielen=%d\n", wfd_ielen);
118868 + #endif
118869 +
118870 + if(pmlmepriv->wfd_probe_resp_ie)
118871 + {
118872 + u32 free_len = pmlmepriv->wfd_probe_resp_ie_len;
118873 + pmlmepriv->wfd_probe_resp_ie_len = 0;
118874 + rtw_mfree(pmlmepriv->wfd_probe_resp_ie, free_len);
118875 + pmlmepriv->wfd_probe_resp_ie = NULL;
118876 + }
118877 +
118878 + pmlmepriv->wfd_probe_resp_ie = rtw_malloc(wfd_ielen);
118879 + if ( pmlmepriv->wfd_probe_resp_ie == NULL) {
118880 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118881 + return -EINVAL;
118882 +
118883 + }
118884 + rtw_get_wfd_ie(buf, len, pmlmepriv->wfd_probe_resp_ie, &pmlmepriv->wfd_probe_resp_ie_len);
118885 + }
118886 + #endif //CONFIG_WFD
118887
118888 }
118889
118890 @@ -4302,7 +5076,7 @@ static int rtw_cfg80211_set_assoc_resp_wpsp2pie(struct net_device *net, char *bu
118891 _adapter *padapter = (_adapter *)rtw_netdev_priv(net);
118892 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
118893
118894 - printk("%s, ielen=%d\n", __func__, len);
118895 + DBG_8192C("%s, ielen=%d\n", __func__, len);
118896
118897 if(len>0)
118898 {
118899 @@ -4316,7 +5090,7 @@ static int rtw_cfg80211_set_assoc_resp_wpsp2pie(struct net_device *net, char *bu
118900
118901 pmlmepriv->wps_assoc_resp_ie = rtw_malloc(len);
118902 if ( pmlmepriv->wps_assoc_resp_ie == NULL) {
118903 - printk("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118904 + DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
118905 return -EINVAL;
118906
118907 }
118908 @@ -4336,11 +5110,14 @@ int rtw_cfg80211_set_mgnt_wpsp2pie(struct net_device *net, char *buf, int len,
118909 u32 p2p_ielen = 0;
118910
118911 #ifdef CONFIG_DEBUG_CFG80211
118912 - printk("%s, ielen=%d\n", __func__, len);
118913 + DBG_8192C("%s, ielen=%d\n", __func__, len);
118914 #endif
118915
118916 - if((rtw_get_wps_ie(buf, len, NULL, &wps_ielen) && (wps_ielen>0)) ||
118917 - (rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen) && (p2p_ielen>0)) )
118918 + if( (rtw_get_wps_ie(buf, len, NULL, &wps_ielen) && (wps_ielen>0))
118919 + #ifdef CONFIG_P2P
118920 + || (rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen) && (p2p_ielen>0))
118921 + #endif
118922 + )
118923 {
118924 if (net != NULL)
118925 {
118926 @@ -4382,24 +5159,39 @@ static struct cfg80211_ops rtw_cfg80211_ops = {
118927 .set_pmksa = cfg80211_rtw_set_pmksa,
118928 .del_pmksa = cfg80211_rtw_del_pmksa,
118929 .flush_pmksa = cfg80211_rtw_flush_pmksa,
118930 +
118931 #ifdef CONFIG_AP_MODE
118932 .add_virtual_intf = cfg80211_rtw_add_virtual_intf,
118933 .del_virtual_intf = cfg80211_rtw_del_virtual_intf,
118934 +
118935 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 4, 0)) && !defined(COMPAT_KERNEL_RELEASE)
118936 .add_beacon = cfg80211_rtw_add_beacon,
118937 .set_beacon = cfg80211_rtw_set_beacon,
118938 .del_beacon = cfg80211_rtw_del_beacon,
118939 + #else
118940 + .start_ap = cfg80211_rtw_start_ap,
118941 + .change_beacon = cfg80211_rtw_change_beacon,
118942 + .stop_ap = cfg80211_rtw_stop_ap,
118943 + #endif
118944 +
118945 .add_station = cfg80211_rtw_add_station,
118946 .del_station = cfg80211_rtw_del_station,
118947 .change_station = cfg80211_rtw_change_station,
118948 .dump_station = cfg80211_rtw_dump_station,
118949 .change_bss = cfg80211_rtw_change_bss,
118950 + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))
118951 .set_channel = cfg80211_rtw_set_channel,
118952 + #endif
118953 //.auth = cfg80211_rtw_auth,
118954 //.assoc = cfg80211_rtw_assoc,
118955 #endif //CONFIG_AP_MODE
118956 +
118957 +#ifdef CONFIG_P2P
118958 .remain_on_channel = cfg80211_rtw_remain_on_channel,
118959 - .cancel_remain_on_channel = cfg80211_rtw_cancel_remain_on_channel,
118960 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
118961 + .cancel_remain_on_channel = cfg80211_rtw_cancel_remain_on_channel,
118962 +#endif
118963 +
118964 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
118965 .mgmt_tx = cfg80211_rtw_mgmt_tx,
118966 .mgmt_frame_register = cfg80211_rtw_mgmt_frame_register,
118967 #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35))
118968 @@ -4458,7 +5250,7 @@ static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap, enum
118969 }
118970 else
118971 {
118972 - printk("%s, error rf_type=%d\n", __func__, rf_type);
118973 + DBG_8192C("%s, error rf_type=%d\n", __func__, rf_type);
118974 }
118975
118976 }
118977 @@ -4470,18 +5262,48 @@ void rtw_cfg80211_init_wiphy(_adapter *padapter)
118978 struct wireless_dev *pwdev = padapter->rtw_wdev;
118979 struct wiphy *wiphy = pwdev->wiphy;
118980
118981 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
118982 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
118983
118984 - printk("%s:rf_type=%d\n", __func__, rf_type);
118985 -
118986 - bands = wiphy->bands[IEEE80211_BAND_2GHZ];
118987 - rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_2GHZ, rf_type);
118988 + DBG_8192C("%s:rf_type=%d\n", __func__, rf_type);
118989
118990 + /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */
118991 + {
118992 + bands = wiphy->bands[IEEE80211_BAND_2GHZ];
118993 + if(bands)
118994 + rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_2GHZ, rf_type);
118995 + }
118996
118997 - bands = wiphy->bands[IEEE80211_BAND_5GHZ];
118998 - rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_5GHZ, rf_type);
118999 + /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */
119000 + {
119001 + bands = wiphy->bands[IEEE80211_BAND_5GHZ];
119002 + if(bands)
119003 + rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_5GHZ, rf_type);
119004 + }
119005 }
119006
119007 +/*
119008 +struct ieee80211_iface_limit rtw_limits[] = {
119009 + { .max = 1, .types = BIT(NL80211_IFTYPE_STATION)
119010 + | BIT(NL80211_IFTYPE_ADHOC)
119011 +#ifdef CONFIG_AP_MODE
119012 + | BIT(NL80211_IFTYPE_AP)
119013 +#endif
119014 +#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
119015 + | BIT(NL80211_IFTYPE_P2P_CLIENT)
119016 + | BIT(NL80211_IFTYPE_P2P_GO)
119017 +#endif
119018 + },
119019 + {.max = 1, .types = BIT(NL80211_IFTYPE_MONITOR)},
119020 +};
119021 +
119022 +struct ieee80211_iface_combination rtw_combinations = {
119023 + .limits = rtw_limits,
119024 + .n_limits = ARRAY_SIZE(rtw_limits),
119025 + .max_interfaces = 2,
119026 + .num_different_channels = 1,
119027 +};
119028 +*/
119029 +
119030 static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy)
119031 {
119032
119033 @@ -4491,95 +5313,134 @@ static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy)
119034 wiphy->max_scan_ie_len = RTW_SCAN_IE_LEN_MAX;
119035 wiphy->max_num_pmkids = RTW_MAX_NUM_PMKIDS;
119036
119037 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
119038 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
119039 wiphy->max_remain_on_channel_duration = RTW_MAX_REMAIN_ON_CHANNEL_DURATION;
119040 #endif
119041
119042 - wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
119043 - BIT(NL80211_IFTYPE_ADHOC)
119044 + wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION)
119045 + | BIT(NL80211_IFTYPE_ADHOC)
119046 #ifdef CONFIG_AP_MODE
119047 - | BIT(NL80211_IFTYPE_AP) | BIT(NL80211_IFTYPE_MONITOR)
119048 + | BIT(NL80211_IFTYPE_AP)
119049 + | BIT(NL80211_IFTYPE_MONITOR)
119050 +#endif
119051 +#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
119052 + | BIT(NL80211_IFTYPE_P2P_CLIENT)
119053 + | BIT(NL80211_IFTYPE_P2P_GO)
119054 #endif
119055 -#if defined(CONFIG_P2P) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
119056 - | BIT(NL80211_IFTYPE_P2P_CLIENT) | BIT(NL80211_IFTYPE_P2P_GO)
119057 -#endif
119058 - ;
119059 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
119060 + ;
119061 +
119062 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
119063 #ifdef CONFIG_AP_MODE
119064 wiphy->mgmt_stypes = rtw_cfg80211_default_mgmt_stypes;
119065 #endif //CONFIG_AP_MODE
119066 #endif
119067
119068 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0))
119069 + wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR);
119070 +#endif
119071 +
119072 + /*
119073 + wiphy->iface_combinations = &rtw_combinations;
119074 + wiphy->n_iface_combinations = 1;
119075 + */
119076 +
119077 wiphy->cipher_suites = rtw_cipher_suites;
119078 wiphy->n_cipher_suites = ARRAY_SIZE(rtw_cipher_suites);
119079
119080 -
119081 - wiphy->bands[IEEE80211_BAND_2GHZ] = &rtw_band_2ghz;
119082 - wiphy->bands[IEEE80211_BAND_5GHZ] = &rtw_band_5ghz;
119083 + /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */
119084 + wiphy->bands[IEEE80211_BAND_2GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_2GHZ);
119085 + /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */
119086 + wiphy->bands[IEEE80211_BAND_5GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_5GHZ);
119087
119088 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) && LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0))
119089 + wiphy->flags |= WIPHY_FLAG_SUPPORTS_SEPARATE_DEFAULT_KEYS;
119090 +#endif
119091 +
119092 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
119093 + wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
119094 + wiphy->flags |= WIPHY_FLAG_OFFCHAN_TX | WIPHY_FLAG_HAVE_AP_SME;
119095 +#endif
119096 +
119097 + if(padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)
119098 + wiphy->flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
119099 + else
119100 + wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
119101 }
119102
119103 int rtw_wdev_alloc(_adapter *padapter, struct device *dev)
119104 {
119105 int ret = 0;
119106 + struct wiphy *wiphy;
119107 struct wireless_dev *wdev;
119108 struct rtw_wdev_priv *pwdev_priv;
119109 struct net_device *pnetdev = padapter->pnetdev;
119110
119111 - printk("%s\n", __func__);
119112 + DBG_8192C("%s(padapter=%p)\n", __func__, padapter);
119113
119114 - wdev = (struct wireless_dev *)rtw_zmalloc(sizeof(struct wireless_dev));
119115 - if (!wdev) {
119116 - printk("Couldn't allocate wireless device\n");
119117 - return (-ENOMEM);
119118 + /* wiphy */
119119 + wiphy = wiphy_new(&rtw_cfg80211_ops, sizeof(struct rtw_wdev_priv));
119120 + if (!wiphy) {
119121 + DBG_8192C("Couldn't allocate wiphy device\n");
119122 + ret = -ENOMEM;
119123 + goto exit;
119124 }
119125 + set_wiphy_dev(wiphy, dev);
119126 + rtw_cfg80211_preinit_wiphy(padapter, wiphy);
119127
119128 - wdev->wiphy = wiphy_new(&rtw_cfg80211_ops, sizeof(struct rtw_wdev_priv));
119129 - if (!wdev->wiphy) {
119130 - printk("Couldn't allocate wiphy device\n");
119131 - ret = -ENOMEM;
119132 - goto out_err_new;
119133 + ret = wiphy_register(wiphy);
119134 + if (ret < 0) {
119135 + DBG_8192C("Couldn't register wiphy device\n");
119136 + goto free_wiphy;
119137 }
119138
119139 - set_wiphy_dev(wdev->wiphy, dev);
119140 -
119141 - //
119142 + /* wdev */
119143 + wdev = (struct wireless_dev *)rtw_zmalloc(sizeof(struct wireless_dev));
119144 + if (!wdev) {
119145 + DBG_8192C("Couldn't allocate wireless device\n");
119146 + ret = -ENOMEM;
119147 + goto unregister_wiphy;
119148 + }
119149 + wdev->wiphy = wiphy;
119150 + wdev->netdev = pnetdev;
119151 + //wdev->iftype = NL80211_IFTYPE_STATION;
119152 + wdev->iftype = NL80211_IFTYPE_MONITOR; // for rtw_setopmode_cmd() in cfg80211_rtw_change_iface()
119153 padapter->rtw_wdev = wdev;
119154 pnetdev->ieee80211_ptr = wdev;
119155
119156 //init pwdev_priv
119157 pwdev_priv = wdev_to_priv(wdev);
119158 - pwdev_priv->pmon_ndev = NULL;
119159 - pwdev_priv->ifname_mon[0] = '\0';
119160 pwdev_priv->rtw_wdev = wdev;
119161 + pwdev_priv->pmon_ndev = NULL;
119162 + pwdev_priv->ifname_mon[0] = '\0';
119163 pwdev_priv->padapter = padapter;
119164 pwdev_priv->scan_request = NULL;
119165 _rtw_spinlock_init(&pwdev_priv->scan_req_lock);
119166
119167 pwdev_priv->p2p_enabled = _FALSE;
119168 pwdev_priv->provdisc_req_issued = _FALSE;
119169 + rtw_wdev_invit_info_init(&pwdev_priv->invit_info);
119170 + rtw_wdev_nego_info_init(&pwdev_priv->nego_info);
119171
119172 - wdev->netdev = pnetdev;
119173 - wdev->iftype = NL80211_IFTYPE_MONITOR;
119174 -
119175 - rtw_cfg80211_preinit_wiphy(padapter, wdev->wiphy);
119176 -
119177 - ret = wiphy_register(wdev->wiphy);
119178 - if (ret < 0) {
119179 - printk("Couldn't register wiphy device\n");
119180 - goto out_err_register;
119181 - }
119182 + pwdev_priv->bandroid_scan = _FALSE;
119183
119184 - SET_NETDEV_DEV(pnetdev, wiphy_dev(wdev->wiphy));
119185 + if(padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)
119186 + pwdev_priv->power_mgmt = _TRUE;
119187 + else
119188 + pwdev_priv->power_mgmt = _FALSE;
119189 +
119190 +#ifdef CONFIG_CONCURRENT_MODE
119191 + ATOMIC_SET(&pwdev_priv->switch_ch_to, 1);
119192 + ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
119193 +#endif
119194
119195 return ret;
119196
119197 - out_err_register:
119198 - wiphy_free(wdev->wiphy);
119199 -
119200 - out_err_new:
119201 rtw_mfree((u8*)wdev, sizeof(struct wireless_dev));
119202 -
119203 +unregister_wiphy:
119204 + wiphy_unregister(wiphy);
119205 + free_wiphy:
119206 + wiphy_free(wiphy);
119207 +exit:
119208 return ret;
119209
119210 }
119211 @@ -4588,30 +5449,40 @@ void rtw_wdev_free(struct wireless_dev *wdev)
119212 {
119213 struct rtw_wdev_priv *pwdev_priv;
119214
119215 - printk("%s\n", __func__);
119216 + DBG_8192C("%s(wdev=%p)\n", __func__, wdev);
119217
119218 if (!wdev)
119219 return;
119220
119221 pwdev_priv = wdev_to_priv(wdev);
119222 +
119223 + rtw_spt_band_free(wdev->wiphy->bands[IEEE80211_BAND_2GHZ]);
119224 + rtw_spt_band_free(wdev->wiphy->bands[IEEE80211_BAND_5GHZ]);
119225
119226 - printk("%s, scan abort when device remove\n", __func__);
119227 + wiphy_free(wdev->wiphy);
119228 +
119229 + rtw_mfree((u8*)wdev, sizeof(struct wireless_dev));
119230 +}
119231 +
119232 +void rtw_wdev_unregister(struct wireless_dev *wdev)
119233 +{
119234 + struct rtw_wdev_priv *pwdev_priv;
119235 +
119236 + DBG_8192C("%s(wdev=%p)\n", __func__, wdev);
119237 +
119238 + if (!wdev)
119239 + return;
119240 +
119241 + pwdev_priv = wdev_to_priv(wdev);
119242 +
119243 rtw_cfg80211_indicate_scan_done(pwdev_priv, _TRUE);
119244 -
119245 - if(pwdev_priv->pmon_ndev)
119246 - {
119247 - printk("%s, unregister monitor interface\n", __func__);
119248 -
119249 +
119250 + if (pwdev_priv->pmon_ndev) {
119251 + DBG_8192C("%s, unregister monitor interface\n", __func__);
119252 unregister_netdev(pwdev_priv->pmon_ndev);
119253 -
119254 - free_netdev(pwdev_priv->pmon_ndev);
119255 - }
119256 -
119257 + }
119258
119259 wiphy_unregister(wdev->wiphy);
119260 - wiphy_free(wdev->wiphy);
119261 -
119262 - rtw_mfree((u8*)wdev, sizeof(struct wireless_dev));
119263 }
119264
119265 #endif //CONFIG_IOCTL_CFG80211
119266 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c
119267 index f999502..9adbeaf 100644
119268 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c
119269 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c
119270 @@ -34,7 +34,7 @@
119271 //#ifdef CONFIG_MP_INCLUDED
119272 #include <rtw_mp_ioctl.h>
119273 //#endif
119274 -
119275 +
119276 #ifdef CONFIG_USB_HCI
119277 #include <usb_ops.h>
119278 #endif //CONFIG_USB_HCI
119279 @@ -76,8 +76,7 @@ extern int ui_pid[3];
119280
119281 extern u8 key_2char2num(u8 hch, u8 lch);
119282 extern u8 str_2char2num(u8 hch, u8 lch);
119283 -
119284 -int rfpwrstate_check(_adapter *padapter);
119285 +extern u8 convert_ip_addr(u8 hch, u8 mch, u8 lch);
119286
119287 u32 rtw_rates[] = {1000000,2000000,5500000,11000000,
119288 6000000,9000000,12000000,18000000,24000000,36000000,48000000,54000000};
119289 @@ -139,11 +138,12 @@ static int hwaddr_aton_i(const char *txt, u8 *addr)
119290
119291 static void indicate_wx_custom_event(_adapter *padapter, char *msg)
119292 {
119293 +#ifndef CONFIG_IOCTL_CFG80211
119294 u8 *buff, *p;
119295 union iwreq_data wrqu;
119296
119297 - if (strlen(msg) > IW_CUSTOM_MAX) {
119298 - DBG_871X("%s strlen(msg):%u > IW_CUSTOM_MAX:%u\n", __FUNCTION__ ,strlen(msg), IW_CUSTOM_MAX);
119299 + if ((u32)strlen(msg) > IW_CUSTOM_MAX) {
119300 + DBG_871X("%s strlen(msg):%u > IW_CUSTOM_MAX:%u\n", __FUNCTION__ ,(u32)strlen(msg), IW_CUSTOM_MAX);
119301 return;
119302 }
119303
119304 @@ -152,90 +152,96 @@ static void indicate_wx_custom_event(_adapter *padapter, char *msg)
119305 return;
119306
119307 _rtw_memcpy(buff, msg, strlen(msg));
119308 -
119309 +
119310 _rtw_memset(&wrqu,0,sizeof(wrqu));
119311 wrqu.data.length = strlen(msg);
119312
119313 - DBG_8192C("%s %s\n", __FUNCTION__, buff);
119314 + DBG_871X("%s %s\n", __FUNCTION__, buff);
119315 wireless_send_event(padapter->pnetdev, IWEVCUSTOM, &wrqu, buff);
119316
119317 rtw_mfree(buff, IW_CUSTOM_MAX+1);
119318 -
119319 +#endif
119320 }
119321
119322
119323 static void request_wps_pbc_event(_adapter *padapter)
119324 {
119325 +#ifndef CONFIG_IOCTL_CFG80211
119326 u8 *buff, *p;
119327 union iwreq_data wrqu;
119328
119329 -
119330 buff = rtw_malloc(IW_CUSTOM_MAX);
119331 if(!buff)
119332 return;
119333 -
119334 +
119335 _rtw_memset(buff, 0, IW_CUSTOM_MAX);
119336 -
119337 +
119338 p=buff;
119339 -
119340 +
119341 p+=sprintf(p, "WPS_PBC_START.request=TRUE");
119342 -
119343 +
119344 _rtw_memset(&wrqu,0,sizeof(wrqu));
119345 -
119346 +
119347 wrqu.data.length = p-buff;
119348 -
119349 +
119350 wrqu.data.length = (wrqu.data.length<IW_CUSTOM_MAX) ? wrqu.data.length:IW_CUSTOM_MAX;
119351
119352 - DBG_8192C("%s\n", __FUNCTION__);
119353 -
119354 + DBG_871X("%s\n", __FUNCTION__);
119355 +
119356 wireless_send_event(padapter->pnetdev, IWEVCUSTOM, &wrqu, buff);
119357
119358 if(buff)
119359 {
119360 rtw_mfree(buff, IW_CUSTOM_MAX);
119361 }
119362 -
119363 +#endif
119364 }
119365
119366
119367 void indicate_wx_scan_complete_event(_adapter *padapter)
119368 -{
119369 +{
119370 +#ifndef CONFIG_IOCTL_CFG80211
119371 union iwreq_data wrqu;
119372 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
119373 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
119374
119375 _rtw_memset(&wrqu, 0, sizeof(union iwreq_data));
119376
119377 - //DBG_8192C("+rtw_indicate_wx_scan_complete_event\n");
119378 + //DBG_871X("+rtw_indicate_wx_scan_complete_event\n");
119379 wireless_send_event(padapter->pnetdev, SIOCGIWSCAN, &wrqu, NULL);
119380 +#endif
119381 }
119382
119383
119384 void rtw_indicate_wx_assoc_event(_adapter *padapter)
119385 -{
119386 +{
119387 +#ifndef CONFIG_IOCTL_CFG80211
119388 union iwreq_data wrqu;
119389 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
119390 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
119391
119392 _rtw_memset(&wrqu, 0, sizeof(union iwreq_data));
119393 -
119394 - wrqu.ap_addr.sa_family = ARPHRD_ETHER;
119395 -
119396 +
119397 + wrqu.ap_addr.sa_family = ARPHRD_ETHER;
119398 +
119399 _rtw_memcpy(wrqu.ap_addr.sa_data, pmlmepriv->cur_network.network.MacAddress, ETH_ALEN);
119400
119401 - //DBG_8192C("+rtw_indicate_wx_assoc_event\n");
119402 + //DBG_871X("+rtw_indicate_wx_assoc_event\n");
119403 wireless_send_event(padapter->pnetdev, SIOCGIWAP, &wrqu, NULL);
119404 +#endif
119405 }
119406
119407 void rtw_indicate_wx_disassoc_event(_adapter *padapter)
119408 -{
119409 +{
119410 +#ifndef CONFIG_IOCTL_CFG80211
119411 union iwreq_data wrqu;
119412
119413 _rtw_memset(&wrqu, 0, sizeof(union iwreq_data));
119414
119415 wrqu.ap_addr.sa_family = ARPHRD_ETHER;
119416 _rtw_memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN);
119417 -
119418 - //DBG_8192C("+rtw_indicate_wx_disassoc_event\n");
119419 +
119420 + //DBG_871X("+rtw_indicate_wx_disassoc_event\n");
119421 wireless_send_event(padapter->pnetdev, SIOCGIWAP, &wrqu, NULL);
119422 +#endif
119423 }
119424
119425 /*
119426 @@ -291,36 +297,87 @@ static char *translate_scan(_adapter *padapter,
119427 #endif //CONFIG_P2P
119428
119429 #ifdef CONFIG_P2P
119430 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
119431 +#ifdef CONFIG_WFD
119432 + if ( SCAN_RESULT_ALL == pwdinfo->wfd_info->scan_result_type )
119433 {
119434 - u32 blnGotP2PIE = _FALSE;
119435 -
119436 - // User is doing the P2P device discovery
119437 - // The prefix of SSID should be "DIRECT-" and the IE should contains the P2P IE.
119438 - // If not, the driver should ignore this AP and go to the next AP.
119439
119440 - // Verifying the SSID
119441 - if ( _rtw_memcmp( pnetwork->network.Ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN ) )
119442 + }
119443 + else if ( ( SCAN_RESULT_P2P_ONLY == pwdinfo->wfd_info->scan_result_type ) ||
119444 + ( SCAN_RESULT_WFD_TYPE == pwdinfo->wfd_info->scan_result_type ) )
119445 +#endif // CONFIG_WFD
119446 + {
119447 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
119448 {
119449 - u32 p2pielen = 0;
119450 + u32 blnGotP2PIE = _FALSE;
119451 +
119452 + // User is doing the P2P device discovery
119453 + // The prefix of SSID should be "DIRECT-" and the IE should contains the P2P IE.
119454 + // If not, the driver should ignore this AP and go to the next AP.
119455
119456 - // Verifying the P2P IE
119457 - if ( rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen) )
119458 + // Verifying the SSID
119459 + if ( _rtw_memcmp( pnetwork->network.Ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN ) )
119460 {
119461 - blnGotP2PIE = _TRUE;
119462 + u32 p2pielen = 0;
119463 +
119464 + // Verifying the P2P IE
119465 + if ( rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen) )
119466 + {
119467 + blnGotP2PIE = _TRUE;
119468 + }
119469 }
119470
119471 + if ( blnGotP2PIE == _FALSE )
119472 + {
119473 + return start;
119474 + }
119475 +
119476 }
119477 + }
119478
119479 - if ( blnGotP2PIE == _FALSE )
119480 +#ifdef CONFIG_WFD
119481 + if ( SCAN_RESULT_WFD_TYPE == pwdinfo->wfd_info->scan_result_type )
119482 + {
119483 + u32 blnGotWFD = _FALSE;
119484 + u8 wfd_ie[ 128 ] = { 0x00 };
119485 + uint wfd_ielen = 0;
119486 +
119487 + if ( rtw_get_wfd_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, wfd_ie, &wfd_ielen ) )
119488 {
119489 - return start;
119490 + u8 wfd_devinfo[ 6 ] = { 0x00 };
119491 + uint wfd_devlen = 6;
119492 +
119493 + if ( rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, wfd_devinfo, &wfd_devlen) )
119494 + {
119495 + if ( pwdinfo->wfd_info->wfd_device_type == WFD_DEVINFO_PSINK )
119496 + {
119497 + // the first two bits will indicate the WFD device type
119498 + if ( ( wfd_devinfo[ 1 ] & 0x03 ) == WFD_DEVINFO_SOURCE )
119499 + {
119500 + // If this device is Miracast PSink device, the scan reuslt should just provide the Miracast source.
119501 + blnGotWFD = _TRUE;
119502 + }
119503 + }
119504 + else if ( pwdinfo->wfd_info->wfd_device_type == WFD_DEVINFO_SOURCE )
119505 + {
119506 + // the first two bits will indicate the WFD device type
119507 + if ( ( wfd_devinfo[ 1 ] & 0x03 ) == WFD_DEVINFO_PSINK )
119508 + {
119509 + // If this device is Miracast source device, the scan reuslt should just provide the Miracast PSink.
119510 + // Todo: How about the SSink?!
119511 + blnGotWFD = _TRUE;
119512 + }
119513 + }
119514 + }
119515 }
119516
119517 + if ( blnGotWFD == _FALSE )
119518 + {
119519 + return start;
119520 + }
119521 }
119522 +#endif // CONFIG_WFD
119523
119524 #endif //CONFIG_P2P
119525 -
119526 /* AP MAC address */
119527 iwe.cmd = SIOCGIWAP;
119528 iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
119529 @@ -335,7 +392,7 @@ static char *translate_scan(_adapter *padapter,
119530 start = iwe_stream_add_point(info, start, stop, &iwe, pnetwork->network.Ssid.Ssid);
119531
119532 //parsing HT_CAP_IE
119533 - p = rtw_get_ie(&pnetwork->network.IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pnetwork->network.IELength-12);
119534 + p = rtw_get_ie(&pnetwork->network.IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pnetwork->network.IELength-12);
119535
119536 if(p && ht_ielen>0)
119537 {
119538 @@ -445,7 +502,7 @@ static char *translate_scan(_adapter *padapter,
119539 }
119540 else//default MCS7
119541 {
119542 - DBG_8192C("wx_get_scan, mcs_rate_bitmap=0x%x\n", mcs_rate);
119543 + DBG_871X("wx_get_scan, mcs_rate_bitmap=0x%x\n", mcs_rate);
119544 max_rate = (bw_40MHz) ? ((short_GI)?150:135):((short_GI)?72:65);
119545 }
119546
119547 @@ -508,58 +565,56 @@ static char *translate_scan(_adapter *padapter,
119548 }
119549
119550 { //parsing WPS IE
119551 - int cnt = 0,total_ielen=0;
119552 + uint cnt = 0,total_ielen;
119553 u8 *wpsie_ptr=NULL;
119554 uint wps_ielen = 0;
119555
119556 u8 *ie_ptr = pnetwork->network.IEs +_FIXED_IE_LENGTH_;
119557 total_ielen= pnetwork->network.IELength - _FIXED_IE_LENGTH_;
119558 - if((ie_ptr) && (total_ielen>0))
119559 +
119560 + while(cnt < total_ielen)
119561 {
119562 - while(cnt < total_ielen)
119563 + if(rtw_is_wps_ie(&ie_ptr[cnt], &wps_ielen) && (wps_ielen>2))
119564 {
119565 - if(rtw_is_wps_ie(&ie_ptr[cnt], &wps_ielen) && (wps_ielen>2))
119566 - {
119567 - wpsie_ptr = &ie_ptr[cnt];
119568 - iwe.cmd =IWEVGENIE;
119569 - iwe.u.data.length = (u16)wps_ielen;
119570 - start = iwe_stream_add_point(info, start, stop, &iwe, wpsie_ptr);
119571 - }
119572 - cnt+=ie_ptr[cnt+1]+2; //goto next
119573 - }
119574 + wpsie_ptr = &ie_ptr[cnt];
119575 + iwe.cmd =IWEVGENIE;
119576 + iwe.u.data.length = (u16)wps_ielen;
119577 + start = iwe_stream_add_point(info, start, stop, &iwe, wpsie_ptr);
119578 + }
119579 + cnt+=ie_ptr[cnt+1]+2; //goto next
119580 }
119581 }
119582
119583 +
119584 +{
119585 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
119586 + u8 ss, sq;
119587 +
119588 /* Add quality statistics */
119589 iwe.cmd = IWEVQUAL;
119590 - rssi = pnetwork->network.Rssi;//dBM
119591 -
119592 -#ifdef CONFIG_RTL8711
119593 - rssi = (rssi*2) + 190;
119594 - if(rssi>100) rssi = 100;
119595 - if(rssi<0) rssi = 0;
119596 -#endif
119597 -
119598 - //DBG_8192C("RSSI=0x%X%%\n", rssi);
119599 -
119600 - // we only update signal_level (signal strength) that is rssi.
119601 iwe.u.qual.updated = IW_QUAL_QUAL_UPDATED | IW_QUAL_LEVEL_UPDATED | IW_QUAL_NOISE_INVALID
119602 -#ifdef CONFIG_PLATFORM_MT53XX
119603 - ;
119604 - iwe.u.qual.level = (u8)pnetwork->network.PhyInfo.SignalStrength;//%
119605 -#else
119606 #ifdef CONFIG_SIGNAL_DISPLAY_DBM
119607 | IW_QUAL_DBM
119608 #endif
119609 ;
119610
119611 + if ( check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE &&
119612 + is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network)) {
119613 + ss = padapter->recvpriv.signal_strength;
119614 + sq = padapter->recvpriv.signal_qual;
119615 + } else {
119616 + ss = pnetwork->network.PhyInfo.SignalStrength;
119617 + sq = pnetwork->network.PhyInfo.SignalQuality;
119618 + }
119619 +
119620 +
119621 #ifdef CONFIG_SIGNAL_DISPLAY_DBM
119622 - iwe.u.qual.level = (u8) translate_percentage_to_dbm(pnetwork->network.PhyInfo.SignalStrength);//dbm
119623 + iwe.u.qual.level = (u8) translate_percentage_to_dbm(ss);//dbm
119624 #else
119625 - iwe.u.qual.level = (u8)pnetwork->network.PhyInfo.SignalStrength;//%
119626 + iwe.u.qual.level = (u8)ss;//%
119627 #endif
119628 -#endif
119629 - iwe.u.qual.qual = (u8)pnetwork->network.PhyInfo.SignalQuality; // signal quality
119630 +
119631 + iwe.u.qual.qual = (u8)sq; // signal quality
119632
119633 #ifdef CONFIG_PLATFORM_ROCKCHIPS
119634 iwe.u.qual.noise = -100; // noise level suggest by zhf@rockchips
119635 @@ -567,14 +622,10 @@ static char *translate_scan(_adapter *padapter,
119636 iwe.u.qual.noise = 0; // noise level
119637 #endif //CONFIG_PLATFORM_ROCKCHIPS
119638
119639 - //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);
119640 + //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);
119641
119642 start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_QUAL_LEN);
119643 -
119644 - //how to translate rssi to ?%
119645 - //rssi = (iwe.u.qual.level*2) + 190;
119646 - //if(rssi>100) rssi = 100;
119647 - //if(rssi<0) rssi = 0;
119648 +}
119649
119650 return start;
119651 }
119652 @@ -586,14 +637,14 @@ static int wpa_set_auth_algs(struct net_device *dev, u32 value)
119653
119654 if ((value & AUTH_ALG_SHARED_KEY)&&(value & AUTH_ALG_OPEN_SYSTEM))
119655 {
119656 - DBG_8192C("wpa_set_auth_algs, AUTH_ALG_SHARED_KEY and AUTH_ALG_OPEN_SYSTEM [value:0x%x]\n",value);
119657 + DBG_871X("wpa_set_auth_algs, AUTH_ALG_SHARED_KEY and AUTH_ALG_OPEN_SYSTEM [value:0x%x]\n",value);
119658 padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
119659 padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeAutoSwitch;
119660 padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_Auto;
119661 }
119662 else if (value & AUTH_ALG_SHARED_KEY)
119663 {
119664 - DBG_8192C("wpa_set_auth_algs, AUTH_ALG_SHARED_KEY [value:0x%x]\n",value);
119665 + DBG_871X("wpa_set_auth_algs, AUTH_ALG_SHARED_KEY [value:0x%x]\n",value);
119666 padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
119667
119668 #ifdef CONFIG_PLATFORM_MT53XX
119669 @@ -606,7 +657,7 @@ static int wpa_set_auth_algs(struct net_device *dev, u32 value)
119670 }
119671 else if(value & AUTH_ALG_OPEN_SYSTEM)
119672 {
119673 - DBG_8192C("wpa_set_auth_algs, AUTH_ALG_OPEN_SYSTEM\n");
119674 + DBG_871X("wpa_set_auth_algs, AUTH_ALG_OPEN_SYSTEM\n");
119675 //padapter->securitypriv.ndisencryptstatus = Ndis802_11EncryptionDisabled;
119676 if(padapter->securitypriv.ndisauthtype < Ndis802_11AuthModeWPAPSK)
119677 {
119678 @@ -622,11 +673,11 @@ static int wpa_set_auth_algs(struct net_device *dev, u32 value)
119679 }
119680 else if(value & AUTH_ALG_LEAP)
119681 {
119682 - DBG_8192C("wpa_set_auth_algs, AUTH_ALG_LEAP\n");
119683 + DBG_871X("wpa_set_auth_algs, AUTH_ALG_LEAP\n");
119684 }
119685 else
119686 {
119687 - DBG_8192C("wpa_set_auth_algs, error!\n");
119688 + DBG_871X("wpa_set_auth_algs, error!\n");
119689 ret = -EINVAL;
119690 }
119691
119692 @@ -661,20 +712,30 @@ _func_enter_;
119693 param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
119694 param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
119695 {
119696 - if (param->u.crypt.idx >= WEP_KEYS)
119697 +
119698 + if (param->u.crypt.idx >= WEP_KEYS
119699 +#ifdef CONFIG_IEEE80211W
119700 + && param->u.crypt.idx > BIP_MAX_KEYID
119701 +#endif //CONFIG_IEEE80211W
119702 + )
119703 + {
119704 + ret = -EINVAL;
119705 + goto exit;
119706 + }
119707 + }
119708 + else
119709 + {
119710 +
119711 {
119712 ret = -EINVAL;
119713 goto exit;
119714 }
119715 - } else {
119716 - ret = -EINVAL;
119717 - goto exit;
119718 }
119719
119720 if (strcmp(param->u.crypt.alg, "WEP") == 0)
119721 {
119722 RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("wpa_set_encryption, crypt.alg = WEP\n"));
119723 - DBG_8192C("wpa_set_encryption, crypt.alg = WEP\n");
119724 + DBG_871X("wpa_set_encryption, crypt.alg = WEP\n");
119725
119726 padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
119727 padapter->securitypriv.dot11PrivacyAlgrthm=_WEP40_;
119728 @@ -684,7 +745,7 @@ _func_enter_;
119729 wep_key_len = param->u.crypt.key_len;
119730
119731 RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_info_,("(1)wep_key_idx=%d\n", wep_key_idx));
119732 - DBG_8192C("(1)wep_key_idx=%d\n", wep_key_idx);
119733 + DBG_871X("(1)wep_key_idx=%d\n", wep_key_idx);
119734
119735 if (wep_key_idx > WEP_KEYS)
119736 return -EINVAL;
119737 @@ -724,7 +785,7 @@ _func_enter_;
119738
119739 if(param->u.crypt.set_tx)
119740 {
119741 - DBG_8192C("wep, set_tx=1\n");
119742 + DBG_871X("wep, set_tx=1\n");
119743
119744 if(rtw_set_802_11_add_wep(padapter, pwep) == (u8)_FAIL)
119745 {
119746 @@ -733,7 +794,7 @@ _func_enter_;
119747 }
119748 else
119749 {
119750 - DBG_8192C("wep, set_tx=0\n");
119751 + DBG_871X("wep, set_tx=0\n");
119752
119753 //don't update "psecuritypriv->dot11PrivacyAlgrthm" and
119754 //"psecuritypriv->dot11PrivacyKeyIndex=keyid", but can rtw_set_key to fw/cam
119755 @@ -796,17 +857,40 @@ _func_enter_;
119756 }
119757 else//group key
119758 {
119759 - _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));
119760 - _rtw_memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[16]),8);
119761 - _rtw_memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[24]),8);
119762 - padapter->securitypriv.binstallGrpkey = _TRUE;
119763 - //DEBUG_ERR(("\n param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
119764 - //DEBUG_ERR(("\n ~~~~stastakey:groupkey\n"));
119765 - DBG_871X("\n ~~~~stastakey:groupkey\n");
119766 -
119767 - padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
119768 -
119769 - rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1);
119770 + if(strcmp(param->u.crypt.alg, "TKIP") == 0 || strcmp(param->u.crypt.alg, "CCMP") == 0)
119771 + {
119772 + _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));
119773 + //only TKIP group key need to install this
119774 + if(param->u.crypt.key_len > 16)
119775 + {
119776 + _rtw_memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[16]),8);
119777 + _rtw_memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[24]),8);
119778 + }
119779 + padapter->securitypriv.binstallGrpkey = _TRUE;
119780 + //DEBUG_ERR((" param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
119781 + DBG_871X(" ~~~~set sta key:groupkey\n");
119782 +
119783 + padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
119784 +
119785 + rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1);
119786 + }
119787 +#ifdef CONFIG_IEEE80211W
119788 + else if(strcmp(param->u.crypt.alg, "BIP") == 0)
119789 + {
119790 + int no;
119791 + //printk("BIP key_len=%d , index=%d @@@@@@@@@@@@@@@@@@\n", param->u.crypt.key_len, param->u.crypt.idx);
119792 + //save the IGTK key, length 16 bytes
119793 + _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));
119794 + /*printk("IGTK key below:\n");
119795 + for(no=0;no<16;no++)
119796 + printk(" %02x ", padapter->securitypriv.dot11wBIPKey[param->u.crypt.idx].skey[no]);
119797 + printk("\n");*/
119798 + padapter->securitypriv.dot11wBIPKeyid = param->u.crypt.idx;
119799 + padapter->securitypriv.binstallBIPkey = _TRUE;
119800 + DBG_871X(" ~~~~set sta key:IGKT\n");
119801 + }
119802 +#endif //CONFIG_IEEE80211W
119803 +
119804 #ifdef CONFIG_P2P
119805 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
119806 {
119807 @@ -843,7 +927,7 @@ _func_enter_;
119808 exit:
119809
119810 if (pwep) {
119811 - rtw_mfree((u8 *)pwep,wep_total_len);
119812 + rtw_mfree((u8 *)pwep, wep_total_len);
119813 }
119814
119815 _func_exit_;
119816 @@ -857,12 +941,13 @@ static int rtw_set_wpa_ie(_adapter *padapter, char *pie, unsigned short ielen)
119817 u32 left;
119818 int group_cipher = 0, pairwise_cipher = 0;
119819 int ret = 0;
119820 + u8 null_addr[]= {0,0,0,0,0,0};
119821 #ifdef CONFIG_P2P
119822 struct wifidirect_info* pwdinfo = &padapter->wdinfo;
119823 #endif //CONFIG_P2P
119824
119825 if((ielen > MAX_WPA_IE_LEN) || (pie == NULL)){
119826 - padapter->securitypriv.wps_phase = _FALSE;
119827 + _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
119828 if(pie == NULL)
119829 return ret;
119830 else
119831 @@ -882,9 +967,9 @@ static int rtw_set_wpa_ie(_adapter *padapter, char *pie, unsigned short ielen)
119832 //dump
119833 {
119834 int i;
119835 - DBG_8192C("\n wpa_ie(length:%d):\n", ielen);
119836 + DBG_871X("\n wpa_ie(length:%d):\n", ielen);
119837 for(i=0;i<ielen;i=i+8)
119838 - 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]);
119839 + 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]);
119840 }
119841
119842 pos = buf;
119843 @@ -923,6 +1008,15 @@ static int rtw_set_wpa_ie(_adapter *padapter, char *pie, unsigned short ielen)
119844 _rtw_memcpy(padapter->securitypriv.supplicant_ie, &buf[0], ielen);
119845 }
119846
119847 + if (group_cipher == 0)
119848 + {
119849 + group_cipher = WPA_CIPHER_NONE;
119850 + }
119851 + if (pairwise_cipher == 0)
119852 + {
119853 + pairwise_cipher = WPA_CIPHER_NONE;
119854 + }
119855 +
119856 switch(group_cipher)
119857 {
119858 case WPA_CIPHER_NONE:
119859 @@ -971,7 +1065,7 @@ static int rtw_set_wpa_ie(_adapter *padapter, char *pie, unsigned short ielen)
119860 break;
119861 }
119862
119863 - padapter->securitypriv.wps_phase = _FALSE;
119864 + _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
119865 {//set wps_ie
119866 u16 cnt = 0;
119867 u8 eid, wps_oui[4]={0x0,0x50,0xf2,0x04};
119868 @@ -982,13 +1076,13 @@ static int rtw_set_wpa_ie(_adapter *padapter, char *pie, unsigned short ielen)
119869
119870 if((eid==_VENDOR_SPECIFIC_IE_)&&(_rtw_memcmp(&buf[cnt+2], wps_oui, 4)==_TRUE))
119871 {
119872 - DBG_8192C("SET WPS_IE\n");
119873 + DBG_871X("SET WPS_IE\n");
119874
119875 padapter->securitypriv.wps_ie_len = ( (buf[cnt+1]+2) < (MAX_WPA_IE_LEN<<2)) ? (buf[cnt+1]+2):(MAX_WPA_IE_LEN<<2);
119876
119877 _rtw_memcpy(padapter->securitypriv.wps_ie, &buf[cnt], padapter->securitypriv.wps_ie_len);
119878
119879 - padapter->securitypriv.wps_phase = _TRUE;
119880 + set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
119881
119882 #ifdef CONFIG_P2P
119883 if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_OK))
119884 @@ -996,8 +1090,6 @@ static int rtw_set_wpa_ie(_adapter *padapter, char *pie, unsigned short ielen)
119885 rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_ING);
119886 }
119887 #endif //CONFIG_P2P
119888 - DBG_8192C("SET WPS_IE, wps_phase==_TRUE\n");
119889 -
119890 cnt += buf[cnt+1]+2;
119891
119892 break;
119893 @@ -1007,7 +1099,15 @@ static int rtw_set_wpa_ie(_adapter *padapter, char *pie, unsigned short ielen)
119894 }
119895 }
119896 }
119897 -
119898 +
119899 + //TKIP and AES disallow multicast packets until installing group key
119900 + if(padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_
119901 + || padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_WTMIC_
119902 + || padapter->securitypriv.dot11PrivacyAlgrthm == _AES_)
119903 + //WPS open need to enable multicast
119904 + //|| check_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS) == _TRUE)
119905 + rtw_hal_set_hwreg(padapter, HW_VAR_OFF_RCR_AM, null_addr);
119906 +
119907 RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
119908 ("rtw_set_wpa_ie: pairwise_cipher=0x%08x padapter->securitypriv.ndisencryptstatus=%d padapter->securitypriv.ndisauthtype=%d\n",
119909 pairwise_cipher, padapter->securitypriv.ndisencryptstatus, padapter->securitypriv.ndisauthtype));
119910 @@ -1135,10 +1235,12 @@ static int rtw_wx_set_mode(struct net_device *dev, struct iw_request_info *a,
119911 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
119912 NDIS_802_11_NETWORK_INFRASTRUCTURE networkType ;
119913 int ret = 0;
119914 -
119915 + _irqL irqL;
119916 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
119917 + _queue *queue = &pmlmepriv->scanned_queue;
119918 _func_enter_;
119919
119920 - if(_FAIL == rfpwrstate_check(padapter)) {
119921 + if(_FAIL == rtw_pwr_wakeup(padapter)) {
119922 ret= -EPERM;
119923 goto exit;
119924 }
119925 @@ -1152,20 +1254,20 @@ static int rtw_wx_set_mode(struct net_device *dev, struct iw_request_info *a,
119926 {
119927 case IW_MODE_AUTO:
119928 networkType = Ndis802_11AutoUnknown;
119929 - DBG_8192C("set_mode = IW_MODE_AUTO\n");
119930 + DBG_871X("set_mode = IW_MODE_AUTO\n");
119931 break;
119932 case IW_MODE_ADHOC:
119933 networkType = Ndis802_11IBSS;
119934 - DBG_8192C("set_mode = IW_MODE_ADHOC\n");
119935 + DBG_871X("set_mode = IW_MODE_ADHOC\n");
119936 break;
119937 case IW_MODE_MASTER:
119938 networkType = Ndis802_11APMode;
119939 - DBG_8192C("set_mode = IW_MODE_MASTER\n");
119940 + DBG_871X("set_mode = IW_MODE_MASTER\n");
119941 //rtw_setopmode_cmd(padapter, networkType);
119942 break;
119943 case IW_MODE_INFRA:
119944 networkType = Ndis802_11Infrastructure;
119945 - DBG_8192C("set_mode = IW_MODE_INFRA\n");
119946 + DBG_871X("set_mode = IW_MODE_INFRA\n");
119947 break;
119948
119949 default :
119950 @@ -1184,14 +1286,18 @@ static int rtw_wx_set_mode(struct net_device *dev, struct iw_request_info *a,
119951 rtw_setopmode_cmd(padapter, Ndis802_11AutoUnknown);
119952 }
119953 */
119954 -
119955 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
119956 + _enter_critical_bh(&queue->lock, &irqL);
119957 if (rtw_set_802_11_infrastructure_mode(padapter, networkType) ==_FALSE){
119958
119959 ret = -EPERM;
119960 + _exit_critical_bh(&queue->lock, &irqL);
119961 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
119962 goto exit;
119963
119964 }
119965 -
119966 + _exit_critical_bh(&queue->lock, &irqL);
119967 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
119968 rtw_setopmode_cmd(padapter, networkType);
119969
119970 exit:
119971 @@ -1267,7 +1373,7 @@ static int rtw_wx_set_pmkid(struct net_device *dev,
119972 _rtw_memcpy( strIssueBssid, pPMK->bssid.sa_data, ETH_ALEN);
119973 if ( pPMK->cmd == IW_PMKSA_ADD )
119974 {
119975 - DBG_8192C( "[rtw_wx_set_pmkid] IW_PMKSA_ADD!\n" );
119976 + DBG_871X( "[rtw_wx_set_pmkid] IW_PMKSA_ADD!\n" );
119977 if ( _rtw_memcmp( strIssueBssid, strZeroMacAddress, ETH_ALEN ) == _TRUE )
119978 {
119979 return( intReturn );
119980 @@ -1284,7 +1390,7 @@ static int rtw_wx_set_pmkid(struct net_device *dev,
119981 if( _rtw_memcmp( psecuritypriv->PMKIDList[j].Bssid, strIssueBssid, ETH_ALEN) ==_TRUE )
119982 { // BSSID is matched, the same AP => rewrite with new PMKID.
119983
119984 - DBG_8192C( "[rtw_wx_set_pmkid] BSSID exists in the PMKList.\n" );
119985 + DBG_871X( "[rtw_wx_set_pmkid] BSSID exists in the PMKList.\n" );
119986
119987 _rtw_memcpy( psecuritypriv->PMKIDList[j].PMKID, pPMK->pmkid, IW_PMKID_LEN);
119988 psecuritypriv->PMKIDList[ j ].bUsed = _TRUE;
119989 @@ -1297,7 +1403,7 @@ static int rtw_wx_set_pmkid(struct net_device *dev,
119990 if(!blInserted)
119991 {
119992 // Find a new entry
119993 - DBG_8192C( "[rtw_wx_set_pmkid] Use the new entry index = %d for this PMKID.\n",
119994 + DBG_871X( "[rtw_wx_set_pmkid] Use the new entry index = %d for this PMKID.\n",
119995 psecuritypriv->PMKIDIndex );
119996
119997 _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].Bssid, strIssueBssid, ETH_ALEN);
119998 @@ -1313,7 +1419,7 @@ static int rtw_wx_set_pmkid(struct net_device *dev,
119999 }
120000 else if ( pPMK->cmd == IW_PMKSA_REMOVE )
120001 {
120002 - DBG_8192C( "[rtw_wx_set_pmkid] IW_PMKSA_REMOVE!\n" );
120003 + DBG_871X( "[rtw_wx_set_pmkid] IW_PMKSA_REMOVE!\n" );
120004 intReturn = _TRUE;
120005 for(j=0 ; j<NUM_PMKID_CACHE; j++)
120006 {
120007 @@ -1327,7 +1433,7 @@ static int rtw_wx_set_pmkid(struct net_device *dev,
120008 }
120009 else if ( pPMK->cmd == IW_PMKSA_FLUSH )
120010 {
120011 - DBG_8192C( "[rtw_wx_set_pmkid] IW_PMKSA_FLUSH!\n" );
120012 + DBG_871X( "[rtw_wx_set_pmkid] IW_PMKSA_FLUSH!\n" );
120013 _rtw_memset( &psecuritypriv->PMKIDList[ 0 ], 0x00, sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE );
120014 psecuritypriv->PMKIDIndex = 0;
120015 intReturn = _TRUE;
120016 @@ -1509,10 +1615,39 @@ static int rtw_wx_set_wap(struct net_device *dev,
120017 _queue *queue = &(pmlmepriv->scanned_queue);
120018 struct wlan_network *pnetwork = NULL;
120019 NDIS_802_11_AUTHENTICATION_MODE authmode;
120020 -
120021 - _func_enter_;
120022
120023 - if(_FAIL == rfpwrstate_check(padapter))
120024 + _func_enter_;
120025 +/*
120026 +#ifdef CONFIG_CONCURRENT_MODE
120027 + if(padapter->iface_type > PRIMARY_IFACE)
120028 + {
120029 + ret = -EINVAL;
120030 + goto exit;
120031 + }
120032 +#endif
120033 +*/
120034 +
120035 +#ifdef CONFIG_CONCURRENT_MODE
120036 + if (check_buddy_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
120037 + {
120038 + printk("set bssid, but buddy_intf is under scanning or linking\n");
120039 +
120040 + ret = -EINVAL;
120041 +
120042 + goto exit;
120043 + }
120044 +#endif
120045 +
120046 +#ifdef CONFIG_DUALMAC_CONCURRENT
120047 + if (dc_check_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING)== _TRUE)
120048 + {
120049 + printk("set bssid, but buddy_intf is under scanning or linking\n");
120050 + ret = -EINVAL;
120051 + goto exit;
120052 + }
120053 +#endif
120054 +
120055 + if(_FAIL == rtw_pwr_wakeup(padapter))
120056 {
120057 ret= -1;
120058 goto exit;
120059 @@ -1530,6 +1665,7 @@ static int rtw_wx_set_wap(struct net_device *dev,
120060 }
120061
120062 authmode = padapter->securitypriv.ndisauthtype;
120063 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
120064 _enter_critical_bh(&queue->lock, &irqL);
120065 phead = get_list_head(queue);
120066 pmlmepriv->pscanned = get_next(phead);
120067 @@ -1572,6 +1708,7 @@ static int rtw_wx_set_wap(struct net_device *dev,
120068 {
120069 ret = -1;
120070 _exit_critical_bh(&queue->lock, &irqL);
120071 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
120072 goto exit;
120073 }
120074
120075 @@ -1580,7 +1717,7 @@ static int rtw_wx_set_wap(struct net_device *dev,
120076
120077 }
120078 _exit_critical_bh(&queue->lock, &irqL);
120079 -
120080 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
120081 rtw_set_802_11_authentication_mode(padapter, authmode);
120082 //set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus);
120083 if (rtw_set_802_11_bssid(padapter, temp->sa_data) == _FALSE) {
120084 @@ -1653,8 +1790,13 @@ struct iw_mlme
120085 if(mlme==NULL)
120086 return -1;
120087
120088 + printk("%s\n", __FUNCTION__);
120089 +
120090 reason = cpu_to_le16(mlme->reason_code);
120091
120092 +
120093 + printk("%s, cmd=%d, reason=%d\n", __FUNCTION__, mlme->cmd, reason);
120094 +
120095 switch (mlme->cmd)
120096 {
120097 case IW_MLME_DEAUTH:
120098 @@ -1676,77 +1818,6 @@ struct iw_mlme
120099
120100 }
120101
120102 -int rfpwrstate_check(_adapter *padapter)
120103 -{
120104 - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
120105 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
120106 - int ret = _SUCCESS;
120107 -
120108 - //block here for system suspend only
120109 - if((pwrpriv->bInternalAutoSuspend == _FALSE) && (_TRUE == pwrpriv->bInSuspend )){
120110 - ret = _FAIL;
120111 - goto exit;
120112 - }
120113 -
120114 - if( pwrpriv->power_mgnt == PS_MODE_ACTIVE ) {
120115 - goto exit;
120116 - }
120117 -
120118 - if((pwrpriv->bInternalAutoSuspend == _TRUE) && (padapter->net_closed == _TRUE)) {
120119 - ret = _FAIL;
120120 - goto exit;
120121 - }
120122 - if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
120123 - {
120124 - ret = _SUCCESS;
120125 - goto exit;
120126 - }
120127 -
120128 - if(rf_off == pwrpriv->rf_pwrstate )
120129 - {
120130 -#ifdef CONFIG_USB_HCI
120131 -#ifdef CONFIG_AUTOSUSPEND
120132 - if(pwrpriv->brfoffbyhw==_TRUE)
120133 - {
120134 - DBG_8192C("hw still in rf_off state ...........\n");
120135 - ret = _FAIL;
120136 - goto exit;
120137 - }
120138 - else if(padapter->registrypriv.usbss_enable)
120139 - {
120140 - DBG_8192C("\n %s call autoresume_enter....\n",__FUNCTION__);
120141 - if(_FAIL == autoresume_enter(padapter))
120142 - {
120143 - DBG_8192C("======> autoresume fail.............\n");
120144 - ret = _FAIL;
120145 - goto exit;
120146 - }
120147 - }
120148 - else
120149 -#endif
120150 -#endif
120151 - {
120152 -#ifdef CONFIG_IPS
120153 - DBG_8192C("\n %s call ips_leave....\n",__FUNCTION__);
120154 - if(_FAIL == ips_leave(padapter))
120155 - {
120156 - DBG_8192C("======> ips_leave fail.............\n");
120157 - ret = _FAIL;
120158 - goto exit;
120159 - }
120160 -#endif
120161 - }
120162 - }else {
120163 - //Jeff: reset timer to avoid falling ips or selective suspend soon
120164 - if(pwrpriv->bips_processing == _FALSE)
120165 - rtw_set_pwr_state_check_timer(pwrpriv);
120166 - }
120167 -
120168 -exit:
120169 - return ret;
120170 -
120171 -}
120172 -
120173 static int rtw_wx_set_scan(struct net_device *dev, struct iw_request_info *a,
120174 union iwreq_data *wrqu, char *extra)
120175 {
120176 @@ -1756,7 +1827,6 @@ static int rtw_wx_set_scan(struct net_device *dev, struct iw_request_info *a,
120177 struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
120178 NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
120179 _irqL irqL;
120180 -
120181 #ifdef CONFIG_P2P
120182 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
120183 #endif //CONFIG_P2P
120184 @@ -1767,6 +1837,15 @@ _func_enter_;
120185 #ifdef DBG_IOCTL
120186 DBG_871X("DBG_IOCTL %s:%d\n",__FUNCTION__, __LINE__);
120187 #endif
120188 +/*
120189 +#ifdef CONFIG_CONCURRENT_MODE
120190 + if(padapter->iface_type > PRIMARY_IFACE)
120191 + {
120192 + ret = -1;
120193 + goto exit;
120194 + }
120195 +#endif
120196 +*/
120197
120198 #ifdef CONFIG_MP_INCLUDED
120199 if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
120200 @@ -1776,14 +1855,14 @@ _func_enter_;
120201 }
120202 #endif
120203
120204 - if(_FAIL == rfpwrstate_check(padapter))
120205 + if(_FAIL == rtw_pwr_wakeup(padapter))
120206 {
120207 ret= -1;
120208 goto exit;
120209 }
120210
120211 if(padapter->bDriverStopped){
120212 - DBG_8192C("bDriverStopped=%d\n", padapter->bDriverStopped);
120213 + DBG_871X("bDriverStopped=%d\n", padapter->bDriverStopped);
120214 ret= -1;
120215 goto exit;
120216 }
120217 @@ -1813,6 +1892,30 @@ _func_enter_;
120218 goto exit;
120219 }
120220
120221 +#ifdef CONFIG_CONCURRENT_MODE
120222 + if (check_buddy_fwstate(padapter,
120223 + _FW_UNDER_SURVEY|_FW_UNDER_LINKING|WIFI_UNDER_WPS) == _TRUE)
120224 + {
120225 + if(check_buddy_fwstate(padapter, _FW_UNDER_SURVEY))
120226 + {
120227 + printk("scanning_via_buddy_intf\n");
120228 + pmlmepriv->scanning_via_buddy_intf = _TRUE;
120229 + }
120230 +
120231 + indicate_wx_scan_complete_event(padapter);
120232 +
120233 + goto exit;
120234 + }
120235 +#endif
120236 +
120237 +#ifdef CONFIG_DUALMAC_CONCURRENT
120238 + if (dc_check_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING)== _TRUE)
120239 + {
120240 + indicate_wx_scan_complete_event(padapter);
120241 + goto exit;
120242 + }
120243 +#endif
120244 +
120245 // Mareded by Albert 20101103
120246 // For the DMP WiFi Display project, the driver won't to scan because
120247 // the pmlmepriv->scan_interval is always equal to 3.
120248 @@ -1824,15 +1927,16 @@ _func_enter_;
120249
120250 if(pmlmepriv->scan_interval > 0)
120251 {
120252 - DBG_8192C("scan done\n");
120253 + DBG_871X("scan done\n");
120254 ret = 0;
120255 goto exit;
120256 }
120257
120258 */
120259 #ifdef CONFIG_P2P
120260 - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
120261 + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
120262 {
120263 + rtw_p2p_set_pre_state( pwdinfo, rtw_p2p_state( pwdinfo ) );
120264 rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
120265 rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_FULL);
120266 rtw_free_network_queue(padapter, _TRUE);
120267 @@ -1853,18 +1957,18 @@ _func_enter_;
120268 _rtw_memcpy(ssid[0].Ssid, req->essid, len);
120269 ssid[0].SsidLength = len;
120270
120271 - DBG_8192C("IW_SCAN_THIS_ESSID, ssid=%s, len=%d\n", req->essid, req->essid_len);
120272 + DBG_871X("IW_SCAN_THIS_ESSID, ssid=%s, len=%d\n", req->essid, req->essid_len);
120273
120274 _enter_critical_bh(&pmlmepriv->lock, &irqL);
120275
120276 - _status = rtw_sitesurvey_cmd(padapter, ssid, 1);
120277 + _status = rtw_sitesurvey_cmd(padapter, ssid, 1, NULL, 0);
120278
120279 _exit_critical_bh(&pmlmepriv->lock, &irqL);
120280
120281 }
120282 else if (req->scan_type == IW_SCAN_TYPE_PASSIVE)
120283 {
120284 - DBG_8192C("rtw_wx_set_scan, req->scan_type == IW_SCAN_TYPE_PASSIVE\n");
120285 + DBG_871X("rtw_wx_set_scan, req->scan_type == IW_SCAN_TYPE_PASSIVE\n");
120286 }
120287
120288 }
120289 @@ -1942,15 +2046,13 @@ _func_enter_;
120290
120291 }
120292
120293 - //jeff: it has still some scan paramater to parse, we only do this now...
120294 - _enter_critical_bh(&pmlmepriv->lock, &irqL);
120295 - _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT);
120296 - _exit_critical_bh(&pmlmepriv->lock, &irqL);
120297 + //jeff: it has still some scan paramater to parse, we only do this now...
120298 + _status = rtw_set_802_11_bssid_list_scan(padapter, ssid, RTW_SSID_SCAN_AMOUNT);
120299
120300 } else
120301
120302 {
120303 - _status = rtw_set_802_11_bssid_list_scan(padapter);
120304 + _status = rtw_set_802_11_bssid_list_scan(padapter, NULL, 0);
120305 }
120306
120307 if(_status == _FALSE)
120308 @@ -1972,7 +2074,7 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
120309 _irqL irqL;
120310 _list *plist, *phead;
120311 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
120312 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
120313 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
120314 _queue *queue = &(pmlmepriv->scanned_queue);
120315 struct wlan_network *pnetwork = NULL;
120316 char *ev = extra;
120317 @@ -1981,6 +2083,10 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
120318 u32 cnt=0;
120319 u32 wait_for_surveydone;
120320 sint wait_status;
120321 +#ifdef CONFIG_CONCURRENT_MODE
120322 + //PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
120323 + //struct mlme_priv *pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
120324 +#endif
120325 #ifdef CONFIG_P2P
120326 struct wifidirect_info* pwdinfo = &padapter->wdinfo;
120327 #endif //CONFIG_P2P
120328 @@ -1993,6 +2099,15 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
120329 DBG_871X("DBG_IOCTL %s:%d\n",__FUNCTION__, __LINE__);
120330 #endif
120331
120332 +/*
120333 +#ifdef CONFIG_CONCURRENT_MODE
120334 + if(padapter->iface_type > PRIMARY_IFACE)
120335 + {
120336 + ret = -EINVAL;
120337 + goto exit;
120338 + }
120339 +#endif
120340 +*/
120341 if(padapter->pwrctrlpriv.brfoffbyhw && padapter->bDriverStopped)
120342 {
120343 ret = -EINVAL;
120344 @@ -2003,7 +2118,10 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
120345 if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
120346 {
120347 // P2P is enabled
120348 - wait_for_surveydone = 200;
120349 + if ( padapter->chip_type == RTL8192D )
120350 + wait_for_surveydone = 300; // Because the 8192du supports more channels.
120351 + else
120352 + wait_for_surveydone = 200;
120353 }
120354 else
120355 {
120356 @@ -2016,14 +2134,39 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
120357 }
120358 #endif //CONFIG_P2P
120359
120360 +/*
120361 +#ifdef CONFIG_CONCURRENT_MODE
120362 + if(pmlmepriv->scanning_via_buddy_intf == _TRUE)
120363 + {
120364 + pmlmepriv->scanning_via_buddy_intf = _FALSE;//reset
120365 +
120366 + // change pointers to buddy interface
120367 + padapter = pbuddy_adapter;
120368 + pmlmepriv = pbuddy_mlmepriv;
120369 + queue = &(pbuddy_mlmepriv->scanned_queue);
120370 +
120371 + }
120372 +#endif // CONFIG_CONCURRENT_MODE
120373 +*/
120374 +
120375 wait_status = _FW_UNDER_SURVEY
120376 #ifndef CONFIG_ANDROID
120377 |_FW_UNDER_LINKING
120378 #endif
120379 ;
120380
120381 - while(check_fwstate(pmlmepriv, wait_status) == _TRUE)
120382 - {
120383 +#ifdef CONFIG_DUALMAC_CONCURRENT
120384 + while(dc_check_fwstate(padapter, wait_status)== _TRUE)
120385 + {
120386 + rtw_msleep_os(30);
120387 + cnt++;
120388 + if(cnt > wait_for_surveydone )
120389 + break;
120390 + }
120391 +#endif // CONFIG_DUALMAC_CONCURRENT
120392 +
120393 + while(check_fwstate(pmlmepriv, wait_status) == _TRUE)
120394 + {
120395 rtw_msleep_os(30);
120396 cnt++;
120397 if(cnt > wait_for_surveydone )
120398 @@ -2048,10 +2191,9 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
120399 pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
120400
120401 //report network only if the current channel set contains the channel to which this network belongs
120402 - if( _TRUE == rtw_is_channel_set_contains_channel(padapter->mlmeextpriv.channel_set, pnetwork->network.Configuration.DSConfig)
120403 - #ifdef CONFIG_VALIDATE_SSID
120404 + if(rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, pnetwork->network.Configuration.DSConfig) >= 0
120405 + && rtw_mlme_band_check(padapter, pnetwork->network.Configuration.DSConfig) == _TRUE
120406 && _TRUE == rtw_validate_ssid(&(pnetwork->network.Ssid))
120407 - #endif
120408 )
120409 {
120410 ev=translate_scan(padapter, a, pnetwork, ev, stop);
120411 @@ -2095,7 +2237,6 @@ static int rtw_wx_set_essid(struct net_device *dev,
120412 _list *phead;
120413 s8 status = _TRUE;
120414 struct wlan_network *pnetwork = NULL;
120415 -
120416 NDIS_802_11_AUTHENTICATION_MODE authmode;
120417 NDIS_802_11_SSID ndis_ssid;
120418 u8 *dst_ssid, *src_ssid;
120419 @@ -2108,9 +2249,39 @@ static int rtw_wx_set_essid(struct net_device *dev,
120420 DBG_871X("DBG_IOCTL %s:%d\n",__FUNCTION__, __LINE__);
120421 #endif
120422
120423 +/*
120424 +#ifdef CONFIG_CONCURRENT_MODE
120425 + if(padapter->iface_type > PRIMARY_IFACE)
120426 + {
120427 + ret = -EINVAL;
120428 + goto exit;
120429 + }
120430 +#endif
120431 +*/
120432 +
120433 +#ifdef CONFIG_CONCURRENT_MODE
120434 + if (check_buddy_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
120435 + {
120436 + printk("set ssid, but buddy_intf is under scanning or linking\n");
120437 +
120438 + ret = -EINVAL;
120439 +
120440 + goto exit;
120441 + }
120442 +#endif
120443 +
120444 +#ifdef CONFIG_DUALMAC_CONCURRENT
120445 + if (dc_check_fwstate(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING)== _TRUE)
120446 + {
120447 + printk("set bssid, but buddy_intf is under scanning or linking\n");
120448 + ret = -EINVAL;
120449 + goto exit;
120450 + }
120451 +#endif
120452 +
120453 RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
120454 ("+rtw_wx_set_essid: fw_state=0x%08x\n", get_fwstate(pmlmepriv)));
120455 - if(_FAIL == rfpwrstate_check(padapter))
120456 + if(_FAIL == rtw_pwr_wakeup(padapter))
120457 {
120458 ret = -1;
120459 goto exit;
120460 @@ -2136,7 +2307,7 @@ static int rtw_wx_set_essid(struct net_device *dev,
120461 }
120462
120463 authmode = padapter->securitypriv.ndisauthtype;
120464 - DBG_8192C("=>%s\n",__FUNCTION__);
120465 + DBG_871X("=>%s\n",__FUNCTION__);
120466 if (wrqu->essid.flags && wrqu->essid.length)
120467 {
120468 // Commented by Albert 20100519
120469 @@ -2153,7 +2324,8 @@ static int rtw_wx_set_essid(struct net_device *dev,
120470 len = (wrqu->essid.length < IW_ESSID_MAX_SIZE) ? wrqu->essid.length : IW_ESSID_MAX_SIZE;
120471 #endif
120472
120473 - DBG_8192C("ssid=%s, len=%d\n", extra, wrqu->essid.length);
120474 + if( wrqu->essid.length != 33 )
120475 + DBG_871X("ssid=%s, len=%d\n", extra, wrqu->essid.length);
120476
120477 _rtw_memset(&ndis_ssid, 0, sizeof(NDIS_802_11_SSID));
120478 ndis_ssid.SsidLength = len;
120479 @@ -2161,6 +2333,7 @@ static int rtw_wx_set_essid(struct net_device *dev,
120480 src_ssid = ndis_ssid.Ssid;
120481
120482 RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_, ("rtw_wx_set_essid: ssid=[%s]\n", src_ssid));
120483 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
120484 _enter_critical_bh(&queue->lock, &irqL);
120485 phead = get_list_head(queue);
120486 pmlmepriv->pscanned = get_next(phead);
120487 @@ -2215,6 +2388,7 @@ static int rtw_wx_set_essid(struct net_device *dev,
120488 {
120489 ret = -1;
120490 _exit_critical_bh(&queue->lock, &irqL);
120491 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
120492 goto exit;
120493 }
120494
120495 @@ -2222,6 +2396,7 @@ static int rtw_wx_set_essid(struct net_device *dev,
120496 }
120497 }
120498 _exit_critical_bh(&queue->lock, &irqL);
120499 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
120500 RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
120501 ("set ssid: set_802_11_auth. mode=%d\n", authmode));
120502 rtw_set_802_11_authentication_mode(padapter, authmode);
120503 @@ -2234,7 +2409,7 @@ static int rtw_wx_set_essid(struct net_device *dev,
120504
120505 exit:
120506
120507 - DBG_8192C("<=%s, ret %d\n",__FUNCTION__, ret);
120508 + DBG_871X("<=%s, ret %d\n",__FUNCTION__, ret);
120509
120510 #ifdef DBG_IOCTL
120511 DBG_871X("DBG_IOCTL %s:%d return %d\n",__FUNCTION__, __LINE__, ret);
120512 @@ -2379,94 +2554,43 @@ static int rtw_wx_get_rate(struct net_device *dev,
120513 struct iw_request_info *info,
120514 union iwreq_data *wrqu, char *extra)
120515 {
120516 - int i;
120517 - u8 *p;
120518 - u16 rate = 0, max_rate = 0, ht_cap=_FALSE;
120519 - u32 ht_ielen = 0;
120520 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
120521 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
120522 - WLAN_BSSID_EX *pcur_bss = &pmlmepriv->cur_network.network;
120523 - struct rtw_ieee80211_ht_cap *pht_capie;
120524 - u8 bw_40MHz=0, short_GI=0;
120525 - u16 mcs_rate=0;
120526 - u8 rf_type = 0;
120527 - struct registry_priv *pregpriv = &padapter->registrypriv;
120528 -
120529 -
120530 - i=0;
120531 -#ifdef CONFIG_MP_INCLUDED
120532 - if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
120533 - return -1;
120534 -#endif
120535 - if((check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) || (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE))
120536 - {
120537 - p = rtw_get_ie(&pcur_bss->IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pcur_bss->IELength-12);
120538 - if(p && ht_ielen>0)
120539 - {
120540 - ht_cap = _TRUE;
120541 + u16 max_rate = 0;
120542
120543 - pht_capie = (struct rtw_ieee80211_ht_cap *)(p+2);
120544 -
120545 - _rtw_memcpy(&mcs_rate , pht_capie->supp_mcs_set, 2);
120546 + max_rate = rtw_get_cur_max_rate((_adapter *)rtw_netdev_priv(dev));
120547
120548 - bw_40MHz = (pht_capie->cap_info&IEEE80211_HT_CAP_SUP_WIDTH) ? 1:0;
120549 + if(max_rate == 0)
120550 + return -EPERM;
120551 +
120552 + wrqu->bitrate.fixed = 0; /* no auto select */
120553 + wrqu->bitrate.value = max_rate * 100000;
120554
120555 - short_GI = (pht_capie->cap_info&(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1:0;
120556 - }
120557 + return 0;
120558 +}
120559
120560 - while( (pcur_bss->SupportedRates[i]!=0) && (pcur_bss->SupportedRates[i]!=0xFF))
120561 - {
120562 - rate = pcur_bss->SupportedRates[i]&0x7F;
120563 - if(rate>max_rate)
120564 - max_rate = rate;
120565 +static int rtw_wx_set_rts(struct net_device *dev,
120566 + struct iw_request_info *info,
120567 + union iwreq_data *wrqu, char *extra)
120568 +{
120569 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
120570
120571 - wrqu->bitrate.fixed = 0; /* no auto select */
120572 - //wrqu->bitrate.disabled = 1/;
120573 -
120574 - i++;
120575 - }
120576 + _func_enter_;
120577
120578 - if(ht_cap == _TRUE)
120579 - {
120580 -#if 0 //have some issue,neet to debug - 20101008-georgia
120581 - if(mcs_rate&0x8000)//MCS15
120582 - {
120583 - max_rate = (bw_40MHz) ? ((short_GI)?300:270):((short_GI)?144:130);
120584 -
120585 - }
120586 - else if(mcs_rate&0x0080)//MCS7
120587 - {
120588 - max_rate = (bw_40MHz) ? ((short_GI)?150:135):((short_GI)?72:65);
120589 - }
120590 - else//default MCS7
120591 - {
120592 - //DBG_8192C("wx_get_rate, mcs_rate_bitmap=0x%x\n", mcs_rate);
120593 - max_rate = (bw_40MHz) ? ((short_GI)?150:135):((short_GI)?72:65);
120594 - }
120595 -#else
120596 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
120597 - if(rf_type == RF_1T1R)
120598 - max_rate = (bw_40MHz) ? ((short_GI)?150:135):((short_GI)?72:65);
120599 - else
120600 - max_rate = (bw_40MHz) ? ((short_GI)?300:270):((short_GI)?144:130);
120601 -#endif
120602 - max_rate = max_rate*2;//Mbps/2
120603 - wrqu->bitrate.value = max_rate*500000;
120604 -
120605 - }
120606 - else
120607 - {
120608 - wrqu->bitrate.value = max_rate*500000;
120609 - }
120610 -
120611 - }
120612 - else
120613 - {
120614 - return -1;
120615 + if (wrqu->rts.disabled)
120616 + padapter->registrypriv.rts_thresh = 2347;
120617 + else {
120618 + if (wrqu->rts.value < 0 ||
120619 + wrqu->rts.value > 2347)
120620 + return -EINVAL;
120621 +
120622 + padapter->registrypriv.rts_thresh = wrqu->rts.value;
120623 }
120624
120625 - return 0;
120626 + DBG_871X("%s, rts_thresh=%d\n", __func__, padapter->registrypriv.rts_thresh);
120627 +
120628 + _func_exit_;
120629
120630 + return 0;
120631 +
120632 }
120633
120634 static int rtw_wx_get_rts(struct net_device *dev,
120635 @@ -2476,7 +2600,8 @@ static int rtw_wx_get_rts(struct net_device *dev,
120636 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
120637
120638 _func_enter_;
120639 - RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,(" rtw_wx_get_rts \n"));
120640 +
120641 + DBG_871X("%s, rts_thresh=%d\n", __func__, padapter->registrypriv.rts_thresh);
120642
120643 wrqu->rts.value = padapter->registrypriv.rts_thresh;
120644 wrqu->rts.fixed = 0; /* no auto select */
120645 @@ -2504,6 +2629,8 @@ static int rtw_wx_set_frag(struct net_device *dev,
120646
120647 padapter->xmitpriv.frag_len = wrqu->frag.value & ~0x1;
120648 }
120649 +
120650 + DBG_871X("%s, frag_len=%d\n", __func__, padapter->xmitpriv.frag_len);
120651
120652 _func_exit_;
120653
120654 @@ -2511,7 +2638,6 @@ static int rtw_wx_set_frag(struct net_device *dev,
120655
120656 }
120657
120658 -
120659 static int rtw_wx_get_frag(struct net_device *dev,
120660 struct iw_request_info *info,
120661 union iwreq_data *wrqu, char *extra)
120662 @@ -2519,6 +2645,8 @@ static int rtw_wx_get_frag(struct net_device *dev,
120663 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
120664
120665 _func_enter_;
120666 +
120667 + DBG_871X("%s, frag_len=%d\n", __func__, padapter->xmitpriv.frag_len);
120668
120669 wrqu->frag.value = padapter->xmitpriv.frag_len;
120670 wrqu->frag.fixed = 0; /* no auto select */
120671 @@ -2579,7 +2707,7 @@ static int rtw_wx_set_enc(struct net_device *dev,
120672 struct iw_point *erq = &(wrqu->encoding);
120673 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
120674 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
120675 - DBG_8192C("+rtw_wx_set_enc, flags=0x%x\n", erq->flags);
120676 + DBG_871X("+rtw_wx_set_enc, flags=0x%x\n", erq->flags);
120677
120678 _rtw_memset(&wep, 0, sizeof(NDIS_802_11_WEP));
120679
120680 @@ -2589,7 +2717,7 @@ static int rtw_wx_set_enc(struct net_device *dev,
120681
120682 if (erq->flags & IW_ENCODE_DISABLED)
120683 {
120684 - DBG_8192C("EncryptionDisabled\n");
120685 + DBG_871X("EncryptionDisabled\n");
120686 padapter->securitypriv.ndisencryptstatus = Ndis802_11EncryptionDisabled;
120687 padapter->securitypriv.dot11PrivacyAlgrthm=_NO_PRIVACY_;
120688 padapter->securitypriv.dot118021XGrpPrivacy=_NO_PRIVACY_;
120689 @@ -2610,13 +2738,13 @@ static int rtw_wx_set_enc(struct net_device *dev,
120690 {
120691 keyindex_provided = 0;
120692 key = padapter->securitypriv.dot11PrivacyKeyIndex;
120693 - DBG_8192C("rtw_wx_set_enc, key=%d\n", key);
120694 + DBG_871X("rtw_wx_set_enc, key=%d\n", key);
120695 }
120696
120697 //set authentication mode
120698 if(erq->flags & IW_ENCODE_OPEN)
120699 {
120700 - DBG_8192C("rtw_wx_set_enc():IW_ENCODE_OPEN\n");
120701 + DBG_871X("rtw_wx_set_enc():IW_ENCODE_OPEN\n");
120702 padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;//Ndis802_11EncryptionDisabled;
120703
120704 #ifdef CONFIG_PLATFORM_MT53XX
120705 @@ -2632,7 +2760,7 @@ static int rtw_wx_set_enc(struct net_device *dev,
120706 }
120707 else if(erq->flags & IW_ENCODE_RESTRICTED)
120708 {
120709 - DBG_8192C("rtw_wx_set_enc():IW_ENCODE_RESTRICTED\n");
120710 + DBG_871X("rtw_wx_set_enc():IW_ENCODE_RESTRICTED\n");
120711 padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
120712
120713 #ifdef CONFIG_PLATFORM_MT53XX
120714 @@ -2648,7 +2776,7 @@ static int rtw_wx_set_enc(struct net_device *dev,
120715 }
120716 else
120717 {
120718 - DBG_8192C("rtw_wx_set_enc():erq->flags=0x%x\n", erq->flags);
120719 + DBG_871X("rtw_wx_set_enc():erq->flags=0x%x\n", erq->flags);
120720
120721 padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;//Ndis802_11EncryptionDisabled;
120722 padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_Open; //open system
120723 @@ -2673,7 +2801,7 @@ static int rtw_wx_set_enc(struct net_device *dev,
120724 {
120725 padapter->securitypriv.dot11PrivacyKeyIndex = key;
120726
120727 - DBG_8192C("(keyindex_provided == 1), keyid=%d, key_len=%d\n", key, padapter->securitypriv.dot11DefKeylen[key]);
120728 + DBG_871X("(keyindex_provided == 1), keyid=%d, key_len=%d\n", key, padapter->securitypriv.dot11DefKeylen[key]);
120729
120730 switch(padapter->securitypriv.dot11DefKeylen[key])
120731 {
120732 @@ -2910,7 +3038,8 @@ static int rtw_wx_set_auth(struct net_device *dev,
120733 * It's the starting point of a link layer connection using wpa_supplicant
120734 */
120735 if(check_fwstate(&padapter->mlmepriv, _FW_LINKED)) {
120736 - rtw_disassoc_cmd(padapter);
120737 + LeaveAllPowerSaveMode(padapter);
120738 + rtw_disassoc_cmd(padapter, 500, _FALSE);
120739 DBG_871X("%s...call rtw_indicate_disconnect\n ",__FUNCTION__);
120740 rtw_indicate_disconnect(padapter);
120741 rtw_free_assoc_resources(padapter, 1);
120742 @@ -2987,6 +3116,11 @@ static int rtw_wx_set_enc_ext(struct net_device *dev,
120743 case IW_ENCODE_ALG_CCMP:
120744 alg_name = "CCMP";
120745 break;
120746 +#ifdef CONFIG_IEEE80211W
120747 + case IW_ENCODE_ALG_AES_CMAC:
120748 + alg_name = "BIP";
120749 + break;
120750 +#endif //CONFIG_IEEE80211W
120751 default:
120752 return -1;
120753 }
120754 @@ -2994,7 +3128,11 @@ static int rtw_wx_set_enc_ext(struct net_device *dev,
120755 strncpy((char *)param->u.crypt.alg, alg_name, IEEE_CRYPT_ALG_NAME_LEN);
120756
120757
120758 - if(pext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)//?
120759 + if((pext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)//?
120760 +#ifdef CONFIG_IEEE80211W
120761 + || (pext->ext_flags & IW_ENCODE_ALG_AES_CMAC)
120762 +#endif //CONFIG_IEEE80211W
120763 + )
120764 {
120765 param->u.crypt.set_tx = 0;
120766 }
120767 @@ -3065,40 +3203,40 @@ static int rtw_wx_get_nick(struct net_device *dev,
120768 u32 ndisencryptstatus;
120769 */
120770
120771 - //DBG_8192C("auth_alg=0x%x, enc_alg=0x%x, auth_type=0x%x, enc_type=0x%x\n",
120772 + //DBG_871X("auth_alg=0x%x, enc_alg=0x%x, auth_type=0x%x, enc_type=0x%x\n",
120773 // psecuritypriv->dot11AuthAlgrthm, psecuritypriv->dot11PrivacyAlgrthm,
120774 // psecuritypriv->ndisauthtype, psecuritypriv->ndisencryptstatus);
120775
120776 - //DBG_8192C("enc_alg=0x%x\n", psecuritypriv->dot11PrivacyAlgrthm);
120777 - //DBG_8192C("auth_type=0x%x\n", psecuritypriv->ndisauthtype);
120778 - //DBG_8192C("enc_type=0x%x\n", psecuritypriv->ndisencryptstatus);
120779 + //DBG_871X("enc_alg=0x%x\n", psecuritypriv->dot11PrivacyAlgrthm);
120780 + //DBG_871X("auth_type=0x%x\n", psecuritypriv->ndisauthtype);
120781 + //DBG_871X("enc_type=0x%x\n", psecuritypriv->ndisencryptstatus);
120782
120783 #if 0
120784 - DBG_8192C("dbg(0x210)=0x%x\n", rtw_read32(padapter, 0x210));
120785 - DBG_8192C("dbg(0x608)=0x%x\n", rtw_read32(padapter, 0x608));
120786 - DBG_8192C("dbg(0x280)=0x%x\n", rtw_read32(padapter, 0x280));
120787 - DBG_8192C("dbg(0x284)=0x%x\n", rtw_read32(padapter, 0x284));
120788 - DBG_8192C("dbg(0x288)=0x%x\n", rtw_read32(padapter, 0x288));
120789 + DBG_871X("dbg(0x210)=0x%x\n", rtw_read32(padapter, 0x210));
120790 + DBG_871X("dbg(0x608)=0x%x\n", rtw_read32(padapter, 0x608));
120791 + DBG_871X("dbg(0x280)=0x%x\n", rtw_read32(padapter, 0x280));
120792 + DBG_871X("dbg(0x284)=0x%x\n", rtw_read32(padapter, 0x284));
120793 + DBG_871X("dbg(0x288)=0x%x\n", rtw_read32(padapter, 0x288));
120794
120795 - DBG_8192C("dbg(0x664)=0x%x\n", rtw_read32(padapter, 0x664));
120796 + DBG_871X("dbg(0x664)=0x%x\n", rtw_read32(padapter, 0x664));
120797
120798
120799 - DBG_8192C("\n");
120800 + DBG_871X("\n");
120801
120802 - DBG_8192C("dbg(0x430)=0x%x\n", rtw_read32(padapter, 0x430));
120803 - DBG_8192C("dbg(0x438)=0x%x\n", rtw_read32(padapter, 0x438));
120804 + DBG_871X("dbg(0x430)=0x%x\n", rtw_read32(padapter, 0x430));
120805 + DBG_871X("dbg(0x438)=0x%x\n", rtw_read32(padapter, 0x438));
120806
120807 - DBG_8192C("dbg(0x440)=0x%x\n", rtw_read32(padapter, 0x440));
120808 + DBG_871X("dbg(0x440)=0x%x\n", rtw_read32(padapter, 0x440));
120809
120810 - DBG_8192C("dbg(0x458)=0x%x\n", rtw_read32(padapter, 0x458));
120811 + DBG_871X("dbg(0x458)=0x%x\n", rtw_read32(padapter, 0x458));
120812
120813 - DBG_8192C("dbg(0x484)=0x%x\n", rtw_read32(padapter, 0x484));
120814 - DBG_8192C("dbg(0x488)=0x%x\n", rtw_read32(padapter, 0x488));
120815 + DBG_871X("dbg(0x484)=0x%x\n", rtw_read32(padapter, 0x484));
120816 + DBG_871X("dbg(0x488)=0x%x\n", rtw_read32(padapter, 0x488));
120817
120818 - DBG_8192C("dbg(0x444)=0x%x\n", rtw_read32(padapter, 0x444));
120819 - DBG_8192C("dbg(0x448)=0x%x\n", rtw_read32(padapter, 0x448));
120820 - DBG_8192C("dbg(0x44c)=0x%x\n", rtw_read32(padapter, 0x44c));
120821 - DBG_8192C("dbg(0x450)=0x%x\n", rtw_read32(padapter, 0x450));
120822 + DBG_871X("dbg(0x444)=0x%x\n", rtw_read32(padapter, 0x444));
120823 + DBG_871X("dbg(0x448)=0x%x\n", rtw_read32(padapter, 0x448));
120824 + DBG_871X("dbg(0x44c)=0x%x\n", rtw_read32(padapter, 0x44c));
120825 + DBG_871X("dbg(0x450)=0x%x\n", rtw_read32(padapter, 0x450));
120826 #endif
120827
120828 return 0;
120829 @@ -3109,15 +3247,51 @@ static int rtw_wx_read32(struct net_device *dev,
120830 struct iw_request_info *info,
120831 union iwreq_data *wrqu, char *extra)
120832 {
120833 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
120834 -
120835 + PADAPTER padapter;
120836 + struct iw_point *p;
120837 + u16 len;
120838 u32 addr;
120839 u32 data32;
120840 + u32 bytes;
120841 + u8 *ptmp;
120842 +
120843 +
120844 + padapter = (PADAPTER)rtw_netdev_priv(dev);
120845 + p = &wrqu->data;
120846 + len = p->length;
120847 + ptmp = (u8*)rtw_malloc(len);
120848 + if (NULL == ptmp)
120849 + return -ENOMEM;
120850 +
120851 + if (copy_from_user(ptmp, p->pointer, len)) {
120852 + rtw_mfree(ptmp, len);
120853 + return -EFAULT;
120854 + }
120855 +
120856 + bytes = 0;
120857 + addr = 0;
120858 + sscanf(ptmp, "%d,%x", &bytes, &addr);
120859
120860 + switch (bytes) {
120861 + case 1:
120862 + data32 = rtw_read8(padapter, addr);
120863 + sprintf(extra, "0x%02X", data32);
120864 + break;
120865 + case 2:
120866 + data32 = rtw_read16(padapter, addr);
120867 + sprintf(extra, "0x%04X", data32);
120868 + break;
120869 + case 4:
120870 + data32 = rtw_read32(padapter, addr);
120871 + sprintf(extra, "0x%08X", data32);
120872 + break;
120873 + default:
120874 + printk(KERN_INFO "%s: usage> read [bytes],[address(hex)]\n", __func__);
120875 + return -EINVAL;
120876 + }
120877 + printk(KERN_INFO "%s: addr=0x%08X data=%s\n", __func__, addr, extra);
120878
120879 - addr = *(u32*)extra;
120880 - data32 = rtw_read32(padapter, addr);
120881 - sprintf(extra, "0x%08x", data32);
120882 + rtw_mfree(ptmp, len);
120883
120884 return 0;
120885 }
120886 @@ -3126,15 +3300,35 @@ static int rtw_wx_write32(struct net_device *dev,
120887 struct iw_request_info *info,
120888 union iwreq_data *wrqu, char *extra)
120889 {
120890 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
120891 + PADAPTER padapter = (PADAPTER)rtw_netdev_priv(dev);
120892
120893 u32 addr;
120894 u32 data32;
120895 + u32 bytes;
120896 +
120897
120898 + bytes = 0;
120899 + addr = 0;
120900 + data32 = 0;
120901 + sscanf(extra, "%d,%x,%x", &bytes, &addr, &data32);
120902
120903 - addr = *(u32*)extra;
120904 - data32 = *((u32*)extra + 1);
120905 - rtw_write32(padapter, addr, data32);
120906 + switch (bytes) {
120907 + case 1:
120908 + rtw_write8(padapter, addr, (u8)data32);
120909 + printk(KERN_INFO "%s: addr=0x%08X data=0x%02X\n", __func__, addr, (u8)data32);
120910 + break;
120911 + case 2:
120912 + rtw_write16(padapter, addr, (u16)data32);
120913 + printk(KERN_INFO "%s: addr=0x%08X data=0x%04X\n", __func__, addr, (u16)data32);
120914 + break;
120915 + case 4:
120916 + rtw_write32(padapter, addr, data32);
120917 + printk(KERN_INFO "%s: addr=0x%08X data=0x%08X\n", __func__, addr, data32);
120918 + break;
120919 + default:
120920 + printk(KERN_INFO "%s: usage> write [bytes],[address(hex)],[data(hex)]\n", __func__);
120921 + return -EINVAL;
120922 + }
120923
120924 return 0;
120925 }
120926 @@ -3149,8 +3343,8 @@ static int rtw_wx_read_rf(struct net_device *dev,
120927
120928 path = *(u32*)extra;
120929 addr = *((u32*)extra + 1);
120930 - data32 = padapter->HalFunc.read_rfreg(padapter, path, addr, 0xFFFFF);
120931 -// DBG_8192C("%s: path=%d addr=0x%02x data=0x%05x\n", __func__, path, addr, data32);
120932 + data32 = rtw_hal_read_rfreg(padapter, path, addr, 0xFFFFF);
120933 +// DBG_871X("%s: path=%d addr=0x%02x data=0x%05x\n", __func__, path, addr, data32);
120934 /*
120935 * IMPORTANT!!
120936 * Only when wireless private ioctl is at odd order,
120937 @@ -3172,8 +3366,8 @@ static int rtw_wx_write_rf(struct net_device *dev,
120938 path = *(u32*)extra;
120939 addr = *((u32*)extra + 1);
120940 data32 = *((u32*)extra + 2);
120941 -// DBG_8192C("%s: path=%d addr=0x%02x data=0x%05x\n", __func__, path, addr, data32);
120942 - padapter->HalFunc.write_rfreg(padapter, path, addr, 0xFFFFF, data32);
120943 +// DBG_871X("%s: path=%d addr=0x%02x data=0x%05x\n", __func__, path, addr, data32);
120944 + rtw_hal_write_rfreg(padapter, path, addr, 0xFFFFF, data32);
120945
120946 return 0;
120947 }
120948 @@ -3190,7 +3384,7 @@ static int dummy(struct net_device *dev, struct iw_request_info *a,
120949 //_adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
120950 //struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
120951
120952 - //DBG_8192C("cmd_code=%x, fwstate=0x%x\n", a->cmd, get_fwstate(pmlmepriv));
120953 + //DBG_871X("cmd_code=%x, fwstate=0x%x\n", a->cmd, get_fwstate(pmlmepriv));
120954
120955 return -1;
120956
120957 @@ -3213,7 +3407,7 @@ static int rtw_wx_set_channel_plan(struct net_device *dev,
120958 #endif
120959
120960 if( _SUCCESS == rtw_set_chplan_cmd(padapter, channel_plan_req, 1) ) {
120961 - DBG_871X("\n======== Set channel_plan = 0x%02X ========\n", pmlmepriv->ChannelPlan);
120962 + DBG_871X("%s set channel_plan = 0x%02X\n", __func__, pmlmepriv->ChannelPlan);
120963 } else
120964 return -EPERM;
120965
120966 @@ -3245,7 +3439,7 @@ static int rtw_wx_get_sensitivity(struct net_device *dev,
120967 // Modified by Albert 20110914
120968 // This is in dbm format for MTK platform.
120969 wrqu->qual.level = padapter->recvpriv.rssi;
120970 - DBG_8192C(" level = %u\n", wrqu->qual.level );
120971 + DBG_871X(" level = %u\n", wrqu->qual.level );
120972 #endif
120973 return 0;
120974 }
120975 @@ -3391,12 +3585,12 @@ static void rtw_dbg_mode_hdl(_adapter *padapter, u32 id, u8 *pdata, u32 len)
120976 u8 offset;
120977 u32 value;
120978
120979 - DBG_8192C("%s\n", __FUNCTION__);
120980 + DBG_871X("%s\n", __FUNCTION__);
120981
120982 switch(id)
120983 {
120984 case GEN_MP_IOCTL_SUBCODE(MP_START):
120985 - DBG_8192C("871x_driver is only for normal mode, can't enter mp mode\n");
120986 + DBG_871X("871x_driver is only for normal mode, can't enter mp mode\n");
120987 break;
120988 case GEN_MP_IOCTL_SUBCODE(READ_REG):
120989 RegRWStruct = (pRW_Reg)pdata;
120990 @@ -3441,7 +3635,7 @@ static void rtw_dbg_mode_hdl(_adapter *padapter, u32 id, u8 *pdata, u32 len)
120991 path = (u8)prfreg->path;
120992 offset = (u8)prfreg->offset;
120993
120994 - value = padapter->HalFunc.read_rfreg(padapter, path, offset, 0xffffffff);
120995 + value = rtw_hal_read_rfreg(padapter, path, offset, 0xffffffff);
120996
120997 prfreg->value = value;
120998
120999 @@ -3454,27 +3648,26 @@ static void rtw_dbg_mode_hdl(_adapter *padapter, u32 id, u8 *pdata, u32 len)
121000 offset = (u8)prfreg->offset;
121001 value = prfreg->value;
121002
121003 - padapter->HalFunc.write_rfreg(padapter, path, offset, 0xffffffff, value);
121004 + rtw_hal_write_rfreg(padapter, path, offset, 0xffffffff, value);
121005
121006 break;
121007 case GEN_MP_IOCTL_SUBCODE(TRIGGER_GPIO):
121008 - DBG_8192C("==> trigger gpio 0\n");
121009 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_TRIGGER_GPIO_0, 0);
121010 + DBG_871X("==> trigger gpio 0\n");
121011 + rtw_hal_set_hwreg(padapter, HW_VAR_TRIGGER_GPIO_0, 0);
121012 break;
121013 #ifdef CONFIG_BT_COEXIST
121014 case GEN_MP_IOCTL_SUBCODE(SET_DM_BT):
121015 - DBG_8192C("==> set dm_bt_coexist:%x\n",*(u8 *)pdata);
121016 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BT_SET_COEXIST, pdata);
121017 + DBG_871X("==> set dm_bt_coexist:%x\n",*(u8 *)pdata);
121018 + rtw_hal_set_hwreg(padapter, HW_VAR_BT_SET_COEXIST, pdata);
121019 break;
121020 case GEN_MP_IOCTL_SUBCODE(DEL_BA):
121021 - DBG_8192C("==> delete ba:%x\n",*(u8 *)pdata);
121022 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_BT_ISSUE_DELBA, pdata);
121023 + DBG_871X("==> delete ba:%x\n",*(u8 *)pdata);
121024 + rtw_hal_set_hwreg(padapter, HW_VAR_BT_ISSUE_DELBA, pdata);
121025 break;
121026 #endif
121027 #ifdef DBG_CONFIG_ERROR_DETECT
121028 case GEN_MP_IOCTL_SUBCODE(GET_WIFI_STATUS):
121029 - if(padapter->HalFunc.sreset_get_wifi_status)
121030 - *pdata = padapter->HalFunc.sreset_get_wifi_status(padapter);
121031 + *pdata = rtw_hal_sreset_get_wifi_status(padapter);
121032 break;
121033 #endif
121034
121035 @@ -3495,10 +3688,10 @@ static int rtw_mp_ioctl_hdl(struct net_device *dev, struct iw_request_info *info
121036 uint status=0;
121037 u16 len;
121038 u8 *pparmbuf = NULL, bset;
121039 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121040 + PADAPTER padapter = (PADAPTER)rtw_netdev_priv(dev);
121041 struct iw_point *p = &wrqu->data;
121042
121043 - //DBG_8192C("+rtw_mp_ioctl_hdl\n");
121044 + //DBG_871X("+rtw_mp_ioctl_hdl\n");
121045
121046 //mutex_lock(&ioctl_mutex);
121047
121048 @@ -3532,7 +3725,7 @@ static int rtw_mp_ioctl_hdl(struct net_device *dev, struct iw_request_info *info
121049 goto _rtw_mp_ioctl_hdl_exit;
121050 }
121051
121052 - //DBG_8192C("%s: %d\n", __func__, poidparam->subcode);
121053 + //DBG_871X("%s: %d\n", __func__, poidparam->subcode);
121054
121055 #ifdef CONFIG_MP_INCLUDED
121056 phandler = mp_ioctl_hdl + poidparam->subcode;
121057 @@ -3572,7 +3765,7 @@ static int rtw_mp_ioctl_hdl(struct net_device *dev, struct iw_request_info *info
121058 //todo:check status, BytesNeeded, etc.
121059 }
121060 else {
121061 - DBG_8192C("rtw_mp_ioctl_hdl(): err!, subcode=%d, oid=%d, handler=%p\n",
121062 + DBG_871X("rtw_mp_ioctl_hdl(): err!, subcode=%d, oid=%d, handler=%p\n",
121063 poidparam->subcode, phandler->oid, phandler->handler);
121064 ret = -EFAULT;
121065 goto _rtw_mp_ioctl_hdl_exit;
121066 @@ -3620,7 +3813,7 @@ static int rtw_get_ap_info(struct net_device *dev,
121067 _queue *queue = &(pmlmepriv->scanned_queue);
121068 struct iw_point *pdata = &wrqu->data;
121069
121070 - DBG_8192C("+rtw_get_aplist_info\n");
121071 + DBG_871X("+rtw_get_aplist_info\n");
121072
121073 if((padapter->bDriverStopped) || (pdata==NULL))
121074 {
121075 @@ -3669,7 +3862,7 @@ static int rtw_get_ap_info(struct net_device *dev,
121076 //if(hwaddr_aton_i(pdata->pointer, bssid))
121077 if(hwaddr_aton_i(data, bssid))
121078 {
121079 - DBG_8192C("Invalid BSSID '%s'.\n", (u8*)data);
121080 + DBG_871X("Invalid BSSID '%s'.\n", (u8*)data);
121081 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
121082 return -EINVAL;
121083 }
121084 @@ -3677,7 +3870,7 @@ static int rtw_get_ap_info(struct net_device *dev,
121085
121086 if(_rtw_memcmp(bssid, pnetwork->network.MacAddress, ETH_ALEN) == _TRUE)//BSSID match, then check if supporting wpa/wpa2
121087 {
121088 - DBG_8192C("BSSID:" MAC_FMT "\n", MAC_ARG(bssid));
121089 + DBG_871X("BSSID:" MAC_FMT "\n", MAC_ARG(bssid));
121090
121091 pbuf = rtw_get_wpa_ie(&pnetwork->network.IEs[12], &wpa_ielen, pnetwork->network.IELength-12);
121092 if(pbuf && (wpa_ielen>0))
121093 @@ -3768,17 +3961,17 @@ static int rtw_wps_start(struct net_device *dev,
121094 goto exit;
121095 }
121096
121097 - if ( u32wps_start == 0 )
121098 - {
121099 - u32wps_start = *extra;
121100 - }
121101 + if ( u32wps_start == 0 )
121102 + {
121103 + u32wps_start = *extra;
121104 + }
121105
121106 - DBG_8192C( "[%s] wps_start = %d\n", __FUNCTION__, u32wps_start );
121107 + DBG_871X( "[%s] wps_start = %d\n", __FUNCTION__, u32wps_start );
121108
121109 - if ( u32wps_start == 1 ) // WPS Start
121110 - {
121111 + if ( u32wps_start == 1 ) // WPS Start
121112 + {
121113 rtw_led_control(padapter, LED_CTL_START_WPS);
121114 - }
121115 + }
121116 else if ( u32wps_start == 2 ) // WPS Stop because of wps success
121117 {
121118 rtw_led_control(padapter, LED_CTL_STOP_WPS);
121119 @@ -3787,6 +3980,11 @@ static int rtw_wps_start(struct net_device *dev,
121120 {
121121 rtw_led_control(padapter, LED_CTL_STOP_WPS_FAIL);
121122 }
121123 +
121124 +#ifdef CONFIG_INTEL_WIDI
121125 + process_intel_widi_wps_status(padapter, u32wps_start);
121126 +#endif //CONFIG_INTEL_WIDI
121127 +
121128 exit:
121129
121130 return ret;
121131 @@ -3794,7 +3992,6 @@ exit:
121132 }
121133
121134 #ifdef CONFIG_P2P
121135 -
121136 static int rtw_wext_p2p_enable(struct net_device *dev,
121137 struct iw_request_info *info,
121138 union iwreq_data *wrqu, char *extra)
121139 @@ -3834,9 +4031,34 @@ static int rtw_wext_p2p_enable(struct net_device *dev,
121140 {
121141 // Stay at the listen state and wait for discovery.
121142 channel = pwdinfo->listen_channel;
121143 + pwdinfo->operating_channel = pwdinfo->listen_channel;
121144 ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
121145 - bwmode = HT_CHANNEL_WIDTH_20;
121146 + bwmode = HT_CHANNEL_WIDTH_20;
121147 + }
121148 +#ifdef CONFIG_CONCURRENT_MODE
121149 + else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
121150 + {
121151 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
121152 + //struct wifidirect_info *pbuddy_wdinfo = &pbuddy_adapter->wdinfo;
121153 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
121154 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
121155 +
121156 + _set_timer( &pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_interval );
121157 + if ( check_fwstate( pbuddy_mlmepriv, _FW_LINKED ) )
121158 + {
121159 + pwdinfo->operating_channel = pbuddy_mlmeext->cur_channel;
121160 + // How about the ch_offset and bwmode ??
121161 + }
121162 + else
121163 + {
121164 + pwdinfo->operating_channel = pwdinfo->listen_channel;
121165 + }
121166 +
121167 + channel = pbuddy_mlmeext->cur_channel;
121168 + ch_offset = pbuddy_mlmeext->cur_ch_offset;
121169 + bwmode = pbuddy_mlmeext->cur_bwmode;
121170 }
121171 +#endif
121172 else
121173 {
121174 pwdinfo->operating_channel = pmlmeext->cur_channel;
121175 @@ -3865,7 +4087,7 @@ static int rtw_p2p_set_go_nego_ssid(struct net_device *dev,
121176 struct iw_point *pdata = &wrqu->data;
121177 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121178
121179 - DBG_8192C( "[%s] ssid = %s, len = %d\n", __FUNCTION__, extra, strlen( extra ) );
121180 + DBG_871X( "[%s] ssid = %s, len = %d\n", __FUNCTION__, extra, (u32)strlen( extra ) );
121181 _rtw_memcpy( pwdinfo->nego_ssid, extra, strlen( extra ) );
121182 pwdinfo->nego_ssidlen = strlen( extra );
121183
121184 @@ -3878,28 +4100,15 @@ static int rtw_p2p_set_intent(struct net_device *dev,
121185 struct iw_request_info *info,
121186 union iwreq_data *wrqu, char *extra)
121187 {
121188 -
121189 - int ret = 0;
121190 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121191 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
121192 - struct iw_point *pdata = &wrqu->data;
121193 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121194 - u8 intent = pwdinfo->intent;
121195 + int ret = 0;
121196 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121197 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121198 + u8 intent = pwdinfo->intent;
121199
121200 - switch( wrqu->data.length )
121201 - {
121202 - case 1:
121203 - {
121204 - intent = extra[ 0 ] - '0';
121205 - break;
121206 - }
121207 - case 2:
121208 - {
121209 - intent = str_2char2num( extra[ 0 ], extra[ 1 ]);
121210 - break;
121211 - }
121212 - }
121213 + extra[ wrqu->data.length ] = 0x00;
121214
121215 + intent = rtw_atoi( extra );
121216 +
121217 if ( intent <= 15 )
121218 {
121219 pwdinfo->intent= intent;
121220 @@ -3909,10 +4118,10 @@ static int rtw_p2p_set_intent(struct net_device *dev,
121221 ret = -1;
121222 }
121223
121224 - DBG_8192C( "[%s] intent = %d\n", __FUNCTION__, intent);
121225 -
121226 + DBG_871X( "[%s] intent = %d\n", __FUNCTION__, intent);
121227 +
121228 return ret;
121229 -
121230 +
121231 }
121232
121233 static int rtw_p2p_set_listen_ch(struct net_device *dev,
121234 @@ -3922,26 +4131,13 @@ static int rtw_p2p_set_listen_ch(struct net_device *dev,
121235
121236 int ret = 0;
121237 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121238 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
121239 - struct iw_point *pdata = &wrqu->data;
121240 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121241 u8 listen_ch = pwdinfo->listen_channel; // Listen channel number
121242
121243 - switch( wrqu->data.length )
121244 - {
121245 - case 1:
121246 - {
121247 - listen_ch = extra[ 0 ] - '0';
121248 - break;
121249 - }
121250 - case 2:
121251 - {
121252 - listen_ch = str_2char2num( extra[ 0 ], extra[ 1 ]);
121253 - break;
121254 - }
121255 - }
121256 + extra[ wrqu->data.length ] = 0x00;
121257 + listen_ch = rtw_atoi( extra );
121258
121259 - if ( listen_ch > 0 && listen_ch <= 13 )
121260 + if ( ( listen_ch == 1 ) || ( listen_ch == 6 ) || ( listen_ch == 11 ) )
121261 {
121262 pwdinfo->listen_channel = listen_ch;
121263 set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
121264 @@ -3951,7 +4147,7 @@ static int rtw_p2p_set_listen_ch(struct net_device *dev,
121265 ret = -1;
121266 }
121267
121268 - DBG_8192C( "[%s] listen_ch = %d\n", __FUNCTION__, pwdinfo->listen_channel );
121269 + DBG_871X( "[%s] listen_ch = %d\n", __FUNCTION__, pwdinfo->listen_channel );
121270
121271 return ret;
121272
121273 @@ -3966,30 +4162,13 @@ static int rtw_p2p_set_op_ch(struct net_device *dev,
121274
121275 int ret = 0;
121276 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121277 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
121278 - struct iw_point *pdata = &wrqu->data;
121279 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121280 u8 op_ch = pwdinfo->operating_channel; // Operating channel number
121281
121282 - switch( wrqu->data.length )
121283 - {
121284 - case 1:
121285 - {
121286 - op_ch = extra[ 0 ] - '0';
121287 - break;
121288 - }
121289 - case 2:
121290 - {
121291 - op_ch = str_2char2num( extra[ 0 ], extra[ 1 ]);
121292 - break;
121293 - }
121294 - }
121295 + extra[ wrqu->data.length ] = 0x00;
121296
121297 - if ( op_ch > 0 && op_ch <= 13 )
121298 - {
121299 - pwdinfo->operating_channel = op_ch;
121300 - }
121301 - else if(IsLegal5GChannel(padapter, op_ch))
121302 + op_ch = ( u8 ) rtw_atoi( extra );
121303 + if ( op_ch > 0 )
121304 {
121305 pwdinfo->operating_channel = op_ch;
121306 }
121307 @@ -3998,10 +4177,10 @@ static int rtw_p2p_set_op_ch(struct net_device *dev,
121308 ret = -1;
121309 }
121310
121311 - DBG_8192C( "[%s] op_ch = %d\n", __FUNCTION__, pwdinfo->operating_channel );
121312 + DBG_871X( "[%s] op_ch = %d\n", __FUNCTION__, pwdinfo->operating_channel );
121313
121314 return ret;
121315 -
121316 +
121317 }
121318
121319
121320 @@ -4012,8 +4191,6 @@ static int rtw_p2p_profilefound(struct net_device *dev,
121321
121322 int ret = 0;
121323 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121324 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
121325 - struct iw_point *pdata = &wrqu->data;
121326 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121327
121328 // Comment by Albert 2010/10/13
121329 @@ -4026,7 +4203,7 @@ static int rtw_p2p_profilefound(struct net_device *dev,
121330 // YY => SSID Length
121331 // SSID => SSID for persistence group
121332
121333 - DBG_8192C( "[%s] In value = %s, len = %d \n", __FUNCTION__, extra, wrqu->data.length -1);
121334 + DBG_871X( "[%s] In value = %s, len = %d \n", __FUNCTION__, extra, wrqu->data.length -1);
121335
121336
121337 // The upper application should pass the SSID to driver by using this rtw_p2p_profilefound function.
121338 @@ -4055,8 +4232,8 @@ static int rtw_p2p_profilefound(struct net_device *dev,
121339 pwdinfo->profileinfo[ pwdinfo->profileindex ].peermac[ jj ] = key_2char2num(extra[ kk ], extra[ kk+ 1 ]);
121340 }
121341
121342 - pwdinfo->profileinfo[ pwdinfo->profileindex ].ssidlen = ( extra[18] - '0' ) * 10 + ( extra[ 19 ] - '0' );
121343 - _rtw_memcpy( pwdinfo->profileinfo[ pwdinfo->profileindex ].ssid, &extra[ 20 ], pwdinfo->profileinfo[ pwdinfo->profileindex ].ssidlen );
121344 + //pwdinfo->profileinfo[ pwdinfo->profileindex ].ssidlen = ( extra[18] - '0' ) * 10 + ( extra[ 19 ] - '0' );
121345 + //_rtw_memcpy( pwdinfo->profileinfo[ pwdinfo->profileindex ].ssid, &extra[ 20 ], pwdinfo->profileinfo[ pwdinfo->profileindex ].ssidlen );
121346 pwdinfo->profileindex++;
121347 }
121348 }
121349 @@ -4073,16 +4250,14 @@ static int rtw_p2p_setDN(struct net_device *dev,
121350
121351 int ret = 0;
121352 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121353 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
121354 - struct iw_point *pdata = &wrqu->data;
121355 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
121356
121357
121358 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
121359 - pwdinfo->device_name_len = wrqu->data.length - 1;
121360 + DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
121361 +
121362 _rtw_memset( pwdinfo->device_name, 0x00, WPS_MAX_DEVICE_NAME_LEN );
121363 - _rtw_memcpy( pwdinfo->device_name, extra, pwdinfo->device_name_len );
121364 -
121365 + _rtw_memcpy( pwdinfo->device_name, extra, wrqu->data.length - 1 );
121366 + pwdinfo->device_name_len = wrqu->data.length - 1;
121367 return ret;
121368
121369 }
121370 @@ -4098,23 +4273,20 @@ static int rtw_p2p_get_status(struct net_device *dev,
121371 struct iw_point *pdata = &wrqu->data;
121372 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121373
121374 -
121375 - 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),
121376 - pwdinfo->p2p_peer_interface_addr[ 0 ], pwdinfo->p2p_peer_interface_addr[ 1 ], pwdinfo->p2p_peer_interface_addr[ 2 ],
121377 - pwdinfo->p2p_peer_interface_addr[ 3 ], pwdinfo->p2p_peer_interface_addr[ 4 ], pwdinfo->p2p_peer_interface_addr[ 5 ]);
121378
121379 + if ( padapter->bShowGetP2PState )
121380 + {
121381 + 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),
121382 + pwdinfo->p2p_peer_interface_addr[ 0 ], pwdinfo->p2p_peer_interface_addr[ 1 ], pwdinfo->p2p_peer_interface_addr[ 2 ],
121383 + pwdinfo->p2p_peer_interface_addr[ 3 ], pwdinfo->p2p_peer_interface_addr[ 4 ], pwdinfo->p2p_peer_interface_addr[ 5 ]);
121384 + }
121385 +
121386 // Commented by Albert 2010/10/12
121387 // Because of the output size limitation, I had removed the "Role" information.
121388 // About the "Role" information, we will use the new private IOCTL to get the "Role" information.
121389 sprintf( extra, "\n\nStatus=%.2d\n", rtw_p2p_state(pwdinfo) );
121390 wrqu->data.length = strlen( extra );
121391
121392 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN))
121393 - {
121394 - // Stay at the listen state and wait for discovery.
121395 - set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
121396 - }
121397 -
121398 return ret;
121399
121400 }
121401 @@ -4152,7 +4324,7 @@ static int rtw_p2p_get_role(struct net_device *dev,
121402 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121403
121404
121405 - 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),
121406 + 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),
121407 pwdinfo->p2p_peer_interface_addr[ 0 ], pwdinfo->p2p_peer_interface_addr[ 1 ], pwdinfo->p2p_peer_interface_addr[ 2 ],
121408 pwdinfo->p2p_peer_interface_addr[ 3 ], pwdinfo->p2p_peer_interface_addr[ 4 ], pwdinfo->p2p_peer_interface_addr[ 5 ]);
121409
121410 @@ -4174,7 +4346,7 @@ static int rtw_p2p_get_peer_ifaddr(struct net_device *dev,
121411 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121412
121413
121414 - 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),
121415 + 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),
121416 pwdinfo->p2p_peer_interface_addr[ 0 ], pwdinfo->p2p_peer_interface_addr[ 1 ], pwdinfo->p2p_peer_interface_addr[ 2 ],
121417 pwdinfo->p2p_peer_interface_addr[ 3 ], pwdinfo->p2p_peer_interface_addr[ 4 ], pwdinfo->p2p_peer_interface_addr[ 5 ]);
121418
121419 @@ -4197,7 +4369,7 @@ static int rtw_p2p_get_peer_devaddr(struct net_device *dev,
121420 struct iw_point *pdata = &wrqu->data;
121421 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121422
121423 - 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),
121424 + 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),
121425 pwdinfo->rx_prov_disc_info.peerDevAddr[ 0 ], pwdinfo->rx_prov_disc_info.peerDevAddr[ 1 ],
121426 pwdinfo->rx_prov_disc_info.peerDevAddr[ 2 ], pwdinfo->rx_prov_disc_info.peerDevAddr[ 3 ],
121427 pwdinfo->rx_prov_disc_info.peerDevAddr[ 4 ], pwdinfo->rx_prov_disc_info.peerDevAddr[ 5 ]);
121428 @@ -4210,6 +4382,30 @@ static int rtw_p2p_get_peer_devaddr(struct net_device *dev,
121429
121430 }
121431
121432 +static int rtw_p2p_get_peer_devaddr_by_invitation(struct net_device *dev,
121433 + struct iw_request_info *info,
121434 + union iwreq_data *wrqu, char *extra)
121435 +
121436 +{
121437 +
121438 + int ret = 0;
121439 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121440 + struct iw_point *pdata = &wrqu->data;
121441 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121442 +
121443 + 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),
121444 + pwdinfo->p2p_peer_device_addr[ 0 ], pwdinfo->p2p_peer_device_addr[ 1 ],
121445 + pwdinfo->p2p_peer_device_addr[ 2 ], pwdinfo->p2p_peer_device_addr[ 3 ],
121446 + pwdinfo->p2p_peer_device_addr[ 4 ], pwdinfo->p2p_peer_device_addr[ 5 ]);
121447 + sprintf( extra, "\nMAC %.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
121448 + pwdinfo->p2p_peer_device_addr[ 0 ], pwdinfo->p2p_peer_device_addr[ 1 ],
121449 + pwdinfo->p2p_peer_device_addr[ 2 ], pwdinfo->p2p_peer_device_addr[ 3 ],
121450 + pwdinfo->p2p_peer_device_addr[ 4 ], pwdinfo->p2p_peer_device_addr[ 5 ]);
121451 + wrqu->data.length = strlen( extra );
121452 + return ret;
121453 +
121454 +}
121455 +
121456 static int rtw_p2p_get_groupid(struct net_device *dev,
121457 struct iw_request_info *info,
121458 union iwreq_data *wrqu, char *extra)
121459 @@ -4221,7 +4417,7 @@ static int rtw_p2p_get_groupid(struct net_device *dev,
121460 struct iw_point *pdata = &wrqu->data;
121461 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121462
121463 - sprintf( extra, "\n%.2X:%.2X:%.2X:%.2X:%.2X:%.2X-%s",
121464 + sprintf( extra, "\n%.2X:%.2X:%.2X:%.2X:%.2X:%.2X %s",
121465 pwdinfo->groupid_info.go_device_addr[ 0 ], pwdinfo->groupid_info.go_device_addr[ 1 ],
121466 pwdinfo->groupid_info.go_device_addr[ 2 ], pwdinfo->groupid_info.go_device_addr[ 3 ],
121467 pwdinfo->groupid_info.go_device_addr[ 4 ], pwdinfo->groupid_info.go_device_addr[ 5 ],
121468 @@ -4231,46 +4427,551 @@ static int rtw_p2p_get_groupid(struct net_device *dev,
121469
121470 }
121471
121472 -
121473 -static int rtw_p2p_get_wps_configmethod(struct net_device *dev,
121474 +static int rtw_p2p_get_op_ch(struct net_device *dev,
121475 struct iw_request_info *info,
121476 union iwreq_data *wrqu, char *extra)
121477 +
121478 {
121479
121480 int ret = 0;
121481 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121482 - struct iw_point *pdata = &wrqu->data;
121483 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121484 + struct iw_point *pdata = &wrqu->data;
121485 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121486 - u8 peerMAC[ ETH_ALEN ] = { 0x00 };
121487 - int jj,kk;
121488 - u8 peerMACStr[ 17 ] = { 0x00 };
121489 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
121490 - _irqL irqL;
121491 - _list *plist, *phead;
121492 - _queue *queue = &(pmlmepriv->scanned_queue);
121493 - struct wlan_network *pnetwork = NULL;
121494 - u8 blnMatch = 0;
121495 - u16 attr_content = 0;
121496 - uint attr_contentlen = 0;
121497 - //6 is the string "wpsCM=", 17 is the MAC addr, we have to clear it at wrqu->data.pointer
121498 - u8 attr_content_str[ 6 + 17 ] = { 0x00 };
121499 -
121500
121501 - // Commented by Albert 20110727
121502 - // The input data is the MAC address which the application wants to know its WPS config method.
121503 - // After knowing its WPS config method, the application can decide the config method for provisioning discovery.
121504 - // Format: iwpriv wlanx p2p_get_wpsCM 00:E0:4C:00:00:05
121505 +
121506 + DBG_871X( "[%s] Op_ch = %02x\n", __FUNCTION__, pwdinfo->operating_channel);
121507 +
121508 + sprintf( extra, "\n\nOp_ch=%.2d\n", pwdinfo->operating_channel );
121509 + wrqu->data.length = strlen( extra );
121510 + return ret;
121511 +
121512 +}
121513
121514 - DBG_8192C( "[%s] data = %s\n", __FUNCTION__, ( char* ) extra );
121515 - //_rtw_memcpy( peerMACStr , extra , 17 );
121516 +inline static void macstr2num(u8 *dst, u8 *src)
121517 +{
121518 + int jj, kk;
121519 + for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3)
121520 + {
121521 + dst[jj] = key_2char2num(src[kk], src[kk + 1]);
121522 + }
121523 +}
121524 +
121525 +static int rtw_p2p_get_wps_configmethod(struct net_device *dev,
121526 + struct iw_request_info *info,
121527 + union iwreq_data *wrqu, char *extra, char *subcmd)
121528 +{
121529 +
121530 + int ret = 0;
121531 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121532 + u8 peerMAC[ETH_ALEN] = { 0x00 };
121533 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
121534 + _irqL irqL;
121535 + _list * plist,*phead;
121536 + _queue *queue = &(pmlmepriv->scanned_queue);
121537 + struct wlan_network *pnetwork = NULL;
121538 + u8 blnMatch = 0;
121539 + u16 attr_content = 0;
121540 + uint attr_contentlen = 0;
121541 + u8 attr_content_str[P2P_PRIVATE_IOCTL_SET_LEN] = { 0x00 };
121542 +
121543 + // Commented by Albert 20110727
121544 + // The input data is the MAC address which the application wants to know its WPS config method.
121545 + // After knowing its WPS config method, the application can decide the config method for provisioning discovery.
121546 + // Format: iwpriv wlanx p2p_get_wpsCM 00:E0:4C:00:00:05
121547 +
121548 + DBG_871X("[%s] data = %s\n", __FUNCTION__, subcmd);
121549 +
121550 + macstr2num(peerMAC, subcmd);
121551 +
121552 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
121553 +
121554 + phead = get_list_head(queue);
121555 + plist = get_next(phead);
121556 +
121557 + while (1)
121558 + {
121559 + if (rtw_end_of_queue_search(phead, plist) == _TRUE) break;
121560 +
121561 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
121562 + if (_rtw_memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN))
121563 + {
121564 + u8 *wpsie;
121565 + uint wpsie_len = 0;
121566 +
121567 + // The mac address is matched.
121568 +
121569 + if ((wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len)))
121570 + {
121571 + rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_CONF_METHOD, (u8 *)&attr_content, &attr_contentlen);
121572 + if (attr_contentlen)
121573 + {
121574 + attr_content = be16_to_cpu(attr_content);
121575 + sprintf(attr_content_str, "\n\nM=%.4d", attr_content);
121576 + blnMatch = 1;
121577 + }
121578 + }
121579 +
121580 + break;
121581 + }
121582 +
121583 + plist = get_next(plist);
121584 +
121585 + }
121586 +
121587 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
121588 +
121589 + if (!blnMatch)
121590 + {
121591 + sprintf(attr_content_str, "\n\nM=0000");
121592 + }
121593 +
121594 + wrqu->data.length = strlen(attr_content_str);
121595 + _rtw_memcpy(extra, attr_content_str, wrqu->data.length);
121596 +
121597 + return ret;
121598 +
121599 +}
121600 +
121601 +#ifdef CONFIG_WFD
121602 +static int rtw_p2p_get_peer_wfd_port(struct net_device *dev,
121603 + struct iw_request_info *info,
121604 + union iwreq_data *wrqu, char *extra)
121605 +{
121606 +
121607 + int ret = 0;
121608 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121609 + struct iw_point *pdata = &wrqu->data;
121610 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121611 +
121612 + DBG_871X( "[%s] p2p_state = %d\n", __FUNCTION__, rtw_p2p_state(pwdinfo) );
121613 +
121614 + sprintf( extra, "\n\nPort=%d\n", pwdinfo->wfd_info->peer_rtsp_ctrlport );
121615 + DBG_871X( "[%s] remote port = %d\n", __FUNCTION__, pwdinfo->wfd_info->peer_rtsp_ctrlport );
121616 +
121617 + wrqu->data.length = strlen( extra );
121618 + return ret;
121619 +
121620 +}
121621 +
121622 +static int rtw_p2p_get_peer_wfd_preferred_connection(struct net_device *dev,
121623 + struct iw_request_info *info,
121624 + union iwreq_data *wrqu, char *extra)
121625 +{
121626 +
121627 + int ret = 0;
121628 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121629 + struct iw_point *pdata = &wrqu->data;
121630 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121631 +
121632 + sprintf( extra, "\n\nwfd_pc=%d\n", pwdinfo->wfd_info->wfd_pc );
121633 + DBG_871X( "[%s] wfd_pc = %d\n", __FUNCTION__, pwdinfo->wfd_info->wfd_pc );
121634 +
121635 + wrqu->data.length = strlen( extra );
121636 + pwdinfo->wfd_info->wfd_pc = _FALSE; // Reset the WFD preferred connection to P2P
121637 + return ret;
121638 +
121639 +}
121640 +
121641 +static int rtw_p2p_get_peer_wfd_session_available(struct net_device *dev,
121642 + struct iw_request_info *info,
121643 + union iwreq_data *wrqu, char *extra)
121644 +{
121645 +
121646 + int ret = 0;
121647 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121648 + struct iw_point *pdata = &wrqu->data;
121649 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
121650 +
121651 + sprintf( extra, "\n\nwfd_sa=%d\n", pwdinfo->wfd_info->peer_session_avail );
121652 + DBG_871X( "[%s] wfd_sa = %d\n", __FUNCTION__, pwdinfo->wfd_info->peer_session_avail );
121653 +
121654 + wrqu->data.length = strlen( extra );
121655 + pwdinfo->wfd_info->peer_session_avail = _TRUE; // Reset the WFD session available
121656 + return ret;
121657 +
121658 +}
121659 +
121660 +#endif // CONFIG_WFD
121661 +
121662 +static int rtw_p2p_get_go_device_address(struct net_device *dev,
121663 + struct iw_request_info *info,
121664 + union iwreq_data *wrqu, char *extra, char *subcmd)
121665 +{
121666 +
121667 + int ret = 0;
121668 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121669 + u8 peerMAC[ETH_ALEN] = { 0x00 };
121670 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
121671 + _irqL irqL;
121672 + _list *plist, *phead;
121673 + _queue *queue = &(pmlmepriv->scanned_queue);
121674 + struct wlan_network *pnetwork = NULL;
121675 + u8 blnMatch = 0;
121676 + u8 *p2pie;
121677 + uint p2pielen = 0, attr_contentlen = 0;
121678 + u8 attr_content[100] = { 0x00 };
121679 + u8 go_devadd_str[P2P_PRIVATE_IOCTL_SET_LEN] = { 0x00 };
121680 +
121681 + // Commented by Albert 20121209
121682 + // The input data is the GO's interface address which the application wants to know its device address.
121683 + // Format: iwpriv wlanx p2p_get2 go_devadd=00:E0:4C:00:00:05
121684 +
121685 + DBG_871X("[%s] data = %s\n", __FUNCTION__, subcmd);
121686 +
121687 + macstr2num(peerMAC, subcmd);
121688 +
121689 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
121690 +
121691 + phead = get_list_head(queue);
121692 + plist = get_next(phead);
121693 +
121694 + while (1)
121695 + {
121696 + if (rtw_end_of_queue_search(phead, plist) == _TRUE) break;
121697 +
121698 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
121699 + if (_rtw_memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN))
121700 + {
121701 + // Commented by Albert 2011/05/18
121702 + // Match the device address located in the P2P IE
121703 + // This is for the case that the P2P device address is not the same as the P2P interface address.
121704 +
121705 + if ((p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)))
121706 + {
121707 + while (p2pie)
121708 + {
121709 + // The P2P Device ID attribute is included in the Beacon frame.
121710 + // The P2P Device Info attribute is included in the probe response frame.
121711 +
121712 + _rtw_memset(attr_content, 0x00, 100);
121713 + if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen))
121714 + {
121715 + // Handle the P2P Device ID attribute of Beacon first
121716 + blnMatch = 1;
121717 + break;
121718 +
121719 + } else if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen))
121720 + {
121721 + // Handle the P2P Device Info attribute of probe response
121722 + blnMatch = 1;
121723 + break;
121724 + }
121725 +
121726 + //Get the next P2P IE
121727 + p2pie = rtw_get_p2p_ie(p2pie + p2pielen, pnetwork->network.IELength - 12 - (p2pie - &pnetwork->network.IEs[12] + p2pielen), NULL, &p2pielen);
121728 + }
121729 + }
121730 + }
121731 +
121732 + plist = get_next(plist);
121733 +
121734 + }
121735 +
121736 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
121737 +
121738 + if (!blnMatch)
121739 + {
121740 + sprintf(go_devadd_str, "\n\ndev_add=NULL");
121741 + } else
121742 + {
121743 + sprintf(go_devadd_str, "\n\ndev_add=%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
121744 + attr_content[0], attr_content[1], attr_content[2], attr_content[3], attr_content[4], attr_content[5]);
121745 + }
121746 +
121747 + wrqu->data.length = strlen(go_devadd_str);
121748 + _rtw_memcpy(extra, go_devadd_str, wrqu->data.length);
121749 +
121750 + return ret;
121751 +
121752 +}
121753 +
121754 +static int rtw_p2p_get_device_type(struct net_device *dev,
121755 + struct iw_request_info *info,
121756 + union iwreq_data *wrqu, char *extra, char *subcmd)
121757 +{
121758 +
121759 + int ret = 0;
121760 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121761 + u8 peerMAC[ETH_ALEN] = { 0x00 };
121762 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
121763 + _irqL irqL;
121764 + _list *plist, *phead;
121765 + _queue *queue = &(pmlmepriv->scanned_queue);
121766 + struct wlan_network *pnetwork = NULL;
121767 + u8 blnMatch = 0;
121768 + u8 dev_type[8] = { 0x00 };
121769 + uint dev_type_len = 0;
121770 + 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
121771 +
121772 + // Commented by Albert 20121209
121773 + // The input data is the MAC address which the application wants to know its device type.
121774 + // Such user interface could know the device type.
121775 + // Format: iwpriv wlanx p2p_get2 dev_type=00:E0:4C:00:00:05
121776 +
121777 + DBG_871X("[%s] data = %s\n", __FUNCTION__, subcmd);
121778 +
121779 + macstr2num(peerMAC, subcmd);
121780 +
121781 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
121782 +
121783 + phead = get_list_head(queue);
121784 + plist = get_next(phead);
121785 +
121786 + while (1)
121787 + {
121788 + if (rtw_end_of_queue_search(phead, plist) == _TRUE) break;
121789 +
121790 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
121791 + if (_rtw_memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN))
121792 + {
121793 + u8 *wpsie;
121794 + uint wpsie_len = 0;
121795 +
121796 + // The mac address is matched.
121797 +
121798 + if ((wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len)))
121799 + {
121800 + rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_PRIMARY_DEV_TYPE, dev_type, &dev_type_len);
121801 + if (dev_type_len)
121802 + {
121803 + u16 type = 0;
121804 +
121805 + _rtw_memcpy(&type, dev_type, 2);
121806 + type = be16_to_cpu(type);
121807 + sprintf(dev_type_str, "\n\nN=%.2d", type);
121808 + blnMatch = 1;
121809 + }
121810 + }
121811 + break;
121812 + }
121813 +
121814 + plist = get_next(plist);
121815 +
121816 + }
121817 +
121818 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
121819 +
121820 + if (!blnMatch)
121821 + {
121822 + sprintf(dev_type_str, "\n\nN=00");
121823 + }
121824 +
121825 + wrqu->data.length = strlen(dev_type_str);
121826 + _rtw_memcpy(extra, dev_type_str, wrqu->data.length);
121827 +
121828 + return ret;
121829 +
121830 +}
121831 +
121832 +static int rtw_p2p_get_device_name(struct net_device *dev,
121833 + struct iw_request_info *info,
121834 + union iwreq_data *wrqu, char *extra, char *subcmd)
121835 +{
121836 +
121837 + int ret = 0;
121838 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121839 + u8 peerMAC[ETH_ALEN] = { 0x00 };
121840 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
121841 + _irqL irqL;
121842 + _list *plist, *phead;
121843 + _queue *queue = &(pmlmepriv->scanned_queue);
121844 + struct wlan_network *pnetwork = NULL;
121845 + u8 blnMatch = 0;
121846 + u8 dev_name[WPS_MAX_DEVICE_NAME_LEN] = { 0x00 };
121847 + uint dev_len = 0;
121848 + u8 dev_name_str[P2P_PRIVATE_IOCTL_SET_LEN] = { 0x00 };
121849 +
121850 + // Commented by Albert 20121225
121851 + // The input data is the MAC address which the application wants to know its device name.
121852 + // Such user interface could show peer device's device name instead of ssid.
121853 + // Format: iwpriv wlanx p2p_get2 devN=00:E0:4C:00:00:05
121854 +
121855 + DBG_871X("[%s] data = %s\n", __FUNCTION__, subcmd);
121856 +
121857 + macstr2num(peerMAC, subcmd);
121858 +
121859 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
121860 +
121861 + phead = get_list_head(queue);
121862 + plist = get_next(phead);
121863 +
121864 + while (1)
121865 + {
121866 + if (rtw_end_of_queue_search(phead, plist) == _TRUE) break;
121867 +
121868 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
121869 + if (_rtw_memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN))
121870 + {
121871 + u8 *wpsie;
121872 + uint wpsie_len = 0;
121873 +
121874 + // The mac address is matched.
121875 +
121876 + if ((wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len)))
121877 + {
121878 + rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_DEVICE_NAME, dev_name, &dev_len);
121879 + if (dev_len)
121880 + {
121881 + sprintf(dev_name_str, "\n\nN=%s", dev_name);
121882 + blnMatch = 1;
121883 + }
121884 + }
121885 + break;
121886 + }
121887 +
121888 + plist = get_next(plist);
121889 +
121890 + }
121891 +
121892 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
121893 +
121894 + if (!blnMatch)
121895 + {
121896 + sprintf(dev_name_str, "\n\nN=0000");
121897 + }
121898 +
121899 + wrqu->data.length = strlen(dev_name_str);
121900 + _rtw_memcpy(extra, dev_name_str, wrqu->data.length);
121901 +
121902 + return ret;
121903 +
121904 +}
121905 +
121906 +static int rtw_p2p_get_invitation_procedure(struct net_device *dev,
121907 + struct iw_request_info *info,
121908 + union iwreq_data *wrqu, char *extra, char *subcmd)
121909 +{
121910 +
121911 + int ret = 0;
121912 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
121913 + u8 peerMAC[ETH_ALEN] = { 0x00 };
121914 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
121915 + _irqL irqL;
121916 + _list *plist, *phead;
121917 + _queue *queue = &(pmlmepriv->scanned_queue);
121918 + struct wlan_network *pnetwork = NULL;
121919 + u8 blnMatch = 0;
121920 + u8 *p2pie;
121921 + uint p2pielen = 0, attr_contentlen = 0;
121922 + u8 attr_content[2] = { 0x00 };
121923 + u8 inv_proc_str[P2P_PRIVATE_IOCTL_SET_LEN] = { 0x00 };
121924 +
121925 + // Commented by Ouden 20121226
121926 + // The application wants to know P2P initation procedure is support or not.
121927 + // Format: iwpriv wlanx p2p_get2 InvProc=00:E0:4C:00:00:05
121928 +
121929 + DBG_871X("[%s] data = %s\n", __FUNCTION__, subcmd);
121930 +
121931 + macstr2num(peerMAC, subcmd);
121932 +
121933 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
121934 +
121935 + phead = get_list_head(queue);
121936 + plist = get_next(phead);
121937 +
121938 + while (1)
121939 + {
121940 + if (rtw_end_of_queue_search(phead, plist) == _TRUE) break;
121941 +
121942 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
121943 + if (_rtw_memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN))
121944 + {
121945 + // Commented by Albert 20121226
121946 + // Match the device address located in the P2P IE
121947 + // This is for the case that the P2P device address is not the same as the P2P interface address.
121948 +
121949 + if ((p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)))
121950 + {
121951 + while (p2pie)
121952 + {
121953 + //_rtw_memset( attr_content, 0x00, 2);
121954 + if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_CAPABILITY, attr_content, &attr_contentlen))
121955 + {
121956 + // Handle the P2P capability attribute
121957 + blnMatch = 1;
121958 + break;
121959 +
121960 + }
121961 +
121962 + //Get the next P2P IE
121963 + p2pie = rtw_get_p2p_ie(p2pie + p2pielen, pnetwork->network.IELength - 12 - (p2pie - &pnetwork->network.IEs[12] + p2pielen), NULL, &p2pielen);
121964 + }
121965 + }
121966 + }
121967 +
121968 + plist = get_next(plist);
121969 +
121970 + }
121971 +
121972 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
121973 +
121974 + if (!blnMatch)
121975 + {
121976 + sprintf(inv_proc_str, "\nIP=-1");
121977 + } else
121978 + {
121979 + if (attr_content[0] && 0x20)
121980 + {
121981 + sprintf(inv_proc_str, "\nIP=1");
121982 + } else
121983 + {
121984 + sprintf(inv_proc_str, "\nIP=0");
121985 + }
121986 + }
121987 +
121988 + wrqu->data.length = strlen(inv_proc_str);
121989 + _rtw_memcpy(extra, inv_proc_str, wrqu->data.length);
121990 +
121991 + return ret;
121992 +
121993 +}
121994 +
121995 +static int rtw_p2p_connect(struct net_device *dev,
121996 + struct iw_request_info *info,
121997 + union iwreq_data *wrqu, char *extra)
121998 +{
121999 +
122000 + int ret = 0;
122001 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122002 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122003 + u8 peerMAC[ ETH_ALEN ] = { 0x00 };
122004 + int jj,kk;
122005 + u8 peerMACStr[ ETH_ALEN * 2 ] = { 0x00 };
122006 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122007 + _irqL irqL;
122008 + _list *plist, *phead;
122009 + _queue *queue = &(pmlmepriv->scanned_queue);
122010 + struct wlan_network *pnetwork = NULL;
122011 + uint uintPeerChannel = 0;
122012 +#ifdef CONFIG_CONCURRENT_MODE
122013 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
122014 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
122015 +#endif // CONFIG_CONCURRENT_MODE
122016 +
122017 +
122018 + // Commented by Albert 20110304
122019 + // The input data contains two informations.
122020 + // 1. First information is the MAC address which wants to formate with
122021 + // 2. Second information is the WPS PINCode or "pbc" string for push button method
122022 + // Format: 00:E0:4C:00:00:05
122023 + // Format: 00:E0:4C:00:00:05
122024
122025 - if ( copy_from_user(peerMACStr, wrqu->data.pointer + 6 , 17) ) {
122026 - return -EFAULT;
122027 - }
122028 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
122029
122030 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
122031 + {
122032 + DBG_871X( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
122033 + return ret;
122034 + }
122035 +
122036 + if ( pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO )
122037 + {
122038 + return -1;
122039 + }
122040 +
122041 for( jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3 )
122042 {
122043 - peerMAC[ jj ] = key_2char2num( peerMACStr[kk], peerMACStr[kk+ 1] );
122044 + peerMAC[ jj ] = key_2char2num( extra[kk], extra[kk+ 1] );
122045 }
122046
122047 _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122048 @@ -4286,67 +4987,441 @@ static int rtw_p2p_get_wps_configmethod(struct net_device *dev,
122049 pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
122050 if ( _rtw_memcmp( pnetwork->network.MacAddress, peerMAC, ETH_ALEN ) )
122051 {
122052 - u8 *wpsie;
122053 - uint wpsie_len = 0;
122054 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
122055 + break;
122056 + }
122057 +
122058 + plist = get_next(plist);
122059 +
122060 + }
122061 +
122062 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122063 +
122064 + if ( uintPeerChannel )
122065 + {
122066 +#ifdef CONFIG_CONCURRENT_MODE
122067 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
122068 + {
122069 + _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer );
122070 + }
122071 +#endif // CONFIG_CONCURRENT_MODE
122072 +
122073 + _rtw_memset( &pwdinfo->nego_req_info, 0x00, sizeof( struct tx_nego_req_info ) );
122074 + _rtw_memset( &pwdinfo->groupid_info, 0x00, sizeof( struct group_id_info ) );
122075 +
122076 + pwdinfo->nego_req_info.peer_channel_num[ 0 ] = uintPeerChannel;
122077 + _rtw_memcpy( pwdinfo->nego_req_info.peerDevAddr, pnetwork->network.MacAddress, ETH_ALEN );
122078 + pwdinfo->nego_req_info.benable = _TRUE;
122079 +
122080 + _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
122081 + if ( rtw_p2p_state(pwdinfo) != P2P_STATE_GONEGO_OK )
122082 + {
122083 + // Restore to the listen state if the current p2p state is not nego OK
122084 + rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN );
122085 + }
122086 +
122087 + rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
122088 + rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING);
122089 +
122090 +#ifdef CONFIG_CONCURRENT_MODE
122091 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
122092 + {
122093 + // Have to enter the power saving with the AP
122094 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
122095
122096 - // The mac address is matched.
122097 + issue_nulldata(pbuddy_adapter, NULL, 1, 3, 500);
122098 + }
122099 +#endif // CONFIG_CONCURRENT_MODE
122100 +
122101 + DBG_871X( "[%s] Start PreTx Procedure!\n", __FUNCTION__ );
122102 + _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
122103 +
122104 +#ifdef CONFIG_CONCURRENT_MODE
122105 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
122106 + {
122107 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_CONCURRENT_GO_NEGO_TIMEOUT );
122108 + }
122109 + else
122110 + {
122111 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_GO_NEGO_TIMEOUT );
122112 + }
122113 +#else
122114 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_GO_NEGO_TIMEOUT );
122115 +#endif // CONFIG_CONCURRENT_MODE
122116 +
122117 + }
122118 + else
122119 + {
122120 + DBG_871X( "[%s] Not Found in Scanning Queue~\n", __FUNCTION__ );
122121 + ret = -1;
122122 + }
122123 +exit:
122124 + return ret;
122125 +}
122126 +
122127 +static int rtw_p2p_invite_req(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 + int jj,kk;
122137 + u8 peerMACStr[ ETH_ALEN * 2 ] = { 0x00 };
122138 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122139 + _list *plist, *phead;
122140 + _queue *queue = &(pmlmepriv->scanned_queue);
122141 + struct wlan_network *pnetwork = NULL;
122142 + uint uintPeerChannel = 0;
122143 + u8 attr_content[50] = { 0x00 }, _status = 0;
122144 + u8 *p2pie;
122145 + uint p2pielen = 0, attr_contentlen = 0;
122146 + _irqL irqL;
122147 + struct tx_invite_req_info* pinvite_req_info = &pwdinfo->invitereq_info;
122148 +#ifdef CONFIG_CONCURRENT_MODE
122149 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
122150 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
122151 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
122152 +#endif // CONFIG_CONCURRENT_MODE
122153 +
122154 +#ifdef CONFIG_WFD
122155 + struct wifi_display_info* pwfd_info = pwdinfo->wfd_info;
122156 +#endif // CONFIG_WFD
122157 +
122158 + // Commented by Albert 20120321
122159 + // The input data contains two informations.
122160 + // 1. First information is the P2P device address which you want to send to.
122161 + // 2. Second information is the group id which combines with GO's mac address, space and GO's ssid.
122162 + // Command line sample: iwpriv wlan0 p2p_set invite="00:11:22:33:44:55 00:E0:4C:00:00:05 DIRECT-xy"
122163 + // Format: 00:11:22:33:44:55 00:E0:4C:00:00:05 DIRECT-xy
122164 +
122165 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
122166 +
122167 + if ( wrqu->data.length <= 37 )
122168 + {
122169 + DBG_871X( "[%s] Wrong format!\n", __FUNCTION__ );
122170 + return ret;
122171 + }
122172 +
122173 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
122174 + {
122175 + DBG_871X( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
122176 + return ret;
122177 + }
122178 + else
122179 + {
122180 + // Reset the content of struct tx_invite_req_info
122181 + pinvite_req_info->benable = _FALSE;
122182 + _rtw_memset( pinvite_req_info->go_bssid, 0x00, ETH_ALEN );
122183 + _rtw_memset( pinvite_req_info->go_ssid, 0x00, WLAN_SSID_MAXLEN );
122184 + pinvite_req_info->ssidlen = 0x00;
122185 + pinvite_req_info->operating_ch = pwdinfo->operating_channel;
122186 + _rtw_memset( pinvite_req_info->peer_macaddr, 0x00, ETH_ALEN );
122187 + pinvite_req_info->token = 3;
122188 + }
122189 +
122190 + for( jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3 )
122191 + {
122192 + pinvite_req_info->peer_macaddr[ jj ] = key_2char2num( extra[kk], extra[kk+ 1] );
122193 + }
122194 +
122195 + _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122196 +
122197 + phead = get_list_head(queue);
122198 + plist = get_next(phead);
122199 +
122200 + while(1)
122201 + {
122202 + if (rtw_end_of_queue_search(phead,plist)== _TRUE)
122203 + break;
122204 +
122205 + pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
122206 +
122207 + // Commented by Albert 2011/05/18
122208 + // Match the device address located in the P2P IE
122209 + // This is for the case that the P2P device address is not the same as the P2P interface address.
122210 +
122211 + if ( (p2pie=rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)) )
122212 + {
122213 + // The P2P Device ID attribute is included in the Beacon frame.
122214 + // The P2P Device Info attribute is included in the probe response frame.
122215
122216 - if ( (wpsie=rtw_get_wps_ie( &pnetwork->network.IEs[ 12 ], pnetwork->network.IELength - 12, NULL, &wpsie_len )) )
122217 + if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen) )
122218 {
122219 - rtw_get_wps_attr_content( wpsie, wpsie_len, WPS_ATTR_CONF_METHOD, ( u8* ) &attr_content, &attr_contentlen);
122220 - if ( attr_contentlen )
122221 + // Handle the P2P Device ID attribute of Beacon first
122222 + if ( _rtw_memcmp( attr_content, pinvite_req_info->peer_macaddr, ETH_ALEN ) )
122223 {
122224 - attr_content = be16_to_cpu( attr_content );
122225 - sprintf( attr_content_str, "\n\nM=%.4d", attr_content );
122226 - blnMatch = 1;
122227 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
122228 + break;
122229 + }
122230 + }
122231 + else if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen) )
122232 + {
122233 + // Handle the P2P Device Info attribute of probe response
122234 + if ( _rtw_memcmp( attr_content, pinvite_req_info->peer_macaddr, ETH_ALEN ) )
122235 + {
122236 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
122237 + break;
122238 + }
122239 + }
122240 +
122241 + }
122242 +
122243 + plist = get_next(plist);
122244 +
122245 + }
122246 +
122247 + _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122248 +
122249 +#ifdef CONFIG_WFD
122250 + if ( uintPeerChannel )
122251 + {
122252 + u8 wfd_ie[ 128 ] = { 0x00 };
122253 + uint wfd_ielen = 0;
122254 +
122255 + if ( rtw_get_wfd_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, wfd_ie, &wfd_ielen ) )
122256 + {
122257 + u8 wfd_devinfo[ 6 ] = { 0x00 };
122258 + uint wfd_devlen = 6;
122259 +
122260 + DBG_871X( "[%s] Found WFD IE!\n", __FUNCTION__ );
122261 + if ( rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, wfd_devinfo, &wfd_devlen ) )
122262 + {
122263 + u16 wfd_devinfo_field = 0;
122264 +
122265 + // Commented by Albert 20120319
122266 + // The first two bytes are the WFD device information field of WFD device information subelement.
122267 + // In big endian format.
122268 + wfd_devinfo_field = RTW_GET_BE16(wfd_devinfo);
122269 + if ( wfd_devinfo_field & WFD_DEVINFO_SESSION_AVAIL )
122270 + {
122271 + pwfd_info->peer_session_avail = _TRUE;
122272 + }
122273 + else
122274 + {
122275 + pwfd_info->peer_session_avail = _FALSE;
122276 }
122277 }
122278 + }
122279 +
122280 + if ( _FALSE == pwfd_info->peer_session_avail )
122281 + {
122282 + DBG_871X( "[%s] WFD Session not avaiable!\n", __FUNCTION__ );
122283 + goto exit;
122284 + }
122285 + }
122286 +#endif // CONFIG_WFD
122287 +
122288 + if ( uintPeerChannel )
122289 + {
122290 +#ifdef CONFIG_CONCURRENT_MODE
122291 + if ( check_fwstate( pbuddy_mlmepriv, _FW_LINKED ) )
122292 + {
122293 + _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer );
122294 + }
122295 +#endif // CONFIG_CONCURRENT_MODE
122296 +
122297 + // Store the GO's bssid
122298 + for( jj = 0, kk = 18; jj < ETH_ALEN; jj++, kk += 3 )
122299 + {
122300 + pinvite_req_info->go_bssid[ jj ] = key_2char2num( extra[kk], extra[kk+ 1] );
122301 + }
122302 +
122303 + // Store the GO's ssid
122304 + pinvite_req_info->ssidlen = wrqu->data.length - 36;
122305 + _rtw_memcpy( pinvite_req_info->go_ssid, &extra[ 36 ], (u32) pinvite_req_info->ssidlen );
122306 + pinvite_req_info->benable = _TRUE;
122307 + pinvite_req_info->peer_ch = uintPeerChannel;
122308 +
122309 + rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
122310 + rtw_p2p_set_state(pwdinfo, P2P_STATE_TX_INVITE_REQ);
122311 +
122312 +#ifdef CONFIG_CONCURRENT_MODE
122313 + if ( check_fwstate( pbuddy_mlmepriv, _FW_LINKED ) )
122314 + {
122315 + // Have to enter the power saving with the AP
122316 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
122317
122318 - break;
122319 - }
122320 + issue_nulldata(pbuddy_adapter, NULL, 1, 3, 500);
122321 + }
122322 + else
122323 + {
122324 + set_channel_bwmode(padapter, uintPeerChannel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
122325 + }
122326 +#else
122327 + set_channel_bwmode(padapter, uintPeerChannel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
122328 +#endif
122329 +
122330 + _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
122331 +
122332 +#ifdef CONFIG_CONCURRENT_MODE
122333 + if ( check_fwstate( pbuddy_mlmepriv, _FW_LINKED ) )
122334 + {
122335 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_CONCURRENT_INVITE_TIMEOUT );
122336 + }
122337 + else
122338 + {
122339 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_INVITE_TIMEOUT );
122340 + }
122341 +#else
122342 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_INVITE_TIMEOUT );
122343 +#endif // CONFIG_CONCURRENT_MODE
122344 +
122345 +
122346 + }
122347 + else
122348 + {
122349 + DBG_871X( "[%s] NOT Found in the Scanning Queue!\n", __FUNCTION__ );
122350 + }
122351 +exit:
122352 +
122353 + return ret;
122354 +
122355 +}
122356 +
122357 +static int rtw_p2p_set_persistent(struct net_device *dev,
122358 + struct iw_request_info *info,
122359 + union iwreq_data *wrqu, char *extra)
122360 +{
122361 +
122362 + int ret = 0;
122363 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122364 + struct iw_point *pdata = &wrqu->data;
122365 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122366 + int jj,kk;
122367 + u8 peerMACStr[ ETH_ALEN * 2 ] = { 0x00 };
122368 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122369 + _list *plist, *phead;
122370 + _queue *queue = &(pmlmepriv->scanned_queue);
122371 + struct wlan_network *pnetwork = NULL;
122372 + uint uintPeerChannel = 0;
122373 + u8 attr_content[50] = { 0x00 }, _status = 0;
122374 + u8 *p2pie;
122375 + uint p2pielen = 0, attr_contentlen = 0;
122376 + _irqL irqL;
122377 + struct tx_invite_req_info* pinvite_req_info = &pwdinfo->invitereq_info;
122378 +#ifdef CONFIG_CONCURRENT_MODE
122379 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
122380 + struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
122381 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
122382 +#endif // CONFIG_CONCURRENT_MODE
122383 +
122384 +#ifdef CONFIG_WFD
122385 + struct wifi_display_info* pwfd_info = pwdinfo->wfd_info;
122386 +#endif // CONFIG_WFD
122387 +
122388 + // Commented by Albert 20120328
122389 + // The input data is 0 or 1
122390 + // 0: disable persistent group functionality
122391 + // 1: enable persistent group founctionality
122392 +
122393 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
122394 +
122395 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
122396 + {
122397 + DBG_871X( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
122398 + return ret;
122399 + }
122400 + else
122401 + {
122402 + if ( extra[ 0 ] == '0' ) // Disable the persistent group function.
122403 + {
122404 + pwdinfo->persistent_supported = _FALSE;
122405 + }
122406 + else if ( extra[ 0 ] == '1' ) // Enable the persistent group function.
122407 + {
122408 + pwdinfo->persistent_supported = _TRUE;
122409 + }
122410 + else
122411 + {
122412 + pwdinfo->persistent_supported = _FALSE;
122413 + }
122414 + }
122415 + printk( "[%s] persistent_supported = %d\n", __FUNCTION__, pwdinfo->persistent_supported );
122416 +
122417 +exit:
122418 +
122419 + return ret;
122420 +
122421 +}
122422 +
122423 +static int hexstr2bin(const char *hex, u8 *buf, size_t len)
122424 +{
122425 + size_t i;
122426 + int a;
122427 + const char *ipos = hex;
122428 + u8 *opos = buf;
122429 +
122430 + for (i = 0; i < len; i++) {
122431 + a = hex2byte_i(ipos);
122432 + if (a < 0)
122433 + return -1;
122434 + *opos++ = a;
122435 + ipos += 2;
122436 + }
122437 + return 0;
122438 +}
122439 +
122440 +static int uuid_str2bin(const char *str, u8 *bin)
122441 +{
122442 + const char *pos;
122443 + u8 *opos;
122444
122445 - plist = get_next(plist);
122446 -
122447 - }
122448 + pos = str;
122449 + opos = bin;
122450
122451 - _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122452 + if (hexstr2bin(pos, opos, 4))
122453 + return -1;
122454 + pos += 8;
122455 + opos += 4;
122456
122457 - if ( !blnMatch )
122458 - {
122459 - sprintf( attr_content_str, "\n\nM=0000" );
122460 - }
122461 + if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
122462 + return -1;
122463 + pos += 4;
122464 + opos += 2;
122465
122466 - if ( copy_to_user(wrqu->data.pointer, attr_content_str, 6 + 17)) {
122467 - return -EFAULT;
122468 - }
122469 -
122470 - return ret;
122471 -
122472 + if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
122473 + return -1;
122474 + pos += 4;
122475 + opos += 2;
122476 +
122477 + if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
122478 + return -1;
122479 + pos += 4;
122480 + opos += 2;
122481 +
122482 + if (*pos++ != '-' || hexstr2bin(pos, opos, 6))
122483 + return -1;
122484 +
122485 + return 0;
122486 }
122487
122488 -#ifdef CONFIG_WFD
122489 -static int rtw_p2p_get_peer_WFD_port(struct net_device *dev,
122490 - struct iw_request_info *info,
122491 - union iwreq_data *wrqu, char *extra)
122492 +static int rtw_p2p_set_wps_uuid(struct net_device *dev,
122493 + struct iw_request_info *info,
122494 + union iwreq_data *wrqu, char *extra)
122495 {
122496 -
122497 - int ret = 0;
122498 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122499 - struct iw_point *pdata = &wrqu->data;
122500 - struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122501
122502 - DBG_871X( "[%s] p2p_state = %d\n", __FUNCTION__, rtw_p2p_state(pwdinfo) );
122503 + int ret = 0;
122504 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122505 + struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
122506 +
122507 + DBG_871X("[%s] data = %s\n", __FUNCTION__, extra);
122508 +
122509 + if ((36 == strlen(extra)) && (uuid_str2bin(extra, pwdinfo->uuid) == 0))
122510 + {
122511 + pwdinfo->external_uuid = 1;
122512 + } else {
122513 + pwdinfo->external_uuid = 0;
122514 + ret = -EINVAL;
122515 + }
122516
122517 - sprintf( extra, "\n\nPort=%d\n", pwdinfo->wfd_info.peer_rtsp_ctrlport );
122518 - DBG_8192C( "[%s] remote port = %d\n", __FUNCTION__, pwdinfo->wfd_info.peer_rtsp_ctrlport );
122519 -
122520 - wrqu->data.length = strlen( extra );
122521 return ret;
122522 -
122523 -}
122524 -#endif // CONFIG_WFD
122525
122526 -static int rtw_p2p_get_device_name(struct net_device *dev,
122527 +}
122528 +#ifdef CONFIG_WFD
122529 +static int rtw_p2p_set_pc(struct net_device *dev,
122530 struct iw_request_info *info,
122531 union iwreq_data *wrqu, char *extra)
122532 {
122533 @@ -4357,32 +5432,37 @@ static int rtw_p2p_get_device_name(struct net_device *dev,
122534 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122535 u8 peerMAC[ ETH_ALEN ] = { 0x00 };
122536 int jj,kk;
122537 - u8 peerMACStr[ 17 ] = { 0x00 };
122538 + u8 peerMACStr[ ETH_ALEN * 2 ] = { 0x00 };
122539 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122540 - _irqL irqL;
122541 _list *plist, *phead;
122542 _queue *queue = &(pmlmepriv->scanned_queue);
122543 struct wlan_network *pnetwork = NULL;
122544 - u8 blnMatch = 0;
122545 - u8 dev_name[ WPS_MAX_DEVICE_NAME_LEN ] = { 0x00 };
122546 - uint dev_len = 0;
122547 - 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
122548 -
122549 - // Commented by Kurt 20110727
122550 - // The input data is the MAC address which the application wants to know its device name.
122551 - // Such user interface could show peer device's device name instead of ssid.
122552 - // Format: iwpriv wlanx p2p_get_wpsCM 00:E0:4C:00:00:05
122553 -
122554 - DBG_8192C( "[%s] data = %s\n", __FUNCTION__, ( char* ) extra );
122555 - //_rtw_memcpy( peerMACStr , extra , 17 );
122556 + u8 attr_content[50] = { 0x00 }, _status = 0;
122557 + u8 *p2pie;
122558 + uint p2pielen = 0, attr_contentlen = 0;
122559 + _irqL irqL;
122560 + uint uintPeerChannel = 0;
122561 +#ifdef CONFIG_CONCURRENT_MODE
122562 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
122563 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
122564 +#endif // CONFIG_CONCURRENT_MODE
122565 + struct wifi_display_info* pwfd_info = pwdinfo->wfd_info;
122566 +
122567 + // Commented by Albert 20120512
122568 + // 1. Input information is the MAC address which wants to know the Preferred Connection bit (PC bit)
122569 + // Format: 00:E0:4C:00:00:05
122570
122571 - if ( copy_from_user(peerMACStr, wrqu->data.pointer + 5 , 17) ) {
122572 - return -EFAULT;
122573 - }
122574 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
122575
122576 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
122577 + {
122578 + DBG_871X( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
122579 + return ret;
122580 + }
122581 +
122582 for( jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3 )
122583 {
122584 - peerMAC[ jj ] = key_2char2num( peerMACStr[kk], peerMACStr[kk+ 1] );
122585 + peerMAC[ jj ] = key_2char2num( extra[kk], extra[kk+ 1] );
122586 }
122587
122588 _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122589 @@ -4396,146 +5476,260 @@ static int rtw_p2p_get_device_name(struct net_device *dev,
122590 break;
122591
122592 pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
122593 - if ( _rtw_memcmp( pnetwork->network.MacAddress, peerMAC, ETH_ALEN ) )
122594 - {
122595 - u8 *wpsie;
122596 - uint wpsie_len = 0;
122597
122598 -
122599 - // The mac address is matched.
122600 + // Commented by Albert 2011/05/18
122601 + // Match the device address located in the P2P IE
122602 + // This is for the case that the P2P device address is not the same as the P2P interface address.
122603
122604 - if ( (wpsie=rtw_get_wps_ie( &pnetwork->network.IEs[ 12 ], pnetwork->network.IELength - 12, NULL, &wpsie_len )) )
122605 + if ( (p2pie=rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)) )
122606 + {
122607 + // The P2P Device ID attribute is included in the Beacon frame.
122608 + // The P2P Device Info attribute is included in the probe response frame.
122609 + printk( "[%s] Got P2P IE\n", __FUNCTION__ );
122610 + if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen) )
122611 {
122612 - rtw_get_wps_attr_content( wpsie, wpsie_len, WPS_ATTR_DEVICE_NAME, dev_name, &dev_len);
122613 - if ( dev_len )
122614 + // Handle the P2P Device ID attribute of Beacon first
122615 + printk( "[%s] P2P_ATTR_DEVICE_ID \n", __FUNCTION__ );
122616 + if ( _rtw_memcmp( attr_content, peerMAC, ETH_ALEN ) )
122617 {
122618 - sprintf( dev_name_str, "\n\nN=%s", dev_name );
122619 - blnMatch = 1;
122620 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
122621 + break;
122622 }
122623 - }
122624 - break;
122625 - }
122626 + }
122627 + else if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen) )
122628 + {
122629 + // Handle the P2P Device Info attribute of probe response
122630 + printk( "[%s] P2P_ATTR_DEVICE_INFO \n", __FUNCTION__ );
122631 + if ( _rtw_memcmp( attr_content, peerMAC, ETH_ALEN ) )
122632 + {
122633 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
122634 + break;
122635 + }
122636 + }
122637 +
122638 + }
122639
122640 plist = get_next(plist);
122641
122642 - }
122643 + }
122644
122645 _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122646 + printk( "[%s] channel = %d\n", __FUNCTION__, uintPeerChannel );
122647
122648 - if ( !blnMatch )
122649 + if ( uintPeerChannel )
122650 {
122651 - sprintf( dev_name_str, "\n\nN=0000" );
122652 - }
122653 + u8 wfd_ie[ 128 ] = { 0x00 };
122654 + uint wfd_ielen = 0;
122655 +
122656 + if ( rtw_get_wfd_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, wfd_ie, &wfd_ielen ) )
122657 + {
122658 + u8 wfd_devinfo[ 6 ] = { 0x00 };
122659 + uint wfd_devlen = 6;
122660
122661 - if ( copy_to_user(wrqu->data.pointer, dev_name_str, 5+ (( dev_len > 17 )? dev_len : 17) )) {
122662 - return -EFAULT;
122663 + DBG_871X( "[%s] Found WFD IE!\n", __FUNCTION__ );
122664 + if ( rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, wfd_devinfo, &wfd_devlen ) )
122665 + {
122666 + u16 wfd_devinfo_field = 0;
122667 +
122668 + // Commented by Albert 20120319
122669 + // The first two bytes are the WFD device information field of WFD device information subelement.
122670 + // In big endian format.
122671 + wfd_devinfo_field = RTW_GET_BE16(wfd_devinfo);
122672 + if ( wfd_devinfo_field & WFD_DEVINFO_PC_TDLS )
122673 + {
122674 + pwfd_info->wfd_pc = _TRUE;
122675 + }
122676 + else
122677 + {
122678 + pwfd_info->wfd_pc = _FALSE;
122679 + }
122680 + }
122681 + }
122682 + }
122683 + else
122684 + {
122685 + DBG_871X( "[%s] NOT Found in the Scanning Queue!\n", __FUNCTION__ );
122686 }
122687 +
122688 +exit:
122689
122690 return ret;
122691
122692 }
122693
122694 -static int rtw_p2p_connect(struct net_device *dev,
122695 +static int rtw_p2p_set_wfd_device_type(struct net_device *dev,
122696 struct iw_request_info *info,
122697 union iwreq_data *wrqu, char *extra)
122698 {
122699
122700 int ret = 0;
122701 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122702 - struct iw_point *pdata = &wrqu->data;
122703 - struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122704 - u8 peerMAC[ ETH_ALEN ] = { 0x00 };
122705 - int jj,kk;
122706 - u8 peerMACStr[ ETH_ALEN * 2 ] = { 0x00 };
122707 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
122708 - _irqL irqL;
122709 - _list *plist, *phead;
122710 - _queue *queue = &(pmlmepriv->scanned_queue);
122711 - struct wlan_network *pnetwork = NULL;
122712 - uint uintPeerChannel = 0;
122713 -
122714 - // Commented by Albert 20110304
122715 - // The input data contains two informations.
122716 - // 1. First information is the MAC address which wants to formate with
122717 - // 2. Second information is the WPS PINCode or "pbc" string for push button method
122718 - // Format: 00:E0:4C:00:00:05
122719 - // Format: 00:E0:4C:00:00:05
122720 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122721 + struct iw_point *pdata = &wrqu->data;
122722 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122723 + struct wifi_display_info *pwfd_info = pwdinfo->wfd_info;
122724
122725 - DBG_8192C( "[%s] data = %s\n", __FUNCTION__, extra );
122726 + // Commented by Albert 20120328
122727 + // The input data is 0 or 1
122728 + // 0: specify to Miracast source device
122729 + // 1 or others: specify to Miracast sink device (display device)
122730 +
122731 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
122732
122733 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
122734 + if ( extra[ 0 ] == '0' ) // Set to Miracast source device.
122735 {
122736 - DBG_8192C( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
122737 - return ret;
122738 + pwfd_info->wfd_device_type = WFD_DEVINFO_SOURCE;
122739 }
122740 -
122741 - if ( pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO )
122742 + else // Set to Miracast sink device.
122743 {
122744 - return -1;
122745 + pwfd_info->wfd_device_type = WFD_DEVINFO_PSINK;
122746 }
122747
122748 - for( jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3 )
122749 +exit:
122750 +
122751 + return ret;
122752 +
122753 +}
122754 +
122755 +static int rtw_p2p_set_scan_result_type(struct net_device *dev,
122756 + struct iw_request_info *info,
122757 + union iwreq_data *wrqu, char *extra)
122758 +{
122759 +
122760 + int ret = 0;
122761 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122762 + struct iw_point *pdata = &wrqu->data;
122763 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122764 + struct wifi_display_info *pwfd_info = pwdinfo->wfd_info;
122765 +
122766 + // Commented by Albert 20120328
122767 + // The input data is 0 , 1 , 2
122768 + // 0: when the P2P is enabled, the scan result will return all the found P2P device.
122769 + // 1: when the P2P is enabled, the scan result will return all the found P2P device and AP.
122770 + // 2: when the P2P is enabled, the scan result will show up the found Miracast devices base on...
122771 + // It will show up all the Miracast source device if this device is sink.
122772 + // It will show up all the Miracast sink device if this device is source.
122773 +
122774 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
122775 +
122776 + if ( extra[ 0 ] == '0' )
122777 {
122778 - peerMAC[ jj ] = key_2char2num( extra[kk], extra[kk+ 1] );
122779 + pwfd_info->scan_result_type = SCAN_RESULT_P2P_ONLY;
122780 + }
122781 + else if ( extra[ 0 ] == '1' )
122782 + {
122783 + pwfd_info->scan_result_type = SCAN_RESULT_ALL;
122784 }
122785 + else if ( extra[ 0 ] == '2' )
122786 + {
122787 + pwfd_info->scan_result_type = SCAN_RESULT_WFD_TYPE;
122788 + }
122789 + else
122790 + {
122791 + pwfd_info->scan_result_type = SCAN_RESULT_P2P_ONLY;
122792 + }
122793 +
122794 +exit:
122795 +
122796 + return ret;
122797 +
122798 +}
122799
122800 - _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122801 +static int rtw_p2p_set_wfd_enable(struct net_device *dev,
122802 + struct iw_request_info *info,
122803 + union iwreq_data *wrqu, char *extra)
122804 +{
122805 +// Commented by Kurt 20121206
122806 +// This function is used to set wfd enabled
122807
122808 - phead = get_list_head(queue);
122809 - plist = get_next(phead);
122810 -
122811 - while(1)
122812 - {
122813 - if (rtw_end_of_queue_search(phead,plist)== _TRUE)
122814 - break;
122815 + int ret = 0;
122816 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122817 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
122818
122819 - pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
122820 - if ( _rtw_memcmp( pnetwork->network.MacAddress, peerMAC, ETH_ALEN ) )
122821 - {
122822 - uintPeerChannel = pnetwork->network.Configuration.DSConfig;
122823 - break;
122824 - }
122825 + if(*extra == '0' )
122826 + pwdinfo->wfd_info->wfd_enable = _FALSE;
122827 + else if(*extra == '1')
122828 + pwdinfo->wfd_info->wfd_enable = _TRUE;
122829
122830 - plist = get_next(plist);
122831 + DBG_871X( "[%s] wfd_enable = %d\n", __FUNCTION__, pwdinfo->wfd_info->wfd_enable );
122832
122833 - }
122834 + return ret;
122835 +
122836 +}
122837
122838 - _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
122839 +static int rtw_p2p_set_driver_iface(struct net_device *dev,
122840 + struct iw_request_info *info,
122841 + union iwreq_data *wrqu, char *extra)
122842 +{
122843 +// Commented by Kurt 20121206
122844 +// This function is used to set driver iface is WEXT or CFG80211
122845 + int ret = 0;
122846 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122847 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
122848
122849 - if ( uintPeerChannel )
122850 + if(*extra == '1' )
122851 {
122852 - _rtw_memset( &pwdinfo->nego_req_info, 0x00, sizeof( struct tx_nego_req_info ) );
122853 - _rtw_memset( &pwdinfo->groupid_info, 0x00, sizeof( struct group_id_info ) );
122854 -
122855 - pwdinfo->nego_req_info.peer_channel_num[ 0 ] = uintPeerChannel;
122856 - _rtw_memcpy( pwdinfo->nego_req_info.peerDevAddr, pnetwork->network.MacAddress, ETH_ALEN );
122857 - pwdinfo->nego_req_info.benable = _TRUE;
122858 -
122859 - rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
122860 - rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING);
122861 + pwdinfo->driver_interface = DRIVER_WEXT;
122862 + DBG_871X( "[%s] driver_interface = WEXT\n", __FUNCTION__);
122863 + }
122864 + else if(*extra == '2')
122865 + {
122866 + pwdinfo->driver_interface = DRIVER_CFG80211;
122867 + DBG_871X( "[%s] driver_interface = CFG80211\n", __FUNCTION__);
122868 + }
122869 +
122870 + return ret;
122871
122872 - DBG_8192C( "[%s] Start PreTx Procedure!\n", __FUNCTION__ );
122873 - _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
122874 - _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_GO_NEGO_TIMEOUT );
122875 +}
122876 +
122877 +// To set the WFD session available to enable or disable
122878 +static int rtw_p2p_set_sa(struct net_device *dev,
122879 + struct iw_request_info *info,
122880 + union iwreq_data *wrqu, char *extra)
122881 +{
122882 +
122883 + int ret = 0;
122884 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122885 + struct iw_point *pdata = &wrqu->data;
122886 + struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122887 + struct wifi_display_info *pwfd_info = pwdinfo->wfd_info;
122888 +
122889 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
122890 +
122891 + if( 0 )
122892 + {
122893 + DBG_871X( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
122894 + return ret;
122895 }
122896 else
122897 {
122898 - DBG_8192C( "[%s] Not Found in Scanning Queue~\n", __FUNCTION__ );
122899 - ret = -1;
122900 + if ( extra[ 0 ] == '0' ) // Disable the session available.
122901 + {
122902 + pwdinfo->session_available = _FALSE;
122903 + }
122904 + else if ( extra[ 0 ] == '1' ) // Enable the session available.
122905 + {
122906 + pwdinfo->session_available = _TRUE;
122907 + }
122908 + else
122909 + {
122910 + pwdinfo->session_available = _FALSE;
122911 + }
122912 }
122913 + printk( "[%s] session available = %d\n", __FUNCTION__, pwdinfo->session_available );
122914 +
122915 exit:
122916
122917 - return ret;
122918 + return ret;
122919 +
122920 }
122921 +#endif //CONFIG_WFD
122922
122923 static int rtw_p2p_prov_disc(struct net_device *dev,
122924 struct iw_request_info *info,
122925 union iwreq_data *wrqu, char *extra)
122926 -{
122927 -
122928 +{
122929 int ret = 0;
122930 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
122931 - struct iw_point *pdata = &wrqu->data;
122932 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
122933 u8 peerMAC[ ETH_ALEN ] = { 0x00 };
122934 int jj,kk;
122935 @@ -4545,10 +5739,19 @@ static int rtw_p2p_prov_disc(struct net_device *dev,
122936 _queue *queue = &(pmlmepriv->scanned_queue);
122937 struct wlan_network *pnetwork = NULL;
122938 uint uintPeerChannel = 0;
122939 - u8 attr_content[50] = { 0x00 }, _status = 0;
122940 + u8 attr_content[100] = { 0x00 }, _status = 0;
122941 u8 *p2pie;
122942 uint p2pielen = 0, attr_contentlen = 0;
122943 _irqL irqL;
122944 + u8 ie_offset;
122945 +#ifdef CONFIG_CONCURRENT_MODE
122946 + _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
122947 + struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
122948 +#endif // CONFIG_CONCURRENT_MODE
122949 +
122950 +#ifdef CONFIG_WFD
122951 + struct wifi_display_info* pwfd_info = pwdinfo->wfd_info;
122952 +#endif // CONFIG_WFD
122953
122954 // Commented by Albert 20110301
122955 // The input data contains two informations.
122956 @@ -4559,21 +5762,28 @@ static int rtw_p2p_prov_disc(struct net_device *dev,
122957 // Format: 00:E0:4C:00:00:05_pbc
122958 // Format: 00:E0:4C:00:00:05_label
122959
122960 - DBG_8192C( "[%s] data = %s\n", __FUNCTION__, extra );
122961 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
122962
122963 - if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
122964 + if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
122965 {
122966 - DBG_8192C( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
122967 + DBG_871X( "[%s] WiFi Direct is disable!\n", __FUNCTION__ );
122968 return ret;
122969 }
122970 else
122971 {
122972 +#ifdef CONFIG_INTEL_WIDI
122973 + if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE){
122974 + DBG_871X( "[%s] WiFi is under survey!\n", __FUNCTION__ );
122975 + return ret;
122976 + }
122977 +#endif //CONFIG_INTEL_WIDI
122978 +
122979 // Reset the content of struct tx_provdisc_req_info excluded the wps_config_method_request.
122980 _rtw_memset( pwdinfo->tx_prov_disc_info.peerDevAddr, 0x00, ETH_ALEN );
122981 _rtw_memset( pwdinfo->tx_prov_disc_info.peerIFAddr, 0x00, ETH_ALEN );
122982 _rtw_memset( &pwdinfo->tx_prov_disc_info.ssid, 0x00, sizeof( NDIS_802_11_SSID ) );
122983 pwdinfo->tx_prov_disc_info.peer_channel_num[ 0 ] = 0;
122984 - pwdinfo->tx_prov_disc_info.peer_channel_num[ 1 ] = 0;
122985 + pwdinfo->tx_prov_disc_info.peer_channel_num[ 1 ] = 0;
122986 pwdinfo->tx_prov_disc_info.benable = _FALSE;
122987 }
122988
122989 @@ -4600,10 +5810,11 @@ static int rtw_p2p_prov_disc(struct net_device *dev,
122990 }
122991 else
122992 {
122993 - DBG_8192C( "[%s] Unknown WPS config methodn", __FUNCTION__ );
122994 + DBG_871X( "[%s] Unknown WPS config methodn", __FUNCTION__ );
122995 return( ret );
122996 }
122997
122998 +
122999 _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
123000
123001 phead = get_list_head(queue);
123002 @@ -4614,37 +5825,64 @@ static int rtw_p2p_prov_disc(struct net_device *dev,
123003 if (rtw_end_of_queue_search(phead,plist)== _TRUE)
123004 break;
123005
123006 + if( uintPeerChannel != 0 )
123007 + break;
123008 +
123009 pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
123010
123011 // Commented by Albert 2011/05/18
123012 // Match the device address located in the P2P IE
123013 // This is for the case that the P2P device address is not the same as the P2P interface address.
123014
123015 - if ( (p2pie=rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)) )
123016 + if (pnetwork->network.Reserved[0] == 2) { // Probe Request
123017 + ie_offset = 0;
123018 + } else { // Beacon or Probe Respones
123019 + ie_offset = 12;
123020 + }
123021 + if ( (p2pie=rtw_get_p2p_ie( &pnetwork->network.IEs[ie_offset], pnetwork->network.IELength - ie_offset, NULL, &p2pielen)) )
123022 {
123023 - // The P2P Device ID attribute is included in the Beacon frame.
123024 - // The P2P Device Info attribute is included in the probe response frame.
123025 -
123026 - if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen) )
123027 + while ( p2pie )
123028 {
123029 - // Handle the P2P Device ID attribute of Beacon first
123030 - if ( _rtw_memcmp( attr_content, peerMAC, ETH_ALEN ) )
123031 + // The P2P Device ID attribute is included in the Beacon frame.
123032 + // The P2P Device Info attribute is included in the probe response frame.
123033 +
123034 + if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen) )
123035 {
123036 - uintPeerChannel = pnetwork->network.Configuration.DSConfig;
123037 - break;
123038 + // Handle the P2P Device ID attribute of Beacon first
123039 + if ( _rtw_memcmp( attr_content, peerMAC, ETH_ALEN ) )
123040 + {
123041 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
123042 + break;
123043 + }
123044 + }
123045 + else if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen) )
123046 + {
123047 + // Handle the P2P Device Info attribute of probe response
123048 + if ( _rtw_memcmp( attr_content, peerMAC, ETH_ALEN ) )
123049 + {
123050 + uintPeerChannel = pnetwork->network.Configuration.DSConfig;
123051 + break;
123052 + }
123053 }
123054 +
123055 + //Get the next P2P IE
123056 + p2pie = rtw_get_p2p_ie(p2pie+p2pielen, pnetwork->network.IELength - ie_offset -(p2pie -&pnetwork->network.IEs[ie_offset] + p2pielen), NULL, &p2pielen);
123057 }
123058 - else if ( rtw_get_p2p_attr_content( p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen) )
123059 + }
123060 +
123061 +#ifdef CONFIG_INTEL_WIDI
123062 + // Some Intel WiDi source may not provide P2P IE,
123063 + // so we could only compare mac addr by 802.11 Source Address
123064 + if( pmlmepriv->widi_state == INTEL_WIDI_STATE_WFD_CONNECTION
123065 + && uintPeerChannel == 0 )
123066 {
123067 - // Handle the P2P Device Info attribute of probe response
123068 - if ( _rtw_memcmp( attr_content, peerMAC, ETH_ALEN ) )
123069 + if ( _rtw_memcmp( pnetwork->network.MacAddress, peerMAC, ETH_ALEN ) )
123070 {
123071 uintPeerChannel = pnetwork->network.Configuration.DSConfig;
123072 break;
123073 - }
123074 + }
123075 }
123076 -
123077 - }
123078 +#endif //CONFIG_INTEL_WIDI
123079
123080 plist = get_next(plist);
123081
123082 @@ -4654,6 +5892,51 @@ static int rtw_p2p_prov_disc(struct net_device *dev,
123083
123084 if ( uintPeerChannel )
123085 {
123086 +#ifdef CONFIG_WFD
123087 + {
123088 + u8 wfd_ie[ 128 ] = { 0x00 };
123089 + uint wfd_ielen = 0;
123090 +
123091 + if ( rtw_get_wfd_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, wfd_ie, &wfd_ielen ) )
123092 + {
123093 + u8 wfd_devinfo[ 6 ] = { 0x00 };
123094 + uint wfd_devlen = 6;
123095 +
123096 + DBG_871X( "[%s] Found WFD IE!\n", __FUNCTION__ );
123097 + if ( rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, wfd_devinfo, &wfd_devlen ) )
123098 + {
123099 + u16 wfd_devinfo_field = 0;
123100 +
123101 + // Commented by Albert 20120319
123102 + // The first two bytes are the WFD device information field of WFD device information subelement.
123103 + // In big endian format.
123104 + wfd_devinfo_field = RTW_GET_BE16(wfd_devinfo);
123105 + if ( wfd_devinfo_field & WFD_DEVINFO_SESSION_AVAIL )
123106 + {
123107 + pwfd_info->peer_session_avail = _TRUE;
123108 + }
123109 + else
123110 + {
123111 + pwfd_info->peer_session_avail = _FALSE;
123112 + }
123113 + }
123114 + }
123115 +
123116 + if ( _FALSE == pwfd_info->peer_session_avail )
123117 + {
123118 + DBG_871X( "[%s] WFD Session not avaiable!\n", __FUNCTION__ );
123119 + goto exit;
123120 + }
123121 + }
123122 +#endif // CONFIG_WFD
123123 +
123124 + DBG_871X( "[%s] peer channel: %d!\n", __FUNCTION__, uintPeerChannel );
123125 +#ifdef CONFIG_CONCURRENT_MODE
123126 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
123127 + {
123128 + _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer );
123129 + }
123130 +#endif // CONFIG_CONCURRENT_MODE
123131 _rtw_memcpy( pwdinfo->tx_prov_disc_info.peerIFAddr, pnetwork->network.MacAddress, ETH_ALEN );
123132 _rtw_memcpy( pwdinfo->tx_prov_disc_info.peerDevAddr, peerMAC, ETH_ALEN );
123133 pwdinfo->tx_prov_disc_info.peer_channel_num[0] = ( u16 ) uintPeerChannel;
123134 @@ -4665,20 +5948,56 @@ static int rtw_p2p_prov_disc(struct net_device *dev,
123135 {
123136 _rtw_memcpy( &pwdinfo->tx_prov_disc_info.ssid, &pnetwork->network.Ssid, sizeof( NDIS_802_11_SSID ) );
123137 }
123138 - else if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) || rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
123139 + else if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) || rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
123140 {
123141 _rtw_memcpy( pwdinfo->tx_prov_disc_info.ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN );
123142 pwdinfo->tx_prov_disc_info.ssid.SsidLength= P2P_WILDCARD_SSID_LEN;
123143 }
123144
123145 +#ifdef CONFIG_CONCURRENT_MODE
123146 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
123147 + {
123148 + // Have to enter the power saving with the AP
123149 + set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
123150 +
123151 + issue_nulldata(pbuddy_adapter, NULL, 1, 3, 500);
123152 + }
123153 + else
123154 + {
123155 + set_channel_bwmode(padapter, uintPeerChannel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
123156 + }
123157 +#else
123158 set_channel_bwmode(padapter, uintPeerChannel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
123159 +#endif
123160 +
123161 _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
123162 +
123163 +#ifdef CONFIG_CONCURRENT_MODE
123164 + if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
123165 + {
123166 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_CONCURRENT_PROVISION_TIMEOUT );
123167 + }
123168 + else
123169 + {
123170 + _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT );
123171 + }
123172 +#else
123173 _set_timer( &pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT );
123174 +#endif // CONFIG_CONCURRENT_MODE
123175 +
123176
123177 }
123178 else
123179 {
123180 - DBG_8192C( "[%s] NOT Found in the Scanning Queue!\n", __FUNCTION__ );
123181 + DBG_871X( "[%s] NOT Found in the Scanning Queue!\n", __FUNCTION__ );
123182 +#ifdef CONFIG_INTEL_WIDI
123183 + rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
123184 + rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
123185 + rtw_free_network_queue(padapter, _TRUE);
123186 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
123187 + rtw_sitesurvey_cmd(padapter, NULL, 0, NULL, 0);
123188 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
123189 +#endif //CONFIG_INTEL_WIDI
123190 }
123191 exit:
123192
123193 @@ -4697,11 +6016,10 @@ static int rtw_p2p_got_wpsinfo(struct net_device *dev,
123194
123195 int ret = 0;
123196 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
123197 - struct iw_point *pdata = &wrqu->data;
123198 struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
123199
123200
123201 - DBG_8192C( "[%s] data = %s\n", __FUNCTION__, extra );
123202 + DBG_871X( "[%s] data = %s\n", __FUNCTION__, extra );
123203 // Added by Albert 20110328
123204 // if the input data is P2P_NO_WPSINFO -> reset the wpsinfo
123205 // if the input data is P2P_GOT_WPSINFO_PEER_DISPLAY_PIN -> the utility just input the PIN code got from the peer P2P device.
123206 @@ -4749,7 +6067,7 @@ static int rtw_p2p_set(struct net_device *dev,
123207 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
123208 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
123209
123210 - DBG_8192C( "[%s] extra = %s\n", __FUNCTION__, extra );
123211 + DBG_871X( "[%s] extra = %s\n", __FUNCTION__, extra );
123212
123213 if ( _rtw_memcmp( extra, "enable=", 7 ) )
123214 {
123215 @@ -4809,8 +6127,56 @@ static int rtw_p2p_set(struct net_device *dev,
123216 wrqu->data.length -= 7;
123217 rtw_p2p_set_op_ch( dev, info, wrqu, &extra[6] );
123218 }
123219 -
123220 -
123221 + else if ( _rtw_memcmp( extra, "invite=", 7 ) )
123222 + {
123223 + wrqu->data.length -= 8;
123224 + rtw_p2p_invite_req( dev, info, wrqu, &extra[7] );
123225 + }
123226 + else if ( _rtw_memcmp( extra, "persistent=", 11 ) )
123227 + {
123228 + wrqu->data.length -= 11;
123229 + rtw_p2p_set_persistent( dev, info, wrqu, &extra[11] );
123230 + }
123231 + else if ( _rtw_memcmp ( extra, "uuid=", 5) )
123232 + {
123233 + wrqu->data.length -= 5;
123234 + ret = rtw_p2p_set_wps_uuid( dev, info, wrqu, &extra[5] );
123235 + }
123236 +#ifdef CONFIG_WFD
123237 + else if ( _rtw_memcmp( extra, "sa=", 3 ) )
123238 + {
123239 + // sa: WFD Session Available information
123240 + wrqu->data.length -= 3;
123241 + rtw_p2p_set_sa( dev, info, wrqu, &extra[3] );
123242 + }
123243 + else if ( _rtw_memcmp( extra, "pc=", 3 ) )
123244 + {
123245 + // pc: WFD Preferred Connection
123246 + wrqu->data.length -= 3;
123247 + rtw_p2p_set_pc( dev, info, wrqu, &extra[3] );
123248 + }
123249 + else if ( _rtw_memcmp( extra, "wfd_type=", 9 ) )
123250 + {
123251 + // Specify this device is Mircast source or sink
123252 + wrqu->data.length -= 9;
123253 + rtw_p2p_set_wfd_device_type( dev, info, wrqu, &extra[9] );
123254 + }
123255 + else if ( _rtw_memcmp( extra, "scan_type=", 10 ) )
123256 + {
123257 + wrqu->data.length -= 10;
123258 + rtw_p2p_set_scan_result_type( dev, info, wrqu, &extra[10] );
123259 + }
123260 + else if ( _rtw_memcmp( extra, "wfd_enable=", 11 ) )
123261 + {
123262 + wrqu->data.length -= 11;
123263 + rtw_p2p_set_wfd_enable( dev, info, wrqu, &extra[11] );
123264 + }
123265 + else if ( _rtw_memcmp( extra, "driver_iface=", 13 ) )
123266 + {
123267 + wrqu->data.length -= 13;
123268 + rtw_p2p_set_driver_iface( dev, info, wrqu, &extra[13] );
123269 + }
123270 +#endif //CONFIG_WFD
123271 #endif //CONFIG_P2P
123272
123273 return ret;
123274 @@ -4832,7 +6198,10 @@ static int rtw_p2p_get(struct net_device *dev,
123275 struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
123276 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
123277
123278 - DBG_8192C( "[%s] extra = %s\n", __FUNCTION__, (char*) wrqu->data.pointer );
123279 + if ( padapter->bShowGetP2PState )
123280 + {
123281 + DBG_871X( "[%s] extra = %s\n", __FUNCTION__, (char*) wrqu->data.pointer );
123282 + }
123283
123284 if ( _rtw_memcmp( wrqu->data.pointer, "status", 6 ) )
123285 {
123286 @@ -4852,16 +6221,34 @@ static int rtw_p2p_get(struct net_device *dev,
123287 }
123288 else if ( _rtw_memcmp( wrqu->data.pointer, "peer_deva", 9 ) )
123289 {
123290 + // Get the P2P device address when receiving the provision discovery request frame.
123291 rtw_p2p_get_peer_devaddr( dev, info, wrqu, extra);
123292 }
123293 else if ( _rtw_memcmp( wrqu->data.pointer, "group_id", 8 ) )
123294 {
123295 rtw_p2p_get_groupid( dev, info, wrqu, extra);
123296 }
123297 + else if ( _rtw_memcmp( wrqu->data.pointer, "inv_peer_deva", 13 ) )
123298 + {
123299 + // Get the P2P device address when receiving the P2P Invitation request frame.
123300 + rtw_p2p_get_peer_devaddr_by_invitation( dev, info, wrqu, extra);
123301 + }
123302 + else if ( _rtw_memcmp( wrqu->data.pointer, "op_ch", 5 ) )
123303 + {
123304 + rtw_p2p_get_op_ch( dev, info, wrqu, extra);
123305 + }
123306 #ifdef CONFIG_WFD
123307 else if ( _rtw_memcmp( wrqu->data.pointer, "peer_port", 9 ) )
123308 {
123309 - rtw_p2p_get_peer_WFD_port( dev, info, wrqu, extra );
123310 + rtw_p2p_get_peer_wfd_port( dev, info, wrqu, extra );
123311 + }
123312 + else if ( _rtw_memcmp( wrqu->data.pointer, "wfd_sa", 6 ) )
123313 + {
123314 + rtw_p2p_get_peer_wfd_session_available( dev, info, wrqu, extra );
123315 + }
123316 + else if ( _rtw_memcmp( wrqu->data.pointer, "wfd_pc", 6 ) )
123317 + {
123318 + rtw_p2p_get_peer_wfd_preferred_connection( dev, info, wrqu, extra );
123319 }
123320 #endif // CONFIG_WFD
123321
123322 @@ -4872,40 +6259,64 @@ static int rtw_p2p_get(struct net_device *dev,
123323 }
123324
123325 static int rtw_p2p_get2(struct net_device *dev,
123326 - struct iw_request_info *info,
123327 - union iwreq_data *wrqu, char *extra)
123328 + struct iw_request_info *info,
123329 + union iwreq_data *wrqu, char *extra)
123330 {
123331 -
123332 - int ret = 0;
123333 -
123334 +
123335 + int ret = 0;
123336 +
123337 #ifdef CONFIG_P2P
123338
123339 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
123340 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
123341 - struct iw_point *pdata = &wrqu->data;
123342 - struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
123343 - struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
123344 + int length = wrqu->data.length;
123345 + char *buffer = (u8 *)rtw_malloc(length);
123346
123347 - DBG_8192C( "[%s] extra = %s\n", __FUNCTION__, (char*) wrqu->data.pointer );
123348 -
123349 - if ( _rtw_memcmp( extra, "wpsCM=", 6 ) )
123350 + if (buffer == NULL)
123351 {
123352 - wrqu->data.length -= 6;
123353 - rtw_p2p_get_wps_configmethod( dev, info, wrqu, &extra[6]);
123354 + ret = -ENOMEM;
123355 + goto bad;
123356 }
123357 - else if ( _rtw_memcmp( extra, "devN=", 5 ) )
123358 +
123359 + if (copy_from_user(buffer, wrqu->data.pointer, wrqu->data.length))
123360 {
123361 - wrqu->data.length -= 5;
123362 - rtw_p2p_get_device_name( dev, info, wrqu, &extra[5] );
123363 + ret - EFAULT;
123364 + goto bad;
123365 }
123366 -
123367 +
123368 + DBG_871X("[%s] buffer = %s\n", __FUNCTION__, buffer);
123369 +
123370 + if (_rtw_memcmp(buffer, "wpsCM=", 6))
123371 + {
123372 + ret = rtw_p2p_get_wps_configmethod(dev, info, wrqu, extra, &buffer[6]);
123373 + } else if (_rtw_memcmp(buffer, "devN=", 5))
123374 + {
123375 + ret = rtw_p2p_get_device_name(dev, info, wrqu, extra, &buffer[5]);
123376 + } else if (_rtw_memcmp(buffer, "dev_type=", 9))
123377 + {
123378 + ret = rtw_p2p_get_device_type(dev, info, wrqu, extra, &buffer[9]);
123379 + } else if (_rtw_memcmp(buffer, "go_devadd=", 10))
123380 + {
123381 + ret = rtw_p2p_get_go_device_address(dev, info, wrqu, extra, &buffer[10]);
123382 + } else if (_rtw_memcmp(buffer, "InvProc=", 8))
123383 + {
123384 + ret = rtw_p2p_get_invitation_procedure(dev, info, wrqu, extra, &buffer[8]);
123385 + } else
123386 + {
123387 + snprintf(extra, sizeof("Command not found."), "Command not found.");
123388 + wrqu->data.length = strlen(extra);
123389 + }
123390 +
123391 +bad:
123392 + if (buffer)
123393 + {
123394 + rtw_mfree(buffer, length);
123395 + }
123396 +
123397 #endif //CONFIG_P2P
123398
123399 return ret;
123400 -
123401 +
123402 }
123403
123404 -extern char *ifname;
123405 extern int rtw_change_ifname(_adapter *padapter, const char *ifname);
123406 static int rtw_rereg_nd_name(struct net_device *dev,
123407 struct iw_request_info *info,
123408 @@ -4917,7 +6328,15 @@ static int rtw_rereg_nd_name(struct net_device *dev,
123409 char new_ifname[IFNAMSIZ];
123410
123411 if(rereg_priv->old_ifname[0] == 0) {
123412 - strncpy(rereg_priv->old_ifname, ifname, IFNAMSIZ);
123413 + char *reg_ifname;
123414 +#ifdef CONFIG_CONCURRENT_MODE
123415 + if (padapter->isprimary)
123416 + reg_ifname = padapter->registrypriv.ifname;
123417 + else
123418 +#endif
123419 + reg_ifname = padapter->registrypriv.if2name;
123420 +
123421 + strncpy(rereg_priv->old_ifname, reg_ifname, IFNAMSIZ);
123422 rereg_priv->old_ifname[IFNAMSIZ-1] = 0;
123423 }
123424
123425 @@ -4940,7 +6359,7 @@ static int rtw_rereg_nd_name(struct net_device *dev,
123426
123427 if(_rtw_memcmp(rereg_priv->old_ifname, "disable%d", 9) == _TRUE) {
123428 padapter->ledpriv.bRegUseLed= rereg_priv->old_bRegUseLed;
123429 - rtw_sw_led_init(padapter);
123430 + rtw_hal_sw_led_init(padapter);
123431 rtw_ips_mode_req(&padapter->pwrctrlpriv, rereg_priv->old_ips_mode);
123432 }
123433
123434 @@ -4957,7 +6376,7 @@ static int rtw_rereg_nd_name(struct net_device *dev,
123435 rtw_led_control(padapter, LED_CTL_POWER_OFF);
123436 rereg_priv->old_bRegUseLed = padapter->ledpriv.bRegUseLed;
123437 padapter->ledpriv.bRegUseLed= _FALSE;
123438 - rtw_sw_led_deinit(padapter);
123439 + rtw_hal_sw_led_deinit(padapter);
123440
123441 // the interface is being "disabled", we can do deeper IPS
123442 rereg_priv->old_ips_mode = rtw_get_ips_mode_req(&padapter->pwrctrlpriv);
123443 @@ -4972,46 +6391,46 @@ exit:
123444 void mac_reg_dump(_adapter *padapter)
123445 {
123446 int i,j=1;
123447 - DBG_8192C("\n======= MAC REG =======\n");
123448 + DBG_871X("\n======= MAC REG =======\n");
123449 for(i=0x0;i<0x300;i+=4)
123450 {
123451 - if(j%4==1) DBG_8192C("0x%02x",i);
123452 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
123453 - if((j++)%4 == 0) DBG_8192C("\n");
123454 + if(j%4==1) DBG_871X("0x%02x",i);
123455 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
123456 + if((j++)%4 == 0) DBG_871X("\n");
123457 }
123458 for(i=0x400;i<0x800;i+=4)
123459 {
123460 - if(j%4==1) DBG_8192C("0x%02x",i);
123461 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
123462 - if((j++)%4 == 0) DBG_8192C("\n");
123463 + if(j%4==1) DBG_871X("0x%02x",i);
123464 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
123465 + if((j++)%4 == 0) DBG_871X("\n");
123466 }
123467 }
123468 void bb_reg_dump(_adapter *padapter)
123469 {
123470 int i,j=1;
123471 - DBG_8192C("\n======= BB REG =======\n");
123472 + DBG_871X("\n======= BB REG =======\n");
123473 for(i=0x800;i<0x1000;i+=4)
123474 {
123475 - if(j%4==1) DBG_8192C("0x%02x",i);
123476 + if(j%4==1) DBG_871X("0x%02x",i);
123477
123478 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
123479 - if((j++)%4 == 0) DBG_8192C("\n");
123480 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
123481 + if((j++)%4 == 0) DBG_871X("\n");
123482 }
123483 }
123484 void rf_reg_dump(_adapter *padapter)
123485 {
123486 int i,j=1,path;
123487 u32 value;
123488 - DBG_8192C("\n======= RF REG =======\n");
123489 + DBG_871X("\n======= RF REG =======\n");
123490 for(path=0;path<2;path++)
123491 {
123492 - DBG_8192C("\nRF_Path(%x)\n",path);
123493 + DBG_871X("\nRF_Path(%x)\n",path);
123494 for(i=0;i<0x100;i++)
123495 {
123496 value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
123497 - if(j%4==1) DBG_8192C("0x%02x ",i);
123498 - DBG_8192C(" 0x%08x ",value);
123499 - if((j++)%4==0) DBG_8192C("\n");
123500 + if(j%4==1) DBG_871X("0x%02x ",i);
123501 + DBG_871X(" 0x%08x ",value);
123502 + if((j++)%4==0) DBG_871X("\n");
123503 }
123504 }
123505 }
123506 @@ -5021,30 +6440,30 @@ void rf_reg_dump(_adapter *padapter)
123507 void mac_reg_dump(_adapter *padapter)
123508 {
123509 int i,j=1;
123510 - DBG_8192C("\n======= MAC REG =======\n");
123511 + DBG_871X("\n======= MAC REG =======\n");
123512 for(i=0x0;i<0x300;i+=4)
123513 {
123514 - if(j%4==1) DBG_8192C("0x%02x",i);
123515 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
123516 - if((j++)%4 == 0) DBG_8192C("\n");
123517 + if(j%4==1) DBG_871X("0x%02x",i);
123518 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
123519 + if((j++)%4 == 0) DBG_871X("\n");
123520 }
123521 for(i=0x400;i<0x800;i+=4)
123522 {
123523 - if(j%4==1) DBG_8192C("0x%02x",i);
123524 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
123525 - if((j++)%4 == 0) DBG_8192C("\n");
123526 + if(j%4==1) DBG_871X("0x%02x",i);
123527 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
123528 + if((j++)%4 == 0) DBG_871X("\n");
123529 }
123530 }
123531 void bb_reg_dump(_adapter *padapter)
123532 {
123533 int i,j=1;
123534 - DBG_8192C("\n======= BB REG =======\n");
123535 + DBG_871X("\n======= BB REG =======\n");
123536 for(i=0x800;i<0x1000;i+=4)
123537 {
123538 - if(j%4==1) DBG_8192C("0x%02x",i);
123539 + if(j%4==1) DBG_871X("0x%02x",i);
123540
123541 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
123542 - if((j++)%4 == 0) DBG_8192C("\n");
123543 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
123544 + if((j++)%4 == 0) DBG_871X("\n");
123545 }
123546 }
123547 void rf_reg_dump(_adapter *padapter)
123548 @@ -5052,9 +6471,9 @@ void rf_reg_dump(_adapter *padapter)
123549 int i,j=1,path;
123550 u32 value;
123551 u8 rf_type,path_nums = 0;
123552 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
123553 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
123554
123555 - DBG_8192C("\n======= RF REG =======\n");
123556 + DBG_871X("\n======= RF REG =======\n");
123557 if((RF_1T2R == rf_type) ||(RF_1T1R ==rf_type ))
123558 path_nums = 1;
123559 else
123560 @@ -5062,14 +6481,14 @@ void rf_reg_dump(_adapter *padapter)
123561
123562 for(path=0;path<path_nums;path++)
123563 {
123564 - DBG_8192C("\nRF_Path(%x)\n",path);
123565 + DBG_871X("\nRF_Path(%x)\n",path);
123566 for(i=0;i<0x100;i++)
123567 {
123568 //value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
123569 - value =padapter->HalFunc.read_rfreg(padapter, path, i, 0xffffffff);
123570 - if(j%4==1) DBG_8192C("0x%02x ",i);
123571 - DBG_8192C(" 0x%08x ",value);
123572 - if((j++)%4==0) DBG_8192C("\n");
123573 + value =rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
123574 + if(j%4==1) DBG_871X("0x%02x ",i);
123575 + DBG_871X(" 0x%08x ",value);
123576 + if((j++)%4==0) DBG_871X("\n");
123577 }
123578 }
123579 }
123580 @@ -5077,6 +6496,9 @@ void rf_reg_dump(_adapter *padapter)
123581 #ifdef CONFIG_IOL
123582 #include <rtw_iol.h>
123583 #endif
123584 +#ifdef DBG_CONFIG_ERROR_DETECT
123585 +#include <rtw_sreset.h>
123586 +#endif
123587 static int rtw_dbg_port(struct net_device *dev,
123588 struct iw_request_info *info,
123589 union iwreq_data *wrqu, char *extra)
123590 @@ -5111,13 +6533,13 @@ static int rtw_dbg_port(struct net_device *dev,
123591 switch(minor_cmd)
123592 {
123593 case 1:
123594 - DBG_8192C("rtw_read8(0x%x)=0x%02x\n", arg, rtw_read8(padapter, arg));
123595 + DBG_871X("rtw_read8(0x%x)=0x%02x\n", arg, rtw_read8(padapter, arg));
123596 break;
123597 case 2:
123598 - DBG_8192C("rtw_read16(0x%x)=0x%04x\n", arg, rtw_read16(padapter, arg));
123599 + DBG_871X("rtw_read16(0x%x)=0x%04x\n", arg, rtw_read16(padapter, arg));
123600 break;
123601 case 4:
123602 - DBG_8192C("rtw_read32(0x%x)=0x%08x\n", arg, rtw_read32(padapter, arg));
123603 + DBG_871X("rtw_read32(0x%x)=0x%08x\n", arg, rtw_read32(padapter, arg));
123604 break;
123605 }
123606 break;
123607 @@ -5126,31 +6548,31 @@ static int rtw_dbg_port(struct net_device *dev,
123608 {
123609 case 1:
123610 rtw_write8(padapter, arg, extra_arg);
123611 - DBG_8192C("rtw_write8(0x%x)=0x%02x\n", arg, rtw_read8(padapter, arg));
123612 + DBG_871X("rtw_write8(0x%x)=0x%02x\n", arg, rtw_read8(padapter, arg));
123613 break;
123614 case 2:
123615 rtw_write16(padapter, arg, extra_arg);
123616 - DBG_8192C("rtw_write16(0x%x)=0x%04x\n", arg, rtw_read16(padapter, arg));
123617 + DBG_871X("rtw_write16(0x%x)=0x%04x\n", arg, rtw_read16(padapter, arg));
123618 break;
123619 case 4:
123620 rtw_write32(padapter, arg, extra_arg);
123621 - DBG_8192C("rtw_write32(0x%x)=0x%08x\n", arg, rtw_read32(padapter, arg));
123622 + DBG_871X("rtw_write32(0x%x)=0x%08x\n", arg, rtw_read32(padapter, arg));
123623 break;
123624 }
123625 break;
123626 case 0x72://read_bb
123627 - DBG_8192C("read_bbreg(0x%x)=0x%x\n", arg, padapter->HalFunc.read_bbreg(padapter, arg, 0xffffffff));
123628 + DBG_871X("read_bbreg(0x%x)=0x%x\n", arg, rtw_hal_read_bbreg(padapter, arg, 0xffffffff));
123629 break;
123630 case 0x73://write_bb
123631 - padapter->HalFunc.write_bbreg(padapter, arg, 0xffffffff, extra_arg);
123632 - DBG_8192C("write_bbreg(0x%x)=0x%x\n", arg, padapter->HalFunc.read_bbreg(padapter, arg, 0xffffffff));
123633 + rtw_hal_write_bbreg(padapter, arg, 0xffffffff, extra_arg);
123634 + DBG_871X("write_bbreg(0x%x)=0x%x\n", arg, rtw_hal_read_bbreg(padapter, arg, 0xffffffff));
123635 break;
123636 case 0x74://read_rf
123637 - 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));
123638 + 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));
123639 break;
123640 case 0x75://write_rf
123641 - padapter->HalFunc.write_rfreg(padapter, minor_cmd, arg, 0xffffffff, extra_arg);
123642 - 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));
123643 + rtw_hal_write_rfreg(padapter, minor_cmd, arg, 0xffffffff, extra_arg);
123644 + 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));
123645 break;
123646
123647 case 0x76:
123648 @@ -5315,29 +6737,33 @@ static int rtw_dbg_port(struct net_device *dev,
123649 #endif //CONFIG_IOL
123650 }
123651 break;
123652 + case 0x7a:
123653 + receive_disconnect(padapter, pmlmeinfo->network.MacAddress
123654 + , WLAN_REASON_EXPIRATION_CHK);
123655 + break;
123656
123657 case 0x7F:
123658 switch(minor_cmd)
123659 {
123660 case 0x0:
123661 - DBG_8192C("fwstate=0x%x\n", get_fwstate(pmlmepriv));
123662 + DBG_871X("fwstate=0x%x\n", get_fwstate(pmlmepriv));
123663 break;
123664 case 0x01:
123665 - DBG_8192C("auth_alg=0x%x, enc_alg=0x%x, auth_type=0x%x, enc_type=0x%x\n",
123666 + DBG_871X("auth_alg=0x%x, enc_alg=0x%x, auth_type=0x%x, enc_type=0x%x\n",
123667 psecuritypriv->dot11AuthAlgrthm, psecuritypriv->dot11PrivacyAlgrthm,
123668 psecuritypriv->ndisauthtype, psecuritypriv->ndisencryptstatus);
123669 break;
123670 case 0x02:
123671 - DBG_8192C("pmlmeinfo->state=0x%x\n", pmlmeinfo->state);
123672 + DBG_871X("pmlmeinfo->state=0x%x\n", pmlmeinfo->state);
123673 break;
123674 case 0x03:
123675 - DBG_8192C("qos_option=%d\n", pmlmepriv->qospriv.qos_option);
123676 - DBG_8192C("ht_option=%d\n", pmlmepriv->htpriv.ht_option);
123677 + DBG_871X("qos_option=%d\n", pmlmepriv->qospriv.qos_option);
123678 + DBG_871X("ht_option=%d\n", pmlmepriv->htpriv.ht_option);
123679 break;
123680 case 0x04:
123681 - DBG_8192C("cur_ch=%d\n", pmlmeext->cur_channel);
123682 - DBG_8192C("cur_bw=%d\n", pmlmeext->cur_bwmode);
123683 - DBG_8192C("cur_ch_off=%d\n", pmlmeext->cur_ch_offset);
123684 + DBG_871X("cur_ch=%d\n", pmlmeext->cur_channel);
123685 + DBG_871X("cur_bw=%d\n", pmlmeext->cur_bwmode);
123686 + DBG_871X("cur_ch_off=%d\n", pmlmeext->cur_ch_offset);
123687 break;
123688 case 0x05:
123689 psta = rtw_get_stainfo(pstapriv, cur_network->network.MacAddress);
123690 @@ -5346,41 +6772,43 @@ static int rtw_dbg_port(struct net_device *dev,
123691 int i;
123692 struct recv_reorder_ctrl *preorder_ctrl;
123693
123694 - DBG_8192C("sta's macaddr:" MAC_FMT "\n", MAC_ARG(psta->hwaddr));
123695 - DBG_8192C("rtsen=%d, cts2slef=%d\n", psta->rtsen, psta->cts2self);
123696 - DBG_8192C("qos_en=%d, ht_en=%d, init_rate=%d\n", psta->qos_option, psta->htpriv.ht_option, psta->init_rate);
123697 - DBG_8192C("state=0x%x, aid=%d, macid=%d, raid=%d\n", psta->state, psta->aid, psta->mac_id, psta->raid);
123698 - DBG_8192C("bwmode=%d, ch_offset=%d, sgi=%d\n", psta->htpriv.bwmode, psta->htpriv.ch_offset, psta->htpriv.sgi);
123699 - DBG_8192C("ampdu_enable = %d\n", psta->htpriv.ampdu_enable);
123700 - DBG_8192C("agg_enable_bitmap=%x, candidate_tid_bitmap=%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap);
123701 + DBG_871X("SSID=%s\n", cur_network->network.Ssid.Ssid);
123702 + DBG_871X("sta's macaddr:" MAC_FMT "\n", MAC_ARG(psta->hwaddr));
123703 + DBG_871X("cur_channel=%d, cur_bwmode=%d, cur_ch_offset=%d\n", pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
123704 + DBG_871X("rtsen=%d, cts2slef=%d\n", psta->rtsen, psta->cts2self);
123705 + DBG_871X("qos_en=%d, ht_en=%d, init_rate=%d\n", psta->qos_option, psta->htpriv.ht_option, psta->init_rate);
123706 + DBG_871X("state=0x%x, aid=%d, macid=%d, raid=%d\n", psta->state, psta->aid, psta->mac_id, psta->raid);
123707 + DBG_871X("bwmode=%d, ch_offset=%d, sgi=%d\n", psta->htpriv.bwmode, psta->htpriv.ch_offset, psta->htpriv.sgi);
123708 + DBG_871X("ampdu_enable = %d\n", psta->htpriv.ampdu_enable);
123709 + DBG_871X("agg_enable_bitmap=%x, candidate_tid_bitmap=%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap);
123710
123711 for(i=0;i<16;i++)
123712 {
123713 preorder_ctrl = &psta->recvreorder_ctrl[i];
123714 if(preorder_ctrl->enable)
123715 {
123716 - DBG_8192C("tid=%d, indicate_seq=%d\n", i, preorder_ctrl->indicate_seq);
123717 + DBG_871X("tid=%d, indicate_seq=%d\n", i, preorder_ctrl->indicate_seq);
123718 }
123719 }
123720
123721 }
123722 else
123723 {
123724 - DBG_8192C("can't get sta's macaddr, cur_network's macaddr:" MAC_FMT "\n", MAC_ARG(cur_network->network.MacAddress));
123725 + DBG_871X("can't get sta's macaddr, cur_network's macaddr:" MAC_FMT "\n", MAC_ARG(cur_network->network.MacAddress));
123726 }
123727 break;
123728 case 0x06:
123729 {
123730 u8 DMFlag;
123731 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_DM_FLAG, (u8 *)(&DMFlag));
123732 - DBG_8192C("(B)DMFlag=0x%x, arg=0x%x\n", DMFlag, arg);
123733 + rtw_hal_get_hwreg(padapter, HW_VAR_DM_FLAG, (u8 *)(&DMFlag));
123734 + DBG_871X("(B)DMFlag=0x%x, arg=0x%x\n", DMFlag, arg);
123735 DMFlag = (u8)(0x0f&arg);
123736 - DBG_8192C("(A)DMFlag=0x%x\n", DMFlag);
123737 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_DM_FLAG, (u8 *)(&DMFlag));
123738 + DBG_871X("(A)DMFlag=0x%x\n", DMFlag);
123739 + rtw_hal_set_hwreg(padapter, HW_VAR_DM_FLAG, (u8 *)(&DMFlag));
123740 }
123741 break;
123742 case 0x07:
123743 - DBG_8192C("bSurpriseRemoved=%d, bDriverStopped=%d\n",
123744 + DBG_871X("bSurpriseRemoved=%d, bDriverStopped=%d\n",
123745 padapter->bSurpriseRemoved, padapter->bDriverStopped);
123746 break;
123747 case 0x08:
123748 @@ -5388,10 +6816,14 @@ static int rtw_dbg_port(struct net_device *dev,
123749 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
123750 struct recv_priv *precvpriv = &padapter->recvpriv;
123751
123752 - DBG_8192C("free_xmitbuf_cnt=%d, free_xmitframe_cnt=%d\n",
123753 - pxmitpriv->free_xmitbuf_cnt, pxmitpriv->free_xmitframe_cnt);
123754 + DBG_871X("free_xmitbuf_cnt=%d, free_xmitframe_cnt=%d"
123755 + ", free_xmit_extbuf_cnt=%d, free_xframe_ext_cnt=%d"
123756 + ", free_recvframe_cnt=%d\n",
123757 + pxmitpriv->free_xmitbuf_cnt, pxmitpriv->free_xmitframe_cnt,
123758 + pxmitpriv->free_xmit_extbuf_cnt, pxmitpriv->free_xframe_ext_cnt,
123759 + precvpriv->free_recvframe_cnt);
123760 #ifdef CONFIG_USB_HCI
123761 - DBG_8192C("rx_urb_pending_cn=%d\n", precvpriv->rx_pending_cnt);
123762 + DBG_871X("rx_urb_pending_cn=%d\n", precvpriv->rx_pending_cnt);
123763 #endif
123764 }
123765 break;
123766 @@ -5402,7 +6834,7 @@ static int rtw_dbg_port(struct net_device *dev,
123767 struct recv_reorder_ctrl *preorder_ctrl;
123768
123769 #ifdef CONFIG_AP_MODE
123770 - DBG_8192C("sta_dz_bitmap=0x%x, tim_bitmap=0x%x\n", pstapriv->sta_dz_bitmap, pstapriv->tim_bitmap);
123771 + DBG_871X("sta_dz_bitmap=0x%x, tim_bitmap=0x%x\n", pstapriv->sta_dz_bitmap, pstapriv->tim_bitmap);
123772 #endif
123773 _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
123774
123775 @@ -5419,20 +6851,22 @@ static int rtw_dbg_port(struct net_device *dev,
123776
123777 if(extra_arg == psta->aid)
123778 {
123779 - DBG_8192C("sta's macaddr:" MAC_FMT "\n", MAC_ARG(psta->hwaddr));
123780 - DBG_8192C("rtsen=%d, cts2slef=%d\n", psta->rtsen, psta->cts2self);
123781 - DBG_8192C("qos_en=%d, ht_en=%d, init_rate=%d\n", psta->qos_option, psta->htpriv.ht_option, psta->init_rate);
123782 - DBG_8192C("state=0x%x, aid=%d, macid=%d, raid=%d\n", psta->state, psta->aid, psta->mac_id, psta->raid);
123783 - DBG_8192C("bwmode=%d, ch_offset=%d, sgi=%d\n", psta->htpriv.bwmode, psta->htpriv.ch_offset, psta->htpriv.sgi);
123784 - DBG_8192C("ampdu_enable = %d\n", psta->htpriv.ampdu_enable);
123785 - DBG_8192C("agg_enable_bitmap=%x, candidate_tid_bitmap=%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap);
123786 - DBG_8192C("capability=0x%x\n", psta->capability);
123787 - DBG_8192C("flags=0x%x\n", psta->flags);
123788 - DBG_8192C("wpa_psk=0x%x\n", psta->wpa_psk);
123789 - DBG_8192C("wpa2_group_cipher=0x%x\n", psta->wpa2_group_cipher);
123790 - DBG_8192C("wpa2_pairwise_cipher=0x%x\n", psta->wpa2_pairwise_cipher);
123791 - DBG_8192C("qos_info=0x%x\n", psta->qos_info);
123792 - DBG_8192C("dot118021XPrivacy=0x%x\n", psta->dot118021XPrivacy);
123793 + DBG_871X("sta's macaddr:" MAC_FMT "\n", MAC_ARG(psta->hwaddr));
123794 + DBG_871X("rtsen=%d, cts2slef=%d\n", psta->rtsen, psta->cts2self);
123795 + DBG_871X("qos_en=%d, ht_en=%d, init_rate=%d\n", psta->qos_option, psta->htpriv.ht_option, psta->init_rate);
123796 + DBG_871X("state=0x%x, aid=%d, macid=%d, raid=%d\n", psta->state, psta->aid, psta->mac_id, psta->raid);
123797 + DBG_871X("bwmode=%d, ch_offset=%d, sgi=%d\n", psta->htpriv.bwmode, psta->htpriv.ch_offset, psta->htpriv.sgi);
123798 + DBG_871X("ampdu_enable = %d\n", psta->htpriv.ampdu_enable);
123799 + DBG_871X("agg_enable_bitmap=%x, candidate_tid_bitmap=%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap);
123800 +#ifdef CONFIG_AP_MODE
123801 + DBG_871X("capability=0x%x\n", psta->capability);
123802 + DBG_871X("flags=0x%x\n", psta->flags);
123803 + DBG_871X("wpa_psk=0x%x\n", psta->wpa_psk);
123804 + DBG_871X("wpa2_group_cipher=0x%x\n", psta->wpa2_group_cipher);
123805 + DBG_871X("wpa2_pairwise_cipher=0x%x\n", psta->wpa2_pairwise_cipher);
123806 + DBG_871X("qos_info=0x%x\n", psta->qos_info);
123807 +#endif
123808 + DBG_871X("dot118021XPrivacy=0x%x\n", psta->dot118021XPrivacy);
123809
123810
123811
123812 @@ -5441,7 +6875,7 @@ static int rtw_dbg_port(struct net_device *dev,
123813 preorder_ctrl = &psta->recvreorder_ctrl[j];
123814 if(preorder_ctrl->enable)
123815 {
123816 - DBG_8192C("tid=%d, indicate_seq=%d\n", j, preorder_ctrl->indicate_seq);
123817 + DBG_871X("tid=%d, indicate_seq=%d\n", j, preorder_ctrl->indicate_seq);
123818 }
123819 }
123820
123821 @@ -5457,9 +6891,9 @@ static int rtw_dbg_port(struct net_device *dev,
123822
123823 case 0x0c://dump rx packet
123824 {
123825 - DBG_8192C("dump rx packet (%d)\n",extra_arg);
123826 + DBG_871X("dump rx packet (%d)\n",extra_arg);
123827 //pHalData->bDumpRxPkt =extra_arg;
123828 - padapter->HalFunc.SetHalDefVarHandler(padapter, HAL_DEF_DBG_DUMP_RXPKT, &(extra_arg));
123829 + rtw_hal_set_def_var(padapter, HAL_DEF_DBG_DUMP_RXPKT, &(extra_arg));
123830 }
123831 break;
123832 #if 0
123833 @@ -5477,31 +6911,88 @@ static int rtw_dbg_port(struct net_device *dev,
123834 case 0x0f:
123835 {
123836 if(extra_arg == 0){
123837 - DBG_8192C("###### silent reset test.......#####\n");
123838 - if(padapter->HalFunc.silentreset)
123839 - padapter->HalFunc.silentreset(padapter);
123840 + DBG_871X("###### silent reset test.......#####\n");
123841 + rtw_hal_sreset_reset(padapter);
123842 + } else {
123843 + sreset_set_trigger_point(padapter, extra_arg);
123844 }
123845
123846 }
123847 break;
123848 - case 0x12:
123849 + case 0x15:
123850 {
123851 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
123852 - DBG_8192C("==>silent resete cnts:%d\n",pwrpriv->ips_enter_cnts);
123853 + DBG_871X("==>silent resete cnts:%d\n",pwrpriv->ips_enter_cnts);
123854 }
123855 break;
123856
123857 #endif
123858
123859 case 0x10:// driver version display
123860 - DBG_8192C("rtw driver version=%s\n", DRIVERVERSION);
123861 + DBG_871X("rtw driver version=%s\n", DRIVERVERSION);
123862 break;
123863 case 0x11:
123864 {
123865 - DBG_8192C("turn %s Rx RSSI display function\n",(extra_arg==1)?"on":"off");
123866 + DBG_871X("turn %s Rx RSSI display function\n",(extra_arg==1)?"on":"off");
123867 padapter->bRxRSSIDisplay = extra_arg ;
123868 }
123869 break;
123870 + case 0x12: //set rx_stbc
123871 + {
123872 + struct registry_priv *pregpriv = &padapter->registrypriv;
123873 + // 0: disable, bit(0):enable 2.4g, bit(1):enable 5g, 0x3: enable both 2.4g and 5g
123874 + //default is set to enable 2.4GHZ for IOT issue with bufflao's AP at 5GHZ
123875 + if( pregpriv && (extra_arg == 0 || extra_arg == 1|| extra_arg == 2 || extra_arg == 3))
123876 + {
123877 + pregpriv->rx_stbc= extra_arg;
123878 + DBG_871X("set rx_stbc=%d\n",pregpriv->rx_stbc);
123879 + }
123880 + else
123881 + DBG_871X("get rx_stbc=%d\n",pregpriv->rx_stbc);
123882 +
123883 + }
123884 + break;
123885 + case 0x13: //set ampdu_enable
123886 + {
123887 + struct registry_priv *pregpriv = &padapter->registrypriv;
123888 + // 0: disable, 0x1:enable (but wifi_spec should be 0), 0x2: force enable (don't care wifi_spec)
123889 + if( pregpriv && extra_arg >= 0 && extra_arg < 3 )
123890 + {
123891 + pregpriv->ampdu_enable= extra_arg;
123892 + DBG_871X("set ampdu_enable=%d\n",pregpriv->ampdu_enable);
123893 + }
123894 + else
123895 + DBG_871X("get ampdu_enable=%d\n",pregpriv->ampdu_enable);
123896 +
123897 + }
123898 + break;
123899 + case 0x14: //get wifi_spec
123900 + {
123901 + struct registry_priv *pregpriv = &padapter->registrypriv;
123902 + DBG_871X("get wifi_spec=%d\n",pregpriv->wifi_spec);
123903 +
123904 + }
123905 + break;
123906 + case 0x22:
123907 + {
123908 + DBG_871X("turn %s the ForceWriteInitGain Variable\n",(extra_arg==1)?"on":"off");
123909 + padapter->bForceWriteInitGain = extra_arg;
123910 + break;
123911 + }
123912 + case 0x23:
123913 + {
123914 + DBG_871X("turn %s the bNotifyChannelChange Variable\n",(extra_arg==1)?"on":"off");
123915 + padapter->bNotifyChannelChange = extra_arg;
123916 + break;
123917 + }
123918 + case 0x24:
123919 + {
123920 +#ifdef CONFIG_P2P
123921 + DBG_871X("turn %s the bShowGetP2PState Variable\n",(extra_arg==1)?"on":"off");
123922 + padapter->bShowGetP2PState = extra_arg;
123923 +#endif // CONFIG_P2P
123924 + break;
123925 + }
123926 #if 1
123927 case 0xdd://registers dump , 0 for mac reg,1 for bb reg, 2 for rf reg
123928 {
123929 @@ -5523,15 +7014,15 @@ static int rtw_dbg_port(struct net_device *dev,
123930 u8 dm_flag;
123931
123932 if(0xf==extra_arg){
123933 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_DBG_DM_FUNC,&dm_flag);
123934 - DBG_8192C(" === DMFlag(0x%02x) === \n",dm_flag);
123935 - DBG_8192C("extra_arg = 0 - disable all dynamic func \n");
123936 - DBG_8192C("extra_arg = 1 - disable DIG- BIT(0)\n");
123937 - DBG_8192C("extra_arg = 2 - disable High power - BIT(1)\n");
123938 - DBG_8192C("extra_arg = 3 - disable tx power tracking - BIT(2)\n");
123939 - DBG_8192C("extra_arg = 4 - disable BT coexistence - BIT(3)\n");
123940 - DBG_8192C("extra_arg = 5 - disable antenna diversity - BIT(4)\n");
123941 - DBG_8192C("extra_arg = 6 - enable all dynamic func \n");
123942 + rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC,&dm_flag);
123943 + DBG_871X(" === DMFlag(0x%02x) === \n",dm_flag);
123944 + DBG_871X("extra_arg = 0 - disable all dynamic func \n");
123945 + DBG_871X("extra_arg = 1 - disable DIG- BIT(0)\n");
123946 + DBG_871X("extra_arg = 2 - disable High power - BIT(1)\n");
123947 + DBG_871X("extra_arg = 3 - disable tx power tracking - BIT(2)\n");
123948 + DBG_871X("extra_arg = 4 - disable BT coexistence - BIT(3)\n");
123949 + DBG_871X("extra_arg = 5 - disable antenna diversity - BIT(4)\n");
123950 + DBG_871X("extra_arg = 6 - enable all dynamic func \n");
123951 }
123952 else{
123953 /* extra_arg = 0 - disable all dynamic func
123954 @@ -5539,56 +7030,56 @@ static int rtw_dbg_port(struct net_device *dev,
123955 extra_arg = 2 - disable tx power tracking
123956 extra_arg = 3 - turn on all dynamic func
123957 */
123958 - padapter->HalFunc.SetHalDefVarHandler(padapter, HAL_DEF_DBG_DM_FUNC, &(extra_arg));
123959 - padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_DBG_DM_FUNC,&dm_flag);
123960 - DBG_8192C(" === DMFlag(0x%02x) === \n",dm_flag);
123961 + rtw_hal_set_def_var(padapter, HAL_DEF_DBG_DM_FUNC, &(extra_arg));
123962 + rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC,&dm_flag);
123963 + DBG_871X(" === DMFlag(0x%02x) === \n",dm_flag);
123964 }
123965 }
123966 break;
123967
123968 case 0xfd:
123969 rtw_write8(padapter, 0xc50, arg);
123970 - DBG_8192C("wr(0xc50)=0x%x\n", rtw_read8(padapter, 0xc50));
123971 + DBG_871X("wr(0xc50)=0x%x\n", rtw_read8(padapter, 0xc50));
123972 rtw_write8(padapter, 0xc58, arg);
123973 - DBG_8192C("wr(0xc58)=0x%x\n", rtw_read8(padapter, 0xc58));
123974 + DBG_871X("wr(0xc58)=0x%x\n", rtw_read8(padapter, 0xc58));
123975 break;
123976 case 0xfe:
123977 - DBG_8192C("rd(0xc50)=0x%x\n", rtw_read8(padapter, 0xc50));
123978 - DBG_8192C("rd(0xc58)=0x%x\n", rtw_read8(padapter, 0xc58));
123979 + DBG_871X("rd(0xc50)=0x%x\n", rtw_read8(padapter, 0xc50));
123980 + DBG_871X("rd(0xc58)=0x%x\n", rtw_read8(padapter, 0xc58));
123981 break;
123982 case 0xff:
123983 {
123984 - DBG_8192C("dbg(0x210)=0x%x\n", rtw_read32(padapter, 0x210));
123985 - DBG_8192C("dbg(0x608)=0x%x\n", rtw_read32(padapter, 0x608));
123986 - DBG_8192C("dbg(0x280)=0x%x\n", rtw_read32(padapter, 0x280));
123987 - DBG_8192C("dbg(0x284)=0x%x\n", rtw_read32(padapter, 0x284));
123988 - DBG_8192C("dbg(0x288)=0x%x\n", rtw_read32(padapter, 0x288));
123989 + DBG_871X("dbg(0x210)=0x%x\n", rtw_read32(padapter, 0x210));
123990 + DBG_871X("dbg(0x608)=0x%x\n", rtw_read32(padapter, 0x608));
123991 + DBG_871X("dbg(0x280)=0x%x\n", rtw_read32(padapter, 0x280));
123992 + DBG_871X("dbg(0x284)=0x%x\n", rtw_read32(padapter, 0x284));
123993 + DBG_871X("dbg(0x288)=0x%x\n", rtw_read32(padapter, 0x288));
123994
123995 - DBG_8192C("dbg(0x664)=0x%x\n", rtw_read32(padapter, 0x664));
123996 + DBG_871X("dbg(0x664)=0x%x\n", rtw_read32(padapter, 0x664));
123997
123998
123999 - DBG_8192C("\n");
124000 + DBG_871X("\n");
124001
124002 - DBG_8192C("dbg(0x430)=0x%x\n", rtw_read32(padapter, 0x430));
124003 - DBG_8192C("dbg(0x438)=0x%x\n", rtw_read32(padapter, 0x438));
124004 + DBG_871X("dbg(0x430)=0x%x\n", rtw_read32(padapter, 0x430));
124005 + DBG_871X("dbg(0x438)=0x%x\n", rtw_read32(padapter, 0x438));
124006
124007 - DBG_8192C("dbg(0x440)=0x%x\n", rtw_read32(padapter, 0x440));
124008 + DBG_871X("dbg(0x440)=0x%x\n", rtw_read32(padapter, 0x440));
124009
124010 - DBG_8192C("dbg(0x458)=0x%x\n", rtw_read32(padapter, 0x458));
124011 + DBG_871X("dbg(0x458)=0x%x\n", rtw_read32(padapter, 0x458));
124012
124013 - DBG_8192C("dbg(0x484)=0x%x\n", rtw_read32(padapter, 0x484));
124014 - DBG_8192C("dbg(0x488)=0x%x\n", rtw_read32(padapter, 0x488));
124015 + DBG_871X("dbg(0x484)=0x%x\n", rtw_read32(padapter, 0x484));
124016 + DBG_871X("dbg(0x488)=0x%x\n", rtw_read32(padapter, 0x488));
124017
124018 - DBG_8192C("dbg(0x444)=0x%x\n", rtw_read32(padapter, 0x444));
124019 - DBG_8192C("dbg(0x448)=0x%x\n", rtw_read32(padapter, 0x448));
124020 - DBG_8192C("dbg(0x44c)=0x%x\n", rtw_read32(padapter, 0x44c));
124021 - DBG_8192C("dbg(0x450)=0x%x\n", rtw_read32(padapter, 0x450));
124022 + DBG_871X("dbg(0x444)=0x%x\n", rtw_read32(padapter, 0x444));
124023 + DBG_871X("dbg(0x448)=0x%x\n", rtw_read32(padapter, 0x448));
124024 + DBG_871X("dbg(0x44c)=0x%x\n", rtw_read32(padapter, 0x44c));
124025 + DBG_871X("dbg(0x450)=0x%x\n", rtw_read32(padapter, 0x450));
124026 }
124027 break;
124028 }
124029 break;
124030 default:
124031 - DBG_8192C("error dbg cmd!\n");
124032 + DBG_871X("error dbg cmd!\n");
124033 break;
124034 }
124035
124036 @@ -5688,7 +7179,7 @@ static int wpa_set_param(struct net_device *dev, u8 name, u32 value)
124037 case IEEE_PARAM_WPAX_SELECT:
124038
124039 // added for WPA2 mixed mode
124040 - //DBG_8192C(KERN_WARNING "------------------------>wpax value = %x\n", value);
124041 + //DBG_871X(KERN_WARNING "------------------------>wpax value = %x\n", value);
124042 /*
124043 spin_lock_irqsave(&ieee->wpax_suitlist_lock,flags);
124044 ieee->wpax_type_set = 1;
124045 @@ -5789,7 +7280,7 @@ static int wpa_supplicant_ioctl(struct net_device *dev, struct iw_point *p)
124046 break;
124047
124048 default:
124049 - DBG_8192C("Unknown WPA supplicant request: %d\n", param->cmd);
124050 + DBG_871X("Unknown WPA supplicant request: %d\n", param->cmd);
124051 ret = -EOPNOTSUPP;
124052 break;
124053
124054 @@ -5855,7 +7346,7 @@ static int set_group_key(_adapter *padapter, u8 *key, u8 alg, int keyid)
124055 struct cmd_priv *pcmdpriv=&(padapter->cmdpriv);
124056 int res=_SUCCESS;
124057
124058 - DBG_8192C("%s\n", __FUNCTION__);
124059 + DBG_871X("%s\n", __FUNCTION__);
124060
124061 pcmd = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
124062 if(pcmd==NULL){
124063 @@ -5872,6 +7363,8 @@ static int set_group_key(_adapter *padapter, u8 *key, u8 alg, int keyid)
124064 _rtw_memset(psetkeyparm, 0, sizeof(struct setkey_parm));
124065
124066 psetkeyparm->keyid=(u8)keyid;
124067 + if (is_wep_enc(alg))
124068 + padapter->securitypriv.key_mask |= BIT(psetkeyparm->keyid);
124069
124070 psetkeyparm->algorithm = alg;
124071
124072 @@ -5945,7 +7438,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124073 struct security_priv* psecuritypriv=&(padapter->securitypriv);
124074 struct sta_priv *pstapriv = &padapter->stapriv;
124075
124076 - DBG_8192C("%s\n", __FUNCTION__);
124077 + DBG_871X("%s\n", __FUNCTION__);
124078
124079 param->u.crypt.err = 0;
124080 param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0';
124081 @@ -5974,7 +7467,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124082 if(!psta)
124083 {
124084 //ret = -EINVAL;
124085 - DBG_8192C("rtw_set_encryption(), sta has already been removed or never been added\n");
124086 + DBG_871X("rtw_set_encryption(), sta has already been removed or never been added\n");
124087 goto exit;
124088 }
124089 }
124090 @@ -5983,7 +7476,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124091 {
124092 //todo:clear default encryption keys
124093
124094 - DBG_8192C("clear default encryption keys, keyid=%d\n", param->u.crypt.idx);
124095 + DBG_871X("clear default encryption keys, keyid=%d\n", param->u.crypt.idx);
124096
124097 goto exit;
124098 }
124099 @@ -5991,12 +7484,12 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124100
124101 if (strcmp(param->u.crypt.alg, "WEP") == 0 && (psta==NULL))
124102 {
124103 - DBG_8192C("r871x_set_encryption, crypt.alg = WEP\n");
124104 + DBG_871X("r871x_set_encryption, crypt.alg = WEP\n");
124105
124106 wep_key_idx = param->u.crypt.idx;
124107 wep_key_len = param->u.crypt.key_len;
124108
124109 - DBG_8192C("r871x_set_encryption, wep_key_idx=%d, len=%d\n", wep_key_idx, wep_key_len);
124110 + DBG_871X("r871x_set_encryption, wep_key_idx=%d, len=%d\n", wep_key_idx, wep_key_len);
124111
124112 if((wep_key_idx >= WEP_KEYS) || (wep_key_len<=0))
124113 {
124114 @@ -6011,7 +7504,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124115 wep_total_len = wep_key_len + FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial);
124116 pwep =(NDIS_802_11_WEP *)rtw_malloc(wep_total_len);
124117 if(pwep == NULL){
124118 - DBG_8192C(" r871x_set_encryption: pwep allocate fail !!!\n");
124119 + DBG_871X(" r871x_set_encryption: pwep allocate fail !!!\n");
124120 goto exit;
124121 }
124122
124123 @@ -6028,7 +7521,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124124
124125 if(param->u.crypt.set_tx)
124126 {
124127 - DBG_8192C("wep, set_tx=1\n");
124128 + DBG_871X("wep, set_tx=1\n");
124129
124130 psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
124131 psecuritypriv->dot11PrivacyAlgrthm=_WEP40_;
124132 @@ -6053,7 +7546,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124133 }
124134 else
124135 {
124136 - DBG_8192C("wep, set_tx=0\n");
124137 + DBG_871X("wep, set_tx=0\n");
124138
124139 //don't update "psecuritypriv->dot11PrivacyAlgrthm" and
124140 //"psecuritypriv->dot11PrivacyKeyIndex=keyid", but can rtw_set_key to cam
124141 @@ -6077,7 +7570,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124142 {
124143 if(strcmp(param->u.crypt.alg, "WEP") == 0)
124144 {
124145 - DBG_8192C("%s, set group_key, WEP\n", __FUNCTION__);
124146 + DBG_871X("%s, set group_key, WEP\n", __FUNCTION__);
124147
124148 _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));
124149
124150 @@ -6090,7 +7583,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124151 }
124152 else if(strcmp(param->u.crypt.alg, "TKIP") == 0)
124153 {
124154 - DBG_8192C("%s, set group_key, TKIP\n", __FUNCTION__);
124155 + DBG_871X("%s, set group_key, TKIP\n", __FUNCTION__);
124156
124157 psecuritypriv->dot118021XGrpPrivacy = _TKIP_;
124158
124159 @@ -6106,7 +7599,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124160 }
124161 else if(strcmp(param->u.crypt.alg, "CCMP") == 0)
124162 {
124163 - DBG_8192C("%s, set group_key, CCMP\n", __FUNCTION__);
124164 + DBG_871X("%s, set group_key, CCMP\n", __FUNCTION__);
124165
124166 psecuritypriv->dot118021XGrpPrivacy = _AES_;
124167
124168 @@ -6114,7 +7607,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124169 }
124170 else
124171 {
124172 - DBG_8192C("%s, set group_key, none\n", __FUNCTION__);
124173 + DBG_871X("%s, set group_key, none\n", __FUNCTION__);
124174
124175 psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
124176 }
124177 @@ -6150,7 +7643,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124178
124179 if(strcmp(param->u.crypt.alg, "WEP") == 0)
124180 {
124181 - DBG_8192C("%s, set pairwise key, WEP\n", __FUNCTION__);
124182 + DBG_871X("%s, set pairwise key, WEP\n", __FUNCTION__);
124183
124184 psta->dot118021XPrivacy = _WEP40_;
124185 if(param->u.crypt.key_len==13)
124186 @@ -6160,7 +7653,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124187 }
124188 else if(strcmp(param->u.crypt.alg, "TKIP") == 0)
124189 {
124190 - DBG_8192C("%s, set pairwise key, TKIP\n", __FUNCTION__);
124191 + DBG_871X("%s, set pairwise key, TKIP\n", __FUNCTION__);
124192
124193 psta->dot118021XPrivacy = _TKIP_;
124194
124195 @@ -6175,13 +7668,13 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
124196 else if(strcmp(param->u.crypt.alg, "CCMP") == 0)
124197 {
124198
124199 - DBG_8192C("%s, set pairwise key, CCMP\n", __FUNCTION__);
124200 + DBG_871X("%s, set pairwise key, CCMP\n", __FUNCTION__);
124201
124202 psta->dot118021XPrivacy = _AES_;
124203 }
124204 else
124205 {
124206 - DBG_8192C("%s, set pairwise key, none\n", __FUNCTION__);
124207 + DBG_871X("%s, set pairwise key, none\n", __FUNCTION__);
124208
124209 psta->dot118021XPrivacy = _NO_PRIVACY_;
124210 }
124211 @@ -6253,7 +7746,7 @@ exit:
124212
124213 if(pwep)
124214 {
124215 - rtw_mfree((u8 *)pwep, wep_total_len);
124216 + rtw_mfree((u8 *)pwep,wep_total_len);
124217 }
124218
124219 return ret;
124220 @@ -6269,25 +7762,23 @@ static int rtw_set_beacon(struct net_device *dev, struct ieee_param *param, int
124221 unsigned char *pbuf = param->u.bcn_ie.buf;
124222
124223
124224 - DBG_8192C("%s, len=%d\n", __FUNCTION__, len);
124225 + DBG_871X("%s, len=%d\n", __FUNCTION__, len);
124226
124227 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
124228 return -EINVAL;
124229
124230 _rtw_memcpy(&pstapriv->max_num_sta, param->u.bcn_ie.reserved, 2);
124231 -#ifdef SUPPORT_64_STA
124232 - pstapriv->max_num_sta = NUM_STA;
124233 -#else //SUPPORT_64_STA
124234 +
124235 if((pstapriv->max_num_sta>NUM_STA) || (pstapriv->max_num_sta<=0))
124236 pstapriv->max_num_sta = NUM_STA;
124237 -#endif//SUPPORT_64_STA
124238 +
124239
124240 if(rtw_check_beacon_data(padapter, pbuf, (len-12-2)) == _SUCCESS)// 12 = param header, 2:no packed
124241 ret = 0;
124242 else
124243 ret = -EINVAL;
124244
124245 -
124246 +
124247 return ret;
124248
124249 }
124250 @@ -6301,40 +7792,10 @@ static int rtw_hostapd_sta_flush(struct net_device *dev)
124251 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
124252 //struct sta_priv *pstapriv = &padapter->stapriv;
124253
124254 - DBG_8192C("%s\n", __FUNCTION__);
124255 + DBG_871X("%s\n", __FUNCTION__);
124256
124257 flush_all_cam_entry(padapter); //clear CAM
124258
124259 -#if 0
124260 - phead = &pstapriv->asoc_list;
124261 - plist = get_next(phead);
124262 -
124263 - //free sta asoc_queue
124264 - while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
124265 - {
124266 - psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
124267 -
124268 - plist = get_next(plist);
124269 -
124270 - rtw_list_delete(&psta->asoc_list);
124271 -
124272 - //tear down Rx AMPDU
124273 - send_delba(padapter, 0, psta->hwaddr);// recipient
124274 -
124275 - //tear down TX AMPDU
124276 - send_delba(padapter, 1, psta->hwaddr);// // originator
124277 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
124278 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
124279 -
124280 - issue_deauth(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
124281 -
124282 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
124283 - rtw_free_stainfo(padapter, psta);
124284 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
124285 -
124286 - }
124287 -#endif
124288 -
124289 ret = rtw_sta_flush(padapter);
124290
124291 return ret;
124292 @@ -6350,7 +7811,7 @@ static int rtw_add_sta(struct net_device *dev, struct ieee_param *param)
124293 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124294 struct sta_priv *pstapriv = &padapter->stapriv;
124295
124296 - DBG_8192C("rtw_add_sta(aid=%d)=" MAC_FMT "\n", param->u.add_sta.aid, MAC_ARG(param->sta_addr));
124297 + DBG_871X("rtw_add_sta(aid=%d)=" MAC_FMT "\n", param->u.add_sta.aid, MAC_ARG(param->sta_addr));
124298
124299 if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != _TRUE)
124300 {
124301 @@ -6368,7 +7829,7 @@ static int rtw_add_sta(struct net_device *dev, struct ieee_param *param)
124302 psta = rtw_get_stainfo(pstapriv, param->sta_addr);
124303 if(psta)
124304 {
124305 - DBG_8192C("rtw_add_sta(), free has been added psta=%p\n", psta);
124306 + DBG_871X("rtw_add_sta(), free has been added psta=%p\n", psta);
124307 _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
124308 rtw_free_stainfo(padapter, psta);
124309 _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
124310 @@ -6382,7 +7843,7 @@ static int rtw_add_sta(struct net_device *dev, struct ieee_param *param)
124311 {
124312 int flags = param->u.add_sta.flags;
124313
124314 - //DBG_8192C("rtw_add_sta(), init sta's variables, psta=%p\n", psta);
124315 + //DBG_871X("rtw_add_sta(), init sta's variables, psta=%p\n", psta);
124316
124317 psta->aid = param->u.add_sta.aid;//aid=1~2007
124318
124319 @@ -6423,82 +7884,156 @@ static int rtw_add_sta(struct net_device *dev, struct ieee_param *param)
124320 }
124321 else
124322 {
124323 - ret = -ENOMEM;
124324 - }
124325 + ret = -ENOMEM;
124326 + }
124327 +
124328 + return ret;
124329 +
124330 +}
124331 +
124332 +static int rtw_del_sta(struct net_device *dev, struct ieee_param *param)
124333 +{
124334 + _irqL irqL;
124335 + int ret=0;
124336 + struct sta_info *psta = NULL;
124337 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
124338 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124339 + struct sta_priv *pstapriv = &padapter->stapriv;
124340 +
124341 + DBG_871X("rtw_del_sta=" MAC_FMT "\n", MAC_ARG(param->sta_addr));
124342 +
124343 + if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != _TRUE)
124344 + {
124345 + return -EINVAL;
124346 + }
124347 +
124348 + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
124349 + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
124350 + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
124351 + {
124352 + return -EINVAL;
124353 + }
124354 +
124355 + psta = rtw_get_stainfo(pstapriv, param->sta_addr);
124356 + if(psta)
124357 + {
124358 + u8 updated=_FALSE;
124359 +
124360 + //DBG_871X("free psta=%p, aid=%d\n", psta, psta->aid);
124361 +
124362 + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
124363 + if(rtw_is_list_empty(&psta->asoc_list)==_FALSE)
124364 + {
124365 + rtw_list_delete(&psta->asoc_list);
124366 + pstapriv->asoc_list_cnt--;
124367 + updated = ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_DEAUTH_LEAVING);
124368 +
124369 + }
124370 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
124371 +
124372 + associated_clients_update(padapter, updated);
124373 +
124374 + psta = NULL;
124375 +
124376 + }
124377 + else
124378 + {
124379 + DBG_871X("rtw_del_sta(), sta has already been removed or never been added\n");
124380 +
124381 + //ret = -1;
124382 + }
124383 +
124384
124385 return ret;
124386
124387 }
124388
124389 -static int rtw_del_sta(struct net_device *dev, struct ieee_param *param)
124390 +static int rtw_ioctl_get_sta_data(struct net_device *dev, struct ieee_param *param, int len)
124391 {
124392 - _irqL irqL;
124393 int ret=0;
124394 struct sta_info *psta = NULL;
124395 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
124396 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124397 struct sta_priv *pstapriv = &padapter->stapriv;
124398 + struct ieee_param_ex *param_ex = (struct ieee_param_ex *)param;
124399 + struct sta_data *psta_data = (struct sta_data *)param_ex->data;
124400 +
124401 + DBG_871X("rtw_ioctl_get_sta_info, sta_addr: " MAC_FMT "\n", MAC_ARG(param_ex->sta_addr));
124402
124403 - DBG_8192C("rtw_del_sta=" MAC_FMT "\n", MAC_ARG(param->sta_addr));
124404 -
124405 if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != _TRUE)
124406 {
124407 return -EINVAL;
124408 }
124409
124410 - if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
124411 - param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
124412 - param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
124413 + if (param_ex->sta_addr[0] == 0xff && param_ex->sta_addr[1] == 0xff &&
124414 + param_ex->sta_addr[2] == 0xff && param_ex->sta_addr[3] == 0xff &&
124415 + param_ex->sta_addr[4] == 0xff && param_ex->sta_addr[5] == 0xff)
124416 {
124417 return -EINVAL;
124418 }
124419
124420 - psta = rtw_get_stainfo(pstapriv, param->sta_addr);
124421 + psta = rtw_get_stainfo(pstapriv, param_ex->sta_addr);
124422 if(psta)
124423 {
124424 - //DBG_8192C("free psta=%p, aid=%d\n", psta, psta->aid);
124425 -
124426 -#if 0
124427 - //tear down Rx AMPDU
124428 - send_delba(padapter, 0, psta->hwaddr);// recipient
124429 -
124430 - //tear down TX AMPDU
124431 - send_delba(padapter, 1, psta->hwaddr);// // originator
124432 - psta->htpriv.agg_enable_bitmap = 0x0;//reset
124433 - psta->htpriv.candidate_tid_bitmap = 0x0;//reset
124434 -
124435 - issue_deauth(padapter, psta->hwaddr, WLAN_REASON_DEAUTH_LEAVING);
124436 -
124437 - _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
124438 - rtw_free_stainfo(padapter, psta);
124439 - _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
124440 -
124441 - pstapriv->sta_dz_bitmap &=~BIT(psta->aid);
124442 - pstapriv->tim_bitmap &=~BIT(psta->aid);
124443 +#if 0
124444 + struct {
124445 + u16 aid;
124446 + u16 capability;
124447 + int flags;
124448 + u32 sta_set;
124449 + u8 tx_supp_rates[16];
124450 + u32 tx_supp_rates_len;
124451 + struct rtw_ieee80211_ht_cap ht_cap;
124452 + u64 rx_pkts;
124453 + u64 rx_bytes;
124454 + u64 rx_drops;
124455 + u64 tx_pkts;
124456 + u64 tx_bytes;
124457 + u64 tx_drops;
124458 + } get_sta;
124459 #endif
124460 + psta_data->aid = (u16)psta->aid;
124461 + psta_data->capability = psta->capability;
124462 + psta_data->flags = psta->flags;
124463
124464 - _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
124465 - if(rtw_is_list_empty(&psta->asoc_list)==_FALSE)
124466 - {
124467 - rtw_list_delete(&psta->asoc_list);
124468 - ap_free_sta(padapter, psta);
124469 +/*
124470 + nonerp_set : BIT(0)
124471 + no_short_slot_time_set : BIT(1)
124472 + no_short_preamble_set : BIT(2)
124473 + no_ht_gf_set : BIT(3)
124474 + no_ht_set : BIT(4)
124475 + ht_20mhz_set : BIT(5)
124476 +*/
124477
124478 - }
124479 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
124480 -
124481 - psta = NULL;
124482 + psta_data->sta_set =((psta->nonerp_set) |
124483 + (psta->no_short_slot_time_set <<1) |
124484 + (psta->no_short_preamble_set <<2) |
124485 + (psta->no_ht_gf_set <<3) |
124486 + (psta->no_ht_set <<4) |
124487 + (psta->ht_20mhz_set <<5));
124488 +
124489 + psta_data->tx_supp_rates_len = psta->bssratelen;
124490 + _rtw_memcpy(psta_data->tx_supp_rates, psta->bssrateset, psta->bssratelen);
124491 +
124492 + _rtw_memcpy(&psta_data->ht_cap, &psta->htpriv.ht_cap, sizeof(struct rtw_ieee80211_ht_cap));
124493 +
124494 + psta_data->rx_pkts = psta->sta_stats.rx_data_pkts;
124495 + psta_data->rx_bytes = psta->sta_stats.rx_bytes;
124496 + psta_data->rx_drops = psta->sta_stats.rx_drops;
124497 +
124498 + psta_data->tx_pkts = psta->sta_stats.tx_pkts;
124499 + psta_data->tx_bytes = psta->sta_stats.tx_bytes;
124500 + psta_data->tx_drops = psta->sta_stats.tx_drops;
124501
124502 +
124503 }
124504 else
124505 {
124506 - DBG_8192C("rtw_del_sta(), sta has already been removed or never been added\n");
124507 -
124508 - //ret = -1;
124509 + ret = -1;
124510 }
124511 -
124512 -
124513 +
124514 return ret;
124515 -
124516 +
124517 }
124518
124519 static int rtw_get_sta_wpaie(struct net_device *dev, struct ieee_param *param)
124520 @@ -6509,7 +8044,7 @@ static int rtw_get_sta_wpaie(struct net_device *dev, struct ieee_param *param)
124521 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124522 struct sta_priv *pstapriv = &padapter->stapriv;
124523
124524 - DBG_8192C("rtw_get_sta_wpaie, sta_addr: " MAC_FMT "\n", MAC_ARG(param->sta_addr));
124525 + DBG_871X("rtw_get_sta_wpaie, sta_addr: " MAC_FMT "\n", MAC_ARG(param->sta_addr));
124526
124527 if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != _TRUE)
124528 {
124529 @@ -6542,7 +8077,7 @@ static int rtw_get_sta_wpaie(struct net_device *dev, struct ieee_param *param)
124530 else
124531 {
124532 //ret = -1;
124533 - DBG_8192C("sta's wpa_ie is NONE\n");
124534 + DBG_871X("sta's wpa_ie is NONE\n");
124535 }
124536 }
124537 else
124538 @@ -6564,7 +8099,7 @@ static int rtw_set_wps_beacon(struct net_device *dev, struct ieee_param *param,
124539 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
124540 int ie_len;
124541
124542 - DBG_8192C("%s, len=%d\n", __FUNCTION__, len);
124543 + DBG_871X("%s, len=%d\n", __FUNCTION__, len);
124544
124545 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
124546 return -EINVAL;
124547 @@ -6583,7 +8118,7 @@ static int rtw_set_wps_beacon(struct net_device *dev, struct ieee_param *param,
124548 pmlmepriv->wps_beacon_ie = rtw_malloc(ie_len);
124549 pmlmepriv->wps_beacon_ie_len = ie_len;
124550 if ( pmlmepriv->wps_beacon_ie == NULL) {
124551 - DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
124552 + DBG_871X("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
124553 return -EINVAL;
124554 }
124555
124556 @@ -6607,7 +8142,7 @@ static int rtw_set_wps_probe_resp(struct net_device *dev, struct ieee_param *par
124557 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124558 int ie_len;
124559
124560 - DBG_8192C("%s, len=%d\n", __FUNCTION__, len);
124561 + DBG_871X("%s, len=%d\n", __FUNCTION__, len);
124562
124563 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
124564 return -EINVAL;
124565 @@ -6626,7 +8161,7 @@ static int rtw_set_wps_probe_resp(struct net_device *dev, struct ieee_param *par
124566 pmlmepriv->wps_probe_resp_ie = rtw_malloc(ie_len);
124567 pmlmepriv->wps_probe_resp_ie_len = ie_len;
124568 if ( pmlmepriv->wps_probe_resp_ie == NULL) {
124569 - DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
124570 + DBG_871X("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
124571 return -EINVAL;
124572 }
124573 _rtw_memcpy(pmlmepriv->wps_probe_resp_ie, param->u.bcn_ie.buf, ie_len);
124574 @@ -6637,38 +8172,6 @@ static int rtw_set_wps_probe_resp(struct net_device *dev, struct ieee_param *par
124575
124576 }
124577
124578 -static int rtw_set_hidden_ssid(struct net_device *dev, struct ieee_param *param, int len)
124579 -{
124580 - int ret=0;
124581 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
124582 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124583 - struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
124584 - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
124585 -
124586 - u8 value;
124587 -
124588 - if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
124589 - return -EINVAL;
124590 -
124591 - if(param->u.wpa_param.name != 0) //dummy test...
124592 - {
124593 - DBG_871X("%s name(%u) != 0\n", __FUNCTION__, param->u.wpa_param.name);
124594 - }
124595 -
124596 - value = param->u.wpa_param.value;
124597 -
124598 - //use the same definition of hostapd's ignore_broadcast_ssid
124599 - if(value != 1 && value != 2)
124600 - value = 0;
124601 -
124602 - DBG_871X("%s value(%u)\n", __FUNCTION__, value);
124603 - pmlmeinfo->hidden_ssid_mode = value;
124604 -
124605 - return ret;
124606 -
124607 -}
124608 -
124609 -
124610 static int rtw_set_wps_assoc_resp(struct net_device *dev, struct ieee_param *param, int len)
124611 {
124612 int ret=0;
124613 @@ -6676,7 +8179,7 @@ static int rtw_set_wps_assoc_resp(struct net_device *dev, struct ieee_param *par
124614 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124615 int ie_len;
124616
124617 - DBG_8192C("%s, len=%d\n", __FUNCTION__, len);
124618 + DBG_871X("%s, len=%d\n", __FUNCTION__, len);
124619
124620 if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
124621 return -EINVAL;
124622 @@ -6695,7 +8198,7 @@ static int rtw_set_wps_assoc_resp(struct net_device *dev, struct ieee_param *par
124623 pmlmepriv->wps_assoc_resp_ie = rtw_malloc(ie_len);
124624 pmlmepriv->wps_assoc_resp_ie_len = ie_len;
124625 if ( pmlmepriv->wps_assoc_resp_ie == NULL) {
124626 - DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
124627 + DBG_871X("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
124628 return -EINVAL;
124629 }
124630
124631 @@ -6707,13 +8210,125 @@ static int rtw_set_wps_assoc_resp(struct net_device *dev, struct ieee_param *par
124632
124633 }
124634
124635 +static int rtw_set_hidden_ssid(struct net_device *dev, struct ieee_param *param, int len)
124636 +{
124637 + int ret=0;
124638 + _adapter *adapter = (_adapter *)rtw_netdev_priv(dev);
124639 + struct mlme_priv *mlmepriv = &(adapter->mlmepriv);
124640 + struct mlme_ext_priv *mlmeext = &(adapter->mlmeextpriv);
124641 + struct mlme_ext_info *mlmeinfo = &(mlmeext->mlmext_info);
124642 + int ie_len;
124643 + u8 *ssid_ie;
124644 + char ssid[NDIS_802_11_LENGTH_SSID + 1];
124645 + sint ssid_len;
124646 + u8 ignore_broadcast_ssid;
124647 +
124648 + if(check_fwstate(mlmepriv, WIFI_AP_STATE) != _TRUE)
124649 + return -EPERM;
124650 +
124651 + if (param->u.bcn_ie.reserved[0] != 0xea)
124652 + return -EINVAL;
124653 +
124654 + mlmeinfo->hidden_ssid_mode = ignore_broadcast_ssid = param->u.bcn_ie.reserved[1];
124655 +
124656 + ie_len = len-12-2;// 12 = param header, 2:no packed
124657 + ssid_ie = rtw_get_ie(param->u.bcn_ie.buf, WLAN_EID_SSID, &ssid_len, ie_len);
124658 +
124659 + if (ssid_ie && ssid_len) {
124660 + WLAN_BSSID_EX *pbss_network = &mlmepriv->cur_network.network;
124661 + WLAN_BSSID_EX *pbss_network_ext = &mlmeinfo->network;
124662 +
124663 + _rtw_memcpy(ssid, ssid_ie+2, ssid_len);
124664 + ssid[ssid_len>NDIS_802_11_LENGTH_SSID?NDIS_802_11_LENGTH_SSID:ssid_len] = 0x0;
124665 +
124666 + if(0)
124667 + DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%d), from ie:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),
124668 + ssid, ssid_len,
124669 + pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,
124670 + pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);
124671 +
124672 + _rtw_memcpy(pbss_network->Ssid.Ssid, (void *)ssid, ssid_len);
124673 + pbss_network->Ssid.SsidLength = ssid_len;
124674 + _rtw_memcpy(pbss_network_ext->Ssid.Ssid, (void *)ssid, ssid_len);
124675 + pbss_network_ext->Ssid.SsidLength = ssid_len;
124676 +
124677 + if(0)
124678 + DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),
124679 + pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,
124680 + pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);
124681 + }
124682 +
124683 + DBG_871X(FUNC_ADPT_FMT" ignore_broadcast_ssid:%d, %s,%d\n", FUNC_ADPT_ARG(adapter),
124684 + ignore_broadcast_ssid, ssid, ssid_len);
124685 +
124686 + return ret;
124687 +}
124688 +
124689 +static int rtw_ioctl_acl_remove_sta(struct net_device *dev, struct ieee_param *param, int len)
124690 +{
124691 + int ret=0;
124692 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
124693 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124694 +
124695 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
124696 + return -EINVAL;
124697 +
124698 + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
124699 + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
124700 + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
124701 + {
124702 + return -EINVAL;
124703 + }
124704 +
124705 + ret = rtw_acl_remove_sta(padapter, param->sta_addr);
124706 +
124707 + return ret;
124708 +
124709 +}
124710 +
124711 +static int rtw_ioctl_acl_add_sta(struct net_device *dev, struct ieee_param *param, int len)
124712 +{
124713 + int ret=0;
124714 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
124715 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124716 +
124717 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
124718 + return -EINVAL;
124719 +
124720 + if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
124721 + param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
124722 + param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
124723 + {
124724 + return -EINVAL;
124725 + }
124726 +
124727 + ret = rtw_acl_add_sta(padapter, param->sta_addr);
124728 +
124729 + return ret;
124730 +
124731 +}
124732 +
124733 +static int rtw_ioctl_set_macaddr_acl(struct net_device *dev, struct ieee_param *param, int len)
124734 +{
124735 + int ret=0;
124736 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
124737 + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124738 +
124739 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
124740 + return -EINVAL;
124741 +
124742 + rtw_set_macaddr_acl(padapter, param->u.mlme.command);
124743 +
124744 + return ret;
124745 +}
124746 +
124747 static int rtw_hostapd_ioctl(struct net_device *dev, struct iw_point *p)
124748 {
124749 struct ieee_param *param;
124750 int ret=0;
124751 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
124752
124753 - //DBG_8192C("%s\n", __FUNCTION__);
124754 + //DBG_871X("%s\n", __FUNCTION__);
124755
124756 /*
124757 * this function is expect to call in master mode, which allows no power saving
124758 @@ -6746,7 +8361,7 @@ static int rtw_hostapd_ioctl(struct net_device *dev, struct iw_point *p)
124759 goto out;
124760 }
124761
124762 - //DBG_8192C("%s, cmd=%d\n", __FUNCTION__, param->cmd);
124763 + //DBG_871X("%s, cmd=%d\n", __FUNCTION__, param->cmd);
124764
124765 switch (param->cmd)
124766 {
124767 @@ -6809,9 +8424,33 @@ static int rtw_hostapd_ioctl(struct net_device *dev, struct iw_point *p)
124768 ret = rtw_set_hidden_ssid(dev, param, p->length);
124769
124770 break;
124771 +
124772 + case RTL871X_HOSTAPD_GET_INFO_STA:
124773 +
124774 + ret = rtw_ioctl_get_sta_data(dev, param, p->length);
124775 +
124776 + break;
124777 +
124778 + case RTL871X_HOSTAPD_SET_MACADDR_ACL:
124779 +
124780 + ret = rtw_ioctl_set_macaddr_acl(dev, param, p->length);
124781 +
124782 + break;
124783 +
124784 + case RTL871X_HOSTAPD_ACL_ADD_STA:
124785 +
124786 + ret = rtw_ioctl_acl_add_sta(dev, param, p->length);
124787 +
124788 + break;
124789 +
124790 + case RTL871X_HOSTAPD_ACL_REMOVE_STA:
124791 +
124792 + ret = rtw_ioctl_acl_remove_sta(dev, param, p->length);
124793 +
124794 + break;
124795
124796 default:
124797 - DBG_8192C("Unknown hostapd request: %d\n", param->cmd);
124798 + DBG_871X("Unknown hostapd request: %d\n", param->cmd);
124799 ret = -EOPNOTSUPP;
124800 break;
124801
124802 @@ -6850,7 +8489,8 @@ static int rtw_wx_set_priv(struct net_device *dev,
124803 struct iw_point *dwrq = (struct iw_point*)awrq;
124804
124805 //RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_notice_, ("+rtw_wx_set_priv\n"));
124806 -
124807 + if(dwrq->length == 0)
124808 + return -EFAULT;
124809 len = dwrq->length;
124810 if (!(ext = rtw_vmalloc(len)))
124811 return -ENOMEM;
124812 @@ -6952,16 +8592,7 @@ static int rtw_wx_set_priv(struct net_device *dev,
124813 break;
124814 case ANDROID_WIFI_CMD_LINKSPEED :
124815 {
124816 - union iwreq_data wrqd;
124817 - int ret_inner;
124818 - int mbps;
124819 -
124820 - if( 0!=(ret_inner=rtw_wx_get_rate(dev, info, &wrqd, extra)) ){
124821 - mbps=0;
124822 - } else {
124823 - mbps=wrqd.bitrate.value / 1000000;
124824 - }
124825 -
124826 + u16 mbps = rtw_get_cur_max_rate(padapter)/10;
124827 sprintf(ext, "LINKSPEED %d", mbps);
124828 }
124829 break;
124830 @@ -6970,15 +8601,13 @@ static int rtw_wx_set_priv(struct net_device *dev,
124831 break;
124832 case ANDROID_WIFI_CMD_SCAN_ACTIVE :
124833 {
124834 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124835 - pmlmepriv->scan_mode=SCAN_ACTIVE;
124836 + //rtw_set_scan_mode(padapter, SCAN_ACTIVE);
124837 sprintf(ext, "OK");
124838 }
124839 break;
124840 case ANDROID_WIFI_CMD_SCAN_PASSIVE :
124841 {
124842 - struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
124843 - pmlmepriv->scan_mode=SCAN_PASSIVE;
124844 + //rtw_set_scan_mode(padapter, SCAN_PASSIVE);
124845 sprintf(ext, "OK");
124846 }
124847 break;
124848 @@ -6986,33 +8615,11 @@ static int rtw_wx_set_priv(struct net_device *dev,
124849 case ANDROID_WIFI_CMD_COUNTRY :
124850 {
124851 char country_code[10];
124852 - int channel_plan = RT_CHANNEL_DOMAIN_FCC;
124853 - union iwreq_data wrqd;
124854 - int ret_inner;
124855 -
124856 - sscanf(ext,"%*s %s",country_code);
124857 -
124858 - if(0 == strcmp(country_code, "US"))
124859 - channel_plan = RT_CHANNEL_DOMAIN_FCC;
124860 - else if(0 == strcmp(country_code, "EU"))
124861 - channel_plan = RT_CHANNEL_DOMAIN_ETSI;
124862 - else if(0 == strcmp(country_code, "JP"))
124863 - channel_plan = RT_CHANNEL_DOMAIN_MKK;
124864 - else if(0 == strcmp(country_code, "CN"))
124865 - channel_plan = RT_CHANNEL_DOMAIN_CHINA;
124866 - else
124867 - DBG_871X("%s unknown country_code:%s, set to RT_CHANNEL_DOMAIN_FCC\n", __FUNCTION__, country_code);
124868 -
124869 - _rtw_memcpy(&wrqd, &channel_plan, sizeof(int));
124870 -
124871 - if( 0!=(ret_inner=rtw_wx_set_channel_plan(dev, info, &wrqd, extra)) ){
124872 - DBG_871X("%s rtw_wx_set_channel_plan error\n", __FUNCTION__);
124873 - }
124874 -
124875 + sscanf(ext, "%*s %s", country_code);
124876 + rtw_set_country(padapter, country_code);
124877 sprintf(ext, "OK");
124878 }
124879 break;
124880 -
124881 default :
124882 #ifdef CONFIG_DEBUG_RTW_WX_SET_PRIV
124883 DBG_871X("%s: %s unknowned req=%s\n", __FUNCTION__,
124884 @@ -7069,7 +8676,7 @@ static int rtw_mp_efuse_get(struct net_device *dev,
124885 return -EFAULT;
124886
124887 pch = extra;
124888 - DBG_8192C("%s: in=%s\n", __func__, extra);
124889 + DBG_871X("%s: in=%s\n", __func__, extra);
124890
124891 i=0;
124892 //mac 16 "00e04c871200" rmap,00,2
124893 @@ -7082,38 +8689,38 @@ static int rtw_mp_efuse_get(struct net_device *dev,
124894
124895 if ( strcmp(tmp[0],"realmap") == 0 ) {
124896
124897 - DBG_8192C("strcmp OK = %s \n" ,tmp[0]);
124898 + DBG_871X("strcmp OK = %s \n" ,tmp[0]);
124899
124900 mapLen = EFUSE_MAP_SIZE;
124901
124902 if (rtw_efuse_map_read(padapter, 0, mapLen, data) == _SUCCESS){
124903 - DBG_8192C("\t rtw_efuse_map_read \n");
124904 + DBG_871X("\t rtw_efuse_map_read \n");
124905 }else {
124906 - DBG_8192C("\t rtw_efuse_map_read : Fail \n");
124907 + DBG_871X("\t rtw_efuse_map_read : Fail \n");
124908 return -EFAULT;
124909 }
124910 _rtw_memset(extra, '\0', sizeof(extra));
124911 - DBG_8192C("\tOFFSET\tVALUE(hex)\n");
124912 + DBG_871X("\tOFFSET\tVALUE(hex)\n");
124913 sprintf(extra, "%s \n", extra);
124914 for ( i = 0; i < EFUSE_MAP_SIZE; i += 16 )
124915 {
124916 - DBG_8192C("\t0x%02x\t", i);
124917 + DBG_871X("\t0x%02x\t", i);
124918 sprintf(extra, "%s \t0x%02x\t", extra,i);
124919 for (j = 0; j < 8; j++)
124920 {
124921 - DBG_8192C("%02X ", data[i+j]);
124922 + DBG_871X("%02X ", data[i+j]);
124923 sprintf(extra, "%s %02X", extra, data[i+j]);
124924 }
124925 - DBG_8192C("\t");
124926 + DBG_871X("\t");
124927 sprintf(extra,"%s\t",extra);
124928 for (; j < 16; j++){
124929 - DBG_8192C("%02X ", data[i+j]);
124930 + DBG_871X("%02X ", data[i+j]);
124931 sprintf(extra, "%s %02X", extra, data[i+j]);
124932 }
124933 - DBG_8192C("\n");
124934 + DBG_871X("\n");
124935 sprintf(extra,"%s\n",extra);
124936 }
124937 - DBG_8192C("\n");
124938 + DBG_871X("\n");
124939 wrqu->length = strlen(extra);
124940
124941 return 0;
124942 @@ -7123,39 +8730,39 @@ static int rtw_mp_efuse_get(struct net_device *dev,
124943 // rmap addr cnts
124944 addr = simple_strtoul(tmp[1], &ptmp, 16);
124945
124946 - DBG_8192C("addr = %x \n" ,addr);
124947 + DBG_871X("addr = %x \n" ,addr);
124948
124949 cnts=simple_strtoul(tmp[2], &ptmp,10);
124950 if(cnts==0) return -EINVAL;
124951
124952 - DBG_8192C("cnts = %d \n" ,cnts);
124953 + DBG_871X("cnts = %d \n" ,cnts);
124954 //_rtw_memset(extra, '\0', wrqu->data.length);
124955
124956 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
124957 if ((addr + cnts) > max_available_size) {
124958 - DBG_8192C("(addr + cnts parameter error \n");
124959 + DBG_871X("(addr + cnts parameter error \n");
124960 return -EFAULT;
124961 }
124962
124963 if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL)
124964 {
124965 - DBG_8192C("rtw_efuse_access error \n");
124966 + DBG_871X("rtw_efuse_access error \n");
124967 }
124968 else{
124969 - DBG_8192C("rtw_efuse_access ok \n");
124970 + DBG_871X("rtw_efuse_access ok \n");
124971 }
124972
124973 _rtw_memset(extra, '\0', sizeof(extra));
124974 for ( i = 0; i < cnts; i ++) {
124975 - DBG_8192C("0x%02x", data[i]);
124976 + DBG_871X("0x%02x", data[i]);
124977 sprintf(extra, "%s 0x%02X", extra, data[i]);
124978 - DBG_8192C(" ");
124979 + DBG_871X(" ");
124980 sprintf(extra,"%s ",extra);
124981 }
124982
124983 wrqu->length = strlen(extra)+1;
124984
124985 - DBG_8192C("extra = %s ", extra);
124986 + DBG_871X("extra = %s ", extra);
124987
124988 return 0;
124989 }
124990 @@ -7165,24 +8772,24 @@ static int rtw_mp_efuse_get(struct net_device *dev,
124991
124992 if (rtw_efuse_access(padapter, _FALSE, addr, mapLen, rawdata) == _FAIL)
124993 {
124994 - DBG_8192C("\t rtw_efuse_map_read : Fail \n");
124995 + DBG_871X("\t rtw_efuse_map_read : Fail \n");
124996 return -EFAULT;
124997 } else
124998 {
124999 - DBG_8192C("\t rtw_efuse_access raw ok \n");
125000 + DBG_871X("\t rtw_efuse_access raw ok \n");
125001 }
125002
125003 _rtw_memset(extra, '\0', sizeof(extra));
125004 for ( i=0; i<mapLen; i++ ) {
125005 - DBG_8192C(" %02x", rawdata[i]);
125006 + DBG_871X(" %02x", rawdata[i]);
125007 sprintf(extra, "%s %02x", extra, rawdata[i] );
125008
125009 if ((i & 0xF) == 0xF){
125010 - DBG_8192C("\n\t");
125011 + DBG_871X("\n\t");
125012 sprintf(extra, "%s\n\t", extra);
125013 }
125014 else if ((i & 0x7) == 0x7){
125015 - DBG_8192C("\t");
125016 + DBG_871X("\t");
125017 sprintf(extra, "%s\t", extra);
125018 }
125019 }
125020 @@ -7201,21 +8808,21 @@ static int rtw_mp_efuse_get(struct net_device *dev,
125021 #endif
125022 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
125023 if ((addr + mapLen) > max_available_size) {
125024 - DBG_8192C("(addr + cnts parameter error \n");
125025 + DBG_871X("(addr + cnts parameter error \n");
125026 return -EFAULT;
125027 }
125028 if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL)
125029 {
125030 - DBG_8192C("rtw_efuse_access error \n");
125031 + DBG_871X("rtw_efuse_access error \n");
125032 }
125033 else{
125034 - DBG_8192C("rtw_efuse_access ok \n");
125035 + DBG_871X("rtw_efuse_access ok \n");
125036 }
125037 _rtw_memset(extra, '\0', sizeof(extra));
125038 for ( i = 0; i < cnts; i ++) {
125039 - DBG_8192C("0x%02x", data[i]);
125040 + DBG_871X("0x%02x", data[i]);
125041 sprintf(extra, "%s 0x%02X", extra, data[i+j]);
125042 - DBG_8192C(" ");
125043 + DBG_871X(" ");
125044 sprintf(extra,"%s ",extra);
125045 }
125046 wrqu->length = strlen(extra);
125047 @@ -7232,21 +8839,21 @@ static int rtw_mp_efuse_get(struct net_device *dev,
125048 cnts = 4;
125049 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
125050 if ((addr + mapLen) > max_available_size) {
125051 - DBG_8192C("(addr + cnts parameter error \n");
125052 + DBG_871X("(addr + cnts parameter error \n");
125053 return -EFAULT;
125054 }
125055 if (rtw_efuse_map_read(padapter, addr, cnts, data) == _FAIL)
125056 {
125057 - DBG_8192C("rtw_efuse_access error \n");
125058 + DBG_871X("rtw_efuse_access error \n");
125059 }
125060 else{
125061 - DBG_8192C("rtw_efuse_access ok \n");
125062 + DBG_871X("rtw_efuse_access ok \n");
125063 }
125064 _rtw_memset(extra, '\0', sizeof(extra));
125065 for ( i = 0; i < cnts; i ++) {
125066 - DBG_8192C("0x%02x", data[i]);
125067 + DBG_871X("0x%02x", data[i]);
125068 sprintf(extra, "%s 0x%02X", extra, data[i+j]);
125069 - DBG_8192C(" ");
125070 + DBG_871X(" ");
125071 sprintf(extra,"%s ",extra);
125072 }
125073 wrqu->length = strlen(extra);
125074 @@ -7271,7 +8878,7 @@ static int rtw_mp_efuse_get(struct net_device *dev,
125075
125076 static int rtw_mp_efuse_set(struct net_device *dev,
125077 struct iw_request_info *info,
125078 - union iwreq_data *wdata, char *extra)
125079 + union iwreq_data *wdata, char *extra)
125080 {
125081 struct iw_point *wrqu = (struct iw_point *)wdata;
125082 PADAPTER padapter = rtw_netdev_priv(dev);
125083 @@ -7286,7 +8893,7 @@ static int rtw_mp_efuse_set(struct net_device *dev,
125084 u32 cnts = 0;
125085
125086 pch = extra;
125087 - DBG_8192C("%s: in=%s\n", __func__, extra);
125088 + DBG_871X("%s: in=%s\n", __func__, extra);
125089
125090 i=0;
125091 while ( (token = strsep (&pch,",") )!=NULL )
125092 @@ -7304,13 +8911,13 @@ static int rtw_mp_efuse_set(struct net_device *dev,
125093
125094 addr = simple_strtoul( tmp[1], &ptmp, 16 );
125095 addr = addr & 0xFF;
125096 - DBG_8192C("addr = %x \n" ,addr);
125097 + DBG_871X("addr = %x \n" ,addr);
125098
125099 cnts = strlen( tmp[2] )/2;
125100 if ( cnts == 0) return -EFAULT;
125101
125102 - DBG_8192C("cnts = %d \n" ,cnts);
125103 - DBG_8192C("target data = %s \n" ,tmp[2]);
125104 + DBG_871X("cnts = %d \n" ,cnts);
125105 + DBG_871X("target data = %s \n" ,tmp[2]);
125106
125107 for( jj = 0, kk = 0; jj < cnts; jj++, kk += 2 )
125108 {
125109 @@ -7320,14 +8927,14 @@ static int rtw_mp_efuse_set(struct net_device *dev,
125110 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
125111
125112 if ((addr + cnts) > max_available_size) {
125113 - DBG_8192C("parameter error \n");
125114 + DBG_871X("parameter error \n");
125115 return -EFAULT;
125116 }
125117 if (rtw_efuse_map_write(padapter, addr, cnts, setdata) == _FAIL) {
125118 - DBG_8192C("rtw_efuse_map_write error \n");
125119 + DBG_871X("rtw_efuse_map_write error \n");
125120 return -EFAULT;
125121 } else
125122 - DBG_8192C("rtw_efuse_map_write ok \n");
125123 + DBG_871X("rtw_efuse_map_write ok \n");
125124
125125 return 0;
125126 }
125127 @@ -7336,13 +8943,13 @@ static int rtw_mp_efuse_set(struct net_device *dev,
125128 if ( ! strlen( tmp[2] )/2 > 1 ) return -EFAULT;
125129 addr = simple_strtoul( tmp[1], &ptmp, 16 );
125130 addr = addr & 0xFF;
125131 - DBG_8192C("addr = %x \n" ,addr);
125132 + DBG_871X("addr = %x \n" ,addr);
125133
125134 cnts=strlen( tmp[2] )/2;
125135 if ( cnts == 0) return -EFAULT;
125136
125137 - DBG_8192C(" cnts = %d \n" ,cnts );
125138 - DBG_8192C("target data = %s \n" ,tmp[2] );
125139 + DBG_871X(" cnts = %d \n" ,cnts );
125140 + DBG_871X("target data = %s \n" ,tmp[2] );
125141
125142 for( jj = 0, kk = 0; jj < cnts; jj++, kk += 2 )
125143 {
125144 @@ -7350,10 +8957,10 @@ static int rtw_mp_efuse_set(struct net_device *dev,
125145 }
125146
125147 if ( rtw_efuse_access( padapter, _TRUE, addr, cnts, setrawdata ) == _FAIL ){
125148 - DBG_8192C("\t rtw_efuse_map_read : Fail \n");
125149 + DBG_871X("\t rtw_efuse_map_read : Fail \n");
125150 return -EFAULT;
125151 } else
125152 - DBG_8192C("\t rtw_efuse_access raw ok \n");
125153 + DBG_871X("\t rtw_efuse_access raw ok \n");
125154
125155 return 0;
125156 }
125157 @@ -7369,11 +8976,11 @@ static int rtw_mp_efuse_set(struct net_device *dev,
125158 cnts = strlen( tmp[1] )/2;
125159 if ( cnts == 0) return -EFAULT;
125160 if ( cnts > 6 ){
125161 - DBG_8192C("error data for mac addr = %s \n" ,tmp[1]);
125162 + DBG_871X("error data for mac addr = %s \n" ,tmp[1]);
125163 return -EFAULT;
125164 }
125165
125166 - DBG_8192C("target data = %s \n" ,tmp[1]);
125167 + DBG_871X("target data = %s \n" ,tmp[1]);
125168
125169 for( jj = 0, kk = 0; jj < cnts; jj++, kk += 2 )
125170 {
125171 @@ -7383,14 +8990,14 @@ static int rtw_mp_efuse_set(struct net_device *dev,
125172 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
125173
125174 if ((addr + cnts) > max_available_size) {
125175 - DBG_8192C("parameter error \n");
125176 + DBG_871X("parameter error \n");
125177 return -EFAULT;
125178 }
125179 if ( rtw_efuse_map_write(padapter, addr, cnts, setdata) == _FAIL ) {
125180 - DBG_8192C("rtw_efuse_map_write error \n");
125181 + DBG_871X("rtw_efuse_map_write error \n");
125182 return -EFAULT;
125183 } else
125184 - DBG_8192C("rtw_efuse_map_write ok \n");
125185 + DBG_871X("rtw_efuse_map_write ok \n");
125186
125187 return 0;
125188 }
125189 @@ -7406,7 +9013,7 @@ static int rtw_mp_efuse_set(struct net_device *dev,
125190
125191 cnts=strlen( tmp[1] )/2;
125192 if ( cnts == 0) return -EFAULT;
125193 - DBG_8192C("target data = %s \n" ,tmp[1]);
125194 + DBG_871X("target data = %s \n" ,tmp[1]);
125195
125196 for( jj = 0, kk = 0; jj < cnts; jj++, kk += 2 )
125197 {
125198 @@ -7416,20 +9023,20 @@ static int rtw_mp_efuse_set(struct net_device *dev,
125199 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
125200
125201 if ((addr + cnts) > max_available_size) {
125202 - DBG_8192C("parameter error \n");
125203 + DBG_871X("parameter error \n");
125204 return -EFAULT;
125205 }
125206
125207 if ( rtw_efuse_map_write(padapter, addr, cnts, setdata) == _FAIL ) {
125208 - DBG_8192C("rtw_efuse_map_write error \n");
125209 + DBG_871X("rtw_efuse_map_write error \n");
125210 return -EFAULT;
125211 } else
125212 - DBG_8192C("rtw_efuse_map_write ok \n");
125213 + DBG_871X("rtw_efuse_map_write ok \n");
125214
125215 return 0;
125216 }
125217 else{
125218 - DBG_8192C("Command not found\n");
125219 + DBG_871X("Command not found\n");
125220 return 0;
125221 }
125222
125223 @@ -7534,12 +9141,15 @@ static int rtw_mp_read_reg(struct net_device *dev,
125224 u32 ret, i=0, j=0, strtout=0;
125225 PADAPTER padapter = rtw_netdev_priv(dev);
125226
125227 -
125228 if (wrqu->length > 128) return -EFAULT;
125229
125230 if (copy_from_user(input, wrqu->pointer, wrqu->length))
125231 return -EFAULT;
125232
125233 + _rtw_memset(data, 0, 20);
125234 + _rtw_memset(tmp, 0, 20);
125235 + _rtw_memset(extra, 0, wrqu->length);
125236 +
125237 pch = input;
125238 pnext = strpbrk(pch, " ,.-");
125239 if (pnext == NULL) return -EINVAL;
125240 @@ -7559,7 +9169,7 @@ static int rtw_mp_read_reg(struct net_device *dev,
125241 // 1 byte
125242 // *(u8*)data = rtw_read8(padapter, addr);
125243 sprintf(extra, "%d\n", rtw_read8(padapter, addr));
125244 - wrqu->length = 4;
125245 + wrqu->length = strlen(extra);
125246 break;
125247 case 'w':
125248 // 2 bytes
125249 @@ -7578,7 +9188,7 @@ static int rtw_mp_read_reg(struct net_device *dev,
125250 j++;
125251 }
125252 pch = tmp;
125253 - DBG_8192C("pch=%s",pch);
125254 + DBG_871X("pch=%s",pch);
125255
125256 while( *pch != '\0' )
125257 {
125258 @@ -7594,7 +9204,7 @@ static int rtw_mp_read_reg(struct net_device *dev,
125259 }
125260 pch = pnext;
125261 }
125262 - wrqu->length = 8;
125263 + wrqu->length = 6;
125264 break;
125265 case 'd':
125266 // 4 bytes
125267 @@ -7612,7 +9222,7 @@ static int rtw_mp_read_reg(struct net_device *dev,
125268 j++;
125269 }
125270 pch = tmp;
125271 - DBG_8192C("pch=%s",pch);
125272 + DBG_871X("pch=%s",pch);
125273
125274 while( *pch != '\0' )
125275 {
125276 @@ -7628,7 +9238,7 @@ static int rtw_mp_read_reg(struct net_device *dev,
125277 }
125278 pch = pnext;
125279 }
125280 - wrqu->length = 20;
125281 + wrqu->length = strlen(extra);
125282 break;
125283
125284 default:
125285 @@ -7666,9 +9276,12 @@ static int rtw_mp_read_reg(struct net_device *dev,
125286 if (path >= MAX_RF_PATH_NUMS) return -EINVAL;
125287 if (addr > 0xFF) return -EINVAL;
125288 if (data > 0xFFFFF) return -EINVAL;
125289 + _rtw_memset(extra, 0, wrqu->length);
125290
125291 write_rfreg(padapter, path, addr, data);
125292
125293 + sprintf(extra, "write_rf completed \n");
125294 +
125295 return 0;
125296 }
125297
125298 @@ -7697,12 +9310,14 @@ static int rtw_mp_read_rf(struct net_device *dev,
125299 if (copy_from_user(input, wrqu->pointer, wrqu->length))
125300 return -EFAULT;
125301
125302 - ret = sscanf(extra, "%d,%x", &path, &addr);
125303 + ret = sscanf(input, "%d,%x", &path, &addr);
125304 if (ret < 2) return -EINVAL;
125305
125306 if (path >= MAX_RF_PATH_NUMS) return -EINVAL;
125307 if (addr > 0xFF) return -EINVAL;
125308
125309 + _rtw_memset(extra, 0, wrqu->length);
125310 +
125311 //*data = read_rfreg(padapter, path, addr);
125312 sprintf(data, "%08x", read_rfreg(padapter, path, addr));
125313 //add read data format blank
125314 @@ -7717,7 +9332,7 @@ static int rtw_mp_read_rf(struct net_device *dev,
125315 j++;
125316 }
125317 pch = tmp;
125318 - DBG_8192C("pch=%s",pch);
125319 + DBG_871X("pch=%s",pch);
125320
125321 while( *pch != '\0' )
125322 {
125323 @@ -7733,7 +9348,7 @@ static int rtw_mp_read_rf(struct net_device *dev,
125324 }
125325 pch = pnext;
125326 }
125327 - wrqu->length = 10;
125328 + wrqu->length = strlen(extra);
125329
125330 return 0;
125331 }
125332 @@ -7794,7 +9409,7 @@ static int rtw_mp_rate(struct net_device *dev,
125333 else
125334 rate =(rate-0x80+MPT_RATE_MCS0);
125335
125336 - //DBG_8192C("%s: rate=%d\n", __func__, rate);
125337 + //DBG_871X("%s: rate=%d\n", __func__, rate);
125338
125339 if (rate >= MPT_RATE_LAST )
125340 return -EINVAL;
125341 @@ -7819,7 +9434,7 @@ static int rtw_mp_channel(struct net_device *dev,
125342 return -EFAULT;
125343
125344 channel = rtw_atoi(input);
125345 - //DBG_8192C("%s: channel=%d\n", __func__, channel);
125346 + //DBG_871X("%s: channel=%d\n", __func__, channel);
125347 sprintf( extra, "Change channel %d to channel %d", padapter->mppriv.channel , channel );
125348
125349 padapter->mppriv.channel = channel;
125350 @@ -7839,14 +9454,14 @@ static int rtw_mp_bandwidth(struct net_device *dev,
125351 //if (copy_from_user(buffer, (void*)wrqu->data.pointer, wrqu->data.length))
125352 // return -EFAULT;
125353
125354 - //DBG_8192C("%s:iwpriv in=%s\n", __func__, extra);
125355 + //DBG_871X("%s:iwpriv in=%s\n", __func__, extra);
125356
125357 sscanf(extra, "40M=%d,shortGI=%d", &bandwidth, &sg);
125358
125359 if (bandwidth != HT_CHANNEL_WIDTH_40)
125360 bandwidth = HT_CHANNEL_WIDTH_20;
125361
125362 - //DBG_8192C("%s: bw=%d sg=%d \n", __func__, bandwidth , sg);
125363 + //DBG_871X("%s: bw=%d sg=%d \n", __func__, bandwidth , sg);
125364
125365 padapter->mppriv.bandwidth = (u8)bandwidth;
125366 padapter->mppriv.preamble = sg;
125367 @@ -7869,7 +9484,7 @@ static int rtw_mp_txpower(struct net_device *dev,
125368 return -EFAULT;
125369
125370 sscanf(input,"patha=%d,pathb=%d",&idx_a,&idx_b);
125371 - //DBG_8192C("%s: tx_pwr_idx_a=%x b=%x\n", __func__, idx_a, idx_b);
125372 + //DBG_871X("%s: tx_pwr_idx_a=%x b=%x\n", __func__, idx_a, idx_b);
125373
125374 sprintf( extra, "Set power level path_A:%d path_B:%d", idx_a , idx_b );
125375 padapter->mppriv.txpoweridx = (u8)idx_a;
125376 @@ -7893,7 +9508,7 @@ static int rtw_mp_ant_tx(struct net_device *dev,
125377 if (copy_from_user(input, wrqu->pointer, wrqu->length))
125378 return -EFAULT;
125379
125380 - DBG_8192C("%s: input=%s\n", __func__, input);
125381 + //DBG_871X("%s: input=%s\n", __func__, input);
125382
125383 sprintf( extra, "switch Tx antenna to %s", input );
125384
125385 @@ -7910,9 +9525,9 @@ static int rtw_mp_ant_tx(struct net_device *dev,
125386 }
125387 }
125388 //antenna |= BIT(extra[i]-'a');
125389 - DBG_8192C("%s: antenna=0x%x\n", __func__, antenna);
125390 + //DBG_871X("%s: antenna=0x%x\n", __func__, antenna);
125391 padapter->mppriv.antenna_tx = antenna;
125392 - DBG_8192C("%s:mppriv.antenna_rx=%d\n", __func__, padapter->mppriv.antenna_tx);
125393 + //DBG_871X("%s:mppriv.antenna_rx=%d\n", __func__, padapter->mppriv.antenna_tx);
125394
125395 Hal_SetAntenna(padapter);
125396
125397 @@ -7931,8 +9546,11 @@ static int rtw_mp_ant_rx(struct net_device *dev,
125398
125399 if (copy_from_user(input, wrqu->pointer, wrqu->length))
125400 return -EFAULT;
125401 - //DBG_8192C("%s: input=%s\n", __func__, input);
125402 -
125403 + //DBG_871X("%s: input=%s\n", __func__, input);
125404 + _rtw_memset(extra, 0, wrqu->length);
125405 +
125406 + sprintf( extra, "switch Rx antenna to %s", input );
125407 +
125408 for (i=0; i < strlen(input); i++) {
125409
125410 switch( input[i] )
125411 @@ -7946,11 +9564,11 @@ static int rtw_mp_ant_rx(struct net_device *dev,
125412 }
125413 }
125414
125415 - //DBG_8192C("%s: antenna=0x%x\n", __func__, antenna);
125416 + //DBG_871X("%s: antenna=0x%x\n", __func__, antenna);
125417 padapter->mppriv.antenna_rx = antenna;
125418 - //DBG_8192C("%s:mppriv.antenna_rx=%d\n", __func__, padapter->mppriv.antenna_rx);
125419 + //DBG_871X("%s:mppriv.antenna_rx=%d\n", __func__, padapter->mppriv.antenna_rx);
125420 Hal_SetAntenna(padapter);
125421 - wrqu->length = strlen(extra) + 1;
125422 + wrqu->length = strlen(extra);
125423
125424 return 0;
125425 }
125426 @@ -7973,7 +9591,7 @@ static int rtw_mp_ctx(struct net_device *dev,
125427 if (copy_from_user(extra, wrqu->pointer, wrqu->length))
125428 return -EFAULT;
125429
125430 - DBG_8192C("%s: in=%s\n", __func__, extra);
125431 + DBG_871X("%s: in=%s\n", __func__, extra);
125432
125433 countPkTx = strncmp(extra, "count=", 5); // strncmp TRUE is 0
125434 cotuTx = strncmp(extra, "background", 20);
125435 @@ -7984,9 +9602,9 @@ static int rtw_mp_ctx(struct net_device *dev,
125436 stop = strncmp(extra, "stop", 5);
125437 sscanf(extra, "count=%d,pkt", &count);
125438
125439 - //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);
125440 + //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);
125441 _rtw_memset(extra, '\0', sizeof(extra));
125442 -
125443 +
125444 if (stop == 0) {
125445 bStartTest = 0; // To set Stop
125446 pmp_priv->tx.stop = 1;
125447 @@ -7995,7 +9613,7 @@ static int rtw_mp_ctx(struct net_device *dev,
125448 bStartTest = 1;
125449 if (pmp_priv->mode != MP_ON) {
125450 if (pmp_priv->tx.stop != 1) {
125451 - DBG_8192C("%s: MP_MODE != ON %d\n", __func__, pmp_priv->mode);
125452 + DBG_871X("%s: MP_MODE != ON %d\n", __func__, pmp_priv->mode);
125453 return -EFAULT;
125454 }
125455 }
125456 @@ -8016,7 +9634,7 @@ static int rtw_mp_ctx(struct net_device *dev,
125457 {
125458 case MP_PACKET_TX:
125459
125460 - //DBG_8192C("%s:pkTx %d\n", __func__,bStartTest);
125461 + //DBG_871X("%s:pkTx %d\n", __func__,bStartTest);
125462 if (bStartTest == 0)
125463 {
125464 pmp_priv->tx.stop = 1;
125465 @@ -8026,7 +9644,7 @@ static int rtw_mp_ctx(struct net_device *dev,
125466 else if (pmp_priv->tx.stop == 1)
125467 {
125468 sprintf( extra, "Start continuous DA=ffffffffffff len=1500 count=%u,\n",count);
125469 - //DBG_8192C("%s:countPkTx %d\n", __func__,count);
125470 + //DBG_871X("%s:countPkTx %d\n", __func__,count);
125471 pmp_priv->tx.stop = 0;
125472 pmp_priv->tx.count = count;
125473 pmp_priv->tx.payload = 2;
125474 @@ -8036,50 +9654,51 @@ static int rtw_mp_ctx(struct net_device *dev,
125475 SetPacketTx(padapter);
125476 }
125477 else {
125478 - //DBG_8192C("%s: pkTx not stop\n", __func__);
125479 + //DBG_871X("%s: pkTx not stop\n", __func__);
125480 return -EFAULT;
125481 }
125482 wrqu->length = strlen(extra);
125483 - return 0;
125484 + return 0;
125485
125486 case MP_SINGLE_TONE_TX:
125487 - //DBG_8192C("%s: sgleTx %d \n", __func__, bStartTest);
125488 + //DBG_871X("%s: sgleTx %d \n", __func__, bStartTest);
125489 if (bStartTest != 0){
125490 sprintf( extra, "Start continuous DA=ffffffffffff len=1500 \n infinite=yes.");
125491 - Hal_SetSingleToneTx(padapter, (u8)bStartTest);
125492 - }
125493 +
125494 + }
125495 + Hal_SetSingleToneTx(padapter, (u8)bStartTest);
125496 break;
125497
125498 case MP_CONTINUOUS_TX:
125499 - //DBG_8192C("%s: cotuTx %d\n", __func__, bStartTest);
125500 + DBG_871X("%s: cotuTx %d\n", __func__, bStartTest);
125501 if (bStartTest != 0){
125502 sprintf( extra, "Start continuous DA=ffffffffffff len=1500 \n infinite=yes.");
125503 - Hal_SetContinuousTx(padapter, (u8)bStartTest);
125504 }
125505 + Hal_SetContinuousTx(padapter, (u8)bStartTest);
125506 break;
125507
125508 case MP_CARRIER_SUPPRISSION_TX:
125509 - //DBG_8192C("%s: CarrSprTx %d\n", __func__, bStartTest);
125510 + //DBG_871X("%s: CarrSprTx %d\n", __func__, bStartTest);
125511 if (bStartTest != 0){
125512 if( pmp_priv->rateidx <= MPT_RATE_11M )
125513 {
125514 sprintf( extra, "Start continuous DA=ffffffffffff len=1500 \n infinite=yes.");
125515 - Hal_SetCarrierSuppressionTx(padapter, (u8)bStartTest);
125516 }else
125517 sprintf( extra, "Specify carrier suppression but not CCK rate");
125518 }
125519 + Hal_SetCarrierSuppressionTx(padapter, (u8)bStartTest);
125520 break;
125521
125522 case MP_SINGLE_CARRIER_TX:
125523 - //DBG_8192C("%s: scTx %d\n", __func__, bStartTest);
125524 + //DBG_871X("%s: scTx %d\n", __func__, bStartTest);
125525 if (bStartTest != 0){
125526 sprintf( extra, "Start continuous DA=ffffffffffff len=1500 \n infinite=yes.");
125527 - Hal_SetSingleCarrierTx(padapter, (u8)bStartTest);
125528 }
125529 + Hal_SetSingleCarrierTx(padapter, (u8)bStartTest);
125530 break;
125531
125532 default:
125533 - //DBG_8192C("%s:No Match MP_MODE\n", __func__);
125534 + //DBG_871X("%s:No Match MP_MODE\n", __func__);
125535 sprintf( extra, "Error! Continuous-Tx is not on-going.");
125536 return -EFAULT;
125537 }
125538 @@ -8088,7 +9707,7 @@ static int rtw_mp_ctx(struct net_device *dev,
125539 struct mp_priv *pmp_priv = &padapter->mppriv;
125540 if (pmp_priv->tx.stop == 0) {
125541 pmp_priv->tx.stop = 1;
125542 - //DBG_8192C("%s: pkt tx is running...\n", __func__);
125543 + //DBG_871X("%s: pkt tx is running...\n", __func__);
125544 rtw_msleep_os(5);
125545 }
125546 pmp_priv->tx.stop = 0;
125547 @@ -8113,7 +9732,7 @@ static int rtw_mp_arx(struct net_device *dev,
125548 if (copy_from_user(input, wrqu->pointer, wrqu->length))
125549 return -EFAULT;
125550
125551 - DBG_8192C("%s: %s\n", __func__, input);
125552 + DBG_871X("%s: %s\n", __func__, input);
125553
125554 bStartRx = (strncmp(input, "start", 5)==0)?1:0; // strncmp TRUE is 0
125555 bStopRx = (strncmp(input, "stop", 5)==0)?1:0; // strncmp TRUE is 0
125556 @@ -8166,23 +9785,33 @@ static int rtw_mp_pwrtrk(struct net_device *dev,
125557 u32 thermal;
125558 s32 ret;
125559 PADAPTER padapter = rtw_netdev_priv(dev);
125560 + u8 input[wrqu->length];
125561
125562 + if (copy_from_user(input, wrqu->pointer, wrqu->length))
125563 + return -EFAULT;
125564
125565 + _rtw_memset(extra, 0, wrqu->length);
125566 +
125567 enable = 1;
125568 if (wrqu->length > 1) { // not empty string
125569 - if (strncmp(extra, "stop", 4) == 0)
125570 + if (strncmp(input, "stop", 4) == 0)
125571 + {
125572 enable = 0;
125573 - else {
125574 - if (sscanf(extra, "ther=%d", &thermal)) {
125575 + sprintf(extra, "mp tx power tracking stop");
125576 + }
125577 + else if (sscanf(input, "ther=%d", &thermal)) {
125578 ret = Hal_SetThermalMeter(padapter, (u8)thermal);
125579 if (ret == _FAIL) return -EPERM;
125580 - } else
125581 - return -EINVAL;
125582 + sprintf(extra, "mp tx power tracking start,target value=%d ok ",thermal);
125583 + }else {
125584 + return -EINVAL;
125585 }
125586 }
125587
125588 ret = Hal_SetPowerTracking(padapter, enable);
125589 if (ret == _FAIL) return -EPERM;
125590 +
125591 + wrqu->length = strlen(extra);
125592
125593 return 0;
125594 }
125595 @@ -8192,13 +9821,15 @@ static int rtw_mp_psd(struct net_device *dev,
125596 struct iw_point *wrqu, char *extra)
125597 {
125598 PADAPTER padapter = rtw_netdev_priv(dev);
125599 + u8 input[wrqu->length];
125600
125601 -
125602 - if (copy_from_user(extra, wrqu->pointer, wrqu->length))
125603 + if (copy_from_user(input, wrqu->pointer, wrqu->length))
125604 return -EFAULT;
125605
125606 - wrqu->length = mp_query_psd(padapter, extra);
125607 + strcpy(extra,input);
125608
125609 + wrqu->length = mp_query_psd(padapter, extra);
125610 +
125611 return 0;
125612 }
125613
125614 @@ -8206,7 +9837,7 @@ static int rtw_mp_thermal(struct net_device *dev,
125615 struct iw_request_info *info,
125616 struct iw_point *wrqu, char *extra)
125617 {
125618 - u8 val;
125619 + u8 val;
125620 u16 bwrite=1;
125621 #ifdef CONFIG_RTL8192C
125622 u16 addr=0x78;
125623 @@ -8221,7 +9852,7 @@ static int rtw_mp_thermal(struct net_device *dev,
125624 if (copy_from_user(extra, wrqu->pointer, wrqu->length))
125625 return -EFAULT;
125626
125627 - //DBG_8192C("print extra %s \n",extra);
125628 + //DBG_871X("print extra %s \n",extra);
125629
125630 bwrite = strncmp(extra, "write", 6); // strncmp TRUE is 0
125631
125632 @@ -8229,16 +9860,16 @@ static int rtw_mp_thermal(struct net_device *dev,
125633
125634 if( bwrite == 0 )
125635 {
125636 - //DBG_8192C("to write val:%d",val);
125637 + //DBG_871X("to write val:%d",val);
125638 EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
125639 if( 2 > max_available_size )
125640 {
125641 - DBG_8192C("no available efuse!\n");
125642 + DBG_871X("no available efuse!\n");
125643 return -EFAULT;
125644 }
125645 if ( rtw_efuse_map_write(padapter, addr, cnt, &val) == _FAIL )
125646 {
125647 - DBG_8192C("rtw_efuse_map_write error \n");
125648 + DBG_871X("rtw_efuse_map_write error \n");
125649 return -EFAULT;
125650 }
125651 else
125652 @@ -8248,7 +9879,7 @@ static int rtw_mp_thermal(struct net_device *dev,
125653 }
125654 else
125655 {
125656 - sprintf(extra, "%d", val);
125657 + sprintf(extra, "%d", val);
125658 }
125659 wrqu->length = strlen(extra);
125660
125661 @@ -8291,24 +9922,24 @@ static int rtw_mp_dump(struct net_device *dev,
125662
125663 if ( strncmp(extra, "all", 4)==0 )
125664 {
125665 - DBG_8192C("\n======= MAC REG =======\n");
125666 + DBG_871X("\n======= MAC REG =======\n");
125667 for ( i=0x0;i<0x300;i+=4 )
125668 {
125669 - if(j%4==1) DBG_8192C("0x%02x",i);
125670 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
125671 - if((j++)%4 == 0) DBG_8192C("\n");
125672 + if(j%4==1) DBG_871X("0x%02x",i);
125673 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
125674 + if((j++)%4 == 0) DBG_871X("\n");
125675 }
125676 for( i=0x400;i<0x800;i+=4 )
125677 {
125678 - if(j%4==1) DBG_8192C("0x%02x",i);
125679 - DBG_8192C(" 0x%08x ",rtw_read32(padapter,i));
125680 - if((j++)%4 == 0) DBG_8192C("\n");
125681 + if(j%4==1) DBG_871X("0x%02x",i);
125682 + DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
125683 + if((j++)%4 == 0) DBG_871X("\n");
125684 }
125685
125686 i,j=1;
125687 - padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
125688 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
125689
125690 - DBG_8192C("\n======= RF REG =======\n");
125691 + DBG_871X("\n======= RF REG =======\n");
125692 if(( RF_1T2R == rf_type ) ||( RF_1T1R ==rf_type ))
125693 path_nums = 1;
125694 else
125695 @@ -8323,10 +9954,10 @@ static int rtw_mp_dump(struct net_device *dev,
125696 #endif
125697 {
125698 //value = PHY_QueryRFReg(padapter, (RF90_RADIO_PATH_E)path,i, bMaskDWord);
125699 - value =padapter->HalFunc.read_rfreg(padapter, path, i, 0xffffffff);
125700 - if(j%4==1) DBG_8192C("0x%02x ",i);
125701 - DBG_8192C(" 0x%08x ",value);
125702 - if((j++)%4==0) DBG_8192C("\n");
125703 + value =rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
125704 + if(j%4==1) DBG_871X("0x%02x ",i);
125705 + DBG_871X(" 0x%08x ",value);
125706 + if((j++)%4==0) DBG_871X("\n");
125707 }
125708 }
125709 }
125710 @@ -8345,7 +9976,7 @@ static int rtw_mp_phypara(struct net_device *dev,
125711 if (copy_from_user(input, wrqu->pointer, wrqu->length))
125712 return -EFAULT;
125713
125714 - DBG_8192C("%s:iwpriv in=%s\n", __func__, input);
125715 + DBG_871X("%s:iwpriv in=%s\n", __func__, input);
125716
125717 sscanf(input, "xcap=%d", &valxcap);
125718
125719 @@ -8407,31 +10038,27 @@ static int rtw_mp_set(struct net_device *dev,
125720 break;
125721
125722 case MP_START:
125723 - DBG_8192C("set case mp_start \n");
125724 + DBG_871X("set case mp_start \n");
125725 rtw_mp_start (dev,info,wrqu,extra);
125726 break;
125727
125728 case MP_STOP:
125729 - DBG_8192C("set case mp_stop \n");
125730 + DBG_871X("set case mp_stop \n");
125731 rtw_mp_stop (dev,info,wrqu,extra);
125732 break;
125733
125734 case MP_BANDWIDTH:
125735 - DBG_8192C("set case mp_bandwidth \n");
125736 + DBG_871X("set case mp_bandwidth \n");
125737 rtw_mp_bandwidth (dev,info,wrqu,extra);
125738 break;
125739 - case MP_PWRTRK:
125740 - DBG_8192C("set case MP_PWRTRK \n");
125741 - rtw_mp_pwrtrk (dev,info,wrqu,extra);
125742 - break;
125743
125744 case MP_RESET_STATS:
125745 - DBG_8192C("set case MP_RESET_STATS \n");
125746 + DBG_871X("set case MP_RESET_STATS \n");
125747 rtw_mp_reset_stats (dev,info,wrqu,extra);
125748 break;
125749
125750 case EFUSE_SET:
125751 - DBG_8192C("efuse set \n");
125752 + DBG_871X("efuse set \n");
125753 rtw_mp_efuse_set (dev,info,wdata,extra);
125754 break;
125755
125756 @@ -8450,7 +10077,7 @@ static int rtw_mp_get(struct net_device *dev,
125757 u32 subcmd = wrqu->flags;
125758 PADAPTER padapter = rtw_netdev_priv(dev);
125759
125760 - DBG_8192C("in mp_get extra= %s \n",extra);
125761 + //DBG_871X("in mp_get extra= %s \n",extra);
125762
125763 if (padapter == NULL)
125764 {
125765 @@ -8465,86 +10092,212 @@ static int rtw_mp_get(struct net_device *dev,
125766 switch(subcmd)
125767 {
125768 case MP_PHYPARA:
125769 - DBG_8192C("mp_get MP_PHYPARA \n");
125770 + DBG_871X("mp_get MP_PHYPARA \n");
125771 rtw_mp_phypara(dev,info,wrqu,extra);
125772 break;
125773
125774 case MP_CHANNEL:
125775 - DBG_8192C("set case mp_channel \n");
125776 + DBG_871X("set case mp_channel \n");
125777 rtw_mp_channel (dev,info,wrqu,extra);
125778 break;
125779
125780 case READ_REG:
125781 - DBG_8192C("mp_get READ_REG \n");
125782 + DBG_871X("mp_get READ_REG \n");
125783 rtw_mp_read_reg (dev,info,wrqu,extra);
125784 break;
125785 case READ_RF:
125786 - DBG_8192C("mp_get READ_RF \n");
125787 + DBG_871X("mp_get READ_RF \n");
125788 rtw_mp_read_rf (dev,info,wrqu,extra);
125789 break;
125790
125791 case MP_RATE:
125792 - DBG_8192C("set case mp_rate \n");
125793 + DBG_871X("set case mp_rate \n");
125794 rtw_mp_rate (dev,info,wrqu,extra);
125795 break;
125796
125797 case MP_TXPOWER:
125798 - DBG_8192C("set case MP_TXPOWER \n");
125799 + DBG_871X("set case MP_TXPOWER \n");
125800 rtw_mp_txpower (dev,info,wrqu,extra);
125801 break;
125802
125803 case MP_ANT_TX:
125804 - DBG_8192C("set case MP_ANT_TX \n");
125805 + DBG_871X("set case MP_ANT_TX \n");
125806 rtw_mp_ant_tx (dev,info,wrqu,extra);
125807 break;
125808
125809 case MP_ANT_RX:
125810 - DBG_8192C("set case MP_ANT_RX \n");
125811 + DBG_871X("set case MP_ANT_RX \n");
125812 rtw_mp_ant_rx (dev,info,wrqu,extra);
125813 break;
125814
125815 case MP_QUERY:
125816 - DBG_8192C("mp_get mp_query MP_QUERY \n");
125817 + DBG_871X("mp_get mp_query MP_QUERY \n");
125818 rtw_mp_trx_query(dev,info,wrqu,extra);
125819 break;
125820
125821 case MP_CTX:
125822 - DBG_8192C("set case MP_CTX \n");
125823 + DBG_871X("set case MP_CTX \n");
125824 rtw_mp_ctx (dev,info,wrqu,extra);
125825 break;
125826
125827 case MP_ARX:
125828 - DBG_8192C("set case MP_ARX \n");
125829 + DBG_871X("set case MP_ARX \n");
125830 rtw_mp_arx (dev,info,wrqu,extra);
125831 break;
125832
125833 case EFUSE_GET:
125834 - DBG_8192C("efuse get EFUSE_GET \n");
125835 + DBG_871X("efuse get EFUSE_GET \n");
125836 rtw_mp_efuse_get(dev,info,wdata,extra);
125837 break;
125838
125839 case MP_DUMP:
125840 - DBG_8192C("set case MP_DUMP \n");
125841 + DBG_871X("set case MP_DUMP \n");
125842 rtw_mp_dump (dev,info,wrqu,extra);
125843 break;
125844 case MP_PSD:
125845 - DBG_8192C("set case MP_PSD \n");
125846 + DBG_871X("set case MP_PSD \n");
125847 rtw_mp_psd (dev,info,wrqu,extra);
125848 - break;
125849 -
125850 + break;
125851 +
125852 case MP_THER:
125853 - DBG_8192C("set case MP_THER \n");
125854 + DBG_871X("set case MP_THER \n");
125855 rtw_mp_thermal (dev,info,wrqu,extra);
125856 - break;
125857 -
125858 + break;
125859 +
125860 + case MP_PWRTRK:
125861 + DBG_871X("set case MP_PWRTRK \n");
125862 + rtw_mp_pwrtrk (dev,info,wrqu,extra);
125863 + break;
125864 + }
125865 +
125866 +return 0;
125867 +}
125868 +
125869 +#endif //#if defined(CONFIG_MP_INCLUDED) && defined(CONFIG_MP_IWPRIV_SUPPORT)
125870 +
125871 +static int rtw_wfd_tdls_enable(struct net_device *dev,
125872 + struct iw_request_info *info,
125873 + union iwreq_data *wrqu, char *extra)
125874 +{
125875 + int ret = 0;
125876 +
125877 +#ifdef CONFIG_TDLS
125878 +#ifdef CONFIG_WFD
125879 +
125880 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
125881 +
125882 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
125883 +
125884 + if ( extra[ 0 ] == '0' )
125885 + {
125886 + padapter->wdinfo.wfd_tdls_enable = 0;
125887 + }
125888 + else
125889 + {
125890 + padapter->wdinfo.wfd_tdls_enable = 1;
125891 }
125892
125893 -return 0;
125894 +#endif //CONFIG_WFD
125895 +#endif //CONFIG_TDLS
125896 +
125897 + return ret;
125898 +}
125899 +
125900 +static int rtw_tdls_weaksec(struct net_device *dev,
125901 + struct iw_request_info *info,
125902 + union iwreq_data *wrqu, char *extra)
125903 +{
125904 + int ret = 0;
125905 +
125906 +#ifdef CONFIG_TDLS
125907 +
125908 + u8 i, j;
125909 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
125910 +
125911 + DBG_871X( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
125912 +
125913 + if ( extra[ 0 ] == '0' )
125914 + {
125915 + padapter->wdinfo.wfd_tdls_weaksec = 0;
125916 + }
125917 + else
125918 + {
125919 + padapter->wdinfo.wfd_tdls_weaksec = 1;
125920 + }
125921 +#endif
125922 +
125923 + return ret;
125924 }
125925
125926 -#endif //#if defined(CONFIG_MP_INCLUDED) && defined(CONFIG_MP_IWPRIV_SUPPORT)
125927
125928 +static int rtw_tdls_enable(struct net_device *dev,
125929 + struct iw_request_info *info,
125930 + union iwreq_data *wrqu, char *extra)
125931 +{
125932 + int ret = 0;
125933 +
125934 +#ifdef CONFIG_TDLS
125935 +
125936 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
125937 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
125938 + _irqL irqL;
125939 + _list *plist, *phead;
125940 + s32 index;
125941 + struct sta_info *psta = NULL;
125942 + struct sta_priv *pstapriv = &padapter->stapriv;
125943 + u8 tdls_sta[NUM_STA][ETH_ALEN];
125944 + u8 empty_hwaddr[ETH_ALEN] = { 0x00 };
125945 +
125946 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
125947 +
125948 + _rtw_memset(tdls_sta, 0x00, sizeof(tdls_sta));
125949 +
125950 + if ( extra[ 0 ] == '0' )
125951 + {
125952 + ptdlsinfo->enable = 0;
125953 +
125954 + if(pstapriv->asoc_sta_count==1)
125955 + return ret;
125956 +
125957 + _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
125958 + for(index=0; index< NUM_STA; index++)
125959 + {
125960 + phead = &(pstapriv->sta_hash[index]);
125961 + plist = get_next(phead);
125962 +
125963 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
125964 + {
125965 + psta = LIST_CONTAINOR(plist, struct sta_info ,hash_list);
125966 +
125967 + plist = get_next(plist);
125968 +
125969 + if(psta->tdls_sta_state != TDLS_STATE_NONE)
125970 + {
125971 + _rtw_memcpy(tdls_sta[index], psta->hwaddr, ETH_ALEN);
125972 + }
125973 + }
125974 + }
125975 + _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
125976
125977 + for(index=0; index< NUM_STA; index++)
125978 + {
125979 + if( !_rtw_memcmp(tdls_sta[index], empty_hwaddr, ETH_ALEN) )
125980 + {
125981 + printk("issue tear down to "MAC_FMT"\n", MAC_ARG(tdls_sta[index]));
125982 + issue_tdls_teardown(padapter, tdls_sta[index]);
125983 + }
125984 + }
125985 + rtw_tdls_cmd(padapter, myid(&(padapter->eeprompriv)), TDLS_RS_RCR);
125986 + rtw_reset_tdls_info(padapter);
125987 + }
125988 + else if ( extra[ 0 ] == '1' )
125989 + {
125990 + ptdlsinfo->enable = 1;
125991 + }
125992 +#endif //CONFIG_TDLS
125993 +
125994 + return ret;
125995 +}
125996
125997 static int rtw_tdls_setup(struct net_device *dev,
125998 struct iw_request_info *info,
125999 @@ -8558,20 +10311,40 @@ static int rtw_tdls_setup(struct net_device *dev,
126000 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126001 u8 mac_addr[ETH_ALEN];
126002
126003 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126004 +#ifdef CONFIG_WFD
126005 + struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
126006 +#endif // CONFIG_WFD
126007 +
126008 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126009
126010 for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
126011 mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
126012 }
126013
126014 - issue_tdls_setup_req(padapter, mac_addr);
126015 -
126016 +#ifdef CONFIG_WFD
126017 + if ( _AES_ != padapter->securitypriv.dot11PrivacyAlgrthm )
126018 + {
126019 + // Weak Security situation with AP.
126020 + if ( 0 == pwdinfo->wfd_tdls_weaksec )
126021 + {
126022 + // Can't send the tdls setup request out!!
126023 + DBG_871X( "[%s] Current link is not AES, SKIP sending the tdls setup request!!\n", __FUNCTION__ );
126024 + }
126025 + else
126026 + {
126027 + issue_tdls_setup_req(padapter, mac_addr);
126028 + }
126029 + }
126030 + else
126031 +#endif // CONFIG_WFD
126032 + {
126033 + issue_tdls_setup_req(padapter, mac_addr);
126034 + }
126035 #endif
126036
126037 return ret;
126038 }
126039
126040 -
126041 static int rtw_tdls_teardown(struct net_device *dev,
126042 struct iw_request_info *info,
126043 union iwreq_data *wrqu, char *extra)
126044 @@ -8585,12 +10358,12 @@ static int rtw_tdls_teardown(struct net_device *dev,
126045 struct sta_info *ptdls_sta = NULL;
126046 u8 mac_addr[ETH_ALEN];
126047
126048 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126049 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126050
126051 for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
126052 mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
126053 }
126054 -
126055 +
126056 ptdls_sta = rtw_get_stainfo( &(padapter->stapriv), mac_addr);
126057
126058 if(ptdls_sta != NULL)
126059 @@ -8599,12 +10372,11 @@ static int rtw_tdls_teardown(struct net_device *dev,
126060 issue_tdls_teardown(padapter, mac_addr);
126061 }
126062
126063 -#endif
126064 +#endif //CONFIG_TDLS
126065
126066 return ret;
126067 }
126068
126069 -
126070 static int rtw_tdls_discovery(struct net_device *dev,
126071 struct iw_request_info *info,
126072 union iwreq_data *wrqu, char *extra)
126073 @@ -8617,11 +10389,11 @@ static int rtw_tdls_discovery(struct net_device *dev,
126074 struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
126075 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
126076
126077 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126078 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126079
126080 issue_tdls_dis_req(padapter, NULL);
126081
126082 -#endif
126083 +#endif //CONFIG_TDLS
126084
126085 return ret;
126086 }
126087 @@ -8639,7 +10411,7 @@ static int rtw_tdls_ch_switch(struct net_device *dev,
126088 u8 i, j, mac_addr[ETH_ALEN];
126089 struct sta_info *ptdls_sta = NULL;
126090
126091 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126092 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126093
126094 for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
126095 mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
126096 @@ -8648,15 +10420,14 @@ static int rtw_tdls_ch_switch(struct net_device *dev,
126097 ptdls_sta = rtw_get_stainfo(&padapter->stapriv, mac_addr);
126098 if( ptdls_sta == NULL )
126099 return ret;
126100 - ptdls_sta->option=4;
126101 ptdlsinfo->ch_sensing=1;
126102
126103 rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_INIT_CH_SEN);
126104 -
126105 -#endif
126106 +
126107 +#endif //CONFIG_TDLS
126108
126109 return ret;
126110 - }
126111 +}
126112
126113 static int rtw_tdls_pson(struct net_device *dev,
126114 struct iw_request_info *info,
126115 @@ -8672,7 +10443,7 @@ static int rtw_tdls_pson(struct net_device *dev,
126116 u8 i, j, mac_addr[ETH_ALEN];
126117 struct sta_info *ptdls_sta = NULL;
126118
126119 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126120 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126121
126122 for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
126123 mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
126124 @@ -8682,9 +10453,9 @@ static int rtw_tdls_pson(struct net_device *dev,
126125
126126 issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta, 1);
126127
126128 -#endif
126129 +#endif //CONFIG_TDLS
126130
126131 - return ret;
126132 + return ret;
126133 }
126134
126135 static int rtw_tdls_psoff(struct net_device *dev,
126136 @@ -8701,7 +10472,7 @@ static int rtw_tdls_psoff(struct net_device *dev,
126137 u8 i, j, mac_addr[ETH_ALEN];
126138 struct sta_info *ptdls_sta = NULL;
126139
126140 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126141 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126142
126143 for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
126144 mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
126145 @@ -8711,11 +10482,187 @@ static int rtw_tdls_psoff(struct net_device *dev,
126146
126147 issue_nulldata_to_TDLS_peer_STA(padapter, ptdls_sta, 0);
126148
126149 -#endif
126150 +#endif //CONFIG_TDLS
126151 +
126152 + return ret;
126153 +}
126154 +
126155 +static int rtw_tdls_setip(struct net_device *dev,
126156 + struct iw_request_info *info,
126157 + union iwreq_data *wrqu, char *extra)
126158 +{
126159 + int ret = 0;
126160 +
126161 +#ifdef CONFIG_TDLS
126162 +#ifdef CONFIG_WFD
126163 +
126164 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126165 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
126166 + struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
126167 + u8 i=0, j=0, k=0, tag=0, ip[3] = { 0xff }, *ptr = extra;
126168 +
126169 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length - 1 );
126170 +
126171 +
126172 + while( i < 4 )
126173 + {
126174 + for( j=0; j < 4; j++)
126175 + {
126176 + if( *( extra + j + tag ) == '.' || *( extra + j + tag ) == '\0' )
126177 + {
126178 + if( j == 1 )
126179 + pwfd_info->ip_address[i]=convert_ip_addr( '0', '0', *(extra+(j-1)+tag));
126180 + if( j == 2 )
126181 + pwfd_info->ip_address[i]=convert_ip_addr( '0', *(extra+(j-2)+tag), *(extra+(j-1)+tag));
126182 + if( j == 3 )
126183 + pwfd_info->ip_address[i]=convert_ip_addr( *(extra+(j-3)+tag), *(extra+(j-2)+tag), *(extra+(j-1)+tag));
126184 +
126185 + tag += j + 1;
126186 + break;
126187 + }
126188 + }
126189 + i++;
126190 + }
126191 +
126192 + printk( "[%s] Set IP = %u.%u.%u.%u \n", __FUNCTION__,
126193 + ptdlsinfo->wfd_info->ip_address[0], ptdlsinfo->wfd_info->ip_address[1],
126194 + ptdlsinfo->wfd_info->ip_address[2], ptdlsinfo->wfd_info->ip_address[3]
126195 + );
126196 +
126197 +#endif //CONFIG_WFD
126198 +#endif //CONFIG_TDLS
126199 +
126200 + return ret;
126201 +}
126202 +
126203 +static int rtw_tdls_getip(struct net_device *dev,
126204 + struct iw_request_info *info,
126205 + union iwreq_data *wrqu, char *extra)
126206 +{
126207 + int ret = 0;
126208 +
126209 +#ifdef CONFIG_TDLS
126210 +#ifdef CONFIG_WFD
126211 +
126212 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126213 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
126214 + struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
126215 +
126216 + printk( "[%s]\n", __FUNCTION__);
126217 +
126218 + sprintf( extra, "\n\n%u.%u.%u.%u\n",
126219 + pwfd_info->peer_ip_address[0], pwfd_info->peer_ip_address[1],
126220 + pwfd_info->peer_ip_address[2], pwfd_info->peer_ip_address[3]
126221 + );
126222 +
126223 + printk( "[%s] IP=%u.%u.%u.%u\n", __FUNCTION__,
126224 + pwfd_info->peer_ip_address[0], pwfd_info->peer_ip_address[1],
126225 + pwfd_info->peer_ip_address[2], pwfd_info->peer_ip_address[3]
126226 + );
126227 +
126228 + wrqu->data.length = strlen( extra );
126229 +
126230 +#endif //CONFIG_WFD
126231 +#endif //CONFIG_TDLS
126232
126233 return ret;
126234 }
126235
126236 +static int rtw_tdls_getport(struct net_device *dev,
126237 + struct iw_request_info *info,
126238 + union iwreq_data *wrqu, char *extra)
126239 +{
126240 +
126241 + int ret = 0;
126242 +
126243 +#ifdef CONFIG_TDLS
126244 +#ifdef CONFIG_WFD
126245 +
126246 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126247 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
126248 + struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
126249 +
126250 + printk( "[%s]\n", __FUNCTION__);
126251 +
126252 + sprintf( extra, "\n\n%d\n", pwfd_info->peer_rtsp_ctrlport );
126253 + printk( "[%s] remote port = %d\n", __FUNCTION__, pwfd_info->peer_rtsp_ctrlport );
126254 +
126255 + wrqu->data.length = strlen( extra );
126256 +
126257 +#endif //CONFIG_WFD
126258 +#endif //CONFIG_TDLS
126259 +
126260 + return ret;
126261 +
126262 +}
126263 +
126264 +//WFDTDLS, for sigma test
126265 +static int rtw_tdls_dis_result(struct net_device *dev,
126266 + struct iw_request_info *info,
126267 + union iwreq_data *wrqu, char *extra)
126268 +{
126269 +
126270 + int ret = 0;
126271 +
126272 +#ifdef CONFIG_TDLS
126273 +#ifdef CONFIG_WFD
126274 +
126275 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126276 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
126277 + struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
126278 +
126279 + printk( "[%s]\n", __FUNCTION__);
126280 +
126281 + if(ptdlsinfo->dev_discovered == 1 )
126282 + {
126283 + sprintf( extra, "\n\nDis=1\n" );
126284 + ptdlsinfo->dev_discovered = 0;
126285 + }
126286 +
126287 + wrqu->data.length = strlen( extra );
126288 +
126289 +#endif //CONFIG_WFD
126290 +#endif //CONFIG_TDLS
126291 +
126292 + return ret;
126293 +
126294 +}
126295 +
126296 +//WFDTDLS, for sigma test
126297 +static int rtw_wfd_tdls_status(struct net_device *dev,
126298 + struct iw_request_info *info,
126299 + union iwreq_data *wrqu, char *extra)
126300 +{
126301 +
126302 + int ret = 0;
126303 +
126304 +#ifdef CONFIG_TDLS
126305 +#ifdef CONFIG_WFD
126306 +
126307 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126308 + struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
126309 + struct wifi_display_info *pwfd_info = ptdlsinfo->wfd_info;
126310 +
126311 + printk( "[%s]\n", __FUNCTION__);
126312 +
126313 + if(ptdlsinfo->setup_state == TDLS_LINKED_STATE )
126314 + {
126315 + sprintf( extra, "\n\nStatus=1\n" );
126316 + }
126317 + else
126318 + {
126319 + sprintf( extra, "\n\nStatus=0\n" );
126320 + }
126321 +
126322 + wrqu->data.length = strlen( extra );
126323 +
126324 +#endif //CONFIG_WFD
126325 +#endif //CONFIG_TDLS
126326 +
126327 + return ret;
126328 +
126329 +}
126330 +
126331 static int rtw_tdls_ch_switch_off(struct net_device *dev,
126332 struct iw_request_info *info,
126333 union iwreq_data *wrqu, char *extra)
126334 @@ -8728,7 +10675,7 @@ static int rtw_tdls_ch_switch_off(struct net_device *dev,
126335 u8 i, j, mac_addr[ETH_ALEN];
126336 struct sta_info *ptdls_sta = NULL;
126337
126338 - DBG_8192C( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126339 + printk( "[%s] %s %d\n", __FUNCTION__, extra, wrqu->data.length -1 );
126340
126341 for( i=0, j=0 ; i < ETH_ALEN; i++, j+=3 ){
126342 mac_addr[i]=key_2char2num(*(extra+j), *(extra+j+1));
126343 @@ -8741,11 +10688,11 @@ static int rtw_tdls_ch_switch_off(struct net_device *dev,
126344 if((ptdls_sta->tdls_sta_state & TDLS_AT_OFF_CH_STATE) && (ptdls_sta->tdls_sta_state & TDLS_PEER_AT_OFF_STATE)){
126345 pmlmeinfo->tdls_candidate_ch= pmlmeext->cur_channel;
126346 issue_tdls_ch_switch_req(padapter, mac_addr);
126347 - DBG_8192C("issue tdls ch switch req back to base channel\n");
126348 + DBG_871X("issue tdls ch switch req back to base channel\n");
126349 }
126350 */
126351
126352 -#endif
126353 +#endif //CONFIG_TDLS
126354
126355 return ret;
126356 }
126357 @@ -8757,8 +10704,34 @@ static int rtw_tdls(struct net_device *dev,
126358 int ret = 0;
126359
126360 #ifdef CONFIG_TDLS
126361 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126362 +
126363 + printk( "[%s] extra = %s\n", __FUNCTION__, extra );
126364 + // WFD Sigma will use the tdls enable command to let the driver know we want to test the tdls now!
126365 + if ( _rtw_memcmp( extra, "wfdenable=", 10 ) )
126366 + {
126367 + wrqu->data.length -=10;
126368 + rtw_wfd_tdls_enable( dev, info, wrqu, &extra[10] );
126369 + return ret;
126370 + }
126371 + else if ( _rtw_memcmp( extra, "weaksec=", 8 ) )
126372 + {
126373 + wrqu->data.length -=8;
126374 + rtw_tdls_weaksec( dev, info, wrqu, &extra[8] );
126375 + return ret;
126376 + }
126377 + else if ( _rtw_memcmp( extra, "tdlsenable=", 11 ) )
126378 + {
126379 + wrqu->data.length -=11;
126380 + rtw_tdls_enable( dev, info, wrqu, &extra[11] );
126381 + return ret;
126382 + }
126383
126384 - DBG_8192C( "[%s] extra = %s\n", __FUNCTION__, extra );
126385 + if( padapter->tdlsinfo.enable == 0 )
126386 + {
126387 + printk("tdls haven't enabled\n");
126388 + return 0;
126389 + }
126390
126391 if ( _rtw_memcmp( extra, "setup=", 6 ) )
126392 {
126393 @@ -8795,89 +10768,56 @@ static int rtw_tdls(struct net_device *dev,
126394 wrqu->data.length -= 6;
126395 rtw_tdls_psoff( dev, info, wrqu, &extra[6] );
126396 }
126397 -#endif
126398 -
126399 - return ret;
126400 -}
126401 -
126402 -
126403 -static int rtw_pm_set_lps(struct net_device *dev,
126404 - struct iw_request_info *info,
126405 - union iwreq_data *wrqu, char *extra)
126406 -{
126407 -
126408 - int ret = 0;
126409 - _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126410 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
126411 - u8 mode = 0;
126412 -
126413 - switch( wrqu->data.length -1 )
126414 - {
126415 - case 1:
126416 - {
126417 - mode = extra[ 0 ] - '0';
126418 - break;
126419 - }
126420 - case 2:
126421 - {
126422 - mode = str_2char2num( extra[ 0 ], extra[ 1 ]);
126423 - break;
126424 - }
126425 - }
126426 -
126427 - if ( mode < PS_MODE_NUM )
126428 +#ifdef CONFIG_WFD
126429 + else if (_rtw_memcmp( extra, "setip=", 6 ) )
126430 {
126431 - if(pwrctrlpriv->power_mgnt !=mode)
126432 - {
126433 - if(PS_MODE_ACTIVE == mode)
126434 - {
126435 - LeaveAllPowerSaveMode(padapter);
126436 - }
126437 - else
126438 - {
126439 - pwrctrlpriv->LpsIdleCount = 2;
126440 - }
126441 - pwrctrlpriv->power_mgnt = mode;
126442 - pwrctrlpriv->bLeisurePs = (PS_MODE_ACTIVE != pwrctrlpriv->power_mgnt)?_TRUE:_FALSE;
126443 - }
126444 + wrqu->data.length -= 6;
126445 + rtw_tdls_setip( dev, info, wrqu, &extra[6] );
126446 }
126447 - else
126448 + else if (_rtw_memcmp( extra, "tprobe=", 6 ) )
126449 {
126450 - ret = -1;
126451 + issue_tunneled_probe_req((_adapter *)rtw_netdev_priv(dev));
126452 }
126453 +#endif //CONFIG_WFD
126454
126455 +#endif //CONFIG_TDLS
126456 +
126457 return ret;
126458 -
126459 }
126460
126461 -static int rtw_pm_set_ips(struct net_device *dev,
126462 - struct iw_request_info *info,
126463 - union iwreq_data *wrqu, char *extra)
126464 +
126465 +static int rtw_tdls_get(struct net_device *dev,
126466 + struct iw_request_info *info,
126467 + union iwreq_data *wrqu, char *extra)
126468 {
126469 - _adapter *padapter = rtw_netdev_priv(dev);
126470 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
126471 - unsigned mode = 0;
126472 + int ret = 0;
126473 +
126474 +#ifdef CONFIG_WFD
126475
126476 - sscanf(extra, "%u", &mode);
126477 + DBG_871X( "[%s] extra = %s\n", __FUNCTION__, (char*) wrqu->data.pointer );
126478
126479 - if( mode == IPS_NORMAL || mode == IPS_LEVEL_2 ) {
126480 - rtw_ips_mode_req(pwrctrlpriv, mode);
126481 - pwrctrlpriv->power_mgnt = PS_MODE_MIN;
126482 - rtw_set_pwr_state_check_timer(pwrctrlpriv);
126483 - DBG_871X("%s %s\n", __FUNCTION__, mode == IPS_NORMAL?"IPS_NORMAL":"IPS_LEVEL_2");
126484 - return 0;
126485 - }
126486 - else if(mode ==IPS_NONE){
126487 - if(_FAIL == rfpwrstate_check(padapter))
126488 - {
126489 - return -EFAULT;
126490 - }
126491 - pwrctrlpriv->power_mgnt = PS_MODE_ACTIVE;
126492 + if ( _rtw_memcmp( wrqu->data.pointer, "ip", 2 ) )
126493 + {
126494 + rtw_tdls_getip( dev, info, wrqu, extra );
126495 }
126496 - else {
126497 - return -EFAULT;
126498 + if ( _rtw_memcmp( wrqu->data.pointer, "port", 4 ) )
126499 + {
126500 + rtw_tdls_getport( dev, info, wrqu, extra );
126501 }
126502 - return 0;
126503 +
126504 + //WFDTDLS, for sigma test
126505 + if ( _rtw_memcmp( wrqu->data.pointer, "dis", 3 ) )
126506 + {
126507 + rtw_tdls_dis_result( dev, info, wrqu, extra );
126508 + }
126509 + if ( _rtw_memcmp( wrqu->data.pointer, "status", 6 ) )
126510 + {
126511 + rtw_wfd_tdls_status( dev, info, wrqu, extra );
126512 + }
126513 +
126514 +#endif //CONFIG_WFD
126515 +
126516 + return ret;
126517 }
126518
126519 static int rtw_pm_set(struct net_device *dev,
126520 @@ -8885,27 +10825,32 @@ static int rtw_pm_set(struct net_device *dev,
126521 union iwreq_data *wrqu, char *extra)
126522 {
126523 int ret = 0;
126524 + unsigned mode = 0;
126525 _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126526
126527 - DBG_8192C( "[%s] extra = %s\n", __FUNCTION__, extra );
126528 + DBG_871X( "[%s] extra = %s\n", __FUNCTION__, extra );
126529
126530 if ( _rtw_memcmp( extra, "lps=", 4 ) )
126531 {
126532 - wrqu->data.length -= 4;
126533 - rtw_pm_set_lps( dev, info, wrqu, &extra[4] );
126534 + sscanf(extra+4, "%u", &mode);
126535 + ret = rtw_pm_set_lps(padapter,mode);
126536 }
126537 - if ( _rtw_memcmp( extra, "ips=", 4 ) )
126538 + else if ( _rtw_memcmp( extra, "ips=", 4 ) )
126539 {
126540 - wrqu->data.length -= 4;
126541 - rtw_pm_set_ips(dev, info, wrqu, &extra[4]);
126542 + sscanf(extra+4, "%u", &mode);
126543 + ret = rtw_pm_set_ips(padapter,mode);
126544 + }
126545 + else{
126546 + ret = -EINVAL;
126547 }
126548
126549 return ret;
126550 }
126551
126552 +#ifdef CONFIG_WOWLAN
126553 static int rtw_wowlan_ctrl(struct net_device *dev,
126554 - struct iw_request_info *info,
126555 - union iwreq_data *wrqu, char *extra)
126556 + struct iw_request_info *info,
126557 + union iwreq_data *wrqu, char *extra)
126558 {
126559 int ret = 0;
126560 struct oid_par_priv oid_par;
126561 @@ -8946,7 +10891,7 @@ static int rtw_wowlan_ctrl(struct net_device *dev,
126562 DBG_871X("+rtw_wowlan_ctrl: Device didn't support the remote wakeup!!\n");
126563 goto _rtw_wowlan_ctrl_exit_free;
126564 }
126565 - padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)poidparam);
126566 + rtw_hal_set_hwreg(padapter,HW_VAR_WOWLAN,(u8 *)poidparam);
126567
126568 DBG_871X("rtw_wowlan_ctrl: subcode [%d], len[%d], buffer_len[%d]\r\n",
126569 poidparam->subcode, poidparam->len, len);
126570 @@ -8964,7 +10909,612 @@ _rtw_wowlan_ctrl_exit:
126571
126572 return ret;
126573 }
126574 +#endif //CONFIG_WOWLAN
126575 +
126576 +#ifdef CONFIG_INTEL_WIDI
126577 +static int rtw_widi_set(struct net_device *dev,
126578 + struct iw_request_info *info,
126579 + union iwreq_data *wrqu, char *extra)
126580 +{
126581 + int ret = 0;
126582 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126583 +
126584 + process_intel_widi_cmd(padapter, extra);
126585 +
126586 + return ret;
126587 +}
126588 +
126589 +static int rtw_widi_set_probe_request(struct net_device *dev,
126590 + struct iw_request_info *info,
126591 + union iwreq_data *wrqu, char *extra)
126592 +{
126593 + int ret = 0;
126594 + u8 *pbuf = NULL;
126595 + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
126596 +
126597 + pbuf = rtw_malloc(sizeof(l2_msg_t));
126598 + if(pbuf)
126599 + {
126600 + copy_from_user(pbuf, wrqu->data.pointer, wrqu->data.length);
126601 + //_rtw_memcpy(pbuf, wrqu->data.pointer, wrqu->data.length);
126602 +
126603 + if( wrqu->data.flags == 0 )
126604 + intel_widi_wk_cmd(padapter, INTEL_WIDI_ISSUE_PROB_WK, pbuf);
126605 + else if( wrqu->data.flags == 1 )
126606 + rtw_set_wfd_rds_sink_info( padapter, (l2_msg_t *)pbuf );
126607 + }
126608 + return ret;
126609 +}
126610 +
126611 +#endif // CONFIG_INTEL_WIDI
126612 +
126613 +#ifdef RTL8723A_SDIO_LOOPBACK
126614 +#include <rtl8723a_hal.h>
126615 +
126616 +static s32 initLoopback(PADAPTER padapter)
126617 +{
126618 + PLOOPBACKDATA ploopback;
126619 +
126620 +
126621 + if (padapter->ploopback == NULL) {
126622 + ploopback = (PLOOPBACKDATA)rtw_zmalloc(sizeof(LOOPBACKDATA));
126623 + if (ploopback == NULL) return -ENOMEM;
126624 +
126625 + _rtw_init_sema(&ploopback->sema, 0);
126626 +
126627 + ploopback->bstop = _TRUE;
126628 + ploopback->cnt = 0;
126629 + ploopback->size = 300;
126630 + _rtw_memset(ploopback->msg, 0, sizeof(ploopback->msg));
126631 +
126632 + padapter->ploopback = ploopback;
126633 + }
126634 +
126635 + return 0;
126636 +}
126637 +
126638 +static void freeLoopback(PADAPTER padapter)
126639 +{
126640 + PLOOPBACKDATA ploopback;
126641 +
126642 +
126643 + ploopback = padapter->ploopback;
126644 + if (ploopback) {
126645 + rtw_mfree((u8*)ploopback, sizeof(LOOPBACKDATA));
126646 + padapter->ploopback = NULL;
126647 + }
126648 +}
126649 +
126650 +static s32 initpseudoadhoc(PADAPTER padapter)
126651 +{
126652 + NDIS_802_11_NETWORK_INFRASTRUCTURE networkType;
126653 + s32 err;
126654 + _irqL irqL;
126655 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
126656 + _queue *queue = &pmlmepriv->scanned_queue;
126657 +
126658 + networkType = Ndis802_11IBSS;
126659 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
126660 + _enter_critical_bh(&queue->lock, &irqL);
126661 + err = rtw_set_802_11_infrastructure_mode(padapter, networkType);
126662 + _exit_critical_bh(&queue->lock, &irqL);
126663 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
126664 + if (err == _FALSE) return _FAIL;
126665 +
126666 + err = rtw_setopmode_cmd(padapter, networkType);
126667 + if (err == _FAIL) return _FAIL;
126668 +
126669 + return _SUCCESS;
126670 +}
126671 +
126672 +static s32 createpseudoadhoc(PADAPTER padapter)
126673 +{
126674 + NDIS_802_11_AUTHENTICATION_MODE authmode;
126675 + struct mlme_priv *pmlmepriv;
126676 + NDIS_802_11_SSID *passoc_ssid;
126677 + WLAN_BSSID_EX *pdev_network;
126678 + u8 *pibss;
126679 + u8 ssid[] = "pseduo_ad-hoc";
126680 + s32 err;
126681 + _irqL irqL;
126682 +
126683 +
126684 + pmlmepriv = &padapter->mlmepriv;
126685 +
126686 + authmode = Ndis802_11AuthModeOpen;
126687 + err = rtw_set_802_11_authentication_mode(padapter, authmode);
126688 + if (err == _FALSE) return _FAIL;
126689 +
126690 + passoc_ssid = &pmlmepriv->assoc_ssid;
126691 + _rtw_memset(passoc_ssid, 0, sizeof(NDIS_802_11_SSID));
126692 + passoc_ssid->SsidLength = sizeof(ssid) - 1;
126693 + _rtw_memcpy(passoc_ssid->Ssid, ssid, passoc_ssid->SsidLength);
126694 +
126695 + pdev_network = &padapter->registrypriv.dev_network;
126696 + pibss = padapter->registrypriv.dev_network.MacAddress;
126697 + _rtw_memcpy(&pdev_network->Ssid, passoc_ssid, sizeof(NDIS_802_11_SSID));
126698 +
126699 + rtw_update_registrypriv_dev_network(padapter);
126700 + rtw_generate_random_ibss(pibss);
126701 +
126702 + _enter_critical_bh(&pmlmepriv->lock, &irqL);
126703 + pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE;
126704 + _exit_critical_bh(&pmlmepriv->lock, &irqL);
126705 +
126706 +#if 0
126707 + err = rtw_createbss_cmd(padapter);
126708 + if (err == _FAIL) return _FAIL;
126709 +#else
126710 +{
126711 + struct wlan_network *pcur_network;
126712 + struct sta_info *psta;
126713 +
126714 + //3 create a new psta
126715 + pcur_network = &pmlmepriv->cur_network;
126716 +
126717 + //clear psta in the cur_network, if any
126718 + psta = rtw_get_stainfo(&padapter->stapriv, pcur_network->network.MacAddress);
126719 + if (psta) rtw_free_stainfo(padapter, psta);
126720 +
126721 + psta = rtw_alloc_stainfo(&padapter->stapriv, pibss);
126722 + if (psta == NULL) return _FAIL;
126723 +
126724 + //3 join psudo AdHoc
126725 + pcur_network->join_res = 1;
126726 + pcur_network->aid = psta->aid = 1;
126727 + _rtw_memcpy(&pcur_network->network, pdev_network, get_WLAN_BSSID_EX_sz(pdev_network));
126728 +
126729 + // set msr to WIFI_FW_ADHOC_STATE
126730 +#if 0
126731 + Set_NETYPE0_MSR(padapter, WIFI_FW_ADHOC_STATE);
126732 +#else
126733 + {
126734 + u8 val8;
126735 +
126736 + val8 = rtw_read8(padapter, MSR);
126737 + val8 &= 0xFC; // clear NETYPE0
126738 + val8 |= WIFI_FW_ADHOC_STATE & 0x3;
126739 + rtw_write8(padapter, MSR, val8);
126740 + }
126741 +#endif
126742 +}
126743 +#endif
126744 +
126745 + return _SUCCESS;
126746 +}
126747 +
126748 +extern void rtl8723a_cal_txdesc_chksum(struct tx_desc *ptxdesc);
126749 +extern void rtl8723a_fill_default_txdesc(struct xmit_frame *pxmitframe, u8 *pbuf);
126750 +
126751 +static struct xmit_frame* createloopbackpkt(PADAPTER padapter, u32 size)
126752 +{
126753 + struct xmit_priv *pxmitpriv;
126754 + struct xmit_frame *pframe;
126755 + struct xmit_buf *pxmitbuf;
126756 + struct pkt_attrib *pattrib;
126757 + struct tx_desc *desc;
126758 + u8 *pkt_start, *pkt_end, *ptr;
126759 + struct rtw_ieee80211_hdr *hdr;
126760 + s32 bmcast;
126761 + _irqL irqL;
126762 +
126763 +
126764 + if ((TXDESC_SIZE + WLANHDR_OFFSET + size) > MAX_XMITBUF_SZ) return NULL;
126765 +
126766 + pxmitpriv = &padapter->xmitpriv;
126767 + pframe = NULL;
126768 +
126769 + //2 1. allocate xmit frame
126770 + pframe = rtw_alloc_xmitframe(pxmitpriv);
126771 + if (pframe == NULL) return NULL;
126772 + pframe->padapter = padapter;
126773 +
126774 + //2 2. allocate xmit buffer
126775 + _enter_critical_bh(&pxmitpriv->lock, &irqL);
126776 + pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv);
126777 + _exit_critical_bh(&pxmitpriv->lock, &irqL);
126778 + if (pxmitbuf == NULL) {
126779 + rtw_free_xmitframe(pxmitpriv, pframe);
126780 + return NULL;
126781 + }
126782 +
126783 + pframe->pxmitbuf = pxmitbuf;
126784 + pframe->buf_addr = pxmitbuf->pbuf;
126785 + pxmitbuf->priv_data = pframe;
126786 +
126787 + //2 3. update_attrib()
126788 + pattrib = &pframe->attrib;
126789 +
126790 + // init xmitframe attribute
126791 + _rtw_memset(pattrib, 0, sizeof(struct pkt_attrib));
126792 +
126793 + pattrib->ether_type = 0x8723;
126794 + _rtw_memcpy(pattrib->src, padapter->eeprompriv.mac_addr, ETH_ALEN);
126795 + _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
126796 + _rtw_memset(pattrib->dst, 0xFF, ETH_ALEN);
126797 + _rtw_memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
126798 +// pattrib->pctrl = 0;
126799 +// pattrib->dhcp_pkt = 0;
126800 +// pattrib->pktlen = 0;
126801 + pattrib->ack_policy = 0;
126802 +// pattrib->pkt_hdrlen = ETH_HLEN;
126803 + pattrib->hdrlen = WLAN_HDR_A3_LEN;
126804 + pattrib->subtype = WIFI_DATA;
126805 + pattrib->priority = 0;
126806 + pattrib->qsel = pattrib->priority;
126807 +// do_queue_select(padapter, pattrib);
126808 + pattrib->nr_frags = 1;
126809 + pattrib->encrypt = 0;
126810 + pattrib->bswenc = _FALSE;
126811 + pattrib->qos_en = _FALSE;
126812 +
126813 + bmcast = IS_MCAST(pattrib->ra);
126814 + if (bmcast) {
126815 + pattrib->mac_id = 1;
126816 + pattrib->psta = rtw_get_bcmc_stainfo(padapter);
126817 + } else {
126818 + pattrib->mac_id = 0;
126819 + pattrib->psta = rtw_get_stainfo(&padapter->stapriv, get_bssid(&padapter->mlmepriv));
126820 + }
126821 +
126822 + pattrib->pktlen = size;
126823 + pattrib->last_txcmdsz = pattrib->hdrlen + pattrib->pktlen;
126824 +
126825 + //2 4. fill TX descriptor
126826 + desc = (struct tx_desc*)pframe->buf_addr;
126827 + _rtw_memset(desc, 0, TXDESC_SIZE);
126828 +
126829 + rtl8723a_fill_default_txdesc(pframe, (u8*)desc);
126830 +
126831 + // Hw set sequence number
126832 + ((PTXDESC)desc)->hwseq_en = 0; // HWSEQ_EN, 0:disable, 1:enable
126833 +// ((PTXDESC)desc)->hwseq_sel = 0; // HWSEQ_SEL
126834 +
126835 + ((PTXDESC)desc)->disdatafb = 1;
126836 +
126837 + // convert to little endian
126838 + desc->txdw0 = cpu_to_le32(desc->txdw0);
126839 + desc->txdw1 = cpu_to_le32(desc->txdw1);
126840 + desc->txdw2 = cpu_to_le32(desc->txdw2);
126841 + desc->txdw3 = cpu_to_le32(desc->txdw3);
126842 + desc->txdw4 = cpu_to_le32(desc->txdw4);
126843 + desc->txdw5 = cpu_to_le32(desc->txdw5);
126844 + desc->txdw6 = cpu_to_le32(desc->txdw6);
126845 + desc->txdw7 = cpu_to_le32(desc->txdw7);
126846 +#ifdef CONFIG_PCI_HCI
126847 + desc->txdw8 = cpu_to_le32(desc->txdw8);
126848 + desc->txdw9 = cpu_to_le32(desc->txdw9);
126849 + desc->txdw10 = cpu_to_le32(desc->txdw10);
126850 + desc->txdw11 = cpu_to_le32(desc->txdw11);
126851 + desc->txdw12 = cpu_to_le32(desc->txdw12);
126852 + desc->txdw13 = cpu_to_le32(desc->txdw13);
126853 + desc->txdw14 = cpu_to_le32(desc->txdw14);
126854 + desc->txdw15 = cpu_to_le32(desc->txdw15);
126855 +#endif
126856 +
126857 + rtl8723a_cal_txdesc_chksum(desc);
126858 +
126859 + //2 5. coalesce
126860 + pkt_start = pframe->buf_addr + TXDESC_SIZE;
126861 + pkt_end = pkt_start + pattrib->last_txcmdsz;
126862 +
126863 + //3 5.1. make wlan header, make_wlanhdr()
126864 + hdr = (struct rtw_ieee80211_hdr *)pkt_start;
126865 + SetFrameSubType(&hdr->frame_ctl, pattrib->subtype);
126866 + _rtw_memcpy(hdr->addr1, pattrib->dst, ETH_ALEN); // DA
126867 + _rtw_memcpy(hdr->addr2, pattrib->src, ETH_ALEN); // SA
126868 + _rtw_memcpy(hdr->addr3, get_bssid(&padapter->mlmepriv), ETH_ALEN); // RA, BSSID
126869 +
126870 + //3 5.2. make payload
126871 + ptr = pkt_start + pattrib->hdrlen;
126872 + get_random_bytes(ptr, pkt_end - ptr);
126873 +
126874 + pxmitbuf->len = TXDESC_SIZE + pattrib->last_txcmdsz;
126875 + pxmitbuf->ptail += pxmitbuf->len;
126876 +
126877 + return pframe;
126878 +}
126879 +
126880 +static void freeloopbackpkt(PADAPTER padapter, struct xmit_frame *pframe)
126881 +{
126882 + struct xmit_priv *pxmitpriv;
126883 + struct xmit_buf *pxmitbuf;
126884 +
126885 +
126886 + pxmitpriv = &padapter->xmitpriv;
126887 + pxmitbuf = pframe->pxmitbuf;
126888 +
126889 + rtw_free_xmitframe(pxmitpriv, pframe);
126890 + rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
126891 +}
126892
126893 +extern u32 get_txfifo_hwaddr(struct xmit_frame *pxmitframe);
126894 +
126895 +thread_return lbk_thread(thread_context context)
126896 +{
126897 + s32 err;
126898 + PADAPTER padapter;
126899 + PLOOPBACKDATA ploopback;
126900 + struct xmit_frame *pxmitframe;
126901 + u32 cnt, ok, fail, i, headerlen;
126902 + u32 pktsize;
126903 + u32 ff_hwaddr;
126904 +
126905 +
126906 + padapter = (PADAPTER)context;
126907 + ploopback = padapter->ploopback;
126908 + if (ploopback == NULL) return -1;
126909 + cnt = 0;
126910 + ok = 0;
126911 + fail = 0;
126912 +
126913 + daemonize("%s", "RTW_LBK_THREAD");
126914 + allow_signal(SIGTERM);
126915 +
126916 + do {
126917 + if (ploopback->size == 0) {
126918 + get_random_bytes(&pktsize, 4);
126919 + pktsize = (pktsize % 1535) + 1; // 1~1535
126920 + } else
126921 + pktsize = ploopback->size;
126922 +
126923 + pxmitframe = createloopbackpkt(padapter, pktsize);
126924 + if (pxmitframe == NULL) {
126925 + sprintf(ploopback->msg, "loopback FAIL! 3. create Packet FAIL!");
126926 + break;
126927 + }
126928 +
126929 + ploopback->txsize = TXDESC_SIZE + pxmitframe->attrib.last_txcmdsz;
126930 + _rtw_memcpy(ploopback->txbuf, pxmitframe->buf_addr, ploopback->txsize);
126931 +
126932 + ff_hwaddr = get_txfifo_hwaddr(pxmitframe);
126933 + rtw_write_port(padapter, ff_hwaddr, ploopback->txsize, ploopback->txbuf);
126934 + cnt++;
126935 +
126936 + _rtw_down_sema(&ploopback->sema);
126937 +
126938 +{
126939 + PHAL_DATA_TYPE phal;
126940 + struct recv_stat *prxstat;
126941 + struct recv_stat report;
126942 + PRXREPORT prxreport;
126943 + u32 drvinfosize;
126944 + u32 rxpktsize;
126945 + u8 fcssize;
126946 +
126947 + prxstat = (struct recv_stat*)ploopback->rxbuf;
126948 + report.rxdw0 = le32_to_cpu(prxstat->rxdw0);
126949 + report.rxdw1 = le32_to_cpu(prxstat->rxdw1);
126950 + report.rxdw2 = le32_to_cpu(prxstat->rxdw2);
126951 + report.rxdw3 = le32_to_cpu(prxstat->rxdw3);
126952 + report.rxdw4 = le32_to_cpu(prxstat->rxdw4);
126953 + report.rxdw5 = le32_to_cpu(prxstat->rxdw5);
126954 +
126955 + prxreport = (PRXREPORT)&report;
126956 + drvinfosize = prxreport->drvinfosize << 3;
126957 + rxpktsize = prxreport->pktlen;
126958 +
126959 + phal = GET_HAL_DATA(padapter);
126960 + if (phal->ReceiveConfig & RCR_APPFCS) fcssize = IEEE80211_FCS_LEN;
126961 + else fcssize = 0;
126962 +
126963 + if ((ploopback->txsize - TXDESC_SIZE) != (rxpktsize - fcssize)) {
126964 + printk("%s: cnt=%d, size not match! tx=%d rx=%d\n",
126965 + __func__, i, ploopback->txsize - TXDESC_SIZE,
126966 + rxpktsize - fcssize);
126967 + err = _FALSE;
126968 + } else {
126969 + err = _rtw_memcmp(ploopback->txbuf + TXDESC_SIZE,\
126970 + ploopback->rxbuf + RXDESC_SIZE + drvinfosize,\
126971 + ploopback->txsize - TXDESC_SIZE);
126972 + }
126973 +}
126974 +
126975 + if (err == _TRUE)
126976 + ok++;
126977 + else
126978 + fail++;
126979 +
126980 + ploopback->txsize = 0;
126981 + _rtw_memset(ploopback->txbuf, 0, 0x8000);
126982 + ploopback->rxsize = 0;
126983 + _rtw_memset(ploopback->rxbuf, 0, 0x8000);
126984 +
126985 + freeloopbackpkt(padapter, pxmitframe);
126986 + pxmitframe = NULL;
126987 +
126988 + if (signal_pending(current)) {
126989 + flush_signals(current);
126990 + }
126991 +
126992 + if ((ploopback->bstop == _TRUE) ||
126993 + ((ploopback->cnt != 0) && (ploopback->cnt == cnt)))
126994 + {
126995 + u32 ok_rate, fail_rate;
126996 + ok_rate = (ok*100)/cnt;
126997 + fail_rate = (fail*100)/cnt;
126998 + sprintf(ploopback->msg, "loopback result: ok=%d%%(%d/%d),error=%d%%(%d/%d)", ok_rate, ok, cnt, fail_rate, fail, cnt);
126999 + break;
127000 + }
127001 + } while (1);
127002 +
127003 + ploopback->bstop = _TRUE;
127004 +
127005 + thread_exit();
127006 +}
127007 +
127008 +static void loopbackTest(PADAPTER padapter, u32 cnt, u32 size, u8* pmsg)
127009 +{
127010 + PLOOPBACKDATA ploopback;
127011 + u32 len;
127012 + s32 err;
127013 +
127014 +
127015 + ploopback = padapter->ploopback;
127016 +
127017 + if (ploopback)
127018 + {
127019 + ploopback->bstop = _TRUE;
127020 + len = 0;
127021 + do {
127022 + len = strlen(ploopback->msg);
127023 + if (len) break;
127024 + rtw_msleep_os(1);
127025 + } while (1);
127026 + _rtw_memcpy(pmsg, ploopback->msg, len+1);
127027 + freeLoopback(padapter);
127028 + return;
127029 + }
127030 +
127031 + // create pseudo ad-hoc connection
127032 + err = initpseudoadhoc(padapter);
127033 + if (err == _FAIL) {
127034 + sprintf(pmsg, "loopback FAIL! 1.1 init ad-hoc FAIL!");
127035 + return;
127036 + }
127037 +
127038 + err = createpseudoadhoc(padapter);
127039 + if (err == _FAIL) {
127040 + sprintf(pmsg, "loopback FAIL! 1.2 create ad-hoc master FAIL!");
127041 + return;
127042 + }
127043 +
127044 + err = initLoopback(padapter);
127045 + if (err) {
127046 + sprintf(pmsg, "loopback FAIL! 2. init FAIL! error code=%d", err);
127047 + return;
127048 + }
127049 +
127050 + ploopback = padapter->ploopback;
127051 +
127052 + ploopback->bstop = _FALSE;
127053 + ploopback->cnt = cnt;
127054 + ploopback->size = size;
127055 + ploopback->lbkthread = kthread_run(lbk_thread, padapter, "RTW_LBK_THREAD");
127056 + if (IS_ERR(padapter->lbkthread))
127057 + {
127058 + freeLoopback(padapter);
127059 + sprintf(pmsg, "loopback start FAIL! cnt=%d", cnt);
127060 + return;
127061 + }
127062 +
127063 + sprintf(pmsg, "loopback start! cnt=%d", cnt);
127064 +}
127065 +
127066 +extern u8 _InitPowerOn(PADAPTER padapter);
127067 +extern s32 rtl8723a_FirmwareDownload(PADAPTER padapter);
127068 +
127069 +static int rtw_test(
127070 + struct net_device *dev,
127071 + struct iw_request_info *info,
127072 + union iwreq_data *wrqu, char *extra)
127073 +{
127074 + u32 len;
127075 + u8 *pbuf, *pch;
127076 + char *ptmp;
127077 + u8 *delim = ",";
127078 + PADAPTER padapter = rtw_netdev_priv(dev);
127079 +
127080 +
127081 + printk("+%s\n", __func__);
127082 + len = wrqu->data.length;
127083 +
127084 + pbuf = (u8*)rtw_zmalloc(len);
127085 + if (pbuf == NULL) {
127086 + printk("%s: no memory!\n", __func__);
127087 + return -ENOMEM;
127088 + }
127089 +
127090 + if (copy_from_user(pbuf, wrqu->data.pointer, len)) {
127091 + rtw_mfree(pbuf, len);
127092 + printk("%s: copy from user fail!\n", __func__);
127093 + return -EFAULT;
127094 + }
127095 + printk("%s: string=\"%s\"\n", __func__, pbuf);
127096 +
127097 + ptmp = (char*)pbuf;
127098 + pch = strsep(&ptmp, delim);
127099 + if ((pch == NULL) || (strlen(pch) == 0)) {
127100 + rtw_mfree(pbuf, len);
127101 + printk("%s: parameter error(level 1)!\n", __func__);
127102 + return -EFAULT;
127103 + }
127104 +
127105 +#ifdef RTL8723A_SDIO_LOOPBACK
127106 + if (strcmp(pch, "loopback") == 0)
127107 + {
127108 + s32 cnt = 0;
127109 + u32 size = 64;
127110 +
127111 + pch = strsep(&ptmp, delim);
127112 + if ((pch == NULL) || (strlen(pch) == 0)) {
127113 + rtw_mfree(pbuf, len);
127114 + printk("%s: parameter error(level 2)!\n", __func__);
127115 + return -EFAULT;
127116 + }
127117 +
127118 + sscanf(pch, "%d", &cnt);
127119 + printk("%s: loopback cnt=%d\n", __func__, cnt);
127120 +
127121 + pch = strsep(&ptmp, delim);
127122 + if ((pch == NULL) || (strlen(pch) == 0)) {
127123 + rtw_mfree(pbuf, len);
127124 + printk("%s: parameter error(level 2)!\n", __func__);
127125 + return -EFAULT;
127126 + }
127127 +
127128 + sscanf(pch, "%d", &size);
127129 + printk("%s: loopback size=%d\n", __func__, size);
127130 +
127131 + loopbackTest(padapter, cnt, size, extra);
127132 + wrqu->data.length = strlen(extra) + 1;
127133 +
127134 + rtw_mfree(pbuf, len);
127135 + return 0;
127136 + }
127137 +#endif
127138 +
127139 + if (strcmp(pch, "poweron") == 0)
127140 + {
127141 + s32 ret;
127142 +
127143 + ret = _InitPowerOn(padapter);
127144 + if (_FAIL == ret)
127145 + printk("%s: power on FAIL!\n", __func__);
127146 + else
127147 + printk("%s: power on OK.\n", __func__);
127148 +
127149 + rtw_mfree(pbuf, len);
127150 + return 0;
127151 + }
127152 +
127153 + if (strcmp(pch, "dlfw") == 0)
127154 + {
127155 + s32 ret;
127156 +
127157 + ret = rtl8723a_FirmwareDownload(padapter);
127158 + if (_FAIL == ret)
127159 + printk("%s: download FW FAIL!\n", __func__);
127160 + else
127161 + printk("%s: download FW OK.\n", __func__);
127162 +
127163 + rtw_mfree(pbuf, len);
127164 + return 0;
127165 + }
127166 +
127167 + rtw_mfree(pbuf, len);
127168 + return 0;
127169 +}
127170 +#else
127171 +static int rtw_test(
127172 + struct net_device *dev,
127173 + struct iw_request_info *info,
127174 + union iwreq_data *wrqu, char *extra)
127175 +{
127176 + printk("%s\n", __func__);
127177 + return 0;
127178 +}
127179 +#endif //RTL8723A_SDIO_LOOPBACK
127180
127181 #include <rtw_android.h>
127182 int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
127183 @@ -8981,6 +11531,11 @@ int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
127184 case RTL_IOCTL_HOSTAPD:
127185 ret = rtw_hostapd_ioctl(dev, &wrq->u.data);
127186 break;
127187 +#ifdef CONFIG_NO_WIRELESS_HANDLERS
127188 + case SIOCSIWMODE:
127189 + ret = rtw_wx_set_mode(dev, NULL, &wrq->u, NULL);
127190 + break;
127191 +#endif
127192 #endif
127193 case (SIOCDEVPRIVATE+1):
127194 ret = rtw_android_priv_cmd(dev, rq, cmd);
127195 @@ -9029,7 +11584,7 @@ static iw_handler rtw_handlers[] =
127196 NULL, /* -- hole -- */
127197 rtw_wx_set_rate, /* SIOCSIWRATE */
127198 rtw_wx_get_rate, /* SIOCGIWRATE */
127199 - dummy, /* SIOCSIWRTS */
127200 + rtw_wx_set_rts, /* SIOCSIWRTS */
127201 rtw_wx_get_rts, /* SIOCGIWRTS */
127202 rtw_wx_set_frag, /* SIOCSIWFRAG */
127203 rtw_wx_get_frag, /* SIOCGIWFRAG */
127204 @@ -9060,44 +11615,45 @@ static const struct iw_priv_args rtw_private_args[] =
127205 { SIOCIWFIRSTPRIV + 0x00, IW_PRIV_TYPE_CHAR | 1024, 0 , ""}, //set
127206 { SIOCIWFIRSTPRIV + 0x01, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , ""},//get
127207 /* --- sub-ioctls definitions --- */
127208 - { MP_START , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_start" }, //set
127209 + { MP_START , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_start" }, //set
127210 { MP_PHYPARA, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_phypara" },//get
127211 { MP_STOP , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_stop" }, //set
127212 { MP_CHANNEL , IW_PRIV_TYPE_CHAR | 1024 , IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_channel" },//get
127213 { MP_BANDWIDTH , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_bandwidth"}, //set
127214 { MP_RATE , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_rate" },//get
127215 { MP_RESET_STATS , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_reset_stats"},
127216 - { MP_QUERY , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , "mp_query"}, //get
127217 + { MP_QUERY , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , "mp_query"}, //get
127218 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127219 - { READ_REG , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "read_reg" },
127220 + { READ_REG , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "read_reg" },
127221 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127222 - { MP_RATE , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_rate" },
127223 + { MP_RATE , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_rate" },
127224 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127225 - { READ_RF , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "read_rf" },
127226 + { READ_RF , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "read_rf" },
127227 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127228 - { MP_PSD , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_psd"},
127229 + { MP_PSD , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_psd"},
127230 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127231 - { MP_DUMP, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_dump" },
127232 + { MP_DUMP, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_dump" },
127233 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127234 - { MP_TXPOWER , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_txpower"},
127235 + { MP_TXPOWER , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_txpower"},
127236 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127237 - { MP_ANT_TX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ant_tx"},
127238 + { MP_ANT_TX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ant_tx"},
127239 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127240 - { MP_ANT_RX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ant_rx"},
127241 + { MP_ANT_RX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ant_rx"},
127242 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127243 - { WRITE_REG , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "write_reg" },
127244 + { WRITE_REG , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "write_reg" },
127245 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127246 - { WRITE_RF , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "write_rf" },
127247 + { WRITE_RF , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "write_rf" },
127248 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127249 - { MP_CTX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ctx"},
127250 + { MP_CTX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ctx"},
127251 { MP_NULL, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},//set
127252 - { MP_ARX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_arx"},
127253 - { MP_ANT_RX , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_ant_rx"},
127254 - { MP_THER , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ther"},
127255 - { EFUSE_SET, IW_PRIV_TYPE_CHAR | 1024, 0, "efuse_set" },
127256 - { EFUSE_GET, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_get" },
127257 - { MP_PWRTRK , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_pwrtrk"},
127258 - { MP_IOCTL, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_ioctl"}, // mp_ioctl
127259 + { MP_ARX , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_arx"},
127260 + { MP_ANT_RX , IW_PRIV_TYPE_CHAR | 1024, 0, "mp_ant_rx"},
127261 + { MP_THER , IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_ther"},
127262 + { EFUSE_SET, IW_PRIV_TYPE_CHAR | 1024, 0, "efuse_set" },
127263 + { EFUSE_GET, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "efuse_get" },
127264 + { MP_NULL , IW_PRIV_TYPE_CHAR | 1024, 0, "NULL"},
127265 + { MP_PWRTRK, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "mp_pwrtrk" },
127266 + { MP_IOCTL, IW_PRIV_TYPE_CHAR | 1024, 0, "mp_ioctl"}, // mp_ioctl
127267
127268
127269 { SIOCIWFIRSTPRIV + 0x02, IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , "test"},//set
127270 @@ -9110,23 +11666,23 @@ static iw_handler rtw_private_handler[] =
127271 rtw_mp_get,
127272 };
127273
127274 -
127275 #else // not inlucde MP
127276
127277 static const struct iw_priv_args rtw_private_args[] = {
127278 {
127279 SIOCIWFIRSTPRIV + 0x0,
127280 - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "rtw_write32"
127281 + IW_PRIV_TYPE_CHAR | 0x7FF, 0, "write"
127282 },
127283 {
127284 SIOCIWFIRSTPRIV + 0x1,
127285 - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | IFNAMSIZ, "rtw_read32"
127286 + IW_PRIV_TYPE_CHAR | 0x7FF,
127287 + IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | IFNAMSIZ, "read"
127288 },
127289 {
127290 SIOCIWFIRSTPRIV + 0x2, 0, 0, "driver_ext"
127291 },
127292 {
127293 - SIOCIWFIRSTPRIV + 0x3, 0, 0, "" // mp_ioctl
127294 + SIOCIWFIRSTPRIV + 0x3, 0, 0, "mp_ioctl"
127295 },
127296 {
127297 SIOCIWFIRSTPRIV + 0x4,
127298 @@ -9172,40 +11728,57 @@ static const struct iw_priv_args rtw_private_args[] = {
127299 SIOCIWFIRSTPRIV + 0xD,
127300 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | IFNAMSIZ, "rfr"
127301 },
127302 -
127303 +#ifdef CONFIG_WOWLAN
127304 {
127305 SIOCIWFIRSTPRIV + 0xE,0,0, "wowlan_ctrl"
127306 },
127307 -
127308 +#endif // CONFIG_WOWLAN
127309 {
127310 SIOCIWFIRSTPRIV + 0x10,
127311 - IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, 0, "p2p_set"
127312 + IW_PRIV_TYPE_CHAR | 1024, 0, "p2p_set"
127313 },
127314 {
127315 SIOCIWFIRSTPRIV + 0x11,
127316 - IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | P2P_PRIVATE_IOCTL_SET_LEN , "p2p_get"
127317 + IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , "p2p_get"
127318 + },
127319 + {
127320 + SIOCIWFIRSTPRIV + 0x12, 0, 0, "NULL"
127321 },
127322 {
127323 - SIOCIWFIRSTPRIV + 0x12,
127324 - IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, IW_PRIV_TYPE_CHAR | IFNAMSIZ , "p2p_get2"
127325 + SIOCIWFIRSTPRIV + 0x13,
127326 + IW_PRIV_TYPE_CHAR | 64, IW_PRIV_TYPE_CHAR | 64 , "p2p_get2"
127327 },
127328 -#ifdef CONFIG_TDLS
127329 - {SIOCIWFIRSTPRIV + 0x13, IW_PRIV_TYPE_CHAR | 128, 0,"NULL"},
127330 {
127331 SIOCIWFIRSTPRIV + 0x14,
127332 IW_PRIV_TYPE_CHAR | 64, 0, "tdls"
127333 },
127334 -#endif
127335 + {
127336 + SIOCIWFIRSTPRIV + 0x15,
127337 + IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | P2P_PRIVATE_IOCTL_SET_LEN , "tdls_get"
127338 + },
127339 {
127340 SIOCIWFIRSTPRIV + 0x16,
127341 - IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, 0, "pm_set"
127342 + IW_PRIV_TYPE_CHAR | 64, 0, "pm_set"
127343 },
127344
127345 {SIOCIWFIRSTPRIV + 0x18, IW_PRIV_TYPE_CHAR | IFNAMSIZ , 0 , "rereg_nd_name"},
127346
127347 {SIOCIWFIRSTPRIV + 0x1A, IW_PRIV_TYPE_CHAR | 128, 0, "efuse_set"},
127348 {SIOCIWFIRSTPRIV + 0x1B, IW_PRIV_TYPE_CHAR | 128, IW_PRIV_TYPE_CHAR |IW_PRIV_SIZE_FIXED |0x700 ,"efuse_get"},
127349 -
127350 + {
127351 + SIOCIWFIRSTPRIV + 0x1D,
127352 + IW_PRIV_TYPE_CHAR | 40, IW_PRIV_TYPE_CHAR | 0x7FF, "test"
127353 + },
127354 +#ifdef CONFIG_INTEL_WIDI
127355 + {
127356 + SIOCIWFIRSTPRIV + 0x1E,
127357 + IW_PRIV_TYPE_CHAR | 1024, 0, "widi_set"
127358 + },
127359 + {
127360 + SIOCIWFIRSTPRIV + 0x1F,
127361 + IW_PRIV_TYPE_CHAR | 128, 0, "widi_prob_req"
127362 + },
127363 +#endif // CONFIG_INTEL_WIDI
127364 };
127365
127366 static iw_handler rtw_private_handler[] =
127367 @@ -9234,18 +11807,20 @@ static iw_handler rtw_private_handler[] =
127368 rtw_wx_write_rf, //0x0C
127369 rtw_wx_read_rf, //0x0D
127370
127371 -
127372 +#ifdef CONFIG_WOWLAN
127373 rtw_wowlan_ctrl, //0x0E
127374 -
127375 +#else
127376 + rtw_wx_priv_null, //0x0E
127377 +#endif //CONFIG_WOWLAN
127378 rtw_wx_priv_null, //0x0F
127379
127380 rtw_p2p_set, //0x10
127381 rtw_p2p_get, //0x11
127382 - rtw_p2p_get2, //0x12
127383 + NULL, //0x12
127384 + rtw_p2p_get2, //0x13
127385
127386 - NULL, //0x13
127387 rtw_tdls, //0x14
127388 - rtw_wx_priv_null, //0x15
127389 + rtw_tdls_get, //0x15
127390
127391 rtw_pm_set, //0x16
127392 rtw_wx_priv_null, //0x17
127393 @@ -9254,7 +11829,12 @@ static iw_handler rtw_private_handler[] =
127394
127395 rtw_mp_efuse_set, //0x1A
127396 rtw_mp_efuse_get, //0x1B
127397 - // 0x1C is reserved for hostapd
127398 + NULL, // 0x1C is reserved for hostapd
127399 + rtw_test , // 0x1D
127400 +#ifdef CONFIG_INTEL_WIDI
127401 + rtw_widi_set, //0x1E
127402 + rtw_widi_set_probe_request, //0x1F
127403 +#endif // CONFIG_INTEL_WIDI
127404 };
127405
127406 #endif // #if defined(CONFIG_MP_INCLUDED) && defined(CONFIG_MP_IWPRIV_SUPPORT)
127407 @@ -9273,7 +11853,7 @@ static struct iw_statistics *rtw_get_wireless_stats(struct net_device *dev)
127408 piwstats->qual.qual = 0;
127409 piwstats->qual.level = 0;
127410 piwstats->qual.noise = 0;
127411 - //DBG_8192C("No link level:%d, qual:%d, noise:%d\n", tmp_level, tmp_qual, tmp_noise);
127412 + //DBG_871X("No link level:%d, qual:%d, noise:%d\n", tmp_level, tmp_qual, tmp_noise);
127413 }
127414 else{
127415 #ifdef CONFIG_SIGNAL_DISPLAY_DBM
127416 @@ -9284,7 +11864,7 @@ static struct iw_statistics *rtw_get_wireless_stats(struct net_device *dev)
127417
127418 tmp_qual = padapter->recvpriv.signal_qual;
127419 tmp_noise =padapter->recvpriv.noise;
127420 - //DBG_8192C("level:%d, qual:%d, noise:%d, rssi (%d)\n", tmp_level, tmp_qual, tmp_noise,padapter->recvpriv.rssi);
127421 + //DBG_871X("level:%d, qual:%d, noise:%d, rssi (%d)\n", tmp_level, tmp_qual, tmp_noise,padapter->recvpriv.rssi);
127422
127423 piwstats->qual.level = tmp_level;
127424 piwstats->qual.qual = tmp_qual;
127425 @@ -9310,16 +11890,20 @@ static struct iw_statistics *rtw_get_wireless_stats(struct net_device *dev)
127426 }
127427 #endif
127428
127429 +#ifdef CONFIG_WIRELESS_EXT
127430 struct iw_handler_def rtw_handlers_def =
127431 {
127432 .standard = rtw_handlers,
127433 .num_standard = sizeof(rtw_handlers) / sizeof(iw_handler),
127434 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)) || defined(CONFIG_WEXT_PRIV)
127435 .private = rtw_private_handler,
127436 .private_args = (struct iw_priv_args *)rtw_private_args,
127437 .num_private = sizeof(rtw_private_handler) / sizeof(iw_handler),
127438 .num_private_args = sizeof(rtw_private_args) / sizeof(struct iw_priv_args),
127439 +#endif
127440 #if WIRELESS_EXT >= 17
127441 .get_wireless_stats = rtw_get_wireless_stats,
127442 #endif
127443 };
127444 +#endif
127445
127446 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c
127447 index 0175ea2..6fc9f03 100644
127448 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c
127449 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c
127450 @@ -135,7 +135,6 @@ extern void rtw_indicate_wx_disassoc_event(_adapter *padapter);
127451
127452 void rtw_os_indicate_connect(_adapter *adapter)
127453 {
127454 - struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
127455
127456 _func_enter_;
127457
127458 @@ -144,14 +143,13 @@ _func_enter_;
127459 #endif //CONFIG_IOCTL_CFG80211
127460
127461 rtw_indicate_wx_assoc_event(adapter);
127462 -
127463 netif_carrier_on(adapter->pnetdev);
127464
127465 if(adapter->pid[2] !=0)
127466 rtw_signal_process(adapter->pid[2], SIGALRM);
127467
127468 #ifdef RTK_DMP_PLATFORM
127469 - _set_workitem(&pmlmepriv->Linkup_workitem);
127470 + _set_workitem(&adapter->mlmepriv.Linkup_workitem);
127471 #endif
127472
127473 _func_exit_;
127474 @@ -173,7 +171,12 @@ void rtw_reset_securitypriv( _adapter *adapter )
127475 u8 backupPMKIDIndex = 0;
127476 u8 backupTKIPCountermeasure = 0x00;
127477 u32 backupTKIPcountermeasure_time = 0;
127478 -
127479 + // add for CONFIG_IEEE80211W, none 11w also can use
127480 + _irqL irqL;
127481 + struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
127482 +
127483 + _enter_critical_bh(&adapter->security_key_mutex, &irqL);
127484 +
127485 if(adapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)//802.1x
127486 {
127487 // Added by Albert 2009/02/18
127488 @@ -187,8 +190,11 @@ void rtw_reset_securitypriv( _adapter *adapter )
127489 _rtw_memcpy( &backupPMKIDList[ 0 ], &adapter->securitypriv.PMKIDList[ 0 ], sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE );
127490 backupPMKIDIndex = adapter->securitypriv.PMKIDIndex;
127491 backupTKIPCountermeasure = adapter->securitypriv.btkip_countermeasure;
127492 - backupTKIPcountermeasure_time = adapter->securitypriv.btkip_countermeasure_time;
127493 -
127494 + backupTKIPcountermeasure_time = adapter->securitypriv.btkip_countermeasure_time;
127495 +#ifdef CONFIG_IEEE80211W
127496 + //reset RX BIP packet number
127497 + pmlmeext->mgnt_80211w_IPN_rx = 0;
127498 +#endif //CONFIG_IEEE80211W
127499 _rtw_memset((unsigned char *)&adapter->securitypriv, 0, sizeof (struct security_priv));
127500 //_init_timer(&(adapter->securitypriv.tkip_timer),adapter->pnetdev, rtw_use_tkipkey_handler, adapter);
127501
127502 @@ -197,7 +203,7 @@ void rtw_reset_securitypriv( _adapter *adapter )
127503 _rtw_memcpy( &adapter->securitypriv.PMKIDList[ 0 ], &backupPMKIDList[ 0 ], sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE );
127504 adapter->securitypriv.PMKIDIndex = backupPMKIDIndex;
127505 adapter->securitypriv.btkip_countermeasure = backupTKIPCountermeasure;
127506 - adapter->securitypriv.btkip_countermeasure_time = backupTKIPcountermeasure_time;
127507 + adapter->securitypriv.btkip_countermeasure_time = backupTKIPcountermeasure_time;
127508
127509 adapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
127510 adapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled;
127511 @@ -218,9 +224,10 @@ void rtw_reset_securitypriv( _adapter *adapter )
127512
127513 psec_priv->ndisauthtype = Ndis802_11AuthModeOpen;
127514 psec_priv->ndisencryptstatus = Ndis802_11WEPDisabled;
127515 - psec_priv->wps_phase = _FALSE;
127516 //}
127517 }
127518 + // add for CONFIG_IEEE80211W, none 11w also can use
127519 + _exit_critical_bh(&adapter->security_key_mutex, &irqL);
127520 }
127521
127522 void rtw_os_indicate_disconnect( _adapter *adapter )
127523 @@ -229,17 +236,19 @@ void rtw_os_indicate_disconnect( _adapter *adapter )
127524
127525 _func_enter_;
127526
127527 + netif_carrier_off(adapter->pnetdev); // Do it first for tx broadcast pkt after disconnection issue!
127528 +
127529 #ifdef CONFIG_IOCTL_CFG80211
127530 rtw_cfg80211_indicate_disconnect(adapter);
127531 #endif //CONFIG_IOCTL_CFG80211
127532
127533 rtw_indicate_wx_disassoc_event(adapter);
127534 - netif_carrier_off(adapter->pnetdev);
127535
127536 #ifdef RTK_DMP_PLATFORM
127537 _set_workitem(&adapter->mlmepriv.Linkdown_workitem);
127538 #endif
127539 - rtw_reset_securitypriv( adapter );
127540 + //modify for CONFIG_IEEE80211W, none 11w also can use the same command
127541 + rtw_reset_securitypriv_cmd(adapter);
127542
127543 _func_exit_;
127544
127545 @@ -313,185 +322,19 @@ void _addba_timer_hdl(void *FunctionContext)
127546 addba_timer_hdl(psta);
127547 }
127548
127549 -void init_addba_retry_timer(_adapter *padapter, struct sta_info *psta)
127550 -{
127551 -
127552 - _init_timer(&psta->addba_retry_timer, padapter->pnetdev, _addba_timer_hdl, psta);
127553 -}
127554 -
127555 -#ifdef CONFIG_TDLS
127556 -void _TPK_timer_hdl(void *FunctionContext)
127557 -{
127558 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
127559 -
127560 - ptdls_sta->TPK_count++;
127561 - //TPK_timer set 1000 as default
127562 - //retry timer should set at least 301 sec.
127563 - if(ptdls_sta->TPK_count==TPK_RESEND_COUNT){
127564 - ptdls_sta->TPK_count=0;
127565 - issue_tdls_setup_req(ptdls_sta->padapter, ptdls_sta->hwaddr);
127566 - }
127567 -
127568 - _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);
127569 -}
127570 -
127571 -void init_TPK_timer(_adapter *padapter, struct sta_info *psta)
127572 -{
127573 - psta->padapter=padapter;
127574 -
127575 - _init_timer(&psta->TPK_timer, padapter->pnetdev, _TPK_timer_hdl, psta);
127576 -}
127577 -
127578 -// TDLS_DONE_CH_SEN: channel sensing and report candidate channel
127579 -// TDLS_OFF_CH: first time set channel to off channel
127580 -// TDLS_BASE_CH: when go back to the channel linked with AP, send null data to peer STA as an indication
127581 -void _ch_switch_timer_hdl(void *FunctionContext)
127582 -{
127583 -
127584 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
127585 - _adapter *padapter = ptdls_sta->padapter;
127586 -
127587 - if( ptdls_sta->option == TDLS_DONE_CH_SEN ){
127588 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_DONE_CH_SEN);
127589 - }else if( ptdls_sta->option == TDLS_OFF_CH ){
127590 - issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta, 0);
127591 - _set_timer(&ptdls_sta->base_ch_timer, 500);
127592 - }else if( ptdls_sta->option == TDLS_BASE_CH){
127593 - issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta, 0);
127594 - }
127595 -}
127596 -
127597 -void init_ch_switch_timer(_adapter *padapter, struct sta_info *psta)
127598 -{
127599 - psta->padapter=padapter;
127600 - _init_timer(&psta->option_timer, padapter->pnetdev, _ch_switch_timer_hdl, psta);
127601 -}
127602 -
127603 -void _base_ch_timer_hdl(void *FunctionContext)
127604 -{
127605 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
127606 - rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_OFF_CH);
127607 -}
127608 -
127609 -void init_base_ch_timer(_adapter *padapter, struct sta_info *psta)
127610 -{
127611 - psta->padapter=padapter;
127612 - _init_timer(&psta->base_ch_timer, padapter->pnetdev, _base_ch_timer_hdl, psta);
127613 -}
127614 -
127615 -void _off_ch_timer_hdl(void *FunctionContext)
127616 -{
127617 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
127618 - rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_BASE_CH );
127619 - }
127620 -
127621 -void init_off_ch_timer(_adapter *padapter, struct sta_info *psta)
127622 -{
127623 - psta->padapter=padapter;
127624 - _init_timer(&psta->off_ch_timer, padapter->pnetdev, _off_ch_timer_hdl, psta);
127625 -}
127626 -
127627 -void _tdls_handshake_timer_hdl(void *FunctionContext)
127628 +#ifdef CONFIG_IEEE80211W
127629 +void _sa_query_timer_hdl (void *FunctionContext)
127630 {
127631 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
127632 -
127633 - if(ptdls_sta != NULL)
127634 - {
127635 - if( !(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) )
127636 - {
127637 - printk("HANDSHAKE TIME OUT\n");
127638 - free_tdls_sta(ptdls_sta->padapter, ptdls_sta);
127639 - }
127640 - }
127641 -}
127642 -
127643 -void init_handshake_timer(_adapter *padapter, struct sta_info *psta)
127644 -{
127645 - psta->padapter=padapter;
127646 - _init_timer(&psta->handshake_timer, padapter->pnetdev, _tdls_handshake_timer_hdl, psta);
127647 -}
127648 -
127649 -//Check tdls peer sta alive.
127650 -void _tdls_alive_timer_phase1_hdl(void *FunctionContext)
127651 -{
127652 - _irqL irqL;
127653 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
127654 - _adapter *padapter = ptdls_sta->padapter;
127655 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
127656 -
127657 - _enter_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
127658 - ptdls_sta->timer_flag = 1;
127659 - _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
127660 -
127661 - ptdls_sta->tdls_sta_state &= (~TDLS_ALIVE_STATE);
127662 -
127663 - DBG_8192C("issue_tdls_dis_req to check alive\n");
127664 - issue_tdls_dis_req( padapter, ptdls_sta->hwaddr);
127665 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH1);
127666 - sta_update_last_rx_pkts(ptdls_sta);
127667 -
127668 - if ( ptdls_sta->timer_flag == 2 )
127669 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_FREE_STA);
127670 - else
127671 - {
127672 - _enter_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
127673 - ptdls_sta->timer_flag = 0;
127674 - _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
127675 - }
127676 -
127677 -}
127678 -
127679 -void _tdls_alive_timer_phase2_hdl(void *FunctionContext)
127680 -{
127681 - _irqL irqL;
127682 - struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
127683 - _adapter *padapter = ptdls_sta->padapter;
127684 - struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
127685 -
127686 - _enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
127687 - ptdls_sta->timer_flag = 1;
127688 - _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
127689 -
127690 - if( (ptdls_sta->tdls_sta_state & TDLS_ALIVE_STATE) &&
127691 - (sta_last_rx_pkts(ptdls_sta) + 3 <= sta_rx_pkts(ptdls_sta)) )
127692 - {
127693 - DBG_8192C("TDLS STA ALIVE\n");
127694 - ptdls_sta->alive_count = 0;
127695 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH2);
127696 - }
127697 - else
127698 - {
127699 - DBG_8192C("TDLS STA TOO FAR\n");
127700 - ptdls_sta->alive_count++;
127701 - if( ptdls_sta->alive_count == TDLS_ALIVE_COUNT )
127702 - {
127703 - ptdls_sta->stat_code = _RSON_TDLS_TEAR_TOOFAR_;
127704 - issue_tdls_teardown(padapter, ptdls_sta->hwaddr);
127705 - }
127706 - else
127707 - {
127708 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH2);
127709 - }
127710 + _adapter *padapter = (_adapter *)FunctionContext;
127711 + sa_query_timer_hdl(padapter);
127712 }
127713 +#endif //CONFIG_IEEE80211W
127714
127715 - if ( ptdls_sta->timer_flag == 2 )
127716 - rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_FREE_STA);
127717 - else
127718 +void init_addba_retry_timer(_adapter *padapter, struct sta_info *psta)
127719 {
127720 - _enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
127721 - ptdls_sta->timer_flag = 0;
127722 - _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
127723 -}
127724 -
127725 -}
127726
127727 -void init_tdls_alive_timer(_adapter *padapter, struct sta_info *psta)
127728 -{
127729 - psta->padapter=padapter;
127730 - _init_timer(&psta->alive_timer1, padapter->pnetdev, _tdls_alive_timer_phase1_hdl, psta);
127731 - _init_timer(&psta->alive_timer2, padapter->pnetdev, _tdls_alive_timer_phase2_hdl, psta);
127732 + _init_timer(&psta->addba_retry_timer, padapter->pnetdev, _addba_timer_hdl, psta);
127733 }
127734 -#endif //CONFIG_TDLS
127735
127736 /*
127737 void _reauth_timer_hdl(void *FunctionContext)
127738 @@ -513,6 +356,9 @@ void init_mlme_ext_timer(_adapter *padapter)
127739
127740 _init_timer(&pmlmeext->survey_timer, padapter->pnetdev, _survey_timer_hdl, padapter);
127741 _init_timer(&pmlmeext->link_timer, padapter->pnetdev, _link_timer_hdl, padapter);
127742 +#ifdef CONFIG_IEEE80211W
127743 + _init_timer(&pmlmeext->sa_query_timer, padapter->pnetdev, _sa_query_timer_hdl, padapter);
127744 +#endif //CONFIG_IEEE80211W
127745 //_init_timer(&pmlmeext->ADDBA_timer, padapter->pnetdev, _addba_timer_hdl, padapter);
127746
127747 //_init_timer(&pmlmeext->reauth_timer, padapter->pnetdev, _reauth_timer_hdl, padapter);
127748 @@ -579,24 +425,24 @@ static int mgnt_xmit_entry(struct sk_buff *skb, struct net_device *pnetdev)
127749 struct hostapd_priv *phostapdpriv = rtw_netdev_priv(pnetdev);
127750 _adapter *padapter = (_adapter *)phostapdpriv->padapter;
127751
127752 - //DBG_8192C("%s\n", __FUNCTION__);
127753 + //DBG_871X("%s\n", __FUNCTION__);
127754
127755 - return padapter->HalFunc.hostap_mgnt_xmit_entry(padapter, skb);
127756 + return rtw_hal_hostap_mgnt_xmit_entry(padapter, skb);
127757 }
127758
127759 static int mgnt_netdev_open(struct net_device *pnetdev)
127760 {
127761 struct hostapd_priv *phostapdpriv = rtw_netdev_priv(pnetdev);
127762
127763 - DBG_8192C("mgnt_netdev_open: MAC Address:" MAC_FMT "\n", MAC_ARG(pnetdev->dev_addr));
127764 + DBG_871X("mgnt_netdev_open: MAC Address:" MAC_FMT "\n", MAC_ARG(pnetdev->dev_addr));
127765
127766
127767 init_usb_anchor(&phostapdpriv->anchored);
127768
127769 - if(!netif_queue_stopped(pnetdev))
127770 - netif_start_queue(pnetdev);
127771 + if(!rtw_netif_queue_stopped(pnetdev))
127772 + rtw_netif_start_queue(pnetdev);
127773 else
127774 - netif_wake_queue(pnetdev);
127775 + rtw_netif_wake_queue(pnetdev);
127776
127777
127778 netif_carrier_on(pnetdev);
127779 @@ -609,14 +455,14 @@ static int mgnt_netdev_close(struct net_device *pnetdev)
127780 {
127781 struct hostapd_priv *phostapdpriv = rtw_netdev_priv(pnetdev);
127782
127783 - DBG_8192C("%s\n", __FUNCTION__);
127784 + DBG_871X("%s\n", __FUNCTION__);
127785
127786 usb_kill_anchored_urbs(&phostapdpriv->anchored);
127787
127788 netif_carrier_off(pnetdev);
127789
127790 - if (!netif_queue_stopped(pnetdev))
127791 - netif_stop_queue(pnetdev);
127792 + if (!rtw_netif_queue_stopped(pnetdev))
127793 + rtw_netif_stop_queue(pnetdev);
127794
127795 //rtw_write16(phostapdpriv->padapter, 0x0116, 0x3f3f);
127796
127797 @@ -658,7 +504,7 @@ int hostapd_mode_init(_adapter *padapter)
127798
127799 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
127800
127801 - DBG_8192C("register rtl871x_mgnt_netdev_ops to netdev_ops\n");
127802 + DBG_871X("register rtl871x_mgnt_netdev_ops to netdev_ops\n");
127803
127804 pnetdev->netdev_ops = &rtl871x_mgnt_netdev_ops;
127805
127806 @@ -690,7 +536,7 @@ int hostapd_mode_init(_adapter *padapter)
127807
127808 if(dev_alloc_name(pnetdev,"mgnt.wlan%d") < 0)
127809 {
127810 - DBG_8192C("hostapd_mode_init(): dev_alloc_name, fail! \n");
127811 + DBG_871X("hostapd_mode_init(): dev_alloc_name, fail! \n");
127812 }
127813
127814
127815 @@ -713,7 +559,7 @@ int hostapd_mode_init(_adapter *padapter)
127816 /* Tell the network stack we exist */
127817 if (register_netdev(pnetdev) != 0)
127818 {
127819 - DBG_8192C("hostapd_mode_init(): register_netdev fail!\n");
127820 + DBG_871X("hostapd_mode_init(): register_netdev fail!\n");
127821
127822 if(pnetdev)
127823 {
127824 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c
127825 index b88a5eb..82dee6d 100644
127826 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c
127827 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c
127828 @@ -1,7 +1,7 @@
127829 /******************************************************************************
127830 *
127831 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
127832 - *
127833 + *
127834 * This program is free software; you can redistribute it and/or modify it
127835 * under the terms of version 2 of the GNU General Public License as
127836 * published by the Free Software Foundation.
127837 @@ -31,14 +31,10 @@
127838 #include <drv_types.h>
127839 #include <xmit_osdep.h>
127840 #include <recv_osdep.h>
127841 -#include <hal_init.h>
127842 +#include <hal_intf.h>
127843 #include <rtw_ioctl.h>
127844 #include <rtw_version.h>
127845
127846 -#ifdef CONFIG_SDIO_HCI
127847 -#include <sdio_osintf.h>
127848 -#endif
127849 -
127850 #ifdef CONFIG_USB_HCI
127851 #include <usb_osintf.h>
127852 #endif
127853 @@ -62,9 +58,9 @@ int rtw_rfintfs = HWPI;
127854 int rtw_lbkmode = 0;//RTL8712_AIR_TRX;
127855
127856
127857 -int rtw_network_mode = Ndis802_11IBSS;//Ndis802_11Infrastructure;//infra, ad-hoc, auto
127858 +int rtw_network_mode = Ndis802_11IBSS;//Ndis802_11Infrastructure;//infra, ad-hoc, auto
127859 //NDIS_802_11_SSID ssid;
127860 -int rtw_channel = 1;//ad-hoc support requirement
127861 +int rtw_channel = 1;//ad-hoc support requirement
127862 int rtw_wireless_mode = WIRELESS_11BG_24N;
127863 int rtw_vrtl_carrier_sense = AUTO_VCS;
127864 int rtw_vcs_type = RTS_CTS;//*
127865 @@ -74,18 +70,18 @@ int rtw_preamble = PREAMBLE_LONG;//long, short, auto
127866 int rtw_scan_mode = 1;//active, passive
127867 int rtw_adhoc_tx_pwr = 1;
127868 int rtw_soft_ap = 0;
127869 -//int smart_ps = 1;
127870 +//int smart_ps = 1;
127871 #ifdef CONFIG_POWER_SAVING
127872 int rtw_power_mgnt = 1;
127873 -#else
127874 -int rtw_power_mgnt = PS_MODE_ACTIVE;
127875 -#endif
127876 -
127877 #ifdef CONFIG_IPS_LEVEL_2
127878 int rtw_ips_mode = IPS_LEVEL_2;
127879 #else
127880 int rtw_ips_mode = IPS_NORMAL;
127881 #endif
127882 +#else
127883 +int rtw_power_mgnt = PS_MODE_ACTIVE;
127884 +int rtw_ips_mode = IPS_NONE;
127885 +#endif
127886 module_param(rtw_ips_mode, int, 0644);
127887 MODULE_PARM_DESC(rtw_ips_mode,"The default IPS mode");
127888
127889 @@ -101,21 +97,21 @@ int rtw_mp_mode = 1;
127890 int rtw_mp_mode = 0;
127891 #endif
127892 int rtw_software_encrypt = 0;
127893 -int rtw_software_decrypt = 0;
127894 +int rtw_software_decrypt = 0;
127895
127896 int rtw_acm_method = 0;// 0:By SW 1:By HW.
127897 -
127898 +
127899 int rtw_wmm_enable = 1;// default is set to enable the wmm.
127900 -int rtw_uapsd_enable = 0;
127901 +int rtw_uapsd_enable = 0;
127902 int rtw_uapsd_max_sp = NO_LIMIT;
127903 int rtw_uapsd_acbk_en = 0;
127904 int rtw_uapsd_acbe_en = 0;
127905 int rtw_uapsd_acvi_en = 0;
127906 int rtw_uapsd_acvo_en = 0;
127907 -
127908 +
127909 #ifdef CONFIG_80211N_HT
127910 int rtw_ht_enable = 1;
127911 -int rtw_cbw40_enable = 1;
127912 +int rtw_cbw40_enable = 3; // 0 :diable, bit(0): enable 2.4g, bit(1): enable 5g
127913 int rtw_ampdu_enable = 1;//for enable tx_ampdu
127914 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
127915 int rtw_ampdu_amsdu = 0;// 0: disabled, 1:enabled, 2:auto
127916 @@ -123,7 +119,7 @@ int rtw_ampdu_amsdu = 0;// 0: disabled, 1:enabled, 2:auto
127917
127918 int rtw_lowrate_two_xmit = 1;//Use 2 path Tx to transmit MCS0~7 and legacy mode
127919
127920 -//int rf_config = RF_1T2R; // 1T2R
127921 +//int rf_config = RF_1T2R; // 1T2R
127922 int rtw_rf_config = RF_819X_MAX_TYPE; //auto
127923 int rtw_low_power = 0;
127924 #ifdef CONFIG_WIFI_TEST
127925 @@ -131,6 +127,9 @@ int rtw_wifi_spec = 1;//for wifi test
127926 #else
127927 int rtw_wifi_spec = 0;
127928 #endif
127929 +
127930 +int rtw_special_rf_path = 0; //0: 2T2R ,1: only turn on path A 1T1R, 2: only turn on path B 1T1R
127931 +
127932 int rtw_channel_plan = RT_CHANNEL_DOMAIN_MAX;
127933
127934 #ifdef CONFIG_BT_COEXIST
127935 @@ -151,7 +150,7 @@ int rtw_enusbss = 0;//0:disable,1:enable
127936 int rtw_hwpdn_mode=2;//0:disable,1:enable,2: by EFUSE config
127937
127938 #ifdef CONFIG_HW_PWRP_DETECTION
127939 -int rtw_hwpwrp_detect = 1;
127940 +int rtw_hwpwrp_detect = 1;
127941 #else
127942 int rtw_hwpwrp_detect = 0; //HW power ping detect 0:disable , 1:enable
127943 #endif
127944 @@ -166,11 +165,27 @@ int rtw_hw_wps_pbc = 0;
127945 int rtw_mc2u_disable = 0;
127946 #endif // CONFIG_TX_MCAST2UNI
127947
127948 +int rtw_mac_phy_mode = 0; //0:by efuse, 1:smsp, 2:dmdp, 3:dmsp.
127949 +
127950 +#ifdef CONFIG_80211D
127951 +int rtw_80211d = 0;
127952 +#endif
127953 +
127954 char* ifname = "wlan%d";
127955 +module_param(ifname, charp, 0644);
127956 +MODULE_PARM_DESC(ifname, "The default name to allocate for first interface");
127957 +
127958 +char* if2name = "wlan%d";
127959 +module_param(if2name, charp, 0644);
127960 +MODULE_PARM_DESC(if2name, "The default name to allocate for second interface");
127961
127962 char* rtw_initmac = 0; // temp mac address if users want to use instead of the mac address in Efuse
127963
127964 -module_param(ifname, charp, 0644);
127965 +#ifdef CONFIG_MULTI_VIR_IFACES
127966 +int rtw_ext_iface_num = 1;//primary/secondary iface is excluded
127967 +module_param(rtw_ext_iface_num, int, 0644);
127968 +#endif //CONFIG_MULTI_VIR_IFACES
127969 +
127970 module_param(rtw_initmac, charp, 0644);
127971 module_param(rtw_channel_plan, int, 0644);
127972 module_param(rtw_chip_version, int, 0644);
127973 @@ -198,6 +213,8 @@ module_param(rtw_power_mgnt, int, 0644);
127974 module_param(rtw_low_power, int, 0644);
127975 module_param(rtw_wifi_spec, int, 0644);
127976
127977 +module_param(rtw_special_rf_path, int, 0644);
127978 +
127979 module_param(rtw_antdiv_cfg, int, 0644);
127980
127981
127982 @@ -205,6 +222,8 @@ module_param(rtw_enusbss, int, 0644);
127983 module_param(rtw_hwpdn_mode, int, 0644);
127984 module_param(rtw_hwpwrp_detect, int, 0644);
127985
127986 +module_param(rtw_hw_wps_pbc, int, 0644);
127987 +
127988 #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
127989 char *rtw_adaptor_info_caching_file_path= "/data/misc/wifi/rtw_cache";
127990 module_param(rtw_adaptor_info_caching_file_path, charp, 0644);
127991 @@ -223,16 +242,6 @@ module_param(rtw_force_iol, bool, 0644);
127992 MODULE_PARM_DESC(rtw_force_iol,"Force to enable IOL");
127993 #endif //CONFIG_IOL
127994
127995 -#ifdef SUPPORT_64_STA
127996 -uint rtw_bcmc_rate=8;
127997 -module_param(rtw_bcmc_rate, uint, 0644);
127998 -MODULE_PARM_DESC(rtw_bcmc_rate,"The bc/mc data rate");
127999 -#endif // SUPPORT_64_STA
128000 -
128001 -uint rtw_intel_class_mode=0;
128002 -module_param(rtw_intel_class_mode, uint, 0644);
128003 -MODULE_PARM_DESC(rtw_intel_class_mode,"The intel class mode [0: off, 1: on]");
128004 -
128005 #ifdef CONFIG_FILE_FWIMG
128006 char *rtw_fw_file_path= "";
128007 module_param(rtw_fw_file_path, charp, 0644);
128008 @@ -243,7 +252,18 @@ MODULE_PARM_DESC(rtw_fw_file_path, "The path of fw image");
128009 module_param(rtw_mc2u_disable, int, 0644);
128010 #endif // CONFIG_TX_MCAST2UNI
128011
128012 +module_param(rtw_mac_phy_mode, int, 0644);
128013 +
128014 +#ifdef CONFIG_80211D
128015 +module_param(rtw_80211d, int, 0644);
128016 +#endif
128017 +
128018 +uint rtw_notch_filter = RTW_NOTCH_FILTER;
128019 +module_param(rtw_notch_filter, uint, 0644);
128020 +MODULE_PARM_DESC(rtw_notch_filter, "0:Disable, 1:Enable, 2:Enable only for P2P");
128021 +
128022 static uint loadparam( _adapter *padapter, _nic_hdl pnetdev);
128023 +int _netdev_open(struct net_device *pnetdev);
128024 int netdev_open (struct net_device *pnetdev);
128025 static int netdev_close (struct net_device *pnetdev);
128026
128027 @@ -255,23 +275,14 @@ static char rtw_proc_name[IFNAMSIZ];
128028 static struct proc_dir_entry *rtw_proc = NULL;
128029 static int rtw_proc_cnt = 0;
128030
128031 -#ifndef create_proc_entry
128032 -/* dummy routines */
128033 -void rtw_proc_remove_one(struct net_device *dev)
128034 -{
128035 -}
128036 -
128037 -void rtw_proc_init_one(struct net_device *dev)
128038 -{
128039 -}
128040 -
128041 -#else /* create_proc_entry not defined */
128042 +#define RTW_PROC_NAME DRV_NAME
128043
128044 void rtw_proc_init_one(struct net_device *dev)
128045 {
128046 struct proc_dir_entry *dir_dev = NULL;
128047 struct proc_dir_entry *entry=NULL;
128048 _adapter *padapter = rtw_netdev_priv(dev);
128049 + u8 rf_type;
128050
128051 if(rtw_proc == NULL)
128052 {
128053 @@ -283,6 +294,18 @@ void rtw_proc_init_one(struct net_device *dev)
128054 {
128055 _rtw_memcpy(rtw_proc_name, RTL8192D_PROC_NAME, sizeof(RTL8192D_PROC_NAME));
128056 }
128057 + else if(padapter->chip_type == RTL8723A)
128058 + {
128059 + _rtw_memcpy(rtw_proc_name, RTW_PROC_NAME, sizeof(RTW_PROC_NAME));
128060 + }
128061 + else if(padapter->chip_type == RTL8188E)
128062 + {
128063 + _rtw_memcpy(rtw_proc_name, RTW_PROC_NAME, sizeof(RTW_PROC_NAME));
128064 + }
128065 + else
128066 + {
128067 + _rtw_memcpy(rtw_proc_name, RTW_PROC_NAME, sizeof(RTW_PROC_NAME));
128068 + }
128069
128070 #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
128071 rtw_proc=create_proc_entry(rtw_proc_name, S_IFDIR, proc_net);
128072 @@ -290,23 +313,40 @@ void rtw_proc_init_one(struct net_device *dev)
128073 rtw_proc=create_proc_entry(rtw_proc_name, S_IFDIR, init_net.proc_net);
128074 #endif
128075 if (rtw_proc == NULL) {
128076 - DBG_8192C(KERN_ERR "Unable to create rtw_proc directory\n");
128077 + DBG_871X(KERN_ERR "Unable to create rtw_proc directory\n");
128078 + return;
128079 + }
128080 +
128081 + entry = create_proc_read_entry("ver_info", S_IFREG | S_IRUGO, rtw_proc, proc_get_drv_version, dev);
128082 + if (!entry) {
128083 + DBG_871X("Unable to create_proc_read_entry!\n");
128084 return;
128085 }
128086
128087 - entry = create_proc_read_entry("ver_info", S_IFREG | S_IRUGO, rtw_proc, proc_get_drv_version, dev);
128088 + entry = create_proc_read_entry("log_level", S_IFREG | S_IRUGO,
128089 + rtw_proc, proc_get_log_level, dev);
128090 + if (!entry) {
128091 + DBG_871X("Unable to create_proc_read_entry!\n");
128092 + return;
128093 + }
128094 + entry->write_proc = proc_set_log_level;
128095 +
128096 +#ifdef DBG_MEM_ALLOC
128097 + entry = create_proc_read_entry("mstat", S_IFREG | S_IRUGO,
128098 + rtw_proc, proc_get_mstat, dev);
128099 if (!entry) {
128100 - DBG_871X("Unable to create_proc_read_entry!\n");
128101 + DBG_871X("Unable to create_proc_read_entry!\n");
128102 return;
128103 }
128104 +#endif /* DBG_MEM_ALLOC */
128105 }
128106
128107 -
128108 +
128109
128110 if(padapter->dir_dev == NULL)
128111 {
128112 - padapter->dir_dev = create_proc_entry(dev->name,
128113 - S_IFDIR | S_IRUGO | S_IXUGO,
128114 + padapter->dir_dev = create_proc_entry(dev->name,
128115 + S_IFDIR | S_IRUGO | S_IXUGO,
128116 rtw_proc);
128117
128118 dir_dev = padapter->dir_dev;
128119 @@ -320,12 +360,12 @@ void rtw_proc_init_one(struct net_device *dev)
128120 remove_proc_entry(rtw_proc_name, proc_net);
128121 #else
128122 remove_proc_entry(rtw_proc_name, init_net.proc_net);
128123 -#endif
128124 +#endif
128125 rtw_proc = NULL;
128126 }
128127 }
128128
128129 - DBG_8192C("Unable to create dir_dev directory\n");
128130 + DBG_871X("Unable to create dir_dev directory\n");
128131 return;
128132 }
128133 }
128134 @@ -337,147 +377,283 @@ void rtw_proc_init_one(struct net_device *dev)
128135 rtw_proc_cnt++;
128136
128137 entry = create_proc_read_entry("write_reg", S_IFREG | S_IRUGO,
128138 - dir_dev, proc_get_write_reg, dev);
128139 + dir_dev, proc_get_write_reg, dev);
128140 if (!entry) {
128141 - DBG_871X("Unable to create_proc_read_entry!\n");
128142 + DBG_871X("Unable to create_proc_read_entry!\n");
128143 return;
128144 }
128145 entry->write_proc = proc_set_write_reg;
128146
128147 entry = create_proc_read_entry("read_reg", S_IFREG | S_IRUGO,
128148 - dir_dev, proc_get_read_reg, dev);
128149 + dir_dev, proc_get_read_reg, dev);
128150 if (!entry) {
128151 - DBG_871X("Unable to create_proc_read_entry!\n");
128152 + DBG_871X("Unable to create_proc_read_entry!\n");
128153 return;
128154 }
128155 entry->write_proc = proc_set_read_reg;
128156
128157 -
128158 +
128159 entry = create_proc_read_entry("fwstate", S_IFREG | S_IRUGO,
128160 - dir_dev, proc_get_fwstate, dev);
128161 + dir_dev, proc_get_fwstate, dev);
128162 if (!entry) {
128163 - DBG_871X("Unable to create_proc_read_entry!\n");
128164 + DBG_871X("Unable to create_proc_read_entry!\n");
128165 return;
128166 }
128167
128168
128169 entry = create_proc_read_entry("sec_info", S_IFREG | S_IRUGO,
128170 - dir_dev, proc_get_sec_info, dev);
128171 + dir_dev, proc_get_sec_info, dev);
128172 if (!entry) {
128173 - DBG_871X("Unable to create_proc_read_entry!\n");
128174 + DBG_871X("Unable to create_proc_read_entry!\n");
128175 return;
128176 }
128177
128178
128179 entry = create_proc_read_entry("mlmext_state", S_IFREG | S_IRUGO,
128180 - dir_dev, proc_get_mlmext_state, dev);
128181 + dir_dev, proc_get_mlmext_state, dev);
128182 if (!entry) {
128183 - DBG_871X("Unable to create_proc_read_entry!\n");
128184 + DBG_871X("Unable to create_proc_read_entry!\n");
128185 return;
128186 }
128187
128188
128189 entry = create_proc_read_entry("qos_option", S_IFREG | S_IRUGO,
128190 - dir_dev, proc_get_qos_option, dev);
128191 + dir_dev, proc_get_qos_option, dev);
128192 if (!entry) {
128193 - DBG_871X("Unable to create_proc_read_entry!\n");
128194 + DBG_871X("Unable to create_proc_read_entry!\n");
128195 return;
128196 }
128197
128198 entry = create_proc_read_entry("ht_option", S_IFREG | S_IRUGO,
128199 - dir_dev, proc_get_ht_option, dev);
128200 + dir_dev, proc_get_ht_option, dev);
128201 if (!entry) {
128202 - DBG_871X("Unable to create_proc_read_entry!\n");
128203 + DBG_871X("Unable to create_proc_read_entry!\n");
128204 return;
128205 }
128206
128207 entry = create_proc_read_entry("rf_info", S_IFREG | S_IRUGO,
128208 - dir_dev, proc_get_rf_info, dev);
128209 + dir_dev, proc_get_rf_info, dev);
128210 if (!entry) {
128211 - DBG_871X("Unable to create_proc_read_entry!\n");
128212 + DBG_871X("Unable to create_proc_read_entry!\n");
128213 return;
128214 }
128215 -
128216 +
128217 entry = create_proc_read_entry("ap_info", S_IFREG | S_IRUGO,
128218 - dir_dev, proc_get_ap_info, dev);
128219 + dir_dev, proc_get_ap_info, dev);
128220 if (!entry) {
128221 - DBG_871X("Unable to create_proc_read_entry!\n");
128222 + DBG_871X("Unable to create_proc_read_entry!\n");
128223 return;
128224 }
128225
128226 entry = create_proc_read_entry("adapter_state", S_IFREG | S_IRUGO,
128227 - dir_dev, proc_get_adapter_state, dev);
128228 + dir_dev, proc_get_adapter_state, dev);
128229 if (!entry) {
128230 - DBG_871X("Unable to create_proc_read_entry!\n");
128231 + DBG_871X("Unable to create_proc_read_entry!\n");
128232 return;
128233 }
128234
128235 entry = create_proc_read_entry("trx_info", S_IFREG | S_IRUGO,
128236 - dir_dev, proc_get_trx_info, dev);
128237 + dir_dev, proc_get_trx_info, dev);
128238 + if (!entry) {
128239 + DBG_871X("Unable to create_proc_read_entry!\n");
128240 + return;
128241 + }
128242 +
128243 + entry = create_proc_read_entry("mac_reg_dump1", S_IFREG | S_IRUGO,
128244 + dir_dev, proc_get_mac_reg_dump1, dev);
128245 + if (!entry) {
128246 + DBG_871X("Unable to create_proc_read_entry!\n");
128247 + return;
128248 + }
128249 +
128250 + entry = create_proc_read_entry("mac_reg_dump2", S_IFREG | S_IRUGO,
128251 + dir_dev, proc_get_mac_reg_dump2, dev);
128252 + if (!entry) {
128253 + DBG_871X("Unable to create_proc_read_entry!\n");
128254 + return;
128255 + }
128256 +
128257 + entry = create_proc_read_entry("mac_reg_dump3", S_IFREG | S_IRUGO,
128258 + dir_dev, proc_get_mac_reg_dump3, dev);
128259 + if (!entry) {
128260 + DBG_871X("Unable to create_proc_read_entry!\n");
128261 + return;
128262 + }
128263 +
128264 + entry = create_proc_read_entry("bb_reg_dump1", S_IFREG | S_IRUGO,
128265 + dir_dev, proc_get_bb_reg_dump1, dev);
128266 + if (!entry) {
128267 + DBG_871X("Unable to create_proc_read_entry!\n");
128268 + return;
128269 + }
128270 +
128271 + entry = create_proc_read_entry("bb_reg_dump2", S_IFREG | S_IRUGO,
128272 + dir_dev, proc_get_bb_reg_dump2, dev);
128273 + if (!entry) {
128274 + DBG_871X("Unable to create_proc_read_entry!\n");
128275 + return;
128276 + }
128277 +
128278 + entry = create_proc_read_entry("bb_reg_dump3", S_IFREG | S_IRUGO,
128279 + dir_dev, proc_get_bb_reg_dump3, dev);
128280 + if (!entry) {
128281 + DBG_871X("Unable to create_proc_read_entry!\n");
128282 + return;
128283 + }
128284 +
128285 + entry = create_proc_read_entry("rf_reg_dump1", S_IFREG | S_IRUGO,
128286 + dir_dev, proc_get_rf_reg_dump1, dev);
128287 + if (!entry) {
128288 + DBG_871X("Unable to create_proc_read_entry!\n");
128289 + return;
128290 + }
128291 +
128292 + entry = create_proc_read_entry("rf_reg_dump2", S_IFREG | S_IRUGO,
128293 + dir_dev, proc_get_rf_reg_dump2, dev);
128294 if (!entry) {
128295 - DBG_871X("Unable to create_proc_read_entry!\n");
128296 + DBG_871X("Unable to create_proc_read_entry!\n");
128297 return;
128298 }
128299
128300 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
128301 + if((RF_1T2R == rf_type) ||(RF_1T1R ==rf_type )) {
128302 + entry = create_proc_read_entry("rf_reg_dump3", S_IFREG | S_IRUGO,
128303 + dir_dev, proc_get_rf_reg_dump3, dev);
128304 + if (!entry) {
128305 + DBG_871X("Unable to create_proc_read_entry!\n");
128306 + return;
128307 + }
128308 +
128309 + entry = create_proc_read_entry("rf_reg_dump4", S_IFREG | S_IRUGO,
128310 + dir_dev, proc_get_rf_reg_dump4, dev);
128311 + if (!entry) {
128312 + DBG_871X("Unable to create_proc_read_entry!\n");
128313 + return;
128314 + }
128315 + }
128316 +
128317 #ifdef CONFIG_AP_MODE
128318
128319 entry = create_proc_read_entry("all_sta_info", S_IFREG | S_IRUGO,
128320 - dir_dev, proc_get_all_sta_info, dev);
128321 + dir_dev, proc_get_all_sta_info, dev);
128322 if (!entry) {
128323 - DBG_871X("Unable to create_proc_read_entry!\n");
128324 + DBG_871X("Unable to create_proc_read_entry!\n");
128325 return;
128326 }
128327 #endif
128328
128329 #ifdef DBG_MEMORY_LEAK
128330 entry = create_proc_read_entry("_malloc_cnt", S_IFREG | S_IRUGO,
128331 - dir_dev, proc_get_malloc_cnt, dev);
128332 + dir_dev, proc_get_malloc_cnt, dev);
128333 if (!entry) {
128334 - DBG_871X("Unable to create_proc_read_entry!\n");
128335 + DBG_871X("Unable to create_proc_read_entry!\n");
128336 return;
128337 }
128338 #endif
128339
128340 #ifdef CONFIG_FIND_BEST_CHANNEL
128341 entry = create_proc_read_entry("best_channel", S_IFREG | S_IRUGO,
128342 - dir_dev, proc_get_best_channel, dev);
128343 + dir_dev, proc_get_best_channel, dev);
128344 if (!entry) {
128345 - DBG_871X("Unable to create_proc_read_entry!\n");
128346 + DBG_871X("Unable to create_proc_read_entry!\n");
128347 return;
128348 }
128349 + entry->write_proc = proc_set_best_channel;
128350 #endif
128351
128352 entry = create_proc_read_entry("rx_signal", S_IFREG | S_IRUGO,
128353 - dir_dev, proc_get_rx_signal, dev);
128354 + dir_dev, proc_get_rx_signal, dev);
128355 if (!entry) {
128356 - DBG_871X("Unable to create_proc_read_entry!\n");
128357 + DBG_871X("Unable to create_proc_read_entry!\n");
128358 return;
128359 }
128360 entry->write_proc = proc_set_rx_signal;
128361
128362 + entry = create_proc_read_entry("ht_enable", S_IFREG | S_IRUGO,
128363 + dir_dev, proc_get_ht_enable, dev);
128364 + if (!entry) {
128365 + DBG_871X("Unable to create_proc_read_entry!\n");
128366 + return;
128367 + }
128368 + entry->write_proc = proc_set_ht_enable;
128369 +
128370 + entry = create_proc_read_entry("cbw40_enable", S_IFREG | S_IRUGO,
128371 + dir_dev, proc_get_cbw40_enable, dev);
128372 + if (!entry) {
128373 + DBG_871X("Unable to create_proc_read_entry!\n");
128374 + return;
128375 + }
128376 + entry->write_proc = proc_set_cbw40_enable;
128377 +
128378 entry = create_proc_read_entry("ampdu_enable", S_IFREG | S_IRUGO,
128379 - dir_dev, proc_get_ampdu_enable, dev);
128380 + dir_dev, proc_get_ampdu_enable, dev);
128381 if (!entry) {
128382 - DBG_871X("Unable to create_proc_read_entry!\n");
128383 + DBG_871X("Unable to create_proc_read_entry!\n");
128384 return;
128385 }
128386 entry->write_proc = proc_set_ampdu_enable;
128387
128388 + entry = create_proc_read_entry("rx_stbc", S_IFREG | S_IRUGO,
128389 + dir_dev, proc_get_rx_stbc, dev);
128390 + if (!entry) {
128391 + DBG_871X("Unable to create_proc_read_entry!\n");
128392 + return;
128393 + }
128394 + entry->write_proc = proc_set_rx_stbc;
128395 +
128396 +
128397 + entry = create_proc_read_entry("path_rssi", S_IFREG | S_IRUGO,
128398 + dir_dev, proc_get_two_path_rssi, dev);
128399 +
128400 + entry = create_proc_read_entry("vid", S_IFREG | S_IRUGO,
128401 + dir_dev, proc_get_vid, dev);
128402 + if (!entry) {
128403 + DBG_871X("Unable to create_proc_read_entry!\n");
128404 + return;
128405 + }
128406 +
128407 + entry = create_proc_read_entry("pid", S_IFREG | S_IRUGO,
128408 + dir_dev, proc_get_pid, dev);
128409 + if (!entry) {
128410 + DBG_871X("Unable to create_proc_read_entry!\n");
128411 + return;
128412 + }
128413 +
128414 entry = create_proc_read_entry("rssi_disp", S_IFREG | S_IRUGO,
128415 - dir_dev, proc_get_rssi_disp, dev);
128416 + dir_dev, proc_get_rssi_disp, dev);
128417 if (!entry) {
128418 - DBG_871X("Unable to create_proc_read_entry!\n");
128419 + DBG_871X("Unable to create_proc_read_entry!\n");
128420 return;
128421 }
128422 entry->write_proc = proc_set_rssi_disp;
128423
128424 +#if defined(DBG_CONFIG_ERROR_DETECT)
128425 + entry = create_proc_read_entry("sreset", S_IFREG | S_IRUGO,
128426 + dir_dev, proc_get_sreset, dev);
128427 + if (!entry) {
128428 + DBG_871X("Unable to create_proc_read_entry!\n");
128429 + return;
128430 + }
128431 + entry->write_proc = proc_set_sreset;
128432 +#endif /* DBG_CONFIG_ERROR_DETECT */
128433 +
128434 +#ifdef CONFIG_DM_ADAPTIVITY
128435 + entry = create_proc_read_entry("dm_adaptivity", S_IFREG | S_IRUGO,
128436 + dir_dev, proc_get_dm_adaptivity, dev);
128437 + if (!entry) {
128438 + DBG_871X("Unable to create_proc_read_entry!\n");
128439 + return;
128440 + }
128441 + entry->write_proc = proc_set_dm_adaptivity;
128442 +#endif /* CONFIG_DM_ADAPTIVITY */
128443 +
128444 }
128445
128446 void rtw_proc_remove_one(struct net_device *dev)
128447 {
128448 struct proc_dir_entry *dir_dev = NULL;
128449 _adapter *padapter = rtw_netdev_priv(dev);
128450 -
128451 + u8 rf_type;
128452
128453 dir_dev = padapter->dir_dev;
128454 padapter->dir_dev = NULL;
128455 @@ -491,29 +667,64 @@ void rtw_proc_remove_one(struct net_device *dev)
128456 remove_proc_entry("mlmext_state", dir_dev);
128457 remove_proc_entry("qos_option", dir_dev);
128458 remove_proc_entry("ht_option", dir_dev);
128459 - remove_proc_entry("rf_info", dir_dev);
128460 + remove_proc_entry("rf_info", dir_dev);
128461 remove_proc_entry("ap_info", dir_dev);
128462 remove_proc_entry("adapter_state", dir_dev);
128463 remove_proc_entry("trx_info", dir_dev);
128464
128465 -#ifdef CONFIG_AP_MODE
128466 + remove_proc_entry("mac_reg_dump1", dir_dev);
128467 + remove_proc_entry("mac_reg_dump2", dir_dev);
128468 + remove_proc_entry("mac_reg_dump3", dir_dev);
128469 + remove_proc_entry("bb_reg_dump1", dir_dev);
128470 + remove_proc_entry("bb_reg_dump2", dir_dev);
128471 + remove_proc_entry("bb_reg_dump3", dir_dev);
128472 + remove_proc_entry("rf_reg_dump1", dir_dev);
128473 + remove_proc_entry("rf_reg_dump2", dir_dev);
128474 + rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
128475 + if((RF_1T2R == rf_type) ||(RF_1T1R ==rf_type )) {
128476 + remove_proc_entry("rf_reg_dump3", dir_dev);
128477 + remove_proc_entry("rf_reg_dump4", dir_dev);
128478 + }
128479 +#ifdef CONFIG_AP_MODE
128480 remove_proc_entry("all_sta_info", dir_dev);
128481 -#endif
128482 +#endif
128483
128484 #ifdef DBG_MEMORY_LEAK
128485 remove_proc_entry("_malloc_cnt", dir_dev);
128486 -#endif
128487 +#endif
128488
128489 #ifdef CONFIG_FIND_BEST_CHANNEL
128490 remove_proc_entry("best_channel", dir_dev);
128491 -#endif
128492 +#endif
128493 remove_proc_entry("rx_signal", dir_dev);
128494
128495 + remove_proc_entry("cbw40_enable", dir_dev);
128496 +
128497 + remove_proc_entry("ht_enable", dir_dev);
128498 +
128499 + remove_proc_entry("ampdu_enable", dir_dev);
128500 +
128501 + remove_proc_entry("rx_stbc", dir_dev);
128502 +
128503 + remove_proc_entry("path_rssi", dir_dev);
128504 +
128505 + remove_proc_entry("vid", dir_dev);
128506 +
128507 + remove_proc_entry("pid", dir_dev);
128508 +
128509 remove_proc_entry("rssi_disp", dir_dev);
128510
128511 +#if defined(DBG_CONFIG_ERROR_DETECT)
128512 + remove_proc_entry("sreset", dir_dev);
128513 +#endif /* DBG_CONFIG_ERROR_DETECT */
128514 +
128515 +#ifdef CONFIG_DM_ADAPTIVITY
128516 + remove_proc_entry("dm_adaptivity", dir_dev);
128517 +#endif
128518 +
128519 remove_proc_entry(dev->name, rtw_proc);
128520 dir_dev = NULL;
128521 -
128522 +
128523 }
128524 else
128525 {
128526 @@ -526,22 +737,26 @@ void rtw_proc_remove_one(struct net_device *dev)
128527 {
128528 if(rtw_proc){
128529 remove_proc_entry("ver_info", rtw_proc);
128530 -
128531 +
128532 + remove_proc_entry("log_level", rtw_proc);
128533 + #ifdef DBG_MEM_ALLOC
128534 + remove_proc_entry("mstat", rtw_proc);
128535 + #endif /* DBG_MEM_ALLOC */
128536 #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
128537 remove_proc_entry(rtw_proc_name, proc_net);
128538 #else
128539 remove_proc_entry(rtw_proc_name, init_net.proc_net);
128540 -#endif
128541 +#endif
128542 rtw_proc = NULL;
128543 }
128544 }
128545 }
128546 #endif
128547 -#endif
128548
128549 +uint loadparam( _adapter *padapter, _nic_hdl pnetdev);
128550 uint loadparam( _adapter *padapter, _nic_hdl pnetdev)
128551 {
128552 -
128553 +
128554 uint status = _SUCCESS;
128555 struct registry_priv *registry_par = &padapter->registrypriv;
128556
128557 @@ -549,13 +764,13 @@ _func_enter_;
128558
128559 registry_par->chip_version = (u8)rtw_chip_version;
128560 registry_par->rfintfs = (u8)rtw_rfintfs;
128561 - registry_par->lbkmode = (u8)rtw_lbkmode;
128562 + registry_par->lbkmode = (u8)rtw_lbkmode;
128563 //registry_par->hci = (u8)hci;
128564 - registry_par->network_mode = (u8)rtw_network_mode;
128565 + registry_par->network_mode = (u8)rtw_network_mode;
128566
128567 - _rtw_memcpy(registry_par->ssid.Ssid, "ANY", 3);
128568 + _rtw_memcpy(registry_par->ssid.Ssid, "ANY", 3);
128569 registry_par->ssid.SsidLength = 3;
128570 -
128571 +
128572 registry_par->channel = (u8)rtw_channel;
128573 registry_par->wireless_mode = (u8)rtw_wireless_mode;
128574 registry_par->vrtl_carrier_sense = (u8)rtw_vrtl_carrier_sense ;
128575 @@ -566,7 +781,7 @@ _func_enter_;
128576 registry_par->scan_mode = (u8)rtw_scan_mode;
128577 registry_par->adhoc_tx_pwr = (u8)rtw_adhoc_tx_pwr;
128578 registry_par->soft_ap= (u8)rtw_soft_ap;
128579 - //registry_par->smart_ps = (u8)rtw_smart_ps;
128580 + //registry_par->smart_ps = (u8)rtw_smart_ps;
128581 registry_par->power_mgnt = (u8)rtw_power_mgnt;
128582 registry_par->ips_mode = (u8)rtw_ips_mode;
128583 registry_par->radio_enable = (u8)rtw_radio_enable;
128584 @@ -574,16 +789,16 @@ _func_enter_;
128585 registry_par->short_retry_lmt = (u8)rtw_short_retry_lmt;
128586 registry_par->busy_thresh = (u16)rtw_busy_thresh;
128587 //registry_par->qos_enable = (u8)rtw_qos_enable;
128588 - registry_par->ack_policy = (u8)rtw_ack_policy;
128589 - registry_par->mp_mode = (u8)rtw_mp_mode;
128590 + registry_par->ack_policy = (u8)rtw_ack_policy;
128591 + registry_par->mp_mode = (u8)rtw_mp_mode;
128592 registry_par->software_encrypt = (u8)rtw_software_encrypt;
128593 - registry_par->software_decrypt = (u8)rtw_software_decrypt;
128594 + registry_par->software_decrypt = (u8)rtw_software_decrypt;
128595
128596 registry_par->acm_method = (u8)rtw_acm_method;
128597
128598 //UAPSD
128599 registry_par->wmm_enable = (u8)rtw_wmm_enable;
128600 - registry_par->uapsd_enable = (u8)rtw_uapsd_enable;
128601 + registry_par->uapsd_enable = (u8)rtw_uapsd_enable;
128602 registry_par->uapsd_max_sp = (u8)rtw_uapsd_max_sp;
128603 registry_par->uapsd_acbk_en = (u8)rtw_uapsd_acbk_en;
128604 registry_par->uapsd_acbe_en = (u8)rtw_uapsd_acbe_en;
128605 @@ -594,7 +809,7 @@ _func_enter_;
128606 registry_par->ht_enable = (u8)rtw_ht_enable;
128607 registry_par->cbw40_enable = (u8)rtw_cbw40_enable;
128608 registry_par->ampdu_enable = (u8)rtw_ampdu_enable;
128609 - registry_par->rx_stbc = (u8)rtw_rx_stbc;
128610 + registry_par->rx_stbc = (u8)rtw_rx_stbc;
128611 registry_par->ampdu_amsdu = (u8)rtw_ampdu_amsdu;
128612 #endif
128613
128614 @@ -602,9 +817,9 @@ _func_enter_;
128615 registry_par->rf_config = (u8)rtw_rf_config;
128616 registry_par->low_power = (u8)rtw_low_power;
128617
128618 -
128619 - registry_par->wifi_spec = (u8)rtw_wifi_spec;
128620
128621 + registry_par->wifi_spec = (u8)rtw_wifi_spec;
128622 + registry_par->special_rf_path = (u8)rtw_special_rf_path;
128623 registry_par->channel_plan = (u8)rtw_channel_plan;
128624
128625 #ifdef CONFIG_BT_COEXIST
128626 @@ -627,36 +842,49 @@ _func_enter_;
128627 registry_par->hw_wps_pbc = (u8)rtw_hw_wps_pbc;
128628
128629 #ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
128630 - snprintf(registry_par->adaptor_info_caching_file_path, PATH_LENGTH_MAX, "%s",rtw_adaptor_info_caching_file_path);
128631 + snprintf(registry_par->adaptor_info_caching_file_path, PATH_LENGTH_MAX, "%s", rtw_adaptor_info_caching_file_path);
128632 registry_par->adaptor_info_caching_file_path[PATH_LENGTH_MAX-1]=0;
128633 #endif
128634
128635 #ifdef CONFIG_LAYER2_ROAMING
128636 registry_par->max_roaming_times = (u8)rtw_max_roaming_times;
128637 +#ifdef CONFIG_INTEL_WIDI
128638 + registry_par->max_roaming_times = (u8)rtw_max_roaming_times + 2;
128639 +#endif // CONFIG_INTEL_WIDI
128640 #endif
128641
128642 #ifdef CONFIG_IOL
128643 registry_par->force_iol = rtw_force_iol;
128644 #endif
128645
128646 -#ifdef SUPPORT_64_STA
128647 - registry_par->bcmc_rate= (u8)rtw_bcmc_rate;
128648 + registry_par->mac_phy_mode = rtw_mac_phy_mode;
128649 +
128650 +#ifdef CONFIG_80211D
128651 + registry_par->enable80211d = (u8)rtw_80211d;
128652 #endif
128653 - registry_par->intel_class_mode= (u8)rtw_intel_class_mode;
128654 +
128655 + snprintf(registry_par->ifname, 16, "%s", ifname);
128656 + snprintf(registry_par->if2name, 16, "%s", if2name);
128657 +
128658 + registry_par->notch_filter = (u8)rtw_notch_filter;
128659 +
128660 +#ifdef CONFIG_MULTI_VIR_IFACES
128661 + registry_par->ext_iface_num = (u8)rtw_ext_iface_num;
128662 +#endif //CONFIG_MULTI_VIR_IFACES
128663 +
128664 _func_exit_;
128665
128666 return status;
128667 -
128668 }
128669
128670 static int rtw_net_set_mac_address(struct net_device *pnetdev, void *p)
128671 {
128672 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
128673 struct sockaddr *addr = p;
128674 -
128675 +
128676 if(padapter->bup == _FALSE)
128677 {
128678 - //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],
128679 + //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],
128680 //addr->sa_data[4], addr->sa_data[5]);
128681 _rtw_memcpy(padapter->eeprompriv.mac_addr, addr->sa_data, ETH_ALEN);
128682 //_rtw_memcpy(pnetdev->dev_addr, addr->sa_data, ETH_ALEN);
128683 @@ -673,20 +901,103 @@ static struct net_device_stats *rtw_net_get_stats(struct net_device *pnetdev)
128684 struct recv_priv *precvpriv = &(padapter->recvpriv);
128685
128686 padapter->stats.tx_packets = pxmitpriv->tx_pkts;//pxmitpriv->tx_pkts++;
128687 - padapter->stats.rx_packets = precvpriv->rx_pkts;//precvpriv->rx_pkts++;
128688 + padapter->stats.rx_packets = precvpriv->rx_pkts;//precvpriv->rx_pkts++;
128689 padapter->stats.tx_dropped = pxmitpriv->tx_drop;
128690 padapter->stats.rx_dropped = precvpriv->rx_drop;
128691 padapter->stats.tx_bytes = pxmitpriv->tx_bytes;
128692 padapter->stats.rx_bytes = precvpriv->rx_bytes;
128693 -
128694 - return &padapter->stats;
128695 +
128696 + return &padapter->stats;
128697 +}
128698 +
128699 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
128700 +/*
128701 + * AC to queue mapping
128702 + *
128703 + * AC_VO -> queue 0
128704 + * AC_VI -> queue 1
128705 + * AC_BE -> queue 2
128706 + * AC_BK -> queue 3
128707 + */
128708 +static const u16 rtw_1d_to_queue[8] = { 2, 3, 3, 2, 1, 1, 0, 0 };
128709 +
128710 +/* Given a data frame determine the 802.1p/1d tag to use. */
128711 +unsigned int rtw_classify8021d(struct sk_buff *skb)
128712 +{
128713 + unsigned int dscp;
128714 +
128715 + /* skb->priority values from 256->263 are magic values to
128716 + * directly indicate a specific 802.1d priority. This is used
128717 + * to allow 802.1d priority to be passed directly in from VLAN
128718 + * tags, etc.
128719 + */
128720 + if (skb->priority >= 256 && skb->priority <= 263)
128721 + return skb->priority - 256;
128722 +
128723 + switch (skb->protocol) {
128724 + case htons(ETH_P_IP):
128725 + dscp = ip_hdr(skb)->tos & 0xfc;
128726 + break;
128727 + default:
128728 + return 0;
128729 + }
128730 +
128731 + return dscp >> 5;
128732 +}
128733 +
128734 +static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb)
128735 +{
128736 + _adapter *padapter = rtw_netdev_priv(dev);
128737 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
128738 +
128739 + skb->priority = rtw_classify8021d(skb);
128740 +
128741 + if(pmlmepriv->acm_mask != 0)
128742 + {
128743 + skb->priority = qos_acm(pmlmepriv->acm_mask, skb->priority);
128744 + }
128745 +
128746 + return rtw_1d_to_queue[skb->priority];
128747 +}
128748 +
128749 +u16 rtw_recv_select_queue(struct sk_buff *skb)
128750 +{
128751 + struct iphdr *piphdr;
128752 + unsigned int dscp;
128753 + u16 eth_type;
128754 + u32 priority;
128755 + u8 *pdata = skb->data;
128756 +
128757 + _rtw_memcpy(&eth_type, pdata+(ETH_ALEN<<1), 2);
128758 +
128759 + switch (eth_type) {
128760 + case htons(ETH_P_IP):
128761 +
128762 + piphdr = (struct iphdr *)(pdata+ETH_HLEN);
128763 +
128764 + dscp = piphdr->tos & 0xfc;
128765 +
128766 + priority = dscp >> 5;
128767 +
128768 + break;
128769 + default:
128770 + priority = 0;
128771 + }
128772 +
128773 + return rtw_1d_to_queue[priority];
128774 +
128775 }
128776
128777 +#endif
128778 +
128779 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
128780 static const struct net_device_ops rtw_netdev_ops = {
128781 .ndo_open = netdev_open,
128782 .ndo_stop = netdev_close,
128783 .ndo_start_xmit = rtw_xmit_entry,
128784 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
128785 + .ndo_select_queue = rtw_select_queue,
128786 +#endif
128787 .ndo_set_mac_address = rtw_net_set_mac_address,
128788 .ndo_get_stats = rtw_net_get_stats,
128789 .ndo_do_ioctl = rtw_ioctl,
128790 @@ -715,24 +1026,24 @@ int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname)
128791 TargetNetdev = dev_get_by_name(devnet, "wlan0");
128792 #endif
128793 if(TargetNetdev) {
128794 - DBG_8192C("Force onboard module driver disappear !!!\n");
128795 + DBG_871X("Force onboard module driver disappear !!!\n");
128796 TargetAdapter = rtw_netdev_priv(TargetNetdev);
128797 TargetAdapter->DriverState = DRIVER_DISAPPEAR;
128798
128799 padapter->pid[0] = TargetAdapter->pid[0];
128800 padapter->pid[1] = TargetAdapter->pid[1];
128801 padapter->pid[2] = TargetAdapter->pid[2];
128802 -
128803 +
128804 dev_put(TargetNetdev);
128805 unregister_netdev(TargetNetdev);
128806 -#ifdef CONFIG_PROC_DEBUG
128807 +
128808 if(TargetAdapter->chip_type == padapter->chip_type)
128809 rtw_proc_remove_one(TargetNetdev);
128810 -#endif
128811 +
128812 padapter->DriverState = DRIVER_REPLACE_DONGLE;
128813 }
128814 }
128815 -#endif
128816 +#endif //CONFIG_EASY_REPLACEMENT
128817
128818 if(dev_alloc_name(pnetdev, ifname) < 0)
128819 {
128820 @@ -740,41 +1051,41 @@ int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname)
128821 }
128822
128823 netif_carrier_off(pnetdev);
128824 - //netif_stop_queue(pnetdev);
128825 + //rtw_netif_stop_queue(pnetdev);
128826
128827 return 0;
128828 }
128829
128830 -struct net_device *rtw_init_netdev(_adapter *old_padapter)
128831 +struct net_device *rtw_init_netdev(_adapter *old_padapter)
128832 {
128833 _adapter *padapter;
128834 struct net_device *pnetdev;
128835
128836 RT_TRACE(_module_os_intfs_c_,_drv_info_,("+init_net_dev\n"));
128837
128838 - if(old_padapter != NULL)
128839 + if(old_padapter != NULL)
128840 pnetdev = rtw_alloc_etherdev_with_old_priv(sizeof(_adapter), (void *)old_padapter);
128841 - else
128842 + else
128843 pnetdev = rtw_alloc_etherdev(sizeof(_adapter));
128844 -
128845 +
128846 if (!pnetdev)
128847 return NULL;
128848
128849 padapter = rtw_netdev_priv(pnetdev);
128850 - padapter->pnetdev = pnetdev;
128851 + padapter->pnetdev = pnetdev;
128852
128853 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
128854 SET_MODULE_OWNER(pnetdev);
128855 #endif
128856 -
128857 +
128858 //pnetdev->init = NULL;
128859 -
128860 +
128861 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
128862 - DBG_8192C("register rtw_netdev_ops to netdev_ops\n");
128863 + DBG_871X("register rtw_netdev_ops to netdev_ops\n");
128864 pnetdev->netdev_ops = &rtw_netdev_ops;
128865 #else
128866 pnetdev->open = netdev_open;
128867 - pnetdev->stop = netdev_close;
128868 + pnetdev->stop = netdev_close;
128869 pnetdev->hard_start_xmit = rtw_xmit_entry;
128870 pnetdev->set_mac_address = rtw_net_set_mac_address;
128871 pnetdev->get_stats = rtw_net_get_stats;
128872 @@ -784,11 +1095,12 @@ struct net_device *rtw_init_netdev(_adapter *old_padapter)
128873
128874 #ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
128875 pnetdev->features |= NETIF_F_IP_CSUM;
128876 -#endif
128877 +#endif
128878 //pnetdev->tx_timeout = NULL;
128879 pnetdev->watchdog_timeo = HZ*3; /* 3 second timeout */
128880 -
128881 +#ifdef CONFIG_WIRELESS_EXT
128882 pnetdev->wireless_handlers = (struct iw_handler_def *)&rtw_handlers_def;
128883 +#endif
128884
128885 #ifdef WIRELESS_SPY
128886 //priv->wireless_data.spy_data = &priv->spy_data;
128887 @@ -797,36 +1109,72 @@ struct net_device *rtw_init_netdev(_adapter *old_padapter)
128888
128889 //step 2.
128890 loadparam(padapter, pnetdev);
128891 -
128892 +
128893 return pnetdev;
128894
128895 }
128896
128897 +void rtw_unregister_netdevs(struct dvobj_priv *dvobj)
128898 +{
128899 + int i;
128900 + _adapter *padapter = NULL;
128901 +
128902 + for (i=0;i<dvobj->iface_nums;i++) {
128903 + struct net_device *pnetdev = NULL;
128904 +
128905 + padapter = dvobj->padapters[i];
128906 +
128907 + if (padapter == NULL)
128908 + continue;
128909 +
128910 + pnetdev = padapter->pnetdev;
128911 +
128912 + if((padapter->DriverState != DRIVER_DISAPPEAR) && pnetdev) {
128913 + unregister_netdev(pnetdev); //will call netdev_close()
128914 + rtw_proc_remove_one(pnetdev);
128915 + }
128916 +
128917 + #ifdef CONFIG_IOCTL_CFG80211
128918 + rtw_wdev_unregister(padapter->rtw_wdev);
128919 + #endif
128920 + }
128921 +
128922 +}
128923 +
128924 u32 rtw_start_drv_threads(_adapter *padapter)
128925 {
128926
128927 u32 _status = _SUCCESS;
128928
128929 RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_start_drv_threads\n"));
128930 -
128931 -#ifdef CONFIG_SDIO_HCI
128932 - if(!start_kthread(&padapter->xmitThread, rtw_xmit_thread, padapter, "8192cu-xmit"))
128933 +#ifdef CONFIG_XMIT_THREAD_MODE
128934 + padapter->xmitThread = kthread_run(rtw_xmit_thread, padapter, "RTW_XMIT_THREAD");
128935 + if(IS_ERR(padapter->xmitThread))
128936 _status = _FAIL;
128937 #endif
128938
128939 #ifdef CONFIG_RECV_THREAD_MODE
128940 - if(!start_kthread(&padapter->recvThread, recv_thread, padapter, "8192cu-recv"))
128941 - _status = _FAIL;
128942 + padapter->recvThread = kthread_run(rtw_recv_thread, padapter, "RTW_RECV_THREAD");
128943 + if(IS_ERR(padapter->recvThread))
128944 + _status = _FAIL;
128945 #endif
128946
128947 - if(!start_kthread(&padapter->cmdThread, rtw_cmd_thread, padapter, "8192cu-cmd"))
128948 - _status = _FAIL;
128949 - else
128950 - _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema); //wait for cmd_thread to run
128951 +#ifdef CONFIG_CONCURRENT_MODE
128952 + if(padapter->isprimary == _TRUE)
128953 +#endif //CONFIG_CONCURRENT_MODE
128954 + {
128955 + padapter->cmdThread = kthread_run(rtw_cmd_thread, padapter, "RTW_CMD_THREAD");
128956 + if(IS_ERR(padapter->cmdThread))
128957 + _status = _FAIL;
128958 + else
128959 + _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema); //wait for cmd_thread to run
128960 + }
128961 +
128962
128963 #ifdef CONFIG_EVENT_THREAD_MODE
128964 - if(!start_kthread(&padapter->evtThread, event_thread, padapter, "8192cu-evt"))
128965 - _status = _FAIL;
128966 + padapter->evtThread = kthread_run(event_thread, padapter, "RTW_EVENT_THREAD");
128967 + if(IS_ERR(padapter->evtThread))
128968 + _status = _FAIL;
128969 #endif
128970
128971 return _status;
128972 @@ -835,13 +1183,13 @@ u32 rtw_start_drv_threads(_adapter *padapter)
128973
128974 void rtw_stop_drv_threads (_adapter *padapter)
128975 {
128976 - RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_stop_drv_threads\n"));
128977 + RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_stop_drv_threads\n"));
128978
128979 - //Below is to termindate rtw_cmd_thread & event_thread...
128980 - _rtw_up_sema(&padapter->cmdpriv.cmd_queue_sema);
128981 - //_rtw_up_sema(&padapter->cmdpriv.cmd_done_sema);
128982 - if(padapter->cmdThread){
128983 - _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema);
128984 +#ifdef CONFIG_CONCURRENT_MODE
128985 + if(padapter->isprimary == _TRUE)
128986 +#endif //CONFIG_CONCURRENT_MODE
128987 + {
128988 + rtw_stop_cmd_thread(padapter);
128989 }
128990
128991 #ifdef CONFIG_EVENT_THREAD_MODE
128992 @@ -853,12 +1201,12 @@ void rtw_stop_drv_threads (_adapter *padapter)
128993
128994 #ifdef CONFIG_XMIT_THREAD_MODE
128995 // Below is to termindate tx_thread...
128996 - _rtw_up_sema(&padapter->xmitpriv.xmit_sema);
128997 + _rtw_up_sema(&padapter->xmitpriv.xmit_sema);
128998 _rtw_down_sema(&padapter->xmitpriv.terminate_xmitthread_sema);
128999 RT_TRACE(_module_os_intfs_c_,_drv_info_,("\n drv_halt: rtw_xmit_thread can be terminated ! \n"));
129000 #endif
129001 -
129002 -#ifdef CONFIG_RECV_THREAD_MODE
129003 +
129004 +#ifdef CONFIG_RECV_THREAD_MODE
129005 // Below is to termindate rx_thread...
129006 _rtw_up_sema(&padapter->recvpriv.recv_sema);
129007 _rtw_down_sema(&padapter->recvpriv.terminate_recvthread_sema);
129008 @@ -868,12 +1216,12 @@ void rtw_stop_drv_threads (_adapter *padapter)
129009
129010 }
129011
129012 +u8 rtw_init_default_value(_adapter *padapter);
129013 u8 rtw_init_default_value(_adapter *padapter)
129014 {
129015 u8 ret = _SUCCESS;
129016 struct registry_priv* pregistrypriv = &padapter->registrypriv;
129017 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
129018 - struct recv_priv *precvpriv = &padapter->recvpriv;
129019 struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
129020 struct security_priv *psecuritypriv = &padapter->securitypriv;
129021
129022 @@ -883,30 +1231,30 @@ u8 rtw_init_default_value(_adapter *padapter)
129023 pxmitpriv->vcs_type = pregistrypriv->vcs_type;
129024 //pxmitpriv->rts_thresh = pregistrypriv->rts_thresh;
129025 pxmitpriv->frag_len = pregistrypriv->frag_thresh;
129026 -
129027 -
129028 +
129029 +
129030
129031 //recv_priv
129032 -
129033 +
129034
129035 //mlme_priv
129036 pmlmepriv->scan_interval = SCAN_INTERVAL;// 30*2 sec = 60sec
129037 pmlmepriv->scan_mode = SCAN_ACTIVE;
129038 -
129039 +
129040 //qos_priv
129041 //pmlmepriv->qospriv.qos_option = pregistrypriv->wmm_enable;
129042 -
129043 +
129044 //ht_priv
129045 -#ifdef CONFIG_80211N_HT
129046 +#ifdef CONFIG_80211N_HT
129047 pmlmepriv->htpriv.ampdu_enable = _FALSE;//set to disabled
129048 -#endif
129049 +#endif
129050
129051 //security_priv
129052 //rtw_get_encrypt_decrypt_from_registrypriv(padapter);
129053 psecuritypriv->binstallGrpkey = _FAIL;
129054 psecuritypriv->sw_encrypt=pregistrypriv->software_encrypt;
129055 psecuritypriv->sw_decrypt=pregistrypriv->software_decrypt;
129056 -
129057 +
129058 psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open; //open system
129059 psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
129060
129061 @@ -917,44 +1265,77 @@ u8 rtw_init_default_value(_adapter *padapter)
129062
129063 psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
129064 psecuritypriv->ndisencryptstatus = Ndis802_11WEPDisabled;
129065 -
129066 +
129067
129068 //pwrctrl_priv
129069
129070
129071 //registry_priv
129072 - rtw_init_registrypriv_dev_network(padapter);
129073 + rtw_init_registrypriv_dev_network(padapter);
129074 rtw_update_registrypriv_dev_network(padapter);
129075
129076
129077 //hal_priv
129078 - padapter->HalFunc.init_default_value(padapter);
129079 + rtw_hal_def_value_init(padapter);
129080
129081 //misc.
129082 padapter->bReadPortCancel = _FALSE;
129083 padapter->bWritePortCancel = _FALSE;
129084 padapter->bRxRSSIDisplay = 0;
129085 -
129086 - return ret;
129087 + padapter->bForceWriteInitGain = 1;
129088 + padapter->bNotifyChannelChange = 0;
129089 +#ifdef CONFIG_P2P
129090 + padapter->bShowGetP2PState = 1;
129091 +#endif
129092 + return ret;
129093 +}
129094 +
129095 +struct dvobj_priv *devobj_init(void)
129096 +{
129097 + struct dvobj_priv *pdvobj = NULL;
129098 +
129099 + if ((pdvobj = (struct dvobj_priv*)rtw_zmalloc(sizeof(*pdvobj))) == NULL)
129100 + return NULL;
129101 +
129102 + _rtw_mutex_init(&pdvobj->hw_init_mutex);
129103 + _rtw_mutex_init(&pdvobj->h2c_fwcmd_mutex);
129104 + _rtw_mutex_init(&pdvobj->setch_mutex);
129105 + _rtw_mutex_init(&pdvobj->setbw_mutex);
129106 +
129107 + pdvobj->processing_dev_remove = _FALSE;
129108 +
129109 + return pdvobj;
129110 }
129111
129112 +void devobj_deinit(struct dvobj_priv *pdvobj)
129113 +{
129114 + if(!pdvobj)
129115 + return;
129116 +
129117 + _rtw_mutex_free(&pdvobj->hw_init_mutex);
129118 + _rtw_mutex_free(&pdvobj->h2c_fwcmd_mutex);
129119 + _rtw_mutex_free(&pdvobj->setch_mutex);
129120 + _rtw_mutex_free(&pdvobj->setbw_mutex);
129121 +
129122 + rtw_mfree((u8*)pdvobj, sizeof(*pdvobj));
129123 +}
129124 +
129125 u8 rtw_reset_drv_sw(_adapter *padapter)
129126 {
129127 - u8 ret8=_SUCCESS;
129128 + u8 ret8=_SUCCESS;
129129 struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
129130 struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
129131
129132 //hal_priv
129133 - padapter->HalFunc.init_default_value(padapter);
129134 + rtw_hal_def_value_init(padapter);
129135 padapter->bReadPortCancel = _FALSE;
129136 padapter->bWritePortCancel = _FALSE;
129137 padapter->bRxRSSIDisplay = 0;
129138 pmlmepriv->scan_interval = SCAN_INTERVAL;// 30*2 sec = 60sec
129139 -
129140 - pwrctrlpriv->bips_processing = _FALSE;
129141 +
129142 + pwrctrlpriv->bips_processing = _FALSE;
129143 pwrctrlpriv->rf_pwrstate = rf_on;
129144 - pwrctrlpriv->bInSuspend = _FALSE;
129145 -
129146 +
129147 padapter->xmitpriv.tx_pkts = 0;
129148 padapter->recvpriv.rx_pkts = 0;
129149
129150 @@ -962,15 +1343,14 @@ u8 rtw_reset_drv_sw(_adapter *padapter)
129151
129152 _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY |_FW_UNDER_LINKING);
129153
129154 -#ifdef CONFIG_AUTOSUSPEND
129155 +#ifdef CONFIG_AUTOSUSPEND
129156 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,22) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,34))
129157 - padapter->dvobjpriv.pusbdev->autosuspend_disabled = 1;//autosuspend disabled by the user
129158 + adapter_to_dvobj(padapter)->pusbdev->autosuspend_disabled = 1;//autosuspend disabled by the user
129159 #endif
129160 #endif
129161
129162 #ifdef DBG_CONFIG_ERROR_DETECT
129163 - if(padapter->HalFunc.sreset_reset_value)
129164 - padapter->HalFunc.sreset_reset_value(padapter);
129165 + rtw_hal_sreset_reset_value(padapter);
129166 #endif
129167 pwrctrlpriv->pwr_state_check_cnts = 0;
129168
129169 @@ -1000,17 +1380,17 @@ _func_enter_;
129170 ret8=_FAIL;
129171 goto exit;
129172 }
129173 -
129174 +
129175 padapter->cmdpriv.padapter=padapter;
129176 -
129177 +
129178 if ((rtw_init_evt_priv(&padapter->evtpriv)) == _FAIL)
129179 {
129180 RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't init evt_priv\n"));
129181 ret8=_FAIL;
129182 goto exit;
129183 }
129184 -
129185 -
129186 +
129187 +
129188 if (rtw_init_mlme_priv(padapter) == _FAIL)
129189 {
129190 RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't init mlme_priv\n"));
129191 @@ -1018,11 +1398,18 @@ _func_enter_;
129192 goto exit;
129193 }
129194
129195 -#ifdef CONFIG_IOCTL_CFG80211
129196 #ifdef CONFIG_P2P
129197 + rtw_init_wifidirect_timers(padapter);
129198 + init_wifidirect_info(padapter, P2P_ROLE_DISABLE);
129199 + reset_global_wifidirect_info(padapter);
129200 + #ifdef CONFIG_IOCTL_CFG80211
129201 rtw_init_cfg80211_wifidirect_info(padapter);
129202 -#endif //CONFIG_P2P
129203 -#endif //CONFIG_IOCTL_CFG80211
129204 + #endif
129205 +#ifdef CONFIG_WFD
129206 + if(rtw_init_wifi_display_info(padapter) == _FAIL)
129207 + RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't init init_wifi_display_info\n"));
129208 +#endif
129209 +#endif /* CONFIG_P2P */
129210
129211 if(init_mlme_ext_priv(padapter) == _FAIL)
129212 {
129213 @@ -1046,18 +1433,20 @@ _func_enter_;
129214 ret8=_FAIL;
129215 goto exit;
129216 }
129217 -
129218 +
129219 if(_rtw_init_recv_priv(&padapter->recvpriv, padapter) == _FAIL)
129220 {
129221 DBG_871X("Can't _rtw_init_recv_priv\n");
129222 ret8=_FAIL;
129223 goto exit;
129224 }
129225 -
129226 - // We don't need to memset padapter->XXX to zero, because adapter is allocated by rtw_zvmalloc().
129227 - //_rtw_memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct security_priv));
129228 + // add for CONFIG_IEEE80211W, none 11w also can use
129229 + _rtw_spinlock_init(&padapter->security_key_mutex);
129230
129231 - //_init_timer(&(padapter->securitypriv.tkip_timer), padapter->pnetdev, rtw_use_tkipkey_handler, padapter);
129232 + // We don't need to memset padapter->XXX to zero, because adapter is allocated by rtw_zvmalloc().
129233 + //_rtw_memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct security_priv));
129234 +
129235 + //_init_timer(&(padapter->securitypriv.tkip_timer), padapter->pifp, rtw_use_tkipkey_handler, padapter);
129236
129237 if(_rtw_init_sta_priv(&padapter->stapriv) == _FAIL)
129238 {
129239 @@ -1065,43 +1454,51 @@ _func_enter_;
129240 ret8=_FAIL;
129241 goto exit;
129242 }
129243 -
129244 - padapter->stapriv.padapter = padapter;
129245
129246 + padapter->stapriv.padapter = padapter;
129247 + padapter->setband = GHZ24_50;
129248 rtw_init_bcmc_stainfo(padapter);
129249
129250 - rtw_init_pwrctrl_priv(padapter);
129251 + rtw_init_pwrctrl_priv(padapter);
129252
129253 //_rtw_memset((u8 *)&padapter->qospriv, 0, sizeof (struct qos_priv));//move to mlme_priv
129254 -
129255 +
129256 #ifdef CONFIG_MP_INCLUDED
129257 if (init_mp_priv(padapter) == _FAIL) {
129258 - ERR_8192C("%s: initialize MP private data Fail!\n", __func__);
129259 + DBG_871X("%s: initialize MP private data Fail!\n", __func__);
129260 }
129261 #endif
129262
129263 ret8 = rtw_init_default_value(padapter);
129264
129265 - rtw_dm_init(padapter);
129266 - rtw_sw_led_init(padapter);
129267 + rtw_hal_dm_init(padapter);
129268 + rtw_hal_sw_led_init(padapter);
129269
129270 #ifdef DBG_CONFIG_ERROR_DETECT
129271 - rtw_sreset_init(padapter);
129272 + rtw_hal_sreset_init(padapter);
129273 #endif
129274
129275 +#ifdef CONFIG_INTEL_WIDI
129276 + if(rtw_init_intel_widi(padapter) == _FAIL)
129277 + {
129278 + DBG_871X("Can't rtw_init_intel_widi\n");
129279 + ret8=_FAIL;
129280 + goto exit;
129281 + }
129282 +#endif //CONFIG_INTEL_WIDI
129283
129284 #ifdef CONFIG_BR_EXT
129285 _rtw_spinlock_init(&padapter->br_ext_lock);
129286 #endif // CONFIG_BR_EXT
129287
129288 exit:
129289 -
129290 +
129291 RT_TRACE(_module_os_intfs_c_,_drv_info_,("-rtw_init_drv_sw\n"));
129292
129293 - _func_exit_;
129294 -
129295 + _func_exit_;
129296 +
129297 return ret8;
129298 -
129299 +
129300 }
129301
129302 void rtw_cancel_all_timer(_adapter *padapter)
129303 @@ -1115,13 +1512,13 @@ void rtw_cancel_all_timer(_adapter *padapter)
129304 //RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel tkip_timer! \n"));
129305
129306 _cancel_timer_ex(&padapter->mlmepriv.scan_to_timer);
129307 - RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel scan_to_timer! \n"));
129308 -
129309 + RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel scan_to_timer! \n"));
129310 +
129311 _cancel_timer_ex(&padapter->mlmepriv.dynamic_chk_timer);
129312 RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel dynamic_chk_timer! \n"));
129313
129314 // cancel sw led timer
129315 - rtw_sw_led_deinit(padapter);
129316 + rtw_hal_sw_led_deinit(padapter);
129317 RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel DeInitSwLeds! \n"));
129318
129319 _cancel_timer_ex(&padapter->pwrctrlpriv.pwr_state_check_timer);
129320 @@ -1134,6 +1531,7 @@ void rtw_cancel_all_timer(_adapter *padapter)
129321
129322 #ifdef CONFIG_SET_SCAN_DENY_TIMER
129323 _cancel_timer_ex(&padapter->mlmepriv.set_scan_deny_timer);
129324 + rtw_clear_scan_deny(padapter);
129325 RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel set_scan_deny_timer! \n"));
129326 #endif
129327
129328 @@ -1142,15 +1540,16 @@ void rtw_cancel_all_timer(_adapter *padapter)
129329 #endif
129330
129331 // cancel dm timer
129332 - padapter->HalFunc.dm_deinit(padapter);
129333 + rtw_hal_dm_deinit(padapter);
129334
129335 +#ifdef CONFIG_PLATFORM_FS_MX61
129336 + msleep(50);
129337 +#endif
129338 }
129339
129340 u8 rtw_free_drv_sw(_adapter *padapter)
129341 {
129342 - struct net_device *pnetdev = (struct net_device*)padapter->pnetdev;
129343 -
129344 - RT_TRACE(_module_os_intfs_c_,_drv_info_,("==>rtw_free_drv_sw"));
129345 + RT_TRACE(_module_os_intfs_c_,_drv_info_,("==>rtw_free_drv_sw"));
129346
129347
129348 //we can call rtw_p2p_enable here, but:
129349 @@ -1164,36 +1563,43 @@ u8 rtw_free_drv_sw(_adapter *padapter)
129350 _cancel_timer_ex( &pwdinfo->find_phase_timer );
129351 _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
129352 _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
129353 +#ifdef CONFIG_CONCURRENT_MODE
129354 + _cancel_timer_ex( &pwdinfo->ap_p2p_switch_timer );
129355 +#endif // CONFIG_CONCURRENT_MODE
129356 rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
129357 }
129358 }
129359 #endif
129360 + // add for CONFIG_IEEE80211W, none 11w also can use
129361 + _rtw_spinlock_free(&padapter->security_key_mutex);
129362
129363 -
129364 #ifdef CONFIG_BR_EXT
129365 _rtw_spinlock_free(&padapter->br_ext_lock);
129366 #endif // CONFIG_BR_EXT
129367
129368 +#ifdef CONFIG_INTEL_WIDI
129369 + rtw_free_intel_widi(padapter);
129370 +#endif //CONFIG_INTEL_WIDI
129371
129372 free_mlme_ext_priv(&padapter->mlmeextpriv);
129373 -
129374 +
129375 #ifdef CONFIG_TDLS
129376 //rtw_free_tdls_info(&padapter->tdlsinfo);
129377 #endif //CONFIG_TDLS
129378 -
129379 +
129380 rtw_free_cmd_priv(&padapter->cmdpriv);
129381 -
129382 +
129383 rtw_free_evt_priv(&padapter->evtpriv);
129384
129385 rtw_free_mlme_priv(&padapter->mlmepriv);
129386 -
129387 +
129388 //free_io_queue(padapter);
129389 -
129390 +
129391 _rtw_free_xmit_priv(&padapter->xmitpriv);
129392 -
129393 +
129394 _rtw_free_sta_priv(&padapter->stapriv); //will free bcmc_stainfo here
129395 -
129396 - _rtw_free_recv_priv(&padapter->recvpriv);
129397 +
129398 + _rtw_free_recv_priv(&padapter->recvpriv);
129399
129400 rtw_free_pwrctrl_priv(padapter);
129401
129402 @@ -1203,7 +1609,7 @@ u8 rtw_free_drv_sw(_adapter *padapter)
129403 free_drvext(&padapter->drvextpriv);
129404 #endif
129405
129406 - padapter->HalFunc.free_hal_data(padapter);
129407 + rtw_hal_free_data(padapter);
129408
129409 RT_TRACE(_module_os_intfs_c_,_drv_info_,("<==rtw_free_drv_sw\n"));
129410
129411 @@ -1211,265 +1617,1026 @@ u8 rtw_free_drv_sw(_adapter *padapter)
129412 if(padapter->rereg_nd_name_priv.old_pnetdev) {
129413 free_netdev(padapter->rereg_nd_name_priv.old_pnetdev);
129414 padapter->rereg_nd_name_priv.old_pnetdev = NULL;
129415 - }
129416 + }
129417
129418 - if(pnetdev)
129419 + // clear pbuddy_adapter to avoid access wrong pointer.
129420 + if(padapter->pbuddy_adapter != NULL)
129421 {
129422 - rtw_free_netdev(pnetdev);
129423 + padapter->pbuddy_adapter->pbuddy_adapter = NULL;
129424 }
129425
129426 RT_TRACE(_module_os_intfs_c_,_drv_info_,("-rtw_free_drv_sw\n"));
129427
129428 return _SUCCESS;
129429 -
129430 +
129431 }
129432
129433 -int _netdev_open(struct net_device *pnetdev)
129434 +#ifdef CONFIG_CONCURRENT_MODE
129435 +
129436 +#ifdef CONFIG_USB_HCI
129437 + #include <usb_hal.h>
129438 +#endif
129439 +
129440 +#ifdef CONFIG_MULTI_VIR_IFACES
129441 +int _netdev_vir_if_open(struct net_device *pnetdev)
129442 {
129443 - uint status;
129444 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
129445 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
129446 + _adapter *primary_padapter = GET_PRIMARY_ADAPTER(padapter);
129447
129448 - RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - dev_open\n"));
129449 - DBG_8192C("+871x_drv - drv_open, bup=%d\n", padapter->bup);
129450 + DBG_871X(FUNC_NDEV_FMT" enter\n", FUNC_NDEV_ARG(pnetdev));
129451
129452 - if(pwrctrlpriv->ps_flag == _TRUE){
129453 - padapter->net_closed = _FALSE;
129454 - goto netdev_open_normal_process;
129455 - }
129456 -
129457 - if(padapter->bup == _FALSE)
129458 - {
129459 - padapter->bDriverStopped = _FALSE;
129460 - padapter->bSurpriseRemoved = _FALSE;
129461 - padapter->bCardDisableWOHSM = _FALSE;
129462 -
129463 - status = rtw_hal_init(padapter);
129464 - if (status ==_FAIL)
129465 - {
129466 - RT_TRACE(_module_os_intfs_c_,_drv_err_,("rtl871x_hal_init(): Can't init h/w!\n"));
129467 - goto netdev_open_error;
129468 - }
129469 -
129470 - DBG_8192C("MAC Address = "MAC_FMT"\n", MAC_ARG(pnetdev->dev_addr));
129471 + if(!primary_padapter)
129472 + goto _netdev_virtual_iface_open_error;
129473
129474 -
129475 - status=rtw_start_drv_threads(padapter);
129476 - if(status ==_FAIL)
129477 - {
129478 - RT_TRACE(_module_os_intfs_c_,_drv_err_,("Initialize driver software resource Failed!\n"));
129479 - goto netdev_open_error;
129480 - }
129481 + if(primary_padapter->bup == _FALSE || primary_padapter->hw_init_completed == _FALSE)
129482 + {
129483 + _netdev_open(primary_padapter->pnetdev);
129484 + }
129485
129486 + if(padapter->bup == _FALSE && primary_padapter->bup == _TRUE &&
129487 + primary_padapter->hw_init_completed == _TRUE)
129488 + {
129489 + int i;
129490
129491 - if (init_hw_mlme_ext(padapter) == _FAIL)
129492 - {
129493 - RT_TRACE(_module_os_intfs_c_,_drv_err_,("can't init mlme_ext_priv\n"));
129494 - goto netdev_open_error;
129495 - }
129496 + padapter->bDriverStopped = _FALSE;
129497 + padapter->bSurpriseRemoved = _FALSE;
129498 + padapter->bCardDisableWOHSM = _FALSE;
129499
129500 + _rtw_memcpy(padapter->HalData, primary_padapter->HalData, padapter->hal_data_sz);
129501
129502 -#ifdef CONFIG_DRVEXT_MODULE
129503 - init_drvext(padapter);
129504 -#endif
129505 + padapter->bFWReady = primary_padapter->bFWReady;
129506
129507 - if(padapter->intf_start)
129508 + if(rtw_start_drv_threads(padapter) == _FAIL)
129509 {
129510 - padapter->intf_start(padapter);
129511 + goto _netdev_virtual_iface_open_error;
129512 }
129513
129514 -#ifdef CONFIG_PROC_DEBUG
129515 -#ifndef RTK_DMP_PLATFORM
129516 + padapter->dir_dev = NULL;
129517 rtw_proc_init_one(pnetdev);
129518 -#endif
129519 -#endif
129520
129521 #ifdef CONFIG_IOCTL_CFG80211
129522 rtw_cfg80211_init_wiphy(padapter);
129523 #endif
129524
129525 - rtw_led_control(padapter, LED_CTL_NO_LINK);
129526 -
129527 padapter->bup = _TRUE;
129528 + padapter->hw_init_completed = _TRUE;
129529 +
129530 + rtw_start_mbssid_cam(padapter);//start mbssid_cam after bup = _TRUE & hw_init_completed = _TRUE
129531 +
129532 }
129533 +
129534 padapter->net_closed = _FALSE;
129535
129536 _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
129537
129538 - if(( pwrctrlpriv->power_mgnt != PS_MODE_ACTIVE ) ||(padapter->pwrctrlpriv.bHWPwrPindetect))
129539 - {
129540 - padapter->pwrctrlpriv.bips_processing = _FALSE;
129541 - rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
129542 - }
129543 -
129544 - //netif_carrier_on(pnetdev);//call this func when rtw_joinbss_event_callback return success
129545 - if(!netif_queue_stopped(pnetdev))
129546 - netif_start_queue(pnetdev);
129547 + if(!rtw_netif_queue_stopped(pnetdev))
129548 + rtw_netif_start_queue(pnetdev);
129549 else
129550 - netif_wake_queue(pnetdev);
129551 -
129552 -#ifdef CONFIG_BR_EXT
129553 + rtw_netif_wake_queue(pnetdev);
129554
129555 -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
129556 - rcu_read_lock();
129557 -#endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
129558 -
129559 - //if(check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE)
129560 - {
129561 - //struct net_bridge *br = pnetdev->br_port->br;//->dev->dev_addr;
129562 -#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
129563 - if (pnetdev->br_port)
129564 -#else // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
129565 - if (rcu_dereference(padapter->pnetdev->rx_handler_data))
129566 -#endif // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
129567 - {
129568 - struct net_device *br_netdev;
129569 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
129570 - br_netdev = dev_get_by_name(CONFIG_BR_EXT_BRNAME);
129571 -#else // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
129572 - struct net *devnet = NULL;
129573 -
129574 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
129575 - devnet = pnetdev->nd_net;
129576 -#else // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
129577 - devnet = dev_net(pnetdev);
129578 -#endif // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
129579 -
129580 - br_netdev = dev_get_by_name(devnet, CONFIG_BR_EXT_BRNAME);
129581 -#endif // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
129582 -
129583 - if (br_netdev) {
129584 - memcpy(padapter->br_mac, br_netdev->dev_addr, ETH_ALEN);
129585 - dev_put(br_netdev);
129586 - } else
129587 - printk("%s()-%d: dev_get_by_name(%s) failed!", __FUNCTION__, __LINE__, CONFIG_BR_EXT_BRNAME);
129588 - }
129589 -
129590 - padapter->ethBrExtInfo.addPPPoETag = 1;
129591 - }
129592
129593 -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
129594 - rcu_read_unlock();
129595 -#endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
129596 + DBG_871X(FUNC_NDEV_FMT" exit\n", FUNC_NDEV_ARG(pnetdev));
129597 + return 0;
129598
129599 -#endif // CONFIG_BR_EXT
129600 +_netdev_virtual_iface_open_error:
129601
129602 -netdev_open_normal_process:
129603 + padapter->bup = _FALSE;
129604
129605 - RT_TRACE(_module_os_intfs_c_,_drv_info_,("-871x_drv - dev_open\n"));
129606 - DBG_8192C("-871x_drv - drv_open, bup=%d\n", padapter->bup);
129607 -
129608 - return 0;
129609 -
129610 -netdev_open_error:
129611 + netif_carrier_off(pnetdev);
129612 + rtw_netif_stop_queue(pnetdev);
129613
129614 - padapter->bup = _FALSE;
129615 -
129616 - netif_carrier_off(pnetdev);
129617 - netif_stop_queue(pnetdev);
129618 -
129619 - RT_TRACE(_module_os_intfs_c_,_drv_err_,("-871x_drv - dev_open, fail!\n"));
129620 - DBG_8192C("-871x_drv - drv_open fail, bup=%d\n", padapter->bup);
129621 -
129622 return (-1);
129623 -
129624 +
129625 }
129626
129627 -int netdev_open(struct net_device *pnetdev)
129628 +int netdev_vir_if_open(struct net_device *pnetdev)
129629 {
129630 int ret;
129631 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
129632 - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
129633 -
129634 - _enter_pwrlock(&pwrctrlpriv->lock);
129635 - ret = _netdev_open(pnetdev);
129636 - _exit_pwrlock(&pwrctrlpriv->lock);
129637
129638 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
129639 + ret = _netdev_vir_if_open(pnetdev);
129640 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
129641 return ret;
129642 }
129643
129644 -#ifdef CONFIG_IPS
129645 -int ips_netdrv_open(_adapter *padapter)
129646 +static int netdev_vir_if_close(struct net_device *pnetdev)
129647 {
129648 - int status = _SUCCESS;
129649 - padapter->net_closed = _FALSE;
129650 - DBG_8192C("===> %s.........\n",__FUNCTION__);
129651 -
129652 + _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
129653
129654 - padapter->bDriverStopped = _FALSE;
129655 - padapter->bSurpriseRemoved = _FALSE;
129656 - padapter->bCardDisableWOHSM = _FALSE;
129657 - padapter->bup = _TRUE;
129658 + padapter->net_closed = _TRUE;
129659
129660 - status = rtw_hal_init(padapter);
129661 - if (status ==_FAIL)
129662 + if(pnetdev)
129663 {
129664 - RT_TRACE(_module_os_intfs_c_,_drv_err_,("ips_netdrv_open(): Can't init h/w!\n"));
129665 - goto netdev_open_error;
129666 + if (!rtw_netif_queue_stopped(pnetdev))
129667 + rtw_netif_stop_queue(pnetdev);
129668 }
129669
129670 - if(padapter->intf_start)
129671 - {
129672 - padapter->intf_start(padapter);
129673 - }
129674 +#ifdef CONFIG_IOCTL_CFG80211
129675 + rtw_scan_abort(padapter);
129676 + wdev_to_priv(padapter->rtw_wdev)->bandroid_scan = _FALSE;
129677 +#endif
129678
129679 - rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
129680 - _set_timer(&padapter->mlmepriv.dynamic_chk_timer,5000);
129681 + return 0;
129682 +}
129683
129684 - return _SUCCESS;
129685 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
129686 +static const struct net_device_ops rtw_netdev_vir_if_ops = {
129687 + .ndo_open = netdev_vir_if_open,
129688 + .ndo_stop = netdev_vir_if_close,
129689 + .ndo_start_xmit = rtw_xmit_entry,
129690 + .ndo_set_mac_address = rtw_net_set_mac_address,
129691 + .ndo_get_stats = rtw_net_get_stats,
129692 + .ndo_do_ioctl = rtw_ioctl,
129693 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
129694 + .ndo_select_queue = rtw_select_queue,
129695 +#endif
129696 +};
129697 +#endif
129698
129699 -netdev_open_error:
129700 - padapter->bup = _FALSE;
129701 - DBG_8192C("-ips_netdrv_open - drv_open failure, bup=%d\n", padapter->bup);
129702 +_adapter *rtw_drv_add_vir_if(_adapter *primary_padapter, void (*set_intf_ops)(struct _io_ops *pops))
129703 +{
129704
129705 - return _FAIL;
129706 -}
129707 + int res = _FAIL;
129708 + struct net_device *pnetdev=NULL;
129709 + _adapter *padapter = NULL;
129710 + struct dvobj_priv *pdvobjpriv;
129711 + u8 mac[ETH_ALEN];
129712
129713 +/*
129714 + if((primary_padapter->bup == _FALSE) ||
129715 + (rtw_buddy_adapter_up(primary_padapter) == _FALSE))
129716 + {
129717 + goto error_rtw_drv_add_iface;
129718 + }
129719
129720 -int rtw_ips_pwr_up(_adapter *padapter)
129721 -{
129722 - int result;
129723 - u32 start_time = rtw_get_current_time();
129724 - DBG_8192C("===> rtw_ips_pwr_up..............\n");
129725 - rtw_reset_drv_sw(padapter);
129726 - result = ips_netdrv_open(padapter);
129727 +*/
129728 + /****** init netdev ******/
129729 + pnetdev = rtw_init_netdev(NULL);
129730 + if (!pnetdev)
129731 + goto error_rtw_drv_add_iface;
129732
129733 - rtw_led_control(padapter, LED_CTL_NO_LINK);
129734 -
129735 - DBG_8192C("<=== rtw_ips_pwr_up.............. in %dms\n", rtw_get_passing_time_ms(start_time));
129736 - return result;
129737 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
129738 + DBG_871X("register rtw_netdev_virtual_iface_ops to netdev_ops\n");
129739 + pnetdev->netdev_ops = &rtw_netdev_vir_if_ops;
129740 +#else
129741 + pnetdev->open = netdev_vir_if_open;
129742 + pnetdev->stop = netdev_vir_if_close;
129743 +#endif
129744
129745 -}
129746 +#ifdef CONFIG_NO_WIRELESS_HANDLERS
129747 + pnetdev->wireless_handlers = NULL;
129748 +#endif
129749
129750 -void rtw_ips_pwr_down(_adapter *padapter)
129751 -{
129752 - u32 start_time = rtw_get_current_time();
129753 - DBG_8192C("===> rtw_ips_pwr_down...................\n");
129754 + /****** init adapter ******/
129755 + padapter = rtw_netdev_priv(pnetdev);
129756 + _rtw_memcpy(padapter, primary_padapter, sizeof(_adapter));
129757
129758 - padapter->bCardDisableWOHSM = _TRUE;
129759 + //
129760 + padapter->bup = _FALSE;
129761 padapter->net_closed = _TRUE;
129762 + padapter->hw_init_completed = _FALSE;
129763
129764 - rtw_led_control(padapter, LED_CTL_POWER_OFF);
129765 -
129766 - rtw_ips_dev_unload(padapter);
129767 - padapter->bCardDisableWOHSM = _FALSE;
129768 - DBG_8192C("<=== rtw_ips_pwr_down..................... in %dms\n", rtw_get_passing_time_ms(start_time));
129769 -}
129770 +
129771 + //set adapter_type/iface type
129772 + padapter->isprimary = _FALSE;
129773 + padapter->adapter_type = MAX_ADAPTER;
129774 + padapter->pbuddy_adapter = primary_padapter;
129775 +#if 0
129776 +#ifndef CONFIG_HWPORT_SWAP //Port0 -> Pri , Port1 -> Sec
129777 + padapter->iface_type = IFACE_PORT1;
129778 +#else
129779 + padapter->iface_type = IFACE_PORT0;
129780 +#endif //CONFIG_HWPORT_SWAP
129781 +#else
129782 + //extended virtual interfaces always are set to port0
129783 + padapter->iface_type = IFACE_PORT0;
129784 #endif
129785 -void rtw_ips_dev_unload(_adapter *padapter)
129786 -{
129787 - struct net_device *pnetdev= (struct net_device*)padapter->pnetdev;
129788 - struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
129789 - DBG_8192C("====> %s...\n",__FUNCTION__);
129790 + //
129791 + padapter->pnetdev = pnetdev;
129792
129793 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_FIFO_CLEARN_UP, 0);
129794 + /****** setup dvobj ******/
129795 + pdvobjpriv = adapter_to_dvobj(padapter);
129796 + padapter->iface_id = pdvobjpriv->iface_nums;
129797 + pdvobjpriv->padapters[pdvobjpriv->iface_nums++] = padapter;
129798
129799 - if(padapter->intf_stop)
129800 - {
129801 - padapter->intf_stop(padapter);
129802 - }
129803 + SET_NETDEV_DEV(pnetdev, dvobj_to_dev(pdvobjpriv));
129804 +#ifdef CONFIG_IOCTL_CFG80211
129805 + rtw_wdev_alloc(padapter, dvobj_to_dev(pdvobjpriv));
129806 +#endif //CONFIG_IOCTL_CFG80211
129807
129808 - //s5.
129809 + //set interface_type/chip_type/HardwareType
129810 + padapter->interface_type = primary_padapter->interface_type;
129811 + padapter->chip_type = primary_padapter->chip_type;
129812 + padapter->HardwareType = primary_padapter->HardwareType;
129813 +
129814 + //set hal data & hal ops
129815 +#if defined(CONFIG_RTL8192C)
129816 + #if defined(CONFIG_PCI_HCI)
129817 + rtl8192ce_set_hal_ops(padapter);
129818 + #elif defined(CONFIG_USB_HCI)
129819 + rtl8192cu_set_hal_ops(padapter);
129820 + #endif
129821 +#elif defined(CONFIG_RTL8192D)
129822 + #if defined(CONFIG_PCI_HCI)
129823 + rtl8192de_set_hal_ops(padapter);
129824 + #elif defined(CONFIG_USB_HCI)
129825 + rtl8192du_set_hal_ops(padapter);
129826 + #endif
129827 +#endif
129828 +
129829 + padapter->HalFunc.inirp_init = NULL;
129830 + padapter->HalFunc.inirp_deinit = NULL;
129831 + padapter->intf_start = NULL;
129832 + padapter->intf_stop = NULL;
129833 +
129834 + //step init_io_priv
129835 + if ((rtw_init_io_priv(padapter, set_intf_ops)) == _FAIL) {
129836 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
129837 + }
129838 +
129839 + //step read_chip_version
129840 + rtw_hal_read_chip_version(padapter);
129841 +
129842 + //step usb endpoint mapping
129843 + rtw_hal_chip_configure(padapter);
129844 +
129845 +
129846 + //init drv data
129847 + if(rtw_init_drv_sw(padapter)!= _SUCCESS)
129848 + goto error_rtw_drv_add_iface;
129849 +
129850 +
129851 + //get mac address from primary_padapter
129852 + _rtw_memcpy(mac, primary_padapter->eeprompriv.mac_addr, ETH_ALEN);
129853 +
129854 + if (((mac[0]==0xff) &&(mac[1]==0xff) && (mac[2]==0xff) &&
129855 + (mac[3]==0xff) && (mac[4]==0xff) &&(mac[5]==0xff)) ||
129856 + ((mac[0]==0x0) && (mac[1]==0x0) && (mac[2]==0x0) &&
129857 + (mac[3]==0x0) && (mac[4]==0x0) &&(mac[5]==0x0)))
129858 + {
129859 + mac[0] = 0x00;
129860 + mac[1] = 0xe0;
129861 + mac[2] = 0x4c;
129862 + mac[3] = 0x87;
129863 + mac[4] = 0x11;
129864 + mac[5] = 0x22;
129865 + }
129866 + else
129867 + {
129868 + //If the BIT1 is 0, the address is universally administered.
129869 + //If it is 1, the address is locally administered
129870 +#if 1 //needs enable MBSSID CAM
129871 + mac[0] |= BIT(1); // locally administered
129872 + mac[0] |= (padapter->iface_id-1)<<4;
129873 +#endif
129874 + }
129875 +
129876 + _rtw_memcpy(padapter->eeprompriv.mac_addr, mac, ETH_ALEN);
129877 +
129878 + padapter->dir_dev = NULL;
129879 +
129880 + res = _SUCCESS;
129881 +
129882 + return padapter;
129883 +
129884 +
129885 +error_rtw_drv_add_iface:
129886 +
129887 + if(padapter)
129888 + rtw_free_drv_sw(padapter);
129889 +
129890 + if (pnetdev)
129891 + rtw_free_netdev(pnetdev);
129892 +
129893 + return NULL;
129894 +
129895 +}
129896 +
129897 +void rtw_drv_stop_vir_if(_adapter *padapter)
129898 +{
129899 + struct net_device *pnetdev=NULL;
129900 +
129901 + if (padapter == NULL)
129902 + return;
129903 +
129904 + pnetdev = padapter->pnetdev;
129905 +
129906 + rtw_cancel_all_timer(padapter);
129907 +
129908 + if(padapter->bup == _TRUE)
129909 + {
129910 + padapter->bDriverStopped = _TRUE;
129911 +
129912 + #ifdef CONFIG_XMIT_ACK
129913 + if (padapter->xmitpriv.ack_tx)
129914 + rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_DRV_STOP);
129915 + #endif
129916 +
129917 + if(padapter->intf_stop)
129918 + {
129919 + padapter->intf_stop(padapter);
129920 + }
129921 +
129922 + rtw_stop_drv_threads(padapter);
129923 +
129924 + padapter->bup = _FALSE;
129925 + }
129926 +}
129927 +
129928 +void rtw_drv_free_vir_if(_adapter *padapter)
129929 +{
129930 + struct net_device *pnetdev=NULL;
129931 +
129932 + if (padapter == NULL)
129933 + return;
129934 +
129935 + padapter->pbuddy_adapter = NULL;
129936 +
129937 + pnetdev = padapter->pnetdev;
129938 +
129939 +#ifdef CONFIG_IOCTL_CFG80211
129940 + rtw_wdev_free(padapter->rtw_wdev);
129941 +#endif //CONFIG_IOCTL_CFG80211
129942 +
129943 + rtw_free_drv_sw(padapter);
129944 +
129945 + rtw_free_netdev(pnetdev);
129946 +}
129947 +
129948 +void rtw_drv_stop_vir_ifaces(struct dvobj_priv *dvobj)
129949 +{
129950 + int i;
129951 + //struct dvobj_priv *dvobj = primary_padapter->dvobj;
129952 +
129953 + for(i=2;i<dvobj->iface_nums;i++)
129954 + {
129955 + rtw_drv_stop_vir_if(dvobj->padapters[i]);
129956 + }
129957 +}
129958 +
129959 +void rtw_drv_free_vir_ifaces(struct dvobj_priv *dvobj)
129960 +{
129961 + int i;
129962 + //struct dvobj_priv *dvobj = primary_padapter->dvobj;
129963 +
129964 + for(i=2;i<dvobj->iface_nums;i++)
129965 + {
129966 + rtw_drv_free_vir_if(dvobj->padapters[i]);
129967 + }
129968 +}
129969 +
129970 +void rtw_drv_del_vir_if(_adapter *padapter)
129971 +{
129972 + rtw_drv_stop_vir_if(padapter);
129973 + rtw_drv_free_vir_if(padapter);
129974 +}
129975 +
129976 +void rtw_drv_del_vir_ifaces(_adapter *primary_padapter)
129977 +{
129978 + int i;
129979 + struct dvobj_priv *dvobj = primary_padapter->dvobj;
129980 +
129981 + for(i=2;i<dvobj->iface_nums;i++)
129982 + {
129983 + rtw_drv_del_vir_if(dvobj->padapters[i]);
129984 + }
129985 +}
129986 +#endif //CONFIG_MULTI_VIR_IFACES
129987 +
129988 +int _netdev_if2_open(struct net_device *pnetdev)
129989 +{
129990 + _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
129991 + _adapter *primary_padapter = padapter->pbuddy_adapter;
129992 +
129993 + DBG_871X("+871x_drv - if2_open, bup=%d\n", padapter->bup);
129994 +
129995 + if(primary_padapter->bup == _FALSE || primary_padapter->hw_init_completed == _FALSE)
129996 + {
129997 + _netdev_open(primary_padapter->pnetdev);
129998 + }
129999 +
130000 + if(padapter->bup == _FALSE && primary_padapter->bup == _TRUE &&
130001 + primary_padapter->hw_init_completed == _TRUE)
130002 + {
130003 + int i;
130004 +
130005 + padapter->bDriverStopped = _FALSE;
130006 + padapter->bSurpriseRemoved = _FALSE;
130007 + padapter->bCardDisableWOHSM = _FALSE;
130008 +
130009 + _rtw_memcpy(padapter->HalData, primary_padapter->HalData, padapter->hal_data_sz);
130010 +
130011 + padapter->bFWReady = primary_padapter->bFWReady;
130012 +
130013 + rtw_hal_set_hwreg(padapter, HW_VAR_DM_INIT_PWDB, NULL);
130014 +
130015 + //if (init_mlme_ext_priv(padapter) == _FAIL)
130016 + // goto netdev_if2_open_error;
130017 +
130018 +
130019 + if(rtw_start_drv_threads(padapter) == _FAIL)
130020 + {
130021 + goto netdev_if2_open_error;
130022 + }
130023 +
130024 +
130025 + if(padapter->intf_start)
130026 + {
130027 + padapter->intf_start(padapter);
130028 + }
130029 +
130030 +
130031 + padapter->hw_init_completed = _TRUE;
130032 +
130033 + padapter->dir_dev = NULL;
130034 + rtw_proc_init_one(pnetdev);
130035 +
130036 +
130037 +#ifdef CONFIG_IOCTL_CFG80211
130038 + rtw_cfg80211_init_wiphy(padapter);
130039 +#endif
130040 +
130041 + padapter->bup = _TRUE;
130042 +
130043 + }
130044 +
130045 + padapter->net_closed = _FALSE;
130046 +
130047 + _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
130048 +
130049 + if(!rtw_netif_queue_stopped(pnetdev))
130050 + rtw_netif_start_queue(pnetdev);
130051 + else
130052 + rtw_netif_wake_queue(pnetdev);
130053 +
130054 + DBG_871X("-871x_drv - if2_open, bup=%d\n", padapter->bup);
130055 + return 0;
130056 +
130057 +netdev_if2_open_error:
130058 +
130059 + padapter->bup = _FALSE;
130060 +
130061 + netif_carrier_off(pnetdev);
130062 + rtw_netif_stop_queue(pnetdev);
130063 +
130064 + return (-1);
130065 +
130066 +}
130067 +
130068 +int netdev_if2_open(struct net_device *pnetdev)
130069 +{
130070 + int ret;
130071 + _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
130072 +
130073 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
130074 + ret = _netdev_if2_open(pnetdev);
130075 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
130076 + return ret;
130077 +}
130078 +
130079 +static int netdev_if2_close(struct net_device *pnetdev)
130080 +{
130081 + _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
130082 +
130083 + padapter->net_closed = _TRUE;
130084 +
130085 + if(pnetdev)
130086 + {
130087 + if (!rtw_netif_queue_stopped(pnetdev))
130088 + rtw_netif_stop_queue(pnetdev);
130089 + }
130090 +
130091 +#ifdef CONFIG_IOCTL_CFG80211
130092 + rtw_scan_abort(padapter);
130093 + wdev_to_priv(padapter->rtw_wdev)->bandroid_scan = _FALSE;
130094 +#endif
130095 +
130096 + return 0;
130097 +}
130098 +
130099 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
130100 +static const struct net_device_ops rtw_netdev_if2_ops = {
130101 + .ndo_open = netdev_if2_open,
130102 + .ndo_stop = netdev_if2_close,
130103 + .ndo_start_xmit = rtw_xmit_entry,
130104 + .ndo_set_mac_address = rtw_net_set_mac_address,
130105 + .ndo_get_stats = rtw_net_get_stats,
130106 + .ndo_do_ioctl = rtw_ioctl,
130107 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
130108 + .ndo_select_queue = rtw_select_queue,
130109 +#endif
130110 +};
130111 +#endif
130112 +
130113 +_adapter *rtw_drv_if2_init(_adapter *primary_padapter, void (*set_intf_ops)(struct _io_ops *pops))
130114 +{
130115 + int res = _FAIL;
130116 + struct net_device *pnetdev = NULL;
130117 + _adapter *padapter = NULL;
130118 + struct dvobj_priv *pdvobjpriv;
130119 + u8 mac[ETH_ALEN];
130120 +
130121 + /****** init netdev ******/
130122 + pnetdev = rtw_init_netdev(NULL);
130123 + if (!pnetdev)
130124 + goto error_rtw_drv_if2_init;
130125 +
130126 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
130127 + DBG_871X("register rtw_netdev_if2_ops to netdev_ops\n");
130128 + pnetdev->netdev_ops = &rtw_netdev_if2_ops;
130129 +#else
130130 + pnetdev->open = netdev_if2_open;
130131 + pnetdev->stop = netdev_if2_close;
130132 +#endif
130133 +
130134 +#ifdef CONFIG_NO_WIRELESS_HANDLERS
130135 + pnetdev->wireless_handlers = NULL;
130136 +#endif
130137 +
130138 + /****** init adapter ******/
130139 + padapter = rtw_netdev_priv(pnetdev);
130140 + _rtw_memcpy(padapter, primary_padapter, sizeof(_adapter));
130141 +
130142 + //
130143 + padapter->bup = _FALSE;
130144 + padapter->net_closed = _TRUE;
130145 + padapter->hw_init_completed = _FALSE;
130146 +
130147 + //set adapter_type/iface type
130148 + padapter->isprimary = _FALSE;
130149 + padapter->adapter_type = SECONDARY_ADAPTER;
130150 + padapter->pbuddy_adapter = primary_padapter;
130151 + padapter->iface_id = IFACE_ID1;
130152 +#ifndef CONFIG_HWPORT_SWAP //Port0 -> Pri , Port1 -> Sec
130153 + padapter->iface_type = IFACE_PORT1;
130154 +#else
130155 + padapter->iface_type = IFACE_PORT0;
130156 +#endif //CONFIG_HWPORT_SWAP
130157 + //
130158 + padapter->pnetdev = pnetdev;
130159 +
130160 + /****** setup dvobj ******/
130161 + pdvobjpriv = adapter_to_dvobj(padapter);
130162 + pdvobjpriv->if2 = padapter;
130163 + pdvobjpriv->padapters[pdvobjpriv->iface_nums++] = padapter;
130164 +
130165 + SET_NETDEV_DEV(pnetdev, dvobj_to_dev(pdvobjpriv));
130166 + #ifdef CONFIG_IOCTL_CFG80211
130167 + rtw_wdev_alloc(padapter, dvobj_to_dev(pdvobjpriv));
130168 + #endif //CONFIG_IOCTL_CFG80211
130169 +
130170 + //set interface_type/chip_type/HardwareType
130171 + padapter->interface_type = primary_padapter->interface_type;
130172 + padapter->chip_type = primary_padapter->chip_type;
130173 + padapter->HardwareType = primary_padapter->HardwareType;
130174 +
130175 + //set hal data & hal ops
130176 +#if defined(CONFIG_RTL8192C)
130177 + #if defined(CONFIG_PCI_HCI)
130178 + rtl8192ce_set_hal_ops(padapter);
130179 + #elif defined(CONFIG_USB_HCI)
130180 + rtl8192cu_set_hal_ops(padapter);
130181 + #endif
130182 +#elif defined(CONFIG_RTL8192D)
130183 + #if defined(CONFIG_PCI_HCI)
130184 + rtl8192de_set_hal_ops(padapter);
130185 + #elif defined(CONFIG_USB_HCI)
130186 + rtl8192du_set_hal_ops(padapter);
130187 + #endif
130188 +#endif
130189 +
130190 + padapter->HalFunc.inirp_init = NULL;
130191 + padapter->HalFunc.inirp_deinit = NULL;
130192 +
130193 + //
130194 + padapter->intf_start = primary_padapter->intf_start;
130195 + padapter->intf_stop = primary_padapter->intf_stop;
130196 +
130197 + //step init_io_priv
130198 + if ((rtw_init_io_priv(padapter, set_intf_ops)) == _FAIL) {
130199 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
130200 + }
130201 +
130202 + //step read_chip_version
130203 + rtw_hal_read_chip_version(padapter);
130204 +
130205 + //step usb endpoint mapping
130206 + rtw_hal_chip_configure(padapter);
130207 +
130208 +
130209 + //init drv data
130210 + if(rtw_init_drv_sw(padapter)!= _SUCCESS)
130211 + goto error_rtw_drv_if2_init;
130212 +
130213 + //get mac address from primary_padapter
130214 + _rtw_memcpy(mac, primary_padapter->eeprompriv.mac_addr, ETH_ALEN);
130215 +
130216 + if (((mac[0]==0xff) &&(mac[1]==0xff) && (mac[2]==0xff) &&
130217 + (mac[3]==0xff) && (mac[4]==0xff) &&(mac[5]==0xff)) ||
130218 + ((mac[0]==0x0) && (mac[1]==0x0) && (mac[2]==0x0) &&
130219 + (mac[3]==0x0) && (mac[4]==0x0) &&(mac[5]==0x0)))
130220 + {
130221 + mac[0] = 0x00;
130222 + mac[1] = 0xe0;
130223 + mac[2] = 0x4c;
130224 + mac[3] = 0x87;
130225 + mac[4] = 0x11;
130226 + mac[5] = 0x22;
130227 + }
130228 + else
130229 + {
130230 + //If the BIT1 is 0, the address is universally administered.
130231 + //If it is 1, the address is locally administered
130232 + mac[0] |= BIT(1); // locally administered
130233 +
130234 + }
130235 +
130236 + _rtw_memcpy(padapter->eeprompriv.mac_addr, mac, ETH_ALEN);
130237 + rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
130238 +
130239 + primary_padapter->pbuddy_adapter = padapter;
130240 +
130241 + padapter->dir_dev = NULL;
130242 +
130243 + res = _SUCCESS;
130244 +
130245 + return padapter;
130246 +
130247 +
130248 +error_rtw_drv_if2_init:
130249 +
130250 + if(padapter)
130251 + rtw_free_drv_sw(padapter);
130252 +
130253 + if (pnetdev)
130254 + rtw_free_netdev(pnetdev);
130255 +
130256 + return NULL;
130257 +
130258 +}
130259 +
130260 +void rtw_drv_if2_free(_adapter *if2)
130261 +{
130262 + _adapter *padapter = if2;
130263 + struct net_device *pnetdev = NULL;
130264 +
130265 + if (padapter == NULL)
130266 + return;
130267 +
130268 + pnetdev = padapter->pnetdev;
130269 +
130270 +#ifdef CONFIG_IOCTL_CFG80211
130271 + rtw_wdev_free(padapter->rtw_wdev);
130272 +#endif /* CONFIG_IOCTL_CFG80211 */
130273 +
130274 +
130275 + rtw_free_drv_sw(padapter);
130276 +
130277 + rtw_free_netdev(pnetdev);
130278 +
130279 +}
130280 +
130281 +void rtw_drv_if2_stop(_adapter *if2)
130282 +{
130283 + _adapter *padapter = if2;
130284 +
130285 + if (padapter == NULL)
130286 + return;
130287 +
130288 + rtw_cancel_all_timer(padapter);
130289 +
130290 + if (padapter->bup == _TRUE) {
130291 + padapter->bDriverStopped = _TRUE;
130292 + #ifdef CONFIG_XMIT_ACK
130293 + if (padapter->xmitpriv.ack_tx)
130294 + rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_DRV_STOP);
130295 + #endif
130296 +
130297 + if(padapter->intf_stop)
130298 + {
130299 + padapter->intf_stop(padapter);
130300 + }
130301 +
130302 + rtw_stop_drv_threads(padapter);
130303 +
130304 + padapter->bup = _FALSE;
130305 + }
130306 +}
130307 +#endif //end of CONFIG_CONCURRENT_MODE
130308 +
130309 +#ifdef CONFIG_BR_EXT
130310 +void netdev_br_init(struct net_device *netdev)
130311 +{
130312 + _adapter *adapter = (_adapter *)rtw_netdev_priv(netdev);
130313 +
130314 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
130315 + rcu_read_lock();
130316 +#endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
130317 +
130318 + //if(check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE)
130319 + {
130320 + //struct net_bridge *br = netdev->br_port->br;//->dev->dev_addr;
130321 +#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
130322 + if (netdev->br_port)
130323 +#else // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
130324 + if (rcu_dereference(adapter->pnetdev->rx_handler_data))
130325 +#endif // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
130326 + {
130327 + struct net_device *br_netdev;
130328 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
130329 + br_netdev = dev_get_by_name(CONFIG_BR_EXT_BRNAME);
130330 +#else // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
130331 + struct net *devnet = NULL;
130332 +
130333 +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
130334 + devnet = netdev->nd_net;
130335 +#else // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
130336 + devnet = dev_net(netdev);
130337 +#endif // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
130338 +
130339 + br_netdev = dev_get_by_name(devnet, CONFIG_BR_EXT_BRNAME);
130340 +#endif // (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
130341 +
130342 + if (br_netdev) {
130343 + memcpy(adapter->br_mac, br_netdev->dev_addr, ETH_ALEN);
130344 + dev_put(br_netdev);
130345 + } else
130346 + printk("%s()-%d: dev_get_by_name(%s) failed!", __FUNCTION__, __LINE__, CONFIG_BR_EXT_BRNAME);
130347 + }
130348 +
130349 + adapter->ethBrExtInfo.addPPPoETag = 1;
130350 + }
130351 +
130352 +#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
130353 + rcu_read_unlock();
130354 +#endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 35))
130355 +}
130356 +#endif //CONFIG_BR_EXT
130357 +
130358 +static int _rtw_drv_register_netdev(_adapter *padapter, char *name)
130359 +{
130360 + int ret = _SUCCESS;
130361 + struct net_device *pnetdev = padapter->pnetdev;
130362 +
130363 + /* alloc netdev name */
130364 + rtw_init_netdev_name(pnetdev, name);
130365 +
130366 + _rtw_memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
130367 +
130368 + /* Tell the network stack we exist */
130369 + if (register_netdev(pnetdev) != 0) {
130370 + DBG_871X(FUNC_NDEV_FMT "Failed!\n", FUNC_NDEV_ARG(pnetdev));
130371 + ret = _FAIL;
130372 + goto error_register_netdev;
130373 + }
130374 +
130375 + DBG_871X("%s, MAC Address (if%d) = " MAC_FMT "\n", __FUNCTION__, (padapter->iface_id+1), MAC_ARG(pnetdev->dev_addr));
130376 +
130377 + return ret;
130378 +
130379 +error_register_netdev:
130380 +
130381 + if(padapter->iface_id > IFACE_ID0)
130382 + {
130383 + rtw_free_drv_sw(padapter);
130384 +
130385 + rtw_free_netdev(pnetdev);
130386 + }
130387 +
130388 + return ret;
130389 +}
130390 +
130391 +int rtw_drv_register_netdev(_adapter *if1)
130392 +{
130393 + int i, status = _SUCCESS;
130394 + struct dvobj_priv *dvobj = if1->dvobj;
130395 +
130396 + if(dvobj->iface_nums < IFACE_ID_MAX)
130397 + {
130398 + for(i=0; i<dvobj->iface_nums; i++)
130399 + {
130400 + _adapter *padapter = dvobj->padapters[i];
130401 +
130402 + if(padapter)
130403 + {
130404 + char *name;
130405 +
130406 + if(padapter->iface_id == IFACE_ID0)
130407 + name = if1->registrypriv.ifname;
130408 + else if(padapter->iface_id == IFACE_ID1)
130409 + name = if1->registrypriv.if2name;
130410 + else
130411 + name = "wlan%d";
130412 +
130413 + if((status = _rtw_drv_register_netdev(padapter, name)) != _SUCCESS) {
130414 + break;
130415 + }
130416 + }
130417 + }
130418 + }
130419 +
130420 + return status;
130421 +}
130422 +
130423 +int _netdev_open(struct net_device *pnetdev)
130424 +{
130425 + uint status;
130426 + _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
130427 + struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
130428 +
130429 + RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - dev_open\n"));
130430 + DBG_871X("+871x_drv - drv_open, bup=%d\n", padapter->bup);
130431 +
130432 + if(pwrctrlpriv->ps_flag == _TRUE){
130433 + padapter->net_closed = _FALSE;
130434 + goto netdev_open_normal_process;
130435 + }
130436 +
130437 + if(padapter->bup == _FALSE)
130438 + {
130439 + padapter->bDriverStopped = _FALSE;
130440 + padapter->bSurpriseRemoved = _FALSE;
130441 + padapter->bCardDisableWOHSM = _FALSE;
130442 +
130443 + status = rtw_hal_init(padapter);
130444 + if (status ==_FAIL)
130445 + {
130446 + RT_TRACE(_module_os_intfs_c_,_drv_err_,("rtl871x_hal_init(): Can't init h/w!\n"));
130447 + goto netdev_open_error;
130448 + }
130449 +
130450 + DBG_871X("MAC Address = "MAC_FMT"\n", MAC_ARG(pnetdev->dev_addr));
130451 +
130452 +
130453 + status=rtw_start_drv_threads(padapter);
130454 + if(status ==_FAIL)
130455 + {
130456 + RT_TRACE(_module_os_intfs_c_,_drv_err_,("Initialize driver software resource Failed!\n"));
130457 + goto netdev_open_error;
130458 + }
130459 +
130460 +#ifdef CONFIG_DRVEXT_MODULE
130461 + init_drvext(padapter);
130462 +#endif
130463 +
130464 + if(padapter->intf_start)
130465 + {
130466 + padapter->intf_start(padapter);
130467 + }
130468 +
130469 +#ifndef RTK_DMP_PLATFORM
130470 + rtw_proc_init_one(pnetdev);
130471 +#endif
130472 +
130473 +#ifdef CONFIG_IOCTL_CFG80211
130474 + rtw_cfg80211_init_wiphy(padapter);
130475 +#endif
130476 +
130477 + rtw_led_control(padapter, LED_CTL_NO_LINK);
130478 +
130479 + padapter->bup = _TRUE;
130480 + }
130481 + padapter->net_closed = _FALSE;
130482 +
130483 + _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
130484 +
130485 + padapter->pwrctrlpriv.bips_processing = _FALSE;
130486 + rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
130487 +
130488 + //netif_carrier_on(pnetdev);//call this func when rtw_joinbss_event_callback return success
130489 + if(!rtw_netif_queue_stopped(pnetdev))
130490 + rtw_netif_start_queue(pnetdev);
130491 + else
130492 + rtw_netif_wake_queue(pnetdev);
130493 +
130494 +#ifdef CONFIG_BR_EXT
130495 + netdev_br_init(pnetdev);
130496 +#endif // CONFIG_BR_EXT
130497 +
130498 +netdev_open_normal_process:
130499 +
130500 + #ifdef CONFIG_CONCURRENT_MODE
130501 + {
130502 + _adapter *sec_adapter = padapter->pbuddy_adapter;
130503 + if(sec_adapter && (sec_adapter->bup == _FALSE || sec_adapter->hw_init_completed == _FALSE))
130504 + _netdev_if2_open(sec_adapter->pnetdev);
130505 + }
130506 + #endif
130507 +
130508 + RT_TRACE(_module_os_intfs_c_,_drv_info_,("-871x_drv - dev_open\n"));
130509 + DBG_871X("-871x_drv - drv_open, bup=%d\n", padapter->bup);
130510 +
130511 + return 0;
130512 +
130513 +netdev_open_error:
130514 +
130515 + padapter->bup = _FALSE;
130516 +
130517 + netif_carrier_off(pnetdev);
130518 + rtw_netif_stop_queue(pnetdev);
130519 +
130520 + RT_TRACE(_module_os_intfs_c_,_drv_err_,("-871x_drv - dev_open, fail!\n"));
130521 + DBG_871X("-871x_drv - drv_open fail, bup=%d\n", padapter->bup);
130522 +
130523 + return (-1);
130524 +
130525 +}
130526 +
130527 +int netdev_open(struct net_device *pnetdev)
130528 +{
130529 + int ret;
130530 + _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
130531 +
130532 + _enter_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
130533 + ret = _netdev_open(pnetdev);
130534 + _exit_critical_mutex(&(adapter_to_dvobj(padapter)->hw_init_mutex), NULL);
130535 +
130536 + return ret;
130537 +}
130538 +
130539 +#ifdef CONFIG_IPS
130540 +int ips_netdrv_open(_adapter *padapter)
130541 +{
130542 + int status = _SUCCESS;
130543 + padapter->net_closed = _FALSE;
130544 + DBG_871X("===> %s.........\n",__FUNCTION__);
130545 +
130546 +
130547 + padapter->bDriverStopped = _FALSE;
130548 + padapter->bCardDisableWOHSM = _FALSE;
130549 + //padapter->bup = _TRUE;
130550 +
130551 + status = rtw_hal_init(padapter);
130552 + if (status ==_FAIL)
130553 + {
130554 + RT_TRACE(_module_os_intfs_c_,_drv_err_,("ips_netdrv_open(): Can't init h/w!\n"));
130555 + goto netdev_open_error;
130556 + }
130557 +
130558 + if(padapter->intf_start)
130559 + {
130560 + padapter->intf_start(padapter);
130561 + }
130562 +
130563 + rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
130564 + _set_timer(&padapter->mlmepriv.dynamic_chk_timer,5000);
130565 +
130566 + return _SUCCESS;
130567 +
130568 +netdev_open_error:
130569 + //padapter->bup = _FALSE;
130570 + DBG_871X("-ips_netdrv_open - drv_open failure, bup=%d\n", padapter->bup);
130571 +
130572 + return _FAIL;
130573 +}
130574 +
130575 +
130576 +int rtw_ips_pwr_up(_adapter *padapter)
130577 +{
130578 + int result;
130579 + u32 start_time = rtw_get_current_time();
130580 + DBG_871X("===> rtw_ips_pwr_up..............\n");
130581 + rtw_reset_drv_sw(padapter);
130582 +
130583 + result = ips_netdrv_open(padapter);
130584 +
130585 + rtw_led_control(padapter, LED_CTL_NO_LINK);
130586 +
130587 + DBG_871X("<=== rtw_ips_pwr_up.............. in %dms\n", rtw_get_passing_time_ms(start_time));
130588 + return result;
130589 +
130590 +}
130591 +
130592 +void rtw_ips_pwr_down(_adapter *padapter)
130593 +{
130594 + u32 start_time = rtw_get_current_time();
130595 + DBG_871X("===> rtw_ips_pwr_down...................\n");
130596 +
130597 + padapter->bCardDisableWOHSM = _TRUE;
130598 + padapter->net_closed = _TRUE;
130599 +
130600 + rtw_led_control(padapter, LED_CTL_POWER_OFF);
130601 +
130602 + rtw_ips_dev_unload(padapter);
130603 + padapter->bCardDisableWOHSM = _FALSE;
130604 + DBG_871X("<=== rtw_ips_pwr_down..................... in %dms\n", rtw_get_passing_time_ms(start_time));
130605 +}
130606 +#endif
130607 +void rtw_ips_dev_unload(_adapter *padapter)
130608 +{
130609 + struct net_device *pnetdev= (struct net_device*)padapter->pnetdev;
130610 + struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
130611 + DBG_871X("====> %s...\n",__FUNCTION__);
130612 +
130613 + rtw_hal_set_hwreg(padapter, HW_VAR_FIFO_CLEARN_UP, 0);
130614 +
130615 + if(padapter->intf_stop)
130616 + {
130617 + padapter->intf_stop(padapter);
130618 + }
130619 +
130620 + //s5.
130621 if(padapter->bSurpriseRemoved == _FALSE)
130622 {
130623 rtw_hal_deinit(padapter);
130624 @@ -1481,7 +2648,7 @@ int pm_netdev_open(struct net_device *pnetdev,u8 bnormal)
130625 {
130626 int status;
130627 if(bnormal)
130628 - status = _netdev_open(pnetdev);
130629 + status = netdev_open(pnetdev);
130630 #ifdef CONFIG_IPS
130631 else
130632 status = (_SUCCESS == ips_netdrv_open((_adapter *)rtw_netdev_priv(pnetdev)))?(0):(-1);
130633 @@ -1489,16 +2656,16 @@ int pm_netdev_open(struct net_device *pnetdev,u8 bnormal)
130634
130635 return status;
130636 }
130637 -//extern int rfpwrstate_check(_adapter *padapter);
130638 +
130639 static int netdev_close(struct net_device *pnetdev)
130640 {
130641 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
130642
130643 - RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - drv_close\n"));
130644 + RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - drv_close\n"));
130645
130646 if(padapter->pwrctrlpriv.bInternalAutoSuspend == _TRUE)
130647 {
130648 - //rfpwrstate_check(padapter);
130649 + //rtw_pwr_wakeup(padapter);
130650 if(padapter->pwrctrlpriv.rf_pwrstate == rf_off)
130651 padapter->pwrctrlpriv.ps_flag = _TRUE;
130652 }
130653 @@ -1506,7 +2673,7 @@ static int netdev_close(struct net_device *pnetdev)
130654
130655 /* if(!padapter->hw_init_completed)
130656 {
130657 - DBG_8192C("(1)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed);
130658 + DBG_871X("(1)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed);
130659
130660 padapter->bDriverStopped = _TRUE;
130661
130662 @@ -1514,22 +2681,22 @@ static int netdev_close(struct net_device *pnetdev)
130663 }
130664 else*/
130665 if(padapter->pwrctrlpriv.rf_pwrstate == rf_on){
130666 - DBG_8192C("(2)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed);
130667 + DBG_871X("(2)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed);
130668
130669 //s1.
130670 - if(pnetdev)
130671 - {
130672 - if (!netif_queue_stopped(pnetdev))
130673 - netif_stop_queue(pnetdev);
130674 - }
130675 + if(pnetdev)
130676 + {
130677 + if (!rtw_netif_queue_stopped(pnetdev))
130678 + rtw_netif_stop_queue(pnetdev);
130679 + }
130680
130681 #ifndef CONFIG_ANDROID
130682 - //s2.
130683 - //s2-1. issue rtw_disassoc_cmd to fw
130684 - rtw_disassoc_cmd(padapter);
130685 + //s2.
130686 + LeaveAllPowerSaveMode(padapter);
130687 + rtw_disassoc_cmd(padapter, 500, _FALSE);
130688 //s2-2. indicate disconnect to os
130689 rtw_indicate_disconnect(padapter);
130690 - //s2-3.
130691 + //s2-3.
130692 rtw_free_assoc_resources(padapter, 1);
130693 //s2-4.
130694 rtw_free_network_queue(padapter,_TRUE);
130695 @@ -1539,7 +2706,7 @@ static int netdev_close(struct net_device *pnetdev)
130696 }
130697
130698 #ifdef CONFIG_BR_EXT
130699 - //if (OPMODE & (WIFI_STATION_STATE | WIFI_ADHOC_STATE))
130700 + //if (OPMODE & (WIFI_STATION_STATE | WIFI_ADHOC_STATE))
130701 {
130702 //void nat25_db_cleanup(_adapter *priv);
130703 nat25_db_cleanup(padapter);
130704 @@ -1547,22 +2714,36 @@ static int netdev_close(struct net_device *pnetdev)
130705 #endif // CONFIG_BR_EXT
130706
130707 #ifdef CONFIG_P2P
130708 - #ifdef CONFIG_IOCTL_CFG80211
130709 - if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == _TRUE)
130710 - wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _FALSE;
130711 - #endif
130712 +#ifdef CONFIG_IOCTL_CFG80211
130713 + if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
130714 + {
130715 + if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == _TRUE)
130716 + wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _FALSE;
130717 + }
130718 +#endif //CONFIG_IOCTL_CFG80211
130719 rtw_p2p_enable(padapter, P2P_ROLE_DISABLE);
130720 #endif //CONFIG_P2P
130721
130722 #ifdef CONFIG_IOCTL_CFG80211
130723 - rtw_cfg80211_indicate_scan_done(wdev_to_priv(padapter->rtw_wdev), _TRUE);
130724 + rtw_scan_abort(padapter);
130725 + wdev_to_priv(padapter->rtw_wdev)->bandroid_scan = _FALSE;
130726 padapter->rtw_wdev->iftype = NL80211_IFTYPE_MONITOR; //set this at the end
130727 -#endif
130728 -
130729 +#endif //CONFIG_IOCTL_CFG80211
130730 +
130731 RT_TRACE(_module_os_intfs_c_,_drv_info_,("-871x_drv - drv_close\n"));
130732 - DBG_8192C("-871x_drv - drv_close, bup=%d\n", padapter->bup);
130733 -
130734 + DBG_871X("-871x_drv - drv_close, bup=%d\n", padapter->bup);
130735 +
130736 return 0;
130737 -
130738 +}
130739 +
130740 +void rtw_ndev_destructor(struct net_device *ndev)
130741 +{
130742 + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
130743 +
130744 +#ifdef CONFIG_IOCTL_CFG80211
130745 + if (ndev->ieee80211_ptr)
130746 + rtw_mfree((u8 *)ndev->ieee80211_ptr, sizeof(struct wireless_dev));
130747 +#endif
130748 + free_netdev(ndev);
130749 }
130750
130751 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c
130752 index 0848297..5bf576f 100644
130753 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c
130754 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c
130755 @@ -1,7 +1,7 @@
130756 /******************************************************************************
130757 *
130758 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
130759 - *
130760 + *
130761 * This program is free software; you can redistribute it and/or modify it
130762 * under the terms of version 2 of the GNU General Public License as
130763 * published by the Free Software Foundation.
130764 @@ -24,7 +24,7 @@
130765 #include <drv_types.h>
130766 #include <recv_osdep.h>
130767 #include <xmit_osdep.h>
130768 -#include <hal_init.h>
130769 +#include <hal_intf.h>
130770 #include <rtw_version.h>
130771
130772 #ifndef CONFIG_PCI_HCI
130773 @@ -79,23 +79,21 @@ struct pci_device_id rtw_pci_id_tbl[] = {
130774 {},
130775 };
130776
130777 -typedef struct _driver_priv{
130778 -
130779 +struct pci_drv_priv {
130780 struct pci_driver rtw_pci_drv;
130781 int drv_registered;
130782 -
130783 -}drv_priv, *pdrv_priv;
130784 +};
130785
130786
130787 -static drv_priv drvpriv = {
130788 +static struct pci_drv_priv pci_drvpriv = {
130789 .rtw_pci_drv.name = (char*)DRV_NAME,
130790 .rtw_pci_drv.probe = rtw_drv_init,
130791 .rtw_pci_drv.remove = rtw_dev_remove,
130792 .rtw_pci_drv.id_table = rtw_pci_id_tbl,
130793 -#ifdef CONFIG_PM
130794 +#ifdef CONFIG_PM
130795 .rtw_pci_drv.suspend = rtw_suspend,
130796 .rtw_pci_drv.resume = rtw_resume,
130797 -#else
130798 +#else
130799 .rtw_pci_drv.suspend = NULL,
130800 .rtw_pci_drv.resume = NULL,
130801 #endif
130802 @@ -114,7 +112,7 @@ static u16 pcibridge_vendors[PCI_BRIDGE_VENDOR_MAX] = {
130803
130804 static u8 rtw_pci_platform_switch_device_pci_aspm(_adapter *padapter, u8 value)
130805 {
130806 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
130807 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
130808 u8 bresult = _SUCCESS;
130809 int error;
130810
130811 @@ -125,18 +123,18 @@ static u8 rtw_pci_platform_switch_device_pci_aspm(_adapter *padapter, u8 value)
130812 if(error != 0)
130813 {
130814 bresult = _FALSE;
130815 - DBG_8192C("rtw_pci_platform_switch_device_pci_aspm error (%d)\n",error);
130816 + DBG_871X("rtw_pci_platform_switch_device_pci_aspm error (%d)\n",error);
130817 }
130818
130819 return bresult;
130820 }
130821
130822 -//
130823 -// When we set 0x01 to enable clk request. Set 0x0 to disable clk req.
130824 -//
130825 +//
130826 +// When we set 0x01 to enable clk request. Set 0x0 to disable clk req.
130827 +//
130828 static u8 rtw_pci_switch_clk_req(_adapter *padapter, u8 value)
130829 {
130830 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
130831 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
130832 u8 buffer, bresult = _SUCCESS;
130833 int error;
130834
130835 @@ -150,18 +148,18 @@ static u8 rtw_pci_switch_clk_req(_adapter *padapter, u8 value)
130836 if(error != 0)
130837 {
130838 bresult = _FALSE;
130839 - DBG_8192C("rtw_pci_switch_clk_req error (%d)\n",error);
130840 + DBG_871X("rtw_pci_switch_clk_req error (%d)\n",error);
130841 }
130842
130843 return bresult;
130844 }
130845
130846 #if 0
130847 -//Description:
130848 +//Description:
130849 //Disable RTL8192SE ASPM & Disable Pci Bridge ASPM
130850 void rtw_pci_disable_aspm(_adapter *padapter)
130851 {
130852 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
130853 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
130854 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
130855 struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
130856 u32 pcicfg_addrport = 0;
130857 @@ -170,8 +168,8 @@ void rtw_pci_disable_aspm(_adapter *padapter)
130858 u16 pcibridge_linkctrlreg, aspmlevel = 0;
130859
130860 // When there exists anyone's busnum, devnum, and funcnum that are set to 0xff,
130861 - // we do not execute any action and return.
130862 - // if it is not intel bus then don't enable ASPM.
130863 + // we do not execute any action and return.
130864 + // if it is not intel bus then don't enable ASPM.
130865 if ((pcipriv->busnumber == 0xff
130866 && pcipriv->devnumber == 0xff
130867 && pcipriv->funcnumber == 0xff)
130868 @@ -179,12 +177,12 @@ void rtw_pci_disable_aspm(_adapter *padapter)
130869 && pcipriv->pcibridge_devnum == 0xff
130870 && pcipriv->pcibridge_funcnum == 0xff))
130871 {
130872 - DBG_8192C("PlatformEnableASPM(): Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n");
130873 + DBG_871X("PlatformEnableASPM(): Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n");
130874 return;
130875 }
130876
130877 if (pcipriv->pcibridge_vendor == PCI_BRIDGE_VENDOR_UNKNOWN) {
130878 - DBG_8192C("%s(): Disable ASPM. Recognize the Bus of PCI(Bridge) as UNKNOWN.\n", __func__);
130879 + DBG_871X("%s(): Disable ASPM. Recognize the Bus of PCI(Bridge) as UNKNOWN.\n", __func__);
130880 }
130881
130882 if (pwrpriv->reg_rfps_level & RT_RF_OFF_LEVL_CLK_REQ) {
130883 @@ -224,7 +222,7 @@ void rtw_pci_disable_aspm(_adapter *padapter)
130884 }
130885 else
130886 {
130887 - //4 //Disable Pci Bridge ASPM
130888 + //4 //Disable Pci Bridge ASPM
130889 pcicfg_addrport = (pcipriv->pcibridge_busnum << 16) |
130890 (pcipriv->pcibridge_devnum << 11) |
130891 (pcipriv->pcibridge_funcnum << 8) | (1 << 31);
130892 @@ -236,9 +234,9 @@ void rtw_pci_disable_aspm(_adapter *padapter)
130893 // now grab data port with device|vendor 4 byte dword
130894 NdisRawWritePortUchar(PCI_CONF_DATA, pcibridge_linkctrlreg);
130895
130896 - DBG_8192C("rtw_pci_disable_aspm():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
130897 - pcipriv->pcibridge_busnum, pcipriv->pcibridge_devnum,
130898 - pcipriv->pcibridge_funcnum,
130899 + DBG_871X("rtw_pci_disable_aspm():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
130900 + pcipriv->pcibridge_busnum, pcipriv->pcibridge_devnum,
130901 + pcipriv->pcibridge_funcnum,
130902 (pcipriv->pcibridge_pciehdr_offset+0x10), pcibridge_linkctrlreg);
130903
130904 rtw_udelay_os(50);
130905 @@ -246,13 +244,13 @@ void rtw_pci_disable_aspm(_adapter *padapter)
130906 }
130907
130908 //[ASPM]
130909 -//Description:
130910 +//Description:
130911 // Enable RTL8192SE ASPM & Enable Pci Bridge ASPM for power saving
130912 // We should follow the sequence to enable RTL8192SE first then enable Pci Bridge ASPM
130913 // or the system will show bluescreen.
130914 void rtw_pci_enable_aspm(_adapter *padapter)
130915 {
130916 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
130917 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
130918 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
130919 struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
130920 u16 aspmlevel = 0;
130921 @@ -262,8 +260,8 @@ void rtw_pci_enable_aspm(_adapter *padapter)
130922 u8 u_device_aspmsetting = 0;
130923
130924 // When there exists anyone's busnum, devnum, and funcnum that are set to 0xff,
130925 - // we do not execute any action and return.
130926 - // if it is not intel bus then don't enable ASPM.
130927 + // we do not execute any action and return.
130928 + // if it is not intel bus then don't enable ASPM.
130929
130930 if ((pcipriv->busnumber == 0xff
130931 && pcipriv->devnumber == 0xff
130932 @@ -272,12 +270,12 @@ void rtw_pci_enable_aspm(_adapter *padapter)
130933 && pcipriv->pcibridge_devnum == 0xff
130934 && pcipriv->pcibridge_funcnum == 0xff))
130935 {
130936 - DBG_8192C("PlatformEnableASPM(): Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n");
130937 + DBG_871X("PlatformEnableASPM(): Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n");
130938 return;
130939 }
130940
130941 - //4 Enable Pci Bridge ASPM
130942 - pcicfg_addrport = (pcipriv->pcibridge_busnum << 16)
130943 + //4 Enable Pci Bridge ASPM
130944 + pcicfg_addrport = (pcipriv->pcibridge_busnum << 16)
130945 | (pcipriv->pcibridge_devnum << 11)
130946 | (pcipriv->pcibridge_funcnum << 8) | (1 << 31);
130947 num4bytes = (pcipriv->pcibridge_pciehdr_offset + 0x10) / 4;
130948 @@ -293,11 +291,11 @@ void rtw_pci_enable_aspm(_adapter *padapter)
130949
130950 NdisRawWritePortUchar(PCI_CONF_DATA, u_pcibridge_aspmsetting);
130951
130952 - DBG_8192C("PlatformEnableASPM():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
130953 - pcipriv->pcibridge_busnum,
130954 - pcipriv->pcibridge_devnum,
130955 - pcipriv->pcibridge_funcnum,
130956 - (pcipriv->pcibridge_pciehdr_offset+0x10),
130957 + DBG_871X("PlatformEnableASPM():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
130958 + pcipriv->pcibridge_busnum,
130959 + pcipriv->pcibridge_devnum,
130960 + pcipriv->pcibridge_funcnum,
130961 + (pcipriv->pcibridge_pciehdr_offset+0x10),
130962 u_pcibridge_aspmsetting);
130963
130964 rtw_udelay_os(50);
130965 @@ -318,14 +316,14 @@ void rtw_pci_enable_aspm(_adapter *padapter)
130966 }
130967
130968 //
130969 -//Description:
130970 +//Description:
130971 //To get link control field by searching from PCIe capability lists.
130972 //
130973 static u8
130974 rtw_get_link_control_field(_adapter *padapter, u8 busnum, u8 devnum,
130975 u8 funcnum)
130976 {
130977 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
130978 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
130979 struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
130980 struct rt_pci_capabilities_header capability_hdr;
130981 u8 capability_offset, num4bytes;
130982 @@ -335,7 +333,7 @@ rtw_get_link_control_field(_adapter *padapter, u8 busnum, u8 devnum,
130983
130984 //If busnum, devnum, funcnum are set to 0xff.
130985 if (busnum == 0xff && devnum == 0xff && funcnum == 0xff) {
130986 - DBG_8192C("GetLinkControlField(): Fail to find PCIe Capability\n");
130987 + DBG_871X("GetLinkControlField(): Fail to find PCIe Capability\n");
130988 return _FALSE;
130989 }
130990
130991 @@ -351,15 +349,15 @@ rtw_get_link_control_field(_adapter *padapter, u8 busnum, u8 devnum,
130992 // now grab data port with device|vendor 4 byte dword
130993 NdisRawReadPortUchar(PCI_CONF_DATA, &capability_offset);
130994
130995 - // Loop through the capabilities in search of the power management capability.
130996 + // Loop through the capabilities in search of the power management capability.
130997 // The list is NULL-terminated, so the last offset will always be zero.
130998
130999 while (capability_offset != 0) {
131000 - // First find the number of 4 Byte.
131001 + // First find the number of 4 Byte.
131002 num4bytes = capability_offset / 4;
131003
131004 // Read the header of the capability at this offset. If the retrieved capability is not
131005 - // the power management capability that we are looking for, follow the link to the
131006 + // the power management capability that we are looking for, follow the link to the
131007 // next capability and continue looping.
131008
131009 //4 get capability_hdr
131010 @@ -397,16 +395,16 @@ rtw_get_link_control_field(_adapter *padapter, u8 busnum, u8 devnum,
131011 }
131012 else
131013 {
131014 - // We didn't find a PCIe capability.
131015 - DBG_8192C("GetLinkControlField(): Cannot Find PCIe Capability\n");
131016 + // We didn't find a PCIe capability.
131017 + DBG_871X("GetLinkControlField(): Cannot Find PCIe Capability\n");
131018 }
131019
131020 return status;
131021 }
131022
131023 //
131024 -//Description:
131025 -//To get PCI bus infomation and return busnum, devnum, and funcnum about
131026 +//Description:
131027 +//To get PCI bus infomation and return busnum, devnum, and funcnum about
131028 //the bus(bridge) which the device binds.
131029 //
131030 static u8
131031 @@ -416,7 +414,7 @@ rtw_get_pci_bus_info(_adapter *padapter,
131032 u8 irql, u8 basecode, u8 subclass, u8 filed19val,
131033 u8 * busnum, u8 * devnum, u8 * funcnum)
131034 {
131035 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131036 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131037 struct pci_dev *pdev = pdvobjpriv->ppcidev;
131038 u8 busnum_idx, devicenum_idx, functionnum_idx;
131039 u32 pcicfg_addrport = 0;
131040 @@ -431,7 +429,7 @@ rtw_get_pci_bus_info(_adapter *padapter,
131041 *devnum = 0xFF;
131042 *funcnum = 0xFF;
131043
131044 - //DBG_8192C("==============>vendorid:%x,deviceid:%x,irql:%x\n", vendorid,deviceid,irql);
131045 + //DBG_871X("==============>vendorid:%x,deviceid:%x,irql:%x\n", vendorid,deviceid,irql);
131046 if ((basecode == PCI_CLASS_BRIDGE_DEV) &&
131047 (subclass == PCI_SUBCLASS_BR_PCI_TO_PCI)
131048 && (filed19val == U1DONTCARE))
131049 @@ -449,14 +447,14 @@ rtw_get_pci_bus_info(_adapter *padapter,
131050 // <Roger_Notes> We have to skip redundant Bus scan to prevent unexpected system hang
131051 // if single function is present in this device.
131052 // 2009.02.26.
131053 - //
131054 + //
131055 if (functionnum_idx == 0) {
131056 //4 get header type (DWORD #3)
131057 pcicfg_addrport = (busnum_idx << 16) | (devicenum_idx << 11) | (functionnum_idx << 8) | (1 << 31);
131058 NdisRawWritePortUlong(PCI_CONF_ADDRESS, pcicfg_addrport + (3 << 2));
131059 NdisRawReadPortUlong(PCI_CONF_DATA, &headertype);
131060 headertype = ((headertype >> 16) & 0x0080) >> 7; // address 0x0e[7].
131061 - if (headertype == 0) //Single function
131062 + if (headertype == 0) //Single function
131063 b_singlefunc = _TRUE;
131064 }
131065 else
131066 @@ -534,7 +532,7 @@ rtw_get_pci_bus_info(_adapter *padapter,
131067 *devnum = devicenum_idx;
131068 *funcnum = functionnum_idx;
131069
131070 - DBG_8192C("GetPciBusInfo(): Find Device(%X:%X) bus=%d dev=%d, func=%d\n",
131071 + DBG_871X("GetPciBusInfo(): Find Device(%X:%X) bus=%d dev=%d, func=%d\n",
131072 vendorid, deviceid, busnum_idx, devicenum_idx, functionnum_idx);
131073 return _TRUE;
131074 }
131075 @@ -542,7 +540,7 @@ rtw_get_pci_bus_info(_adapter *padapter,
131076 }
131077 }
131078
131079 - DBG_8192C("GetPciBusInfo(): Cannot Find Device(%X:%X:%X)\n", vendorid, deviceid, dev_venid);
131080 + DBG_871X("GetPciBusInfo(): Cannot Find Device(%X:%X:%X)\n", vendorid, deviceid, dev_venid);
131081
131082 return _FALSE;
131083 }
131084 @@ -588,7 +586,7 @@ rtw_get_pci_brideg_info(_adapter *padapter,
131085 NdisRawWritePortUlong(PCI_CONF_ADDRESS, pcicfg_addrport + (3 << 2));
131086 NdisRawReadPortUlong(PCI_CONF_DATA, &headertype);
131087 headertype = ((headertype >> 16) & 0x0080) >> 7; // address 0x0e[7].
131088 - if (headertype == 0) //Single function
131089 + if (headertype == 0) //Single function
131090 b_singlefunc = _TRUE;
131091 }
131092 else
131093 @@ -636,7 +634,7 @@ rtw_get_pci_brideg_info(_adapter *padapter,
131094 *vendorid = venId;
131095 *deviceid = devId;
131096
131097 - DBG_8192C("GetPciBridegInfo : Find Device(%X:%X) bus=%d dev=%d, func=%d\n",
131098 + DBG_871X("GetPciBridegInfo : Find Device(%X:%X) bus=%d dev=%d, func=%d\n",
131099 venId, devId, busnum_idx, devicenum_idx, functionnum_idx);
131100
131101 return _TRUE;
131102 @@ -645,18 +643,18 @@ rtw_get_pci_brideg_info(_adapter *padapter,
131103 }
131104 }
131105
131106 - DBG_8192C("GetPciBridegInfo(): Cannot Find PciBridge for Device\n");
131107 + DBG_871X("GetPciBridegInfo(): Cannot Find PciBridge for Device\n");
131108
131109 return _FALSE;
131110 } // end of GetPciBridegInfo
131111
131112 //
131113 -//Description:
131114 +//Description:
131115 //To find specific bridge information.
131116 //
131117 static void rtw_find_bridge_info(_adapter *padapter)
131118 {
131119 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131120 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131121 struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131122 u8 pcibridge_busnum = 0xff;
131123 u8 pcibridge_devnum = 0xff;
131124 @@ -679,11 +677,11 @@ static void rtw_find_bridge_info(_adapter *padapter)
131125 for (tmp = 0; tmp < PCI_BRIDGE_VENDOR_MAX; tmp++) {
131126 if (pcibridge_vendorid == pcibridge_vendors[tmp]) {
131127 pcipriv->pcibridge_vendor = tmp;
131128 - DBG_8192C("Pci Bridge Vendor is found index: %d\n", tmp);
131129 + DBG_871X("Pci Bridge Vendor is found index: %d\n", tmp);
131130 break;
131131 }
131132 }
131133 - DBG_8192C("Pci Bridge Vendor is %x\n", pcibridge_vendors[tmp]);
131134 + DBG_871X("Pci Bridge Vendor is %x\n", pcibridge_vendors[tmp]);
131135
131136 // Update corresponding PCI bus info.
131137 pcipriv->pcibridge_busnum = pcibridge_busnum;
131138 @@ -726,7 +724,7 @@ rtw_get_amd_l1_patch(_adapter *padapter, u8 busnum, u8 devnum,
131139 /*Disable RTL8192SE ASPM & Disable Pci Bridge ASPM*/
131140 void rtw_pci_disable_aspm(_adapter *padapter)
131141 {
131142 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131143 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131144 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
131145 struct pci_dev *pdev = pdvobjpriv->ppcidev;
131146 struct pci_dev *bridge_pdev = pdev->bus->self;
131147 @@ -762,7 +760,7 @@ void rtw_pci_disable_aspm(_adapter *padapter)
131148 }
131149
131150 {
131151 - /*for promising device will in L0 state after an I/O.*/
131152 + /*for promising device will in L0 state after an I/O.*/
131153 u8 tmp_u1b;
131154 pci_read_config_byte(pdev, 0x80, &tmp_u1b);
131155 }
131156 @@ -779,14 +777,14 @@ void rtw_pci_disable_aspm(_adapter *padapter)
131157 }
131158 else
131159 {
131160 - /*Disable Pci Bridge ASPM*/
131161 + /*Disable Pci Bridge ASPM*/
131162 //NdisRawWritePortUlong(PCI_CONF_ADDRESS, pcicfg_addrport + (num4bytes << 2));
131163 //NdisRawWritePortUchar(PCI_CONF_DATA, pcibridge_linkctrlreg);
131164 pci_write_config_byte(bridge_pdev, pcipriv->pcibridge_pciehdr_offset + 0x10, pcibridge_linkctrlreg);
131165
131166 - DBG_8192C("rtw_pci_disable_aspm():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
131167 - pcipriv->pcibridge_busnum, pcipriv->pcibridge_devnum,
131168 - pcipriv->pcibridge_funcnum,
131169 + DBG_871X("rtw_pci_disable_aspm():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
131170 + pcipriv->pcibridge_busnum, pcipriv->pcibridge_devnum,
131171 + pcipriv->pcibridge_funcnum,
131172 (pcipriv->pcibridge_pciehdr_offset+0x10), pcibridge_linkctrlreg);
131173
131174 rtw_udelay_os(50);
131175 @@ -794,18 +792,18 @@ void rtw_pci_disable_aspm(_adapter *padapter)
131176
131177 }
131178
131179 -/*Enable RTL8192SE ASPM & Enable Pci Bridge ASPM for
131180 -power saving We should follow the sequence to enable
131181 +/*Enable RTL8192SE ASPM & Enable Pci Bridge ASPM for
131182 +power saving We should follow the sequence to enable
131183 RTL8192SE first then enable Pci Bridge ASPM
131184 or the system will show bluescreen.*/
131185 void rtw_pci_enable_aspm(_adapter *padapter)
131186 {
131187 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131188 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131189 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
131190 struct pci_dev *pdev = pdvobjpriv->ppcidev;
131191 struct pci_dev *bridge_pdev = pdev->bus->self;
131192 struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131193 - u16 aspmlevel = 0;
131194 + u16 aspmlevel = 0;
131195 u8 u_pcibridge_aspmsetting = 0;
131196 u8 u_device_aspmsetting = 0;
131197 u32 u_device_aspmsupportsetting = 0;
131198 @@ -816,11 +814,11 @@ void rtw_pci_enable_aspm(_adapter *padapter)
131199 return;
131200
131201 //When there exists anyone's BusNum, DevNum, and FuncNum that are set to 0xff,
131202 - // we do not execute any action and return. Added by tynli.
131203 + // we do not execute any action and return. Added by tynli.
131204 if( (pcipriv->busnumber == 0xff && pcipriv->devnumber == 0xff && pcipriv->funcnumber == 0xff) ||
131205 (pcipriv->pcibridge_busnum == 0xff && pcipriv->pcibridge_devnum == 0xff && pcipriv->pcibridge_funcnum == 0xff) )
131206 {
131207 - DBG_8192C("rtw_pci_enable_aspm(): Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n");
131208 + DBG_871X("rtw_pci_enable_aspm(): Fail to enable ASPM. Cannot find the Bus of PCI(Bridge).\n");
131209 return;
131210 }
131211
131212 @@ -834,19 +832,19 @@ void rtw_pci_enable_aspm(_adapter *padapter)
131213 //NdisRawWritePortUlong((ULONG_PTR)PCI_CONF_ADDRESS , PciCfgAddrPort+(Num4Bytes << 2));
131214 //NdisRawReadPortUlong((ULONG_PTR)PCI_CONF_DATA,&uDeviceASPMSupportSetting);
131215 pci_read_config_dword(bridge_pdev, (pcipriv->pcibridge_pciehdr_offset+0x0C), &u_device_aspmsupportsetting);
131216 - DBG_8192C("rtw_pci_enable_aspm(): Bridge ASPM support %x \n",u_device_aspmsupportsetting);
131217 + DBG_871X("rtw_pci_enable_aspm(): Bridge ASPM support %x \n",u_device_aspmsupportsetting);
131218 if(((u_device_aspmsupportsetting & BIT(11)) != BIT(11)) || ((u_device_aspmsupportsetting & BIT(10)) != BIT(10)))
131219 {
131220 if(pdvobjpriv->const_devicepci_aspm_setting == 3)
131221 {
131222 - DBG_8192C("rtw_pci_enable_aspm(): Bridge not support L0S or L1\n");
131223 + DBG_871X("rtw_pci_enable_aspm(): Bridge not support L0S or L1\n");
131224 return;
131225 }
131226 else if(pdvobjpriv->const_devicepci_aspm_setting == 2)
131227 {
131228 if((u_device_aspmsupportsetting & BIT(11)) != BIT(11))
131229 {
131230 - DBG_8192C("rtw_pci_enable_aspm(): Bridge not support L1 \n");
131231 + DBG_871X("rtw_pci_enable_aspm(): Bridge not support L1 \n");
131232 return;
131233 }
131234 }
131235 @@ -854,7 +852,7 @@ void rtw_pci_enable_aspm(_adapter *padapter)
131236 {
131237 if((u_device_aspmsupportsetting & BIT(10)) != BIT(10))
131238 {
131239 - DBG_8192C("rtw_pci_enable_aspm(): Bridge not support L0s \n");
131240 + DBG_871X("rtw_pci_enable_aspm(): Bridge not support L0s \n");
131241 return;
131242 }
131243
131244 @@ -862,12 +860,12 @@ void rtw_pci_enable_aspm(_adapter *padapter)
131245 }
131246 else
131247 {
131248 - DBG_8192C("rtw_pci_enable_aspm(): Bridge support L0s and L1 \n");
131249 + DBG_871X("rtw_pci_enable_aspm(): Bridge support L0s and L1 \n");
131250 }
131251 }
131252
131253
131254 - /*Enable Pci Bridge ASPM*/
131255 + /*Enable Pci Bridge ASPM*/
131256 //PciCfgAddrPort = (pcipriv->pcibridge_busnum << 16)|(pcipriv->pcibridge_devnum<< 11) |(pcipriv->pcibridge_funcnum << 8)|(1 << 31);
131257 //Num4Bytes = (pcipriv->pcibridge_pciehdr_offset+0x10)/4;
131258 // set up address port at 0xCF8 offset field= 0 (dev|vend)
131259 @@ -884,14 +882,14 @@ void rtw_pci_enable_aspm(_adapter *padapter)
131260 //NdisRawWritePortUchar(PCI_CONF_DATA, u_pcibridge_aspmsetting);
131261 pci_write_config_byte(bridge_pdev, (pcipriv->pcibridge_pciehdr_offset+0x10), u_pcibridge_aspmsetting);
131262
131263 - DBG_8192C("PlatformEnableASPM():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
131264 - pcipriv->pcibridge_busnum, pcipriv->pcibridge_devnum, pcipriv->pcibridge_funcnum,
131265 - (pcipriv->pcibridge_pciehdr_offset+0x10),
131266 + DBG_871X("PlatformEnableASPM():PciBridge busnumber[%x], DevNumbe[%x], funcnumber[%x], Write reg[%x] = %x\n",
131267 + pcipriv->pcibridge_busnum, pcipriv->pcibridge_devnum, pcipriv->pcibridge_funcnum,
131268 + (pcipriv->pcibridge_pciehdr_offset+0x10),
131269 u_pcibridge_aspmsetting);
131270
131271 rtw_udelay_os(50);
131272
131273 - /*Get ASPM level (with/without Clock Req)*/
131274 + /*Get ASPM level (with/without Clock Req)*/
131275 aspmlevel |= pdvobjpriv->const_devicepci_aspm_setting;
131276 u_device_aspmsetting = pcipriv->linkctrl_reg;
131277 u_device_aspmsetting |= aspmlevel; // device 43
131278 @@ -906,10 +904,9 @@ void rtw_pci_enable_aspm(_adapter *padapter)
131279 rtw_udelay_os(50);
131280 }
131281
131282 -static u8 rtw_pci_get_amd_l1_patch(_adapter *padapter)
131283 +static u8 rtw_pci_get_amd_l1_patch(struct dvobj_priv *dvobj)
131284 {
131285 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131286 - struct pci_dev *pdev = pdvobjpriv->ppcidev;
131287 + struct pci_dev *pdev = dvobj->ppcidev;
131288 struct pci_dev *bridge_pdev = pdev->bus->self;
131289 u8 status = _FALSE;
131290 u8 offset_e0;
131291 @@ -934,15 +931,14 @@ static u8 rtw_pci_get_amd_l1_patch(_adapter *padapter)
131292 return status;
131293 }
131294
131295 -static void rtw_pci_get_linkcontrol_field(_adapter *padapter)
131296 +static void rtw_pci_get_linkcontrol_field(struct dvobj_priv *dvobj)
131297 {
131298 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131299 - struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131300 - struct pci_dev *pdev = pdvobjpriv->ppcidev;
131301 + struct pci_priv *pcipriv = &(dvobj->pcipriv);
131302 + struct pci_dev *pdev = dvobj->ppcidev;
131303 struct pci_dev *bridge_pdev = pdev->bus->self;
131304 u8 capabilityoffset = pcipriv->pcibridge_pciehdr_offset;
131305 - u8 linkctrl_reg;
131306 -
131307 + u8 linkctrl_reg;
131308 +
131309 /*Read Link Control Register*/
131310 pci_read_config_byte(bridge_pdev, capabilityoffset + PCI_EXP_LNKCTL, &linkctrl_reg);
131311
131312 @@ -950,10 +946,10 @@ static void rtw_pci_get_linkcontrol_field(_adapter *padapter)
131313 }
131314 #endif
131315
131316 -static void rtw_pci_parse_configuration(struct pci_dev *pdev, _adapter *padapter)
131317 +static void rtw_pci_parse_configuration(struct dvobj_priv *dvobj)
131318 {
131319 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131320 - struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131321 + struct pci_dev *pdev = dvobj->ppcidev;
131322 + struct pci_priv *pcipriv = &(dvobj->pcipriv);
131323 u8 tmp;
131324 int pos;
131325 u8 linkctrl_reg;
131326 @@ -963,7 +959,7 @@ static void rtw_pci_parse_configuration(struct pci_dev *pdev, _adapter *padapter
131327 pci_read_config_byte(pdev, pos + PCI_EXP_LNKCTL, &linkctrl_reg);
131328 pcipriv->linkctrl_reg = linkctrl_reg;
131329
131330 - //DBG_8192C("Link Control Register = %x\n", pcipriv->linkctrl_reg);
131331 + //DBG_871X("Link Control Register = %x\n", pcipriv->linkctrl_reg);
131332
131333 pci_read_config_byte(pdev, 0x98, &tmp);
131334 tmp |= BIT(4);
131335 @@ -978,7 +974,7 @@ static void rtw_pci_parse_configuration(struct pci_dev *pdev, _adapter *padapter
131336 //
131337 static void rtw_pci_update_default_setting(_adapter *padapter)
131338 {
131339 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131340 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131341 struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131342 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
131343
131344 @@ -986,8 +982,8 @@ static void rtw_pci_update_default_setting(_adapter *padapter)
131345 pwrpriv->reg_rfps_level = 0;
131346 pwrpriv->b_support_aspm = 0;
131347
131348 - // Dynamic Mechanism,
131349 - //pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_INIT_GAIN, &(pDevice->InitGainState));
131350 + // Dynamic Mechanism,
131351 + //rtw_hal_set_def_var(pAdapter, HAL_DEF_INIT_GAIN, &(pDevice->InitGainState));
131352
131353 // Update PCI ASPM setting
131354 pwrpriv->const_amdpci_aspm = pdvobjpriv->const_amdpci_aspm;
131355 @@ -1056,7 +1052,7 @@ static void rtw_pci_update_default_setting(_adapter *padapter)
131356 pwrpriv->b_support_aspm = b_support_aspm;
131357
131358 /*if(pAdapter->MgntInfo.CustomerID == RT_CID_TOSHIBA &&
131359 - pcipriv->pcibridge_vendor == PCI_BRIDGE_VENDOR_AMD &&
131360 + pcipriv->pcibridge_vendor == PCI_BRIDGE_VENDOR_AMD &&
131361 !pcipriv->amd_l1_patch)
131362 b_support_backdoor = _FALSE;*/
131363
131364 @@ -1065,7 +1061,7 @@ static void rtw_pci_update_default_setting(_adapter *padapter)
131365 break;
131366
131367 case 2: // Set by Chipset.
131368 - // ASPM value set by chipset.
131369 + // ASPM value set by chipset.
131370 if (pcipriv->pcibridge_vendor == PCI_BRIDGE_VENDOR_INTEL) {
131371 u8 b_support_aspm = _TRUE;
131372 pwrpriv->b_support_aspm = b_support_aspm;
131373 @@ -1098,32 +1094,119 @@ static void rtw_pci_initialize_adapter_common(_adapter *padapter)
131374
131375 static irqreturn_t rtw_pci_interrupt(int irq, void *priv, struct pt_regs *regs)
131376 {
131377 - _adapter *padapter = (_adapter *)priv;
131378 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131379 + struct dvobj_priv *dvobj = (struct dvobj_priv *)priv;
131380 + _adapter *adapter = dvobj->if1;
131381
131382 -
131383 - if (pdvobjpriv->irq_enabled == 0) {
131384 + if (dvobj->irq_enabled == 0) {
131385 return IRQ_HANDLED;
131386 }
131387
131388 - if(padapter->HalFunc.interrupt_handler(padapter) == _FAIL)
131389 + if(rtw_hal_interrupt_handler(adapter) == _FAIL)
131390 return IRQ_HANDLED;
131391 //return IRQ_NONE;
131392
131393 return IRQ_HANDLED;
131394 }
131395
131396 -static u32 pci_dvobj_init(_adapter *padapter)
131397 +#ifdef RTK_DMP_PLATFORM
131398 +#define pci_iounmap(x,y) iounmap(y)
131399 +#endif
131400 +
131401 +int pci_alloc_irq(struct dvobj_priv *dvobj)
131402 {
131403 - u32 status = _SUCCESS;
131404 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
131405 - struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
131406 - struct pci_dev *pdev = pdvobjpriv->ppcidev;
131407 - struct pci_dev *bridge_pdev = pdev->bus->self;
131408 + int err;
131409 + struct pci_dev *pdev = dvobj->ppcidev;
131410 +
131411 +#if defined(IRQF_SHARED)
131412 + err = request_irq(pdev->irq, &rtw_pci_interrupt, IRQF_SHARED, DRV_NAME, dvobj);
131413 +#else
131414 + err = request_irq(pdev->irq, &rtw_pci_interrupt, SA_SHIRQ, DRV_NAME, dvobj);
131415 +#endif
131416 + if (err) {
131417 + DBG_871X("Error allocating IRQ %d",pdev->irq);
131418 + } else {
131419 + dvobj->irq_alloc = 1;
131420 + DBG_871X("Request_irq OK, IRQ %d\n",pdev->irq);
131421 + }
131422 +
131423 + return err?_FAIL:_SUCCESS;
131424 +}
131425 +
131426 +static struct dvobj_priv *pci_dvobj_init(struct pci_dev *pdev)
131427 +{
131428 + int err;
131429 + u32 status = _FAIL;
131430 + struct dvobj_priv *dvobj = NULL;
131431 + struct pci_priv *pcipriv = NULL;
131432 + struct pci_dev *bridge_pdev = pdev->bus->self;
131433 + unsigned long pmem_start, pmem_len, pmem_flags;
131434 u8 tmp;
131435
131436 _func_enter_;
131437
131438 + if ((dvobj = devobj_init()) == NULL) {
131439 + goto exit;
131440 + }
131441 + dvobj->ppcidev = pdev;
131442 + pcipriv = &(dvobj->pcipriv);
131443 + pci_set_drvdata(pdev, dvobj);
131444 +
131445 + if ( (err = pci_enable_device(pdev)) != 0) {
131446 + DBG_871X(KERN_ERR "%s : Cannot enable new PCI device\n", pci_name(pdev));
131447 + goto free_dvobj;
131448 + }
131449 +
131450 +#ifdef CONFIG_64BIT_DMA
131451 + if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
131452 + DBG_871X("RTL819xCE: Using 64bit DMA\n");
131453 + if ((err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) != 0) {
131454 + DBG_871X(KERN_ERR "Unable to obtain 64bit DMA for consistent allocations\n");
131455 + goto disable_picdev;
131456 + }
131457 + dvobj->bdma64 = _TRUE;
131458 + } else
131459 +#endif
131460 + {
131461 + if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
131462 + if ((err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) != 0) {
131463 + DBG_871X(KERN_ERR "Unable to obtain 32bit DMA for consistent allocations\n");
131464 + goto disable_picdev;
131465 + }
131466 + }
131467 + }
131468 +
131469 + pci_set_master(pdev);
131470 +
131471 + if ((err = pci_request_regions(pdev, DRV_NAME)) != 0) {
131472 + DBG_871X(KERN_ERR "Can't obtain PCI resources\n");
131473 + goto disable_picdev;
131474 + }
131475 + //MEM map
131476 + pmem_start = pci_resource_start(pdev, 2);
131477 + pmem_len = pci_resource_len(pdev, 2);
131478 + pmem_flags = pci_resource_flags(pdev, 2);
131479 +
131480 +#ifdef RTK_DMP_PLATFORM
131481 + dvobj->pci_mem_start = (unsigned long)ioremap_nocache(pmem_start, pmem_len);
131482 +#else
131483 + dvobj->pci_mem_start = (unsigned long)pci_iomap(pdev, 2, pmem_len); /* shared mem start */
131484 +#endif
131485 + if (dvobj->pci_mem_start == 0) {
131486 + DBG_871X(KERN_ERR "Can't map PCI mem\n");
131487 + goto release_regions;
131488 + }
131489 +
131490 + DBG_871X("Memory mapped space start: 0x%08lx len:%08lx flags:%08lx, after map:0x%08lx\n",
131491 + pmem_start, pmem_len, pmem_flags, dvobj->pci_mem_start);
131492 +
131493 + // Disable Clk Request */
131494 + pci_write_config_byte(pdev, 0x81, 0);
131495 + // leave D3 mode */
131496 + pci_write_config_byte(pdev, 0x44, 0);
131497 + pci_write_config_byte(pdev, 0x04, 0x06);
131498 + pci_write_config_byte(pdev, 0x04, 0x07);
131499 +
131500 +
131501 #if 1
131502 /*find bus info*/
131503 pcipriv->busnumber = pdev->bus->number;
131504 @@ -1137,7 +1220,7 @@ _func_enter_;
131505 for (tmp = 0; tmp < PCI_BRIDGE_VENDOR_MAX; tmp++) {
131506 if (bridge_pdev->vendor == pcibridge_vendors[tmp]) {
131507 pcipriv->pcibridge_vendor = tmp;
131508 - DBG_8192C("Pci Bridge Vendor is found index: %d, %x\n", tmp, pcibridge_vendors[tmp]);
131509 + DBG_871X("Pci Bridge Vendor is found index: %d, %x\n", tmp, pcibridge_vendors[tmp]);
131510 break;
131511 }
131512 }
131513 @@ -1155,15 +1238,15 @@ _func_enter_;
131514 pcipriv->pcibridge_pciehdr_offset = bridge_pdev->pcie_cap;
131515 #endif
131516
131517 - rtw_pci_get_linkcontrol_field(padapter);
131518 -
131519 + rtw_pci_get_linkcontrol_field(dvobj);
131520 +
131521 if (pcipriv->pcibridge_vendor == PCI_BRIDGE_VENDOR_AMD) {
131522 - pcipriv->amd_l1_patch = rtw_pci_get_amd_l1_patch(padapter);
131523 + pcipriv->amd_l1_patch = rtw_pci_get_amd_l1_patch(dvobj);
131524 }
131525 }
131526 #else
131527 //
131528 - // Find bridge related info.
131529 + // Find bridge related info.
131530 //
131531 rtw_get_pci_bus_info(padapter,
131532 pdev->vendor,
131533 @@ -1195,9 +1278,9 @@ _func_enter_;
131534 //
131535 // Allow the hardware to look at PCI config information.
131536 //
131537 - rtw_pci_parse_configuration(pdev, padapter);
131538 + rtw_pci_parse_configuration(dvobj);
131539
131540 - DBG_8192C("pcidev busnumber:devnumber:funcnumber:"
131541 + DBG_871X("pcidev busnumber:devnumber:funcnumber:"
131542 "vendor:link_ctl %d:%d:%d:%x:%x\n",
131543 pcipriv->busnumber,
131544 pcipriv->devnumber,
131545 @@ -1205,8 +1288,8 @@ _func_enter_;
131546 pdev->vendor,
131547 pcipriv->linkctrl_reg);
131548
131549 - DBG_8192C("pci_bridge busnumber:devnumber:funcnumber:vendor:"
131550 - "pcie_cap:link_ctl_reg: %d:%d:%d:%x:%x:%x:%x\n",
131551 + DBG_871X("pci_bridge busnumber:devnumber:funcnumber:vendor:"
131552 + "pcie_cap:link_ctl_reg: %d:%d:%d:%x:%x:%x:%x\n",
131553 pcipriv->pcibridge_busnum,
131554 pcipriv->pcibridge_devnum,
131555 pcipriv->pcibridge_funcnum,
131556 @@ -1215,38 +1298,61 @@ _func_enter_;
131557 pcipriv->pcibridge_linkctrlreg,
131558 pcipriv->amd_l1_patch);
131559
131560 - //.2
131561 - if ((rtw_init_io_priv(padapter)) == _FAIL)
131562 - {
131563 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
131564 - status = _FAIL;
131565 - }
131566 -
131567 - //.3
131568 - intf_read_chip_version(padapter);
131569 - //.4
131570 - intf_chip_configure(padapter);
131571 + status = _SUCCESS;
131572
131573 +iounmap:
131574 + if (status != _SUCCESS && dvobj->pci_mem_start != 0) {
131575 + pci_iounmap(pdev, (void *)dvobj->pci_mem_start);
131576 + dvobj->pci_mem_start = 0;
131577 + }
131578 +release_regions:
131579 + if (status != _SUCCESS)
131580 + pci_release_regions(pdev);
131581 +disable_picdev:
131582 + if (status != _SUCCESS)
131583 + pci_disable_device(pdev);
131584 +free_dvobj:
131585 + if (status != _SUCCESS && dvobj) {
131586 + pci_set_drvdata(pdev, NULL);
131587 + devobj_deinit(dvobj);
131588 + dvobj = NULL;
131589 + }
131590 +exit:
131591 _func_exit_;
131592 -
131593 - return status;
131594 + return dvobj;
131595 }
131596
131597 -static void pci_dvobj_deinit(_adapter * padapter)
131598 +static void pci_dvobj_deinit(struct pci_dev *pdev)
131599 {
131600 - //struct dvobj_priv *pdvobjpriv=&padapter->dvobjpriv;
131601 -
131602 + struct dvobj_priv *dvobj = pci_get_drvdata(pdev);
131603 _func_enter_;
131604
131605 + pci_set_drvdata(pdev, NULL);
131606 + if (dvobj) {
131607 + if (dvobj->irq_alloc) {
131608 + free_irq(pdev->irq, dvobj);
131609 + dvobj->irq_alloc = 0;
131610 + }
131611 +
131612 + if (dvobj->pci_mem_start != 0) {
131613 + pci_iounmap(pdev, (void *)dvobj->pci_mem_start);
131614 + dvobj->pci_mem_start = 0;
131615 + }
131616 +
131617 + devobj_deinit(dvobj);
131618 + }
131619 +
131620 + pci_release_regions(pdev);
131621 + pci_disable_device(pdev);
131622 +
131623 _func_exit_;
131624 }
131625
131626 -
131627 static void decide_chip_type_by_pci_device_id(_adapter *padapter, struct pci_dev *pdev)
131628 {
131629 u16 venderid, deviceid, irqline;
131630 u8 revisionid;
131631 - struct dvobj_priv *pdvobjpriv=&padapter->dvobjpriv;
131632 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
131633
131634
131635 venderid = pdev->vendor;
131636 @@ -1261,13 +1367,13 @@ static void decide_chip_type_by_pci_device_id(_adapter *padapter, struct pci_dev
131637
131638
131639 //
131640 - // Decide hardware type here.
131641 + // Decide hardware type here.
131642 //
131643 if( deviceid == HAL_HW_PCI_8185_DEVICE_ID ||
131644 deviceid == HAL_HW_PCI_8188_DEVICE_ID ||
131645 deviceid == HAL_HW_PCI_8198_DEVICE_ID)
131646 {
131647 - DBG_8192C("Adapter (8185/8185B) is found- VendorID/DeviceID=%x/%x\n", venderid, deviceid);
131648 + DBG_871X("Adapter (8185/8185B) is found- VendorID/DeviceID=%x/%x\n", venderid, deviceid);
131649 padapter->HardwareType=HARDWARE_TYPE_RTL8185;
131650 }
131651 else if (deviceid == HAL_HW_PCI_8190_DEVICE_ID ||
131652 @@ -1275,7 +1381,7 @@ static void decide_chip_type_by_pci_device_id(_adapter *padapter, struct pci_dev
131653 deviceid == HAL_HW_PCI_0046_DEVICE_ID ||
131654 deviceid == HAL_HW_PCI_DLINK_DEVICE_ID)
131655 {
131656 - DBG_8192C("Adapter(8190 PCI) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
131657 + DBG_871X("Adapter(8190 PCI) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
131658 padapter->HardwareType = HARDWARE_TYPE_RTL8190P;
131659 }
131660 else if (deviceid == HAL_HW_PCI_8192_DEVICE_ID ||
131661 @@ -1292,19 +1398,19 @@ static void decide_chip_type_by_pci_device_id(_adapter *padapter, struct pci_dev
131662 // Added for 92DE. We deferentiate it from SVID,SDID.
131663 if( pdev->subsystem_vendor == 0x10EC && pdev->subsystem_device == 0xE020){
131664 padapter->HardwareType = HARDWARE_TYPE_RTL8192DE;
131665 - DBG_8192C("Adapter(8192DE) is found - VendorID/DeviceID/RID=%X/%X/%X\n", venderid, deviceid, revisionid);
131666 + DBG_871X("Adapter(8192DE) is found - VendorID/DeviceID/RID=%X/%X/%X\n", venderid, deviceid, revisionid);
131667 }else{
131668 switch (revisionid) {
131669 case HAL_HW_PCI_REVISION_ID_8192PCIE:
131670 - DBG_8192C("Adapter(8192 PCI-E) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
131671 + DBG_871X("Adapter(8192 PCI-E) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
131672 padapter->HardwareType = HARDWARE_TYPE_RTL8192E;
131673 break;
131674 case HAL_HW_PCI_REVISION_ID_8192SE:
131675 - DBG_8192C("Adapter(8192SE) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
131676 + DBG_871X("Adapter(8192SE) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
131677 padapter->HardwareType = HARDWARE_TYPE_RTL8192SE;
131678 break;
131679 default:
131680 - DBG_8192C("Err: Unknown device - vendorid/deviceid=%x/%x\n", venderid, deviceid);
131681 + DBG_871X("Err: Unknown device - vendorid/deviceid=%x/%x\n", venderid, deviceid);
131682 padapter->HardwareType = HARDWARE_TYPE_RTL8192SE;
131683 break;
131684 }
131685 @@ -1312,25 +1418,25 @@ static void decide_chip_type_by_pci_device_id(_adapter *padapter, struct pci_dev
131686 }
131687 else if(deviceid==HAL_HW_PCI_8723E_DEVICE_ID )
131688 {//RTL8723E may have the same device ID with RTL8192CET
131689 - padapter->HardwareType = HARDWARE_TYPE_RTL8723E;
131690 - DBG_8192C("Adapter(8723 PCI-E) is found - VendorID/DeviceID=%x/%x\n", venderid, deviceid);
131691 + padapter->HardwareType = HARDWARE_TYPE_RTL8723AE;
131692 + DBG_871X("Adapter(8723 PCI-E) is found - VendorID/DeviceID=%x/%x\n", venderid, deviceid);
131693 }
131694 else if (deviceid == HAL_HW_PCI_8192CET_DEVICE_ID ||
131695 deviceid == HAL_HW_PCI_8192CE_DEVICE_ID ||
131696 deviceid == HAL_HW_PCI_8191CE_DEVICE_ID ||
131697 - deviceid == HAL_HW_PCI_8188CE_DEVICE_ID)
131698 + deviceid == HAL_HW_PCI_8188CE_DEVICE_ID)
131699 {
131700 - DBG_8192C("Adapter(8192C PCI-E) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
131701 + DBG_871X("Adapter(8192C PCI-E) is found - vendorid/deviceid=%x/%x\n", venderid, deviceid);
131702 padapter->HardwareType = HARDWARE_TYPE_RTL8192CE;
131703 }
131704 else if (deviceid == HAL_HW_PCI_8192DE_DEVICE_ID ||
131705 deviceid == HAL_HW_PCI_002B_DEVICE_ID ){
131706 padapter->HardwareType = HARDWARE_TYPE_RTL8192DE;
131707 - DBG_8192C("Adapter(8192DE) is found - VendorID/DeviceID/RID=%X/%X/%X\n", venderid, deviceid, revisionid);
131708 + DBG_871X("Adapter(8192DE) is found - VendorID/DeviceID/RID=%X/%X/%X\n", venderid, deviceid, revisionid);
131709 }
131710 else
131711 {
131712 - DBG_8192C("Err: Unknown device - vendorid/deviceid=%x/%x\n", venderid, deviceid);
131713 + DBG_871X("Err: Unknown device - vendorid/deviceid=%x/%x\n", venderid, deviceid);
131714 //padapter->HardwareType = HAL_DEFAULT_HARDWARE_TYPE;
131715 }
131716
131717 @@ -1355,13 +1461,16 @@ static void pci_intf_start(_adapter *padapter)
131718 {
131719
131720 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+pci_intf_start\n"));
131721 - DBG_8192C("+pci_intf_start\n");
131722 + DBG_871X("+pci_intf_start\n");
131723
131724 +#ifdef CONFIG_PCILED_BLINK
131725 + rtw_led_control(padapter, LED_CTL_NO_LINK);
131726 +#endif
131727 //Enable hw interrupt
131728 - padapter->HalFunc.enable_interrupt(padapter);
131729 + rtw_hal_enable_interrupt(padapter);
131730
131731 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-pci_intf_start\n"));
131732 - DBG_8192C("-pci_intf_start\n");
131733 + DBG_871X("-pci_intf_start\n");
131734 }
131735
131736 static void pci_intf_stop(_adapter *padapter)
131737 @@ -1373,13 +1482,27 @@ static void pci_intf_stop(_adapter *padapter)
131738 if(padapter->bSurpriseRemoved == _FALSE)
131739 {
131740 //device still exists, so driver can do i/o operation
131741 - padapter->HalFunc.disable_interrupt(padapter);
131742 + rtw_hal_disable_interrupt(padapter);
131743 + tasklet_disable(&(padapter->recvpriv.recv_tasklet));
131744 + tasklet_disable(&(padapter->recvpriv.irq_prepare_beacon_tasklet));
131745 + tasklet_disable(&(padapter->xmitpriv.xmit_tasklet));
131746 +
131747 +#ifdef CONFIG_CONCURRENT_MODE
131748 + /* This function only be called at driver removing. disable buddy_adapter too
131749 + don't disable interrupt of buddy_adapter because it is same as primary.
131750 + */
131751 + if (padapter->pbuddy_adapter){
131752 + tasklet_disable(&(padapter->pbuddy_adapter->recvpriv.recv_tasklet));
131753 + tasklet_disable(&(padapter->pbuddy_adapter->recvpriv.irq_prepare_beacon_tasklet));
131754 + tasklet_disable(&(padapter->pbuddy_adapter->xmitpriv.xmit_tasklet));
131755 + }
131756 +#endif
131757 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("pci_intf_stop: SurpriseRemoved==_FALSE\n"));
131758 }
131759 else
131760 {
131761 // Clear irq_enabled to prevent handle interrupt function.
131762 - padapter->dvobjpriv.irq_enabled = 0;
131763 + adapter_to_dvobj(padapter)->irq_enabled = 0;
131764 }
131765
131766 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-pci_intf_stop\n"));
131767 @@ -1395,25 +1518,13 @@ static void rtw_dev_unload(_adapter *padapter)
131768
131769 if(padapter->bup == _TRUE)
131770 {
131771 - DBG_8192C("+rtw_dev_unload\n");
131772 - //s1.
131773 -/* if(pnetdev)
131774 - {
131775 - netif_carrier_off(pnetdev);
131776 - netif_stop_queue(pnetdev);
131777 - }
131778 -
131779 - //s2.
131780 - //s2-1. issue rtw_disassoc_cmd to fw
131781 - rtw_disassoc_cmd(padapter);
131782 - //s2-2. indicate disconnect to os
131783 - rtw_indicate_disconnect(padapter);
131784 - //s2-3.
131785 - rtw_free_assoc_resources(padapter, 1);
131786 - //s2-4.
131787 - rtw_free_network_queue(padapter, _TRUE);*/
131788 + DBG_871X("+rtw_dev_unload\n");
131789
131790 padapter->bDriverStopped = _TRUE;
131791 + #ifdef CONFIG_XMIT_ACK
131792 + if (padapter->xmitpriv.ack_tx)
131793 + rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_DRV_STOP);
131794 + #endif
131795
131796 //s3.
131797 if(padapter->intf_stop)
131798 @@ -1428,7 +1539,7 @@ static void rtw_dev_unload(_adapter *padapter)
131799 //s5.
131800 if(padapter->bSurpriseRemoved == _FALSE)
131801 {
131802 - DBG_8192C("r871x_dev_unload()->rtl871x_hal_deinit()\n");
131803 + DBG_871X("r871x_dev_unload()->rtl871x_hal_deinit()\n");
131804 rtw_hal_deinit(padapter);
131805
131806 padapter->bSurpriseRemoved = _TRUE;
131807 @@ -1442,7 +1553,7 @@ static void rtw_dev_unload(_adapter *padapter)
131808 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("r871x_dev_unload():padapter->bup == _FALSE\n" ));
131809 }
131810
131811 - DBG_8192C("-rtw_dev_unload\n");
131812 + DBG_871X("-rtw_dev_unload\n");
131813
131814 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-rtw_dev_unload\n"));
131815
131816 @@ -1475,7 +1586,7 @@ static void disable_ht_for_spec_devid(const struct pci_device_id *pdid)
131817
131818 #ifdef CONFIG_PM
131819 static int rtw_suspend(struct pci_dev *pdev, pm_message_t state)
131820 -{
131821 +{
131822 _func_enter_;
131823
131824
131825 @@ -1489,270 +1600,291 @@ static int rtw_resume(struct pci_dev *pdev)
131826
131827
131828 _func_exit_;
131829 -
131830 +
131831 return 0;
131832 }
131833 #endif
131834
131835 -#ifdef RTK_DMP_PLATFORM
131836 -#define pci_iounmap(x,y) iounmap(y)
131837 -#endif
131838 -
131839 -extern char* ifname;
131840 -
131841 -/*
131842 - * drv_init() - a device potentially for us
131843 - *
131844 - * notes: drv_init() is called when the bus driver has located a card for us to support.
131845 - * We accept the new device by returning 0.
131846 -*/
131847 -static int rtw_drv_init(struct pci_dev *pdev, const struct pci_device_id *pdid)
131848 +_adapter *rtw_pci_if1_init(struct dvobj_priv * dvobj, struct pci_dev *pdev,
131849 + const struct pci_device_id *pdid)
131850 {
131851 - int i, err = -ENODEV;
131852 -
131853 - uint status;
131854 _adapter *padapter = NULL;
131855 - struct dvobj_priv *pdvobjpriv;
131856 - struct net_device *pnetdev;
131857 - unsigned long pmem_start, pmem_len, pmem_flags;
131858 - u8 bdma64 = _FALSE;
131859 + struct net_device *pnetdev = NULL;
131860 + int status = _FAIL;
131861
131862 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_init\n"));
131863 - //DBG_8192C("+rtw_drv_init\n");
131864 -
131865 - err = pci_enable_device(pdev);
131866 - if (err) {
131867 - DBG_8192C(KERN_ERR "%s : Cannot enable new PCI device\n", pci_name(pdev));
131868 - return err;
131869 + if ((padapter = (_adapter *)rtw_zvmalloc(sizeof(*padapter))) == NULL) {
131870 + goto exit;
131871 }
131872 + padapter->dvobj = dvobj;
131873 + dvobj->if1 = padapter;
131874
131875 -#ifdef CONFIG_64BIT_DMA
131876 - if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
131877 - DBG_8192C("RTL819xCE: Using 64bit DMA\n");
131878 - if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) {
131879 - DBG_8192C(KERN_ERR "Unable to obtain 64bit DMA for consistent allocations\n");
131880 - err = -ENOMEM;
131881 - pci_disable_device(pdev);
131882 - return err;
131883 - }
131884 - bdma64 = _TRUE;
131885 - } else
131886 -#endif
131887 - {
131888 - if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
131889 - if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32))) {
131890 - DBG_8192C(KERN_ERR "Unable to obtain 32bit DMA for consistent allocations\n");
131891 - err = -ENOMEM;
131892 - pci_disable_device(pdev);
131893 - return err;
131894 - }
131895 - }
131896 - }
131897 + padapter->bDriverStopped=_TRUE;
131898
131899 - pci_set_master(pdev);
131900 + dvobj->padapters[dvobj->iface_nums++] = padapter;
131901 + padapter->iface_id = IFACE_ID0;
131902
131903 - //step 0.
131904 - disable_ht_for_spec_devid(pdid);
131905 +#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT)
131906 + //set adapter_type/iface type for primary padapter
131907 + padapter->isprimary = _TRUE;
131908 + padapter->adapter_type = PRIMARY_ADAPTER;
131909 + #ifndef CONFIG_HWPORT_SWAP
131910 + padapter->iface_type = IFACE_PORT0;
131911 + #else
131912 + padapter->iface_type = IFACE_PORT1;
131913 + #endif
131914 +#endif
131915
131916 + //step 1-1., decide the chip_type via vid/pid
131917 + padapter->interface_type = RTW_PCIE;
131918 + decide_chip_type_by_pci_device_id(padapter, pdev);
131919
131920 - //step 1. set USB interface data
131921 - // init data
131922 - pnetdev = rtw_init_netdev(NULL);
131923 - if (!pnetdev){
131924 - err = -ENOMEM;
131925 - goto fail1;
131926 + if((pnetdev = rtw_init_netdev(padapter)) == NULL) {
131927 + goto free_adapter;
131928 }
131929 - rtw_init_netdev_name(pnetdev,ifname);
131930 -
131931 - if(bdma64){
131932 + if (dvobj->bdma64)
131933 pnetdev->features |= NETIF_F_HIGHDMA;
131934 - }
131935 -
131936 -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
131937 - SET_NETDEV_DEV(pnetdev, &pdev->dev);
131938 -#endif
131939 -
131940 + pnetdev->irq = pdev->irq;
131941 + SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj));
131942 padapter = rtw_netdev_priv(pnetdev);
131943 - pdvobjpriv = &padapter->dvobjpriv;
131944 - pdvobjpriv->padapter = padapter;
131945 - pdvobjpriv->ppcidev = pdev;
131946 -
131947 - // set data
131948 - pci_set_drvdata(pdev, pnetdev);
131949 -
131950 - err = pci_request_regions(pdev, DRV_NAME);
131951 - if (err) {
131952 - DBG_8192C(KERN_ERR "Can't obtain PCI resources\n");
131953 - goto fail1;
131954 - }
131955 - //MEM map
131956 - pmem_start = pci_resource_start(pdev, 2);
131957 - pmem_len = pci_resource_len(pdev, 2);
131958 - pmem_flags = pci_resource_flags(pdev, 2);
131959 -
131960 -#ifdef RTK_DMP_PLATFORM
131961 - pdvobjpriv->pci_mem_start = (unsigned long)ioremap_nocache( pmem_start, pmem_len);
131962 -#else
131963 - pdvobjpriv->pci_mem_start = (unsigned long)pci_iomap(pdev, 2, pmem_len); // shared mem start
131964 -#endif
131965 - if (pdvobjpriv->pci_mem_start == 0) {
131966 - DBG_8192C(KERN_ERR "Can't map PCI mem\n");
131967 - goto fail2;
131968 - }
131969 -
131970 - DBG_8192C("Memory mapped space start: 0x%08lx len:%08lx flags:%08lx, after map:0x%08lx\n",
131971 - pmem_start, pmem_len, pmem_flags, pdvobjpriv->pci_mem_start);
131972 -
131973 - // Disable Clk Request */
131974 - pci_write_config_byte(pdev, 0x81, 0);
131975 - // leave D3 mode */
131976 - pci_write_config_byte(pdev, 0x44, 0);
131977 - pci_write_config_byte(pdev, 0x04, 0x06);
131978 - pci_write_config_byte(pdev, 0x04, 0x07);
131979 -
131980 -
131981 - //set interface_type to usb
131982 - padapter->interface_type = RTW_PCIE;
131983
131984 - //step 1-1., decide the chip_type via vid/pid
131985 - decide_chip_type_by_pci_device_id(padapter, pdev);
131986 -
131987 - //step 2.
131988 - if(padapter->chip_type== RTL8188C_8192C)
131989 - {
131990 -#ifdef CONFIG_RTL8192C
131991 + //step 2. hook HalFunc, allocate HalData
131992 + if (padapter->chip_type == RTL8188C_8192C) {
131993 + #ifdef CONFIG_RTL8192C
131994 rtl8192ce_set_hal_ops(padapter);
131995 -#endif
131996 - }
131997 - else if(padapter->chip_type == RTL8192D)
131998 - {
131999 -#ifdef CONFIG_RTL8192D
132000 + #endif
132001 + } else if (padapter->chip_type == RTL8192D) {
132002 + #ifdef CONFIG_RTL8192D
132003 rtl8192de_set_hal_ops(padapter);
132004 -#endif
132005 - }
132006 - else
132007 - {
132008 - status = _FAIL;
132009 - goto error;
132010 + #endif
132011 + } else {
132012 + DBG_871X("Detect NULL_CHIP_TYPE\n");
132013 + goto free_hal_data;
132014 }
132015
132016 - //step 3. initialize the dvobj_priv
132017 - padapter->dvobj_init=&pci_dvobj_init;
132018 - padapter->dvobj_deinit=&pci_dvobj_deinit;
132019 + //step 3. initialize the dvobj_priv
132020 padapter->intf_start=&pci_intf_start;
132021 padapter->intf_stop=&pci_intf_stop;
132022
132023 - if (padapter->dvobj_init == NULL){
132024 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("\n Initialize dvobjpriv.dvobj_init error!!!\n"));
132025 - goto error;
132026 - }
132027
132028 - status = padapter->dvobj_init(padapter);
132029 - if (status != _SUCCESS) {
132030 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("initialize device object priv Failed!\n"));
132031 - goto error;
132032 + //.2
132033 + if ((rtw_init_io_priv(padapter, pci_set_intf_ops)) == _FAIL) {
132034 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
132035 + goto free_hal_data;
132036 }
132037
132038 - pnetdev->irq = pdev->irq;
132039 + //.3
132040 + rtw_hal_read_chip_version(padapter);
132041 +
132042 + //.4
132043 + rtw_hal_chip_configure(padapter);
132044
132045 //step 4. read efuse/eeprom data and get mac_addr
132046 - intf_read_chip_info(padapter);
132047 + rtw_hal_read_chip_info(padapter);
132048
132049 - //step 5.
132050 - status = rtw_init_drv_sw(padapter);
132051 - if(status ==_FAIL){
132052 + if (rtw_handle_dualmac(padapter, 1) != _SUCCESS)
132053 + goto free_hal_data;
132054 +
132055 +#ifdef CONFIG_IOCTL_CFG80211
132056 + if(rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj)) != 0) {
132057 + goto handle_dualmac;
132058 + }
132059 +#endif
132060 +
132061 + //step 5.
132062 + if (rtw_init_drv_sw(padapter) == _FAIL) {
132063 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize driver software resource Failed!\n"));
132064 - goto error;
132065 + goto free_wdev;
132066 }
132067
132068 - status = padapter->HalFunc.inirp_init(padapter);
132069 + status = rtw_hal_inirp_init(padapter);
132070 if(status ==_FAIL){
132071 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize PCI desc ring Failed!\n"));
132072 - goto error;
132073 + goto free_drv_sw;
132074 }
132075
132076 rtw_macaddr_cfg(padapter->eeprompriv.mac_addr);
132077 + rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
132078
132079 - _rtw_memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
132080 - DBG_8192C("MAC Address from pnetdev->dev_addr= "MAC_FMT"\n", MAC_ARG(pnetdev->dev_addr));
132081
132082 -
132083 - padapter->HalFunc.disable_interrupt(padapter);
132084 -
132085 -#if defined(IRQF_SHARED)
132086 - err = request_irq(pdev->irq, &rtw_pci_interrupt, IRQF_SHARED, DRV_NAME, padapter);
132087 -#else
132088 - err = request_irq(pdev->irq, &rtw_pci_interrupt, SA_SHIRQ, DRV_NAME, padapter);
132089 -#endif
132090 - if (err) {
132091 - DBG_8192C("Error allocating IRQ %d",pdev->irq);
132092 - goto error;
132093 - } else {
132094 - pdvobjpriv->irq_alloc = 1;
132095 - DBG_8192C("Request_irq OK, IRQ %d\n",pdev->irq);
132096 - }
132097 + rtw_hal_disable_interrupt(padapter);
132098
132099 //step 6. Init pci related configuration
132100 rtw_pci_initialize_adapter_common(padapter);
132101
132102 - //step 7.
132103 - /* Tell the network stack we exist */
132104 - if (register_netdev(pnetdev) != 0) {
132105 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("register_netdev() failed\n"));
132106 - goto error;
132107 - }
132108 + DBG_871X("bDriverStopped:%d, bSurpriseRemoved:%d, bup:%d, hw_init_completed:%d\n"
132109 + ,padapter->bDriverStopped
132110 + ,padapter->bSurpriseRemoved
132111 + ,padapter->bup
132112 + ,padapter->hw_init_completed
132113 + );
132114 +
132115 + status = _SUCCESS;
132116 +
132117 +inirp_deinit:
132118 + if (status != _SUCCESS)
132119 + rtw_hal_inirp_deinit(padapter);
132120 +free_drv_sw:
132121 + if (status != _SUCCESS)
132122 + rtw_free_drv_sw(padapter);
132123 +free_wdev:
132124 + if (status != _SUCCESS) {
132125 + #ifdef CONFIG_IOCTL_CFG80211
132126 + rtw_wdev_unregister(padapter->rtw_wdev);
132127 + rtw_wdev_free(padapter->rtw_wdev);
132128 + #endif
132129 + }
132130 +handle_dualmac:
132131 + if (status != _SUCCESS)
132132 + rtw_handle_dualmac(padapter, 0);
132133 +free_hal_data:
132134 + if (status != _SUCCESS && padapter->HalData)
132135 + rtw_mfree(padapter->HalData, sizeof(*(padapter->HalData)));
132136 +free_adapter:
132137 + if (status != _SUCCESS) {
132138 + if (pnetdev)
132139 + rtw_free_netdev(pnetdev);
132140 + else if (padapter)
132141 + rtw_vmfree((u8*)padapter, sizeof(*padapter));
132142 + padapter = NULL;
132143 + }
132144 +exit:
132145 + return padapter;
132146 +}
132147
132148 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-drv_init - Adapter->bDriverStopped=%d, Adapter->bSurpriseRemoved=%d\n",padapter->bDriverStopped, padapter->bSurpriseRemoved));
132149 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_drv - drv_init, success!\n"));
132150 - //DBG_8192C("-871x_drv - drv_init, success!\n");
132151 +static void rtw_pci_if1_deinit(_adapter *if1)
132152 +{
132153 + struct net_device *pnetdev = if1->pnetdev;
132154 + struct mlme_priv *pmlmepriv= &if1->mlmepriv;
132155
132156 -#ifdef CONFIG_PROC_DEBUG
132157 -#ifdef RTK_DMP_PLATFORM
132158 - rtw_proc_init_one(pnetdev);
132159 -#endif
132160 -#endif
132161 + // padapter->intf_stop(padapter);
132162
132163 -#ifdef CONFIG_HOSTAPD_MLME
132164 - hostapd_mode_init(padapter);
132165 + if(check_fwstate(pmlmepriv, _FW_LINKED))
132166 + rtw_disassoc_cmd(if1, 0, _FALSE);
132167 +
132168 +#ifdef CONFIG_AP_MODE
132169 + free_mlme_ap_info(if1);
132170 + #ifdef CONFIG_HOSTAPD_MLME
132171 + hostapd_mode_unload(if1);
132172 + #endif
132173 #endif
132174
132175 + rtw_cancel_all_timer(if1);
132176 +#ifdef CONFIG_WOWLAN
132177 + if1->pwrctrlpriv.wowlan_mode=_FALSE;
132178 +#endif //CONFIG_WOWLAN
132179 + rtw_dev_unload(if1);
132180 +
132181 + DBG_871X("%s, hw_init_completed=%d\n", __func__, if1->hw_init_completed);
132182 +
132183 + //s6.
132184 + rtw_handle_dualmac(if1, 0);
132185 +
132186 +#ifdef CONFIG_IOCTL_CFG80211
132187 + if (if1->rtw_wdev)
132188 + rtw_wdev_free(if1->rtw_wdev);
132189 +#endif //CONFIG_IOCTL_CFG80211
132190 +
132191 + rtw_hal_inirp_deinit(if1);
132192 + rtw_free_drv_sw(if1);
132193 +
132194 + if(pnetdev)
132195 + rtw_free_netdev(pnetdev);
132196 +
132197 #ifdef CONFIG_PLATFORM_RTD2880B
132198 - DBG_8192C("wlan link up\n");
132199 - rtd2885_wlan_netlink_sendMsg("linkup", "8712");
132200 + DBG_871X("wlan link down\n");
132201 + rtd2885_wlan_netlink_sendMsg("linkdown", "8712");
132202 #endif
132203 +}
132204
132205 - return 0;
132206 +/*
132207 + * drv_init() - a device potentially for us
132208 + *
132209 + * notes: drv_init() is called when the bus driver has located a card for us to support.
132210 + * We accept the new device by returning 0.
132211 +*/
132212 +static int rtw_drv_init(struct pci_dev *pdev, const struct pci_device_id *did)
132213 +{
132214 + int i, err = -ENODEV;
132215
132216 -error:
132217 + int status;
132218 + _adapter *if1 = NULL, *if2 = NULL;
132219 + struct dvobj_priv *dvobj;
132220
132221 - pci_set_drvdata(pdev, NULL);
132222 + RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_init\n"));
132223 +
132224 + //step 0.
132225 + disable_ht_for_spec_devid(did);
132226 +
132227 + /* Initialize dvobj_priv */
132228 + if ((dvobj = pci_dvobj_init(pdev)) == NULL) {
132229 + RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("initialize device object priv Failed!\n"));
132230 + goto exit;
132231 + }
132232
132233 - if (pdvobjpriv->irq_alloc) {
132234 - free_irq(pdev->irq, padapter);
132235 - pdvobjpriv->irq_alloc = 0;
132236 + /* Initialize if1 */
132237 + if ((if1 = rtw_pci_if1_init(dvobj, pdev, did)) == NULL) {
132238 + DBG_871X("rtw_pci_if1_init Failed!\n");
132239 + goto free_dvobj;
132240 }
132241
132242 - if (pdvobjpriv->pci_mem_start != 0) {
132243 - pci_iounmap(pdev, (void *)pdvobjpriv->pci_mem_start);
132244 + /* Initialize if2 */
132245 +#ifdef CONFIG_CONCURRENT_MODE
132246 + if((if2 = rtw_drv_if2_init(if1, pci_set_intf_ops)) == NULL) {
132247 + goto free_if1;
132248 }
132249 +#endif
132250
132251 - pci_dvobj_deinit(padapter);
132252 +#ifdef CONFIG_GLOBAL_UI_PID
132253 + if (ui_pid[1]!=0) {
132254 + DBG_871X("ui_pid[1]:%d\n",ui_pid[1]);
132255 + rtw_signal_process(ui_pid[1], SIGUSR2);
132256 + }
132257 +#endif
132258
132259 - if (pnetdev)
132260 - {
132261 - //unregister_netdev(pnetdev);
132262 - rtw_free_netdev(pnetdev);
132263 + //dev_alloc_name && register_netdev
132264 + if((status = rtw_drv_register_netdev(if1)) != _SUCCESS) {
132265 + goto free_if1;
132266 }
132267
132268 -fail2:
132269 - pci_release_regions(pdev);
132270 +#ifdef CONFIG_HOSTAPD_MLME
132271 + hostapd_mode_init(if1);
132272 +#endif
132273
132274 -fail1:
132275 - pci_disable_device(pdev);
132276 +#ifdef CONFIG_PLATFORM_RTD2880B
132277 + DBG_871X("wlan link up\n");
132278 + rtd2885_wlan_netlink_sendMsg("linkup", "8712");
132279 +#endif
132280 +
132281 +#ifdef RTK_DMP_PLATFORM
132282 + rtw_proc_init_one(if1->pnetdev);
132283 +#endif
132284
132285 - DBG_8192C("-871x_pci - drv_init, fail!\n");
132286
132287 - return err;
132288 + /* alloc irq */
132289 + if (pci_alloc_irq(dvobj) != _SUCCESS)
132290 + goto free_if2;
132291 +
132292 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_drv - drv_init, success!\n"));
132293 + //DBG_871X("-871x_drv - drv_init, success!\n");
132294 +
132295 + status = _SUCCESS;
132296 +
132297 +free_if2:
132298 + if(status != _SUCCESS && if2) {
132299 + #ifdef CONFIG_CONCURRENT_MODE
132300 + rtw_drv_if2_stop(if2);
132301 + rtw_drv_if2_free(if2);
132302 + #endif
132303 + }
132304 +free_if1:
132305 + if (status != _SUCCESS && if1) {
132306 + rtw_pci_if1_deinit(if1);
132307 + }
132308 +free_dvobj:
132309 + if (status != _SUCCESS)
132310 + pci_dvobj_deinit(pdev);
132311 +exit:
132312 + return status == _SUCCESS?0:-ENODEV;
132313 }
132314
132315 /*
132316 @@ -1761,100 +1893,67 @@ fail1:
132317 //rmmod module & unplug(SurpriseRemoved) will call r871xu_dev_remove() => how to recognize both
132318 static void rtw_dev_remove(struct pci_dev *pdev)
132319 {
132320 - struct net_device *pnetdev=pci_get_drvdata(pdev);
132321 - _adapter *padapter = (_adapter*)rtw_netdev_priv(pnetdev);
132322 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
132323 + struct dvobj_priv *pdvobjpriv = pci_get_drvdata(pdev);
132324 + _adapter *padapter = pdvobjpriv->if1;
132325 + struct net_device *pnetdev = padapter->pnetdev;
132326
132327 _func_exit_;
132328
132329 + DBG_871X("+rtw_dev_remove\n");
132330 +
132331 + pdvobjpriv->processing_dev_remove = _TRUE;
132332 +
132333 if (unlikely(!padapter)) {
132334 return;
132335 }
132336
132337 - DBG_8192C("+rtw_dev_remove\n");
132338 + rtw_unregister_netdevs(pdvobjpriv);
132339
132340 -#if defined(CONFIG_HAS_EARLYSUSPEND ) || defined(CONFIG_ANDROID_POWER)
132341 - rtw_unregister_early_suspend(&padapter->pwrctrlpriv);
132342 -#endif
132343 -
132344 - LeaveAllPowerSaveMode(padapter);
132345 -
132346 -#ifdef RTK_DMP_PLATFORM
132347 + #if 0
132348 +#ifdef RTK_DMP_PLATFORM
132349 padapter->bSurpriseRemoved = _FALSE; // always trate as device exists
132350 - // this will let the driver to disable it's interrupt
132351 -#else
132352 - if(drvpriv.drv_registered == _TRUE)
132353 + // this will let the driver to disable it's interrupt
132354 +#else
132355 + if(pci_drvpriv.drv_registered == _TRUE)
132356 {
132357 - //DBG_8192C("r871xu_dev_remove():padapter->bSurpriseRemoved == _TRUE\n");
132358 + //DBG_871X("r871xu_dev_remove():padapter->bSurpriseRemoved == _TRUE\n");
132359 padapter->bSurpriseRemoved = _TRUE;
132360 }
132361 /*else
132362 {
132363 - //DBG_8192C("r871xu_dev_remove():module removed\n");
132364 + //DBG_871X("r871xu_dev_remove():module removed\n");
132365 padapter->hw_init_completed = _FALSE;
132366 }*/
132367 #endif
132368 + #endif
132369
132370 -
132371 -#ifdef CONFIG_AP_MODE
132372 - free_mlme_ap_info(padapter);
132373 -#ifdef CONFIG_HOSTAPD_MLME
132374 - hostapd_mode_unload(padapter);
132375 -#endif //CONFIG_HOSTAPD_MLME
132376 -#endif //CONFIG_AP_MODE
132377 -
132378 - if(pnetdev){
132379 - unregister_netdev(pnetdev); //will call netdev_close()
132380 -#ifdef CONFIG_PROC_DEBUG
132381 - rtw_proc_remove_one(pnetdev);
132382 +#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
132383 + rtw_unregister_early_suspend(&padapter->pwrctrlpriv);
132384 #endif
132385 - }
132386 -
132387 - rtw_cancel_all_timer(padapter);
132388
132389 - rtw_dev_unload(padapter);
132390 + rtw_pm_set_ips(padapter, IPS_NONE);
132391 + rtw_pm_set_lps(padapter, PS_MODE_ACTIVE);
132392
132393 - DBG_8192C("+r871xu_dev_remove, hw_init_completed=%d\n", padapter->hw_init_completed);
132394 -
132395 - if (pdvobjpriv->irq_alloc) {
132396 - free_irq(pdev->irq, padapter);
132397 - pdvobjpriv->irq_alloc = 0;
132398 - }
132399 + LeaveAllPowerSaveMode(padapter);
132400
132401 - if (pdvobjpriv->pci_mem_start != 0) {
132402 - pci_iounmap(pdev, (void *)pdvobjpriv->pci_mem_start);
132403 - pci_release_regions(pdev);
132404 - }
132405 + rtw_hal_disable_interrupt(padapter);
132406
132407 - pci_disable_device(pdev);
132408 - pci_set_drvdata(pdev, NULL);
132409 +#ifdef CONFIG_CONCURRENT_MODE
132410 + rtw_drv_if2_stop(pdvobjpriv->if2);
132411 +#endif //CONFIG_CONCURRENT_MODE
132412
132413 - padapter->HalFunc.inirp_deinit(padapter);
132414 - //s6.
132415 - if(padapter->dvobj_deinit)
132416 - {
132417 - padapter->dvobj_deinit(padapter);
132418 - }
132419 - else
132420 - {
132421 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize hcipriv.hci_priv_init error!!!\n"));
132422 - }
132423 -
132424 - rtw_free_drv_sw(padapter);
132425 + rtw_pci_if1_deinit(padapter);
132426
132427 - //after rtw_free_drv_sw(), padapter has beed freed, don't refer to it.
132428 +#ifdef CONFIG_CONCURRENT_MODE
132429 + rtw_drv_if2_free(pdvobjpriv->if2);
132430 +#endif
132431
132432 - DBG_8192C("-r871xu_dev_remove, done\n");
132433 + pci_dvobj_deinit(pdev);
132434
132435 -#ifdef CONFIG_PLATFORM_RTD2880B
132436 - DBG_8192C("wlan link down\n");
132437 - rtd2885_wlan_netlink_sendMsg("linkdown", "8712");
132438 -#endif
132439 + DBG_871X("-r871xu_dev_remove, done\n");
132440
132441 _func_exit_;
132442 -
132443 return;
132444 -
132445 }
132446
132447
132448 @@ -1863,10 +1962,13 @@ static int __init rtw_drv_entry(void)
132449 int ret = 0;
132450
132451 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_entry\n"));
132452 - DBG_871X("rtw driver version=%s \n", DRIVERVERSION);
132453 + DBG_871X("rtw driver version=%s\n", DRIVERVERSION);
132454 DBG_871X("Build at: %s %s\n", __DATE__, __TIME__);
132455 - drvpriv.drv_registered = _TRUE;
132456 - ret = pci_register_driver(&drvpriv.rtw_pci_drv);
132457 + pci_drvpriv.drv_registered = _TRUE;
132458 +
132459 + rtw_suspend_lock_init();
132460 +
132461 + ret = pci_register_driver(&pci_drvpriv.rtw_pci_drv);
132462 if (ret) {
132463 RT_TRACE(_module_hci_intfs_c_, _drv_err_, (": No device found\n"));
132464 }
132465 @@ -1877,10 +1979,16 @@ static int __init rtw_drv_entry(void)
132466 static void __exit rtw_drv_halt(void)
132467 {
132468 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_halt\n"));
132469 - DBG_8192C("+rtw_drv_halt\n");
132470 - drvpriv.drv_registered = _FALSE;
132471 - pci_unregister_driver(&drvpriv.rtw_pci_drv);
132472 - DBG_8192C("-rtw_drv_halt\n");
132473 + DBG_871X("+rtw_drv_halt\n");
132474 +
132475 + pci_drvpriv.drv_registered = _FALSE;
132476 +
132477 + pci_unregister_driver(&pci_drvpriv.rtw_pci_drv);
132478 +
132479 + rtw_suspend_lock_uninit();
132480 + DBG_871X("-rtw_drv_halt\n");
132481 +
132482 + rtw_mstat_dump();
132483 }
132484
132485
132486 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c
132487 new file mode 100644
132488 index 0000000..7d671df
132489 --- /dev/null
132490 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c
132491 @@ -0,0 +1,24 @@
132492 +/******************************************************************************
132493 + *
132494 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
132495 + *
132496 + * This program is free software; you can redistribute it and/or modify it
132497 + * under the terms of version 2 of the GNU General Public License as
132498 + * published by the Free Software Foundation.
132499 + *
132500 + * This program is distributed in the hope that it will be useful, but WITHOUT
132501 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
132502 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
132503 + * more details.
132504 + *
132505 + * You should have received a copy of the GNU General Public License along with
132506 + * this program; if not, write to the Free Software Foundation, Inc.,
132507 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
132508 + *
132509 + *******************************************************************************/
132510 +#define _PCI_OPS_LINUX_C_
132511 +
132512 +#include <drv_types.h>
132513 +
132514 +
132515 +
132516 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c
132517 index 4a76c3f..9c92019 100644
132518 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c
132519 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c
132520 @@ -1,7 +1,7 @@
132521 /******************************************************************************
132522 *
132523 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
132524 - *
132525 + *
132526 * This program is free software; you can redistribute it and/or modify it
132527 * under the terms of version 2 of the GNU General Public License as
132528 * published by the Free Software Foundation.
132529 @@ -35,7 +35,7 @@
132530
132531 //init os related resource in struct recv_priv
132532 int rtw_os_recv_resource_init(struct recv_priv *precvpriv, _adapter *padapter)
132533 -{
132534 +{
132535 int res=_SUCCESS;
132536
132537 return res;
132538 @@ -43,7 +43,7 @@ int rtw_os_recv_resource_init(struct recv_priv *precvpriv, _adapter *padapter)
132539
132540 //alloc os related resource in union recv_frame
132541 int rtw_os_recv_resource_alloc(_adapter *padapter, union recv_frame *precvframe)
132542 -{
132543 +{
132544 int res=_SUCCESS;
132545
132546 precvframe->u.hdr.pkt_newalloc = precvframe->u.hdr.pkt = NULL;
132547 @@ -64,8 +64,8 @@ int rtw_os_recvbuf_resource_alloc(_adapter *padapter, struct recv_buf *precvbuf)
132548 {
132549 int res=_SUCCESS;
132550
132551 -#ifdef CONFIG_USB_HCI
132552 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
132553 +#ifdef CONFIG_USB_HCI
132554 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
132555 struct usb_device *pusbd = pdvobjpriv->pusbdev;
132556
132557 precvbuf->irp_pending = _FALSE;
132558 @@ -85,9 +85,9 @@ int rtw_os_recvbuf_resource_alloc(_adapter *padapter, struct recv_buf *precvbuf)
132559 precvbuf->transfer_len = 0;
132560
132561 precvbuf->len = 0;
132562 -
132563 +
132564 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
132565 - precvbuf->pallocated_buf = rtw_usb_buffer_alloc(pusbd, (size_t)precvbuf->alloc_sz, GFP_ATOMIC, &precvbuf->dma_transfer_addr);
132566 + precvbuf->pallocated_buf = rtw_usb_buffer_alloc(pusbd, (size_t)precvbuf->alloc_sz, &precvbuf->dma_transfer_addr);
132567 precvbuf->pbuf = precvbuf->pallocated_buf;
132568 if(precvbuf->pallocated_buf == NULL)
132569 return _FAIL;
132570 @@ -95,18 +95,7 @@ int rtw_os_recvbuf_resource_alloc(_adapter *padapter, struct recv_buf *precvbuf)
132571
132572 #endif //CONFIG_USB_HCI
132573
132574 -
132575 -#ifdef CONFIG_SDIO_HCI
132576 - precvbuf->pskb = NULL;
132577 -
132578 - precvbuf->pallocated_buf = precvbuf->pbuf = NULL;
132579 -
132580 - precvbuf->pdata = precvbuf->phead = precvbuf->ptail = precvbuf->pend = NULL;
132581 -
132582 - precvbuf->len = 0;
132583 -#endif
132584 return res;
132585 -
132586 }
132587
132588 //free os related resource in struct recv_buf
132589 @@ -118,7 +107,7 @@ int rtw_os_recvbuf_resource_free(_adapter *padapter, struct recv_buf *precvbuf)
132590
132591 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
132592
132593 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
132594 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
132595 struct usb_device *pusbd = pdvobjpriv->pusbdev;
132596
132597 rtw_usb_buffer_free(pusbd, (size_t)precvbuf->alloc_sz, precvbuf->pallocated_buf, precvbuf->dma_transfer_addr);
132598 @@ -132,13 +121,13 @@ int rtw_os_recvbuf_resource_free(_adapter *padapter, struct recv_buf *precvbuf)
132599 //usb_kill_urb(precvbuf->purb);
132600 usb_free_urb(precvbuf->purb);
132601 }
132602 -
132603 +
132604 #endif //CONFIG_USB_HCI
132605
132606
132607 if(precvbuf->pskb)
132608 - dev_kfree_skb_any(precvbuf->pskb);
132609 -
132610 + rtw_skb_free(precvbuf->pskb);
132611 +
132612
132613 return ret;
132614
132615 @@ -151,10 +140,10 @@ void rtw_handle_tkip_mic_err(_adapter *padapter,u8 bgroup)
132616 #endif
132617 union iwreq_data wrqu;
132618 struct iw_michaelmicfailure ev;
132619 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
132620 - struct security_priv *psecuritypriv = &padapter->securitypriv;
132621 + struct mlme_priv* pmlmepriv = &padapter->mlmepriv;
132622 + struct security_priv *psecuritypriv = &padapter->securitypriv;
132623 u32 cur_time = 0;
132624 -
132625 +
132626 if( psecuritypriv->last_mic_err_time == 0 )
132627 {
132628 psecuritypriv->last_mic_err_time = rtw_get_current_time();
132629 @@ -192,11 +181,11 @@ void rtw_handle_tkip_mic_err(_adapter *padapter,u8 bgroup)
132630 _rtw_memset( &ev, 0x00, sizeof( ev ) );
132631 if ( bgroup )
132632 {
132633 - ev.flags |= IW_MICFAILURE_GROUP;
132634 + ev.flags |= IW_MICFAILURE_GROUP;
132635 }
132636 else
132637 {
132638 - ev.flags |= IW_MICFAILURE_PAIRWISE;
132639 + ev.flags |= IW_MICFAILURE_PAIRWISE;
132640 }
132641
132642 ev.src_addr.sa_family = ARPHRD_ETHER;
132643 @@ -210,47 +199,47 @@ void rtw_handle_tkip_mic_err(_adapter *padapter,u8 bgroup)
132644
132645 void rtw_hostapd_mlme_rx(_adapter *padapter, union recv_frame *precv_frame)
132646 {
132647 -#ifdef CONFIG_HOSTAPD_MLME
132648 +#ifdef CONFIG_HOSTAPD_MLME
132649 _pkt *skb;
132650 struct hostapd_priv *phostapdpriv = padapter->phostapdpriv;
132651 struct net_device *pmgnt_netdev = phostapdpriv->pmgnt_netdev;
132652 -
132653 +
132654 RT_TRACE(_module_recv_osdep_c_, _drv_info_, ("+rtw_hostapd_mlme_rx\n"));
132655 -
132656 - skb = precv_frame->u.hdr.pkt;
132657 -
132658 - if (skb == NULL)
132659 +
132660 + skb = precv_frame->u.hdr.pkt;
132661 +
132662 + if (skb == NULL)
132663 return;
132664 -
132665 +
132666 skb->data = precv_frame->u.hdr.rx_data;
132667 - skb->tail = precv_frame->u.hdr.rx_tail;
132668 + skb->tail = precv_frame->u.hdr.rx_tail;
132669 skb->len = precv_frame->u.hdr.len;
132670
132671 - //pskb_copy = skb_copy(skb, GFP_ATOMIC);
132672 + //pskb_copy = rtw_skb_copy(skb);
132673 // if(skb == NULL) goto _exit;
132674
132675 skb->dev = pmgnt_netdev;
132676 - skb->ip_summed = CHECKSUM_NONE;
132677 + skb->ip_summed = CHECKSUM_NONE;
132678 skb->pkt_type = PACKET_OTHERHOST;
132679 //skb->protocol = __constant_htons(0x0019); /*ETH_P_80211_RAW*/
132680 skb->protocol = __constant_htons(0x0003); /*ETH_P_80211_RAW*/
132681 -
132682 - //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);
132683 +
132684 + //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);
132685
132686 //skb->mac.raw = skb->data;
132687 skb_reset_mac_header(skb);
132688
132689 //skb_pull(skb, 24);
132690 - _rtw_memset(skb->cb, 0, sizeof(skb->cb));
132691 + _rtw_memset(skb->cb, 0, sizeof(skb->cb));
132692
132693 - netif_rx(skb);
132694 + rtw_netif_rx(pmgnt_netdev, skb);
132695
132696 - precv_frame->u.hdr.pkt = NULL; // set pointer to NULL before rtw_free_recvframe() if call netif_rx()
132697 -#endif
132698 + precv_frame->u.hdr.pkt = NULL; // set pointer to NULL before rtw_free_recvframe() if call rtw_netif_rx()
132699 +#endif
132700 }
132701
132702 int rtw_recv_indicatepkt(_adapter *padapter, union recv_frame *precv_frame)
132703 -{
132704 +{
132705 struct recv_priv *precvpriv;
132706 _queue *pfree_recv_queue;
132707 _pkt *skb;
132708 @@ -265,20 +254,20 @@ int rtw_recv_indicatepkt(_adapter *padapter, union recv_frame *precv_frame)
132709
132710 _func_enter_;
132711
132712 - precvpriv = &(padapter->recvpriv);
132713 - pfree_recv_queue = &(precvpriv->free_recv_queue);
132714 + precvpriv = &(padapter->recvpriv);
132715 + pfree_recv_queue = &(precvpriv->free_recv_queue);
132716
132717 -#ifdef CONFIG_DRVEXT_MODULE
132718 +#ifdef CONFIG_DRVEXT_MODULE
132719 if (drvext_rx_handler(padapter, precv_frame->u.hdr.rx_data, precv_frame->u.hdr.len) == _SUCCESS)
132720 - {
132721 + {
132722 goto _recv_indicatepkt_drop;
132723 }
132724 #endif
132725
132726 - skb = precv_frame->u.hdr.pkt;
132727 + skb = precv_frame->u.hdr.pkt;
132728 if(skb == NULL)
132729 - {
132730 - RT_TRACE(_module_recv_osdep_c_,_drv_err_,("rtw_recv_indicatepkt():skb==NULL something wrong!!!!\n"));
132731 + {
132732 + RT_TRACE(_module_recv_osdep_c_,_drv_err_,("rtw_recv_indicatepkt():skb==NULL something wrong!!!!\n"));
132733 goto _recv_indicatepkt_drop;
132734 }
132735
132736 @@ -288,17 +277,13 @@ _func_enter_;
132737
132738 skb->data = precv_frame->u.hdr.rx_data;
132739
132740 -#ifdef NET_SKBUFF_DATA_USES_OFFSET
132741 skb_set_tail_pointer(skb, precv_frame->u.hdr.len);
132742 -#else
132743 - skb->tail = precv_frame->u.hdr.rx_tail;
132744 -#endif
132745
132746 skb->len = precv_frame->u.hdr.len;
132747
132748 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));
132749
132750 - if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
132751 + if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
132752 {
132753 _pkt *pskb2=NULL;
132754 struct sta_info *psta = NULL;
132755 @@ -315,21 +300,25 @@ _func_enter_;
132756 if(bmcast)
132757 {
132758 psta = rtw_get_bcmc_stainfo(padapter);
132759 - pskb2 = skb_clone(skb, GFP_ATOMIC);
132760 + pskb2 = rtw_skb_clone(skb);
132761 } else {
132762 psta = rtw_get_stainfo(pstapriv, pattrib->dst);
132763 }
132764
132765 if(psta)
132766 {
132767 + struct net_device *pnetdev= (struct net_device*)padapter->pnetdev;
132768 +
132769 //DBG_871X("directly forwarding to the rtw_xmit_entry\n");
132770
132771 //skb->ip_summed = CHECKSUM_NONE;
132772 - //skb->protocol = eth_type_trans(skb, pnetdev);
132773 -
132774 - skb->dev = padapter->pnetdev;
132775 - rtw_xmit_entry(skb, padapter->pnetdev);
132776 -
132777 + skb->dev = pnetdev;
132778 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
132779 + skb_set_queue_mapping(skb, rtw_recv_select_queue(skb));
132780 +#endif //LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35)
132781 +
132782 + _rtw_xmit_entry(skb, pnetdev);
132783 +
132784 if(bmcast)
132785 skb = pskb2;
132786 else
132787 @@ -355,7 +344,7 @@ _func_enter_;
132788 rcu_read_unlock();
132789 #endif // (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 35))
132790
132791 - if( br_port && (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE) )
132792 + if( br_port && (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) == _TRUE) )
132793 {
132794 int nat25_handle_frame(_adapter *priv, struct sk_buff *skb);
132795 if (nat25_handle_frame(padapter, skb) == -1) {
132796 @@ -376,10 +365,10 @@ _func_enter_;
132797 #ifdef CONFIG_TCP_CSUM_OFFLOAD_RX
132798 if ( (pattrib->tcpchk_valid == 1) && (pattrib->tcp_chkrpt == 1) ) {
132799 skb->ip_summed = CHECKSUM_UNNECESSARY;
132800 - //DBG_8192C("CHECKSUM_UNNECESSARY \n");
132801 + //DBG_871X("CHECKSUM_UNNECESSARY \n");
132802 } else {
132803 skb->ip_summed = CHECKSUM_NONE;
132804 - //DBG_8192C("CHECKSUM_NONE(%d, %d) \n", pattrib->tcpchk_valid, pattrib->tcp_chkrpt);
132805 + //DBG_871X("CHECKSUM_NONE(%d, %d) \n", pattrib->tcpchk_valid, pattrib->tcp_chkrpt);
132806 }
132807 #else /* !CONFIG_TCP_CSUM_OFFLOAD_RX */
132808
132809 @@ -390,7 +379,7 @@ _func_enter_;
132810 skb->dev = padapter->pnetdev;
132811 skb->protocol = eth_type_trans(skb, padapter->pnetdev);
132812
132813 - netif_rx(skb);
132814 + rtw_netif_rx(padapter->pnetdev, skb);
132815
132816 _recv_indicatepkt_end:
132817
132818 @@ -398,21 +387,18 @@ _recv_indicatepkt_end:
132819
132820 rtw_free_recvframe(precv_frame, pfree_recv_queue);
132821
132822 - RT_TRACE(_module_recv_osdep_c_,_drv_info_,("\n rtw_recv_indicatepkt :after netif_rx!!!!\n"));
132823 + RT_TRACE(_module_recv_osdep_c_,_drv_info_,("\n rtw_recv_indicatepkt :after rtw_netif_rx!!!!\n"));
132824
132825 -_func_exit_;
132826 +_func_exit_;
132827
132828 - return _SUCCESS;
132829 + return _SUCCESS;
132830
132831 _recv_indicatepkt_drop:
132832
132833 - //enqueue back to free_recv_queue
132834 + //enqueue back to free_recv_queue
132835 if(precv_frame)
132836 rtw_free_recvframe(precv_frame, pfree_recv_queue);
132837
132838 -
132839 - precvpriv->rx_drop++;
132840 -
132841 return _FAIL;
132842
132843 _func_exit_;
132844 @@ -420,7 +406,7 @@ _func_exit_;
132845 }
132846
132847 void rtw_os_read_port(_adapter *padapter, struct recv_buf *precvbuf)
132848 -{
132849 +{
132850 struct recv_priv *precvpriv = &padapter->recvpriv;
132851
132852 #ifdef CONFIG_USB_HCI
132853 @@ -428,7 +414,7 @@ void rtw_os_read_port(_adapter *padapter, struct recv_buf *precvbuf)
132854 precvbuf->ref_cnt--;
132855
132856 //free skb in recv_buf
132857 - dev_kfree_skb_any(precvbuf->pskb);
132858 + rtw_skb_free(precvbuf->pskb);
132859
132860 precvbuf->pskb = NULL;
132861 precvbuf->reuse = _FALSE;
132862 @@ -436,8 +422,8 @@ void rtw_os_read_port(_adapter *padapter, struct recv_buf *precvbuf)
132863 if(precvbuf->irp_pending == _FALSE)
132864 {
132865 rtw_read_port(padapter, precvpriv->ff_hwaddr, 0, (unsigned char *)precvbuf);
132866 - }
132867 -
132868 + }
132869 +
132870
132871 #endif
132872 #ifdef CONFIG_SDIO_HCI
132873 @@ -457,6 +443,6 @@ void rtw_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl)
132874 _adapter *padapter = preorder_ctrl->padapter;
132875
132876 _init_timer(&(preorder_ctrl->reordering_ctrl_timer), padapter->pnetdev, _rtw_reordering_ctrl_timeout_handler, preorder_ctrl);
132877 -
132878 +
132879 }
132880
132881 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c
132882 index aceaaa7..a4bb073 100644
132883 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c
132884 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c
132885 @@ -27,15 +27,14 @@
132886 #include <ioctl_cfg80211.h>
132887 #include <rtw_ioctl_set.h>
132888
132889 -
132890 -#if defined(CONFIG_WIFI_CONTROL_FUNC) && 0
132891 +#if defined(RTW_ENABLE_WIFI_CONTROL_FUNC)
132892 #include <linux/platform_device.h>
132893 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35))
132894 #include <linux/wlan_plat.h>
132895 #else
132896 #include <linux/wifi_tiwlan.h>
132897 #endif
132898 -#endif /* CONFIG_WIFI_CONTROL_FUNC */
132899 +#endif /* defined(RTW_ENABLE_WIFI_CONTROL_FUNC) */
132900
132901 const char *android_wifi_cmd_str[ANDROID_WIFI_CMD_MAX] = {
132902 "START",
132903 @@ -71,7 +70,11 @@ const char *android_wifi_cmd_str[ANDROID_WIFI_CMD_MAX] = {
132904 "MACADDR",
132905
132906 "BLOCK",
132907 -
132908 + "WFD-ENABLE",
132909 + "WFD-DISABLE",
132910 + "WFD-SET-TCPPORT",
132911 + "WFD-SET-MAXTPUT",
132912 + "WFD-SET-DEVTYPE",
132913 };
132914
132915 #ifdef PNO_SUPPORT
132916 @@ -93,12 +96,17 @@ typedef struct cmd_tlv {
132917 #endif /* PNO_SUPPORT */
132918
132919 typedef struct android_wifi_priv_cmd {
132920 +
132921 +#ifdef CONFIG_COMPAT
132922 + compat_uptr_t buf;
132923 +#else
132924 char *buf;
132925 +#endif
132926 +
132927 int used_len;
132928 int total_len;
132929 } android_wifi_priv_cmd;
132930
132931 -
132932 /**
132933 * Local (static) functions and variables
132934 */
132935 @@ -147,7 +155,7 @@ static int wl_android_set_pno_setup(struct net_device *dev, char *command, int t
132936 DHD_INFO(("%s: command=%s, len=%d\n", __FUNCTION__, command, total_len));
132937
132938 if (total_len < (strlen(CMD_PNOSETUP_SET) + sizeof(cmd_tlv_t))) {
132939 - DHD_ERROR(("%s argument=%d less min size\n", __FUNCTION__, total_len));
132940 + DBG_871X("%s argument=%d less min size\n", __FUNCTION__, total_len);
132941 goto exit_proc;
132942 }
132943
132944 @@ -174,12 +182,12 @@ static int wl_android_set_pno_setup(struct net_device *dev, char *command, int t
132945
132946 if ((nssid = wl_iw_parse_ssid_list_tlv(&str_ptr, ssids_local,
132947 MAX_PFN_LIST_COUNT, &tlv_size_left)) <= 0) {
132948 - DHD_ERROR(("SSID is not presented or corrupted ret=%d\n", nssid));
132949 + DBG_871X("SSID is not presented or corrupted ret=%d\n", nssid);
132950 goto exit_proc;
132951 } else {
132952 if ((str_ptr[0] != PNO_TLV_TYPE_TIME) || (tlv_size_left <= 1)) {
132953 - DHD_ERROR(("%s scan duration corrupted field size %d\n",
132954 - __FUNCTION__, tlv_size_left));
132955 + DBG_871X("%s scan duration corrupted field size %d\n",
132956 + __FUNCTION__, tlv_size_left);
132957 goto exit_proc;
132958 }
132959 str_ptr++;
132960 @@ -188,16 +196,16 @@ static int wl_android_set_pno_setup(struct net_device *dev, char *command, int t
132961
132962 if (str_ptr[0] != 0) {
132963 if ((str_ptr[0] != PNO_TLV_FREQ_REPEAT)) {
132964 - DHD_ERROR(("%s pno repeat : corrupted field\n",
132965 - __FUNCTION__));
132966 + DBG_871X("%s pno repeat : corrupted field\n",
132967 + __FUNCTION__);
132968 goto exit_proc;
132969 }
132970 str_ptr++;
132971 pno_repeat = simple_strtoul(str_ptr, &str_ptr, 16);
132972 DHD_INFO(("%s :got pno_repeat=%d\n", __FUNCTION__, pno_repeat));
132973 if (str_ptr[0] != PNO_TLV_FREQ_EXPO_MAX) {
132974 - DHD_ERROR(("%s FREQ_EXPO_MAX corrupted field size\n",
132975 - __FUNCTION__));
132976 + DBG_871X("%s FREQ_EXPO_MAX corrupted field size\n",
132977 + __FUNCTION__);
132978 goto exit_proc;
132979 }
132980 str_ptr++;
132981 @@ -207,7 +215,7 @@ static int wl_android_set_pno_setup(struct net_device *dev, char *command, int t
132982 }
132983 }
132984 } else {
132985 - DHD_ERROR(("%s get wrong TLV command\n", __FUNCTION__));
132986 + DBG_871X("%s get wrong TLV command\n", __FUNCTION__);
132987 goto exit_proc;
132988 }
132989
132990 @@ -251,7 +259,7 @@ int rtw_android_get_link_speed(struct net_device *net, char *command, int total_
132991 int bytes_written = 0;
132992 u16 link_speed = 0;
132993
132994 - link_speed = rtw_get_network_max_rate(padapter, &pcur_network->network);
132995 + link_speed = rtw_get_cur_max_rate(padapter)/10;
132996 bytes_written = snprintf(command, total_len, "LinkSpeed %d", link_speed);
132997
132998 return bytes_written;
132999 @@ -270,7 +278,7 @@ int rtw_android_set_country(struct net_device *net, char *command, int total_len
133000 {
133001 _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
133002 char *country_code = command + strlen(android_wifi_cmd_str[ANDROID_WIFI_CMD_COUNTRY]) + 1;
133003 - int ret;
133004 + int ret = _FAIL;
133005
133006 ret = rtw_set_country(adapter, country_code);
133007
133008 @@ -279,7 +287,6 @@ int rtw_android_set_country(struct net_device *net, char *command, int total_len
133009
133010 int rtw_android_get_p2p_dev_addr(struct net_device *net, char *command, int total_len)
133011 {
133012 - int ret;
133013 int bytes_written = 0;
133014
133015 //We use the same address as our HW MAC address
133016 @@ -291,7 +298,6 @@ int rtw_android_get_p2p_dev_addr(struct net_device *net, char *command, int tota
133017
133018 int rtw_android_set_block(struct net_device *net, char *command, int total_len)
133019 {
133020 - int ret;
133021 _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
133022 char *block_value = command + strlen(android_wifi_cmd_str[ANDROID_WIFI_CMD_BLOCK]) + 1;
133023
133024 @@ -302,6 +308,45 @@ int rtw_android_set_block(struct net_device *net, char *command, int total_len)
133025 return 0;
133026 }
133027
133028 +int rtw_android_setband(struct net_device *net, char *command, int total_len)
133029 +{
133030 + _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
133031 + char *arg = command + strlen(android_wifi_cmd_str[ANDROID_WIFI_CMD_SETBAND]) + 1;
133032 + u32 band = GHZ_MAX;
133033 + int ret = _FAIL;
133034 +
133035 + sscanf(arg, "%u", &band);
133036 + ret = rtw_set_band(adapter, band);
133037 +
133038 + return (ret==_SUCCESS)?0:-1;
133039 +}
133040 +
133041 +int rtw_android_getband(struct net_device *net, char *command, int total_len)
133042 +{
133043 + _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
133044 + int bytes_written = 0;
133045 +
133046 + bytes_written = snprintf(command, total_len, "%u", adapter->setband);
133047 +
133048 + return bytes_written;
133049 +}
133050 +
133051 +int get_int_from_command( char* pcmd )
133052 +{
133053 + int i = 0;
133054 +
133055 + for( i = 0; i < strlen( pcmd ); i++ )
133056 + {
133057 + if ( pcmd[ i ] == '=' )
133058 + {
133059 + // Skip the '=' and space characters.
133060 + i += 2;
133061 + break;
133062 + }
133063 + }
133064 + return ( rtw_atoi( pcmd + i ) );
133065 +}
133066 +
133067 int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
133068 {
133069 int ret = 0;
133070 @@ -320,14 +365,21 @@ int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
133071 ret = -EFAULT;
133072 goto exit;
133073 }
133074 - command = kmalloc(priv_cmd.total_len, GFP_KERNEL);
133075 +
133076 + command = rtw_zmalloc(priv_cmd.total_len);
133077 if (!command)
133078 {
133079 DBG_871X("%s: failed to allocate memory\n", __FUNCTION__);
133080 ret = -ENOMEM;
133081 goto exit;
133082 }
133083 - if (copy_from_user(command, priv_cmd.buf, priv_cmd.total_len)) {
133084 +
133085 + if (!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)){
133086 + DBG_871X("%s: failed to access memory\n", __FUNCTION__);
133087 + ret = -EFAULT;
133088 + goto exit;
133089 + }
133090 + if (copy_from_user(command, (void *)priv_cmd.buf, priv_cmd.total_len)) {
133091 ret = -EFAULT;
133092 goto exit;
133093 }
133094 @@ -359,10 +411,15 @@ int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
133095 break;
133096
133097 case ANDROID_WIFI_CMD_SCAN_ACTIVE:
133098 - rtw_set_scan_mode((_adapter *)rtw_netdev_priv(net), SCAN_ACTIVE);
133099 + //rtw_set_scan_mode((_adapter *)rtw_netdev_priv(net), SCAN_ACTIVE);
133100 +#ifdef CONFIG_PLATFORM_MSTAR
133101 +#ifdef CONFIG_IOCTL_CFG80211
133102 + (wdev_to_priv(net->ieee80211_ptr))->bandroid_scan = _TRUE;
133103 +#endif //CONFIG_IOCTL_CFG80211
133104 +#endif //CONFIG_PLATFORM_MSTAR
133105 break;
133106 case ANDROID_WIFI_CMD_SCAN_PASSIVE:
133107 - rtw_set_scan_mode((_adapter *)rtw_netdev_priv(net), SCAN_PASSIVE);
133108 + //rtw_set_scan_mode((_adapter *)rtw_netdev_priv(net), SCAN_PASSIVE);
133109 break;
133110
133111 case ANDROID_WIFI_CMD_RSSI:
133112 @@ -419,11 +476,11 @@ int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
133113 break;
133114
133115 case ANDROID_WIFI_CMD_SETBAND:
133116 - //uint band = *(command + strlen(CMD_SETBAND) + 1) - '0';
133117 - //bytes_written = wldev_set_band(net, band);
133118 + bytes_written = rtw_android_setband(net, command, priv_cmd.total_len);
133119 break;
133120 +
133121 case ANDROID_WIFI_CMD_GETBAND:
133122 - //bytes_written = wl_android_get_band(net, command, priv_cmd.total_len);
133123 + bytes_written = rtw_android_getband(net, command, priv_cmd.total_len);
133124 break;
133125
133126 case ANDROID_WIFI_CMD_COUNTRY:
133127 @@ -467,6 +524,74 @@ int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
133128 }
133129 #endif //CONFIG_IOCTL_CFG80211
133130
133131 +#ifdef CONFIG_WFD
133132 + case ANDROID_WIFI_CMD_WFD_ENABLE:
133133 + {
133134 + // Commented by Albert 2012/07/24
133135 + // We can enable the WFD function by using the following command:
133136 + // wpa_cli driver wfd-enable
133137 +
133138 + struct wifi_display_info *pwfd_info;
133139 + _adapter* padapter = ( _adapter * ) rtw_netdev_priv(net);
133140 +
133141 + pwfd_info = &padapter->wfd_info;
133142 + if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
133143 + pwfd_info->wfd_enable = _TRUE;
133144 + break;
133145 + }
133146 +
133147 + case ANDROID_WIFI_CMD_WFD_DISABLE:
133148 + {
133149 + // Commented by Albert 2012/07/24
133150 + // We can disable the WFD function by using the following command:
133151 + // wpa_cli driver wfd-disable
133152 +
133153 + struct wifi_display_info *pwfd_info;
133154 + _adapter* padapter = ( _adapter * ) rtw_netdev_priv(net);
133155 +
133156 + pwfd_info = &padapter->wfd_info;
133157 + if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
133158 + pwfd_info->wfd_enable = _FALSE;
133159 + break;
133160 + }
133161 + case ANDROID_WIFI_CMD_WFD_SET_TCPPORT:
133162 + {
133163 + // Commented by Albert 2012/07/24
133164 + // We can set the tcp port number by using the following command:
133165 + // wpa_cli driver wfd-set-tcpport = 554
133166 +
133167 + struct wifi_display_info *pwfd_info;
133168 + _adapter* padapter = ( _adapter * ) rtw_netdev_priv(net);
133169 +
133170 + pwfd_info = &padapter->wfd_info;
133171 + if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
133172 + pwfd_info->rtsp_ctrlport = ( u16 ) get_int_from_command( priv_cmd.buf );
133173 + break;
133174 + }
133175 + case ANDROID_WIFI_CMD_WFD_SET_MAX_TPUT:
133176 + {
133177 +
133178 +
133179 + break;
133180 + }
133181 + case ANDROID_WIFI_CMD_WFD_SET_DEVTYPE:
133182 + {
133183 + // Commented by Albert 2012/08/28
133184 + // Specify the WFD device type ( WFD source/primary sink )
133185 +
133186 + struct wifi_display_info *pwfd_info;
133187 + _adapter* padapter = ( _adapter * ) rtw_netdev_priv(net);
133188 +
133189 + pwfd_info = &padapter->wfd_info;
133190 + if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
133191 + {
133192 + pwfd_info->wfd_device_type = ( u8 ) get_int_from_command( priv_cmd.buf );
133193 +
133194 + pwfd_info->wfd_device_type &= WFD_DEVINFO_DUAL;
133195 + }
133196 + break;
133197 + }
133198 +#endif
133199 default:
133200 DBG_871X("Unknown PRIVATE command %s - ignored\n", command);
133201 snprintf(command, 3, "OK");
133202 @@ -484,7 +609,7 @@ response:
133203 bytes_written++;
133204 }
133205 priv_cmd.used_len = bytes_written;
133206 - if (copy_to_user(priv_cmd.buf, command, bytes_written)) {
133207 + if (copy_to_user((void *)priv_cmd.buf, command, bytes_written)) {
133208 DBG_871X("%s: failed to copy data to user buffer\n", __FUNCTION__);
133209 ret = -EFAULT;
133210 }
133211 @@ -496,7 +621,7 @@ response:
133212 exit:
133213 rtw_unlock_suspend();
133214 if (command) {
133215 - kfree(command);
133216 + rtw_mfree(command, priv_cmd.total_len);
133217 }
133218
133219 return ret;
133220 @@ -506,7 +631,7 @@ exit:
133221 /**
133222 * Functions for Android WiFi card detection
133223 */
133224 -#if defined(CONFIG_WIFI_CONTROL_FUNC) && 0
133225 +#if defined(RTW_ENABLE_WIFI_CONTROL_FUNC)
133226
133227 static int g_wifidev_registered = 0;
133228 static struct semaphore wifi_control_sem;
133229 @@ -516,14 +641,14 @@ static struct resource *wifi_irqres = NULL;
133230 static int wifi_add_dev(void);
133231 static void wifi_del_dev(void);
133232
133233 -int wl_android_wifictrl_func_add(void)
133234 +int rtw_android_wifictrl_func_add(void)
133235 {
133236 int ret = 0;
133237 sema_init(&wifi_control_sem, 0);
133238
133239 ret = wifi_add_dev();
133240 if (ret) {
133241 - DHD_ERROR(("%s: platform_driver_register failed\n", __FUNCTION__));
133242 + DBG_871X("%s: platform_driver_register failed\n", __FUNCTION__);
133243 return ret;
133244 }
133245 g_wifidev_registered = 1;
133246 @@ -531,13 +656,13 @@ int wl_android_wifictrl_func_add(void)
133247 /* Waiting callback after platform_driver_register is done or exit with error */
133248 if (down_timeout(&wifi_control_sem, msecs_to_jiffies(1000)) != 0) {
133249 ret = -EINVAL;
133250 - DHD_ERROR(("%s: platform_driver_register timeout\n", __FUNCTION__));
133251 + DBG_871X("%s: platform_driver_register timeout\n", __FUNCTION__);
133252 }
133253
133254 return ret;
133255 }
133256
133257 -void wl_android_wifictrl_func_del(void)
133258 +void rtw_android_wifictrl_func_del(void)
133259 {
133260 if (g_wifidev_registered)
133261 {
133262 @@ -552,14 +677,14 @@ void *wl_android_prealloc(int section, unsigned long size)
133263 if (wifi_control_data && wifi_control_data->mem_prealloc) {
133264 alloc_ptr = wifi_control_data->mem_prealloc(section, size);
133265 if (alloc_ptr) {
133266 - DHD_INFO(("success alloc section %d\n", section));
133267 + DBG_871X("success alloc section %d\n", section);
133268 if (size != 0L)
133269 - bzero(alloc_ptr, size);
133270 + memset(alloc_ptr, 0, size);
133271 return alloc_ptr;
133272 }
133273 }
133274
133275 - DHD_ERROR(("can't alloc section %d\n", section));
133276 + DBG_871X("can't alloc section %d\n", section);
133277 return NULL;
133278 }
133279
133280 @@ -578,7 +703,7 @@ int wifi_get_irq_number(unsigned long *irq_flags_ptr)
133281
133282 int wifi_set_power(int on, unsigned long msec)
133283 {
133284 - DHD_ERROR(("%s = %d\n", __FUNCTION__, on));
133285 + DBG_871X("%s = %d\n", __FUNCTION__, on);
133286 if (wifi_control_data && wifi_control_data->set_power) {
133287 wifi_control_data->set_power(on);
133288 }
133289 @@ -590,7 +715,7 @@ int wifi_set_power(int on, unsigned long msec)
133290 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35))
133291 int wifi_get_mac_addr(unsigned char *buf)
133292 {
133293 - DHD_ERROR(("%s\n", __FUNCTION__));
133294 + DBG_871X("%s\n", __FUNCTION__);
133295 if (!buf)
133296 return -EINVAL;
133297 if (wifi_control_data && wifi_control_data->get_mac_addr) {
133298 @@ -600,10 +725,10 @@ int wifi_get_mac_addr(unsigned char *buf)
133299 }
133300 #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) */
133301
133302 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39))
133303 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39)) || defined(COMPAT_KERNEL_RELEASE)
133304 void *wifi_get_country_code(char *ccode)
133305 {
133306 - DHD_TRACE(("%s\n", __FUNCTION__));
133307 + DBG_871X("%s\n", __FUNCTION__);
133308 if (!ccode)
133309 return NULL;
133310 if (wifi_control_data && wifi_control_data->get_country_code) {
133311 @@ -615,7 +740,7 @@ void *wifi_get_country_code(char *ccode)
133312
133313 static int wifi_set_carddetect(int on)
133314 {
133315 - DHD_ERROR(("%s = %d\n", __FUNCTION__, on));
133316 + DBG_871X("%s = %d\n", __FUNCTION__, on);
133317 if (wifi_control_data && wifi_control_data->set_carddetect) {
133318 wifi_control_data->set_carddetect(on);
133319 }
133320 @@ -627,7 +752,7 @@ static int wifi_probe(struct platform_device *pdev)
133321 struct wifi_platform_data *wifi_ctrl =
133322 (struct wifi_platform_data *)(pdev->dev.platform_data);
133323
133324 - DHD_ERROR(("## %s\n", __FUNCTION__));
133325 + DBG_871X("## %s\n", __FUNCTION__);
133326 wifi_irqres = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "bcmdhd_wlan_irq");
133327 if (wifi_irqres == NULL)
133328 wifi_irqres = platform_get_resource_byname(pdev,
133329 @@ -646,7 +771,7 @@ static int wifi_remove(struct platform_device *pdev)
133330 struct wifi_platform_data *wifi_ctrl =
133331 (struct wifi_platform_data *)(pdev->dev.platform_data);
133332
133333 - DHD_ERROR(("## %s\n", __FUNCTION__));
133334 + DBG_871X("## %s\n", __FUNCTION__);
133335 wifi_control_data = wifi_ctrl;
133336
133337 wifi_set_power(0, 0); /* Power Off */
133338 @@ -658,7 +783,7 @@ static int wifi_remove(struct platform_device *pdev)
133339
133340 static int wifi_suspend(struct platform_device *pdev, pm_message_t state)
133341 {
133342 - DHD_TRACE(("##> %s\n", __FUNCTION__));
133343 + DBG_871X("##> %s\n", __FUNCTION__);
133344 #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 39)) && defined(OOB_INTR_ONLY)
133345 bcmsdh_oob_intr_set(0);
133346 #endif
133347 @@ -667,7 +792,7 @@ static int wifi_suspend(struct platform_device *pdev, pm_message_t state)
133348
133349 static int wifi_resume(struct platform_device *pdev)
133350 {
133351 - DHD_TRACE(("##> %s\n", __FUNCTION__));
133352 + DBG_871X("##> %s\n", __FUNCTION__);
133353 #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 39)) && defined(OOB_INTR_ONLY)
133354 if (dhd_os_check_if_up(bcmsdh_get_drvdata()))
133355 bcmsdh_oob_intr_set(1);
133356 @@ -675,6 +800,7 @@ static int wifi_resume(struct platform_device *pdev)
133357 return 0;
133358 }
133359
133360 +/* temporarily use these two */
133361 static struct platform_driver wifi_device = {
133362 .probe = wifi_probe,
133363 .remove = wifi_remove,
133364 @@ -697,7 +823,7 @@ static struct platform_driver wifi_device_legacy = {
133365
133366 static int wifi_add_dev(void)
133367 {
133368 - DHD_TRACE(("## Calling platform_driver_register\n"));
133369 + DBG_871X("## Calling platform_driver_register\n");
133370 platform_driver_register(&wifi_device);
133371 platform_driver_register(&wifi_device_legacy);
133372 return 0;
133373 @@ -705,9 +831,9 @@ static int wifi_add_dev(void)
133374
133375 static void wifi_del_dev(void)
133376 {
133377 - DHD_TRACE(("## Unregister platform_driver_register\n"));
133378 + DBG_871X("## Unregister platform_driver_register\n");
133379 platform_driver_unregister(&wifi_device);
133380 platform_driver_unregister(&wifi_device_legacy);
133381 }
133382 -#endif /* defined(CONFIG_WIFI_CONTROL_FUNC) */
133383 +#endif /* defined(RTW_ENABLE_WIFI_CONTROL_FUNC) */
133384
133385 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/sdio_intf.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/sdio_intf.c
133386 deleted file mode 100644
133387 index 52faefc..0000000
133388 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/sdio_intf.c
133389 +++ /dev/null
133390 @@ -1,922 +0,0 @@
133391 -/******************************************************************************
133392 - *
133393 - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
133394 - *
133395 - * This program is free software; you can redistribute it and/or modify it
133396 - * under the terms of version 2 of the GNU General Public License as
133397 - * published by the Free Software Foundation.
133398 - *
133399 - * This program is distributed in the hope that it will be useful, but WITHOUT
133400 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
133401 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
133402 - * more details.
133403 - *
133404 - * You should have received a copy of the GNU General Public License along with
133405 - * this program; if not, write to the Free Software Foundation, Inc.,
133406 - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
133407 - *
133408 - *
133409 -
133410 -******************************************************************************/
133411 -#define _HCI_INTF_C_
133412 -
133413 -#include <drv_conf.h>
133414 -#include <osdep_service.h>
133415 -#include <drv_types.h>
133416 -#include <recv_osdep.h>
133417 -#include <xmit_osdep.h>
133418 -
133419 -#include <hal_init.h>
133420 -#include <sdio_hal.h>
133421 -#include <sdio_ops.h>
133422 -#include <linux/mmc/sdio_func.h>
133423 -#include <linux/mmc/sdio_ids.h>
133424 -extern u32 rtw_start_drv_threads(_adapter *padapter);
133425 -extern void rtw_stop_drv_threads (_adapter *padapter);
133426 -extern u8 rtw_init_drv_sw(_adapter *padapter);
133427 -extern u8 rtw_free_drv_sw(_adapter *padapter);
133428 -extern void rtw_cancel_all_timer(_adapter *padapter);
133429 -extern struct net_device *rtw_init_netdev(_adapter *old_padapter);
133430 -extern void update_recvframe_attrib_from_recvstat(struct rx_pkt_attrib
133431 -*pattrib, struct recv_stat *prxstat);
133432 -static const struct sdio_device_id sdio_ids[] = {
133433 - { SDIO_DEVICE(0x024c, 0x8712) },
133434 -// { SDIO_DEVICE_CLASS(SDIO_CLASS_WLAN) },
133435 -// { /* end: all zeroes */ },
133436 -};
133437 -
133438 -typedef struct _driver_priv{
133439 - struct sdio_driver r871xs_drv;
133440 -}drv_priv, *pdrv_priv;
133441 -
133442 -void sd_sync_int_hdl(struct sdio_func *func);
133443 -
133444 -extern unsigned int sd_dvobj_init(_adapter * padapter){
133445 -
133446 - struct dvobj_priv *psddev=&padapter->dvobjpriv;
133447 - struct sdio_func *func=psddev->func;
133448 - int ret;
133449 - _func_enter_;
133450 - //_rtw_init_sema(&psddev->init_finish,0);
133451 - sdio_claim_host(func);
133452 - ret=sdio_enable_func(func);
133453 - if(ret){
133454 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("sd_dvobj_init: sdio_enable_func fail!!!!!\n"));
133455 - return _FAIL;
133456 - }
133457 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("sd_dvobj_init: sdio_enable_func success!!!!!\n"));
133458 - padapter->EepromAddressSize = 6;
133459 - psddev->tx_block_mode=1;
133460 - psddev->rx_block_mode=1;
133461 - sdio_set_block_size(func, 512);
133462 - psddev->block_transfer_len=512;
133463 - psddev->blk_shiftbits=9;
133464 - ret=sdio_claim_irq(func,sd_sync_int_hdl);
133465 - sdio_release_host(func);
133466 - psddev->sdio_himr=0xff;
133467 - if(ret)
133468 - return _FAIL;
133469 - _func_exit_;
133470 - return _SUCCESS;
133471 -}
133472 -
133473 -extern void sd_dvobj_deinit(_adapter * padapter)
133474 -{
133475 - unsigned char data;
133476 - struct dvobj_priv *psddev=&padapter->dvobjpriv;
133477 - struct sdio_func *func=psddev->func;
133478 -
133479 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+SDIO deinit\n"));
133480 - if(func !=0){
133481 - sdio_claim_host(func);
133482 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in sd_dvobj_deinit():sdio_claim_host !\n"));
133483 -// sdio_release_irq(func);
133484 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in sd_dvobj_deinit():sdio_release_irq !\n"));
133485 - sdio_disable_func(func);
133486 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in sd_dvobj_deinit():sdio_disable_func !\n"));
133487 - sdio_release_host(func);
133488 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in sd_dvobj_deinit():sdio_release_host !\n"));
133489 -
133490 -
133491 - }
133492 - return;
133493 -}
133494 -
133495 -uint sdbus_read_reg_int(struct intf_priv *pintfpriv, u32 addr, u32 cnt, void *pdata)
133496 -{
133497 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv*)pintfpriv->intf_dev;
133498 - struct sdio_func *func = pdvobjpriv->func;
133499 - u8 *mem = NULL;
133500 - int status;
133501 -
133502 -#ifdef CONFIG_IO_4B
133503 - u32 addr_org = addr, addr_offset = 0;
133504 - u32 cnt_org = cnt;
133505 -#endif
133506 -
133507 -_func_enter_;
133508 -
133509 -#ifdef CONFIG_IO_4B
133510 - addr_offset = addr % 4;
133511 - if (addr_offset) {
133512 - addr = addr - addr_offset;
133513 - cnt = cnt + addr_offset;
133514 - }
133515 - if (cnt % 4)
133516 - cnt = ((cnt + 4) >> 2) << 2;
133517 -#endif
133518 -
133519 - mem = rtw_malloc(cnt);
133520 - if (mem == NULL) {
133521 - RT_TRACE(_module_hci_ops_os_c_, _drv_emerg_,
133522 - ("SDIO_STATUS_NO_RESOURCES - memory alloc fail\n"));
133523 - return _FAIL;
133524 - }
133525 -
133526 - status = sdio_memcpy_fromio(func, mem, addr&0x1FFFF, cnt);
133527 - if (status) {
133528 - //error
133529 - RT_TRACE(_module_hci_ops_os_c_, _drv_emerg_,
133530 - ("sdbus_read_reg_int error 0x%x\n"
133531 - "***** Addr = %x *****\n"
133532 - "***** Length = %d *****\n", status, addr, cnt));
133533 - status = _FAIL;
133534 - } else {
133535 -#ifdef CONFIG_IO_4B
133536 - if (cnt != cnt_org)
133537 - _rtw_memcpy(pdata, mem + addr_offset, cnt_org);
133538 - else
133539 -#endif
133540 - _rtw_memcpy(pdata, mem, cnt);
133541 - status = _SUCCESS;
133542 - }
133543 -
133544 - rtw_mfree(mem, cnt);
133545 -
133546 -_func_exit_;
133547 -
133548 - return status;
133549 -}
133550 -
133551 -void sdio_read_int(_adapter *padapter, u32 addr, u8 sz, void *pdata)
133552 -{
133553 - struct io_queue *pio_queue = (struct io_queue*)padapter->pio_queue;
133554 - struct intf_hdl *pintfhdl = &pio_queue->intf;
133555 - struct intf_priv *pintfpriv = pintfhdl->pintfpriv;
133556 - u32 ftaddr = 0, res;
133557 -
133558 -_func_enter_;
133559 -
133560 -// RT_TRACE(_module_hci_ops_c_,_drv_err_,("sdio_read_int\n"));
133561 -
133562 - if ((_cvrt2ftaddr(addr, &ftaddr)) == _SUCCESS) {
133563 - res = sdbus_read_reg_int(pintfpriv, ftaddr, sz, pdata);
133564 - if (res != _SUCCESS) {
133565 - RT_TRACE(_module_hci_ops_c_, _drv_emerg_, ("sdio_read_int fail!!!\n"));
133566 - }
133567 - } else {
133568 - RT_TRACE(_module_hci_ops_c_, _drv_emerg_, (" sdio_read_int address translate error!!!\n"));
133569 - }
133570 -
133571 -_func_exit_;
133572 -}
133573 -
133574 -uint sdbus_write_reg_int(struct intf_priv *pintfpriv, u32 addr, u32 cnt, void *pdata)
133575 -{
133576 - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv*)pintfpriv->intf_dev;
133577 - struct sdio_func *func = pdvobjpriv->func;
133578 - int status;
133579 -#ifdef CONFIG_IO_4B
133580 - u32 addr_org = addr, addr_offset = 0;
133581 - u32 cnt_org = cnt;
133582 - void *pdata_org = pdata;
133583 -#endif
133584 -
133585 -_func_enter_;
133586 -
133587 -#ifdef CONFIG_IO_4B
133588 - addr_offset = addr % 4;
133589 - if (addr_offset) {
133590 - addr = addr - addr_offset;
133591 - cnt = cnt + addr_offset;
133592 - }
133593 - if (cnt % 4)
133594 - cnt = ((cnt + 4) >> 2) << 2;
133595 - if (cnt != cnt_org) {
133596 - pdata = rtw_malloc(cnt);
133597 - if (pdata == NULL) {
133598 - RT_TRACE(_module_hci_ops_os_c_, _drv_emerg_,
133599 - ("SDIO_STATUS_NO_RESOURCES - rtw_malloc fail\n"));
133600 - return _FAIL;
133601 - }
133602 - status = sdio_memcpy_fromio(func, pdata, addr&0x1FFFF, cnt);
133603 - if (status) {
133604 - RT_TRACE(_module_hci_ops_os_c_,_drv_emerg_,
133605 - ("sdbus_write_reg_int read failed 0x%x\n "
133606 - "***** Addr = %x *****\n"
133607 - "***** Length = %d *****\n", status, addr, cnt));
133608 - rtw_mfree(pdata, cnt);
133609 - return _FAIL;
133610 - }
133611 - _rtw_memcpy(pdata + addr_offset, pdata_org, cnt_org);
133612 - /* if data been modify between this read and write, may cause a problem */
133613 - }
133614 -#endif
133615 - status = sdio_memcpy_toio(func, addr&0x1FFFF, pdata, cnt);
133616 - if (status) {
133617 - //error
133618 - RT_TRACE(_module_hci_ops_os_c_, _drv_emerg_,
133619 - ("sdbus_write_reg_int failed 0x%x\n"
133620 - "***** Addr = %x *****\n"
133621 - "***** Length = %d *****\n", status, addr, cnt));
133622 -
133623 - status = _FAIL;
133624 - } else
133625 - status = _SUCCESS;
133626 -
133627 -#ifdef CONFIG_IO_4B
133628 - if (cnt != cnt_org)
133629 - rtw_mfree(pdata, cnt);
133630 -#endif
133631 -
133632 -_func_exit_;
133633 -
133634 - return status;
133635 -}
133636 -
133637 -void sdio_write_int(_adapter *padapter, u32 addr, u32 val, u8 sz)
133638 -{
133639 - struct io_queue *pio_queue = (struct io_queue*)padapter->pio_queue;
133640 - struct intf_hdl *pintfhdl = &pio_queue->intf;
133641 - struct intf_priv *pintfpriv = pintfhdl->pintfpriv;
133642 -
133643 - u32 ftaddr = 0, res;
133644 -
133645 -_func_enter_;
133646 -
133647 -// RT_TRACE(_module_hci_ops_c_,_drv_err_,("sdio_write_int\n"));
133648 -
133649 - val = cpu_to_le32(val);
133650 -
133651 - if ((_cvrt2ftaddr(addr, &ftaddr)) == _SUCCESS) {
133652 - res = sdbus_write_reg_int(pintfpriv, ftaddr, sz, &val);
133653 - if (res != _SUCCESS) {
133654 - RT_TRACE(_module_hci_ops_c_, _drv_emerg_, ("sdio_write_int fail!!!\n"));
133655 - }
133656 - } else {
133657 - RT_TRACE(_module_hci_ops_c_, _drv_emerg_, ("sdio_write_int address translate error!!!\n"));
133658 - }
133659 -
133660 -_func_exit_;
133661 -}
133662 -
133663 -int recvbuf2recvframe_s(_adapter *padapter, struct recv_buf *precvbuf)
133664 -{
133665 -// _irqL irql;
133666 - u8 *pbuf;
133667 -// u8 bsumbit = _FALSE;
133668 - uint pkt_len, pkt_offset;
133669 - int transfer_len;
133670 - struct recv_stat *prxstat;
133671 - u16 pkt_cnt, drvinfo_sz;
133672 - _queue *pfree_recv_queue;
133673 - union recv_frame *precvframe = NULL,*plast_recvframe = NULL;
133674 - struct recv_priv *precvpriv = &padapter->recvpriv;
133675 -// struct intf_hdl *pintfhdl = &padapter->pio_queue->intf;
133676 -
133677 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("+recvbuf2recvframe()\n"));
133678 -
133679 - pfree_recv_queue = &(precvpriv->free_recv_queue);
133680 -
133681 - pbuf = (u8*)precvbuf->pbuf;
133682 -
133683 - prxstat = (struct recv_stat *)pbuf;
133684 -/* {
133685 - u8 i;
133686 - DBG_8192C("\n-----recvbuf-----\n");
133687 - for (i=0;i<64;i=i+8) {
133688 - 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]);
133689 - }
133690 - DBG_8192C("\n-----recvbuf end-----\n");
133691 - }*/
133692 - transfer_len = precvbuf->len;
133693 - precvbuf->ref_cnt = 1;
133694 - do {
133695 - precvframe = NULL;
133696 - precvframe = rtw_alloc_recvframe(pfree_recv_queue);
133697 - if (precvframe == NULL){
133698 - RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("recvbuf2recvframe(), precvframe==NULL\n"));
133699 - break;
133700 - }
133701 - if (plast_recvframe != NULL) {
133702 - if (rtw_recv_entry(plast_recvframe) != _SUCCESS) {
133703 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("recvbuf2recvframe(), rtw_recv_entry(precvframe) != _SUCCESS\n"));
133704 - }
133705 - }
133706 - prxstat = (struct recv_stat*)pbuf;
133707 - pkt_len = le32_to_cpu(prxstat->rxdw0&0x00003fff); //pkt_len = prxstat->frame_length;
133708 -
133709 - 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));
133710 -
133711 - drvinfo_sz = le16_to_cpu((prxstat->rxdw0&0x000f0000)>>16);//uint 2^3 = 8 bytes
133712 - drvinfo_sz = drvinfo_sz << 3;
133713 - 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));
133714 - precvframe->u.hdr.precvbuf = precvbuf;
133715 - precvframe->u.hdr.adapter = padapter;
133716 - rtw_init_recvframe(precvframe, precvpriv);
133717 -
133718 - precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pbuf;
133719 - precvframe->u.hdr.rx_end = precvbuf->pend;
133720 - update_recvframe_attrib_from_recvstat(&precvframe->u.hdr.attrib, prxstat);
133721 - pkt_offset = pkt_len + drvinfo_sz + RXDESC_SIZE;
133722 -
133723 - recvframe_put(precvframe, pkt_len + drvinfo_sz + RXDESC_SIZE);
133724 - recvframe_pull(precvframe, drvinfo_sz + RXDESC_SIZE);
133725 -/* {
133726 - u8 i;
133727 - DBG_8192C("\n-----packet-----\n");
133728 - for(i=0;i<32;i++){
133729 - 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]);
133730 - }
133731 - DBG_8192C("\n-----packet end-----\n");
133732 - }*/
133733 - 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));
133734 -
133735 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\npkt_offset=%d [1]\n",pkt_offset));
133736 - pkt_offset = _RND512(pkt_offset);
133737 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\npkt_offset=%d [2] transfer_len=%d\n",pkt_offset,transfer_len));
133738 - transfer_len -= pkt_offset;
133739 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n transfer_len=%d \n",transfer_len));
133740 - pbuf += pkt_offset;
133741 - if (transfer_len > 0)
133742 - precvbuf->ref_cnt++;
133743 - plast_recvframe = precvframe;
133744 - precvframe = NULL;
133745 - } while (transfer_len > 0);
133746 -
133747 - if (plast_recvframe != NULL) {
133748 - if (rtw_recv_entry(plast_recvframe) != _SUCCESS) {
133749 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("recvbuf2recvframe(), rtw_recv_entry(precvframe) != _SUCCESS\n"));
133750 - }
133751 - }
133752 -
133753 - dev_kfree_skb_any(precvbuf->pskb);
133754 - precvbuf->pskb = NULL;
133755 - return _SUCCESS;
133756 -}
133757 -
133758 -u32 read_pkt2recvbuf(PADAPTER padapter, u32 rd_cnt, struct recv_buf *precvbuf)
133759 -{
133760 - struct recv_priv *precvpriv = &padapter->recvpriv;
133761 - u32 skb_buf_sz;
133762 - if (rd_cnt < 1600)
133763 - skb_buf_sz = 1600;
133764 - else
133765 - skb_buf_sz = rd_cnt;
133766 - RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("\n read_pkt2recvbuf------skb_buf_sz=%d rd_cnt=%d\n",skb_buf_sz,rd_cnt));
133767 -// if (precvbuf->pskb != NULL) {
133768 -// dev_kfree_skb_any(precvbuf->pskb );
133769 -// }
133770 -
133771 - //alloc skb
133772 - {
133773 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
133774 - precvbuf->pskb = dev_alloc_skb(skb_buf_sz);
133775 -#else
133776 - precvbuf->pskb = netdev_alloc_skb(padapter->pnetdev, skb_buf_sz);
133777 -#endif
133778 - if (precvbuf->pskb == NULL) {
133779 - RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("==================init_recvbuf(): alloc_skb fail!\n"));
133780 - return _FAIL;
133781 - }
133782 -
133783 - precvbuf->phead = precvbuf->pskb->head;
133784 - precvbuf->pdata = precvbuf->pskb->data;
133785 - precvbuf->ptail = precvbuf->pskb->tail;
133786 - precvbuf->pend = precvbuf->pskb->end;
133787 - precvbuf->pbuf = precvbuf->pskb->data;
133788 - }
133789 -// else {
133790 -// RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("after init_recvbuf(): skb !=NULL!\n"));
133791 -// }
133792 -
133793 - rtw_read_port(padapter, RTL8712_DMA_RX0FF, rd_cnt, (u8*)precvbuf);
133794 - precvbuf->ptail = precvbuf->ptail + rd_cnt;
133795 - precvbuf->len = rd_cnt;
133796 - /*{
133797 - u32 i;
133798 - DBG_8192C("-----After read port[%d]-----\n",skb_buf_sz);
133799 - for (i = 0; i < skb_buf_sz; i = i + 8) {
133800 - 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]);
133801 - }
133802 -
133803 - DBG_8192C("-----------\n");
133804 - }*/
133805 -#if 1
133806 - recvbuf2recvframe_s(padapter, precvbuf);
133807 -#else
133808 -{
133809 - dev_kfree_skb_any(precvbuf->pskb);
133810 - precvbuf->pskb = NULL;
133811 - rtw_list_delete(&(precvbuf->list));
133812 - rtw_list_insert_tail(&precvbuf->list, get_list_head(&precvpriv->free_recv_buf_queue));
133813 - precvpriv->free_recv_buf_queue_cnt++;
133814 -}
133815 -#endif
133816 -
133817 - return _SUCCESS;
133818 -}
133819 -
133820 -void sd_recv_rxfifo(PADAPTER padapter);
133821 -#if 0
133822 -void sd_recv_rxfifo(PADAPTER padapter)
133823 -{
133824 -// u8 *pdata, *ptail, *pfixed_tail,*pfixed_head,*pfixed_end,blk_shift_bit;
133825 - u16 rx_blknum;
133826 - u32 blk_sz, cnt;//,remain,tmp_cnt;
133827 - struct recv_priv *precvpriv;
133828 -// struct recv_stat *prxstat;
133829 - //union recv_frame *precvframe, *ppreframe = NULL;
133830 -// _queue *pfree_recv_queue, *ppending_recv_queue;
133831 -// u8 tmp[2048];
133832 - struct recv_buf *precvbuf;
133833 - _list *precvbuf_head, *precvbuf_list;
133834 - _irqL irql, rx_proc_irq;
133835 -// uint pkt_len;
133836 -// u16 drvinfo_sz;
133837 -
133838 - precvpriv = &padapter->recvpriv;
133839 - blk_sz = padapter->dvobjpriv.block_transfer_len;
133840 -// blk_shift_bit= (u8)padapter->dvobjpriv.blk_shiftbits;
133841 -// pfree_recv_queue = &(precvpriv->free_recv_queue);
133842 -// ppending_recv_queue = &(precvpriv->recv_pending_queue);
133843 -
133844 - rx_blknum = padapter->dvobjpriv.rxblknum;
133845 -// _enter_hwio_critical(&padapter->dvobjpriv.rx_protect, &rx_proc_irq);
133846 -// padapter->dvobjpriv.rxblknum=rtw_read16(padapter, SDIO_RX0_RDYBLK_NUM);
133847 - sdio_read_int(padapter, SDIO_RX0_RDYBLK_NUM, 2, &padapter->dvobjpriv.rxblknum);
133848 - if (rx_blknum>padapter->dvobjpriv.rxblknum) {
133849 - cnt = (0x10000 - rx_blknum + padapter->dvobjpriv.rxblknum) * blk_sz;
133850 - } else {
133851 - cnt = (padapter->dvobjpriv.rxblknum-rx_blknum) * blk_sz;
133852 - }
133853 - 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));
133854 -
133855 - if (cnt == 0) {
133856 -// remain = 0;
133857 - precvbuf = NULL;
133858 - 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));
133859 - goto drop_pkt;
133860 - }
133861 -
133862 - if(_rtw_queue_empty(&precvpriv->free_recv_buf_queue) == _TRUE)
133863 - {
133864 - precvbuf = NULL;
133865 - 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));
133866 - goto drop_pkt;
133867 - }
133868 - else
133869 - {
133870 - _enter_critical(&precvpriv->free_recv_buf_queue.lock, &irql);
133871 - precvbuf_head = get_list_head(&precvpriv->free_recv_buf_queue);
133872 - precvbuf_list = get_next(precvbuf_head);
133873 - precvbuf = LIST_CONTAINOR(precvbuf_list, struct recv_buf, list);
133874 - rtw_list_delete(&precvbuf->list);
133875 - precvpriv->free_recv_buf_queue_cnt--;
133876 -
133877 - 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));
133878 - _exit_critical(&precvpriv->free_recv_buf_queue.lock, &irql);
133879 - }
133880 - read_pkt2recvbuf(padapter, cnt, precvbuf);
133881 -
133882 - return;
133883 -
133884 -drop_pkt:
133885 -
133886 - if (cnt >0) {
133887 - do{
133888 - if (cnt > MAX_RECVBUF_SZ) {
133889 - rtw_read_port(padapter, 0x10380000, MAX_RECVBUF_SZ, (u8 *)precvpriv->recvbuf_drop);
133890 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("=========sd_recv_rxfifo precvbuf= NULL no recvbuf cnt=%d tmp read %d",cnt,MAX_RECVBUF_SZ));
133891 - cnt=cnt-MAX_RECVBUF_SZ;
133892 - } else {
133893 - rtw_read_port(padapter, 0x10380000, cnt, (u8 *)precvpriv->recvbuf_drop);
133894 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("=========sd_recv_rxfifo precvbuf= NULL no recvbuf cnt=%d tmp read(@) %d",cnt,cnt));
133895 - cnt=0;
133896 - }
133897 - } while(cnt > 0);
133898 - }
133899 -
133900 - return;
133901 -}
133902 -#endif
133903 -#if 0
133904 -void sd_c2h_hdl(PADAPTER padapter)
133905 -{
133906 - u8 cmd_seq, pkt_num = 0;
133907 - u16 tmp16, sz, cmd_len = 0;
133908 - u32 rd_sz=0, cmd_sz = 0;//,ptr;
133909 - struct evt_priv *pevtpriv = &padapter->evtpriv;
133910 - pkt_num = rtw_read8(padapter, 0x102500BF);
133911 -// RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("@ sd_c2h_hdl:pkt_num=%d",pkt_num));
133912 -get_next:
133913 -// ptr=rtw_read32(padapter,0x102500e8);
133914 -// RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("@ sd_c2h_hdl:C2H fifo RDPTR=0x%x",ptr));
133915 -// ptr=rtw_read32(padapter,0x102500ec);
133916 -// RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("@ sd_c2h_hdl:C2H fifo WTPTR=0x%x",ptr));
133917 -// if(pkt_num==0x0 ){
133918 -// RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("@ sd_c2h_hdl:cmd_pkt num=0x%x!",pkt_num));
133919 -// return;
133920 -// }
133921 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("@ sd_c2h_hdl:pkt_num=%d",pkt_num));
133922 - //memset(pevtpriv->c2h_mem,0,512);
133923 - rtw_read_port(padapter, RTL8712_DMA_C2HCMD, 512, pevtpriv->c2h_mem);
133924 - cmd_sz = *(u16 *)&pevtpriv->c2h_mem[0];
133925 - cmd_sz &= 0x3fff;
133926 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("sd_c2h_hdl: cmd_sz=%d[0x%x]!",cmd_sz,cmd_sz));
133927 - tmp16 = *(u16 *)&pevtpriv->c2h_mem[4];
133928 - tmp16 &= 0x01ff;
133929 - if (tmp16 !=0x1ff) {
133930 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("sd_c2h_hdl: 0x1ff error[0x%x]!",pevtpriv->c2h_mem[4]));
133931 - goto exit;
133932 - }
133933 - if((cmd_sz+24) >512){
133934 - rtw_read_port(padapter, RTL8712_DMA_C2HCMD, (cmd_sz+24-512), pevtpriv->c2h_mem+512);
133935 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("sd_c2h_hdl: read the second part of c2h event!"));
133936 - }
133937 - cmd_seq = pevtpriv->c2h_mem[27];
133938 - cmd_seq &= 0x7f;
133939 - if (pevtpriv->event_seq != cmd_seq) {
133940 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("sd_c2h_hdl: pevtpriv->event_seq (%d) != c2hbuf seq(%d)",pevtpriv->event_seq,cmd_seq));
133941 - } else {
133942 - RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("sd_c2h_hdl: pevtpriv->event_seq (%d) == c2hbuf seq(%d)",pevtpriv->event_seq,cmd_seq));
133943 - }
133944 - cmd_len = *(u16 *)&pevtpriv->c2h_mem[0];
133945 - cmd_len &= 0x3ff;
133946 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("@sd_c2h_hdl: cmd_len=%d",cmd_len));
133947 -// if(cmd_len){
133948 -// memset(pevtpriv->c2h_mem+cmd_len,0,cmd_len);
133949 -// rtw_read_port(padapter, RTL8712_DMA_C2HCMD, cmd_len, pevtpriv->c2h_mem+cmd_len);
133950 -// }
133951 -// pevtpriv->event_seq=pevtpriv->event_seq++;
133952 -// if(pevtpriv->event_seq>127)
133953 -// pevtpriv->event_seq=0;
133954 -
133955 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("sd_c2h_hdl:!"));
133956 - rxcmd_event_hdl(padapter,pevtpriv->c2h_mem);
133957 - if (pkt_num > 1) {
133958 - pkt_num--;
133959 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("sd_c2h_hdl: pkt_num=%d",pkt_num));
133960 - goto get_next;
133961 - }
133962 -
133963 -exit:
133964 -
133965 - return;
133966 -}
133967 -#endif
133968 -void update_free_ffsz_int(_adapter *padapter )
133969 -{
133970 - struct xmit_priv *pxmitpriv=&padapter->xmitpriv;
133971 - 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",
133972 - padapter->xmitpriv.public_pgsz,
133973 - pxmitpriv->free_pg[0],pxmitpriv->free_pg[1],pxmitpriv->free_pg[2],pxmitpriv->free_pg[3],
133974 - pxmitpriv->free_pg[4],pxmitpriv->free_pg[5],pxmitpriv->free_pg[6],pxmitpriv->free_pg[7]));
133975 -// rtw_read_mem(padapter,SDIO_BCNQ_FREEPG,8,pxmitpriv->free_pg);
133976 - sdio_read_int(padapter, SDIO_BCNQ_FREEPG, 8, pxmitpriv->free_pg);
133977 - padapter->xmitpriv.public_pgsz = pxmitpriv->free_pg[0];
133978 - if (pxmitpriv->public_pgsz > pxmitpriv->init_pgsz) {
133979 - pxmitpriv->init_pgsz = pxmitpriv->public_pgsz;
133980 - }
133981 -
133982 - {
133983 - u8 diff;
133984 - if (pxmitpriv->public_pgsz > (pxmitpriv->init_pgsz - pxmitpriv->used_pgsz)) {
133985 - 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));
133986 - diff = pxmitpriv->public_pgsz - (pxmitpriv->init_pgsz - pxmitpriv->used_pgsz);
133987 - pxmitpriv->used_pgsz = pxmitpriv->used_pgsz - diff;
133988 -// pxmitpriv->required_pgsz = pxmitpriv->required_pgsz - diff;
133989 - 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) );
133990 - } else {
133991 -
133992 - }
133993 - }
133994 -
133995 - 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",
133996 - pxmitpriv->free_pg[0],pxmitpriv->free_pg[1],pxmitpriv->free_pg[2],pxmitpriv->free_pg[3],
133997 - pxmitpriv->free_pg[4],pxmitpriv->free_pg[5],pxmitpriv->free_pg[6],pxmitpriv->free_pg[7]));
133998 -
133999 - return;
134000 -}
134001 -
134002 -void sd_int_dpc(PADAPTER padapter);
134003 -#if 0
134004 -void sd_int_dpc(PADAPTER padapter)
134005 -{
134006 - uint tasks= (padapter->IsrContent /*& padapter->ImrContent*/);
134007 -// rtw_write16(padapter,SDIO_HIMR,0);
134008 -
134009 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,(" sd_int_dpc[0x%x] ",padapter->IsrContent));
134010 -
134011 - if ((tasks & _VOQ_AVAL_IND) || (tasks & _VIQ_AVAL_IND) || (tasks & _BEQ_AVAL_IND) || (tasks & _BKQ_AVAL_IND) || (tasks & _BMCQ_AVAL_IND)) {
134012 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("==============INT : _TXDONE"));
134013 - update_free_ffsz_int(padapter);
134014 - } else {
134015 - if (((padapter->xmitpriv.init_pgsz - padapter->xmitpriv.used_pgsz) > 0 && (padapter->xmitpriv.init_pgsz - padapter->xmitpriv.used_pgsz) < 0x2f) || padapter->xmitpriv.required_pgsz > 0) {
134016 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("==============padapter->xmitpriv.public_pgsz[0x%x] <30 ",padapter->xmitpriv.public_pgsz));
134017 - update_free_ffsz_int(padapter);
134018 - }
134019 - }
134020 -
134021 - if(tasks & _C2HCMD)
134022 - {
134023 -// RT_TRACE(_module_hci_intfs_c_,_drv_err_,("======C2H_CMD========"));
134024 - padapter->IsrContent ^= _C2HCMD;
134025 - sd_c2h_hdl(padapter);
134026 -// RT_TRACE(_module_hci_intfs_c_,_drv_err_,("======C2H_CMD[end]========"));
134027 - }
134028 -
134029 - if(tasks & _RXDONE)
134030 - {
134031 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("==============INT : _RXDONE"));
134032 - padapter->IsrContent ^= _RXDONE;
134033 - sd_recv_rxfifo(padapter);
134034 - }
134035 -
134036 -}
134037 -#endif
134038 -void sd_sync_int_hdl(struct sdio_func *func)
134039 -{
134040 - struct dvobj_priv *psdpriv = sdio_get_drvdata(func);
134041 - _adapter *padapter = (_adapter*)psdpriv->padapter;
134042 - u16 tmp16;
134043 -// uint tasks;
134044 -
134045 -_func_enter_;
134046 -
134047 - if ((padapter->bDriverStopped ==_TRUE) || (padapter->bSurpriseRemoved == _TRUE)) {
134048 - goto exit;
134049 - }
134050 -
134051 - //padapter->IsrContent=rtw_read16(padapter, SDIO_HISR);
134052 - sdio_read_int(padapter, SDIO_HISR, 2, &psdpriv->sdio_hisr);
134053 -
134054 - if (psdpriv->sdio_hisr & psdpriv->sdio_himr)
134055 - {
134056 - sdio_write_int(padapter, SDIO_HIMR, 0, 2);
134057 - sd_int_dpc(padapter);
134058 - sdio_write_int(padapter, SDIO_HIMR, psdpriv->sdio_himr, 2);
134059 -
134060 - sdio_read_int(padapter, SDIO_HIMR, 2, &tmp16);
134061 - if (tmp16 != psdpriv->sdio_himr)
134062 - sdio_write_int(padapter, SDIO_HIMR, psdpriv->sdio_himr, 2);
134063 - } else {
134064 - RT_TRACE(_module_hci_intfs_c_, _drv_info_, ("<=========== sd_sync_int_hdl(): not our INT"));
134065 - }
134066 -exit:
134067 -
134068 -_func_exit_;
134069 -
134070 - return;
134071 -}
134072 -
134073 -static int r871xs_drv_init(struct sdio_func *func, const struct sdio_device_id *id)
134074 -{
134075 - _adapter *padapter = NULL;
134076 - struct dvobj_priv *pdvobjpriv;
134077 - struct net_device *pnetdev;
134078 -
134079 - 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));
134080 -
134081 - //step 1.
134082 - pnetdev = rtw_init_netdev(NULL);
134083 - if (!pnetdev)
134084 - goto error;
134085 -
134086 - padapter = rtw_netdev_priv(pnetdev);
134087 - pdvobjpriv = &padapter->dvobjpriv;
134088 - pdvobjpriv->padapter = padapter;
134089 - pdvobjpriv->func = func;
134090 - sdio_set_drvdata(func, pdvobjpriv);
134091 - SET_NETDEV_DEV(pnetdev, &func->dev);
134092 -
134093 -
134094 - //step 2.
134095 - if (alloc_io_queue(padapter) == _FAIL) {
134096 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Can't init io_reqs\n"));
134097 - goto error;
134098 - }
134099 -
134100 -
134101 -#if 0 //temp remove
134102 - //step 3.
134103 - if (loadparam(padapter, pnetdev) == _FAIL) {
134104 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Read Parameter Failed!\n"));
134105 - goto error;
134106 - }
134107 -#endif
134108 -
134109 - //step 4.
134110 - //dvobj_init(padapter);
134111 - padapter->dvobj_init = &sd_dvobj_init;
134112 - padapter->dvobj_deinit = &sd_dvobj_deinit;
134113 - padapter->halpriv.hal_bus_init = &sd_hal_bus_init;
134114 - padapter->halpriv.hal_bus_deinit = &sd_hal_bus_deinit;
134115 -
134116 - if (padapter->dvobj_init == NULL) {
134117 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("\n Initialize dvobjpriv.dvobj_init error!!!\n"));
134118 - goto error;
134119 - }
134120 -
134121 - if (padapter->dvobj_init(padapter) == _FAIL) {
134122 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("\n initialize device object priv Failed!\n"));
134123 - goto error;
134124 - }
134125 -
134126 -
134127 - //step 6.
134128 - if (rtw_init_drv_sw(padapter) == _FAIL) {
134129 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize driver software resource Failed!\n"));
134130 - goto error;
134131 - }
134132 -
134133 -#if 1
134134 -{
134135 - //step 7.
134136 - u8 mac[6];
134137 - mac[0]=0x00;
134138 - mac[1]=0xe0;
134139 - mac[2]=0x4c;
134140 - mac[3]=0x87;
134141 - mac[4]=0x66;
134142 - mac[5]=0x55;
134143 -
134144 - _rtw_memcpy(pnetdev->dev_addr, mac/*padapter->eeprompriv.mac_addr*/, ETH_ALEN);
134145 - 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]));
134146 -}
134147 -#endif
134148 - //step 8.
134149 - /* Tell the network stack we exist */
134150 - if (register_netdev(pnetdev) != 0) {
134151 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("register_netdev() failed\n"));
134152 - goto error;
134153 - }
134154 - RT_TRACE(_module_hci_intfs_c_,_drv_info_,("register_netdev() success\n"));
134155 - RT_TRACE(_module_hci_intfs_c_,_drv_notice_,("-drv_init - Adapter->bDriverStopped=%d, Adapter->bSurpriseRemoved=%d\n",padapter->bDriverStopped, padapter->bSurpriseRemoved));
134156 - RT_TRACE(_module_hci_intfs_c_,_drv_info_,("-871xs_drv - drv_init, success!\n"));
134157 -
134158 - return 0;
134159 -
134160 -error:
134161 -
134162 - if (padapter->dvobj_deinit == NULL) {
134163 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("\n Initialize dvobjpriv.dvobj_deinit error!!!\n"));
134164 - } else {
134165 - padapter->dvobj_deinit(padapter);
134166 - }
134167 -
134168 - if (pnetdev) {
134169 - unregister_netdev(pnetdev);
134170 - rtw_free_netdev(pnetdev);
134171 - }
134172 -
134173 - RT_TRACE(_module_hci_intfs_c_, _drv_emerg_, ("-871x_sdio - drv_init, fail!\n"));
134174 -
134175 - return -1;
134176 -}
134177 -
134178 -void rtl871x_intf_stop(_adapter *padapter)
134179 -{
134180 - // Disable interrupt, also done in rtl8712_hal_deinit
134181 -// rtw_write16(padapter, SDIO_HIMR, 0x00);
134182 -}
134183 -
134184 -void r871x_dev_unload(_adapter *padapter)
134185 -{
134186 - struct net_device *pnetdev = (struct net_device*)padapter->pnetdev;
134187 -
134188 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+r871x_dev_unload\n"));
134189 -
134190 - if (padapter->bup == _TRUE)
134191 - {
134192 -#if 0
134193 - //s1.
134194 - if (pnetdev) {
134195 - netif_carrier_off(pnetdev);
134196 - netif_stop_queue(pnetdev);
134197 - }
134198 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("@ r871x_dev_unload:complelte s1!\n"));
134199 -
134200 - //s2.
134201 - // indicate-disconnect if necssary (free all assoc-resources)
134202 - // dis-assoc from assoc_sta (optional)
134203 - rtw_indicate_disconnect(padapter);
134204 - rtw_free_network_queue(padapter, _TRUE);
134205 -#endif
134206 -
134207 - padapter->bDriverStopped = _TRUE;
134208 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("@ r871x_dev_unload:complete s2!\n"));
134209 -
134210 - //s3.
134211 - rtl871x_intf_stop(padapter);
134212 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("@ r871x_dev_unload:complete s3!\n"));
134213 -
134214 - //s4.
134215 - rtw_stop_drv_threads(padapter);
134216 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("@ r871x_dev_unload:complete s4!\n"));
134217 -
134218 - //s5.
134219 - if (padapter->bSurpriseRemoved == _FALSE) {
134220 - rtl871x_hal_deinit(padapter);
134221 - padapter->bSurpriseRemoved = _TRUE;
134222 - }
134223 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("@ r871x_dev_unload:complelt s5!\n"));
134224 -
134225 -
134226 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("@ r871x_dev_unload:complete s6!\n"));
134227 -
134228 - padapter->bup = _FALSE;
134229 - }
134230 - else {
134231 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("r871x_dev_unload():padapter->bup == _FALSE\n" ));
134232 - }
134233 -
134234 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-r871x_dev_unload\n"));
134235 -}
134236 -
134237 -static void r8712s_dev_remove(struct sdio_func *func)
134238 -{
134239 - _adapter *padapter = (_adapter*) (((struct dvobj_priv*)sdio_get_drvdata(func))->padapter);
134240 - struct net_device *pnetdev = (struct net_device *)padapter->pnetdev;
134241 -
134242 -_func_exit_;
134243 -
134244 - if (padapter)
134245 - {
134246 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+dev_remove()\n"));
134247 -
134248 -// padapter->bSurpriseRemoved = _TRUE;
134249 -
134250 - if (pnetdev)
134251 - unregister_netdev(pnetdev); //will call netdev_close()
134252 -
134253 - rtw_cancel_all_timer(padapter);
134254 -
134255 - r871x_dev_unload(padapter);
134256 - //s6.
134257 - if (padapter->dvobj_deinit) {
134258 - padapter->dvobj_deinit(padapter); // call sd_dvobj_deinit()
134259 - } else {
134260 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize hcipriv.hci_priv_init error!!!\n"));
134261 - }
134262 -
134263 - rtw_free_drv_sw(padapter);
134264 - //after rtw_free_drv_sw(), padapter has beed freed, don't refer to it.
134265 -
134266 - sdio_claim_host(func);
134267 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in dev_remove():sdio_claim_host !\n"));
134268 - sdio_release_irq(func);
134269 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in dev_remove():sdio_release_irq !\n"));
134270 - sdio_disable_func(func);
134271 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in dev_remove():sdio_disable_func !\n"));
134272 - sdio_release_host(func);
134273 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" in dev_remove():sdio_release_host !\n"));
134274 - }
134275 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-dev_remove()\n"));
134276 -
134277 -_func_exit_;
134278 -
134279 - return;
134280 -}
134281 -
134282 -static drv_priv drvpriv = {
134283 - .r871xs_drv.probe = r871xs_drv_init,
134284 - .r871xs_drv.remove = r8712s_dev_remove,
134285 - .r871xs_drv.name = "rtl871x_sdio_wlan",
134286 - .r871xs_drv.id_table = sdio_ids,
134287 -};
134288 -
134289 -
134290 -static int __init r8712s_drv_entry(void)
134291 -{
134292 - int status;
134293 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+8712s_sdio - drv_entry\n"));
134294 - status = sdio_register_driver(&drvpriv.r871xs_drv);
134295 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-8712_sdio - drv_entry, status=%d\n", status));
134296 -
134297 - return status;
134298 -}
134299 -
134300 -static void __exit r8712s_drv_halt(void)
134301 -{
134302 - int ret;
134303 -
134304 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+8712_sdio - drv_halt\n"));
134305 - sdio_unregister_driver(&drvpriv.r871xs_drv); // call r8712s_dev_remove()
134306 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-8712_sdio - drv_halt\n"));
134307 -
134308 -}
134309 -
134310 -
134311 -module_init(r8712s_drv_entry);
134312 -module_exit(r8712s_drv_halt);
134313 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
134314 index 2e54e74..4c1089a 100644
134315 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
134316 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
134317 @@ -1,7 +1,7 @@
134318 /******************************************************************************
134319 *
134320 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
134321 - *
134322 + *
134323 * This program is free software; you can redistribute it and/or modify it
134324 * under the terms of version 2 of the GNU General Public License as
134325 * published by the Free Software Foundation.
134326 @@ -16,8 +16,7 @@
134327 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
134328 *
134329 *
134330 -
134331 -******************************************************************************/
134332 + ******************************************************************************/
134333 #define _HCI_INTF_C_
134334
134335 #include <drv_conf.h>
134336 @@ -25,7 +24,7 @@
134337 #include <drv_types.h>
134338 #include <recv_osdep.h>
134339 #include <xmit_osdep.h>
134340 -#include <hal_init.h>
134341 +#include <hal_intf.h>
134342 #include <rtw_version.h>
134343
134344 #ifndef CONFIG_USB_HCI
134345 @@ -62,7 +61,7 @@ int ui_pid[3] = {0, 0, 0};
134346 extern int pm_netdev_open(struct net_device *pnetdev,u8 bnormal);
134347 static int rtw_suspend(struct usb_interface *intf, pm_message_t message);
134348 static int rtw_resume(struct usb_interface *intf);
134349 -int rtw_resume_process(struct usb_interface *pusb_intf);
134350 +int rtw_resume_process(_adapter *padapter);
134351
134352
134353 static int rtw_drv_init(struct usb_interface *pusb_intf,const struct usb_device_id *pdid);
134354 @@ -70,117 +69,142 @@ static void rtw_dev_remove(struct usb_interface *pusb_intf);
134355
134356 #define USB_VENDER_ID_REALTEK 0x0BDA
134357
134358 -//DID_USB_v82_20110808
134359 -static struct usb_device_id rtw_usb_id_tbl[] ={
134360 -#ifdef CONFIG_RTL8192C
134361 - /*=== Realtek demoboard ===*/
134362 - {USB_DEVICE(0x0BDA, 0x8191)},//Default ID
134363 -
134364 - /****** 8188CUS ********/
134365 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8176)},//8188cu 1*1 dongole
134366 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8170)},//8188CE-VAU USB minCard
134367 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817E)},//8188CE-VAU USB minCard
134368 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817A)},//8188cu Slim Solo
134369 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817B)},//8188cu Slim Combo
134370 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817D)},//8188RU High-power USB Dongle
134371 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8754)},//8188 Combo for BC4
134372 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817F)},//8188RU
134373 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x818A)},//RTL8188CUS-VL
134374 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x018A)},//RTL8188CTV
134375 -
134376 - /****** 8192CUS ********/
134377 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8177)},//8191cu 1*2
134378 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8178)},//8192cu 2*2
134379 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817C)},//8192CE-VAU USB minCard
134380 -
134381 -
134382 - /*=== Customer ID ===*/
134383 - /****** 8188CUS Dongle ********/
134384 - {USB_DEVICE(0x2019, 0xED17)},//PCI - Edimax
134385 - {USB_DEVICE(0x0DF6, 0x0052)},//Sitecom - Edimax
134386 - {USB_DEVICE(0x7392, 0x7811)},//Edimax - Edimax
134387 - {USB_DEVICE(0x07B8, 0x8189)},//Abocom - Abocom
134388 - {USB_DEVICE(0x0EB0, 0x9071)},//NO Brand - Etop
134389 - {USB_DEVICE(0x06F8, 0xE033)},//Hercules - Edimax
134390 - {USB_DEVICE(0x103C, 0x1629)},//HP - Lite-On ,8188CUS Slim Combo
134391 - {USB_DEVICE(0x2001, 0x3308)},//D-Link - Alpha
134392 - {USB_DEVICE(0x050D, 0x1102)},//Belkin - Edimax
134393 - {USB_DEVICE(0x2019, 0xAB2A)},//Planex - Abocom
134394 - {USB_DEVICE(0x20F4, 0x648B)},//TRENDnet - Cameo
134395 - {USB_DEVICE(0x4855, 0x0090)},// - Feixun
134396 - {USB_DEVICE(0x13D3, 0x3357)},// - AzureWave
134397 - {USB_DEVICE(0x0DF6, 0x005C)},//Sitecom - Edimax
134398 - {USB_DEVICE(0x0BDA, 0x5088)},//Thinkware - CC&C
134399 - {USB_DEVICE(0x4856, 0x0091)},//NetweeN - Feixun
134400 - {USB_DEVICE(0x2019, 0x4902)},//Planex - Etop
134401 - {USB_DEVICE(0x2019, 0xAB2E)},//SW-WF02-AD15 -Abocom
134402 - {USB_DEVICE(0x0846, 0x9041)},//Netgear
134403 -
134404 - /****** 8188 RU ********/
134405 - {USB_DEVICE(0x0BDA, 0x317F)},//Netcore,Netcore
134406 -
134407 - /****** 8188CE-VAU ********/
134408 - {USB_DEVICE(0x13D3, 0x3359)},// - Azwave
134409 - {USB_DEVICE(0x13D3, 0x3358)},// - Azwave
134410 -
134411 - /****** 8188CUS Slim Solo********/
134412 - {USB_DEVICE(0x04F2, 0xAFF7)},//XAVI - XAVI
134413 - {USB_DEVICE(0x04F2, 0xAFF9)},//XAVI - XAVI
134414 - {USB_DEVICE(0x04F2, 0xAFFA)},//XAVI - XAVI
134415 -
134416 - /****** 8188CUS Slim Combo ********/
134417 - {USB_DEVICE(0x04F2, 0xAFF8)},//XAVI - XAVI
134418 - {USB_DEVICE(0x04F2, 0xAFFB)},//XAVI - XAVI
134419 - {USB_DEVICE(0x04F2, 0xAFFC)},//XAVI - XAVI
134420 - {USB_DEVICE(0x2019, 0x1201)},//Planex - Vencer
134421 -
134422 - /****** 8192CUS Dongle ********/
134423 - {USB_DEVICE(0x2001, 0x3307)},//D-Link - Cameo
134424 - {USB_DEVICE(0x2001, 0x330A)},//D-Link - Alpha
134425 - {USB_DEVICE(0x2001, 0x3309)},//D-Link - Alpha
134426 - {USB_DEVICE(0x2001, 0x330D)},//D-Link - Alpha(?)
134427 - {USB_DEVICE(0x0586, 0x341F)},//Zyxel - Abocom
134428 - {USB_DEVICE(0x7392, 0x7822)},//Edimax - Edimax
134429 - {USB_DEVICE(0x2019, 0xAB2B)},//Planex - Abocom
134430 - {USB_DEVICE(0x07B8, 0x8178)},//Abocom - Abocom
134431 - {USB_DEVICE(0x07AA, 0x0056)},//ATKK - Gemtek
134432 - {USB_DEVICE(0x4855, 0x0091)},// - Feixun
134433 - {USB_DEVICE(0x2001, 0x3307)},//D-Link-Cameo
134434 - {USB_DEVICE(0x050D, 0x2102)},//Belkin - Sercomm
134435 - {USB_DEVICE(0x050D, 0x2103)},//Belkin - Edimax
134436 - {USB_DEVICE(0x20F4, 0x624D)},//TRENDnet
134437 - {USB_DEVICE(0x0DF6, 0x0061)},//Sitecom - Edimax
134438 - {USB_DEVICE(0x0B05, 0x17AB)},//ASUS - Edimax
134439 - {USB_DEVICE(0x0846, 0x9021)},//Netgear - Sercomm
134440 - {USB_DEVICE(0x0E66, 0x0019)},//Hawking,Edimax
134441 -
134442 - /****** 8192CE-VAU ********/
134443 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8186)},//Intel-Xavi( Azwave)
134444 +/* DID_USB_v915_20121224 */
134445 +#define RTL8192C_USB_IDS \
134446 + /*=== Realtek demoboard ===*/ \
134447 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8191)},/* Default ID */ \
134448 + /****** 8188CUS ********/ \
134449 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8176)},/* 8188cu 1*1 dongole */ \
134450 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8170)},/* 8188CE-VAU USB minCard */ \
134451 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817E)},/* 8188CE-VAU USB minCard */ \
134452 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817A)},/* 8188cu Slim Solo */ \
134453 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817B)},/* 8188cu Slim Combo */ \
134454 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817D)},/* 8188RU High-power USB Dongle */ \
134455 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8754)},/* 8188 Combo for BC4 */ \
134456 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817F)},/* 8188RU */ \
134457 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x818A)},/* RTL8188CUS-VL */ \
134458 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x018A)},/* RTL8188CTV */ \
134459 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x17C0)}, /* RTK demoboard - USB-N10E */ \
134460 + /****** 8192CUS ********/ \
134461 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8177)},/* 8191cu 1*2 */ \
134462 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8178)},/* 8192cu 2*2 */ \
134463 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817C)},/* 8192CE-VAU USB minCard */ \
134464 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8191)},/* 8192CU 2*2 */ \
134465 + {USB_DEVICE(0x1058, 0x0631)},/* Alpha, 8192CU */ \
134466 + /*=== Customer ID ===*/ \
134467 + /****** 8188CUS Dongle ********/ \
134468 + {USB_DEVICE(0x2019, 0xED17)},/* PCI - Edimax */ \
134469 + {USB_DEVICE(0x0DF6, 0x0052)},/* Sitecom - Edimax */ \
134470 + {USB_DEVICE(0x7392, 0x7811)},/* Edimax - Edimax */ \
134471 + {USB_DEVICE(0x07B8, 0x8189)},/* Abocom - Abocom */ \
134472 + {USB_DEVICE(0x0EB0, 0x9071)},/* NO Brand - Etop */ \
134473 + {USB_DEVICE(0x06F8, 0xE033)},/* Hercules - Edimax */ \
134474 + {USB_DEVICE(0x103C, 0x1629)},/* HP - Lite-On ,8188CUS Slim Combo */ \
134475 + {USB_DEVICE(0x2001, 0x3308)},/* D-Link - Alpha */ \
134476 + {USB_DEVICE(0x050D, 0x1102)},/* Belkin - Edimax */ \
134477 + {USB_DEVICE(0x2019, 0xAB2A)},/* Planex - Abocom */ \
134478 + {USB_DEVICE(0x20F4, 0x648B)},/* TRENDnet - Cameo */ \
134479 + {USB_DEVICE(0x4855, 0x0090)},/* - Feixun */ \
134480 + {USB_DEVICE(0x13D3, 0x3357)},/* - AzureWave */ \
134481 + {USB_DEVICE(0x0DF6, 0x005C)},/* Sitecom - Edimax */ \
134482 + {USB_DEVICE(0x0BDA, 0x5088)},/* Thinkware - CC&C */ \
134483 + {USB_DEVICE(0x4856, 0x0091)},/* NetweeN - Feixun */ \
134484 + {USB_DEVICE(0x0846, 0x9041)}, /* Netgear - Cameo */ \
134485 + {USB_DEVICE(0x2019, 0x4902)},/* Planex - Etop */ \
134486 + {USB_DEVICE(0x2019, 0xAB2E)},/* SW-WF02-AD15 -Abocom */ \
134487 + {USB_DEVICE(0x2001, 0x330B)}, /* D-LINK - T&W */ \
134488 + {USB_DEVICE(0xCDAB, 0x8010)}, /* - - compare */ \
134489 + {USB_DEVICE(0x0B05, 0x17BA)}, /* ASUS - Edimax */ \
134490 + {USB_DEVICE(0x0BDA, 0x1E1E)}, /* Intel - - */ \
134491 + {USB_DEVICE(0x04BB, 0x094c)}, /* I-O DATA - Edimax */ \
134492 + /****** 8188CTV ********/ \
134493 + {USB_DEVICE(0xCDAB, 0x8011)}, /* - - compare */ \
134494 + {USB_DEVICE(0x0BDA, 0x0A8A)}, /* Sony - Foxconn */ \
134495 + /****** 8188 RU ********/ \
134496 + {USB_DEVICE(0x0BDA, 0x317F)},/* Netcore,Netcore */ \
134497 + /****** 8188CE-VAU ********/ \
134498 + {USB_DEVICE(0x13D3, 0x3359)},/* - Azwave */ \
134499 + {USB_DEVICE(0x13D3, 0x3358)},/* - Azwave */ \
134500 + /****** 8188CUS Slim Solo********/ \
134501 + {USB_DEVICE(0x04F2, 0xAFF7)},/* XAVI - XAVI */ \
134502 + {USB_DEVICE(0x04F2, 0xAFF9)},/* XAVI - XAVI */ \
134503 + {USB_DEVICE(0x04F2, 0xAFFA)},/* XAVI - XAVI */ \
134504 + /****** 8188CUS Slim Combo ********/ \
134505 + {USB_DEVICE(0x04F2, 0xAFF8)},/* XAVI - XAVI */ \
134506 + {USB_DEVICE(0x04F2, 0xAFFB)},/* XAVI - XAVI */ \
134507 + {USB_DEVICE(0x04F2, 0xAFFC)},/* XAVI - XAVI */ \
134508 + {USB_DEVICE(0x2019, 0x1201)},/* Planex - Vencer */ \
134509 + /****** 8192CUS Dongle ********/ \
134510 + {USB_DEVICE(0x2001, 0x3307)},/* D-Link - Cameo */ \
134511 + {USB_DEVICE(0x2001, 0x330A)},/* D-Link - Alpha */ \
134512 + {USB_DEVICE(0x2001, 0x3309)},/* D-Link - Alpha */ \
134513 + {USB_DEVICE(0x0586, 0x341F)},/* Zyxel - Abocom */ \
134514 + {USB_DEVICE(0x7392, 0x7822)},/* Edimax - Edimax */ \
134515 + {USB_DEVICE(0x2019, 0xAB2B)},/* Planex - Abocom */ \
134516 + {USB_DEVICE(0x07B8, 0x8178)},/* Abocom - Abocom */ \
134517 + {USB_DEVICE(0x07AA, 0x0056)},/* ATKK - Gemtek */ \
134518 + {USB_DEVICE(0x4855, 0x0091)},/* - Feixun */ \
134519 + {USB_DEVICE(0x050D, 0x2102)},/* Belkin - Sercomm */ \
134520 + {USB_DEVICE(0x050D, 0x2103)},/* Belkin - Edimax */ \
134521 + {USB_DEVICE(0x20F4, 0x624D)},/* TRENDnet */ \
134522 + {USB_DEVICE(0x0DF6, 0x0061)},/* Sitecom - Edimax */ \
134523 + {USB_DEVICE(0x0B05, 0x17AB)},/* ASUS - Edimax */ \
134524 + {USB_DEVICE(0x0846, 0x9021)},/* Netgear - Sercomm */ \
134525 + {USB_DEVICE(0x0846, 0xF001)}, /* Netgear - Sercomm */ \
134526 + {USB_DEVICE(0x0E66, 0x0019)},/* Hawking,Edimax */ \
134527 + {USB_DEVICE(0x0E66, 0x0020)}, /* Hawking - Edimax */ \
134528 + {USB_DEVICE(0x050D, 0x1004)}, /* Belkin - Edimax */ \
134529 + {USB_DEVICE(0x0BDA, 0x2E2E)}, /* Intel - - */ \
134530 + {USB_DEVICE(0x2357, 0x0100)}, /* TP-Link - TP-Link */ \
134531 + {USB_DEVICE(0x06F8, 0xE035)}, /* Hercules - Edimax */ \
134532 + {USB_DEVICE(0x04BB, 0x0950)}, /* IO-DATA - Edimax */ \
134533 + {USB_DEVICE(0x0DF6, 0x0070)}, /* Sitecom - Edimax */ \
134534 + {USB_DEVICE(0x0789, 0x016D)}, /* LOGITEC - Edimax */ \
134535 + /****** 8192CE-VAU ********/ \
134536 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8186)},/* Intel-Xavi( Azwave) */
134537 +
134538 +#define RTL8192D_USB_IDS \
134539 + /*=== Realtek demoboard ===*/ \
134540 + /****** 8192DU ********/ \
134541 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8193)},/* 8192DU-VC */ \
134542 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8194)},/* 8192DU-VS */ \
134543 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8111)},/* Realtek 5G dongle for WiFi Display */ \
134544 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0193)},/* 8192DE-VAU */ \
134545 + {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8171)},/* 8192DU-VC */ \
134546 + /*=== Customer ID ===*/ \
134547 + /****** 8192DU-VC ********/ \
134548 + {USB_DEVICE(0x2019, 0xAB2C)},/* PCI - Abocm */ \
134549 + {USB_DEVICE(0x2019, 0x4903)},/* PCI - ETOP */ \
134550 + {USB_DEVICE(0x2019, 0x4904)},/* PCI - ETOP */ \
134551 + {USB_DEVICE(0x07B8, 0x8193)},/* Abocom - Abocom */ \
134552 + /****** 8192DU-VS ********/ \
134553 + {USB_DEVICE(0x20F4, 0x664B)}, /* TRENDnet - Cameo */ \
134554 + {USB_DEVICE(0x04DD, 0x954F)}, /* Sharp */ \
134555 + {USB_DEVICE(0x04DD, 0x96A6)}, /* Sharp */ \
134556 + {USB_DEVICE(0x050D, 0x110A)}, /* Belkin - Edimax */ \
134557 + {USB_DEVICE(0x050D, 0x1105)}, /* Belkin - Edimax */ \
134558 + {USB_DEVICE(0x050D, 0x120A)}, /* Belkin - Edimax */ \
134559 + {USB_DEVICE(0x1668, 0x8102)}, /* - */ \
134560 + {USB_DEVICE(0x0BDA, 0xE194)}, /* - Edimax */ \
134561 + /****** 8192DU-WiFi Display Dongle ********/ \
134562 + {USB_DEVICE(0x2019, 0xAB2D)},/* Planex - Abocom ,5G dongle for WiFi Display */
134563 +
134564 +#ifndef CONFIG_RTL8192C
134565 + #undef RTL8192C_USB_IDS
134566 + #define RTL8192C_USB_IDS
134567 #endif
134568 -#ifdef CONFIG_RTL8192D
134569 - /*=== Realtek demoboard ===*/
134570 - /****** 8192DU ********/
134571 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8193)},//8192DU-VC
134572 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8194)},//8192DU-VS
134573 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8111)},//Realtek 5G dongle for WiFi Display
134574 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0193)},//8192DE-VAU
134575 - {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8171)},//8192DU-VC
134576 -
134577 - /*=== Customer ID ===*/
134578 - /****** 8192DU-VC ********/
134579 - {USB_DEVICE(0x2019, 0xAB2C)},//PCI - Abocm
134580 - {USB_DEVICE(0x2019, 0x4903)},//PCI - ETOP
134581 - {USB_DEVICE(0x2019, 0x4904)},//PCI - ETOP
134582 - {USB_DEVICE(0x07B8, 0x8193)},//Abocom - Abocom
134583 -
134584 - /****** 8192DU-VS ********/
134585 - {USB_DEVICE(0x20F4, 0x664B)},//TRENDnet
134586 -
134587 - /****** 8192DU-WiFi Display Dongle ********/
134588 - {USB_DEVICE(0x2019, 0xAB2D)},//Planex - Abocom ,5G dongle for WiFi Display
134589 +#ifndef CONFIG_RTL8192D
134590 + #undef RTL8192D_USB_IDS
134591 + #define RTL8192D_USB_IDS
134592 #endif
134593 +
134594 +
134595 +static struct usb_device_id rtw_usb_id_tbl[] ={
134596 + RTL8192C_USB_IDS
134597 + RTL8192D_USB_IDS
134598 {} /* Terminating entry */
134599 };
134600 +MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl);
134601
134602 int const rtw_usb_id_len = sizeof(rtw_usb_id_tbl) / sizeof(struct usb_device_id);
134603
134604 @@ -189,7 +213,7 @@ static struct specific_device_id specific_device_id_tbl[] = {
134605 {.idVendor=USB_VENDER_ID_REALTEK, .idProduct=0x817E, .flags=SPEC_DEV_ID_DISABLE_HT},//8188CE-VAU USB minCard (b/g mode only)
134606 {.idVendor=0x0b05, .idProduct=0x1791, .flags=SPEC_DEV_ID_DISABLE_HT},
134607 {.idVendor=0x13D3, .idProduct=0x3311, .flags=SPEC_DEV_ID_DISABLE_HT},
134608 - {.idVendor=0x13D3, .idProduct=0x3359, .flags=SPEC_DEV_ID_DISABLE_HT},//Russian customer -Azwave (8188CE-VAU g mode)
134609 + {.idVendor=0x13D3, .idProduct=0x3359, .flags=SPEC_DEV_ID_DISABLE_HT},//Russian customer -Azwave (8188CE-VAU g mode)
134610 #ifdef RTK_DMP_PLATFORM
134611 {.idVendor=USB_VENDER_ID_REALTEK, .idProduct=0x8111, .flags=SPEC_DEV_ID_ASSIGN_IFNAME}, // Realtek 5G dongle for WiFi Display
134612 {.idVendor=0x2019, .idProduct=0xAB2D, .flags=SPEC_DEV_ID_ASSIGN_IFNAME}, // PCI-Abocom 5G dongle for WiFi Display
134613 @@ -197,31 +221,86 @@ static struct specific_device_id specific_device_id_tbl[] = {
134614 {}
134615 };
134616
134617 -typedef struct _driver_priv{
134618 -
134619 - struct usb_driver rtw_usb_drv;
134620 +struct rtw_usb_drv {
134621 + struct usb_driver usbdrv;
134622 int drv_registered;
134623 +};
134624
134625 -}drv_priv, *pdrv_priv;
134626 +static void rtw_dev_shutdown(struct device *dev)
134627 +{
134628 + struct usb_interface *usb_intf = container_of(dev, struct usb_interface, dev);
134629 + struct dvobj_priv *dvobj = usb_get_intfdata(usb_intf);
134630 + _adapter *adapter = dvobj->if1;
134631 + int i;
134632
134633 + DBG_871X("%s\n", __func__);
134634
134635 -static drv_priv drvpriv = {
134636 - .rtw_usb_drv.name = (char*)DRV_NAME,
134637 - .rtw_usb_drv.probe = rtw_drv_init,
134638 - .rtw_usb_drv.disconnect = rtw_dev_remove,
134639 - .rtw_usb_drv.id_table = rtw_usb_id_tbl,
134640 - .rtw_usb_drv.suspend = rtw_suspend,
134641 - .rtw_usb_drv.resume = rtw_resume,
134642 -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
134643 - .rtw_usb_drv.reset_resume = rtw_resume,
134644 -#endif
134645 -#ifdef CONFIG_AUTOSUSPEND
134646 - .rtw_usb_drv.supports_autosuspend = 1,
134647 -#endif
134648 + for (i = 0; i<dvobj->iface_nums; i++) {
134649 + adapter = dvobj->padapters[i];
134650 + adapter->bSurpriseRemoved = _TRUE;
134651 + }
134652 +
134653 + ATOMIC_SET(&dvobj->continual_urb_error, MAX_CONTINUAL_URB_ERR+1);
134654 +}
134655 +
134656 +#ifdef CONFIG_RTL8192C
134657 +static struct usb_device_id rtl8192c_usb_id_tbl[] ={
134658 + RTL8192C_USB_IDS
134659 + {} /* Terminating entry */
134660 };
134661
134662 -MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl);
134663 +struct rtw_usb_drv rtl8192c_usb_drv = {
134664 + .usbdrv.name = (char*)"rtl8192cu",
134665 + .usbdrv.probe = rtw_drv_init,
134666 + .usbdrv.disconnect = rtw_dev_remove,
134667 + .usbdrv.id_table = rtl8192c_usb_id_tbl,
134668 + .usbdrv.suspend = rtw_suspend,
134669 + .usbdrv.resume = rtw_resume,
134670 + #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
134671 + .usbdrv.reset_resume = rtw_resume,
134672 + #endif
134673 + #ifdef CONFIG_AUTOSUSPEND
134674 + .usbdrv.supports_autosuspend = 1,
134675 + #endif
134676
134677 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19))
134678 + .usbdrv.drvwrap.driver.shutdown = rtw_dev_shutdown,
134679 + #else
134680 + .usbdrv.driver.shutdown = rtw_dev_shutdown,
134681 + #endif
134682 +};
134683 +
134684 +static struct rtw_usb_drv *usb_drv = &rtl8192c_usb_drv;
134685 +#endif /* CONFIG_RTL8192C */
134686 +
134687 +#ifdef CONFIG_RTL8192D
134688 +static struct usb_device_id rtl8192d_usb_id_tbl[] ={
134689 + RTL8192D_USB_IDS
134690 + {} /* Terminating entry */
134691 +};
134692 +
134693 +struct rtw_usb_drv rtl8192d_usb_drv = {
134694 + .usbdrv.name = (char*)"rtl8192du",
134695 + .usbdrv.probe = rtw_drv_init,
134696 + .usbdrv.disconnect = rtw_dev_remove,
134697 + .usbdrv.id_table = rtl8192d_usb_id_tbl,
134698 + .usbdrv.suspend = rtw_suspend,
134699 + .usbdrv.resume = rtw_resume,
134700 + #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
134701 + .usbdrv.reset_resume = rtw_resume,
134702 + #endif
134703 + #ifdef CONFIG_AUTOSUSPEND
134704 + .usbdrv.supports_autosuspend = 1,
134705 + #endif
134706 +
134707 + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19))
134708 + .usbdrv.drvwrap.driver.shutdown = rtw_dev_shutdown,
134709 + #else
134710 + .usbdrv.driver.shutdown = rtw_dev_shutdown,
134711 + #endif
134712 +};
134713 +static struct rtw_usb_drv *usb_drv = &rtl8192d_usb_drv;
134714 +#endif /* CONFIG_RTL8192D */
134715
134716 static inline int RT_usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
134717 {
134718 @@ -263,58 +342,54 @@ static inline int RT_usb_endpoint_num(const struct usb_endpoint_descriptor *epd)
134719 return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
134720 }
134721
134722 -u8 rtw_init_intf_priv(_adapter * padapter)
134723 +static u8 rtw_init_intf_priv(struct dvobj_priv *dvobj)
134724 {
134725 - u8 rst = _SUCCESS;
134726 -
134727 + u8 rst = _SUCCESS;
134728 +
134729 #ifdef CONFIG_USB_VENDOR_REQ_MUTEX
134730 - _rtw_mutex_init(&padapter->dvobjpriv.usb_vendor_req_mutex);
134731 + _rtw_mutex_init(&dvobj->usb_vendor_req_mutex);
134732 #endif
134733
134734
134735 -#ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
134736 - padapter->dvobjpriv.usb_alloc_vendor_req_buf = rtw_zmalloc(MAX_USB_IO_CTL_SIZE);
134737 -
134738 - if (padapter->dvobjpriv.usb_alloc_vendor_req_buf == NULL){
134739 - padapter->dvobjpriv.usb_alloc_vendor_req_buf =NULL;
134740 - printk("alloc usb_vendor_req_buf failed... /n");
134741 + #ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
134742 + dvobj->usb_alloc_vendor_req_buf = rtw_zmalloc(MAX_USB_IO_CTL_SIZE);
134743 + if (dvobj->usb_alloc_vendor_req_buf == NULL) {
134744 + DBG_871X("alloc usb_vendor_req_buf failed... /n");
134745 rst = _FAIL;
134746 goto exit;
134747 }
134748 - padapter->dvobjpriv.usb_vendor_req_buf =
134749 - (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(padapter->dvobjpriv.usb_alloc_vendor_req_buf ), ALIGNMENT_UNIT);
134750 + dvobj->usb_vendor_req_buf =
134751 + (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(dvobj->usb_alloc_vendor_req_buf ), ALIGNMENT_UNIT);
134752 exit:
134753 -#endif //CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
134754 + #endif
134755
134756 return rst;
134757 -
134758 +
134759 }
134760
134761 -u8 rtw_deinit_intf_priv(_adapter * padapter)
134762 +static u8 rtw_deinit_intf_priv(struct dvobj_priv *dvobj)
134763 {
134764 - u8 rst = _SUCCESS;
134765 + u8 rst = _SUCCESS;
134766
134767 #ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
134768 - if(padapter->dvobjpriv.usb_vendor_req_buf)
134769 - {
134770 - rtw_mfree(padapter->dvobjpriv.usb_alloc_vendor_req_buf,MAX_USB_IO_CTL_SIZE);
134771 - }
134772 - #endif //CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
134773 -
134774 + if(dvobj->usb_vendor_req_buf)
134775 + rtw_mfree(dvobj->usb_alloc_vendor_req_buf, MAX_USB_IO_CTL_SIZE);
134776 + #endif
134777
134778 #ifdef CONFIG_USB_VENDOR_REQ_MUTEX
134779 - _rtw_mutex_free(&padapter->dvobjpriv.usb_vendor_req_mutex);
134780 + _rtw_mutex_free(&dvobj->usb_vendor_req_mutex);
134781 #endif
134782 -
134783 +
134784 return rst;
134785 -
134786 }
134787
134788 -static u32 usb_dvobj_init(_adapter *padapter)
134789 +static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf)
134790 {
134791 int i;
134792 u8 val8;
134793 - int status = _SUCCESS;
134794 + int status = _FAIL;
134795 + struct dvobj_priv *pdvobjpriv = NULL;
134796 + struct usb_device *pusbd;
134797 struct usb_device_descriptor *pdev_desc;
134798 struct usb_host_config *phost_conf;
134799 struct usb_config_descriptor *pconf_desc;
134800 @@ -322,78 +397,78 @@ static u32 usb_dvobj_init(_adapter *padapter)
134801 struct usb_interface_descriptor *piface_desc;
134802 struct usb_host_endpoint *phost_endp;
134803 struct usb_endpoint_descriptor *pendp_desc;
134804 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
134805 - struct usb_device *pusbd = pdvobjpriv->pusbdev;
134806 - struct usb_interface *pusb_interface = pdvobjpriv->pusbintf;
134807
134808 _func_enter_;
134809
134810 - pdvobjpriv->padapter = padapter;
134811 + if((pdvobjpriv = devobj_init()) == NULL) {
134812 + goto exit;
134813 + }
134814 +
134815 + pdvobjpriv->pusbintf = usb_intf ;
134816 + pusbd = pdvobjpriv->pusbdev = interface_to_usbdev(usb_intf);
134817 + usb_set_intfdata(usb_intf, pdvobjpriv);
134818
134819 pdvobjpriv->RtNumInPipes = 0;
134820 pdvobjpriv->RtNumOutPipes = 0;
134821
134822 - //padapter->EepromAddressSize = 6;
134823 - //pdvobjpriv->nr_endpoint = 6;
134824
134825 pdev_desc = &pusbd->descriptor;
134826 -
134827 #if 0
134828 - DBG_8192C("\n8712_usb_device_descriptor:\n");
134829 - DBG_8192C("bLength=%x\n", pdev_desc->bLength);
134830 - DBG_8192C("bDescriptorType=%x\n", pdev_desc->bDescriptorType);
134831 - DBG_8192C("bcdUSB=%x\n", pdev_desc->bcdUSB);
134832 - DBG_8192C("bDeviceClass=%x\n", pdev_desc->bDeviceClass);
134833 - DBG_8192C("bDeviceSubClass=%x\n", pdev_desc->bDeviceSubClass);
134834 - DBG_8192C("bDeviceProtocol=%x\n", pdev_desc->bDeviceProtocol);
134835 - DBG_8192C("bMaxPacketSize0=%x\n", pdev_desc->bMaxPacketSize0);
134836 - DBG_8192C("idVendor=%x\n", pdev_desc->idVendor);
134837 - DBG_8192C("idProduct=%x\n", pdev_desc->idProduct);
134838 - DBG_8192C("bcdDevice=%x\n", pdev_desc->bcdDevice);
134839 - DBG_8192C("iManufacturer=%x\n", pdev_desc->iManufacturer);
134840 - DBG_8192C("iProduct=%x\n", pdev_desc->iProduct);
134841 - DBG_8192C("iSerialNumber=%x\n", pdev_desc->iSerialNumber);
134842 - DBG_8192C("bNumConfigurations=%x\n", pdev_desc->bNumConfigurations);
134843 + DBG_871X("\n8712_usb_device_descriptor:\n");
134844 + DBG_871X("bLength=%x\n", pdev_desc->bLength);
134845 + DBG_871X("bDescriptorType=%x\n", pdev_desc->bDescriptorType);
134846 + DBG_871X("bcdUSB=%x\n", pdev_desc->bcdUSB);
134847 + DBG_871X("bDeviceClass=%x\n", pdev_desc->bDeviceClass);
134848 + DBG_871X("bDeviceSubClass=%x\n", pdev_desc->bDeviceSubClass);
134849 + DBG_871X("bDeviceProtocol=%x\n", pdev_desc->bDeviceProtocol);
134850 + DBG_871X("bMaxPacketSize0=%x\n", pdev_desc->bMaxPacketSize0);
134851 + DBG_871X("idVendor=%x\n", pdev_desc->idVendor);
134852 + DBG_871X("idProduct=%x\n", pdev_desc->idProduct);
134853 + DBG_871X("bcdDevice=%x\n", pdev_desc->bcdDevice);
134854 + DBG_871X("iManufacturer=%x\n", pdev_desc->iManufacturer);
134855 + DBG_871X("iProduct=%x\n", pdev_desc->iProduct);
134856 + DBG_871X("iSerialNumber=%x\n", pdev_desc->iSerialNumber);
134857 + DBG_871X("bNumConfigurations=%x\n", pdev_desc->bNumConfigurations);
134858 #endif
134859
134860 phost_conf = pusbd->actconfig;
134861 pconf_desc = &phost_conf->desc;
134862
134863 #if 0
134864 - DBG_8192C("\n8712_usb_configuration_descriptor:\n");
134865 - DBG_8192C("bLength=%x\n", pconf_desc->bLength);
134866 - DBG_8192C("bDescriptorType=%x\n", pconf_desc->bDescriptorType);
134867 - DBG_8192C("wTotalLength=%x\n", pconf_desc->wTotalLength);
134868 - DBG_8192C("bNumInterfaces=%x\n", pconf_desc->bNumInterfaces);
134869 - DBG_8192C("bConfigurationValue=%x\n", pconf_desc->bConfigurationValue);
134870 - DBG_8192C("iConfiguration=%x\n", pconf_desc->iConfiguration);
134871 - DBG_8192C("bmAttributes=%x\n", pconf_desc->bmAttributes);
134872 - DBG_8192C("bMaxPower=%x\n", pconf_desc->bMaxPower);
134873 + DBG_871X("\n8712_usb_configuration_descriptor:\n");
134874 + DBG_871X("bLength=%x\n", pconf_desc->bLength);
134875 + DBG_871X("bDescriptorType=%x\n", pconf_desc->bDescriptorType);
134876 + DBG_871X("wTotalLength=%x\n", pconf_desc->wTotalLength);
134877 + DBG_871X("bNumInterfaces=%x\n", pconf_desc->bNumInterfaces);
134878 + DBG_871X("bConfigurationValue=%x\n", pconf_desc->bConfigurationValue);
134879 + DBG_871X("iConfiguration=%x\n", pconf_desc->iConfiguration);
134880 + DBG_871X("bmAttributes=%x\n", pconf_desc->bmAttributes);
134881 + DBG_871X("bMaxPower=%x\n", pconf_desc->bMaxPower);
134882 #endif
134883
134884 - //DBG_8192C("\n/****** num of altsetting = (%d) ******/\n", pusb_interface->num_altsetting);
134885 + //DBG_871X("\n/****** num of altsetting = (%d) ******/\n", usb_intf->num_altsetting);
134886
134887 - phost_iface = &pusb_interface->altsetting[0];
134888 + phost_iface = &usb_intf->altsetting[0];
134889 piface_desc = &phost_iface->desc;
134890
134891 #if 0
134892 - DBG_8192C("\n8712_usb_interface_descriptor:\n");
134893 - DBG_8192C("bLength=%x\n", piface_desc->bLength);
134894 - DBG_8192C("bDescriptorType=%x\n", piface_desc->bDescriptorType);
134895 - DBG_8192C("bInterfaceNumber=%x\n", piface_desc->bInterfaceNumber);
134896 - DBG_8192C("bAlternateSetting=%x\n", piface_desc->bAlternateSetting);
134897 - DBG_8192C("bNumEndpoints=%x\n", piface_desc->bNumEndpoints);
134898 - DBG_8192C("bInterfaceClass=%x\n", piface_desc->bInterfaceClass);
134899 - DBG_8192C("bInterfaceSubClass=%x\n", piface_desc->bInterfaceSubClass);
134900 - DBG_8192C("bInterfaceProtocol=%x\n", piface_desc->bInterfaceProtocol);
134901 - DBG_8192C("iInterface=%x\n", piface_desc->iInterface);
134902 + DBG_871X("\n8712_usb_interface_descriptor:\n");
134903 + DBG_871X("bLength=%x\n", piface_desc->bLength);
134904 + DBG_871X("bDescriptorType=%x\n", piface_desc->bDescriptorType);
134905 + DBG_871X("bInterfaceNumber=%x\n", piface_desc->bInterfaceNumber);
134906 + DBG_871X("bAlternateSetting=%x\n", piface_desc->bAlternateSetting);
134907 + DBG_871X("bNumEndpoints=%x\n", piface_desc->bNumEndpoints);
134908 + DBG_871X("bInterfaceClass=%x\n", piface_desc->bInterfaceClass);
134909 + DBG_871X("bInterfaceSubClass=%x\n", piface_desc->bInterfaceSubClass);
134910 + DBG_871X("bInterfaceProtocol=%x\n", piface_desc->bInterfaceProtocol);
134911 + DBG_871X("iInterface=%x\n", piface_desc->iInterface);
134912 #endif
134913
134914 pdvobjpriv->NumInterfaces = pconf_desc->bNumInterfaces;
134915 pdvobjpriv->InterfaceNumber = piface_desc->bInterfaceNumber;
134916 pdvobjpriv->nr_endpoint = piface_desc->bNumEndpoints;
134917
134918 - //DBG_8192C("\ndump usb_endpoint_descriptor:\n");
134919 + //DBG_871X("\ndump usb_endpoint_descriptor:\n");
134920
134921 for (i = 0; i < pdvobjpriv->nr_endpoint; i++)
134922 {
134923 @@ -402,129 +477,122 @@ _func_enter_;
134924 {
134925 pendp_desc = &phost_endp->desc;
134926
134927 - DBG_8192C("\nusb_endpoint_descriptor(%d):\n", i);
134928 - DBG_8192C("bLength=%x\n",pendp_desc->bLength);
134929 - DBG_8192C("bDescriptorType=%x\n",pendp_desc->bDescriptorType);
134930 - DBG_8192C("bEndpointAddress=%x\n",pendp_desc->bEndpointAddress);
134931 - //DBG_8192C("bmAttributes=%x\n",pendp_desc->bmAttributes);
134932 - //DBG_8192C("wMaxPacketSize=%x\n",pendp_desc->wMaxPacketSize);
134933 - DBG_8192C("wMaxPacketSize=%x\n",le16_to_cpu(pendp_desc->wMaxPacketSize));
134934 - DBG_8192C("bInterval=%x\n",pendp_desc->bInterval);
134935 - //DBG_8192C("bRefresh=%x\n",pendp_desc->bRefresh);
134936 - //DBG_8192C("bSynchAddress=%x\n",pendp_desc->bSynchAddress);
134937 + DBG_871X("\nusb_endpoint_descriptor(%d):\n", i);
134938 + DBG_871X("bLength=%x\n",pendp_desc->bLength);
134939 + DBG_871X("bDescriptorType=%x\n",pendp_desc->bDescriptorType);
134940 + DBG_871X("bEndpointAddress=%x\n",pendp_desc->bEndpointAddress);
134941 + //DBG_871X("bmAttributes=%x\n",pendp_desc->bmAttributes);
134942 + //DBG_871X("wMaxPacketSize=%x\n",pendp_desc->wMaxPacketSize);
134943 + DBG_871X("wMaxPacketSize=%x\n",le16_to_cpu(pendp_desc->wMaxPacketSize));
134944 + DBG_871X("bInterval=%x\n",pendp_desc->bInterval);
134945 + //DBG_871X("bRefresh=%x\n",pendp_desc->bRefresh);
134946 + //DBG_871X("bSynchAddress=%x\n",pendp_desc->bSynchAddress);
134947
134948 if (RT_usb_endpoint_is_bulk_in(pendp_desc))
134949 {
134950 - DBG_8192C("RT_usb_endpoint_is_bulk_in = %x\n", RT_usb_endpoint_num(pendp_desc));
134951 + DBG_871X("RT_usb_endpoint_is_bulk_in = %x\n", RT_usb_endpoint_num(pendp_desc));
134952 pdvobjpriv->RtNumInPipes++;
134953 }
134954 else if (RT_usb_endpoint_is_int_in(pendp_desc))
134955 {
134956 - DBG_8192C("RT_usb_endpoint_is_int_in = %x, Interval = %x\n", RT_usb_endpoint_num(pendp_desc),pendp_desc->bInterval);
134957 + DBG_871X("RT_usb_endpoint_is_int_in = %x, Interval = %x\n", RT_usb_endpoint_num(pendp_desc),pendp_desc->bInterval);
134958 pdvobjpriv->RtNumInPipes++;
134959 }
134960 else if (RT_usb_endpoint_is_bulk_out(pendp_desc))
134961 {
134962 - DBG_8192C("RT_usb_endpoint_is_bulk_out = %x\n", RT_usb_endpoint_num(pendp_desc));
134963 + DBG_871X("RT_usb_endpoint_is_bulk_out = %x\n", RT_usb_endpoint_num(pendp_desc));
134964 pdvobjpriv->RtNumOutPipes++;
134965 }
134966 pdvobjpriv->ep_num[i] = RT_usb_endpoint_num(pendp_desc);
134967 }
134968 }
134969 -
134970 - DBG_8192C("nr_endpoint=%d, in_num=%d, out_num=%d\n\n", pdvobjpriv->nr_endpoint, pdvobjpriv->RtNumInPipes, pdvobjpriv->RtNumOutPipes);
134971
134972 - if (pusbd->speed == USB_SPEED_HIGH)
134973 - {
134974 + DBG_871X("nr_endpoint=%d, in_num=%d, out_num=%d\n\n", pdvobjpriv->nr_endpoint, pdvobjpriv->RtNumInPipes, pdvobjpriv->RtNumOutPipes);
134975 +
134976 + if (pusbd->speed == USB_SPEED_HIGH) {
134977 pdvobjpriv->ishighspeed = _TRUE;
134978 - DBG_8192C("USB_SPEED_HIGH\n");
134979 - }
134980 - else
134981 - {
134982 + DBG_871X("USB_SPEED_HIGH\n");
134983 + } else {
134984 pdvobjpriv->ishighspeed = _FALSE;
134985 - DBG_8192C("NON USB_SPEED_HIGH\n");
134986 + DBG_871X("NON USB_SPEED_HIGH\n");
134987 }
134988
134989 - //.2
134990 - if ((rtw_init_io_priv(padapter)) == _FAIL)
134991 - {
134992 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
134993 - status = _FAIL;
134994 - }
134995 -
134996 - if((rtw_init_intf_priv(padapter) )== _FAIL)
134997 - {
134998 + if (rtw_init_intf_priv(pdvobjpriv) == _FAIL) {
134999 RT_TRACE(_module_os_intfs_c_,_drv_err_,("\n Can't INIT rtw_init_intf_priv\n"));
135000 - status = _FAIL;
135001 + goto free_dvobj;
135002 }
135003
135004 //.3 misc
135005 - _rtw_init_sema(&(padapter->dvobjpriv.usb_suspend_sema), 0);
135006 + _rtw_init_sema(&(pdvobjpriv->usb_suspend_sema), 0);
135007 +
135008 + rtw_reset_continual_urb_error(pdvobjpriv);
135009
135010 - intf_read_chip_version(padapter);
135011 + usb_get_dev(pusbd);
135012
135013 - //.4 usb endpoint mapping
135014 - intf_chip_configure(padapter);
135015 + //DBG_871X("%s %d\n", __func__, ATOMIC_READ(&usb_intf->dev.kobj.kref.refcount));
135016
135017 - rtw_reset_continual_urb_error(pdvobjpriv);
135018 -
135019 -_func_exit_;
135020 + status = _SUCCESS;
135021
135022 - return status;
135023 +free_dvobj:
135024 + if (status != _SUCCESS && pdvobjpriv) {
135025 + usb_set_intfdata(usb_intf, NULL);
135026 + devobj_deinit(pdvobjpriv);
135027 + pdvobjpriv = NULL;
135028 + }
135029 +exit:
135030 +_func_exit_;
135031 + return pdvobjpriv;
135032 }
135033
135034 -static void usb_dvobj_deinit(_adapter * padapter){
135035 +static void usb_dvobj_deinit(struct usb_interface *usb_intf)
135036 +{
135037 + struct dvobj_priv *dvobj = usb_get_intfdata(usb_intf);
135038
135039 - struct dvobj_priv *pdvobjpriv=&padapter->dvobjpriv;
135040 +_func_enter_;
135041
135042 - _func_enter_;
135043 + usb_set_intfdata(usb_intf, NULL);
135044 + if (dvobj) {
135045 + //Modify condition for 92DU DMDP 2010.11.18, by Thomas
135046 + /*if ((dvobj->NumInterfaces == 1)
135047 + || ((dvobj->InterfaceNumber == 1) && (dvobj->DualMacMode == _TRUE))) {
135048 + if (interface_to_usbdev(usb_intf)->state != USB_STATE_NOTATTACHED) {
135049 + //If we didn't unplug usb dongle and remove/insert modlue, driver fails on sitesurvey for the first time when device is up .
135050 + //Reset usb port for sitesurvey fail issue. 2009.8.13, by Thomas
135051 + DBG_871X("usb attached..., try to reset usb device\n");
135052 + usb_reset_device(interface_to_usbdev(usb_intf));
135053 + }
135054 + }*/
135055 + rtw_deinit_intf_priv(dvobj);
135056 + devobj_deinit(dvobj);
135057 + }
135058
135059 - rtw_deinit_intf_priv(padapter);
135060 + //DBG_871X("%s %d\n", __func__, ATOMIC_READ(&usb_intf->dev.kobj.kref.refcount));
135061 + usb_put_dev(interface_to_usbdev(usb_intf));
135062
135063 - _func_exit_;
135064 +_func_exit_;
135065 }
135066
135067 static void decide_chip_type_by_usb_device_id(_adapter *padapter, const struct usb_device_id *pdid)
135068 {
135069 - //u32 i;
135070 - //u16 vid, pid;
135071 -
135072 padapter->chip_type = NULL_CHIP_TYPE;
135073 -
135074 - //vid = pdid->idVendor;
135075 - //pid = pdid->idProduct;
135076 -
135077 - //TODO: dynamic judge 92c or 92d according to usb vid and pid.
135078 #ifdef CONFIG_RTL8192C
135079 padapter->chip_type = RTL8188C_8192C;
135080 padapter->HardwareType = HARDWARE_TYPE_RTL8192CU;
135081 - DBG_8192C("CHIP TYPE: RTL8188C_8192C\n");
135082 + DBG_871X("CHIP TYPE: RTL8188C_8192C\n");
135083 #endif
135084
135085 #ifdef CONFIG_RTL8192D
135086 padapter->chip_type = RTL8192D;
135087 padapter->HardwareType = HARDWARE_TYPE_RTL8192DU;
135088 - DBG_8192C("CHIP TYPE: RTL8192D\n");
135089 + DBG_871X("CHIP TYPE: RTL8192D\n");
135090 #endif
135091 -
135092 }
135093
135094 static void usb_intf_start(_adapter *padapter)
135095 {
135096 -
135097 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+usb_intf_start\n"));
135098 -
135099 - if(padapter->HalFunc.inirp_init == NULL)
135100 - {
135101 - RT_TRACE(_module_os_intfs_c_,_drv_err_,("Initialize dvobjpriv.inirp_init error!!!\n"));
135102 - }
135103 - else
135104 - {
135105 - padapter->HalFunc.inirp_init(padapter);
135106 - }
135107 -
135108 + rtw_hal_inirp_init(padapter);
135109 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-usb_intf_start\n"));
135110 -
135111 }
135112
135113 static void usb_intf_stop(_adapter *padapter)
135114 @@ -541,10 +609,7 @@ static void usb_intf_stop(_adapter *padapter)
135115 }
135116
135117 //cancel in irp
135118 - if(padapter->HalFunc.inirp_deinit !=NULL)
135119 - {
135120 - padapter->HalFunc.inirp_deinit(padapter);
135121 - }
135122 + rtw_hal_inirp_deinit(padapter);
135123
135124 //cancel out irp
135125 rtw_write_port_cancel(padapter);
135126 @@ -563,9 +628,13 @@ static void rtw_dev_unload(_adapter *padapter)
135127
135128 if(padapter->bup == _TRUE)
135129 {
135130 - DBG_8192C("===> rtw_dev_unload\n");
135131 + DBG_871X("===> rtw_dev_unload\n");
135132
135133 padapter->bDriverStopped = _TRUE;
135134 + #ifdef CONFIG_XMIT_ACK
135135 + if (padapter->xmitpriv.ack_tx)
135136 + rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_DRV_STOP);
135137 + #endif
135138
135139 //s3.
135140 if(padapter->intf_stop)
135141 @@ -574,20 +643,20 @@ static void rtw_dev_unload(_adapter *padapter)
135142 }
135143
135144 //s4.
135145 - if(!padapter->pwrctrlpriv.bInternalAutoSuspend )
135146 - rtw_stop_drv_threads(padapter);
135147 + if(!padapter->pwrctrlpriv.bInternalAutoSuspend )
135148 + rtw_stop_drv_threads(padapter);
135149
135150
135151 //s5.
135152 if(padapter->bSurpriseRemoved == _FALSE)
135153 {
135154 - //DBG_8192C("r871x_dev_unload()->rtl871x_hal_deinit()\n");
135155 - #ifdef CONFIG_WOWLAN
135156 + //DBG_871X("r871x_dev_unload()->rtl871x_hal_deinit()\n");
135157 +#ifdef CONFIG_WOWLAN
135158 if((padapter->pwrctrlpriv.bSupportRemoteWakeup==_TRUE)&&(padapter->pwrctrlpriv.wowlan_mode==_TRUE)){
135159 - DBG_8192C("%s bSupportWakeOnWlan==_TRUE do not run rtw_hal_deinit()\n",__FUNCTION__);
135160 + DBG_871X("%s bSupportWakeOnWlan==_TRUE do not run rtw_hal_deinit()\n",__FUNCTION__);
135161 }
135162 else
135163 - #endif //CONFIG_WOWLAN
135164 +#endif //CONFIG_WOWLAN
135165 {
135166 rtw_hal_deinit(padapter);
135167 }
135168 @@ -595,14 +664,16 @@ static void rtw_dev_unload(_adapter *padapter)
135169 }
135170
135171 padapter->bup = _FALSE;
135172 -
135173 +#ifdef CONFIG_WOWLAN
135174 + padapter->hw_init_completed=_FALSE;
135175 +#endif //CONFIG_WOWLAN
135176 }
135177 else
135178 {
135179 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("r871x_dev_unload():padapter->bup == _FALSE\n" ));
135180 }
135181
135182 - DBG_8192C("<=== rtw_dev_unload\n");
135183 + DBG_871X("<=== rtw_dev_unload\n");
135184
135185 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-rtw_dev_unload\n"));
135186
135187 @@ -636,8 +707,8 @@ static void process_spec_devid(const struct usb_device_id *pdid)
135188 if((pdid->idVendor==vid) && (pdid->idProduct==pid) && (flags&SPEC_DEV_ID_ASSIGN_IFNAME))
135189 {
135190 extern char* ifname;
135191 - strncpy(ifname, "wlan10", 6);
135192 - //DBG_8192C("%s()-%d: ifname=%s, vid=%04X, pid=%04X\n", __FUNCTION__, __LINE__, ifname, vid, pid);
135193 + strncpy(ifname, "wlan10", 6);
135194 + //DBG_871X("%s()-%d: ifname=%s, vid=%04X, pid=%04X\n", __FUNCTION__, __LINE__, ifname, vid, pid);
135195 }
135196 #endif /* RTK_DMP_PLATFORM */
135197
135198 @@ -645,29 +716,26 @@ static void process_spec_devid(const struct usb_device_id *pdid)
135199 }
135200
135201 #ifdef SUPPORT_HW_RFOFF_DETECTED
135202 -extern u8 disconnect_hdl(_adapter *padapter, u8 *pbuf);
135203 -extern void rtw_os_indicate_disconnect( _adapter *adapter );
135204 -
135205 int rtw_hw_suspend(_adapter *padapter )
135206 {
135207 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
135208 - struct usb_interface *pusb_intf = padapter->dvobjpriv.pusbintf;
135209 - struct net_device *pnetdev=usb_get_intfdata(pusb_intf);
135210 -
135211 + struct usb_interface *pusb_intf = adapter_to_dvobj(padapter)->pusbintf;
135212 + struct net_device *pnetdev = padapter->pnetdev;
135213 +
135214 _func_enter_;
135215
135216 if((!padapter->bup) || (padapter->bDriverStopped)||(padapter->bSurpriseRemoved))
135217 {
135218 - DBG_8192C("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n",
135219 - padapter->bup, padapter->bDriverStopped,padapter->bSurpriseRemoved);
135220 + DBG_871X("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n",
135221 + padapter->bup, padapter->bDriverStopped,padapter->bSurpriseRemoved);
135222 goto error_exit;
135223 }
135224 -
135225 +
135226 if(padapter)//system suspend
135227 - {
135228 + {
135229 LeaveAllPowerSaveMode(padapter);
135230 -
135231 - DBG_8192C("==> rtw_hw_suspend\n");
135232 +
135233 + DBG_871X("==> rtw_hw_suspend\n");
135234 _enter_pwrlock(&pwrpriv->lock);
135235 pwrpriv->bips_processing = _TRUE;
135236 //padapter->net_closed = _TRUE;
135237 @@ -675,18 +743,16 @@ int rtw_hw_suspend(_adapter *padapter )
135238 if(pnetdev)
135239 {
135240 netif_carrier_off(pnetdev);
135241 - netif_stop_queue(pnetdev);
135242 + rtw_netif_stop_queue(pnetdev);
135243 }
135244
135245 //s2.
135246 - //s2-1. issue rtw_disassoc_cmd to fw
135247 - //rtw_disassoc_cmd(padapter);//donnot enqueue cmd
135248 - disconnect_hdl(padapter, NULL);
135249 -
135250 + rtw_disassoc_cmd(padapter, 500, _FALSE);
135251 +
135252 //s2-2. indicate disconnect to os
135253 //rtw_indicate_disconnect(padapter);
135254 {
135255 - struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
135256 + struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
135257
135258 if(check_fwstate(pmlmepriv, _FW_LINKED))
135259 {
135260 @@ -695,7 +761,7 @@ int rtw_hw_suspend(_adapter *padapter )
135261 rtw_led_control(padapter, LED_CTL_NO_LINK);
135262
135263 rtw_os_indicate_disconnect(padapter);
135264 -
135265 +
135266 #ifdef CONFIG_LPS
135267 //donnot enqueue cmd
135268 rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_DISCONNECT, 0);
135269 @@ -709,21 +775,21 @@ int rtw_hw_suspend(_adapter *padapter )
135270 //s2-4.
135271 rtw_free_network_queue(padapter,_TRUE);
135272 #ifdef CONFIG_IPS
135273 - rtw_ips_dev_unload(padapter);
135274 - #endif
135275 + rtw_ips_dev_unload(padapter);
135276 + #endif
135277 pwrpriv->rf_pwrstate = rf_off;
135278 - pwrpriv->bips_processing = _FALSE;
135279 + pwrpriv->bips_processing = _FALSE;
135280
135281 _exit_pwrlock(&pwrpriv->lock);
135282 }
135283 else
135284 goto error_exit;
135285 -
135286 +
135287 _func_exit_;
135288 return 0;
135289 -
135290 +
135291 error_exit:
135292 - DBG_8192C("%s, failed \n",__FUNCTION__);
135293 + DBG_871X("%s, failed \n",__FUNCTION__);
135294 return (-1);
135295
135296 }
135297 @@ -731,340 +797,304 @@ error_exit:
135298 int rtw_hw_resume(_adapter *padapter)
135299 {
135300 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
135301 - struct usb_interface *pusb_intf = padapter->dvobjpriv.pusbintf;
135302 - struct net_device *pnetdev=usb_get_intfdata(pusb_intf);
135303 + struct usb_interface *pusb_intf = adapter_to_dvobj(padapter)->pusbintf;
135304 + struct net_device *pnetdev = padapter->pnetdev;
135305
135306 _func_enter_;
135307
135308 if(padapter)//system resume
135309 - {
135310 - DBG_8192C("==> rtw_hw_resume\n");
135311 + {
135312 + DBG_871X("==> rtw_hw_resume\n");
135313 _enter_pwrlock(&pwrpriv->lock);
135314 pwrpriv->bips_processing = _TRUE;
135315 rtw_reset_drv_sw(padapter);
135316 -
135317 +
135318 if(pm_netdev_open(pnetdev,_FALSE) != 0)
135319 {
135320 _exit_pwrlock(&pwrpriv->lock);
135321 goto error_exit;
135322 }
135323
135324 - netif_device_attach(pnetdev);
135325 + netif_device_attach(pnetdev);
135326 netif_carrier_on(pnetdev);
135327
135328 - if(!netif_queue_stopped(pnetdev))
135329 - netif_start_queue(pnetdev);
135330 + if(!rtw_netif_queue_stopped(pnetdev))
135331 + rtw_netif_start_queue(pnetdev);
135332 else
135333 - netif_wake_queue(pnetdev);
135334 -
135335 + rtw_netif_wake_queue(pnetdev);
135336 +
135337 pwrpriv->bkeepfwalive = _FALSE;
135338 pwrpriv->brfoffbyhw = _FALSE;
135339 -
135340 +
135341 pwrpriv->rf_pwrstate = rf_on;
135342 - pwrpriv->bips_processing = _FALSE;
135343 -
135344 + pwrpriv->bips_processing = _FALSE;
135345 +
135346 _exit_pwrlock(&pwrpriv->lock);
135347 }
135348 else
135349 {
135350 - goto error_exit;
135351 + goto error_exit;
135352 }
135353
135354 _func_exit_;
135355 -
135356 +
135357 return 0;
135358 error_exit:
135359 - DBG_8192C("%s, Open net dev failed \n",__FUNCTION__);
135360 + DBG_871X("%s, Open net dev failed \n",__FUNCTION__);
135361 return (-1);
135362 }
135363 #endif
135364
135365 static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
135366 {
135367 - struct net_device *pnetdev=usb_get_intfdata(pusb_intf);
135368 - _adapter *padapter = (_adapter*)rtw_netdev_priv(pnetdev);
135369 + struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
135370 + _adapter *padapter = dvobj->if1;
135371 + struct net_device *pnetdev = padapter->pnetdev;
135372 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
135373 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
135374 struct usb_device *usb_dev = interface_to_usbdev(pusb_intf);
135375 - struct wowlan_ioctl_param poidparam;
135376 +#ifdef CONFIG_WOWLAN
135377 + struct wowlan_ioctl_param poidparam;
135378 +#endif // CONFIG_WOWLAN
135379 + int ret = 0;
135380 + u32 start_time = rtw_get_current_time();
135381 _func_enter_;
135382
135383 + DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
135384 +
135385 if((!padapter->bup) || (padapter->bDriverStopped)||(padapter->bSurpriseRemoved))
135386 {
135387 - DBG_8192C("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n",
135388 - padapter->bup, padapter->bDriverStopped,padapter->bSurpriseRemoved);
135389 - return 0;
135390 - }
135391 + DBG_871X("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n",
135392 + padapter->bup, padapter->bDriverStopped,padapter->bSurpriseRemoved);
135393 + goto exit;
135394 + }
135395
135396 - DBG_8192C("########### rtw_suspend #################\n");
135397 -
135398 - if(padapter)//system suspend
135399 - {
135400 - if(pwrpriv->bInternalAutoSuspend )
135401 + if(pwrpriv->bInternalAutoSuspend )
135402 + {
135403 + #ifdef CONFIG_AUTOSUSPEND
135404 + #ifdef SUPPORT_HW_RFOFF_DETECTED
135405 + // The FW command register update must after MAC and FW init ready.
135406 + if((padapter->bFWReady) && ( padapter->pwrctrlpriv.bHWPwrPindetect ) && (padapter->registrypriv.usbss_enable ))
135407 {
135408 - #ifdef CONFIG_AUTOSUSPEND
135409 - #ifdef SUPPORT_HW_RFOFF_DETECTED
135410 - // The FW command register update must after MAC and FW init ready.
135411 - if((padapter->bFWReady) && ( padapter->pwrctrlpriv.bHWPwrPindetect ) && (padapter->registrypriv.usbss_enable ))
135412 - {
135413 - u8 bOpen = _TRUE;
135414 - rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
135415 - //rtl8192c_set_FwSelectSuspend_cmd(padapter,_TRUE ,500);//note fw to support hw power down ping detect
135416 - }
135417 - #endif
135418 - #endif
135419 + u8 bOpen = _TRUE;
135420 + rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
135421 + //rtl8192c_set_FwSelectSuspend_cmd(padapter,_TRUE ,500);//note fw to support hw power down ping detect
135422 }
135423 - pwrpriv->bInSuspend = _TRUE;
135424 - rtw_cancel_all_timer(padapter);
135425 - LeaveAllPowerSaveMode(padapter);
135426 + #endif
135427 + #endif
135428 + }
135429 + pwrpriv->bInSuspend = _TRUE;
135430 + rtw_cancel_all_timer(padapter);
135431 + LeaveAllPowerSaveMode(padapter);
135432
135433 - _enter_pwrlock(&pwrpriv->lock);
135434 - //padapter->net_closed = _TRUE;
135435 - //s1.
135436 - if(pnetdev)
135437 - {
135438 - netif_carrier_off(pnetdev);
135439 - netif_stop_queue(pnetdev);
135440 - }
135441 + rtw_stop_cmd_thread(padapter);
135442 +
135443 + _enter_pwrlock(&pwrpriv->lock);
135444 + //padapter->net_closed = _TRUE;
135445 + //s1.
135446 + if(pnetdev)
135447 + {
135448 + netif_carrier_off(pnetdev);
135449 + rtw_netif_stop_queue(pnetdev);
135450 + }
135451 #ifdef CONFIG_WOWLAN
135452 - if(padapter->pwrctrlpriv.bSupportRemoteWakeup==_TRUE&&padapter->pwrctrlpriv.wowlan_mode==_TRUE){
135453 - u8 ps_mode=PS_MODE_MIN;
135454 - //set H2C command
135455 - poidparam.subcode=WOWLAN_ENABLE;
135456 - padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
135457 - padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_H2C_FW_PWRMODE, &ps_mode);
135458 - rtw_set_rpwm(padapter, PS_STATE_S2);
135459 - }
135460 - else
135461 + if(padapter->pwrctrlpriv.bSupportRemoteWakeup==_TRUE&&padapter->pwrctrlpriv.wowlan_mode==_TRUE){
135462 + u8 ps_mode=PS_MODE_MIN;
135463 + //set H2C command
135464 + poidparam.subcode=WOWLAN_ENABLE;
135465 + rtw_hal_set_hwreg(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
135466 + //rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, &ps_mode);
135467 + //rtw_set_rpwm(padapter, PS_STATE_S2);
135468 + }
135469 + else
135470 #endif //CONFIG_WOWLAN
135471 - {
135472 + {
135473 //s2.
135474 - //s2-1. issue rtw_disassoc_cmd to fw
135475 - disconnect_hdl(padapter, NULL);
135476 - //rtw_disassoc_cmd(padapter);
135477 - }
135478 -
135479 + rtw_disassoc_cmd(padapter, 0, _FALSE);
135480 + }
135481
135482 #ifdef CONFIG_LAYER2_ROAMING_RESUME
135483 - if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED) )
135484 - {
135485 - //printk("%s:%d assoc_ssid:%s\n", __FUNCTION__, __LINE__, pmlmepriv->assoc_ssid.Ssid);
135486 - DBG_871X("%s:%d %s(" MAC_FMT "), length:%d assoc_ssid.length:%d\n",__FUNCTION__, __LINE__,
135487 - pmlmepriv->cur_network.network.Ssid.Ssid,
135488 - MAC_ARG(pmlmepriv->cur_network.network.MacAddress),
135489 - pmlmepriv->cur_network.network.Ssid.SsidLength,
135490 - pmlmepriv->assoc_ssid.SsidLength);
135491 -
135492 - pmlmepriv->to_roaming = 1;
135493 + if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED) )
135494 + {
135495 + //printk("%s:%d assoc_ssid:%s\n", __FUNCTION__, __LINE__, pmlmepriv->assoc_ssid.Ssid);
135496 + DBG_871X("%s:%d %s(" MAC_FMT "), length:%d assoc_ssid.length:%d\n",__FUNCTION__, __LINE__,
135497 + pmlmepriv->cur_network.network.Ssid.Ssid,
135498 + MAC_ARG(pmlmepriv->cur_network.network.MacAddress),
135499 + pmlmepriv->cur_network.network.Ssid.SsidLength,
135500 + pmlmepriv->assoc_ssid.SsidLength);
135501 + rtw_set_roaming(padapter, 1);
135502 }
135503 #endif
135504 - //s2-2. indicate disconnect to os
135505 - rtw_indicate_disconnect(padapter);
135506 - //s2-3.
135507 - rtw_free_assoc_resources(padapter, 1);
135508 + //s2-2. indicate disconnect to os
135509 + rtw_indicate_disconnect(padapter);
135510 + //s2-3.
135511 + rtw_free_assoc_resources(padapter, 1);
135512 #ifdef CONFIG_AUTOSUSPEND
135513 - if(!pwrpriv->bInternalAutoSuspend )
135514 + if(!pwrpriv->bInternalAutoSuspend )
135515 #endif
135516 - //s2-4.
135517 - rtw_free_network_queue(padapter, _TRUE);
135518 + //s2-4.
135519 + rtw_free_network_queue(padapter, _TRUE);
135520
135521 - rtw_dev_unload(padapter);
135522 + rtw_dev_unload(padapter);
135523 #ifdef CONFIG_AUTOSUSPEND
135524 - pwrpriv->rf_pwrstate = rf_off;
135525 - pwrpriv->bips_processing = _FALSE;
135526 + pwrpriv->rf_pwrstate = rf_off;
135527 + pwrpriv->bips_processing = _FALSE;
135528 #endif
135529 - _exit_pwrlock(&pwrpriv->lock);
135530 + _exit_pwrlock(&pwrpriv->lock);
135531
135532 - if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
135533 - rtw_indicate_scan_done(padapter, 1);
135534 + if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
135535 + rtw_indicate_scan_done(padapter, 1);
135536
135537 - if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
135538 - rtw_indicate_disconnect(padapter);
135539 - }
135540 - else
135541 - goto error_exit;
135542 -
135543 - DBG_871X("########### rtw_suspend done #################\n");
135544 + if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
135545 + rtw_indicate_disconnect(padapter);
135546
135547 - _func_exit_;
135548 - return 0;
135549 -
135550 -error_exit:
135551 - DBG_871X("########### rtw_suspend fail !! #################\n");
135552 - return (-1);
135553 +exit:
135554 + DBG_871X("<=== %s return %d.............. in %dms\n", __FUNCTION__
135555 + , ret, rtw_get_passing_time_ms(start_time));
135556
135557 + _func_exit_;
135558 + return ret;
135559 }
135560
135561 static int rtw_resume(struct usb_interface *pusb_intf)
135562 {
135563 - struct net_device *pnetdev=usb_get_intfdata(pusb_intf);
135564 - _adapter *padapter = (_adapter*)rtw_netdev_priv(pnetdev);
135565 + struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
135566 + _adapter *padapter = dvobj->if1;
135567 + struct net_device *pnetdev = padapter->pnetdev;
135568 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
135569 int ret = 0;
135570 -
135571 +
135572 if(pwrpriv->bInternalAutoSuspend ){
135573 - ret = rtw_resume_process(pusb_intf);
135574 + ret = rtw_resume_process(padapter);
135575 } else {
135576 #ifdef CONFIG_RESUME_IN_WORKQUEUE
135577 rtw_resume_in_workqueue(pwrpriv);
135578 -#elif defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
135579 - if(rtw_is_earlysuspend_registered(pwrpriv)) {
135580 - //jeff: bypass resume here, do in late_resume
135581 - pwrpriv->do_late_resume = _TRUE;
135582 +#else
135583 + if (rtw_is_earlysuspend_registered(pwrpriv)
135584 + #ifdef CONFIG_WOWLAN
135585 + && !padapter->pwrctrlpriv.wowlan_mode
135586 + #endif /* CONFIG_WOWLAN */
135587 + ) {
135588 + /* jeff: bypass resume here, do in late_resume */
135589 + rtw_set_do_late_resume(pwrpriv, _TRUE);
135590 } else {
135591 - ret = rtw_resume_process(pusb_intf);
135592 + ret = rtw_resume_process(padapter);
135593 }
135594 -#else // Normal resume process
135595 - ret = rtw_resume_process(pusb_intf);
135596 -#endif //CONFIG_RESUME_IN_WORKQUEUE
135597 +#endif /* CONFIG_RESUME_IN_WORKQUEUE */
135598 }
135599 -
135600 +
135601 return ret;
135602
135603 }
135604
135605 -
135606 -int rtw_resume_process(struct usb_interface *pusb_intf)
135607 +int rtw_resume_process(_adapter *padapter)
135608 {
135609 struct net_device *pnetdev;
135610 - struct usb_device *usb_dev;
135611 - _adapter *padapter;
135612 struct pwrctrl_priv *pwrpriv;
135613 -
135614 + int ret = -1;
135615 + u32 start_time = rtw_get_current_time();
135616 _func_enter_;
135617
135618 - DBG_8192C("########### rtw_resume #################\n");
135619 + DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
135620
135621 - if(pusb_intf) {
135622 - pnetdev=usb_get_intfdata(pusb_intf);
135623 - usb_dev = interface_to_usbdev(pusb_intf);
135624 + if(padapter) {
135625 + pnetdev= padapter->pnetdev;
135626 + pwrpriv = &padapter->pwrctrlpriv;
135627 } else {
135628 - goto error_exit;
135629 + goto exit;
135630 }
135631
135632 - padapter = (_adapter*)rtw_netdev_priv(pnetdev);
135633 - pwrpriv = &padapter->pwrctrlpriv;
135634 -
135635 - if(padapter)//system resume
135636 - {
135637 - _enter_pwrlock(&pwrpriv->lock);
135638 - rtw_reset_drv_sw(padapter);
135639 - pwrpriv->bkeepfwalive = _FALSE;
135640 -
135641 - DBG_8192C("bkeepfwalive(%x)\n",pwrpriv->bkeepfwalive);
135642 - if(pm_netdev_open(pnetdev,_TRUE) != 0)
135643 - goto error_exit;
135644 + _enter_pwrlock(&pwrpriv->lock);
135645 + rtw_reset_drv_sw(padapter);
135646 + pwrpriv->bkeepfwalive = _FALSE;
135647
135648 - netif_device_attach(pnetdev);
135649 - netif_carrier_on(pnetdev);
135650 -
135651 -#ifdef CONFIG_AUTOSUSPEND
135652 - if(pwrpriv->bInternalAutoSuspend )
135653 - {
135654 - #ifdef CONFIG_AUTOSUSPEND
135655 - #ifdef SUPPORT_HW_RFOFF_DETECTED
135656 - // The FW command register update must after MAC and FW init ready.
135657 - if((padapter->bFWReady) && ( padapter->pwrctrlpriv.bHWPwrPindetect ) && (padapter->registrypriv.usbss_enable ))
135658 - {
135659 - //rtl8192c_set_FwSelectSuspend_cmd(padapter,_FALSE ,500);//note fw to support hw power down ping detect
135660 - u8 bOpen = _FALSE;
135661 - rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
135662 - }
135663 - #endif
135664 - #endif
135665 -
135666 - pwrpriv->bInternalAutoSuspend = _FALSE;
135667 - pwrpriv->brfoffbyhw = _FALSE;
135668 - {
135669 - DBG_8192C("enc_algorithm(%x),wepkeymask(%x)\n",
135670 - padapter->securitypriv.dot11PrivacyAlgrthm,pwrpriv->wepkeymask);
135671 - if( (_WEP40_ == padapter->securitypriv.dot11PrivacyAlgrthm) ||
135672 - (_WEP104_ == padapter->securitypriv.dot11PrivacyAlgrthm))
135673 - {
135674 - sint keyid;
135675 -
135676 - for(keyid=0;keyid<4;keyid++){
135677 - if(pwrpriv->wepkeymask & BIT(keyid)) {
135678 - if(keyid == padapter->securitypriv.dot11PrivacyKeyIndex)
135679 - rtw_set_key(padapter,&padapter->securitypriv, keyid, 1);
135680 - else
135681 - rtw_set_key(padapter,&padapter->securitypriv, keyid, 0);
135682 - }
135683 - }
135684 - }
135685 - }
135686 - }
135687 -#endif
135688 + DBG_871X("bkeepfwalive(%x)\n",pwrpriv->bkeepfwalive);
135689 + if(pm_netdev_open(pnetdev,_TRUE) != 0) {
135690 _exit_pwrlock(&pwrpriv->lock);
135691 + goto exit;
135692 }
135693 - else
135694 +
135695 + netif_device_attach(pnetdev);
135696 + netif_carrier_on(pnetdev);
135697 +
135698 +#ifdef CONFIG_AUTOSUSPEND
135699 + if(pwrpriv->bInternalAutoSuspend )
135700 {
135701 - goto error_exit;
135702 + #ifdef CONFIG_AUTOSUSPEND
135703 + #ifdef SUPPORT_HW_RFOFF_DETECTED
135704 + // The FW command register update must after MAC and FW init ready.
135705 + if((padapter->bFWReady) && ( padapter->pwrctrlpriv.bHWPwrPindetect ) && (padapter->registrypriv.usbss_enable ))
135706 + {
135707 + //rtl8192c_set_FwSelectSuspend_cmd(padapter,_FALSE ,500);//note fw to support hw power down ping detect
135708 + u8 bOpen = _FALSE;
135709 + rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
135710 + }
135711 + #endif
135712 + #endif
135713 +
135714 + pwrpriv->bInternalAutoSuspend = _FALSE;
135715 + pwrpriv->brfoffbyhw = _FALSE;
135716 }
135717 +#endif
135718 + _exit_pwrlock(&pwrpriv->lock);
135719
135720 if( padapter->pid[1]!=0) {
135721 DBG_871X("pid[1]:%d\n",padapter->pid[1]);
135722 rtw_signal_process(padapter->pid[1], SIGUSR2);
135723 - }
135724 + }
135725
135726 #ifdef CONFIG_LAYER2_ROAMING_RESUME
135727 rtw_roaming(padapter, NULL);
135728 - #endif
135729 -
135730 - DBG_871X("########### rtw_resume done#################\n");
135731 -
135732 - #ifdef CONFIG_RESUME_IN_WORKQUEUE
135733 - rtw_unlock_suspend();
135734 - #endif //CONFIG_RESUME_IN_WORKQUEUE
135735 -
135736 - _func_exit_;
135737 -
135738 - return 0;
135739 -error_exit:
135740 - DBG_8192C("%s, Open net dev failed \n",__FUNCTION__);
135741 + #endif
135742
135743 - DBG_871X("########### rtw_resume done with error#################\n");
135744 -
135745 + ret = 0;
135746 +exit:
135747 #ifdef CONFIG_RESUME_IN_WORKQUEUE
135748 rtw_unlock_suspend();
135749 #endif //CONFIG_RESUME_IN_WORKQUEUE
135750 -
135751 +
135752 + pwrpriv->bInSuspend = _FALSE;
135753 + DBG_871X("<=== %s return %d.............. in %dms\n", __FUNCTION__
135754 + , ret, rtw_get_passing_time_ms(start_time));
135755 +
135756 _func_exit_;
135757 -
135758 - return (-1);
135759 +
135760 + return ret;
135761 }
135762
135763 #ifdef CONFIG_AUTOSUSPEND
135764 -void autosuspend_enter(_adapter* padapter)
135765 +void autosuspend_enter(_adapter* padapter)
135766 {
135767 struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
135768 + struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
135769 +
135770 pwrpriv->bInternalAutoSuspend = _TRUE;
135771 - pwrpriv->bips_processing = _TRUE;
135772 -
135773 - DBG_8192C("==>autosuspend_enter...........\n");
135774 -
135775 + pwrpriv->bips_processing = _TRUE;
135776 +
135777 + DBG_871X("==>autosuspend_enter...........\n");
135778 +
135779 if(rf_off == pwrpriv->change_rfpwrstate )
135780 - {
135781 + {
135782 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
135783 - usb_enable_autosuspend(padapter->dvobjpriv.pusbdev);
135784 + usb_enable_autosuspend(dvobj->pusbdev);
135785 #else
135786 - padapter->dvobjpriv.pusbdev->autosuspend_disabled = 0;//autosuspend disabled by the user
135787 + dvobj->pusbdev->autosuspend_disabled = 0;//autosuspend disabled by the user
135788 #endif
135789 -
135790 +
135791 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,33))
135792 - usb_autopm_put_interface(padapter->dvobjpriv.pusbintf);
135793 - #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,20))
135794 - usb_autopm_enable(padapter->dvobjpriv.pusbintf);
135795 + usb_autopm_put_interface(dvobj->pusbintf);
135796 + #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,20))
135797 + usb_autopm_enable(dvobj->pusbintf);
135798 #else
135799 - usb_autosuspend_device(padapter->dvobjpriv.pusbdev, 1);
135800 + usb_autosuspend_device(dvobj->pusbdev, 1);
135801 #endif
135802 }
135803 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,32))
135804 - DBG_8192C("...pm_usage_cnt(%d).....\n",atomic_read(&(padapter->dvobjpriv.pusbintf->pm_usage_cnt)));
135805 + DBG_871X("...pm_usage_cnt(%d).....\n", atomic_read(&(dvobj->pusbintf->pm_usage_cnt)));
135806 #else
135807 - DBG_8192C("...pm_usage_cnt(%d).....\n",padapter->dvobjpriv.pusbintf->pm_usage_cnt);
135808 + DBG_871X("...pm_usage_cnt(%d).....\n", dvobj->pusbintf->pm_usage_cnt);
135809 #endif
135810 -
135811 +
135812 }
135813 int autoresume_enter(_adapter* padapter)
135814 {
135815 @@ -1073,156 +1103,156 @@ int autoresume_enter(_adapter* padapter)
135816 struct security_priv* psecuritypriv=&(padapter->securitypriv);
135817 struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
135818 struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
135819 -
135820 -
135821 - DBG_8192C("====> autoresume_enter \n");
135822 -
135823 + struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
135824 +
135825 +
135826 + DBG_871X("====> autoresume_enter \n");
135827 +
135828 if(rf_off == pwrpriv->rf_pwrstate )
135829 {
135830 pwrpriv->ps_flag = _FALSE;
135831 - #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,33))
135832 - if (usb_autopm_get_interface( padapter->dvobjpriv.pusbintf) < 0)
135833 + #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,33))
135834 + if (usb_autopm_get_interface(dvobj->pusbintf) < 0)
135835 {
135836 - DBG_8192C( "can't get autopm: %d\n", result);
135837 + DBG_871X( "can't get autopm: %d\n", result);
135838 result = _FAIL;
135839 goto error_exit;
135840 - }
135841 - #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,20))
135842 - usb_autopm_disable(padapter->dvobjpriv.pusbintf);
135843 + }
135844 + #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,20))
135845 + usb_autopm_disable(dvobj->pusbintf);
135846 #else
135847 - usb_autoresume_device(padapter->dvobjpriv.pusbdev, 1);
135848 + usb_autoresume_device(dvobj->pusbdev, 1);
135849 #endif
135850
135851 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,32))
135852 - DBG_8192C("...pm_usage_cnt(%d).....\n",atomic_read(&(padapter->dvobjpriv.pusbintf->pm_usage_cnt)));
135853 + DBG_871X("...pm_usage_cnt(%d).....\n", atomic_read(&(dvobj->pusbintf->pm_usage_cnt)));
135854 #else
135855 - DBG_8192C("...pm_usage_cnt(%d).....\n",padapter->dvobjpriv.pusbintf->pm_usage_cnt);
135856 - #endif
135857 + DBG_871X("...pm_usage_cnt(%d).....\n", dvobj->pusbintf->pm_usage_cnt);
135858 + #endif
135859 }
135860 - DBG_8192C("<==== autoresume_enter \n");
135861 -error_exit:
135862 + DBG_871X("<==== autoresume_enter \n");
135863 +error_exit:
135864
135865 return result;
135866 }
135867 #endif
135868
135869 -extern char* ifname;
135870 -/*
135871 - * drv_init() - a device potentially for us
135872 - *
135873 - * notes: drv_init() is called when the bus driver has located a card for us to support.
135874 - * We accept the new device by returning 0.
135875 -*/
135876 +#ifdef CONFIG_PLATFORM_RTD2880B
135877 +extern void rtd2885_wlan_netlink_sendMsg(char *action_string, char *name);
135878 +#endif
135879
135880 -_adapter *rtw_sw_export = NULL;
135881 +#ifdef CONFIG_PLATFORM_ARM_SUNxI
135882 +#include <mach/sys_config.h>
135883 +extern int sw_usb_disable_hcd(__u32 usbc_no);
135884 +extern int sw_usb_enable_hcd(__u32 usbc_no);
135885 +static int usb_wifi_host = 2;
135886 +#endif
135887
135888 -static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device_id *pdid)
135889 -{
135890 - int i;
135891 +#ifdef CONFIG_PLATFORM_ARM_SUN6I
135892 +#include <mach/sys_config.h>
135893 +extern int sw_usb_disable_hcd(__u32 usbc_no);
135894 +extern int sw_usb_enable_hcd(__u32 usbc_no);
135895 +extern void wifi_pm_power(int on);
135896 +static script_item_u item;
135897 +#endif
135898
135899 - uint status;
135900 +_adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
135901 + struct usb_interface *pusb_intf, const struct usb_device_id *pdid)
135902 +{
135903 _adapter *padapter = NULL;
135904 - struct dvobj_priv *pdvobjpriv;
135905 - struct net_device *pnetdev;
135906 + struct net_device *pnetdev = NULL;
135907 + int status = _FAIL;
135908
135909 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_init\n"));
135910 - //DBG_8192C("+rtw_drv_init\n");
135911 -
135912 - //2009.8.13, by Thomas
135913 - // In this probe function, O.S. will provide the usb interface pointer to driver.
135914 - // We have to increase the reference count of the usb device structure by using the usb_get_dev function.
135915 - usb_get_dev(interface_to_usbdev(pusb_intf));
135916 -
135917 - //step 0.
135918 - process_spec_devid(pdid);
135919 -
135920 - //step 1. set USB interface data
135921 - // init data
135922 - pnetdev = rtw_init_netdev(NULL);
135923 - if (!pnetdev)
135924 - goto error;
135925 -
135926 - SET_NETDEV_DEV(pnetdev, &pusb_intf->dev);
135927 + if ((padapter = (_adapter *)rtw_zvmalloc(sizeof(*padapter))) == NULL) {
135928 + goto exit;
135929 + }
135930 + padapter->dvobj = dvobj;
135931 + dvobj->if1 = padapter;
135932
135933 - padapter = rtw_netdev_priv(pnetdev);
135934 padapter->bDriverStopped=_TRUE;
135935 - pdvobjpriv = &padapter->dvobjpriv;
135936 - pdvobjpriv->padapter = padapter;
135937 - pdvobjpriv->pusbintf = pusb_intf ;
135938 - pdvobjpriv->pusbdev = interface_to_usbdev(pusb_intf);
135939 -
135940 -#ifdef CONFIG_IOCTL_CFG80211
135941 - rtw_wdev_alloc(padapter, &pusb_intf->dev);
135942 -#endif //CONFIG_IOCTL_CFG80211
135943 -
135944
135945 - // set data
135946 - usb_set_intfdata(pusb_intf, pnetdev);
135947 + dvobj->padapters[dvobj->iface_nums++] = padapter;
135948 + padapter->iface_id = IFACE_ID0;
135949
135950 - //set interface_type to usb
135951 - padapter->interface_type = RTW_USB;
135952 +#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT)
135953 + //set adapter_type/iface type for primary padapter
135954 + padapter->isprimary = _TRUE;
135955 + padapter->adapter_type = PRIMARY_ADAPTER;
135956 + #ifndef CONFIG_HWPORT_SWAP
135957 + padapter->iface_type = IFACE_PORT0;
135958 + #else
135959 + padapter->iface_type = IFACE_PORT1;
135960 + #endif
135961 +#endif
135962
135963 + #ifndef RTW_DVOBJ_CHIP_HW_TYPE
135964 //step 1-1., decide the chip_type via vid/pid
135965 + padapter->interface_type = RTW_USB;
135966 decide_chip_type_by_usb_device_id(padapter, pdid);
135967 + #endif
135968
135969 - //step 2.
135970 - if(padapter->chip_type == RTL8188C_8192C)
135971 - {
135972 -#ifdef CONFIG_RTL8192C
135973 - rtl8192cu_set_hal_ops(padapter);
135974 -#endif
135975 + if((pnetdev = rtw_init_netdev(padapter)) == NULL) {
135976 + goto free_adapter;
135977 }
135978 - else if(padapter->chip_type == RTL8192D)
135979 - {
135980 -#ifdef CONFIG_RTL8192D
135981 + SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj));
135982 + padapter = rtw_netdev_priv(pnetdev);
135983 +
135984 + //step 2. hook HalFunc, allocate HalData
135985 + if(padapter->chip_type == RTL8188C_8192C) {
135986 + #ifdef CONFIG_RTL8192C
135987 + rtl8192cu_set_hal_ops(padapter);
135988 + #endif
135989 + } else if(padapter->chip_type == RTL8192D) {
135990 + #ifdef CONFIG_RTL8192D
135991 rtl8192du_set_hal_ops(padapter);
135992 -#endif
135993 - }
135994 - else
135995 - {
135996 - DBG_8192C("Detect NULL_CHIP_TYPE\n");
135997 - status = _FAIL;
135998 - goto error;
135999 + #endif
136000 + } else {
136001 + DBG_871X("Detect NULL_CHIP_TYPE\n");
136002 + goto free_hal_data;
136003 }
136004
136005 - //step 3. initialize the dvobj_priv
136006 - padapter->dvobj_init=&usb_dvobj_init;
136007 - padapter->dvobj_deinit=&usb_dvobj_deinit;
136008 + //step 3.
136009 padapter->intf_start=&usb_intf_start;
136010 padapter->intf_stop=&usb_intf_stop;
136011
136012 - //step 3.
136013 - //initialize the dvobj_priv ,include Chip version
136014 - if (padapter->dvobj_init == NULL){
136015 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("\n Initialize dvobjpriv.dvobj_init error!!!\n"));
136016 - goto error;
136017 + //.2
136018 + if ((rtw_init_io_priv(padapter, usb_set_intf_ops)) == _FAIL) {
136019 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,(" \n Can't init io_reqs\n"));
136020 + goto free_hal_data;
136021 }
136022
136023 - status = padapter->dvobj_init(padapter);
136024 - if (status != _SUCCESS) {
136025 - RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("initialize device object priv Failed!\n"));
136026 - goto error;
136027 - }
136028 + rtw_hal_read_chip_version(padapter);
136029 +
136030 + //.4 usb endpoint mapping
136031 + rtw_hal_chip_configure(padapter);
136032
136033 //step 4. read efuse/eeprom data and get mac_addr
136034 - intf_read_chip_info(padapter);
136035 + rtw_hal_read_chip_info(padapter);
136036 +
136037 + if (rtw_handle_dualmac(padapter, 1) != _SUCCESS)
136038 + goto free_hal_data;
136039 +
136040 +#ifdef CONFIG_IOCTL_CFG80211
136041 + if(rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj)) != 0) {
136042 + goto handle_dualmac;
136043 + }
136044 +#endif
136045
136046 //step 5.
136047 - status = rtw_init_drv_sw(padapter);
136048 - if(status ==_FAIL){
136049 + if (rtw_init_drv_sw(padapter) == _FAIL) {
136050 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize driver software resource Failed!\n"));
136051 - goto error;
136052 + goto free_wdev;
136053 }
136054
136055 #ifdef CONFIG_PM
136056 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
136057 if(padapter->pwrctrlpriv.bSupportRemoteWakeup)
136058 {
136059 - pdvobjpriv->pusbdev->do_remote_wakeup=1;
136060 - pusb_intf->needs_remote_wakeup = 1;
136061 + dvobj->pusbdev->do_remote_wakeup=1;
136062 + pusb_intf->needs_remote_wakeup = 1;
136063 device_init_wakeup(&pusb_intf->dev, 1);
136064 - DBG_8192C("\n padapter->pwrctrlpriv.bSupportRemoteWakeup~~~~~~\n");
136065 - DBG_8192C("\n padapter->pwrctrlpriv.bSupportRemoteWakeup~~~[%d]~~~\n",device_may_wakeup(&pusb_intf->dev));
136066 + DBG_871X("\n padapter->pwrctrlpriv.bSupportRemoteWakeup~~~~~~\n");
136067 + DBG_871X("\n padapter->pwrctrlpriv.bSupportRemoteWakeup~~~[%d]~~~\n",device_may_wakeup(&pusb_intf->dev));
136068 }
136069 #endif
136070 #endif
136071 @@ -1232,101 +1262,204 @@ static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device
136072 {
136073 if(padapter->registrypriv.usbss_enable ){ /* autosuspend (2s delay) */
136074 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,38))
136075 - pdvobjpriv->pusbdev->dev.power.autosuspend_delay = 0 * HZ;//15 * HZ; idle-delay time
136076 + dvobj->pusbdev->dev.power.autosuspend_delay = 0 * HZ;//15 * HZ; idle-delay time
136077 #else
136078 - pdvobjpriv->pusbdev->autosuspend_delay = 0 * HZ;//15 * HZ; idle-delay time
136079 + dvobj->pusbdev->autosuspend_delay = 0 * HZ;//15 * HZ; idle-delay time
136080 #endif
136081
136082 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
136083 - usb_enable_autosuspend(padapter->dvobjpriv.pusbdev);
136084 + usb_enable_autosuspend(dvobj->pusbdev);
136085 #elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,22) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,34))
136086 - padapter->bDisableAutosuspend = padapter->dvobjpriv.pusbdev->autosuspend_disabled ;
136087 - padapter->dvobjpriv.pusbdev->autosuspend_disabled = 0;//autosuspend disabled by the user
136088 + padapter->bDisableAutosuspend = dvobj->pusbdev->autosuspend_disabled ;
136089 + dvobj->pusbdev->autosuspend_disabled = 0;//autosuspend disabled by the user
136090 #endif
136091
136092 - usb_autopm_get_interface(padapter->dvobjpriv.pusbintf );//init pm_usage_cnt ,let it start from 1
136093 + usb_autopm_get_interface(dvobj->pusbintf );//init pm_usage_cnt ,let it start from 1
136094
136095 #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,32))
136096 - DBG_8192C("%s...pm_usage_cnt(%d).....\n",__FUNCTION__,atomic_read(&(pdvobjpriv->pusbintf ->pm_usage_cnt)));
136097 + DBG_871X("%s...pm_usage_cnt(%d).....\n",__FUNCTION__, atomic_read(&(dvobj->pusbintf ->pm_usage_cnt)));
136098 #else
136099 - DBG_8192C("%s...pm_usage_cnt(%d).....\n",__FUNCTION__,pdvobjpriv->pusbintf ->pm_usage_cnt);
136100 - #endif
136101 + DBG_871X("%s...pm_usage_cnt(%d).....\n",__FUNCTION__, dvobj->pusbintf ->pm_usage_cnt);
136102 + #endif
136103 }
136104 - }
136105 + }
136106 #endif
136107 - // alloc dev name after read efuse.
136108 - rtw_init_netdev_name(pnetdev, ifname);
136109
136110 + // set mac addr
136111 rtw_macaddr_cfg(padapter->eeprompriv.mac_addr);
136112 + rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
136113
136114 - _rtw_memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
136115 - DBG_8192C("MAC Address from pnetdev->dev_addr= " MAC_FMT "\n", MAC_ARG(pnetdev->dev_addr));
136116 + DBG_871X("bDriverStopped:%d, bSurpriseRemoved:%d, bup:%d, hw_init_completed:%d\n"
136117 + ,padapter->bDriverStopped
136118 + ,padapter->bSurpriseRemoved
136119 + ,padapter->bup
136120 + ,padapter->hw_init_completed
136121 + );
136122
136123 + status = _SUCCESS;
136124
136125 - //step 6.
136126 - /* Tell the network stack we exist */
136127 - if (register_netdev(pnetdev) != 0) {
136128 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("register_netdev() failed\n"));
136129 - goto error;
136130 +free_wdev:
136131 + if(status != _SUCCESS) {
136132 + #ifdef CONFIG_IOCTL_CFG80211
136133 + rtw_wdev_unregister(padapter->rtw_wdev);
136134 + rtw_wdev_free(padapter->rtw_wdev);
136135 + #endif
136136 + }
136137 +handle_dualmac:
136138 + if (status != _SUCCESS)
136139 + rtw_handle_dualmac(padapter, 0);
136140 +free_hal_data:
136141 + if(status != _SUCCESS && padapter->HalData)
136142 + rtw_mfree(padapter->HalData, sizeof(*(padapter->HalData)));
136143 +free_adapter:
136144 + if (status != _SUCCESS) {
136145 + if (pnetdev)
136146 + rtw_free_netdev(pnetdev);
136147 + else if (padapter)
136148 + rtw_vmfree((u8*)padapter, sizeof(*padapter));
136149 + padapter = NULL;
136150 }
136151 +exit:
136152 + return padapter;
136153 +}
136154
136155 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-drv_init - Adapter->bDriverStopped=%d, Adapter->bSurpriseRemoved=%d\n",padapter->bDriverStopped, padapter->bSurpriseRemoved));
136156 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_drv - drv_init, success!\n"));
136157 - //DBG_8192C("-871x_drv - drv_init, success!\n");
136158 +static void rtw_usb_if1_deinit(_adapter *if1)
136159 +{
136160 + struct net_device *pnetdev = if1->pnetdev;
136161 + struct mlme_priv *pmlmepriv= &if1->mlmepriv;
136162
136163 -#ifdef CONFIG_PROC_DEBUG
136164 -#ifdef RTK_DMP_PLATFORM
136165 - rtw_proc_init_one(pnetdev);
136166 -#endif
136167 -#endif
136168 + if(check_fwstate(pmlmepriv, _FW_LINKED))
136169 + rtw_disassoc_cmd(if1, 0, _FALSE);
136170
136171 -#ifdef CONFIG_HOSTAPD_MLME
136172 - hostapd_mode_init(padapter);
136173 +#ifdef CONFIG_AP_MODE
136174 + free_mlme_ap_info(if1);
136175 + #ifdef CONFIG_HOSTAPD_MLME
136176 + hostapd_mode_unload(if1);
136177 + #endif
136178 #endif
136179
136180 + rtw_cancel_all_timer(if1);
136181 +#ifdef CONFIG_WOWLAN
136182 + if1->pwrctrlpriv.wowlan_mode=_FALSE;
136183 +#endif //CONFIG_WOWLAN
136184 + rtw_dev_unload(if1);
136185 +
136186 + DBG_871X("%s, hw_init_completed=%d\n", __func__, if1->hw_init_completed);
136187 +
136188 + //s6.
136189 + rtw_handle_dualmac(if1, 0);
136190 +
136191 +#ifdef CONFIG_IOCTL_CFG80211
136192 + if (if1->rtw_wdev)
136193 + rtw_wdev_free(if1->rtw_wdev);
136194 +#endif //CONFIG_IOCTL_CFG80211
136195 +
136196 + rtw_free_drv_sw(if1);
136197 +
136198 + if(pnetdev)
136199 + rtw_free_netdev(pnetdev);
136200 +
136201 #ifdef CONFIG_PLATFORM_RTD2880B
136202 - DBG_8192C("wlan link up\n");
136203 - rtd2885_wlan_netlink_sendMsg("linkup", "8712");
136204 + DBG_871X("wlan link down\n");
136205 + rtd2885_wlan_netlink_sendMsg("linkdown", "8712");
136206 #endif
136207
136208 +}
136209 +
136210 +/*
136211 + * drv_init() - a device potentially for us
136212 + *
136213 + * notes: drv_init() is called when the bus driver has located a card for us to support.
136214 + * We accept the new device by returning 0.
136215 +*/
136216 +
136217 +_adapter *rtw_sw_export = NULL;
136218 +
136219 +static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device_id *did)
136220 +{
136221 + int i;
136222 + uint status = _FAIL;
136223 + _adapter *if1 = NULL, *if2 = NULL;
136224 + struct dvobj_priv *dvobj = NULL;
136225 +
136226 +
136227 + RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("+rtw_drv_init\n"));
136228 +
136229 +
136230 + //step 0.
136231 + process_spec_devid(did);
136232 +
136233 + /* Initialize dvobj_priv */
136234 + if ((dvobj = usb_dvobj_init(pusb_intf)) == NULL) {
136235 + RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("initialize device object priv Failed!\n"));
136236 + goto exit;
136237 + }
136238 +
136239 + /* Initialize if1 */
136240 + if ((if1 = rtw_usb_if1_init(dvobj, pusb_intf, did)) == NULL) {
136241 + DBG_871X("rtw_usb_if1_init Failed!\n");
136242 + goto free_dvobj;
136243 + }
136244 +
136245 + /* Initialize if2 */
136246 +#ifdef CONFIG_CONCURRENT_MODE
136247 + if((if2 = rtw_drv_if2_init(if1, usb_set_intf_ops)) == NULL) {
136248 + goto free_if1;
136249 + }
136250 +#ifdef CONFIG_MULTI_VIR_IFACES
136251 + for(i=0; i<if1->registrypriv.ext_iface_num;i++)
136252 + {
136253 + if(rtw_drv_add_vir_if(if1, usb_set_intf_ops) == NULL)
136254 + {
136255 + DBG_871X("rtw_drv_add_iface failed! (%d)\n", i);
136256 + goto free_if1;
136257 + }
136258 + }
136259 +#endif //CONFIG_MULTI_VIR_IFACES
136260 +#endif
136261 +
136262 +#ifdef CONFIG_INTEL_PROXIM
136263 + rtw_sw_export=if1;
136264 +#endif
136265
136266 #ifdef CONFIG_GLOBAL_UI_PID
136267 - if(ui_pid[1]!=0) {
136268 + if (ui_pid[1]!=0) {
136269 DBG_871X("ui_pid[1]:%d\n",ui_pid[1]);
136270 rtw_signal_process(ui_pid[1], SIGUSR2);
136271 }
136272 #endif
136273 -#ifdef CONFIG_INTEL_PROXIM
136274 - rtw_sw_export=padapter;
136275 -#endif
136276 -
136277 - DBG_8192C("bDriverStopped:%d, bSurpriseRemoved:%d, bup:%d, hw_init_completed:%d\n"
136278 - ,padapter->bDriverStopped
136279 - ,padapter->bSurpriseRemoved
136280 - ,padapter->bup
136281 - ,padapter->hw_init_completed
136282 - );
136283
136284 - return 0;
136285 + //dev_alloc_name && register_netdev
136286 + if((status = rtw_drv_register_netdev(if1)) != _SUCCESS) {
136287 + goto free_if1;
136288 + }
136289
136290 -error:
136291 +#ifdef CONFIG_HOSTAPD_MLME
136292 + hostapd_mode_init(if1);
136293 +#endif
136294
136295 - usb_put_dev(interface_to_usbdev(pusb_intf));//decrease the reference count of the usb device structure if driver fail on initialzation
136296 +#ifdef CONFIG_PLATFORM_RTD2880B
136297 + DBG_871X("wlan link up\n");
136298 + rtd2885_wlan_netlink_sendMsg("linkup", "8712");
136299 +#endif
136300
136301 - usb_set_intfdata(pusb_intf, NULL);
136302 +#ifdef RTK_DMP_PLATFORM
136303 + rtw_proc_init_one(if1->pnetdev);
136304 +#endif
136305
136306 - usb_dvobj_deinit(padapter);
136307 -
136308 - if (pnetdev)
136309 - {
136310 - //unregister_netdev(pnetdev);
136311 - rtw_free_netdev(pnetdev);
136312 - }
136313 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_drv - drv_init, success!\n"));
136314
136315 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_usb - drv_init, fail!\n"));
136316 - //DBG_8192C("-871x_usb - drv_init, fail!\n");
136317 + status = _SUCCESS;
136318
136319 - return -ENODEV;
136320 +free_if1:
136321 + if (status != _SUCCESS && if1) {
136322 + rtw_usb_if1_deinit(if1);
136323 + }
136324 +free_dvobj:
136325 + if (status != _SUCCESS)
136326 + usb_dvobj_deinit(pusb_intf);
136327 +exit:
136328 + return status == _SUCCESS?0:-ENODEV;
136329 }
136330
136331 /*
136332 @@ -1335,125 +1468,70 @@ error:
136333 //rmmod module & unplug(SurpriseRemoved) will call r871xu_dev_remove() => how to recognize both
136334 static void rtw_dev_remove(struct usb_interface *pusb_intf)
136335 {
136336 - struct net_device *pnetdev=usb_get_intfdata(pusb_intf);
136337 - _adapter *padapter = (_adapter*)rtw_netdev_priv(pnetdev);
136338 - struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
136339 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
136340 - u8 bResetDevice = _FALSE;
136341 + struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
136342 + _adapter *padapter = dvobj->if1;
136343
136344 _func_exit_;
136345
136346 - usb_set_intfdata(pusb_intf, NULL);
136347 -
136348 - if(padapter)
136349 - {
136350 -
136351 -#ifdef CONFIG_IOCTL_CFG80211
136352 - struct wireless_dev *wdev = padapter->rtw_wdev;
136353 -#endif //CONFIG_IOCTL_CFG80211
136354 -
136355 - DBG_8192C("+rtw_dev_remove\n");
136356 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+dev_remove()\n"));
136357 -#if defined(CONFIG_HAS_EARLYSUSPEND ) || defined(CONFIG_ANDROID_POWER)
136358 - rtw_unregister_early_suspend(&padapter->pwrctrlpriv);
136359 -#endif
136360 - LeaveAllPowerSaveMode(padapter);
136361 + DBG_871X("+rtw_dev_remove\n");
136362 + RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+dev_remove()\n"));
136363
136364 - if(check_fwstate(pmlmepriv, _FW_LINKED))
136365 - disconnect_hdl(padapter, NULL);
136366 + dvobj->processing_dev_remove = _TRUE;
136367
136368 - if(drvpriv.drv_registered == _TRUE)
136369 - {
136370 - //DBG_8192C("r871xu_dev_remove():padapter->bSurpriseRemoved == _TRUE\n");
136371 - padapter->bSurpriseRemoved = _TRUE;
136372 - }
136373 - /*else
136374 - {
136375 - //DBG_8192C("r871xu_dev_remove():module removed\n");
136376 - padapter->hw_init_completed = _FALSE;
136377 - }*/
136378 + rtw_unregister_netdevs(dvobj);
136379
136380 -#ifdef CONFIG_AP_MODE
136381 - free_mlme_ap_info(padapter);
136382 -#ifdef CONFIG_HOSTAPD_MLME
136383 - hostapd_mode_unload(padapter);
136384 -#endif //CONFIG_HOSTAPD_MLME
136385 -#endif //CONFIG_AP_MODE
136386 + if(usb_drv->drv_registered == _TRUE)
136387 + {
136388 + //DBG_871X("r871xu_dev_remove():padapter->bSurpriseRemoved == _TRUE\n");
136389 + padapter->bSurpriseRemoved = _TRUE;
136390 + }
136391 + /*else
136392 + {
136393 + //DBG_871X("r871xu_dev_remove():module removed\n");
136394 + padapter->hw_init_completed = _FALSE;
136395 + }*/
136396
136397 - if(padapter->DriverState != DRIVER_DISAPPEAR)
136398 - {
136399 - if(pnetdev) {
136400 - unregister_netdev(pnetdev); //will call netdev_close()
136401 -#ifdef CONFIG_PROC_DEBUG
136402 - rtw_proc_remove_one(pnetdev);
136403 +#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
136404 + rtw_unregister_early_suspend(&padapter->pwrctrlpriv);
136405 #endif
136406 - }
136407 - }
136408
136409 - rtw_cancel_all_timer(padapter);
136410 -#ifdef CONFIG_WOWLAN
136411 - padapter->pwrctrlpriv.wowlan_mode=_FALSE;
136412 -#endif //CONFIG_WOWLAN
136413 - rtw_dev_unload(padapter);
136414 + rtw_pm_set_ips(padapter, IPS_NONE);
136415 + rtw_pm_set_lps(padapter, PS_MODE_ACTIVE);
136416
136417 - DBG_8192C("+r871xu_dev_remove, hw_init_completed=%d\n", padapter->hw_init_completed);
136418 + LeaveAllPowerSaveMode(padapter);
136419
136420 - //Modify condition for 92DU DMDP 2010.11.18, by Thomas
136421 - //move code to here, avoid access null pointer. 2011.05.25.
136422 - if((pdvobjpriv->NumInterfaces != 2) || (pdvobjpriv->InterfaceNumber == 1))
136423 - bResetDevice = _TRUE;
136424 +#ifdef CONFIG_CONCURRENT_MODE
136425 +#ifdef CONFIG_MULTI_VIR_IFACES
136426 + rtw_drv_stop_vir_ifaces(dvobj);
136427 +#endif //CONFIG_MULTI_VIR_IFACES
136428 + rtw_drv_if2_stop(dvobj->if2);
136429 +#endif //CONFIG_CONCURRENT_MODE
136430
136431 - //s6.
136432 - if(padapter->dvobj_deinit)
136433 - {
136434 - padapter->dvobj_deinit(padapter);
136435 - }
136436 - else
136437 - {
136438 - RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize hcipriv.hci_priv_init error!!!\n"));
136439 - }
136440 + rtw_usb_if1_deinit(padapter);
136441
136442 - //after rtw_free_drv_sw(), padapter has beed freed, don't refer to it.
136443 - rtw_free_drv_sw(padapter);
136444 -
136445 -#ifdef CONFIG_IOCTL_CFG80211
136446 - rtw_wdev_free(wdev);
136447 -#endif //CONFIG_IOCTL_CFG80211
136448 -
136449 - }
136450 +#ifdef CONFIG_CONCURRENT_MODE
136451 +#ifdef CONFIG_MULTI_VIR_IFACES
136452 + rtw_drv_free_vir_ifaces(dvobj);
136453 +#endif //CONFIG_MULTI_VIR_IFACES
136454 + rtw_drv_if2_free(dvobj->if2);
136455 +#endif //CONFIG_CONCURRENT_MODE
136456
136457 - usb_put_dev(interface_to_usbdev(pusb_intf));//decrease the reference count of the usb device structure when disconnect
136458 + usb_dvobj_deinit(pusb_intf);
136459
136460 - //If we didn't unplug usb dongle and remove/insert modlue, driver fails on sitesurvey for the first time when device is up .
136461 - //Reset usb port for sitesurvey fail issue. 2009.8.13, by Thomas
136462 - if(_TRUE == bResetDevice)
136463 - {
136464 - if(interface_to_usbdev(pusb_intf)->state != USB_STATE_NOTATTACHED)
136465 - {
136466 - DBG_8192C("usb attached..., try to reset usb device\n");
136467 - usb_reset_device(interface_to_usbdev(pusb_intf));
136468 - }
136469 - }
136470 -
136471 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-dev_remove()\n"));
136472 - DBG_8192C("-r871xu_dev_remove, done\n");
136473 + DBG_871X("-r871xu_dev_remove, done\n");
136474
136475 -#ifdef CONFIG_PLATFORM_RTD2880B
136476 - DBG_8192C("wlan link down\n");
136477 - rtd2885_wlan_netlink_sendMsg("linkdown", "8712");
136478 -#endif
136479 -#ifdef CONFIG_INTEL_PROXIM
136480 +
136481 +#ifdef CONFIG_INTEL_PROXIM
136482 rtw_sw_export=NULL;
136483 #endif
136484 - #ifdef DBG_MEM_ALLOC
136485 - rtw_dump_mem_stat ();
136486 - #endif
136487 +
136488 _func_exit_;
136489
136490 return;
136491
136492 }
136493 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
136494 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
136495 extern int console_suspend_enabled;
136496 #endif
136497
136498 @@ -1466,56 +1544,108 @@ static int __init rtw_drv_entry(void)
136499 tmp |= 0x55;
136500 writel(tmp,(volatile unsigned int*)0xb801a608);//write dummy register for 1055
136501 #endif
136502 +#ifdef CONFIG_PLATFORM_ARM_SUNxI
136503 +#ifndef CONFIG_RTL8723A
136504 + int ret = 0;
136505 + /* ----------get usb_wifi_usbc_num------------- */
136506 + ret = script_parser_fetch("usb_wifi_para", "usb_wifi_usbc_num", (int *)&usb_wifi_host, 64);
136507 + if(ret != 0){
136508 + printk("ERR: script_parser_fetch usb_wifi_usbc_num failed\n");
136509 + ret = -ENOMEM;
136510 + return ret;
136511 + }
136512 + printk("sw_usb_enable_hcd: usbc_num = %d\n", usb_wifi_host);
136513 + sw_usb_enable_hcd(usb_wifi_host);
136514 +#endif //CONFIG_RTL8723A
136515 +#endif //CONFIG_PLATFORM_ARM_SUNxI
136516 +
136517 +#ifdef CONFIG_PLATFORM_ARM_SUN6I
136518 + script_item_value_type_e type;
136519 +
136520 + type = script_get_item("wifi_para", "wifi_usbc_id", &item);
136521 + if(SCIRPT_ITEM_VALUE_TYPE_INT != type){
136522 + printk("ERR: script_get_item wifi_usbc_id failed\n");
136523 + return -ENOMEM;
136524 + }
136525
136526 + printk("sw_usb_enable_hcd: usbc_num = %d\n", item.val);
136527 + wifi_pm_power(1);
136528 + mdelay(10);
136529 + sw_usb_enable_hcd(item.val);
136530 +#endif //CONFIG_PLATFORM_ARM_SUN6I
136531
136532 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_entry\n"));
136533
136534 - DBG_871X("rtw driver version=%s \n", DRIVERVERSION);
136535 - DBG_871X("Build at: %s %s\n", __DATE__, __TIME__);
136536 -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
136537 + DBG_871X(DRV_NAME " driver version=%s\n", DRIVERVERSION);
136538 + DBG_871X("build time: %s %s\n", __DATE__, __TIME__);
136539 +
136540 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
136541 //console_suspend_enabled=0;
136542 -#endif
136543 +#endif
136544
136545 rtw_suspend_lock_init();
136546
136547 - drvpriv.drv_registered = _TRUE;
136548 - return usb_register(&drvpriv.rtw_usb_drv);
136549 + usb_drv->drv_registered = _TRUE;
136550 + return usb_register(&usb_drv->usbdrv);
136551 }
136552
136553 static void __exit rtw_drv_halt(void)
136554 {
136555 RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_halt\n"));
136556 - DBG_8192C("+rtw_drv_halt\n");
136557 + DBG_871X("+rtw_drv_halt\n");
136558 +
136559 + usb_drv->drv_registered = _FALSE;
136560 + usb_deregister(&usb_drv->usbdrv);
136561 +
136562 +#ifdef CONFIG_PLATFORM_ARM_SUNxI
136563 +#ifndef CONFIG_RTL8723A
136564 + printk("sw_usb_disable_hcd: usbc_num = %d\n", usb_wifi_host);
136565 + sw_usb_disable_hcd(usb_wifi_host);
136566 +#endif //ifndef CONFIG_RTL8723A
136567 +#endif //CONFIG_PLATFORM_ARM_SUNxI
136568 +#ifdef CONFIG_PLATFORM_ARM_SUN6I
136569 + sw_usb_disable_hcd(item.val);
136570 + wifi_pm_power(0);
136571 +#endif
136572
136573 rtw_suspend_lock_uninit();
136574 + DBG_871X("-rtw_drv_halt\n");
136575
136576 - drvpriv.drv_registered = _FALSE;
136577 - usb_deregister(&drvpriv.rtw_usb_drv);
136578 - DBG_8192C("-rtw_drv_halt\n");
136579 + rtw_mstat_dump();
136580 }
136581
136582
136583 module_init(rtw_drv_entry);
136584 module_exit(rtw_drv_halt);
136585
136586 +#ifdef CONFIG_WOWLAN
136587 +#ifdef CONFIG_WOWLAN_MANUAL
136588 +
136589 +int rtw_resume_toshiba(PADAPTER Adapter)
136590 +{
136591 + struct dvobj_priv *pdvobjpriv;
136592 + pdvobjpriv = adapter_to_dvobj(Adapter);
136593
136594 -/*
136595 -init (driver module)-> r8712u_drv_entry
136596 -probe (sd device)-> r871xu_drv_init(dev_init)
136597 -open (net_device) ->netdev_open
136598 -close (net_device) ->netdev_close
136599 -remove (sd device) ->r871xu_dev_remove
136600 -exit (driver module)-> r8712u_drv_halt
136601 -*/
136602 + rtw_resume(pdvobjpriv->pusbintf);
136603 + return 0;
136604 +}
136605
136606 +int rtw_suspend_toshiba(PADAPTER Adapter)
136607 +{
136608 + pm_message_t msg;
136609 + struct dvobj_priv *pdvobjpriv;
136610 + pdvobjpriv = adapter_to_dvobj(Adapter);
136611 + msg.event=0;
136612 + //for Toshiba only, they should call rtw_suspend before suspend
136613 + rtw_suspend(pdvobjpriv->pusbintf, msg);
136614 + return 0;
136615 +}
136616 +EXPORT_SYMBOL(rtw_suspend_toshiba);
136617 +EXPORT_SYMBOL(rtw_resume_toshiba);
136618 +#endif //CONFIG_WOWLAN_MANUAL
136619 +#endif //CONFIG_WOWLAN
136620
136621 -/*
136622 -r8711s_drv_entry()
136623 -r8711u_drv_entry()
136624 -r8712s_drv_entry()
136625 -r8712u_drv_entry()
136626 -*/
136627 -#ifdef CONFIG_INTEL_PROXIM
136628 +#ifdef CONFIG_INTEL_PROXIM
136629 _adapter *rtw_usb_get_sw_pointer(void)
136630 {
136631 return rtw_sw_export;
136632 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c
136633 new file mode 100644
136634 index 0000000..f54cfb4
136635 --- /dev/null
136636 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c
136637 @@ -0,0 +1,649 @@
136638 +/******************************************************************************
136639 + *
136640 + * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
136641 + *
136642 + * This program is free software; you can redistribute it and/or modify it
136643 + * under the terms of version 2 of the GNU General Public License as
136644 + * published by the Free Software Foundation.
136645 + *
136646 + * This program is distributed in the hope that it will be useful, but WITHOUT
136647 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
136648 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
136649 + * more details.
136650 + *
136651 + * You should have received a copy of the GNU General Public License along with
136652 + * this program; if not, write to the Free Software Foundation, Inc.,
136653 + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
136654 + *
136655 + *******************************************************************************/
136656 +#define _USB_OPS_LINUX_C_
136657 +
136658 +#include <drv_types.h>
136659 +#include <usb_ops_linux.h>
136660 +#include <rtw_sreset.h>
136661 +
136662 +#ifdef CONFIG_USB_SUPPORT_ASYNC_VDN_REQ
136663 +static void _usbctrl_vendorreq_async_callback(struct urb *urb, struct pt_regs *regs)
136664 +{
136665 + if (urb) {
136666 + if (urb->context) {
136667 + rtw_mfree(urb->context);
136668 + }
136669 + usb_free_urb(urb);
136670 + }
136671 +}
136672 +
136673 +static int _usbctrl_vendorreq_async_write(struct usb_device *udev, u8 request,
136674 + u16 value, u16 index, void *pdata, u16 len, u8 requesttype)
136675 +{
136676 + int rc;
136677 + unsigned int pipe;
136678 + u8 reqtype;
136679 + struct usb_ctrlrequest *dr;
136680 + struct urb *urb;
136681 + struct rtl819x_async_write_data {
136682 + u8 data[VENDOR_CMD_MAX_DATA_LEN];
136683 + struct usb_ctrlrequest dr;
136684 + } *buf;
136685 +
136686 +
136687 + if (requesttype == VENDOR_READ) {
136688 + pipe = usb_rcvctrlpipe(udev, 0);//read_in
136689 + reqtype = REALTEK_USB_VENQT_READ;
136690 + }
136691 + else {
136692 + pipe = usb_sndctrlpipe(udev, 0);//write_out
136693 + reqtype = REALTEK_USB_VENQT_WRITE;
136694 + }
136695 +
136696 + buf = (struct rtl819x_async_write_data *)rtw_zmalloc(sizeof(*buf));
136697 + if (!buf) {
136698 + rc = -ENOMEM;
136699 + goto exit;
136700 + }
136701 +
136702 + urb = usb_alloc_urb(0, GFP_ATOMIC);
136703 + if (!urb) {
136704 + rtw_mfree((u8*)buf, sizeof(*buf));
136705 + rc = -ENOMEM;
136706 + goto exit;
136707 + }
136708 +
136709 + dr = &buf->dr;
136710 +
136711 + dr->bRequestType = reqtype;
136712 + dr->bRequest = request;
136713 + dr->wValue = cpu_to_le16(value);
136714 + dr->wIndex = cpu_to_le16(index);
136715 + dr->wLength = cpu_to_le16(len);
136716 +
136717 + _rtw_memcpy(buf, pdata, len);
136718 +
136719 + usb_fill_control_urb(urb, udev, pipe, (unsigned char *)dr, buf, len,
136720 + _usbctrl_vendorreq_async_callback, buf);
136721 +
136722 + rc = usb_submit_urb(urb, GFP_ATOMIC);
136723 + if (rc < 0) {
136724 + rtw_mfree((u8*)buf, sizeof(*buf));
136725 + usb_free_urb(urb);
136726 + }
136727 +
136728 +exit:
136729 + return rc;
136730 +}
136731 +
136732 +int usb_write_async(struct usb_device *udev, u32 addr, void *pdata, u16 len)
136733 +{
136734 + u8 request;
136735 + u8 requesttype;
136736 + u16 wvalue;
136737 + u16 index;
136738 +
136739 + int ret;
136740 +
136741 + requesttype = VENDOR_WRITE;//write_out
136742 + request = REALTEK_USB_VENQT_CMD_REQ;
136743 + index = REALTEK_USB_VENQT_CMD_IDX;//n/a
136744 +
136745 + wvalue = (u16)(addr&0x0000ffff);
136746 +
136747 + ret = _usbctrl_vendorreq_async_write(udev, request, wvalue, index, pdata, len, requesttype);
136748 +
136749 + return ret;
136750 +}
136751 +
136752 +int usb_async_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val)
136753 +{
136754 + u8 data;
136755 + int ret;
136756 + struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
136757 + struct usb_device *udev=pdvobjpriv->pusbdev;
136758 +
136759 + _func_enter_;
136760 + data = val;
136761 + ret = usb_write_async(udev, addr, &data, 1);
136762 + _func_exit_;
136763 +
136764 + return ret;
136765 +}
136766 +
136767 +int usb_async_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val)
136768 +{
136769 + u16 data;
136770 + int ret;
136771 + struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
136772 + struct usb_device *udev=pdvobjpriv->pusbdev;
136773 +
136774 + _func_enter_;
136775 + data = val;
136776 + ret = usb_write_async(udev, addr, &data, 2);
136777 + _func_exit_;
136778 +
136779 + return ret;
136780 +}
136781 +
136782 +int usb_async_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
136783 +{
136784 + u32 data;
136785 + int ret;
136786 + struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
136787 + struct usb_device *udev=pdvobjpriv->pusbdev;
136788 +
136789 + _func_enter_;
136790 + data = val;
136791 + ret = usb_write_async(udev, addr, &data, 4);
136792 + _func_exit_;
136793 +
136794 + return ret;
136795 +}
136796 +#endif /* CONFIG_USB_SUPPORT_ASYNC_VDN_REQ */
136797 +
136798 +unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr)
136799 +{
136800 + unsigned int pipe=0;
136801 + int ep_num=0;
136802 + _adapter *padapter = pdvobj->if1;
136803 + struct usb_device *pusbd = pdvobj->pusbdev;
136804 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
136805 +
136806 + if (addr == RECV_BULK_IN_ADDR) {
136807 + pipe=usb_rcvbulkpipe(pusbd, pHalData->RtBulkInPipe);
136808 +
136809 + } else if (addr == RECV_INT_IN_ADDR) {
136810 + pipe=usb_rcvbulkpipe(pusbd, pHalData->RtIntInPipe);
136811 +
136812 + } else if (addr < HW_QUEUE_ENTRY) {
136813 + ep_num = pHalData->Queue2EPNum[addr];
136814 + pipe = usb_sndbulkpipe(pusbd, ep_num);
136815 + }
136816 +
136817 + return pipe;
136818 +}
136819 +
136820 +struct zero_bulkout_context{
136821 + void *pbuf;
136822 + void *purb;
136823 + void *pirp;
136824 + void *padapter;
136825 +};
136826 +
136827 +static void usb_bulkout_zero_complete(struct urb *purb, struct pt_regs *regs)
136828 +{
136829 + struct zero_bulkout_context *pcontext = (struct zero_bulkout_context *)purb->context;
136830 +
136831 + //DBG_8192C("+usb_bulkout_zero_complete\n");
136832 +
136833 + if(pcontext)
136834 + {
136835 + if(pcontext->pbuf)
136836 + {
136837 + rtw_mfree(pcontext->pbuf, sizeof(int));
136838 + }
136839 +
136840 + if(pcontext->purb && (pcontext->purb==purb))
136841 + {
136842 + usb_free_urb(pcontext->purb);
136843 + }
136844 +
136845 +
136846 + rtw_mfree((u8*)pcontext, sizeof(struct zero_bulkout_context));
136847 + }
136848 +
136849 +
136850 +}
136851 +
136852 +static u32 usb_bulkout_zero(struct intf_hdl *pintfhdl, u32 addr)
136853 +{
136854 + int pipe, status, len;
136855 + u32 ret;
136856 + unsigned char *pbuf;
136857 + struct zero_bulkout_context *pcontext;
136858 + PURB purb = NULL;
136859 + _adapter *padapter = (_adapter *)pintfhdl->padapter;
136860 + struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
136861 + struct usb_device *pusbd = pdvobj->pusbdev;
136862 +
136863 + //DBG_871X("%s\n", __func__);
136864 +
136865 +
136866 + if((padapter->bDriverStopped) || (padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx))
136867 + {
136868 + return _FAIL;
136869 + }
136870 +
136871 +
136872 + pcontext = (struct zero_bulkout_context *)rtw_zmalloc(sizeof(struct zero_bulkout_context));
136873 +
136874 + pbuf = (unsigned char *)rtw_zmalloc(sizeof(int));
136875 + purb = usb_alloc_urb(0, GFP_ATOMIC);
136876 +
136877 + len = 0;
136878 + pcontext->pbuf = pbuf;
136879 + pcontext->purb = purb;
136880 + pcontext->pirp = NULL;
136881 + pcontext->padapter = padapter;
136882 +
136883 +
136884 + //translate DMA FIFO addr to pipehandle
136885 + //pipe = ffaddr2pipehdl(pdvobj, addr);
136886 +
136887 + usb_fill_bulk_urb(purb, pusbd, pipe,
136888 + pbuf,
136889 + len,
136890 + usb_bulkout_zero_complete,
136891 + pcontext);//context is pcontext
136892 +
136893 + status = usb_submit_urb(purb, GFP_ATOMIC);
136894 +
136895 + if (!status)
136896 + {
136897 + ret= _SUCCESS;
136898 + }
136899 + else
136900 + {
136901 + ret= _FAIL;
136902 + }
136903 +
136904 +
136905 + return _SUCCESS;
136906 +
136907 +}
136908 +
136909 +void usb_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
136910 +{
136911 +
136912 +}
136913 +
136914 +void usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
136915 +{
136916 +
136917 +}
136918 +
136919 +
136920 +void usb_read_port_cancel(struct intf_hdl *pintfhdl)
136921 +{
136922 + int i;
136923 + struct recv_buf *precvbuf;
136924 + _adapter *padapter = pintfhdl->padapter;
136925 + precvbuf = (struct recv_buf *)padapter->recvpriv.precv_buf;
136926 +
136927 + DBG_871X("%s\n", __func__);
136928 +
136929 + padapter->bReadPortCancel = _TRUE;
136930 +
136931 + for (i=0; i < NR_RECVBUFF ; i++) {
136932 +
136933 + precvbuf->reuse = _TRUE;
136934 + if (precvbuf->purb) {
136935 + //DBG_8192C("usb_read_port_cancel : usb_kill_urb \n");
136936 + usb_kill_urb(precvbuf->purb);
136937 + }
136938 + precvbuf++;
136939 + }
136940 +
136941 +#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
136942 + usb_kill_urb(padapter->recvpriv.int_in_urb);
136943 +#endif
136944 +}
136945 +
136946 +static void usb_write_port_complete(struct urb *purb, struct pt_regs *regs)
136947 +{
136948 + _irqL irqL;
136949 + int i;
136950 + struct xmit_buf *pxmitbuf = (struct xmit_buf *)purb->context;
136951 + //struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
136952 + //_adapter *padapter = pxmitframe->padapter;
136953 + _adapter *padapter = pxmitbuf->padapter;
136954 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
136955 + //struct pkt_attrib *pattrib = &pxmitframe->attrib;
136956 +
136957 +_func_enter_;
136958 +
136959 + switch(pxmitbuf->flags)
136960 + {
136961 + case VO_QUEUE_INX:
136962 + pxmitpriv->voq_cnt--;
136963 + break;
136964 + case VI_QUEUE_INX:
136965 + pxmitpriv->viq_cnt--;
136966 + break;
136967 + case BE_QUEUE_INX:
136968 + pxmitpriv->beq_cnt--;
136969 + break;
136970 + case BK_QUEUE_INX:
136971 + pxmitpriv->bkq_cnt--;
136972 + break;
136973 + case HIGH_QUEUE_INX:
136974 +#ifdef CONFIG_AP_MODE
136975 + rtw_chk_hi_queue_cmd(padapter);
136976 +#endif
136977 + break;
136978 + default:
136979 + break;
136980 + }
136981 +
136982 +
136983 +/*
136984 + _enter_critical(&pxmitpriv->lock, &irqL);
136985 +
136986 + pxmitpriv->txirp_cnt--;
136987 +
136988 + switch(pattrib->priority)
136989 + {
136990 + case 1:
136991 + case 2:
136992 + pxmitpriv->bkq_cnt--;
136993 + //DBG_8192C("pxmitpriv->bkq_cnt=%d\n", pxmitpriv->bkq_cnt);
136994 + break;
136995 + case 4:
136996 + case 5:
136997 + pxmitpriv->viq_cnt--;
136998 + //DBG_8192C("pxmitpriv->viq_cnt=%d\n", pxmitpriv->viq_cnt);
136999 + break;
137000 + case 6:
137001 + case 7:
137002 + pxmitpriv->voq_cnt--;
137003 + //DBG_8192C("pxmitpriv->voq_cnt=%d\n", pxmitpriv->voq_cnt);
137004 + break;
137005 + case 0:
137006 + case 3:
137007 + default:
137008 + pxmitpriv->beq_cnt--;
137009 + //DBG_8192C("pxmitpriv->beq_cnt=%d\n", pxmitpriv->beq_cnt);
137010 + break;
137011 +
137012 + }
137013 +
137014 + _exit_critical(&pxmitpriv->lock, &irqL);
137015 +
137016 +
137017 + if(pxmitpriv->txirp_cnt==0)
137018 + {
137019 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: txirp_cnt== 0, set allrxreturnevt!\n"));
137020 + _rtw_up_sema(&(pxmitpriv->tx_retevt));
137021 + }
137022 +*/
137023 + //rtw_free_xmitframe(pxmitpriv, pxmitframe);
137024 +
137025 + if(padapter->bSurpriseRemoved || padapter->bDriverStopped ||padapter->bWritePortCancel)
137026 + {
137027 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)", padapter->bDriverStopped, padapter->bSurpriseRemoved));
137028 + DBG_8192C("%s(): TX Warning! bDriverStopped(%d) OR bSurpriseRemoved(%d) bWritePortCancel(%d) pxmitbuf->ext_tag(%x) \n",
137029 + __FUNCTION__,padapter->bDriverStopped, padapter->bSurpriseRemoved,padapter->bReadPortCancel,pxmitbuf->ext_tag);
137030 +
137031 + goto check_completion;
137032 + }
137033 +
137034 +
137035 + if (purb->status==0) {
137036 +
137037 + } else {
137038 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete : purb->status(%d) != 0 \n", purb->status));
137039 + DBG_871X("###=> urb_write_port_complete status(%d)\n",purb->status);
137040 + if((purb->status==-EPIPE)||(purb->status==-EPROTO))
137041 + {
137042 + //usb_clear_halt(pusbdev, purb->pipe);
137043 + //msleep(10);
137044 + sreset_set_wifi_error_status(padapter, USB_WRITE_PORT_FAIL);
137045 + } else if (purb->status == -EINPROGRESS) {
137046 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: EINPROGESS\n"));
137047 + goto check_completion;
137048 +
137049 + } else if (purb->status == -ENOENT) {
137050 + DBG_871X("%s: -ENOENT\n", __func__);
137051 + goto check_completion;
137052 +
137053 + } else if (purb->status == -ECONNRESET) {
137054 + DBG_871X("%s: -ECONNRESET\n", __func__);
137055 + goto check_completion;
137056 +
137057 + } else if (purb->status == -ESHUTDOWN) {
137058 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: ESHUTDOWN\n"));
137059 + padapter->bDriverStopped=_TRUE;
137060 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bDriverStopped=TRUE\n"));
137061 +
137062 + goto check_completion;
137063 + }
137064 + else
137065 + {
137066 + padapter->bSurpriseRemoved=_TRUE;
137067 + DBG_8192C("bSurpriseRemoved=TRUE\n");
137068 + //rtl8192cu_trigger_gpio_0(padapter);
137069 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bSurpriseRemoved=TRUE\n"));
137070 +
137071 + goto check_completion;
137072 + }
137073 + }
137074 +
137075 + #ifdef DBG_CONFIG_ERROR_DETECT
137076 + {
137077 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
137078 + pHalData->srestpriv.last_tx_complete_time = rtw_get_current_time();
137079 + }
137080 + #endif
137081 +
137082 +check_completion:
137083 + _enter_critical(&pxmitpriv->lock_sctx, &irqL);
137084 + rtw_sctx_done_err(&pxmitbuf->sctx,
137085 + purb->status ? RTW_SCTX_DONE_WRITE_PORT_ERR : RTW_SCTX_DONE_SUCCESS);
137086 + _exit_critical(&pxmitpriv->lock_sctx, &irqL);
137087 +
137088 + rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
137089 +
137090 + //if(rtw_txframes_pending(padapter))
137091 + {
137092 + tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
137093 + }
137094 +
137095 +_func_exit_;
137096 +
137097 +}
137098 +
137099 +u32 usb_write_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
137100 +{
137101 + _irqL irqL;
137102 + unsigned int pipe;
137103 + int status;
137104 + u32 ret = _FAIL, bwritezero = _FALSE;
137105 + PURB purb = NULL;
137106 + _adapter *padapter = (_adapter *)pintfhdl->padapter;
137107 + struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
137108 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
137109 + struct xmit_buf *pxmitbuf = (struct xmit_buf *)wmem;
137110 + struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
137111 + struct usb_device *pusbd = pdvobj->pusbdev;
137112 + struct pkt_attrib *pattrib = &pxmitframe->attrib;
137113 +
137114 +_func_enter_;
137115 +
137116 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("+usb_write_port\n"));
137117 +
137118 + if ((padapter->bDriverStopped) || (padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx)) {
137119 + #ifdef DBG_TX
137120 + DBG_871X(" DBG_TX %s:%d bDriverStopped%d, bSurpriseRemoved:%d, pnp_bstop_trx:%d\n",__FUNCTION__, __LINE__
137121 + ,padapter->bDriverStopped, padapter->bSurpriseRemoved, padapter->pwrctrlpriv.pnp_bstop_trx );
137122 + #endif
137123 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port:( padapter->bDriverStopped ||padapter->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n"));
137124 + rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_TX_DENY);
137125 + goto exit;
137126 + }
137127 +
137128 + _enter_critical(&pxmitpriv->lock, &irqL);
137129 +
137130 + switch(addr)
137131 + {
137132 + case VO_QUEUE_INX:
137133 + pxmitpriv->voq_cnt++;
137134 + pxmitbuf->flags = VO_QUEUE_INX;
137135 + break;
137136 + case VI_QUEUE_INX:
137137 + pxmitpriv->viq_cnt++;
137138 + pxmitbuf->flags = VI_QUEUE_INX;
137139 + break;
137140 + case BE_QUEUE_INX:
137141 + pxmitpriv->beq_cnt++;
137142 + pxmitbuf->flags = BE_QUEUE_INX;
137143 + break;
137144 + case BK_QUEUE_INX:
137145 + pxmitpriv->bkq_cnt++;
137146 + pxmitbuf->flags = BK_QUEUE_INX;
137147 + break;
137148 + case HIGH_QUEUE_INX:
137149 + pxmitbuf->flags = HIGH_QUEUE_INX;
137150 + break;
137151 + default:
137152 + pxmitbuf->flags = MGT_QUEUE_INX;
137153 + break;
137154 + }
137155 +
137156 + _exit_critical(&pxmitpriv->lock, &irqL);
137157 +
137158 + purb = pxmitbuf->pxmit_urb[0];
137159 +
137160 +#if 0
137161 + if(pdvobj->ishighspeed)
137162 + {
137163 + if(cnt> 0 && cnt%512 == 0)
137164 + {
137165 + //DBG_8192C("ishighspeed, cnt=%d\n", cnt);
137166 + bwritezero = _TRUE;
137167 + }
137168 + }
137169 + else
137170 + {
137171 + if(cnt > 0 && cnt%64 == 0)
137172 + {
137173 + //DBG_8192C("cnt=%d\n", cnt);
137174 + bwritezero = _TRUE;
137175 + }
137176 + }
137177 +#endif
137178 +
137179 + //translate DMA FIFO addr to pipehandle
137180 + pipe = ffaddr2pipehdl(pdvobj, addr);
137181 +
137182 +#ifdef CONFIG_REDUCE_USB_TX_INT
137183 + if ( (pxmitpriv->free_xmitbuf_cnt%NR_XMITBUFF == 0)
137184 + || (pxmitbuf->ext_tag == _TRUE) )
137185 + {
137186 + purb->transfer_flags &= (~URB_NO_INTERRUPT);
137187 + } else {
137188 + purb->transfer_flags |= URB_NO_INTERRUPT;
137189 + //DBG_8192C("URB_NO_INTERRUPT ");
137190 + }
137191 +#endif
137192 +
137193 +
137194 + usb_fill_bulk_urb(purb, pusbd, pipe,
137195 + pxmitframe->buf_addr, //= pxmitbuf->pbuf
137196 + cnt,
137197 + usb_write_port_complete,
137198 + pxmitbuf);//context is pxmitbuf
137199 +
137200 +#ifdef CONFIG_USE_USB_BUFFER_ALLOC_TX
137201 + purb->transfer_dma = pxmitbuf->dma_transfer_addr;
137202 + purb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
137203 + purb->transfer_flags |= URB_ZERO_PACKET;
137204 +#endif // CONFIG_USE_USB_BUFFER_ALLOC_TX
137205 +
137206 +#if 0
137207 + if (bwritezero)
137208 + {
137209 + purb->transfer_flags |= URB_ZERO_PACKET;
137210 + }
137211 +#endif
137212 +
137213 + status = usb_submit_urb(purb, GFP_ATOMIC);
137214 + if (!status) {
137215 + #ifdef DBG_CONFIG_ERROR_DETECT
137216 + {
137217 + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
137218 + pHalData->srestpriv.last_tx_time = rtw_get_current_time();
137219 + }
137220 + #endif
137221 + } else {
137222 + rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_WRITE_PORT_ERR);
137223 + DBG_871X("usb_write_port, status=%d\n", status);
137224 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port(): usb_submit_urb, status=%x\n", status));
137225 +
137226 + switch (status) {
137227 + case -ENODEV:
137228 + padapter->bDriverStopped=_TRUE;
137229 + break;
137230 + default:
137231 + break;
137232 + }
137233 + goto exit;
137234 + }
137235 +
137236 + ret= _SUCCESS;
137237 +
137238 +// Commented by Albert 2009/10/13
137239 +// We add the URB_ZERO_PACKET flag to urb so that the host will send the zero packet automatically.
137240 +/*
137241 + if(bwritezero == _TRUE)
137242 + {
137243 + usb_bulkout_zero(pintfhdl, addr);
137244 + }
137245 +*/
137246 +
137247 + RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("-usb_write_port\n"));
137248 +
137249 +exit:
137250 + if (ret != _SUCCESS)
137251 + rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
137252 +_func_exit_;
137253 + return ret;
137254 +
137255 +}
137256 +
137257 +void usb_write_port_cancel(struct intf_hdl *pintfhdl)
137258 +{
137259 + int i, j;
137260 + _adapter *padapter = pintfhdl->padapter;
137261 + struct xmit_buf *pxmitbuf = (struct xmit_buf *)padapter->xmitpriv.pxmitbuf;
137262 +
137263 + DBG_871X("%s \n", __func__);
137264 +
137265 + padapter->bWritePortCancel = _TRUE;
137266 +
137267 + for (i=0; i<NR_XMITBUFF; i++) {
137268 + for (j=0; j<8; j++) {
137269 + if (pxmitbuf->pxmit_urb[j]) {
137270 + usb_kill_urb(pxmitbuf->pxmit_urb[j]);
137271 + }
137272 + }
137273 + pxmitbuf++;
137274 + }
137275 +
137276 + pxmitbuf = (struct xmit_buf*)padapter->xmitpriv.pxmit_extbuf;
137277 + for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
137278 + for (j=0; j<8; j++) {
137279 + if(pxmitbuf->pxmit_urb[j]) {
137280 + usb_kill_urb(pxmitbuf->pxmit_urb[j]);
137281 + }
137282 + }
137283 + pxmitbuf++;
137284 + }
137285 +}
137286 +
137287 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c b/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c
137288 index 02eec93..9105e29 100644
137289 --- a/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c
137290 +++ b/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c
137291 @@ -16,7 +16,7 @@
137292 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
137293 *
137294 *
137295 -******************************************************************************/
137296 + ******************************************************************************/
137297 #define _XMIT_OSDEP_C_
137298
137299 #include <drv_conf.h>
137300 @@ -98,11 +98,11 @@ void rtw_set_tx_chksum_offload(_pkt *pkt, struct pkt_attrib *pattrib)
137301 const struct iphdr *ip = ip_hdr(skb);
137302 if (ip->protocol == IPPROTO_TCP) {
137303 // TCP checksum offload by HW
137304 - DBG_8192C("CHECKSUM_PARTIAL TCP\n");
137305 + DBG_871X("CHECKSUM_PARTIAL TCP\n");
137306 pattrib->hw_tcp_csum = 1;
137307 //skb_checksum_help(skb);
137308 } else if (ip->protocol == IPPROTO_UDP) {
137309 - //DBG_8192C("CHECKSUM_PARTIAL UDP\n");
137310 + //DBG_871X("CHECKSUM_PARTIAL UDP\n");
137311 #if 1
137312 skb_checksum_help(skb);
137313 #else
137314 @@ -111,12 +111,12 @@ void rtw_set_tx_chksum_offload(_pkt *pkt, struct pkt_attrib *pattrib)
137315 udp->check = 0;
137316 #endif
137317 } else {
137318 - DBG_8192C("%s-%d TCP CSUM offload Error!!\n", __FUNCTION__, __LINE__);
137319 + DBG_871X("%s-%d TCP CSUM offload Error!!\n", __FUNCTION__, __LINE__);
137320 WARN_ON(1); /* we need a WARN() */
137321 }
137322 }
137323 else { // IP fragmentation case
137324 - DBG_8192C("%s-%d nr_frags != 0, using skb_checksum_help(skb);!!\n", __FUNCTION__, __LINE__);
137325 + DBG_871X("%s-%d nr_frags != 0, using skb_checksum_help(skb);!!\n", __FUNCTION__, __LINE__);
137326 skb_checksum_help(skb);
137327 }
137328 }
137329 @@ -128,11 +128,11 @@ int rtw_os_xmit_resource_alloc(_adapter *padapter, struct xmit_buf *pxmitbuf,u32
137330 {
137331 #ifdef CONFIG_USB_HCI
137332 int i;
137333 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
137334 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
137335 struct usb_device *pusbd = pdvobjpriv->pusbdev;
137336
137337 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_TX
137338 - pxmitbuf->pallocated_buf = rtw_usb_buffer_alloc(pusbd, (size_t)alloc_sz, GFP_ATOMIC, &pxmitbuf->dma_transfer_addr);
137339 + pxmitbuf->pallocated_buf = rtw_usb_buffer_alloc(pusbd, (size_t)alloc_sz, &pxmitbuf->dma_transfer_addr);
137340 pxmitbuf->pbuf = pxmitbuf->pallocated_buf;
137341 if(pxmitbuf->pallocated_buf == NULL)
137342 return _FAIL;
137343 @@ -154,13 +154,13 @@ int rtw_os_xmit_resource_alloc(_adapter *padapter, struct xmit_buf *pxmitbuf,u32
137344 pxmitbuf->pxmit_urb[i] = usb_alloc_urb(0, GFP_KERNEL);
137345 if(pxmitbuf->pxmit_urb[i] == NULL)
137346 {
137347 - DBG_8192C("pxmitbuf->pxmit_urb[i]==NULL");
137348 + DBG_871X("pxmitbuf->pxmit_urb[i]==NULL");
137349 return _FAIL;
137350 }
137351
137352 }
137353 #endif
137354 -#ifdef CONFIG_PCI_HCI
137355 +#if defined(CONFIG_PCI_HCI) || defined(CONFIG_SDIO_HCI)
137356 pxmitbuf->pallocated_buf = rtw_zmalloc(alloc_sz);
137357 if (pxmitbuf->pallocated_buf == NULL)
137358 {
137359 @@ -177,7 +177,7 @@ void rtw_os_xmit_resource_free(_adapter *padapter, struct xmit_buf *pxmitbuf,u32
137360 {
137361 #ifdef CONFIG_USB_HCI
137362 int i;
137363 - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv;
137364 + struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
137365 struct usb_device *pusbd = pdvobjpriv->pusbdev;
137366
137367
137368 @@ -193,14 +193,14 @@ void rtw_os_xmit_resource_free(_adapter *padapter, struct xmit_buf *pxmitbuf,u32
137369 #ifdef CONFIG_USE_USB_BUFFER_ALLOC_TX
137370 rtw_usb_buffer_free(pusbd, (size_t)free_sz, pxmitbuf->pallocated_buf, pxmitbuf->dma_transfer_addr);
137371 pxmitbuf->pallocated_buf = NULL;
137372 - pxmitbuf->dma_transfer_addr = 0;
137373 + pxmitbuf->dma_transfer_addr = 0;
137374 #else // CONFIG_USE_USB_BUFFER_ALLOC_TX
137375 if(pxmitbuf->pallocated_buf)
137376 rtw_mfree(pxmitbuf->pallocated_buf, free_sz);
137377 #endif // CONFIG_USE_USB_BUFFER_ALLOC_TX
137378
137379 #endif
137380 -#ifdef CONFIG_PCI_HCI
137381 +#if defined(CONFIG_PCI_HCI) || defined(CONFIG_SDIO_HCI)
137382 if(pxmitbuf->pallocated_buf)
137383 rtw_mfree(pxmitbuf->pallocated_buf, free_sz);
137384 #endif
137385 @@ -208,39 +208,58 @@ void rtw_os_xmit_resource_free(_adapter *padapter, struct xmit_buf *pxmitbuf,u32
137386
137387 void rtw_os_pkt_complete(_adapter *padapter, _pkt *pkt)
137388 {
137389 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
137390 + u16 queue;
137391 + struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
137392 +
137393 + queue = skb_get_queue_mapping(pkt);
137394 + if(__netif_subqueue_stopped(padapter->pnetdev, queue) &&
137395 + (pxmitpriv->hwxmits[queue].accnt < NR_XMITFRAME/2))
137396 + {
137397 + netif_wake_subqueue(padapter->pnetdev, queue);
137398 + }
137399 +#else
137400 if (netif_queue_stopped(padapter->pnetdev))
137401 netif_wake_queue(padapter->pnetdev);
137402 +#endif
137403
137404 - dev_kfree_skb_any(pkt);
137405 + rtw_skb_free(pkt);
137406 }
137407
137408 void rtw_os_xmit_complete(_adapter *padapter, struct xmit_frame *pxframe)
137409 {
137410 if(pxframe->pkt)
137411 - {
137412 - //RT_TRACE(_module_xmit_osdep_c_,_drv_err_,("linux : rtw_os_xmit_complete, dev_kfree_skb()\n"));
137413 -
137414 - //dev_kfree_skb_any(pxframe->pkt);
137415 rtw_os_pkt_complete(padapter, pxframe->pkt);
137416 -
137417 - }
137418
137419 pxframe->pkt = NULL;
137420 }
137421
137422 void rtw_os_xmit_schedule(_adapter *padapter)
137423 {
137424 +#ifdef CONFIG_SDIO_HCI
137425 + if(!padapter)
137426 + return;
137427 +
137428 + if (rtw_txframes_pending(padapter))
137429 + _rtw_up_sema(&padapter->xmitpriv.xmit_sema);
137430 +#else
137431 _irqL irqL;
137432 - struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
137433 + struct xmit_priv *pxmitpriv;
137434 +
137435 + if(!padapter)
137436 + return;
137437 +
137438 + pxmitpriv = &padapter->xmitpriv;
137439
137440 _enter_critical_bh(&pxmitpriv->lock, &irqL);
137441 -
137442 +
137443 if(rtw_txframes_pending(padapter))
137444 {
137445 tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
137446 }
137447
137448 _exit_critical_bh(&pxmitpriv->lock, &irqL);
137449 +#endif
137450 }
137451
137452
137453 @@ -254,6 +273,12 @@ int rtw_mlcst2unicst(_adapter *padapter, struct sk_buff *skb)
137454 _list *phead, *plist;
137455 struct sk_buff *newskb;
137456 struct sta_info *psta = NULL;
137457 + u8 chk_alive_num = 0;
137458 + char chk_alive_list[NUM_STA];
137459 + u8 bc_addr[6]={0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
137460 + u8 null_addr[6]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
137461 +
137462 + int i;
137463 s32 res;
137464
137465 _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
137466 @@ -261,45 +286,54 @@ int rtw_mlcst2unicst(_adapter *padapter, struct sk_buff *skb)
137467 plist = get_next(phead);
137468
137469 //free sta asoc_queue
137470 - while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
137471 - {
137472 + while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
137473 + int stainfo_offset;
137474 psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
137475 -
137476 plist = get_next(plist);
137477
137478 - /* avoid come from STA1 and send back STA1 */
137479 - if (!memcmp(psta->hwaddr, &skb->data[6], 6))
137480 - continue;
137481 + stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
137482 + if (stainfo_offset_valid(stainfo_offset)) {
137483 + chk_alive_list[chk_alive_num++] = stainfo_offset;
137484 + }
137485 + }
137486 + _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
137487 +
137488 + for (i = 0; i < chk_alive_num; i++) {
137489 + psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
137490 +
137491 + /* avoid come from STA1 and send back STA1 */
137492 + if (_rtw_memcmp(psta->hwaddr, &skb->data[6], 6) == _TRUE
137493 + || _rtw_memcmp(psta->hwaddr, null_addr, 6) == _TRUE
137494 + || _rtw_memcmp(psta->hwaddr, bc_addr, 6) == _TRUE
137495 + )
137496 + continue;
137497 +
137498 + newskb = rtw_skb_copy(skb);
137499
137500 - newskb = skb_copy(skb, GFP_ATOMIC);
137501 -
137502 if (newskb) {
137503 - memcpy(newskb->data, psta->hwaddr, 6);
137504 + _rtw_memcpy(newskb->data, psta->hwaddr, 6);
137505 res = rtw_xmit(padapter, &newskb);
137506 if (res < 0) {
137507 DBG_871X("%s()-%d: rtw_xmit() return error!\n", __FUNCTION__, __LINE__);
137508 pxmitpriv->tx_drop++;
137509 - dev_kfree_skb_any(newskb);
137510 + rtw_skb_free(newskb);
137511 } else
137512 pxmitpriv->tx_pkts++;
137513 } else {
137514 - DBG_871X("%s-%d: skb_copy() failed!\n", __FUNCTION__, __LINE__);
137515 + DBG_871X("%s-%d: rtw_skb_copy() failed!\n", __FUNCTION__, __LINE__);
137516 pxmitpriv->tx_drop++;
137517 -
137518 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
137519 - //dev_kfree_skb_any(skb);
137520 + //rtw_skb_free(skb);
137521 return _FALSE; // Caller shall tx this multicast frame via normal way.
137522 }
137523 }
137524
137525 - _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
137526 - dev_kfree_skb_any(skb);
137527 + rtw_skb_free(skb);
137528 return _TRUE;
137529 }
137530 #endif // CONFIG_TX_MCAST2UNI
137531
137532
137533 -int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev)
137534 +int _rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev)
137535 {
137536 _adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
137537 struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
137538 @@ -308,7 +342,9 @@ int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev)
137539 extern int rtw_mc2u_disable;
137540 #endif // CONFIG_TX_MCAST2UNI
137541 s32 res = 0;
137542 - int ret = 0;
137543 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
137544 + u16 queue;
137545 +#endif
137546
137547 _func_enter_;
137548
137549 @@ -322,11 +358,22 @@ _func_enter_;
137550 goto drop_packet;
137551 }
137552
137553 +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
137554 + queue = skb_get_queue_mapping(pkt);
137555 + /* No free space for Tx, tx_worker is too slow */
137556 + if (pxmitpriv->hwxmits[queue].accnt > NR_XMITFRAME/2) {
137557 + //DBG_871X("%s(): stop netif_subqueue[%d]\n", __FUNCTION__, queue);
137558 + netif_stop_subqueue(padapter->pnetdev, queue);
137559 + return NETDEV_TX_BUSY;
137560 + }
137561 +#endif
137562 +
137563 #ifdef CONFIG_TX_MCAST2UNI
137564 if ( !rtw_mc2u_disable
137565 && check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE
137566 && ( IP_MCAST_MAC(pkt->data)
137567 || ICMPV6_MCAST_MAC(pkt->data) )
137568 + && (padapter->registrypriv.wifi_spec == 0)
137569 )
137570 {
137571 if ( pxmitpriv->free_xmitframe_cnt > (NR_XMITFRAME/4) ) {
137572 @@ -348,14 +395,14 @@ _func_enter_;
137573 #endif
137574 goto drop_packet;
137575 }
137576 - pxmitpriv->tx_pkts++;
137577
137578 + pxmitpriv->tx_pkts++;
137579 RT_TRACE(_module_xmit_osdep_c_, _drv_info_, ("rtw_xmit_entry: tx_pkts=%d\n", (u32)pxmitpriv->tx_pkts));
137580 goto exit;
137581
137582 drop_packet:
137583 pxmitpriv->tx_drop++;
137584 - dev_kfree_skb_any(pkt);
137585 + rtw_skb_free(pkt);
137586 RT_TRACE(_module_xmit_osdep_c_, _drv_notice_, ("rtw_xmit_entry: drop, tx_drop=%d\n", (u32)pxmitpriv->tx_drop));
137587
137588 exit:
137589 @@ -365,3 +412,10 @@ _func_exit_;
137590 return 0;
137591 }
137592
137593 +int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev)
137594 +{
137595 + if (pkt)
137596 + rtw_mstat_update(MSTAT_TYPE_SKB, MSTAT_ALLOC_SUCCESS, pkt->truesize);
137597 + return _rtw_xmit_entry(pkt, pnetdev);
137598 +}
137599 +
137600 diff --git a/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c b/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c
137601 index 343cd82..e73a068 100644
137602 --- a/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c
137603 +++ b/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c
137604 @@ -25,8 +25,13 @@
137605 #include <osdep_service.h>
137606 #include <drv_types.h>
137607 #include <recv_osdep.h>
137608 +#ifdef PLATFORM_LINUX
137609 #include <linux/vmalloc.h>
137610 -
137611 +#endif
137612 +#ifdef PLATFORM_FREEBSD
137613 +#include <sys/malloc.h>
137614 +#include <sys/time.h>
137615 +#endif /* PLATFORM_FREEBSD */
137616 #ifdef RTK_DMP_PLATFORM
137617 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12))
137618 #include <linux/pageremap.h>
137619 @@ -66,6 +71,27 @@ inline int RTW_STATUS_CODE(int error_code){
137620 }
137621 #endif
137622
137623 +u32 rtw_atoi(u8* s)
137624 +{
137625 +
137626 + int num=0,flag=0;
137627 + int i;
137628 + for(i=0;i<=strlen(s);i++)
137629 + {
137630 + if(s[i] >= '0' && s[i] <= '9')
137631 + num = num * 10 + s[i] -'0';
137632 + else if(s[0] == '-' && i==0)
137633 + flag =1;
137634 + else
137635 + break;
137636 + }
137637 +
137638 + if(flag == 1)
137639 + num = num * -1;
137640 +
137641 + return(num);
137642 +
137643 +}
137644
137645 inline u8* _rtw_vmalloc(u32 sz)
137646 {
137647 @@ -73,6 +99,9 @@ inline u8* _rtw_vmalloc(u32 sz)
137648 #ifdef PLATFORM_LINUX
137649 pbuf = vmalloc(sz);
137650 #endif
137651 +#ifdef PLATFORM_FREEBSD
137652 + pbuf = malloc(sz,M_DEVBUF,M_NOWAIT);
137653 +#endif
137654
137655 #ifdef PLATFORM_WINDOWS
137656 NdisAllocateMemoryWithTag(&pbuf,sz, RT_TAG);
137657 @@ -98,7 +127,9 @@ inline u8* _rtw_zvmalloc(u32 sz)
137658 if (pbuf != NULL)
137659 memset(pbuf, 0, sz);
137660 #endif
137661 -
137662 +#ifdef PLATFORM_FREEBSD
137663 + pbuf = malloc(sz,M_DEVBUF,M_ZERO|M_NOWAIT);
137664 +#endif
137665 #ifdef PLATFORM_WINDOWS
137666 NdisAllocateMemoryWithTag(&pbuf,sz, RT_TAG);
137667 if (pbuf != NULL)
137668 @@ -113,7 +144,9 @@ inline void _rtw_vmfree(u8 *pbuf, u32 sz)
137669 #ifdef PLATFORM_LINUX
137670 vfree(pbuf);
137671 #endif
137672 -
137673 +#ifdef PLATFORM_FREEBSD
137674 + free(pbuf,M_DEVBUF);
137675 +#endif
137676 #ifdef PLATFORM_WINDOWS
137677 NdisFreeMemory(pbuf,sz, 0);
137678 #endif
137679 @@ -136,11 +169,13 @@ u8* _rtw_malloc(u32 sz)
137680 if(sz > 0x4000)
137681 pbuf = (u8 *)dvr_malloc(sz);
137682 else
137683 -#endif
137684 - pbuf = kmalloc(sz, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
137685 +#endif
137686 + pbuf = kmalloc(sz,in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
137687
137688 #endif
137689 -
137690 +#ifdef PLATFORM_FREEBSD
137691 + pbuf = malloc(sz,M_DEVBUF,M_NOWAIT);
137692 +#endif
137693 #ifdef PLATFORM_WINDOWS
137694
137695 NdisAllocateMemoryWithTag(&pbuf,sz, RT_TAG);
137696 @@ -163,6 +198,9 @@ u8* _rtw_malloc(u32 sz)
137697
137698 u8* _rtw_zmalloc(u32 sz)
137699 {
137700 +#ifdef PLATFORM_FREEBSD
137701 + return malloc(sz,M_DEVBUF,M_ZERO|M_NOWAIT);
137702 +#else // PLATFORM_FREEBSD
137703 u8 *pbuf = _rtw_malloc(sz);
137704
137705 if (pbuf != NULL) {
137706 @@ -178,7 +216,7 @@ u8* _rtw_zmalloc(u32 sz)
137707 }
137708
137709 return pbuf;
137710 -
137711 +#endif // PLATFORM_FREEBSD
137712 }
137713
137714 void _rtw_mfree(u8 *pbuf, u32 sz)
137715 @@ -193,7 +231,9 @@ void _rtw_mfree(u8 *pbuf, u32 sz)
137716 kfree(pbuf);
137717
137718 #endif
137719 -
137720 +#ifdef PLATFORM_FREEBSD
137721 + free(pbuf,M_DEVBUF);
137722 +#endif
137723 #ifdef PLATFORM_WINDOWS
137724
137725 NdisFreeMemory(pbuf,sz, 0);
137726 @@ -209,203 +249,556 @@ void _rtw_mfree(u8 *pbuf, u32 sz)
137727
137728 }
137729
137730 +#ifdef PLATFORM_FREEBSD
137731 +//review again
137732 +struct sk_buff * dev_alloc_skb(unsigned int size)
137733 +{
137734 + struct sk_buff *skb=NULL;
137735 + u8 *data=NULL;
137736 +
137737 + //skb = (struct sk_buff *)_rtw_zmalloc(sizeof(struct sk_buff)); // for skb->len, etc.
137738 + skb = (struct sk_buff *)_rtw_malloc(sizeof(struct sk_buff));
137739 + if(!skb)
137740 + goto out;
137741 + data = _rtw_malloc(size);
137742 + if(!data)
137743 + goto nodata;
137744 +
137745 + skb->head = (unsigned char*)data;
137746 + skb->data = (unsigned char*)data;
137747 + skb->tail = (unsigned char*)data;
137748 + skb->end = (unsigned char*)data + size;
137749 + skb->len = 0;
137750 + //printf("%s()-%d: skb=%p, skb->head = %p\n", __FUNCTION__, __LINE__, skb, skb->head);
137751
137752 -#ifdef DBG_MEM_ALLOC
137753 +out:
137754 + return skb;
137755 +nodata:
137756 + _rtw_mfree((u8 *)skb, sizeof(struct sk_buff));
137757 + skb = NULL;
137758 +goto out;
137759 +
137760 +}
137761 +
137762 +void dev_kfree_skb_any(struct sk_buff *skb)
137763 +{
137764 + //printf("%s()-%d: skb->head = %p\n", __FUNCTION__, __LINE__, skb->head);
137765 + if(skb->head)
137766 + _rtw_mfree(skb->head, 0);
137767 + //printf("%s()-%d: skb = %p\n", __FUNCTION__, __LINE__, skb);
137768 + if(skb)
137769 + _rtw_mfree((u8 *)skb, 0);
137770 +}
137771 +struct sk_buff *skb_clone(const struct sk_buff *skb)
137772 +{
137773 + return NULL;
137774 +}
137775 +
137776 +#endif /* PLATFORM_FREEBSD */
137777 +
137778 +inline struct sk_buff *_rtw_skb_alloc(u32 sz)
137779 +{
137780 +#ifdef PLATFORM_LINUX
137781 + return __dev_alloc_skb(sz, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
137782 +#endif /* PLATFORM_LINUX */
137783 +
137784 +#ifdef PLATFORM_FREEBSD
137785 + return dev_alloc_skb(sz);
137786 +#endif /* PLATFORM_FREEBSD */
137787 +}
137788 +
137789 +inline void _rtw_skb_free(struct sk_buff *skb)
137790 +{
137791 + dev_kfree_skb_any(skb);
137792 +}
137793 +
137794 +inline struct sk_buff *_rtw_skb_copy(const struct sk_buff *skb)
137795 +{
137796 +#ifdef PLATFORM_LINUX
137797 + return skb_copy(skb, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
137798 +#endif /* PLATFORM_LINUX */
137799 +
137800 +#ifdef PLATFORM_FREEBSD
137801 + return NULL;
137802 +#endif /* PLATFORM_FREEBSD */
137803 +}
137804 +
137805 +inline struct sk_buff *_rtw_skb_clone(struct sk_buff *skb)
137806 +{
137807 +#ifdef PLATFORM_LINUX
137808 + return skb_clone(skb, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
137809 +#endif /* PLATFORM_LINUX */
137810 +
137811 +#ifdef PLATFORM_FREEBSD
137812 + return skb_clone(skb);
137813 +#endif /* PLATFORM_FREEBSD */
137814 +}
137815
137816 -struct rtw_dbg_mem_stat {
137817 - ATOMIC_T vir_alloc; // the memory bytes we allocate now
137818 - ATOMIC_T vir_peak; // the peak memory bytes we allocate
137819 - ATOMIC_T vir_alloc_err; // the error times we fail to allocate memory
137820 +inline int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb)
137821 +{
137822 +#ifdef PLATFORM_LINUX
137823 + skb->dev = ndev;
137824 + return netif_rx(skb);
137825 +#endif /* PLATFORM_LINUX */
137826 +
137827 +#ifdef PLATFORM_FREEBSD
137828 + return (*ndev->if_input)(ndev, skb);
137829 +#endif /* PLATFORM_FREEBSD */
137830 +}
137831 +
137832 +void _rtw_skb_queue_purge(struct sk_buff_head *list)
137833 +{
137834 + struct sk_buff *skb;
137835 +
137836 + while ((skb = skb_dequeue(list)) != NULL)
137837 + _rtw_skb_free(skb);
137838 +}
137839 +
137840 +#ifdef CONFIG_USB_HCI
137841 +inline void *_rtw_usb_buffer_alloc(struct usb_device *dev, size_t size, dma_addr_t *dma)
137842 +{
137843 +#ifdef PLATFORM_LINUX
137844 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
137845 + return usb_alloc_coherent(dev, size, (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL), dma);
137846 +#else
137847 + return usb_buffer_alloc(dev, size, (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL), dma);
137848 +#endif
137849 +#endif /* PLATFORM_LINUX */
137850
137851 - ATOMIC_T phy_alloc;
137852 - ATOMIC_T phy_peak;
137853 - ATOMIC_T phy_alloc_err;
137854 -} rtw_dbg_mem_stat;
137855 -
137856 -enum {
137857 - MEM_STAT_VIR_ALLOC_SUCCESS,
137858 - MEM_STAT_VIR_ALLOC_FAIL,
137859 - MEM_STAT_VIR_FREE,
137860 - MEM_STAT_PHY_ALLOC_SUCCESS,
137861 - MEM_STAT_PHY_ALLOC_FAIL,
137862 - MEM_STAT_PHY_FREE
137863 +#ifdef PLATFORM_FREEBSD
137864 + return (malloc(size, M_USBDEV, M_NOWAIT | M_ZERO));
137865 +#endif /* PLATFORM_FREEBSD */
137866 +}
137867 +inline void _rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma)
137868 +{
137869 +#ifdef PLATFORM_LINUX
137870 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
137871 + usb_free_coherent(dev, size, addr, dma);
137872 +#else
137873 + usb_buffer_free(dev, size, addr, dma);
137874 +#endif
137875 +#endif /* PLATFORM_LINUX */
137876 +
137877 +#ifdef PLATFORM_FREEBSD
137878 + free(addr, M_USBDEV);
137879 +#endif /* PLATFORM_FREEBSD */
137880 +}
137881 +#endif /* CONFIG_USB_HCI */
137882 +
137883 +#ifdef DBG_MEM_ALLOC
137884 +
137885 +struct rtw_mem_stat {
137886 + ATOMIC_T alloc; // the memory bytes we allocate currently
137887 + ATOMIC_T peak; // the peak memory bytes we allocate
137888 + ATOMIC_T alloc_cnt; // the alloc count for alloc currently
137889 + ATOMIC_T alloc_err_cnt; // the error times we fail to allocate memory
137890 };
137891
137892 -void rtw_dump_mem_stat (void)
137893 +struct rtw_mem_stat rtw_mem_type_stat[mstat_tf_idx(MSTAT_TYPE_MAX)];
137894 +struct rtw_mem_stat rtw_mem_func_stat[mstat_ff_idx(MSTAT_FUNC_MAX)];
137895 +
137896 +char *MSTAT_TYPE_str[] = {
137897 + "VIR",
137898 + "PHY",
137899 + "SKB",
137900 + "USB",
137901 +};
137902 +
137903 +char *MSTAT_FUNC_str[] = {
137904 + "UNSP",
137905 + "IO",
137906 + "TXIO",
137907 + "RXIO",
137908 + "TX",
137909 + "RX",
137910 +};
137911 +
137912 +int _rtw_mstat_dump(char *buf, int len)
137913 {
137914 - int vir_alloc, vir_peak, vir_alloc_err, phy_alloc, phy_peak, phy_alloc_err;
137915 + int cnt = 0;
137916 + int i;
137917 + int value_t[4][mstat_tf_idx(MSTAT_TYPE_MAX)];
137918 + int value_f[4][mstat_ff_idx(MSTAT_FUNC_MAX)];
137919
137920 - vir_alloc=ATOMIC_READ(&rtw_dbg_mem_stat.vir_alloc);
137921 - vir_peak=ATOMIC_READ(&rtw_dbg_mem_stat.vir_peak);
137922 - vir_alloc_err=ATOMIC_READ(&rtw_dbg_mem_stat.vir_alloc_err);
137923 + int vir_alloc, vir_peak, vir_alloc_err, phy_alloc, phy_peak, phy_alloc_err;
137924 + int tx_alloc, tx_peak, tx_alloc_err, rx_alloc, rx_peak, rx_alloc_err;
137925
137926 - phy_alloc=ATOMIC_READ(&rtw_dbg_mem_stat.phy_alloc);
137927 - phy_peak=ATOMIC_READ(&rtw_dbg_mem_stat.phy_peak);
137928 - phy_alloc_err=ATOMIC_READ(&rtw_dbg_mem_stat.phy_alloc_err);
137929 + for(i=0;i<mstat_tf_idx(MSTAT_TYPE_MAX);i++) {
137930 + value_t[0][i] = ATOMIC_READ(&(rtw_mem_type_stat[i].alloc));
137931 + value_t[1][i] = ATOMIC_READ(&(rtw_mem_type_stat[i].peak));
137932 + value_t[2][i] = ATOMIC_READ(&(rtw_mem_type_stat[i].alloc_cnt));
137933 + value_t[3][i] = ATOMIC_READ(&(rtw_mem_type_stat[i].alloc_err_cnt));
137934 + }
137935
137936 - DBG_871X("vir_alloc:%d, vir_peak:%d,vir_alloc_err:%d, phy_alloc:%d, phy_peak:%d, phy_alloc_err:%d\n"
137937 - , vir_alloc, vir_peak, vir_alloc_err
137938 - , phy_alloc, phy_peak, phy_alloc_err
137939 - );
137940 + #if 0
137941 + for(i=0;i<mstat_ff_idx(MSTAT_FUNC_MAX);i++) {
137942 + value_f[0][i] = ATOMIC_READ(&(rtw_mem_func_stat[i].alloc));
137943 + value_f[1][i] = ATOMIC_READ(&(rtw_mem_func_stat[i].peak));
137944 + value_f[2][i] = ATOMIC_READ(&(rtw_mem_func_stat[i].alloc_cnt));
137945 + value_f[3][i] = ATOMIC_READ(&(rtw_mem_func_stat[i].alloc_err_cnt));
137946 + }
137947 + #endif
137948 +
137949 + cnt += snprintf(buf+cnt, len-cnt, "===================== MSTAT =====================\n");
137950 + cnt += snprintf(buf+cnt, len-cnt, "%4s %10s %10s %10s %10s\n", "TAG", "alloc", "peak", "aloc_cnt", "err_cnt");
137951 + cnt += snprintf(buf+cnt, len-cnt, "-------------------------------------------------\n");
137952 + for(i=0;i<mstat_tf_idx(MSTAT_TYPE_MAX);i++) {
137953 + 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]);
137954 + }
137955 + #if 0
137956 + cnt += snprintf(buf+cnt, len-cnt, "-------------------------------------------------\n");
137957 + for(i=0;i<mstat_ff_idx(MSTAT_FUNC_MAX);i++) {
137958 + 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]);
137959 + }
137960 + #endif
137961 +
137962 + return cnt;
137963 +}
137964 +
137965 +void rtw_mstat_dump(void)
137966 +{
137967 + char buf[768] = {0};
137968 +
137969 + _rtw_mstat_dump(buf, 768);
137970 + DBG_871X("\n%s", buf);
137971 }
137972
137973 -void rtw_update_mem_stat(u8 flag, u32 sz)
137974 +void rtw_mstat_update(const enum mstat_f flags, const MSTAT_STATUS status, u32 sz)
137975 {
137976 static u32 update_time = 0;
137977 int peak, alloc;
137978 + int i;
137979
137980 + /* initialization */
137981 if(!update_time) {
137982 - ATOMIC_SET(&rtw_dbg_mem_stat.vir_alloc,0);
137983 - ATOMIC_SET(&rtw_dbg_mem_stat.vir_peak,0);
137984 - ATOMIC_SET(&rtw_dbg_mem_stat.vir_alloc_err,0);
137985 - ATOMIC_SET(&rtw_dbg_mem_stat.phy_alloc,0);
137986 - ATOMIC_SET(&rtw_dbg_mem_stat.phy_peak,0);
137987 - ATOMIC_SET(&rtw_dbg_mem_stat.phy_alloc_err,0);
137988 + for(i=0;i<mstat_tf_idx(MSTAT_TYPE_MAX);i++) {
137989 + ATOMIC_SET(&(rtw_mem_type_stat[i].alloc), 0);
137990 + ATOMIC_SET(&(rtw_mem_type_stat[i].peak), 0);
137991 + ATOMIC_SET(&(rtw_mem_type_stat[i].alloc_cnt), 0);
137992 + ATOMIC_SET(&(rtw_mem_type_stat[i].alloc_err_cnt), 0);
137993 + }
137994 + for(i=0;i<mstat_ff_idx(MSTAT_FUNC_MAX);i++) {
137995 + ATOMIC_SET(&(rtw_mem_func_stat[i].alloc), 0);
137996 + ATOMIC_SET(&(rtw_mem_func_stat[i].peak), 0);
137997 + ATOMIC_SET(&(rtw_mem_func_stat[i].alloc_cnt), 0);
137998 + ATOMIC_SET(&(rtw_mem_func_stat[i].alloc_err_cnt), 0);
137999 + }
138000 }
138001 -
138002 - switch(flag) {
138003 - case MEM_STAT_VIR_ALLOC_SUCCESS:
138004 - alloc = ATOMIC_ADD_RETURN(&rtw_dbg_mem_stat.vir_alloc, sz);
138005 - peak=ATOMIC_READ(&rtw_dbg_mem_stat.vir_peak);
138006 +
138007 + switch(status) {
138008 + case MSTAT_ALLOC_SUCCESS:
138009 + ATOMIC_INC(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc_cnt));
138010 + alloc = ATOMIC_ADD_RETURN(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc), sz);
138011 + peak=ATOMIC_READ(&(rtw_mem_type_stat[mstat_tf_idx(flags)].peak));
138012 if (peak<alloc)
138013 - ATOMIC_SET(&rtw_dbg_mem_stat.vir_peak, alloc);
138014 - break;
138015 -
138016 - case MEM_STAT_VIR_ALLOC_FAIL:
138017 - ATOMIC_INC(&rtw_dbg_mem_stat.vir_alloc_err);
138018 - break;
138019 -
138020 - case MEM_STAT_VIR_FREE:
138021 - alloc = ATOMIC_SUB_RETURN(&rtw_dbg_mem_stat.vir_alloc, sz);
138022 - break;
138023 -
138024 - case MEM_STAT_PHY_ALLOC_SUCCESS:
138025 - alloc = ATOMIC_ADD_RETURN(&rtw_dbg_mem_stat.phy_alloc, sz);
138026 - peak=ATOMIC_READ(&rtw_dbg_mem_stat.phy_peak);
138027 + ATOMIC_SET(&(rtw_mem_type_stat[mstat_tf_idx(flags)].peak), alloc);
138028 +
138029 + ATOMIC_INC(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc_cnt));
138030 + alloc = ATOMIC_ADD_RETURN(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc), sz);
138031 + peak=ATOMIC_READ(&(rtw_mem_func_stat[mstat_ff_idx(flags)].peak));
138032 if (peak<alloc)
138033 - ATOMIC_SET(&rtw_dbg_mem_stat.phy_peak, alloc);
138034 + ATOMIC_SET(&(rtw_mem_func_stat[mstat_ff_idx(flags)].peak), alloc);
138035 break;
138036
138037 - case MEM_STAT_PHY_ALLOC_FAIL:
138038 - ATOMIC_INC(&rtw_dbg_mem_stat.phy_alloc_err);
138039 + case MSTAT_ALLOC_FAIL:
138040 + ATOMIC_INC(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc_err_cnt));
138041 +
138042 + ATOMIC_INC(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc_err_cnt));
138043 + break;
138044 +
138045 + case MSTAT_FREE:
138046 + ATOMIC_DEC(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc_cnt));
138047 + ATOMIC_SUB(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc), sz);
138048 +
138049 + ATOMIC_DEC(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc_cnt));
138050 + ATOMIC_SUB(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc), sz);
138051 break;
138052 -
138053 - case MEM_STAT_PHY_FREE:
138054 - alloc = ATOMIC_SUB_RETURN(&rtw_dbg_mem_stat.phy_alloc, sz);
138055 -
138056 };
138057
138058 - if (rtw_get_passing_time_ms(update_time) > 5000) {
138059 - rtw_dump_mem_stat();
138060 + //if (rtw_get_passing_time_ms(update_time) > 5000) {
138061 + // rtw_mstat_dump();
138062 update_time=rtw_get_current_time();
138063 - }
138064 -
138065 -
138066 + //}
138067 }
138068
138069
138070 -inline u8* dbg_rtw_vmalloc(u32 sz, const char *func, int line)
138071 +
138072 +inline u8* dbg_rtw_vmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line)
138073 {
138074 u8 *p;
138075 - DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138076 + //DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138077
138078 p=_rtw_vmalloc((sz));
138079
138080 - rtw_update_mem_stat(
138081 - p ? MEM_STAT_VIR_ALLOC_SUCCESS : MEM_STAT_VIR_ALLOC_FAIL
138082 + rtw_mstat_update(
138083 + flags
138084 + , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138085 , sz
138086 );
138087
138088 return p;
138089 }
138090
138091 -inline u8* dbg_rtw_zvmalloc(u32 sz, const char *func, int line)
138092 +inline u8* dbg_rtw_zvmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line)
138093 {
138094 u8 *p;
138095 - DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138096 + //DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138097
138098 p=_rtw_zvmalloc((sz));
138099
138100 - rtw_update_mem_stat(
138101 - p ? MEM_STAT_VIR_ALLOC_SUCCESS : MEM_STAT_VIR_ALLOC_FAIL
138102 + rtw_mstat_update(
138103 + flags
138104 + , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138105 , sz
138106 );
138107
138108 return p;
138109 }
138110
138111 -inline void dbg_rtw_vmfree(u8 *pbuf, u32 sz, const char *func, int line)
138112 +inline void dbg_rtw_vmfree(u8 *pbuf, u32 sz, const enum mstat_f flags, const char *func, const int line)
138113 {
138114 - DBG_871X("DBG_MEM_ALLOC %s:%d %s(%p,%d)\n", func, line, __FUNCTION__, (pbuf), (sz));
138115 + //DBG_871X("DBG_MEM_ALLOC %s:%d %s(%p,%d)\n", func, line, __FUNCTION__, (pbuf), (sz));
138116
138117 _rtw_vmfree((pbuf), (sz));
138118
138119 - rtw_update_mem_stat(
138120 - MEM_STAT_VIR_FREE
138121 + rtw_mstat_update(
138122 + flags
138123 + , MSTAT_FREE
138124 , sz
138125 );
138126 -
138127 }
138128
138129 -inline u8* dbg_rtw_malloc(u32 sz, const char *func, int line)
138130 +inline u8* dbg_rtw_malloc(u32 sz, const enum mstat_f flags, const char *func, const int line)
138131 {
138132 u8 *p;
138133 -
138134 - if((sz)>4096)
138135 - DBG_871X("DBG_MEM_ALLOC !!!!!!!!!!!!!! %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138136 +
138137 + //if(sz>=153 && sz<=306)
138138 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138139 +
138140 + //if((sz)>4096)
138141 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138142
138143 p=_rtw_malloc((sz));
138144
138145 - rtw_update_mem_stat(
138146 - p ? MEM_STAT_PHY_ALLOC_SUCCESS : MEM_STAT_PHY_ALLOC_FAIL
138147 + rtw_mstat_update(
138148 + flags
138149 + , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138150 , sz
138151 );
138152
138153 return p;
138154 }
138155
138156 -inline u8* dbg_rtw_zmalloc(u32 sz, const char *func, int line)
138157 +inline u8* dbg_rtw_zmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line)
138158 {
138159 u8 *p;
138160
138161 - if((sz)>4096)
138162 - DBG_871X("DBG_MEM_ALLOC !!!!!!!!!!!!!! %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138163 + //if(sz>=153 && sz<=306)
138164 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138165 +
138166 + //if((sz)>4096)
138167 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138168
138169 p = _rtw_zmalloc((sz));
138170
138171 - rtw_update_mem_stat(
138172 - p ? MEM_STAT_PHY_ALLOC_SUCCESS : MEM_STAT_PHY_ALLOC_FAIL
138173 + rtw_mstat_update(
138174 + flags
138175 + , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138176 , sz
138177 );
138178
138179 return p;
138180 -
138181 }
138182
138183 -inline void dbg_rtw_mfree(u8 *pbuf, u32 sz, const char *func, int line)
138184 +inline void dbg_rtw_mfree(u8 *pbuf, u32 sz, const enum mstat_f flags, const char *func, const int line)
138185 {
138186 - if((sz)>4096)
138187 - DBG_871X("DBG_MEM_ALLOC !!!!!!!!!!!!!! %s:%d %s(%p,%d)\n", func, line, __FUNCTION__, (pbuf), (sz));
138188 + //if(sz>=153 && sz<=306)
138189 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
138190 +
138191 + //if((sz)>4096)
138192 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%p,%d)\n", func, line, __FUNCTION__, (pbuf), (sz));
138193
138194 _rtw_mfree((pbuf), (sz));
138195
138196 - rtw_update_mem_stat(
138197 - MEM_STAT_PHY_FREE
138198 + rtw_mstat_update(
138199 + flags
138200 + , MSTAT_FREE
138201 , sz
138202 );
138203 }
138204 -#endif
138205
138206 +inline struct sk_buff * dbg_rtw_skb_alloc(unsigned int size, const enum mstat_f flags, const char *func, int line)
138207 +{
138208 + struct sk_buff *skb;
138209 + unsigned int truesize = 0;
138210 +
138211 + skb = _rtw_skb_alloc(size);
138212 +
138213 + if(skb)
138214 + truesize = skb->truesize;
138215 +
138216 + if(!skb || truesize < size /*|| size > 4096*/)
138217 + DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d), skb:%p, truesize=%u\n", func, line, __FUNCTION__, size, skb, truesize);
138218 +
138219 + rtw_mstat_update(
138220 + flags
138221 + , skb ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138222 + , truesize
138223 + );
138224 +
138225 + return skb;
138226 +}
138227 +
138228 +inline void dbg_rtw_skb_free(struct sk_buff *skb, const enum mstat_f flags, const char *func, int line)
138229 +{
138230 + unsigned int truesize = skb->truesize;
138231 +
138232 + //if(truesize > 4096)
138233 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s, truesize=%u\n", func, line, __FUNCTION__, truesize);
138234 +
138235 + _rtw_skb_free(skb);
138236 +
138237 + rtw_mstat_update(
138238 + flags
138239 + , MSTAT_FREE
138240 + , truesize
138241 + );
138242 +}
138243 +
138244 +inline struct sk_buff *dbg_rtw_skb_copy(const struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line)
138245 +{
138246 + struct sk_buff *skb_cp;
138247 + unsigned int truesize = skb->truesize;
138248 + unsigned int cp_truesize = 0;
138249 +
138250 + skb_cp = _rtw_skb_copy(skb);
138251 + if(skb_cp)
138252 + cp_truesize = skb_cp->truesize;
138253 +
138254 + if(!skb_cp || cp_truesize != truesize /*||cp_truesize > 4096*/)
138255 + DBG_871X("DBG_MEM_ALLOC %s:%d %s(%u), skb_cp:%p, cp_truesize=%u\n", func, line, __FUNCTION__, truesize, skb_cp, cp_truesize);
138256 +
138257 + rtw_mstat_update(
138258 + flags
138259 + , skb_cp ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138260 + , truesize
138261 + );
138262 +
138263 + return skb_cp;
138264 +}
138265 +
138266 +inline struct sk_buff *dbg_rtw_skb_clone(struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line)
138267 +{
138268 + struct sk_buff *skb_cl;
138269 + unsigned int truesize = skb->truesize;
138270 + unsigned int cl_truesize = 0;
138271 +
138272 + skb_cl = _rtw_skb_clone(skb);
138273 + if(skb_cl)
138274 + cl_truesize = skb_cl->truesize;
138275 +
138276 + if(!skb_cl || cl_truesize != truesize /*|| cl_truesize > 4096*/)
138277 + DBG_871X("DBG_MEM_ALLOC %s:%d %s(%u), skb_cl:%p, cl_truesize=%u\n", func, line, __FUNCTION__, truesize, skb_cl, cl_truesize);
138278 +
138279 + rtw_mstat_update(
138280 + flags
138281 + , skb_cl ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138282 + , truesize
138283 + );
138284 +
138285 + return skb_cl;
138286 +}
138287 +
138288 +inline int dbg_rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb, const enum mstat_f flags, const char *func, int line)
138289 +{
138290 + int ret;
138291 + unsigned int truesize = skb->truesize;
138292 +
138293 + //if(truesize > 4096)
138294 + // DBG_871X("DBG_MEM_ALLOC %s:%d %s, truesize=%u\n", func, line, __FUNCTION__, truesize);
138295 +
138296 + ret = _rtw_netif_rx(ndev, skb);
138297 +
138298 + rtw_mstat_update(
138299 + flags
138300 + , MSTAT_FREE
138301 + , truesize
138302 + );
138303 +
138304 + return ret;
138305 +}
138306 +
138307 +inline void dbg_rtw_skb_queue_purge(struct sk_buff_head *list, enum mstat_f flags, const char *func, int line)
138308 +{
138309 + struct sk_buff *skb;
138310 +
138311 + while ((skb = skb_dequeue(list)) != NULL)
138312 + dbg_rtw_skb_free(skb, flags, func, line);
138313 +}
138314 +
138315 +#ifdef CONFIG_USB_HCI
138316 +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)
138317 +{
138318 + void *p;
138319 + //DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, size);
138320 +
138321 + p = _rtw_usb_buffer_alloc(dev, size, dma);
138322 +
138323 + rtw_mstat_update(
138324 + flags
138325 + , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
138326 + , size
138327 + );
138328 +
138329 + return p;
138330 +}
138331 +
138332 +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)
138333 +{
138334 + //DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, size);
138335 +
138336 + _rtw_usb_buffer_free(dev, size, addr, dma);
138337 +
138338 + rtw_mstat_update(
138339 + flags
138340 + , MSTAT_FREE
138341 + , size
138342 + );
138343 +}
138344 +#endif /* CONFIG_USB_HCI */
138345 +#endif /* DBG_MEM_ALLOC */
138346 +
138347 +void* rtw_malloc2d(int h, int w, int size)
138348 +{
138349 + int j;
138350 +
138351 + void **a = (void **) rtw_zmalloc( h*sizeof(void *) + h*w*size );
138352 + if(a == NULL)
138353 + {
138354 + DBG_871X("%s: alloc memory fail!\n", __FUNCTION__);
138355 + return NULL;
138356 + }
138357 +
138358 + for( j=0; j<h; j++ )
138359 + a[j] = ((char *)(a+h)) + j*w*size;
138360 +
138361 + return a;
138362 +}
138363 +
138364 +void rtw_mfree2d(void *pbuf, int h, int w, int size)
138365 +{
138366 + rtw_mfree((u8 *)pbuf, h*sizeof(void*) + w*h*size);
138367 +}
138368
138369 void _rtw_memcpy(void* dst, void* src, u32 sz)
138370 {
138371
138372 -#ifdef PLATFORM_LINUX
138373 +#if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
138374
138375 memcpy(dst, src, sz);
138376
138377 #endif
138378 -
138379 +
138380 #ifdef PLATFORM_WINDOWS
138381
138382 NdisMoveMemory(dst, src, sz);
138383 @@ -417,7 +810,7 @@ void _rtw_memcpy(void* dst, void* src, u32 sz)
138384 int _rtw_memcmp(void *dst, void *src, u32 sz)
138385 {
138386
138387 -#ifdef PLATFORM_LINUX
138388 +#if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
138389 //under Linux/GNU/GLibc, the return value of memcmp for two same mem. chunk is 0
138390
138391 if (!(memcmp(dst, src, sz)))
138392 @@ -444,7 +837,7 @@ int _rtw_memcmp(void *dst, void *src, u32 sz)
138393 void _rtw_memset(void *pbuf, int c, u32 sz)
138394 {
138395
138396 -#ifdef PLATFORM_LINUX
138397 +#if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
138398
138399 memset(pbuf, c, sz);
138400
138401 @@ -461,6 +854,16 @@ void _rtw_memset(void *pbuf, int c, u32 sz)
138402
138403 }
138404
138405 +#ifdef PLATFORM_FREEBSD
138406 +static inline void __list_add(_list *pnew, _list *pprev, _list *pnext)
138407 + {
138408 + pnext->prev = pnew;
138409 + pnew->next = pnext;
138410 + pnew->prev = pprev;
138411 + pprev->next = pnew;
138412 +}
138413 +#endif /* PLATFORM_FREEBSD */
138414 +
138415 void _rtw_init_listhead(_list *list)
138416 {
138417
138418 @@ -470,6 +873,10 @@ void _rtw_init_listhead(_list *list)
138419
138420 #endif
138421
138422 +#ifdef PLATFORM_FREEBSD
138423 + list->next = list;
138424 + list->prev = list;
138425 +#endif
138426 #ifdef PLATFORM_WINDOWS
138427
138428 NdisInitializeListHead(list);
138429 @@ -495,7 +902,15 @@ u32 rtw_is_list_empty(_list *phead)
138430 return _FALSE;
138431
138432 #endif
138433 -
138434 +#ifdef PLATFORM_FREEBSD
138435 +
138436 + if (phead->next == phead)
138437 + return _TRUE;
138438 + else
138439 + return _FALSE;
138440 +
138441 +#endif
138442 +
138443
138444 #ifdef PLATFORM_WINDOWS
138445
138446 @@ -509,6 +924,21 @@ u32 rtw_is_list_empty(_list *phead)
138447
138448 }
138449
138450 +void rtw_list_insert_head(_list *plist, _list *phead)
138451 +{
138452 +
138453 +#ifdef PLATFORM_LINUX
138454 + list_add(plist, phead);
138455 +#endif
138456 +
138457 +#ifdef PLATFORM_FREEBSD
138458 + __list_add(plist, phead, phead->next);
138459 +#endif
138460 +
138461 +#ifdef PLATFORM_WINDOWS
138462 + InsertHeadList(phead, plist);
138463 +#endif
138464 +}
138465
138466 void rtw_list_insert_tail(_list *plist, _list *phead)
138467 {
138468 @@ -518,7 +948,11 @@ void rtw_list_insert_tail(_list *plist, _list *phead)
138469 list_add_tail(plist, phead);
138470
138471 #endif
138472 +#ifdef PLATFORM_FREEBSD
138473 +
138474 + __list_add(plist, phead->prev, phead);
138475
138476 +#endif
138477 #ifdef PLATFORM_WINDOWS
138478
138479 InsertTailList(phead, plist);
138480 @@ -543,7 +977,9 @@ void _rtw_init_sema(_sema *sema, int init_val)
138481 sema_init(sema, init_val);
138482
138483 #endif
138484 -
138485 +#ifdef PLATFORM_FREEBSD
138486 + sema_init(sema, init_val, "rtw_drv");
138487 +#endif
138488 #ifdef PLATFORM_OS_XP
138489
138490 KeInitializeSemaphore(sema, init_val, SEMA_UPBND); // count=0;
138491 @@ -559,7 +995,9 @@ void _rtw_init_sema(_sema *sema, int init_val)
138492
138493 void _rtw_free_sema(_sema *sema)
138494 {
138495 -
138496 +#ifdef PLATFORM_FREEBSD
138497 + sema_destroy(sema);
138498 +#endif
138499 #ifdef PLATFORM_OS_CE
138500 CloseHandle(*sema);
138501 #endif
138502 @@ -574,7 +1012,9 @@ void _rtw_up_sema(_sema *sema)
138503 up(sema);
138504
138505 #endif
138506 -
138507 +#ifdef PLATFORM_FREEBSD
138508 + sema_post(sema);
138509 +#endif
138510 #ifdef PLATFORM_OS_XP
138511
138512 KeReleaseSemaphore(sema, IO_NETWORK_INCREMENT, 1, FALSE );
138513 @@ -597,7 +1037,10 @@ u32 _rtw_down_sema(_sema *sema)
138514 return _SUCCESS;
138515
138516 #endif
138517 -
138518 +#ifdef PLATFORM_FREEBSD
138519 + sema_wait(sema);
138520 + return _SUCCESS;
138521 +#endif
138522 #ifdef PLATFORM_OS_XP
138523
138524 if(STATUS_SUCCESS == KeWaitForSingleObject(sema, Executive, KernelMode, TRUE, NULL))
138525 @@ -627,7 +1070,9 @@ void _rtw_mutex_init(_mutex *pmutex)
138526 #endif
138527
138528 #endif
138529 -
138530 +#ifdef PLATFORM_FREEBSD
138531 + mtx_init(pmutex, "", NULL, MTX_DEF|MTX_RECURSE);
138532 +#endif
138533 #ifdef PLATFORM_OS_XP
138534
138535 KeInitializeMutex(pmutex, 0);
138536 @@ -639,7 +1084,7 @@ void _rtw_mutex_init(_mutex *pmutex)
138537 #endif
138538 }
138539
138540 -
138541 +void _rtw_mutex_free(_mutex *pmutex);
138542 void _rtw_mutex_free(_mutex *pmutex)
138543 {
138544 #ifdef PLATFORM_LINUX
138545 @@ -649,6 +1094,10 @@ void _rtw_mutex_free(_mutex *pmutex)
138546 #else
138547 #endif
138548
138549 +#ifdef PLATFORM_FREEBSD
138550 + sema_destroy(pmutex);
138551 +#endif
138552 +
138553 #endif
138554
138555 #ifdef PLATFORM_OS_XP
138556 @@ -668,7 +1117,9 @@ void _rtw_spinlock_init(_lock *plock)
138557 spin_lock_init(plock);
138558
138559 #endif
138560 -
138561 +#ifdef PLATFORM_FREEBSD
138562 + mtx_init(plock, "", NULL, MTX_DEF|MTX_RECURSE);
138563 +#endif
138564 #ifdef PLATFORM_WINDOWS
138565
138566 NdisAllocateSpinLock(plock);
138567 @@ -679,7 +1130,9 @@ void _rtw_spinlock_init(_lock *plock)
138568
138569 void _rtw_spinlock_free(_lock *plock)
138570 {
138571 -
138572 +#ifdef PLATFORM_FREEBSD
138573 + mtx_destroy(plock);
138574 +#endif
138575
138576 #ifdef PLATFORM_WINDOWS
138577
138578 @@ -688,6 +1141,27 @@ void _rtw_spinlock_free(_lock *plock)
138579 #endif
138580
138581 }
138582 +#ifdef PLATFORM_FREEBSD
138583 +extern PADAPTER prtw_lock;
138584 +
138585 +void rtw_mtx_lock(_lock *plock){
138586 + if(prtw_lock){
138587 + mtx_lock(&prtw_lock->glock);
138588 + }
138589 + else{
138590 + printf("%s prtw_lock==NULL",__FUNCTION__);
138591 + }
138592 +}
138593 +void rtw_mtx_unlock(_lock *plock){
138594 + if(prtw_lock){
138595 + mtx_unlock(&prtw_lock->glock);
138596 + }
138597 + else{
138598 + printf("%s prtw_lock==NULL",__FUNCTION__);
138599 + }
138600 +
138601 +}
138602 +#endif //PLATFORM_FREEBSD
138603
138604
138605 void _rtw_spinlock(_lock *plock)
138606 @@ -698,7 +1172,9 @@ void _rtw_spinlock(_lock *plock)
138607 spin_lock(plock);
138608
138609 #endif
138610 -
138611 +#ifdef PLATFORM_FREEBSD
138612 + mtx_lock(plock);
138613 +#endif
138614 #ifdef PLATFORM_WINDOWS
138615
138616 NdisAcquireSpinLock(plock);
138617 @@ -715,7 +1191,9 @@ void _rtw_spinunlock(_lock *plock)
138618 spin_unlock(plock);
138619
138620 #endif
138621 -
138622 +#ifdef PLATFORM_FREEBSD
138623 + mtx_unlock(plock);
138624 +#endif
138625 #ifdef PLATFORM_WINDOWS
138626
138627 NdisReleaseSpinLock(plock);
138628 @@ -732,7 +1210,9 @@ void _rtw_spinlock_ex(_lock *plock)
138629 spin_lock(plock);
138630
138631 #endif
138632 -
138633 +#ifdef PLATFORM_FREEBSD
138634 + mtx_lock(plock);
138635 +#endif
138636 #ifdef PLATFORM_WINDOWS
138637
138638 NdisDprAcquireSpinLock(plock);
138639 @@ -749,7 +1229,9 @@ void _rtw_spinunlock_ex(_lock *plock)
138640 spin_unlock(plock);
138641
138642 #endif
138643 -
138644 +#ifdef PLATFORM_FREEBSD
138645 + mtx_unlock(plock);
138646 +#endif
138647 #ifdef PLATFORM_WINDOWS
138648
138649 NdisDprReleaseSpinLock(plock);
138650 @@ -789,7 +1271,11 @@ u32 rtw_get_current_time(void)
138651 #ifdef PLATFORM_LINUX
138652 return jiffies;
138653 #endif
138654 -
138655 +#ifdef PLATFORM_FREEBSD
138656 + struct timeval tvp;
138657 + getmicrotime(&tvp);
138658 + return tvp.tv_sec;
138659 +#endif
138660 #ifdef PLATFORM_WINDOWS
138661 LARGE_INTEGER SystemTime;
138662 NdisGetCurrentSystemTime(&SystemTime);
138663 @@ -800,11 +1286,26 @@ u32 rtw_get_current_time(void)
138664 inline u32 rtw_systime_to_ms(u32 systime)
138665 {
138666 #ifdef PLATFORM_LINUX
138667 - return systime*1000/HZ;
138668 + return systime * 1000 / HZ;
138669 +#endif
138670 +#ifdef PLATFORM_FREEBSD
138671 + return systime * 1000;
138672 #endif
138673 -
138674 #ifdef PLATFORM_WINDOWS
138675 - return systime /10000 ;
138676 + return systime / 10000 ;
138677 +#endif
138678 +}
138679 +
138680 +inline u32 rtw_ms_to_systime(u32 ms)
138681 +{
138682 +#ifdef PLATFORM_LINUX
138683 + return ms * HZ / 1000;
138684 +#endif
138685 +#ifdef PLATFORM_FREEBSD
138686 + return ms /1000;
138687 +#endif
138688 +#ifdef PLATFORM_WINDOWS
138689 + return ms * 10000 ;
138690 #endif
138691 }
138692
138693 @@ -814,7 +1315,9 @@ inline s32 rtw_get_passing_time_ms(u32 start)
138694 #ifdef PLATFORM_LINUX
138695 return rtw_systime_to_ms(jiffies-start);
138696 #endif
138697 -
138698 +#ifdef PLATFORM_FREEBSD
138699 + return rtw_systime_to_ms(rtw_get_current_time());
138700 +#endif
138701 #ifdef PLATFORM_WINDOWS
138702 LARGE_INTEGER SystemTime;
138703 NdisGetCurrentSystemTime(&SystemTime);
138704 @@ -827,7 +1330,9 @@ inline s32 rtw_get_time_interval_ms(u32 start, u32 end)
138705 #ifdef PLATFORM_LINUX
138706 return rtw_systime_to_ms(end-start);
138707 #endif
138708 -
138709 +#ifdef PLATFORM_FREEBSD
138710 + return rtw_systime_to_ms(rtw_get_current_time());
138711 +#endif
138712 #ifdef PLATFORM_WINDOWS
138713 return rtw_systime_to_ms(end-start);
138714 #endif
138715 @@ -852,6 +1357,10 @@ void rtw_sleep_schedulable(int ms)
138716 return;
138717
138718 #endif
138719 +#ifdef PLATFORM_FREEBSD
138720 + DELAY(ms*1000);
138721 + return ;
138722 +#endif
138723
138724 #ifdef PLATFORM_WINDOWS
138725
138726 @@ -870,7 +1379,11 @@ void rtw_msleep_os(int ms)
138727 msleep((unsigned int)ms);
138728
138729 #endif
138730 -
138731 +#ifdef PLATFORM_FREEBSD
138732 + //Delay for delay microseconds
138733 + DELAY(ms*1000);
138734 + return ;
138735 +#endif
138736 #ifdef PLATFORM_WINDOWS
138737
138738 NdisMSleep(ms*1000); //(us)*1000=(ms)
138739 @@ -891,7 +1404,12 @@ void rtw_usleep_os(int us)
138740 msleep( (us/1000) + 1);
138741
138742 #endif
138743 -
138744 +#ifdef PLATFORM_FREEBSD
138745 + //Delay for delay microseconds
138746 + DELAY(us);
138747 +
138748 + return ;
138749 +#endif
138750 #ifdef PLATFORM_WINDOWS
138751
138752 NdisMSleep(us); //(us)
138753 @@ -962,7 +1480,10 @@ void rtw_mdelay_os(int ms)
138754 mdelay((unsigned long)ms);
138755
138756 #endif
138757 -
138758 +#ifdef PLATFORM_FREEBSD
138759 + DELAY(ms*1000);
138760 + return ;
138761 +#endif
138762 #ifdef PLATFORM_WINDOWS
138763
138764 NdisStallExecution(ms*1000); //(us)*1000=(ms)
138765 @@ -979,7 +1500,11 @@ void rtw_udelay_os(int us)
138766 udelay((unsigned long)us);
138767
138768 #endif
138769 -
138770 +#ifdef PLATFORM_FREEBSD
138771 + //Delay for delay microseconds
138772 + DELAY(us);
138773 + return ;
138774 +#endif
138775 #ifdef PLATFORM_WINDOWS
138776
138777 NdisStallExecution(us); //(us)
138778 @@ -989,6 +1514,19 @@ void rtw_udelay_os(int us)
138779 }
138780 #endif
138781
138782 +void rtw_yield_os()
138783 +{
138784 +#ifdef PLATFORM_LINUX
138785 + yield();
138786 +#endif
138787 +#ifdef PLATFORM_FREEBSD
138788 + yield();
138789 +#endif
138790 +#ifdef PLATFORM_WINDOWS
138791 + SwitchToThread();
138792 +#endif
138793 +}
138794 +
138795 #define RTW_SUSPEND_LOCK_NAME "rtw_wifi"
138796
138797 #ifdef CONFIG_WAKELOCK
138798 @@ -1001,29 +1539,15 @@ static android_suspend_lock_t rtw_suspend_lock ={
138799
138800 inline void rtw_suspend_lock_init()
138801 {
138802 - #if defined(CONFIG_WAKELOCK) || defined(CONFIG_ANDROID_POWER)
138803 - DBG_871X("##########%s ###########\n", __FUNCTION__);
138804 - #endif
138805 -
138806 #ifdef CONFIG_WAKELOCK
138807 wake_lock_init(&rtw_suspend_lock, WAKE_LOCK_SUSPEND, RTW_SUSPEND_LOCK_NAME);
138808 #elif defined(CONFIG_ANDROID_POWER)
138809 android_init_suspend_lock(&rtw_suspend_lock);
138810 #endif
138811 -
138812 }
138813
138814 inline void rtw_suspend_lock_uninit()
138815 {
138816 -
138817 - #if defined(CONFIG_WAKELOCK) || defined(CONFIG_ANDROID_POWER)
138818 - DBG_871X("##########%s###########\n", __FUNCTION__);
138819 - if(rtw_suspend_lock.link.next == LIST_POISON1 || rtw_suspend_lock.link.prev == LIST_POISON2) {
138820 - DBG_871X("##########%s########### list poison!!\n", __FUNCTION__);
138821 - return;
138822 - }
138823 - #endif
138824 -
138825 #ifdef CONFIG_WAKELOCK
138826 wake_lock_destroy(&rtw_suspend_lock);
138827 #elif defined(CONFIG_ANDROID_POWER)
138828 @@ -1031,18 +1555,8 @@ inline void rtw_suspend_lock_uninit()
138829 #endif
138830 }
138831
138832 -
138833 inline void rtw_lock_suspend()
138834 {
138835 -
138836 - #if defined(CONFIG_WAKELOCK) || defined(CONFIG_ANDROID_POWER)
138837 - //DBG_871X("##########%s###########\n", __FUNCTION__);
138838 - if(rtw_suspend_lock.link.next == LIST_POISON1 || rtw_suspend_lock.link.prev == LIST_POISON2) {
138839 - DBG_871X("##########%s########### list poison!!\n", __FUNCTION__);
138840 - return;
138841 - }
138842 - #endif
138843 -
138844 #ifdef CONFIG_WAKELOCK
138845 wake_lock(&rtw_suspend_lock);
138846 #elif defined(CONFIG_ANDROID_POWER)
138847 @@ -1052,14 +1566,6 @@ inline void rtw_lock_suspend()
138848
138849 inline void rtw_unlock_suspend()
138850 {
138851 - #if defined(CONFIG_WAKELOCK) || defined(CONFIG_ANDROID_POWER)
138852 - //DBG_871X("##########%s###########\n", __FUNCTION__);
138853 - if(rtw_suspend_lock.link.next == LIST_POISON1 || rtw_suspend_lock.link.prev == LIST_POISON2) {
138854 - DBG_871X("##########%s########### list poison!!\n", __FUNCTION__);
138855 - return;
138856 - }
138857 - #endif
138858 -
138859 #ifdef CONFIG_WAKELOCK
138860 wake_unlock(&rtw_suspend_lock);
138861 #elif defined(CONFIG_ANDROID_POWER)
138862 @@ -1067,6 +1573,14 @@ inline void rtw_unlock_suspend()
138863 #endif
138864 }
138865
138866 +inline void rtw_lock_suspend_timeout(u32 timeout_ms)
138867 +{
138868 + #ifdef CONFIG_WAKELOCK
138869 + wake_lock_timeout(&rtw_suspend_lock, rtw_ms_to_systime(timeout_ms));
138870 + #elif defined(CONFIG_ANDROID_POWER)
138871 + android_lock_suspend_auto_expire(&rtw_suspend_lock, rtw_ms_to_systime(timeout_ms));
138872 + #endif
138873 +}
138874
138875 inline void ATOMIC_SET(ATOMIC_T *v, int i)
138876 {
138877 @@ -1074,6 +1588,8 @@ inline void ATOMIC_SET(ATOMIC_T *v, int i)
138878 atomic_set(v,i);
138879 #elif defined(PLATFORM_WINDOWS)
138880 *v=i;// other choice????
138881 + #elif defined(PLATFORM_FREEBSD)
138882 + atomic_set_int(v,i);
138883 #endif
138884 }
138885
138886 @@ -1083,6 +1599,8 @@ inline int ATOMIC_READ(ATOMIC_T *v)
138887 return atomic_read(v);
138888 #elif defined(PLATFORM_WINDOWS)
138889 return *v; // other choice????
138890 + #elif defined(PLATFORM_FREEBSD)
138891 + return atomic_load_acq_32(v);
138892 #endif
138893 }
138894
138895 @@ -1092,6 +1610,8 @@ inline void ATOMIC_ADD(ATOMIC_T *v, int i)
138896 atomic_add(i,v);
138897 #elif defined(PLATFORM_WINDOWS)
138898 InterlockedAdd(v,i);
138899 + #elif defined(PLATFORM_FREEBSD)
138900 + atomic_add_int(v,i);
138901 #endif
138902 }
138903 inline void ATOMIC_SUB(ATOMIC_T *v, int i)
138904 @@ -1100,6 +1620,8 @@ inline void ATOMIC_SUB(ATOMIC_T *v, int i)
138905 atomic_sub(i,v);
138906 #elif defined(PLATFORM_WINDOWS)
138907 InterlockedAdd(v,-i);
138908 + #elif defined(PLATFORM_FREEBSD)
138909 + atomic_subtract_int(v,i);
138910 #endif
138911 }
138912
138913 @@ -1109,6 +1631,8 @@ inline void ATOMIC_INC(ATOMIC_T *v)
138914 atomic_inc(v);
138915 #elif defined(PLATFORM_WINDOWS)
138916 InterlockedIncrement(v);
138917 + #elif defined(PLATFORM_FREEBSD)
138918 + atomic_add_int(v,1);
138919 #endif
138920 }
138921
138922 @@ -1118,6 +1642,8 @@ inline void ATOMIC_DEC(ATOMIC_T *v)
138923 atomic_dec(v);
138924 #elif defined(PLATFORM_WINDOWS)
138925 InterlockedDecrement(v);
138926 + #elif defined(PLATFORM_FREEBSD)
138927 + atomic_subtract_int(v,1);
138928 #endif
138929 }
138930
138931 @@ -1127,6 +1653,9 @@ inline int ATOMIC_ADD_RETURN(ATOMIC_T *v, int i)
138932 return atomic_add_return(i,v);
138933 #elif defined(PLATFORM_WINDOWS)
138934 return InterlockedAdd(v,i);
138935 + #elif defined(PLATFORM_FREEBSD)
138936 + atomic_add_int(v,i);
138937 + return atomic_load_acq_32(v);
138938 #endif
138939 }
138940
138941 @@ -1136,6 +1665,9 @@ inline int ATOMIC_SUB_RETURN(ATOMIC_T *v, int i)
138942 return atomic_sub_return(i,v);
138943 #elif defined(PLATFORM_WINDOWS)
138944 return InterlockedAdd(v,-i);
138945 + #elif defined(PLATFORM_FREEBSD)
138946 + atomic_subtract_int(v,i);
138947 + return atomic_load_acq_32(v);
138948 #endif
138949 }
138950
138951 @@ -1145,6 +1677,9 @@ inline int ATOMIC_INC_RETURN(ATOMIC_T *v)
138952 return atomic_inc_return(v);
138953 #elif defined(PLATFORM_WINDOWS)
138954 return InterlockedIncrement(v);
138955 + #elif defined(PLATFORM_FREEBSD)
138956 + atomic_add_int(v,1);
138957 + return atomic_load_acq_32(v);
138958 #endif
138959 }
138960
138961 @@ -1154,6 +1689,9 @@ inline int ATOMIC_DEC_RETURN(ATOMIC_T *v)
138962 return atomic_dec_return(v);
138963 #elif defined(PLATFORM_WINDOWS)
138964 return InterlockedDecrement(v);
138965 + #elif defined(PLATFORM_FREEBSD)
138966 + atomic_subtract_int(v,1);
138967 + return atomic_load_acq_32(v);
138968 #endif
138969 }
138970
138971 @@ -1278,20 +1816,20 @@ static int retriveFromFile(char *path, u8* buf, u32 sz)
138972
138973 if(path && buf) {
138974 if( 0 == (ret=openFile(&fp,path, O_RDONLY, 0)) ){
138975 - DBG_8192C("%s openFile path:%s fp=%p\n",__FUNCTION__, path ,fp);
138976 + DBG_871X("%s openFile path:%s fp=%p\n",__FUNCTION__, path ,fp);
138977
138978 oldfs = get_fs(); set_fs(get_ds());
138979 ret=readFile(fp, buf, sz);
138980 set_fs(oldfs);
138981 closeFile(fp);
138982
138983 - DBG_8192C("%s readFile, ret:%d\n",__FUNCTION__, ret);
138984 + DBG_871X("%s readFile, ret:%d\n",__FUNCTION__, ret);
138985
138986 } else {
138987 - DBG_8192C("%s openFile path:%s Fail, ret:%d\n",__FUNCTION__, path, ret);
138988 + DBG_871X("%s openFile path:%s Fail, ret:%d\n",__FUNCTION__, path, ret);
138989 }
138990 } else {
138991 - DBG_8192C("%s NULL pointer\n",__FUNCTION__);
138992 + DBG_871X("%s NULL pointer\n",__FUNCTION__);
138993 ret = -EINVAL;
138994 }
138995 return ret;
138996 @@ -1312,20 +1850,20 @@ static int storeToFile(char *path, u8* buf, u32 sz)
138997
138998 if(path && buf) {
138999 if( 0 == (ret=openFile(&fp, path, O_CREAT|O_WRONLY, 0666)) ) {
139000 - DBG_8192C("%s openFile path:%s fp=%p\n",__FUNCTION__, path ,fp);
139001 + DBG_871X("%s openFile path:%s fp=%p\n",__FUNCTION__, path ,fp);
139002
139003 oldfs = get_fs(); set_fs(get_ds());
139004 ret=writeFile(fp, buf, sz);
139005 set_fs(oldfs);
139006 closeFile(fp);
139007
139008 - DBG_8192C("%s writeFile, ret:%d\n",__FUNCTION__, ret);
139009 + DBG_871X("%s writeFile, ret:%d\n",__FUNCTION__, ret);
139010
139011 } else {
139012 - DBG_8192C("%s openFile path:%s Fail, ret:%d\n",__FUNCTION__, path, ret);
139013 + DBG_871X("%s openFile path:%s Fail, ret:%d\n",__FUNCTION__, path, ret);
139014 }
139015 } else {
139016 - DBG_8192C("%s NULL pointer\n",__FUNCTION__);
139017 + DBG_871X("%s NULL pointer\n",__FUNCTION__);
139018 ret = -EINVAL;
139019 }
139020 return ret;
139021 @@ -1392,8 +1930,12 @@ struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, void *old_p
139022 {
139023 struct net_device *pnetdev;
139024 struct rtw_netdev_priv_indicator *pnpi;
139025 -
139026 +
139027 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
139028 + pnetdev = alloc_etherdev_mq(sizeof(struct rtw_netdev_priv_indicator), 4);
139029 +#else
139030 pnetdev = alloc_etherdev(sizeof(struct rtw_netdev_priv_indicator));
139031 +#endif
139032 if (!pnetdev)
139033 goto RETURN;
139034
139035 @@ -1409,8 +1951,12 @@ struct net_device *rtw_alloc_etherdev(int sizeof_priv)
139036 {
139037 struct net_device *pnetdev;
139038 struct rtw_netdev_priv_indicator *pnpi;
139039 -
139040 +
139041 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
139042 + pnetdev = alloc_etherdev_mq(sizeof(struct rtw_netdev_priv_indicator), 4);
139043 +#else
139044 pnetdev = alloc_etherdev(sizeof(struct rtw_netdev_priv_indicator));
139045 +#endif
139046 if (!pnetdev)
139047 goto RETURN;
139048
139049 @@ -1476,9 +2022,7 @@ int rtw_change_ifname(_adapter *padapter, const char *ifname)
139050 #endif
139051 unregister_netdevice(cur_pnetdev);
139052
139053 - #ifdef CONFIG_PROC_DEBUG
139054 rtw_proc_remove_one(cur_pnetdev);
139055 - #endif //CONFIG_PROC_DEBUG
139056
139057 rereg_priv->old_pnetdev=cur_pnetdev;
139058
139059 @@ -1488,21 +2032,7 @@ int rtw_change_ifname(_adapter *padapter, const char *ifname)
139060 goto error;
139061 }
139062
139063 -#ifdef CONFIG_USB_HCI
139064 -
139065 - SET_NETDEV_DEV(pnetdev, &padapter->dvobjpriv.pusbintf->dev);
139066 -
139067 - usb_set_intfdata(padapter->dvobjpriv.pusbintf, pnetdev);
139068 -
139069 -#elif defined(CONFIG_PCI_HCI)
139070 -
139071 -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
139072 - SET_NETDEV_DEV(pnetdev, &padapter->dvobjpriv.ppcidev->dev);
139073 -#endif
139074 -
139075 - pci_set_drvdata(padapter->dvobjpriv.ppcidev, pnetdev);
139076 -
139077 -#endif
139078 + SET_NETDEV_DEV(pnetdev, dvobj_to_dev(adapter_to_dvobj(padapter)));
139079
139080 rtw_init_netdev_name(pnetdev, ifname);
139081
139082 @@ -1520,9 +2050,7 @@ int rtw_change_ifname(_adapter *padapter, const char *ifname)
139083 goto error;
139084 }
139085
139086 - #ifdef CONFIG_PROC_DEBUG
139087 rtw_proc_init_one(pnetdev);
139088 - #endif //CONFIG_PROC_DEBUG
139089
139090 return 0;
139091
139092 @@ -1534,12 +2062,83 @@ error:
139093 #endif
139094 #endif //MEM_ALLOC_REFINE_ADAPTOR
139095
139096 +#ifdef PLATFORM_FREEBSD
139097 +/*
139098 + * Copy a buffer from userspace and write into kernel address
139099 + * space.
139100 + *
139101 + * This emulation just calls the FreeBSD copyin function (to
139102 + * copy data from user space buffer into a kernel space buffer)
139103 + * and is designed to be used with the above io_write_wrapper.
139104 + *
139105 + * This function should return the number of bytes not copied.
139106 + * I.e. success results in a zero value.
139107 + * Negative error values are not returned.
139108 + */
139109 +unsigned long
139110 +copy_from_user(void *to, const void *from, unsigned long n)
139111 +{
139112 + if ( copyin(from, to, n) != 0 ) {
139113 + /* Any errors will be treated as a failure
139114 + to copy any of the requested bytes */
139115 + return n;
139116 + }
139117 +
139118 + return 0;
139119 +}
139120 +
139121 +unsigned long
139122 +copy_to_user(void *to, const void *from, unsigned long n)
139123 +{
139124 + if ( copyout(from, to, n) != 0 ) {
139125 + /* Any errors will be treated as a failure
139126 + to copy any of the requested bytes */
139127 + return n;
139128 + }
139129 +
139130 + return 0;
139131 +}
139132 +
139133 +
139134 +/*
139135 + * The usb_register and usb_deregister functions are used to register
139136 + * usb drivers with the usb subsystem. In this compatibility layer
139137 + * emulation a list of drivers (struct usb_driver) is maintained
139138 + * and is used for probing/attaching etc.
139139 + *
139140 + * usb_register and usb_deregister simply call these functions.
139141 + */
139142 +int
139143 +usb_register(struct usb_driver *driver)
139144 +{
139145 + rtw_usb_linux_register(driver);
139146 + return 0;
139147 +}
139148 +
139149 +
139150 +int
139151 +usb_deregister(struct usb_driver *driver)
139152 +{
139153 + rtw_usb_linux_deregister(driver);
139154 + return 0;
139155 +}
139156 +
139157 +void module_init_exit_wrapper(void *arg)
139158 +{
139159 + int (*func)(void) = arg;
139160 + func();
139161 + return;
139162 +}
139163 +
139164 +#endif //PLATFORM_FREEBSD
139165 u64 rtw_modular64(u64 x, u64 y)
139166 {
139167 #ifdef PLATFORM_LINUX
139168 return do_div(x, y);
139169 #elif defined(PLATFORM_WINDOWS)
139170 return (x % y);
139171 +#elif defined(PLATFORM_FREEBSD)
139172 + return (x %y);
139173 #endif
139174 }
139175
139176 @@ -1550,22 +2149,152 @@ u64 rtw_division64(u64 x, u64 y)
139177 return x;
139178 #elif defined(PLATFORM_WINDOWS)
139179 return (x / y);
139180 +#elif defined(PLATFORM_FREEBSD)
139181 + return (x / y);
139182 #endif
139183 }
139184
139185 -#ifdef PLATFORM_LINUX
139186 -int start_kthread(_thread_hdl_ *t_hdl, int (*threadfn)(void *data),
139187 - void *data, const char *name)
139188 +void rtw_buf_free(u8 **buf, u32 *buf_len)
139189 {
139190 -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0))
139191 - *t_hdl = kernel_thread(threadfn, data, CLONE_FS|CLONE_FILES);
139192 - if(*t_hdl < 0)
139193 -#else
139194 - *t_hdl = kthread_run(threadfn, data, name);
139195 - if(IS_ERR(*t_hdl))
139196 -#endif
139197 - return 0;
139198 - return -1;
139199 + u32 ori_len;
139200 +
139201 + if (!buf || !buf_len)
139202 + return;
139203 +
139204 + ori_len = *buf_len;
139205 +
139206 + if (*buf) {
139207 + u32 tmp_buf_len = *buf_len;
139208 + *buf_len = 0;
139209 + rtw_mfree(*buf, tmp_buf_len);
139210 + *buf = NULL;
139211 + }
139212 +}
139213 +
139214 +void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len)
139215 +{
139216 + u32 ori_len = 0, dup_len = 0;
139217 + u8 *ori = NULL;
139218 + u8 *dup = NULL;
139219 +
139220 + if (!buf || !buf_len)
139221 + return;
139222 +
139223 + if (!src || !src_len)
139224 + goto keep_ori;
139225 +
139226 + /* duplicate src */
139227 + dup = rtw_malloc(src_len);
139228 + if (dup) {
139229 + dup_len = src_len;
139230 + _rtw_memcpy(dup, src, dup_len);
139231 + }
139232 +
139233 +keep_ori:
139234 + ori = *buf;
139235 + ori_len = *buf_len;
139236 +
139237 + /* replace buf with dup */
139238 + *buf_len = 0;
139239 + *buf = dup;
139240 + *buf_len = dup_len;
139241 +
139242 + /* free ori */
139243 + if (ori && ori_len > 0)
139244 + rtw_mfree(ori, ori_len);
139245 +}
139246 +
139247 +
139248 +/**
139249 + * rtw_cbuf_full - test if cbuf is full
139250 + * @cbuf: pointer of struct rtw_cbuf
139251 + *
139252 + * Returns: _TRUE if cbuf is full
139253 + */
139254 +inline bool rtw_cbuf_full(struct rtw_cbuf *cbuf)
139255 +{
139256 + return (cbuf->write == cbuf->read-1)? _TRUE : _FALSE;
139257 +}
139258 +
139259 +/**
139260 + * rtw_cbuf_empty - test if cbuf is empty
139261 + * @cbuf: pointer of struct rtw_cbuf
139262 + *
139263 + * Returns: _TRUE if cbuf is empty
139264 + */
139265 +inline bool rtw_cbuf_empty(struct rtw_cbuf *cbuf)
139266 +{
139267 + return (cbuf->write == cbuf->read)? _TRUE : _FALSE;
139268 +}
139269 +
139270 +/**
139271 + * rtw_cbuf_push - push a pointer into cbuf
139272 + * @cbuf: pointer of struct rtw_cbuf
139273 + * @buf: pointer to push in
139274 + *
139275 + * Lock free operation, be careful of the use scheme
139276 + * Returns: _TRUE push success
139277 + */
139278 +bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf)
139279 +{
139280 + if (rtw_cbuf_full(cbuf))
139281 + return _FAIL;
139282 +
139283 + if (0)
139284 + DBG_871X("%s on %u\n", __func__, cbuf->write);
139285 + cbuf->bufs[cbuf->write] = buf;
139286 + cbuf->write = (cbuf->write+1)%cbuf->size;
139287 +
139288 + return _SUCCESS;
139289 +}
139290 +
139291 +/**
139292 + * rtw_cbuf_pop - pop a pointer from cbuf
139293 + * @cbuf: pointer of struct rtw_cbuf
139294 + *
139295 + * Lock free operation, be careful of the use scheme
139296 + * Returns: pointer popped out
139297 + */
139298 +void *rtw_cbuf_pop(struct rtw_cbuf *cbuf)
139299 +{
139300 + void *buf;
139301 + if (rtw_cbuf_empty(cbuf))
139302 + return NULL;
139303 +
139304 + if (0)
139305 + DBG_871X("%s on %u\n", __func__, cbuf->read);
139306 + buf = cbuf->bufs[cbuf->read];
139307 + cbuf->read = (cbuf->read+1)%cbuf->size;
139308 +
139309 + return buf;
139310 +}
139311 +
139312 +/**
139313 + * rtw_cbuf_alloc - allocte a rtw_cbuf with given size and do initialization
139314 + * @size: size of pointer
139315 + *
139316 + * Returns: pointer of srtuct rtw_cbuf, NULL for allocation failure
139317 + */
139318 +struct rtw_cbuf *rtw_cbuf_alloc(u32 size)
139319 +{
139320 + struct rtw_cbuf *cbuf;
139321 +
139322 + cbuf = (struct rtw_cbuf *)rtw_malloc(sizeof(*cbuf) + sizeof(void*)*size);
139323 +
139324 + if (cbuf) {
139325 + cbuf->write = cbuf->read = 0;
139326 + cbuf->size = size;
139327 + }
139328 +
139329 + return cbuf;
139330 +}
139331 +
139332 +/**
139333 + * rtw_cbuf_free - free the given rtw_cbuf
139334 + * @cbuf: pointer of struct rtw_cbuf to free
139335 + */
139336 +void rtw_cbuf_free(struct rtw_cbuf *cbuf)
139337 +{
139338 + rtw_mfree((u8*)cbuf, sizeof(*cbuf) + sizeof(void*)*cbuf->size);
139339 }
139340 -#endif
139341
139342 diff --git a/drivers/net/wireless/rtl8192cu/runwpa b/drivers/net/wireless/rtl8192cu/runwpa
139343 new file mode 100755
139344 index 0000000..f825e8b
139345 --- /dev/null
139346 +++ b/drivers/net/wireless/rtl8192cu/runwpa
139347 @@ -0,0 +1,20 @@
139348 +#!/bin/bash
139349 +
139350 +if [ "`which iwconfig`" = "" ] ; then
139351 + echo "WARNING:Wireless tool not exist!"
139352 + echo " Please install it!"
139353 + exit
139354 +else
139355 + if [ `uname -r | cut -d. -f2` -eq 4 ]; then
139356 + wpa_supplicant -D ipw -c wpa1.conf -i wlan0
139357 + else
139358 + if [ `iwconfig -v |awk '{print $4}' | head -n 1` -lt 18 ] ; then
139359 + wpa_supplicant -D ipw -c wpa1.conf -i wlan0
139360 + else
139361 + wpa_supplicant -D wext -c wpa1.conf -i wlan0
139362 + fi
139363 +
139364 + fi
139365 +fi
139366 +
139367 +
139368 diff --git a/drivers/net/wireless/rtl8192cu/wlan0dhcp b/drivers/net/wireless/rtl8192cu/wlan0dhcp
139369 old mode 100644
139370 new mode 100755
139371 --
139372 1.9.1
139373