Designer’s
Handbook 23
6.
The
System
ID
Block
The
BIOS
supports
a
system
identification
block
to
be
placed
at
the
top
of
flash
memory.
Identification
information
for
each
device
can
be
placed
in
it
for
access
by
the
BIOS,
flash
driver,
and
users.
This
block
will
contain
specific
part
numbers
for
the
flash
and
RAM
de-
vices
installed,
the
product’s
serial
number,
Media
Access
Control
(MAC)
address
if
an
Ethernet
device,
and
so
on.
In
addition,
the
ID
block
is
designed
with
future
expansion
in
mind
by
including
a
table
version
number
and
storing
the
block’s
size
in
bytes
within
the
block
itself.
6.1
Definition
The
following
global
struct
is
defined
in
IDBLOCK.LIB
and
loaded
from
the
flash
device
during
BIOS
startup.
Users
can
access
this
struct
in
RAM
if
they
need
information
from
it.
The
particular
definition
below
is
for
a
128-byte
ID
block;
the
actual
size
can
vary
ac-
cording
to
the
value
in
idBlockSize.
The
reserved[]
field
will
expand
and/or
shrink
to
compensate
for
the
change
in
size.
typedef struct {
int tableVersion; // ver. num for this table layout
int productID; // Z-World part #
int vendorID; //1=Z-World
char timestamp[7]; // YY/M/D H:M:S
long flashID; // Z-World part #
int flashType; // Write method
int flashSize; // in 1000h pages
int sectorSize; // size of flash sector in bytes
int numSectors; // number of sectors
int flashSpeed; // in nanoseconds
long flash2ID; // Z-World part #, 2nd flash
int flash2Type; // Write method, 2nd flash
int flash2Size; // in 1000h pages, 2nd flash
int sector2Size; // byte size of 2nd flash's sectors
int num2Sectors; // number of sectors
int flash2Speed; // in nanoseconds, 2nd flash
long ramID; // Z-World part #
int ramSize; // in 1000h pages
int ramSpeed; // in nanoseconds
int cpuID; // CPU type identification
long crystalFreq; // in MHz
char serialNumber[24]; // device serial number
char productName[30]; // null-terminated string
char reserved[1]; // reserved 4 later use - size can
// grow
long idBlockSize; // size of the SysIDBlock struct
int userBlockSize; // size of user block (directly
// below ID block)
int userBlockLoc; // offset of start of user block
// from this block