24.05.2014 Views

Embedded EEPROM Specification - picmg

Embedded EEPROM Specification - picmg

Embedded EEPROM Specification - picmg

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

EEEP<br />

PICMG ® EeeP<br />

<strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong><br />

Revision 1.0<br />

August 8, 2010<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 1 of 84


© Copyright 2009, PCI Industrial Computer Manufacturers Group. The attention of adopters is directed<br />

to the possibility that compliance with or adoption of PICMG® specifications may require use of an<br />

invention covered by patent rights. PICMG® shall not be responsible for identifying patents for which a<br />

license may be required by any PICMG® specification or for conducting legal inquiries into the legal<br />

validity or scope of those patents that are brought to its attention. PICMG® specifications are<br />

prospective and advisory only. Prospective users are responsible for protecting themselves against<br />

liability for infringement of patents.<br />

NOTICE:<br />

The information contained in this document is subject to change without notice. The material in this<br />

document details a PICMG® specification in accordance with the license and notices set forth on this<br />

page. This document does not represent a commitment to implement any portion of this specification<br />

in any company's products.<br />

WHILE THE INFORMATION IN THIS PUBLICATION IS BELIEVED TO BE ACCURATE, PICMG®<br />

MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS<br />

MATERIAL INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY OF TITLE OR OWNERSHIP,<br />

IMPLIED WARRANTY OF MERCHANTABILITY OR WARRANTY OF FITNESS FOR PARTICULAR<br />

PURPOSE OR USE.<br />

In no event shall PICMG® be liable for errors contained herein or for indirect, incidental, special,<br />

consequential, reliance or cover damages, including loss of profits, revenue, data or use, incurred by<br />

any user or any third party. Compliance with this specification does not absolve manufacturers of<br />

equipment from the requirements of safety and regulatory agencies (UL, CSA, FCC, IEC, etc.).<br />

PICMG®, CompactPCI®, AdvancedTCA®, AdvancedTCA® 300,ATCA®, ATCA® 300, CompactPCI®<br />

Express, COM Express®, SHB Express®, and the PICMG, CompactPCI, AdvancedTCA, µTCA and<br />

ATCA logos are registered trademarks, and MicroTCA, xTCA and AdvancedMC are<br />

trademarks of the PCI Industrial Computer Manufacturers Group. All other brand or product names<br />

may be trademarks or registered trademarks of their respective holders.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 2 of 84


Table of Contents<br />

1 Introduction................................................................................................................................................... 9<br />

1.1 Name and Logo Usage......................................................................................................................... 9<br />

1.2 Intellectual Property............................................................................................................................ 10<br />

1.2.1 Necessary Claims (referring to mandatory or recommended features)......................................10<br />

1.2.2 Unnecessary Claims (referring to optional features or non-normative elements).......................10<br />

1.2.3 Third Party Disclosures...............................................................................................................11<br />

1.3 Copyright Notice................................................................................................................................. 11<br />

1.4 Trademarks......................................................................................................................................... 11<br />

1.5 Special Word Usage........................................................................................................................... 11<br />

1.6 Acronyms / Definitions........................................................................................................................ 12<br />

1.7 Applicable Documents and Standards................................................................................................15<br />

1.8 Statement of Compliance.................................................................................................................... 16<br />

2 General....................................................................................................................................................... 17<br />

2.1 Overview............................................................................................................................................. 17<br />

2.2 Storage Conventions.......................................................................................................................... 17<br />

2.2.1 Multi-Byte Variables.................................................................................................................... 17<br />

2.2.2 Structure Packing....................................................................................................................... 17<br />

3 Detection..................................................................................................................................................... 18<br />

3.1 Detecting EeeP <strong>EEPROM</strong>.................................................................................................................. 18<br />

3.1.1 High Level Check........................................................................................................................ 18<br />

3.1.2 Sample I2C Transfer................................................................................................................... 18<br />

3.2 Detecting COM0 R1.0 <strong>EEPROM</strong>........................................................................................................18<br />

3.2.1 High Level Check........................................................................................................................ 18<br />

3.2.2 Sample I2C Transfer................................................................................................................... 18<br />

3.3 Identifying Device Type Standard/Extended Index..............................................................................19<br />

3.3.1 Sample I2C Transfer................................................................................................................... 19<br />

4 <strong>EEPROM</strong> Header Components.................................................................................................................. 20<br />

4.1 Concepts............................................................................................................................................. 20<br />

4.2 Common EeeP <strong>EEPROM</strong> Header......................................................................................................20<br />

4.2.1 Description ................................................................................................................................. 20<br />

4.2.2 Header Elements........................................................................................................................ 20<br />

4.3 Universal Device Identifier.................................................................................................................. 21<br />

4.3.1 Description ................................................................................................................................. 21<br />

4.3.2 Block Elements........................................................................................................................... 22<br />

5 <strong>EEPROM</strong> Headers...................................................................................................................................... 23<br />

5.1 COM0 R2.0 Carrier Board <strong>EEPROM</strong> Header.....................................................................................23<br />

5.1.1 Description ................................................................................................................................. 23<br />

5.1.2 Header Elements........................................................................................................................ 23<br />

5.2 COM0 R2.0 Module <strong>EEPROM</strong> Header...............................................................................................31<br />

5.2.1 Description.................................................................................................................................. 31<br />

5.2.2 Header Elements........................................................................................................................ 31<br />

5.3 Expansion <strong>EEPROM</strong> Header..............................................................................................................32<br />

5.3.1 Description ................................................................................................................................. 32<br />

5.3.2 Header Elements........................................................................................................................ 32<br />

6 Dynamic Descriptor Blocks......................................................................................................................... 33<br />

6.1 Common Dynamic Block Header........................................................................................................33<br />

6.1.1 Description.................................................................................................................................. 33<br />

6.1.2 Block Elements........................................................................................................................... 33<br />

6.1.3 Parse Order / Block Priority........................................................................................................34<br />

6.2 Express Card Topology....................................................................................................................... 36<br />

6.2.1 Description.................................................................................................................................. 36<br />

6.2.2 Block Elements........................................................................................................................... 36<br />

6.2.3 Example Blocks.......................................................................................................................... 37<br />

6.3 Serial Port Configuration Block...........................................................................................................38<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 3 of 84


6.3.1 Description.................................................................................................................................. 38<br />

6.3.2 Block Elements........................................................................................................................... 38<br />

6.3.3 Example Blocks.......................................................................................................................... 39<br />

6.4 SMBIOS Common Block Header........................................................................................................39<br />

6.4.1 Description.................................................................................................................................. 39<br />

6.4.2 Block Elements........................................................................................................................... 40<br />

6.4.3 SMBIOS Block String Storage convention..................................................................................40<br />

6.5 System Information Descriptor Block..................................................................................................41<br />

6.5.1 Description.................................................................................................................................. 41<br />

6.5.2 Block Elements........................................................................................................................... 41<br />

6.5.3 Example Block............................................................................................................................ 42<br />

6.6 Base Board (or Module) Information Descriptor Block........................................................................42<br />

6.6.1 Description.................................................................................................................................. 43<br />

6.6.2 Block Elements........................................................................................................................... 43<br />

6.6.3 Example Block............................................................................................................................ 45<br />

6.7 System Enclosure or Chassis Descriptor Block..................................................................................47<br />

6.7.1 Description.................................................................................................................................. 47<br />

6.7.2 Block Elements........................................................................................................................... 47<br />

6.7.3 Example Block............................................................................................................................ 48<br />

6.8 LFP Device Descriptor Block..............................................................................................................49<br />

6.8.1 Description.................................................................................................................................. 49<br />

6.8.2 Block Elements........................................................................................................................... 49<br />

6.8.3 Example Block............................................................................................................................ 49<br />

6.9 Vendor Specific Block......................................................................................................................... 50<br />

6.9.1 Description.................................................................................................................................. 50<br />

6.9.2 Block Elements........................................................................................................................... 50<br />

6.9.3 Example Block............................................................................................................................ 50<br />

6.10 CRC16 Block.................................................................................................................................... 50<br />

6.10.1 Description................................................................................................................................ 50<br />

6.10.2 Block Elements......................................................................................................................... 51<br />

6.10.3 Example Block.......................................................................................................................... 51<br />

6.11 Expansion <strong>EEPROM</strong> descriptor........................................................................................................52<br />

6.11.1 Description................................................................................................................................ 52<br />

6.11.2 Block Elements......................................................................................................................... 52<br />

6.11.3 Example Block.......................................................................................................................... 53<br />

7 Sample <strong>EEPROM</strong> Content.......................................................................................................................... 54<br />

7.1 Sample Carrier Board <strong>EEPROM</strong> Content...........................................................................................54<br />

7.1.1 COM0R20 Type 2 Carrier Board With Expansion <strong>EEPROM</strong>......................................................54<br />

7.1.2 COM0R20 Type 2 Carrier Board.................................................................................................57<br />

7.2 Sample COM0R20 Module <strong>EEPROM</strong> Content..................................................................................60<br />

7.2.1 Sample 1 All in CRC................................................................................................................... 60<br />

7.2.2 Sample 2 With Data outside CRC...............................................................................................61<br />

7.3 Sample Expansion <strong>EEPROM</strong> Content................................................................................................63<br />

7.3.1 Sample Chassis Expansion <strong>EEPROM</strong>........................................................................................63<br />

8 Standard Data Formats............................................................................................................................... 65<br />

8.1 Compressed ASCII PNPID................................................................................................................. 65<br />

8.1.1 Definition..................................................................................................................................... 65<br />

8.1.2 Example...................................................................................................................................... 65<br />

8.2 <strong>EEPROM</strong> <strong>Specification</strong> Revision........................................................................................................65<br />

8.2.1 Definition .................................................................................................................................... 65<br />

8.2.2 Examples.................................................................................................................................... 65<br />

8.3 Assembler Sample Code.................................................................................................................... 66<br />

9 Headers...................................................................................................................................................... 68<br />

9.1 EeeP.h................................................................................................................................................ 68<br />

9.2 COM0EEP.h........................................................................................................................................ 76<br />

10 Sample Code............................................................................................................................................ 85<br />

11 Revision History........................................................................................................................................ 86<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 4 of 84


Dynamic Block Structures<br />

Common Dynamic Block Header.................................................................................................................... 34<br />

Express Card Extended Topology................................................................................................................... 37<br />

Express Card Extended Topology................................................................................................................... 39<br />

SMBIOS Dynamic Block Header.................................................................................................................... 40<br />

SMBIOS System Info...................................................................................................................................... 42<br />

SMBIOS Module Information.......................................................................................................................... 44<br />

SMBIOS Chassis Info..................................................................................................................................... 47<br />

LFP Device Descriptor.................................................................................................................................... 49<br />

Vendor Specific............................................................................................................................................... 50<br />

CRC ............................................................................................................................................................... 50<br />

Additional <strong>EEPROM</strong> descriptor....................................................................................................................... 52<br />

C Sample Code<br />

Detect COM0 R2.0 FRUPROM...................................................................................................................... 18<br />

Detect COM0 R1.0 FRUPROM...................................................................................................................... 18<br />

Decode PCIe Link Width & Start Lane............................................................................................................32<br />

CRC-CCITT implementation........................................................................................................................... 52<br />

MASM Sample Code<br />

Decode PCIe Link Width & Start Lane............................................................................................................66<br />

CRC-CCITT 386 implementation.................................................................................................................... 67<br />

<strong>EEPROM</strong> Header Structures<br />

Common <strong>EEPROM</strong> Header............................................................................................................................ 20<br />

Universal Device Identifier ............................................................................................................................. 23<br />

COM0 R2.0 Carrier Board <strong>EEPROM</strong> Header.................................................................................................24<br />

Module <strong>EEPROM</strong> Header .............................................................................................................................. 32<br />

Module <strong>EEPROM</strong> Header .............................................................................................................................. 33<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 5 of 84


Index of Tables<br />

Table 1-1: Terms and Definitions..................................................................................................................... 12<br />

Table 4-1: Device Descriptor Byte................................................................................................................... 22<br />

Table 4-2: Example Device Unique Revision IDs............................................................................................23<br />

Table 5-1: USB Descriptor Byte...................................................................................................................... 24<br />

Table 5-2: SATA / SAS Device Descriptor Byte...............................................................................................26<br />

Table 5-3: LAN Descriptor Byte....................................................................................................................... 27<br />

Table 5-4: Miscellaneous I/O Descriptor Byte.................................................................................................28<br />

Table 5-5: Miscellaneous I/O Descriptor Byte2...............................................................................................29<br />

Table 5-6: Digital Display Interface Descriptor Byte1......................................................................................30<br />

Table 5-7: PCI Express Lane Generation Descriptor......................................................................................30<br />

Table 5-8: PCI Express Lane Descriptor Nibble Descriptor.............................................................................31<br />

Table 5-9: PCI Express Valid Starting Lane Configurations............................................................................31<br />

Table 6-1: Dynamic Block Ids.......................................................................................................................... 35<br />

Table 6-2: Dynamic Block Length Values........................................................................................................35<br />

Table 6-3: Com Express Ports........................................................................................................................ 37<br />

Table 6-4: Device Function Addresses............................................................................................................38<br />

Table 6-5: Express Card Block Example 1......................................................................................................38<br />

Table 6-6: Express Card Block Example 2......................................................................................................38<br />

Table 6-7: Serial IRQ Description Ports..........................................................................................................39<br />

Table 6-8: Serial Base Address....................................................................................................................... 40<br />

Table 6-9: Serial Base Address....................................................................................................................... 40<br />

Table 6-10: Serial Port Configuration Block....................................................................................................40<br />

Table 6-11: EeeP Defined SMBIOS Handles..................................................................................................41<br />

Table 6-12: EeeP Defined SMBIOS Handles..................................................................................................41<br />

Table 6-13: System Information Descriptor Block Example............................................................................43<br />

Table 6-14: 'COM_0 Module' Module Information Descriptor Block Example.................................................45<br />

Table 6-15: 'Carrier Board' Module Information Descriptor Block Example.....................................................46<br />

Table 6-16: Chassis Information Descriptor Block Example............................................................................48<br />

Table 6-17: LFP Device Descriptor Block Example.........................................................................................49<br />

Table 6-18: LFP Device Descriptor Block Example.........................................................................................49<br />

Table 6-19: Vendor Specific Block Example....................................................................................................50<br />

Table 6-20: CRC16 Block Example................................................................................................................. 51<br />

Table 6-21: Device Bus Ids............................................................................................................................. 53<br />

Table 6-22: Expansion <strong>EEPROM</strong> descriptor Example....................................................................................53<br />

Table 7-1: COM0R20 Type 2 Carrier Board With Expansion <strong>EEPROM</strong>..........................................................54<br />

Table 7-2: COM0R20 Type 2 Carrier Board ...................................................................................................57<br />

Table 7-3: Sample 1 All in CRC....................................................................................................................... 60<br />

Table 7-4: Sample 2 With Data outside CRC..................................................................................................61<br />

Table 7-5: Sample Chassis Expansion <strong>EEPROM</strong>...........................................................................................63<br />

Table 11-1: Document Revision History..........................................................................................................86<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 6 of 84


1 Introduction<br />

1.1 Name and Logo Usage<br />

The PCI Industrial Computer Manufacturers Group policies regarding the use of its logos and<br />

trademarks are as follows:<br />

Permission to use the PICMG® organization logo is automatically granted to designated members<br />

only as stipulated on the most recent Membership Privileges document (available at www.<strong>picmg</strong>.org)<br />

during the period of time for which their membership dues are paid. Nonmembers may not use the<br />

PICMG® organization logo.<br />

The PICMG® organization logo must be printed in black or color as shown in the files available for<br />

download from the member’s side of the Web site. Logos with or without the “Open Modular<br />

Computing <strong>Specification</strong>s” banner can be used. Nothing may be added or deleted from the PICMG®<br />

logo.<br />

The use of the COM Express logo is a privilege granted by the PICMG® organization to companies<br />

who have purchased the relevant specifications (or acquired them as a member benefit), and that<br />

believe their products comply with these specifications. Manufacturers' distributors and sales<br />

representatives may use the COM Express logo in promoting products sold under the name of the<br />

manufacturer. Use of the logos by either members or non-members implies such compliance. Only<br />

PICMG Executive and Associate members may use the PICMG® logo. PICMG® may revoke<br />

permission to use logos if they are misused. The COM Express logo can be found on the PICMG web<br />

site, www.<strong>picmg</strong>.org.<br />

The COM Express® logo must be used exactly as shown in the files available for download from the<br />

PICMG® Web site. The aspect ratios of the logos must be maintained, but the sizes may be<br />

varied.Nothing may be added to or deleted from the COM Express® logo.<br />

The PICMG® name and logo and the COM Express name and logo are registered trademarks of<br />

PICMG®. Registered trademarks must be followed by the ® symbol, and the following statement must<br />

appear in all published literature and advertising material in which the logo appears:<br />

PICMG, the COM Express name and logo and the PICMG logo are registered trademarks of the PCI<br />

Industrial Computers Manufacturers Group.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 7 of 84


1.2 Intellectual Property<br />

The Consortium draws attention to the fact that it is claimed that compliance with this specification<br />

may involve the use of a patent claim(s) ("IPR"). The Consortium takes no position concerning the<br />

evidence, validity or scope of this IPR.<br />

The holder of this IPR has assured the Consortium that it is willing to license or sublicense all such<br />

IPR to those licensees (Members and non-Members alike) desiring to implement this specification.<br />

The statement of the holder of this IPR to such effect has been filed with the Consortium.<br />

Attention is also drawn to the possibility that some of the elements of this specification may be the<br />

subject of IPR other than those identified below. The Consortium shall not be responsible for<br />

identifying any or all such IPR.<br />

No representation is made as to the availability of any license rights for use of any IPR inherent in this<br />

specification for any purpose other than to implement this specification.<br />

This specification conforms to the current PICMG ® Intellectual Property Rights Policy and the Policies<br />

and Procedures for <strong>Specification</strong> Development and does not contain any known intellectual property<br />

that is not available for licensing under Reasonable and Non-discriminatory terms. In the course of<br />

Membership Review the following disclosures were made:<br />

1.2.1 Necessary Claims (referring to mandatory or recommended features)<br />

No disclosures in this category were made during subcommittee review.<br />

1.2.2 Unnecessary Claims (referring to optional features or non-normative elements)<br />

No disclosures in this category were made during subcommittee review.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 8 of 84


1.2.3 Third Party Disclosures<br />

(Note that third party IPR submissions do not contain any claim of willingness to license the IPR.)<br />

No disclosures in this category were made during subcommittee review.<br />

Refer to PICMG® IPR Policies and Procedures and the company owner of the patent for terms and<br />

conditions of usage.<br />

PICMG® makes no judgment as to the validity of these claims or the licensing terms offered by the<br />

claimants.<br />

THIS SPECIFICATION IS BEING OFFERED WITHOUT ANY WARRANTY WHATSOEVER, AND IN<br />

PARTICULAR, ANY WARRANTY OF NON-INFRINGEMENT IS EXPRESSLY DISCLAIMED. ANY<br />

USE OF THIS SPECIFICATION SHALL BE MADE ENTIRELY AT THE IMPLEMENTER'S OWN RISK,<br />

AND NEITHER THE CONSORTIUM, NOR ANY OF ITS MEMBERS OR SUBMITTERS, SHALL HAVE<br />

ANY LIABILITY WHATSOEVER TO ANY IMPLEMENTER OR THIRD PARTY FOR ANY DAMAGES<br />

OF ANY NATURE WHATSOEVER, DIRECTLY OR INDIRECTLY, ARISING FROM THE USE OF THIS<br />

SPECIFICATION.<br />

Compliance with this specification does not absolve manufacturers of COM Express® equipment from<br />

the requirements of safety and regulatory agencies (UL, CSA, FCC, IEC, etc.).<br />

PICMG® and the COM Express® logos are trademarks of the PCI Industrial Computer Manufacturers<br />

Group.<br />

All other brand or product names may be trademarks or registered trademarks of their respective<br />

holder.<br />

1.3 Copyright Notice<br />

Copyright © 2009, PICMG. All rights reserved. All text, pictures and graphics are protected by<br />

copyrights. No copying is permitted without written permission from PICMG.<br />

PICMG has made every attempt to ensure that the information in this document is accurate yet the<br />

information contained within is supplied “as-is”.<br />

1.4 Trademarks<br />

Intel and Pentium are registered trademarks of Intel Corporation. ExpressCard is a registered<br />

trademark of Personal Computer Memory Card International Association (PCMCIA). PCI Express is a<br />

registered trademark of Peripheral Component Interconnect Special Interest Group (PCI-SIG). COM<br />

Express is a registered trademark of PCI Industrial Computer Manufacturers Group (PICMG). I2C is a<br />

registered trademark of NXP Semiconductors. CompactFlash is a registered trademark of<br />

CompactFlash Association. Winbond is a registered trademark of Winbond Electronics Corp. AVR is a<br />

registered trademark of Atmel Corporation. Microsoft®, Windows®, Windows NT®, Windows CE and<br />

Windows XP® are registered trademarks of Microsoft Corporation. VxWorks is a registered trademark<br />

of WindRiver. All product names and logos are property of their owners.<br />

1.5 Special Word Usage<br />

Mandatory features are indicated by the use of the word “shall.”<br />

Recommended features are indicated by the use of the word “should.”<br />

Optional features are indicated by the use of the word “may.”<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 9 of 84


1.6 Acronyms / Definitions<br />

Term<br />

a.out<br />

AC ‘97<br />

ACPI<br />

Atomic Error<br />

Checking<br />

Basic Module<br />

BBS<br />

BIOS<br />

Big-endian<br />

Carrier Board<br />

CCTV<br />

CVBS<br />

Compact Module<br />

DDC<br />

DIMM<br />

DisplayPort<br />

Table 1-1: Terms and Definitions<br />

Definition<br />

a.out is a file format used in older versions of Unix-like computer<br />

operating systems for executable, object code, and, in later systems,<br />

shared libraries. The name stands for assembler output<br />

Audio CODEC (Coder-Decoder)<br />

Advanced Configuration Power Interface – standard to implement power saving modes in<br />

PC-AT systems<br />

This Is used here to refer to the mechanism of validating all arguments<br />

before modifications are carried out.<br />

COM Express® 125mm x 95mm Module form factor.<br />

