1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * cistpl.h 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * The initial developer of the original code is David A. Hinds 6*4882a593Smuzhiyun * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds 7*4882a593Smuzhiyun * are Copyright (C) 1999 David A. Hinds. All Rights Reserved. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * (C) 1999 David A. Hinds 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef _LINUX_CISTPL_H 13*4882a593Smuzhiyun #define _LINUX_CISTPL_H 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun typedef unsigned char cisdata_t; 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define CISTPL_NULL 0x00 18*4882a593Smuzhiyun #define CISTPL_DEVICE 0x01 19*4882a593Smuzhiyun #define CISTPL_LONGLINK_CB 0x02 20*4882a593Smuzhiyun #define CISTPL_INDIRECT 0x03 21*4882a593Smuzhiyun #define CISTPL_CONFIG_CB 0x04 22*4882a593Smuzhiyun #define CISTPL_CFTABLE_ENTRY_CB 0x05 23*4882a593Smuzhiyun #define CISTPL_LONGLINK_MFC 0x06 24*4882a593Smuzhiyun #define CISTPL_BAR 0x07 25*4882a593Smuzhiyun #define CISTPL_PWR_MGMNT 0x08 26*4882a593Smuzhiyun #define CISTPL_EXTDEVICE 0x09 27*4882a593Smuzhiyun #define CISTPL_CHECKSUM 0x10 28*4882a593Smuzhiyun #define CISTPL_LONGLINK_A 0x11 29*4882a593Smuzhiyun #define CISTPL_LONGLINK_C 0x12 30*4882a593Smuzhiyun #define CISTPL_LINKTARGET 0x13 31*4882a593Smuzhiyun #define CISTPL_NO_LINK 0x14 32*4882a593Smuzhiyun #define CISTPL_VERS_1 0x15 33*4882a593Smuzhiyun #define CISTPL_ALTSTR 0x16 34*4882a593Smuzhiyun #define CISTPL_DEVICE_A 0x17 35*4882a593Smuzhiyun #define CISTPL_JEDEC_C 0x18 36*4882a593Smuzhiyun #define CISTPL_JEDEC_A 0x19 37*4882a593Smuzhiyun #define CISTPL_CONFIG 0x1a 38*4882a593Smuzhiyun #define CISTPL_CFTABLE_ENTRY 0x1b 39*4882a593Smuzhiyun #define CISTPL_DEVICE_OC 0x1c 40*4882a593Smuzhiyun #define CISTPL_DEVICE_OA 0x1d 41*4882a593Smuzhiyun #define CISTPL_DEVICE_GEO 0x1e 42*4882a593Smuzhiyun #define CISTPL_DEVICE_GEO_A 0x1f 43*4882a593Smuzhiyun #define CISTPL_MANFID 0x20 44*4882a593Smuzhiyun #define CISTPL_FUNCID 0x21 45*4882a593Smuzhiyun #define CISTPL_FUNCE 0x22 46*4882a593Smuzhiyun #define CISTPL_SWIL 0x23 47*4882a593Smuzhiyun #define CISTPL_END 0xff 48*4882a593Smuzhiyun /* Layer 2 tuples */ 49*4882a593Smuzhiyun #define CISTPL_VERS_2 0x40 50*4882a593Smuzhiyun #define CISTPL_FORMAT 0x41 51*4882a593Smuzhiyun #define CISTPL_GEOMETRY 0x42 52*4882a593Smuzhiyun #define CISTPL_BYTEORDER 0x43 53*4882a593Smuzhiyun #define CISTPL_DATE 0x44 54*4882a593Smuzhiyun #define CISTPL_BATTERY 0x45 55*4882a593Smuzhiyun #define CISTPL_FORMAT_A 0x47 56*4882a593Smuzhiyun /* Layer 3 tuples */ 57*4882a593Smuzhiyun #define CISTPL_ORG 0x46 58*4882a593Smuzhiyun #define CISTPL_SPCL 0x90 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun typedef struct cistpl_longlink_t { 61*4882a593Smuzhiyun u_int addr; 62*4882a593Smuzhiyun } cistpl_longlink_t; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun typedef struct cistpl_checksum_t { 65*4882a593Smuzhiyun u_short addr; 66*4882a593Smuzhiyun u_short len; 67*4882a593Smuzhiyun u_char sum; 68*4882a593Smuzhiyun } cistpl_checksum_t; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun #define CISTPL_MAX_FUNCTIONS 8 71*4882a593Smuzhiyun #define CISTPL_MFC_ATTR 0x00 72*4882a593Smuzhiyun #define CISTPL_MFC_COMMON 0x01 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun typedef struct cistpl_longlink_mfc_t { 75*4882a593Smuzhiyun u_char nfn; 76*4882a593Smuzhiyun struct { 77*4882a593Smuzhiyun u_char space; 78*4882a593Smuzhiyun u_int addr; 79*4882a593Smuzhiyun } fn[CISTPL_MAX_FUNCTIONS]; 80*4882a593Smuzhiyun } cistpl_longlink_mfc_t; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #define CISTPL_MAX_ALTSTR_STRINGS 4 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun typedef struct cistpl_altstr_t { 85*4882a593Smuzhiyun u_char ns; 86*4882a593Smuzhiyun u_char ofs[CISTPL_MAX_ALTSTR_STRINGS]; 87*4882a593Smuzhiyun char str[254]; 88*4882a593Smuzhiyun } cistpl_altstr_t; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun #define CISTPL_DTYPE_NULL 0x00 91*4882a593Smuzhiyun #define CISTPL_DTYPE_ROM 0x01 92*4882a593Smuzhiyun #define CISTPL_DTYPE_OTPROM 0x02 93*4882a593Smuzhiyun #define CISTPL_DTYPE_EPROM 0x03 94*4882a593Smuzhiyun #define CISTPL_DTYPE_EEPROM 0x04 95*4882a593Smuzhiyun #define CISTPL_DTYPE_FLASH 0x05 96*4882a593Smuzhiyun #define CISTPL_DTYPE_SRAM 0x06 97*4882a593Smuzhiyun #define CISTPL_DTYPE_DRAM 0x07 98*4882a593Smuzhiyun #define CISTPL_DTYPE_FUNCSPEC 0x0d 99*4882a593Smuzhiyun #define CISTPL_DTYPE_EXTEND 0x0e 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun #define CISTPL_MAX_DEVICES 4 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun typedef struct cistpl_device_t { 104*4882a593Smuzhiyun u_char ndev; 105*4882a593Smuzhiyun struct { 106*4882a593Smuzhiyun u_char type; 107*4882a593Smuzhiyun u_char wp; 108*4882a593Smuzhiyun u_int speed; 109*4882a593Smuzhiyun u_int size; 110*4882a593Smuzhiyun } dev[CISTPL_MAX_DEVICES]; 111*4882a593Smuzhiyun } cistpl_device_t; 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun #define CISTPL_DEVICE_MWAIT 0x01 114*4882a593Smuzhiyun #define CISTPL_DEVICE_3VCC 0x02 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun typedef struct cistpl_device_o_t { 117*4882a593Smuzhiyun u_char flags; 118*4882a593Smuzhiyun cistpl_device_t device; 119*4882a593Smuzhiyun } cistpl_device_o_t; 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun #define CISTPL_VERS_1_MAX_PROD_STRINGS 4 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun typedef struct cistpl_vers_1_t { 124*4882a593Smuzhiyun u_char major; 125*4882a593Smuzhiyun u_char minor; 126*4882a593Smuzhiyun u_char ns; 127*4882a593Smuzhiyun u_char ofs[CISTPL_VERS_1_MAX_PROD_STRINGS]; 128*4882a593Smuzhiyun char str[254]; 129*4882a593Smuzhiyun } cistpl_vers_1_t; 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun typedef struct cistpl_jedec_t { 132*4882a593Smuzhiyun u_char nid; 133*4882a593Smuzhiyun struct { 134*4882a593Smuzhiyun u_char mfr; 135*4882a593Smuzhiyun u_char info; 136*4882a593Smuzhiyun } id[CISTPL_MAX_DEVICES]; 137*4882a593Smuzhiyun } cistpl_jedec_t; 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun typedef struct cistpl_manfid_t { 140*4882a593Smuzhiyun u_short manf; 141*4882a593Smuzhiyun u_short card; 142*4882a593Smuzhiyun } cistpl_manfid_t; 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun #define CISTPL_FUNCID_MULTI 0x00 145*4882a593Smuzhiyun #define CISTPL_FUNCID_MEMORY 0x01 146*4882a593Smuzhiyun #define CISTPL_FUNCID_SERIAL 0x02 147*4882a593Smuzhiyun #define CISTPL_FUNCID_PARALLEL 0x03 148*4882a593Smuzhiyun #define CISTPL_FUNCID_FIXED 0x04 149*4882a593Smuzhiyun #define CISTPL_FUNCID_VIDEO 0x05 150*4882a593Smuzhiyun #define CISTPL_FUNCID_NETWORK 0x06 151*4882a593Smuzhiyun #define CISTPL_FUNCID_AIMS 0x07 152*4882a593Smuzhiyun #define CISTPL_FUNCID_SCSI 0x08 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun #define CISTPL_SYSINIT_POST 0x01 155*4882a593Smuzhiyun #define CISTPL_SYSINIT_ROM 0x02 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun typedef struct cistpl_funcid_t { 158*4882a593Smuzhiyun u_char func; 159*4882a593Smuzhiyun u_char sysinit; 160*4882a593Smuzhiyun } cistpl_funcid_t; 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun typedef struct cistpl_funce_t { 163*4882a593Smuzhiyun u_char type; 164*4882a593Smuzhiyun u_char data[]; 165*4882a593Smuzhiyun } cistpl_funce_t; 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun /*====================================================================== 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun Modem Function Extension Tuples 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun ======================================================================*/ 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_IF 0x00 174*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_CAP 0x01 175*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_SERV_DATA 0x02 176*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_SERV_FAX 0x03 177*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_SERV_VOICE 0x04 178*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_CAP_DATA 0x05 179*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_CAP_FAX 0x06 180*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_CAP_VOICE 0x07 181*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_IF_DATA 0x08 182*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_IF_FAX 0x09 183*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_IF_VOICE 0x0a 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun /* UART identification */ 186*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_8250 0x00 187*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_16450 0x01 188*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_16550 0x02 189*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_8251 0x03 190*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_8530 0x04 191*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_85230 0x05 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun /* UART capabilities */ 194*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_SPACE 0x01 195*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_MARK 0x02 196*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_ODD 0x04 197*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_EVEN 0x08 198*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_5BIT 0x01 199*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_6BIT 0x02 200*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_7BIT 0x04 201*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_8BIT 0x08 202*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_1STOP 0x10 203*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_MSTOP 0x20 204*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_2STOP 0x40 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun typedef struct cistpl_serial_t { 207*4882a593Smuzhiyun u_char uart_type; 208*4882a593Smuzhiyun u_char uart_cap_0; 209*4882a593Smuzhiyun u_char uart_cap_1; 210*4882a593Smuzhiyun } cistpl_serial_t; 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun typedef struct cistpl_modem_cap_t { 213*4882a593Smuzhiyun u_char flow; 214*4882a593Smuzhiyun u_char cmd_buf; 215*4882a593Smuzhiyun u_char rcv_buf_0, rcv_buf_1, rcv_buf_2; 216*4882a593Smuzhiyun u_char xmit_buf_0, xmit_buf_1, xmit_buf_2; 217*4882a593Smuzhiyun } cistpl_modem_cap_t; 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_103 0x01 220*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V21 0x02 221*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V23 0x04 222*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V22 0x08 223*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_212A 0x10 224*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V22BIS 0x20 225*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V26 0x40 226*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V26BIS 0x80 227*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V27BIS 0x01 228*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V29 0x02 229*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V32 0x04 230*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V32BIS 0x08 231*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V34 0x10 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun #define CISTPL_SERIAL_ERR_MNP2_4 0x01 234*4882a593Smuzhiyun #define CISTPL_SERIAL_ERR_V42_LAPM 0x02 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun #define CISTPL_SERIAL_CMPR_V42BIS 0x01 237*4882a593Smuzhiyun #define CISTPL_SERIAL_CMPR_MNP5 0x02 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_AT1 0x01 240*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_AT2 0x02 241*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_AT3 0x04 242*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_MNP_AT 0x08 243*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_V25BIS 0x10 244*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_V25A 0x20 245*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_DMCL 0x40 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun typedef struct cistpl_data_serv_t { 248*4882a593Smuzhiyun u_char max_data_0; 249*4882a593Smuzhiyun u_char max_data_1; 250*4882a593Smuzhiyun u_char modulation_0; 251*4882a593Smuzhiyun u_char modulation_1; 252*4882a593Smuzhiyun u_char error_control; 253*4882a593Smuzhiyun u_char compression; 254*4882a593Smuzhiyun u_char cmd_protocol; 255*4882a593Smuzhiyun u_char escape; 256*4882a593Smuzhiyun u_char encrypt; 257*4882a593Smuzhiyun u_char misc_features; 258*4882a593Smuzhiyun u_char ccitt_code[]; 259*4882a593Smuzhiyun } cistpl_data_serv_t; 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun typedef struct cistpl_fax_serv_t { 262*4882a593Smuzhiyun u_char max_data_0; 263*4882a593Smuzhiyun u_char max_data_1; 264*4882a593Smuzhiyun u_char modulation; 265*4882a593Smuzhiyun u_char encrypt; 266*4882a593Smuzhiyun u_char features_0; 267*4882a593Smuzhiyun u_char features_1; 268*4882a593Smuzhiyun u_char ccitt_code[]; 269*4882a593Smuzhiyun } cistpl_fax_serv_t; 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun typedef struct cistpl_voice_serv_t { 272*4882a593Smuzhiyun u_char max_data_0; 273*4882a593Smuzhiyun u_char max_data_1; 274*4882a593Smuzhiyun } cistpl_voice_serv_t; 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun /*====================================================================== 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun LAN Function Extension Tuples 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun ======================================================================*/ 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun #define CISTPL_FUNCE_LAN_TECH 0x01 283*4882a593Smuzhiyun #define CISTPL_FUNCE_LAN_SPEED 0x02 284*4882a593Smuzhiyun #define CISTPL_FUNCE_LAN_MEDIA 0x03 285*4882a593Smuzhiyun #define CISTPL_FUNCE_LAN_NODE_ID 0x04 286*4882a593Smuzhiyun #define CISTPL_FUNCE_LAN_CONNECTOR 0x05 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun /* LAN technologies */ 289*4882a593Smuzhiyun #define CISTPL_LAN_TECH_ARCNET 0x01 290*4882a593Smuzhiyun #define CISTPL_LAN_TECH_ETHERNET 0x02 291*4882a593Smuzhiyun #define CISTPL_LAN_TECH_TOKENRING 0x03 292*4882a593Smuzhiyun #define CISTPL_LAN_TECH_LOCALTALK 0x04 293*4882a593Smuzhiyun #define CISTPL_LAN_TECH_FDDI 0x05 294*4882a593Smuzhiyun #define CISTPL_LAN_TECH_ATM 0x06 295*4882a593Smuzhiyun #define CISTPL_LAN_TECH_WIRELESS 0x07 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun typedef struct cistpl_lan_tech_t { 298*4882a593Smuzhiyun u_char tech; 299*4882a593Smuzhiyun } cistpl_lan_tech_t; 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun typedef struct cistpl_lan_speed_t { 302*4882a593Smuzhiyun u_int speed; 303*4882a593Smuzhiyun } cistpl_lan_speed_t; 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun /* LAN media definitions */ 306*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_UTP 0x01 307*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_STP 0x02 308*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_THIN_COAX 0x03 309*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_THICK_COAX 0x04 310*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_FIBER 0x05 311*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_900MHZ 0x06 312*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_2GHZ 0x07 313*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_5GHZ 0x08 314*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_DIFF_IR 0x09 315*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_PTP_IR 0x0a 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun typedef struct cistpl_lan_media_t { 318*4882a593Smuzhiyun u_char media; 319*4882a593Smuzhiyun } cistpl_lan_media_t; 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun typedef struct cistpl_lan_node_id_t { 322*4882a593Smuzhiyun u_char nb; 323*4882a593Smuzhiyun u_char id[16]; 324*4882a593Smuzhiyun } cistpl_lan_node_id_t; 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun typedef struct cistpl_lan_connector_t { 327*4882a593Smuzhiyun u_char code; 328*4882a593Smuzhiyun } cistpl_lan_connector_t; 329*4882a593Smuzhiyun 330*4882a593Smuzhiyun /*====================================================================== 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun IDE Function Extension Tuples 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun ======================================================================*/ 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun #define CISTPL_IDE_INTERFACE 0x01 337*4882a593Smuzhiyun 338*4882a593Smuzhiyun typedef struct cistpl_ide_interface_t { 339*4882a593Smuzhiyun u_char interface; 340*4882a593Smuzhiyun } cistpl_ide_interface_t; 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun /* First feature byte */ 343*4882a593Smuzhiyun #define CISTPL_IDE_SILICON 0x04 344*4882a593Smuzhiyun #define CISTPL_IDE_UNIQUE 0x08 345*4882a593Smuzhiyun #define CISTPL_IDE_DUAL 0x10 346*4882a593Smuzhiyun 347*4882a593Smuzhiyun /* Second feature byte */ 348*4882a593Smuzhiyun #define CISTPL_IDE_HAS_SLEEP 0x01 349*4882a593Smuzhiyun #define CISTPL_IDE_HAS_STANDBY 0x02 350*4882a593Smuzhiyun #define CISTPL_IDE_HAS_IDLE 0x04 351*4882a593Smuzhiyun #define CISTPL_IDE_LOW_POWER 0x08 352*4882a593Smuzhiyun #define CISTPL_IDE_REG_INHIBIT 0x10 353*4882a593Smuzhiyun #define CISTPL_IDE_HAS_INDEX 0x20 354*4882a593Smuzhiyun #define CISTPL_IDE_IOIS16 0x40 355*4882a593Smuzhiyun 356*4882a593Smuzhiyun typedef struct cistpl_ide_feature_t { 357*4882a593Smuzhiyun u_char feature1; 358*4882a593Smuzhiyun u_char feature2; 359*4882a593Smuzhiyun } cistpl_ide_feature_t; 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun #define CISTPL_FUNCE_IDE_IFACE 0x01 362*4882a593Smuzhiyun #define CISTPL_FUNCE_IDE_MASTER 0x02 363*4882a593Smuzhiyun #define CISTPL_FUNCE_IDE_SLAVE 0x03 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun /*====================================================================== 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun Configuration Table Entries 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun ======================================================================*/ 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun #define CISTPL_BAR_SPACE 0x07 372*4882a593Smuzhiyun #define CISTPL_BAR_SPACE_IO 0x10 373*4882a593Smuzhiyun #define CISTPL_BAR_PREFETCH 0x20 374*4882a593Smuzhiyun #define CISTPL_BAR_CACHEABLE 0x40 375*4882a593Smuzhiyun #define CISTPL_BAR_1MEG_MAP 0x80 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun typedef struct cistpl_bar_t { 378*4882a593Smuzhiyun u_char attr; 379*4882a593Smuzhiyun u_int size; 380*4882a593Smuzhiyun } cistpl_bar_t; 381*4882a593Smuzhiyun 382*4882a593Smuzhiyun typedef struct cistpl_config_t { 383*4882a593Smuzhiyun u_char last_idx; 384*4882a593Smuzhiyun u_int base; 385*4882a593Smuzhiyun u_int rmask[4]; 386*4882a593Smuzhiyun u_char subtuples; 387*4882a593Smuzhiyun } cistpl_config_t; 388*4882a593Smuzhiyun 389*4882a593Smuzhiyun /* These are bits in the 'present' field, and indices in 'param' */ 390*4882a593Smuzhiyun #define CISTPL_POWER_VNOM 0 391*4882a593Smuzhiyun #define CISTPL_POWER_VMIN 1 392*4882a593Smuzhiyun #define CISTPL_POWER_VMAX 2 393*4882a593Smuzhiyun #define CISTPL_POWER_ISTATIC 3 394*4882a593Smuzhiyun #define CISTPL_POWER_IAVG 4 395*4882a593Smuzhiyun #define CISTPL_POWER_IPEAK 5 396*4882a593Smuzhiyun #define CISTPL_POWER_IDOWN 6 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun #define CISTPL_POWER_HIGHZ_OK 0x01 399*4882a593Smuzhiyun #define CISTPL_POWER_HIGHZ_REQ 0x02 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun typedef struct cistpl_power_t { 402*4882a593Smuzhiyun u_char present; 403*4882a593Smuzhiyun u_char flags; 404*4882a593Smuzhiyun u_int param[7]; 405*4882a593Smuzhiyun } cistpl_power_t; 406*4882a593Smuzhiyun 407*4882a593Smuzhiyun typedef struct cistpl_timing_t { 408*4882a593Smuzhiyun u_int wait, waitscale; 409*4882a593Smuzhiyun u_int ready, rdyscale; 410*4882a593Smuzhiyun u_int reserved, rsvscale; 411*4882a593Smuzhiyun } cistpl_timing_t; 412*4882a593Smuzhiyun 413*4882a593Smuzhiyun #define CISTPL_IO_LINES_MASK 0x1f 414*4882a593Smuzhiyun #define CISTPL_IO_8BIT 0x20 415*4882a593Smuzhiyun #define CISTPL_IO_16BIT 0x40 416*4882a593Smuzhiyun #define CISTPL_IO_RANGE 0x80 417*4882a593Smuzhiyun 418*4882a593Smuzhiyun #define CISTPL_IO_MAX_WIN 16 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun typedef struct cistpl_io_t { 421*4882a593Smuzhiyun u_char flags; 422*4882a593Smuzhiyun u_char nwin; 423*4882a593Smuzhiyun struct { 424*4882a593Smuzhiyun u_int base; 425*4882a593Smuzhiyun u_int len; 426*4882a593Smuzhiyun } win[CISTPL_IO_MAX_WIN]; 427*4882a593Smuzhiyun } cistpl_io_t; 428*4882a593Smuzhiyun 429*4882a593Smuzhiyun typedef struct cistpl_irq_t { 430*4882a593Smuzhiyun u_int IRQInfo1; 431*4882a593Smuzhiyun u_int IRQInfo2; 432*4882a593Smuzhiyun } cistpl_irq_t; 433*4882a593Smuzhiyun 434*4882a593Smuzhiyun #define CISTPL_MEM_MAX_WIN 8 435*4882a593Smuzhiyun 436*4882a593Smuzhiyun typedef struct cistpl_mem_t { 437*4882a593Smuzhiyun u_char flags; 438*4882a593Smuzhiyun u_char nwin; 439*4882a593Smuzhiyun struct { 440*4882a593Smuzhiyun u_int len; 441*4882a593Smuzhiyun u_int card_addr; 442*4882a593Smuzhiyun u_int host_addr; 443*4882a593Smuzhiyun } win[CISTPL_MEM_MAX_WIN]; 444*4882a593Smuzhiyun } cistpl_mem_t; 445*4882a593Smuzhiyun 446*4882a593Smuzhiyun #define CISTPL_CFTABLE_DEFAULT 0x0001 447*4882a593Smuzhiyun #define CISTPL_CFTABLE_BVDS 0x0002 448*4882a593Smuzhiyun #define CISTPL_CFTABLE_WP 0x0004 449*4882a593Smuzhiyun #define CISTPL_CFTABLE_RDYBSY 0x0008 450*4882a593Smuzhiyun #define CISTPL_CFTABLE_MWAIT 0x0010 451*4882a593Smuzhiyun #define CISTPL_CFTABLE_AUDIO 0x0800 452*4882a593Smuzhiyun #define CISTPL_CFTABLE_READONLY 0x1000 453*4882a593Smuzhiyun #define CISTPL_CFTABLE_PWRDOWN 0x2000 454*4882a593Smuzhiyun 455*4882a593Smuzhiyun typedef struct cistpl_cftable_entry_t { 456*4882a593Smuzhiyun u_char index; 457*4882a593Smuzhiyun u_short flags; 458*4882a593Smuzhiyun u_char interface; 459*4882a593Smuzhiyun cistpl_power_t vcc, vpp1, vpp2; 460*4882a593Smuzhiyun cistpl_timing_t timing; 461*4882a593Smuzhiyun cistpl_io_t io; 462*4882a593Smuzhiyun cistpl_irq_t irq; 463*4882a593Smuzhiyun cistpl_mem_t mem; 464*4882a593Smuzhiyun u_char subtuples; 465*4882a593Smuzhiyun } cistpl_cftable_entry_t; 466*4882a593Smuzhiyun 467*4882a593Smuzhiyun #define CISTPL_CFTABLE_MASTER 0x000100 468*4882a593Smuzhiyun #define CISTPL_CFTABLE_INVALIDATE 0x000200 469*4882a593Smuzhiyun #define CISTPL_CFTABLE_VGA_PALETTE 0x000400 470*4882a593Smuzhiyun #define CISTPL_CFTABLE_PARITY 0x000800 471*4882a593Smuzhiyun #define CISTPL_CFTABLE_WAIT 0x001000 472*4882a593Smuzhiyun #define CISTPL_CFTABLE_SERR 0x002000 473*4882a593Smuzhiyun #define CISTPL_CFTABLE_FAST_BACK 0x004000 474*4882a593Smuzhiyun #define CISTPL_CFTABLE_BINARY_AUDIO 0x010000 475*4882a593Smuzhiyun #define CISTPL_CFTABLE_PWM_AUDIO 0x020000 476*4882a593Smuzhiyun 477*4882a593Smuzhiyun typedef struct cistpl_cftable_entry_cb_t { 478*4882a593Smuzhiyun u_char index; 479*4882a593Smuzhiyun u_int flags; 480*4882a593Smuzhiyun cistpl_power_t vcc, vpp1, vpp2; 481*4882a593Smuzhiyun u_char io; 482*4882a593Smuzhiyun cistpl_irq_t irq; 483*4882a593Smuzhiyun u_char mem; 484*4882a593Smuzhiyun u_char subtuples; 485*4882a593Smuzhiyun } cistpl_cftable_entry_cb_t; 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun typedef struct cistpl_device_geo_t { 488*4882a593Smuzhiyun u_char ngeo; 489*4882a593Smuzhiyun struct { 490*4882a593Smuzhiyun u_char buswidth; 491*4882a593Smuzhiyun u_int erase_block; 492*4882a593Smuzhiyun u_int read_block; 493*4882a593Smuzhiyun u_int write_block; 494*4882a593Smuzhiyun u_int partition; 495*4882a593Smuzhiyun u_int interleave; 496*4882a593Smuzhiyun } geo[CISTPL_MAX_DEVICES]; 497*4882a593Smuzhiyun } cistpl_device_geo_t; 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun typedef struct cistpl_vers_2_t { 500*4882a593Smuzhiyun u_char vers; 501*4882a593Smuzhiyun u_char comply; 502*4882a593Smuzhiyun u_short dindex; 503*4882a593Smuzhiyun u_char vspec8, vspec9; 504*4882a593Smuzhiyun u_char nhdr; 505*4882a593Smuzhiyun u_char vendor, info; 506*4882a593Smuzhiyun char str[244]; 507*4882a593Smuzhiyun } cistpl_vers_2_t; 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun typedef struct cistpl_org_t { 510*4882a593Smuzhiyun u_char data_org; 511*4882a593Smuzhiyun char desc[30]; 512*4882a593Smuzhiyun } cistpl_org_t; 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun #define CISTPL_ORG_FS 0x00 515*4882a593Smuzhiyun #define CISTPL_ORG_APPSPEC 0x01 516*4882a593Smuzhiyun #define CISTPL_ORG_XIP 0x02 517*4882a593Smuzhiyun 518*4882a593Smuzhiyun typedef struct cistpl_format_t { 519*4882a593Smuzhiyun u_char type; 520*4882a593Smuzhiyun u_char edc; 521*4882a593Smuzhiyun u_int offset; 522*4882a593Smuzhiyun u_int length; 523*4882a593Smuzhiyun } cistpl_format_t; 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun #define CISTPL_FORMAT_DISK 0x00 526*4882a593Smuzhiyun #define CISTPL_FORMAT_MEM 0x01 527*4882a593Smuzhiyun 528*4882a593Smuzhiyun #define CISTPL_EDC_NONE 0x00 529*4882a593Smuzhiyun #define CISTPL_EDC_CKSUM 0x01 530*4882a593Smuzhiyun #define CISTPL_EDC_CRC 0x02 531*4882a593Smuzhiyun #define CISTPL_EDC_PCC 0x03 532*4882a593Smuzhiyun 533*4882a593Smuzhiyun typedef union cisparse_t { 534*4882a593Smuzhiyun cistpl_device_t device; 535*4882a593Smuzhiyun cistpl_checksum_t checksum; 536*4882a593Smuzhiyun cistpl_longlink_t longlink; 537*4882a593Smuzhiyun cistpl_longlink_mfc_t longlink_mfc; 538*4882a593Smuzhiyun cistpl_vers_1_t version_1; 539*4882a593Smuzhiyun cistpl_altstr_t altstr; 540*4882a593Smuzhiyun cistpl_jedec_t jedec; 541*4882a593Smuzhiyun cistpl_manfid_t manfid; 542*4882a593Smuzhiyun cistpl_funcid_t funcid; 543*4882a593Smuzhiyun cistpl_funce_t funce; 544*4882a593Smuzhiyun cistpl_bar_t bar; 545*4882a593Smuzhiyun cistpl_config_t config; 546*4882a593Smuzhiyun cistpl_cftable_entry_t cftable_entry; 547*4882a593Smuzhiyun cistpl_cftable_entry_cb_t cftable_entry_cb; 548*4882a593Smuzhiyun cistpl_device_geo_t device_geo; 549*4882a593Smuzhiyun cistpl_vers_2_t vers_2; 550*4882a593Smuzhiyun cistpl_org_t org; 551*4882a593Smuzhiyun cistpl_format_t format; 552*4882a593Smuzhiyun } cisparse_t; 553*4882a593Smuzhiyun 554*4882a593Smuzhiyun typedef struct tuple_t { 555*4882a593Smuzhiyun u_int Attributes; 556*4882a593Smuzhiyun cisdata_t DesiredTuple; 557*4882a593Smuzhiyun u_int Flags; /* internal use */ 558*4882a593Smuzhiyun u_int LinkOffset; /* internal use */ 559*4882a593Smuzhiyun u_int CISOffset; /* internal use */ 560*4882a593Smuzhiyun cisdata_t TupleCode; 561*4882a593Smuzhiyun cisdata_t TupleLink; 562*4882a593Smuzhiyun cisdata_t TupleOffset; 563*4882a593Smuzhiyun cisdata_t TupleDataMax; 564*4882a593Smuzhiyun cisdata_t TupleDataLen; 565*4882a593Smuzhiyun cisdata_t *TupleData; 566*4882a593Smuzhiyun } tuple_t; 567*4882a593Smuzhiyun 568*4882a593Smuzhiyun /* Special cisdata_t value */ 569*4882a593Smuzhiyun #define RETURN_FIRST_TUPLE 0xff 570*4882a593Smuzhiyun 571*4882a593Smuzhiyun /* Attributes for tuple calls */ 572*4882a593Smuzhiyun #define TUPLE_RETURN_LINK 0x01 573*4882a593Smuzhiyun #define TUPLE_RETURN_COMMON 0x02 574*4882a593Smuzhiyun 575*4882a593Smuzhiyun #define CISTPL_MAX_CIS_SIZE 0x200 576*4882a593Smuzhiyun 577*4882a593Smuzhiyun #endif /* LINUX_CISTPL_H */ 578