Print this page
SKU fix for 5094
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>


   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*

  23  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  24  * Use is subject to license terms.
  25  */
  26 
  27 /*
  28  * This header file defines the implementation structures for the SMBIOS access
  29  * library, libsmbios, and an equivalent kernel module.  Clients should use
  30  * the <smbios.h> or <sys/smbios.h> header files to access DMTF SMBIOS
  31  * information, NOT these underlying implementation structures from the spec.
  32  * In short, do not user this header file or these routines for any purpose.
  33  */
  34 
  35 #ifndef _SYS_SMBIOS_IMPL_H
  36 #define _SYS_SMBIOS_IMPL_H
  37 
  38 #include <sys/smbios.h>
  39 #include <sys/sysmacros.h>
  40 
  41 #ifdef _KERNEL
  42 #include <sys/systm.h>


  97 
  98 typedef struct smb_chassis {
  99         smb_header_t smbch_hdr;         /* structure header */
 100         uint8_t smbch_manufacturer;     /* manufacturer */
 101         uint8_t smbch_type;             /* type */
 102         uint8_t smbch_version;          /* version */
 103         uint8_t smbch_serial;           /* serial number */
 104         uint8_t smbch_asset;            /* asset tag */
 105         uint8_t smbch_bustate;          /* boot-up state */
 106         uint8_t smbch_psstate;          /* power supply state */
 107         uint8_t smbch_thstate;          /* thermal state */
 108         uint8_t smbch_security;         /* security state */
 109         uint32_t smbch_oemdata;         /* OEM-specific data */
 110         uint8_t smbch_uheight;          /* enclosure height */
 111         uint8_t smbch_cords;            /* number of power cords */
 112         uint8_t smbch_cn;               /* number of contained records */
 113         uint8_t smbch_cm;               /* size of contained records */
 114         uint8_t smbch_cv[1];            /* array of contained records */
 115 } smb_chassis_t;
 116 



 117 #define SMB_CHT_LOCK    0x80            /* lock bit within smbch_type */
 118 
 119 typedef struct smb_processor {
 120         smb_header_t smbpr_hdr;         /* structure header */
 121         uint8_t smbpr_socket;           /* socket designation */
 122         uint8_t smbpr_type;             /* processor type (see <smbios.h>) */
 123         uint8_t smbpr_family;           /* processor family (see <smbios.h>) */
 124         uint8_t smbpr_manufacturer;     /* manufacturer */
 125         uint64_t smbpr_cpuid;           /* processor cpuid information */
 126         uint8_t smbpr_version;          /* version */
 127         uint8_t smbpr_voltage;          /* voltage */
 128         uint16_t smbpr_clkspeed;        /* external clock speed in MHz */
 129         uint16_t smbpr_maxspeed;        /* maximum speed in MHz */
 130         uint16_t smbpr_curspeed;        /* current speed in MHz */
 131         uint8_t smbpr_status;           /* status (see <smbios.h>) */
 132         uint8_t smbpr_upgrade;          /* upgrade */
 133         uint16_t smbpr_l1cache;         /* L1 cache handle (if any) */
 134         uint16_t smbpr_l2cache;         /* L2 cache handle (if any) */
 135         uint16_t smbpr_l3cache;         /* L3 cache handle (if any) */
 136         uint8_t smbpr_serial;           /* serial number */
 137         uint8_t smbpr_asset;            /* asset tag */
 138         uint8_t smbpr_part;             /* part number */





 139 } smb_processor_t;
 140 
 141 typedef struct smb_cache {
 142         smb_header_t smbca_hdr;         /* structure header */
 143         uint8_t smbca_socket;           /* socket designation */
 144         uint16_t smbca_config;          /* cache configuration */
 145         uint16_t smbca_maxsize;         /* maximum installed size */
 146         uint16_t smbca_size;            /* installed size */
 147         uint16_t smbca_stype;           /* supported SRAM type */
 148         uint16_t smbca_ctype;           /* current SRAM type */
 149         uint8_t smbca_speed;            /* speed in nanoseconds */
 150         uint8_t smbca_etype;            /* error correction type */
 151         uint8_t smbca_ltype;            /* logical cache type */
 152         uint8_t smbca_assoc;            /* associativity */
 153 } smb_cache_t;
 154 
 155 /*
 156  * Convert encoded cache size to bytes: DSP0134 Section 3.3.8 explains the
 157  * encoding.  The highest bit is 0 for 1k units, 1 for 64k units, and this
 158  * macro decodes the value into bytes for exporting to our clients.
 159  */
 160 #define SMB_CACHE_SIZE(s)       (((s) & 0x8000) ? \
 161         ((uint32_t)((s) & 0x7FFF) * 64 * 1024) : ((uint32_t)(s) * 1024))
 162 
 163 #define SMB_CACHE_CFG_MODE(c)           (((c) >> 8) & 3)
 164 #define SMB_CACHE_CFG_ENABLED(c)        (((c) >> 7) & 1)
 165 #define SMB_CACHE_CFG_LOCATION(c)       (((c) >> 5) & 3)
 166 #define SMB_CACHE_CFG_SOCKETED(c)       (((c) >> 3) & 1)
 167 #define SMB_CACHE_CFG_LEVEL(c)          (((c) & 7) + 1)
 168 
 169 typedef struct smb_port {
 170         smb_header_t smbpo_hdr;         /* structure header */
 171         uint8_t smbpo_iref;             /* internal reference designator */
 172         uint8_t smbpo_itype;            /* internal connector type */
 173         uint8_t smbpo_eref;             /* external reference designator */
 174         uint8_t smbpo_etype;            /* external connector type */
 175         uint8_t smbpo_ptype;            /* port type */
 176 } smb_port_t;
 177 
 178 typedef struct smb_slot {
 179         smb_header_t smbsl_hdr;         /* structure header */
 180         uint8_t smbsl_name;             /* reference designation */
 181         uint8_t smbsl_type;             /* slot type */
 182         uint8_t smbsl_width;            /* slot data bus width */
 183         uint8_t smbsl_usage;            /* current usage */
 184         uint8_t smbsl_length;           /* slot length */
 185         uint16_t smbsl_id;              /* slot ID */
 186         uint8_t smbsl_ch1;              /* slot characteristics 1 */
 187         uint8_t smbsl_ch2;              /* slot characteristics 2 */
 188         uint16_t smbsl_sg;              /* segment group number */
 189         uint8_t smbsl_bus;              /* bus number */
 190         uint8_t smbsl_df;               /* device/function number */
 191 } smb_slot_t;
 192 
 193 typedef struct smb_obdev {
 194         uint8_t smbob_type;             /* encoded type and enable bit */
 195         uint8_t smbob_name;             /* descriptiong string */
 196 } smb_obdev_t;
 197 
 198 #define SMB_OBT_ENABLED         0x80    /* enable bit within smbob_type */
 199 
 200 typedef struct smb_strtab {
 201         smb_header_t smbtb_hdr;         /* structure header */
 202         uint8_t smbtb_count;            /* number of strings */
 203 } smb_strtab_t;
 204 
 205 typedef struct smb_lang {
 206         smb_header_t smblang_hdr;       /* structure header */
 207         uint8_t smblang_num;            /* number of installed languages */
 208         uint8_t smblang_flags;          /* flags */
 209         uint8_t smblang_resv[15];       /* reserved for future use */
 210         uint8_t smblang_cur;            /* current language string */
 211 } smb_lang_t;
 212 
 213 typedef struct smb_sel {
 214         smb_header_t smbsel_hdr;        /* structure header */
 215         uint16_t smbsel_len;            /* log area length */
 216         uint16_t smbsel_hdroff;         /* header offset */
 217         uint16_t smbsel_dataoff;        /* data offset */
 218         uint8_t smbsel_method;          /* access method */
 219         uint8_t smbsel_status;          /* status flags */
 220         uint32_t smbsel_token;          /* change token */
 221         uint32_t smbsel_addr;           /* access method address */
 222         uint8_t smbsel_format;          /* header format */
 223         uint8_t smbsel_typec;           /* number of type descriptors */
 224         uint8_t smbsel_typesz;          /* size of each type descriptor */
 225         uint8_t smbsel_typev[1];        /* array of type descriptors */
 226 } smb_sel_t;
 227 
 228 typedef struct smb_memarray {
 229         smb_header_t smbmarr_hdr;       /* structure header */
 230         uint8_t smbmarr_loc;            /* location */
 231         uint8_t smbmarr_use;            /* use */
 232         uint8_t smbmarr_ecc;            /* error detect/correct mechanism */
 233         uint32_t smbmarr_cap;           /* maximum capacity */
 234         uint16_t smbmarr_err;           /* error handle */
 235         uint16_t smbmarr_ndevs;         /* number of slots or sockets */

 236 } smb_memarray_t;
 237 
 238 typedef struct smb_memarrmap {
 239         smb_header_t smbamap_hdr;       /* structure header */
 240         uint32_t smbamap_start;         /* starting address in kilobytes */
 241         uint32_t smbamap_end;           /* ending address in kilobytes */
 242         uint16_t smbamap_array;         /* physical memory array handle */
 243         uint8_t smbamap_width;          /* partition width */


 244 } smb_memarrmap_t;
 245 
 246 typedef struct smb_memdevice {
 247         smb_header_t smbmdev_hdr;       /* structure header */
 248         uint16_t smbmdev_array;         /* array handle */
 249         uint16_t smbmdev_error;         /* error handle */
 250         uint16_t smbmdev_twidth;        /* total width */
 251         uint16_t smbmdev_dwidth;        /* data width */
 252         uint16_t smbmdev_size;          /* size in either K or MB */
 253         uint8_t smbmdev_form;           /* form factor */
 254         uint8_t smbmdev_set;            /* device set */
 255         uint8_t smbmdev_dloc;           /* device locator */
 256         uint8_t smbmdev_bloc;           /* bank locator */
 257         uint8_t smbmdev_type;           /* memory type */
 258         uint16_t smbmdev_flags;         /* detail flags */
 259         uint16_t smbmdev_speed;         /* speed in MHz */
 260         uint8_t smbmdev_manufacturer;   /* manufacturer */
 261         uint8_t smbmdev_serial;         /* serial number */
 262         uint8_t smbmdev_asset;          /* asset tag */
 263         uint8_t smbmdev_part;           /* part number */






 264 } smb_memdevice_t;
 265 
 266 #define SMB_MDS_KBYTES          0x8000  /* size in specified in kilobytes */
 267 
 268 typedef struct smb_memdevmap {
 269         smb_header_t smbdmap_hdr;       /* structure header */
 270         uint32_t smbdmap_start;         /* starting address in kilobytes */
 271         uint32_t smbdmap_end;           /* ending address in kilobytes */
 272         uint16_t smbdmap_device;        /* memory device handle */
 273         uint16_t smbdmap_array;         /* memory array mapped address handle */
 274         uint8_t smbdmap_rpos;           /* row position */
 275         uint8_t smbdmap_ipos;           /* interleave position */
 276         uint8_t smbdmap_idepth;         /* interleave depth */


 277 } smb_memdevmap_t;
 278 
 279 typedef struct smb_battery {
 280         smb_header_t smbbat_hdr;        /* structure header */
 281         uint8_t smbbat_loc;             /* location */
 282         uint8_t smbbat_manufacturer;    /* manufacturer */
 283         uint8_t smbbat_date;            /* manufacture date */
 284         uint8_t smbbat_serial;          /* serial number */
 285         uint8_t smbbat_devname;         /* device name */
 286         uint8_t smbbat_chem;            /* device chemistry */
 287         uint16_t smbbat_cap;            /* design capacity in mW hours */
 288         uint16_t smbbat_volt;           /* design voltage in mV */
 289         uint8_t smbbat_version;         /* SBDS version string */
 290         uint8_t smbbat_err;             /* error percentage */
 291         uint16_t smbbat_ssn;            /* SBDS serial number */
 292         uint16_t smbbat_sdate;          /* SBDS manufacture date */
 293         uint8_t smbbat_schem;           /* SBDS chemistry string */
 294         uint8_t smbbat_mult;            /* design capacity multiplier */
 295         uint32_t smbbat_oemdata;        /* OEM-specific data */
 296 } smb_battery_t;




   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright 2015 OmniTI Computer Consulting, Inc.  All rights reserved.
  24  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  25  * Use is subject to license terms.
  26  */
  27 
  28 /*
  29  * This header file defines the implementation structures for the SMBIOS access
  30  * library, libsmbios, and an equivalent kernel module.  Clients should use
  31  * the <smbios.h> or <sys/smbios.h> header files to access DMTF SMBIOS
  32  * information, NOT these underlying implementation structures from the spec.
  33  * In short, do not user this header file or these routines for any purpose.
  34  */
  35 
  36 #ifndef _SYS_SMBIOS_IMPL_H
  37 #define _SYS_SMBIOS_IMPL_H
  38 
  39 #include <sys/smbios.h>
  40 #include <sys/sysmacros.h>
  41 
  42 #ifdef _KERNEL
  43 #include <sys/systm.h>


  98 
  99 typedef struct smb_chassis {
 100         smb_header_t smbch_hdr;         /* structure header */
 101         uint8_t smbch_manufacturer;     /* manufacturer */
 102         uint8_t smbch_type;             /* type */
 103         uint8_t smbch_version;          /* version */
 104         uint8_t smbch_serial;           /* serial number */
 105         uint8_t smbch_asset;            /* asset tag */
 106         uint8_t smbch_bustate;          /* boot-up state */
 107         uint8_t smbch_psstate;          /* power supply state */
 108         uint8_t smbch_thstate;          /* thermal state */
 109         uint8_t smbch_security;         /* security state */
 110         uint32_t smbch_oemdata;         /* OEM-specific data */
 111         uint8_t smbch_uheight;          /* enclosure height */
 112         uint8_t smbch_cords;            /* number of power cords */
 113         uint8_t smbch_cn;               /* number of contained records */
 114         uint8_t smbch_cm;               /* size of contained records */
 115         uint8_t smbch_cv[1];            /* array of contained records */
 116 } smb_chassis_t;
 117 
 118 /* WARNING: the argument is evaluated three times! */
 119 #define SMB_CH_SKU(smbcp) ((char *) \
 120         (smbcp)->smbch_cv + ((smbcp)->smbch_cn * (smbcp)->smbch_cm))
 121 #define SMB_CHT_LOCK    0x80            /* lock bit within smbch_type */
 122 
 123 typedef struct smb_processor {
 124         smb_header_t smbpr_hdr;         /* structure header */
 125         uint8_t smbpr_socket;           /* socket designation */
 126         uint8_t smbpr_type;             /* processor type (see <smbios.h>) */
 127         uint8_t smbpr_family;           /* processor family (see <smbios.h>) */
 128         uint8_t smbpr_manufacturer;     /* manufacturer */
 129         uint64_t smbpr_cpuid;           /* processor cpuid information */
 130         uint8_t smbpr_version;          /* version */
 131         uint8_t smbpr_voltage;          /* voltage */
 132         uint16_t smbpr_clkspeed;        /* external clock speed in MHz */
 133         uint16_t smbpr_maxspeed;        /* maximum speed in MHz */
 134         uint16_t smbpr_curspeed;        /* current speed in MHz */
 135         uint8_t smbpr_status;           /* status (see <smbios.h>) */
 136         uint8_t smbpr_upgrade;          /* upgrade */
 137         uint16_t smbpr_l1cache;         /* L1 cache handle (if any) */
 138         uint16_t smbpr_l2cache;         /* L2 cache handle (if any) */
 139         uint16_t smbpr_l3cache;         /* L3 cache handle (if any) */
 140         uint8_t smbpr_serial;           /* serial number */
 141         uint8_t smbpr_asset;            /* asset tag */
 142         uint8_t smbpr_part;             /* part number */
 143         uint8_t smbpr_corecount;        /* number of cores per socket */
 144         uint8_t smbpr_coresenabled;     /* number of enabled cores per socket */
 145         uint8_t smbpr_threadcount;      /* number of threads per socket */
 146         uint16_t smbpr_cflags;  /* cpu characteristics (see <smbios.h>) */
 147         uint16_t smbpr_family2;         /* processor family2 (see <smbios.h>) */
 148 } smb_processor_t;
 149 
 150 typedef struct smb_cache {
 151         smb_header_t smbca_hdr;         /* structure header */
 152         uint8_t smbca_socket;           /* socket designation */
 153         uint16_t smbca_config;          /* cache configuration */
 154         uint16_t smbca_maxsize;         /* maximum installed size */
 155         uint16_t smbca_size;            /* installed size */
 156         uint16_t smbca_stype;           /* supported SRAM type */
 157         uint16_t smbca_ctype;           /* current SRAM type */
 158         uint8_t smbca_speed;            /* speed in nanoseconds */
 159         uint8_t smbca_etype;            /* error correction type */
 160         uint8_t smbca_ltype;            /* logical cache type */
 161         uint8_t smbca_assoc;            /* associativity */
 162 } smb_cache_t;
 163 
 164 /*
 165  * Convert encoded cache size to bytes: DSP0134 Section 7.8 explains the
 166  * encoding.  The highest bit is 0 for 1k units, 1 for 64k units, and this
 167  * macro decodes the value into bytes for exporting to our clients.
 168  */
 169 #define SMB_CACHE_SIZE(s)       (((s) & 0x8000) ? \
 170         ((uint32_t)((s) & 0x7FFF) * 64 * 1024) : ((uint32_t)(s) * 1024))
 171 
 172 #define SMB_CACHE_CFG_MODE(c)           (((c) >> 8) & 3)
 173 #define SMB_CACHE_CFG_ENABLED(c)        (((c) >> 7) & 1)
 174 #define SMB_CACHE_CFG_LOCATION(c)       (((c) >> 5) & 3)
 175 #define SMB_CACHE_CFG_SOCKETED(c)       (((c) >> 3) & 1)
 176 #define SMB_CACHE_CFG_LEVEL(c)          (((c) & 7) + 1)
 177 
 178 typedef struct smb_port {
 179         smb_header_t smbpo_hdr;         /* structure header */
 180         uint8_t smbpo_iref;             /* internal reference designator */
 181         uint8_t smbpo_itype;            /* internal connector type */
 182         uint8_t smbpo_eref;             /* external reference designator */
 183         uint8_t smbpo_etype;            /* external connector type */
 184         uint8_t smbpo_ptype;            /* port type */
 185 } smb_port_t;
 186 
 187 typedef struct smb_slot {
 188         smb_header_t smbsl_hdr;         /* structure header */
 189         uint8_t smbsl_name;             /* reference designation */
 190         uint8_t smbsl_type;             /* slot type */
 191         uint8_t smbsl_width;            /* slot data bus width */
 192         uint8_t smbsl_usage;            /* current usage */
 193         uint8_t smbsl_length;           /* slot length */
 194         uint16_t smbsl_id;              /* slot ID */
 195         uint8_t smbsl_ch1;              /* slot characteristics 1 */
 196         uint8_t smbsl_ch2;              /* slot characteristics 2 */
 197         uint16_t smbsl_sg;              /* segment group number */
 198         uint8_t smbsl_bus;              /* bus number */
 199         uint8_t smbsl_df;               /* device/function number */
 200 } smb_slot_t;
 201 
 202 typedef struct smb_obdev {
 203         uint8_t smbob_type;             /* encoded type and enable bit */
 204         uint8_t smbob_name;             /* description string */
 205 } smb_obdev_t;
 206 
 207 #define SMB_OBT_ENABLED         0x80    /* enable bit within smbob_type */
 208 
 209 typedef struct smb_strtab {
 210         smb_header_t smbtb_hdr;         /* structure header */
 211         uint8_t smbtb_count;            /* number of strings */
 212 } smb_strtab_t;
 213 
 214 typedef struct smb_lang {
 215         smb_header_t smblang_hdr;       /* structure header */
 216         uint8_t smblang_num;            /* number of installed languages */
 217         uint8_t smblang_flags;          /* flags */
 218         uint8_t smblang_resv[15];       /* reserved for future use */
 219         uint8_t smblang_cur;            /* current language string */
 220 } smb_lang_t;
 221 
 222 typedef struct smb_sel {
 223         smb_header_t smbsel_hdr;        /* structure header */
 224         uint16_t smbsel_len;            /* log area length */
 225         uint16_t smbsel_hdroff;         /* header offset */
 226         uint16_t smbsel_dataoff;        /* data offset */
 227         uint8_t smbsel_method;          /* access method */
 228         uint8_t smbsel_status;          /* status flags */
 229         uint32_t smbsel_token;          /* change token */
 230         uint32_t smbsel_addr;           /* access method address */
 231         uint8_t smbsel_format;          /* header format */
 232         uint8_t smbsel_typec;           /* number of type descriptors */
 233         uint8_t smbsel_typesz;          /* size of each type descriptor */
 234         uint8_t smbsel_typev[1];        /* array of type descriptors */
 235 } smb_sel_t;
 236 
 237 typedef struct smb_memarray {
 238         smb_header_t smbmarr_hdr;       /* structure header */
 239         uint8_t smbmarr_loc;            /* location */
 240         uint8_t smbmarr_use;            /* use */
 241         uint8_t smbmarr_ecc;            /* error detect/correct mechanism */
 242         uint32_t smbmarr_cap;           /* maximum capacity */
 243         uint16_t smbmarr_err;           /* error handle */
 244         uint16_t smbmarr_ndevs;         /* number of slots or sockets */
 245         uint64_t smbmarr_extcap;        /* extended maximum capacity */
 246 } smb_memarray_t;
 247 
 248 typedef struct smb_memarrmap {
 249         smb_header_t smbamap_hdr;       /* structure header */
 250         uint32_t smbamap_start;         /* starting address in kilobytes */
 251         uint32_t smbamap_end;           /* ending address in kilobytes */
 252         uint16_t smbamap_array;         /* physical memory array handle */
 253         uint8_t smbamap_width;          /* partition width */
 254         uint64_t smbamap_extstart;      /* extended starting address in bytes */
 255         uint64_t smbamap_extend;        /* extended ending address in bytes */
 256 } smb_memarrmap_t;
 257 
 258 typedef struct smb_memdevice {
 259         smb_header_t smbmdev_hdr;       /* structure header */
 260         uint16_t smbmdev_array;         /* array handle */
 261         uint16_t smbmdev_error;         /* error handle */
 262         uint16_t smbmdev_twidth;        /* total width */
 263         uint16_t smbmdev_dwidth;        /* data width */
 264         uint16_t smbmdev_size;          /* size in either K or MB */
 265         uint8_t smbmdev_form;           /* form factor */
 266         uint8_t smbmdev_set;            /* device set */
 267         uint8_t smbmdev_dloc;           /* device locator */
 268         uint8_t smbmdev_bloc;           /* bank locator */
 269         uint8_t smbmdev_type;           /* memory type */
 270         uint16_t smbmdev_flags;         /* detail flags */
 271         uint16_t smbmdev_speed;         /* speed in MHz */
 272         uint8_t smbmdev_manufacturer;   /* manufacturer */
 273         uint8_t smbmdev_serial;         /* serial number */
 274         uint8_t smbmdev_asset;          /* asset tag */
 275         uint8_t smbmdev_part;           /* part number */
 276         uint8_t smbmdev_attrs;          /* attributes */
 277         uint32_t smbmdev_extsize;       /* extended size */
 278         uint16_t smbmdev_clkspeed;      /* configured clock speed */
 279         uint16_t smbmdev_minvolt;       /* minimum voltage */
 280         uint16_t smbmdev_maxvolt;       /* maximum voltage */
 281         uint16_t smbmdev_confvolt;      /* configured voltage */
 282 } smb_memdevice_t;
 283 
 284 #define SMB_MDS_KBYTES          0x8000  /* size in specified in kilobytes */
 285 
 286 typedef struct smb_memdevmap {
 287         smb_header_t smbdmap_hdr;       /* structure header */
 288         uint32_t smbdmap_start;         /* starting address in kilobytes */
 289         uint32_t smbdmap_end;           /* ending address in kilobytes */
 290         uint16_t smbdmap_device;        /* memory device handle */
 291         uint16_t smbdmap_array;         /* memory array mapped address handle */
 292         uint8_t smbdmap_rpos;           /* row position */
 293         uint8_t smbdmap_ipos;           /* interleave position */
 294         uint8_t smbdmap_idepth;         /* interleave depth */
 295         uint64_t smbdmap_extstart;      /* extended starting address */
 296         uint64_t smbdmap_extend;        /* extended ending address */
 297 } smb_memdevmap_t;
 298 
 299 typedef struct smb_battery {
 300         smb_header_t smbbat_hdr;        /* structure header */
 301         uint8_t smbbat_loc;             /* location */
 302         uint8_t smbbat_manufacturer;    /* manufacturer */
 303         uint8_t smbbat_date;            /* manufacture date */
 304         uint8_t smbbat_serial;          /* serial number */
 305         uint8_t smbbat_devname;         /* device name */
 306         uint8_t smbbat_chem;            /* device chemistry */
 307         uint16_t smbbat_cap;            /* design capacity in mW hours */
 308         uint16_t smbbat_volt;           /* design voltage in mV */
 309         uint8_t smbbat_version;         /* SBDS version string */
 310         uint8_t smbbat_err;             /* error percentage */
 311         uint16_t smbbat_ssn;            /* SBDS serial number */
 312         uint16_t smbbat_sdate;          /* SBDS manufacture date */
 313         uint8_t smbbat_schem;           /* SBDS chemistry string */
 314         uint8_t smbbat_mult;            /* design capacity multiplier */
 315         uint32_t smbbat_oemdata;        /* OEM-specific data */
 316 } smb_battery_t;