This is file: 04_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)
==============================================================================

!PRINTER________________________________**********
April 21, 1994
QUESTION: (Ref: A84)
We are having a problem with the spooler when we create many (11) printer
objects using our printer driver.  The spooler returns an error 2165 from
SplCreateQueue.

This is an out of memory error.  Our printer properties data structure
is fairly large but we feel it is necessary.

1) When will the Spooler be converted to 32 bit?

2) Are there work arounds that we could do to allow more objects to be
   created.


ANSWER:
1) There is a plan for the spooler to be converted to 32-bit in a future
release.  We cannot commit to any specific date or release, but it will most
probably be in a future major release of OS/2 vs. a service pak or memory
reduction release.

2) You might want to re-think your usage of "drivdata".  There are printer
properties and job properties associated with a print destination.

Printer properties describe the physical features of the printer (amount of
memory, fonts available in the printer, forms and the tray they are connected
to, type of compression to use, etc).

This information (today) is set through a print object opening the settings on
a printer driver, and the printer driver should store any info changed by the
user in the OS2SYS.INI file under application name "PM_Printer,Driver.Device
Name".  This can get to be a somewhat large amount of data.

Job properties, on the other hand, only change things on a per job basis (like
orientation, default font to use, form selected, resolution, etc).

This information is changable though another printer driver dialog, which is
accessed through the print object's job properties button, or by a PM
Application's "Printer setup" button.  This data is stored on a per job basis,
and is contained in the DRIVDATA structure that is used with
DevPostDeviceModes() and DevOpenDC().  This should not be a large amount of
data, because the spooler that exists in OS/2 today has a limit on the amount
of memory it will allocate (each print queue defined has a set of default job
properties associated with it.  The total amount of spooler heap available for
print configuration is about 56KB, and the print driver in question uses
almost 50KB of this just for defining 11 print queues.

Another reason to limit the size of DRIVDATA structure used by the printer
driver is because today's spooler stores all the print job information in
memory (not the same heap as mentioned above, but for 100 jobs it will use
448400 bytes of RAM just for drivdata for spooled jobs).

We are aware of the limitations of the existing print spooler, but changing it
will not help the installed base for which you are targeting your printer
driver.  For the short-term, we suggest that you try to move some of the
printer configuration info from the DRIVDATA structure into the printer
properties entry listed above.  If unable to reduce this, the only other
solution is to limit the number of print queues your customers should define.




!STORAGE________________________________**********
April 21, 1994
QUESTION: (Ref: B11)
Q1. I am working on BIOS code that will interface with an OS/2 device driver
    and would like to know a few things about scatter/gather lists generated
    by OS/2.

    The first question I have is if the lists will have odd byte lengths
    embedded in the lists, and if so will this happen very often?

    The second one pertains to the overall size of the lists, the number of
    bytes total to be transferred to complete the list?

    I am working on SCSI wide device support and am in need of this
    information to know how and if I need to worry about odd byte transfers on
    a 16 bit data bus.

A1. Since the same question may be asked in various ways, we maintain files
    that contain previously asked questions and answers.  These files are
    available in the MAIN file area.  We ask that, prior to submitting a
    question, our customers download these files and review them to see if
    their question has already been asked.

    I did a scan on these files and found multiple scatter/gather questions
    and answers.  I am asking that you download the files listed below, review
    them (search on "scatter" or "S/G"), and see if you can find an answer to
    your questions.  Even if you don't get the specific answer to your
    question, I'm sure you find useful information pertaining to S/G.

    The files are:

          QUESTION.ZIP
          11_93QA.TXT (or .ZIP)
          12_93QA.TXT (or .ZIP)
          01_94QA.TXT (or .ZIP)
          03_94QA.TXT (or .ZIP)

    If you don't find what your are looking for, please do not hesitate to
    come back to us and we will go after the answer.
==============================================================================

Q2. Thanks for the suggestion of browsing through the existing data base of
    questions for info on scatter/gather questions, there was a lot of
    valuable info there.  But I did not see anything that dealt with the data
    length variable.  They seemed to deal with overall size of the list and
    whether the alignment of the address portion of the list.

    I need to know if the data length portion of the list will ever be an odd
    size or if it will always be asking for an even byte transfer.

A2. I hope I understand what your customer is looking for.  If he wants to
    know about the IORB_EXECUTEIO Description block I have listed a
    description of the information he may need below.

     cSGLIST     USHORT             WD   IORB Header
     pSGLIST     PSCATGATENTRY      DD   Number of elements
    ppSGLIST     ULONG              DD   Far pointer to s/g list

    The rest of the list can be seen in the Storage Device Driver Reference
    book, page 41.

    I not sure I know what you are asking regarding the question of ODD
    transfer on a 16 bit bus . I don't think you have to be concerned about
    this because the transfer is a 16 bit transfer.  Or, are you asking is the
    pointer an odd number that will not point to the correct address.  In
    either case, I don't think you have to be concerned about this.


    I would also ask that you reference Mastrianni's Book "Writing OS/2 2.1
    Device Drivers in C".  On page 183 and he talks about the transfer and the
    blocks and how they are being transferred.
                   ====================================

    I have a few of my own comments to add here.  The information refered to
    in the Storage DD book can be found on the CD-ROM version under "DASD,
    SCSI, and CD-ROM Device Manager Interface Specification", IORB CommandCode
    Format, IOOC_EXECUTE_IO.

    I am including page 183 of Mastrianni's book in case you don't have it.  I
    am also including another page that was listed in the contents under S/G.
                   ====================================

    PAGE 183
    The Extended Device Driver Interface, EDDI, is a new interface developed
    to take advantage of a new generation of intelligent disk controllers.
    These new disk controllers are capable of handling transfers to and from
    discontiguous memory areas.  Although EDDI is intended for disk drivers,
    other types of device drivers can also utilize EDDI.

    EDDI improves performance by allowing multiple, prioritized requests to be
    submitted to the device driver at the same time.  Instead of the standard
    synchronous Request Packet, the EDDI driver is sent a Request List of
    commands, which it can reorder to provide maximum performance.  The Read
    and Write operations use scatter/gather descriptors (SGDs), which allow
    for data transfer to and from discontiguous data buffers.  The driver does
    not need to block waiting for the request to complete, but returns
    immediately.  The actual transfer is usually completed by the disk adapter
    hardware.

    The ability to handle transfers to and from discontiguous memory is more
    efficient in a system such as OS/2 2.1, which utilizes the 4KB paging
    functionality of the 80386 and 80486 processors.  Data buffers to be
    written to or from the device driver are normally partitioned into 4K
    pages, and are not necessarily contiguous.  EDDI requires that the device
    driver contain a second Strategy routine in addition to the normal
    Strategy routine in an OS/2 device driver.  The new extended Strategy
    routine is also called the Strategy 2 or scatter/gather entry point.
                        ===============================

    PAGE 194
    The format of these requests is described in Examples 12-5 and 12-6.

        typedef struct _SGD {
           PHYSADDR BufferPtr;
           ULONG    BufferSize;
           } SGD;

    Example 12-5.  Scatter Gather Descriptor structure.

        typedef struct _READWRITE {
           REQUESTHEADER ReadWriteHeader;
           ULONG         StartBlock;
           ULONG         BlockCount;
           ULONG         BlocksXferred;
           USHORT        Flags;
           USHORT        SGDescrCount
           ULONG         Reserved;
           SGD           Sgd[SGDescrCount];
           } READWRITE;

    Example 12-6.  Read/Write Request structure.

    The StartBlock is the string disk block for the data transfer.  A disk
    block is defined as a 512-byte logical disk sector.

    The BlockCount is the number of 512-byte blocks to be transferred.

    The BlocksXferred is the number of blocks that have been transferred at
    the time that the notification routine was called.

    The Flags field currently uses only the two least significant bits.  All
    other bits are set to 0. If bit 0 is set, it specifies write-through,
    defeating any lazy write.  If bit 1 is set, the data should be cached on
    the outboard controller cache.

    The SGDescrCount field contains the number of scatter/gather descriptors
    in the Sgd field.

    The Sgd field contains an array of scatter/gather descriptors.

    Read Prefetch Request

    The format of the Read Prefetch request is described in Example 12-7.

         typedef struct _READPREFETCH {
           REQUESTHEADER ReadPreHdr;
           ULONG         StartBlock;
           ULONG         BlockCount;
           ULONG         BlocksXferred;
           USHORT        Flags;
           USHORT        Reserved;
           } READPREFETCH;

    Example 12-7.  Read Prefetch Request structure.

    The StartBlock is the string disk block for the data transfer.  A disk
    block is defined as a 512-byte logical disk sector.

    The BlockCount is the number of 512-byte blocks to be transferred.

    The BlocksXferred is the number of blocks that have been transferred at
    the time that the notification routine was called.

    The Flags field currently uses only the least significant bit.  All other
    bits are set to 0. If bit 0 is set, it specifies that the driver should
    retain data in the controller prefetch buffers only until it has been read
    once.  This prevents redundant caching in the controller.
==============================================================================

Q3. I am wanting to know if the seperate entries in a scatter/gather list (
    the data xfer size ) is ever odd.  I am working on a wide SCSI application
    and need to know this to see if I have to handle a strange situation
    within our driver.

    The situation is this, our SCSI chip can be passed the individual scatter
    gather elements before xfer starts so the DMA can go on without any
    processor intervention.  Say the first element is to xfer 511 bytes and
    the second element is to xfer 513 bytes.  We're xferring wide on the SCSI
    bus so 2 bytes are being xferred at a time.

    Now suppose that the disk drive wants to disconnect after the first 512
    bytes of data.  Our chip will xfer the last byte (511) of the first
    element to its memory location and halt there because of the bus phase
    change with the 512th byte, the first byte of the second section in its
    register and I will have to place it in memory myself and update the xfer
    count.  This situation will only occur if the drive disconnects at the
    very end of a scatter/gather section and 1 byte is left over to go with
    the next section, meaning an odd byte count with the last section to be
    executed.

A3. The length can be odd or even.  Although it does not specifically say that
    in the Storage DD ref manual, the inferrence, by omission, is that it can.




!OTHER !STORAGE_________________________**********
April 21, 1994
QUESTION: (Ref: A81)
Q1. I'm new to OS2 Device Drivers.  I'm trying to write the FILTER DRIVER for
    DASD.  The problem I'm running into is that I must use the LARGE MODEL
    (both Text and Data Segments will be larger than 64K segment.  I went
    through the DDK docs and other OS2 Device Driver books, but I could not
    find information regarding the Large Model.  The OS/2 version is 2.1 and
    the DDK is 1.2.

A1. Since you are not very specific as to what you are looking for (I think
    documentation), here is what I have come up with from my technical
    contact.

    We assume you are using, or going to use, the Microsoft C compiler.  You
    will need to enter the following compiler switches to compile the large
    model:

                cl - lfw

    You will also need to link to LLIBCEP.LIB.

    For additional information, see the documentation with the C compiler.
    You can also enter CL/HELP on a command line.
==============================================================================

Q2. Thanks for the quick reply to the previous message.

    To be more specific, the immediate problem is that we can't get far
    function calls to a second code segment to work.  It looks like the second
    segment is not loaded.  The address in the call instruction looks like the
    offset is correct (matches the .MAP file), but the selector part does not
    match anything in the GDT, and the call fails (general protection fault).
    The segment is tagged with IOPL in the .DEF file.

    The driver we are trying to compile is a modified version of one of the
    filters included in the sample code of the DDK 1.2 set.

A2. My technical contact has provided the following answer to your question
    re:  the text and data segments larger than 64K:

    "There should be NO problem doing this.  Make SURE that no 'segment' is
    automatically broken up by the C compiler (use the /Nt compiler option to
    force some objects to a known name)..."




!OTHER__________________________________**********
April 21, 1994
QUESTION: (Ref: A71)
I am trying to locate copies of the LATEST versions of all the volumes in the
OS/2 Technical Library related to device driver development.  Currently I
possess the PDD and VDD References that were published in conjunction with
OS/2 2.0, but I know I saw several other volumes (i.e.  I/O Device Driver) at
the DD Conference in San Jose.  I also saw that the PDD and VDD References had
been re-released and possibly updated.

Unfortunately I have tried ordering the books through the IBM Book hotline and
they seem to only have information about the volumes I already possess.  Their
information indicates that I have the latest editions and this seems to
contradict what I saw in San Jose (before the books all sold out!!).

Do you have any more information on this?

I currently have a copy of the PDD and VDD with part numbers S10G-6266-00 and
S10G-6310-00 which were published in 1992.  It was my understanding that new
updates were being developed; do the part numbers you listed refer to the same
editions I already possess or are they the new updates?


ANSWER:
Your best bet to get the documentation is through the DDK.  You did not state
if you are a subscriber to it or not.  If you are, you should be receiving
version 1.2 within the next two weeks.  All of the device driver reference
manuals are on it (Display, I/O, MMPM/2, Printer, Storage, Pen).  Also, newly
added to v1.2 is the Physical Device Driver (PDD) and the Virtual Device
Driver (VDD) reference manuals.

If you wish to have these manuals in hardcopy, they are all available through
the same phone number you can order a DDK (71G3703) through (800-633-8266).
The part numbers of all the manuals are shown in the 'What's new' section of
the 'Using your DDK'book on v1.2 DDK.

If you want the hardcopy books w/o the DDK, the part numbers for the PDD and
VDD books are S10G-6266 and S10G-6310, respectively.  The last two numbers of
the document number (in your case, 00) are the sequence or version number.
You have the original documents.  When the newer level is available, the last
two numbers will be 01.  You can get the part numbers for the other DD
reference manuals by downloading the file DDKANNOU.TXT from the INFO file area
of the DUDE.

An additional note regarding the PDD and VDD manuals.  They may not yet be in
stock at the 800 number, but should be there in time for the Technical
Interchange scheduled for April 25th-29th.




!BASE___________________________________**********
April 20, 1994
QUESTION: (Ref: B12)
I am writing a physical device driver for OS/2 2.1, and have encountered the
following problem:

The application makes a DosDevIOCtl2 call to the driver and passes a list of
linear addresses to large ( >64k ) buffers which were allocated by the
application program.  In order to access the contents of such a buffer from
the PDD, it is necessary to break it up into 64k segments and create a 16:16
pointer to each segment.

I am trying to do this by allocating GDT selectors at init time with the
DevHlp_AllocGDTSelector function, then later using DevHlp_LinToGDTSelector to
create the 16:16 addresses.  However, the documentation for the
LinToGDTSelector function states, "The memory that is being mapped must be
fixed or locked prior to a call to this function."

I have been unable to find any DevHlp call that locks a memory region given
only its linear address.  The DevHlp_Lock function requires that you already
have a selector in order to lock memory.

My question is, therefore:  what is a procedure by which application buffers
exceeding 64k, passed to a PDD as linear addresses, can be accessed by the
PDD?


ANSWER:
I have been unable to find any DevHlp call that locks a memory region given
only its linear address.  The DevHlp_Lock function requires that you already
have a selector in order to lock memory.

You can use VMLOCK to lock the memory given the linear address.  You can look
in the Physical Device Driver reference for details for this call page 17-103
and 17-104).  The C interface for this call:

  #include "dhcalls.h"

  USHORT APIENTRY DevHelp_VMLock (  ULONG Flags,
          LIN LinearAddr,
                        ULONG Length,
          LIN pPageList,
          LIN pLockHandle,
          PULONG PageListCount )




!OTHER__________________________________**********
April 20, 1994
QUESTION: (Ref: B07)
What are the differences between a flat-address and linear address in OS/2
v2.x and between SelToFlat and VirToLin.


ANSWER:
A linear address and a flat addres are the same in OS/2 2.x.

The SelToFlat is a marco and the VirtToLin is an API. Other than that
they are the same.




!OTHER__________________________________**********
April 20, 1994
QUESTION: (Ref: A96)
I have wasted much time coding up various routines only to find that they are
unsupported by Card Services (i.e.  "AccessConfigurationRegister" 0x36,
"RegisterTimer" 0x28, etc.).  My Card Services (PCMCIA.SYS) is dated 1-31-94.
When I make the card services call "GetCardServiceInfo" it returns the
following:

     REVISION = 0104
     RELEASE  = 0200

What I need is a list of which card service functions are supported on this
version of card services.


ANSWER:
The Card Services we support are documented in the DDK - I/O DD Reference
Manual.  Basically, we support all PCMCIA 2.0 functions except:
RegisterTimer.  We don't support this function because OS/2 has Timer Services
in our DevHelp Services available to all DDs.

In the current PCMCIA Spec V2.10 the gray colored pages represent the PCMCIA
2.0 level of support and the blue colored add-in pages represent the PCMCIA
2.1 level updates.  For instance, the AccessConfigurationRegister function is
a 2.1 level update (it exists only on blue pages).  As a PCMCIA 2.1 level of
function it is not supported in OS/2 since our level of support is still at
the PCMCIA 2.0 level.




!STORAGE________________________________**********
April 20, 1994
QUESTION: (Ref: A95)
Q1. We are interested in finding out what PSP's plans for supporting IDE CD-ROM
    devices are?

Q2. Does PSP plan to upgrade the IBM1S506.ADD driver to implement this support?

Q3. What time frame would this be available for beta testing?

Q4. What vendor's IDE CDROM drives/controllers would be supported?

Q5. Would this support be part of the IDE-2 spec?


ANSWER:
A1. OS/2 will be supporting IDE CDROM drives in the near future.

A2. We are implementing standard support via our DM/ADD architecture.  We
    have used the ST506 driver as a model.

A3. We are shooting for May, but schedules are subject to change.

A4. We will support the standard ATAPI spec and any IDE CDROM Drive that
    conforms to this spec will work.

A5. We are supporting the ATAPI Spec for IDE.  IBM PSP has been involved with
    this spec very early on.  The date of the spec is 2/24/94 revision 1.2.

    The IDE-2 spec is for enhancing the disk interface. We are also invloved
    in that.




!STORAGE________________________________**********
April 20, 1994
QUESTION: (Ref: A94)
We are currently developing an OS/2 2.1 ADD device driver for SCSI adapter.
We have no problem opening one OS/2 window running SCSI disk file
read/write/compare test( through OS2DASD.DMD ).

But when we open two windows and try multitasking, we got the following
message on the debug terminal and console screen.  Would you please give me
some instruction about what needs to be done in ADD driver to support
multitasking ?

When the system stopped, and we saw following message:
              " The system detected an internal processing
                error at location ##0f00:0d5f - 0002:0d5f.
                6000, 2008
                048600B4
                Internal revision 6.514, 93/04/12 "


ANSWER:
Please look at the Queuing Count fields.  Also, the you may want to look at
some xxx.ADD drivers in the DDK toolkit.  These examples show how to set up
for multi tasking.  The Queuing defines the recommended number of commands to
queue for this unit.  See page 32 of the Storage Device Driver Reference.




!VIDEO__________________________________**********
April 20, 1994
QUESTION: (Ref: A86)
I have a question about how one passes the "virtual" desktop size to the mouse
driver and the other parts of the graphics environment.  I have been told that
I should look for an IOCTL to the mouse driver (function 51h?).  The function
should be called from the base video handler and I should call it with
essentially the same data structure, just changing the screen dimension
information.

Could you identify where this is currently being called in the SVGA driver
code base (DBCS version, if that makes a difference) or in what file in the
mouse code I can find the handler for the IOCTL -- we have not yet recieved
our new DDK CDROMs, so it would help if the references were relative to the
1.1 DDK as well.


ANSWER:
The Mouse Code for function 51h that handles the IOCTL can be found on
version 1.1 of DDK under \ddk\src\dev\mouse.  Specifically the source files
are DATA.ASM and IOSET.ASM.




!OTHER !STORAGE_________________________**********
March 20, 1994
QUESTION: (Ref: A75)
Q1. We developed an OEM.ADD for our scsi adapter, and we are trying to use our
    adapter to install OS/2 2.1 from the CD-ROM.  Can you tell me how to get
    the installation procedure to recognize our adapter and ADD driver and
    continue loading the OS/2 from the CD-ROM ?

Q2. What procedures should we follow to get an IBM OS/2 certification and have
    our device driver put on your installation diskette ?


ANSWER:
A1. This is not a device driver question, but let me see if I can help you.
    The information you need is spelled out in detail in the OS/2 2.1
    Installation Guide on Page XVIII.  Please refer to that document.

A2. You need an application for IBM OS/2 Certification for you device driver.
    I am mailing a folder to you with this application and other information
    included.




!VIDEO__________________________________**********
April 20, 1994
QUESTION: (Ref: A66)
I have upgraded our VDD code to the Nov 93 DDK source that I have received.
There has been new S3 and 8514 support in the VVDP.H file.  A problem aries
when I added two fields to the vdmdata_s structure.  The assembler, comes in
\tools in the CD ROM, complains that vdmdata_s has exceed 128 fields limit for
a structure.  I can remove other fields to remedy this problem, but we will
have two VSVGA.SYS to support.  To reproduce this problem, add one field that
has 4 more bytes to the vdmdata_s in vvdp.inc and vvdacio.asm will not
assemble.


ANSWER:
VVDP.INC is generated from VVDP.H.  It is recommended to keep the two files
VVDP.H and the generated VVDP.INC in sync at all times.  When you start a
clean build VVDP.INC is generated using the DDK supplied tool H2INC as
evidenced by the component makefile.  To test this, I added 4 bytes (a ULONG)
to VVDP.H and verified the variables definition in VVDP.INC.  I think I saw a
warning saying that structure was more than 120 bytes long but VVDACIO
assembled fine producing the .VGA and the.SGA file.  Hope this clarifies
things.  Please verify that VVDP.H and VVDP.INC are in sync.




!OTHER__________________________________**********
March 20, 1994
QUESTION: (Ref: 997)
I would like to know who uses INT4B?  Does OS/2 use it?  I know INT4B is use
for SCSI but how much is it used?


ANSWER:
Attached is a sample function on Int4b.  This confirms that yes, OS/2 uses
Int4b.  But exactly how much is hard to tell.

This is a DOS Int that is send to OS/2 VDMA telling it of a Notification.  If
you read the comment section of the code it will give you more info.

/***************************************************************************
 *
 * FUNCTION NAME = VXGAInt4BHandler()
 *
 * DESCRIPTION   = INT 4BH HANDLER.  This is called by VDMA when
 *                 the DOS app issues Int4b
 *                                    function=81
 *                                    sub-function=3
 *                 which means the DOS app has requested physical
 *                 memory for its I/O so XGA will unlock the 640K
 *                 DOS region along with any mapped-in LIM memory,
 *                 and unlock the DOS 640K page table.
 *
 * INPUT         = HVDM  == VDM HANDLE
 *                 ulfun == subfunction
 *                 PCRF  -> VDM REGISTER FRAME
 *
 * OUTPUT        = NONE
 *
 * RETURN-NORMAL =
 * RETURN-ERROR  =
 *
 **************************************************************************/

LONG EXPENTRY VXGAInt4BHandler(HVDM hvdm,ULONG ulFunc,PVOID pIn,PVOID pOut)
{
  USHORT i;

  if (ulFunc == 3)                       /* lock memory request  */
  {
     VDMData.flVDMXGA |= VDM_INT4B;      /* indicate int4B recvd */

     /*
     ** unlock VDM memory
     */
     if (VDMData.flVDMXGA & VDM_LOCKED)
       vXGALockVDM(VDMData.hvdmXGA, FALSE);

     /*
     ** now put ALL XGA into real mode    US=1
     */
     for (i = nConfigStart; i <= nConfigEnd; i++)
     {
       if (XGAENVi.IORegBase)
         OUTB(XGAENVi.IORegBase+AXGA_VIRTUAL_MEMORY_CONTROLLER,0x04);
     }
     return(1);                          /* set good rc          */
  }                                      /* end lock memory req  */
}

#pragma  END_SWAP_CODE




!BASE___________________________________**********
April 20, 1994
QUESTION: (Ref: B14)
I use VMAlloc in the PDD I am developing.  Occasionally, the call returns with
the carry flag set and EAX=00000008.  Can you tell me what this error code
represents.


ANSWER:
This value of EAX, 00000008, represents ERROR_NOT_ENOUGH_MEMORY.  He can check
the file BSEERR.H in header file directory in the DDK for error information.




!VIDEO_______________________________**********
April 20, 1994
QUESTION: (Ref: B04)
I am at the final stage of my XGA seamless windows display driver development.
I am testing it.  It works fine except that sometimes it responds very slow.

For example, when I click on the pull-down menu item like "File", it takes
several seconds for the pull-down menu to come out.  Also when I resize the
windows, it takes several seconds for the cursor to change shape and to
respond.

At first I thought that this is because I am in the kernel debugging mode.
But after I restore to the retail kernel, it is still too slow.

What could be the cause of this problem?


ANSWER:
We can't really determine the cause based on the information provided by the
customer.  Critical sections of the code (in the driver) have to be identified
and reviewed/rewritten with performance considerations in mind.  One way to
start is to find out what routines are being invoked as a result of the File
Pull down, for example.  Then look at the routines in the driver to see where
you can optimize for performance.  You can do a trace very easily.  set
TRACE=ON and TRACEBUF=63 in config.sys.  Just prior to application invocation
set trace on and then the run the app.  Format the trace buffer using tracefmt
utility and analyze the behavior.

As the customer points out there is a slight performance hit in the debug
kernel because it is bloated with debug code, but certainly does not explain
what the customer reports.  IMHO there is no speed difference between retail
and debug kernels that is noticeable at app level anyway.  Increasing VRAM to
1Mb or beyond (if not already done) may speed up things.  Make sure a good
sync mecahnism exists between PM and the seamless driver.  Again these are
general suggestions.  Need more information and details to actually solve
this.  Hope this info helps.




!STORAGE________________________________**********
April 20, 1994
QUESTION: (Ref: A99)
We recently have had problems where our SCSI ADD driver receives a CDB
passthrough IORB with a SCSI Status Block that contains a sense data pointer
that is an LDT.  By the time we complete the request at interrupt time, the
LDT is invalid.

The storage driver spec is VERY vague in what kind of pointer is allowed to be
in the SCSI_STATUS_BLOCK for sense data.

Our question is, are ADD drivers expected to handle this?

It seems that this should be the domain of OS2SCSI.DMD driver to lock down the
data segment and give the ADD something that it can handle at interrupt time,
or is it the responsibility of the driver that is calling OS2SCSI.DMD to make
sure that the SenseData pointer in the SCSI_STATUS_BLOCK is a GDT type
pointer?


ANSWER:
All data structures that will be accessed by the DMA must be locked into
memory before calling OS2SCSI.DMD.  These data structures are as follows:

       SCB chain header and SCB's
       Scatter/gather list and data areas
       TSB
       Sense data area
       User Data area

OS2SCSI.DMD does not lock the memory.  The user has to do this before calling
OS2SCSI.DMD.




!STORAGE_______________________________**********
April 20, 1994
QUESTION: (Ref: 960)
After reading through the Storage Device Driver Reference,I came to the
conclusion the in order to access OS2SCSI.DMD from an application, an
intermediary device driver is necessary to perform pointer conversion from
virtual to physical.  I do this now with the OS2ASPI.DMD.  Is this
intermediate device driver necessary?  If it is, does IBM provide one?


ANSWER:
According to the IBM Storage Device Driver Reference, here is the sequence of
events:

1. Your application talks to a Class driver (Cdrom,Optical,Others) which does
   the mapping to the different registers
2. The Class drivers talk to the OS2SCSI.DMD Manager (or the OS2ASPI.DMD)
3. The OS2SCSI.DMD (or OS2ASPI.DMD) talks to the XXXXXX.ADD drivers pertaining
   to the hardware device
4. The data and controls would then get to the card.

In your case, the application talks to the IBM SCSI.SYS Class driver, then the
Class Driver talks to the OS2SCSI.DMD manager, then the manager talks to the
xx.ADD driver which initializes the card in action.  Here is an example for
the OS2ASPI.DMD driver.

   The Application talks to the Device Class Driver
   The Device Class Driver talks to the OS2ASPI.DMD DRIVER
   The OS2ASPI.DMD DRIVER talks to the xx.ADD
   The xx.ADD driver talks to the Hardware

If the above example is for the Adaptec driver the Device Class Driver is
written by Adaptec.

If the customer is writing for the OS2SCSI.DMD driver then it is the same as
above BUT the customer has to write the Device Class Driver.  IBM does not
provide a Device Class Driver because it has to be defined by the customer.
The interface between the Device Class Driver and OS2SCSI.DMD is defined by
IBM - see Appendix B in the Storage Ref Manual.  Bottom line - the customer
needs to write the Device Class Driver is they want to use the OS2SCSI.DMD
driver.




!OTHER__________________________________**********
April 12, 1994
QUESTION: (Ref: 879)
Q1. I have heard that the APM source is currently available on the latest
    version of the DDK which was released at the end of '93.  Do you know what
    version is the release?  Is the APM Adaptation Kit (procedures) included
    in the latest release of DDK?

A1. Version 1.1 of the DDK was released in Sept 93.  There is no APM code on
    this version of the DDK.  The next version, v1.2, will be released in
    March 94.  There will be no APM code on this version either, according to
    DDK planning.  We are not familiar with the APM Adaptation Kit.  It is not
    on the current DDK, version 1.1.
==============================================================================

Q2. Where can I find a complete class library reference for IBM C++?  The
    "User Interface Class Library User's Guide" provides some examples on how
    some of those class library member function are used, but I would like to
    learn about all the member functions.

A2. The information below is an excerpt from the C Set++ product announcment:
    GROUP 2 PUBLICATIONS:  The following publications may be ordered
    separately or as the IBM C Set++ Library -- Group 2, part number 61G1440.

                                                       ORDER
     TITLE                                             NUMBER
     IBM C/C++ Tools: C++ Language
      Reference                                        61G1185
     IBM C/C++ Tools: C Language Reference             61G1399
     IBM C/C++ Tools: C Library Reference              61G1183
     IBM C/C++ Tools: User Interface Class
      Library Reference                                61G1179
     IBM C/C++ Tools: Collection Class Library
      Reference                                        61G1178
     IBM C/C++ Tools: Standard Class Library
      Reference                                        61G1180
            The publications shown above are available in the IBM C Set++
     diskette and CD-ROM packages, as follows:
     o   IBM C Set++ Package -- Diskette
         -   Group 2 -- IPF files
     o   IBM C Set++ Package -- CD-ROM
         -   Group 2 -- IPF files.
           To order any publication, contact your IBM representative or
     call, toll-free, 1-800-342-6672 or 1-800-426-2255.  (In Canada, call
     1-800-465-7999.)
          The Group 2 files are shipped as soft copy on both diskette and
     CD-ROM and can be used with the OS/2 Information Presentation
     Facility (IPF) on both diskette and CD-ROM, to provide hard copy.

    The entire C Set++ documentation set along with documentation on OS/2 2.x,
    Communications Manager, the OS/2 Technical Library, the OS/2 "Red Books",
    OS/2 LAN Server 2.0 and 3.0 documents, Network Transport Services
    documents, and others are available on the OS/2 Online Book Collection,
    part number S53G-2166.  This can be ordered at 1-800-3IBM-OS2.
==============================================================================

Q3. What we are trying to accomplish is to add extended support on APM power
    setting which will fully utilize the feature that our hardware provides.
    With these modification on the Power-Settings, our users are able to
    manage the system power according to their need.  Users are able to set
    timers on hardware pieces in the system, plus the user can decide when and
    how to suspend and resume the system.

    We are trying to add two pages (Extended APM Utility) on top of the
    current Power Settings (Power, View, and General).  The questions I have
    are:

    A) How can I adapt these Extended APM Setting pages to the Power-Setting.
       So, when a user selected "Settings" from the Power Open options, the
       Extended APM pages will be displayed along with others.

    B) The System menu for Power contains a pull down menu includes:  Open,
       Help, Move, Create shadow, ...  etc.  How can I adapt the same system
       menu in the pages that I create?

A3. You will have to subclass WPPower in order to add the settings pages.

    A) In order to add the extended APM settings pages you will have to
       override the wpAddSettingsPages.  In order to add the pages on top of
       the existing power object seetings you will have to call
       parent_wpAddSettingsPages and then call your new settings page.  In
       this way the new pages will be added at the top of the notebook.

    B) In order to add more options in the popup menu you will have to
       override wpFilterPopupMenu.

    I think the best example that you can use is to look at the car sample
    program in our toolkit.  It explains how to overide these methods to add
    new settings pages.  This sample is on OS/2 2.1 Toolkit in the directory
    \toolkt21\c\samples\wpcar.  The OS/2 2.1 Toolkit is available as part of
    the OS/2 Developer's Connections, a yearly CD-ROM subscription package
    available at (800)633-8266, part number 82G1500.




!OTHER__________________________________**********
April 20, 1994
QUESTION: (Ref: 858)

I wonder if there is any official development of PCMCIA client drivers, in IBM
or any other company that you may know of.  I am especially interested in
drivers for PCMCIA flash memory cards to be used as fast disks.

If there is any development, do you know where I can obtain the drivers in
question?  I am interested of anything that exists, even beta level code.

If there is no development of client drivers for PCMCIA flash memory cards, is
there another way to make these cards work under OS/2 2.1?  I am especially
wondering if the generic INT 13 DASD driver might work as a read-only
interface to the cards.  I also need to be able to boot OS/2 from the memory
cards.  Do you know if that is possible?

If no development is in works, and will not be started in the near future, my
company might be forced to start own development of client drivers for PCMCIA
flash memory cards.  Therefore the answers to the questions above are very
important to me.

ANSWER:

- In DDK v1.1 there is PCMCIA client driver sample code.  This is very
  generic.  There is nothing specific for memory cards.

- In DDK v1.2 there will be another PCMCIA client driver code.  It is for
  data/fax modem PC card.  It is the source code for a real product.

Also there are some enhancements of the original PCMCIA client sample code on
DDK v1.2:

        1. Multiple code segment support.
        2. Retry support when the card service return "BUSY" return code.
        3. Multiple thread support. - queuing the request packets.

These enhancements are also general.  This sample will be helpful for general
things such as talking to the card service driver.  It may not be as helpful
for specific handling for a memory PC card.  Perhaps we will have a memory
card driver in the future, but right now we do not.

The PCMCIA General Committee publishes the following specifications for the
software archtecture components:

    CS 2.00 Specification
    SS 2.00 Specification

They can be ordered via:

    PCMCIA Office
    1030G East Duane Avenue
    Sunnyvale, CA 94086

    (408) 720-0107 Voice
    (408) 720-9416 Fax
    (408) 720-9388 BBS

There are three major software components defined in the PCMCIA architecture.

  - Clients
  - Card Services
  - Socket Services

OS/2 2.1 includes only the Card Services device driver which is the part that
is normally included with the operating system.  Socket Services is normally
provided by the system/chip vendor.  Client Service is normally provided by
the card vendor.

The references mentioned above will give you a lot of information.  Basically
the Card Services driver communicates to Socket Services and Client driver.
The client driver communicates to its application through the DosDevIOCtl API.

All interfaces are defined in CS/SS specifications in the above.  The latest
DDK Input/Output Device Driver Reference has a PMCICA chapter, and describes
in more detail the interface between Clients and Card Services.




!OTHER__________________________________**********
April 20, 1994
QUESTION: (Ref: 425)
In \DDK\DSPINSTL there is a MAKEFILE to compile SVGAINST.  This makefile
doesn't work.

Here are the first two lines from the makefile

   CCDLL = icc  /c /ss /Gm+ /Ge- /Ms
          ~~~~~ huh???
   LINKDLL = link386 /NOE /MAP /ALIGN:4 /BASE:0x10000

Link386 is in my search path OK..  But what is ICC.  I tried substituting CL
and CL386, but did not work.  I would like to compile SVGAINST.DLL and get a
symbol file so that I can use the debugger to poke around.

Where and what is ICC?.  I did a DOS WHEREIS search and couldn't find it on
the CDROM.


