aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-ia64/sn/invent.h
blob: e75c156d843b0e5774f11934ad62faf52c1cbd83 (plain)
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
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
/* $Id$
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Copyright (C) 1992 - 1997, 2000-2002 Silicon Graphics, Inc. All rights reserved.
 */
#ifndef _ASM_IA64_SN_INVENT_H
#define _ASM_IA64_SN_INVENT_H

#include <linux/types.h>
#include <linux/devfs_fs_kernel.h>

/*
 * sys/sn/invent.h --  Kernel Hardware Inventory
 *
 * As the system boots, a list of recognized devices is assembled.
 * This list can then be accessed through syssgi() by user-level programs
 * so that they can learn about available peripherals and the system's
 * hardware configuration.
 *
 * The data is organized into a linked list of structures that are composed
 * of an inventory item class and a class-specific type.  Each instance may
 * also specify a 32-bit "state" which might be size, readiness, or
 * anything else that's relevant.
 *
 */

#define major_t int
#define minor_t int
#define app32_ptr_t unsigned long
#define graph_vertex_place_t long
#define GRAPH_VERTEX_NONE ((devfs_handle_t)-1)
#define GRAPH_EDGE_PLACE_NONE ((graph_edge_place_t)0)
#define GRAPH_INFO_PLACE_NONE ((graph_info_place_t)0)
#define GRAPH_VERTEX_PLACE_NONE ((graph_vertex_place_t)0)


typedef struct inventory_s {
	struct	inventory_s *inv_next;	/* next inventory record in list */
	int	inv_class;		/* class of object */
	int	inv_type;		/* class sub-type of object */
	major_t	inv_controller;		/* object major identifier */
	minor_t	inv_unit;		/* object minor identifier */
	int	inv_state;		/* information specific to object or
					   class */
} inventory_t;

typedef struct cpu_inv_s {
	int	cpuflavor;	/* differentiate processor */
	int	cpufq;		/* cpu frequency */
	int	sdsize;		/* secondary data cache size */
	int	sdfreq;		/* speed of the secondary cache */
} cpu_inv_t;


typedef struct diag_inv_s{
         char name[80];
         int  diagval;
         int  physid;
         int  virtid;
} diag_inv_t;


typedef struct router_inv_s{
  char portmap[80];             /* String indicating which ports int/ext */
  char type[40];                /* String name: e.g. "star", "meta", etc. */
  int  freq;                    /* From hub */
  int  rev;                     /* From hub */
} router_inv_t;


/*
 * NOTE: This file is a central registry for inventory IDs for each
 *       class of inventory object.  It is important to keep the central copy
 *       of this file up-to-date with the work going on in various engineering
 *       projects.  When making changes to this file in an engineering project
 *       tree, please make those changes separately from any others and then
 *       merge the changes to this file into the main line trees in order to
 *       prevent other engineering projects from conflicting with your ID
 *       allocations.
 */


/* Inventory Classes */
/* when adding a new class, add also to classes[] in hinv.c */
#define INV_PROCESSOR	1
#define INV_DISK	2
#define INV_MEMORY	3
#define INV_SERIAL	4
#define INV_PARALLEL	5
#define INV_TAPE	6
#define INV_GRAPHICS	7
#define INV_NETWORK	8
#define INV_SCSI	9	/* SCSI devices other than disk and tape */
#define INV_AUDIO	10
#define	INV_IOBD	11
#define	INV_VIDEO	12
#define	INV_BUS		13
#define	INV_MISC	14	/* miscellaneous: a catchall */
/*** add post-5.2 classes here for backward compatibility ***/
#define	INV_COMPRESSION	15
#define	INV_VSCSI	16	/* SCSI devices on jag other than disk and tape */
#define	INV_DISPLAY     17
#define	INV_UNC_SCSILUN	18	/* Unconnected SCSI lun */
#define	INV_PCI		19	/* PCI Bus */
#define	INV_PCI_NO_DRV	20	/* PCI Bus without any driver */
#define	INV_PROM	21	/* Different proms in the system */
#define INV_IEEE1394	22	/* IEEE1394 devices */
#define INV_RPS		23      /* redundant power source */
#define INV_TPU		24	/* Tensor Processing Unit */
#define INV_FCNODE	25	/* Helper class for SCSI classes, not in classes[] */
#define INV_USB		26	/* Universal Serial Bus */
#define INV_1394NODE    27      /* helper class for 1394/SPB2 classes, not in classes[] */

/* types for class processor */
#define INV_CPUBOARD	1
#define INV_CPUCHIP	2
#define INV_FPUCHIP	3
#define INV_CCSYNC	4	/* CC Rev 2+ sync join counter */

