The following table is a cross-reference for DevHlp function names with request code. The request code is loaded into the DL register before calling Device_Help.
┌──────────────────────────────┬─────┬────────────────────────────────────────┐ │Function Name │Code │Description │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_SchedClock │0x0 │Called each timer tick │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_DevDone │0x1 │Device I/O complete │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_Yield │0x2 │yield CPU if resched set │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_TCYield │0x3 │yield to time critical task │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ProcBlock │0x4 │Block on event │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ProcRun │0x5 │Unblock process │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_SemRequest │0x6 │claim a semaphore │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_SemClear │0x7 │release a semaphore │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_SemHandle │0x8 │obtain a semaphore handle │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PushRequest │0x9 │Push the request │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PullRequest │0xA │Pull next request from Q │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PullParticular │0xB │Pull a specific request │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_SortRequest │0xC │Push request in sorted order │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_AllocReqPacket │0xD │allocate request packet │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_FreeReqPacket │0xE │free request packet │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_QueueInit │0xF │Init/Clear char queue │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_QueueFlush │0x10 │flush queue │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_QueueWrite │0x11 │Put a char in the queue │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_QueueRead │0x12 │Get a char from the queue │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_Lock │0x13 │Lock segment │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_Unlock │0x14 │Unlock segment │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PhysToVirt │0x15 │convert physical address to virtual │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_VirtToPhys │0x16 │convert virtual address to physical │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PhysToUVirt │0x17 │convert physical to LDT │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_AllocPhys │0x18 │allocate physical memory │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_FreePhys │0x19 │free physical memory │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_SetROMVector │0x1A │set a ROM service routine vector │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_SetIRQ │0x1B │set an IRQ interrupt │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_UnSetIRQ │0x1C │unset an IRQ interrupt │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_SetTimer │0x1D │set timer request handler │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ResetTimer │0x1E │unset timer request handler │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_MonitorCreate │0x1F │create a monitor │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_Register │0x20 │install a monitor │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_DeRegister │0x21 │remove a monitor │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_MonWrite │0x22 │pass data records to monitor │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_MonFlush │0x23 │remove all data from stream │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_GetDOSVar │0x24 │Return pointer to DOS variable │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_SendEvent │0x25 │an event occurred │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ROMCritSection │0x26 │ROM Critical Section │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_VerifyAccess │0x27 │Verify access to memory │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_RAS │0x28 │Put info in RAS trace buffer │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ABIOSGetParms │0x29 │Get ABIOS Calling Parms │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_AttachDD │0x2A │Attach to a device driver │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_InternalError │0x2B │Signal an internal error │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ModifyPriority │0x2C │Undocumented (used by PM) │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_AllocGDTSelector │0x2D │Allocate GDT Selectors │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PhysToGDTSelector │0x2E │Convert phys addr to GDT sel │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_RealToProt │0x2F │Change from real to protected mode │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ProtToReal │0x30 │Change from protected to real mode │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_EOI │0x31 │Send EOI to PIC │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_UnPhysToVirt │0x32 │mark completion of PhysToVirt │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_TickCount │0x33 │modify timer │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_GetLIDEntry │0x34 │Obtain Logical ID │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_FreeLIDEntry │0x35 │Release Logical ID │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ABIOSCall │0x36 │Call ABIOS │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ABIOSCommonEntry │0x37 │Invoke Common Entry Point │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_GetDeviceBlock │0x38 │Get ABIOS Device Block │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_RegisterStackUsag │0x3A │Register for stack usage │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_LogEntry │0x3B │Place data in log buffer │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_VideoPause │0x3C │Video pause on/off - D607 │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_Save_Message │0x3D │Save msg in SysInit Message Table │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_SegRealloc │0x3E │Realloc DD protect mode segment │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PutWaitingQueue │0x3F │Put I/O request on waiting queue │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_GetWaitingQueue │0x40 │Get I/O request from waiting queue │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PhysToSys │0x41 │Address conversion for the AOX │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PhysToSysHook │0x42 │Address conversion for the AOX │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_RegisterDeviceClass │0x43 │Register DC entry point │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_RegisterPDD │0x50 │Register PDD entry point with VDM │ │ │ │manager for later PDD-VDD communication │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_RegisterBeep │0x51 │register PTD beep service entry point │ │ │ │with kernel │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_Beep │0x52 │preempt beep service via PTD │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_FreeGDTSelector │0x53 │Free allocated GDT selector │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PhysToGDTSel │0x54 │Convert Phys Addr to GDT sel with given │ │ │ │access │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_VMLock │0x55 │Lock linear address range │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_VMUnlock │0x56 │Unlock address range │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_VMAlloc │0x56 │Allocate memory │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_VMFree │0x58 │Free memory or mapping │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_VMProcessToGlobal │0x59 │Create global mapping to process memory │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_VMGlobalToProcess │0x5A │Create process mapping to global memory │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_VirtToLin │0x5B │Convert virtual address to linear │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_LinToGDTSelector │0x5C │Convert linear address to virtual │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_GetDescInfo │0x5D │Return descriptor information │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_LinToPageList │0x5E │build pagelist array from lin addr │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PageListToLin │0x5F │map page list array to lin addr │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PageListToGDTSelector │0x60 │map page list array to GDT sel. │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_RegisterTmrDD │0x61 │Register TMR Device Driver. │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_RegisterPerfCtrs │0x62 │Register device driver perf. ctrs (PVW).│ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_AllocateCtxHook │0x63 │Allocate a context hook │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_FreeCtxHook │0x64 │Free a context hook │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ArmCtxHook │0x65 │Arm a context hook │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_VMSetMem │0x66 │commit/decommit memory │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_OpenEventSem │0x67 │open an event semaphore │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_CloseEventSem │0x68 │close an event semaphore │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PostEventSem │0x69 │post an event semaphore │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ResetEventSem │0x6A │reset an event semaphore │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_RegisterFreq │0x6B │register PTD freq service entry point │ │ │ │with kernel │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_DynamicAPI │0x6C │add a dynamic API │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ProcRun2 │0x6D │Unblock process via procrun2 │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_CreateInt13VDM │0x6E │Create Int13 VDM (Internal Only) │ │ │ │OEMINT13 │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_RegisterKrnlExit │0x6F │Used to capture Kernel Exits F78693 │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_PMPostEventSem │0x70 │PM Post Event Semaphore │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_AcquireSpinLock │0x71 │acquire Spin Lock (SMP only) │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ReleaseSpinLock │0x72 │release Spin Lock (SMP only) │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_InitIntMouseCursorData │0x73 │Initialize Mouse/Cursor Data (SMP only) │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_StartIntMouseCursor │0x74 │Start Int Time Mouse/Cursor (SMP only) │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_EndIntMouseCursor │0x75 │End Int Time Mouse/Cursor (SMP only) │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_Port_IO │0x76 │Port I/O (SMP only) │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_SetIRQMask │0x77 │Set/Unset an IRQ Mask (SMP only) │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_GetIRQMask │0x78 │Retrieve an IRQ Mask state (SMP only) │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_CreateSpinLock │0x79 │create Spin Lock (SMP only) │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_FreeSpinLock │0x7A │free Spin Lock (SMP only) │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_KillProc │0x7D │Kill Proc │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_QSysState │0x7E │Query System State │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_OpenFile │0x7F │Ring-0 File system Write │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_CloseFile │0x80 │Ring-0 File system Seek │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ReadFile │0x81 │Ring-0 File system Read │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_ReadFileAt │0x82 │File system Read at (seek) │ ├──────────────────────────────┼─────┼────────────────────────────────────────┤ │DevHlp_RegisterKDD │0x83 │Register Driver with kernel debugger │ └──────────────────────────────┴─────┴────────────────────────────────────────┘