ANSWER:
ICC is the CSet/2 compiler.  It is not on the DDK.




!OTHER__________________________________**********
April 12, 1994
QUESTION: (Ref: B18)
I will need to create an install program.  A package such that I can put my
files on a floppy diskette and type "a:install" and the program will create
the appropriate directories, update the config.sys etc.  Is there an OS/2
package which will help with this?


ANSWER:
Please look in the Physical DD Reference manual at chapter 7, Installation of
an External Loadable Device Driver.  Version 2.1 of the PDD manual may not be
available yet, but should be available at the time of the technical conference
on April 25.  The form number is S10G-6266-01.  The information is also in
version 2.0 (S10G- 6266-00).

Alternatively, this same material is covered in our 1.2 DDK in the Physical
Device Driver Reference section under Installation of External Loadable Device
Driver.

This should provide you with what you need.




!OTHER__________________________________**********
April 12, 1994
QUESTION: (Ref: A88)
Is there an install program which can be configured to ask

   COM PORT = ?
   COM ADDRESS = ?
   IRQ = ?

and then update CONFIG.SYS and copy the device driver to the appropriate
directory?


ANSWER:
Refer to chapter 7 of the Physical Device Driver Reference for the syntax and
high level description of OS/2 support for DDINSTAL.EXE.  This program uses an
input file to install a custom device driver and add an appropriate CONFIG.SYS
statement.

The developer can use the ":RUN" statement in the DSP file.  The ":RUN" will
be called first and can be a .CMD file or program that will parse the
CONFIG.SYS file and make the necessary changes.

The syntax for the ":RUN" is:

    :RUN
     A:BARNEY.CMD




!LAN____________________________________**********
April 12, 1994
QUESTION: (Ref: A65)
1. Is there a LAN Server 4.0 available that supports Multimedia?

