aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-10-25 07:25:22 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-10-25 07:25:22 -0400
commit8a9ea3237e7eb5c25f09e429ad242ae5a3d5ea22 (patch)
treea0a63398a9983667d52cbbbf4e2405b4f22b1d83 /arch/s390
parent1be025d3cb40cd295123af2c394f7229ef9b30ca (diff)
parent8b3408f8ee994973869d8ba32c5bf482bc4ddca4 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1745 commits) dp83640: free packet queues on remove dp83640: use proper function to free transmit time stamping packets ipv6: Do not use routes from locally generated RAs |PATCH net-next] tg3: add tx_dropped counter be2net: don't create multiple RX/TX rings in multi channel mode be2net: don't create multiple TXQs in BE2 be2net: refactor VF setup/teardown code into be_vf_setup/clear() be2net: add vlan/rx-mode/flow-control config to be_setup() net_sched: cls_flow: use skb_header_pointer() ipv4: avoid useless call of the function check_peer_pmtu TCP: remove TCP_DEBUG net: Fix driver name for mdio-gpio.c ipv4: tcp: fix TOS value in ACK messages sent from TIME_WAIT rtnetlink: Add missing manual netlink notification in dev_change_net_namespaces ipv4: fix ipsec forward performance regression jme: fix irq storm after suspend/resume route: fix ICMP redirect validation net: hold sock reference while processing tx timestamps tcp: md5: add more const attributes Add ethtool -g support to virtio_net ... Fix up conflicts in: - drivers/net/Kconfig: The split-up generated a trivial conflict with removal of a stale reference to Documentation/networking/net-modules.txt. Remove it from the new location instead. - fs/sysfs/dir.c: Fairly nasty conflicts with the sysfs rb-tree usage, conflicting with Eric Biederman's changes for tagged directories.
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/include/asm/qdio.h78
1 files changed, 75 insertions, 3 deletions
diff --git a/arch/s390/include/asm/qdio.h b/arch/s390/include/asm/qdio.h
index 15c97625df8d..21993623da9a 100644
--- a/arch/s390/include/asm/qdio.h
+++ b/arch/s390/include/asm/qdio.h
@@ -123,6 +123,40 @@ struct slibe {
123}; 123};
124 124
125/** 125/**
126 * struct qaob - queue asynchronous operation block
127 * @res0: reserved parameters
128 * @res1: reserved parameter
129 * @res2: reserved parameter
130 * @res3: reserved parameter
131 * @aorc: asynchronous operation return code
132 * @flags: internal flags
133 * @cbtbs: control block type
134 * @sb_count: number of storage blocks
135 * @sba: storage block element addresses
136 * @dcount: size of storage block elements
137 * @user0: user defineable value
138 * @res4: reserved paramater
139 * @user1: user defineable value
140 * @user2: user defineable value
141 */
142struct qaob {
143 u64 res0[6];
144 u8 res1;
145 u8 res2;
146 u8 res3;
147 u8 aorc;
148 u8 flags;
149 u16 cbtbs;
150 u8 sb_count;
151 u64 sba[QDIO_MAX_ELEMENTS_PER_BUFFER];
152 u16 dcount[QDIO_MAX_ELEMENTS_PER_BUFFER];
153 u64 user0;
154 u64 res4[2];
155 u64 user1;
156 u64 user2;
157} __attribute__ ((packed, aligned(256)));
158
159/**
126 * struct slib - storage list information block (SLIB) 160 * struct slib - storage list information block (SLIB)
127 * @nsliba: next SLIB address (if any) 161 * @nsliba: next SLIB address (if any)
128 * @sla: SL address 162 * @sla: SL address
@@ -225,6 +259,41 @@ struct slsb {
225#define CHSC_AC2_DATA_DIV_AVAILABLE 0x0010 259#define CHSC_AC2_DATA_DIV_AVAILABLE 0x0010
226#define CHSC_AC2_DATA_DIV_ENABLED 0x0002 260#define CHSC_AC2_DATA_DIV_ENABLED 0x0002
227 261
262/**
263 * struct qdio_outbuf_state - SBAL related asynchronous operation information
264 * (for communication with upper layer programs)
265 * (only required for use with completion queues)
266 * @flags: flags indicating state of buffer
267 * @aob: pointer to QAOB used for the particular SBAL
268 * @user: pointer to upper layer program's state information related to SBAL
269 * (stored in user1 data of QAOB)
270 */
271struct qdio_outbuf_state {
272 u8 flags;
273 struct qaob *aob;
274 void *user;
275};
276
277#define QDIO_OUTBUF_STATE_FLAG_NONE 0x00
278#define QDIO_OUTBUF_STATE_FLAG_PENDING 0x01
279
280#define CHSC_AC1_INITIATE_INPUTQ 0x80
281
282
283/* qdio adapter-characteristics-1 flag */
284#define AC1_SIGA_INPUT_NEEDED 0x40 /* process input queues */
285#define AC1_SIGA_OUTPUT_NEEDED 0x20 /* process output queues */
286#define AC1_SIGA_SYNC_NEEDED 0x10 /* ask hypervisor to sync */
287#define AC1_AUTOMATIC_SYNC_ON_THININT 0x08 /* set by hypervisor */
288#define AC1_AUTOMATIC_SYNC_ON_OUT_PCI 0x04 /* set by hypervisor */
289#define AC1_SC_QEBSM_AVAILABLE 0x02 /* available for subchannel */
290#define AC1_SC_QEBSM_ENABLED 0x01 /* enabled for subchannel */
291
292#define CHSC_AC2_DATA_DIV_AVAILABLE 0x0010
293#define CHSC_AC2_DATA_DIV_ENABLED 0x0002
294
295#define CHSC_AC3_FORMAT2_CQ_AVAILABLE 0x8000
296
228struct qdio_ssqd_desc { 297struct qdio_ssqd_desc {
229 u8 flags; 298 u8 flags;
230 u8:8; 299 u8:8;
@@ -243,8 +312,7 @@ struct qdio_ssqd_desc {
243 u64 sch_token; 312 u64 sch_token;
244 u8 mro; 313 u8 mro;
245 u8 mri; 314 u8 mri;
246 u8:8; 315 u16 qdioac3;
247 u8 sbalic;
248 u16:16; 316 u16:16;
249 u8:8; 317 u8:8;
250 u8 mmwc; 318 u8 mmwc;
@@ -280,9 +348,11 @@ typedef void qdio_handler_t(struct ccw_device *, unsigned int, int,
280 * @no_output_qs: number of output queues 348 * @no_output_qs: number of output queues
281 * @input_handler: handler to be called for input queues 349 * @input_handler: handler to be called for input queues
282 * @output_handler: handler to be called for output queues 350 * @output_handler: handler to be called for output queues
351 * @queue_start_poll: polling handlers (one per input queue or NULL)
283 * @int_parm: interruption parameter 352 * @int_parm: interruption parameter
284 * @input_sbal_addr_array: address of no_input_qs * 128 pointers 353 * @input_sbal_addr_array: address of no_input_qs * 128 pointers
285 * @output_sbal_addr_array: address of no_output_qs * 128 pointers 354 * @output_sbal_addr_array: address of no_output_qs * 128 pointers
355 * @output_sbal_state_array: no_output_qs * 128 state info (for CQ or NULL)
286 */ 356 */
287struct qdio_initialize { 357struct qdio_initialize {
288 struct ccw_device *cdev; 358 struct ccw_device *cdev;
@@ -297,11 +367,12 @@ struct qdio_initialize {
297 unsigned int no_output_qs; 367 unsigned int no_output_qs;
298 qdio_handler_t *input_handler; 368 qdio_handler_t *input_handler;
299 qdio_handler_t *output_handler; 369 qdio_handler_t *output_handler;
300 void (*queue_start_poll) (struct ccw_device *, int, unsigned long); 370 void (**queue_start_poll) (struct ccw_device *, int, unsigned long);
301 int scan_threshold; 371 int scan_threshold;
302 unsigned long int_parm; 372 unsigned long int_parm;
303 void **input_sbal_addr_array; 373 void **input_sbal_addr_array;
304 void **output_sbal_addr_array; 374 void **output_sbal_addr_array;
375 struct qdio_outbuf_state *output_sbal_state_array;
305}; 376};
306 377
307#define QDIO_STATE_INACTIVE 0x00000002 /* after qdio_cleanup */ 378#define QDIO_STATE_INACTIVE 0x00000002 /* after qdio_cleanup */
@@ -316,6 +387,7 @@ struct qdio_initialize {
316extern int qdio_allocate(struct qdio_initialize *); 387extern int qdio_allocate(struct qdio_initialize *);
317extern int qdio_establish(struct qdio_initialize *); 388extern int qdio_establish(struct qdio_initialize *);
318extern int qdio_activate(struct ccw_device *); 389extern int qdio_activate(struct ccw_device *);
390extern void qdio_release_aob(struct qaob *);
319extern int do_QDIO(struct ccw_device *, unsigned int, int, unsigned int, 391extern int do_QDIO(struct ccw_device *, unsigned int, int, unsigned int,
320 unsigned int); 392 unsigned int);
321extern int qdio_start_irq(struct ccw_device *, int); 393extern int qdio_start_irq(struct ccw_device *, int);