1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 21da177e4SLinus Torvalds /* 31da177e4SLinus Torvalds * cistpl.h 41da177e4SLinus Torvalds * 51da177e4SLinus Torvalds * The initial developer of the original code is David A. Hinds 61da177e4SLinus Torvalds * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds 71da177e4SLinus Torvalds * are Copyright (C) 1999 David A. Hinds. All Rights Reserved. 81da177e4SLinus Torvalds * 91da177e4SLinus Torvalds * (C) 1999 David A. Hinds 101da177e4SLinus Torvalds */ 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds #ifndef _LINUX_CISTPL_H 131da177e4SLinus Torvalds #define _LINUX_CISTPL_H 141da177e4SLinus Torvalds 15ac8b4228SDominik Brodowski typedef unsigned char cisdata_t; 16ac8b4228SDominik Brodowski 171da177e4SLinus Torvalds #define CISTPL_NULL 0x00 181da177e4SLinus Torvalds #define CISTPL_DEVICE 0x01 191da177e4SLinus Torvalds #define CISTPL_LONGLINK_CB 0x02 201da177e4SLinus Torvalds #define CISTPL_INDIRECT 0x03 211da177e4SLinus Torvalds #define CISTPL_CONFIG_CB 0x04 221da177e4SLinus Torvalds #define CISTPL_CFTABLE_ENTRY_CB 0x05 231da177e4SLinus Torvalds #define CISTPL_LONGLINK_MFC 0x06 241da177e4SLinus Torvalds #define CISTPL_BAR 0x07 251da177e4SLinus Torvalds #define CISTPL_PWR_MGMNT 0x08 261da177e4SLinus Torvalds #define CISTPL_EXTDEVICE 0x09 271da177e4SLinus Torvalds #define CISTPL_CHECKSUM 0x10 281da177e4SLinus Torvalds #define CISTPL_LONGLINK_A 0x11 291da177e4SLinus Torvalds #define CISTPL_LONGLINK_C 0x12 301da177e4SLinus Torvalds #define CISTPL_LINKTARGET 0x13 311da177e4SLinus Torvalds #define CISTPL_NO_LINK 0x14 321da177e4SLinus Torvalds #define CISTPL_VERS_1 0x15 331da177e4SLinus Torvalds #define CISTPL_ALTSTR 0x16 341da177e4SLinus Torvalds #define CISTPL_DEVICE_A 0x17 351da177e4SLinus Torvalds #define CISTPL_JEDEC_C 0x18 361da177e4SLinus Torvalds #define CISTPL_JEDEC_A 0x19 371da177e4SLinus Torvalds #define CISTPL_CONFIG 0x1a 381da177e4SLinus Torvalds #define CISTPL_CFTABLE_ENTRY 0x1b 391da177e4SLinus Torvalds #define CISTPL_DEVICE_OC 0x1c 401da177e4SLinus Torvalds #define CISTPL_DEVICE_OA 0x1d 411da177e4SLinus Torvalds #define CISTPL_DEVICE_GEO 0x1e 421da177e4SLinus Torvalds #define CISTPL_DEVICE_GEO_A 0x1f 431da177e4SLinus Torvalds #define CISTPL_MANFID 0x20 441da177e4SLinus Torvalds #define CISTPL_FUNCID 0x21 451da177e4SLinus Torvalds #define CISTPL_FUNCE 0x22 461da177e4SLinus Torvalds #define CISTPL_SWIL 0x23 471da177e4SLinus Torvalds #define CISTPL_END 0xff 481da177e4SLinus Torvalds /* Layer 2 tuples */ 491da177e4SLinus Torvalds #define CISTPL_VERS_2 0x40 501da177e4SLinus Torvalds #define CISTPL_FORMAT 0x41 511da177e4SLinus Torvalds #define CISTPL_GEOMETRY 0x42 521da177e4SLinus Torvalds #define CISTPL_BYTEORDER 0x43 531da177e4SLinus Torvalds #define CISTPL_DATE 0x44 541da177e4SLinus Torvalds #define CISTPL_BATTERY 0x45 551da177e4SLinus Torvalds #define CISTPL_FORMAT_A 0x47 561da177e4SLinus Torvalds /* Layer 3 tuples */ 571da177e4SLinus Torvalds #define CISTPL_ORG 0x46 581da177e4SLinus Torvalds #define CISTPL_SPCL 0x90 591da177e4SLinus Torvalds 601da177e4SLinus Torvalds typedef struct cistpl_longlink_t { 611da177e4SLinus Torvalds u_int addr; 621da177e4SLinus Torvalds } cistpl_longlink_t; 631da177e4SLinus Torvalds 641da177e4SLinus Torvalds typedef struct cistpl_checksum_t { 651da177e4SLinus Torvalds u_short addr; 661da177e4SLinus Torvalds u_short len; 671da177e4SLinus Torvalds u_char sum; 681da177e4SLinus Torvalds } cistpl_checksum_t; 691da177e4SLinus Torvalds 701da177e4SLinus Torvalds #define CISTPL_MAX_FUNCTIONS 8 711da177e4SLinus Torvalds #define CISTPL_MFC_ATTR 0x00 721da177e4SLinus Torvalds #define CISTPL_MFC_COMMON 0x01 731da177e4SLinus Torvalds 741da177e4SLinus Torvalds typedef struct cistpl_longlink_mfc_t { 751da177e4SLinus Torvalds u_char nfn; 761da177e4SLinus Torvalds struct { 771da177e4SLinus Torvalds u_char space; 781da177e4SLinus Torvalds u_int addr; 791da177e4SLinus Torvalds } fn[CISTPL_MAX_FUNCTIONS]; 801da177e4SLinus Torvalds } cistpl_longlink_mfc_t; 811da177e4SLinus Torvalds 821da177e4SLinus Torvalds #define CISTPL_MAX_ALTSTR_STRINGS 4 831da177e4SLinus Torvalds 841da177e4SLinus Torvalds typedef struct cistpl_altstr_t { 851da177e4SLinus Torvalds u_char ns; 861da177e4SLinus Torvalds u_char ofs[CISTPL_MAX_ALTSTR_STRINGS]; 871da177e4SLinus Torvalds char str[254]; 881da177e4SLinus Torvalds } cistpl_altstr_t; 891da177e4SLinus Torvalds 901da177e4SLinus Torvalds #define CISTPL_DTYPE_NULL 0x00 911da177e4SLinus Torvalds #define CISTPL_DTYPE_ROM 0x01 921da177e4SLinus Torvalds #define CISTPL_DTYPE_OTPROM 0x02 931da177e4SLinus Torvalds #define CISTPL_DTYPE_EPROM 0x03 941da177e4SLinus Torvalds #define CISTPL_DTYPE_EEPROM 0x04 951da177e4SLinus Torvalds #define CISTPL_DTYPE_FLASH 0x05 961da177e4SLinus Torvalds #define CISTPL_DTYPE_SRAM 0x06 971da177e4SLinus Torvalds #define CISTPL_DTYPE_DRAM 0x07 981da177e4SLinus Torvalds #define CISTPL_DTYPE_FUNCSPEC 0x0d 991da177e4SLinus Torvalds #define CISTPL_DTYPE_EXTEND 0x0e 1001da177e4SLinus Torvalds 1011da177e4SLinus Torvalds #define CISTPL_MAX_DEVICES 4 1021da177e4SLinus Torvalds 1031da177e4SLinus Torvalds typedef struct cistpl_device_t { 1041da177e4SLinus Torvalds u_char ndev; 1051da177e4SLinus Torvalds struct { 1061da177e4SLinus Torvalds u_char type; 1071da177e4SLinus Torvalds u_char wp; 1081da177e4SLinus Torvalds u_int speed; 1091da177e4SLinus Torvalds u_int size; 1101da177e4SLinus Torvalds } dev[CISTPL_MAX_DEVICES]; 1111da177e4SLinus Torvalds } cistpl_device_t; 1121da177e4SLinus Torvalds 1131da177e4SLinus Torvalds #define CISTPL_DEVICE_MWAIT 0x01 1141da177e4SLinus Torvalds #define CISTPL_DEVICE_3VCC 0x02 1151da177e4SLinus Torvalds 1161da177e4SLinus Torvalds typedef struct cistpl_device_o_t { 1171da177e4SLinus Torvalds u_char flags; 1181da177e4SLinus Torvalds cistpl_device_t device; 1191da177e4SLinus Torvalds } cistpl_device_o_t; 1201da177e4SLinus Torvalds 1211da177e4SLinus Torvalds #define CISTPL_VERS_1_MAX_PROD_STRINGS 4 1221da177e4SLinus Torvalds 1231da177e4SLinus Torvalds typedef struct cistpl_vers_1_t { 1241da177e4SLinus Torvalds u_char major; 1251da177e4SLinus Torvalds u_char minor; 1261da177e4SLinus Torvalds u_char ns; 1271da177e4SLinus Torvalds u_char ofs[CISTPL_VERS_1_MAX_PROD_STRINGS]; 1281da177e4SLinus Torvalds char str[254]; 1291da177e4SLinus Torvalds } cistpl_vers_1_t; 1301da177e4SLinus Torvalds 1311da177e4SLinus Torvalds typedef struct cistpl_jedec_t { 1321da177e4SLinus Torvalds u_char nid; 1331da177e4SLinus Torvalds struct { 1341da177e4SLinus Torvalds u_char mfr; 1351da177e4SLinus Torvalds u_char info; 1361da177e4SLinus Torvalds } id[CISTPL_MAX_DEVICES]; 1371da177e4SLinus Torvalds } cistpl_jedec_t; 1381da177e4SLinus Torvalds 1391da177e4SLinus Torvalds typedef struct cistpl_manfid_t { 1401da177e4SLinus Torvalds u_short manf; 1411da177e4SLinus Torvalds u_short card; 1421da177e4SLinus Torvalds } cistpl_manfid_t; 1431da177e4SLinus Torvalds 1441da177e4SLinus Torvalds #define CISTPL_FUNCID_MULTI 0x00 1451da177e4SLinus Torvalds #define CISTPL_FUNCID_MEMORY 0x01 1461da177e4SLinus Torvalds #define CISTPL_FUNCID_SERIAL 0x02 1471da177e4SLinus Torvalds #define CISTPL_FUNCID_PARALLEL 0x03 1481da177e4SLinus Torvalds #define CISTPL_FUNCID_FIXED 0x04 1491da177e4SLinus Torvalds #define CISTPL_FUNCID_VIDEO 0x05 1501da177e4SLinus Torvalds #define CISTPL_FUNCID_NETWORK 0x06 1511da177e4SLinus Torvalds #define CISTPL_FUNCID_AIMS 0x07 1521da177e4SLinus Torvalds #define CISTPL_FUNCID_SCSI 0x08 1531da177e4SLinus Torvalds 1541da177e4SLinus Torvalds #define CISTPL_SYSINIT_POST 0x01 1551da177e4SLinus Torvalds #define CISTPL_SYSINIT_ROM 0x02 1561da177e4SLinus Torvalds 1571da177e4SLinus Torvalds typedef struct cistpl_funcid_t { 1581da177e4SLinus Torvalds u_char func; 1591da177e4SLinus Torvalds u_char sysinit; 1601da177e4SLinus Torvalds } cistpl_funcid_t; 1611da177e4SLinus Torvalds 1621da177e4SLinus Torvalds typedef struct cistpl_funce_t { 1631da177e4SLinus Torvalds u_char type; 16406ed6aa5SGustavo A. R. Silva u_char data[]; 1651da177e4SLinus Torvalds } cistpl_funce_t; 1661da177e4SLinus Torvalds 1671da177e4SLinus Torvalds /*====================================================================== 1681da177e4SLinus Torvalds 1691da177e4SLinus Torvalds Modem Function Extension Tuples 1701da177e4SLinus Torvalds 1711da177e4SLinus Torvalds ======================================================================*/ 1721da177e4SLinus Torvalds 1731da177e4SLinus Torvalds #define CISTPL_FUNCE_SERIAL_IF 0x00 1741da177e4SLinus Torvalds #define CISTPL_FUNCE_SERIAL_CAP 0x01 1751da177e4SLinus Torvalds #define CISTPL_FUNCE_SERIAL_SERV_DATA 0x02 1761da177e4SLinus Torvalds #define CISTPL_FUNCE_SERIAL_SERV_FAX 0x03 1771da177e4SLinus Torvalds #define CISTPL_FUNCE_SERIAL_SERV_VOICE 0x04 1781da177e4SLinus Torvalds #define CISTPL_FUNCE_SERIAL_CAP_DATA 0x05 1791da177e4SLinus Torvalds #define CISTPL_FUNCE_SERIAL_CAP_FAX 0x06 1801da177e4SLinus Torvalds #define CISTPL_FUNCE_SERIAL_CAP_VOICE 0x07 1811da177e4SLinus Torvalds #define CISTPL_FUNCE_SERIAL_IF_DATA 0x08 1821da177e4SLinus Torvalds #define CISTPL_FUNCE_SERIAL_IF_FAX 0x09 1831da177e4SLinus Torvalds #define CISTPL_FUNCE_SERIAL_IF_VOICE 0x0a 1841da177e4SLinus Torvalds 1851da177e4SLinus Torvalds /* UART identification */ 1861da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_8250 0x00 1871da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_16450 0x01 1881da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_16550 0x02 1891da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_8251 0x03 1901da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_8530 0x04 1911da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_85230 0x05 1921da177e4SLinus Torvalds 1931da177e4SLinus Torvalds /* UART capabilities */ 1941da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_SPACE 0x01 1951da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_MARK 0x02 1961da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_ODD 0x04 1971da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_EVEN 0x08 1981da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_5BIT 0x01 1991da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_6BIT 0x02 2001da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_7BIT 0x04 2011da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_8BIT 0x08 2021da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_1STOP 0x10 2031da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_MSTOP 0x20 2041da177e4SLinus Torvalds #define CISTPL_SERIAL_UART_2STOP 0x40 2051da177e4SLinus Torvalds 2061da177e4SLinus Torvalds typedef struct cistpl_serial_t { 2071da177e4SLinus Torvalds u_char uart_type; 2081da177e4SLinus Torvalds u_char uart_cap_0; 2091da177e4SLinus Torvalds u_char uart_cap_1; 2101da177e4SLinus Torvalds } cistpl_serial_t; 2111da177e4SLinus Torvalds 2121da177e4SLinus Torvalds typedef struct cistpl_modem_cap_t { 2131da177e4SLinus Torvalds u_char flow; 2141da177e4SLinus Torvalds u_char cmd_buf; 2151da177e4SLinus Torvalds u_char rcv_buf_0, rcv_buf_1, rcv_buf_2; 2161da177e4SLinus Torvalds u_char xmit_buf_0, xmit_buf_1, xmit_buf_2; 2171da177e4SLinus Torvalds } cistpl_modem_cap_t; 2181da177e4SLinus Torvalds 2191da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_103 0x01 2201da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_V21 0x02 2211da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_V23 0x04 2221da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_V22 0x08 2231da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_212A 0x10 2241da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_V22BIS 0x20 2251da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_V26 0x40 2261da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_V26BIS 0x80 2271da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_V27BIS 0x01 2281da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_V29 0x02 2291da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_V32 0x04 2301da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_V32BIS 0x08 2311da177e4SLinus Torvalds #define CISTPL_SERIAL_MOD_V34 0x10 2321da177e4SLinus Torvalds 2331da177e4SLinus Torvalds #define CISTPL_SERIAL_ERR_MNP2_4 0x01 2341da177e4SLinus Torvalds #define CISTPL_SERIAL_ERR_V42_LAPM 0x02 2351da177e4SLinus Torvalds 2361da177e4SLinus Torvalds #define CISTPL_SERIAL_CMPR_V42BIS 0x01 2371da177e4SLinus Torvalds #define CISTPL_SERIAL_CMPR_MNP5 0x02 2381da177e4SLinus Torvalds 2391da177e4SLinus Torvalds #define CISTPL_SERIAL_CMD_AT1 0x01 2401da177e4SLinus Torvalds #define CISTPL_SERIAL_CMD_AT2 0x02 2411da177e4SLinus Torvalds #define CISTPL_SERIAL_CMD_AT3 0x04 2421da177e4SLinus Torvalds #define CISTPL_SERIAL_CMD_MNP_AT 0x08 2431da177e4SLinus Torvalds #define CISTPL_SERIAL_CMD_V25BIS 0x10 2441da177e4SLinus Torvalds #define CISTPL_SERIAL_CMD_V25A 0x20 2451da177e4SLinus Torvalds #define CISTPL_SERIAL_CMD_DMCL 0x40 2461da177e4SLinus Torvalds 2471da177e4SLinus Torvalds typedef struct cistpl_data_serv_t { 2481da177e4SLinus Torvalds u_char max_data_0; 2491da177e4SLinus Torvalds u_char max_data_1; 2501da177e4SLinus Torvalds u_char modulation_0; 2511da177e4SLinus Torvalds u_char modulation_1; 2521da177e4SLinus Torvalds u_char error_control; 2531da177e4SLinus Torvalds u_char compression; 2541da177e4SLinus Torvalds u_char cmd_protocol; 2551da177e4SLinus Torvalds u_char escape; 2561da177e4SLinus Torvalds u_char encrypt; 2571da177e4SLinus Torvalds u_char misc_features; 25806ed6aa5SGustavo A. R. Silva u_char ccitt_code[]; 2591da177e4SLinus Torvalds } cistpl_data_serv_t; 2601da177e4SLinus Torvalds 2611da177e4SLinus Torvalds typedef struct cistpl_fax_serv_t { 2621da177e4SLinus Torvalds u_char max_data_0; 2631da177e4SLinus Torvalds u_char max_data_1; 2641da177e4SLinus Torvalds u_char modulation; 2651da177e4SLinus Torvalds u_char encrypt; 2661da177e4SLinus Torvalds u_char features_0; 2671da177e4SLinus Torvalds u_char features_1; 26806ed6aa5SGustavo A. R. Silva u_char ccitt_code[]; 2691da177e4SLinus Torvalds } cistpl_fax_serv_t; 2701da177e4SLinus Torvalds 2711da177e4SLinus Torvalds typedef struct cistpl_voice_serv_t { 2721da177e4SLinus Torvalds u_char max_data_0; 2731da177e4SLinus Torvalds u_char max_data_1; 2741da177e4SLinus Torvalds } cistpl_voice_serv_t; 2751da177e4SLinus Torvalds 2761da177e4SLinus Torvalds /*====================================================================== 2771da177e4SLinus Torvalds 2781da177e4SLinus Torvalds LAN Function Extension Tuples 2791da177e4SLinus Torvalds 2801da177e4SLinus Torvalds ======================================================================*/ 2811da177e4SLinus Torvalds 2821da177e4SLinus Torvalds #define CISTPL_FUNCE_LAN_TECH 0x01 2831da177e4SLinus Torvalds #define CISTPL_FUNCE_LAN_SPEED 0x02 2841da177e4SLinus Torvalds #define CISTPL_FUNCE_LAN_MEDIA 0x03 2851da177e4SLinus Torvalds #define CISTPL_FUNCE_LAN_NODE_ID 0x04 2861da177e4SLinus Torvalds #define CISTPL_FUNCE_LAN_CONNECTOR 0x05 2871da177e4SLinus Torvalds 2881da177e4SLinus Torvalds /* LAN technologies */ 2891da177e4SLinus Torvalds #define CISTPL_LAN_TECH_ARCNET 0x01 2901da177e4SLinus Torvalds #define CISTPL_LAN_TECH_ETHERNET 0x02 2911da177e4SLinus Torvalds #define CISTPL_LAN_TECH_TOKENRING 0x03 2921da177e4SLinus Torvalds #define CISTPL_LAN_TECH_LOCALTALK 0x04 2931da177e4SLinus Torvalds #define CISTPL_LAN_TECH_FDDI 0x05 2941da177e4SLinus Torvalds #define CISTPL_LAN_TECH_ATM 0x06 2951da177e4SLinus Torvalds #define CISTPL_LAN_TECH_WIRELESS 0x07 2961da177e4SLinus Torvalds 2971da177e4SLinus Torvalds typedef struct cistpl_lan_tech_t { 2981da177e4SLinus Torvalds u_char tech; 2991da177e4SLinus Torvalds } cistpl_lan_tech_t; 3001da177e4SLinus Torvalds 3011da177e4SLinus Torvalds typedef struct cistpl_lan_speed_t { 3021da177e4SLinus Torvalds u_int speed; 3031da177e4SLinus Torvalds } cistpl_lan_speed_t; 3041da177e4SLinus Torvalds 3051da177e4SLinus Torvalds /* LAN media definitions */ 3061da177e4SLinus Torvalds #define CISTPL_LAN_MEDIA_UTP 0x01 3071da177e4SLinus Torvalds #define CISTPL_LAN_MEDIA_STP 0x02 3081da177e4SLinus Torvalds #define CISTPL_LAN_MEDIA_THIN_COAX 0x03 3091da177e4SLinus Torvalds #define CISTPL_LAN_MEDIA_THICK_COAX 0x04 3101da177e4SLinus Torvalds #define CISTPL_LAN_MEDIA_FIBER 0x05 3111da177e4SLinus Torvalds #define CISTPL_LAN_MEDIA_900MHZ 0x06 3121da177e4SLinus Torvalds #define CISTPL_LAN_MEDIA_2GHZ 0x07 3131da177e4SLinus Torvalds #define CISTPL_LAN_MEDIA_5GHZ 0x08 3141da177e4SLinus Torvalds #define CISTPL_LAN_MEDIA_DIFF_IR 0x09 3151da177e4SLinus Torvalds #define CISTPL_LAN_MEDIA_PTP_IR 0x0a 3161da177e4SLinus Torvalds 3171da177e4SLinus Torvalds typedef struct cistpl_lan_media_t { 3181da177e4SLinus Torvalds u_char media; 3191da177e4SLinus Torvalds } cistpl_lan_media_t; 3201da177e4SLinus Torvalds 3211da177e4SLinus Torvalds typedef struct cistpl_lan_node_id_t { 3221da177e4SLinus Torvalds u_char nb; 3231da177e4SLinus Torvalds u_char id[16]; 3241da177e4SLinus Torvalds } cistpl_lan_node_id_t; 3251da177e4SLinus Torvalds 3261da177e4SLinus Torvalds typedef struct cistpl_lan_connector_t { 3271da177e4SLinus Torvalds u_char code; 3281da177e4SLinus Torvalds } cistpl_lan_connector_t; 3291da177e4SLinus Torvalds 3301da177e4SLinus Torvalds /*====================================================================== 3311da177e4SLinus Torvalds 3321da177e4SLinus Torvalds IDE Function Extension Tuples 3331da177e4SLinus Torvalds 3341da177e4SLinus Torvalds ======================================================================*/ 3351da177e4SLinus Torvalds 3361da177e4SLinus Torvalds #define CISTPL_IDE_INTERFACE 0x01 3371da177e4SLinus Torvalds 3381da177e4SLinus Torvalds typedef struct cistpl_ide_interface_t { 3391da177e4SLinus Torvalds u_char interface; 3401da177e4SLinus Torvalds } cistpl_ide_interface_t; 3411da177e4SLinus Torvalds 3421da177e4SLinus Torvalds /* First feature byte */ 3431da177e4SLinus Torvalds #define CISTPL_IDE_SILICON 0x04 3441da177e4SLinus Torvalds #define CISTPL_IDE_UNIQUE 0x08 3451da177e4SLinus Torvalds #define CISTPL_IDE_DUAL 0x10 3461da177e4SLinus Torvalds 3471da177e4SLinus Torvalds /* Second feature byte */ 3481da177e4SLinus Torvalds #define CISTPL_IDE_HAS_SLEEP 0x01 3491da177e4SLinus Torvalds #define CISTPL_IDE_HAS_STANDBY 0x02 3501da177e4SLinus Torvalds #define CISTPL_IDE_HAS_IDLE 0x04 3511da177e4SLinus Torvalds #define CISTPL_IDE_LOW_POWER 0x08 3521da177e4SLinus Torvalds #define CISTPL_IDE_REG_INHIBIT 0x10 3531da177e4SLinus Torvalds #define CISTPL_IDE_HAS_INDEX 0x20 3541da177e4SLinus Torvalds #define CISTPL_IDE_IOIS16 0x40 3551da177e4SLinus Torvalds 3561da177e4SLinus Torvalds typedef struct cistpl_ide_feature_t { 3571da177e4SLinus Torvalds u_char feature1; 3581da177e4SLinus Torvalds u_char feature2; 3591da177e4SLinus Torvalds } cistpl_ide_feature_t; 3601da177e4SLinus Torvalds 3611da177e4SLinus Torvalds #define CISTPL_FUNCE_IDE_IFACE 0x01 3621da177e4SLinus Torvalds #define CISTPL_FUNCE_IDE_MASTER 0x02 3631da177e4SLinus Torvalds #define CISTPL_FUNCE_IDE_SLAVE 0x03 3641da177e4SLinus Torvalds 3651da177e4SLinus Torvalds /*====================================================================== 3661da177e4SLinus Torvalds 3671da177e4SLinus Torvalds Configuration Table Entries 3681da177e4SLinus Torvalds 3691da177e4SLinus Torvalds ======================================================================*/ 3701da177e4SLinus Torvalds 3711da177e4SLinus Torvalds #define CISTPL_BAR_SPACE 0x07 3721da177e4SLinus Torvalds #define CISTPL_BAR_SPACE_IO 0x10 3731da177e4SLinus Torvalds #define CISTPL_BAR_PREFETCH 0x20 3741da177e4SLinus Torvalds #define CISTPL_BAR_CACHEABLE 0x40 3751da177e4SLinus Torvalds #define CISTPL_BAR_1MEG_MAP 0x80 3761da177e4SLinus Torvalds 3771da177e4SLinus Torvalds typedef struct cistpl_bar_t { 3781da177e4SLinus Torvalds u_char attr; 3791da177e4SLinus Torvalds u_int size; 3801da177e4SLinus Torvalds } cistpl_bar_t; 3811da177e4SLinus Torvalds 3821da177e4SLinus Torvalds typedef struct cistpl_config_t { 3831da177e4SLinus Torvalds u_char last_idx; 3841da177e4SLinus Torvalds u_int base; 3851da177e4SLinus Torvalds u_int rmask[4]; 3861da177e4SLinus Torvalds u_char subtuples; 3871da177e4SLinus Torvalds } cistpl_config_t; 3881da177e4SLinus Torvalds 3891da177e4SLinus Torvalds /* These are bits in the 'present' field, and indices in 'param' */ 3901da177e4SLinus Torvalds #define CISTPL_POWER_VNOM 0 3911da177e4SLinus Torvalds #define CISTPL_POWER_VMIN 1 3921da177e4SLinus Torvalds #define CISTPL_POWER_VMAX 2 3931da177e4SLinus Torvalds #define CISTPL_POWER_ISTATIC 3 3941da177e4SLinus Torvalds #define CISTPL_POWER_IAVG 4 3951da177e4SLinus Torvalds #define CISTPL_POWER_IPEAK 5 3961da177e4SLinus Torvalds #define CISTPL_POWER_IDOWN 6 3971da177e4SLinus Torvalds 3981da177e4SLinus Torvalds #define CISTPL_POWER_HIGHZ_OK 0x01 3991da177e4SLinus Torvalds #define CISTPL_POWER_HIGHZ_REQ 0x02 4001da177e4SLinus Torvalds 4011da177e4SLinus Torvalds typedef struct cistpl_power_t { 4021da177e4SLinus Torvalds u_char present; 4031da177e4SLinus Torvalds u_char flags; 4041da177e4SLinus Torvalds u_int param[7]; 4051da177e4SLinus Torvalds } cistpl_power_t; 4061da177e4SLinus Torvalds 4071da177e4SLinus Torvalds typedef struct cistpl_timing_t { 4081da177e4SLinus Torvalds u_int wait, waitscale; 4091da177e4SLinus Torvalds u_int ready, rdyscale; 4101da177e4SLinus Torvalds u_int reserved, rsvscale; 4111da177e4SLinus Torvalds } cistpl_timing_t; 4121da177e4SLinus Torvalds 4131da177e4SLinus Torvalds #define CISTPL_IO_LINES_MASK 0x1f 4141da177e4SLinus Torvalds #define CISTPL_IO_8BIT 0x20 4151da177e4SLinus Torvalds #define CISTPL_IO_16BIT 0x40 4161da177e4SLinus Torvalds #define CISTPL_IO_RANGE 0x80 4171da177e4SLinus Torvalds 4181da177e4SLinus Torvalds #define CISTPL_IO_MAX_WIN 16 4191da177e4SLinus Torvalds 4201da177e4SLinus Torvalds typedef struct cistpl_io_t { 4211da177e4SLinus Torvalds u_char flags; 4221da177e4SLinus Torvalds u_char nwin; 4231da177e4SLinus Torvalds struct { 4241da177e4SLinus Torvalds u_int base; 4251da177e4SLinus Torvalds u_int len; 4261da177e4SLinus Torvalds } win[CISTPL_IO_MAX_WIN]; 4271da177e4SLinus Torvalds } cistpl_io_t; 4281da177e4SLinus Torvalds 4291da177e4SLinus Torvalds typedef struct cistpl_irq_t { 4301da177e4SLinus Torvalds u_int IRQInfo1; 4311da177e4SLinus Torvalds u_int IRQInfo2; 4321da177e4SLinus Torvalds } cistpl_irq_t; 4331da177e4SLinus Torvalds 4341da177e4SLinus Torvalds #define CISTPL_MEM_MAX_WIN 8 4351da177e4SLinus Torvalds 4361da177e4SLinus Torvalds typedef struct cistpl_mem_t { 4371da177e4SLinus Torvalds u_char flags; 4381da177e4SLinus Torvalds u_char nwin; 4391da177e4SLinus Torvalds struct { 4401da177e4SLinus Torvalds u_int len; 4411da177e4SLinus Torvalds u_int card_addr; 4421da177e4SLinus Torvalds u_int host_addr; 4431da177e4SLinus Torvalds } win[CISTPL_MEM_MAX_WIN]; 4441da177e4SLinus Torvalds } cistpl_mem_t; 4451da177e4SLinus Torvalds 4461da177e4SLinus Torvalds #define CISTPL_CFTABLE_DEFAULT 0x0001 4471da177e4SLinus Torvalds #define CISTPL_CFTABLE_BVDS 0x0002 4481da177e4SLinus Torvalds #define CISTPL_CFTABLE_WP 0x0004 4491da177e4SLinus Torvalds #define CISTPL_CFTABLE_RDYBSY 0x0008 4501da177e4SLinus Torvalds #define CISTPL_CFTABLE_MWAIT 0x0010 4511da177e4SLinus Torvalds #define CISTPL_CFTABLE_AUDIO 0x0800 4521da177e4SLinus Torvalds #define CISTPL_CFTABLE_READONLY 0x1000 4531da177e4SLinus Torvalds #define CISTPL_CFTABLE_PWRDOWN 0x2000 4541da177e4SLinus Torvalds 4551da177e4SLinus Torvalds typedef struct cistpl_cftable_entry_t { 4561da177e4SLinus Torvalds u_char index; 4571da177e4SLinus Torvalds u_short flags; 4581da177e4SLinus Torvalds u_char interface; 4591da177e4SLinus Torvalds cistpl_power_t vcc, vpp1, vpp2; 4601da177e4SLinus Torvalds cistpl_timing_t timing; 4611da177e4SLinus Torvalds cistpl_io_t io; 4621da177e4SLinus Torvalds cistpl_irq_t irq; 4631da177e4SLinus Torvalds cistpl_mem_t mem; 4641da177e4SLinus Torvalds u_char subtuples; 4651da177e4SLinus Torvalds } cistpl_cftable_entry_t; 4661da177e4SLinus Torvalds 4671da177e4SLinus Torvalds #define CISTPL_CFTABLE_MASTER 0x000100 4681da177e4SLinus Torvalds #define CISTPL_CFTABLE_INVALIDATE 0x000200 4691da177e4SLinus Torvalds #define CISTPL_CFTABLE_VGA_PALETTE 0x000400 4701da177e4SLinus Torvalds #define CISTPL_CFTABLE_PARITY 0x000800 4711da177e4SLinus Torvalds #define CISTPL_CFTABLE_WAIT 0x001000 4721da177e4SLinus Torvalds #define CISTPL_CFTABLE_SERR 0x002000 4731da177e4SLinus Torvalds #define CISTPL_CFTABLE_FAST_BACK 0x004000 4741da177e4SLinus Torvalds #define CISTPL_CFTABLE_BINARY_AUDIO 0x010000 4751da177e4SLinus Torvalds #define CISTPL_CFTABLE_PWM_AUDIO 0x020000 4761da177e4SLinus Torvalds 4771da177e4SLinus Torvalds typedef struct cistpl_cftable_entry_cb_t { 4781da177e4SLinus Torvalds u_char index; 4791da177e4SLinus Torvalds u_int flags; 4801da177e4SLinus Torvalds cistpl_power_t vcc, vpp1, vpp2; 4811da177e4SLinus Torvalds u_char io; 4821da177e4SLinus Torvalds cistpl_irq_t irq; 4831da177e4SLinus Torvalds u_char mem; 4841da177e4SLinus Torvalds u_char subtuples; 4851da177e4SLinus Torvalds } cistpl_cftable_entry_cb_t; 4861da177e4SLinus Torvalds 4871da177e4SLinus Torvalds typedef struct cistpl_device_geo_t { 4881da177e4SLinus Torvalds u_char ngeo; 4891da177e4SLinus Torvalds struct { 4901da177e4SLinus Torvalds u_char buswidth; 4911da177e4SLinus Torvalds u_int erase_block; 4921da177e4SLinus Torvalds u_int read_block; 4931da177e4SLinus Torvalds u_int write_block; 4941da177e4SLinus Torvalds u_int partition; 4951da177e4SLinus Torvalds u_int interleave; 4961da177e4SLinus Torvalds } geo[CISTPL_MAX_DEVICES]; 4971da177e4SLinus Torvalds } cistpl_device_geo_t; 4981da177e4SLinus Torvalds 4991da177e4SLinus Torvalds typedef struct cistpl_vers_2_t { 5001da177e4SLinus Torvalds u_char vers; 5011da177e4SLinus Torvalds u_char comply; 5021da177e4SLinus Torvalds u_short dindex; 5031da177e4SLinus Torvalds u_char vspec8, vspec9; 5041da177e4SLinus Torvalds u_char nhdr; 5051da177e4SLinus Torvalds u_char vendor, info; 5061da177e4SLinus Torvalds char str[244]; 5071da177e4SLinus Torvalds } cistpl_vers_2_t; 5081da177e4SLinus Torvalds 5091da177e4SLinus Torvalds typedef struct cistpl_org_t { 5101da177e4SLinus Torvalds u_char data_org; 5111da177e4SLinus Torvalds char desc[30]; 5121da177e4SLinus Torvalds } cistpl_org_t; 5131da177e4SLinus Torvalds 5141da177e4SLinus Torvalds #define CISTPL_ORG_FS 0x00 5151da177e4SLinus Torvalds #define CISTPL_ORG_APPSPEC 0x01 5161da177e4SLinus Torvalds #define CISTPL_ORG_XIP 0x02 5171da177e4SLinus Torvalds 5181da177e4SLinus Torvalds typedef struct cistpl_format_t { 5191da177e4SLinus Torvalds u_char type; 5201da177e4SLinus Torvalds u_char edc; 5211da177e4SLinus Torvalds u_int offset; 5221da177e4SLinus Torvalds u_int length; 5231da177e4SLinus Torvalds } cistpl_format_t; 5241da177e4SLinus Torvalds 5251da177e4SLinus Torvalds #define CISTPL_FORMAT_DISK 0x00 5261da177e4SLinus Torvalds #define CISTPL_FORMAT_MEM 0x01 5271da177e4SLinus Torvalds 5281da177e4SLinus Torvalds #define CISTPL_EDC_NONE 0x00 5291da177e4SLinus Torvalds #define CISTPL_EDC_CKSUM 0x01 5301da177e4SLinus Torvalds #define CISTPL_EDC_CRC 0x02 5311da177e4SLinus Torvalds #define CISTPL_EDC_PCC 0x03 5321da177e4SLinus Torvalds 5331da177e4SLinus Torvalds typedef union cisparse_t { 5341da177e4SLinus Torvalds cistpl_device_t device; 5351da177e4SLinus Torvalds cistpl_checksum_t checksum; 5361da177e4SLinus Torvalds cistpl_longlink_t longlink; 5371da177e4SLinus Torvalds cistpl_longlink_mfc_t longlink_mfc; 5381da177e4SLinus Torvalds cistpl_vers_1_t version_1; 5391da177e4SLinus Torvalds cistpl_altstr_t altstr; 5401da177e4SLinus Torvalds cistpl_jedec_t jedec; 5411da177e4SLinus Torvalds cistpl_manfid_t manfid; 5421da177e4SLinus Torvalds cistpl_funcid_t funcid; 5431da177e4SLinus Torvalds cistpl_funce_t funce; 5441da177e4SLinus Torvalds cistpl_bar_t bar; 5451da177e4SLinus Torvalds cistpl_config_t config; 5461da177e4SLinus Torvalds cistpl_cftable_entry_t cftable_entry; 5471da177e4SLinus Torvalds cistpl_cftable_entry_cb_t cftable_entry_cb; 5481da177e4SLinus Torvalds cistpl_device_geo_t device_geo; 5491da177e4SLinus Torvalds cistpl_vers_2_t vers_2; 5501da177e4SLinus Torvalds cistpl_org_t org; 5511da177e4SLinus Torvalds cistpl_format_t format; 5521da177e4SLinus Torvalds } cisparse_t; 5531da177e4SLinus Torvalds 5541da177e4SLinus Torvalds typedef struct tuple_t { 5551da177e4SLinus Torvalds u_int Attributes; 5561da177e4SLinus Torvalds cisdata_t DesiredTuple; 5571da177e4SLinus Torvalds u_int Flags; /* internal use */ 5581da177e4SLinus Torvalds u_int LinkOffset; /* internal use */ 5591da177e4SLinus Torvalds u_int CISOffset; /* internal use */ 5601da177e4SLinus Torvalds cisdata_t TupleCode; 5611da177e4SLinus Torvalds cisdata_t TupleLink; 5621da177e4SLinus Torvalds cisdata_t TupleOffset; 5631da177e4SLinus Torvalds cisdata_t TupleDataMax; 5641da177e4SLinus Torvalds cisdata_t TupleDataLen; 5651da177e4SLinus Torvalds cisdata_t *TupleData; 5661da177e4SLinus Torvalds } tuple_t; 5671da177e4SLinus Torvalds 5681da177e4SLinus Torvalds /* Special cisdata_t value */ 5691da177e4SLinus Torvalds #define RETURN_FIRST_TUPLE 0xff 5701da177e4SLinus Torvalds 5711da177e4SLinus Torvalds /* Attributes for tuple calls */ 5721da177e4SLinus Torvalds #define TUPLE_RETURN_LINK 0x01 5731da177e4SLinus Torvalds #define TUPLE_RETURN_COMMON 0x02 5741da177e4SLinus Torvalds 5751da177e4SLinus Torvalds #define CISTPL_MAX_CIS_SIZE 0x200 5761da177e4SLinus Torvalds 5771da177e4SLinus Torvalds #endif /* LINUX_CISTPL_H */ 578