Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/sfxge/sfxge.c
Show First 20 Lines • Show All 523 Lines • ▼ Show 20 Lines | sfxge_if_ioctl(struct ifnet *ifp, unsigned long command, caddr_t data) | ||||
case SIOCGIFMEDIA: | case SIOCGIFMEDIA: | ||||
error = ifmedia_ioctl(ifp, ifr, &sc->media, command); | error = ifmedia_ioctl(ifp, ifr, &sc->media, command); | ||||
break; | break; | ||||
#ifdef SIOCGI2C | #ifdef SIOCGI2C | ||||
case SIOCGI2C: | case SIOCGI2C: | ||||
{ | { | ||||
struct ifi2creq i2c; | struct ifi2creq i2c; | ||||
error = copyin(ifr->ifr_data, &i2c, sizeof(i2c)); | error = copyin(ifr_data_get_ptr(ifr), &i2c, sizeof(i2c)); | ||||
if (error != 0) | if (error != 0) | ||||
break; | break; | ||||
if (i2c.len > sizeof(i2c.data)) { | if (i2c.len > sizeof(i2c.data)) { | ||||
error = EINVAL; | error = EINVAL; | ||||
break; | break; | ||||
} | } | ||||
SFXGE_ADAPTER_LOCK(sc); | SFXGE_ADAPTER_LOCK(sc); | ||||
error = efx_phy_module_get_info(sc->enp, i2c.dev_addr, | error = efx_phy_module_get_info(sc->enp, i2c.dev_addr, | ||||
i2c.offset, i2c.len, | i2c.offset, i2c.len, | ||||
&i2c.data[0]); | &i2c.data[0]); | ||||
SFXGE_ADAPTER_UNLOCK(sc); | SFXGE_ADAPTER_UNLOCK(sc); | ||||
if (error == 0) | if (error == 0) | ||||
error = copyout(&i2c, ifr->ifr_data, sizeof(i2c)); | error = copyout(&i2c, ifr_data_get_ptr(ifr), | ||||
sizeof(i2c)); | |||||
break; | break; | ||||
} | } | ||||
#endif | #endif | ||||
case SIOCGPRIVATE_0: | case SIOCGPRIVATE_0: | ||||
error = priv_check(curthread, PRIV_DRIVER); | error = priv_check(curthread, PRIV_DRIVER); | ||||
if (error != 0) | if (error != 0) | ||||
break; | break; | ||||
error = copyin(ifr->ifr_data, &ioc, sizeof(ioc)); | error = copyin(ifr_data_get_ptr(ifr), &ioc, sizeof(ioc)); | ||||
if (error != 0) | if (error != 0) | ||||
return (error); | return (error); | ||||
error = sfxge_private_ioctl(sc, &ioc); | error = sfxge_private_ioctl(sc, &ioc); | ||||
if (error == 0) { | if (error == 0) { | ||||
error = copyout(&ioc, ifr->ifr_data, sizeof(ioc)); | error = copyout(&ioc, ifr_data_get_ptr(ifr), | ||||
sizeof(ioc)); | |||||
} | } | ||||
break; | break; | ||||
default: | default: | ||||
error = ether_ioctl(ifp, command, data); | error = ether_ioctl(ifp, command, data); | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 634 Lines • Show Last 20 Lines |