TIP: Click on subject to list as thread! ANSI
echo: os2prog
to: Jonathan de Boyne Pollard
from: Daniela Engert
date: 2004-11-10 04:12:50
subject: Writing Devicedriver (Using EMX C++)

Hi Jonathan!

Thus quoth Jonathan de Boyne Pollard to David Noon:

 DN>>> I doubt if OS/2 would load a PDD with 32-bit code in it.

The kernel *forces* all segments in a PDD to 16-bit on load, ignoring the
32-bit-indicator in the file image. I learned this from my own experiments
on this subject.

 DT>>> OS/2 will load a PDD with 32 bit code segments just fine.

Dennis, this is true - but see above.

 DT>>> The "interface" to the rest of the system is
still via 16 bit
 DT>>> addressing. The PDD needs to be able to be called via a 16 bit
 DT>>> interface and use 16 bit DevHelp. Just some "assembly glue"
 DT>>> required. 

Exactly, very easy indeed!

 JdBP> As far as I know, the restriction on I/O instructions applies to
 JdBP> application programs running in user mode, not physical device
 JdBP> drivers running in kernel mode.  So both 16-bit and 32-bit code
 JdBP> can perform I/O instructions just fine in a PDD. (This is to be
 JdBP> expected, anyway, since PDDs run at ring 0, and the x86
 JdBP> architecture doesn't allow IOPL to be set lower than 0!)

This is true, tested by myself.

 JdBP> The questions that are raised, however, are:

 JdBP> What are the base and limit of the 32-bit selectors in CS/DS/SS
 JdBP> for a 32-bit PDD ? Are they based at the same address as the
 JdBP> user-mode flat-model CS/DS/SS selectors ?

No.

 JdBP> I assume that they are GDT selectors.

Of course, since driver segments must be addressable in every processor context.

 JdBP> But who creates the GDT entries ? Does the PDD loader do it,
 JdBP> and provide a kernel-mode thunking mechanism that all PDDs can
 JdBP> use ?

No, up to now, the kernel has no 32-bit PDD support (see above also). If
you like to have a 32-bit PDD, you have to construct it yourself *after
load time*. So your driver itself switches from a 'mini 16-bit PDD' to a
full fledged 32-bit PDD by modifying its code segment descriptor in the GDT
at any point at init time. The thunking is no problem at all, just 4
instructions in case of the DevHlp calls.

 JdBP> If so, what is it ? Or is each 32-bit PDD expected to create its
 JdBP> own private selectors ?
 JdBP> Anyone know ?

A working example is available on request.

bye, Dani

--- Sqed/32 1.14/r01354
* Origin: Nachtigall/2,Nuernberg/Ger,+49-911-861319,Z19+ISDN (2:2490/2575.2)
SEEN-BY: 633/267 270
@PATH: 2490/2576 1050 2001 2410/200 2432/200 2433/1200 225 270/101 341/130 14
@PATH: 261/38 123/500 106/2000 633/267

SOURCE: echomail via fidonet.ozzmosis.com

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.