qdio.h (6ffed94ea73c0c15e3201d4d479b6efe8343fb96) qdio.h (5f4026f8b2e4c5e26713d6c707592a33326a88c4)
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

--- 404 unchanged lines hidden (view full) ---

413#define sub_buf(bufnr, dec) \
414 ((bufnr - dec) & QDIO_MAX_BUFFERS_MASK)
415
416#define queue_irqs_enabled(q) \
417 (test_bit(QDIO_QUEUE_IRQS_DISABLED, &q->u.in.queue_irq_state) == 0)
418#define queue_irqs_disabled(q) \
419 (test_bit(QDIO_QUEUE_IRQS_DISABLED, &q->u.in.queue_irq_state) != 0)
420
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

--- 404 unchanged lines hidden (view full) ---

413#define sub_buf(bufnr, dec) \
414 ((bufnr - dec) & QDIO_MAX_BUFFERS_MASK)
415
416#define queue_irqs_enabled(q) \
417 (test_bit(QDIO_QUEUE_IRQS_DISABLED, &q->u.in.queue_irq_state) == 0)
418#define queue_irqs_disabled(q) \
419 (test_bit(QDIO_QUEUE_IRQS_DISABLED, &q->u.in.queue_irq_state) != 0)
420
421#define TIQDIO_SHARED_IND 63
422
423/* device state change indicators */
424struct indicator_t {
425 u32 ind; /* u32 because of compare-and-swap performance */
426 atomic_t count; /* use count, 0 or 1 for non-shared indicators */
427};
428
429extern struct indicator_t *q_indicators;
430
431static inline int has_multiple_inq_on_dsci(struct qdio_irq *irq)
432{
433 return irq->nr_input_qs > 1;
434}
435
436static inline int references_shared_dsci(struct qdio_irq *irq)
437{
438 return irq->dsci == &q_indicators[TIQDIO_SHARED_IND].ind;
439}
440
441static inline int shared_ind(struct qdio_q *q)
442{
443 struct qdio_irq *i = q->irq_ptr;
444 return references_shared_dsci(i) || has_multiple_inq_on_dsci(i);
445}
446
447extern u64 last_ai_time;
448
449/* prototypes for thin interrupt */
450void qdio_setup_thinint(struct qdio_irq *irq_ptr);
451int qdio_establish_thinint(struct qdio_irq *irq_ptr);
452void qdio_shutdown_thinint(struct qdio_irq *irq_ptr);
453void tiqdio_add_input_queues(struct qdio_irq *irq_ptr);
454void tiqdio_remove_input_queues(struct qdio_irq *irq_ptr);
455void tiqdio_inbound_processing(unsigned long q);
456int tiqdio_allocate_memory(void);
457void tiqdio_free_memory(void);
458int tiqdio_register_thinints(void);
459void tiqdio_unregister_thinints(void);
421extern u64 last_ai_time;
422
423/* prototypes for thin interrupt */
424void qdio_setup_thinint(struct qdio_irq *irq_ptr);
425int qdio_establish_thinint(struct qdio_irq *irq_ptr);
426void qdio_shutdown_thinint(struct qdio_irq *irq_ptr);
427void tiqdio_add_input_queues(struct qdio_irq *irq_ptr);
428void tiqdio_remove_input_queues(struct qdio_irq *irq_ptr);
429void tiqdio_inbound_processing(unsigned long q);
430int tiqdio_allocate_memory(void);
431void tiqdio_free_memory(void);
432int tiqdio_register_thinints(void);
433void tiqdio_unregister_thinints(void);
434void clear_nonshared_ind(struct qdio_irq *);
435int test_nonshared_ind(struct qdio_irq *);
460
436
461
462/* prototypes for setup */
463void qdio_inbound_processing(unsigned long data);
464void qdio_outbound_processing(unsigned long data);
465void qdio_outbound_timer(unsigned long data);
466void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm,
467 struct irb *irb);
468int qdio_allocate_qs(struct qdio_irq *irq_ptr, int nr_input_qs,
469 int nr_output_qs);

--- 19 unchanged lines hidden ---
437/* prototypes for setup */
438void qdio_inbound_processing(unsigned long data);
439void qdio_outbound_processing(unsigned long data);
440void qdio_outbound_timer(unsigned long data);
441void qdio_int_handler(struct ccw_device *cdev, unsigned long intparm,
442 struct irb *irb);
443int qdio_allocate_qs(struct qdio_irq *irq_ptr, int nr_input_qs,
444 int nr_output_qs);

--- 19 unchanged lines hidden ---