mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
This commit is contained in:
commit
6be325719b
4351 changed files with 223318 additions and 89868 deletions
|
|
@ -837,7 +837,7 @@ static int vortex_resume(struct device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct dev_pm_ops vortex_pm_ops = {
|
||||
static const struct dev_pm_ops vortex_pm_ops = {
|
||||
.suspend = vortex_suspend,
|
||||
.resume = vortex_resume,
|
||||
.freeze = vortex_suspend,
|
||||
|
|
|
|||
|
|
@ -1953,6 +1953,8 @@ config BCM63XX_ENET
|
|||
|
||||
source "drivers/net/fs_enet/Kconfig"
|
||||
|
||||
source "drivers/net/octeon/Kconfig"
|
||||
|
||||
endif # NET_ETHERNET
|
||||
|
||||
#
|
||||
|
|
|
|||
|
|
@ -285,3 +285,5 @@ obj-$(CONFIG_VIRTIO_NET) += virtio_net.o
|
|||
obj-$(CONFIG_SFC) += sfc/
|
||||
|
||||
obj-$(CONFIG_WIMAX) += wimax/
|
||||
|
||||
obj-$(CONFIG_OCTEON_MGMT_ETHERNET) += octeon/
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ config W90P910_ETH
|
|||
tristate "Nuvoton w90p910 Ethernet support"
|
||||
depends on ARM && ARCH_W90X900
|
||||
select PHYLIB
|
||||
select MII
|
||||
help
|
||||
Say Y here if you want to use built-in Ethernet ports
|
||||
on w90p910 processor.
|
||||
|
|
|
|||
|
|
@ -322,7 +322,7 @@ static int ixp4xx_mdio_write(struct mii_bus *bus, int phy_id, int location,
|
|||
ret = ixp4xx_mdio_cmd(bus, phy_id, location, 1, val);
|
||||
spin_unlock_irqrestore(&mdio_lock, flags);
|
||||
#if DEBUG_MDIO
|
||||
printk(KERN_DEBUG "%s #%i: MII read [%i] <- 0x%X, err = %i\n",
|
||||
printk(KERN_DEBUG "%s #%i: MII write [%i] <- 0x%X, err = %i\n",
|
||||
bus->name, phy_id, location, val, ret);
|
||||
#endif
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -1378,7 +1378,7 @@ static void sge_rx(struct sge *sge, struct freelQ *fl, unsigned int len)
|
|||
}
|
||||
__skb_pull(skb, sizeof(*p));
|
||||
|
||||
st = per_cpu_ptr(sge->port_stats[p->iff], smp_processor_id());
|
||||
st = this_cpu_ptr(sge->port_stats[p->iff]);
|
||||
|
||||
skb->protocol = eth_type_trans(skb, adapter->port[p->iff].dev);
|
||||
if ((adapter->flags & RX_CSUM_ENABLED) && p->csum == 0xffff &&
|
||||
|
|
@ -1780,8 +1780,7 @@ netdev_tx_t t1_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
{
|
||||
struct adapter *adapter = dev->ml_priv;
|
||||
struct sge *sge = adapter->sge;
|
||||
struct sge_port_stats *st = per_cpu_ptr(sge->port_stats[dev->if_port],
|
||||
smp_processor_id());
|
||||
struct sge_port_stats *st = this_cpu_ptr(sge->port_stats[dev->if_port]);
|
||||
struct cpl_tx_pkt *cpl;
|
||||
struct sk_buff *orig_skb = skb;
|
||||
int ret;
|
||||
|
|
|
|||
|
|
@ -1646,7 +1646,7 @@ dm9000_drv_resume(struct device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct dev_pm_ops dm9000_drv_pm_ops = {
|
||||
static const struct dev_pm_ops dm9000_drv_pm_ops = {
|
||||
.suspend = dm9000_drv_suspend,
|
||||
.resume = dm9000_drv_resume,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,51 +0,0 @@
|
|||
/*
|
||||
* linux/drivers/net/ehea/ehea_hcall.h
|
||||
*
|
||||
* eHEA ethernet device driver for IBM eServer System p
|
||||
*
|
||||
* (C) Copyright IBM Corp. 2006
|
||||
*
|
||||
* Authors:
|
||||
* Christoph Raisch <raisch@de.ibm.com>
|
||||
* Jan-Bernd Themann <themann@de.ibm.com>
|
||||
* Thomas Klein <tklein@de.ibm.com>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef __EHEA_HCALL_H__
|
||||
#define __EHEA_HCALL_H__
|
||||
|
||||
/**
|
||||
* This file contains HCALL defines that are to be included in the appropriate
|
||||
* kernel files later
|
||||
*/
|
||||
|
||||
#define H_ALLOC_HEA_RESOURCE 0x278
|
||||
#define H_MODIFY_HEA_QP 0x250
|
||||
#define H_QUERY_HEA_QP 0x254
|
||||
#define H_QUERY_HEA 0x258
|
||||
#define H_QUERY_HEA_PORT 0x25C
|
||||
#define H_MODIFY_HEA_PORT 0x260
|
||||
#define H_REG_BCMC 0x264
|
||||
#define H_DEREG_BCMC 0x268
|
||||
#define H_REGISTER_HEA_RPAGES 0x26C
|
||||
#define H_DISABLE_AND_GET_HEA 0x270
|
||||
#define H_GET_HEA_INFO 0x274
|
||||
#define H_ADD_CONN 0x284
|
||||
#define H_DEL_CONN 0x288
|
||||
|
||||
#endif /* __EHEA_HCALL_H__ */
|
||||
|
|
@ -33,7 +33,6 @@
|
|||
#include <asm/hvcall.h>
|
||||
#include "ehea.h"
|
||||
#include "ehea_hw.h"
|
||||
#include "ehea_hcall.h"
|
||||
|
||||
/* Some abbreviations used here:
|
||||
*
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ static netdev_tx_t loopback_xmit(struct sk_buff *skb,
|
|||
|
||||
/* it's OK to use per_cpu_ptr() because BHs are off */
|
||||
pcpu_lstats = dev->ml_priv;
|
||||
lb_stats = per_cpu_ptr(pcpu_lstats, smp_processor_id());
|
||||
lb_stats = this_cpu_ptr(pcpu_lstats);
|
||||
|
||||
len = skb->len;
|
||||
if (likely(netif_rx(skb) == NET_RX_SUCCESS)) {
|
||||
|
|
|
|||
|
|
@ -72,35 +72,6 @@ void mlx4_bitmap_free(struct mlx4_bitmap *bitmap, u32 obj)
|
|||
mlx4_bitmap_free_range(bitmap, obj, 1);
|
||||
}
|
||||
|
||||
static unsigned long find_aligned_range(unsigned long *bitmap,
|
||||
u32 start, u32 nbits,
|
||||
int len, int align)
|
||||
{
|
||||
unsigned long end, i;
|
||||
|
||||
again:
|
||||
start = ALIGN(start, align);
|
||||
|
||||
while ((start < nbits) && test_bit(start, bitmap))
|
||||
start += align;
|
||||
|
||||
if (start >= nbits)
|
||||
return -1;
|
||||
|
||||
end = start+len;
|
||||
if (end > nbits)
|
||||
return -1;
|
||||
|
||||
for (i = start + 1; i < end; i++) {
|
||||
if (test_bit(i, bitmap)) {
|
||||
start = i + 1;
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
|
||||
return start;
|
||||
}
|
||||
|
||||
u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align)
|
||||
{
|
||||
u32 obj, i;
|
||||
|
|
@ -110,13 +81,13 @@ u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align)
|
|||
|
||||
spin_lock(&bitmap->lock);
|
||||
|
||||
obj = find_aligned_range(bitmap->table, bitmap->last,
|
||||
bitmap->max, cnt, align);
|
||||
obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max,
|
||||
bitmap->last, cnt, align - 1);
|
||||
if (obj >= bitmap->max) {
|
||||
bitmap->top = (bitmap->top + bitmap->max + bitmap->reserved_top)
|
||||
& bitmap->mask;
|
||||
obj = find_aligned_range(bitmap->table, 0, bitmap->max,
|
||||
cnt, align);
|
||||
obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max,
|
||||
0, cnt, align - 1);
|
||||
}
|
||||
|
||||
if (obj < bitmap->max) {
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ static void dump_dev_cap_flags(struct mlx4_dev *dev, u32 flags)
|
|||
[ 9] = "Q_Key violation counter",
|
||||
[10] = "VMM",
|
||||
[12] = "DPDP",
|
||||
[15] = "Big LSO headers",
|
||||
[16] = "MW support",
|
||||
[17] = "APM support",
|
||||
[18] = "Atomic ops support",
|
||||
|
|
@ -235,7 +236,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
|
|||
MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_MPT_OFFSET);
|
||||
dev_cap->max_mpts = 1 << (field & 0x3f);
|
||||
MLX4_GET(field, outbox, QUERY_DEV_CAP_RSVD_EQ_OFFSET);
|
||||
dev_cap->reserved_eqs = 1 << (field & 0xf);
|
||||
dev_cap->reserved_eqs = field & 0xf;
|
||||
MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_EQ_OFFSET);
|
||||
dev_cap->max_eqs = 1 << (field & 0xf);
|
||||
MLX4_GET(field, outbox, QUERY_DEV_CAP_RSVD_MTT_OFFSET);
|
||||
|
|
|
|||
|
|
@ -1174,7 +1174,7 @@ static int __mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
return 0;
|
||||
|
||||
err_port:
|
||||
for (port = 1; port <= dev->caps.num_ports; port++)
|
||||
for (--port; port >= 1; --port)
|
||||
mlx4_cleanup_port_info(&priv->port[port]);
|
||||
|
||||
mlx4_cleanup_mcg_table(dev);
|
||||
|
|
|
|||
10
drivers/net/octeon/Kconfig
Normal file
10
drivers/net/octeon/Kconfig
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
config OCTEON_MGMT_ETHERNET
|
||||
tristate "Octeon Management port ethernet driver (CN5XXX, CN6XXX)"
|
||||
depends on CPU_CAVIUM_OCTEON
|
||||
select PHYLIB
|
||||
select MDIO_OCTEON
|
||||
default y
|
||||
help
|
||||
This option enables the ethernet driver for the management
|
||||
port on Cavium Networks' Octeon CN57XX, CN56XX, CN55XX,
|
||||
CN54XX, CN52XX, and CN6XXX chips.
|
||||
2
drivers/net/octeon/Makefile
Normal file
2
drivers/net/octeon/Makefile
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
|
||||
obj-$(CONFIG_OCTEON_MGMT_ETHERNET) += octeon_mgmt.o
|
||||
1176
drivers/net/octeon/octeon_mgmt.c
Normal file
1176
drivers/net/octeon/octeon_mgmt.c
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -270,7 +270,7 @@ static int try_io_port(struct pcmcia_device *link)
|
|||
/* for master/slave multifunction cards */
|
||||
link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
link->irq.Attributes =
|
||||
IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
|
||||
IRQ_TYPE_DYNAMIC_SHARING;
|
||||
}
|
||||
} else {
|
||||
/* This should be two 16-port windows */
|
||||
|
|
|
|||
|
|
@ -426,7 +426,7 @@ static int fmvj18x_config(struct pcmcia_device *link)
|
|||
|
||||
if (link->io.NumPorts2 != 0) {
|
||||
link->irq.Attributes =
|
||||
IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
|
||||
IRQ_TYPE_DYNAMIC_SHARING;
|
||||
ret = mfc_try_io_port(link);
|
||||
if (ret != 0) goto failed;
|
||||
} else if (cardtype == UNGERMANN) {
|
||||
|
|
|
|||
|
|
@ -490,7 +490,7 @@ static int try_io_port(struct pcmcia_device *link)
|
|||
/* for master/slave multifunction cards */
|
||||
link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
link->irq.Attributes =
|
||||
IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
|
||||
IRQ_TYPE_DYNAMIC_SHARING;
|
||||
}
|
||||
} else {
|
||||
/* This should be two 16-port windows */
|
||||
|
|
|
|||
|
|
@ -454,7 +454,7 @@ static int mhz_mfc_config(struct pcmcia_device *link)
|
|||
link->conf.Attributes |= CONF_ENABLE_SPKR;
|
||||
link->conf.Status = CCSR_AUDIO_ENA;
|
||||
link->irq.Attributes =
|
||||
IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED;
|
||||
IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->io.IOAddrLines = 16;
|
||||
link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
link->io.NumPorts2 = 8;
|
||||
|
|
|
|||
|
|
@ -841,7 +841,7 @@ xirc2ps_config(struct pcmcia_device * link)
|
|||
link->conf.Attributes |= CONF_ENABLE_SPKR;
|
||||
link->conf.Status |= CCSR_AUDIO_ENA;
|
||||
}
|
||||
link->irq.Attributes |= IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED ;
|
||||
link->irq.Attributes |= IRQ_TYPE_DYNAMIC_SHARING;
|
||||
link->io.NumPorts2 = 8;
|
||||
link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
|
||||
if (local->dingo) {
|
||||
|
|
|
|||
|
|
@ -115,4 +115,15 @@ config MDIO_GPIO
|
|||
To compile this driver as a module, choose M here: the module
|
||||
will be called mdio-gpio.
|
||||
|
||||
config MDIO_OCTEON
|
||||
tristate "Support for MDIO buses on Octeon SOCs"
|
||||
depends on CPU_CAVIUM_OCTEON
|
||||
default y
|
||||
help
|
||||
|
||||
This module provides a driver for the Octeon MDIO busses.
|
||||
It is required by the Octeon Ethernet device drivers.
|
||||
|
||||
If in doubt, say Y.
|
||||
|
||||
endif # PHYLIB
|
||||
|
|
|
|||
|
|
@ -20,3 +20,4 @@ obj-$(CONFIG_MDIO_BITBANG) += mdio-bitbang.o
|
|||
obj-$(CONFIG_MDIO_GPIO) += mdio-gpio.o
|
||||
obj-$(CONFIG_NATIONAL_PHY) += national.o
|
||||
obj-$(CONFIG_STE10XP) += ste10Xp.o
|
||||
obj-$(CONFIG_MDIO_OCTEON) += mdio-octeon.o
|
||||
|
|
|
|||
180
drivers/net/phy/mdio-octeon.c
Normal file
180
drivers/net/phy/mdio-octeon.c
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2009 Cavium Networks
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/phy.h>
|
||||
|
||||
#include <asm/octeon/octeon.h>
|
||||
#include <asm/octeon/cvmx-smix-defs.h>
|
||||
|
||||
#define DRV_VERSION "1.0"
|
||||
#define DRV_DESCRIPTION "Cavium Networks Octeon SMI/MDIO driver"
|
||||
|
||||
struct octeon_mdiobus {
|
||||
struct mii_bus *mii_bus;
|
||||
int unit;
|
||||
int phy_irq[PHY_MAX_ADDR];
|
||||
};
|
||||
|
||||
static int octeon_mdiobus_read(struct mii_bus *bus, int phy_id, int regnum)
|
||||
{
|
||||
struct octeon_mdiobus *p = bus->priv;
|
||||
union cvmx_smix_cmd smi_cmd;
|
||||
union cvmx_smix_rd_dat smi_rd;
|
||||
int timeout = 1000;
|
||||
|
||||
smi_cmd.u64 = 0;
|
||||
smi_cmd.s.phy_op = 1; /* MDIO_CLAUSE_22_READ */
|
||||
smi_cmd.s.phy_adr = phy_id;
|
||||
smi_cmd.s.reg_adr = regnum;
|
||||
cvmx_write_csr(CVMX_SMIX_CMD(p->unit), smi_cmd.u64);
|
||||
|
||||
do {
|
||||
/*
|
||||
* Wait 1000 clocks so we don't saturate the RSL bus
|
||||
* doing reads.
|
||||
*/
|
||||
cvmx_wait(1000);
|
||||
smi_rd.u64 = cvmx_read_csr(CVMX_SMIX_RD_DAT(p->unit));
|
||||
} while (smi_rd.s.pending && --timeout);
|
||||
|
||||
if (smi_rd.s.val)
|
||||
return smi_rd.s.dat;
|
||||
else
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
static int octeon_mdiobus_write(struct mii_bus *bus, int phy_id,
|
||||
int regnum, u16 val)
|
||||
{
|
||||
struct octeon_mdiobus *p = bus->priv;
|
||||
union cvmx_smix_cmd smi_cmd;
|
||||
union cvmx_smix_wr_dat smi_wr;
|
||||
int timeout = 1000;
|
||||
|
||||
smi_wr.u64 = 0;
|
||||
smi_wr.s.dat = val;
|
||||
cvmx_write_csr(CVMX_SMIX_WR_DAT(p->unit), smi_wr.u64);
|
||||
|
||||
smi_cmd.u64 = 0;
|
||||
smi_cmd.s.phy_op = 0; /* MDIO_CLAUSE_22_WRITE */
|
||||
smi_cmd.s.phy_adr = phy_id;
|
||||
smi_cmd.s.reg_adr = regnum;
|
||||
cvmx_write_csr(CVMX_SMIX_CMD(p->unit), smi_cmd.u64);
|
||||
|
||||
do {
|
||||
/*
|
||||
* Wait 1000 clocks so we don't saturate the RSL bus
|
||||
* doing reads.
|
||||
*/
|
||||
cvmx_wait(1000);
|
||||
smi_wr.u64 = cvmx_read_csr(CVMX_SMIX_WR_DAT(p->unit));
|
||||
} while (smi_wr.s.pending && --timeout);
|
||||
|
||||
if (timeout <= 0)
|
||||
return -EIO;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init octeon_mdiobus_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct octeon_mdiobus *bus;
|
||||
int i;
|
||||
int err = -ENOENT;
|
||||
|
||||
bus = devm_kzalloc(&pdev->dev, sizeof(*bus), GFP_KERNEL);
|
||||
if (!bus)
|
||||
return -ENOMEM;
|
||||
|
||||
/* The platform_device id is our unit number. */
|
||||
bus->unit = pdev->id;
|
||||
|
||||
bus->mii_bus = mdiobus_alloc();
|
||||
|
||||
if (!bus->mii_bus)
|
||||
goto err;
|
||||
|
||||
/*
|
||||
* Standard Octeon evaluation boards don't support phy
|
||||
* interrupts, we need to poll.
|
||||
*/
|
||||
for (i = 0; i < PHY_MAX_ADDR; i++)
|
||||
bus->phy_irq[i] = PHY_POLL;
|
||||
|
||||
bus->mii_bus->priv = bus;
|
||||
bus->mii_bus->irq = bus->phy_irq;
|
||||
bus->mii_bus->name = "mdio-octeon";
|
||||
snprintf(bus->mii_bus->id, MII_BUS_ID_SIZE, "%x", bus->unit);
|
||||
bus->mii_bus->parent = &pdev->dev;
|
||||
|
||||
bus->mii_bus->read = octeon_mdiobus_read;
|
||||
bus->mii_bus->write = octeon_mdiobus_write;
|
||||
|
||||
dev_set_drvdata(&pdev->dev, bus);
|
||||
|
||||
err = mdiobus_register(bus->mii_bus);
|
||||
if (err)
|
||||
goto err_register;
|
||||
|
||||
dev_info(&pdev->dev, "Version " DRV_VERSION "\n");
|
||||
|
||||
return 0;
|
||||
err_register:
|
||||
mdiobus_free(bus->mii_bus);
|
||||
|
||||
err:
|
||||
devm_kfree(&pdev->dev, bus);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int __exit octeon_mdiobus_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct octeon_mdiobus *bus;
|
||||
|
||||
bus = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
mdiobus_unregister(bus->mii_bus);
|
||||
mdiobus_free(bus->mii_bus);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver octeon_mdiobus_driver = {
|
||||
.driver = {
|
||||
.name = "mdio-octeon",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = octeon_mdiobus_probe,
|
||||
.remove = __exit_p(octeon_mdiobus_remove),
|
||||
};
|
||||
|
||||
void octeon_mdiobus_force_mod_depencency(void)
|
||||
{
|
||||
/* Let ethernet drivers force us to be loaded. */
|
||||
}
|
||||
EXPORT_SYMBOL(octeon_mdiobus_force_mod_depencency);
|
||||
|
||||
static int __init octeon_mdiobus_mod_init(void)
|
||||
{
|
||||
return platform_driver_register(&octeon_mdiobus_driver);
|
||||
}
|
||||
|
||||
static void __exit octeon_mdiobus_mod_exit(void)
|
||||
{
|
||||
platform_driver_unregister(&octeon_mdiobus_driver);
|
||||
}
|
||||
|
||||
module_init(octeon_mdiobus_mod_init);
|
||||
module_exit(octeon_mdiobus_mod_exit);
|
||||
|
||||
MODULE_DESCRIPTION(DRV_DESCRIPTION);
|
||||
MODULE_VERSION(DRV_VERSION);
|
||||
MODULE_AUTHOR("David Daney");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
@ -4859,7 +4859,7 @@ out:
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct dev_pm_ops rtl8169_pm_ops = {
|
||||
static const struct dev_pm_ops rtl8169_pm_ops = {
|
||||
.suspend = rtl8169_suspend,
|
||||
.resume = rtl8169_resume,
|
||||
.freeze = rtl8169_suspend,
|
||||
|
|
|
|||
|
|
@ -4685,6 +4685,7 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
|
|||
INIT_WORK(&hw->restart_work, sky2_restart);
|
||||
|
||||
pci_set_drvdata(pdev, hw);
|
||||
pdev->d3_delay = 150;
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -206,21 +206,6 @@ SMC_outw(u16 val, void __iomem *ioaddr, int reg)
|
|||
}
|
||||
}
|
||||
|
||||
#elif defined(CONFIG_ARCH_OMAP)
|
||||
|
||||
/* We can only do 16-bit reads and writes in the static memory space. */
|
||||
#define SMC_CAN_USE_8BIT 0
|
||||
#define SMC_CAN_USE_16BIT 1
|
||||
#define SMC_CAN_USE_32BIT 0
|
||||
#define SMC_IO_SHIFT 0
|
||||
#define SMC_NOWAIT 1
|
||||
|
||||
#define SMC_inw(a, r) readw((a) + (r))
|
||||
#define SMC_outw(v, a, r) writew(v, (a) + (r))
|
||||
#define SMC_insw(a, r, p, l) readsw((a) + (r), p, l)
|
||||
#define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l)
|
||||
#define SMC_IRQ_FLAGS (-1) /* from resource */
|
||||
|
||||
#elif defined(CONFIG_SH_SH4202_MICRODEV)
|
||||
|
||||
#define SMC_CAN_USE_8BIT 0
|
||||
|
|
|
|||
|
|
@ -2154,7 +2154,7 @@ static int smsc911x_resume(struct device *dev)
|
|||
return (to == 0) ? -EIO : 0;
|
||||
}
|
||||
|
||||
static struct dev_pm_ops smsc911x_pm_ops = {
|
||||
static const struct dev_pm_ops smsc911x_pm_ops = {
|
||||
.suspend = smsc911x_suspend,
|
||||
.resume = smsc911x_resume,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -153,15 +153,14 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev)
|
|||
struct net_device *rcv = NULL;
|
||||
struct veth_priv *priv, *rcv_priv;
|
||||
struct veth_net_stats *stats, *rcv_stats;
|
||||
int length, cpu;
|
||||
int length;
|
||||
|
||||
priv = netdev_priv(dev);
|
||||
rcv = priv->peer;
|
||||
rcv_priv = netdev_priv(rcv);
|
||||
|
||||
cpu = smp_processor_id();
|
||||
stats = per_cpu_ptr(priv->stats, cpu);
|
||||
rcv_stats = per_cpu_ptr(rcv_priv->stats, cpu);
|
||||
stats = this_cpu_ptr(priv->stats);
|
||||
rcv_stats = this_cpu_ptr(rcv_priv->stats);
|
||||
|
||||
if (!(rcv->flags & IFF_UP))
|
||||
goto tx_drop;
|
||||
|
|
|
|||
|
|
@ -2689,7 +2689,7 @@ vmxnet3_resume(struct device *device)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct dev_pm_ops vmxnet3_pm_ops = {
|
||||
static const struct dev_pm_ops vmxnet3_pm_ops = {
|
||||
.suspend = vmxnet3_suspend,
|
||||
.resume = vmxnet3_resume,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@
|
|||
#ifndef __iwl_core_h__
|
||||
#define __iwl_core_h__
|
||||
|
||||
#include <linux/utsrelease.h>
|
||||
#include <generated/utsrelease.h>
|
||||
|
||||
/************************
|
||||
* forward declarations *
|
||||
|
|
|
|||
|
|
@ -1365,7 +1365,7 @@ static void lbs_send_confirmsleep(struct lbs_private *priv)
|
|||
priv->dnld_sent = DNLD_RES_RECEIVED;
|
||||
|
||||
/* If nothing to do, go back to sleep (?) */
|
||||
if (!__kfifo_len(priv->event_fifo) && !priv->resp_len[priv->resp_idx])
|
||||
if (!kfifo_len(&priv->event_fifo) && !priv->resp_len[priv->resp_idx])
|
||||
priv->psstate = PS_STATE_SLEEP;
|
||||
|
||||
spin_unlock_irqrestore(&priv->driver_lock, flags);
|
||||
|
|
@ -1439,7 +1439,7 @@ void lbs_ps_confirm_sleep(struct lbs_private *priv)
|
|||
}
|
||||
|
||||
/* Pending events or command responses? */
|
||||
if (__kfifo_len(priv->event_fifo) || priv->resp_len[priv->resp_idx]) {
|
||||
if (kfifo_len(&priv->event_fifo) || priv->resp_len[priv->resp_idx]) {
|
||||
allowed = 0;
|
||||
lbs_deb_host("pending events or command responses\n");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
#include "scan.h"
|
||||
#include "assoc.h"
|
||||
|
||||
|
||||
#include <linux/kfifo.h>
|
||||
|
||||
/** sleep_params */
|
||||
struct sleep_params {
|
||||
|
|
@ -120,7 +120,7 @@ struct lbs_private {
|
|||
u32 resp_len[2];
|
||||
|
||||
/* Events sent from hardware to driver */
|
||||
struct kfifo *event_fifo;
|
||||
struct kfifo event_fifo;
|
||||
|
||||
/** thread to service interrupts */
|
||||
struct task_struct *main_thread;
|
||||
|
|
|
|||
|
|
@ -459,7 +459,7 @@ static int lbs_thread(void *data)
|
|||
else if (!list_empty(&priv->cmdpendingq) &&
|
||||
!(priv->wakeup_dev_required))
|
||||
shouldsleep = 0; /* We have a command to send */
|
||||
else if (__kfifo_len(priv->event_fifo))
|
||||
else if (kfifo_len(&priv->event_fifo))
|
||||
shouldsleep = 0; /* We have an event to process */
|
||||
else
|
||||
shouldsleep = 1; /* No command */
|
||||
|
|
@ -511,10 +511,13 @@ static int lbs_thread(void *data)
|
|||
|
||||
/* Process hardware events, e.g. card removed, link lost */
|
||||
spin_lock_irq(&priv->driver_lock);
|
||||
while (__kfifo_len(priv->event_fifo)) {
|
||||
while (kfifo_len(&priv->event_fifo)) {
|
||||
u32 event;
|
||||
__kfifo_get(priv->event_fifo, (unsigned char *) &event,
|
||||
sizeof(event));
|
||||
|
||||
if (kfifo_out(&priv->event_fifo,
|
||||
(unsigned char *) &event, sizeof(event)) !=
|
||||
sizeof(event))
|
||||
break;
|
||||
spin_unlock_irq(&priv->driver_lock);
|
||||
lbs_process_event(priv, event);
|
||||
spin_lock_irq(&priv->driver_lock);
|
||||
|
|
@ -883,10 +886,9 @@ static int lbs_init_adapter(struct lbs_private *priv)
|
|||
priv->resp_len[0] = priv->resp_len[1] = 0;
|
||||
|
||||
/* Create the event FIFO */
|
||||
priv->event_fifo = kfifo_alloc(sizeof(u32) * 16, GFP_KERNEL, NULL);
|
||||
if (IS_ERR(priv->event_fifo)) {
|
||||
ret = kfifo_alloc(&priv->event_fifo, sizeof(u32) * 16, GFP_KERNEL);
|
||||
if (ret) {
|
||||
lbs_pr_err("Out of memory allocating event FIFO buffer\n");
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
@ -901,8 +903,7 @@ static void lbs_free_adapter(struct lbs_private *priv)
|
|||
lbs_deb_enter(LBS_DEB_MAIN);
|
||||
|
||||
lbs_free_cmd_buffer(priv);
|
||||
if (priv->event_fifo)
|
||||
kfifo_free(priv->event_fifo);
|
||||
kfifo_free(&priv->event_fifo);
|
||||
del_timer(&priv->command_timer);
|
||||
del_timer(&priv->auto_deepsleep_timer);
|
||||
kfree(priv->networks);
|
||||
|
|
@ -1177,7 +1178,7 @@ void lbs_queue_event(struct lbs_private *priv, u32 event)
|
|||
if (priv->psstate == PS_STATE_SLEEP)
|
||||
priv->psstate = PS_STATE_AWAKE;
|
||||
|
||||
__kfifo_put(priv->event_fifo, (unsigned char *) &event, sizeof(u32));
|
||||
kfifo_in(&priv->event_fifo, (unsigned char *) &event, sizeof(u32));
|
||||
|
||||
wake_up_interruptible(&priv->waitq);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue