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