summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-08-16 14:08:58 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-08-16 14:08:58 -0600
commitcbb2eb2543b81a71911ed47e74c3aecce45b0ec2 (patch)
treedccc00b7808713ff6f04e9ff8661c77bb904dd25
parentb5984a1d75fd6c01103008c82a8235b0d5a39483 (diff)
downloadnuttx-cbb2eb2543b81a71911ed47e74c3aecce45b0ec2.tar.gz
nuttx-cbb2eb2543b81a71911ed47e74c3aecce45b0ec2.tar.bz2
nuttx-cbb2eb2543b81a71911ed47e74c3aecce45b0ec2.zip
Modified to support the change to the network ioctl signature changes. Also add support for new ioctl to setup PHY event notifications.
-rw-r--r--nuttx/arch/arm/src/stm32/stm32_eth.c41
1 files changed, 30 insertions, 11 deletions
diff --git a/nuttx/arch/arm/src/stm32/stm32_eth.c b/nuttx/arch/arm/src/stm32/stm32_eth.c
index 64aa3d39a..7a2287afe 100644
--- a/nuttx/arch/arm/src/stm32/stm32_eth.c
+++ b/nuttx/arch/arm/src/stm32/stm32_eth.c
@@ -658,6 +658,9 @@ static int stm32_txavail(struct net_driver_s *dev);
static int stm32_addmac(struct net_driver_s *dev, FAR const uint8_t *mac);
static int stm32_rmmac(struct net_driver_s *dev, FAR const uint8_t *mac);
#endif
+#ifdef CONFIG_NETDEV_PHY_IOCTL
+static int stm32_ioctl(struct net_driver_s *dev, int cmd, void *arg);
+#endif
/* Descriptor Initialization */
@@ -666,9 +669,6 @@ static void stm32_rxdescinit(FAR struct stm32_ethmac_s *priv);
/* PHY Initialization */
-#ifdef CONFIG_NETDEV_PHY_IOCTL
-static int stm32_ioctl(int cmd, struct mii_ioctl_data *req);
-#endif
static int stm32_phyread(uint16_t phydevaddr, uint16_t phyregaddr, uint16_t *value);
static int stm32_phywrite(uint16_t phydevaddr, uint16_t phyregaddr, uint16_t value);
#ifdef CONFIG_ETH0_PHY_DM9161
@@ -2498,8 +2498,9 @@ static void stm32_rxdescinit(FAR struct stm32_ethmac_s *priv)
* its input.
*
* Parameters:
+ * dev - Ethernet device structure
* cmd - SIOCxMIIxxx command code
- * req - request structure also used to return values
+ * arg - Request structure also used to return values
*
* Returned Value: Negated errno on failure.
*
@@ -2508,27 +2509,45 @@ static void stm32_rxdescinit(FAR struct stm32_ethmac_s *priv)
****************************************************************************/
#ifdef CONFIG_NETDEV_PHY_IOCTL
-static int stm32_ioctl(int cmd, struct mii_ioctl_data *req)
+static int stm32_ioctl(struct net_driver_s *dev, int cmd, void *arg)
{
- int ret = -ENOTTY;
+ int ret;
switch (cmd)
{
+#ifdef CONFIG_ARCH_PHY_INTERRUPT
+ case SIOCMIINOTIFY: /* Set up for PHY event notifications */
+ {
+ struct mii_iotcl_notify_s *req = (struct mii_iotcl_notify_s *)((uintptr_t)arg);
+ ret = phy_notify_subscribe("eth0", req->pid, req->signo, req->arg);
+ }
+ break;
+#endif
+
case SIOCGMIIPHY: /* Get MII PHY address */
- req->phy_id = CONFIG_STM32_PHYADDR;
- ret = OK;
+ {
+ struct mii_ioctl_data_s *req = (struct mii_ioctl_data_s *)((uintptr_t)arg);
+ req->phy_id = CONFIG_STM32_PHYADDR;
+ ret = OK;
+ }
break;
case SIOCGMIIREG: /* Get register from MII PHY */
- ret = stm32_phyread(req->phy_id, req->reg_num, &req->val_out);
+ {
+ struct mii_ioctl_data_s *req = (struct mii_ioctl_data_s *)((uintptr_t)arg);
+ ret = stm32_phyread(req->phy_id, req->reg_num, &req->val_out);
+ }
break;
case SIOCSMIIREG: /* Set register in MII PHY */
- ret = stm32_phywrite(req->phy_id, req->reg_num, req->val_in);
+ {
+ struct mii_ioctl_data_s *req = (struct mii_ioctl_data_s *)((uintptr_t)arg);
+ ret = stm32_phywrite(req->phy_id, req->reg_num, req->val_in);
+ }
break;
default:
- ret = -EINVAL;
+ ret = -ENOTTY;
break;
}