コード例 #1
0
ファイル: hdm_usb.c プロジェクト: acton393/linux
/**
 * wq_netinfo - work queue function
 * @wq_obj: object that holds data for our deferred work to do
 *
 * This retrieves the network interface status of the USB INIC
 * and compares it with the current status. If the status has
 * changed, it updates the status of the core.
 */
static void wq_netinfo(struct work_struct *wq_obj)
{
	struct most_dev *mdev = to_mdev_from_work(wq_obj);
	int i, prev_link_stat = mdev->link_stat;
	u8 prev_hw_addr[6];

	for (i = 0; i < 6; i++)
		prev_hw_addr[i] = mdev->hw_addr[i];

	if (hdm_update_netinfo(mdev) < 0)
		return;
	if (prev_link_stat != mdev->link_stat ||
	    prev_hw_addr[0] != mdev->hw_addr[0] ||
	    prev_hw_addr[1] != mdev->hw_addr[1] ||
	    prev_hw_addr[2] != mdev->hw_addr[2] ||
	    prev_hw_addr[3] != mdev->hw_addr[3] ||
	    prev_hw_addr[4] != mdev->hw_addr[4] ||
	    prev_hw_addr[5] != mdev->hw_addr[5])
		most_deliver_netinfo(&mdev->iface, mdev->link_stat,
				     &mdev->hw_addr[0]);
}
コード例 #2
0
ファイル: usb.c プロジェクト: avagin/linux
/**
 * wq_netinfo - work queue function to deliver latest networking information
 * @wq_obj: object that holds data for our deferred work to do
 *
 * This retrieves the network interface status of the USB INIC
 */
static void wq_netinfo(struct work_struct *wq_obj)
{
	struct most_dev *mdev = to_mdev_from_work(wq_obj);
	struct usb_device *usb_device = mdev->usb_device;
	struct device *dev = &usb_device->dev;
	u16 hi, mi, lo, link;
	u8 hw_addr[6];

	if (drci_rd_reg(usb_device, DRCI_REG_HW_ADDR_HI, &hi) < 0) {
		dev_err(dev, "Vendor request 'hw_addr_hi' failed\n");
		return;
	}

	if (drci_rd_reg(usb_device, DRCI_REG_HW_ADDR_MI, &mi) < 0) {
		dev_err(dev, "Vendor request 'hw_addr_mid' failed\n");
		return;
	}

	if (drci_rd_reg(usb_device, DRCI_REG_HW_ADDR_LO, &lo) < 0) {
		dev_err(dev, "Vendor request 'hw_addr_low' failed\n");
		return;
	}

	if (drci_rd_reg(usb_device, DRCI_REG_NI_STATE, &link) < 0) {
		dev_err(dev, "Vendor request 'link status' failed\n");
		return;
	}

	hw_addr[0] = hi >> 8;
	hw_addr[1] = hi;
	hw_addr[2] = mi >> 8;
	hw_addr[3] = mi;
	hw_addr[4] = lo >> 8;
	hw_addr[5] = lo;

	if (mdev->on_netinfo)
		mdev->on_netinfo(&mdev->iface, link, hw_addr);
}