2. Being member of IBM's OS/2 DAP Program we have an OS2 2.1 CDROM,
additionally we received the DEVICE DRIVER SOurce Code CDROM sometimes
referred as DDK.  It includes kernel debuggers and other goodies.  Are there
additional tools required/available.  Additional information sources?


ANSWER:
1.  Please see the attached LAN SERVER ULTIMEDIA 1.0 announce package.

2.  LAN Documentation

 o IBM NDIS Driver Implementation Package (we suggest that you get this one)

     Documentation on the Network Driver Interface Specification and on
     Media Access Control (MAC) drivers for network cards.
     This is available for free from Michael Ward.  Please contact him
     at 512-838-8184, or mikeward@netftp.austin.ibm.com.  Michael is also a
     good source of LAN information.

 o NDIS Device Driver Toolkit for OS/2 and DOS

     Source code, available from DWB Associates, (503)626-3081
     Price is approximately $500

 o The following documents define API's for LAN and NetBIOS programming.  They
   are available from the PC Bookline (800)426-7282

       Local Area Technical Reference
          Part No. SC30-3383-03

       Supplement to Local Area Technical Reference
          Part No. SD21-0049-00

 o A good third party book is "Client/Server Programming with OS/2"
     by Robert Orfalli and Dan Harkey.


*************************************
IBM LAN SERVER ULTIMEDIA 1.0 Announce
*************************************

NUMBER     293-658
DATE       931109
TITLE      IBM LAN SERVER ULTIMEDIA -- MULTIMEDIA FOR OS/2, DOS AND WINDOWS
           CLIENTS
ABSTRACT   IBM LAN Server Ultimedia (R) Version 1.0 extends the distributed
           multimedia capabilities of IBM OS/2 (R) LAN Server 3.0 -- Advanced,
           by setting up a controlled environment to ensure uncompromised
           playout of audio/video application components even with congestion
           on the LAN.  The requisite quality of service needed for
           uncompromised playout of sound, voice and video is what
           distinguishes this product from most other similar products.

           IBM LAN Server Ultimedia (R) Version 1.0 can be added to existing
           token-ring or Ethernet LANs with data applications in a
           non-disruptive manner.  The product design allows simultaneous use
           of data and multimedia applications.

           IBM LAN Server Ultimedia (R) Version 1.0 takes advantage of the
           token-ring LAN Priority Architecture to reserve bandwidth in the
           network, which, with resource reservations in the file system and
           disks, automatically provides the required quality of service for
           multimedia even when data applications are running.  Ethernet users
           can reap many of the benefits of the product but differences in the
           architecture require the user to be more careful to ensure that
           adequate capacity exists in the network resources.

           With multimedia application independence, all applications can run.
           As examples, applications based on Ultimotion, DVI (1), INDEO (1),
           RIFF-WAV and SoundBlaster (2) Voice have been tested successfully.
           By providing a very high level of multimedia playback support,
           users can engage in applications such as "news-on-demand", kiosk,
           new personnel training, enhanced mail and spreadsheet,
           computer-assisted education, and many more.  Multimedia is
           generally considered to be a significant assist to personal
           communications, leading to enhanced human performance in a variety
           of activities.

                  Other features of the product include:
           o   Runs stand-alone applications using Multimedia Presentation
               Manager/2 (TM) (MMPM/2) or AVK
           o   Clients may be OS/2, DOS, or Windows (3)
           o   Up to 40 video sessions (plus data applications) from a single
               server
           o   Tuning facilities to optimize performance.

           IBM LAN Server Ultimedia Version 1.0 is a separate program, another
           in IBM's range of multimedia enabling packages.  Its announcement
           is consistent with IBM's declared intent to provide support for all
           major platforms -- in this case the IBM OS/2 LAN Server -- so that
           all users can benefit from the enormous potential of multimedia
           impact.

           One-Time Charge:  $3,195 (96F8520).
           Planned Availability Date:  December 6, 1993.
            (R) Registered trademark of International Business Machines
              Corporation.
            (1) Trademark of Intel Corporation.
            (2) Trademark of Creative Labs, Inc.
            (TM) Trademark of International Business Machines Corporation.
            (3) Trademark of Microsoft Corporation.

           IN BRIEF . . .
           o   Brings the power of multimedia to the OS/2 LAN server
               environment
           o   Controls the environment rather than adapting to it
           o   Application-independent -- all playback applications with known
               characteristics can be configured to run
           o   Consistent with IBM's stated intent to bring distributed
               multimedia to all major platforms
           o   Transparent to the end user
           o   Install and tuning aids available to the network administrator
           o   Up to 40 video sessions (plus data applications) from a single
               LAN server

PRODNO       96F8520


OVERVIEW   DESCRIPTION
           UNCOMPROMISED DISTRIBUTION OF MULTIMEDIA APPLICATIONS ACROSS THE LAN
           Multimedia applications require a large commitment of resources at
           the file, disk access and network levels to deliver their
           time-sensitive media streams to the client to produce a high quality
           image to the end user.  LAN Server Ultimedia provides a reservation
           system to ensure the requisite quality of service is attained.

           ENHANCED OPERATIONS
           IBM LAN Server Ultimedia enables distributed multimedia applications
           to run across a LAN in an acceptable manner, which, in turn, opens
           opportunities:

           o   Multimedia enhances communications throughout an organization,
               which results in better products, shorter cycles and lower
               costs.
           o   Multimedia enhances the quality of reports and presentations by
               adding audio/video capability for additional effect.
           o   The ability to store multimedia examples of how to service a
               product results in better service to the customer.
           o   Multimedia information carries more impact and leads to better
               decision-making internally, and better product representation to
               external customers.

           Ethernet LANs are also supported and most of the characteristics
           described above apply.  However, because of the differences in the
           LAN architectures, some reduction in the anticipated number of
           audio/video sessions may be necessary, to achieve an acceptable
           level in their quality.

           GROWTH ENABLEMENT AND INVESTMENT PROTECTION
           Multimedia applications can be added to an existing token-ring LAN
           with existing data applications, by using the priority mechanism of
           the token ring to ensure that the multimedia ones get priority and
           run correctly at the client.  This has the following advantages:
           o   Existing data applications run without modification
           o   Multimedia and data applications run concurrently
           o   Existing stand-alone multimedia applications can be transferred
               to the server and played back to the clients, usually without
               modification
           o   Enterprise data at the server can be upgraded to multimedia and
               continue to be accessed by client users.

           Ethernet LANs may also participate in these types of activities;
           however, because of the difference in architecture compared to a
           token ring, multimedia cannot automatically be given priority and
           it is up to the user to ensure that the combined data and
           multimedia activity will provide adequate capacity in the network
           resources to allow acceptable multimedia performance.

CUSTINFO   PUBLICATIONS
                  The IBM LAN SERVER ULTIMEDIA INSTALLATION AND CONFIGURATION
           GUIDE (S96F-8756) will be available after December 6, 1993.  To
           order, contact your IBM representative or call 800-426-2255.

           EDUCATION SUPPORT
                  The LAN Server curriculum will be updated, as necessary, to
           reflect the enhancements in this announcement.

                  Descriptions of all classroom and self-study courses are
           contained in the SKILL DYNAMICS (TM) CATALOG OF IBM EDUCATION
           (G320-1244).

                  Call Skill Dynamics at 800-IBM-TEACh (426-8322) for schedules
           and enrollments.

