Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/mlx4/mlx4_en/mlx4_en_netdev.c
Show First 20 Lines • Show All 1,890 Lines • ▼ Show 20 Lines | |||||
static int mlx4_en_ioctl(struct ifnet *dev, u_long command, caddr_t data) | static int mlx4_en_ioctl(struct ifnet *dev, u_long command, caddr_t data) | ||||
{ | { | ||||
struct mlx4_en_priv *priv; | struct mlx4_en_priv *priv; | ||||
struct mlx4_en_dev *mdev; | struct mlx4_en_dev *mdev; | ||||
struct ifreq *ifr; | struct ifreq *ifr; | ||||
int error; | int error; | ||||
int mask; | int mask; | ||||
struct ifrsskey *ifrk; | |||||
const u32 *key; | |||||
struct ifrsshash *ifrh; | |||||
u8 rss_mask; | |||||
error = 0; | error = 0; | ||||
mask = 0; | mask = 0; | ||||
priv = dev->if_softc; | priv = dev->if_softc; | ||||
mdev = priv->mdev; | mdev = priv->mdev; | ||||
ifr = (struct ifreq *) data; | ifr = (struct ifreq *) data; | ||||
switch (command) { | switch (command) { | ||||
▲ Show 20 Lines • Show All 112 Lines • ▼ Show 20 Lines | case SIOCGI2C: { | ||||
if (error < 0) { | if (error < 0) { | ||||
error = -error; | error = -error; | ||||
break; | break; | ||||
} | } | ||||
error = copyout(&i2c, ifr->ifr_data, sizeof(i2c)); | error = copyout(&i2c, ifr->ifr_data, sizeof(i2c)); | ||||
break; | break; | ||||
} | } | ||||
#endif | #endif | ||||
case SIOCGIFRSSKEY: | |||||
ifrk = (struct ifrsskey *)data; | |||||
ifrk->ifrk_func = RSS_FUNC_TOEPLITZ; | |||||
mutex_lock(&mdev->state_lock); | |||||
key = mlx4_en_get_rss_key(priv, &ifrk->ifrk_keylen); | |||||
if (ifrk->ifrk_keylen > RSS_KEYLEN) | |||||
error = EINVAL; | |||||
else | |||||
memcpy(ifrk->ifrk_key, key, ifrk->ifrk_keylen); | |||||
mutex_unlock(&mdev->state_lock); | |||||
break; | |||||
case SIOCGIFRSSHASH: | |||||
mutex_lock(&mdev->state_lock); | |||||
rss_mask = mlx4_en_get_rss_mask(priv); | |||||
mutex_unlock(&mdev->state_lock); | |||||
ifrh = (struct ifrsshash *)data; | |||||
ifrh->ifrh_func = RSS_FUNC_TOEPLITZ; | |||||
ifrh->ifrh_types = 0; | |||||
if (rss_mask & MLX4_RSS_IPV4) | |||||
ifrh->ifrh_types |= RSS_TYPE_IPV4; | |||||
if (rss_mask & MLX4_RSS_TCP_IPV4) | |||||
ifrh->ifrh_types |= RSS_TYPE_TCP_IPV4; | |||||
if (rss_mask & MLX4_RSS_IPV6) | |||||
ifrh->ifrh_types |= RSS_TYPE_IPV6; | |||||
if (rss_mask & MLX4_RSS_TCP_IPV6) | |||||
ifrh->ifrh_types |= RSS_TYPE_TCP_IPV6; | |||||
if (rss_mask & MLX4_RSS_UDP_IPV4) | |||||
ifrh->ifrh_types |= RSS_TYPE_UDP_IPV4; | |||||
if (rss_mask & MLX4_RSS_UDP_IPV6) | |||||
ifrh->ifrh_types |= RSS_TYPE_UDP_IPV6; | |||||
break; | |||||
default: | default: | ||||
error = ether_ioctl(dev, command, data); | error = ether_ioctl(dev, command, data); | ||||
break; | break; | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 765 Lines • Show Last 20 Lines |