home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-s390 / sigp.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.8 KB  |  132 lines

  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.  *               Heiko Carstens (heiko.carstens@de.ibm.com)
  9.  *
  10.  *  sigp.h by D.J. Barrow (c) IBM 1999
  11.  *  contains routines / structures for signalling other S/390 processors in an
  12.  *  SMP configuration.
  13.  */
  14.  
  15. #ifndef __SIGP__
  16. #define __SIGP__
  17.  
  18. #include <asm/ptrace.h>
  19. #include <asm/atomic.h>
  20.  
  21. /* get real cpu address from logical cpu number */
  22. extern volatile int __cpu_logical_map[];
  23.  
  24. typedef enum
  25. {
  26.     sigp_unassigned=0x0,
  27.     sigp_sense,
  28.     sigp_external_call,
  29.     sigp_emergency_signal,
  30.     sigp_start,
  31.     sigp_stop,
  32.     sigp_restart,
  33.     sigp_unassigned1,
  34.     sigp_unassigned2,
  35.     sigp_stop_and_store_status,
  36.     sigp_unassigned3,
  37.     sigp_initial_cpu_reset,
  38.     sigp_cpu_reset,
  39.     sigp_set_prefix,
  40.     sigp_store_status_at_address,
  41.     sigp_store_extended_status_at_address
  42. } sigp_order_code;
  43.  
  44. typedef __u32 sigp_status_word;
  45.  
  46. typedef enum
  47. {
  48.         sigp_order_code_accepted=0,
  49.     sigp_status_stored,
  50.     sigp_busy,
  51.     sigp_not_operational
  52. } sigp_ccode;
  53.  
  54.  
  55. /*
  56.  * Definitions for the external call
  57.  */
  58.  
  59. /* 'Bit' signals, asynchronous */
  60. typedef enum
  61. {
  62.     ec_schedule=0,
  63.     ec_call_function,
  64.     ec_bit_last
  65. } ec_bit_sig;
  66.  
  67. /*
  68.  * Signal processor
  69.  */
  70. static inline sigp_ccode
  71. signal_processor(__u16 cpu_addr, sigp_order_code order_code)
  72. {
  73.     sigp_ccode ccode;
  74.  
  75.     __asm__ __volatile__(
  76.         "    sr     1,1\n"        /* parameter=0 in gpr 1 */
  77.         "    sigp   1,%1,0(%2)\n"
  78.         "    ipm    %0\n"
  79.         "    srl    %0,28\n"
  80.         : "=d" (ccode)
  81.         : "d" (__cpu_logical_map[cpu_addr]), "a" (order_code)
  82.         : "cc" , "memory", "1" );
  83.     return ccode;
  84. }
  85.  
  86. /*
  87.  * Signal processor with parameter
  88.  */
  89. static inline sigp_ccode
  90. signal_processor_p(__u32 parameter, __u16 cpu_addr,
  91.            sigp_order_code order_code)
  92. {
  93.     sigp_ccode ccode;
  94.     
  95.     __asm__ __volatile__(
  96.         "    lr     1,%1\n"       /* parameter in gpr 1 */
  97.         "    sigp   1,%2,0(%3)\n"
  98.         "    ipm    %0\n"
  99.         "    srl    %0,28\n"
  100.         : "=d" (ccode)
  101.         : "d" (parameter), "d" (__cpu_logical_map[cpu_addr]),
  102.                   "a" (order_code)
  103.         : "cc" , "memory", "1" );
  104.     return ccode;
  105. }
  106.  
  107. /*
  108.  * Signal processor with parameter and return status
  109.  */
  110. static inline sigp_ccode
  111. signal_processor_ps(__u32 *statusptr, __u32 parameter,
  112.             __u16 cpu_addr, sigp_order_code order_code)
  113. {
  114.     sigp_ccode ccode;
  115.     
  116.     __asm__ __volatile__(
  117.         "    sr     2,2\n"        /* clear status */
  118.         "    lr     3,%2\n"       /* parameter in gpr 3 */
  119.         "    sigp   2,%3,0(%4)\n"
  120.         "    st     2,%1\n"
  121.         "    ipm    %0\n"
  122.         "    srl    %0,28\n"
  123.         : "=d" (ccode), "=m" (*statusptr)
  124.         : "d" (parameter), "d" (__cpu_logical_map[cpu_addr]),
  125.                   "a" (order_code)
  126.         : "cc" , "memory", "2" , "3"
  127.         );
  128.    return ccode;
  129. }
  130.  
  131. #endif /* __SIGP__ */
  132.