1
2
3
4
5
6
7
8
9
10
11#ifndef _ASM_IA64_SN_KLCONFIG_H
12#define _ASM_IA64_SN_KLCONFIG_H
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30#include <linux/types.h>
31#include <asm/sn/types.h>
32#include <asm/sn/slotnum.h>
33#include <asm/sn/router.h>
34#include <asm/sn/sgi.h>
35#include <asm/sn/addrs.h>
36#include <asm/sn/vector.h>
37#include <asm/sn/xtalk/xbow.h>
38#include <asm/sn/xtalk/xtalk.h>
39#include <asm/sn/kldir.h>
40#include <asm/sn/sn_fru.h>
41#include <asm/sn/sn2/shub_md.h>
42#include <asm/sn/geo.h>
43
44#define KLCFGINFO_MAGIC 0xbeedbabe
45
46typedef s32 klconf_off_t;
47
48#define MAX_MODULE_ID 255
49#define SIZE_PAD 4096
50
51
52
53
54#define MAX_SLOTS_PER_NODE (1 + 3 + 6 + 1 + 1)
55
56
57
58#define MAX_PCI_DEVS 8
59
60
61
62
63
64#define ENABLE_BOARD 0x01
65#define FAILED_BOARD 0x02
66#define DUPLICATE_BOARD 0x04
67
68#define VISITED_BOARD 0x08
69#define LOCAL_MASTER_IO6 0x10
70#define KLTYPE_IOBRICK_XBOW (KLCLASS_MIDPLANE | 0x2)
71
72
73
74#define KLINFO_ENABLE 0x01
75#define KLINFO_FAILED 0x02
76#define KLINFO_DEVICE 0x04
77#define KLINFO_VISITED 0x08
78#define KLINFO_CONTROLLER 0x10
79#define KLINFO_INSTALL 0x20
80#define KLINFO_HEADLESS 0x40
81
82
83
84
85
86
87#define BOARD_STRUCT 0
88#define COMPONENT_STRUCT 1
89#define ERRINFO_STRUCT 2
90#define KLMALLOC_TYPE_MAX (ERRINFO_STRUCT + 1)
91#define DEVICE_STRUCT 3
92
93
94typedef struct console_s {
95 unsigned long uart_base;
96 unsigned long config_base;
97 unsigned long memory_base;
98 short baud;
99 short flag;
100 int type;
101 nasid_t nasid;
102 char wid;
103 char npci;
104 nic_t baseio_nic;
105} console_t;
106
107typedef struct klc_malloc_hdr {
108 klconf_off_t km_base;
109 klconf_off_t km_limit;
110 klconf_off_t km_current;
111} klc_malloc_hdr_t;
112
113
114
115typedef struct kl_config_hdr {
116 u64 ch_magic;
117 u32 ch_version;
118 klconf_off_t ch_malloc_hdr_off;
119 klconf_off_t ch_cons_off;
120 klconf_off_t ch_board_info;
121 console_t ch_cons_info;
122 klc_malloc_hdr_t ch_malloc_hdr[KLMALLOC_TYPE_MAX];
123 confidence_t ch_sw_belief;
124 confidence_t ch_sn0net_belief;
125} kl_config_hdr_t;
126
127
128#define KL_CONFIG_HDR(_nasid) ((kl_config_hdr_t *)(KLCONFIG_ADDR(_nasid)))
129
130#define NODE_OFFSET_TO_LBOARD(nasid,off) (lboard_t*)(NODE_CAC_BASE(nasid) + (off))
131
132#define KL_CONFIG_INFO(_nasid) root_lboard[nasid_to_cnodeid(_nasid)]
133
134
135
136#define PTR_CH_CONS_INFO(_k) ((console_t *)\
137 ((unsigned long)_k + (_k->ch_cons_off)))
138
139#define KL_CONFIG_CH_CONS_INFO(_n) PTR_CH_CONS_INFO(KL_CONFIG_HDR(_n))
140
141
142
143#define KL_CONFIG_DUPLICATE_BOARD(_brd) ((_brd)->brd_flags & DUPLICATE_BOARD)
144
145#define XBOW_PORT_TYPE_HUB(_xbowp, _link) \
146 ((_xbowp)->xbow_port_info[(_link) - BASE_XBOW_PORT].port_flag & XBOW_PORT_HUB)
147#define XBOW_PORT_TYPE_IO(_xbowp, _link) \
148 ((_xbowp)->xbow_port_info[(_link) - BASE_XBOW_PORT].port_flag & XBOW_PORT_IO)
149
150#define XBOW_PORT_IS_ENABLED(_xbowp, _link) \
151 ((_xbowp)->xbow_port_info[(_link) - BASE_XBOW_PORT].port_flag & XBOW_PORT_ENABLE)
152#define XBOW_PORT_NASID(_xbowp, _link) \
153 ((_xbowp)->xbow_port_info[(_link) - BASE_XBOW_PORT].port_nasid)
154
155#define XBOW_PORT_IO 0x1
156#define XBOW_PORT_HUB 0x2
157#define XBOW_PORT_ENABLE 0x4
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#define KLCLASS_MASK 0xf0
256#define KLCLASS_NONE 0x00
257#define KLCLASS_NODE 0x10
258#define KLCLASS_CPU KLCLASS_NODE
259#define KLCLASS_IO 0x20
260
261#define KLCLASS_ROUTER 0x30
262#define KLCLASS_MIDPLANE 0x40
263
264#define KLCLASS_GFX 0x50
265
266#define KLCLASS_PSEUDO_GFX 0x60
267
268
269
270#define KLCLASS_IOBRICK 0x70
271
272#define KLCLASS_MAX 8
273#define KLTYPE_MAX 11
274
275#define KLCLASS_UNKNOWN 0xf0
276
277#define KLCLASS(_x) ((_x) & KLCLASS_MASK)
278
279
280
281
282
283#define KLTYPE_MASK 0x0f
284#define KLTYPE_NONE 0x00
285#define KLTYPE_EMPTY 0x00
286
287#define KLTYPE_WEIRDCPU (KLCLASS_CPU | 0x0)
288#define KLTYPE_SNIA (KLCLASS_CPU | 0x1)
289
290#define KLTYPE_ROUTER (KLCLASS_ROUTER | 0x1)
291#define KLTYPE_META_ROUTER (KLCLASS_ROUTER | 0x3)
292#define KLTYPE_REPEATER_ROUTER (KLCLASS_ROUTER | 0x4)
293
294#define KLTYPE_IOBRICK (KLCLASS_IOBRICK | 0x0)
295#define KLTYPE_NBRICK (KLCLASS_IOBRICK | 0x4)
296#define KLTYPE_PXBRICK (KLCLASS_IOBRICK | 0x6)
297#define KLTYPE_IXBRICK (KLCLASS_IOBRICK | 0x7)
298#define KLTYPE_CGBRICK (KLCLASS_IOBRICK | 0x8)
299#define KLTYPE_OPUSBRICK (KLCLASS_IOBRICK | 0x9)
300
301
302
303
304
305
306
307
308#define KLTYPE_UNKNOWN (KLCLASS_UNKNOWN | 0xf)
309
310#define KLTYPE(_x) ((_x) & KLTYPE_MASK)
311
312
313
314
315
316#define MAX_COMPTS_PER_BRD 24
317
318typedef struct lboard_s {
319 klconf_off_t brd_next_any;
320 unsigned char struct_type;
321 unsigned char brd_type;
322 unsigned char brd_sversion;
323 unsigned char brd_brevision;
324 unsigned char brd_promver;
325 unsigned char brd_flags;
326 unsigned char brd_slot;
327 unsigned short brd_debugsw;
328 geoid_t brd_geoid;
329 partid_t brd_partition;
330 unsigned short brd_diagval;
331 unsigned short brd_diagparm;
332 unsigned char brd_inventory;
333 unsigned char brd_numcompts;
334 nic_t brd_nic;
335 nasid_t brd_nasid;
336 klconf_off_t brd_compts[MAX_COMPTS_PER_BRD];
337 klconf_off_t brd_errinfo;
338 struct lboard_s *brd_parent;
339 char pad0[4];
340 confidence_t brd_confidence;
341 nasid_t brd_owner;
342 unsigned char brd_nic_flags;
343 char pad1[24];
344 char brd_name[32];
345 nasid_t brd_next_same_host;
346 klconf_off_t brd_next_same;
347} lboard_t;
348
349
350
351
352
353
354#define BOARD_SLOT(_brd) ((_brd)->brd_slot)
355
356#define KLCF_CLASS(_brd) KLCLASS((_brd)->brd_type)
357#define KLCF_TYPE(_brd) KLTYPE((_brd)->brd_type)
358#define KLCF_NUM_COMPS(_brd) ((_brd)->brd_numcompts)
359#define KLCF_MODULE_ID(_brd) ((_brd)->brd_module)
360
361#define NODE_OFFSET_TO_KLINFO(n,off) ((klinfo_t*) TO_NODE_CAC(n,off))
362#define KLCF_NEXT(_brd) \
363 ((_brd)->brd_next_same ? \
364 (NODE_OFFSET_TO_LBOARD((_brd)->brd_next_same_host, (_brd)->brd_next_same)): NULL)
365#define KLCF_NEXT_ANY(_brd) \
366 ((_brd)->brd_next_any ? \
367 (NODE_OFFSET_TO_LBOARD(NASID_GET(_brd), (_brd)->brd_next_any)): NULL)
368#define KLCF_COMP(_brd, _ndx) \
369 ((((_brd)->brd_compts[(_ndx)]) == 0) ? 0 : \
370 (NODE_OFFSET_TO_KLINFO(NASID_GET(_brd), (_brd)->brd_compts[(_ndx)])))
371
372#define KLCF_COMP_TYPE(_comp) ((_comp)->struct_type)
373#define KLCF_BRIDGE_W_ID(_comp) ((_comp)->physid)
374
375
376
377
378
379
380
381
382typedef struct klinfo_s {
383 unsigned char struct_type;
384 unsigned char struct_version;
385 unsigned char flags;
386 unsigned char revision;
387 unsigned short diagval;
388 unsigned short diagparm;
389 unsigned char inventory;
390 unsigned short partid;
391 nic_t nic;
392 unsigned char physid;
393 unsigned int virtid;
394 unsigned char widid;
395 nasid_t nasid;
396 char pad1;
397 char pad2;
398 void *data;
399 klconf_off_t errinfo;
400 unsigned short pad3;
401 unsigned short pad4;
402} klinfo_t ;
403
404#define KLCONFIG_INFO_ENABLED(_i) ((_i)->flags & KLINFO_ENABLE)
405
406
407
408
409
410
411
412
413
414#define KLSTRUCT_UNKNOWN 0
415#define KLSTRUCT_CPU 1
416#define KLSTRUCT_HUB 2
417#define KLSTRUCT_MEMBNK 3
418#define KLSTRUCT_XBOW 4
419#define KLSTRUCT_BRI 5
420#define KLSTRUCT_ROU 9
421#define KLSTRUCT_GFX 10
422#define KLSTRUCT_SCSI 11
423#define KLSTRUCT_DISK 14
424#define KLSTRUCT_CDROM 16
425
426#define KLSTRUCT_FIBERCHANNEL 25
427#define KLSTRUCT_MOD_SERIAL_NUM 26
428#define KLSTRUCT_QLFIBRE 32
429#define KLSTRUCT_1394 33
430#define KLSTRUCT_USB 34
431#define KLSTRUCT_USBKBD 35
432#define KLSTRUCT_USBMS 36
433#define KLSTRUCT_SCSI_CTLR 37
434#define KLSTRUCT_PEBRICK 38
435#define KLSTRUCT_GIGE 39
436#define KLSTRUCT_IDE 40
437#define KLSTRUCT_IOC4 41
438#define KLSTRUCT_IOC4UART 42
439#define KLSTRUCT_IOC4_TTY 43
440#define KLSTRUCT_IOC4PCKM 44
441#define KLSTRUCT_IOC4MS 45
442#define KLSTRUCT_IOC4_ATA 46
443#define KLSTRUCT_PCIGFX 47
444
445
446
447
448
449
450
451
452typedef struct klport_s {
453 nasid_t port_nasid;
454 unsigned char port_flag;
455 klconf_off_t port_offset;
456 short port_num;
457} klport_t;
458
459typedef struct klcpu_s {
460 klinfo_t cpu_info;
461 unsigned short cpu_prid;
462 unsigned short cpu_fpirr;
463 unsigned short cpu_speed;
464 unsigned short cpu_scachesz;
465 unsigned short cpu_scachespeed;
466 unsigned long pad;
467} klcpu_t ;
468
469#define CPU_STRUCT_VERSION 2
470
471typedef struct klhub_s {
472 klinfo_t hub_info;
473 unsigned int hub_flags;
474#define MAX_NI_PORTS 2
475 klport_t hub_port[MAX_NI_PORTS + 1];
476 nic_t hub_box_nic;
477 klconf_off_t hub_mfg_nic;
478 u64 hub_speed;
479 moduleid_t hub_io_module;
480 unsigned long pad;
481} klhub_t ;
482
483typedef struct klhub_uart_s {
484 klinfo_t hubuart_info;
485 unsigned int hubuart_flags;
486 nic_t hubuart_box_nic;
487 unsigned long pad;
488} klhub_uart_t ;
489
490#define MEMORY_STRUCT_VERSION 2
491
492typedef struct klmembnk_s {
493 klinfo_t membnk_info;
494 short membnk_memsz;
495 short membnk_dimm_select;
496 short membnk_bnksz[MD_MEM_BANKS];
497 short membnk_attr;
498 unsigned long pad;
499} klmembnk_t ;
500
501#define MAX_SERIAL_NUM_SIZE 10
502
503typedef struct klmod_serial_num_s {
504 klinfo_t snum_info;
505 union {
506 char snum_str[MAX_SERIAL_NUM_SIZE];
507 unsigned long long snum_int;
508 } snum;
509 unsigned long pad;
510} klmod_serial_num_t;
511
512
513
514
515
516
517#define GET_SNUM_COMP(_l) ((klmod_serial_num_t *)\
518 KLCF_COMP(_l, _l->brd_numcompts))
519
520#define MAX_XBOW_LINKS 16
521
522typedef struct klxbow_s {
523 klinfo_t xbow_info ;
524 klport_t xbow_port_info[MAX_XBOW_LINKS] ;
525 int xbow_master_hub_link;
526
527 unsigned long pad;
528} klxbow_t ;
529
530#define MAX_PCI_SLOTS 8
531
532typedef struct klpci_device_s {
533 s32 pci_device_id;
534 s32 pci_device_pad;
535} klpci_device_t;
536
537#define BRIDGE_STRUCT_VERSION 2
538
539typedef struct klbri_s {
540 klinfo_t bri_info ;
541 unsigned char bri_eprominfo ;
542 unsigned char bri_bustype ;
543 u64 *pci_specific ;
544 klpci_device_t bri_devices[MAX_PCI_DEVS] ;
545 klconf_off_t bri_mfg_nic ;
546 unsigned long pad;
547} klbri_t ;
548
549#define ROUTER_VECTOR_VERS 2
550
551
552typedef struct klrou_s {
553 klinfo_t rou_info ;
554 unsigned int rou_flags ;
555 nic_t rou_box_nic ;
556 klport_t rou_port[MAX_ROUTER_PORTS + 1] ;
557 klconf_off_t rou_mfg_nic ;
558 u64 rou_vector;
559 unsigned long pad;
560} klrou_t ;
561
562
563
564
565
566
567
568
569
570
571
572#define KLGFX_COOKIE 0x0c0de000
573
574typedef struct klgfx_s {
575 klinfo_t gfx_info;
576 klconf_off_t old_gndevs;
577 klconf_off_t old_gdoff0;
578 unsigned int cookie;
579 unsigned int moduleslot;
580 struct klgfx_s *gfx_next_pipe;
581 u64 *gfx_specific;
582 klconf_off_t pad0;
583 klconf_off_t gfx_mfg_nic;
584 unsigned long pad;
585} klgfx_t;
586
587#define MAX_SCSI_DEVS 16
588
589
590
591
592
593
594
595
596typedef struct klscsi_s {
597 klinfo_t scsi_info ;
598 u64 *scsi_specific ;
599 unsigned char scsi_numdevs ;
600 klconf_off_t scsi_devinfo[MAX_SCSI_DEVS] ;
601 unsigned long pad;
602} klscsi_t ;
603
604typedef struct klscctl_s {
605 klinfo_t scsi_info ;
606 unsigned int type;
607 unsigned int scsi_buscnt;
608 void *scsi_bus[2];
609 unsigned long pad;
610} klscctl_t ;
611
612typedef struct klscdev_s {
613 klinfo_t scdev_info ;
614 struct scsidisk_data *scdev_cfg ;
615 unsigned long pad;
616} klscdev_t ;
617
618typedef struct klttydev_s {
619 klinfo_t ttydev_info ;
620 struct terminal_data *ttydev_cfg ;
621 unsigned long pad;
622} klttydev_t ;
623
624typedef struct klpcigfx_s {
625 klinfo_t gfx_info ;
626} klpcigfx_t ;
627
628typedef struct klkbddev_s {
629 klinfo_t kbddev_info ;
630 struct keyboard_data *kbddev_cfg ;
631 unsigned long pad;
632} klkbddev_t ;
633
634typedef struct klmsdev_s {
635 klinfo_t msdev_info ;
636 void *msdev_cfg ;
637 unsigned long pad;
638} klmsdev_t ;
639
640
641
642
643
644typedef struct klusb_s {
645 klinfo_t usb_info;
646 void *usb_bus;
647 uint64_t usb_controller;
648 unsigned long pad;
649} klusb_t ;
650
651typedef union klcomp_s {
652 klcpu_t kc_cpu;
653 klhub_t kc_hub;
654 klmembnk_t kc_mem;
655 klxbow_t kc_xbow;
656 klbri_t kc_bri;
657 klrou_t kc_rou;
658 klgfx_t kc_gfx;
659 klscsi_t kc_scsi;
660 klscctl_t kc_scsi_ctl;
661 klscdev_t kc_scsi_dev;
662 klmod_serial_num_t kc_snum ;
663 klusb_t kc_usb;
664} klcomp_t;
665
666typedef union kldev_s {
667 klscdev_t kc_scsi_dev ;
668 klttydev_t kc_tty_dev ;
669 klkbddev_t kc_kbd_dev ;
670} kldev_t ;
671
672
673
674extern lboard_t *root_lboard[];
675extern lboard_t *find_lboard_any(lboard_t *start, unsigned char type);
676extern lboard_t *find_lboard_nasid(lboard_t *start, nasid_t, unsigned char type);
677extern klinfo_t *find_component(lboard_t *brd, klinfo_t *kli, unsigned char type);
678extern klinfo_t *find_first_component(lboard_t *brd, unsigned char type);
679extern klcpu_t *nasid_slice_to_cpuinfo(nasid_t, int);
680
681
682extern lboard_t *find_gfxpipe(int pipenum);
683extern lboard_t *find_lboard_class_any(lboard_t *start, unsigned char brd_class);
684extern lboard_t *find_lboard_class_nasid(lboard_t *start, nasid_t, unsigned char brd_class);
685extern lboard_t *find_nic_lboard(lboard_t *, nic_t);
686extern lboard_t *find_nic_type_lboard(nasid_t, unsigned char, nic_t);
687extern lboard_t *find_lboard_modslot(lboard_t *start, geoid_t geoid);
688extern int config_find_nic_router(nasid_t, nic_t, lboard_t **, klrou_t**);
689extern int config_find_nic_hub(nasid_t, nic_t, lboard_t **, klhub_t**);
690extern int config_find_xbow(nasid_t, lboard_t **, klxbow_t**);
691extern int update_klcfg_cpuinfo(nasid_t, int);
692extern void board_to_path(lboard_t *brd, char *path);
693extern void nic_name_convert(char *old_name, char *new_name);
694extern int module_brds(nasid_t nasid, lboard_t **module_brds, int n);
695extern lboard_t *brd_from_key(uint64_t key);
696extern void device_component_canonical_name_get(lboard_t *,klinfo_t *,
697 char *);
698extern int board_serial_number_get(lboard_t *,char *);
699extern nasid_t get_actual_nasid(lboard_t *brd) ;
700extern net_vec_t klcfg_discover_route(lboard_t *, lboard_t *, int);
701
702#endif
703