1 |
1275 |
phoenix |
/* $Id: sn_private.h,v 1.1.1.1 2004-04-15 02:44:07 phoenix Exp $
|
2 |
|
|
*
|
3 |
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
4 |
|
|
* License. See the file "COPYING" in the main directory of this archive
|
5 |
|
|
* for more details.
|
6 |
|
|
*
|
7 |
|
|
* Copyright (C) 1992 - 1997, 2000-2003 Silicon Graphics, Inc. All rights reserved.
|
8 |
|
|
*/
|
9 |
|
|
#ifndef _ASM_IA64_SN_SN2_SN_PRIVATE_H
|
10 |
|
|
#define _ASM_IA64_SN_SN2_SN_PRIVATE_H
|
11 |
|
|
|
12 |
|
|
#include <asm/sn/nodepda.h>
|
13 |
|
|
#include <asm/sn/io.h>
|
14 |
|
|
#include <asm/sn/xtalk/xwidget.h>
|
15 |
|
|
#include <asm/sn/xtalk/xtalk_private.h>
|
16 |
|
|
|
17 |
|
|
extern nasid_t master_nasid;
|
18 |
|
|
|
19 |
|
|
/* promif.c */
|
20 |
|
|
extern void he_arcs_set_vectors(void);
|
21 |
|
|
extern void mem_init(void);
|
22 |
|
|
extern void cpu_unenable(cpuid_t);
|
23 |
|
|
extern nasid_t get_lowest_nasid(void);
|
24 |
|
|
extern __psunsigned_t get_master_bridge_base(void);
|
25 |
|
|
extern void set_master_bridge_base(void);
|
26 |
|
|
extern int check_nasid_equiv(nasid_t, nasid_t);
|
27 |
|
|
extern char get_console_pcislot(void);
|
28 |
|
|
|
29 |
|
|
extern int is_master_baseio_nasid_widget(nasid_t test_nasid, xwidgetnum_t test_wid);
|
30 |
|
|
|
31 |
|
|
/* memsupport.c */
|
32 |
|
|
extern void poison_state_alter_range(__psunsigned_t start, int len, int poison);
|
33 |
|
|
extern int memory_present(paddr_t);
|
34 |
|
|
extern int memory_read_accessible(paddr_t);
|
35 |
|
|
extern int memory_write_accessible(paddr_t);
|
36 |
|
|
extern void memory_set_access(paddr_t, int, int);
|
37 |
|
|
extern void show_dir_state(paddr_t, void (*)(char *, ...));
|
38 |
|
|
extern void check_dir_state(nasid_t, int, void (*)(char *, ...));
|
39 |
|
|
extern void set_dir_owner(paddr_t, int);
|
40 |
|
|
extern void set_dir_state(paddr_t, int);
|
41 |
|
|
extern void set_dir_state_POISONED(paddr_t);
|
42 |
|
|
extern void set_dir_state_UNOWNED(paddr_t);
|
43 |
|
|
extern int is_POISONED_dir_state(paddr_t);
|
44 |
|
|
extern int is_UNOWNED_dir_state(paddr_t);
|
45 |
|
|
#ifdef LATER
|
46 |
|
|
extern void get_dir_ent(paddr_t paddr, int *state,
|
47 |
|
|
uint64_t *vec_ptr, hubreg_t *elo);
|
48 |
|
|
#endif
|
49 |
|
|
|
50 |
|
|
/* intr.c */
|
51 |
|
|
extern int intr_reserve_level(cpuid_t cpu, int level, int err, vertex_hdl_t owner_dev, char *name);
|
52 |
|
|
extern void intr_unreserve_level(cpuid_t cpu, int level);
|
53 |
|
|
extern int intr_connect_level(cpuid_t cpu, int bit, ilvl_t mask_no,
|
54 |
|
|
intr_func_t intr_prefunc);
|
55 |
|
|
extern int intr_disconnect_level(cpuid_t cpu, int bit);
|
56 |
|
|
extern cpuid_t intr_heuristic(vertex_hdl_t dev, device_desc_t dev_desc,
|
57 |
|
|
int req_bit,int intr_resflags,vertex_hdl_t owner_dev,
|
58 |
|
|
char *intr_name,int *resp_bit);
|
59 |
|
|
extern void intr_block_bit(cpuid_t cpu, int bit);
|
60 |
|
|
extern void intr_unblock_bit(cpuid_t cpu, int bit);
|
61 |
|
|
extern void setrtvector(intr_func_t);
|
62 |
|
|
extern void install_cpuintr(cpuid_t cpu);
|
63 |
|
|
extern void install_dbgintr(cpuid_t cpu);
|
64 |
|
|
extern void install_tlbintr(cpuid_t cpu);
|
65 |
|
|
extern void hub_migrintr_init(cnodeid_t /*cnode*/);
|
66 |
|
|
extern int cause_intr_connect(int level, intr_func_t handler, uint intr_spl_mask);
|
67 |
|
|
extern int cause_intr_disconnect(int level);
|
68 |
|
|
extern void intr_dumpvec(cnodeid_t cnode, void (*pf)(char *, ...));
|
69 |
|
|
|
70 |
|
|
/* error_dump.c */
|
71 |
|
|
extern char *hub_rrb_err_type[];
|
72 |
|
|
extern char *hub_wrb_err_type[];
|
73 |
|
|
|
74 |
|
|
void nmi_dump(void);
|
75 |
|
|
void install_cpu_nmi_handler(int slice);
|
76 |
|
|
|
77 |
|
|
/* klclock.c */
|
78 |
|
|
extern void hub_rtc_init(cnodeid_t);
|
79 |
|
|
|
80 |
|
|
/* bte.c */
|
81 |
|
|
void bte_lateinit(void);
|
82 |
|
|
void bte_wait_for_xfer_completion(void *);
|
83 |
|
|
|
84 |
|
|
/* klgraph.c */
|
85 |
|
|
void klhwg_add_all_nodes(vertex_hdl_t);
|
86 |
|
|
void klhwg_add_all_modules(vertex_hdl_t);
|
87 |
|
|
|
88 |
|
|
/* klidbg.c */
|
89 |
|
|
void install_klidbg_functions(void);
|
90 |
|
|
|
91 |
|
|
/* klnuma.c */
|
92 |
|
|
extern void replicate_kernel_text(int numnodes);
|
93 |
|
|
extern __psunsigned_t get_freemem_start(cnodeid_t cnode);
|
94 |
|
|
extern void setup_replication_mask(int maxnodes);
|
95 |
|
|
|
96 |
|
|
/* init.c */
|
97 |
|
|
extern cnodeid_t get_compact_nodeid(void); /* get compact node id */
|
98 |
|
|
extern void init_platform_nodepda(nodepda_t *npda, cnodeid_t node);
|
99 |
|
|
extern void per_cpu_init(void);
|
100 |
|
|
extern int is_fine_dirmode(void);
|
101 |
|
|
extern void update_node_information(cnodeid_t);
|
102 |
|
|
|
103 |
|
|
/* shubio.c */
|
104 |
|
|
extern void hubio_init(void);
|
105 |
|
|
extern void hub_merge_clean(nasid_t nasid);
|
106 |
|
|
extern void hub_set_piomode(nasid_t nasid, int conveyor);
|
107 |
|
|
|
108 |
|
|
/* shuberror.c */
|
109 |
|
|
extern void hub_error_init(cnodeid_t);
|
110 |
|
|
extern void dump_error_spool(cpuid_t cpu, void (*pf)(char *, ...));
|
111 |
|
|
extern void hubni_error_handler(char *, int);
|
112 |
|
|
extern int check_ni_errors(void);
|
113 |
|
|
|
114 |
|
|
/* Used for debugger to signal upper software a breakpoint has taken place */
|
115 |
|
|
|
116 |
|
|
extern void *debugger_update;
|
117 |
|
|
extern __psunsigned_t debugger_stopped;
|
118 |
|
|
|
119 |
|
|
/*
|
120 |
|
|
* piomap, created by shub_pio_alloc.
|
121 |
|
|
* xtalk_info MUST BE FIRST, since this structure is cast to a
|
122 |
|
|
* xtalk_piomap_s by generic xtalk routines.
|
123 |
|
|
*/
|
124 |
|
|
struct hub_piomap_s {
|
125 |
|
|
struct xtalk_piomap_s hpio_xtalk_info;/* standard crosstalk pio info */
|
126 |
|
|
vertex_hdl_t hpio_hub; /* which shub's mapping registers are set up */
|
127 |
|
|
short hpio_holdcnt; /* count of current users of bigwin mapping */
|
128 |
|
|
char hpio_bigwin_num;/* if big window map, which one */
|
129 |
|
|
int hpio_flags; /* defined below */
|
130 |
|
|
};
|
131 |
|
|
/* hub_piomap flags */
|
132 |
|
|
#define HUB_PIOMAP_IS_VALID 0x1
|
133 |
|
|
#define HUB_PIOMAP_IS_BIGWINDOW 0x2
|
134 |
|
|
#define HUB_PIOMAP_IS_FIXED 0x4
|
135 |
|
|
|
136 |
|
|
#define hub_piomap_xt_piomap(hp) (&hp->hpio_xtalk_info)
|
137 |
|
|
#define hub_piomap_hub_v(hp) (hp->hpio_hub)
|
138 |
|
|
#define hub_piomap_winnum(hp) (hp->hpio_bigwin_num)
|
139 |
|
|
|
140 |
|
|
/*
|
141 |
|
|
* dmamap, created by shub_pio_alloc.
|
142 |
|
|
* xtalk_info MUST BE FIRST, since this structure is cast to a
|
143 |
|
|
* xtalk_dmamap_s by generic xtalk routines.
|
144 |
|
|
*/
|
145 |
|
|
struct hub_dmamap_s {
|
146 |
|
|
struct xtalk_dmamap_s hdma_xtalk_info;/* standard crosstalk dma info */
|
147 |
|
|
vertex_hdl_t hdma_hub; /* which shub we go through */
|
148 |
|
|
int hdma_flags; /* defined below */
|
149 |
|
|
};
|
150 |
|
|
/* shub_dmamap flags */
|
151 |
|
|
#define HUB_DMAMAP_IS_VALID 0x1
|
152 |
|
|
#define HUB_DMAMAP_USED 0x2
|
153 |
|
|
#define HUB_DMAMAP_IS_FIXED 0x4
|
154 |
|
|
|
155 |
|
|
/*
|
156 |
|
|
* interrupt handle, created by shub_intr_alloc.
|
157 |
|
|
* xtalk_info MUST BE FIRST, since this structure is cast to a
|
158 |
|
|
* xtalk_intr_s by generic xtalk routines.
|
159 |
|
|
*/
|
160 |
|
|
struct hub_intr_s {
|
161 |
|
|
struct xtalk_intr_s i_xtalk_info; /* standard crosstalk intr info */
|
162 |
|
|
ilvl_t i_swlevel; /* software level for blocking intr */
|
163 |
|
|
cpuid_t i_cpuid; /* which cpu */
|
164 |
|
|
int i_bit; /* which bit */
|
165 |
|
|
int i_flags;
|
166 |
|
|
};
|
167 |
|
|
/* flag values */
|
168 |
|
|
#define HUB_INTR_IS_ALLOCED 0x1 /* for debug: allocated */
|
169 |
|
|
#define HUB_INTR_IS_CONNECTED 0x4 /* for debug: connected to a software driver */
|
170 |
|
|
|
171 |
|
|
typedef struct hubinfo_s {
|
172 |
|
|
nodepda_t *h_nodepda; /* pointer to node's private data area */
|
173 |
|
|
cnodeid_t h_cnodeid; /* compact nodeid */
|
174 |
|
|
nasid_t h_nasid; /* nasid */
|
175 |
|
|
|
176 |
|
|
/* structures for PIO management */
|
177 |
|
|
xwidgetnum_t h_widgetid; /* my widget # (as viewed from xbow) */
|
178 |
|
|
struct hub_piomap_s h_small_window_piomap[HUB_WIDGET_ID_MAX+1];
|
179 |
|
|
sv_t h_bwwait; /* wait for big window to free */
|
180 |
|
|
spinlock_t h_bwlock; /* guard big window piomap's */
|
181 |
|
|
spinlock_t h_crblock; /* gaurd CRB error handling */
|
182 |
|
|
int h_num_big_window_fixed; /* count number of FIXED maps */
|
183 |
|
|
struct hub_piomap_s h_big_window_piomap[HUB_NUM_BIG_WINDOW];
|
184 |
|
|
hub_intr_t hub_ii_errintr;
|
185 |
|
|
} *hubinfo_t;
|
186 |
|
|
|
187 |
|
|
#define hubinfo_get(vhdl, infoptr) ((void)hwgraph_info_get_LBL \
|
188 |
|
|
(vhdl, INFO_LBL_NODE_INFO, (arbitrary_info_t *)infoptr))
|
189 |
|
|
|
190 |
|
|
#define hubinfo_set(vhdl, infoptr) (void)hwgraph_info_add_LBL \
|
191 |
|
|
(vhdl, INFO_LBL_NODE_INFO, (arbitrary_info_t)infoptr)
|
192 |
|
|
|
193 |
|
|
#define hubinfo_to_hubv(hinfo, hub_v) (hinfo->h_nodepda->node_vertex)
|
194 |
|
|
|
195 |
|
|
/*
|
196 |
|
|
* Hub info PIO map access functions.
|
197 |
|
|
*/
|
198 |
|
|
#define hubinfo_bwin_piomap_get(hinfo, win) \
|
199 |
|
|
(&hinfo->h_big_window_piomap[win])
|
200 |
|
|
#define hubinfo_swin_piomap_get(hinfo, win) \
|
201 |
|
|
(&hinfo->h_small_window_piomap[win])
|
202 |
|
|
|
203 |
|
|
/* cpu-specific information stored under INFO_LBL_CPU_INFO */
|
204 |
|
|
typedef struct cpuinfo_s {
|
205 |
|
|
cpuid_t ci_cpuid; /* CPU ID */
|
206 |
|
|
} *cpuinfo_t;
|
207 |
|
|
|
208 |
|
|
#define cpuinfo_get(vhdl, infoptr) ((void)hwgraph_info_get_LBL \
|
209 |
|
|
(vhdl, INFO_LBL_CPU_INFO, (arbitrary_info_t *)infoptr))
|
210 |
|
|
|
211 |
|
|
#define cpuinfo_set(vhdl, infoptr) (void)hwgraph_info_add_LBL \
|
212 |
|
|
(vhdl, INFO_LBL_CPU_INFO, (arbitrary_info_t)infoptr)
|
213 |
|
|
|
214 |
|
|
/* Special initialization function for xswitch vertices created during startup. */
|
215 |
|
|
extern void xswitch_vertex_init(vertex_hdl_t xswitch);
|
216 |
|
|
|
217 |
|
|
extern xtalk_provider_t hub_provider;
|
218 |
|
|
|
219 |
|
|
/* du.c */
|
220 |
|
|
int ducons_write(char *buf, int len);
|
221 |
|
|
|
222 |
|
|
/* memerror.c */
|
223 |
|
|
|
224 |
|
|
extern void install_eccintr(cpuid_t cpu);
|
225 |
|
|
extern void memerror_get_stats(cnodeid_t cnode,
|
226 |
|
|
int *bank_stats, int *bank_stats_max);
|
227 |
|
|
extern void probe_md_errors(nasid_t);
|
228 |
|
|
/* sysctlr.c */
|
229 |
|
|
extern void sysctlr_init(void);
|
230 |
|
|
extern void sysctlr_power_off(int sdonly);
|
231 |
|
|
extern void sysctlr_keepalive(void);
|
232 |
|
|
|
233 |
|
|
#define valid_cpuid(_x) (((_x) >= 0) && ((_x) < maxcpus))
|
234 |
|
|
|
235 |
|
|
/* Useful definitions to get the memory dimm given a physical
|
236 |
|
|
* address.
|
237 |
|
|
*/
|
238 |
|
|
#define paddr_dimm(_pa) ((_pa & MD_BANK_MASK) >> MD_BANK_SHFT)
|
239 |
|
|
#define paddr_cnode(_pa) (NASID_TO_COMPACT_NODEID(NASID_GET(_pa)))
|
240 |
|
|
extern void membank_pathname_get(paddr_t,char *);
|
241 |
|
|
|
242 |
|
|
/* To redirect the output into the error buffer */
|
243 |
|
|
#define errbuf_print(_s) printf("#%s",_s)
|
244 |
|
|
|
245 |
|
|
extern void crbx(nasid_t nasid, void (*pf)(char *, ...));
|
246 |
|
|
void bootstrap(void);
|
247 |
|
|
|
248 |
|
|
/* sndrv.c */
|
249 |
|
|
extern int sndrv_attach(vertex_hdl_t vertex);
|
250 |
|
|
|
251 |
|
|
#endif /* _ASM_IA64_SN_SN2_SN_PRIVATE_H */
|