summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/lib/wrapper/p9_pstate_parameter_block_wrap.C
blob: e25225bd3b815ae30f3a9273f03cece756579483 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* $Source: chips/p9/procedures/hwp/lib/wrapper/p9_pstate_parameter_block_wrap.C $ */
/*                                                                        */
/* IBM CONFIDENTIAL                                                       */
/*                                                                        */
/* EKB Project                                                            */
/*                                                                        */
/* COPYRIGHT 2015,2016                                                    */
/* [+] International Business Machines Corp.                              */
/*                                                                        */
/*                                                                        */
/* The source code for this program is not published or otherwise         */
/* divested of its trade secrets, irrespective of what has been           */
/* deposited with the U.S. Copyright Office.                              */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */

//## auto_generated

// Includes
#include <fapi2.H>
#include <fapi2ClientCapi.H>
#include <ecmdClientCapi.H>
#include <ecmdSharedUtils.H>
#include <ecmdUtils.H>

#include <p9_pstate_parameter_block.H>

static std::string procedureName = "p9_pstate_parameter_block";

void help()
{
    char helpstr[256];
    sprintf(helpstr, "\nThis is the help text for the procedure %s: \n\n",
            procedureName.c_str());
    ecmdOutput("helpstr\n");
    ecmdOutput("Usage: p9_pstate_parameter_block_wrap [-h] [-k#] [-n#] [-s#] [-p#] [-quiet] [-verif]\n");
    ecmdOutput("  Option flags are:\n");
    ecmdOutput(" -h       Display this help message.\n");
    ecmdOutput(" -k#      Specify which cage to act on.\n");
    ecmdOutput(" -n#      Specify which node to act on.\n");
    ecmdOutput(" -s#      Specify which slot to act on.\n");
    ecmdOutput(" -p#      Specify which chip position to act on.\n");
    ecmdOutput(" -quiet   Suppress printing of eCMD DLL/procedure informational messages (default = false).\n");
    ecmdOutput(" -verif   Run procedure in sim verification mode (default = false).\n");

}

int main(int argc,
         char* argv[])
{
    extern bool GLOBAL_SIM_MODE;
    extern bool GLOBAL_VERIF_MODE;
    uint64_t rc = ECMD_SUCCESS;
    fapi2::ReturnCode rc_fapi;
    ecmdLooperData looper; // Store internal Looper data
    ecmdChipTarget target; // This is the target to operate on
    ecmdDllInfo DLLINFO; //

    // PState super structure
    PstateSuperStructure io_pss;
    //
    // ------------------------------------
    // Load and initialize the eCMD Dll
    // If left NULL, which DLL to load is determined by the ECMD_DLL_FILE
    // environment variable
    // If set to a specific value, the specified dll will be loaded
    // ------------------------------------
    rc = ecmdLoadDll("");

    if (rc)
    {
        ecmdOutput("p9_pstate_parameter_block_wrap: Error calling ecmdLoadDll.");
        ecmdUnloadDll();
        return rc;
    }

    //
    // This is needed if you're running a FAPI procedure from this eCMD procedure
    rc = fapi2InitExtension();

    if (rc)
    {
        ecmdOutput("p9_pstate_parameter_block_wrap: Error calling fapi2InitExtension.");
        ecmdUnloadDll();
        return rc;
    }

    //
    // establish if this is a simulation run or not
    //
    rc = ecmdQueryDllInfo(DLLINFO);

    if (rc)
    {
        ecmdOutput("p9_pstate_parameter_block_wrap: Error calling ecmdQueryDllInfo.");
        ecmdUnloadDll();
        return rc;
    }

    if (DLLINFO.dllEnv == ECMD_DLL_ENV_SIM)
    {
        GLOBAL_SIM_MODE = true;
    }

    // Parse out user options (excluding -pX, -cX, -coe, -debug, etc
    if (ecmdParseOption(&argc, &argv, "-h"))
    {
        help();
        ecmdUnloadDll();
        return 1;
    }

    // run procedure in sim verification mode
    if (ecmdParseOption(&argc, &argv, "-verif"))
    {
        GLOBAL_VERIF_MODE = true;
    }

    //
    // -------------------------------------------------------------------------------------------------
    // Parse out common eCMD args like -p0, -c0, -coe, etc..
    // Any found args will be removed from arg list upon return
    // -------------------------------------------------------------------------------------------------
    rc = ecmdCommandArgs(&argc, &argv);

    if (rc)
    {
        ecmdOutput("p9_pstate_parameter_block_wrap: Error calling ecmdCommandArgs.");
        ecmdUnloadDll();
        return rc;
    }

    // unsupported arguments left over?
    if (argc != 1)
    {
        ecmdOutput("Unknown/unsupported arguments specified!\n");
        help();
        ecmdUnloadDll();
        return ECMD_INVALID_ARGS;
    }

    //
    // always print the dll info to the screen, unless in quiet mode
    if (!ecmdGetGlobalVar(ECMD_GLOBALVAR_QUIETMODE))
    {
        rc = ecmdDisplayDllInfo();

        if (rc)
        {
            ecmdOutput("p9_pstate_parameter_block_wrap: Error calling ecmdDisplayDllInfo.");
            ecmdUnloadDll();
            return rc;
        }
    }

    target.chipType      = "pu";
    target.chipTypeState = ECMD_TARGET_FIELD_VALID;
    target.chipUnitTypeState     = ECMD_TARGET_FIELD_UNUSED;
    target.chipUnitNumState     = ECMD_TARGET_FIELD_UNUSED;
    target.cageState     = ECMD_TARGET_FIELD_WILDCARD;
    target.nodeState     = ECMD_TARGET_FIELD_WILDCARD;
    target.slotState     = ECMD_TARGET_FIELD_WILDCARD;
    target.chipUnitNumState     = ECMD_TARGET_FIELD_WILDCARD;
    target.coreState     = ECMD_TARGET_FIELD_UNUSED;
    target.threadState     = ECMD_TARGET_FIELD_UNUSED;
    rc = ecmdConfigLooperInit(target, ECMD_SELECTED_TARGETS_LOOP_DEFALL, looper);

    if (rc)
    {
        ecmdOutput("p9_pstate_parameter_block_wrap: Error calling ecmdConfigLooperInit.");
        ecmdUnloadDll();
        return rc;
    }

    ecmdOutput("Entering config looper\n");

    // loop over specified configured positions
    while (ecmdConfigLooperNext(target, looper))
    {
        // set up fapi target from an ecmd target
        fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>fapi_target(&target);

        //Run it with the COMPUTE command
        FAPI_EXEC_HWP(rc_fapi, p9_pstate_parameter_block, fapi_target, &io_pss);
        rc = (uint64_t)rc_fapi;

        if (rc)
        {
            ecmdOutput("p9_pstate_parameter_block_wrap: Error calling procedure p9_pstate_parameter_block");
            ecmdUnloadDll();
            return rc;
        }

    }

    ecmdOutput("p9_pstate_parameter_block is Done\n");
    // Unload the eCMD Dll, this should always be the last thing you do
    ecmdUnloadDll();

    return rc;

}
OpenPOWER on IntegriCloud