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