eisa(D4) eisa(D4)
NAME
eisa_slotinfo_t, eisa_funcinfo_t - EISA bus slot information
and function block data structures
SYNOPSIS
#include <sys/eisa.h>
#include <sys/ddi.h>
DESCRIPTION
EISA bus device configuration space is composed of two
structures: slot specific information, given by the
eisa_slotinfo_t structure, and function-specific information,
given by the eisa_funcinfo_t structure. There may be multiple
functions per slot.
USAGE
Structure Definitions
The eisa_slotinfo_t structure holds slot-specific information
as returned by the EISA int 15h ``read slot'' BIOS call. The
eisa_funcinfo_t structure holds function-specific information
as returned by the EISA int 15h ``read func'' BIOS call.
These structures are defined below:
#pragma pack(1)
/*
* Size of each function configuration block.
*/
#define EISA_MAX_SELECTIONS 26
#define EISA_MAX_TYPE 80
#define EISA_MAX_MEMORY 9
#define EISA_MAX_IRQ 7
#define EISA_MAX_DMA 4
#define EISA_MAX_PORT 20
#define EISA_MAX_INIT 60
#define EISA_MAX_DATA 203
/*
* Returned information from an INT 15h call "Read Slot" (AH=D8h, AL=0).
*/
typedef struct {
uchar_t boardid[4]; /* Compressed board ID */
ushort_t revision; /* Utility version */
uchar_t functions; /* Number of functions */
struct {
Copyright 1994 Novell, Inc. Page 1
eisa(D4) eisa(D4)
uchar_t type :1, /* Type string present */
memory :1, /* Memory configuration present */
irq :1, /* IRQ configuration present */
dma :1, /* DMA configuration present */
port :1, /* Port configuration present */
init :1, /* Port initialization present */
data :1, /* Free form data */
disable :1; /* Function is disabled */
} fib; /* Function information byte */
ushort_t checksum; /* CFG checksum */
struct {
ushort_t cpid :4, /* Duplicate ID number */
type :2, /* Slot type */
readid :1, /* Readable ID */
dups :1, /* Duplicates exist */
disable :1, /* Board disable is supported */
IOcheck :1, /* EISA I/O check supported */
:5, /* Reserved */
partial :1; /* Configuration incomplete */
} dupid; /* Duplicate ID information */
} eisa_slotinfo_t;
#define EISA_SLOTINFO_SIZE (sizeof(eisa_slotinfo_t))
#define EISA_EXP_SLOT 0x00 /* expansion slot */
#define EISA_EMB_SLOT 0x01 /* embedded slot */
#define EISA_VIR_SLOT 0x02 /* virtual slot */
/*
* Standard Function Configuration Data Block Structure (size = 320 bytes).
*
* Returned information from an INT 15h call "Read Function" (AH=D8h, AL=01h).
*/
typedef struct {
uchar_t boardid[4]; /* Compressed board ID */
/*
* Duplicate ID information byte format. (total bytes = 2, offset = 0x4)
*/
struct {
ushort_t cpid :4, /* Duplicate ID number */
type :2, /* Slot type */
Copyright 1994 Novell, Inc. Page 2
eisa(D4) eisa(D4)
readid :1, /* Readable ID */
dups :1, /* Duplicates exist */
disable :1, /* Board disable is supported */
IOcheck :1, /* EISA I/O check supported */
:5, /* Reserved */
partial :1; /* Configuration incomplete */
} dupid; /* 0x04: Duplicate ID information */
uchar_t ovl_minor; /* Minor revision of .OVL code */
uchar_t ovl_major; /* Major revision of .OVL code */
uchar_t selects[EISA_MAX_SELECTIONS]; /* Selections */
/*
* Function information byte. (total bytes = 1, offset = 0x22)
*/
struct {
uchar_t type :1, /* Type string present */
memory :1, /* Memory configuration present */
irq :1, /* IRQ configuration present */
dma :1, /* DMA configuration present */
port :1, /* Port configuration present */
init :1, /* Port initialization present */
data :1, /* Free form data */
disable :1; /* Function is disabled */
} fib; /* 0x22: Function information byte */
uchar_t type[EISA_MAX_TYPE]; /* Function type/subtype */
/*
* Function block configuration resource data definition.
*/
union {
/*
* Configuration resource data definition.
*/
struct {
/*
* Memory Configuration Info. (total bytes = 63, offset = 0x73)
*/
struct {
struct {
uchar_t write :1, /* Memory is read only */
cache :1, /* Memory is cached */
:1, /* Reserved */
Copyright 1994 Novell, Inc. Page 3
eisa(D4) eisa(D4)
type :2, /* Memory type */
share :1, /* Shared Memory */
:1, /* Reserved */
more :1; /* More entries follow */
} config;
struct {
uchar_t width :2, /* Data path size */
decode :2; /* Address decode */
} datapath;
uchar_t start[3]; /* Start addr DIV 100h */
ushort_t size; /* Mem size in 1K bytes */
} memory[EISA_MAX_MEMORY]; /* Memory conf. */
/*
* IRQ Configuration Info. (total bytes = 14, offset = 0x82)
*/
struct {
ushort_t line :4, /* IRQ line */
:1, /* Reserved */
trigger :1, /* Trigger (EGDE=0, LEVEL=1) */
share :1, /* Sharable */
more :1, /* More follow */
:8; /* Reserved */
} irq[EISA_MAX_IRQ]; /* IRQ conf. */
/*
* DMA Channel Description. (total bytes = 8, offset = 0xc0)
*/
struct {
ushort_t channel :3, /* DMA channel number */
:3, /* Reserved */
share :1, /* Shareable */
more :1, /* More entries follow */
:2, /* Reserved */
width :2, /* Transfer size */
timing :2, /* Transfer timing */
:2; /* Reserved */
} dma[EISA_MAX_DMA]; /* 0xc0: DMA conf. */
/*
* I/O port info. (total bytes = 60, offset = 0xc8)
*/
struct {
uchar_t count :5, /* No.of sequential ports - 1 */
:1, /* Reserved */
share :1, /* Shareable */
Copyright 1994 Novell, Inc. Page 4
eisa(D4) eisa(D4)
more :1; /* More entries follow */
ushort_t address; /* IO port address */
} port[EISA_MAX_PORT]; /* PORT conf. */
/*
* Initialization Data (total bytes = 60, offset = 0x104)
*/
union {
struct {
uchar_t type :2, /* Port type */
mask :1, /* Apply mask */
:4, /* Reserved */
more :1; /* More entries follow */
ushort_t port; /* Port address */
union {
struct {
uchar_t value; /* Byte to write */
} bv;
struct {
uchar_t value; /* Byte to write */
uchar_t mask; /* Mask to apply */
} bvm;
struct {
ushort_t value; /* Word to write */
} wv;
struct {
ushort_t value; /* Word to write */
ushort_t mask; /* Mask to apply */
} wvm;
struct {
ulong_t value; /* Dword to write */
} dv;
struct {
ulong_t value; /* Dword to write */
ulong_t mask; /* Mask to apply */
} dvm;
} vm;
} initform[5]; /* EISA_MAX_INIT / 11 */
uchar_t initdata[EISA_MAX_INIT];
Copyright 1994 Novell, Inc. Page 5
eisa(D4) eisa(D4)
} init; /* INIT info. */
} rd; /* Resource Data */
uchar_t freeform[EISA_MAX_DATA + 1];
/* Free format */
} fd; /* Function Data */
} eisa_funcinfo_t;
/*
* EISA Function Information aliases.
*/
#define eisa_memory fd.rd.memory
#define eisa_irq fd.rd.irq
#define eisa_dma fd.rd.dma
#define eisa_port fd.rd.port
#define eisa_init fd.rd.init
#define eisa_freeform fd.freeform
#define EISA_FUNCINFO_SIZE (sizeof(eisa_funcinfo_t))
#pragma pack()
REFERENCES
cm_read_devconfig(D3), cm_write_devconfig(D3), devconfig(D5),
BCPR EISA Specification, Version 3.12
NOTICES
Portability
AT-compatible architectures
Copyright 1994 Novell, Inc. Page 6