Lines Matching refs:shp
45 smb_strip(smbios_hdl_t *shp) in smb_strip() argument
49 for (i = 0; i < shp->sh_nstructs; i++) { in smb_strip()
50 const smb_header_t *hp = shp->sh_structs[i].smbst_hdr; in smb_strip()
66 if (smbios_info_common(shp, hp->smbh_hdl, &info) != SMB_ERR) { in smb_strip()
76 smbios_bufopen_21(smbios_hdl_t *shp, const smbios_21_entry_t *ep, size_t len, in smbios_bufopen_21() argument
85 smb_dprintf(shp, "opening SMBIOS version %u.%u bcdrev 0x%x\n", in smbios_bufopen_21()
114 smb_dprintf(shp, "bad cksum: e=%x i=%x\n", esum, isum); in smbios_bufopen_21()
124 shp->sh_ent_type = SMBIOS_ENTRY_POINT_21; in smbios_bufopen_21()
125 bcopy(ep, &shp->sh_ent, sizeof (smbios_entry_t)); in smbios_bufopen_21()
126 shp->sh_ent.ep21.smbe_elen = sizeof (smbios_entry_t); in smbios_bufopen_21()
127 smbios_checksum(shp, &shp->sh_ent); in smbios_bufopen_21()
129 shp->sh_ent_stnum = ep->smbe_stnum; in smbios_bufopen_21()
130 shp->sh_smbvers = SMB_MAJMIN(ep->smbe_major, ep->smbe_minor); in smbios_bufopen_21()
135 smbios_bufopen_30(smbios_hdl_t *shp, const smbios_30_entry_t *ep, size_t len, in smbios_bufopen_30() argument
142 smb_dprintf(shp, "opening SMBIOS version %u.%u\n", in smbios_bufopen_30()
168 smb_dprintf(shp, "bad cksum: e=%x\n", esum); in smbios_bufopen_30()
178 shp->sh_ent_type = SMBIOS_ENTRY_POINT_30; in smbios_bufopen_30()
179 bcopy(ep, &shp->sh_ent, sizeof (smbios_entry_t)); in smbios_bufopen_30()
180 shp->sh_ent.ep30.smbe_elen = sizeof (smbios_entry_t); in smbios_bufopen_30()
181 smbios_checksum(shp, &shp->sh_ent); in smbios_bufopen_30()
183 shp->sh_smbvers = SMB_MAJMIN(ep->smbe_major, ep->smbe_minor); in smbios_bufopen_30()
217 smbios_hdl_t *shp = smb_zalloc(sizeof (smbios_hdl_t)); in smbios_bufopen() local
235 return (smb_open_error(shp, errp, ESMB_VERSION)); in smbios_bufopen()
239 return (smb_open_error(shp, errp, ESMB_INVAL)); in smbios_bufopen()
241 if (shp == NULL) in smbios_bufopen()
242 return (smb_open_error(shp, errp, ESMB_NOMEM)); in smbios_bufopen()
245 shp->sh_flags |= SMB_FL_DEBUG; in smbios_bufopen()
247 err = smbios_bufopen_21(shp, &ep->ep21, len, flags); in smbios_bufopen()
249 err = smbios_bufopen_30(shp, &ep->ep30, len, flags); in smbios_bufopen()
251 return (smb_open_error(shp, errp, err)); in smbios_bufopen()
252 shp->sh_ent_stnum = in smbios_bufopen()
256 shp->sh_buf = buf; in smbios_bufopen()
257 shp->sh_buflen = len; in smbios_bufopen()
258 shp->sh_structs = smb_alloc(sizeof (smb_struct_t) * shp->sh_ent_stnum); in smbios_bufopen()
259 shp->sh_nstructs = 0; in smbios_bufopen()
260 shp->sh_hashlen = _smb_hashlen; in smbios_bufopen()
261 shp->sh_hash = smb_zalloc(sizeof (smb_struct_t *) * shp->sh_hashlen); in smbios_bufopen()
262 shp->sh_libvers = version; in smbios_bufopen()
264 if (shp->sh_structs == NULL || shp->sh_hash == NULL) in smbios_bufopen()
265 return (smb_open_error(shp, errp, ESMB_NOMEM)); in smbios_bufopen()
267 hp = shp->sh_buf; in smbios_bufopen()
268 switch (shp->sh_ent_type) { in smbios_bufopen()
276 return (smb_open_error(shp, errp, ESMB_VERSION)); in smbios_bufopen()
279 for (i = 0; i < shp->sh_ent_stnum; i++, hp = nhp) { in smbios_bufopen()
280 smb_struct_t *stp = &shp->sh_structs[i]; in smbios_bufopen()
284 shp->sh_flags |= SMB_FL_TRUNC; in smbios_bufopen()
288 smb_dprintf(shp, "struct [%u] type %u len %u hdl %u at %p\n", in smbios_bufopen()
295 shp->sh_flags |= SMB_FL_TRUNC; in smbios_bufopen()
299 h = hp->smbh_hdl & (shp->sh_hashlen - 1); in smbios_bufopen()
308 shp->sh_flags |= SMB_FL_TRUNC; in smbios_bufopen()
318 stp->smbst_next = shp->sh_hash[h]; in smbios_bufopen()
323 return (smb_open_error(shp, errp, ESMB_NOMEM)); in smbios_bufopen()
325 shp->sh_hash[h] = stp; in smbios_bufopen()
327 shp->sh_nstructs++; in smbios_bufopen()
339 if ((shp->sh_flags & SMB_FL_TRUNC) && i == 0) in smbios_bufopen()
340 return (smb_open_error(shp, errp, ESMB_CORRUPT)); in smbios_bufopen()
343 smb_strip(shp); in smbios_bufopen()
345 return (shp); in smbios_bufopen()
349 smbios_close(smbios_hdl_t *shp) in smbios_close() argument
353 for (i = 0; i < shp->sh_nstructs; i++) { in smbios_close()
354 smb_free(shp->sh_structs[i].smbst_strtab, in smbios_close()
355 sizeof (uint16_t) * shp->sh_structs[i].smbst_strtablen); in smbios_close()
358 smb_free(shp->sh_structs, sizeof (smb_struct_t) * shp->sh_ent_stnum); in smbios_close()
359 smb_free(shp->sh_hash, sizeof (smb_struct_t *) * shp->sh_hashlen); in smbios_close()
361 if (shp->sh_flags & SMB_FL_BUFALLOC) in smbios_close()
362 smb_free((void *)shp->sh_buf, shp->sh_buflen); in smbios_close()
364 smb_free(shp, sizeof (smbios_hdl_t)); in smbios_close()
374 smbios_checksum(smbios_hdl_t *shp, smbios_entry_t *ep) in smbios_checksum() argument
379 switch (shp->sh_ent_type) { in smbios_checksum()
408 smbios_buf(smbios_hdl_t *shp) in smbios_buf() argument
410 return (shp->sh_buf); in smbios_buf()
414 smbios_buflen(smbios_hdl_t *shp) in smbios_buflen() argument
416 return (shp->sh_buflen); in smbios_buflen()
433 smbios_lookup_id(smbios_hdl_t *shp, id_t id, smbios_struct_t *sp) in smbios_lookup_id() argument
435 const smb_struct_t *stp = smb_lookup_id(shp, id); in smbios_lookup_id()
447 smbios_lookup_type(smbios_hdl_t *shp, uint_t type, smbios_struct_t *sp) in smbios_lookup_type() argument
449 const smb_struct_t *stp = smb_lookup_type(shp, type); in smbios_lookup_type()
461 smbios_iter(smbios_hdl_t *shp, smbios_struct_f *func, void *data) in smbios_iter() argument
463 const smb_struct_t *sp = shp->sh_structs; in smbios_iter()
467 for (i = 0; i < shp->sh_nstructs; i++, sp++) { in smbios_iter()
469 (rv = func(shp, smb_export(sp, &s), data)) != 0) in smbios_iter()
477 smb_lookup_type(smbios_hdl_t *shp, uint_t type) in smb_lookup_type() argument
481 for (i = 0; i < shp->sh_nstructs; i++) { in smb_lookup_type()
482 if (shp->sh_structs[i].smbst_hdr->smbh_type == type) in smb_lookup_type()
483 return (&shp->sh_structs[i]); in smb_lookup_type()
486 (void) smb_set_errno(shp, ESMB_NOENT); in smb_lookup_type()
491 smb_lookup_id(smbios_hdl_t *shp, uint_t id) in smb_lookup_id() argument
493 const smb_struct_t *stp = shp->sh_hash[id & (shp->sh_hashlen - 1)]; in smb_lookup_id()
497 (void) smb_set_errno(shp, ESMB_NOTSUP); in smb_lookup_id()
500 (void) smb_set_errno(shp, ESMB_NOENT); in smb_lookup_id()
510 (void) smb_set_errno(shp, ESMB_NOENT); in smb_lookup_id()
525 smb_libgteq(smbios_hdl_t *shp, int version) in smb_libgteq() argument
527 return (SMB_MAJOR(shp->sh_libvers) > SMB_MAJOR(version) || ( in smb_libgteq()
528 SMB_MAJOR(shp->sh_libvers) == SMB_MAJOR(version) && in smb_libgteq()
529 SMB_MINOR(shp->sh_libvers) >= SMB_MINOR(version))); in smb_libgteq()
533 smb_gteq(smbios_hdl_t *shp, int version) in smb_gteq() argument
535 return (SMB_MAJOR(shp->sh_smbvers) > SMB_MAJOR(version) || ( in smb_gteq()
536 SMB_MAJOR(shp->sh_smbvers) == SMB_MAJOR(version) && in smb_gteq()
537 SMB_MINOR(shp->sh_smbvers) >= SMB_MINOR(version))); in smb_gteq()
541 smbios_truncated(smbios_hdl_t *shp) in smbios_truncated() argument
543 return ((shp->sh_flags & SMB_FL_TRUNC) != 0); in smbios_truncated()