|
Packit |
857059 |
/* BEGIN_ICS_COPYRIGHT3 ****************************************
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Copyright (c) 2015-2018, Intel Corporation
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Redistribution and use in source and binary forms, with or without
|
|
Packit |
857059 |
modification, are permitted provided that the following conditions are met:
|
|
Packit |
857059 |
|
|
Packit |
857059 |
* Redistributions of source code must retain the above copyright notice,
|
|
Packit |
857059 |
this list of conditions and the following disclaimer.
|
|
Packit |
857059 |
* Redistributions in binary form must reproduce the above copyright
|
|
Packit |
857059 |
notice, this list of conditions and the following disclaimer in the
|
|
Packit |
857059 |
documentation and/or other materials provided with the distribution.
|
|
Packit |
857059 |
* Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit |
857059 |
may be used to endorse or promote products derived from this software
|
|
Packit |
857059 |
without specific prior written permission.
|
|
Packit |
857059 |
|
|
Packit |
857059 |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit |
857059 |
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
857059 |
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
Packit |
857059 |
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
Packit |
857059 |
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit |
857059 |
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
Packit |
857059 |
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
Packit |
857059 |
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
Packit |
857059 |
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
Packit |
857059 |
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
857059 |
|
|
Packit |
857059 |
** END_ICS_COPYRIGHT3 ****************************************/
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* [ICS VERSION STRING: unknown] */
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#ifndef _PAACCESS_H
|
|
Packit |
857059 |
#define _PAACCESS_H
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include <iba/ibt.h>
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include <iba/ipublic.h>
|
|
Packit |
857059 |
#include <stdio.h>
|
|
Packit |
857059 |
#include <stdlib.h>
|
|
Packit |
857059 |
#include <stdarg.h>
|
|
Packit |
857059 |
#include <unistd.h>
|
|
Packit |
857059 |
#include <ctype.h>
|
|
Packit |
857059 |
#define _GNU_SOURCE
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include <iba/stl_pm.h>
|
|
Packit |
857059 |
#include <iba/stl_pa_priv.h>
|
|
Packit |
857059 |
#include "pm_topology.h"
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#ifdef __cplusplus
|
|
Packit |
857059 |
extern "C" {
|
|
Packit |
857059 |
#endif
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// DEFINES
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define BAD_IMAGE_ID (uint64)-1
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define PA_INC_COUNTER_NO_OVERFLOW(cntr, max) do { if (cntr >= max) { cntr = max; } else { cntr++; } } while(0)
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// DATA TYPES
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmNameListEntry_s {
|
|
Packit |
857059 |
char Name[STL_PM_GROUPNAMELEN]; // \0 terminated
|
|
Packit |
857059 |
} PmNameListEntry_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmGroupList_s {
|
|
Packit |
857059 |
uint32 NumGroups;
|
|
Packit |
857059 |
PmNameListEntry_t *GroupList;
|
|
Packit |
857059 |
} PmGroupList_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmGroupInfo_s {
|
|
Packit |
857059 |
char groupName[STL_PM_GROUPNAMELEN]; // \0 terminated
|
|
Packit |
857059 |
uint32 NumIntPorts;
|
|
Packit |
857059 |
uint32 NumExtPorts;
|
|
Packit |
857059 |
PmUtilStats_t IntUtil; // when both ports in group
|
|
Packit |
857059 |
PmUtilStats_t SendUtil; // send from group to outside
|
|
Packit |
857059 |
PmUtilStats_t RecvUtil; // recv by group from outside
|
|
Packit |
857059 |
// for Internal (in-group) we count one each port (both are in group)
|
|
Packit |
857059 |
// for External (between-group), we count worst of our port and its neighbor
|
|
Packit |
857059 |
PmErrStats_t IntErr;// in group
|
|
Packit |
857059 |
PmErrStats_t ExtErr;// between groups
|
|
Packit |
857059 |
uint8 MinIntRate;
|
|
Packit |
857059 |
uint8 MaxIntRate;
|
|
Packit |
857059 |
uint8 MinExtRate;
|
|
Packit |
857059 |
uint8 MaxExtRate;
|
|
Packit |
857059 |
} PmGroupInfo_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmPortConfig_s {
|
|
Packit |
857059 |
STL_LID lid;
|
|
Packit |
857059 |
uint8 portNum;
|
|
Packit |
857059 |
uint8 reserved2[3];
|
|
Packit |
857059 |
uint64 guid;
|
|
Packit |
857059 |
char nodeDesc[64]; // can be 64 char w/o \0
|
|
Packit |
857059 |
} PmPortConfig_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmGroupConfig_s {
|
|
Packit |
857059 |
char groupName[STL_PM_GROUPNAMELEN]; // \0 terminated
|
|
Packit |
857059 |
uint32 NumPorts;
|
|
Packit |
857059 |
uint32 portListSize;
|
|
Packit |
857059 |
PmPortConfig_t *portList;
|
|
Packit |
857059 |
} PmGroupConfig_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmFocusPortEntry_s {
|
|
Packit |
857059 |
STL_LID lid;
|
|
Packit |
857059 |
uint8 portNum;
|
|
Packit |
857059 |
uint8 rate; // IB_STATIC_RATE
|
|
Packit |
857059 |
uint8 maxVlMtu; // enum STL MTU
|
|
Packit |
857059 |
uint8 neighborPortNum;
|
|
Packit |
857059 |
STL_LID neighborLid;
|
|
Packit |
857059 |
uint8 localStatus:4;
|
|
Packit |
857059 |
uint8 neighborStatus:4;
|
|
Packit |
857059 |
uint8 reserved[3];
|
|
Packit |
857059 |
uint64 value[MAX_NUM_FOCUS_PORT_TUPLES];
|
|
Packit |
857059 |
uint64 guid;
|
|
Packit |
857059 |
char nodeDesc[64]; // can be 64 char w/o \0
|
|
Packit |
857059 |
uint64 neighborValue[MAX_NUM_FOCUS_PORT_TUPLES];
|
|
Packit |
857059 |
uint64 neighborGuid;
|
|
Packit |
857059 |
char neighborNodeDesc[64]; // can be 64 char w/o \0
|
|
Packit |
857059 |
} PmFocusPortEntry_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmFocusPorts_s {
|
|
Packit |
857059 |
char name[STL_PM_GROUPNAMELEN]; // \0 terminated
|
|
Packit |
857059 |
uint32 NumPorts;
|
|
Packit |
857059 |
uint32 portCntr;
|
|
Packit |
857059 |
PmFocusPortEntry_t *portList;
|
|
Packit |
857059 |
} PmFocusPorts_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _focusArrayItem_s {
|
|
Packit |
857059 |
uint64 localValue;
|
|
Packit |
857059 |
uint64 neighborValue;
|
|
Packit |
857059 |
STL_LID localLID;
|
|
Packit |
857059 |
STL_LID neighborLID;
|
|
Packit |
857059 |
PmPort_t *localPort;
|
|
Packit |
857059 |
PmPort_t *neighborPort;
|
|
Packit |
857059 |
} focusArrayItem_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct smInfo_s {
|
|
Packit |
857059 |
STL_LID smLid; // implies port, 0 if empty record
|
|
Packit |
857059 |
uint8 priority:4; // present priority
|
|
Packit |
857059 |
uint8 state:4; // present state
|
|
Packit |
857059 |
uint8 portNumber;
|
|
Packit |
857059 |
uint8 reserved2;
|
|
Packit |
857059 |
uint64 smPortGuid;
|
|
Packit |
857059 |
char smNodeDesc[64]; // can be 64 char w/o \0
|
|
Packit |
857059 |
} PmSmInfo_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmImageInfo_s {
|
|
Packit |
857059 |
uint64 sweepStart;
|
|
Packit |
857059 |
uint32 sweepDuration;
|
|
Packit |
857059 |
uint16 numHFIPorts;
|
|
Packit |
857059 |
// TFI not included in Gen1
|
|
Packit |
857059 |
// uint16 numTFIPorts;
|
|
Packit |
857059 |
uint16 numSwitchNodes;
|
|
Packit |
857059 |
uint32 numSwitchPorts;
|
|
Packit |
857059 |
uint32 numLinks;
|
|
Packit |
857059 |
uint32 numSMs;
|
|
Packit |
857059 |
uint32 numNoRespNodes;
|
|
Packit |
857059 |
uint32 numNoRespPorts;
|
|
Packit |
857059 |
uint32 numSkippedNodes;
|
|
Packit |
857059 |
uint32 numSkippedPorts;
|
|
Packit |
857059 |
uint32 numUnexpectedClearPorts;
|
|
Packit |
857059 |
uint32 imageInterval;
|
|
Packit |
857059 |
PmSmInfo_t SMInfo[2];
|
|
Packit |
857059 |
} PmImageInfo_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmVFList_s {
|
|
Packit |
857059 |
uint32 NumVFs;
|
|
Packit |
857059 |
PmNameListEntry_t *VfList; // \0 terminated
|
|
Packit |
857059 |
} PmVFList_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmVFConfig_s {
|
|
Packit |
857059 |
char vfName[STL_PM_VFNAMELEN]; // \0 terminated
|
|
Packit |
857059 |
uint32 NumPorts;
|
|
Packit |
857059 |
uint32 portListSize;
|
|
Packit |
857059 |
PmPortConfig_t *portList;
|
|
Packit |
857059 |
} PmVFConfig_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmVFInfo_s {
|
|
Packit |
857059 |
char vfName[STL_PM_VFNAMELEN]; // \0 terminated
|
|
Packit |
857059 |
uint32 NumPorts;
|
|
Packit |
857059 |
PmUtilStats_t IntUtil; // when both ports in group
|
|
Packit |
857059 |
PmErrStats_t IntErr;
|
|
Packit |
857059 |
uint8 MinIntRate;
|
|
Packit |
857059 |
uint8 MaxIntRate;
|
|
Packit |
857059 |
} PmVFInfo_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmNodeInfo_s {
|
|
Packit |
857059 |
STL_LID nodeLid;
|
|
Packit |
857059 |
uint8 nodeType;
|
|
Packit |
857059 |
uint8 reserved2[3];
|
|
Packit |
857059 |
uint64 nodeGuid;
|
|
Packit |
857059 |
uint64 portSelectMask[4];
|
|
Packit |
857059 |
char nodeDesc[64]; // can be 64 char w/o \0
|
|
Packit |
857059 |
} PmNodeInfo_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmGroupNodeInfo_s {
|
|
Packit |
857059 |
char groupName[STL_PM_GROUPNAMELEN]; // \0 terminated
|
|
Packit |
857059 |
uint32 NumNodes;
|
|
Packit |
857059 |
PmNodeInfo_t *nodeList;
|
|
Packit |
857059 |
} PmGroupNodeInfo_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmLinkInfo_s {
|
|
Packit |
857059 |
STL_LID fromLid;
|
|
Packit |
857059 |
STL_LID toLid;
|
|
Packit |
857059 |
uint8 fromPort;
|
|
Packit |
857059 |
uint8 toPort;
|
|
Packit |
857059 |
uint8 mtu:4;
|
|
Packit |
857059 |
uint8 activeSpeed:4;
|
|
Packit |
857059 |
uint8 txLinkWidthDowngradeActive:4;
|
|
Packit |
857059 |
uint8 rxLinkWidthDowngradeActive:4;
|
|
Packit |
857059 |
uint8 localStatus:4;
|
|
Packit |
857059 |
uint8 neighborStatus:4;
|
|
Packit |
857059 |
uint8 reserved2[3];
|
|
Packit |
857059 |
} PmLinkInfo_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
typedef struct _pmGroupLinkInfo_s {
|
|
Packit |
857059 |
char groupName[STL_PM_GROUPNAMELEN]; // \0 terminated
|
|
Packit |
857059 |
uint32 NumLinks;
|
|
Packit |
857059 |
PmLinkInfo_t *linkInfoList;
|
|
Packit |
857059 |
} PmGroupLinkInfo_t;
|
|
Packit |
857059 |
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// FUNCTION PROTOTYPES
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* BEGIN pa_utility.c */
|
|
Packit |
857059 |
const char *FSTATUS_ToString(FSTATUS status);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS FindImage(Pm_t *pm, uint8 type, STL_PA_IMAGE_ID_DATA imageId, uint32 *imageIndex,
|
|
Packit |
857059 |
uint64 *retImageId, PmHistoryRecord_t **record, const char **msg, uint8 *clientId,
|
|
Packit |
857059 |
PmCompositeImage_t **cimg);
|
|
Packit |
857059 |
FSTATUS FindPmImage(const char *func, Pm_t *pm, STL_PA_IMAGE_ID_DATA req_img,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA *rsp_img, PmImage_t **pm_image, uint32 *imageIndex,
|
|
Packit |
857059 |
boolean *requiresLock);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
int getCachedCimgIdx(Pm_t *pm, PmCompositeImage_t *cimg);
|
|
Packit |
857059 |
uint64 BuildFreezeFrameImageId(Pm_t *pm, uint32 freezeIndex, uint8 clientId, uint32 *imageTime);
|
|
Packit |
857059 |
FSTATUS LocateGroup(PmImage_t *pmimagep, const char *groupName, int *groupIndex);
|
|
Packit |
857059 |
FSTATUS LocateVF(PmImage_t *pmimagep, const char *vfName, int *vfIdx);
|
|
Packit |
857059 |
/* END pa_utility.c */
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Note - API expects caller to define a Pm_t structure, which apps will do for now
|
|
Packit |
857059 |
// Later, PM will handle this, and the parameter can be removed
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// get group list - caller declares Pm_T and PmGroupList_t, and passes pointers
|
|
Packit |
857059 |
FSTATUS paGetGroupList(Pm_t *pm, PmGroupList_t *GroupList, STL_PA_IMAGE_ID_DATA imageId,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA *returnImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// get group info - caller declares Pm_T and PmGroupInfo_t, and passes pointers
|
|
Packit |
857059 |
FSTATUS paGetGroupInfo(Pm_t *pm, char *groupName, PmGroupInfo_t *pmGroupInfo,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA imageId, STL_PA_IMAGE_ID_DATA *returnImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// get group config - caller declares Pm_T and PmGroupConfig_t, and passes pointers
|
|
Packit |
857059 |
FSTATUS paGetGroupConfig(Pm_t *pm, char *groupName, PmGroupConfig_t *pmGroupConfig,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA imageId, STL_PA_IMAGE_ID_DATA *returnImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// get group node info - caller declares Pm_T and PmGroupConfig_t, and passes pointers
|
|
Packit |
857059 |
FSTATUS paGetGroupNodeInfo(Pm_t *pm, char *groupName, uint64 nodeGUID, STL_LID nodeLID,
|
|
Packit |
857059 |
char *nodeDesc, PmGroupNodeInfo_t *pmGroupNodeInfo, STL_PA_IMAGE_ID_DATA imageId,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA *returnImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// get group link info - caller declares Pm_T and PmGroupConfig_t, and passes pointers
|
|
Packit |
857059 |
FSTATUS paGetGroupLinkInfo(Pm_t *pm, char *groupName, STL_LID inputLID, uint8 inputPort,
|
|
Packit |
857059 |
PmGroupLinkInfo_t *pmGroupLinkInfo, STL_PA_IMAGE_ID_DATA imageId, STL_PA_IMAGE_ID_DATA *returnImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// get port stats - caller declares Pm_T and PmCompositePortCounters_t
|
|
Packit |
857059 |
// delta - 1 requests delta counters, 0 gets raw total
|
|
Packit |
857059 |
// userCntrs - 1 requests PA user controled counters, 0 gets Pm Controlled Image Counters. if 1 delta and ofset must be 0
|
|
Packit |
857059 |
FSTATUS paGetPortStats(Pm_t *pm, STL_LID lid, uint8 portNum, PmCompositePortCounters_t *portCountersP,
|
|
Packit |
857059 |
uint32 delta, uint32 userCntrs, STL_PA_IMAGE_ID_DATA imageId, uint32 *flagsp,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA *returnImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Clear Running totals for a port. This simulates a PMA clear so
|
|
Packit |
857059 |
// that tools like opareport can work against the Running totals
|
|
Packit |
857059 |
FSTATUS paClearPortStats(Pm_t *pm, STL_LID lid, uint8 portNum,
|
|
Packit |
857059 |
CounterSelectMask_t select);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// Clear Running totals for all Ports. This simulates a PMA clear so
|
|
Packit |
857059 |
// that tools like opareport can work against the Running totals
|
|
Packit |
857059 |
FSTATUS paClearAllPortStats(Pm_t *pm, CounterSelectMask_t select);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS paFreezeFrameRenew(Pm_t *pm, STL_PA_IMAGE_ID_DATA *imageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS paFreezeFrameRelease(Pm_t *pm, STL_PA_IMAGE_ID_DATA *imageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS paFreezeFrameCreate(Pm_t *pm, STL_PA_IMAGE_ID_DATA imageId, STL_PA_IMAGE_ID_DATA *retImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS paFreezeFrameMove(Pm_t *pm, STL_PA_IMAGE_ID_DATA ffImageId, STL_PA_IMAGE_ID_DATA imageId,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA *returnImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS paGetFocusPorts(Pm_t *pm, char *groupName, PmFocusPorts_t *pmFocusPorts,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA imageId, STL_PA_IMAGE_ID_DATA *returnImageId, uint32 select,
|
|
Packit |
857059 |
uint32 start, uint32 range);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS paGetExtFocusPorts(Pm_t *pm, char *groupName, PmFocusPorts_t *pmFocusPorts,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA imageId, STL_PA_IMAGE_ID_DATA *returnImageId, uint32 select,
|
|
Packit |
857059 |
uint32 start, uint32 range);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS paGetMultiFocusPorts(Pm_t *pm, char *groupName, PmFocusPorts_t *pmFocusPorts,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA imageId, STL_PA_IMAGE_ID_DATA *returnImageId, uint32 start,
|
|
Packit |
857059 |
uint32 range, STL_FOCUS_PORT_TUPLE *tple, uint8 oper);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS paGetImageInfo(Pm_t *pm, STL_PA_IMAGE_ID_DATA imageId, PmImageInfo_t *imageInfo,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA *returnImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// get vf list - caller declares Pm_T and PmGroupList_t, and passes pointers
|
|
Packit |
857059 |
FSTATUS paGetVFList(Pm_t *pm, PmVFList_t *pmVFList, STL_PA_IMAGE_ID_DATA imageId,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA *returnImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// get vf config - caller declares Pm_T and PmVFConfig_t, and passes pointers
|
|
Packit |
857059 |
FSTATUS paGetVFConfig(Pm_t *pm, char *vfName, uint64 vfSid, PmVFConfig_t *pmVFConfig,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA imageId, STL_PA_IMAGE_ID_DATA *returnImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// get vf info - caller declares Pm_T and PmGroupInfo_t, and passes pointers
|
|
Packit |
857059 |
FSTATUS paGetVFInfo(Pm_t *pm, char *vfName, PmVFInfo_t *pmVFInfo, STL_PA_IMAGE_ID_DATA imageId,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA *returnImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
// get vf port stats - caller declares Pm_T and PmCompositeVLCounters_t
|
|
Packit |
857059 |
// delta - 1 requests delta counters, 0 gets raw total
|
|
Packit |
857059 |
// userCntrs - 1 requests PA user controled counters, 0 gets Pm Controlled Image Counters. if 1 delta and ofset must be 0
|
|
Packit |
857059 |
FSTATUS paGetVFPortStats(Pm_t *pm, STL_LID lid, uint8 portNum, char *vfName,
|
|
Packit |
857059 |
PmCompositeVLCounters_t *vfPortCountersP, uint32 delta, uint32 userCntrs,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA imageId, uint32 *flagsp, STL_PA_IMAGE_ID_DATA *returnImageId);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS paClearVFPortStats(Pm_t *pm, STL_LID lid, uint8 portNum, STLVlCounterSelectMask select,
|
|
Packit |
857059 |
char *vfName);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS paGetVFFocusPorts(Pm_t *pm, char *vfName, PmFocusPorts_t *pmVFFocusPorts,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA imageId, STL_PA_IMAGE_ID_DATA *returnImageId, uint32 select,
|
|
Packit |
857059 |
uint32 start, uint32 range);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
FSTATUS paGetExtVFFocusPorts(Pm_t *pm, char *vfName, PmFocusPorts_t *pmVFFocusPorts,
|
|
Packit |
857059 |
STL_PA_IMAGE_ID_DATA imageId, STL_PA_IMAGE_ID_DATA *returnImageId, uint32 select,
|
|
Packit |
857059 |
uint32 start, uint32 range);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
static inline boolean pa_valid_port(PmPort_t *pmportp, boolean sth) {
|
|
Packit |
857059 |
if (!pmportp ||
|
|
Packit |
857059 |
/* if this is a sth image, the port may be 'empty' but not null
|
|
Packit |
857059 |
'Empty' ports should be excluded from the count, and can be
|
|
Packit |
857059 |
indentified by their having a port num and guid of 0 */
|
|
Packit |
857059 |
(sth && !pmportp->guid && !pmportp->portNum)) return FALSE;
|
|
Packit |
857059 |
return TRUE;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
static inline uint8_t pa_get_port_status(PmPort_t *pmportp, uint32_t imageIndex)
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
PmPortImage_t *portImage;
|
|
Packit |
857059 |
if (!pmportp) {
|
|
Packit |
857059 |
return STL_PA_FOCUS_STATUS_TOPO_FAILURE;
|
|
Packit |
857059 |
} else if (pmportp->u.s.PmaAvoid) {
|
|
Packit |
857059 |
// This means the PM was told to ignore this port during a sweep
|
|
Packit |
857059 |
return STL_PA_FOCUS_STATUS_PMA_IGNORE;
|
|
Packit |
857059 |
} else {
|
|
Packit |
857059 |
portImage = &pmportp->Image[imageIndex];
|
|
Packit |
857059 |
if (portImage->u.s.queryStatus != PM_QUERY_STATUS_OK) {
|
|
Packit |
857059 |
// This means there was a failure during the PM sweep when querying this port
|
|
Packit |
857059 |
return STL_PA_FOCUS_STATUS_PMA_FAILURE;
|
|
Packit |
857059 |
} else if (portImage->u.s.UnexpectedClear) {
|
|
Packit |
857059 |
// This means unexpected clear was set
|
|
Packit |
857059 |
return STL_PA_FOCUS_STATUS_UNEXPECTED_CLEAR;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
return STL_PA_FOCUS_STATUS_OK;
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* PA STH MACROs for loops */
|
|
Packit |
857059 |
#define for_some_pmports_sth(PMNODE, PMPORT, PORTNUM, START, END, STH_BOOL) \
|
|
Packit |
857059 |
for (PORTNUM = START, PMPORT = pm_get_port(PMNODE, PORTNUM); \
|
|
Packit |
857059 |
PORTNUM <= END; \
|
|
Packit |
857059 |
++PORTNUM, PMPORT = pm_get_port(PMNODE, PORTNUM)) \
|
|
Packit |
857059 |
if (pa_valid_port(PMPORT, STH_BOOL))
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define for_all_pmports_sth(PMNODE, PMPORT, PORTNUM, STH_BOOL) \
|
|
Packit |
857059 |
for_some_pmports_sth(PMNODE, PMPORT, PORTNUM, pm_get_port_idx(PMNODE), (PMNODE)->numPorts, STH_BOOL)
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/** Example usage:
|
|
Packit |
857059 |
*
|
|
Packit |
857059 |
* for_all_pmnodes(pmimagep, pmnodep lid) {
|
|
Packit |
857059 |
* for_all_pmports(pmnodep, pmportp, portnum, sth) {
|
|
Packit |
857059 |
* portImage = &pmportp->Image[imageIndex];
|
|
Packit |
857059 |
* // DO WORK
|
|
Packit |
857059 |
* }
|
|
Packit |
857059 |
* }
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
#ifdef __cplusplus
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
#endif
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#endif /* _PAACCESS_H */
|
|
Packit |
857059 |
|