diff options
author | Mark Wenning <wenning@us.ibm.com> | 2011-09-22 17:42:01 -0500 |
---|---|---|
committer | Mark W. Wenning <wenning@us.ibm.com> | 2011-10-20 18:07:04 -0500 |
commit | 591bf9abfe58c662a8e81820fdc96b90b85a9b55 (patch) | |
tree | e603935f90a1c49d5d8767d535168cd71da56b16 /src | |
parent | 0eb945c47156b32f4028867969b153652baa3ad3 (diff) | |
download | talos-hostboot-591bf9abfe58c662a8e81820fdc96b90b85a9b55.tar.gz talos-hostboot-591bf9abfe58c662a8e81820fdc96b90b85a9b55.zip |
RTC3872: Hardware Availability Service: Add HWAS as first ISTEP
- first commit
- change isteplist to call hwas
- comment out test isteps
- modify xml to add HWAS_STATE attribute
- add macros to taskargs
- remove debug trace from taskargs
- add call to init_fsi
- post-review
- merge xml files
- forgot one printkd
Change-Id: Iab3b1f85c401f9a176ed84ddb91263caf25a3d56
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/430
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src')
25 files changed, 844 insertions, 492 deletions
diff --git a/src/include/usr/hbotcompid.H b/src/include/usr/hbotcompid.H index 031eb4fda..4ea554d74 100644 --- a/src/include/usr/hbotcompid.H +++ b/src/include/usr/hbotcompid.H @@ -138,5 +138,12 @@ const compId_t TARG_COMP_ID = 0x0B00; const char TARG_COMP_NAME[] = "targ"; //@} +/** @name HWAS + * Hardware Availability Service + */ +//@{ +const compId_t HWAS_COMP_ID = 0x0C00; +const char HWAS_COMP_NAME[] = "hwas"; +//@} #endif diff --git a/src/include/usr/hwas/hwas.H b/src/include/usr/hwas/hwas.H new file mode 100644 index 000000000..b053bc843 --- /dev/null +++ b/src/include/usr/hwas/hwas.H @@ -0,0 +1,138 @@ +// IBM_PROLOG_BEGIN_TAG +// This is an automatically generated prolog. +// +// $Source: src/include/usr/hwas/hwas.H $ +// +// IBM CONFIDENTIAL +// +// COPYRIGHT International Business Machines Corp. 2011 +// +// p1 +// +// Object Code Only (OCO) source materials +// Licensed Internal Code Source Materials +// IBM HostBoot Licensed Internal Code +// +// The source code for this program is not published or other- +// wise divested of its trade secrets, irrespective of what has +// been deposited with the U.S. Copyright Office. +// +// Origin: 30 +// +// IBM_PROLOG_END +#ifndef __HWAS_HWAS_H +#define __HWAS_HWAS_H +/** + * @file hwas.H + * + * HardWare Availability Service prototypes. + * In trying to keep with C++ tradition, doxygen documentation for functions + * are here in the .H file. + * + * All of the following routines are "named isteps" - they are invoked as + * tasks by the @ref IStepDispatcher. + * + */ + + +/******************************************************************************/ +// Includes +/******************************************************************************/ +#include <stdint.h> + + +namespace HWAS +{ + /* + * @brief init_target_states + * + * Currently the state of every target is held in one bitmapped attribute + * called HWAS_STATE. HWAS_STATES is a read-only attribute - defaults are + * stored in flash, so they are already initialized. + * See src/user/errl/targeting/xmltohb/hb.xml for the settings. + * This is left as a placeholder when/if we add more attributes. + * + * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct, + * or NULL. + * return none + * + */ + void init_target_states( void *io_pArgs ); + + /** + * @brief init_fsi + * + * Call into the fsi component to "walk the bus" and collect information + * on the hardware configuration. + * + * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct, + * or NULL. + * return none + */ + void init_fsi( void *io_pArgs ); + + /** + * @brief apply_fsi_info + * + * Call into the FSI Component, read the hardware information, and apply + * it to the target states. + * + * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct, + * or NULL. + * return none + */ + void apply_fsi_info( void *io_pArgs ); + + /** + * @brief apply_dd_presence + * + * Iterate over all targets and apply presence detect information to the + * target states. + * TBD + * + * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct, + * or NULL. + * return none + */ + void apply_dd_presence( void *io_pArgs ); + + /** + * @brief apply_pr_keyword_data + * + * TBD + * + * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct, + * or NULL. + * return none + * + */ + void apply_pr_keyword_data( void *io_pArgs ); + + /** + * @brief apply_partial bad + * + * Collect Partial Bad information and apply it to the target states. + * TBD + * + * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct, + * or NULL. + * return none + */ + void apply_partial_bad( void *io_pArgs ); + + /** + * @brief apply_gard + * + * Collect GARD information and apply it to the target states. + * TBD + * + * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct, + * or NULL. + * return none + */ + void apply_gard( void *io_pArgs ); + + +}; // end namespace + +#endif diff --git a/src/include/usr/initservice/initsvcreasoncodes.H b/src/include/usr/initservice/initsvcreasoncodes.H index 3e7d16811..52c58d669 100644 --- a/src/include/usr/initservice/initsvcreasoncodes.H +++ b/src/include/usr/initservice/initsvcreasoncodes.H @@ -80,6 +80,20 @@ enum InitServiceModuleID ISTEP_4_ERRL_ID, ISTEP_5_ERRL_ID, + // + // HWAS: ISTEP 4 + // HWAS named isteps (substeps) + // @todo sync these names up with Dean's document later + // + HWAS_1_ERRL_ID, + HWAS_2_ERRL_ID, + HWAS_3_ERRL_ID, + HWAS_4_ERRL_ID, + HWAS_5_ERRL_ID, + HWAS_6_ERRL_ID, + HWAS_7_ERRL_ID, + HWAS_8_ERRL_ID, + // reserve some tasks for my unit tests... START_CXXTEST_ERRL_ID = 0xf0, INIT_SVC_TEST1_ERRL_ID, @@ -102,6 +116,8 @@ enum InitServiceReasonCode EXTINITSVC_FAILED_NO_ERRLOG = INITSVC_COMP_ID | 0x07, CXXTEST_FAILED_NO_ERRLOG = INITSVC_COMP_ID | 0x08, + + }; }; // namespace INITSERVICE diff --git a/src/include/usr/initservice/initsvcstructs.H b/src/include/usr/initservice/initsvcstructs.H index bc459da4b..5ad0ddad7 100644 --- a/src/include/usr/initservice/initsvcstructs.H +++ b/src/include/usr/initservice/initsvcstructs.H @@ -35,6 +35,7 @@ #include <stdint.h> #include <sys/vfs.h> // VFS_MODULE_MAX + namespace INITSERVICE { @@ -117,6 +118,19 @@ struct TaskInfo }; + +/** + * @struct ExtTaskInfo + * + * struct to store the TaskInfo for the ISteps, plus the number of items in + * the istep (calculated at compiletime). + */ +struct ExtTaskInfo +{ + const TaskInfo *const pti; + const uint64_t numitems; +}; + } // namespace #endif diff --git a/src/include/usr/initservice/taskargs.H b/src/include/usr/initservice/taskargs.H index 39c7c86cc..7f32b05c0 100644 --- a/src/include/usr/initservice/taskargs.H +++ b/src/include/usr/initservice/taskargs.H @@ -41,25 +41,45 @@ #include <errl/errlentry.H> #include <errl/errlmanager.H> + +/** + * @note macro to setup the input void * pArgs pointer. + * Casts it to a pointer to the incoming TaskArgs struct + */ +#define TASKARGS_INIT_TASKARGS(P_ARGS) \ + INITSERVICE::TaskArgs *pTaskArgs = \ + static_cast<INITSERVICE::TaskArgs *>(P_ARGS) + +/** + * @note macro to wait on the TaskArgs barrier and end the task + */ +#define TASKARGS_WAIT_AND_ENDTASK() \ + if ( pTaskArgs ) \ + { \ + pTaskArgs->waitChildSync(); \ + } \ + task_end() \ + +/** + * @note macro to post an error log to IStepDispatcher + */ +#define POST_ERROR_LOG( MyErrl ) \ + pTaskArgs->postErrorLog( MyErrl ) + + /** * @note macro to set up a _start() task entry routine. */ #define TASK_ENTRY_MACRO( MyInitFn ) \ -extern "C" \ -void _start( void *io_pArgs ) \ -{ \ - INITSERVICE::TaskArgs *pTaskArgs = \ - static_cast<INITSERVICE::TaskArgs *>(io_pArgs); \ - \ - MyInitFn( pTaskArgs ); \ + extern "C" \ + void _start( void *io_pArgs ) \ + { \ + TASKARGS_INIT_TASKARGS(io_pArgs); \ \ - if ( pTaskArgs ) \ - { \ - pTaskArgs->waitChildSync(); \ - } \ + MyInitFn( pTaskArgs ); \ \ - task_end(); \ -} + TASKARGS_WAIT_AND_ENDTASK(); \ + } namespace INITSERVICE diff --git a/src/include/usr/isteps/istep4list.H b/src/include/usr/isteps/istep4list.H new file mode 100644 index 000000000..bae45fc18 --- /dev/null +++ b/src/include/usr/isteps/istep4list.H @@ -0,0 +1,137 @@ +// IBM_PROLOG_BEGIN_TAG +// This is an automatically generated prolog. +// +// $Source: src/include/usr/isteps/istep4list.H $ +// +// IBM CONFIDENTIAL +// +// COPYRIGHT International Business Machines Corp. 2011 +// +// p1 +// +// Object Code Only (OCO) source materials +// Licensed Internal Code Source Materials +// IBM HostBoot Licensed Internal Code +// +// The source code for this program is not published or other- +// wise divested of its trade secrets, irrespective of what has +// been deposited with the U.S. Copyright Office. +// +// Origin: 30 +// +// IBM_PROLOG_END +#ifndef __ISTEPS_ISTEP4LIST_H +#define __ISTEPS_ISTEP4LIST_H + +/** + * @file istep4list.H + * + * list of functions called by HWAS (ISTEP 4) - "named isteps" + * + */ + + +#include <initservice/initsvcstructs.H> +#include <initservice/initsvcreasoncodes.H> + +#include <hwas/hwas.H> + +namespace INITSERVICE +{ + +/** + * @note IStep definition for for Hardware Availability Service (HWAS) + * + * 1. Initialize Target States + * 1.POWERED_ON=true + * 2.PRESENT=false + * 3.FUNCTIONAL=false + * 4.CHANGED_SINCE_LAST_IPL + * 5.GARD Level (4 bits) + * 6.Others? + * 2. Call FSI module to "walk the bus" and collect presence information. + * 3. Call FSI module interface to collect presence information + * 4. Apply presence data: DD framework (Call loaded device drivers) + * 5. Apply PR keyword data + * 6. Apply Partial Bad data (call Partial Bad module) + * 7. Apply GARD data (call GARD module) + * + */ +const TaskInfo g_istep4[] = { + + { + "init_target_states" , // substep name + HWAS::init_target_states, // pointer to fn + { + START_FN, // task type + EXT_IMAGE, // Extended Module + HWAS_1_ERRL_ID, // module id + } + }, + { + "init_fsi" , // substep name + HWAS::init_fsi, // pointer to fn + { + START_FN, // task type + EXT_IMAGE, // Extended Module + HWAS_2_ERRL_ID, // module id + } + }, + { + "apply_fsi_info" , // substep name + HWAS::apply_fsi_info, // pointer to fn + { + START_FN, // task type + EXT_IMAGE, // Extended Module + HWAS_3_ERRL_ID, // module id + } + }, + { + "apply_dd_presence" , // substep name + HWAS::apply_dd_presence, // pointer to fn + { + START_FN, // task type + EXT_IMAGE, // Extended Module + HWAS_5_ERRL_ID, // module id + } + }, + { + "apply_pr_keyword_data" , // substep name + HWAS::apply_pr_keyword_data, // pointer to fn + { + START_FN, // task type + EXT_IMAGE, // Extended Module + HWAS_6_ERRL_ID, // module id + } + }, + { + "apply_partial_bad" , // substep name + HWAS::apply_partial_bad, // pointer to fn + { + START_FN, // task type + EXT_IMAGE, // Extended Module + HWAS_7_ERRL_ID, // module id + } + }, + { + "apply_gard" , // substep name + HWAS::apply_gard, // pointer to fn + { + START_FN, // task type + EXT_IMAGE, // Extended Module + HWAS_8_ERRL_ID, // module id + } + } + + // END OF LIST! +}; + +// make a struct from the above with the number of items included +const ExtTaskInfo g_istep4TaskList = { + g_istep4, + ( sizeof(g_istep4)/sizeof(TaskInfo) ) +}; + +}; // end namespace + +#endif diff --git a/src/include/usr/isteps/isteplist.H b/src/include/usr/isteps/isteplist.H deleted file mode 100644 index 730310b87..000000000 --- a/src/include/usr/isteps/isteplist.H +++ /dev/null @@ -1,155 +0,0 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/include/usr/isteps/isteplist.H $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2011 -// -// p1 -// -// Object Code Only (OCO) source materials -// Licensed Internal Code Source Materials -// IBM HostBoot Licensed Internal Code -// -// The source code for this program is not published or other- -// wise divested of its trade secrets, irrespective of what has -// been deposited with the U.S. Copyright Office. -// -// Origin: 30 -// -// IBM_PROLOG_END -#ifndef __ISTEPS_H -#define __ISTEPS_H - -/** - * @file isteplist.H - * - * TaskInfo structs for each task that will run in the extended image. - */ - -#include <vector> - -#include <initservice/initsvcreasoncodes.H> -#include <initservice/initsvcstructs.H> - -#include "isteps.H" - - -namespace INITSERVICE -{ - -const uint64_t MAX_SUBSTEPS = 25; - -/** - * @struct ExtTaskInfo - * - * struct to store the TaskInfo for this IStep, plus the number of items in - * the istep (calculated at compiletime). - */ -struct ExtTaskInfo -{ - const TaskInfo *const pti; - const uint64_t numitems; -}; - -const TaskInfo istep0[] = { - - { - "istep0_substep0" , // istep name - ISTEPS::IStep0sub0, // pointer to fn - { - NONE, // task type - EXT_IMAGE, // Extended Module - ISTEP_1_ERRL_ID, // module id - } - }, - - { - "istep0_substep1" , // istep name - ISTEPS::IStep0sub1, // pointer to fn - { - NONE, // task type - EXT_IMAGE, // Extended Module - ISTEP_1_ERRL_ID, // module id - } - }, - - // --------------------------------------------------------------- - // ----- END OF LIST!!! --------------------------------------- - // --------------------------------------------------------------- - /** - * @brief last task in the list - */ - { - "end_istep0" , // dummy string - NULL, // pointer to fn - { - END_TASK_LIST, // end of list - UNDEFINED_MT, // dummy module type - UNDEFINED_MODULE_ERRL_ID, // dummy errorlog - } - }, -}; - -// make a struct from the above with the number of items included -const ExtTaskInfo g_istep0 = { - &(istep0[0]), - ( sizeof(istep0)/sizeof(TaskInfo) ) // numitems -}; - - -const TaskInfo istep1[] = { - - /** - * @brief targeting task, initializes extended module area - */ - { - "istep1_sub0" , // istep name - ISTEPS::IStep1sub0, // pointer to fn - { - NONE, // task type - EXT_IMAGE, // Extended Module - ISTEP_1_ERRL_ID, // module id - } - }, - - // --------------------------------------------------------------- - // ----- END OF LIST!!! --------------------------------------- - // --------------------------------------------------------------- - - /** - * @brief last task in the list - */ - { - "end" , // dummy string - NULL, // pointer to fn - { - END_TASK_LIST, // end of list - UNDEFINED_MT, // dummy module type - UNDEFINED_MODULE_ERRL_ID, // dummy errorlog - } - }, -}; - -// make a struct from the above with the number of items included -ExtTaskInfo g_istep1 = { - istep1, - ( sizeof(istep1)/sizeof(TaskInfo) ) -}; - - -// initialize an array of ExtTaskInfo -const ExtTaskInfo g_isteps[] = { - g_istep0, - g_istep1, -}; - -// publish the size of the g_isteps array -const uint64_t MAX_ISTEPS = sizeof(g_isteps)/sizeof(TaskInfo *) ; - - -}; // namespace - -#endif diff --git a/src/include/usr/isteps/istepmasterlist.H b/src/include/usr/isteps/istepmasterlist.H new file mode 100644 index 000000000..ebdad717d --- /dev/null +++ b/src/include/usr/isteps/istepmasterlist.H @@ -0,0 +1,83 @@ +// IBM_PROLOG_BEGIN_TAG +// This is an automatically generated prolog. +// +// $Source: src/include/usr/isteps/istepmasterlist.H $ +// +// IBM CONFIDENTIAL +// +// COPYRIGHT International Business Machines Corp. 2011 +// +// p1 +// +// Object Code Only (OCO) source materials +// Licensed Internal Code Source Materials +// IBM HostBoot Licensed Internal Code +// +// The source code for this program is not published or other- +// wise divested of its trade secrets, irrespective of what has +// been deposited with the U.S. Copyright Office. +// +// Origin: 30 +// +// IBM_PROLOG_END +#ifndef __ISTEPS_ISTEPMASTERLIST_H +#define __ISTEPS_ISTEPMASTERLIST_H + +/** + * @file isteplist.H + * + * ExtTaskInfo structs for each IStep that will run. + * + * This is the master list of ISTeps. + * To add a new IStep, make a new file in the isteps directory and name + * it "istepNlist.H", where N is the IStep number. + * The file will have 2 const arrays of structs defined (see initsvcstructs.H) + * + * const TaskInfo g_istepN[] // define the substeps/"named isteps" within + * // the IStep + * + * Read through initsvcstructs.H to understand how the TaskInfo Array is + * put together. + * + * Then build the ExtTaskInfo struct: + * const ExtTaskInfo g_istepNTaskList = { + * g_istepN, + * ( sizeof(g_istepN)/sizeof(TaskInfo) ) + * } + * + * Then add the pointer to istepNTaskList to the bottom of the g_isteps[] + * array below. IStepDispatcher should pick up the new IStep automagically. + * + */ + +#include <vector> +#include <initservice/initsvcstructs.H> + +// include list for IStep 4 (HWAS) +#include "istep4list.H" + + +namespace INITSERVICE +{ + +// initialize an array of ExtTaskInfo +const ExtTaskInfo g_isteps[] = { + { NULL, 0 }, // dummy IStep 1 + { NULL, 0 }, // dummy IStep 2 + { NULL, 0 }, // dummy IStep 3 + INITSERVICE::g_istep4TaskList, // HWAS + + // + // add further istep lists at the end. +}; + + +const uint64_t MAX_SUBSTEPS = 25; + +// publish the size of the g_isteps array +const uint64_t MAX_ISTEPS = sizeof(g_isteps)/sizeof(ExtTaskInfo) ; + + +}; // namespace + +#endif diff --git a/src/include/usr/isteps/isteps.H b/src/include/usr/isteps/isteps.H deleted file mode 100644 index b8dac9132..000000000 --- a/src/include/usr/isteps/isteps.H +++ /dev/null @@ -1,50 +0,0 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/include/usr/isteps/isteps.H $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2011 -// -// p1 -// -// Object Code Only (OCO) source materials -// Licensed Internal Code Source Materials -// IBM HostBoot Licensed Internal Code -// -// The source code for this program is not published or other- -// wise divested of its trade secrets, irrespective of what has -// been deposited with the U.S. Copyright Office. -// -// Origin: 30 -// -// IBM_PROLOG_END -/** - * @file isteps.H - * - * Prototypes of ISteps launched by IStepDispatcher - * used by isteplist.H - * - */ - - -/******************************************************************************/ -// Includes -/******************************************************************************/ -#include <stdint.h> - -namespace ISTEPS -{ - -extern "C" -void IStep0sub0( void * io_pArgs ); - -extern "C" -void IStep0sub1( void * io_pArgs ); - -extern "C" -void IStep1sub0( void * io_pArgs ); - - -} // namespace diff --git a/src/makefile b/src/makefile index d407f6549..2f1449342 100644 --- a/src/makefile +++ b/src/makefile @@ -47,14 +47,14 @@ BASE_MODULES = trace errl devicefw scom xscom initservice taskargs pnor i2c \ fsi vfs EXTENDED_MODULES = targeting ecmddatabuffer hwpf fapi hwp plat \ - extinitsvc istepdisp isteps + extinitsvc istepdisp hwas DIRECT_BOOT_MODULES = example RUNTIME_MODULES = TESTCASE_MODULES = cxxtest testerrl testdevicefw testsyslib \ testscom testxscom testtargeting testinitservice testkernel \ testhwpf testecmddatabuffer initsvctasktest2 testcxxtest \ - testpnor testi2c testfsi testvfs + testpnor testi2c testfsi testvfs testhwas RELOCATABLE_IMAGE_LDFLAGS = -pie --export-dynamic diff --git a/src/usr/cxxtest/cxxtestexec.C b/src/usr/cxxtest/cxxtestexec.C index 58540c3ff..31c58824c 100644 --- a/src/usr/cxxtest/cxxtestexec.C +++ b/src/usr/cxxtest/cxxtestexec.C @@ -67,8 +67,8 @@ void _start(void *io_pArgs) errlHndl_t l_errl = NULL; std::vector<const char *> module_list; tid_t tidrc = 0; - TaskArgs::TaskArgs *pTaskArgs = - reinterpret_cast<TaskArgs::TaskArgs *>(io_pArgs); + TASKARGS_INIT_TASKARGS( io_pArgs ); + // output a blank line so that it's easier to find the beginning of // CxxTest @@ -121,30 +121,24 @@ void _start(void *io_pArgs) *i, tidrc ); } - TRACDCOMP( g_trac_cxxtest, "Waiting for all tasks to finish...."); + TRACFCOMP( g_trac_cxxtest, "Waiting for all tasks to finish...."); // wait for all the launched tasks to finish barrier_wait( &CxxTest::g_CxxTestBarrier ); __sync_add_and_fetch(&CxxTest::g_ModulesCompleted, 1); - TRACDCOMP( g_trac_cxxtest, " ModulesCompleted=%d", + TRACFCOMP( g_trac_cxxtest, " ModulesCompleted=%d", CxxTest::g_ModulesCompleted ); - TRACDCOMP( g_trac_cxxtest, EXIT_MRK "Finished CxxTestExec: "); - TRACDCOMP( g_trac_cxxtest, " total tests: %d", + TRACFCOMP( g_trac_cxxtest, EXIT_MRK "Finished CxxTestExec: "); + TRACFCOMP( g_trac_cxxtest, " total tests: %d", CxxTest::g_TotalTests ); - TRACDCOMP( g_trac_cxxtest, " failed tests: %d", + TRACFCOMP( g_trac_cxxtest, " failed tests: %d", CxxTest::g_FailedTests ); - TRACDCOMP( g_trac_cxxtest, " warnings: %d", + TRACFCOMP( g_trac_cxxtest, " warnings: %d", CxxTest::g_Warnings ); - TRACDCOMP( g_trac_cxxtest, " trace calls: %d", + TRACFCOMP( g_trac_cxxtest, " trace calls: %d", CxxTest::g_TraceCalls ); - // wait for TaskArgs barrier - if ( pTaskArgs ) - { - pTaskArgs->waitChildSync(); - } - - task_end(); + TASKARGS_WAIT_AND_ENDTASK(); } diff --git a/src/usr/errl/parser/makefile b/src/usr/errl/parser/makefile index d87017a3b..a48373c65 100644 --- a/src/usr/errl/parser/makefile +++ b/src/usr/errl/parser/makefile @@ -32,11 +32,11 @@ SRCPARSE_HEADER_TARGET = \ ${GENFILES}/hostBootSrcParse.H CC=g++ -m32 -CFLAGS:=-g -O0 -I $(ROOTPATH)/src/include/usr +CFLAGS:=-g -O0 -I $(ROOTPATH)/src/include/usr -D PARSER BIN:=bin -all: code_pass +all: gen_pass code_pass gen_pass: diff --git a/src/usr/hwas/hwas.C b/src/usr/hwas/hwas.C new file mode 100644 index 000000000..c7872d033 --- /dev/null +++ b/src/usr/hwas/hwas.C @@ -0,0 +1,141 @@ +// IBM_PROLOG_BEGIN_TAG +// This is an automatically generated prolog. +// +// $Source: src/usr/hwas/hwas.C $ +// +// IBM CONFIDENTIAL +// +// COPYRIGHT International Business Machines Corp. 2011 +// +// p1 +// +// Object Code Only (OCO) source materials +// Licensed Internal Code Source Materials +// IBM HostBoot Licensed Internal Code +// +// The source code for this program is not published or other- +// wise divested of its trade secrets, irrespective of what has +// been deposited with the U.S. Copyright Office. +// +// Origin: 30 +// +// IBM_PROLOG_END + +/** + * @file hwas.C + * + * HardWare Availability Service functions. + * See hwas.H for doxygen documentation tags. + * + */ + + +/******************************************************************************/ +// Includes +/******************************************************************************/ +#include <stdint.h> + +#include <kernel/console.H> +#include <trace/interface.H> +#include <initservice/taskargs.H> +#include <errl/errlentry.H> +#include <targeting/target.H> // targeting + +#include <fsi/fsiif.H> +#include <hwas/hwas.H> + + +namespace HWAS +{ + trace_desc_t *g_trac_hwas = NULL; + TRAC_INIT(&g_trac_hwas, "HWAS", 1024 ); // yah. + + using namespace TARGETING; // + + void init_target_states( void *io_pArgs ) + { + TASKARGS_INIT_TASKARGS( io_pArgs ); + + TRACDCOMP( g_trac_hwas, "init_target_states entry" ); + // printkd("init_target_states\n"); + + + TASKARGS_WAIT_AND_ENDTASK(); + } + + void init_fsi( void *io_pArgs ) + { + errlHndl_t l_errl = NULL; + TASKARGS_INIT_TASKARGS( io_pArgs ); + + TRACDCOMP( g_trac_hwas, "init_fsi entry" ); + // printkd("init_fsi\n"); + + l_errl = FSI::initializeHardware( ); + if ( l_errl ) + { + TRACFCOMP( g_trac_hwas, "ERROR: failed to init FSI hardware" ); + POST_ERROR_LOG( l_errl ); + } + + TASKARGS_WAIT_AND_ENDTASK(); + } + + void apply_fsi_info( void *io_pArgs ) + { + TASKARGS_INIT_TASKARGS( io_pArgs ); + + TRACDCOMP( g_trac_hwas, "apply_fsi_info entry" ); + //printkd("apply_fsi_info\n"); + + + TASKARGS_WAIT_AND_ENDTASK(); + } + + void apply_dd_presence( void *io_pArgs ) + { + TASKARGS_INIT_TASKARGS( io_pArgs ); + + TRACDCOMP( g_trac_hwas, "apply_dd_presence entry" ); + //printkd("apply_dd_presence\n"); + + + TASKARGS_WAIT_AND_ENDTASK(); + } + + void apply_pr_keyword_data( void *io_pArgs ) + { + TASKARGS_INIT_TASKARGS( io_pArgs ); + + TRACDCOMP( g_trac_hwas, "apply_pr_keyword_data" ); + //printkd("apply_pr_keyword_data\n"); + + + TASKARGS_WAIT_AND_ENDTASK(); + } + + void apply_partial_bad( void *io_pArgs ) + { + TASKARGS_INIT_TASKARGS( io_pArgs ); + + TRACDCOMP( g_trac_hwas, "apply_partial_bad entry" ); + //printkd("apply_partial_bad\n"); + + + TASKARGS_WAIT_AND_ENDTASK(); + } + + void apply_gard( void *io_pArgs ) + { + TASKARGS_INIT_TASKARGS( io_pArgs ); + + TRACDCOMP( g_trac_hwas, "apply_gard entry" ); + //printkd("apply_gard\n"); + + + TASKARGS_WAIT_AND_ENDTASK(); + } + + +}; // end namespace + diff --git a/src/usr/hwas/makefile b/src/usr/hwas/makefile new file mode 100644 index 000000000..c4a596500 --- /dev/null +++ b/src/usr/hwas/makefile @@ -0,0 +1,30 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/hwas/makefile $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2011 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or other- +# wise divested of its trade secrets, irrespective of what has +# been deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END +ROOTPATH = ../../.. +MODULE = hwas + +OBJS = hwas.o + +SUBDIRS=test.d + +include ${ROOTPATH}/config.mk diff --git a/src/usr/hwas/test/hwas1test.H b/src/usr/hwas/test/hwas1test.H new file mode 100644 index 000000000..2ee648158 --- /dev/null +++ b/src/usr/hwas/test/hwas1test.H @@ -0,0 +1,138 @@ +// IBM_PROLOG_BEGIN_TAG +// This is an automatically generated prolog. +// +// $Source: src/usr/targeting/test/targetingtest.H $ +// +// IBM CONFIDENTIAL +// +// COPYRIGHT International Business Machines Corp. 2011 +// +// p1 +// +// Object Code Only (OCO) source materials +// Licensed Internal Code Source Materials +// IBM HostBoot Licensed Internal Code +// +// The source code for this program is not published or other- +// wise divested of its trade secrets, irrespective of what has +// been deposited with the U.S. Copyright Office. +// +// Origin: 30 +// +// IBM_PROLOG_END +#ifndef __TESTTARGETING_H +#define __TESTTARGETING_H + +/** + * @file testtargeting.H + * + * @brief Unit tests for HWAS (ISTEP 4) + */ + +//****************************************************************************** +// Includes +//****************************************************************************** + +// STD +#include <stdio.h> +#include <sys/time.h> + +// CXXTEST +#include <cxxtest/TestSuite.H> +#include <hwpf/plat/fapiPlatAttributeService.H> +#include <fapiReturnCode.H> +#include <fapiAttributeIds.H> +#include <fapiAttributeService.H> +#include <errl/errlmanager.H> + +// This component +#include <targeting/attributes.H> +#include <targeting/entitypath.H> +#include <targeting/target.H> +#include <targeting/targetservice.H> +#include <targeting/iterators/rangefilter.H> +#include <targeting/predicates/predicatectm.H> +#include <targeting/predicates/predicatepostfixexpr.H> + +class HWAS1test: public CxxTest::TestSuite +{ +public: + + /** + * @brief Walk all the targets and verify that HWAS_STATE is set + * correctly. + * + * @note Results of this test will change as more stuff gets added to + * HWAS - how to fix? + */ + void testHWASdefaultPresence() + { + + nanosleep(1,0); + TS_TRACE(ENTER_MRK "testHWASdefaultPresence" ); + + using namespace TARGETING; + + TargetService& l_targetService = targetService(); + + l_targetService.init(); + + + // get top level + // Post init + // Test: void getTopLevelTarget(Target*& o_targetHandle) const; + + Target* l_pTopLevel = NULL; + (void) l_targetService.getTopLevelTarget(l_pTopLevel); + if (l_pTopLevel == NULL) + { + TS_FAIL("Top level handle was NULL when initialization complete"); + } + + // Post init + // Test: void getAssociated( + // const Target* i_pTarget, + // ASSOCIATION_TYPE i_type, + // RECURSION_LEVEL i_recursionLevel, + // TargetHandleList& o_list) const; + + TargetHandleList l_list; + (void) l_targetService.getAssociated( + l_list, + l_pTopLevel, + TARGETING::TargetService::CHILD, + TARGETING::TargetService::ALL); + + TS_TRACE("Child list size is 0x%x", l_list.size() ); + for (uint64_t i=0; i<l_list.size(); i++ ) + { + // 2011-10-19 all attribute fields should be 0 at this point. + if ( ( l_list[i]->getAttr<ATTR_HWAS_STATE>().poweredOn) + || ( l_list[i]->getAttr<ATTR_HWAS_STATE>().present) + || ( l_list[i]->getAttr<ATTR_HWAS_STATE>().functional) + || ( l_list[i]->getAttr<ATTR_HWAS_STATE>().changedSinceLastIPL) + || ( l_list[i]->getAttr<ATTR_HWAS_STATE>().gardLevel) + ) + { + l_list[i]->getAttr<ATTR_PHYS_PATH>().dump(); + TS_TRACE( " poweredOn = 0x%x", + l_list[i]->getAttr<ATTR_HWAS_STATE>().poweredOn ); + TS_TRACE( " present = 0x%x", + l_list[i]->getAttr<ATTR_HWAS_STATE>().present ); + TS_TRACE( " l_functional = 0x%x", + l_list[i]->getAttr<ATTR_HWAS_STATE>().functional ); + TS_TRACE( " l_changedSinceLastIPL = 0x%x", + l_list[i]->getAttr<ATTR_HWAS_STATE>().changedSinceLastIPL ); + TS_TRACE( " l_gardLevel = 0x%x", + l_list[i]->getAttr<ATTR_HWAS_STATE>().gardLevel ); + + TS_FAIL( "Attribute fields not correct: "); + } + } + + TS_TRACE(EXIT_MRK "testHWASdefaultPresence" ); + } + +}; + +#endif // diff --git a/src/usr/isteps/makefile b/src/usr/hwas/test/makefile index 4d34a6331..6cc573dbe 100644 --- a/src/usr/isteps/makefile +++ b/src/usr/hwas/test/makefile @@ -1,7 +1,7 @@ # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # -# $Source: src/usr/isteps/makefile $ +# $Source: src/usr/targeting/test/makefile $ # # IBM CONFIDENTIAL # @@ -20,17 +20,19 @@ # Origin: 30 # # IBM_PROLOG_END -ROOTPATH = ../../.. +ROOTPATH = ../../../.. -EXTRAINCDIR += ${ROOTPATH}/src/include/usr/ecmddatabuffer EXTRAINCDIR += ${ROOTPATH}/src/include/usr/hwpf/fapi EXTRAINCDIR += ${ROOTPATH}/src/include/usr/hwpf/plat EXTRAINCDIR += ${ROOTPATH}/src/include/usr/hwpf/hwp +EXTRAINCDIR += ${ROOTPATH}/src/include/usr/ecmddatabuffer -MODULE = isteps - -OBJS = istep1.o +MODULE = testhwas +TESTS = *.H -# SUBDIRS = test +OBJS = attributestrings.o include ${ROOTPATH}/config.mk + +vpath %.C ${GENDIR} + diff --git a/src/usr/initservice/baseinitsvc/initservice.C b/src/usr/initservice/baseinitsvc/initservice.C index e26da0a8c..a51e909ed 100644 --- a/src/usr/initservice/baseinitsvc/initservice.C +++ b/src/usr/initservice/baseinitsvc/initservice.C @@ -45,7 +45,7 @@ namespace INITSERVICE { trace_desc_t *g_trac_initsvc = NULL; -TRAC_INIT(&g_trac_initsvc, "INITSERVICE", 4096 ); +TRAC_INIT(&g_trac_initsvc, "INITSVC", 4096 ); errlHndl_t InitService::startTask( const TaskInfo *i_ptask, diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.C b/src/usr/initservice/istepdispatcher/istepdispatcher.C index 42e66ab0c..addc6f071 100644 --- a/src/usr/initservice/istepdispatcher/istepdispatcher.C +++ b/src/usr/initservice/istepdispatcher/istepdispatcher.C @@ -44,12 +44,14 @@ #include <errl/errlentry.H> // errlHndl_t #include <devicefw/userif.H> // targeting #include <sys/mmio.h> // mmio_scratch_read() +#include <initservice/taskargs.H> // TaskArgs structs + #include "istepdispatcher.H" #include "splesscommon.H" -#include <isteps/isteplist.H> +#include <isteps/istepmasterlist.H> namespace INITSERVICE @@ -100,15 +102,26 @@ const TaskInfo *IStepDispatcher::findTaskInfo( const uint16_t i_IStep, { const TaskInfo *l_pistep = NULL; - TRACDCOMP( g_trac_initsvc, - "g_isteps[%d].numitems = 0x%x", - i_IStep, - g_isteps[i_IStep].numitems ); // apply filters do { + // Sanity check / dummy IStep + if ( g_isteps[i_IStep].pti == NULL) + { + TRACDCOMP( g_trac_initsvc, + "g_isteps[%d].pti == NULL", + i_IStep ); + break; + } + + TRACDCOMP( g_trac_initsvc, + "g_isteps[%d].numitems = 0x%x", + i_IStep, + g_isteps[i_IStep].numitems ); + + // check input range - IStep if ( i_IStep >= MAX_ISTEPS ) { @@ -445,7 +458,7 @@ void IStepDispatcher::runAllISteps( void * io_ptr ) const { TRACDCOMP( g_trac_initsvc, - "End of ISubStep list." ); + "End of ISubStep 0x%x list.", l_SubStep ); break; // break out of inner for loop } @@ -457,9 +470,10 @@ void IStepDispatcher::runAllISteps( void * io_ptr ) const l_args.clear(); TRACFCOMP( g_trac_initsvc, - "Run IStep 0x%x / Substep 0x%x", + INFO_MRK "Run IStep 0x%x / Substep 0x%x %s", l_IStep, - l_SubStep ); + l_SubStep, + l_pistep->taskname ); l_errl = InitService::getTheInstance().executeFn( l_pistep, &l_args ); diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.H b/src/usr/initservice/istepdispatcher/istepdispatcher.H index 352b0f450..b507cbe21 100644 --- a/src/usr/initservice/istepdispatcher/istepdispatcher.H +++ b/src/usr/initservice/istepdispatcher/istepdispatcher.H @@ -30,6 +30,12 @@ * */ +/** + * @page IStepDispatcher IStep Dispatcher + * + * + */ + /******************************************************************************/ // Includes diff --git a/src/usr/initservice/taskargs/taskargs.C b/src/usr/initservice/taskargs/taskargs.C index ecb4cd88c..186bb93c6 100644 --- a/src/usr/initservice/taskargs/taskargs.C +++ b/src/usr/initservice/taskargs/taskargs.C @@ -60,28 +60,16 @@ extern trace_desc_t *g_trac_initsvc; void TaskArgs::waitParentSync( ) { - TRACDCOMP( g_trac_initsvc, - "Parent: wait for barrier %p", &iv_sync_barrier ); - barrier_wait( &iv_sync_barrier); - TRACDCOMP( g_trac_initsvc, - "Parent: returned from barrier %p", &iv_sync_barrier ); - } void TaskArgs::waitChildSync( ) { - TRACDCOMP( g_trac_initsvc, - "Child: wait for barrier %p", &iv_sync_barrier ); - barrier_wait( &iv_sync_barrier); - TRACDCOMP( g_trac_initsvc, - "Child: returned from barrier %p", &iv_sync_barrier ); - } diff --git a/src/usr/isteps/istep1.C b/src/usr/isteps/istep1.C deleted file mode 100644 index 73998a55b..000000000 --- a/src/usr/isteps/istep1.C +++ /dev/null @@ -1,183 +0,0 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/usr/isteps/istep1.C $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2011 -// -// p1 -// -// Object Code Only (OCO) source materials -// Licensed Internal Code Source Materials -// IBM HostBoot Licensed Internal Code -// -// The source code for this program is not published or other- -// wise divested of its trade secrets, irrespective of what has -// been deposited with the U.S. Copyright Office. -// -// Origin: 30 -// -// IBM_PROLOG_END - -/** - * @file istep1.C - * - * test ISTep file - * - * @note, you must update isteps.h if you change this one - * - */ - - -/******************************************************************************/ -// Includes -/******************************************************************************/ -#include <stdint.h> -#include <stdio.h> -#include <string.h> - -#include <sys/task.h> - -#include <trace/interface.H> // trace support -#include <errl/errlentry.H> // errlHndl_t -#include <errl/errlmanager.H> -#include <initservice/taskargs.H> // task args - -// pull in stuff to run HW procedure - from Andrew's hwpf testcase 2 -// NOTE: there are extra include paths in isteps/makefile to find the fapi -// includes: -// EXTRAINCDIR += ${ROOTPATH}/src/include/usr/ecmddatabuffer -// EXTRAINCDIR += ${ROOTPATH}/src/include/usr/hwpf/fapi -// EXTRAINCDIR += ${ROOTPATH}/src/include/usr/hwpf/plat - -#include <fapiTarget.H> -#include <fapiPlatHwpInvoker.H> -#include <targeting/targetservice.H> - -using namespace fapi; -using namespace TARGETING; - -namespace ISTEPS -{ - -/******************************************************************************/ -// Globals/Constants -/******************************************************************************/ -trace_desc_t *g_trac_istep1 = NULL; -TRAC_INIT(&g_trac_istep1, "ISTEP1", 4096); - -extern "C" -void IStep0sub0( void * io_pArgs ) -{ - INITSERVICE::TaskArgs *pTaskArgs = - static_cast<INITSERVICE::TaskArgs *>(io_pArgs); - errlHndl_t l_err = NULL; - uint64_t command = pTaskArgs->getCommand(); - uint64_t returncode = pTaskArgs->getReturnCode(); - - - // print out stuff from taskargs - TRACFCOMP( g_trac_istep1, - ENTER_MRK "starting IStep0sub0, command=0x%llx, returncode=0x%llx", - command, returncode ); - // ----- start ISTEP -------------------------------------------------- - - // Get the master processor chip - TARGETING::Target* l_pTarget = NULL; - TARGETING::targetService().masterProcChipTargetHandle(l_pTarget); - - // Create a FAPI Target and invoke the hwpInitialTest HWP - fapi::Target l_fapiTarget(TARGET_TYPE_PROC_CHIP, - reinterpret_cast<void *> (l_pTarget)); - - FAPI_INVOKE_HWP(l_err, hwpInitialTest, l_fapiTarget); - - if (l_err) - { - TRACFCOMP( g_trac_istep1, "IStep1 failed, posting error code 1"); - errlCommit(l_err); - pTaskArgs->postReturnCode( 1 ); - } - else - { - TRACFCOMP( g_trac_istep1, "IStep1 finished successfully."); - pTaskArgs->postReturnCode( 0 ); - } - - -// ----- end ISTEP ------------------------------------------------------ - TRACFCOMP( g_trac_istep1, - EXIT_MRK "ending IStep0sub0"); - - // if non-null, wait for the barrier, otherwise just return - if ( pTaskArgs ) - { - pTaskArgs->waitChildSync(); - } - - task_end(); -} - -extern "C" -void IStep0sub1( void * io_pArgs ) -{ - INITSERVICE::TaskArgs *pTaskArgs = - static_cast<INITSERVICE::TaskArgs *>(io_pArgs); - uint64_t command = pTaskArgs->getCommand(); - uint64_t returncode = pTaskArgs->getReturnCode(); - - - // print out stuff from taskargs - TRACFCOMP( g_trac_istep1, - ENTER_MRK "starting IStep0sub1, command=0x%llx, returncode=0x%llx", - command, returncode ); - // ----- start ISTEP -------------------------------------------------- - - pTaskArgs->postReturnCode( 0 ); - - // ----- end ISTEP ------------------------------------------------------ - TRACFCOMP( g_trac_istep1, - EXIT_MRK "ending IStep0sub1"); - - // if non-null, wait for the barrier, otherwise just return - if ( pTaskArgs ) - { - pTaskArgs->waitChildSync(); - } - - task_end(); -} - -extern "C" -void IStep1sub0( void * io_pArgs ) -{ - INITSERVICE::TaskArgs *pTaskArgs = - static_cast<INITSERVICE::TaskArgs *>(io_pArgs); - uint64_t command = pTaskArgs->getCommand(); - uint64_t returncode = pTaskArgs->getReturnCode(); - - - // print out stuff from taskargs - TRACFCOMP( g_trac_istep1, - ENTER_MRK "starting IStep1sub0, command=0x%llx, returncode=0x%llx", - command, returncode ); - // ----- start ISTEP -------------------------------------------------- - - pTaskArgs->postReturnCode( 0 ); - - // ----- end ISTEP -------------------------------------------------- - TRACFCOMP( g_trac_istep1, - EXIT_MRK "ending IStep1sub0"); - - // if non-null, wait for the barrier, otherwise just return - if ( pTaskArgs ) - { - pTaskArgs->waitChildSync(); - } - - task_end(); -} - -} // namespace diff --git a/src/usr/isteps/isteps.H b/src/usr/isteps/isteps.H deleted file mode 100644 index 4033f0866..000000000 --- a/src/usr/isteps/isteps.H +++ /dev/null @@ -1,42 +0,0 @@ -// IBM_PROLOG_BEGIN_TAG -// This is an automatically generated prolog. -// -// $Source: src/usr/isteps/isteps.H $ -// -// IBM CONFIDENTIAL -// -// COPYRIGHT International Business Machines Corp. 2011 -// -// p1 -// -// Object Code Only (OCO) source materials -// Licensed Internal Code Source Materials -// IBM HostBoot Licensed Internal Code -// -// The source code for this program is not published or other- -// wise divested of its trade secrets, irrespective of what has -// been deposited with the U.S. Copyright Office. -// -// Origin: 30 -// -// IBM_PROLOG_END -/** - * @file isteps.H - * - * Prototypes of ISteps launched by IStepDispatcher - * - */ - - -/******************************************************************************/ -// Includes -/******************************************************************************/ -#include <stdint.h> - -namespace ISTEPS -{ - -extern "C" -void IStep1( void * io_pArgs ); - -} // namespace diff --git a/src/usr/makefile b/src/usr/makefile index 55dcb704c..47e8e2d69 100644 --- a/src/usr/makefile +++ b/src/usr/makefile @@ -26,6 +26,6 @@ OBJS = module_init.o SUBDIRS = example.d trace.d cxxtest.d testcore.d errl.d devicefw.d \ scom.d xscom.d targeting.d initservice.d hwpf.d \ - ecmddatabuffer.d isteps.d pnor.d i2c.d vfs.d fsi.d + ecmddatabuffer.d pnor.d i2c.d vfs.d fsi.d hwas.d include ${ROOTPATH}/config.mk diff --git a/src/usr/targeting/xmltohb/attribute_types.xml b/src/usr/targeting/xmltohb/attribute_types.xml index 7bcc2c840..229d4a399 100644 --- a/src/usr/targeting/xmltohb/attribute_types.xml +++ b/src/usr/targeting/xmltohb/attribute_types.xml @@ -768,6 +768,59 @@ <readable/> </attribute> +<attribute> + <id>HWAS_STATE</id> + <description>HardWare Availability Service State Attribute. + Keeps track of Target values poweredOn, present, functional, + changedSinceLastIPL, and gardLevel</description> + <complexType> + <description>struct - so far contains 4 booleans and a 4-bit GARD level + field</description> + <field> + <name>poweredOn</name> + <description>boolean: Target is powered on, or Not. + comes up as powered off.</description> + <type>uint8_t</type> + <bits>1</bits> + <default>0</default> + </field> + <field> + <name>present</name> + <description>Target is present in the system. + comes up as Not PRESENT. </description> + <type>uint8_t</type> + <bits>1</bits> + <default>0</default> + </field> + <field> + <name>functional</name> + <description>Target is Functional. + comes up as Not FUNCTIONAL </description> + <type>uint8_t</type> + <bits>1</bits> + <default>0</default> + </field> + <field> + <name>changedSinceLastIPL</name> + <description>Target has changed since last IPL. + comes up as FALSE. </description> + <type>uint8_t</type> + <bits>1</bits> + <default>0</default> + </field> + <field> + <name>gardLevel</name> + <description>GARD Level. This is a 4-bit value. + comes up as 0 </description> + <type>uint8_t</type> + <bits>4</bits> + <default>0</default> + </field> + </complexType> + <persistency>volatile</persistency> + <readable/> +</attribute> + </attributes> diff --git a/src/usr/targeting/xmltohb/target_types.xml b/src/usr/targeting/xmltohb/target_types.xml index 14b624893..9eef64d64 100644 --- a/src/usr/targeting/xmltohb/target_types.xml +++ b/src/usr/targeting/xmltohb/target_types.xml @@ -38,6 +38,7 @@ <attribute> <id>PRIMARY_CAPABILITIES</id> </attribute> + <attribute><id>HWAS_STATE</id></attribute> </targetType> <targetType> |