/* states for cpu and fpu chips are revision numbers */

/* cpuboard states */
#define INV_IP20BOARD   10
#define INV_IP19BOARD   11
#define INV_IP22BOARD   12
#define INV_IP21BOARD	13
#define INV_IP26BOARD	14
#define INV_IP25BOARD	15
#define INV_IP30BOARD	16
#define INV_IP28BOARD	17
#define INV_IP32BOARD	18
#define INV_IP27BOARD	19
#define INV_IPMHSIMBOARD 20
#define INV_IP33BOARD	21
#define INV_IP35BOARD	22

/* types for class INV_IOBD */
#define INV_EVIO	2	/* EVEREST I/O board */
#define INV_O200IO	3	/* Origin 200 base I/O */

/* IO board types for origin2000  for class INV_IOBD*/

#define INV_O2000BASEIO	0x21	
#define INV_O2000MSCSI	0x22	
#define INV_O2000MENET	0x23
#define INV_O2000HIPPI	0x24
#define INV_O2000GFX	0x25	
#define INV_O2000HAROLD 0x26
#define INV_O2000VME	0x27
#define INV_O2000MIO	0x28
#define INV_O2000FC	0x29
#define INV_O2000LINC	0x2a

#define INV_PCIADAP	4
/* states for class INV_IOBD type INV_EVERESTIO -- value of eb_type field */
#define INV_IO4_REV1	0x21	

/* types for class disk */
/* NB: types MUST be unique within a class.
   Please check this if adding new types. */

#define INV_SCSICONTROL	1
#define INV_SCSIDRIVE	2
#define INV_SCSIFLOPPY	5	/* also cdroms, optical disks, etc. */
#define INV_JAGUAR	16	/* Interphase Jaguar */
#define INV_VSCSIDRIVE	17	/* Disk connected to Jaguar */
#define INV_GIO_SCSICONTROL 18	/* optional GIO SCSI controller */
#define INV_SCSIRAID	19	/* SCSI attached RAID */
#define INV_XLVGEN      20	/* Generic XLV disk device */
#define INV_PCCARD	21	/* PC-card (PCMCIA) devices */
#define INV_PCI_SCSICONTROL	22   /* optional PCI SCSI controller */

/* states for INV_SCSICONTROL disk type; indicate which chip rev;
 * for 93A and B, unit field has microcode rev. */
#define INV_WD93	0	/* WD 33C93  */
#define INV_WD93A	1	/* WD 33C93A */
#define INV_WD93B	2	/* WD 33C93B */
#define INV_WD95A	3	/* WD 33C95A */
#define INV_SCIP95	4       /* SCIP with a WD 33C95A */
#define INV_ADP7880	5	/* Adaptec 7880 (single channel) */
#define INV_QL_REV1     6       /* qlogic 1040  */
#define INV_QL_REV2     7       /* qlogic 1040A */
#define INV_QL_REV2_4   8       /* qlogic 1040A rev 4 */
#define INV_QL_REV3     9       /* qlogic 1040B */
#define INV_FCADP	10	/* Adaptec Emerald Fibrechannel */
#define INV_QL_REV4     11      /* qlogic 1040B rev 2 */
#define INV_QL		12	/* Unknown QL version */	
#define INV_QL_1240     13      /* qlogic 1240 */
#define INV_QL_1080     14      /* qlogic 1080 */
#define INV_QL_1280     15      /* qlogic 1280 */
#define INV_QL_10160    16      /* qlogic 10160 */
#define INV_QL_12160    17      /* qlogic 12160 */
#define INV_QL_2100	18	/* qLogic 2100 Fibrechannel */
#define INV_QL_2200	19	/* qLogic 2200 Fibrechannel */
#define INV_PR_HIO_D	20	/* Prisa HIO Dual channel */
#define INV_PR_PCI64_D	21	/* Prisa PCI-64 Dual channel */
#define INV_QL_2200A	22	/* qLogic 2200A Fibrechannel */
#define INV_SBP2        23      /* SBP2 protocol over OHCI on 1394 */
#define INV_QL_2300	24	/* qLogic 2300 Fibrechannel */


/* states for INV_SCSIDRIVE type of class disk */
#define INV_RAID5_LUN	0x100
#define INV_PRIMARY	0x200	/* primary path */
#define INV_ALTERNATE	0x400	/* alternate path */
#define INV_FAILED	0x800	/* path has failed */
#define INV_XVMVOL	0x1000	/* disk is managed by XVM */

