|
@@ -2134,24 +2134,25 @@ int qeth_send_control_data(struct qeth_card *card, int len,
|
|
|
}
|
|
|
reply->callback = reply_cb;
|
|
|
reply->param = reply_param;
|
|
|
- if (card->state == CARD_STATE_DOWN)
|
|
|
- reply->seqno = QETH_IDX_COMMAND_SEQNO;
|
|
|
- else
|
|
|
- reply->seqno = card->seqno.ipa++;
|
|
|
+
|
|
|
init_waitqueue_head(&reply->wait_q);
|
|
|
- spin_lock_irqsave(&card->lock, flags);
|
|
|
- list_add_tail(&reply->list, &card->cmd_waiter_list);
|
|
|
- spin_unlock_irqrestore(&card->lock, flags);
|
|
|
|
|
|
while (atomic_cmpxchg(&card->write.irq_pending, 0, 1)) ;
|
|
|
- qeth_prepare_control_data(card, len, iob);
|
|
|
|
|
|
if (IS_IPA(iob->data)) {
|
|
|
cmd = __ipa_cmd(iob);
|
|
|
+ cmd->hdr.seqno = card->seqno.ipa++;
|
|
|
+ reply->seqno = cmd->hdr.seqno;
|
|
|
event_timeout = QETH_IPA_TIMEOUT;
|
|
|
} else {
|
|
|
+ reply->seqno = QETH_IDX_COMMAND_SEQNO;
|
|
|
event_timeout = QETH_TIMEOUT;
|
|
|
}
|
|
|
+ qeth_prepare_control_data(card, len, iob);
|
|
|
+
|
|
|
+ spin_lock_irqsave(&card->lock, flags);
|
|
|
+ list_add_tail(&reply->list, &card->cmd_waiter_list);
|
|
|
+ spin_unlock_irqrestore(&card->lock, flags);
|
|
|
|
|
|
timeout = jiffies + event_timeout;
|
|
|
|
|
@@ -2933,7 +2934,7 @@ static void qeth_fill_ipacmd_header(struct qeth_card *card,
|
|
|
memset(cmd, 0, sizeof(struct qeth_ipa_cmd));
|
|
|
cmd->hdr.command = command;
|
|
|
cmd->hdr.initiator = IPA_CMD_INITIATOR_HOST;
|
|
|
- cmd->hdr.seqno = card->seqno.ipa;
|
|
|
+ /* cmd->hdr.seqno is set by qeth_send_control_data() */
|
|
|
cmd->hdr.adapter_type = qeth_get_ipa_adp_type(card->info.link_type);
|
|
|
cmd->hdr.rel_adapter_no = (__u8) card->info.portno;
|
|
|
if (card->options.layer2)
|