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
|
/* -*- linux-c -*-
*
* (C) Copyright IBM Corp. 2008
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This
* file and program are licensed under a BSD style license. See
* the Copying file included with the OpenHPI distribution for
* full licensing terms.
*
* Authors:
* Suntrupth S Yadav <suntrupth@in.ibm.com>
*/
#include <sim_init.h>
#include <rpt_utils.h>
static SaErrorT new_dimi(struct oh_handler_state *state,
struct oh_event *e,
struct sim_dimi *mydimi) {
SaHpiRdrT *rdr = NULL;
struct sim_dimi_info *info;
SaErrorT error = SA_OK;
rdr = (SaHpiRdrT *)g_malloc0(sizeof(SaHpiRdrT));
// Copy information from rdr array to res_rdr
rdr->RdrType = SAHPI_DIMI_RDR;
memcpy(&rdr->RdrTypeUnion.DimiRec, &mydimi->dimirec,
sizeof(SaHpiDimiRecT));
oh_init_textbuffer(&rdr->IdString);
oh_append_textbuffer(&rdr->IdString, mydimi->comment);
rdr->RecordId =
oh_get_rdr_uid(SAHPI_DIMI_RDR, rdr->RdrTypeUnion.DimiRec.DimiNum);
// get the entity path
rdr->Entity = e->resource.ResourceEntity;
//set up our private data
info = (struct sim_dimi_info *)g_malloc(sizeof(struct sim_dimi_info));
memcpy(&info->info, &mydimi->info, sizeof(SaHpiDimiInfoT));
memcpy(&info->test, &mydimi->test, sizeof(SaHpiDimiTestT));
/* everything ready so inject the rdr */
error = sim_inject_rdr(state, e, rdr, info);
if (error) {
g_free(rdr);
g_free(info);
}
return error;
}
SaErrorT sim_discover_chassis_dimis(struct oh_handler_state *state,
struct oh_event *e) {
SaErrorT rc;
int i = 0;
int j = 0;
while (sim_chassis_dimis[i].dimirec.DimiNum != 0) {
rc = new_dimi(state, e, &sim_chassis_dimis[i]);
if (rc) {
err("Error %d returned when adding chassis dimi", rc);
} else {
j++;
}
i++;
}
dbg("%d of %d chassis dimis injected", j, i);
return 0;
}
|