summaryrefslogtreecommitdiffstats
path: root/src/occ_gpe1/gpe_centaur.c
blob: 671b30d2699b69262eaeec070a5bb45488c0803f (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
#include "gpe_centaur.h"
#include "ipc_async_cmd.h"
#include "gpe_util.h"

CentaurConfiguration_t * G_centaur_config = NULL;

void gpe_centaur_init(ipc_msg_t* i_cmd, void* i_arg)
{
    int      rc;
    ipc_async_cmd_t *async_cmd = (ipc_async_cmd_t*)i_cmd;
    CentaurConfigParms_t* payload = (CentaurConfigParms_t*)async_cmd->cmd_data;

    CentaurConfiguration_t * config = payload->centaurConfiguration;
    G_centaur_config = config;

    payload->error.error = 0;
    payload->error.ffdc  = 0;

    if(G_centaur_config == NULL)
    {
        PK_TRACE("gpe_centaur_init: centaurConfiguration data ptr is NULL!");
        rc = GPE_RC_CONFIG_DATA_NULL_PTR;
    }
    else
    {
        rc = gpe_centaur_configuration_create(G_centaur_config);
    }

    payload->error.rc = rc;

    // Send response
    rc = ipc_send_rsp(i_cmd, IPC_RC_SUCCESS);
    if(rc)
    {
        PK_TRACE("gpe_centaur_init: Failed to send response. rc = %x. Halting GPE1.",
                 rc);

        gpe_set_ffdc(&(payload->error), 0x00, GPE_RC_IPC_SEND_FAILED, rc);
        pk_halt();
    }
}

void gpe_centaur_scom(ipc_msg_t* i_cmd, void* i_arg)
{
    int      rc;
    ipc_async_cmd_t *async_cmd = (ipc_async_cmd_t*)i_cmd;
    CentaurScomParms_t * scomParms = (CentaurScomParms_t*)async_cmd->cmd_data;

    gpe_scom_centaur(G_centaur_config, scomParms);

    // Send response
    rc = ipc_send_rsp(i_cmd, IPC_RC_SUCCESS);
    if(rc)
    {
        PK_TRACE("gpe_centaur_scom: Failed to send response. rc = %x. Halting GPE1.",
                 rc);

        gpe_set_ffdc(&(scomParms->error), 0x00, GPE_RC_IPC_SEND_FAILED, rc);
        pk_halt();
    }


}

void gpe_centaur_data(ipc_msg_t* i_cmd, void* i_arg)
{
    int      rc;
    ipc_async_cmd_t *async_cmd = (ipc_async_cmd_t*)i_cmd;

    CentaurGetMemDataParms_t * dataParms =
        (CentaurGetMemDataParms_t *)async_cmd->cmd_data;

    rc = centaur_get_mem_data(G_centaur_config, dataParms);

    dataParms->error.rc = rc;

    // Send response
    rc = ipc_send_rsp(i_cmd, IPC_RC_SUCCESS);
    if(rc)
    {
        PK_TRACE("gpe_centaur_init: Failed to send response. rc = %x. Halting GPE1.",
                 rc);

        gpe_set_ffdc(&(dataParms->error), 0x00, GPE_RC_IPC_SEND_FAILED, rc);
        pk_halt();
    }
}


OpenPOWER on IntegriCloud