Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b1b3afa authored by stephen hemminger's avatar stephen hemminger Committed by David S. Miller
Browse files

ewrk3: convert to set_phys_id



Use ethtool infrastructure for blinking, which is now does
locking at higher level.

Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 94469f75
Loading
Loading
Loading
Loading
+24 −32
Original line number Diff line number Diff line
@@ -1604,55 +1604,47 @@ static u32 ewrk3_get_link(struct net_device *dev)
	return !(cmr & CMR_LINK);
}

static int ewrk3_phys_id(struct net_device *dev, u32 data)
static int ewrk3_set_phys_id(struct net_device *dev,
			     enum ethtool_phys_id_state state)
{
	struct ewrk3_private *lp = netdev_priv(dev);
	unsigned long iobase = dev->base_addr;
	unsigned long flags;
	u8 cr;
	int count;

	/* Toggle LED 4x per second */
	count = data << 2;

	spin_lock_irqsave(&lp->hw_lock, flags);

	/* Bail if a PHYS_ID is already in progress */
	if (lp->led_mask == 0) {
		spin_unlock_irqrestore(&lp->hw_lock, flags);
		return -EBUSY;
	}
	spin_lock_irq(&lp->hw_lock);

	switch (state) {
	case ETHTOOL_ID_ACTIVE:
		/* Prevent ISR from twiddling the LED */
		lp->led_mask = 0;
		spin_unlock_irq(&lp->hw_lock);
		return -EINVAL;

	while (count--) {
		/* Toggle the LED */
	case ETHTOOL_ID_ON:
		cr = inb(EWRK3_CR);
		outb(cr ^ CR_LED, EWRK3_CR);

		/* Wait a little while */
		spin_unlock_irqrestore(&lp->hw_lock, flags);
		msleep(250);
		spin_lock_irqsave(&lp->hw_lock, flags);
		outb(cr | CR_LED, EWRK3_CR);
		break;

		/* Exit if we got a signal */
		if (signal_pending(current))
	case ETHTOOL_ID_OFF:
		cr = inb(EWRK3_CR);
		outb(cr & ~CR_LED, EWRK3_CR);
		break;
	}

	case ETHTOOL_ID_INACTIVE:
		lp->led_mask = CR_LED;
		cr = inb(EWRK3_CR);
		outb(cr & ~CR_LED, EWRK3_CR);
	spin_unlock_irqrestore(&lp->hw_lock, flags);
	return signal_pending(current) ? -ERESTARTSYS : 0;
	}
	spin_unlock_irq(&lp->hw_lock);

	return 0;
}

static const struct ethtool_ops ethtool_ops_203 = {
	.get_drvinfo = ewrk3_get_drvinfo,
	.get_settings = ewrk3_get_settings,
	.set_settings = ewrk3_set_settings,
	.phys_id = ewrk3_phys_id,
	.set_phys_id = ewrk3_set_phys_id,
};

static const struct ethtool_ops ethtool_ops = {
@@ -1660,7 +1652,7 @@ static const struct ethtool_ops ethtool_ops = {
	.get_settings = ewrk3_get_settings,
	.set_settings = ewrk3_set_settings,
	.get_link = ewrk3_get_link,
	.phys_id = ewrk3_phys_id,
	.set_phys_id = ewrk3_set_phys_id,
};

/*