Print this page
5094 Update libsmbios with recent items
Reviewed by: Dan McDonald <danmcd@omniti.com>
Reviewed by: Josef 'Jeff' Sipek<jeffpc@josefsipek.net>
Reviewed by: Garrett D'Amore <garrett@damore.org>

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/smbios/smbios.c
          +++ new/usr/src/cmd/smbios/smbios.c
↓ open down ↓ 12 lines elided ↑ open up ↑
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
       23 + * Copyright 2015 OmniTI Computer Consulting, Inc.  All rights reserved.
  23   24   * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  24   25   * Use is subject to license terms.
  25   26   */
  26   27  
  27   28  #include <sys/sysmacros.h>
  28   29  #include <sys/param.h>
  29   30  
  30   31  #include <smbios.h>
  31   32  #include <alloca.h>
  32   33  #include <limits.h>
↓ open down ↓ 297 lines elided ↑ open up ↑
 330  331  
 331  332  static void
 332  333  print_chassis(smbios_hdl_t *shp, id_t id, FILE *fp)
 333  334  {
 334  335          smbios_chassis_t c;
 335  336          int elem_cnt;
 336  337  
 337  338          (void) smbios_info_chassis(shp, id, &c);
 338  339  
 339  340          oprintf(fp, "  OEM Data: 0x%x\n", c.smbc_oemdata);
      341 +        oprintf(fp, "  SKU number: %s\n",
      342 +            c.smbc_sku == NULL ? "<unknown>" : c.smbc_sku);
 340  343          oprintf(fp, "  Lock Present: %s\n", c.smbc_lock ? "Y" : "N");
 341  344  
 342  345          desc_printf(smbios_chassis_type_desc(c.smbc_type),
 343  346              fp, "  Chassis Type: 0x%x", c.smbc_type);
 344  347  
 345  348          desc_printf(smbios_chassis_state_desc(c.smbc_bustate),
 346  349              fp, "  Boot-Up State: 0x%x", c.smbc_bustate);
 347  350  
 348  351          desc_printf(smbios_chassis_state_desc(c.smbc_psstate),
 349  352              fp, "  Power Supply State: 0x%x", c.smbc_psstate);
↓ open down ↓ 41 lines elided ↑ open up ↑
 391  394  {
 392  395          smbios_processor_t p;
 393  396          uint_t status;
 394  397  
 395  398          (void) smbios_info_processor(shp, id, &p);
 396  399          status = SMB_PRSTATUS_STATUS(p.smbp_status);
 397  400  
 398  401          desc_printf(smbios_processor_family_desc(p.smbp_family),
 399  402              fp, "  Family: %u", p.smbp_family);
 400  403  
      404 +        if (p.smbp_family2 != 0)
      405 +                desc_printf(smbios_processor_family_desc(p.smbp_family2),
      406 +                    fp, "  Family Ext: %u", p.smbp_family2);
      407 +
 401  408          oprintf(fp, "  CPUID: 0x%llx\n", (u_longlong_t)p.smbp_cpuid);
 402  409  
 403  410          desc_printf(smbios_processor_type_desc(p.smbp_type),
 404  411              fp, "  Type: %u", p.smbp_type);
 405  412  
 406  413          desc_printf(smbios_processor_upgrade_desc(p.smbp_upgrade),
 407  414              fp, "  Socket Upgrade: %u", p.smbp_upgrade);
 408  415  
 409  416          oprintf(fp, "  Socket Status: %s\n",
 410  417              SMB_PRSTATUS_PRESENT(p.smbp_status) ?
↓ open down ↓ 14 lines elided ↑ open up ↑
 425  432                  case SMB_PRV_29V:
 426  433                          oprintf(fp, " 2.9V");
 427  434                          break;
 428  435                  }
 429  436                  oprintf(fp, "\n");
 430  437          } else {
 431  438                  oprintf(fp, "  Supported Voltages: %.1fV\n",
 432  439                      (float)SMB_PRV_VOLTAGE(p.smbp_voltage) / 10);
 433  440          }
 434  441  
      442 +        if (p.smbp_corecount != 0)
      443 +                oprintf(fp, "  Core Count: %u\n", p.smbp_corecount);
      444 +        else
      445 +                oprintf(fp, "  Core Count: Unknown\n");
      446 +
      447 +        if (p.smbp_coresenabled != 0)
      448 +                oprintf(fp, "  Cores Enabled: %u\n", p.smbp_coresenabled);
      449 +        else
      450 +                oprintf(fp, "  Cores Enabled: Unknown\n");
      451 +
      452 +        if (p.smbp_threadcount != 0)
      453 +                oprintf(fp, "  Thread Count: %u\n", p.smbp_threadcount);
      454 +        else
      455 +                oprintf(fp, "  Thread Count: Unknown\n");
      456 +
      457 +        if (p.smbp_cflags) {
      458 +                flag_printf(fp, "Processor Characteristics",
      459 +                    p.smbp_cflags, sizeof (p.smbp_cflags) * NBBY,
      460 +                    smbios_processor_core_flag_name,
      461 +                    smbios_processor_core_flag_desc);
      462 +        }
      463 +
 435  464          if (p.smbp_clkspeed != 0)
 436  465                  oprintf(fp, "  External Clock Speed: %uMHz\n", p.smbp_clkspeed);
 437  466          else
 438  467                  oprintf(fp, "  External Clock Speed: Unknown\n");
 439  468  
 440  469          if (p.smbp_maxspeed != 0)
 441  470                  oprintf(fp, "  Maximum Speed: %uMHz\n", p.smbp_maxspeed);
 442  471          else
 443  472                  oprintf(fp, "  Maximum Speed: Unknown\n");
 444  473  
 445  474          if (p.smbp_curspeed != 0)
 446  475                  oprintf(fp, "  Current Speed: %uMHz\n", p.smbp_curspeed);
 447  476          else
 448  477                  oprintf(fp, "  Current Speed: Unknown\n");
 449  478  
 450      -        id_printf(fp, "  L1 Cache: ", p.smbp_l1cache);
 451      -        id_printf(fp, "  L2 Cache: ", p.smbp_l2cache);
 452      -        id_printf(fp, "  L3 Cache: ", p.smbp_l3cache);
      479 +        id_printf(fp, "  L1 Cache: ", p.smbp_l1cache);
      480 +        id_printf(fp, "  L2 Cache: ", p.smbp_l2cache);
      481 +        id_printf(fp, "  L3 Cache: ", p.smbp_l3cache);
 453  482  }
 454  483  
 455  484  static void
 456  485  print_cache(smbios_hdl_t *shp, id_t id, FILE *fp)
 457  486  {
 458  487          smbios_cache_t c;
 459  488  
 460  489          (void) smbios_info_cache(shp, id, &c);
 461  490  
 462  491          oprintf(fp, "  Level: %u\n", c.smba_level);
↓ open down ↓ 205 lines elided ↑ open up ↑
 668  697  
 669  698  static void
 670  699  print_bytes(const uint8_t *data, size_t size, FILE *fp)
 671  700  {
 672  701          size_t row, rows = P2ROUNDUP(size, 16) / 16;
 673  702          size_t col, cols;
 674  703  
 675  704          char buf[17];
 676  705          uint8_t x;
 677  706  
 678      -        oprintf(fp, "\n  offset:   0 1 2 3  4 5 6 7  8 9 a b  c d e f  "
      707 +        oprintf(fp, "\n  offset:   0 1 2 3  4 5 6 7  8 9 a b  c d e f  "
 679  708              "0123456789abcdef\n");
 680  709  
 681  710          for (row = 0; row < rows; row++) {
 682      -                oprintf(fp, "    %#4lx: ", (ulong_t)row * 16);
      711 +                oprintf(fp, "    %#4lx: ", (ulong_t)row * 16);
 683  712                  cols = MIN(size - row * 16, 16);
 684  713  
 685  714                  for (col = 0; col < cols; col++) {
 686  715                          if (col % 4 == 0)
 687  716                                  oprintf(fp, " ");
 688  717                          x = *data++;
 689  718                          oprintf(fp, "%02x", x);
 690  719                          buf[col] = x <= ' ' || x > '~' ? '.' : x;
 691  720                  }
 692  721  
↓ open down ↓ 21 lines elided ↑ open up ↑
 714  743          desc_printf(smbios_memarray_loc_desc(ma.smbma_location),
 715  744              fp, "  Location: %u", ma.smbma_location);
 716  745  
 717  746          desc_printf(smbios_memarray_use_desc(ma.smbma_use),
 718  747              fp, "  Use: %u", ma.smbma_use);
 719  748  
 720  749          desc_printf(smbios_memarray_ecc_desc(ma.smbma_ecc),
 721  750              fp, "  ECC: %u", ma.smbma_ecc);
 722  751  
 723  752          oprintf(fp, "  Number of Slots/Sockets: %u\n", ma.smbma_ndevs);
 724      -        id_printf(fp, "  Memory Error Data: ", ma.smbma_err);
      753 +        id_printf(fp, "  Memory Error Data: ", ma.smbma_err);
 725  754          oprintf(fp, "  Max Capacity: %llu bytes\n",
 726  755              (u_longlong_t)ma.smbma_size);
 727  756  }
 728  757  
 729  758  static void
 730  759  print_memdevice(smbios_hdl_t *shp, id_t id, FILE *fp)
 731  760  {
 732  761          smbios_memdevice_t md;
 733  762  
 734  763          (void) smbios_info_memdevice(shp, id, &md);
 735  764  
 736      -        id_printf(fp, "  Physical Memory Array: ", md.smbmd_array);
 737      -        id_printf(fp, "  Memory Error Data: ", md.smbmd_error);
      765 +        id_printf(fp, "  Physical Memory Array: ", md.smbmd_array);
      766 +        id_printf(fp, "  Memory Error Data: ", md.smbmd_error);
 738  767  
 739  768          if (md.smbmd_twidth != -1u)
 740  769                  oprintf(fp, "  Total Width: %u bits\n", md.smbmd_twidth);
 741  770          else
 742  771                  oprintf(fp, "  Total Width: Unknown\n");
 743  772  
 744  773          if (md.smbmd_dwidth != -1u)
 745  774                  oprintf(fp, "  Data Width: %u bits\n", md.smbmd_dwidth);
 746  775          else
 747  776                  oprintf(fp, "  Data Width: Unknown\n");
↓ open down ↓ 13 lines elided ↑ open up ↑
 761  790          desc_printf(smbios_memdevice_form_desc(md.smbmd_form),
 762  791              fp, "  Form Factor: %u", md.smbmd_form);
 763  792  
 764  793          if (md.smbmd_set == 0)
 765  794                  oprintf(fp, "  Set: None\n");
 766  795          else if (md.smbmd_set == (uint8_t)-1u)
 767  796                  oprintf(fp, "  Set: Unknown\n");
 768  797          else
 769  798                  oprintf(fp, "  Set: %u\n", md.smbmd_set);
 770  799  
      800 +        if (md.smbmd_rank != 0) {
      801 +                desc_printf(smbios_memdevice_rank_desc(md.smbmd_rank),
      802 +                    fp, "  Rank: %u", md.smbmd_rank);
      803 +        } else {
      804 +                oprintf(fp, "  Rank: Unknown\n");
      805 +        }
      806 +
 771  807          desc_printf(smbios_memdevice_type_desc(md.smbmd_type),
 772  808              fp, "  Memory Type: %u", md.smbmd_type);
 773  809  
 774  810          flag_printf(fp, "Flags", md.smbmd_flags, sizeof (md.smbmd_flags) * NBBY,
 775  811              smbios_memdevice_flag_name, smbios_memdevice_flag_desc);
 776  812  
 777  813          if (md.smbmd_speed != 0)
 778      -                oprintf(fp, "  Speed: %uns\n", md.smbmd_speed);
      814 +                oprintf(fp, "  Speed: %u MHz\n", md.smbmd_speed);
 779  815          else
 780  816                  oprintf(fp, "  Speed: Unknown\n");
 781  817  
      818 +        if (md.smbmd_clkspeed != 0)
      819 +                oprintf(fp, "  Configured Speed: %u MHz\n", md.smbmd_clkspeed);
      820 +        else
      821 +                oprintf(fp, "  Configured Speed: Unknown\n");
      822 +
 782  823          oprintf(fp, "  Device Locator: %s\n", md.smbmd_dloc);
 783  824          oprintf(fp, "  Bank Locator: %s\n", md.smbmd_bloc);
      825 +
      826 +        if (md.smbmd_minvolt != 0) {
      827 +                oprintf(fp, "  Minimum Voltage: %.2fV\n",
      828 +                    md.smbmd_minvolt / 1000.0);
      829 +        } else {
      830 +                oprintf(fp, "  Minimum Voltage: Unknown\n");
      831 +        }
      832 +
      833 +        if (md.smbmd_maxvolt != 0) {
      834 +                oprintf(fp, "  Maximum Voltage: %.2fV\n",
      835 +                    md.smbmd_maxvolt / 1000.0);
      836 +        } else {
      837 +                oprintf(fp, "  Maximum Voltage: Unknown\n");
      838 +        }
      839 +
      840 +        if (md.smbmd_confvolt != 0) {
      841 +                oprintf(fp, "  Configured Voltage: %.2fV\n",
      842 +                    md.smbmd_confvolt / 1000.0);
      843 +        } else {
      844 +                oprintf(fp, "  Configured Voltage: Unknown\n");
      845 +        }
 784  846  }
 785  847  
 786  848  static void
 787  849  print_memarrmap(smbios_hdl_t *shp, id_t id, FILE *fp)
 788  850  {
 789  851          smbios_memarrmap_t ma;
 790  852  
 791  853          (void) smbios_info_memarrmap(shp, id, &ma);
 792  854  
 793      -        id_printf(fp, "  Physical Memory Array: ", ma.smbmam_array);
      855 +        id_printf(fp, "  Physical Memory Array: ", ma.smbmam_array);
 794  856          oprintf(fp, "  Devices per Row: %u\n", ma.smbmam_width);
 795  857  
 796  858          oprintf(fp, "  Physical Address: 0x%llx\n  Size: %llu bytes\n",
 797  859              (u_longlong_t)ma.smbmam_addr, (u_longlong_t)ma.smbmam_size);
 798  860  }
 799  861  
 800  862  static void
 801  863  print_memdevmap(smbios_hdl_t *shp, id_t id, FILE *fp)
 802  864  {
 803  865          smbios_memdevmap_t md;
 804  866  
 805  867          (void) smbios_info_memdevmap(shp, id, &md);
 806  868  
 807      -        id_printf(fp, "  Memory Device: ", md.smbmdm_device);
 808      -        id_printf(fp, "  Memory Array Mapped Address: ", md.smbmdm_arrmap);
      869 +        id_printf(fp, "  Memory Device: ", md.smbmdm_device);
      870 +        id_printf(fp, "  Memory Array Mapped Address: ", md.smbmdm_arrmap);
 809  871  
 810  872          oprintf(fp, "  Physical Address: 0x%llx\n  Size: %llu bytes\n",
 811  873              (u_longlong_t)md.smbmdm_addr, (u_longlong_t)md.smbmdm_size);
 812  874  
 813  875          oprintf(fp, "  Partition Row Position: %u\n", md.smbmdm_rpos);
 814  876          oprintf(fp, "  Interleave Position: %u\n", md.smbmdm_ipos);
 815  877          oprintf(fp, "  Interleave Data Depth: %u\n", md.smbmdm_idepth);
 816  878  }
 817  879  
 818  880  static void
↓ open down ↓ 153 lines elided ↑ open up ↑
 972 1034              sp->smbstr_type == SMB_TYPE_MEMMOD))
 973 1035                  return (0); /* skip struct if type is obsolete */
 974 1036  
 975 1037          if (g_hdr++ == 0 || !opt_s)
 976 1038                  oprintf(fp, "%-5s %-4s %s\n", "ID", "SIZE", "TYPE");
 977 1039  
 978 1040          oprintf(fp, "%-5u %-4lu",
 979 1041              (uint_t)sp->smbstr_id, (ulong_t)sp->smbstr_size);
 980 1042  
 981 1043          if ((s = smbios_type_name(sp->smbstr_type)) != NULL)
 982      -                oprintf(fp, " %s", s);
     1044 +                oprintf(fp, " (%u) %s", sp->smbstr_type, s);
 983 1045          else if (sp->smbstr_type > SMB_TYPE_OEM_LO &&
 984 1046              sp->smbstr_type < SMB_TYPE_OEM_HI)
 985      -                oprintf(fp, " %s+%u", "SMB_TYPE_OEM_LO",
     1047 +                oprintf(fp, " (%u) %s+%u", sp->smbstr_type, "SMB_TYPE_OEM_LO",
 986 1048                      sp->smbstr_type - SMB_TYPE_OEM_LO);
 987 1049          else
 988 1050                  oprintf(fp, " %u", sp->smbstr_type);
 989 1051  
 990 1052          if ((s = smbios_type_desc(sp->smbstr_type)) != NULL)
 991 1053                  oprintf(fp, " (%s)\n", s);
 992 1054          else
 993 1055                  oprintf(fp, "\n");
 994 1056  
 995 1057          if (opt_s)
↓ open down ↓ 288 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX