extern void ccwgroup_driver_unregister (struct ccwgroup_driver *cdriver);
 int ccwgroup_create_dev(struct device *root, struct ccwgroup_driver *gdrv,
                        int num_devices, const char *buf);
-struct ccwgroup_device *get_ccwgroupdev_by_busid(struct ccwgroup_driver *gdrv,
-                                                char *bus_id);
 
 extern int ccwgroup_set_online(struct ccwgroup_device *gdev);
 extern int ccwgroup_set_offline(struct ccwgroup_device *gdev);
 
 }
 EXPORT_SYMBOL(ccwgroup_driver_unregister);
 
-/**
- * get_ccwgroupdev_by_busid() - obtain device from a bus id
- * @gdrv: driver the device is owned by
- * @bus_id: bus id of the device to be searched
- *
- * This function searches all devices owned by @gdrv for a device with a bus
- * id matching @bus_id.
- * Returns:
- *  If a match is found, its reference count of the found device is increased
- *  and it is returned; else %NULL is returned.
- */
-struct ccwgroup_device *get_ccwgroupdev_by_busid(struct ccwgroup_driver *gdrv,
-                                                char *bus_id)
-{
-       struct device *dev;
-
-       dev = driver_find_device_by_name(&gdrv->driver, bus_id);
-
-       return dev ? to_ccwgroupdev(dev) : NULL;
-}
-EXPORT_SYMBOL_GPL(get_ccwgroupdev_by_busid);
-
 /**
  * ccwgroup_probe_ccwdev() - probe function for slave devices
  * @cdev: ccw device to be probed
 
          To compile as a module choose M. The module name is qeth_l3.
          If unsure, choose Y.
 
-config QETH_OSN
-       def_bool !HAVE_MARCH_Z14_FEATURES
-       prompt "qeth OSN device support"
-       depends on QETH
-       help
-         This enables the qeth driver to support devices in OSN mode.
-         This feature will be removed in 2021.
-         If unsure, choose N.
-
 config QETH_OSX
        def_bool !HAVE_MARCH_Z15_FEATURES
        prompt "qeth OSX device support"
 
        __u8 reserved2[16];
 } __attribute__ ((packed));
 
-struct qeth_hdr_osn {
-       __u8 id;
-       __u8 reserved;
-       __u16 seq_no;
-       __u16 reserved2;
-       __u16 control_flags;
-       __u16 pdu_length;
-       __u8 reserved3[18];
-       __u32 ccid;
-} __attribute__ ((packed));
-
 struct qeth_hdr {
        union {
                struct qeth_hdr_layer2 l2;
                struct qeth_hdr_layer3 l3;
-               struct qeth_hdr_osn    osn;
        } hdr;
 } __attribute__ ((packed));
 
        QETH_HEADER_TYPE_LAYER3 = 0x01,
        QETH_HEADER_TYPE_LAYER2 = 0x02,
        QETH_HEADER_TYPE_L3_TSO = 0x03,
-       QETH_HEADER_TYPE_OSN    = 0x04,
        QETH_HEADER_TYPE_L2_TSO = 0x06,
        QETH_HEADER_MASK_INVAL  = 0x80,
 };
        QETH_RECOVER_THREAD = 1,
 };
 
-struct qeth_osn_info {
-       int (*assist_cb)(struct net_device *dev, void *data);
-       int (*data_cb)(struct sk_buff *skb);
-};
-
 struct qeth_discipline {
        const struct device_type *devtype;
        int (*setup) (struct ccwgroup_device *);
        /* QDIO buffer handling */
        struct qeth_qdio_info qdio;
        int read_or_write_problem;
-       struct qeth_osn_info osn_info;
        const struct qeth_discipline *discipline;
        atomic_t force_alloc_skb;
        struct service_level qeth_service_level;
 extern const struct qeth_discipline qeth_l2_discipline;
 extern const struct qeth_discipline qeth_l3_discipline;
 extern const struct ethtool_ops qeth_ethtool_ops;
-extern const struct ethtool_ops qeth_osn_ethtool_ops;
 extern const struct attribute_group *qeth_dev_groups[];
-extern const struct attribute_group *qeth_osn_dev_groups[];
 extern const struct device_type qeth_generic_devtype;
 
 const char *qeth_get_cardname_short(struct qeth_card *);
 void qeth_remove_discipline(struct qeth_card *card);
 
 /* exports for qeth discipline device drivers */
-extern struct kmem_cache *qeth_core_header_cache;
 extern struct qeth_dbf_info qeth_dbf[QETH_DBF_INFOS];
 
 struct net_device *qeth_clone_netdev(struct net_device *orig);
-struct qeth_card *qeth_get_card_by_busid(char *bus_id);
 void qeth_set_allowed_threads(struct qeth_card *card, unsigned long threads,
                              int clear_start_mask);
 int qeth_threads_running(struct qeth_card *, unsigned long);
                                           enum qeth_ipa_cmds cmd_code,
                                           enum qeth_prot_versions prot,
                                           unsigned int data_length);
-struct qeth_cmd_buffer *qeth_alloc_cmd(struct qeth_channel *channel,
-                                      unsigned int length, unsigned int ccws,
-                                      long timeout);
 struct qeth_cmd_buffer *qeth_get_setassparms_cmd(struct qeth_card *card,
                                                 enum qeth_ipa_funcs ipa_func,
                                                 u16 cmd_code,
 struct qeth_cmd_buffer *qeth_get_diag_cmd(struct qeth_card *card,
                                          enum qeth_diags_cmds sub_cmd,
                                          unsigned int data_length);
-void qeth_notify_cmd(struct qeth_cmd_buffer *iob, int reason);
-void qeth_put_cmd(struct qeth_cmd_buffer *iob);
 
 int qeth_schedule_recovery(struct qeth_card *card);
 int qeth_poll(struct napi_struct *napi, int budget);
 void qeth_setadp_promisc_mode(struct qeth_card *card, bool enable);
 int qeth_setadpparms_change_macaddr(struct qeth_card *);
 void qeth_tx_timeout(struct net_device *, unsigned int txqueue);
-void qeth_prepare_ipa_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob,
-                         u16 cmd_length,
-                         bool (*match)(struct qeth_cmd_buffer *iob,
-                                       struct qeth_cmd_buffer *reply));
 int qeth_query_switch_attributes(struct qeth_card *card,
                                  struct qeth_switch_info *sw_info);
 int qeth_query_card_info(struct qeth_card *card,
 int qeth_setadpparms_set_access_ctrl(struct qeth_card *card,
                                     enum qeth_ipa_isolation_modes mode);
 
-unsigned int qeth_count_elements(struct sk_buff *skb, unsigned int data_offset);
-int qeth_do_send_packet(struct qeth_card *card, struct qeth_qdio_out_q *queue,
-                       struct sk_buff *skb, struct qeth_hdr *hdr,
-                       unsigned int offset, unsigned int hd_len,
-                       int elements_needed);
 int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...);
 int qeth_configure_cq(struct qeth_card *, enum qeth_cq);
                                  struct qeth_hdr *hdr, struct sk_buff *skb,
                                  __be16 proto, unsigned int data_len));
 
-/* exports for OSN */
-int qeth_osn_assist(struct net_device *, void *, int);
-int qeth_osn_register(unsigned char *read_dev_no, struct net_device **,
-               int (*assist_cb)(struct net_device *, void *),
-               int (*data_cb)(struct sk_buff *));
-void qeth_osn_deregister(struct net_device *);
-
 #endif /* __QETH_CORE_H__ */
 
 };
 EXPORT_SYMBOL_GPL(qeth_dbf);
 
-struct kmem_cache *qeth_core_header_cache;
-EXPORT_SYMBOL_GPL(qeth_core_header_cache);
+static struct kmem_cache *qeth_core_header_cache;
 static struct kmem_cache *qeth_qdio_outbuf_cache;
 
 static struct device *qeth_core_root_dev;
                        return " OSD Express";
                case QETH_CARD_TYPE_IQD:
                        return " HiperSockets";
-               case QETH_CARD_TYPE_OSN:
-                       return " OSN QDIO";
                case QETH_CARD_TYPE_OSM:
                        return " OSM QDIO";
                case QETH_CARD_TYPE_OSX:
                        }
                case QETH_CARD_TYPE_IQD:
                        return "HiperSockets";
-               case QETH_CARD_TYPE_OSN:
-                       return "OSN";
                case QETH_CARD_TYPE_OSM:
                        return "OSM_1000";
                case QETH_CARD_TYPE_OSX:
        return n;
 }
 
+static void qeth_put_cmd(struct qeth_cmd_buffer *iob)
+{
+       if (refcount_dec_and_test(&iob->ref_count)) {
+               kfree(iob->data);
+               kfree(iob);
+       }
+}
 static void qeth_setup_ccw(struct ccw1 *ccw, u8 cmd_code, u8 flags, u32 len,
                           void *data)
 {
        spin_unlock_irq(&card->lock);
 }
 
-void qeth_notify_cmd(struct qeth_cmd_buffer *iob, int reason)
+static void qeth_notify_cmd(struct qeth_cmd_buffer *iob, int reason)
 {
        iob->rc = reason;
        complete(&iob->done);
 }
-EXPORT_SYMBOL_GPL(qeth_notify_cmd);
 
 static void qeth_flush_local_addrs4(struct qeth_card *card)
 {
        QETH_CARD_TEXT(card, 5, "chkipad");
 
        if (IS_IPA_REPLY(cmd)) {
-               if (cmd->hdr.command != IPA_CMD_SETCCID &&
-                   cmd->hdr.command != IPA_CMD_DELCCID &&
-                   cmd->hdr.command != IPA_CMD_MODCCID &&
-                   cmd->hdr.command != IPA_CMD_SET_DIAG_ASS)
+               if (cmd->hdr.command != IPA_CMD_SET_DIAG_ASS)
                        qeth_issue_ipa_msg(cmd, cmd->hdr.return_code, card);
                return cmd;
        }
                if (card->discipline->control_event_handler(card, cmd))
                        return cmd;
                return NULL;
-       case IPA_CMD_MODCCID:
-               return cmd;
        case IPA_CMD_REGISTER_LOCAL_ADDR:
                if (cmd->hdr.prot_version == QETH_PROT_IPV4)
                        qeth_add_local_addrs4(card, &cmd->data.local_addrs4);
        return 0;
 }
 
-void qeth_put_cmd(struct qeth_cmd_buffer *iob)
-{
-       if (refcount_dec_and_test(&iob->ref_count)) {
-               kfree(iob->data);
-               kfree(iob);
-       }
-}
-EXPORT_SYMBOL_GPL(qeth_put_cmd);
-
 static void qeth_release_buffer_cb(struct qeth_card *card,
                                   struct qeth_cmd_buffer *iob,
                                   unsigned int data_length)
        qeth_put_cmd(iob);
 }
 
-struct qeth_cmd_buffer *qeth_alloc_cmd(struct qeth_channel *channel,
-                                      unsigned int length, unsigned int ccws,
-                                      long timeout)
+static struct qeth_cmd_buffer *qeth_alloc_cmd(struct qeth_channel *channel,
+                                             unsigned int length,
+                                             unsigned int ccws, long timeout)
 {
        struct qeth_cmd_buffer *iob;
 
        iob->length = length;
        return iob;
 }
-EXPORT_SYMBOL_GPL(qeth_alloc_cmd);
 
 static void qeth_issue_next_read_cb(struct qeth_card *card,
                                    struct qeth_cmd_buffer *iob,
                cmd = qeth_check_ipa_data(card, cmd);
                if (!cmd)
                        goto out;
-               if (IS_OSN(card) && card->osn_info.assist_cb &&
-                   cmd->hdr.command != IPA_CMD_STARTLAN) {
-                       card->osn_info.assist_cb(card->dev, cmd);
-                       goto out;
-               }
        }
 
        /* match against pending cmd requests */
 {
        enum qeth_discipline_id disc = QETH_DISCIPLINE_UNDETERMINED;
 
-       if (IS_OSM(card) || IS_OSN(card))
+       if (IS_OSM(card))
                disc = QETH_DISCIPLINE_LAYER2;
        else if (IS_VM_NIC(card))
                disc = IS_IQD(card) ? QETH_DISCIPLINE_LAYER3 :
                card->info.func_level = QETH_IDX_FUNC_LEVEL_IQD;
                break;
        case QETH_CARD_TYPE_OSD:
-       case QETH_CARD_TYPE_OSN:
                card->info.func_level = QETH_IDX_FUNC_LEVEL_OSD;
                break;
        default:
 
 static u8 qeth_mpc_select_prot_type(struct qeth_card *card)
 {
-       if (IS_OSN(card))
-               return QETH_PROT_OSN2;
        return IS_LAYER2(card) ? QETH_PROT_LAYER2 : QETH_PROT_TCPIP;
 }
 
        __ipa_cmd(iob)->hdr.seqno = card->seqno.ipa++;
 }
 
