Jump to content

AcpiExecSMPFunction: Difference between revisions

From EDM2
Created page with "Execute a subprogram on all CPUs simultaneously. ACPI_STATUS AcpiExecSMPFunction (ACPIRUNATALLCPU SubProgram, UINT32 CPUMask, UINT32 Flags, void *Context) ; SubProgram : A..."
 
No edit summary
Line 16: Line 16:


; Note: In Uni kernel call imeditialy w/o any checking CPU number. Running in kernel time.
; Note: In Uni kernel call imeditialy w/o any checking CPU number. Running in kernel time.
==Example==
    PACPIFUNCTION ACPIcall = NULL;
    ACPIcall = (PACPIFUNCTION)InitACPICall("MyDriver");
    if (ACPIcall)
    {
        ACPIcall->AcpiOsPrintf("Mydriver is good addr:%x\n",ACPIcall);
    }

Revision as of 02:31, 9 April 2019

Execute a subprogram on all CPUs simultaneously.

ACPI_STATUS  AcpiExecSMPFunction (ACPIRUNATALLCPU SubProgram, UINT32 CPUMask, UINT32 Flags, void *Context)
SubProgram
Address subprogram, which called in each CPU according with CPUMask, must declare as ACPI_STATUS APIENTRY SubProgram(void *Context)
CPUMask
CPUs for execute, low word is bit field, where bit number is number of CPU for execute, 0xffffffff mean "all CPU"
Flags
Flag, can be:
SMPEXEC_IPITIME
run from IPI (interrupt time) , stack is NOT OS/2 stack
SMPEXEC_TASKTIME
run from PSD_SET_PROC_STATE, PSD stack, kernel time
SMPEXEC_WBINDVD
Flush cache at all CPU, parameter SubProgram ignore with this.
SMPEXEC_SYNC
synchronize CPU before run (now tested with SMPEXEC_TASKTIME )
Context
Context which passed as parameter to SubProgram
Note
In Uni kernel call imeditialy w/o any checking CPU number. Running in kernel time.

Example

   PACPIFUNCTION ACPIcall = NULL;

   ACPIcall = (PACPIFUNCTION)InitACPICall("MyDriver");
   if (ACPIcall)
   {
       ACPIcall->AcpiOsPrintf("Mydriver is good addr:%x\n",ACPIcall);
   }