84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws * CDDL HEADER START
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws * The contents of this file are subject to the terms of the
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier * Common Development and Distribution License (the "License").
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier * You may not use this file except in compliance with the License.
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws * See the License for the specific language governing permissions
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws * and limitations under the License.
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws * When distributing Covered Code, include this CDDL HEADER in each
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws * If applicable, add the following below this CDDL HEADER, with the
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws * fields enclosed by brackets "[]" replaced with your own identifying
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws * information: Portions Copyright [yyyy] [name of copyright owner]
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws * CDDL HEADER END
4e901881a1e657e1cbf12d7ef9b476ec373e7939Dale Ghent * Copyright 2015 OmniTI Computer Consulting, Inc. All rights reserved.
6734c4b0468cc77a7871a5dd5c23a5562557d64cRobert Mustacchi * Copyright 2015 Joyent, Inc.
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws * Use is subject to license terms.
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws/*PRINTFLIKE2*/
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws/*PRINTFLIKE3*/
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsdesc_printf(const char *d, FILE *fp, const char *format, ...)
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsflag_printf(FILE *fp, const char *s, uint_t flags, size_t bits,
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws const char *(*flag_name)(uint_t), const char *(*flag_desc)(uint_t))
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws for (i = 0; i < bits; i++) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws const char *n;
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws if (!(flags & f))
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsflag64_printf(FILE *fp, const char *s, uint64_t flags, size_t bits,
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws const char *(*flag_name)(uint64_t), const char *(*flag_desc)(uint64_t))
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws for (i = 0; i < bits; i++) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws const char *n;
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws if (!(flags & f))
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws switch (id) {
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier rv = smbios_lookup_type(shp, SMB_TYPE_OEMSTR, &s);
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier return (-1);
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier (void) smbios_info_strtab(shp, oem_id, cnt, oem_str);
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier for (i = 0; i < cnt; i++) {
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier return (-1);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws (int)sizeof (ep.smbe_eanchor), (int)sizeof (ep.smbe_eanchor),
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, "Entry Point Checksum: 0x%x\n", ep.smbe_ecksum);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, "Max Structure Size: %u\n", ep.smbe_maxssize);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, "Entry Point Revision: 0x%x\n", ep.smbe_revision);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws (int)sizeof (ep.smbe_ianchor), (int)sizeof (ep.smbe_ianchor),
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, "Intermediate Checksum: 0x%x\n", ep.smbe_icksum);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, "Structure Table Length: %u\n", ep.smbe_stlen);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, "Structure Table Address: 0x%x\n", ep.smbe_staddr);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, "Structure Table Entries: %u\n", ep.smbe_stnum);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, "DMI BCD Revision: 0x%x\n", ep.smbe_bcdrev);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Manufacturer: %s\n", ip->smbi_manufacturer);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Address Segment: 0x%x\n", b.smbb_segment);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Embedded Ctlr Firmware Version Number: %u.%u\n",
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws for (i = 0; i < s.smbs_uuidlen; i++) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws flag_printf(fp, "Flags", b.smbb_flags, sizeof (b.smbb_flags) * NBBY,
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier cnt = smbios_info_contains(shp, id, chdl_cnt, chdl);
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier for (i = 0; i < n; i++) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
d54e4739dac82a1ec2e41c84cf31866030ac5055Yuri Pankov c.smbc_sku[0] == '\0' ? "<unknown>" : c.smbc_sku);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Lock Present: %s\n", c.smbc_lock ? "Y" : "N");
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier oprintf(fp, " Element Records: %u\n", elem_cnt);
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier cnt = smbios_info_contains(shp, id, elem_cnt, elems);
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier for (i = 0; i < n; i++) {
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier /* SMBIOS structrure Type */
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier " Contained SMBIOS structure Type: %u",
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier /* SMBIOS Base Board Type */
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier " Contained SMBIOS Base Board Type: 0x%x",
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws desc_printf(smbios_processor_family_desc(p.smbp_family),
4e901881a1e657e1cbf12d7ef9b476ec373e7939Dale Ghent desc_printf(smbios_processor_family_desc(p.smbp_family2),
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " CPUID: 0x%llx\n", (u_longlong_t)p.smbp_cpuid);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws desc_printf(smbios_processor_upgrade_desc(p.smbp_upgrade),
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws switch (p.smbp_voltage) {
6734c4b0468cc77a7871a5dd5c23a5562557d64cRobert Mustacchi if (p.smbp_corecount != 0xff || p.smbp_corecount2 == 0)
6734c4b0468cc77a7871a5dd5c23a5562557d64cRobert Mustacchi oprintf(fp, " Core Count: %u\n", p.smbp_corecount);
6734c4b0468cc77a7871a5dd5c23a5562557d64cRobert Mustacchi oprintf(fp, " Core Count: %u\n", p.smbp_corecount2);
6734c4b0468cc77a7871a5dd5c23a5562557d64cRobert Mustacchi if (p.smbp_coresenabled != 0xff || p.smbp_coresenabled2 == 0) {
6734c4b0468cc77a7871a5dd5c23a5562557d64cRobert Mustacchi if (p.smbp_threadcount != 0xff || p.smbp_threadcount2 == 0) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " External Clock Speed: %uMHz\n", p.smbp_clkspeed);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Maximum Speed: %uMHz\n", p.smbp_maxspeed);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Current Speed: %uMHz\n", p.smbp_curspeed);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Maximum Installed Size: %u bytes\n", c.smba_maxsize);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws if (c.smba_size != 0)
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Installed Size: %u bytes\n", c.smba_size);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws flag_printf(fp, "Flags", c.smba_flags, sizeof (c.smba_flags) * NBBY,
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Internal Reference Designator: %s\n", p.smbo_iref);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " External Reference Designator: %s\n", p.smbo_eref);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Reference Designator: %s\n", s.smbl_name);
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier if (check_oem(shp) != 0 && (e.smbe_major < 2 || e.smbe_minor < 6))
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier oprintf(fp, " Device/Function Number: %u\n", s.smbl_df);
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothierprint_obdevs_ext(smbios_hdl_t *shp, id_t id, FILE *fp)
6734c4b0468cc77a7871a5dd5c23a5562557d64cRobert Mustacchi * Bit 7 is always whether or not the device is enabled while bits 0:6
6734c4b0468cc77a7871a5dd5c23a5562557d64cRobert Mustacchi * are the actual device type.
6734c4b0468cc77a7871a5dd5c23a5562557d64cRobert Mustacchi type = smbios_onboard_type_desc(oe.smboe_dtype & 0x7f);
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier oprintf(fp, " Reference Designator: %s\n", oe.smboe_name);
6734c4b0468cc77a7871a5dd5c23a5562557d64cRobert Mustacchi oprintf(fp, " Device Enabled: %s\n", enabled == B_TRUE ? "true" :
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier oprintf(fp, " Device Type Instance: %u\n", oe.smboe_dti);
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier oprintf(fp, " Segment Group Number: %u\n", oe.smboe_sg);
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier oprintf(fp, " Device/Function Number: %u\n", oe.smboe_df);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws if ((argc = smbios_info_obdevs(shp, id, 0, NULL)) > 0) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws for (i = 0; i < argc; i++)
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws if ((argc = smbios_info_strtab(shp, id, 0, NULL)) > 0) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws for (i = 0; i < argc; i++)
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Language String Format: %u\n", l.smbla_fmt);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Number of Installed Languages: %u\n", l.smbla_num);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws/*ARGSUSED*/
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Log Area Size: %lu bytes\n", (ulong_t)ev.smbev_size);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Header Offset: %lu\n", (ulong_t)ev.smbev_hdr);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Data Offset: %lu\n", (ulong_t)ev.smbev_data);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
4e901881a1e657e1cbf12d7ef9b476ec373e7939Dale Ghent oprintf(fp, "\n offset: 0 1 2 3 4 5 6 7 8 9 a b c d e f "
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws "0123456789abcdef\n");
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws desc_printf(smbios_memarray_loc_desc(ma.smbma_location),
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Number of Slots/Sockets: %u\n", ma.smbma_ndevs);
4e901881a1e657e1cbf12d7ef9b476ec373e7939Dale Ghent id_printf(fp, " Memory Error Data: ", ma.smbma_err);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
4e901881a1e657e1cbf12d7ef9b476ec373e7939Dale Ghent id_printf(fp, " Physical Memory Array: ", md.smbmd_array);
4e901881a1e657e1cbf12d7ef9b476ec373e7939Dale Ghent id_printf(fp, " Memory Error Data: ", md.smbmd_error);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Total Width: %u bits\n", md.smbmd_twidth);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws case -1ull:
4e901881a1e657e1cbf12d7ef9b476ec373e7939Dale Ghent desc_printf(smbios_memdevice_rank_desc(md.smbmd_rank),
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws flag_printf(fp, "Flags", md.smbmd_flags, sizeof (md.smbmd_flags) * NBBY,
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws smbios_memdevice_flag_name, smbios_memdevice_flag_desc);
4e901881a1e657e1cbf12d7ef9b476ec373e7939Dale Ghent oprintf(fp, " Configured Speed: %u MHz\n", md.smbmd_clkspeed);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
4e901881a1e657e1cbf12d7ef9b476ec373e7939Dale Ghent id_printf(fp, " Physical Memory Array: ", ma.smbmam_array);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Physical Address: 0x%llx\n Size: %llu bytes\n",
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws (u_longlong_t)ma.smbmam_addr, (u_longlong_t)ma.smbmam_size);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
4e901881a1e657e1cbf12d7ef9b476ec373e7939Dale Ghent id_printf(fp, " Memory Device: ", md.smbmdm_device);
4e901881a1e657e1cbf12d7ef9b476ec373e7939Dale Ghent id_printf(fp, " Memory Array Mapped Address: ", md.smbmdm_arrmap);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Physical Address: 0x%llx\n Size: %llu bytes\n",
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws (u_longlong_t)md.smbmdm_addr, (u_longlong_t)md.smbmdm_size);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Partition Row Position: %u\n", md.smbmdm_rpos);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Interleave Position: %u\n", md.smbmdm_ipos);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Interleave Data Depth: %u\n", md.smbmdm_idepth);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws fp, " Administrator Password Status: %u", h.smbh_adm_ps);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws if (b.smbt_size != 0) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Boot Data (%lu bytes):\n", (ulong_t)b.smbt_size);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsstatic void
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " i2c Bus Slave Address: 0x%x\n", i.smbip_i2c);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " NV Storage Device Bus ID: 0x%x\n", i.smbip_bus);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " BMC Base Address: 0x%llx\n", (u_longlong_t)i.smbip_addr);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws oprintf(fp, " Register Spacing: %u\n", i.smbip_regspacing);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws flag_printf(fp, "Flags", i.smbip_flags, sizeof (i.smbip_flags) * NBBY,
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothierprint_extprocessor(smbios_hdl_t *shp, id_t id, FILE *fp)
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier oprintf(fp, " Processor: %u\n", ep.smbpe_processor);
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier oprintf(fp, " Initial APIC ID count: %u\n\n", ep.smbpe_n);
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier oprintf(fp, " Logical Strand %u: Initial APIC ID: %u\n", i,
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothierprint_extport(smbios_hdl_t *shp, id_t id, FILE *fp)
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier oprintf(fp, " Chassis Handle: %u\n", epo.smbporte_chassis);
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier oprintf(fp, " Port Connector Handle: %u\n", epo.smbporte_port);
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier oprintf(fp, " Device Type: %u\n", epo.smbporte_dtype);
03f9f63d24f0494b7d47b927090ad9045e396402Tom Pothier oprintf(fp, " Device Handle: %u\n", epo.smbporte_devhdl);
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothierprint_pciexrc(smbios_hdl_t *shp, id_t id, FILE *fp)
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier oprintf(fp, " Component ID: %u\n", pcie.smbpcie_bb);
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothierprint_extmemarray(smbios_hdl_t *shp, id_t id, FILE *fp)
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier oprintf(fp, " Physical Memory Array Handle: %u\n", em.smbmae_ma);
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier oprintf(fp, " Component Parent Handle: %u\n", em.smbmae_comp);
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothierprint_extmemdevice(smbios_hdl_t *shp, id_t id, FILE *fp)
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier oprintf(fp, " Memory Device Handle: %u\n", emd.smbmdeve_md);
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier oprintf(fp, " DRAM Channel: %u\n", emd.smbmdeve_drch);
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier oprintf(fp, " Number of Chip Selects: %u\n", emd.smbmdeve_ncs);
074bb90d80fdbeb2d04a8450a55ecbc96de28785Tom Pothier oprintf(fp, " Chip Select: %u\n", emd.smbmdeve_cs[i]);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mwsprint_struct(smbios_hdl_t *shp, const smbios_struct_t *sp, void *fp)
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws const char *s;
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws return (0); /* skip struct if type doesn't match -t */
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws return (0); /* skip struct if type is obsolete */
95ae72860cded354ca12541709a4d511e663d5efDan McDonald oprintf(fp, " %s (type %u)", s, sp->smbstr_type);
95ae72860cded354ca12541709a4d511e663d5efDan McDonald oprintf(fp, " %s+%u (type %u)", "SMB_TYPE_OEM_LO",
95ae72860cded354ca12541709a4d511e663d5efDan McDonald sp->smbstr_type - SMB_TYPE_OEM_LO, sp->smbstr_type);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws return (0); /* only print header line if -s specified */
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws if (smbios_info_common(shp, sp->smbstr_id, &info) == 0) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws return (0);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws if (errno != 0 || p == s || *p != '\0' || val > UINT16_MAX) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws (void) fprintf(stderr, "%s: invalid %s argument -- %s\n",
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws for (t = 0; t < SMB_TYPE_OEM_LO; t++) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws if ((ts = smbios_type_name(t)) != NULL && strcmp(s, ts) == 0)
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws return (t);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws (void) fprintf(stderr, "%s: invalid %s argument -- %s\n",
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws /*NOTREACHED*/
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws "[-BeOsx] [-i id] [-t type] [-w file] [file]\n\n", g_pname);
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws "\t-B disable header validation for broken BIOSes\n"
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws "\t-e display SMBIOS entry point information\n"
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws "\t-i display only the specified structure\n"
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws "\t-O display obsolete structure types\n"
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws "\t-s display only a summary of structure identifiers and types\n"
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws "\t-t display only the specified structure type\n"
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws "\t-w write the raw data to the specified file\n"
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws "\t-x display raw data for structures\n");
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws while ((c = getopt(argc, argv, "Bei:Ost:w:xZ")) != EOF) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws switch (c) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws if ((shp = smbios_open(ifile, SMB_VERSION, oflags, &err)) == NULL) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws (void) fprintf(stderr, "%s: failed to load SMBIOS: %s\n",
516627f338a630bcf9806a91aa873bbbae9a2facJonathan Matthew if (opt_i == -1 && opt_t == -1 && opt_e == 0 &&
516627f338a630bcf9806a91aa873bbbae9a2facJonathan Matthew (void) fprintf(stderr, "%s: SMBIOS table is truncated\n",
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws if ((fd = open(ofile, O_WRONLY|O_CREAT|O_TRUNC, 0666)) == -1) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws opt_O++; /* -i or -t imply displaying obsolete records */
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws if (err != 0) {
84ab085a13f931bc78e7415e7ce921dbaa14fcb3mws (void) fprintf(stderr, "%s: failed to access SMBIOS: %s\n",