This is file: 06_94QA.TXT

This file contains questions asked of the Driver Development Support Center
(DDSC) and the answers given to that particular question.  Entries are
appended to the top, so the most recent entry is available first.

Each entry starts with a header line that has a KEY WORD (or words) included
to allow the reader to "search" on KEY WORDS of particular interest.  Each KEY
WORD starts with the exclamation point character (!).  This allows for search
arguments that will limit matches to the header lines.

The following KEY WORDS are supported in this file.

KEYWORD                      DEVICES/TYPES OF QUESTIONS
===========   ==========================================================
!BASE         Loader, Memory Management, Strategy/Architecture
!I/O          Serial/Parallel, Pointing Device, Trackball, Keyboard, Pen
!MULTIMEDIA   Motion, Sound
!NETWORK      LAN,
!OTHER        PCMCIA, APM, Miscellaneous
!PRINT        Printer, Scanner
!STORAGE      DASD, SCSI, Tape, CD-ROM, ASPI, IFS
!VIDEO        VGA, SVGA, XGA, 8514, Display
**********    Entry separator (10 *'s)
==============================================================================

!OTHER__________________________________**********
June 27, 1994
QUESTION: (Ref: D03)

I have a character device driver that is packaged with a block device driver.
The sole purpose of the character mode driver is to provide a custom API into
the block driver.  The strangeness is that I continually recieve GIO packets
at the character driver that I do not expect.  I have declared my own category
as 0xAC and my own functions.  I keep getting Cat=05 Func=0x48 (Activate Font)
GIO packets whenever I do an open from my test program.

ANSWER:

With a Character Device Driver, the System cannot tell if this supports a
Printer or not.  So, the Set Font calls are done to ALL character device
drivers.  You should ignore these and respond with ERROR_NOT_SUPPORTED.





!I/O____________________________________**********
JUNE 27, 1994
QUESTION: (Ref: D02)
I wish to get performance characteristics on the OS side for my driver for an
IBM channel application.  The performance traces would tell me exactly where
certain bottlenecks occur, taking just about a millisecond time where it
should have been microseconds.  The time breakup was found using a channel
analyzer.  However, we do not know what is eating up time in the driver for
each bottleneck point.  We cannot use a 32-millisecond granularity timer.
Therefore, is there any way from a physical device driver to access the
hardware clock, having microsecond granularity?


ANSWER
Currently there is no way of getting Microsecond resolution with the OS/2
timer.

The only way to get timer interrupts faster than 32milliseconds is the use a
hardware timer card that supplies interrupts at a faster rate, and provide a
physical device driver to field the interrupts thru DevHelp_SetIrq.device




!BASE_______________________**********
June 27, 1994
QUESTION: (Ref: D01)
I am working on a device driver that will have a user defined GIO interface as
well as the standard Disk IOCTL interface.  I'm having difficulty determining
which DevHelp calls to use to lock the packet memory.

The previous version of the driver that I'm working on used the Lock/Unlock
pair for both the standard and custom I/F's.  The DDK source code for the DASD
driver uses VMLock/VMUnlock.  In the latest PDD on-line reference (DDK V1.2)
the remarks section of Lock say not to use it for GIO calls because of
something about a temporary selector.

What are the differences between the Lock/Unlock and VMLock/VMUnlock pairs and
when should each be used?


ANSWER:
The Lock DevHlp is a "16-bit" lock.  VMLock is a "32-bit" lock.  They both pin
the memory into physical RAM.

DevHlp_Lock issues the equivalent of a VMLock inside the kernel and stores the
(12 Byte) lock handle on behalf of the caller.  If you need to lock an object
>64 KB you should issue a DevHlp_VMLock.  Note, however, any lock for objects
>64KB must be done in-place, i.e.  you cannot force objects >64KB to reside in
contiguous memory.

DevHlp_Lock, is used to properly run old 16 bit apps, must make memory
contiguous, not just lock all of the pages (very expensive operation).  If you
choose to use the DevHlp_VMLock call, you get returned a pagelist which can be
used to get a GDT selector to access the memory from any context in the DD
while the task that allocated the memory can access the memory with no
knowledge that it is locked.  (See the 2.0 PDD ref for VMLock and
PageListToGDT).




!OTHER__________________________________**********
June 27, 1994
QUESTION: (Ref: C76)
I need the specs for the new pmi 2.2.  Can you send this, if it exist?


ANSWER:
The PMI 2.2 is not yet available for distribution as of 6/25/94.




!BASE___________________________________**********
June 27, 1994
QUESTION: (Ref: C35)
I would like to know if there is a way for a VDD to know when a Win-OS/2 full
screen session is starting.


ANSWER:
There currently is no service provided that allows a VDD to determine if a DOS
session is a Windows fullscreen session or not.  There is a service that
allows a VDD to be notified when a DPMI application enters protected mode
(VDHInstallUserHook using VDM_BEGIN_VPM_TASK).




!I/O____________________________________**********
June 27, 1994
QUESTION: (Ref: C34)
We will be developing a new mouse driver for OS/2 2.1 and we wish to write it
in C. The mouse source code provided with OS/2 in the Device Driver Source Kit
Version 1.2 is written in Assembler.  Is there a new version of this driver
which is written in C ???  If so when will it be out??  Will it be provided
with the next version of the source kit?


ANSWER:
All mouse source is in SRC\DEV\Mouse directory in the DDK.  All the source
files are in assembly and they will be in assembly for a while.  We are not
going to ship the C source in the next version.




!VIDEO__________________________________**********
June 21, 1994
QUESTION: (Ref: C88)
I have a seamless driver problem.  I run any application in the WIN-OS/2
Groups, if I select any menubar, first, the menu bar is reversed, second, the
display message box gives the following:

                        CLOCK
            An error has occurred in your application.
            If you choose ignore, you should save
            your work in a new file. If you choose
            Close, your application will terminate.

                  "  OK  "       " Ignore "

1.> If I selected "OK", and display another message box,


                Application Error
            CLOCK caused a General Protection
            Fault in module GDI.EXE at 0016:131C.

            Choose OK. CLOCK will close.
                     "  OK  "

      I select "Ok". CLOCK is closed.


ANSWER:
Implement Seamless DEV ESC 6010, SEAMLESS_PAL_INIT.  This is defined in the PM
Display Driver Reference.  RC_PALETTE is required for Windows to recognize the
driver as palette capable (256 color).  WINShield depends on valid data from
the SEAMLESS_PAL_INIT DEV ESC to understand this also, and intercept
SetPalette functions correctly.  It uses a flag in the returned data structure
(bfPaletteIsFixed) for this.  It also get a pointer to the PM HWPalette....
rather important since both seamless windows and PM are sharing the same
palette.

Other Seamless DEV Escapes are:

        6000  SEAMLESS_ESC_INIT
        6001  SEAMLESS_ESC_EXIT
        6002  SEAMLESS_ESC_ENABLE




!I/O____________________________________**********
JUNE 21, 1994
QUESTION: (Ref: c85)
When interrupts occur in protect mode and Interrupt Descriptor Table (IDT) is
used to dispatch the interrupt.  The IDT can specify up to five different gate
types for the IDT:  Task gate, 16-bit (80286) interrupt gate, 16-bit (80286)
trap gate, 16-bit (80386/80486) interrupt gate and 16-bit (80386/80486) trap
gate.

Which type of gate for the IDT does OS/2 2.x use?


ANSWER:
A significant function of the 80386 processor is its ability to support a
multitasking environment.  While much of the multitasking support in the 80386
is similar to that provided in the previous 80286 family, multitasking will be
discussed here for those who may not be familiar with its implementation.

In a multitasking system, when one task is suspended and control is passed to
another, the processor state must be stored so that when the suspended task
regains control, it may resume normal operation where it left off.

The 80386 processor architecture defines a special type of memory structure
known as a Task State Segment (TSS).  The processor uses a specific fixed
format to store task-related control information in the TSS, in order to
provide high-performance task-switching operations with complete isolation
between tasks.  A separate TSS is maintained for each task in the system.
Each TSS contains:

General registers (EAX, ECX, EDX, EBX, ESP, EBP, ESI, and EDI).

Segment registers (ES, CS, SS, DS, FS, and GS).

Flags register (EFLAGS).

Instruction pointer (EIP).

Selector for the TSS of the previous task.

Selector for the task's LDT (static).

Logical addresses of the stacks for privilege levels 0, 1, and 2.

The T-bit (debug trap bit).

Base address for the I/O permission bit map.

A special segment descriptor is used for each TSS, and appears only in the
system's Global Descriptor Table (GDT), since TSSs are not available to
applications.  The Task Register always contains a pointer to the TSS for the
current task.

Task switching may occur as the result of either an interrupt or of executing
an instruction that explicitly transfers control.  A task switch may be
achieved in one of four ways:

The current task executes a JMP or CALL to a TSS descriptor.

The current task executes a JMP or CALL to a task gate (a special type of
segment descriptor).

An interrupt or exception indexes a task gate in the IDT (Interrupt Descriptor
Table).

The current task executes an IRET instruction with the NT (next task) flag
set.  The selector for the previous task is always stored in the current TSS,
thus providing the means to return control to the previous task.

During the task switch operation, the processor saves the contents of the
current registers in the TSS of the current task.  The selector of the next
TSS is then loaded into the Task Register.  This selector references an entry
in the GDT, which contains the physical address of the TSS.  The values in the
TSS are then loaded into the processor's registers, and control information is
loaded into the segment registers from the GDT and the process's LDT.  The
processor is then ready to continue execution of the new task.

To create a new task, the operating system initializes a TSS to the
appropriate initial values.  The operating system then determines when to
start the task, and accomplishes this by simply switching from the current
task to the new one.

OS/2 V2.0 only makes minimal use of the TSS mechanism.  The use of the flat
memory model and the way in which OS/2 V2.0 implements paging makes a large
part of the data stored in the TSS redundant.  Consequently OS/2 V2.0
implements its own task switching model which optimizes switches between
threads in the same or different processes.  Also allocating a TSS for each
thread in the system would use a large amount of storage.  OS/2 V2.0 uses a
single TSS for effecting transitions between the different privilege levels,
at which tasks present in the system run.  Privilege levels are described in
Privilege Levels.




!MULTIMEDIA_____________________________**********
JUNE 21, 1994
QUESTION: (Ref: C75)
We are developing a MMPM/2 audio physical device driver.  We need to access
I/O port for our hardware audio card.  We use _outp() function ( Microsoft
C6.00 standard library).  This function does not work after INIT.

Can we use standard C library in a PDD?

In the IOCTL_INIT section of my Audio PDD, outp() function is good. In the
IOCTL_OPEN section of my Audio PDD, outp() function make a GP fault (outp() is
the Microsoft C6.00 standard library function).

  pcxpdd:CGRP:_outp:
  09a3:00002548 55             push    bp
  09a3:00002549 8bec           mov     bp,sp
  09a3:0000254b 8b5604         mov     dx,word ptr [bp+04]
  09a3:0000254e 8b4606         mov     ax,word ptr [bp+06]
  09a3:00002551 9a040027bf     call    bf27:0004
  09a3:00002556 8be5           mov     sp,bp
  09a3:00002558 5d             pop     bp
  09a3:00002559 c3             ret

  bf27:00000004 ee             out     dx,al
  bf27:00000005 cb             retf

Trap 13 (0DH) - General Protection Fault bf24, LDT
eax=00c80004 ebx=7b9d0002 ecx=0000000d edx=fff10008 esi=7b760002 edi=7b76000d
eip=00002551 esp=00006b12 ebp=00026b12 iopl=2 rf -- -- nv up ei pl nz na po nc
cs=09a0 ss=0030 ds=0980 es=04b0 fs=0000 gs=0000  cr2=1a2553e8  cr3=001d3000
09a0:00002551 9a040027bf     call    bf27:0004


ANSWER:
You cannot use the Microsoft C runtime function outp.  You shouild write your
own assembler routine (based on out instruction) yourself.  Examples can be
found in the DDK.




!STORAGE________________________________**********
June 21, 1994
QUESTION: (Ref: C74)
IDE ATAPI CD-ROM is a new standard. Would you tell me what is IBM's plan for
supporting IDE ATAPI CD-ROM in OS/2 2.xx?.


ANSWER:
Our plan is to support the new CDROM ATAPI in the next release of OS/2
scheduled for this fall.  Beta releases of the ATAPI code will be available in
the next beta release of the new OS/2 for Windows.  We expect to have one
driver that supports all of the vendor implementations.  This is similiar to
the way disk drives and SCSI CDROM drives are supported today.




!MULTIMEDIA_____________________________**********
June 21,1994
QUESTION: (Ref: C73)
Technical question about developing a MMPM/2 audio physical device driver We
begin to develop a MMPM/2 Audio PDD.  This driver will manage fully the IDC
interface with an Audio Stream Handler Device Driver.  We build a little test
application making

      DosOpen    ("AUDIODD",&driver_handle,...
      DosDevIOCtl(driver_handle,AUDIO_IOCTL_CAT,AUDIO_INIT,...
      DosClose   (driver_handle);

This works fine:  we receive the AUDIO_INIT command in the Audio PDD.

BUG:
But we also receive, just before the AUDIO_INIT command, an :  ACTIVATE_FONT
on PARALLEL PORT command ( category_code=05h, function=48h) It seems that the
DosOpen generate this strange Call.

Why do we receive such a command?
Where does it come from?
Is it normal?


ANSWER:
The printer IOCTL the driver receives is NORMAL.  The kernel generates this
IOCTL, your driver should ignore this IOCTL and ANY other IOCTL that your
driver does not know how to handle.




!BASE_______________________**********
JUNE 21, 1994
QUESTION: (Ref: C06)
I am currently developing some software that includes a device driver and code
that uses DosDevIOCtl to call the device driver.  Some of our customers are
still using OS/2 1.3 and we would like to be compatable with 1.3 and 2.1.  The
problem that I have run into is that the prototype for DosDevIOCtl has changed
dramatically from OS/2 1.3 to OS/2 2.x.

Here is my question.  How can I use this API call in both versions of the
operating system?  Below are the two different API prototypes.

OS/2 1.3
   DosDevIOCtl (PVOID pData, PVOID pParms, USHORT usFun,
                  USHORT usCategory, HFILE hDev);

OS/2 2.1
   DosDevIOCtl (HFILE hDevice, ULONG category, ULONG function,
                  PVOID pParams, ULONG cbParmLenMax,
                  PULONG pcbParmLen, PVOID pData, ULONG cbDataLenMax,
                  PULONG pcbDataLen);


ANSWER:
OS/2 1.3 is only 16 bit Operating System and OS/2 2.1 is a 32-bit OS.  So, if
you want to implement a 16 bit application and want to support both OS/2 1.3
and OS/2 2.1 then you should use DOSDEVIOCTL function from OS/2 1.3, and this
should work in OS/2 2.1.




!STORAGE________________________________**********
JUNE 21, 1994
QUESTION: (Ref: C01)
I am developing a DD for a CDROM recording machine (by the moment the PHILLIPS
CDD-521).  I have already made the ADD interface to use this machine as a
CDROM reader and all the base routines to make te recorder work as a 'raw'
recorder of data on CD-R, but I can't find infos (detailed) on the ISO-9660
formatting to make the recorder work as a true WORM device.

I am also interested on 'rockridge extensions' to implement CD-XA based
multisession recordings.  Can you help me?  (I think that the guy that has
written CDFS.IFS should have a good include file to start with...).


ANSWER:
If you are looking for detailed info on ISO-9660 specs, I was able to track
down two phone numbers.  The first number is 202-626-5738 (Administration
Standards Processing).  The other number is 212-642-4900 (American National
Standards Institute).  When you call that number, hit the #1 key twice to be
connected.  You should be able to receive the ISO-9660 specs from either of
these two numbers.

As far as the "rockridge extensions", I was not able to come up with much
information.  Unfortunately, we can not provide a copy of the cdfs.ifs include
file due to legal reasons.




!STORAGE________________________________**********
JUNE 21, 1994
QUESTION: (Ref: B71)
I need some confirmation with regards to the OS2DASD manager.  We are testing
our SCSI ADD driver with an HP Magneto Optical drive with a sector size of
1024 (as oppose to 512 bytes per sector).

I would like to find out if the OS2DASD manager supports optical drives with
non-standard sector size.  Right now, I am getting a page fault during
initialization.  I suspect the DASD manager do not support sector sizes >512.


ANSWER:
The OS2DASD.DMD has a limit of 512 sector sizes.  This is because the 512
bytes sector is the limit that the OS/2 file system supports.  The OS/2 2.1
STORAGE DEVICE DRIVER REFERENCE MANUAL states this.




!OTHER__________________________________**********
June 21, 1994
QUESTION: (Ref: B55)
I would like to know if there is a seamless debug interface and how it is
used.


ANSWER:
The best information that we have regarding Debug Out can be found in the
Display Device Driver Reference on the DDK (or the Display Device Driver
Reference for OS/2 Manual, part numbmer S71G-1896 orderable thru Software
Products & Books at 800-879-2755).  Either of these references explains how to
introduce debug statements in the code.  Please search on "debug".




!VIDEO__________________________________**********
JUNE 21, 1994
QUESTION: (Ref: B40)
We have a requirement to be able to alias (raise) 32-bit code from ring 3 to
ring 2 in a OS/2 PM Multi-Display driver we are developing.  WE support two
displays by loading the two display drivers for the adapters below us.  This
worked fine in a 16-bit version of the driver, but in the 32- bit version we
have to contend with the 'child' drivers requesting to be called at different
ring levels in the OS2_PM_DRV_ENABLE_LEVELS and OS2_PM_DRV_RING_LEVELS tables
they export.

Could you please suggest what would be the best way to achieve this.  I am
using DDK ver 1.1 and OS/2 2.1.


ANSWER:
The solution to this problem is to update the OS2_PM_DRV_RING_LEVELS and
OS2_PM_DRV_ENABLE_LEVELS tables at DLL initialization time.  This is done by
loading all of the child drivers and merging their tables.  The merged tables
will contain the highest ring level required across the child drivers for each
entry.  In this way, the Graphics Engine will handle all transitions from ring
2 to ring 3, and your parent driver will only have to handle the remaining
transitions from ring 3 to ring 2. The code necessary to make 32-bit ring
transitions can be found in 32CALLBK.ASM in the PMGRE32 subdirectory.




!MULTIMEDIA_____________________________**********
June 13, 1994
QUESTION: (Ref: C57)
Technical question about developing a MMPM/2 audio physical device driver.
I want to develop a Character PDD with up to 16 devices.  So I have 16 devices
headers:  DEVHDR DevHdr[16]={{..},{..},{..},...}

Can I initialize several devices with only one line in the Config.sys like:

Device=AUDIODD.SYS /number_of_device_to_init=7 (for 7 devices)

Or must I have as many lines as devices in the config.sys like:

          Device=AUDIODD.SYS     (1st device)
          Device=AUDIODD.SYS     (2nd device)
          Device=AUDIODD.SYS     (3rd device)
          Device=AUDIODD.SYS        ...
          Device=AUDIODD.SYS
          Device=AUDIODD.SYS
          Device=AUDIODD.SYS     (7th device)


ANSWER:
Yes, you only need ONE statement in the config.sys, but do NOT add the header
parameter as shown in your example.  You only need to have: device=AudioDD.sys.
The OS/2 Loader will automatically call your device driver during boot
(initialization) for EACH and EVERY header that is declared within the data
segment of the driver.

Refer to the toolkit AudioDD sample, where there is a demonstration of a driver having
two headers declared.  And also look at the auto-number logic to support more
than 1 physical adapter.

NOTE: Ensure that each header is chained together!




!STORAGE________________________________**********
June 13, 1994
QUESTION: (Ref: C27)
My confusion is regarding the Scatter/Gather capability outlined in the
"Storage Device Driver Reference for OS/2."  Is this a requirement for all
ADDs or just DASD related ADD's?

In describing the bit settings for the Adapterinfo Structure the Adapter Flags
Table 20 (Page 29) of "Storage Device Driver Reference for OS/2" contains the
following:

"AF_HW_SCATGAT   Hardware scatter/gather.  If set this flag indicates
                 that hardware supports scatter/gather.  If this flag
                 is not set, it indicates that the device driver
                 is emulating the s/g function in software."

My hardware does not support s/g.  I am thinking that s/g may not apply to my
Device Driver either.  But I see indirect references like the above that
suggest if my hardware doesn't do s/g, then my ADD must emulate s/g.  Is
avoiding s/g emulation possible?  Is it worth avoiding s/g emulation?


ANSWER:
All adds must support S/G.  There is a routine to emulate S/G support in
software ADDCALLS(ADD_XferBuffData) for adapters that do have S/G support in
hardware.  Refer to src\dev\dasd\ibm\ibm2adsk\adsksm.c for a usage example.




!OTHER__________________________________**********
June 13, 1994
QUESTION: (Ref: C25)
At the OS/2 Developer's Conference in the PCMCIA meeting the IBM reps talked
about a Super Client Driver which could be used to recognize PCMCIA modems by
simply adding certain information to a configuration file.  They also
indicated that it was somewhere on this system.  I have been unable to find
it.

Could you please tell me where it is and how I can download it?


ANSWER:
The super client driver and configuration file which you are talking about
were released just recently in the OS/2 Performance Beta Version 2.99.  This
release is available on a CDROM only, and can be purchased for $14.95 by
calling 800-251-2177.

Currently they are not uploaded to any BBS, so this is the only source.

When OS/2 is installed, the following are the files which you are requesting:

  OS2\PCMCIA\AUTODRV2.INI    =>  configuration file
  OS2\PCMCIA\AUTODRV2.SYS    =>  super client driver




!BASE___________________________________**********
June 07, 1994
QUESTION: (Ref: C20)

Is it possible to obtain a physical address to set up a DMA transfer without
creating a device driver.

ANSWER:

The answer is NO, only device drivers can obtain the Physical address of a
piece of storage, Only device drivers can do the Lock of the memory prior to
the DMA, and only device drivers can receive the DMA complete interrupt..





!STORAGE________________________________**********
June 13, 1994
QUESTION: (Ref: C11)
We have a device driver that runs HPFS on optical drives.  When copying files
with that driver with the HPFS that comes with the 2.1 Service Pak HPFS gets
into a hard loop effectively hanging the system.  When using the 2.1 HPFS with
a system that otherwise is using all Service Pak programs everything is fine.
We've been using this driver since 1.2 and have only experienced problems with
the HPFS that came with the 2.0 Service Pak.  It had some bugs dealing with
Strategy 1 drivers.  This could be a strategy 1 problem, but maybe not.

Telling customers to go back to the regular 2.1 HPFS isn't going to be
popular.  Using a trace in the kernel debugger of the hang, it seems that a
thread from CACHE.EXE, which is doing lazy writing is causing the problem.
Perhaps you can help determine why the thread is never giving up the CPU.
I've pretty much verified this by turning off lazy write caching and not
experiencing any problems.


ANSWER:
The problem has been corrected by using a new build of HPFS.IFS.  APAR PJ14380
has details on this problem.




!I/O____________________________________**********
June 13, 1994
QUESTION: (Ref: C08)
I have a question about mouse IDC.  Mouse device-dependent IDC interface has a
Query_Config function.  And I think mouse.sys calls touch panels
device-dependent drivers as Query_Config.  So Touch device-dependent drivers
should use the Config_Data structure.

My customers touch panel device is trying to use serial port.  So, what values
should the device dependent DD return in Config_Data for mouse_type and
com_num?

I think that mouse_type = 2 and com_num=1.  Is this correct?


ANSWER:
After going through the mouse code and IDC interface I found out that the
mous_type = 2 is correct for serial device.  So, what the customer is doing is
correct.  He can also verify this if he has the DDK source and online
documentation.




!VIDEO__________________________________**********
June 13, 1994
QUESTION: (Ref: C02)
Part of my VDD needs to intercept dos int 21 calls.  I can interecpt other dos
int calls, (ie 41,6x,etc) but not 21.  I assume that os2 process this call
itself, and does not pass on to vdd that have registered a interest in dos int
21 via VDHInstallIntHook.  I was going to try and use the VDH_PRE_HOOK to see
if I could grap the int before os2, but this value is not defined in the
header files.


ANSWER:
Your assumtion about OS/2 not passing INT 21's to the VDD is incorrect.  You
can define VDH_PRE_HOOK in say v8086.inc as the constant 2. You would need to
add a statement VDH_PRE_HOOK EQ 00000002H in the include file.

There is also an article, "Converting Real Addresses to Virtual Addresses in
OS/2 2.x", in the OS/2 Developer magazine, September/October 1993.  This
article should help you.




!OTHER !VIDEO___________________________**********
JUN 13, 1994
QUESTION: (Ref: B82)
I need to write an installation program to install a couple of the OS/2 video
drivers and a NEC APM driver. Can you point me into the right direction where
I can start to look for information on how to do that?


ANSWER:
Review the Display Device Driver Reference manual.  There is a section on
creating a Display-Driver Installation Package.  Also, the Physical Device
Driver Reference manual has information on the Installation of External
Loadable Device Drivers.  The DDK has on-line documentation on both these
subjects.




!BASE !STORAGE__________________________**********
June 13, 1994
QUESTION: (Ref: B60)
I have two question regarding the OS/2 AT IDE driver...

1) Does OS/2 ever issue a READ/WRITE command aborting the pervious
   READ/WRITE command, i.e. before the previous READ/WRITE command's
   data has been Transferred?

2) Does OS/2 support power commands, i.e. Stand-by, sleep.

2a) If OS/2 does support power commands. What is the time out period for a
    drive to come ready from stand-by? (IRQ time out?)
