1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * ARCS hardware/memory inventory/configuration and system ID definitions.
4  */
5 #ifndef _ASM_ARC_HINV_H
6 #define _ASM_ARC_HINV_H
7 
8 #include <asm/sgidefs.h>
9 #include <asm/fw/arc/types.h>
10 
11 /* configuration query defines */
12 typedef enum configclass {
13 	SystemClass,
14 	ProcessorClass,
15 	CacheClass,
16 #ifndef _NT_PROM
17 	MemoryClass,
18 	AdapterClass,
19 	ControllerClass,
20 	PeripheralClass
21 #else	/* _NT_PROM */
22 	AdapterClass,
23 	ControllerClass,
24 	PeripheralClass,
25 	MemoryClass
26 #endif	/* _NT_PROM */
27 } CONFIGCLASS;
28 
29 typedef enum configtype {
30 	ARC,
31 	CPU,
32 	FPU,
33 	PrimaryICache,
34 	PrimaryDCache,
35 	SecondaryICache,
36 	SecondaryDCache,
37 	SecondaryCache,
38 #ifndef _NT_PROM
39 	Memory,
40 #endif
41 	EISAAdapter,
42 	TCAdapter,
43 	SCSIAdapter,
44 	DTIAdapter,
45 	MultiFunctionAdapter,
46 	DiskController,
47 	TapeController,
48 	CDROMController,
49 	WORMController,
50 	SerialController,
51 	NetworkController,
52 	DisplayController,
53 	ParallelController,
54 	PointerController,
55 	KeyboardController,
56 	AudioController,
57 	OtherController,
58 	DiskPeripheral,
59 	FloppyDiskPeripheral,
60 	TapePeripheral,
61 	ModemPeripheral,
62 	MonitorPeripheral,
63 	PrinterPeripheral,
64 	PointerPeripheral,
65 	KeyboardPeripheral,
66 	TerminalPeripheral,
67 	LinePeripheral,
68 	NetworkPeripheral,
69 #ifdef	_NT_PROM
70 	Memory,
71 #endif
72 	OtherPeripheral,
73 
74 	/* new stuff for IP30 */
75 	/* added without moving anything */
76 	/* except ANONYMOUS. */
77 
78 	XTalkAdapter,
79 	PCIAdapter,
80 	GIOAdapter,
81 	TPUAdapter,
82 
83 	Anonymous
84 } CONFIGTYPE;
85 
86 typedef enum {
87 	Failed = 1,
88 	ReadOnly = 2,
89 	Removable = 4,
90 	ConsoleIn = 8,
91 	ConsoleOut = 16,
92 	Input = 32,
93 	Output = 64
94 } IDENTIFIERFLAG;
95 
96 #ifndef NULL			/* for GetChild(NULL); */
97 #define NULL	0
98 #endif
99 
100 union key_u {
101 	struct {
102 #ifdef	_MIPSEB
103 		unsigned char  c_bsize;		/* block size in lines */
104 		unsigned char  c_lsize;		/* line size in bytes/tag */
105 		unsigned short c_size;		/* cache size in 4K pages */
106 #else	/* _MIPSEL */
107 		unsigned short c_size;		/* cache size in 4K pages */
108 		unsigned char  c_lsize;		/* line size in bytes/tag */
109 		unsigned char  c_bsize;		/* block size in lines */
110 #endif	/* _MIPSEL */
111 	} cache;
112 	ULONG FullKey;
113 };
114 
115 #if _MIPS_SIM == _MIPS_SIM_ABI64
116 #define SGI_ARCS_VERS	64			/* sgi 64-bit version */
117 #define SGI_ARCS_REV	0			/* rev .00 */
118 #else
119 #define SGI_ARCS_VERS	1			/* first version */
120 #define SGI_ARCS_REV	10			/* rev .10, 3/04/92 */
121 #endif
122 
123 typedef struct {
124 	CONFIGCLASS	Class;
125 	CONFIGTYPE	Type;
126 	IDENTIFIERFLAG	Flags;
127 	USHORT		Version;
128 	USHORT		Revision;
129 	ULONG		Key;
130 	ULONG		AffinityMask;
131 	ULONG		ConfigurationDataSize;
132 	ULONG		IdentifierLength;
133 	char		*Identifier;
134 } COMPONENT;
135 
136 /* internal structure that holds pathname parsing data */
137 struct cfgdata {
138 	char *name;			/* full name */
139 	int minlen;			/* minimum length to match */
140 	CONFIGTYPE type;		/* type of token */
141 };
142 
143 /* System ID */
144 typedef struct {
145 	CHAR VendorId[8];
146 	CHAR ProductId[8];
147 } SYSTEMID;
148 
149 /* memory query functions */
150 typedef enum memorytype {
151 	ExceptionBlock,
152 	SPBPage,			/* ARCS == SystemParameterBlock */
153 #ifndef _NT_PROM
154 	FreeContiguous,
155 	FreeMemory,
156 	BadMemory,
157 	LoadedProgram,
158 	FirmwareTemporary,
159 	FirmwarePermanent
160 #else	/* _NT_PROM */
161 	FreeMemory,
162 	BadMemory,
163 	LoadedProgram,
164 	FirmwareTemporary,
165 	FirmwarePermanent,
166 	FreeContiguous
167 #endif	/* _NT_PROM */
168 } MEMORYTYPE;
169 
170 typedef struct {
171 	MEMORYTYPE	Type;
172 	LONG		BasePage;
173 	LONG		PageCount;
174 } MEMORYDESCRIPTOR;
175 
176 #endif /* _ASM_ARC_HINV_H */
177