-void qeth_prepare_ipa_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob,
-                         u16 cmd_length,
-                         bool (*match)(struct qeth_cmd_buffer *iob,
-                                       struct qeth_cmd_buffer *reply))
+static void qeth_prepare_ipa_cmd(struct qeth_card *card,
+                                struct qeth_cmd_buffer *iob, u16 cmd_length)
 {
        u8 prot_type = qeth_mpc_select_prot_type(card);
        u16 total_length = iob->length;
        qeth_setup_ccw(__ccw_from_cmd(iob), CCW_CMD_WRITE, 0, total_length,
                       iob->data);
        iob->finalize = qeth_ipa_finalize_cmd;
-       iob->match = match;
 
        memcpy(iob->data, IPA_PDU_HEADER, IPA_PDU_HEADER_SIZE);
        memcpy(QETH_IPA_PDU_LEN_TOTAL(iob->data), &total_length, 2);
               &card->token.ulp_connection_r, QETH_MPC_TOKEN_LENGTH);
        memcpy(QETH_IPA_PDU_LEN_PDU3(iob->data), &cmd_length, 2);
 }
-EXPORT_SYMBOL_GPL(qeth_prepare_ipa_cmd);
 
 static bool qeth_ipa_match_reply(struct qeth_cmd_buffer *iob,
                                 struct qeth_cmd_buffer *reply)
        if (!iob)
                return NULL;
 
-       qeth_prepare_ipa_cmd(card, iob, data_length, qeth_ipa_match_reply);
+       qeth_prepare_ipa_cmd(card, iob, data_length);
+       iob->match = qeth_ipa_match_reply;
 
        hdr = &__ipa_cmd(iob)->hdr;
        hdr->command = cmd_code;
  * Returns the number of pages, and thus QDIO buffer elements, needed to map the
  * skb's data (both its linear part and paged fragments).
  */
-unsigned int qeth_count_elements(struct sk_buff *skb, unsigned int data_offset)
+static unsigned int qeth_count_elements(struct sk_buff *skb,
+                                       unsigned int data_offset)
 {
        unsigned int elements = qeth_get_elements_for_frags(skb);
        addr_t end = (addr_t)skb->data + skb_headlen(skb);
                elements += qeth_get_elements_for_range(start, end);
        return elements;
 }
-EXPORT_SYMBOL_GPL(qeth_count_elements);
 
 #define QETH_HDR_CACHE_OBJ_SIZE                (sizeof(struct qeth_hdr_tso) + \
                                         MAX_TCP_HEADER)
        return 0;
 }
 
-int qeth_do_send_packet(struct qeth_card *card, struct qeth_qdio_out_q *queue,
-                       struct sk_buff *skb, struct qeth_hdr *hdr,
-                       unsigned int offset, unsigned int hd_len,
-                       int elements_needed)
+static int qeth_do_send_packet(struct qeth_card *card,
+                              struct qeth_qdio_out_q *queue,
+                              struct sk_buff *skb, struct qeth_hdr *hdr,
+                              unsigned int offset, unsigned int hd_len,
+                              unsigned int elements_needed)
 {
        unsigned int start_index = queue->next_buf_to_fill;
        struct qeth_qdio_out_buffer *buffer;
                netif_tx_start_queue(txq);
        return rc;
 }
-EXPORT_SYMBOL_GPL(qeth_do_send_packet);
 
 static void qeth_fill_tso_ext(struct qeth_hdr_tso *hdr,
                              unsigned int payload_len, struct sk_buff *skb,
        case MII_BMCR: /* Basic mode control register */
                rc = BMCR_FULLDPLX;
                if ((card->info.link_type != QETH_LINK_TYPE_GBIT_ETH) &&
-                   (card->info.link_type != QETH_LINK_TYPE_OSN) &&
                    (card->info.link_type != QETH_LINK_TYPE_10GBIT_ETH) &&
                    (card->info.link_type != QETH_LINK_TYPE_25GBIT_ETH))
                        rc |= BMCR_SPEED100;
                                        .driver_info = QETH_CARD_TYPE_OSD},
        {CCW_DEVICE_DEVTYPE(0x1731, 0x05, 0x1732, 0x05),
                                        .driver_info = QETH_CARD_TYPE_IQD},
