1 /* HEXTERNS.H   (c) Copyright Roger Bowler, 1999-2009                */
2 /*              Hercules function prototypes                         */
3 
4 #ifndef _HEXTERNS_H
5 #define _HEXTERNS_H
6 
7 #include "hercules.h"
8 
9 // Define all DLL Imports depending on current file
10 
11 #ifndef _HSYS_C_
12 #define HSYS_DLL_IMPORT DLL_IMPORT
13 #else   /* _HSYS_C_ */
14 #define HSYS_DLL_IMPORT DLL_EXPORT
15 #endif  /* _HSYS_C_ */
16 
17 #ifndef _CCKDDASD_C_
18 #ifndef _HDASD_DLL_
19 #define CCKD_DLL_IMPORT DLL_IMPORT
20 #else   /* _HDASD_DLL_ */
21 #define CCKD_DLL_IMPORT extern
22 #endif  /* _HDASD_DLL_ */
23 #else
24 #define CCKD_DLL_IMPORT DLL_EXPORT
25 #endif
26 
27 #ifndef _HDL_C_
28 #ifndef _HUTIL_DLL_
29 #define HHDL_DLL_IMPORT DLL_IMPORT
30 #else   /* _HDASD_DLL_ */
31 #define HHDL_DLL_IMPORT extern
32 #endif  /* _HDASD_DLL_ */
33 #else
34 #define HHDL_DLL_IMPORT DLL_EXPORT
35 #endif
36 
37 #ifndef _HSCCMD_C_
38 #ifndef _HENGINE_DLL_
39 #define HCMD_DLL_IMPORT DLL_IMPORT
40 #else   /* _HENGINE_DLL_ */
41 #define HCMD_DLL_IMPORT extern
42 #endif  /* _HENGINE_DLL_ */
43 #else
44 #define HCMD_DLL_IMPORT DLL_EXPORT
45 #endif
46 
47 #ifndef _CMDTAB_C_
48 #ifndef _HENGINE_DLL_
49 #define CMDT_DLL_IMPORT DLL_IMPORT
50 #else   /* _HENGINE_DLL_ */
51 #define CMDT_DLL_IMPORT extern
52 #endif  /* _HENGINE_DLL_ */
53 #else
54 #define CMDT_DLL_IMPORT DLL_EXPORT
55 #endif
56 
57 #ifndef _HAO_C_
58 #ifndef _HENGINE_DLL_
59 #define HAO_DLL_IMPORT DLL_IMPORT
60 #else   /* _HENGINE_DLL_ */
61 #define HAO_DLL_IMPORT extern
62 #endif  /* _HENGINE_DLL_ */
63 #else
64 #define HAO_DLL_IMPORT DLL_EXPORT
65 #endif
66 
67 #ifndef _PANEL_C_
68 #ifndef _HENGINE_DLL_
69 #define HPAN_DLL_IMPORT DLL_IMPORT
70 #else   /* _HENGINE_DLL_ */
71 #define HPAN_DLL_IMPORT extern
72 #endif  /* _HENGINE_DLL_ */
73 #else
74 #define HPAN_DLL_IMPORT DLL_EXPORT
75 #endif
76 
77 #ifndef _IMPL_C_
78 #ifndef _HENGINE_DLL_
79 #define IMPL_DLL_IMPORT DLL_IMPORT
80 #else   /* _HENGINE_DLL_ */
81 #define IMPL_DLL_IMPORT extern
82 #endif  /* _HENGINE_DLL_ */
83 #else
84 #define IMPL_DLL_IMPORT DLL_EXPORT
85 #endif
86 
87 #ifndef _CCKDUTIL_C_
88 #ifndef _HDASD_DLL_
89 #define CCDU_DLL_IMPORT DLL_IMPORT
90 #else   /* _HDASD_DLL_ */
91 #define CCDU_DLL_IMPORT extern
92 #endif  /* _HDASD_DLL_ */
93 #else
94 #define CCDU_DLL_IMPORT DLL_EXPORT
95 #endif
96 
97 #ifndef _CONFIG_C_
98 #ifndef _HENGINE_DLL_
99 #define CONF_DLL_IMPORT DLL_IMPORT
100 #else   /* _HDASD_DLL_ */
101 #define CONF_DLL_IMPORT extern
102 #endif  /* _HDASD_DLL_ */
103 #else
104 #define CONF_DLL_IMPORT DLL_EXPORT
105 #endif
106 
107 #ifndef _BLDCFG_C_
108 #ifndef _HENGINE_DLL_
109 #define BLDC_DLL_IMPORT DLL_IMPORT
110 #else   /* _HDASD_DLL_ */
111 #define BLDC_DLL_IMPORT extern
112 #endif  /* _HDASD_DLL_ */
113 #else
114 #define BLDC_DLL_IMPORT DLL_EXPORT
115 #endif
116 
117 #ifndef _SERVICE_C_
118 #ifndef _HENGINE_DLL_
119 #define SERV_DLL_IMPORT DLL_IMPORT
120 #else   /* _HENGINE_DLL_ */
121 #define SERV_DLL_IMPORT extern
122 #endif  /* _HENGINE_DLL_ */
123 #else
124 #define SERV_DLL_IMPORT DLL_EXPORT
125 #endif
126 
127 #ifndef _LOADPARM_C_
128 #ifndef _HENGINE_DLL_
129 #define LOADPARM_DLL_IMPORT DLL_IMPORT
130 #else   /* _HENGINE_DLL_ */
131 #define LOADPARM_DLL_IMPORT extern
132 #endif  /* _HENGINE_DLL_ */
133 #else
134 #define LOADPARM_DLL_IMPORT DLL_EXPORT
135 #endif
136 
137 #if defined( _MSC_VER ) && (_MSC_VER >= 1300) && (_MSC_VER < 1400)
138 //  '_ftol'   is defined in MSVCRT.DLL
139 //  '_ftol2'  we define ourselves in "w32ftol2.c"
140 extern long _ftol ( double dblSource );
141 extern long _ftol2( double dblSource );
142 #endif
143 
144 #if !defined(HAVE_STRSIGNAL)
145   const char* strsignal(int signo);    // (ours is in 'strsignal.c')
146 #endif
147 
148 #if defined(HAVE_SETRESUID)
149 /* (the following missing from SUSE 7.1) */
150 int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid);
151 int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid);
152 int setresuid(uid_t ruid, uid_t euid, uid_t suid);
153 int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
154 #endif
155 
156 /* Function used to compare filenames */
157 #if defined(MIXEDCASE_FILENAMES_ARE_UNIQUE)
158   #define strfilenamecmp  strcmp
159   #define strnfilenamecmp  strncmp
160 #else
161   #define strfilenamecmp  strcasecmp
162   #define strnfilenamecmp  strncasecmp
163 #endif
164 
165 /* Global data areas in module config.c                              */
166 HSYS_DLL_IMPORT SYSBLK   sysblk;         /* System control block      */
167 CCKD_DLL_IMPORT CCKDBLK  cckdblk;                /* CCKD global block         */
168 #ifdef EXTERNALGUI
169 HSYS_DLL_IMPORT int extgui;             // __attribute__ ((deprecated));
170 /* The external gui interface is now external and now uses the
171    HDC(debug_cpu_state, regs) interface */
172 #endif /*EXTERNALGUI*/
173 
174 /* Functions in module config.c or bldcfg.c */
175 void build_config (char *fname);
176 void release_config ();
177 CONF_DLL_IMPORT DEVBLK *find_device_by_devnum (U16 lcss, U16 devnum);
178 DEVBLK *find_device_by_subchan (U32 ioid);
179 REGS *devregs(DEVBLK *dev);
180 DEVBLK *get_devblk (U16 lcss, U16 devnum);
181 void ret_devblk (DEVBLK *dev);
182 int  attach_device (U16 lcss, U16 devnum, const char *devtype, int addargc,
183         char *addargv[]);
184 int  detach_subchan (U16 lcss, U16 subchan);
185 int  detach_device (U16 lcss, U16 devnum);
186 int  define_device (U16 lcss, U16 olddev, U16 newdev);
187 CONF_DLL_IMPORT int  group_device(DEVBLK *dev, int members);
188 int  configure_cpu (int cpu);
189 int  deconfigure_cpu (int cpu);
190 BLDC_DLL_IMPORT int parse_args (char* p, int maxargc, char** pargv, int* pargc);
191 #define MAX_ARGS  128                   /* Max argv[] array size     */
192 int parse_and_attach_devices(const char *devnums,const char *devtype,int ac,char **av);
193 CONF_DLL_IMPORT int parse_single_devnum(const char *spec, U16 *lcss, U16 *devnum);
194 int parse_single_devnum_silent(const char *spec, U16 *lcss, U16 *devnum);
195 int readlogo(char *fn);
196 void clearlogo(void);
197 CONF_DLL_IMPORT int parse_conkpalv(char* s, int* idle, int* intv, int* cnt );
198 #if defined( OPTION_TAPE_AUTOMOUNT )
199 BLDC_DLL_IMPORT int add_tamdir( char *tamdir, TAMDIR **ppTAMDIR );
200 #endif /* OPTION_TAPE_AUTOMOUNT */
201 
202 /* Global data areas and functions in module cpu.c                   */
203 extern const char* arch_name[];
204 extern const char* get_arch_mode_string(REGS* regs);
205 
206 /* Functions in module panel.c */
207 void expire_kept_msgs(int unconditional);
208 #ifdef OPTION_MIPS_COUNTING
209 HPAN_DLL_IMPORT U32    maxrates_rpt_intvl;  // (reporting interval)
210 HPAN_DLL_IMPORT U32    curr_high_mips_rate; // (high water mark for current interval)
211 HPAN_DLL_IMPORT U32    curr_high_sios_rate; // (high water mark for current interval)
212 HPAN_DLL_IMPORT U32    prev_high_mips_rate; // (saved high water mark for previous interval)
213 HPAN_DLL_IMPORT U32    prev_high_sios_rate; // (saved high water mark for previous interval)
214 HPAN_DLL_IMPORT time_t curr_int_start_time; // (start time of current interval)
215 HPAN_DLL_IMPORT time_t prev_int_start_time; // (start time of previous interval)
216 HPAN_DLL_IMPORT void update_maxrates_hwm(); // (update high-water-mark values)
217 #endif // OPTION_MIPS_COUNTING
218 
219 /* Functions in module hao.c (Hercules Automatic Operator) */
220 #if defined(OPTION_HAO)
221 HAO_DLL_IMPORT int hao_initialize(void);        /* initialize hao */
222 HAO_DLL_IMPORT void hao_command(char *command); /* process hao command */
223 HAO_DLL_IMPORT void hao_message(char *message); /* process message */
224 #endif /* defined(OPTION_HAO) */
225 
226 /* Functions in module hsccmd.c (so PTT debugging patches can access them) */
227 HCMD_DLL_IMPORT int aia_cmd     (int argc, char *argv[], char *cmdline);
228 HCMD_DLL_IMPORT int stopall_cmd (int argc, char *argv[], char *cmdline);
229 
230 /* Functions in module cmdtab.c */
231 CMDT_DLL_IMPORT int ProcessConfigCommand (int argc, char **argv, char *cmdline);
232 
233 /* Functions in losc.c */
234 void losc_set (int license_status);
235 void losc_check(char *ostype);
236 
237 #if defined(OPTION_DYNAMIC_LOAD)
238 
239 HHDL_DLL_IMPORT char *(*hdl_device_type_equates) (const char *);
240 CMDT_DLL_IMPORT void *(panel_command_r)          (void *cmdline);
241 HPAN_DLL_IMPORT void  (panel_display_r)          (void);
242 
243 HSYS_DLL_IMPORT int   (*config_command) (int argc, char *argv[], char *cmdline);
244 HSYS_DLL_IMPORT int   (*system_command) (int argc, char *argv[], char *cmdline);
245 HSYS_DLL_IMPORT void  (*daemon_task)    (void);
246 HSYS_DLL_IMPORT void  (*panel_display)  (void);
247 HSYS_DLL_IMPORT void *(*panel_command)  (void *);
248 
249 HSYS_DLL_IMPORT void *(*debug_device_state)         (DEVBLK *);
250 HSYS_DLL_IMPORT void *(*debug_cpu_state)            (REGS *);
251 HSYS_DLL_IMPORT void *(*debug_cd_cmd)               (char *);
252 HSYS_DLL_IMPORT void *(*debug_watchdog_signal)      (REGS *);
253 HSYS_DLL_IMPORT void *(*debug_program_interrupt)    (REGS *, int);
254 HSYS_DLL_IMPORT void *(*debug_diagnose)             (U32, int,  int, REGS *);
255 HSYS_DLL_IMPORT void *(*debug_iucv)                 (int, VADR, REGS *);
256 HSYS_DLL_IMPORT void *(*debug_sclp_unknown_command) (U32,    void *, REGS *);
257 HSYS_DLL_IMPORT void *(*debug_sclp_unknown_event)   (void *, void *, REGS *);
258 HSYS_DLL_IMPORT void *(*debug_sclp_unknown_event_mask) (void *, void *, REGS *);
259 HSYS_DLL_IMPORT void *(*debug_chsc_unknown_request) (void *, void *, REGS *);
260 HSYS_DLL_IMPORT void *(*debug_sclp_event_data)      (void *, void *, REGS *);
261 
262 #else
263 void *panel_command (void *cmdline);
264 void panel_display (void);
265 #define debug_cpu_state                 NULL
266 #define debug_cd_cmd                    NULL
267 #define debug_device_state              NULL
268 #define debug_program_interrupt         NULL
269 #define debug_diagnose                  NULL
270 #define debug_iucv                      NULL
271 #define debug_sclp_unknown_command      NULL
272 #define debug_sclp_unknown_event        NULL
273 #define debug_sclp_event_data           NULL
274 #define debug_chsc_unknown_request      NULL
275 #define debug_watchdog_signal           NULL
276 #endif
277 
278 /* Functions in module loadparm.c */
279 void set_loadparm(char *name);
280 void get_loadparm(BYTE *dest);
281 char *str_loadparm();
282 void set_lparname(char *name);
283 void get_lparname(BYTE *dest);
284 LOADPARM_DLL_IMPORT char *str_lparname();
285 void set_manufacturer(char *name);
286 void set_plant(char *name);
287 void set_model(int argc, char *m1, char* m2, char* m3, char* m4);
288 void get_manufacturer(BYTE *name);
289 void get_plant(BYTE *name);
290 void get_model(BYTE *name);
291 void get_modelcapa(BYTE *name);
292 void get_modelperm(BYTE *name);
293 void get_modeltemp(BYTE *name);
294 void get_sysname(BYTE *name);
295 void get_systype(BYTE *name);
296 void get_sysplex(BYTE *name);
297 void set_sysname(BYTE *name);
298 void set_systype(BYTE *name);
299 void set_sysplex(BYTE *name);
300 void get_mpfactors(BYTE *dest);
301 
302 /* Functions in module impl.c */
303 IMPL_DLL_IMPORT void system_cleanup(void);
304 
305 typedef void (*LOGCALLBACK)(const char *,size_t);
306 typedef void *(*COMMANDHANDLER)(void *);
307 
308 IMPL_DLL_IMPORT int impl(int,char **);
309 IMPL_DLL_IMPORT void regiserLogCallback(LOGCALLBACK);
310 IMPL_DLL_IMPORT COMMANDHANDLER getCommandHandler(void);
311 
312 /* Functions in module timer.c */
313 void update_TOD_clock (void);
314 void *timer_update_thread (void *argp);
315 
316 /* Functions in module service.c */
317 void scp_command (char *command, int priomsg);
318 int can_signal_quiesce ();
319 int signal_quiesce (U16 count, BYTE unit);
320 void sclp_attention(U16 type);
321 void sclp_reset();
322 SERV_DLL_IMPORT void sclp_sysg_attention();
323 int servc_hsuspend(void *file);
324 int servc_hresume(void *file);
325 
326 /* Functions in module ckddasd.c */
327 void ckd_build_sense ( DEVBLK *, BYTE, BYTE, BYTE, BYTE, BYTE);
328 int ckddasd_init_handler ( DEVBLK *dev, int argc, char *argv[]);
329 void ckddasd_execute_ccw ( DEVBLK *dev, BYTE code, BYTE flags,
330         BYTE chained, U16 count, BYTE prevcode, int ccwseq,
331         BYTE *iobuf, BYTE *more, BYTE *unitstat, U16 *residual );
332 int ckddasd_close_device ( DEVBLK *dev );
333 void ckddasd_query_device (DEVBLK *dev, char **class,
334                 int buflen, char *buffer);
335 int ckddasd_hsuspend ( DEVBLK *dev, void *file );
336 int ckddasd_hresume  ( DEVBLK *dev, void *file );
337 
338 /* Functions in module fbadasd.c */
339 FBA_DLL_IMPORT void fbadasd_syncblk_io (DEVBLK *dev, BYTE type, int blknum,
340         int blksize, BYTE *iobuf, BYTE *unitstat, U16 *residual);
341 FBA_DLL_IMPORT void fbadasd_read_block
342       ( DEVBLK *dev, int blknum, int blksize, int blkfactor,
343         BYTE *iobuf, BYTE *unitstat, U16 *residual );
344 FBA_DLL_IMPORT void fbadasd_write_block
345       ( DEVBLK *dev, int blknum, int blksize, int blkfactor,
346         BYTE *iobuf, BYTE *unitstat, U16 *residual );
347 int fbadasd_init_handler ( DEVBLK *dev, int argc, char *argv[]);
348 void fbadasd_execute_ccw ( DEVBLK *dev, BYTE code, BYTE flags,
349         BYTE chained, U16 count, BYTE prevcode, int ccwseq,
350         BYTE *iobuf, BYTE *more, BYTE *unitstat, U16 *residual );
351 int fbadasd_close_device ( DEVBLK *dev );
352 void fbadasd_query_device (DEVBLK *dev, char **class,
353                 int buflen, char *buffer);
354 int fbadasd_hsuspend ( DEVBLK *dev, void *file );
355 int fbadasd_hresume  ( DEVBLK *dev, void *file );
356 
357 /* Functions in module cckddasd.c */
358 DEVIF   cckddasd_init_handler;
359 int     cckddasd_close_device (DEVBLK *);
360 int     cckd_read_track (DEVBLK *, int, BYTE *);
361 int     cckd_update_track (DEVBLK *, int, int, BYTE *, int, BYTE *);
362 int     cfba_read_block (DEVBLK *, int, BYTE *);
363 int     cfba_write_block (DEVBLK *, int, int, BYTE *, int, BYTE *);
364 CCKD_DLL_IMPORT void   *cckd_sf_add (void *);
365 CCKD_DLL_IMPORT void   *cckd_sf_remove (void *);
366 CCKD_DLL_IMPORT void   *cckd_sf_stats (void *);
367 CCKD_DLL_IMPORT void   *cckd_sf_comp (void *);
368 CCKD_DLL_IMPORT void   *cckd_sf_chk (void *);
369 CCKD_DLL_IMPORT int     cckd_command(char *, int);
370 CCKD_DLL_IMPORT void    cckd_print_itrace ();
371 
372 /* Functions in module cckdutil.c */
373 CCDU_DLL_IMPORT int     cckd_swapend (DEVBLK *);
374 CCDU_DLL_IMPORT void    cckd_swapend_chdr (CCKD_DEVHDR *);
375 CCDU_DLL_IMPORT void    cckd_swapend_l1 (CCKD_L1ENT *, int);
376 CCDU_DLL_IMPORT void    cckd_swapend_l2 (CCKD_L2ENT *);
377 CCDU_DLL_IMPORT void    cckd_swapend_free (CCKD_FREEBLK *);
378 CCDU_DLL_IMPORT void    cckd_swapend4 (char *);
379 CCDU_DLL_IMPORT void    cckd_swapend2 (char *);
380 CCDU_DLL_IMPORT int     cckd_endian ();
381 CCDU_DLL_IMPORT int     cckd_comp (DEVBLK *);
382 CCDU_DLL_IMPORT int     cckd_chkdsk (DEVBLK *, int);
383 CCDU_DLL_IMPORT void    cckdumsg (DEVBLK *, int, char *, ...);
384 
385 /* Functions in module hscmisc.c */
386 int herc_system (char* command);
387 void do_shutdown();
388 void display_regs (REGS *regs);
389 void display_fregs (REGS *regs);
390 void display_cregs (REGS *regs);
391 void display_aregs (REGS *regs);
392 void display_subchannel (DEVBLK *dev);
393 void get_connected_client (DEVBLK* dev, char** pclientip, char** pclientname);
394 void alter_display_real (char *opnd, REGS *regs);
395 void alter_display_virt (char *opnd, REGS *regs);
396 void disasm_stor(REGS *regs, char *opnd);
397 int drop_privileges(int capa);
398 
399 /* Functions in module sr.c */
400 int suspend_cmd(int argc, char *argv[],char *cmdline);
401 int resume_cmd(int argc, char *argv[],char *cmdline);
402 
403 /* Functions in ecpsvm.c that are not *direct* instructions */
404 /* but support functions either used by other instruction   */
405 /* functions or from somewhere else                         */
406 #ifdef FEATURE_ECPSVM
407 int  ecpsvm_dosvc(REGS *regs, int svccode);
408 int  ecpsvm_dossm(REGS *regs,int b,VADR ea);
409 int  ecpsvm_dolpsw(REGS *regs,int b,VADR ea);
410 int  ecpsvm_dostnsm(REGS *regs,int b,VADR ea,int imm);
411 int  ecpsvm_dostosm(REGS *regs,int b,VADR ea,int imm);
412 int  ecpsvm_dosio(REGS *regs,int b,VADR ea);
413 int  ecpsvm_dodiag(REGS *regs,int r1,int r3,int b2,VADR effective_addr2);
414 int  ecpsvm_dolctl(REGS *regs,int r1,int r3,int b2,VADR effective_addr2);
415 int  ecpsvm_dostctl(REGS *regs,int r1,int r3,int b2,VADR effective_addr2);
416 int  ecpsvm_doiucv(REGS *regs,int b2,VADR effective_addr2);
417 int  ecpsvm_virttmr_ext(REGS *regs);
418 #endif
419 
420 /* Functions in module w32ctca.c */
421 #if defined(OPTION_W32_CTCI)
422 HSYS_DLL_IMPORT int  (*debug_tt32_stats)   (int);
423 HSYS_DLL_IMPORT void (*debug_tt32_tracing) (int);
424 #endif // defined(OPTION_W32_CTCI)
425 
426 /* Function in crypto.c */
427 #if defined(_FEATURE_MESSAGE_SECURITY_ASSIST)
428 void renew_wrapping_keys(void);
429 #endif
430 
431 #endif // _HEXTERNS_H
432