344 lines
8.2 KiB
C
344 lines
8.2 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1994-1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
82365sl.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module defines the PCMCIA tuple structures.
|
||
|
|
||
|
Author(s):
|
||
|
|
||
|
Bob Rinne (BobRi) 2-Aug-1994
|
||
|
prototype from Jeff McLeman (mcleman@zso.dec.com)
|
||
|
|
||
|
Revision History:
|
||
|
Ravisankar Pudipeddi (ravisp) 1-Feb-1997
|
||
|
Additional definitions, more macros to parse tuples etc.
|
||
|
|
||
|
Notes:
|
||
|
|
||
|
Tuple codes and names derived from the "PCMCIA PC CARD STANDARD"
|
||
|
Release 2.01 CARD METAFORMAT section (Basic Compatibility Layer 1)
|
||
|
|
||
|
Revisions:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// Tuple codes
|
||
|
//
|
||
|
|
||
|
#define CISTPL_NULL 0x00
|
||
|
#define CISTPL_DEVICE 0x01
|
||
|
#define CISTPL_INDIRECT 0x03
|
||
|
#define CISTPL_CONFIG_CB 0x04
|
||
|
#define CISTPL_CFTABLE_ENTRY_CB 0x05
|
||
|
#define CISTPL_LONGLINK_MFC 0x06
|
||
|
#define CISTPL_CHECKSUM 0x10
|
||
|
#define CISTPL_LONGLINK_A 0x11
|
||
|
#define CISTPL_LONGLINK_C 0x12
|
||
|
#define CISTPL_LINKTARGET 0x13
|
||
|
#define CISTPL_NO_LINK 0x14
|
||
|
#define CISTPL_VERS_1 0x15
|
||
|
#define CISTPL_ALTSTR 0x16
|
||
|
#define CISTPL_DEVICE_A 0x17
|
||
|
#define CISTPL_JEDEC_C 0x18
|
||
|
#define CISTPL_JEDEC_A 0x19
|
||
|
#define CISTPL_CONFIG 0x1a
|
||
|
#define CISTPL_CFTABLE_ENTRY 0x1b
|
||
|
#define CISTPL_DEVICE_OC 0x1c
|
||
|
#define CISTPL_DEVICE_OA 0x1d
|
||
|
#define CISTPL_GEODEVICE 0x1e
|
||
|
#define CISTPL_GEODEVICE_A 0x1f
|
||
|
#define CISTPL_MANFID 0x20
|
||
|
#define CISTPL_FUNCID 0x21
|
||
|
#define CISTPL_FUNCE 0x22
|
||
|
#define CISTPL_VERS_2 0x40
|
||
|
#define CISTPL_FORMAT 0x41
|
||
|
#define CISTPL_GEOMETRY 0x42
|
||
|
#define CISTPL_BYTEORDER 0x43
|
||
|
#define CISTPL_DATE 0x44
|
||
|
#define CISTPL_BATTERY 0x45
|
||
|
#define CISTPL_ORG 0x46
|
||
|
#define CISTPL_LONGLINK_CB 0x47
|
||
|
#define CISTPL_END 0xFF
|
||
|
|
||
|
//
|
||
|
// Tuple structures and offsets - used based on tuple code.
|
||
|
|
||
|
//
|
||
|
//
|
||
|
// UCHAR
|
||
|
// CodeByte(
|
||
|
// IN PUCHAR TupleBase
|
||
|
// );
|
||
|
//
|
||
|
// Routine Description:
|
||
|
//
|
||
|
// This returns the contents of the tuple code byte for the tuple
|
||
|
// pointer passed in.
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// TupleBase - a pointer to the current tuple.
|
||
|
//
|
||
|
// Return Values:
|
||
|
//
|
||
|
// The contents of the tupleCode byte in the tuple.
|
||
|
//
|
||
|
|
||
|
#define CodeByte(TUPLE_BASE) (*(TUPLE_BASE))
|
||
|
|
||
|
//
|
||
|
// UCHAR
|
||
|
// LinkByte(
|
||
|
// IN PUCHAR TupleBase
|
||
|
// );
|
||
|
//
|
||
|
// Routine Description:
|
||
|
//
|
||
|
// This returns the contents of the link byte for the tuple
|
||
|
// pointer passed in.
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// TupleBase - a pointer to the current tuple.
|
||
|
//
|
||
|
// Return Values:
|
||
|
//
|
||
|
// The contents of the link byte in the tuple.
|
||
|
//
|
||
|
|
||
|
#define LinkByte(TUPLE_BASE) (*(TUPLE_BASE + 1))
|
||
|
|
||
|
//
|
||
|
//
|
||
|
// PUCHAR
|
||
|
// TupleBody(
|
||
|
// IN PUCHAR TupleBase
|
||
|
// );
|
||
|
//
|
||
|
// Routine Description:
|
||
|
//
|
||
|
// This returns the pointer to the tuple body for the tuple
|
||
|
// pointer passed in
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// TupleBase - a pointer to the current tuple.
|
||
|
//
|
||
|
// Return Values:
|
||
|
//
|
||
|
// The pointer to the body of the tuple
|
||
|
//
|
||
|
|
||
|
#define TupleBody(TUPLE_BASE) (TUPLE_BASE+2)
|
||
|
|
||
|
//
|
||
|
//
|
||
|
// PUCHAR
|
||
|
// NextTuple(
|
||
|
// IN PUCHAR TupleBase
|
||
|
// );
|
||
|
//
|
||
|
// Routine Description:
|
||
|
//
|
||
|
// This macro locates the next tuple in a stream of bytes given a pointer
|
||
|
// to the current tuple. This is done by adding the appropriate
|
||
|
// link value to the current pointer.
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// TupleBase - a pointer to the current tuple.
|
||
|
//
|
||
|
// Return Values:
|
||
|
//
|
||
|
// A pointer to the next tuple.
|
||
|
//
|
||
|
|
||
|
#define NextTuple(TUPLE_BASE) (*TUPLE_BASE ? \
|
||
|
/* there is a link pointer case */ \
|
||
|
(TUPLE_BASE + LinkByte(TUPLE_BASE) + 2) :\
|
||
|
/* this is a NULL tuple */ \
|
||
|
(TUPLE_BASE + 1))
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Device Tuple information.
|
||
|
//
|
||
|
|
||
|
#define DSPEED_MASK 0x07
|
||
|
#define DeviceSpeedField(X) (X & DSPEED_MASK)
|
||
|
#define WPS_MASK 0x08
|
||
|
#define DeviceWPS(X) ((X & WPS_MASK) >> 3)
|
||
|
#define DTYPE_MASK 0xF0
|
||
|
#define DeviceTypeCode(X) ((X & DTYPE_MASK) >> 4)
|
||
|
|
||
|
#define DTYPE_NULL 0x00
|
||
|
#define DTYPE_ROM 0x01
|
||
|
#define DTYPE_OTPROM 0x02
|
||
|
#define DTYPE_EPROM 0x03
|
||
|
#define DTYPE_EEPROM 0x04
|
||
|
#define DTYPE_FLASH 0x05
|
||
|
#define DTYPE_SRAM 0x06
|
||
|
#define DTYPE_DRAM 0x07
|
||
|
#define DTYPE_FUNCSPEC 0x0d
|
||
|
#define DTYPE_EXTEND 0x0e
|
||
|
|
||
|
#define DSPEED_NULL 0x00
|
||
|
#define DSPEED_250NS 0x01
|
||
|
#define DSPEED_200NS 0x02
|
||
|
#define DSPEED_150NS 0x03
|
||
|
#define DSPEED_100NS 0x04
|
||
|
#define DSPEED_RES1 0x05
|
||
|
#define DSPEED_RES2 0x06
|
||
|
#define DSPEED_EXT 0x07
|
||
|
|
||
|
|
||
|
//
|
||
|
// extended speed definitions
|
||
|
//
|
||
|
|
||
|
#define SPEED_MANTISSA_MASK 0x78
|
||
|
#define SpeedMantissa(X) ((X & SPEED_MANTISSA_MASK) > 3)
|
||
|
#define SPEED_EXPONENT_MASK 0x07
|
||
|
#define SpeedExponent(X) (X & SPEED_EXPONENT_MASK)
|
||
|
#define SPEED_EXT_MASK 0x80
|
||
|
#define SpeedEXT(X) ((X & SPEED_EXT_MASK) > 7)
|
||
|
|
||
|
#define MANTISSA_RES1 0x00
|
||
|
#define MANTISSA_1_0 0x01
|
||
|
#define MANTISSA_1_2 0x02
|
||
|
#define MANTISSA_1_3 0x03
|
||
|
#define MANTISSA_1_5 0x04
|
||
|
#define MANTISSA_2_0 0x05
|
||
|
#define MANTISSA_2_5 0x06
|
||
|
#define MANTISSA_3_0 0x07
|
||
|
#define MANTISSA_3_5 0x08
|
||
|
#define MANTISSA_4_0 0x09
|
||
|
#define MANTISSA_4_5 0x0a
|
||
|
#define MANTISSA_5_0 0x0b
|
||
|
#define MANTISSA_5_5 0x0c
|
||
|
#define MANTISSA_6_0 0x0d
|
||
|
#define MANTISSA_7_0 0x0e
|
||
|
#define MANTISSA_8_0 0x0f
|
||
|
|
||
|
#define EXPONENT_1ns 0x00
|
||
|
#define EXPONENT_10ns 0x01
|
||
|
#define EXPONENT_100ns 0x02
|
||
|
#define EXPONENT_1us 0x03
|
||
|
#define EXPONENT_10us 0x04
|
||
|
#define EXPONENT_100us 0x05
|
||
|
#define EXPONENT_1ms 0x06
|
||
|
#define EXPONENT_10ms 0x07
|
||
|
|
||
|
//
|
||
|
// Configuration tuple
|
||
|
//
|
||
|
|
||
|
#define CCST_CIF 0xC0
|
||
|
|
||
|
#define TPCC_RFSZ_MASK 0xc0
|
||
|
#define TpccRfsz(X) ((X & TPCC_RFSZ_MASK) >> 6)
|
||
|
#define TPCC_RMSZ_MASK 0x3c
|
||
|
#define TpccRmsz(X) ((X & TPCC_RMSZ_MASK) >> 2)
|
||
|
#define TPCC_RASZ_MASK 0x03
|
||
|
#define TpccRasz(X) (X & TPCC_RASZ_MASK)
|
||
|
|
||
|
//
|
||
|
// CFTABLE_ENTRY data items
|
||
|
//
|
||
|
|
||
|
#define IntFace(X) ((X & 0x80) >> 7)
|
||
|
#define Default(X) ((X & 0x40) >> 6)
|
||
|
#define ConfigEntryNumber(X) (X & 0x3f)
|
||
|
|
||
|
#define PowerInformation(X) (X & 0x03)
|
||
|
#define TimingInformation(X) ((X & 0x04) >> 2)
|
||
|
#define IoSpaceInformation(X) ((X & 0x08) >> 3)
|
||
|
#define IRQInformation(X) ((X & 0x10) >> 4)
|
||
|
#define MemSpaceInformation(X) ((X & 0x60) >> 5)
|
||
|
#define MiscInformation(X) ((X & 0x80) >> 7)
|
||
|
|
||
|
//
|
||
|
// Power information (part of CISTPL_CFTABLE_ENTRY) defines.
|
||
|
//
|
||
|
|
||
|
#define EXTENSION_BYTE_FOLLOWS 0x80
|
||
|
|
||
|
//
|
||
|
// Io Space information (part of CISTPL_CFTABLE_ENTRY) defines.
|
||
|
//
|
||
|
|
||
|
#define IO_ADDRESS_LINES_MASK 0x1f
|
||
|
#define RANGE_MASK 0x0f
|
||
|
|
||
|
#define Is8BitAccess(X) ((X & 0x20) >> 5)
|
||
|
#define Is16BitAccess(X) ((X & 0x40) >> 6)
|
||
|
#define HasRanges(X) ((X & 0x80) >> 7)
|
||
|
|
||
|
#define GetAddressSize(X) ((X & 0x30) >> 4)
|
||
|
#define GetLengthSize(X) ((X & 0xc0) >> 6)
|
||
|
|
||
|
//
|
||
|
// CISTPL_FUNCID function codes
|
||
|
//
|
||
|
|
||
|
#define PCCARD_TYPE_MULTIFUNCTION 0
|
||
|
#define PCCARD_TYPE_MEMORY 1
|
||
|
#define PCCARD_TYPE_SERIAL 2
|
||
|
#define PCCARD_TYPE_PARALLEL 3
|
||
|
#define PCCARD_TYPE_ATA 4
|
||
|
#define PCCARD_TYPE_VIDEO 5
|
||
|
#define PCCARD_TYPE_NETWORK 6
|
||
|
#define PCCARD_TYPE_AIMS 7
|
||
|
#define PCCARD_TYPE_SCSI_BRIDGE 8
|
||
|
#define PCCARD_TYPE_SECURITY 9
|
||
|
|
||
|
//LATER: definitions not in spec
|
||
|
#define PCCARD_TYPE_MULTIFUNCTION3 10
|
||
|
#define PCCARD_TYPE_FLASH_MEMORY 11
|
||
|
#define PCCARD_TYPE_MODEM 12
|
||
|
|
||
|
#define PCCARD_TYPE_RESERVED 0xff
|
||
|
|
||
|
/******************************************************************
|
||
|
* Tuple Flags.
|
||
|
******************************************************************/
|
||
|
|
||
|
#define TPLF_COMMON 0x0001
|
||
|
#define TPLF_READ 0x0002 // Only passed to AccessCISMem
|
||
|
#define TPLF_INDIRECT 0x0004
|
||
|
#define TPLF_IND_LINK 0x0008
|
||
|
|
||
|
#define TPLF_NOTHING 0x0000 // 0 is an unused entry
|
||
|
#define TPLF_IMPLIED_LINK 0x0010
|
||
|
#define TPLF_NO_LINK 0x0020
|
||
|
#define TPLF_LINK_TO_A 0x0030
|
||
|
#define TPLF_LINK_TO_C 0x0040
|
||
|
#define TPLF_LINK_TO_CB 0x0050
|
||
|
#define TPLF_LINK_MASK 0x0070
|
||
|
|
||
|
#define TPLF_ASI 0x0700
|
||
|
#define TPLF_ASI_SHIFT 8
|
||
|
|
||
|
#define TPLF_RESERVED_BITS 0xF882
|
||
|
|
||
|
//
|
||
|
// Tuple attributes
|
||
|
//
|
||
|
#define TPLA_RET_LINKS 0x0001
|
||
|
#define TPLA_RESERVED_BITS 0xFFFE
|
||
|
|
||
|
#define TPLL_ADDR 0x2
|
||
|
#define TPLMFC_NUM 0x2
|