plic.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-05-20 bigmagic first version
  9. */
  10. #ifndef PLIC_H
  11. #define PLIC_H
  12. #include <rtconfig.h>
  13. /*
  14. * This machine puts platform-level interrupt controller (PLIC) here.
  15. * Here only list PLIC registers in Machine mode.
  16. *
  17. */
  18. #define VIRT_PLIC_BASE 0x0c000000L
  19. #define PLIC_PRIORITY_OFFSET (0x0)
  20. #define PLIC_PENDING_OFFSET (0x1000)
  21. #ifndef RISCV_S_MODE
  22. #define PLIC_MENABLE_OFFSET (0x2000)
  23. #define PLIC_MTHRESHOLD_OFFSET (0x200000)
  24. #define PLIC_MCLAIM_OFFSET (0x200004)
  25. #define PLIC_MCOMPLETE_OFFSET (0x200004)
  26. #define PLIC_ENABLE(hart) (VIRT_PLIC_BASE + PLIC_MENABLE_OFFSET + (hart) * 0x80)
  27. #define PLIC_THRESHOLD(hart) (VIRT_PLIC_BASE + PLIC_MTHRESHOLD_OFFSET + (hart) * 0x1000)
  28. #define PLIC_CLAIM(hart) (VIRT_PLIC_BASE + PLIC_MCLAIM_OFFSET + (hart) * 0x1000)
  29. #define PLIC_COMPLETE(hart) (VIRT_PLIC_BASE + PLIC_MCOMPLETE_OFFSET + (hart) * 0x1000)
  30. #else
  31. #define PLIC_SENABLE_OFFSET (0x2080)
  32. #define PLIC_STHRESHOLD_OFFSET (0x201000)
  33. #define PLIC_SCLAIM_OFFSET (0x201004)
  34. #define PLIC_SCOMPLETE_OFFSET (0x201004)
  35. #define PLIC_ENABLE(hart) (VIRT_PLIC_BASE + PLIC_SENABLE_OFFSET + (hart) * 0x80)
  36. #define PLIC_THRESHOLD(hart) (VIRT_PLIC_BASE + PLIC_STHRESHOLD_OFFSET + (hart) * 0x1000)
  37. #define PLIC_CLAIM(hart) (VIRT_PLIC_BASE + PLIC_SCLAIM_OFFSET + (hart) * 0x1000)
  38. #define PLIC_COMPLETE(hart) (VIRT_PLIC_BASE + PLIC_SCOMPLETE_OFFSET + (hart) * 0x1000)
  39. #endif
  40. #define PLIC_PRIORITY(id) (VIRT_PLIC_BASE + PLIC_PRIORITY_OFFSET + (id) * 4)
  41. #define PLIC_PENDING(id) (VIRT_PLIC_BASE + PLIC_PENDING_OFFSET + ((id) / 32))
  42. void plic_set_priority(int irq, int priority);
  43. void plic_irq_enable(int irq);
  44. void plic_irq_disable(int irq);
  45. void plic_set_threshold(int mthreshold);
  46. int plic_claim(void);
  47. void plic_complete(int irq);
  48. #endif