Bios Boot <strong>Specification</strong>.<br />

Basic Input Output System – firmware in PC-AT system that is used to initialize system<br />

components before handing control over to the operating system.<br />

Register Value: 0x0A0B0C0D<br />

Memory Order: 0x0A, 0x0B, 0x0C, 0x0D<br />

The most significant byte (MSB) value, which is 0x0A in our example, is stored at the<br />

memory location with the lowest address, the next byte value in significance, 0x0B, is<br />

stored at the following memory location and so on. This is akin to Left-to-Right reading in<br />

hexadecimal order.<br />

An application specific circuit board that accepts a COM Express® Module.<br />

Closed Circuit Television<br />

Composite Video Baseband Signal<br />

COM Express® 95x95 Module form factor<br />

Display Data Control – VESA (Video Electronics Standards Association) standard to allow<br />

identification of the Dynamic of a VGA monitor<br />

Dual In-line Memory Module<br />

DisplayPort is a digital display interface standard put forth by the Video Electronics<br />

Standards Association (VESA). It defines a new license free, royalty free, digital<br />

audio/video interconnect, intended to be used primarily between a computer and its<br />

display monitor.<br />

Dynamic Random Access Memory<br />

DRAM<br />

DVI<br />

Digital Visual Interface - a Digital Display Working Group (DDWG) standard that defines a<br />

standard video interface supporting both digital and analog video signals. The digital<br />

signals use TMDS.<br />

EAPI • <strong>Embedded</strong> Application Programming Interface<br />

Software interface for COM Express specific industrial functions<br />

• System information<br />

• Watchdog timer<br />

• I2C Bus<br />

• Flat Panel brightness control<br />

• User storage are.<br />

• GPIO<br />

eDP<br />

<strong>Embedded</strong> Display Port.<br />

<strong>EEPROM</strong> Electrically Erasable Programmable Read-Only Memory<br />

EFI<br />

Extensible Firmware Interface(Next Generation BIOS)<br />

EFI BIOS Used to explicitly distinguish EFI and Legacy BIOS.<br />

EFP<br />

External Flat Panel<br />

Extended Module COM Express® 155mm x 110mm Module form factor.<br />

FR4<br />

A type of fiber-glass laminate commonly used for printed circuit boards.<br />

Gb<br />

Gigabit<br />

GBE<br />

Gigabit Ethernet<br />

GPI<br />

General Purpose Input<br />

GPIO<br />

General Purpose Input Output<br />

GPO<br />

General Purpose Output<br />

HDA Intel High Definition Audio (HD Audio) refers to the specification released by Intel in 2004<br />

for delivering high definition audio that is capable of playing back more channels at higher<br />

quality than AC97.<br />

HDMI<br />

High Definition Multimedia Interface<br />

I 2 C<br />

Inter Integrated Circuit – 2 wire (clock and data) signaling scheme allowing communication<br />

between integrated circuits, primarily used to read and load register values.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 10 of 84


Term<br />

IDE<br />

Legacy Device<br />

LAN<br />

Little-endian<br />

LFP<br />

LPC<br />

LS<br />

LVDS<br />

MS<br />

NA<br />

NC<br />

NTSC<br />

OEM<br />

PAL<br />

PATA<br />

PC-AT<br />

PCB<br />

PCI<br />

PCI Express<br />

PCIE<br />

PEG<br />

PHY<br />

Pin-out Type<br />

PNPID<br />

PS2<br />

PS2 Keyboard<br />

PS2 Mouse<br />

R a<br />

ROM<br />

RTC<br />

SAS<br />

SCSI<br />

SPD<br />

SPI<br />

SO-DIMM<br />

S0, S1, S2, S3, S4,<br />

S5<br />

SATA<br />

Definition<br />

Integrated Device Electronics – parallel interface for hard disk drives – also known as<br />

PATA<br />

Relics from the PC-AT computer that are not in use in contemporary PC systems: primarily<br />

the ISA bus, UART-based serial ports, parallel printer ports, PS-2 keyboards, and mice.<br />

Definitions vary as to what constitutes a legacy device. Some definitions include IDE as a<br />

legacy device.<br />

Local Area Network<br />

Register Value: 0x0A0B0C0D<br />

Memory Order: 0x0D, 0x0C, 0x0B, 0x0A<br />

The least significant byte (LSB) value, 0x0D, is at the lowest address. The other bytes<br />

follow in increasing order of significance.<br />

Local Flat Panel<br />

Low Pin-Count Interface: a low speed interface used for peripheral circuits such as Super<br />

I/O controllers, which typically combine legacy-device support into a single IC.<br />

Least Significant<br />

Low Voltage Differential Signaling – widely used as a physical interface for TFT flat<br />

panels. LVDS can be used for many high-speed signaling applications. In this document,<br />

it refers only to TFT flat-panel applications.<br />

Most Significant<br />

Not Available<br />

No Connect<br />

National Television Standards Committee – video broadcast standard used in North<br />

America<br />

Original Equipment Manufacturer<br />

Phase Alternating Line – video broadcast standard used in many European countries.<br />

Parallel AT Attachment – parallel interface standard for hard-disk drives – also known as<br />

IDE, AT Attachment, and as ATA<br />

“Personal Computer – Advanced Technology” – an IBM trademark term used to refer to<br />

Intel x86 based personal computers in the 1990s<br />

Printed Circuit Board<br />

Peripheral Component Interface<br />

Peripheral Component Interface Express – next-generation high speed Serialized I/O bus<br />

PCI Express Graphics<br />

Ethernet controller physical layer device<br />

A reference to one of six COM Express® definitions for the signals that appear on the<br />

COM Express® Module connector pins.<br />

Microsoft Plug-And-Play ID (PNP ID). This ID can be registered at the Microsoft web page<br />

