processor.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // SPDX-License-Identifier: GPL-2.0
  2. // Copyright (C) 2005-2017 Andes Technology Corporation
  3. #ifndef __ASM_NDS32_PROCESSOR_H
  4. #define __ASM_NDS32_PROCESSOR_H
  5. #ifdef __KERNEL__
  6. #include <asm/ptrace.h>
  7. #include <asm/types.h>
  8. #include <asm/sigcontext.h>
  9. #define KERNEL_STACK_SIZE PAGE_SIZE
  10. #define STACK_TOP TASK_SIZE
  11. #define STACK_TOP_MAX TASK_SIZE
  12. struct cpu_context {
  13. unsigned long r6;
  14. unsigned long r7;
  15. unsigned long r8;
  16. unsigned long r9;
  17. unsigned long r10;
  18. unsigned long r11;
  19. unsigned long r12;
  20. unsigned long r13;
  21. unsigned long r14;
  22. unsigned long fp;
  23. unsigned long pc;
  24. unsigned long sp;
  25. };
  26. struct thread_struct {
  27. struct cpu_context cpu_context; /* cpu context */
  28. /* fault info */
  29. unsigned long address;
  30. unsigned long trap_no;
  31. unsigned long error_code;
  32. };
  33. #define INIT_THREAD { }
  34. #ifdef __NDS32_EB__
  35. #define PSW_DE PSW_mskBE
  36. #else
  37. #define PSW_DE 0x0
  38. #endif
  39. #ifdef CONFIG_WBNA
  40. #define PSW_valWBNA PSW_mskWBNA
  41. #else
  42. #define PSW_valWBNA 0x0
  43. #endif
  44. #ifdef CONFIG_HWZOL
  45. #define PSW_valINIT (PSW_CPL_ANY | PSW_mskAEN | PSW_valWBNA | PSW_mskDT | PSW_mskIT | PSW_DE | PSW_mskGIE)
  46. #else
  47. #define PSW_valINIT (PSW_CPL_ANY | PSW_valWBNA | PSW_mskDT | PSW_mskIT | PSW_DE | PSW_mskGIE)
  48. #endif
  49. #define start_thread(regs,pc,stack) \
  50. ({ \
  51. memzero(regs, sizeof(struct pt_regs)); \
  52. forget_syscall(regs); \
  53. regs->ipsw = PSW_valINIT; \
  54. regs->ir0 = (PSW_CPL_ANY | PSW_valWBNA | PSW_mskDT | PSW_mskIT | PSW_DE | PSW_SYSTEM | PSW_INTL_1); \
  55. regs->ipc = pc; \
  56. regs->sp = stack; \
  57. })
  58. /* Forward declaration, a strange C thing */
  59. struct task_struct;
  60. /* Free all resources held by a thread. */
  61. #define release_thread(thread) do { } while(0)
  62. /* Prepare to copy thread state - unlazy all lazy status */
  63. #define prepare_to_copy(tsk) do { } while (0)
  64. unsigned long get_wchan(struct task_struct *p);
  65. #define cpu_relax() barrier()
  66. #define task_pt_regs(task) \
  67. ((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \
  68. - 8) - 1)
  69. /*
  70. * Create a new kernel thread
  71. */
  72. extern int kernel_thread(int (*fn) (void *), void *arg, unsigned long flags);
  73. #define KSTK_EIP(tsk) instruction_pointer(task_pt_regs(tsk))
  74. #define KSTK_ESP(tsk) user_stack_pointer(task_pt_regs(tsk))
  75. #endif
  76. #endif /* __ASM_NDS32_PROCESSOR_H */