/* states for INV_SCSIFLOPPY type of class disk */
#define INV_TEAC_FLOPPY 1       /* TEAC 3 1/2 inch floppy drive */
#define INV_INSITE_FLOPPY 2     /* INSITE, IOMEGA  Io20S, SyQuest floppy drives */

/* END OF CLASS DISK TYPES */

/* types for class memory */
/* NB. the states for class memory are sizes in bytes */
#define INV_MAIN	1
#define INV_DCACHE	3
#define INV_ICACHE	4
#define INV_WBUFFER	5
#define INV_SDCACHE	6
#define INV_SICACHE	7
#define INV_SIDCACHE	8
#define INV_MAIN_MB	9
#define INV_HUBSPC      10      /* HUBSPC */
#define INV_TIDCACHE	11

/* types for class serial */
#define INV_CDSIO	1	/* Central Data serial board */
#define INV_T3270	2	/* T3270 emulation */
#define INV_GSE		3	/* SpectraGraphics Gerbil coax cable */
#define INV_SI		4	/* SNA SDLC controller */
#define	INV_M333X25 	6	/* X.25 controller */
#define INV_CDSIO_E	7	/* Central Data serial board on E space */
#define INV_ONBOARD	8	/* Serial ports per CPU board */
#define INV_EPC_SERIAL	9	/* EVEREST I/O EPC serial port */
#define INV_ICA		10	/* IRIS (IBM) Channel Adapter card */
#define INV_VSC		11	/* SBE VME Synch Comm board */
#define INV_ISC		12	/* SBE ISA Synch Comm board */
#define INV_GSC		13	/* SGI GIO Synch Comm board */
#define INV_ASO_SERIAL	14	/* serial portion of SGI ASO board */
#define INV_PSC		15	/* SBE PCI Synch Comm board */
#define INV_IOC3_DMA	16	/* DMA mode IOC3 serial */
#define INV_IOC3_PIO	17	/* PIO mode IOC3 serial */
#define INV_INVISIBLE	18	/* invisible inventory entry for kernel use */
#define INV_ISA_DMA	19	/* DMA mode ISA serial -- O2 */

/* types for class parallel */
#define INV_GPIB	2	/* National Instrument GPIB board */
#define INV_GPIB_E	3	/* National Instrument GPIB board on E space*/
#define INV_EPC_PLP	4	/* EVEREST I/O EPC Parallel Port */
#define INV_ONBOARD_PLP	5	/* Integral parallel port,
				      state = 0 -> output only
				      state = 1 -> bi-directional */
#define INV_EPP_ECP_PLP	6	/* Integral EPP/ECP parallel port */
#define INV_EPP_PFD	7	/* External EPP parallel peripheral */

/* types for class tape */
#define INV_SCSIQIC	1	/* Any SCSI tape, not just QIC{24,150}... */
#define INV_VSCSITAPE	4	/* SCSI tape connected to Jaguar */

/* sub types for type INV_SCSIQIC and INV_VSCSITAPE (in state) */
#define TPUNKNOWN	0	/* type not known */
#define TPQIC24		1	/* QIC24 1/4" cartridge */
#define TPDAT		2	/* 4mm Digital Audio Tape cartridge */
#define TPQIC150	3	/* QIC150 1/4" cartridge */
#define TP9TRACK	4	/* 9 track reel */
#define TP8MM_8200	5	/* 8 mm video tape cartridge */
#define TP8MM_8500	6	/* 8 mm video tape cartridge */
#define TPQIC1000	7	/* QIC1000 1/4" cartridge */
#define TPQIC1350	8	/* QIC1350 1/4" cartridge */
#define TP3480		9	/* 3480 compatible cartridge */
#define TPDLT		10	/* DEC Digital Linear Tape cartridge */
#define TPD2		11	/* D2 tape cartridge */
#define TPDLTSTACKER	12	/* DEC Digital Linear Tape stacker */
#define TPNTP		13	/* IBM Magstar 3590 Tape Device cartridge */
#define TPNTPSTACKER	14	/* IBM Magstar 3590 Tape Device stacker */
#define TPSTK9490       15      /* StorageTeK 9490 */
#define TPSTKSD3        16      /* StorageTeK SD3 */
#define TPGY10	        17      /* Sony GY-10  */
#define TP8MM_8900	18	/* 8 mm (AME) tape cartridge */
#define TPMGSTRMP       19      /* IBM Magster MP 3570 cartridge */
#define TPMGSTRMPSTCKR  20      /* IBM Magstar MP stacker */
#define TPSTK4791       21      /* StorageTek 4791 */
#define TPSTK4781       22      /* StorageTek 4781 */
#define TPFUJDIANA1     23      /* Fujitsu Diana-1 (M1016/M1017) */
#define TPFUJDIANA2     24      /* Fujitsu Diana-2 (M2483) */
#define TPFUJDIANA3     25      /* Fujitsu Diana-3 (M2488) */
#define TP8MM_AIT	26	/* Sony AIT format tape */
#define TPTD3600        27      /* Philips TD3600  */
#define TPTD3600STCKR   28      /* Philips TD3600  stacker */
#define TPNCTP          29      /* Philips NCTP */
#define TPGY2120        30      /* Sony GY-2120 (replaces GY-10)  */
#define TPOVL490E       31      /* Overland Data L490E (3490E compatible) */
#define TPSTK9840       32      /* StorageTeK 9840 (aka Eagle) */