-#ifdef CONFIG_QETH_OSN
-       {CCW_DEVICE_DEVTYPE(0x1731, 0x06, 0x1732, 0x06),
-                                       .driver_info = QETH_CARD_TYPE_OSN},
-#endif
        {CCW_DEVICE_DEVTYPE(0x1731, 0x02, 0x1732, 0x03),
                                        .driver_info = QETH_CARD_TYPE_OSM},
 #ifdef CONFIG_QETH_OSX
        bool is_cso;
 
        switch (hdr->hdr.l2.id) {
-       case QETH_HEADER_TYPE_OSN:
-               skb_push(skb, sizeof(*hdr));
-               skb_copy_to_linear_data(skb, hdr, sizeof(*hdr));
-               QETH_CARD_STAT_ADD(card, rx_bytes, skb->len);
-               QETH_CARD_STAT_INC(card, rx_packets);
-
-               card->osn_info.data_cb(skb);
-               return;
 #if IS_ENABLED(CONFIG_QETH_L3)
        case QETH_HEADER_TYPE_LAYER3:
                qeth_l3_rebuild_skb(card, skb, hdr);
                        linear_len = sizeof(struct iphdr);
                headroom = ETH_HLEN;
                break;
-       case QETH_HEADER_TYPE_OSN:
-               skb_len = hdr->hdr.osn.pdu_length;
-               if (!IS_OSN(card)) {
-                       QETH_CARD_STAT_INC(card, rx_dropped_notsupp);
-                       goto walk_packet;
-               }
-
-               linear_len = skb_len;
-               headroom = sizeof(struct qeth_hdr);
-               break;
        default:
                if (hdr->hdr.l2.id & QETH_HEADER_MASK_INVAL)
                        QETH_CARD_STAT_INC(card, rx_frame_errors);
 
        use_rx_sg = (card->options.cq == QETH_CQ_ENABLED) ||
                    (skb_len > READ_ONCE(priv->rx_copybreak) &&
-                    !atomic_read(&card->force_alloc_skb) &&
-                    !IS_OSN(card));
+                    !atomic_read(&card->force_alloc_skb));
 
        if (use_rx_sg) {
                /* QETH_CQ_ENABLED only: */
 };
 EXPORT_SYMBOL_GPL(qeth_generic_devtype);
 
-static const struct device_type qeth_osn_devtype = {
-       .name = "qeth_osn",
-};
-
 #define DBF_NAME_LEN   20
 
 struct qeth_dbf_entry {
        case QETH_CARD_TYPE_OSM:
                dev = alloc_etherdev(sizeof(*priv));
                break;
-       case QETH_CARD_TYPE_OSN:
-               dev = alloc_netdev(sizeof(*priv), "osn%d", NET_NAME_UNKNOWN,
-                                  ether_setup);
-               break;
        default:
                dev = alloc_etherdev_mqs(sizeof(*priv), QETH_MAX_OUT_QUEUES, 1);
        }
 
        dev->ml_priv = card;
        dev->watchdog_timeo = QETH_TX_TIMEOUT;
-       dev->min_mtu = IS_OSN(card) ? 64 : 576;
+       dev->min_mtu = 576;
         /* initialized when device first goes online: */
        dev->max_mtu = 0;
        dev->mtu = 0;
        SET_NETDEV_DEV(dev, &card->gdev->dev);
        netif_carrier_off(dev);
 
-       if (IS_OSN(card)) {
-               dev->ethtool_ops = &qeth_osn_ethtool_ops;
-       } else {
-               dev->ethtool_ops = &qeth_ethtool_ops;
-               dev->priv_flags &= ~IFF_TX_SKB_SHARING;
-               dev->hw_features |= NETIF_F_SG;
-               dev->vlan_features |= NETIF_F_SG;
-               if (IS_IQD(card))
-                       dev->features |= NETIF_F_SG;
-       }
+       dev->ethtool_ops = &qeth_ethtool_ops;
+       dev->priv_flags &= ~IFF_TX_SKB_SHARING;
+       dev->hw_features |= NETIF_F_SG;
+       dev->vlan_features |= NETIF_F_SG;
+       if (IS_IQD(card))
+               dev->features |= NETIF_F_SG;
 
        return dev;
 }
        if (rc)
                goto err_chp_desc;
 
-       if (IS_OSN(card))
-               gdev->dev.groups = qeth_osn_dev_groups;
-       else
-               gdev->dev.groups = qeth_dev_groups;
+       gdev->dev.groups = qeth_dev_groups;
 
        enforced_disc = qeth_enforce_discipline(card);
        switch (enforced_disc) {
                if (rc)
                        goto err_setup_disc;
 
-               gdev->dev.type = IS_OSN(card) ? &qeth_osn_devtype :
-                                               card->discipline->devtype;
+               gdev->dev.type = card->discipline->devtype;
                break;
        }
 
        .shutdown = qeth_core_shutdown,
 };
 