(http://www.microsoft.com/whdc/system/pnppwr/pnp/pnpid.mspx) free of charge.<br />

The PNP ID Format is XXX where 'A'


Term<br />

SDVO<br />

SM Bus<br />

Super I/O<br />

TFT<br />

TMDS<br />

TPM<br />

USB<br />

VGA<br />

WDT<br />

XAUI<br />

Definition<br />

Serialized Digital Video Output – Intel defined format for digital video output that can be<br />

used with Carrier Board conversion ICs to create parallel, TMDS, and LVDS flat-panel<br />

formats as well as NTSC and PAL TV outputs<br />

System Management Bus<br />

An integrated circuit, typically interfaced via the LPC bus that provides legacy PC I/O<br />

functions including PS2 keyboard and mouse ports, serial and parallel port(s) and a floppy<br />

interface.<br />

Thin Film Transistor – refers to technology used in active matrix flat-panel displays, in<br />

which there is one thin film transistor per display pixel.<br />

Transition Minimized Differential Signaling - a digital signaling protocol between the<br />

graphics subsystem and display. TMDS is used for the DVI digital signals.<br />

Trusted Platform Module, chip to enhance the security features of a computer system.<br />

Universal Serial Bus<br />

Video Graphics Adapter – PC-AT graphics adapter standard defined by IBM.<br />

Watch Dog Timer.<br />

10 Gigabit / sec Attachment Unit Interface.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 12 of 84


1.7 Applicable Documents and Standards<br />

The following publications are used in conjunction with this standard. When any of the referenced<br />

specifications are superseded by an approved revision, that revision shall apply. All documents may<br />

be obtained from their respective organizations.<br />

• Advanced Configuration and Power Interface <strong>Specification</strong> Revision 4.0, June 16, 2009 Copyright<br />

© 1996-2003 Compaq Computer Corporation, Intel Corporation, Microsoft Corporation, Phoenix<br />

Technologies Ltd., Toshiba Corporation. All rights reserved. http://www.acpi.info/<br />

• ANSI/TIA/EIA-644-A-2001: Electrical Characteristics of Low Voltage Differential Signaling (LVDS)<br />

Interface Circuits, January 1, 2001. http://www.ansi.org/<br />

• ANSI INCITS 361-2002: AT Attachment with Packet Interface - 6 (ATA/ATAPI-6), November 1,<br />

2002. http://www.ansi.org/<br />

• ANSI INCITS 376-2003: American National Standard for Information Technology – Serial Attached<br />

SCSI (SAS), October 30, 2003. http://www.ansi.org/<br />

• Audio Codec ’97 Revision 2.3 Revision 1.0, April 2002 Copyright © 2002 Intel Corporation. All<br />

rights reserved. download.intel.com/support/motherboards/desktop/sb/ac97_r23.pdf<br />

• Display Data Channel Command Interface (DDC/CI) Standard (formerly DDC2Bi) Version 1,<br />

August 14, 1998 Copyright © 1998 Video Electronics Standards Association. All rights reserved.<br />

http://www.vesa.org/summary/sumddcci.htm<br />

• ExpressCard® Standard 2.0, June 2009 Copyright © 2009 PCMCIA. All rights reserved.<br />

http://www.expresscard.org/<br />

• HDA - High Definition Audio <strong>Specification</strong>, Revision 1.0, April 15, 2004<br />

Copyright © 2002 Intel Corporation. All rights reserved.<br />

http://www.intel.com/standards/hdaudio/<br />

• IEEE 802.3-2005, IEEE Standard for Information technology, Telecommunications and information<br />

exchange between systems-Local and metropolitan area networks-Specific requirements – Part 3:<br />

Carrier Sense Multiple Access with Collision Detection (CSMA/CD) Access Method and Physical<br />

Layer <strong>Specification</strong>s.” http://www.ieee.org<br />

• IEEE 802.3ae (Amendment to IEEE 802.3-2005), Part 3: Carrier Sense Multiple Access with<br />

Collision Detection (CSMA/CD) Access Method and Physical Layer <strong>Specification</strong>s, Amendment:<br />

Media Access Control (MAC) Parameters, Physical Layers, and Management Parameters for 10<br />

Gb/s Operation. http://www.ieee.org<br />

• Intel Low Pin Count (LPC) Interface <strong>Specification</strong> Revision 1.1, August 2002 Copyright © 2002<br />

Intel Corporation. All rights reserved. http://developer.intel.com/design/chipsets/industry/lpc.htm<br />

• PCI Express Base <strong>Specification</strong> Revision 2.0, December 20, 2006, Copyright © 2002-2006 PCI<br />

Special Interest Group. All rights reserved. http://www.pcisig.com/<br />

• PCI Express Card Electromechanical <strong>Specification</strong> Revision 2.0, April 11, 2007, Copyright © 2002-<br />

2007 PCI Special Interest Group. All rights reserved. http://www.pcisig.com/<br />

• PCI Local Bus <strong>Specification</strong> Revision 3.0, February 3, 2004 Copyright © 1992, 1993, 1995, 1998,<br />

and 2004 PCI Special Interest Group. All rights reserved. http://www.pcisig.com/<br />

• PICMG ® Policies and Procedures for <strong>Specification</strong> Development, Revision 2.0, September 14,<br />

2004, PCI Industrial Computer Manufacturers Group (PICMG ® ), 401 Edgewater Place, Suite 500,<br />

Wakefield, MA 01880 USA, Tel: 781.224.1100, Fax: 781.224.1239. http://www.<strong>picmg</strong>.org/<br />

• PICMG ® EAPI - <strong>Embedded</strong> Application Software Interface <strong>Specification</strong>, Revision 1.0, 2009, PCI<br />

Industrial Computer Manufacturers Group (PICMG ® ), 401 Edgewater Place, Suite 500, Wakefield,<br />

MA 01880 USA, Tel: 781.224.1100, Fax: 781.224.1239. http://www.<strong>picmg</strong>.org/<br />

• SDIO, Secure Digital Input/Output<br />

SD <strong>Specification</strong>s Part E1 SDIO <strong>Specification</strong> Version 2.00, February 8, 2007<br />

Copyright 2007 SD Card Association<br />

http://www.sdcard.org<br />

• DMTF ® SMBIOS - System Management BIOS Reference <strong>Specification</strong> Version 2.6.1<br />

http://www.dmtf.org/.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 13 of 84


• DMTF ® DMI - Desktop Management Interface <strong>Specification</strong>, Version 2.0.1s http://www.dmtf.org/.<br />

• Serial ATA: High Speed Serialized AT Attachment Revision 1.0a January 7, 2003 Copyright ©<br />

2000-2003, APT Technologies, Inc., Dell Computer Corporation, Intel Corporation, Maxtor<br />

Corporation, Seagate Technology LLC. All rights reserved. http://www.sata-io.org/<br />

• Smart Battery Data <strong>Specification</strong> Revision 1.1, December 11, 1998.<br />

www.sbs-forum.org<br />

• System Management Bus (SMBus) <strong>Specification</strong> Version 2.0, August 3, 2000 Copyright © 1994,<br />

1995, 1998, 2000 Duracell, Inc., Energizer Power Systems, Inc., Fujitsu, Ltd., Intel Corporation,<br />

Linear Technology Inc., Maxim Integrated Products, Mitsubishi Electric Semiconductor Company,<br />

PowerSmart, Inc., Toshiba Battery Co. Ltd., Unitrode Corporation, USAR Systems, Inc. All rights<br />

reserved. http://www.smbus.org/<br />

• USB 3.0 <strong>Specification</strong>, Revision 1.0, November 12, 2008, 2000<br />

Copyright © 2007-2008 Hewlett-Packard Company, Intel Corporation, , Microsoft Corporation,<br />

NEC Corporation, ST-NXP Wireless and Texas Instruments. All rights reserved.<br />

http://www.usb.org/<br />

• SPI, Serial Peripheral Interface Bus<br />

http://elm-chan.org/docs/spi_e.html<br />

• Trusted Platform Module (TPM), Trusted Computing Group <strong>Specification</strong> 1.2 Revision 103, July 9,<br />

2007, http://www.trustedcomputinggroup.org<br />

• DisplayPort Standard Version 1.1 http://www.vesa.org<br />

• High-Definition Multimedia Interface specification version 1.3 http://www.hdmi.org<br />

1.8 Statement of Compliance<br />

Statements of compliance with this specification take the form specified in the PICMG® Policies and<br />

Procedures for <strong>Specification</strong> Development:<br />

“This product provides software support for PICMG® EeeP Revision 1.0.”<br />

Products making this simple claim of compliance must provide, at a minimum, all features defined in<br />

this specification as being mandatory by the use of the keyword “shall” in the body of the<br />

specification. Such products may also provide recommended features associated with the keyword<br />

“should” and permitted features associated with the keyword “may” as well.<br />

Because the specification provides for a number of recommended and permitted features beyond the<br />

mandatory minimum set and a wide range of performance Dynamic, more complete descriptions of<br />

product compliance are encouraged<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 14 of 84


2 General<br />

2.1 Overview<br />

This specification was created to address 8 core issues.<br />

1. Allow for Device Revision Identifiacation.<br />

2. Allow standardized cross vendor cross platform I2C <strong>EEPROM</strong> Data storage and retrival. Specifically<br />

Product/Marketing/Branding information.<br />

3. Allow for more flexible generic approach to data storage, sharing.<br />

4. Facilitate Vendor specific data storage in a multi vendor enviroment.<br />

5. Fascilitae the consolidataion of data curently stored in multiple discrete devices, into 1 device. E.G.<br />

PICMG <strong>EEPROM</strong>, OEM specific <strong>EEPROM</strong>, Display Device <strong>EEPROM</strong>.<br />

6. Reduce the TCO for the PICMG <strong>EEPROM</strong>, for carrier and module vendors and oems.<br />

1. Allow <strong>EEPROM</strong> consolidation.<br />

2. Allow for maximum code reuse.<br />

7. Reduce Manufacturing Cost, through allowing stanardized approach to system provisioning.<br />

8. Improve <strong>EEPROM</strong> access characteristics and increase <strong>EEPROM</strong> device selection flexability.<br />

2.2 Storage Conventions<br />

2.2.1 Multi-Byte Variables<br />

All Multi-Byte variables are stored in Big-endian(see page 10) unless otherwise stated. To facilitate<br />

easier architecture independent data access, all Multi byte variables are defined as byte arrays.<br />

2.2.2 Structure Packing<br />

All structures are packed on byte boundaries. This means that alignment bytes should not be inserted<br />

by the compiler. See ' 9.1 EeeP.h' on page 66 for an example usage of the #pack pragma to achieve<br />

this.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 15 of 84


3 Detection<br />

3.1 Detecting EeeP <strong>EEPROM</strong><br />

3.1.1 High Level Check<br />

if(!memcmp(<br />

&EeePEEP[0x01] ,<br />

"3P" ,<br />

0x02<br />

)<br />

)<br />

{<br />

// Found EeeP <strong>EEPROM</strong><br />

}<br />

C_SAMPLE 1: Detect COM0 R2.0 FRUPROM<br />

3.1.2 Sample I2C Transfer<br />

Device Address : 0xAE(0x57)<br />

Index Type : Extended<br />

StartAckAckAck<br />

StartAckAckAckAckNak Stop<br />

XX is used to designate don't care, byte.<br />

3.2 Detecting COM0 R1.0 <strong>EEPROM</strong><br />

3.2.1 High Level Check<br />

if(!memcmp(<br />

&COM0EEP[0xE0] ,<br />

"COMExpressConfig" ,<br />

0x10<br />

)<br />

)<br />

{<br />

// Found COM0R10 <strong>EEPROM</strong><br />

}<br />

C_SAMPLE 2: Detect COM0 R1.0 FRUPROM<br />

3.2.2 Sample I2C Transfer<br />

Device Address : 0xAE(0x57)<br />

Index Type : Standard<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 16 of 84


StartAckAck<br />

StartAckAckAckAckAckAckAck<br />

AckAckAckAckAckAck<br />

AckAckAckNak Stop<br />

3.3 Identifying Device Type Standard/Extended Index<br />

3.3.1 Sample I2C Transfer<br />

Device Address : 0xAE(0x57)<br />

Index Type : Unknown<br />

StartAckAckAck<br />

StartAckAckAckAckAckNak Stop<br />

3.3.1.1 Standard Indexed Device<br />

With a Standard Indexed device the MSB of the Extended Index is used as the Complete Index and<br />

the LSB is written to the Don't care Byte of the <strong>EEPROM</strong>, causing an increment to the internal<br />

counter. Starting the Read operation at Device Offset 0x01.The Device Descriptor at offset 5 can then<br />

be used to interpret the Device correct method of device access.<br />

3.3.1.2 Extended Indexed Device<br />

With an Extended Indexed device the Index is programed as normal. Starting the Read operation at<br />

Device Offset 0x0001.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 17 of 84


4 <strong>EEPROM</strong> Header Components.<br />

4.1 Concepts<br />

There are multiple goals for an <strong>EEPROM</strong> header. One of the primary goals is to provide a mechanism<br />

for content Identification. This goal is achieved through inclusion of a header Id. A Secondary Goal is<br />

to provide information at fixed offsets. The purpose of providing information at fixed offsets is to allow<br />

for easier access. One of the costs of storing dynamic information in an <strong>EEPROM</strong> is that at an early<br />

system state it may not be convenient or possible to parse complex structures or hierarchies in order<br />

to extract information. To this extend it is advisable to segregate the information we wish to store in<br />

<strong>EEPROM</strong>s into 2 categories. Low Cost Access Information and Normal Cost Access Information. The<br />

Low Cost Access Information may be stored in the <strong>EEPROM</strong> Header. To Prevent Contention Header<br />

space is allocated in the following order.<br />

1. EeeP Specific Header components.<br />

2. Platform Specific Header Additions.<br />

3. Vendor Specific Header Additions.<br />

4.2 Common EeeP <strong>EEPROM</strong> Header<br />

typedef struct EeePCmn_s{<br />

uint8_t DontCareByte;/* 0x00 Don't Care Byte<br />

* The purpose of this<br />

* Byte is to reduce the Damage<br />

* Extended Index read access is<br />

* used on a Standard Index Device<br />

*<br />

*/<br />

uint8_t EepId[2] ; /* 0x01 3P */<br />

# define EEEP_<strong>EEPROM</strong>_MARKER "3P"<br />

uint8_t SpecRev ; /* 0x03 EeeP <strong>Specification</strong> Revision<br />

*/<br />

uint8_t<br />

uint8_t<br />

}EeePCmn_t;<br />

EEP_HDR_C_STRUCT 1: Common <strong>EEPROM</strong> Header<br />

4.2.1 Description<br />

Standardized Header Entry point to allow for standardized Cross platform, Cross Vendor identification<br />

and access.<br />

4.2.2 Header Elements<br />

BlkOffset ; /* 0x04 Absolute Offset to<br />

* First Dynamic Block<br />

* in words(2 bytes)<br />

*/<br />

DeviceDesc ; /* 0x05 Device Descriptor<br />

*/<br />

4.2.2.1 Dont Care Byte(DontCareByte)<br />

The purpose of this Byte is to reduce the the damage, if the incorrect access method is used on a<br />

standard <strong>EEPROM</strong>. I.E. extended Index read access is used to read from a Standard Index<br />

Device. In this scenario the second Command/Index byte is interpreted as a Data byte and is<br />

written to the MSB Index.<br />

4.2.2.2 <strong>EEPROM</strong> ID(EepId)<br />

<strong>EEPROM</strong> Identifier. Defined as ASCII “3P”. To allow for <strong>EEPROM</strong> Identification.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 18 of 84


4.2.2.3 EeeP <strong>Specification</strong> Revision(SpecRev)<br />

See 8.2 <strong>EEPROM</strong> <strong>Specification</strong> Revision. on page 62.<br />

4.2.2.4 Block Offset(BlkOffset)<br />

Absolute offset from the start of the <strong>EEPROM</strong> to the first Dynamic Block. If 0 Dynamic Blocks Aren't<br />

supported. It is measured in units of 2 bytes.<br />

4.2.2.5 Device Descriptor Byte(DeviceDesc)<br />

Table 4-1: Device Descriptor Byte<br />

Bits Description Values Meaning<br />

5 - 7 Page Write Length/Alignment<br />

The Maximum number of internal low order<br />

address bits auto incremented on page writes<br />

0 1 Byte<br />

1 8 Bytes<br />

2 16 Bytes<br />

3 32 Bytes<br />

4 64 Bytes<br />

5 128 Bytes<br />

6 256 Bytes<br />

7 512 Bytes<br />

4 Standard/Extended Index 0 Standard Index/Command<br />

0 - 3 Device Size<br />

Size 2^(8+n) Bytes<br />

(256


4.3.2 Block Elements<br />

4.3.2.1 Vendor ID(VendId)<br />

Compressed ASCII PNPID(see chapter 8.1 page 62).<br />

4.3.2.2 Device ID(DevId)<br />

Vendor Assigned 16Bit value to uniquely Identify all products. Stored In 'Big-endian' (see page 10).<br />

4.3.2.3 Device Flavor<br />

Vendor Assigned 8Bit value to distinguish product flavors I.E. to distinguish stuffing options.<br />

4.3.2.4 Device Unique Revision ID<br />

Vendor Assigned Device Revision ID. No attempt is made here to give significance to this value. No<br />

assumptions should be made as to the meaning of this value, not even the assumption that higher<br />

digits mean newer product revisions. This is to allow for the complex nature of product revisions in the<br />

embedded market. See Table 4-2: Example Device Unique Revision IDs for examples.<br />

Table 4-2: Example Device Unique Revision IDs<br />

RID<br />

Board Revision<br />

0 0.5<br />

1 1<br />

2 1.1<br />

3 1.0.1<br />

4 1.0.1.2<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 20 of 84


5 <strong>EEPROM</strong> Headers<br />

5.1 COM0 R2.0 Carrier Board <strong>EEPROM</strong> Header<br />

typedef struct COM0R20_CB_s{<br />

EeePCmn_t EeePHdr ; /* 0x00 EeeP Common Header */<br />

uint8_t GenId[4] ; /* 0x06 "Com0" */<br />

UDIdEep_t DevId ; /* 0x0C Unique Device Id */<br />

uint8_t CBType ; /* 0x10 Carrier Board Type */<br />

uint8_t SpecRev ; /* 0x11 COM0 <strong>Specification</strong> Revision */<br />

uint8_t UsbDesc ; /* 0x12 USB Descriptor Byte */<br />

uint8_t SasDesc; /* 0x13 LAN Descriptor Byte */<br />

uint8_t LanDesc; /* 0x14 LAN Descriptor Byte */<br />

uint8_t MiscIo1; /* 0x15 Miscellaneous I/O Descriptor Byte 1 */<br />

uint8_t MiscIo2; /* 0x16 Miscellaneous I/O Descriptor Byte 2 */<br />

uint8_t DDIDesc[2];/* 0x17 Digital Display Interface Descriptor<br />

* Bytes<br />

*/<br />

uint8_t PCIeGen[8] ;/* 0x19 PCI Express Lane Generation */<br />

uint8_t LaneMap[16];/* 0x21 PCI Express Lane Information */<br />

}COM0R20_CB_t;<br />

5.1.1 Description<br />

Header For COM_0 Carrier Board <strong>EEPROM</strong>.<br />

5.1.2 Header Elements<br />

EEP_HDR_C_STRUCT 3: COM0 R2.0 Carrier Board <strong>EEPROM</strong> Header<br />

5.1.2.1 EeePHdr<br />

Common EeeP <strong>EEPROM</strong> Header<br />

See ' 4.2 Common EeeP <strong>EEPROM</strong> Header' on page 18.<br />

5.1.2.2 GenId<br />

COM0 Header Id to allow for identification of COM0 Carrier Board Specific Header Content.<br />

Case is used to distinguish Carrier Board headers from Module Headers.<br />

5.1.2.3 DevId<br />

Unique Device Identifier.<br />

To allow Identification of COM0 Carrier Board.<br />

See ' 4.3 Universal Device Identifier' on page 19.<br />

5.1.2.4 Carrier Board Type (CBType).<br />

COM_0 Carrier Board Type.<br />

5.1.2.5 COM0 <strong>Specification</strong> Revision(SpecRev)<br />

COM_0 <strong>Specification</strong> Revision.<br />

See ' 8.2 <strong>EEPROM</strong> <strong>Specification</strong> Revision.' on page 62.<br />

5.1.2.6 USB Descriptor Byte(UsbDesc)<br />

The configuration <strong>EEPROM</strong> shall use one byte to indicate how many USB ports the Carrier Board<br />

uses.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 21 of 84


Table 5-1: USB Descriptor Byte<br />

Bits Description Values Meaning<br />

7 Reserved 0<br />

4 - 6 USB 3.0 Port Count. 0 No Ports Implemented<br />

1 1 Port Implemented<br />

...<br />

4 4 Ports Implemented<br />

0 - 3 USB Port Count 0 No Ports Implemented<br />

1 1 Port Implemented<br />

...<br />

8 8 Ports Implemented<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 22 of 84


5.1.2.7 SATA / SAS Device Descriptor Byte(SasDesc)<br />

The configuration <strong>EEPROM</strong> shall use a byte to indicate how many SATA and SAS devices the Carrier<br />

Board uses, per the following table.<br />

Table 5-2: SATA / SAS Device Descriptor Byte<br />

Channel<br />

Number<br />

SATA / SAS<br />

Channel 4<br />

Bit Description Values Meaning<br />

7 Port Type 0 SATA Device<br />

1 SAS Device<br />

6 Port Implemented 0 Not Implemented<br />

1 Implemented<br />

SATA / SAS<br />

Channel 3<br />

5 Port Type 0 SATA Device<br />

1 SAS Device<br />

4 Port Implemented 0 Not Implemented<br />

1 Implemented<br />

SATA / SAS<br />

Channel 2<br />

3 Port Type 0 SATA Device<br />

1 SAS Device<br />

2 Port Implemented 0 Not Implemented<br />

1 Implemented<br />

SATA / SAS<br />

Channel 1<br />

1 Port Type 0 SATA Device<br />

1 SAS Device<br />

0 Port Implemented 0 Not Implemented<br />

1 Implemented<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 23 of 84


5.1.2.8 LAN Descriptor Byte(LanDesc)<br />

The configuration <strong>EEPROM</strong> shall use one byte to indicate the LAN options used by the Carrier Board.<br />

'Table 5-3: LAN Descriptor Byte' on page 24 shows the LAN Descriptor Byte definition.<br />

Table 5-3: LAN Descriptor Byte<br />

Description Bits Values Meaning<br />

Reserved 3- 7<br />

GBE2. 2 0 Not Implemented<br />

1 Implemented<br />

GBE1. 1 0 Not Implemented<br />

1 Implemented<br />

GBE0. 0 0 Not Implemented<br />

1 Implemented<br />

5.1.2.9 Miscellaneous I/O Descriptor Byte(MiscIo1)<br />

The configuration <strong>EEPROM</strong> shall use one byte to indicate usage by the Carrier Board of the following<br />

miscellaneous I/O signals.<br />

• AC ’97 / HDA Digital Interface<br />

• Watchdog Timer<br />

• External BIOS ROM<br />

• Thermal Protection<br />

• Battery Low<br />

• Suspend<br />

• Wake<br />

'Table 5-4: Miscellaneous I/O Descriptor Byte' below shows the Miscellaneous I/O Descriptor Byte<br />

definition.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 24 of 84


Table 5-4: Miscellaneous I/O Descriptor Byte<br />

Feature/Function Bits Values Description<br />

AC ’97 / HDA<br />

(AC/HD_**** pins)<br />

Watchdog Timer<br />

(WDT)<br />

External BIOS ROM<br />

(BIOS_DISABLE#)<br />

Thermal Protection<br />

(THRM#, THERMTRIP#)<br />

Battery Low<br />

(BATLOW#)<br />

Suspend<br />

(SUS_**** pins)<br />

Wake 1<br />

(WAKE1#)<br />

Wake 0<br />

(WAKE0#)<br />

7 0 Not Implemented<br />

1 Implemented<br />

6 0 Not Implemented<br />

1 Implemented<br />

5 0 Not Implemented<br />

1 Implemented<br />

4 0 Not Implemented<br />

1 Implemented<br />

3 0 Not Implemented<br />

1 Implemented<br />

2 0 Not Implemented<br />

1 Implemented<br />

1 0 Not Implemented<br />

1 Implemented<br />

0 0 Not Implemented<br />

1 Implemented<br />

5.1.2.10 Miscellaneous I/O Descriptor Byte 2(MiscIo2)<br />

The configuration <strong>EEPROM</strong> shall use one byte to indicate usage by the Carrier Board of the following<br />

miscellaneous I/O signals.<br />

• SSC<br />

• SD Card I/O<br />

• Lid Switch<br />

• Sleep Button<br />

• Fan<br />

• Serial Ports 0 and 1.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 25 of 84


Table 5-5: Miscellaneous I/O Descriptor Byte2<br />

Feature/Function Bits Values Description<br />

Reserved 7 0 Reserved.<br />

Serial Port 1 6 0 Not Implemented<br />

1 Implemented<br />

Serial Port 0 5 0 Not Implemented<br />

1 Implemented<br />

FAN0 4 0 Not Implemented<br />

1 Implemented<br />

Sleep Button 3 0 Not Implemented<br />

1 Implemented<br />

Lid Switch 2 0 Not Implemented<br />

1 Implemented<br />

SDIO on GPIO 1 0 Not Implemented<br />

1 Implemented<br />

Spread Spectrum Clocking 0 0 Not Implemented<br />

1 Implemented<br />

5.1.2.11 Digital Display Interface Descriptor Bytes(DDIDesc)<br />

The configuration <strong>EEPROM</strong> shall use two bytes to indicate the digital display interface connections<br />

supported. This byte is only used for Module Type 6 & 1. 'Table 5-6: Digital Display Interface<br />

Descriptor Byte1' below shows the Display Descriptor Byte definition.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 26 of 84


Table 5-6: Digital Display Interface Descriptor Byte1<br />

DDI Port Byte Bits Values Description<br />

Reserved 1 6 - 7 0 Reserved<br />

DDI3 4 - 5 0 Not Implemented<br />

1 <strong>Embedded</strong> Display Port Implemented<br />

2 Display Port Implemented<br />

3 HDMI/DVI Implemented<br />

Reserved 2 - 3 0 Reserved<br />

DDI2 0 - 1 0 Not Implemented<br />

1 <strong>Embedded</strong> Display Port Implemented<br />

2 Display Port Implemented<br />

3 HDMI/DVI Implemented<br />

Reserved 0 7 0 Reserved<br />

DDI1 4 - 6 0 Not Implemented<br />

1 <strong>Embedded</strong> Display Port Implemented<br />

2 Display Port Implemented<br />

3 HDMI/DVI Implemented<br />

4 SDVO Implemented<br />

5 - 7 Reserved<br />

Reserved 3 0 Reserved<br />

DDI0 0 - 2 0 Not Implemented<br />

1 <strong>Embedded</strong> Display Port Implemented<br />

2 Display Port Implemented<br />

3 HDMI/DVI Implemented<br />

4 SDVO Implemented<br />

5 - 7 Reserved<br />

Notes: further details about the type of video signals are beyond the scope and purpose of the<br />

configuration<br />

5.1.2.12 PCI Express Lane Generation Descriptor Data Structure(PCIeGen)<br />

Lane numbers 0 through 31 refer to the 32 possible COM Express® lanes. Each COM Express®<br />

connector PCI Express lane is allocated 2 bits to describe which PCI Express Generation is supported<br />

on the Carrier board.<br />

Table 5-7: PCI Express Lane Generation Descriptor<br />

Byte Bits Description Values Meaning<br />

7 6 - 7 Lane 31 0 Generation 1<br />

1 Generation 2<br />

2 Generation 3<br />

3 Reserved<br />

...<br />

0 0 - 1 Lane 0 0 Generation 1<br />

1 Generation 2<br />

2 Generation 3<br />

3 Reserved<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 27 of 84


5.1.2.13 PCI Express Lane Descriptor Data Structure(LaneMap)<br />

Lane numbers 0 through 31 refer to the 32 possible COM Express® lanes. Each COM Express®<br />

connector PCI Express lane is allocated four bits to describe how the lanes are grouped on the Carrier<br />

Board to form PCI Express links.<br />

The 32 PCIe lanes are described in an array of 16 bytes, each lane using 4 bits. A lane is described by<br />

three bits indicating the width of the link it is part of, and a single bit defining the PCIe Generation of<br />

the link. This definition implies that the start lane of a link must be aligned at a boundary which is an<br />

integral multiple of the width of the link it is part of, e.g. a x4link can start only at lane no.<br />

0,4,8,16,20,24, and 28.<br />

A link (along with its width and starting lane) can be decoded by inspecting the single Mapping Nibble<br />

of a lane which is part of the link. Figure "C_SAMPLE 3: Decode PCIe Link Width & Start Lane" on<br />

page 29 is showing this for lane 15.".<br />

Table 5-8: PCI Express Lane Descriptor Nibble Descriptor<br />

Bits Description Values Meaning<br />

0 - 2 Link Width/Alignment 0 Not Implemented<br />

1 x1 Link Width<br />

2 x2 Link Width<br />

3 x4 Link Width<br />

4 x8 Link Width<br />

5 x16 Link Width<br />

6 x32 Link Width<br />

7 Reserved<br />

3 Reserved 0 Reserved.<br />

Table 5-9: PCI Express Valid Starting Lane Configurations<br />

Link Width<br />

Valid Starting Lane<br />

x1 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,...<br />

x2 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30<br />

x4 0,4,8,12,16,20,24,28<br />

x8 0,8,16,24<br />

x16 0.16<br />

x32 0<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 28 of 84


unsigned LaneIndex=15 // Example for Lane 15<br />

unsigned ArrayIndex=LaneIndex/2 // 7<br />

unsigned ByteShift =(LaneIndex&1)ByteShift)&0x7<br />

if(EncLinkWidth){<br />

EncLinkWidth--;<br />

// Lane Used<br />

unsigned LinkWidth=1EncLinkWidth)


5.3 Expansion <strong>EEPROM</strong> Header<br />

typedef struct Exp_EEP_s{<br />

EeePCmn_t EeePHdr ; /* 0x00 EeeP Common Header */<br />

uint8_t GenId[4] ; /* 0x06 "EXP1" */<br />

#define EEEP_EXP_HEADER_ID "EXP1"<br />

UDIdEep_t DevId ; /* 0x06 Unique Device Id */<br />

}Exp_EEP_t;<br />

EEP_HDR_C_STRUCT 5: Module <strong>EEPROM</strong> Header<br />

5.3.1 Description<br />

Skeleton Header For Expansion <strong>EEPROM</strong>s.<br />

5.3.2 Header Elements<br />

5.3.2.1 EeePHdr<br />

See ' 4.2 Common EeeP <strong>EEPROM</strong> Header' on page 18.<br />

5.3.2.2 GenId<br />

EXP1 Header Id to allow for identification of EeeP Expansion Specific Header Content.<br />

5.3.2.3 DevId<br />

See ' 4.3 Universal Device Identifier' on page 19.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 30 of 84


6 Dynamic Descriptor Blocks.<br />

6.1 Common Dynamic Block Header<br />

typedef struct DBlockIdHdr_s{<br />

uint8_t DBlockId ; /* 0x00 Dynamic Block Id */<br />

uint8_t DBlockLength[2]; /* 0x01 Block Length/<br />

* Offset to next Block<br />

* in words (2 Bytes)<br />

*/<br />

}DBlockIdHdr_t;<br />

6.1.1 Description<br />

This is a method to allow dynamic reuse of a finite space. The theory is that different devices will wish<br />

to describe different features and that not all devices will wish to describe all features. Additional this<br />

allows for the fact that different devices may require different space to describe the same features.<br />

The mechanism is simple, it is in effect a linked list of descriptors. Each descriptor has an ID and and<br />

its own size., Blocks are defined as being contiguous.<br />

Once a starting point is defined it is possible to parse the link list to discover those block which if<br />

present configure or define the current operation. One of the most useful application of this<br />

mechanism is to allow for the optional description of complex topologies for express card slots.<br />

The goal of these link list systems is not to require dynamic generation but to allow dynamic parsing. It<br />

is valid to have vendor or platform specific fixed offset, wrapped with link list structures.<br />

At run time the <strong>EEPROM</strong> layout shall be viewed as Static. All changes to the <strong>EEPROM</strong> structure<br />

shall be immediately followed by a system restart. This is to allow for caching of <strong>EEPROM</strong> Offsets to<br />

reduce <strong>EEPROM</strong> access Overhead. <strong>EEPROM</strong> Layout shall only be modified in the context of either<br />

system maintenance or system manufacturing.<br />

6.1.2 Block Elements<br />

CAP_C_STRUCT 1: Common Dynamic Block Header<br />

6.1.2.1 DBlockId<br />

Designates the Dynamic Block Type.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 31 of 84


Table 6-1: Dynamic Block Ids<br />

Id<br />

0x00<br />

0x01-0xBF<br />

0xC0 - 0xCF<br />

0xD0<br />

0xD1<br />

0xD2-0xDF<br />

0xE0<br />

0xE1<br />

0xE2-0xEF<br />

0xF0<br />

0xF1<br />

0xF2<br />

0xF3-0xFE<br />

0xFF<br />

Description<br />

unused<br />

Reserved<br />

Standard/Platform Specific Block<br />

SMBIOS Information Block.<br />

LFP Display Data (Virtual DDI <strong>EEPROM</strong>)<br />

Reserved<br />

Express Card Topology<br />

Serial Port Descriptor<br />

Reserved<br />

Vendor Specific<br />

Expansion <strong>EEPROM</strong> Descriptor<br />

CRC<br />

Reserved<br />

Unknown should be ignored<br />

6.1.2.2 DBlockLength<br />

Specifies the size of the current block in 2 byte increments. Stored in 'Big-endian' (see page 10).<br />

Table 6-2: Dynamic Block Length Values<br />

Offset Value Description<br />

0x0000<br />

End of list<br />

0x0001<br />

Reserved for future use<br />

0x0002<br />

Reserved for future use<br />

0x0003-0xFFFE Current Block Size in 2 byte increments.<br />

0xFFFF<br />

End of list<br />

6.1.3 Parse Order / Block Priority<br />

It is to be expected that there may be multiples instances of a block in a system. In order to prvide<br />

consistent behaviour for this situation the parse order is described here. The First Blocks encountered<br />

should have the higest Priority So taking a ComExpress System as an example.We firstly parse the<br />

Carrier Board <strong>EEPROM</strong>, and then the on Module <strong>EEPROM</strong>. Any Blocks on Expansion <strong>EEPROM</strong>S<br />

should parsed directly upon finding the Expansion <strong>EEPROM</strong> Descriptor.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 32 of 84


Carrier Board<br />

<strong>EEPROM</strong><br />

Block Type 1<br />

Block Type 2<br />

Block Type 3<br />

Expansion <strong>EEPROM</strong> 1 descriptor<br />

Block Type 4<br />

Block<br />

Instance<br />

1<br />

1<br />

1<br />

1<br />

2<br />

Block<br />

Cnt<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

Expansion <strong>EEPROM</strong> 1<br />

Block Type 2<br />

Block Type 4<br />

Block<br />

Instance<br />

2<br />

1<br />

Module<br />

<strong>EEPROM</strong><br />

Block Type 1<br />

Block Type 2<br />

Block Type 3<br />

Block Type 5<br />

Block<br />

Instance<br />

Drawing 6-1: Example ComExpress EEEP System<br />

2<br />

3<br />

2<br />

1<br />

8<br />

9<br />

10<br />

11<br />

In 'Drawing 6-1: Example ComExpress EEEP System' above the numbers in the right colum represent<br />

the Block Instance this can be interpreted as the block priority, where 1 has the highest priority. From<br />

this example it is hopefully clear that blocks on the carrier have a higher priority than blocks on the<br />

Module. It also shows how Expansion <strong>EEPROM</strong>s block Priorities are dependant on the location of<br />

their Expansion <strong>EEPROM</strong> descriptor's priority If there are multiple Epansion <strong>EEPROM</strong> descriptor for<br />

one expansion <strong>EEPROM</strong>, the Highest priority Descriptor will be used. i.e. the first one encountered is<br />

used and duplicates are ignored. The Above 3 devices can be represented as 1 virtual device see<br />

'Drawing 6-2: Virtual Device Representing Example System.' below.<br />

Master Block List<br />

Block Type 1<br />

Block Type 2<br />

Block Type 3<br />

Block Type 2<br />

Block Type 4<br />

Block Type 4<br />

Block Type 1<br />

Block Type 2<br />

Block Type 3<br />

Block Type 5<br />

Block<br />

Cnt<br />

Block<br />

Instance<br />

Drawing 6-2: Virtual Device Representing Example System.<br />

1<br />

1<br />

1<br />

2<br />

1<br />

2<br />

2<br />

3<br />

2<br />

1<br />

Block<br />

Source<br />

CB EeeP<br />

CB EeeP<br />

CB EeeP<br />

Expansion <strong>EEPROM</strong> 1 descriptor 4 1 CB EeeP<br />

1<br />

2<br />

3<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

ExpEEP1<br />

ExpEEP1<br />

CB EeeP<br />

M EeeP<br />

M EeeP<br />

M EeeP<br />

M EeeP<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 33 of 84


6.2 Express Card Topology<br />

typedef struct ExpCardBlock_s{<br />

DBlockIdHdr_t DBHdr ; /* 0x00 Dynamic Block Header */<br />

uint8_t ExpressCardNumber ; /* 0x03 0 - 1 */<br />

uint8_t ComExpressPorts ; /* 0x04<br />

* +=======+==================+<br />

* | Bits | Descriptions |<br />

* +=======+==================+<br />

* | 0 - 4 | PCI Express Port |<br />

* | | Mapping. |<br />

* | | Port Starting |<br />

* | | Lane. |<br />

* | | 0 - 31 |<br />

* +-------+------------------+<br />

* | 5 - 7 | USB Port Mapping |<br />

* | | 0 - 7 |<br />

* +=======+==================+<br />

*/<br />

uint8_t SwitchDevFuncAddr[1] ; /* 0x05 An Array of Port<br />

* Device/Function<br />

* Addresses Terminated<br />

* with 0xFF<br />

* +=======+==================+<br />

* | Bits | Descriptions |<br />

* +=======+==================+<br />

* | 0 - 2 | Function number |<br />

* +-------+------------------+<br />

* | 5 - 7 | Device number. |<br />

* +=======+==================+<br />

*/<br />

}ExpCardBlock_t;<br />

CAP_C_STRUCT 2: Express Card Extended Topology<br />

6.2.1 Description<br />

The configuration <strong>EEPROM</strong> may use two blocks to indicate if the Carrier Board supports up to 2<br />

Express Card slots. If no blocks are present the carrier is assumed to have no Express Card Slots.<br />

6.2.2 Block Elements<br />

6.2.2.1 DBHdr<br />

See ' 6.1 Common Dynamic Block Header' on page 31.<br />

6.2.2.2 Express Card Number<br />

Number designating Express Card Slot Number.<br />

6.2.2.3 Com Express Port<br />

Table 6-3: Com Express Ports<br />

Bits Description Value Meaning<br />

5 - 7 Express Card USB Port Mapping 0 USB Port 0<br />

0 - 4 Express Card PCI Express Port Mapping. Port Starting<br />

Lane.<br />

...<br />

7 USB Port 7<br />

0 PCI Express Lane 0<br />

...<br />

31 PCI Express Lane 31<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 34 of 84


6.2.2.4 Express Port Device Function Addresses.<br />

Table 6-4: Device Function Addresses<br />

Bits Description Value Meaning<br />

3 - 7 PCI Express Packet Switch Port Device Number 0 Device 0<br />

...<br />

31 Device 31<br />

0 - 2 PCI Express Packet Switch Port Function Number 0 Function 0<br />

...<br />

7 Function 7<br />

A 0xFF terminated array of Port numbers. Designating in order the topological mapping of the Express<br />

Card Slot. This is to allow for the description of complex Topologies where then Express card slot is<br />

not connected directly to the COMExpress Connector, but is located behind 1 or more PCI Express<br />

Packet Switches.<br />

6.2.3 Example Blocks<br />

Table 6-5: Express Card Block Example 1<br />

Offset Width Name Value Description<br />

0 1 Block Id 0xE0 Express Card Extended Topology<br />

1 2 Block Length 3 Relative Offset to Next Dynamic Block<br />

3 1 Express Card Number 0x01 Express Card Slot 2<br />

4 Com Express Port{0:4} 2 PCI Express Lane 2<br />

4 1 Com Express Port{5:7} 1 USB Port 1<br />

5 1 SwitchDevFuncAddr[0] 0xFF End of Port List<br />

Table 6-6: Express Card Block Example 2<br />

Offset Width Name Value Description<br />

0 1 Block Id 0xE0 Express Card Extended Topology<br />

1 2 Block Length 5 Dynamic Block Size (Words)<br />

3 1 Express Card Number 0x01 Express Card Slot 2<br />

4 Com Express Port{0:4} 16 PCI Express Lane 16 (PEG Port)<br />

4 1 Com Express Port{5:7} 1 USB Port 1<br />

5 SwitchDevFuncAddr[0]{0:2} 0 1st Port Function 0<br />

5 1 SwitchDevFuncAddr[0]{3:7} 1 1st Port Device 1<br />

6 SwitchDevFuncAddr[1]{0:2} 0 2nd Port Function 0<br />

6 1 SwitchDevFuncAddr[1]{3:7} 3 2nd Port Device 3<br />

7 SwitchDevFuncAddr[2]{0:2} 0 3rd Port Function 0<br />

7 1 SwitchDevFuncAddr[2]{3:7} 3 3rd Port Device 3<br />

8 1 SwitchDevFuncAddr[3] 0xFF End of Port List<br />

9 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

This is a Descriptor for Express Card 1<br />

1. It is Attached to a Switch which is attached to the PEG port, so the<br />

• starting Lane = 16.<br />

1. Look up the PEG port bus number, lets say its bus 1.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 35 of 84


2. Now look for a device at Bus=01,Device=01, Function=00. It is a Bridge so we look up the Bus<br />

number. Lets say its 2<br />

3. Now look for a device at Bus=02,Device=03, Function=00. It is a Bridge so we look up the Bus<br />

number. Lets say its 4<br />

4. Now look for a device at Bus=04,Device=03, Function=00. It is a Bridge so we look up the Bus<br />

number. Lets say its 5<br />

5. So the Next Port number == 0xFF so we know we now have our Express Card Port. Namely<br />

• Express Card Port Bridge is Bus=04, Device=03 Function=00.<br />

• Device Address is Bus 5.<br />

6.3 Serial Port Configuration Block<br />

typedef struct SerPortCfgBlock_s{<br />

DBlockIdHdr_t DBHdr ; /* 0x00 Dynamic Block Header */<br />

uint8_t SerIRQ ; /* 0x03 */<br />

uint8_t Ser0BaseAddr[2] ; /* 0x04 Serial Port 0 */<br />

uint8_t Ser1BaseAddr[2] ; /* 0x06 Serial Port 1 */<br />

}SerPortCfgBlock_t;<br />

CAP_C_STRUCT 3: Express Card Extended Topology<br />

6.3.1 Description<br />

The configuration <strong>EEPROM</strong> may use One block to indicate the prefered configuration of up to 2 Serial<br />

Ports. If no block is present the bios defaults are used.<br />

6.3.2 Block Elements<br />

6.3.2.1 DBHdr<br />

See ' 6.1 Common Dynamic Block Header' on page 31.<br />

6.3.2.2 Serial Port IRQ(SerIRQ)<br />

Table 6-7: Serial IRQ Description Ports<br />

Bits Description Value Meaning<br />

0 - 3 Serial Port 2 0 Auto<br />

1 No IRQ<br />

2 Reserved<br />

3 IRQ 3<br />

...<br />

15 IRQ 15<br />

4 - 7 Serial Port 1 0 Auto<br />

1 No IRQ<br />

2 Reserved<br />

3 IRQ 3<br />

...<br />

15 IRQ 15<br />

.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 36 of 84


6.3.2.3 Serial 0 Base Address (Ser0BaseAddr)<br />

Table 6-8: Serial Base Address<br />

Byte Bits Description<br />

0 0 - 7 Bits 8-15 of Base Address<br />

1 3 - 7 Bits 3-7 of Base Address<br />

1 0 - 2 Reserved Set to 0.<br />

6.3.2.4 Serial 1 Base Address (Ser1BaseAddr)<br />

Table 6-9: Serial Base Address<br />

Byte Bits Description<br />

0 0 - 7 Bits 8-15 of Base Address<br />

1 3 - 7 Bits 3-7 of Base Address<br />

1 0 - 2 Reserved Set to 0.<br />

6.3.3 Example Blocks<br />

Table 6-10: Serial Port Configuration Block<br />

Offset Width Name Value Description<br />

0 1 Block Id 0xE1 Serial Port Configuration Block<br />

1 2 Block Length 4 Relative Offset to Next Dynamic Block<br />

3 SerIRQ[0]{0:3} 0x03 Serial Port 0 IRQ 3<br />

3 1 SerIRQ[0]{4:7} 0x04 Serial Port 1 IRQ 4<br />

4 2 Ser0BaseAddr 0x3F8 Serial Port 0 Set to COM1<br />

6 2 Ser1BaseAddr 0x2F8 Serial Port 1 Set to COM2<br />

6.4 SMBIOS Common Block Header<br />

typedef struct SmbiosHdrDBlck_s{<br />

DBlockIdHdr_t CDBHdr ; /* 0x00 Dynamic Block Header */<br />

uint8_t Type ; /* 0x03 SMBIOS Structure Type */<br />

uint8_t Length ; /* 0x04 Specifies the length of<br />

* the formatted area of the<br />

* structure, starting at the<br />

* Type field. The length of the<br />

* structure’s string-set is not<br />

* included.<br />

*/<br />

SmbiosHandel_t Handle ; /* 0x05 Specifies the structure’s<br />

* handle, a unique 16-bit number<br />

* in the range 0 to 0FEFFh<br />

*/<br />

}SmbiosHdrDBlck_t;<br />

6.4.1 Description<br />

CAP_C_STRUCT 4: SMBIOS Dynamic Block Header<br />

This Header is to allow for easy encapsulation of SMBIOS Structures.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 37 of 84


6.4.2 Block Elements<br />

6.4.2.1 DBHdr<br />

See ' 6.1 Common Dynamic Block Header' on page 31.<br />

6.4.2.2 Type<br />

Specifies the type of structure. Types 0 through 127 (7Fh) are reserved for and defined by the smbios<br />

specification. Types 128 through 256 (80h to FFh) are available for system- and OEM-specific<br />

information.<br />

Table 6-11: EeeP Defined SMBIOS Handles<br />

0x00<br />

0x01<br />

0x02<br />

0x03<br />

0x04 - 0x7F<br />

0x80 - 0x9F<br />

0xA0 - 0xBF<br />

0xC0 - 0xDF<br />

0xE0 - 0xFF<br />

Id<br />

Name<br />

Reserved<br />

System Descriptor<br />

Module Descriptor<br />

Chassis Descriptor<br />

May be supported.<br />

Reserved For EeeP Use<br />

Reserved For Module Vendor Use<br />

Reserved For Carrier Board Vendor Use<br />

Reserved For OEM Use<br />

6.4.2.3 Length<br />

Specifies the length of the formatted area of the structure, starting at the Type field. The length of<br />

the structure’s string-set is not included.<br />

6.4.2.4 Handle<br />

Specifies the structure’s handle, a unique 16-bit number in the range 0 to 0FEFFh. To improve<br />

cross vendor compatibility, the following Ids are defined for the purposes of EeeP. The handle can<br />

be used with the Get SMBIOS Structure function to retrieve a specific structure; the handle<br />

numbers are not required to be contiguous.<br />

Table 6-12: EeeP Defined SMBIOS Handles<br />

Id<br />

0x0000 - 0x7FFF<br />

0xE000<br />

0xE001<br />

0xE002<br />

0xE003<br />

0xE004 - 0xE1FF<br />

0xE200 - 0xE3FF<br />

0xE400 - 0xE5FF<br />

0xE600 - 0xE7FF<br />

Name<br />

Reserved For System Bios Use.<br />

COM_0 Module “Module Type 2 Block”<br />

COM_0 Carrier Board “Module Type 2 Block”<br />

System Type1 Block<br />

Chassis Type3 Block<br />

Reserved for future EeeP use<br />

Reserved For Module Vendor Use<br />

Reserved For Carrier Board Vendor Use<br />

Reserved For OEM Use<br />

6.4.3 SMBIOS Block String Storage convention<br />

Text strings associated with a given SMBIOS structure are returned in the dmiStrucBuffer, appended<br />

directly after the formatted portion of the structure. This method of returning string information<br />

eliminates the need for application software to deal with pointers embedded in the SMBIOS structure.<br />

Each string is terminated with a null (0x00) BYTE and the set of strings is terminated with an additional<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 38 of 84


null (0x00) BYTE. When the formatted portion of a SMBIOS structure references a string, it does so by<br />

specifying a non-zero string number within the structure’s string-set. For example, if a string field<br />

contains 02h, it references the second string following the formatted portion of the SMBIOS structure.<br />

If a string field references no string, a null (0) is placed in that string field. If the formatted portion of the<br />

structure contains string-reference fields and all the string fields are set to 0 (no string references), the<br />

formatted section of the structure is followed by two null (0x00) BYTES.<br />

6.5 System Information Descriptor Block<br />

typedef struct EeePSystemInfo_s{<br />

SmbiosHdrDBlck_t SDBHdr; /* 0x00 Smbios Dynamic Block Header */<br />

uint8_t Manufacturer ; /* 0x06 Number of ASCIIZ String */<br />

uint8_t ProductName ; /* 0x07 Number of ASCIIZ String */<br />

uint8_t Version ; /* 0x08 Number of ASCIIZ String */<br />

uint8_t SerialNumber ; /* 0x09 Number of ASCIIZ String */<br />

uint8_t UUID[16] ; /* 0x0A Universal Unique ID number. */<br />

uint8_t Reserved0 ; /* 0x1A Reserved Set to Zero */<br />

uint8_t SKU_Number ; /* 0x1B Number of ASCIIZ String */<br />

uint8_t Family ; /* 0x1C Number of ASCIIZ String */<br />

}EeePSystemInfo_t;<br />

6.5.1 Description<br />

CAP_C_STRUCT 5: SMBIOS System Info<br />

This Block is based on the SMBIOS 2.6 standards System Description block. This Information<br />

should be used to populate the SMBIOS block type 1 if supported. It may additionally also be<br />

displayed in bios setup.<br />

6.5.2 Block Elements<br />

6.5.2.1 DBHdr<br />

See ' 6.1 Common Dynamic Block Header' on page 31.<br />

6.5.2.2 Manufacturer<br />

Number of ASCIIZ String.<br />

6.5.2.3 Product Name(ProductName)<br />

Number of ASCIIZ String.<br />

6.5.2.4 Version<br />

Number of ASCIIZ String.<br />

6.5.2.5 Serial Number(SerialNumber)<br />

Number of ASCIIZ String.<br />

6.5.2.6 UUID<br />

Universal Unique ID number. If the value is all FFh, the ID is not currently present in the system,<br />

but is settable. If the value is all 00h, the ID is not present in the system.<br />

6.5.2.7 Reserved0<br />

Reserved set to 0.<br />

6.5.2.8 SKU_Number<br />

Number of ASCIIZ String.<br />

This text string is used to identify a particular computer configuration for sale. It is sometimes also<br />

called a product ID or purchase order number. This number is frequently found in existing fields, but<br />

there is no standard format. Typically for a given system board from a given OEM, there are tens of<br />

unique processor, memory, hard drive, and optical drive configurations.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 39 of 84


6.5.2.9 Family<br />

Number of ASCIIZ String.<br />

This text string is used to identify the family a particular computer belongs to. A family refers to a set of<br />

computers that are similar but not identical from a hardware or software point of view. Typically, a<br />

family is composed of different computer models, which have different configurations and pricing<br />

points. Computers in the same family often have similar branding and cosmetic features.<br />

6.5.3 Example Block<br />

Table 6-13: System Information Descriptor Block Example<br />

Offset Width Name Value Description<br />

0 1 Block Id 0xD0 SMBIOS Dynamic Block ID.<br />

1 2 Block Length 35 Dynamic Block Size (Words)<br />

3 1 Type 1 SMBIOS Block Type(Chassis)<br />

4 1 Length 28 Header Length<br />

5 2 Handle 0xE002<br />

7 1 Manufacturer 1 String 1<br />

8 1 ProductName 2 String 2<br />

9 1 Version 3 String 3<br />

10 1 Serial Number 4 String 4<br />

11 16 UUID 16 Dup (0xFF) UUID can Be Set.<br />

27 1 Reserved0 0 Reserved Set to 0.<br />

28 1 SKU Number 0 String not Present.<br />

29 1 Family 5 String 5<br />

30 1 Asset Tag Number 0 String not Present.<br />

31 6 String1 “PICMG\0”<br />

37 11 String2 “COMExpress\0”<br />

48 8 String3 “1.1.0.1\0”<br />

56 7 String4 “SN1234\0”<br />

63 5 String5 “COM0\0”<br />

68 1 NULL Byte 0x00 Null Byte<br />

69 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 40 of 84


6.6 Base Board (or Module) Information Descriptor Block<br />

typedef struct EeePModuleInfo_s{<br />

SmbiosHdrDBlck_t SDBHdr; /* 0x00 Smbios Dynamic Block Header */<br />

uint8_t Manufacturer ; /* 0x06 Number of ASCIIZ String */<br />

uint8_t Product ; /* 0x07 Number of ASCIIZ String */<br />

uint8_t Version ; /* 0x08 Number of ASCIIZ String */<br />

uint8_t SerialNumber ; /* 0x09 Number of ASCIIZ String */<br />

uint8_t AssetTag ; /* 0x0A Number of ASCIIZ String */<br />

uint8_t FeatureFlag ; /* 0x0B A collection of<br />

* flags that identify<br />

* features of this<br />

* baseboard.<br />

*/<br />

uint8_t Location ; /* 0x0C Number of ASCIIZ String */<br />

SmbiosHandel_t LocHdl ; /* 0x0D Chassis Handel */<br />

uint8_t BoardType ; /* 0x0F SMBIOS_BoardTypes_t */<br />

uint8_t ContainedHndls ; /* 0x0C Number Of Contained<br />

* Object Handles That<br />

* Follow<br />

*/<br />

SmbiosHandel_t Handles[0] ; /* 0x10 Handles */<br />

}EeePModuleInfo_t;<br />

6.6.1 Description<br />

This block is lbased on the SMBIOS 2.6 standards Module Description block. This Information<br />

should be used to populate the SMBIOS block type 2 if supported. It may additionally also be<br />

displayed in bios setup.<br />

6.6.2 Block Elements<br />

6.6.2.1 DBHdr<br />

See ' 6.1 Common Dynamic Block Header' on page 31.<br />

6.6.2.2 Manufacturer<br />

Number of ASCIIZ String.<br />

6.6.2.3 Product<br />

Number of ASCIIZ String.<br />

6.6.2.4 Version<br />

Number of ASCIIZ String.<br />

6.6.2.5 SerialNumber<br />

Number of ASCIIZ String.<br />

6.6.2.6 AssetTag<br />

Number of ASCIIZ String.<br />

6.6.2.7 FeatureFlag<br />

A collection of flags that identify features of this baseboard. Please refer to the SMBIOS <strong>Specification</strong>.<br />

6.6.2.8 Location<br />

Number of ASCIIZ String.<br />

6.6.2.9 LocHdl<br />

CAP_C_STRUCT 6: SMBIOS Module Information<br />

The handle, or instance number, associated with the chassis in which this board resides (see ' 6.7<br />

System Enclosure or Chassis Descriptor Block'(Type 3) on page 44).<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 41 of 84


6.6.2.10 BoardType<br />

Identifies the type of board. Please refer to the SMBIOS <strong>Specification</strong>.<br />

6.6.2.11 ContainedHndls<br />

Identifies the number (0 to 255) of Contained Object Handles that follow.<br />

6.6.2.12 Handles<br />

A list of handles of other structures (e.g. Base Board, Processor, Port, System Slots, Memory Device)<br />

that are contained by this baseboard.<br />

6.6.3 Example Block<br />

Table 6-14: 'COM_0 Module' Module Information Descriptor Block Example<br />

Offset Width Name Value Description<br />

0 1 Block Id 0xD0 SMBIOS Descriptor<br />

1 2 Block Length 34 Dynamic Block Size (Words)<br />

3 1 Type 2 SMBIOS Block Type(Module)<br />

4 1 Length 15 Header Length<br />

5 2 Handle 0xE000 Carrier Board Module .<br />

7 1 Manufacturer 1 String 1<br />

8 1 Product 2 String 2<br />

9 1 Version 3 String 3<br />

10 1 Serial Number 4 String 4<br />

11 1 Asset Tag 0 String not Present.<br />

12 1 FeatureFlag 0x08 Replaceable<br />

13 1 Location 0 String 5<br />

14 2 LocHdl 0xE003 Chassis Handle.<br />

16 1 BoardType 0x0B Processor/Memory Module<br />

17 1 ContainedHndls 0 Number Of Handles<br />

0 6 String1 “PICMG\0”<br />

6 11 String2 “COMExpress\0”<br />

17 8 String3 “1.1.0.1\0”<br />

25 6 String4 “SN123\0”<br />

31 17 String5 “On Carrier Board\0”<br />

48 1 NULL Byte 0x00 Null Byte<br />

49 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 42 of 84


Table 6-15: 'Carrier Board' Module Information Descriptor Block Example<br />

Offset Width Name Value Description<br />

0 1 Block Id 0xD0 SMBIOS Descriptor<br />

1 2 Block Length 31 Dynamic Block Size (Words)<br />

3 1 Type 2 SMBIOS Block Type(Module)<br />

4 1 Length 17 Header Length<br />

5 2 Handle 0xE001 Carrier Board Module .<br />

7 1 Manufacturer 1 String 1<br />

8 1 Product 2 String 2<br />

9 1 Version 3 String 3<br />

10 1 Serial Number 4 String 4<br />

11 1 Asset Tag 0 String not Present.<br />

12 1 FeatureFlag 0x08 Replaceable<br />

13 1 Location 0 String 5<br />

14 2 LocHdl 0xE003 Chassis Handle.<br />

16 1 BoardType 0x0D Interconnect Board<br />

17 1 ContainedHndls 1 Number Of Handles<br />

18 2 Handles 0xE000 Module 'Module Handle'<br />

20 6 String1 “PICMG\0”<br />

26 11 String2 “COMExpress\0”<br />

37 8 String3 “1.1.0.1\0”<br />

45 6 String4 “SN123\0”<br />

51 10 String5 “In System\0”<br />

61 1 NULL Byte 0x00 Null Byte<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 43 of 84


6.7 System Enclosure or Chassis Descriptor Block<br />

typedef struct EeePChassisInfo_s{<br />

SmbiosHdrDBlck_t SDBHdr; /* 0x00 Smbios Dynamic Block Header */<br />

uint8_t Manufacturer ; /* 0x06 Number of ASCIIZ String */<br />

uint8_t Type ; /* 0x07 ENUM */<br />

uint8_t Version ; /* 0x08 Number of ASCIIZ String */<br />

uint8_t SerialNumber ; /* 0x09 Number of ASCIIZ String */<br />

uint8_t AssetTagNumber ; /* 0x0A Number of ASCIIZ String */<br />

uint8_t Reserved0[4] ; /* 0x0B Reserved */<br />

uint8_t OEM[4]<br />

; /* 0x0F Contains OEM- or BIOS<br />

* vendor-specific information<br />

*/<br />

uint8_t Height<br />

; /* 0x13 The height of the<br />

* enclosure, in 'U's.<br />

*/<br />

uint8_t NumPowerCords ; /* 0x14 Identifies the number<br />

* of power cords associated with<br />

* the enclosure or chassis.<br />

*/<br />

uint8_t CElementCnt ; /* 0x15 Contained Element Count */<br />

uint8_t CElementSize ; /* 0x16 Contained Element Size */<br />

CCElement_t CElement[0]; /* 0x17 Contained Element(s) */<br />

}EeePChassisInfo_t;<br />

6.7.1 Description<br />

This block is lbased on the SMBIOS 2.6 standards CHASIS Description block. This Information<br />

should be used to populate the SMBIOS block type 3 if supported. It may additionally also be<br />

displayed in bios setup.<br />

6.7.2 Block Elements<br />

CAP_C_STRUCT 7: SMBIOS Chassis Info<br />

6.7.2.1 DBHdr<br />

See ' 6.1 Common Dynamic Block Header' on page 31.<br />

6.7.2.2 Manufacturer<br />

Number of ASCIIZ String.<br />

6.7.2.3 Type<br />

ENUM see SMBIOS <strong>Specification</strong>.<br />

6.7.2.4 Version<br />

Number of ASCIIZ String.<br />

6.7.2.5 SerialNumber<br />

Number of ASCIIZ String.<br />

6.7.2.6 AssetTagNumber<br />

Number of ASCIIZ String.<br />

6.7.2.7 Reserved0<br />

Reserved set to 0.<br />

6.7.2.8 OEM<br />

Contains OEM- or BIOS vendor-specific information.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 44 of 84


6.7.2.9 Height<br />

The height of the enclosure, in 'U's. A U is a standard unit of measure for the height of a rack or rackmountable<br />

component and is equal to 1.75 inches or 4.445 cm. A value of 00h indicates that the<br />

enclosure height is unspecified.<br />

6.7.2.10 NumPowerCords<br />

Identifies the number of power cords associated with the enclosure or chassis. A value of 00h<br />

indicates that the number is unspecified.<br />

6.7.2.11 CElementCnt<br />

Identifies the number of Contained Element records that follow, in the range 0 to 255. Each Contained<br />

Element group comprises m bytes, as specified by the Contained Element Record Length field that<br />

follows. If no Contained Elements are included, this field is set to 0.<br />

6.7.2.12 CElementSize<br />

Identifies the byte length of each Contained Element record that follow, in the range 0 to 255. If no<br />

Contained Elements are included, this field is set to 0.<br />

6.7.2.13 CElementSize<br />

Identifies the elements, possibly defined by other SMBIOS structures, present in this chassis. See<br />

SMBIOS <strong>Specification</strong> for further details.<br />

6.7.3 Example Block<br />

Table 6-16: Chassis Information Descriptor Block Example<br />

Offset Width Name Value Description<br />

0 1 Block Id 0xD0 SMBIOS Dynamic Block ID.<br />

1 2 Block Length 23 Dynamic Block Size (Words)<br />

3 1 Type 3 SMBIOS Block Type(Chassis)<br />

4 1 Length 24 Header Length<br />

5 2 Handle 0xE003 Chassis.<br />

7 1 Manufacturer 1 String 1<br />

8 1 Type 0x10 Lunch Box<br />

9 1 Version 3 String 2<br />

10 1 Serial Number 4 String 3<br />

11 1 Asset Tag 0 String not Present.<br />

12 4 Reserved0 0 Reserved<br />

16 4 OEM 0 Not Used<br />

20 1 Height 1 1 U Tall.<br />

21 1 NumPowerCords 1 1 Power Cord Required.<br />

22 1 CElementCnt 1 1 Contained Element Present<br />

23 1 CElementSize 3 Contained Elements are 3 bytes long<br />

24 3 Celement[0].ElementType 0xA7 Power Supply<br />

27 Celement[0].MinNum 1 At Least 1 Power Supply Required.<br />

27 Celement[0].MaxNum 1 At Most 1 Power Supply Supported.<br />

27 6 String1 “PICMG\0”<br />

33 7 String2 “SN1234\0”<br />

40 5 String3 “COM0\0”<br />

45 1 NULL Byte 0x00 Null Byte<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 45 of 84


6.8 LFP Device Descriptor Block<br />

typedef struct LFPDataBlock_s{<br />

DBlockIdHdr_t DBHdr ; /* 0x00 Dynamic Block Header */<br />

uint8_t Interface ; /* 0x03 Display Interface */<br />

uint8_t RawData[1] ; /* 0x04 Display Raw Data<br />

* DisplayID<br />

* EDID<br />

* UDS<br />

* EPI<br />

*/<br />

}LFPDataBlock_t;<br />

6.8.1 Description<br />

CAP_C_STRUCT 8: LFP Device Descriptor<br />

This block is defined to allow storage of Flat panel Timing information. This is a simple wrapper<br />

and can be viewed conceptually as a virtual EPROM.<br />

6.8.2 Block Elements<br />

6.8.2.1 Interface<br />

Specifies the interface the Display data is to be used for.<br />

Value<br />

Table 6-17: LFP Interface Ids<br />

1 LVDS<br />

Description<br />

2 SDVOB - LVDS<br />

3 SDVOC - LVDS<br />

4 DDI1 eDP<br />

5 DDI2 eDP<br />

6 DDI3 eDP<br />

6.8.2.2 RawData<br />

It is expected that this block is used to contain one of the following, data formats EDID, Display<br />

ID, UDS, EPI. It is outside the scope of this specification to define the content of this data, please<br />

refer to the relevant specifications.<br />

6.8.3 Example Block<br />

Table 6-18: LFP Device Descriptor Block Example<br />

Offset Width Name Value Description<br />

0 1 Block Id 0xD2 LFP Display Descriptor Block<br />

1 2 Block Length 66 Dynamic Block Size (Words)<br />

3 1 Interface 1 LVDS<br />

4 128 EDID Data 0x00, 0x00, 0xFF,<br />

0xFF ...<br />

EDID Data<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 46 of 84


6.9 Vendor Specific Block<br />

typedef struct VendBlockHdr_s{<br />

DBlockIdHdr_t DBHdr ; /* 0x00 Dynamic Block Header */<br />

uint8_t VendId[2] ; /* 0x03 Compressed ASCII PNPID */<br />

/* After This Point is<br />

* vendor specific and is<br />

* therefore only<br />

* Suggested<br />

*/<br />

//uint8_t VendBlockId; /* 0x04 Vendor Specific Block Id */<br />

//uint8_t VendData[1]; /* 0x05 Vendor Data */<br />

}VendBlockHdr_t;<br />

6.9.1 Description<br />

Due to the Nature of the Module Market it should be expected that an EPROM will have Vendor<br />

specific blocks not only form the Carrier Board Manufacturer but from several Module vendors.<br />

To Prevent “Vendor Specific Block” contention, All Vendor specific blocks are distinguished by the<br />

vendor 'Compressed ASCII PNPID'.<br />

6.9.2 Block Elements<br />

6.9.2.1 DBHdr<br />

See ' 6.1 Common Dynamic Block Header' on page 31.<br />

6.9.2.2 Vendor ID<br />

See 'Compressed ASCII PNPID' on page 62.<br />

6.9.3 Example Block<br />

CAP_C_STRUCT 9: Vendor Specific<br />

Table 6-19: Vendor Specific Block Example<br />

Offset Width Name Value Description<br />

0 1 Block Id 0xF0 Vendor Block<br />

1 2 Block Length 3 Dynamic Block Size (Words)<br />

3 2 Vendor Id 0xXXXX Encoded PMG<br />

5 1 Vendor Specific Data ... Vendor Specific data.<br />

6.10 CRC16 Block<br />

typedef struct CRC16ChkBlock_s{<br />

DBlockIdHdr_t CDBHdr ; /* 0x00 Dynamic Block Header */<br />

uint8_t CrC16[2] ; /* 0x03 CRC16 Checksum */<br />

uint8_t Reserved0 ; /* 0x05 Word Alignment Fill byte */<br />

}CRC16ChkBlock_t;<br />

6.10.1 Description<br />

CAP_C_STRUCT 10: CRC<br />

This is a encapsulation block for the CRC16. The reason for Defining the CRC as a Dynamic Block<br />

rather than having it at a fixed location, are<br />

1. Allows for dynamic length support<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 47 of 84


2. Allows for the possibility of having data/structures outside the CRC.<br />

6.10.2 Block Elements<br />

6.10.2.1 CDBHdr<br />

See ' 6.1 Common Dynamic Block Header' on page 31.<br />

6.10.2.2 CrC16<br />

This two-byte field contains the calculated 16-bit CRC-CCITT (polynomial 0x1021) for previous bytes<br />

in the <strong>EEPROM</strong>. The following algorithm and data structures (shown in C) are to be followed in<br />

calculating and checking the code. The polynomial calculated with this algorithm is x16 + x12 + x5 + 1.<br />

6.10.2.3 Reserved0<br />

Pack Byte to align block size on 2 byte boundary.<br />

6.10.3 Example Block<br />

Table 6-20: CRC16 Block Example<br />

Offset Width Name Value Description<br />

0 1 Block Id 0xF2 CRC Block<br />

1 2 Block Length 3 Dynamic Block Size (Words)<br />

3 2 CRC16 0xA741 CRC16 Checksum<br />

5 1 Reserved0 0x00 Word Alignment Pack Byte<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 48 of 84


uint16_t<br />

u16CRC_CCITT (<br />

__IN const void *pcvBuffer, /* Pointer to Buffer */<br />

__IN size_t stCount /* Num bytes to CRC */<br />

)<br />

{<br />

const uint8_t *pcu8Buffer=pcvBuffer;<br />

unsigned CRC=0;<br />

unsigned i;<br />

while (stCount --) {<br />

CRC^= *pcu8Buffer++ >8)&0xFF);<br />

/* Sample Usage Check Crc*/<br />

CRC16ChkBlock_t CRCBlock;<br />

uint16_t crctmp1=CRCBlock.CrC16[1]|(CRCBlock.CrC16[0]


6.11.2.2 DeviceAddr<br />

Encoded 7/10 Bit Device Address.<br />

6.11.2.3 DeviceBus<br />

Device Bus<br />

Table 6-21: Device Bus Ids<br />

Value<br />

0x00<br />

0x01<br />

0x02<br />

0x03<br />

0x04<br />

0x05<br />

0x06<br />

0x07<br />

0x08<br />

I2C Bus<br />

SMBus<br />

LVDS<br />

DDI1<br />

DDI2<br />

DDI3<br />

SDVOB<br />

SDVOC<br />

CRT<br />

Description<br />

6.11.2.4 DeviceDesc<br />

See ' 4.2.2.5 Device Descriptor Byte(DeviceDesc)' on page 19.<br />

6.11.3 Example Block<br />

Table 6-22: Expansion <strong>EEPROM</strong> descriptor Example<br />

Offset Width Name Value Description<br />

0 1 Block Id 0xF1 Expansion <strong>EEPROM</strong> Block<br />

1 2 Block Length 4 Dynamic Block Size (Words)<br />

3 2 Device Addr 0x00A0 Device Address<br />

5 1 Device Bus 0x00 I2C Bus<br />

6 Device Desc{0:3} 0x00 256 Byte Device<br />

6 Device Desc{4} 0x00 Standard Index<br />

6 1 Device Desc{5:7} 0x00 Reserved<br />

7 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 50 of 84


7 Sample <strong>EEPROM</strong> Content<br />

7.1 Sample Carrier Board <strong>EEPROM</strong> Content<br />

7.1.1 COM0R20 Type 2 Carrier Board With Expansion <strong>EEPROM</strong><br />

Table 7-1: COM0R20 Type 2 Carrier Board With Expansion <strong>EEPROM</strong><br />

Offset Width Name Value Description<br />

0 1 DontCareByte 0 Don't Care Byte<br />

1 2 EepId “3P” <strong>EEPROM</strong> Marker<br />

3 1 EeeP 0x10 EeeP <strong>Specification</strong> Version<br />

4 1 BlkOffset 24.5 Absolute offset to First Block (words)<br />

5 0 Device Desc{0:3} 0 256 Byte Device<br />

5 0 Device Desc{4} 0 Standard Index Device<br />

5 1 Device Desc{5:7} 1 Page Write Length 8 Bytes<br />

6 4 Com0Id “Com0” Com0 Header Identifier<br />

10 2 Vendor Id 0xA741 Encoded PMG<br />

12 2 Device Id 0x0001 Vendor Specific Device Id<br />

14 1 Device Flavor 0x01 Device Specific Flavor Id.<br />

15 1 Device Rid 0x01 Device Specific Revision Id<br />

16 1 CBType 0x02 Carrier Board Type<br />

17 1 SpecRev 0x20 COM0 <strong>Specification</strong> Revision<br />

18 0 UsbDesc{0:3} 8 8 USB High Speed Ports<br />

18 0 UsbDesc{4:6} 0 0 USB Super Speed Ports<br />

18 1 UsbDesc{7} 0 Reserved<br />

19 0 SasDesc{0:1} 1 PORT0 SATA<br />

19 0 SasDesc{2:3} 1 PORT1 SATA<br />

19 0 SasDesc{4:5} 3 PORT2 SAS<br />

19 1 SasDesc{6:7} 0 PORT3 Not Implemented<br />

20 1 LanDesc 0x01 GBE0 Implemented<br />

GBE1 Not Implemented<br />

GBE2 Not Implemented<br />

GB1E0 Not Implemented<br />

21 1 MiscIo1 0xFF WAKE0 Implemented<br />

WAKE1 Implemented<br />

SUS Implemented<br />

BATLOW Implemented<br />

THRMP Implemented<br />

EBROM Implemented<br />

WDT Implemented<br />

AC97 Implemented<br />

22 1 MiscIo2 0x01 SSC Implemented<br />

SDIO Not Implemented<br />

LID Not Implemented<br />

SLEEP Not Implemented<br />

FAN0 Not Implemented<br />

SER0 Not Implemented<br />

SER1 Not Implemented<br />

23 DDIDesc[0]{0:2} 0 DDI0 Not Implemented<br />

23 1 DDIDesc[0]{4:6} 0 DDI1 Not Implemented<br />

24 DDIDesc[1]{0:1} 0 DDI2 Not Implemented<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 51 of 84


Offset Width Name Value Description<br />

24 1 DDIDesc[1]{4:5} 0 DDI3 Not Implemented<br />

25 1 PCIeGen[0] 0x00 Lanes 0-3 Generation 1<br />

26 1 PCIeGen[1] 0x00 Lanes 4-5 Generation 1<br />

Lanes 6-7 Unused Set to Generation 1<br />

27 1 PCIeGen[2] 0x00 Lanes 8-11 Unused Set to Generation 1<br />

28 1 PCIeGen[3] 0x00 Lanes 12-15 Unused Set to Generation 1<br />

29 1 PCIeGen[4] 0x55 Lanes 16-20 PEG Generation 2<br />

30 1 PCIeGen[5] 0x55 Lanes 20-23 PEG Generation 2<br />

31 1 PCIeGen[6] 0x55 Lanes 24-28 PEG Generation 2<br />

32 1 PCIeGen[7] 0x55 Lanes 28-31 PEG Generation 2<br />

33 1 LaneMap[0] 0x11 x1 Lane 00 & 01<br />

34 1 LaneMap[1] 0x11 x1 Lane 02 & 03<br />

35 1 LaneMap[2] 0x22 x2 Lane 04 - 05<br />

36 1 LaneMap[3] 0x00 Unused<br />

37 1 LaneMap[4] 0x00 Unused<br />

38 1 LaneMap[5] 0x00 Unused<br />

39 1 LaneMap[6] 0x00 Unused<br />

40 1 LaneMap[7] 0x00 Unused<br />

41 1 LaneMap[8] 0x55 x16 Lane 16 - 31<br />

42 1 LaneMap[9] 0x55 x16 Lane 16 - 31<br />

43 1 LaneMap[10] 0x55 x16 Lane 16 - 31<br />

44 1 LaneMap[11] 0x55 x16 Lane 16 - 31<br />

45 1 LaneMap[12] 0x55 x16 Lane 16 - 31<br />

46 1 LaneMap[13] 0x55 x16 Lane 16 - 31<br />

47 1 LaneMap[14] 0x55 x16 Lane 16 - 31<br />

48 1 LaneMap[15] 0x55 x16 Lane 16 - 31<br />

49<br />

49 1 Block Id 0xE0 Express Card Extended Topology<br />

50 2 Block Length 5 Dynamic Block Size (Words)<br />

52 1 Express Card Number 0x01 Express Card Slot 2<br />

53 Com Express Port{0:4} 16 PCI Express Lane 16 (PEG Port)<br />

53 1 Com Express Port{5:7} 1 USB Port 1<br />

54 SwitchDevFuncAddr[0]{0:2} 0 1st Port Function 0<br />

54 1 SwitchDevFuncAddr[0]{3:7} 1 1st Port Device 1<br />

55 SwitchDevFuncAddr[1]{0:2} 0 2nd Port Function 0<br />

55 1 SwitchDevFuncAddr[1]{3:7} 3 2nd Port Device 3<br />

56 SwitchDevFuncAddr[2]{0:2} 0 3rd Port Function 0<br />

56 1 SwitchDevFuncAddr[2]{3:7} 3 3rd Port Device 3<br />

57 1 SwitchDevFuncAddr[3] 0xFF End of Port List<br />

58 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

59<br />

59 1 Block Id 0xD0 SMBIOS Dynamic Block ID.<br />

60 2 Block Length 35 Dynamic Block Size (Words)<br />

62 1 Type 1 SMBIOS Block Type(System)<br />

63 1 Length 28 Header Length<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 52 of 84


Offset Width Name Value Description<br />

64 2 Handle 0xE002<br />

66 1 Manufacturer 1 String 1<br />

67 1 ProductName 2 String 2<br />

68 1 Version 3 String 3<br />

69 1 Serial Number 4 String 4<br />

70 16 UUID 16 Dup (0xFF) UUID can Be Set.<br />

86 1 Reserved0 0 Reserved Set to 0.<br />

87 1 SKU Number 0 String not Present.<br />

88 1 Family 5 String 5<br />

89 1 Asset Tag Number 0 String not Present.<br />

90 6 String1 “PICMG\0”<br />

96 11 String2 “COMExpress\0”<br />

107 8 String3 “1.1.0.1\0”<br />

115 7 String4 “SN1234\0”<br />

122 5 String5 “COM0\0”<br />

127 1 NULL Byte 0x00 Null Byte<br />

128 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

129<br />

129 1 Block Id 0xD0 SMBIOS Descriptor<br />

130 2 Block Length 31 Dynamic Block Size (Words)<br />

132 1 Type 2 SMBIOS Block Type(Module)<br />

133 1 Length 17 Header Length<br />

134 2 Handle 0xE001 Carrier Board Module .<br />

136 1 Manufacturer 1 String 1<br />

137 1 Product 2 String 2<br />

138 1 Version 3 String 3<br />

139 1 Serial Number 4 String 4<br />

140 1 Asset Tag 0 String not Present.<br />

141 1 FeatureFlag 0x08 Replaceable<br />

142 1 Location 0 String 5<br />

143 2 LocHdl 0xE003 Chassis Handle.<br />

145 1 BoardType 0x0D Interconnect Board<br />

146 1 ContainedHndls 1 Number Of Handles<br />

147 2 Handles 0xE000 Module 'Module Handle'<br />

149 6 String1 “PICMG\0”<br />

155 11 String2 “COMExpress\0”<br />

166 8 String3 “1.1.0.1\0”<br />

174 6 String4 “SN123\0”<br />

180 10 String5 “In System\0”<br />

190 1 NULL Byte 0x00 Null Byte<br />

191<br />

191 1 Block Id 0xF2 Extended <strong>EEPROM</strong> Device Descriptor.<br />

See ' 7.3 Sample Expansion <strong>EEPROM</strong> Content'<br />

on page 60<br />

192 2 Block Length 3 Dynamic Block Size(Words)<br />

194 1 Device Addr 0xA0 Device Address<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 53 of 84


Offset Width Name Value Description<br />

195 1 Device Bus 0x00 I2C Bus<br />

196 Device Desc{0:3} 0 256 Byte Device<br />

196 Device Desc{4} 0 Standard Index Device<br />

196 1 Device Desc{5:7} 0 Reserved<br />

197<br />

197 1 Block Id 0xFE CRC<br />

198 2 Block Length 0x0000 End Of List<br />

200 2 CRC 0xXXXX<br />

202 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

203<br />

203 1 Block Id 0x00 Unused Space<br />

204 2 Block Length 24.5<br />

206 46 Unused<br />

252<br />

252 1 Block Id 0x00 Unused Space<br />

253 2 Block Length 0x0000 End Of List<br />

255 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

7.1.2 COM0R20 Type 2 Carrier Board<br />

Table 7-2: COM0R20 Type 2 Carrier Board<br />

Offset Width Name Value Description<br />

0 1 DontCareByte 0 Don't Care Byte<br />

1 2 EepId “3P” <strong>EEPROM</strong> Marker<br />

3 1 EeeP 0x10 EeeP <strong>Specification</strong> Version<br />

4 1 BlkOffset 24.5 Absolute offset to First Block (words)<br />

5 4 Com0Id “Com0” Com0 Header Identifier<br />

9 2 Vendor Id 0xA741 Encoded PMG<br />

11 Device Desc{0:3} 0 256 Byte Device<br />

11 Device Desc{4} 0 Standard Index Device<br />

11 1 Device Desc{5:7} 1 Page Write Length 8 Bytes<br />

12 2 Device Id 0x0001 Vendor Specific Device Id<br />

14 1 Device Flavor 0x01 Device Specific Flavor Id.<br />

15 1 Device Rid 0x01 Device Specific Revision Id<br />

16 1 CBType 0x02 Carrier Board Type<br />

17 1 SpecRev 0x20 COM0 <strong>Specification</strong> Revision<br />

18 0 UsbDesc{0:3} 8 8 USB High Speed Ports<br />

18 0 UsbDesc{4:6} 0 0 USB Super Speed Ports<br />

18 1 UsbDesc{7} 0 Reserved<br />

19 0 SasDesc{0:1} 1 PORT0 SATA<br />

19 0 SasDesc{2:3} 1 PORT1 SATA<br />

19 0 SasDesc{4:5} 3 PORT2 SAS<br />

19 1 SasDesc{6:7} 0 PORT3 Not Implemented<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 54 of 84


Offset Width Name Value Description<br />

20 1 LanDesc 0x01 GBE0 Implemented<br />

GBE1 Not Implemented<br />

GBE2 Not Implemented<br />

GB1E0 Not Implemented<br />

21 1 MiscIo1 0xFF WAKE0 Implemented<br />

WAKE1 Implemented<br />

SUS Implemented<br />

BATLOW Implemented<br />

THRMP Implemented<br />

EBROM Implemented<br />

WDT Implemented<br />

AC97 Implemented<br />

22 1 MiscIo2 0x01 SSC Implemented<br />

SDIO Not Implemented<br />

LID Not Implemented<br />

SLEEP Not Implemented<br />

FAN0 Not Implemented<br />

SER0 Not Implemented<br />

SER1 Not Implemented<br />

23 DDIDesc[0]{0:2} 0 DDI0 Not Implemented<br />

23 1 DDIDesc[0]{4:6} 0 DDI1 Not Implemented<br />

24 DDIDesc[1]{0:1} 0 DDI2 Not Implemented<br />

24 1 DDIDesc[1]{4:5} 0 DDI3 Not Implemented<br />

25 1 PCIeGen[0] 0x55 Lanes 0-3 Generation 2<br />

26 1 PCIeGen[1] 0x05 Lanes 4-5 Generation 2<br />

Lanes 6-7 Unused Set to Generation 1<br />

27 1 PCIeGen[2] 0x00 Lanes 8-11 Unused Set to Generation 1<br />

28 1 PCIeGen[3] 0x00 Lanes 12-15 Unused Set to Generation 1<br />

29 1 PCIeGen[4] 0xAA Lanes 16-20 PEG Generation 3<br />

30 1 PCIeGen[5] 0xAA Lanes 20-23 PEG Generation 3<br />

31 1 PCIeGen[6] 0xAA Lanes 24-28 PEG Generation 3<br />

32 1 PCIeGen[7] 0xAA Lanes 28-31 PEG Generation 3<br />

33 1 LaneMap[0] 0x11 x1 Lane 00 & 01<br />

34 1 LaneMap[1] 0x99 x1 Lane 02 & 03<br />

35 1 LaneMap[2] 0x22 x2 Lane 04 - 05<br />

36 1 LaneMap[3] 0x00 Unused<br />

37 1 LaneMap[4] 0x00 Unused<br />

38 1 LaneMap[5] 0x00 Unused<br />

39 1 LaneMap[6] 0x00 Unused<br />

40 1 LaneMap[7] 0x00 Unused<br />

41 1 LaneMap[8] 0x55 x16 Lane 16 - 31<br />

42 1 LaneMap[9] 0x55 x16 Lane 16 - 31<br />

43 1 LaneMap[10] 0x55 x16 Lane 16 - 31<br />

44 1 LaneMap[11] 0x55 x16 Lane 16 - 31<br />

45 1 LaneMap[12] 0x55 x16 Lane 16 - 31<br />

46 1 LaneMap[13] 0x55 x16 Lane 16 - 31<br />

47 1 LaneMap[14] 0x55 x16 Lane 16 - 31<br />

48 1 LaneMap[15] 0x55 x16 Lane 16 - 31<br />

49<br />

49 1 Block Id 0xE0 Express Card Extended Topology<br />

50 2 Block Length 5 Dynamic Block Size (Words)<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 55 of 84


Offset Width Name Value Description<br />

52 1 Express Card Number 0x01 Express Card Slot 2<br />

53 Com Express Port{0:4} 16 PCI Express Lane 16 (PEG Port)<br />

53 1 Com Express Port{5:7} 1 USB Port 1<br />

54 SwitchDevFuncAddr[0]{0:2} 0 1st Port Function 0<br />

54 1 SwitchDevFuncAddr[0]{3:7} 1 1st Port Device 1<br />

55 SwitchDevFuncAddr[1]{0:2} 0 2nd Port Function 0<br />

55 1 SwitchDevFuncAddr[1]{3:7} 3 2nd Port Device 3<br />

56 SwitchDevFuncAddr[2]{0:2} 0 3rd Port Function 0<br />

56 1 SwitchDevFuncAddr[2]{3:7} 3 3rd Port Device 3<br />

57 1 SwitchDevFuncAddr[3] 0xFF End of Port List<br />

58 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

59<br />

59 1 Block Id 0xD0 SMBIOS Dynamic Block ID.<br />

60 2 Block Length 35 Dynamic Block Size (Words)<br />

62 1 Type 1 SMBIOS Block Type(System)<br />

63 1 Length 28 Header Length<br />

64 2 Handle 0xE002<br />

66 1 Manufacturer 1 String 1<br />

67 1 ProductName 2 String 2<br />

68 1 Version 3 String 3<br />

69 1 Serial Number 4 String 4<br />

70 16 UUID 16 Dup (0xFF) UUID can Be Set.<br />

86 1 Reserved0 0 Reserved Set to 0.<br />

87 1 SKU Number 0 String not Present.<br />

88 1 Family 5 String 5<br />

89 1 Asset Tag Number 0 String not Present.<br />

90 6 String1 “PICMG\0”<br />

96 11 String2 “COMExpress\0”<br />

107 8 String3 “1.1.0.1\0”<br />

115 7 String4 “SN1234\0”<br />

122 5 String5 “COM0\0”<br />

127 1 NULL Byte 0x00 Null Byte<br />

128 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

129<br />

129 1 Block Id 0xD0 SMBIOS Dynamic Block ID.<br />

130 2 Block Length 23 Dynamic Block Size (Words)<br />

132 1 Type 3 SMBIOS Block Type(Chassis)<br />

133 1 Length 24 Header Length<br />

134 2 Handle 0xE003 Chassis.<br />

136 1 Manufacturer 1 String 1<br />

137 1 Type 0x10 Lunch Box<br />

138 1 Version 3 String 2<br />

139 1 Serial Number 4 String 3<br />

140 1 Asset Tag 0 String not Present.<br />

141 4 Reserved0 0 Reserved<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 56 of 84


Offset Width Name Value Description<br />

145 4 OEM 0 Not Used<br />

149 1 Height 1 1 U Tall.<br />

150 1 NumPowerCords 1 1 Power Cord Required.<br />

151 1 CElementCnt 1 1 Contained Element Present<br />

152 1 CElementSize 3 Contained Elements are 3 bytes long<br />

153 3 Celement[0].ElementType 0xA7 Power Supply<br />

156 Celement[0].MinNum 1 At Least 1 Power Supply Required.<br />

156 Celement[0].MaxNum 1 At Most 1 Power Supply Supported.<br />

156 6 String1 “PICMG\0”<br />

162 7 String2 “SN1234\0”<br />

169 5 String3 “COM0\0”<br />

174 1 NULL Byte 0x00 Null Byte<br />

175<br />

175 1 Block Id 0xFE CRC<br />

176 2 Block Length 0x0000 End Of List<br />

178 2 CRC 0xXXXX<br />

180 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

181<br />

181 1 Block Id 0x00 Unused Space<br />

182 2 Block Length 35.5<br />

184 68 Unused<br />

252<br />

252 1 Block Id 0x00 Unused Space<br />

253 2 Block Length 0x0000 End Of List<br />

255 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

7.2 Sample COM0R20 Module <strong>EEPROM</strong> Content<br />

7.2.1 Sample 1 All in CRC<br />

Table 7-3: Sample 1 All in CRC<br />

Offset Width Name Value Description<br />

0 1 DontCareByte 0 Don't Care Byte<br />

1 2 EepId “3P” <strong>EEPROM</strong> Marker<br />

3 1 EeeP 0x10 EeeP <strong>Specification</strong> Version<br />

4 1 BlkOffset 9 Absolute offset to First Block (words)<br />

5 Device Desc{0:3} 0 256 Byte Device<br />

5 Device Desc{4} 0 Standard Index Device<br />

5 1 Device Desc{5:7} 0 Reserved<br />

6 4 Com0Id “coM0” Com0 Header Identifier<br />

10 2 Vendor Id 0xA741 Encoded PMG<br />

12 2 Device Id 0x0001 Vendor Specific Device Id<br />

14 1 Device Flavor 0x01 Device Specific Flavor Id.<br />

15 1 Device Rid 0x01 Device Specific Revision Id<br />

16 1 MType 0x02 Module Type<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 57 of 84


Offset Width Name Value Description<br />

17 1 SpecRev 0x20 COM0 <strong>Specification</strong> Revision<br />

18<br />

18 1 Block Id 0xD0 SMBIOS Descriptor<br />

19 2 Block Length 34 Dynamic Block Size (Words)<br />

21 1 Type 2 SMBIOS Block Type(Module)<br />

22 1 Length 15 Header Length<br />

23 2 Handle 0xE000 Carrier Board Module .<br />

25 1 Manufacturer 1 String 1<br />

26 1 Product 2 String 2<br />

27 1 Version 3 String 3<br />

28 1 Serial Number 4 String 4<br />

29 1 Asset Tag 0 String not Present.<br />

30 1 FeatureFlag 0x08 Replaceable<br />

31 1 Location 0 String 5<br />

32 2 LocHdl 0xE003 Chassis Handle.<br />

34 1 BoardType 0x0B Processor/Memory Module<br />

35 1 ContainedHndls 0 Number Of Handles<br />

36 6 String1 “PICMG\0”<br />

42 11 String2 “COMExpress\0”<br />

53 8 String3 “1.1.0.1\0”<br />

61 6 String4 “SN123\0”<br />

67 17 String5 “On Carrier Board\0”<br />

84 1 NULL Byte 0x00 Null Byte<br />

85 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

86<br />

86 1 Block Id 0xFE CRC<br />

87 2 Block Length 0x0000 End Of List<br />

89 2 CRC 0xXXXX<br />

91 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

92<br />

92 1 Block Id 0x00 Unused Space<br />

93 2 Block Length 80 Dynamic Block Size (Words)<br />

95 157 Unused<br />

252<br />

252 1 Block Id 0x00 Unused Space<br />

253 2 Block Length 0x0000 End Of List<br />

255 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

7.2.2 Sample 2 With Data outside CRC<br />

Table 7-4: Sample 2 With Data outside CRC<br />

Offset Width Name Value Description<br />

0 1 DontCareByte 0 Don't Care Byte<br />

1 2 EepId “3P” <strong>EEPROM</strong> Marker<br />

3 1 EeeP 0x10 EeeP <strong>Specification</strong> Version<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 58 of 84


Offset Width Name Value Description<br />

4 1 BlkOffset 9 Absolute offset to First Block (words)<br />

5 Device Desc{0:3} 0 256 Byte Device<br />

5 Device Desc{4} 0 Standard Index Device<br />

5 1 Device Desc{5:7} 0 Reserved<br />

6 4 Com0Id “coM0” Com0 Header Identifier<br />

10 2 Vendor Id 0xA741 Encoded PMG<br />

12 2 Device Id 0x0001 Vendor Specific Device Id<br />

14 1 Device Flavor 0x01 Device Specific Flavor Id.<br />

15 1 Device Rid 0x01 Device Specific Revision Id<br />

16 1 MType 0x02 Module Type<br />

17 1 SpecRev 0x20 COM0 <strong>Specification</strong> Revision<br />

18<br />

18 1 Block Id 0xD0 SMBIOS Descriptor<br />

19 2 Block Length 34 Dynamic Block Size (Words)<br />

21 1 Type 2 SMBIOS Block Type(Module)<br />

22 1 Length 15 Header Length<br />

23 2 Handle 0xE000 Carrier Board Module .<br />

25 1 Manufacturer 1 String 1<br />

26 1 Product 2 String 2<br />

27 1 Version 3 String 3<br />

28 1 Serial Number 4 String 4<br />

29 1 Asset Tag 0 String not Present.<br />

30 1 FeatureFlag 0x08 Replaceable<br />

31 1 Location 0 String 5<br />

32 2 LocHdl 0xE003 Chassis Handle.<br />

34 1 BoardType 0x0B Processor/Memory Module<br />

35 1 ContainedHndls 0 Number Of Handles<br />

36 6 String1 “PICMG\0”<br />

42 11 String2 “COMExpress\0”<br />

53 8 String3 “1.1.0.1\0”<br />

61 6 String4 “SN123\0”<br />

67 17 String5 “On Carrier Board\0”<br />

84 1 NULL Byte 0x00 Null Byte<br />

85 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

86<br />

86 1 Block Id 0xFE CRC<br />

87 2 Block Length 3 Dynamic Block Size (Words)<br />

89 2 CRC 0xXXXX 0<br />

91 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

92<br />

92 1 Block Id 0x00 Unused Space<br />

93 2 Block Length 27 Dynamic Block Size (Words)<br />

95 51 Unused<br />

146<br />

146 1 Block Id 0xF0 Vendor Block<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 59 of 84


Offset Width Name Value Description<br />

147 2 Block Length 53 Dynamic Block Size (Words)<br />

149 2 Vendor Id 0xA741 Encoded PMG<br />

151 101 Storage ... Some Dynamic Storage<br />

252<br />

252 1 Block Id 0x00 Unused Space<br />

253 2 Block Length 0x0000 End Of List<br />

255 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

7.3 Sample Expansion <strong>EEPROM</strong> Content<br />

7.3.1 Sample Chassis Expansion <strong>EEPROM</strong><br />

Table 7-5: Sample Chassis Expansion <strong>EEPROM</strong><br />

Offset Width Name Value Description<br />

0 1 DontCareByte 0 Don't Care Byte<br />

1 2 EepId “3P” <strong>EEPROM</strong> Marker<br />

3 1 EeeP 0x10 EeeP <strong>Specification</strong> Version<br />

4 1 BlkOffset 6 Absolute offset to First Block (words)<br />

5 Device Desc{0:3} 0 256 Byte Device<br />

5 Device Desc{4} 0 Standard Index Device<br />

5 1 Device Desc{5:7} 0 Reserved<br />

6 2 Vendor Id 0xA741 Encoded PMG<br />

8 2 Device Id 0x0001 Vendor Specific Device Id<br />

10 1 Device Flavor 0x01 Device Specific Flavor Id.<br />

11 1 Device Rid 0x01 Device Specific Revision Id<br />

12<br />

12 1 Block Id 0xD0 SMBIOS Dynamic Block ID.<br />

13 2 Block Length 23 Dynamic Block Size (Words)<br />

15 1 Type 3 SMBIOS Block Type(Chassis)<br />

16 1 Length 24 Header Length<br />

17 2 Handle 0xE003 Chassis.<br />

19 1 Manufacturer 1 String 1<br />

20 1 Type 0x10 Lunch Box<br />

21 1 Version 3 String 2<br />

22 1 Serial Number 4 String 3<br />

23 1 Asset Tag 0 String not Present.<br />

24 4 Reserved0 0 Reserved<br />

28 4 OEM 0 Not Used<br />

32 1 Height 1 1 U Tall.<br />

33 1 NumPowerCords 1 1 Power Cord Required.<br />

34 1 CElementCnt 1 1 Contained Element Present<br />

35 1 CElementSize 3 Contained Elements are 3 bytes long<br />

36 3 Celement[0].Element<br />

Type<br />

0xA7<br />

Power Supply<br />

39 Celement[0].MinNum 1 At Least 1 Power Supply Required.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 60 of 84


Offset Width Name Value Description<br />

39 Celement[0].MaxNu<br />

m<br />

39 6 String1 “PICMG\0”<br />

45 7 String2 “SN1234\0”<br />

52 5 String3 “COM0\0”<br />

1 At Most 1 Power Supply Supported.<br />

57 1 NULL Byte 0x00 Null Byte<br />

58<br />

58 1 Block Id 0xFE CRC<br />

59 2 Block Length 0x0000 End Of List<br />

61 2 CRC 0xXXXX<br />

63 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

64<br />

64 1 Block Id 0x00 Unused Space<br />

65 2 Block Length 94 Dynamic Block Size (Words)<br />

67 185 Unused<br />

252<br />

252 1 Block Id 0x00 Unused Space<br />

253 2 Block Length 0x0000 End Of List<br />

255 1 Alignment Byte 0x00 Word Alignment Alignment Byte<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 61 of 84


8 Standard Data Formats<br />

8.1 Compressed ASCII PNPID<br />

8.1.1 Definition<br />

Compressed ASCII is defined as 5 bits per character, "00001b" = "A" ... "11010b" = "Z".<br />

Byte Bits Description<br />

0 {7} 0<br />

0 {6:2} First character in compressed ASCII<br />

0 {1:0} Second character in compressed ASCII bits{4:3}<br />

1 {7:5} Second character in compressed ASCII bits{2:0}<br />

1 {4:0} Third character in compressed ASCII<br />

8.1.2 Example<br />

0xA741<br />

Hex<br />

'PMG'<br />

Interpreted<br />

8.2 <strong>EEPROM</strong> <strong>Specification</strong> Revision.<br />

8.2.1 Definition<br />

This is an 8Bit value specifying the specification version used to creating the <strong>EEPROM</strong> content.<br />

Bits<br />

Description<br />

{7:4} <strong>Specification</strong> Version.<br />

{3:0} <strong>Specification</strong> Revision.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 62 of 84


8.2.2 Examples<br />

Value<br />

0x10 1.0<br />

0x20 2.0<br />

0x21 2.1<br />

Decoded<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 63 of 84


8.3 Assembler Sample Code<br />

LinkWidth TEXTEQU <br />

StartLane TEXTEQU <br />

GetLaneInfo PROC NEAR STDCALL PUBLIC \<br />

USES BX CX, \<br />

LaneIndex:BYTE<br />

movzx bx, LaneIndex<br />

; Adjust Lane index to Array Index<br />

; Load Bit 0 to Carry Flag<br />

shr bx, 1<br />

; Get Lane Mapping Information<br />

mov<br />

bl, cs:LaneMap[bx]<br />

jnc<br />

@F<br />

; Adjust for High/Low nibble<br />

shr bl, 4<br />

@@:<br />

; Prepare for Unused<br />

xor<br />

ax, ax<br />

; Mask/Delete Reserved Bit<br />

and bl, 7<br />

jz<br />

UnusedLane<br />

mov<br />

cl, bl<br />

dec<br />

cl<br />

mov bl, 1<br />

shl<br />

bl, cl<br />

mov<br />

LinkWidth, bl<br />

; Delete invalid Bits<br />

; to get starting lane<br />

dec<br />

bl<br />

not<br />

bl<br />

mov<br />

StartLane, LaneIndex<br />

and<br />

StartLane, bl<br />

UnusedLane:<br />

ret<br />

GetLaneInfo ENDP<br />

MASM_SAMPLE 1: Decode PCIe Link Width & Start Lane<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 64 of 84


@proto_Crc16 TYPEDEF PROTO STDCALL :NEAR32 PTR :uint32_t<br />

Crc16 PROTO @proto_Crc16<br />

Crc16 PROC STDCALL PUBLIC USES BX ECX ESI \<br />

BufPtr:NEAR32 PTR, Count:uint32_t<br />

mov esi, BufPtr<br />

mov ecx, Count<br />

xor bx, bx<br />

ReadLoop:<br />

mov al, ds:[esi]<br />

xor bh, al<br />

mov al, 8<br />

LoopByte:<br />

shl bx, 1<br />

jnc @F<br />

xor bx, 01021h<br />

@@:<br />

dec al<br />

jnz LoopByte<br />

inc esi<br />

loopd ReadLoop<br />

mov ax, bx<br />

Exit:<br />

ret<br />

Crc16 ENDP<br />

MASM_SAMPLE 2: CRC-CCITT 386 implementation<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 65 of 84


9 Headers<br />

9.1 EeeP.h<br />

/*<br />

*<br />

*+=========================================================================<br />

*I Project Name: EApiDK <strong>Embedded</strong> Application Development Kit<br />

*+=========================================================================<br />

*I $HeadURL: https://eapidk.svn.sourceforge.net/svnroot/eapidk/trunk/include/EeeP.h $<br />

*+=========================================================================<br />

*I Copyright: Copyright (c) 2009, PICMG<br />

*I Author: John Kearney, John.Kearney@kontron.com<br />

*I<br />

*I License: All rights reserved. This program and the accompanying<br />

*I materials are licensed and made available under the<br />

*I terms and conditions of the BSD License which<br />

*I accompanies this distribution. The full text of the<br />

*I license may be found at<br />

*I http://opensource.org/licenses/bsd-license.php<br />

*I<br />

*I THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN<br />

*I "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF<br />

*I ANY KIND, EITHER EXPRESS OR IMPLIED.<br />

*I<br />

*I Description: <strong>Embedded</strong> <strong>EEPROM</strong><br />

*I<br />

*+-------------------------------------------------------------------------<br />

*I<br />

*I File Name : EeeP.h<br />

*I File Location : include<br />

*I Last committed : $Revision: 51 $<br />

*I Last changed by : $Author: dethrophes $<br />

*I Last changed date : $Date: 2010-02-01 08:48:20 +0100 (Mo, 01 Feb 2010) $<br />

*I ID : $Id: EeeP.h 51 2010-02-01 07:48:20Z dethrophes $<br />

*I<br />

*+=========================================================================<br />

*<br />

*/<br />

/* Structures for <strong>Embedded</strong> <strong>EEPROM</strong> */<br />

#ifndef __EEEP_H__<br />

#define __EEEP_H__<br />

#ifndef EEEP_UINT32_C<br />

# define EEEP_UINT8_C(x) ((uint8_t)(x))<br />

# define EEEP_UINT16_C(x) ((uint16_t)(x))<br />

# define EEEP_UINT32_C(x) ((uint32_t)(x))<br />

# define EEEP_LO_UINT8(x) EEEP_UINT8_C( (x)&UINT8_MAX )<br />

# define EEEP_LO_UINT16(x) EEEP_UINT16_C((x)&UINT16_MAX)<br />

# define EEEP_LO_UINT32(x) EEEP_UINT32_C((x)&UINT32_MAX)<br />

#endif<br />

#pragma pack(push, 1) /* push current alignment to stack */<br />

#pragma pack(1) /* set alignment to 1 byte boundary */<br />

/*<br />

* Detecting EeeP <strong>EEPROM</strong><br />

*<br />

* High Level Check<br />

* if(!memcmp(<br />

* &EeePEEP[0x01] ,<br />

* "3P" ,<br />

* 0x02<br />

* )<br />

* )<br />

* {<br />

* // Found EeeP <strong>EEPROM</strong><br />

* }<br />

*<br />

* Sample I2C Transfers<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 66 of 84


*<br />

* Device Address : 0xAE(0x57)<br />

* Index Type : Standard<br />

* StartAckAck<br />

* StartAckAckAckAckNak Stop<br />

*<br />

* Device Address : 0xAE(0x57)<br />

* Index Type : Extended<br />

* StartAckAckAck<br />

* StartAckAckAckAckNak Stop<br />

*<br />

*/<br />

#define EEEP_VER_MASK_VER EEEP_UINT8_C(0xF0)<br />

#define EEEP_VER_MASK_REV EEEP_UINT8_C(0x0F)<br />

#define EEEP_VER_GET_VER(x) EEEP_UINT8_C (((x)>>4)&0x0F )<br />

#define EEEP_VER_GET_REV(x) EEEP_UINT8_C (((x)>>0)&0x0F )<br />

#define EEEP_VER_CREATE(Version,Revision) (\<br />

EEEP_UINT8_C(\<br />

(((Version )&0x0F )


* | | |<br />

* +--------+------------------------+<br />

* | 4 | Std/Ext Index |<br />

* +--------+------------------------+<br />

* | 5 - 7 | Page Write Length/ |<br />

* | | Alignment |<br />

* | | 0 = 1 Byte |<br />

* | | 1 = 8 Byte |<br />

* | | 2 = 16 Byte |<br />

* | | 3 = 32 Byte |<br />

* | | 4 = 64 Byte |<br />

* | | 5 = 128 Byte |<br />

* | | 6 = 256 Byte |<br />

* | | 7 = 512 Byte |<br />

* +========+========================+<br />

*/<br />

#define EEEP_DEVICE_SIZE_MASK<br />

0x0F<br />

#define EEEP_DEVICE_TYPE_OFFSET 4<br />

#define EEEP_DEVICE_EXT_INDEX<br />

(1


*<br />

* Block Ids<br />

*<br />

*/<br />

#define EEEP_BLOCK_ID_UNUSED<br />

EEEP_UINT8_C(0x00)<br />

/*<br />

* 0xC0 -0xCF See Platform Specific Headers<br />

*<br />

*/<br />

#define EEEP_BLOCK_ID_VENDOR_SPECIFIC EEEP_UINT8_C(0xF0)<br />

#define EEEP_BLOCK_ID_EXP_<strong>EEPROM</strong> EEEP_UINT8_C(0xF1)<br />

/*<br />

* 0xE0 -0xEF See Platform Specific Headers<br />

*<br />

*/<br />

#define EEEP_BLOCK_ID_SMBIOS<br />

EEEP_UINT8_C(0xD0)<br />

#define EEEP_BLOCK_ID_LFP<br />

EEEP_UINT8_C(0xD1)<br />

#define EEEP_BLOCK_ID_CRC_CHK<br />

EEEP_UINT8_C(0xF2)<br />

#define EEEP_BLOCK_ID_IGNORE<br />

EEEP_UINT8_C(0xFF)<br />

#define EEEP_OFFSET_VALUE_EOL<br />

#define EEEP_OFFSET_VALUE_EOL_ALT<br />

EEEP_UINT16_C(0x0000)<br />

EEEP_UINT16_C(0xFFFF)<br />

/*<br />

* CRC Checksum Block<br />

*<br />

*/<br />

typedef struct EeePCRC16ChkBlock_s{<br />

DBlockIdHdr_t CDBHdr ; /* 0x00 Dynamic Block Header */<br />

uint8_t CrC16[2] ; /* 0x03 CRC16 Checksum */<br />

uint8_t Reserved0 ; /* 0x05 Alignment Byte */<br />

}EeePCRC16ChkBlock_t;<br />

typedef union EeePuint16u_u{<br />

uint8_t b[2];<br />

uint16_t n; /* Native Architecture Access */<br />

}EeePuint16u_t;<br />

typedef union EeePuint32u_u{<br />

uint8_t b[4];<br />

uint32_t n; /* Native Architecture Access */<br />

}EeePuint32u_t;<br />

typedef union EeePuint64u_u{<br />

uint8_t b[8];<br />

uint64_t n; /* Native Architecture Access */<br />

}EeePuint64u_t;<br />

typedef struct EeePEeePGUID_s{<br />

EeePuint32u_t a;<br />

EeePuint16u_t b[2];<br />

uint8_t c[8];<br />

}EeePGUID_t;<br />

typedef EeePuint16u_t SmbiosHandle_t;<br />

/*<br />

* DMI/SMBIOS Common Header Format<br />

*<br />

* see http://www.dmtf.org/standards/published_documents/DSP0134_2.6.1.pdf<br />

*/<br />

enum SMBIOS_BlockId_e{<br />

SMBIOS_TypeBIOS_INFORMATION = 0,<br />

SMBIOS_TypeSYSTEM_INFORMATION = 1,<br />

SMBIOS_TypeBASE_BOARD_MODULE_INFORMATION = 2,<br />

SMBIOS_TypeSYSTEM_ENCLOSURE_OR_CHASSIS = 3,<br />

SMBIOS_TypePROCESSOR_INFORMATION = 4,<br />

SMBIOS_TypeMEMORY_CONTROLLER_INFORMATION = 5,<br />

SMBIOS_TypeMEMORY_MODULE_INFORMATION = 6,<br />

SMBIOS_TypeCACHE_INFORMATION = 7,<br />

SMBIOS_TypePORT_CONNECTOR_INFORMATION = 8,<br />

SMBIOS_TypeSYSTEM_SLOTS = 9,<br />

SMBIOS_TypeON_BOARD_DEVICES_INFORMATION = 10,<br />

SMBIOS_TypeOEM_STRINGS = 11,<br />

SMBIOS_TypeSYSTEM_CONFIGURATION_OPTIONS = 12,<br />

SMBIOS_TypeBIOS_LANGUAGE_INFORMATION = 13,<br />

SMBIOS_TypeGROUP_ASSOCIATIONS = 14,<br />

SMBIOS_TypeSYSTEM_EVENT_LOG = 15,<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 69 of 84


SMBIOS_TypePHYSICAL_MEMORY_ARRAY = 16,<br />

SMBIOS_TypeMEMORY_DEVICE = 17,<br />

SMBIOS_Type32_BIT_MEMORY_ERROR_INFORMATION = 18,<br />

SMBIOS_TypeMEMORY_ARRAY_MAPPED_ADDRESS = 19,<br />

SMBIOS_TypeMEMORY_DEVICE_MAPPED_ADDRESS = 20,<br />

SMBIOS_TypeBUILT_IN_POINTING_DEVICE = 21,<br />

SMBIOS_TypePORTABLE_BATTERY = 22,<br />

SMBIOS_TypeSYSTEM_RESET = 23,<br />

SMBIOS_TypeHARDWARE_SECURITY = 24,<br />

SMBIOS_TypeSYSTEM_POWER_CONTROLS = 25,<br />

SMBIOS_TypeVOLTAGE_PROBE = 26,<br />

SMBIOS_TypeCOOLING_DEVICE = 27,<br />

SMBIOS_TypeTEMPERATURE_PROBE = 28,<br />

SMBIOS_TypeELECTRICAL_CURRENT_PROBE = 29,<br />

SMBIOS_TypeOUT_OF_BAND_REMOTE_ACCESS = 30,<br />

SMBIOS_TypeBOOT_INTEGRITY_SERVICES_ENTRY_POINT = 31,<br />

SMBIOS_TypeSYSTEM_BOOT_INFORMATION = 32,<br />

SMBIOS_Type64_BIT_MEMORY_ERROR_INFORMATION = 33,<br />

SMBIOS_TypeMANAGEMENT_DEVICE = 34,<br />

SMBIOS_TypeMANAGEMENT_DEVICE_COMPONENT = 35,<br />

SMBIOS_TypeMANAGEMENT_DEVICE_THRESHOLD_DATA = 36,<br />

SMBIOS_TypeMEMORY_CHANNEL = 37,<br />

SMBIOS_TypeIPMI_DEVICE_INFORMATION = 38,<br />

SMBIOS_TypeSYSTEM_POWER_SUPPLY = 39,<br />

SMBIOS_TypeINACTIVE = 126,<br />

SMBIOS_TypeEND_OF_TABLE = 127<br />

};<br />

typedef uint8_t SMBIOS_BlockId_t;<br />

typedef struct EeePSmbiosHdr_s{<br />

DBlockIdHdr_t CDBHdr ; /* 0x00 Dynamic Block Header */<br />

SMBIOS_BlockId_t Type ; /* 0x03 Structure Type */<br />

uint8_t Length ; /* 0x04 Specifies the length of<br />

* the formatted area of the<br />

* structure, starting at the<br />

* Type field. The length of the<br />

* structure’s string-set is not<br />

* included.<br />

*/<br />

SmbiosHandle_t Handle ; /* 0x05 Specifies the structure’s<br />

* handle, a unique 16-bit number<br />

* in the range 0 to 0FEFFh<br />

*/<br />

}EeePSmbiosHdr_t;<br />

/*<br />

* System Information<br />

*<br />

* see http://www.dmtf.org/standards/published_documents/DSP0134_2.6.1.pdf<br />

* Type 1 Block<br />

*/<br />

typedef struct EeePSystemInfo_s{<br />

EeePSmbiosHdr_t SDBHdr; /* 0x00 Smbios Dynamic Block Header */<br />

uint8_t Manufacturer ; /* 0x06 Number of ASCIIZ String */<br />

uint8_t ProductName ; /* 0x07 Number of ASCIIZ String */<br />

uint8_t Version ; /* 0x08 Number of ASCIIZ String */<br />

uint8_t SerialNumber ; /* 0x09 Number of ASCIIZ String */<br />

EeePGUID_t UUID ; /* 0x0A Universal Unique ID number. */<br />

uint8_t Reserved0 ; /* 0x1A Reserved Set to Zero */<br />

uint8_t SKU_Number ; /* 0x1B Number of ASCIIZ String */<br />

uint8_t Family ; /* 0x1C Number of ASCIIZ String */<br />

}EeePSystemInfo_t;<br />

/*<br />

* Base Board (or Module) Information<br />

*<br />

* see http://www.dmtf.org/standards/published_documents/DSP0134_2.6.1.pdf<br />

* Type 2 Block<br />

*/<br />

enum SMBIOS_BoardTypes_e{<br />

SMBIOS_BoardType_Unknown=0,<br />

SMBIOS_BoardType_Other,<br />

SMBIOS_BoardType_ServerBlade,<br />

SMBIOS_BoardType_ConnectivitySwitch,<br />

SMBIOS_BoardType_SystemManagementModule,<br />

SMBIOS_BoardType_ProcessorModule,<br />

SMBIOS_BoardType_IO_Module,<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 70 of 84


SMBIOS_BoardType_Memory_Module,<br />

SMBIOS_BoardType_DaughterBoard,<br />

SMBIOS_BoardType_Motherboard,<br />

SMBIOS_BoardType_ProcessorMemory_Module,<br />

SMBIOS_BoardType_Interconnect_Board<br />

};<br />

typedef uint8_t SMBIOS_BoardTypes_t;<br />

typedef struct EeePModuleInfo_s{<br />

EeePSmbiosHdr_t SDBHdr; /* 0x00 Smbios Dynamic Block Header */<br />

uint8_t Manufacturer ; /* 0x06 Number of ASCIIZ String */<br />

uint8_t Product ; /* 0x07 Number of ASCIIZ String */<br />

uint8_t Version ; /* 0x08 Number of ASCIIZ String */<br />

uint8_t SerialNumber ; /* 0x09 Number of ASCIIZ String */<br />

uint8_t AssetTag ; /* 0x0A Number of ASCIIZ String */<br />

uint8_t FeatureFlag<br />

; /* 0x0B A collection of<br />

* flags that identify<br />

* features of this<br />

* baseboard.<br />

* +=======+=========================+<br />

* | Bits | Descriptions |<br />

* +=======+=========================+<br />

* | 0 | Is Motherboard |<br />

* +-------+-------------------------+<br />

* | 1 | Requires Daughter Board |<br />

* +-------+-------------------------+<br />

* | 2 | Removable |<br />

* +-------+-------------------------+<br />

* | 3 | Replaceable |<br />

* +-------+-------------------------+<br />

* | 4 | Hot Swap Capable |<br />

* +-------+-------------------------+<br />

* | 5 - 7 | Reserved |<br />

* +=======+=========================+<br />

*/<br />

# define SMBIOS_IS_Motherboard EEEP_UINT8_C(1


SMBIOS_ChassisType_Unknown =0x02,<br />

SMBIOS_ChassisType_Desktop<br />

=0x03,<br />

SMBIOS_ChassisType_Low_Profile_Desktop<br />

=0x04,<br />

SMBIOS_ChassisType_Pizza_Box<br />

=0x05,<br />

SMBIOS_ChassisType_Mini_Tower<br />

=0x06,<br />

SMBIOS_ChassisType_Tower<br />

=0x07,<br />

SMBIOS_ChassisType_Portable<br />

=0x08,<br />

SMBIOS_ChassisType_Laptop<br />

=0x09,<br />

SMBIOS_ChassisType_Notebook<br />

=0x0A,<br />

SMBIOS_ChassisType_Hand_Held<br />

=0x0B,<br />

SMBIOS_ChassisType_Docking_Station<br />

=0x0C,<br />

SMBIOS_ChassisType_All_In_One<br />

=0x0D,<br />

SMBIOS_ChassisType_Sub_Notebook<br />

=0x0E,<br />

SMBIOS_ChassisType_Space_saving_Lunch_Box =0x0F,<br />

SMBIOS_ChassisType_Main_Server_Chassis<br />

=0x11,<br />

SMBIOS_ChassisType_Expansion_Chassis<br />

=0x12,<br />

SMBIOS_ChassisType_SubChassis<br />

=0x13,<br />

SMBIOS_ChassisType_Bus_Expansion_Chassis<br />

=0x14,<br />

SMBIOS_ChassisType_Peripheral_Chassis<br />

=0x15,<br />

SMBIOS_ChassisType_RAID_Chassis<br />

=0x16,<br />

SMBIOS_ChassisType_Rack_Mount_Chassis<br />

=0x17,<br />

SMBIOS_ChassisType_Sealed_case_PC<br />

=0x18,<br />

SMBIOS_ChassisType_Multi_system_chassis =0x19<br />

};<br />

typedef uint8_t ChassisTypes_t;<br />

typedef struct EeePChassisInfo_s{<br />

EeePSmbiosHdr_t SDBHdr; /* 0x00 Smbios Dynamic Block Header */<br />

uint8_t Manufacturer ; /* 0x06 Number of ASCIIZ String */<br />

ChassisTypes_t Type ; /* 0x07 ENUM */<br />

uint8_t Version ; /* 0x08 Number of ASCIIZ String */<br />

uint8_t SerialNumber ; /* 0x09 Number of ASCIIZ String */<br />

uint8_t AssetTagNumber ; /* 0x0A Number of ASCIIZ String */<br />

uint8_t Reserved0[4] ; /* 0x0B Reserved */<br />

EeePuint32u_t OEM ; /* 0x0F Contains OEM- or BIOS<br />

* vendor-specific information<br />

uint8_t Height<br />

*/<br />

; /* 0x13 The height of the<br />

* enclosure, in 'U's.<br />

*/<br />

uint8_t NumPowerCords ; /* 0x14 Identifies the number<br />

* of power cords associated with<br />

* the enclosure or chassis.<br />

*/<br />

uint8_t CElementCnt ; /* 0x15 Contained Element Count */<br />

uint8_t CElementSize ; /* 0x16 Contained Element Size */<br />

CCElement_t CElement[1]; /* 0x17 Contained Element(s) */<br />

}EeePChassisInfo_t;<br />

/*<br />

* Local Flat Panel(LFP) Data Block<br />

*<br />

*/<br />

typedef struct EeePLFPDataBlock_s{<br />

DBlockIdHdr_t CDBHdr ; /* 0x00 Dynamic Block Header */<br />

uint8_t Interface ; /* 0x03 Display Interface */<br />

# define EEEP_DISP_INT_LVDS EEEP_UINT8_C(0x02)<br />

# define EEEP_DISP_INT_SDVOB EEEP_UINT8_C(0x03)<br />

# define EEEP_DISP_INT_SDVOC EEEP_UINT8_C(0x04)<br />

# define EEEP_DISP_INT_DDI1 EEEP_UINT8_C(0x05)<br />

# define EEEP_DISP_INT_DDI2 EEEP_UINT8_C(0x06)<br />

# define EEEP_DISP_INT_DDI3 EEEP_UINT8_C(0x07)<br />

uint8_t RawData[1]; /* 0x04 Display Raw Data<br />

* DisplayID<br />

* EDID<br />

* UDS<br />

* EPI<br />

*/<br />

}EeePLFPDataBlock_t;<br />

/*<br />

* Vendor Specific Dynamic Block Header<br />

*<br />

*/<br />

typedef struct EeePVendBlockHdr_s{<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 72 of 84


DBlockIdHdr_t CDBHdr ; /* 0x00 Dynamic Block Header */<br />

uint8_t VendId[2] ; /* 0x03 Compressed ASCII PNPID */<br />

/* After This Point is only<br />

* Suggested<br />

*/<br />

uint8_t VendBlockId; /* 0x05 Vendor Specific Block Id */<br />

/*uint8_t VendData[1]; * 0x06 Vendor Data */<br />

}EeePVendBlockHdr_t;<br />

/*<br />

* Descriptor for Additional <strong>EEPROM</strong>S<br />

*<br />

* I.E. For Chassis/System/Base Board <strong>EEPROM</strong>s<br />

*/<br />

typedef struct EeePExtI2CDeviceDesc_s{<br />

DBlockIdHdr_t CDBHdr ; /* 0x00 Dynamic Block Header */<br />

uint8_t DeviceAddr[2]; /* 0x03 Encoded 7/10 Bit Device Address */<br />

uint8_t DeviceBus ; /* 0x05 Device Bus */<br />

# define EEEP_I2CBuSID_I2C EEEP_UINT8_C(0x00)<br />

# define EEEP_I2CBuSID_SMB EEEP_UINT8_C(0x01)<br />

# define EEEP_I2CBuSID_LVDS EEEP_UINT8_C(0x02)<br />

# define EEEP_I2CBuSID_DDI1 EEEP_UINT8_C(0x03)<br />

# define EEEP_I2CBuSID_DDI2 EEEP_UINT8_C(0x04)<br />

# define EEEP_I2CBuSID_DDI3 EEEP_UINT8_C(0x05)<br />

# define EEEP_I2CBuSID_SDVOB EEEP_UINT8_C(0x06)<br />

# define EEEP_I2CBuSID_SDVOC EEEP_UINT8_C(0x07)<br />

# define EEEP_I2CBuSID_CRT EEEP_UINT8_C(0x08)<br />

uint8_t DeviceDesc ; /* 0x06 Device Descriptor<br />

* +========+========================+<br />

* | Bits | Description |<br />

* +========+========================+<br />

* | 0 - 3 | Size 2^(8+n) Bytes |<br />

* | | (256


9.2 COM0EEP.h<br />

/*<br />

*<br />

*+=========================================================================<br />

*I Project Name: EApiDK <strong>Embedded</strong> Application Development Kit<br />

*+=========================================================================<br />

*I $HeadURL: https://eapidk.svn.sourceforge.net/svnroot/eapidk/trunk/include/COM0EEP.h $<br />

*+=========================================================================<br />

*I Copyright: Copyright (c) 2009, PICMG<br />

*I Author: John Kearney, John.Kearney@kontron.com<br />

*I<br />

*I License: All rights reserved. This program and the accompanying<br />

*I materials are licensed and made available under the<br />

*I terms and conditions of the BSD License which<br />

*I accompanies this distribution. The full text of the<br />

*I license may be found at<br />

*I http://opensource.org/licenses/bsd-license.php<br />

*I<br />

*I THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN<br />

*I "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF<br />

*I ANY KIND, EITHER EXPRESS OR IMPLIED.<br />

*I<br />

*I Description: COM0 R2.0 Specific Structures and Data<br />

*I<br />

*+-------------------------------------------------------------------------<br />

*I<br />

*I File Name : COM0EEP.h<br />

*I File Location : include<br />

*I Last committed : $Revision: 70 $<br />

*I Last changed by : $Author: dethrophes $<br />

*I Last changed date : $Date: 2010-06-20 03:27:02 +0200 (So, 20 Jun 2010) $<br />

*I ID : $Id: COM0EEP.h 70 2010-06-20 01:27:02Z dethrophes $<br />

*I<br />

*+=========================================================================<br />

*<br />

*/<br />

/* Structures for COM0 STDEEP */<br />

#ifndef __COM0EEP_H__<br />

#define __COM0EEP_H__<br />

#define COM0R20_M_EEP_DEV_ADDR 0xA0<br />

#define COM0R20_CB_EEP_DEV_ADDR 0xAE<br />

/*<br />

* Detecting COM0 R1.0 <strong>EEPROM</strong><br />

*<br />

* High Level Check<br />

* if(!memcmp(<br />

* &COM0EEP[0xE0] ,<br />

* "COMExpressConfig" ,<br />

* 0x10<br />

* )<br />

* )<br />

* {<br />

* // Found COM0R10 <strong>EEPROM</strong><br />

* }<br />

*<br />

* Sample I2C Transfer<br />

* Device Address : 0xAE(0x57)<br />

* Index Type : Standard<br />

* StartAckAck<br />

* StartAckAckAckAckAckAckAck<br />

* AckAckAckAckAckAck<br />

* AckAckAckNak<br />

Stop<br />

*<br />

*/<br />

/*<br />

* Detecting COM0 R2.0 Carrier Board <strong>EEPROM</strong><br />

*<br />

* High Level Check<br />

* if(!memcmp(<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 74 of 84


* &COM0EEP[0x06] ,<br />

* "Com0" ,<br />

* 0x04<br />

* )<br />

* )<br />

* {<br />

* // Found COM0R20 Carrier Board <strong>EEPROM</strong><br />

* }<br />

*<br />

* Sample I2C Transfer<br />

* Device Address : 0xAE(0x57)<br />

* Index Type : Extended<br />

* StartAckAckAck<br />

* StartAckAckAckAckNak Stop<br />

*<br />

* Detecting COM0 R2.0 Module <strong>EEPROM</strong><br />

*<br />

* High Level Check<br />

* if(!memcmp(<br />

* &COM0EEP[0x06] ,<br />

* "coM0" ,<br />

* 0x04<br />

* )<br />

* )<br />

* {<br />

* // Found COM0R20 Module <strong>EEPROM</strong><br />

* }<br />

*<br />

* Sample I2C Transfer<br />

* Device Address : 0xAE(0x57)<br />

* Index Type : Extended<br />

* StartAckAckAck<br />

* StartAckAckAckAckNak Stop<br />

*<br />

*/<br />

/* COM0 R2.0 Standard Revision */<br />

#define COM0R20_VER 2<br />

#define COM0R20_REVISION 0<br />

#define COM0R20_VERSION EEEP_VER_CREATE(COM0R20_VER, COM0R20_REVISION)<br />

/*<br />

* COM R2.0<br />

* Carrier Board <strong>EEPROM</strong> Header<br />

*<br />

*/<br />

typedef struct COM0R20_CB_s{<br />

EeePCmn_t EeePHdr ; /* 0x00 EeeP Common Header */<br />

uint8_t GenId[4] ; /* 0x06 "Com0" */<br />

#define COM0R20_CB_HEADER_ID "Com0"<br />

EeePUDId_t DevId ; /* 0x0C Unique Device Id */<br />

uint8_t CBType ; /* 0x10 Carrier Board Type */<br />

uint8_t SpecRev ; /* 0x11 COM0 <strong>Specification</strong> Revision<br />

* +=======+==================+<br />

* | Bits | Descriptions |<br />

* +=======+==================+<br />

* | 0 - 3 | Revision |<br />

* +-------+------------------+<br />

* | 4 - 7 | Version |<br />

* +=======+==================+<br />

uint8_t<br />

*/<br />

UsbDesc ; /* 0x12 USB Descriptor Byte<br />

*<br />

* +=======+===============================+<br />

* | Bits | Descriptions |<br />

* +=======+===============================+<br />

* | 0 - 3 | Count of High Speed Ports |<br />

* +-------+-------------------------------+<br />

* | 4 - 6 | Count of Super Speed Ports |<br />

* +-------+-------------------------------+<br />

* | 7 | Reserved |<br />

* +=======+===============================+<br />

*/<br />

# define COM0R20_USBSS_PCNT_MASK EEEP_UINT8_C(0x07)<br />

# define COM0R20_USBSS_PCNT_OFFSET EEEP_UINT8_C(0x04)<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 75 of 84


# define COM0R20_USB_PCNT_MASK EEEP_UINT8_C(0x0F)<br />

# define COM0R20_USB_PCNT_OFFSET EEEP_UINT8_C(0x00)<br />

uint8_t SasDesc; /* 0x13 SATA/SAS Descriptor Byte<br />

*<br />

* +=======+=====+=======+===================+<br />

* | SAS/ | Bit | Value | Meaning |<br />

* | SATA | | | |<br />

* | Port | | | |<br />

* +=======+=====+=======+===================+<br />

* | 0 | 0 | 0 | Not Implemented |<br />

* | | +-------+-------------------+<br />

* | | | 1 | Implemented |<br />

* | +-----+-------+-------------------+<br />

* | | 1 | 0 | SATA Device |<br />

* | | +-------+-------------------+<br />

* | | | 1 | SAS Device |<br />

* +-------+-----+-------+-------------------+<br />

* | 1 | 2 | 0 | Not Implemented |<br />

* | | +-------+-------------------+<br />

* | | | 1 | Implemented |<br />

* | +-----+-------+-------------------+<br />

* | | 3 | 0 | SATA Device |<br />

* | | +-------+-------------------+<br />

* | | | 1 | SAS Device |<br />

* +-------+-----+-------+-------------------+<br />

* | 2 | 4 | 0 | Not Implemented |<br />

* | | +-------+-------------------+<br />

* | | | 1 | Implemented |<br />

* | +-----+-------+-------------------+<br />

* | | 5 | 0 | SATA Device |<br />

* | | +-------+-------------------+<br />

* | | | 1 | SAS Device |<br />

* +-------+-----+-------+-------------------+<br />

* | 3 | 6 | 0 | Not Implemented |<br />

* | | +-------+-------------------+<br />

* | | | 1 | Implemented |<br />

* | +-----+-------+-------------------+<br />

* | | 7 | 0 | SATA Device |<br />

* | | +-------+-------------------+<br />

* | | | 1 | SAS Device |<br />

* +-------+-----+-------+-------------------+<br />

*/<br />

# define COM0R20_SAS_CONNECTOR_PRESENT EEEP_UINT8_C(1


uint8_t MiscIo1; /* 0x15 Miscellaneous I/O Descriptor Byte 1<br />

*<br />

* +=======+=======+========================+<br />

* | Bits | Value | Meaning |<br />

* +=======+=======+========================+<br />

* | 0 | 0 | WAKE0 Not Implemented |<br />

* | +-------+------------------------+<br />

* | | 1 | WAKE0 Implemented |<br />

* +-------+-------+------------------------+<br />

* | 1 | 0 | WAKE1 Not Implemented |<br />

* | +-------+------------------------+<br />

* | | 1 | WAKE1 Implemented |<br />

* +-------+-------+------------------------+<br />

* | 2 | 0 | SUS Not Implemented |<br />

* | +-------+------------------------+<br />

* | | 1 | SUS Implemented |<br />

* +-------+-------+------------------------+<br />

* | 3 | 0 | BATLOW Not Implemented |<br />

* | +-------+------------------------+<br />

* | | 1 | BATLOW Implemented |<br />

* +-------+-------+------------------------+<br />

* | 4 | 0 | THRMP Not Implemented |<br />

* | +-------+------------------------+<br />

* | | 1 | THRMP Implemented |<br />

* +-------+-------+------------------------+<br />

* | 5 | 0 | EBROM Not Implemented |<br />

* | +-------+------------------------+<br />

* | | 1 | EBROM Implemented |<br />

* +-------+-------+------------------------+<br />

* | 6 | 0 | WDT Not Implemented |<br />

* | +-------+------------------------+<br />

* | | 1 | WDT Implemented |<br />

* +-------+-------+------------------------+<br />

* | 7 | 0 | AC97 Not Implemented |<br />

* | +-------+------------------------+<br />

* | | 1 | AC97 Implemented |<br />

* +-------+-------+------------------------+<br />

*/<br />

# define COM0R20_WAKE0_PRESENT EEEP_UINT8_C(1


* | 6 | 0 | SER1 Not Implemented |<br />

* | +-------+------------------------+<br />

* | | 1 | SER1 Implemented |<br />

* +-------+-------+------------------------+<br />

* | 7 | 0 | Reserved |<br />

* +=======+================================+<br />

*/<br />

# define COM0R20_SSC_PRESENT EEEP_UINT8_C(1


# define COM0R20_DDI0_OFFSET EEEP_UINT8_C(0x0)<br />

# define COM0R20_DDI1_OFFSET EEEP_UINT8_C(0x4)<br />

# define COM0R20_DDI2_OFFSET EEEP_UINT8_C(0x0)<br />

# define COM0R20_DDI3_OFFSET EEEP_UINT8_C(0x4)<br />

uint8_t<br />

PCIeGen[8]; /* 0x19 PCI Express lane Generation.<br />

* 2 Bits Per lane<br />

* +=======+=======+======================+<br />

* | Bits | Value | Meaning |<br />

* +=======+=======+======================+<br />

* | 0 - 1 | 0 | Gen 1 |<br />

* | +-------+----------------------+<br />

* | | 1 | Gen 2 |<br />

* | +-------+----------------------+<br />

* | | 2 | Gen 3 |<br />

* | +-------+----------------------+<br />

* | | 3 | Reserved Unused |<br />

* +-------+-------+----------------------+<br />

*/<br />

# define COM0R20_PCIe_GEN1 EEEP_UINT8_C(0)<br />

# define COM0R20_PCIe_GEN2 EEEP_UINT8_C(1)<br />

# define COM0R20_PCIe_GEN3 EEEP_UINT8_C(2)<br />

uint8_t<br />

LaneMap[16];/* 0x21 Lane Information<br />

* +=======+=======+======================+<br />

* | Bits | Value | Meaning |<br />

* +=======+=======+======================+<br />

* | 0 - 2 | 0 | Not Implemented |<br />

* | +-------+----------------------+<br />

* | | 1 | x1 Link Width |<br />

* | +-------+----------------------+<br />

* | | 2 | x2 Link Width |<br />

* | +-------+----------------------+<br />

* | | 3 | x4 Link Width |<br />

* | +-------+----------------------+<br />

* | | 4 | x8 Link Width |<br />

* | +-------+----------------------+<br />

* | | 5 | x16 Link Width |<br />

* | +-------+----------------------+<br />

* | | 6 | x32 Link Width |<br />

* | +-------+----------------------+<br />

* | | 7 | Reserved |<br />

* +-------+-------+----------------------+<br />

* | 3 | Reserved set to 0 |<br />

* +-------+------------------------------+<br />

*/<br />

# define COM0R20_PCIe_LANE_WIDTH_MASK EEEP_UINT8_C(0x07)<br />

}COM0R20_CB_t;<br />

/*<br />

* PCI Express Lane Mapping<br />

*<br />

* Example 1<br />

* Standard Type 2<br />

* 6 x1<br />

* 1 x16<br />

* +======+=======+==================+<br />

* | Byte | Value | Description |<br />

* +======+=======+==================+<br />

* | 00 | 11 | x1 Lane 00 & 01 |<br />

* | 01 | 11 | x1 Lane 02 & 03 |<br />

* | 02 | 11 | x1 Lane 04 & 05 |<br />

* | 03 | 00 | Unused |<br />

* | 04 | 00 | Unused |<br />

* | 05 | 00 | Unused |<br />

* | 06 | 00 | Unused |<br />

* | 07 | 00 | Unused |<br />

* | 08 | 55 | x16 Lane 16 - 31 |<br />

* | 09 | 55 | x16 Lane 16 - 31 |<br />

* | 10 | 55 | x16 Lane 16 - 31 |<br />

* | 11 | 55 | x16 Lane 16 - 31 |<br />

* | 12 | 55 | x16 Lane 16 - 31 |<br />

* | 13 | 55 | x16 Lane 16 - 31 |<br />

* | 12 | 55 | x16 Lane 16 - 31 |<br />

* | 14 | 55 | x16 Lane 16 - 31 |<br />

* | 15 | 55 | x16 Lane 16 - 31 |<br />

* +======+=======+==================+<br />

*<br />

* Example 2<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 79 of 84


* Type 2<br />

* 1 x4<br />

* 2 x1<br />

* 1 x16<br />

* +======+=======+==================+<br />

* | Byte | Value | Description |<br />

* +======+=======+==================+<br />

* | 00 | 33 | x4 Lane 00 - 03 |<br />

* | 01 | 33 | x4 Lane 00 - 03 |<br />

* | 02 | 11 | x1 Lane 04 & 05 |<br />

* | 03 | 00 | Unused |<br />

* | 04 | 00 | Unused |<br />

* | 05 | 00 | Unused |<br />

* | 06 | 00 | Unused |<br />

* | 07 | 00 | Unused |<br />

* | 08 | 55 | x16 Lane 16 - 31 |<br />

* | 09 | 55 | x16 Lane 16 - 31 |<br />

* | 10 | 55 | x16 Lane 16 - 31 |<br />

* | 11 | 55 | x16 Lane 16 - 31 |<br />

* | 12 | 55 | x16 Lane 16 - 31 |<br />

* | 13 | 55 | x16 Lane 16 - 31 |<br />

* | 12 | 55 | x16 Lane 16 - 31 |<br />

* | 14 | 55 | x16 Lane 16 - 31 |<br />

* | 15 | 55 | x16 Lane 16 - 31 |<br />

* +======+=======+==================+<br />

*<br />

* Example 3<br />

* Type 2<br />

* 2 x2<br />

* 2 x1<br />

* 4 x4<br />

* +======+=======+==================+<br />

* | Byte | Value | Description |<br />

* +======+=======+==================+<br />

* | 00 | 22 | x2 Lane 00 - 01 |<br />

* | 01 | 11 | x1 Lane 02 & 03 |<br />

* | 02 | 00 | Unused |<br />

* | 03 | 00 | Unused |<br />

* | 04 | 00 | Unused |<br />

* | 05 | 00 | Unused |<br />

* | 06 | 00 | Unused |<br />

* | 07 | 00 | Unused |<br />

* | 08 | 33 | x4 Lane 16 - 19 |<br />

* | 09 | 33 | x4 Lane 16 - 19 |<br />

* | 10 | 33 | x4 Lane 20 - 23 |<br />

* | 11 | 33 | x4 Lane 20 - 23 |<br />

* | 12 | 33 | x4 Lane 24 - 27 |<br />

* | 13 | 33 | x4 Lane 24 - 27 |<br />

* | 14 | 33 | x4 Lane 28 - 31 |<br />

* | 15 | 33 | x4 Lane 28 - 31 |<br />

* +======+=======+==================+<br />

*<br />

*/<br />

/*<br />

* COM R2.0<br />

* Module <strong>EEPROM</strong> Header<br />

*<br />

*/<br />

typedef struct COM0R20_M_s{<br />

EeePCmn_t EeePHdr ; /* 0x00 EeeP Common Header */<br />

uint8_t GenId[4] ; /* 0x06 "coM0" */<br />

#define COM0R20_M_HEADER_ID "coM0"<br />

EeePUDId_t DevId ; /* 0x0A Unique Device Id */<br />

uint8_t MType ; /* 0x10 Module Type */<br />

uint8_t<br />

SpecRev ; /* 0x11 COM0 <strong>Specification</strong> Revision<br />

* +=======+==================+<br />

* | Bits | Descriptions |<br />

* +=======+==================+<br />

* | 0 - 3 | Revision |<br />

* +-------+------------------+<br />

* | 4 - 7 | Version |<br />

* +=======+==================+<br />

*/<br />

/*<br />

* Module Fixed Offset Information<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 80 of 84


*<br />

*/<br />

}COM0R20_M_t;<br />

#define COM0R20_BLOCK_ID_EXP_CARD_DESC<br />

#define COM0R20_BLOCK_ID_SERIO_DESC<br />

EEEP_UINT8_C(0xE0)<br />

EEEP_UINT8_C(0xE1)<br />

/*<br />

* Express Card Slot Descriptor<br />

*<br />

*/<br />

typedef struct ExpCardBlock_s{<br />

DBlockIdHdr_t DBHdr ; /* 0x00 Dynamic Block Header */<br />

uint8_t ExpressCardNumber ; /* 0x03 0 - 1 */<br />

uint8_t ComExpressPort<br />

; /* 0x04<br />

* +=======+==================+<br />

* | Bits | Descriptions |<br />

* +=======+==================+<br />

* | 0 - 4 | PCI Express Port |<br />

* | | Mapping. |<br />

* | | Port Starting |<br />

* | | Lane. |<br />

* | | 0 - 31 |<br />

* +-------+------------------+<br />

* | 5 - 7 | USB Port Mapping |<br />

* | | 0 - 7 |<br />

* +=======+==================+<br />

*/<br />

uint8_t SwitchDevFuncAddr[1]; /* 0x05 An Array of Port<br />

* Device/Function<br />

* Addresses Terminated<br />

* with 0xFF<br />

* +=======+==================+<br />

* | Bits | Descriptions |<br />

* +=======+==================+<br />

* | 0 - 2 | Function Number |<br />

* +-------+------------------+<br />

* | 3 - 7 | Device Number |<br />

* +=======+==================+<br />

*/<br />

# define COM0R20_EXPCARD_MAP_EOL EEEP_UINT8_C(0xFF)<br />

}ExpCardBlock_t;<br />

/*<br />

* Serial/COM Port Descriptor<br />

*<br />

*/<br />

typedef struct SerPortCfgBlock_s{<br />

DBlockIdHdr_t DBHdr ; /* 0x00 Dynamic Block Header */<br />

uint8_t SerIRQ<br />

; /* 0x03<br />

* +=======+==================+<br />

* | Bits | Descriptions |<br />

* +=======+==================+<br />

* | 0 - 3 | Serial Port 0 IRQ|<br />

* | | 0 Auto |<br />

* | | 1 No IRQ |<br />

* | | 2 Reserved |<br />

* | | 3 IRQ 3 |<br />

* | | 4 IRQ 4 |<br />

* | | 5 IRQ 5 |<br />

* | | 6 IRQ 6 |<br />

* | | 7 IRQ 7 |<br />

* | | 8 IRQ 8 |<br />

* | | 9 IRQ 9 |<br />

* | | 10 IRQ 10 |<br />

* | | 11 IRQ 11 |<br />

* | | 12 IRQ 12 |<br />

* | | 13 IRQ 13 |<br />

* | | 14 IRQ 14 |<br />

* | | 15 IRQ 15 |<br />

* +-------+------------------+<br />

* | 4 - 7 | Serial Port 1 IRQ|<br />

* | | 0 Auto |<br />

* | | 1 No IRQ |<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 81 of 84


* | | 2 Reserved |<br />

* | | 3 IRQ 3 |<br />

* | | 4 IRQ 4 |<br />

* | | 5 IRQ 5 |<br />

* | | 6 IRQ 6 |<br />

* | | 7 IRQ 7 |<br />

* | | 8 IRQ 8 |<br />

* | | 9 IRQ 9 |<br />

* | | 10 IRQ 10 |<br />

* | | 11 IRQ 11 |<br />

* | | 12 IRQ 12 |<br />

* | | 13 IRQ 13 |<br />

* | | 14 IRQ 14 |<br />

* | | 15 IRQ 15 |<br />

* +=======+==================+<br />

*/<br />

uint8_t Ser0BaseAddr[2] ; /* 0x04 Serial Port 0<br />

* +=======+=======+==================+<br />

* | Byte | Bits | Descriptions |<br />

* +=======+=======+==================+<br />

* | 0 | 0 - 7 | Bits 8-15 of |<br />

* | | | Base Address |<br />

* +-------+-------+------------------+<br />

* | 1 | 0 - 2 | Reserved set to 0|<br />

* +-------+-------+------------------+<br />

* | 1 | 3 - 7 | Bits 3-7 of |<br />

* | | | Base Address |<br />

* +=======+=======+==================+<br />

*/<br />

uint8_t Ser1BaseAddr[2] ; /* 0x06 Serial Port 1<br />

* +=======+=======+==================+<br />

* | Byte | Bits | Descriptions |<br />

* +=======+=======+==================+<br />

* | 0 | 0 - 7 | Bits 8-15 of |<br />

* | | | Base Address |<br />

* +-------+-------+------------------+<br />

* | 1 | 0 - 2 | Reserved set to 0|<br />

* +-------+-------+------------------+<br />

* | 1 | 3 - 7 | Bits 3-7 of |<br />

* | | | Base Address |<br />

* +=======+=======+==================+<br />

*/<br />

}SerPortCfgBlock_t;<br />

#endif /* __COM0EEP_H__ */<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 82 of 84


10 Sample Code<br />

See http://eapidk.svn.sourceforge.net/viewvc/eapidk/trunk/apps/EeePProg/.<br />

There is a sample tool provided as a part of the EApiDK test bench which supports all blocks<br />

described in this document. It supports generation and programing of the EEP <strong>EEPROM</strong> Conent.<br />

To Check out the EApiDK use<br />

svn co https://eapidk.svn.sourceforge.net/svnroot/eapidk/trunk<br />

The Sample tool is in the sub folder apps/EeePProg.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 83 of 84


11 Revision History<br />

Table 11-1: Document Revision History<br />

Revision Date Notes<br />

D0.00 Jul 5, 09 Initial Version<br />

D0.01 Jul 10, 09 Improved Format<br />

D0.02 Jul 16, 09 Improved Wording<br />

D0.03 Oct.01.09 Reworked in accordance with Feedback.<br />

D0.04 Oct.05.09 Improved & Expanded Sample Contents.<br />

D0.05 Oct.05.09 Improved for Architecture independent Big-endian Access.<br />

Added More Block definitions.<br />

Added Device Flavor ID, to allow for stuffing options.<br />

D0.06 Oct.14.09 Added Line Numbers.<br />

Improved Tables.<br />

Other minor improvements.<br />

D0.07 Oct.16.09 Cleaned up format etc, to look more PICMG.<br />

Started Calling EeeP<br />

Renamed Document<br />

Changed Block Sizes to Words<br />

D0.08 Oct.20.09 General Cleanup<br />

D0.09 Fixed Footer consistency page numbering issue.<br />

Improved various minor formatting issues<br />

Expanded and redefined SMBIOS Structure information. Improved Flexibility, and made it<br />

easier to adopt the structures in the system.<br />

D0.10 Dec.02.09 Added Support for PCIe Gen 3 ' 5.1.2.12 PCI Express Lane Generation Descriptor Data<br />

Structure(PCIeGen)' on page 27<br />

Redefined Express Card mapping to Device function instead of Port Number. ' 6.2.2.4<br />

6.2.2.4Express Port Device Function Addresses.' on page 35.<br />

Expanded ' 2 General' on page 15<br />

Moved Assembler sample code to ' 8.3 Assembler Sample Code' on page 64.<br />

Added<br />

• 2.2.1 Multi-Byte Variables on page 15.<br />

• 2.2.2 Structure Packing on page 15.<br />

Deleted Reference to COM_0 section in ' 5.1.2.6 USB Descriptor Byte(UsbDesc)' on page<br />

21.<br />

Updated Header Files<br />

D0.11 Mar.01.2010 Added references to SMBios & DMI specifications '1.7Applicable Documents and<br />

Standards' on page 13.<br />

Fixed Content Error in ' 5.1.2.9 Miscellaneous I/O Descriptor Byte(MiscIo1)' on page 24.<br />

Expanded 'Table 5-4: Miscellaneous I/O Descriptor Byte' on page 25 to include Serial, Lid<br />

swithc, sleep button and Fan.<br />

Added ' 6.3 Serial Port Configuration Block' on page 36.<br />

Added GenId to ' 5.3 Expansion <strong>EEPROM</strong> Header' on page 30.<br />

Updated Header Files.<br />

• 9.1 EeeP.h.<br />

• 9.2 COM0EEP.h.<br />

D0.12 June.20.2010 Removed Serial Port 3 from 6.3 Serial Port Configuration Block'' on page 36 and '<br />

5.1.2.10 Miscellaneous I/O Descriptor Byte 2(MiscIo2)' on page 26.<br />

Added DDI0 to 5.1.2.11 'Digital Display Interface Descriptor Bytes(DDIDesc)' on page 26,<br />

' 7.1.1 COM0R20 Type 2 Carrier Board With Expansion <strong>EEPROM</strong>' on page 51, ' 7.1.2<br />

COM0R20 Type 2 Carrier Board' on page 54.<br />

Updated Header Files.<br />

• 9.1 EeeP.h.<br />

• 9.2 COM0EEP.h.<br />

Added ' 6.1.3 Parse Order / Block Priority' on page 32.<br />

Cleaned up shall should may useage.<br />

D0.13 June..23.2010 Removed Contributers Section.<br />

PICMG® EEEP R1.0 <strong>Embedded</strong> <strong>EEPROM</strong> <strong>Specification</strong>, August 8, 2010 page 84 of 84

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!