ANSWER:

1)  When a read write is started it has to complete its task until it is done.
    So it will complete its read/write and then start a new one when the first
    one is complete.

2)  The only time out or sleep would be in the IDE code waiting for the .ADD
    TO COMPLETE it's task.  You can view the IDE source code that is on the
    DDK DEVICE DRIVER CDROM kit.

2a) As for a Power Command the IDE device driver would have this in it.




!BASE___________________________________**********
June 13, 1994
QUESTION: (Ref: B48)
I am having problems with the physical address reurned by DevHelp_AllocPhys.
I need to get a 64K boundry for our hardware.  The HW then uses the A23-A16
page address and controls the DMA as a master in cadcade mode on channel 5.
Until I find a better way, I am allocating 128K and adjusting to 64K boundry.


ANSWER:
You must use two chunks of 64k (16:16 format).




!OTHER__________________________________**********
June 06,1994
QUESTION: (Ref: C37)
Can you tell me where I might find the 16-bit ASDT debugger?


ANSWER:
I do not know of any ASDT16 Kernel Debugger. Use the 1.3 kernal debugger
instead. It is much easier to solve device driver problems.




!STORAGE________________________________**********
June 06, 1994
QUESTION: (Ref: C21)
At one time I was able to use OPTICAL.SYS to use my Pioneer optical drive as a
hard drive.  I can't find OPTICAL.SYS on my system anymore.  Did it go away
with 2.1?

