|
|
1.1 root 1: #ifndef _IRQ16_DOT_H
2: #define _IRQ16_DOT_H
3:
4: /*
5: * _IRQ286.H 5.20A June 8, 1995
6: *
7: * The Greenleaf Comm Library
8: *
9: * Copyright (C) 1984-1995 Greenleaf Software Inc. All Rights Reserved.
10: *
11: * NOTES
12: *
13: * This file contains all the structures and constants used by
14: * the 16 bit IRQ Manager internal functions. End users should never
15: * have to include this file in any of their source modules.
16: *
17: * MODIFICATIONS
18: *
19: * December 1, 1994 5.10A : Initial release.
20: *
21: */
22:
23: #define MAXIMUM_HANDLERS 10
24:
25: #pragma pack( 1 )
26:
27: typedef struct _tag_irqdata {
28: void far * old_prot_handler;
29: GF_REALPTR16 old_real_handler;
30: void far *prot_handler;
31: GF_REALPTR16 real_handler;
32: void far *prot_handler_data;
33: GF_REALPTR16 real_handler_data;
34: void ( GF_CONV *tear_down_function )( void far *data );
35: #ifndef _LCODE
36: int dummy_place_holder; /* I keep this struc constant size for ISR ease */
37: #endif
38: int interrupt_number;
39: int saved_8259_bit;
40: int primary_8259;
41: int secondary_8259;
42: int mask_8259;
43: int prot_int_count;
44: int real_int_count;
45: } IRQDATA;
46:
47: #pragma pack()
48:
49: #ifdef __cplusplus
50: extern "C" {
51: #endif
52:
53: int GF_CONV HookInterrupt( int interrupt_number,
54: void ( GF_CDECL *prot_handler )( void far *data ),
55: GF_REALPTR16 real_handler,
56: void far *handler_data,
57: void ( GF_CONV *tear_down_function ) ( void far *data ),
58: int primary_8259,
59: int secondary_8259,
60: int mask_8259 );
61: int GF_CONV UnHookInterrupt( int interrupt_number );
62: void far * GF_CONV _GetInterruptData( int interrupt_number );
63: int GF_CONV RelocateIsrData( void );
64: void far * GF_CONV CalcRR16Address( void far *p );
65:
66: #ifdef __cplusplus
67: }
68: #endif
69:
70: /*
71: * These first two extern declarations are used to find the start and end
72: * of the real isr data area. We need this when it is time to perform
73: * the relocation.
74: */
75:
76: extern char far _SegmentStartRR;
77: extern char far _SegmentEndRR;
78:
79: /*
80: * These two extern definitions are really important. When
81: * the 16 bit IRQ manager is initialized, it relocates the real portion
82: * of the IRQ manager, plus the table of IRQDATA blocks down to
83: * a block of real memory. Thse two pointers let everyone else
84: * know where that memory block is.
85: */
86:
87: extern GF_REALPTR16 RealBlockPtrReal;
88: extern void far *RealBlockPtrProt;
89:
90: void GF_CDECL far _RealIret( GF_REALPTR16 int_flag );
91:
92: #endif /* #ifndef _IRQ16_DOT_H */
93:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.