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