コード例 #1
0
void
hxge_global_reset(p_hxge_t hxgep)
{
	HXGE_DEBUG_MSG((hxgep, DDI_CTL, "==> hxge_global_reset"));

	(void) hxge_intr_hw_disable(hxgep);

	if (hxgep->suspended)
		(void) hxge_link_init(hxgep);

	(void) hxge_vmac_init(hxgep);

	(void) hxge_intr_hw_enable(hxgep);

	HXGE_DEBUG_MSG((hxgep, DDI_CTL, "<== hxge_global_reset"));
}
コード例 #2
0
ファイル: hxge_main.c プロジェクト: u9621071/kernel-uek-UEK3
int
hxge_enable_adapter(struct hxge_adapter *hxgep)
{
	/* Do reset of all the major blocks, especially those that
           are shared across channels and potentially blades. This is done
	   via the PEU space */
	hxge_block_reset(hxgep, (LDV_RXDMA | LDV_TXDMA | LDV_VMAC));

        /* Enable Tx DMA channels */
        if (hxge_enable_tx(hxgep))
	{
		if (!test_bit(HXGE_DEVICE_UP, &hxgep->state)) {
			HXGE_ERR(hxgep, "hxge_enable_adapter: hxge_enable_tx failed");
			hxge_disable_adapter(hxgep);
			return -1;
		}
	}

        /* Enable the Rx DMA channels */
        hxge_enable_rx(hxgep);

	/* Allocate and enable TCAM */
	hxge_classify_init(hxgep);

        hxge_vmac_init(hxgep);

	/* Now that all the feeds into Device Error (PEU, TDC, etc.)
	 * have been cleared/initialized, enable the Device Error
	 * [logical] device/function */

	if (hxge_peu_deverr_init(hxgep))
		return -1;

	/* Enable interrupts for all devices */
	hxge_enable_interrupts(hxgep);

	return 0;
}
コード例 #3
0
ファイル: hxge_main.c プロジェクト: u9621071/kernel-uek-UEK3
static int
hxge_change_mtu(struct net_device *dev, int new_mtu)
{
	struct hxge_adapter *hxgep= netdev_priv(dev);
	int old_mtu = dev->mtu;
	int is_jumbo;
	int err = 0;

	HXGE_DBG(hxgep, "hxge_change_mtu : old_mtu=%d, new mtu = %d",old_mtu,new_mtu);
	if (hxge_get_option("enable_jumbo", &is_jumbo)) {
		HXGE_ERR(hxgep, "hxge_change_mtu: Could not read enable_jumbo");
		return -1;
	}

	if ((new_mtu < ETH_ZLEN) || (new_mtu > MAX_JUMBO_FRAME_SIZE))
		return -EINVAL;
	if ((new_mtu > ETH_DATA_LEN) && !is_jumbo)
		return -EINVAL;

	dev->mtu = new_mtu;

	/* The device is not up or the device is not present. In
	   either case, we set the MTU and just return. The MTU
	   for the hardware interface will be set when the
	   VMAC is initialized */

        if (!netif_running(dev) || !netif_device_present(dev)) {
		HXGE_DBG(hxgep, "hxge_change_mtu: interface not up");
		return 0;
        }


	/* It is now a jumbo packet. So, we have to reset the adapter. We
         * really want to only reset the Tx but we also change the size of the
         * Rx frame size. So, reset the whole adapter for safety */
	if (old_mtu > new_mtu) {
		hxge_reset_adapter(hxgep);
	}
	else {
		netif_stop_queue(dev);
		hxge_vmac_uninit(hxgep);
		err = hxge_vmac_init(hxgep);
		/* If new mtu failed, then revert to old mtu and reinit vmac.
		 * Return failure to the caller
		 */
		if (err) {
			HXGE_DBG(hxgep, "hxge_change_mtu: Bad MTU size, returning %d",err);
			dev->mtu = old_mtu;
			hxge_vmac_init(hxgep);
		}
		netif_wake_queue(dev);
	}

	if (!err) {
		if (new_mtu > ETH_DATA_LEN)
			hxgep->vmac.is_jumbo = TRUE;
		else
			hxgep->vmac.is_jumbo = FALSE;
	}

	return err;
}