/** @file mlanroamagent.h * * @brief This files contains mlanutl roamagent command handling. * * Copyright (C) 2008-2019, Marvell International Ltd. * * This software file (the "File") is distributed by Marvell International * Ltd. under the terms of the GNU General Public License Version 2, June 1991 * (the "License"). You may use, redistribute and/or modify this File in * accordance with the terms and conditions of the License, a copy of which * is available by writing to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE * ARE EXPRESSLY DISCLAIMED. The License provides additional details about * this warranty disclaimer. * */ /************************************************************************ Change log: 08/11/2009: initial version ************************************************************************/ #ifndef _MLANROAMAGENT_H_ #define _MLANROAMAGENT_H_ /** Bit definitions */ #ifndef BIT #define BIT(x) (1UL << (x)) #endif /* Define actionsd for HostCmd_DS_CMD_ROAMAGENT_NEIGHBORLIST_MAINTENANCE */ /** Blacklist */ #define HostCmd_ACT_ADD_TO_BLACKLIST 0x0001 /** Flushing blacklisted entry */ #define HostCmd_ACT_REMOVE_FROM_BLACKLIST 0x0002 /** Roaming scanmode: discovery */ #define DISCOVERY_MODE 1 /** Roaming scanmode: tracking */ #define TRACKING_MODE 2 /** Threshold configuration: RSSI */ #define RSSI_THRESHOLD 1 /** Threshold configuration: SNR */ #define SNR_THRESHOLD 2 #ifdef BIG_ENDIAN_SUPPORT /** Bit values for Qualified Neighbor RSSI Entry */ #define BIT_NEIGHFLAG_RSSI 0x80000000 /** Bit values for Qualified Neighbor AGE Entry */ #define BIT_NEIGHFLAG_AGE 0x40000000 /** Bit values for Qualified Neighbor Blacklist Entry */ #define BIT_NEIGHFLAG_BLACKLIST 0x20000000 /** Bit values for Qualified Neighbor Admission Capacity */ #define BIT_NEIGHFLAG_ADMISSION_CAP 0x10000000 /** Bit values for Qualified Neighbor Uplink RSSI */ #define BIT_NEIGHFLAG_UPLINK_RSSI 0x08000000 #else /** Bit values for Qualified Neighbor RSSI Entry */ #define BIT_NEIGHFLAG_RSSI 0x01 /** Bit values for Qualified Neighbor AGE Entry */ #define BIT_NEIGHFLAG_AGE 0x02 /** Bit values for Qualified Neighbor Blacklist Entry */ #define BIT_NEIGHFLAG_BLACKLIST 0x04 /** Bit values for Qualified Neighbor Admission Capacity */ #define BIT_NEIGHFLAG_ADMISSION_CAP 0x08 /** Bit values for Qualified Neighbor Uplink RSSI */ #define BIT_NEIGHFLAG_UPLINK_RSSI 0x10 #endif /** milliseconds time conversion data */ typedef struct exactTime { t_u16 hrs; /**< Number of hours */ t_u16 mins; /**< Number of minutes */ t_u16 secs; /**< Number of seconds */ t_u16 msecs; /**< Number of milliseconds left */ } ExactTime_t; /** ROAMAGENT HostEvent bitmasks */ typedef enum { HOST_EVENT_NBOR_DISABLE = 6, /* reset bit 0 */ HOST_EVENT_NBOR_ENABLE = 1, /* set bit 0 */ HOST_EVENT_ROAM_DISABLE = 5, /* reset bit 1 */ HOST_EVENT_ROAM_ENABLE = 2, /* set bit 1 */ HOST_EVENT_STATE_DISABLE = 3, /* reset bit 2 */ HOST_EVENT_STATE_ENABLE = 4, /* reset bit 2 */ } __ATTRIB_PACK__ HostEvent_e; /** ROAMAGENT_CONTROL command identifiers */ typedef enum { ROAM_CONTROL_DISABLE = 6, /* reset bit 0 */ ROAM_CONTROL_ENABLE = 1, /* set bit 0 */ ROAM_CONTROL_RESUME = 5, /* reset bit 1 */ ROAM_CONTROL_SUSPEND = 2, /* set bit 1 */ CROSSBAND_DISABLE = 3, /* reset bit 2 */ CROSSBAND_ENABLE = 4 /* set bit 2 */ } __ATTRIB_PACK__ RoamControl_e; /* * Definitions of roaming state and other constants */ /** Enum Definitations: Roaming agent state */ typedef enum { STATE_DISCONNECTED, STATE_STABLE, STATE_DEGRADING, STATE_UNACCEPTABLE, STATE_HARDROAM, STATE_LINKLOSS, STATE_SOFTROAM, STATE_SUSPEND, STATE_CMD_SUSPEND, STATE_ASYNCASSOC_SUSPEND } RoamingAgentState; /** statistics threshold High RSSI */ typedef struct { /** Header */ MrvlIEtypesHeader_t Header; /** RSSI threshold (dBm) */ t_u8 Value; /** reporting frequency */ t_u8 Frequency; } __ATTRIB_PACK__ MrvlIEtypes_BeaconHighRssiThreshold_t, MrvlIEtypes_BeaconLowRssiThreshold_t, MrvlIEtypes_BeaconHighSnrThreshold_t, MrvlIEtypes_BeaconLowSnrThreshold_t; /** HostCmd_DS_CMD_ROAMAGENT_STATISTICS_THRESHOLD */ typedef struct { /** Action */ t_u16 action; /** roaming state */ t_u8 State; /** active/configured user */ t_u8 Profile; /** TLV buffer */ t_u8 TlvBuffer[1]; /* MrvlIEtypes_BeaconHighRssiThreshold_t BeaconHighRssiThreshold; * MrvlIEtypes_BeaconLowRssiThreshold_t BeaconLowRssiThreshold; * MrvlIEtypes_BeaconHighSnrThreshold_t BeaconHighSnrThreshold; * MrvlIEtypes_BeaconLowSnrThreshold_t BeaconLowSnrThreshold; * MrvlIEtypes_BeaconsMissed_t PreBeaconMissed; * MrvlIEtypes_FailureCount_t FailureCnt; */ } __ATTRIB_PACK__ HostCmd_DS_CMD_ROAMAGENT_STATISTICS_THRESHOLD; typedef struct { /** */ signed char RssiHighLevel; /** */ signed char RssiLowLevel; /** */ signed char RssiNborDiff; } __ATTRIB_PACK__ HostCmd_DS_CMD_ROAMAGENT_ROAM_THRESHOLD; #define ROAM_THRESH_MAX 4 /** HostCmd_DS_CMD_ROAMAGENT_NEIGHBOR_ASSESSMENT */ typedef struct { /** Action */ t_u16 action; /** configured qualifying snr */ signed char ConfQualSignalStrength; /** active qualifying snr */ signed char ActiveQualSignalStrength; /** qualifying neighbor count */ t_u16 QualifyingNumNeighbor; /** inactivity in # scans */ t_u16 StaleCount; /** inactivity in time (ms) */ t_u32 StalePeriod; /** blacklist duration in ms due to minor failures */ t_u32 ShortBlacklistPeriod; /** blacklist duration in ms due to severe failures */ t_u32 LongBlacklistPeriod; HostCmd_DS_CMD_ROAMAGENT_ROAM_THRESHOLD RoamThresh[ROAM_THRESH_MAX]; } __ATTRIB_PACK__ HostCmd_DS_CMD_ROAMAGENT_NEIGHBOR_ASSESSMENT; /** HostCmd_DS_CMD_ROAMAGENT_NEIGHBORLIST */ typedef struct { /** Action */ t_u16 action; /** Reserved */ t_u16 Reserved; /** TLV buffer */ t_u8 TlvBuffer[1]; /* MrvlIEtypes_NeighborEntry_t Neighbors[MRVL_ROAM_MAX_NEIGHBORS]; * MRVL_ROAM_MAX_NEIGHBORS = 5 */ } __ATTRIB_PACK__ HostCmd_DS_CMD_ROAMAGENT_NEIGHBORLIST; /** neighbor entry details roaming agent */ typedef struct { /** Header */ MrvlIEtypesHeader_t Header; /** bssid of neighbor */ t_u8 Bssid[ETH_ALEN]; /** Reserved */ t_u16 Reserved; /** neighbor snr */ t_s16 SignalStrength; /** neighbor age */ t_u16 Age; /** bit map for qualified neighbor */ t_u32 QualifiedNeighborBitmap; /** blacklist duration in ms */ t_u32 BlackListDuration; } __ATTRIB_PACK__ MrvlIEtypes_NeighborEntry_t; /** HostCmd_DS_ROAMAGENT_ADV_METRIC_THRESHOLD */ typedef struct { /** Action */ t_u16 action; /** Beacon RSSI Metrics,Data RSSI Metrics or PER Metrics */ t_u16 Metrics; /** Percentage FER Threshold value to exceed for making a roam decision */ t_u8 UcFerThresholdValue; /** Percentage PER Threshold value to exceed for making a roam decision */ t_u8 UcPerThresholdValue; /** Reserved for later use */ t_u8 Reserved[2]; /** Time (ms) for which FER should prevail in stable state */ t_u32 StableFERPeriod_ms; /** Time (ms) for which FER should prevail in degrading state */ t_u32 DegradingFERPeriod_ms; /** Time (ms) for which FER should prevail in unacceptable state */ t_u32 UnacceptableFERPeriod_ms; /** Time (ms) for which FER should prevail in stable state */ t_u32 StablePERPeriod_ms; /** Time (ms) for which PER should prevail in degrading state */ t_u32 DegradingPERPeriod_ms; /** Time (ms) for which PER should prevail in unacceptable state */ t_u32 UnacceptablePERPeriod_ms; /** Number of TX packets to exceed in period_ms ms for the FER for Roam */ t_u32 UiFerPktThreshold; /** Number of TX packets to exceed in period_ms ms for the PER for Roam */ t_u32 UiPerPktThreshold; /** Time in ms for which inactivity should prevail for state transition */ t_u32 InactivityPeriodThreshold_ms; /** With Data RSSI Metrics, Roam only when RX packets in period_ms ms exceeds this */ t_u32 UiRxPktThreshold; } __ATTRIB_PACK__ HostCmd_DS_CMD_ROAMAGENT_ADV_METRIC_THRESHOLD; /** scan period for each search mode and state for roaming agent */ typedef struct { /** Header */ MrvlIEtypesHeader_t Header; /** search mode */ t_u16 SearchMode; /** roaming state */ t_u16 State; /** scan period value */ t_u32 ScanPeriod; } __ATTRIB_PACK__ MrvlIEtypes_NeighborScanPeriod_t; /** HostCmd_DS_CMD_ROAMAGENT_CONTROL */ typedef struct { /** Action */ t_u16 action; /** enable control */ t_u8 Control; /** host event control */ t_u8 HostEvent; } __ATTRIB_PACK__ HostCmd_DS_CMD_ROAMAGENT_CONTROL; /** HostCmd_DS_CMD_ROAMAGENT_BACKOFF */ typedef struct { /** Action */ t_u16 action; /** minimum scans */ t_u16 Scans; /** backoff period */ t_u32 Period; } __ATTRIB_PACK__ HostCmd_DS_CMD_ROAMAGENT_BACKOFF; /** HostCmd_DS_CMD_ROAMAGENT_NEIGHBOR_SCANPERIOD */ typedef struct { /** Action */ t_u16 action; /** Reserved */ t_u16 Reserved; /** scanPeriod TLV */ MrvlIEtypes_NeighborScanPeriod_t scanPeriod; } __ATTRIB_PACK__ HostCmd_DS_CMD_ROAMAGENT_NEIGHBOR_SCANPERIOD; /** HostCmd_DS_CMD_ROAMAGENT_NEIGHBOR_SCANPERIOD_RSP */ typedef struct { /** Action */ t_u16 action; /** Reserved */ t_u16 Reserved; /** TLV buffer */ t_u8 TlvBuffer[1]; /* MrvlIEtypes_NeighborScanPeriod_t scanPeriod[MRVL_ROAM_SCAN_PERIODS]; * MRVL_ROAM_SCAN_PERIODS = 6 */ } __ATTRIB_PACK__ HostCmd_DS_CMD_ROAMAGENT_NEIGHBOR_SCANPERIOD_RSP; /** HostCmd_DS_CMD_ROAMAGENT_NEIGHBORLIST_MAINTENANCE */ typedef struct { /** Action */ t_u16 action; /** BSSID */ t_u8 BSSID[ETH_ALEN]; } __ATTRIB_PACK__ HostCmd_DS_CMD_ROAMAGENT_NEIGHBORLIST_MAINTENANCE; #endif /* _MLANROAMAGENT_H_ */