-struct qeth_card *qeth_get_card_by_busid(char *bus_id)
-{
-       struct ccwgroup_device *gdev;
-       struct qeth_card *card;
-
-       gdev = get_ccwgroupdev_by_busid(&qeth_core_ccwgroup_driver, bus_id);
-       if (!gdev)
-               return NULL;
-
-       card = dev_get_drvdata(&gdev->dev);
-       put_device(&gdev->dev);
-       return card;
-}
-EXPORT_SYMBOL_GPL(qeth_get_card_by_busid);
-
 int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct qeth_card *card = dev->ml_priv;
 
        {IPA_CMD_DELVLAN,       "delvlan"},
        {IPA_CMD_VNICC,         "vnic_characteristics"},
        {IPA_CMD_SETBRIDGEPORT_OSA,     "set_bridge_port(osa)"},
-       {IPA_CMD_SETCCID,       "setccid"},
-       {IPA_CMD_DELCCID,       "delccid"},
-       {IPA_CMD_MODCCID,       "modccid"},
        {IPA_CMD_SETIP,         "setip"},
        {IPA_CMD_QIPASSIST,     "qipassist"},
        {IPA_CMD_SETASSPARMS,   "setassparms"},
 
 /*****************************************************************************/
 #define IPA_CMD_INITIATOR_HOST  0x00
 #define IPA_CMD_INITIATOR_OSA   0x01
-#define IPA_CMD_INITIATOR_HOST_REPLY  0x80
-#define IPA_CMD_INITIATOR_OSA_REPLY   0x81
 #define IPA_CMD_PRIM_VERSION_NO 0x01
 
 struct qeth_ipa_caps {
 enum qeth_card_types {
        QETH_CARD_TYPE_OSD     = 1,
        QETH_CARD_TYPE_IQD     = 5,
-       QETH_CARD_TYPE_OSN     = 6,
        QETH_CARD_TYPE_OSM     = 3,
        QETH_CARD_TYPE_OSX     = 2,
 };
 #define IS_OSD(card)   ((card)->info.type == QETH_CARD_TYPE_OSD)
 #define IS_OSM(card)   ((card)->info.type == QETH_CARD_TYPE_OSM)
 
-#ifdef CONFIG_QETH_OSN
-#define IS_OSN(card)   ((card)->info.type == QETH_CARD_TYPE_OSN)
-#else
-#define IS_OSN(card)   false
-#endif
-
 #ifdef CONFIG_QETH_OSX
 #define IS_OSX(card)   ((card)->info.type == QETH_CARD_TYPE_OSX)
 #else
        QETH_LINK_TYPE_FAST_ETH     = 0x01,
        QETH_LINK_TYPE_HSTR         = 0x02,
        QETH_LINK_TYPE_GBIT_ETH     = 0x03,
-       QETH_LINK_TYPE_OSN          = 0x04,
        QETH_LINK_TYPE_10GBIT_ETH   = 0x10,
        QETH_LINK_TYPE_25GBIT_ETH   = 0x12,
        QETH_LINK_TYPE_LANE_ETH100  = 0x81,
        IPA_CMD_DELVLAN                 = 0x26,
        IPA_CMD_VNICC                   = 0x2a,
        IPA_CMD_SETBRIDGEPORT_OSA       = 0x2b,
-       IPA_CMD_SETCCID                 = 0x41,
-       IPA_CMD_DELCCID                 = 0x42,
-       IPA_CMD_MODCCID                 = 0x43,
        IPA_CMD_SETIP                   = 0xb1,
        IPA_CMD_QIPASSIST               = 0xb2,
        IPA_CMD_SETASSPARMS             = 0xb3,
 extern const char *qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd);
 
 /* Helper functions */
-#define IS_IPA_REPLY(cmd) ((cmd->hdr.initiator == IPA_CMD_INITIATOR_HOST) || \
-                          (cmd->hdr.initiator == IPA_CMD_INITIATOR_OSA_REPLY))
+#define IS_IPA_REPLY(cmd) ((cmd)->hdr.initiator == IPA_CMD_INITIATOR_HOST)
 
 /*****************************************************************************/
 /* END OF   IP Assist related definitions                                    */
 /* Layer 2 definitions */
 #define QETH_PROT_LAYER2 0x08
 #define QETH_PROT_TCPIP  0x03
-#define QETH_PROT_OSN2   0x0a
 #define QETH_ULP_ENABLE_PROT_TYPE(buffer) (buffer + 0x50)
 #define QETH_IPA_CMD_PROT_TYPE(buffer) (buffer + 0x19)
 
 
        .attrs = qeth_dev_attrs,
 };
 
