s390/qeth: consolidate filling of low-level cmd length fields
The code to fill the IPA length fields is duplicated three times across the driver: 1. qeth_send_ipa_cmd() sets IPA_CMD_LENGTH, which matches the defaults in the IPA_PDU_HEADER template. 2. for OSN, qeth_osn_send_ipa_cmd() bypasses this logic and inserts the length passed by the caller. 3. SNMP commands (that can outgrow IPA_CMD_LENGTH) have their own way of setting the length fields, via qeth_send_ipa_snmp_cmd(). Consolidate this into qeth_prepare_ipa_cmd(), which all originators of IPA cmds already call during setup of their cmd. Let qeth_send_ipa_cmd() pull the length from the cmd instead of hard-coding IPA_CMD_LENGTH. For now, the SNMP code still needs to fix-up its length fields manually. Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
84dbea461e
commit
c21532771e
@@ -1124,20 +1124,14 @@ static int qeth_osn_send_control_data(struct qeth_card *card, int len,
|
||||
}
|
||||
|
||||
static int qeth_osn_send_ipa_cmd(struct qeth_card *card,
|
||||
struct qeth_cmd_buffer *iob, int data_len)
|
||||
struct qeth_cmd_buffer *iob)
|
||||
{
|
||||
u16 s1, s2;
|
||||
u16 length;
|
||||
|
||||
QETH_CARD_TEXT(card, 4, "osndipa");
|
||||
|
||||
qeth_prepare_ipa_cmd(card, iob);
|
||||
s1 = (u16)(IPA_PDU_HEADER_SIZE + data_len);
|
||||
s2 = (u16)data_len;
|
||||
memcpy(QETH_IPA_PDU_LEN_TOTAL(iob->data), &s1, 2);
|
||||
memcpy(QETH_IPA_PDU_LEN_PDU1(iob->data), &s2, 2);
|
||||
memcpy(QETH_IPA_PDU_LEN_PDU2(iob->data), &s2, 2);
|
||||
memcpy(QETH_IPA_PDU_LEN_PDU3(iob->data), &s2, 2);
|
||||
return qeth_osn_send_control_data(card, s1, iob);
|
||||
memcpy(&length, QETH_IPA_PDU_LEN_TOTAL(iob->data), 2);
|
||||
return qeth_osn_send_control_data(card, length, iob);
|
||||
}
|
||||
|
||||
int qeth_osn_assist(struct net_device *dev, void *data, int data_len)
|
||||
@@ -1154,8 +1148,9 @@ int qeth_osn_assist(struct net_device *dev, void *data, int data_len)
|
||||
if (!qeth_card_hw_is_reachable(card))
|
||||
return -ENODEV;
|
||||
iob = qeth_wait_for_buffer(&card->write);
|
||||
qeth_prepare_ipa_cmd(card, iob, (u16) data_len);
|
||||
memcpy(__ipa_cmd(iob), data, data_len);
|
||||
return qeth_osn_send_ipa_cmd(card, iob, data_len);
|
||||
return qeth_osn_send_ipa_cmd(card, iob);
|
||||
}
|
||||
EXPORT_SYMBOL(qeth_osn_assist);
|
||||
|
||||
|
Reference in New Issue
Block a user