/* Diagnostics inventory */
#define INV_CPUDIAGVAL  70


/*
 *  GFX invent is a subset of gfxinfo
 */

/* types for class graphics */
#define INV_GR1BOARD	1	/* GR1 (Eclipse) graphics */
#define INV_GR1BP	2	/* OBSOLETE - use INV_GR1BIT24 instead */
#define INV_GR1ZBUFFER	3	/* OBSOLETE - use INV_GR1ZBUF24 instead */
#define INV_GRODEV	4	/* Clover1 graphics */
#define INV_GMDEV	5	/* GT graphics */
#define INV_CG2		6	/* CG2 composite video/genlock board */
#define INV_VMUXBOARD	7	/* VMUX video mux board */
#define	INV_VGX		8	/* VGX (PowerVision) graphics */
#define	INV_VGXT	9	/* VGXT (PowerVision) graphics with IMP5s. */
#define	INV_LIGHT	10	/* LIGHT graphics */
#define INV_GR2		11	/* EXPRESS graphics */
#define INV_RE		12	/* RealityEngine graphics */
#define INV_VTX		13	/* RealityEngine graphics - VTX variant */
#define INV_NEWPORT	14	/* Newport graphics */
#define INV_MGRAS	15	/* Mardigras graphics */
#define INV_IR		16	/* InfiniteReality graphics */
#define INV_CRIME	17	/* Moosehead on board CRIME graphics */
#define INV_IR2		18	/* InfiniteReality2 graphics */
#define INV_IR2LITE	19	/* Reality graphics */
#define INV_IR2E	20	/* InfiniteReality2e graphics */
#define INV_ODSY        21      /* Odyssey graphics */
#define INV_IR3		22	/* InfiniteReality3 graphics */

/* states for graphics class GR1 */
#define INV_GR1REMASK	0x7	/* RE version */
#define INV_GR1REUNK	0x0	/* RE version unknown */
#define INV_GR1RE1	0x1	/* RE1 */
#define INV_GR1RE2	0x2	/* RE2 */
#define INV_GR1BUSMASK	0x38	/* GR1 bus architecture */
#define INV_GR1PB	0x00	/* Eclipse private bus */
#define INV_GR1PBVME	0x08	/* VGR2 board VME and private bus interfaces */
#define INV_GR1TURBO	0x40	/* has turbo option */
#define INV_GR1BIT24  	0x80    /* has bitplane option */
#define INV_GR1ZBUF24 	0x100   /* has z-buffer option */
#define INV_GR1SMALLMON 0x200   /* using 14" monitor */
#define INV_GR1SMALLMAP 0x400   /* has 256 entry color map */
#define INV_GR1AUX4 	0x800   /* has AUX/WID plane option */

/* states for graphics class GR2 */
		/* bitmasks */
#define INV_GR2_Z	0x1	/* has z-buffer option */
#define INV_GR2_24	0x2	/* has bitplane option */
#define INV_GR2_4GE     0x4     /* has 4 GEs */
#define INV_GR2_1GE	0x8	/* has 1 GEs */
#define INV_GR2_2GE	0x10	/* has 2 GEs */
#define INV_GR2_8GE	0x20	/* has 8 GEs */
#define INV_GR2_GR3	0x40	/* board GR3 */
#define INV_GR2_GU1	0x80	/* board GU1 */
#define INV_GR2_INDY    0x100   /* board GR3 on Indy*/
#define INV_GR2_GR5	0x200	/* board GR3 with 4 GEs, hinv prints GR5-XZ */

		/* supported configurations */
#define INV_GR2_XS	0x0     /* GR2-XS */
#define INV_GR2_XSZ	0x1     /* GR2-XS with z-buffer */
#define INV_GR2_XS24	0x2     /* GR2-XS24 */
#define INV_GR2_XS24Z	0x3     /* GR2-XS24 with z-buffer */
#define INV_GR2_XSM	0x4     /* GR2-XSM */
#define INV_GR2_ELAN	0x7	/* GR2-Elan */
#define	INV_GR2_XZ	0x13	/* GR2-XZ */
#define	INV_GR3_XSM	0x44	/* GR3-XSM */
#define	INV_GR3_ELAN	0x47	/* GR3-Elan */
#define	INV_GU1_EXTREME	0xa3	/* GU1-Extreme */

