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-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 */ 252