Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide
[cascardo/linux.git] / drivers / s390 / net / qeth_core_main.c
index f54bec5..71bfacf 100644 (file)
@@ -3037,6 +3037,45 @@ int qeth_query_ipassists(struct qeth_card *card, enum qeth_prot_versions prot)
 }
 EXPORT_SYMBOL_GPL(qeth_query_ipassists);
 
+static int qeth_query_switch_attributes_cb(struct qeth_card *card,
+                               struct qeth_reply *reply, unsigned long data)
+{
+       struct qeth_ipa_cmd *cmd;
+       struct qeth_switch_info *sw_info;
+       struct qeth_query_switch_attributes *attrs;
+
+       QETH_CARD_TEXT(card, 2, "qswiatcb");
+       cmd = (struct qeth_ipa_cmd *) data;
+       sw_info = (struct qeth_switch_info *)reply->param;
+       if (cmd->data.setadapterparms.hdr.return_code == 0) {
+               attrs = &cmd->data.setadapterparms.data.query_switch_attributes;
+               sw_info->capabilities = attrs->capabilities;
+               sw_info->settings = attrs->settings;
+               QETH_CARD_TEXT_(card, 2, "%04x%04x", sw_info->capabilities,
+                                                       sw_info->settings);
+       }
+       qeth_default_setadapterparms_cb(card, reply, (unsigned long) cmd);
+
+       return 0;
+}
+
+int qeth_query_switch_attributes(struct qeth_card *card,
+                                struct qeth_switch_info *sw_info)
+{
+       struct qeth_cmd_buffer *iob;
+
+       QETH_CARD_TEXT(card, 2, "qswiattr");
+       if (!qeth_adp_supported(card, IPA_SETADP_QUERY_SWITCH_ATTRIBUTES))
+               return -EOPNOTSUPP;
+       if (!netif_carrier_ok(card->dev))
+               return -ENOMEDIUM;
+       iob = qeth_get_adapter_cmd(card, IPA_SETADP_QUERY_SWITCH_ATTRIBUTES,
+                               sizeof(struct qeth_ipacmd_setadpparms_hdr));
+       return qeth_send_ipa_cmd(card, iob,
+                               qeth_query_switch_attributes_cb, sw_info);
+}
+EXPORT_SYMBOL_GPL(qeth_query_switch_attributes);
+
 static int qeth_query_setdiagass_cb(struct qeth_card *card,
                struct qeth_reply *reply, unsigned long data)
 {