diff options
Diffstat (limited to 'src/usr/hwpf/ifcompiler/initScom.H')
-rwxr-xr-x | src/usr/hwpf/ifcompiler/initScom.H | 333 |
1 files changed, 0 insertions, 333 deletions
diff --git a/src/usr/hwpf/ifcompiler/initScom.H b/src/usr/hwpf/ifcompiler/initScom.H deleted file mode 100755 index 5b342d5ad..000000000 --- a/src/usr/hwpf/ifcompiler/initScom.H +++ /dev/null @@ -1,333 +0,0 @@ -/* IBM_PROLOG_BEGIN_TAG */ -/* This is an automatically generated prolog. */ -/* */ -/* $Source: src/usr/hwpf/ifcompiler/initScom.H $ */ -/* */ -/* OpenPOWER HostBoot Project */ -/* */ -/* Contributors Listed Below - COPYRIGHT 2011,2014 */ -/* [+] 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 */ -#if !defined(INITSPY_H) -#define INITSPY_H - -// Change Log ************************************************************************************* -// -// Flag Track Userid Date Description -// ----- -------- -------- -------- ------------------------------------------------------------- -// D754106 dgilbert 06/14/10 Create -// dg002 SW039868 dgilbert 10/15/10 Add support to filter unneeded inits by EC -// dg003 SW047506 dgilbert 12/09/10 More filtering enhancements -// andrewg 05/24/11 Port over for VPL/PgP -// andrewg 09/19/11 Updates based on review -// mjjones 11/17/11 Output attribute listing -// camvanng 12/12/11 Support multiple address ranges within a SCOM address -// Use strtoull vs strtoul for 32-bit platforms -// camvanng 12/15/11 Support for multiple duplicate addresses setting different bits -// camvanng 01/20/12 Support for using a range of indexes for array attributes -// camvanng 02/14/12 Support binary and hex scom addresses -// camvanng 04/16/12 Support defines for SCOM address -// Support defines for bits, scom_data and attribute columns -// Delete obsolete code for defines support -// camvanng 06/27/12 Improve error and debug tracing -// End Change Log ********************************************************************************* -// $Id: initScom.H,v 1.9 2014/06/30 20:19:48 thi Exp $ -/** - * @file initSpy.H - * @brief Declairation of the initSpy Class. Represents the information parsed from an initfile spy - * statement. - */ - -#include <stdint.h> -#include <stdlib.h> -#include <string> -#include <vector> -#include <map> -#include <set> -#include <initRpn.H> -#include <initSymbols.H> - - -using namespace std; - -namespace init -{ - typedef vector<string> SCOM_ADDR; - typedef vector<Rpn> RPN_LIST; - typedef vector<RPN_LIST> COL_LIST; - typedef vector<uint32_t> VAR_LIST; - typedef pair<uint32_t,uint32_t> RANGE; - typedef vector<RANGE> RANGE_LIST; - - enum SCOM_WHEN - { - NONE = 0x00000000, - - // WHEN= types - LONG_SCAN = 0x00000001, - SCOM = 0x00000002, - DRAMINIT = 0x00000003, - CFAMINIT = 0x00000004, - LAST_WHEN_TYPE = CFAMINIT, - WHEN_MASK = 0x000000FF, - - // WHEN= sub types - SUBTYPE_MASK = 0x0000F000, - HOT_ADD_NODE = 0x00004000, - AFTER_HOT_ADD_NODE = 0x00006000, - HOT_ADD_GX = 0x00008000, - HOT_ADD_GX0 = 0x00007000, - HOT_ADD_GX1 = 0x00005000, - AFTER_HOT_ADD_GX = 0x0000A000, - AFTER_HOT_ADD_GX0 = 0x00003000, - AFTER_HOT_ADD_GX1 = 0x00002000, - }; - - const char when_char[] = { '@','L','S','D','C' }; - - class Scom - { - public: - - enum SPY_TYPE - { - NOTYPE, - ISPY, - ESPY, - ARRAY - }; - - - Scom(Symbols * i_symbols,uint32_t i_line = 0) : - iv_symbols(i_symbols), - iv_line(i_line), - iv_scom_length(0), - iv_scom_offset(0), - iv_when(NONE) {} - - // Build from binary sequence - Scom(BINSEQ::const_iterator & bli, Symbols * i_symbols); - - bool compare(Scom & that); - uint32_t get_when(void) { return(iv_when); } - void set_when(SCOM_WHEN i_when) { iv_when |= (uint32_t)i_when; } - void set_when(const string * when_str); - bool do_when(SCOM_WHEN i_when) { return ((uint32_t)i_when == (WHEN_MASK & iv_when)); } - void set_sub_when(SCOM_WHEN i_when) { iv_when |= i_when; } - void set_when_rpn(const Rpn * i_rpn) { iv_when_rpn = *i_rpn; delete i_rpn; } - uint32_t get_line() { return iv_line; } - void add_scom_rpn(const Rpn * i_rpn) { iv_scom_rpn.push_back(*i_rpn); delete i_rpn; } - - - - /** - * Is when statement valid for this spy - * @param stats: ostream to print debug information - * @param ec restriction - true if valid for this ec, 0xffffffff means ANY ec - * @return false if Rpn for when statement resolves to false, otherwise true - */ - bool valid_when(ostream & stats, uint32_t i_ec = 0xffffffff); - - void add_col(const string & i_colname); - - /** - * Add a row rpn to the current column - * @param pointer to Rpn object - * @pre add_col() - */ - void add_row_rpn(Rpn * i_rpn); - - void add_bit_range(uint32_t start, uint32_t end); - void add_target_range(uint32_t r1, uint32_t r2); - void make_target(const char * i_symbol); - - - uint64_t get_address(void) {return(strtoull(iv_scom_addr[0].c_str(),NULL,16));} - - /** - * @brief Get the SCOM address - * @return iv_scom_addr_hex the SCOM address - */ - uint64_t get_address_hex(void) {return iv_scom_addr_hex;} - - /** - * @brief Get the bit offset to start writing the SCOM data - * @return iv_scom_offset the starting bit within the SCOM to write the data - */ - uint32_t get_scom_offset(void) {return iv_scom_offset;} - - /** - * @brief Get the total number of bits to write - * @return iv_scom_length the number of bits to write - */ - uint32_t get_scom_length(void) {return iv_scom_length;} - - // string name(); - string listing(); - - /** - * Append binary listing of this Spy - * @param when [init::LONG_SCAN | init::SCOM] - * @param BINSEQ binary listing to append - * @returns uint32_t number of spies added - */ - uint32_t bin_listing(BINSEQ & blist); - - void set_scom_address(const string & i_scom_addr); - void dup_scom_address(const string & i_scom_addr); - void copy_dup_scom_address(); - void set_scom_suffix(const string & i_scom_addr); - - /** - * @brief Set the binary SCOM address - * @param i_scom_addr binary address string - */ - void set_scom_address_bin(const string & i_scom_addr); - - /** - * @brief Create duplicate binary SCOM addresses and append input address string - * @param i_scom_addr binary address string - */ - void dup_scom_address_bin(const string & i_scom_addr); - - /** - * @brief Copy duplicate binary SCOM addresses to main binary address vector - */ - void copy_dup_scom_address_bin(); - - /** - * @brief Append the input binary address string to the binary address - * @param i_scom_addr binary address string - */ - void set_scom_suffix_bin(const string & i_scom_addr); - - /** - * @brief Append the binary address to the hex address - */ - void append_scom_address_bin(); - - /** - * @brief Convert decimal to hex string - * @param i_num decimal number - * @param i_str_size string size - */ - string dec2hexString(uint64_t i_num, size_t i_str_size); - - /** - * @brief Convert decimal to bin string - * @param i_num decimal number - * @param i_str_size string size - */ - string dec2binString(uint64_t i_num, size_t i_str_size); - - /** - * @brief Return scom address strings - */ - string addr_listing(); - - private: // functions - - string list_one(RANGE range); - void bin_list_one(BINSEQ & blist,uint64_t i_addr, uint32_t i_addr_num, RANGE range); - - /** - * Optimize the row RPNs - * @note Remove any rows that resolve to unconditionally false. - */ - void row_optimize(); - - private: // data - - typedef map<string,SCOM_WHEN> WHEN_SUBTYPE_MAP; - - SCOM_ADDR iv_scom_addr; - SCOM_ADDR iv_dup_scom_addr; ///< contains the duplicate scom addresses - uint64_t iv_scom_addr_hex; - SCOM_ADDR iv_scom_addr_bin; ///< temp storage for binary scom addresses - SCOM_ADDR iv_dup_scom_addr_bin; ///< contains the duplicate binary scom addresses - uint32_t iv_scom_length; - uint32_t iv_scom_offset; - RPN_LIST iv_scom_rpn; ///< spyv - for each row - RPN_LIST iv_col_vars; ///< RPNs of column name for each column - COL_LIST iv_cols_rpn; ///< A list of row rpn segments one rpn list for each column - RPN_LIST iv_row_rpn; ///< row rpns for current column being parsed. - RANGE_LIST iv_range_list; ///< bit range list - RANGE_LIST iv_target_ranges; ///< target range for current target begin parsed. - Symbols * iv_symbols; - uint32_t iv_line; ///< line # in the initfile - uint32_t iv_when; - Rpn iv_when_rpn; - - - static WHEN_SUBTYPE_MAP cv_when_subtypes; - - }; - - - //================================================================================================= - // SpyList Class declarations - //================================================================================================= - // Container to track scoms - typedef multimap<uint64_t, init::Scom *> SCOM_LIST; - - class ScomList - { - public: - ScomList(const string & initfile, FILELIST & defines, ostream & stats, uint32_t i_ec = 0xFFFFFFFF); - ~ScomList(); - //size_t size() { return iv_spy_list.size(); } - //SPY_LIST::iterator begin() { return iv_spy_list.begin(); } - //SPY_LIST::iterator end() { return iv_spy_list.end(); } - void clear(); - void insert(Scom * i_scom); - - void compile(BINSEQ & bin_seq); - - void listing(BINSEQ & bin_seq, ostream & out); - void attr_listing(BINSEQ & bin_seq, ostream & out); - - /** - * Compare two spylists for equivalance - * @returns true if equal - * @note Both spylists should have been built from a binary sequence - * not directly from an initfile - */ - bool compare(ScomList & that); - - - - void set_cvs_versions(const string * s) { iv_cvs_versions = *s; } - void set_syntax_version(uint32_t v); - size_t get_syntax_version() { return iv_syntax_version; } - - Symbols * get_symbols() { return iv_symbols; } - - private: // functions - - string fmt8(uint32_t val); - - private: - - SCOM_LIST iv_scom_list; - string iv_cvs_versions; - uint32_t iv_syntax_version; - Symbols * iv_symbols; - ostream & iv_stats; - uint32_t iv_ec; - }; -}; -#endif |