I have the original 2.0 diskettes, but don't know where or which disk
OPTICAL.SYS is on, or if I should even try to use it.


ANSWER:
OPTICAL.SYS is not shipped with OS/2 2.X.  This driver is shipped with the
hardware product.  But, a driver can be downloaded from the IBM BBS
(919-517-0001).  The file is called 21OPTCL.COM and is a self-extracting file.




!I/O____________________________________**********
May 19,1994
QUESTION: (Ref: C13)
I'm using the OS/2 DDK cdrom that contains Lpen support code for a digi pad.
I can't compile the sample PENCAL subdirectory C examples. PENPM.H is non-
existent. Where do I find it? It's not in the DDK or C++ C set. Is it here? I
hope so.


ANSWER:
Look on the DDK, under the "Using Your DDK" icon.  Go to "Components and Build
Requirements" and search for "Pen".  The needed information is documented in
here.




!I/O____________________________________**********
June 06, 1994
QUESTION: (Ref: B95)
I have question about touch panel systems.  I want to use mouse drivers (mouse
idc function).  The PDD manuals describe that an absolute device should use
the Process_Abosolute command.

A Parameter of the Process_Abosolute command is EVENT_DATA . But EVENT_DATA
structure EVENT_DATA.EVENT (DW VALUE) mean mouse event information.

