Commit 034e3450 authored by stephen hemminger's avatar stephen hemminger Committed by David S. Miller
Browse files

s2io: convert to set_phys_id (v2)



Convert to new ethtool set physical id model. Remove no longer used
timer, and fix docbook comment.

Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7bc93714
Loading
Loading
Loading
Loading
+41 −45
Original line number Diff line number Diff line
@@ -5484,83 +5484,79 @@ static void s2io_ethtool_gregs(struct net_device *dev,
	}
}

/**
 *  s2io_phy_id  - timer function that alternates adapter LED.
 *  @data : address of the private member of the device structure, which
 *  is a pointer to the s2io_nic structure, provided as an u32.
 * Description: This is actually the timer function that alternates the
 * adapter LED bit of the adapter control bit to set/reset every time on
 * invocation. The timer is set for 1/2 a second, hence tha NIC blinks
 *  once every second.
/*
 *  s2io_set_led - control NIC led
 */
static void s2io_phy_id(unsigned long data)
static void s2io_set_led(struct s2io_nic *sp, bool on)
{
	struct s2io_nic *sp = (struct s2io_nic *)data;
	struct XENA_dev_config __iomem *bar0 = sp->bar0;
	u64 val64 = 0;
	u16 subid;
	u16 subid = sp->pdev->subsystem_device;
	u64 val64;

	subid = sp->pdev->subsystem_device;
	if ((sp->device_type == XFRAME_II_DEVICE) ||
	    ((subid & 0xFF) >= 0x07)) {
		val64 = readq(&bar0->gpio_control);
		val64 ^= GPIO_CTRL_GPIO_0;
		if (on)
			val64 |= GPIO_CTRL_GPIO_0;
		else
			val64 &= ~GPIO_CTRL_GPIO_0;

		writeq(val64, &bar0->gpio_control);
	} else {
		val64 = readq(&bar0->adapter_control);
		val64 ^= ADAPTER_LED_ON;
		if (on)
			val64 |= ADAPTER_LED_ON;
		else
			val64 &= ~ADAPTER_LED_ON;

		writeq(val64, &bar0->adapter_control);
	}

	mod_timer(&sp->id_timer, jiffies + HZ / 2);
}

/**
 * s2io_ethtool_idnic - To physically identify the nic on the system.
 * @sp : private member of the device structure, which is a pointer to the
 * s2io_nic structure.
 * @id : pointer to the structure with identification parameters given by
 * ethtool.
 * s2io_ethtool_set_led - To physically identify the nic on the system.
 * @dev : network device
 * @state: led setting
 *
 * Description: Used to physically identify the NIC on the system.
 * The Link LED will blink for a time specified by the user for
 * identification.
 * NOTE: The Link has to be Up to be able to blink the LED. Hence
 * identification is possible only if it's link is up.
 * Return value:
 * int , returns 0 on success
 */

static int s2io_ethtool_idnic(struct net_device *dev, u32 data)
static int s2io_ethtool_set_led(struct net_device *dev,
				enum ethtool_phys_id_state state)
{
	u64 val64 = 0, last_gpio_ctrl_val;
	struct s2io_nic *sp = netdev_priv(dev);
	struct XENA_dev_config __iomem *bar0 = sp->bar0;
	u16 subid;
	u16 subid = sp->pdev->subsystem_device;

	subid = sp->pdev->subsystem_device;
	last_gpio_ctrl_val = readq(&bar0->gpio_control);
	if ((sp->device_type == XFRAME_I_DEVICE) && ((subid & 0xFF) < 0x07)) {
		val64 = readq(&bar0->adapter_control);
		u64 val64 = readq(&bar0->adapter_control);
		if (!(val64 & ADAPTER_CNTL_EN)) {
			pr_err("Adapter Link down, cannot blink LED\n");
			return -EFAULT;
			return -EAGAIN;
		}
	}
	if (sp->id_timer.function == NULL) {
		init_timer(&sp->id_timer);
		sp->id_timer.function = s2io_phy_id;
		sp->id_timer.data = (unsigned long)sp;
	}
	mod_timer(&sp->id_timer, jiffies);
	if (data)
		msleep_interruptible(data * HZ);
	else
		msleep_interruptible(MAX_FLICKER_TIME);
	del_timer_sync(&sp->id_timer);

	if (CARDS_WITH_FAULTY_LINK_INDICATORS(sp->device_type, subid)) {
		writeq(last_gpio_ctrl_val, &bar0->gpio_control);
		last_gpio_ctrl_val = readq(&bar0->gpio_control);
	switch (state) {
	case ETHTOOL_ID_ACTIVE:
		sp->adapt_ctrl_org = readq(&bar0->gpio_control);
		return -EINVAL;

	case ETHTOOL_ID_ON:
		s2io_set_led(sp, true);
		break;

	case ETHTOOL_ID_OFF:
		s2io_set_led(sp, false);
		break;

	case ETHTOOL_ID_INACTIVE:
		if (CARDS_WITH_FAULTY_LINK_INDICATORS(sp->device_type, subid))
			writeq(sp->adapt_ctrl_org, &bar0->gpio_control);
	}

	return 0;
@@ -6776,7 +6772,7 @@ static const struct ethtool_ops netdev_ethtool_ops = {
	.set_ufo = ethtool_op_set_ufo,
	.self_test = s2io_ethtool_test,
	.get_strings = s2io_ethtool_get_strings,
	.phys_id = s2io_ethtool_idnic,
	.set_phys_id = s2io_ethtool_set_led,
	.get_ethtool_stats = s2io_get_ethtool_stats,
	.get_sset_count = s2io_get_sset_count,
};
+0 −3
Original line number Diff line number Diff line
@@ -893,9 +893,6 @@ struct s2io_nic {
	u16 all_multi_pos;
	u16 promisc_flg;

	/*  Id timer, used to blink NIC to physically identify NIC. */
	struct timer_list id_timer;

	/*  Restart timer, used to restart NIC if the device is stuck and
	 *  a schedule task that will set the correct Link state once the
	 *  NIC's PHY has stabilized after a state change.