]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - board/MAI/bios_emulator/scitech/src/pm/os2/_pmos2.asm
* Patch by Thomas Frieden, 13 Nov 2002:
[karo-tx-uboot.git] / board / MAI / bios_emulator / scitech / src / pm / os2 / _pmos2.asm
1 ;****************************************************************************
2 ;*
3 ;*                  SciTech OS Portability Manager Library
4 ;*
5 ;*  ========================================================================
6 ;*
7 ;*    The contents of this file are subject to the SciTech MGL Public
8 ;*    License Version 1.0 (the "License"); you may not use this file
9 ;*    except in compliance with the License. You may obtain a copy of
10 ;*    the License at http://www.scitechsoft.com/mgl-license.txt
11 ;*
12 ;*    Software distributed under the License is distributed on an
13 ;*    "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
14 ;*    implied. See the License for the specific language governing
15 ;*    rights and limitations under the License.
16 ;*
17 ;*    The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
18 ;*
19 ;*    The Initial Developer of the Original Code is SciTech Software, Inc.
20 ;*    All Rights Reserved.
21 ;*
22 ;*  ========================================================================
23 ;*
24 ;* Language:    80386 Assembler, TASM 4.0 or NASM
25 ;* Environment: OS/2 32 bit protected mode
26 ;*
27 ;* Description: Low level assembly support for the PM library specific
28 ;*              to OS/2
29 ;*
30 ;****************************************************************************
31
32         IDEAL
33
34 include "scitech.mac"               ; Memory model macros
35
36 header      _pmos2                  ; Set up memory model
37
38 begdataseg  _pmos2
39
40         cglobal _PM_ioentry
41         cglobal _PM_gdt
42 _PM_ioentry     dd  0               ; Offset to call gate
43 _PM_gdt         dw  0               ; Selector to call gate
44
45 enddataseg  _pmos2
46
47 begcodeseg  _pmos2                  ; Start of code segment
48
49 ;----------------------------------------------------------------------------
50 ; int PM_setIOPL(int iopl)
51 ;----------------------------------------------------------------------------
52 ; Change the IOPL level for the 32-bit task. Returns the previous level
53 ; so it can be restored for the task correctly.
54 ;----------------------------------------------------------------------------
55 cprocstart  PM_setIOPL
56
57         ARG     iopl:UINT
58
59         enter_c
60         pushfd                      ; Save the old EFLAGS for later
61         mov     ecx,[iopl]          ; ECX := IOPL level
62         xor     ebx,ebx             ; Change IOPL level function code (0)
63 ifdef   USE_NASM
64         call far dword [_PM_ioentry]
65 else
66         call    [FWORD _PM_ioentry]
67 endif
68         pop     eax
69         and     eax,0011000000000000b
70         shr     eax,12
71         leave_c
72         ret
73
74 cprocend
75
76 ;----------------------------------------------------------------------------
77 ; void _PM_setGDTSelLimit(ushort selector, ulong limit);
78 ;----------------------------------------------------------------------------
79 ; Change the GDT selector limit to given value. Used to change selector
80 ; limits to address the entire system address space.
81 ;----------------------------------------------------------------------------
82 cprocstart  _PM_setGDTSelLimit
83
84         ARG     selector:USHORT, limit:UINT
85         
86         enter_c
87         sub     esp,20              ; Make room for selector data on stack
88         mov     ecx,esp             ; ECX := selector data structure
89         mov     bx,[selector]       ; Fill out the data structure
90         and     bx,0FFF8h           ; Kick out the LDT/GDT and DPL bits     
91         mov     [WORD ecx],bx
92         mov     ebx,[limit]
93         mov     [DWORD ecx+4],ebx
94         mov     ebx,5               ; Set GDT selector limit function code      
95 ifdef   USE_NASM
96         call far dword [_PM_ioentry]
97 else
98         call    [FWORD _PM_ioentry]
99 endif
100         add     esp,20
101         leave_c
102         ret
103
104 cprocend    
105
106 ;----------------------------------------------------------------------------
107 ; uchar _MTRR_getCx86(uchar reg);
108 ;----------------------------------------------------------------------------
109 ; Read a Cyrix CPU indexed register
110 ;----------------------------------------------------------------------------
111 cprocstart  _MTRR_getCx86
112
113         ARG     reg:UCHAR
114
115         enter_c
116         mov     al,[reg]
117         out     22h,al
118         in      al,23h
119         leave_c
120         ret
121
122 cprocend
123
124 ;----------------------------------------------------------------------------
125 ; uchar _MTRR_setCx86(uchar reg,uchar val);
126 ;----------------------------------------------------------------------------
127 ; Write a Cyrix CPU indexed register
128 ;----------------------------------------------------------------------------
129 cprocstart  _MTRR_setCx86
130
131         ARG     reg:UCHAR, val:UCHAR
132
133         enter_c
134         mov     al,[reg]
135         out     22h,al
136         mov     al,[val]
137         out     23h,al
138         leave_c
139         ret
140
141 cprocend
142
143 ;----------------------------------------------------------------------------
144 ; ulong _MTRR_disableInt(void);
145 ;----------------------------------------------------------------------------
146 ; Return processor interrupt status and disable interrupts.
147 ;----------------------------------------------------------------------------
148 cprocstart  _MTRR_disableInt
149
150 ; Do nothing!
151         ret
152
153 cprocend
154
155 ;----------------------------------------------------------------------------
156 ; void _MTRR_restoreInt(ulong ps);
157 ;----------------------------------------------------------------------------
158 ; Restore processor interrupt status.
159 ;----------------------------------------------------------------------------
160 cprocstart  _MTRR_restoreInt
161
162 ; Do nothing!
163         ret
164
165 cprocend
166
167 ;----------------------------------------------------------------------------
168 ; void DebugInt(void)
169 ;----------------------------------------------------------------------------
170 cprocstart  DebugInt
171
172         int     3
173         ret
174
175 cprocend
176
177 endcodeseg  _pmos2
178
179         END                         ; End of module
180