MT7601u/src/include/p2p_cmm.h
Murat Demirtas 612db32659 FIXED
2016-10-30 14:40:00 +00:00

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 */