TECHINFO   TECHNICAL INFORMATION
           SPECIFIED OPERATING ENVIRONMENT

           MACHINE REQUIREMENTS:  IBM LAN Server Ultimedia Version 1.0 runs on
           a server PC and also provides minor modifications to each client.
           The minimum operating environment for multimedia applications to be
           played back from the server to clients on the LAN, is as follows.
           Note that this minimum network configuration will be restricted in
           the number of simultaneous audio/video streams playable across the
           LAN.

                  Server:
           o   IBM Intel 386-based PS/2 (R) (or IBM approved OEM equivalent)
           o   16MB Memory
           o   400MB disk drive
           o   IBM LANStreamer (TM) MC 32 Adapter (or equivalent), or
           o   Appropriate alternative LAN Adapter*.
                  LAN:
           o   Token ring (4Mb)
           o   Ethernet.
                  Client:
           o   IBM Intel 386-based PS/2 (or IBM approved OEM equivalent)
           o   Requisite display, and audio/video support for multimedia
               applications
           *  For uncompromised playout of multimedia files at the clients,
              users need a token-ring LAN, plus either a server with a
              LANStreamer MC 32 adapter or a dedicated server, which can then
              use alternatively an IBM Token-Ring Network Busmaster Server
              Adapter/A or an IBM Token-Ring Network 16/4 Adapter/A.

           NOTE: All multimedia clients must be on the same segment as the
           server (although bridges may be used to non-multimedia clients) and
           there cannot be more than one multimedia server on the LAN.

                  The minimum requirements are given above, but a more typical
           server configuration would be:

           o   A 486 50MHz PS/2 with 32MB memory and 2 x 2GB disks each with a
               dedicated controller for multimedia applications attached to 3 x
               16Mb token rings each with a LANStreamer MC 32 Adapter.

           Depending on the other factors involved (refer to PERFORMANCE
           CONSIDERATIONS section), this configuration should be able to
           support up to 25-30 video media streams.

           Finally, to reach the highest number of simultaneous streams tested
           to date (40 at 1.2Mb/sec) the above configuration would be extended
           to four disks with individual controllers, with 4 x 16Mb token-ring
           LANs each with a LANStreamer MC 32 Adapter and using OS/2 clients.

           PROGRAMMING REQUIREMENTS:  IBM LAN Server Ultimedia Version 1.0 is
           designed to operate with the IBM LAN Server -- Advanced Version 3.0
           updated with Service Pack IP07001, working with OS/2 2.0 with
           Service Pack 2 or OS/2 2.1 (or higher).

                  Client support requires:
           o   OS/2 LAN Requester (feature of LAN Server Version 3.0), OS/2 2.0
               (or later) plus client support from IBM LAN Server Ultimedia
               Version 1.0; or
           o   DOS LAN Requester (feature of LAN Server Version 3.0) plus DOS
               5.0 (or later) plus client support from IBM LAN Server Ultimedia
               Version 1.0; or
           o   Windows DOS LAN Requester (feature of LAN Server Version 3.0),
               plus Windows 3.1 (or later) plus one of the operating systems
               above plus client support from IBM LAN Server Ultimedia Version
               1.0.

           LIMITATIONS:  The maximum number of simultaneous AVI/DVI video
           sessions (at 1.2Mb/sec) currently tested using a single server is
           40.

           Client workstations must be attached on the same LAN segment as the
           server (that is, no bridges or routers between multimedia clients
           and the server).

           When multimedia and data applications are performed in a token-ring
           environment, where higher priority for multimedia has been
           allocated, the data applications have lower priority and, as a
           consequence, their performance will be reduced.

           IBM LAN Server Ultimedia Version 1.0 requires that the
           NDIS-compliant NetBIOS stack be installed on DOS clients.  For
           example, LAN Manager and Windows for Workgroups clients are not
           supported.

           Macintosh (4) clients are supported by the IBM OS/2 LAN Server via
           the OS/2 LAN Server for Macintosh product, and as such can access
           multimedia files on the server and play them back.  However, none
           of the reservation and control facilities of LS Ultimedia are
           available in this environment, so that Macintosh users receive no
           benefit from its use.
            (4) Registered trademark of Apple Computer, Inc.

           PERFORMANCE CONSIDERATIONS:  The number of multimedia sessions
           simultaneously supported will vary considerably depending on the
           following factors:

           o   Number and type of multimedia streams simultaneously played back
               across the LAN
           o   Size and power of the server system
           o   Size and number of drives of the server disk array
           o   Number and type of server disk controllers
           o   Type and speed of the LAN
           o   Type of server LAN Adapter
           o   Operating system on the client.
           In addition, the performance of data applications will be affected
           by the multimedia traffic.

                  Performance considerations are described in the publication
           IBM LAN SERVER ULTIMEDIA VERSION 1.0 -- INSTALLATION AND
           CONFIGURATION GUIDE (S96F-8756).

           PLANNING INFORMATION
           CUSTOMER RESPONSIBILITIES:  The customer is responsible for setting
           up the network to achieve the desired results for multimedia and
           data applications.  This consists of ensuring that appropriate
           configurations of hardware and software are selected for server and
           clients, and that the various parameters that can be adjusted are
           set at appropriate levels to allow the desired results to be
           obtained.  Guidance is available through the publication IBM LAN
           SERVER ULTIMEDIA VERSION 1.0 -- INSTALLATION AND CONFIGURATION
           GUIDE.

           PACKAGING:  The program package contains:
           o   Two double-sided high-density 3.5-inch diskettes
           o   IBM LAN Server Ultimedia Version 1.0 -- Installation and
               Configuration Guide
           o   Program License Agreement
           o   License Information Booklet
           o   Proof of License.

           The separate documentation package includes the IBM LAN SERVER
           ULTIMEDIA VERSION 1.0 -- INSTALLATION AND CONFIGURATION GUIDE.
           SECURITY, AUDITABILITY AND CONTROL

                  The IBM LAN Server Ultimedia uses the security and
           auditability features of the IBM OS/2 LAN Server Version 3.0 --
           Advanced.

                  User management is responsible for evaluation, selection and
           implementation of security features, administrative procedures and
           appropriate controls in application systems and communication
           facilities.

ORDERING   ORDERING INFORMATION
                  Orders for new licenses will be accepted now.

                  Unless a later date is specified, orders entered before
           December 6, 1993, will be assigned a schedule date of
           December 17, 1993.  Shipment of orders will begin on
           December 6, 1993.  Orders entered after December 6, 1993, will be
           scheduled for shipment on the Friday following the week of order
           entry or as soon thereafter as supply permits.

                  To order the programs in this announcement for order type,
           specify the order type number, feature number, part number, program
           name, media and quantity.

           ORDER
           TYPE       FEATURE      PART
           NUMBER      NUMBER      NUMBER     PROGRAM NAME            MEDIA
           5871-AAA     6715       96F8520    LAN Server
                                                Ultimedia              3.5
           5870-EAD     6716       96F8520    LAN Server
                                                Ultimedia              3.5
           ORDER
           TYPE       FEATURE      PART
           NUMBER      NUMBER      NUMBER     PROGRAM NAME
           5872-AAA     6736       96F8757    LAN Server Ultimedia
                                                Additional License
                                                with certificate
           5872-AAA     6737       96F8758    LAN Server Ultimedia
                                                Additional License
                                                without certificate
           5870-EAD     6738       96F8757    LAN Server Ultimedia
                                                Additional License
                                                with certificate
           5870-EAD     6739       96F8758    LAN Server Ultimedia
                                                Additional License
                                                without certificate




!I/O !OTHER_____________________________**********
April 12, 1994
QUESTION: (Ref: A53)
Hi, I haven't purchased the DDK yet as I have question of do I really need to
buy it for writing a Monitor.  I have read the Physical DD manual and it
alludes to Monitors being supported by the PDD.  However, are the DosMonxxx()
calls already located in my OS/2 standard box via a DLL and so, if I write a
monitor, which I believe is to be standard Ring 3 (normal OS2 exe), are the
DosMonXX() calls resolved?

