2b21f65a8950142825c093c883520edfd33f9477
[pandora-kernel.git] / drivers / s390 / cio / qdio.h
1 /*
2  * linux/drivers/s390/cio/qdio.h
3  *
4  * Copyright 2000,2009 IBM Corp.
5  * Author(s): Utz Bacher <utz.bacher@de.ibm.com>
6  *            Jan Glauber <jang@linux.vnet.ibm.com>
7  */
8 #ifndef _CIO_QDIO_H
9 #define _CIO_QDIO_H
10
11 #include <asm/page.h>
12 #include <asm/schid.h>
13 #include <asm/debug.h>
14 #include "chsc.h"
15
16 #define QDIO_BUSY_BIT_PATIENCE          (100 << 12)     /* 100 microseconds */
17 #define QDIO_BUSY_BIT_RETRY_DELAY       10              /* 10 milliseconds */
18 #define QDIO_BUSY_BIT_RETRIES           1000            /* = 10s retry time */
19 #define QDIO_INPUT_THRESHOLD            (500 << 12)     /* 500 microseconds */
20
21 /*
22  * if an asynchronous HiperSockets queue runs full, the 10 seconds timer wait
23  * till next initiative to give transmitted skbs back to the stack is too long.
24  * Therefore polling is started in case of multicast queue is filled more
25  * than 50 percent.
26  */
27 #define QDIO_IQDIO_POLL_LVL             65      /* HS multicast queue */
28
29 enum qdio_irq_states {
30         QDIO_IRQ_STATE_INACTIVE,
31         QDIO_IRQ_STATE_ESTABLISHED,
32         QDIO_IRQ_STATE_ACTIVE,
33         QDIO_IRQ_STATE_STOPPED,
34         QDIO_IRQ_STATE_CLEANUP,
35         QDIO_IRQ_STATE_ERR,
36         NR_QDIO_IRQ_STATES,
37 };
38
39 /* used as intparm in do_IO */
40 #define QDIO_DOING_ESTABLISH    1
41 #define QDIO_DOING_ACTIVATE     2
42 #define QDIO_DOING_CLEANUP      3
43
44 #define SLSB_STATE_NOT_INIT     0x0
45 #define SLSB_STATE_EMPTY        0x1
46 #define SLSB_STATE_PRIMED       0x2
47 #define SLSB_STATE_PENDING      0x3
48 #define SLSB_STATE_HALTED       0xe
49 #define SLSB_STATE_ERROR        0xf
50 #define SLSB_TYPE_INPUT         0x0
51 #define SLSB_TYPE_OUTPUT        0x20
52 #define SLSB_OWNER_PROG         0x80
53 #define SLSB_OWNER_CU           0x40
54
55 #define SLSB_P_INPUT_NOT_INIT   \
56         (SLSB_OWNER_PROG | SLSB_TYPE_INPUT | SLSB_STATE_NOT_INIT)  /* 0x80 */
57 #define SLSB_P_INPUT_ACK        \
58         (SLSB_OWNER_PROG | SLSB_TYPE_INPUT | SLSB_STATE_EMPTY)     /* 0x81 */
59 #define SLSB_CU_INPUT_EMPTY     \
60         (SLSB_OWNER_CU | SLSB_TYPE_INPUT | SLSB_STATE_EMPTY)       /* 0x41 */
61 #define SLSB_P_INPUT_PRIMED     \
62         (SLSB_OWNER_PROG | SLSB_TYPE_INPUT | SLSB_STATE_PRIMED)    /* 0x82 */
63 #define SLSB_P_INPUT_HALTED     \
64         (SLSB_OWNER_PROG | SLSB_TYPE_INPUT | SLSB_STATE_HALTED)    /* 0x8e */
65 #define SLSB_P_INPUT_ERROR      \
66         (SLSB_OWNER_PROG | SLSB_TYPE_INPUT | SLSB_STATE_ERROR)     /* 0x8f */
67 #define SLSB_P_OUTPUT_NOT_INIT  \
68         (SLSB_OWNER_PROG | SLSB_TYPE_OUTPUT | SLSB_STATE_NOT_INIT) /* 0xa0 */
69 #define SLSB_P_OUTPUT_EMPTY     \
70         (SLSB_OWNER_PROG | SLSB_TYPE_OUTPUT | SLSB_STATE_EMPTY)    /* 0xa1 */
71 #define SLSB_P_OUTPUT_PENDING \
72         (SLSB_OWNER_PROG | SLSB_TYPE_OUTPUT | SLSB_STATE_PENDING)  /* 0xa3 */
73 #define SLSB_CU_OUTPUT_PRIMED   \
74         (SLSB_OWNER_CU | SLSB_TYPE_OUTPUT | SLSB_STATE_PRIMED)     /* 0x62 */
75 #define SLSB_P_OUTPUT_HALTED    \
76         (SLSB_OWNER_PROG | SLSB_TYPE_OUTPUT | SLSB_STATE_HALTED)   /* 0xae */
77 #define SLSB_P_OUTPUT_ERROR     \
78         (SLSB_OWNER_PROG | SLSB_TYPE_OUTPUT | SLSB_STATE_ERROR)    /* 0xaf */
79
80 #define SLSB_ERROR_DURING_LOOKUP  0xff
81
82 /* additional CIWs returned by extended Sense-ID */
83 #define CIW_TYPE_EQUEUE                 0x3 /* establish QDIO queues */
84 #define CIW_TYPE_AQUEUE                 0x4 /* activate QDIO queues */
85
86 /* flags for st qdio sch data */
87 #define CHSC_FLAG_QDIO_CAPABILITY       0x80
88 #define CHSC_FLAG_VALIDITY              0x40
89
90 /* qdio adapter-characteristics-1 flag */
91 #define AC1_SIGA_INPUT_NEEDED           0x40    /* process input queues */
92 #define AC1_SIGA_OUTPUT_NEEDED          0x20    /* process output queues */
93 #define AC1_SIGA_SYNC_NEEDED            0x10    /* ask hypervisor to sync */
94 #define AC1_AUTOMATIC_SYNC_ON_THININT   0x08    /* set by hypervisor */
95 #define AC1_AUTOMATIC_SYNC_ON_OUT_PCI   0x04    /* set by hypervisor */
96 #define AC1_SC_QEBSM_AVAILABLE          0x02    /* available for subchannel */
97 #define AC1_SC_QEBSM_ENABLED            0x01    /* enabled for subchannel */
98
99 /* SIGA flags */
100 #define QDIO_SIGA_WRITE         0x00
101 #define QDIO_SIGA_READ          0x01
102 #define QDIO_SIGA_SYNC          0x02
103 #define QDIO_SIGA_WRITEQ        0x04
104 #define QDIO_SIGA_QEBSM_FLAG    0x80
105
106 #ifdef CONFIG_64BIT
107 static inline int do_sqbs(u64 token, unsigned char state, int queue,
108                           int *start, int *count)
109 {
110         register unsigned long _ccq asm ("0") = *count;
111         register unsigned long _token asm ("1") = token;
112         unsigned long _queuestart = ((unsigned long)queue << 32) | *start;
113
114         asm volatile(
115                 "       .insn   rsy,0xeb000000008A,%1,0,0(%2)"
116                 : "+d" (_ccq), "+d" (_queuestart)
117                 : "d" ((unsigned long)state), "d" (_token)
118                 : "memory", "cc");
119         *count = _ccq & 0xff;
120         *start = _queuestart & 0xff;
121
122         return (_ccq >> 32) & 0xff;
123 }
124
125 static inline int do_eqbs(u64 token, unsigned char *state, int queue,
126                           int *start, int *count, int ack)
127 {
128         register unsigned long _ccq asm ("0") = *count;
129         register unsigned long _token asm ("1") = token;
130         unsigned long _queuestart = ((unsigned long)queue << 32) | *start;
131         unsigned long _state = (unsigned long)ack << 63;
132
133         asm volatile(
134                 "       .insn   rrf,0xB99c0000,%1,%2,0,0"
135                 : "+d" (_ccq), "+d" (_queuestart), "+d" (_state)
136                 : "d" (_token)
137                 : "memory", "cc");
138         *count = _ccq & 0xff;
139         *start = _queuestart & 0xff;
140         *state = _state & 0xff;
141
142         return (_ccq >> 32) & 0xff;
143 }
144 #else
145 static inline int do_sqbs(u64 token, unsigned char state, int queue,
146                           int *start, int *count) { return 0; }
147 static inline int do_eqbs(u64 token, unsigned char *state, int queue,
148                           int *start, int *count, int ack) { return 0; }
149 #endif /* CONFIG_64BIT */
150
151 struct qdio_irq;
152
153 struct siga_flag {
154         u8 input:1;
155         u8 output:1;
156         u8 sync:1;
157         u8 sync_after_ai:1;
158         u8 sync_out_after_pci:1;
159         u8:3;
160 } __attribute__ ((packed));
161
162 struct chsc_ssqd_area {
163         struct chsc_header request;
164         u16:10;
165         u8 ssid:2;
166         u8 fmt:4;
167         u16 first_sch;
168         u16:16;
169         u16 last_sch;
170         u32:32;
171         struct chsc_header response;
172         u32:32;
173         struct qdio_ssqd_desc qdio_ssqd;
174 } __attribute__ ((packed));
175
176 struct scssc_area {
177         struct chsc_header request;
178         u16 operation_code;
179         u16:16;
180         u32:32;
181         u32:32;
182         u64 summary_indicator_addr;
183         u64 subchannel_indicator_addr;
184         u32 ks:4;
185         u32 kc:4;
186         u32:21;
187         u32 isc:3;
188         u32 word_with_d_bit;
189         u32:32;
190         struct subchannel_id schid;
191         u32 reserved[1004];
192         struct chsc_header response;
193         u32:32;
194 } __attribute__ ((packed));
195
196 struct qdio_dev_perf_stat {
197         unsigned int adapter_int;
198         unsigned int qdio_int;
199         unsigned int pci_request_int;
200
201         unsigned int tasklet_inbound;
202         unsigned int tasklet_inbound_resched;
203         unsigned int tasklet_inbound_resched2;
204         unsigned int tasklet_outbound;
205
206         unsigned int siga_read;
207         unsigned int siga_write;
208         unsigned int siga_sync;
209
210         unsigned int inbound_call;
211         unsigned int inbound_handler;
212         unsigned int stop_polling;
213         unsigned int inbound_queue_full;
214         unsigned int outbound_call;
215         unsigned int outbound_handler;
216         unsigned int outbound_queue_full;
217         unsigned int fast_requeue;
218         unsigned int target_full;
219         unsigned int eqbs;
220         unsigned int eqbs_partial;
221         unsigned int sqbs;
222         unsigned int sqbs_partial;
223         unsigned int int_discarded;
224 } ____cacheline_aligned;
225
226 struct qdio_queue_perf_stat {
227         /*
228          * Sorted into order-2 buckets: 1, 2-3, 4-7, ... 64-127, 128.
229          * Since max. 127 SBALs are scanned reuse entry for 128 as queue full
230          * aka 127 SBALs found.
231          */
232         unsigned int nr_sbals[8];
233         unsigned int nr_sbal_error;
234         unsigned int nr_sbal_nop;
235         unsigned int nr_sbal_total;
236 };
237
238 enum qdio_queue_irq_states {
239         QDIO_QUEUE_IRQS_DISABLED,
240 };
241
242 struct qdio_input_q {
243         /* input buffer acknowledgement flag */
244         int polling;
245         /* first ACK'ed buffer */
246         int ack_start;
247         /* how much sbals are acknowledged with qebsm */
248         int ack_count;
249         /* last time of noticing incoming data */
250         u64 timestamp;
251         /* upper-layer polling flag */
252         unsigned long queue_irq_state;
253         /* callback to start upper-layer polling */
254         void (*queue_start_poll) (struct ccw_device *, int, unsigned long);
255 };
256
257 struct qdio_output_q {
258         /* PCIs are enabled for the queue */
259         int pci_out_enabled;
260         /* cq: use asynchronous output buffers */
261         int use_cq;
262         /* cq: aobs used for particual SBAL */
263         struct qaob **aobs;
264         /* cq: sbal state related to asynchronous operation */
265         struct qdio_outbuf_state *sbal_state;
266         /* timer to check for more outbound work */
267         struct timer_list timer;
268         /* used SBALs before tasklet schedule */
269         int scan_threshold;
270 };
271
272 /*
273  * Note on cache alignment: grouped slsb and write mostly data at the beginning
274  * sbal[] is read-only and starts on a new cacheline followed by read mostly.
275  */
276 struct qdio_q {
277         struct slsb slsb;
278
279         union {
280                 struct qdio_input_q in;
281                 struct qdio_output_q out;
282         } u;
283
284         /*
285          * inbound: next buffer the program should check for
286          * outbound: next buffer to check if adapter processed it
287          */
288         int first_to_check;
289
290         /* first_to_check of the last time */
291         int last_move;
292
293         /* beginning position for calling the program */
294         int first_to_kick;
295
296         /* number of buffers in use by the adapter */
297         atomic_t nr_buf_used;
298
299         /* error condition during a data transfer */
300         unsigned int qdio_error;
301
302         struct tasklet_struct tasklet;
303         struct qdio_queue_perf_stat q_stats;
304
305         struct qdio_buffer *sbal[QDIO_MAX_BUFFERS_PER_Q] ____cacheline_aligned;
306
307         /* queue number */
308         int nr;
309
310         /* bitmask of queue number */
311         int mask;
312
313         /* input or output queue */
314         int is_input_q;
315
316         /* list of thinint input queues */
317         struct list_head entry;
318
319         /* upper-layer program handler */
320         qdio_handler_t (*handler);
321
322         struct dentry *debugfs_q;
323         struct qdio_irq *irq_ptr;
324         struct sl *sl;
325         /*
326          * A page is allocated under this pointer and used for slib and sl.
327          * slib is 2048 bytes big and sl points to offset PAGE_SIZE / 2.
328          */
329         struct slib *slib;
330 } __attribute__ ((aligned(256)));
331
332 struct qdio_irq {
333         struct qib qib;
334         u32 *dsci;              /* address of device state change indicator */
335         struct ccw_device *cdev;
336         struct dentry *debugfs_dev;
337         struct dentry *debugfs_perf;
338
339         unsigned long int_parm;
340         struct subchannel_id schid;
341         unsigned long sch_token;        /* QEBSM facility */
342
343         enum qdio_irq_states state;
344
345         struct siga_flag siga_flag;     /* siga sync information from qdioac */
346
347         int nr_input_qs;
348         int nr_output_qs;
349
350         struct ccw1 ccw;
351         struct ciw equeue;
352         struct ciw aqueue;
353
354         struct qdio_ssqd_desc ssqd_desc;
355         void (*orig_handler) (struct ccw_device *, unsigned long, struct irb *);
356
357         int perf_stat_enabled;
358
359         struct qdr *qdr;
360         unsigned long chsc_page;
361
362         struct qdio_q *input_qs[QDIO_MAX_QUEUES_PER_IRQ];
363         struct qdio_q *output_qs[QDIO_MAX_QUEUES_PER_IRQ];
364
365         debug_info_t *debug_area;
366         struct mutex setup_mutex;
367         struct qdio_dev_perf_stat perf_stat;
368 };
369
370 /* helper functions */
371 #define queue_type(q)   q->irq_ptr->qib.qfmt
372 #define SCH_NO(q)       (q->irq_ptr->schid.sch_no)
373
374 #define is_thinint_irq(irq) \
375         (irq->qib.qfmt == QDIO_IQDIO_QFMT || \
376          css_general_characteristics.aif_osa)
377
378 #define qperf(__qdev, __attr)   ((__qdev)->perf_stat.(__attr))
379
380 #define qperf_inc(__q, __attr)                                          \
381 ({                                                                      \
382         struct qdio_irq *qdev = (__q)->irq_ptr;                         \
383         if (qdev->perf_stat_enabled)                                    \
384                 (qdev->perf_stat.__attr)++;                             \
385 })
386
387 static inline void account_sbals_error(struct qdio_q *q, int count)
388 {
389         q->q_stats.nr_sbal_error += count;
390         q->q_stats.nr_sbal_total += count;
391 }
392
393 /* the highest iqdio queue is used for multicast */
394 static inline int multicast_outbound(struct qdio_q *q)
395 {
396         return (q->irq_ptr->nr_output_qs > 1) &&
397                (q->nr == q->irq_ptr->nr_output_qs - 1);
398 }
399
400 #define pci_out_supported(q) \
401         (q->irq_ptr->qib.ac & QIB_AC_OUTBOUND_PCI_SUPPORTED)
402 #define is_qebsm(q)                     (q->irq_ptr->sch_token != 0)
403
404 #define need_siga_in(q)                 (q->irq_ptr->siga_flag.input)
405 #define need_siga_out(q)                (q->irq_ptr->siga_flag.output)
406 #define need_siga_sync(q)               (unlikely(q->irq_ptr->siga_flag.sync))
407 #define need_siga_sync_after_ai(q)      \
408         (unlikely(q->irq_ptr->siga_flag.sync_after_ai))
409 #define need_siga_sync_out_after_pci(q) \
410         (unlikely(q->irq_ptr->siga_flag.sync_out_after_pci))
411
412 #define for_each_input_queue(irq_ptr, q, i)     \
413         for (i = 0, q = irq_ptr->input_qs[0];   \
414                 i < irq_ptr->nr_input_qs;       \
415                 q = irq_ptr->input_qs[++i])
416 #define for_each_output_queue(irq_ptr, q, i)    \
417         for (i = 0, q = irq_ptr->output_qs[0];  \
418                 i < irq_ptr->nr_output_qs;      \
419                 q = irq_ptr->output_qs[++i])
420
421 #define prev_buf(bufnr) \
422         ((bufnr + QDIO_MAX_BUFFERS_MASK) & QDIO_MAX_BUFFERS_MASK)
423 #define next_buf(bufnr) \
424         ((bufnr + 1) & QDIO_MAX_BUFFERS_MASK)
425 #define add_buf(bufnr, inc) \
426         ((bufnr + inc) & QDIO_MAX_BUFFERS_MASK)
427 #define sub_buf(bufnr, dec) \
428         ((bufnr - dec) & QDIO_MAX_BUFFERS_MASK)
429
430 #define queue_irqs_enabled(q)                   \
431         (test_bit(QDIO_QUEUE_IRQS_DISABLED, &q->u.in.queue_irq_state) == 0)
432 #define queue_irqs_disabled(q)                  \
433         (test_bit(QDIO_QUEUE_IRQS_DISABLED, &q->u.in.queue_irq_state) != 0)
434
435 #define TIQDIO_SHARED_IND               63
436
437 /* device state change indicators */
438 struct indicator_t {
439         u32 ind;        /* u32 because of compare-and-swap performance */
440         atomic_t count; /* use count, 0 or 1 for non-shared indicators */
441 };
442
443 extern struct indicator_t *q_indicators;
444
445 static inline int has_multiple_inq_on_dsci(struct qdio_irq *irq)
446 {
447         return irq->nr_input_qs > 1;
448 }
449
450 static inline int references_shared_dsci(struct qdio_irq *irq)
451 {
452         return irq->dsci == &q_indicators[TIQDIO_SHARED_IND].ind;
453 }
454
455 static inline int shared_ind(struct qdio_q *q)
456 {
457         struct qdio_irq *i = q->irq_ptr;
458         return references_shared_dsci(i) || has_multiple_inq_on_dsci(i);
459 }
460
461 /* prototypes for thin interrupt */
462 void qdio_setup_thinint(struct qdio_irq *irq_ptr);
463 int qdio_establish_thinint(struct qdio_irq *irq_ptr);
464 void qdio_shutdown_thinint(struct qdio_irq *irq_ptr);
465 void tiqdio_add_input_queues(struct qdio_irq *irq_ptr);
466 void tiqdio_remove_input_queues(struct qdio_irq *irq_ptr);
467 void tiqdio_inbound_processing(unsigned long q);
468 int tiqdio_allocate_memory(void);
469 void tiqdio_free_memory(void);
470 int tiqdio_register_thinints(void);
471 void tiqdio_unregister_thinints(void);
472
473
474 /* prototypes for setup */
475 void qdio_inbound_processing(unsigned long data);
476 void qdio_outbound_processing(unsigned long data);
477 void qdio_outbound_timer(unsigned long data);
478 void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm,
479                       struct irb *irb);
480 int qdio_allocate_qs(struct qdio_irq *irq_ptr, int nr_input_qs,
481                      int nr_output_qs);
482 void qdio_setup_ssqd_info(struct qdio_irq *irq_ptr);
483 int qdio_setup_get_ssqd(struct qdio_irq *irq_ptr,
484                         struct subchannel_id *schid,
485                         struct qdio_ssqd_desc *data);
486 int qdio_setup_irq(struct qdio_initialize *init_data);
487 void qdio_print_subchannel_info(struct qdio_irq *irq_ptr,
488                                 struct ccw_device *cdev);
489 void qdio_release_memory(struct qdio_irq *irq_ptr);
490 int qdio_setup_create_sysfs(struct ccw_device *cdev);
491 void qdio_setup_destroy_sysfs(struct ccw_device *cdev);
492 int qdio_setup_init(void);
493 void qdio_setup_exit(void);
494 int qdio_enable_async_operation(struct qdio_output_q *q);
495 void qdio_disable_async_operation(struct qdio_output_q *q);
496 struct qaob *qdio_allocate_aob(void);
497
498 int debug_get_buf_state(struct qdio_q *q, unsigned int bufnr,
499                         unsigned char *state);
500 #endif /* _CIO_QDIO_H */