OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-s390/] [sigp.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.