-const struct attribute_group *qeth_osn_dev_groups[] = {
-       &qeth_dev_group,
-       NULL,
-};
-
 const struct attribute_group *qeth_dev_groups[] = {
        &qeth_dev_group,
        &qeth_dev_extended_group,
 
        .set_per_queue_coalesce = qeth_set_per_queue_coalesce,
        .get_link_ksettings = qeth_get_link_ksettings,
 };
-
-const struct ethtool_ops qeth_osn_ethtool_ops = {
-       .get_strings = qeth_get_strings,
-       .get_ethtool_stats = qeth_get_ethtool_stats,
-       .get_sset_count = qeth_get_sset_count,
-       .get_drvinfo = qeth_get_drvinfo,
-};
 
                /* fall back to alternative mechanism: */
        }
 
-       if (!IS_OSN(card)) {
-               rc = qeth_setadpparms_change_macaddr(card);
-               if (!rc)
-                       goto out;
-               QETH_DBF_MESSAGE(2, "READ_MAC Assist failed on device %x: %#x\n",
-                                CARD_DEVID(card), rc);
-               QETH_CARD_TEXT_(card, 2, "1err%04x", rc);
-               /* fall back once more: */
-       }
+       rc = qeth_setadpparms_change_macaddr(card);
+       if (!rc)
+               goto out;
+       QETH_DBF_MESSAGE(2, "READ_MAC Assist failed on device %x: %#x\n",
+                        CARD_DEVID(card), rc);
+       QETH_CARD_TEXT_(card, 2, "1err%04x", rc);
 
-       /* some devices don't support a custom MAC address: */
+       /* Fall back once more, but some devices don't support a custom MAC
+        * address:
+        */
        if (IS_OSM(card) || IS_OSX(card))
                return (rc) ? rc : -EADDRNOTAVAIL;
        eth_hw_addr_random(card->dev);
        if (!is_valid_ether_addr(card->dev->dev_addr))
                qeth_l2_request_initial_mac(card);
 
-       if (!IS_OSN(card) && !qeth_l2_send_setmac(card, card->dev->dev_addr))
+       if (!qeth_l2_send_setmac(card, card->dev->dev_addr))
                card->info.dev_addr_is_registered = 1;
        else
                card->info.dev_addr_is_registered = 0;
        qeth_l2_set_promisc_mode(card);
 }
 
-static int qeth_l2_xmit_osn(struct qeth_card *card, struct sk_buff *skb,
-                           struct qeth_qdio_out_q *queue)
-{
-       gfp_t gfp = GFP_ATOMIC | (skb_pfmemalloc(skb) ? __GFP_MEMALLOC : 0);
-       struct qeth_hdr *hdr = (struct qeth_hdr *)skb->data;
-       addr_t end = (addr_t)(skb->data + sizeof(*hdr));
-       addr_t start = (addr_t)skb->data;
-       unsigned int elements = 0;
-       unsigned int hd_len = 0;
-       int rc;
-
-       if (skb->protocol == htons(ETH_P_IPV6))
-               return -EPROTONOSUPPORT;
-
-       if (qeth_get_elements_for_range(start, end) > 1) {
-               /* Misaligned HW header, move it to its own buffer element. */
-               hdr = kmem_cache_alloc(qeth_core_header_cache, gfp);
-               if (!hdr)
-                       return -ENOMEM;
-               hd_len = sizeof(*hdr);
-               skb_copy_from_linear_data(skb, (char *)hdr, hd_len);
-               elements++;
-       }
-
-       elements += qeth_count_elements(skb, hd_len);
-       if (elements > queue->max_elements) {
-               rc = -E2BIG;
-               goto out;
-       }
-
-       rc = qeth_do_send_packet(card, queue, skb, hdr, hd_len, hd_len,
-                                elements);
-out:
-       if (rc && hd_len)
-               kmem_cache_free(qeth_core_header_cache, hdr);
-       return rc;
-}
-
 static netdev_tx_t qeth_l2_hard_start_xmit(struct sk_buff *skb,
                                           struct net_device *dev)
 {
                txq = qeth_iqd_translate_txq(dev, txq);
        queue = card->qdio.out_qs[txq];
 
-       if (IS_OSN(card))
-               rc = qeth_l2_xmit_osn(card, skb, queue);
-       else
-               rc = qeth_xmit(card, skb, queue, vlan_get_protocol(skb),
-                              qeth_l2_fill_header);
-
+       rc = qeth_xmit(card, skb, queue, vlan_get_protocol(skb),
+                      qeth_l2_fill_header);
        if (!rc)
                return NETDEV_TX_OK;
 
        .ndo_bridge_setlink     = qeth_l2_bridge_setlink,
 };
 
