/*! * @fn extern void CPUMON_Install_Cpuhools(void) * * @param None * * @return None No return needed * * @brief set up the interrupt handler (on a per-processor basis) * @brief Initialize the APIC in two phases (current CPU, then others) * */ extern VOID CPUMON_Install_Cpuhooks ( void ) { S32 me = 0; PVOID linear; CONTROL_Invoke_Parallel(cpumon_Save_Cpu, (PVOID)(size_t)me); CONTROL_Invoke_Parallel(cpumon_Init_Cpu, (PVOID)(size_t)me); linear = NULL; APIC_Init(&linear); CONTROL_Invoke_Parallel(APIC_Init, &linear); CONTROL_Invoke_Parallel(APIC_Install_Interrupt_Handler, (PVOID)(size_t)me); return; }
/*! * @fn VOID CONTROL_Invoke_Cpu (func, ctx, arg) * * @brief Set up a DPC call and insert it into the queue * * @param IN cpu_idx - the core id to dispatch this function to * IN func - function to be invoked by the specified core(s) * IN ctx - pointer to the parameter block for each function * invocation * * @return None * * <I>Special Notes:</I> * */ extern VOID CONTROL_Invoke_Cpu(int cpu_idx, VOID(*func) (PVOID), PVOID ctx) { CONTROL_Invoke_Parallel(func, ctx); return; }