|
@@ -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)
|