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