Commit d65626ad authored by Julian Wiedmann's avatar Julian Wiedmann Committed by David S. Miller

s390/qeth: extract bridgeport cmd builder

Consolidation of duplicated code, no functional change.
Signed-off-by: default avatarJulian Wiedmann <jwi@linux.vnet.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cef6ff22
...@@ -1724,11 +1724,26 @@ static int qeth_bridgeport_makerc(struct qeth_card *card, ...@@ -1724,11 +1724,26 @@ static int qeth_bridgeport_makerc(struct qeth_card *card,
return rc; 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) ? enum qeth_ipa_cmds ipa_cmd = (card->info.type == QETH_CARD_TYPE_IQD) ?
IPA_CMD_SETBRIDGEPORT_IQD : IPA_CMD_SETBRIDGEPORT_IQD :
IPA_CMD_SETBRIDGEPORT_OSA; 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, 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, ...@@ -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) static void qeth_bridgeport_query_support(struct qeth_card *card)
{ {
struct qeth_cmd_buffer *iob; struct qeth_cmd_buffer *iob;
struct qeth_ipa_cmd *cmd;
struct _qeth_sbp_cbctl cbctl; struct _qeth_sbp_cbctl cbctl;
QETH_CARD_TEXT(card, 2, "brqsuppo"); 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) if (!iob)
return; 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, if (qeth_send_ipa_cmd(card, iob, qeth_bridgeport_query_support_cb,
(void *)&cbctl) || (void *)&cbctl) ||
qeth_bridgeport_makerc(card, &cbctl, qeth_bridgeport_makerc(card, &cbctl,
...@@ -1826,7 +1833,6 @@ int qeth_bridgeport_query_ports(struct qeth_card *card, ...@@ -1826,7 +1833,6 @@ int qeth_bridgeport_query_ports(struct qeth_card *card,
{ {
int rc = 0; int rc = 0;
struct qeth_cmd_buffer *iob; struct qeth_cmd_buffer *iob;
struct qeth_ipa_cmd *cmd;
struct _qeth_sbp_cbctl cbctl = { struct _qeth_sbp_cbctl cbctl = {
.data = { .data = {
.qports = { .qports = {
...@@ -1839,16 +1845,9 @@ int qeth_bridgeport_query_ports(struct qeth_card *card, ...@@ -1839,16 +1845,9 @@ int qeth_bridgeport_query_ports(struct qeth_card *card,
QETH_CARD_TEXT(card, 2, "brqports"); QETH_CARD_TEXT(card, 2, "brqports");
if (!(card->options.sbp.supported_funcs & IPA_SBP_QUERY_BRIDGE_PORTS)) if (!(card->options.sbp.supported_funcs & IPA_SBP_QUERY_BRIDGE_PORTS))
return -EOPNOTSUPP; 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) if (!iob)
return -ENOMEM; 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, rc = qeth_send_ipa_cmd(card, iob, qeth_bridgeport_query_ports_cb,
(void *)&cbctl); (void *)&cbctl);
if (rc < 0) if (rc < 0)
...@@ -1880,7 +1879,6 @@ int qeth_bridgeport_setrole(struct qeth_card *card, enum qeth_sbp_roles role) ...@@ -1880,7 +1879,6 @@ int qeth_bridgeport_setrole(struct qeth_card *card, enum qeth_sbp_roles role)
int rc = 0; int rc = 0;
int cmdlength; int cmdlength;
struct qeth_cmd_buffer *iob; struct qeth_cmd_buffer *iob;
struct qeth_ipa_cmd *cmd;
struct _qeth_sbp_cbctl cbctl; struct _qeth_sbp_cbctl cbctl;
enum qeth_ipa_sbp_cmd setcmd; enum qeth_ipa_sbp_cmd setcmd;
...@@ -1888,32 +1886,24 @@ int qeth_bridgeport_setrole(struct qeth_card *card, enum qeth_sbp_roles role) ...@@ -1888,32 +1886,24 @@ int qeth_bridgeport_setrole(struct qeth_card *card, enum qeth_sbp_roles role)
switch (role) { switch (role) {
case QETH_SBP_ROLE_NONE: case QETH_SBP_ROLE_NONE:
setcmd = IPA_SBP_RESET_BRIDGE_PORT_ROLE; setcmd = IPA_SBP_RESET_BRIDGE_PORT_ROLE;
cmdlength = sizeof(struct qeth_ipacmd_sbp_hdr) + cmdlength = sizeof(struct qeth_sbp_reset_role);
sizeof(struct qeth_sbp_reset_role);
break; break;
case QETH_SBP_ROLE_PRIMARY: case QETH_SBP_ROLE_PRIMARY:
setcmd = IPA_SBP_SET_PRIMARY_BRIDGE_PORT; setcmd = IPA_SBP_SET_PRIMARY_BRIDGE_PORT;
cmdlength = sizeof(struct qeth_ipacmd_sbp_hdr) + cmdlength = sizeof(struct qeth_sbp_set_primary);
sizeof(struct qeth_sbp_set_primary);
break; break;
case QETH_SBP_ROLE_SECONDARY: case QETH_SBP_ROLE_SECONDARY:
setcmd = IPA_SBP_SET_SECONDARY_BRIDGE_PORT; setcmd = IPA_SBP_SET_SECONDARY_BRIDGE_PORT;
cmdlength = sizeof(struct qeth_ipacmd_sbp_hdr) + cmdlength = sizeof(struct qeth_sbp_set_secondary);
sizeof(struct qeth_sbp_set_secondary);
break; break;
default: default:
return -EINVAL; return -EINVAL;
} }
if (!(card->options.sbp.supported_funcs & setcmd)) if (!(card->options.sbp.supported_funcs & setcmd))
return -EOPNOTSUPP; return -EOPNOTSUPP;
iob = qeth_get_ipacmd_buffer(card, ipa_cmd_sbp(card), 0); iob = qeth_sbp_build_cmd(card, setcmd, cmdlength);
if (!iob) if (!iob)
return -ENOMEM; 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, rc = qeth_send_ipa_cmd(card, iob, qeth_bridgeport_set_cb,
(void *)&cbctl); (void *)&cbctl);
if (rc < 0) if (rc < 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment