diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-06-18 11:48:40 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-06-18 11:48:40 -0700 |
commit | d83b14c0db5b238975990c0abda51521120106e9 (patch) | |
tree | 67f27ccfe6dcb37ae07b407b6e6978f18757dba3 /drivers/atm/he.c | |
parent | 952f4a0a9b27e6dbd5d32e330b3f609ebfa0b061 (diff) | |
parent | 6d1a3fb567a728d31474636e167c324702a0c38b (diff) | |
download | kernel_goldelico_gta04-d83b14c0db5b238975990c0abda51521120106e9.zip kernel_goldelico_gta04-d83b14c0db5b238975990c0abda51521120106e9.tar.gz kernel_goldelico_gta04-d83b14c0db5b238975990c0abda51521120106e9.tar.bz2 |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (43 commits)
netlink: genl: fix circular locking
Revert "mac80211: Use skb_header_cloned() on TX path."
af_unix: fix 'poll for write'/ connected DGRAM sockets
tun: Proper handling of IPv6 header in tun driver when TUN_NO_PI is set
atl1: relax eeprom mac address error check
net/enc28j60: low power mode
net/enc28j60: section fix
sky2: 88E8040T pci device id
netxen: download firmware in pci probe
netxen: cleanup debug messages
netxen: remove global physical_port array
netxen: fix portnum for hp mezz cards
ibm_newemac: select CRC32 in Kconfig
xfrm: fix fragmentation for ipv4 xfrm tunnel
netfilter: nf_conntrack_h323: fix module unload crash
netfilter: nf_conntrack_h323: fix memory leak in module initialization error path
netfilter: nf_nat: fix RCU races
atm: [he] send idle cells instead of unassigned when in SDH mode
atm: [he] limit queries to the device's register space
atm: [br2864] fix routed vcmux support
...
Diffstat (limited to 'drivers/atm/he.c')
-rw-r--r-- | drivers/atm/he.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/atm/he.c b/drivers/atm/he.c index ffc4a5a..ea495b2 100644 --- a/drivers/atm/he.c +++ b/drivers/atm/he.c @@ -1542,7 +1542,8 @@ he_start(struct atm_dev *dev) /* initialize framer */ #ifdef CONFIG_ATM_HE_USE_SUNI - suni_init(he_dev->atm_dev); + if (he_isMM(he_dev)) + suni_init(he_dev->atm_dev); if (he_dev->atm_dev->phy && he_dev->atm_dev->phy->start) he_dev->atm_dev->phy->start(he_dev->atm_dev); #endif /* CONFIG_ATM_HE_USE_SUNI */ @@ -1554,6 +1555,7 @@ he_start(struct atm_dev *dev) val = he_phy_get(he_dev->atm_dev, SUNI_TPOP_APM); val = (val & ~SUNI_TPOP_APM_S) | (SUNI_TPOP_S_SDH << SUNI_TPOP_APM_S_SHIFT); he_phy_put(he_dev->atm_dev, val, SUNI_TPOP_APM); + he_phy_put(he_dev->atm_dev, SUNI_TACP_IUCHP_CLP, SUNI_TACP_IUCHP); } /* 5.1.12 enable transmit and receive */ @@ -2844,10 +2846,15 @@ he_ioctl(struct atm_dev *atm_dev, unsigned int cmd, void __user *arg) if (copy_from_user(®, arg, sizeof(struct he_ioctl_reg))) return -EFAULT; - + spin_lock_irqsave(&he_dev->global_lock, flags); switch (reg.type) { case HE_REGTYPE_PCI: + if (reg.addr < 0 || reg.addr >= HE_REGMAP_SIZE) { + err = -EINVAL; + break; + } + reg.val = he_readl(he_dev, reg.addr); break; case HE_REGTYPE_RCM: |