[S390] qdio: new qdio driver.
List of major changes: - split qdio driver into several files - seperation of thin interrupt code - improved handling for multiple thin interrupt devices - inbound and outbound processing now always runs in tasklet context - significant less tasklet schedules per interrupt needed - merged qebsm with non-qebsm handling - cleanup qdio interface and added kerneldoc - coding style Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Reviewed-by: Utz Bacher <utz.bacher@de.ibm.com> Reviewed-by: Ursula Braun <braunu@de.ibm.com> Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
This commit is contained in:
committed by
Heiko Carstens
parent
dae39843f4
commit
779e6e1c72
@@ -726,8 +726,7 @@ tx_drop:
|
||||
}
|
||||
|
||||
static void qeth_l2_qdio_input_handler(struct ccw_device *ccwdev,
|
||||
unsigned int status, unsigned int qdio_err,
|
||||
unsigned int siga_err, unsigned int queue,
|
||||
unsigned int qdio_err, unsigned int queue,
|
||||
int first_element, int count, unsigned long card_ptr)
|
||||
{
|
||||
struct net_device *net_dev;
|
||||
@@ -742,23 +741,20 @@ static void qeth_l2_qdio_input_handler(struct ccw_device *ccwdev,
|
||||
card->perf_stats.inbound_cnt++;
|
||||
card->perf_stats.inbound_start_time = qeth_get_micros();
|
||||
}
|
||||
if (status & QDIO_STATUS_LOOK_FOR_ERROR) {
|
||||
if (status & QDIO_STATUS_ACTIVATE_CHECK_CONDITION) {
|
||||
QETH_DBF_TEXT(TRACE, 1, "qdinchk");
|
||||
QETH_DBF_TEXT_(TRACE, 1, "%s", CARD_BUS_ID(card));
|
||||
QETH_DBF_TEXT_(TRACE, 1, "%04X%04X", first_element,
|
||||
count);
|
||||
QETH_DBF_TEXT_(TRACE, 1, "%04X%04X", queue, status);
|
||||
qeth_schedule_recovery(card);
|
||||
return;
|
||||
}
|
||||
if (qdio_err & QDIO_ERROR_ACTIVATE_CHECK_CONDITION) {
|
||||
QETH_DBF_TEXT(TRACE, 1, "qdinchk");
|
||||
QETH_DBF_TEXT_(TRACE, 1, "%s", CARD_BUS_ID(card));
|
||||
QETH_DBF_TEXT_(TRACE, 1, "%04X%04X", first_element,
|
||||
count);
|
||||
QETH_DBF_TEXT_(TRACE, 1, "%04X", queue);
|
||||
qeth_schedule_recovery(card);
|
||||
return;
|
||||
}
|
||||
for (i = first_element; i < (first_element + count); ++i) {
|
||||
index = i % QDIO_MAX_BUFFERS_PER_Q;
|
||||
buffer = &card->qdio.in_q->bufs[index];
|
||||
if (!((status & QDIO_STATUS_LOOK_FOR_ERROR) &&
|
||||
qeth_check_qdio_errors(buffer->buffer,
|
||||
qdio_err, siga_err, "qinerr")))
|
||||
if (!(qdio_err &&
|
||||
qeth_check_qdio_errors(buffer->buffer, qdio_err, "qinerr")))
|
||||
qeth_l2_process_inbound_buffer(card, buffer, index);
|
||||
/* clear buffer and give back to hardware */
|
||||
qeth_put_buffer_pool_entry(card, buffer->pool_entry);
|
||||
|
Reference in New Issue
Block a user