/* States for graphics class NEWPORT */
#define	INV_NEWPORT_XL	0x01	/* Indigo2 XL model */
#define INV_NEWPORT_24	0x02	/* board has 24 bitplanes */
#define INV_NEWTON      0x04    /* Triton SUBGR tagging */

/* States for graphics class MGRAS */
#define INV_MGRAS_ARCHS 0xff000000      /* architectures */
#define INV_MGRAS_HQ3   0x00000000   /*impact*/
#define INV_MGRAS_HQ4	0x01000000   /*gamera*/
#define INV_MGRAS_MOT   0x02000000   /*mothra*/
#define INV_MGRAS_GES	0x00ff0000	/* number of GEs */
#define INV_MGRAS_1GE	0x00010000
#define INV_MGRAS_2GE	0x00020000
#define INV_MGRAS_RES	0x0000ff00	/* number of REs */
#define INV_MGRAS_1RE	0x00000100
#define INV_MGRAS_2RE	0x00000200
#define INV_MGRAS_TRS	0x000000ff	/* number of TRAMs */
#define INV_MGRAS_0TR	0x00000000
#define INV_MGRAS_1TR	0x00000001
#define INV_MGRAS_2TR	0x00000002

/* States for graphics class CRIME */
#define INV_CRM_BASE    0x01            /* Moosehead basic model */

/* States for graphics class ODSY */
#define INV_ODSY_ARCHS      0xff000000 /* architectures */
#define INV_ODSY_REVA_ARCH  0x01000000 /* Buzz Rev A */
#define INV_ODSY_REVB_ARCH  0x02000000 /* Buzz Rev B */
#define INV_ODSY_MEMCFG     0x00ff0000 /* memory configs */
#define INV_ODSY_MEMCFG_32  0x00010000 /* 32MB memory */
#define INV_ODSY_MEMCFG_64  0x00020000 /* 64MB memory */
#define INV_ODSY_MEMCFG_128 0x00030000 /* 128MB memory */
#define INV_ODSY_MEMCFG_256 0x00040000 /* 256MB memory */
#define INV_ODSY_MEMCFG_512 0x00050000 /* 512MB memory */


/* types for class network */
#define INV_NET_ETHER		0	/* 10Mb Ethernet */
#define INV_NET_HYPER		1	/* HyperNet */
#define	INV_NET_CRAYIOS		2	/* Cray Input/Ouput Subsystem */
#define	INV_NET_FDDI		3	/* FDDI */
#define INV_NET_TOKEN		4	/* 16/4 Token Ring */
#define INV_NET_HIPPI		5	/* HIPPI */
#define INV_NET_ATM		6	/* ATM */
#define INV_NET_ISDN_BRI	7	/* ISDN */
#define INV_NET_ISDN_PRI	8	/* PRI ISDN */
#define INV_NET_HIPPIS		9	/* HIPPI-Serial */
#define	INV_NET_GSN		10	/* GSN (aka HIPPI-6400) */
#define INV_NET_MYRINET		11	/* Myricom PCI network */