ANSWER:
The answer is, yes, he can write an application to run at ring3 using the
documented DosMonxxx API set to monitor keyboard and mouse events in the OS/2
Full Screen Protect mode ONLY.

PM Journaling hooks are the prefered method for the WP Shell environment.
Bottom line is if above serves his purposes, no need to buy the DDK.

Finally, according to Physical Device Driver Reference, Character Device
Monitor chapter, these DosMonxxx() functions are implemented in the
Moncalls.dll dynamic link library that comes with OS/2 2.1.




!VIDEO__________________________________**********
April 12, 1994
QUESTION: (Ref: A51)
I've been trying to create a Base Video Handler.  Our goal is to have as much
of our code as possible be 32-bit.

The problem I'm running into is that, as far as I can see, the Graphics Engine
refuses to load a BVH for which the DevEnable entry point is a 32-bit API.  Is
it in fact the case that the entire interface between the graphics engine and
the BVH is 16-bit based?

Specifically, I'm worried about these things:

1. The GRE dispatch table:  Are GRE dispatch table entries limited to 16:16
format?  More to the point, can the GRE call 32-bit code directly or do I have
to create a thunking layer?

2. Individual GRE functions:  Are all pointer parameters unconditionally
16-bit, or is there a way to get the GRE to use flat 32-bit pointers?

3. I am trying to write a log file from my driver.  I can successfully open
the file, but the driver hangs when it calls DOS32SetFilePointer().  The error
is trying to load an invalid segment selector.  As far as I can tell, the
invalid selector is not mine.  Am I missing something?  Is there a workaround?

4. Is it possible from a 16-bit DLL to load another 32-bit DLL?


ANSWER:
1. The GRE dispatch table is not limited to 16:16 format.  You do not have to
create the thunking layer yourself.  The GRE can call 32 bit code directly.
In fact, it is recommended that presentation drivers be purely 32 bit code.
With this in mind, the answer is that, yes, the Gre Dispatch table is 32 bit.
GRE can call 32 bit code directly.  (for example, look at IBMVGA32 on DDK).

2. BVHs are essentially 16 bit drivers.  So everything the customer found out
is working as designed.  The answer is that no DevEnable should be exported
from a 16bit segment.

3. In regard to the Dos32SetFilePointer question, there are no known problems
with this API.  Generally, because a chain of events occurs we cannot say much
based on the invalid selector that is pointed to.  A wild guess would be that
the parameters are not being passed correctly or are invalid.

4. Yes, it is possible to load another 32 bit DLL from a 16 bit DLL.  There
are various considerations though.  Note that it is also possible to
statically link the 32 bit and 16 bit DLL (with some restrictions).  The
dynamic link is also most certainly possible.  A very good reference is
chapter 16 of the IBM C/C++ language reference manual.  I have no information
about the WATCOM compiler though.  To summarize, proper prototypes, right
tools, and correct linkage are some of the things to be careful about.




!OTHER__________________________________**********
April 12, 1994
QUESTION: (Ref: A44)
Q1. Handling memory pointer:
    As IOCtl function of getting LDT(category 3/function num 70h), application
    can get LDT.  How do I use LDT in C language?  I'ld like to access VRAM
    direct from application.

A1. The General way this works is as follows.  LDTs are task or process based.
    When an application gets the LDT selector (from the ioctl mentioned above)
    it (meaning the application) can create pointer refernces in the LDT
    region.  From an LDT in selector:offset format the application could for
    ex:  extract a pointer pointer = MAKEP (selector,offset).  The application
    would then use this pointer in appropriate ways.
==============================================================================

Q2. Sharing memory:
    I'ld like to share memory between Application and device driver.  I can
    think of 2 ways to handle this.  What is the correct way?

    (1).  Getting shared memory in application and give it to device drivers.
    (2).  Getting shared memory in DD, and give to application.

A2. This depends on various things.  Generally, assuming that the device
    driver is running at ring 0, and the application running at ring 3,
    getting shared memory and giving it to DD would be preferred.  Note that
    this is application specific and various other factors may influence this.
    Device Drivers intialize globally and may be GDT based, validating per
    process data structures like LDTs.




!PRINT__________________________________**********
April 12, 1994
QUESTION: (Ref: A18)
Q1. Can a print object be subclassed?

A1. A Printer Object is subclassable.  The recent MR1 release of OS/2 contains
    a fix that allows PrintObject subclassing without much difficulty.  For
    OS/2 2.1 GA, the PrintObject can be subclass with some work around.  The
    workaround is that the meta class method must be removed from the .def
    file.
==============================================================================

Q2. I have a OS/2 system with CM/2 token-ringed to an AS/400.  The AS/400 is
    providing pass-thru to a 3270 session.  This also provides for a printer
    session.

    We have mainframe programs that send output to a 'store and forward' set
    of queues.  Basically, I need to be able to grab the output and massage it
    before it gets printed.

A2. What is the format of the jobs spooled onto the OS/2 machines?  Are they
    only IPDS raw data, or can there be any metafiles generated by CM/2
    spooled to the print queues they release at night?

    If the answer is that all data sent to these queues is already in raw
    format, and your application knows how to interpret this format (so the
    font or orientation can be changed), you can write a print queue driver,
    which will be called when a job is ready to print (once the print queue is
    released).  You can have your own queue driver connected to only these
    "host print" queues, so that normal OS/2 printing is not affected.

    In the Device Driver Source Kit, there is the full source to the PMPRINT
    queue driver that ships with OS/2, and this can be modified to scan the
    raw spool file and add any extra commands to the print datastream.

    Another alternative is to write an LPT monitor, but the above would be a
    cleaner way to do this.




!OTHER__________________________________**********
April 12, 1994
QUESTION: (Ref: 993)
I am having problems with the ASDT32 debugger that is included on the DDK.  I
have three machines.  One is a Thinkpad 720.  The other two are clone desktop
machines with ISA buses.  The debugger runs fine on the Thinkpad, but hangs on
both ISA machines.  Do you have any ideas what might be causing this?


ANSWER:
Essentially, ASDT32 can work w/ clone machines, but it is hard for ASDT32 to
address all of them.  Could you run the following patch by your customer?
Ask him to make a backup copy of ASDT32.SYS first.

------------- Patch -----------
2 patches for latest ASDT32.SYS and clone kbds:

    find 0x752BB96400E464
    change 0x75 to 0x74

    find 0x50B00AE620EB00
    change 0x50B0 to 0xEB0F

Use your favorite hex zapper on ASDT32.SYS.




!OTHER__________________________________**********
April 12, 1994
QUESTION: (Ref: 930)
We are having problems when we first initialize our PCMCIA card using OS/2
2.1.  We are successfully registering our card, but we never receive our
artificial insertion event.  How are we notified that the card is present?
Thank you for any help you can give us.


ANSWER:
The customer is correct that their driver should receive an artificial
Card_Insertion event for each card that is present in the system when their
driver loads.  The sequence of events can be summarized as follows:

 - user inserts PC Card,
 - user boots the system,
 - OS/2 PCMCIA software loads (Card Services & Socket Services),
 - PC Card is detected in system,
 - PC Card Client Driver loads,
   - Client issues RegisterClient call,
   - Client receives Card_Insertion event for PC Card in system,
   - Client receives Registration_Complete event.

I think I see why this customer is having a problem.  The OS/2 2.1 GA Package
does not include Socket Services Device Drivers.  Hence, the customer's
CONFIG.SYS is lacking a DEVICE= statement for an OS/2 Socket Services Device
Driver.  As simple as this sounds there is no immediate answer or quick fix
for this problem.  We (OS/2) are currently working on Socket Services Device
Drivers for several PCMs.

=================== Administrative Stuff ===================
________________________________________**********
April 21, 1994
