mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-12 08:48:48 +00:00
Staging: Add pristine upstream vt6656 driver sources to drivers/staging/vt6656.
Add pristine upstream vt6656 driver sources to drivers/staging/vt6656. These files were copied from the driver directory in the upstream source archive, available here: http://www.viaarena.com/Driver/VT6656_Linux_src_v1.19_12_x86.zip After copying, trailing whitespace was stripped. This is GPL-licensed code. Signed-off-by: Forest Bond <forest@alittletooquiet.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
36c7928c3e
commit
92b9679711
358
drivers/staging/vt6656/80211hdr.h
Normal file
358
drivers/staging/vt6656/80211hdr.h
Normal file
@ -0,0 +1,358 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: 80211hdr.h
|
||||||
|
*
|
||||||
|
* Purpose: 802.11 MAC headers related pre-defines and macros.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: Apr 8, 2002
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __80211HDR_H__
|
||||||
|
#define __80211HDR_H__
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
// bit type
|
||||||
|
#define BIT0 0x00000001
|
||||||
|
#define BIT1 0x00000002
|
||||||
|
#define BIT2 0x00000004
|
||||||
|
#define BIT3 0x00000008
|
||||||
|
#define BIT4 0x00000010
|
||||||
|
#define BIT5 0x00000020
|
||||||
|
#define BIT6 0x00000040
|
||||||
|
#define BIT7 0x00000080
|
||||||
|
#define BIT8 0x00000100
|
||||||
|
#define BIT9 0x00000200
|
||||||
|
#define BIT10 0x00000400
|
||||||
|
#define BIT11 0x00000800
|
||||||
|
#define BIT12 0x00001000
|
||||||
|
#define BIT13 0x00002000
|
||||||
|
#define BIT14 0x00004000
|
||||||
|
#define BIT15 0x00008000
|
||||||
|
#define BIT16 0x00010000
|
||||||
|
#define BIT17 0x00020000
|
||||||
|
#define BIT18 0x00040000
|
||||||
|
#define BIT19 0x00080000
|
||||||
|
#define BIT20 0x00100000
|
||||||
|
#define BIT21 0x00200000
|
||||||
|
#define BIT22 0x00400000
|
||||||
|
#define BIT23 0x00800000
|
||||||
|
#define BIT24 0x01000000
|
||||||
|
#define BIT25 0x02000000
|
||||||
|
#define BIT26 0x04000000
|
||||||
|
#define BIT27 0x08000000
|
||||||
|
#define BIT28 0x10000000
|
||||||
|
#define BIT29 0x20000000
|
||||||
|
#define BIT30 0x40000000
|
||||||
|
#define BIT31 0x80000000
|
||||||
|
|
||||||
|
// 802.11 frame related, defined as 802.11 spec
|
||||||
|
#define WLAN_ADDR_LEN 6
|
||||||
|
#define WLAN_CRC_LEN 4
|
||||||
|
#define WLAN_CRC32_LEN 4
|
||||||
|
#define WLAN_FCS_LEN 4
|
||||||
|
#define WLAN_BSSID_LEN 6
|
||||||
|
#define WLAN_BSS_TS_LEN 8
|
||||||
|
#define WLAN_HDR_ADDR2_LEN 16
|
||||||
|
#define WLAN_HDR_ADDR3_LEN 24
|
||||||
|
#define WLAN_HDR_ADDR4_LEN 30
|
||||||
|
#define WLAN_IEHDR_LEN 2
|
||||||
|
#define WLAN_SSID_MAXLEN 32
|
||||||
|
//#define WLAN_RATES_MAXLEN 255
|
||||||
|
#define WLAN_RATES_MAXLEN 16
|
||||||
|
#define WLAN_RATES_MAXLEN_11B 4
|
||||||
|
#define WLAN_RSN_MAXLEN 32
|
||||||
|
#define WLAN_DATA_MAXLEN 2312
|
||||||
|
#define WLAN_A3FR_MAXLEN (WLAN_HDR_ADDR3_LEN + WLAN_DATA_MAXLEN + WLAN_CRC_LEN)
|
||||||
|
|
||||||
|
|
||||||
|
#define WLAN_BEACON_FR_MAXLEN WLAN_A3FR_MAXLEN
|
||||||
|
#define WLAN_ATIM_FR_MAXLEN (WLAN_HDR_ADDR3_LEN + 0)
|
||||||
|
#define WLAN_NULLDATA_FR_MAXLEN (WLAN_HDR_ADDR3_LEN + 0)
|
||||||
|
#define WLAN_DISASSOC_FR_MAXLEN (WLAN_HDR_ADDR3_LEN + 2)
|
||||||
|
#define WLAN_ASSOCREQ_FR_MAXLEN WLAN_A3FR_MAXLEN
|
||||||
|
#define WLAN_ASSOCRESP_FR_MAXLEN WLAN_A3FR_MAXLEN
|
||||||
|
#define WLAN_REASSOCREQ_FR_MAXLEN WLAN_A3FR_MAXLEN
|
||||||
|
#define WLAN_REASSOCRESP_FR_MAXLEN WLAN_A3FR_MAXLEN
|
||||||
|
#define WLAN_PROBEREQ_FR_MAXLEN WLAN_A3FR_MAXLEN
|
||||||
|
#define WLAN_PROBERESP_FR_MAXLEN WLAN_A3FR_MAXLEN
|
||||||
|
#define WLAN_AUTHEN_FR_MAXLEN WLAN_A3FR_MAXLEN
|
||||||
|
#define WLAN_DEAUTHEN_FR_MAXLEN (WLAN_HDR_ADDR3_LEN + 2)
|
||||||
|
|
||||||
|
|
||||||
|
#define WLAN_WEP_NKEYS 4
|
||||||
|
#define WLAN_WEP40_KEYLEN 5
|
||||||
|
#define WLAN_WEP104_KEYLEN 13
|
||||||
|
#define WLAN_WEP232_KEYLEN 29
|
||||||
|
//#define WLAN_WEPMAX_KEYLEN 29
|
||||||
|
#define WLAN_WEPMAX_KEYLEN 32
|
||||||
|
#define WLAN_CHALLENGE_IE_MAXLEN 255
|
||||||
|
#define WLAN_CHALLENGE_IE_LEN 130
|
||||||
|
#define WLAN_CHALLENGE_LEN 128
|
||||||
|
#define WLAN_WEP_IV_LEN 4
|
||||||
|
#define WLAN_WEP_ICV_LEN 4
|
||||||
|
#define WLAN_FRAGS_MAX 16
|
||||||
|
|
||||||
|
// Frame Type
|
||||||
|
#define WLAN_TYPE_MGR 0x00
|
||||||
|
#define WLAN_TYPE_CTL 0x01
|
||||||
|
#define WLAN_TYPE_DATA 0x02
|
||||||
|
|
||||||
|
#define WLAN_FTYPE_MGMT 0x00
|
||||||
|
#define WLAN_FTYPE_CTL 0x01
|
||||||
|
#define WLAN_FTYPE_DATA 0x02
|
||||||
|
|
||||||
|
|
||||||
|
// Frame Subtypes
|
||||||
|
#define WLAN_FSTYPE_ASSOCREQ 0x00
|
||||||
|
#define WLAN_FSTYPE_ASSOCRESP 0x01
|
||||||
|
#define WLAN_FSTYPE_REASSOCREQ 0x02
|
||||||
|
#define WLAN_FSTYPE_REASSOCRESP 0x03
|
||||||
|
#define WLAN_FSTYPE_PROBEREQ 0x04
|
||||||
|
#define WLAN_FSTYPE_PROBERESP 0x05
|
||||||
|
#define WLAN_FSTYPE_BEACON 0x08
|
||||||
|
#define WLAN_FSTYPE_ATIM 0x09
|
||||||
|
#define WLAN_FSTYPE_DISASSOC 0x0a
|
||||||
|
#define WLAN_FSTYPE_AUTHEN 0x0b
|
||||||
|
#define WLAN_FSTYPE_DEAUTHEN 0x0c
|
||||||
|
#define WLAN_FSTYPE_ACTION 0x0d
|
||||||
|
|
||||||
|
// Control
|
||||||
|
#define WLAN_FSTYPE_PSPOLL 0x0a
|
||||||
|
#define WLAN_FSTYPE_RTS 0x0b
|
||||||
|
#define WLAN_FSTYPE_CTS 0x0c
|
||||||
|
#define WLAN_FSTYPE_ACK 0x0d
|
||||||
|
#define WLAN_FSTYPE_CFEND 0x0e
|
||||||
|
#define WLAN_FSTYPE_CFENDCFACK 0x0f
|
||||||
|
|
||||||
|
// Data
|
||||||
|
#define WLAN_FSTYPE_DATAONLY 0x00
|
||||||
|
#define WLAN_FSTYPE_DATA_CFACK 0x01
|
||||||
|
#define WLAN_FSTYPE_DATA_CFPOLL 0x02
|
||||||
|
#define WLAN_FSTYPE_DATA_CFACK_CFPOLL 0x03
|
||||||
|
#define WLAN_FSTYPE_NULL 0x04
|
||||||
|
#define WLAN_FSTYPE_CFACK 0x05
|
||||||
|
#define WLAN_FSTYPE_CFPOLL 0x06
|
||||||
|
#define WLAN_FSTYPE_CFACK_CFPOLL 0x07
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __BIG_ENDIAN
|
||||||
|
|
||||||
|
// GET & SET Frame Control bit
|
||||||
|
#define WLAN_GET_FC_PRVER(n) ((((WORD)(n) >> 8) & (BIT0 | BIT1))
|
||||||
|
#define WLAN_GET_FC_FTYPE(n) ((((WORD)(n) >> 8) & (BIT2 | BIT3)) >> 2)
|
||||||
|
#define WLAN_GET_FC_FSTYPE(n) ((((WORD)(n) >> 8) & (BIT4|BIT5|BIT6|BIT7)) >> 4)
|
||||||
|
#define WLAN_GET_FC_TODS(n) ((((WORD)(n) << 8) & (BIT8)) >> 8)
|
||||||
|
#define WLAN_GET_FC_FROMDS(n) ((((WORD)(n) << 8) & (BIT9)) >> 9)
|
||||||
|
#define WLAN_GET_FC_MOREFRAG(n) ((((WORD)(n) << 8) & (BIT10)) >> 10)
|
||||||
|
#define WLAN_GET_FC_RETRY(n) ((((WORD)(n) << 8) & (BIT11)) >> 11)
|
||||||
|
#define WLAN_GET_FC_PWRMGT(n) ((((WORD)(n) << 8) & (BIT12)) >> 12)
|
||||||
|
#define WLAN_GET_FC_MOREDATA(n) ((((WORD)(n) << 8) & (BIT13)) >> 13)
|
||||||
|
#define WLAN_GET_FC_ISWEP(n) ((((WORD)(n) << 8) & (BIT14)) >> 14)
|
||||||
|
#define WLAN_GET_FC_ORDER(n) ((((WORD)(n) << 8) & (BIT15)) >> 15)
|
||||||
|
|
||||||
|
// Sequence Field bit
|
||||||
|
#define WLAN_GET_SEQ_FRGNUM(n) (((WORD)(n) >> 8) & (BIT0|BIT1|BIT2|BIT3))
|
||||||
|
#define WLAN_GET_SEQ_SEQNUM(n) ((((WORD)(n) >> 8) & (~(BIT0|BIT1|BIT2|BIT3))) >> 4)
|
||||||
|
|
||||||
|
|
||||||
|
// Capability Field bit
|
||||||
|
#define WLAN_GET_CAP_INFO_ESS(n) (((n) >> 8) & BIT0)
|
||||||
|
#define WLAN_GET_CAP_INFO_IBSS(n) ((((n) >> 8) & BIT1) >> 1)
|
||||||
|
#define WLAN_GET_CAP_INFO_CFPOLLABLE(n) ((((n) >> 8) & BIT2) >> 2)
|
||||||
|
#define WLAN_GET_CAP_INFO_CFPOLLREQ(n) ((((n) >> 8) & BIT3) >> 3)
|
||||||
|
#define WLAN_GET_CAP_INFO_PRIVACY(n) ((((n) >> 8) & BIT4) >> 4)
|
||||||
|
#define WLAN_GET_CAP_INFO_SHORTPREAMBLE(n) ((((n) >> 8) & BIT5) >> 5)
|
||||||
|
#define WLAN_GET_CAP_INFO_PBCC(n) ((((n) >> 8) & BIT6) >> 6)
|
||||||
|
#define WLAN_GET_CAP_INFO_AGILITY(n) ((((n) >> 8) & BIT7) >> 7)
|
||||||
|
#define WLAN_GET_CAP_INFO_SPECTRUMMNG(n) ((((n)) & BIT8) >> 10)
|
||||||
|
#define WLAN_GET_CAP_INFO_SHORTSLOTTIME(n) ((((n)) & BIT10) >> 10)
|
||||||
|
#define WLAN_GET_CAP_INFO_DSSSOFDM(n) ((((n)) & BIT13) >> 13)
|
||||||
|
#define WLAN_GET_CAP_INFO_GRPACK(n) ((((n)) & BIT14) >> 14)
|
||||||
|
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
// GET & SET Frame Control bit
|
||||||
|
#define WLAN_GET_FC_PRVER(n) (((WORD)(n)) & (BIT0 | BIT1))
|
||||||
|
#define WLAN_GET_FC_FTYPE(n) ((((WORD)(n)) & (BIT2 | BIT3)) >> 2)
|
||||||
|
#define WLAN_GET_FC_FSTYPE(n) ((((WORD)(n)) & (BIT4|BIT5|BIT6|BIT7)) >> 4)
|
||||||
|
#define WLAN_GET_FC_TODS(n) ((((WORD)(n)) & (BIT8)) >> 8)
|
||||||
|
#define WLAN_GET_FC_FROMDS(n) ((((WORD)(n)) & (BIT9)) >> 9)
|
||||||
|
#define WLAN_GET_FC_MOREFRAG(n) ((((WORD)(n)) & (BIT10)) >> 10)
|
||||||
|
#define WLAN_GET_FC_RETRY(n) ((((WORD)(n)) & (BIT11)) >> 11)
|
||||||
|
#define WLAN_GET_FC_PWRMGT(n) ((((WORD)(n)) & (BIT12)) >> 12)
|
||||||
|
#define WLAN_GET_FC_MOREDATA(n) ((((WORD)(n)) & (BIT13)) >> 13)
|
||||||
|
#define WLAN_GET_FC_ISWEP(n) ((((WORD)(n)) & (BIT14)) >> 14)
|
||||||
|
#define WLAN_GET_FC_ORDER(n) ((((WORD)(n)) & (BIT15)) >> 15)
|
||||||
|
|
||||||
|
|
||||||
|
// Sequence Field bit
|
||||||
|
#define WLAN_GET_SEQ_FRGNUM(n) (((WORD)(n)) & (BIT0|BIT1|BIT2|BIT3))
|
||||||
|
#define WLAN_GET_SEQ_SEQNUM(n) ((((WORD)(n)) & (~(BIT0|BIT1|BIT2|BIT3))) >> 4)
|
||||||
|
|
||||||
|
|
||||||
|
// Capability Field bit
|
||||||
|
#define WLAN_GET_CAP_INFO_ESS(n) ((n) & BIT0)
|
||||||
|
#define WLAN_GET_CAP_INFO_IBSS(n) (((n) & BIT1) >> 1)
|
||||||
|
#define WLAN_GET_CAP_INFO_CFPOLLABLE(n) (((n) & BIT2) >> 2)
|
||||||
|
#define WLAN_GET_CAP_INFO_CFPOLLREQ(n) (((n) & BIT3) >> 3)
|
||||||
|
#define WLAN_GET_CAP_INFO_PRIVACY(n) (((n) & BIT4) >> 4)
|
||||||
|
#define WLAN_GET_CAP_INFO_SHORTPREAMBLE(n) (((n) & BIT5) >> 5)
|
||||||
|
#define WLAN_GET_CAP_INFO_PBCC(n) (((n) & BIT6) >> 6)
|
||||||
|
#define WLAN_GET_CAP_INFO_AGILITY(n) (((n) & BIT7) >> 7)
|
||||||
|
#define WLAN_GET_CAP_INFO_SPECTRUMMNG(n) (((n) & BIT8) >> 10)
|
||||||
|
#define WLAN_GET_CAP_INFO_SHORTSLOTTIME(n) (((n) & BIT10) >> 10)
|
||||||
|
#define WLAN_GET_CAP_INFO_DSSSOFDM(n) (((n) & BIT13) >> 13)
|
||||||
|
#define WLAN_GET_CAP_INFO_GRPACK(n) (((n) & BIT14) >> 14)
|
||||||
|
|
||||||
|
|
||||||
|
#endif //#ifdef __BIG_ENDIAN
|
||||||
|
|
||||||
|
|
||||||
|
#define WLAN_SET_CAP_INFO_ESS(n) (n)
|
||||||
|
#define WLAN_SET_CAP_INFO_IBSS(n) ((n) << 1)
|
||||||
|
#define WLAN_SET_CAP_INFO_CFPOLLABLE(n) ((n) << 2)
|
||||||
|
#define WLAN_SET_CAP_INFO_CFPOLLREQ(n) ((n) << 3)
|
||||||
|
#define WLAN_SET_CAP_INFO_PRIVACY(n) ((n) << 4)
|
||||||
|
#define WLAN_SET_CAP_INFO_SHORTPREAMBLE(n) ((n) << 5)
|
||||||
|
#define WLAN_SET_CAP_INFO_SPECTRUMMNG(n) ((n) << 8)
|
||||||
|
#define WLAN_SET_CAP_INFO_PBCC(n) ((n) << 6)
|
||||||
|
#define WLAN_SET_CAP_INFO_AGILITY(n) ((n) << 7)
|
||||||
|
#define WLAN_SET_CAP_INFO_SHORTSLOTTIME(n) ((n) << 10)
|
||||||
|
#define WLAN_SET_CAP_INFO_DSSSOFDM(n) ((n) << 13)
|
||||||
|
#define WLAN_SET_CAP_INFO_GRPACK(n) ((n) << 14)
|
||||||
|
|
||||||
|
|
||||||
|
#define WLAN_SET_FC_PRVER(n) ((WORD)(n))
|
||||||
|
#define WLAN_SET_FC_FTYPE(n) (((WORD)(n)) << 2)
|
||||||
|
#define WLAN_SET_FC_FSTYPE(n) (((WORD)(n)) << 4)
|
||||||
|
#define WLAN_SET_FC_TODS(n) (((WORD)(n)) << 8)
|
||||||
|
#define WLAN_SET_FC_FROMDS(n) (((WORD)(n)) << 9)
|
||||||
|
#define WLAN_SET_FC_MOREFRAG(n) (((WORD)(n)) << 10)
|
||||||
|
#define WLAN_SET_FC_RETRY(n) (((WORD)(n)) << 11)
|
||||||
|
#define WLAN_SET_FC_PWRMGT(n) (((WORD)(n)) << 12)
|
||||||
|
#define WLAN_SET_FC_MOREDATA(n) (((WORD)(n)) << 13)
|
||||||
|
#define WLAN_SET_FC_ISWEP(n) (((WORD)(n)) << 14)
|
||||||
|
#define WLAN_SET_FC_ORDER(n) (((WORD)(n)) << 15)
|
||||||
|
|
||||||
|
#define WLAN_SET_SEQ_FRGNUM(n) ((WORD)(n))
|
||||||
|
#define WLAN_SET_SEQ_SEQNUM(n) (((WORD)(n)) << 4)
|
||||||
|
|
||||||
|
// ERP Field bit
|
||||||
|
|
||||||
|
#define WLAN_GET_ERP_NONERP_PRESENT(n) ((n) & BIT0)
|
||||||
|
#define WLAN_GET_ERP_USE_PROTECTION(n) (((n) & BIT1) >> 1)
|
||||||
|
#define WLAN_GET_ERP_BARKER_MODE(n) (((n) & BIT2) >> 2)
|
||||||
|
|
||||||
|
#define WLAN_SET_ERP_NONERP_PRESENT(n) (n)
|
||||||
|
#define WLAN_SET_ERP_USE_PROTECTION(n) ((n) << 1)
|
||||||
|
#define WLAN_SET_ERP_BARKER_MODE(n) ((n) << 2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Support & Basic Rates field
|
||||||
|
#define WLAN_MGMT_IS_BASICRATE(b) ((b) & BIT7)
|
||||||
|
#define WLAN_MGMT_GET_RATE(b) ((b) & ~BIT7)
|
||||||
|
|
||||||
|
// TIM field
|
||||||
|
#define WLAN_MGMT_IS_MULTICAST_TIM(b) ((b) & BIT0)
|
||||||
|
#define WLAN_MGMT_GET_TIM_OFFSET(b) (((b) & ~BIT0) >> 1)
|
||||||
|
|
||||||
|
// 3-Addr & 4-Addr
|
||||||
|
#define WLAN_HDR_A3_DATA_PTR(p) (((PBYTE)(p)) + WLAN_HDR_ADDR3_LEN)
|
||||||
|
#define WLAN_HDR_A4_DATA_PTR(p) (((PBYTE)(p)) + WLAN_HDR_ADDR4_LEN)
|
||||||
|
|
||||||
|
// IEEE ADDR
|
||||||
|
#define IEEE_ADDR_UNIVERSAL 0x02
|
||||||
|
#define IEEE_ADDR_GROUP 0x01
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
BYTE abyAddr[6];
|
||||||
|
} IEEE_ADDR, *PIEEE_ADDR;
|
||||||
|
|
||||||
|
// 802.11 Header Format
|
||||||
|
|
||||||
|
typedef struct tagWLAN_80211HDR_A2 {
|
||||||
|
|
||||||
|
WORD wFrameCtl;
|
||||||
|
WORD wDurationID;
|
||||||
|
BYTE abyAddr1[WLAN_ADDR_LEN];
|
||||||
|
BYTE abyAddr2[WLAN_ADDR_LEN];
|
||||||
|
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
WLAN_80211HDR_A2, *PWLAN_80211HDR_A2;
|
||||||
|
|
||||||
|
typedef struct tagWLAN_80211HDR_A3 {
|
||||||
|
|
||||||
|
WORD wFrameCtl;
|
||||||
|
WORD wDurationID;
|
||||||
|
BYTE abyAddr1[WLAN_ADDR_LEN];
|
||||||
|
BYTE abyAddr2[WLAN_ADDR_LEN];
|
||||||
|
BYTE abyAddr3[WLAN_ADDR_LEN];
|
||||||
|
WORD wSeqCtl;
|
||||||
|
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
WLAN_80211HDR_A3, *PWLAN_80211HDR_A3;
|
||||||
|
|
||||||
|
typedef struct tagWLAN_80211HDR_A4 {
|
||||||
|
|
||||||
|
WORD wFrameCtl;
|
||||||
|
WORD wDurationID;
|
||||||
|
BYTE abyAddr1[WLAN_ADDR_LEN];
|
||||||
|
BYTE abyAddr2[WLAN_ADDR_LEN];
|
||||||
|
BYTE abyAddr3[WLAN_ADDR_LEN];
|
||||||
|
WORD wSeqCtl;
|
||||||
|
BYTE abyAddr4[WLAN_ADDR_LEN];
|
||||||
|
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
WLAN_80211HDR_A4, *PWLAN_80211HDR_A4;
|
||||||
|
|
||||||
|
|
||||||
|
typedef union tagUWLAN_80211HDR {
|
||||||
|
|
||||||
|
WLAN_80211HDR_A2 sA2;
|
||||||
|
WLAN_80211HDR_A3 sA3;
|
||||||
|
WLAN_80211HDR_A4 sA4;
|
||||||
|
|
||||||
|
} UWLAN_80211HDR, *PUWLAN_80211HDR;
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __80211HDR_H__
|
||||||
|
|
||||||
|
|
1050
drivers/staging/vt6656/80211mgr.c
Normal file
1050
drivers/staging/vt6656/80211mgr.c
Normal file
File diff suppressed because it is too large
Load Diff
867
drivers/staging/vt6656/80211mgr.h
Normal file
867
drivers/staging/vt6656/80211mgr.h
Normal file
@ -0,0 +1,867 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: 80211mgr.h
|
||||||
|
*
|
||||||
|
* Purpose: 802.11 managment frames pre-defines.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: May 8, 2002
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __80211MGR_H__
|
||||||
|
#define __80211MGR_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211HDR_H__)
|
||||||
|
#include "80211hdr.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
#define WLAN_MIN_ARRAY 1
|
||||||
|
|
||||||
|
// Information Element ID value
|
||||||
|
#define WLAN_EID_SSID 0
|
||||||
|
#define WLAN_EID_SUPP_RATES 1
|
||||||
|
#define WLAN_EID_FH_PARMS 2
|
||||||
|
#define WLAN_EID_DS_PARMS 3
|
||||||
|
#define WLAN_EID_CF_PARMS 4
|
||||||
|
#define WLAN_EID_TIM 5
|
||||||
|
#define WLAN_EID_IBSS_PARMS 6
|
||||||
|
#define WLAN_EID_COUNTRY 7
|
||||||
|
#define WLAN_EID_CHALLENGE 16
|
||||||
|
#define WLAN_EID_PWR_CONSTRAINT 32
|
||||||
|
#define WLAN_EID_PWR_CAPABILITY 33
|
||||||
|
#define WLAN_EID_TPC_REQ 34
|
||||||
|
#define WLAN_EID_TPC_REP 35
|
||||||
|
#define WLAN_EID_SUPP_CH 36
|
||||||
|
#define WLAN_EID_CH_SWITCH 37
|
||||||
|
#define WLAN_EID_MEASURE_REQ 38
|
||||||
|
#define WLAN_EID_MEASURE_REP 39
|
||||||
|
#define WLAN_EID_QUIET 40
|
||||||
|
#define WLAN_EID_IBSS_DFS 41
|
||||||
|
#define WLAN_EID_ERP 42
|
||||||
|
// reference 802.11i 7.3.2 table 20
|
||||||
|
#define WLAN_EID_RSN 48
|
||||||
|
#define WLAN_EID_EXTSUPP_RATES 50
|
||||||
|
// reference WiFi WPA spec.
|
||||||
|
#define WLAN_EID_RSN_WPA 221
|
||||||
|
|
||||||
|
#ifdef Cisco_ccx
|
||||||
|
#define WLAN_EID_CCX 133 //DavidWang
|
||||||
|
#define WLAN_EID_CCX_IP 149 //DavidWang
|
||||||
|
#define WLAN_EID_CCX_Ver 221 //DavidWang
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define WLAN_EID_ERP_NONERP_PRESENT 0x01
|
||||||
|
#define WLAN_EID_ERP_USE_PROTECTION 0x02
|
||||||
|
#define WLAN_EID_ERP_BARKER_MODE 0x04
|
||||||
|
|
||||||
|
// Reason Codes
|
||||||
|
#define WLAN_MGMT_REASON_RSVD 0
|
||||||
|
#define WLAN_MGMT_REASON_UNSPEC 1
|
||||||
|
#define WLAN_MGMT_REASON_PRIOR_AUTH_INVALID 2
|
||||||
|
#define WLAN_MGMT_REASON_DEAUTH_LEAVING 3
|
||||||
|
#define WLAN_MGMT_REASON_DISASSOC_INACTIVE 4
|
||||||
|
#define WLAN_MGMT_REASON_DISASSOC_AP_BUSY 5
|
||||||
|
#define WLAN_MGMT_REASON_CLASS2_NONAUTH 6
|
||||||
|
#define WLAN_MGMT_REASON_CLASS3_NONASSOC 7
|
||||||
|
#define WLAN_MGMT_REASON_DISASSOC_STA_HASLEFT 8
|
||||||
|
#define WLAN_MGMT_REASON_CANT_ASSOC_NONAUTH 9
|
||||||
|
#define WLAN_MGMT_REASON_DISASSOC_PWR_CAP_UNACCEPT 10
|
||||||
|
#define WLAN_MGMT_REASON_DISASSOC_SUPP_CH_UNACCEPT 11
|
||||||
|
#define WLAN_MGMT_REASON_INVALID_IE 13
|
||||||
|
#define WLAN_MGMT_REASON_MIC_FAILURE 14
|
||||||
|
#define WLAN_MGMT_REASON_4WAY_HANDSHAKE_TIMEOUT 15
|
||||||
|
#define WLAN_MGMT_REASON_GRPKEY_UPDATE_TIMEOUT 16
|
||||||
|
#define WLAN_MGMT_REASON_4WAY_INFO_DIFFERENT 17
|
||||||
|
#define WLAN_MGMT_REASON_MULTCAST_CIPHER_INVALID 18
|
||||||
|
#define WLAN_MGMT_REASON_UNCAST_CIPHER_INVALID 19
|
||||||
|
#define WLAN_MGMT_REASON_AKMP_INVALID 20
|
||||||
|
#define WLAN_MGMT_REASON_RSNE_UNSUPPORTED 21
|
||||||
|
#define WLAN_MGMT_REASON_RSNE_CAP_INVALID 22
|
||||||
|
#define WLAN_MGMT_REASON_80211X_AUTH_FAILED 23
|
||||||
|
|
||||||
|
// Status Codes
|
||||||
|
#define WLAN_MGMT_STATUS_SUCCESS 0
|
||||||
|
#define WLAN_MGMT_STATUS_UNSPEC_FAILURE 1
|
||||||
|
#define WLAN_MGMT_STATUS_CAPS_UNSUPPORTED 10
|
||||||
|
#define WLAN_MGMT_STATUS_REASSOC_NO_ASSOC 11
|
||||||
|
#define WLAN_MGMT_STATUS_ASSOC_DENIED_UNSPEC 12
|
||||||
|
#define WLAN_MGMT_STATUS_UNSUPPORTED_AUTHALG 13
|
||||||
|
#define WLAN_MGMT_STATUS_RX_AUTH_NOSEQ 14
|
||||||
|
#define WLAN_MGMT_STATUS_CHALLENGE_FAIL 15
|
||||||
|
#define WLAN_MGMT_STATUS_AUTH_TIMEOUT 16
|
||||||
|
#define WLAN_MGMT_STATUS_ASSOC_DENIED_BUSY 17
|
||||||
|
#define WLAN_MGMT_STATUS_ASSOC_DENIED_RATES 18
|
||||||
|
#define WLAN_MGMT_STATUS_ASSOC_DENIED_SHORTPREAMBLE 19
|
||||||
|
#define WLAN_MGMT_STATUS_ASSOC_DENIED_PBCC 20
|
||||||
|
#define WLAN_MGMT_STATUS_ASSOC_DENIED_AGILITY 21
|
||||||
|
|
||||||
|
// reference 802.11h 7.3.1.9
|
||||||
|
//
|
||||||
|
#define WLAN_MGMT_STATUS_ASSOC_REJECT_BCS_SPECTRUM_MNG 22
|
||||||
|
#define WLAN_MGMT_STATUS_ASSOC_REJECT_BCS_PWR_CAP 23
|
||||||
|
#define WLAN_MGMT_STATUS_ASSOC_REJECT_BCS_SUPP_CH 24
|
||||||
|
//
|
||||||
|
// reference 802.11g 7.3.1.9
|
||||||
|
//
|
||||||
|
#define WLAN_MGMT_STATUS_SHORTSLOTTIME_UNSUPPORTED 25
|
||||||
|
#define WLAN_MGMT_STATUS_DSSSOFDM_UNSUPPORTED 26
|
||||||
|
//
|
||||||
|
// reference 802.11i 7.3.1.9 table 19
|
||||||
|
//
|
||||||
|
#define WLAN_MGMT_STATUS_INVALID_IE 40
|
||||||
|
#define WLAN_MGMT_STATUS_GROUP_CIPHER_INVALID 41
|
||||||
|
#define WLAN_MGMT_STATUS_PAIRWISE_CIPHER_INVALID 42
|
||||||
|
#define WLAN_MGMT_STATUS_AKMP_INVALID 43
|
||||||
|
#define WLAN_MGMT_STATUS_UNSUPPORT_RSN_IE_VER 44
|
||||||
|
#define WLAN_MGMT_STATUS_INVALID_RSN_IE_CAP 45
|
||||||
|
#define WLAN_MGMT_STATUS_CIPHER_REJECT 46
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Auth Algorithm
|
||||||
|
#define WLAN_AUTH_ALG_OPENSYSTEM 0
|
||||||
|
#define WLAN_AUTH_ALG_SHAREDKEY 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Management Frame Field Offsets
|
||||||
|
// Note: Not all fields are listed because of variable lengths.
|
||||||
|
// Note: These offsets are from the start of the frame data
|
||||||
|
|
||||||
|
#define WLAN_BEACON_OFF_TS 0
|
||||||
|
#define WLAN_BEACON_OFF_BCN_INT 8
|
||||||
|
#define WLAN_BEACON_OFF_CAPINFO 10
|
||||||
|
#define WLAN_BEACON_OFF_SSID 12
|
||||||
|
|
||||||
|
#define WLAN_DISASSOC_OFF_REASON 0
|
||||||
|
|
||||||
|
#define WLAN_ASSOCREQ_OFF_CAP_INFO 0
|
||||||
|
#define WLAN_ASSOCREQ_OFF_LISTEN_INT 2
|
||||||
|
#define WLAN_ASSOCREQ_OFF_SSID 4
|
||||||
|
|
||||||
|
#define WLAN_ASSOCRESP_OFF_CAP_INFO 0
|
||||||
|
#define WLAN_ASSOCRESP_OFF_STATUS 2
|
||||||
|
#define WLAN_ASSOCRESP_OFF_AID 4
|
||||||
|
#define WLAN_ASSOCRESP_OFF_SUPP_RATES 6
|
||||||
|
|
||||||
|
#define WLAN_REASSOCREQ_OFF_CAP_INFO 0
|
||||||
|
#define WLAN_REASSOCREQ_OFF_LISTEN_INT 2
|
||||||
|
#define WLAN_REASSOCREQ_OFF_CURR_AP 4
|
||||||
|
#define WLAN_REASSOCREQ_OFF_SSID 10
|
||||||
|
|
||||||
|
#define WLAN_REASSOCRESP_OFF_CAP_INFO 0
|
||||||
|
#define WLAN_REASSOCRESP_OFF_STATUS 2
|
||||||
|
#define WLAN_REASSOCRESP_OFF_AID 4
|
||||||
|
#define WLAN_REASSOCRESP_OFF_SUPP_RATES 6
|
||||||
|
|
||||||
|
#define WLAN_PROBEREQ_OFF_SSID 0
|
||||||
|
|
||||||
|
#define WLAN_PROBERESP_OFF_TS 0
|
||||||
|
#define WLAN_PROBERESP_OFF_BCN_INT 8
|
||||||
|
#define WLAN_PROBERESP_OFF_CAP_INFO 10
|
||||||
|
#define WLAN_PROBERESP_OFF_SSID 12
|
||||||
|
|
||||||
|
#define WLAN_AUTHEN_OFF_AUTH_ALG 0
|
||||||
|
#define WLAN_AUTHEN_OFF_AUTH_SEQ 2
|
||||||
|
#define WLAN_AUTHEN_OFF_STATUS 4
|
||||||
|
#define WLAN_AUTHEN_OFF_CHALLENGE 6
|
||||||
|
|
||||||
|
#define WLAN_DEAUTHEN_OFF_REASON 0
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cipher Suite Selectors defiened in 802.11i
|
||||||
|
//
|
||||||
|
#define WLAN_11i_CSS_USE_GROUP 0
|
||||||
|
#define WLAN_11i_CSS_WEP40 1
|
||||||
|
#define WLAN_11i_CSS_TKIP 2
|
||||||
|
#define WLAN_11i_CSS_CCMP 4
|
||||||
|
#define WLAN_11i_CSS_WEP104 5
|
||||||
|
#define WLAN_11i_CSS_UNKNOWN 255
|
||||||
|
|
||||||
|
//
|
||||||
|
// Authentication and Key Management Suite Selectors defined in 802.11i
|
||||||
|
//
|
||||||
|
#define WLAN_11i_AKMSS_802_1X 1
|
||||||
|
#define WLAN_11i_AKMSS_PSK 2
|
||||||
|
#define WLAN_11i_AKMSS_UNKNOWN 255
|
||||||
|
|
||||||
|
// Measurement type definitions reference ieee 802.11h Table 20b
|
||||||
|
#define MEASURE_TYPE_BASIC 0
|
||||||
|
#define MEASURE_TYPE_CCA 1
|
||||||
|
#define MEASURE_TYPE_RPI 2
|
||||||
|
|
||||||
|
// Measurement request mode definitions reference ieee 802.11h Figure 46h
|
||||||
|
#define MEASURE_MODE_ENABLE 0x02
|
||||||
|
#define MEASURE_MODE_REQ 0x04
|
||||||
|
#define MEASURE_MODE_REP 0x08
|
||||||
|
|
||||||
|
// Measurement report mode definitions reference ieee 802.11h Figure 46m
|
||||||
|
#define MEASURE_MODE_LATE 0x01
|
||||||
|
#define MEASURE_MODE_INCAPABLE 0x02
|
||||||
|
#define MEASURE_MODE_REFUSED 0x04
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
// Information Element Types
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
WLAN_IE, *PWLAN_IE;
|
||||||
|
|
||||||
|
|
||||||
|
// Service Set Identity (SSID)
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_SSID {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE abySSID[1];
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
WLAN_IE_SSID, *PWLAN_IE_SSID;
|
||||||
|
|
||||||
|
|
||||||
|
// Supported Rates
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_SUPP_RATES {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE abyRates[1];
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
WLAN_IE_SUPP_RATES, *PWLAN_IE_SUPP_RATES;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// FH Parameter Set
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct _WLAN_IE_FH_PARMS {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
WORD wDwellTime;
|
||||||
|
BYTE byHopSet;
|
||||||
|
BYTE byHopPattern;
|
||||||
|
BYTE byHopIndex;
|
||||||
|
} WLAN_IE_FH_PARMS, *PWLAN_IE_FH_PARMS;
|
||||||
|
|
||||||
|
// DS Parameter Set
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_DS_PARMS {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE byCurrChannel;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
WLAN_IE_DS_PARMS, *PWLAN_IE_DS_PARMS;
|
||||||
|
|
||||||
|
|
||||||
|
// CF Parameter Set
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_CF_PARMS {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE byCFPCount;
|
||||||
|
BYTE byCFPPeriod;
|
||||||
|
WORD wCFPMaxDuration;
|
||||||
|
WORD wCFPDurRemaining;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
WLAN_IE_CF_PARMS, *PWLAN_IE_CF_PARMS;
|
||||||
|
|
||||||
|
|
||||||
|
// TIM
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_TIM {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE byDTIMCount;
|
||||||
|
BYTE byDTIMPeriod;
|
||||||
|
BYTE byBitMapCtl;
|
||||||
|
BYTE byVirtBitMap[1];
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
WLAN_IE_TIM, *PWLAN_IE_TIM;
|
||||||
|
|
||||||
|
|
||||||
|
// IBSS Parameter Set
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_IBSS_PARMS {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
WORD wATIMWindow;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
WLAN_IE_IBSS_PARMS, *PWLAN_IE_IBSS_PARMS;
|
||||||
|
|
||||||
|
|
||||||
|
// Challenge Text
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_CHALLENGE {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE abyChallenge[1];
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
WLAN_IE_CHALLENGE, *PWLAN_IE_CHALLENGE;
|
||||||
|
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_RSN_EXT {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE abyOUI[4];
|
||||||
|
WORD wVersion;
|
||||||
|
BYTE abyMulticast[4];
|
||||||
|
WORD wPKCount;
|
||||||
|
struct {
|
||||||
|
BYTE abyOUI[4];
|
||||||
|
} PKSList[1]; // the rest is variable so need to
|
||||||
|
// overlay ieauth structure
|
||||||
|
} WLAN_IE_RSN_EXT, *PWLAN_IE_RSN_EXT;
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_RSN_AUTH {
|
||||||
|
WORD wAuthCount;
|
||||||
|
struct {
|
||||||
|
BYTE abyOUI[4];
|
||||||
|
} AuthKSList[1];
|
||||||
|
} WLAN_IE_RSN_AUTH, *PWLAN_IE_RSN_AUTH;
|
||||||
|
|
||||||
|
// RSN Identity
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_RSN {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
WORD wVersion;
|
||||||
|
BYTE abyRSN[WLAN_MIN_ARRAY];
|
||||||
|
} WLAN_IE_RSN, *PWLAN_IE_RSN;
|
||||||
|
|
||||||
|
//DavidWang
|
||||||
|
// CCX Identity DavidWang
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_CCX {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE abyCCX[30];
|
||||||
|
} WLAN_IE_CCX, *PWLAN_IE_CCX;
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_CCX_IP {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE abyCCXOUI[4];
|
||||||
|
BYTE abyCCXIP[4];
|
||||||
|
BYTE abyCCXREV[2];
|
||||||
|
} WLAN_IE_CCX_IP, *PWLAN_IE_CCX_IP;
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_CCX_Ver {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE abyCCXVer[5];
|
||||||
|
} WLAN_IE_CCX_Ver, *PWLAN_IE_CCX_Ver;
|
||||||
|
|
||||||
|
//DavidWang
|
||||||
|
|
||||||
|
// ERP
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagWLAN_IE_ERP {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE byContext;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
WLAN_IE_ERP, *PWLAN_IE_ERP;
|
||||||
|
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct _MEASEURE_REQ {
|
||||||
|
BYTE byChannel;
|
||||||
|
BYTE abyStartTime[8];
|
||||||
|
BYTE abyDuration[2];
|
||||||
|
} MEASEURE_REQ, *PMEASEURE_REQ,
|
||||||
|
MEASEURE_REQ_BASIC, *PMEASEURE_REQ_BASIC,
|
||||||
|
MEASEURE_REQ_CCA, *PMEASEURE_REQ_CCA,
|
||||||
|
MEASEURE_REQ_RPI, *PMEASEURE_REQ_RPI;
|
||||||
|
|
||||||
|
typedef struct _MEASEURE_REP_BASIC {
|
||||||
|
BYTE byChannel;
|
||||||
|
BYTE abyStartTime[8];
|
||||||
|
BYTE abyDuration[2];
|
||||||
|
BYTE byMap;
|
||||||
|
} MEASEURE_REP_BASIC, *PMEASEURE_REP_BASIC;
|
||||||
|
|
||||||
|
typedef struct _MEASEURE_REP_CCA {
|
||||||
|
BYTE byChannel;
|
||||||
|
BYTE abyStartTime[8];
|
||||||
|
BYTE abyDuration[2];
|
||||||
|
BYTE byCCABusyFraction;
|
||||||
|
} MEASEURE_REP_CCA, *PMEASEURE_REP_CCA;
|
||||||
|
|
||||||
|
typedef struct _MEASEURE_REP_RPI {
|
||||||
|
BYTE byChannel;
|
||||||
|
BYTE abyStartTime[8];
|
||||||
|
BYTE abyDuration[2];
|
||||||
|
BYTE abyRPIdensity[8];
|
||||||
|
} MEASEURE_REP_RPI, *PMEASEURE_REP_RPI;
|
||||||
|
|
||||||
|
typedef union _MEASEURE_REP {
|
||||||
|
|
||||||
|
MEASEURE_REP_BASIC sBasic;
|
||||||
|
MEASEURE_REP_CCA sCCA;
|
||||||
|
MEASEURE_REP_RPI sRPI;
|
||||||
|
|
||||||
|
} MEASEURE_REP, *PMEASEURE_REP;
|
||||||
|
|
||||||
|
typedef struct _WLAN_IE_MEASURE_REQ {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE byToken;
|
||||||
|
BYTE byMode;
|
||||||
|
BYTE byType;
|
||||||
|
MEASEURE_REQ sReq;
|
||||||
|
} WLAN_IE_MEASURE_REQ, *PWLAN_IE_MEASURE_REQ;
|
||||||
|
|
||||||
|
typedef struct _WLAN_IE_MEASURE_REP {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE byToken;
|
||||||
|
BYTE byMode;
|
||||||
|
BYTE byType;
|
||||||
|
MEASEURE_REP sRep;
|
||||||
|
} WLAN_IE_MEASURE_REP, *PWLAN_IE_MEASURE_REP;
|
||||||
|
|
||||||
|
typedef struct _WLAN_IE_CH_SW {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE byMode;
|
||||||
|
BYTE byChannel;
|
||||||
|
BYTE byCount;
|
||||||
|
} WLAN_IE_CH_SW, *PWLAN_IE_CH_SW;
|
||||||
|
|
||||||
|
typedef struct _WLAN_IE_QUIET {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE byQuietCount;
|
||||||
|
BYTE byQuietPeriod;
|
||||||
|
BYTE abyQuietDuration[2];
|
||||||
|
BYTE abyQuietOffset[2];
|
||||||
|
} WLAN_IE_QUIET, *PWLAN_IE_QUIET;
|
||||||
|
|
||||||
|
typedef struct _WLAN_IE_COUNTRY {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE abyCountryString[3];
|
||||||
|
BYTE abyCountryInfo[3];
|
||||||
|
} WLAN_IE_COUNTRY, *PWLAN_IE_COUNTRY;
|
||||||
|
|
||||||
|
typedef struct _WLAN_IE_PW_CONST {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE byPower;
|
||||||
|
} WLAN_IE_PW_CONST, *PWLAN_IE_PW_CONST;
|
||||||
|
|
||||||
|
typedef struct _WLAN_IE_PW_CAP {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE byMinPower;
|
||||||
|
BYTE byMaxPower;
|
||||||
|
} WLAN_IE_PW_CAP, *PWLAN_IE_PW_CAP;
|
||||||
|
|
||||||
|
typedef struct _WLAN_IE_SUPP_CH {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE abyChannelTuple[2];
|
||||||
|
} WLAN_IE_SUPP_CH, *PWLAN_IE_SUPP_CH;
|
||||||
|
|
||||||
|
typedef struct _WLAN_IE_TPC_REQ {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
} WLAN_IE_TPC_REQ, *PWLAN_IE_TPC_REQ;
|
||||||
|
|
||||||
|
typedef struct _WLAN_IE_TPC_REP {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE byTxPower;
|
||||||
|
BYTE byLinkMargin;
|
||||||
|
} WLAN_IE_TPC_REP, *PWLAN_IE_TPC_REP;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _WLAN_IE_IBSS_DFS {
|
||||||
|
BYTE byElementID;
|
||||||
|
BYTE len;
|
||||||
|
BYTE abyDFSOwner[6];
|
||||||
|
BYTE byDFSRecovery;
|
||||||
|
BYTE abyChannelMap[2];
|
||||||
|
} WLAN_IE_IBSS_DFS, *PWLAN_IE_IBSS_DFS;
|
||||||
|
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Frame Types
|
||||||
|
// prototype structure, all mgmt frame types will start with these members
|
||||||
|
typedef struct tagWLAN_FR_MGMT {
|
||||||
|
|
||||||
|
UINT uType;
|
||||||
|
UINT len;
|
||||||
|
PBYTE pBuf;
|
||||||
|
PUWLAN_80211HDR pHdr;
|
||||||
|
|
||||||
|
} WLAN_FR_MGMT, *PWLAN_FR_MGMT;
|
||||||
|
|
||||||
|
// Beacon frame
|
||||||
|
typedef struct tagWLAN_FR_BEACON {
|
||||||
|
|
||||||
|
UINT uType;
|
||||||
|
UINT len;
|
||||||
|
PBYTE pBuf;
|
||||||
|
PUWLAN_80211HDR pHdr;
|
||||||
|
// fixed fields
|
||||||
|
PQWORD pqwTimestamp;
|
||||||
|
PWORD pwBeaconInterval;
|
||||||
|
PWORD pwCapInfo;
|
||||||
|
/*-- info elements ----------*/
|
||||||
|
PWLAN_IE_SSID pSSID;
|
||||||
|
PWLAN_IE_SUPP_RATES pSuppRates;
|
||||||
|
// PWLAN_IE_FH_PARMS pFHParms;
|
||||||
|
PWLAN_IE_DS_PARMS pDSParms;
|
||||||
|
PWLAN_IE_CF_PARMS pCFParms;
|
||||||
|
PWLAN_IE_TIM pTIM;
|
||||||
|
PWLAN_IE_IBSS_PARMS pIBSSParms;
|
||||||
|
PWLAN_IE_RSN pRSN;
|
||||||
|
PWLAN_IE_RSN_EXT pRSNWPA;
|
||||||
|
PWLAN_IE_ERP pERP;
|
||||||
|
PWLAN_IE_SUPP_RATES pExtSuppRates;
|
||||||
|
PWLAN_IE_COUNTRY pIE_Country;
|
||||||
|
PWLAN_IE_PW_CONST pIE_PowerConstraint;
|
||||||
|
PWLAN_IE_CH_SW pIE_CHSW;
|
||||||
|
PWLAN_IE_IBSS_DFS pIE_IBSSDFS;
|
||||||
|
PWLAN_IE_QUIET pIE_Quiet;
|
||||||
|
|
||||||
|
} WLAN_FR_BEACON, *PWLAN_FR_BEACON;
|
||||||
|
|
||||||
|
|
||||||
|
// IBSS ATIM frame
|
||||||
|
typedef struct tagWLAN_FR_IBSSATIM {
|
||||||
|
|
||||||
|
UINT uType;
|
||||||
|
UINT len;
|
||||||
|
PBYTE pBuf;
|
||||||
|
PUWLAN_80211HDR pHdr;
|
||||||
|
|
||||||
|
// fixed fields
|
||||||
|
// info elements
|
||||||
|
// this frame type has a null body
|
||||||
|
|
||||||
|
} WLAN_FR_IBSSATIM, *PWLAN_FR_IBSSATIM;
|
||||||
|
|
||||||
|
// Disassociation
|
||||||
|
typedef struct tagWLAN_FR_DISASSOC {
|
||||||
|
|
||||||
|
UINT uType;
|
||||||
|
UINT len;
|
||||||
|
PBYTE pBuf;
|
||||||
|
PUWLAN_80211HDR pHdr;
|
||||||
|
/*-- fixed fields -----------*/
|
||||||
|
PWORD pwReason;
|
||||||
|
/*-- info elements ----------*/
|
||||||
|
|
||||||
|
} WLAN_FR_DISASSOC, *PWLAN_FR_DISASSOC;
|
||||||
|
|
||||||
|
// Association Request
|
||||||
|
typedef struct tagWLAN_FR_ASSOCREQ {
|
||||||
|
|
||||||
|
UINT uType;
|
||||||
|
UINT len;
|
||||||
|
PBYTE pBuf;
|
||||||
|
PUWLAN_80211HDR pHdr;
|
||||||
|
/*-- fixed fields -----------*/
|
||||||
|
PWORD pwCapInfo;
|
||||||
|
PWORD pwListenInterval;
|
||||||
|
/*-- info elements ----------*/
|
||||||
|
PWLAN_IE_SSID pSSID;
|
||||||
|
PWLAN_IE_SUPP_RATES pSuppRates;
|
||||||
|
PWLAN_IE_RSN pRSN;
|
||||||
|
PWLAN_IE_CCX pCCX;
|
||||||
|
PWLAN_IE_CCX_IP pCCXIP;
|
||||||
|
PWLAN_IE_CCX_Ver pCCXVER;
|
||||||
|
PWLAN_IE_RSN_EXT pRSNWPA;
|
||||||
|
PWLAN_IE_SUPP_RATES pExtSuppRates;
|
||||||
|
PWLAN_IE_PW_CAP pCurrPowerCap;
|
||||||
|
PWLAN_IE_SUPP_CH pCurrSuppCh;
|
||||||
|
|
||||||
|
} WLAN_FR_ASSOCREQ, *PWLAN_FR_ASSOCREQ;
|
||||||
|
|
||||||
|
// Association Response
|
||||||
|
typedef struct tagWLAN_FR_ASSOCRESP {
|
||||||
|
|
||||||
|
UINT uType;
|
||||||
|
UINT len;
|
||||||
|
PBYTE pBuf;
|
||||||
|
PUWLAN_80211HDR pHdr;
|
||||||
|
/*-- fixed fields -----------*/
|
||||||
|
PWORD pwCapInfo;
|
||||||
|
PWORD pwStatus;
|
||||||
|
PWORD pwAid;
|
||||||
|
/*-- info elements ----------*/
|
||||||
|
PWLAN_IE_SUPP_RATES pSuppRates;
|
||||||
|
PWLAN_IE_SUPP_RATES pExtSuppRates;
|
||||||
|
|
||||||
|
} WLAN_FR_ASSOCRESP, *PWLAN_FR_ASSOCRESP;
|
||||||
|
|
||||||
|
// Reassociation Request
|
||||||
|
typedef struct tagWLAN_FR_REASSOCREQ {
|
||||||
|
|
||||||
|
UINT uType;
|
||||||
|
UINT len;
|
||||||
|
PBYTE pBuf;
|
||||||
|
PUWLAN_80211HDR pHdr;
|
||||||
|
|
||||||
|
/*-- fixed fields -----------*/
|
||||||
|
PWORD pwCapInfo;
|
||||||
|
PWORD pwListenInterval;
|
||||||
|
PIEEE_ADDR pAddrCurrAP;
|
||||||
|
|
||||||
|
/*-- info elements ----------*/
|
||||||
|
PWLAN_IE_SSID pSSID;
|
||||||
|
PWLAN_IE_SUPP_RATES pSuppRates;
|
||||||
|
PWLAN_IE_RSN pRSN;
|
||||||
|
PWLAN_IE_CCX pCCX;
|
||||||
|
PWLAN_IE_CCX_IP pCCXIP;
|
||||||
|
PWLAN_IE_CCX_Ver pCCXVER;
|
||||||
|
PWLAN_IE_RSN_EXT pRSNWPA;
|
||||||
|
PWLAN_IE_SUPP_RATES pExtSuppRates;
|
||||||
|
|
||||||
|
} WLAN_FR_REASSOCREQ, *PWLAN_FR_REASSOCREQ;
|
||||||
|
|
||||||
|
// Reassociation Response
|
||||||
|
typedef struct tagWLAN_FR_REASSOCRESP {
|
||||||
|
|
||||||
|
UINT uType;
|
||||||
|
UINT len;
|
||||||
|
PBYTE pBuf;
|
||||||
|
PUWLAN_80211HDR pHdr;
|
||||||
|
/*-- fixed fields -----------*/
|
||||||
|
PWORD pwCapInfo;
|
||||||
|
PWORD pwStatus;
|
||||||
|
PWORD pwAid;
|
||||||
|
/*-- info elements ----------*/
|
||||||
|
PWLAN_IE_SUPP_RATES pSuppRates;
|
||||||
|
PWLAN_IE_SUPP_RATES pExtSuppRates;
|
||||||
|
|
||||||
|
} WLAN_FR_REASSOCRESP, *PWLAN_FR_REASSOCRESP;
|
||||||
|
|
||||||
|
// Probe Request
|
||||||
|
typedef struct tagWLAN_FR_PROBEREQ {
|
||||||
|
|
||||||
|
UINT uType;
|
||||||
|
UINT len;
|
||||||
|
PBYTE pBuf;
|
||||||
|
PUWLAN_80211HDR pHdr;
|
||||||
|
/*-- fixed fields -----------*/
|
||||||
|
/*-- info elements ----------*/
|
||||||
|
PWLAN_IE_SSID pSSID;
|
||||||
|
PWLAN_IE_SUPP_RATES pSuppRates;
|
||||||
|
PWLAN_IE_SUPP_RATES pExtSuppRates;
|
||||||
|
|
||||||
|
} WLAN_FR_PROBEREQ, *PWLAN_FR_PROBEREQ;
|
||||||
|
|
||||||
|
// Probe Response
|
||||||
|
typedef struct tagWLAN_FR_PROBERESP {
|
||||||
|
|
||||||
|
UINT uType;
|
||||||
|
UINT len;
|
||||||
|
PBYTE pBuf;
|
||||||
|
PUWLAN_80211HDR pHdr;
|
||||||
|
/*-- fixed fields -----------*/
|
||||||
|
PQWORD pqwTimestamp;
|
||||||
|
PWORD pwBeaconInterval;
|
||||||
|
PWORD pwCapInfo;
|
||||||
|
/*-- info elements ----------*/
|
||||||
|
PWLAN_IE_SSID pSSID;
|
||||||
|
PWLAN_IE_SUPP_RATES pSuppRates;
|
||||||
|
PWLAN_IE_DS_PARMS pDSParms;
|
||||||
|
PWLAN_IE_CF_PARMS pCFParms;
|
||||||
|
PWLAN_IE_IBSS_PARMS pIBSSParms;
|
||||||
|
PWLAN_IE_RSN pRSN;
|
||||||
|
PWLAN_IE_RSN_EXT pRSNWPA;
|
||||||
|
PWLAN_IE_ERP pERP;
|
||||||
|
PWLAN_IE_SUPP_RATES pExtSuppRates;
|
||||||
|
PWLAN_IE_COUNTRY pIE_Country;
|
||||||
|
PWLAN_IE_PW_CONST pIE_PowerConstraint;
|
||||||
|
PWLAN_IE_CH_SW pIE_CHSW;
|
||||||
|
PWLAN_IE_IBSS_DFS pIE_IBSSDFS;
|
||||||
|
PWLAN_IE_QUIET pIE_Quiet;
|
||||||
|
|
||||||
|
} WLAN_FR_PROBERESP, *PWLAN_FR_PROBERESP;
|
||||||
|
|
||||||
|
// Authentication
|
||||||
|
typedef struct tagWLAN_FR_AUTHEN {
|
||||||
|
|
||||||
|
UINT uType;
|
||||||
|
UINT len;
|
||||||
|
PBYTE pBuf;
|
||||||
|
PUWLAN_80211HDR pHdr;
|
||||||
|
/*-- fixed fields -----------*/
|
||||||
|
PWORD pwAuthAlgorithm;
|
||||||
|
PWORD pwAuthSequence;
|
||||||
|
PWORD pwStatus;
|
||||||
|
/*-- info elements ----------*/
|
||||||
|
PWLAN_IE_CHALLENGE pChallenge;
|
||||||
|
|
||||||
|
} WLAN_FR_AUTHEN, *PWLAN_FR_AUTHEN;
|
||||||
|
|
||||||
|
// Deauthenication
|
||||||
|
typedef struct tagWLAN_FR_DEAUTHEN {
|
||||||
|
|
||||||
|
UINT uType;
|
||||||
|
UINT len;
|
||||||
|
PBYTE pBuf;
|
||||||
|
PUWLAN_80211HDR pHdr;
|
||||||
|
/*-- fixed fields -----------*/
|
||||||
|
PWORD pwReason;
|
||||||
|
|
||||||
|
/*-- info elements ----------*/
|
||||||
|
|
||||||
|
} WLAN_FR_DEAUTHEN, *PWLAN_FR_DEAUTHEN;
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
VOID
|
||||||
|
vMgrEncodeBeacon(
|
||||||
|
IN PWLAN_FR_BEACON pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDecodeBeacon(
|
||||||
|
IN PWLAN_FR_BEACON pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrEncodeIBSSATIM(
|
||||||
|
IN PWLAN_FR_IBSSATIM pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDecodeIBSSATIM(
|
||||||
|
IN PWLAN_FR_IBSSATIM pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrEncodeDisassociation(
|
||||||
|
IN PWLAN_FR_DISASSOC pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDecodeDisassociation(
|
||||||
|
IN PWLAN_FR_DISASSOC pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrEncodeAssocRequest(
|
||||||
|
IN PWLAN_FR_ASSOCREQ pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDecodeAssocRequest(
|
||||||
|
IN PWLAN_FR_ASSOCREQ pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrEncodeAssocResponse(
|
||||||
|
IN PWLAN_FR_ASSOCRESP pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDecodeAssocResponse(
|
||||||
|
IN PWLAN_FR_ASSOCRESP pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrEncodeReassocRequest(
|
||||||
|
IN PWLAN_FR_REASSOCREQ pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDecodeReassocRequest(
|
||||||
|
IN PWLAN_FR_REASSOCREQ pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrEncodeProbeRequest(
|
||||||
|
IN PWLAN_FR_PROBEREQ pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDecodeProbeRequest(
|
||||||
|
IN PWLAN_FR_PROBEREQ pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrEncodeProbeResponse(
|
||||||
|
IN PWLAN_FR_PROBERESP pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDecodeProbeResponse(
|
||||||
|
IN PWLAN_FR_PROBERESP pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrEncodeAuthen(
|
||||||
|
IN PWLAN_FR_AUTHEN pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDecodeAuthen(
|
||||||
|
IN PWLAN_FR_AUTHEN pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrEncodeDeauthen(
|
||||||
|
IN PWLAN_FR_DEAUTHEN pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDecodeDeauthen(
|
||||||
|
IN PWLAN_FR_DEAUTHEN pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrEncodeReassocResponse(
|
||||||
|
IN PWLAN_FR_REASSOCRESP pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDecodeReassocResponse(
|
||||||
|
IN PWLAN_FR_REASSOCRESP pFrame
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif// __80211MGR_H__
|
204
drivers/staging/vt6656/Makefile
Normal file
204
drivers/staging/vt6656/Makefile
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
#
|
||||||
|
# Build options:
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
HOSTAP := 1
|
||||||
|
|
||||||
|
|
||||||
|
KSP := /lib/modules/$(shell uname -r)/build \
|
||||||
|
/usr/src/linux-$(shell uname -r) \
|
||||||
|
/usr/src/linux-$(shell uname -r | sed 's/-.*//') \
|
||||||
|
/usr/src/kernel-headers-$(shell uname -r) \
|
||||||
|
/usr/src/kernel-source-$(shell uname -r) \
|
||||||
|
/usr/src/linux-$(shell uname -r | sed 's/\([0-9]*\.[0-9]*\)\..*/\1/') \
|
||||||
|
/usr/src/linux
|
||||||
|
|
||||||
|
test_dir = $(shell [ -e $(dir)/include/linux ] && echo $(dir))
|
||||||
|
KSP := $(foreach dir, $(KSP), $(test_dir))
|
||||||
|
|
||||||
|
KSRC := $(firstword $(KSP))
|
||||||
|
|
||||||
|
ifeq (,$(KSRC))
|
||||||
|
$(error Linux kernel source not found)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# check kernel version
|
||||||
|
KVER := $(shell uname -r | cut -c1-3 | sed 's/2\.[56]/2\.6/')
|
||||||
|
KERVER2=$(shell uname -r | cut -d. -f2)
|
||||||
|
|
||||||
|
ifeq ($(KVER), 2.6)
|
||||||
|
# 2.6 kernel
|
||||||
|
TARGET = vntwusb.ko
|
||||||
|
|
||||||
|
else
|
||||||
|
TARGET = vntwusb.o
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
INSTDIR := $(shell find /lib/modules/$(shell uname -r) -name $(TARGET) -printf "%h\n" | sort | head -1)
|
||||||
|
ifeq (,$(INSTDIR))
|
||||||
|
ifeq (,$(KERVER2))
|
||||||
|
ifneq (,$(wildcard /lib/modules/$(shell uname -r)/kernel))
|
||||||
|
INSTDIR := /lib/modules/$(shell uname -r)/kernel/drivers/net
|
||||||
|
else
|
||||||
|
INSTDIR := /lib/modules/$(shell uname -r)/net
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
ifneq ($(KERVER2),2)
|
||||||
|
INSTDIR := /lib/modules/$(shell uname -r)/kernel/drivers/net
|
||||||
|
else
|
||||||
|
INSTDIR := /lib/modules/$(shell uname -r)/net
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
SRC = main_usb.c card.c mac.c baseband.c wctl.c 80211mgr.c \
|
||||||
|
wcmd.c wmgr.c bssdb.c wpa2.c rxtx.c dpc.c power.c datarate.c \
|
||||||
|
mib.c rc4.c tether.c tcrc.c ioctl.c hostap.c wpa.c key.c \
|
||||||
|
tkip.c michael.c rf.c iwctl.c wpactl.c aes_ccmp.c \
|
||||||
|
usbpipe.c channel.c control.c firmware.c int.c
|
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(HOSTAP), 1)
|
||||||
|
# CFLAGS += -DHOSTAP
|
||||||
|
EXTRA_CFLAGS += -DHOSTAP
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
#CFLAGS += -I$(PWD) -I$(PWD)/../include -I$(PWD)/include
|
||||||
|
EXTRA_CFLAGS += -I$(PWD) -I$(PWD)/../include -I$(PWD)/include
|
||||||
|
|
||||||
|
# build rule
|
||||||
|
ifeq ($(KVER), 2.6)
|
||||||
|
# 2.6 kernel
|
||||||
|
|
||||||
|
ifndef KERNEL_CONF
|
||||||
|
KERNEL_CONF= $(KSRC)/.config
|
||||||
|
endif
|
||||||
|
|
||||||
|
include ${KERNEL_CONF}
|
||||||
|
|
||||||
|
obj-m += vntwusb.o
|
||||||
|
|
||||||
|
vntwusb-objs := main_usb.o card.o mac.o baseband.o wctl.o 80211mgr.o \
|
||||||
|
wcmd.o wmgr.o bssdb.o rxtx.o dpc.o power.o datarate.o \
|
||||||
|
mib.o rc4.o tether.o tcrc.o ioctl.o hostap.o wpa.o key.o tkip.o \
|
||||||
|
michael.o rf.o iwctl.o wpactl.o wpa2.o aes_ccmp.o \
|
||||||
|
usbpipe.o channel.o control.o firmware.o int.o
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
# $(CC) $(CFLAGS) -o $@ $<
|
||||||
|
$(CC) $(EXTRA_CFLAGS) -o $@ $<
|
||||||
|
|
||||||
|
default:
|
||||||
|
make -C $(KSRC) SUBDIRS=$(shell pwd) modules
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
# 2.2/2.4 kernel
|
||||||
|
OBJS := main_usb.o card.o mac.o baseband.o wctl.o 80211mgr.o \
|
||||||
|
wcmd.o wmgr.o bssdb.o rxtx.o dpc.o power.o datarate.o \
|
||||||
|
mib.o rc4.o tether.o tcrc.o ioctl.o hostap.o wpa.o key.o tkip.o \
|
||||||
|
michael.o rf.o iwctl.o wpactl.o wpa2.o aes_ccmp.o \
|
||||||
|
usbpipe.o channel.o control.o
|
||||||
|
|
||||||
|
VERSION_FILE := $(KSRC)/include/linux/version.h
|
||||||
|
CONFIG_FILE := $(KSRC)/include/linux/config.h
|
||||||
|
|
||||||
|
|
||||||
|
ifeq (,$(wildcard $(VERSION_FILE)))
|
||||||
|
$(error Linux kernel source not configured - missing version.h)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (,$(wildcard $(CONFIG_FILE)))
|
||||||
|
$(error Linux kernel source not configured - missing config.h)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq (,$(findstring egcs-2.91.66, $(shell cat /proc/version)))
|
||||||
|
CC := kgcc gcc cc
|
||||||
|
else
|
||||||
|
CC := gcc cc
|
||||||
|
endif
|
||||||
|
|
||||||
|
test_cc = $(shell which $(cc) > /dev/null 2>&1 && echo $(cc))
|
||||||
|
CC := $(foreach cc, $(CC), $(test_cc))
|
||||||
|
CC := $(firstword $(CC))
|
||||||
|
|
||||||
|
#CFLAGS += -Wall -DLINUX -D__KERNEL__ -DMODULE -DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe
|
||||||
|
#CFLAGS += -I$(KSRC)/include -Wstrict-prototypes -fomit-frame-pointer -fno-strict-aliasing
|
||||||
|
#CFLAGS += $(shell [ -f $(KSRC)/include/linux/modversions.h ] && \
|
||||||
|
# echo "-DMODVERSIONS -include $(KSRC)/include/linux/modversions.h")
|
||||||
|
EXTRA_CFLAGS += -Wall -DLINUX -D__KERNEL__ -DMODULE -DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe
|
||||||
|
EXTRA_CFLAGS += -I$(KSRC)/include -Wstrict-prototypes -fomit-frame-pointer -fno-strict-aliasing
|
||||||
|
EXTRA_CFLAGS += $(shell [ -f $(KSRC)/include/linux/modversions.h ] && \
|
||||||
|
echo "-DMODVERSIONS -include $(KSRC)/include/linux/modversions.h")
|
||||||
|
|
||||||
|
.SILENT: $(TARGET) clean
|
||||||
|
|
||||||
|
|
||||||
|
# look for SMP in config.h
|
||||||
|
#SMP := $(shell $(CC) $(CFLAGS) -E -dM $(CONFIG_FILE) | \
|
||||||
|
# grep CONFIG_SMP | awk '{ print $$3 }')
|
||||||
|
SMP := $(shell $(CC) $(EXTRA_CFLAGS) -E -dM $(CONFIG_FILE) | \
|
||||||
|
grep CONFIG_SMP | awk '{ print $$3 }')
|
||||||
|
ifneq ($(SMP),1)
|
||||||
|
SMP := 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(SMP), 1)
|
||||||
|
# CFLAGS += -D__SMP__
|
||||||
|
EXTRA_CFLAGS += -D__SMP__
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# check x86_64
|
||||||
|
SUBARCH := $(shell uname -m)
|
||||||
|
ifeq ($(SUBARCH),x86_64)
|
||||||
|
# CFLAGS += -mcmodel=kernel -mno-red-zone
|
||||||
|
EXTRA_CFLAGS += -mcmodel=kernel -mno-red-zone
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
$(TARGET): $(filter-out $(TARGET), $(SRC:.c=.o))
|
||||||
|
$(LD) -r $^ -o $@
|
||||||
|
echo; echo
|
||||||
|
echo "**************************************************"
|
||||||
|
echo "Build options:"
|
||||||
|
echo " VERSION $(KVER)"
|
||||||
|
echo -n " SMP "
|
||||||
|
if [ "$(SMP)" = "1" ]; \
|
||||||
|
then echo "Enabled"; else echo "Disabled"; fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
endif # ifeq ($(KVER),2.6)
|
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(KVER), 2.6)
|
||||||
|
install: default
|
||||||
|
else
|
||||||
|
install: clean $(TARGET)
|
||||||
|
endif
|
||||||
|
mkdir -p $(MOD_ROOT)$(INSTDIR)
|
||||||
|
install -m 644 -o root $(TARGET) $(MOD_ROOT)$(INSTDIR)
|
||||||
|
|
||||||
|
ifeq (,$(MOD_ROOT))
|
||||||
|
/sbin/depmod -a || true
|
||||||
|
else
|
||||||
|
/sbin/depmod -b $(MOD_ROOT) -a || true
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
rm -f $(INSTDIR)/$(TARGET)
|
||||||
|
/sbin/depmod -a
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(TARGET) $(SRC:.c=.o) *~ *.o
|
||||||
|
rm -f .*.o.d .*.o.cmd .*.ko.cmd *.mod.c *.mod.o
|
||||||
|
|
||||||
|
-include .depend.mak
|
410
drivers/staging/vt6656/aes_ccmp.c
Normal file
410
drivers/staging/vt6656/aes_ccmp.c
Normal file
@ -0,0 +1,410 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: aes_ccmp.c
|
||||||
|
*
|
||||||
|
* Purpose: AES_CCMP decryption
|
||||||
|
*
|
||||||
|
* Author: Warren Hsu
|
||||||
|
*
|
||||||
|
* Date: Feb 15, 2005
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* AESbGenCCMP - Parsing RX-packet
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211HDR_H__)
|
||||||
|
#include "80211hdr.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SBOX Table
|
||||||
|
*/
|
||||||
|
|
||||||
|
BYTE sbox_table[256] =
|
||||||
|
{
|
||||||
|
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
|
||||||
|
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
|
||||||
|
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
|
||||||
|
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
|
||||||
|
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
|
||||||
|
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
|
||||||
|
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
|
||||||
|
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
|
||||||
|
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
|
||||||
|
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
|
||||||
|
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
|
||||||
|
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
|
||||||
|
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
|
||||||
|
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
|
||||||
|
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
|
||||||
|
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
|
||||||
|
};
|
||||||
|
|
||||||
|
BYTE dot2_table[256] = {
|
||||||
|
0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e,
|
||||||
|
0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e,
|
||||||
|
0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e,
|
||||||
|
0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e,
|
||||||
|
0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e,
|
||||||
|
0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe,
|
||||||
|
0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde,
|
||||||
|
0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe,
|
||||||
|
0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05,
|
||||||
|
0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25,
|
||||||
|
0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45,
|
||||||
|
0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65,
|
||||||
|
0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85,
|
||||||
|
0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5,
|
||||||
|
0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5,
|
||||||
|
0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5
|
||||||
|
};
|
||||||
|
|
||||||
|
BYTE dot3_table[256] = {
|
||||||
|
0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11,
|
||||||
|
0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21,
|
||||||
|
0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71,
|
||||||
|
0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d, 0x44, 0x47, 0x42, 0x41,
|
||||||
|
0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9, 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1,
|
||||||
|
0xf0, 0xf3, 0xf6, 0xf5, 0xfc, 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1,
|
||||||
|
0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1,
|
||||||
|
0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99, 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81,
|
||||||
|
0x9b, 0x98, 0x9d, 0x9e, 0x97, 0x94, 0x91, 0x92, 0x83, 0x80, 0x85, 0x86, 0x8f, 0x8c, 0x89, 0x8a,
|
||||||
|
0xab, 0xa8, 0xad, 0xae, 0xa7, 0xa4, 0xa1, 0xa2, 0xb3, 0xb0, 0xb5, 0xb6, 0xbf, 0xbc, 0xb9, 0xba,
|
||||||
|
0xfb, 0xf8, 0xfd, 0xfe, 0xf7, 0xf4, 0xf1, 0xf2, 0xe3, 0xe0, 0xe5, 0xe6, 0xef, 0xec, 0xe9, 0xea,
|
||||||
|
0xcb, 0xc8, 0xcd, 0xce, 0xc7, 0xc4, 0xc1, 0xc2, 0xd3, 0xd0, 0xd5, 0xd6, 0xdf, 0xdc, 0xd9, 0xda,
|
||||||
|
0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46, 0x4f, 0x4c, 0x49, 0x4a,
|
||||||
|
0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62, 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a,
|
||||||
|
0x3b, 0x38, 0x3d, 0x3e, 0x37, 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a,
|
||||||
|
0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a
|
||||||
|
};
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
void xor_128(BYTE *a, BYTE *b, BYTE *out)
|
||||||
|
{
|
||||||
|
PDWORD dwPtrA = (PDWORD) a;
|
||||||
|
PDWORD dwPtrB = (PDWORD) b;
|
||||||
|
PDWORD dwPtrOut =(PDWORD) out;
|
||||||
|
|
||||||
|
(*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++);
|
||||||
|
(*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++);
|
||||||
|
(*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++);
|
||||||
|
(*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void xor_32(BYTE *a, BYTE *b, BYTE *out)
|
||||||
|
{
|
||||||
|
PDWORD dwPtrA = (PDWORD) a;
|
||||||
|
PDWORD dwPtrB = (PDWORD) b;
|
||||||
|
PDWORD dwPtrOut =(PDWORD) out;
|
||||||
|
|
||||||
|
(*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddRoundKey(BYTE *key, int round)
|
||||||
|
{
|
||||||
|
BYTE sbox_key[4];
|
||||||
|
BYTE rcon_table[10] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36};
|
||||||
|
|
||||||
|
sbox_key[0] = sbox_table[key[13]];
|
||||||
|
sbox_key[1] = sbox_table[key[14]];
|
||||||
|
sbox_key[2] = sbox_table[key[15]];
|
||||||
|
sbox_key[3] = sbox_table[key[12]];
|
||||||
|
|
||||||
|
key[0] = key[0] ^ rcon_table[round];
|
||||||
|
xor_32(&key[0], sbox_key, &key[0]);
|
||||||
|
|
||||||
|
xor_32(&key[4], &key[0], &key[4]);
|
||||||
|
xor_32(&key[8], &key[4], &key[8]);
|
||||||
|
xor_32(&key[12], &key[8], &key[12]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SubBytes(BYTE *in, BYTE *out)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i=0; i< 16; i++)
|
||||||
|
{
|
||||||
|
out[i] = sbox_table[in[i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ShiftRows(BYTE *in, BYTE *out)
|
||||||
|
{
|
||||||
|
out[0] = in[0];
|
||||||
|
out[1] = in[5];
|
||||||
|
out[2] = in[10];
|
||||||
|
out[3] = in[15];
|
||||||
|
out[4] = in[4];
|
||||||
|
out[5] = in[9];
|
||||||
|
out[6] = in[14];
|
||||||
|
out[7] = in[3];
|
||||||
|
out[8] = in[8];
|
||||||
|
out[9] = in[13];
|
||||||
|
out[10] = in[2];
|
||||||
|
out[11] = in[7];
|
||||||
|
out[12] = in[12];
|
||||||
|
out[13] = in[1];
|
||||||
|
out[14] = in[6];
|
||||||
|
out[15] = in[11];
|
||||||
|
}
|
||||||
|
|
||||||
|
void MixColumns(BYTE *in, BYTE *out)
|
||||||
|
{
|
||||||
|
|
||||||
|
out[0] = dot2_table[in[0]] ^ dot3_table[in[1]] ^ in[2] ^ in[3];
|
||||||
|
out[1] = in[0] ^ dot2_table[in[1]] ^ dot3_table[in[2]] ^ in[3];
|
||||||
|
out[2] = in[0] ^ in[1] ^ dot2_table[in[2]] ^ dot3_table[in[3]];
|
||||||
|
out[3] = dot3_table[in[0]] ^ in[1] ^ in[2] ^ dot2_table[in[3]];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void AESv128(BYTE *key, BYTE *data, BYTE *ciphertext)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int round;
|
||||||
|
BYTE TmpdataA[16];
|
||||||
|
BYTE TmpdataB[16];
|
||||||
|
BYTE abyRoundKey[16];
|
||||||
|
|
||||||
|
for(i=0; i<16; i++)
|
||||||
|
abyRoundKey[i] = key[i];
|
||||||
|
|
||||||
|
for (round = 0; round < 11; round++)
|
||||||
|
{
|
||||||
|
if (round == 0)
|
||||||
|
{
|
||||||
|
xor_128(abyRoundKey, data, ciphertext);
|
||||||
|
AddRoundKey(abyRoundKey, round);
|
||||||
|
}
|
||||||
|
else if (round == 10)
|
||||||
|
{
|
||||||
|
SubBytes(ciphertext, TmpdataA);
|
||||||
|
ShiftRows(TmpdataA, TmpdataB);
|
||||||
|
xor_128(TmpdataB, abyRoundKey, ciphertext);
|
||||||
|
}
|
||||||
|
else // round 1 ~ 9
|
||||||
|
{
|
||||||
|
SubBytes(ciphertext, TmpdataA);
|
||||||
|
ShiftRows(TmpdataA, TmpdataB);
|
||||||
|
MixColumns(&TmpdataB[0], &TmpdataA[0]);
|
||||||
|
MixColumns(&TmpdataB[4], &TmpdataA[4]);
|
||||||
|
MixColumns(&TmpdataB[8], &TmpdataA[8]);
|
||||||
|
MixColumns(&TmpdataB[12], &TmpdataA[12]);
|
||||||
|
xor_128(TmpdataA, abyRoundKey, ciphertext);
|
||||||
|
AddRoundKey(abyRoundKey, round);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: AES decryption
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pbyRxKey - The key used to decrypt
|
||||||
|
* pbyFrame - Starting address of packet header
|
||||||
|
* wFrameSize - Total packet size including CRC
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: MIC compare result
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL AESbGenCCMP(PBYTE pbyRxKey, PBYTE pbyFrame, WORD wFrameSize)
|
||||||
|
{
|
||||||
|
BYTE abyNonce[13];
|
||||||
|
BYTE MIC_IV[16];
|
||||||
|
BYTE MIC_HDR1[16];
|
||||||
|
BYTE MIC_HDR2[16];
|
||||||
|
BYTE abyMIC[16];
|
||||||
|
BYTE abyCTRPLD[16];
|
||||||
|
BYTE abyTmp[16];
|
||||||
|
BYTE abyPlainText[16];
|
||||||
|
BYTE abyLastCipher[16];
|
||||||
|
|
||||||
|
PS802_11Header pMACHeader = (PS802_11Header) pbyFrame;
|
||||||
|
PBYTE pbyIV;
|
||||||
|
PBYTE pbyPayload;
|
||||||
|
WORD wHLen = 22;
|
||||||
|
WORD wPayloadSize = wFrameSize - 8 - 8 - 4 - WLAN_HDR_ADDR3_LEN;//8 is IV, 8 is MIC, 4 is CRC
|
||||||
|
BOOL bA4 = FALSE;
|
||||||
|
BYTE byTmp;
|
||||||
|
WORD wCnt;
|
||||||
|
int ii,jj,kk;
|
||||||
|
|
||||||
|
|
||||||
|
pbyIV = pbyFrame + WLAN_HDR_ADDR3_LEN;
|
||||||
|
if ( WLAN_GET_FC_TODS(*(PWORD)pbyFrame) &&
|
||||||
|
WLAN_GET_FC_FROMDS(*(PWORD)pbyFrame) ) {
|
||||||
|
bA4 = TRUE;
|
||||||
|
pbyIV += 6; // 6 is 802.11 address4
|
||||||
|
wHLen += 6;
|
||||||
|
wPayloadSize -= 6;
|
||||||
|
}
|
||||||
|
pbyPayload = pbyIV + 8; //IV-length
|
||||||
|
|
||||||
|
abyNonce[0] = 0x00; //now is 0, if Qos here will be priority
|
||||||
|
MEMvCopy(&(abyNonce[1]), pMACHeader->abyAddr2, U_ETHER_ADDR_LEN);
|
||||||
|
abyNonce[7] = pbyIV[7];
|
||||||
|
abyNonce[8] = pbyIV[6];
|
||||||
|
abyNonce[9] = pbyIV[5];
|
||||||
|
abyNonce[10] = pbyIV[4];
|
||||||
|
abyNonce[11] = pbyIV[1];
|
||||||
|
abyNonce[12] = pbyIV[0];
|
||||||
|
|
||||||
|
//MIC_IV
|
||||||
|
MIC_IV[0] = 0x59;
|
||||||
|
MEMvCopy(&(MIC_IV[1]), &(abyNonce[0]), 13);
|
||||||
|
MIC_IV[14] = (BYTE)(wPayloadSize >> 8);
|
||||||
|
MIC_IV[15] = (BYTE)(wPayloadSize & 0xff);
|
||||||
|
|
||||||
|
//MIC_HDR1
|
||||||
|
MIC_HDR1[0] = (BYTE)(wHLen >> 8);
|
||||||
|
MIC_HDR1[1] = (BYTE)(wHLen & 0xff);
|
||||||
|
byTmp = (BYTE)(pMACHeader->wFrameCtl & 0xff);
|
||||||
|
MIC_HDR1[2] = byTmp & 0x8f;
|
||||||
|
byTmp = (BYTE)(pMACHeader->wFrameCtl >> 8);
|
||||||
|
byTmp &= 0x87;
|
||||||
|
MIC_HDR1[3] = byTmp | 0x40;
|
||||||
|
MEMvCopy(&(MIC_HDR1[4]), pMACHeader->abyAddr1, U_ETHER_ADDR_LEN);
|
||||||
|
MEMvCopy(&(MIC_HDR1[10]), pMACHeader->abyAddr2, U_ETHER_ADDR_LEN);
|
||||||
|
|
||||||
|
//MIC_HDR2
|
||||||
|
MEMvCopy(&(MIC_HDR2[0]), pMACHeader->abyAddr3, U_ETHER_ADDR_LEN);
|
||||||
|
byTmp = (BYTE)(pMACHeader->wSeqCtl & 0xff);
|
||||||
|
MIC_HDR2[6] = byTmp & 0x0f;
|
||||||
|
MIC_HDR2[7] = 0;
|
||||||
|
if ( bA4 ) {
|
||||||
|
MEMvCopy(&(MIC_HDR2[8]), pMACHeader->abyAddr4, U_ETHER_ADDR_LEN);
|
||||||
|
} else {
|
||||||
|
MIC_HDR2[8] = 0x00;
|
||||||
|
MIC_HDR2[9] = 0x00;
|
||||||
|
MIC_HDR2[10] = 0x00;
|
||||||
|
MIC_HDR2[11] = 0x00;
|
||||||
|
MIC_HDR2[12] = 0x00;
|
||||||
|
MIC_HDR2[13] = 0x00;
|
||||||
|
}
|
||||||
|
MIC_HDR2[14] = 0x00;
|
||||||
|
MIC_HDR2[15] = 0x00;
|
||||||
|
|
||||||
|
//CCMP
|
||||||
|
AESv128(pbyRxKey,MIC_IV,abyMIC);
|
||||||
|
for ( kk=0; kk<16; kk++ ) {
|
||||||
|
abyTmp[kk] = MIC_HDR1[kk] ^ abyMIC[kk];
|
||||||
|
}
|
||||||
|
AESv128(pbyRxKey,abyTmp,abyMIC);
|
||||||
|
for ( kk=0; kk<16; kk++ ) {
|
||||||
|
abyTmp[kk] = MIC_HDR2[kk] ^ abyMIC[kk];
|
||||||
|
}
|
||||||
|
AESv128(pbyRxKey,abyTmp,abyMIC);
|
||||||
|
|
||||||
|
wCnt = 1;
|
||||||
|
abyCTRPLD[0] = 0x01;
|
||||||
|
MEMvCopy(&(abyCTRPLD[1]), &(abyNonce[0]), 13);
|
||||||
|
|
||||||
|
for(jj=wPayloadSize; jj>16; jj=jj-16) {
|
||||||
|
|
||||||
|
abyCTRPLD[14] = (BYTE) (wCnt >> 8);
|
||||||
|
abyCTRPLD[15] = (BYTE) (wCnt & 0xff);
|
||||||
|
|
||||||
|
AESv128(pbyRxKey,abyCTRPLD,abyTmp);
|
||||||
|
|
||||||
|
for ( kk=0; kk<16; kk++ ) {
|
||||||
|
abyPlainText[kk] = abyTmp[kk] ^ pbyPayload[kk];
|
||||||
|
}
|
||||||
|
for ( kk=0; kk<16; kk++ ) {
|
||||||
|
abyTmp[kk] = abyMIC[kk] ^ abyPlainText[kk];
|
||||||
|
}
|
||||||
|
AESv128(pbyRxKey,abyTmp,abyMIC);
|
||||||
|
|
||||||
|
MEMvCopy(pbyPayload, abyPlainText, 16);
|
||||||
|
wCnt++;
|
||||||
|
pbyPayload += 16;
|
||||||
|
} //for wPayloadSize
|
||||||
|
|
||||||
|
//last payload
|
||||||
|
MEMvCopy(&(abyLastCipher[0]), pbyPayload, jj);
|
||||||
|
for ( ii=jj; ii<16; ii++ ) {
|
||||||
|
abyLastCipher[ii] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
abyCTRPLD[14] = (BYTE) (wCnt >> 8);
|
||||||
|
abyCTRPLD[15] = (BYTE) (wCnt & 0xff);
|
||||||
|
|
||||||
|
AESv128(pbyRxKey,abyCTRPLD,abyTmp);
|
||||||
|
for ( kk=0; kk<16; kk++ ) {
|
||||||
|
abyPlainText[kk] = abyTmp[kk] ^ abyLastCipher[kk];
|
||||||
|
}
|
||||||
|
MEMvCopy(pbyPayload, abyPlainText, jj);
|
||||||
|
pbyPayload += jj;
|
||||||
|
|
||||||
|
//for MIC calculation
|
||||||
|
for ( ii=jj; ii<16; ii++ ) {
|
||||||
|
abyPlainText[ii] = 0x00;
|
||||||
|
}
|
||||||
|
for ( kk=0; kk<16; kk++ ) {
|
||||||
|
abyTmp[kk] = abyMIC[kk] ^ abyPlainText[kk];
|
||||||
|
}
|
||||||
|
AESv128(pbyRxKey,abyTmp,abyMIC);
|
||||||
|
|
||||||
|
//=>above is the calculate MIC
|
||||||
|
//--------------------------------------------
|
||||||
|
|
||||||
|
wCnt = 0;
|
||||||
|
abyCTRPLD[14] = (BYTE) (wCnt >> 8);
|
||||||
|
abyCTRPLD[15] = (BYTE) (wCnt & 0xff);
|
||||||
|
AESv128(pbyRxKey,abyCTRPLD,abyTmp);
|
||||||
|
for ( kk=0; kk<8; kk++ ) {
|
||||||
|
abyTmp[kk] = abyTmp[kk] ^ pbyPayload[kk];
|
||||||
|
}
|
||||||
|
//=>above is the dec-MIC from packet
|
||||||
|
//--------------------------------------------
|
||||||
|
|
||||||
|
if ( MEMEqualMemory(abyMIC,abyTmp,8) ) {
|
||||||
|
return TRUE;
|
||||||
|
} else {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
48
drivers/staging/vt6656/aes_ccmp.h
Normal file
48
drivers/staging/vt6656/aes_ccmp.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: aes_ccmp.h
|
||||||
|
*
|
||||||
|
* Purpose: AES_CCMP Decryption
|
||||||
|
*
|
||||||
|
* Author: Warren Hsu
|
||||||
|
*
|
||||||
|
* Date: Feb 15, 2005
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __AES_H__
|
||||||
|
#define __AES_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
BOOL AESbGenCCMP(PBYTE pbyRxKey, PBYTE pbyFrame, WORD wFrameSize);
|
||||||
|
|
||||||
|
#endif //__AES_H__
|
2129
drivers/staging/vt6656/baseband.c
Normal file
2129
drivers/staging/vt6656/baseband.c
Normal file
File diff suppressed because it is too large
Load Diff
163
drivers/staging/vt6656/baseband.h
Normal file
163
drivers/staging/vt6656/baseband.h
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: baseband.h
|
||||||
|
*
|
||||||
|
* Purpose: Implement functions to access baseband
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Jun. 5, 2002
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
* 06-10-2003 Bryan YC Fan: Re-write codes to support VT3253 spec.
|
||||||
|
* 08-26-2003 Kyle Hsu : Add defines of packet type and TX rate.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __BASEBAND_H__
|
||||||
|
#define __BASEBAND_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__TETHER_H__)
|
||||||
|
#include "tether.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
#define PREAMBLE_LONG 0
|
||||||
|
#define PREAMBLE_SHORT 1
|
||||||
|
|
||||||
|
//
|
||||||
|
// Registers in the BASEBAND
|
||||||
|
//
|
||||||
|
#define BB_MAX_CONTEXT_SIZE 256
|
||||||
|
|
||||||
|
#define C_SIFS_A 16 // micro sec.
|
||||||
|
#define C_SIFS_BG 10
|
||||||
|
|
||||||
|
#define C_EIFS 80 // micro sec.
|
||||||
|
|
||||||
|
|
||||||
|
#define C_SLOT_SHORT 9 // micro sec.
|
||||||
|
#define C_SLOT_LONG 20
|
||||||
|
|
||||||
|
#define C_CWMIN_A 15 // slot time
|
||||||
|
#define C_CWMIN_B 31
|
||||||
|
|
||||||
|
#define C_CWMAX 1023 // slot time
|
||||||
|
|
||||||
|
//0:11A 1:11B 2:11G
|
||||||
|
#define BB_TYPE_11A 0
|
||||||
|
#define BB_TYPE_11B 1
|
||||||
|
#define BB_TYPE_11G 2
|
||||||
|
|
||||||
|
//0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate)
|
||||||
|
#define PK_TYPE_11A 0
|
||||||
|
#define PK_TYPE_11B 1
|
||||||
|
#define PK_TYPE_11GB 2
|
||||||
|
#define PK_TYPE_11GA 3
|
||||||
|
|
||||||
|
#define TOP_RATE_54M 0x80000000
|
||||||
|
#define TOP_RATE_48M 0x40000000
|
||||||
|
#define TOP_RATE_36M 0x20000000
|
||||||
|
#define TOP_RATE_24M 0x10000000
|
||||||
|
#define TOP_RATE_18M 0x08000000
|
||||||
|
#define TOP_RATE_12M 0x04000000
|
||||||
|
#define TOP_RATE_11M 0x02000000
|
||||||
|
#define TOP_RATE_9M 0x01000000
|
||||||
|
#define TOP_RATE_6M 0x00800000
|
||||||
|
#define TOP_RATE_55M 0x00400000
|
||||||
|
#define TOP_RATE_2M 0x00200000
|
||||||
|
#define TOP_RATE_1M 0x00100000
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Macros ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
UINT
|
||||||
|
BBuGetFrameTime(
|
||||||
|
IN BYTE byPreambleType,
|
||||||
|
IN BYTE byFreqType,
|
||||||
|
IN UINT cbFrameLength,
|
||||||
|
IN WORD wRate
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
BBvCaculateParameter (
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN UINT cbFrameLength,
|
||||||
|
IN WORD wRate,
|
||||||
|
IN BYTE byPacketType,
|
||||||
|
OUT PWORD pwPhyLen,
|
||||||
|
OUT PBYTE pbyPhySrv,
|
||||||
|
OUT PBYTE pbyPhySgn
|
||||||
|
);
|
||||||
|
|
||||||
|
// timer for antenna diversity
|
||||||
|
|
||||||
|
VOID
|
||||||
|
TimerSQ3CallBack (
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
TimerSQ3Tmax3CallBack (
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3);
|
||||||
|
void BBvLoopbackOn (PSDevice pDevice);
|
||||||
|
void BBvLoopbackOff (PSDevice pDevice);
|
||||||
|
void BBvSoftwareReset (PSDevice pDevice);
|
||||||
|
|
||||||
|
void BBvSetShortSlotTime(PSDevice pDevice);
|
||||||
|
VOID BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData);
|
||||||
|
void BBvSetAntennaMode(PSDevice pDevice, BYTE byAntennaMode);
|
||||||
|
BOOL BBbVT3184Init (PSDevice pDevice);
|
||||||
|
VOID BBvSetDeepSleep (PSDevice pDevice);
|
||||||
|
VOID BBvExitDeepSleep (PSDevice pDevice);
|
||||||
|
VOID BBvUpdatePreEDThreshold(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BOOL bScanning
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __BASEBAND_H__
|
1777
drivers/staging/vt6656/bssdb.c
Normal file
1777
drivers/staging/vt6656/bssdb.c
Normal file
File diff suppressed because it is too large
Load Diff
370
drivers/staging/vt6656/bssdb.h
Normal file
370
drivers/staging/vt6656/bssdb.h
Normal file
@ -0,0 +1,370 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: bssdb.h
|
||||||
|
*
|
||||||
|
* Purpose: Handles the Basic Service Set & Node Database functions
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: July 16, 2002
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __BSSDB_H__
|
||||||
|
#define __BSSDB_H__
|
||||||
|
|
||||||
|
|
||||||
|
#include <linux/skbuff.h>
|
||||||
|
|
||||||
|
#if !defined(__80211HDR_H__)
|
||||||
|
#include "80211hdr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211MGR_H__)
|
||||||
|
#include "80211mgr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CARD_H__)
|
||||||
|
#include "card.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MIB_H__)
|
||||||
|
#include "mib.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
#define MAX_NODE_NUM 64
|
||||||
|
#define MAX_BSS_NUM 42
|
||||||
|
#define LOST_BEACON_COUNT 10 // 10 sec, XP defined
|
||||||
|
#define MAX_PS_TX_BUF 32 // sta max power saving tx buf
|
||||||
|
#define ADHOC_LOST_BEACON_COUNT 30 // 30 sec, beacon lost for adhoc only
|
||||||
|
#define MAX_INACTIVE_COUNT 300 // 300 sec, inactive STA node refresh
|
||||||
|
|
||||||
|
#define USE_PROTECT_PERIOD 10 // 10 sec, Use protect mode check period
|
||||||
|
#define ERP_RECOVER_COUNT 30 // 30 sec, ERP support callback check
|
||||||
|
#define BSS_CLEAR_COUNT 1
|
||||||
|
|
||||||
|
#define RSSI_STAT_COUNT 10
|
||||||
|
#define MAX_CHECK_RSSI_COUNT 8
|
||||||
|
|
||||||
|
// STA dwflags
|
||||||
|
#define WLAN_STA_AUTH BIT0
|
||||||
|
#define WLAN_STA_ASSOC BIT1
|
||||||
|
#define WLAN_STA_PS BIT2
|
||||||
|
#define WLAN_STA_TIM BIT3
|
||||||
|
// permanent; do not remove entry on expiration
|
||||||
|
#define WLAN_STA_PERM BIT4
|
||||||
|
// If 802.1X is used, this flag is
|
||||||
|
// controlling whether STA is authorized to
|
||||||
|
// send and receive non-IEEE 802.1X frames
|
||||||
|
#define WLAN_STA_AUTHORIZED BIT5
|
||||||
|
|
||||||
|
//#define MAX_RATE 12
|
||||||
|
|
||||||
|
#define MAX_WPA_IE_LEN 64
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
//
|
||||||
|
// IEEE 802.11 Structures and definitions
|
||||||
|
//
|
||||||
|
|
||||||
|
typedef struct tagSERPObject {
|
||||||
|
BOOL bERPExist;
|
||||||
|
BYTE byERP;
|
||||||
|
}ERPObject, DEF* PERPObject;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSRSNCapObject {
|
||||||
|
BOOL bRSNCapExist;
|
||||||
|
WORD wRSNCap;
|
||||||
|
}SRSNCapObject, DEF* PSRSNCapObject;
|
||||||
|
|
||||||
|
// BSS info(AP)
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagKnownBSS {
|
||||||
|
// BSS info
|
||||||
|
BOOL bActive;
|
||||||
|
BYTE abyBSSID[WLAN_BSSID_LEN];
|
||||||
|
UINT uChannel;
|
||||||
|
BYTE abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
|
||||||
|
BYTE abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
|
||||||
|
UINT uRSSI;
|
||||||
|
BYTE bySQ;
|
||||||
|
WORD wBeaconInterval;
|
||||||
|
WORD wCapInfo;
|
||||||
|
BYTE abySSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
|
||||||
|
BYTE byRxRate;
|
||||||
|
|
||||||
|
// WORD wATIMWindow;
|
||||||
|
BYTE byRSSIStatCnt;
|
||||||
|
LONG ldBmMAX;
|
||||||
|
LONG ldBmAverage[RSSI_STAT_COUNT];
|
||||||
|
LONG ldBmAverRange;
|
||||||
|
//For any BSSID selection improvment
|
||||||
|
BOOL bSelected;
|
||||||
|
|
||||||
|
//++ WPA informations
|
||||||
|
BOOL bWPAValid;
|
||||||
|
BYTE byGKType;
|
||||||
|
BYTE abyPKType[4];
|
||||||
|
WORD wPKCount;
|
||||||
|
BYTE abyAuthType[4];
|
||||||
|
WORD wAuthCount;
|
||||||
|
BYTE byDefaultK_as_PK;
|
||||||
|
BYTE byReplayIdx;
|
||||||
|
//--
|
||||||
|
|
||||||
|
//++ WPA2 informations
|
||||||
|
BOOL bWPA2Valid;
|
||||||
|
BYTE byCSSGK;
|
||||||
|
WORD wCSSPKCount;
|
||||||
|
BYTE abyCSSPK[4];
|
||||||
|
WORD wAKMSSAuthCount;
|
||||||
|
BYTE abyAKMSSAuthType[4];
|
||||||
|
|
||||||
|
//++ wpactl
|
||||||
|
BYTE byWPAIE[MAX_WPA_IE_LEN];
|
||||||
|
BYTE byRSNIE[MAX_WPA_IE_LEN];
|
||||||
|
WORD wWPALen;
|
||||||
|
WORD wRSNLen;
|
||||||
|
|
||||||
|
// Clear count
|
||||||
|
UINT uClearCount;
|
||||||
|
// BYTE abyIEs[WLAN_BEACON_FR_MAXLEN];
|
||||||
|
UINT uIELength;
|
||||||
|
QWORD qwBSSTimestamp;
|
||||||
|
QWORD qwLocalTSF; // local TSF timer
|
||||||
|
|
||||||
|
CARD_PHY_TYPE eNetworkTypeInUse;
|
||||||
|
|
||||||
|
ERPObject sERP;
|
||||||
|
SRSNCapObject sRSNCapObj;
|
||||||
|
BYTE abyIEs[1024]; // don't move this field !!
|
||||||
|
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
KnownBSS , DEF* PKnownBSS;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum tagNODE_STATE {
|
||||||
|
NODE_FREE,
|
||||||
|
NODE_AGED,
|
||||||
|
NODE_KNOWN,
|
||||||
|
NODE_AUTH,
|
||||||
|
NODE_ASSOC
|
||||||
|
} NODE_STATE, *PNODE_STATE;
|
||||||
|
|
||||||
|
|
||||||
|
// STA node info
|
||||||
|
typedef struct tagKnownNodeDB {
|
||||||
|
// STA info
|
||||||
|
BOOL bActive;
|
||||||
|
BYTE abyMACAddr[WLAN_ADDR_LEN];
|
||||||
|
BYTE abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
|
||||||
|
BYTE abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
|
||||||
|
WORD wTxDataRate;
|
||||||
|
BOOL bShortPreamble;
|
||||||
|
BOOL bERPExist;
|
||||||
|
BOOL bShortSlotTime;
|
||||||
|
UINT uInActiveCount;
|
||||||
|
WORD wMaxBasicRate; //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp.
|
||||||
|
WORD wMaxSuppRate; //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon.
|
||||||
|
WORD wSuppRate;
|
||||||
|
BYTE byTopOFDMBasicRate;//Records the highest basic rate in OFDM mode
|
||||||
|
BYTE byTopCCKBasicRate; //Records the highest basic rate in CCK mode
|
||||||
|
|
||||||
|
// For AP mode
|
||||||
|
struct sk_buff_head sTxPSQueue;
|
||||||
|
WORD wCapInfo;
|
||||||
|
WORD wListenInterval;
|
||||||
|
WORD wAID;
|
||||||
|
NODE_STATE eNodeState;
|
||||||
|
BOOL bPSEnable;
|
||||||
|
BOOL bRxPSPoll;
|
||||||
|
BYTE byAuthSequence;
|
||||||
|
ULONG ulLastRxJiffer;
|
||||||
|
BYTE bySuppRate;
|
||||||
|
DWORD dwFlags;
|
||||||
|
WORD wEnQueueCnt;
|
||||||
|
|
||||||
|
BOOL bOnFly;
|
||||||
|
ULONGLONG KeyRSC;
|
||||||
|
BYTE byKeyIndex;
|
||||||
|
DWORD dwKeyIndex;
|
||||||
|
BYTE byCipherSuite;
|
||||||
|
DWORD dwTSC47_16;
|
||||||
|
WORD wTSC15_0;
|
||||||
|
UINT uWepKeyLength;
|
||||||
|
BYTE abyWepKey[WLAN_WEPMAX_KEYLEN];
|
||||||
|
//
|
||||||
|
// Auto rate fallback vars
|
||||||
|
BOOL bIsInFallback;
|
||||||
|
UINT uAverageRSSI;
|
||||||
|
UINT uRateRecoveryTimeout;
|
||||||
|
UINT uRatePollTimeout;
|
||||||
|
UINT uTxFailures;
|
||||||
|
UINT uTxAttempts;
|
||||||
|
|
||||||
|
UINT uTxRetry;
|
||||||
|
UINT uFailureRatio;
|
||||||
|
UINT uRetryRatio;
|
||||||
|
UINT uTxOk[MAX_RATE+1];
|
||||||
|
UINT uTxFail[MAX_RATE+1];
|
||||||
|
UINT uTimeCount;
|
||||||
|
|
||||||
|
} KnownNodeDB, DEF* PKnownNodeDB;
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PKnownBSS
|
||||||
|
BSSpSearchBSSList(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PBYTE pbyDesireBSSID,
|
||||||
|
IN PBYTE pbyDesireSSID,
|
||||||
|
IN CARD_PHY_TYPE ePhyType
|
||||||
|
);
|
||||||
|
|
||||||
|
PKnownBSS
|
||||||
|
BSSpAddrIsInBSSList(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PBYTE abyBSSID,
|
||||||
|
IN PWLAN_IE_SSID pSSID
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
BSSvClearBSSList(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN BOOL bKeepCurrBSSID
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
BSSbInsertToBSSList(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PBYTE abyBSSIDAddr,
|
||||||
|
IN QWORD qwTimestamp,
|
||||||
|
IN WORD wBeaconInterval,
|
||||||
|
IN WORD wCapInfo,
|
||||||
|
IN BYTE byCurrChannel,
|
||||||
|
IN PWLAN_IE_SSID pSSID,
|
||||||
|
IN PWLAN_IE_SUPP_RATES pSuppRates,
|
||||||
|
IN PWLAN_IE_SUPP_RATES pExtSuppRates,
|
||||||
|
IN PERPObject psERP,
|
||||||
|
IN PWLAN_IE_RSN pRSN,
|
||||||
|
IN PWLAN_IE_RSN_EXT pRSNWPA,
|
||||||
|
IN PWLAN_IE_COUNTRY pIE_Country,
|
||||||
|
IN PWLAN_IE_QUIET pIE_Quiet,
|
||||||
|
IN UINT uIELength,
|
||||||
|
IN PBYTE pbyIEs,
|
||||||
|
IN HANDLE pRxPacketContext
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
BSSbUpdateToBSSList(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN QWORD qwTimestamp,
|
||||||
|
IN WORD wBeaconInterval,
|
||||||
|
IN WORD wCapInfo,
|
||||||
|
IN BYTE byCurrChannel,
|
||||||
|
IN BOOL bChannelHit,
|
||||||
|
IN PWLAN_IE_SSID pSSID,
|
||||||
|
IN PWLAN_IE_SUPP_RATES pSuppRates,
|
||||||
|
IN PWLAN_IE_SUPP_RATES pExtSuppRates,
|
||||||
|
IN PERPObject psERP,
|
||||||
|
IN PWLAN_IE_RSN pRSN,
|
||||||
|
IN PWLAN_IE_RSN_EXT pRSNWPA,
|
||||||
|
IN PWLAN_IE_COUNTRY pIE_Country,
|
||||||
|
IN PWLAN_IE_QUIET pIE_Quiet,
|
||||||
|
IN PKnownBSS pBSSList,
|
||||||
|
IN UINT uIELength,
|
||||||
|
IN PBYTE pbyIEs,
|
||||||
|
IN HANDLE pRxPacketContext
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
BSSbIsSTAInNodeDB(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PBYTE abyDstAddr,
|
||||||
|
OUT PUINT puNodeIndex
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
BSSvCreateOneNode(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
OUT PUINT puNodeIndex
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
BSSvUpdateAPNode(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PWORD pwCapInfo,
|
||||||
|
IN PWLAN_IE_SUPP_RATES pItemRates,
|
||||||
|
IN PWLAN_IE_SUPP_RATES pExtSuppRates
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
BSSvSecondCallBack(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
BSSvUpdateNodeTxCounter(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PSStatCounter pStatistic,
|
||||||
|
IN BYTE byTSR,
|
||||||
|
IN BYTE byPktNO
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
BSSvRemoveOneNode(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN UINT uNodeIndex
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
BSSvAddMulticastNode(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
BSSvClearNodeDBTable(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN UINT uStartIndex
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
BSSvClearAnyBSSJoinRecord(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif //__BSSDB_H__
|
1147
drivers/staging/vt6656/card.c
Normal file
1147
drivers/staging/vt6656/card.c
Normal file
File diff suppressed because it is too large
Load Diff
109
drivers/staging/vt6656/card.h
Normal file
109
drivers/staging/vt6656/card.h
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: card.h
|
||||||
|
*
|
||||||
|
* Purpose: Provide functions to setup NIC operation mode
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 1996
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __CARD_H__
|
||||||
|
#define __CARD_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
// Init card type
|
||||||
|
|
||||||
|
typedef enum _CARD_PHY_TYPE {
|
||||||
|
|
||||||
|
PHY_TYPE_AUTO=0,
|
||||||
|
PHY_TYPE_11B,
|
||||||
|
PHY_TYPE_11G,
|
||||||
|
PHY_TYPE_11A
|
||||||
|
} CARD_PHY_TYPE, DEF* PCARD_PHY_TYPE;
|
||||||
|
|
||||||
|
typedef enum _CARD_OP_MODE {
|
||||||
|
|
||||||
|
OP_MODE_INFRASTRUCTURE=0,
|
||||||
|
OP_MODE_ADHOC,
|
||||||
|
OP_MODE_AP,
|
||||||
|
OP_MODE_UNKNOWN
|
||||||
|
} CARD_OP_MODE, *PCARD_OP_MODE;
|
||||||
|
|
||||||
|
#define CB_MAX_CHANNEL_24G 14
|
||||||
|
//#define CB_MAX_CHANNEL_5G 24
|
||||||
|
#define CB_MAX_CHANNEL_5G 42 //[20050104] add channel9(5045MHz), 41==>42
|
||||||
|
#define CB_MAX_CHANNEL (CB_MAX_CHANNEL_24G+CB_MAX_CHANNEL_5G)
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CARDbSetMediaChannel(PVOID pDeviceHandler, UINT uConnectionChannel);
|
||||||
|
void CARDvSetRSPINF(PVOID pDeviceHandler, BYTE byBBType);
|
||||||
|
void vUpdateIFS(PVOID pDeviceHandler);
|
||||||
|
void CARDvUpdateBasicTopRate(PVOID pDeviceHandler);
|
||||||
|
BOOL CARDbAddBasicRate(PVOID pDeviceHandler, WORD wRateIdx);
|
||||||
|
BOOL CARDbIsOFDMinBasicRate(PVOID pDeviceHandler);
|
||||||
|
void CARDvAdjustTSF(PVOID pDeviceHandler, BYTE byRxRate, QWORD qwBSSTimestamp, QWORD qwLocalTSF);
|
||||||
|
BOOL CARDbGetCurrentTSF (PVOID pDeviceHandler, PQWORD pqwCurrTSF);
|
||||||
|
BOOL CARDbClearCurrentTSF(PVOID pDeviceHandler);
|
||||||
|
void CARDvSetFirstNextTBTT(PVOID pDeviceHandler, WORD wBeaconInterval);
|
||||||
|
void CARDvUpdateNextTBTT(PVOID pDeviceHandler, QWORD qwTSF, WORD wBeaconInterval);
|
||||||
|
QWORD CARDqGetNextTBTT(QWORD qwTSF, WORD wBeaconInterval);
|
||||||
|
QWORD CARDqGetTSFOffset(BYTE byRxRate, QWORD qwTSF1, QWORD qwTSF2);
|
||||||
|
BOOL CARDbRadioPowerOff(PVOID pDeviceHandler);
|
||||||
|
BOOL CARDbRadioPowerOn(PVOID pDeviceHandler);
|
||||||
|
BYTE CARDbyGetPktType(PVOID pDeviceHandler);
|
||||||
|
void CARDvSetBSSMode(PVOID pDeviceHandler);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
CARDbChannelSwitch (
|
||||||
|
IN PVOID pDeviceHandler,
|
||||||
|
IN BYTE byMode,
|
||||||
|
IN BYTE byNewChannel,
|
||||||
|
IN BYTE byCount
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __CARD_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
535
drivers/staging/vt6656/channel.c
Normal file
535
drivers/staging/vt6656/channel.c
Normal file
@ -0,0 +1,535 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: channel.c
|
||||||
|
*
|
||||||
|
* Purpose: Channel number maping
|
||||||
|
*
|
||||||
|
* Author: Lucas Lin
|
||||||
|
*
|
||||||
|
* Date: Dec 24, 2004
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
* 01-18-2005 RobertYu: remove the for loop searching in ChannelValid,
|
||||||
|
* change ChannelRuleTab to lookup-type, reorder table items.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined (_COUNTRY_H_)
|
||||||
|
#include "country.h"
|
||||||
|
#endif
|
||||||
|
#if !defined (_CHANNEL_H_)
|
||||||
|
#include "channel.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__RF_H__)
|
||||||
|
#include "rf.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
//static int msglevel =MSG_LEVEL_DEBUG;
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
static SChannelTblElement sChannelTbl[CB_MAX_CHANNEL+1] =
|
||||||
|
{
|
||||||
|
{0, 0, FALSE},
|
||||||
|
{1, 2412, TRUE},
|
||||||
|
{2, 2417, TRUE},
|
||||||
|
{3, 2422, TRUE},
|
||||||
|
{4, 2427, TRUE},
|
||||||
|
{5, 2432, TRUE},
|
||||||
|
{6, 2437, TRUE},
|
||||||
|
{7, 2442, TRUE},
|
||||||
|
{8, 2447, TRUE},
|
||||||
|
{9, 2452, TRUE},
|
||||||
|
{10, 2457, TRUE},
|
||||||
|
{11, 2462, TRUE},
|
||||||
|
{12, 2467, TRUE},
|
||||||
|
{13, 2472, TRUE},
|
||||||
|
{14, 2484, TRUE},
|
||||||
|
{183, 4915, TRUE}, //15
|
||||||
|
{184, 4920, TRUE}, //16
|
||||||
|
{185, 4925, TRUE}, //17
|
||||||
|
{187, 4935, TRUE}, //18
|
||||||
|
{188, 4940, TRUE}, //19
|
||||||
|
{189, 4945, TRUE}, //20
|
||||||
|
{192, 4960, TRUE}, //21
|
||||||
|
{196, 4980, TRUE}, //22
|
||||||
|
{7, 5035, TRUE}, //23
|
||||||
|
{8, 5040, TRUE}, //24
|
||||||
|
{9, 5045, TRUE}, //25
|
||||||
|
{11, 5055, TRUE}, //26
|
||||||
|
{12, 5060, TRUE}, //27
|
||||||
|
{16, 5080, TRUE}, //28
|
||||||
|
{34, 5170, TRUE}, //29
|
||||||
|
{36, 5180, TRUE}, //30
|
||||||
|
{38, 5190, TRUE}, //31
|
||||||
|
{40, 5200, TRUE}, //32
|
||||||
|
{42, 5210, TRUE}, //33
|
||||||
|
{44, 5220, TRUE}, //34
|
||||||
|
{46, 5230, TRUE}, //35
|
||||||
|
{48, 5240, TRUE}, //36
|
||||||
|
{52, 5260, TRUE}, //37
|
||||||
|
{56, 5280, TRUE}, //38
|
||||||
|
{60, 5300, TRUE}, //39
|
||||||
|
{64, 5320, TRUE}, //40
|
||||||
|
{100, 5500, TRUE}, //41
|
||||||
|
{104, 5520, TRUE}, //42
|
||||||
|
{108, 5540, TRUE}, //43
|
||||||
|
{112, 5560, TRUE}, //44
|
||||||
|
{116, 5580, TRUE}, //45
|
||||||
|
{120, 5600, TRUE}, //46
|
||||||
|
{124, 5620, TRUE}, //47
|
||||||
|
{128, 5640, TRUE}, //48
|
||||||
|
{132, 5660, TRUE}, //49
|
||||||
|
{136, 5680, TRUE}, //50
|
||||||
|
{140, 5700, TRUE}, //51
|
||||||
|
{149, 5745, TRUE}, //52
|
||||||
|
{153, 5765, TRUE}, //53
|
||||||
|
{157, 5785, TRUE}, //54
|
||||||
|
{161, 5805, TRUE}, //55
|
||||||
|
{165, 5825, TRUE} //56
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************
|
||||||
|
* The Radar regulation rules for each country
|
||||||
|
************************************************************************/
|
||||||
|
static struct
|
||||||
|
{
|
||||||
|
BYTE byChannelCountryCode; /* The country code */
|
||||||
|
CHAR chCountryCode[2];
|
||||||
|
BYTE bChannelIdxList[CB_MAX_CHANNEL]; /* Available channels Index */
|
||||||
|
BYTE byPower[CB_MAX_CHANNEL];
|
||||||
|
} ChannelRuleTab[] =
|
||||||
|
{
|
||||||
|
/************************************************************************
|
||||||
|
* This table is based on Athero driver rules
|
||||||
|
************************************************************************/
|
||||||
|
/* Country Available channels, ended with 0 */
|
||||||
|
/* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 */
|
||||||
|
{CCODE_FCC, {'U','S'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_TELEC, {'J','P'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 23, 0, 0, 23, 0, 23, 23, 0, 23, 0, 0, 23, 23, 23, 0, 23, 0, 23, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_ETSI, {'E','U'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RESV3, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RESV4, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RESV5, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RESV6, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RESV7, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RESV8, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RESV9, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RESVa, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RESVb, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RESVc, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RESVd, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RESVe, {' ',' '}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_ALLBAND, {' ',' '}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_ALBANIA, {'A','L'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_ALGERIA, {'D','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_ARGENTINA, {'A','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 0} },
|
||||||
|
{CCODE_ARMENIA, {'A','M'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_AUSTRALIA, {'A','U'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 23, 0, 23, 0, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_AUSTRIA, {'A','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 15, 0, 15, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_AZERBAIJAN, {'A','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_BAHRAIN, {'B','H'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_BELARUS, {'B','Y'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_BELGIUM, {'B','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_BELIZE, {'B','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_BOLIVIA, {'B','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_BRAZIL, {'B','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_BRUNEI_DARUSSALAM, {'B','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_BULGARIA, {'B','G'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 23, 0, 23, 0, 23, 23, 23, 0, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_CANADA, {'C','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_CHILE, {'C','L'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17} },
|
||||||
|
{CCODE_CHINA, {'C','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_COLOMBIA, {'C','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_COSTA_RICA, {'C','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_CROATIA, {'H','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_CYPRUS, {'C','Y'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_CZECH, {'C','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_DENMARK, {'D','K'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_DOMINICAN_REPUBLIC, {'D','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_ECUADOR, {'E','C'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_EGYPT, {'E','G'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_EL_SALVADOR, {'S','V'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_ESTONIA, {'E','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_FINLAND, {'F','I'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_FRANCE, {'F','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_GERMANY, {'D','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_GREECE, {'G','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_GEORGIA, {'G','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_GUATEMALA, {'G','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_HONDURAS, {'H','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_HONG_KONG, {'H','K'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 23, 0, 23, 0, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_HUNGARY, {'H','U'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_ICELAND, {'I','S'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_INDIA, {'I','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_INDONESIA, {'I','D'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_IRAN, {'I','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_IRELAND, {'I','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_ITALY, {'I','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_ISRAEL, {'I','L'}, { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_JAPAN, {'J','P'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 23, 0, 23, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_JORDAN, {'J','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_KAZAKHSTAN, {'K','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_KUWAIT, {'K','W'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_LATVIA, {'L','V'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_LEBANON, {'L','B'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_LEICHTENSTEIN, {'L','I'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_LITHUANIA, {'L','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_LUXEMBURG, {'L','U'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_MACAU, {'M','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 23, 0, 23, 0, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_MACEDONIA, {'M','K'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_MALTA, {'M','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}
|
||||||
|
, { 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 16, 0, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0} },
|
||||||
|
{CCODE_MALAYSIA, {'M','Y'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_MEXICO, {'M','X'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_MONACO, {'M','C'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_MOROCCO, {'M','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_NETHERLANDS, {'N','L'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_NEW_ZEALAND, {'N','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 23, 0, 23, 0, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_NORTH_KOREA, {'K','P'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0} },
|
||||||
|
{CCODE_NORWAY, {'N','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_OMAN, {'O','M'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_PAKISTAN, {'P','K'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_PANAMA, {'P','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_PERU, {'P','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_PHILIPPINES, {'P','H'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_POLAND, {'P','L'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_PORTUGAL, {'P','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_PUERTO_RICO, {'P','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_QATAR, {'Q','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_ROMANIA, {'R','O'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_RUSSIA, {'R','U'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_SAUDI_ARABIA, {'S','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_SINGAPORE, {'S','G'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 20, 20} },
|
||||||
|
{CCODE_SLOVAKIA, {'S','K'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}
|
||||||
|
, { 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 16, 0, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0} },
|
||||||
|
{CCODE_SLOVENIA, {'S','I'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_SOUTH_AFRICA, {'Z','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_SOUTH_KOREA, {'K','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0} },
|
||||||
|
{CCODE_SPAIN, {'E','S'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}
|
||||||
|
, { 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 0, 16, 0, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 0} },
|
||||||
|
{CCODE_SWEDEN, {'S','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_SWITZERLAND, {'C','H'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_SYRIA, {'S','Y'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_TAIWAN, {'T','W'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 0} },
|
||||||
|
{CCODE_THAILAND, {'T','H'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0} },
|
||||||
|
{CCODE_TRINIDAD_TOBAGO, {'T','T'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 18, 0, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_TUNISIA, {'T','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_TURKEY, {'T','R'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_UK, {'G','B'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 20, 0, 20, 20, 20, 20, 20, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_UKRAINE, {'U','A'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_UNITED_ARAB_EMIRATES, {'A','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_UNITED_STATES, {'U','S'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}
|
||||||
|
, { 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 17, 0, 17, 0, 17, 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, 30, 30} },
|
||||||
|
{CCODE_URUGUAY, {'U','Y'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0} },
|
||||||
|
{CCODE_UZBEKISTAN, {'U','Z'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_VENEZUELA, {'V','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0}
|
||||||
|
, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, 0} },
|
||||||
|
{CCODE_VIETNAM, {'V','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_YEMEN, {'Y','E'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_ZIMBABWE, {'Z','W'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_JAPAN_W52_W53, {'J','J'}, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
|
||||||
|
{CCODE_MAX, {'U','N'}, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
|
||||||
|
, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }
|
||||||
|
/* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define NUM_RULES (sizeof(ChannelRuleTab) / sizeof(ChannelRuleTab[0]))
|
||||||
|
|
||||||
|
/*--------------------- Export function -------------------------*/
|
||||||
|
/************************************************************************
|
||||||
|
* Country Channel Valid
|
||||||
|
* Input: CountryCode, ChannelNum
|
||||||
|
* ChanneIndex is defined as VT3253 MAC channel:
|
||||||
|
* 1 = 2.4G channel 1
|
||||||
|
* 2 = 2.4G channel 2
|
||||||
|
* ...
|
||||||
|
* 14 = 2.4G channel 14
|
||||||
|
* 15 = 4.9G channel 183
|
||||||
|
* 16 = 4.9G channel 184
|
||||||
|
* .....
|
||||||
|
* Output: TRUE if the specified 5GHz band is allowed to be used.
|
||||||
|
False otherwise.
|
||||||
|
// 4.9G => Ch 183, 184, 185, 187, 188, 189, 192, 196 (Value:15 ~ 22)
|
||||||
|
|
||||||
|
// 5G => Ch 7, 8, 9, 11, 12, 16, 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64,
|
||||||
|
// 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56)
|
||||||
|
************************************************************************/
|
||||||
|
BOOL
|
||||||
|
ChannelValid(UINT CountryCode, UINT ChannelIndex)
|
||||||
|
{
|
||||||
|
BOOL bValid;
|
||||||
|
|
||||||
|
bValid = FALSE;
|
||||||
|
/*
|
||||||
|
* If Channel Index is invalid, return invalid
|
||||||
|
*/
|
||||||
|
if ((ChannelIndex > CB_MAX_CHANNEL) ||
|
||||||
|
(ChannelIndex == 0))
|
||||||
|
{
|
||||||
|
bValid = FALSE;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
bValid = sChannelTbl[ChannelIndex].bValid;
|
||||||
|
|
||||||
|
exit:
|
||||||
|
return (bValid);
|
||||||
|
|
||||||
|
} /* end ChannelValid */
|
||||||
|
|
||||||
|
/************************************************************************
|
||||||
|
* CHvChannelGetList
|
||||||
|
* Get Available Channel List for a given country
|
||||||
|
* Input:
|
||||||
|
* CountryCode = The country code defined in country.h
|
||||||
|
* Output:
|
||||||
|
* ChannelBitMask = (QWORD *) correspondent bit mask
|
||||||
|
* of available channels
|
||||||
|
* 0x0000000000000001 means channel 1 is supported
|
||||||
|
* 0x0000000000000003 means channel 1,2 are supported
|
||||||
|
* 0x000000000000000F means channel 1,2,..15 are supported
|
||||||
|
************************************************************************/
|
||||||
|
BOOL
|
||||||
|
CHvChannelGetList (
|
||||||
|
IN UINT uCountryCodeIdx,
|
||||||
|
OUT PBYTE pbyChannelTable
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (uCountryCodeIdx >= CCODE_MAX) {
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
MEMvCopy(pbyChannelTable, ChannelRuleTab[uCountryCodeIdx].bChannelIdxList, CB_MAX_CHANNEL);
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID CHvInitChannelTable (PVOID pDeviceHandler)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) pDeviceHandler;
|
||||||
|
BOOL bMultiBand = FALSE;
|
||||||
|
UINT ii;
|
||||||
|
|
||||||
|
for(ii=1;ii<=CB_MAX_CHANNEL;ii++) {
|
||||||
|
sChannelTbl[ii].bValid = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (pDevice->byRFType) {
|
||||||
|
case RF_AL2230:
|
||||||
|
case RF_AL2230S:
|
||||||
|
case RF_VT3226:
|
||||||
|
case RF_VT3226D0:
|
||||||
|
bMultiBand = FALSE;
|
||||||
|
break;
|
||||||
|
case RF_AIROHA7230:
|
||||||
|
case RF_VT3342A0:
|
||||||
|
default :
|
||||||
|
bMultiBand = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((pDevice->dwDiagRefCount != 0) ||
|
||||||
|
(pDevice->b11hEable == TRUE)) {
|
||||||
|
if (bMultiBand == TRUE) {
|
||||||
|
for(ii=0;ii<CB_MAX_CHANNEL;ii++) {
|
||||||
|
sChannelTbl[ii+1].bValid = TRUE;
|
||||||
|
//pDevice->abyRegPwr[ii+1] = pDevice->abyOFDMDefaultPwr[ii+1];
|
||||||
|
//pDevice->abyLocalPwr[ii+1] = pDevice->abyOFDMDefaultPwr[ii+1];
|
||||||
|
}
|
||||||
|
for(ii=0;ii<CB_MAX_CHANNEL_24G;ii++) {
|
||||||
|
//pDevice->abyRegPwr[ii+1] = pDevice->abyCCKDefaultPwr[ii+1];
|
||||||
|
//pDevice->abyLocalPwr[ii+1] = pDevice->abyCCKDefaultPwr[ii+1];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for(ii=0;ii<CB_MAX_CHANNEL_24G;ii++) {
|
||||||
|
sChannelTbl[ii+1].bValid = TRUE;
|
||||||
|
//pDevice->abyRegPwr[ii+1] = pDevice->abyCCKDefaultPwr[ii+1];
|
||||||
|
//pDevice->abyLocalPwr[ii+1] = pDevice->abyCCKDefaultPwr[ii+1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (pDevice->byZoneType <= CCODE_MAX) {
|
||||||
|
if (bMultiBand == TRUE) {
|
||||||
|
for(ii=0;ii<CB_MAX_CHANNEL;ii++) {
|
||||||
|
if (ChannelRuleTab[pDevice->byZoneType].bChannelIdxList[ii] != 0) {
|
||||||
|
sChannelTbl[ii+1].bValid = TRUE;
|
||||||
|
//pDevice->abyRegPwr[ii+1] = ChannelRuleTab[pDevice->byZoneType].byPower[ii];
|
||||||
|
//pDevice->abyLocalPwr[ii+1] = ChannelRuleTab[pDevice->byZoneType].byPower[ii];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for(ii=0;ii<CB_MAX_CHANNEL_24G;ii++) {
|
||||||
|
if (ChannelRuleTab[pDevice->byZoneType].bChannelIdxList[ii] != 0) {
|
||||||
|
sChannelTbl[ii+1].bValid = TRUE;
|
||||||
|
//pDevice->abyRegPwr[ii+1] = ChannelRuleTab[pDevice->byZoneType].byPower[ii];
|
||||||
|
//pDevice->abyLocalPwr[ii+1] = ChannelRuleTab[pDevice->byZoneType].byPower[ii];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO"Zone=[%d][%c][%c]!!\n",pDevice->byZoneType,ChannelRuleTab[pDevice->byZoneType].chCountryCode[0],ChannelRuleTab[pDevice->byZoneType].chCountryCode[1]);
|
||||||
|
for(ii=0;ii<CB_MAX_CHANNEL;ii++) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Channel[%d] is [%d]\n",sChannelTbl[ii].byChannelNumber,sChannelTbl[ii+1].bValid);
|
||||||
|
/*if (pDevice->abyRegPwr[ii+1] == 0) {
|
||||||
|
pDevice->abyRegPwr[ii+1] = pDevice->abyOFDMDefaultPwr[ii+1];
|
||||||
|
}
|
||||||
|
if (pDevice->abyLocalPwr[ii+1] == 0) {
|
||||||
|
pDevice->abyLocalPwr[ii+1] = pDevice->abyOFDMDefaultPwr[ii+1];
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BYTE CHbyGetChannelMapping(BYTE byChannelNumber)
|
||||||
|
{
|
||||||
|
BYTE ii;
|
||||||
|
BYTE byCHMapping = 0;
|
||||||
|
|
||||||
|
for (ii=1; ii<=CB_MAX_CHANNEL; ii++ ) {
|
||||||
|
if ( sChannelTbl[ii].byChannelNumber == byChannelNumber ) {
|
||||||
|
byCHMapping = ii;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return byCHMapping;
|
||||||
|
}
|
58
drivers/staging/vt6656/channel.h
Normal file
58
drivers/staging/vt6656/channel.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: channel.h
|
||||||
|
*
|
||||||
|
* Purpose: Country Regulation Rules header file
|
||||||
|
*
|
||||||
|
* Author: Lucas Lin
|
||||||
|
*
|
||||||
|
* Date: Dec 23, 2004
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _CHANNEL_H_
|
||||||
|
#define _CHANNEL_H_
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
typedef struct tagSChannelTblElement {
|
||||||
|
BYTE byChannelNumber;
|
||||||
|
UINT uFrequency;
|
||||||
|
BOOL bValid;
|
||||||
|
}SChannelTblElement, DEF* PSChannelTblElement;
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
BOOL ChannelValid(UINT CountryCode, UINT ChannelNum);
|
||||||
|
VOID CHvInitChannelTable (PVOID pDeviceHandler);
|
||||||
|
BYTE CHbyGetChannelMapping(BYTE byChannelNumber);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
CHvChannelGetList (
|
||||||
|
IN UINT uCountryCodeIdx,
|
||||||
|
OUT PBYTE pbyChannelTable
|
||||||
|
);
|
||||||
|
#endif /* _REGULATE_H_ */
|
116
drivers/staging/vt6656/control.c
Normal file
116
drivers/staging/vt6656/control.c
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: control.c
|
||||||
|
*
|
||||||
|
* Purpose: Handle USB control endpoint
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Apr. 5, 2004
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* CONTROLnsRequestOut - Write variable length bytes to MEM/BB/MAC/EEPROM
|
||||||
|
* CONTROLnsRequestIn - Read variable length bytes from MEM/BB/MAC/EEPROM
|
||||||
|
* ControlvWriteByte - Write one byte to MEM/BB/MAC/EEPROM
|
||||||
|
* ControlvReadByte - Read one byte from MEM/BB/MAC/EEPROM
|
||||||
|
* ControlvMaskByte - Read one byte from MEM/BB/MAC/EEPROM and clear/set some bits in the same address
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
* 04-05-2004 Jerry Chen: Initial release
|
||||||
|
* 11-24-2004 Warren Hsu: Add ControlvWriteByte,ControlvReadByte,ControlvMaskByte
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(__CONTROL_H__)
|
||||||
|
#include "control.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__RNDIS_H__)
|
||||||
|
#include "rndis.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
//static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
//static int msglevel =MSG_LEVEL_DEBUG;
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
void ControlvWriteByte(PSDevice pDevice, BYTE byRegType, BYTE byRegOfs, BYTE byData)
|
||||||
|
{
|
||||||
|
BYTE byData1;
|
||||||
|
|
||||||
|
byData1 = byData;
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE,
|
||||||
|
byRegOfs,
|
||||||
|
byRegType,
|
||||||
|
1,
|
||||||
|
&byData1
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ControlvReadByte(PSDevice pDevice, BYTE byRegType, BYTE byRegOfs, PBYTE pbyData)
|
||||||
|
{
|
||||||
|
NTSTATUS ntStatus;
|
||||||
|
BYTE byData1;
|
||||||
|
|
||||||
|
|
||||||
|
ntStatus = CONTROLnsRequestIn(pDevice,
|
||||||
|
MESSAGE_TYPE_READ,
|
||||||
|
byRegOfs,
|
||||||
|
byRegType,
|
||||||
|
1,
|
||||||
|
&byData1);
|
||||||
|
|
||||||
|
*pbyData = byData1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ControlvMaskByte(PSDevice pDevice, BYTE byRegType, BYTE byRegOfs, BYTE byMask, BYTE byData)
|
||||||
|
{
|
||||||
|
BYTE pbyData[2];
|
||||||
|
|
||||||
|
pbyData[0] = byData;
|
||||||
|
pbyData[1] = byMask;
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE_MASK,
|
||||||
|
byRegOfs,
|
||||||
|
byRegType,
|
||||||
|
2,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
103
drivers/staging/vt6656/control.h
Normal file
103
drivers/staging/vt6656/control.h
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: control.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Apr. 5, 2004
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __CONTROL_H__
|
||||||
|
#define __CONTROL_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__USBPIPE_H__)
|
||||||
|
#include "usbpipe.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
#define CONTROLnsRequestOut( Device,Request,Value,Index,Length,Buffer) \
|
||||||
|
PIPEnsControlOut( Device,Request,Value,Index,Length,Buffer)
|
||||||
|
|
||||||
|
#define CONTROLnsRequestOutAsyn( Device,Request,Value,Index,Length,Buffer) \
|
||||||
|
PIPEnsControlOutAsyn( Device,Request,Value,Index,Length,Buffer)
|
||||||
|
|
||||||
|
#define CONTROLnsRequestIn( Device,Request,Value,Index,Length,Buffer) \
|
||||||
|
PIPEnsControlIn( Device,Request,Value,Index,Length,Buffer)
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
void ControlvWriteByte(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byRegType,
|
||||||
|
IN BYTE byRegOfs,
|
||||||
|
IN BYTE byData
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
void ControlvReadByte(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byRegType,
|
||||||
|
IN BYTE byRegOfs,
|
||||||
|
IN PBYTE pbyData
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
void ControlvMaskByte(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byRegType,
|
||||||
|
IN BYTE byRegOfs,
|
||||||
|
IN BYTE byMask,
|
||||||
|
IN BYTE byData
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __RCV_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
163
drivers/staging/vt6656/country.h
Normal file
163
drivers/staging/vt6656/country.h
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: country.h
|
||||||
|
*
|
||||||
|
* Purpose: Country Code information
|
||||||
|
*
|
||||||
|
* Author: Lucas Lin
|
||||||
|
*
|
||||||
|
* Date: Dec 23, 2004
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __COUNTRY_H__
|
||||||
|
#define __COUNTRY_H__
|
||||||
|
|
||||||
|
/************************************************************************
|
||||||
|
* The definition here should be complied with the INF country order
|
||||||
|
* Please check with VNWL.inf/VNWL64.inf/VNWL*.inf
|
||||||
|
************************************************************************/
|
||||||
|
typedef enum _COUNTRY_CODE {
|
||||||
|
CCODE_FCC = 0,
|
||||||
|
CCODE_TELEC,
|
||||||
|
CCODE_ETSI,
|
||||||
|
CCODE_RESV3,
|
||||||
|
CCODE_RESV4,
|
||||||
|
CCODE_RESV5,
|
||||||
|
CCODE_RESV6,
|
||||||
|
CCODE_RESV7,
|
||||||
|
CCODE_RESV8,
|
||||||
|
CCODE_RESV9,
|
||||||
|
CCODE_RESVa,
|
||||||
|
CCODE_RESVb,
|
||||||
|
CCODE_RESVc,
|
||||||
|
CCODE_RESVd,
|
||||||
|
CCODE_RESVe,
|
||||||
|
CCODE_ALLBAND,
|
||||||
|
CCODE_ALBANIA,
|
||||||
|
CCODE_ALGERIA,
|
||||||
|
CCODE_ARGENTINA,
|
||||||
|
CCODE_ARMENIA,
|
||||||
|
CCODE_AUSTRALIA,
|
||||||
|
CCODE_AUSTRIA,
|
||||||
|
CCODE_AZERBAIJAN,
|
||||||
|
CCODE_BAHRAIN,
|
||||||
|
CCODE_BELARUS,
|
||||||
|
CCODE_BELGIUM,
|
||||||
|
CCODE_BELIZE,
|
||||||
|
CCODE_BOLIVIA,
|
||||||
|
CCODE_BRAZIL,
|
||||||
|
CCODE_BRUNEI_DARUSSALAM,
|
||||||
|
CCODE_BULGARIA,
|
||||||
|
CCODE_CANADA,
|
||||||
|
CCODE_CHILE,
|
||||||
|
CCODE_CHINA,
|
||||||
|
CCODE_COLOMBIA,
|
||||||
|
CCODE_COSTA_RICA,
|
||||||
|
CCODE_CROATIA,
|
||||||
|
CCODE_CYPRUS,
|
||||||
|
CCODE_CZECH,
|
||||||
|
CCODE_DENMARK,
|
||||||
|
CCODE_DOMINICAN_REPUBLIC,
|
||||||
|
CCODE_ECUADOR,
|
||||||
|
CCODE_EGYPT,
|
||||||
|
CCODE_EL_SALVADOR,
|
||||||
|
CCODE_ESTONIA,
|
||||||
|
CCODE_FINLAND,
|
||||||
|
CCODE_FRANCE,
|
||||||
|
CCODE_GERMANY,
|
||||||
|
CCODE_GREECE,
|
||||||
|
CCODE_GEORGIA,
|
||||||
|
CCODE_GUATEMALA,
|
||||||
|
CCODE_HONDURAS,
|
||||||
|
CCODE_HONG_KONG,
|
||||||
|
CCODE_HUNGARY,
|
||||||
|
CCODE_ICELAND,
|
||||||
|
CCODE_INDIA,
|
||||||
|
CCODE_INDONESIA,
|
||||||
|
CCODE_IRAN,
|
||||||
|
CCODE_IRELAND,
|
||||||
|
CCODE_ITALY,
|
||||||
|
CCODE_ISRAEL,
|
||||||
|
CCODE_JAPAN,
|
||||||
|
CCODE_JORDAN,
|
||||||
|
CCODE_KAZAKHSTAN,
|
||||||
|
CCODE_KUWAIT,
|
||||||
|
CCODE_LATVIA,
|
||||||
|
CCODE_LEBANON,
|
||||||
|
CCODE_LEICHTENSTEIN,
|
||||||
|
CCODE_LITHUANIA,
|
||||||
|
CCODE_LUXEMBURG,
|
||||||
|
CCODE_MACAU,
|
||||||
|
CCODE_MACEDONIA,
|
||||||
|
CCODE_MALTA,
|
||||||
|
CCODE_MALAYSIA,
|
||||||
|
CCODE_MEXICO,
|
||||||
|
CCODE_MONACO,
|
||||||
|
CCODE_MOROCCO,
|
||||||
|
CCODE_NETHERLANDS,
|
||||||
|
CCODE_NEW_ZEALAND,
|
||||||
|
CCODE_NORTH_KOREA,
|
||||||
|
CCODE_NORWAY,
|
||||||
|
CCODE_OMAN,
|
||||||
|
CCODE_PAKISTAN,
|
||||||
|
CCODE_PANAMA,
|
||||||
|
CCODE_PERU,
|
||||||
|
CCODE_PHILIPPINES,
|
||||||
|
CCODE_POLAND,
|
||||||
|
CCODE_PORTUGAL,
|
||||||
|
CCODE_PUERTO_RICO,
|
||||||
|
CCODE_QATAR,
|
||||||
|
CCODE_ROMANIA,
|
||||||
|
CCODE_RUSSIA,
|
||||||
|
CCODE_SAUDI_ARABIA,
|
||||||
|
CCODE_SINGAPORE,
|
||||||
|
CCODE_SLOVAKIA,
|
||||||
|
CCODE_SLOVENIA,
|
||||||
|
CCODE_SOUTH_AFRICA,
|
||||||
|
CCODE_SOUTH_KOREA,
|
||||||
|
CCODE_SPAIN,
|
||||||
|
CCODE_SWEDEN,
|
||||||
|
CCODE_SWITZERLAND,
|
||||||
|
CCODE_SYRIA,
|
||||||
|
CCODE_TAIWAN,
|
||||||
|
CCODE_THAILAND,
|
||||||
|
CCODE_TRINIDAD_TOBAGO,
|
||||||
|
CCODE_TUNISIA,
|
||||||
|
CCODE_TURKEY,
|
||||||
|
CCODE_UK,
|
||||||
|
CCODE_UKRAINE,
|
||||||
|
CCODE_UNITED_ARAB_EMIRATES,
|
||||||
|
CCODE_UNITED_STATES,
|
||||||
|
CCODE_URUGUAY,
|
||||||
|
CCODE_UZBEKISTAN,
|
||||||
|
CCODE_VENEZUELA,
|
||||||
|
CCODE_VIETNAM,
|
||||||
|
CCODE_YEMEN,
|
||||||
|
CCODE_ZIMBABWE,
|
||||||
|
CCODE_JAPAN_W52_W53,
|
||||||
|
CCODE_MAX
|
||||||
|
} COUNTRY_CODE;
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************************
|
||||||
|
* Function prototype
|
||||||
|
************************************************************************/
|
||||||
|
#endif /* __COUNTRY_H__ */
|
518
drivers/staging/vt6656/datarate.c
Normal file
518
drivers/staging/vt6656/datarate.c
Normal file
@ -0,0 +1,518 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: datarate.c
|
||||||
|
*
|
||||||
|
* Purpose: Handles the auto fallback & data rates functions
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: July 17, 2002
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* RATEvParseMaxRate - Parsing the highest basic & support rate in rate field of frame
|
||||||
|
* RATEvTxRateFallBack - Rate fallback Algorithm Implementaion
|
||||||
|
* RATEuSetIE- Set rate IE field.
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TMACRO_H__)
|
||||||
|
#include "tmacro.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MAC_H__)
|
||||||
|
#include "mac.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211MGR_H__)
|
||||||
|
#include "80211mgr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__BSSDB_H__)
|
||||||
|
#include "bssdb.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DATARATE_H__)
|
||||||
|
#include "datarate.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CARD_H__)
|
||||||
|
#include "card.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__BASEBAND_H__)
|
||||||
|
#include "baseband.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__SROM_H__)
|
||||||
|
#include "srom.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__RF_H__)
|
||||||
|
#include "rf.h"
|
||||||
|
#endif
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
//static int msglevel =MSG_LEVEL_DEBUG;
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
const BYTE acbyIERate[MAX_RATE] =
|
||||||
|
{0x02, 0x04, 0x0B, 0x16, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C};
|
||||||
|
|
||||||
|
#define AUTORATE_TXOK_CNT 0x0400
|
||||||
|
#define AUTORATE_TXFAIL_CNT 0x0064
|
||||||
|
#define AUTORATE_TIMEOUT 10
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
VOID s_vResetCounter (
|
||||||
|
IN PKnownNodeDB psNodeDBTable
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
s_vResetCounter (
|
||||||
|
IN PKnownNodeDB psNodeDBTable
|
||||||
|
)
|
||||||
|
{
|
||||||
|
BYTE ii;
|
||||||
|
|
||||||
|
// clear statistic counter for auto_rate
|
||||||
|
for(ii=0;ii<=MAX_RATE;ii++) {
|
||||||
|
psNodeDBTable->uTxOk[ii] = 0;
|
||||||
|
psNodeDBTable->uTxFail[ii] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get RateIdx from the value in SuppRates IE or ExtSuppRates IE
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* BYTE - Rate value in SuppRates IE or ExtSuppRates IE
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: RateIdx
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
BYTE
|
||||||
|
DATARATEbyGetRateIdx (
|
||||||
|
IN BYTE byRate
|
||||||
|
)
|
||||||
|
{
|
||||||
|
BYTE ii;
|
||||||
|
|
||||||
|
//Erase basicRate flag.
|
||||||
|
byRate = byRate & 0x7F;//0111 1111
|
||||||
|
|
||||||
|
for (ii = 0; ii < MAX_RATE; ii ++) {
|
||||||
|
if (acbyIERate[ii] == byRate)
|
||||||
|
return ii;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Routine Description:
|
||||||
|
* Rate fallback Algorithm Implementaion
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice - Pointer to the adapter
|
||||||
|
* psNodeDBTable - Pointer to Node Data Base
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
#define AUTORATE_TXCNT_THRESHOLD 20
|
||||||
|
#define AUTORATE_INC_THRESHOLD 30
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get RateIdx from the value in SuppRates IE or ExtSuppRates IE
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* BYTE - Rate value in SuppRates IE or ExtSuppRates IE
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: RateIdx
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
WORD
|
||||||
|
RATEwGetRateIdx(
|
||||||
|
IN BYTE byRate
|
||||||
|
)
|
||||||
|
{
|
||||||
|
WORD ii;
|
||||||
|
|
||||||
|
//Erase basicRate flag.
|
||||||
|
byRate = byRate & 0x7F;//0111 1111
|
||||||
|
|
||||||
|
for (ii = 0; ii < MAX_RATE; ii ++) {
|
||||||
|
if (acbyIERate[ii] == byRate)
|
||||||
|
return ii;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Parsing the highest basic & support rate in rate field of frame.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice - Pointer to the adapter
|
||||||
|
* pItemRates - Pointer to Rate field defined in 802.11 spec.
|
||||||
|
* pItemExtRates - Pointer to Extended Rate field defined in 802.11 spec.
|
||||||
|
* Out:
|
||||||
|
* pwMaxBasicRate - Maximum Basic Rate
|
||||||
|
* pwMaxSuppRate - Maximum Supported Rate
|
||||||
|
* pbyTopCCKRate - Maximum Basic Rate in CCK mode
|
||||||
|
* pbyTopOFDMRate - Maximum Basic Rate in OFDM mode
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
VOID
|
||||||
|
RATEvParseMaxRate (
|
||||||
|
IN PVOID pDeviceHandler,
|
||||||
|
IN PWLAN_IE_SUPP_RATES pItemRates,
|
||||||
|
IN PWLAN_IE_SUPP_RATES pItemExtRates,
|
||||||
|
IN BOOL bUpdateBasicRate,
|
||||||
|
OUT PWORD pwMaxBasicRate,
|
||||||
|
OUT PWORD pwMaxSuppRate,
|
||||||
|
OUT PWORD pwSuppRate,
|
||||||
|
OUT PBYTE pbyTopCCKRate,
|
||||||
|
OUT PBYTE pbyTopOFDMRate
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) pDeviceHandler;
|
||||||
|
UINT ii;
|
||||||
|
BYTE byHighSuppRate = 0;
|
||||||
|
BYTE byRate = 0;
|
||||||
|
WORD wOldBasicRate = pDevice->wBasicRate;
|
||||||
|
UINT uRateLen;
|
||||||
|
|
||||||
|
|
||||||
|
if (pItemRates == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
*pwSuppRate = 0;
|
||||||
|
uRateLen = pItemRates->len;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ParseMaxRate Len: %d\n", uRateLen);
|
||||||
|
if (pDevice->byBBType != BB_TYPE_11B) {
|
||||||
|
if (uRateLen > WLAN_RATES_MAXLEN)
|
||||||
|
uRateLen = WLAN_RATES_MAXLEN;
|
||||||
|
} else {
|
||||||
|
if (uRateLen > WLAN_RATES_MAXLEN_11B)
|
||||||
|
uRateLen = WLAN_RATES_MAXLEN_11B;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ii = 0; ii < uRateLen; ii++) {
|
||||||
|
byRate = (BYTE)(pItemRates->abyRates[ii]);
|
||||||
|
if (WLAN_MGMT_IS_BASICRATE(byRate) &&
|
||||||
|
(bUpdateBasicRate == TRUE)) {
|
||||||
|
// Add to basic rate set, update pDevice->byTopCCKBasicRate and pDevice->byTopOFDMBasicRate
|
||||||
|
CARDbAddBasicRate((PVOID)pDevice, RATEwGetRateIdx(byRate));
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ParseMaxRate AddBasicRate: %d\n", RATEwGetRateIdx(byRate));
|
||||||
|
}
|
||||||
|
byRate = (BYTE)(pItemRates->abyRates[ii]&0x7F);
|
||||||
|
if (byHighSuppRate == 0)
|
||||||
|
byHighSuppRate = byRate;
|
||||||
|
if (byRate > byHighSuppRate)
|
||||||
|
byHighSuppRate = byRate;
|
||||||
|
*pwSuppRate |= (1<<RATEwGetRateIdx(byRate));
|
||||||
|
}
|
||||||
|
if ((pItemExtRates != NULL) && (pItemExtRates->byElementID == WLAN_EID_EXTSUPP_RATES) &&
|
||||||
|
(pDevice->byBBType != BB_TYPE_11B)) {
|
||||||
|
|
||||||
|
UINT uExtRateLen = pItemExtRates->len;
|
||||||
|
|
||||||
|
if (uExtRateLen > WLAN_RATES_MAXLEN)
|
||||||
|
uExtRateLen = WLAN_RATES_MAXLEN;
|
||||||
|
|
||||||
|
for (ii = 0; ii < uExtRateLen ; ii++) {
|
||||||
|
byRate = (BYTE)(pItemExtRates->abyRates[ii]);
|
||||||
|
// select highest basic rate
|
||||||
|
if (WLAN_MGMT_IS_BASICRATE(pItemExtRates->abyRates[ii])) {
|
||||||
|
// Add to basic rate set, update pDevice->byTopCCKBasicRate and pDevice->byTopOFDMBasicRate
|
||||||
|
CARDbAddBasicRate((PVOID)pDevice, RATEwGetRateIdx(byRate));
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ParseMaxRate AddBasicRate: %d\n", RATEwGetRateIdx(byRate));
|
||||||
|
}
|
||||||
|
byRate = (BYTE)(pItemExtRates->abyRates[ii]&0x7F);
|
||||||
|
if (byHighSuppRate == 0)
|
||||||
|
byHighSuppRate = byRate;
|
||||||
|
if (byRate > byHighSuppRate)
|
||||||
|
byHighSuppRate = byRate;
|
||||||
|
*pwSuppRate |= (1<<RATEwGetRateIdx(byRate));
|
||||||
|
//DBG_PRN_GRP09(("ParseMaxRate : HighSuppRate: %d, %X\n", RATEwGetRateIdx(byRate), byRate));
|
||||||
|
}
|
||||||
|
} //if(pItemExtRates != NULL)
|
||||||
|
|
||||||
|
if ((pDevice->byPacketType == PK_TYPE_11GB) && CARDbIsOFDMinBasicRate((PVOID)pDevice)) {
|
||||||
|
pDevice->byPacketType = PK_TYPE_11GA;
|
||||||
|
}
|
||||||
|
|
||||||
|
*pbyTopCCKRate = pDevice->byTopCCKBasicRate;
|
||||||
|
*pbyTopOFDMRate = pDevice->byTopOFDMBasicRate;
|
||||||
|
*pwMaxSuppRate = RATEwGetRateIdx(byHighSuppRate);
|
||||||
|
if ((pDevice->byPacketType==PK_TYPE_11B) || (pDevice->byPacketType==PK_TYPE_11GB))
|
||||||
|
*pwMaxBasicRate = pDevice->byTopCCKBasicRate;
|
||||||
|
else
|
||||||
|
*pwMaxBasicRate = pDevice->byTopOFDMBasicRate;
|
||||||
|
if (wOldBasicRate != pDevice->wBasicRate)
|
||||||
|
CARDvSetRSPINF((PVOID)pDevice, pDevice->byBBType);
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Exit ParseMaxRate\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Routine Description:
|
||||||
|
* Rate fallback Algorithm Implementaion
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice - Pointer to the adapter
|
||||||
|
* psNodeDBTable - Pointer to Node Data Base
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
#define AUTORATE_TXCNT_THRESHOLD 20
|
||||||
|
#define AUTORATE_INC_THRESHOLD 30
|
||||||
|
|
||||||
|
VOID
|
||||||
|
RATEvTxRateFallBack (
|
||||||
|
IN PVOID pDeviceHandler,
|
||||||
|
IN PKnownNodeDB psNodeDBTable
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) pDeviceHandler;
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
#if 1 //mike fixed old: use packet lose ratio algorithm to control rate
|
||||||
|
WORD wIdxDownRate = 0;
|
||||||
|
UINT ii;
|
||||||
|
BOOL bAutoRate[MAX_RATE] = {TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE};
|
||||||
|
DWORD dwThroughputTbl[MAX_RATE] = {10, 20, 55, 110, 60, 90, 120, 180, 240, 360, 480, 540};
|
||||||
|
DWORD dwThroughput = 0;
|
||||||
|
WORD wIdxUpRate = 0;
|
||||||
|
DWORD dwTxDiff = 0;
|
||||||
|
|
||||||
|
if (pMgmt->eScanState != WMAC_NO_SCANNING) {
|
||||||
|
// Don't do Fallback when scanning Channel
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
psNodeDBTable->uTimeCount ++;
|
||||||
|
|
||||||
|
if (psNodeDBTable->uTxFail[MAX_RATE] > psNodeDBTable->uTxOk[MAX_RATE])
|
||||||
|
dwTxDiff = psNodeDBTable->uTxFail[MAX_RATE] - psNodeDBTable->uTxOk[MAX_RATE];
|
||||||
|
|
||||||
|
if ((psNodeDBTable->uTxOk[MAX_RATE] < AUTORATE_TXOK_CNT) &&
|
||||||
|
(dwTxDiff < AUTORATE_TXFAIL_CNT) &&
|
||||||
|
(psNodeDBTable->uTimeCount < AUTORATE_TIMEOUT)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (psNodeDBTable->uTimeCount >= AUTORATE_TIMEOUT) {
|
||||||
|
psNodeDBTable->uTimeCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(ii=0;ii<MAX_RATE;ii++) {
|
||||||
|
if (psNodeDBTable->wSuppRate & (0x0001<<ii)) {
|
||||||
|
if (bAutoRate[ii] == TRUE) {
|
||||||
|
wIdxUpRate = (WORD) ii;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bAutoRate[ii] = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(ii=0;ii<=psNodeDBTable->wTxDataRate;ii++) {
|
||||||
|
if ( (psNodeDBTable->uTxOk[ii] != 0) ||
|
||||||
|
(psNodeDBTable->uTxFail[ii] != 0) ) {
|
||||||
|
dwThroughputTbl[ii] *= psNodeDBTable->uTxOk[ii];
|
||||||
|
if (ii < RATE_11M) {
|
||||||
|
psNodeDBTable->uTxFail[ii] *= 4;
|
||||||
|
}
|
||||||
|
dwThroughputTbl[ii] /= (psNodeDBTable->uTxOk[ii] + psNodeDBTable->uTxFail[ii]);
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Rate %d,Ok: %d, Fail:%d, Throughput:%d\n",
|
||||||
|
ii, (int)psNodeDBTable->uTxOk[ii], (int)psNodeDBTable->uTxFail[ii], (int)dwThroughputTbl[ii]);
|
||||||
|
}
|
||||||
|
dwThroughput = dwThroughputTbl[psNodeDBTable->wTxDataRate];
|
||||||
|
|
||||||
|
wIdxDownRate = psNodeDBTable->wTxDataRate;
|
||||||
|
for(ii = psNodeDBTable->wTxDataRate; ii > 0;) {
|
||||||
|
ii--;
|
||||||
|
if ( (dwThroughputTbl[ii] > dwThroughput) &&
|
||||||
|
(bAutoRate[ii]==TRUE) ) {
|
||||||
|
dwThroughput = dwThroughputTbl[ii];
|
||||||
|
wIdxDownRate = (WORD) ii;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
psNodeDBTable->wTxDataRate = wIdxDownRate;
|
||||||
|
if (psNodeDBTable->uTxOk[MAX_RATE]) {
|
||||||
|
if (psNodeDBTable->uTxOk[MAX_RATE] >
|
||||||
|
(psNodeDBTable->uTxFail[MAX_RATE] * 4) ) {
|
||||||
|
psNodeDBTable->wTxDataRate = wIdxUpRate;
|
||||||
|
}
|
||||||
|
}else { // adhoc, if uTxOk(total) =0 & uTxFail(total) = 0
|
||||||
|
if (psNodeDBTable->uTxFail[MAX_RATE] == 0)
|
||||||
|
psNodeDBTable->wTxDataRate = wIdxUpRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pDevice->byBBType == BB_TYPE_11A) {
|
||||||
|
if (psNodeDBTable->wTxDataRate <= RATE_11M)
|
||||||
|
psNodeDBTable->wTxDataRate = RATE_6M;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"uTxOk[MAX_RATE] %d, uTxFail[MAX_RATE]:%d\n",(int)psNodeDBTable->uTxOk[MAX_RATE], (int)psNodeDBTable->uTxFail[MAX_RATE]);
|
||||||
|
s_vResetCounter(psNodeDBTable);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Rate: %d, U:%d, D:%d\n", (int)psNodeDBTable->wTxDataRate, (int)wIdxUpRate, (int)wIdxDownRate);
|
||||||
|
return;
|
||||||
|
#else //mike fixed new: use differ-signal strength to control rate
|
||||||
|
WORD wIdxUpRate = 0;
|
||||||
|
BOOL bAutoRate[MAX_RATE] = {TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE};
|
||||||
|
UINT ii;
|
||||||
|
long ldBm;
|
||||||
|
|
||||||
|
if (pMgmt->eScanState != WMAC_NO_SCANNING) {
|
||||||
|
// Don't do Fallback when scanning Channel
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(ii=0;ii<MAX_RATE;ii++) {
|
||||||
|
if (psNodeDBTable->wSuppRate & (0x0001<<ii)) {
|
||||||
|
if (bAutoRate[ii] == TRUE) {
|
||||||
|
wIdxUpRate = (WORD) ii;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bAutoRate[ii] = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RFvRSSITodBm(pDevice, (BYTE)(pDevice->uCurrRSSI), &ldBm);
|
||||||
|
|
||||||
|
if (ldBm > -55) {
|
||||||
|
if ( psNodeDBTable->wSuppRate & (0x0001<<RATE_54M) ) //11a/g
|
||||||
|
{
|
||||||
|
psNodeDBTable->wTxDataRate = RATE_54M;
|
||||||
|
}
|
||||||
|
else{ //11b
|
||||||
|
psNodeDBTable->wTxDataRate = RATE_11M;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wIdxUpRate == RATE_54M ) { //11a/g
|
||||||
|
if (ldBm > -56 )
|
||||||
|
psNodeDBTable->wTxDataRate = RATE_54M;
|
||||||
|
else if (ldBm > -61 )
|
||||||
|
psNodeDBTable->wTxDataRate = RATE_48M;
|
||||||
|
else if (ldBm > -66 )
|
||||||
|
psNodeDBTable->wTxDataRate = RATE_36M;
|
||||||
|
else if (ldBm > -72 )
|
||||||
|
psNodeDBTable->wTxDataRate = RATE_24M;
|
||||||
|
else if (ldBm > -80 )
|
||||||
|
psNodeDBTable->wTxDataRate = RATE_5M;
|
||||||
|
else {
|
||||||
|
psNodeDBTable->wTxDataRate = RATE_1M;
|
||||||
|
//increasingVGA = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else { //11b
|
||||||
|
if (ldBm > -65 )
|
||||||
|
psNodeDBTable->wTxDataRate = RATE_11M;
|
||||||
|
else if (ldBm > -75 )
|
||||||
|
psNodeDBTable->wTxDataRate = RATE_5M;
|
||||||
|
else
|
||||||
|
psNodeDBTable->wTxDataRate = RATE_1M;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* This routine is used to assemble available Rate IE.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value: None
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
BYTE
|
||||||
|
RATEuSetIE (
|
||||||
|
IN PWLAN_IE_SUPP_RATES pSrcRates,
|
||||||
|
IN PWLAN_IE_SUPP_RATES pDstRates,
|
||||||
|
IN UINT uRateLen
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT ii, uu, uRateCnt = 0;
|
||||||
|
|
||||||
|
if ((pSrcRates == NULL) || (pDstRates == NULL))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (pSrcRates->len == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (ii = 0; ii < uRateLen; ii++) {
|
||||||
|
for (uu = 0; uu < pSrcRates->len; uu++) {
|
||||||
|
if ((pSrcRates->abyRates[uu] & 0x7F) == acbyIERate[ii]) {
|
||||||
|
pDstRates->abyRates[uRateCnt ++] = pSrcRates->abyRates[uu];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (BYTE)uRateCnt;
|
||||||
|
}
|
||||||
|
|
110
drivers/staging/vt6656/datarate.h
Normal file
110
drivers/staging/vt6656/datarate.h
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: datarate.h
|
||||||
|
*
|
||||||
|
* Purpose: Handles the auto fallback & data rates functions
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: July 16, 2002
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef __DATARATE_H__
|
||||||
|
#define __DATARATE_H__
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
#define FALLBACK_PKT_COLLECT_TR_H 50 // pkts
|
||||||
|
#define FALLBACK_PKT_COLLECT_TR_L 10 // pkts
|
||||||
|
#define FALLBACK_POLL_SECOND 5 // 5 sec
|
||||||
|
#define FALLBACK_RECOVER_SECOND 30 // 30 sec
|
||||||
|
#define FALLBACK_THRESHOLD 15 // percent
|
||||||
|
#define UPGRADE_THRESHOLD 5 // percent
|
||||||
|
#define UPGRADE_CNT_THRD 3 // times
|
||||||
|
#define RETRY_TIMES_THRD_H 2 // times
|
||||||
|
#define RETRY_TIMES_THRD_L 1 // times
|
||||||
|
|
||||||
|
|
||||||
|
#define RATE_1M 0
|
||||||
|
#define RATE_2M 1
|
||||||
|
#define RATE_5M 2
|
||||||
|
#define RATE_11M 3
|
||||||
|
#define RATE_6M 4
|
||||||
|
#define RATE_9M 5
|
||||||
|
#define RATE_12M 6
|
||||||
|
#define RATE_18M 7
|
||||||
|
#define RATE_24M 8
|
||||||
|
#define RATE_36M 9
|
||||||
|
#define RATE_48M 10
|
||||||
|
#define RATE_54M 11
|
||||||
|
#define RATE_AUTO 12
|
||||||
|
#define MAX_RATE 12
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
RATEvParseMaxRate(
|
||||||
|
IN PVOID pDeviceHandler,
|
||||||
|
IN PWLAN_IE_SUPP_RATES pItemRates,
|
||||||
|
IN PWLAN_IE_SUPP_RATES pItemExtRates,
|
||||||
|
IN BOOL bUpdateBasicRate,
|
||||||
|
OUT PWORD pwMaxBasicRate,
|
||||||
|
OUT PWORD pwMaxSuppRate,
|
||||||
|
OUT PWORD pwSuppRate,
|
||||||
|
OUT PBYTE pbyTopCCKRate,
|
||||||
|
OUT PBYTE pbyTopOFDMRate
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
RATEvTxRateFallBack(
|
||||||
|
IN PVOID pDeviceHandler,
|
||||||
|
IN PKnownNodeDB psNodeDBTable
|
||||||
|
);
|
||||||
|
|
||||||
|
BYTE
|
||||||
|
RATEuSetIE(
|
||||||
|
IN PWLAN_IE_SUPP_RATES pSrcRates,
|
||||||
|
IN PWLAN_IE_SUPP_RATES pDstRates,
|
||||||
|
IN UINT uRateLen
|
||||||
|
);
|
||||||
|
|
||||||
|
WORD
|
||||||
|
RATEwGetRateIdx(
|
||||||
|
IN BYTE byRate
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
BYTE
|
||||||
|
DATARATEbyGetRateIdx(
|
||||||
|
IN BYTE byRate
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
#endif //__DATARATE_H__
|
453
drivers/staging/vt6656/desc.h
Normal file
453
drivers/staging/vt6656/desc.h
Normal file
@ -0,0 +1,453 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: desc.h
|
||||||
|
*
|
||||||
|
* Purpose:The header file of descriptor
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 1996
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __DESC_H__
|
||||||
|
#define __DESC_H__
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/mm.h>
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TETHER_H__)
|
||||||
|
#include "tether.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
// max transmit or receive buffer size
|
||||||
|
#define CB_MAX_BUF_SIZE 2900U // max buffer size
|
||||||
|
// NOTE: must be multiple of 4
|
||||||
|
|
||||||
|
#define CB_MAX_TX_BUF_SIZE CB_MAX_BUF_SIZE // max Tx buffer size
|
||||||
|
#define CB_MAX_RX_BUF_SIZE_NORMAL CB_MAX_BUF_SIZE // max Rx buffer size when not use Multi-RD
|
||||||
|
|
||||||
|
#define CB_BEACON_BUF_SIZE 512U // default beacon buffer size
|
||||||
|
|
||||||
|
#define MAX_TOTAL_SIZE_WITH_ALL_HEADERS CB_MAX_BUF_SIZE
|
||||||
|
|
||||||
|
#define MAX_INTERRUPT_SIZE 32
|
||||||
|
|
||||||
|
|
||||||
|
#define RX_BLOCKS 64 // form 0x60 to 0xA0
|
||||||
|
#define TX_BLOCKS 32 // from 0xA0 to 0xC0
|
||||||
|
|
||||||
|
#define CB_MAX_RX_DESC 128 // max # of descriptor
|
||||||
|
#define CB_MIN_RX_DESC 16 // min # of rx descriptor
|
||||||
|
#define CB_MAX_TX_DESC 128 // max # of descriptor
|
||||||
|
#define CB_MIN_TX_DESC 16 // min # of tx descriptor
|
||||||
|
|
||||||
|
#define CB_RD_NUM 64 // default # of RD
|
||||||
|
#define CB_TD_NUM 64 // default # of TD
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the RSR register
|
||||||
|
//
|
||||||
|
#define RSR_ADDRBROAD 0x80 // 1000 0000
|
||||||
|
#define RSR_ADDRMULTI 0x40 // 0100 0000
|
||||||
|
#define RSR_ADDRUNI 0x00 // 0000 0000
|
||||||
|
#define RSR_IVLDTYP 0x20 // 0010 0000 , invalid packet type
|
||||||
|
#define RSR_IVLDLEN 0x10 // 0001 0000 , invalid len (> 2312 byte)
|
||||||
|
#define RSR_BSSIDOK 0x08 // 0000 1000
|
||||||
|
#define RSR_CRCOK 0x04 // 0000 0100
|
||||||
|
#define RSR_BCNSSIDOK 0x02 // 0000 0010
|
||||||
|
#define RSR_ADDROK 0x01 // 0000 0001
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the new RSR register
|
||||||
|
//
|
||||||
|
#define NEWRSR_DECRYPTOK 0x10 // 0001 0000
|
||||||
|
#define NEWRSR_CFPIND 0x08 // 0000 1000
|
||||||
|
#define NEWRSR_HWUTSF 0x04 // 0000 0100
|
||||||
|
#define NEWRSR_BCNHITAID 0x02 // 0000 0010
|
||||||
|
#define NEWRSR_BCNHITAID0 0x01 // 0000 0001
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the TSR register
|
||||||
|
//
|
||||||
|
#define TSR_RETRYTMO 0x08 // 0000 1000
|
||||||
|
#define TSR_TMO 0x04 // 0000 0100
|
||||||
|
#define TSR_ACKDATA 0x02 // 0000 0010
|
||||||
|
#define TSR_VALID 0x01 // 0000 0001
|
||||||
|
|
||||||
|
|
||||||
|
#define CB_PROTOCOL_RESERVED_SECTION 16
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// if retrys excess 15 times , tx will abort, and
|
||||||
|
// if tx fifo underflow, tx will fail
|
||||||
|
// we should try to resend it
|
||||||
|
#define CB_MAX_TX_ABORT_RETRY 3
|
||||||
|
|
||||||
|
|
||||||
|
#define FIFOCTL_AUTO_FB_1 0x1000 // 0001 0000 0000 0000
|
||||||
|
#define FIFOCTL_AUTO_FB_0 0x0800 // 0000 1000 0000 0000
|
||||||
|
#define FIFOCTL_GRPACK 0x0400 // 0000 0100 0000 0000
|
||||||
|
#define FIFOCTL_11GA 0x0300 // 0000 0011 0000 0000
|
||||||
|
#define FIFOCTL_11GB 0x0200 // 0000 0010 0000 0000
|
||||||
|
#define FIFOCTL_11B 0x0100 // 0000 0001 0000 0000
|
||||||
|
#define FIFOCTL_11A 0x0000 // 0000 0000 0000 0000
|
||||||
|
#define FIFOCTL_RTS 0x0080 // 0000 0000 1000 0000
|
||||||
|
#define FIFOCTL_ISDMA0 0x0040 // 0000 0000 0100 0000
|
||||||
|
#define FIFOCTL_GENINT 0x0020 // 0000 0000 0010 0000
|
||||||
|
#define FIFOCTL_TMOEN 0x0010 // 0000 0000 0001 0000
|
||||||
|
#define FIFOCTL_LRETRY 0x0008 // 0000 0000 0000 1000
|
||||||
|
#define FIFOCTL_CRCDIS 0x0004 // 0000 0000 0000 0100
|
||||||
|
#define FIFOCTL_NEEDACK 0x0002 // 0000 0000 0000 0010
|
||||||
|
#define FIFOCTL_LHEAD 0x0001 // 0000 0000 0000 0001
|
||||||
|
|
||||||
|
//WMAC definition Frag Control
|
||||||
|
#define FRAGCTL_AES 0x0300 // 0000 0011 0000 0000
|
||||||
|
#define FRAGCTL_TKIP 0x0200 // 0000 0010 0000 0000
|
||||||
|
#define FRAGCTL_LEGACY 0x0100 // 0000 0001 0000 0000
|
||||||
|
#define FRAGCTL_NONENCRYPT 0x0000 // 0000 0000 0000 0000
|
||||||
|
//#define FRAGCTL_AC3 0x000C // 0000 0000 0000 1100
|
||||||
|
//#define FRAGCTL_AC2 0x0008 // 0000 0000 0000 1000
|
||||||
|
//#define FRAGCTL_AC1 0x0004 // 0000 0000 0000 0100
|
||||||
|
//#define FRAGCTL_AC0 0x0000 // 0000 0000 0000 0000
|
||||||
|
#define FRAGCTL_ENDFRAG 0x0003 // 0000 0000 0000 0011
|
||||||
|
#define FRAGCTL_MIDFRAG 0x0002 // 0000 0000 0000 0010
|
||||||
|
#define FRAGCTL_STAFRAG 0x0001 // 0000 0000 0000 0001
|
||||||
|
#define FRAGCTL_NONFRAG 0x0000 // 0000 0000 0000 0000
|
||||||
|
|
||||||
|
|
||||||
|
//#define TYPE_AC0DMA 0
|
||||||
|
//#define TYPE_TXDMA0 1
|
||||||
|
#define TYPE_TXDMA0 0
|
||||||
|
#define TYPE_AC0DMA 1
|
||||||
|
#define TYPE_ATIMDMA 2
|
||||||
|
#define TYPE_SYNCDMA 3
|
||||||
|
#define TYPE_MAXTD 2
|
||||||
|
|
||||||
|
#define TYPE_BEACONDMA 4
|
||||||
|
|
||||||
|
#define TYPE_RXDMA0 0
|
||||||
|
#define TYPE_RXDMA1 1
|
||||||
|
#define TYPE_MAXRD 2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// TD_INFO flags control bit
|
||||||
|
#define TD_FLAGS_NETIF_SKB 0x01 // check if need release skb
|
||||||
|
#define TD_FLAGS_PRIV_SKB 0x02 // check if called from private skb(hostap)
|
||||||
|
#define TD_FLAGS_PS_RETRY 0x04 // check if PS STA frame re-transmit
|
||||||
|
//#define TD_FLAGS_NETIF_SKB 0x04
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// RsvTime buffer header
|
||||||
|
//
|
||||||
|
typedef struct tagSRrvTime_gRTS {
|
||||||
|
WORD wRTSTxRrvTime_ba;
|
||||||
|
WORD wRTSTxRrvTime_aa;
|
||||||
|
WORD wRTSTxRrvTime_bb;
|
||||||
|
WORD wReserved;
|
||||||
|
WORD wTxRrvTime_b;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SRrvTime_gRTS, DEF* PSRrvTime_gRTS;
|
||||||
|
typedef const SRrvTime_gRTS DEF* PCSRrvTime_gRTS;
|
||||||
|
|
||||||
|
typedef struct tagSRrvTime_gCTS {
|
||||||
|
WORD wCTSTxRrvTime_ba;
|
||||||
|
WORD wReserved;
|
||||||
|
WORD wTxRrvTime_b;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SRrvTime_gCTS, DEF* PSRrvTime_gCTS;
|
||||||
|
typedef const SRrvTime_gCTS DEF* PCSRrvTime_gCTS;
|
||||||
|
|
||||||
|
typedef struct tagSRrvTime_ab {
|
||||||
|
WORD wRTSTxRrvTime;
|
||||||
|
WORD wTxRrvTime;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SRrvTime_ab, DEF* PSRrvTime_ab;
|
||||||
|
typedef const SRrvTime_ab DEF* PCSRrvTime_ab;
|
||||||
|
|
||||||
|
typedef struct tagSRrvTime_atim {
|
||||||
|
WORD wCTSTxRrvTime_ba;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SRrvTime_atim, DEF* PSRrvTime_atim;
|
||||||
|
typedef const SRrvTime_atim DEF* PCSRrvTime_atim;
|
||||||
|
|
||||||
|
//
|
||||||
|
// RTS buffer header
|
||||||
|
//
|
||||||
|
typedef struct tagSRTSData {
|
||||||
|
WORD wFrameControl;
|
||||||
|
WORD wDurationID;
|
||||||
|
BYTE abyRA[U_ETHER_ADDR_LEN];
|
||||||
|
BYTE abyTA[U_ETHER_ADDR_LEN];
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SRTSData, DEF* PSRTSData;
|
||||||
|
typedef const SRTSData DEF* PCSRTSData;
|
||||||
|
|
||||||
|
typedef struct tagSRTS_g {
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_ba;
|
||||||
|
WORD wDuration_aa;
|
||||||
|
WORD wDuration_bb;
|
||||||
|
WORD wReserved;
|
||||||
|
SRTSData Data;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SRTS_g, DEF* PSRTS_g;
|
||||||
|
typedef const SRTS_g DEF* PCSRTS_g;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSRTS_g_FB {
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_ba;
|
||||||
|
WORD wDuration_aa;
|
||||||
|
WORD wDuration_bb;
|
||||||
|
WORD wReserved;
|
||||||
|
WORD wRTSDuration_ba_f0;
|
||||||
|
WORD wRTSDuration_aa_f0;
|
||||||
|
WORD wRTSDuration_ba_f1;
|
||||||
|
WORD wRTSDuration_aa_f1;
|
||||||
|
SRTSData Data;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SRTS_g_FB, DEF* PSRTS_g_FB;
|
||||||
|
typedef const SRTS_g_FB DEF* PCSRTS_g_FB;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSRTS_ab {
|
||||||
|
BYTE bySignalField;
|
||||||
|
BYTE byServiceField;
|
||||||
|
WORD wTransmitLength;
|
||||||
|
WORD wDuration;
|
||||||
|
WORD wReserved;
|
||||||
|
SRTSData Data;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SRTS_ab, DEF* PSRTS_ab;
|
||||||
|
typedef const SRTS_ab DEF* PCSRTS_ab;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSRTS_a_FB {
|
||||||
|
BYTE bySignalField;
|
||||||
|
BYTE byServiceField;
|
||||||
|
WORD wTransmitLength;
|
||||||
|
WORD wDuration;
|
||||||
|
WORD wReserved;
|
||||||
|
WORD wRTSDuration_f0;
|
||||||
|
WORD wRTSDuration_f1;
|
||||||
|
SRTSData Data;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SRTS_a_FB, DEF* PSRTS_a_FB;
|
||||||
|
typedef const SRTS_a_FB DEF* PCSRTS_a_FB;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// CTS buffer header
|
||||||
|
//
|
||||||
|
typedef struct tagSCTSData {
|
||||||
|
WORD wFrameControl;
|
||||||
|
WORD wDurationID;
|
||||||
|
BYTE abyRA[U_ETHER_ADDR_LEN];
|
||||||
|
WORD wReserved;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SCTSData, DEF* PSCTSData;
|
||||||
|
|
||||||
|
typedef struct tagSCTS {
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
WORD wDuration_ba;
|
||||||
|
WORD wReserved;
|
||||||
|
SCTSData Data;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SCTS, DEF* PSCTS;
|
||||||
|
typedef const SCTS DEF* PCSCTS;
|
||||||
|
|
||||||
|
typedef struct tagSCTS_FB {
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
WORD wDuration_ba;
|
||||||
|
WORD wReserved;
|
||||||
|
WORD wCTSDuration_ba_f0;
|
||||||
|
WORD wCTSDuration_ba_f1;
|
||||||
|
SCTSData Data;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SCTS_FB, DEF* PSCTS_FB;
|
||||||
|
typedef const SCTS_FB DEF* PCSCTS_FB;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tx FIFO header
|
||||||
|
//
|
||||||
|
typedef struct tagSTxBufHead {
|
||||||
|
DWORD adwTxKey[4];
|
||||||
|
WORD wFIFOCtl;
|
||||||
|
WORD wTimeStamp;
|
||||||
|
WORD wFragCtl;
|
||||||
|
WORD wReserved;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
STxBufHead, DEF* PSTxBufHead;
|
||||||
|
typedef const STxBufHead DEF* PCSTxBufHead;
|
||||||
|
|
||||||
|
typedef struct tagSTxShortBufHead {
|
||||||
|
WORD wFIFOCtl;
|
||||||
|
WORD wTimeStamp;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
STxShortBufHead, DEF* PSTxShortBufHead;
|
||||||
|
typedef const STxShortBufHead DEF* PCSTxShortBufHead;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tx data header
|
||||||
|
//
|
||||||
|
typedef struct tagSTxDataHead_g {
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_b;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wTimeStampOff_b;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
STxDataHead_g, DEF* PSTxDataHead_g;
|
||||||
|
typedef const STxDataHead_g DEF* PCSTxDataHead_g;
|
||||||
|
|
||||||
|
typedef struct tagSTxDataHead_g_FB {
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_b;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wDuration_a_f0;
|
||||||
|
WORD wDuration_a_f1;
|
||||||
|
WORD wTimeStampOff_b;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
STxDataHead_g_FB, DEF* PSTxDataHead_g_FB;
|
||||||
|
typedef const STxDataHead_g_FB DEF* PCSTxDataHead_g_FB;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTxDataHead_ab {
|
||||||
|
BYTE bySignalField;
|
||||||
|
BYTE byServiceField;
|
||||||
|
WORD wTransmitLength;
|
||||||
|
WORD wDuration;
|
||||||
|
WORD wTimeStampOff;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
STxDataHead_ab, DEF* PSTxDataHead_ab;
|
||||||
|
typedef const STxDataHead_ab DEF* PCSTxDataHead_ab;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTxDataHead_a_FB {
|
||||||
|
BYTE bySignalField;
|
||||||
|
BYTE byServiceField;
|
||||||
|
WORD wTransmitLength;
|
||||||
|
WORD wDuration;
|
||||||
|
WORD wTimeStampOff;
|
||||||
|
WORD wDuration_f0;
|
||||||
|
WORD wDuration_f1;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
STxDataHead_a_FB, DEF* PSTxDataHead_a_FB;
|
||||||
|
typedef const STxDataHead_a_FB DEF* PCSTxDataHead_a_FB;
|
||||||
|
|
||||||
|
//
|
||||||
|
// MICHDR data header
|
||||||
|
//
|
||||||
|
typedef struct tagSMICHDRHead {
|
||||||
|
DWORD adwHDR0[4];
|
||||||
|
DWORD adwHDR1[4];
|
||||||
|
DWORD adwHDR2[4];
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SMICHDRHead, DEF* PSMICHDRHead;
|
||||||
|
typedef const SMICHDRHead DEF* PCSMICHDRHead;
|
||||||
|
|
||||||
|
typedef struct tagSBEACONCtl {
|
||||||
|
DWORD BufReady : 1;
|
||||||
|
DWORD TSF : 15;
|
||||||
|
DWORD BufLen : 11;
|
||||||
|
DWORD Reserved : 5;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SBEACONCtl;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSSecretKey {
|
||||||
|
DWORD dwLowDword;
|
||||||
|
BYTE byHighByte;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SSecretKey;
|
||||||
|
|
||||||
|
typedef struct tagSKeyEntry {
|
||||||
|
BYTE abyAddrHi[2];
|
||||||
|
WORD wKCTL;
|
||||||
|
BYTE abyAddrLo[4];
|
||||||
|
DWORD dwKey0[4];
|
||||||
|
DWORD dwKey1[4];
|
||||||
|
DWORD dwKey2[4];
|
||||||
|
DWORD dwKey3[4];
|
||||||
|
DWORD dwKey4[4];
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SKeyEntry;
|
||||||
|
/*--------------------- Export Macros ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __DESC_H__
|
||||||
|
|
988
drivers/staging/vt6656/device.h
Normal file
988
drivers/staging/vt6656/device.h
Normal file
@ -0,0 +1,988 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: device.h
|
||||||
|
*
|
||||||
|
* Purpose: MAC Data structure
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: Mar 17, 1997
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __DEVICE_H__
|
||||||
|
#define __DEVICE_H__
|
||||||
|
|
||||||
|
#ifdef MODULE
|
||||||
|
#ifdef MODVERSIONS
|
||||||
|
#include <linux/modversions.h>
|
||||||
|
#endif /* MODVERSIONS */
|
||||||
|
#include <linux/module.h>
|
||||||
|
#endif /* MODULE */
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/mm.h>
|
||||||
|
#include <linux/errno.h>
|
||||||
|
#include <linux/ioport.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/netdevice.h>
|
||||||
|
#include <linux/etherdevice.h>
|
||||||
|
#include <linux/skbuff.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/timer.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/version.h>
|
||||||
|
#include <linux/string.h>
|
||||||
|
#include <linux/wait.h>
|
||||||
|
#include <linux/if_arp.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <linux/if.h>
|
||||||
|
#include <linux/rtnetlink.h>//James
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
|
||||||
|
#include <linux/config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <linux/proc_fs.h>
|
||||||
|
#include <linux/inetdevice.h>
|
||||||
|
#include <linux/reboot.h>
|
||||||
|
#include <linux/usb.h>
|
||||||
|
#include <linux/signal.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/uaccess.h>
|
||||||
|
#ifdef SIOCETHTOOL
|
||||||
|
#define DEVICE_ETHTOOL_IOCTL_SUPPORT
|
||||||
|
#include <linux/ethtool.h>
|
||||||
|
#else
|
||||||
|
#undef DEVICE_ETHTOOL_IOCTL_SUPPORT
|
||||||
|
#endif
|
||||||
|
/* Include Wireless Extension definition and check version - Jean II */
|
||||||
|
#include <linux/wireless.h>
|
||||||
|
#if WIRELESS_EXT > 12
|
||||||
|
#include <net/iw_handler.h> // New driver API
|
||||||
|
#endif /* WIRELESS_EXT > 12 */
|
||||||
|
|
||||||
|
//2008-0409-07, <Add> by Einsn Liu
|
||||||
|
#if WIRELESS_EXT > 17
|
||||||
|
#ifndef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
|
||||||
|
#define WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//2007-0920-01<Add>by MikeLiu
|
||||||
|
#ifndef SndEvt_ToAPI
|
||||||
|
#define SndEvt_ToAPI
|
||||||
|
//please copy below macro to driver_event.c for API
|
||||||
|
#define RT_INSMOD_EVENT_FLAG 0x0101
|
||||||
|
#define RT_UPDEV_EVENT_FLAG 0x0102
|
||||||
|
#define RT_DISCONNECTED_EVENT_FLAG 0x0103
|
||||||
|
#define RT_WPACONNECTED_EVENT_FLAG 0x0104
|
||||||
|
#define RT_DOWNDEV_EVENT_FLAG 0x0105
|
||||||
|
#define RT_RMMOD_EVENT_FLAG 0x0106
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// device specific
|
||||||
|
//
|
||||||
|
|
||||||
|
#if !defined(_KCOMPAT_H)
|
||||||
|
#include "kcompat.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__DEVICE_CONFIG_H)
|
||||||
|
#include "device_cfg.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211HDR_H__)
|
||||||
|
#include "80211hdr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TETHER_H__)
|
||||||
|
#include "tether.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WMGR_H__)
|
||||||
|
#include "wmgr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WCMD_H__)
|
||||||
|
#include "wcmd.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MIB_H__)
|
||||||
|
#include "mib.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__SROM_H__)
|
||||||
|
#include "srom.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__RC4_H__)
|
||||||
|
#include "rc4.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TPCI_H__)
|
||||||
|
#include "tpci.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DESC_H__)
|
||||||
|
#include "desc.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__KEY_H__)
|
||||||
|
#include "key.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CARD_H__)
|
||||||
|
#include "card.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
#define VNT_USB_VENDOR_ID 0x160A
|
||||||
|
#define VNT_USB_PRODUCT_ID 0x3184
|
||||||
|
|
||||||
|
#define MAC_MAX_CONTEXT_REG (256+128)
|
||||||
|
|
||||||
|
#define MAX_MULTICAST_ADDRESS_NUM 32
|
||||||
|
#define MULTICAST_ADDRESS_LIST_SIZE (MAX_MULTICAST_ADDRESS_NUM * U_ETHER_ADDR_LEN)
|
||||||
|
|
||||||
|
|
||||||
|
//#define OP_MODE_INFRASTRUCTURE 0
|
||||||
|
//#define OP_MODE_ADHOC 1
|
||||||
|
//#define OP_MODE_AP 2
|
||||||
|
|
||||||
|
#define DUPLICATE_RX_CACHE_LENGTH 5
|
||||||
|
|
||||||
|
#define NUM_KEY_ENTRY 11
|
||||||
|
|
||||||
|
#define TX_WEP_NONE 0
|
||||||
|
#define TX_WEP_OTF 1
|
||||||
|
#define TX_WEP_SW 2
|
||||||
|
#define TX_WEP_SWOTP 3
|
||||||
|
#define TX_WEP_OTPSW 4
|
||||||
|
#define TX_WEP_SW232 5
|
||||||
|
|
||||||
|
#define KEYSEL_WEP40 0
|
||||||
|
#define KEYSEL_WEP104 1
|
||||||
|
#define KEYSEL_TKIP 2
|
||||||
|
#define KEYSEL_CCMP 3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define AUTO_FB_NONE 0
|
||||||
|
#define AUTO_FB_0 1
|
||||||
|
#define AUTO_FB_1 2
|
||||||
|
|
||||||
|
#define FB_RATE0 0
|
||||||
|
#define FB_RATE1 1
|
||||||
|
|
||||||
|
// Antenna Mode
|
||||||
|
#define ANT_A 0
|
||||||
|
#define ANT_B 1
|
||||||
|
#define ANT_DIVERSITY 2
|
||||||
|
#define ANT_RXD_TXA 3
|
||||||
|
#define ANT_RXD_TXB 4
|
||||||
|
#define ANT_UNKNOWN 0xFF
|
||||||
|
#define ANT_TXA 0
|
||||||
|
#define ANT_TXB 1
|
||||||
|
#define ANT_RXA 2
|
||||||
|
#define ANT_RXB 3
|
||||||
|
|
||||||
|
|
||||||
|
#define MAXCHECKHANGCNT 4
|
||||||
|
|
||||||
|
//Packet type
|
||||||
|
#define TX_PKT_UNI 0x00
|
||||||
|
#define TX_PKT_MULTI 0x01
|
||||||
|
#define TX_PKT_BROAD 0x02
|
||||||
|
|
||||||
|
#define BB_VGA_LEVEL 4
|
||||||
|
#define BB_VGA_CHANGE_THRESHOLD 3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef RUN_AT
|
||||||
|
#define RUN_AT(x) (jiffies+(x))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// DMA related
|
||||||
|
#define RESERV_AC0DMA 4
|
||||||
|
|
||||||
|
#define PRIVATE_Message 0
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
#define DBG_PRT(l, p, args...) {if (l<=msglevel) printk( p ,##args);}
|
||||||
|
#define PRINT_K(p, args...) {if (PRIVATE_Message) printk( p ,##args);}
|
||||||
|
|
||||||
|
typedef enum __device_msg_level {
|
||||||
|
MSG_LEVEL_ERR=0, //Errors that will cause abnormal operation.
|
||||||
|
MSG_LEVEL_NOTICE=1, //Some errors need users to be notified.
|
||||||
|
MSG_LEVEL_INFO=2, //Normal message.
|
||||||
|
MSG_LEVEL_VERBOSE=3, //Will report all trival errors.
|
||||||
|
MSG_LEVEL_DEBUG=4 //Only for debug purpose.
|
||||||
|
} DEVICE_MSG_LEVEL, *PDEVICE_MSG_LEVEL;
|
||||||
|
|
||||||
|
typedef enum __device_init_type {
|
||||||
|
DEVICE_INIT_COLD=0, // cold init
|
||||||
|
DEVICE_INIT_RESET, // reset init or Dx to D0 power remain init
|
||||||
|
DEVICE_INIT_DXPL // Dx to D0 power lost init
|
||||||
|
} DEVICE_INIT_TYPE, *PDEVICE_INIT_TYPE;
|
||||||
|
|
||||||
|
|
||||||
|
//USB
|
||||||
|
|
||||||
|
//
|
||||||
|
// Enum of context types for SendPacket
|
||||||
|
//
|
||||||
|
typedef enum _CONTEXT_TYPE {
|
||||||
|
CONTEXT_DATA_PACKET = 1,
|
||||||
|
CONTEXT_MGMT_PACKET
|
||||||
|
} CONTEXT_TYPE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// RCB (Receive Control Block)
|
||||||
|
typedef struct _RCB
|
||||||
|
{
|
||||||
|
PVOID Next;
|
||||||
|
LONG Ref;
|
||||||
|
PVOID pDevice;
|
||||||
|
struct urb *pUrb;
|
||||||
|
SRxMgmtPacket sMngPacket;
|
||||||
|
struct sk_buff* skb;
|
||||||
|
BOOL bBoolInUse;
|
||||||
|
|
||||||
|
} RCB, *PRCB;
|
||||||
|
|
||||||
|
|
||||||
|
// used to track bulk out irps
|
||||||
|
typedef struct _USB_SEND_CONTEXT {
|
||||||
|
PVOID pDevice;
|
||||||
|
struct sk_buff *pPacket;
|
||||||
|
struct urb *pUrb;
|
||||||
|
UINT uBufLen;
|
||||||
|
CONTEXT_TYPE Type;
|
||||||
|
SEthernetHeader sEthHeader;
|
||||||
|
PVOID Next;
|
||||||
|
BOOL bBoolInUse;
|
||||||
|
UCHAR Data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS];
|
||||||
|
} USB_SEND_CONTEXT, *PUSB_SEND_CONTEXT;
|
||||||
|
|
||||||
|
|
||||||
|
//structure got from configuration file as user desired default setting.
|
||||||
|
typedef struct _DEFAULT_CONFIG{
|
||||||
|
INT ZoneType;
|
||||||
|
INT eConfigMode;
|
||||||
|
INT eAuthenMode; //open/wep/wpa
|
||||||
|
INT bShareKeyAlgorithm; //open-open/open-sharekey/wep-sharekey
|
||||||
|
INT keyidx; //wepkey index
|
||||||
|
INT eEncryptionStatus;
|
||||||
|
|
||||||
|
}DEFAULT_CONFIG,*PDEFAULT_CONFIG;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Structure to keep track of usb interrupt packets
|
||||||
|
//
|
||||||
|
typedef struct {
|
||||||
|
UINT uDataLen;
|
||||||
|
PBYTE pDataBuf;
|
||||||
|
// struct urb *pUrb;
|
||||||
|
BOOL bInUse;
|
||||||
|
} INT_BUFFER, *PINT_BUFFER;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//0:11A 1:11B 2:11G
|
||||||
|
typedef enum _VIA_BB_TYPE
|
||||||
|
{
|
||||||
|
BB_TYPE_11A=0,
|
||||||
|
BB_TYPE_11B,
|
||||||
|
BB_TYPE_11G
|
||||||
|
} VIA_BB_TYPE, *PVIA_BB_TYPE;
|
||||||
|
|
||||||
|
//0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate)
|
||||||
|
typedef enum _VIA_PKT_TYPE
|
||||||
|
{
|
||||||
|
PK_TYPE_11A=0,
|
||||||
|
PK_TYPE_11B,
|
||||||
|
PK_TYPE_11GB,
|
||||||
|
PK_TYPE_11GA
|
||||||
|
} VIA_PKT_TYPE, *PVIA_PKT_TYPE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//++ NDIS related
|
||||||
|
|
||||||
|
#define NDIS_STATUS int
|
||||||
|
#define NTSTATUS int
|
||||||
|
|
||||||
|
typedef enum __DEVICE_NDIS_STATUS {
|
||||||
|
STATUS_SUCCESS=0,
|
||||||
|
STATUS_FAILURE,
|
||||||
|
STATUS_RESOURCES,
|
||||||
|
STATUS_PENDING,
|
||||||
|
} DEVICE_NDIS_STATUS, *PDEVICE_NDIS_STATUS;
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX_BSSIDINFO_4_PMKID 16
|
||||||
|
#define MAX_PMKIDLIST 5
|
||||||
|
//Flags for PMKID Candidate list structure
|
||||||
|
#define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01
|
||||||
|
|
||||||
|
// PMKID Structures
|
||||||
|
typedef UCHAR NDIS_802_11_PMKID_VALUE[16];
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum _NDIS_802_11_WEP_STATUS
|
||||||
|
{
|
||||||
|
Ndis802_11WEPEnabled,
|
||||||
|
Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
|
||||||
|
Ndis802_11WEPDisabled,
|
||||||
|
Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
|
||||||
|
Ndis802_11WEPKeyAbsent,
|
||||||
|
Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
|
||||||
|
Ndis802_11WEPNotSupported,
|
||||||
|
Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
|
||||||
|
Ndis802_11Encryption2Enabled,
|
||||||
|
Ndis802_11Encryption2KeyAbsent,
|
||||||
|
Ndis802_11Encryption3Enabled,
|
||||||
|
Ndis802_11Encryption3KeyAbsent
|
||||||
|
} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS,
|
||||||
|
NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum _NDIS_802_11_STATUS_TYPE
|
||||||
|
{
|
||||||
|
Ndis802_11StatusType_Authentication,
|
||||||
|
Ndis802_11StatusType_MediaStreamMode,
|
||||||
|
Ndis802_11StatusType_PMKID_CandidateList,
|
||||||
|
Ndis802_11StatusTypeMax // not a real type, defined as an upper bound
|
||||||
|
} NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE;
|
||||||
|
|
||||||
|
//Added new types for PMKID Candidate lists.
|
||||||
|
typedef struct _PMKID_CANDIDATE {
|
||||||
|
NDIS_802_11_MAC_ADDRESS BSSID;
|
||||||
|
ULONG Flags;
|
||||||
|
} PMKID_CANDIDATE, *PPMKID_CANDIDATE;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _BSSID_INFO
|
||||||
|
{
|
||||||
|
NDIS_802_11_MAC_ADDRESS BSSID;
|
||||||
|
NDIS_802_11_PMKID_VALUE PMKID;
|
||||||
|
} BSSID_INFO, *PBSSID_INFO;
|
||||||
|
|
||||||
|
typedef struct tagSPMKID {
|
||||||
|
ULONG Length;
|
||||||
|
ULONG BSSIDInfoCount;
|
||||||
|
BSSID_INFO BSSIDInfo[MAX_BSSIDINFO_4_PMKID];
|
||||||
|
} SPMKID, *PSPMKID;
|
||||||
|
|
||||||
|
typedef struct tagSPMKIDCandidateEvent {
|
||||||
|
NDIS_802_11_STATUS_TYPE StatusType;
|
||||||
|
ULONG Version; // Version of the structure
|
||||||
|
ULONG NumCandidates; // No. of pmkid candidates
|
||||||
|
PMKID_CANDIDATE CandidateList[MAX_PMKIDLIST];
|
||||||
|
} SPMKIDCandidateEvent, DEF* PSPMKIDCandidateEvent;
|
||||||
|
|
||||||
|
//--
|
||||||
|
|
||||||
|
//++ 802.11h related
|
||||||
|
#define MAX_QUIET_COUNT 8
|
||||||
|
|
||||||
|
typedef struct tagSQuietControl {
|
||||||
|
BOOL bEnable;
|
||||||
|
DWORD dwStartTime;
|
||||||
|
BYTE byPeriod;
|
||||||
|
WORD wDuration;
|
||||||
|
} SQuietControl, DEF* PSQuietControl;
|
||||||
|
|
||||||
|
//--
|
||||||
|
|
||||||
|
|
||||||
|
// The receive duplicate detection cache entry
|
||||||
|
typedef struct tagSCacheEntry{
|
||||||
|
WORD wFmSequence;
|
||||||
|
BYTE abyAddr2[U_ETHER_ADDR_LEN];
|
||||||
|
WORD wFrameCtl;
|
||||||
|
} SCacheEntry, *PSCacheEntry;
|
||||||
|
|
||||||
|
typedef struct tagSCache{
|
||||||
|
/* The receive cache is updated circularly. The next entry to be written is
|
||||||
|
* indexed by the "InPtr".
|
||||||
|
*/
|
||||||
|
UINT uInPtr; // Place to use next
|
||||||
|
SCacheEntry asCacheEntry[DUPLICATE_RX_CACHE_LENGTH];
|
||||||
|
} SCache, *PSCache;
|
||||||
|
|
||||||
|
#define CB_MAX_RX_FRAG 64
|
||||||
|
// DeFragment Control Block, used for collecting fragments prior to reassembly
|
||||||
|
typedef struct tagSDeFragControlBlock
|
||||||
|
{
|
||||||
|
WORD wSequence;
|
||||||
|
WORD wFragNum;
|
||||||
|
BYTE abyAddr2[U_ETHER_ADDR_LEN];
|
||||||
|
UINT uLifetime;
|
||||||
|
struct sk_buff* skb;
|
||||||
|
PBYTE pbyRxBuffer;
|
||||||
|
UINT cbFrameLength;
|
||||||
|
BOOL bInUse;
|
||||||
|
} SDeFragControlBlock, DEF* PSDeFragControlBlock;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//flags for options
|
||||||
|
#define DEVICE_FLAGS_UNPLUG 0x00000001UL
|
||||||
|
#define DEVICE_FLAGS_PREAMBLE_TYPE 0x00000002UL
|
||||||
|
#define DEVICE_FLAGS_OP_MODE 0x00000004UL
|
||||||
|
#define DEVICE_FLAGS_PS_MODE 0x00000008UL
|
||||||
|
#define DEVICE_FLAGS_80211h_MODE 0x00000010UL
|
||||||
|
|
||||||
|
//flags for driver status
|
||||||
|
#define DEVICE_FLAGS_OPENED 0x00010000UL
|
||||||
|
#define DEVICE_FLAGS_WOL_ENABLED 0x00080000UL
|
||||||
|
//flags for capbilities
|
||||||
|
#define DEVICE_FLAGS_TX_ALIGN 0x01000000UL
|
||||||
|
#define DEVICE_FLAGS_HAVE_CAM 0x02000000UL
|
||||||
|
#define DEVICE_FLAGS_FLOW_CTRL 0x04000000UL
|
||||||
|
|
||||||
|
//flags for MII status
|
||||||
|
#define DEVICE_LINK_FAIL 0x00000001UL
|
||||||
|
#define DEVICE_SPEED_10 0x00000002UL
|
||||||
|
#define DEVICE_SPEED_100 0x00000004UL
|
||||||
|
#define DEVICE_SPEED_1000 0x00000008UL
|
||||||
|
#define DEVICE_DUPLEX_FULL 0x00000010UL
|
||||||
|
#define DEVICE_AUTONEG_ENABLE 0x00000020UL
|
||||||
|
#define DEVICE_FORCED_BY_EEPROM 0x00000040UL
|
||||||
|
//for device_set_media_duplex
|
||||||
|
#define DEVICE_LINK_CHANGE 0x00000001UL
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct __device_opt {
|
||||||
|
int nRxDescs0; //Number of RX descriptors0
|
||||||
|
int nTxDescs0; //Number of TX descriptors 0, 1, 2, 3
|
||||||
|
int rts_thresh; //rts threshold
|
||||||
|
int frag_thresh;
|
||||||
|
int OpMode;
|
||||||
|
int data_rate;
|
||||||
|
int channel_num;
|
||||||
|
int short_retry;
|
||||||
|
int long_retry;
|
||||||
|
int bbp_type;
|
||||||
|
U32 flags;
|
||||||
|
} OPTIONS, *POPTIONS;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct __device_info {
|
||||||
|
|
||||||
|
// netdev
|
||||||
|
struct usb_device* usb;
|
||||||
|
struct net_device* dev;
|
||||||
|
struct net_device_stats stats;
|
||||||
|
|
||||||
|
OPTIONS sOpts;
|
||||||
|
|
||||||
|
struct tasklet_struct CmdWorkItem;
|
||||||
|
struct tasklet_struct EventWorkItem;
|
||||||
|
struct tasklet_struct ReadWorkItem;
|
||||||
|
struct tasklet_struct RxMngWorkItem;
|
||||||
|
|
||||||
|
U32 rx_buf_sz;
|
||||||
|
int multicast_limit;
|
||||||
|
BYTE byRxMode;
|
||||||
|
|
||||||
|
spinlock_t lock;
|
||||||
|
|
||||||
|
U32 rx_bytes;
|
||||||
|
|
||||||
|
BYTE byRevId;
|
||||||
|
|
||||||
|
U32 flags;
|
||||||
|
ULONG Flags;
|
||||||
|
|
||||||
|
SCache sDupRxCache;
|
||||||
|
|
||||||
|
SDeFragControlBlock sRxDFCB[CB_MAX_RX_FRAG];
|
||||||
|
UINT cbDFCB;
|
||||||
|
UINT cbFreeDFCB;
|
||||||
|
UINT uCurrentDFCBIdx;
|
||||||
|
|
||||||
|
// +++USB
|
||||||
|
|
||||||
|
struct urb *pControlURB;
|
||||||
|
struct urb *pInterruptURB;
|
||||||
|
struct usb_ctrlrequest sUsbCtlRequest;
|
||||||
|
|
||||||
|
UINT int_interval;
|
||||||
|
//
|
||||||
|
// Variables to track resources for the BULK In Pipe
|
||||||
|
//
|
||||||
|
PRCB pRCBMem;
|
||||||
|
PRCB apRCB[CB_MAX_RX_DESC];
|
||||||
|
UINT cbRD;
|
||||||
|
PRCB FirstRecvFreeList;
|
||||||
|
PRCB LastRecvFreeList;
|
||||||
|
UINT NumRecvFreeList;
|
||||||
|
PRCB FirstRecvMngList;
|
||||||
|
PRCB LastRecvMngList;
|
||||||
|
UINT NumRecvMngList;
|
||||||
|
BOOL bIsRxWorkItemQueued;
|
||||||
|
BOOL bIsRxMngWorkItemQueued;
|
||||||
|
ULONG ulRcvRefCount; // number of packets that have not been returned back
|
||||||
|
|
||||||
|
//
|
||||||
|
// Variables to track resources for the BULK Out Pipe
|
||||||
|
//
|
||||||
|
|
||||||
|
PUSB_SEND_CONTEXT apTD[CB_MAX_TX_DESC];
|
||||||
|
UINT cbTD;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Variables to track resources for the Interript In Pipe
|
||||||
|
//
|
||||||
|
INT_BUFFER intBuf;
|
||||||
|
BOOL fKillEventPollingThread;
|
||||||
|
BOOL bEventAvailable;
|
||||||
|
|
||||||
|
|
||||||
|
//default config from file by user setting
|
||||||
|
DEFAULT_CONFIG config_file;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Statistic for USB
|
||||||
|
// protect with spinlock
|
||||||
|
ULONG ulBulkInPosted;
|
||||||
|
ULONG ulBulkInError;
|
||||||
|
ULONG ulBulkInContCRCError;
|
||||||
|
ULONG ulBulkInBytesRead;
|
||||||
|
|
||||||
|
ULONG ulBulkOutPosted;
|
||||||
|
ULONG ulBulkOutError;
|
||||||
|
ULONG ulBulkOutContCRCError;
|
||||||
|
ULONG ulBulkOutBytesWrite;
|
||||||
|
|
||||||
|
ULONG ulIntInPosted;
|
||||||
|
ULONG ulIntInError;
|
||||||
|
ULONG ulIntInContCRCError;
|
||||||
|
ULONG ulIntInBytesRead;
|
||||||
|
|
||||||
|
|
||||||
|
// Version control
|
||||||
|
WORD wFirmwareVersion;
|
||||||
|
BYTE byLocalID;
|
||||||
|
BYTE byRFType;
|
||||||
|
BYTE byBBRxConf;
|
||||||
|
|
||||||
|
|
||||||
|
BYTE byZoneType;
|
||||||
|
BOOL bZoneRegExist;
|
||||||
|
|
||||||
|
BYTE byOriginalZonetype;
|
||||||
|
|
||||||
|
BOOL bLinkPass; // link status: OK or fail
|
||||||
|
BYTE abyCurrentNetAddr[U_ETHER_ADDR_LEN];
|
||||||
|
BYTE abyPermanentNetAddr[U_ETHER_ADDR_LEN];
|
||||||
|
// SW network address
|
||||||
|
// BYTE abySoftwareNetAddr[U_ETHER_ADDR_LEN];
|
||||||
|
BOOL bExistSWNetAddr;
|
||||||
|
|
||||||
|
// Adapter statistics
|
||||||
|
SStatCounter scStatistic;
|
||||||
|
// 802.11 counter
|
||||||
|
SDot11Counters s802_11Counter;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Maintain statistical debug info.
|
||||||
|
//
|
||||||
|
ULONG packetsReceived;
|
||||||
|
ULONG packetsReceivedDropped;
|
||||||
|
ULONG packetsReceivedOverflow;
|
||||||
|
ULONG packetsSent;
|
||||||
|
ULONG packetsSentDropped;
|
||||||
|
ULONG SendContextsInUse;
|
||||||
|
ULONG RcvBuffersInUse;
|
||||||
|
|
||||||
|
|
||||||
|
// 802.11 management
|
||||||
|
SMgmtObject sMgmtObj;
|
||||||
|
|
||||||
|
QWORD qwCurrTSF;
|
||||||
|
UINT cbBulkInMax;
|
||||||
|
BOOL bPSRxBeacon;
|
||||||
|
|
||||||
|
// 802.11 MAC specific
|
||||||
|
UINT uCurrRSSI;
|
||||||
|
BYTE byCurrSQ;
|
||||||
|
|
||||||
|
|
||||||
|
//Antenna Diversity
|
||||||
|
BOOL bTxRxAntInv;
|
||||||
|
DWORD dwRxAntennaSel;
|
||||||
|
DWORD dwTxAntennaSel;
|
||||||
|
BYTE byAntennaCount;
|
||||||
|
BYTE byRxAntennaMode;
|
||||||
|
BYTE byTxAntennaMode;
|
||||||
|
BYTE byRadioCtl;
|
||||||
|
BYTE bHWRadioOff;
|
||||||
|
|
||||||
|
//SQ3 functions for antenna diversity
|
||||||
|
struct timer_list TimerSQ3Tmax1;
|
||||||
|
struct timer_list TimerSQ3Tmax2;
|
||||||
|
struct timer_list TimerSQ3Tmax3;
|
||||||
|
|
||||||
|
BOOL bDiversityRegCtlON;
|
||||||
|
BOOL bDiversityEnable;
|
||||||
|
ULONG ulDiversityNValue;
|
||||||
|
ULONG ulDiversityMValue;
|
||||||
|
BYTE byTMax;
|
||||||
|
BYTE byTMax2;
|
||||||
|
BYTE byTMax3;
|
||||||
|
ULONG ulSQ3TH;
|
||||||
|
|
||||||
|
ULONG uDiversityCnt;
|
||||||
|
BYTE byAntennaState;
|
||||||
|
ULONG ulRatio_State0;
|
||||||
|
ULONG ulRatio_State1;
|
||||||
|
ULONG ulSQ3_State0;
|
||||||
|
ULONG ulSQ3_State1;
|
||||||
|
|
||||||
|
ULONG aulSQ3Val[MAX_RATE];
|
||||||
|
ULONG aulPktNum[MAX_RATE];
|
||||||
|
|
||||||
|
// IFS & Cw
|
||||||
|
UINT uSIFS; //Current SIFS
|
||||||
|
UINT uDIFS; //Current DIFS
|
||||||
|
UINT uEIFS; //Current EIFS
|
||||||
|
UINT uSlot; //Current SlotTime
|
||||||
|
UINT uCwMin; //Current CwMin
|
||||||
|
UINT uCwMax; //CwMax is fixed on 1023.
|
||||||
|
// PHY parameter
|
||||||
|
BYTE bySIFS;
|
||||||
|
BYTE byDIFS;
|
||||||
|
BYTE byEIFS;
|
||||||
|
BYTE bySlot;
|
||||||
|
BYTE byCWMaxMin;
|
||||||
|
|
||||||
|
// Rate
|
||||||
|
VIA_BB_TYPE byBBType; //0: 11A, 1:11B, 2:11G
|
||||||
|
VIA_PKT_TYPE byPacketType; //0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate)
|
||||||
|
WORD wBasicRate;
|
||||||
|
BYTE byACKRate;
|
||||||
|
BYTE byTopOFDMBasicRate;
|
||||||
|
BYTE byTopCCKBasicRate;
|
||||||
|
|
||||||
|
|
||||||
|
DWORD dwAotoRateTxOkCnt;
|
||||||
|
DWORD dwAotoRateTxFailCnt;
|
||||||
|
DWORD dwErrorRateThreshold[13];
|
||||||
|
DWORD dwTPTable[MAX_RATE];
|
||||||
|
BYTE abyEEPROM[EEP_MAX_CONTEXT_SIZE]; //DWORD alignment
|
||||||
|
|
||||||
|
BYTE byMinChannel;
|
||||||
|
BYTE byMaxChannel;
|
||||||
|
UINT uConnectionRate;
|
||||||
|
|
||||||
|
BYTE byPreambleType;
|
||||||
|
BYTE byShortPreamble;
|
||||||
|
// CARD_PHY_TYPE
|
||||||
|
BYTE eConfigPHYMode;
|
||||||
|
|
||||||
|
// For RF Power table
|
||||||
|
BYTE byCCKPwr;
|
||||||
|
BYTE byOFDMPwrG;
|
||||||
|
BYTE byOFDMPwrA;
|
||||||
|
BYTE byCurPwr;
|
||||||
|
BYTE abyCCKPwrTbl[14];
|
||||||
|
BYTE abyOFDMPwrTbl[14];
|
||||||
|
BYTE abyOFDMAPwrTbl[42];
|
||||||
|
|
||||||
|
WORD wCurrentRate;
|
||||||
|
WORD wRTSThreshold;
|
||||||
|
WORD wFragmentationThreshold;
|
||||||
|
BYTE byShortRetryLimit;
|
||||||
|
BYTE byLongRetryLimit;
|
||||||
|
CARD_OP_MODE eOPMode;
|
||||||
|
BOOL bBSSIDFilter;
|
||||||
|
WORD wMaxTransmitMSDULifetime;
|
||||||
|
BYTE abyBSSID[U_ETHER_ADDR_LEN];
|
||||||
|
BYTE abyDesireBSSID[U_ETHER_ADDR_LEN];
|
||||||
|
WORD wCTSDuration; // update while speed change
|
||||||
|
WORD wACKDuration; // update while speed change
|
||||||
|
WORD wRTSTransmitLen; // update while speed change
|
||||||
|
BYTE byRTSServiceField; // update while speed change
|
||||||
|
BYTE byRTSSignalField; // update while speed change
|
||||||
|
|
||||||
|
DWORD dwMaxReceiveLifetime; // dot11MaxReceiveLifetime
|
||||||
|
|
||||||
|
BOOL bCCK;
|
||||||
|
BOOL bEncryptionEnable;
|
||||||
|
BOOL bLongHeader;
|
||||||
|
BOOL bSoftwareGenCrcErr;
|
||||||
|
BOOL bShortSlotTime;
|
||||||
|
BOOL bProtectMode;
|
||||||
|
BOOL bNonERPPresent;
|
||||||
|
BOOL bBarkerPreambleMd;
|
||||||
|
|
||||||
|
BYTE byERPFlag;
|
||||||
|
WORD wUseProtectCntDown;
|
||||||
|
|
||||||
|
BOOL bRadioControlOff;
|
||||||
|
BOOL bRadioOff;
|
||||||
|
|
||||||
|
// Power save
|
||||||
|
BOOL bEnablePSMode;
|
||||||
|
WORD wListenInterval;
|
||||||
|
BOOL bPWBitOn;
|
||||||
|
WMAC_POWER_MODE ePSMode;
|
||||||
|
ULONG ulPSModeWaitTx;
|
||||||
|
BOOL bPSModeTxBurst;
|
||||||
|
|
||||||
|
// Beacon releated
|
||||||
|
WORD wSeqCounter;
|
||||||
|
BOOL bBeaconBufReady;
|
||||||
|
BOOL bBeaconSent;
|
||||||
|
BOOL bFixRate;
|
||||||
|
BYTE byCurrentCh;
|
||||||
|
UINT uScanTime;
|
||||||
|
|
||||||
|
CMD_STATE eCommandState;
|
||||||
|
|
||||||
|
CMD_CODE eCommand;
|
||||||
|
BOOL bBeaconTx;
|
||||||
|
BYTE byScanBBType;
|
||||||
|
|
||||||
|
BOOL bStopBeacon;
|
||||||
|
BOOL bStopDataPkt;
|
||||||
|
BOOL bStopTx0Pkt;
|
||||||
|
UINT uAutoReConnectTime;
|
||||||
|
UINT uIsroamingTime;
|
||||||
|
|
||||||
|
// 802.11 counter
|
||||||
|
|
||||||
|
CMD_ITEM eCmdQueue[CMD_Q_SIZE];
|
||||||
|
UINT uCmdDequeueIdx;
|
||||||
|
UINT uCmdEnqueueIdx;
|
||||||
|
UINT cbFreeCmdQueue;
|
||||||
|
BOOL bCmdRunning;
|
||||||
|
BOOL bCmdClear;
|
||||||
|
BOOL bNeedRadioOFF;
|
||||||
|
|
||||||
|
BOOL bEnableRoaming; //DavidWang
|
||||||
|
BOOL bIsRoaming; //DavidWang
|
||||||
|
BOOL bFastRoaming; //DavidWang
|
||||||
|
BYTE bSameBSSMaxNum; //Davidwang
|
||||||
|
BYTE bSameBSSCurNum; //DavidWang
|
||||||
|
BOOL bRoaming;
|
||||||
|
BOOL b11hEable;
|
||||||
|
ULONG ulTxPower;
|
||||||
|
|
||||||
|
// Encryption
|
||||||
|
NDIS_802_11_WEP_STATUS eEncryptionStatus;
|
||||||
|
BOOL bTransmitKey;
|
||||||
|
|
||||||
|
//2007-0925-01<Add>by MikeLiu
|
||||||
|
//mike add :save old Encryption
|
||||||
|
NDIS_802_11_WEP_STATUS eOldEncryptionStatus;
|
||||||
|
|
||||||
|
SKeyManagement sKey;
|
||||||
|
DWORD dwIVCounter;
|
||||||
|
|
||||||
|
|
||||||
|
RC4Ext SBox;
|
||||||
|
BYTE abyPRNG[WLAN_WEPMAX_KEYLEN+3];
|
||||||
|
BYTE byKeyIndex;
|
||||||
|
|
||||||
|
BOOL bAES;
|
||||||
|
BYTE byCntMeasure;
|
||||||
|
|
||||||
|
UINT uKeyLength;
|
||||||
|
BYTE abyKey[WLAN_WEP232_KEYLEN];
|
||||||
|
|
||||||
|
// for AP mode
|
||||||
|
UINT uAssocCount;
|
||||||
|
BOOL bMoreData;
|
||||||
|
|
||||||
|
// QoS
|
||||||
|
BOOL bGrpAckPolicy;
|
||||||
|
|
||||||
|
|
||||||
|
BYTE byAutoFBCtrl;
|
||||||
|
|
||||||
|
BOOL bTxMICFail;
|
||||||
|
BOOL bRxMICFail;
|
||||||
|
|
||||||
|
|
||||||
|
// For Update BaseBand VGA Gain Offset
|
||||||
|
BOOL bUpdateBBVGA;
|
||||||
|
UINT uBBVGADiffCount;
|
||||||
|
BYTE byBBVGANew;
|
||||||
|
BYTE byBBVGACurrent;
|
||||||
|
BYTE abyBBVGA[BB_VGA_LEVEL];
|
||||||
|
LONG ldBmThreshold[BB_VGA_LEVEL];
|
||||||
|
|
||||||
|
BYTE byBBPreEDRSSI;
|
||||||
|
BYTE byBBPreEDIndex;
|
||||||
|
|
||||||
|
|
||||||
|
BOOL bRadioCmd;
|
||||||
|
DWORD dwDiagRefCount;
|
||||||
|
|
||||||
|
// For FOE Tuning
|
||||||
|
BYTE byFOETuning;
|
||||||
|
|
||||||
|
// For Auto Power Tunning
|
||||||
|
|
||||||
|
BYTE byAutoPwrTunning;
|
||||||
|
|
||||||
|
// BaseBand Loopback Use
|
||||||
|
BYTE byBBCR4d;
|
||||||
|
BYTE byBBCRc9;
|
||||||
|
BYTE byBBCR88;
|
||||||
|
BYTE byBBCR09;
|
||||||
|
|
||||||
|
// command timer
|
||||||
|
struct timer_list sTimerCommand;
|
||||||
|
|
||||||
|
//2007-0115-01<Add>by MikeLiu
|
||||||
|
#ifdef TxInSleep
|
||||||
|
struct timer_list sTimerTxData;
|
||||||
|
ULONG nTxDataTimeCout;
|
||||||
|
BOOL fTxDataInSleep;
|
||||||
|
BOOL IsTxDataTrigger;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WPA_SM_Transtatus
|
||||||
|
BOOL fWPA_Authened; //is WPA/WPA-PSK or WPA2/WPA2-PSK authen??
|
||||||
|
#endif
|
||||||
|
BYTE byReAssocCount; //mike add:re-association retry times!
|
||||||
|
BYTE byLinkWaitCount;
|
||||||
|
|
||||||
|
SEthernetHeader sTxEthHeader;
|
||||||
|
SEthernetHeader sRxEthHeader;
|
||||||
|
BYTE abyBroadcastAddr[U_ETHER_ADDR_LEN];
|
||||||
|
BYTE abySNAP_RFC1042[U_ETHER_ADDR_LEN];
|
||||||
|
BYTE abySNAP_Bridgetunnel[U_ETHER_ADDR_LEN];
|
||||||
|
|
||||||
|
// Pre-Authentication & PMK cache
|
||||||
|
SPMKID gsPMKID;
|
||||||
|
SPMKIDCandidateEvent gsPMKIDCandidate;
|
||||||
|
|
||||||
|
|
||||||
|
// for 802.11h
|
||||||
|
BOOL b11hEnable;
|
||||||
|
|
||||||
|
BOOL bChannelSwitch;
|
||||||
|
BYTE byNewChannel;
|
||||||
|
BYTE byChannelSwitchCount;
|
||||||
|
|
||||||
|
//WPA supplicant daemon
|
||||||
|
struct net_device *wpadev;
|
||||||
|
BOOL bWPADEVUp;
|
||||||
|
struct sk_buff *skb;
|
||||||
|
//--
|
||||||
|
|
||||||
|
#ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
|
||||||
|
BOOL bwextstep0;
|
||||||
|
BOOL bwextstep1;
|
||||||
|
BOOL bwextstep2;
|
||||||
|
BOOL bwextstep3;
|
||||||
|
BOOL bWPASuppWextEnabled;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HOSTAP
|
||||||
|
// user space daemon: hostapd, is used for HOSTAP
|
||||||
|
BOOL bEnableHostapd;
|
||||||
|
BOOL bEnable8021x;
|
||||||
|
BOOL bEnableHostWEP;
|
||||||
|
struct net_device *apdev;
|
||||||
|
int (*tx_80211)(struct sk_buff *skb, struct net_device *dev);
|
||||||
|
#endif
|
||||||
|
UINT uChannel;
|
||||||
|
|
||||||
|
#ifdef WIRELESS_EXT
|
||||||
|
struct iw_statistics wstats; // wireless stats
|
||||||
|
#endif /* WIRELESS_EXT */
|
||||||
|
BOOL bCommit;
|
||||||
|
|
||||||
|
} DEVICE_INFO, *PSDevice;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define EnqueueRCB(_Head, _Tail, _RCB) \
|
||||||
|
{ \
|
||||||
|
if (!_Head) { \
|
||||||
|
_Head = _RCB; \
|
||||||
|
} \
|
||||||
|
else { \
|
||||||
|
_Tail->Next = _RCB; \
|
||||||
|
} \
|
||||||
|
_RCB->Next = NULL; \
|
||||||
|
_Tail = _RCB; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DequeueRCB(Head, Tail) \
|
||||||
|
{ \
|
||||||
|
PRCB RCB = Head; \
|
||||||
|
if (!RCB->Next) { \
|
||||||
|
Tail = NULL; \
|
||||||
|
} \
|
||||||
|
Head = RCB->Next; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define ADD_ONE_WITH_WRAP_AROUND(uVar, uModulo) { \
|
||||||
|
if ((uVar) >= ((uModulo) - 1)) \
|
||||||
|
(uVar) = 0; \
|
||||||
|
else \
|
||||||
|
(uVar)++; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define fMP_RESET_IN_PROGRESS 0x00000001
|
||||||
|
#define fMP_DISCONNECTED 0x00000002
|
||||||
|
#define fMP_HALT_IN_PROGRESS 0x00000004
|
||||||
|
#define fMP_SURPRISE_REMOVED 0x00000008
|
||||||
|
#define fMP_RECV_LOOKASIDE 0x00000010
|
||||||
|
#define fMP_INIT_IN_PROGRESS 0x00000020
|
||||||
|
#define fMP_SEND_SIDE_RESOURCE_ALLOCATED 0x00000040
|
||||||
|
#define fMP_RECV_SIDE_RESOURCE_ALLOCATED 0x00000080
|
||||||
|
#define fMP_POST_READS 0x00000100
|
||||||
|
#define fMP_POST_WRITES 0x00000200
|
||||||
|
#define fMP_CONTROL_READS 0x00000400
|
||||||
|
#define fMP_CONTROL_WRITES 0x00000800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define MP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
|
||||||
|
#define MP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
|
||||||
|
#define MP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
|
||||||
|
#define MP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
|
||||||
|
|
||||||
|
#define MP_IS_READY(_M) (((_M)->Flags & \
|
||||||
|
(fMP_DISCONNECTED | fMP_RESET_IN_PROGRESS | fMP_HALT_IN_PROGRESS | fMP_INIT_IN_PROGRESS | fMP_SURPRISE_REMOVED)) == 0)
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
//BOOL device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb, UINT uNodeIndex);
|
||||||
|
BOOL device_alloc_frag_buf(PSDevice pDevice, PSDeFragControlBlock pDeF);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
1673
drivers/staging/vt6656/dpc.c
Normal file
1673
drivers/staging/vt6656/dpc.c
Normal file
File diff suppressed because it is too large
Load Diff
94
drivers/staging/vt6656/dpc.h
Normal file
94
drivers/staging/vt6656/dpc.h
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: dpc.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Jun. 27, 2002
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __DPC_H__
|
||||||
|
#define __DPC_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WCMD_H__)
|
||||||
|
#include "wcmd.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
RXvWorkItem(
|
||||||
|
PVOID Context
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
RXvMngWorkItem(
|
||||||
|
PVOID Context
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
RXvFreeRCB(
|
||||||
|
IN PRCB pRCB,
|
||||||
|
IN BOOL bReAllocSkb
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
RXbBulkInProcessData(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN PRCB pRCB,
|
||||||
|
IN ULONG BytesToIndicate
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __RXTX_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
887
drivers/staging/vt6656/firmware.c
Normal file
887
drivers/staging/vt6656/firmware.c
Normal file
@ -0,0 +1,887 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: baseband.c
|
||||||
|
*
|
||||||
|
* Purpose: Implement functions to access baseband
|
||||||
|
*
|
||||||
|
* Author: Yiching Chen
|
||||||
|
*
|
||||||
|
* Date: May 20, 2004
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__FIRMWARE_H__)
|
||||||
|
#include "firmware.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CONTROL_H__)
|
||||||
|
#include "control.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__RNDIS_H__)
|
||||||
|
#include "rndis.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
//static int msglevel =MSG_LEVEL_DEBUG;
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is firmware version 1.51
|
||||||
|
*/
|
||||||
|
#define FIRMWARE_VERSION 0x133
|
||||||
|
|
||||||
|
const BYTE abyFirmware[] = {
|
||||||
|
|
||||||
|
0x02, 0x35, 0x62, 0x02, 0x3B, 0xED, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x3E, 0x21, 0xD2, 0x04,
|
||||||
|
0x90, 0x06, 0x24, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x21, 0xE0, 0x90, 0x45, 0x39, 0xF0, 0xE0, 0x90,
|
||||||
|
0x06, 0x21, 0xF0, 0x90, 0x06, 0x10, 0xE0, 0x54, 0x60, 0x60, 0x03, 0x02, 0x1A, 0xE9, 0xA3, 0xE0,
|
||||||
|
0x12, 0x28, 0x7E, 0x18, 0x15, 0x00, 0x18, 0xF6, 0x01, 0x19, 0xD1, 0x03, 0x16, 0x79, 0x05, 0x12,
|
||||||
|
0x52, 0x06, 0x17, 0xE5, 0x08, 0x16, 0xAF, 0x09, 0x17, 0x33, 0x0A, 0x17, 0x91, 0x0B, 0x00, 0x00,
|
||||||
|
0x1A, 0xE1, 0x90, 0x06, 0x17, 0xE0, 0xFE, 0x90, 0x06, 0x16, 0xE0, 0xFD, 0xEE, 0x90, 0x45, 0x31,
|
||||||
|
0xF0, 0xED, 0xA3, 0xF0, 0x90, 0x10, 0x3D, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x24, 0x74, 0x08, 0xF0,
|
||||||
|
0x90, 0x06, 0x13, 0xE0, 0x24, 0xFE, 0x60, 0x47, 0x14, 0x70, 0x03, 0x02, 0x14, 0x79, 0x24, 0xFD,
|
||||||
|
0x60, 0x25, 0x14, 0x70, 0x03, 0x02, 0x13, 0x9C, 0x24, 0x06, 0x60, 0x03, 0x02, 0x16, 0x54, 0x7B,
|
||||||
|
0x01, 0x7A, 0x10, 0x79, 0x8B, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0x90, 0x10, 0x4C, 0xE4, 0xF0,
|
||||||
|
0xA3, 0x74, 0x12, 0xF0, 0x02, 0x16, 0x5C, 0x7B, 0x01, 0x7A, 0x10, 0x79, 0x81, 0x90, 0x10, 0x46,
|
||||||
|
0x12, 0x27, 0xBA, 0x90, 0x10, 0x4C, 0xE4, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x02, 0x16, 0x5C, 0x7B,
|
||||||
|
0x01, 0x7A, 0x10, 0x79, 0x51, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0x90, 0x10, 0x52, 0x74, 0x02,
|
||||||
|
0xF0, 0x90, 0x10, 0x54, 0xE0, 0xFE, 0x90, 0x10, 0x53, 0xE0, 0xFD, 0xEE, 0x90, 0x10, 0x4C, 0xF0,
|
||||||
|
0xED, 0xA3, 0xF0, 0x30, 0x06, 0x5A, 0xE0, 0xFD, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5,
|
||||||
|
0x83, 0xE4, 0xF0, 0x74, 0x48, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0x74, 0x02, 0xF0,
|
||||||
|
0x74, 0x4E, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x4F, 0x2D, 0xF5,
|
||||||
|
0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0x74, 0x02, 0xF0, 0x90, 0x10, 0x98, 0xE0, 0xFE, 0x90, 0x10,
|
||||||
|
0x97, 0xE0, 0xFB, 0xEE, 0xEB, 0xC3, 0x94, 0x20, 0xEE, 0x94, 0x01, 0x40, 0x03, 0x02, 0x16, 0x5C,
|
||||||
|
0x74, 0x50, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x02, 0x16, 0x5C,
|
||||||
|
0x90, 0x10, 0x4D, 0xE0, 0xFD, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0x74, 0x40,
|
||||||
|
0xF0, 0x74, 0x48, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x4E, 0x2D,
|
||||||
|
0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0x74, 0x40, 0xF0, 0x74, 0x4F, 0x2D, 0xF5, 0x82, 0xE4,
|
||||||
|
0x34, 0x10, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x10, 0x98, 0xE0, 0xFE, 0x90, 0x10, 0x97, 0xE0, 0xFB,
|
||||||
|
0xEE, 0xEB, 0xC3, 0x94, 0x20, 0xEE, 0x94, 0x01, 0x40, 0x03, 0x02, 0x16, 0x5C, 0x74, 0x50, 0x2D,
|
||||||
|
0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0xE4, 0xF0, 0x02, 0x16, 0x5C, 0x7B, 0x01, 0x7A, 0x10,
|
||||||
|
0x79, 0x51, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0x90, 0x10, 0x52, 0x74, 0x07, 0xF0, 0x90, 0x10,
|
||||||
|
0x54, 0xE0, 0xFE, 0x90, 0x10, 0x53, 0xE0, 0xFD, 0xEE, 0x90, 0x10, 0x4C, 0xF0, 0xED, 0xA3, 0xF0,
|
||||||
|
0x30, 0x06, 0x59, 0xE0, 0xFD, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0x74, 0x40,
|
||||||
|
0xF0, 0x74, 0x48, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x4E, 0x2D,
|
||||||
|
0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0x74, 0x40, 0xF0, 0x74, 0x4F, 0x2D, 0xF5, 0x82, 0xE4,
|
||||||
|
0x34, 0x10, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x10, 0x98, 0xE0, 0xFE, 0x90, 0x10, 0x97, 0xE0, 0xFB,
|
||||||
|
0xEE, 0xEB, 0xC3, 0x94, 0x20, 0xEE, 0x94, 0x01, 0x40, 0x03, 0x02, 0x16, 0x5C, 0x74, 0x50, 0x2D,
|
||||||
|
0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0xE4, 0xF0, 0x02, 0x16, 0x5C, 0x90, 0x10, 0x4D, 0xE0,
|
||||||
|
0xFD, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x48, 0x2D, 0xF5,
|
||||||
|
0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0x74, 0x02, 0xF0, 0x74, 0x4E, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
|
||||||
|
0x10, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x4F, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x10, 0xF5, 0x83, 0x74,
|
||||||
|
0x02, 0xF0, 0x90, 0x10, 0x98, 0xE0, 0xFE, 0x90, 0x10, 0x97, 0xE0, 0xFB, 0xEE, 0xEB, 0xC3, 0x94,
|
||||||
|
0x20, 0xEE, 0x94, 0x01, 0x40, 0x03, 0x02, 0x16, 0x5C, 0x74, 0x50, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
|
||||||
|
0x10, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x02, 0x16, 0x5C, 0x90, 0x06, 0x12, 0xE0, 0x14, 0x60, 0x2F,
|
||||||
|
0x14, 0x70, 0x03, 0x02, 0x15, 0x34, 0x14, 0x70, 0x03, 0x02, 0x15, 0xD5, 0x24, 0x03, 0x60, 0x03,
|
||||||
|
0x02, 0x16, 0x4C, 0x7B, 0x01, 0x7A, 0x43, 0x79, 0x1A, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0x90,
|
||||||
|
0x43, 0x1A, 0xE0, 0xFF, 0x90, 0x10, 0x4C, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x02, 0x16, 0x5C, 0x90,
|
||||||
|
0x10, 0x98, 0xE0, 0xFE, 0x90, 0x10, 0x97, 0xE0, 0xFD, 0xEE, 0xED, 0xC3, 0x94, 0x20, 0xEE, 0x94,
|
||||||
|
0x01, 0x50, 0x1C, 0x7B, 0x01, 0x7A, 0x10, 0x79, 0x14, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0x90,
|
||||||
|
0x10, 0x14, 0xE0, 0xFF, 0x90, 0x10, 0x4C, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x02, 0x16, 0x5C, 0x90,
|
||||||
|
0x10, 0x3C, 0xE0, 0xC3, 0x94, 0x01, 0x50, 0x08, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22,
|
||||||
|
0x90, 0x10, 0x0D, 0xE0, 0x20, 0xE0, 0x1C, 0x7B, 0x01, 0x7A, 0x10, 0x79, 0x14, 0x90, 0x10, 0x46,
|
||||||
|
0x12, 0x27, 0xBA, 0x90, 0x10, 0x14, 0xE0, 0xFF, 0x90, 0x10, 0x4C, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0,
|
||||||
|
0x02, 0x16, 0x5C, 0x90, 0x10, 0x2E, 0x12, 0x27, 0x9A, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0x90,
|
||||||
|
0x10, 0x2E, 0x12, 0x27, 0x9A, 0x12, 0x26, 0x36, 0xFF, 0x90, 0x10, 0x4C, 0xE4, 0xF0, 0xA3, 0xEF,
|
||||||
|
0xF0, 0x02, 0x16, 0x5C, 0x90, 0x10, 0x98, 0xE0, 0xFE, 0x90, 0x10, 0x97, 0xE0, 0xFD, 0xEE, 0xED,
|
||||||
|
0xC3, 0x94, 0x20, 0xEE, 0x94, 0x01, 0x50, 0x33, 0x90, 0x10, 0x99, 0xE0, 0x70, 0x0C, 0xA3, 0xE0,
|
||||||
|
0x70, 0x08, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x10, 0x2E, 0x12, 0x27, 0x9A,
|
||||||
|
0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0x90, 0x10, 0x2E, 0x12, 0x27, 0x9A, 0x12, 0x26, 0x36, 0xFF,
|
||||||
|
0x90, 0x10, 0x4C, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x02, 0x16, 0x5C, 0x90, 0x10, 0x3C, 0xE0, 0xC3,
|
||||||
|
0x94, 0x02, 0x50, 0x08, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x10, 0x0D, 0xE0,
|
||||||
|
0x20, 0xE0, 0x21, 0x90, 0x10, 0x2E, 0x12, 0x27, 0x9A, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0x90,
|
||||||
|
0x10, 0x2E, 0x12, 0x27, 0x9A, 0x12, 0x26, 0x36, 0xFF, 0x90, 0x10, 0x4C, 0xE4, 0xF0, 0xA3, 0xEF,
|
||||||
|
0xF0, 0x02, 0x16, 0x5C, 0x90, 0x10, 0x31, 0x12, 0x27, 0x9A, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA,
|
||||||
|
0x90, 0x10, 0x31, 0x12, 0x27, 0x9A, 0x12, 0x26, 0x36, 0xFF, 0x90, 0x10, 0x4C, 0xE4, 0xF0, 0xA3,
|
||||||
|
0xEF, 0xF0, 0x02, 0x16, 0x5C, 0x90, 0x10, 0x98, 0xE0, 0xFE, 0x90, 0x10, 0x97, 0xE0, 0xFD, 0xEE,
|
||||||
|
0xED, 0xC3, 0x94, 0x20, 0xEE, 0x94, 0x01, 0x50, 0x32, 0x90, 0x10, 0x99, 0xE0, 0x60, 0x04, 0xA3,
|
||||||
|
0xE0, 0x70, 0x08, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x10, 0x31, 0x12, 0x27,
|
||||||
|
0x9A, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0x90, 0x10, 0x31, 0x12, 0x27, 0x9A, 0x12, 0x26, 0x36,
|
||||||
|
0xFF, 0x90, 0x10, 0x4C, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x41, 0x90, 0x10, 0x3C, 0xE0, 0xC3,
|
||||||
|
0x94, 0x03, 0x50, 0x08, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x10, 0x31, 0x12,
|
||||||
|
0x27, 0x9A, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0x90, 0x10, 0x31, 0x12, 0x27, 0x9A, 0x12, 0x26,
|
||||||
|
0x36, 0xFF, 0x90, 0x10, 0x4C, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x10, 0x90, 0x06, 0x22, 0xE0,
|
||||||
|
0x44, 0x08, 0xF0, 0x22, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x45, 0x31, 0xE0,
|
||||||
|
0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x10, 0x4D, 0xE0, 0x9F, 0x90, 0x10, 0x4C, 0xE0, 0x9E, 0x40,
|
||||||
|
0x05, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x02, 0x33, 0xF6, 0x90, 0x06, 0x12, 0xE0, 0x90, 0x10, 0x3E,
|
||||||
|
0xF0, 0x90, 0x10, 0x3D, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x23, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x08,
|
||||||
|
0xF0, 0xA3, 0xF0, 0x90, 0x10, 0x3E, 0xE0, 0xFF, 0x44, 0x80, 0x90, 0x06, 0x06, 0xF0, 0xEF, 0x70,
|
||||||
|
0x07, 0x90, 0x10, 0x38, 0x74, 0x07, 0xF0, 0x22, 0x90, 0x10, 0x38, 0x74, 0x0F, 0xF0, 0x22, 0x90,
|
||||||
|
0x06, 0x13, 0xE0, 0xFE, 0x90, 0x06, 0x12, 0xE0, 0xFD, 0xEE, 0x90, 0x45, 0x35, 0xF0, 0xED, 0xA3,
|
||||||
|
0xF0, 0x90, 0x45, 0x35, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x64, 0x01, 0x4E, 0x60, 0x0C, 0xEF, 0x4E,
|
||||||
|
0x60, 0x08, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x06, 0x12, 0xE0, 0x90, 0x10,
|
||||||
|
0x3A, 0xF0, 0x90, 0x10, 0x3D, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x08, 0x74, 0x02, 0xF0, 0xA3, 0x04,
|
||||||
|
0xF0, 0xA3, 0x74, 0x01, 0xF0, 0x90, 0x06, 0x23, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3,
|
||||||
|
0xF0, 0x90, 0x10, 0x3A, 0xE0, 0x70, 0x0D, 0x90, 0x10, 0x38, 0x74, 0x0F, 0xF0, 0x90, 0x06, 0x07,
|
||||||
|
0x74, 0x02, 0xF0, 0x22, 0x90, 0x10, 0x38, 0x74, 0x1F, 0xF0, 0x90, 0x06, 0x07, 0xE0, 0x44, 0x1C,
|
||||||
|
0xF0, 0x90, 0x06, 0x0B, 0x74, 0x70, 0xF0, 0xE4, 0x90, 0x10, 0x34, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
|
||||||
|
0xA3, 0xF0, 0x22, 0x90, 0x10, 0x38, 0xE0, 0x64, 0x1F, 0x70, 0x4E, 0x90, 0x06, 0x15, 0xE0, 0xFE,
|
||||||
|
0x90, 0x06, 0x14, 0xE0, 0xFD, 0xEE, 0x90, 0x45, 0x33, 0xF0, 0xED, 0xA3, 0xF0, 0x90, 0x10, 0x55,
|
||||||
|
0xE0, 0xFF, 0xC3, 0x90, 0x45, 0x34, 0xE0, 0x9F, 0x90, 0x45, 0x33, 0xE0, 0x94, 0x00, 0x50, 0x21,
|
||||||
|
0xE4, 0x90, 0x06, 0x60, 0xF0, 0x90, 0x10, 0x3D, 0x74, 0x09, 0xF0, 0xE4, 0x90, 0x10, 0x4C, 0xF0,
|
||||||
|
0xA3, 0xF0, 0xC2, 0x04, 0x90, 0x06, 0x23, 0x74, 0x81, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0xF0,
|
||||||
|
0x22, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0,
|
||||||
|
0x22, 0x90, 0x06, 0x13, 0xE0, 0xFE, 0x90, 0x06, 0x12, 0xE0, 0xFD, 0xEE, 0x90, 0x45, 0x35, 0xF0,
|
||||||
|
0xED, 0xA3, 0xF0, 0x90, 0x06, 0x15, 0xE0, 0xFE, 0x90, 0x06, 0x14, 0xE0, 0xFD, 0xEE, 0x90, 0x45,
|
||||||
|
0x33, 0xF0, 0xED, 0xA3, 0xF0, 0xA3, 0xE0, 0x70, 0x02, 0xA3, 0xE0, 0x70, 0x13, 0x90, 0x10, 0x55,
|
||||||
|
0xE0, 0xFF, 0xC3, 0x90, 0x45, 0x34, 0xE0, 0x9F, 0x90, 0x45, 0x33, 0xE0, 0x94, 0x00, 0x40, 0x08,
|
||||||
|
0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x06, 0x23, 0x74, 0x80, 0xF0, 0xA3, 0x74,
|
||||||
|
0x08, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x10, 0x38, 0xE0, 0xB4, 0x1F, 0x08, 0x90, 0x06, 0x60, 0x74,
|
||||||
|
0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x06, 0x60, 0xF0, 0x90, 0x10, 0x3D, 0x74, 0x07, 0xF0, 0xE4,
|
||||||
|
0x90, 0x10, 0x4C, 0xF0, 0xA3, 0xF0, 0xC2, 0x04, 0x90, 0x06, 0x23, 0x74, 0x81, 0xF0, 0xA3, 0x74,
|
||||||
|
0x08, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x06, 0x10, 0xE0, 0x24, 0x7F, 0x60, 0x14, 0x14, 0x60, 0x4E,
|
||||||
|
0x24, 0x02, 0x60, 0x03, 0x02, 0x18, 0xD2, 0xE4, 0x90, 0x06, 0x60, 0xF0, 0xA3, 0xF0, 0x02, 0x18,
|
||||||
|
0xDA, 0x90, 0x06, 0x15, 0xE0, 0xFE, 0x90, 0x06, 0x14, 0xE0, 0xFD, 0xEE, 0x90, 0x45, 0x33, 0xF0,
|
||||||
|
0xED, 0xA3, 0xF0, 0x90, 0x10, 0x55, 0xE0, 0xFF, 0xC3, 0x90, 0x45, 0x34, 0xE0, 0x9F, 0x90, 0x45,
|
||||||
|
0x33, 0xE0, 0x94, 0x00, 0x50, 0x07, 0x90, 0x10, 0x38, 0xE0, 0xB4, 0x0F, 0x08, 0x90, 0x06, 0x22,
|
||||||
|
0xE0, 0x44, 0x08, 0xF0, 0x22, 0xE4, 0x90, 0x06, 0x60, 0xF0, 0xA3, 0xF0, 0x80, 0x6C, 0x90, 0x06,
|
||||||
|
0x15, 0xE0, 0xFE, 0x90, 0x06, 0x14, 0xE0, 0xFD, 0xEE, 0x90, 0x45, 0x33, 0xF0, 0xED, 0xA3, 0xF0,
|
||||||
|
0x90, 0x45, 0x33, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x64, 0x81, 0x4E, 0x60, 0x0C, 0xEF, 0x64, 0x82,
|
||||||
|
0x4E, 0x60, 0x06, 0xEF, 0x64, 0x03, 0x4E, 0x70, 0x0B, 0x90, 0x10, 0x38, 0xE0, 0xB4, 0x0F, 0x0C,
|
||||||
|
0xEF, 0x4E, 0x60, 0x08, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x7E, 0x00, 0xEF, 0x54,
|
||||||
|
0x7F, 0x24, 0x34, 0xF5, 0x82, 0xEE, 0x34, 0x10, 0xF5, 0x83, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x06,
|
||||||
|
0x60, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x06, 0x60, 0xF0, 0xE4, 0x90, 0x06, 0x61, 0xF0,
|
||||||
|
0x80, 0x08, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x10, 0x3D, 0x74, 0x01, 0xF0,
|
||||||
|
0xE4, 0x90, 0x10, 0x4C, 0xF0, 0xA3, 0xF0, 0xC2, 0x04, 0x90, 0x06, 0x23, 0x74, 0x82, 0xF0, 0xA3,
|
||||||
|
0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x06, 0x10, 0xE0, 0x24, 0xFE, 0x60, 0x03, 0x02, 0x19,
|
||||||
|
0xBA, 0x90, 0x06, 0x15, 0xE0, 0xFE, 0x90, 0x06, 0x14, 0xE0, 0xFD, 0xEE, 0x90, 0x45, 0x33, 0xF0,
|
||||||
|
0xED, 0xA3, 0xF0, 0x90, 0x06, 0x13, 0xE0, 0xFE, 0x90, 0x06, 0x12, 0xE0, 0xFD, 0xEE, 0x90, 0x45,
|
||||||
|
0x35, 0xF0, 0xED, 0xA3, 0xF0, 0x90, 0x10, 0x38, 0xE0, 0xF9, 0x64, 0x1F, 0x70, 0x76, 0x90, 0x45,
|
||||||
|
0x33, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x64, 0x81, 0x4E, 0x70, 0x19, 0x90, 0x06, 0x0B, 0xE0, 0x54,
|
||||||
|
0xFB, 0xF0, 0x7C, 0x00, 0xEF, 0x54, 0x7F, 0x24, 0x34, 0xF5, 0x82, 0xEC, 0x34, 0x10, 0xF5, 0x83,
|
||||||
|
0xE4, 0xF0, 0x80, 0x6E, 0xEF, 0x64, 0x82, 0x4E, 0x70, 0x1C, 0x90, 0x06, 0x0B, 0xE0, 0x54, 0xFE,
|
||||||
|
0xF0, 0x7E, 0x00, 0x90, 0x45, 0x34, 0xE0, 0x54, 0x7F, 0x24, 0x34, 0xF5, 0x82, 0xEE, 0x34, 0x10,
|
||||||
|
0xF5, 0x83, 0xE4, 0xF0, 0x80, 0x4C, 0x90, 0x45, 0x33, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x64, 0x03,
|
||||||
|
0x4E, 0x70, 0x19, 0x90, 0x06, 0x0B, 0xE0, 0x54, 0xFD, 0xF0, 0x7E, 0x00, 0xEF, 0x54, 0x7F, 0x24,
|
||||||
|
0x34, 0xF5, 0x82, 0xEE, 0x34, 0x10, 0xF5, 0x83, 0xE4, 0xF0, 0x80, 0x26, 0x90, 0x06, 0x22, 0xE0,
|
||||||
|
0x44, 0x08, 0xF0, 0x22, 0xE9, 0xB4, 0x0F, 0x1A, 0x90, 0x45, 0x33, 0xE0, 0x70, 0x02, 0xA3, 0xE0,
|
||||||
|
0x60, 0x10, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08,
|
||||||
|
0xF0, 0x22, 0xC2, 0x04, 0x90, 0x06, 0x23, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0xF0,
|
||||||
|
0x22, 0x90, 0x06, 0x10, 0xE0, 0x24, 0xFE, 0x60, 0x44, 0x24, 0x02, 0x60, 0x03, 0x02, 0x1A, 0xCA,
|
||||||
|
0x90, 0x06, 0x13, 0xE0, 0xFE, 0x90, 0x06, 0x12, 0xE0, 0xFD, 0xEE, 0x90, 0x45, 0x35, 0xF0, 0xED,
|
||||||
|
0xA3, 0xF0, 0x90, 0x45, 0x35, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x64, 0x02, 0x70, 0x17, 0x90, 0x06,
|
||||||
|
0x14, 0xE0, 0x70, 0x11, 0x90, 0x10, 0x3D, 0x74, 0x0F, 0xF0, 0x90, 0x06, 0x15, 0xE0, 0x90, 0x10,
|
||||||
|
0x50, 0xF0, 0x02, 0x1A, 0xD2, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x06, 0x15,
|
||||||
|
0xE0, 0xFE, 0x90, 0x06, 0x14, 0xE0, 0xFD, 0xEE, 0x90, 0x45, 0x33, 0xF0, 0xED, 0xA3, 0xF0, 0x90,
|
||||||
|
0x06, 0x13, 0xE0, 0xFE, 0x90, 0x06, 0x12, 0xE0, 0xFD, 0xEE, 0x90, 0x45, 0x35, 0xF0, 0xED, 0xA3,
|
||||||
|
0xF0, 0x90, 0x10, 0x38, 0xE0, 0x64, 0x1F, 0x70, 0x79, 0x90, 0x45, 0x33, 0xE0, 0xFE, 0xA3, 0xE0,
|
||||||
|
0xFF, 0x64, 0x81, 0x4E, 0x70, 0x1A, 0x90, 0x06, 0x0B, 0xE0, 0x44, 0x04, 0xF0, 0x7C, 0x00, 0xEF,
|
||||||
|
0x54, 0x7F, 0x24, 0x34, 0xF5, 0x82, 0xEC, 0x34, 0x10, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x80, 0x62,
|
||||||
|
0xEF, 0x64, 0x82, 0x4E, 0x70, 0x1D, 0x90, 0x06, 0x0B, 0xE0, 0x44, 0x01, 0xF0, 0x7E, 0x00, 0x90,
|
||||||
|
0x45, 0x34, 0xE0, 0x54, 0x7F, 0x24, 0x34, 0xF5, 0x82, 0xEE, 0x34, 0x10, 0xF5, 0x83, 0x74, 0x01,
|
||||||
|
0xF0, 0x80, 0x3F, 0x90, 0x45, 0x33, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x64, 0x03, 0x4E, 0x70, 0x1A,
|
||||||
|
0x90, 0x06, 0x0B, 0xE0, 0x44, 0x02, 0xF0, 0x7E, 0x00, 0xEF, 0x54, 0x7F, 0x24, 0x34, 0xF5, 0x82,
|
||||||
|
0xEE, 0x34, 0x10, 0xF5, 0x83, 0x74, 0x01, 0xF0, 0x80, 0x18, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08,
|
||||||
|
0xF0, 0x22, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08,
|
||||||
|
0xF0, 0x22, 0xC2, 0x04, 0x90, 0x06, 0x23, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0xF0,
|
||||||
|
0x22, 0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x06, 0x10, 0xE0, 0x64, 0x40, 0x60,
|
||||||
|
0x03, 0x02, 0x1C, 0xA2, 0xE0, 0x90, 0x43, 0x1E, 0xF0, 0x90, 0x06, 0x11, 0xE0, 0x90, 0x43, 0x1F,
|
||||||
|
0xF0, 0x90, 0x06, 0x13, 0xE0, 0xFE, 0x90, 0x06, 0x12, 0xE0, 0xFD, 0xEE, 0x90, 0x43, 0x20, 0xF0,
|
||||||
|
0xED, 0xA3, 0xF0, 0x90, 0x06, 0x15, 0xE0, 0xFE, 0x90, 0x06, 0x14, 0xE0, 0xFD, 0xEE, 0x90, 0x43,
|
||||||
|
0x22, 0xF0, 0xED, 0xA3, 0xF0, 0x90, 0x06, 0x17, 0xE0, 0xFE, 0x90, 0x06, 0x16, 0xE0, 0xFD, 0xEE,
|
||||||
|
0x90, 0x43, 0x24, 0xF0, 0xED, 0xA3, 0xF0, 0xE4, 0x90, 0x10, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x43,
|
||||||
|
0x24, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x10, 0x42, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x43, 0x1F,
|
||||||
|
0xE0, 0x12, 0x28, 0x7E, 0x1B, 0x70, 0x00, 0x1B, 0xE6, 0x01, 0x1B, 0x79, 0x07, 0x1B, 0x8F, 0x0B,
|
||||||
|
0x1B, 0xAF, 0x0C, 0x1B, 0xC9, 0x10, 0x1B, 0xD9, 0x12, 0x1B, 0xFE, 0x13, 0x00, 0x00, 0x1C, 0x6A,
|
||||||
|
0x90, 0x10, 0x3D, 0x74, 0x0B, 0xF0, 0x02, 0x1C, 0x8E, 0x90, 0x10, 0x3D, 0x74, 0x0B, 0xF0, 0x12,
|
||||||
|
0x3D, 0x31, 0x90, 0x06, 0x23, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x22, 0x90,
|
||||||
|
0x10, 0x3D, 0x74, 0x0B, 0xF0, 0x90, 0x43, 0x21, 0xE0, 0xFF, 0x90, 0x45, 0x45, 0xE0, 0xFD, 0x12,
|
||||||
|
0x39, 0xB4, 0x90, 0x06, 0x23, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x22, 0x90,
|
||||||
|
0x45, 0x45, 0xE0, 0xFF, 0x90, 0x06, 0x12, 0xE0, 0xFD, 0x12, 0x39, 0x2D, 0x90, 0x06, 0x23, 0x74,
|
||||||
|
0x80, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x22, 0x12, 0x3E, 0x03, 0x90, 0x06, 0x23, 0x74,
|
||||||
|
0x80, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x06, 0x23, 0x74, 0x80, 0xF0, 0xA3,
|
||||||
|
0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x22, 0x90, 0x10, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x06, 0x23, 0x74,
|
||||||
|
0x80, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x12, 0x3D, 0xBA, 0x02, 0x1C, 0x8E, 0x90, 0x06,
|
||||||
|
0x23, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0x7A, 0xE0, 0x90, 0x45,
|
||||||
|
0x39, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x44, 0x80, 0xF0, 0x90, 0x04, 0x7A, 0xF0, 0x7D, 0x17, 0x7F,
|
||||||
|
0x0C, 0x12, 0x3D, 0x00, 0x7D, 0xB9, 0x7F, 0x0D, 0x12, 0x3D, 0x00, 0x90, 0x04, 0x54, 0x74, 0x01,
|
||||||
|
0xF0, 0xE4, 0x90, 0x04, 0x78, 0xF0, 0xA3, 0xF0, 0x90, 0x06, 0x20, 0x74, 0x20, 0xF0, 0x90, 0x04,
|
||||||
|
0x59, 0x74, 0x10, 0xF0, 0xE4, 0x90, 0x06, 0x05, 0xF0, 0x90, 0x06, 0x07, 0x74, 0x03, 0xF0, 0x75,
|
||||||
|
0xA8, 0x81, 0x43, 0x87, 0x01, 0x90, 0x06, 0x20, 0x74, 0x21, 0xF0, 0x90, 0x04, 0x58, 0x74, 0x14,
|
||||||
|
0xF0, 0xA3, 0x74, 0x50, 0xF0, 0x43, 0xA8, 0x81, 0x80, 0x24, 0x90, 0x10, 0x3D, 0x74, 0x0D, 0xF0,
|
||||||
|
0x7B, 0x01, 0x7A, 0x43, 0x79, 0x26, 0x90, 0x10, 0x3F, 0x12, 0x27, 0xBA, 0x90, 0x06, 0x17, 0xE0,
|
||||||
|
0xFE, 0x90, 0x06, 0x16, 0xE0, 0xFD, 0xEE, 0x90, 0x10, 0x42, 0xF0, 0xED, 0xA3, 0xF0, 0xE4, 0x90,
|
||||||
|
0x06, 0x24, 0xF0, 0x90, 0x06, 0x23, 0x74, 0xC0, 0xF0, 0x90, 0x06, 0x25, 0x74, 0x08, 0xF0, 0xC2,
|
||||||
|
0x04, 0x22, 0x90, 0x06, 0x10, 0xE0, 0x64, 0xC0, 0x60, 0x03, 0x02, 0x1E, 0x86, 0xE0, 0x90, 0x43,
|
||||||
|
0x1E, 0xF0, 0x90, 0x06, 0x11, 0xE0, 0x90, 0x43, 0x1F, 0xF0, 0x90, 0x06, 0x13, 0xE0, 0xFE, 0x90,
|
||||||
|
0x06, 0x12, 0xE0, 0xFD, 0xEE, 0x90, 0x43, 0x20, 0xF0, 0xED, 0xA3, 0xF0, 0x90, 0x06, 0x15, 0xE0,
|
||||||
|
0xFE, 0x90, 0x06, 0x14, 0xE0, 0xFD, 0xEE, 0x90, 0x43, 0x22, 0xF0, 0xED, 0xA3, 0xF0, 0x90, 0x06,
|
||||||
|
0x17, 0xE0, 0xFE, 0x90, 0x06, 0x16, 0xE0, 0xFD, 0xEE, 0x90, 0x43, 0x24, 0xF0, 0xED, 0xA3, 0xF0,
|
||||||
|
0x90, 0x43, 0x24, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x10, 0x4C, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90,
|
||||||
|
0x43, 0x1F, 0xE0, 0x24, 0xFA, 0x70, 0x03, 0x02, 0x1E, 0x58, 0x24, 0x05, 0x60, 0x03, 0x02, 0x1E,
|
||||||
|
0x6F, 0x90, 0x43, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xEE, 0x60, 0x03, 0x02, 0x1E, 0x50, 0xEF,
|
||||||
|
0x24, 0xFE, 0x70, 0x03, 0x02, 0x1D, 0xCD, 0x14, 0x60, 0x31, 0x14, 0x60, 0x4E, 0x24, 0xFC, 0x70,
|
||||||
|
0x03, 0x02, 0x1E, 0x1A, 0x24, 0x07, 0x60, 0x03, 0x02, 0x1E, 0x50, 0x7B, 0x01, 0x7A, 0x00, 0x79,
|
||||||
|
0x00, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0x90, 0x43, 0x20, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90,
|
||||||
|
0x10, 0x47, 0xEE, 0x8F, 0xF0, 0x12, 0x26, 0xB0, 0x02, 0x1E, 0x77, 0x7B, 0x01, 0x7A, 0x04, 0x79,
|
||||||
|
0x00, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0x90, 0x43, 0x20, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90,
|
||||||
|
0x10, 0x47, 0xEE, 0x8F, 0xF0, 0x12, 0x26, 0xB0, 0x02, 0x1E, 0x77, 0x7B, 0x01, 0x7A, 0x43, 0x79,
|
||||||
|
0x26, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0xE4, 0x90, 0x45, 0x37, 0xF0, 0xA3, 0xF0, 0x90, 0x43,
|
||||||
|
0x24, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x90, 0x45, 0x38, 0xE0, 0x9F, 0x90, 0x45, 0x37, 0xE0,
|
||||||
|
0x9E, 0x40, 0x03, 0x02, 0x1E, 0x77, 0xA3, 0xE0, 0xFF, 0x90, 0x43, 0x21, 0xE0, 0x2F, 0xFF, 0x12,
|
||||||
|
0x3B, 0x25, 0x90, 0x45, 0x38, 0xE0, 0x24, 0x26, 0xF5, 0x82, 0xE4, 0x34, 0x43, 0xF5, 0x83, 0xEF,
|
||||||
|
0xF0, 0x90, 0x45, 0x37, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xB0, 0x80, 0xC1, 0x7B, 0x01, 0x7A,
|
||||||
|
0x43, 0x79, 0x26, 0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0xE4, 0x90, 0x45, 0x37, 0xF0, 0xA3, 0xF0,
|
||||||
|
0x90, 0x43, 0x24, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x90, 0x45, 0x38, 0xE0, 0x9F, 0x90, 0x45,
|
||||||
|
0x37, 0xE0, 0x9E, 0x40, 0x03, 0x02, 0x1E, 0x77, 0xA3, 0xE0, 0xFE, 0x90, 0x43, 0x21, 0xE0, 0x2E,
|
||||||
|
0xFF, 0x74, 0x26, 0x2E, 0xF9, 0xE4, 0x34, 0x43, 0xFA, 0x7B, 0x01, 0x12, 0x3C, 0xCD, 0x90, 0x45,
|
||||||
|
0x37, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xB0, 0x80, 0xC6, 0x7B, 0x01, 0x7A, 0x43, 0x79, 0x26,
|
||||||
|
0x90, 0x10, 0x46, 0x12, 0x27, 0xBA, 0xD3, 0x90, 0x43, 0x25, 0xE0, 0x94, 0x02, 0x90, 0x43, 0x24,
|
||||||
|
0xE0, 0x94, 0x00, 0x40, 0x0F, 0xE4, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x90, 0x10, 0x4C, 0xE4, 0xF0,
|
||||||
|
0xA3, 0x74, 0x02, 0xF0, 0x90, 0x43, 0x26, 0x74, 0x33, 0xF0, 0xA3, 0x74, 0x01, 0xF0, 0x80, 0x27,
|
||||||
|
0x90, 0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x7B, 0x01, 0x7A, 0x44, 0x79, 0x2E, 0x90, 0x10,
|
||||||
|
0x46, 0x12, 0x27, 0xBA, 0x90, 0x10, 0x4C, 0xE4, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x80, 0x08, 0x90,
|
||||||
|
0x06, 0x22, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x06, 0x24, 0x74, 0x08, 0xF0, 0x12, 0x33, 0xF6,
|
||||||
|
0x90, 0x10, 0x3D, 0x74, 0x0C, 0xF0, 0x22, 0xD2, 0x00, 0x90, 0x43, 0x1F, 0xE0, 0x12, 0x28, 0x7E,
|
||||||
|
0x1E, 0xAF, 0x04, 0x1F, 0xB1, 0x05, 0x1F, 0xC4, 0x08, 0x20, 0xE2, 0x09, 0x21, 0x37, 0x0A, 0x21,
|
||||||
|
0xE9, 0x0D, 0x22, 0x7F, 0x0E, 0x22, 0xB1, 0x0F, 0x23, 0x3B, 0x11, 0x00, 0x00, 0x23, 0x4F, 0x90,
|
||||||
|
0x43, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xEE, 0x60, 0x03, 0x02, 0x23, 0x4F, 0xEF, 0x24, 0xFE,
|
||||||
|
0x70, 0x03, 0x02, 0x1F, 0x7D, 0x14, 0x60, 0x4B, 0x14, 0x70, 0x03, 0x02, 0x1F, 0x51, 0x24, 0x03,
|
||||||
|
0x60, 0x03, 0x02, 0x23, 0x4F, 0x90, 0x43, 0x21, 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34,
|
||||||
|
0x00, 0xF5, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFE, 0x90, 0x43, 0x27, 0xE0, 0xF4, 0xFD, 0xEE,
|
||||||
|
0x5D, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x74, 0x00, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x00, 0xF5, 0x83,
|
||||||
|
0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x90, 0x43, 0x26, 0xE0, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0,
|
||||||
|
0x83, 0xF0, 0x22, 0x90, 0x43, 0x21, 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
|
||||||
|
0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFE, 0x90, 0x43, 0x27, 0xE0, 0xF4, 0xFD, 0xEE, 0x5D, 0xD0,
|
||||||
|
0x82, 0xD0, 0x83, 0xF0, 0x74, 0x00, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xC0, 0x83,
|
||||||
|
0xC0, 0x82, 0xE0, 0xFF, 0x90, 0x43, 0x26, 0xE0, 0xFE, 0xEF, 0x4E, 0xD0, 0x82, 0xD0, 0x83, 0xF0,
|
||||||
|
0x22, 0x90, 0x43, 0x21, 0xE0, 0xFF, 0x12, 0x3B, 0x25, 0x90, 0x45, 0x37, 0xEF, 0xF0, 0x90, 0x43,
|
||||||
|
0x27, 0xE0, 0xF4, 0x5F, 0xFF, 0x90, 0x45, 0x37, 0xF0, 0xFE, 0x90, 0x43, 0x21, 0xE0, 0xFF, 0x90,
|
||||||
|
0x43, 0x26, 0xE0, 0x4E, 0xFD, 0x12, 0x3A, 0x33, 0x72, 0x00, 0x92, 0x00, 0x22, 0x90, 0x43, 0x21,
|
||||||
|
0xE0, 0xFF, 0x7B, 0x01, 0x7A, 0x45, 0x79, 0x37, 0x12, 0x3C, 0xCD, 0x90, 0x45, 0x37, 0xE0, 0xFF,
|
||||||
|
0x90, 0x43, 0x27, 0xE0, 0xF4, 0xFE, 0xEF, 0x5E, 0xFF, 0x90, 0x45, 0x37, 0xF0, 0xFE, 0x90, 0x43,
|
||||||
|
0x21, 0xE0, 0xFF, 0x90, 0x43, 0x26, 0xE0, 0x4E, 0xFD, 0x12, 0x3D, 0x00, 0x72, 0x00, 0x92, 0x00,
|
||||||
|
0x22, 0x7B, 0x01, 0x7A, 0x44, 0x79, 0x2E, 0x90, 0x45, 0x3B, 0x12, 0x27, 0xBA, 0x7A, 0x43, 0x79,
|
||||||
|
0x26, 0x02, 0x2A, 0xF6, 0x90, 0x43, 0x21, 0xE0, 0xFD, 0x90, 0x04, 0xBC, 0xF0, 0x90, 0x43, 0x20,
|
||||||
|
0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0xEA, 0x90, 0x04, 0xBD, 0xF0, 0x90, 0x43, 0x26, 0xE0, 0x90, 0x04,
|
||||||
|
0xC0, 0xF0, 0x90, 0x43, 0x27, 0xE0, 0x90, 0x04, 0xC1, 0xF0, 0x90, 0x43, 0x28, 0xE0, 0x90, 0x04,
|
||||||
|
0xC2, 0xF0, 0x90, 0x43, 0x29, 0xE0, 0x90, 0x04, 0xC3, 0xF0, 0x90, 0x04, 0xBE, 0x74, 0x01, 0xF0,
|
||||||
|
0xED, 0x04, 0x90, 0x04, 0xBC, 0xF0, 0xEB, 0x24, 0x01, 0xE4, 0x3A, 0xA3, 0xF0, 0x90, 0x43, 0x2A,
|
||||||
|
0xE0, 0x90, 0x04, 0xC0, 0xF0, 0x90, 0x43, 0x2B, 0xE0, 0x90, 0x04, 0xC1, 0xF0, 0x90, 0x43, 0x2C,
|
||||||
|
0xE0, 0x90, 0x04, 0xC2, 0xF0, 0x90, 0x43, 0x2D, 0xE0, 0x90, 0x04, 0xC3, 0xF0, 0x90, 0x04, 0xBE,
|
||||||
|
0x74, 0x01, 0xF0, 0xE4, 0x90, 0x45, 0x35, 0xF0, 0xA3, 0xF0, 0x90, 0x45, 0x35, 0xE0, 0xFE, 0xA3,
|
||||||
|
0xE0, 0xFF, 0xC3, 0x94, 0x04, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x40, 0x03, 0x02, 0x23, 0x4F, 0x90,
|
||||||
|
0x43, 0x21, 0xE0, 0x24, 0x02, 0xFD, 0x90, 0x45, 0x36, 0xE0, 0xF9, 0x2D, 0xFD, 0x90, 0x43, 0x23,
|
||||||
|
0xE0, 0x25, 0xE0, 0x25, 0xE0, 0x2D, 0x90, 0x04, 0xBC, 0xF0, 0x90, 0x43, 0x21, 0xE0, 0x24, 0x02,
|
||||||
|
0xFD, 0x90, 0x43, 0x20, 0xE0, 0x34, 0x00, 0xCD, 0x2F, 0xCD, 0x3E, 0xFC, 0x90, 0x43, 0x22, 0xE0,
|
||||||
|
0xFE, 0xA3, 0xE0, 0x78, 0x02, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x2D, 0xEC, 0x3E, 0x90,
|
||||||
|
0x04, 0xBD, 0xF0, 0x75, 0xF0, 0x04, 0xE9, 0x90, 0x43, 0x2E, 0x12, 0x27, 0x8E, 0xE0, 0x90, 0x04,
|
||||||
|
0xC0, 0xF0, 0x75, 0xF0, 0x04, 0xE9, 0x90, 0x43, 0x2F, 0x12, 0x27, 0x8E, 0xE0, 0x90, 0x04, 0xC1,
|
||||||
|
0xF0, 0x75, 0xF0, 0x04, 0xE9, 0x90, 0x43, 0x30, 0x12, 0x27, 0x8E, 0xE0, 0x90, 0x04, 0xC2, 0xF0,
|
||||||
|
0x75, 0xF0, 0x04, 0xE9, 0x90, 0x43, 0x31, 0x12, 0x27, 0x8E, 0xE0, 0x90, 0x04, 0xC3, 0xF0, 0x90,
|
||||||
|
0x04, 0xBE, 0x74, 0x01, 0xF0, 0x90, 0x45, 0x35, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xB0, 0x02,
|
||||||
|
0x20, 0x3A, 0xE4, 0x90, 0x04, 0xBD, 0xF0, 0x90, 0x04, 0xC0, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
|
||||||
|
0xF0, 0x90, 0x45, 0x35, 0xF0, 0xA3, 0xF0, 0x90, 0x43, 0x24, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3,
|
||||||
|
0x90, 0x45, 0x36, 0xE0, 0x9F, 0x90, 0x45, 0x35, 0xE0, 0x9E, 0x40, 0x03, 0x02, 0x23, 0x4F, 0xA3,
|
||||||
|
0xE0, 0x24, 0x26, 0xF5, 0x82, 0xE4, 0x34, 0x43, 0xF5, 0x83, 0xE0, 0x75, 0xF0, 0x16, 0xA4, 0x24,
|
||||||
|
0x20, 0x90, 0x04, 0xBC, 0xF0, 0x90, 0x04, 0xBE, 0x74, 0x01, 0xF0, 0x90, 0x45, 0x35, 0xE4, 0x75,
|
||||||
|
0xF0, 0x01, 0x12, 0x26, 0xB0, 0x80, 0xC0, 0xE4, 0x90, 0x45, 0x35, 0xF0, 0xA3, 0xF0, 0xFD, 0xFC,
|
||||||
|
0x90, 0x43, 0x24, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x90, 0x45, 0x36, 0xE0, 0x9F, 0x90, 0x45,
|
||||||
|
0x35, 0xE0, 0x9E, 0x40, 0x03, 0x02, 0x23, 0x4F, 0x90, 0x43, 0x21, 0xE0, 0x2D, 0x90, 0x04, 0xBC,
|
||||||
|
0xF0, 0x90, 0x43, 0x21, 0xE0, 0x2D, 0x90, 0x43, 0x20, 0xE0, 0x3C, 0x90, 0x04, 0xBD, 0xF0, 0x90,
|
||||||
|
0x45, 0x35, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xC6, 0xFE, 0x74, 0x26, 0x25, 0xF0, 0xF5, 0x82,
|
||||||
|
0x74, 0x43, 0x3E, 0xF5, 0x83, 0xE0, 0x90, 0x04, 0xC0, 0xF0, 0x90, 0x45, 0x35, 0xE4, 0x75, 0xF0,
|
||||||
|
0x01, 0x12, 0x26, 0xC6, 0xFE, 0x74, 0x26, 0x25, 0xF0, 0xF5, 0x82, 0x74, 0x43, 0x3E, 0xF5, 0x83,
|
||||||
|
0xE0, 0x90, 0x04, 0xC1, 0xF0, 0x90, 0x45, 0x35, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xC6, 0xFE,
|
||||||
|
0x74, 0x26, 0x25, 0xF0, 0xF5, 0x82, 0x74, 0x43, 0x3E, 0xF5, 0x83, 0xE0, 0x90, 0x04, 0xC2, 0xF0,
|
||||||
|
0x90, 0x45, 0x35, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xC6, 0xFE, 0x74, 0x26, 0x25, 0xF0, 0xF5,
|
||||||
|
0x82, 0x74, 0x43, 0x3E, 0xF5, 0x83, 0xE0, 0x90, 0x04, 0xC3, 0xF0, 0x90, 0x04, 0xBE, 0x74, 0x01,
|
||||||
|
0xF0, 0x0D, 0xBD, 0x00, 0x01, 0x0C, 0x02, 0x21, 0x40, 0x90, 0x43, 0x20, 0xE0, 0xFE, 0xA3, 0xE0,
|
||||||
|
0xFF, 0x64, 0x05, 0x4E, 0x70, 0x40, 0x90, 0x45, 0x35, 0xF0, 0xA3, 0xF0, 0x90, 0x45, 0x36, 0xE0,
|
||||||
|
0xFD, 0x24, 0x26, 0xF5, 0x82, 0xE4, 0x34, 0x43, 0xF5, 0x83, 0xE0, 0xFC, 0x74, 0x40, 0x2D, 0xF5,
|
||||||
|
0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xEC, 0xF0, 0x90, 0x45, 0x35, 0xE4, 0x75, 0xF0, 0x01, 0x12,
|
||||||
|
0x26, 0xB0, 0x90, 0x45, 0x35, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x64, 0x08, 0x70, 0xCE, 0x90, 0x04,
|
||||||
|
0x48, 0xE0, 0x44, 0x04, 0xF0, 0x22, 0xEF, 0x64, 0x06, 0x4E, 0x60, 0x03, 0x02, 0x23, 0x4F, 0x90,
|
||||||
|
0x45, 0x35, 0xF0, 0xA3, 0xF0, 0x90, 0x45, 0x36, 0xE0, 0xFF, 0x24, 0x26, 0xF5, 0x82, 0xE4, 0x34,
|
||||||
|
0x43, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x38, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xEE,
|
||||||
|
0xF0, 0x90, 0x45, 0x35, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xB0, 0x90, 0x45, 0x35, 0xE0, 0x70,
|
||||||
|
0x04, 0xA3, 0xE0, 0x64, 0x08, 0x70, 0xCE, 0x90, 0x04, 0x48, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90,
|
||||||
|
0x43, 0x26, 0xE0, 0x90, 0x04, 0x22, 0xF0, 0x90, 0x43, 0x27, 0xE0, 0x90, 0x04, 0x23, 0xF0, 0x90,
|
||||||
|
0x43, 0x28, 0xE0, 0x90, 0x04, 0x24, 0xF0, 0x90, 0x43, 0x29, 0xE0, 0x90, 0x04, 0x25, 0xF0, 0x90,
|
||||||
|
0x43, 0x2A, 0xE0, 0x90, 0x04, 0x28, 0xF0, 0x90, 0x43, 0x2B, 0xE0, 0xFD, 0x7F, 0x0A, 0x02, 0x3D,
|
||||||
|
0x00, 0x90, 0x43, 0x26, 0xE0, 0x90, 0x04, 0x22, 0xF0, 0x90, 0x43, 0x27, 0xE0, 0x90, 0x04, 0x23,
|
||||||
|
0xF0, 0x90, 0x43, 0x28, 0xE0, 0x90, 0x04, 0x24, 0xF0, 0x90, 0x43, 0x29, 0xE0, 0x90, 0x04, 0x25,
|
||||||
|
0xF0, 0x90, 0x43, 0x2A, 0xE0, 0x90, 0x04, 0x28, 0xF0, 0x90, 0x43, 0x2B, 0xE0, 0xFD, 0x7F, 0x0A,
|
||||||
|
0x12, 0x3D, 0x00, 0x90, 0x43, 0x2C, 0xE0, 0xFD, 0x7F, 0x88, 0x12, 0x3D, 0x00, 0x90, 0x04, 0x4C,
|
||||||
|
0xE0, 0x54, 0xFC, 0xF0, 0xE0, 0xFF, 0x90, 0x43, 0x2D, 0xE0, 0xFE, 0xEF, 0x4E, 0x90, 0x04, 0x4C,
|
||||||
|
0xF0, 0xE4, 0x90, 0x45, 0x35, 0xF0, 0xA3, 0xF0, 0x90, 0x45, 0x36, 0xE0, 0xFF, 0x24, 0x2E, 0xF5,
|
||||||
|
0x82, 0xE4, 0x34, 0x43, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0xDC, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04,
|
||||||
|
0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x45, 0x35, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xB0, 0x90, 0x45,
|
||||||
|
0x35, 0xE0, 0x70, 0x04, 0xA3, 0xE0, 0x64, 0x22, 0x70, 0xCE, 0x22, 0x90, 0x43, 0x26, 0xE0, 0xFF,
|
||||||
|
0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x12, 0x3C, 0x90, 0x22,
|
||||||
|
0x90, 0x06, 0x30, 0x74, 0x70, 0xF0, 0x90, 0x06, 0x31, 0x74, 0xA0, 0xF0, 0xE0, 0x90, 0x06, 0x35,
|
||||||
|
0xF0, 0x90, 0x06, 0x36, 0x74, 0xC0, 0xF0, 0x90, 0x06, 0x37, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x45,
|
||||||
|
0x46, 0xF0, 0xA3, 0xF0, 0xC2, 0x05, 0x90, 0x06, 0x20, 0x74, 0x21, 0xF0, 0x90, 0x04, 0x58, 0x74,
|
||||||
|
0x14, 0xF0, 0xA3, 0x74, 0x50, 0xF0, 0x12, 0x3C, 0x43, 0x75, 0xA8, 0x81, 0x90, 0x06, 0x05, 0x74,
|
||||||
|
0x04, 0xF0, 0x90, 0x06, 0x0F, 0xE0, 0x30, 0xE4, 0x04, 0xD2, 0x06, 0x80, 0x02, 0xC2, 0x06, 0xE4,
|
||||||
|
0x90, 0x43, 0x19, 0xF0, 0x20, 0x05, 0x03, 0x02, 0x25, 0xFB, 0xC2, 0x05, 0x90, 0x10, 0x39, 0xE0,
|
||||||
|
0xFF, 0x20, 0xE5, 0x03, 0x02, 0x24, 0xCD, 0x54, 0xDF, 0xF0, 0x90, 0x06, 0x0E, 0xE0, 0x20, 0xE0,
|
||||||
|
0x03, 0x02, 0x24, 0x4D, 0x7D, 0x17, 0x7F, 0x0C, 0x12, 0x3D, 0x00, 0x7D, 0xB9, 0x7F, 0x0D, 0x12,
|
||||||
|
0x3D, 0x00, 0x90, 0x04, 0x54, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x45, 0x2F, 0xF0, 0xA3, 0xF0, 0x90,
|
||||||
|
0x04, 0x54, 0xE0, 0x30, 0xE0, 0x16, 0x90, 0x45, 0x2F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xB0,
|
||||||
|
0x90, 0x45, 0x2F, 0xE0, 0xB4, 0x07, 0xE8, 0xA3, 0xE0, 0xB4, 0xFF, 0xE3, 0xE4, 0x90, 0x04, 0x78,
|
||||||
|
0xF0, 0xA3, 0x74, 0x11, 0xF0, 0x90, 0x06, 0x0E, 0xE0, 0x54, 0x01, 0xF0, 0x90, 0x06, 0x30, 0x74,
|
||||||
|
0x70, 0xF0, 0x90, 0x06, 0x31, 0x74, 0xA0, 0xF0, 0xE0, 0x90, 0x06, 0x35, 0xF0, 0x90, 0x06, 0x36,
|
||||||
|
0x74, 0xC0, 0xF0, 0x90, 0x06, 0x37, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x38, 0x74, 0x03, 0xF0, 0x90,
|
||||||
|
0x06, 0x01, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x06, 0x07, 0x74, 0x02, 0xF0, 0x90, 0x10, 0x38, 0x74,
|
||||||
|
0x07, 0xF0, 0x90, 0x06, 0x0E, 0xE0, 0x30, 0xE1, 0x04, 0xE0, 0x54, 0x02, 0xF0, 0x90, 0x06, 0x0E,
|
||||||
|
0xE0, 0x30, 0xE3, 0x11, 0xE0, 0x54, 0x08, 0xF0, 0x90, 0x06, 0x0F, 0xE0, 0x30, 0xE4, 0x04, 0xD2,
|
||||||
|
0x06, 0x80, 0x02, 0xC2, 0x06, 0x90, 0x06, 0x0E, 0xE0, 0x30, 0xE2, 0x0A, 0xE0, 0x54, 0x04, 0xF0,
|
||||||
|
0x90, 0x04, 0x79, 0x74, 0x11, 0xF0, 0x90, 0x06, 0x0E, 0xE0, 0x30, 0xE1, 0x50, 0xE0, 0x20, 0xE0,
|
||||||
|
0x4C, 0x7D, 0x17, 0x7F, 0x0C, 0x12, 0x3D, 0x00, 0x7D, 0xB9, 0x7F, 0x0D, 0x12, 0x3D, 0x00, 0x90,
|
||||||
|
0x04, 0x54, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x04, 0x78, 0xF0, 0xA3, 0xF0, 0x90, 0x06, 0x0E, 0xE0,
|
||||||
|
0x54, 0x02, 0xF0, 0x90, 0x06, 0x20, 0x74, 0x20, 0xF0, 0xE4, 0x90, 0x04, 0x58, 0xF0, 0x90, 0x06,
|
||||||
|
0x07, 0x74, 0x03, 0xF0, 0x90, 0x04, 0x7A, 0xE0, 0x90, 0x45, 0x2E, 0xF0, 0xE0, 0x54, 0xF9, 0xF0,
|
||||||
|
0x44, 0x02, 0xF0, 0x90, 0x04, 0x7A, 0xF0, 0x43, 0xA8, 0x81, 0x43, 0x87, 0x01, 0x90, 0x10, 0x39,
|
||||||
|
0xE0, 0x30, 0xE0, 0x22, 0x90, 0x06, 0x24, 0xE0, 0x30, 0xE4, 0x05, 0x12, 0x12, 0x0E, 0x80, 0x0F,
|
||||||
|
0x90, 0x06, 0x24, 0xE0, 0x30, 0xE3, 0x05, 0x12, 0x34, 0xB9, 0x80, 0x03, 0x12, 0x28, 0xF4, 0x90,
|
||||||
|
0x10, 0x39, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0x45, 0x46, 0xE0, 0x54, 0x14, 0x70, 0x09, 0xA3, 0xE0,
|
||||||
|
0xFF, 0x20, 0xE6, 0x03, 0x30, 0xE3, 0x4F, 0x7B, 0x01, 0x7A, 0x06, 0x79, 0x40, 0x12, 0x33, 0x2B,
|
||||||
|
0x90, 0x45, 0x46, 0xE0, 0xFF, 0x90, 0x06, 0x48, 0xF0, 0x90, 0x45, 0x47, 0xE0, 0x90, 0x06, 0x49,
|
||||||
|
0xF0, 0x90, 0x04, 0x2C, 0xE0, 0x90, 0x06, 0x4A, 0xF0, 0x90, 0x04, 0x2D, 0xE0, 0x90, 0x06, 0x4B,
|
||||||
|
0xF0, 0x90, 0x04, 0x2E, 0xE0, 0x90, 0x06, 0x4C, 0xF0, 0x90, 0x04, 0x2F, 0xE0, 0x90, 0x06, 0x4D,
|
||||||
|
0xF0, 0x90, 0x06, 0x3F, 0x74, 0x01, 0xF0, 0xEF, 0x54, 0xEB, 0x90, 0x45, 0x46, 0xF0, 0xA3, 0xE0,
|
||||||
|
0x54, 0xBF, 0xF0, 0x54, 0xF7, 0xF0, 0x90, 0x45, 0x47, 0xE0, 0xFF, 0x20, 0xE4, 0x03, 0x02, 0x25,
|
||||||
|
0xE8, 0x90, 0x04, 0x7A, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x90, 0x45, 0x2E, 0xF0, 0xE0, 0x20, 0xE6,
|
||||||
|
0x54, 0x90, 0x04, 0x7A, 0xE0, 0x90, 0x45, 0x2E, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x44, 0x80, 0xF0,
|
||||||
|
0x90, 0x04, 0x7A, 0xF0, 0xEF, 0x54, 0xEF, 0x90, 0x45, 0x47, 0xF0, 0x7D, 0x17, 0x7F, 0x0C, 0x12,
|
||||||
|
0x3D, 0x00, 0x7D, 0xB9, 0x7F, 0x0D, 0x12, 0x3D, 0x00, 0x90, 0x04, 0x54, 0x74, 0x01, 0xF0, 0xE4,
|
||||||
|
0x90, 0x04, 0x78, 0xF0, 0xA3, 0xF0, 0x90, 0x06, 0x20, 0x74, 0x20, 0xF0, 0x90, 0x04, 0x59, 0x74,
|
||||||
|
0x10, 0xF0, 0xE4, 0x90, 0x06, 0x05, 0xF0, 0x90, 0x06, 0x07, 0x74, 0x03, 0xF0, 0x75, 0xA8, 0x81,
|
||||||
|
0x43, 0x87, 0x01, 0x80, 0x23, 0x90, 0x04, 0x7A, 0xE0, 0x90, 0x45, 0x2E, 0xF0, 0xE0, 0x54, 0x7F,
|
||||||
|
0xF0, 0x90, 0x04, 0x7A, 0xF0, 0x90, 0x10, 0x38, 0x74, 0x07, 0xF0, 0x90, 0x06, 0x05, 0x74, 0x04,
|
||||||
|
0xF0, 0x90, 0x45, 0x47, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x06, 0x20, 0x74, 0x21, 0xF0, 0x90, 0x04,
|
||||||
|
0x58, 0x74, 0x14, 0xF0, 0xA3, 0x74, 0x50, 0xF0, 0x43, 0xA8, 0x81, 0x90, 0x43, 0x19, 0xE0, 0x64,
|
||||||
|
0x01, 0x60, 0x03, 0x02, 0x23, 0xA4, 0xF0, 0x90, 0x06, 0x24, 0xE0, 0x30, 0xE3, 0x03, 0x02, 0x23,
|
||||||
|
0xA4, 0x90, 0x06, 0x25, 0xE0, 0x54, 0xF7, 0xF0, 0x30, 0x04, 0x07, 0xE4, 0x90, 0x06, 0x23, 0xF0,
|
||||||
|
0x80, 0x06, 0x90, 0x06, 0x23, 0x74, 0x80, 0xF0, 0x90, 0x06, 0x24, 0x74, 0x08, 0xF0, 0x90, 0x06,
|
||||||
|
0x25, 0xF0, 0x02, 0x23, 0xA4, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xE0, 0x22, 0x50,
|
||||||
|
0x02, 0xE7, 0x22, 0xBB, 0xFE, 0x02, 0xE3, 0x22, 0x89, 0x82, 0x8A, 0x83, 0xE4, 0x93, 0x22, 0xBB,
|
||||||
|
0x01, 0x0C, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x22, 0x50, 0x06,
|
||||||
|
0xE9, 0x25, 0x82, 0xF8, 0xE6, 0x22, 0xBB, 0xFE, 0x06, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0x22, 0xE5,
|
||||||
|
0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE4, 0x93, 0x22, 0xBB, 0x01, 0x06, 0x89,
|
||||||
|
0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22, 0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB,
|
||||||
|
0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50,
|
||||||
|
0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE, 0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22,
|
||||||
|
0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0, 0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02,
|
||||||
|
0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xA3, 0xF8, 0xE0, 0xC5, 0xF0, 0x25, 0xF0, 0xF0, 0xE5, 0x82,
|
||||||
|
0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0xC8, 0x38, 0xF0, 0xE8, 0x22, 0xBB, 0x01, 0x10, 0xE5,
|
||||||
|
0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50,
|
||||||
|
0x09, 0xE9, 0x25, 0x82, 0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82,
|
||||||
|
0xF8, 0xE2, 0xF5, 0xF0, 0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0,
|
||||||
|
0xA3, 0xE9, 0x93, 0x22, 0xBB, 0x01, 0x0D, 0xC5, 0x82, 0x29, 0xC5, 0x82, 0xC5, 0x83, 0x3A, 0xC5,
|
||||||
|
0x83, 0x02, 0x26, 0xB0, 0x50, 0x11, 0xC5, 0x82, 0x29, 0xF8, 0x08, 0xE5, 0xF0, 0x26, 0xF6, 0x18,
|
||||||
|
0xF5, 0xF0, 0xE5, 0x82, 0x36, 0xF6, 0x22, 0xBB, 0xFE, 0x11, 0xC5, 0x82, 0x29, 0xF8, 0x08, 0xE2,
|
||||||
|
0x25, 0xF0, 0xF5, 0xF0, 0xF2, 0x18, 0xE2, 0x35, 0x82, 0xF2, 0x22, 0xF8, 0xE5, 0x82, 0x29, 0xF5,
|
||||||
|
0x82, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x25, 0xF0, 0xF5, 0xF0, 0xE4, 0x93, 0x38,
|
||||||
|
0x22, 0xF8, 0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8,
|
||||||
|
0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0,
|
||||||
|
0x22, 0xBB, 0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xA4, 0x25,
|
||||||
|
0x82, 0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3,
|
||||||
|
0xE0, 0xF9, 0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15,
|
||||||
|
0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3,
|
||||||
|
0xE9, 0xF0, 0x22, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83,
|
||||||
|
0x02, 0x27, 0x9A, 0x50, 0x07, 0xE9, 0x25, 0x82, 0xF8, 0x02, 0x28, 0xA4, 0xBB, 0xFE, 0x07, 0xE9,
|
||||||
|
0x25, 0x82, 0xF8, 0x02, 0x28, 0xC6, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83,
|
||||||
|
0x02, 0x28, 0xE8, 0xBB, 0x01, 0x0D, 0xC5, 0x82, 0x29, 0xC5, 0x82, 0xC5, 0x83, 0x3A, 0xC5, 0x83,
|
||||||
|
0x02, 0x27, 0xA3, 0x50, 0x08, 0xF8, 0xE9, 0x25, 0x82, 0xC8, 0x02, 0x28, 0xAD, 0xBB, 0xFE, 0x08,
|
||||||
|
0xF8, 0xE9, 0x25, 0x82, 0xC8, 0x02, 0x28, 0xCF, 0xC5, 0x82, 0x29, 0xC5, 0x82, 0xC5, 0x83, 0x3A,
|
||||||
|
0xC5, 0x83, 0x02, 0x28, 0xE8, 0xBB, 0x01, 0x20, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A,
|
||||||
|
0xF5, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0xF8, 0xD0, 0xE0, 0xF9, 0xD0, 0xE0, 0xFA, 0xD0, 0xE0, 0xFB,
|
||||||
|
0xE8, 0xC0, 0xE0, 0xC0, 0xF0, 0x02, 0x27, 0xBA, 0x50, 0x18, 0xE9, 0x25, 0x82, 0xF8, 0xD0, 0x83,
|
||||||
|
0xD0, 0x82, 0xD0, 0xE0, 0xF9, 0xD0, 0xE0, 0xFA, 0xD0, 0xE0, 0xFB, 0xC0, 0x82, 0xC0, 0x83, 0x02,
|
||||||
|
0x28, 0xBD, 0xBB, 0xFE, 0x18, 0xE9, 0x25, 0x82, 0xF8, 0xD0, 0x83, 0xD0, 0x82, 0xD0, 0xE0, 0xF9,
|
||||||
|
0xD0, 0xE0, 0xFA, 0xD0, 0xE0, 0xFB, 0xC0, 0x82, 0xC0, 0x83, 0x02, 0x28, 0xDF, 0x22, 0xD0, 0x83,
|
||||||
|
0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8,
|
||||||
|
0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68, 0x60, 0xEF, 0xA3,
|
||||||
|
0xA3, 0xA3, 0x80, 0xDF, 0xE6, 0xFB, 0x08, 0xE6, 0xFA, 0x08, 0xE6, 0xF9, 0x22, 0xFA, 0xE6, 0xFB,
|
||||||
|
0x08, 0x08, 0xE6, 0xF9, 0x25, 0xF0, 0xF6, 0x18, 0xE6, 0xCA, 0x3A, 0xF6, 0x22, 0xEB, 0xF6, 0x08,
|
||||||
|
0xEA, 0xF6, 0x08, 0xE9, 0xF6, 0x22, 0xE2, 0xFB, 0x08, 0xE2, 0xFA, 0x08, 0xE2, 0xF9, 0x22, 0xFA,
|
||||||
|
0xE2, 0xFB, 0x08, 0x08, 0xE2, 0xF9, 0x25, 0xF0, 0xF2, 0x18, 0xE2, 0xCA, 0x3A, 0xF2, 0x22, 0xEB,
|
||||||
|
0xF2, 0x08, 0xEA, 0xF2, 0x08, 0xE9, 0xF2, 0x22, 0xE4, 0x93, 0xFB, 0x74, 0x01, 0x93, 0xFA, 0x74,
|
||||||
|
0x02, 0x93, 0xF9, 0x22, 0x90, 0x06, 0x23, 0xE0, 0x54, 0x7F, 0xFF, 0xC3, 0x74, 0x40, 0x9F, 0x90,
|
||||||
|
0x45, 0x31, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x10, 0x3D, 0xE0, 0x64, 0x0B, 0x60, 0x03, 0x02, 0x2A,
|
||||||
|
0x60, 0x90, 0x10, 0x44, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x43, 0x21, 0xE0, 0x2F, 0x90, 0x45,
|
||||||
|
0x34, 0xF0, 0x90, 0x43, 0x20, 0xE0, 0x3E, 0x90, 0x45, 0x33, 0xF0, 0x90, 0x45, 0x31, 0xE0, 0x70,
|
||||||
|
0x03, 0x02, 0x2A, 0xA6, 0x14, 0xF0, 0x90, 0x43, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xEE, 0x60,
|
||||||
|
0x03, 0x02, 0x2A, 0x57, 0xEF, 0x12, 0x28, 0x7E, 0x29, 0x6A, 0x01, 0x29, 0x94, 0x02, 0x29, 0xB5,
|
||||||
|
0x03, 0x29, 0xDE, 0x04, 0x29, 0xFE, 0x07, 0x2A, 0x31, 0x09, 0x2A, 0x31, 0x0A, 0x2A, 0x31, 0x0B,
|
||||||
|
0x2A, 0x31, 0x0C, 0x2A, 0x31, 0x0D, 0x00, 0x00, 0x2A, 0x57, 0x90, 0x45, 0x32, 0xE0, 0x24, 0x60,
|
||||||
|
0xF5, 0x82, 0xE4, 0x34, 0x06, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x45, 0x33, 0xE4, 0x75, 0xF0, 0x01,
|
||||||
|
0x12, 0x26, 0xC6, 0xFC, 0x74, 0x00, 0x25, 0xF0, 0xF5, 0x82, 0x74, 0x00, 0x3C, 0xF5, 0x83, 0xEF,
|
||||||
|
0xF0, 0x02, 0x2A, 0x57, 0x90, 0x45, 0x33, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xC6, 0xAF, 0xF0,
|
||||||
|
0x90, 0x45, 0x32, 0xE0, 0x24, 0x60, 0xF5, 0x82, 0xE4, 0x34, 0x06, 0xF5, 0x83, 0xE0, 0xFD, 0x12,
|
||||||
|
0x3D, 0x00, 0x02, 0x2A, 0x57, 0x90, 0x45, 0x32, 0xE0, 0x24, 0x60, 0xF5, 0x82, 0xE4, 0x34, 0x06,
|
||||||
|
0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x45, 0x33, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xC6, 0xFC, 0x74,
|
||||||
|
0x00, 0x25, 0xF0, 0xF5, 0x82, 0x74, 0x04, 0x3C, 0xF5, 0x83, 0xEF, 0xF0, 0x80, 0x79, 0x90, 0x45,
|
||||||
|
0x33, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xC6, 0xAF, 0xF0, 0x90, 0x45, 0x32, 0xE0, 0x24, 0x60,
|
||||||
|
0xF5, 0x82, 0xE4, 0x34, 0x06, 0xF5, 0x83, 0xE0, 0xFD, 0x12, 0x3A, 0x33, 0x80, 0x59, 0x90, 0x45,
|
||||||
|
0x32, 0xE0, 0x24, 0x60, 0xF5, 0x82, 0xE4, 0x34, 0x06, 0xF5, 0x83, 0xE0, 0xFD, 0x7F, 0xF1, 0x12,
|
||||||
|
0x3D, 0x00, 0x90, 0x45, 0x34, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0xF0, 0x12, 0x3D, 0x00, 0x90, 0x45,
|
||||||
|
0x33, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xC6, 0xAD, 0xF0, 0x7F, 0xF0, 0x12, 0x3D, 0x00, 0x80,
|
||||||
|
0x26, 0x90, 0x43, 0x22, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x45, 0x33, 0xE4, 0x75, 0xF0, 0x01,
|
||||||
|
0x12, 0x26, 0xC6, 0xAD, 0xF0, 0x90, 0x45, 0x32, 0xE0, 0x24, 0x60, 0xF5, 0x82, 0xE4, 0x34, 0x06,
|
||||||
|
0xF5, 0x83, 0xE0, 0xFB, 0x12, 0x3A, 0xAE, 0x90, 0x45, 0x32, 0xE0, 0x04, 0xF0, 0x02, 0x29, 0x2B,
|
||||||
|
0x90, 0x10, 0x3D, 0xE0, 0xFF, 0xB4, 0x0D, 0x2D, 0x90, 0x45, 0x31, 0xE0, 0x60, 0x38, 0xA3, 0xE0,
|
||||||
|
0xFE, 0x04, 0xF0, 0x74, 0x60, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x06, 0xF5, 0x83, 0xE0, 0xFE, 0x90,
|
||||||
|
0x10, 0x3F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x27, 0xA3, 0xEE, 0x12, 0x26, 0x7C, 0x90, 0x45, 0x31,
|
||||||
|
0xE0, 0x14, 0xF0, 0x80, 0xD3, 0xEF, 0xB4, 0x0C, 0x07, 0xC2, 0x8C, 0xE4, 0x90, 0x43, 0x19, 0xF0,
|
||||||
|
0xE4, 0x90, 0x10, 0x3D, 0xF0, 0x22, 0x30, 0x04, 0x0A, 0xC2, 0x04, 0x90, 0x06, 0x23, 0x74, 0xC0,
|
||||||
|
0xF0, 0x80, 0x08, 0xD2, 0x04, 0x90, 0x06, 0x23, 0x74, 0x40, 0xF0, 0x90, 0x45, 0x32, 0xE0, 0xFF,
|
||||||
|
0x90, 0x10, 0x44, 0xE4, 0x8F, 0xF0, 0x12, 0x26, 0xB0, 0x90, 0x10, 0x42, 0xE0, 0xFE, 0xA3, 0xE0,
|
||||||
|
0xFF, 0xA3, 0xE0, 0xB5, 0x06, 0x19, 0xA3, 0xE0, 0xB5, 0x07, 0x14, 0x90, 0x10, 0x3D, 0xE0, 0xB4,
|
||||||
|
0x0D, 0x03, 0x12, 0x1E, 0x87, 0x90, 0x06, 0x23, 0x74, 0x80, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0x90,
|
||||||
|
0x06, 0x25, 0x74, 0x08, 0xF0, 0x22, 0x90, 0x45, 0x38, 0x12, 0x27, 0xBA, 0x12, 0x26, 0x36, 0x60,
|
||||||
|
0x03, 0x02, 0x2B, 0x8F, 0x7F, 0x1C, 0x12, 0x3B, 0x25, 0x90, 0x45, 0x3B, 0x12, 0x27, 0x9A, 0x90,
|
||||||
|
0x00, 0x08, 0xEF, 0x12, 0x26, 0x8E, 0x7F, 0x1D, 0x12, 0x3B, 0x25, 0x90, 0x45, 0x3B, 0x12, 0x27,
|
||||||
|
0x9A, 0x90, 0x00, 0x09, 0xEF, 0x12, 0x26, 0x8E, 0x7F, 0x1B, 0x12, 0x3B, 0x25, 0x90, 0x45, 0x3B,
|
||||||
|
0x12, 0x27, 0x9A, 0x90, 0x00, 0x07, 0xEF, 0x12, 0x26, 0x8E, 0xE9, 0x24, 0x07, 0xF9, 0xE4, 0x3A,
|
||||||
|
0xFA, 0x12, 0x26, 0x36, 0x54, 0x7F, 0x12, 0x26, 0x7C, 0x90, 0x45, 0x3B, 0x12, 0x27, 0x9A, 0x90,
|
||||||
|
0x00, 0x07, 0x12, 0x26, 0x4F, 0x90, 0x45, 0x45, 0xF0, 0x90, 0x04, 0x2B, 0x74, 0xFF, 0xF0, 0x12,
|
||||||
|
0x3C, 0x43, 0x90, 0x45, 0x3B, 0x12, 0x27, 0x9A, 0x90, 0x00, 0x07, 0x12, 0x26, 0x4F, 0xFF, 0x12,
|
||||||
|
0x3D, 0x62, 0x90, 0x45, 0x3B, 0x12, 0x27, 0x9A, 0x90, 0x00, 0x08, 0x12, 0x26, 0x4F, 0xFD, 0x90,
|
||||||
|
0x40, 0xC0, 0xF0, 0x90, 0x00, 0x07, 0x12, 0x26, 0x4F, 0xFF, 0x12, 0x39, 0x2D, 0x80, 0x1B, 0x12,
|
||||||
|
0x3D, 0xE2, 0x90, 0x04, 0x54, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x06, 0x38, 0x74, 0x03, 0xF0, 0x12,
|
||||||
|
0x3D, 0x31, 0x90, 0x04, 0x48, 0x74, 0x02, 0xF0, 0x14, 0xF0, 0xE4, 0xFF, 0xFE, 0x74, 0xC4, 0x2F,
|
||||||
|
0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xFD, 0x90, 0x45, 0x3B, 0x12, 0x27, 0x9A, 0xE9,
|
||||||
|
0x24, 0x01, 0xF9, 0xE4, 0x3A, 0xFA, 0xE9, 0x2F, 0xF9, 0xEA, 0x3E, 0xFA, 0xED, 0x12, 0x26, 0x7C,
|
||||||
|
0x0F, 0xBF, 0x00, 0x01, 0x0E, 0xEF, 0x64, 0x06, 0x4E, 0x70, 0xD2, 0x90, 0x45, 0x38, 0x12, 0x27,
|
||||||
|
0x9A, 0x90, 0x00, 0x01, 0x12, 0x26, 0x4F, 0x60, 0x31, 0xE4, 0xFE, 0xFF, 0x90, 0x45, 0x38, 0x12,
|
||||||
|
0x27, 0x9A, 0xE9, 0x24, 0x02, 0xF9, 0xE4, 0x3A, 0xFA, 0xE9, 0x2F, 0xF9, 0xEA, 0x3E, 0xFA, 0x12,
|
||||||
|
0x26, 0x36, 0xFD, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x0F,
|
||||||
|
0xBF, 0x00, 0x01, 0x0E, 0xEF, 0x64, 0x06, 0x4E, 0x70, 0xD2, 0x90, 0x45, 0x38, 0x12, 0x27, 0x9A,
|
||||||
|
0x90, 0x00, 0x08, 0x12, 0x26, 0x4F, 0x90, 0x04, 0x21, 0xF0, 0x90, 0x00, 0x09, 0x12, 0x26, 0x4F,
|
||||||
|
0x90, 0x04, 0x20, 0xF0, 0x90, 0x04, 0x50, 0xE0, 0x44, 0x82, 0xF0, 0x90, 0x04, 0x54, 0x74, 0x0E,
|
||||||
|
0xF0, 0x90, 0x45, 0x3B, 0x12, 0x27, 0x9A, 0xE4, 0x12, 0x26, 0x7C, 0xD3, 0x22, 0xAC, 0x07, 0xAA,
|
||||||
|
0x05, 0xD2, 0x03, 0x90, 0x04, 0x78, 0xE0, 0x54, 0xFE, 0xF0, 0xEC, 0xD3, 0x94, 0x0E, 0x40, 0x03,
|
||||||
|
0x02, 0x2C, 0xFA, 0xEA, 0x94, 0x0E, 0x50, 0x03, 0x02, 0x2C, 0xFA, 0x90, 0x40, 0xC9, 0xE0, 0xFD,
|
||||||
|
0x90, 0x40, 0xC8, 0xE0, 0xFB, 0x90, 0x40, 0xC7, 0x12, 0x3C, 0x89, 0x82, 0x03, 0x92, 0x03, 0x90,
|
||||||
|
0x40, 0xCC, 0xE0, 0xFD, 0x90, 0x40, 0xCB, 0xE0, 0xFB, 0x90, 0x40, 0xCA, 0x12, 0x3C, 0x89, 0x82,
|
||||||
|
0x03, 0x92, 0x03, 0x90, 0x40, 0xD2, 0xE0, 0xFD, 0x90, 0x40, 0xD1, 0xE0, 0xFB, 0x90, 0x40, 0xD0,
|
||||||
|
0x12, 0x3C, 0x89, 0x82, 0x03, 0x92, 0x03, 0x90, 0x40, 0xD8, 0xE0, 0xFD, 0x90, 0x40, 0xD7, 0xE0,
|
||||||
|
0xFB, 0x90, 0x40, 0xD6, 0x12, 0x3C, 0x89, 0x82, 0x03, 0x92, 0x03, 0x90, 0x40, 0xE1, 0xE0, 0xFD,
|
||||||
|
0x90, 0x40, 0xE0, 0xE0, 0xFB, 0x90, 0x40, 0xDF, 0x12, 0x3C, 0x89, 0x82, 0x03, 0x92, 0x03, 0x90,
|
||||||
|
0x40, 0xE7, 0xE0, 0xFD, 0x90, 0x40, 0xE6, 0xE0, 0xFB, 0x90, 0x40, 0xE5, 0x12, 0x3C, 0x89, 0x82,
|
||||||
|
0x03, 0x92, 0x03, 0x90, 0x40, 0xF0, 0xE0, 0xFD, 0x90, 0x40, 0xEF, 0xE0, 0xFB, 0x90, 0x40, 0xEE,
|
||||||
|
0x12, 0x3C, 0x89, 0x82, 0x03, 0x92, 0x03, 0x02, 0x2D, 0x98, 0xEC, 0xD3, 0x94, 0x0E, 0x50, 0x03,
|
||||||
|
0x02, 0x2D, 0x98, 0xEA, 0xD3, 0x94, 0x0E, 0x40, 0x03, 0x02, 0x2D, 0x98, 0x90, 0x42, 0xF1, 0xE0,
|
||||||
|
0xFD, 0x90, 0x42, 0xF0, 0xE0, 0xFB, 0x90, 0x42, 0xEF, 0x12, 0x3C, 0x89, 0x82, 0x03, 0x92, 0x03,
|
||||||
|
0x90, 0x42, 0xF4, 0xE0, 0xFD, 0x90, 0x42, 0xF3, 0xE0, 0xFB, 0x90, 0x42, 0xF2, 0x12, 0x3C, 0x89,
|
||||||
|
0x82, 0x03, 0x92, 0x03, 0x90, 0x42, 0xFA, 0xE0, 0xFD, 0x90, 0x42, 0xF9, 0xE0, 0xFB, 0x90, 0x42,
|
||||||
|
0xF8, 0x12, 0x3C, 0x89, 0x82, 0x03, 0x92, 0x03, 0x90, 0x43, 0x00, 0xE0, 0xFD, 0x90, 0x42, 0xFF,
|
||||||
|
0xE0, 0xFB, 0x90, 0x42, 0xFE, 0x12, 0x3C, 0x89, 0x82, 0x03, 0x92, 0x03, 0x90, 0x43, 0x09, 0xE0,
|
||||||
|
0xFD, 0x90, 0x43, 0x08, 0xE0, 0xFB, 0x90, 0x43, 0x07, 0x12, 0x3C, 0x89, 0x82, 0x03, 0x92, 0x03,
|
||||||
|
0x90, 0x43, 0x0F, 0xE0, 0xFD, 0x90, 0x43, 0x0E, 0xE0, 0xFB, 0x90, 0x43, 0x0D, 0x12, 0x3C, 0x89,
|
||||||
|
0x82, 0x03, 0x92, 0x03, 0x90, 0x43, 0x18, 0xE0, 0xFD, 0x90, 0x43, 0x17, 0xE0, 0xFB, 0x90, 0x43,
|
||||||
|
0x16, 0x12, 0x3C, 0x89, 0x82, 0x03, 0x92, 0x03, 0x90, 0x04, 0x78, 0xE0, 0x44, 0x01, 0xF0, 0xA2,
|
||||||
|
0x03, 0x22, 0xAC, 0x07, 0xAA, 0x05, 0xD2, 0x03, 0xEC, 0xD3, 0x94, 0x0E, 0x40, 0x03, 0x02, 0x2E,
|
||||||
|
0x43, 0xEA, 0x94, 0x0E, 0x50, 0x03, 0x02, 0x2E, 0x43, 0x90, 0x40, 0xC9, 0xE0, 0xFD, 0x90, 0x40,
|
||||||
|
0xC8, 0xE0, 0xFB, 0x90, 0x40, 0xC7, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90,
|
||||||
|
0x82, 0x03, 0x92, 0x03, 0x90, 0x40, 0xD8, 0xE0, 0xFD, 0x90, 0x40, 0xD7, 0xE0, 0xFB, 0x90, 0x40,
|
||||||
|
0xD6, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x03, 0x92, 0x03, 0x90,
|
||||||
|
0x40, 0xDE, 0xE0, 0xFD, 0x90, 0x40, 0xDD, 0xE0, 0xFB, 0x90, 0x40, 0xDC, 0xE0, 0x90, 0x45, 0x44,
|
||||||
|
0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x03, 0x92, 0x03, 0x90, 0x40, 0xE7, 0xE0, 0xFD, 0x90,
|
||||||
|
0x40, 0xE6, 0xE0, 0xFB, 0x90, 0x40, 0xE5, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C,
|
||||||
|
0x90, 0x82, 0x03, 0x92, 0x03, 0x90, 0x40, 0xED, 0xE0, 0xFD, 0x90, 0x40, 0xEC, 0xE0, 0xFB, 0x90,
|
||||||
|
0x40, 0xEB, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x03, 0x92, 0x03,
|
||||||
|
0x02, 0x2E, 0xDC, 0xEC, 0xD3, 0x94, 0x0E, 0x50, 0x03, 0x02, 0x2E, 0xDC, 0xEA, 0xD3, 0x94, 0x0E,
|
||||||
|
0x40, 0x03, 0x02, 0x2E, 0xDC, 0x90, 0x42, 0xF1, 0xE0, 0xFD, 0x90, 0x42, 0xF0, 0xE0, 0xFB, 0x90,
|
||||||
|
0x42, 0xEF, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x03, 0x92, 0x03,
|
||||||
|
0x90, 0x43, 0x00, 0xE0, 0xFD, 0x90, 0x42, 0xFF, 0xE0, 0xFB, 0x90, 0x42, 0xFE, 0xE0, 0x90, 0x45,
|
||||||
|
0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x03, 0x92, 0x03, 0x90, 0x43, 0x06, 0xE0, 0xFD,
|
||||||
|
0x90, 0x43, 0x05, 0xE0, 0xFB, 0x90, 0x43, 0x04, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12,
|
||||||
|
0x3C, 0x90, 0x82, 0x03, 0x92, 0x03, 0x90, 0x43, 0x0F, 0xE0, 0xFD, 0x90, 0x43, 0x0E, 0xE0, 0xFB,
|
||||||
|
0x90, 0x43, 0x0D, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x03, 0x92,
|
||||||
|
0x03, 0x90, 0x43, 0x15, 0xE0, 0xFD, 0x90, 0x43, 0x14, 0xE0, 0xFB, 0x90, 0x43, 0x13, 0xE0, 0x90,
|
||||||
|
0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x03, 0x92, 0x03, 0xA2, 0x03, 0x22, 0x90,
|
||||||
|
0x45, 0x40, 0xEF, 0xF0, 0xD2, 0x02, 0x90, 0x40, 0xC0, 0xE0, 0xFF, 0x90, 0x45, 0x40, 0xE0, 0xFD,
|
||||||
|
0x12, 0x2D, 0xA2, 0x82, 0x02, 0x92, 0x02, 0x90, 0x45, 0x40, 0xE0, 0xFC, 0xD3, 0x94, 0x0E, 0x50,
|
||||||
|
0x10, 0xE4, 0x90, 0x45, 0x44, 0xF0, 0x7B, 0x8A, 0x7D, 0xF1, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x80,
|
||||||
|
0x3A, 0xEC, 0xD3, 0x94, 0x28, 0x50, 0x10, 0xE4, 0x90, 0x45, 0x44, 0xF0, 0x7B, 0x8B, 0x7D, 0xF1,
|
||||||
|
0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x80, 0x24, 0xEC, 0xD3, 0x94, 0x33, 0x50, 0x10, 0xE4, 0x90, 0x45,
|
||||||
|
0x44, 0xF0, 0x7B, 0x8B, 0x7D, 0xB1, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x80, 0x0E, 0xE4, 0x90, 0x45,
|
||||||
|
0x44, 0xF0, 0x7B, 0x8B, 0x7D, 0x91, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x90, 0x45, 0x40, 0xE0, 0xFF,
|
||||||
|
0x75, 0xF0, 0x03, 0xA4, 0x24, 0xF0, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE0, 0xFD, 0xEF,
|
||||||
|
0x75, 0xF0, 0x03, 0xA4, 0x24, 0xEF, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE0, 0xFB, 0xEF,
|
||||||
|
0x75, 0xF0, 0x03, 0xA4, 0x24, 0xEE, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE0, 0x90, 0x45,
|
||||||
|
0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x02, 0x92, 0x02, 0x90, 0x45, 0x40, 0xE0, 0xFF,
|
||||||
|
0x75, 0xF0, 0x03, 0xA4, 0x24, 0x98, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE0, 0xFD, 0xEF,
|
||||||
|
0x75, 0xF0, 0x03, 0xA4, 0x24, 0x97, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE0, 0xFB, 0xEF,
|
||||||
|
0x75, 0xF0, 0x03, 0xA4, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE0, 0x90, 0x45,
|
||||||
|
0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x02, 0x92, 0x02, 0x90, 0x45, 0x40, 0xE0, 0xFF,
|
||||||
|
0x75, 0xF0, 0x03, 0xA4, 0x24, 0x40, 0xF5, 0x82, 0xE4, 0x34, 0x42, 0xF5, 0x83, 0xE0, 0xFD, 0xEF,
|
||||||
|
0x75, 0xF0, 0x03, 0xA4, 0x24, 0x3F, 0xF5, 0x82, 0xE4, 0x34, 0x42, 0xF5, 0x83, 0xE0, 0xFB, 0xEF,
|
||||||
|
0x75, 0xF0, 0x03, 0xA4, 0x24, 0x3E, 0xF5, 0x82, 0xE4, 0x34, 0x42, 0xF5, 0x83, 0xE0, 0x90, 0x45,
|
||||||
|
0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x02, 0x92, 0x02, 0xE4, 0x90, 0x45, 0x44, 0xF0,
|
||||||
|
0xFB, 0xFD, 0x7F, 0xC8, 0x12, 0x3D, 0x90, 0xA2, 0x02, 0x22, 0xD2, 0x01, 0xE4, 0x90, 0x04, 0x78,
|
||||||
|
0xF0, 0xA3, 0x74, 0x13, 0xF0, 0x7B, 0x01, 0x7A, 0x45, 0x79, 0x40, 0x7F, 0x0D, 0x12, 0x3C, 0xCD,
|
||||||
|
0x90, 0x45, 0x40, 0xE0, 0x54, 0xFE, 0xFF, 0xF0, 0xFD, 0x7F, 0x0D, 0x12, 0x3D, 0x00, 0xE4, 0x90,
|
||||||
|
0x45, 0x3E, 0xF0, 0xA3, 0xF0, 0x90, 0x45, 0x3E, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x94, 0x10,
|
||||||
|
0xEE, 0x64, 0x80, 0x94, 0x80, 0x50, 0x57, 0x90, 0x42, 0xEB, 0x75, 0xF0, 0x03, 0xEF, 0x12, 0x27,
|
||||||
|
0x8E, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0x25, 0x83, 0xF5, 0x83, 0xE0, 0xFD, 0x90, 0x42, 0xEA, 0x75,
|
||||||
|
0xF0, 0x03, 0xEF, 0x12, 0x27, 0x8E, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0x25, 0x83, 0xF5, 0x83, 0xE0,
|
||||||
|
0xFB, 0x90, 0x42, 0xE9, 0x75, 0xF0, 0x03, 0xEF, 0x12, 0x27, 0x8E, 0xEE, 0x75, 0xF0, 0x03, 0xA4,
|
||||||
|
0x25, 0x83, 0xF5, 0x83, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x01,
|
||||||
|
0x92, 0x01, 0x90, 0x45, 0x3E, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xB0, 0x80, 0x97, 0x90, 0x04,
|
||||||
|
0x78, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x45, 0x44, 0xF0, 0xFB, 0xFD, 0x7F, 0x96, 0x12, 0x3D, 0x90,
|
||||||
|
0x90, 0x45, 0x44, 0x74, 0x9A, 0xF0, 0x7B, 0xBA, 0x7D, 0x8F, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82,
|
||||||
|
0x01, 0x92, 0x01, 0xE4, 0x90, 0x45, 0x44, 0xF0, 0xFB, 0xFD, 0x7F, 0x1E, 0x12, 0x3D, 0x90, 0x90,
|
||||||
|
0x45, 0x44, 0x74, 0x3A, 0xF0, 0x7B, 0xBA, 0x7D, 0x8F, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x01,
|
||||||
|
0x92, 0x01, 0xE4, 0x90, 0x45, 0x44, 0xF0, 0xFB, 0xFD, 0x7F, 0x1E, 0x12, 0x3D, 0x90, 0x90, 0x43,
|
||||||
|
0x18, 0xE0, 0xFD, 0x90, 0x43, 0x17, 0xE0, 0xFB, 0x90, 0x43, 0x16, 0xE0, 0x90, 0x45, 0x44, 0xF0,
|
||||||
|
0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x01, 0x92, 0x01, 0x90, 0x04, 0x79, 0x74, 0x13, 0xF0, 0x90,
|
||||||
|
0x04, 0x78, 0x74, 0x05, 0xF0, 0x7B, 0x01, 0x7A, 0x45, 0x79, 0x40, 0x7F, 0x0D, 0x12, 0x3C, 0xCD,
|
||||||
|
0x90, 0x45, 0x40, 0xE0, 0x44, 0x01, 0xFF, 0xF0, 0xFD, 0x7F, 0x0D, 0x12, 0x3D, 0x00, 0x90, 0x04,
|
||||||
|
0x62, 0x74, 0xC0, 0xF0, 0xA2, 0x01, 0x22, 0xD2, 0x01, 0xE4, 0x90, 0x04, 0x78, 0xF0, 0xA3, 0x74,
|
||||||
|
0x13, 0xF0, 0xE4, 0x90, 0x45, 0x3E, 0xF0, 0xA3, 0xF0, 0x90, 0x45, 0x3E, 0xE0, 0xFE, 0xA3, 0xE0,
|
||||||
|
0xFF, 0xC3, 0x94, 0x0F, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x50, 0x57, 0x90, 0x42, 0xEB, 0x75, 0xF0,
|
||||||
|
0x03, 0xEF, 0x12, 0x27, 0x8E, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0x25, 0x83, 0xF5, 0x83, 0xE0, 0xFD,
|
||||||
|
0x90, 0x42, 0xEA, 0x75, 0xF0, 0x03, 0xEF, 0x12, 0x27, 0x8E, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0x25,
|
||||||
|
0x83, 0xF5, 0x83, 0xE0, 0xFB, 0x90, 0x42, 0xE9, 0x75, 0xF0, 0x03, 0xEF, 0x12, 0x27, 0x8E, 0xEE,
|
||||||
|
0x75, 0xF0, 0x03, 0xA4, 0x25, 0x83, 0xF5, 0x83, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12,
|
||||||
|
0x3C, 0x90, 0x82, 0x01, 0x92, 0x01, 0x90, 0x45, 0x3E, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xB0,
|
||||||
|
0x80, 0x97, 0x90, 0x04, 0x78, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x45, 0x44, 0xF0, 0xFB, 0xFD, 0x7F,
|
||||||
|
0x96, 0x12, 0x3D, 0x90, 0xE4, 0x90, 0x45, 0x44, 0xF0, 0x7B, 0xD8, 0x7D, 0x0F, 0x7F, 0xB9, 0x12,
|
||||||
|
0x3C, 0x90, 0x82, 0x01, 0x92, 0x01, 0xE4, 0x90, 0x45, 0x44, 0xF0, 0xFB, 0xFD, 0x7F, 0x1E, 0x12,
|
||||||
|
0x3D, 0x90, 0xE4, 0x90, 0x45, 0x44, 0xF0, 0x7B, 0x78, 0x7D, 0x0F, 0x7F, 0xB9, 0x12, 0x3C, 0x90,
|
||||||
|
0x82, 0x01, 0x92, 0x01, 0xE4, 0x90, 0x45, 0x44, 0xF0, 0xFB, 0xFD, 0x7F, 0x1E, 0x12, 0x3D, 0x90,
|
||||||
|
0x90, 0x43, 0x15, 0xE0, 0xFD, 0x90, 0x43, 0x14, 0xE0, 0xFB, 0x90, 0x43, 0x13, 0xE0, 0x90, 0x45,
|
||||||
|
0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x01, 0x92, 0x01, 0x90, 0x04, 0x78, 0x74, 0x05,
|
||||||
|
0xF0, 0x90, 0x04, 0x62, 0x74, 0xC0, 0xF0, 0xA2, 0x01, 0x22, 0x90, 0x45, 0x40, 0xEF, 0xF0, 0xD2,
|
||||||
|
0x02, 0x90, 0x04, 0x78, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0x45, 0x40, 0xE0, 0xFF, 0x75, 0xF0, 0x03,
|
||||||
|
0xA4, 0x24, 0xF0, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE0, 0xFD, 0xEF, 0x75, 0xF0, 0x03,
|
||||||
|
0xA4, 0x24, 0xEF, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE0, 0xFB, 0xEF, 0x75, 0xF0, 0x03,
|
||||||
|
0xA4, 0x24, 0xEE, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F,
|
||||||
|
0xB9, 0x12, 0x3C, 0x90, 0x82, 0x02, 0x92, 0x02, 0x90, 0x45, 0x40, 0xE0, 0xFF, 0x75, 0xF0, 0x03,
|
||||||
|
0xA4, 0x24, 0x98, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE0, 0xFD, 0xEF, 0x75, 0xF0, 0x03,
|
||||||
|
0xA4, 0x24, 0x97, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE0, 0xFB, 0xEF, 0x75, 0xF0, 0x03,
|
||||||
|
0xA4, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F,
|
||||||
|
0xB9, 0x12, 0x3C, 0x90, 0x82, 0x02, 0x92, 0x02, 0x90, 0x45, 0x40, 0xE0, 0xFF, 0x75, 0xF0, 0x03,
|
||||||
|
0xA4, 0x24, 0x40, 0xF5, 0x82, 0xE4, 0x34, 0x42, 0xF5, 0x83, 0xE0, 0xFD, 0xEF, 0x75, 0xF0, 0x03,
|
||||||
|
0xA4, 0x24, 0x3F, 0xF5, 0x82, 0xE4, 0x34, 0x42, 0xF5, 0x83, 0xE0, 0xFB, 0xEF, 0x75, 0xF0, 0x03,
|
||||||
|
0xA4, 0x24, 0x3E, 0xF5, 0x82, 0xE4, 0x34, 0x42, 0xF5, 0x83, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F,
|
||||||
|
0xB9, 0x12, 0x3C, 0x90, 0x82, 0x02, 0x92, 0x02, 0x90, 0x04, 0x78, 0xE0, 0x44, 0x01, 0xF0, 0xE4,
|
||||||
|
0x90, 0x45, 0x44, 0xF0, 0xFB, 0xFD, 0x7F, 0xC8, 0x12, 0x3D, 0x90, 0x90, 0x40, 0xC0, 0xE0, 0xFF,
|
||||||
|
0x90, 0x45, 0x40, 0xE0, 0xFD, 0x12, 0x2C, 0x4D, 0xA2, 0x02, 0x22, 0x90, 0x45, 0x31, 0x12, 0x27,
|
||||||
|
0xBA, 0xE4, 0xFF, 0x90, 0x04, 0x48, 0xE0, 0x44, 0x10, 0xF0, 0xE4, 0xFD, 0xFC, 0x90, 0x04, 0x48,
|
||||||
|
0xE0, 0xFF, 0x30, 0xE4, 0x0B, 0x0D, 0xBD, 0x00, 0x01, 0x0C, 0xBC, 0x07, 0xF0, 0xBD, 0xFF, 0xED,
|
||||||
|
0xAE, 0x04, 0xAF, 0x05, 0xBE, 0x07, 0x05, 0xBF, 0xFF, 0x02, 0xC3, 0x22, 0x90, 0x04, 0x30, 0xE0,
|
||||||
|
0xFF, 0x90, 0x45, 0x31, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x27, 0xA3, 0xEF, 0x12, 0x26, 0x7C, 0x90,
|
||||||
|
0x04, 0x31, 0xE0, 0xFF, 0x90, 0x45, 0x31, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x27, 0xA3, 0xEF, 0x12,
|
||||||
|
0x26, 0x7C, 0x90, 0x04, 0x32, 0xE0, 0xFF, 0x90, 0x45, 0x31, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x27,
|
||||||
|
0xA3, 0xEF, 0x12, 0x26, 0x7C, 0x90, 0x04, 0x33, 0xE0, 0xFF, 0x90, 0x45, 0x31, 0xE4, 0x75, 0xF0,
|
||||||
|
0x01, 0x12, 0x27, 0xA3, 0xEF, 0x12, 0x26, 0x7C, 0x90, 0x04, 0x34, 0xE0, 0xFF, 0x90, 0x45, 0x31,
|
||||||
|
0xE4, 0x75, 0xF0, 0x01, 0x12, 0x27, 0xA3, 0xEF, 0x12, 0x26, 0x7C, 0x90, 0x04, 0x35, 0xE0, 0xFF,
|
||||||
|
0x90, 0x45, 0x31, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x27, 0xA3, 0xEF, 0x12, 0x26, 0x7C, 0x90, 0x04,
|
||||||
|
0x36, 0xE0, 0xFF, 0x90, 0x45, 0x31, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x27, 0xA3, 0xEF, 0x12, 0x26,
|
||||||
|
0x7C, 0x90, 0x04, 0x37, 0xE0, 0xFF, 0x90, 0x45, 0x31, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x27, 0xA3,
|
||||||
|
0xEF, 0x12, 0x26, 0x7C, 0xD3, 0x22, 0x7B, 0x01, 0x7A, 0x10, 0x79, 0x34, 0x90, 0x45, 0x3A, 0x12,
|
||||||
|
0x27, 0xBA, 0x90, 0x45, 0x3A, 0x12, 0x27, 0x9A, 0x90, 0x00, 0x12, 0x12, 0x27, 0xC3, 0xC0, 0x03,
|
||||||
|
0xC0, 0x02, 0xC0, 0x01, 0x90, 0x45, 0x3A, 0x12, 0x27, 0x9A, 0x90, 0x00, 0x15, 0x12, 0x28, 0x25,
|
||||||
|
0x90, 0x45, 0x3A, 0x12, 0x27, 0x9A, 0x90, 0x00, 0x18, 0x12, 0x26, 0xDC, 0xFF, 0x90, 0x00, 0x1A,
|
||||||
|
0xE5, 0xF0, 0x8F, 0xF0, 0x12, 0x27, 0x61, 0xE4, 0xFF, 0xEF, 0xC3, 0x94, 0x40, 0x50, 0x44, 0x90,
|
||||||
|
0x45, 0x3A, 0x12, 0x27, 0x9A, 0x90, 0x00, 0x18, 0x12, 0x26, 0xDC, 0xD3, 0x94, 0x00, 0xE5, 0xF0,
|
||||||
|
0x94, 0x00, 0x40, 0x2F, 0x90, 0x00, 0x12, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x27, 0xF3, 0x12, 0x26,
|
||||||
|
0x36, 0xFE, 0xAD, 0x07, 0x0F, 0x74, 0x60, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x06, 0xF5, 0x83, 0xEE,
|
||||||
|
0xF0, 0x90, 0x45, 0x3A, 0x12, 0x27, 0x9A, 0x90, 0x00, 0x18, 0x74, 0xFF, 0xF5, 0xF0, 0x12, 0x27,
|
||||||
|
0x14, 0x80, 0xB6, 0xEF, 0x70, 0x17, 0x90, 0x06, 0x23, 0x74, 0x80, 0xF0, 0xE4, 0xA3, 0xF0, 0x90,
|
||||||
|
0x10, 0x3D, 0xE0, 0xB4, 0x0C, 0x1C, 0x12, 0x3E, 0x36, 0xD2, 0x8C, 0x80, 0x15, 0x30, 0x04, 0x0B,
|
||||||
|
0xC2, 0x04, 0xEF, 0x44, 0x80, 0x90, 0x06, 0x23, 0xF0, 0x80, 0x07, 0xD2, 0x04, 0x90, 0x06, 0x23,
|
||||||
|
0xEF, 0xF0, 0x90, 0x06, 0x25, 0x74, 0x08, 0xF0, 0x22, 0x90, 0x06, 0x25, 0xE0, 0x30, 0xE0, 0x2F,
|
||||||
|
0x90, 0x10, 0x3D, 0xE0, 0x24, 0xFB, 0x70, 0x1D, 0x90, 0x10, 0x49, 0x12, 0x27, 0x9A, 0x90, 0x10,
|
||||||
|
0x46, 0x12, 0x27, 0xBA, 0x90, 0x10, 0x4E, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x10, 0x4C, 0xCF, 0xF0,
|
||||||
|
0xA3, 0xEF, 0xF0, 0x80, 0x07, 0xE4, 0x90, 0x10, 0x4C, 0xF0, 0xA3, 0xF0, 0x02, 0x33, 0xF6, 0x90,
|
||||||
|
0x10, 0x3D, 0xE0, 0x12, 0x28, 0x7E, 0x35, 0x12, 0x01, 0x35, 0x12, 0x05, 0x35, 0x12, 0x07, 0x35,
|
||||||
|
0x12, 0x09, 0x35, 0x15, 0x0B, 0x35, 0x12, 0x0C, 0x35, 0x1B, 0x0D, 0x35, 0x21, 0x0F, 0x00, 0x00,
|
||||||
|
0x35, 0x5C, 0x02, 0x33, 0xF6, 0xE4, 0x90, 0x10, 0x3D, 0xF0, 0x22, 0xE4, 0x90, 0x10, 0x3D, 0xF0,
|
||||||
|
0x22, 0x90, 0x10, 0x50, 0xE0, 0xFF, 0xB4, 0x01, 0x07, 0x90, 0x06, 0x07, 0x74, 0x20, 0xF0, 0x22,
|
||||||
|
0xEF, 0xB4, 0x02, 0x07, 0x90, 0x06, 0x07, 0x74, 0x40, 0xF0, 0x22, 0xEF, 0xB4, 0x03, 0x07, 0x90,
|
||||||
|
0x06, 0x07, 0x74, 0x60, 0xF0, 0x22, 0xEF, 0xB4, 0x04, 0x07, 0x90, 0x06, 0x07, 0x74, 0x80, 0xF0,
|
||||||
|
0x22, 0xEF, 0xB4, 0x05, 0x0C, 0x90, 0x06, 0x07, 0x74, 0xA0, 0xF0, 0x22, 0xE4, 0x90, 0x10, 0x3D,
|
||||||
|
0xF0, 0x22, 0x78, 0x7F, 0xE4, 0xF6, 0xD8, 0xFD, 0x75, 0x81, 0x20, 0x02, 0x35, 0xA9, 0x02, 0x23,
|
||||||
|
0x50, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF,
|
||||||
|
0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54,
|
||||||
|
0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80,
|
||||||
|
0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x3E, 0x45, 0xE4, 0x7E, 0x01, 0x93,
|
||||||
|
0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60,
|
||||||
|
0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4,
|
||||||
|
0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3,
|
||||||
|
0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0xAC, 0x07,
|
||||||
|
0xD2, 0x02, 0xEC, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xF0, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83,
|
||||||
|
0xE0, 0xFD, 0xEC, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xEF, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83,
|
||||||
|
0xE0, 0xFB, 0xEC, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xEE, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83,
|
||||||
|
0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x02, 0x92, 0x02, 0xEC, 0x75,
|
||||||
|
0xF0, 0x03, 0xA4, 0x24, 0x98, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE0, 0xFD, 0xEC, 0x75,
|
||||||
|
0xF0, 0x03, 0xA4, 0x24, 0x97, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE0, 0xFB, 0xEC, 0x75,
|
||||||
|
0xF0, 0x03, 0xA4, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE0, 0x90, 0x45, 0x44,
|
||||||
|
0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x02, 0x92, 0x02, 0xE4, 0x90, 0x45, 0x44, 0xF0, 0xFB,
|
||||||
|
0xFD, 0x7F, 0xC8, 0x12, 0x3D, 0x90, 0xA2, 0x02, 0x22, 0xAC, 0x07, 0xD2, 0x02, 0xEC, 0x75, 0xF0,
|
||||||
|
0x03, 0xA4, 0x24, 0xF0, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE0, 0xFD, 0xEC, 0x75, 0xF0,
|
||||||
|
0x03, 0xA4, 0x24, 0xEF, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE0, 0xFB, 0xEC, 0x75, 0xF0,
|
||||||
|
0x03, 0xA4, 0x24, 0xEE, 0xF5, 0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE0, 0x90, 0x45, 0x44, 0xF0,
|
||||||
|
0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x02, 0x92, 0x02, 0xEC, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x98,
|
||||||
|
0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE0, 0xFD, 0xEC, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x97,
|
||||||
|
0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE0, 0xFB, 0xEC, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x96,
|
||||||
|
0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C,
|
||||||
|
0x90, 0x82, 0x02, 0x92, 0x02, 0xE4, 0x90, 0x45, 0x44, 0xF0, 0xFB, 0xFD, 0x7F, 0xC8, 0x12, 0x3D,
|
||||||
|
0x90, 0xA2, 0x02, 0x22, 0xAC, 0x07, 0xD2, 0x02, 0xEC, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xF0, 0xF5,
|
||||||
|
0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE0, 0xFD, 0xEC, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xEF, 0xF5,
|
||||||
|
0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE0, 0xFB, 0xEC, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0xEE, 0xF5,
|
||||||
|
0x82, 0xE4, 0x34, 0x40, 0xF5, 0x83, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90,
|
||||||
|
0x82, 0x02, 0x92, 0x02, 0xEC, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x98, 0xF5, 0x82, 0xE4, 0x34, 0x41,
|
||||||
|
0xF5, 0x83, 0xE0, 0xFD, 0xEC, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x97, 0xF5, 0x82, 0xE4, 0x34, 0x41,
|
||||||
|
0xF5, 0x83, 0xE0, 0xFB, 0xEC, 0x75, 0xF0, 0x03, 0xA4, 0x24, 0x96, 0xF5, 0x82, 0xE4, 0x34, 0x41,
|
||||||
|
0xF5, 0x83, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x02, 0x92, 0x02,
|
||||||
|
0xE4, 0x90, 0x45, 0x44, 0xF0, 0xFB, 0xFD, 0x7F, 0xC8, 0x12, 0x3D, 0x90, 0xA2, 0x02, 0x22, 0xD2,
|
||||||
|
0x01, 0xE4, 0x90, 0x04, 0x78, 0xF0, 0xA3, 0x74, 0x1B, 0xF0, 0x90, 0x04, 0x78, 0x74, 0x05, 0xF0,
|
||||||
|
0xE4, 0x90, 0x45, 0x3E, 0xF0, 0xA3, 0xF0, 0x90, 0x45, 0x3E, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3,
|
||||||
|
0x94, 0x0B, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x50, 0x57, 0x90, 0x42, 0xEB, 0x75, 0xF0, 0x03, 0xEF,
|
||||||
|
0x12, 0x27, 0x8E, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0x25, 0x83, 0xF5, 0x83, 0xE0, 0xFD, 0x90, 0x42,
|
||||||
|
0xEA, 0x75, 0xF0, 0x03, 0xEF, 0x12, 0x27, 0x8E, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0x25, 0x83, 0xF5,
|
||||||
|
0x83, 0xE0, 0xFB, 0x90, 0x42, 0xE9, 0x75, 0xF0, 0x03, 0xEF, 0x12, 0x27, 0x8E, 0xEE, 0x75, 0xF0,
|
||||||
|
0x03, 0xA4, 0x25, 0x83, 0xF5, 0x83, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90,
|
||||||
|
0x82, 0x01, 0x92, 0x01, 0x90, 0x45, 0x3E, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xB0, 0x80, 0x97,
|
||||||
|
0x90, 0x04, 0x62, 0x74, 0xC0, 0xF0, 0xA2, 0x01, 0x22, 0xD2, 0x01, 0xE4, 0x90, 0x04, 0x78, 0xF0,
|
||||||
|
0xA3, 0x74, 0x1B, 0xF0, 0x90, 0x04, 0x78, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x45, 0x3E, 0xF0, 0xA3,
|
||||||
|
0xF0, 0x90, 0x45, 0x3E, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x94, 0x0D, 0xEE, 0x64, 0x80, 0x94,
|
||||||
|
0x80, 0x50, 0x57, 0x90, 0x42, 0xEB, 0x75, 0xF0, 0x03, 0xEF, 0x12, 0x27, 0x8E, 0xEE, 0x75, 0xF0,
|
||||||
|
0x03, 0xA4, 0x25, 0x83, 0xF5, 0x83, 0xE0, 0xFD, 0x90, 0x42, 0xEA, 0x75, 0xF0, 0x03, 0xEF, 0x12,
|
||||||
|
0x27, 0x8E, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0x25, 0x83, 0xF5, 0x83, 0xE0, 0xFB, 0x90, 0x42, 0xE9,
|
||||||
|
0x75, 0xF0, 0x03, 0xEF, 0x12, 0x27, 0x8E, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0x25, 0x83, 0xF5, 0x83,
|
||||||
|
0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9, 0x12, 0x3C, 0x90, 0x82, 0x01, 0x92, 0x01, 0x90, 0x45,
|
||||||
|
0x3E, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x26, 0xB0, 0x80, 0x97, 0x90, 0x04, 0x62, 0x74, 0xC0, 0xF0,
|
||||||
|
0xA2, 0x01, 0x22, 0xD2, 0x01, 0xE4, 0x90, 0x04, 0x78, 0xF0, 0xA3, 0x74, 0x1B, 0xF0, 0x90, 0x04,
|
||||||
|
0x78, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x45, 0x3E, 0xF0, 0xA3, 0xF0, 0x90, 0x45, 0x3E, 0xE0, 0xFE,
|
||||||
|
0xA3, 0xE0, 0xFF, 0xC3, 0x94, 0x0F, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x50, 0x57, 0x90, 0x42, 0xEB,
|
||||||
|
0x75, 0xF0, 0x03, 0xEF, 0x12, 0x27, 0x8E, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0x25, 0x83, 0xF5, 0x83,
|
||||||
|
0xE0, 0xFD, 0x90, 0x42, 0xEA, 0x75, 0xF0, 0x03, 0xEF, 0x12, 0x27, 0x8E, 0xEE, 0x75, 0xF0, 0x03,
|
||||||
|
0xA4, 0x25, 0x83, 0xF5, 0x83, 0xE0, 0xFB, 0x90, 0x42, 0xE9, 0x75, 0xF0, 0x03, 0xEF, 0x12, 0x27,
|
||||||
|
0x8E, 0xEE, 0x75, 0xF0, 0x03, 0xA4, 0x25, 0x83, 0xF5, 0x83, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F,
|
||||||
|
0xB9, 0x12, 0x3C, 0x90, 0x82, 0x01, 0x92, 0x01, 0x90, 0x45, 0x3E, 0xE4, 0x75, 0xF0, 0x01, 0x12,
|
||||||
|
0x26, 0xB0, 0x80, 0x97, 0x90, 0x04, 0x62, 0x74, 0xC0, 0xF0, 0xA2, 0x01, 0x22, 0x90, 0x45, 0x3E,
|
||||||
|
0xED, 0xF0, 0xD2, 0x01, 0x90, 0x04, 0x57, 0xE0, 0x90, 0x45, 0x3F, 0xF0, 0x90, 0x04, 0x57, 0xE0,
|
||||||
|
0x54, 0xFE, 0xF0, 0xEF, 0x12, 0x28, 0x7E, 0x39, 0x60, 0x03, 0x39, 0x78, 0x09, 0x39, 0x6C, 0x0A,
|
||||||
|
0x39, 0x78, 0x0C, 0x39, 0x84, 0x0D, 0x39, 0x60, 0x0E, 0x39, 0x90, 0x0F, 0x00, 0x00, 0x39, 0x9C,
|
||||||
|
0x90, 0x45, 0x3E, 0xE0, 0xFF, 0x12, 0x35, 0xEE, 0x92, 0x01, 0x80, 0x32, 0x90, 0x45, 0x3E, 0xE0,
|
||||||
|
0xFF, 0x12, 0x32, 0x3A, 0x92, 0x01, 0x80, 0x26, 0x90, 0x45, 0x3E, 0xE0, 0xFF, 0x12, 0x36, 0x79,
|
||||||
|
0x92, 0x01, 0x80, 0x1A, 0x90, 0x45, 0x3E, 0xE0, 0xFF, 0x12, 0x37, 0x04, 0x92, 0x01, 0x80, 0x0E,
|
||||||
|
0x90, 0x45, 0x3E, 0xE0, 0xFF, 0x12, 0x2E, 0xDF, 0x92, 0x01, 0x80, 0x02, 0xC2, 0x01, 0x12, 0x3D,
|
||||||
|
0xE2, 0x90, 0x45, 0x3F, 0xE0, 0x90, 0x04, 0x57, 0xF0, 0x90, 0x45, 0x3E, 0xE0, 0x90, 0x40, 0xC0,
|
||||||
|
0xF0, 0xA2, 0x01, 0x22, 0xAC, 0x07, 0xE4, 0x90, 0x45, 0x3A, 0xF0, 0xA3, 0xF0, 0xD2, 0x00, 0x7D,
|
||||||
|
0x03, 0xEC, 0x70, 0x13, 0x12, 0x3C, 0xC5, 0x90, 0x45, 0x3B, 0xE0, 0x54, 0xF9, 0xFF, 0xF0, 0xFD,
|
||||||
|
0x7F, 0x09, 0x12, 0x3D, 0x00, 0x80, 0x59, 0xEC, 0xB4, 0x01, 0x16, 0x12, 0x3C, 0xC5, 0x90, 0x45,
|
||||||
|
0x3B, 0xE0, 0x54, 0xFD, 0xF0, 0x44, 0x04, 0xFF, 0xF0, 0xFD, 0x7F, 0x09, 0x12, 0x3D, 0x00, 0x80,
|
||||||
|
0x3F, 0xEC, 0xB4, 0x02, 0x1B, 0x7B, 0x01, 0x7A, 0x45, 0x79, 0x3A, 0x7F, 0x0A, 0x12, 0x3C, 0xCD,
|
||||||
|
0x90, 0x45, 0x3A, 0xE0, 0x54, 0xFC, 0xFF, 0xF0, 0xFD, 0x7F, 0x0A, 0x12, 0x3D, 0x00, 0x80, 0x20,
|
||||||
|
0xEC, 0xB4, 0x03, 0x1C, 0x7B, 0x01, 0x7A, 0x45, 0x79, 0x3A, 0x7F, 0x0A, 0x12, 0x3C, 0xCD, 0x90,
|
||||||
|
0x45, 0x3A, 0xE0, 0x54, 0xFE, 0xF0, 0x44, 0x02, 0xFF, 0xF0, 0xFD, 0x7F, 0x0A, 0x12, 0x3D, 0x00,
|
||||||
|
0xA2, 0x00, 0x22, 0x90, 0x45, 0x38, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0x90, 0x04, 0x0B, 0xE0, 0xF9,
|
||||||
|
0x54, 0xFB, 0xF0, 0xE4, 0xFF, 0xFE, 0x90, 0x04, 0x09, 0x74, 0x50, 0xF0, 0x90, 0x45, 0x38, 0xE0,
|
||||||
|
0x90, 0x04, 0x0A, 0xF0, 0x90, 0x45, 0x39, 0xE0, 0x90, 0x04, 0x0E, 0xF0, 0x90, 0x04, 0x08, 0x74,
|
||||||
|
0x80, 0xF0, 0xE4, 0xFD, 0xFC, 0x90, 0x04, 0x08, 0xE0, 0x90, 0x45, 0x3A, 0xF0, 0xE0, 0x54, 0x03,
|
||||||
|
0x70, 0x0B, 0x0D, 0xBD, 0x00, 0x01, 0x0C, 0xBC, 0x07, 0xEB, 0xBD, 0xFF, 0xE8, 0xC3, 0xED, 0x94,
|
||||||
|
0xFF, 0xEC, 0x94, 0x07, 0x50, 0x07, 0x90, 0x45, 0x3A, 0xE0, 0x30, 0xE1, 0x0B, 0x0F, 0xBF, 0x00,
|
||||||
|
0x01, 0x0E, 0xBE, 0x07, 0xB1, 0xBF, 0xFF, 0xAE, 0xBE, 0x07, 0x0A, 0xBF, 0xFF, 0x07, 0x90, 0x04,
|
||||||
|
0x0B, 0xE9, 0xF0, 0xC3, 0x22, 0xAF, 0x01, 0x90, 0x04, 0x0B, 0xE9, 0xF0, 0xD3, 0x22, 0x90, 0x45,
|
||||||
|
0x35, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE, 0x70, 0x56, 0xEF, 0x24, 0xF6, 0x60, 0x1B, 0x14, 0x60,
|
||||||
|
0x26, 0x14, 0x60, 0x31, 0x14, 0x60, 0x3C, 0x24, 0x04, 0x70, 0x44, 0x7B, 0x01, 0x7A, 0x42, 0x79,
|
||||||
|
0xE9, 0x90, 0x45, 0x37, 0x12, 0x27, 0xBA, 0x80, 0x36, 0x7B, 0x01, 0x7A, 0x40, 0x79, 0xC1, 0x90,
|
||||||
|
0x45, 0x37, 0x12, 0x27, 0xBA, 0x80, 0x28, 0x7B, 0x01, 0x7A, 0x40, 0x79, 0xF1, 0x90, 0x45, 0x37,
|
||||||
|
0x12, 0x27, 0xBA, 0x80, 0x1A, 0x7B, 0x01, 0x7A, 0x41, 0x79, 0x99, 0x90, 0x45, 0x37, 0x12, 0x27,
|
||||||
|
0xBA, 0x80, 0x0C, 0x7B, 0x01, 0x7A, 0x42, 0x79, 0x41, 0x90, 0x45, 0x37, 0x12, 0x27, 0xBA, 0x90,
|
||||||
|
0x45, 0x36, 0xE0, 0xFF, 0xA3, 0x12, 0x27, 0x9A, 0x90, 0x45, 0x35, 0xE0, 0xF5, 0x82, 0x75, 0x83,
|
||||||
|
0x00, 0xEF, 0x02, 0x26, 0x8E, 0x90, 0x45, 0x3F, 0xEF, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0x90, 0x04,
|
||||||
|
0x0B, 0xE0, 0x90, 0x45, 0x41, 0xF0, 0xE4, 0xFF, 0xFE, 0x90, 0x04, 0x09, 0x74, 0x50, 0xF0, 0x90,
|
||||||
|
0x45, 0x3F, 0xE0, 0x90, 0x04, 0x0A, 0xF0, 0x90, 0x04, 0x08, 0x74, 0x40, 0xF0, 0xE4, 0xFD, 0xFC,
|
||||||
|
0x90, 0x04, 0x08, 0xE0, 0xF9, 0x54, 0x03, 0x70, 0x0B, 0x0D, 0xBD, 0x00, 0x01, 0x0C, 0xBC, 0x07,
|
||||||
|
0xEF, 0xBD, 0xFF, 0xEC, 0xC3, 0xED, 0x94, 0xFF, 0xEC, 0x94, 0x07, 0x50, 0x04, 0xE9, 0x30, 0xE1,
|
||||||
|
0x0B, 0x0F, 0xBF, 0x00, 0x01, 0x0E, 0xBE, 0x07, 0xC0, 0xBF, 0xFF, 0xBD, 0x90, 0x04, 0x0C, 0xE0,
|
||||||
|
0x90, 0x45, 0x40, 0xF0, 0xA3, 0xE0, 0x90, 0x04, 0x0B, 0xF0, 0x90, 0x45, 0x40, 0xE0, 0xFF, 0x22,
|
||||||
|
0xE4, 0xFE, 0xEF, 0x30, 0xE5, 0x11, 0xE4, 0xFC, 0xFD, 0x7C, 0x08, 0x90, 0x04, 0xD4, 0xE4, 0xF0,
|
||||||
|
0xA3, 0xDC, 0xFC, 0x7C, 0x00, 0x7D, 0x08, 0xEF, 0x54, 0xC0, 0x60, 0x12, 0xE4, 0xFC, 0xFD, 0x7C,
|
||||||
|
0x08, 0x90, 0x04, 0xD4, 0x74, 0xFF, 0xF0, 0xA3, 0xDC, 0xFC, 0x7C, 0x00, 0x7D, 0x08, 0xEF, 0x30,
|
||||||
|
0xE6, 0x07, 0xEE, 0x44, 0x78, 0xFE, 0x54, 0xFE, 0xFE, 0xEF, 0x54, 0x88, 0x60, 0x04, 0xEE, 0x44,
|
||||||
|
0x08, 0xFE, 0xEF, 0x30, 0xE4, 0x04, 0xEE, 0x44, 0x10, 0xFE, 0xEF, 0x30, 0xE1, 0x04, 0xEE, 0x44,
|
||||||
|
0x02, 0xFE, 0x90, 0x04, 0x56, 0xE0, 0xFF, 0x6E, 0x60, 0x02, 0xEE, 0xF0, 0x22, 0xC0, 0xE0, 0xC0,
|
||||||
|
0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x07, 0xD2, 0x05, 0x53, 0xA8, 0xFE, 0x90,
|
||||||
|
0x06, 0x20, 0xE4, 0xF0, 0x90, 0x04, 0x58, 0xF0, 0xA3, 0xF0, 0x90, 0x06, 0x21, 0xE0, 0xFF, 0x90,
|
||||||
|
0x10, 0x39, 0xE0, 0x4F, 0xF0, 0x90, 0x06, 0x21, 0xEF, 0xF0, 0x90, 0x04, 0x5C, 0xE0, 0xFF, 0x90,
|
||||||
|
0x45, 0x46, 0xE0, 0x4F, 0xF0, 0x90, 0x04, 0x5C, 0xEF, 0xF0, 0xA3, 0xE0, 0xFF, 0x90, 0x45, 0x47,
|
||||||
|
0xE0, 0x4F, 0xF0, 0x90, 0x04, 0x5D, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83,
|
||||||
|
0xD0, 0xE0, 0x32, 0x90, 0x04, 0x79, 0x74, 0x11, 0xF0, 0x12, 0x3D, 0x31, 0xE4, 0x90, 0x45, 0x3E,
|
||||||
|
0xF0, 0x90, 0x45, 0x3E, 0xE0, 0xFF, 0xC3, 0x94, 0x06, 0x50, 0x1A, 0x12, 0x3B, 0x25, 0x90, 0x45,
|
||||||
|
0x3E, 0xE0, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x45, 0x3E,
|
||||||
|
0xE0, 0x04, 0xF0, 0x80, 0xDC, 0x90, 0x04, 0x48, 0x74, 0x02, 0xF0, 0x14, 0xF0, 0x7F, 0x30, 0x12,
|
||||||
|
0x3B, 0x90, 0x90, 0x04, 0x54, 0x74, 0x02, 0xF0, 0x22, 0xE0, 0x90, 0x45, 0x44, 0xF0, 0x7F, 0xB9,
|
||||||
|
0x90, 0x04, 0x71, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x45, 0x44, 0xE0, 0x90, 0x04, 0x73, 0xF0,
|
||||||
|
0x90, 0x04, 0x70, 0xEF, 0xF0, 0xE4, 0xFF, 0xFE, 0x90, 0x04, 0x70, 0xE0, 0xFD, 0x20, 0xE2, 0x0B,
|
||||||
|
0x0F, 0xBF, 0x00, 0x01, 0x0E, 0xBE, 0x07, 0xF0, 0xBF, 0xFF, 0xED, 0xBE, 0x07, 0x05, 0xBF, 0xFF,
|
||||||
|
0x02, 0xC3, 0x22, 0xD3, 0x22, 0x7B, 0x01, 0x7A, 0x45, 0x79, 0x3B, 0x7F, 0x09, 0x90, 0x04, 0x6E,
|
||||||
|
0xEF, 0xF0, 0x90, 0x04, 0x6C, 0xE0, 0x44, 0x02, 0xF0, 0xE4, 0xFF, 0xFE, 0x90, 0x04, 0x6C, 0xE0,
|
||||||
|
0xFD, 0x20, 0xE2, 0x0B, 0x0F, 0xBF, 0x00, 0x01, 0x0E, 0xBE, 0x07, 0xF0, 0xBF, 0xFF, 0xED, 0x90,
|
||||||
|
0x04, 0x6F, 0xE0, 0x12, 0x26, 0x7C, 0xBE, 0x07, 0x05, 0xBF, 0xFF, 0x02, 0xC3, 0x22, 0xD3, 0x22,
|
||||||
|
0x90, 0x04, 0x6E, 0xEF, 0xF0, 0x90, 0x04, 0x6F, 0xED, 0xF0, 0x90, 0x04, 0x6C, 0xE0, 0x44, 0x01,
|
||||||
|
0xF0, 0xE4, 0xFF, 0xFE, 0x90, 0x04, 0x6C, 0xE0, 0xFD, 0x20, 0xE2, 0x0B, 0x0F, 0xBF, 0x00, 0x01,
|
||||||
|
0x0E, 0xBE, 0x07, 0xF0, 0xBF, 0xFF, 0xED, 0xBE, 0x07, 0x05, 0xBF, 0xFF, 0x02, 0xC3, 0x22, 0xD3,
|
||||||
|
0x22, 0x90, 0x04, 0x54, 0x74, 0x01, 0xF0, 0xE4, 0xFF, 0xFE, 0x90, 0x04, 0x54, 0xE0, 0xFD, 0x30,
|
||||||
|
0xE0, 0x0B, 0x0F, 0xBF, 0x00, 0x01, 0x0E, 0xBE, 0x07, 0xF0, 0xBF, 0xFF, 0xED, 0xBE, 0x07, 0x05,
|
||||||
|
0xBF, 0xFF, 0x02, 0xC3, 0x22, 0x90, 0x06, 0x38, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x44, 0x01, 0xF0,
|
||||||
|
0xD3, 0x22, 0xEF, 0x12, 0x28, 0x7E, 0x3D, 0x7F, 0x03, 0x3D, 0x85, 0x09, 0x3D, 0x82, 0x0A, 0x3D,
|
||||||
|
0x85, 0x0C, 0x3D, 0x88, 0x0D, 0x3D, 0x7F, 0x0E, 0x3D, 0x8B, 0x0F, 0x00, 0x00, 0x3D, 0x8E, 0x02,
|
||||||
|
0x31, 0x47, 0x02, 0x30, 0x1A, 0x02, 0x37, 0x8F, 0x02, 0x38, 0x19, 0x02, 0x38, 0xA3, 0xC3, 0x22,
|
||||||
|
0x90, 0x04, 0x1C, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x45, 0x44, 0xE0, 0x90,
|
||||||
|
0x04, 0x1F, 0xF0, 0x90, 0x04, 0x18, 0x74, 0x03, 0xF0, 0x90, 0x04, 0x18, 0xE0, 0xFF, 0x60, 0x04,
|
||||||
|
0xEF, 0x30, 0xE2, 0xF5, 0xE4, 0x90, 0x04, 0x18, 0xF0, 0x22, 0x7F, 0xFF, 0x90, 0x04, 0x14, 0xE0,
|
||||||
|
0xFF, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x0F, 0x14, 0x60, 0x10, 0x24, 0x03, 0x70, 0x10, 0x02, 0x0B,
|
||||||
|
0xBE, 0x22, 0x02, 0x0B, 0xB5, 0x22, 0x02, 0x0B, 0xAE, 0x22, 0x02, 0x0B, 0xEF, 0x22, 0x02, 0x00,
|
||||||
|
0x00, 0x22, 0xD2, 0x02, 0x7D, 0x40, 0x7F, 0x50, 0x12, 0x3D, 0x00, 0xE4, 0xFD, 0x7F, 0x50, 0x12,
|
||||||
|
0x3D, 0x00, 0x7D, 0x01, 0x7F, 0x9C, 0x12, 0x3D, 0x00, 0xE4, 0xFD, 0x7F, 0x9C, 0x12, 0x3D, 0x00,
|
||||||
|
0xA2, 0x02, 0x22, 0x90, 0x04, 0x61, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0xFF, 0xFE, 0x90, 0x04, 0x61,
|
||||||
|
0xE0, 0xFD, 0x20, 0xE5, 0x0B, 0x0F, 0xBF, 0x00, 0x01, 0x0E, 0xBE, 0x07, 0xF0, 0xBF, 0xFF, 0xED,
|
||||||
|
0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC2, 0x8C, 0x90, 0x43, 0x19, 0x74, 0x01, 0xF0, 0xD0,
|
||||||
|
0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC2, 0x8C, 0x75, 0x89, 0x01, 0x75, 0x8C, 0xF9, 0x75, 0x8A,
|
||||||
|
0x7E, 0x43, 0xA8, 0x02, 0x22, 0x44, 0x43, 0x1A, 0x04, 0x03, 0x09, 0x04, 0x00,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
FIRMWAREbDownload(
|
||||||
|
IN PSDevice pDevice
|
||||||
|
)
|
||||||
|
{
|
||||||
|
NDIS_STATUS NdisStatus;
|
||||||
|
PBYTE pBuffer = NULL;
|
||||||
|
WORD wLength;
|
||||||
|
int ii;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Download firmware\n");
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
pBuffer = kmalloc(sizeof(abyFirmware), GFP_KERNEL);
|
||||||
|
if (pBuffer != NULL) {
|
||||||
|
|
||||||
|
for (ii=0;ii<sizeof(abyFirmware);ii++)
|
||||||
|
pBuffer[ii] = abyFirmware[ii];
|
||||||
|
|
||||||
|
for (ii=0;ii<sizeof(abyFirmware);ii+=0x400) {
|
||||||
|
|
||||||
|
if ((sizeof(abyFirmware) - ii) < 0x400)
|
||||||
|
wLength = (sizeof(abyFirmware) - ii);
|
||||||
|
else
|
||||||
|
wLength = 0x400;
|
||||||
|
|
||||||
|
NdisStatus = CONTROLnsRequestOutAsyn(pDevice,
|
||||||
|
0,
|
||||||
|
0x1200+ii,
|
||||||
|
0x0000,
|
||||||
|
wLength,
|
||||||
|
&(pBuffer[ii])
|
||||||
|
);
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Download firmware...%d %d\n", ii, sizeof(abyFirmware));
|
||||||
|
if (NdisStatus != STATUS_SUCCESS) {
|
||||||
|
if (pBuffer)
|
||||||
|
kfree(pBuffer);
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pBuffer)
|
||||||
|
kfree(pBuffer);
|
||||||
|
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
FIRMWAREbBrach2Sram(
|
||||||
|
IN PSDevice pDevice
|
||||||
|
)
|
||||||
|
{
|
||||||
|
NDIS_STATUS NdisStatus;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Branch to Sram\n");
|
||||||
|
|
||||||
|
NdisStatus = CONTROLnsRequestOut(pDevice,
|
||||||
|
1,
|
||||||
|
0x1200,
|
||||||
|
0x0000,
|
||||||
|
0,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
if (NdisStatus != STATUS_SUCCESS) {
|
||||||
|
return (FALSE);
|
||||||
|
} else {
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOLEAN
|
||||||
|
FIRMWAREbCheckVersion(
|
||||||
|
IN PSDevice pDevice
|
||||||
|
)
|
||||||
|
{
|
||||||
|
NTSTATUS ntStatus;
|
||||||
|
|
||||||
|
ntStatus = CONTROLnsRequestIn(pDevice,
|
||||||
|
MESSAGE_TYPE_READ,
|
||||||
|
0,
|
||||||
|
MESSAGE_REQUEST_VERSION,
|
||||||
|
2,
|
||||||
|
(PBYTE) &(pDevice->wFirmwareVersion));
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Firmware Version [%04x]\n", pDevice->wFirmwareVersion);
|
||||||
|
if (ntStatus != STATUS_SUCCESS) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Firmware Invalid.\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (pDevice->wFirmwareVersion == 0xFFFF) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"In Loader.\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Firmware Version [%04x]\n", pDevice->wFirmwareVersion);
|
||||||
|
if (pDevice->wFirmwareVersion != FIRMWARE_VERSION) {
|
||||||
|
// branch to loader for download new firmware
|
||||||
|
FIRMWAREbBrach2Sram(pDevice);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
66
drivers/staging/vt6656/firmware.h
Normal file
66
drivers/staging/vt6656/firmware.h
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: firmware.h
|
||||||
|
*
|
||||||
|
* Purpose: Version and Release Information
|
||||||
|
*
|
||||||
|
* Author: Yiching Chen
|
||||||
|
*
|
||||||
|
* Date: May 20, 2004
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __FIRMWARE_H__
|
||||||
|
#define __FIRMWARE_H__
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
FIRMWAREbDownload(
|
||||||
|
IN PSDevice pDevice
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
FIRMWAREbBrach2Sram(
|
||||||
|
IN PSDevice pDevice
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
FIRMWAREbCheckVersion(
|
||||||
|
IN PSDevice pDevice
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __FIRMWARE_H__
|
881
drivers/staging/vt6656/hostap.c
Normal file
881
drivers/staging/vt6656/hostap.c
Normal file
@ -0,0 +1,881 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: hostap.c
|
||||||
|
*
|
||||||
|
* Purpose: handle hostap deamon ioctl input/out functions
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: Oct. 20, 2003
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__HOSTAP_H__)
|
||||||
|
#include "hostap.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__IOCMD_H__)
|
||||||
|
#include "iocmd.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MAC_H__)
|
||||||
|
#include "mac.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CARD_H__)
|
||||||
|
#include "card.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__BASEBAND_H__)
|
||||||
|
#include "baseband.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WPACTL_H__)
|
||||||
|
#include "wpactl.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__KEY_H__)
|
||||||
|
#include "key.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MAC_H__)
|
||||||
|
#include "mac.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DATARATE_H__)
|
||||||
|
#include "datarate.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define VIAWGET_HOSTAPD_MAX_BUF_SIZE 1024
|
||||||
|
#define HOSTAP_CRYPT_FLAG_SET_TX_KEY BIT0
|
||||||
|
#define HOSTAP_CRYPT_FLAG_PERMANENT BIT1
|
||||||
|
#define HOSTAP_CRYPT_ERR_UNKNOWN_ALG 2
|
||||||
|
#define HOSTAP_CRYPT_ERR_UNKNOWN_ADDR 3
|
||||||
|
#define HOSTAP_CRYPT_ERR_CRYPT_INIT_FAILED 4
|
||||||
|
#define HOSTAP_CRYPT_ERR_KEY_SET_FAILED 5
|
||||||
|
#define HOSTAP_CRYPT_ERR_TX_KEY_SET_FAILED 6
|
||||||
|
#define HOSTAP_CRYPT_ERR_CARD_CONF_FAILED 7
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
//static int msglevel =MSG_LEVEL_DEBUG;
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* register net_device (AP) for hostap deamon
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* rtnl_locked -
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int hostap_enable_hostapd(PSDevice pDevice, int rtnl_locked)
|
||||||
|
{
|
||||||
|
struct net_device *dev = pDevice->dev;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Enabling hostapd mode\n", dev->name);
|
||||||
|
|
||||||
|
pDevice->apdev = (struct net_device *)kmalloc(sizeof(struct net_device), GFP_KERNEL);
|
||||||
|
if (pDevice->apdev == NULL)
|
||||||
|
return -ENOMEM;
|
||||||
|
memset(pDevice->apdev, 0, sizeof(struct net_device));
|
||||||
|
|
||||||
|
pDevice->apdev->priv = pDevice;
|
||||||
|
memcpy(pDevice->apdev->dev_addr, dev->dev_addr, ETH_ALEN);
|
||||||
|
pDevice->apdev->hard_start_xmit = pDevice->tx_80211;
|
||||||
|
pDevice->apdev->type = ARPHRD_IEEE80211;
|
||||||
|
|
||||||
|
pDevice->apdev->base_addr = dev->base_addr;
|
||||||
|
pDevice->apdev->irq = dev->irq;
|
||||||
|
pDevice->apdev->mem_start = dev->mem_start;
|
||||||
|
pDevice->apdev->mem_end = dev->mem_end;
|
||||||
|
sprintf(pDevice->apdev->name, "%sap", dev->name);
|
||||||
|
if (rtnl_locked)
|
||||||
|
ret = register_netdevice(pDevice->apdev);
|
||||||
|
else
|
||||||
|
ret = register_netdev(pDevice->apdev);
|
||||||
|
if (ret) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: register_netdevice(AP) failed!\n",
|
||||||
|
dev->name);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Registered netdevice %s for AP management\n",
|
||||||
|
dev->name, pDevice->apdev->name);
|
||||||
|
|
||||||
|
KeyvInitTable(pDevice,&pDevice->sKey);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* unregister net_device(AP)
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* rtnl_locked -
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int hostap_disable_hostapd(PSDevice pDevice, int rtnl_locked)
|
||||||
|
{
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: disabling hostapd mode\n", pDevice->dev->name);
|
||||||
|
|
||||||
|
if (pDevice->apdev && pDevice->apdev->name && pDevice->apdev->name[0]) {
|
||||||
|
if (rtnl_locked)
|
||||||
|
unregister_netdevice(pDevice->apdev);
|
||||||
|
else
|
||||||
|
unregister_netdev(pDevice->apdev);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Netdevice %s unregistered\n",
|
||||||
|
pDevice->dev->name, pDevice->apdev->name);
|
||||||
|
}
|
||||||
|
kfree(pDevice->apdev);
|
||||||
|
pDevice->apdev = NULL;
|
||||||
|
pDevice->bEnable8021x = FALSE;
|
||||||
|
pDevice->bEnableHostWEP = FALSE;
|
||||||
|
pDevice->bEncryptionEnable = FALSE;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Set enable/disable hostapd mode
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* rtnl_locked -
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
int hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked)
|
||||||
|
{
|
||||||
|
if (val < 0 || val > 1)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (pDevice->bEnableHostapd == val)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
pDevice->bEnableHostapd = val;
|
||||||
|
|
||||||
|
if (val)
|
||||||
|
return hostap_enable_hostapd(pDevice, rtnl_locked);
|
||||||
|
else
|
||||||
|
return hostap_disable_hostapd(pDevice, rtnl_locked);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* remove station function supported for hostap deamon
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* param -
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static int hostap_remove_sta(PSDevice pDevice,
|
||||||
|
struct viawget_hostapd_param *param)
|
||||||
|
{
|
||||||
|
UINT uNodeIndex;
|
||||||
|
|
||||||
|
|
||||||
|
if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) {
|
||||||
|
BSSvRemoveOneNode(pDevice, uNodeIndex);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* add a station from hostap deamon
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* param -
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static int hostap_add_sta(PSDevice pDevice,
|
||||||
|
struct viawget_hostapd_param *param)
|
||||||
|
{
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
UINT uNodeIndex;
|
||||||
|
|
||||||
|
|
||||||
|
if (!BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) {
|
||||||
|
BSSvCreateOneNode((PSDevice)pDevice, &uNodeIndex);
|
||||||
|
}
|
||||||
|
memcpy(pMgmt->sNodeDBTable[uNodeIndex].abyMACAddr, param->sta_addr, WLAN_ADDR_LEN);
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].eNodeState = NODE_ASSOC;
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].wCapInfo = param->u.add_sta.capability;
|
||||||
|
// TODO listenInterval
|
||||||
|
// pMgmt->sNodeDBTable[uNodeIndex].wListenInterval = 1;
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].bPSEnable = FALSE;
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].bySuppRate = param->u.add_sta.tx_supp_rates;
|
||||||
|
|
||||||
|
// set max tx rate
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate =
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate;
|
||||||
|
// set max basic rate
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].wMaxBasicRate = RATE_2M;
|
||||||
|
// Todo: check sta preamble, if ap can't support, set status code
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble =
|
||||||
|
WLAN_GET_CAP_INFO_SHORTPREAMBLE(pMgmt->sNodeDBTable[uNodeIndex].wCapInfo);
|
||||||
|
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].wAID = (WORD)param->u.add_sta.aid;
|
||||||
|
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].ulLastRxJiffer = jiffies;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Add STA AID= %d \n", pMgmt->sNodeDBTable[uNodeIndex].wAID);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "MAC=%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X \n",
|
||||||
|
param->sta_addr[0],
|
||||||
|
param->sta_addr[1],
|
||||||
|
param->sta_addr[2],
|
||||||
|
param->sta_addr[3],
|
||||||
|
param->sta_addr[4],
|
||||||
|
param->sta_addr[5]
|
||||||
|
) ;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Max Support rate = %d \n",
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* get station info
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* param -
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int hostap_get_info_sta(PSDevice pDevice,
|
||||||
|
struct viawget_hostapd_param *param)
|
||||||
|
{
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
UINT uNodeIndex;
|
||||||
|
|
||||||
|
if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) {
|
||||||
|
param->u.get_info_sta.inactive_sec =
|
||||||
|
(jiffies - pMgmt->sNodeDBTable[uNodeIndex].ulLastRxJiffer) / HZ;
|
||||||
|
|
||||||
|
//param->u.get_info_sta.txexc = pMgmt->sNodeDBTable[uNodeIndex].uTxAttempts;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* reset txexec
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* param -
|
||||||
|
* Out:
|
||||||
|
* TURE, FALSE
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
static int hostap_reset_txexc_sta(PSDevice pDevice,
|
||||||
|
struct viawget_hostapd_param *param)
|
||||||
|
{
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
UINT uNodeIndex;
|
||||||
|
|
||||||
|
if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) {
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].uTxAttempts = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* set station flag
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* param -
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static int hostap_set_flags_sta(PSDevice pDevice,
|
||||||
|
struct viawget_hostapd_param *param)
|
||||||
|
{
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
UINT uNodeIndex;
|
||||||
|
|
||||||
|
if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) {
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].dwFlags |= param->u.set_flags_sta.flags_or;
|
||||||
|
pMgmt->sNodeDBTable[uNodeIndex].dwFlags &= param->u.set_flags_sta.flags_and;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " dwFlags = %x \n",
|
||||||
|
(UINT)pMgmt->sNodeDBTable[uNodeIndex].dwFlags);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* set generic element (wpa ie)
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* param -
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static int hostap_set_generic_element(PSDevice pDevice,
|
||||||
|
struct viawget_hostapd_param *param)
|
||||||
|
{
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
memcpy( pMgmt->abyWPAIE,
|
||||||
|
param->u.generic_elem.data,
|
||||||
|
param->u.generic_elem.len
|
||||||
|
);
|
||||||
|
|
||||||
|
pMgmt->wWPAIELen = param->u.generic_elem.len;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pMgmt->wWPAIELen = %d\n", pMgmt->wWPAIELen);
|
||||||
|
|
||||||
|
// disable wpa
|
||||||
|
if (pMgmt->wWPAIELen == 0) {
|
||||||
|
pMgmt->eAuthenMode = WMAC_AUTH_OPEN;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " No WPAIE, Disable WPA \n");
|
||||||
|
} else {
|
||||||
|
// enable wpa
|
||||||
|
if ((pMgmt->abyWPAIE[0] == WLAN_EID_RSN_WPA) ||
|
||||||
|
(pMgmt->abyWPAIE[0] == WLAN_EID_RSN)) {
|
||||||
|
pMgmt->eAuthenMode = WMAC_AUTH_WPANONE;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Set WPAIE enable WPA\n");
|
||||||
|
} else
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* flush station nodes table.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void hostap_flush_sta(PSDevice pDevice)
|
||||||
|
{
|
||||||
|
// reserved node index =0 for multicast node.
|
||||||
|
BSSvClearNodeDBTable(pDevice, 1);
|
||||||
|
pDevice->uAssocCount = 0;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* set each stations encryption key
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* param -
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static int hostap_set_encryption(PSDevice pDevice,
|
||||||
|
struct viawget_hostapd_param *param,
|
||||||
|
int param_len)
|
||||||
|
{
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
DWORD dwKeyIndex = 0;
|
||||||
|
BYTE abyKey[MAX_KEY_LEN];
|
||||||
|
BYTE abySeq[MAX_KEY_LEN];
|
||||||
|
NDIS_802_11_KEY_RSC KeyRSC;
|
||||||
|
BYTE byKeyDecMode = KEY_CTL_WEP;
|
||||||
|
int ret = 0;
|
||||||
|
int iNodeIndex = -1;
|
||||||
|
int ii;
|
||||||
|
BOOL bKeyTableFull = FALSE;
|
||||||
|
WORD wKeyCtl = 0;
|
||||||
|
|
||||||
|
|
||||||
|
param->u.crypt.err = 0;
|
||||||
|
/*
|
||||||
|
if (param_len !=
|
||||||
|
(int) ((char *) param->u.crypt.key - (char *) param) +
|
||||||
|
param->u.crypt.key_len)
|
||||||
|
return -EINVAL;
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (param->u.crypt.alg > WPA_ALG_CCMP)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
|
||||||
|
if ((param->u.crypt.idx > 3) || (param->u.crypt.key_len > MAX_KEY_LEN)) {
|
||||||
|
param->u.crypt.err = HOSTAP_CRYPT_ERR_KEY_SET_FAILED;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " HOSTAP_CRYPT_ERR_KEY_SET_FAILED\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
|
||||||
|
param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
|
||||||
|
param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) {
|
||||||
|
if (param->u.crypt.idx >= MAX_GROUP_KEY)
|
||||||
|
return -EINVAL;
|
||||||
|
iNodeIndex = 0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &iNodeIndex) == FALSE) {
|
||||||
|
param->u.crypt.err = HOSTAP_CRYPT_ERR_UNKNOWN_ADDR;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " HOSTAP_CRYPT_ERR_UNKNOWN_ADDR\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " hostap_set_encryption: sta_index %d \n", iNodeIndex);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " hostap_set_encryption: alg %d \n", param->u.crypt.alg);
|
||||||
|
|
||||||
|
if (param->u.crypt.alg == WPA_ALG_NONE) {
|
||||||
|
|
||||||
|
if (pMgmt->sNodeDBTable[iNodeIndex].bOnFly == TRUE) {
|
||||||
|
if (KeybRemoveKey( pDevice,
|
||||||
|
&(pDevice->sKey),
|
||||||
|
param->sta_addr,
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].dwKeyIndex
|
||||||
|
) == FALSE) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "KeybRemoveKey fail \n");
|
||||||
|
}
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].bOnFly = FALSE;
|
||||||
|
}
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].byKeyIndex = 0;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].dwKeyIndex = 0;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].uWepKeyLength = 0;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].KeyRSC = 0;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].dwTSC47_16 = 0;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].wTSC15_0 = 0;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].byCipherSuite = 0;
|
||||||
|
memset(&pMgmt->sNodeDBTable[iNodeIndex].abyWepKey[0],
|
||||||
|
0,
|
||||||
|
MAX_KEY_LEN
|
||||||
|
);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(abyKey, param->u.crypt.key, param->u.crypt.key_len);
|
||||||
|
// copy to node key tbl
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].byKeyIndex = param->u.crypt.idx;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].uWepKeyLength = param->u.crypt.key_len;
|
||||||
|
memcpy(&pMgmt->sNodeDBTable[iNodeIndex].abyWepKey[0],
|
||||||
|
param->u.crypt.key,
|
||||||
|
param->u.crypt.key_len
|
||||||
|
);
|
||||||
|
|
||||||
|
dwKeyIndex = (DWORD)(param->u.crypt.idx);
|
||||||
|
if (param->u.crypt.flags & HOSTAP_CRYPT_FLAG_SET_TX_KEY) {
|
||||||
|
pDevice->byKeyIndex = (BYTE)dwKeyIndex;
|
||||||
|
pDevice->bTransmitKey = TRUE;
|
||||||
|
dwKeyIndex |= (1 << 31);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (param->u.crypt.alg == WPA_ALG_WEP) {
|
||||||
|
|
||||||
|
if ((pDevice->bEnable8021x == FALSE) || (iNodeIndex == 0)) {
|
||||||
|
KeybSetDefaultKey( pDevice,
|
||||||
|
&(pDevice->sKey),
|
||||||
|
dwKeyIndex & ~(BIT30 | USE_KEYRSC),
|
||||||
|
param->u.crypt.key_len,
|
||||||
|
NULL,
|
||||||
|
abyKey,
|
||||||
|
KEY_CTL_WEP
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// 8021x enable, individual key
|
||||||
|
dwKeyIndex |= (1 << 30); // set pairwise key
|
||||||
|
if (KeybSetKey(pDevice,
|
||||||
|
&(pDevice->sKey),
|
||||||
|
¶m->sta_addr[0],
|
||||||
|
dwKeyIndex & ~(USE_KEYRSC),
|
||||||
|
param->u.crypt.key_len,
|
||||||
|
(PQWORD) &(KeyRSC),
|
||||||
|
(PBYTE)abyKey,
|
||||||
|
KEY_CTL_WEP
|
||||||
|
) == TRUE) {
|
||||||
|
|
||||||
|
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].bOnFly = TRUE;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Key Table Full
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].bOnFly = FALSE;
|
||||||
|
bKeyTableFull = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pDevice->eEncryptionStatus = Ndis802_11Encryption1Enabled;
|
||||||
|
pDevice->bEncryptionEnable = TRUE;
|
||||||
|
pMgmt->byCSSPK = KEY_CTL_WEP;
|
||||||
|
pMgmt->byCSSGK = KEY_CTL_WEP;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].byCipherSuite = KEY_CTL_WEP;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].dwKeyIndex = dwKeyIndex;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (param->u.crypt.seq) {
|
||||||
|
memcpy(&abySeq, param->u.crypt.seq, 8);
|
||||||
|
for (ii = 0 ; ii < 8 ; ii++) {
|
||||||
|
KeyRSC |= (abySeq[ii] << (ii * 8));
|
||||||
|
}
|
||||||
|
dwKeyIndex |= 1 << 29;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].KeyRSC = KeyRSC;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (param->u.crypt.alg == WPA_ALG_TKIP) {
|
||||||
|
if (param->u.crypt.key_len != MAX_KEY_LEN)
|
||||||
|
return -EINVAL;
|
||||||
|
pDevice->eEncryptionStatus = Ndis802_11Encryption2Enabled;
|
||||||
|
byKeyDecMode = KEY_CTL_TKIP;
|
||||||
|
pMgmt->byCSSPK = KEY_CTL_TKIP;
|
||||||
|
pMgmt->byCSSGK = KEY_CTL_TKIP;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (param->u.crypt.alg == WPA_ALG_CCMP) {
|
||||||
|
if ((param->u.crypt.key_len != AES_KEY_LEN) ||
|
||||||
|
(pDevice->byLocalID <= REV_ID_VT3253_A1))
|
||||||
|
return -EINVAL;
|
||||||
|
pDevice->eEncryptionStatus = Ndis802_11Encryption3Enabled;
|
||||||
|
byKeyDecMode = KEY_CTL_CCMP;
|
||||||
|
pMgmt->byCSSPK = KEY_CTL_CCMP;
|
||||||
|
pMgmt->byCSSGK = KEY_CTL_CCMP;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (iNodeIndex == 0) {
|
||||||
|
KeybSetDefaultKey( pDevice,
|
||||||
|
&(pDevice->sKey),
|
||||||
|
dwKeyIndex,
|
||||||
|
param->u.crypt.key_len,
|
||||||
|
(PQWORD) &(KeyRSC),
|
||||||
|
abyKey,
|
||||||
|
byKeyDecMode
|
||||||
|
);
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].bOnFly = TRUE;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
dwKeyIndex |= (1 << 30); // set pairwise key
|
||||||
|
if (KeybSetKey(pDevice,
|
||||||
|
&(pDevice->sKey),
|
||||||
|
¶m->sta_addr[0],
|
||||||
|
dwKeyIndex,
|
||||||
|
param->u.crypt.key_len,
|
||||||
|
(PQWORD) &(KeyRSC),
|
||||||
|
(PBYTE)abyKey,
|
||||||
|
byKeyDecMode
|
||||||
|
) == TRUE) {
|
||||||
|
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].bOnFly = TRUE;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Key Table Full
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].bOnFly = FALSE;
|
||||||
|
bKeyTableFull = TRUE;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " Key Table Full\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bKeyTableFull == TRUE) {
|
||||||
|
wKeyCtl &= 0x7F00; // clear all key control filed
|
||||||
|
wKeyCtl |= (byKeyDecMode << 4);
|
||||||
|
wKeyCtl |= (byKeyDecMode);
|
||||||
|
wKeyCtl |= 0x0044; // use group key for all address
|
||||||
|
wKeyCtl |= 0x4000; // disable KeyTable[MAX_KEY_TABLE-1] on-fly to genernate rx int
|
||||||
|
// Todo.. xxxxxx
|
||||||
|
//MACvSetDefaultKeyCtl(pDevice->PortOffset, wKeyCtl, MAX_KEY_TABLE-1, pDevice->byLocalID);
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " Set key sta_index= %d \n", iNodeIndex);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " tx_index=%d len=%d \n", param->u.crypt.idx,
|
||||||
|
param->u.crypt.key_len );
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " key=%x-%x-%x-%x-%x-xxxxx \n",
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].abyWepKey[0],
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].abyWepKey[1],
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].abyWepKey[2],
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].abyWepKey[3],
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].abyWepKey[4]
|
||||||
|
);
|
||||||
|
|
||||||
|
// set wep key
|
||||||
|
pDevice->bEncryptionEnable = TRUE;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].byCipherSuite = byKeyDecMode;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].dwKeyIndex = dwKeyIndex;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].dwTSC47_16 = 0;
|
||||||
|
pMgmt->sNodeDBTable[iNodeIndex].wTSC15_0 = 0;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* get each stations encryption key
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* param -
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static int hostap_get_encryption(PSDevice pDevice,
|
||||||
|
struct viawget_hostapd_param *param,
|
||||||
|
int param_len)
|
||||||
|
{
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
int ret = 0;
|
||||||
|
int ii;
|
||||||
|
int iNodeIndex =0;
|
||||||
|
|
||||||
|
|
||||||
|
param->u.crypt.err = 0;
|
||||||
|
|
||||||
|
if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
|
||||||
|
param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
|
||||||
|
param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) {
|
||||||
|
iNodeIndex = 0;
|
||||||
|
} else {
|
||||||
|
if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &iNodeIndex) == FALSE) {
|
||||||
|
param->u.crypt.err = HOSTAP_CRYPT_ERR_UNKNOWN_ADDR;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "hostap_get_encryption: HOSTAP_CRYPT_ERR_UNKNOWN_ADDR\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "hostap_get_encryption: %d\n", iNodeIndex);
|
||||||
|
memset(param->u.crypt.seq, 0, 8);
|
||||||
|
for (ii = 0 ; ii < 8 ; ii++) {
|
||||||
|
param->u.crypt.seq[ii] = (BYTE)pMgmt->sNodeDBTable[iNodeIndex].KeyRSC >> (ii * 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* hostap_ioctl main function supported for hostap deamon.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice -
|
||||||
|
* iw_point -
|
||||||
|
* Out:
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
int hostap_ioctl(PSDevice pDevice, struct iw_point *p)
|
||||||
|
{
|
||||||
|
struct viawget_hostapd_param *param;
|
||||||
|
int ret = 0;
|
||||||
|
int ap_ioctl = 0;
|
||||||
|
|
||||||
|
if (p->length < sizeof(struct viawget_hostapd_param) ||
|
||||||
|
p->length > VIAWGET_HOSTAPD_MAX_BUF_SIZE || !p->pointer)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
param = (struct viawget_hostapd_param *) kmalloc((int)p->length, (int)GFP_KERNEL);
|
||||||
|
if (param == NULL)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(param, p->pointer, p->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (param->cmd) {
|
||||||
|
case VIAWGET_HOSTAPD_SET_ENCRYPTION:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SET_ENCRYPTION \n");
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
ret = hostap_set_encryption(pDevice, param, p->length);
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
break;
|
||||||
|
case VIAWGET_HOSTAPD_GET_ENCRYPTION:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_GET_ENCRYPTION \n");
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
ret = hostap_get_encryption(pDevice, param, p->length);
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
break;
|
||||||
|
case VIAWGET_HOSTAPD_SET_ASSOC_AP_ADDR:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SET_ASSOC_AP_ADDR \n");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
break;
|
||||||
|
case VIAWGET_HOSTAPD_FLUSH:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_FLUSH \n");
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
hostap_flush_sta(pDevice);
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
break;
|
||||||
|
case VIAWGET_HOSTAPD_ADD_STA:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_ADD_STA \n");
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
ret = hostap_add_sta(pDevice, param);
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
break;
|
||||||
|
case VIAWGET_HOSTAPD_REMOVE_STA:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_REMOVE_STA \n");
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
ret = hostap_remove_sta(pDevice, param);
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
break;
|
||||||
|
case VIAWGET_HOSTAPD_GET_INFO_STA:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_GET_INFO_STA \n");
|
||||||
|
ret = hostap_get_info_sta(pDevice, param);
|
||||||
|
ap_ioctl = 1;
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
case VIAWGET_HOSTAPD_RESET_TXEXC_STA:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_RESET_TXEXC_STA \n");
|
||||||
|
ret = hostap_reset_txexc_sta(pDevice, param);
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
case VIAWGET_HOSTAPD_SET_FLAGS_STA:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SET_FLAGS_STA \n");
|
||||||
|
ret = hostap_set_flags_sta(pDevice, param);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIAWGET_HOSTAPD_MLME:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_MLME \n");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
case VIAWGET_HOSTAPD_SET_GENERIC_ELEMENT:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SET_GENERIC_ELEMENT \n");
|
||||||
|
ret = hostap_set_generic_element(pDevice, param);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIAWGET_HOSTAPD_SCAN_REQ:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_SCAN_REQ \n");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
case VIAWGET_HOSTAPD_STA_CLEAR_STATS:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "VIAWGET_HOSTAPD_STA_CLEAR_STATS \n");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
default:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "hostap_ioctl: unknown cmd=%d\n",
|
||||||
|
(int)param->cmd);
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ((ret == 0) && ap_ioctl) {
|
||||||
|
if (copy_to_user(p->pointer, param, p->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
if (param != NULL)
|
||||||
|
kfree(param);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
94
drivers/staging/vt6656/hostap.h
Normal file
94
drivers/staging/vt6656/hostap.h
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: hostap.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 2003
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __HOSTAP_H__
|
||||||
|
#define __HOSTAP_H__
|
||||||
|
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
#if WIRELESS_EXT < 9
|
||||||
|
struct iw_point {
|
||||||
|
caddr_t pointer;
|
||||||
|
__u16 length;
|
||||||
|
__u16 flags;
|
||||||
|
};
|
||||||
|
#endif /* WIRELESS_EXT < 9 */
|
||||||
|
|
||||||
|
#define WLAN_RATE_1M BIT0
|
||||||
|
#define WLAN_RATE_2M BIT1
|
||||||
|
#define WLAN_RATE_5M5 BIT2
|
||||||
|
#define WLAN_RATE_11M BIT3
|
||||||
|
#define WLAN_RATE_6M BIT4
|
||||||
|
#define WLAN_RATE_9M BIT5
|
||||||
|
#define WLAN_RATE_12M BIT6
|
||||||
|
#define WLAN_RATE_18M BIT7
|
||||||
|
#define WLAN_RATE_24M BIT8
|
||||||
|
#define WLAN_RATE_36M BIT9
|
||||||
|
#define WLAN_RATE_48M BIT10
|
||||||
|
#define WLAN_RATE_54M BIT11
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#ifndef ETH_P_PAE
|
||||||
|
#define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */
|
||||||
|
#endif /* ETH_P_PAE */
|
||||||
|
|
||||||
|
#ifndef ARPHRD_IEEE80211
|
||||||
|
#define ARPHRD_IEEE80211 801
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked);
|
||||||
|
int hostap_ioctl(PSDevice pDevice, struct iw_point *p);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __HOSTAP_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
214
drivers/staging/vt6656/int.c
Normal file
214
drivers/staging/vt6656/int.c
Normal file
@ -0,0 +1,214 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: int.c
|
||||||
|
*
|
||||||
|
* Purpose: Handle USB interrupt endpoint
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Apr. 2, 2004
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
* 04-02-2004 Jerry Chen: Initial release
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__INT_H__)
|
||||||
|
#include "int.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MIB_H__)
|
||||||
|
#include "mib.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TBIT_H__)
|
||||||
|
#include "tbit.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TMACRO_H__)
|
||||||
|
#include "tmacro.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MAC_H__)
|
||||||
|
#include "mac.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__POWER_H__)
|
||||||
|
#include "power.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__BSSDB_H__)
|
||||||
|
#include "bssdb.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__USBPIPE_H__)
|
||||||
|
#include "usbpipe.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
//static int msglevel =MSG_LEVEL_DEBUG;
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Function: InterruptPollingThread
|
||||||
|
*
|
||||||
|
* Synopsis: Thread running at IRQL PASSIVE_LEVEL.
|
||||||
|
*
|
||||||
|
* Arguments: Device Extension
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
*
|
||||||
|
* Algorithm: Call USBD for input data;
|
||||||
|
*
|
||||||
|
* History: dd-mm-yyyy Author Comment
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Notes:
|
||||||
|
*
|
||||||
|
* USB reads are by nature 'Blocking', and when in a read, the device looks like it's
|
||||||
|
* in a 'stall' condition, so we deliberately time out every second if we've gotten no data
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
VOID
|
||||||
|
INTvWorkItem(
|
||||||
|
PVOID Context
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) Context;
|
||||||
|
NTSTATUS ntStatus;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Interrupt Polling Thread\n");
|
||||||
|
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
if (pDevice->fKillEventPollingThread != TRUE) {
|
||||||
|
ntStatus = PIPEnsInterruptRead(pDevice);
|
||||||
|
}
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
INTnsProcessData(
|
||||||
|
IN PSDevice pDevice
|
||||||
|
)
|
||||||
|
{
|
||||||
|
NTSTATUS status = STATUS_SUCCESS;
|
||||||
|
PSINTData pINTData;
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
struct net_device_stats* pStats = &pDevice->stats;
|
||||||
|
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsInterruptProcessData\n");
|
||||||
|
|
||||||
|
pINTData = (PSINTData) pDevice->intBuf.pDataBuf;
|
||||||
|
if (BITbIsBitOn(pINTData->byTSR0, TSR_VALID)) {
|
||||||
|
STAvUpdateTDStatCounter (&(pDevice->scStatistic), (BYTE) (pINTData->byPkt0 & 0x0F), (BYTE) (pINTData->byPkt0>>4), pINTData->byTSR0);
|
||||||
|
BSSvUpdateNodeTxCounter (pDevice, &(pDevice->scStatistic), pINTData->byTSR0, pINTData->byPkt0);
|
||||||
|
//DBG_PRN_GRP01(("TSR0 %02x\n", pINTData->byTSR0));
|
||||||
|
}
|
||||||
|
if (BITbIsBitOn(pINTData->byTSR1, TSR_VALID)) {
|
||||||
|
STAvUpdateTDStatCounter (&(pDevice->scStatistic), (BYTE) (pINTData->byPkt1 & 0x0F), (BYTE) (pINTData->byPkt1>>4), pINTData->byTSR1);
|
||||||
|
BSSvUpdateNodeTxCounter (pDevice, &(pDevice->scStatistic), pINTData->byTSR1, pINTData->byPkt1);
|
||||||
|
//DBG_PRN_GRP01(("TSR1 %02x\n", pINTData->byTSR1));
|
||||||
|
}
|
||||||
|
if (BITbIsBitOn(pINTData->byTSR2, TSR_VALID)) {
|
||||||
|
STAvUpdateTDStatCounter (&(pDevice->scStatistic), (BYTE) (pINTData->byPkt2 & 0x0F), (BYTE) (pINTData->byPkt2>>4), pINTData->byTSR2);
|
||||||
|
BSSvUpdateNodeTxCounter (pDevice, &(pDevice->scStatistic), pINTData->byTSR2, pINTData->byPkt2);
|
||||||
|
//DBG_PRN_GRP01(("TSR2 %02x\n", pINTData->byTSR2));
|
||||||
|
}
|
||||||
|
if (BITbIsBitOn(pINTData->byTSR3, TSR_VALID)) {
|
||||||
|
STAvUpdateTDStatCounter (&(pDevice->scStatistic), (BYTE) (pINTData->byPkt3 & 0x0F), (BYTE) (pINTData->byPkt3>>4), pINTData->byTSR3);
|
||||||
|
BSSvUpdateNodeTxCounter (pDevice, &(pDevice->scStatistic), pINTData->byTSR3, pINTData->byPkt3);
|
||||||
|
//DBG_PRN_GRP01(("TSR3 %02x\n", pINTData->byTSR3));
|
||||||
|
}
|
||||||
|
if ( pINTData->byISR0 != 0 ) {
|
||||||
|
if ( BITbIsBitOn(pINTData->byISR0, ISR_BNTX) ) {
|
||||||
|
|
||||||
|
if (pDevice->eOPMode == OP_MODE_AP) {
|
||||||
|
if(pMgmt->byDTIMCount > 0) {
|
||||||
|
pMgmt->byDTIMCount --;
|
||||||
|
pMgmt->sNodeDBTable[0].bRxPSPoll = FALSE;
|
||||||
|
} else if(pMgmt->byDTIMCount == 0) {
|
||||||
|
// check if mutltcast tx bufferring
|
||||||
|
pMgmt->byDTIMCount = pMgmt->byDTIMPeriod - 1;
|
||||||
|
pMgmt->sNodeDBTable[0].bRxPSPoll = TRUE;
|
||||||
|
if (pMgmt->sNodeDBTable[0].bPSEnable) {
|
||||||
|
bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RX_PSPOLL, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bScheduleCommand((HANDLE)pDevice, WLAN_CMD_BECON_SEND, NULL);
|
||||||
|
} // if (pDevice->eOPMode == OP_MODE_AP)
|
||||||
|
|
||||||
|
pDevice->bBeaconSent = TRUE;
|
||||||
|
} else {
|
||||||
|
pDevice->bBeaconSent = FALSE;
|
||||||
|
}
|
||||||
|
if ( BITbIsBitOn(pINTData->byISR0, ISR_TBTT) ) {
|
||||||
|
if ( pDevice->bEnablePSMode ) {
|
||||||
|
bScheduleCommand((HANDLE) pDevice, WLAN_CMD_TBTT_WAKEUP, NULL);
|
||||||
|
}
|
||||||
|
if ( pDevice->bChannelSwitch ) {
|
||||||
|
pDevice->byChannelSwitchCount--;
|
||||||
|
if ( pDevice->byChannelSwitchCount == 0 ) {
|
||||||
|
bScheduleCommand((HANDLE) pDevice, WLAN_CMD_11H_CHSW, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LODWORD(pDevice->qwCurrTSF) = pINTData->dwLoTSF;
|
||||||
|
HIDWORD(pDevice->qwCurrTSF) = pINTData->dwHiTSF;
|
||||||
|
//DBG_PRN_GRP01(("ISR0 = %02x ,LoTsf = %08x,HiTsf = %08x\n", pINTData->byISR0, pINTData->dwLoTSF,pINTData->dwHiTSF));
|
||||||
|
|
||||||
|
STAvUpdate802_11Counter(&pDevice->s802_11Counter, &pDevice->scStatistic, pINTData->byRTSSuccess,
|
||||||
|
pINTData->byRTSFail, pINTData->byACKFail, pINTData->byFCSErr );
|
||||||
|
STAvUpdateIsrStatCounter(&pDevice->scStatistic, pINTData->byISR0, pINTData->byISR1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pINTData->byISR1 != 0 ) {
|
||||||
|
if ( BITbIsBitOn(pINTData->byISR1, ISR_GPIO3) ) {
|
||||||
|
bScheduleCommand((HANDLE) pDevice, WLAN_CMD_RADIO, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pDevice->intBuf.uDataLen = 0;
|
||||||
|
pDevice->intBuf.bInUse = FALSE;
|
||||||
|
|
||||||
|
pStats->tx_packets = pDevice->scStatistic.ullTsrOK;
|
||||||
|
pStats->tx_bytes = pDevice->scStatistic.ullTxDirectedBytes +
|
||||||
|
pDevice->scStatistic.ullTxMulticastBytes +
|
||||||
|
pDevice->scStatistic.ullTxBroadcastBytes;
|
||||||
|
pStats->tx_errors = pDevice->scStatistic.dwTsrErr;
|
||||||
|
pStats->tx_dropped = pDevice->scStatistic.dwTsrErr;
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
101
drivers/staging/vt6656/int.h
Normal file
101
drivers/staging/vt6656/int.h
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: int.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Apr. 2, 2004
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __INT_H__
|
||||||
|
#define __INT_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
#pragma pack(1)
|
||||||
|
typedef struct tagSINTData {
|
||||||
|
BYTE byTSR0;
|
||||||
|
BYTE byPkt0;
|
||||||
|
WORD wTime0;
|
||||||
|
BYTE byTSR1;
|
||||||
|
BYTE byPkt1;
|
||||||
|
WORD wTime1;
|
||||||
|
BYTE byTSR2;
|
||||||
|
BYTE byPkt2;
|
||||||
|
WORD wTime2;
|
||||||
|
BYTE byTSR3;
|
||||||
|
BYTE byPkt3;
|
||||||
|
WORD wTime3;
|
||||||
|
DWORD dwLoTSF;
|
||||||
|
DWORD dwHiTSF;
|
||||||
|
BYTE byISR0;
|
||||||
|
BYTE byISR1;
|
||||||
|
BYTE byRTSSuccess;
|
||||||
|
BYTE byRTSFail;
|
||||||
|
BYTE byACKFail;
|
||||||
|
BYTE byFCSErr;
|
||||||
|
BYTE abySW[2];
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SINTData, DEF* PSINTData;
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
VOID
|
||||||
|
INTvWorkItem(
|
||||||
|
PVOID Context
|
||||||
|
);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
INTnsProcessData(
|
||||||
|
IN PSDevice pDevice
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __INT_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
724
drivers/staging/vt6656/ioctl.c
Normal file
724
drivers/staging/vt6656/ioctl.c
Normal file
@ -0,0 +1,724 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: ioctl.c
|
||||||
|
*
|
||||||
|
* Purpose: private ioctl functions
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: Auguest 20, 2003
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__IOCTL_H__)
|
||||||
|
#include "ioctl.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__IOCMD_H__)
|
||||||
|
#include "iocmd.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MAC_H__)
|
||||||
|
#include "mac.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CARD_H__)
|
||||||
|
#include "card.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__HOSTAP_H__)
|
||||||
|
#include "hostap.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WPACTL_H__)
|
||||||
|
#include "wpactl.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CONTROL_H__)
|
||||||
|
#include "control.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__RNDIS_H__)
|
||||||
|
#include "rndis.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__RF_H__)
|
||||||
|
#include "rf.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
//static int msglevel =MSG_LEVEL_DEBUG;
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
|
||||||
|
#ifdef WPA_SM_Transtatus
|
||||||
|
SWPAResult wpa_Result;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
int private_ioctl(PSDevice pDevice, struct ifreq *rq) {
|
||||||
|
|
||||||
|
PSCmdRequest pReq = (PSCmdRequest)rq;
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
int result = 0;
|
||||||
|
PWLAN_IE_SSID pItemSSID;
|
||||||
|
SCmdBSSJoin sJoinCmd;
|
||||||
|
SCmdZoneTypeSet sZoneTypeCmd;
|
||||||
|
SCmdScan sScanCmd;
|
||||||
|
SCmdStartAP sStartAPCmd;
|
||||||
|
SCmdSetWEP sWEPCmd;
|
||||||
|
SCmdValue sValue;
|
||||||
|
SBSSIDList sList;
|
||||||
|
SNodeList sNodeList;
|
||||||
|
PSBSSIDList pList;
|
||||||
|
PSNodeList pNodeList;
|
||||||
|
UINT cbListCount;
|
||||||
|
PKnownBSS pBSS;
|
||||||
|
PKnownNodeDB pNode;
|
||||||
|
UINT ii, jj;
|
||||||
|
SCmdLinkStatus sLinkStatus;
|
||||||
|
BYTE abySuppRates[] = {WLAN_EID_SUPP_RATES, 4, 0x02, 0x04, 0x0B, 0x16};
|
||||||
|
BYTE abyNullAddr[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||||
|
DWORD dwKeyIndex= 0;
|
||||||
|
BYTE abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
|
||||||
|
LONG ldBm;
|
||||||
|
|
||||||
|
pReq->wResult = 0;
|
||||||
|
|
||||||
|
switch(pReq->wCmdCode) {
|
||||||
|
|
||||||
|
case WLAN_CMD_BSS_SCAN:
|
||||||
|
|
||||||
|
if (copy_from_user(&sScanCmd, pReq->data, sizeof(SCmdScan))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
pItemSSID = (PWLAN_IE_SSID)sScanCmd.ssid;
|
||||||
|
if (pItemSSID->len != 0) {
|
||||||
|
memset(abyScanSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1);
|
||||||
|
memcpy(abyScanSSID, pItemSSID, pItemSSID->len + WLAN_IEHDR_LEN);
|
||||||
|
}
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
if (memcmp(pMgmt->abyCurrBSSID, &abyNullAddr[0], 6) == 0)
|
||||||
|
BSSvClearBSSList((HANDLE)pDevice, FALSE);
|
||||||
|
else
|
||||||
|
BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_BSS_SCAN..begin \n");
|
||||||
|
|
||||||
|
if (pItemSSID->len != 0)
|
||||||
|
bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, abyScanSSID);
|
||||||
|
else
|
||||||
|
bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, NULL);
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_ZONETYPE_SET:
|
||||||
|
//mike add :cann't support.
|
||||||
|
result=-EOPNOTSUPP;
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (copy_from_user(&sZoneTypeCmd, pReq->data, sizeof(SCmdZoneTypeSet))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
if(sZoneTypeCmd.bWrite==TRUE) {
|
||||||
|
//////write zonetype
|
||||||
|
if(sZoneTypeCmd.ZoneType == ZoneType_USA) {
|
||||||
|
//set to USA
|
||||||
|
printk("set_ZoneType:USA\n");
|
||||||
|
}
|
||||||
|
else if(sZoneTypeCmd.ZoneType == ZoneType_Japan) {
|
||||||
|
//set to Japan
|
||||||
|
printk("set_ZoneType:Japan\n");
|
||||||
|
}
|
||||||
|
else if(sZoneTypeCmd.ZoneType == ZoneType_Europe) {
|
||||||
|
//set to Europe
|
||||||
|
printk("set_ZoneType:Europe\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
///////read zonetype
|
||||||
|
BYTE zonetype=0;
|
||||||
|
|
||||||
|
|
||||||
|
if(zonetype == 0x00) { //USA
|
||||||
|
sZoneTypeCmd.ZoneType = ZoneType_USA;
|
||||||
|
}
|
||||||
|
else if(zonetype == 0x01) { //Japan
|
||||||
|
sZoneTypeCmd.ZoneType = ZoneType_Japan;
|
||||||
|
}
|
||||||
|
else if(zonetype == 0x02) { //Europe
|
||||||
|
sZoneTypeCmd.ZoneType = ZoneType_Europe;
|
||||||
|
}
|
||||||
|
else { //Unknow ZoneType
|
||||||
|
printk("Error:ZoneType[%x] Unknown ???\n",zonetype);
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (copy_to_user(pReq->data, &sZoneTypeCmd, sizeof(SCmdZoneTypeSet))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_BSS_JOIN:
|
||||||
|
|
||||||
|
if (copy_from_user(&sJoinCmd, pReq->data, sizeof(SCmdBSSJoin))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
pItemSSID = (PWLAN_IE_SSID)sJoinCmd.ssid;
|
||||||
|
memset(pMgmt->abyDesireSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1);
|
||||||
|
memcpy(pMgmt->abyDesireSSID, pItemSSID, pItemSSID->len + WLAN_IEHDR_LEN);
|
||||||
|
if (sJoinCmd.wBSSType == ADHOC) {
|
||||||
|
pMgmt->eConfigMode = WMAC_CONFIG_IBSS_STA;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "ioct set to adhoc mode\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pMgmt->eConfigMode = WMAC_CONFIG_ESS_STA;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "ioct set to STA mode\n");
|
||||||
|
}
|
||||||
|
if (sJoinCmd.bPSEnable == TRUE) {
|
||||||
|
pDevice->ePSMode = WMAC_POWER_FAST;
|
||||||
|
// pDevice->ePSMode = WMAC_POWER_MAX;
|
||||||
|
pMgmt->wListenInterval = 2;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Power Saving On\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pDevice->ePSMode = WMAC_POWER_CAM;
|
||||||
|
pMgmt->wListenInterval = 1;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Power Saving Off \n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sJoinCmd.bShareKeyAuth == TRUE){
|
||||||
|
pMgmt->bShareKeyAlgorithm = TRUE;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Share Key \n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pMgmt->bShareKeyAlgorithm = FALSE;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Open System \n");
|
||||||
|
}
|
||||||
|
pDevice->uChannel = sJoinCmd.uChannel;
|
||||||
|
netif_stop_queue(pDevice->dev);
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
pMgmt->eCurrState = WMAC_STATE_IDLE;
|
||||||
|
bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID);
|
||||||
|
bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, NULL);
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_SET_WEP:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_SET_WEP Key. \n");
|
||||||
|
memset(&sWEPCmd, 0 ,sizeof(SCmdSetWEP));
|
||||||
|
if (copy_from_user(&sWEPCmd, pReq->data, sizeof(SCmdSetWEP))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
if (sWEPCmd.bEnableWep != TRUE) {
|
||||||
|
int uu;
|
||||||
|
|
||||||
|
pDevice->bEncryptionEnable = FALSE;
|
||||||
|
pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled;
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
for(uu=0;uu<MAX_KEY_TABLE;uu++)
|
||||||
|
MACvDisableKeyEntry(pDevice,uu);
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WEP function disable. \n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ii = 0; ii < WLAN_WEP_NKEYS; ii ++) {
|
||||||
|
if (sWEPCmd.bWepKeyAvailable[ii]) {
|
||||||
|
if (ii == sWEPCmd.byKeyIndex)
|
||||||
|
//2006-1207-01<Modify>by Einsn Liu
|
||||||
|
// dwKeyIndex|= (1 << 31);
|
||||||
|
dwKeyIndex=ii|(1 << 31);
|
||||||
|
else
|
||||||
|
dwKeyIndex = ii;
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
KeybSetDefaultKey( pDevice,
|
||||||
|
&(pDevice->sKey),
|
||||||
|
dwKeyIndex,
|
||||||
|
sWEPCmd.auWepKeyLength[ii],
|
||||||
|
NULL,
|
||||||
|
(PBYTE)&sWEPCmd.abyWepKey[ii][0],
|
||||||
|
KEY_CTL_WEP
|
||||||
|
);
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pDevice->byKeyIndex = sWEPCmd.byKeyIndex;
|
||||||
|
pDevice->bTransmitKey = TRUE;
|
||||||
|
pDevice->bEncryptionEnable = TRUE;
|
||||||
|
pDevice->eEncryptionStatus = Ndis802_11Encryption1Enabled;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_GET_LINK:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_GET_LINK status. \n");
|
||||||
|
|
||||||
|
memset(sLinkStatus.abySSID, 0 , WLAN_SSID_MAXLEN + 1);
|
||||||
|
|
||||||
|
if (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA)
|
||||||
|
sLinkStatus.wBSSType = ADHOC;
|
||||||
|
else
|
||||||
|
sLinkStatus.wBSSType = INFRA;
|
||||||
|
|
||||||
|
if (pMgmt->eCurrState == WMAC_STATE_JOINTED)
|
||||||
|
sLinkStatus.byState = ADHOC_JOINTED;
|
||||||
|
else
|
||||||
|
sLinkStatus.byState = ADHOC_STARTED;
|
||||||
|
|
||||||
|
sLinkStatus.uChannel = pMgmt->uCurrChannel;
|
||||||
|
if (pDevice->bLinkPass == TRUE) {
|
||||||
|
sLinkStatus.bLink = TRUE;
|
||||||
|
pItemSSID = (PWLAN_IE_SSID)pMgmt->abyCurrSSID;
|
||||||
|
memcpy(sLinkStatus.abySSID, pItemSSID->abySSID, pItemSSID->len);
|
||||||
|
memcpy(sLinkStatus.abyBSSID, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN);
|
||||||
|
sLinkStatus.uLinkRate = pMgmt->sNodeDBTable[0].wTxDataRate;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" Link Success ! \n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sLinkStatus.bLink = FALSE;
|
||||||
|
}
|
||||||
|
if (copy_to_user(pReq->data, &sLinkStatus, sizeof(SCmdLinkStatus))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_GET_LISTLEN:
|
||||||
|
cbListCount = 0;
|
||||||
|
pBSS = &(pMgmt->sBSSList[0]);
|
||||||
|
for (ii = 0; ii < MAX_BSS_NUM; ii++) {
|
||||||
|
pBSS = &(pMgmt->sBSSList[ii]);
|
||||||
|
if (!pBSS->bActive)
|
||||||
|
continue;
|
||||||
|
cbListCount++;
|
||||||
|
};
|
||||||
|
sList.uItem = cbListCount;
|
||||||
|
if (copy_to_user(pReq->data, &sList, sizeof(SBSSIDList))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
pReq->wResult = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_GET_LIST:
|
||||||
|
if (copy_from_user(&sList, pReq->data, sizeof(SBSSIDList))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
pList = (PSBSSIDList)kmalloc(sizeof(SBSSIDList) + (sList.uItem * sizeof(SBSSIDItem)), (int)GFP_ATOMIC);
|
||||||
|
if (pList == NULL) {
|
||||||
|
result = -ENOMEM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pList->uItem = sList.uItem;
|
||||||
|
pBSS = &(pMgmt->sBSSList[0]);
|
||||||
|
for (ii = 0, jj = 0; jj < MAX_BSS_NUM ; jj++) {
|
||||||
|
pBSS = &(pMgmt->sBSSList[jj]);
|
||||||
|
if (pBSS->bActive) {
|
||||||
|
pList->sBSSIDList[ii].uChannel = pBSS->uChannel;
|
||||||
|
pList->sBSSIDList[ii].wBeaconInterval = pBSS->wBeaconInterval;
|
||||||
|
pList->sBSSIDList[ii].wCapInfo = pBSS->wCapInfo;
|
||||||
|
RFvRSSITodBm(pDevice, (BYTE)(pBSS->uRSSI), &ldBm);
|
||||||
|
pList->sBSSIDList[ii].uRSSI = (UINT)ldBm;
|
||||||
|
// pList->sBSSIDList[ii].uRSSI = pBSS->uRSSI;
|
||||||
|
memcpy(pList->sBSSIDList[ii].abyBSSID, pBSS->abyBSSID, WLAN_BSSID_LEN);
|
||||||
|
pItemSSID = (PWLAN_IE_SSID)pBSS->abySSID;
|
||||||
|
memset(pList->sBSSIDList[ii].abySSID, 0, WLAN_SSID_MAXLEN + 1);
|
||||||
|
memcpy(pList->sBSSIDList[ii].abySSID, pItemSSID->abySSID, pItemSSID->len);
|
||||||
|
if (WLAN_GET_CAP_INFO_ESS(pBSS->wCapInfo)) {
|
||||||
|
pList->sBSSIDList[ii].byNetType = INFRA;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pList->sBSSIDList[ii].byNetType = ADHOC;
|
||||||
|
}
|
||||||
|
if (WLAN_GET_CAP_INFO_PRIVACY(pBSS->wCapInfo)) {
|
||||||
|
pList->sBSSIDList[ii].bWEPOn = TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pList->sBSSIDList[ii].bWEPOn = FALSE;
|
||||||
|
}
|
||||||
|
ii ++;
|
||||||
|
if (ii >= pList->uItem)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (copy_to_user(pReq->data, pList, sizeof(SBSSIDList) + (sList.uItem * sizeof(SBSSIDItem)))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
kfree(pList);
|
||||||
|
pReq->wResult = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_GET_MIB:
|
||||||
|
if (copy_to_user(pReq->data, &(pDevice->s802_11Counter), sizeof(SDot11MIBCount))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_GET_STAT:
|
||||||
|
if (copy_to_user(pReq->data, &(pDevice->scStatistic), sizeof(SStatCounter))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case WLAN_CMD_STOP_MAC:
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_STOP_MAC\n");
|
||||||
|
// Todo xxxxxx
|
||||||
|
netif_stop_queue(pDevice->dev);
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
if (pDevice->bRadioOff == FALSE) {
|
||||||
|
CARDbRadioPowerOff(pDevice);
|
||||||
|
}
|
||||||
|
pDevice->bLinkPass = FALSE;
|
||||||
|
ControlvMaskByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_PAPEDELAY,LEDSTS_STS,LEDSTS_SLOW);
|
||||||
|
memset(pMgmt->abyCurrBSSID, 0, 6);
|
||||||
|
pMgmt->eCurrState = WMAC_STATE_IDLE;
|
||||||
|
// del_timer(&pDevice->sTimerCommand);
|
||||||
|
// del_timer(&pMgmt->sTimerSecondCallback);
|
||||||
|
pDevice->bCmdRunning = FALSE;
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_START_MAC:
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_START_MAC\n");
|
||||||
|
// Todo xxxxxxx
|
||||||
|
if (pDevice->bRadioOff == TRUE)
|
||||||
|
CARDbRadioPowerOn(pDevice);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_SET_HOSTAPD:
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_SET_HOSTAPD\n");
|
||||||
|
|
||||||
|
if (copy_from_user(&sValue, pReq->data, sizeof(SCmdValue))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
if (sValue.dwValue == 1) {
|
||||||
|
if (hostap_set_hostapd(pDevice, 1, 1) == 0){
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Enable HOSTAP\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hostap_set_hostapd(pDevice, 0, 1);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Disable HOSTAP\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_SET_HOSTAPD_STA:
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_SET_HOSTAPD_STA\n");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case WLAN_CMD_SET_802_1X:
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_SET_802_1X\n");
|
||||||
|
if (copy_from_user(&sValue, pReq->data, sizeof(SCmdValue))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (sValue.dwValue == 1) {
|
||||||
|
pDevice->bEnable8021x = TRUE;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Enable 802.1x\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pDevice->bEnable8021x = FALSE;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Disable 802.1x\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case WLAN_CMD_SET_HOST_WEP:
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_SET_HOST_WEP\n");
|
||||||
|
if (copy_from_user(&sValue, pReq->data, sizeof(SCmdValue))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (sValue.dwValue == 1) {
|
||||||
|
pDevice->bEnableHostWEP = TRUE;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Enable HostWEP\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pDevice->bEnableHostWEP = FALSE;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Disable HostWEP\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_SET_WPA:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_SET_WPA\n");
|
||||||
|
|
||||||
|
if (copy_from_user(&sValue, pReq->data, sizeof(SCmdValue))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
if (sValue.dwValue == 1) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "up wpadev\n");
|
||||||
|
memcpy(pDevice->wpadev->dev_addr, pDevice->dev->dev_addr, U_ETHER_ADDR_LEN);
|
||||||
|
pDevice->bWPADEVUp = TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "close wpadev\n");
|
||||||
|
pDevice->bWPADEVUp = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_AP_START:
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_AP_START\n");
|
||||||
|
if (pDevice->bRadioOff == TRUE) {
|
||||||
|
CARDbRadioPowerOn(pDevice);
|
||||||
|
add_timer(&pMgmt->sTimerSecondCallback);
|
||||||
|
}
|
||||||
|
if (copy_from_user(&sStartAPCmd, pReq->data, sizeof(SCmdStartAP))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (sStartAPCmd.wBSSType == AP) {
|
||||||
|
pMgmt->eConfigMode = WMAC_CONFIG_AP;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "ioct set to AP mode\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "ioct BSS type not set to AP mode\n");
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (sStartAPCmd.wBBPType == PHY80211g) {
|
||||||
|
pMgmt->byAPBBType = PHY_TYPE_11G;
|
||||||
|
}
|
||||||
|
else if (sStartAPCmd.wBBPType == PHY80211a) {
|
||||||
|
pMgmt->byAPBBType = PHY_TYPE_11A;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pMgmt->byAPBBType = PHY_TYPE_11B;
|
||||||
|
}
|
||||||
|
|
||||||
|
pItemSSID = (PWLAN_IE_SSID)sStartAPCmd.ssid;
|
||||||
|
memset(pMgmt->abyDesireSSID, 0, WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1);
|
||||||
|
memcpy(pMgmt->abyDesireSSID, pItemSSID, pItemSSID->len + WLAN_IEHDR_LEN);
|
||||||
|
|
||||||
|
if ((sStartAPCmd.uChannel > 0)&&(sStartAPCmd.uChannel <= 14))
|
||||||
|
pDevice->uChannel = sStartAPCmd.uChannel;
|
||||||
|
|
||||||
|
if ((sStartAPCmd.uBeaconInt >= 20) && (sStartAPCmd.uBeaconInt <= 1000))
|
||||||
|
pMgmt->wIBSSBeaconPeriod = sStartAPCmd.uBeaconInt;
|
||||||
|
else
|
||||||
|
pMgmt->wIBSSBeaconPeriod = 100;
|
||||||
|
|
||||||
|
if (sStartAPCmd.bShareKeyAuth == TRUE){
|
||||||
|
pMgmt->bShareKeyAlgorithm = TRUE;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Share Key \n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pMgmt->bShareKeyAlgorithm = FALSE;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Open System \n");
|
||||||
|
}
|
||||||
|
memcpy(pMgmt->abyIBSSSuppRates, abySuppRates, 6);
|
||||||
|
|
||||||
|
if (sStartAPCmd.byBasicRate & BIT3) {
|
||||||
|
pMgmt->abyIBSSSuppRates[2] |= BIT7;
|
||||||
|
pMgmt->abyIBSSSuppRates[3] |= BIT7;
|
||||||
|
pMgmt->abyIBSSSuppRates[4] |= BIT7;
|
||||||
|
pMgmt->abyIBSSSuppRates[5] |= BIT7;
|
||||||
|
}else if (sStartAPCmd.byBasicRate & BIT2) {
|
||||||
|
pMgmt->abyIBSSSuppRates[2] |= BIT7;
|
||||||
|
pMgmt->abyIBSSSuppRates[3] |= BIT7;
|
||||||
|
pMgmt->abyIBSSSuppRates[4] |= BIT7;
|
||||||
|
}else if (sStartAPCmd.byBasicRate & BIT1) {
|
||||||
|
pMgmt->abyIBSSSuppRates[2] |= BIT7;
|
||||||
|
pMgmt->abyIBSSSuppRates[3] |= BIT7;
|
||||||
|
}else if (sStartAPCmd.byBasicRate & BIT1) {
|
||||||
|
pMgmt->abyIBSSSuppRates[2] |= BIT7;
|
||||||
|
}else {
|
||||||
|
//default 1,2M
|
||||||
|
pMgmt->abyIBSSSuppRates[2] |= BIT7;
|
||||||
|
pMgmt->abyIBSSSuppRates[3] |= BIT7;
|
||||||
|
}
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Support Rate= %x %x %x %x\n",
|
||||||
|
pMgmt->abyIBSSSuppRates[2],
|
||||||
|
pMgmt->abyIBSSSuppRates[3],
|
||||||
|
pMgmt->abyIBSSSuppRates[4],
|
||||||
|
pMgmt->abyIBSSSuppRates[5]
|
||||||
|
);
|
||||||
|
|
||||||
|
netif_stop_queue(pDevice->dev);
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RUN_AP, NULL);
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_GET_NODE_CNT:
|
||||||
|
|
||||||
|
cbListCount = 0;
|
||||||
|
pNode = &(pMgmt->sNodeDBTable[0]);
|
||||||
|
for (ii = 0; ii < (MAX_NODE_NUM + 1); ii++) {
|
||||||
|
pNode = &(pMgmt->sNodeDBTable[ii]);
|
||||||
|
if (!pNode->bActive)
|
||||||
|
continue;
|
||||||
|
cbListCount++;
|
||||||
|
};
|
||||||
|
|
||||||
|
sNodeList.uItem = cbListCount;
|
||||||
|
if (copy_to_user(pReq->data, &sNodeList, sizeof(SNodeList))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
pReq->wResult = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WLAN_CMD_GET_NODE_LIST:
|
||||||
|
|
||||||
|
if (copy_from_user(&sNodeList, pReq->data, sizeof(SNodeList))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
pNodeList = (PSNodeList)kmalloc(sizeof(SNodeList) + (sNodeList.uItem * sizeof(SNodeItem)), (int)GFP_ATOMIC);
|
||||||
|
if (pNodeList == NULL) {
|
||||||
|
result = -ENOMEM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pNodeList->uItem = sNodeList.uItem;
|
||||||
|
pNode = &(pMgmt->sNodeDBTable[0]);
|
||||||
|
for (ii = 0, jj = 0; ii < (MAX_NODE_NUM + 1); ii++) {
|
||||||
|
pNode = &(pMgmt->sNodeDBTable[ii]);
|
||||||
|
if (pNode->bActive) {
|
||||||
|
pNodeList->sNodeList[jj].wAID = pNode->wAID;
|
||||||
|
memcpy(pNodeList->sNodeList[jj].abyMACAddr, pNode->abyMACAddr, WLAN_ADDR_LEN);
|
||||||
|
pNodeList->sNodeList[jj].wTxDataRate = pNode->wTxDataRate;
|
||||||
|
pNodeList->sNodeList[jj].wInActiveCount = (WORD)pNode->uInActiveCount;
|
||||||
|
pNodeList->sNodeList[jj].wEnQueueCnt = (WORD)pNode->wEnQueueCnt;
|
||||||
|
pNodeList->sNodeList[jj].wFlags = (WORD)pNode->dwFlags;
|
||||||
|
pNodeList->sNodeList[jj].bPWBitOn = pNode->bPSEnable;
|
||||||
|
pNodeList->sNodeList[jj].byKeyIndex = pNode->byKeyIndex;
|
||||||
|
pNodeList->sNodeList[jj].wWepKeyLength = pNode->uWepKeyLength;
|
||||||
|
memcpy(&(pNodeList->sNodeList[jj].abyWepKey[0]), &(pNode->abyWepKey[0]), WEP_KEYMAXLEN);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "key= %2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n",
|
||||||
|
pNodeList->sNodeList[jj].abyWepKey[0],
|
||||||
|
pNodeList->sNodeList[jj].abyWepKey[1],
|
||||||
|
pNodeList->sNodeList[jj].abyWepKey[2],
|
||||||
|
pNodeList->sNodeList[jj].abyWepKey[3],
|
||||||
|
pNodeList->sNodeList[jj].abyWepKey[4]
|
||||||
|
);
|
||||||
|
pNodeList->sNodeList[jj].bIsInFallback = pNode->bIsInFallback;
|
||||||
|
pNodeList->sNodeList[jj].uTxFailures = pNode->uTxFailures;
|
||||||
|
pNodeList->sNodeList[jj].uTxAttempts = pNode->uTxAttempts;
|
||||||
|
pNodeList->sNodeList[jj].wFailureRatio = (WORD)pNode->uFailureRatio;
|
||||||
|
jj ++;
|
||||||
|
if (jj >= pNodeList->uItem)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (copy_to_user(pReq->data, pNodeList, sizeof(SNodeList) + (sNodeList.uItem * sizeof(SNodeItem)))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
kfree(pNodeList);
|
||||||
|
pReq->wResult = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
#ifdef WPA_SM_Transtatus
|
||||||
|
case 0xFF:
|
||||||
|
memset(wpa_Result.ifname,0,sizeof(wpa_Result.ifname));
|
||||||
|
wpa_Result.proto = 0;
|
||||||
|
wpa_Result.key_mgmt = 0;
|
||||||
|
wpa_Result.eap_type = 0;
|
||||||
|
wpa_Result.authenticated = FALSE;
|
||||||
|
pDevice->fWPA_Authened = FALSE;
|
||||||
|
if (copy_from_user(&wpa_Result, pReq->data, sizeof(wpa_Result))) {
|
||||||
|
result = -EFAULT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//DavidWang for some AP maybe good authenticate
|
||||||
|
if(wpa_Result.key_mgmt==0x20)
|
||||||
|
pMgmt->Cisco_cckm =1;
|
||||||
|
else
|
||||||
|
pMgmt->Cisco_cckm =0;
|
||||||
|
//DavidWang
|
||||||
|
|
||||||
|
if(wpa_Result.authenticated==TRUE) {
|
||||||
|
#ifdef SndEvt_ToAPI
|
||||||
|
{
|
||||||
|
union iwreq_data wrqu;
|
||||||
|
|
||||||
|
pItemSSID = (PWLAN_IE_SSID)pMgmt->abyCurrSSID;
|
||||||
|
|
||||||
|
memset(&wrqu, 0, sizeof(wrqu));
|
||||||
|
wrqu.data.flags = RT_WPACONNECTED_EVENT_FLAG;
|
||||||
|
wrqu.data.length =pItemSSID->len;
|
||||||
|
wireless_send_event(pDevice->dev, IWEVCUSTOM, &wrqu, pItemSSID->abySSID);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
pDevice->fWPA_Authened = TRUE; //is sucessful peer to wpa_Result.authenticated?
|
||||||
|
}
|
||||||
|
|
||||||
|
//printk("get private wpa_supplicant announce WPA SM\n");
|
||||||
|
//printk("wpa-->ifname=%s\n",wpa_Result.ifname);
|
||||||
|
//printk("wpa-->proto=%d\n",wpa_Result.proto);
|
||||||
|
//printk("wpa-->key-mgmt=%d\n",wpa_Result.key_mgmt);
|
||||||
|
//printk("wpa-->eap_type=%d\n",wpa_Result.eap_type);
|
||||||
|
//printk("wpa-->authenticated is %s\n",(wpa_Result.authenticated==TRUE)?"TRUE":"FALSE");
|
||||||
|
|
||||||
|
pReq->wResult = 0;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Private command not support..\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
74
drivers/staging/vt6656/ioctl.h
Normal file
74
drivers/staging/vt6656/ioctl.h
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: hostap.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 2003
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __IOCTL_H__
|
||||||
|
#define __IOCTL_H__
|
||||||
|
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
int private_ioctl(PSDevice pDevice, struct ifreq *rq);
|
||||||
|
|
||||||
|
/*
|
||||||
|
VOID vConfigWEPKey (
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN DWORD dwKeyIndex,
|
||||||
|
IN PBYTE pbyKey,
|
||||||
|
IN ULONG uKeyLength
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __IOCTL_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
2355
drivers/staging/vt6656/iwctl.c
Normal file
2355
drivers/staging/vt6656/iwctl.c
Normal file
File diff suppressed because it is too large
Load Diff
332
drivers/staging/vt6656/iwctl.h
Normal file
332
drivers/staging/vt6656/iwctl.h
Normal file
@ -0,0 +1,332 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: iwctl.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 2004
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __IWCTL_H__
|
||||||
|
#define __IWCTL_H__
|
||||||
|
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
#if WIRELESS_EXT < 18
|
||||||
|
|
||||||
|
|
||||||
|
#define SIOCSIWMLME 0x8B16
|
||||||
|
#define SIOCSIWGENIE 0x8B30
|
||||||
|
|
||||||
|
// WPA : Authentication mode parameters
|
||||||
|
#define SIOCSIWAUTH 0x8B32
|
||||||
|
#define SIOCGIWAUTH 0x8B33
|
||||||
|
|
||||||
|
// WPA : Extended version of encoding configuration
|
||||||
|
#define SIOCSIWENCODEEXT 0x8B34
|
||||||
|
#define SIOCGIWENCODEEXT 0x8B35
|
||||||
|
|
||||||
|
#define IW_AUTH_WPA_VERSION 0
|
||||||
|
#define IW_AUTH_CIPHER_PAIRWISE 1
|
||||||
|
#define IW_AUTH_CIPHER_GROUP 2
|
||||||
|
#define IW_AUTH_KEY_MGMT 3
|
||||||
|
#define IW_AUTH_TKIP_COUNTERMEASURES 4
|
||||||
|
#define IW_AUTH_DROP_UNENCRYPTED 5
|
||||||
|
#define IW_AUTH_80211_AUTH_ALG 6
|
||||||
|
#define IW_AUTH_WPA_ENABLED 7
|
||||||
|
#define IW_AUTH_RX_UNENCRYPTED_EAPOL 8
|
||||||
|
#define IW_AUTH_ROAMING_CONTROL 9
|
||||||
|
#define IW_AUTH_PRIVACY_INVOKED 10
|
||||||
|
|
||||||
|
#define IW_AUTH_WPA_VERSION_DISABLED 0x00000001
|
||||||
|
#define IW_AUTH_WPA_VERSION_WPA 0x00000002
|
||||||
|
#define IW_AUTH_WPA_VERSION_WPA2 0x00000004
|
||||||
|
|
||||||
|
#define IW_AUTH_CIPHER_NONE 0x00000001
|
||||||
|
#define IW_AUTH_CIPHER_WEP40 0x00000002
|
||||||
|
#define IW_AUTH_CIPHER_TKIP 0x00000004
|
||||||
|
#define IW_AUTH_CIPHER_CCMP 0x00000008
|
||||||
|
#define IW_AUTH_CIPHER_WEP104 0x00000010
|
||||||
|
|
||||||
|
#define IW_AUTH_KEY_MGMT_802_1X 1
|
||||||
|
#define IW_AUTH_KEY_MGMT_PSK 2
|
||||||
|
|
||||||
|
#define IW_AUTH_ALG_OPEN_SYSTEM 0x00000001
|
||||||
|
#define IW_AUTH_ALG_SHARED_KEY 0x00000002
|
||||||
|
#define IW_AUTH_ALG_LEAP 0x00000004
|
||||||
|
|
||||||
|
#define IW_AUTH_ROAMING_ENABLE 0
|
||||||
|
#define IW_AUTH_ROAMING_DISABLE 1
|
||||||
|
|
||||||
|
#define IW_ENCODE_SEQ_MAX_SIZE 8
|
||||||
|
|
||||||
|
#define IW_ENCODE_ALG_NONE 0
|
||||||
|
#define IW_ENCODE_ALG_WEP 1
|
||||||
|
#define IW_ENCODE_ALG_TKIP 2
|
||||||
|
#define IW_ENCODE_ALG_CCMP 3
|
||||||
|
|
||||||
|
|
||||||
|
struct iw_encode_ext
|
||||||
|
{
|
||||||
|
__u32 ext_flags; // IW_ENCODE_EXT_*
|
||||||
|
__u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE]; // LSB first
|
||||||
|
__u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE]; // LSB first
|
||||||
|
struct sockaddr addr; // ff:ff:ff:ff:ff:ff for broadcast/multicast
|
||||||
|
// (group) keys or unicast address for
|
||||||
|
// individual keys
|
||||||
|
__u16 alg; // IW_ENCODE_ALG_*
|
||||||
|
__u16 key_len;
|
||||||
|
__u8 key[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct iw_mlme
|
||||||
|
{
|
||||||
|
__u16 cmd; /* IW_MLME_* */
|
||||||
|
__u16 reason_code;
|
||||||
|
struct sockaddr addr;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // WIRELESS_EXT < 18
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef WIRELESS_EXT
|
||||||
|
|
||||||
|
struct iw_statistics *iwctl_get_wireless_stats (struct net_device *dev);
|
||||||
|
|
||||||
|
|
||||||
|
int iwctl_siwap(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct sockaddr *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwrange(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_point *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
|
||||||
|
int iwctl_giwmode(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
__u32 *wmode,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwmode(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
__u32 *wmode,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwfreq(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_freq *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwfreq(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_freq *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwname(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
char *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwnwid(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra) ;
|
||||||
|
|
||||||
|
int iwctl_giwsens(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwap(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct sockaddr *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwaplist(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_point *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwessid(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_point *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwessid(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_point *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwrate(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwrate(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwrts(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
|
||||||
|
int iwctl_giwrts(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwfrag(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwfrag(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwretry(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwretry(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwencode(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_point *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwencode(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_point *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwpower(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwpower(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwscan(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_point *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwscan(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
//2008-0409-07, <Add> by Einsn Liu
|
||||||
|
#ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
|
||||||
|
int iwctl_siwauth(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwauth(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_param *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwgenie(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_point *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwgenie(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_point *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwencodeext(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_point *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_giwencodeext(struct net_device *dev,
|
||||||
|
struct iw_request_info *info,
|
||||||
|
struct iw_point *wrq,
|
||||||
|
char *extra);
|
||||||
|
|
||||||
|
int iwctl_siwmlme(struct net_device *dev,
|
||||||
|
struct iw_request_info * info,
|
||||||
|
struct iw_point *wrq,
|
||||||
|
char *extra);
|
||||||
|
#endif // #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
|
||||||
|
#endif
|
||||||
|
//End Add -- //2008-0409-07, <Add> by Einsn Liu
|
||||||
|
|
||||||
|
|
||||||
|
#if WIRELESS_EXT > 12
|
||||||
|
extern const struct iw_handler_def iwctl_handler_def;
|
||||||
|
extern const struct iw_priv_args iwctl_private_args;
|
||||||
|
#else
|
||||||
|
struct iw_request_info {};
|
||||||
|
#endif //WIRELESS_EXT > 12
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __IWCTL_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
315
drivers/staging/vt6656/kcompat.h
Normal file
315
drivers/staging/vt6656/kcompat.h
Normal file
@ -0,0 +1,315 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: kcompat.h
|
||||||
|
*
|
||||||
|
* Purpose: define kernel compatibility header
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: Apr 8, 2002
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef _KCOMPAT_H
|
||||||
|
#define _KCOMPAT_H
|
||||||
|
|
||||||
|
#include <linux/version.h>
|
||||||
|
|
||||||
|
#ifndef __init
|
||||||
|
#define __init
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __exit
|
||||||
|
#define __exit
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __devexit
|
||||||
|
#define __devexit
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __devinitdata
|
||||||
|
#define __devinitdata
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef MODULE_LICENSE
|
||||||
|
#define MODULE_LICENSE(license)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef MOD_INC_USE_COUNT
|
||||||
|
#define MOD_INC_USE_COUNT do {} while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef MOD_DEC_USE_COUNT
|
||||||
|
#define MOD_DEC_USE_COUNT do {} while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_NETDEV_PRIV
|
||||||
|
#define netdev_priv(dev) (dev->priv)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef IRQ_RETVAL
|
||||||
|
typedef void irqreturn_t;
|
||||||
|
|
||||||
|
|
||||||
|
#define IRQ_RETVAL(x)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
|
||||||
|
|
||||||
|
#define vntwusb_submit_urb(val) usb_submit_urb(val, GFP_ATOMIC)
|
||||||
|
#define vntwusb_alloc_urb(val) usb_alloc_urb(val, GFP_ATOMIC)
|
||||||
|
#else
|
||||||
|
#define vntwusb_alloc_urb(val) usb_alloc_urb(val)
|
||||||
|
#define vntwusb_submit_urb(val) usb_submit_urb(val)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
|
||||||
|
|
||||||
|
#define vntwusb_unlink_urb(val) usb_kill_urb(val)
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define vntwusb_unlink_urb(val) usb_unlink_urb(val)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,2,18)
|
||||||
|
|
||||||
|
typedef unsigned long dma_addr_t;
|
||||||
|
typedef struct wait_queue *wait_queue_head_t;
|
||||||
|
#define init_waitqueue_head(x) *(x)=NULL
|
||||||
|
#define set_current_state(status) { current->state = (status); mb(); }
|
||||||
|
|
||||||
|
#ifdef MODULE
|
||||||
|
|
||||||
|
#define module_init(fn) int init_module (void) { return fn(); }
|
||||||
|
#define module_exit(fn) void cleanup_module(void) { return fn(); }
|
||||||
|
|
||||||
|
#else /* MODULE */
|
||||||
|
|
||||||
|
#define module_init(fn) int e100_probe (void) { return fn(); }
|
||||||
|
#define module_exit(fn) /* NOTHING */
|
||||||
|
|
||||||
|
#endif /* MODULE */
|
||||||
|
|
||||||
|
#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,2,18) */
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
|
||||||
|
|
||||||
|
#ifdef MODVERSIONS
|
||||||
|
#include <linux/modversions.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
|
||||||
|
#define pci_resource_start(dev, bar) \
|
||||||
|
(((dev)->base_address[(bar)] & PCI_BASE_ADDRESS_SPACE_IO) ? \
|
||||||
|
((dev)->base_address[(bar)] & PCI_BASE_ADDRESS_IO_MASK) : \
|
||||||
|
((dev)->base_address[(bar)] & PCI_BASE_ADDRESS_MEM_MASK))
|
||||||
|
|
||||||
|
static inline int pci_enable_device(struct pci_dev *dev) { return 0; }
|
||||||
|
#define __constant_cpu_to_le32 cpu_to_le32
|
||||||
|
#define __constant_cpu_to_le16 cpu_to_le16
|
||||||
|
|
||||||
|
#define PCI_DMA_TODEVICE 1
|
||||||
|
#define PCI_DMA_FROMDEVICE 2
|
||||||
|
|
||||||
|
extern inline void *pci_alloc_consistent (struct pci_dev *dev,
|
||||||
|
size_t size,
|
||||||
|
dma_addr_t *dma_handle) {
|
||||||
|
void *vaddr = kmalloc(size, GFP_ATOMIC);
|
||||||
|
if(vaddr != NULL) {
|
||||||
|
*dma_handle = virt_to_bus(vaddr);
|
||||||
|
}
|
||||||
|
return vaddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define pci_dma_sync_single(dev,dma_handle,size,direction) do{} while(0)
|
||||||
|
#define pci_dma_supported(dev, addr_mask) (1)
|
||||||
|
#define pci_free_consistent(dev, size, cpu_addr, dma_handle) kfree(cpu_addr)
|
||||||
|
#define pci_map_single(dev, addr, size, direction) virt_to_bus(addr)
|
||||||
|
#define pci_unmap_single(dev, dma_handle, size, direction) do{} while(0)
|
||||||
|
|
||||||
|
|
||||||
|
#define spin_lock_bh spin_lock_irq
|
||||||
|
#define spin_unlock_bh spin_unlock_irq
|
||||||
|
#define del_timer_sync(timer) del_timer(timer)
|
||||||
|
#define net_device device
|
||||||
|
|
||||||
|
#define netif_start_queue(dev) ( clear_bit(0, &(dev)->tbusy))
|
||||||
|
#define netif_stop_queue(dev) ( set_bit(0, &(dev)->tbusy))
|
||||||
|
#define netif_wake_queue(dev) { clear_bit(0, &(dev)->tbusy); \
|
||||||
|
mark_bh(NET_BH); }
|
||||||
|
#define netif_running(dev) ( test_bit(0, &(dev)->start))
|
||||||
|
#define netif_queue_stopped(dev) ( test_bit(0, &(dev)->tbusy))
|
||||||
|
|
||||||
|
#define netif_device_attach(dev) \
|
||||||
|
do{ (dev)->start = 1; netif_start_queue(dev); } while (0)
|
||||||
|
#define netif_device_detach(dev) \
|
||||||
|
do{ (dev)->start = 0; netif_stop_queue(dev); } while (0)
|
||||||
|
|
||||||
|
#define dev_kfree_skb_irq(skb) dev_kfree_skb(skb)
|
||||||
|
|
||||||
|
#define netif_carrier_on(dev) do {} while (0)
|
||||||
|
#define netif_carrier_off(dev) do {} while (0)
|
||||||
|
|
||||||
|
|
||||||
|
#define PCI_ANY_ID (~0U)
|
||||||
|
|
||||||
|
struct pci_device_id {
|
||||||
|
unsigned int vendor, device;
|
||||||
|
unsigned int subvendor, subdevice;
|
||||||
|
unsigned int class, classmask;
|
||||||
|
unsigned long driver_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MODULE_DEVICE_TABLE(bus, dev_table)
|
||||||
|
#define PCI_MAX_NUM_NICS 256
|
||||||
|
|
||||||
|
struct pci_driver {
|
||||||
|
char *name;
|
||||||
|
struct pci_device_id *id_table;
|
||||||
|
int (*probe)(struct pci_dev *dev, const struct pci_device_id *id);
|
||||||
|
void (*remove)(struct pci_dev *dev);
|
||||||
|
void (*suspend)(struct pci_dev *dev);
|
||||||
|
void (*resume)(struct pci_dev *dev);
|
||||||
|
struct pci_dev *pcimap[PCI_MAX_NUM_NICS];
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline int pci_module_init(struct pci_driver *drv)
|
||||||
|
{
|
||||||
|
struct pci_dev *pdev;
|
||||||
|
struct pci_device_id *pcid;
|
||||||
|
uint16_t subvendor, subdevice;
|
||||||
|
int board_count = 0;
|
||||||
|
|
||||||
|
/* walk the global pci device list looking for matches */
|
||||||
|
for (pdev = pci_devices; pdev && (board_count < PCI_MAX_NUM_NICS); pdev = pdev->next) {
|
||||||
|
|
||||||
|
pcid = &drv->id_table[0];
|
||||||
|
pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &subvendor);
|
||||||
|
pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &subdevice);
|
||||||
|
|
||||||
|
while (pcid->vendor != 0) {
|
||||||
|
if (((pcid->vendor == pdev->vendor) || (pcid->vendor == PCI_ANY_ID)) &&
|
||||||
|
((pcid->device == pdev->device) || (pcid->device == PCI_ANY_ID)) &&
|
||||||
|
((pcid->subvendor == subvendor) || (pcid->subvendor == PCI_ANY_ID)) &&
|
||||||
|
((pcid->subdevice == subdevice) || (pcid->subdevice == PCI_ANY_ID))) {
|
||||||
|
|
||||||
|
if (drv->probe(pdev, pcid) == 0) {
|
||||||
|
drv->pcimap[board_count] = pdev;
|
||||||
|
board_count++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pcid++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (board_count < PCI_MAX_NUM_NICS) {
|
||||||
|
drv->pcimap[board_count] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (board_count > 0) ? 0 : -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void pci_unregister_driver(struct pci_driver *drv)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < PCI_MAX_NUM_NICS; i++) {
|
||||||
|
if (!drv->pcimap[i])
|
||||||
|
break;
|
||||||
|
|
||||||
|
drv->remove(drv->pcimap[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define pci_set_drvdata(pcid, data)
|
||||||
|
|
||||||
|
#define pci_get_drvdata(pcid) ({ \
|
||||||
|
PSDevice pInfo; \
|
||||||
|
for (pInfo = pDevice_Infos; \
|
||||||
|
pInfo; pInfo = pInfo->next) { \
|
||||||
|
if (pInfo->pcid == pcid) \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
pInfo; })
|
||||||
|
|
||||||
|
#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) */
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,5)
|
||||||
|
|
||||||
|
#define skb_linearize(skb, gfp_mask) ({ \
|
||||||
|
struct sk_buff *tmp_skb; \
|
||||||
|
tmp_skb = skb; \
|
||||||
|
skb = skb_copy(tmp_skb, gfp_mask); \
|
||||||
|
dev_kfree_skb_irq(tmp_skb); })
|
||||||
|
|
||||||
|
#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,4,5) */
|
||||||
|
|
||||||
|
#ifndef MODULE_LICESEN
|
||||||
|
#define MODULE_LICESEN(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,6)
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,2)
|
||||||
|
static inline int pci_set_power_state(struct pci_dev* pcid, int state) { return 0; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PMCSR 0xe0
|
||||||
|
#define PM_ENABLE_BIT 0x0100
|
||||||
|
#define PM_CLEAR_BIT 0x8000
|
||||||
|
#define PM_STATE_MASK 0xFFFC
|
||||||
|
#define PM_STATE_D1 0x0001
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
pci_enable_wake(struct pci_dev *dev, u32 state, int enable)
|
||||||
|
{
|
||||||
|
u16 p_state;
|
||||||
|
|
||||||
|
pci_read_config_word(dev, PMCSR, &p_state);
|
||||||
|
pci_write_config_word(dev, PMCSR, p_state | PM_CLEAR_BIT);
|
||||||
|
|
||||||
|
if (enable == 0) {
|
||||||
|
p_state &= ~PM_ENABLE_BIT;
|
||||||
|
} else {
|
||||||
|
p_state |= PM_ENABLE_BIT;
|
||||||
|
}
|
||||||
|
p_state &= PM_STATE_MASK;
|
||||||
|
p_state |= state;
|
||||||
|
|
||||||
|
pci_write_config_word(dev, PMCSR, p_state);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,4,6) */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
886
drivers/staging/vt6656/key.c
Normal file
886
drivers/staging/vt6656/key.c
Normal file
@ -0,0 +1,886 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: key.c
|
||||||
|
*
|
||||||
|
* Purpose: Implement functions for 802.11i Key management
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: May 29, 2003
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* KeyvInitTable - Init Key management table
|
||||||
|
* KeybGetKey - Get Key from table
|
||||||
|
* KeybSetKey - Set Key to table
|
||||||
|
* KeybRemoveKey - Remove Key from table
|
||||||
|
* KeybGetTransmitKey - Get Transmit Key from table
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__TMACRO_H__)
|
||||||
|
#include "tmacro.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TBIT_H__)
|
||||||
|
#include "tbit.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__KEY_H__)
|
||||||
|
#include "key.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MAC_H__)
|
||||||
|
#include "mac.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__RNDIS_H__)
|
||||||
|
#include "rndis.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CONTROL_H__)
|
||||||
|
#include "control.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
//static int msglevel =MSG_LEVEL_DEBUG;
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
static VOID
|
||||||
|
s_vCheckKeyTableValid (PVOID pDeviceHandler, PSKeyManagement pTable)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) pDeviceHandler;
|
||||||
|
int i;
|
||||||
|
WORD wLength = 0;
|
||||||
|
BYTE pbyData[MAX_KEY_TABLE];
|
||||||
|
|
||||||
|
for (i=0;i<MAX_KEY_TABLE;i++) {
|
||||||
|
if ((pTable->KeyTable[i].bInUse == TRUE) &&
|
||||||
|
(pTable->KeyTable[i].PairwiseKey.bKeyValid == FALSE) &&
|
||||||
|
(pTable->KeyTable[i].GroupKey[0].bKeyValid == FALSE) &&
|
||||||
|
(pTable->KeyTable[i].GroupKey[1].bKeyValid == FALSE) &&
|
||||||
|
(pTable->KeyTable[i].GroupKey[2].bKeyValid == FALSE) &&
|
||||||
|
(pTable->KeyTable[i].GroupKey[3].bKeyValid == FALSE)
|
||||||
|
) {
|
||||||
|
|
||||||
|
pTable->KeyTable[i].bInUse = FALSE;
|
||||||
|
pTable->KeyTable[i].wKeyCtl = 0;
|
||||||
|
pTable->KeyTable[i].bSoftWEP = FALSE;
|
||||||
|
pbyData[wLength++] = (BYTE) i;
|
||||||
|
//MACvDisableKeyEntry(pDevice, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( wLength != 0 ) {
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_CLRKEYENTRY,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
wLength,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Init Key management table
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pTable - Pointer to Key table
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
VOID KeyvInitTable(PVOID pDeviceHandler, PSKeyManagement pTable)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) pDeviceHandler;
|
||||||
|
int i;
|
||||||
|
int jj;
|
||||||
|
BYTE pbyData[MAX_KEY_TABLE+1];
|
||||||
|
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
for (i=0;i<MAX_KEY_TABLE;i++) {
|
||||||
|
pTable->KeyTable[i].bInUse = FALSE;
|
||||||
|
pTable->KeyTable[i].PairwiseKey.bKeyValid = FALSE;
|
||||||
|
pTable->KeyTable[i].PairwiseKey.pvKeyTable = (PVOID)&pTable->KeyTable[i];
|
||||||
|
for (jj=0; jj < MAX_GROUP_KEY; jj++) {
|
||||||
|
pTable->KeyTable[i].GroupKey[jj].bKeyValid = FALSE;
|
||||||
|
pTable->KeyTable[i].GroupKey[jj].pvKeyTable = (PVOID) &(pTable->KeyTable[i]);
|
||||||
|
}
|
||||||
|
pTable->KeyTable[i].wKeyCtl = 0;
|
||||||
|
pTable->KeyTable[i].dwGTKeyIndex = 0;
|
||||||
|
pTable->KeyTable[i].bSoftWEP = FALSE;
|
||||||
|
pbyData[i] = (BYTE) i;
|
||||||
|
}
|
||||||
|
pbyData[i] = (BYTE) i;
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_CLRKEYENTRY,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
11,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Get Key from table
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pTable - Pointer to Key table
|
||||||
|
* pbyBSSID - BSSID of Key
|
||||||
|
* dwKeyIndex - Key Index (0xFFFFFFFF means pairwise key)
|
||||||
|
* Out:
|
||||||
|
* pKey - Key return
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if found otherwise FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL KeybGetKey (
|
||||||
|
IN PSKeyManagement pTable,
|
||||||
|
IN PBYTE pbyBSSID,
|
||||||
|
IN DWORD dwKeyIndex,
|
||||||
|
OUT PSKeyItem *pKey
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybGetKey() \n");
|
||||||
|
|
||||||
|
*pKey = NULL;
|
||||||
|
for (i=0;i<MAX_KEY_TABLE;i++) {
|
||||||
|
if ((pTable->KeyTable[i].bInUse == TRUE) &&
|
||||||
|
IS_ETH_ADDRESS_EQUAL(pTable->KeyTable[i].abyBSSID,pbyBSSID)) {
|
||||||
|
if (dwKeyIndex == 0xFFFFFFFF) {
|
||||||
|
if (pTable->KeyTable[i].PairwiseKey.bKeyValid == TRUE) {
|
||||||
|
*pKey = &(pTable->KeyTable[i].PairwiseKey);
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
} else if (dwKeyIndex < MAX_GROUP_KEY) {
|
||||||
|
if (pTable->KeyTable[i].GroupKey[dwKeyIndex].bKeyValid == TRUE) {
|
||||||
|
*pKey = &(pTable->KeyTable[i].GroupKey[dwKeyIndex]);
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Set Key to table
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pTable - Pointer to Key table
|
||||||
|
* pbyBSSID - BSSID of Key
|
||||||
|
* dwKeyIndex - Key index (reference to NDIS DDK)
|
||||||
|
* uKeyLength - Key length
|
||||||
|
* KeyRSC - Key RSC
|
||||||
|
* pbyKey - Pointer to key
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if success otherwise FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL KeybSetKey (
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable,
|
||||||
|
PBYTE pbyBSSID,
|
||||||
|
DWORD dwKeyIndex,
|
||||||
|
ULONG uKeyLength,
|
||||||
|
PQWORD pKeyRSC,
|
||||||
|
PBYTE pbyKey,
|
||||||
|
BYTE byKeyDecMode
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) pDeviceHandler;
|
||||||
|
int i,j;
|
||||||
|
UINT ii;
|
||||||
|
PSKeyItem pKey;
|
||||||
|
UINT uKeyIdx;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Enter KeybSetKey: %lX\n", dwKeyIndex);
|
||||||
|
|
||||||
|
j = (MAX_KEY_TABLE-1);
|
||||||
|
for (i=0;i<(MAX_KEY_TABLE-1);i++) {
|
||||||
|
if ((pTable->KeyTable[i].bInUse == FALSE) &&
|
||||||
|
(j == (MAX_KEY_TABLE-1))) {
|
||||||
|
// found empty table
|
||||||
|
j = i;
|
||||||
|
}
|
||||||
|
if ((pTable->KeyTable[i].bInUse == TRUE) &&
|
||||||
|
IS_ETH_ADDRESS_EQUAL(pTable->KeyTable[i].abyBSSID,pbyBSSID)) {
|
||||||
|
// found table already exist
|
||||||
|
if ((dwKeyIndex & PAIRWISE_KEY) != 0) {
|
||||||
|
// Pairwise key
|
||||||
|
pKey = &(pTable->KeyTable[i].PairwiseKey);
|
||||||
|
pTable->KeyTable[i].wKeyCtl &= 0xFFF0; // clear pairwise key control filed
|
||||||
|
pTable->KeyTable[i].wKeyCtl |= byKeyDecMode;
|
||||||
|
uKeyIdx = 4; // use HW key entry 4 for pairwise key
|
||||||
|
} else {
|
||||||
|
// Group key
|
||||||
|
if ((dwKeyIndex & 0x000000FF) >= MAX_GROUP_KEY)
|
||||||
|
return (FALSE);
|
||||||
|
pKey = &(pTable->KeyTable[i].GroupKey[dwKeyIndex & 0x000000FF]);
|
||||||
|
if ((dwKeyIndex & TRANSMIT_KEY) != 0) {
|
||||||
|
// Group transmit key
|
||||||
|
pTable->KeyTable[i].dwGTKeyIndex = dwKeyIndex;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Group transmit key(R)[%lX]: %d\n", pTable->KeyTable[i].dwGTKeyIndex, i);
|
||||||
|
}
|
||||||
|
pTable->KeyTable[i].wKeyCtl &= 0xFF0F; // clear group key control filed
|
||||||
|
pTable->KeyTable[i].wKeyCtl |= (byKeyDecMode << 4);
|
||||||
|
pTable->KeyTable[i].wKeyCtl |= 0x0040; // use group key for group address
|
||||||
|
uKeyIdx = (dwKeyIndex & 0x000000FF);
|
||||||
|
}
|
||||||
|
pTable->KeyTable[i].wKeyCtl |= 0x8000; // enable on-fly
|
||||||
|
|
||||||
|
pKey->bKeyValid = TRUE;
|
||||||
|
pKey->uKeyLength = uKeyLength;
|
||||||
|
pKey->dwKeyIndex = dwKeyIndex;
|
||||||
|
pKey->byCipherSuite = byKeyDecMode;
|
||||||
|
MEMvCopy(pKey->abyKey, pbyKey, uKeyLength);
|
||||||
|
if (byKeyDecMode == KEY_CTL_WEP) {
|
||||||
|
if (uKeyLength == WLAN_WEP40_KEYLEN)
|
||||||
|
pKey->abyKey[15] &= 0x7F;
|
||||||
|
if (uKeyLength == WLAN_WEP104_KEYLEN)
|
||||||
|
pKey->abyKey[15] |= 0x80;
|
||||||
|
}
|
||||||
|
MACvSetKeyEntry(pDevice, pTable->KeyTable[i].wKeyCtl, i, uKeyIdx, pbyBSSID, (PDWORD)pKey->abyKey);
|
||||||
|
|
||||||
|
if ((dwKeyIndex & USE_KEYRSC) == 0) {
|
||||||
|
// RSC set by NIC
|
||||||
|
ZERO_MEMORY(&(pKey->KeyRSC), sizeof(QWORD));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MEMvCopy(&(pKey->KeyRSC), pKeyRSC, sizeof(QWORD));
|
||||||
|
}
|
||||||
|
pKey->dwTSC47_16 = 0;
|
||||||
|
pKey->wTSC15_0 = 0;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybSetKey(R): \n");
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->bKeyValid: %d\n ", pKey->bKeyValid);
|
||||||
|
//DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->uKeyLength: %d\n ", pKey->uKeyLength);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->abyKey: ");
|
||||||
|
for (ii = 0; ii < pKey->uKeyLength; ii++) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%02x ", pKey->abyKey[ii]);
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %lx\n ", pKey->dwTSC47_16);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->wTSC15_0: %x\n ", pKey->wTSC15_0);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %lx\n ", pKey->dwKeyIndex);
|
||||||
|
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (j < (MAX_KEY_TABLE-1)) {
|
||||||
|
MEMvCopy(pTable->KeyTable[j].abyBSSID,pbyBSSID,U_ETHER_ADDR_LEN);
|
||||||
|
pTable->KeyTable[j].bInUse = TRUE;
|
||||||
|
if ((dwKeyIndex & PAIRWISE_KEY) != 0) {
|
||||||
|
// Pairwise key
|
||||||
|
pKey = &(pTable->KeyTable[j].PairwiseKey);
|
||||||
|
pTable->KeyTable[j].wKeyCtl &= 0xFFF0; // clear pairwise key control filed
|
||||||
|
pTable->KeyTable[j].wKeyCtl |= byKeyDecMode;
|
||||||
|
uKeyIdx = 4; // use HW key entry 4 for pairwise key
|
||||||
|
} else {
|
||||||
|
// Group key
|
||||||
|
if ((dwKeyIndex & 0x000000FF) >= MAX_GROUP_KEY)
|
||||||
|
return (FALSE);
|
||||||
|
pKey = &(pTable->KeyTable[j].GroupKey[dwKeyIndex & 0x000000FF]);
|
||||||
|
if ((dwKeyIndex & TRANSMIT_KEY) != 0) {
|
||||||
|
// Group transmit key
|
||||||
|
pTable->KeyTable[j].dwGTKeyIndex = dwKeyIndex;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Group transmit key(N)[%lX]: %d\n", pTable->KeyTable[j].dwGTKeyIndex, j);
|
||||||
|
}
|
||||||
|
pTable->KeyTable[j].wKeyCtl &= 0xFF0F; // clear group key control filed
|
||||||
|
pTable->KeyTable[j].wKeyCtl |= (byKeyDecMode << 4);
|
||||||
|
pTable->KeyTable[j].wKeyCtl |= 0x0040; // use group key for group address
|
||||||
|
uKeyIdx = (dwKeyIndex & 0x000000FF);
|
||||||
|
}
|
||||||
|
pTable->KeyTable[j].wKeyCtl |= 0x8000; // enable on-fly
|
||||||
|
|
||||||
|
pKey->bKeyValid = TRUE;
|
||||||
|
pKey->uKeyLength = uKeyLength;
|
||||||
|
pKey->dwKeyIndex = dwKeyIndex;
|
||||||
|
pKey->byCipherSuite = byKeyDecMode;
|
||||||
|
MEMvCopy(pKey->abyKey, pbyKey, uKeyLength);
|
||||||
|
if (byKeyDecMode == KEY_CTL_WEP) {
|
||||||
|
if (uKeyLength == WLAN_WEP40_KEYLEN)
|
||||||
|
pKey->abyKey[15] &= 0x7F;
|
||||||
|
if (uKeyLength == WLAN_WEP104_KEYLEN)
|
||||||
|
pKey->abyKey[15] |= 0x80;
|
||||||
|
}
|
||||||
|
MACvSetKeyEntry(pDevice, pTable->KeyTable[j].wKeyCtl, j, uKeyIdx, pbyBSSID, (PDWORD)pKey->abyKey);
|
||||||
|
|
||||||
|
if ((dwKeyIndex & USE_KEYRSC) == 0) {
|
||||||
|
// RSC set by NIC
|
||||||
|
ZERO_MEMORY(&(pKey->KeyRSC), sizeof(QWORD));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MEMvCopy(&(pKey->KeyRSC), pKeyRSC, sizeof(QWORD));
|
||||||
|
}
|
||||||
|
pKey->dwTSC47_16 = 0;
|
||||||
|
pKey->wTSC15_0 = 0;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybSetKey(N): \n");
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->bKeyValid: %d\n ", pKey->bKeyValid);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->uKeyLength: %d\n ", (int)pKey->uKeyLength);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->abyKey: ");
|
||||||
|
for (ii = 0; ii < pKey->uKeyLength; ii++) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%02x ", pKey->abyKey[ii]);
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %lx\n ", pKey->dwTSC47_16);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->wTSC15_0: %x\n ", pKey->wTSC15_0);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %lx\n ", pKey->dwKeyIndex);
|
||||||
|
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Remove Key from table
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pTable - Pointer to Key table
|
||||||
|
* pbyBSSID - BSSID of Key
|
||||||
|
* dwKeyIndex - Key Index (reference to NDIS DDK)
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if success otherwise FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL KeybRemoveKey (
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable,
|
||||||
|
PBYTE pbyBSSID,
|
||||||
|
DWORD dwKeyIndex
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) pDeviceHandler;
|
||||||
|
int i;
|
||||||
|
BOOL bReturnValue = FALSE;
|
||||||
|
|
||||||
|
if (IS_BROADCAST_ADDRESS(pbyBSSID)) {
|
||||||
|
// dealte all key
|
||||||
|
if ((dwKeyIndex & PAIRWISE_KEY) != 0) {
|
||||||
|
for (i=0;i<MAX_KEY_TABLE;i++) {
|
||||||
|
pTable->KeyTable[i].PairwiseKey.bKeyValid = FALSE;
|
||||||
|
}
|
||||||
|
bReturnValue = TRUE;
|
||||||
|
}
|
||||||
|
else if ((dwKeyIndex & 0x000000FF) < MAX_GROUP_KEY) {
|
||||||
|
for (i=0;i<MAX_KEY_TABLE;i++) {
|
||||||
|
pTable->KeyTable[i].GroupKey[dwKeyIndex & 0x000000FF].bKeyValid = FALSE;
|
||||||
|
if ((dwKeyIndex & 0x7FFFFFFF) == (pTable->KeyTable[i].dwGTKeyIndex & 0x7FFFFFFF)) {
|
||||||
|
// remove Group transmit key
|
||||||
|
pTable->KeyTable[i].dwGTKeyIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bReturnValue = TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bReturnValue = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
for (i=0;i<MAX_KEY_TABLE;i++) {
|
||||||
|
if ( (pTable->KeyTable[i].bInUse == TRUE) &&
|
||||||
|
IS_ETH_ADDRESS_EQUAL(pTable->KeyTable[i].abyBSSID,pbyBSSID)) {
|
||||||
|
|
||||||
|
if ((dwKeyIndex & PAIRWISE_KEY) != 0) {
|
||||||
|
pTable->KeyTable[i].PairwiseKey.bKeyValid = FALSE;
|
||||||
|
bReturnValue = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if ((dwKeyIndex & 0x000000FF) < MAX_GROUP_KEY) {
|
||||||
|
pTable->KeyTable[i].GroupKey[dwKeyIndex & 0x000000FF].bKeyValid = FALSE;
|
||||||
|
if ((dwKeyIndex & 0x7FFFFFFF) == (pTable->KeyTable[i].dwGTKeyIndex & 0x7FFFFFFF)) {
|
||||||
|
// remove Group transmit key
|
||||||
|
pTable->KeyTable[i].dwGTKeyIndex = 0;
|
||||||
|
}
|
||||||
|
bReturnValue = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bReturnValue = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} //pTable->KeyTable[i].bInUse == TRUE
|
||||||
|
} //for
|
||||||
|
bReturnValue = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
s_vCheckKeyTableValid(pDevice,pTable);
|
||||||
|
return bReturnValue;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Remove Key from table
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pTable - Pointer to Key table
|
||||||
|
* pbyBSSID - BSSID of Key
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if success otherwise FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL KeybRemoveAllKey (
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable,
|
||||||
|
PBYTE pbyBSSID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) pDeviceHandler;
|
||||||
|
int i,u;
|
||||||
|
|
||||||
|
for (i=0;i<MAX_KEY_TABLE;i++) {
|
||||||
|
if ((pTable->KeyTable[i].bInUse == TRUE) &&
|
||||||
|
IS_ETH_ADDRESS_EQUAL(pTable->KeyTable[i].abyBSSID,pbyBSSID)) {
|
||||||
|
pTable->KeyTable[i].PairwiseKey.bKeyValid = FALSE;
|
||||||
|
for(u=0;u<MAX_GROUP_KEY;u++) {
|
||||||
|
pTable->KeyTable[i].GroupKey[u].bKeyValid = FALSE;
|
||||||
|
}
|
||||||
|
pTable->KeyTable[i].dwGTKeyIndex = 0;
|
||||||
|
s_vCheckKeyTableValid(pDevice, pTable);
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Remove WEP Key from table
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pTable - Pointer to Key table
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if success otherwise FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
VOID KeyvRemoveWEPKey (
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable,
|
||||||
|
DWORD dwKeyIndex
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) pDeviceHandler;
|
||||||
|
|
||||||
|
if ((dwKeyIndex & 0x000000FF) < MAX_GROUP_KEY) {
|
||||||
|
if (pTable->KeyTable[MAX_KEY_TABLE-1].bInUse == TRUE) {
|
||||||
|
if (pTable->KeyTable[MAX_KEY_TABLE-1].GroupKey[dwKeyIndex & 0x000000FF].byCipherSuite == KEY_CTL_WEP) {
|
||||||
|
pTable->KeyTable[MAX_KEY_TABLE-1].GroupKey[dwKeyIndex & 0x000000FF].bKeyValid = FALSE;
|
||||||
|
if ((dwKeyIndex & 0x7FFFFFFF) == (pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex & 0x7FFFFFFF)) {
|
||||||
|
// remove Group transmit key
|
||||||
|
pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s_vCheckKeyTableValid(pDevice, pTable);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID KeyvRemoveAllWEPKey (
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) pDeviceHandler;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i=0;i<MAX_GROUP_KEY;i++) {
|
||||||
|
KeyvRemoveWEPKey(pDevice,pTable, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Get Transmit Key from table
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pTable - Pointer to Key table
|
||||||
|
* pbyBSSID - BSSID of Key
|
||||||
|
* Out:
|
||||||
|
* pKey - Key return
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if found otherwise FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL KeybGetTransmitKey (
|
||||||
|
IN PSKeyManagement pTable,
|
||||||
|
IN PBYTE pbyBSSID,
|
||||||
|
IN DWORD dwKeyType,
|
||||||
|
OUT PSKeyItem *pKey
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int i, ii;
|
||||||
|
|
||||||
|
*pKey = NULL;
|
||||||
|
for (i=0;i<MAX_KEY_TABLE;i++) {
|
||||||
|
if ((pTable->KeyTable[i].bInUse == TRUE) &&
|
||||||
|
IS_ETH_ADDRESS_EQUAL(pTable->KeyTable[i].abyBSSID,pbyBSSID)) {
|
||||||
|
|
||||||
|
if (dwKeyType == PAIRWISE_KEY) {
|
||||||
|
|
||||||
|
if (pTable->KeyTable[i].PairwiseKey.bKeyValid == TRUE) {
|
||||||
|
*pKey = &(pTable->KeyTable[i].PairwiseKey);
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybGetTransmitKey:");
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"PAIRWISE_KEY: KeyTable.abyBSSID: ");
|
||||||
|
for (ii = 0; ii < 6; ii++) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%x ", pTable->KeyTable[i].abyBSSID[ii]);
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");
|
||||||
|
|
||||||
|
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"PairwiseKey.bKeyValid == FALSE\n");
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
} // End of Type == PAIRWISE
|
||||||
|
else {
|
||||||
|
if (pTable->KeyTable[i].dwGTKeyIndex == 0) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ERROR: dwGTKeyIndex == 0 !!!\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (pTable->KeyTable[i].GroupKey[(pTable->KeyTable[i].dwGTKeyIndex&0x000000FF)].bKeyValid == TRUE) {
|
||||||
|
*pKey = &(pTable->KeyTable[i].GroupKey[(pTable->KeyTable[i].dwGTKeyIndex&0x000000FF)]);
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybGetTransmitKey:");
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"GROUP_KEY: KeyTable.abyBSSID\n");
|
||||||
|
for (ii = 0; ii < 6; ii++) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%x ", pTable->KeyTable[i].abyBSSID[ii]);
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"dwGTKeyIndex: %lX\n", pTable->KeyTable[i].dwGTKeyIndex);
|
||||||
|
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"GroupKey.bKeyValid == FALSE\n");
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
} // End of Type = GROUP
|
||||||
|
} // BSSID match
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ERROR: NO Match BSSID !!! ");
|
||||||
|
for (ii = 0; ii < 6; ii++) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%02x ", *(pbyBSSID+ii));
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Check Pairewise Key
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pTable - Pointer to Key table
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if found otherwise FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL KeybCheckPairewiseKey (
|
||||||
|
IN PSKeyManagement pTable,
|
||||||
|
OUT PSKeyItem *pKey
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
*pKey = NULL;
|
||||||
|
for (i=0;i<MAX_KEY_TABLE;i++) {
|
||||||
|
if ((pTable->KeyTable[i].bInUse == TRUE) &&
|
||||||
|
(pTable->KeyTable[i].PairwiseKey.bKeyValid == TRUE)) {
|
||||||
|
*pKey = &(pTable->KeyTable[i].PairwiseKey);
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Set Key to table
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pTable - Pointer to Key table
|
||||||
|
* dwKeyIndex - Key index (reference to NDIS DDK)
|
||||||
|
* uKeyLength - Key length
|
||||||
|
* KeyRSC - Key RSC
|
||||||
|
* pbyKey - Pointer to key
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if success otherwise FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL KeybSetDefaultKey (
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable,
|
||||||
|
DWORD dwKeyIndex,
|
||||||
|
ULONG uKeyLength,
|
||||||
|
PQWORD pKeyRSC,
|
||||||
|
PBYTE pbyKey,
|
||||||
|
BYTE byKeyDecMode
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) pDeviceHandler;
|
||||||
|
UINT ii;
|
||||||
|
PSKeyItem pKey;
|
||||||
|
UINT uKeyIdx;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Enter KeybSetDefaultKey: %1x, %d \n", (int)dwKeyIndex, (int)uKeyLength);
|
||||||
|
|
||||||
|
|
||||||
|
if ((dwKeyIndex & PAIRWISE_KEY) != 0) { // Pairwise key
|
||||||
|
return (FALSE);
|
||||||
|
} else if ((dwKeyIndex & 0x000000FF) >= MAX_GROUP_KEY) {
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
pTable->KeyTable[MAX_KEY_TABLE-1].bInUse = TRUE;
|
||||||
|
for(ii=0;ii<U_ETHER_ADDR_LEN;ii++)
|
||||||
|
pTable->KeyTable[MAX_KEY_TABLE-1].abyBSSID[ii] = 0xFF;
|
||||||
|
|
||||||
|
// Group key
|
||||||
|
pKey = &(pTable->KeyTable[MAX_KEY_TABLE-1].GroupKey[dwKeyIndex & 0x000000FF]);
|
||||||
|
if ((dwKeyIndex & TRANSMIT_KEY) != 0) {
|
||||||
|
// Group transmit key
|
||||||
|
pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex = dwKeyIndex;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Group transmit key(R)[%lX]: %d\n", pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex, MAX_KEY_TABLE-1);
|
||||||
|
|
||||||
|
}
|
||||||
|
pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl &= 0x7F00; // clear all key control filed
|
||||||
|
pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= (byKeyDecMode << 4);
|
||||||
|
pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= (byKeyDecMode);
|
||||||
|
pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= 0x0044; // use group key for all address
|
||||||
|
uKeyIdx = (dwKeyIndex & 0x000000FF);
|
||||||
|
|
||||||
|
if ((uKeyLength == WLAN_WEP232_KEYLEN) &&
|
||||||
|
(byKeyDecMode == KEY_CTL_WEP)) {
|
||||||
|
pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= 0x4000; // disable on-fly disable address match
|
||||||
|
pTable->KeyTable[MAX_KEY_TABLE-1].bSoftWEP = TRUE;
|
||||||
|
} else {
|
||||||
|
if (pTable->KeyTable[MAX_KEY_TABLE-1].bSoftWEP == FALSE)
|
||||||
|
pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= 0xC000; // enable on-fly disable address match
|
||||||
|
}
|
||||||
|
|
||||||
|
pKey->bKeyValid = TRUE;
|
||||||
|
pKey->uKeyLength = uKeyLength;
|
||||||
|
pKey->dwKeyIndex = dwKeyIndex;
|
||||||
|
pKey->byCipherSuite = byKeyDecMode;
|
||||||
|
MEMvCopy(pKey->abyKey, pbyKey, uKeyLength);
|
||||||
|
if (byKeyDecMode == KEY_CTL_WEP) {
|
||||||
|
if (uKeyLength == WLAN_WEP40_KEYLEN)
|
||||||
|
pKey->abyKey[15] &= 0x7F;
|
||||||
|
if (uKeyLength == WLAN_WEP104_KEYLEN)
|
||||||
|
pKey->abyKey[15] |= 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
MACvSetKeyEntry(pDevice, pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl, MAX_KEY_TABLE-1, uKeyIdx, pTable->KeyTable[MAX_KEY_TABLE-1].abyBSSID, (PDWORD) pKey->abyKey);
|
||||||
|
|
||||||
|
if ((dwKeyIndex & USE_KEYRSC) == 0) {
|
||||||
|
// RSC set by NIC
|
||||||
|
ZERO_MEMORY(&(pKey->KeyRSC), sizeof(QWORD));
|
||||||
|
} else {
|
||||||
|
MEMvCopy(&(pKey->KeyRSC), pKeyRSC, sizeof(QWORD));
|
||||||
|
}
|
||||||
|
pKey->dwTSC47_16 = 0;
|
||||||
|
pKey->wTSC15_0 = 0;
|
||||||
|
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybSetKey(R): \n");
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->bKeyValid: %d\n", pKey->bKeyValid);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->uKeyLength: %d\n", (int)pKey->uKeyLength);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->abyKey: \n");
|
||||||
|
for (ii = 0; ii < pKey->uKeyLength; ii++) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%x", pKey->abyKey[ii]);
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %lx\n", pKey->dwTSC47_16);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->wTSC15_0: %x\n", pKey->wTSC15_0);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %lx\n", pKey->dwKeyIndex);
|
||||||
|
|
||||||
|
return (TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Set Key to table
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pTable - Pointer to Key table
|
||||||
|
* dwKeyIndex - Key index (reference to NDIS DDK)
|
||||||
|
* uKeyLength - Key length
|
||||||
|
* KeyRSC - Key RSC
|
||||||
|
* pbyKey - Pointer to key
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if success otherwise FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL KeybSetAllGroupKey (
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable,
|
||||||
|
DWORD dwKeyIndex,
|
||||||
|
ULONG uKeyLength,
|
||||||
|
PQWORD pKeyRSC,
|
||||||
|
PBYTE pbyKey,
|
||||||
|
BYTE byKeyDecMode
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice) pDeviceHandler;
|
||||||
|
int i;
|
||||||
|
UINT ii;
|
||||||
|
PSKeyItem pKey;
|
||||||
|
UINT uKeyIdx;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Enter KeybSetAllGroupKey: %lX\n", dwKeyIndex);
|
||||||
|
|
||||||
|
|
||||||
|
if ((dwKeyIndex & PAIRWISE_KEY) != 0) { // Pairwise key
|
||||||
|
return (FALSE);
|
||||||
|
} else if ((dwKeyIndex & 0x000000FF) >= MAX_GROUP_KEY) {
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0; i < MAX_KEY_TABLE-1; i++) {
|
||||||
|
if (pTable->KeyTable[i].bInUse == TRUE) {
|
||||||
|
// found table already exist
|
||||||
|
// Group key
|
||||||
|
pKey = &(pTable->KeyTable[i].GroupKey[dwKeyIndex & 0x000000FF]);
|
||||||
|
if ((dwKeyIndex & TRANSMIT_KEY) != 0) {
|
||||||
|
// Group transmit key
|
||||||
|
pTable->KeyTable[i].dwGTKeyIndex = dwKeyIndex;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Group transmit key(R)[%lX]: %d\n", pTable->KeyTable[i].dwGTKeyIndex, i);
|
||||||
|
|
||||||
|
}
|
||||||
|
pTable->KeyTable[i].wKeyCtl &= 0xFF0F; // clear group key control filed
|
||||||
|
pTable->KeyTable[i].wKeyCtl |= (byKeyDecMode << 4);
|
||||||
|
pTable->KeyTable[i].wKeyCtl |= 0x0040; // use group key for group address
|
||||||
|
uKeyIdx = (dwKeyIndex & 0x000000FF);
|
||||||
|
|
||||||
|
pTable->KeyTable[i].wKeyCtl |= 0x8000; // enable on-fly
|
||||||
|
|
||||||
|
pKey->bKeyValid = TRUE;
|
||||||
|
pKey->uKeyLength = uKeyLength;
|
||||||
|
pKey->dwKeyIndex = dwKeyIndex;
|
||||||
|
pKey->byCipherSuite = byKeyDecMode;
|
||||||
|
MEMvCopy(pKey->abyKey, pbyKey, uKeyLength);
|
||||||
|
if (byKeyDecMode == KEY_CTL_WEP) {
|
||||||
|
if (uKeyLength == WLAN_WEP40_KEYLEN)
|
||||||
|
pKey->abyKey[15] &= 0x7F;
|
||||||
|
if (uKeyLength == WLAN_WEP104_KEYLEN)
|
||||||
|
pKey->abyKey[15] |= 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
MACvSetKeyEntry(pDevice, pTable->KeyTable[i].wKeyCtl, i, uKeyIdx, pTable->KeyTable[i].abyBSSID, (PDWORD) pKey->abyKey);
|
||||||
|
|
||||||
|
if ((dwKeyIndex & USE_KEYRSC) == 0) {
|
||||||
|
// RSC set by NIC
|
||||||
|
ZERO_MEMORY(&(pKey->KeyRSC), sizeof(QWORD));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MEMvCopy(&(pKey->KeyRSC), pKeyRSC, sizeof(QWORD));
|
||||||
|
}
|
||||||
|
pKey->dwTSC47_16 = 0;
|
||||||
|
pKey->wTSC15_0 = 0;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybSetKey(R): \n");
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->bKeyValid: %d\n ", pKey->bKeyValid);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->uKeyLength: %d\n ", (int)pKey->uKeyLength);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->abyKey: ");
|
||||||
|
for (ii = 0; ii < pKey->uKeyLength; ii++) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%02x ", pKey->abyKey[ii]);
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");
|
||||||
|
|
||||||
|
//DBG_PRN_GRP12(("pKey->dwTSC47_16: %lX\n ", pKey->dwTSC47_16));
|
||||||
|
//DBG_PRN_GRP12(("pKey->wTSC15_0: %X\n ", pKey->wTSC15_0));
|
||||||
|
//DBG_PRN_GRP12(("pKey->dwKeyIndex: %lX\n ", pKey->dwKeyIndex));
|
||||||
|
|
||||||
|
} // (pTable->KeyTable[i].bInUse == TRUE)
|
||||||
|
}
|
||||||
|
return (TRUE);
|
||||||
|
}
|
196
drivers/staging/vt6656/key.h
Normal file
196
drivers/staging/vt6656/key.h
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: key.h
|
||||||
|
*
|
||||||
|
* Purpose: Implement functions for 802.11i Key management
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: May 29, 2003
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __KEY_H__
|
||||||
|
#define __KEY_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__TETHER_H__)
|
||||||
|
#include "tether.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__80211MGR_H__)
|
||||||
|
#include "80211mgr.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
#define MAX_GROUP_KEY 4
|
||||||
|
#define MAX_KEY_TABLE 11
|
||||||
|
#define MAX_KEY_LEN 32
|
||||||
|
#define AES_KEY_LEN 16
|
||||||
|
|
||||||
|
|
||||||
|
#define AUTHENTICATOR_KEY 0x10000000
|
||||||
|
#define USE_KEYRSC 0x20000000
|
||||||
|
#define PAIRWISE_KEY 0x40000000
|
||||||
|
#define TRANSMIT_KEY 0x80000000
|
||||||
|
|
||||||
|
#define GROUP_KEY 0x00000000
|
||||||
|
|
||||||
|
#define KEY_CTL_WEP 0x00
|
||||||
|
#define KEY_CTL_NONE 0x01
|
||||||
|
#define KEY_CTL_TKIP 0x02
|
||||||
|
#define KEY_CTL_CCMP 0x03
|
||||||
|
#define KEY_CTL_INVALID 0xFF
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSKeyItem
|
||||||
|
{
|
||||||
|
BOOL bKeyValid;
|
||||||
|
ULONG uKeyLength;
|
||||||
|
BYTE abyKey[MAX_KEY_LEN];
|
||||||
|
QWORD KeyRSC;
|
||||||
|
DWORD dwTSC47_16;
|
||||||
|
WORD wTSC15_0;
|
||||||
|
BYTE byCipherSuite;
|
||||||
|
BYTE byReserved0;
|
||||||
|
DWORD dwKeyIndex;
|
||||||
|
PVOID pvKeyTable;
|
||||||
|
} SKeyItem, DEF* PSKeyItem; //64
|
||||||
|
|
||||||
|
typedef struct tagSKeyTable
|
||||||
|
{
|
||||||
|
BYTE abyBSSID[U_ETHER_ADDR_LEN]; //6
|
||||||
|
BYTE byReserved0[2]; //8
|
||||||
|
SKeyItem PairwiseKey;
|
||||||
|
SKeyItem GroupKey[MAX_GROUP_KEY]; //64*5 = 320, 320+8=328
|
||||||
|
DWORD dwGTKeyIndex; // GroupTransmitKey Index
|
||||||
|
BOOL bInUse;
|
||||||
|
WORD wKeyCtl;
|
||||||
|
BOOL bSoftWEP;
|
||||||
|
BYTE byReserved1[6];
|
||||||
|
} SKeyTable, DEF* PSKeyTable; //352
|
||||||
|
|
||||||
|
typedef struct tagSKeyManagement
|
||||||
|
{
|
||||||
|
SKeyTable KeyTable[MAX_KEY_TABLE];
|
||||||
|
} SKeyManagement, DEF* PSKeyManagement;
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Macros ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
VOID KeyvInitTable(PVOID pDeviceHandler, PSKeyManagement pTable);
|
||||||
|
|
||||||
|
BOOL KeybGetKey(
|
||||||
|
IN PSKeyManagement pTable,
|
||||||
|
IN PBYTE pbyBSSID,
|
||||||
|
IN DWORD dwKeyIndex,
|
||||||
|
OUT PSKeyItem *pKey
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL KeybSetKey(
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable,
|
||||||
|
PBYTE pbyBSSID,
|
||||||
|
DWORD dwKeyIndex,
|
||||||
|
ULONG uKeyLength,
|
||||||
|
PQWORD pKeyRSC,
|
||||||
|
PBYTE pbyKey,
|
||||||
|
BYTE byKeyDecMode
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL KeybRemoveKey(
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable,
|
||||||
|
PBYTE pbyBSSID,
|
||||||
|
DWORD dwKeyIndex
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL KeybRemoveAllKey (
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable,
|
||||||
|
PBYTE pbyBSSID
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID KeyvRemoveWEPKey(
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable,
|
||||||
|
DWORD dwKeyIndex
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID KeyvRemoveAllWEPKey(
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL KeybGetTransmitKey(
|
||||||
|
IN PSKeyManagement pTable,
|
||||||
|
IN PBYTE pbyBSSID,
|
||||||
|
IN DWORD dwKeyType,
|
||||||
|
OUT PSKeyItem *pKey
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL KeybCheckPairewiseKey(
|
||||||
|
IN PSKeyManagement pTable,
|
||||||
|
OUT PSKeyItem *pKey
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL KeybSetDefaultKey (
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable,
|
||||||
|
DWORD dwKeyIndex,
|
||||||
|
ULONG uKeyLength,
|
||||||
|
PQWORD pKeyRSC,
|
||||||
|
PBYTE pbyKey,
|
||||||
|
BYTE byKeyDecMode
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL KeybSetAllGroupKey (
|
||||||
|
PVOID pDeviceHandler,
|
||||||
|
PSKeyManagement pTable,
|
||||||
|
DWORD dwKeyIndex,
|
||||||
|
ULONG uKeyLength,
|
||||||
|
PQWORD pKeyRSC,
|
||||||
|
PBYTE pbyKey,
|
||||||
|
BYTE byKeyDecMode
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __KEY_H__
|
||||||
|
|
500
drivers/staging/vt6656/mac.c
Normal file
500
drivers/staging/vt6656/mac.c
Normal file
@ -0,0 +1,500 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: mac.c
|
||||||
|
*
|
||||||
|
* Purpose: MAC routines
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 1996
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__TMACRO_H__)
|
||||||
|
#include "tmacro.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TBIT_H__)
|
||||||
|
#include "tbit.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TETHER_H__)
|
||||||
|
#include "tether.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DESC_H__)
|
||||||
|
#include "desc.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MAC_H__)
|
||||||
|
#include "mac.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211hdr_H__)
|
||||||
|
#include "80211hdr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__RNDIS_H__)
|
||||||
|
#include "rndis.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CONTROL_H__)
|
||||||
|
#include "control.h"
|
||||||
|
#endif
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
//static int msglevel =MSG_LEVEL_DEBUG;
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Set this hash index into multicast address register bit
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* byHashIdx - Hash index to set
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void MACvSetMultiAddrByHash (PSDevice pDevice, BYTE byHashIdx)
|
||||||
|
{
|
||||||
|
UINT uByteIdx;
|
||||||
|
BYTE byBitMask;
|
||||||
|
BYTE pbyData[2];
|
||||||
|
|
||||||
|
|
||||||
|
// calculate byte position
|
||||||
|
uByteIdx = byHashIdx / 8;
|
||||||
|
|
||||||
|
// calculate bit position
|
||||||
|
byBitMask = 1;
|
||||||
|
byBitMask <<= (byHashIdx % 8);
|
||||||
|
// turn on the bit
|
||||||
|
|
||||||
|
pbyData[0] = byBitMask;
|
||||||
|
pbyData[1] = byBitMask;
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE_MASK,
|
||||||
|
(WORD) (MAC_REG_MAR0 + uByteIdx),
|
||||||
|
MESSAGE_REQUEST_MACREG,
|
||||||
|
2,
|
||||||
|
pbyData);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Write MAC Multicast Address Mask
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* uByteidx - Index of Mask
|
||||||
|
* byData - Mask Value to write
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
VOID MACvWriteMultiAddr (PSDevice pDevice, UINT uByteIdx, BYTE byData)
|
||||||
|
{
|
||||||
|
BYTE byData1;
|
||||||
|
|
||||||
|
byData1 = byData;
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE,
|
||||||
|
(WORD) (MAC_REG_MAR0 + uByteIdx),
|
||||||
|
MESSAGE_REQUEST_MACREG,
|
||||||
|
1,
|
||||||
|
&byData1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Shut Down MAC
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if success; otherwise FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL MACbShutdown (PSDevice pDevice)
|
||||||
|
{
|
||||||
|
CONTROLnsRequestOutAsyn(pDevice,
|
||||||
|
MESSAGE_TYPE_MACSHUTDOWN,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MACvSetBBType(PSDevice pDevice,BYTE byType)
|
||||||
|
{
|
||||||
|
BYTE pbyData[2];
|
||||||
|
|
||||||
|
|
||||||
|
pbyData[0] = byType;
|
||||||
|
pbyData[1] = EnCFG_BBType_MASK;
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE_MASK,
|
||||||
|
MAC_REG_ENCFG0,
|
||||||
|
MESSAGE_REQUEST_MACREG,
|
||||||
|
2,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MACvSetMISCFifo (PSDevice pDevice, WORD wOffset, DWORD dwData)
|
||||||
|
{
|
||||||
|
BYTE pbyData[4];
|
||||||
|
|
||||||
|
if (wOffset > 273)
|
||||||
|
return;
|
||||||
|
pbyData[0] = (BYTE)dwData;
|
||||||
|
pbyData[1] = (BYTE)(dwData>>8);
|
||||||
|
pbyData[2] = (BYTE)(dwData>>16);
|
||||||
|
pbyData[3] = (BYTE)(dwData>>24);
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE_MISCFF,
|
||||||
|
wOffset,
|
||||||
|
0,
|
||||||
|
4,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Disable the Key Entry by MISCFIFO
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* dwIoBase - Base Address for MAC
|
||||||
|
*
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void MACvDisableKeyEntry (PSDevice pDevice, UINT uEntryIdx)
|
||||||
|
{
|
||||||
|
WORD wOffset;
|
||||||
|
BYTE byData;
|
||||||
|
|
||||||
|
|
||||||
|
byData = (BYTE) uEntryIdx;
|
||||||
|
|
||||||
|
wOffset = MISCFIFO_KEYETRY0;
|
||||||
|
wOffset += (uEntryIdx * MISCFIFO_KEYENTRYSIZE);
|
||||||
|
|
||||||
|
//VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset);
|
||||||
|
//VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, 0);
|
||||||
|
//VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE);
|
||||||
|
|
||||||
|
//issue write misc fifo command to device
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_CLRKEYENTRY,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
&byData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Set the Key by MISCFIFO
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* dwIoBase - Base Address for MAC
|
||||||
|
*
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void MACvSetKeyEntry (PSDevice pDevice, WORD wKeyCtl, UINT uEntryIdx, UINT uKeyIdx, PBYTE pbyAddr, PDWORD pdwKey)
|
||||||
|
{
|
||||||
|
PBYTE pbyKey;
|
||||||
|
WORD wOffset;
|
||||||
|
DWORD dwData1,dwData2;
|
||||||
|
int ii;
|
||||||
|
BYTE pbyData[24];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ( pDevice->byLocalID <= MAC_REVISION_A1 ) {
|
||||||
|
if ( pDevice->sMgmtObj.byCSSPK == KEY_CTL_CCMP )
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wOffset = MISCFIFO_KEYETRY0;
|
||||||
|
wOffset += (uEntryIdx * MISCFIFO_KEYENTRYSIZE);
|
||||||
|
|
||||||
|
dwData1 = 0;
|
||||||
|
dwData1 |= wKeyCtl;
|
||||||
|
dwData1 <<= 16;
|
||||||
|
dwData1 |= MAKEWORD(*(pbyAddr+4), *(pbyAddr+5));
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"1. wOffset: %d, Data: %lX, KeyCtl:%X\n", wOffset, dwData1, wKeyCtl);
|
||||||
|
|
||||||
|
//VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset);
|
||||||
|
//VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, dwData);
|
||||||
|
//VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE);
|
||||||
|
|
||||||
|
//wOffset++;
|
||||||
|
|
||||||
|
dwData2 = 0;
|
||||||
|
dwData2 |= *(pbyAddr+3);
|
||||||
|
dwData2 <<= 8;
|
||||||
|
dwData2 |= *(pbyAddr+2);
|
||||||
|
dwData2 <<= 8;
|
||||||
|
dwData2 |= *(pbyAddr+1);
|
||||||
|
dwData2 <<= 8;
|
||||||
|
dwData2 |= *(pbyAddr+0);
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"2. wOffset: %d, Data: %lX\n", wOffset, dwData2);
|
||||||
|
|
||||||
|
//VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset);
|
||||||
|
//VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, dwData);
|
||||||
|
//VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE);
|
||||||
|
|
||||||
|
//wOffset++;
|
||||||
|
|
||||||
|
//wOffset += (uKeyIdx * 4);
|
||||||
|
/* for (ii=0;ii<4;ii++) {
|
||||||
|
// alway push 128 bits
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"3.(%d) wOffset: %d, Data: %lX\n", ii, wOffset+ii, *pdwKey);
|
||||||
|
VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset+ii);
|
||||||
|
VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, *pdwKey++);
|
||||||
|
VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
pbyKey = (PBYTE)pdwKey;
|
||||||
|
|
||||||
|
pbyData[0] = (BYTE)dwData1;
|
||||||
|
pbyData[1] = (BYTE)(dwData1>>8);
|
||||||
|
pbyData[2] = (BYTE)(dwData1>>16);
|
||||||
|
pbyData[3] = (BYTE)(dwData1>>24);
|
||||||
|
pbyData[4] = (BYTE)dwData2;
|
||||||
|
pbyData[5] = (BYTE)(dwData2>>8);
|
||||||
|
pbyData[6] = (BYTE)(dwData2>>16);
|
||||||
|
pbyData[7] = (BYTE)(dwData2>>24);
|
||||||
|
for(ii=8;ii<24;ii++)
|
||||||
|
pbyData[ii] = *pbyKey++;
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_SETKEY,
|
||||||
|
wOffset,
|
||||||
|
(WORD)uKeyIdx,
|
||||||
|
24,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MACvRegBitsOff(PSDevice pDevice, BYTE byRegOfs, BYTE byBits)
|
||||||
|
{
|
||||||
|
BYTE pbyData[2];
|
||||||
|
|
||||||
|
pbyData[0] = 0;
|
||||||
|
pbyData[1] = byBits;
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE_MASK,
|
||||||
|
byRegOfs,
|
||||||
|
MESSAGE_REQUEST_MACREG,
|
||||||
|
2,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MACvRegBitsOn(PSDevice pDevice, BYTE byRegOfs, BYTE byBits)
|
||||||
|
{
|
||||||
|
BYTE pbyData[2];
|
||||||
|
|
||||||
|
|
||||||
|
pbyData[0] = byBits;
|
||||||
|
pbyData[1] = byBits;
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE_MASK,
|
||||||
|
byRegOfs,
|
||||||
|
MESSAGE_REQUEST_MACREG,
|
||||||
|
2,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MACvWriteWord(PSDevice pDevice, BYTE byRegOfs, WORD wData)
|
||||||
|
{
|
||||||
|
BYTE pbyData[2];
|
||||||
|
|
||||||
|
|
||||||
|
pbyData[0] = (BYTE)(wData & 0xff);
|
||||||
|
pbyData[1] = (BYTE)(wData >> 8);
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE,
|
||||||
|
byRegOfs,
|
||||||
|
MESSAGE_REQUEST_MACREG,
|
||||||
|
2,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MACvWriteBSSIDAddress(PSDevice pDevice, PBYTE pbyEtherAddr)
|
||||||
|
{
|
||||||
|
BYTE pbyData[6];
|
||||||
|
|
||||||
|
|
||||||
|
pbyData[0] = *((PBYTE)pbyEtherAddr);
|
||||||
|
pbyData[1] = *((PBYTE)pbyEtherAddr+1);
|
||||||
|
pbyData[2] = *((PBYTE)pbyEtherAddr+2);
|
||||||
|
pbyData[3] = *((PBYTE)pbyEtherAddr+3);
|
||||||
|
pbyData[4] = *((PBYTE)pbyEtherAddr+4);
|
||||||
|
pbyData[5] = *((PBYTE)pbyEtherAddr+5);
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE,
|
||||||
|
MAC_REG_BSSID0,
|
||||||
|
MESSAGE_REQUEST_MACREG,
|
||||||
|
6,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MACvEnableProtectMD(PSDevice pDevice)
|
||||||
|
{
|
||||||
|
BYTE pbyData[2];
|
||||||
|
|
||||||
|
|
||||||
|
pbyData[0] = EnCFG_ProtectMd;
|
||||||
|
pbyData[1] = EnCFG_ProtectMd;
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE_MASK,
|
||||||
|
MAC_REG_ENCFG0,
|
||||||
|
MESSAGE_REQUEST_MACREG,
|
||||||
|
2,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MACvDisableProtectMD(PSDevice pDevice)
|
||||||
|
{
|
||||||
|
BYTE pbyData[2];
|
||||||
|
|
||||||
|
|
||||||
|
pbyData[0] = 0;
|
||||||
|
pbyData[1] = EnCFG_ProtectMd;
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE_MASK,
|
||||||
|
MAC_REG_ENCFG0,
|
||||||
|
MESSAGE_REQUEST_MACREG,
|
||||||
|
2,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MACvEnableBarkerPreambleMd(PSDevice pDevice)
|
||||||
|
{
|
||||||
|
BYTE pbyData[2];
|
||||||
|
|
||||||
|
|
||||||
|
pbyData[0] = EnCFG_BarkerPream;
|
||||||
|
pbyData[1] = EnCFG_BarkerPream;
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE_MASK,
|
||||||
|
MAC_REG_ENCFG2,
|
||||||
|
MESSAGE_REQUEST_MACREG,
|
||||||
|
2,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MACvDisableBarkerPreambleMd(PSDevice pDevice)
|
||||||
|
{
|
||||||
|
BYTE pbyData[2];
|
||||||
|
|
||||||
|
|
||||||
|
pbyData[0] = 0;
|
||||||
|
pbyData[1] = EnCFG_BarkerPream;
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE_MASK,
|
||||||
|
MAC_REG_ENCFG2,
|
||||||
|
MESSAGE_REQUEST_MACREG,
|
||||||
|
2,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MACvWriteBeaconInterval(PSDevice pDevice, WORD wInterval)
|
||||||
|
{
|
||||||
|
BYTE pbyData[2];
|
||||||
|
|
||||||
|
pbyData[0] = (BYTE) (wInterval & 0xff);
|
||||||
|
pbyData[1] = (BYTE) (wInterval >> 8);
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_WRITE,
|
||||||
|
MAC_REG_BI,
|
||||||
|
MESSAGE_REQUEST_MACREG,
|
||||||
|
2,
|
||||||
|
pbyData
|
||||||
|
);
|
||||||
|
}
|
458
drivers/staging/vt6656/mac.h
Normal file
458
drivers/staging/vt6656/mac.h
Normal file
@ -0,0 +1,458 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: mac.h
|
||||||
|
*
|
||||||
|
* Purpose: MAC routines
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 1996
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
* 07-01-2003 Bryan YC Fan: Re-write codes to support VT3253 spec.
|
||||||
|
* 08-25-2003 Kyle Hsu: Porting MAC functions from sim53.
|
||||||
|
* 09-03-2003 Bryan YC Fan: Add MACvDisableProtectMD & MACvEnableProtectMD
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __MAC_H__
|
||||||
|
#define __MAC_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TMACRO_H__)
|
||||||
|
#include "tmacro.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
#define REV_ID_VT3253_A0 0x00
|
||||||
|
#define REV_ID_VT3253_A1 0x01
|
||||||
|
#define REV_ID_VT3253_B0 0x08
|
||||||
|
#define REV_ID_VT3253_B1 0x09
|
||||||
|
|
||||||
|
//
|
||||||
|
// Registers in the MAC
|
||||||
|
//
|
||||||
|
#define MAC_REG_BISTCMD 0x04
|
||||||
|
#define MAC_REG_BISTSR0 0x05
|
||||||
|
#define MAC_REG_BISTSR1 0x06
|
||||||
|
#define MAC_REG_BISTSR2 0x07
|
||||||
|
#define MAC_REG_I2MCSR 0x08
|
||||||
|
#define MAC_REG_I2MTGID 0x09
|
||||||
|
#define MAC_REG_I2MTGAD 0x0A
|
||||||
|
#define MAC_REG_I2MCFG 0x0B
|
||||||
|
#define MAC_REG_I2MDIPT 0x0C
|
||||||
|
#define MAC_REG_I2MDOPT 0x0E
|
||||||
|
#define MAC_REG_USBSUS 0x0F
|
||||||
|
|
||||||
|
#define MAC_REG_LOCALID 0x14
|
||||||
|
#define MAC_REG_TESTCFG 0x15
|
||||||
|
#define MAC_REG_JUMPER0 0x16
|
||||||
|
#define MAC_REG_JUMPER1 0x17
|
||||||
|
#define MAC_REG_TMCTL 0x18
|
||||||
|
#define MAC_REG_TMDATA0 0x1C
|
||||||
|
#define MAC_REG_TMDATA1 0x1D
|
||||||
|
#define MAC_REG_TMDATA2 0x1E
|
||||||
|
#define MAC_REG_TMDATA3 0x1F
|
||||||
|
|
||||||
|
// MAC Parameter related
|
||||||
|
#define MAC_REG_LRT 0x20 //
|
||||||
|
#define MAC_REG_SRT 0x21 //
|
||||||
|
#define MAC_REG_SIFS 0x22 //
|
||||||
|
#define MAC_REG_DIFS 0x23 //
|
||||||
|
#define MAC_REG_EIFS 0x24 //
|
||||||
|
#define MAC_REG_SLOT 0x25 //
|
||||||
|
#define MAC_REG_BI 0x26 //
|
||||||
|
#define MAC_REG_CWMAXMIN0 0x28 //
|
||||||
|
#define MAC_REG_LINKOFFTOTM 0x2A
|
||||||
|
#define MAC_REG_SWTMOT 0x2B
|
||||||
|
#define MAC_REG_RTSOKCNT 0x2C
|
||||||
|
#define MAC_REG_RTSFAILCNT 0x2D
|
||||||
|
#define MAC_REG_ACKFAILCNT 0x2E
|
||||||
|
#define MAC_REG_FCSERRCNT 0x2F
|
||||||
|
// TSF Related
|
||||||
|
#define MAC_REG_TSFCNTR 0x30 //
|
||||||
|
#define MAC_REG_NEXTTBTT 0x38 //
|
||||||
|
#define MAC_REG_TSFOFST 0x40 //
|
||||||
|
#define MAC_REG_TFTCTL 0x48 //
|
||||||
|
// WMAC Control/Status Related
|
||||||
|
#define MAC_REG_ENCFG0 0x4C //
|
||||||
|
#define MAC_REG_ENCFG1 0x4D //
|
||||||
|
#define MAC_REG_ENCFG2 0x4E //
|
||||||
|
|
||||||
|
#define MAC_REG_CFG 0x50 //
|
||||||
|
#define MAC_REG_TEST 0x52 //
|
||||||
|
#define MAC_REG_HOSTCR 0x54 //
|
||||||
|
#define MAC_REG_MACCR 0x55 //
|
||||||
|
#define MAC_REG_RCR 0x56 //
|
||||||
|
#define MAC_REG_TCR 0x57 //
|
||||||
|
#define MAC_REG_IMR 0x58 //
|
||||||
|
#define MAC_REG_ISR 0x5C
|
||||||
|
#define MAC_REG_ISR1 0x5D
|
||||||
|
// Power Saving Related
|
||||||
|
#define MAC_REG_PSCFG 0x60 //
|
||||||
|
#define MAC_REG_PSCTL 0x61 //
|
||||||
|
#define MAC_REG_PSPWRSIG 0x62 //
|
||||||
|
#define MAC_REG_BBCR13 0x63
|
||||||
|
#define MAC_REG_AIDATIM 0x64
|
||||||
|
#define MAC_REG_PWBT 0x66
|
||||||
|
#define MAC_REG_WAKEOKTMR 0x68
|
||||||
|
#define MAC_REG_CALTMR 0x69
|
||||||
|
#define MAC_REG_SYNSPACCNT 0x6A
|
||||||
|
#define MAC_REG_WAKSYNOPT 0x6B
|
||||||
|
// Baseband/IF Control Group
|
||||||
|
#define MAC_REG_BBREGCTL 0x6C //
|
||||||
|
#define MAC_REG_CHANNEL 0x6D
|
||||||
|
#define MAC_REG_BBREGADR 0x6E
|
||||||
|
#define MAC_REG_BBREGDATA 0x6F
|
||||||
|
#define MAC_REG_IFREGCTL 0x70 //
|
||||||
|
#define MAC_REG_IFDATA 0x71 //
|
||||||
|
#define MAC_REG_ITRTMSET 0x74 //
|
||||||
|
#define MAC_REG_PAPEDELAY 0x77
|
||||||
|
#define MAC_REG_SOFTPWRCTL 0x78 //
|
||||||
|
#define MAC_REG_SOFTPWRCTL2 0x79 //
|
||||||
|
#define MAC_REG_GPIOCTL0 0x7A //
|
||||||
|
#define MAC_REG_GPIOCTL1 0x7B //
|
||||||
|
|
||||||
|
// MiscFF PIO related
|
||||||
|
#define MAC_REG_MISCFFNDEX 0xBC
|
||||||
|
#define MAC_REG_MISCFFCTL 0xBE
|
||||||
|
#define MAC_REG_MISCFFDATA 0xC0
|
||||||
|
|
||||||
|
// MAC Configuration Group
|
||||||
|
#define MAC_REG_PAR0 0xC4
|
||||||
|
#define MAC_REG_PAR4 0xC8
|
||||||
|
#define MAC_REG_BSSID0 0xCC
|
||||||
|
#define MAC_REG_BSSID4 0xD0
|
||||||
|
#define MAC_REG_MAR0 0xD4
|
||||||
|
#define MAC_REG_MAR4 0xD8
|
||||||
|
// MAC RSPPKT INFO Group
|
||||||
|
#define MAC_REG_RSPINF_B_1 0xDC
|
||||||
|
#define MAC_REG_RSPINF_B_2 0xE0
|
||||||
|
#define MAC_REG_RSPINF_B_5 0xE4
|
||||||
|
#define MAC_REG_RSPINF_B_11 0xE8
|
||||||
|
#define MAC_REG_RSPINF_A_6 0xEC
|
||||||
|
#define MAC_REG_RSPINF_A_9 0xEE
|
||||||
|
#define MAC_REG_RSPINF_A_12 0xF0
|
||||||
|
#define MAC_REG_RSPINF_A_18 0xF2
|
||||||
|
#define MAC_REG_RSPINF_A_24 0xF4
|
||||||
|
#define MAC_REG_RSPINF_A_36 0xF6
|
||||||
|
#define MAC_REG_RSPINF_A_48 0xF8
|
||||||
|
#define MAC_REG_RSPINF_A_54 0xFA
|
||||||
|
#define MAC_REG_RSPINF_A_72 0xFC
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the I2MCFG EEPROM register
|
||||||
|
//
|
||||||
|
#define I2MCFG_BOUNDCTL 0x80
|
||||||
|
#define I2MCFG_WAITCTL 0x20
|
||||||
|
#define I2MCFG_SCLOECTL 0x10
|
||||||
|
#define I2MCFG_WBUSYCTL 0x08
|
||||||
|
#define I2MCFG_NORETRY 0x04
|
||||||
|
#define I2MCFG_I2MLDSEQ 0x02
|
||||||
|
#define I2MCFG_I2CMFAST 0x01
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the I2MCSR EEPROM register
|
||||||
|
//
|
||||||
|
#define I2MCSR_EEMW 0x80
|
||||||
|
#define I2MCSR_EEMR 0x40
|
||||||
|
#define I2MCSR_AUTOLD 0x08
|
||||||
|
#define I2MCSR_NACK 0x02
|
||||||
|
#define I2MCSR_DONE 0x01
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the TMCTL register
|
||||||
|
//
|
||||||
|
#define TMCTL_TSUSP 0x04
|
||||||
|
#define TMCTL_TMD 0x02
|
||||||
|
#define TMCTL_TE 0x01
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the TFTCTL register
|
||||||
|
//
|
||||||
|
#define TFTCTL_HWUTSF 0x80 //
|
||||||
|
#define TFTCTL_TBTTSYNC 0x40
|
||||||
|
#define TFTCTL_HWUTSFEN 0x20
|
||||||
|
#define TFTCTL_TSFCNTRRD 0x10 //
|
||||||
|
#define TFTCTL_TBTTSYNCEN 0x08 //
|
||||||
|
#define TFTCTL_TSFSYNCEN 0x04 //
|
||||||
|
#define TFTCTL_TSFCNTRST 0x02 //
|
||||||
|
#define TFTCTL_TSFCNTREN 0x01 //
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the EnhanceCFG_0 register
|
||||||
|
//
|
||||||
|
#define EnCFG_BBType_a 0x00
|
||||||
|
#define EnCFG_BBType_b 0x01
|
||||||
|
#define EnCFG_BBType_g 0x02
|
||||||
|
#define EnCFG_BBType_MASK 0x03
|
||||||
|
#define EnCFG_ProtectMd 0x20
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the EnhanceCFG_1 register
|
||||||
|
//
|
||||||
|
#define EnCFG_BcnSusInd 0x01
|
||||||
|
#define EnCFG_BcnSusClr 0x02
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the EnhanceCFG_2 register
|
||||||
|
//
|
||||||
|
#define EnCFG_NXTBTTCFPSTR 0x01
|
||||||
|
#define EnCFG_BarkerPream 0x02
|
||||||
|
#define EnCFG_PktBurstMode 0x04
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the CFG register
|
||||||
|
//
|
||||||
|
#define CFG_TKIPOPT 0x80
|
||||||
|
#define CFG_RXDMAOPT 0x40
|
||||||
|
#define CFG_TMOT_SW 0x20
|
||||||
|
#define CFG_TMOT_HWLONG 0x10
|
||||||
|
#define CFG_TMOT_HW 0x00
|
||||||
|
#define CFG_CFPENDOPT 0x08
|
||||||
|
#define CFG_BCNSUSEN 0x04
|
||||||
|
#define CFG_NOTXTIMEOUT 0x02
|
||||||
|
#define CFG_NOBUFOPT 0x01
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the TEST register
|
||||||
|
//
|
||||||
|
#define TEST_LBEXT 0x80 //
|
||||||
|
#define TEST_LBINT 0x40 //
|
||||||
|
#define TEST_LBNONE 0x00 //
|
||||||
|
#define TEST_SOFTINT 0x20 //
|
||||||
|
#define TEST_CONTTX 0x10 //
|
||||||
|
#define TEST_TXPE 0x08 //
|
||||||
|
#define TEST_NAVDIS 0x04 //
|
||||||
|
#define TEST_NOCTS 0x02 //
|
||||||
|
#define TEST_NOACK 0x01 //
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the HOSTCR register
|
||||||
|
//
|
||||||
|
#define HOSTCR_TXONST 0x80 //
|
||||||
|
#define HOSTCR_RXONST 0x40 //
|
||||||
|
#define HOSTCR_ADHOC 0x20 // Network Type 1 = Ad-hoc
|
||||||
|
#define HOSTCR_AP 0x10 // Port Type 1 = AP
|
||||||
|
#define HOSTCR_TXON 0x08 //0000 1000
|
||||||
|
#define HOSTCR_RXON 0x04 //0000 0100
|
||||||
|
#define HOSTCR_MACEN 0x02 //0000 0010
|
||||||
|
#define HOSTCR_SOFTRST 0x01 //0000 0001
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the MACCR register
|
||||||
|
//
|
||||||
|
#define MACCR_SYNCFLUSHOK 0x04 //
|
||||||
|
#define MACCR_SYNCFLUSH 0x02 //
|
||||||
|
#define MACCR_CLRNAV 0x01 //
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the RCR register
|
||||||
|
//
|
||||||
|
#define RCR_SSID 0x80
|
||||||
|
#define RCR_RXALLTYPE 0x40 //
|
||||||
|
#define RCR_UNICAST 0x20 //
|
||||||
|
#define RCR_BROADCAST 0x10 //
|
||||||
|
#define RCR_MULTICAST 0x08 //
|
||||||
|
#define RCR_WPAERR 0x04 //
|
||||||
|
#define RCR_ERRCRC 0x02 //
|
||||||
|
#define RCR_BSSID 0x01 //
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the TCR register
|
||||||
|
//
|
||||||
|
#define TCR_SYNCDCFOPT 0x02 //
|
||||||
|
#define TCR_AUTOBCNTX 0x01 // Beacon automatically transmit enable
|
||||||
|
|
||||||
|
|
||||||
|
//ISR1
|
||||||
|
#define ISR_GPIO3 0x40
|
||||||
|
#define ISR_RXNOBUF 0x08
|
||||||
|
#define ISR_MIBNEARFULL 0x04
|
||||||
|
#define ISR_SOFTINT 0x02
|
||||||
|
#define ISR_FETALERR 0x01
|
||||||
|
|
||||||
|
#define LEDSTS_STS 0x06
|
||||||
|
#define LEDSTS_TMLEN 0x78
|
||||||
|
#define LEDSTS_OFF 0x00
|
||||||
|
#define LEDSTS_ON 0x02
|
||||||
|
#define LEDSTS_SLOW 0x04
|
||||||
|
#define LEDSTS_INTER 0x06
|
||||||
|
|
||||||
|
//ISR0
|
||||||
|
#define ISR_WATCHDOG 0x80
|
||||||
|
#define ISR_SOFTTIMER 0x40
|
||||||
|
#define ISR_GPIO0 0x20
|
||||||
|
#define ISR_TBTT 0x10
|
||||||
|
#define ISR_RXDMA0 0x08
|
||||||
|
#define ISR_BNTX 0x04
|
||||||
|
#define ISR_ACTX 0x01
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the PSCFG register
|
||||||
|
//
|
||||||
|
#define PSCFG_PHILIPMD 0x40 //
|
||||||
|
#define PSCFG_WAKECALEN 0x20 //
|
||||||
|
#define PSCFG_WAKETMREN 0x10 //
|
||||||
|
#define PSCFG_BBPSPROG 0x08 //
|
||||||
|
#define PSCFG_WAKESYN 0x04 //
|
||||||
|
#define PSCFG_SLEEPSYN 0x02 //
|
||||||
|
#define PSCFG_AUTOSLEEP 0x01 //
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the PSCTL register
|
||||||
|
//
|
||||||
|
#define PSCTL_WAKEDONE 0x20 //
|
||||||
|
#define PSCTL_PS 0x10 //
|
||||||
|
#define PSCTL_GO2DOZE 0x08 //
|
||||||
|
#define PSCTL_LNBCN 0x04 //
|
||||||
|
#define PSCTL_ALBCN 0x02 //
|
||||||
|
#define PSCTL_PSEN 0x01 //
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the PSPWSIG register
|
||||||
|
//
|
||||||
|
#define PSSIG_WPE3 0x80 //
|
||||||
|
#define PSSIG_WPE2 0x40 //
|
||||||
|
#define PSSIG_WPE1 0x20 //
|
||||||
|
#define PSSIG_WRADIOPE 0x10 //
|
||||||
|
#define PSSIG_SPE3 0x08 //
|
||||||
|
#define PSSIG_SPE2 0x04 //
|
||||||
|
#define PSSIG_SPE1 0x02 //
|
||||||
|
#define PSSIG_SRADIOPE 0x01 //
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the BBREGCTL register
|
||||||
|
//
|
||||||
|
#define BBREGCTL_DONE 0x04 //
|
||||||
|
#define BBREGCTL_REGR 0x02 //
|
||||||
|
#define BBREGCTL_REGW 0x01 //
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the IFREGCTL register
|
||||||
|
//
|
||||||
|
#define IFREGCTL_DONE 0x04 //
|
||||||
|
#define IFREGCTL_IFRF 0x02 //
|
||||||
|
#define IFREGCTL_REGW 0x01 //
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the SOFTPWRCTL register
|
||||||
|
//
|
||||||
|
#define SOFTPWRCTL_RFLEOPT 0x08 //
|
||||||
|
#define SOFTPWRCTL_TXPEINV 0x02 //
|
||||||
|
#define SOFTPWRCTL_SWPECTI 0x01 //
|
||||||
|
#define SOFTPWRCTL_SWPAPE 0x20 //
|
||||||
|
#define SOFTPWRCTL_SWCALEN 0x10 //
|
||||||
|
#define SOFTPWRCTL_SWRADIO_PE 0x08 //
|
||||||
|
#define SOFTPWRCTL_SWPE2 0x04 //
|
||||||
|
#define SOFTPWRCTL_SWPE1 0x02 //
|
||||||
|
#define SOFTPWRCTL_SWPE3 0x01 //
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the GPIOCTL1 register
|
||||||
|
//
|
||||||
|
#define GPIO3_MD 0x20 //
|
||||||
|
#define GPIO3_DATA 0x40 //
|
||||||
|
#define GPIO3_INTMD 0x80 //
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the MISCFFCTL register
|
||||||
|
//
|
||||||
|
#define MISCFFCTL_WRITE 0x0001 //
|
||||||
|
|
||||||
|
|
||||||
|
// Loopback mode
|
||||||
|
#define MAC_LB_EXT 0x02 //
|
||||||
|
#define MAC_LB_INTERNAL 0x01 //
|
||||||
|
#define MAC_LB_NONE 0x00 //
|
||||||
|
|
||||||
|
// Ethernet address filter type
|
||||||
|
#define PKT_TYPE_NONE 0x00 // turn off receiver
|
||||||
|
#define PKT_TYPE_ALL_MULTICAST 0x80
|
||||||
|
#define PKT_TYPE_PROMISCUOUS 0x40
|
||||||
|
#define PKT_TYPE_DIRECTED 0x20 // obselete, directed address is always accepted
|
||||||
|
#define PKT_TYPE_BROADCAST 0x10
|
||||||
|
#define PKT_TYPE_MULTICAST 0x08
|
||||||
|
#define PKT_TYPE_ERROR_WPA 0x04
|
||||||
|
#define PKT_TYPE_ERROR_CRC 0x02
|
||||||
|
#define PKT_TYPE_BSSID 0x01
|
||||||
|
|
||||||
|
#define Default_BI 0x200
|
||||||
|
|
||||||
|
// MiscFIFO Offset
|
||||||
|
#define MISCFIFO_KEYETRY0 32
|
||||||
|
#define MISCFIFO_KEYENTRYSIZE 22
|
||||||
|
|
||||||
|
// max time out delay time
|
||||||
|
#define W_MAX_TIMEOUT 0xFFF0U //
|
||||||
|
|
||||||
|
// wait time within loop
|
||||||
|
#define CB_DELAY_LOOP_WAIT 10 // 10ms
|
||||||
|
|
||||||
|
#define MAC_REVISION_A0 0x00
|
||||||
|
#define MAC_REVISION_A1 0x01
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Macros ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
void MACvSetMultiAddrByHash (PSDevice pDevice, BYTE byHashIdx);
|
||||||
|
VOID MACvWriteMultiAddr (PSDevice pDevice, UINT uByteIdx, BYTE byData);
|
||||||
|
BOOL MACbShutdown(PSDevice pDevice);;
|
||||||
|
void MACvSetBBType(PSDevice pDevice,BYTE byType);
|
||||||
|
void MACvSetMISCFifo (PSDevice pDevice, WORD wOffset, DWORD dwData);
|
||||||
|
void MACvDisableKeyEntry(PSDevice pDevice, UINT uEntryIdx);
|
||||||
|
void MACvSetKeyEntry(PSDevice pDevice, WORD wKeyCtl, UINT uEntryIdx, UINT uKeyIdx, PBYTE pbyAddr, PDWORD pdwKey);
|
||||||
|
|
||||||
|
void MACvRegBitsOff(PSDevice pDevice, BYTE byRegOfs, BYTE byBits);
|
||||||
|
void MACvRegBitsOn(PSDevice pDevice, BYTE byRegOfs, BYTE byBits);
|
||||||
|
void MACvWriteWord(PSDevice pDevice, BYTE byRegOfs, WORD wData);
|
||||||
|
|
||||||
|
void MACvWriteBSSIDAddress(PSDevice pDevice, PBYTE pbyEtherAddr);
|
||||||
|
void MACvEnableProtectMD(PSDevice pDevice);
|
||||||
|
void MACvDisableProtectMD(PSDevice pDevice);
|
||||||
|
void MACvEnableBarkerPreambleMd(PSDevice pDevice);
|
||||||
|
void MACvDisableBarkerPreambleMd(PSDevice pDevice);
|
||||||
|
void MACvWriteBeaconInterval(PSDevice pDevice, WORD wInterval);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif // __MAC_H__
|
2398
drivers/staging/vt6656/main_usb.c
Normal file
2398
drivers/staging/vt6656/main_usb.c
Normal file
File diff suppressed because it is too large
Load Diff
592
drivers/staging/vt6656/mib.c
Normal file
592
drivers/staging/vt6656/mib.c
Normal file
@ -0,0 +1,592 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: mib.c
|
||||||
|
*
|
||||||
|
* Purpose: Implement MIB Data Structure
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 1996
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* STAvClearAllCounter - Clear All MIB Counter
|
||||||
|
* STAvUpdateIstStatCounter - Update ISR statistic counter
|
||||||
|
* STAvUpdateRDStatCounter - Update Rx statistic counter
|
||||||
|
* STAvUpdateRDStatCounterEx - Update Rx statistic counter and copy rcv data
|
||||||
|
* STAvUpdateTDStatCounter - Update Tx statistic counter
|
||||||
|
* STAvUpdateTDStatCounterEx - Update Tx statistic counter and copy tx data
|
||||||
|
* STAvUpdate802_11Counter - Update 802.11 mib counter
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__UPC_H__)
|
||||||
|
#include "upc.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MAC_H__)
|
||||||
|
#include "mac.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TBIT_H__)
|
||||||
|
#include "tbit.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TETHER_H__)
|
||||||
|
#include "tether.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MIB_H__)
|
||||||
|
#include "mib.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WCTL_H__)
|
||||||
|
#include "wctl.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__BASEBAND_H__)
|
||||||
|
#include "baseband.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Clear All Statistic Counter
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pStatistic - Pointer to Statistic Counter Data Structure
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void STAvClearAllCounter (PSStatCounter pStatistic)
|
||||||
|
{
|
||||||
|
// set memory to zero
|
||||||
|
ZERO_MEMORY(pStatistic, sizeof(SStatCounter));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Update Isr Statistic Counter
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pStatistic - Pointer to Statistic Counter Data Structure
|
||||||
|
* wisr - Interrupt status
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void STAvUpdateIsrStatCounter (PSStatCounter pStatistic, BYTE byIsr0, BYTE byIsr1)
|
||||||
|
{
|
||||||
|
/**********************/
|
||||||
|
/* ABNORMAL interrupt */
|
||||||
|
/**********************/
|
||||||
|
// not any IMR bit invoke irq
|
||||||
|
if (byIsr0 == 0) {
|
||||||
|
pStatistic->ISRStat.dwIsrUnknown++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byIsr0, ISR_ACTX)) // ISR, bit0
|
||||||
|
pStatistic->ISRStat.dwIsrTx0OK++; // TXDMA0 successful
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byIsr0, ISR_BNTX)) // ISR, bit2
|
||||||
|
pStatistic->ISRStat.dwIsrBeaconTxOK++; // BeaconTx successful
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byIsr0, ISR_RXDMA0)) // ISR, bit3
|
||||||
|
pStatistic->ISRStat.dwIsrRx0OK++; // Rx0 successful
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byIsr0, ISR_TBTT)) // ISR, bit4
|
||||||
|
pStatistic->ISRStat.dwIsrTBTTInt++; // TBTT successful
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byIsr0, ISR_SOFTTIMER)) // ISR, bit6
|
||||||
|
pStatistic->ISRStat.dwIsrSTIMERInt++;
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byIsr0, ISR_WATCHDOG)) // ISR, bit7
|
||||||
|
pStatistic->ISRStat.dwIsrWatchDog++;
|
||||||
|
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byIsr1, ISR_FETALERR)) // ISR, bit8
|
||||||
|
pStatistic->ISRStat.dwIsrUnrecoverableError++;
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byIsr1, ISR_SOFTINT)) // ISR, bit9
|
||||||
|
pStatistic->ISRStat.dwIsrSoftInterrupt++; // software interrupt
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byIsr1, ISR_MIBNEARFULL)) // ISR, bit10
|
||||||
|
pStatistic->ISRStat.dwIsrMIBNearfull++;
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byIsr1, ISR_RXNOBUF)) // ISR, bit11
|
||||||
|
pStatistic->ISRStat.dwIsrRxNoBuf++; // Rx No Buff
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Update Rx Statistic Counter
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pStatistic - Pointer to Statistic Counter Data Structure
|
||||||
|
* byRSR - Rx Status
|
||||||
|
* byNewRSR - Rx Status
|
||||||
|
* pbyBuffer - Rx Buffer
|
||||||
|
* cbFrameLength - Rx Length
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void STAvUpdateRDStatCounter (PSStatCounter pStatistic,
|
||||||
|
BYTE byRSR, BYTE byNewRSR, BYTE byRxSts, BYTE byRxRate,
|
||||||
|
PBYTE pbyBuffer, UINT cbFrameLength)
|
||||||
|
{
|
||||||
|
//need change
|
||||||
|
PS802_11Header pHeader = (PS802_11Header)pbyBuffer;
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byRSR, RSR_ADDROK))
|
||||||
|
pStatistic->dwRsrADDROk++;
|
||||||
|
if (BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->dwRsrCRCOk++;
|
||||||
|
|
||||||
|
pStatistic->ullRsrOK++;
|
||||||
|
|
||||||
|
if (cbFrameLength >= U_ETHER_ADDR_LEN) {
|
||||||
|
// update counters in case that successful transmit
|
||||||
|
if (BITbIsBitOn(byRSR, RSR_ADDRBROAD)) {
|
||||||
|
pStatistic->ullRxBroadcastFrames++;
|
||||||
|
pStatistic->ullRxBroadcastBytes += (ULONGLONG)cbFrameLength;
|
||||||
|
}
|
||||||
|
else if (BITbIsBitOn(byRSR, RSR_ADDRMULTI)) {
|
||||||
|
pStatistic->ullRxMulticastFrames++;
|
||||||
|
pStatistic->ullRxMulticastBytes += (ULONGLONG)cbFrameLength;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pStatistic->ullRxDirectedFrames++;
|
||||||
|
pStatistic->ullRxDirectedBytes += (ULONGLONG)cbFrameLength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(byRxRate==22) {
|
||||||
|
pStatistic->CustomStat.ullRsr11M++;
|
||||||
|
if(BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->CustomStat.ullRsr11MCRCOk++;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"11M: ALL[%d], OK[%d]:[%02x]\n", (INT)pStatistic->CustomStat.ullRsr11M, (INT)pStatistic->CustomStat.ullRsr11MCRCOk, byRSR);
|
||||||
|
}
|
||||||
|
else if(byRxRate==11) {
|
||||||
|
pStatistic->CustomStat.ullRsr5M++;
|
||||||
|
if(BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->CustomStat.ullRsr5MCRCOk++;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 5M: ALL[%d], OK[%d]:[%02x]\n", (INT)pStatistic->CustomStat.ullRsr5M, (INT)pStatistic->CustomStat.ullRsr5MCRCOk, byRSR);
|
||||||
|
}
|
||||||
|
else if(byRxRate==4) {
|
||||||
|
pStatistic->CustomStat.ullRsr2M++;
|
||||||
|
if(BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->CustomStat.ullRsr2MCRCOk++;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 2M: ALL[%d], OK[%d]:[%02x]\n", (INT)pStatistic->CustomStat.ullRsr2M, (INT)pStatistic->CustomStat.ullRsr2MCRCOk, byRSR);
|
||||||
|
}
|
||||||
|
else if(byRxRate==2){
|
||||||
|
pStatistic->CustomStat.ullRsr1M++;
|
||||||
|
if(BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->CustomStat.ullRsr1MCRCOk++;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 1M: ALL[%d], OK[%d]:[%02x]\n", (INT)pStatistic->CustomStat.ullRsr1M, (INT)pStatistic->CustomStat.ullRsr1MCRCOk, byRSR);
|
||||||
|
}
|
||||||
|
else if(byRxRate==12){
|
||||||
|
pStatistic->CustomStat.ullRsr6M++;
|
||||||
|
if(BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->CustomStat.ullRsr6MCRCOk++;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 6M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr6M, (INT)pStatistic->CustomStat.ullRsr6MCRCOk);
|
||||||
|
}
|
||||||
|
else if(byRxRate==18){
|
||||||
|
pStatistic->CustomStat.ullRsr9M++;
|
||||||
|
if(BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->CustomStat.ullRsr9MCRCOk++;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 9M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr9M, (INT)pStatistic->CustomStat.ullRsr9MCRCOk);
|
||||||
|
}
|
||||||
|
else if(byRxRate==24){
|
||||||
|
pStatistic->CustomStat.ullRsr12M++;
|
||||||
|
if(BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->CustomStat.ullRsr12MCRCOk++;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"12M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr12M, (INT)pStatistic->CustomStat.ullRsr12MCRCOk);
|
||||||
|
}
|
||||||
|
else if(byRxRate==36){
|
||||||
|
pStatistic->CustomStat.ullRsr18M++;
|
||||||
|
if(BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->CustomStat.ullRsr18MCRCOk++;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"18M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr18M, (INT)pStatistic->CustomStat.ullRsr18MCRCOk);
|
||||||
|
}
|
||||||
|
else if(byRxRate==48){
|
||||||
|
pStatistic->CustomStat.ullRsr24M++;
|
||||||
|
if(BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->CustomStat.ullRsr24MCRCOk++;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"24M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr24M, (INT)pStatistic->CustomStat.ullRsr24MCRCOk);
|
||||||
|
}
|
||||||
|
else if(byRxRate==72){
|
||||||
|
pStatistic->CustomStat.ullRsr36M++;
|
||||||
|
if(BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->CustomStat.ullRsr36MCRCOk++;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"36M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr36M, (INT)pStatistic->CustomStat.ullRsr36MCRCOk);
|
||||||
|
}
|
||||||
|
else if(byRxRate==96){
|
||||||
|
pStatistic->CustomStat.ullRsr48M++;
|
||||||
|
if(BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->CustomStat.ullRsr48MCRCOk++;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"48M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr48M, (INT)pStatistic->CustomStat.ullRsr48MCRCOk);
|
||||||
|
}
|
||||||
|
else if(byRxRate==108){
|
||||||
|
pStatistic->CustomStat.ullRsr54M++;
|
||||||
|
if(BITbIsBitOn(byRSR, RSR_CRCOK)) {
|
||||||
|
pStatistic->CustomStat.ullRsr54MCRCOk++;
|
||||||
|
}
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"54M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr54M, (INT)pStatistic->CustomStat.ullRsr54MCRCOk);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Unknown: Total[%d], CRCOK[%d]\n", (INT)pStatistic->dwRsrRxPacket+1, (INT)pStatistic->dwRsrCRCOk);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byRSR, RSR_BSSIDOK))
|
||||||
|
pStatistic->dwRsrBSSIDOk++;
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byRSR, RSR_BCNSSIDOK))
|
||||||
|
pStatistic->dwRsrBCNSSIDOk++;
|
||||||
|
if (BITbIsBitOn(byRSR, RSR_IVLDLEN)) //invalid len (> 2312 byte)
|
||||||
|
pStatistic->dwRsrLENErr++;
|
||||||
|
if (BITbIsBitOn(byRSR, RSR_IVLDTYP)) //invalid packet type
|
||||||
|
pStatistic->dwRsrTYPErr++;
|
||||||
|
if (BITbIsBitOn(byRSR, (RSR_IVLDTYP | RSR_IVLDLEN)) || BITbIsBitOff(byRSR, RSR_CRCOK))
|
||||||
|
pStatistic->dwRsrErr++;
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byNewRSR, NEWRSR_DECRYPTOK))
|
||||||
|
pStatistic->dwNewRsrDECRYPTOK++;
|
||||||
|
if (BITbIsBitOn(byNewRSR, NEWRSR_CFPIND))
|
||||||
|
pStatistic->dwNewRsrCFP++;
|
||||||
|
if (BITbIsBitOn(byNewRSR, NEWRSR_HWUTSF))
|
||||||
|
pStatistic->dwNewRsrUTSF++;
|
||||||
|
if (BITbIsBitOn(byNewRSR, NEWRSR_BCNHITAID))
|
||||||
|
pStatistic->dwNewRsrHITAID++;
|
||||||
|
if (BITbIsBitOn(byNewRSR, NEWRSR_BCNHITAID0))
|
||||||
|
pStatistic->dwNewRsrHITAID0++;
|
||||||
|
|
||||||
|
// increase rx packet count
|
||||||
|
pStatistic->dwRsrRxPacket++;
|
||||||
|
pStatistic->dwRsrRxOctet += cbFrameLength;
|
||||||
|
|
||||||
|
|
||||||
|
if (IS_TYPE_DATA(pbyBuffer)) {
|
||||||
|
pStatistic->dwRsrRxData++;
|
||||||
|
} else if (IS_TYPE_MGMT(pbyBuffer)){
|
||||||
|
pStatistic->dwRsrRxManage++;
|
||||||
|
} else if (IS_TYPE_CONTROL(pbyBuffer)){
|
||||||
|
pStatistic->dwRsrRxControl++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BITbIsBitOn(byRSR, RSR_ADDRBROAD))
|
||||||
|
pStatistic->dwRsrBroadcast++;
|
||||||
|
else if (BITbIsBitOn(byRSR, RSR_ADDRMULTI))
|
||||||
|
pStatistic->dwRsrMulticast++;
|
||||||
|
else
|
||||||
|
pStatistic->dwRsrDirected++;
|
||||||
|
|
||||||
|
if (WLAN_GET_FC_MOREFRAG(pHeader->wFrameCtl))
|
||||||
|
pStatistic->dwRsrRxFragment++;
|
||||||
|
|
||||||
|
if (cbFrameLength < MIN_PACKET_LEN + 4) {
|
||||||
|
pStatistic->dwRsrRunt++;
|
||||||
|
}
|
||||||
|
else if (cbFrameLength == MIN_PACKET_LEN + 4) {
|
||||||
|
pStatistic->dwRsrRxFrmLen64++;
|
||||||
|
}
|
||||||
|
else if ((65 <= cbFrameLength) && (cbFrameLength <= 127)) {
|
||||||
|
pStatistic->dwRsrRxFrmLen65_127++;
|
||||||
|
}
|
||||||
|
else if ((128 <= cbFrameLength) && (cbFrameLength <= 255)) {
|
||||||
|
pStatistic->dwRsrRxFrmLen128_255++;
|
||||||
|
}
|
||||||
|
else if ((256 <= cbFrameLength) && (cbFrameLength <= 511)) {
|
||||||
|
pStatistic->dwRsrRxFrmLen256_511++;
|
||||||
|
}
|
||||||
|
else if ((512 <= cbFrameLength) && (cbFrameLength <= 1023)) {
|
||||||
|
pStatistic->dwRsrRxFrmLen512_1023++;
|
||||||
|
}
|
||||||
|
else if ((1024 <= cbFrameLength) && (cbFrameLength <= MAX_PACKET_LEN + 4)) {
|
||||||
|
pStatistic->dwRsrRxFrmLen1024_1518++;
|
||||||
|
} else if (cbFrameLength > MAX_PACKET_LEN + 4) {
|
||||||
|
pStatistic->dwRsrLong++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Update Rx Statistic Counter and copy Rx buffer
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pStatistic - Pointer to Statistic Counter Data Structure
|
||||||
|
* byRSR - Rx Status
|
||||||
|
* byNewRSR - Rx Status
|
||||||
|
* pbyBuffer - Rx Buffer
|
||||||
|
* cbFrameLength - Rx Length
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
STAvUpdateRDStatCounterEx (
|
||||||
|
PSStatCounter pStatistic,
|
||||||
|
BYTE byRSR,
|
||||||
|
BYTE byNewRSR,
|
||||||
|
BYTE byRxSts,
|
||||||
|
BYTE byRxRate,
|
||||||
|
PBYTE pbyBuffer,
|
||||||
|
UINT cbFrameLength
|
||||||
|
)
|
||||||
|
{
|
||||||
|
STAvUpdateRDStatCounter(
|
||||||
|
pStatistic,
|
||||||
|
byRSR,
|
||||||
|
byNewRSR,
|
||||||
|
byRxSts,
|
||||||
|
byRxRate,
|
||||||
|
pbyBuffer,
|
||||||
|
cbFrameLength
|
||||||
|
);
|
||||||
|
|
||||||
|
// rx length
|
||||||
|
pStatistic->dwCntRxFrmLength = cbFrameLength;
|
||||||
|
// rx pattern, we just see 10 bytes for sample
|
||||||
|
MEMvCopy(pStatistic->abyCntRxPattern, (PBYTE)pbyBuffer, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Update Tx Statistic Counter
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pStatistic - Pointer to Statistic Counter Data Structure
|
||||||
|
* byTSR0 - Tx Status
|
||||||
|
* byTSR1 - Tx Status
|
||||||
|
* pbyBuffer - Tx Buffer
|
||||||
|
* cbFrameLength - Tx Length
|
||||||
|
* uIdx - Index of Tx DMA
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
STAvUpdateTDStatCounter (
|
||||||
|
PSStatCounter pStatistic,
|
||||||
|
BYTE byPktNum,
|
||||||
|
BYTE byRate,
|
||||||
|
BYTE byTSR
|
||||||
|
)
|
||||||
|
{
|
||||||
|
BYTE byRetyCnt;
|
||||||
|
// increase tx packet count
|
||||||
|
pStatistic->dwTsrTxPacket++;
|
||||||
|
|
||||||
|
byRetyCnt = (byTSR & 0xF0) >> 4;
|
||||||
|
if (byRetyCnt != 0) {
|
||||||
|
pStatistic->dwTsrRetry++;
|
||||||
|
pStatistic->dwTsrTotalRetry += byRetyCnt;
|
||||||
|
pStatistic->dwTxFail[byRate]+= byRetyCnt;
|
||||||
|
pStatistic->dwTxFail[MAX_RATE] += byRetyCnt;
|
||||||
|
|
||||||
|
if ( byRetyCnt == 0x1)
|
||||||
|
pStatistic->dwTsrOnceRetry++;
|
||||||
|
else
|
||||||
|
pStatistic->dwTsrMoreThanOnceRetry++;
|
||||||
|
|
||||||
|
if (byRetyCnt <= 8)
|
||||||
|
pStatistic->dwTxRetryCount[byRetyCnt-1]++;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (BITbIsAllBitsOff(byTSR, (TSR_TMO | TSR_RETRYTMO))) {
|
||||||
|
|
||||||
|
#ifdef Calcu_LinkQual
|
||||||
|
if (byRetyCnt < 2)
|
||||||
|
pStatistic->TxNoRetryOkCount ++;
|
||||||
|
else
|
||||||
|
pStatistic->TxRetryOkCount ++;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
pStatistic->ullTsrOK++;
|
||||||
|
pStatistic->CustomStat.ullTsrAllOK++;
|
||||||
|
// update counters in case that successful transmit
|
||||||
|
pStatistic->dwTxOk[byRate]++;
|
||||||
|
pStatistic->dwTxOk[MAX_RATE]++;
|
||||||
|
|
||||||
|
if ( pStatistic->abyTxPktInfo[byPktNum].byBroadMultiUni == TX_PKT_BROAD ) {
|
||||||
|
pStatistic->ullTxBroadcastFrames++;
|
||||||
|
pStatistic->ullTxBroadcastBytes += pStatistic->abyTxPktInfo[byPktNum].wLength;
|
||||||
|
} else if ( pStatistic->abyTxPktInfo[byPktNum].byBroadMultiUni == TX_PKT_MULTI ) {
|
||||||
|
pStatistic->ullTxMulticastFrames++;
|
||||||
|
pStatistic->ullTxMulticastBytes += pStatistic->abyTxPktInfo[byPktNum].wLength;
|
||||||
|
} else if ( pStatistic->abyTxPktInfo[byPktNum].byBroadMultiUni == TX_PKT_UNI ) {
|
||||||
|
pStatistic->ullTxDirectedFrames++;
|
||||||
|
pStatistic->ullTxDirectedBytes += pStatistic->abyTxPktInfo[byPktNum].wLength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
#ifdef Calcu_LinkQual
|
||||||
|
pStatistic->TxFailCount ++;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
pStatistic->dwTsrErr++;
|
||||||
|
if (BITbIsBitOn(byTSR, TSR_RETRYTMO))
|
||||||
|
pStatistic->dwTsrRetryTimeout++;
|
||||||
|
if (BITbIsBitOn(byTSR, TSR_TMO))
|
||||||
|
pStatistic->dwTsrTransmitTimeout++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pStatistic->abyTxPktInfo[byPktNum].byBroadMultiUni == TX_PKT_BROAD ) {
|
||||||
|
pStatistic->dwTsrBroadcast++;
|
||||||
|
} else if ( pStatistic->abyTxPktInfo[byPktNum].byBroadMultiUni == TX_PKT_MULTI ) {
|
||||||
|
pStatistic->dwTsrMulticast++;
|
||||||
|
} else if ( pStatistic->abyTxPktInfo[byPktNum].byBroadMultiUni == TX_PKT_UNI ) {
|
||||||
|
pStatistic->dwTsrDirected++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Update 802.11 mib counter
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* p802_11Counter - Pointer to 802.11 mib counter
|
||||||
|
* pStatistic - Pointer to Statistic Counter Data Structure
|
||||||
|
* dwCounter - hardware counter for 802.11 mib
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
STAvUpdate802_11Counter(
|
||||||
|
PSDot11Counters p802_11Counter,
|
||||||
|
PSStatCounter pStatistic,
|
||||||
|
BYTE byRTSSuccess,
|
||||||
|
BYTE byRTSFail,
|
||||||
|
BYTE byACKFail,
|
||||||
|
BYTE byFCSErr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//p802_11Counter->TransmittedFragmentCount
|
||||||
|
p802_11Counter->MulticastTransmittedFrameCount = (ULONGLONG) (pStatistic->dwTsrBroadcast +
|
||||||
|
pStatistic->dwTsrMulticast);
|
||||||
|
p802_11Counter->FailedCount = (ULONGLONG) (pStatistic->dwTsrErr);
|
||||||
|
p802_11Counter->RetryCount = (ULONGLONG) (pStatistic->dwTsrRetry);
|
||||||
|
p802_11Counter->MultipleRetryCount = (ULONGLONG) (pStatistic->dwTsrMoreThanOnceRetry);
|
||||||
|
//p802_11Counter->FrameDuplicateCount
|
||||||
|
p802_11Counter->RTSSuccessCount += (ULONGLONG) byRTSSuccess;
|
||||||
|
p802_11Counter->RTSFailureCount += (ULONGLONG) byRTSFail;
|
||||||
|
p802_11Counter->ACKFailureCount += (ULONGLONG) byACKFail;
|
||||||
|
p802_11Counter->FCSErrorCount += (ULONGLONG) byFCSErr;
|
||||||
|
//p802_11Counter->ReceivedFragmentCount
|
||||||
|
p802_11Counter->MulticastReceivedFrameCount = (ULONGLONG) (pStatistic->dwRsrBroadcast +
|
||||||
|
pStatistic->dwRsrMulticast);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Clear 802.11 mib counter
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* p802_11Counter - Pointer to 802.11 mib counter
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
STAvClear802_11Counter(PSDot11Counters p802_11Counter)
|
||||||
|
{
|
||||||
|
// set memory to zero
|
||||||
|
ZERO_MEMORY(p802_11Counter, sizeof(SDot11Counters));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Clear 802.11 mib counter
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pUsbCounter - Pointer to USB mib counter
|
||||||
|
* ntStatus - URB status
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
STAvUpdateUSBCounter(PSUSBCounter pUsbCounter,
|
||||||
|
NTSTATUS ntStatus
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
|
// if ( ntStatus == USBD_STATUS_CRC ) {
|
||||||
|
pUsbCounter->dwCrc++;
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
445
drivers/staging/vt6656/mib.h
Normal file
445
drivers/staging/vt6656/mib.h
Normal file
@ -0,0 +1,445 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: mib.h
|
||||||
|
*
|
||||||
|
* Purpose: Implement MIB Data Structure
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 1996
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __MIB_H__
|
||||||
|
#define __MIB_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TETHER_H__)
|
||||||
|
#include "tether.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DESC_H__)
|
||||||
|
#include "desc.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//#define ULONGLONG ULONG
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// USB counter
|
||||||
|
//
|
||||||
|
typedef struct tagSUSBCounter {
|
||||||
|
DWORD dwCrc;
|
||||||
|
|
||||||
|
} SUSBCounter, DEF* PSUSBCounter;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// 802.11 counter
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSDot11Counters {
|
||||||
|
// ULONG Length; // Length of structure
|
||||||
|
ULONGLONG TransmittedFragmentCount;
|
||||||
|
ULONGLONG MulticastTransmittedFrameCount;
|
||||||
|
ULONGLONG FailedCount;
|
||||||
|
ULONGLONG RetryCount;
|
||||||
|
ULONGLONG MultipleRetryCount;
|
||||||
|
ULONGLONG RTSSuccessCount;
|
||||||
|
ULONGLONG RTSFailureCount;
|
||||||
|
ULONGLONG ACKFailureCount;
|
||||||
|
ULONGLONG FrameDuplicateCount;
|
||||||
|
ULONGLONG ReceivedFragmentCount;
|
||||||
|
ULONGLONG MulticastReceivedFrameCount;
|
||||||
|
ULONGLONG FCSErrorCount;
|
||||||
|
ULONGLONG TKIPLocalMICFailures;
|
||||||
|
ULONGLONG TKIPRemoteMICFailures;
|
||||||
|
ULONGLONG TKIPICVErrors;
|
||||||
|
ULONGLONG TKIPCounterMeasuresInvoked;
|
||||||
|
ULONGLONG TKIPReplays;
|
||||||
|
ULONGLONG CCMPFormatErrors;
|
||||||
|
ULONGLONG CCMPReplays;
|
||||||
|
ULONGLONG CCMPDecryptErrors;
|
||||||
|
ULONGLONG FourWayHandshakeFailures;
|
||||||
|
// ULONGLONG WEPUndecryptableCount;
|
||||||
|
// ULONGLONG WEPICVErrorCount;
|
||||||
|
// ULONGLONG DecryptSuccessCount;
|
||||||
|
// ULONGLONG DecryptFailureCount;
|
||||||
|
} SDot11Counters, DEF* PSDot11Counters;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// MIB2 counter
|
||||||
|
//
|
||||||
|
typedef struct tagSMib2Counter {
|
||||||
|
LONG ifIndex;
|
||||||
|
TCHAR ifDescr[256]; // max size 255 plus zero ending
|
||||||
|
// e.g. "interface 1"
|
||||||
|
LONG ifType;
|
||||||
|
LONG ifMtu;
|
||||||
|
DWORD ifSpeed;
|
||||||
|
BYTE ifPhysAddress[U_ETHER_ADDR_LEN];
|
||||||
|
LONG ifAdminStatus;
|
||||||
|
LONG ifOperStatus;
|
||||||
|
DWORD ifLastChange;
|
||||||
|
DWORD ifInOctets;
|
||||||
|
DWORD ifInUcastPkts;
|
||||||
|
DWORD ifInNUcastPkts;
|
||||||
|
DWORD ifInDiscards;
|
||||||
|
DWORD ifInErrors;
|
||||||
|
DWORD ifInUnknownProtos;
|
||||||
|
DWORD ifOutOctets;
|
||||||
|
DWORD ifOutUcastPkts;
|
||||||
|
DWORD ifOutNUcastPkts;
|
||||||
|
DWORD ifOutDiscards;
|
||||||
|
DWORD ifOutErrors;
|
||||||
|
DWORD ifOutQLen;
|
||||||
|
DWORD ifSpecific;
|
||||||
|
} SMib2Counter, DEF* PSMib2Counter;
|
||||||
|
|
||||||
|
// Value in the ifType entry
|
||||||
|
//#define ETHERNETCSMACD 6 //
|
||||||
|
#define WIRELESSLANIEEE80211b 6 //
|
||||||
|
|
||||||
|
// Value in the ifAdminStatus/ifOperStatus entry
|
||||||
|
#define UP 1 //
|
||||||
|
#define DOWN 2 //
|
||||||
|
#define TESTING 3 //
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// RMON counter
|
||||||
|
//
|
||||||
|
typedef struct tagSRmonCounter {
|
||||||
|
LONG etherStatsIndex;
|
||||||
|
DWORD etherStatsDataSource;
|
||||||
|
DWORD etherStatsDropEvents;
|
||||||
|
DWORD etherStatsOctets;
|
||||||
|
DWORD etherStatsPkts;
|
||||||
|
DWORD etherStatsBroadcastPkts;
|
||||||
|
DWORD etherStatsMulticastPkts;
|
||||||
|
DWORD etherStatsCRCAlignErrors;
|
||||||
|
DWORD etherStatsUndersizePkts;
|
||||||
|
DWORD etherStatsOversizePkts;
|
||||||
|
DWORD etherStatsFragments;
|
||||||
|
DWORD etherStatsJabbers;
|
||||||
|
DWORD etherStatsCollisions;
|
||||||
|
DWORD etherStatsPkt64Octets;
|
||||||
|
DWORD etherStatsPkt65to127Octets;
|
||||||
|
DWORD etherStatsPkt128to255Octets;
|
||||||
|
DWORD etherStatsPkt256to511Octets;
|
||||||
|
DWORD etherStatsPkt512to1023Octets;
|
||||||
|
DWORD etherStatsPkt1024to1518Octets;
|
||||||
|
DWORD etherStatsOwners;
|
||||||
|
DWORD etherStatsStatus;
|
||||||
|
} SRmonCounter, DEF* PSRmonCounter;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Custom counter
|
||||||
|
//
|
||||||
|
typedef struct tagSCustomCounters {
|
||||||
|
ULONG Length;
|
||||||
|
|
||||||
|
ULONGLONG ullTsrAllOK;
|
||||||
|
|
||||||
|
ULONGLONG ullRsr11M;
|
||||||
|
ULONGLONG ullRsr5M;
|
||||||
|
ULONGLONG ullRsr2M;
|
||||||
|
ULONGLONG ullRsr1M;
|
||||||
|
|
||||||
|
ULONGLONG ullRsr11MCRCOk;
|
||||||
|
ULONGLONG ullRsr5MCRCOk;
|
||||||
|
ULONGLONG ullRsr2MCRCOk;
|
||||||
|
ULONGLONG ullRsr1MCRCOk;
|
||||||
|
|
||||||
|
ULONGLONG ullRsr54M;
|
||||||
|
ULONGLONG ullRsr48M;
|
||||||
|
ULONGLONG ullRsr36M;
|
||||||
|
ULONGLONG ullRsr24M;
|
||||||
|
ULONGLONG ullRsr18M;
|
||||||
|
ULONGLONG ullRsr12M;
|
||||||
|
ULONGLONG ullRsr9M;
|
||||||
|
ULONGLONG ullRsr6M;
|
||||||
|
|
||||||
|
ULONGLONG ullRsr54MCRCOk;
|
||||||
|
ULONGLONG ullRsr48MCRCOk;
|
||||||
|
ULONGLONG ullRsr36MCRCOk;
|
||||||
|
ULONGLONG ullRsr24MCRCOk;
|
||||||
|
ULONGLONG ullRsr18MCRCOk;
|
||||||
|
ULONGLONG ullRsr12MCRCOk;
|
||||||
|
ULONGLONG ullRsr9MCRCOk;
|
||||||
|
ULONGLONG ullRsr6MCRCOk;
|
||||||
|
|
||||||
|
} SCustomCounters, DEF* PSCustomCounters;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Custom counter
|
||||||
|
//
|
||||||
|
typedef struct tagSISRCounters {
|
||||||
|
ULONG Length;
|
||||||
|
|
||||||
|
DWORD dwIsrTx0OK;
|
||||||
|
DWORD dwIsrAC0TxOK;
|
||||||
|
DWORD dwIsrBeaconTxOK;
|
||||||
|
DWORD dwIsrRx0OK;
|
||||||
|
DWORD dwIsrTBTTInt;
|
||||||
|
DWORD dwIsrSTIMERInt;
|
||||||
|
DWORD dwIsrWatchDog;
|
||||||
|
DWORD dwIsrUnrecoverableError;
|
||||||
|
DWORD dwIsrSoftInterrupt;
|
||||||
|
DWORD dwIsrMIBNearfull;
|
||||||
|
DWORD dwIsrRxNoBuf;
|
||||||
|
|
||||||
|
DWORD dwIsrUnknown; // unknown interrupt count
|
||||||
|
|
||||||
|
DWORD dwIsrRx1OK;
|
||||||
|
DWORD dwIsrATIMTxOK;
|
||||||
|
DWORD dwIsrSYNCTxOK;
|
||||||
|
DWORD dwIsrCFPEnd;
|
||||||
|
DWORD dwIsrATIMEnd;
|
||||||
|
DWORD dwIsrSYNCFlushOK;
|
||||||
|
DWORD dwIsrSTIMER1Int;
|
||||||
|
/////////////////////////////////////
|
||||||
|
} SISRCounters, DEF* PSISRCounters;
|
||||||
|
|
||||||
|
|
||||||
|
// Value in the etherStatsStatus entry
|
||||||
|
#define VALID 1 //
|
||||||
|
#define CREATE_REQUEST 2 //
|
||||||
|
#define UNDER_CREATION 3 //
|
||||||
|
#define INVALID 4 //
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tx packet information
|
||||||
|
//
|
||||||
|
typedef struct tagSTxPktInfo {
|
||||||
|
BYTE byBroadMultiUni;
|
||||||
|
WORD wLength;
|
||||||
|
WORD wFIFOCtl;
|
||||||
|
BYTE abyDestAddr[U_ETHER_ADDR_LEN];
|
||||||
|
} STxPktInfo, DEF* PSTxPktInfo;
|
||||||
|
|
||||||
|
|
||||||
|
#define MAX_RATE 12
|
||||||
|
//
|
||||||
|
// statistic counter
|
||||||
|
//
|
||||||
|
typedef struct tagSStatCounter {
|
||||||
|
//
|
||||||
|
// ISR status count
|
||||||
|
//
|
||||||
|
|
||||||
|
SISRCounters ISRStat;
|
||||||
|
|
||||||
|
// RSR status count
|
||||||
|
//
|
||||||
|
DWORD dwRsrFrmAlgnErr;
|
||||||
|
DWORD dwRsrErr;
|
||||||
|
DWORD dwRsrCRCErr;
|
||||||
|
DWORD dwRsrCRCOk;
|
||||||
|
DWORD dwRsrBSSIDOk;
|
||||||
|
DWORD dwRsrADDROk;
|
||||||
|
DWORD dwRsrBCNSSIDOk;
|
||||||
|
DWORD dwRsrLENErr;
|
||||||
|
DWORD dwRsrTYPErr;
|
||||||
|
|
||||||
|
DWORD dwNewRsrDECRYPTOK;
|
||||||
|
DWORD dwNewRsrCFP;
|
||||||
|
DWORD dwNewRsrUTSF;
|
||||||
|
DWORD dwNewRsrHITAID;
|
||||||
|
DWORD dwNewRsrHITAID0;
|
||||||
|
|
||||||
|
DWORD dwRsrLong;
|
||||||
|
DWORD dwRsrRunt;
|
||||||
|
|
||||||
|
DWORD dwRsrRxControl;
|
||||||
|
DWORD dwRsrRxData;
|
||||||
|
DWORD dwRsrRxManage;
|
||||||
|
|
||||||
|
DWORD dwRsrRxPacket;
|
||||||
|
DWORD dwRsrRxOctet;
|
||||||
|
DWORD dwRsrBroadcast;
|
||||||
|
DWORD dwRsrMulticast;
|
||||||
|
DWORD dwRsrDirected;
|
||||||
|
// 64-bit OID
|
||||||
|
ULONGLONG ullRsrOK;
|
||||||
|
|
||||||
|
// for some optional OIDs (64 bits) and DMI support
|
||||||
|
ULONGLONG ullRxBroadcastBytes;
|
||||||
|
ULONGLONG ullRxMulticastBytes;
|
||||||
|
ULONGLONG ullRxDirectedBytes;
|
||||||
|
ULONGLONG ullRxBroadcastFrames;
|
||||||
|
ULONGLONG ullRxMulticastFrames;
|
||||||
|
ULONGLONG ullRxDirectedFrames;
|
||||||
|
|
||||||
|
DWORD dwRsrRxFragment;
|
||||||
|
DWORD dwRsrRxFrmLen64;
|
||||||
|
DWORD dwRsrRxFrmLen65_127;
|
||||||
|
DWORD dwRsrRxFrmLen128_255;
|
||||||
|
DWORD dwRsrRxFrmLen256_511;
|
||||||
|
DWORD dwRsrRxFrmLen512_1023;
|
||||||
|
DWORD dwRsrRxFrmLen1024_1518;
|
||||||
|
|
||||||
|
// TSR status count
|
||||||
|
//
|
||||||
|
DWORD dwTsrTotalRetry; // total collision retry count
|
||||||
|
DWORD dwTsrOnceRetry; // this packet only occur one collision
|
||||||
|
DWORD dwTsrMoreThanOnceRetry; // this packet occur more than one collision
|
||||||
|
DWORD dwTsrRetry; // this packet has ever occur collision,
|
||||||
|
// that is (dwTsrOnceCollision0 + dwTsrMoreThanOnceCollision0)
|
||||||
|
DWORD dwTsrACKData;
|
||||||
|
DWORD dwTsrErr;
|
||||||
|
DWORD dwAllTsrOK;
|
||||||
|
DWORD dwTsrRetryTimeout;
|
||||||
|
DWORD dwTsrTransmitTimeout;
|
||||||
|
|
||||||
|
DWORD dwTsrTxPacket;
|
||||||
|
DWORD dwTsrTxOctet;
|
||||||
|
DWORD dwTsrBroadcast;
|
||||||
|
DWORD dwTsrMulticast;
|
||||||
|
DWORD dwTsrDirected;
|
||||||
|
|
||||||
|
// RD/TD count
|
||||||
|
DWORD dwCntRxFrmLength;
|
||||||
|
DWORD dwCntTxBufLength;
|
||||||
|
|
||||||
|
BYTE abyCntRxPattern[16];
|
||||||
|
BYTE abyCntTxPattern[16];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Software check....
|
||||||
|
DWORD dwCntRxDataErr; // rx buffer data software compare CRC err count
|
||||||
|
DWORD dwCntDecryptErr; // rx buffer data software compare CRC err count
|
||||||
|
DWORD dwCntRxICVErr; // rx buffer data software compare CRC err count
|
||||||
|
|
||||||
|
|
||||||
|
// 64-bit OID
|
||||||
|
ULONGLONG ullTsrOK;
|
||||||
|
|
||||||
|
// for some optional OIDs (64 bits) and DMI support
|
||||||
|
ULONGLONG ullTxBroadcastFrames;
|
||||||
|
ULONGLONG ullTxMulticastFrames;
|
||||||
|
ULONGLONG ullTxDirectedFrames;
|
||||||
|
ULONGLONG ullTxBroadcastBytes;
|
||||||
|
ULONGLONG ullTxMulticastBytes;
|
||||||
|
ULONGLONG ullTxDirectedBytes;
|
||||||
|
|
||||||
|
// for autorate
|
||||||
|
DWORD dwTxOk[MAX_RATE+1];
|
||||||
|
DWORD dwTxFail[MAX_RATE+1];
|
||||||
|
DWORD dwTxRetryCount[8];
|
||||||
|
|
||||||
|
STxPktInfo abyTxPktInfo[16];
|
||||||
|
|
||||||
|
SUSBCounter USB_EP0Stat;
|
||||||
|
SUSBCounter USB_BulkInStat;
|
||||||
|
SUSBCounter USB_BulkOutStat;
|
||||||
|
SUSBCounter USB_InterruptStat;
|
||||||
|
|
||||||
|
SCustomCounters CustomStat;
|
||||||
|
|
||||||
|
#ifdef Calcu_LinkQual
|
||||||
|
//Tx count:
|
||||||
|
ULONG TxNoRetryOkCount; //success tx no retry !
|
||||||
|
ULONG TxRetryOkCount; //sucess tx but retry !
|
||||||
|
ULONG TxFailCount; //fail tx ?
|
||||||
|
//Rx count:
|
||||||
|
ULONG RxOkCnt; //sucess rx !
|
||||||
|
ULONG RxFcsErrCnt; //fail rx ?
|
||||||
|
//statistic
|
||||||
|
ULONG SignalStren;
|
||||||
|
ULONG LinkQuality;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} SStatCounter, DEF* PSStatCounter;
|
||||||
|
|
||||||
|
#define NTSTATUS int
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void STAvClearAllCounter(PSStatCounter pStatistic);
|
||||||
|
|
||||||
|
void STAvUpdateIsrStatCounter (PSStatCounter pStatistic, BYTE byIsr0, BYTE byIsr1);
|
||||||
|
|
||||||
|
void STAvUpdateRDStatCounter(PSStatCounter pStatistic,
|
||||||
|
BYTE byRSR, BYTE byNewRSR, BYTE byRxSts, BYTE byRxRate,
|
||||||
|
PBYTE pbyBuffer, UINT cbFrameLength);
|
||||||
|
|
||||||
|
void STAvUpdateRDStatCounterEx(PSStatCounter pStatistic,
|
||||||
|
BYTE byRSR, BYTE byNewRSR, BYTE byRxSts, BYTE byRxRate,
|
||||||
|
PBYTE pbyBuffer, UINT cbFrameLength);
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
STAvUpdateTDStatCounter (
|
||||||
|
PSStatCounter pStatistic,
|
||||||
|
BYTE byPktNum,
|
||||||
|
BYTE byRate,
|
||||||
|
BYTE byTSR
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
STAvUpdate802_11Counter(
|
||||||
|
PSDot11Counters p802_11Counter,
|
||||||
|
PSStatCounter pStatistic,
|
||||||
|
BYTE byRTSSuccess,
|
||||||
|
BYTE byRTSFail,
|
||||||
|
BYTE byACKFail,
|
||||||
|
BYTE byFCSErr
|
||||||
|
);
|
||||||
|
|
||||||
|
void STAvClear802_11Counter(PSDot11Counters p802_11Counter);
|
||||||
|
|
||||||
|
void
|
||||||
|
STAvUpdateUSBCounter(
|
||||||
|
PSUSBCounter pUsbCounter,
|
||||||
|
NTSTATUS ntStatus
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __MIB_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
188
drivers/staging/vt6656/michael.c
Normal file
188
drivers/staging/vt6656/michael.c
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: michael.cpp
|
||||||
|
*
|
||||||
|
* Purpose: The implementation of LIST data structure.
|
||||||
|
*
|
||||||
|
* Author: Kyle Hsu
|
||||||
|
*
|
||||||
|
* Date: Sep 4, 2002
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* s_dwGetUINT32 - Convert from BYTE[] to DWORD in a portable way
|
||||||
|
* s_vPutUINT32 - Convert from DWORD to BYTE[] in a portable way
|
||||||
|
* s_vClear - Reset the state to the empty message.
|
||||||
|
* s_vSetKey - Set the key.
|
||||||
|
* MIC_vInit - Set the key.
|
||||||
|
* s_vAppendByte - Append the byte to our word-sized buffer.
|
||||||
|
* MIC_vAppend - call s_vAppendByte.
|
||||||
|
* MIC_vGetMIC - Append the minimum padding and call s_vAppendByte.
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(__TMACRO_H__)
|
||||||
|
#include "tmacro.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TBIT_H__)
|
||||||
|
#include "tbit.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MICHAEL_H__)
|
||||||
|
#include "michael.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
/*
|
||||||
|
static DWORD s_dwGetUINT32(BYTE * p); // Get DWORD from 4 bytes LSByte first
|
||||||
|
static VOID s_vPutUINT32(BYTE* p, DWORD val); // Put DWORD into 4 bytes LSByte first
|
||||||
|
*/
|
||||||
|
static VOID s_vClear(void); // Clear the internal message,
|
||||||
|
// resets the object to the state just after construction.
|
||||||
|
static VOID s_vSetKey(DWORD dwK0, DWORD dwK1);
|
||||||
|
static VOID s_vAppendByte(BYTE b); // Add a single byte to the internal message
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
static DWORD L, R; // Current state
|
||||||
|
|
||||||
|
static DWORD K0, K1; // Key
|
||||||
|
static DWORD M; // Message accumulator (single word)
|
||||||
|
static UINT nBytesInM; // # bytes in M
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
static DWORD s_dwGetUINT32 (BYTE * p)
|
||||||
|
// Convert from BYTE[] to DWORD in a portable way
|
||||||
|
{
|
||||||
|
DWORD res = 0;
|
||||||
|
UINT i;
|
||||||
|
for(i=0; i<4; i++ )
|
||||||
|
{
|
||||||
|
res |= (*p++) << (8*i);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID s_vPutUINT32 (BYTE* p, DWORD val)
|
||||||
|
// Convert from DWORD to BYTE[] in a portable way
|
||||||
|
{
|
||||||
|
UINT i;
|
||||||
|
for(i=0; i<4; i++ )
|
||||||
|
{
|
||||||
|
*p++ = (BYTE) (val & 0xff);
|
||||||
|
val >>= 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
static VOID s_vClear (void)
|
||||||
|
{
|
||||||
|
// Reset the state to the empty message.
|
||||||
|
L = K0;
|
||||||
|
R = K1;
|
||||||
|
nBytesInM = 0;
|
||||||
|
M = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID s_vSetKey (DWORD dwK0, DWORD dwK1)
|
||||||
|
{
|
||||||
|
// Set the key
|
||||||
|
K0 = dwK0;
|
||||||
|
K1 = dwK1;
|
||||||
|
// and reset the message
|
||||||
|
s_vClear();
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID s_vAppendByte (BYTE b)
|
||||||
|
{
|
||||||
|
// Append the byte to our word-sized buffer
|
||||||
|
M |= b << (8*nBytesInM);
|
||||||
|
nBytesInM++;
|
||||||
|
// Process the word if it is full.
|
||||||
|
if( nBytesInM >= 4 )
|
||||||
|
{
|
||||||
|
L ^= M;
|
||||||
|
R ^= ROL32( L, 17 );
|
||||||
|
L += R;
|
||||||
|
R ^= ((L & 0xff00ff00) >> 8) | ((L & 0x00ff00ff) << 8);
|
||||||
|
L += R;
|
||||||
|
R ^= ROL32( L, 3 );
|
||||||
|
L += R;
|
||||||
|
R ^= ROR32( L, 2 );
|
||||||
|
L += R;
|
||||||
|
// Clear the buffer
|
||||||
|
M = 0;
|
||||||
|
nBytesInM = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID MIC_vInit (DWORD dwK0, DWORD dwK1)
|
||||||
|
{
|
||||||
|
// Set the key
|
||||||
|
s_vSetKey(dwK0, dwK1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID MIC_vUnInit (void)
|
||||||
|
{
|
||||||
|
// Wipe the key material
|
||||||
|
K0 = 0;
|
||||||
|
K1 = 0;
|
||||||
|
|
||||||
|
// And the other fields as well.
|
||||||
|
//Note that this sets (L,R) to (K0,K1) which is just fine.
|
||||||
|
s_vClear();
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID MIC_vAppend (PBYTE src, UINT nBytes)
|
||||||
|
{
|
||||||
|
// This is simple
|
||||||
|
while (nBytes > 0)
|
||||||
|
{
|
||||||
|
s_vAppendByte(*src++);
|
||||||
|
nBytes--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID MIC_vGetMIC (PDWORD pdwL, PDWORD pdwR)
|
||||||
|
{
|
||||||
|
// Append the minimum padding
|
||||||
|
s_vAppendByte(0x5a);
|
||||||
|
s_vAppendByte(0);
|
||||||
|
s_vAppendByte(0);
|
||||||
|
s_vAppendByte(0);
|
||||||
|
s_vAppendByte(0);
|
||||||
|
// and then zeroes until the length is a multiple of 4
|
||||||
|
while( nBytesInM != 0 )
|
||||||
|
{
|
||||||
|
s_vAppendByte(0);
|
||||||
|
}
|
||||||
|
// The s_vAppendByte function has already computed the result.
|
||||||
|
*pdwL = L;
|
||||||
|
*pdwR = R;
|
||||||
|
// Reset to the empty message.
|
||||||
|
s_vClear();
|
||||||
|
}
|
||||||
|
|
62
drivers/staging/vt6656/michael.h
Normal file
62
drivers/staging/vt6656/michael.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: Michael.h
|
||||||
|
*
|
||||||
|
* Purpose: Reference implementation for Michael
|
||||||
|
* written by Niels Ferguson
|
||||||
|
*
|
||||||
|
* Author: Kyle Hsu
|
||||||
|
*
|
||||||
|
* Date: Jan 2, 2003
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __MICHAEL_H__
|
||||||
|
#define __MICHAEL_H__
|
||||||
|
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
VOID MIC_vInit(DWORD dwK0, DWORD dwK1);
|
||||||
|
|
||||||
|
VOID MIC_vUnInit(void);
|
||||||
|
|
||||||
|
// Append bytes to the message to be MICed
|
||||||
|
VOID MIC_vAppend(PBYTE src, UINT nBytes);
|
||||||
|
|
||||||
|
// Get the MIC result. Destination should accept 8 bytes of result.
|
||||||
|
// This also resets the message to empty.
|
||||||
|
VOID MIC_vGetMIC(PDWORD pdwL, PDWORD pdwR);
|
||||||
|
|
||||||
|
/*--------------------- Export Macros ------------------------------*/
|
||||||
|
|
||||||
|
// Rotation functions on 32 bit values
|
||||||
|
#define ROL32( A, n ) \
|
||||||
|
( ((A) << (n)) | ( ((A)>>(32-(n))) & ( (1UL << (n)) - 1 ) ) )
|
||||||
|
#define ROR32( A, n ) ROL32( (A), 32-(n) )
|
||||||
|
|
||||||
|
#endif //__MICHAEL_H__
|
||||||
|
|
||||||
|
|
458
drivers/staging/vt6656/power.c
Normal file
458
drivers/staging/vt6656/power.c
Normal file
@ -0,0 +1,458 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: power.c
|
||||||
|
*
|
||||||
|
* Purpose: Handles 802.11 power managment functions
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: July 17, 2002
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* PSvEnablePowerSaving - Enable Power Saving Mode
|
||||||
|
* PSvDiasblePowerSaving - Disable Power Saving Mode
|
||||||
|
* PSbConsiderPowerDown - Decide if we can Power Down
|
||||||
|
* PSvSendPSPOLL - Send PS-POLL packet
|
||||||
|
* PSbSendNullPacket - Send Null packet
|
||||||
|
* PSbIsNextTBTTWakeUp - Decide if we need to wake up at next Beacon
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TBIT_H__)
|
||||||
|
#include "tbit.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__MAC_H__)
|
||||||
|
#include "mac.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WMGR_H__)
|
||||||
|
#include "wmgr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__POWER_H__)
|
||||||
|
#include "power.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WCMD_H__)
|
||||||
|
#include "wcmd.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TBIT_H__)
|
||||||
|
#include "tbit.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__RXTX_H__)
|
||||||
|
#include "rxtx.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CARD_H__)
|
||||||
|
#include "card.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CONTROL_H__)
|
||||||
|
#include "control.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__RNDIS_H__)
|
||||||
|
#include "rndis.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Routine Description:
|
||||||
|
* Enable hw power saving functions
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None.
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
PSvEnablePowerSaving(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN WORD wListenInterval
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice)hDeviceContext;
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
WORD wAID = pMgmt->wCurrAID | BIT14 | BIT15;
|
||||||
|
|
||||||
|
// set period of power up before TBTT
|
||||||
|
MACvWriteWord(pDevice, MAC_REG_PWBT, C_PWBT);
|
||||||
|
|
||||||
|
if (pDevice->eOPMode != OP_MODE_ADHOC) {
|
||||||
|
// set AID
|
||||||
|
MACvWriteWord(pDevice, MAC_REG_AIDATIM, wAID);
|
||||||
|
} else {
|
||||||
|
// set ATIM Window
|
||||||
|
//MACvWriteATIMW(pDevice->PortOffset, pMgmt->wCurrATIMWindow);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Warren:06-18-2004,the sequence must follow PSEN->AUTOSLEEP->GO2DOZE
|
||||||
|
// enable power saving hw function
|
||||||
|
MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_PSEN);
|
||||||
|
// Set AutoSleep
|
||||||
|
MACvRegBitsOn(pDevice, MAC_REG_PSCFG, PSCFG_AUTOSLEEP);
|
||||||
|
|
||||||
|
//Warren:MUST turn on this once before turn on AUTOSLEEP ,or the AUTOSLEEP doesn't work
|
||||||
|
MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_GO2DOZE);
|
||||||
|
|
||||||
|
|
||||||
|
if (wListenInterval >= 2) {
|
||||||
|
|
||||||
|
// clear always listen beacon
|
||||||
|
MACvRegBitsOff(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN);
|
||||||
|
// first time set listen next beacon
|
||||||
|
MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN);
|
||||||
|
|
||||||
|
pMgmt->wCountToWakeUp = wListenInterval;
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
// always listen beacon
|
||||||
|
MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN);
|
||||||
|
pMgmt->wCountToWakeUp = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pDevice->bEnablePSMode = TRUE;
|
||||||
|
|
||||||
|
if (pDevice->eOPMode == OP_MODE_ADHOC) {
|
||||||
|
// bMgrPrepareBeaconToSend((HANDLE)pDevice, pMgmt);
|
||||||
|
}
|
||||||
|
// We don't send null pkt in ad hoc mode since beacon will handle this.
|
||||||
|
else if (pDevice->eOPMode == OP_MODE_INFRASTRUCTURE) {
|
||||||
|
PSbSendNullPacket(pDevice);
|
||||||
|
}
|
||||||
|
pDevice->bPWBitOn = TRUE;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "PS:Power Saving Mode Enable... \n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Routine Description:
|
||||||
|
* Disable hw power saving functions
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None.
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
|
||||||
|
VOID
|
||||||
|
PSvDisablePowerSaving(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice)hDeviceContext;
|
||||||
|
// PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
|
||||||
|
|
||||||
|
// disable power saving hw function
|
||||||
|
CONTROLnsRequestOut(pDevice,
|
||||||
|
MESSAGE_TYPE_DISABLE_PS,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
//clear AutoSleep
|
||||||
|
MACvRegBitsOff(pDevice, MAC_REG_PSCFG, PSCFG_AUTOSLEEP);
|
||||||
|
|
||||||
|
// set always listen beacon
|
||||||
|
MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN);
|
||||||
|
|
||||||
|
pDevice->bEnablePSMode = FALSE;
|
||||||
|
|
||||||
|
if (pDevice->eOPMode == OP_MODE_INFRASTRUCTURE) {
|
||||||
|
PSbSendNullPacket(pDevice);
|
||||||
|
}
|
||||||
|
pDevice->bPWBitOn = FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Routine Description:
|
||||||
|
* Consider to power down when no more packets to tx or rx.
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* TRUE, if power down success
|
||||||
|
* FALSE, if fail
|
||||||
|
-*/
|
||||||
|
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
PSbConsiderPowerDown(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN BOOL bCheckRxDMA,
|
||||||
|
IN BOOL bCheckCountToWakeUp
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice)hDeviceContext;
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
BYTE byData;
|
||||||
|
|
||||||
|
|
||||||
|
// check if already in Doze mode
|
||||||
|
ControlvReadByte(pDevice, MESSAGE_REQUEST_MACREG, MAC_REG_PSCTL, &byData);
|
||||||
|
if ( (byData & PSCTL_PS) != 0 )
|
||||||
|
return TRUE;;
|
||||||
|
|
||||||
|
if (pMgmt->eCurrMode != WMAC_MODE_IBSS_STA) {
|
||||||
|
// check if in TIM wake period
|
||||||
|
if (pMgmt->bInTIMWake)
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check scan state
|
||||||
|
if (pDevice->bCmdRunning)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
//Tx Burst
|
||||||
|
if ( pDevice->bPSModeTxBurst )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
// Froce PSEN on
|
||||||
|
MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_PSEN);
|
||||||
|
|
||||||
|
if (pMgmt->eCurrMode != WMAC_MODE_IBSS_STA) {
|
||||||
|
if (bCheckCountToWakeUp &&
|
||||||
|
(pMgmt->wCountToWakeUp == 0 || pMgmt->wCountToWakeUp == 1)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pDevice->bPSRxBeacon = TRUE;
|
||||||
|
// no Tx, no Rx isr, now go to Doze
|
||||||
|
MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_GO2DOZE);
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Go to Doze ZZZZZZZZZZZZZZZ\n");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Routine Description:
|
||||||
|
* Send PS-POLL packet
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None.
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
PSvSendPSPOLL(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice)hDeviceContext;
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
PSTxMgmtPacket pTxPacket = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
memset(pMgmt->pbyPSPacketPool, 0, sizeof(STxMgmtPacket) + WLAN_HDR_ADDR2_LEN);
|
||||||
|
pTxPacket = (PSTxMgmtPacket)pMgmt->pbyPSPacketPool;
|
||||||
|
pTxPacket->p80211Header = (PUWLAN_80211HDR)((PBYTE)pTxPacket + sizeof(STxMgmtPacket));
|
||||||
|
pTxPacket->p80211Header->sA2.wFrameCtl = cpu_to_le16(
|
||||||
|
(
|
||||||
|
WLAN_SET_FC_FTYPE(WLAN_TYPE_CTL) |
|
||||||
|
WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_PSPOLL) |
|
||||||
|
WLAN_SET_FC_PWRMGT(0)
|
||||||
|
));
|
||||||
|
pTxPacket->p80211Header->sA2.wDurationID = pMgmt->wCurrAID | BIT14 | BIT15;
|
||||||
|
memcpy(pTxPacket->p80211Header->sA2.abyAddr1, pMgmt->abyCurrBSSID, WLAN_ADDR_LEN);
|
||||||
|
memcpy(pTxPacket->p80211Header->sA2.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN);
|
||||||
|
pTxPacket->cbMPDULen = WLAN_HDR_ADDR2_LEN;
|
||||||
|
pTxPacket->cbPayloadLen = 0;
|
||||||
|
// send the frame
|
||||||
|
if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Send PS-Poll packet failed..\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Send PS-Poll packet success..\n");
|
||||||
|
};
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Routine Description:
|
||||||
|
* Send NULL packet to AP for notification power state of STA
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None.
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
BOOL
|
||||||
|
PSbSendNullPacket(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSDevice pDevice = (PSDevice)hDeviceContext;
|
||||||
|
PSTxMgmtPacket pTxPacket = NULL;
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (pDevice->bLinkPass == FALSE) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//2007-0115-03<Add>by MikeLiu
|
||||||
|
#ifdef TxInSleep
|
||||||
|
if ((pDevice->bEnablePSMode == FALSE) &&
|
||||||
|
(pDevice->fTxDataInSleep == FALSE)){
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (pDevice->bEnablePSMode == FALSE) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
memset(pMgmt->pbyPSPacketPool, 0, sizeof(STxMgmtPacket) + WLAN_NULLDATA_FR_MAXLEN);
|
||||||
|
pTxPacket = (PSTxMgmtPacket)pMgmt->pbyPSPacketPool;
|
||||||
|
pTxPacket->p80211Header = (PUWLAN_80211HDR)((PBYTE)pTxPacket + sizeof(STxMgmtPacket));
|
||||||
|
|
||||||
|
if (pDevice->bEnablePSMode) {
|
||||||
|
|
||||||
|
pTxPacket->p80211Header->sA3.wFrameCtl = cpu_to_le16(
|
||||||
|
(
|
||||||
|
WLAN_SET_FC_FTYPE(WLAN_TYPE_DATA) |
|
||||||
|
WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_NULL) |
|
||||||
|
WLAN_SET_FC_PWRMGT(1)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pTxPacket->p80211Header->sA3.wFrameCtl = cpu_to_le16(
|
||||||
|
(
|
||||||
|
WLAN_SET_FC_FTYPE(WLAN_TYPE_DATA) |
|
||||||
|
WLAN_SET_FC_FSTYPE(WLAN_FSTYPE_NULL) |
|
||||||
|
WLAN_SET_FC_PWRMGT(0)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pMgmt->eCurrMode != WMAC_MODE_IBSS_STA) {
|
||||||
|
pTxPacket->p80211Header->sA3.wFrameCtl |= cpu_to_le16((WORD)WLAN_SET_FC_TODS(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(pTxPacket->p80211Header->sA3.abyAddr1, pMgmt->abyCurrBSSID, WLAN_ADDR_LEN);
|
||||||
|
memcpy(pTxPacket->p80211Header->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN);
|
||||||
|
memcpy(pTxPacket->p80211Header->sA3.abyAddr3, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN);
|
||||||
|
pTxPacket->cbMPDULen = WLAN_HDR_ADDR3_LEN;
|
||||||
|
pTxPacket->cbPayloadLen = 0;
|
||||||
|
// send the frame
|
||||||
|
if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Send Null Packet failed !\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Send Null Packet success....\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return TRUE ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Routine Description:
|
||||||
|
* Check if Next TBTT must wake up
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* None.
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
PSbIsNextTBTTWakeUp(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
|
PSDevice pDevice = (PSDevice)hDeviceContext;
|
||||||
|
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
|
||||||
|
BOOL bWakeUp = FALSE;
|
||||||
|
|
||||||
|
if (pMgmt->wListenInterval >= 2) {
|
||||||
|
if (pMgmt->wCountToWakeUp == 0) {
|
||||||
|
pMgmt->wCountToWakeUp = pMgmt->wListenInterval;
|
||||||
|
}
|
||||||
|
|
||||||
|
pMgmt->wCountToWakeUp --;
|
||||||
|
|
||||||
|
if (pMgmt->wCountToWakeUp == 1) {
|
||||||
|
|
||||||
|
// Turn on wake up to listen next beacon
|
||||||
|
MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN);
|
||||||
|
pDevice->bPSRxBeacon = FALSE;
|
||||||
|
bWakeUp = TRUE;
|
||||||
|
|
||||||
|
} else if ( !pDevice->bPSRxBeacon ) {
|
||||||
|
//Listen until RxBeacon
|
||||||
|
MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_LNBCN);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return bWakeUp;
|
||||||
|
}
|
||||||
|
|
84
drivers/staging/vt6656/power.h
Normal file
84
drivers/staging/vt6656/power.h
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: power.h
|
||||||
|
*
|
||||||
|
* Purpose: Handles 802.11 power managment functions
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: July 17, 2002
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __POWER_H__
|
||||||
|
#define __POWER_H__
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
#define C_PWBT 1000 // micro sec. power up before TBTT
|
||||||
|
#define PS_FAST_INTERVAL 1 // Fast power saving listen interval
|
||||||
|
#define PS_MAX_INTERVAL 4 // MAX power saving listen interval
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
// IN PSDevice pDevice
|
||||||
|
// IN PSDevice hDeviceContext
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
PSbConsiderPowerDown(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN BOOL bCheckRxDMA,
|
||||||
|
IN BOOL bCheckCountToWakeUp
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
PSvDisablePowerSaving(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
PSvEnablePowerSaving(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN WORD wListenInterval
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
PSvSendPSPOLL(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
PSbSendNullPacket(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
PSbIsNextTBTTWakeUp(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif //__POWER_H__
|
89
drivers/staging/vt6656/rc4.c
Normal file
89
drivers/staging/vt6656/rc4.c
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: rc4.c
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
* Author: Kyle Hsu
|
||||||
|
*
|
||||||
|
* Date: Sep 4, 2002
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(__RC4_H__)
|
||||||
|
#include "rc4.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
VOID rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len)
|
||||||
|
{
|
||||||
|
UINT ust1, ust2;
|
||||||
|
UINT keyindex;
|
||||||
|
UINT stateindex;
|
||||||
|
PBYTE pbyst;
|
||||||
|
UINT idx;
|
||||||
|
|
||||||
|
pbyst = pRC4->abystate;
|
||||||
|
pRC4->ux = 0;
|
||||||
|
pRC4->uy = 0;
|
||||||
|
for (idx = 0; idx < 256; idx++)
|
||||||
|
pbyst[idx] = (BYTE)idx;
|
||||||
|
keyindex = 0;
|
||||||
|
stateindex = 0;
|
||||||
|
for (idx = 0; idx < 256; idx++) {
|
||||||
|
ust1 = pbyst[idx];
|
||||||
|
stateindex = (stateindex + pbyKey[keyindex] + ust1) & 0xff;
|
||||||
|
ust2 = pbyst[stateindex];
|
||||||
|
pbyst[stateindex] = (BYTE)ust1;
|
||||||
|
pbyst[idx] = (BYTE)ust2;
|
||||||
|
if (++keyindex >= cbKey_len)
|
||||||
|
keyindex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT rc4_byte(PRC4Ext pRC4)
|
||||||
|
{
|
||||||
|
UINT ux;
|
||||||
|
UINT uy;
|
||||||
|
UINT ustx, usty;
|
||||||
|
PBYTE pbyst;
|
||||||
|
|
||||||
|
pbyst = pRC4->abystate;
|
||||||
|
ux = (pRC4->ux + 1) & 0xff;
|
||||||
|
ustx = pbyst[ux];
|
||||||
|
uy = (ustx + pRC4->uy) & 0xff;
|
||||||
|
usty = pbyst[uy];
|
||||||
|
pRC4->ux = ux;
|
||||||
|
pRC4->uy = uy;
|
||||||
|
pbyst[uy] = (BYTE)ustx;
|
||||||
|
pbyst[ux] = (BYTE)usty;
|
||||||
|
|
||||||
|
return pbyst[(ustx + usty) & 0xff];
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest,
|
||||||
|
PBYTE pbySrc, UINT cbData_len)
|
||||||
|
{
|
||||||
|
UINT ii;
|
||||||
|
for (ii = 0; ii < cbData_len; ii++)
|
||||||
|
pbyDest[ii] = (BYTE)(pbySrc[ii] ^ rc4_byte(pRC4));
|
||||||
|
}
|
51
drivers/staging/vt6656/rc4.h
Normal file
51
drivers/staging/vt6656/rc4.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* File: rc4.h
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
* Author: Kyle Hsu
|
||||||
|
*
|
||||||
|
* Date: Sep 4, 2002
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __RC4_H__
|
||||||
|
#define __RC4_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
typedef struct {
|
||||||
|
UINT ux;
|
||||||
|
UINT uy;
|
||||||
|
BYTE abystate[256];
|
||||||
|
} RC4Ext, DEF* PRC4Ext;
|
||||||
|
|
||||||
|
VOID rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len);
|
||||||
|
UINT rc4_byte(PRC4Ext pRC4);
|
||||||
|
void rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest, PBYTE pbySrc, UINT cbData_len);
|
||||||
|
|
||||||
|
#endif //__RC4_H__
|
1163
drivers/staging/vt6656/rf.c
Normal file
1163
drivers/staging/vt6656/rf.c
Normal file
File diff suppressed because it is too large
Load Diff
112
drivers/staging/vt6656/rf.h
Normal file
112
drivers/staging/vt6656/rf.h
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: rf.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Feb. 19, 2004
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __RF_H__
|
||||||
|
#define __RF_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
//
|
||||||
|
// Baseband RF pair definition in eeprom (Bits 6..0)
|
||||||
|
//
|
||||||
|
#define RF_RFMD2959 0x01
|
||||||
|
#define RF_MAXIMAG 0x02
|
||||||
|
#define RF_AL2230 0x03
|
||||||
|
#define RF_GCT5103 0x04
|
||||||
|
#define RF_UW2451 0x05
|
||||||
|
#define RF_MAXIMG 0x06
|
||||||
|
#define RF_MAXIM2829 0x07
|
||||||
|
#define RF_UW2452 0x08
|
||||||
|
#define RF_VT3226 0x09
|
||||||
|
#define RF_AIROHA7230 0x0a
|
||||||
|
#define RF_UW2453 0x0b
|
||||||
|
#define RF_VT3226D0 0x0c //RobertYu:20051114
|
||||||
|
#define RF_VT3342A0 0x0d //RobertYu:20060609
|
||||||
|
#define RF_AL2230S 0x0e
|
||||||
|
|
||||||
|
#define RF_EMU 0x80
|
||||||
|
#define RF_MASK 0x7F
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
extern const BYTE RFaby11aChannelIndex[200];
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
BOOL IFRFbWriteEmbeded(PSDevice pDevice, DWORD dwData);
|
||||||
|
BOOL RFbSetPower (
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN UINT uRATE,
|
||||||
|
IN UINT uCH
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL RFbRawSetPower(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byPwr,
|
||||||
|
IN UINT uRATE
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
RFvRSSITodBm (
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byCurrRSSI,
|
||||||
|
OUT PLONG pldBm
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
RFbRFTableDownload (
|
||||||
|
IN PSDevice pDevice
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL s_bVT3226D0_11bLoCurrentAdjust(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byChannel,
|
||||||
|
IN BOOL b11bMode
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __RF_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
162
drivers/staging/vt6656/rndis.h
Normal file
162
drivers/staging/vt6656/rndis.h
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: rndis.h
|
||||||
|
*
|
||||||
|
* Purpose: Interface between firmware and driver
|
||||||
|
*
|
||||||
|
* Author: Warren Hsu
|
||||||
|
*
|
||||||
|
* Date: Nov 24, 2004
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __RNDIS_H__
|
||||||
|
#define __RNDIS_H__
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
#define MESSAGE_TYPE_READ 0x01
|
||||||
|
#define MESSAGE_TYPE_WRITE 0x00
|
||||||
|
#define MESSAGE_TYPE_LOCK_OR 0x02
|
||||||
|
#define MESSAGE_TYPE_LOCK_AND 0x03
|
||||||
|
#define MESSAGE_TYPE_WRITE_MASK 0x04
|
||||||
|
#define MESSAGE_TYPE_CARDINIT 0x05
|
||||||
|
#define MESSAGE_TYPE_INIT_RSP 0x06
|
||||||
|
#define MESSAGE_TYPE_MACSHUTDOWN 0x07
|
||||||
|
#define MESSAGE_TYPE_SETKEY 0x08
|
||||||
|
#define MESSAGE_TYPE_CLRKEYENTRY 0x09
|
||||||
|
#define MESSAGE_TYPE_WRITE_MISCFF 0x0A
|
||||||
|
#define MESSAGE_TYPE_SET_ANTMD 0x0B
|
||||||
|
#define MESSAGE_TYPE_SELECT_CHANNLE 0x0C
|
||||||
|
#define MESSAGE_TYPE_SET_TSFTBTT 0x0D
|
||||||
|
#define MESSAGE_TYPE_SET_SSTIFS 0x0E
|
||||||
|
#define MESSAGE_TYPE_CHANGE_BBTYPE 0x0F
|
||||||
|
#define MESSAGE_TYPE_DISABLE_PS 0x10
|
||||||
|
#define MESSAGE_TYPE_WRITE_IFRF 0x11
|
||||||
|
|
||||||
|
//used for read/write(index)
|
||||||
|
#define MESSAGE_REQUEST_MEM 0x01
|
||||||
|
#define MESSAGE_REQUEST_BBREG 0x02
|
||||||
|
#define MESSAGE_REQUEST_MACREG 0x03
|
||||||
|
#define MESSAGE_REQUEST_EEPROM 0x04
|
||||||
|
#define MESSAGE_REQUEST_TSF 0x05
|
||||||
|
#define MESSAGE_REQUEST_TBTT 0x06
|
||||||
|
#define MESSAGE_REQUEST_BBAGC 0x07
|
||||||
|
#define MESSAGE_REQUEST_VERSION 0x08
|
||||||
|
#define MESSAGE_REQUEST_RF_INIT 0x09
|
||||||
|
#define MESSAGE_REQUEST_RF_INIT2 0x0A
|
||||||
|
#define MESSAGE_REQUEST_RF_CH0 0x0B
|
||||||
|
#define MESSAGE_REQUEST_RF_CH1 0x0C
|
||||||
|
#define MESSAGE_REQUEST_RF_CH2 0x0D
|
||||||
|
|
||||||
|
|
||||||
|
#define VIAUSB20_PACKET_HEADER 0x04
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
typedef struct _CMD_MESSAGE
|
||||||
|
{
|
||||||
|
BYTE byData[256];
|
||||||
|
} CMD_MESSAGE, *PCMD_MESSAGE;
|
||||||
|
|
||||||
|
typedef struct _CMD_WRITE_MASK
|
||||||
|
{
|
||||||
|
BYTE byData;
|
||||||
|
BYTE byMask;
|
||||||
|
} CMD_WRITE_MASK, *PCMD_WRITE_MASK;
|
||||||
|
|
||||||
|
typedef struct _CMD_CARD_INIT
|
||||||
|
{
|
||||||
|
BYTE byInitClass;
|
||||||
|
BYTE bExistSWNetAddr;
|
||||||
|
BYTE bySWNetAddr[6];
|
||||||
|
BYTE byShortRetryLimit;
|
||||||
|
BYTE byLongRetryLimit;
|
||||||
|
} CMD_CARD_INIT, *PCMD_CARD_INIT;
|
||||||
|
|
||||||
|
typedef struct _RSP_CARD_INIT
|
||||||
|
{
|
||||||
|
BYTE byStatus;
|
||||||
|
BYTE byNetAddr[6];
|
||||||
|
BYTE byRFType;
|
||||||
|
BYTE byMinChannel;
|
||||||
|
BYTE byMaxChannel;
|
||||||
|
} RSP_CARD_INIT, *PRSP_CARD_INIT;
|
||||||
|
|
||||||
|
typedef struct _CMD_SET_KEY
|
||||||
|
{
|
||||||
|
WORD wKCTL;
|
||||||
|
BYTE abyMacAddr[6];
|
||||||
|
BYTE abyKey[16];
|
||||||
|
} CMD_SET_KEY, *PCMD_SET_KEY;
|
||||||
|
|
||||||
|
typedef struct _CMD_CLRKEY_ENTRY
|
||||||
|
{
|
||||||
|
BYTE abyKeyEntry[11];
|
||||||
|
} CMD_CLRKEY_ENTRY, *PCMD_CLRKEY_ENTRY;
|
||||||
|
|
||||||
|
typedef struct _CMD_WRITE_MISCFF
|
||||||
|
{
|
||||||
|
DWORD adwMiscFFData[22][4]; //a key entry has only 22 dwords
|
||||||
|
} CMD_WRITE_MISCFF, *PCMD_WRITE_MISCFF;
|
||||||
|
|
||||||
|
typedef struct _CMD_SET_TSFTBTT
|
||||||
|
{
|
||||||
|
BYTE abyTSF_TBTT[8];
|
||||||
|
} CMD_SET_TSFTBTT, *PCMD_SET_TSFTBTT;
|
||||||
|
|
||||||
|
typedef struct _CMD_SET_SSTIFS
|
||||||
|
{
|
||||||
|
BYTE bySIFS;
|
||||||
|
BYTE byDIFS;
|
||||||
|
BYTE byEIFS;
|
||||||
|
BYTE bySlotTime;
|
||||||
|
BYTE byCwMax_Min;
|
||||||
|
BYTE byBBCR10;
|
||||||
|
} CMD_SET_SSTIFS, *PCMD_SET_SSTIFS;
|
||||||
|
|
||||||
|
typedef struct _CMD_CHANGE_BBTYPE
|
||||||
|
{
|
||||||
|
BYTE bySIFS;
|
||||||
|
BYTE byDIFS;
|
||||||
|
BYTE byEIFS;
|
||||||
|
BYTE bySlotTime;
|
||||||
|
BYTE byCwMax_Min;
|
||||||
|
BYTE byBBCR10;
|
||||||
|
BYTE byBB_BBType; //CR88
|
||||||
|
BYTE byMAC_BBType;
|
||||||
|
DWORD dwRSPINF_b_1;
|
||||||
|
DWORD dwRSPINF_b_2;
|
||||||
|
DWORD dwRSPINF_b_55;
|
||||||
|
DWORD dwRSPINF_b_11;
|
||||||
|
WORD wRSPINF_a[9];
|
||||||
|
} CMD_CHANGE_BBTYPE, *PCMD_CHANGE_BBTYPE;
|
||||||
|
|
||||||
|
/*--------------------- Export Macros -------------------------*/
|
||||||
|
|
||||||
|
#define EXCH_WORD(w) ( (WORD)((WORD)(w)<<8) | (WORD)((WORD)(w)>>8) )
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
#endif // _RNDIS_H_
|
3280
drivers/staging/vt6656/rxtx.c
Normal file
3280
drivers/staging/vt6656/rxtx.c
Normal file
File diff suppressed because it is too large
Load Diff
716
drivers/staging/vt6656/rxtx.h
Normal file
716
drivers/staging/vt6656/rxtx.h
Normal file
@ -0,0 +1,716 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: rxtx.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Jun. 27, 2002
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __RXTX_H__
|
||||||
|
#define __RXTX_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WCMD_H__)
|
||||||
|
#include "wcmd.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
//
|
||||||
|
// RTS buffer header
|
||||||
|
//
|
||||||
|
typedef struct tagSRTSDataF {
|
||||||
|
WORD wFrameControl;
|
||||||
|
WORD wDurationID;
|
||||||
|
BYTE abyRA[U_ETHER_ADDR_LEN];
|
||||||
|
BYTE abyTA[U_ETHER_ADDR_LEN];
|
||||||
|
} SRTSDataF, DEF* PSRTSDataF;
|
||||||
|
|
||||||
|
//
|
||||||
|
// CTS buffer header
|
||||||
|
//
|
||||||
|
typedef struct tagSCTSDataF {
|
||||||
|
WORD wFrameControl;
|
||||||
|
WORD wDurationID;
|
||||||
|
BYTE abyRA[U_ETHER_ADDR_LEN];
|
||||||
|
WORD wReserved;
|
||||||
|
} SCTSDataF, DEF* PSCTSDataF;
|
||||||
|
|
||||||
|
//
|
||||||
|
// MICHDR data header
|
||||||
|
//
|
||||||
|
typedef struct tagSMICHDR {
|
||||||
|
DWORD adwHDR0[4];
|
||||||
|
DWORD adwHDR1[4];
|
||||||
|
DWORD adwHDR2[4];
|
||||||
|
} SMICHDR, DEF* PSMICHDR;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_NAF_G_RTS
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wRTSTxRrvTime_ba;
|
||||||
|
WORD wRTSTxRrvTime_aa;
|
||||||
|
WORD wRTSTxRrvTime_bb;
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wTxRrvTime_b;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
|
||||||
|
//RTS
|
||||||
|
BYTE byRTSSignalField_b;
|
||||||
|
BYTE byRTSServiceField_b;
|
||||||
|
WORD wRTSTransmitLength_b;
|
||||||
|
BYTE byRTSSignalField_a;
|
||||||
|
BYTE byRTSServiceField_a;
|
||||||
|
WORD wRTSTransmitLength_a;
|
||||||
|
WORD wRTSDuration_ba;
|
||||||
|
WORD wRTSDuration_aa;
|
||||||
|
WORD wRTSDuration_bb;
|
||||||
|
WORD wReserved3;
|
||||||
|
SRTSDataF sRTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_b;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wTimeStampOff_b;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
|
||||||
|
} TX_NAF_G_RTS, DEF* PTX_NAF_G_RTS;
|
||||||
|
|
||||||
|
typedef struct tagSTX_NAF_G_RTS_MIC
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wRTSTxRrvTime_ba;
|
||||||
|
WORD wRTSTxRrvTime_aa;
|
||||||
|
WORD wRTSTxRrvTime_bb;
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wTxRrvTime_b;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
|
||||||
|
SMICHDR sMICHDR;
|
||||||
|
|
||||||
|
//RTS
|
||||||
|
BYTE byRTSSignalField_b;
|
||||||
|
BYTE byRTSServiceField_b;
|
||||||
|
WORD wRTSTransmitLength_b;
|
||||||
|
BYTE byRTSSignalField_a;
|
||||||
|
BYTE byRTSServiceField_a;
|
||||||
|
WORD wRTSTransmitLength_a;
|
||||||
|
WORD wRTSDuration_ba;
|
||||||
|
WORD wRTSDuration_aa;
|
||||||
|
WORD wRTSDuration_bb;
|
||||||
|
WORD wReserved3;
|
||||||
|
SRTSDataF sRTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_b;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wTimeStampOff_b;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
|
||||||
|
} TX_NAF_G_RTS_MIC, DEF* PTX_NAF_G_RTS_MIC;
|
||||||
|
|
||||||
|
typedef struct tagSTX_NAF_G_CTS
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wCTSTxRrvTime_ba;
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wTxRrvTime_b;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
|
||||||
|
//CTS
|
||||||
|
BYTE byCTSSignalField_b;
|
||||||
|
BYTE byCTSServiceField_b;
|
||||||
|
WORD wCTSTransmitLength_b;
|
||||||
|
WORD wCTSDuration_ba;
|
||||||
|
WORD wReserved3;
|
||||||
|
SCTSDataF sCTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_b;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wTimeStampOff_b;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
|
||||||
|
} TX_NAF_G_CTS, DEF* PTX_NAF_G_CTS;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_NAF_G_CTS_MIC
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wCTSTxRrvTime_ba;
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wTxRrvTime_b;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
|
||||||
|
|
||||||
|
SMICHDR sMICHDR;
|
||||||
|
|
||||||
|
//CTS
|
||||||
|
BYTE byCTSSignalField_b;
|
||||||
|
BYTE byCTSServiceField_b;
|
||||||
|
WORD wCTSTransmitLength_b;
|
||||||
|
WORD wCTSDuration_ba;
|
||||||
|
WORD wReserved3;
|
||||||
|
SCTSDataF sCTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_b;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wTimeStampOff_b;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
|
||||||
|
} TX_NAF_G_CTS_MIC, DEF* PTX_NAF_G_CTS_MIC;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_NAF_G_BEACON
|
||||||
|
{
|
||||||
|
WORD wFIFOCtl;
|
||||||
|
WORD wTimeStamp;
|
||||||
|
|
||||||
|
//CTS
|
||||||
|
BYTE byCTSSignalField_b;
|
||||||
|
BYTE byCTSServiceField_b;
|
||||||
|
WORD wCTSTransmitLength_b;
|
||||||
|
WORD wCTSDuration_ba;
|
||||||
|
WORD wReserved1;
|
||||||
|
SCTSDataF sCTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
|
||||||
|
|
||||||
|
} TX_NAF_G_BEACON, DEF* PTX_NAF_G_BEACON;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_NAF_AB_RTS
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wRTSTxRrvTime_ab;
|
||||||
|
WORD wTxRrvTime_ab;
|
||||||
|
|
||||||
|
//RTS
|
||||||
|
BYTE byRTSSignalField_ab;
|
||||||
|
BYTE byRTSServiceField_ab;
|
||||||
|
WORD wRTSTransmitLength_ab;
|
||||||
|
WORD wRTSDuration_ab;
|
||||||
|
WORD wReserved2;
|
||||||
|
SRTSDataF sRTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_ab;
|
||||||
|
BYTE byServiceField_ab;
|
||||||
|
WORD wTransmitLength_ab;
|
||||||
|
WORD wDuration_ab;
|
||||||
|
WORD wTimeStampOff_ab;
|
||||||
|
|
||||||
|
|
||||||
|
} TX_NAF_AB_RTS, DEF* PTX_NAF_AB_RTS;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_NAF_AB_RTS_MIC
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wRTSTxRrvTime_ab;
|
||||||
|
WORD wTxRrvTime_ab;
|
||||||
|
|
||||||
|
SMICHDR sMICHDR;
|
||||||
|
|
||||||
|
//RTS
|
||||||
|
BYTE byRTSSignalField_ab;
|
||||||
|
BYTE byRTSServiceField_ab;
|
||||||
|
WORD wRTSTransmitLength_ab;
|
||||||
|
WORD wRTSDuration_ab;
|
||||||
|
WORD wReserved2;
|
||||||
|
SRTSDataF sRTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_ab;
|
||||||
|
BYTE byServiceField_ab;
|
||||||
|
WORD wTransmitLength_ab;
|
||||||
|
WORD wDuration_ab;
|
||||||
|
WORD wTimeStampOff_ab;
|
||||||
|
|
||||||
|
|
||||||
|
} TX_NAF_AB_RTS_MIC, DEF* PTX_NAF_AB_RTS_MIC;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_NAF_AB_CTS
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wTxRrvTime_ab;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_ab;
|
||||||
|
BYTE byServiceField_ab;
|
||||||
|
WORD wTransmitLength_ab;
|
||||||
|
WORD wDuration_ab;
|
||||||
|
WORD wTimeStampOff_ab;
|
||||||
|
|
||||||
|
} TX_NAF_AB_CTS, DEF* PTX_NAF_AB_CTS;
|
||||||
|
|
||||||
|
typedef struct tagSTX_NAF_AB_CTS_MIC
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wTxRrvTime_ab;
|
||||||
|
|
||||||
|
SMICHDR sMICHDR;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_ab;
|
||||||
|
BYTE byServiceField_ab;
|
||||||
|
WORD wTransmitLength_ab;
|
||||||
|
WORD wDuration_ab;
|
||||||
|
WORD wTimeStampOff_ab;
|
||||||
|
|
||||||
|
} TX_NAF_AB_CTS_MIC, DEF* PTX_NAF_AB_CTS_MIC;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_NAF_AB_BEACON
|
||||||
|
{
|
||||||
|
WORD wFIFOCtl;
|
||||||
|
WORD wTimeStamp;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_ab;
|
||||||
|
BYTE byServiceField_ab;
|
||||||
|
WORD wTransmitLength_ab;
|
||||||
|
WORD wDuration_ab;
|
||||||
|
WORD wTimeStampOff_ab;
|
||||||
|
|
||||||
|
} TX_NAF_AB_BEACON, DEF* PTX_NAF_AB_BEACON;
|
||||||
|
|
||||||
|
typedef struct tagSTX_AF_G_RTS
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wRTSTxRrvTime_ba;
|
||||||
|
WORD wRTSTxRrvTime_aa;
|
||||||
|
WORD wRTSTxRrvTime_bb;
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wTxRrvTime_b;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
|
||||||
|
//RTS
|
||||||
|
BYTE byRTSSignalField_b;
|
||||||
|
BYTE byRTSServiceField_b;
|
||||||
|
WORD wRTSTransmitLength_b;
|
||||||
|
BYTE byRTSSignalField_a;
|
||||||
|
BYTE byRTSServiceField_a;
|
||||||
|
WORD wRTSTransmitLength_a;
|
||||||
|
WORD wRTSDuration_ba;
|
||||||
|
WORD wRTSDuration_aa;
|
||||||
|
WORD wRTSDuration_bb;
|
||||||
|
WORD wReserved3;
|
||||||
|
WORD wRTSDuration_ba_f0;
|
||||||
|
WORD wRTSDuration_aa_f0;
|
||||||
|
WORD wRTSDuration_ba_f1;
|
||||||
|
WORD wRTSDuration_aa_f1;
|
||||||
|
SRTSDataF sRTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_b;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wDuration_a_f0;
|
||||||
|
WORD wDuration_a_f1;
|
||||||
|
WORD wTimeStampOff_b;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
|
||||||
|
} TX_AF_G_RTS, DEF* PTX_AF_G_RTS;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_AF_G_RTS_MIC
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wRTSTxRrvTime_ba;
|
||||||
|
WORD wRTSTxRrvTime_aa;
|
||||||
|
WORD wRTSTxRrvTime_bb;
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wTxRrvTime_b;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
|
||||||
|
SMICHDR sMICHDR;
|
||||||
|
|
||||||
|
//RTS
|
||||||
|
BYTE byRTSSignalField_b;
|
||||||
|
BYTE byRTSServiceField_b;
|
||||||
|
WORD wRTSTransmitLength_b;
|
||||||
|
BYTE byRTSSignalField_a;
|
||||||
|
BYTE byRTSServiceField_a;
|
||||||
|
WORD wRTSTransmitLength_a;
|
||||||
|
WORD wRTSDuration_ba;
|
||||||
|
WORD wRTSDuration_aa;
|
||||||
|
WORD wRTSDuration_bb;
|
||||||
|
WORD wReserved3;
|
||||||
|
WORD wRTSDuration_ba_f0;
|
||||||
|
WORD wRTSDuration_aa_f0;
|
||||||
|
WORD wRTSDuration_ba_f1;
|
||||||
|
WORD wRTSDuration_aa_f1;
|
||||||
|
SRTSDataF sRTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_b;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wDuration_a_f0;
|
||||||
|
WORD wDuration_a_f1;
|
||||||
|
WORD wTimeStampOff_b;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
|
||||||
|
} TX_AF_G_RTS_MIC, DEF* PTX_AF_G_RTS_MIC;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_AF_G_CTS
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wCTSTxRrvTime_ba;
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wTxRrvTime_b;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
|
||||||
|
//CTS
|
||||||
|
BYTE byCTSSignalField_b;
|
||||||
|
BYTE byCTSServiceField_b;
|
||||||
|
WORD wCTSTransmitLength_b;
|
||||||
|
WORD wCTSDuration_ba;
|
||||||
|
WORD wReserved3;
|
||||||
|
WORD wCTSDuration_ba_f0;
|
||||||
|
WORD wCTSDuration_ba_f1;
|
||||||
|
SCTSDataF sCTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_b;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wDuration_a_f0;
|
||||||
|
WORD wDuration_a_f1;
|
||||||
|
WORD wTimeStampOff_b;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
|
||||||
|
} TX_AF_G_CTS, DEF* PTX_AF_G_CTS;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_AF_G_CTS_MIC
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wCTSTxRrvTime_ba;
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wTxRrvTime_b;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
|
||||||
|
|
||||||
|
SMICHDR sMICHDR;
|
||||||
|
|
||||||
|
//CTS
|
||||||
|
BYTE byCTSSignalField_b;
|
||||||
|
BYTE byCTSServiceField_b;
|
||||||
|
WORD wCTSTransmitLength_b;
|
||||||
|
WORD wCTSDuration_ba;
|
||||||
|
WORD wReserved3;
|
||||||
|
WORD wCTSDuration_ba_f0;
|
||||||
|
WORD wCTSDuration_ba_f1;
|
||||||
|
SCTSDataF sCTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_b;
|
||||||
|
BYTE byServiceField_b;
|
||||||
|
WORD wTransmitLength_b;
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_b;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wDuration_a_f0;
|
||||||
|
WORD wDuration_a_f1;
|
||||||
|
WORD wTimeStampOff_b;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
|
||||||
|
} TX_AF_G_CTS_MIC, DEF* PTX_AF_G_CTS_MIC;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_AF_A_RTS
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wRTSTxRrvTime_a;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
|
||||||
|
//RTS
|
||||||
|
BYTE byRTSSignalField_a;
|
||||||
|
BYTE byRTSServiceField_a;
|
||||||
|
WORD wRTSTransmitLength_a;
|
||||||
|
WORD wRTSDuration_a;
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wRTSDuration_a_f0;
|
||||||
|
WORD wRTSDuration_a_f1;
|
||||||
|
SRTSDataF sRTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
WORD wDuration_a_f0;
|
||||||
|
WORD wDuration_a_f1;
|
||||||
|
|
||||||
|
} TX_AF_A_RTS, DEF* PTX_AF_A_RTS;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_AF_A_RTS_MIC
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wRTSTxRrvTime_a;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
|
||||||
|
SMICHDR sMICHDR;
|
||||||
|
|
||||||
|
//RTS
|
||||||
|
BYTE byRTSSignalField_a;
|
||||||
|
BYTE byRTSServiceField_a;
|
||||||
|
WORD wRTSTransmitLength_a;
|
||||||
|
WORD wRTSDuration_a;
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wRTSDuration_a_f0;
|
||||||
|
WORD wRTSDuration_a_f1;
|
||||||
|
SRTSDataF sRTS;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
WORD wDuration_a_f0;
|
||||||
|
WORD wDuration_a_f1;
|
||||||
|
|
||||||
|
} TX_AF_A_RTS_MIC, DEF* PTX_AF_A_RTS_MIC;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_AF_A_CTS
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
WORD wDuration_a_f0;
|
||||||
|
WORD wDuration_a_f1;
|
||||||
|
|
||||||
|
} TX_AF_A_CTS, DEF* PTX_AF_A_CTS;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSTX_AF_A_CTS_MIC
|
||||||
|
{
|
||||||
|
//RsvTime
|
||||||
|
WORD wReserved2;
|
||||||
|
WORD wTxRrvTime_a;
|
||||||
|
|
||||||
|
SMICHDR sMICHDR;
|
||||||
|
|
||||||
|
//Data
|
||||||
|
BYTE bySignalField_a;
|
||||||
|
BYTE byServiceField_a;
|
||||||
|
WORD wTransmitLength_a;
|
||||||
|
WORD wDuration_a;
|
||||||
|
WORD wTimeStampOff_a;
|
||||||
|
WORD wDuration_a_f0;
|
||||||
|
WORD wDuration_a_f1;
|
||||||
|
|
||||||
|
} TX_AF_A_CTS_MIC, DEF* PTX_AF_A_CTS_MIC;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// union with all of the TX Buffer Type
|
||||||
|
//
|
||||||
|
typedef union tagUTX_BUFFER_CONTAINER
|
||||||
|
{
|
||||||
|
TX_NAF_G_RTS RTS_G;
|
||||||
|
TX_NAF_G_RTS_MIC RTS_G_MIC;
|
||||||
|
TX_NAF_G_CTS CTS_G;
|
||||||
|
TX_NAF_G_CTS_MIC CTS_G_MIC;
|
||||||
|
//TX_NAF_G_BEACON Beacon_G;
|
||||||
|
TX_NAF_AB_RTS RTS_AB;
|
||||||
|
TX_NAF_AB_RTS_MIC RTS_AB_MIC;
|
||||||
|
TX_NAF_AB_CTS CTS_AB;
|
||||||
|
TX_NAF_AB_CTS_MIC CTS_AB_MIC;
|
||||||
|
//TX_NAF_AB_BEACON Beacon_AB;
|
||||||
|
TX_AF_G_RTS RTS_G_AutoFB;
|
||||||
|
TX_AF_G_RTS_MIC RTS_G_AutoFB_MIC;
|
||||||
|
TX_AF_G_CTS CTS_G_AutoFB;
|
||||||
|
TX_AF_G_CTS_MIC CTS_G_AutoFB_MIC;
|
||||||
|
TX_AF_A_RTS RTS_A_AutoFB;
|
||||||
|
TX_AF_A_RTS_MIC RTS_A_AutoFB_MIC;
|
||||||
|
TX_AF_A_CTS CTS_A_AutoFB;
|
||||||
|
TX_AF_A_CTS_MIC CTS_A_AutoFB_MIC;
|
||||||
|
|
||||||
|
} TX_BUFFER_CONTAINER, DEF* PTX_BUFFER_CONTAINER;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Remote NDIS message format
|
||||||
|
//
|
||||||
|
typedef struct tagSTX_BUFFER
|
||||||
|
{
|
||||||
|
BYTE byType;
|
||||||
|
BYTE byPKTNO;
|
||||||
|
WORD wTxByteCount;
|
||||||
|
|
||||||
|
DWORD adwTxKey[4];
|
||||||
|
WORD wFIFOCtl;
|
||||||
|
WORD wTimeStamp;
|
||||||
|
WORD wFragCtl;
|
||||||
|
WORD wReserved;
|
||||||
|
|
||||||
|
|
||||||
|
// Actual message
|
||||||
|
TX_BUFFER_CONTAINER BufferHeader;
|
||||||
|
|
||||||
|
} TX_BUFFER, DEF* PTX_BUFFER;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Remote NDIS message format
|
||||||
|
//
|
||||||
|
typedef struct tagSBEACON_BUFFER
|
||||||
|
{
|
||||||
|
BYTE byType;
|
||||||
|
BYTE byPKTNO;
|
||||||
|
WORD wTxByteCount;
|
||||||
|
|
||||||
|
WORD wFIFOCtl;
|
||||||
|
WORD wTimeStamp;
|
||||||
|
|
||||||
|
// Actual message
|
||||||
|
TX_BUFFER_CONTAINER BufferHeader;
|
||||||
|
|
||||||
|
} BEACON_BUFFER, DEF* PBEACON_BUFFER;
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
bPacketToWirelessUsb(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byPktType,
|
||||||
|
IN PBYTE usbPacketBuf,
|
||||||
|
IN BOOL bNeedEncrypt,
|
||||||
|
IN UINT cbPayloadSize,
|
||||||
|
IN UINT uDMAIdx,
|
||||||
|
IN PSEthernetHeader psEthHeader,
|
||||||
|
IN PBYTE pPacket,
|
||||||
|
IN PSKeyItem pTransmitKey,
|
||||||
|
IN UINT uNodeIndex,
|
||||||
|
IN WORD wCurrentRate,
|
||||||
|
OUT UINT *pcbHeaderLen,
|
||||||
|
OUT UINT *pcbTotalLen
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb);
|
||||||
|
NTSTATUS nsDMA_tx_packet(PSDevice pDevice, UINT uDMAIdx, struct sk_buff *skb);
|
||||||
|
CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket);
|
||||||
|
CMD_STATUS csBeacon_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket);
|
||||||
|
BOOL bRelayPacketSend(PSDevice pDevice, PBYTE pbySkbData, UINT uDataLen, UINT uNodeIndex);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __RXTX_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
144
drivers/staging/vt6656/srom.h
Normal file
144
drivers/staging/vt6656/srom.h
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: srom.h
|
||||||
|
*
|
||||||
|
* Purpose: Implement functions to access eeprom
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Jan 29, 2003
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __SROM_H__
|
||||||
|
#define __SROM_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
#define EEP_MAX_CONTEXT_SIZE 256
|
||||||
|
|
||||||
|
#define CB_EEPROM_READBYTE_WAIT 900 //us
|
||||||
|
|
||||||
|
#define W_MAX_I2CRETRY 0x0fff
|
||||||
|
|
||||||
|
//
|
||||||
|
// Contents in the EEPROM
|
||||||
|
//
|
||||||
|
#define EEP_OFS_PAR 0x00 // physical address
|
||||||
|
#define EEP_OFS_ANTENNA 0x17
|
||||||
|
#define EEP_OFS_RADIOCTL 0x18
|
||||||
|
#define EEP_OFS_RFTYPE 0x1B // for select RF
|
||||||
|
#define EEP_OFS_MINCHANNEL 0x1C // Min Channel #
|
||||||
|
#define EEP_OFS_MAXCHANNEL 0x1D // Max Channel #
|
||||||
|
#define EEP_OFS_SIGNATURE 0x1E //
|
||||||
|
#define EEP_OFS_ZONETYPE 0x1F //
|
||||||
|
#define EEP_OFS_RFTABLE 0x20 // RF POWER TABLE
|
||||||
|
#define EEP_OFS_PWR_CCK 0x20
|
||||||
|
#define EEP_OFS_SETPT_CCK 0x21
|
||||||
|
#define EEP_OFS_PWR_OFDMG 0x23
|
||||||
|
|
||||||
|
|
||||||
|
#define EEP_OFS_CALIB_TX_IQ 0x24
|
||||||
|
#define EEP_OFS_CALIB_TX_DC 0x25
|
||||||
|
#define EEP_OFS_CALIB_RX_IQ 0x26
|
||||||
|
|
||||||
|
#define EEP_OFS_MAJOR_VER 0x2E
|
||||||
|
#define EEP_OFS_MINOR_VER 0x2F
|
||||||
|
|
||||||
|
#define EEP_OFS_CCK_PWR_TBL 0x30
|
||||||
|
#define EEP_OFS_OFDM_PWR_TBL 0x40
|
||||||
|
#define EEP_OFS_OFDMA_PWR_TBL 0x50
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in EEP_OFS_ANTENNA
|
||||||
|
//
|
||||||
|
#define EEP_ANTENNA_MAIN 0x01
|
||||||
|
#define EEP_ANTENNA_AUX 0x02
|
||||||
|
#define EEP_ANTINV 0x04
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in EEP_OFS_RADIOCTL
|
||||||
|
//
|
||||||
|
#define EEP_RADIOCTL_ENABLE 0x80
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
// AT24C02 eeprom contents
|
||||||
|
// 2048 bits = 256 bytes = 128 words
|
||||||
|
//
|
||||||
|
typedef struct tagSSromReg {
|
||||||
|
BYTE abyPAR[6]; // 0x00 (WORD)
|
||||||
|
|
||||||
|
WORD wSUB_VID; // 0x03 (WORD)
|
||||||
|
WORD wSUB_SID;
|
||||||
|
|
||||||
|
BYTE byBCFG0; // 0x05 (WORD)
|
||||||
|
BYTE byBCFG1;
|
||||||
|
|
||||||
|
BYTE byFCR0; // 0x06 (WORD)
|
||||||
|
BYTE byFCR1;
|
||||||
|
BYTE byPMC0; // 0x07 (WORD)
|
||||||
|
BYTE byPMC1;
|
||||||
|
BYTE byMAXLAT; // 0x08 (WORD)
|
||||||
|
BYTE byMINGNT;
|
||||||
|
BYTE byCFG0; // 0x09 (WORD)
|
||||||
|
BYTE byCFG1;
|
||||||
|
WORD wCISPTR; // 0x0A (WORD)
|
||||||
|
WORD wRsv0; // 0x0B (WORD)
|
||||||
|
WORD wRsv1; // 0x0C (WORD)
|
||||||
|
BYTE byBBPAIR; // 0x0D (WORD)
|
||||||
|
BYTE byRFTYPE;
|
||||||
|
BYTE byMinChannel; // 0x0E (WORD)
|
||||||
|
BYTE byMaxChannel;
|
||||||
|
BYTE bySignature; // 0x0F (WORD)
|
||||||
|
BYTE byCheckSum;
|
||||||
|
|
||||||
|
BYTE abyReserved0[96]; // 0x10 (WORD)
|
||||||
|
BYTE abyCIS[128]; // 0x80 (WORD)
|
||||||
|
} SSromReg, DEF* PSSromReg;
|
||||||
|
|
||||||
|
/*--------------------- Export Macros ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __EEPROM_H__
|
78
drivers/staging/vt6656/tbit.h
Normal file
78
drivers/staging/vt6656/tbit.h
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: tbit.h
|
||||||
|
*
|
||||||
|
* Purpose: Bit routines
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 1996
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __TBIT_H__
|
||||||
|
#define __TBIT_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Macros ------------------------------*/
|
||||||
|
|
||||||
|
// test single bit on
|
||||||
|
#define BITbIsBitOn(tData, tTestBit) \
|
||||||
|
(((tData) & (tTestBit)) != 0)
|
||||||
|
|
||||||
|
// test single bit off
|
||||||
|
#define BITbIsBitOff(tData, tTestBit) \
|
||||||
|
(((tData) & (tTestBit)) == 0)
|
||||||
|
|
||||||
|
|
||||||
|
#define BITbIsAllBitsOn(tData, tTestBit) \
|
||||||
|
(((tData) & (tTestBit)) == (tTestBit))
|
||||||
|
|
||||||
|
#define BITbIsAllBitsOff(tData, tTestBit) \
|
||||||
|
(((tData) & (tTestBit)) == 0)
|
||||||
|
|
||||||
|
#define BITbIsAnyBitsOn(tData, tTestBit) \
|
||||||
|
(((tData) & (tTestBit)) != 0)
|
||||||
|
|
||||||
|
#define BITbIsAnyBitsOff(tData, tTestBit) \
|
||||||
|
(((tData) & (tTestBit)) != (tTestBit))
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __TBIT_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
207
drivers/staging/vt6656/tcrc.c
Normal file
207
drivers/staging/vt6656/tcrc.c
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 VIA Networking, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: tcrc.c
|
||||||
|
*
|
||||||
|
* Purpose: Implement functions to caculate CRC
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 1996
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* CRCdwCrc32 -
|
||||||
|
* CRCdwGetCrc32 -
|
||||||
|
* CRCdwGetCrc32Ex -
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__TBIT_H__)
|
||||||
|
#include "tbit.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TCRC_H__)
|
||||||
|
#include "tcrc.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
// 32-bit CRC table
|
||||||
|
static const DWORD s_adwCrc32Table[256] = {
|
||||||
|
0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL,
|
||||||
|
0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L,
|
||||||
|
0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L,
|
||||||
|
0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L,
|
||||||
|
0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL,
|
||||||
|
0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L,
|
||||||
|
0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL,
|
||||||
|
0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L,
|
||||||
|
0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L,
|
||||||
|
0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL,
|
||||||
|
0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L,
|
||||||
|
0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L,
|
||||||
|
0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L,
|
||||||
|
0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL,
|
||||||
|
0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L,
|
||||||
|
0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL,
|
||||||
|
0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL,
|
||||||
|
0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L,
|
||||||
|
0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L,
|
||||||
|
0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L,
|
||||||
|
0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL,
|
||||||
|
0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L,
|
||||||
|
0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL,
|
||||||
|
0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L,
|
||||||
|
0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L,
|
||||||
|
0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL,
|
||||||
|
0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L,
|
||||||
|
0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L,
|
||||||
|
0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L,
|
||||||
|
0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL,
|
||||||
|
0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L,
|
||||||
|
0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL,
|
||||||
|
0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL,
|
||||||
|
0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L,
|
||||||
|
0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L,
|
||||||
|
0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L,
|
||||||
|
0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL,
|
||||||
|
0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L,
|
||||||
|
0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL,
|
||||||
|
0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L,
|
||||||
|
0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L,
|
||||||
|
0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL,
|
||||||
|
0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L,
|
||||||
|
0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L,
|
||||||
|
0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L,
|
||||||
|
0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL,
|
||||||
|
0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L,
|
||||||
|
0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL,
|
||||||
|
0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL,
|
||||||
|
0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L,
|
||||||
|
0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L,
|
||||||
|
0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L,
|
||||||
|
0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL,
|
||||||
|
0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L,
|
||||||
|
0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL,
|
||||||
|
0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L,
|
||||||
|
0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L,
|
||||||
|
0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL,
|
||||||
|
0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L,
|
||||||
|
0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L,
|
||||||
|
0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L,
|
||||||
|
0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL,
|
||||||
|
0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L,
|
||||||
|
0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL
|
||||||
|
};
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Generate a CRC-32 from the data stream
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pbyData - the data stream
|
||||||
|
* cbByte - the length of the stream
|
||||||
|
* dwCrcSeed - Seed for CRC32
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: CRC-32
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
DWORD CRCdwCrc32 (PBYTE pbyData, UINT cbByte, DWORD dwCrcSeed)
|
||||||
|
{
|
||||||
|
DWORD dwCrc;
|
||||||
|
|
||||||
|
dwCrc = dwCrcSeed;
|
||||||
|
while (cbByte--) {
|
||||||
|
dwCrc = s_adwCrc32Table[(BYTE)((dwCrc ^ (*pbyData)) & 0xFF)] ^ (dwCrc >> 8);
|
||||||
|
pbyData++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dwCrc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* To test CRC generator, input 8 bytes packet
|
||||||
|
* -- 0xff 0xff 0xff 0xff 0x00 0x00 0x00 0x00
|
||||||
|
* the generated CRC should be
|
||||||
|
* -- 0xff 0xff 0xff 0xff
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pbyData - the data stream
|
||||||
|
* cbByte - the length of the stream
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: CRC-32
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
DWORD CRCdwGetCrc32 (PBYTE pbyData, UINT cbByte)
|
||||||
|
{
|
||||||
|
return ~CRCdwCrc32(pbyData, cbByte, 0xFFFFFFFFL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
*
|
||||||
|
* NOTE.... Because CRCdwGetCrc32Ex() is an iteration function,
|
||||||
|
* this means we will use the output of CRCdwGetCrc32Ex()
|
||||||
|
* to be a new argument to do next CRCdwGetCrc32Ex() calculation.
|
||||||
|
* Thus, the final result must be inverted to be the
|
||||||
|
* correct answer.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pbyData - the data stream
|
||||||
|
* cbByte - the length of the stream
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: CRC-32
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
DWORD CRCdwGetCrc32Ex(PBYTE pbyData, UINT cbByte, DWORD dwPreCRC)
|
||||||
|
{
|
||||||
|
return CRCdwCrc32(pbyData, cbByte, dwPreCRC);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
71
drivers/staging/vt6656/tcrc.h
Normal file
71
drivers/staging/vt6656/tcrc.h
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 VIA Networking, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: tcrc.h
|
||||||
|
*
|
||||||
|
* Purpose: Implement functions to caculate CRC
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: Jan. 28, 1997
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __TCRC_H__
|
||||||
|
#define __TCRC_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Macros ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
DWORD CRCdwCrc32(PBYTE pbyData, UINT cbByte, DWORD dwCrcSeed);
|
||||||
|
DWORD CRCdwGetCrc32(PBYTE pbyData, UINT cbByte);
|
||||||
|
DWORD CRCdwGetCrc32Ex(PBYTE pbyData, UINT cbByte, DWORD dwPreCRC);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __TCRC_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
123
drivers/staging/vt6656/tether.c
Normal file
123
drivers/staging/vt6656/tether.c
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2003 VIA Networking, Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: tether.c
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 1996
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* ETHbyGetHashIndexByCrc32 - Caculate multicast hash value by CRC32
|
||||||
|
* ETHbIsBufferCrc32Ok - Check CRC value of the buffer if Ok or not
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TMACRO_H__)
|
||||||
|
#include "tmacro.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TBIT_H__)
|
||||||
|
#include "tbit.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TCRC_H__)
|
||||||
|
#include "tcrc.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TETHER_H__)
|
||||||
|
#include "tether.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Caculate multicast hash value by CRC32
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pbyMultiAddr - Multicast Address
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: Hash value
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BYTE ETHbyGetHashIndexByCrc32 (PBYTE pbyMultiAddr)
|
||||||
|
{
|
||||||
|
int ii;
|
||||||
|
BYTE byTmpHash;
|
||||||
|
BYTE byHash = 0;
|
||||||
|
|
||||||
|
// get the least 6-bits from CRC generator
|
||||||
|
byTmpHash = (BYTE)(CRCdwCrc32(pbyMultiAddr, U_ETHER_ADDR_LEN,
|
||||||
|
0xFFFFFFFFL) & 0x3F);
|
||||||
|
// reverse most bit to least bit
|
||||||
|
for (ii = 0; ii < (sizeof(byTmpHash) * 8); ii++) {
|
||||||
|
byHash <<= 1;
|
||||||
|
if (BITbIsBitOn(byTmpHash, 0x01))
|
||||||
|
byHash |= 1;
|
||||||
|
byTmpHash >>= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// adjust 6-bits to the right most
|
||||||
|
return (byHash >> 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Check CRC value of the buffer if Ok or not
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pbyBuffer - pointer of buffer (normally is rx buffer)
|
||||||
|
* cbFrameLength - length of buffer, including CRC portion
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if ok; FALSE if error.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL ETHbIsBufferCrc32Ok (PBYTE pbyBuffer, UINT cbFrameLength)
|
||||||
|
{
|
||||||
|
DWORD dwCRC;
|
||||||
|
|
||||||
|
dwCRC = CRCdwGetCrc32(pbyBuffer, cbFrameLength - 4);
|
||||||
|
if (cpu_to_le32(*((PDWORD)(pbyBuffer + cbFrameLength - 4))) != dwCRC) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
256
drivers/staging/vt6656/tether.h
Normal file
256
drivers/staging/vt6656/tether.h
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: tether.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: Jan. 28, 1997
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __TETHER_H__
|
||||||
|
#define __TETHER_H__
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
//
|
||||||
|
// constants
|
||||||
|
//
|
||||||
|
#define U_ETHER_ADDR_LEN 6 // Ethernet address length
|
||||||
|
#define U_TYPE_LEN 2 //
|
||||||
|
#define U_CRC_LEN 4 //
|
||||||
|
#define U_HEADER_LEN (U_ETHER_ADDR_LEN * 2 + U_TYPE_LEN)
|
||||||
|
#define U_ETHER_ADDR_STR_LEN (U_ETHER_ADDR_LEN * 2 + 1)
|
||||||
|
// Ethernet address string length
|
||||||
|
|
||||||
|
#define MIN_DATA_LEN 46 // min data length
|
||||||
|
#define MAX_DATA_LEN 1500 // max data length
|
||||||
|
|
||||||
|
#define MIN_PACKET_LEN (MIN_DATA_LEN + U_HEADER_LEN)
|
||||||
|
// 60
|
||||||
|
// min total packet length (tx)
|
||||||
|
#define MAX_PACKET_LEN (MAX_DATA_LEN + U_HEADER_LEN)
|
||||||
|
// 1514
|
||||||
|
// max total packet length (tx)
|
||||||
|
|
||||||
|
#define MAX_LOOKAHEAD_SIZE MAX_PACKET_LEN
|
||||||
|
|
||||||
|
#define U_MULTI_ADDR_LEN 8 // multicast address length
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __BIG_ENDIAN
|
||||||
|
|
||||||
|
#define TYPE_PKT_IP 0x0800 //
|
||||||
|
#define TYPE_PKT_ARP 0x0806 //
|
||||||
|
#define TYPE_PKT_RARP 0x8035 //
|
||||||
|
#define TYPE_PKT_IPX 0x8137 //
|
||||||
|
#define TYPE_PKT_802_1x 0x888e
|
||||||
|
#define TYPE_PKT_PreAuth 0x88C7
|
||||||
|
|
||||||
|
#define TYPE_PKT_PING_M_REQ 0x8011 // master reguest
|
||||||
|
#define TYPE_PKT_PING_S_GNT 0x8022 // slave grant
|
||||||
|
#define TYPE_PKT_PING_M 0x8077 // pingpong master packet
|
||||||
|
#define TYPE_PKT_PING_S 0x8088 // pingpong slave packet
|
||||||
|
#define TYPE_PKT_WOL_M_REQ 0x8033 // WOL waker request
|
||||||
|
#define TYPE_PKT_WOL_S_GNT 0x8044 // WOL sleeper grant
|
||||||
|
#define TYPE_MGMT_PROBE_RSP 0x5000
|
||||||
|
#define TYPE_PKT_VNT_DIAG 0x8011 // Diag Pkt
|
||||||
|
#define TYPE_PKT_VNT_PER 0x8888 // Diag PER Pkt
|
||||||
|
//
|
||||||
|
// wFrameCtl field in the S802_11Header
|
||||||
|
//
|
||||||
|
// NOTE....
|
||||||
|
// in network byte order, high byte is going first
|
||||||
|
#define FC_TODS 0x0001
|
||||||
|
#define FC_FROMDS 0x0002
|
||||||
|
#define FC_MOREFRAG 0x0004
|
||||||
|
#define FC_RETRY 0x0008
|
||||||
|
#define FC_POWERMGT 0x0010
|
||||||
|
#define FC_MOREDATA 0x0020
|
||||||
|
#define FC_WEP 0x0040
|
||||||
|
#define TYPE_802_11_ATIM 0x9000
|
||||||
|
|
||||||
|
#define TYPE_802_11_DATA 0x0800
|
||||||
|
#define TYPE_802_11_CTL 0x0400
|
||||||
|
#define TYPE_802_11_MGMT 0x0000
|
||||||
|
#define TYPE_802_11_MASK 0x0C00
|
||||||
|
#define TYPE_SUBTYPE_MASK 0xFC00
|
||||||
|
#define TYPE_802_11_NODATA 0x4000
|
||||||
|
#define TYPE_DATE_NULL 0x4800
|
||||||
|
|
||||||
|
#define TYPE_CTL_PSPOLL 0xa400
|
||||||
|
#define TYPE_CTL_RTS 0xb400
|
||||||
|
#define TYPE_CTL_CTS 0xc400
|
||||||
|
#define TYPE_CTL_ACK 0xd400
|
||||||
|
|
||||||
|
|
||||||
|
//#define WEP_IV_MASK 0xFFFFFF00
|
||||||
|
|
||||||
|
#else //if LITTLE_ENDIAN
|
||||||
|
//
|
||||||
|
// wType field in the SEthernetHeader
|
||||||
|
//
|
||||||
|
// NOTE....
|
||||||
|
// in network byte order, high byte is going first
|
||||||
|
#define TYPE_PKT_IP 0x0008 //
|
||||||
|
#define TYPE_PKT_ARP 0x0608 //
|
||||||
|
#define TYPE_PKT_RARP 0x3580 //
|
||||||
|
#define TYPE_PKT_IPX 0x3781 //
|
||||||
|
|
||||||
|
#define TYPE_PKT_802_1x 0x8e88
|
||||||
|
#define TYPE_PKT_PreAuth 0xC788
|
||||||
|
|
||||||
|
#define TYPE_PKT_PING_M_REQ 0x1180 // master reguest
|
||||||
|
#define TYPE_PKT_PING_S_GNT 0x2280 // slave grant
|
||||||
|
#define TYPE_PKT_PING_M 0x7780 // pingpong master packet
|
||||||
|
#define TYPE_PKT_PING_S 0x8880 // pingpong slave packet
|
||||||
|
#define TYPE_PKT_WOL_M_REQ 0x3380 // WOL waker request
|
||||||
|
#define TYPE_PKT_WOL_S_GNT 0x4480 // WOL sleeper grant
|
||||||
|
#define TYPE_MGMT_PROBE_RSP 0x0050
|
||||||
|
#define TYPE_PKT_VNT_DIAG 0x1180 // Diag Pkt
|
||||||
|
#define TYPE_PKT_VNT_PER 0x8888 // Diag PER Pkt
|
||||||
|
//
|
||||||
|
// wFrameCtl field in the S802_11Header
|
||||||
|
//
|
||||||
|
// NOTE....
|
||||||
|
// in network byte order, high byte is going first
|
||||||
|
#define FC_TODS 0x0100
|
||||||
|
#define FC_FROMDS 0x0200
|
||||||
|
#define FC_MOREFRAG 0x0400
|
||||||
|
#define FC_RETRY 0x0800
|
||||||
|
#define FC_POWERMGT 0x1000
|
||||||
|
#define FC_MOREDATA 0x2000
|
||||||
|
#define FC_WEP 0x4000
|
||||||
|
#define TYPE_802_11_ATIM 0x0090
|
||||||
|
|
||||||
|
#define TYPE_802_11_DATA 0x0008
|
||||||
|
#define TYPE_802_11_CTL 0x0004
|
||||||
|
#define TYPE_802_11_MGMT 0x0000
|
||||||
|
#define TYPE_802_11_MASK 0x000C
|
||||||
|
#define TYPE_SUBTYPE_MASK 0x00FC
|
||||||
|
#define TYPE_802_11_NODATA 0x0040
|
||||||
|
#define TYPE_DATE_NULL 0x0048
|
||||||
|
|
||||||
|
#define TYPE_CTL_PSPOLL 0x00a4
|
||||||
|
#define TYPE_CTL_RTS 0x00b4
|
||||||
|
#define TYPE_CTL_CTS 0x00c4
|
||||||
|
#define TYPE_CTL_ACK 0x00d4
|
||||||
|
|
||||||
|
|
||||||
|
//#define WEP_IV_MASK 0x00FFFFFF
|
||||||
|
|
||||||
|
#endif //#ifdef __BIG_ENDIAN
|
||||||
|
|
||||||
|
#define WEP_IV_MASK 0x00FFFFFF
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
//
|
||||||
|
// Ethernet packet
|
||||||
|
//
|
||||||
|
typedef struct tagSEthernetHeader {
|
||||||
|
BYTE abyDstAddr[U_ETHER_ADDR_LEN];
|
||||||
|
BYTE abySrcAddr[U_ETHER_ADDR_LEN];
|
||||||
|
WORD wType;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
SEthernetHeader, DEF* PSEthernetHeader;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// 802_3 packet
|
||||||
|
//
|
||||||
|
typedef struct tagS802_3Header {
|
||||||
|
BYTE abyDstAddr[U_ETHER_ADDR_LEN];
|
||||||
|
BYTE abySrcAddr[U_ETHER_ADDR_LEN];
|
||||||
|
WORD wLen;
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
S802_3Header, DEF* PS802_3Header;
|
||||||
|
|
||||||
|
//
|
||||||
|
// 802_11 packet
|
||||||
|
//
|
||||||
|
typedef struct tagS802_11Header {
|
||||||
|
WORD wFrameCtl;
|
||||||
|
WORD wDurationID;
|
||||||
|
BYTE abyAddr1[U_ETHER_ADDR_LEN];
|
||||||
|
BYTE abyAddr2[U_ETHER_ADDR_LEN];
|
||||||
|
BYTE abyAddr3[U_ETHER_ADDR_LEN];
|
||||||
|
WORD wSeqCtl;
|
||||||
|
BYTE abyAddr4[U_ETHER_ADDR_LEN];
|
||||||
|
}__attribute__ ((__packed__))
|
||||||
|
S802_11Header, DEF* PS802_11Header;
|
||||||
|
|
||||||
|
/*--------------------- Export Macros ------------------------------*/
|
||||||
|
// Frame type macro
|
||||||
|
|
||||||
|
#define IS_MULTICAST_ADDRESS(pbyEtherAddr) \
|
||||||
|
((*(PBYTE)(pbyEtherAddr) & 0x01) == 1)
|
||||||
|
|
||||||
|
#define IS_BROADCAST_ADDRESS(pbyEtherAddr) ( \
|
||||||
|
(*(PDWORD)(pbyEtherAddr) == 0xFFFFFFFFL) && \
|
||||||
|
(*(PWORD)((PBYTE)(pbyEtherAddr) + 4) == 0xFFFF) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_NULL_ADDRESS(pbyEtherAddr) ( \
|
||||||
|
(*(PDWORD)(pbyEtherAddr) == 0L) && \
|
||||||
|
(*(PWORD)((PBYTE)(pbyEtherAddr) + 4) == 0) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_ETH_ADDRESS_EQUAL(pbyAddr1, pbyAddr2) ( \
|
||||||
|
(*(PDWORD)(pbyAddr1) == *(PDWORD)(pbyAddr2)) && \
|
||||||
|
(*(PWORD)((PBYTE)(pbyAddr1) + 4) == \
|
||||||
|
*(PWORD)((PBYTE)(pbyAddr2) + 4)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
BYTE ETHbyGetHashIndexByCrc32(PBYTE pbyMultiAddr);
|
||||||
|
//BYTE ETHbyGetHashIndexByCrc(PBYTE pbyMultiAddr);
|
||||||
|
BOOL ETHbIsBufferCrc32Ok(PBYTE pbyBuffer, UINT cbFrameLength);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __TETHER_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
284
drivers/staging/vt6656/tkip.c
Normal file
284
drivers/staging/vt6656/tkip.c
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: tkip.c
|
||||||
|
*
|
||||||
|
* Purpose: Implement functions for 802.11i TKIP
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Mar. 11, 2003
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* TKIPvMixKey - Get TKIP RC4 Key from TK,TA, and TSC
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__TMACRO_H__)
|
||||||
|
#include "tmacro.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TBIT_H__)
|
||||||
|
#include "tbit.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TKIP_H__)
|
||||||
|
#include "tkip.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
/* The Sbox is reduced to 2 16-bit wide tables, each with 256 entries. */
|
||||||
|
/* The 2nd table is the same as the 1st but with the upper and lower */
|
||||||
|
/* bytes swapped. To allow an endian tolerant implementation, the byte */
|
||||||
|
/* halves have been expressed independently here. */
|
||||||
|
const BYTE TKIP_Sbox_Lower[256] = {
|
||||||
|
0xA5,0x84,0x99,0x8D,0x0D,0xBD,0xB1,0x54,
|
||||||
|
0x50,0x03,0xA9,0x7D,0x19,0x62,0xE6,0x9A,
|
||||||
|
0x45,0x9D,0x40,0x87,0x15,0xEB,0xC9,0x0B,
|
||||||
|
0xEC,0x67,0xFD,0xEA,0xBF,0xF7,0x96,0x5B,
|
||||||
|
0xC2,0x1C,0xAE,0x6A,0x5A,0x41,0x02,0x4F,
|
||||||
|
0x5C,0xF4,0x34,0x08,0x93,0x73,0x53,0x3F,
|
||||||
|
0x0C,0x52,0x65,0x5E,0x28,0xA1,0x0F,0xB5,
|
||||||
|
0x09,0x36,0x9B,0x3D,0x26,0x69,0xCD,0x9F,
|
||||||
|
0x1B,0x9E,0x74,0x2E,0x2D,0xB2,0xEE,0xFB,
|
||||||
|
0xF6,0x4D,0x61,0xCE,0x7B,0x3E,0x71,0x97,
|
||||||
|
0xF5,0x68,0x00,0x2C,0x60,0x1F,0xC8,0xED,
|
||||||
|
0xBE,0x46,0xD9,0x4B,0xDE,0xD4,0xE8,0x4A,
|
||||||
|
0x6B,0x2A,0xE5,0x16,0xC5,0xD7,0x55,0x94,
|
||||||
|
0xCF,0x10,0x06,0x81,0xF0,0x44,0xBA,0xE3,
|
||||||
|
0xF3,0xFE,0xC0,0x8A,0xAD,0xBC,0x48,0x04,
|
||||||
|
0xDF,0xC1,0x75,0x63,0x30,0x1A,0x0E,0x6D,
|
||||||
|
0x4C,0x14,0x35,0x2F,0xE1,0xA2,0xCC,0x39,
|
||||||
|
0x57,0xF2,0x82,0x47,0xAC,0xE7,0x2B,0x95,
|
||||||
|
0xA0,0x98,0xD1,0x7F,0x66,0x7E,0xAB,0x83,
|
||||||
|
0xCA,0x29,0xD3,0x3C,0x79,0xE2,0x1D,0x76,
|
||||||
|
0x3B,0x56,0x4E,0x1E,0xDB,0x0A,0x6C,0xE4,
|
||||||
|
0x5D,0x6E,0xEF,0xA6,0xA8,0xA4,0x37,0x8B,
|
||||||
|
0x32,0x43,0x59,0xB7,0x8C,0x64,0xD2,0xE0,
|
||||||
|
0xB4,0xFA,0x07,0x25,0xAF,0x8E,0xE9,0x18,
|
||||||
|
0xD5,0x88,0x6F,0x72,0x24,0xF1,0xC7,0x51,
|
||||||
|
0x23,0x7C,0x9C,0x21,0xDD,0xDC,0x86,0x85,
|
||||||
|
0x90,0x42,0xC4,0xAA,0xD8,0x05,0x01,0x12,
|
||||||
|
0xA3,0x5F,0xF9,0xD0,0x91,0x58,0x27,0xB9,
|
||||||
|
0x38,0x13,0xB3,0x33,0xBB,0x70,0x89,0xA7,
|
||||||
|
0xB6,0x22,0x92,0x20,0x49,0xFF,0x78,0x7A,
|
||||||
|
0x8F,0xF8,0x80,0x17,0xDA,0x31,0xC6,0xB8,
|
||||||
|
0xC3,0xB0,0x77,0x11,0xCB,0xFC,0xD6,0x3A
|
||||||
|
};
|
||||||
|
|
||||||
|
const BYTE TKIP_Sbox_Upper[256] = {
|
||||||
|
0xC6,0xF8,0xEE,0xF6,0xFF,0xD6,0xDE,0x91,
|
||||||
|
0x60,0x02,0xCE,0x56,0xE7,0xB5,0x4D,0xEC,
|
||||||
|
0x8F,0x1F,0x89,0xFA,0xEF,0xB2,0x8E,0xFB,
|
||||||
|
0x41,0xB3,0x5F,0x45,0x23,0x53,0xE4,0x9B,
|
||||||
|
0x75,0xE1,0x3D,0x4C,0x6C,0x7E,0xF5,0x83,
|
||||||
|
0x68,0x51,0xD1,0xF9,0xE2,0xAB,0x62,0x2A,
|
||||||
|
0x08,0x95,0x46,0x9D,0x30,0x37,0x0A,0x2F,
|
||||||
|
0x0E,0x24,0x1B,0xDF,0xCD,0x4E,0x7F,0xEA,
|
||||||
|
0x12,0x1D,0x58,0x34,0x36,0xDC,0xB4,0x5B,
|
||||||
|
0xA4,0x76,0xB7,0x7D,0x52,0xDD,0x5E,0x13,
|
||||||
|
0xA6,0xB9,0x00,0xC1,0x40,0xE3,0x79,0xB6,
|
||||||
|
0xD4,0x8D,0x67,0x72,0x94,0x98,0xB0,0x85,
|
||||||
|
0xBB,0xC5,0x4F,0xED,0x86,0x9A,0x66,0x11,
|
||||||
|
0x8A,0xE9,0x04,0xFE,0xA0,0x78,0x25,0x4B,
|
||||||
|
0xA2,0x5D,0x80,0x05,0x3F,0x21,0x70,0xF1,
|
||||||
|
0x63,0x77,0xAF,0x42,0x20,0xE5,0xFD,0xBF,
|
||||||
|
0x81,0x18,0x26,0xC3,0xBE,0x35,0x88,0x2E,
|
||||||
|
0x93,0x55,0xFC,0x7A,0xC8,0xBA,0x32,0xE6,
|
||||||
|
0xC0,0x19,0x9E,0xA3,0x44,0x54,0x3B,0x0B,
|
||||||
|
0x8C,0xC7,0x6B,0x28,0xA7,0xBC,0x16,0xAD,
|
||||||
|
0xDB,0x64,0x74,0x14,0x92,0x0C,0x48,0xB8,
|
||||||
|
0x9F,0xBD,0x43,0xC4,0x39,0x31,0xD3,0xF2,
|
||||||
|
0xD5,0x8B,0x6E,0xDA,0x01,0xB1,0x9C,0x49,
|
||||||
|
0xD8,0xAC,0xF3,0xCF,0xCA,0xF4,0x47,0x10,
|
||||||
|
0x6F,0xF0,0x4A,0x5C,0x38,0x57,0x73,0x97,
|
||||||
|
0xCB,0xA1,0xE8,0x3E,0x96,0x61,0x0D,0x0F,
|
||||||
|
0xE0,0x7C,0x71,0xCC,0x90,0x06,0xF7,0x1C,
|
||||||
|
0xC2,0x6A,0xAE,0x69,0x17,0x99,0x3A,0x27,
|
||||||
|
0xD9,0xEB,0x2B,0x22,0xD2,0xA9,0x07,0x33,
|
||||||
|
0x2D,0x3C,0x15,0xC9,0x87,0xAA,0x50,0xA5,
|
||||||
|
0x03,0x59,0x09,0x1A,0x65,0xD7,0x84,0xD0,
|
||||||
|
0x82,0x29,0x5A,0x1E,0x7B,0xA8,0x6D,0x2C
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//STKIPKeyManagement sTKIPKeyTable[MAX_TKIP_KEY];
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
unsigned int tkip_sbox(unsigned int index);
|
||||||
|
unsigned int rotr1(unsigned int a);
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/************************************************************/
|
||||||
|
/* tkip_sbox() */
|
||||||
|
/* Returns a 16 bit value from a 64K entry table. The Table */
|
||||||
|
/* is synthesized from two 256 entry byte wide tables. */
|
||||||
|
/************************************************************/
|
||||||
|
unsigned int tkip_sbox(unsigned int index)
|
||||||
|
{
|
||||||
|
unsigned int index_low;
|
||||||
|
unsigned int index_high;
|
||||||
|
unsigned int left, right;
|
||||||
|
|
||||||
|
index_low = (index % 256);
|
||||||
|
index_high = ((index >> 8) % 256);
|
||||||
|
|
||||||
|
left = TKIP_Sbox_Lower[index_low] + (TKIP_Sbox_Upper[index_low] * 256);
|
||||||
|
right = TKIP_Sbox_Upper[index_high] + (TKIP_Sbox_Lower[index_high] * 256);
|
||||||
|
|
||||||
|
return (left ^ right);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
unsigned int rotr1(unsigned int a)
|
||||||
|
{
|
||||||
|
unsigned int b;
|
||||||
|
|
||||||
|
if ((a & 0x01) == 0x01) {
|
||||||
|
b = (a >> 1) | 0x8000;
|
||||||
|
} else {
|
||||||
|
b = (a >> 1) & 0x7fff;
|
||||||
|
}
|
||||||
|
b = b % 65536;
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: Caculate RC4Key fom TK, TA, and TSC
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pbyTKey - TKey
|
||||||
|
* pbyTA - TA
|
||||||
|
* dwTSC - TSC
|
||||||
|
* Out:
|
||||||
|
* pbyRC4Key - RC4Key
|
||||||
|
*
|
||||||
|
* Return Value: none
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
VOID TKIPvMixKey(
|
||||||
|
PBYTE pbyTKey,
|
||||||
|
PBYTE pbyTA,
|
||||||
|
WORD wTSC15_0,
|
||||||
|
DWORD dwTSC47_16,
|
||||||
|
PBYTE pbyRC4Key
|
||||||
|
)
|
||||||
|
{
|
||||||
|
unsigned int p1k[5];
|
||||||
|
// unsigned int ttak0, ttak1, ttak2, ttak3, ttak4;
|
||||||
|
unsigned int tsc0, tsc1, tsc2;
|
||||||
|
unsigned int ppk0, ppk1, ppk2, ppk3, ppk4, ppk5;
|
||||||
|
unsigned long int pnl,pnh;
|
||||||
|
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
pnl = wTSC15_0;
|
||||||
|
pnh = dwTSC47_16;
|
||||||
|
|
||||||
|
tsc0 = (unsigned int)((pnh >> 16) % 65536); /* msb */
|
||||||
|
tsc1 = (unsigned int)(pnh % 65536);
|
||||||
|
tsc2 = (unsigned int)(pnl % 65536); /* lsb */
|
||||||
|
|
||||||
|
/* Phase 1, step 1 */
|
||||||
|
p1k[0] = tsc1;
|
||||||
|
p1k[1] = tsc0;
|
||||||
|
p1k[2] = (unsigned int)(pbyTA[0] + (pbyTA[1]*256));
|
||||||
|
p1k[3] = (unsigned int)(pbyTA[2] + (pbyTA[3]*256));
|
||||||
|
p1k[4] = (unsigned int)(pbyTA[4] + (pbyTA[5]*256));
|
||||||
|
|
||||||
|
/* Phase 1, step 2 */
|
||||||
|
for (i=0; i<8; i++) {
|
||||||
|
j = 2*(i & 1);
|
||||||
|
p1k[0] = (p1k[0] + tkip_sbox( (p1k[4] ^ ((256*pbyTKey[1+j]) + pbyTKey[j])) % 65536 )) % 65536;
|
||||||
|
p1k[1] = (p1k[1] + tkip_sbox( (p1k[0] ^ ((256*pbyTKey[5+j]) + pbyTKey[4+j])) % 65536 )) % 65536;
|
||||||
|
p1k[2] = (p1k[2] + tkip_sbox( (p1k[1] ^ ((256*pbyTKey[9+j]) + pbyTKey[8+j])) % 65536 )) % 65536;
|
||||||
|
p1k[3] = (p1k[3] + tkip_sbox( (p1k[2] ^ ((256*pbyTKey[13+j]) + pbyTKey[12+j])) % 65536 )) % 65536;
|
||||||
|
p1k[4] = (p1k[4] + tkip_sbox( (p1k[3] ^ (((256*pbyTKey[1+j]) + pbyTKey[j]))) % 65536 )) % 65536;
|
||||||
|
p1k[4] = (p1k[4] + i) % 65536;
|
||||||
|
}
|
||||||
|
/* Phase 2, Step 1 */
|
||||||
|
ppk0 = p1k[0];
|
||||||
|
ppk1 = p1k[1];
|
||||||
|
ppk2 = p1k[2];
|
||||||
|
ppk3 = p1k[3];
|
||||||
|
ppk4 = p1k[4];
|
||||||
|
ppk5 = (p1k[4] + tsc2) % 65536;
|
||||||
|
|
||||||
|
/* Phase2, Step 2 */
|
||||||
|
ppk0 = ppk0 + tkip_sbox( (ppk5 ^ ((256*pbyTKey[1]) + pbyTKey[0])) % 65536);
|
||||||
|
ppk1 = ppk1 + tkip_sbox( (ppk0 ^ ((256*pbyTKey[3]) + pbyTKey[2])) % 65536);
|
||||||
|
ppk2 = ppk2 + tkip_sbox( (ppk1 ^ ((256*pbyTKey[5]) + pbyTKey[4])) % 65536);
|
||||||
|
ppk3 = ppk3 + tkip_sbox( (ppk2 ^ ((256*pbyTKey[7]) + pbyTKey[6])) % 65536);
|
||||||
|
ppk4 = ppk4 + tkip_sbox( (ppk3 ^ ((256*pbyTKey[9]) + pbyTKey[8])) % 65536);
|
||||||
|
ppk5 = ppk5 + tkip_sbox( (ppk4 ^ ((256*pbyTKey[11]) + pbyTKey[10])) % 65536);
|
||||||
|
|
||||||
|
ppk0 = ppk0 + rotr1(ppk5 ^ ((256*pbyTKey[13]) + pbyTKey[12]));
|
||||||
|
ppk1 = ppk1 + rotr1(ppk0 ^ ((256*pbyTKey[15]) + pbyTKey[14]));
|
||||||
|
ppk2 = ppk2 + rotr1(ppk1);
|
||||||
|
ppk3 = ppk3 + rotr1(ppk2);
|
||||||
|
ppk4 = ppk4 + rotr1(ppk3);
|
||||||
|
ppk5 = ppk5 + rotr1(ppk4);
|
||||||
|
|
||||||
|
/* Phase 2, Step 3 */
|
||||||
|
pbyRC4Key[0] = (tsc2 >> 8) % 256;
|
||||||
|
pbyRC4Key[1] = (((tsc2 >> 8) % 256) | 0x20) & 0x7f;
|
||||||
|
pbyRC4Key[2] = tsc2 % 256;
|
||||||
|
pbyRC4Key[3] = ((ppk5 ^ ((256*pbyTKey[1]) + pbyTKey[0])) >> 1) % 256;
|
||||||
|
|
||||||
|
pbyRC4Key[4] = ppk0 % 256;
|
||||||
|
pbyRC4Key[5] = (ppk0 >> 8) % 256;
|
||||||
|
|
||||||
|
pbyRC4Key[6] = ppk1 % 256;
|
||||||
|
pbyRC4Key[7] = (ppk1 >> 8) % 256;
|
||||||
|
|
||||||
|
pbyRC4Key[8] = ppk2 % 256;
|
||||||
|
pbyRC4Key[9] = (ppk2 >> 8) % 256;
|
||||||
|
|
||||||
|
pbyRC4Key[10] = ppk3 % 256;
|
||||||
|
pbyRC4Key[11] = (ppk3 >> 8) % 256;
|
||||||
|
|
||||||
|
pbyRC4Key[12] = ppk4 % 256;
|
||||||
|
pbyRC4Key[13] = (ppk4 >> 8) % 256;
|
||||||
|
|
||||||
|
pbyRC4Key[14] = ppk5 % 256;
|
||||||
|
pbyRC4Key[15] = (ppk5 >> 8) % 256;
|
||||||
|
}
|
76
drivers/staging/vt6656/tkip.h
Normal file
76
drivers/staging/vt6656/tkip.h
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: tkip.h
|
||||||
|
*
|
||||||
|
* Purpose: Implement functions for 802.11i TKIP
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Mar. 11, 2003
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __TKIP_H__
|
||||||
|
#define __TKIP_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__TETHER_H__)
|
||||||
|
#include "tether.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
#define TKIP_KEY_LEN 16
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Macros ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
VOID TKIPvMixKey(
|
||||||
|
PBYTE pbyTKey,
|
||||||
|
PBYTE pbyTA,
|
||||||
|
WORD wTSC15_0,
|
||||||
|
DWORD dwTSC47_16,
|
||||||
|
PBYTE pbyRC4Key
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __TKIP_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
152
drivers/staging/vt6656/tmacro.h
Normal file
152
drivers/staging/vt6656/tmacro.h
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: tmacro.h
|
||||||
|
*
|
||||||
|
* Purpose: define basic common types and macros
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 1996
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __TMACRO_H__
|
||||||
|
#define __TMACRO_H__
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****** Common helper macros ***********************************************/
|
||||||
|
|
||||||
|
#if !defined(LONIBBLE)
|
||||||
|
#define LONIBBLE(b) ((BYTE)(b) & 0x0F)
|
||||||
|
#endif
|
||||||
|
#if !defined(HINIBBLE)
|
||||||
|
#define HINIBBLE(b) ((BYTE)(((WORD)(b) >> 4) & 0x0F))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(LOBYTE)
|
||||||
|
#define LOBYTE(w) ((BYTE)(w))
|
||||||
|
#endif
|
||||||
|
#if !defined(HIBYTE)
|
||||||
|
#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(LOWORD)
|
||||||
|
#define LOWORD(d) ((WORD)(d))
|
||||||
|
#endif
|
||||||
|
#if !defined(HIWORD)
|
||||||
|
#define HIWORD(d) ((WORD)((((DWORD)(d)) >> 16) & 0xFFFF))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define LODWORD(q) ((q).u.dwLowDword)
|
||||||
|
#define HIDWORD(q) ((q).u.dwHighDword)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(MAKEBYTE)
|
||||||
|
#define MAKEBYTE(ln, hn) ((BYTE)(((BYTE)(ln) & 0x0F) | ((BYTE)(hn) << 4)))
|
||||||
|
#endif
|
||||||
|
#if !defined(MAKEWORD)
|
||||||
|
#define MAKEWORD(lb, hb) ((WORD)(((BYTE)(lb)) | (((WORD)((BYTE)(hb))) << 8)))
|
||||||
|
#endif
|
||||||
|
#if !defined(MAKEDWORD)
|
||||||
|
#define MAKEDWORD(lw, hw) ((DWORD)(((WORD)(lw)) | (((DWORD)((WORD)(hw))) << 16)))
|
||||||
|
#endif
|
||||||
|
#if !defined(MAKEQWORD)
|
||||||
|
#define MAKEQWORD(ld, hd, pq) {pq->u.dwLowDword = ld; pq->u.dwHighDword = hd;}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(MAKELONG)
|
||||||
|
#define MAKELONG(low, high) ((LONG)(((WORD)(low)) | (((DWORD)((WORD)(high))) << 16)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Bytes Reverse: big endian to little endian convert
|
||||||
|
#if !defined(REVWORD)
|
||||||
|
#define REVWORD(w) ((WORD)( ((WORD)(w) >> 8) | ((WORD)(w) << 8) ))
|
||||||
|
#endif
|
||||||
|
#if !defined(REVDWORD)
|
||||||
|
#define REVDWORD(d) (MAKEDWORD(MAKEWORD(HIBYTE(HIWORD(d)),LOBYTE(HIWORD(d))),MAKEWORD(HIBYTE(LOWORD(d)),LOBYTE(LOWORD(d)))))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* map to known network names */
|
||||||
|
/*
|
||||||
|
#define ntohs(x) REVWORD(x)
|
||||||
|
#define ntohl(x) REVDWORD(x)
|
||||||
|
#define htons(x) REVWORD(x)
|
||||||
|
#define htonl(x) REVDWORD(x)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
#ifndef NOMINMAX
|
||||||
|
#ifndef max
|
||||||
|
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
#ifndef min
|
||||||
|
#define min(a,b) (((a) < (b)) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
#endif // NOMINMAX
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****** Misc macros ********************************************************/
|
||||||
|
|
||||||
|
// get the field offset in the type(struct, class, ...)
|
||||||
|
#define OFFSET(type, field) ((int)(&((type NEAR*)1)->field)-1)
|
||||||
|
|
||||||
|
|
||||||
|
/* string equality shorthand */
|
||||||
|
#define STR_EQ(x, y) (strcmp(x, y) == 0)
|
||||||
|
#define STR_NE(x, y) (strcmp(x, y) != 0)
|
||||||
|
|
||||||
|
|
||||||
|
// calculate element # of array
|
||||||
|
#define ELEMENT_NUM(array) (sizeof(array) / sizeof(array[0]))
|
||||||
|
//#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
|
||||||
|
|
||||||
|
|
||||||
|
// null statement
|
||||||
|
#define NULL_FUNC()
|
||||||
|
|
||||||
|
|
||||||
|
/* Since not all compilers support structure assignment, the ASSIGN()
|
||||||
|
* macro is used. This controls how it's actually implemented.
|
||||||
|
*/
|
||||||
|
#ifdef NOSTRUCTASSIGN /* Version for old compilers that don't support it */
|
||||||
|
#define ASSIGN(a,b) memcpy((char *)&(a),(char *)&(b),sizeof(b);
|
||||||
|
#else /* Version for compilers that do */
|
||||||
|
#define ASSIGN(a,b) ((a) = (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __TMACRO_H__
|
||||||
|
|
||||||
|
|
119
drivers/staging/vt6656/tpci.h
Normal file
119
drivers/staging/vt6656/tpci.h
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: tpci.h
|
||||||
|
*
|
||||||
|
* Purpose: PCI routines
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 1996
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __TPCI_H__
|
||||||
|
#define __TPCI_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
#define MAX_PCI_BUS 4 // max. # of PCI bus that we support
|
||||||
|
#define MAX_PCI_DEVICE 32 // max. # of PCI devices
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Registers in the PCI configuration space
|
||||||
|
//
|
||||||
|
#define PCI_REG_VENDOR_ID 0x00 //
|
||||||
|
#define PCI_REG_DEVICE_ID 0x02 //
|
||||||
|
#define PCI_REG_COMMAND 0x04 //
|
||||||
|
#define PCI_REG_STATUS 0x06 //
|
||||||
|
#define PCI_REG_REV_ID 0x08 //
|
||||||
|
#define PCI_REG_CLASS_CODE 0x09 //
|
||||||
|
#define PCI_REG_CACHELINE_SIZE 0x0C //
|
||||||
|
#define PCI_REG_LAT_TIMER 0x0D //
|
||||||
|
#define PCI_REG_HDR_TYPE 0x0E //
|
||||||
|
#define PCI_REG_BIST 0x0F //
|
||||||
|
|
||||||
|
#define PCI_REG_BAR0 0x10 //
|
||||||
|
#define PCI_REG_BAR1 0x14 //
|
||||||
|
#define PCI_REG_BAR2 0x18 //
|
||||||
|
#define PCI_REG_CARDBUS_CIS_PTR 0x28 //
|
||||||
|
|
||||||
|
#define PCI_REG_SUB_VEN_ID 0x2C //
|
||||||
|
#define PCI_REG_SUB_SYS_ID 0x2E //
|
||||||
|
#define PCI_REG_EXP_ROM_BAR 0x30 //
|
||||||
|
#define PCI_REG_CAP 0x34 //
|
||||||
|
|
||||||
|
#define PCI_REG_INT_LINE 0x3C //
|
||||||
|
#define PCI_REG_INT_PIN 0x3D //
|
||||||
|
#define PCI_REG_MIN_GNT 0x3E //
|
||||||
|
#define PCI_REG_MAX_LAT 0x3F //
|
||||||
|
|
||||||
|
#define PCI_REG_MAX_SIZE 0x100 // maximun total PCI registers
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Bits in the COMMAND register
|
||||||
|
//
|
||||||
|
#define COMMAND_BUSM 0x04 //
|
||||||
|
#define COMMAND_WAIT 0x80 //
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Macros ------------------------------*/
|
||||||
|
|
||||||
|
// macro MAKE Bus Dev Fun ID into WORD
|
||||||
|
#define MAKE_BDF_TO_WORD(byBusId, byDevId, byFunId) \
|
||||||
|
MAKEWORD( \
|
||||||
|
((((BYTE)(byDevId)) & 0x1F) << 3) + \
|
||||||
|
(((BYTE)(byFunId)) & 0x07), \
|
||||||
|
(byBusId) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define GET_BUSID(wBusDevFunId) \
|
||||||
|
HIBYTE(wBusDevFunId)
|
||||||
|
|
||||||
|
#define GET_DEVID(wBusDevFunId) \
|
||||||
|
(LOBYTE(wBusDevFunId) >> 3)
|
||||||
|
|
||||||
|
#define GET_FUNID(wBusDevFunId) \
|
||||||
|
(LOBYTE(wBusDevFunId) & 0x07)
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __TPCI_H__
|
||||||
|
|
||||||
|
|
394
drivers/staging/vt6656/ttype.h
Normal file
394
drivers/staging/vt6656/ttype.h
Normal file
@ -0,0 +1,394 @@
|
|||||||
|
/*
|
||||||
|
* File: ttype.h
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Purpose: define basic common types and macros
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: May 21, 1996
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __TTYPE_H__
|
||||||
|
#define __TTYPE_H__
|
||||||
|
|
||||||
|
|
||||||
|
/******* Common definitions and typedefs ***********************************/
|
||||||
|
|
||||||
|
#ifndef VOID
|
||||||
|
#define VOID void
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONST
|
||||||
|
#define CONST const
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef STATIC
|
||||||
|
#define STATIC static
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef IN
|
||||||
|
#define IN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef OUT
|
||||||
|
#define OUT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//2007-0115-04<Add>by MikeLiu
|
||||||
|
#ifndef TxInSleep
|
||||||
|
#define TxInSleep
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//2007-0814-01<Add>by MikeLiu
|
||||||
|
#ifndef Safe_Close
|
||||||
|
#define Safe_Close
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//2008-0131-01<Add>by MikeLiu
|
||||||
|
#ifndef Adhoc_STA
|
||||||
|
#define Adhoc_STA
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if! defined(__CPU8051)
|
||||||
|
typedef int BOOL;
|
||||||
|
typedef int BOOLEAN;
|
||||||
|
#else // __CPU8051
|
||||||
|
#define BOOL int
|
||||||
|
#endif // __CPU8051
|
||||||
|
|
||||||
|
#if !defined(TRUE)
|
||||||
|
#define TRUE 1
|
||||||
|
#endif
|
||||||
|
#if !defined(FALSE)
|
||||||
|
#define FALSE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(SUCCESS)
|
||||||
|
#define SUCCESS 0
|
||||||
|
#endif
|
||||||
|
#if !defined(FAILED)
|
||||||
|
#define FAILED -1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//2007-0809-01<Add>by MikeLiu
|
||||||
|
#ifndef update_BssList
|
||||||
|
#define update_BssList
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WPA_SM_Transtatus
|
||||||
|
#define WPA_SM_Transtatus
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Calcu_LinkQual
|
||||||
|
#define Calcu_LinkQual
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****** Simple typedefs ***************************************************/
|
||||||
|
|
||||||
|
#if! defined(__CPU8051)
|
||||||
|
|
||||||
|
/* These lines assume that your compiler's longs are 32 bits and
|
||||||
|
* shorts are 16 bits. It is already assumed that chars are 8 bits,
|
||||||
|
* but it doesn't matter if they're signed or unsigned.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef signed char I8; /* 8-bit signed integer */
|
||||||
|
typedef signed short I16; /* 16-bit signed integer */
|
||||||
|
typedef signed long I32; /* 32-bit signed integer */
|
||||||
|
|
||||||
|
typedef unsigned char U8; /* 8-bit unsigned integer */
|
||||||
|
typedef unsigned short U16; /* 16-bit unsigned integer */
|
||||||
|
typedef unsigned long U32; /* 32-bit unsigned integer */
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__WIN32)
|
||||||
|
typedef signed __int64 I64; /* 64-bit signed integer */
|
||||||
|
typedef unsigned __int64 U64; /* 64-bit unsigned integer */
|
||||||
|
#endif // __WIN32
|
||||||
|
|
||||||
|
|
||||||
|
typedef char CHAR;
|
||||||
|
typedef signed short SHORT;
|
||||||
|
typedef signed int INT;
|
||||||
|
typedef signed long LONG;
|
||||||
|
|
||||||
|
typedef unsigned char UCHAR;
|
||||||
|
typedef unsigned short USHORT;
|
||||||
|
typedef unsigned int UINT;
|
||||||
|
typedef unsigned long ULONG;
|
||||||
|
typedef unsigned long long ULONGLONG; //64 bit
|
||||||
|
typedef unsigned long long ULONGULONG;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef unsigned char BYTE; // 8-bit
|
||||||
|
typedef unsigned short WORD; // 16-bit
|
||||||
|
typedef unsigned long DWORD; // 32-bit
|
||||||
|
|
||||||
|
// QWORD is for those situation that we want
|
||||||
|
// an 8-byte-aligned 8 byte long structure
|
||||||
|
// which is NOT really a floating point number.
|
||||||
|
typedef union tagUQuadWord {
|
||||||
|
struct {
|
||||||
|
DWORD dwLowDword;
|
||||||
|
DWORD dwHighDword;
|
||||||
|
} u;
|
||||||
|
double DoNotUseThisField;
|
||||||
|
} UQuadWord;
|
||||||
|
typedef UQuadWord QWORD; // 64-bit
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _TCHAR_DEFINED
|
||||||
|
typedef char TCHAR;
|
||||||
|
typedef char* PTCHAR;
|
||||||
|
typedef unsigned char TBYTE;
|
||||||
|
typedef unsigned char* PTBYTE;
|
||||||
|
#define _TCHAR_DEFINED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else // __CPU8051
|
||||||
|
|
||||||
|
#define U8 unsigned char
|
||||||
|
#define U16 unsigned short
|
||||||
|
#define U32 unsigned long
|
||||||
|
|
||||||
|
#define USHORT unsigned short
|
||||||
|
#define UINT unsigned int
|
||||||
|
|
||||||
|
#define BYTE unsigned char
|
||||||
|
#define WORD unsigned short
|
||||||
|
#define DWORD unsigned long
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __CPU8051
|
||||||
|
|
||||||
|
|
||||||
|
// maybe this should be defined in <limits.h>
|
||||||
|
#define U8_MAX 0xFFU
|
||||||
|
#define U16_MAX 0xFFFFU
|
||||||
|
#define U32_MAX 0xFFFFFFFFUL
|
||||||
|
|
||||||
|
#define BYTE_MAX 0xFFU
|
||||||
|
#define WORD_MAX 0xFFFFU
|
||||||
|
#define DWORD_MAX 0xFFFFFFFFUL
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/******* 32-bit vs. 16-bit definitions and typedefs ************************/
|
||||||
|
|
||||||
|
#if !defined(NULL)
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#define NULL 0
|
||||||
|
#else
|
||||||
|
#define NULL ((void *)0)
|
||||||
|
#endif // __cplusplus
|
||||||
|
#endif // !NULL
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__WIN32) || defined(__CPU8051)
|
||||||
|
|
||||||
|
#if !defined(FAR)
|
||||||
|
#define FAR
|
||||||
|
#endif
|
||||||
|
#if !defined(NEAR)
|
||||||
|
#define NEAR
|
||||||
|
#endif
|
||||||
|
#if !defined(DEF)
|
||||||
|
#define DEF
|
||||||
|
#endif
|
||||||
|
#if !defined(CALLBACK)
|
||||||
|
#define CALLBACK
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else // !__WIN32__
|
||||||
|
|
||||||
|
#if !defined(FAR)
|
||||||
|
#define FAR
|
||||||
|
#endif
|
||||||
|
#if !defined(NEAR)
|
||||||
|
#define NEAR
|
||||||
|
#endif
|
||||||
|
#if !defined(DEF)
|
||||||
|
// default pointer type is FAR, if you want near pointer just redefine it to NEAR
|
||||||
|
#define DEF
|
||||||
|
#endif
|
||||||
|
#if !defined(CALLBACK)
|
||||||
|
#define CALLBACK
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // !__WIN32__
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****** Common pointer types ***********************************************/
|
||||||
|
|
||||||
|
#if! defined(__CPU8051)
|
||||||
|
|
||||||
|
typedef signed char DEF* PI8;
|
||||||
|
typedef signed short DEF* PI16;
|
||||||
|
typedef signed long DEF* PI32;
|
||||||
|
|
||||||
|
typedef unsigned char DEF* PU8;
|
||||||
|
typedef unsigned short DEF* PU16;
|
||||||
|
typedef unsigned long DEF* PU32;
|
||||||
|
|
||||||
|
#if defined(__WIN32)
|
||||||
|
typedef signed __int64 DEF* PI64;
|
||||||
|
typedef unsigned __int64 DEF* PU64;
|
||||||
|
#endif // __WIN32
|
||||||
|
|
||||||
|
#if !defined(_WIN64)
|
||||||
|
typedef unsigned long ULONG_PTR; // 32-bit
|
||||||
|
typedef unsigned long DWORD_PTR; // 32-bit
|
||||||
|
#endif // _WIN64
|
||||||
|
|
||||||
|
|
||||||
|
// boolean pointer
|
||||||
|
typedef int DEF* PBOOL;
|
||||||
|
typedef int NEAR* NPBOOL;
|
||||||
|
typedef int FAR* LPBOOL;
|
||||||
|
|
||||||
|
typedef int DEF* PINT;
|
||||||
|
typedef int NEAR* NPINT;
|
||||||
|
typedef int FAR* LPINT;
|
||||||
|
typedef const int DEF* PCINT;
|
||||||
|
typedef const int NEAR* NPCINT;
|
||||||
|
typedef const int FAR* LPCINT;
|
||||||
|
|
||||||
|
typedef unsigned int DEF* PUINT;
|
||||||
|
typedef const unsigned int DEF* PCUINT;
|
||||||
|
|
||||||
|
typedef long DEF* PLONG;
|
||||||
|
typedef long NEAR* NPLONG;
|
||||||
|
typedef long FAR* LPLONG;
|
||||||
|
//typedef const long DEF* PCLONG;
|
||||||
|
typedef const long NEAR* NPCLONG;
|
||||||
|
typedef const long FAR* LPCLONG;
|
||||||
|
|
||||||
|
typedef BYTE DEF* PBYTE;
|
||||||
|
typedef BYTE NEAR* NPBYTE;
|
||||||
|
typedef BYTE FAR* LPBYTE;
|
||||||
|
typedef const BYTE DEF* PCBYTE;
|
||||||
|
typedef const BYTE NEAR* NPCBYTE;
|
||||||
|
typedef const BYTE FAR* LPCBYTE;
|
||||||
|
|
||||||
|
typedef WORD DEF* PWORD;
|
||||||
|
typedef WORD NEAR* NPWORD;
|
||||||
|
typedef WORD FAR* LPWORD;
|
||||||
|
typedef const WORD DEF* PCWORD;
|
||||||
|
typedef const WORD NEAR* NPCWORD;
|
||||||
|
typedef const WORD FAR* LPCWORD;
|
||||||
|
|
||||||
|
typedef DWORD DEF* PDWORD;
|
||||||
|
typedef DWORD NEAR* NPDWORD;
|
||||||
|
typedef DWORD FAR* LPDWORD;
|
||||||
|
typedef const DWORD DEF* PCDWORD;
|
||||||
|
typedef const DWORD NEAR* NPCDWORD;
|
||||||
|
typedef const DWORD FAR* LPCDWORD;
|
||||||
|
|
||||||
|
typedef QWORD DEF* PQWORD;
|
||||||
|
typedef QWORD NEAR* NPQWORD;
|
||||||
|
typedef QWORD FAR* LPQWORD;
|
||||||
|
typedef const QWORD DEF* PCQWORD;
|
||||||
|
typedef const QWORD NEAR* NPCQWORD;
|
||||||
|
typedef const QWORD FAR* LPCQWORD;
|
||||||
|
|
||||||
|
typedef void DEF* PVOID;
|
||||||
|
typedef void NEAR* NPVOID;
|
||||||
|
typedef void FAR* LPVOID;
|
||||||
|
|
||||||
|
// handle declaration
|
||||||
|
#ifdef STRICT
|
||||||
|
typedef void *HANDLE;
|
||||||
|
#else
|
||||||
|
typedef PVOID HANDLE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// ANSI (Single-byte Character) types
|
||||||
|
//
|
||||||
|
typedef char DEF* PCH;
|
||||||
|
typedef char NEAR* NPCH;
|
||||||
|
typedef char FAR* LPCH;
|
||||||
|
typedef const char DEF* PCCH;
|
||||||
|
typedef const char NEAR* NPCCH;
|
||||||
|
typedef const char FAR* LPCCH;
|
||||||
|
|
||||||
|
typedef char DEF* PSTR;
|
||||||
|
typedef char NEAR* NPSTR;
|
||||||
|
typedef char FAR* LPSTR;
|
||||||
|
typedef const char DEF* PCSTR;
|
||||||
|
typedef const char NEAR* NPCSTR;
|
||||||
|
typedef const char FAR* LPCSTR;
|
||||||
|
|
||||||
|
#endif // !__CPU8051
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****** Misc definitions, types ********************************************/
|
||||||
|
|
||||||
|
// parameter prefix
|
||||||
|
#ifndef IN
|
||||||
|
#define IN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef OUT
|
||||||
|
#define OUT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// unreferenced parameter macro to avoid warning message in MS C
|
||||||
|
#if defined(__TURBOC__)
|
||||||
|
|
||||||
|
//you should use "#pragma argsused" to avoid warning message in Borland C
|
||||||
|
#ifndef UNREFERENCED_PARAMETER
|
||||||
|
#define UNREFERENCED_PARAMETER(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef UNREFERENCED_PARAMETER
|
||||||
|
//#define UNREFERENCED_PARAMETER(x) x
|
||||||
|
#define UNREFERENCED_PARAMETER(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// in-line assembly prefix
|
||||||
|
#if defined(__TURBOC__)
|
||||||
|
#define ASM asm
|
||||||
|
#else // !__TURBOC__
|
||||||
|
#define ASM _asm
|
||||||
|
#endif // !__TURBOC__
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __TTYPE_H__
|
||||||
|
|
||||||
|
|
75
drivers/staging/vt6656/umem.h
Normal file
75
drivers/staging/vt6656/umem.h
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: umem.h
|
||||||
|
*
|
||||||
|
* Purpose: Define Memory macros
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: Mar 17, 1997
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __UMEM_H__
|
||||||
|
#define __UMEM_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
// 4-byte memory tag
|
||||||
|
#define MEM_TAG 'mTEW'
|
||||||
|
|
||||||
|
// Macros used for memory allocation and deallocation.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define ZERO_MEMORY(Destination,Length) { \
|
||||||
|
memset((PVOID)(Destination), \
|
||||||
|
0, \
|
||||||
|
(ULONG)(Length) \
|
||||||
|
); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MEMvCopy(pvDest, pvSource, uCount) { \
|
||||||
|
memcpy((PVOID)(pvDest), \
|
||||||
|
(PVOID)(pvSource), \
|
||||||
|
(ULONG)(uCount) \
|
||||||
|
); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define MEMEqualMemory(Destination,Source,Length) (!memcmp((Destination),(Source),(Length)))
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __UMEM_H__
|
||||||
|
|
||||||
|
|
171
drivers/staging/vt6656/upc.h
Normal file
171
drivers/staging/vt6656/upc.h
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: upc.h
|
||||||
|
*
|
||||||
|
* Purpose: Macros to access device
|
||||||
|
*
|
||||||
|
* Author: Tevin Chen
|
||||||
|
*
|
||||||
|
* Date: Mar 17, 1997
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __UPC_H__
|
||||||
|
#define __UPC_H__
|
||||||
|
|
||||||
|
#if !defined(DEVICE_H)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// For IO mapped
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifdef IO_MAP
|
||||||
|
|
||||||
|
#define VNSvInPortB(dwIOAddress, pbyData) { \
|
||||||
|
*(pbyData) = inb(dwIOAddress); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define VNSvInPortW(dwIOAddress, pwData) { \
|
||||||
|
*(pwData) = inw(dwIOAddress); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define VNSvInPortD(dwIOAddress, pdwData) { \
|
||||||
|
*(pdwData) = inl(dwIOAddress); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define VNSvOutPortB(dwIOAddress, byData) { \
|
||||||
|
outb(byData, dwIOAddress); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define VNSvOutPortW(dwIOAddress, wData) { \
|
||||||
|
outw(wData, dwIOAddress); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define VNSvOutPortD(dwIOAddress, dwData) { \
|
||||||
|
outl(dwData, dwIOAddress); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
//
|
||||||
|
// For memory mapped IO
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
#define VNSvInPortB(dwIOAddress, pbyData) { \
|
||||||
|
volatile BYTE* pbyAddr = ((PBYTE)(dwIOAddress)); \
|
||||||
|
*(pbyData) = readb(pbyAddr); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define VNSvInPortW(dwIOAddress, pwData) { \
|
||||||
|
volatile WORD* pwAddr = ((PWORD)(dwIOAddress)); \
|
||||||
|
*(pwData) = readw(pwAddr); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define VNSvInPortD(dwIOAddress, pdwData) { \
|
||||||
|
volatile DWORD* pdwAddr = ((PDWORD)(dwIOAddress)); \
|
||||||
|
*(pdwData) = readl(pdwAddr); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define VNSvOutPortB(dwIOAddress, byData) { \
|
||||||
|
volatile BYTE* pbyAddr = ((PBYTE)(dwIOAddress)); \
|
||||||
|
writeb((BYTE)byData, pbyAddr); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define VNSvOutPortW(dwIOAddress, wData) { \
|
||||||
|
volatile WORD* pwAddr = ((PWORD)(dwIOAddress)); \
|
||||||
|
writew((WORD)wData, pwAddr); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define VNSvOutPortD(dwIOAddress, dwData) { \
|
||||||
|
volatile DWORD* pdwAddr = ((PDWORD)(dwIOAddress)); \
|
||||||
|
writel((DWORD)dwData, pdwAddr); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// ALWAYS IO-Mapped IO when in 16-bit/32-bit environment
|
||||||
|
//
|
||||||
|
#define PCBvInPortB(dwIOAddress, pbyData) { \
|
||||||
|
*(pbyData) = inb(dwIOAddress); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PCBvInPortW(dwIOAddress, pwData) { \
|
||||||
|
*(pwData) = inw(dwIOAddress); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PCBvInPortD(dwIOAddress, pdwData) { \
|
||||||
|
*(pdwData) = inl(dwIOAddress); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PCBvOutPortB(dwIOAddress, byData) { \
|
||||||
|
outb(byData, dwIOAddress); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PCBvOutPortW(dwIOAddress, wData) { \
|
||||||
|
outw(wData, dwIOAddress); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PCBvOutPortD(dwIOAddress, dwData) { \
|
||||||
|
outl(dwData, dwIOAddress); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define PCAvDelayByIO(uDelayUnit) { \
|
||||||
|
BYTE byData; \
|
||||||
|
ULONG ii; \
|
||||||
|
\
|
||||||
|
if (uDelayUnit <= 50) { \
|
||||||
|
udelay(uDelayUnit); \
|
||||||
|
} \
|
||||||
|
else { \
|
||||||
|
for (ii = 0; ii < (uDelayUnit); ii++) \
|
||||||
|
byData = inb(0x61); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __UPC_H__
|
||||||
|
|
989
drivers/staging/vt6656/usbpipe.c
Normal file
989
drivers/staging/vt6656/usbpipe.c
Normal file
@ -0,0 +1,989 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: usbpipe.c
|
||||||
|
*
|
||||||
|
* Purpose: Handle USB control endpoint
|
||||||
|
*
|
||||||
|
* Author: Warren Hsu
|
||||||
|
*
|
||||||
|
* Date: Mar. 29, 2005
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* CONTROLnsRequestOut - Write variable length bytes to MEM/BB/MAC/EEPROM
|
||||||
|
* CONTROLnsRequestIn - Read variable length bytes from MEM/BB/MAC/EEPROM
|
||||||
|
* ControlvWriteByte - Write one byte to MEM/BB/MAC/EEPROM
|
||||||
|
* ControlvReadByte - Read one byte from MEM/BB/MAC/EEPROM
|
||||||
|
* ControlvMaskByte - Read one byte from MEM/BB/MAC/EEPROM and clear/set some bits in the same address
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
* 04-05-2004 Jerry Chen: Initial release
|
||||||
|
* 11-24-2004 Warren Hsu: Add ControlvWriteByte,ControlvReadByte,ControlvMaskByte
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__INT_H__)
|
||||||
|
#include "int.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__RXTX_H__)
|
||||||
|
#include "rxtx.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DPC_H__)
|
||||||
|
#include "dpc.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CONTROL_H__)
|
||||||
|
#include "control.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DESC_H__)
|
||||||
|
#include "desc.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
//endpoint def
|
||||||
|
//endpoint 0: control
|
||||||
|
//endpoint 1: interrupt
|
||||||
|
//endpoint 2: read bulk
|
||||||
|
//endpoint 3: write bulk
|
||||||
|
|
||||||
|
//RequestType:
|
||||||
|
//#define REQUEST_OUT (USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE) // 0x40
|
||||||
|
//#define REQUEST_IN (USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE ) //0xc0
|
||||||
|
//static int msglevel =MSG_LEVEL_DEBUG;
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
|
||||||
|
|
||||||
|
#define USB_CTL_WAIT 500 //ms
|
||||||
|
|
||||||
|
#ifndef URB_ASYNC_UNLINK
|
||||||
|
#define URB_ASYNC_UNLINK 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
//2007-0508-02<Add>by MikeLiu
|
||||||
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))&&(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsInterruptUsbIoCompleteRead(
|
||||||
|
IN struct urb *urb,
|
||||||
|
IN struct pt_regs *regs
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsBulkInUsbIoCompleteRead(
|
||||||
|
IN struct urb *urb,
|
||||||
|
IN struct pt_regs *regs
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsBulkOutIoCompleteWrite(
|
||||||
|
IN struct urb *urb,
|
||||||
|
IN struct pt_regs *regs
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsControlInUsbIoCompleteRead(
|
||||||
|
IN struct urb *urb,
|
||||||
|
IN struct pt_regs *regs
|
||||||
|
);
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsControlInUsbIoCompleteWrite(
|
||||||
|
IN struct urb *urb,
|
||||||
|
IN struct pt_regs *regs
|
||||||
|
);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsInterruptUsbIoCompleteRead(
|
||||||
|
IN struct urb *urb
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsBulkInUsbIoCompleteRead(
|
||||||
|
IN struct urb *urb
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsBulkOutIoCompleteWrite(
|
||||||
|
IN struct urb *urb
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsControlInUsbIoCompleteRead(
|
||||||
|
IN struct urb *urb
|
||||||
|
);
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsControlInUsbIoCompleteWrite(
|
||||||
|
IN struct urb *urb
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
PIPEnsControlOutAsyn(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byRequest,
|
||||||
|
IN WORD wValue,
|
||||||
|
IN WORD wIndex,
|
||||||
|
IN WORD wLength,
|
||||||
|
IN PBYTE pbyBuffer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
NTSTATUS ntStatus;
|
||||||
|
|
||||||
|
|
||||||
|
if (MP_TEST_FLAG(pDevice, fMP_DISCONNECTED))
|
||||||
|
return STATUS_FAILURE;
|
||||||
|
|
||||||
|
|
||||||
|
if (MP_TEST_FLAG(pDevice, fMP_CONTROL_WRITES)) {
|
||||||
|
return STATUS_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_interrupt()) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"in_interrupt return ..byRequest %x\n", byRequest);
|
||||||
|
return STATUS_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ntStatus = usb_control_msg(
|
||||||
|
pDevice->usb,
|
||||||
|
usb_sndctrlpipe(pDevice->usb , 0),
|
||||||
|
byRequest,
|
||||||
|
0x40, // RequestType
|
||||||
|
wValue,
|
||||||
|
wIndex,
|
||||||
|
(PVOID) pbyBuffer,
|
||||||
|
wLength,
|
||||||
|
HZ
|
||||||
|
);
|
||||||
|
if (ntStatus >= 0) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"usb_sndctrlpipe ntStatus= %d\n", ntStatus);
|
||||||
|
ntStatus = 0;
|
||||||
|
} else {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"usb_sndctrlpipe fail, ntStatus= %d\n", ntStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ntStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
PIPEnsControlOut(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byRequest,
|
||||||
|
IN WORD wValue,
|
||||||
|
IN WORD wIndex,
|
||||||
|
IN WORD wLength,
|
||||||
|
IN PBYTE pbyBuffer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
NTSTATUS ntStatus = 0;
|
||||||
|
int ii;
|
||||||
|
|
||||||
|
|
||||||
|
if (MP_TEST_FLAG(pDevice, fMP_DISCONNECTED))
|
||||||
|
return STATUS_FAILURE;
|
||||||
|
|
||||||
|
if (MP_TEST_FLAG(pDevice, fMP_CONTROL_WRITES)) {
|
||||||
|
return STATUS_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
pDevice->sUsbCtlRequest.bRequestType = 0x40;
|
||||||
|
pDevice->sUsbCtlRequest.bRequest = byRequest;
|
||||||
|
pDevice->sUsbCtlRequest.wValue = cpu_to_le16p(&wValue);
|
||||||
|
pDevice->sUsbCtlRequest.wIndex = cpu_to_le16p(&wIndex);
|
||||||
|
pDevice->sUsbCtlRequest.wLength = cpu_to_le16p(&wLength);
|
||||||
|
pDevice->pControlURB->transfer_flags |= URB_ASYNC_UNLINK;
|
||||||
|
pDevice->pControlURB->actual_length = 0;
|
||||||
|
// Notice, pbyBuffer limited point to variable buffer, can't be constant.
|
||||||
|
usb_fill_control_urb(pDevice->pControlURB, pDevice->usb,
|
||||||
|
usb_sndctrlpipe(pDevice->usb , 0), (char *) &pDevice->sUsbCtlRequest,
|
||||||
|
pbyBuffer, wLength, s_nsControlInUsbIoCompleteWrite, pDevice);
|
||||||
|
|
||||||
|
if ((ntStatus = vntwusb_submit_urb(pDevice->pControlURB) != 0)) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"control send request submission failed: %d\n", ntStatus);
|
||||||
|
return STATUS_FAILURE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
MP_SET_FLAG(pDevice, fMP_CONTROL_WRITES);
|
||||||
|
}
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
for (ii = 0; ii <= USB_CTL_WAIT; ii ++) {
|
||||||
|
if (MP_TEST_FLAG(pDevice, fMP_CONTROL_WRITES))
|
||||||
|
mdelay(1);
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
if (ii >= USB_CTL_WAIT) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"control send request submission timeout \n");
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
MP_CLEAR_FLAG(pDevice, fMP_CONTROL_WRITES);
|
||||||
|
return STATUS_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
PIPEnsControlIn(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byRequest,
|
||||||
|
IN WORD wValue,
|
||||||
|
IN WORD wIndex,
|
||||||
|
IN WORD wLength,
|
||||||
|
IN OUT PBYTE pbyBuffer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
NTSTATUS ntStatus = 0;
|
||||||
|
int ii;
|
||||||
|
|
||||||
|
if (MP_TEST_FLAG(pDevice, fMP_DISCONNECTED))
|
||||||
|
return STATUS_FAILURE;
|
||||||
|
|
||||||
|
if (MP_TEST_FLAG(pDevice, fMP_CONTROL_READS)) {
|
||||||
|
return STATUS_FAILURE;
|
||||||
|
}
|
||||||
|
pDevice->sUsbCtlRequest.bRequestType = 0xC0;
|
||||||
|
pDevice->sUsbCtlRequest.bRequest = byRequest;
|
||||||
|
pDevice->sUsbCtlRequest.wValue = cpu_to_le16p(&wValue);
|
||||||
|
pDevice->sUsbCtlRequest.wIndex = cpu_to_le16p(&wIndex);
|
||||||
|
pDevice->sUsbCtlRequest.wLength = cpu_to_le16p(&wLength);
|
||||||
|
pDevice->pControlURB->transfer_flags |= URB_ASYNC_UNLINK;
|
||||||
|
pDevice->pControlURB->actual_length = 0;
|
||||||
|
usb_fill_control_urb(pDevice->pControlURB, pDevice->usb,
|
||||||
|
usb_rcvctrlpipe(pDevice->usb , 0), (char *) &pDevice->sUsbCtlRequest,
|
||||||
|
pbyBuffer, wLength, s_nsControlInUsbIoCompleteRead, pDevice);
|
||||||
|
|
||||||
|
if ((ntStatus = vntwusb_submit_urb(pDevice->pControlURB) != 0)) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"control request submission failed: %d\n", ntStatus);
|
||||||
|
}else {
|
||||||
|
MP_SET_FLAG(pDevice, fMP_CONTROL_READS);
|
||||||
|
}
|
||||||
|
|
||||||
|
spin_unlock_irq(&pDevice->lock);
|
||||||
|
for (ii = 0; ii <= USB_CTL_WAIT; ii ++) {
|
||||||
|
if (MP_TEST_FLAG(pDevice, fMP_CONTROL_READS))
|
||||||
|
mdelay(1);
|
||||||
|
else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (ii >= USB_CTL_WAIT) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"control rcv request submission timeout \n");
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
MP_CLEAR_FLAG(pDevice, fMP_CONTROL_READS);
|
||||||
|
return STATUS_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
spin_lock_irq(&pDevice->lock);
|
||||||
|
|
||||||
|
return ntStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
//2007-0508-03<Add>by MikeLiu
|
||||||
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))&&(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsControlInUsbIoCompleteWrite(
|
||||||
|
IN struct urb *urb,
|
||||||
|
IN struct pt_regs *regs
|
||||||
|
)
|
||||||
|
#else
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsControlInUsbIoCompleteWrite(
|
||||||
|
IN struct urb *urb
|
||||||
|
)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
PSDevice pDevice;
|
||||||
|
|
||||||
|
pDevice = urb->context;
|
||||||
|
switch (urb->status) {
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case -EINPROGRESS:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ctrl write urb status EINPROGRESS%d\n", urb->status);
|
||||||
|
break;
|
||||||
|
case -ENOENT:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ctrl write urb status ENOENT %d\n", urb->status);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ctrl write urb status %d\n", urb->status);
|
||||||
|
}
|
||||||
|
|
||||||
|
MP_CLEAR_FLAG(pDevice, fMP_CONTROL_WRITES);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Complete function of usb Control callback
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice - Pointer to the adapter
|
||||||
|
*
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: STATUS_INSUFFICIENT_RESOURCES or result of IoCallDriver
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
//2007-0508-04<Add>by MikeLiu
|
||||||
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))&&(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsControlInUsbIoCompleteRead(
|
||||||
|
IN struct urb *urb,
|
||||||
|
IN struct pt_regs *regs
|
||||||
|
)
|
||||||
|
#else
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsControlInUsbIoCompleteRead(
|
||||||
|
IN struct urb *urb
|
||||||
|
)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
PSDevice pDevice;
|
||||||
|
|
||||||
|
pDevice = urb->context;
|
||||||
|
switch (urb->status) {
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case -EINPROGRESS:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ctrl read urb status EINPROGRESS%d\n", urb->status);
|
||||||
|
break;
|
||||||
|
case -ENOENT:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ctrl read urb status = ENOENT %d\n", urb->status);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ctrl read urb status %d\n", urb->status);
|
||||||
|
}
|
||||||
|
|
||||||
|
MP_CLEAR_FLAG(pDevice, fMP_CONTROL_READS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Allocates an usb interrupt in irp and calls USBD.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice - Pointer to the adapter
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: STATUS_INSUFFICIENT_RESOURCES or result of IoCallDriver
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NTSTATUS
|
||||||
|
PIPEnsInterruptRead(
|
||||||
|
IN PSDevice pDevice
|
||||||
|
)
|
||||||
|
{
|
||||||
|
NTSTATUS ntStatus = STATUS_FAILURE;
|
||||||
|
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsStartInterruptUsbRead()\n");
|
||||||
|
|
||||||
|
if(pDevice->intBuf.bInUse == TRUE){
|
||||||
|
return (STATUS_FAILURE);
|
||||||
|
}
|
||||||
|
pDevice->intBuf.bInUse = TRUE;
|
||||||
|
// pDevice->bEventAvailable = FALSE;
|
||||||
|
pDevice->ulIntInPosted++;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Now that we have created the urb, we will send a
|
||||||
|
// request to the USB device object.
|
||||||
|
//
|
||||||
|
#if 0 //reserve int URB submit
|
||||||
|
usb_fill_int_urb(pDevice->pInterruptURB,
|
||||||
|
pDevice->usb,
|
||||||
|
usb_rcvintpipe(pDevice->usb, 1),
|
||||||
|
(PVOID) pDevice->intBuf.pDataBuf,
|
||||||
|
MAX_INTERRUPT_SIZE,
|
||||||
|
s_nsInterruptUsbIoCompleteRead,
|
||||||
|
pDevice,
|
||||||
|
pDevice->int_interval
|
||||||
|
);
|
||||||
|
#else //replace int URB submit by bulk transfer
|
||||||
|
#ifndef Safe_Close
|
||||||
|
usb_fill_int_urb(pDevice->pInterruptURB,
|
||||||
|
pDevice->usb,
|
||||||
|
usb_rcvintpipe(pDevice->usb, 1),
|
||||||
|
(PVOID) pDevice->intBuf.pDataBuf,
|
||||||
|
MAX_INTERRUPT_SIZE,
|
||||||
|
s_nsInterruptUsbIoCompleteRead,
|
||||||
|
pDevice,
|
||||||
|
pDevice->int_interval
|
||||||
|
);
|
||||||
|
#else
|
||||||
|
|
||||||
|
//2008-0526-01<Add>by MikeLiu
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
|
||||||
|
pDevice->pInterruptURB->interval = pDevice->int_interval;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
usb_fill_bulk_urb(pDevice->pInterruptURB,
|
||||||
|
pDevice->usb,
|
||||||
|
usb_rcvbulkpipe(pDevice->usb, 1),
|
||||||
|
(PVOID) pDevice->intBuf.pDataBuf,
|
||||||
|
MAX_INTERRUPT_SIZE,
|
||||||
|
s_nsInterruptUsbIoCompleteRead,
|
||||||
|
pDevice);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
|
||||||
|
if ((ntStatus = vntwusb_submit_urb(pDevice->pInterruptURB)) != 0) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit int URB failed %d\n", ntStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
if (pDevice->bEventAvailable == FALSE) {
|
||||||
|
if ((ntStatus = vntwusb_submit_urb(pDevice->pInterruptURB)) != 0) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit int URB failed %d\n", ntStatus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"<----s_nsStartInterruptUsbRead Return(%x)\n",ntStatus);
|
||||||
|
return ntStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Complete function of usb interrupt in irp.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice - Pointer to the adapter
|
||||||
|
*
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: STATUS_INSUFFICIENT_RESOURCES or result of IoCallDriver
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//2007-0508-05<Add>by MikeLiu
|
||||||
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))&&(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsInterruptUsbIoCompleteRead(
|
||||||
|
IN struct urb *urb,
|
||||||
|
IN struct pt_regs *regs
|
||||||
|
)
|
||||||
|
#else
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsInterruptUsbIoCompleteRead(
|
||||||
|
IN struct urb *urb
|
||||||
|
)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
PSDevice pDevice;
|
||||||
|
NTSTATUS ntStatus;
|
||||||
|
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsInterruptUsbIoCompleteRead\n");
|
||||||
|
//
|
||||||
|
// The context given to IoSetCompletionRoutine is the receive buffer object
|
||||||
|
//
|
||||||
|
pDevice = (PSDevice)urb->context;
|
||||||
|
|
||||||
|
//
|
||||||
|
// We have a number of cases:
|
||||||
|
// 1) The USB read timed out and we received no data.
|
||||||
|
// 2) The USB read timed out and we received some data.
|
||||||
|
// 3) The USB read was successful and fully filled our irp buffer.
|
||||||
|
// 4) The irp was cancelled.
|
||||||
|
// 5) Some other failure from the USB device object.
|
||||||
|
//
|
||||||
|
ntStatus = urb->status;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"s_nsInterruptUsbIoCompleteRead Status %d\n", ntStatus);
|
||||||
|
|
||||||
|
// if we were not successful, we need to free the int buffer for future use right here
|
||||||
|
// otherwise interrupt data handler will free int buffer after it handle it.
|
||||||
|
if (( ntStatus != STATUS_SUCCESS )) {
|
||||||
|
pDevice->ulBulkInError++;
|
||||||
|
pDevice->intBuf.bInUse = FALSE;
|
||||||
|
|
||||||
|
// if (ntStatus == USBD_STATUS_CRC) {
|
||||||
|
// pDevice->ulIntInContCRCError++;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (ntStatus == STATUS_NOT_CONNECTED )
|
||||||
|
// {
|
||||||
|
pDevice->fKillEventPollingThread = TRUE;
|
||||||
|
// }
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"IntUSBIoCompleteControl STATUS = %d\n", ntStatus );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pDevice->ulIntInBytesRead += (ULONG)urb->actual_length;
|
||||||
|
pDevice->ulIntInContCRCError = 0;
|
||||||
|
pDevice->bEventAvailable = TRUE;
|
||||||
|
INTnsProcessData(pDevice);
|
||||||
|
}
|
||||||
|
|
||||||
|
STAvUpdateUSBCounter(&pDevice->scStatistic.USB_InterruptStat, ntStatus);
|
||||||
|
|
||||||
|
|
||||||
|
if (pDevice->fKillEventPollingThread != TRUE) {
|
||||||
|
#if 0 //reserve int URB submit
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
|
||||||
|
if ((ntStatus = vntwusb_submit_urb(urb)) != 0) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Re-Submit int URB failed %d\n", ntStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
if (pDevice->bEventAvailable == FALSE) {
|
||||||
|
if ((ntStatus = vntwusb_submit_urb(urb)) != 0) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Re-Submit int URB failed %d\n", ntStatus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#else //replace int URB submit by bulk transfer
|
||||||
|
#ifdef Safe_Close
|
||||||
|
usb_fill_bulk_urb(pDevice->pInterruptURB,
|
||||||
|
pDevice->usb,
|
||||||
|
usb_rcvbulkpipe(pDevice->usb, 1),
|
||||||
|
(PVOID) pDevice->intBuf.pDataBuf,
|
||||||
|
MAX_INTERRUPT_SIZE,
|
||||||
|
s_nsInterruptUsbIoCompleteRead,
|
||||||
|
pDevice);
|
||||||
|
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
|
||||||
|
if ((ntStatus = vntwusb_submit_urb(pDevice->pInterruptURB)) != 0) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit int URB failed %d\n", ntStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
if (pDevice->bEventAvailable == FALSE) {
|
||||||
|
if ((ntStatus = vntwusb_submit_urb(pDevice->pInterruptURB)) != 0) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit int URB failed %d\n", ntStatus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
tasklet_schedule(&pDevice->EventWorkItem);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// We return STATUS_MORE_PROCESSING_REQUIRED so that the completion
|
||||||
|
// routine (IofCompleteRequest) will stop working on the irp.
|
||||||
|
//
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Allocates an usb BulkIn irp and calls USBD.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice - Pointer to the adapter
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: STATUS_INSUFFICIENT_RESOURCES or result of IoCallDriver
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NTSTATUS
|
||||||
|
PIPEnsBulkInUsbRead(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN PRCB pRCB
|
||||||
|
)
|
||||||
|
{
|
||||||
|
NTSTATUS ntStatus= 0;
|
||||||
|
struct urb *pUrb;
|
||||||
|
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsStartBulkInUsbRead\n");
|
||||||
|
|
||||||
|
if (MP_TEST_FLAG(pDevice, fMP_DISCONNECTED))
|
||||||
|
return STATUS_FAILURE;
|
||||||
|
|
||||||
|
pDevice->ulBulkInPosted++;
|
||||||
|
|
||||||
|
|
||||||
|
pUrb = pRCB->pUrb;
|
||||||
|
//
|
||||||
|
// Now that we have created the urb, we will send a
|
||||||
|
// request to the USB device object.
|
||||||
|
//
|
||||||
|
if (pRCB->skb == NULL) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pRCB->skb is null \n");
|
||||||
|
return ntStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
usb_fill_bulk_urb(pUrb,
|
||||||
|
pDevice->usb,
|
||||||
|
usb_rcvbulkpipe(pDevice->usb, 2),
|
||||||
|
(PVOID) (pRCB->skb->data),
|
||||||
|
MAX_TOTAL_SIZE_WITH_ALL_HEADERS,
|
||||||
|
s_nsBulkInUsbIoCompleteRead,
|
||||||
|
pRCB);
|
||||||
|
|
||||||
|
if((ntStatus = vntwusb_submit_urb(pUrb)!=0)){
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit Rx URB failed %d\n", ntStatus);
|
||||||
|
return STATUS_FAILURE ;
|
||||||
|
}
|
||||||
|
pRCB->Ref = 1;
|
||||||
|
pRCB->bBoolInUse= TRUE;
|
||||||
|
|
||||||
|
return ntStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Complete function of usb BulkIn irp.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice - Pointer to the adapter
|
||||||
|
*
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: STATUS_INSUFFICIENT_RESOURCES or result of IoCallDriver
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//2007-0508-06<Add>by MikeLiu
|
||||||
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))&&(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsBulkInUsbIoCompleteRead(
|
||||||
|
IN struct urb *urb,
|
||||||
|
IN struct pt_regs *regs
|
||||||
|
)
|
||||||
|
#else
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsBulkInUsbIoCompleteRead(
|
||||||
|
IN struct urb *urb
|
||||||
|
)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
PRCB pRCB = (PRCB)urb->context;
|
||||||
|
PSDevice pDevice = (PSDevice)pRCB->pDevice;
|
||||||
|
ULONG bytesRead;
|
||||||
|
BOOLEAN bIndicateReceive = FALSE;
|
||||||
|
BOOL bReAllocSkb = FALSE;
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsBulkInUsbIoCompleteRead\n");
|
||||||
|
status = urb->status;
|
||||||
|
bytesRead = urb->actual_length;
|
||||||
|
|
||||||
|
if (status) {
|
||||||
|
pDevice->ulBulkInError++;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"BULK In failed %d\n", status);
|
||||||
|
|
||||||
|
#ifdef Calcu_LinkQual
|
||||||
|
pDevice->scStatistic.RxFcsErrCnt ++;
|
||||||
|
#endif
|
||||||
|
//todo...xxxxxx
|
||||||
|
// if (status == USBD_STATUS_CRC) {
|
||||||
|
// pDevice->ulBulkInContCRCError++;
|
||||||
|
// }
|
||||||
|
// if (status == STATUS_DEVICE_NOT_CONNECTED )
|
||||||
|
// {
|
||||||
|
// MP_SET_FLAG(pDevice, fMP_DISCONNECTED);
|
||||||
|
// }
|
||||||
|
} else {
|
||||||
|
bIndicateReceive = TRUE;
|
||||||
|
pDevice->ulBulkInContCRCError = 0;
|
||||||
|
pDevice->ulBulkInBytesRead += bytesRead;
|
||||||
|
|
||||||
|
#ifdef Calcu_LinkQual
|
||||||
|
pDevice->scStatistic.RxOkCnt ++;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
STAvUpdateUSBCounter(&pDevice->scStatistic.USB_BulkInStat, status);
|
||||||
|
|
||||||
|
if (bIndicateReceive) {
|
||||||
|
spin_lock(&pDevice->lock);
|
||||||
|
if (RXbBulkInProcessData(pDevice, pRCB, bytesRead) == TRUE)
|
||||||
|
bReAllocSkb = TRUE;
|
||||||
|
spin_unlock(&pDevice->lock);
|
||||||
|
}
|
||||||
|
pRCB->Ref--;
|
||||||
|
if (pRCB->Ref == 0)
|
||||||
|
{
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RxvFreeNormal %d \n",pDevice->NumRecvFreeList);
|
||||||
|
spin_lock(&pDevice->lock);
|
||||||
|
RXvFreeRCB(pRCB, bReAllocSkb);
|
||||||
|
spin_unlock(&pDevice->lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Allocates an usb BulkOut irp and calls USBD.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice - Pointer to the adapter
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: STATUS_INSUFFICIENT_RESOURCES or result of IoCallDriver
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
NDIS_STATUS
|
||||||
|
PIPEnsSendBulkOut(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN PUSB_SEND_CONTEXT pContext
|
||||||
|
)
|
||||||
|
{
|
||||||
|
NTSTATUS status;
|
||||||
|
struct urb *pUrb;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pDevice->bPWBitOn = FALSE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (pDevice->pPendingBulkOutContext != NULL) {
|
||||||
|
pDevice->NumContextsQueued++;
|
||||||
|
EnqueueContext(pDevice->FirstTxContextQueue, pDevice->LastTxContextQueue, pContext);
|
||||||
|
status = STATUS_PENDING;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Send pending!\n");
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"s_nsSendBulkOut\n");
|
||||||
|
|
||||||
|
if(MP_IS_READY(pDevice) && MP_TEST_FLAG(pDevice, fMP_POST_WRITES)) {
|
||||||
|
|
||||||
|
pUrb = pContext->pUrb;
|
||||||
|
pDevice->ulBulkOutPosted++;
|
||||||
|
// pDevice->pPendingBulkOutContext = pContext;
|
||||||
|
usb_fill_bulk_urb(
|
||||||
|
pUrb,
|
||||||
|
pDevice->usb,
|
||||||
|
usb_sndbulkpipe(pDevice->usb, 3),
|
||||||
|
(PVOID) &(pContext->Data[0]),
|
||||||
|
pContext->uBufLen,
|
||||||
|
s_nsBulkOutIoCompleteWrite,
|
||||||
|
pContext);
|
||||||
|
|
||||||
|
if((status = vntwusb_submit_urb(pUrb))!=0)
|
||||||
|
{
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit Tx URB failed %d\n", status);
|
||||||
|
return STATUS_FAILURE;
|
||||||
|
}
|
||||||
|
return STATUS_PENDING;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pContext->bBoolInUse = FALSE;
|
||||||
|
return STATUS_RESOURCES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description: s_nsBulkOutIoCompleteWrite
|
||||||
|
* 1a) Indicate to the protocol the status of the write.
|
||||||
|
* 1b) Return ownership of the packet to the protocol.
|
||||||
|
*
|
||||||
|
* 2) If any more packets are queue for sending, send another packet
|
||||||
|
* to USBD.
|
||||||
|
* If the attempt to send the packet to the driver fails,
|
||||||
|
* return ownership of the packet to the protocol and
|
||||||
|
* try another packet (until one succeeds).
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pdoUsbDevObj - pointer to the USB device object which
|
||||||
|
* completed the irp
|
||||||
|
* pIrp - the irp which was completed by the
|
||||||
|
* device object
|
||||||
|
* pContext - the context given to IoSetCompletionRoutine
|
||||||
|
* before calling IoCallDriver on the irp
|
||||||
|
* The pContext is a pointer to the USB device object.
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: STATUS_MORE_PROCESSING_REQUIRED - allows the completion routine
|
||||||
|
* (IofCompleteRequest) to stop working on the irp.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//2007-0508-07<Add>by MikeLiu
|
||||||
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))&&(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsBulkOutIoCompleteWrite(
|
||||||
|
IN struct urb *urb,
|
||||||
|
IN struct pt_regs *regs
|
||||||
|
)
|
||||||
|
#else
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID
|
||||||
|
s_nsBulkOutIoCompleteWrite(
|
||||||
|
IN struct urb *urb
|
||||||
|
)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
PSDevice pDevice;
|
||||||
|
NTSTATUS status;
|
||||||
|
CONTEXT_TYPE ContextType;
|
||||||
|
ULONG ulBufLen;
|
||||||
|
PUSB_SEND_CONTEXT pContext;
|
||||||
|
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsBulkOutIoCompleteWrite\n");
|
||||||
|
//
|
||||||
|
// The context given to IoSetCompletionRoutine is an USB_CONTEXT struct
|
||||||
|
//
|
||||||
|
pContext = (PUSB_SEND_CONTEXT) urb->context;
|
||||||
|
ASSERT( NULL != pContext );
|
||||||
|
|
||||||
|
pDevice = pContext->pDevice;
|
||||||
|
ContextType = pContext->Type;
|
||||||
|
ulBufLen = pContext->uBufLen;
|
||||||
|
|
||||||
|
if (!netif_device_present(pDevice->dev))
|
||||||
|
return;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Perform various IRP, URB, and buffer 'sanity checks'
|
||||||
|
//
|
||||||
|
|
||||||
|
status = urb->status;
|
||||||
|
//we should have failed, succeeded, or cancelled, but NOT be pending
|
||||||
|
STAvUpdateUSBCounter(&pDevice->scStatistic.USB_BulkOutStat, status);
|
||||||
|
|
||||||
|
if(status == STATUS_SUCCESS) {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Write %d bytes\n",(int)ulBufLen);
|
||||||
|
pDevice->ulBulkOutBytesWrite += ulBufLen;
|
||||||
|
pDevice->ulBulkOutContCRCError = 0;
|
||||||
|
//2007-0115-06<Add>by MikeLiu
|
||||||
|
#ifdef TxInSleep
|
||||||
|
pDevice->nTxDataTimeCout = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} else {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"BULK Out failed %d\n", status);
|
||||||
|
pDevice->ulBulkOutError++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// pDevice->ulCheckForHangCount = 0;
|
||||||
|
// pDevice->pPendingBulkOutContext = NULL;
|
||||||
|
|
||||||
|
if ( CONTEXT_DATA_PACKET == ContextType ) {
|
||||||
|
// Indicate to the protocol the status of the sent packet and return
|
||||||
|
// ownership of the packet.
|
||||||
|
if (pContext->pPacket != NULL) {
|
||||||
|
dev_kfree_skb_irq(pContext->pPacket);
|
||||||
|
pContext->pPacket = NULL;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"tx %d bytes\n",(int)ulBufLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
pDevice->dev->trans_start = jiffies;
|
||||||
|
|
||||||
|
|
||||||
|
if (status == STATUS_SUCCESS) {
|
||||||
|
pDevice->packetsSent++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Send USB error! [%08xh]\n", status);
|
||||||
|
pDevice->packetsSentDropped++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (pDevice->bLinkPass == TRUE) {
|
||||||
|
if (netif_queue_stopped(pDevice->dev))
|
||||||
|
netif_wake_queue(pDevice->dev);
|
||||||
|
}
|
||||||
|
pContext->bBoolInUse = FALSE;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
116
drivers/staging/vt6656/usbpipe.h
Normal file
116
drivers/staging/vt6656/usbpipe.h
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: usbpipe.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Warren Hsu
|
||||||
|
*
|
||||||
|
* Date: Mar. 30, 2005
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __USBPIPE_H__
|
||||||
|
#define __USBPIPE_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
PIPEnsControlOut(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byRequest,
|
||||||
|
IN WORD wValue,
|
||||||
|
IN WORD wIndex,
|
||||||
|
IN WORD wLength,
|
||||||
|
IN PBYTE pbyBuffer
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
PIPEnsControlOutAsyn(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byRequest,
|
||||||
|
IN WORD wValue,
|
||||||
|
IN WORD wIndex,
|
||||||
|
IN WORD wLength,
|
||||||
|
IN PBYTE pbyBuffer
|
||||||
|
);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
PIPEnsControlIn(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN BYTE byRequest,
|
||||||
|
IN WORD wValue,
|
||||||
|
IN WORD wIndex,
|
||||||
|
IN WORD wLength,
|
||||||
|
IN OUT PBYTE pbyBuffer
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
PIPEnsInterruptRead(
|
||||||
|
IN PSDevice pDevice
|
||||||
|
);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
PIPEnsBulkInUsbRead(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN PRCB pRCB
|
||||||
|
);
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
PIPEnsSendBulkOut(
|
||||||
|
IN PSDevice pDevice,
|
||||||
|
IN PUSB_SEND_CONTEXT pContext
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __USBPIPE_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
6
drivers/staging/vt6656/vntconfiguration.dat
Normal file
6
drivers/staging/vt6656/vntconfiguration.dat
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#VNT Configuration
|
||||||
|
[start]
|
||||||
|
ZONETYPE=EUROPE
|
||||||
|
AUTHENMODE=12
|
||||||
|
ENCRYPTIONMODE=34
|
||||||
|
[end]
|
1402
drivers/staging/vt6656/wcmd.c
Normal file
1402
drivers/staging/vt6656/wcmd.c
Normal file
File diff suppressed because it is too large
Load Diff
156
drivers/staging/vt6656/wcmd.h
Normal file
156
drivers/staging/vt6656/wcmd.h
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: wcmd.h
|
||||||
|
*
|
||||||
|
* Purpose: Handles the management command interface functions
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: May 8, 2002
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __WCMD_H__
|
||||||
|
#define __WCMD_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211HDR_H__)
|
||||||
|
#include "80211hdr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211MGR_H__)
|
||||||
|
#include "80211mgr.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define AUTHENTICATE_TIMEOUT 1000 //ms
|
||||||
|
#define ASSOCIATE_TIMEOUT 1000 //ms
|
||||||
|
|
||||||
|
|
||||||
|
// Command code
|
||||||
|
typedef enum tagCMD_CODE {
|
||||||
|
WLAN_CMD_BSSID_SCAN,
|
||||||
|
WLAN_CMD_SSID,
|
||||||
|
WLAN_CMD_DISASSOCIATE,
|
||||||
|
WLAN_CMD_DEAUTH,
|
||||||
|
WLAN_CMD_RX_PSPOLL,
|
||||||
|
WLAN_CMD_RADIO,
|
||||||
|
WLAN_CMD_CHANGE_BBSENSITIVITY,
|
||||||
|
WLAN_CMD_SETPOWER,
|
||||||
|
WLAN_CMD_TBTT_WAKEUP,
|
||||||
|
WLAN_CMD_BECON_SEND,
|
||||||
|
WLAN_CMD_CHANGE_ANTENNA,
|
||||||
|
WLAN_CMD_REMOVE_ALLKEY,
|
||||||
|
WLAN_CMD_MAC_DISPOWERSAVING,
|
||||||
|
WLAN_CMD_11H_CHSW,
|
||||||
|
WLAN_CMD_RUN_AP
|
||||||
|
} CMD_CODE, DEF* PCMD_CODE;
|
||||||
|
|
||||||
|
#define CMD_Q_SIZE 32
|
||||||
|
|
||||||
|
typedef enum tagCMD_STATUS {
|
||||||
|
|
||||||
|
CMD_STATUS_SUCCESS = 0,
|
||||||
|
CMD_STATUS_FAILURE,
|
||||||
|
CMD_STATUS_RESOURCES,
|
||||||
|
CMD_STATUS_TIMEOUT,
|
||||||
|
CMD_STATUS_PENDING
|
||||||
|
|
||||||
|
} CMD_STATUS, DEF* PCMD_STATUS;
|
||||||
|
|
||||||
|
typedef struct tagCMD_ITEM {
|
||||||
|
CMD_CODE eCmd;
|
||||||
|
BYTE abyCmdDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
|
||||||
|
BOOL bNeedRadioOFF;
|
||||||
|
BOOL bRadioCmd;
|
||||||
|
BOOL bForceSCAN;
|
||||||
|
WORD wDeAuthenReason;
|
||||||
|
} CMD_ITEM, DEF* PCMD_ITEM;
|
||||||
|
|
||||||
|
// Command state
|
||||||
|
typedef enum tagCMD_STATE {
|
||||||
|
WLAN_CMD_SCAN_START,
|
||||||
|
WLAN_CMD_SCAN_END,
|
||||||
|
WLAN_CMD_DISASSOCIATE_START,
|
||||||
|
WLAN_CMD_DEAUTHEN_START,
|
||||||
|
WLAN_CMD_SSID_START,
|
||||||
|
WLAN_AUTHENTICATE_WAIT,
|
||||||
|
WLAN_ASSOCIATE_WAIT,
|
||||||
|
WLAN_DISASSOCIATE_WAIT,
|
||||||
|
WLAN_CMD_TX_PSPACKET_START,
|
||||||
|
WLAN_CMD_RADIO_START,
|
||||||
|
WLAN_CMD_CHANGE_BBSENSITIVITY_START,
|
||||||
|
WLAN_CMD_SETPOWER_START,
|
||||||
|
WLAN_CMD_AP_MODE_START,
|
||||||
|
WLAN_CMD_TBTT_WAKEUP_START,
|
||||||
|
WLAN_CMD_BECON_SEND_START,
|
||||||
|
WLAN_CMD_CHANGE_ANTENNA_START,
|
||||||
|
WLAN_CMD_REMOVE_ALLKEY_START,
|
||||||
|
WLAN_CMD_MAC_DISPOWERSAVING_START,
|
||||||
|
WLAN_CMD_11H_CHSW_START,
|
||||||
|
WLAN_CMD_IDLE
|
||||||
|
} CMD_STATE, DEF* PCMD_STATE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
VOID
|
||||||
|
vResetCommandTimer(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
bScheduleCommand(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN CMD_CODE eCommand,
|
||||||
|
IN PBYTE pbyItem0
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vRunCommand(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
/*
|
||||||
|
VOID
|
||||||
|
WCMDvCommandThread(
|
||||||
|
PVOID Context
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
|
//2007-0115-09<Add>by MikeLiu
|
||||||
|
#ifdef TxInSleep
|
||||||
|
VOID
|
||||||
|
BSSvSecondTxData(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif //__WCMD_H__
|
263
drivers/staging/vt6656/wctl.c
Normal file
263
drivers/staging/vt6656/wctl.c
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: wctl.c
|
||||||
|
*
|
||||||
|
* Purpose: handle WMAC duplicate filter & defragment
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Jun. 27, 2002
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* WCTLbIsDuplicate - Test if duplicate packet
|
||||||
|
* WCTLuSearchDFCB - Search DeFragment Control Database
|
||||||
|
* WCTLuInsertDFCB - Insert DeFragment Control Database
|
||||||
|
* WCTLbHandleFragment - Handle received fragment packet
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__WCTL_H__)
|
||||||
|
#include "wctl.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CARD_H__)
|
||||||
|
#include "card.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TMACRO_H__)
|
||||||
|
#include "tmacro.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
// static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Scan Rx cache. Return TRUE if packet is duplicate, else
|
||||||
|
* inserts in receive cache and returns FALSE.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pCache - Receive packets history
|
||||||
|
* pMACHeader - 802.11 MAC Header of received packet
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if packet duplicate; otherwise FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
BOOL WCTLbIsDuplicate (PSCache pCache, PS802_11Header pMACHeader)
|
||||||
|
{
|
||||||
|
UINT uIndex;
|
||||||
|
UINT ii;
|
||||||
|
PSCacheEntry pCacheEntry;
|
||||||
|
|
||||||
|
if (IS_FC_RETRY(pMACHeader)) {
|
||||||
|
|
||||||
|
uIndex = pCache->uInPtr;
|
||||||
|
for (ii = 0; ii < DUPLICATE_RX_CACHE_LENGTH; ii++) {
|
||||||
|
pCacheEntry = &(pCache->asCacheEntry[uIndex]);
|
||||||
|
if ((pCacheEntry->wFmSequence == pMACHeader->wSeqCtl) &&
|
||||||
|
(IS_ETH_ADDRESS_EQUAL (&(pCacheEntry->abyAddr2[0]), &(pMACHeader->abyAddr2[0]))) &&
|
||||||
|
(LOBYTE(pCacheEntry->wFrameCtl) == LOBYTE(pMACHeader->wFrameCtl))
|
||||||
|
) {
|
||||||
|
/* Duplicate match */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
ADD_ONE_WITH_WRAP_AROUND(uIndex, DUPLICATE_RX_CACHE_LENGTH);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Not fount in cache - insert */
|
||||||
|
pCacheEntry = &pCache->asCacheEntry[pCache->uInPtr];
|
||||||
|
pCacheEntry->wFmSequence = pMACHeader->wSeqCtl;
|
||||||
|
memcpy(&(pCacheEntry->abyAddr2[0]), &(pMACHeader->abyAddr2[0]), U_ETHER_ADDR_LEN);
|
||||||
|
pCacheEntry->wFrameCtl = pMACHeader->wFrameCtl;
|
||||||
|
ADD_ONE_WITH_WRAP_AROUND(pCache->uInPtr, DUPLICATE_RX_CACHE_LENGTH);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Found if sequence number of received fragment packet in Defragment Database
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice - Pointer to adapter
|
||||||
|
* pMACHeader - 802.11 MAC Header of received packet
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: index number in Defragment Database
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UINT WCTLuSearchDFCB (PSDevice pDevice, PS802_11Header pMACHeader)
|
||||||
|
{
|
||||||
|
UINT ii;
|
||||||
|
|
||||||
|
for(ii=0;ii<pDevice->cbDFCB;ii++) {
|
||||||
|
if ((pDevice->sRxDFCB[ii].bInUse == TRUE) &&
|
||||||
|
(IS_ETH_ADDRESS_EQUAL (&(pDevice->sRxDFCB[ii].abyAddr2[0]), &(pMACHeader->abyAddr2[0])))
|
||||||
|
) {
|
||||||
|
//
|
||||||
|
return(ii);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(pDevice->cbDFCB);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Insert received fragment packet in Defragment Database
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice - Pointer to adapter
|
||||||
|
* pMACHeader - 802.11 MAC Header of received packet
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: index number in Defragment Database
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UINT WCTLuInsertDFCB (PSDevice pDevice, PS802_11Header pMACHeader)
|
||||||
|
{
|
||||||
|
UINT ii;
|
||||||
|
|
||||||
|
if (pDevice->cbFreeDFCB == 0)
|
||||||
|
return(pDevice->cbDFCB);
|
||||||
|
for(ii=0;ii<pDevice->cbDFCB;ii++) {
|
||||||
|
if (pDevice->sRxDFCB[ii].bInUse == FALSE) {
|
||||||
|
pDevice->cbFreeDFCB--;
|
||||||
|
pDevice->sRxDFCB[ii].uLifetime = pDevice->dwMaxReceiveLifetime;
|
||||||
|
pDevice->sRxDFCB[ii].bInUse = TRUE;
|
||||||
|
pDevice->sRxDFCB[ii].wSequence = (pMACHeader->wSeqCtl >> 4);
|
||||||
|
pDevice->sRxDFCB[ii].wFragNum = (pMACHeader->wSeqCtl & 0x000F);
|
||||||
|
memcpy(&(pDevice->sRxDFCB[ii].abyAddr2[0]), &(pMACHeader->abyAddr2[0]), U_ETHER_ADDR_LEN);
|
||||||
|
return(ii);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(pDevice->cbDFCB);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Handle received fragment packet
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pDevice - Pointer to adapter
|
||||||
|
* pMACHeader - 802.11 MAC Header of received packet
|
||||||
|
* cbFrameLength - Frame length
|
||||||
|
* bWEP - is WEP packet
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: TRUE if it is valid fragment packet and we have resource to defragment; otherwise FALSE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL WCTLbHandleFragment (PSDevice pDevice, PS802_11Header pMACHeader, UINT cbFrameLength, BOOL bWEP, BOOL bExtIV)
|
||||||
|
{
|
||||||
|
UINT uHeaderSize;
|
||||||
|
|
||||||
|
|
||||||
|
if (bWEP == TRUE) {
|
||||||
|
uHeaderSize = 28;
|
||||||
|
if (bExtIV)
|
||||||
|
// ExtIV
|
||||||
|
uHeaderSize +=4;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
uHeaderSize = 24;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IS_FIRST_FRAGMENT_PKT(pMACHeader)) {
|
||||||
|
pDevice->uCurrentDFCBIdx = WCTLuSearchDFCB(pDevice, pMACHeader);
|
||||||
|
if (pDevice->uCurrentDFCBIdx < pDevice->cbDFCB) {
|
||||||
|
// duplicate, we must flush previous DCB
|
||||||
|
pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].uLifetime = pDevice->dwMaxReceiveLifetime;
|
||||||
|
pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].wSequence = (pMACHeader->wSeqCtl >> 4);
|
||||||
|
pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].wFragNum = (pMACHeader->wSeqCtl & 0x000F);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pDevice->uCurrentDFCBIdx = WCTLuInsertDFCB(pDevice, pMACHeader);
|
||||||
|
if (pDevice->uCurrentDFCBIdx == pDevice->cbDFCB) {
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// reserve 8 byte to match MAC RX Buffer
|
||||||
|
pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].pbyRxBuffer = (PBYTE) (pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].skb->data + 8);
|
||||||
|
// pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].pbyRxBuffer = (PBYTE) (pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].skb->data + 4);
|
||||||
|
memcpy(pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].pbyRxBuffer, pMACHeader, cbFrameLength);
|
||||||
|
pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].cbFrameLength = cbFrameLength;
|
||||||
|
pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].pbyRxBuffer += cbFrameLength;
|
||||||
|
pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].wFragNum++;
|
||||||
|
//DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "First pDevice->uCurrentDFCBIdx= %d\n", pDevice->uCurrentDFCBIdx);
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pDevice->uCurrentDFCBIdx = WCTLuSearchDFCB(pDevice, pMACHeader);
|
||||||
|
if (pDevice->uCurrentDFCBIdx != pDevice->cbDFCB) {
|
||||||
|
if ((pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].wSequence == (pMACHeader->wSeqCtl >> 4)) &&
|
||||||
|
(pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].wFragNum == (pMACHeader->wSeqCtl & 0x000F)) &&
|
||||||
|
((pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].cbFrameLength + cbFrameLength - uHeaderSize) < 2346)) {
|
||||||
|
|
||||||
|
memcpy(pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].pbyRxBuffer, ((PBYTE) (pMACHeader) + uHeaderSize), (cbFrameLength - uHeaderSize));
|
||||||
|
pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].cbFrameLength += (cbFrameLength - uHeaderSize);
|
||||||
|
pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].pbyRxBuffer += (cbFrameLength - uHeaderSize);
|
||||||
|
pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].wFragNum++;
|
||||||
|
//DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Second pDevice->uCurrentDFCBIdx= %d\n", pDevice->uCurrentDFCBIdx);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// seq error or frag # error flush DFCB
|
||||||
|
pDevice->cbFreeDFCB++;
|
||||||
|
pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].bInUse = FALSE;
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
if (IS_LAST_FRAGMENT_PKT(pMACHeader)) {
|
||||||
|
//enq defragcontrolblock
|
||||||
|
pDevice->cbFreeDFCB++;
|
||||||
|
pDevice->sRxDFCB[pDevice->uCurrentDFCBIdx].bInUse = FALSE;
|
||||||
|
//DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Last pDevice->uCurrentDFCBIdx= %d\n", pDevice->uCurrentDFCBIdx);
|
||||||
|
return(TRUE);
|
||||||
|
}
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
127
drivers/staging/vt6656/wctl.h
Normal file
127
drivers/staging/vt6656/wctl.h
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: wctl.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Jerry Chen
|
||||||
|
*
|
||||||
|
* Date: Jun. 27, 2002
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __WCTL_H__
|
||||||
|
#define __WCTL_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TETHER_H__)
|
||||||
|
#include "tether.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
#define IS_TYPE_DATA(pMACHeader) \
|
||||||
|
((((PS802_11Header) pMACHeader)->wFrameCtl & TYPE_802_11_MASK) == TYPE_802_11_DATA)
|
||||||
|
|
||||||
|
#define IS_TYPE_MGMT(pMACHeader) \
|
||||||
|
((((PS802_11Header) pMACHeader)->wFrameCtl & TYPE_802_11_MASK) == TYPE_802_11_MGMT)
|
||||||
|
|
||||||
|
#define IS_TYPE_CONTROL(pMACHeader) \
|
||||||
|
((((PS802_11Header) pMACHeader)->wFrameCtl & TYPE_802_11_MASK) == TYPE_802_11_CTL)
|
||||||
|
|
||||||
|
#define IS_FC_MOREDATA(pMACHeader) \
|
||||||
|
((((PS802_11Header) pMACHeader)->wFrameCtl & FC_MOREDATA) == FC_MOREDATA)
|
||||||
|
|
||||||
|
#define IS_FC_POWERMGT(pMACHeader) \
|
||||||
|
((((PS802_11Header) pMACHeader)->wFrameCtl & FC_POWERMGT) == FC_POWERMGT)
|
||||||
|
|
||||||
|
#define IS_FC_RETRY(pMACHeader) \
|
||||||
|
((((PS802_11Header) pMACHeader)->wFrameCtl & FC_RETRY) == FC_RETRY)
|
||||||
|
|
||||||
|
#define IS_FC_WEP(pMACHeader) \
|
||||||
|
((((PS802_11Header) pMACHeader)->wFrameCtl & FC_WEP) == FC_WEP)
|
||||||
|
|
||||||
|
#ifdef __BIG_ENDIAN
|
||||||
|
|
||||||
|
#define IS_FRAGMENT_PKT(pMACHeader) \
|
||||||
|
(((((PS802_11Header) pMACHeader)->wFrameCtl & FC_MOREFRAG) != 0) | \
|
||||||
|
((((PS802_11Header) pMACHeader)->wSeqCtl & 0x0F00) != 0))
|
||||||
|
|
||||||
|
#define IS_FIRST_FRAGMENT_PKT(pMACHeader) \
|
||||||
|
((((PS802_11Header) pMACHeader)->wSeqCtl & 0x0F00) == 0)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define IS_FRAGMENT_PKT(pMACHeader) \
|
||||||
|
(((((PS802_11Header) pMACHeader)->wFrameCtl & FC_MOREFRAG) != 0) | \
|
||||||
|
((((PS802_11Header) pMACHeader)->wSeqCtl & 0x000F) != 0))
|
||||||
|
|
||||||
|
#define IS_FIRST_FRAGMENT_PKT(pMACHeader) \
|
||||||
|
((((PS802_11Header) pMACHeader)->wSeqCtl & 0x000F) == 0)
|
||||||
|
|
||||||
|
#endif//#ifdef __BIG_ENDIAN
|
||||||
|
|
||||||
|
#define IS_LAST_FRAGMENT_PKT(pMACHeader) \
|
||||||
|
((((PS802_11Header) pMACHeader)->wFrameCtl & FC_MOREFRAG) == 0)
|
||||||
|
|
||||||
|
#define IS_CTL_PSPOLL(pMACHeader) \
|
||||||
|
((((PS802_11Header) pMACHeader)->wFrameCtl & TYPE_SUBTYPE_MASK) == TYPE_CTL_PSPOLL)
|
||||||
|
|
||||||
|
|
||||||
|
#define ADD_ONE_WITH_WRAP_AROUND(uVar, uModulo) { \
|
||||||
|
if ((uVar) >= ((uModulo) - 1)) \
|
||||||
|
(uVar) = 0; \
|
||||||
|
else \
|
||||||
|
(uVar)++; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
BOOL WCTLbIsDuplicate(PSCache pCache, PS802_11Header pMACHeader);
|
||||||
|
BOOL WCTLbHandleFragment(PSDevice pDevice, PS802_11Header pMACHeader, UINT cbFrameLength, BOOL bWEP, BOOL bExtIV);
|
||||||
|
UINT WCTLuSearchDFCB(PSDevice pDevice, PS802_11Header pMACHeader);
|
||||||
|
UINT WCTLuInsertDFCB(PSDevice pDevice, PS802_11Header pMACHeader);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __WCTL_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
5008
drivers/staging/vt6656/wmgr.c
Normal file
5008
drivers/staging/vt6656/wmgr.c
Normal file
File diff suppressed because it is too large
Load Diff
519
drivers/staging/vt6656/wmgr.h
Normal file
519
drivers/staging/vt6656/wmgr.h
Normal file
@ -0,0 +1,519 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: wmgr.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: lyndon chen
|
||||||
|
*
|
||||||
|
* Date: Jan 2, 2003
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __WMGR_H__
|
||||||
|
#define __WMGR_H__
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211MGR_H__)
|
||||||
|
#include "80211mgr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211HDR_H__)
|
||||||
|
#include "80211hdr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WCMD_H__)
|
||||||
|
#include "wcmd.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__BSSDB_H__)
|
||||||
|
#include "bssdb.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WPA2_H__)
|
||||||
|
#include "wpa2.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__CARD_H__)
|
||||||
|
#include "card.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Scan time
|
||||||
|
#define PROBE_DELAY 100 // (us)
|
||||||
|
#define SWITCH_CHANNEL_DELAY 200 // (us)
|
||||||
|
#define WLAN_SCAN_MINITIME 25 // (ms)
|
||||||
|
#define WLAN_SCAN_MAXTIME 100 // (ms)
|
||||||
|
#define TRIVIAL_SYNC_DIFFERENCE 0 // (us)
|
||||||
|
#define DEFAULT_IBSS_BI 100 // (ms)
|
||||||
|
|
||||||
|
#define WCMD_ACTIVE_SCAN_TIME 20 //(ms)
|
||||||
|
#define WCMD_PASSIVE_SCAN_TIME 100 //(ms)
|
||||||
|
|
||||||
|
|
||||||
|
#define DEFAULT_MSDU_LIFETIME 512 // ms
|
||||||
|
#define DEFAULT_MSDU_LIFETIME_RES_64us 8000 // 64us
|
||||||
|
|
||||||
|
#define DEFAULT_MGN_LIFETIME 8 // ms
|
||||||
|
#define DEFAULT_MGN_LIFETIME_RES_64us 125 // 64us
|
||||||
|
|
||||||
|
#define MAKE_BEACON_RESERVED 10 //(us)
|
||||||
|
|
||||||
|
|
||||||
|
#define TIM_MULTICAST_MASK 0x01
|
||||||
|
#define TIM_BITMAPOFFSET_MASK 0xFE
|
||||||
|
#define DEFAULT_DTIM_PERIOD 1
|
||||||
|
|
||||||
|
#define AP_LONG_RETRY_LIMIT 4
|
||||||
|
|
||||||
|
#define DEFAULT_IBSS_CHANNEL 6 //2.4G
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
//mike define: make timer to expire after desired times
|
||||||
|
#define timer_expire(timer,next_tick) mod_timer(&timer, RUN_AT(next_tick))
|
||||||
|
|
||||||
|
typedef void (*TimerFunction)(ULONG);
|
||||||
|
|
||||||
|
|
||||||
|
//+++ NDIS related
|
||||||
|
|
||||||
|
typedef UCHAR NDIS_802_11_MAC_ADDRESS[6];
|
||||||
|
typedef struct _NDIS_802_11_AI_REQFI
|
||||||
|
{
|
||||||
|
USHORT Capabilities;
|
||||||
|
USHORT ListenInterval;
|
||||||
|
NDIS_802_11_MAC_ADDRESS CurrentAPAddress;
|
||||||
|
} NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI;
|
||||||
|
|
||||||
|
typedef struct _NDIS_802_11_AI_RESFI
|
||||||
|
{
|
||||||
|
USHORT Capabilities;
|
||||||
|
USHORT StatusCode;
|
||||||
|
USHORT AssociationId;
|
||||||
|
} NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI;
|
||||||
|
|
||||||
|
typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION
|
||||||
|
{
|
||||||
|
ULONG Length;
|
||||||
|
USHORT AvailableRequestFixedIEs;
|
||||||
|
NDIS_802_11_AI_REQFI RequestFixedIEs;
|
||||||
|
ULONG RequestIELength;
|
||||||
|
ULONG OffsetRequestIEs;
|
||||||
|
USHORT AvailableResponseFixedIEs;
|
||||||
|
NDIS_802_11_AI_RESFI ResponseFixedIEs;
|
||||||
|
ULONG ResponseIELength;
|
||||||
|
ULONG OffsetResponseIEs;
|
||||||
|
} NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSAssocInfo {
|
||||||
|
NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
|
||||||
|
BYTE abyIEs[WLAN_BEACON_FR_MAXLEN+WLAN_BEACON_FR_MAXLEN];
|
||||||
|
// store ReqIEs set by OID_802_11_ASSOCIATION_INFORMATION
|
||||||
|
ULONG RequestIELength;
|
||||||
|
BYTE abyReqIEs[WLAN_BEACON_FR_MAXLEN];
|
||||||
|
} SAssocInfo, DEF* PSAssocInfo;
|
||||||
|
//---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum tagWMAC_AUTHENTICATION_MODE {
|
||||||
|
|
||||||
|
WMAC_AUTH_OPEN,
|
||||||
|
WMAC_AUTH_SHAREKEY,
|
||||||
|
WMAC_AUTH_AUTO,
|
||||||
|
WMAC_AUTH_WPA,
|
||||||
|
WMAC_AUTH_WPAPSK,
|
||||||
|
WMAC_AUTH_WPANONE,
|
||||||
|
WMAC_AUTH_WPA2,
|
||||||
|
WMAC_AUTH_WPA2PSK,
|
||||||
|
WMAC_AUTH_MAX // Not a real mode, defined as upper bound
|
||||||
|
} WMAC_AUTHENTICATION_MODE, *PWMAC_AUTHENTICATION_MODE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Pre-configured Mode (from XP)
|
||||||
|
|
||||||
|
typedef enum tagWMAC_CONFIG_MODE {
|
||||||
|
WMAC_CONFIG_ESS_STA,
|
||||||
|
WMAC_CONFIG_IBSS_STA,
|
||||||
|
WMAC_CONFIG_AUTO,
|
||||||
|
WMAC_CONFIG_AP
|
||||||
|
|
||||||
|
} WMAC_CONFIG_MODE, *PWMAC_CONFIG_MODE;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum tagWMAC_SCAN_TYPE {
|
||||||
|
|
||||||
|
WMAC_SCAN_ACTIVE,
|
||||||
|
WMAC_SCAN_PASSIVE,
|
||||||
|
WMAC_SCAN_HYBRID
|
||||||
|
|
||||||
|
} WMAC_SCAN_TYPE, *PWMAC_SCAN_TYPE;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum tagWMAC_SCAN_STATE {
|
||||||
|
|
||||||
|
WMAC_NO_SCANNING,
|
||||||
|
WMAC_IS_SCANNING,
|
||||||
|
WMAC_IS_PROBEPENDING
|
||||||
|
|
||||||
|
} WMAC_SCAN_STATE, *PWMAC_SCAN_STATE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Notes:
|
||||||
|
// Basic Service Set state explained as following:
|
||||||
|
// WMAC_STATE_IDLE : no BSS is selected (Adhoc or Infra)
|
||||||
|
// WMAC_STATE_STARTED : no BSS is selected, start own IBSS (Adhoc only)
|
||||||
|
// WMAC_STATE_JOINTED : BSS is selected and synchronized (Adhoc or Infra)
|
||||||
|
// WMAC_STATE_AUTHPENDING : Authentication pending (Infra)
|
||||||
|
// WMAC_STATE_AUTH : Authenticated (Infra)
|
||||||
|
// WMAC_STATE_ASSOCPENDING : Association pending (Infra)
|
||||||
|
// WMAC_STATE_ASSOC : Associated (Infra)
|
||||||
|
|
||||||
|
typedef enum tagWMAC_BSS_STATE {
|
||||||
|
|
||||||
|
WMAC_STATE_IDLE,
|
||||||
|
WMAC_STATE_STARTED,
|
||||||
|
WMAC_STATE_JOINTED,
|
||||||
|
WMAC_STATE_AUTHPENDING,
|
||||||
|
WMAC_STATE_AUTH,
|
||||||
|
WMAC_STATE_ASSOCPENDING,
|
||||||
|
WMAC_STATE_ASSOC
|
||||||
|
|
||||||
|
} WMAC_BSS_STATE, *PWMAC_BSS_STATE;
|
||||||
|
|
||||||
|
// WMAC selected running mode
|
||||||
|
typedef enum tagWMAC_CURRENT_MODE {
|
||||||
|
|
||||||
|
WMAC_MODE_STANDBY,
|
||||||
|
WMAC_MODE_ESS_STA,
|
||||||
|
WMAC_MODE_IBSS_STA,
|
||||||
|
WMAC_MODE_ESS_AP
|
||||||
|
|
||||||
|
} WMAC_CURRENT_MODE, *PWMAC_CURRENT_MODE;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum tagWMAC_POWER_MODE {
|
||||||
|
|
||||||
|
WMAC_POWER_CAM,
|
||||||
|
WMAC_POWER_FAST,
|
||||||
|
WMAC_POWER_MAX
|
||||||
|
|
||||||
|
} WMAC_POWER_MODE, *PWMAC_POWER_MODE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Tx Managment Packet descriptor
|
||||||
|
typedef struct tagSTxMgmtPacket {
|
||||||
|
|
||||||
|
PUWLAN_80211HDR p80211Header;
|
||||||
|
UINT cbMPDULen;
|
||||||
|
UINT cbPayloadLen;
|
||||||
|
|
||||||
|
} STxMgmtPacket, DEF* PSTxMgmtPacket;
|
||||||
|
|
||||||
|
|
||||||
|
// Rx Managment Packet descriptor
|
||||||
|
typedef struct tagSRxMgmtPacket {
|
||||||
|
|
||||||
|
PUWLAN_80211HDR p80211Header;
|
||||||
|
QWORD qwLocalTSF;
|
||||||
|
UINT cbMPDULen;
|
||||||
|
UINT cbPayloadLen;
|
||||||
|
UINT uRSSI;
|
||||||
|
BYTE bySQ;
|
||||||
|
BYTE byRxRate;
|
||||||
|
BYTE byRxChannel;
|
||||||
|
|
||||||
|
} SRxMgmtPacket, DEF* PSRxMgmtPacket;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagSMgmtObject
|
||||||
|
{
|
||||||
|
|
||||||
|
PVOID pAdapter;
|
||||||
|
// MAC address
|
||||||
|
BYTE abyMACAddr[WLAN_ADDR_LEN];
|
||||||
|
|
||||||
|
// Configuration Mode
|
||||||
|
WMAC_CONFIG_MODE eConfigMode; // MAC pre-configed mode
|
||||||
|
|
||||||
|
CARD_PHY_TYPE eCurrentPHYMode;
|
||||||
|
|
||||||
|
|
||||||
|
// Operation state variables
|
||||||
|
WMAC_CURRENT_MODE eCurrMode; // MAC current connection mode
|
||||||
|
WMAC_BSS_STATE eCurrState; // MAC current BSS state
|
||||||
|
#ifdef SndEvt_ToAPI
|
||||||
|
WMAC_BSS_STATE eLastState; // MAC last BSS state
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PKnownBSS pCurrBSS;
|
||||||
|
BYTE byCSSGK;
|
||||||
|
BYTE byCSSPK;
|
||||||
|
|
||||||
|
// BYTE abyNewSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
|
||||||
|
// BYTE abyNewExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
|
||||||
|
BOOL bCurrBSSIDFilterOn;
|
||||||
|
|
||||||
|
// Current state vars
|
||||||
|
UINT uCurrChannel;
|
||||||
|
BYTE abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
|
||||||
|
BYTE abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
|
||||||
|
BYTE abyCurrSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
|
||||||
|
BYTE abyCurrBSSID[WLAN_BSSID_LEN];
|
||||||
|
WORD wCurrCapInfo;
|
||||||
|
WORD wCurrAID;
|
||||||
|
UINT uRSSITrigger;
|
||||||
|
WORD wCurrATIMWindow;
|
||||||
|
WORD wCurrBeaconPeriod;
|
||||||
|
BOOL bIsDS;
|
||||||
|
BYTE byERPContext;
|
||||||
|
|
||||||
|
CMD_STATE eCommandState;
|
||||||
|
UINT uScanChannel;
|
||||||
|
|
||||||
|
// Desire joinning BSS vars
|
||||||
|
BYTE abyDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
|
||||||
|
BYTE abyDesireBSSID[WLAN_BSSID_LEN];
|
||||||
|
|
||||||
|
//restore BSS info for Ad-Hoc mode
|
||||||
|
//20080131-05,<Add> by Mike Liu
|
||||||
|
#ifdef Adhoc_STA
|
||||||
|
BYTE abyAdHocSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Adhoc or AP configuration vars
|
||||||
|
WORD wIBSSBeaconPeriod;
|
||||||
|
WORD wIBSSATIMWindow;
|
||||||
|
UINT uIBSSChannel;
|
||||||
|
BYTE abyIBSSSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
|
||||||
|
BYTE byAPBBType;
|
||||||
|
BYTE abyWPAIE[MAX_WPA_IE_LEN];
|
||||||
|
WORD wWPAIELen;
|
||||||
|
|
||||||
|
UINT uAssocCount;
|
||||||
|
BOOL bMoreData;
|
||||||
|
|
||||||
|
// Scan state vars
|
||||||
|
WMAC_SCAN_STATE eScanState;
|
||||||
|
WMAC_SCAN_TYPE eScanType;
|
||||||
|
UINT uScanStartCh;
|
||||||
|
UINT uScanEndCh;
|
||||||
|
WORD wScanSteps;
|
||||||
|
UINT uScanBSSType;
|
||||||
|
// Desire scannig vars
|
||||||
|
BYTE abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
|
||||||
|
BYTE abyScanBSSID[WLAN_BSSID_LEN];
|
||||||
|
|
||||||
|
// Privacy
|
||||||
|
WMAC_AUTHENTICATION_MODE eAuthenMode;
|
||||||
|
BOOL bShareKeyAlgorithm;
|
||||||
|
BYTE abyChallenge[WLAN_CHALLENGE_LEN];
|
||||||
|
BOOL bPrivacyInvoked;
|
||||||
|
|
||||||
|
// Received beacon state vars
|
||||||
|
BOOL bInTIM;
|
||||||
|
BOOL bMulticastTIM;
|
||||||
|
BYTE byDTIMCount;
|
||||||
|
BYTE byDTIMPeriod;
|
||||||
|
|
||||||
|
// Power saving state vars
|
||||||
|
WMAC_POWER_MODE ePSMode;
|
||||||
|
WORD wListenInterval;
|
||||||
|
WORD wCountToWakeUp;
|
||||||
|
BOOL bInTIMWake;
|
||||||
|
PBYTE pbyPSPacketPool;
|
||||||
|
BYTE byPSPacketPool[sizeof(STxMgmtPacket) + WLAN_NULLDATA_FR_MAXLEN];
|
||||||
|
BOOL bRxBeaconInTBTTWake;
|
||||||
|
BYTE abyPSTxMap[MAX_NODE_NUM + 1];
|
||||||
|
|
||||||
|
// managment command related
|
||||||
|
UINT uCmdBusy;
|
||||||
|
UINT uCmdHostAPBusy;
|
||||||
|
|
||||||
|
// managment packet pool
|
||||||
|
PBYTE pbyMgmtPacketPool;
|
||||||
|
BYTE byMgmtPacketPool[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN];
|
||||||
|
|
||||||
|
|
||||||
|
// One second callback timer
|
||||||
|
struct timer_list sTimerSecondCallback;
|
||||||
|
|
||||||
|
// Temporarily Rx Mgmt Packet Descriptor
|
||||||
|
SRxMgmtPacket sRxPacket;
|
||||||
|
|
||||||
|
// link list of known bss's (scan results)
|
||||||
|
KnownBSS sBSSList[MAX_BSS_NUM];
|
||||||
|
//link list of same bss's //DavidWang
|
||||||
|
KnownBSS pSameBSS[6] ;
|
||||||
|
BOOL Cisco_cckm ;
|
||||||
|
BYTE Roam_dbm;
|
||||||
|
|
||||||
|
// table list of known node
|
||||||
|
// sNodeDBList[0] is reserved for AP under Infra mode
|
||||||
|
// sNodeDBList[0] is reserved for Multicast under adhoc/AP mode
|
||||||
|
KnownNodeDB sNodeDBTable[MAX_NODE_NUM + 1];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// WPA2 PMKID Cache
|
||||||
|
SPMKIDCache gsPMKIDCache;
|
||||||
|
BOOL bRoaming;
|
||||||
|
|
||||||
|
// rate fall back vars
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// associate info
|
||||||
|
SAssocInfo sAssocInfo;
|
||||||
|
|
||||||
|
|
||||||
|
// for 802.11h
|
||||||
|
BOOL b11hEnable;
|
||||||
|
BOOL bSwitchChannel;
|
||||||
|
BYTE byNewChannel;
|
||||||
|
PWLAN_IE_MEASURE_REP pCurrMeasureEIDRep;
|
||||||
|
UINT uLengthOfRepEIDs;
|
||||||
|
BYTE abyCurrentMSRReq[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN];
|
||||||
|
BYTE abyCurrentMSRRep[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN];
|
||||||
|
BYTE abyIECountry[WLAN_A3FR_MAXLEN];
|
||||||
|
BYTE abyIBSSDFSOwner[6];
|
||||||
|
BYTE byIBSSDFSRecovery;
|
||||||
|
|
||||||
|
struct sk_buff skb;
|
||||||
|
|
||||||
|
} SMgmtObject, DEF *PSMgmtObject;
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Macros ------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
vMgrObjectInit(
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
vMgrAssocBeginSta(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PSMgmtObject pMgmt,
|
||||||
|
OUT PCMD_STATUS pStatus
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrReAssocBeginSta(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PSMgmtObject pMgmt,
|
||||||
|
OUT PCMD_STATUS pStatus
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDisassocBeginSta(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PSMgmtObject pMgmt,
|
||||||
|
IN PBYTE abyDestAddress,
|
||||||
|
IN WORD wReason,
|
||||||
|
OUT PCMD_STATUS pStatus
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrAuthenBeginSta(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PSMgmtObject pMgmt,
|
||||||
|
OUT PCMD_STATUS pStatus
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrCreateOwnIBSS(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
OUT PCMD_STATUS pStatus
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrJoinBSSBegin(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
OUT PCMD_STATUS pStatus
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrRxManagePacket(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PSMgmtObject pMgmt,
|
||||||
|
IN PSRxMgmtPacket pRxPacket
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
VOID
|
||||||
|
vMgrScanBegin(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
OUT PCMD_STATUS pStatus
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vMgrDeAuthenBeginSta(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PSMgmtObject pMgmt,
|
||||||
|
IN PBYTE abyDestAddress,
|
||||||
|
IN WORD wReason,
|
||||||
|
OUT PCMD_STATUS pStatus
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
bMgrPrepareBeaconToSend(
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PSMgmtObject pMgmt
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
bAdd_PMKID_Candidate (
|
||||||
|
IN HANDLE hDeviceContext,
|
||||||
|
IN PBYTE pbyBSSID,
|
||||||
|
IN PSRSNCapObject psRSNCapObj
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vFlush_PMKID_Candidate (
|
||||||
|
IN HANDLE hDeviceContext
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif // __WMGR_H__
|
339
drivers/staging/vt6656/wpa.c
Normal file
339
drivers/staging/vt6656/wpa.c
Normal file
@ -0,0 +1,339 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: wpa.c
|
||||||
|
*
|
||||||
|
* Purpose: Handles the Basic Service Set & Node Database functions
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
* WPA_ParseRSN - Parse RSN IE.
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
* Author: Kyle Hsu
|
||||||
|
*
|
||||||
|
* Date: July 14, 2003
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TMACRO_H__)
|
||||||
|
#include "tmacro.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__TETHER_H__)
|
||||||
|
#include "tether.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211HDR_H__)
|
||||||
|
#include "80211hdr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__BSSDB_H__)
|
||||||
|
#include "bssdb.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WMGR_H__)
|
||||||
|
#include "wmgr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WPA_H__)
|
||||||
|
#include "wpa.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211MGR_H__)
|
||||||
|
#include "80211mgr.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
|
||||||
|
const BYTE abyOUI00[4] = { 0x00, 0x50, 0xf2, 0x00 };
|
||||||
|
const BYTE abyOUI01[4] = { 0x00, 0x50, 0xf2, 0x01 };
|
||||||
|
const BYTE abyOUI02[4] = { 0x00, 0x50, 0xf2, 0x02 };
|
||||||
|
const BYTE abyOUI03[4] = { 0x00, 0x50, 0xf2, 0x03 };
|
||||||
|
const BYTE abyOUI04[4] = { 0x00, 0x50, 0xf2, 0x04 };
|
||||||
|
const BYTE abyOUI05[4] = { 0x00, 0x50, 0xf2, 0x05 };
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Clear RSN information in BSSList.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pBSSList - BSS list.
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none.
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
|
||||||
|
VOID
|
||||||
|
WPA_ClearRSN (
|
||||||
|
IN PKnownBSS pBSSList
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int ii;
|
||||||
|
pBSSList->byGKType = WPA_TKIP;
|
||||||
|
for (ii=0; ii < 4; ii ++)
|
||||||
|
pBSSList->abyPKType[ii] = WPA_TKIP;
|
||||||
|
pBSSList->wPKCount = 0;
|
||||||
|
for (ii=0; ii < 4; ii ++)
|
||||||
|
pBSSList->abyAuthType[ii] = WPA_AUTH_IEEE802_1X;
|
||||||
|
pBSSList->wAuthCount = 0;
|
||||||
|
pBSSList->byDefaultK_as_PK = 0;
|
||||||
|
pBSSList->byReplayIdx = 0;
|
||||||
|
pBSSList->sRSNCapObj.bRSNCapExist = FALSE;
|
||||||
|
pBSSList->sRSNCapObj.wRSNCap = 0;
|
||||||
|
pBSSList->bWPAValid = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Parse RSN IE.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pBSSList - BSS list.
|
||||||
|
* pRSN - Pointer to the RSN IE.
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none.
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
VOID
|
||||||
|
WPA_ParseRSN (
|
||||||
|
IN PKnownBSS pBSSList,
|
||||||
|
IN PWLAN_IE_RSN_EXT pRSN
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PWLAN_IE_RSN_AUTH pIE_RSN_Auth = NULL;
|
||||||
|
int i, j, m, n = 0;
|
||||||
|
PBYTE pbyCaps;
|
||||||
|
|
||||||
|
WPA_ClearRSN(pBSSList);
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"WPA_ParseRSN: [%d]\n", pRSN->len);
|
||||||
|
|
||||||
|
// information element header makes sense
|
||||||
|
if ((pRSN->len >= 6) // oui1(4)+ver(2)
|
||||||
|
&& (pRSN->byElementID == WLAN_EID_RSN_WPA) && MEMEqualMemory(pRSN->abyOUI, abyOUI01, 4)
|
||||||
|
&& (pRSN->wVersion == 1)) {
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Legal RSN\n");
|
||||||
|
// update each variable if pRSN is long enough to contain the variable
|
||||||
|
if (pRSN->len >= 10) //oui1(4)+ver(2)+GKSuite(4)
|
||||||
|
{
|
||||||
|
if (MEMEqualMemory(pRSN->abyMulticast, abyOUI01, 4))
|
||||||
|
pBSSList->byGKType = WPA_WEP40;
|
||||||
|
else if (MEMEqualMemory(pRSN->abyMulticast, abyOUI02, 4))
|
||||||
|
pBSSList->byGKType = WPA_TKIP;
|
||||||
|
else if (MEMEqualMemory(pRSN->abyMulticast, abyOUI03, 4))
|
||||||
|
pBSSList->byGKType = WPA_AESWRAP;
|
||||||
|
else if (MEMEqualMemory(pRSN->abyMulticast, abyOUI04, 4))
|
||||||
|
pBSSList->byGKType = WPA_AESCCMP;
|
||||||
|
else if (MEMEqualMemory(pRSN->abyMulticast, abyOUI05, 4))
|
||||||
|
pBSSList->byGKType = WPA_WEP104;
|
||||||
|
else
|
||||||
|
// any vendor checks here
|
||||||
|
pBSSList->byGKType = WPA_NONE;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"byGKType: %x\n", pBSSList->byGKType);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pRSN->len >= 12) //oui1(4)+ver(2)+GKS(4)+PKSCnt(2)
|
||||||
|
{
|
||||||
|
j = 0;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"wPKCount: %d, sizeof(pBSSList->abyPKType): %d\n", pRSN->wPKCount, sizeof(pBSSList->abyPKType));
|
||||||
|
for(i = 0; (i < pRSN->wPKCount) && (j < sizeof(pBSSList->abyPKType)/sizeof(BYTE)); i++) {
|
||||||
|
if(pRSN->len >= 12+i*4+4) { //oui1(4)+ver(2)+GKS(4)+PKSCnt(2)+PKS(4*i)
|
||||||
|
if (MEMEqualMemory(pRSN->PKSList[i].abyOUI, abyOUI00, 4))
|
||||||
|
pBSSList->abyPKType[j++] = WPA_NONE;
|
||||||
|
else if (MEMEqualMemory(pRSN->PKSList[i].abyOUI, abyOUI02, 4))
|
||||||
|
pBSSList->abyPKType[j++] = WPA_TKIP;
|
||||||
|
else if (MEMEqualMemory(pRSN->PKSList[i].abyOUI, abyOUI03, 4))
|
||||||
|
pBSSList->abyPKType[j++] = WPA_AESWRAP;
|
||||||
|
else if (MEMEqualMemory(pRSN->PKSList[i].abyOUI, abyOUI04, 4))
|
||||||
|
pBSSList->abyPKType[j++] = WPA_AESCCMP;
|
||||||
|
else
|
||||||
|
// any vendor checks here
|
||||||
|
;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
//DBG_PRN_GRP14(("abyPKType[%d]: %X\n", j-1, pBSSList->abyPKType[j-1]));
|
||||||
|
} //for
|
||||||
|
pBSSList->wPKCount = (WORD)j;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"wPKCount: %d\n", pBSSList->wPKCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
m = pRSN->wPKCount;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"m: %d\n", m);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"14+m*4: %d\n", 14+m*4);
|
||||||
|
|
||||||
|
if (pRSN->len >= 14+m*4) { //oui1(4)+ver(2)+GKS(4)+PKSCnt(2)+PKS(4*m)+AKC(2)
|
||||||
|
// overlay IE_RSN_Auth structure into correct place
|
||||||
|
pIE_RSN_Auth = (PWLAN_IE_RSN_AUTH) pRSN->PKSList[m].abyOUI;
|
||||||
|
j = 0;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"wAuthCount: %d, sizeof(pBSSList->abyAuthType): %d\n",
|
||||||
|
pIE_RSN_Auth->wAuthCount, sizeof(pBSSList->abyAuthType));
|
||||||
|
for(i = 0; (i < pIE_RSN_Auth->wAuthCount) && (j < sizeof(pBSSList->abyAuthType)/sizeof(BYTE)); i++) {
|
||||||
|
if(pRSN->len >= 14+4+(m+i)*4) { //oui1(4)+ver(2)+GKS(4)+PKSCnt(2)+PKS(4*m)+AKC(2)+AKS(4*i)
|
||||||
|
if (MEMEqualMemory(pIE_RSN_Auth->AuthKSList[i].abyOUI, abyOUI01, 4))
|
||||||
|
pBSSList->abyAuthType[j++] = WPA_AUTH_IEEE802_1X;
|
||||||
|
else if (MEMEqualMemory(pIE_RSN_Auth->AuthKSList[i].abyOUI, abyOUI02, 4))
|
||||||
|
pBSSList->abyAuthType[j++] = WPA_AUTH_PSK;
|
||||||
|
else
|
||||||
|
// any vendor checks here
|
||||||
|
;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
//DBG_PRN_GRP14(("abyAuthType[%d]: %X\n", j-1, pBSSList->abyAuthType[j-1]));
|
||||||
|
}
|
||||||
|
if(j > 0)
|
||||||
|
pBSSList->wAuthCount = (WORD)j;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"wAuthCount: %d\n", pBSSList->wAuthCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pIE_RSN_Auth != NULL) {
|
||||||
|
|
||||||
|
n = pIE_RSN_Auth->wAuthCount;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"n: %d\n", n);
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"14+4+(m+n)*4: %d\n", 14+4+(m+n)*4);
|
||||||
|
|
||||||
|
if(pRSN->len+2 >= 14+4+(m+n)*4) { //oui1(4)+ver(2)+GKS(4)+PKSCnt(2)+PKS(4*m)+AKC(2)+AKS(4*n)+Cap(2)
|
||||||
|
pbyCaps = (PBYTE)pIE_RSN_Auth->AuthKSList[n].abyOUI;
|
||||||
|
pBSSList->byDefaultK_as_PK = (*pbyCaps) & WPA_GROUPFLAG;
|
||||||
|
pBSSList->byReplayIdx = 2 << ((*pbyCaps >> WPA_REPLAYBITSSHIFT) & WPA_REPLAYBITS);
|
||||||
|
pBSSList->sRSNCapObj.bRSNCapExist = TRUE;
|
||||||
|
pBSSList->sRSNCapObj.wRSNCap = *(PWORD)pbyCaps;
|
||||||
|
//DBG_PRN_GRP14(("pbyCaps: %X\n", *pbyCaps));
|
||||||
|
//DBG_PRN_GRP14(("byDefaultK_as_PK: %X\n", pBSSList->byDefaultK_as_PK));
|
||||||
|
//DBG_PRN_GRP14(("byReplayIdx: %X\n", pBSSList->byReplayIdx));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pBSSList->bWPAValid = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Search RSN information in BSSList.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* byCmd - Search type
|
||||||
|
* byEncrypt- Encrcypt Type
|
||||||
|
* pBSSList - BSS list
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none.
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
BOOL
|
||||||
|
WPA_SearchRSN (
|
||||||
|
BYTE byCmd,
|
||||||
|
BYTE byEncrypt,
|
||||||
|
IN PKnownBSS pBSSList
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int ii;
|
||||||
|
BYTE byPKType = WPA_NONE;
|
||||||
|
|
||||||
|
if (pBSSList->bWPAValid == FALSE)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
switch(byCmd) {
|
||||||
|
case 0:
|
||||||
|
|
||||||
|
if (byEncrypt != pBSSList->byGKType)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (pBSSList->wPKCount > 0) {
|
||||||
|
for (ii = 0; ii < pBSSList->wPKCount; ii ++) {
|
||||||
|
if (pBSSList->abyPKType[ii] == WPA_AESCCMP)
|
||||||
|
byPKType = WPA_AESCCMP;
|
||||||
|
else if ((pBSSList->abyPKType[ii] == WPA_TKIP) && (byPKType != WPA_AESCCMP))
|
||||||
|
byPKType = WPA_TKIP;
|
||||||
|
else if ((pBSSList->abyPKType[ii] == WPA_WEP40) && (byPKType != WPA_AESCCMP) && (byPKType != WPA_TKIP))
|
||||||
|
byPKType = WPA_WEP40;
|
||||||
|
else if ((pBSSList->abyPKType[ii] == WPA_WEP104) && (byPKType != WPA_AESCCMP) && (byPKType != WPA_TKIP))
|
||||||
|
byPKType = WPA_WEP104;
|
||||||
|
}
|
||||||
|
if (byEncrypt != byPKType)
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
// if (pBSSList->wAuthCount > 0)
|
||||||
|
// for (ii=0; ii < pBSSList->wAuthCount; ii ++)
|
||||||
|
// if (byAuth == pBSSList->abyAuthType[ii])
|
||||||
|
// break;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Check if RSN IE makes sense.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pRSN - Pointer to the RSN IE.
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none.
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
BOOL
|
||||||
|
WPAb_Is_RSN (
|
||||||
|
IN PWLAN_IE_RSN_EXT pRSN
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (pRSN == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if ((pRSN->len >= 6) && // oui1(4)+ver(2)
|
||||||
|
(pRSN->byElementID == WLAN_EID_RSN_WPA) && MEMEqualMemory(pRSN->abyOUI, abyOUI01, 4) &&
|
||||||
|
(pRSN->wVersion == 1)) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
98
drivers/staging/vt6656/wpa.h
Normal file
98
drivers/staging/vt6656/wpa.h
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: wpa.h
|
||||||
|
*
|
||||||
|
* Purpose: Defines the macros, types, and functions for dealing
|
||||||
|
* with WPA informations.
|
||||||
|
*
|
||||||
|
* Author: Kyle Hsu
|
||||||
|
*
|
||||||
|
* Date: Jul 14, 2003
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __WPA_H__
|
||||||
|
#define __WPA_H__
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211HDR_H__)
|
||||||
|
#include "80211hdr.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
#define WPA_NONE 0
|
||||||
|
#define WPA_WEP40 1
|
||||||
|
#define WPA_TKIP 2
|
||||||
|
#define WPA_AESWRAP 3
|
||||||
|
#define WPA_AESCCMP 4
|
||||||
|
#define WPA_WEP104 5
|
||||||
|
#define WPA_AUTH_IEEE802_1X 1
|
||||||
|
#define WPA_AUTH_PSK 2
|
||||||
|
|
||||||
|
#define WPA_GROUPFLAG 0x02
|
||||||
|
#define WPA_REPLAYBITSSHIFT 2
|
||||||
|
#define WPA_REPLAYBITS 0x03
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
VOID
|
||||||
|
WPA_ClearRSN(
|
||||||
|
IN PKnownBSS pBSSList
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
WPA_ParseRSN(
|
||||||
|
IN PKnownBSS pBSSList,
|
||||||
|
IN PWLAN_IE_RSN_EXT pRSN
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
WPA_SearchRSN(
|
||||||
|
BYTE byCmd,
|
||||||
|
BYTE byEncrypt,
|
||||||
|
IN PKnownBSS pBSSList
|
||||||
|
);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
WPAb_Is_RSN(
|
||||||
|
IN PWLAN_IE_RSN_EXT pRSN
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __WPA_H__
|
373
drivers/staging/vt6656/wpa2.c
Normal file
373
drivers/staging/vt6656/wpa2.c
Normal file
@ -0,0 +1,373 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: wpa2.c
|
||||||
|
*
|
||||||
|
* Purpose: Handles the Basic Service Set & Node Database functions
|
||||||
|
*
|
||||||
|
* Functions:
|
||||||
|
*
|
||||||
|
* Revision History:
|
||||||
|
*
|
||||||
|
* Author: Yiching Chen
|
||||||
|
*
|
||||||
|
* Date: Oct. 4, 2004
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#if !defined(__WPA2_H__)
|
||||||
|
#include "wpa2.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__UMEM_H__)
|
||||||
|
#include "umem.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__WMGR_H__)
|
||||||
|
#include "wmgr.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Definitions -------------------------*/
|
||||||
|
static int msglevel =MSG_LEVEL_INFO;
|
||||||
|
//static int msglevel =MSG_LEVEL_DEBUG;
|
||||||
|
/*--------------------- Static Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Static Variables --------------------------*/
|
||||||
|
|
||||||
|
const BYTE abyOUIGK[4] = { 0x00, 0x0F, 0xAC, 0x00 };
|
||||||
|
const BYTE abyOUIWEP40[4] = { 0x00, 0x0F, 0xAC, 0x01 };
|
||||||
|
const BYTE abyOUIWEP104[4] = { 0x00, 0x0F, 0xAC, 0x05 };
|
||||||
|
const BYTE abyOUITKIP[4] = { 0x00, 0x0F, 0xAC, 0x02 };
|
||||||
|
const BYTE abyOUICCMP[4] = { 0x00, 0x0F, 0xAC, 0x04 };
|
||||||
|
|
||||||
|
const BYTE abyOUI8021X[4] = { 0x00, 0x0F, 0xAC, 0x01 };
|
||||||
|
const BYTE abyOUIPSK[4] = { 0x00, 0x0F, 0xAC, 0x02 };
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Static Functions --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Clear RSN information in BSSList.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pBSSNode - BSS list.
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none.
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
VOID
|
||||||
|
WPA2_ClearRSN (
|
||||||
|
IN PKnownBSS pBSSNode
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int ii;
|
||||||
|
|
||||||
|
pBSSNode->bWPA2Valid = FALSE;
|
||||||
|
|
||||||
|
pBSSNode->byCSSGK = WLAN_11i_CSS_CCMP;
|
||||||
|
for (ii=0; ii < 4; ii ++)
|
||||||
|
pBSSNode->abyCSSPK[ii] = WLAN_11i_CSS_CCMP;
|
||||||
|
pBSSNode->wCSSPKCount = 1;
|
||||||
|
for (ii=0; ii < 4; ii ++)
|
||||||
|
pBSSNode->abyAKMSSAuthType[ii] = WLAN_11i_AKMSS_802_1X;
|
||||||
|
pBSSNode->wAKMSSAuthCount = 1;
|
||||||
|
pBSSNode->sRSNCapObj.bRSNCapExist = FALSE;
|
||||||
|
pBSSNode->sRSNCapObj.wRSNCap = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Parse RSN IE.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pBSSNode - BSS list.
|
||||||
|
* pRSN - Pointer to the RSN IE.
|
||||||
|
* Out:
|
||||||
|
* none
|
||||||
|
*
|
||||||
|
* Return Value: none.
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
VOID
|
||||||
|
WPA2vParseRSN (
|
||||||
|
IN PKnownBSS pBSSNode,
|
||||||
|
IN PWLAN_IE_RSN pRSN
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
WORD m = 0, n = 0;
|
||||||
|
PBYTE pbyOUI;
|
||||||
|
BOOL bUseGK = FALSE;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"WPA2_ParseRSN: [%d]\n", pRSN->len);
|
||||||
|
|
||||||
|
WPA2_ClearRSN(pBSSNode);
|
||||||
|
|
||||||
|
if (pRSN->len == 2) { // ver(2)
|
||||||
|
if ((pRSN->byElementID == WLAN_EID_RSN) && (pRSN->wVersion == 1)) {
|
||||||
|
pBSSNode->bWPA2Valid = TRUE;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pRSN->len < 6) { // ver(2) + GK(4)
|
||||||
|
// invalid CSS, P802.11i/D10.0, p31
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// information element header makes sense
|
||||||
|
if ((pRSN->byElementID == WLAN_EID_RSN) &&
|
||||||
|
(pRSN->wVersion == 1)) {
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Legal 802.11i RSN\n");
|
||||||
|
|
||||||
|
pbyOUI = &(pRSN->abyRSN[0]);
|
||||||
|
if (MEMEqualMemory(pbyOUI, abyOUIWEP40, 4))
|
||||||
|
pBSSNode->byCSSGK = WLAN_11i_CSS_WEP40;
|
||||||
|
else if (MEMEqualMemory(pbyOUI, abyOUITKIP, 4))
|
||||||
|
pBSSNode->byCSSGK = WLAN_11i_CSS_TKIP;
|
||||||
|
else if (MEMEqualMemory(pbyOUI, abyOUICCMP, 4))
|
||||||
|
pBSSNode->byCSSGK = WLAN_11i_CSS_CCMP;
|
||||||
|
else if (MEMEqualMemory(pbyOUI, abyOUIWEP104, 4))
|
||||||
|
pBSSNode->byCSSGK = WLAN_11i_CSS_WEP104;
|
||||||
|
else if (MEMEqualMemory(pbyOUI, abyOUIGK, 4)) {
|
||||||
|
// invalid CSS, P802.11i/D10.0, p32
|
||||||
|
return;
|
||||||
|
} else
|
||||||
|
// any vendor checks here
|
||||||
|
pBSSNode->byCSSGK = WLAN_11i_CSS_UNKNOWN;
|
||||||
|
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"802.11i CSS: %X\n", pBSSNode->byCSSGK);
|
||||||
|
|
||||||
|
if (pRSN->len == 6) {
|
||||||
|
pBSSNode->bWPA2Valid = TRUE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pRSN->len >= 8) { // ver(2) + GK(4) + PK count(2)
|
||||||
|
pBSSNode->wCSSPKCount = *((PWORD) &(pRSN->abyRSN[4]));
|
||||||
|
j = 0;
|
||||||
|
pbyOUI = &(pRSN->abyRSN[6]);
|
||||||
|
|
||||||
|
for (i = 0; (i < pBSSNode->wCSSPKCount) && (j < sizeof(pBSSNode->abyCSSPK)/sizeof(BYTE)); i++) {
|
||||||
|
|
||||||
|
if (pRSN->len >= 8+i*4+4) { // ver(2)+GK(4)+PKCnt(2)+PKS(4*i)
|
||||||
|
if (MEMEqualMemory(pbyOUI, abyOUIGK, 4)) {
|
||||||
|
pBSSNode->abyCSSPK[j++] = WLAN_11i_CSS_USE_GROUP;
|
||||||
|
bUseGK = TRUE;
|
||||||
|
} else if (MEMEqualMemory(pbyOUI, abyOUIWEP40, 4)) {
|
||||||
|
// Invialid CSS, continue to parsing
|
||||||
|
} else if (MEMEqualMemory(pbyOUI, abyOUITKIP, 4)) {
|
||||||
|
if (pBSSNode->byCSSGK != WLAN_11i_CSS_CCMP)
|
||||||
|
pBSSNode->abyCSSPK[j++] = WLAN_11i_CSS_TKIP;
|
||||||
|
else
|
||||||
|
; // Invialid CSS, continue to parsing
|
||||||
|
} else if (MEMEqualMemory(pbyOUI, abyOUICCMP, 4)) {
|
||||||
|
pBSSNode->abyCSSPK[j++] = WLAN_11i_CSS_CCMP;
|
||||||
|
} else if (MEMEqualMemory(pbyOUI, abyOUIWEP104, 4)) {
|
||||||
|
// Invialid CSS, continue to parsing
|
||||||
|
} else {
|
||||||
|
// any vendor checks here
|
||||||
|
pBSSNode->abyCSSPK[j++] = WLAN_11i_CSS_UNKNOWN;
|
||||||
|
}
|
||||||
|
pbyOUI += 4;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"abyCSSPK[%d]: %X\n", j-1, pBSSNode->abyCSSPK[j-1]);
|
||||||
|
} else
|
||||||
|
break;
|
||||||
|
} //for
|
||||||
|
|
||||||
|
if (bUseGK == TRUE) {
|
||||||
|
if (j != 1) {
|
||||||
|
// invalid CSS, This should be only PK CSS.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (pBSSNode->byCSSGK == WLAN_11i_CSS_CCMP) {
|
||||||
|
// invalid CSS, If CCMP is enable , PK can't be CSSGK.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((pBSSNode->wCSSPKCount != 0) && (j == 0)) {
|
||||||
|
// invalid CSS, No valid PK.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pBSSNode->wCSSPKCount = (WORD)j;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"wCSSPKCount: %d\n", pBSSNode->wCSSPKCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
m = *((PWORD) &(pRSN->abyRSN[4]));
|
||||||
|
|
||||||
|
if (pRSN->len >= 10+m*4) { // ver(2) + GK(4) + PK count(2) + PKS(4*m) + AKMSS count(2)
|
||||||
|
pBSSNode->wAKMSSAuthCount = *((PWORD) &(pRSN->abyRSN[6+4*m]));;
|
||||||
|
j = 0;
|
||||||
|
pbyOUI = &(pRSN->abyRSN[8+4*m]);
|
||||||
|
for (i = 0; (i < pBSSNode->wAKMSSAuthCount) && (j < sizeof(pBSSNode->abyAKMSSAuthType)/sizeof(BYTE)); i++) {
|
||||||
|
if (pRSN->len >= 10+(m+i)*4+4) { // ver(2)+GK(4)+PKCnt(2)+PKS(4*m)+AKMSS(2)+AKS(4*i)
|
||||||
|
if (MEMEqualMemory(pbyOUI, abyOUI8021X, 4))
|
||||||
|
pBSSNode->abyAKMSSAuthType[j++] = WLAN_11i_AKMSS_802_1X;
|
||||||
|
else if (MEMEqualMemory(pbyOUI, abyOUIPSK, 4))
|
||||||
|
pBSSNode->abyAKMSSAuthType[j++] = WLAN_11i_AKMSS_PSK;
|
||||||
|
else
|
||||||
|
// any vendor checks here
|
||||||
|
pBSSNode->abyAKMSSAuthType[j++] = WLAN_11i_AKMSS_UNKNOWN;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"abyAKMSSAuthType[%d]: %X\n", j-1, pBSSNode->abyAKMSSAuthType[j-1]);
|
||||||
|
} else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pBSSNode->wAKMSSAuthCount = (WORD)j;
|
||||||
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"wAKMSSAuthCount: %d\n", pBSSNode->wAKMSSAuthCount);
|
||||||
|
|
||||||
|
n = *((PWORD) &(pRSN->abyRSN[6+4*m]));;
|
||||||
|
if (pRSN->len >= 12+4*m+4*n) { // ver(2)+GK(4)+PKCnt(2)+PKS(4*m)+AKMSSCnt(2)+AKMSS(4*n)+Cap(2)
|
||||||
|
pBSSNode->sRSNCapObj.bRSNCapExist = TRUE;
|
||||||
|
pBSSNode->sRSNCapObj.wRSNCap = *((PWORD) &(pRSN->abyRSN[8+4*m+4*n]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//ignore PMKID lists bcs only (Re)Assocrequest has this field
|
||||||
|
pBSSNode->bWPA2Valid = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*+
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Set WPA IEs
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* In:
|
||||||
|
* pMgmtHandle - Pointer to management object
|
||||||
|
* Out:
|
||||||
|
* pRSNIEs - Pointer to the RSN IE to set.
|
||||||
|
*
|
||||||
|
* Return Value: length of IEs.
|
||||||
|
*
|
||||||
|
-*/
|
||||||
|
UINT
|
||||||
|
WPA2uSetIEs(
|
||||||
|
IN PVOID pMgmtHandle,
|
||||||
|
OUT PWLAN_IE_RSN pRSNIEs
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PSMgmtObject pMgmt = (PSMgmtObject) pMgmtHandle;
|
||||||
|
PBYTE pbyBuffer = NULL;
|
||||||
|
UINT ii = 0;
|
||||||
|
PWORD pwPMKID = NULL;
|
||||||
|
|
||||||
|
if (pRSNIEs == NULL) {
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
if (((pMgmt->eAuthenMode == WMAC_AUTH_WPA2) ||
|
||||||
|
(pMgmt->eAuthenMode == WMAC_AUTH_WPA2PSK)) &&
|
||||||
|
(pMgmt->pCurrBSS != NULL)) {
|
||||||
|
/* WPA2 IE */
|
||||||
|
pbyBuffer = (PBYTE) pRSNIEs;
|
||||||
|
pRSNIEs->byElementID = WLAN_EID_RSN;
|
||||||
|
pRSNIEs->len = 6; //Version(2)+GK(4)
|
||||||
|
pRSNIEs->wVersion = 1;
|
||||||
|
//Group Key Cipher Suite
|
||||||
|
pRSNIEs->abyRSN[0] = 0x00;
|
||||||
|
pRSNIEs->abyRSN[1] = 0x0F;
|
||||||
|
pRSNIEs->abyRSN[2] = 0xAC;
|
||||||
|
if (pMgmt->byCSSGK == KEY_CTL_WEP) {
|
||||||
|
pRSNIEs->abyRSN[3] = pMgmt->pCurrBSS->byCSSGK;
|
||||||
|
} else if (pMgmt->byCSSGK == KEY_CTL_TKIP) {
|
||||||
|
pRSNIEs->abyRSN[3] = WLAN_11i_CSS_TKIP;
|
||||||
|
} else if (pMgmt->byCSSGK == KEY_CTL_CCMP) {
|
||||||
|
pRSNIEs->abyRSN[3] = WLAN_11i_CSS_CCMP;
|
||||||
|
} else {
|
||||||
|
pRSNIEs->abyRSN[3] = WLAN_11i_CSS_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pairwise Key Cipher Suite
|
||||||
|
pRSNIEs->abyRSN[4] = 1;
|
||||||
|
pRSNIEs->abyRSN[5] = 0;
|
||||||
|
pRSNIEs->abyRSN[6] = 0x00;
|
||||||
|
pRSNIEs->abyRSN[7] = 0x0F;
|
||||||
|
pRSNIEs->abyRSN[8] = 0xAC;
|
||||||
|
if (pMgmt->byCSSPK == KEY_CTL_TKIP) {
|
||||||
|
pRSNIEs->abyRSN[9] = WLAN_11i_CSS_TKIP;
|
||||||
|
} else if (pMgmt->byCSSPK == KEY_CTL_CCMP) {
|
||||||
|
pRSNIEs->abyRSN[9] = WLAN_11i_CSS_CCMP;
|
||||||
|
} else if (pMgmt->byCSSPK == KEY_CTL_NONE) {
|
||||||
|
pRSNIEs->abyRSN[9] = WLAN_11i_CSS_USE_GROUP;
|
||||||
|
} else {
|
||||||
|
pRSNIEs->abyRSN[9] = WLAN_11i_CSS_UNKNOWN;
|
||||||
|
}
|
||||||
|
pRSNIEs->len += 6;
|
||||||
|
|
||||||
|
// Auth Key Management Suite
|
||||||
|
pRSNIEs->abyRSN[10] = 1;
|
||||||
|
pRSNIEs->abyRSN[11] = 0;
|
||||||
|
pRSNIEs->abyRSN[12] = 0x00;
|
||||||
|
pRSNIEs->abyRSN[13] = 0x0F;
|
||||||
|
pRSNIEs->abyRSN[14] = 0xAC;
|
||||||
|
if (pMgmt->eAuthenMode == WMAC_AUTH_WPA2PSK) {
|
||||||
|
pRSNIEs->abyRSN[15] = WLAN_11i_AKMSS_PSK;
|
||||||
|
} else if (pMgmt->eAuthenMode == WMAC_AUTH_WPA2) {
|
||||||
|
pRSNIEs->abyRSN[15] = WLAN_11i_AKMSS_802_1X;
|
||||||
|
} else {
|
||||||
|
pRSNIEs->abyRSN[15] = WLAN_11i_AKMSS_UNKNOWN;
|
||||||
|
}
|
||||||
|
pRSNIEs->len +=6;
|
||||||
|
|
||||||
|
// RSN Capabilites
|
||||||
|
if (pMgmt->pCurrBSS->sRSNCapObj.bRSNCapExist == TRUE) {
|
||||||
|
MEMvCopy(&pRSNIEs->abyRSN[16], &pMgmt->pCurrBSS->sRSNCapObj.wRSNCap, 2);
|
||||||
|
} else {
|
||||||
|
pRSNIEs->abyRSN[16] = 0;
|
||||||
|
pRSNIEs->abyRSN[17] = 0;
|
||||||
|
}
|
||||||
|
pRSNIEs->len +=2;
|
||||||
|
|
||||||
|
if ((pMgmt->gsPMKIDCache.BSSIDInfoCount > 0) &&
|
||||||
|
(pMgmt->bRoaming == TRUE) &&
|
||||||
|
(pMgmt->eAuthenMode == WMAC_AUTH_WPA2)) {
|
||||||
|
// RSN PMKID
|
||||||
|
pwPMKID = (PWORD)(&pRSNIEs->abyRSN[18]); // Point to PMKID count
|
||||||
|
*pwPMKID = 0; // Initialize PMKID count
|
||||||
|
pbyBuffer = &pRSNIEs->abyRSN[20]; // Point to PMKID list
|
||||||
|
for (ii = 0; ii < pMgmt->gsPMKIDCache.BSSIDInfoCount; ii++) {
|
||||||
|
if (MEMEqualMemory(&pMgmt->gsPMKIDCache.BSSIDInfo[ii].abyBSSID[0], pMgmt->abyCurrBSSID, U_ETHER_ADDR_LEN)) {
|
||||||
|
(*pwPMKID) ++;
|
||||||
|
MEMvCopy(pbyBuffer, pMgmt->gsPMKIDCache.BSSIDInfo[ii].abyPMKID, 16);
|
||||||
|
pbyBuffer += 16;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (*pwPMKID != 0) {
|
||||||
|
pRSNIEs->len += (2 + (*pwPMKID)*16);
|
||||||
|
} else {
|
||||||
|
pbyBuffer = &pRSNIEs->abyRSN[18];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(pRSNIEs->len + WLAN_IEHDR_LEN);
|
||||||
|
}
|
||||||
|
return(0);
|
||||||
|
}
|
99
drivers/staging/vt6656/wpa2.h
Normal file
99
drivers/staging/vt6656/wpa2.h
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File: wpa2.h
|
||||||
|
*
|
||||||
|
* Purpose: Defines the macros, types, and functions for dealing
|
||||||
|
* with WPA2 informations.
|
||||||
|
*
|
||||||
|
* Author: Yiching Chen
|
||||||
|
*
|
||||||
|
* Date: Oct. 4, 2004
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __WPA2_H__
|
||||||
|
#define __WPA2_H__
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__TTYPE_H__)
|
||||||
|
#include "ttype.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211MGR_H__)
|
||||||
|
#include "80211mgr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__80211HDR_H__)
|
||||||
|
#include "80211hdr.h"
|
||||||
|
#endif
|
||||||
|
#if !defined(__BSSDB_H__)
|
||||||
|
#include "bssdb.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
#define MAX_PMKID_CACHE 16
|
||||||
|
|
||||||
|
typedef struct tagsPMKIDInfo {
|
||||||
|
BYTE abyBSSID[6];
|
||||||
|
BYTE abyPMKID[16];
|
||||||
|
} PMKIDInfo, *PPMKIDInfo;
|
||||||
|
|
||||||
|
typedef struct tagSPMKIDCache {
|
||||||
|
ULONG BSSIDInfoCount;
|
||||||
|
PMKIDInfo BSSIDInfo[MAX_PMKID_CACHE];
|
||||||
|
} SPMKIDCache, *PSPMKIDCache;
|
||||||
|
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Types ------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
VOID
|
||||||
|
WPA2_ClearRSN (
|
||||||
|
IN PKnownBSS pBSSNode
|
||||||
|
);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
WPA2vParseRSN (
|
||||||
|
IN PKnownBSS pBSSNode,
|
||||||
|
IN PWLAN_IE_RSN pRSN
|
||||||
|
);
|
||||||
|
|
||||||
|
UINT
|
||||||
|
WPA2uSetIEs(
|
||||||
|
IN PVOID pMgmtHandle,
|
||||||
|
OUT PWLAN_IE_RSN pRSNIEs
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __WPA2_H__
|
1028
drivers/staging/vt6656/wpactl.c
Normal file
1028
drivers/staging/vt6656/wpactl.c
Normal file
File diff suppressed because it is too large
Load Diff
90
drivers/staging/vt6656/wpactl.h
Normal file
90
drivers/staging/vt6656/wpactl.h
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* File: wpactl.h
|
||||||
|
*
|
||||||
|
* Purpose:
|
||||||
|
*
|
||||||
|
* Author: Lyndon Chen
|
||||||
|
*
|
||||||
|
* Date: March 1, 2005
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __WPACTL_H__
|
||||||
|
#define __WPACTL_H__
|
||||||
|
|
||||||
|
#if !defined(__DEVICE_H__)
|
||||||
|
#include "device.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
|
||||||
|
#if !defined(__IOWPA_H__)
|
||||||
|
#include "iowpa.h"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------- Export Definitions -------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
//WPA related
|
||||||
|
|
||||||
|
typedef enum { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP } wpa_alg;
|
||||||
|
typedef enum { CIPHER_NONE, CIPHER_WEP40, CIPHER_TKIP, CIPHER_CCMP,
|
||||||
|
CIPHER_WEP104 } wpa_cipher;
|
||||||
|
typedef enum { KEY_MGMT_802_1X, KEY_MGMT_PSK, KEY_MGMT_NONE,
|
||||||
|
KEY_MGMT_802_1X_NO_WPA, KEY_MGMT_WPA_NONE, KEY_MGMT_CCKM } wpa_key_mgmt;//20080717-02,<Modify> by James Li
|
||||||
|
|
||||||
|
#define AUTH_ALG_OPEN_SYSTEM 0x01
|
||||||
|
#define AUTH_ALG_SHARED_KEY 0x02
|
||||||
|
#define AUTH_ALG_LEAP 0x04
|
||||||
|
|
||||||
|
#define GENERIC_INFO_ELEM 0xdd
|
||||||
|
#define RSN_INFO_ELEM 0x30
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef ULONGLONG NDIS_802_11_KEY_RSC;
|
||||||
|
|
||||||
|
/*--------------------- Export Classes ----------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Variables --------------------------*/
|
||||||
|
|
||||||
|
/*--------------------- Export Functions --------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" { /* Assume C declarations for C++ */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
int wpa_set_wpadev(PSDevice pDevice, int val);
|
||||||
|
int wpa_ioctl(PSDevice pDevice, struct iw_point *p);
|
||||||
|
int wpa_set_keys(PSDevice pDevice, void *ctx, BOOL fcpfkernel);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __WPACL_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user