-static const struct net_device_ops qeth_osn_netdev_ops = {
-       .ndo_open               = qeth_open,
-       .ndo_stop               = qeth_stop,
-       .ndo_get_stats64        = qeth_get_stats64,
-       .ndo_start_xmit         = qeth_l2_hard_start_xmit,
-       .ndo_validate_addr      = eth_validate_addr,
-       .ndo_tx_timeout         = qeth_tx_timeout,
-};
-
 static int qeth_l2_setup_netdev(struct qeth_card *card)
 {
-       if (IS_OSN(card)) {
-               card->dev->netdev_ops = &qeth_osn_netdev_ops;
-               card->dev->flags |= IFF_NOARP;
-               goto add_napi;
-       }
-
        card->dev->needed_headroom = sizeof(struct qeth_hdr);
        card->dev->netdev_ops = &qeth_l2_netdev_ops;
        card->dev->priv_flags |= IFF_UNICAST_FLT;
                                       PAGE_SIZE * (QDIO_MAX_ELEMENTS_PER_BUFFER - 1));
        }
 
-add_napi:
        netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT);
        return register_netdev(card->dev);
 }
        }
 }
 
-#ifdef CONFIG_QETH_OSN
-static void qeth_osn_assist_cb(struct qeth_card *card,
-                              struct qeth_cmd_buffer *iob,
-                              unsigned int data_length)
-{
-       qeth_notify_cmd(iob, 0);
-       qeth_put_cmd(iob);
-}
-
-int qeth_osn_assist(struct net_device *dev, void *data, int data_len)
-{
-       struct qeth_cmd_buffer *iob;
-       struct qeth_card *card;
-
-       if (data_len < 0)
-               return -EINVAL;
-       if (!dev)
-               return -ENODEV;
-       card = dev->ml_priv;
-       if (!card)
-               return -ENODEV;
-       QETH_CARD_TEXT(card, 2, "osnsdmc");
-       if (!qeth_card_hw_is_reachable(card))
-               return -ENODEV;
-
-       iob = qeth_alloc_cmd(&card->write, IPA_PDU_HEADER_SIZE + data_len, 1,
-                            QETH_IPA_TIMEOUT);
-       if (!iob)
-               return -ENOMEM;
-
-       qeth_prepare_ipa_cmd(card, iob, (u16) data_len, NULL);
-
-       memcpy(__ipa_cmd(iob), data, data_len);
-       iob->callback = qeth_osn_assist_cb;
-       return qeth_send_ipa_cmd(card, iob, NULL, NULL);
-}
-EXPORT_SYMBOL(qeth_osn_assist);
-
-int qeth_osn_register(unsigned char *read_dev_no, struct net_device **dev,
-                 int (*assist_cb)(struct net_device *, void *),
-                 int (*data_cb)(struct sk_buff *))
-{
-       struct qeth_card *card;
-       char bus_id[16];
-       u16 devno;
-
-       memcpy(&devno, read_dev_no, 2);
-       sprintf(bus_id, "0.0.%04x", devno);
-       card = qeth_get_card_by_busid(bus_id);
-       if (!card || !IS_OSN(card))
-               return -ENODEV;
-       *dev = card->dev;
-
-       QETH_CARD_TEXT(card, 2, "osnreg");
-       if ((assist_cb == NULL) || (data_cb == NULL))
-               return -EINVAL;
-       card->osn_info.assist_cb = assist_cb;
-       card->osn_info.data_cb = data_cb;
-       return 0;
-}
-EXPORT_SYMBOL(qeth_osn_register);
-
-void qeth_osn_deregister(struct net_device *dev)
-{
-       struct qeth_card *card;
-
-       if (!dev)
-               return;
-       card = dev->ml_priv;
-       if (!card)
-               return;
-       QETH_CARD_TEXT(card, 2, "osndereg");
-       card->osn_info.assist_cb = NULL;
-       card->osn_info.data_cb = NULL;
-}
-EXPORT_SYMBOL(qeth_osn_deregister);
-#endif
-
 /* SETBRIDGEPORT support, async notifications */
 
 enum qeth_an_event_type {anev_reg_unreg, anev_abort, anev_reset};
        struct qeth_card *card = dev_get_drvdata(&gdev->dev);
        int rc;
 
-       if (IS_OSN(card))
-               dev_notice(&gdev->dev, "OSN support will be dropped in 2021\n");
-
        qeth_l2_vnicc_set_defaults(card);
        mutex_init(&card->sbp_lock);