Commit 0ff85d6d authored by David S. Miller's avatar David S. Miller

Merge branch 's390-qeth-cleanups'

Julian Wiedmann says:

====================
s390/qeth: updates 2019-04-25

please apply one more patch series for qeth to net-next. Nothing special,
just a bunch of cleanups.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 9157bc2a 14a1b047
...@@ -165,6 +165,12 @@ struct qeth_vnicc_info { ...@@ -165,6 +165,12 @@ struct qeth_vnicc_info {
bool rx_bcast_enabled; bool rx_bcast_enabled;
}; };
static inline int qeth_is_adp_supported(struct qeth_ipa_info *ipa,
enum qeth_ipa_setadp_cmd func)
{
return (ipa->supported_funcs & func);
}
static inline int qeth_is_ipa_supported(struct qeth_ipa_info *ipa, static inline int qeth_is_ipa_supported(struct qeth_ipa_info *ipa,
enum qeth_ipa_funcs func) enum qeth_ipa_funcs func)
{ {
...@@ -178,9 +184,7 @@ static inline int qeth_is_ipa_enabled(struct qeth_ipa_info *ipa, ...@@ -178,9 +184,7 @@ static inline int qeth_is_ipa_enabled(struct qeth_ipa_info *ipa,
} }
#define qeth_adp_supported(c, f) \ #define qeth_adp_supported(c, f) \
qeth_is_ipa_supported(&c->options.adp, f) qeth_is_adp_supported(&c->options.adp, f)
#define qeth_adp_enabled(c, f) \
qeth_is_ipa_enabled(&c->options.adp, f)
#define qeth_is_supported(c, f) \ #define qeth_is_supported(c, f) \
qeth_is_ipa_supported(&c->options.ipa4, f) qeth_is_ipa_supported(&c->options.ipa4, f)
#define qeth_is_enabled(c, f) \ #define qeth_is_enabled(c, f) \
...@@ -370,34 +374,6 @@ enum qeth_header_ids { ...@@ -370,34 +374,6 @@ enum qeth_header_ids {
#define QETH_HDR_EXT_CSUM_TRANSP_REQ 0x20 #define QETH_HDR_EXT_CSUM_TRANSP_REQ 0x20
#define QETH_HDR_EXT_UDP 0x40 /*bit off for TCP*/ #define QETH_HDR_EXT_UDP 0x40 /*bit off for TCP*/
enum qeth_qdio_buffer_states {
/*
* inbound: read out by driver; owned by hardware in order to be filled
* outbound: owned by driver in order to be filled
*/
QETH_QDIO_BUF_EMPTY,
/*
* inbound: filled by hardware; owned by driver in order to be read out
* outbound: filled by driver; owned by hardware in order to be sent
*/
QETH_QDIO_BUF_PRIMED,
/*
* inbound: not applicable
* outbound: identified to be pending in TPQ
*/
QETH_QDIO_BUF_PENDING,
/*
* inbound: not applicable
* outbound: found in completion queue
*/
QETH_QDIO_BUF_IN_CQ,
/*
* inbound: not applicable
* outbound: handled via transfer pending / completion queue
*/
QETH_QDIO_BUF_HANDLED_DELAYED,
};
enum qeth_qdio_info_states { enum qeth_qdio_info_states {
QETH_QDIO_UNINITIALIZED, QETH_QDIO_UNINITIALIZED,
QETH_QDIO_ALLOCATED, QETH_QDIO_ALLOCATED,
...@@ -429,6 +405,19 @@ struct qeth_qdio_q { ...@@ -429,6 +405,19 @@ struct qeth_qdio_q {
int next_buf_to_init; int next_buf_to_init;
}; };
enum qeth_qdio_out_buffer_state {
/* Owned by driver, in order to be filled. */
QETH_QDIO_BUF_EMPTY,
/* Filled by driver; owned by hardware in order to be sent. */
QETH_QDIO_BUF_PRIMED,
/* Identified to be pending in TPQ. */
QETH_QDIO_BUF_PENDING,
/* Found in completion queue. */
QETH_QDIO_BUF_IN_CQ,
/* Handled via transfer pending / completion queue. */
QETH_QDIO_BUF_HANDLED_DELAYED,
};
struct qeth_qdio_out_buffer { struct qeth_qdio_out_buffer {
struct qdio_buffer *buffer; struct qdio_buffer *buffer;
atomic_t state; atomic_t state;
...@@ -495,14 +484,12 @@ struct qeth_qdio_out_q { ...@@ -495,14 +484,12 @@ struct qeth_qdio_out_q {
struct qeth_qdio_out_buffer *bufs[QDIO_MAX_BUFFERS_PER_Q]; struct qeth_qdio_out_buffer *bufs[QDIO_MAX_BUFFERS_PER_Q];
struct qdio_outbuf_state *bufstates; /* convenience pointer */ struct qdio_outbuf_state *bufstates; /* convenience pointer */
struct qeth_out_q_stats stats; struct qeth_out_q_stats stats;
int queue_no; u8 next_buf_to_fill;
u8 max_elements;
u8 queue_no;
u8 do_pack;
struct qeth_card *card; struct qeth_card *card;
atomic_t state; atomic_t state;
int do_pack;
/*
* index of buffer to be filled by driver; state EMPTY or PACKING
*/
int next_buf_to_fill;
/* /*
* number of buffers that are currently filled (PRIMED) * number of buffers that are currently filled (PRIMED)
* -> these buffers are hardware-owned * -> these buffers are hardware-owned
...@@ -648,7 +635,6 @@ struct qeth_seqno { ...@@ -648,7 +635,6 @@ struct qeth_seqno {
__u32 pdu_hdr; __u32 pdu_hdr;
__u32 pdu_hdr_ack; __u32 pdu_hdr_ack;
__u16 ipa; __u16 ipa;
__u32 pkt_seqno;
}; };
struct qeth_reply { struct qeth_reply {
...@@ -679,7 +665,7 @@ struct qeth_card_info { ...@@ -679,7 +665,7 @@ struct qeth_card_info {
__u16 func_level; __u16 func_level;
char mcl_level[QETH_MCL_LENGTH + 1]; char mcl_level[QETH_MCL_LENGTH + 1];
u8 open_when_online:1; u8 open_when_online:1;
int guestlan; u8 is_vm_nic:1;
int mac_bits; int mac_bits;
enum qeth_card_types type; enum qeth_card_types type;
enum qeth_link_types link_type; enum qeth_link_types link_type;
...@@ -895,6 +881,16 @@ static inline int qeth_get_ip_version(struct sk_buff *skb) ...@@ -895,6 +881,16 @@ static inline int qeth_get_ip_version(struct sk_buff *skb)
} }
} }
static inline int qeth_get_ether_cast_type(struct sk_buff *skb)
{
u8 *addr = eth_hdr(skb)->h_dest;
if (is_multicast_ether_addr(addr))
return is_broadcast_ether_addr(addr) ? RTN_BROADCAST :
RTN_MULTICAST;
return RTN_UNICAST;
}
static inline void qeth_rx_csum(struct qeth_card *card, struct sk_buff *skb, static inline void qeth_rx_csum(struct qeth_card *card, struct sk_buff *skb,
u8 flags) u8 flags)
{ {
......
This diff is collapsed.
...@@ -82,7 +82,7 @@ enum qeth_card_types { ...@@ -82,7 +82,7 @@ enum qeth_card_types {
#define IS_OSM(card) ((card)->info.type == QETH_CARD_TYPE_OSM) #define IS_OSM(card) ((card)->info.type == QETH_CARD_TYPE_OSM)
#define IS_OSN(card) ((card)->info.type == QETH_CARD_TYPE_OSN) #define IS_OSN(card) ((card)->info.type == QETH_CARD_TYPE_OSN)
#define IS_OSX(card) ((card)->info.type == QETH_CARD_TYPE_OSX) #define IS_OSX(card) ((card)->info.type == QETH_CARD_TYPE_OSX)
#define IS_VM_NIC(card) ((card)->info.guestlan) #define IS_VM_NIC(card) ((card)->info.is_vm_nic)
#define QETH_MPC_DIFINFO_LEN_INDICATES_LINK_TYPE 0x18 #define QETH_MPC_DIFINFO_LEN_INDICATES_LINK_TYPE 0x18
/* only the first two bytes are looked at in qeth_get_cardname_short */ /* only the first two bytes are looked at in qeth_get_cardname_short */
......
...@@ -479,8 +479,7 @@ static ssize_t qeth_dev_isolation_store(struct device *dev, ...@@ -479,8 +479,7 @@ static ssize_t qeth_dev_isolation_store(struct device *dev,
return -EINVAL; return -EINVAL;
mutex_lock(&card->conf_mutex); mutex_lock(&card->conf_mutex);
if (card->info.type != QETH_CARD_TYPE_OSD && if (!IS_OSD(card) && !IS_OSX(card)) {
card->info.type != QETH_CARD_TYPE_OSX) {
rc = -EOPNOTSUPP; rc = -EOPNOTSUPP;
dev_err(&card->gdev->dev, "Adapter does not " dev_err(&card->gdev->dev, "Adapter does not "
"support QDIO data connection isolation\n"); "support QDIO data connection isolation\n");
......
...@@ -161,15 +161,6 @@ static void qeth_l2_drain_rx_mode_cache(struct qeth_card *card) ...@@ -161,15 +161,6 @@ static void qeth_l2_drain_rx_mode_cache(struct qeth_card *card)
} }
} }
static int qeth_l2_get_cast_type(struct sk_buff *skb)
{
if (is_broadcast_ether_addr(skb->data))
return RTN_BROADCAST;
if (is_multicast_ether_addr(skb->data))
return RTN_MULTICAST;
return RTN_UNICAST;
}
static void qeth_l2_fill_header(struct qeth_qdio_out_q *queue, static void qeth_l2_fill_header(struct qeth_qdio_out_q *queue,
struct qeth_hdr *hdr, struct sk_buff *skb, struct qeth_hdr *hdr, struct sk_buff *skb,
int ipv, int cast_type, unsigned int data_len) int ipv, int cast_type, unsigned int data_len)
...@@ -332,13 +323,11 @@ static int qeth_l2_process_inbound_buffer(struct qeth_card *card, ...@@ -332,13 +323,11 @@ static int qeth_l2_process_inbound_buffer(struct qeth_card *card,
case QETH_HEADER_TYPE_LAYER2: case QETH_HEADER_TYPE_LAYER2:
skb->protocol = eth_type_trans(skb, skb->dev); skb->protocol = eth_type_trans(skb, skb->dev);
qeth_rx_csum(card, skb, hdr->hdr.l2.flags[1]); qeth_rx_csum(card, skb, hdr->hdr.l2.flags[1]);
if (skb->protocol == htons(ETH_P_802_2))
*((__u32 *)skb->cb) = ++card->seqno.pkt_seqno;
len = skb->len; len = skb->len;
napi_gro_receive(&card->napi, skb); napi_gro_receive(&card->napi, skb);
break; break;
case QETH_HEADER_TYPE_OSN: case QETH_HEADER_TYPE_OSN:
if (card->info.type == QETH_CARD_TYPE_OSN) { if (IS_OSN(card)) {
skb_push(skb, sizeof(struct qeth_hdr)); skb_push(skb, sizeof(struct qeth_hdr));
skb_copy_to_linear_data(skb, hdr, skb_copy_to_linear_data(skb, hdr,
sizeof(struct qeth_hdr)); sizeof(struct qeth_hdr));
...@@ -389,8 +378,7 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card) ...@@ -389,8 +378,7 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card)
} }
/* some devices don't support a custom MAC address: */ /* some devices don't support a custom MAC address: */
if (card->info.type == QETH_CARD_TYPE_OSM || if (IS_OSM(card) || IS_OSX(card))
card->info.type == QETH_CARD_TYPE_OSX)
return (rc) ? rc : -EADDRNOTAVAIL; return (rc) ? rc : -EADDRNOTAVAIL;
eth_hw_addr_random(card->dev); eth_hw_addr_random(card->dev);
...@@ -584,7 +572,7 @@ static int qeth_l2_xmit_osn(struct qeth_card *card, struct sk_buff *skb, ...@@ -584,7 +572,7 @@ static int qeth_l2_xmit_osn(struct qeth_card *card, struct sk_buff *skb,
} }
elements += qeth_count_elements(skb, hd_len); elements += qeth_count_elements(skb, hd_len);
if (elements > QETH_MAX_BUFFER_ELEMENTS(card)) { if (elements > queue->max_elements) {
rc = -E2BIG; rc = -E2BIG;
goto out; goto out;
} }
...@@ -614,7 +602,8 @@ static netdev_tx_t qeth_l2_hard_start_xmit(struct sk_buff *skb, ...@@ -614,7 +602,8 @@ static netdev_tx_t qeth_l2_hard_start_xmit(struct sk_buff *skb,
rc = qeth_l2_xmit_osn(card, skb, queue); rc = qeth_l2_xmit_osn(card, skb, queue);
else else
rc = qeth_xmit(card, skb, queue, qeth_get_ip_version(skb), rc = qeth_xmit(card, skb, queue, qeth_get_ip_version(skb),
qeth_l2_get_cast_type(skb), qeth_l2_fill_header); qeth_get_ether_cast_type(skb),
qeth_l2_fill_header);
if (!rc) { if (!rc) {
QETH_TXQ_STAT_INC(queue, tx_packets); QETH_TXQ_STAT_INC(queue, tx_packets);
...@@ -634,7 +623,7 @@ static u16 qeth_l2_select_queue(struct net_device *dev, struct sk_buff *skb, ...@@ -634,7 +623,7 @@ static u16 qeth_l2_select_queue(struct net_device *dev, struct sk_buff *skb,
if (IS_IQD(card)) if (IS_IQD(card))
return qeth_iqd_select_queue(dev, skb, return qeth_iqd_select_queue(dev, skb,
qeth_l2_get_cast_type(skb), qeth_get_ether_cast_type(skb),
sb_dev); sb_dev);
return qeth_get_priority_queue(card, skb); return qeth_get_priority_queue(card, skb);
} }
...@@ -735,7 +724,7 @@ static int qeth_l2_setup_netdev(struct qeth_card *card, bool carrier_ok) ...@@ -735,7 +724,7 @@ static int qeth_l2_setup_netdev(struct qeth_card *card, bool carrier_ok)
card->dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER; card->dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
} }
if (card->info.type == QETH_CARD_TYPE_OSD && !card->info.guestlan) { if (IS_OSD(card) && !IS_VM_NIC(card)) {
card->dev->features |= NETIF_F_SG; card->dev->features |= NETIF_F_SG;
/* OSA 3S and earlier has no RX/TX support */ /* OSA 3S and earlier has no RX/TX support */
if (qeth_is_supported(card, IPA_OUTBOUND_CHECKSUM)) { if (qeth_is_supported(card, IPA_OUTBOUND_CHECKSUM)) {
...@@ -845,8 +834,7 @@ static int qeth_l2_set_online(struct ccwgroup_device *gdev) ...@@ -845,8 +834,7 @@ static int qeth_l2_set_online(struct ccwgroup_device *gdev)
/* softsetup */ /* softsetup */
QETH_DBF_TEXT(SETUP, 2, "softsetp"); QETH_DBF_TEXT(SETUP, 2, "softsetp");
if ((card->info.type == QETH_CARD_TYPE_OSD) || if (IS_OSD(card) || IS_OSX(card)) {
(card->info.type == QETH_CARD_TYPE_OSX)) {
rc = qeth_l2_start_ipassists(card); rc = qeth_l2_start_ipassists(card);
if (rc) if (rc)
goto out_remove; goto out_remove;
...@@ -1470,9 +1458,8 @@ static struct qeth_cmd_buffer *qeth_sbp_build_cmd(struct qeth_card *card, ...@@ -1470,9 +1458,8 @@ static struct qeth_cmd_buffer *qeth_sbp_build_cmd(struct qeth_card *card,
enum qeth_ipa_sbp_cmd sbp_cmd, enum qeth_ipa_sbp_cmd sbp_cmd,
unsigned int cmd_length) unsigned int cmd_length)
{ {
enum qeth_ipa_cmds ipa_cmd = (card->info.type == QETH_CARD_TYPE_IQD) ? enum qeth_ipa_cmds ipa_cmd = IS_IQD(card) ? IPA_CMD_SETBRIDGEPORT_IQD :
IPA_CMD_SETBRIDGEPORT_IQD : IPA_CMD_SETBRIDGEPORT_OSA;
IPA_CMD_SETBRIDGEPORT_OSA;
struct qeth_cmd_buffer *iob; struct qeth_cmd_buffer *iob;
struct qeth_ipa_cmd *cmd; struct qeth_ipa_cmd *cmd;
......
...@@ -474,7 +474,7 @@ static int qeth_l3_send_setrouting(struct qeth_card *card, ...@@ -474,7 +474,7 @@ static int qeth_l3_send_setrouting(struct qeth_card *card,
static int qeth_l3_correct_routing_type(struct qeth_card *card, static int qeth_l3_correct_routing_type(struct qeth_card *card,
enum qeth_routing_types *type, enum qeth_prot_versions prot) enum qeth_routing_types *type, enum qeth_prot_versions prot)
{ {
if (card->info.type == QETH_CARD_TYPE_IQD) { if (IS_IQD(card)) {
switch (*type) { switch (*type) {
case NO_ROUTER: case NO_ROUTER:
case PRIMARY_CONNECTOR: case PRIMARY_CONNECTOR:
...@@ -854,7 +854,7 @@ static int qeth_l3_softsetup_ipv6(struct qeth_card *card) ...@@ -854,7 +854,7 @@ static int qeth_l3_softsetup_ipv6(struct qeth_card *card)
QETH_CARD_TEXT(card, 3, "softipv6"); QETH_CARD_TEXT(card, 3, "softipv6");
if (card->info.type == QETH_CARD_TYPE_IQD) if (IS_IQD(card))
goto out; goto out;
rc = qeth_send_simple_setassparms(card, IPA_IPV6, rc = qeth_send_simple_setassparms(card, IPA_IPV6,
...@@ -1380,8 +1380,7 @@ static int qeth_l3_process_inbound_buffer(struct qeth_card *card, ...@@ -1380,8 +1380,7 @@ static int qeth_l3_process_inbound_buffer(struct qeth_card *card,
switch (hdr->hdr.l3.id) { switch (hdr->hdr.l3.id) {
case QETH_HEADER_TYPE_LAYER3: case QETH_HEADER_TYPE_LAYER3:
magic = *(__u16 *)skb->data; magic = *(__u16 *)skb->data;
if ((card->info.type == QETH_CARD_TYPE_IQD) && if (IS_IQD(card) && magic == ETH_P_AF_IUCV) {
(magic == ETH_P_AF_IUCV)) {
len = skb->len; len = skb->len;
dev_hard_header(skb, dev, ETH_P_AF_IUCV, dev_hard_header(skb, dev, ETH_P_AF_IUCV,
dev->dev_addr, "FAKELL", len); dev->dev_addr, "FAKELL", len);
...@@ -1460,7 +1459,7 @@ qeth_l3_handle_promisc_mode(struct qeth_card *card) ...@@ -1460,7 +1459,7 @@ qeth_l3_handle_promisc_mode(struct qeth_card *card)
(card->info.promisc_mode == SET_PROMISC_MODE_OFF))) (card->info.promisc_mode == SET_PROMISC_MODE_OFF)))
return; return;
if (card->info.guestlan) { /* Guestlan trace */ if (IS_VM_NIC(card)) { /* Guestlan trace */
if (qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE)) if (qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE))
qeth_setadp_promisc_mode(card); qeth_setadp_promisc_mode(card);
} else if (card->options.sniffer && /* HiperSockets trace */ } else if (card->options.sniffer && /* HiperSockets trace */
...@@ -1557,7 +1556,7 @@ static int qeth_l3_arp_set_no_entries(struct qeth_card *card, int no_entries) ...@@ -1557,7 +1556,7 @@ static int qeth_l3_arp_set_no_entries(struct qeth_card *card, int no_entries)
* IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_SET_NO_ENTRIES; * IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_SET_NO_ENTRIES;
* thus we say EOPNOTSUPP for this ARP function * thus we say EOPNOTSUPP for this ARP function
*/ */
if (card->info.guestlan) if (IS_VM_NIC(card))
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) { if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -1789,7 +1788,7 @@ static int qeth_l3_arp_modify_entry(struct qeth_card *card, ...@@ -1789,7 +1788,7 @@ static int qeth_l3_arp_modify_entry(struct qeth_card *card,
* IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_ADD_ENTRY; * IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_ADD_ENTRY;
* thus we say EOPNOTSUPP for this ARP function * thus we say EOPNOTSUPP for this ARP function
*/ */
if (card->info.guestlan) if (IS_VM_NIC(card))
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) { if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -1822,7 +1821,7 @@ static int qeth_l3_arp_flush_cache(struct qeth_card *card) ...@@ -1822,7 +1821,7 @@ static int qeth_l3_arp_flush_cache(struct qeth_card *card)
* IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_FLUSH_CACHE; * IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_FLUSH_CACHE;
* thus we say EOPNOTSUPP for this ARP function * thus we say EOPNOTSUPP for this ARP function
*/ */
if (card->info.guestlan || (card->info.type == QETH_CARD_TYPE_IQD)) if (IS_VM_NIC(card) || IS_IQD(card))
return -EOPNOTSUPP; return -EOPNOTSUPP;
if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) { if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
return -EOPNOTSUPP; return -EOPNOTSUPP;
...@@ -1919,13 +1918,7 @@ static int qeth_l3_get_cast_type(struct sk_buff *skb) ...@@ -1919,13 +1918,7 @@ static int qeth_l3_get_cast_type(struct sk_buff *skb)
RTN_MULTICAST : RTN_UNICAST; RTN_MULTICAST : RTN_UNICAST;
default: default:
/* ... and MAC address */ /* ... and MAC address */
if (ether_addr_equal_64bits(eth_hdr(skb)->h_dest, return qeth_get_ether_cast_type(skb);
skb->dev->broadcast))
return RTN_BROADCAST;
if (is_multicast_ether_addr(eth_hdr(skb)->h_dest))
return RTN_MULTICAST;
/* default to unicast */
return RTN_UNICAST;
} }
} }
...@@ -1983,19 +1976,14 @@ static void qeth_l3_fill_header(struct qeth_qdio_out_q *queue, ...@@ -1983,19 +1976,14 @@ static void qeth_l3_fill_header(struct qeth_qdio_out_q *queue,
hdr->hdr.l3.vlan_id = ntohs(veth->h_vlan_TCI); hdr->hdr.l3.vlan_id = ntohs(veth->h_vlan_TCI);
} }
l3_hdr->flags = qeth_l3_cast_type_to_flag(cast_type);
/* OSA only: */ /* OSA only: */
if (!ipv) { if (!ipv) {
hdr->hdr.l3.flags = QETH_HDR_PASSTHRU; l3_hdr->flags |= QETH_HDR_PASSTHRU;
if (ether_addr_equal_64bits(eth_hdr(skb)->h_dest,
skb->dev->broadcast))
hdr->hdr.l3.flags |= QETH_CAST_BROADCAST;
else
hdr->hdr.l3.flags |= (cast_type == RTN_MULTICAST) ?
QETH_CAST_MULTICAST : QETH_CAST_UNICAST;
return; return;
} }
hdr->hdr.l3.flags = qeth_l3_cast_type_to_flag(cast_type);
rcu_read_lock(); rcu_read_lock();
if (ipv == 4) { if (ipv == 4) {
struct rtable *rt = skb_rtable(skb); struct rtable *rt = skb_rtable(skb);
...@@ -2013,7 +2001,7 @@ static void qeth_l3_fill_header(struct qeth_qdio_out_q *queue, ...@@ -2013,7 +2001,7 @@ static void qeth_l3_fill_header(struct qeth_qdio_out_q *queue,
l3_hdr->next_hop.ipv6_addr = ipv6_hdr(skb)->daddr; l3_hdr->next_hop.ipv6_addr = ipv6_hdr(skb)->daddr;
hdr->hdr.l3.flags |= QETH_HDR_IPV6; hdr->hdr.l3.flags |= QETH_HDR_IPV6;
if (card->info.type != QETH_CARD_TYPE_IQD) if (!IS_IQD(card))
hdr->hdr.l3.flags |= QETH_HDR_PASSTHRU; hdr->hdr.l3.flags |= QETH_HDR_PASSTHRU;
} }
rcu_read_unlock(); rcu_read_unlock();
...@@ -2195,8 +2183,7 @@ static int qeth_l3_setup_netdev(struct qeth_card *card, bool carrier_ok) ...@@ -2195,8 +2183,7 @@ static int qeth_l3_setup_netdev(struct qeth_card *card, bool carrier_ok)
unsigned int headroom; unsigned int headroom;
int rc; int rc;
if (card->info.type == QETH_CARD_TYPE_OSD || if (IS_OSD(card) || IS_OSX(card)) {
card->info.type == QETH_CARD_TYPE_OSX) {
if ((card->info.link_type == QETH_LINK_TYPE_LANE_TR) || if ((card->info.link_type == QETH_LINK_TYPE_LANE_TR) ||
(card->info.link_type == QETH_LINK_TYPE_HSTR)) { (card->info.link_type == QETH_LINK_TYPE_HSTR)) {
pr_info("qeth_l3: ignoring TR device\n"); pr_info("qeth_l3: ignoring TR device\n");
...@@ -2210,7 +2197,7 @@ static int qeth_l3_setup_netdev(struct qeth_card *card, bool carrier_ok) ...@@ -2210,7 +2197,7 @@ static int qeth_l3_setup_netdev(struct qeth_card *card, bool carrier_ok)
if (!(card->info.unique_id & UNIQUE_ID_NOT_BY_CARD)) if (!(card->info.unique_id & UNIQUE_ID_NOT_BY_CARD))
card->dev->dev_id = card->info.unique_id & 0xffff; card->dev->dev_id = card->info.unique_id & 0xffff;
if (!card->info.guestlan) { if (!IS_VM_NIC(card)) {
card->dev->features |= NETIF_F_SG; card->dev->features |= NETIF_F_SG;
card->dev->hw_features |= NETIF_F_TSO | card->dev->hw_features |= NETIF_F_TSO |
NETIF_F_RXCSUM | NETIF_F_IP_CSUM; NETIF_F_RXCSUM | NETIF_F_IP_CSUM;
...@@ -2234,7 +2221,7 @@ static int qeth_l3_setup_netdev(struct qeth_card *card, bool carrier_ok) ...@@ -2234,7 +2221,7 @@ static int qeth_l3_setup_netdev(struct qeth_card *card, bool carrier_ok)
headroom = sizeof(struct qeth_hdr_tso); headroom = sizeof(struct qeth_hdr_tso);
else else
headroom = sizeof(struct qeth_hdr) + VLAN_HLEN; headroom = sizeof(struct qeth_hdr) + VLAN_HLEN;
} else if (card->info.type == QETH_CARD_TYPE_IQD) { } else if (IS_IQD(card)) {
card->dev->flags |= IFF_NOARP; card->dev->flags |= IFF_NOARP;
card->dev->netdev_ops = &qeth_l3_netdev_ops; card->dev->netdev_ops = &qeth_l3_netdev_ops;
headroom = sizeof(struct qeth_hdr) - ETH_HLEN; headroom = sizeof(struct qeth_hdr) - ETH_HLEN;
......
...@@ -206,7 +206,7 @@ static ssize_t qeth_l3_dev_sniffer_store(struct device *dev, ...@@ -206,7 +206,7 @@ static ssize_t qeth_l3_dev_sniffer_store(struct device *dev,
if (!card) if (!card)
return -EINVAL; return -EINVAL;
if (card->info.type != QETH_CARD_TYPE_IQD) if (!IS_IQD(card))
return -EPERM; return -EPERM;
if (card->options.cq == QETH_CQ_ENABLED) if (card->options.cq == QETH_CQ_ENABLED)
return -EPERM; return -EPERM;
...@@ -258,7 +258,7 @@ static ssize_t qeth_l3_dev_hsuid_show(struct device *dev, ...@@ -258,7 +258,7 @@ static ssize_t qeth_l3_dev_hsuid_show(struct device *dev,
if (!card) if (!card)
return -EINVAL; return -EINVAL;
if (card->info.type != QETH_CARD_TYPE_IQD) if (!IS_IQD(card))
return -EPERM; return -EPERM;
memcpy(tmp_hsuid, card->options.hsuid, sizeof(tmp_hsuid)); memcpy(tmp_hsuid, card->options.hsuid, sizeof(tmp_hsuid));
...@@ -276,7 +276,7 @@ static ssize_t qeth_l3_dev_hsuid_store(struct device *dev, ...@@ -276,7 +276,7 @@ static ssize_t qeth_l3_dev_hsuid_store(struct device *dev,
if (!card) if (!card)
return -EINVAL; return -EINVAL;
if (card->info.type != QETH_CARD_TYPE_IQD) if (!IS_IQD(card))
return -EPERM; return -EPERM;
if (card->state != CARD_STATE_DOWN) if (card->state != CARD_STATE_DOWN)
return -EPERM; return -EPERM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment