mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 23:21:31 +00:00
qeth: use ndo_siocdevprivate
qeth has both standard MII ioctls and custom SIOCDEVPRIVATE ones, all of which work correctly with compat user space. Move the private ones over to the new ndo_siocdevprivate callback. Cc: Julian Wiedmann <jwi@linux.ibm.com> Cc: Karsten Graul <kgraul@linux.ibm.com> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Cc: Christian Borntraeger <borntraeger@de.ibm.com> Cc: linux-s390@vger.kernel.org Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
76b5878cff
commit
18787eeebd
@ -771,7 +771,8 @@ struct qeth_discipline {
|
||||
void (*remove) (struct ccwgroup_device *);
|
||||
int (*set_online)(struct qeth_card *card, bool carrier_ok);
|
||||
void (*set_offline)(struct qeth_card *card);
|
||||
int (*do_ioctl)(struct net_device *dev, struct ifreq *rq, int cmd);
|
||||
int (*do_ioctl)(struct net_device *dev, struct ifreq *rq,
|
||||
void __user *data, int cmd);
|
||||
int (*control_event_handler)(struct qeth_card *card,
|
||||
struct qeth_ipa_cmd *cmd);
|
||||
};
|
||||
@ -1085,6 +1086,8 @@ int qeth_setadpparms_set_access_ctrl(struct qeth_card *card,
|
||||
enum qeth_ipa_isolation_modes mode);
|
||||
|
||||
int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
|
||||
int qeth_siocdevprivate(struct net_device *dev, struct ifreq *rq,
|
||||
void __user *data, int cmd);
|
||||
void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...);
|
||||
int qeth_configure_cq(struct qeth_card *, enum qeth_cq);
|
||||
int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action);
|
||||
|
@ -6590,6 +6590,35 @@ static struct ccwgroup_driver qeth_core_ccwgroup_driver = {
|
||||
.shutdown = qeth_core_shutdown,
|
||||
};
|
||||
|
||||
int qeth_siocdevprivate(struct net_device *dev, struct ifreq *rq, void __user *data, int cmd)
|
||||
{
|
||||
struct qeth_card *card = dev->ml_priv;
|
||||
int rc = 0;
|
||||
|
||||
switch (cmd) {
|
||||
case SIOC_QETH_ADP_SET_SNMP_CONTROL:
|
||||
rc = qeth_snmp_command(card, data);
|
||||
break;
|
||||
case SIOC_QETH_GET_CARD_TYPE:
|
||||
if ((IS_OSD(card) || IS_OSM(card) || IS_OSX(card)) &&
|
||||
!IS_VM_NIC(card))
|
||||
return 1;
|
||||
return 0;
|
||||
case SIOC_QETH_QUERY_OAT:
|
||||
rc = qeth_query_oat_command(card, data);
|
||||
break;
|
||||
default:
|
||||
if (card->discipline->do_ioctl)
|
||||
rc = card->discipline->do_ioctl(dev, rq, data, cmd);
|
||||
else
|
||||
rc = -EOPNOTSUPP;
|
||||
}
|
||||
if (rc)
|
||||
QETH_CARD_TEXT_(card, 2, "ioce%x", rc);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(qeth_siocdevprivate);
|
||||
|
||||
int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||
{
|
||||
struct qeth_card *card = dev->ml_priv;
|
||||
@ -6597,14 +6626,6 @@ int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||
int rc = 0;
|
||||
|
||||
switch (cmd) {
|
||||
case SIOC_QETH_ADP_SET_SNMP_CONTROL:
|
||||
rc = qeth_snmp_command(card, rq->ifr_ifru.ifru_data);
|
||||
break;
|
||||
case SIOC_QETH_GET_CARD_TYPE:
|
||||
if ((IS_OSD(card) || IS_OSM(card) || IS_OSX(card)) &&
|
||||
!IS_VM_NIC(card))
|
||||
return 1;
|
||||
return 0;
|
||||
case SIOCGMIIPHY:
|
||||
mii_data = if_mii(rq);
|
||||
mii_data->phy_id = 0;
|
||||
@ -6617,14 +6638,8 @@ int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||
mii_data->val_out = qeth_mdio_read(dev,
|
||||
mii_data->phy_id, mii_data->reg_num);
|
||||
break;
|
||||
case SIOC_QETH_QUERY_OAT:
|
||||
rc = qeth_query_oat_command(card, rq->ifr_ifru.ifru_data);
|
||||
break;
|
||||
default:
|
||||
if (card->discipline->do_ioctl)
|
||||
rc = card->discipline->do_ioctl(dev, rq, cmd);
|
||||
else
|
||||
rc = -EOPNOTSUPP;
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
if (rc)
|
||||
QETH_CARD_TEXT_(card, 2, "ioce%x", rc);
|
||||
|
@ -837,6 +837,7 @@ static const struct net_device_ops qeth_l2_netdev_ops = {
|
||||
.ndo_validate_addr = qeth_l2_validate_addr,
|
||||
.ndo_set_rx_mode = qeth_l2_set_rx_mode,
|
||||
.ndo_do_ioctl = qeth_do_ioctl,
|
||||
.ndo_siocdevprivate = qeth_siocdevprivate,
|
||||
.ndo_set_mac_address = qeth_l2_set_mac_address,
|
||||
.ndo_vlan_rx_add_vid = qeth_l2_vlan_rx_add_vid,
|
||||
.ndo_vlan_rx_kill_vid = qeth_l2_vlan_rx_kill_vid,
|
||||
|
@ -1512,7 +1512,7 @@ static int qeth_l3_arp_flush_cache(struct qeth_card *card)
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||
static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, void __user *data, int cmd)
|
||||
{
|
||||
struct qeth_card *card = dev->ml_priv;
|
||||
struct qeth_arp_cache_entry arp_entry;
|
||||
@ -1532,13 +1532,13 @@ static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||
rc = -EPERM;
|
||||
break;
|
||||
}
|
||||
rc = qeth_l3_arp_query(card, rq->ifr_ifru.ifru_data);
|
||||
rc = qeth_l3_arp_query(card, data);
|
||||
break;
|
||||
case SIOC_QETH_ARP_ADD_ENTRY:
|
||||
case SIOC_QETH_ARP_REMOVE_ENTRY:
|
||||
if (!capable(CAP_NET_ADMIN))
|
||||
return -EPERM;
|
||||
if (copy_from_user(&arp_entry, rq->ifr_data, sizeof(arp_entry)))
|
||||
if (copy_from_user(&arp_entry, data, sizeof(arp_entry)))
|
||||
return -EFAULT;
|
||||
|
||||
arp_cmd = (cmd == SIOC_QETH_ARP_ADD_ENTRY) ?
|
||||
@ -1842,6 +1842,7 @@ static const struct net_device_ops qeth_l3_netdev_ops = {
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_set_rx_mode = qeth_l3_set_rx_mode,
|
||||
.ndo_do_ioctl = qeth_do_ioctl,
|
||||
.ndo_siocdevprivate = qeth_siocdevprivate,
|
||||
.ndo_fix_features = qeth_fix_features,
|
||||
.ndo_set_features = qeth_set_features,
|
||||
.ndo_tx_timeout = qeth_tx_timeout,
|
||||
@ -1857,6 +1858,7 @@ static const struct net_device_ops qeth_l3_osa_netdev_ops = {
|
||||
.ndo_validate_addr = eth_validate_addr,
|
||||
.ndo_set_rx_mode = qeth_l3_set_rx_mode,
|
||||
.ndo_do_ioctl = qeth_do_ioctl,
|
||||
.ndo_siocdevprivate = qeth_siocdevprivate,
|
||||
.ndo_fix_features = qeth_fix_features,
|
||||
.ndo_set_features = qeth_set_features,
|
||||
.ndo_tx_timeout = qeth_tx_timeout,
|
||||
|
Loading…
Reference in New Issue
Block a user