sigp.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  include/asm-s390/sigp.h
  3.  *
  4.  *  S390 version
  5.  *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
  6.  *    Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
  7.  *               Martin Schwidefsky (schwidefsky@de.ibm.com)
  8.  *
  9.  *  sigp.h by D.J. Barrow (c) IBM 1999
  10.  *  contains routines / structures for signalling other S/390 processors in an
  11.  *  SMP configuration.
  12.  */
  13. #ifndef __SIGP__
  14. #define __SIGP__
  15. #include <asm/ptrace.h>
  16. #include <asm/atomic.h>
  17. /* get real cpu address from logical cpu number */
  18. extern volatile int __cpu_logical_map[];
  19. typedef enum
  20. {
  21. sigp_unassigned=0x0,
  22. sigp_sense,
  23. sigp_external_call,
  24. sigp_emergency_signal,
  25. sigp_start,
  26. sigp_stop,
  27. sigp_restart,
  28. sigp_unassigned1,
  29. sigp_unassigned2,
  30. sigp_stop_and_store_status,
  31. sigp_unassigned3,
  32. sigp_initial_cpu_reset,
  33. sigp_cpu_reset,
  34. sigp_set_prefix,
  35. sigp_store_status_at_address,
  36. sigp_store_extended_status_at_address
  37. } sigp_order_code;
  38. typedef __u32 sigp_status_word;
  39. typedef enum
  40. {
  41.         sigp_order_code_accepted=0,
  42. sigp_status_stored,
  43. sigp_busy,
  44. sigp_not_operational
  45. } sigp_ccode;
  46. /*
  47.  * Definitions for the external call
  48.  */
  49. /* 'Bit' signals, asynchronous */
  50. typedef enum
  51. {
  52. ec_schedule=0,
  53.         ec_restart,
  54.         ec_halt,
  55.         ec_power_off,
  56. ec_call_function,
  57. ec_bit_last
  58. } ec_bit_sig;
  59. /*
  60.  * Signal processor
  61.  */
  62. extern __inline__ sigp_ccode
  63. signal_processor(__u16 cpu_addr, sigp_order_code order_code)
  64. {
  65. sigp_ccode ccode;
  66. __asm__ __volatile__(
  67. "    sgr    1,1n"        /* parameter=0 in gpr 1 */
  68. "    sigp   1,%1,0(%2)n"
  69. "    ipm    %0n"
  70. "    srl    %0,28"
  71. : "=d" (ccode)
  72. : "d" (__cpu_logical_map[cpu_addr]), "a" (order_code)
  73. : "cc" , "memory", "1" );
  74. return ccode;
  75. }
  76. /*
  77.  * Signal processor with parameter
  78.  */
  79. extern __inline__ sigp_ccode
  80. signal_processor_p(__u64 parameter,__u16 cpu_addr,sigp_order_code order_code)
  81. {
  82. sigp_ccode ccode;
  83. __asm__ __volatile__(
  84. "    lgr    1,%1n"       /* parameter in gpr 1 */
  85. "    sigp   1,%2,0(%3)n"
  86. "    ipm    %0n"
  87. "    srl    %0,28n"
  88. : "=d" (ccode)
  89. : "d" (parameter), "d" (__cpu_logical_map[cpu_addr]),
  90.                   "a" (order_code)
  91. : "cc" , "memory", "1" );
  92. return ccode;
  93. }
  94. /*
  95.  * Signal processor with parameter and return status
  96.  */
  97. extern __inline__ sigp_ccode
  98. signal_processor_ps(__u32 *statusptr, __u64 parameter,
  99.     __u16 cpu_addr, sigp_order_code order_code)
  100. {
  101. sigp_ccode ccode;
  102. __asm__ __volatile__(
  103. "    sgr    2,2n"        /* clear status so it doesn't contain rubbish if not saved. */
  104. "    lgr    3,%2n"       /* parameter in gpr 3 */
  105. "    sigp   2,%3,0(%4)n"
  106. "    stg    2,%1n"
  107. "    ipm    %0n"
  108. "    srl    %0,28n"
  109. : "=d" (ccode), "=m" (*statusptr)
  110. : "d" (parameter), "d" (__cpu_logical_map[cpu_addr]),
  111.                   "a" (order_code)
  112. : "cc" , "memory", "2" , "3"
  113. );
  114.    return ccode;
  115. }
  116. #endif __SIGP__