smp.h 1011 B

12345678910111213141516171819202122232425262728293031323334
  1. #ifndef __SMP_IPI_H__
  2. #define __SMP_IPI_H__
  3. #include <rtthread.h>
  4. typedef void (*rt_smp_call_func_back)(void *data);
  5. typedef rt_bool_t (*rt_smp_cond)(int cpu, void *info);
  6. #define SMP_CALL_EVENT_FUNC 0x1
  7. #define SMP_CALL_WAIT_ALL (1 << 0)
  8. #define SMP_CALL_NO_WAIT (1 << 1)
  9. #define RT_ALL_CPU ((1 << RT_CPUS_NR) - 1)
  10. struct rt_smp_event
  11. {
  12. int cpu_mask;
  13. int event_id;
  14. void *data;
  15. rt_smp_call_func_back func;
  16. };
  17. struct rt_smp_call
  18. {
  19. struct rt_spinlock lock;
  20. struct rt_smp_event event;
  21. };
  22. void rt_smp_call_ipi_handler(int vector, void *param);
  23. void rt_smp_call_each_cpu(rt_smp_call_func_back func, void *data,rt_uint8_t flag);
  24. void rt_smp_call_each_cpu_cond(rt_smp_call_func_back func, void *data,rt_uint8_t flag,rt_smp_cond cond_func);
  25. void rt_smp_call_any_cpu(int cpu_mask,rt_smp_call_func_back func, void *data,rt_uint8_t flag);
  26. void rt_smp_call_any_cpu_cond(int cpu_mask,rt_smp_call_func_back func, void *data,rt_uint8_t flag,rt_smp_cond cond_func);
  27. void rt_smp_init(void);
  28. #endif