Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
This commit is contained in:
commit
5403c8a295
@ -22,8 +22,8 @@
|
||||
* (you will need to reboot afterwards) */
|
||||
/* #define BNX2X_STOP_ON_ERROR */
|
||||
|
||||
#define DRV_MODULE_VERSION "1.62.00-4"
|
||||
#define DRV_MODULE_RELDATE "2011/01/18"
|
||||
#define DRV_MODULE_VERSION "1.62.00-5"
|
||||
#define DRV_MODULE_RELDATE "2011/01/30"
|
||||
#define BNX2X_BC_VER 0x040200
|
||||
|
||||
#define BNX2X_MULTI_QUEUE
|
||||
|
@ -3948,48 +3948,6 @@ static u8 bnx2x_8073_8727_external_rom_boot(struct bnx2x *bp,
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void bnx2x_8073_set_xaui_low_power_mode(struct bnx2x *bp,
|
||||
struct bnx2x_phy *phy)
|
||||
{
|
||||
u16 val;
|
||||
bnx2x_cl45_read(bp, phy,
|
||||
MDIO_PMA_DEVAD, MDIO_PMA_REG_8073_CHIP_REV, &val);
|
||||
|
||||
if (val == 0) {
|
||||
/* Mustn't set low power mode in 8073 A0 */
|
||||
return;
|
||||
}
|
||||
|
||||
/* Disable PLL sequencer (use read-modify-write to clear bit 13) */
|
||||
bnx2x_cl45_read(bp, phy,
|
||||
MDIO_XS_DEVAD, MDIO_XS_PLL_SEQUENCER, &val);
|
||||
val &= ~(1<<13);
|
||||
bnx2x_cl45_write(bp, phy,
|
||||
MDIO_XS_DEVAD, MDIO_XS_PLL_SEQUENCER, val);
|
||||
|
||||
/* PLL controls */
|
||||
bnx2x_cl45_write(bp, phy, MDIO_XS_DEVAD, 0x805E, 0x1077);
|
||||
bnx2x_cl45_write(bp, phy, MDIO_XS_DEVAD, 0x805D, 0x0000);
|
||||
bnx2x_cl45_write(bp, phy, MDIO_XS_DEVAD, 0x805C, 0x030B);
|
||||
bnx2x_cl45_write(bp, phy, MDIO_XS_DEVAD, 0x805B, 0x1240);
|
||||
bnx2x_cl45_write(bp, phy, MDIO_XS_DEVAD, 0x805A, 0x2490);
|
||||
|
||||
/* Tx Controls */
|
||||
bnx2x_cl45_write(bp, phy, MDIO_XS_DEVAD, 0x80A7, 0x0C74);
|
||||
bnx2x_cl45_write(bp, phy, MDIO_XS_DEVAD, 0x80A6, 0x9041);
|
||||
bnx2x_cl45_write(bp, phy, MDIO_XS_DEVAD, 0x80A5, 0x4640);
|
||||
|
||||
/* Rx Controls */
|
||||
bnx2x_cl45_write(bp, phy, MDIO_XS_DEVAD, 0x80FE, 0x01C4);
|
||||
bnx2x_cl45_write(bp, phy, MDIO_XS_DEVAD, 0x80FD, 0x9249);
|
||||
bnx2x_cl45_write(bp, phy, MDIO_XS_DEVAD, 0x80FC, 0x2015);
|
||||
|
||||
/* Enable PLL sequencer (use read-modify-write to set bit 13) */
|
||||
bnx2x_cl45_read(bp, phy, MDIO_XS_DEVAD, MDIO_XS_PLL_SEQUENCER, &val);
|
||||
val |= (1<<13);
|
||||
bnx2x_cl45_write(bp, phy, MDIO_XS_DEVAD, MDIO_XS_PLL_SEQUENCER, val);
|
||||
}
|
||||
|
||||
/******************************************************************/
|
||||
/* BCM8073 PHY SECTION */
|
||||
/******************************************************************/
|
||||
@ -4148,8 +4106,6 @@ static u8 bnx2x_8073_config_init(struct bnx2x_phy *phy,
|
||||
|
||||
bnx2x_8073_set_pause_cl37(params, phy, vars);
|
||||
|
||||
bnx2x_8073_set_xaui_low_power_mode(bp, phy);
|
||||
|
||||
bnx2x_cl45_read(bp, phy,
|
||||
MDIO_PMA_DEVAD, MDIO_PMA_REG_M8051_MSGOUT_REG, &tmp1);
|
||||
|
||||
@ -6519,6 +6475,18 @@ static void bnx2x_848xx_set_link_led(struct bnx2x_phy *phy,
|
||||
MDIO_PMA_DEVAD,
|
||||
MDIO_PMA_REG_8481_LED1_MASK,
|
||||
0x80);
|
||||
|
||||
/* Tell LED3 to blink on source */
|
||||
bnx2x_cl45_read(bp, phy,
|
||||
MDIO_PMA_DEVAD,
|
||||
MDIO_PMA_REG_8481_LINK_SIGNAL,
|
||||
&val);
|
||||
val &= ~(7<<6);
|
||||
val |= (1<<6); /* A83B[8:6]= 1 */
|
||||
bnx2x_cl45_write(bp, phy,
|
||||
MDIO_PMA_DEVAD,
|
||||
MDIO_PMA_REG_8481_LINK_SIGNAL,
|
||||
val);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -7720,10 +7688,13 @@ static u8 bnx2x_8073_common_init_phy(struct bnx2x *bp,
|
||||
struct bnx2x_phy phy[PORT_MAX];
|
||||
struct bnx2x_phy *phy_blk[PORT_MAX];
|
||||
u16 val;
|
||||
s8 port;
|
||||
s8 port = 0;
|
||||
s8 port_of_path = 0;
|
||||
|
||||
bnx2x_ext_phy_hw_reset(bp, 0);
|
||||
u32 swap_val, swap_override;
|
||||
swap_val = REG_RD(bp, NIG_REG_PORT_SWAP);
|
||||
swap_override = REG_RD(bp, NIG_REG_STRAP_OVERRIDE);
|
||||
port ^= (swap_val && swap_override);
|
||||
bnx2x_ext_phy_hw_reset(bp, port);
|
||||
/* PART1 - Reset both phys */
|
||||
for (port = PORT_MAX - 1; port >= PORT_0; port--) {
|
||||
u32 shmem_base, shmem2_base;
|
||||
|
@ -5296,10 +5296,6 @@ static int bnx2x_init_hw_common(struct bnx2x *bp, u32 load_code)
|
||||
}
|
||||
}
|
||||
|
||||
bp->port.need_hw_lock = bnx2x_hw_lock_required(bp,
|
||||
bp->common.shmem_base,
|
||||
bp->common.shmem2_base);
|
||||
|
||||
bnx2x_setup_fan_failure_detection(bp);
|
||||
|
||||
/* clear PXP2 attentions */
|
||||
@ -5503,9 +5499,6 @@ static int bnx2x_init_hw_port(struct bnx2x *bp)
|
||||
|
||||
bnx2x_init_block(bp, MCP_BLOCK, init_stage);
|
||||
bnx2x_init_block(bp, DMAE_BLOCK, init_stage);
|
||||
bp->port.need_hw_lock = bnx2x_hw_lock_required(bp,
|
||||
bp->common.shmem_base,
|
||||
bp->common.shmem2_base);
|
||||
if (bnx2x_fan_failure_det_req(bp, bp->common.shmem_base,
|
||||
bp->common.shmem2_base, port)) {
|
||||
u32 reg_addr = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 :
|
||||
@ -8379,6 +8372,17 @@ static void __devinit bnx2x_get_port_hwinfo(struct bnx2x *bp)
|
||||
(ext_phy_type != PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN))
|
||||
bp->mdio.prtad =
|
||||
XGXS_EXT_PHY_ADDR(ext_phy_config);
|
||||
|
||||
/*
|
||||
* Check if hw lock is required to access MDC/MDIO bus to the PHY(s)
|
||||
* In MF mode, it is set to cover self test cases
|
||||
*/
|
||||
if (IS_MF(bp))
|
||||
bp->port.need_hw_lock = 1;
|
||||
else
|
||||
bp->port.need_hw_lock = bnx2x_hw_lock_required(bp,
|
||||
bp->common.shmem_base,
|
||||
bp->common.shmem2_base);
|
||||
}
|
||||
|
||||
static void __devinit bnx2x_get_mac_hwinfo(struct bnx2x *bp)
|
||||
|
@ -23,7 +23,7 @@ config CAN_SLCAN
|
||||
|
||||
As only the sending and receiving of CAN frames is implemented, this
|
||||
driver should work with the (serial/USB) CAN hardware from:
|
||||
www.canusb.com / www.can232.com / www.mictronic.com / www.canhack.de
|
||||
www.canusb.com / www.can232.com / www.mictronics.de / www.canhack.de
|
||||
|
||||
Userspace tools to attach the SLCAN line discipline (slcan_attach,
|
||||
slcand) can be found in the can-utils at the SocketCAN SVN, see
|
||||
|
@ -1,5 +1,6 @@
|
||||
header-y += byteorder/
|
||||
header-y += can/
|
||||
header-y += caif/
|
||||
header-y += dvb/
|
||||
header-y += hdlc/
|
||||
header-y += isdn/
|
||||
|
2
include/linux/caif/Kbuild
Normal file
2
include/linux/caif/Kbuild
Normal file
@ -0,0 +1,2 @@
|
||||
header-y += caif_socket.h
|
||||
header-y += if_caif.h
|
@ -150,6 +150,7 @@ static inline int ip_mroute_opt(int opt)
|
||||
extern int ip_mroute_setsockopt(struct sock *, int, char __user *, unsigned int);
|
||||
extern int ip_mroute_getsockopt(struct sock *, int, char __user *, int __user *);
|
||||
extern int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg);
|
||||
extern int ipmr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg);
|
||||
extern int ip_mr_init(void);
|
||||
#else
|
||||
static inline
|
||||
|
@ -753,6 +753,8 @@ struct proto {
|
||||
int level,
|
||||
int optname, char __user *optval,
|
||||
int __user *option);
|
||||
int (*compat_ioctl)(struct sock *sk,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
#endif
|
||||
int (*sendmsg)(struct kiocb *iocb, struct sock *sk,
|
||||
struct msghdr *msg, size_t len);
|
||||
|
@ -64,6 +64,7 @@ static void free_info(struct kref *ref)
|
||||
|
||||
spin_unlock_bh(&bat_priv->vis_list_lock);
|
||||
kfree_skb(info->skb_packet);
|
||||
kfree(info);
|
||||
}
|
||||
|
||||
/* Compare two vis packets, used by the hashing algorithm */
|
||||
@ -268,10 +269,10 @@ int vis_seq_print_text(struct seq_file *seq, void *offset)
|
||||
buff_pos += sprintf(buff + buff_pos, "%pM,",
|
||||
entry->addr);
|
||||
|
||||
for (i = 0; i < packet->entries; i++)
|
||||
for (j = 0; j < packet->entries; j++)
|
||||
buff_pos += vis_data_read_entry(
|
||||
buff + buff_pos,
|
||||
&entries[i],
|
||||
&entries[j],
|
||||
entry->addr,
|
||||
entry->primary);
|
||||
|
||||
@ -444,7 +445,7 @@ static struct vis_info *add_packet(struct bat_priv *bat_priv,
|
||||
info);
|
||||
if (hash_added < 0) {
|
||||
/* did not work (for some reason) */
|
||||
kref_put(&old_info->refcount, free_info);
|
||||
kref_put(&info->refcount, free_info);
|
||||
info = NULL;
|
||||
}
|
||||
|
||||
@ -815,7 +816,7 @@ static void send_vis_packets(struct work_struct *work)
|
||||
container_of(work, struct delayed_work, work);
|
||||
struct bat_priv *bat_priv =
|
||||
container_of(delayed_work, struct bat_priv, vis_work);
|
||||
struct vis_info *info, *temp;
|
||||
struct vis_info *info;
|
||||
|
||||
spin_lock_bh(&bat_priv->vis_hash_lock);
|
||||
purge_vis_packets(bat_priv);
|
||||
@ -825,8 +826,9 @@ static void send_vis_packets(struct work_struct *work)
|
||||
send_list_add(bat_priv, bat_priv->my_vis_info);
|
||||
}
|
||||
|
||||
list_for_each_entry_safe(info, temp, &bat_priv->vis_send_list,
|
||||
send_list) {
|
||||
while (!list_empty(&bat_priv->vis_send_list)) {
|
||||
info = list_first_entry(&bat_priv->vis_send_list,
|
||||
typeof(*info), send_list);
|
||||
|
||||
kref_get(&info->refcount);
|
||||
spin_unlock_bh(&bat_priv->vis_hash_lock);
|
||||
|
@ -3564,6 +3564,7 @@ static void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb)
|
||||
__skb_pull(skb, skb_headlen(skb));
|
||||
skb_reserve(skb, NET_IP_ALIGN - skb_headroom(skb));
|
||||
skb->vlan_tci = 0;
|
||||
skb->dev = napi->dev;
|
||||
|
||||
napi->skb = skb;
|
||||
}
|
||||
|
@ -1704,6 +1704,9 @@ replay:
|
||||
snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind);
|
||||
|
||||
dest_net = rtnl_link_get_net(net, tb);
|
||||
if (IS_ERR(dest_net))
|
||||
return PTR_ERR(dest_net);
|
||||
|
||||
dev = rtnl_create_link(net, dest_net, ifname, ops, tb);
|
||||
|
||||
if (IS_ERR(dev))
|
||||
|
@ -880,6 +880,19 @@ int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
|
||||
}
|
||||
EXPORT_SYMBOL(inet_ioctl);
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
int inet_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct sock *sk = sock->sk;
|
||||
int err = -ENOIOCTLCMD;
|
||||
|
||||
if (sk->sk_prot->compat_ioctl)
|
||||
err = sk->sk_prot->compat_ioctl(sk, cmd, arg);
|
||||
|
||||
return err;
|
||||
}
|
||||
#endif
|
||||
|
||||
const struct proto_ops inet_stream_ops = {
|
||||
.family = PF_INET,
|
||||
.owner = THIS_MODULE,
|
||||
@ -903,6 +916,7 @@ const struct proto_ops inet_stream_ops = {
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_setsockopt = compat_sock_common_setsockopt,
|
||||
.compat_getsockopt = compat_sock_common_getsockopt,
|
||||
.compat_ioctl = inet_compat_ioctl,
|
||||
#endif
|
||||
};
|
||||
EXPORT_SYMBOL(inet_stream_ops);
|
||||
@ -929,6 +943,7 @@ const struct proto_ops inet_dgram_ops = {
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_setsockopt = compat_sock_common_setsockopt,
|
||||
.compat_getsockopt = compat_sock_common_getsockopt,
|
||||
.compat_ioctl = inet_compat_ioctl,
|
||||
#endif
|
||||
};
|
||||
EXPORT_SYMBOL(inet_dgram_ops);
|
||||
@ -959,6 +974,7 @@ static const struct proto_ops inet_sockraw_ops = {
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_setsockopt = compat_sock_common_setsockopt,
|
||||
.compat_getsockopt = compat_sock_common_getsockopt,
|
||||
.compat_ioctl = inet_compat_ioctl,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -60,6 +60,7 @@
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/if_arp.h>
|
||||
#include <linux/netfilter_ipv4.h>
|
||||
#include <linux/compat.h>
|
||||
#include <net/ipip.h>
|
||||
#include <net/checksum.h>
|
||||
#include <net/netlink.h>
|
||||
@ -1434,6 +1435,51 @@ int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
struct compat_sioc_sg_req {
|
||||
struct in_addr src;
|
||||
struct in_addr grp;
|
||||
compat_ulong_t pktcnt;
|
||||
compat_ulong_t bytecnt;
|
||||
compat_ulong_t wrong_if;
|
||||
};
|
||||
|
||||
int ipmr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg)
|
||||
{
|
||||
struct sioc_sg_req sr;
|
||||
struct mfc_cache *c;
|
||||
struct net *net = sock_net(sk);
|
||||
struct mr_table *mrt;
|
||||
|
||||
mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT);
|
||||
if (mrt == NULL)
|
||||
return -ENOENT;
|
||||
|
||||
switch (cmd) {
|
||||
case SIOCGETSGCNT:
|
||||
if (copy_from_user(&sr, arg, sizeof(sr)))
|
||||
return -EFAULT;
|
||||
|
||||
rcu_read_lock();
|
||||
c = ipmr_cache_find(mrt, sr.src.s_addr, sr.grp.s_addr);
|
||||
if (c) {
|
||||
sr.pktcnt = c->mfc_un.res.pkt;
|
||||
sr.bytecnt = c->mfc_un.res.bytes;
|
||||
sr.wrong_if = c->mfc_un.res.wrong_if;
|
||||
rcu_read_unlock();
|
||||
|
||||
if (copy_to_user(arg, &sr, sizeof(sr)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
return -EADDRNOTAVAIL;
|
||||
default:
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static int ipmr_device_event(struct notifier_block *this, unsigned long event, void *ptr)
|
||||
{
|
||||
|
@ -76,6 +76,7 @@
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/netfilter.h>
|
||||
#include <linux/netfilter_ipv4.h>
|
||||
#include <linux/compat.h>
|
||||
|
||||
static struct raw_hashinfo raw_v4_hashinfo = {
|
||||
.lock = __RW_LOCK_UNLOCKED(raw_v4_hashinfo.lock),
|
||||
@ -838,6 +839,23 @@ static int raw_ioctl(struct sock *sk, int cmd, unsigned long arg)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
static int compat_raw_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
switch (cmd) {
|
||||
case SIOCOUTQ:
|
||||
case SIOCINQ:
|
||||
return -ENOIOCTLCMD;
|
||||
default:
|
||||
#ifdef CONFIG_IP_MROUTE
|
||||
return ipmr_compat_ioctl(sk, cmd, compat_ptr(arg));
|
||||
#else
|
||||
return -ENOIOCTLCMD;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
struct proto raw_prot = {
|
||||
.name = "RAW",
|
||||
.owner = THIS_MODULE,
|
||||
@ -860,6 +878,7 @@ struct proto raw_prot = {
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_setsockopt = compat_raw_setsockopt,
|
||||
.compat_getsockopt = compat_raw_getsockopt,
|
||||
.compat_ioctl = compat_raw_ioctl,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user