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