Jump to content

DevHelp RegisterStackUsage

From EDM2
Revision as of 23:42, 27 July 2018 by Martini (talk | contribs) (Created page with "This service indicates the expected stack usage of the physical device driver to the interrupt manager. ==Syntax== ===C=== USHORT APIENTRY DevHelp_RegisterStackUsage( PVOID...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

This service indicates the expected stack usage of the physical device driver to the interrupt manager.

Syntax

C

USHORT APIENTRY DevHelp_RegisterStackUsage( PVOID StackUsageData )

Assembler

MOV   BX,OFFSET DS:StackUsage
MOV   DL,DevHlp_RegisterStackUsage

CALL  [Device_Help]

Parameters

C

StackUsageData (PVOID)
14 byte structure
typedef struc _STACKUSAGEDATA
{
  USHORT Size;          /*  num of bytes in structure including itself (14) */
  USHORT Flags;         /*  Bit 0x0001 'on' indicates that the interrupt    */
                        /*  procedure enables interrupts.  All other bits   */
                        /*  are reserved.                                   */
  USHORT IRQLevel;      /*  IRQ of interrupt handler that is being described*/
                        /*  by the following data.                          */
  USHORT CLIStack;      /*  Number of bytes of stack used in the interrupt  */
                        /*  procedure when interrupts are disabled.         */
  USHORT STIStack;      /*  Number of bytes of stack used after interrupt   */
                        /*  procedure enables interrupts.                   */
  USHORT EOIStack;      /*  Number of bytes of stack used after interrupt   */
                        /*  procedure issues EOI.                           */
  USHORT NestingLevel;  /*  Maximum number of levels that the device driver */
                        /*  expects to nest.                                */
} STACKUSAGEDATA;

Assembler

MOV   BX,OFFSET DS:StackUsage

Return Code

C

Success Indicator: Clear if successful.

Possible errors: Carry flag set if stack usage exceeds system maximum. If this happens, the physical device driver must uninstall itself.

Assembler

   'C' Clear if successful.

   'C' Set if stack usage exceeds system maximum.
       If this happens, the physical device driver must deinstall itself.

Remarks

The StackUsage data structure has the following format:

  StackUsage     STRUC
   SU_cbStruct   DW 14     ; Number of bytes in structure, including itself.
   SU_flags      DW ?      ; Bit 0x0001 'on' indicates that the interrupt
                           ; procedure enables interrupts.  All other bits
                           ; are reserved.
   SU_iIRQ       DW ?      ; IRQ of interrupt handler that is being
                           ; described by the following data.
   SU_cbStackCLI DW ?      ; Number of bytes of stack used in the
                           ; interrupt procedure when interrupts are disabled.
   SU_cbStackSTI DW ?      ; Number of bytes of stack used after interrupt
                           ; procedure enables interrupts.
   SU_cbStackEOI DW ?      ; Number of bytes of stack used after interrupt
                           ; procedure issues EOI.
   SU_cNest      DW ?      ; Maximum number of levels that the device
                           ; driver expects to nest.
  StackUsage     ENDS

A device must issue RegisterStackUsage once for each IRQ that it services. OS/2 2.1 (and later) supports a total of 8KB of interrupt stack.

Example Code

C

#include  "dhcalls.h"

USHORT APIENTRY DevHelp_RegisterStackUsage( PVOID StackUsageData )

Related Functions