cis_handlers.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1995-2001 by Sun Microsystems, Inc.
* All rights reserved.
*/
#ifndef _CIS_HANDLERS_H
#define _CIS_HANDLERS_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
/*
* This is the CIS tuple handler header file.
*
* Each tuple that we recognize and are prepared to handle is assigned a
* cistpl_callout_t structure. This lets us specify a handler for
* this tuple, as well as flags that describe this tuple and which
* are used by the CIS interpreter and tuple parser.
*/
typedef struct cistpl_callout_t {
cisdata_t type; /* type of tuple */
cisdata_t subtype; /* only used for CISTPL_FUNCE */
uint32_t flags; /* misc flags */
uint32_t (*handler)(); /* tuple handler */
char *text; /* name of tuple */
} cistpl_callout_t;
/*
* Flags that are used by a tuple handler to specify what action it
* should perform.
*/
#define HANDTPL_NOERROR 0x000000000 /* no error */
#define HANDTPL_SET_FLAGS 0x000000001 /* set tuple flags */
#define HANDTPL_COPY_DONE 0x000000002 /* tuple data copy is done */
#define HANDTPL_PARSE_LTUPLE 0x000000004 /* parse tuple, return opt data */
#define HANDTPL_RETURN_NAME 0x000000008 /* return tuple name string */
/*
* This flag is returned by tuple handlers if they encounter an error. It
* is returned by cis_list_lcreate if any of the tuple handlers have
* return an error while processing the CIS.
*
* Note that the following bit is reserved:
* #define BAD_CIS_ADDR 0x080000000
* It appears in cis.h and is used to indicate that cis_list_create
* tried to read past the end of the mapped in CIS space.
*/
#define HANDTPL_ERROR 0x001000000 /* handler returned an error */
/*
* General-use constants and macros that aren't specific to a tuple.
*/
#define CISTPL_EXT_BIT 0x080 /* additional extension bytes follow */
/*
* Constants, macros and structures used by cistpl_devspeed and
* cis_convert_devspeed functions.
*/
#define CISTPL_DEVSPEED_TABLE 0x000000001 /* use the device speed table */
#define CISTPL_DEVSPEED_EXT 0x000000002 /* use the extended speed table */
#define CISTPL_DEVSPEED_MAX_TBL 8 /* max devspeed table entries */
#define CISTPL_DEVSPEED_MAX_EXP 8 /* max exponent entries */
#define CISTPL_DEVSPEED_MAX_MAN 16 /* max mantissa entries */
#define CISTPL_DEVSPEED_TBL(t) cistpl_devspeed_struct.table[(t) & \
(CISTPL_DEVSPEED_MAX_TBL - 1)]
#define CISTPL_DEVSPEED_MAN(m) cistpl_devspeed_struct.mantissa[(m) & \
(CISTPL_DEVSPEED_MAX_MAN - 1)]
#define CISTPL_DEVSPEED_EXP(e) cistpl_devspeed_struct.exponent[(e) & \
(CISTPL_DEVSPEED_MAX_EXP - 1)]
typedef struct cistpl_devspeed_struct_t {
uint32_t *table;
uint32_t *tenfac;
uint32_t *mantissa;
uint32_t *exponent;
} cistpl_devspeed_struct_t;
/*
* Constants, flags and structure typedefs that are used by specific tuples.
*
* CISTPL_DEVICE, CISTPL_DEVICE_A, CISTPL_DEVICE_OC and CISTPL_DEVICE_OA
*/
#define CISTPL_DEVICE_DTYPE_NULL 0x00 /* a NULL device (hole) */
#define CISTPL_DEVICE_DTYPE_ROM 0x01 /* device is of type ROM */
#define CISTPL_DEVICE_DTYPE_OTPROM 0x02 /* device is of type OTPROM */
#define CISTPL_DEVICE_DTYPE_EPROM 0x03 /* device is of type EPROM */
#define CISTPL_DEVICE_DTYPE_EEPROM 0x04 /* device is of type EEPROM */
#define CISTPL_DEVICE_DTYPE_FLASH 0x05 /* device is of type FLASH */
#define CISTPL_DEVICE_DTYPE_SRAM 0x06 /* device is of type SRAM */
#define CISTPL_DEVICE_DTYPE_DRAM 0x07 /* device is of type DRAM */
#define CISTPL_DEVICE_DTYPE_RSVD_8 0x08 /* reserved */
#define CISTPL_DEVICE_DTYPE_RSVD_9 0x09 /* reserved */
#define CISTPL_DEVICE_DTYPE_RSVD_a 0x0a /* reserved */
#define CISTPL_DEVICE_DTYPE_RSVD_b 0x0b /* reserved */
#define CISTPL_DEVICE_DTYPE_RSVD_c 0x0c /* reserved */
#define CISTPL_DEVICE_DTYPE_FUNCSPEC 0x0d /* device is of type FUNCSPEC */
#define CISTPL_DEVICE_DTYPE_EXTEND 0x0e /* device is of type extended */
#define CISTPL_DEVICE_DTYPE_RSVD_f 0x0f /* reserved */
/*
* Flags for cistpl_device_node_t->flags member for CISTPL_DEVICE
* and CISTPL_DEVICE_A tuples
*/
#define CISTPL_DEVICE_WPS 0x00000001 /* WPS bit is set */
/*
* Flags and values for cistpl_device_node_t->flags member for
* CISTPL_DEVICE_OC and CISTPL_DEVICE_OA tuples
*/
#define CISTPL_DEVICE_OC_MWAIT 0x00010000 /* use MWAIT */
#define CISTPL_DEVICE_OC_Vcc_MASK 0x00060000 /* mask for Vcc value */
#define CISTPL_DEVICE_OC_Vcc5 0x00000000 /* 5.0 volt operation */
#define CISTPL_DEVICE_OC_Vcc33 0x00020000 /* 3.3 volt operation */
#define CISTPL_DEVICE_OC_VccXX 0x00040000 /* X.X volt operation */
#define CISTPL_DEVICE_OC_VccYY 0x00060000 /* Y.Y volt operation */
/*
* CISTPL_DEVICE_MAX_DEVICES defines the maximum number of devices that
* we can parse in a CISTPL_DEVICE{...} tuple
*/
#define CISTPL_DEVICE_MAX_DEVICES 10
/*
* CISTPL_DEVICE_SPEED_SIZE_IGNORE if the device speed is set to this, then
* ignore the speed and size values
*/
#define CISTPL_DEVICE_SPEED_SIZE_IGNORE 0x0ff /* ignore size and speed info */
typedef struct cistpl_device_node_t {
uint32_t flags; /* flags specific to this device */
uint32_t speed; /* device speed in device speed code format */
uint32_t nS_speed; /* device speed in nS */
uint32_t type; /* device type */
uint32_t size; /* device size */
uint32_t size_in_bytes; /* device size in bytes */
} cistpl_device_node_t;
typedef struct cistpl_device_t {
uint32_t num_devices; /* number of devices found */
cistpl_device_node_t devnode[CISTPL_DEVICE_MAX_DEVICES];
} cistpl_device_t;
/*
* CISTPL_CONFIG
*/
#define MAKE_CONFIG_REG_ADDR(base, reg) (base + (reg * 2))
#define CISTPL_CONFIG_MAX_CONFIG_REGS 128 /* max num config regs */
typedef struct cistpl_config_t {
uint32_t present; /* register present flags */
uint32_t nr; /* number of config registers found */
uint32_t hr; /* highest config register index found */
uint32_t regs[CISTPL_CONFIG_MAX_CONFIG_REGS]; /* reg offsets */
uint32_t base; /* base offset of config registers */
uint32_t last; /* last config index */
} cistpl_config_t;
/*
* CISTPL_VERS_1
*/
#define CISTPL_VERS_1_MAX_PROD_STRINGS 4 /* max number product strings */
typedef struct cistpl_vers_1_t {
uint32_t major; /* major version number */
uint32_t minor; /* minor version number */
uint32_t ns; /* number of information strings */
/* pointers to product information strings */
char pi[CISTPL_VERS_1_MAX_PROD_STRINGS][CIS_MAX_TUPLE_DATA_LEN];
} cistpl_vers_1_t;
/*
* CISTPL_VERS_2
*/
typedef struct cistpl_vers_2_t {
uint32_t vers; /* version number */
uint32_t comply; /* level of compliance */
uint32_t dindex; /* byte address of first data byte in card */
uint32_t reserved; /* two reserved bytes */
uint32_t vspec8; /* vendor specific (byte 8) */
uint32_t vspec9; /* vendor specific (byte 9) */
uint32_t nhdr; /* number of copies of CIS present on device */
char oem[CIS_MAX_TUPLE_DATA_LEN]; /* Vendor of software that */
/* formatted card */
char info[CIS_MAX_TUPLE_DATA_LEN]; /* Informational message */
/* about card */
} cistpl_vers_2_t;
/*
* CISTPL_JEDEC_A and CISTPL_JEDEC_C
*/
#define CISTPL_JEDEC_MAX_IDENTIFIERS 4
typedef struct jedec_ident_t {
uint32_t id; /* manufacturer id */
uint32_t info; /* manufacturer specific info */
} jedec_ident_t;
typedef struct cistpl_jedec_t {
uint32_t nid; /* # of JEDEC identifiers present */
jedec_ident_t jid[CISTPL_JEDEC_MAX_IDENTIFIERS];
} cistpl_jedec_t;
/*
* CISTPL_FORMAT and CISTPL_FORMAT_A
*
* These tuples describe the data recording format for a region.
*/
typedef struct cistpl_format_t {
uint32_t type; /* format type code */
uint32_t edc_length; /* error detection code length */
uint32_t edc_type; /* error detection code type */
uint32_t offset; /* offset of first byte of data in this part */
uint32_t nbytes; /* number of bytes of data in this partition */
union {
struct disk {
uint32_t bksize; /* block size */
uint32_t nblocks; /* nblocks data for disk-like device */
uint32_t edcloc; /* location of error detection code */
} disk;
struct mem {
uint32_t flags; /* various flags */
uint32_t reserved; /* reserved byte */
caddr_t address; /* physical addr for mem-like device */
uint32_t edcloc; /* location of error detection code */
} mem;
} dev;
} cistpl_format_t;
/*
* device format types
*/
#define TPLFMTTYPE_DISK 0x00 /* disk-like format */
#define TPLFMTTYPE_MEM 0x01 /* memory-like format */
#define TPLFMTTYPE_VS 0x80 /* vendor specific format */
/*
* error detection code types
*/
#define TPLFMTEDC_NONE 0x00 /* no error detection code */
#define TPLFMTEDC_CKSUM 0x01 /* arithmetic checksum is used */
#define TPLFMTEDC_CRC 0x02 /* 16-bit CRC */
#define TPLFMTEDC_PCC 0x03 /* whole-partition arithmetic checksum */
#define TPLFMTEDC_VS 0x80 /* vendor specific error checking */
#define EDC_LENGTH_MASK 0x07
#define EDC_TYPE_MASK 0x0f
#define EDC_TYPE_SHIFT 3
/*
* flags for memory-like devices
*/
#define TPLFMTFLAGS_ADDR 0x01 /* address is valid */
#define TPLFMTFLAGS_AUTO 0x02 /* automatically map memory region */
/*
* CISTPL_GEOMETRY
*/
typedef struct cistpl_geometry_t {
uint32_t spt;
uint32_t tpc;
uint32_t ncyl;
} cistpl_geometry_t;
/*
* CISTPL_BYTEORDER
*/
typedef struct cistpl_byteorder_t {
uint32_t order; /* byte order code */
uint32_t map; /* byte mapping code */
} cistpl_byteorder_t;
/*
* byte order and mapping codes
*/
#define TPLBYTEORD_LOW 0x00 /* specifies little endian order */
#define TPLBYTEORD_HIGH 0x01 /* specifies big endian order */
#define TPLBYTEORD_VS 0x80 /* vendor specific order 0x80-0xFF */
#define TPLBYTEMAP_LOW 0x00 /* byte zero is least significant byte */
#define TPLBYTEMAP_HIGH 0x01 /* byte zero is most significant byte */
#define TPLBYTEMAP_VS 0x80 /* vendor specific mapping */
/*
* CISTPL_DATE
*/
typedef struct cistpl_date_t {
uint32_t time;
uint32_t day;
} cistpl_date_t;
/*
* CISTPL_BATTERY
*/
typedef struct cistpl_battery_t {
uint32_t rday; /* replacement date */
uint32_t xday; /* expiration date */
} cistpl_battery_t;
/*
* CISTPL_ORG
*/
typedef struct cistpl_org_t {
uint32_t type; /* data organization code */
char desc[CIS_MAX_TUPLE_DATA_LEN]; /* text description of */
/* this organization */
} cistpl_org_t;
/*
* CISTPL_MANFID
*/
typedef struct cistpl_manfid_t {
uint32_t manf; /* PCMCIA PC Card manufacturer code */
uint32_t card; /* manufacturer information */
} cistpl_manfid_t;
/*
* CISTPL_FUNCID
*/
typedef struct cistpl_funcid_t {
uint32_t function; /* PC Card function code */
uint32_t sysinit; /* system initialization mask */
} cistpl_funcid_t;
/*
* Function types for CISTPL_FUNCID; note that the TPLFUNC_UNKNOWN is
* not defined by the PCMCIA standard.
*
* Definitions for cistpl_funcid_t->function
*/
#define TPLFUNC_MULTI 0x000 /* vendor-specific multifunction card */
#define TPLFUNC_MEMORY 0x001 /* memory card */
#define TPLFUNC_SERIAL 0x002 /* serial I/O port */
#define TPLFUNC_PARALLEL 0x003 /* parallel printer port */
#define TPLFUNC_FIXED 0x004 /* fixed disk, silicon or removeable */
#define TPLFUNC_VIDEO 0x005 /* video interface */
#define TPLFUNC_LAN 0x006 /* Local Area Network adapter */
#define TPLFUNC_AIMS 0x007 /* Auto Incrementing Mass Storage */
#define TPLFUNC_SCSI 0x008 /* SCSI bridge */
#define TPLFUNC_SECURITY 0x009 /* Security Cards */
#define TPLFUNC_VENDOR_SPECIFIC 0x0fe /* Vendor Specific */
#define TPLFUNC_UNKNOWN 0x0ff /* unknown function(s) */
/*
* Definitions for cistpl_funcid_t->sysinit
*/
#define TPLINIT_POST 0x01 /* POST should attempt configure */
#define TPLINIT_ROM 0x02 /* map ROM during sys init */
/*
* CISTPL_FUNCE
*/
typedef struct cistpl_funce_t {
uint32_t function; /* type of extended data */
uint32_t subfunction;
union {
struct serial {
uint32_t ua; /* UART in use */
uint32_t uc; /* UART capabilities */
} serial;
struct modem {
uint32_t fc; /* supported flow control methods */
uint32_t cb; /* size of DCE command buffer */
uint32_t eb; /* size of DCE to DCE buffer */
uint32_t tb; /* size of DTE to DCE buffer */
} modem;
struct data_modem {
uint32_t ud; /* highest data rate */
uint32_t ms; /* modulation standards */
/* err correct proto and non-CCITT modulation */
uint32_t em;
uint32_t dc; /* data compression protocols */
uint32_t cm; /* command protocols */
uint32_t ex; /* escape mechanisms */
uint32_t dy; /* standardized data encryption */
uint32_t ef; /* misc. end user features */
uint32_t ncd; /* number of country codes */
uchar_t cd[16]; /* CCITT country code */
} data_modem;
struct fax {
uint32_t uf; /* highest data rate in DTE/UART */
uint32_t fm; /* CCITT modulation standards */
uint32_t fy; /* standardized data encryption */
uint32_t fs; /* feature selection */
uint32_t ncf; /* number of country codes */
uchar_t cf[16]; /* CCITT country codes */
} fax;
struct voice {
uint32_t uv; /* highest data rate */
uint32_t nsr;
uint32_t sr[16]; /* voice sampling rates (*100) */
uint32_t nss;
uint32_t ss[16]; /* voice sample sizes (*10) */
uint32_t nsc;
uint32_t sc[16]; /* voice compression methods */
} voice;
struct lan {
uint32_t tech; /* network technology */
uint32_t speed; /* media bit or baud rate */
uint32_t media; /* network media supported */
uint32_t con; /* open/closed connector standard */
uint32_t id_sz; /* length of lan station id */
uchar_t id[16]; /* station ID */
} lan;
} data;
} cistpl_funce_t;
/* serial port subfunctions */
#define TPLFE_SUB_SERIAL 0 /* serial port */
#define TPLFE_SUB_MODEM_COMMON 1 /* common modem interface */
#define TPLFE_SUB_MODEM_DATA 2 /* data modem services */
#define TPLFE_SUB_MODEM_FAX 3 /* fax modem services */
#define TPLFE_SUB_VOICE 4 /* voice services */
/* modem subfunctions for description of capabilities */
#define TPLFE_CAP_MODEM_DATA 5 /* data modem capabilities */
#define TPLFE_CAP_MODEM_FAX 6 /* fax modem capabilities */
#define TPLFE_CAP_MODEM_VOICE 7 /* voice modem capabilities */
/* serial port subfunctions for description of capabilities */
#define TPLFE_CAP_SERIAL_DATA 8 /* serial port capabilities - data modem */
#define TPLFE_CAP_SERIAL_FAX 9 /* serial port capabilities - fax modem */
#define TPLFE_CAP_SERIAL_VOICE 10 /* serial port capabilities - voice */
/* serial port UART definitions */
#define TPLFE_UA_8250 0 /* Intel 8250 */
#define TPLFE_UA_16450 1 /* NS 16450 */
#define TPLFE_UA_16550 2 /* NS 16550 */
/* serial port capabilities definitions */
#define TPLFE_UC_PARITY_SPACE 0x0001 /* space parity supported */
#define TPLFE_UC_PARITY_MARK 0x0002 /* mark parity supported */
#define TPLFE_UC_PARITY_ODD 0x0004 /* odd parity supported */
#define TPLFE_UC_PARITY_EVEN 0x0008 /* even parity supported */
#define TPLFE_UC_CS5 0x0100 /* 5 bit characters supported */
#define TPLFE_UC_CS6 0x0200 /* 6 bit characters supported */
#define TPLFE_UC_CS7 0x0400 /* 7 bit characters supported */
#define TPLFE_UC_CS8 0x0800 /* 8 bit characters supported */
#define TPLFE_UC_STOP_1 0x1000 /* 1 stop bit supported */
#define TPLFE_UC_STOP_15 0x2000 /* 1.5 stop bits supported */
#define TPLFE_UC_STOP_2 0x4000 /* 2 stop bits supported */
/* modem flow control methods */
#define TPLFE_FC_TX_XONOFF 0x01 /* transmit XON/XOFF */
#define TPLFE_FC_RX_XONOFF 0x02 /* receiver XON/XOFF */
#define TPLFE_FC_TX_HW 0x04 /* transmit hardware flow control (CTS) */
#define TPLFE_FC_RX_HW 0x08 /* receiver hardware flow control (RTS) */
#define TPLFE_FC_TRANS 0x10 /* tranparent flow control */
/* modem modulation standards */
#define TPLFE_MS_BELL103 0x0001 /* 300bps */
#define TPLFE_MS_V21 0x0002 /* 300bps (V.21) */
#define TPLFE_MS_V23 0x0004 /* 600/1200bps (V.23) */
#define TPLFE_MS_V22AB 0x0008 /* 1200bps (V.22A V.22B) */
#define TPLFE_MS_BELL212 0x0010 /* 2400bsp (US Bell 212) */
#define TPLFE_MS_V22BIS 0x0020 /* 2400bps (V.22bis) */
#define TPLFE_MS_V26 0x0040 /* 2400bps leased line (V.26) */
#define TPLFE_MS_V26BIS 0x0080 /* 2400bps (V.26bis) */
#define TPLFE_MS_V27BIS 0x0100 /* 4800/2400bps leased line (V.27bis) */
#define TPLFE_MS_V29 0x0200 /* 9600/7200/4800 leased line (V.29) */
#define TPLFE_MS_V32 0x0400 /* up to 9600bps (V.32) */
#define TPLFE_MS_V32BIS 0x0800 /* up to 14400bps (V.32bis) */
#define TPLFE_MS_VFAST 0x1000 /* up to 28800 V.FAST */
/* modem error correction/detection protocols */
#define TPLFE_EM_MNP 0x01 /* MNP levels 2-4 */
#define TPLFE_EM_V42 0x02 /* CCITT LAPM (V.42) */
/* modem data compression protocols */
#define TPLFE_DC_V42BIS 0x01 /* CCITT compression V.42 */
#define TPLFE_DC_MNP5 0x02 /* MNP compression (uses MNP 2, 3 or 4) */
/* modem command protocols */
#define TPLFE_CM_AT1 0x01 /* ANSI/EIA/TIA 602 "Action" commands */
#define TPLFE_CM_AT2 0x02 /* ANSI/EIA/TIA 602 "ACE/DCE IF Params" */
#define TPLFE_CM_AT3 0x04 /* ANSI/EIA/TIA 602 "Ace Parameters" */
#define TPLFE_CM_MNP_AT 0x08 /* MNP specificat AT commands */
#define TPLFE_CM_V25BIS 0x10 /* V.25bis calling commands */
#define TPLFE_CM_V25A 0x20 /* V.25bis test procedures */
#define TPLFE_CM_DMCL 0x40 /* DMCL command mode */
/* modem escape mechanism */
#define TPLFE_EX_BREAK 0x01 /* BREAK support standardized */
#define TPLFE_EX_PLUS 0x02 /* +++ returns to command mode */
#define TPLFE_EX_UD 0x04 /* user defined escape character */
/* modem miscellaneous features */
#define TPLFE_EF_CALLERID 0x01 /* Caller ID is supported */
/* fax modulation standards */
#define TPLFE_FM_V21C2 0x01 /* 300bps (V.21-C2) */
#define TPLFE_FM_V27TER 0x02 /* 4800/2400bps (V.27ter) */
#define TPLFE_FM_V29 0x04 /* 9600/7200/4800 leased line (V.29) */
#define TPLFE_FM_V17 0x08 /* 14.4K/12K/9600/7200bps (V.17) */
#define TPLFE_FM_V33 0x10 /* 14.4K/12K/9600/7200 lease line (V.33) */
/* fax feature selection */
#define TPLFE_FS_T3 0x01 /* Group 2 (T.3) service class */
#define TPLFE_FS_T4 0x02 /* Group 3 (T.4) service class */
#define TPLFE_FS_T6 0x04 /* Group 4 (T.6) service class */
#define TPLFE_FS_ECM 0x08 /* Error Correction Modeer */
#define TPLFE_FS_VOICEREQ 0x10 /* voice requests allowed */
#define TPLFE_FS_POLLING 0x20 /* polling support */
#define TPLFE_FS_FTP 0x40 /* file transfer support */
#define TPLFE_FS_PASSWORD 0x80 /* password support */
/* LAN tuple definitions */
#define TPLFE_NETWORK_INFO 0x00
/* LAN technology types */
#define TPLFE_LAN_TECH_ARCNET 1
#define TPLFE_LAN_TECH_ETHERNET 2
#define TPLFE_LAN_TECH_TOKENRING 3
#define TPLFE_LAN_TECH_LOCALTALK 4
#define TPLFE_LAN_TECH_FDDI 5
#define TPLFE_LAN_TECH_ATM 6
#define TPLFE_LAN_TECH_WIRELESS 7
/* LAN media types */
#define TPLFE_LAN_MEDIA_INHERENT 0
#define TPLFE_LAN_MEDIA_UTP 1
#define TPLFE_LAN_MEDIA_STP 2
#define TPLFE_LAN_MEDIA_THIN_COAX 3
#define TPLFE_LAN_MEDIA_THICK_COAX 4
#define TPLFE_LAN_MEDIA_FIBER 5
#define TPLFE_LAN_MEDIA_SSR_902 6
#define TPLFE_LAN_MEDIA_SSR_2_4 7
#define TPLFE_LAN_MEDIA_SSR_5_4 8
#define TPLFE_LAN_MEDIA_DIFFUSE_IR 9
#define TPLFE_LAN_MEDIA_PTP_IR 10
/*
* CISTPL_CFTABLE_ENTRY
*
* These flags and macros are used internally to the handler.
*/
/* mask to get the config entry number from TPCE_INDX */
#define CISTPL_CFTABLE_TPCE_CFGENTRYM 0x03f
/* default config bit in TPCE_INDX */
#define CISTPL_CFTABLE_TPCE_DEFAULTM 0x040
/* interface config byte follows */
#define CISTPL_CFTABLE_TPCE_IFM 0x080
/* power bit mask for tpce_fs */
#define CISTPL_CFTABLE_TPCE_FS_PWRM 0x003
/* Vcc, Vpp1 and Vpp2 descriptions */
#define CISTPL_CFTABLE_TPCE_FS_PWR_VPP2M 0x003
/* Vcc and Vpp1=Vpp2 descriptions */
#define CISTPL_CFTABLE_TPCE_FS_PWR_VPP1M 0x002
/* Vcc description only */
#define CISTPL_CFTABLE_TPCE_FS_PWR_VCCM 0x001
/* no connection on sleep/power down */
#define CISTPL_CFTABLE_PD_NC_SLEEPM 0x07d
/* zero value required */
#define CISTPL_CFTABLE_PD_ZEROM 0x07e
/* no connection ever */
#define CISTPL_CFTABLE_PD_NCM 0x07f
/* timing data exists */
#define CISTPL_CFTABLE_TPCE_FS_TDM 0x004
/* WAIT scale mask */
#define CISTPL_CFTABLE_TPCE_FS_TD_WAITM 0x003
#define GET_TPCE_FS_TD_WAITS(sf) ((sf)& \
CISTPL_CFTABLE_TPCE_FS_TD_WAITM)
/* RDY/BSY scale mask */
#define CISTPL_CFTABLE_TPCE_FS_TD_RDYM 0x01c
#define GET_TPCE_FS_TD_RDYS(sf) (((sf)>>2)& \
CISTPL_CFTABLE_TPCE_FS_TD_RDYM)
/* RSVD scale mask */
#define CISTPL_CFTABLE_TPCE_FS_TD_RSVDM 0x0e0
#define GET_TPCE_FS_TD_RSVDS(sf) (((sf)>>5)& \
CISTPL_CFTABLE_TPCE_FS_TD_RSVDM)
#define CISTPL_CFTABLE_TPCE_FS_IOM 0x008 /* I/O data exists */
/* I/O addr lines mask */
#define CISTPL_CFTABLE_TPCE_FS_IO_ALM 0x01f
/* RANGE bit in TPCE_IO */
#define CISTPL_CFTABLE_TPCE_FS_IO_RANGEM 0x080
/* max of 16 I/O ranges */
#define CISTPL_CFTABLE_ENTRY_MAX_IO_RANGES 16
#define CISTPL_CFTABLE_TPCE_FS_IRQM 0x010 /* IRQ data exists */
/* extended IRQ mask exists */
#define CISTPL_CFTABLE_TPCE_FS_IRQ_MASKM 0x010
#define CISTPL_CFTABLE_TPCE_FS_MEMM 0x060 /* mem space mask */
/* space selection byte ... */
#define CISTPL_CFTABLE_TPCE_FS_MEM3M 0x060
/* length (2 bytes) and card address (2 bytes) */
#define CISTPL_CFTABLE_TPCE_FS_MEM2M 0x040
/* single 2-byte length */
#define CISTPL_CFTABLE_TPCE_FS_MEM1M 0x020
/* max of 8 mem space descriptors */
#define CISTPL_CFTABLE_ENTRY_MAX_MEM_WINDOWS 8
/* number of bytes/page description */
#define CISTPL_CFTABLE_TPCE_FS_MEM_PGSIZE 256
/* host addr info present */
#define CISTPL_CFTABLE_TPCE_FS_MEM_HOSTM 0x080
#define CISTPL_CFTABLE_TPCE_FS_MISCM 0x080 /* misc fields mask */
/*
* Constants, macros, structures and flags used by cistpl_pd_parse()
* cistpl_expd_parse() and the CISTPL_CFTABLE_ENTRY tuple handler.
*/
#define CISTPL_PD_MAN(m) cistpl_pd_struct.mantissa[m&15]
#define CISTPL_PD_EXP(e) cistpl_pd_struct.exponent[e&7]
typedef struct cistpl_pd_struct_t {
uint32_t *mantissa;
uint32_t *exponent;
} cistpl_pd_struct_t;
/*
* These flags are passed to the caller in the cistpl_cftable_entry_t->flags
* field and indicate what interface information is available. The low
* order byte of this field is reserved and no flags should be defined
* to exist there.
*/
#define CISTPL_CFTABLE_TPCE_DEFAULT 0x000000100 /* this is a default conf */
/* interface config description present flags */
#define CISTPL_CFTABLE_TPCE_IF 0x000000200 /* if config byte exists */
/*
* When the CISTPL_CFTABLE_TPCE_IF flag is set, the following flags
* are available in the ifc member of the cistpl_cftable_entry_t
* structure.
*/
#define CISTPL_CFTABLE_TPCE_IF_MEMORY 0x00 /* memory interface */
#define CISTPL_CFTABLE_TPCE_IF_IO_MEM 0x01 /* IO and memory */
#define CISTPL_CFTABLE_TPCE_IF_RSVD_2 0x02 /* reserved */
#define CISTPL_CFTABLE_TPCE_IF_RSVD_3 0x03 /* reserved */
#define CISTPL_CFTABLE_TPCE_IF_CUSTOM_0 0x04 /* custom interface 0 */
#define CISTPL_CFTABLE_TPCE_IF_CUSTOM_1 0x05 /* custom interface 1 */
#define CISTPL_CFTABLE_TPCE_IF_CUSTOM_2 0x06 /* custom interface 2 */
#define CISTPL_CFTABLE_TPCE_IF_CUSTOM_3 0x07 /* custom interface 3 */
#define CISTPL_CFTABLE_TPCE_IF_RSVD_8 0x08 /* reserved */
#define CISTPL_CFTABLE_TPCE_IF_RSVD_9 0x09 /* reserved */
#define CISTPL_CFTABLE_TPCE_IF_RSVD_a 0x0a /* reserved */
#define CISTPL_CFTABLE_TPCE_IF_RSVD_b 0x0b /* reserved */
#define CISTPL_CFTABLE_TPCE_IF_RSVD_c 0x0c /* reserved */
#define CISTPL_CFTABLE_TPCE_IF_RSVD_d 0x0d /* reserved */
#define CISTPL_CFTABLE_TPCE_IF_RSVD_e 0x0e /* reserved */
#define CISTPL_CFTABLE_TPCE_IF_RSVD_f 0x0f /* reserved */
#define CISTPL_CFTABLE_TPCE_IF_MASK 0x0f /* interface type mask */
#define CISTPL_CFTABLE_TPCE_IF_BVD 0x10 /* BVD active in PRR */
#define CISTPL_CFTABLE_TPCE_IF_WP 0x20 /* WP active in PRR */
#define CISTPL_CFTABLE_TPCE_IF_RDY 0x40 /* RDY active in PRR */
#define CISTPL_CFTABLE_TPCE_IF_MWAIT 0x80 /* WAIT - mem cycles */
/* power description present flags */
#define CISTPL_CFTABLE_TPCE_FS_PWR 0x000001000 /* power info exists */
/* timing description present flags */
#define CISTPL_CFTABLE_TPCE_FS_TD 0x000010000 /* timing info exists */
/* I/O description present flags */
#define CISTPL_CFTABLE_TPCE_FS_IO 0x000100000 /* I/O information exists */
/* IRQ description present flags */
#define CISTPL_CFTABLE_TPCE_FS_IRQ 0x000200000 /* IRQ information exists */
/* memory space description present flags */
#define CISTPL_CFTABLE_TPCE_FS_MEM 0x001000000 /* MEM space info exists */
/* misc description present flags */
#define CISTPL_CFTABLE_TPCE_FS_MISC 0x002000000 /* MISC info exists */
/* additional information tuples present flags */
#define CISTPL_CFTABLE_TPCE_FS_STCE_EV 0x004000000 /* STCE_EV exists */
#define CISTPL_CFTABLE_TPCE_FS_STCE_PD 0x008000000 /* STCE_PD exists */
/*
* Power description flags and structures.
*
* The following eight values represent what the power description structure
* parameter selection byte tells us is present. A copy of this byte
* is in the low order byte of each parameter's flag field.
*/
#define CISTPL_CFTABLE_PD_NOMV 0x001 /* nominal supply voltage */
#define CISTPL_CFTABLE_PD_MINV 0x002 /* minimum supply voltage */
#define CISTPL_CFTABLE_PD_MAXV 0x004 /* maximum supply voltage */
#define CISTPL_CFTABLE_PD_STATICI 0x008 /* continuous supply current */
/* max current required averaged over 1 second */
#define CISTPL_CFTABLE_PD_AVGI 0x010
/* maximum current required averaged over 10mS */
#define CISTPL_CFTABLE_PD_PEAKI 0x020
/* power down supply curent required */
#define CISTPL_CFTABLE_PD_PDOWNI 0x040
/* power supply is about to blow up */
#define CISTPL_CFTABLE_PD_RFU 0x080
/*
* For each voltage/current parameter, there is an associated flags field.
* The following flags are in this field. The low order byte of each
* of these flags fields also contains a copy of the power description
* structure parameter selection byte as read from the tuple, that's why
* we start the flag values at 0x0100 and go up from there.
*/
/* this parameter exists */
#define CISTPL_CFTABLE_PD_EXISTS 0x000000100
/* multiply return value by 10 */
#define CISTPL_CFTABLE_PD_MUL10 0x000000200
/* no connection on sleep/power down */
#define CISTPL_CFTABLE_PD_NC_SLEEP 0x000001000
/* zero value required */
#define CISTPL_CFTABLE_PD_ZERO 0x000002000
/* no connection ever */
#define CISTPL_CFTABLE_PD_NC 0x000004000
typedef struct cistpl_cftable_entry_pwr_t {
uint32_t nomV; /* nominal supply voltage */
uint32_t nomV_flags;
uint32_t minV; /* minimum supply voltage */
uint32_t minV_flags;
uint32_t maxV; /* maximum supply voltage */
uint32_t maxV_flags;
uint32_t staticI; /* continuous supply current */
uint32_t staticI_flags;
uint32_t avgI; /* max current required */
/* averaged over 1 sec. */
uint32_t avgI_flags;
uint32_t peakI; /* max current required */
/* averaged over 10mS */
uint32_t peakI_flags;
uint32_t pdownI; /* power down supply curent required */
uint32_t pdownI_flags;
} cistpl_cftable_entry_pwr_t;
/*
* Flags for the global power description structure. These show up in
* the flags field of the structure.
*/
#define CISTPL_CFTABLE_TPCE_FS_PWR_VCC 0x000000001 /* Vcc description valid */
#define CISTPL_CFTABLE_TPCE_FS_PWR_VPP1 0x000000002 /* vpp1 description valid */
#define CISTPL_CFTABLE_TPCE_FS_PWR_VPP2 0x000000004 /* Vpp2 description valid */
typedef struct cistpl_cftable_entry_pd_t {
uint32_t flags; /* which descriptions are valid */
struct cistpl_cftable_entry_pwr_t pd_vcc; /* VCC power description */
struct cistpl_cftable_entry_pwr_t pd_vpp1; /* Vpp1 power description */
struct cistpl_cftable_entry_pwr_t pd_vpp2; /* Vpp2 power description */
} cistpl_cftable_entry_pd_t;
/*
* Device speed structure. Each field is only valid if the
* CISTPL_CFTABLE_TPCE_FS_TD flag is set.
*
* The following flags describe which timing information is available.
* They appear in the flags field of the device speed structure.
*/
/* WAIT timing exists */
#define CISTPL_CFTABLE_TPCE_FS_TD_WAIT 0x000000001
/* RDY/BSY timing exists */
#define CISTPL_CFTABLE_TPCE_FS_TD_RDY 0x000000002
/* RSVD timing exists */
#define CISTPL_CFTABLE_TPCE_FS_TD_RSVD 0x000000004
typedef struct cistpl_cftable_entry_speed_t {
uint32_t flags; /* which timing information is present */
uint32_t wait; /* max WAIT time in device speed format */
uint32_t nS_wait; /* max WAIT time in nS */
uint32_t rdybsy; /* max RDY/BSY time in device speed format */
uint32_t nS_rdybsy; /* max RDY/BSY time in nS */
uint32_t rsvd; /* max RSVD time in device speed format */
uint32_t nS_rsvd; /* max RSVD time in nS */
} cistpl_cftable_entry_speed_t;
/*
* Device I/O range description structures. Only valid if the
* CISTPL_CFTABLE_TPCE_FS_IO flag is set.
*
* The following flags describe the IO description information. They
* appear in the flags field of the IO space description structure.
*/
#define CISTPL_CFTABLE_TPCE_FS_IO_BUS 0x060 /* bus width mask */
#define CISTPL_CFTABLE_TPCE_FS_IO_BUS8 0x020 /* 8-bit flag */
#define CISTPL_CFTABLE_TPCE_FS_IO_BUS16 0x040 /* 16-bit flag */
#define CISTPL_CFTABLE_TPCE_FS_IO_RANGE 0x080 /* IO address ranges exist */
typedef struct cistpl_cftable_entry_io_range_t {
uint32_t addr; /* I/O start address */
uint32_t length; /* I/O register length */
} cistpl_cftable_entry_io_range_t;
typedef struct cistpl_cftable_entry_io_t {
uint32_t flags; /* direct copy of TPCE_IO byte in tuple */
uint32_t addr_lines; /* number of decoded I/O address lines */
uint32_t ranges; /* number of I/O ranges */
struct cistpl_cftable_entry_io_range_t
range[CISTPL_CFTABLE_ENTRY_MAX_IO_RANGES];
} cistpl_cftable_entry_io_t;
/*
* Device IRQ description structure. Only valid if the
* CISTPL_CFTABLE_TPCE_FS_IRQ flag is set.
*/
typedef struct cistpl_cftable_entry_irq_t {
uint32_t flags; /* direct copy of TPCE_IR byte in tuple */
uint32_t irqs; /* bit mask for each allowed IRQ */
} cistpl_cftable_entry_irq_t;
/*
* Device memory space description structure. Only valid if the
* CISTPL_CFTABLE_TPCE_FS_MEM flag is set.
*
* The following flags describe the memory description information. They
* appear in the flags field of the memory space description structure.
*/
/* space descriptors */
#define CISTPL_CFTABLE_TPCE_FS_MEM3 0x000000001
/* host_addr=card_addr */
#define CISTPL_CFTABLE_TPCE_FS_MEM2 0x000000002
/* card address=0, any host address */
#define CISTPL_CFTABLE_TPCE_FS_MEM1 0x000000004
/* if host address is present in MEM3 */
#define CISTPL_CFTABLE_TPCE_FS_MEM_HOST 0x000000008
typedef struct cistpl_cftable_entry_mem_window_t {
uint32_t length; /* length of this window */
uint32_t card_addr; /* card address */
uint32_t host_addr; /* host address */
} cistpl_cftable_entry_mem_window_t;
typedef struct cistpl_cftable_entry_mem_t {
uint32_t flags; /* memory desc type and host addr info */
uint32_t windows; /* number of memory space descriptors */
cistpl_cftable_entry_mem_window_t
window[CISTPL_CFTABLE_ENTRY_MAX_MEM_WINDOWS];
} cistpl_cftable_entry_mem_t;
/*
* Devices misc description structure. Only valid if the
* CISTPL_CFTABLE_TPCE_FS_MISC flag is set.
*/
#define CISTPL_CFTABLE_TPCE_FS_MISC_MAX 2 /* # bytes we understand */
#define CISTPL_CFTABLE_TPCE_MI_MTC_MASK 0x00000007 /* max twin cards mask */
#define CISTPL_CFTABLE_TPCE_MI_AUDIO 0x00000008 /* audio on BVD2 */
#define CISTPL_CFTABLE_TPCE_MI_READONLY 0x00000010 /* R/O storage */
#define CISTPL_CFTABLE_TPCE_MI_PWRDOWN 0x00000020 /* powerdown capable */
#define CISTPL_CFTABLE_TPCE_MI_DRQ_MASK 0x00000c00 /* DMAREQ mask */
#define CISTPL_CFTABLE_TPCE_MI_DRQ_SPK 0x00000400 /* DMAREQ on SPKR */
#define CISTPL_CFTABLE_TPCE_MI_DRQ_IOIS 0x00000800 /* DMAREQ on IOIS16 */
#define CISTPL_CFTABLE_TPCE_MI_DRQ_INP 0x00000c00 /* DMAREQ on INPACK */
#define CISTPL_CFTABLE_TPCE_MI_DMA_8 0x00000000 /* DMA width 8 bits */
#define CISTPL_CFTABLE_TPCE_MI_DMA_16 0x00001000 /* DMA width 16 bits */
typedef struct cistpl_cftable_entry_misc_t {
uint32_t flags; /* misc features flags */
} cistpl_cftable_entry_misc_t;
/*
* Additional information sub-tuples defines and structure
*/
#define STCE_EV 0x0c0 /* Environment Descriptor Subtuple */
#define STCE_PD 0x0c1 /* Physical Device Name Subtuple */
typedef struct cistpl_cftable_entry_stce_ev_t {
char stev_strs[CIS_MAX_TUPLE_DATA_LEN];
} cistpl_cftable_entry_stce_ev_t;
typedef struct cistpl_cftable_entry_stce_pd_t {
char stpd_strs[CIS_MAX_TUPLE_DATA_LEN];
} cistpl_cftable_entry_stce_pd_t;
/*
* cistpl_cftable_entry_t - this is the struct that the caller passes
* to the CISTPL_CFTABLE_ENTRY handler
*/
typedef struct cistpl_cftable_entry_t {
uint32_t flags; /* which descriptions are valid */
uint32_t ifc; /* interface description info */
uint32_t pin; /* values for PRR */
uint32_t index; /* configuration index number */
struct cistpl_cftable_entry_pd_t pd; /* power requirements description */
struct cistpl_cftable_entry_speed_t speed; /* device speed description */
struct cistpl_cftable_entry_io_t io; /* device I/O map */
struct cistpl_cftable_entry_irq_t irq; /* device IRQ utilization */
struct cistpl_cftable_entry_mem_t mem; /* device memory space */
struct cistpl_cftable_entry_misc_t misc; /* misc device features */
} cistpl_cftable_entry_t;
/*
* CISTPL_LINKTARGET
*
* This tuple is used to verify that tuple chains other than the primary
* chain which starts at offset 0 in Attribute Memory are valid. All
* secondary tuple chains are required to contain this tuple as the
* first tuple of the chain.
* This tuple must have a link field of at least MIN_LINKTARGET_LENGTH and
* must contain the byte pattern CISTPL_LINKTARGET_MAGIC.
* LINKTARGET_AC_HEADER_LENGTH is the number of bytes contained in a
* valid CISTPL_LINKTARGET tuple header.
*/
#define MIN_LINKTARGET_LENGTH 3
#define CISTPL_LINKTARGET_MAGIC "CIS"
#define LINKTARGET_AC_HEADER_LENGTH 2
typedef struct cistpl_linktarget_t {
uint32_t length; /* number of bytes in tpltg_tag */
char tpltg_tag[CIS_MAX_TUPLE_DATA_LEN];
} cistpl_linktarget_t;
/*
* CISTPL_LONGLINK_A and CISTPL_LONGLINK_C
*
* Both of these tuples are processed the same way. The target address is
* really an offset from the beginning of the specified address space
* and is not a virtual address.
* This tuple must have a link field of at least MIN_LONGLINK_AC_LENGTH.
*/
#define MIN_LONGLINK_AC_LENGTH 4
typedef struct cistpl_longlink_ac_t {
uint32_t flags; /* space flags */
uint32_t tpll_addr; /* target address, normalized */
} cistpl_longlink_ac_t;
/*
* Flags for cistpl_longlink_ac_t->flags
*/
#define CISTPL_LONGLINK_AC_AM 0x0001 /* longlink to AM */
#define CISTPL_LONGLINK_AC_CM 0x0002 /* longlink to CM */
/*
* CISTPL_LONGLINK_MFC
*
* This tuple describes the start of the function-specific CIS for each
* function on a multi-function card.
*
* This tuple must have a link field of at least MIN_LONGLINK_AC_LENGTH.
*/
#define MIN_LONGLINK_MFC_LENGTH 6
#define MIN_LONGLINK_MFC_NREGS 1
typedef struct cis_function_t {
uint32_t tas; /* target address space of function */
uint32_t addr; /* target address offset */
} cis_function_t;
typedef struct cistpl_longlink_mfc_t {
uint32_t nfuncs; /* number of functions */
uint32_t nregs; /* number of config register sets */
cis_function_t function[CIS_MAX_FUNCTIONS];
} cistpl_longlink_mfc_t;
/*
* Flags for cistpl_longlink_mfc_t->function[n]->tas
*/
#define CISTPL_LONGLINK_MFC_TAS_AM 0x00 /* CIS in attribute memory */
#define CISTPL_LONGLINK_MFC_TAS_CM 0x01 /* CIS in common memory */
/*
* CISTPL_LONGLINK_CB
*
* This tuple describes the start of a function's CIS chain
* for CardBus cards
*/
typedef struct cistpl_longlink_cb_t {
uint32_t flags; /* address space flags */
uint32_t addr; /* raw (unproessed) address value */
union {
/* device-dependant config space info */
struct {
uint32_t offset; /* offset within config space */
} cfg;
/* memory space info */
struct {
uint32_t asi; /* BAR */
uint32_t offset; /* offset within BAR space */
} mem;
/* expansion ROM space info */
struct {
uint32_t image; /* image number */
uint32_t offset; /* offset from iamge base */
} rom;
} space;
} cistpl_longlink_cb_t;
/*
* Flags for cistpl_longlink_cb_t->flags
*/
#define CISTPL_LONGLINK_CB_CFG 0x0001 /* config space info valid */
#define CISTPL_LONGLINK_CB_MEM 0x0002 /* memory space info valid */
#define CISTPL_LONGLINK_CB_ROM 0x0004 /* expansion ROM space info valid */
/*
* CISTPL_SPCL
*
* This tuple is the Special Purpose tuple and it's contents are dependant
* on the meaning of the header information in this tuple.
*/
typedef struct cistpl_spcl_t {
uint32_t id; /* tuple contents identification */
uint32_t seq; /* data sequence number */
uint32_t bytes; /* number of bytes following */
uchar_t data[CIS_MAX_TUPLE_DATA_LEN];
} cistpl_spcl_t;
/*
* Flags for cistpl_spcl_t->seq
*/
#define CISTPL_SPCL_SEQ_END 0x080 /* last tuple in sequence */
/*
* CISTPL_SWIL
*
* This tuple describes the software interleaving of data within a
* partition on the card.
*/
typedef struct cistpl_swil_t {
uint32_t intrlv; /* interleave */
} cistpl_swil_t;
/*
* CISTPL_BAR
*
* This tuple describes the CardBus Base Address Registers
*/
typedef struct cistpl_bar_t {
uint32_t attributes; /* attributes */
uint32_t size; /* BAR size */
} cistpl_bar_t;
/*
* Flags for cistpl_bar_t->attributes
*/
#define CISTPL_BAR_ASI_MASK 0x007 /* Base Address Register mask */
#define CISTPL_BAR_ASI_BAR_1 0x001 /* Base Address Register 1 */
#define CISTPL_BAR_ASI_BAR_2 0x002 /* Base Address Register 2 */
#define CISTPL_BAR_ASI_BAR_3 0x003 /* Base Address Register 3 */
#define CISTPL_BAR_ASI_BAR_4 0x004 /* Base Address Register 4 */
#define CISTPL_BAR_ASI_BAR_5 0x005 /* Base Address Register 5 */
#define CISTPL_BAR_ASI_BAR_6 0x006 /* Base Address Register 6 */
#define CISTPL_BAR_ASI_BAR_7 0x007 /* Base Address Register 7 */
#define CISTPL_BAR_ASI_EXP_ROM 0x007 /* Expansion ROM BAR */
#define CISTPL_BAR_AS_MEM 0x000 /* BAR is of type memory */
#define CISTPL_BAR_AS_IO 0x008 /* BAR is of type IO */
#define CISTPL_BAR_PREFETCH_CACHE_MASK 0x060 /* prefetch/cache mask */
#define CISTPL_BAR_PREFETCH 0x020 /* prefetchable not cacheable */
#define CISTPL_BAR_PREFETCH_CACHE 0x040 /* prefetchable and cacheable */
#define CISTPL_BAR_BELOW_1MB 0x080 /* must locate within first MB */
/*
* CISTPL_DEVICEGEO and CISTPL_DEVICEGEO_A
*
* These tuples describe the device geometry of memory partitions.
*/
#define CISTPL_DEVICEGEO_MAX_PARTITIONS 42
typedef struct cistpl_devicegeo_info_t {
uint32_t bus; /* card interface width in bytes */
uint32_t ebs; /* minimum erase block size */
uint32_t rbs; /* minimum read block size */
uint32_t wbs; /* minimum write bock size */
uint32_t part; /* segment partition subdivisions */
uint32_t hwil; /* hardware interleave */
} cistpl_devicegeo_info_t;
typedef struct cistpl_devicegeo_t {
cistpl_devicegeo_info_t info[CISTPL_DEVICEGEO_MAX_PARTITIONS];
} cistpl_devicegeo_t;
/*
* The cistpl_get_tuple_name_t used to support the HANDTPL_RETURN_NAME
* operation of the CIS parser.
*/
typedef struct cistpl_get_tuple_name_t {
char name[CIS_MAX_TUPLE_NAME_LEN];
} cistpl_get_tuple_name_t;
/*
* cisparse_t - the structure that unifies all tuple parsing structures
*/
typedef union cisparse_t {
cistpl_config_t cistpl_config;
cistpl_device_t cistpl_device;
cistpl_vers_1_t cistpl_vers_1;
cistpl_vers_2_t cistpl_vers_2;
cistpl_jedec_t cistpl_jedec;
cistpl_format_t cistpl_format;
cistpl_geometry_t cistpl_geometry;
cistpl_byteorder_t cistpl_byteorder;
cistpl_date_t cistpl_date;
cistpl_battery_t cistpl_battery;
cistpl_org_t cistpl_org;
cistpl_manfid_t cistpl_manfid;
cistpl_funcid_t cistpl_funcid;
cistpl_funce_t cistpl_funce;
cistpl_cftable_entry_t cistpl_cftable_entry;
cistpl_linktarget_t cistpl_linktarget;
cistpl_longlink_ac_t cistpl_longlink_ac;
cistpl_longlink_mfc_t cistpl_longlink_mfc;
cistpl_spcl_t cistpl_spcl;
cistpl_swil_t cistpl_swil;
cistpl_bar_t cistpl_bar;
cistpl_devicegeo_t cistpl_devicegeo;
cistpl_longlink_cb_t cistpl_longlink_cb;
cistpl_get_tuple_name_t cistpl_get_tuple_name;
/* members below are for legacy support - REMOVE THEM BEFORE FCS!! */
cistpl_config_t config;
cistpl_device_t device;
cistpl_vers_1_t version_1;
cistpl_vers_2_t version_2;
cistpl_jedec_t jedec;
cistpl_format_t format;
cistpl_geometry_t geometry;
cistpl_byteorder_t byteorder;
cistpl_date_t date;
cistpl_battery_t battery;
cistpl_org_t org;
cistpl_manfid_t manfid;
cistpl_funcid_t funcid;
cistpl_funce_t funce;
cistpl_cftable_entry_t cftable;
cistpl_linktarget_t linktarget;
cistpl_longlink_ac_t longlink_ac;
cistpl_longlink_mfc_t longlink_mfc;
cistpl_spcl_t spcl;
cistpl_swil_t swil;
cistpl_bar_t bar;
cistpl_devicegeo_t devgeo;
cistpl_longlink_cb_t longlink_cb;
cistpl_get_tuple_name_t tuple_name;
} cisparse_t;
#ifdef __cplusplus
}
#endif
#endif /* _CIS_HANDLERS_H */