Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
s390
crypto
ap_bus.h
Go to the documentation of this file.
1
/*
2
* Copyright IBM Corp. 2006, 2012
3
* Author(s): Cornelia Huck <
[email protected]
>
4
* Martin Schwidefsky <
[email protected]
>
5
* Ralph Wuerthner <
[email protected]
>
6
* Felix Beck <
[email protected]
>
7
* Holger Dengler <
[email protected]
>
8
*
9
* Adjunct processor bus header file.
10
*
11
* This program is free software; you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License as published by
13
* the Free Software Foundation; either version 2, or (at your option)
14
* any later version.
15
*
16
* This program is distributed in the hope that it will be useful,
17
* but WITHOUT ANY WARRANTY; without even the implied warranty of
18
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
* GNU General Public License for more details.
20
*
21
* You should have received a copy of the GNU General Public License
22
* along with this program; if not, write to the Free Software
23
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24
*/
25
26
#ifndef _AP_BUS_H_
27
#define _AP_BUS_H_
28
29
#include <linux/device.h>
30
#include <
linux/mod_devicetable.h
>
31
#include <linux/types.h>
32
33
#define AP_DEVICES 64
/* Number of AP devices. */
34
#define AP_DOMAINS 16
/* Number of AP domains. */
35
#define AP_MAX_RESET 90
/* Maximum number of resets. */
36
#define AP_RESET_TIMEOUT (HZ/2)
/* Time in ticks for reset timeouts. */
37
#define AP_CONFIG_TIME 30
/* Time in seconds between AP bus rescans. */
38
#define AP_POLL_TIME 1
/* Time in ticks between receive polls. */
39
40
extern
int
ap_domain_index
;
41
46
typedef
unsigned
int
ap_qid_t
;
47
48
#define AP_MKQID(_device,_queue) (((_device) & 63) << 8 | ((_queue) & 15))
49
#define AP_QID_DEVICE(_qid) (((_qid) >> 8) & 63)
50
#define AP_QID_QUEUE(_qid) ((_qid) & 15)
51
66
struct
ap_queue_status
{
67
unsigned
int
queue_empty
: 1;
68
unsigned
int
replies_waiting
: 1;
69
unsigned
int
queue_full
: 1;
70
unsigned
int
pad1
: 4;
71
unsigned
int
int_enabled
: 1;
72
unsigned
int
response_code
: 8;
73
unsigned
int
pad2
: 16;
74
}
__packed
;
75
76
#define AP_QUEUE_STATUS_INVALID \
77
{ 1, 1, 1, 0xF, 1, 0xFF, 0xFFFF }
78
79
static
inline
80
int
ap_queue_status_invalid_test(
struct
ap_queue_status
*
status
)
81
{
82
struct
ap_queue_status
invalid =
AP_QUEUE_STATUS_INVALID
;
83
return
!(
memcmp
(status, &invalid,
sizeof
(
struct
ap_queue_status
)));
84
}
85
86
#define AP_MAX_BITS 31
87
static
inline
int
ap_test_bit(
unsigned
int
*
ptr
,
unsigned
int
nr
)
88
{
89
if
(nr >
AP_MAX_BITS
)
90
return
0;
91
return
(*ptr & (0x80000000u >> nr)) != 0;
92
}
93
94
#define AP_RESPONSE_NORMAL 0x00
95
#define AP_RESPONSE_Q_NOT_AVAIL 0x01
96
#define AP_RESPONSE_RESET_IN_PROGRESS 0x02
97
#define AP_RESPONSE_DECONFIGURED 0x03
98
#define AP_RESPONSE_CHECKSTOPPED 0x04
99
#define AP_RESPONSE_BUSY 0x05
100
#define AP_RESPONSE_INVALID_ADDRESS 0x06
101
#define AP_RESPONSE_OTHERWISE_CHANGED 0x07
102
#define AP_RESPONSE_Q_FULL 0x10
103
#define AP_RESPONSE_NO_PENDING_REPLY 0x10
104
#define AP_RESPONSE_INDEX_TOO_BIG 0x11
105
#define AP_RESPONSE_NO_FIRST_PART 0x13
106
#define AP_RESPONSE_MESSAGE_TOO_BIG 0x15
107
#define AP_RESPONSE_REQ_FAC_NOT_INST 0x16
108
109
/*
110
* Known device types
111
*/
112
#define AP_DEVICE_TYPE_PCICC 3
113
#define AP_DEVICE_TYPE_PCICA 4
114
#define AP_DEVICE_TYPE_PCIXCC 5
115
#define AP_DEVICE_TYPE_CEX2A 6
116
#define AP_DEVICE_TYPE_CEX2C 7
117
#define AP_DEVICE_TYPE_CEX3A 8
118
#define AP_DEVICE_TYPE_CEX3C 9
119
#define AP_DEVICE_TYPE_CEX4 10
120
121
/*
122
* Known function facilities
123
*/
124
#define AP_FUNC_MEX4K 1
125
#define AP_FUNC_CRT4K 2
126
#define AP_FUNC_COPRO 3
127
#define AP_FUNC_ACCEL 4
128
129
/*
130
* AP reset flag states
131
*/
132
#define AP_RESET_IGNORE 0
/* request timeout will be ignored */
133
#define AP_RESET_ARMED 1
/* request timeout timer is active */
134
#define AP_RESET_DO 2
/* AP reset required */
135
136
struct
ap_device
;
137
struct
ap_message
;
138
139
struct
ap_driver
{
140
struct
device_driver
driver
;
141
struct
ap_device_id
*
ids
;
142
143
int
(*
probe
)(
struct
ap_device
*);
144
void
(*
remove
)(
struct
ap_device
*);
145
int
request_timeout
;
/* request timeout in jiffies */
146
};
147
148
#define to_ap_drv(x) container_of((x), struct ap_driver, driver)
149
150
int
ap_driver_register
(
struct
ap_driver
*,
struct
module
*,
char
*);
151
void
ap_driver_unregister
(
struct
ap_driver
*);
152
153
struct
ap_device
{
154
struct
device
device
;
155
struct
ap_driver
*
drv
;
/* Pointer to AP device driver. */
156
spinlock_t
lock
;
/* Per device lock. */
157
struct
list_head
list
;
/* private list of all AP devices. */
158
159
ap_qid_t
qid
;
/* AP queue id. */
160
int
queue_depth
;
/* AP queue depth.*/
161
int
device_type
;
/* AP device type. */
162
unsigned
int
functions
;
/* AP device function bitfield. */
163
int
unregistered
;
/* marks AP device as unregistered */
164
struct
timer_list
timeout
;
/* Timer for request timeouts. */
165
int
reset
;
/* Reset required after req. timeout. */
166
167
int
queue_count
;
/* # messages currently on AP queue. */
168
169
struct
list_head
pendingq
;
/* List of message sent to AP queue. */
170
int
pendingq_count
;
/* # requests on pendingq list. */
171
struct
list_head
requestq
;
/* List of message yet to be sent. */
172
int
requestq_count
;
/* # requests on requestq list. */
173
int
total_request_count
;
/* # requests ever for this AP device. */
174
175
struct
ap_message
*
reply
;
/* Per device reply message. */
176
177
void
*
private
;
/* ap driver private pointer. */
178
};
179
180
#define to_ap_dev(x) container_of((x), struct ap_device, device)
181
182
struct
ap_message
{
183
struct
list_head
list
;
/* Request queueing. */
184
unsigned
long
long
psmid
;
/* Message id. */
185
void
*
message
;
/* Pointer to message buffer. */
186
size_t
length
;
/* Message length. */
187
188
void
*
private
;
/* ap driver private pointer. */
189
unsigned
int
special
:1;
/* Used for special commands. */
190
/* receive is called from tasklet context */
191
void
(*
receive
)(
struct
ap_device
*,
struct
ap_message
*,
192
struct
ap_message
*);
193
};
194
195
struct
ap_config_info
{
196
unsigned
int
special_command
:1;
197
unsigned
int
ap_extended
:1;
198
unsigned
char
reserved1
:6;
199
unsigned
char
reserved2
[15];
200
unsigned
int
apm
[8];
/* AP ID mask */
201
unsigned
int
aqm
[8];
/* AP queue mask */
202
unsigned
int
adm
[8];
/* AP domain mask */
203
unsigned
char
reserved4
[16];
204
}
__packed
;
205
206
#define AP_DEVICE(dt) \
207
.dev_type=(dt), \
208
.match_flags=AP_DEVICE_ID_MATCH_DEVICE_TYPE,
209
215
static
inline
void
ap_init_message(
struct
ap_message
*ap_msg)
216
{
217
ap_msg->
psmid
= 0;
218
ap_msg->
length
= 0;
219
ap_msg->
special
= 0;
220
ap_msg->
receive
=
NULL
;
221
}
222
223
/*
224
* Note: don't use ap_send/ap_recv after using ap_queue_message
225
* for the first time. Otherwise the ap message queue will get
226
* confused.
227
*/
228
int
ap_send
(
ap_qid_t
,
unsigned
long
long
,
void
*,
size_t
);
229
int
ap_recv
(
ap_qid_t
,
unsigned
long
long
*,
void
*,
size_t
);
230
231
void
ap_queue_message
(
struct
ap_device
*ap_dev,
struct
ap_message
*ap_msg);
232
void
ap_cancel_message
(
struct
ap_device
*ap_dev,
struct
ap_message
*ap_msg);
233
void
ap_flush_queue
(
struct
ap_device
*ap_dev);
234
void
ap_bus_force_rescan
(
void
);
235
236
int
ap_module_init
(
void
);
237
void
ap_module_exit
(
void
);
238
239
#endif
/* _AP_BUS_H_ */
Generated on Thu Jan 10 2013 14:17:58 for Linux Kernel by
1.8.2