1#ifndef _PARISC_PDC_H
2#define _PARISC_PDC_H
3
4#include <uapi/asm/pdc.h>
5
6#if !defined(__ASSEMBLY__)
7
8extern int pdc_type;
9
10
11#define PDC_TYPE_ILLEGAL -1
12#define PDC_TYPE_PAT 0
13#define PDC_TYPE_SYSTEM_MAP 1
14#define PDC_TYPE_SNAKE 2
15
16struct pdc_chassis_info {
17 unsigned long actcnt;
18 unsigned long maxcnt;
19};
20
21struct pdc_coproc_cfg {
22 unsigned long ccr_functional;
23 unsigned long ccr_present;
24 unsigned long revision;
25 unsigned long model;
26};
27
28struct pdc_model {
29 unsigned long hversion;
30 unsigned long sversion;
31 unsigned long hw_id;
32 unsigned long boot_id;
33 unsigned long sw_id;
34 unsigned long sw_cap;
35 unsigned long arch_rev;
36 unsigned long pot_key;
37 unsigned long curr_key;
38};
39
40struct pdc_cache_cf {
41 unsigned long
42#ifdef CONFIG_64BIT
43 cc_padW:32,
44#endif
45 cc_alias: 4,
46 cc_block: 4,
47 cc_line : 3,
48 cc_shift: 2,
49 cc_wt : 1,
50 cc_sh : 2,
51 cc_cst : 3,
52 cc_pad1 : 10,
53 cc_hv : 3;
54};
55
56struct pdc_tlb_cf {
57 unsigned long tc_pad0:12,
58#ifdef CONFIG_64BIT
59 tc_padW:32,
60#endif
61 tc_sh : 2,
62 tc_hv : 1,
63 tc_page : 1,
64 tc_cst : 3,
65 tc_aid : 5,
66 tc_sr : 8;
67};
68
69struct pdc_cache_info {
70
71 unsigned long ic_size;
72 struct pdc_cache_cf ic_conf;
73 unsigned long ic_base;
74 unsigned long ic_stride;
75 unsigned long ic_count;
76 unsigned long ic_loop;
77
78 unsigned long dc_size;
79 struct pdc_cache_cf dc_conf;
80 unsigned long dc_base;
81 unsigned long dc_stride;
82 unsigned long dc_count;
83 unsigned long dc_loop;
84
85 unsigned long it_size;
86 struct pdc_tlb_cf it_conf;
87 unsigned long it_sp_base;
88 unsigned long it_sp_stride;
89 unsigned long it_sp_count;
90 unsigned long it_off_base;
91 unsigned long it_off_stride;
92 unsigned long it_off_count;
93 unsigned long it_loop;
94
95 unsigned long dt_size;
96 struct pdc_tlb_cf dt_conf;
97 unsigned long dt_sp_base;
98 unsigned long dt_sp_stride;
99 unsigned long dt_sp_count;
100 unsigned long dt_off_base;
101 unsigned long dt_off_stride;
102 unsigned long dt_off_count;
103 unsigned long dt_loop;
104};
105
106#if 0
107
108
109
110struct pdc_iodc {
111 unsigned char hversion_model;
112 unsigned char hversion;
113 unsigned char spa;
114 unsigned char type;
115 unsigned int sversion_rev:4;
116 unsigned int sversion_model:19;
117 unsigned int sversion_opt:8;
118 unsigned char rev;
119 unsigned char dep;
120 unsigned char features;
121 unsigned char pad1;
122 unsigned int checksum:16;
123 unsigned int length:16;
124 unsigned int pad[15];
125} __attribute__((aligned(8))) ;
126#endif
127
128#ifndef CONFIG_PA20
129
130struct pdc_btlb_info_range {
131 __u8 res00;
132 __u8 num_i;
133 __u8 num_d;
134 __u8 num_comb;
135};
136
137struct pdc_btlb_info {
138 unsigned int min_size;
139 unsigned int max_size;
140 struct pdc_btlb_info_range fixed_range_info;
141 struct pdc_btlb_info_range variable_range_info;
142};
143
144#endif
145
146#ifdef CONFIG_64BIT
147struct pdc_memory_table_raddr {
148 unsigned long entries_returned;
149 unsigned long entries_total;
150};
151
152struct pdc_memory_table {
153 unsigned long paddr;
154 unsigned int pages;
155 unsigned int reserved;
156};
157#endif
158
159struct pdc_system_map_mod_info {
160 unsigned long mod_addr;
161 unsigned long mod_pgs;
162 unsigned long add_addrs;
163};
164
165struct pdc_system_map_addr_info {
166 unsigned long mod_addr;
167 unsigned long mod_pgs;
168};
169
170struct pdc_initiator {
171 int host_id;
172 int factor;
173 int width;
174 int mode;
175};
176
177struct hardware_path {
178 char flags;
179 char bc[6];
180
181 char mod;
182};
183
184
185
186
187struct pdc_module_path {
188 struct hardware_path path;
189 unsigned int layers[6];
190};
191
192#ifndef CONFIG_PA20
193
194struct pdc_memory_map {
195 unsigned long hpa;
196 unsigned long more_pgs;
197};
198#endif
199
200struct pdc_tod {
201 unsigned long tod_sec;
202 unsigned long tod_usec;
203};
204
205
206
207struct pdc_hpmc_pim_11 {
208 __u32 gr[32];
209 __u32 cr[32];
210 __u32 sr[8];
211 __u32 iasq_back;
212 __u32 iaoq_back;
213 __u32 check_type;
214 __u32 cpu_state;
215 __u32 rsvd1;
216 __u32 cache_check;
217 __u32 tlb_check;
218 __u32 bus_check;
219 __u32 assists_check;
220 __u32 rsvd2;
221 __u32 assist_state;
222 __u32 responder_addr;
223 __u32 requestor_addr;
224 __u32 path_info;
225 __u64 fr[32];
226};
227
228
229
230
231
232
233
234
235
236
237
238
239
240struct pdc_hpmc_pim_20 {
241 __u64 gr[32];
242 __u64 cr[32];
243 __u64 sr[8];
244 __u64 iasq_back;
245 __u64 iaoq_back;
246 __u32 check_type;
247 __u32 cpu_state;
248 __u32 cache_check;
249 __u32 tlb_check;
250 __u32 bus_check;
251 __u32 assists_check;
252 __u32 assist_state;
253 __u32 path_info;
254 __u64 responder_addr;
255 __u64 requestor_addr;
256 __u64 fr[32];
257};
258
259void pdc_console_init(void);
260void pdc_console_restart(void);
261
262void setup_pdc(void);
263
264
265
266int pdc_add_valid(unsigned long address);
267int pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsigned long len);
268int pdc_chassis_disp(unsigned long disp);
269int pdc_chassis_warn(unsigned long *warn);
270int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info);
271int pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info);
272int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index,
273 void *iodc_data, unsigned int iodc_data_size);
274int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info,
275 struct pdc_module_path *mod_path, long mod_index);
276int pdc_system_map_find_addrs(struct pdc_system_map_addr_info *pdc_addr_info,
277 long mod_index, long addr_index);
278int pdc_model_info(struct pdc_model *model);
279int pdc_model_sysmodel(char *name);
280int pdc_model_cpuid(unsigned long *cpu_id);
281int pdc_model_versions(unsigned long *versions, int id);
282int pdc_model_capabilities(unsigned long *capabilities);
283int pdc_cache_info(struct pdc_cache_info *cache);
284int pdc_spaceid_bits(unsigned long *space_bits);
285#ifndef CONFIG_PA20
286int pdc_btlb_info(struct pdc_btlb_info *btlb);
287int pdc_mem_map_hpa(struct pdc_memory_map *r_addr, struct pdc_module_path *mod_path);
288#endif
289int pdc_lan_station_id(char *lan_addr, unsigned long net_hpa);
290
291int pdc_stable_read(unsigned long staddr, void *memaddr, unsigned long count);
292int pdc_stable_write(unsigned long staddr, void *memaddr, unsigned long count);
293int pdc_stable_get_size(unsigned long *size);
294int pdc_stable_verify_contents(void);
295int pdc_stable_initialize(void);
296
297int pdc_pci_irt_size(unsigned long *num_entries, unsigned long hpa);
298int pdc_pci_irt(unsigned long num_entries, unsigned long hpa, void *tbl);
299
300int pdc_get_initiator(struct hardware_path *, struct pdc_initiator *);
301int pdc_tod_read(struct pdc_tod *tod);
302int pdc_tod_set(unsigned long sec, unsigned long usec);
303
304#ifdef CONFIG_64BIT
305int pdc_mem_mem_table(struct pdc_memory_table_raddr *r_addr,
306 struct pdc_memory_table *tbl, unsigned long entries);
307#endif
308
309void set_firmware_width(void);
310void set_firmware_width_unlocked(void);
311int pdc_do_firm_test_reset(unsigned long ftc_bitmap);
312int pdc_do_reset(void);
313int pdc_soft_power_info(unsigned long *power_reg);
314int pdc_soft_power_button(int sw_control);
315void pdc_io_reset(void);
316void pdc_io_reset_devices(void);
317int pdc_iodc_getc(void);
318int pdc_iodc_print(const unsigned char *str, unsigned count);
319
320void pdc_emergency_unlock(void);
321int pdc_sti_call(unsigned long func, unsigned long flags,
322 unsigned long inptr, unsigned long outputr,
323 unsigned long glob_cfg);
324
325static inline char * os_id_to_string(u16 os_id) {
326 switch(os_id) {
327 case OS_ID_NONE: return "No OS";
328 case OS_ID_HPUX: return "HP-UX";
329 case OS_ID_MPEXL: return "MPE-iX";
330 case OS_ID_OSF: return "OSF";
331 case OS_ID_HPRT: return "HP-RT";
332 case OS_ID_NOVEL: return "Novell Netware";
333 case OS_ID_LINUX: return "Linux";
334 default: return "Unknown";
335 }
336}
337
338#endif
339#endif
340