/** @file
  Define IFR NVData structures used by the WiFi Connection Manager.

  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _WIFI_NVDATASTRUC_H_
#define _WIFI_NVDATASTRUC_H_

#include <Guid/WifiConnectionManagerConfigHii.h>
#include "WifiConnectionMgrConfigHii.h"

#define MANAGER_VARSTORE_ID  0x0802

#define WIFI_STR_MAX_SIZE            224
#define WIFI_FILENAME_STR_MAX_SIZE   224
#define WIFI_MGR_MAX_MAC_STRING_LEN  96

#define SSID_MIN_LEN       1
#define SSID_MAX_LEN       32
#define SSID_STORAGE_SIZE  33

#define PASSWORD_MIN_LEN       8
#define PASSWORD_MAX_LEN       63
#define PASSWORD_STORAGE_SIZE  64

#define EAP_IDENTITY_LEN   63
#define EAP_IDENTITY_SIZE  64

#define FORMID_NONE_FORM            0
#define FORMID_MAC_SELECTION        1
#define FORMID_WIFI_MAINPAGE        2
#define FORMID_NETWORK_LIST         3
#define FORMID_CONNECT_NETWORK      4
#define FORMID_ENROLL_CERT          5
#define FORMID_CA_LIST              6
#define FORMID_ENROLL_PRIVATE_KEY   7
#define FORMID_PRIVATE_KEY_LIST     8
#define FORMID_WIFI_SETTINGS        9
#define FORMID_HIDDEN_NETWORK_LIST  10

//
// Mac List Form Key
//
#define KEY_MAC_LIST  0x100

//
// Main Form Key
//
#define KEY_REFRESH_TITLE_CONNECTION_STATUS  0x101

//
// Network List Form Key
//
#define KEY_NETWORK_LIST          0x102
#define KEY_REFRESH_NETWORK_LIST  0x103
#define KEY_WIFI_SETTINGS         0x104

//
// Connect Network Form Key
//
#define KEY_PASSWORD_CONNECT_NETWORK            0x201
#define KEY_CONNECT_ACTION                      0x202
#define KEY_REFRESH_CONNECT_CONFIGURATION       0x203
#define KEY_EAP_AUTH_METHOD_CONNECT_NETWORK     0x204
#define KEY_EAP_SEAUTH_METHOD_CONNECT_NETWORK   0x205
#define KEY_ENROLL_CA_CERT_CONNECT_NETWORK      0x206
#define KEY_ENROLL_CLIENT_CERT_CONNECT_NETWORK  0x207
#define KEY_ENROLL_PRIVATE_KEY_CONNECT_NETWORK  0x208
#define KEY_EAP_IDENTITY_CONNECT_NETWORK        0x209
#define KEY_EAP_PASSWORD_CONNECT_NETWORK        0x210

//
// Cert Form And Private Key Form
//
#define KEY_EAP_ENROLL_CERT_FROM_FILE         0x301
#define KEY_EAP_ENROLL_PRIVATE_KEY_FROM_FILE  0x302
#define KEY_SAVE_CERT_TO_MEM                  0x303
#define KEY_NO_SAVE_CERT_TO_MEM               0x304
#define KEY_SAVE_PRIVATE_KEY_TO_MEM           0x305
#define KEY_NO_SAVE_PRIVATE_KEY_TO_MEM        0x306
#define KEY_PRIVATE_KEY_PASSWORD              0x307
#define KEY_ENROLLED_CERT_NAME                0x308
#define KEY_ENROLLED_PRIVATE_KEY_NAME         0x309

//
// Hidden Network Configuration Form
//
#define KEY_HIDDEN_NETWORK         0x401
#define KEY_ADD_HIDDEN_NETWORK     0x402
#define KEY_REMOVE_HIDDEN_NETWORK  0x403

//
// Dynamic Lists
//
#define MAC_LIST_COUNT_MAX  255
#define LABEL_MAC_ENTRY     0x1000
#define KEY_MAC_ENTRY_BASE  0x1100

#define NETWORK_LIST_COUNT_MAX            4095
#define LABEL_NETWORK_LIST_ENTRY          0x2000
#define KEY_AVAILABLE_NETWORK_ENTRY_BASE  0x3000

#define HIDDEN_NETWORK_LIST_COUNT_MAX  255
#define LABEL_HIDDEN_NETWORK_ENTRY     0x4000
#define KEY_HIDDEN_NETWORK_ENTRY_BASE  0x4100

#define LABEL_END  0xffff

//
// Network Security Type
//
#define SECURITY_TYPE_NONE             0
#define SECURITY_TYPE_WPA_ENTERPRISE   1
#define SECURITY_TYPE_WPA2_ENTERPRISE  2
#define SECURITY_TYPE_WPA_PERSONAL     3
#define SECURITY_TYPE_WPA2_PERSONAL    4
#define SECURITY_TYPE_WEP              5
#define SECURITY_TYPE_UNKNOWN          6
#define SECURITY_TYPE_MAX              7

#define EAP_AUTH_METHOD_TTLS  0
#define EAP_AUTH_METHOD_PEAP  1
#define EAP_AUTH_METHOD_TLS   2
#define EAP_AUTH_METHOD_MAX   3

#define EAP_SEAUTH_METHOD_MSCHAPV2  0
#define EAP_SEAUTH_METHOD_MAX       1

#define HIDDEN_NETWORK_LIST_VAR_OFFSET  ((UINT16) OFFSET_OF (WIFI_MANAGER_IFR_NVDATA, HiddenNetworkList))

#pragma pack(1)
typedef struct _WIFI_MANAGER_IFR_NVDATA {
  UINT32    ProfileCount;
  CHAR16    SSId[SSID_STORAGE_SIZE];
  CHAR16    Password[PASSWORD_STORAGE_SIZE];
  CHAR16    PrivateKeyPassword[PASSWORD_STORAGE_SIZE];
  CHAR16    EapIdentity[EAP_IDENTITY_SIZE];
  CHAR16    EapPassword[PASSWORD_STORAGE_SIZE];
  UINT8     SecurityType;
  UINT8     EapAuthMethod;
  UINT8     EapSecondAuthMethod;
  UINT8     HiddenNetworkList[HIDDEN_NETWORK_LIST_COUNT_MAX];
} WIFI_MANAGER_IFR_NVDATA;
#pragma pack()

#endif
