dsp.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Copyright (C) 2005 Mips Technologies
  4. * Author: Chris Dearman, [email protected] derived from fpu.h
  5. */
  6. #ifndef _ASM_DSP_H
  7. #define _ASM_DSP_H
  8. #include <asm/cpu.h>
  9. #include <asm/cpu-features.h>
  10. #include <asm/hazards.h>
  11. #include <asm/mipsregs.h>
  12. #define DSP_DEFAULT 0x00000000
  13. #define DSP_MASK 0x3f
  14. #define __enable_dsp_hazard() \
  15. do { \
  16. asm("_ehb"); \
  17. } while (0)
  18. static inline void __init_dsp(void)
  19. {
  20. mthi1(0);
  21. mtlo1(0);
  22. mthi2(0);
  23. mtlo2(0);
  24. mthi3(0);
  25. mtlo3(0);
  26. wrdsp(DSP_DEFAULT, DSP_MASK);
  27. }
  28. static inline void init_dsp(void)
  29. {
  30. if (cpu_has_dsp)
  31. __init_dsp();
  32. }
  33. #define __save_dsp(tsk) \
  34. do { \
  35. tsk->thread.dsp.dspr[0] = mfhi1(); \
  36. tsk->thread.dsp.dspr[1] = mflo1(); \
  37. tsk->thread.dsp.dspr[2] = mfhi2(); \
  38. tsk->thread.dsp.dspr[3] = mflo2(); \
  39. tsk->thread.dsp.dspr[4] = mfhi3(); \
  40. tsk->thread.dsp.dspr[5] = mflo3(); \
  41. tsk->thread.dsp.dspcontrol = rddsp(DSP_MASK); \
  42. } while (0)
  43. #define save_dsp(tsk) \
  44. do { \
  45. if (cpu_has_dsp) \
  46. __save_dsp(tsk); \
  47. } while (0)
  48. #define __restore_dsp(tsk) \
  49. do { \
  50. mthi1(tsk->thread.dsp.dspr[0]); \
  51. mtlo1(tsk->thread.dsp.dspr[1]); \
  52. mthi2(tsk->thread.dsp.dspr[2]); \
  53. mtlo2(tsk->thread.dsp.dspr[3]); \
  54. mthi3(tsk->thread.dsp.dspr[4]); \
  55. mtlo3(tsk->thread.dsp.dspr[5]); \
  56. wrdsp(tsk->thread.dsp.dspcontrol, DSP_MASK); \
  57. } while (0)
  58. #define restore_dsp(tsk) \
  59. do { \
  60. if (cpu_has_dsp) \
  61. __restore_dsp(tsk); \
  62. } while (0)
  63. #define __get_dsp_regs(tsk) \
  64. ({ \
  65. if (tsk == current) \
  66. __save_dsp(current); \
  67. \
  68. tsk->thread.dsp.dspr; \
  69. })
  70. #endif /* _ASM_DSP_H */