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