/* controllers for network types, unique within class network */
#define INV_ETHER_EC	0	/* IP6 integral controller */
#define INV_ETHER_ENP	1	/* CMC board */
#define INV_ETHER_ET	2	/* IP5 integral controller */
#define INV_HYPER_HY	3	/* HyperNet controller */
#define	INV_CRAYIOS_CFEI3 4	/* Cray Front End Interface, v3 */
#define	INV_FDDI_IMF	5	/* Interphase/Martin 3211 FDDI */
#define INV_ETHER_EGL	6	/* Interphase V/4207 Eagle */
#define INV_ETHER_FXP	7	/* CMC C/130 FXP */
#define INV_FDDI_IPG	8	/* Interphase/SGI 4211 Peregrine FDDI */
#define INV_TOKEN_FV	9	/* Formation fv1600 Token-Ring board */
#define INV_FDDI_XPI	10	/* XPI GIO bus FDDI */
#define INV_TOKEN_GTR	11	/* GTR GIO bus TokenRing */
#define INV_ETHER_GIO	12	/* IP12/20 optional GIO ethernet controller */
#define INV_ETHER_EE	13	/* Everest IO4 EPC SEEQ/EDLC */
#define INV_HIO_HIPPI	14	/* HIO HIPPI for Challenge/Onyx */
#define INV_ATM_GIO64	15	/* ATM OC-3c Mez card */
#define INV_ETHER_EP	16	/* 8-port E-Plex Ethernet */
#define INV_ISDN_SM	17	/* Siemens PEB 2085 */
#define INV_TOKEN_MTR	18	/* EISA TokenRing */
#define INV_ETHER_EF	19	/* IOC3 Fast Ethernet */
#define INV_ISDN_48XP	20	/* Xircom PRI-48XP */
#define INV_FDDI_RNS	21	/* Rockwell Network Systems FDDI */
#define INV_HIPPIS_XTK	22	/* Xtalk HIPPI-Serial */
#define INV_ATM_QUADOC3	23	/* Xtalk Quad OC-3c ATM interface */
#define INV_TOKEN_MTRPCI 24     /* PCI TokenRing */
#define INV_ETHER_ECF	25	/* PCI Fast Ethernet */
#define INV_GFE		26	/* GIO Fast Ethernet */
#define INV_VFE		27	/* VME Fast Ethernet */
#define	INV_ETHER_GE	28	/* Gigabit Ethernet */
#define	INV_ETHER_EFP	INV_ETHER_EF	/* unused (same as IOC3 Fast Ethernet) */
#define INV_GSN_XTK1	29	/* single xtalk version of GSN */
#define INV_GSN_XTK2	30	/* dual xtalk version of GSN */
#define INV_FORE_HE	31	/* FORE HE ATM Card */
#define INV_FORE_PCA	32	/* FORE PCA ATM Card */
#define INV_FORE_VMA    33      /* FORE VMA ATM Card */
#define INV_FORE_ESA    34      /* FORE ESA ATM Card */
#define INV_FORE_GIA    35      /* FORE GIA ATM Card */

/* Types for class INV_SCSI and INV_VSCSI; The type code is the same as
 * the device type code returned by the Inquiry command, iff the Inquiry
 * command defines a type code for the device in question.  If it doesn't,
 * values over 31 will be used for the device type.
 * Note: the lun is encoded in bits 8-15 of the state.  The
 * state field low 3 bits contains the information from the inquiry
 * cmd that indicates ANSI SCSI 1,2, etc. compliance, and bit 7
 * contains the inquiry info that indicates whether the media is
 * removable.
 */
#define INV_PRINTER	2	/* SCSI printer */
#define INV_CPU		3	/* SCSI CPU device */
#define INV_WORM	4	/* write-once-read-many (e.g. optical disks) */
#define INV_CDROM	5	/* CD-ROM  */
#define INV_SCANNER	6	/* scanners */
#define INV_OPTICAL	7	/* optical disks (read-write) */
#define INV_CHANGER	8	/* jukebox's for CDROMS, for example */
#define INV_COMM	9	/* Communications device */
#define INV_STARCTLR	12	/* Storage Array Controller */
#define INV_RAIDCTLR	32	/* RAID ctlr actually gives type 0 */

/* bit definitions for state field for class INV_SCSI */
#define INV_REMOVE	0x80	/* has removable media */
#define INV_SCSI_MASK	7	/* to which ANSI SCSI standard device conforms*/

/* types for class INV_AUDIO */

#define INV_AUDIO_HDSP		0	/* Indigo DSP system */
#define INV_AUDIO_VIGRA110	1	/* ViGRA 110 audio board */
#define INV_AUDIO_VIGRA210	2	/* ViGRA 210 audio board */
#define INV_AUDIO_A2		3	/* HAL2 / Audio Module for Indigo 2 */
#define INV_AUDIO_A3		4	/* Moosehead (IP32) AD1843 codec */
#define INV_AUDIO_RAD		5	/* RAD PCI chip */

/* types for class INV_VIDEO */

#define	INV_VIDEO_LIGHT		0
#define	INV_VIDEO_VS2		1	/* MultiChannel Option */
#define	INV_VIDEO_EXPRESS	2	/* kaleidecope video */
#define	INV_VIDEO_VINO		3
#define	INV_VIDEO_VO2		4	/* Sirius Video */
#define	INV_VIDEO_INDY		5	/* Indy Video - kal vid on Newport
					  gfx on Indy */
#define	INV_VIDEO_MVP		6	/* Moosehead Video Ports */
#define	INV_VIDEO_INDY_601	7	/* Indy Video 601 */
#define	INV_VIDEO_PMUX		8	/* PALMUX video w/ PGR gfx */
#define	INV_VIDEO_MGRAS		9	/* Galileo 1.5 video */
#define	INV_VIDEO_DIVO		10	/* DIVO video */
#define	INV_VIDEO_RACER		11	/* SpeedRacer Pro Video */
#define	INV_VIDEO_EVO		12	/* EVO Personal Video */
#define INV_VIDEO_XTHD		13	/* XIO XT-HDTV video */
#define INV_VIDEO_XTDIGVID      14      /* XIO XT-HDDIGVID video */

