Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

s390/qeth: remove OSN support

Commit fb64de1bc36c ("s390/qeth: phase out OSN support") spelled out
why the OSN support in qeth is in a bad shape, and put any remaining
interested parties on notice to speak up before it gets ripped out.

It's 2021 now, so make true on that promise and remove all the
OSN-specific parts from qeth. This also means that we no longer need to
export various parts of the cmd & data path internals to the L2 driver.

Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Julian Wiedmann and committed by
David S. Miller
a8c7629c bc672d49

+48 -375
-2
arch/s390/include/asm/ccwgroup.h
··· 53 53 extern void ccwgroup_driver_unregister (struct ccwgroup_driver *cdriver); 54 54 int ccwgroup_create_dev(struct device *root, struct ccwgroup_driver *gdrv, 55 55 int num_devices, const char *buf); 56 - struct ccwgroup_device *get_ccwgroupdev_by_busid(struct ccwgroup_driver *gdrv, 57 - char *bus_id); 58 56 59 57 extern int ccwgroup_set_online(struct ccwgroup_device *gdev); 60 58 extern int ccwgroup_set_offline(struct ccwgroup_device *gdev);
-22
drivers/s390/cio/ccwgroup.c
··· 504 504 EXPORT_SYMBOL(ccwgroup_driver_unregister); 505 505 506 506 /** 507 - * get_ccwgroupdev_by_busid() - obtain device from a bus id 508 - * @gdrv: driver the device is owned by 509 - * @bus_id: bus id of the device to be searched 510 - * 511 - * This function searches all devices owned by @gdrv for a device with a bus 512 - * id matching @bus_id. 513 - * Returns: 514 - * If a match is found, its reference count of the found device is increased 515 - * and it is returned; else %NULL is returned. 516 - */ 517 - struct ccwgroup_device *get_ccwgroupdev_by_busid(struct ccwgroup_driver *gdrv, 518 - char *bus_id) 519 - { 520 - struct device *dev; 521 - 522 - dev = driver_find_device_by_name(&gdrv->driver, bus_id); 523 - 524 - return dev ? to_ccwgroupdev(dev) : NULL; 525 - } 526 - EXPORT_SYMBOL_GPL(get_ccwgroupdev_by_busid); 527 - 528 - /** 529 507 * ccwgroup_probe_ccwdev() - probe function for slave devices 530 508 * @cdev: ccw device to be probed 531 509 *
-9
drivers/s390/net/Kconfig
··· 88 88 To compile as a module choose M. The module name is qeth_l3. 89 89 If unsure, choose Y. 90 90 91 - config QETH_OSN 92 - def_bool !HAVE_MARCH_Z14_FEATURES 93 - prompt "qeth OSN device support" 94 - depends on QETH 95 - help 96 - This enables the qeth driver to support devices in OSN mode. 97 - This feature will be removed in 2021. 98 - If unsure, choose N. 99 - 100 91 config QETH_OSX 101 92 def_bool !HAVE_MARCH_Z15_FEATURES 102 93 prompt "qeth OSX device support"
-44
drivers/s390/net/qeth_core.h
··· 259 259 __u8 reserved2[16]; 260 260 } __attribute__ ((packed)); 261 261 262 - struct qeth_hdr_osn { 263 - __u8 id; 264 - __u8 reserved; 265 - __u16 seq_no; 266 - __u16 reserved2; 267 - __u16 control_flags; 268 - __u16 pdu_length; 269 - __u8 reserved3[18]; 270 - __u32 ccid; 271 - } __attribute__ ((packed)); 272 - 273 262 struct qeth_hdr { 274 263 union { 275 264 struct qeth_hdr_layer2 l2; 276 265 struct qeth_hdr_layer3 l3; 277 - struct qeth_hdr_osn osn; 278 266 } hdr; 279 267 } __attribute__ ((packed)); 280 268 ··· 329 341 QETH_HEADER_TYPE_LAYER3 = 0x01, 330 342 QETH_HEADER_TYPE_LAYER2 = 0x02, 331 343 QETH_HEADER_TYPE_L3_TSO = 0x03, 332 - QETH_HEADER_TYPE_OSN = 0x04, 333 344 QETH_HEADER_TYPE_L2_TSO = 0x06, 334 345 QETH_HEADER_MASK_INVAL = 0x80, 335 346 }; ··· 766 779 QETH_RECOVER_THREAD = 1, 767 780 }; 768 781 769 - struct qeth_osn_info { 770 - int (*assist_cb)(struct net_device *dev, void *data); 771 - int (*data_cb)(struct sk_buff *skb); 772 - }; 773 - 774 782 struct qeth_discipline { 775 783 const struct device_type *devtype; 776 784 int (*setup) (struct ccwgroup_device *); ··· 847 865 /* QDIO buffer handling */ 848 866 struct qeth_qdio_info qdio; 849 867 int read_or_write_problem; 850 - struct qeth_osn_info osn_info; 851 868 const struct qeth_discipline *discipline; 852 869 atomic_t force_alloc_skb; 853 870 struct service_level qeth_service_level; ··· 1039 1058 extern const struct qeth_discipline qeth_l2_discipline; 1040 1059 extern const struct qeth_discipline qeth_l3_discipline; 1041 1060 extern const struct ethtool_ops qeth_ethtool_ops; 1042 - extern const struct ethtool_ops qeth_osn_ethtool_ops; 1043 1061 extern const struct attribute_group *qeth_dev_groups[]; 1044 - extern const struct attribute_group *qeth_osn_dev_groups[]; 1045 1062 extern const struct device_type qeth_generic_devtype; 1046 1063 1047 1064 const char *qeth_get_cardname_short(struct qeth_card *); ··· 1048 1069 void qeth_remove_discipline(struct qeth_card *card); 1049 1070 1050 1071 /* exports for qeth discipline device drivers */ 1051 - extern struct kmem_cache *qeth_core_header_cache; 1052 1072 extern struct qeth_dbf_info qeth_dbf[QETH_DBF_INFOS]; 1053 1073 1054 1074 struct net_device *qeth_clone_netdev(struct net_device *orig); 1055 - struct qeth_card *qeth_get_card_by_busid(char *bus_id); 1056 1075 void qeth_set_allowed_threads(struct qeth_card *card, unsigned long threads, 1057 1076 int clear_start_mask); 1058 1077 int qeth_threads_running(struct qeth_card *, unsigned long); ··· 1065 1088 enum qeth_ipa_cmds cmd_code, 1066 1089 enum qeth_prot_versions prot, 1067 1090 unsigned int data_length); 1068 - struct qeth_cmd_buffer *qeth_alloc_cmd(struct qeth_channel *channel, 1069 - unsigned int length, unsigned int ccws, 1070 - long timeout); 1071 1091 struct qeth_cmd_buffer *qeth_get_setassparms_cmd(struct qeth_card *card, 1072 1092 enum qeth_ipa_funcs ipa_func, 1073 1093 u16 cmd_code, ··· 1073 1099 struct qeth_cmd_buffer *qeth_get_diag_cmd(struct qeth_card *card, 1074 1100 enum qeth_diags_cmds sub_cmd, 1075 1101 unsigned int data_length); 1076 - void qeth_notify_cmd(struct qeth_cmd_buffer *iob, int reason); 1077 - void qeth_put_cmd(struct qeth_cmd_buffer *iob); 1078 1102 1079 1103 int qeth_schedule_recovery(struct qeth_card *card); 1080 1104 int qeth_poll(struct napi_struct *napi, int budget); 1081 1105 void qeth_setadp_promisc_mode(struct qeth_card *card, bool enable); 1082 1106 int qeth_setadpparms_change_macaddr(struct qeth_card *); 1083 1107 void qeth_tx_timeout(struct net_device *, unsigned int txqueue); 1084 - void qeth_prepare_ipa_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob, 1085 - u16 cmd_length, 1086 - bool (*match)(struct qeth_cmd_buffer *iob, 1087 - struct qeth_cmd_buffer *reply)); 1088 1108 int qeth_query_switch_attributes(struct qeth_card *card, 1089 1109 struct qeth_switch_info *sw_info); 1090 1110 int qeth_query_card_info(struct qeth_card *card, ··· 1086 1118 int qeth_setadpparms_set_access_ctrl(struct qeth_card *card, 1087 1119 enum qeth_ipa_isolation_modes mode); 1088 1120 1089 - unsigned int qeth_count_elements(struct sk_buff *skb, unsigned int data_offset); 1090 - int qeth_do_send_packet(struct qeth_card *card, struct qeth_qdio_out_q *queue, 1091 - struct sk_buff *skb, struct qeth_hdr *hdr, 1092 - unsigned int offset, unsigned int hd_len, 1093 - int elements_needed); 1094 1121 int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); 1095 1122 void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...); 1096 1123 int qeth_configure_cq(struct qeth_card *, enum qeth_cq); ··· 1110 1147 void (*fill_header)(struct qeth_qdio_out_q *queue, 1111 1148 struct qeth_hdr *hdr, struct sk_buff *skb, 1112 1149 __be16 proto, unsigned int data_len)); 1113 - 1114 - /* exports for OSN */ 1115 - int qeth_osn_assist(struct net_device *, void *, int); 1116 - int qeth_osn_register(unsigned char *read_dev_no, struct net_device **, 1117 - int (*assist_cb)(struct net_device *, void *), 1118 - int (*data_cb)(struct sk_buff *)); 1119 - void qeth_osn_deregister(struct net_device *); 1120 1150 1121 1151 #endif /* __QETH_CORE_H__ */
+35 -115
drivers/s390/net/qeth_core_main.c
··· 57 57 }; 58 58 EXPORT_SYMBOL_GPL(qeth_dbf); 59 59 60 - struct kmem_cache *qeth_core_header_cache; 61 - EXPORT_SYMBOL_GPL(qeth_core_header_cache); 60 + static struct kmem_cache *qeth_core_header_cache; 62 61 static struct kmem_cache *qeth_qdio_outbuf_cache; 63 62 64 63 static struct device *qeth_core_root_dev; ··· 100 101 return " OSD Express"; 101 102 case QETH_CARD_TYPE_IQD: 102 103 return " HiperSockets"; 103 - case QETH_CARD_TYPE_OSN: 104 - return " OSN QDIO"; 105 104 case QETH_CARD_TYPE_OSM: 106 105 return " OSM QDIO"; 107 106 case QETH_CARD_TYPE_OSX: ··· 154 157 } 155 158 case QETH_CARD_TYPE_IQD: 156 159 return "HiperSockets"; 157 - case QETH_CARD_TYPE_OSN: 158 - return "OSN"; 159 160 case QETH_CARD_TYPE_OSM: 160 161 return "OSM_1000"; 161 162 case QETH_CARD_TYPE_OSX: ··· 426 431 return n; 427 432 } 428 433 434 + static void qeth_put_cmd(struct qeth_cmd_buffer *iob) 435 + { 436 + if (refcount_dec_and_test(&iob->ref_count)) { 437 + kfree(iob->data); 438 + kfree(iob); 439 + } 440 + } 429 441 static void qeth_setup_ccw(struct ccw1 *ccw, u8 cmd_code, u8 flags, u32 len, 430 442 void *data) 431 443 { ··· 501 499 spin_unlock_irq(&card->lock); 502 500 } 503 501 504 - void qeth_notify_cmd(struct qeth_cmd_buffer *iob, int reason) 502 + static void qeth_notify_cmd(struct qeth_cmd_buffer *iob, int reason) 505 503 { 506 504 iob->rc = reason; 507 505 complete(&iob->done); 508 506 } 509 - EXPORT_SYMBOL_GPL(qeth_notify_cmd); 510 507 511 508 static void qeth_flush_local_addrs4(struct qeth_card *card) 512 509 { ··· 782 781 QETH_CARD_TEXT(card, 5, "chkipad"); 783 782 784 783 if (IS_IPA_REPLY(cmd)) { 785 - if (cmd->hdr.command != IPA_CMD_SETCCID && 786 - cmd->hdr.command != IPA_CMD_DELCCID && 787 - cmd->hdr.command != IPA_CMD_MODCCID && 788 - cmd->hdr.command != IPA_CMD_SET_DIAG_ASS) 784 + if (cmd->hdr.command != IPA_CMD_SET_DIAG_ASS) 789 785 qeth_issue_ipa_msg(cmd, cmd->hdr.return_code, card); 790 786 return cmd; 791 787 } ··· 817 819 if (card->discipline->control_event_handler(card, cmd)) 818 820 return cmd; 819 821 return NULL; 820 - case IPA_CMD_MODCCID: 821 - return cmd; 822 822 case IPA_CMD_REGISTER_LOCAL_ADDR: 823 823 if (cmd->hdr.prot_version == QETH_PROT_IPV4) 824 824 qeth_add_local_addrs4(card, &cmd->data.local_addrs4); ··· 873 877 return 0; 874 878 } 875 879 876 - void qeth_put_cmd(struct qeth_cmd_buffer *iob) 877 - { 878 - if (refcount_dec_and_test(&iob->ref_count)) { 879 - kfree(iob->data); 880 - kfree(iob); 881 - } 882 - } 883 - EXPORT_SYMBOL_GPL(qeth_put_cmd); 884 - 885 880 static void qeth_release_buffer_cb(struct qeth_card *card, 886 881 struct qeth_cmd_buffer *iob, 887 882 unsigned int data_length) ··· 886 899 qeth_put_cmd(iob); 887 900 } 888 901 889 - struct qeth_cmd_buffer *qeth_alloc_cmd(struct qeth_channel *channel, 890 - unsigned int length, unsigned int ccws, 891 - long timeout) 902 + static struct qeth_cmd_buffer *qeth_alloc_cmd(struct qeth_channel *channel, 903 + unsigned int length, 904 + unsigned int ccws, long timeout) 892 905 { 893 906 struct qeth_cmd_buffer *iob; 894 907 ··· 914 927 iob->length = length; 915 928 return iob; 916 929 } 917 - EXPORT_SYMBOL_GPL(qeth_alloc_cmd); 918 930 919 931 static void qeth_issue_next_read_cb(struct qeth_card *card, 920 932 struct qeth_cmd_buffer *iob, ··· 944 958 cmd = qeth_check_ipa_data(card, cmd); 945 959 if (!cmd) 946 960 goto out; 947 - if (IS_OSN(card) && card->osn_info.assist_cb && 948 - cmd->hdr.command != IPA_CMD_STARTLAN) { 949 - card->osn_info.assist_cb(card->dev, cmd); 950 - goto out; 951 - } 952 961 } 953 962 954 963 /* match against pending cmd requests */ ··· 1816 1835 { 1817 1836 enum qeth_discipline_id disc = QETH_DISCIPLINE_UNDETERMINED; 1818 1837 1819 - if (IS_OSM(card) || IS_OSN(card)) 1838 + if (IS_OSM(card)) 1820 1839 disc = QETH_DISCIPLINE_LAYER2; 1821 1840 else if (IS_VM_NIC(card)) 1822 1841 disc = IS_IQD(card) ? QETH_DISCIPLINE_LAYER3 : ··· 1866 1885 card->info.func_level = QETH_IDX_FUNC_LEVEL_IQD; 1867 1886 break; 1868 1887 case QETH_CARD_TYPE_OSD: 1869 - case QETH_CARD_TYPE_OSN: 1870 1888 card->info.func_level = QETH_IDX_FUNC_LEVEL_OSD; 1871 1889 break; 1872 1890 default: ··· 2422 2442 2423 2443 static u8 qeth_mpc_select_prot_type(struct qeth_card *card) 2424 2444 { 2425 - if (IS_OSN(card)) 2426 - return QETH_PROT_OSN2; 2427 2445 return IS_LAYER2(card) ? QETH_PROT_LAYER2 : QETH_PROT_TCPIP; 2428 2446 } 2429 2447 ··· 2978 3000 __ipa_cmd(iob)->hdr.seqno = card->seqno.ipa++; 2979 3001 } 2980 3002 2981 - void qeth_prepare_ipa_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob, 2982 - u16 cmd_length, 2983 - bool (*match)(struct qeth_cmd_buffer *iob, 2984 - struct qeth_cmd_buffer *reply)) 3003 + static void qeth_prepare_ipa_cmd(struct qeth_card *card, 3004 + struct qeth_cmd_buffer *iob, u16 cmd_length) 2985 3005 { 2986 3006 u8 prot_type = qeth_mpc_select_prot_type(card); 2987 3007 u16 total_length = iob->length; ··· 2987 3011 qeth_setup_ccw(__ccw_from_cmd(iob), CCW_CMD_WRITE, 0, total_length, 2988 3012 iob->data); 2989 3013 iob->finalize = qeth_ipa_finalize_cmd; 2990 - iob->match = match; 2991 3014 2992 3015 memcpy(iob->data, IPA_PDU_HEADER, IPA_PDU_HEADER_SIZE); 2993 3016 memcpy(QETH_IPA_PDU_LEN_TOTAL(iob->data), &total_length, 2); ··· 2997 3022 &card->token.ulp_connection_r, QETH_MPC_TOKEN_LENGTH); 2998 3023 memcpy(QETH_IPA_PDU_LEN_PDU3(iob->data), &cmd_length, 2); 2999 3024 } 3000 - EXPORT_SYMBOL_GPL(qeth_prepare_ipa_cmd); 3001 3025 3002 3026 static bool qeth_ipa_match_reply(struct qeth_cmd_buffer *iob, 3003 3027 struct qeth_cmd_buffer *reply) ··· 3020 3046 if (!iob) 3021 3047 return NULL; 3022 3048 3023 - qeth_prepare_ipa_cmd(card, iob, data_length, qeth_ipa_match_reply); 3049 + qeth_prepare_ipa_cmd(card, iob, data_length); 3050 + iob->match = qeth_ipa_match_reply; 3024 3051 3025 3052 hdr = &__ipa_cmd(iob)->hdr; 3026 3053 hdr->command = cmd_code; ··· 3869 3894 * Returns the number of pages, and thus QDIO buffer elements, needed to map the 3870 3895 * skb's data (both its linear part and paged fragments). 3871 3896 */ 3872 - unsigned int qeth_count_elements(struct sk_buff *skb, unsigned int data_offset) 3897 + static unsigned int qeth_count_elements(struct sk_buff *skb, 3898 + unsigned int data_offset) 3873 3899 { 3874 3900 unsigned int elements = qeth_get_elements_for_frags(skb); 3875 3901 addr_t end = (addr_t)skb->data + skb_headlen(skb); ··· 3880 3904 elements += qeth_get_elements_for_range(start, end); 3881 3905 return elements; 3882 3906 } 3883 - EXPORT_SYMBOL_GPL(qeth_count_elements); 3884 3907 3885 3908 #define QETH_HDR_CACHE_OBJ_SIZE (sizeof(struct qeth_hdr_tso) + \ 3886 3909 MAX_TCP_HEADER) ··· 4167 4192 return 0; 4168 4193 } 4169 4194 4170 - int qeth_do_send_packet(struct qeth_card *card, struct qeth_qdio_out_q *queue, 4171 - struct sk_buff *skb, struct qeth_hdr *hdr, 4172 - unsigned int offset, unsigned int hd_len, 4173 - int elements_needed) 4195 + static int qeth_do_send_packet(struct qeth_card *card, 4196 + struct qeth_qdio_out_q *queue, 4197 + struct sk_buff *skb, struct qeth_hdr *hdr, 4198 + unsigned int offset, unsigned int hd_len, 4199 + unsigned int elements_needed) 4174 4200 { 4175 4201 unsigned int start_index = queue->next_buf_to_fill; 4176 4202 struct qeth_qdio_out_buffer *buffer; ··· 4251 4275 netif_tx_start_queue(txq); 4252 4276 return rc; 4253 4277 } 4254 - EXPORT_SYMBOL_GPL(qeth_do_send_packet); 4255 4278 4256 4279 static void qeth_fill_tso_ext(struct qeth_hdr_tso *hdr, 4257 4280 unsigned int payload_len, struct sk_buff *skb, ··· 4529 4554 case MII_BMCR: /* Basic mode control register */ 4530 4555 rc = BMCR_FULLDPLX; 4531 4556 if ((card->info.link_type != QETH_LINK_TYPE_GBIT_ETH) && 4532 - (card->info.link_type != QETH_LINK_TYPE_OSN) && 4533 4557 (card->info.link_type != QETH_LINK_TYPE_10GBIT_ETH) && 4534 4558 (card->info.link_type != QETH_LINK_TYPE_25GBIT_ETH)) 4535 4559 rc |= BMCR_SPEED100; ··· 5240 5266 .driver_info = QETH_CARD_TYPE_OSD}, 5241 5267 {CCW_DEVICE_DEVTYPE(0x1731, 0x05, 0x1732, 0x05), 5242 5268 .driver_info = QETH_CARD_TYPE_IQD}, 5243 - #ifdef CONFIG_QETH_OSN 5244 - {CCW_DEVICE_DEVTYPE(0x1731, 0x06, 0x1732, 0x06), 5245 - .driver_info = QETH_CARD_TYPE_OSN}, 5246 - #endif 5247 5269 {CCW_DEVICE_DEVTYPE(0x1731, 0x02, 0x1732, 0x03), 5248 5270 .driver_info = QETH_CARD_TYPE_OSM}, 5249 5271 #ifdef CONFIG_QETH_OSX ··· 5598 5628 bool is_cso; 5599 5629 5600 5630 switch (hdr->hdr.l2.id) { 5601 - case QETH_HEADER_TYPE_OSN: 5602 - skb_push(skb, sizeof(*hdr)); 5603 - skb_copy_to_linear_data(skb, hdr, sizeof(*hdr)); 5604 - QETH_CARD_STAT_ADD(card, rx_bytes, skb->len); 5605 - QETH_CARD_STAT_INC(card, rx_packets); 5606 - 5607 - card->osn_info.data_cb(skb); 5608 - return; 5609 5631 #if IS_ENABLED(CONFIG_QETH_L3) 5610 5632 case QETH_HEADER_TYPE_LAYER3: 5611 5633 qeth_l3_rebuild_skb(card, skb, hdr); ··· 5712 5750 linear_len = sizeof(struct iphdr); 5713 5751 headroom = ETH_HLEN; 5714 5752 break; 5715 - case QETH_HEADER_TYPE_OSN: 5716 - skb_len = hdr->hdr.osn.pdu_length; 5717 - if (!IS_OSN(card)) { 5718 - QETH_CARD_STAT_INC(card, rx_dropped_notsupp); 5719 - goto walk_packet; 5720 - } 5721 - 5722 - linear_len = skb_len; 5723 - headroom = sizeof(struct qeth_hdr); 5724 - break; 5725 5753 default: 5726 5754 if (hdr->hdr.l2.id & QETH_HEADER_MASK_INVAL) 5727 5755 QETH_CARD_STAT_INC(card, rx_frame_errors); ··· 5729 5777 5730 5778 use_rx_sg = (card->options.cq == QETH_CQ_ENABLED) || 5731 5779 (skb_len > READ_ONCE(priv->rx_copybreak) && 5732 - !atomic_read(&card->force_alloc_skb) && 5733 - !IS_OSN(card)); 5780 + !atomic_read(&card->force_alloc_skb)); 5734 5781 5735 5782 if (use_rx_sg) { 5736 5783 /* QETH_CQ_ENABLED only: */ ··· 6291 6340 }; 6292 6341 EXPORT_SYMBOL_GPL(qeth_generic_devtype); 6293 6342 6294 - static const struct device_type qeth_osn_devtype = { 6295 - .name = "qeth_osn", 6296 - }; 6297 - 6298 6343 #define DBF_NAME_LEN 20 6299 6344 6300 6345 struct qeth_dbf_entry { ··· 6372 6425 case QETH_CARD_TYPE_OSM: 6373 6426 dev = alloc_etherdev(sizeof(*priv)); 6374 6427 break; 6375 - case QETH_CARD_TYPE_OSN: 6376 - dev = alloc_netdev(sizeof(*priv), "osn%d", NET_NAME_UNKNOWN, 6377 - ether_setup); 6378 - break; 6379 6428 default: 6380 6429 dev = alloc_etherdev_mqs(sizeof(*priv), QETH_MAX_OUT_QUEUES, 1); 6381 6430 } ··· 6385 6442 6386 6443 dev->ml_priv = card; 6387 6444 dev->watchdog_timeo = QETH_TX_TIMEOUT; 6388 - dev->min_mtu = IS_OSN(card) ? 64 : 576; 6445 + dev->min_mtu = 576; 6389 6446 /* initialized when device first goes online: */ 6390 6447 dev->max_mtu = 0; 6391 6448 dev->mtu = 0; 6392 6449 SET_NETDEV_DEV(dev, &card->gdev->dev); 6393 6450 netif_carrier_off(dev); 6394 6451 6395 - if (IS_OSN(card)) { 6396 - dev->ethtool_ops = &qeth_osn_ethtool_ops; 6397 - } else { 6398 - dev->ethtool_ops = &qeth_ethtool_ops; 6399 - dev->priv_flags &= ~IFF_TX_SKB_SHARING; 6400 - dev->hw_features |= NETIF_F_SG; 6401 - dev->vlan_features |= NETIF_F_SG; 6402 - if (IS_IQD(card)) 6403 - dev->features |= NETIF_F_SG; 6404 - } 6452 + dev->ethtool_ops = &qeth_ethtool_ops; 6453 + dev->priv_flags &= ~IFF_TX_SKB_SHARING; 6454 + dev->hw_features |= NETIF_F_SG; 6455 + dev->vlan_features |= NETIF_F_SG; 6456 + if (IS_IQD(card)) 6457 + dev->features |= NETIF_F_SG; 6405 6458 6406 6459 return dev; 6407 6460 } ··· 6460 6521 if (rc) 6461 6522 goto err_chp_desc; 6462 6523 6463 - if (IS_OSN(card)) 6464 - gdev->dev.groups = qeth_osn_dev_groups; 6465 - else 6466 - gdev->dev.groups = qeth_dev_groups; 6524 + gdev->dev.groups = qeth_dev_groups; 6467 6525 6468 6526 enforced_disc = qeth_enforce_discipline(card); 6469 6527 switch (enforced_disc) { ··· 6474 6538 if (rc) 6475 6539 goto err_setup_disc; 6476 6540 6477 - gdev->dev.type = IS_OSN(card) ? &qeth_osn_devtype : 6478 - card->discipline->devtype; 6541 + gdev->dev.type = card->discipline->devtype; 6479 6542 break; 6480 6543 } 6481 6544 ··· 6591 6656 .set_offline = qeth_core_set_offline, 6592 6657 .shutdown = qeth_core_shutdown, 6593 6658 }; 6594 - 6595 - struct qeth_card *qeth_get_card_by_busid(char *bus_id) 6596 - { 6597 - struct ccwgroup_device *gdev; 6598 - struct qeth_card *card; 6599 - 6600 - gdev = get_ccwgroupdev_by_busid(&qeth_core_ccwgroup_driver, bus_id); 6601 - if (!gdev) 6602 - return NULL; 6603 - 6604 - card = dev_get_drvdata(&gdev->dev); 6605 - put_device(&gdev->dev); 6606 - return card; 6607 - } 6608 - EXPORT_SYMBOL_GPL(qeth_get_card_by_busid); 6609 6659 6610 6660 int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 6611 6661 {
-3
drivers/s390/net/qeth_core_mpc.c
··· 232 232 {IPA_CMD_DELVLAN, "delvlan"}, 233 233 {IPA_CMD_VNICC, "vnic_characteristics"}, 234 234 {IPA_CMD_SETBRIDGEPORT_OSA, "set_bridge_port(osa)"}, 235 - {IPA_CMD_SETCCID, "setccid"}, 236 - {IPA_CMD_DELCCID, "delccid"}, 237 - {IPA_CMD_MODCCID, "modccid"}, 238 235 {IPA_CMD_SETIP, "setip"}, 239 236 {IPA_CMD_QIPASSIST, "qipassist"}, 240 237 {IPA_CMD_SETASSPARMS, "setassparms"},
+1 -16
drivers/s390/net/qeth_core_mpc.h
··· 34 34 /*****************************************************************************/ 35 35 #define IPA_CMD_INITIATOR_HOST 0x00 36 36 #define IPA_CMD_INITIATOR_OSA 0x01 37 - #define IPA_CMD_INITIATOR_HOST_REPLY 0x80 38 - #define IPA_CMD_INITIATOR_OSA_REPLY 0x81 39 37 #define IPA_CMD_PRIM_VERSION_NO 0x01 40 38 41 39 struct qeth_ipa_caps { ··· 64 66 enum qeth_card_types { 65 67 QETH_CARD_TYPE_OSD = 1, 66 68 QETH_CARD_TYPE_IQD = 5, 67 - QETH_CARD_TYPE_OSN = 6, 68 69 QETH_CARD_TYPE_OSM = 3, 69 70 QETH_CARD_TYPE_OSX = 2, 70 71 }; ··· 71 74 #define IS_IQD(card) ((card)->info.type == QETH_CARD_TYPE_IQD) 72 75 #define IS_OSD(card) ((card)->info.type == QETH_CARD_TYPE_OSD) 73 76 #define IS_OSM(card) ((card)->info.type == QETH_CARD_TYPE_OSM) 74 - 75 - #ifdef CONFIG_QETH_OSN 76 - #define IS_OSN(card) ((card)->info.type == QETH_CARD_TYPE_OSN) 77 - #else 78 - #define IS_OSN(card) false 79 - #endif 80 77 81 78 #ifdef CONFIG_QETH_OSX 82 79 #define IS_OSX(card) ((card)->info.type == QETH_CARD_TYPE_OSX) ··· 86 95 QETH_LINK_TYPE_FAST_ETH = 0x01, 87 96 QETH_LINK_TYPE_HSTR = 0x02, 88 97 QETH_LINK_TYPE_GBIT_ETH = 0x03, 89 - QETH_LINK_TYPE_OSN = 0x04, 90 98 QETH_LINK_TYPE_10GBIT_ETH = 0x10, 91 99 QETH_LINK_TYPE_25GBIT_ETH = 0x12, 92 100 QETH_LINK_TYPE_LANE_ETH100 = 0x81, ··· 116 126 IPA_CMD_DELVLAN = 0x26, 117 127 IPA_CMD_VNICC = 0x2a, 118 128 IPA_CMD_SETBRIDGEPORT_OSA = 0x2b, 119 - IPA_CMD_SETCCID = 0x41, 120 - IPA_CMD_DELCCID = 0x42, 121 - IPA_CMD_MODCCID = 0x43, 122 129 IPA_CMD_SETIP = 0xb1, 123 130 IPA_CMD_QIPASSIST = 0xb2, 124 131 IPA_CMD_SETASSPARMS = 0xb3, ··· 866 879 extern const char *qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd); 867 880 868 881 /* Helper functions */ 869 - #define IS_IPA_REPLY(cmd) ((cmd->hdr.initiator == IPA_CMD_INITIATOR_HOST) || \ 870 - (cmd->hdr.initiator == IPA_CMD_INITIATOR_OSA_REPLY)) 882 + #define IS_IPA_REPLY(cmd) ((cmd)->hdr.initiator == IPA_CMD_INITIATOR_HOST) 871 883 872 884 /*****************************************************************************/ 873 885 /* END OF IP Assist related definitions */ ··· 908 922 /* Layer 2 definitions */ 909 923 #define QETH_PROT_LAYER2 0x08 910 924 #define QETH_PROT_TCPIP 0x03 911 - #define QETH_PROT_OSN2 0x0a 912 925 #define QETH_ULP_ENABLE_PROT_TYPE(buffer) (buffer + 0x50) 913 926 #define QETH_IPA_CMD_PROT_TYPE(buffer) (buffer + 0x19) 914 927
-5
drivers/s390/net/qeth_core_sys.c
··· 671 671 .attrs = qeth_dev_attrs, 672 672 }; 673 673 674 - const struct attribute_group *qeth_osn_dev_groups[] = { 675 - &qeth_dev_group, 676 - NULL, 677 - }; 678 - 679 674 const struct attribute_group *qeth_dev_groups[] = { 680 675 &qeth_dev_group, 681 676 &qeth_dev_extended_group,
-7
drivers/s390/net/qeth_ethtool.c
··· 469 469 .set_per_queue_coalesce = qeth_set_per_queue_coalesce, 470 470 .get_link_ksettings = qeth_get_link_ksettings, 471 471 }; 472 - 473 - const struct ethtool_ops qeth_osn_ethtool_ops = { 474 - .get_strings = qeth_get_strings, 475 - .get_ethtool_stats = qeth_get_ethtool_stats, 476 - .get_sset_count = qeth_get_sset_count, 477 - .get_drvinfo = qeth_get_drvinfo, 478 - };
+12 -152
drivers/s390/net/qeth_l2_main.c
··· 309 309 /* fall back to alternative mechanism: */ 310 310 } 311 311 312 - if (!IS_OSN(card)) { 313 - rc = qeth_setadpparms_change_macaddr(card); 314 - if (!rc) 315 - goto out; 316 - QETH_DBF_MESSAGE(2, "READ_MAC Assist failed on device %x: %#x\n", 317 - CARD_DEVID(card), rc); 318 - QETH_CARD_TEXT_(card, 2, "1err%04x", rc); 319 - /* fall back once more: */ 320 - } 312 + rc = qeth_setadpparms_change_macaddr(card); 313 + if (!rc) 314 + goto out; 315 + QETH_DBF_MESSAGE(2, "READ_MAC Assist failed on device %x: %#x\n", 316 + CARD_DEVID(card), rc); 317 + QETH_CARD_TEXT_(card, 2, "1err%04x", rc); 321 318 322 - /* some devices don't support a custom MAC address: */ 319 + /* Fall back once more, but some devices don't support a custom MAC 320 + * address: 321 + */ 323 322 if (IS_OSM(card) || IS_OSX(card)) 324 323 return (rc) ? rc : -EADDRNOTAVAIL; 325 324 eth_hw_addr_random(card->dev); ··· 333 334 if (!is_valid_ether_addr(card->dev->dev_addr)) 334 335 qeth_l2_request_initial_mac(card); 335 336 336 - if (!IS_OSN(card) && !qeth_l2_send_setmac(card, card->dev->dev_addr)) 337 + if (!qeth_l2_send_setmac(card, card->dev->dev_addr)) 337 338 card->info.dev_addr_is_registered = 1; 338 339 else 339 340 card->info.dev_addr_is_registered = 0; ··· 495 496 qeth_l2_set_promisc_mode(card); 496 497 } 497 498 498 - static int qeth_l2_xmit_osn(struct qeth_card *card, struct sk_buff *skb, 499 - struct qeth_qdio_out_q *queue) 500 - { 501 - gfp_t gfp = GFP_ATOMIC | (skb_pfmemalloc(skb) ? __GFP_MEMALLOC : 0); 502 - struct qeth_hdr *hdr = (struct qeth_hdr *)skb->data; 503 - addr_t end = (addr_t)(skb->data + sizeof(*hdr)); 504 - addr_t start = (addr_t)skb->data; 505 - unsigned int elements = 0; 506 - unsigned int hd_len = 0; 507 - int rc; 508 - 509 - if (skb->protocol == htons(ETH_P_IPV6)) 510 - return -EPROTONOSUPPORT; 511 - 512 - if (qeth_get_elements_for_range(start, end) > 1) { 513 - /* Misaligned HW header, move it to its own buffer element. */ 514 - hdr = kmem_cache_alloc(qeth_core_header_cache, gfp); 515 - if (!hdr) 516 - return -ENOMEM; 517 - hd_len = sizeof(*hdr); 518 - skb_copy_from_linear_data(skb, (char *)hdr, hd_len); 519 - elements++; 520 - } 521 - 522 - elements += qeth_count_elements(skb, hd_len); 523 - if (elements > queue->max_elements) { 524 - rc = -E2BIG; 525 - goto out; 526 - } 527 - 528 - rc = qeth_do_send_packet(card, queue, skb, hdr, hd_len, hd_len, 529 - elements); 530 - out: 531 - if (rc && hd_len) 532 - kmem_cache_free(qeth_core_header_cache, hdr); 533 - return rc; 534 - } 535 - 536 499 static netdev_tx_t qeth_l2_hard_start_xmit(struct sk_buff *skb, 537 500 struct net_device *dev) 538 501 { ··· 509 548 txq = qeth_iqd_translate_txq(dev, txq); 510 549 queue = card->qdio.out_qs[txq]; 511 550 512 - if (IS_OSN(card)) 513 - rc = qeth_l2_xmit_osn(card, skb, queue); 514 - else 515 - rc = qeth_xmit(card, skb, queue, vlan_get_protocol(skb), 516 - qeth_l2_fill_header); 517 - 551 + rc = qeth_xmit(card, skb, queue, vlan_get_protocol(skb), 552 + qeth_l2_fill_header); 518 553 if (!rc) 519 554 return NETDEV_TX_OK; 520 555 ··· 847 890 .ndo_bridge_setlink = qeth_l2_bridge_setlink, 848 891 }; 849 892 850 - static const struct net_device_ops qeth_osn_netdev_ops = { 851 - .ndo_open = qeth_open, 852 - .ndo_stop = qeth_stop, 853 - .ndo_get_stats64 = qeth_get_stats64, 854 - .ndo_start_xmit = qeth_l2_hard_start_xmit, 855 - .ndo_validate_addr = eth_validate_addr, 856 - .ndo_tx_timeout = qeth_tx_timeout, 857 - }; 858 - 859 893 static int qeth_l2_setup_netdev(struct qeth_card *card) 860 894 { 861 - if (IS_OSN(card)) { 862 - card->dev->netdev_ops = &qeth_osn_netdev_ops; 863 - card->dev->flags |= IFF_NOARP; 864 - goto add_napi; 865 - } 866 - 867 895 card->dev->needed_headroom = sizeof(struct qeth_hdr); 868 896 card->dev->netdev_ops = &qeth_l2_netdev_ops; 869 897 card->dev->priv_flags |= IFF_UNICAST_FLT; ··· 894 952 PAGE_SIZE * (QDIO_MAX_ELEMENTS_PER_BUFFER - 1)); 895 953 } 896 954 897 - add_napi: 898 955 netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT); 899 956 return register_netdev(card->dev); 900 957 } ··· 984 1043 } 985 1044 } 986 1045 } 987 - 988 - #ifdef CONFIG_QETH_OSN 989 - static void qeth_osn_assist_cb(struct qeth_card *card, 990 - struct qeth_cmd_buffer *iob, 991 - unsigned int data_length) 992 - { 993 - qeth_notify_cmd(iob, 0); 994 - qeth_put_cmd(iob); 995 - } 996 - 997 - int qeth_osn_assist(struct net_device *dev, void *data, int data_len) 998 - { 999 - struct qeth_cmd_buffer *iob; 1000 - struct qeth_card *card; 1001 - 1002 - if (data_len < 0) 1003 - return -EINVAL; 1004 - if (!dev) 1005 - return -ENODEV; 1006 - card = dev->ml_priv; 1007 - if (!card) 1008 - return -ENODEV; 1009 - QETH_CARD_TEXT(card, 2, "osnsdmc"); 1010 - if (!qeth_card_hw_is_reachable(card)) 1011 - return -ENODEV; 1012 - 1013 - iob = qeth_alloc_cmd(&card->write, IPA_PDU_HEADER_SIZE + data_len, 1, 1014 - QETH_IPA_TIMEOUT); 1015 - if (!iob) 1016 - return -ENOMEM; 1017 - 1018 - qeth_prepare_ipa_cmd(card, iob, (u16) data_len, NULL); 1019 - 1020 - memcpy(__ipa_cmd(iob), data, data_len); 1021 - iob->callback = qeth_osn_assist_cb; 1022 - return qeth_send_ipa_cmd(card, iob, NULL, NULL); 1023 - } 1024 - EXPORT_SYMBOL(qeth_osn_assist); 1025 - 1026 - int qeth_osn_register(unsigned char *read_dev_no, struct net_device **dev, 1027 - int (*assist_cb)(struct net_device *, void *), 1028 - int (*data_cb)(struct sk_buff *)) 1029 - { 1030 - struct qeth_card *card; 1031 - char bus_id[16]; 1032 - u16 devno; 1033 - 1034 - memcpy(&devno, read_dev_no, 2); 1035 - sprintf(bus_id, "0.0.%04x", devno); 1036 - card = qeth_get_card_by_busid(bus_id); 1037 - if (!card || !IS_OSN(card)) 1038 - return -ENODEV; 1039 - *dev = card->dev; 1040 - 1041 - QETH_CARD_TEXT(card, 2, "osnreg"); 1042 - if ((assist_cb == NULL) || (data_cb == NULL)) 1043 - return -EINVAL; 1044 - card->osn_info.assist_cb = assist_cb; 1045 - card->osn_info.data_cb = data_cb; 1046 - return 0; 1047 - } 1048 - EXPORT_SYMBOL(qeth_osn_register); 1049 - 1050 - void qeth_osn_deregister(struct net_device *dev) 1051 - { 1052 - struct qeth_card *card; 1053 - 1054 - if (!dev) 1055 - return; 1056 - card = dev->ml_priv; 1057 - if (!card) 1058 - return; 1059 - QETH_CARD_TEXT(card, 2, "osndereg"); 1060 - card->osn_info.assist_cb = NULL; 1061 - card->osn_info.data_cb = NULL; 1062 - } 1063 - EXPORT_SYMBOL(qeth_osn_deregister); 1064 - #endif 1065 1046 1066 1047 /* SETBRIDGEPORT support, async notifications */ 1067 1048 ··· 2052 2189 { 2053 2190 struct qeth_card *card = dev_get_drvdata(&gdev->dev); 2054 2191 int rc; 2055 - 2056 - if (IS_OSN(card)) 2057 - dev_notice(&gdev->dev, "OSN support will be dropped in 2021\n"); 2058 2192 2059 2193 qeth_l2_vnicc_set_defaults(card); 2060 2194 mutex_init(&card->sbp_lock);