OSDN Git Service

s390/qeth: extract bridgeport cmd builder
authorJulian Wiedmann <jwi@linux.vnet.ibm.com>
Tue, 15 Aug 2017 15:02:47 +0000 (17:02 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 15 Aug 2017 17:58:40 +0000 (10:58 -0700)
Consolidation of duplicated code, no functional change.

Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/s390/net/qeth_l2_main.c

index 368fb85..438a7f2 100644 (file)
@@ -1724,11 +1724,26 @@ static int qeth_bridgeport_makerc(struct qeth_card *card,
        return rc;
 }
 
-static inline int ipa_cmd_sbp(struct qeth_card *card)
+static struct qeth_cmd_buffer *qeth_sbp_build_cmd(struct qeth_card *card,
+                                                 enum qeth_ipa_sbp_cmd sbp_cmd,
+                                                 unsigned int cmd_length)
 {
-       return (card->info.type == QETH_CARD_TYPE_IQD) ?
-               IPA_CMD_SETBRIDGEPORT_IQD :
-               IPA_CMD_SETBRIDGEPORT_OSA;
+       enum qeth_ipa_cmds ipa_cmd = (card->info.type == QETH_CARD_TYPE_IQD) ?
+                                       IPA_CMD_SETBRIDGEPORT_IQD :
+                                       IPA_CMD_SETBRIDGEPORT_OSA;
+       struct qeth_cmd_buffer *iob;
+       struct qeth_ipa_cmd *cmd;
+
+       iob = qeth_get_ipacmd_buffer(card, ipa_cmd, 0);
+       if (!iob)
+               return iob;
+       cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
+       cmd->data.sbp.hdr.cmdlength = sizeof(struct qeth_ipacmd_sbp_hdr) +
+                                     cmd_length;
+       cmd->data.sbp.hdr.command_code = sbp_cmd;
+       cmd->data.sbp.hdr.used_total = 1;
+       cmd->data.sbp.hdr.seq_no = 1;
+       return iob;
 }
 
 static int qeth_bridgeport_query_support_cb(struct qeth_card *card,
@@ -1758,21 +1773,13 @@ static int qeth_bridgeport_query_support_cb(struct qeth_card *card,
 static void qeth_bridgeport_query_support(struct qeth_card *card)
 {
        struct qeth_cmd_buffer *iob;
-       struct qeth_ipa_cmd *cmd;
        struct _qeth_sbp_cbctl cbctl;
 
        QETH_CARD_TEXT(card, 2, "brqsuppo");
-       iob = qeth_get_ipacmd_buffer(card, ipa_cmd_sbp(card), 0);
+       iob = qeth_sbp_build_cmd(card, IPA_SBP_QUERY_COMMANDS_SUPPORTED,
+                                sizeof(struct qeth_sbp_query_cmds_supp));
        if (!iob)
                return;
-       cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
-       cmd->data.sbp.hdr.cmdlength =
-               sizeof(struct qeth_ipacmd_sbp_hdr) +
-               sizeof(struct qeth_sbp_query_cmds_supp);
-       cmd->data.sbp.hdr.command_code =
-               IPA_SBP_QUERY_COMMANDS_SUPPORTED;
-       cmd->data.sbp.hdr.used_total = 1;
-       cmd->data.sbp.hdr.seq_no = 1;
        if (qeth_send_ipa_cmd(card, iob, qeth_bridgeport_query_support_cb,
                                                        (void *)&cbctl) ||
            qeth_bridgeport_makerc(card, &cbctl,
@@ -1826,7 +1833,6 @@ int qeth_bridgeport_query_ports(struct qeth_card *card,
 {
        int rc = 0;
        struct qeth_cmd_buffer *iob;
-       struct qeth_ipa_cmd *cmd;
        struct _qeth_sbp_cbctl cbctl = {
                .data = {
                        .qports = {
@@ -1839,16 +1845,9 @@ int qeth_bridgeport_query_ports(struct qeth_card *card,
        QETH_CARD_TEXT(card, 2, "brqports");
        if (!(card->options.sbp.supported_funcs & IPA_SBP_QUERY_BRIDGE_PORTS))
                return -EOPNOTSUPP;
-       iob = qeth_get_ipacmd_buffer(card, ipa_cmd_sbp(card), 0);
+       iob = qeth_sbp_build_cmd(card, IPA_SBP_QUERY_BRIDGE_PORTS, 0);
        if (!iob)
                return -ENOMEM;
-       cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
-       cmd->data.sbp.hdr.cmdlength =
-               sizeof(struct qeth_ipacmd_sbp_hdr);
-       cmd->data.sbp.hdr.command_code =
-               IPA_SBP_QUERY_BRIDGE_PORTS;
-       cmd->data.sbp.hdr.used_total = 1;
-       cmd->data.sbp.hdr.seq_no = 1;
        rc = qeth_send_ipa_cmd(card, iob, qeth_bridgeport_query_ports_cb,
                                (void *)&cbctl);
        if (rc < 0)
@@ -1880,7 +1879,6 @@ int qeth_bridgeport_setrole(struct qeth_card *card, enum qeth_sbp_roles role)
        int rc = 0;
        int cmdlength;
        struct qeth_cmd_buffer *iob;
-       struct qeth_ipa_cmd *cmd;
        struct _qeth_sbp_cbctl cbctl;
        enum qeth_ipa_sbp_cmd setcmd;
 
@@ -1888,32 +1886,24 @@ int qeth_bridgeport_setrole(struct qeth_card *card, enum qeth_sbp_roles role)
        switch (role) {
        case QETH_SBP_ROLE_NONE:
                setcmd = IPA_SBP_RESET_BRIDGE_PORT_ROLE;
-               cmdlength =  sizeof(struct qeth_ipacmd_sbp_hdr) +
-                       sizeof(struct qeth_sbp_reset_role);
+               cmdlength = sizeof(struct qeth_sbp_reset_role);
                break;
        case QETH_SBP_ROLE_PRIMARY:
                setcmd = IPA_SBP_SET_PRIMARY_BRIDGE_PORT;
-               cmdlength =  sizeof(struct qeth_ipacmd_sbp_hdr) +
-                       sizeof(struct qeth_sbp_set_primary);
+               cmdlength = sizeof(struct qeth_sbp_set_primary);
                break;
        case QETH_SBP_ROLE_SECONDARY:
                setcmd = IPA_SBP_SET_SECONDARY_BRIDGE_PORT;
-               cmdlength =  sizeof(struct qeth_ipacmd_sbp_hdr) +
-                       sizeof(struct qeth_sbp_set_secondary);
+               cmdlength = sizeof(struct qeth_sbp_set_secondary);
                break;
        default:
                return -EINVAL;
        }
        if (!(card->options.sbp.supported_funcs & setcmd))
                return -EOPNOTSUPP;
-       iob = qeth_get_ipacmd_buffer(card, ipa_cmd_sbp(card), 0);
+       iob = qeth_sbp_build_cmd(card, setcmd, cmdlength);
        if (!iob)
                return -ENOMEM;
-       cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
-       cmd->data.sbp.hdr.cmdlength = cmdlength;
-       cmd->data.sbp.hdr.command_code = setcmd;
-       cmd->data.sbp.hdr.used_total = 1;
-       cmd->data.sbp.hdr.seq_no = 1;
        rc = qeth_send_ipa_cmd(card, iob, qeth_bridgeport_set_cb,
                                (void *)&cbctl);
        if (rc < 0)