/* states for video class INV_VIDEO_EXPRESS */

#define INV_GALILEO_REV		0xF
#define INV_GALILEO_JUNIOR	0x10
#define INV_GALILEO_INDY_CAM	0x20
#define INV_GALILEO_DBOB	0x40
#define INV_GALILEO_ELANTEC	0x80

/* states for video class VINO */

#define INV_VINO_REV		0xF
#define INV_VINO_INDY_CAM	0x10
#define INV_VINO_INDY_NOSW	0x20	/* nebulous - means s/w not installed */

/* states for video class MVP */

#define INV_MVP_REV(x)		(((x)&0x0000000f))
#define INV_MVP_REV_SW(x)	(((x)&0x000000f0)>>4)
#define INV_MVP_AV_BOARD(x)	(((x)&0x00000f00)>>8)
#define	INV_MVP_AV_REV(x)	(((x)&0x0000f000)>>12)
#define	INV_MVP_CAMERA(x)	(((x)&0x000f0000)>>16)
#define	INV_MVP_CAM_REV(x)	(((x)&0x00f00000)>>20)
#define INV_MVP_SDIINF(x)       (((x)&0x0f000000)>>24)
#define INV_MVP_SDI_REV(x)      (((x)&0xf0000000)>>28)

/* types for class INV_BUS */

#define INV_BUS_VME	0
#define INV_BUS_EISA	1
#define INV_BUS_GIO	2
#define INV_BUS_BT3_PCI	3

/* types for class INV_MISC */
#define INV_MISC_EPC_EINT	0	/* EPC external interrupts */
#define INV_MISC_PCKM		1	/* pc keyboard or mouse */
#define INV_MISC_IOC3_EINT	2	/* IOC3 external interrupts */
#define INV_MISC_OTHER		3	/* non-specific type */

/*
 * The four components below do not actually have inventory information
 * associated with the vertex. These symbols are used by grio at the 
 * moment to figure out the device type from the vertex. If these get
 * inventory structures in the future, either the type values must
 * remain the same or grio code needs to change.
 */

#define INV_XBOW        	3	/* cross bow */
#define INV_HUB         	4	/* hub */
#define INV_PCI_BRIDGE  	5	/* pci bridge */
#define INV_ROUTER		6	/* router */

/*  types for class INV_PROM */
#define INV_IO6PROM	0
#define INV_IP27PROM	1
#define INV_IP35PROM	2

/* types for class INV_COMPRESSION */

#define	INV_COSMO		0
#define	INV_INDYCOMP		1
#define	INV_IMPACTCOMP		2	/* cosmo2, aka impact compression */
#define	INV_VICE		3 	/* Video imaging & compression engine */

/* types for class INV_DISPLAY */
#define INV_PRESENTER_BOARD	0       /* Indy Presenter adapter board */
#define INV_PRESENTER_PANEL	1       /* Indy Presenter board and panel */
#define INV_ICO_BOARD		2	/* IMPACT channel option board */
#define INV_DCD_BOARD		3	/* O2 dual channel option board */
#define INV_7of9_BOARD          4       /* 7of9 flatpanel adapter board */
#define INV_7of9_PANEL          5       /* 7of9 flatpanel board and panel */

/* types for class INV_IEEE1394 */
#define INV_OHCI	0	/* Ohci IEEE1394 pci card */

/* state for class INV_IEEE1394 & type INV_OHCI */
#define INV_IEEE1394_STATE_TI_REV_1 0

/* O2 DVLink 1.1 controller static info */
#define INV_IEEE1394_CTLR_O2_DVLINK_11 0x8009104c

/* types for class INV_TPU */
#define	INV_TPU_EXT		0	/* External XIO Tensor Processing Unit */
#define	INV_TPU_XIO		1	/* Internal XIO Tensor Processing Unit */

/*
 * USB Types.  The upper 8 bits contain general usb device class and are used to
 * qualify the lower 8 bits which contain device type within a usb class.
 * Use USB_INV_DEVCLASS and USB_INV_DEVTYPE to to decode an i_type, and
 * USB_INV_TYPE to set it.
 */

#define USB_INV_DEVCLASS(invtype)	((invtype) >> 8)
#define USB_INV_DEVTYPE(invtype)	((invtype) & 0xf)
#define USB_INV_TYPE(usbclass, usbtype)	(((usbclass) << 8) | (usbtype))

