AcpiExecSMPFunction: Difference between revisions
Appearance
	
	
|  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 01: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);
   }