get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.2/patches/815122/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 815122,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/815122/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/20170918191822.65142-2-jwi@linux.vnet.ibm.com/",
    "project": {
        "id": 7,
        "url": "http://patchwork.ozlabs.org/api/1.2/projects/7/?format=api",
        "name": "Linux network development",
        "link_name": "netdev",
        "list_id": "netdev.vger.kernel.org",
        "list_email": "netdev@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170918191822.65142-2-jwi@linux.vnet.ibm.com>",
    "list_archive_url": null,
    "date": "2017-09-18T19:18:14",
    "name": "[net-next,1/9] s390/qeth: add basic VNICC support",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "4871ca5aa8f50092f867e04439978bf71886e758",
    "submitter": {
        "id": 71397,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/71397/?format=api",
        "name": "Julian Wiedmann",
        "email": "jwi@linux.vnet.ibm.com"
    },
    "delegate": {
        "id": 34,
        "url": "http://patchwork.ozlabs.org/api/1.2/users/34/?format=api",
        "username": "davem",
        "first_name": "David",
        "last_name": "Miller",
        "email": "davem@davemloft.net"
    },
    "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/20170918191822.65142-2-jwi@linux.vnet.ibm.com/mbox/",
    "series": [
        {
            "id": 3715,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/3715/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=3715",
            "date": "2017-09-18T19:18:13",
            "name": "s390/qeth: updates 2017-09-18",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/3715/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/815122/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/815122/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<netdev-owner@vger.kernel.org>",
        "X-Original-To": "patchwork-incoming@ozlabs.org",
        "Delivered-To": "patchwork-incoming@ozlabs.org",
        "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)",
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xwwnz6GyLz9s7G\n\tfor <patchwork-incoming@ozlabs.org>;\n\tTue, 19 Sep 2017 05:20:39 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751479AbdIRTUR (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tMon, 18 Sep 2017 15:20:17 -0400",
            "from mx0a-001b2d01.pphosted.com ([148.163.156.1]:45890 \"EHLO\n\tmx0a-001b2d01.pphosted.com\" rhost-flags-OK-OK-OK-OK)\n\tby vger.kernel.org with ESMTP id S1751463AbdIRTUP (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Mon, 18 Sep 2017 15:20:15 -0400",
            "from pps.filterd (m0098409.ppops.net [127.0.0.1])\n\tby mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id\n\tv8IJK78m037149\n\tfor <netdev@vger.kernel.org>; Mon, 18 Sep 2017 15:20:15 -0400",
            "from e06smtp11.uk.ibm.com (e06smtp11.uk.ibm.com [195.75.94.107])\n\tby mx0a-001b2d01.pphosted.com with ESMTP id 2d2hwt8mcu-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <netdev@vger.kernel.org>; Mon, 18 Sep 2017 15:20:13 -0400",
            "from localhost\n\tby e06smtp11.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <netdev@vger.kernel.org> from <jwi@linux.vnet.ibm.com>;\n\tMon, 18 Sep 2017 20:19:22 +0100",
            "from b06cxnps4074.portsmouth.uk.ibm.com (9.149.109.196)\n\tby e06smtp11.uk.ibm.com (192.168.101.141) with IBM ESMTP SMTP\n\tGateway: Authorized Use Only! Violators will be prosecuted; \n\tMon, 18 Sep 2017 20:19:19 +0100",
            "from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com\n\t[9.149.105.232])\n\tby b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with\n\tESMTP id v8IJJJit24248518; Mon, 18 Sep 2017 19:19:19 GMT",
            "from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id A31E452043;\n\tMon, 18 Sep 2017 19:14:19 +0100 (BST)",
            "from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9])\n\tby d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTPS id 5D7895203F; \n\tMon, 18 Sep 2017 19:14:19 +0100 (BST)"
        ],
        "From": "Julian Wiedmann <jwi@linux.vnet.ibm.com>",
        "To": "David Miller <davem@davemloft.net>",
        "Cc": "<netdev@vger.kernel.org>, <linux-s390@vger.kernel.org>,\n\tMartin Schwidefsky <schwidefsky@de.ibm.com>,\n\tHeiko Carstens <heiko.carstens@de.ibm.com>,\n\tStefan Raspl <raspl@linux.vnet.ibm.com>,\n\tUrsula Braun <ubraun@linux.vnet.ibm.com>,\n\tJulian Wiedmann <jwi@linux.vnet.ibm.com>",
        "Subject": "[PATCH net-next 1/9] s390/qeth: add basic VNICC support",
        "Date": "Mon, 18 Sep 2017 21:18:14 +0200",
        "X-Mailer": "git-send-email 2.13.5",
        "In-Reply-To": "<20170918191822.65142-1-jwi@linux.vnet.ibm.com>",
        "References": "<20170918191822.65142-1-jwi@linux.vnet.ibm.com>",
        "X-TM-AS-GCONF": "00",
        "x-cbid": "17091819-0040-0000-0000-000003FADCAB",
        "X-IBM-AV-DETECTION": "SAVI=unused REMOTE=unused XFE=unused",
        "x-cbparentid": "17091819-0041-0000-0000-0000209C0A6E",
        "Message-Id": "<20170918191822.65142-2-jwi@linux.vnet.ibm.com>",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-09-18_08:, , signatures=0",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n\tspamscore=0 suspectscore=0\n\tmalwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam\n\tadjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000\n\tdefinitions=main-1709180272",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "From: Hans Wippel <hwippel@linux.vnet.ibm.com>\n\nVNIC Characteristics (VNICC) are features of HiperSockets that define\nhow packets are handled by the underlying network hardware. For example,\nif the VNICC flooding is configured on a qeth device, ethernet frames to\nunknown destination MAC addresses are received.\n\nCurrently, there is support for seven VNICCs: flooding, multicast\nflooding, receive broadcast, learning, takeover learning, takeover\nsetvmac, bridge invisible. Also, six IPA commands exist for configuring\nVNICCs on a qeth device: query characteristics, query commands, enable\ncharacteristic, disable characteristic, set timeout, get timeout.\n\nThis patch adds the basic code infrastructure for VNICC support to qeth.\nIt allows querying VNICC support from the underlying hardware. To this\nend, it adds:\n\n* basic message formats for IPA commands\n* basic data structures\n* basic error handling\n* query characteristics IPA command support\n\nThe query characteristics IPA command allows requesting the currently\nsupported and currently enabled VNIC characteristics from the underlying\nhardware.\n\nSupport for the other IPA commands and for the configuration of VNICCs\nis added in follow-up patches together with the respective user\ninterface functions.\n\nSigned-off-by: Hans Wippel <hwippel@linux.vnet.ibm.com>\nReviewed-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>\nSigned-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>\n---\n drivers/s390/net/qeth_core.h     |   7 ++\n drivers/s390/net/qeth_core_mpc.c |   4 +-\n drivers/s390/net/qeth_core_mpc.h |  29 +++++++++\n drivers/s390/net/qeth_l2_main.c  | 136 ++++++++++++++++++++++++++++++++++++++-\n 4 files changed, 172 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h\nindex 59e09854c4f7..b96438df8fd4 100644\n--- a/drivers/s390/net/qeth_core.h\n+++ b/drivers/s390/net/qeth_core.h\n@@ -182,6 +182,12 @@ struct qeth_sbp_info {\n \t__u32 reflect_promisc_primary:1;\n };\n \n+struct qeth_vnicc_info {\n+\t/* supported/currently configured VNICCs; updated in IPA exchanges */\n+\tu32 sup_chars;\n+\tu32 cur_chars;\n+};\n+\n static inline int qeth_is_ipa_supported(struct qeth_ipa_info *ipa,\n \t\tenum qeth_ipa_funcs func)\n {\n@@ -673,6 +679,7 @@ struct qeth_card_options {\n \tstruct qeth_routing_info route6;\n \tstruct qeth_ipa_info ipa6;\n \tstruct qeth_sbp_info sbp; /* SETBRIDGEPORT options */\n+\tstruct qeth_vnicc_info vnicc; /* VNICC options */\n \tint fake_broadcast;\n \tint layer2;\n \tint performance_stats;\ndiff --git a/drivers/s390/net/qeth_core_mpc.c b/drivers/s390/net/qeth_core_mpc.c\nindex 6dd7d05e5693..5f8a2b834d39 100644\n--- a/drivers/s390/net/qeth_core_mpc.c\n+++ b/drivers/s390/net/qeth_core_mpc.c\n@@ -167,7 +167,7 @@ static struct ipa_rc_msg qeth_ipa_rc_msg[] = {\n \t{IPA_RC_IP_TABLE_FULL,\t\t\"Add Addr IP Table Full - ipv6\"},\n \t{IPA_RC_UNKNOWN_ERROR,\t\t\"IPA command failed - reason unknown\"},\n \t{IPA_RC_UNSUPPORTED_COMMAND,\t\"Command not supported\"},\n-\t{IPA_RC_TRACE_ALREADY_ACTIVE,\t\"trace already active\"},\n+\t{IPA_RC_VNICC_OOSEQ,\t\t\"Command issued out of sequence\"},\n \t{IPA_RC_INVALID_FORMAT,\t\t\"invalid format or length\"},\n \t{IPA_RC_DUP_IPV6_REMOTE, \"ipv6 address already registered remote\"},\n \t{IPA_RC_SBP_IQD_NOT_CONFIGURED,\t\"Not configured for bridgeport\"},\n@@ -193,6 +193,7 @@ static struct ipa_rc_msg qeth_ipa_rc_msg[] = {\n \t{IPA_RC_L2_INVALID_VLAN_ID,\t\"L2 invalid vlan id\"},\n \t{IPA_RC_L2_DUP_VLAN_ID,\t\t\"L2 duplicate vlan id\"},\n \t{IPA_RC_L2_VLAN_ID_NOT_FOUND,\t\"L2 vlan id not found\"},\n+\t{IPA_RC_VNICC_VNICBP,\t\t\"VNIC is BridgePort\"},\n \t{IPA_RC_SBP_OSA_NOT_CONFIGURED,\t\"Not configured for bridgeport\"},\n \t{IPA_RC_SBP_OSA_OS_MISMATCH,\t\"OS mismatch\"},\n \t{IPA_RC_SBP_OSA_ANO_DEV_PRIMARY, \"Primary bridgeport exists already\"},\n@@ -253,6 +254,7 @@ static struct ipa_cmd_names qeth_ipa_cmd_names[] = {\n \t{IPA_CMD_DELGMAC,\t\"delgmac\"},\n \t{IPA_CMD_SETVLAN,\t\"setvlan\"},\n \t{IPA_CMD_DELVLAN,\t\"delvlan\"},\n+\t{IPA_CMD_VNICC,\t\t\"vnic_characteristics\"},\n \t{IPA_CMD_SETBRIDGEPORT_OSA,\t\"set_bridge_port(osa)\"},\n \t{IPA_CMD_SETCCID,\t\"setccid\"},\n \t{IPA_CMD_DELCCID,\t\"delccid\"},\ndiff --git a/drivers/s390/net/qeth_core_mpc.h b/drivers/s390/net/qeth_core_mpc.h\nindex 912e0107de8f..c13816b8c92f 100644\n--- a/drivers/s390/net/qeth_core_mpc.h\n+++ b/drivers/s390/net/qeth_core_mpc.h\n@@ -90,6 +90,7 @@ enum qeth_ipa_cmds {\n \tIPA_CMD_DELGMAC\t\t\t= 0x24,\n \tIPA_CMD_SETVLAN\t\t\t= 0x25,\n \tIPA_CMD_DELVLAN\t\t\t= 0x26,\n+\tIPA_CMD_VNICC\t\t\t= 0x2a,\n \tIPA_CMD_SETBRIDGEPORT_OSA\t= 0x2b,\n \tIPA_CMD_SETCCID\t\t\t= 0x41,\n \tIPA_CMD_DELCCID\t\t\t= 0x42,\n@@ -165,6 +166,7 @@ enum qeth_ipa_return_codes {\n \tIPA_RC_L2_INVALID_VLAN_ID\t= 0x2015,\n \tIPA_RC_L2_DUP_VLAN_ID\t\t= 0x2016,\n \tIPA_RC_L2_VLAN_ID_NOT_FOUND\t= 0x2017,\n+\tIPA_RC_VNICC_VNICBP\t\t= 0x20B0,\n \tIPA_RC_SBP_OSA_NOT_CONFIGURED\t= 0x2B0C,\n \tIPA_RC_SBP_OSA_OS_MISMATCH\t= 0x2B10,\n \tIPA_RC_SBP_OSA_ANO_DEV_PRIMARY\t= 0x2B14,\n@@ -197,6 +199,9 @@ enum qeth_ipa_return_codes {\n \tIPA_RC_ENOMEM\t\t\t= 0xfffe,\n \tIPA_RC_FFFF\t\t\t= 0xffff\n };\n+/* for VNIC Characteristics */\n+#define IPA_RC_VNICC_OOSEQ 0x0005\n+\n /* for SET_DIAGNOSTIC_ASSIST */\n #define IPA_RC_INVALID_SUBCMD\t\tIPA_RC_IP_TABLE_FULL\n #define IPA_RC_HARDWARE_AUTH_ERROR\tIPA_RC_UNKNOWN_ERROR\n@@ -551,6 +556,29 @@ struct qeth_ipacmd_diagass {\n \t__u8   cdata[64];\n } __attribute__ ((packed));\n \n+/* VNIC Characteristics IPA Command: *****************************************/\n+/* IPA commands/sub commands for VNICC */\n+#define IPA_VNICC_QUERY_CHARS\t\t0x00000000L\n+\n+/* VNICC header */\n+struct qeth_ipacmd_vnicc_hdr {\n+\tu32 sup;\n+\tu32 cur;\n+};\n+\n+/* VNICC sub command header */\n+struct qeth_vnicc_sub_hdr {\n+\tu16 data_length;\n+\tu16 reserved;\n+\tu32 sub_command;\n+};\n+\n+/* complete VNICC IPA command message */\n+struct qeth_ipacmd_vnicc {\n+\tstruct qeth_ipacmd_vnicc_hdr hdr;\n+\tstruct qeth_vnicc_sub_hdr sub_hdr;\n+};\n+\n /* SETBRIDGEPORT IPA Command:\t *********************************************/\n enum qeth_ipa_sbp_cmd {\n \tIPA_SBP_QUERY_COMMANDS_SUPPORTED\t= 0x00000000L,\n@@ -692,6 +720,7 @@ struct qeth_ipa_cmd {\n \t\tstruct qeth_ipacmd_diagass\t\tdiagass;\n \t\tstruct qeth_ipacmd_setbridgeport\tsbp;\n \t\tstruct qeth_ipacmd_addr_change\t\taddrchange;\n+\t\tstruct qeth_ipacmd_vnicc\t\tvnicc;\n \t} data;\n } __attribute__ ((packed));\n \ndiff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c\nindex 760b023eae95..2fa273b40dd1 100644\n--- a/drivers/s390/net/qeth_l2_main.c\n+++ b/drivers/s390/net/qeth_l2_main.c\n@@ -33,6 +33,7 @@ static void qeth_bridge_state_change(struct qeth_card *card,\n \t\t\t\t\tstruct qeth_ipa_cmd *cmd);\n static void qeth_bridge_host_event(struct qeth_card *card,\n \t\t\t\t\tstruct qeth_ipa_cmd *cmd);\n+static void qeth_l2_vnicc_init(struct qeth_card *card);\n \n static int qeth_l2_verify_dev(struct net_device *dev)\n {\n@@ -1045,9 +1046,14 @@ static int qeth_l2_start_ipassists(struct qeth_card *card)\n \n static void qeth_l2_trace_features(struct qeth_card *card)\n {\n-\tQETH_CARD_TEXT(card, 2, \"l2featur\");\n+\t/* Set BridgePort features */\n+\tQETH_CARD_TEXT(card, 2, \"featuSBP\");\n \tQETH_CARD_HEX(card, 2, &card->options.sbp.supported_funcs,\n \t\t      sizeof(card->options.sbp.supported_funcs));\n+\t/* VNIC Characteristics features */\n+\tQETH_CARD_TEXT(card, 2, \"feaVNICC\");\n+\tQETH_CARD_HEX(card, 2, &card->options.vnicc.sup_chars,\n+\t\t      sizeof(card->options.vnicc.sup_chars));\n }\n \n static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)\n@@ -1072,8 +1078,6 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)\n \tif (card->options.sbp.supported_funcs)\n \t\tdev_info(&card->gdev->dev,\n \t\t\"The device represents a Bridge Capable Port\\n\");\n-\tqeth_trace_features(card);\n-\tqeth_l2_trace_features(card);\n \n \tif (!card->dev && qeth_l2_setup_netdev(card)) {\n \t\trc = -ENODEV;\n@@ -1090,6 +1094,12 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)\n \t} else\n \t\tcard->info.hwtrap = 0;\n \n+\t/* for the rx_bcast characteristic, init VNICC after setmac */\n+\tqeth_l2_vnicc_init(card);\n+\n+\tqeth_trace_features(card);\n+\tqeth_l2_trace_features(card);\n+\n \tqeth_l2_setup_bridgeport_attrs(card);\n \n \tcard->state = CARD_STATE_HARDSETUP;\n@@ -2039,6 +2049,126 @@ int qeth_bridgeport_an_set(struct qeth_card *card, int enable)\n }\n EXPORT_SYMBOL_GPL(qeth_bridgeport_an_set);\n \n+/* VNIC Characteristics support */\n+\n+/* handle VNICC IPA command return codes; convert to error codes */\n+static int qeth_l2_vnicc_makerc(struct qeth_card *card, int ipa_rc)\n+{\n+\tint rc;\n+\n+\tswitch (ipa_rc) {\n+\tcase IPA_RC_SUCCESS:\n+\t\treturn ipa_rc;\n+\tcase IPA_RC_L2_UNSUPPORTED_CMD:\n+\tcase IPA_RC_NOTSUPP:\n+\t\trc = -EOPNOTSUPP;\n+\t\tbreak;\n+\tcase IPA_RC_VNICC_OOSEQ:\n+\t\trc = -EALREADY;\n+\t\tbreak;\n+\tcase IPA_RC_VNICC_VNICBP:\n+\t\trc = -EBUSY;\n+\t\tbreak;\n+\tcase IPA_RC_L2_ADDR_TABLE_FULL:\n+\t\trc = -ENOSPC;\n+\t\tbreak;\n+\tcase IPA_RC_L2_MAC_NOT_AUTH_BY_ADP:\n+\t\trc = -EACCES;\n+\t\tbreak;\n+\tdefault:\n+\t\trc = -EIO;\n+\t}\n+\n+\tQETH_CARD_TEXT_(card, 2, \"err%04x\", ipa_rc);\n+\treturn rc;\n+}\n+\n+/* generic VNICC request call back control */\n+struct _qeth_l2_vnicc_request_cbctl {\n+\tu32 sub_cmd;\n+};\n+\n+/* generic VNICC request call back */\n+static int qeth_l2_vnicc_request_cb(struct qeth_card *card,\n+\t\t\t\t    struct qeth_reply *reply,\n+\t\t\t\t    unsigned long data)\n+{\n+\tstruct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;\n+\tstruct qeth_ipacmd_vnicc *rep = &cmd->data.vnicc;\n+\n+\tQETH_CARD_TEXT(card, 2, \"vniccrcb\");\n+\tif (cmd->hdr.return_code)\n+\t\treturn 0;\n+\t/* return results to caller */\n+\tcard->options.vnicc.sup_chars = rep->hdr.sup;\n+\tcard->options.vnicc.cur_chars = rep->hdr.cur;\n+\n+\treturn 0;\n+}\n+\n+/* generic VNICC request */\n+static int qeth_l2_vnicc_request(struct qeth_card *card,\n+\t\t\t\t struct _qeth_l2_vnicc_request_cbctl *cbctl)\n+{\n+\tstruct qeth_ipacmd_vnicc *req;\n+\tstruct qeth_cmd_buffer *iob;\n+\tstruct qeth_ipa_cmd *cmd;\n+\tint rc;\n+\n+\tQETH_CARD_TEXT(card, 2, \"vniccreq\");\n+\n+\t/* get new buffer for request */\n+\tiob = qeth_get_ipacmd_buffer(card, IPA_CMD_VNICC, 0);\n+\tif (!iob)\n+\t\treturn -ENOMEM;\n+\n+\t/* create header for request */\n+\tcmd = (struct qeth_ipa_cmd *)(iob->data + IPA_PDU_HEADER_SIZE);\n+\treq = &cmd->data.vnicc;\n+\n+\t/* create sub command header for request */\n+\treq->sub_hdr.data_length = sizeof(req->sub_hdr);\n+\treq->sub_hdr.sub_command = cbctl->sub_cmd;\n+\n+\t/* create sub command specific request fields */\n+\tswitch (cbctl->sub_cmd) {\n+\tcase IPA_VNICC_QUERY_CHARS:\n+\t\tbreak;\n+\tdefault:\n+\t\tqeth_release_buffer(iob->channel, iob);\n+\t\treturn -EOPNOTSUPP;\n+\t}\n+\n+\t/* send request */\n+\trc = qeth_send_ipa_cmd(card, iob, qeth_l2_vnicc_request_cb,\n+\t\t\t       (void *) cbctl);\n+\n+\treturn qeth_l2_vnicc_makerc(card, rc);\n+}\n+\n+/* VNICC query VNIC characteristics request */\n+static int qeth_l2_vnicc_query_chars(struct qeth_card *card)\n+{\n+\tstruct _qeth_l2_vnicc_request_cbctl cbctl;\n+\n+\t/* prepare callback control */\n+\tcbctl.sub_cmd = IPA_VNICC_QUERY_CHARS;\n+\n+\tQETH_CARD_TEXT(card, 2, \"vniccqch\");\n+\treturn qeth_l2_vnicc_request(card, &cbctl);\n+}\n+\n+/* (re-)initialize VNICC */\n+static void qeth_l2_vnicc_init(struct qeth_card *card)\n+{\n+\tQETH_CARD_TEXT(card, 2, \"vniccini\");\n+\t/* initial query and storage of VNIC characteristics */\n+\tif (qeth_l2_vnicc_query_chars(card)) {\n+\t\tcard->options.vnicc.sup_chars = 0;\n+\t\tcard->options.vnicc.cur_chars = 0;\n+\t}\n+}\n+\n module_init(qeth_l2_init);\n module_exit(qeth_l2_exit);\n MODULE_AUTHOR(\"Frank Blaschka <frank.blaschka@de.ibm.com>\");\n",
    "prefixes": [
        "net-next",
        "1/9"
    ]
}