diff options
author | nagurram-in <nagendra.g@in.ibm.com> | 2016-10-03 07:26:30 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-11-14 21:29:58 -0500 |
commit | 2da4b3794cb7ee133d1c4db6640aad99748ebf4b (patch) | |
tree | 0ce57c885d1ae2c2c33743681fbcc98012d6958b /src/usr/hdat/hdatvpd.H | |
parent | 3d95d418377ac2ede6d9ab217637cd53158736e9 (diff) | |
download | talos-hostboot-2da4b3794cb7ee133d1c4db6640aad99748ebf4b.tar.gz talos-hostboot-2da4b3794cb7ee133d1c4db6640aad99748ebf4b.zip |
HDAT changes for Witherspoon
Change-Id: I942362604938fe4f7511e21da9246236a939c176
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30905
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/hdat/hdatvpd.H')
-rwxr-xr-x | src/usr/hdat/hdatvpd.H | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/src/usr/hdat/hdatvpd.H b/src/usr/hdat/hdatvpd.H new file mode 100755 index 000000000..5c12dda13 --- /dev/null +++ b/src/usr/hdat/hdatvpd.H @@ -0,0 +1,248 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/hdat/hdatvpd.H $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 2016 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* Licensed under the Apache License, Version 2.0 (the "License"); */ +/* you may not use this file except in compliance with the License. */ +/* You may obtain a copy of the License at */ +/* */ +/* http://www.apache.org/licenses/LICENSE-2.0 */ +/* */ +/* Unless required by applicable law or agreed to in writing, software */ +/* distributed under the License is distributed on an "AS IS" BASIS, */ +/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ +/* implied. See the License for the specific language governing */ +/* permissions and limitations under the License. */ +/* */ +/* IBM_PROLOG_END_TAG */ +#ifndef HDATVPD_H +#define HDATVPD_H + +/** + * @file hdatvpd.H + * + * @brief This file contains the class definition for the VPD object + * with data obtained from the SVPD component. Besides typical VPD objects + * such as the Clock Card VPD object, this alos supports VPD objects which + * are part of a bigger object (such as the daughter card VPD object which + * is part of the HdatIoHubFru object). + * + */ + + +/*----------------------------------------------------------------------------*/ +/* Includes */ +/*----------------------------------------------------------------------------*/ +#include <stdint.h> +#include <hdat/hdat.H> +#include "hdathdif.H" +#include <errl/errlentry.H> +#include <vpd/vpd_if.H> +//#include "hdatutil.H" + +namespace HDAT +{ + +typedef struct +{ + VPD::vpdKeyword keyword; + char keywordName[2+1]; +} HdatKeywordInfo; + + + +struct vpdData +{ + VPD::vpdRecord record; + VPD::vpdKeyword keyword; +}; + +enum vpdType +{ + PROC = 0x0, + DIMM, + BP, + CLOCK, + ENCLOSURE, + ANCHOR, + BP_EXT, +};//add as required. this needs to be passed to hdatGetAsciiKwd +//to choose the appropriate device address + + +/*----------------------------------------------------------------------------*/ +/* Type definitions */ +/*----------------------------------------------------------------------------*/ + +enum hdatVpdFruStatus +{ + HDAT_VPD_FRU_FUNCTIONAL = 0x01, + HDAT_VPD_REDUNDANT_FRU_USED = 0x02 +}; + +/** @enum hdatDataPtrs + * Constants for the internal data pointers that are added to the base + * class + */ +enum hdatVpdDataPtrs +{ + HDAT_VPD_FRU_ID = 0, + HDAT_VPD_KWD = 1, + HDAT_VPD_OP_STATUS = 2, + HDAT_VPD_RESERVED2 = 3, + HDAT_VPD_LAST = 4 +}; + +typedef enum { + GARD_Functional, + GARD_PartialFunctional, + GARD_NotFunctional +}GARD_FunctionalState; + +typedef enum { + GARD_Used, + GARD_NotUsed +}GARD_UsedState; + +struct hdatFruOpStatus_t +{ + uint8_t hdatFlags; + uint8_t hdatReserved1[3]; +} __attribute__ ((packed)); + + +/*----------------------------------------------------------------------------*/ +/* C++ class definition */ +/*----------------------------------------------------------------------------*/ + +/** Begin Class Description + * + * @brief The HdatVpd class is used to construct objects that have the general + * format of VPD keyword data such as the CEC backplane VPD or L3 VPD, + * etc + * + * Description: This class defines a specialized object. It is not intended + * that anyone can create an object of this type. In particular, + * the object is built only in the hdatstep process when the step + * that builds hypervisor data structures is run. + * + * The real purpose of the object is to create the various VPD + * structures as defined by the PHYP Initialization architecture + * This data structure is eventually DMA'd to main memory. The + * class is not defined to be a general purpose interface for + * building this object by anyone other than the hdatstep process. + * + * Thread safety: An HdatVpd object is not thread safe. That is, a single + * object cannot be shared and used concurrently by + * multiple threads at the same time. An object can be used by + * multiple threads if the threads serialize access. And of + * course, each thread can use its own object with no concerns + * about what other threads are doing. + * + * Signal handler usage: + * This class is not intended to be used in a signal handler + * and nothing has been done to try and make it safe to use + * in a signal handler. + * + * End Class Description + */ +class HdatVpd : public HdatHdif +{ +public: + + /** + * @brief Construct an HdatVpd object. + * + * This is the constructor for the HdatVpd object + * + * If you are constructing this object on the heap by using new, then + * you must check the pointer returned from new to see if it is null. + * If it is null, new failed to allocate storage and the constructor + * was not called. If it is not null, then you must check o_errlHndl + * to see if the constructor ran successfully. If o_errlHndl indicates + * an error was reported by the constructor, new has already allocated + * heap storage and the object must be deleted in order to free the + * heap storage. + * + * @pre None + * @param o_errlHndl output error handle + * @param i_resourceId input resource id + * @param i_target input Target + * @param i_eyeCatcher input the eyecatcher string + * @param i_index input object instance + * @param i_vpdType input the vpd type to be added + * @param i_fetchVpd input the record-kwd structure like mVpd or pVpd etc + * @param i_num input the number of elements in the i_fetchVpd structure + * @param i_Keywords string array + * + * @post An HdatVpd object has been constructed. Heap storage has been + * allocated. + * + */ + HdatVpd(errlHndl_t &o_errlHndl, + uint32_t i_resourceId, + TARGETING::Target * i_target, + const char *i_eyeCatcher, + uint32_t i_index, + vpdType i_vpdType, + struct vpdData i_fetchVpd[], + uint32_t i_num, const HdatKeywordInfo i_pvpdKeywords[]); + + + + /** + * @brief HdatVpd object destructor + * + * This is the destructor for an HdatVpd object. Any heap storage + * allocated for the object is dallocated. + * + * @pre No preconditions exist + * + * @post The HdatVpd object has been destroyed and can no longer be used. + * + */ + ~HdatVpd(); + + /* + * @brief write the vpd object to memory + * + * @pre the object must be constructed and the address to write at must + * be provided + * + * @param io_virt_addr - input parameter - inputs the address + * to start to write to mainstore + * @returns outputs thenext address + + * @post data is written to memory and the next address is returned + * + */ + uint8_t * setVpd(uint8_t * io_virt_addr); + + +private: + + /** Object Instance Data + * + * @li iv_kwdSize - size of the ASCII keyword + * @li iv_kwd - ptr to storage which holds the ASCII keyword + * @li iv_fru - FRU Id information + * @li iv_status - FRU operational status + */ + uint32_t iv_kwdSize; + char *iv_kwd; + hdatFruId_t iv_fru; + hdatFruOpStatus_t iv_status; + + + +}; // end of HdatVpd class + +} //namespace HDAT +#endif // HDATVPD_H |