/*
 * USB device classes.  These classes might not match the classes as defined
 * by the usb spec, but where possible we will try.
 */

#define USB_INV_CLASS_RH	0x00	/* root hub (ie. controller) */
#define USB_INV_CLASS_HID	0x03	/* human interface device */
#define USB_INV_CLASS_HUB	0x09	/* hub device */

/*
 * USB device types within a class.  These will not match USB device types,
 * as the usb is not consistent on how specific types are defined (sometimes
 * they are found in the interface subclass, sometimes (as in HID devices) they
 * are found within data generated by the device (hid report descriptors for
 * example).
 */

/*
 * RH types
 */

#define USB_INV_RH_OHCI		0x01	/* ohci root hub */

/*
 * HID types
 */

#define USB_INV_HID_KEYBOARD	0x01	/* kbd (HID class) */
#define USB_INV_HID_MOUSE	0x02	/* mouse (HID class) */

/*
 * HUB types - none yet
 */

typedef struct invent_generic_s {
	unsigned short	ig_module;
	unsigned short	ig_slot;
	unsigned char	ig_flag;
	int	ig_invclass;
} invent_generic_t;

#define INVENT_ENABLED	0x1

typedef struct invent_membnkinfo {
	unsigned short	imb_size;	/* bank size in MB */
	unsigned short	imb_attr;	/* Mem attributes */
	unsigned int	imb_flag;	/* bank flags */
} invent_membnkinfo_t;


typedef struct invent_meminfo {
	invent_generic_t 	im_gen;
	unsigned short	im_size;	/* memory size     */
	unsigned short	im_banks;	/* number of banks */
	/*
	 * declare an array with one element. Each platform is expected to
	 * allocate the size required based on the number of banks and set
	 * the im_banks correctly for this array traversal.
	 */
	invent_membnkinfo_t im_bank_info[1]; 
} invent_meminfo_t;

#define INV_MEM_PREMIUM	 0x01

typedef struct invent_cpuinfo {
	invent_generic_t ic_gen;
	cpu_inv_t     ic_cpu_info;
	unsigned short	ic_cpuid;
	unsigned short	ic_slice;
	unsigned short  ic_cpumode;

} invent_cpuinfo_t;

typedef struct invent_rpsinfo {
	invent_generic_t ir_gen;
	int 		 ir_xbox;	/* is RPS connected to an xbox */
} invent_rpsinfo_t;

typedef struct invent_miscinfo {
	invent_generic_t im_gen;
	int       	 im_rev;
	int		 im_version;
	int	         im_type;
	uint64_t	 im_speed;
} invent_miscinfo_t;


typedef struct invent_routerinfo{
         invent_generic_t im_gen;
         router_inv_t     rip;
} invent_routerinfo_t;



#ifdef __KERNEL__

typedef struct irix5_inventory_s {
	app32_ptr_t	inv_next;	/* next inventory record in list */
	int	inv_class;		/* class of object */
	int	inv_type;		/* class sub-type of object */
	major_t	inv_controller;		/* object major identifier */
	minor_t	inv_unit;		/* object minor identifier */
	int	inv_state;		/* information specific to object or
					   class */
} irix5_inventory_t;

typedef struct invplace_s {
	devfs_handle_t		invplace_vhdl;		/* current vertex */
	devfs_handle_t		invplace_vplace;	/* place in vertex list */
	inventory_t		*invplace_inv;		/* place in inv list on vertex */
} invplace_t; /* Magic cookie placeholder in inventory list */

extern invplace_t invplace_none;
#define INVPLACE_NONE invplace_none

extern void	    add_to_inventory(int, int, int, int, int);
extern void	    replace_in_inventory(inventory_t *, int, int, int, int, int);
extern void         start_scan_inventory(invplace_t *);
extern inventory_t  *get_next_inventory(invplace_t *);
extern void         end_scan_inventory(invplace_t *);
extern inventory_t  *find_inventory(inventory_t *, int, int, int, int, int);
extern int	    scaninvent(int (*)(inventory_t *, void *), void *);
extern int	    get_sizeof_inventory(int);

extern void device_inventory_add(	devfs_handle_t device, 
					int class, 
					int type, 
					major_t ctlr, 
					minor_t unit, 
					int state);


extern inventory_t *device_inventory_get_next(	devfs_handle_t device,
						invplace_t *);

extern void device_controller_num_set(	devfs_handle_t,
					int);
extern int device_controller_num_get(	devfs_handle_t);
#endif /* __KERNEL__ */
#endif /* _ASM_IA64_SN_INVENT_H */