mirror of
https://github.com/YikeStone/MT7601u.git
synced 2025-08-02 19:04:09 +05:30
1018 lines
37 KiB
C
1018 lines
37 KiB
C
/****************************************************************************
|
|
* Ralink Tech Inc.
|
|
* Taiwan, R.O.C.
|
|
*
|
|
* (c) Copyright 2002, Ralink Technology, Inc.
|
|
*
|
|
* All rights reserved. Ralink's source code is an unpublished work and the
|
|
* use of a copyright notice does not imply otherwise. This source code
|
|
* contains confidential trade secret material of Ralink Tech. Any attemp
|
|
* or participation in deciphering, decoding, reverse engineering or in any
|
|
* way altering the source code is stricitly prohibited, unless the prior
|
|
* written consent of Ralink Technology, Inc. is obtained.
|
|
***************************************************************************/
|
|
|
|
/****************************************************************************
|
|
|
|
Abstract:
|
|
|
|
Define all structures, data types that rtmp.h needed in this file. Don't
|
|
put any sturctures and functions definition which refer to RTMP_ADAPTER
|
|
Here.
|
|
|
|
|
|
***************************************************************************/
|
|
|
|
#ifdef P2P_SUPPORT
|
|
|
|
|
|
#ifndef __P2P_CMM_H__
|
|
#define __P2P_CMM_H__
|
|
|
|
#include "wfa_p2p.h"
|
|
|
|
#ifdef WFD_SUPPORT
|
|
#include "wfd_cmm.h"
|
|
#endif /* WFD_SUPPORT */
|
|
|
|
/* Marco for interna use */
|
|
#define P2P_INF_ON(_pAd) \
|
|
(((_pAd)->flg_p2p_init) \
|
|
&& ((_pAd)->p2p_dev) \
|
|
&& (RtmpOSNetDevIsUp((_pAd)->p2p_dev) == TRUE))
|
|
|
|
#define IS_P2P_GO_NEG(_A) (((_A)->P2pCfg.P2PConnectState == P2P_ANY_IN_FORMATION_AS_CLIENT) || ((_A)->P2pCfg.P2PConnectState == P2P_ANY_IN_FORMATION_AS_GO))
|
|
|
|
#define IS_P2P_REGISTRA(_A) (((_A)->P2pCfg.P2PConnectState == P2P_WPS_REGISTRA))
|
|
#define IS_P2P_ENROLLEE(_A) (((_A)->P2pCfg.P2PConnectState == P2P_DO_WPS_ENROLLEE))
|
|
#define IS_P2P_PROVISIONING(_A) (IS_P2P_ENROLLEE(_A) || IS_P2P_REGISTRA(_A))
|
|
/*#define IS_P2P_GO_WPA2PSKING(_A) ((_A)->P2pCfg.P2PConnectState == P2P_GO_ASSOC_AUTH) */
|
|
/*#define IS_P2P_CLIENT_WPA2PSKING(_A) ((_A)->P2pCfg.P2PConnectState == P2P_I_AM_CLIENT_ASSOC_AUTH) */
|
|
|
|
/*#define IS_P2P_GO_OP(_A) (((_A)->P2pCfg.P2PConnectState >= P2P_I_AM_GO_OP)) */
|
|
/*#define IS_P2P_CLIENT_OP(_A) (((_A)->P2pCfg.P2PConnectState == P2P_I_AM_CLIENT_OP)) */
|
|
/*#define IS_P2P_OP(_A) (IS_P2P_GO_OP(_A) || IS_P2P_CLIENT_OP(_A)) */
|
|
|
|
#define IS_P2P_CONNECT_IDLE(_A) (((_A)->P2pCfg.P2PConnectState) == P2P_CONNECT_IDLE)
|
|
#define IS_P2P_CONNECTING(_A) (((_A)->P2pCfg.P2PConnectState) > P2P_CONNECT_IDLE)
|
|
#define IS_P2P_GO_NEGOING(_A) (((_A)->P2pCfg.P2PConnectState < P2P_DO_GO_SCAN_BEGIN) && ((_A)->P2pCfg.P2PConnectState > P2P_CONNECT_IDLE))
|
|
#define IS_P2P_GROUP_FORMING(_A) (((_A)->P2pCfg.P2PConnectState <= P2P_WPS_REGISTRA) && ((_A)->P2pCfg.P2PConnectState > P2P_CONNECT_IDLE))
|
|
#define IS_P2P_INVITING(_A) (((_A)->P2pCfg.P2PConnectState == P2P_INVITE))
|
|
/* Check for Peer's State. */
|
|
#define IS_P2P_PEER_CLIENT_OP(_C) (((_C)->P2pClientState <= P2PSTATE_CLIENT_FIND)&& ((_C)->P2pClientState >= P2PSTATE_CLIENT_OPERATING))
|
|
#define IS_P2P_PEER_PROVISIONING(_C) (((_C)->P2pClientState == P2PSTATE_CLIENT_WPS)&& ((_C)->P2pClientState == P2PSTATE_GO_WPS))
|
|
#define IS_P2P_PEER_WPAPSK(_C) (((_C)->P2pClientState <= P2PSTATE_CLIENT_ASSOC)&& ((_C)->P2pClientState >= P2PSTATE_CLIENT_AUTH))
|
|
#define IS_P2P_PEER_GO_OP(_C) (((_C)->P2pClientState <= P2PSTATE_GO_FIND)&& ((_C)->P2pClientState >= P2PSTATE_GO_OPERATING))
|
|
#define IS_P2P_PEER_OP(_C) ((IS_P2P_PEER_CLIENT_OP(_C)) || (IS_P2P_PEER_GO_OP(_C)))
|
|
#define IS_P2P_PEER_DISCOVERY(_C) (((_C)->P2pClientState <= P2PSTATE_DISCOVERY_CLIENT)&& ((_C)->P2pClientState >= P2PSTATE_DISCOVERY))
|
|
#define IS_P2PPEER_CLIENT_GO_FORM(_C) (((_C)->P2pClientState <= P2PSTATE_GO_COMFIRM_ACK_SUCCESS)&& ((_C)->P2pClientState >= P2PSTATE_DISCOVERY))
|
|
|
|
/* P2P Control Reg. */
|
|
#define IS_MANAGED_ON(_A) ((_A->P2pCfg.P2pControl.word & P2P_CONTROL_REG_MANAGED) != 0)
|
|
#define IS_PERSISTENT_ON(_A) ((_A->P2pCfg.P2pControl.word & P2P_CONTROL_REG_PERSISTENT) != 0)
|
|
#define IS_INVITE_ON(_A) ((_A->P2pCfg.P2pControl.word & P2P_CONTROL_REG_INVITE) != 0)
|
|
#define IS_INTRA_BSS_ON(_A) ((_A->P2pCfg.P2pControl.word & P2P_CONTROL_REG_INTRA_BSS) != 0)
|
|
#define IS_CLIENT_DISCOVERY_ON(_A) ((_A->P2pCfg.P2pControl.word & P2P_CONTROL_REG_CLI_DISCOVERY) != 0)
|
|
#define IS_EXT_LISTEN_ON(_A) ((_A->P2pCfg.P2pControl.word & P2P_CONTROL_REG_EXT_LISTEN) != 0)
|
|
#define IS_SERVICE_DISCOVERY_ON(_A) ((_A->P2pCfg.P2pControl.word & P2P_CONTROL_REG_SERVICE_DISCOVERY) != 0)
|
|
#define IS_OPPS_ON(_A) ((_A->P2pCfg.P2pControl.word & P2P_CONTROL_REG_OPPS) != 0)
|
|
#define IS_SW_NOA_TIMER(_A) ((_A->P2pCfg.P2pControl.word & P2P_CONTROL_REG_SW_NOA) != 0)
|
|
#define IS_P2P_SUPPORT_EXT_LISTEN(_A) (((_A)->P2pCfg.ExtListenInterval != 0) && ((_A)->P2pCfg.ExtListenPeriod != 0) && ((_A)->P2pCfg.P2pControl.field.ExtendListen == 1))
|
|
#define IS_P2P_ABSENCE(_A) (((_A)->P2pCfg.bPreKeepSlient) || ((_A)->P2pCfg.bKeepSlient))
|
|
|
|
/* P2P Discovery State Machine. */
|
|
#define IS_P2P_LISTEN(_pAd) \
|
|
(_pAd->P2pCfg.DiscCurrentState == P2P_DISC_LISTEN)
|
|
#define IS_P2P_SEARCH(_pAd) \
|
|
(_pAd->P2pCfg.DiscCurrentState == P2P_DISC_SEARCH)
|
|
#define IS_P2P_SCAN(_pAd) \
|
|
(_pAd->P2pCfg.DiscCurrentState == P2P_DISC_SCAN)
|
|
#define IS_P2P_DEVICE_DISCOVERING(_pAd) \
|
|
(_pAd->P2pCfg.CtrlCurrentState == P2P_CTRL_DISCOVERY)
|
|
|
|
/* Definition */
|
|
#define P2P_WSC_CONF_MTHD_DEFAULT(_pAd) \
|
|
_pAd->P2pCfg.WscMode = WSC_PIN_MODE; \
|
|
_pAd->P2pCfg.ConfigMethod = 0x188; \
|
|
_pAd->P2pCfg.Dpid = DEV_PASS_ID_NOSPEC;
|
|
|
|
/*
|
|
* P2P CTRL State machine: states, events, total function
|
|
*/
|
|
typedef enum _P2P_CTRL_STATE
|
|
{
|
|
P2P_CTRL_IDLE,
|
|
P2P_CTRL_DISCOVERY,
|
|
P2P_CTRL_GROUP_FORMATION,
|
|
P2P_CTRL_DONE,
|
|
P2P_CTRL_MAX_STATES,
|
|
} P2P_CTRL_STATE;
|
|
|
|
typedef enum _P2P_CTRL_EVENT
|
|
{
|
|
P2P_CTRL_DISC_EVT,
|
|
P2P_CTRL_DISC_CANL_EVT,
|
|
P2P_CTRL_DISC_DONE_EVT,
|
|
P2P_CTRL_GO_BACK_TO_OP_CH_EVT,
|
|
P2P_CTRL_GO_NEGO_EVT,
|
|
P2P_CTRL_GO_NEGO_CANL_EVT,
|
|
P2P_CTRL_GO_NEGO_DONE_EVT,
|
|
P2P_CTRL_MAX_EVENTS,
|
|
} P2P_CTRL_EVENT;
|
|
|
|
#define P2P_CTRL_FUNC_SIZE (P2P_CTRL_MAX_STATES * P2P_CTRL_MAX_EVENTS)
|
|
|
|
|
|
/*
|
|
* P2P DISC state machine: states, evvents, total function
|
|
*/
|
|
typedef enum _P2P_DISC_STATE
|
|
{
|
|
P2P_DISC_IDLE,
|
|
P2P_DISC_SCAN,
|
|
P2P_DISC_LISTEN,
|
|
P2P_DISC_SEARCH,
|
|
P2P_DISC_MAX_STATES,
|
|
} P2P_DISC_STATE;
|
|
|
|
typedef enum _P2P_DISC_EVENT
|
|
{
|
|
P2P_DISC_SCAN_CMD_EVT,
|
|
P2P_DISC_LISTEN_CMD_EVT,
|
|
P2P_DISC_SEARCH_CMD_EVT,
|
|
P2P_DISC_CANL_CMD_EVT,
|
|
P2P_DISC_PEER_PROB_REQ,
|
|
P2P_DISC_PEER_PROB_RSP,
|
|
P2P_DISC_MAX_EVENTS,
|
|
} P2P_DISC_EVENT;
|
|
|
|
#define P2P_DISC_FUNC_SIZE (P2P_DISC_MAX_STATES * P2P_DISC_MAX_EVENTS)
|
|
|
|
/*
|
|
* P2P GO_FORM state machine: states, evvents, total function
|
|
*/
|
|
typedef enum _P2P_GO_FORM_STATE
|
|
{
|
|
P2P_GO_FORM_IDLE,
|
|
P2P_WAIT_GO_FORM_RSP,
|
|
P2P_WAIT_GO_FORM_CONF,
|
|
P2P_GO_FORM_DONE,
|
|
P2P_GO_FORM_PROV,
|
|
P2P_WAIT_GO_FORM_PROV_RSP,
|
|
P2P_GO_FORM_INVITE,
|
|
P2P_WAIT_GO_FORM_INVITE_RSP,
|
|
P2P_WAIT_GO_FORM_DEV_DISC_RSP,
|
|
P2P_WAIT_GO_FORM_SRV_DISC_RSP,
|
|
P2P_GO_FORM_MAX_STATES,
|
|
} P2P_GO_FORM_STATE;
|
|
|
|
typedef enum _P2P_GO_FORM_EVENT
|
|
{
|
|
P2P_GO_NEGO_REQ_CMD_EVT,
|
|
P2P_PEER_GO_NEGO_REQ_EVT,
|
|
P2P_GO_NEGO_RSP_EVT,
|
|
P2P_PEER_GO_NEGO_RSP_EVT,
|
|
P2P_GO_NEGO_CONFIRM_EVT,
|
|
P2P_PEER_GO_NEGO_CONFIRM_EVT,
|
|
P2P_GO_NEGO_PROV_REQ_CMD_EVT,
|
|
P2P_PEER_GO_NEGO_PROV_REQ_EVT,
|
|
P2P_GO_NEGO_PROV_RSP_EVT,
|
|
P2P_PEER_GO_NEGO_PROV_RSP_EVT,
|
|
P2P_GO_NEGO_CANCEL_EVT,
|
|
P2P_PEER_INVITE_REQ_EVT,
|
|
P2P_PEER_INVITE_RSP_EVT,
|
|
P2P_DEV_DISC_REQ_CMD_EVT,
|
|
P2P_PEER_DEV_DISC_REQ_EVT,
|
|
P2P_DEV_DISC_RSP_EVT,
|
|
P2P_PEER_DEV_DISC_RSP_EVT,
|
|
P2P_START_COMMUNICATE_CMD_EVT,
|
|
P2P_SEND_PASSED_CMD_EVT,
|
|
P2P_GO_NEGO_MAX_EVENTS,
|
|
} P2P_GO_FORM_EVENT;
|
|
|
|
typedef enum _P2P_LINK_DOWN_TYPE
|
|
{
|
|
P2P_DISCONNECTED,
|
|
P2P_CONNECT_FAIL,
|
|
} P2P_LINK_DOWN_TYPE;
|
|
|
|
#define P2P_GO_FORM_FUNC_SIZE (P2P_GO_FORM_MAX_STATES * P2P_GO_NEGO_MAX_EVENTS)
|
|
|
|
/*
|
|
* P2P state machine: states, events, total function #
|
|
*/
|
|
#define MT2_MAX_PEER_SUPPORT 3
|
|
typedef enum _P2P_ACTION_STATE
|
|
{
|
|
P2P_IDLE_STATE,
|
|
MAX_P2P_STATE,
|
|
} P2P_ACTION_STATE;
|
|
|
|
typedef enum _P2P_ACTION_EVENT
|
|
{
|
|
MT2_PEER_P2P_NOA,
|
|
MT2_PEER_P2P_PRESENCE_REQ,
|
|
MT2_PEER_P2P_PRESENCE_RSP,
|
|
MT2_PEER_P2P_GO_DIS_REQ,
|
|
MT2_MLME_P2P_NOA,
|
|
MT2_MLME_P2P_PRESENCE_REQ,
|
|
MT2_MLME_P2P_PRESENCE_RSP,
|
|
MT2_MLME_P2P_GO_DIS_REQ,
|
|
MT2_MLME_P2P_GAS_INT_REQ,
|
|
MT2_MLME_P2P_GAS_INT_RSP,
|
|
MT2_MLME_P2P_GAS_CB_REQ,
|
|
MT2_MLME_P2P_GAS_CB_RSP,
|
|
MAX_P2P_MSG,
|
|
} P2P_ACTION_EVENT;
|
|
|
|
#define P2P_ACTION_FUNC_SIZE (MAX_P2P_STATE * MAX_P2P_MSG)
|
|
|
|
|
|
/* ----- General ----- */
|
|
|
|
/* P2P Oprtation Mode */
|
|
#define P2P_ONLY (1<<0) /* STA or P2P in single interface */
|
|
#define P2P_CONCURRENT (1<<1) /* STA and P2P in different interface */
|
|
|
|
#define P2P_IS_GO 1
|
|
#define P2P_IS_CLIENT 2
|
|
#define P2P_IS_DEVICE 3
|
|
#define P2P_IS_CLIENT_IN_GROUP 4
|
|
|
|
#define P2P_SET_FLAG(_M, _F) ((_M)->P2pFlag |= (_F))
|
|
#define P2P_CLEAR_FLAG(_M, _F) ((_M)->P2pFlag &= ~(_F))
|
|
#define P2P_TEST_FLAG(_M, _F) (((_M)->P2pFlag & (_F)) != 0)
|
|
#define P2P_TEST_FLAGS(_M, _F) (((_M)->P2pFlag & (_F)) == (_F))
|
|
|
|
|
|
#define P2PFLAG_PROVISIONED 0x01
|
|
#define P2PFLAG_INVITE_ENABLED 0x02
|
|
#define P2PFLAG_DEVICE_DISCOVERABLE 0x04
|
|
|
|
#define P2P_OUI 0x099a6f50 /* spec. P2P OUI */
|
|
#define P2P_RANDOM_BASE 35 /*; 3 second. */
|
|
#define P2P_RANDOM_WPS_BASE 10 /*; 5 second. */
|
|
#define P2P_RANDOM_BIAS 10 /*; 2 second. */
|
|
#define P2P_RANDOM_PERST_BIAS 60 /*; 2 second. */
|
|
#define P2P_SCAN_CHANNEL_STEP 11
|
|
#define P2P_SCAN_PERIOD 1800 /* unit : 100ms. Scan period how long ? 2min ? */
|
|
#define P2P_SCAN_SHORTPERIOD 100 /* unit : 100ms. Scan period how long ? 2min ? */
|
|
#define P2P_EXT_LISTEN_INTERVAL 4000 /* unit is 1ms */
|
|
#define P2P_EXT_LISTEN_PERIOD 1000 /* unit is 1ms */
|
|
|
|
#define P2P_CHECK_GO_TIMER 300000 /* 3 minutes */
|
|
#define P2P_CHECK_CLIENT_TIMER 30000 /* 30 seconds */
|
|
#define P2P_WSC_TIMER 120000 /* 120 seconds */
|
|
#define P2P_TRANSMIT_TIMER 500 /* 500 ms */
|
|
|
|
|
|
#define ONETU 100
|
|
|
|
/* P2P Tab index */
|
|
#define P2P_NOT_FOUND 0xFF
|
|
|
|
#define MINOR_REASON_SUCCESS 0
|
|
#define MINOR_REASON_CROSS_CONNECT 1
|
|
#define MINOR_REASON_MANAGED_BIT_ZERO 2
|
|
#define MINOR_REASON_COEXIST_PARM_BAD 3
|
|
#define MINOR_REASON_MANAGED_BIT_ONE 4
|
|
|
|
|
|
/* Invittion Flags */
|
|
#define P2P_INVITE_FLAG_REINVOKE 1
|
|
|
|
|
|
#define GROUP_MODE_TEMP 1
|
|
#define GROUP_MODE_PERSISTENT 2
|
|
#define MAX_P2P_GROUP_SIZE 30 /* Max mactab size(32) - 2 */
|
|
#define MAX_P2P_TABLE_SIZE 8 /* Save Presistent entry */
|
|
#define PROFILE_P2P 1
|
|
#define PROFILE_WPSE 2
|
|
#define P2P_DEVICE_TYPE_LEN 8
|
|
#define P2P_DEVICE_NAME_LEN 32
|
|
|
|
/* P2P Scan */
|
|
#define P2P_STOP_SCAN 0
|
|
#define P2P_SCANNING 1
|
|
#define P2P_STOP_SCAN_AND_LISTEN 2
|
|
|
|
#define CONNECTING_OR_NO_LINK 0
|
|
#define P2P_GO 1
|
|
#define P2P_CLIENT 2
|
|
#define P2P_DEVICE 3
|
|
#define TDLS_LINKED 4
|
|
#define WFD_SESSION_UNAVALIBLE 5
|
|
#define WFD_PEER_PC_P2P 6
|
|
#define WFD_PEER_TDLS_WEAK_SECURITY 7
|
|
|
|
/* Use macro to define the default value of bConfirmByUI. */
|
|
#ifdef HE_BD_SUPPORT
|
|
#define CONFIRM_BY_UI_DEFAULT TRUE
|
|
#else
|
|
#define CONFIRM_BY_UI_DEFAULT FALSE
|
|
#endif
|
|
|
|
/* Describe the peer's state when I am performing P2P Operation with the peer. */
|
|
typedef enum _P2pClientState
|
|
{
|
|
P2PSTATE_NONE,
|
|
P2PSTATE_DISCOVERY, /* Not associated. Because need to get SSID from Probe Response. So add this state. */
|
|
P2PSTATE_DISCOVERY_GO, /* this device is a GO. has beacon */
|
|
P2PSTATE_DISCOVERY_CLIENT, /* this device is a client that associates with a GO. (in a p2p group.) */
|
|
P2PSTATE_DISCOVERY_UNKNOWN, /* Need to scan to decide this peer's rule is GO or Client or Device. */
|
|
P2PSTATE_CLIENT_DISCO_COMMAND, /* Do Client Discovery. */
|
|
P2PSTATE_WAIT_GO_DISCO_ACK, /* Do Client Discovery. */
|
|
P2PSTATE_WAIT_GO_DISCO_ACK_SUCCESS, /* Do Client Discovery. */
|
|
P2PSTATE_GO_DISCO_COMMAND, /* Need to send to this GO when doing Client Discovery */
|
|
P2PSTATE_INVITE_COMMAND, /* Wait to send Invite Req. */
|
|
P2PSTATE_CONNECT_COMMAND, /* wait to send Go Nego Req. */
|
|
P2PSTATE_PROVISION_COMMAND, /* Provision first, then connect. */
|
|
P2PSTATE_SERVICE_DISCOVER_INIT_COMMAND, /* Do Service Discovery. */
|
|
P2PSTATE_SERVICE_COMEBACK_COMMAND, /* Do Service Discovery. */
|
|
P2PSTATE_SENT_INVITE_REQ,
|
|
P2PSTATE_SENT_PROVISION_REQ,
|
|
P2PSTATE_SENT_PROVISION_RSP,
|
|
P2PSTATE_WAIT_REVOKEINVITE_RSP_ACK, /* 15 */
|
|
P2PSTATE_REVOKEINVITE_RSP_ACK_SUCCESS,
|
|
P2PSTATE_SENT_GO_NEG_REQ,
|
|
P2PSTATE_GOT_GO_RSP_INFO_UNAVAI, /* got GO Nego Rsp with Status : information unavailable. Still need 120 sec more to time out. */
|
|
P2PSTATE_WAIT_GO_COMFIRM,
|
|
P2PSTATE_WAIT_GO_COMFIRM_ACK,
|
|
P2PSTATE_GOT_GO_COMFIRM,
|
|
P2PSTATE_GO_COMFIRM_ACK_SUCCESS,
|
|
P2PSTATE_REINVOKEINVITE_TILLCONFIGTIME,
|
|
P2PSTATE_GO_DONE,
|
|
P2PSTATE_GO_WPS, /* Internal registra */
|
|
P2PSTATE_GO_AUTH,
|
|
P2PSTATE_GO_ASSOC, /*30 */
|
|
P2PSTATE_CLIENT_WPS, /* Enrollee */
|
|
P2PSTATE_CLIENT_WPS_DONE, /* Enrollee */
|
|
P2PSTATE_CLIENT_AUTH,
|
|
P2PSTATE_CLIENT_ASSOC,
|
|
P2PSTATE_CLIENT_OPERATING, /* 35 */
|
|
P2PSTATE_CLIENT_ABSENCE,
|
|
P2PSTATE_CLIENT_SCAN, /* Already in P2P group, but go to scan phase. */
|
|
P2PSTATE_CLIENT_FIND, /* Already in P2P group, but go to find phase. */
|
|
P2PSTATE_GO_OPERATING,
|
|
P2PSTATE_GO_ABSENCE, /*During absence period. */
|
|
P2PSTATE_GO_SCAN, /* Already in P2P group, but go to scan phase. */
|
|
P2PSTATE_GO_FIND, /* Already in P2P group, but go to find phase. */
|
|
/* Go can support legacy station not use WiFi Direct Spec to connect to. Assign following 2 states to such client. */
|
|
P2PSTATE_NONP2P_PSK, /* legacy client that uses WPA2PSK-AES to connect to GO(me). */
|
|
P2PSTATE_NONP2P_WPS, /* Legacy client that uses WPS to connect to GO(me). */
|
|
P2PSTATE_MAX_STATE,
|
|
} P2P_CLIENT_STATE;
|
|
|
|
typedef VOID (*p2p_cmd_handler) (VOID *pAD, VOID *pElem);
|
|
typedef struct _P2P_CMD_STRUCT
|
|
{
|
|
UCHAR Addr[MAC_ADDR_LEN];
|
|
UCHAR Idx;
|
|
/*USHORT ConfigMethod; */
|
|
|
|
} P2P_CMD_STRUCT, *PP2P_CMD_STRUCT;
|
|
|
|
/* Describe the current discovery state and provistioning state if WifI direct is enabled. */
|
|
typedef enum _P2pDiscoProvState
|
|
{
|
|
P2P_DISABLE,
|
|
P2P_ENABLE_LISTEN_ONLY, /* In this state, only reponse to P2P Probe req. that has P2P IE. enable listen mode. */
|
|
/* P2P_IDLE, */
|
|
/* P2P_SEARCH_COMMAND, */ /* 5 */
|
|
P2P_SCAN,
|
|
P2P_SEARCH, /* 6 */
|
|
/* P2P_SEARCH_COMPLETE, */
|
|
/* P2P_LISTEN_COMMAND, */
|
|
P2P_LISTEN, /* 9 */
|
|
/* P2P_LISTEN_COMPLETE, */
|
|
/* P2PGO_SEARCH, */ /* I am alreayd an GO, But go to other listen channel perform search */
|
|
/* P2PGO_SEARCH_COMMAND, */ /* go to other listen channel perform search */
|
|
P2P_MAX_DISC_STATE,
|
|
} P2P_DISCOPROV_STATE;
|
|
|
|
/* Describe the current state when performing P2P Operation. */
|
|
typedef enum _P2pConnectState
|
|
{
|
|
P2P_CONNECT_NOUSE,
|
|
P2P_CONNECT_IDLE = 13, /* Set to bigger number, so don't overlap with P2P_DISCOPROV_STATE */
|
|
P2P_INVITE,
|
|
P2P_ANY_IN_FORMATION_AS_GO, /* 15 */
|
|
P2P_ANY_IN_FORMATION_AS_CLIENT,
|
|
P2P_DO_GO_NEG_DONE_CLIENT, /* 17 */
|
|
P2P_DO_GO_SCAN_OP_BEGIN, /* 18 */
|
|
P2P_DO_GO_SCAN_OP_DONE, /* 19 */
|
|
P2P_DO_GO_SCAN_BEGIN,
|
|
P2P_DO_GO_SCAN_DONE,
|
|
P2P_WPS_REGISTRA, /* 22 */
|
|
P2P_DO_WPS_ENROLLEE,
|
|
/* P2P_DO_WPS_ENROLLEE_DONE, */
|
|
/* P2P_GO_ASSOC_AUTH, */
|
|
/* P2P_I_AM_CLIENT_ASSOC_AUTH, */
|
|
/* P2P_I_AM_CLIENT_OP, */ /* 27 I am operating as client */
|
|
/* P2P_I_AM_GO_OP, */ /* 28 I am operatin as Go. */
|
|
/* P2PGO_DO_WPS_REGISTRA, */ /* 29 */
|
|
/* P2PGO_I_AM_GO_ASSOC_AUTH, */
|
|
} P2P_CONNECT_STATE;
|
|
|
|
|
|
|
|
#define CONFIG_MODE_DISABLE_P2P_WPSE 0 /* Uncheck "enable WFD feature" #define CONFIG_MODE_DISABLE_WIFI_DIRECT_WPSE 0 */
|
|
#define CONFIG_MODE_ENABLE_P2P 1 /* set device name to driver when check "enable WFD feature" */
|
|
#define CONFIG_MODE_P2P_SCAN 2 /* set device name to driver when press "Scan" */
|
|
#define CONFIG_MODE_CONNECT_P2P 3 /* set all config (RTMP_WIFI_DIRECT_CONFIG) to driver #define CONFIG_MODE_ACTIVATE_WIFI_DIRECT 1 */
|
|
#define CONFIG_MODE_ACTIVATE_WPSE 4 /* #define CONFIG_MODE_ACTIVATE_WPSE 2 */
|
|
#define CONFIG_MODE_DELETE_ACTIVE_P2P 5 /* set to actived config (RTMP_WIFI_DIRECT_CONFIG) to driver (driver will send disconnect event and clean persistent table ) #define CONFIG_MODE_DELETE_ACTIVED_WIFI_DIRECT 3 */
|
|
#define CONFIG_MODE_DISCONNECT_P2P 6 /* do nothing in UI when press "Disconnect" #define CONFIG_MODE_DISCONNECT_WIFI_DIRECT 4 */
|
|
#define CONFIG_MODE_DELETE_PERST_P2P 7 /* set inactive but persistent config (RTMP_WIFI_DIRECT_CONFIG) to driver when delete perseistent profile from profile list #define CONFIG_MODE_DELETE_PERST_WIFI_DIRECT 5 */
|
|
#define CONFIG_MODE_PROVISION_THIS 8 /* */
|
|
#define CONFIG_MODE_SET_GO_WPS 9 /* When I am GO. Set WPS for indivial client. */
|
|
#define CONFIG_MODE_SERVICE_DISCOVERY 10 /* Start SErvice Discovery */
|
|
|
|
#define P2P_PHYMODE_LEGACY_ONLY 0
|
|
#define P2P_PHYMODE_ENABLE_11N_20 1
|
|
#define P2P_PHYMODE_ENABLE_11N_40 2
|
|
|
|
#define P2P_GROUP_MODE_TEMP 1
|
|
#define P2P_GROUP_MODE_PERSISTENT 2
|
|
|
|
#define P2P_WPSE_PIN_METHOD 0x10000000
|
|
#define P2P_WPSE_PBC_METHOD 0x20000000
|
|
#define P2P_WPSE_SMPBC_METHOD 0x30000000
|
|
|
|
#define RALINKOUIMODE_IPREQ 0x30
|
|
#define RALINKOUIMODE_IPRSP 0x31
|
|
#define RALINKOUIMODE_MBRIPRSP 0x32 /* Group Member ip notify */
|
|
|
|
/*define P2P_REG_CM_LABEL 1 */ /* Default I broadcast my config method is label. (DefaultConfigMethod:2) */
|
|
#define P2P_REG_CM_DISPLAY 1 /* Default I broadcast my config method is display. */
|
|
#define P2P_REG_CM_KEYPAD 2 /* Default I broadcast my config method is keypad. */
|
|
#define P2P_REG_CM_PBC 3 /* Default I broadcast my config method is pbc. (DefaultConfigMethod:2) */
|
|
|
|
/* WSC connection mode */
|
|
/*define WSC_PIN_MODE 0x10000000 */ /* Default PIN */
|
|
/*define WSC_PBC_MODE 0x20000000 */
|
|
#define WSC_PIN_MODE_USER_SPEC 0x40000000
|
|
#define WSC_PIN_MODE_REGISTRA_SPEC 0x80000000
|
|
|
|
#define P2P_CONTROL_REG_ENABLE 0x00000001
|
|
#define P2P_CONTROL_REG_MANAGED 0x00000002
|
|
#define P2P_CONTROL_REG_PERSISTENT 0x00000004
|
|
#define P2P_CONTROL_REG_INVITE 0x00000008
|
|
#define P2P_CONTROL_REG_INTENT 0x000000F0
|
|
#define P2P_CONTROL_REG_LISTEN_CHANNEL 0x00000F00
|
|
#define P2P_CONTROL_REG_CONFIG_MHD 0x00007000
|
|
#define P2P_CONTROL_REG_INTRA_BSS 0x00008000
|
|
#define P2P_CONTROL_REG_OP_CHANNEL 0x000F0000
|
|
#define P2P_CONTROL_REG_CLI_DISCOVERY 0x00100000
|
|
#define P2P_CONTROL_REG_EXT_LISTEN 0x00200000
|
|
#define P2P_CONTROL_REG_SERVICE_DISCOVERY 0x00400000
|
|
#define P2P_CONTROL_REG_OPPS 0x00800000
|
|
#define P2P_CONTROL_REG_GROUP_LIMIT 0x01000000
|
|
#define P2P_CONTROL_REG_DISABLE_CRS_CONN 0x02000000
|
|
#define P2P_CONTROL_REG_SW_NOA 0x80000000
|
|
|
|
/* key information */
|
|
typedef union {
|
|
struct {
|
|
/* 1 */
|
|
ULONG Enable:1; /* Enable WiFi Direct. */
|
|
ULONG Managed:1; /* Support Managed AP */
|
|
ULONG EnablePresistent:1; /* Enable persistent */
|
|
ULONG EnableInvite:1; /* For invitation Test Case. */
|
|
/* 2 */
|
|
ULONG DefaultIntentIndex:4; /* the default intent index GUI used when first editing a profile. */
|
|
/* 3 */
|
|
ULONG ListenChannel:4; /* Listen Channel */
|
|
/* 4 */
|
|
ULONG DefaultConfigMethod:3; /* Default Config Method that is set in Probe Rsp when P2P On. */
|
|
ULONG EnableIntraBss:1; /* 1: Enable Intra BSS function when I am GO */
|
|
/* 5 */
|
|
ULONG OpChannel:4; /* default use 2.4GHz channel */
|
|
/* 6 */
|
|
ULONG ClientDiscovery:1; /* Client Discoverbility */
|
|
ULONG ExtendListen:1; /* Extended Listening */
|
|
ULONG ServiceDiscovery:1; /* Service Discovery */
|
|
ULONG OpPSAlwaysOn:1; /* Service Discovery */
|
|
/* 7 */
|
|
ULONG P2PGroupLimit:1; /* When Limit == 1. GO only support ONE device in my group.. */
|
|
ULONG ForceDisableCrossConnect:1;
|
|
ULONG Rsvd:5; /* Not Used */
|
|
ULONG SwBasedNoA:1; /* Software Based NoA implementation */
|
|
} field;
|
|
UINT32 word;
|
|
} P2P_CONTROL, *PP2P_CONTROL;
|
|
|
|
|
|
/*
|
|
* The miniport PORT structure
|
|
*/
|
|
typedef struct _PORT_COMMON_CONFIG
|
|
{
|
|
ULONG OpStatusFlags;
|
|
ULONG OperationMode; /* DOT11_OPERATION_MODE_EXTENSIBLE_STATION or DOT11_OPERATION_MODE_NETWORK_MONITOR */
|
|
UCHAR Bssid[MAC_ADDR_LEN];
|
|
CHAR Ssid[MAX_LEN_OF_SSID]; /* NOT NULL-terminated */
|
|
UCHAR SsidLen; /* the actual ssid length in used */
|
|
UCHAR LastSsidLen; /* the actual ssid length in used */
|
|
CHAR LastSsid[MAX_LEN_OF_SSID]; /* NOT NULL-terminated */
|
|
UCHAR LastBssid[MAC_ADDR_LEN];
|
|
/*UCHAR Channel; */
|
|
/*UCHAR CentralChannel; */ /* Central Channel when using 40MHz is indicating. not real channel. */
|
|
|
|
ULONG AuthMode; /* This should match to whatever microsoft defined, use ULONG Intead of DOT11_AUTH_ALGORITHM. */
|
|
ULONG WepStatus; /*use ULONG intead of DOT11_CIPHER_ALGORITHM, */
|
|
UCHAR DefaultKeyId;
|
|
|
|
ULONG OrigWepStatus; /* Original wep status set from OID */
|
|
/* Add to support different cipher suite for WPA2/WPA mode */
|
|
ULONG GroupCipher; /* Multicast cipher suite */
|
|
ULONG PairCipher; /* Unicast cipher suite */
|
|
UCHAR CipherAlg;
|
|
NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
|
|
/* RT_802_11_CIPHER_SUITE_TYPE MixedModeGroupCipher; */ /* for WPA+WEP mixed mode, and CCKM WEP */
|
|
BOOLEAN bMixCipher; /* Indicate current Pair & Group use different cipher suites */
|
|
USHORT RsnCapability;
|
|
ULONG MulticastCipherAlgorithmCount;
|
|
ULONG PacketFilter; /* Packet filter for receiving */
|
|
|
|
UINT MCAddressCount;
|
|
/* UCHAR MCAddressList[HW_MAX_MCAST_LIST_SIZE][DOT11_ADDRESS_SIZE]; */
|
|
|
|
BOOLEAN bHiddenNetworkEnabled;
|
|
BOOLEAN ExcludeUnencrypted;
|
|
|
|
ULONG OperatingPhyId; /* ID of currently operating PHY */
|
|
ULONG SelectedPhyId; /* index of PHY that any PHY specific OID is applied to */
|
|
ULONG DefaultPhyId;
|
|
}PORT_COMMON_CONFIG,*PPORT_COMMON_CONFIG;
|
|
|
|
typedef struct _P2P_COUNTER_STRUCT
|
|
{
|
|
ULONG ManageAPEnReconCounter; /* right after shutdown, */
|
|
ULONG ClientConnectedCounter; /* If I am P2P Client and is connected, */
|
|
ULONG DisableRetryGrpFormCounter; /* If Group Nego is rejected because both intent is 15. can't retry in a short time. */
|
|
ULONG Counter100ms; /* plus 1 every 100ms */
|
|
ULONG GoScanBeginCounter100ms;
|
|
ULONG Wpa2pskCounter100ms;
|
|
ULONG NextScanRound; /* Unit : 100 TU */
|
|
UCHAR ListenInterval; /* Unit : 100 TU */
|
|
UCHAR ListenIntervalBias; /* for some important action that need more dwell time in scan channel, add this Bias. Unit : 100 TU */
|
|
ULONG CounterAftrScanButton; /* Unit 100ms. Counter for After Pressing "Apply" Profile button. */
|
|
ULONG CounterAftrSetEvent; /* Unit 100ms. Counter for Driver called KeSetEvent. */
|
|
BOOLEAN bListen;
|
|
BOOLEAN bStartScan;
|
|
BOOLEAN bNextScan;
|
|
ULONG UserAccept;
|
|
} P2P_COUNTER_STRUCT, *PP2P_COUNTER_STRUCT;
|
|
|
|
typedef struct _P2P_RALINK_STRUCT
|
|
{
|
|
UCHAR ListenChanel[3];
|
|
UCHAR ListenChanelIndex;
|
|
UCHAR ListenChanelCount;
|
|
} P2P_RALINK_STRUCT, *PP2P_RALINK_STRUCT;
|
|
|
|
/* often need to change beacon content. So save the offset. */
|
|
typedef struct _P2P_BEACONOFFSET_STRUCT
|
|
{
|
|
ULONG IpBitmapBcnOffset; /* USed as GO */
|
|
ULONG P2pCapOffset;
|
|
} P2P_BEACONOFFSET_STRUCT, *PP2P_BEACONOFFSET_STRUCT;
|
|
|
|
typedef struct _P2P_SAVED_PUBLIC_FRAME {
|
|
HEADER_802_11 p80211Header;
|
|
UCHAR Category;
|
|
UCHAR Action;
|
|
UCHAR OUI[3];
|
|
UCHAR OUIType;
|
|
UCHAR Subtype;
|
|
UCHAR Token;
|
|
} P2P_SAVED_PUBLIC_FRAME, *PP2P_SAVED_PUBLIC_FRAME;
|
|
|
|
typedef struct _P2P_MANAGED_STRUCT
|
|
{
|
|
UCHAR ManageAPBSsid[MAC_ADDR_LEN]; /* Store the AP's BSSID that is the managed AP and is the latest one that I recently connected to.. */
|
|
UCHAR ManageAPSsid[32]; /* Store the AP's BSSID that is the managed AP and is the latest one that I recently connected to.. */
|
|
UCHAR ManageAPSsidLen; /* Store the AP's BSSID that is the managed AP and is the latest one that I recently connected to.. */
|
|
UCHAR APP2pManageability; /* Store the AP's P2P Manageability byte that currently I want to associate. */
|
|
UCHAR APP2pMinorReason; /* Store the AP's minorreason byte that recently being deauthed */
|
|
UCHAR ICSStatus; /* */
|
|
UCHAR APUsageChannel; /* The suggest channel from AP's IE=0x61 */
|
|
UCHAR TotalNumOfP2pAttribute;
|
|
} P2P_MANAGED_STRUCT, *PP2P_MANAGED_STRUCT;
|
|
|
|
typedef struct _P2PCLIENT_NOA_SCHEDULE {
|
|
BOOLEAN bValid;
|
|
BOOLEAN bInAwake;
|
|
BOOLEAN bNeedResumeNoA; /* Set to TRUE if need to restart infinite NoA */
|
|
BOOLEAN bWMMPSInAbsent; /* Set to TRUE if enter GO absent period by supported UAPSD GO */
|
|
UCHAR Token;
|
|
ULONG SwTimerTickCounter; /* this Counter os used for sw-base NoA implementation tick counter */
|
|
ULONG CurrentTargetTimePoint; /* For sw-base method NoA usage */
|
|
ULONG NextTargetTimePoint;
|
|
ULONG NextTimePointForWMMPSCounting; /* fro counting WMM PS EOSP bit. Not used for NoA implementation. */
|
|
UCHAR Count;
|
|
ULONG Duration;
|
|
ULONG Interval;
|
|
ULONG StartTime;
|
|
ULONG OngoingAwakeTime; /* this time will keep increasing as time go by. indecate the current awake time point */
|
|
ULONG TsfHighByte;
|
|
ULONG ThreToWrapAround;
|
|
ULONG LastBeaconTimeStamp;
|
|
} P2PCLIENT_NOA_SCHEDULE, *PP2PCLIENT_NOA_SCHEDULE;
|
|
|
|
typedef struct {
|
|
UCHAR Length;
|
|
UCHAR DevAddr[MAC_ADDR_LEN];
|
|
UCHAR InterfaceAddr[MAC_ADDR_LEN];
|
|
UCHAR Capability;
|
|
UCHAR ConfigMethod[2];
|
|
UCHAR PrimaryDevType[P2P_DEVICE_TYPE_LEN];
|
|
UCHAR NumSecondaryType;
|
|
UCHAR Octet[1];
|
|
} P2P_CLIENT_INFO_DESC, *PP2P_CLIENT_INFO_DESC;
|
|
|
|
/* Save for "Persistent" P2P table. Temporary P2P doesn't need to save in the table. */
|
|
typedef struct _RT_P2P_PERSISTENT_ENTRY
|
|
{
|
|
BOOLEAN bValid;
|
|
UCHAR MyRule; /* My rule is GO or Client */
|
|
UCHAR Addr[MAC_ADDR_LEN]; /* this addr is to distinguish this persistent entry is for which mac addr */
|
|
WSC_CREDENTIAL Profile; /* profile's bssid is always the GO's bssid. */
|
|
} RT_P2P_PERSISTENT_ENTRY, *PRT_P2P_PERSISTENT_ENTRY;
|
|
|
|
typedef struct _P2P_ETHER_ADDR
|
|
{
|
|
UCHAR octet[MAC_ADDR_LEN];
|
|
} P2P_ETHER_ADDR, *PP2P_ETHER_ADDR;
|
|
|
|
typedef struct _P2P_PEER_SSID
|
|
{
|
|
UCHAR ssid[32+1];
|
|
} P2P_PEER_SSID, *PP2P_PEER_SSID;
|
|
|
|
typedef struct _P2P_PEER_DEV_TYPE
|
|
{
|
|
#ifdef HE_BD_SUPPORT
|
|
UCHAR dev_type[8];
|
|
#else
|
|
UCHAR dev_type;
|
|
#endif /* HE_BD_SUPPORT */
|
|
} P2P_PEER_DEV_TYPE, *PP2P_PEER_DEV_TYPE;
|
|
|
|
typedef struct _P2P_STA_ASSOC_LIST
|
|
{
|
|
P2P_ETHER_ADDR maclist[3];
|
|
UINT maclist_count;
|
|
P2P_PEER_SSID device_name[3];
|
|
P2P_PEER_DEV_TYPE device_type[3];
|
|
BOOLEAN is_p2p[3];
|
|
#ifdef HE_BD_SUPPORT
|
|
CHAR rssi[3];
|
|
#ifdef WFD_SUPPORT
|
|
BOOLEAN is_wfd[3];
|
|
USHORT rtsp_port[3];
|
|
#endif /* CONFIG_WFD */
|
|
#endif /* HE_BD_SUPPORT */
|
|
} P2P_STA_ASSOC_LIST, *PP2P_STA_ASSOC_LIST;
|
|
|
|
/* Store for persistent P2P group */
|
|
typedef struct _RT_P2P_CONFIG
|
|
{
|
|
/* PNET_DEV dev; */
|
|
#ifdef CONFIG_MULTI_CHANNEL
|
|
UCHAR BW;
|
|
BOOLEAN bStartP2pConnect;
|
|
UCHAR TmpLongRtyLimit;
|
|
UCHAR TmpShortRtyLimit;
|
|
#endif /*CONFIG_MULTI_CHANNEL*/
|
|
|
|
UCHAR P2p_OpMode;
|
|
UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
|
|
P2P_CTRL_STATE CtrlCurrentState;
|
|
STATE_MACHINE P2PCtrlMachine;
|
|
STATE_MACHINE_FUNC P2PCtrlFunc[P2P_CTRL_FUNC_SIZE];
|
|
P2P_DISC_STATE DiscCurrentState;
|
|
STATE_MACHINE P2PDiscMachine;
|
|
STATE_MACHINE_FUNC P2PDiscFunc[P2P_DISC_FUNC_SIZE];
|
|
P2P_GO_FORM_STATE GoFormCurrentState;
|
|
STATE_MACHINE P2PGoFormMachine;
|
|
STATE_MACHINE_FUNC P2PGoFormFunc[P2P_GO_FORM_FUNC_SIZE];
|
|
P2P_ACTION_STATE ActionState;
|
|
STATE_MACHINE P2PActionMachine;
|
|
STATE_MACHINE_FUNC P2PActionFunc[P2P_ACTION_FUNC_SIZE];
|
|
UCHAR Rule; /* Device / Client / GO. */
|
|
|
|
|
|
/* P2P_DISCOPROV_STATE P2PDiscoProvState; */ /* P2P State for P2P discovery(listen, scan, search) and P2P provistioning (Service provision, wps provision) */
|
|
P2P_CONNECT_STATE P2PConnectState; /* P2P State for P2P connection. */
|
|
/* P2P_EVENTQUEUE_STRUCT P2pEventQueue; */
|
|
P2P_COUNTER_STRUCT P2pCounter;
|
|
P2P_RALINK_STRUCT P2pProprietary; /* Ralink Proprietary to improve usage. */
|
|
P2P_BEACONOFFSET_STRUCT P2pBcnOffset;
|
|
P2P_SAVED_PUBLIC_FRAME LatestP2pPublicFrame; /* Latest received P2P Public frame */
|
|
P2P_MANAGED_STRUCT P2pManagedParm;
|
|
|
|
BOOLEAN bFirstTimeCancelOpps;
|
|
BOOLEAN bPreKeepSlient;
|
|
BOOLEAN bKeepSlient;
|
|
UCHAR MyGOwcid;
|
|
UCHAR LastSentInviteFlag;
|
|
UCHAR P2pCapability[2];
|
|
ULONG MyIp;
|
|
WSC_DEV_INFO DevInfo;
|
|
UCHAR Wsc_Uuid_E[UUID_LEN_STR];
|
|
UCHAR Wsc_Uuid_Str[UUID_LEN_STR];
|
|
ULONG WscMode; /* predefined WSC mode, 1: PIN, 2: PBC */
|
|
BOOLEAN bConfiguredAP; /* true (1:un-configured), false(2: configured) ; used by GO */
|
|
USHORT Dpid; /* WPS device password ID. */
|
|
USHORT ConfigMethod; /* WPS device password ID. */
|
|
UCHAR PinCode[9];
|
|
UCHAR ConfigTimeout[2];
|
|
UCHAR AssocPriDeviceType[8];
|
|
UCHAR PhraseKey[64];
|
|
UCHAR PhraseKeyLen;
|
|
P2P_STA_ASSOC_LIST AssocList;
|
|
UCHAR P2pPhyMode;
|
|
UCHAR NoAIndex;
|
|
UCHAR PopUpIndex; /* store the p2p entry index when receiving Go Nego Req and need a GUI to pop up a window to set connection. */
|
|
UCHAR ConnectingIndex; /* Point to the ?rd Connecting MAC that I will try to connect with. */
|
|
UCHAR ConnectingMAC[MAC_ADDR_LEN]; /* Specify MAC address want to connect. Set to all 0xff or all 0x0 if not specified. */
|
|
UCHAR ConnectingDeviceName[MAX_P2P_GROUP_SIZE][32]; /* Specify the Device Name that want to connect. Set to all 0xff or all 0x0 if not specified. */
|
|
UCHAR SSID[32];
|
|
UCHAR SSIDLen;
|
|
UCHAR Token;
|
|
UCHAR Bssid[MAC_ADDR_LEN];
|
|
UCHAR Manufacturer[64];
|
|
UCHAR ManufacturerLen;
|
|
UCHAR ModelName[32];
|
|
UCHAR ModelNameLen;
|
|
UCHAR ModelNumber[32];
|
|
UCHAR ModelNumberLen;
|
|
UCHAR SerialNumber[32];
|
|
UCHAR SerialNumberLen;
|
|
UCHAR DeviceName[32];
|
|
ULONG DeviceNameLen;
|
|
UCHAR ListenChannel; /* The channel that perform the group formatuib oricedure. */
|
|
UCHAR GroupChannel; /* Group setting channel from GUI. Real OP channel need to be negociated.. */
|
|
UCHAR GroupOpChannel; /* Group operating channel. */
|
|
UCHAR GoIntentIdx; /* Value = 0~15. Intent to be a GO in P2P */
|
|
BOOLEAN bIntraBss;
|
|
BOOLEAN bExtListen;
|
|
USHORT ExtListenPeriod; /* Period for extended listening */
|
|
USHORT ExtListenInterval; /* Interval for extended listening */
|
|
UCHAR CTWindows; /* CTWindows and OppPS parameter field */
|
|
ULONG GOBeaconBufWscLen;
|
|
UCHAR LastConfigMode; /* Disable, activate p2p, or activate WPSE, or delete p2p profile. */
|
|
|
|
P2PCLIENT_NOA_SCHEDULE GONoASchedule;
|
|
RALINK_TIMER_STRUCT P2pCTWindowTimer;
|
|
RALINK_TIMER_STRUCT P2pSwNoATimer;
|
|
RALINK_TIMER_STRUCT P2pPreAbsenTimer;
|
|
RALINK_TIMER_STRUCT P2pWscTimer;
|
|
RALINK_TIMER_STRUCT P2pReSendTimer;
|
|
BOOLEAN bP2pReSendTimerRunning;
|
|
RALINK_TIMER_STRUCT P2pCliReConnectTimer;
|
|
BOOLEAN bP2pCliReConnectTimerRunning;
|
|
|
|
PORT_COMMON_CONFIG PortCfg;
|
|
UCHAR DefaultConfigMethod;
|
|
P2P_CONTROL P2pControl;
|
|
INT WscState;
|
|
BOOLEAN bSigmaEnabled;
|
|
BOOLEAN bP2pCliPmEnable;
|
|
BOOLEAN bLowRateQoSNULL;
|
|
BOOLEAN bP2pCliReConnect;
|
|
BOOLEAN bStopAuthRsp;
|
|
ULONG DevDiscPeriod; /* Unit 100ms */
|
|
BOOLEAN bPeriodicListen;
|
|
BOOLEAN bConfirmByUI;
|
|
INT p2pMaxEntry;
|
|
BOOLEAN bProvAutoRsp;
|
|
UCHAR P2pProvIndex;
|
|
USHORT P2pProvConfigMethod;
|
|
UCHAR P2pProvToken;
|
|
BOOLEAN P2pProvUserNotify;
|
|
PUCHAR pGoNegoRspOutBuffer;
|
|
BOOLEAN bSentProbeRSP;
|
|
UCHAR p2pidxForServiceCbReq;
|
|
UCHAR ServiceTransac;
|
|
|
|
} RT_P2P_CONFIG, *PRT_P2P_CONFIG;
|
|
|
|
typedef struct _RT_P2P_CLIENT_ENTRY
|
|
{
|
|
P2P_CLIENT_STATE P2pClientState; /* From the state, can know peer it registra or enrollee. */
|
|
UCHAR MyGOIndex; /* If this device is a client in a P2P group, then this is its GO's table index. */
|
|
ULONG Peerip;
|
|
CHAR Dbm;
|
|
UCHAR P2pFlag;
|
|
UCHAR NoAToken;
|
|
UCHAR GeneralToken;
|
|
UCHAR StateCount;
|
|
UCHAR Rule;
|
|
UCHAR DevCapability; /* table 10 */
|
|
UCHAR GroupCapability;
|
|
USHORT ConfigMethod;
|
|
UCHAR PIN[8];
|
|
USHORT Dpid;
|
|
UCHAR Ssid[MAX_LEN_OF_SSID];
|
|
UCHAR SsidLen;
|
|
UCHAR GoIntent;
|
|
UCHAR addr[MAC_ADDR_LEN];
|
|
UCHAR InterfaceAddr[MAC_ADDR_LEN];
|
|
UCHAR bssid[MAC_ADDR_LEN];
|
|
UCHAR PrimaryDevType[P2P_DEVICE_TYPE_LEN];
|
|
UCHAR NumSecondaryType;
|
|
UCHAR SecondaryDevType[P2P_DEVICE_TYPE_LEN];
|
|
UCHAR RegClass;
|
|
UCHAR ChannelNr;
|
|
UCHAR OpChannel;
|
|
UCHAR DeviceName[P2P_DEVICE_NAME_LEN];
|
|
ULONG DeviceNameLen;
|
|
UCHAR ConfigTimeOut;
|
|
UCHAR ListenChannel;
|
|
ULONG WscMode;
|
|
USHORT ExtListenPeriod; /* Period for extended listening */
|
|
USHORT ExtListenInterval; /* Interval for extended listening */
|
|
UCHAR CTWindow; /* As GO, Store client's Presence request NoA. As Client, Store GO's NoA In beacon or P2P Action frame */
|
|
BOOLEAN bValid;
|
|
P2PCLIENT_NOA_SCHEDULE NoADesc[1]; /* As GO, Store client's Presence request NoA. As Client, Store GO's NoA In beacon or P2P Action frame */
|
|
CHAR Rssi;
|
|
ULONG ReTransmitCnt;
|
|
UCHAR DialogToken;
|
|
#ifdef WFD_SUPPORT
|
|
WFD_ENTRY_INFO WfdEntryInfo;
|
|
#endif /* WFD_SUPPORT */
|
|
} RT_P2P_CLIENT_ENTRY, *PRT_P2P_CLIENT_ENTRY;
|
|
|
|
typedef struct _P2P_ENTRY_PARM
|
|
{
|
|
P2P_CLIENT_STATE P2pClientState; /* From the state, can know peer it registra or enrollee. */
|
|
UCHAR P2pFlag;
|
|
UCHAR NoAToken;
|
|
UCHAR GeneralToken;
|
|
UCHAR DevCapability; /* table 10 */
|
|
UCHAR GroupCapability; /* */
|
|
UCHAR DevAddr[MAC_ADDR_LEN]; /* P2P Device Address */
|
|
UCHAR InterfaceAddr[MAC_ADDR_LEN];
|
|
UCHAR PrimaryDevType[P2P_DEVICE_TYPE_LEN];
|
|
UCHAR NumSecondaryType;
|
|
UCHAR SecondaryDevType[P2P_DEVICE_TYPE_LEN]; /* This definition only support save one 2ndary DevType */
|
|
UCHAR DeviceName[32];
|
|
ULONG DeviceNameLen;
|
|
USHORT ConfigMethod;
|
|
/* USHORT ExtListenPeriod; */ /* Period for extended listening */
|
|
/* USHORT ExtListenInterval; */ /* Interval for extended listening */
|
|
UCHAR CTWindow; /* As GO, Store client's Presence request NoA. As Client, Store GO's NoA In beacon or P2P Action frame */
|
|
P2PCLIENT_NOA_SCHEDULE NoADesc[1]; /* As GO, Store client's Presence request NoA. As Client, Store GO's NoA In beacon or P2P Action frame */
|
|
UCHAR p2pIndex;
|
|
}P2P_ENTRY_PARM, *PP2P_ENTRY_PARM;
|
|
|
|
/* Save for "Persistent" P2P table. Temporary P2P doesn't need to save in the table. */
|
|
typedef struct _RT_GO_CREDENTIAL_ENTRY
|
|
{
|
|
BOOLEAN bValid;
|
|
UCHAR InterAddr[MAC_ADDR_LEN]; /* this addr is to distinguish this persistent entry is for which mac addr */
|
|
WSC_CREDENTIAL Profile; /* profile's bssid is always the GO's bssid. */
|
|
} RT_GO_CREDENTIAL_ENTRY, *PRT_GO_CREDENTIAL_ENTRY;
|
|
|
|
/* Store for persistent P2P group */
|
|
typedef struct _RT_P2P_TABLE
|
|
{
|
|
UCHAR PerstNumber; /* What persistent profile is set ? */
|
|
UCHAR ClientNumber; /* What clients are in my group now? */
|
|
RT_P2P_PERSISTENT_ENTRY PerstEntry[MAX_P2P_TABLE_SIZE]; /* Save persistent profile for auto reconnect */
|
|
RT_P2P_CLIENT_ENTRY Client[MAX_P2P_GROUP_SIZE]; /* Store for current group member. */
|
|
RT_GO_CREDENTIAL_ENTRY TempCredential[2/*MAX_P2P_SAVECREDN_SIZE*/];
|
|
} RT_P2P_TABLE, *PRT_P2P_TABLE;
|
|
|
|
typedef struct _RT_P2P_UI_TABLE
|
|
{
|
|
UCHAR ClientNumber; /* What clients are in my group now? */
|
|
RT_P2P_CLIENT_ENTRY Client[MAX_P2P_GROUP_SIZE]; /* Store for current group member. */
|
|
} RT_P2P_UI_TABLE, *PRT_P2P_UI_TABLE;
|
|
|
|
#ifdef RT_P2P_SPECIFIC_WIRELESS_EVENT
|
|
typedef struct _RT_P2P_AP_STA_CONNECTED_REPORT
|
|
{
|
|
UCHAR addr[MAC_ADDR_LEN];
|
|
UCHAR ClientFlag;
|
|
UCHAR dev_addr[MAC_ADDR_LEN];
|
|
} RT_P2P_AP_STA_CONNECTED_REPORT, *PRT_P2P_AP_STA_CONNECTED_REPORT;
|
|
|
|
typedef struct _RT_P2P_DEV_FOUND
|
|
{
|
|
UCHAR addr[MAC_ADDR_LEN];
|
|
UCHAR dev_addr[MAC_ADDR_LEN];
|
|
UCHAR pri_dev_type[P2P_DEVICE_TYPE_LEN];
|
|
UCHAR dev_name[32];
|
|
USHORT config_methods;
|
|
USHORT dpid;
|
|
UCHAR dev_capab;
|
|
UCHAR group_capab;
|
|
CHAR rssi;
|
|
#ifdef WFD_SUPPORT
|
|
UCHAR bWfdClient;
|
|
UCHAR wfd_devive_type;
|
|
UCHAR source_coupled;
|
|
UCHAR sink_coupled;
|
|
UCHAR session_avail;
|
|
UCHAR wfd_service_discovery;
|
|
UCHAR wfd_PC;
|
|
UCHAR wfd_CP;
|
|
UCHAR wfd_time_sync;
|
|
USHORT rtsp_port;
|
|
USHORT max_throughput;
|
|
UCHAR assoc_addr[MAC_ADDR_LEN];
|
|
WFD_COUPLED_SINK_INFO coupled_sink_status;
|
|
UCHAR coupled_peer_addr[MAC_ADDR_LEN];
|
|
#endif /* WFD_SUPPORT */
|
|
} RT_P2P_DEV_FOUND, *PRT_P2P_DEV_FOUND;
|
|
|
|
typedef struct _RT_P2P_ALL_INFO
|
|
{
|
|
UCHAR addr[MAC_ADDR_LEN];
|
|
UCHAR dev_addr[MAC_ADDR_LEN];
|
|
UCHAR pri_dev_type[P2P_DEVICE_TYPE_LEN];
|
|
UCHAR dev_name[32];
|
|
USHORT config_methods;
|
|
USHORT dpid;
|
|
UCHAR dev_capab;
|
|
UCHAR group_capab;
|
|
CHAR rssi;
|
|
USHORT supp_config_methods;//provision req will need.
|
|
UCHAR ClientFlag;//connected report will need.
|
|
USHORT dev_passwd_id;
|
|
/* group stared info will need ----> */
|
|
UCHAR Rule;
|
|
UCHAR Bssid[MAC_ADDR_LEN];
|
|
UCHAR Ssid[32];
|
|
UCHAR peer[MAC_ADDR_LEN];
|
|
UCHAR WpaPsk[64];
|
|
UCHAR P2PChannel;
|
|
/* group stared info will need <---- */
|
|
#if defined (WFD_SUPPORT) && defined (RT_P2P_SPECIFIC_WIRELESS_EVENT)
|
|
/* for HE/DTV WFD event */
|
|
UCHAR bWfdClient;
|
|
UCHAR wfd_devive_type;
|
|
UCHAR source_coupled;
|
|
UCHAR sink_coupled;
|
|
UCHAR session_avail;
|
|
UCHAR wfd_service_discovery;
|
|
UCHAR wfd_PC;
|
|
UCHAR wfd_CP;
|
|
UCHAR wfd_time_sync;
|
|
USHORT rtsp_port;
|
|
USHORT max_throughput;
|
|
UCHAR assoc_addr[MAC_ADDR_LEN];
|
|
WFD_COUPLED_SINK_INFO coupled_sink_status;
|
|
UCHAR coupled_peer_addr[MAC_ADDR_LEN];
|
|
#endif /* WFD_SUPPORT */
|
|
} RT_P2P_ALL_INFO, *PRT_P2P_ALL_INFO;
|
|
|
|
typedef struct _RT_P2P_PROV_DISC_REQ
|
|
{
|
|
UCHAR peer[MAC_ADDR_LEN];
|
|
USHORT config_methods;
|
|
UCHAR dev_addr[MAC_ADDR_LEN];
|
|
UCHAR pri_dev_type[P2P_DEVICE_TYPE_LEN];
|
|
UCHAR dev_name[32];
|
|
USHORT supp_config_methods;
|
|
UCHAR dev_capab;
|
|
UCHAR group_capab;
|
|
} RT_P2P_PROV_DISC_REQ, *PRT_P2P_PROV_DISC_REQ;
|
|
|
|
typedef struct _RT_P2P_PROV_DISC_RESP
|
|
{
|
|
UCHAR peer[MAC_ADDR_LEN];
|
|
USHORT config_methods;
|
|
} RT_P2P_PROV_DISC_RESP, *PRT_P2P_PROV_DISC_RESP;
|
|
|
|
typedef struct _RT_P2P_GO_NEG_REQ_RX
|
|
{
|
|
UCHAR src[MAC_ADDR_LEN];
|
|
USHORT dev_passwd_id;
|
|
} RT_P2P_GO_NEG_REQ_RX, *PRT_P2P_GO_NEG_REQ_RX;
|
|
|
|
typedef struct _RT_P2P_GROUP_INFO
|
|
{
|
|
UCHAR Rule;
|
|
UCHAR Bssid[MAC_ADDR_LEN];
|
|
UCHAR Ssid[32];
|
|
UCHAR peer[MAC_ADDR_LEN];
|
|
UCHAR WpaPsk[64];
|
|
UCHAR P2PChannel;
|
|
#ifdef WFD_SUPPORT
|
|
/* for HE event */
|
|
USHORT rtsp_port;
|
|
UCHAR device_type;
|
|
#endif /* WFD_SUPPORT */
|
|
} RT_P2P_GROUP_INFO, *PRT_P2P_GROUP_INFO;
|
|
#endif /* RT_P2P_SPECIFIC_WIRELESS_EVENT */
|
|
|
|
|
|
#endif /* __P2P_CMM_H__ */
|
|
#endif /* P2P_SUPPORT */
|
|
|