static SaErrorT list_inv(SaHpiSessionIdT sessionid, SaHpiRptEntryT *rptptr, SaHpiRdrT *rdrptr, SaHpiResourceIdT l_resourceid) { SaErrorT rvInvent = SA_OK; SaHpiIdrInfoT idrInfo; SaHpiIdrIdT idrid; SaHpiTextBufferT working; oh_init_textbuffer(&working); if (rdrptr->RdrType == SAHPI_INVENTORY_RDR) { idrid = rdrptr->RdrTypeUnion.InventoryRec.IdrId; rvInvent = saHpiIdrInfoGet( sessionid, l_resourceid, idrid, &idrInfo); if (rvInvent !=SA_OK) { printf("saHpiIdrInfoGet: ResourceId %d IdrId %d, error %s\n", l_resourceid, idrid, oh_lookup_error(rvInvent)); } else { oh_print_idrinfo(&idrInfo, 4); walkInventory(sessionid, l_resourceid, &idrInfo); } } return(rvInvent); }
static void print_idrinfo(SaHpiIdrInfoT *idrInfo,int len) { #ifdef OPENHPI_USED if (fverbose) { oh_print_idrinfo(idrInfo, len); } else #endif { /* don't need to show this if not fverbose */ } }
int main(int argc, char **argv) { int number_resources=0; SaErrorT rv; SaHpiSessionIdT sessionid; SaHpiResourceIdT resourceid; SaHpiIdrIdT IdrId = SAHPI_DEFAULT_INVENTORY_ID; SaHpiIdrInfoT IdrInfo; SaHpiResourceIdT resourceid_list[RESOURCE_CAP_LENGTH] = {0}; SaHpiCapabilitiesT capability = SAHPI_CAPABILITY_INVENTORY_DATA; printf("saHpiIdrInfoGet: Test for hpi IDR info get function\n"); rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID, &sessionid, NULL); if (rv != SA_OK) { printf("saHpiSessionOpen failed with error: %s\n", oh_lookup_error(rv)); return rv; } /* Discover the resources with IDR capability */ printf("\nListing the resource with IDR capability \n"); rv = discover_resources(sessionid, capability, resourceid_list, &number_resources); if (rv != SA_OK) { exit(-1); } printf("\nPlease enter the resource id whose idr area header " "is required: "); scanf("%d", &resourceid); rv = saHpiIdrInfoGet(sessionid, resourceid, IdrId,&IdrInfo); if (rv != SA_OK) { printf("saHpiIdrInfoGet failed with error: %s\n", oh_lookup_error(rv)); printf("Test case - FAIL\n"); } else { oh_print_idrinfo(&IdrInfo,6); printf("Test case - PASS\n"); } rv = saHpiSessionClose(sessionid); return 0; }
/* * Function prototypes **/ int main(int argc, char **argv) { int asset_len=0; int c; SaErrorT rv = SA_OK, rvRdrGet = SA_OK, rvRptGet = SA_OK, rvInvent = SA_OK; SaHpiSessionIdT sessionid; SaHpiRptEntryT rptentry; SaHpiEntryIdT rptentryid; SaHpiEntryIdT nextrptentryid; SaHpiEntryIdT entryid; SaHpiEntryIdT nextentryid; SaHpiResourceIdT resourceid; SaHpiRdrT rdr; SaHpiIdrInfoT idrInfo; SaHpiIdrIdT idrid; int inv_discovered = 0; printf("%s ver %s\n",argv[0],progver); while ( (c = getopt( argc, argv,"a:xz?")) != EOF ) { switch(c) { case 'z': fxdebug = 1; /* fall thru to include next setting */ case 'x': fdebug = 1; break; case 'a': fasset = 1; if (optarg) { asset_tag = (char *)strdup(optarg); asset_len = strlen(optarg); } break; default: printf("Usage: %s [-x] [-a asset_tag]\n", progname); printf(" -a Sets the asset tag\n"); printf(" -x Display debug messages\n"); printf(" -z Display extra debug messages\n"); exit(1); } } rv = saHpiSessionOpen(SAHPI_UNSPECIFIED_DOMAIN_ID,&sessionid,NULL); if (rv != SA_OK) { printf("saHpiSessionOpen error %s\n",oh_lookup_error(rv)); exit(-1); } do { rv = saHpiDiscover(sessionid); if (fxdebug) printf("saHpiDiscover rv = %s\n",oh_lookup_error(rv)); if (rv != SA_OK) { printf("saHpiDiscover error %s\n",oh_lookup_error(rv)); // continue anyway exit(-1); } /* walk the RPT list */ rptentryid = SAHPI_FIRST_ENTRY; do { rvRptGet = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry); if (rvRptGet != SA_OK) printf("RptEntryGet error %s\n",oh_lookup_error(rvRptGet)); if (rvRptGet == SA_OK && (rptentry.ResourceCapabilities & SAHPI_CAPABILITY_RDR) && (rptentry.ResourceCapabilities & SAHPI_CAPABILITY_INVENTORY_DATA)) { /* walk the RDR list for this RPT entry */ entryid = SAHPI_FIRST_ENTRY; resourceid = rptentry.ResourceId; if (fdebug) printf("rptentry[%d] resourceid=%d\n", entryid,resourceid); do { rvRdrGet = saHpiRdrGet(sessionid,resourceid, entryid,&nextentryid, &rdr); if (fxdebug) printf("saHpiRdrGet[%d] rv = %s\n",entryid,oh_lookup_error(rvRdrGet)); if (rvRdrGet == SA_OK) { if (rdr.RdrType == SAHPI_INVENTORY_RDR) { inv_discovered = 1; idrid = rdr.RdrTypeUnion.InventoryRec.IdrId; rvInvent = saHpiIdrInfoGet( sessionid, resourceid, idrid, &idrInfo); if (rvInvent !=SA_OK) { printf("saHpiIdrInfoGet IdrId %d, error %s\n", idrid, oh_lookup_error(rvInvent)); } else { printf("\nIdr for %s, ResourceId: %d\n", rptentry.ResourceTag.Data,resourceid); oh_print_idrinfo(&idrInfo, 4); walkInventory(sessionid, resourceid, &idrInfo); } } } entryid = nextentryid; } while ((rvRdrGet == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) ; } rptentryid = nextrptentryid; } while ((rvRptGet == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY)); /* Because INVENTORY RDR will be added after some time, we need to monitor RptInfo here; IMPI plugin. Try again if none was found this pass */ } while (!inv_discovered); rv = saHpiSessionClose(sessionid); /* rv = saHpiFinalize(); */ exit(0); }
SaErrorT list_inv(SaHpiSessionIdT sessionid,SaHpiResourceIdT resourceid) { SaErrorT rv = SA_OK, rvRdrGet = SA_OK, rvRptGet = SA_OK, rvInvent = SA_OK; SaHpiRptEntryT rptentry; SaHpiEntryIdT rptentryid; SaHpiEntryIdT nextrptentryid; SaHpiEntryIdT entryid; SaHpiEntryIdT nextentryid; SaHpiRdrT rdr; SaHpiIdrInfoT idrInfo; SaHpiIdrIdT idrid; SaHpiResourceIdT l_resourceid; SaHpiTextBufferT working; oh_init_textbuffer(&working); /* walk the RPT list */ rptentryid = SAHPI_FIRST_ENTRY; do { if (fdebug) printf("saHpiRptEntryGet\n"); rvRptGet = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry); if ((rvRptGet != SA_OK) || fdebug) printf("RptEntryGet returns %s\n",oh_lookup_error(rvRptGet)); if (rvRptGet == SA_OK && (rptentry.ResourceCapabilities & SAHPI_CAPABILITY_RDR) && ((resourceid == 0xFF) || (resourceid == rptentry.ResourceId))) { l_resourceid = rptentry.ResourceId; if (resourceid != 0xFF) nextrptentryid = SAHPI_LAST_ENTRY; /* walk the RDR list for this RPT entry */ entryid = SAHPI_FIRST_ENTRY; if (fdebug) printf("rptentry[%d] resourceid=%d\n", entryid,resourceid); do { rvRdrGet = saHpiRdrGet(sessionid,l_resourceid, entryid,&nextentryid, &rdr); if (fdebug) printf("saHpiRdrGet[%d] rv = %s\n",entryid,oh_lookup_error(rvRdrGet)); if (rvRdrGet == SA_OK) { if (rdr.RdrType == SAHPI_INVENTORY_RDR) { idrid = rdr.RdrTypeUnion.InventoryRec.IdrId; rvInvent = saHpiIdrInfoGet( sessionid, l_resourceid, idrid, &idrInfo); if (rvInvent !=SA_OK) { printf("saHpiIdrInfoGet: ResourceId %d IdrId %d, error %s\n", l_resourceid, idrid, oh_lookup_error(rvInvent)); } else { snprintf(working.Data, SAHPI_MAX_TEXT_BUFFER_LENGTH, "\nIdr for %s, ResourceId: %d\n", rptentry.ResourceTag.Data,l_resourceid); oh_print_text(&working); oh_print_idrinfo(&idrInfo, 4); walkInventory(sessionid, l_resourceid, &idrInfo); } } } entryid = nextentryid; } while ((rvRdrGet == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) ; } rptentryid = nextrptentryid; } while ((rvRptGet == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY)); return(rv); }