git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
net
/
wan
/
wanxl.c
diff --git
a/drivers/net/wan/wanxl.c
b/drivers/net/wan/wanxl.c
index
e71b180
..
c736015
100644
(file)
--- a/
drivers/net/wan/wanxl.c
+++ b/
drivers/net/wan/wanxl.c
@@
-26,8
+26,9
@@
#include <linux/netdevice.h>
#include <linux/hdlc.h>
#include <linux/pci.h>
#include <linux/netdevice.h>
#include <linux/hdlc.h>
#include <linux/pci.h>
+#include <linux/dma-mapping.h>
+#include <linux/delay.h>
#include <asm/io.h>
#include <asm/io.h>
-#include <asm/delay.h>
#include "wanxl.h"
#include "wanxl.h"
@@
-72,7
+73,7
@@
typedef struct card_t {
u8 irq;
u8 __iomem *plx; /* PLX PCI9060 virtual base address */
u8 irq;
u8 __iomem *plx; /* PLX PCI9060 virtual base address */
- struct pci_dev *pdev; /* for p
dev->slot_name
*/
+ struct pci_dev *pdev; /* for p
ci_name(pdev)
*/
int rx_in;
struct sk_buff *rx_skbs[RX_QUEUE_LENGTH];
card_status_t *status; /* shared between host and card */
int rx_in;
struct sk_buff *rx_skbs[RX_QUEUE_LENGTH];
card_status_t *status; /* shared between host and card */
@@
-88,12
+89,6
@@
static inline port_t* dev_to_port(struct net_device *dev)
}
}
-static inline const char* card_name(struct pci_dev *pdev)
-{
- return pdev->slot_name;
-}
-
-
static inline port_status_t* get_status(port_t *port)
{
return &port->card->status->port_status[port->node];
static inline port_status_t* get_status(port_t *port)
{
return &port->card->status->port_status[port->node];
@@
-107,7
+102,7
@@
static inline dma_addr_t pci_map_single_debug(struct pci_dev *pdev, void *ptr,
dma_addr_t addr = pci_map_single(pdev, ptr, size, direction);
if (addr + size > 0x100000000LL)
printk(KERN_CRIT "wanXL %s: pci_map_single() returned memory"
dma_addr_t addr = pci_map_single(pdev, ptr, size, direction);
if (addr + size > 0x100000000LL)
printk(KERN_CRIT "wanXL %s: pci_map_single() returned memory"
- " at 0x%LX!\n",
card
_name(pdev),
+ " at 0x%LX!\n",
pci
_name(pdev),
(unsigned long long)addr);
return addr;
}
(unsigned long long)addr);
return addr;
}
@@
-154,7
+149,10
@@
static inline void wanxl_cable_intr(port_t *port)
printk(KERN_INFO "%s: %s%s module, %s cable%s%s\n",
port->dev->name, pm, dte, cable, dsr, dcd);
printk(KERN_INFO "%s: %s%s module, %s cable%s%s\n",
port->dev->name, pm, dte, cable, dsr, dcd);
- hdlc_set_carrier(value & STATUS_CABLE_DCD, port->dev);
+ if (value & STATUS_CABLE_DCD)
+ netif_carrier_on(port->dev);
+ else
+ netif_carrier_off(port->dev);
}
}
@@
-201,7
+199,7
@@
static inline void wanxl_rx_intr(card_t *card)
desc->stat != PACKET_EMPTY) {
if ((desc->stat & PACKET_PORT_MASK) > card->n_ports)
printk(KERN_CRIT "wanXL %s: received packet for"
desc->stat != PACKET_EMPTY) {
if ((desc->stat & PACKET_PORT_MASK) > card->n_ports)
printk(KERN_CRIT "wanXL %s: received packet for"
- " nonexistent port\n",
card
_name(card->pdev));
+ " nonexistent port\n",
pci
_name(card->pdev));
else {
struct sk_buff *skb = card->rx_skbs[card->rx_in];
port_t *port = &card->ports[desc->stat &
else {
struct sk_buff *skb = card->rx_skbs[card->rx_in];
port_t *port = &card->ports[desc->stat &
@@
-246,7
+244,7
@@
static inline void wanxl_rx_intr(card_t *card)
-static irqreturn_t wanxl_intr(int irq, void* dev_id
, struct pt_regs *regs
)
+static irqreturn_t wanxl_intr(int irq, void* dev_id)
{
card_t *card = dev_id;
int i;
{
card_t *card = dev_id;
int i;
@@
-582,8
+580,8
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
We set both dma_mask and consistent_dma_mask to 28 bits
and pray pci_alloc_consistent() will use this info. It should
work on most platforms */
We set both dma_mask and consistent_dma_mask to 28 bits
and pray pci_alloc_consistent() will use this info. It should
work on most platforms */
- if (pci_set_consistent_dma_mask(pdev,
0x0FFFFFFF
) ||
- pci_set_dma_mask(pdev,
0x0FFFFFFF
)) {
+ if (pci_set_consistent_dma_mask(pdev,
DMA_28BIT_MASK
) ||
+ pci_set_dma_mask(pdev,
DMA_28BIT_MASK
)) {
printk(KERN_ERR "wanXL: No usable DMA configuration\n");
return -EIO;
}
printk(KERN_ERR "wanXL: No usable DMA configuration\n");
return -EIO;
}
@@
-604,7
+602,7
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
card = kmalloc(alloc_size, GFP_KERNEL);
if (card == NULL) {
printk(KERN_ERR "wanXL %s: unable to allocate memory\n",
card = kmalloc(alloc_size, GFP_KERNEL);
if (card == NULL) {
printk(KERN_ERR "wanXL %s: unable to allocate memory\n",
-
card
_name(pdev));
+
pci
_name(pdev));
pci_release_regions(pdev);
pci_disable_device(pdev);
return -ENOBUFS;
pci_release_regions(pdev);
pci_disable_device(pdev);
return -ENOBUFS;
@@
-623,15
+621,15
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
#ifdef DEBUG_PCI
printk(KERN_DEBUG "wanXL %s: pci_alloc_consistent() returned memory"
#ifdef DEBUG_PCI
printk(KERN_DEBUG "wanXL %s: pci_alloc_consistent() returned memory"
- " at 0x%LX\n",
card
_name(pdev),
+ " at 0x%LX\n",
pci
_name(pdev),
(unsigned long long)card->status_address);
#endif
/* FIXME when PCI/DMA subsystems are fixed.
We set both dma_mask and consistent_dma_mask back to 32 bits
to indicate the card can do 32-bit DMA addressing */
(unsigned long long)card->status_address);
#endif
/* FIXME when PCI/DMA subsystems are fixed.
We set both dma_mask and consistent_dma_mask back to 32 bits
to indicate the card can do 32-bit DMA addressing */
- if (pci_set_consistent_dma_mask(pdev,
0xFFFFFFFF
) ||
- pci_set_dma_mask(pdev,
0xFFFFFFFF
)) {
+ if (pci_set_consistent_dma_mask(pdev,
DMA_32BIT_MASK
) ||
+ pci_set_dma_mask(pdev,
DMA_32BIT_MASK
)) {
printk(KERN_ERR "wanXL: No usable DMA configuration\n");
wanxl_pci_remove_one(pdev);
return -EIO;
printk(KERN_ERR "wanXL: No usable DMA configuration\n");
wanxl_pci_remove_one(pdev);
return -EIO;
@@
-639,7
+637,13
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
/* set up PLX mapping */
plx_phy = pci_resource_start(pdev, 0);
/* set up PLX mapping */
plx_phy = pci_resource_start(pdev, 0);
+
card->plx = ioremap_nocache(plx_phy, 0x70);
card->plx = ioremap_nocache(plx_phy, 0x70);
+ if (!card->plx) {
+ printk(KERN_ERR "wanxl: ioremap() failed\n");
+ wanxl_pci_remove_one(pdev);
+ return -EFAULT;
+ }
#if RESET_WHILE_LOADING
wanxl_reset(card);
#if RESET_WHILE_LOADING
wanxl_reset(card);
@@
-649,7
+653,7
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
while ((stat = readl(card->plx + PLX_MAILBOX_0)) != 0) {
if (time_before(timeout, jiffies)) {
printk(KERN_WARNING "wanXL %s: timeout waiting for"
while ((stat = readl(card->plx + PLX_MAILBOX_0)) != 0) {
if (time_before(timeout, jiffies)) {
printk(KERN_WARNING "wanXL %s: timeout waiting for"
- " PUTS to complete\n",
card
_name(pdev));
+ " PUTS to complete\n",
pci
_name(pdev));
wanxl_pci_remove_one(pdev);
return -ENODEV;
}
wanxl_pci_remove_one(pdev);
return -ENODEV;
}
@@
-661,7
+665,7
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
default:
printk(KERN_WARNING "wanXL %s: PUTS test 0x%X"
default:
printk(KERN_WARNING "wanXL %s: PUTS test 0x%X"
- " failed\n",
card
_name(pdev), stat & 0x30);
+ " failed\n",
pci
_name(pdev), stat & 0x30);
wanxl_pci_remove_one(pdev);
return -ENODEV;
}
wanxl_pci_remove_one(pdev);
return -ENODEV;
}
@@
-681,7
+685,7
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
(TX_BUFFERS + RX_BUFFERS) * BUFFER_LENGTH * ports) {
printk(KERN_WARNING "wanXL %s: no enough on-board RAM"
" (%u bytes detected, %u bytes required)\n",
(TX_BUFFERS + RX_BUFFERS) * BUFFER_LENGTH * ports) {
printk(KERN_WARNING "wanXL %s: no enough on-board RAM"
" (%u bytes detected, %u bytes required)\n",
-
card
_name(pdev), ramsize, BUFFERS_ADDR +
+
pci
_name(pdev), ramsize, BUFFERS_ADDR +
(TX_BUFFERS + RX_BUFFERS) * BUFFER_LENGTH * ports);
wanxl_pci_remove_one(pdev);
return -ENODEV;
(TX_BUFFERS + RX_BUFFERS) * BUFFER_LENGTH * ports);
wanxl_pci_remove_one(pdev);
return -ENODEV;
@@
-689,7
+693,7
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
if (wanxl_puts_command(card, MBX1_CMD_BSWAP)) {
printk(KERN_WARNING "wanXL %s: unable to Set Byte Swap"
if (wanxl_puts_command(card, MBX1_CMD_BSWAP)) {
printk(KERN_WARNING "wanXL %s: unable to Set Byte Swap"
- " Mode\n",
card
_name(pdev));
+ " Mode\n",
pci
_name(pdev));
wanxl_pci_remove_one(pdev);
return -ENODEV;
}
wanxl_pci_remove_one(pdev);
return -ENODEV;
}
@@
-705,6
+709,12
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
}
mem = ioremap_nocache(mem_phy, PDM_OFFSET + sizeof(firmware));
}
mem = ioremap_nocache(mem_phy, PDM_OFFSET + sizeof(firmware));
+ if (!mem) {
+ printk(KERN_ERR "wanxl: ioremap() failed\n");
+ wanxl_pci_remove_one(pdev);
+ return -EFAULT;
+ }
+
for (i = 0; i < sizeof(firmware); i += 4)
writel(htonl(*(u32*)(firmware + i)), mem + PDM_OFFSET + i);
for (i = 0; i < sizeof(firmware); i += 4)
writel(htonl(*(u32*)(firmware + i)), mem + PDM_OFFSET + i);
@@
-720,7
+730,7
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
if (wanxl_puts_command(card, MBX1_CMD_ABORTJ)) {
printk(KERN_WARNING "wanXL %s: unable to Abort and Jump\n",
if (wanxl_puts_command(card, MBX1_CMD_ABORTJ)) {
printk(KERN_WARNING "wanXL %s: unable to Abort and Jump\n",
-
card
_name(pdev));
+
pci
_name(pdev));
wanxl_pci_remove_one(pdev);
return -ENODEV;
}
wanxl_pci_remove_one(pdev);
return -ENODEV;
}
@@
-735,7
+745,7
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
if (!stat) {
printk(KERN_WARNING "wanXL %s: timeout while initializing card"
if (!stat) {
printk(KERN_WARNING "wanXL %s: timeout while initializing card"
- "firmware\n",
card
_name(pdev));
+ "firmware\n",
pci
_name(pdev));
wanxl_pci_remove_one(pdev);
return -ENODEV;
}
wanxl_pci_remove_one(pdev);
return -ENODEV;
}
@@
-745,12
+755,12
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
#endif
printk(KERN_INFO "wanXL %s: at 0x%X, %u KB of RAM at 0x%X, irq %u\n",
#endif
printk(KERN_INFO "wanXL %s: at 0x%X, %u KB of RAM at 0x%X, irq %u\n",
-
card
_name(pdev), plx_phy, ramsize / 1024, mem_phy, pdev->irq);
+
pci
_name(pdev), plx_phy, ramsize / 1024, mem_phy, pdev->irq);
/* Allocate IRQ */
/* Allocate IRQ */
- if (request_irq(pdev->irq, wanxl_intr,
SA_SHIRQ
, "wanXL", card)) {
+ if (request_irq(pdev->irq, wanxl_intr,
IRQF_SHARED
, "wanXL", card)) {
printk(KERN_WARNING "wanXL %s: could not allocate IRQ%i.\n",
printk(KERN_WARNING "wanXL %s: could not allocate IRQ%i.\n",
-
card
_name(pdev), pdev->irq);
+
pci
_name(pdev), pdev->irq);
wanxl_pci_remove_one(pdev);
return -EBUSY;
}
wanxl_pci_remove_one(pdev);
return -EBUSY;
}
@@
-762,7
+772,7
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
struct net_device *dev = alloc_hdlcdev(port);
if (!dev) {
printk(KERN_ERR "wanXL %s: unable to allocate"
struct net_device *dev = alloc_hdlcdev(port);
if (!dev) {
printk(KERN_ERR "wanXL %s: unable to allocate"
- " memory\n",
card
_name(pdev));
+ " memory\n",
pci
_name(pdev));
wanxl_pci_remove_one(pdev);
return -ENOMEM;
}
wanxl_pci_remove_one(pdev);
return -ENOMEM;
}
@@
-783,7
+793,7
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
get_status(port)->clocking = CLOCK_EXT;
if (register_hdlc_device(dev)) {
printk(KERN_ERR "wanXL %s: unable to register hdlc"
get_status(port)->clocking = CLOCK_EXT;
if (register_hdlc_device(dev)) {
printk(KERN_ERR "wanXL %s: unable to register hdlc"
- " device\n",
card
_name(pdev));
+ " device\n",
pci
_name(pdev));
free_netdev(dev);
wanxl_pci_remove_one(pdev);
return -ENOBUFS;
free_netdev(dev);
wanxl_pci_remove_one(pdev);
return -ENOBUFS;
@@
-791,7
+801,7
@@
static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
card->n_ports++;
}
card->n_ports++;
}
- printk(KERN_INFO "wanXL %s: port",
card
_name(pdev));
+ printk(KERN_INFO "wanXL %s: port",
pci
_name(pdev));
for (i = 0; i < ports; i++)
printk("%s #%i: %s", i ? "," : "", i,
card->ports[i].dev->name);
for (i = 0; i < ports; i++)
printk("%s #%i: %s", i ? "," : "", i,
card->ports[i].dev->name);
@@
-827,7
+837,7
@@
static int __init wanxl_init_module(void)
#ifdef MODULE
printk(KERN_INFO "%s\n", version);
#endif
#ifdef MODULE
printk(KERN_INFO "%s\n", version);
#endif
- return pci_
module_init
(&wanxl_pci_driver);
+ return pci_
register_driver
(&wanxl_pci_driver);
}
static void __exit wanxl_cleanup_module(void)
}
static void __exit wanxl_cleanup_module(void)