But this value's bit information was described in OS/2 DDK mouse.inc.  But I
do not understand.  Please explain the bit information.

 EVENT_DATA
    EVENT    DW   <---This value is bit information.
    Row_Pos  DW
    Col_Pos  DW
    Row_Size DW
    Col_Size DW


ANSWER:
The field, "Event" in the Event_Data structure defined in the Input/Output
Reference on page 50, is used to pass the button status through the IDC.  It
is defined in the Input/Output reference on page 52 in the Output section area
called Mouse Activity Status which contains the definition of bits 0-15.




!OTHER__________________________________**********
June 06, 1994
QUESTION: (Ref: B86)
I'm looking for help to write an OS/2 driver to support the standard IBM PC
SDLC Communications Adapter.  It seems to be a pretty straightforward request,
but it's hard to get any information regarding the hardware parameters I need
to write the driver.  I know Communications Manager/2 exists so I shouldn't
have to write the driver -- but I want to be able to get to the SDLC frames
myself.

In the IBM BBS there's a downloadable file which claims to be an OS/2 driver
for SDLC.  But it's just an .EXE (no sources), it looks more like a DOS driver
to me, and in any case it doesn't work.

So can anybody give me a tip how to continue in this search (there isn't a
clue about SDLC driver in the DDK CD).


ANSWER:
As of this date there isn't an API through CM to get into the SDLC protocol
driver and bypass SNA.

There isn't a user friendly document that describes how to program to the
SDLC/MPA adapter interface.

The only document available is the IBM Multiprotocol Adapter/A Technical
Reference (S85F-1643-00).




!OTHER__________________________________**********
June 06, 1994
QUESTION: (Ref: B42)
I heard a rumor that there is a 32-bit Physical Device Driver kit available
from IBM that will allow the development of true 32-bit device drivers.  Is
this true?


ANSWER:
There are no 32bit PDD kits.



=================== Administrative Stuff ===================
________________________________________**********
June 27, 1994
