You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/benet/be_cmds.h include/linux/sysctl.h
This commit is contained in:
@@ -3152,7 +3152,7 @@ static void
|
||||
hfcmulti_pcm(struct hfc_multi *hc, int ch, int slot_tx, int bank_tx,
|
||||
int slot_rx, int bank_rx)
|
||||
{
|
||||
if (slot_rx < 0 || slot_rx < 0 || bank_tx < 0 || bank_rx < 0) {
|
||||
if (slot_tx < 0 || slot_rx < 0 || bank_tx < 0 || bank_rx < 0) {
|
||||
/* disable PCM */
|
||||
mode_hfcmulti(hc, ch, hc->chan[ch].protocol, -1, 0, -1, 0);
|
||||
return;
|
||||
|
||||
+2
-2
@@ -56,6 +56,7 @@ static const char version[] =
|
||||
#include <linux/errno.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/if_ether.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/init.h>
|
||||
@@ -734,8 +735,7 @@ static void init_82586_mem(struct net_device *dev)
|
||||
memcpy_toio(lp->base, init_words + 5, sizeof(init_words) - 10);
|
||||
|
||||
/* Fill in the station address. */
|
||||
memcpy_toio(lp->base+SA_OFFSET, dev->dev_addr,
|
||||
sizeof(dev->dev_addr));
|
||||
memcpy_toio(lp->base+SA_OFFSET, dev->dev_addr, ETH_ALEN);
|
||||
|
||||
/* The Tx-block list is written as needed. We just set up the values. */
|
||||
lp->tx_cmd_link = IDLELOOP + 4;
|
||||
|
||||
@@ -663,7 +663,7 @@ static int lance_open( struct net_device *dev )
|
||||
while (--i > 0)
|
||||
if (DREG & CSR0_IDON)
|
||||
break;
|
||||
if (i < 0 || (DREG & CSR0_ERR)) {
|
||||
if (i <= 0 || (DREG & CSR0_ERR)) {
|
||||
DPRINTK( 2, ( "lance_open(): opening %s failed, i=%d, csr0=%04x\n",
|
||||
dev->name, i, DREG ));
|
||||
DREG = CSR0_STOP;
|
||||
|
||||
@@ -1959,12 +1959,15 @@ static int atl2_get_eeprom(struct net_device *netdev,
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = first_dword; i < last_dword; i++) {
|
||||
if (!atl2_read_eeprom(hw, i*4, &(eeprom_buff[i-first_dword])))
|
||||
return -EIO;
|
||||
if (!atl2_read_eeprom(hw, i*4, &(eeprom_buff[i-first_dword]))) {
|
||||
ret_val = -EIO;
|
||||
goto free;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(bytes, (u8 *)eeprom_buff + (eeprom->offset & 3),
|
||||
eeprom->len);
|
||||
free:
|
||||
kfree(eeprom_buff);
|
||||
|
||||
return ret_val;
|
||||
|
||||
@@ -275,6 +275,7 @@ struct be_adapter {
|
||||
u32 tx_fc; /* Tx flow control */
|
||||
int link_speed;
|
||||
u8 port_type;
|
||||
u8 transceiver;
|
||||
};
|
||||
|
||||
extern const struct ethtool_ops be_ethtool_ops;
|
||||
|
||||
@@ -1479,6 +1479,41 @@ err:
|
||||
return status;
|
||||
}
|
||||
|
||||
int be_cmd_set_loopback(struct be_adapter *adapter, u8 port_num,
|
||||
u8 loopback_type, u8 enable)
|
||||
{
|
||||
struct be_mcc_wrb *wrb;
|
||||
struct be_cmd_req_set_lmode *req;
|
||||
int status;
|
||||
|
||||
spin_lock_bh(&adapter->mcc_lock);
|
||||
|
||||
wrb = wrb_from_mccq(adapter);
|
||||
if (!wrb) {
|
||||
status = -EBUSY;
|
||||
goto err;
|
||||
}
|
||||
|
||||
req = embedded_payload(wrb);
|
||||
|
||||
be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0,
|
||||
OPCODE_LOWLEVEL_SET_LOOPBACK_MODE);
|
||||
|
||||
be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_LOWLEVEL,
|
||||
OPCODE_LOWLEVEL_SET_LOOPBACK_MODE,
|
||||
sizeof(*req));
|
||||
|
||||
req->src_port = port_num;
|
||||
req->dest_port = port_num;
|
||||
req->loopback_type = loopback_type;
|
||||
req->loopback_state = enable;
|
||||
|
||||
status = be_mcc_notify_wait(adapter);
|
||||
err:
|
||||
spin_unlock_bh(&adapter->mcc_lock);
|
||||
return status;
|
||||
}
|
||||
|
||||
int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
|
||||
u32 loopback_type, u32 pkt_size, u32 num_pkts, u64 pattern)
|
||||
{
|
||||
@@ -1501,6 +1536,7 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
|
||||
|
||||
be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_LOWLEVEL,
|
||||
OPCODE_LOWLEVEL_LOOPBACK_TEST, sizeof(*req));
|
||||
req->hdr.timeout = 4;
|
||||
|
||||
req->pattern = cpu_to_le64(pattern);
|
||||
req->src_port = cpu_to_le32(port_num);
|
||||
|
||||
@@ -156,6 +156,7 @@ struct be_mcc_mailbox {
|
||||
|
||||
#define OPCODE_LOWLEVEL_HOST_DDR_DMA 17
|
||||
#define OPCODE_LOWLEVEL_LOOPBACK_TEST 18
|
||||
#define OPCODE_LOWLEVEL_SET_LOOPBACK_MODE 19
|
||||
|
||||
struct be_cmd_req_hdr {
|
||||
u8 opcode; /* dword 0 */
|
||||
@@ -822,6 +823,19 @@ struct be_cmd_resp_loopback_test {
|
||||
u32 ticks_compl;
|
||||
};
|
||||
|
||||
struct be_cmd_req_set_lmode {
|
||||
struct be_cmd_req_hdr hdr;
|
||||
u8 src_port;
|
||||
u8 dest_port;
|
||||
u8 loopback_type;
|
||||
u8 loopback_state;
|
||||
};
|
||||
|
||||
struct be_cmd_resp_set_lmode {
|
||||
struct be_cmd_resp_hdr resp_hdr;
|
||||
u8 rsvd0[4];
|
||||
};
|
||||
|
||||
/********************** DDR DMA test *********************/
|
||||
struct be_cmd_req_ddrdma_test {
|
||||
struct be_cmd_req_hdr hdr;
|
||||
@@ -928,3 +942,6 @@ extern int be_cmd_ddr_dma_test(struct be_adapter *adapter, u64 pattern,
|
||||
u32 byte_cnt, struct be_dma_mem *cmd);
|
||||
extern int be_cmd_get_seeprom_data(struct be_adapter *adapter,
|
||||
struct be_dma_mem *nonemb_cmd);
|
||||
extern int be_cmd_set_loopback(struct be_adapter *adapter, u8 port_num,
|
||||
u8 loopback_type, u8 enable);
|
||||
|
||||
|
||||
@@ -118,6 +118,7 @@ static const char et_self_tests[][ETH_GSTRING_LEN] = {
|
||||
#define BE_MAC_LOOPBACK 0x0
|
||||
#define BE_PHY_LOOPBACK 0x1
|
||||
#define BE_ONE_PORT_EXT_LOOPBACK 0x2
|
||||
#define BE_NO_LOOPBACK 0xff
|
||||
|
||||
static void
|
||||
be_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo)
|
||||
@@ -339,28 +340,50 @@ static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
|
||||
|
||||
status = be_cmd_read_port_type(adapter, adapter->port_num,
|
||||
&connector);
|
||||
switch (connector) {
|
||||
case 7:
|
||||
ecmd->port = PORT_FIBRE;
|
||||
break;
|
||||
default:
|
||||
ecmd->port = PORT_TP;
|
||||
break;
|
||||
if (!status) {
|
||||
switch (connector) {
|
||||
case 7:
|
||||
ecmd->port = PORT_FIBRE;
|
||||
ecmd->transceiver = XCVR_EXTERNAL;
|
||||
break;
|
||||
case 0:
|
||||
ecmd->port = PORT_TP;
|
||||
ecmd->transceiver = XCVR_EXTERNAL;
|
||||
break;
|
||||
default:
|
||||
ecmd->port = PORT_TP;
|
||||
ecmd->transceiver = XCVR_INTERNAL;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
ecmd->port = PORT_AUI;
|
||||
ecmd->transceiver = XCVR_INTERNAL;
|
||||
}
|
||||
|
||||
/* Save for future use */
|
||||
adapter->link_speed = ecmd->speed;
|
||||
adapter->port_type = ecmd->port;
|
||||
adapter->transceiver = ecmd->transceiver;
|
||||
} else {
|
||||
ecmd->speed = adapter->link_speed;
|
||||
ecmd->port = adapter->port_type;
|
||||
ecmd->transceiver = adapter->transceiver;
|
||||
}
|
||||
|
||||
ecmd->duplex = DUPLEX_FULL;
|
||||
ecmd->autoneg = AUTONEG_DISABLE;
|
||||
ecmd->supported = (SUPPORTED_10000baseT_Full | SUPPORTED_TP);
|
||||
ecmd->phy_address = adapter->port_num;
|
||||
ecmd->transceiver = XCVR_INTERNAL;
|
||||
switch (ecmd->port) {
|
||||
case PORT_FIBRE:
|
||||
ecmd->supported = (SUPPORTED_10000baseT_Full | SUPPORTED_FIBRE);
|
||||
break;
|
||||
case PORT_TP:
|
||||
ecmd->supported = (SUPPORTED_10000baseT_Full | SUPPORTED_TP);
|
||||
break;
|
||||
case PORT_AUI:
|
||||
ecmd->supported = (SUPPORTED_10000baseT_Full | SUPPORTED_AUI);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -489,6 +512,19 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static u64 be_loopback_test(struct be_adapter *adapter, u8 loopback_type,
|
||||
u64 *status)
|
||||
{
|
||||
be_cmd_set_loopback(adapter, adapter->port_num,
|
||||
loopback_type, 1);
|
||||
*status = be_cmd_loopback_test(adapter, adapter->port_num,
|
||||
loopback_type, 1500,
|
||||
2, 0xabc);
|
||||
be_cmd_set_loopback(adapter, adapter->port_num,
|
||||
BE_NO_LOOPBACK, 1);
|
||||
return *status;
|
||||
}
|
||||
|
||||
static void
|
||||
be_self_test(struct net_device *netdev, struct ethtool_test *test, u64 *data)
|
||||
{
|
||||
@@ -497,23 +533,18 @@ be_self_test(struct net_device *netdev, struct ethtool_test *test, u64 *data)
|
||||
memset(data, 0, sizeof(u64) * ETHTOOL_TESTS_NUM);
|
||||
|
||||
if (test->flags & ETH_TEST_FL_OFFLINE) {
|
||||
data[0] = be_cmd_loopback_test(adapter, adapter->port_num,
|
||||
BE_MAC_LOOPBACK, 1500,
|
||||
2, 0xabc);
|
||||
if (data[0] != 0)
|
||||
if (be_loopback_test(adapter, BE_MAC_LOOPBACK,
|
||||
&data[0]) != 0) {
|
||||
test->flags |= ETH_TEST_FL_FAILED;
|
||||
|
||||
data[1] = be_cmd_loopback_test(adapter, adapter->port_num,
|
||||
BE_PHY_LOOPBACK, 1500,
|
||||
2, 0xabc);
|
||||
if (data[1] != 0)
|
||||
}
|
||||
if (be_loopback_test(adapter, BE_PHY_LOOPBACK,
|
||||
&data[1]) != 0) {
|
||||
test->flags |= ETH_TEST_FL_FAILED;
|
||||
|
||||
data[2] = be_cmd_loopback_test(adapter, adapter->port_num,
|
||||
BE_ONE_PORT_EXT_LOOPBACK,
|
||||
1500, 2, 0xabc);
|
||||
if (data[2] != 0)
|
||||
}
|
||||
if (be_loopback_test(adapter, BE_ONE_PORT_EXT_LOOPBACK,
|
||||
&data[2]) != 0) {
|
||||
test->flags |= ETH_TEST_FL_FAILED;
|
||||
}
|
||||
|
||||
data[3] = be_test_ddr_dma(adapter);
|
||||
if (data[3] != 0)
|
||||
|
||||
@@ -7593,6 +7593,8 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
|
||||
if (bp->cnic_eth_dev.drv_state & CNIC_DRV_STATE_REGD) {
|
||||
bnx2x_set_iscsi_eth_mac_addr(bp, 1);
|
||||
bp->cnic_flags |= BNX2X_CNIC_FLAG_MAC_SET;
|
||||
bnx2x_init_sb(bp, bp->cnic_sb, bp->cnic_sb_mapping,
|
||||
CNIC_SB_ID(bp));
|
||||
}
|
||||
mutex_unlock(&bp->cnic_mutex);
|
||||
#endif
|
||||
|
||||
@@ -1580,7 +1580,7 @@ static void ad_agg_selection_logic(struct aggregator *agg)
|
||||
// check if any partner replys
|
||||
if (best->is_individual) {
|
||||
pr_warning("%s: Warning: No 802.3ad response from the link partner for any adapters in the bond\n",
|
||||
best->slave->dev->master->name);
|
||||
best->slave ? best->slave->dev->master->name : "NULL");
|
||||
}
|
||||
|
||||
best->is_active = 1;
|
||||
|
||||
@@ -990,7 +990,7 @@ static int __devinit mcp251x_can_probe(struct spi_device *spi)
|
||||
goto error_tx_buf;
|
||||
}
|
||||
priv->spi_rx_buf = kmalloc(SPI_TRANSFER_BUF_LEN, GFP_KERNEL);
|
||||
if (!priv->spi_tx_buf) {
|
||||
if (!priv->spi_rx_buf) {
|
||||
ret = -ENOMEM;
|
||||
goto error_rx_buf;
|
||||
}
|
||||
|
||||
@@ -1325,8 +1325,7 @@ net_open(struct net_device *dev)
|
||||
write_irq(dev, lp->chip_type, dev->irq);
|
||||
ret = request_irq(dev->irq, net_interrupt, 0, dev->name, dev);
|
||||
if (ret) {
|
||||
if (net_debug)
|
||||
printk(KERN_DEBUG "cs89x0: request_irq(%d) failed\n", dev->irq);
|
||||
printk(KERN_ERR "cs89x0: request_irq(%d) failed\n", dev->irq);
|
||||
goto bad_out;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2711,6 +2711,8 @@ static int __devinit davinci_emac_probe(struct platform_device *pdev)
|
||||
SET_ETHTOOL_OPS(ndev, ðtool_ops);
|
||||
netif_napi_add(ndev, &priv->napi, emac_poll, EMAC_POLL_WEIGHT);
|
||||
|
||||
clk_enable(emac_clk);
|
||||
|
||||
/* register the network device */
|
||||
SET_NETDEV_DEV(ndev, &pdev->dev);
|
||||
rc = register_netdev(ndev);
|
||||
@@ -2720,7 +2722,6 @@ static int __devinit davinci_emac_probe(struct platform_device *pdev)
|
||||
goto netdev_reg_err;
|
||||
}
|
||||
|
||||
clk_enable(emac_clk);
|
||||
|
||||
/* MII/Phy intialisation, mdio bus registration */
|
||||
emac_mii = mdiobus_alloc();
|
||||
@@ -2760,6 +2761,7 @@ mdiobus_quit:
|
||||
|
||||
netdev_reg_err:
|
||||
mdio_alloc_err:
|
||||
clk_disable(emac_clk);
|
||||
no_irq_res:
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
release_mem_region(res->start, res->end - res->start + 1);
|
||||
|
||||
@@ -237,6 +237,8 @@ static s32 e1000_init_mac_params_82571(struct e1000_adapter *adapter)
|
||||
/* Set if manageability features are enabled. */
|
||||
mac->arc_subsystem_valid = (er32(FWSM) & E1000_FWSM_MODE_MASK)
|
||||
? true : false;
|
||||
/* Adaptive IFS supported */
|
||||
mac->adaptive_ifs = true;
|
||||
|
||||
/* check for link */
|
||||
switch (hw->phy.media_type) {
|
||||
|
||||
@@ -224,6 +224,8 @@ static s32 e1000_init_mac_params_80003es2lan(struct e1000_adapter *adapter)
|
||||
/* Set if manageability features are enabled. */
|
||||
mac->arc_subsystem_valid = (er32(FWSM) & E1000_FWSM_MODE_MASK)
|
||||
? true : false;
|
||||
/* Adaptive IFS not supported */
|
||||
mac->adaptive_ifs = false;
|
||||
|
||||
/* check for link */
|
||||
switch (hw->phy.media_type) {
|
||||
|
||||
@@ -818,6 +818,7 @@ struct e1000_mac_info {
|
||||
|
||||
u8 forced_speed_duplex;
|
||||
|
||||
bool adaptive_ifs;
|
||||
bool arc_subsystem_valid;
|
||||
bool autoneg;
|
||||
bool autoneg_failed;
|
||||
|
||||
@@ -454,6 +454,8 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_adapter *adapter)
|
||||
mac->rar_entry_count--;
|
||||
/* Set if manageability features are enabled. */
|
||||
mac->arc_subsystem_valid = true;
|
||||
/* Adaptive IFS supported */
|
||||
mac->adaptive_ifs = true;
|
||||
|
||||
/* LED operations */
|
||||
switch (mac->type) {
|
||||
|
||||
+38
-16
@@ -125,6 +125,7 @@ void e1000_write_vfta_generic(struct e1000_hw *hw, u32 offset, u32 value)
|
||||
void e1000e_init_rx_addrs(struct e1000_hw *hw, u16 rar_count)
|
||||
{
|
||||
u32 i;
|
||||
u8 mac_addr[ETH_ALEN] = {0};
|
||||
|
||||
/* Setup the receive address */
|
||||
e_dbg("Programming MAC Address into RAR[0]\n");
|
||||
@@ -133,12 +134,8 @@ void e1000e_init_rx_addrs(struct e1000_hw *hw, u16 rar_count)
|
||||
|
||||
/* Zero out the other (rar_entry_count - 1) receive addresses */
|
||||
e_dbg("Clearing RAR[1-%u]\n", rar_count-1);
|
||||
for (i = 1; i < rar_count; i++) {
|
||||
E1000_WRITE_REG_ARRAY(hw, E1000_RA, (i << 1), 0);
|
||||
e1e_flush();
|
||||
E1000_WRITE_REG_ARRAY(hw, E1000_RA, ((i << 1) + 1), 0);
|
||||
e1e_flush();
|
||||
}
|
||||
for (i = 1; i < rar_count; i++)
|
||||
e1000e_rar_set(hw, mac_addr, i);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -164,10 +161,19 @@ void e1000e_rar_set(struct e1000_hw *hw, u8 *addr, u32 index)
|
||||
|
||||
rar_high = ((u32) addr[4] | ((u32) addr[5] << 8));
|
||||
|
||||
rar_high |= E1000_RAH_AV;
|
||||
/* If MAC address zero, no need to set the AV bit */
|
||||
if (rar_low || rar_high)
|
||||
rar_high |= E1000_RAH_AV;
|
||||
|
||||
E1000_WRITE_REG_ARRAY(hw, E1000_RA, (index << 1), rar_low);
|
||||
E1000_WRITE_REG_ARRAY(hw, E1000_RA, ((index << 1) + 1), rar_high);
|
||||
/*
|
||||
* Some bridges will combine consecutive 32-bit writes into
|
||||
* a single burst write, which will malfunction on some parts.
|
||||
* The flushes avoid this.
|
||||
*/
|
||||
ew32(RAL(index), rar_low);
|
||||
e1e_flush();
|
||||
ew32(RAH(index), rar_high);
|
||||
e1e_flush();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1609,6 +1615,11 @@ void e1000e_reset_adaptive(struct e1000_hw *hw)
|
||||
{
|
||||
struct e1000_mac_info *mac = &hw->mac;
|
||||
|
||||
if (!mac->adaptive_ifs) {
|
||||
e_dbg("Not in Adaptive IFS mode!\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
mac->current_ifs_val = 0;
|
||||
mac->ifs_min_val = IFS_MIN;
|
||||
mac->ifs_max_val = IFS_MAX;
|
||||
@@ -1617,6 +1628,8 @@ void e1000e_reset_adaptive(struct e1000_hw *hw)
|
||||
|
||||
mac->in_ifs_mode = false;
|
||||
ew32(AIT, 0);
|
||||
out:
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1630,6 +1643,11 @@ void e1000e_update_adaptive(struct e1000_hw *hw)
|
||||
{
|
||||
struct e1000_mac_info *mac = &hw->mac;
|
||||
|
||||
if (!mac->adaptive_ifs) {
|
||||
e_dbg("Not in Adaptive IFS mode!\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
if ((mac->collision_delta * mac->ifs_ratio) > mac->tx_packet_delta) {
|
||||
if (mac->tx_packet_delta > MIN_NUM_XMITS) {
|
||||
mac->in_ifs_mode = true;
|
||||
@@ -1650,6 +1668,8 @@ void e1000e_update_adaptive(struct e1000_hw *hw)
|
||||
ew32(AIT, 0);
|
||||
}
|
||||
}
|
||||
out:
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2287,10 +2307,12 @@ bool e1000e_enable_tx_pkt_filtering(struct e1000_hw *hw)
|
||||
s32 ret_val, hdr_csum, csum;
|
||||
u8 i, len;
|
||||
|
||||
hw->mac.tx_pkt_filtering = true;
|
||||
|
||||
/* No manageability, no filtering */
|
||||
if (!e1000e_check_mng_mode(hw)) {
|
||||
hw->mac.tx_pkt_filtering = false;
|
||||
return 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2298,9 +2320,9 @@ bool e1000e_enable_tx_pkt_filtering(struct e1000_hw *hw)
|
||||
* reason, disable filtering.
|
||||
*/
|
||||
ret_val = e1000_mng_enable_host_if(hw);
|
||||
if (ret_val != 0) {
|
||||
if (ret_val) {
|
||||
hw->mac.tx_pkt_filtering = false;
|
||||
return ret_val;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Read in the header. Length and offset are in dwords. */
|
||||
@@ -2319,17 +2341,17 @@ bool e1000e_enable_tx_pkt_filtering(struct e1000_hw *hw)
|
||||
*/
|
||||
if ((hdr_csum != csum) || (hdr->signature != E1000_IAMT_SIGNATURE)) {
|
||||
hw->mac.tx_pkt_filtering = true;
|
||||
return 1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Cookie area is valid, make the final check for filtering. */
|
||||
if (!(hdr->status & E1000_MNG_DHCP_COOKIE_STATUS_PARSING)) {
|
||||
hw->mac.tx_pkt_filtering = false;
|
||||
return 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
hw->mac.tx_pkt_filtering = true;
|
||||
return 1;
|
||||
out:
|
||||
return hw->mac.tx_pkt_filtering;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+16
-14
@@ -3315,24 +3315,24 @@ void e1000e_update_stats(struct e1000_adapter *adapter)
|
||||
if ((hw->phy.type == e1000_phy_82578) ||
|
||||
(hw->phy.type == e1000_phy_82577)) {
|
||||
e1e_rphy(hw, HV_SCC_UPPER, &phy_data);
|
||||
e1e_rphy(hw, HV_SCC_LOWER, &phy_data);
|
||||
adapter->stats.scc += phy_data;
|
||||
if (!e1e_rphy(hw, HV_SCC_LOWER, &phy_data))
|
||||
adapter->stats.scc += phy_data;
|
||||
|
||||
e1e_rphy(hw, HV_ECOL_UPPER, &phy_data);
|
||||
e1e_rphy(hw, HV_ECOL_LOWER, &phy_data);
|
||||
adapter->stats.ecol += phy_data;
|
||||
if (!e1e_rphy(hw, HV_ECOL_LOWER, &phy_data))
|
||||
adapter->stats.ecol += phy_data;
|
||||
|
||||
e1e_rphy(hw, HV_MCC_UPPER, &phy_data);
|
||||
e1e_rphy(hw, HV_MCC_LOWER, &phy_data);
|
||||
adapter->stats.mcc += phy_data;
|
||||
if (!e1e_rphy(hw, HV_MCC_LOWER, &phy_data))
|
||||
adapter->stats.mcc += phy_data;
|
||||
|
||||
e1e_rphy(hw, HV_LATECOL_UPPER, &phy_data);
|
||||
e1e_rphy(hw, HV_LATECOL_LOWER, &phy_data);
|
||||
adapter->stats.latecol += phy_data;
|
||||
if (!e1e_rphy(hw, HV_LATECOL_LOWER, &phy_data))
|
||||
adapter->stats.latecol += phy_data;
|
||||
|
||||
e1e_rphy(hw, HV_DC_UPPER, &phy_data);
|
||||
e1e_rphy(hw, HV_DC_LOWER, &phy_data);
|
||||
adapter->stats.dc += phy_data;
|
||||
if (!e1e_rphy(hw, HV_DC_LOWER, &phy_data))
|
||||
adapter->stats.dc += phy_data;
|
||||
} else {
|
||||
adapter->stats.scc += er32(SCC);
|
||||
adapter->stats.ecol += er32(ECOL);
|
||||
@@ -3360,8 +3360,8 @@ void e1000e_update_stats(struct e1000_adapter *adapter)
|
||||
if ((hw->phy.type == e1000_phy_82578) ||
|
||||
(hw->phy.type == e1000_phy_82577)) {
|
||||
e1e_rphy(hw, HV_COLC_UPPER, &phy_data);
|
||||
e1e_rphy(hw, HV_COLC_LOWER, &phy_data);
|
||||
hw->mac.collision_delta = phy_data;
|
||||
if (!e1e_rphy(hw, HV_COLC_LOWER, &phy_data))
|
||||
hw->mac.collision_delta = phy_data;
|
||||
} else {
|
||||
hw->mac.collision_delta = er32(COLC);
|
||||
}
|
||||
@@ -3372,8 +3372,8 @@ void e1000e_update_stats(struct e1000_adapter *adapter)
|
||||
if ((hw->phy.type == e1000_phy_82578) ||
|
||||
(hw->phy.type == e1000_phy_82577)) {
|
||||
e1e_rphy(hw, HV_TNCRS_UPPER, &phy_data);
|
||||
e1e_rphy(hw, HV_TNCRS_LOWER, &phy_data);
|
||||
adapter->stats.tncrs += phy_data;
|
||||
if (!e1e_rphy(hw, HV_TNCRS_LOWER, &phy_data))
|
||||
adapter->stats.tncrs += phy_data;
|
||||
} else {
|
||||
if ((hw->mac.type != e1000_82574) &&
|
||||
(hw->mac.type != e1000_82583))
|
||||
@@ -4674,6 +4674,7 @@ static int e1000_resume(struct pci_dev *pdev)
|
||||
|
||||
pci_set_power_state(pdev, PCI_D0);
|
||||
pci_restore_state(pdev);
|
||||
pci_save_state(pdev);
|
||||
e1000e_disable_l1aspm(pdev);
|
||||
|
||||
err = pci_enable_device_mem(pdev);
|
||||
@@ -4825,6 +4826,7 @@ static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev)
|
||||
} else {
|
||||
pci_set_master(pdev);
|
||||
pci_restore_state(pdev);
|
||||
pci_save_state(pdev);
|
||||
|
||||
pci_enable_wake(pdev, PCI_D3hot, 0);
|
||||
pci_enable_wake(pdev, PCI_D3cold, 0);
|
||||
|
||||
@@ -46,6 +46,11 @@
|
||||
#include "gianfar.h"
|
||||
#include "fsl_pq_mdio.h"
|
||||
|
||||
struct fsl_pq_mdio_priv {
|
||||
void __iomem *map;
|
||||
struct fsl_pq_mdio __iomem *regs;
|
||||
};
|
||||
|
||||
/*
|
||||
* Write value to the PHY at mii_id at register regnum,
|
||||
* on the bus attached to the local interface, which may be different from the
|
||||
@@ -105,7 +110,9 @@ int fsl_pq_local_mdio_read(struct fsl_pq_mdio __iomem *regs,
|
||||
|
||||
static struct fsl_pq_mdio __iomem *fsl_pq_mdio_get_regs(struct mii_bus *bus)
|
||||
{
|
||||
return (void __iomem __force *)bus->priv;
|
||||
struct fsl_pq_mdio_priv *priv = bus->priv;
|
||||
|
||||
return priv->regs;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -266,6 +273,7 @@ static int fsl_pq_mdio_probe(struct of_device *ofdev,
|
||||
{
|
||||
struct device_node *np = ofdev->node;
|
||||
struct device_node *tbi;
|
||||
struct fsl_pq_mdio_priv *priv;
|
||||
struct fsl_pq_mdio __iomem *regs = NULL;
|
||||
void __iomem *map;
|
||||
u32 __iomem *tbipa;
|
||||
@@ -274,14 +282,19 @@ static int fsl_pq_mdio_probe(struct of_device *ofdev,
|
||||
u64 addr = 0, size = 0;
|
||||
int err = 0;
|
||||
|
||||
priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
|
||||
new_bus = mdiobus_alloc();
|
||||
if (NULL == new_bus)
|
||||
return -ENOMEM;
|
||||
goto err_free_priv;
|
||||
|
||||
new_bus->name = "Freescale PowerQUICC MII Bus",
|
||||
new_bus->read = &fsl_pq_mdio_read,
|
||||
new_bus->write = &fsl_pq_mdio_write,
|
||||
new_bus->reset = &fsl_pq_mdio_reset,
|
||||
new_bus->priv = priv;
|
||||
fsl_pq_mdio_bus_name(new_bus->id, np);
|
||||
|
||||
/* Set the PHY base address */
|
||||
@@ -291,6 +304,7 @@ static int fsl_pq_mdio_probe(struct of_device *ofdev,
|
||||
err = -ENOMEM;
|
||||
goto err_free_bus;
|
||||
}
|
||||
priv->map = map;
|
||||
|
||||
if (of_device_is_compatible(np, "fsl,gianfar-mdio") ||
|
||||
of_device_is_compatible(np, "fsl,gianfar-tbi") ||
|
||||
@@ -298,8 +312,7 @@ static int fsl_pq_mdio_probe(struct of_device *ofdev,
|
||||
of_device_is_compatible(np, "ucc_geth_phy"))
|
||||
map -= offsetof(struct fsl_pq_mdio, miimcfg);
|
||||
regs = map;
|
||||
|
||||
new_bus->priv = (void __force *)regs;
|
||||
priv->regs = regs;
|
||||
|
||||
new_bus->irq = kcalloc(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);
|
||||
|
||||
@@ -392,10 +405,11 @@ static int fsl_pq_mdio_probe(struct of_device *ofdev,
|
||||
err_free_irqs:
|
||||
kfree(new_bus->irq);
|
||||
err_unmap_regs:
|
||||
iounmap(regs);
|
||||
iounmap(priv->map);
|
||||
err_free_bus:
|
||||
kfree(new_bus);
|
||||
|
||||
err_free_priv:
|
||||
kfree(priv);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -404,14 +418,16 @@ static int fsl_pq_mdio_remove(struct of_device *ofdev)
|
||||
{
|
||||
struct device *device = &ofdev->dev;
|
||||
struct mii_bus *bus = dev_get_drvdata(device);
|
||||
struct fsl_pq_mdio_priv *priv = bus->priv;
|
||||
|
||||
mdiobus_unregister(bus);
|
||||
|
||||
dev_set_drvdata(device, NULL);
|
||||
|
||||
iounmap(fsl_pq_mdio_get_regs(bus));
|
||||
iounmap(priv->map);
|
||||
bus->priv = NULL;
|
||||
mdiobus_free(bus);
|
||||
kfree(priv);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user