static int qeth_send_checksum_on(struct qeth_card *card, int cstype)
 {
+       const __u32 required_features = QETH_IPA_CHECKSUM_IP_HDR |
+                                       QETH_IPA_CHECKSUM_UDP |
+                                       QETH_IPA_CHECKSUM_TCP;
        struct qeth_checksum_cmd chksum_cb;
        int rc;
 
        rc = qeth_ipa_checksum_run_cmd(card, cstype, IPA_CMD_ASS_START, 0,
                                       &chksum_cb);
+       if (!rc) {
+               if ((required_features & chksum_cb.supported) !=
+                   required_features)
+                       rc = -EIO;
+       }
        if (rc) {
                qeth_send_simple_setassparms(card, cstype, IPA_CMD_ASS_STOP, 0);
                dev_warn(&card->gdev->dev,
        }
        rc = qeth_ipa_checksum_run_cmd(card, cstype, IPA_CMD_ASS_ENABLE,
                                       chksum_cb.supported, &chksum_cb);
+       if (!rc) {
+               if ((required_features & chksum_cb.enabled) !=
+                   required_features)
+                       rc = -EIO;
+       }
        if (rc) {
                qeth_send_simple_setassparms(card, cstype, IPA_CMD_ASS_STOP, 0);
                dev_warn(&card->gdev->dev,
 
        char *udata;
 };
 
+/* IPA set assist segmentation bit definitions for receive and
+ * transmit checksum offloading.
+ */
+enum qeth_ipa_checksum_bits {
+       QETH_IPA_CHECKSUM_IP_HDR        = 0x0002,
+       QETH_IPA_CHECKSUM_UDP           = 0x0008,
+       QETH_IPA_CHECKSUM_TCP           = 0x0010,
+       QETH_IPA_CHECKSUM_LP2LP         = 0x0020
+};
+
 /* IPA Assist checksum offload reply layout. */
 struct qeth_checksum_cmd {
        __u32 supported;