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
/
sgiseeq.c
diff --git
a/drivers/net/sgiseeq.c
b/drivers/net/sgiseeq.c
index
9bc3b1c
..
a833e7f
100644
(file)
--- a/
drivers/net/sgiseeq.c
+++ b/
drivers/net/sgiseeq.c
@@
-3,6
+3,9
@@
*
* Copyright (C) 1996 David S. Miller (dm@engr.sgi.com)
*/
*
* Copyright (C) 1996 David S. Miller (dm@engr.sgi.com)
*/
+
+#undef DEBUG
+
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/errno.h>
@@
-32,8
+35,6
@@
#include "sgiseeq.h"
#include "sgiseeq.h"
-static char *version = "sgiseeq.c: David S. Miller (dm@engr.sgi.com)\n";
-
static char *sgiseeqstr = "SGI Seeq8003";
/*
static char *sgiseeqstr = "SGI Seeq8003";
/*
@@
-61,8
+62,6
@@
static char *sgiseeqstr = "SGI Seeq8003";
sp->tx_old + (SEEQ_TX_BUFFERS - 1) - sp->tx_new : \
sp->tx_old - sp->tx_new - 1)
sp->tx_old + (SEEQ_TX_BUFFERS - 1) - sp->tx_new : \
sp->tx_old - sp->tx_new - 1)
-#define DEBUG
-
struct sgiseeq_rx_desc {
volatile struct hpc_dma_desc rdma;
volatile signed int buf_vaddr;
struct sgiseeq_rx_desc {
volatile struct hpc_dma_desc rdma;
volatile signed int buf_vaddr;
@@
-113,9
+112,9
@@
static struct net_device *root_sgiseeq_dev;
static inline void hpc3_eth_reset(struct hpc3_ethregs *hregs)
{
static inline void hpc3_eth_reset(struct hpc3_ethregs *hregs)
{
- hregs->r
x_reset = HPC3_ERXRST_CRESET | HPC3_ERX
RST_CLRIRQ;
+ hregs->r
eset = HPC3_ERST_CRESET | HPC3_E
RST_CLRIRQ;
udelay(20);
udelay(20);
- hregs->r
x_r
eset = 0;
+ hregs->reset = 0;
}
static inline void reset_hpc3_and_seeq(struct hpc3_ethregs *hregs,
}
static inline void reset_hpc3_and_seeq(struct hpc3_ethregs *hregs,
@@
-211,7
+210,7
@@
static int seeq_init_ring(struct net_device *dev)
static struct sgiseeq_private *gpriv;
static struct net_device *gdev;
static struct sgiseeq_private *gpriv;
static struct net_device *gdev;
-void sgiseeq_dump_rings(void)
+
static
void sgiseeq_dump_rings(void)
{
static int once;
struct sgiseeq_rx_desc *r = gpriv->rx_desc;
{
static int once;
struct sgiseeq_rx_desc *r = gpriv->rx_desc;
@@
-252,7
+251,6
@@
void sgiseeq_dump_rings(void)
#define TSTAT_INIT_SEEQ (SEEQ_TCMD_IPT|SEEQ_TCMD_I16|SEEQ_TCMD_IC|SEEQ_TCMD_IUF)
#define TSTAT_INIT_EDLC ((TSTAT_INIT_SEEQ) | SEEQ_TCMD_RB2)
#define TSTAT_INIT_SEEQ (SEEQ_TCMD_IPT|SEEQ_TCMD_I16|SEEQ_TCMD_IC|SEEQ_TCMD_IUF)
#define TSTAT_INIT_EDLC ((TSTAT_INIT_SEEQ) | SEEQ_TCMD_RB2)
-#define RDMACFG_INIT (HPC3_ERXDCFG_FRXDC | HPC3_ERXDCFG_FEOP | HPC3_ERXDCFG_FIRQ)
static int init_seeq(struct net_device *dev, struct sgiseeq_private *sp,
struct sgiseeq_regs *sregs)
static int init_seeq(struct net_device *dev, struct sgiseeq_private *sp,
struct sgiseeq_regs *sregs)
@@
-274,8
+272,6
@@
static int init_seeq(struct net_device *dev, struct sgiseeq_private *sp,
sregs->tstat = TSTAT_INIT_SEEQ;
}
sregs->tstat = TSTAT_INIT_SEEQ;
}
- hregs->rx_dconfig |= RDMACFG_INIT;
-
hregs->rx_ndptr = CPHYSADDR(sp->rx_desc);
hregs->tx_ndptr = CPHYSADDR(sp->tx_desc);
hregs->rx_ndptr = CPHYSADDR(sp->rx_desc);
hregs->tx_ndptr = CPHYSADDR(sp->tx_desc);
@@
-316,9
+312,9
@@
static inline void sgiseeq_rx(struct net_device *dev, struct sgiseeq_private *sp
struct sgiseeq_regs *sregs)
{
struct sgiseeq_rx_desc *rd;
struct sgiseeq_regs *sregs)
{
struct sgiseeq_rx_desc *rd;
- struct sk_buff *skb =
0
;
+ struct sk_buff *skb =
NULL
;
unsigned char pkt_status;
unsigned char pkt_status;
- unsigned char *pkt_pointer =
0
;
+ unsigned char *pkt_pointer =
NULL
;
int len = 0;
unsigned int orig_end = PREV_RX(sp->rx_new);
int len = 0;
unsigned int orig_end = PREV_RX(sp->rx_new);
@@
-436,7
+432,7
@@
static inline void sgiseeq_tx(struct net_device *dev, struct sgiseeq_private *sp
}
}
}
}
-static irqreturn_t sgiseeq_interrupt(int irq, void *dev_id
, struct pt_regs *regs
)
+static irqreturn_t sgiseeq_interrupt(int irq, void *dev_id)
{
struct net_device *dev = (struct net_device *) dev_id;
struct sgiseeq_private *sp = netdev_priv(dev);
{
struct net_device *dev = (struct net_device *) dev_id;
struct sgiseeq_private *sp = netdev_priv(dev);
@@
-446,7
+442,7
@@
static irqreturn_t sgiseeq_interrupt(int irq, void *dev_id, struct pt_regs *regs
spin_lock(&sp->tx_lock);
/* Ack the IRQ and set software state. */
spin_lock(&sp->tx_lock);
/* Ack the IRQ and set software state. */
- hregs->r
x_reset = HPC3_ERX
RST_CLRIRQ;
+ hregs->r
eset = HPC3_E
RST_CLRIRQ;
/* Always check for received packets. */
sgiseeq_rx(dev, sp, hregs, sregs);
/* Always check for received packets. */
sgiseeq_rx(dev, sp, hregs, sregs);
@@
-493,11
+489,13
@@
static int sgiseeq_close(struct net_device *dev)
{
struct sgiseeq_private *sp = netdev_priv(dev);
struct sgiseeq_regs *sregs = sp->sregs;
{
struct sgiseeq_private *sp = netdev_priv(dev);
struct sgiseeq_regs *sregs = sp->sregs;
+ unsigned int irq = dev->irq;
netif_stop_queue(dev);
/* Shutdown the Seeq. */
reset_hpc3_and_seeq(sp->hregs, sregs);
netif_stop_queue(dev);
/* Shutdown the Seeq. */
reset_hpc3_and_seeq(sp->hregs, sregs);
+ free_irq(irq, dev);
return 0;
}
return 0;
}
@@
-518,12
+516,6
@@
static inline int sgiseeq_reset(struct net_device *dev)
return 0;
}
return 0;
}
-void sgiseeq_my_reset(void)
-{
- printk("RESET!\n");
- sgiseeq_reset(gdev);
-}
-
static int sgiseeq_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct sgiseeq_private *sp = netdev_priv(dev);
static int sgiseeq_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct sgiseeq_private *sp = netdev_priv(dev);
@@
-644,7
+636,7
@@
static inline void setup_rx_ring(struct sgiseeq_rx_desc *buf, int nbufs)
#define ALIGNED(x) ((((unsigned long)(x)) + 0xf) & ~(0xf))
#define ALIGNED(x) ((((unsigned long)(x)) + 0xf) & ~(0xf))
-static int sgiseeq_init(struct hpc3_regs* regs, int irq)
+static int sgiseeq_init(struct hpc3_regs*
hpc
regs, int irq)
{
struct sgiseeq_init_block *sr;
struct sgiseeq_private *sp;
{
struct sgiseeq_init_block *sr;
struct sgiseeq_private *sp;
@@
-680,8
+672,8
@@
static int sgiseeq_init(struct hpc3_regs* regs, int irq)
gpriv = sp;
gdev = dev;
#endif
gpriv = sp;
gdev = dev;
#endif
- sp->sregs = (struct sgiseeq_regs *) &hpc
3c0
->eth_ext[0];
- sp->hregs = &hpc
3c0
->ethregs;
+ sp->sregs = (struct sgiseeq_regs *) &hpc
regs
->eth_ext[0];
+ sp->hregs = &hpc
regs
->ethregs;
sp->name = sgiseeqstr;
sp->mode = SEEQ_RCMD_RBCAST;
sp->name = sgiseeqstr;
sp->mode = SEEQ_RCMD_RBCAST;
@@
-698,6
+690,11
@@
static int sgiseeq_init(struct hpc3_regs* regs, int irq)
setup_rx_ring(sp->rx_desc, SEEQ_RX_BUFFERS);
setup_tx_ring(sp->tx_desc, SEEQ_TX_BUFFERS);
setup_rx_ring(sp->rx_desc, SEEQ_RX_BUFFERS);
setup_tx_ring(sp->tx_desc, SEEQ_TX_BUFFERS);
+ /* Setup PIO and DMA transfer timing */
+ sp->hregs->pconfig = 0x161;
+ sp->hregs->dconfig = HPC3_EDCFG_FIRQ | HPC3_EDCFG_FEOP |
+ HPC3_EDCFG_FRXDC | HPC3_EDCFG_PTO | 0x026;
+
/* Reset the chip. */
hpc3_eth_reset(sp->hregs);
/* Reset the chip. */
hpc3_eth_reset(sp->hregs);
@@
-724,7
+721,7
@@
static int sgiseeq_init(struct hpc3_regs* regs, int irq)
goto err_out_free_page;
}
goto err_out_free_page;
}
- printk(KERN_INFO "%s:
SGI Seeq8003 ", dev->name
);
+ printk(KERN_INFO "%s:
%s ", dev->name, sgiseeqstr
);
for (i = 0; i < 6; i++)
printk("%2.2x%c", dev->dev_addr[i], i == 5 ? '\n' : ':');
for (i = 0; i < 6; i++)
printk("%2.2x%c", dev->dev_addr[i], i == 5 ? '\n' : ':');
@@
-734,7
+731,7
@@
static int sgiseeq_init(struct hpc3_regs* regs, int irq)
return 0;
err_out_free_page:
return 0;
err_out_free_page:
- free_page((unsigned long) sp);
+ free_page((unsigned long) sp
->srings
);
err_out_free_dev:
kfree(dev);
err_out_free_dev:
kfree(dev);
@@
-744,8
+741,6
@@
err_out:
static int __init sgiseeq_probe(void)
{
static int __init sgiseeq_probe(void)
{
- printk(version);
-
/* On board adapter on 1st HPC is always present */
return sgiseeq_init(hpc3c0, SGI_ENET_IRQ);
}
/* On board adapter on 1st HPC is always present */
return sgiseeq_init(hpc3c0, SGI_ENET_IRQ);
}
@@
-754,15
+749,12
@@
static void __exit sgiseeq_exit(void)
{
struct net_device *next, *dev;
struct sgiseeq_private *sp;
{
struct net_device *next, *dev;
struct sgiseeq_private *sp;
- int irq;
for (dev = root_sgiseeq_dev; dev; dev = next) {
sp = (struct sgiseeq_private *) netdev_priv(dev);
next = sp->next_module;
for (dev = root_sgiseeq_dev; dev; dev = next) {
sp = (struct sgiseeq_private *) netdev_priv(dev);
next = sp->next_module;
- irq = dev->irq;
unregister_netdev(dev);
unregister_netdev(dev);
- free_irq(irq, dev);
- free_page((unsigned long) sp);
+ free_page((unsigned long) sp->srings);
free_netdev(dev);
}
}
free_netdev(dev);
}
}
@@
-770,4
+762,6
@@
static void __exit sgiseeq_exit(void)
module_init(sgiseeq_probe);
module_exit(sgiseeq_exit);
module_init(sgiseeq_probe);
module_exit(sgiseeq_exit);
+MODULE_DESCRIPTION("SGI Seeq 8003 driver");
+MODULE_AUTHOR("Linux/MIPS Mailing List <linux-mips@linux-mips.org>");
MODULE_LICENSE("GPL");
MODULE_LICENSE("GPL");