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
Merge to kernel-2.6.20-1.2949.fc6.vs2.2.0.1
[linux-2.6.git]
/
drivers
/
net
/
plip.c
diff --git
a/drivers/net/plip.c
b/drivers/net/plip.c
index
87ee327
..
6bb085f
100644
(file)
--- a/
drivers/net/plip.c
+++ b/
drivers/net/plip.c
@@
-16,7
+16,7
@@
* parport-sharing awareness code by Philip Blundell.
* SMP locking by Niibe Yutaka.
* Support for parallel ports with no IRQ (poll mode),
* parport-sharing awareness code by Philip Blundell.
* SMP locking by Niibe Yutaka.
* Support for parallel ports with no IRQ (poll mode),
- * Modifications to use the parallel port API
+ * Modifications to use the parallel port API
* by Nimrod Zimerman.
*
* Fixes:
* by Nimrod Zimerman.
*
* Fixes:
@@
-123,7
+123,7
@@
static const char version[] = "NET3 PLIP version 2.4-parport gniibe@mri.co.jp\n"
#ifndef NET_DEBUG
#define NET_DEBUG 1
#endif
#ifndef NET_DEBUG
#define NET_DEBUG 1
#endif
-static unsigned int net_debug = NET_DEBUG;
+static
const
unsigned int net_debug = NET_DEBUG;
#define ENABLE(irq) if (irq != -1) enable_irq(irq)
#define DISABLE(irq) if (irq != -1) disable_irq(irq)
#define ENABLE(irq) if (irq != -1) enable_irq(irq)
#define DISABLE(irq) if (irq != -1) disable_irq(irq)
@@
-138,12
+138,12
@@
static unsigned int net_debug = NET_DEBUG;
#define PLIP_NIBBLE_WAIT 3000
/* Bottom halves */
#define PLIP_NIBBLE_WAIT 3000
/* Bottom halves */
-static void plip_kick_bh(struct
net_device *dev
);
-static void plip_bh(struct
net_device *dev
);
-static void plip_timer_bh(struct
net_device *dev
);
+static void plip_kick_bh(struct
work_struct *work
);
+static void plip_bh(struct
work_struct *work
);
+static void plip_timer_bh(struct
work_struct *work
);
/* Interrupt handler */
/* Interrupt handler */
-static void plip_interrupt(int irq, void *dev_id
, struct pt_regs *regs
);
+static void plip_interrupt(int irq, void *dev_id);
/* Functions for DEV methods */
static int plip_tx_packet(struct sk_buff *skb, struct net_device *dev);
/* Functions for DEV methods */
static int plip_tx_packet(struct sk_buff *skb, struct net_device *dev);
@@
-207,9
+207,10
@@
struct plip_local {
struct net_local {
struct net_device_stats enet_stats;
struct net_local {
struct net_device_stats enet_stats;
+ struct net_device *dev;
struct work_struct immediate;
struct work_struct immediate;
- struct
work_struct
deferred;
- struct
work_struct
timer;
+ struct
delayed_work
deferred;
+ struct
delayed_work
timer;
struct plip_local snd_data;
struct plip_local rcv_data;
struct pardevice *pardev;
struct plip_local snd_data;
struct plip_local rcv_data;
struct pardevice *pardev;
@@
-306,11
+307,11
@@
plip_init_netdev(struct net_device *dev)
nl->nibble = PLIP_NIBBLE_WAIT;
/* Initialize task queue structures */
nl->nibble = PLIP_NIBBLE_WAIT;
/* Initialize task queue structures */
- INIT_WORK(&nl->immediate,
(void (*)(void *))plip_bh, dev
);
- INIT_
WORK(&nl->deferred, (void (*)(void *))plip_kick_bh, dev
);
+ INIT_WORK(&nl->immediate,
plip_bh
);
+ INIT_
DELAYED_WORK(&nl->deferred, plip_kick_bh
);
if (dev->irq == -1)
if (dev->irq == -1)
- INIT_
WORK(&nl->timer, (void (*)(void *))plip_timer_bh, dev
);
+ INIT_
DELAYED_WORK(&nl->timer, plip_timer_bh
);
spin_lock_init(&nl->lock);
}
spin_lock_init(&nl->lock);
}
@@
-319,9
+320,10
@@
plip_init_netdev(struct net_device *dev)
This routine is kicked by do_timer().
Request `plip_bh' to be invoked. */
static void
This routine is kicked by do_timer().
Request `plip_bh' to be invoked. */
static void
-plip_kick_bh(struct
net_device *dev
)
+plip_kick_bh(struct
work_struct *work
)
{
{
- struct net_local *nl = netdev_priv(dev);
+ struct net_local *nl =
+ container_of(work, struct net_local, deferred.work);
if (nl->is_deferred)
schedule_work(&nl->immediate);
if (nl->is_deferred)
schedule_work(&nl->immediate);
@@
-351,7
+353,7
@@
static int plip_bh_timeout_error(struct net_device *dev, struct net_local *nl,
typedef int (*plip_func)(struct net_device *dev, struct net_local *nl,
struct plip_local *snd, struct plip_local *rcv);
typedef int (*plip_func)(struct net_device *dev, struct net_local *nl,
struct plip_local *snd, struct plip_local *rcv);
-static plip_func connection_state_table[] =
+static
const
plip_func connection_state_table[] =
{
plip_none,
plip_receive_packet,
{
plip_none,
plip_receive_packet,
@@
-362,9
+364,9
@@
static plip_func connection_state_table[] =
/* Bottom half handler of PLIP. */
static void
/* Bottom half handler of PLIP. */
static void
-plip_bh(struct
net_device *dev
)
+plip_bh(struct
work_struct *work
)
{
{
- struct net_local *nl =
netdev_priv(dev
);
+ struct net_local *nl =
container_of(work, struct net_local, immediate
);
struct plip_local *snd = &nl->snd_data;
struct plip_local *rcv = &nl->rcv_data;
plip_func f;
struct plip_local *snd = &nl->snd_data;
struct plip_local *rcv = &nl->rcv_data;
plip_func f;
@@
-372,20
+374,21
@@
plip_bh(struct net_device *dev)
nl->is_deferred = 0;
f = connection_state_table[nl->connection];
nl->is_deferred = 0;
f = connection_state_table[nl->connection];
- if ((r = (*f)(dev, nl, snd, rcv)) != OK
- && (r = plip_bh_timeout_error(dev, nl, snd, rcv, r)) != OK) {
+ if ((r = (*f)(
nl->
dev, nl, snd, rcv)) != OK
+ && (r = plip_bh_timeout_error(
nl->
dev, nl, snd, rcv, r)) != OK) {
nl->is_deferred = 1;
schedule_delayed_work(&nl->deferred, 1);
}
}
static void
nl->is_deferred = 1;
schedule_delayed_work(&nl->deferred, 1);
}
}
static void
-plip_timer_bh(struct
net_device *dev
)
+plip_timer_bh(struct
work_struct *work
)
{
{
- struct net_local *nl = netdev_priv(dev);
-
+ struct net_local *nl =
+ container_of(work, struct net_local, timer.work);
+
if (!(atomic_read (&nl->kill_timer))) {
if (!(atomic_read (&nl->kill_timer))) {
- plip_interrupt (-1,
dev, NULL
);
+ plip_interrupt (-1,
nl->dev
);
schedule_delayed_work(&nl->timer, 1);
}
schedule_delayed_work(&nl->timer, 1);
}
@@
-527,7
+530,7
@@
plip_receive(unsigned short nibble_timeout, struct net_device *dev,
}
/*
}
/*
- * Determine the packet's protocol ID. The rule here is that we
+ * Determine the packet's protocol ID. The rule here is that we
* assume 802.3 if the type field is short enough to be a length.
* This is normal practice and works for any 'now in use' protocol.
*
* assume 802.3 if the type field is short enough to be a length.
* This is normal practice and works for any 'now in use' protocol.
*
@@
-537,16
+540,16
@@
plip_receive(unsigned short nibble_timeout, struct net_device *dev,
* We can't fix the daddr thing as that quirk (more bug) is embedded
* in far too many old systems not all even running Linux.
*/
* We can't fix the daddr thing as that quirk (more bug) is embedded
* in far too many old systems not all even running Linux.
*/
-
+
static __be16 plip_type_trans(struct sk_buff *skb, struct net_device *dev)
{
struct ethhdr *eth;
unsigned char *rawp;
static __be16 plip_type_trans(struct sk_buff *skb, struct net_device *dev)
{
struct ethhdr *eth;
unsigned char *rawp;
-
+
skb->mac.raw=skb->data;
skb_pull(skb,dev->hard_header_len);
eth = eth_hdr(skb);
skb->mac.raw=skb->data;
skb_pull(skb,dev->hard_header_len);
eth = eth_hdr(skb);
-
+
if(*eth->h_dest&1)
{
if(memcmp(eth->h_dest,dev->broadcast, ETH_ALEN)==0)
if(*eth->h_dest&1)
{
if(memcmp(eth->h_dest,dev->broadcast, ETH_ALEN)==0)
@@
-554,17
+557,17
@@
static __be16 plip_type_trans(struct sk_buff *skb, struct net_device *dev)
else
skb->pkt_type=PACKET_MULTICAST;
}
else
skb->pkt_type=PACKET_MULTICAST;
}
-
+
/*
* This ALLMULTI check should be redundant by 1.4
* so don't forget to remove it.
*/
/*
* This ALLMULTI check should be redundant by 1.4
* so don't forget to remove it.
*/
-
+
if (ntohs(eth->h_proto) >= 1536)
return eth->h_proto;
if (ntohs(eth->h_proto) >= 1536)
return eth->h_proto;
-
+
rawp = skb->data;
rawp = skb->data;
-
+
/*
* This is a magic hack to spot IPX packets. Older Novell breaks
* the protocol design and runs IPX over 802.3 without an 802.2 LLC
/*
* This is a magic hack to spot IPX packets. Older Novell breaks
* the protocol design and runs IPX over 802.3 without an 802.2 LLC
@@
-573,7
+576,7
@@
static __be16 plip_type_trans(struct sk_buff *skb, struct net_device *dev)
*/
if (*(unsigned short *)rawp == 0xFFFF)
return htons(ETH_P_802_3);
*/
if (*(unsigned short *)rawp == 0xFFFF)
return htons(ETH_P_802_3);
-
+
/*
* Real 802.2 LLC
*/
/*
* Real 802.2 LLC
*/
@@
-902,18
+905,13
@@
plip_error(struct net_device *dev, struct net_local *nl,
/* Handle the parallel port interrupts. */
static void
/* Handle the parallel port interrupts. */
static void
-plip_interrupt(int irq, void *dev_id
, struct pt_regs * regs
)
+plip_interrupt(int irq, void *dev_id)
{
struct net_device *dev = dev_id;
struct net_local *nl;
struct plip_local *rcv;
unsigned char c0;
{
struct net_device *dev = dev_id;
struct net_local *nl;
struct plip_local *rcv;
unsigned char c0;
- if (dev == NULL) {
- printk(KERN_DEBUG "plip_interrupt: irq %d for unknown device.\n", irq);
- return;
- }
-
nl = netdev_priv(dev);
rcv = &nl->rcv_data;
nl = netdev_priv(dev);
rcv = &nl->rcv_data;
@@
-972,7
+970,7
@@
plip_tx_packet(struct sk_buff *skb, struct net_device *dev)
}
netif_stop_queue (dev);
}
netif_stop_queue (dev);
-
+
if (skb->len > dev->mtu + dev->hard_header_len) {
printk(KERN_WARNING "%s: packet too big, %d.\n", dev->name, (int)skb->len);
netif_start_queue (dev);
if (skb->len > dev->mtu + dev->hard_header_len) {
printk(KERN_WARNING "%s: packet too big, %d.\n", dev->name, (int)skb->len);
netif_start_queue (dev);
@@
-993,7
+991,7
@@
plip_tx_packet(struct sk_buff *skb, struct net_device *dev)
}
schedule_work(&nl->immediate);
spin_unlock_irq(&nl->lock);
}
schedule_work(&nl->immediate);
spin_unlock_irq(&nl->lock);
-
+
return 0;
}
return 0;
}
@@
-1032,7
+1030,7
@@
int plip_hard_header_cache(struct neighbour *neigh,
{
struct net_local *nl = neigh->dev->priv;
int ret;
{
struct net_local *nl = neigh->dev->priv;
int ret;
-
+
if ((ret = nl->orig_hard_header_cache(neigh, hh)) == 0)
{
struct ethhdr *eth;
if ((ret = nl->orig_hard_header_cache(neigh, hh)) == 0)
{
struct ethhdr *eth;
@@
-1041,9
+1039,9
@@
int plip_hard_header_cache(struct neighbour *neigh,
HH_DATA_OFF(sizeof(*eth)));
plip_rewrite_address (neigh->dev, eth);
}
HH_DATA_OFF(sizeof(*eth)));
plip_rewrite_address (neigh->dev, eth);
}
-
+
return ret;
return ret;
-}
+}
/* Open/initialize the board. This is called (in the current kernel)
sometime after booting when the 'ifconfig' program is run.
/* Open/initialize the board. This is called (in the current kernel)
sometime after booting when the 'ifconfig' program is run.
@@
-1187,7
+1185,7
@@
plip_wakeup(void *handle)
else
return;
}
else
return;
}
-
+
if (!(dev->flags & IFF_UP))
/* Don't need the port when the interface is down */
return;
if (!(dev->flags & IFF_UP))
/* Don't need the port when the interface is down */
return;
@@
-1264,7
+1262,7
@@
static void plip_attach (struct parport *port)
struct net_local *nl;
char name[IFNAMSIZ];
struct net_local *nl;
char name[IFNAMSIZ];
- if ((parport[0] == -1 && (!timid || !port->devices)) ||
+ if ((parport[0] == -1 && (!timid || !port->devices)) ||
plip_searchfor(parport, port->number)) {
if (unit == PLIP_MAX) {
printk(KERN_ERR "plip: too many devices\n");
plip_searchfor(parport, port->number)) {
if (unit == PLIP_MAX) {
printk(KERN_ERR "plip: too many devices\n");
@@
-1277,7
+1275,7
@@
static void plip_attach (struct parport *port)
printk(KERN_ERR "plip: memory squeeze\n");
return;
}
printk(KERN_ERR "plip: memory squeeze\n");
return;
}
-
+
strcpy(dev->name, name);
SET_MODULE_OWNER(dev);
strcpy(dev->name, name);
SET_MODULE_OWNER(dev);
@@
-1289,8
+1287,9
@@
static void plip_attach (struct parport *port)
}
nl = netdev_priv(dev);
}
nl = netdev_priv(dev);
+ nl->dev = dev;
nl->pardev = parport_register_device(port, name, plip_preempt,
nl->pardev = parport_register_device(port, name, plip_preempt,
- plip_wakeup, plip_interrupt,
+ plip_wakeup, plip_interrupt,
0, dev);
if (!nl->pardev) {
0, dev);
if (!nl->pardev) {
@@
-1384,7
+1383,7
@@
static int __init plip_setup(char *str)
/* disable driver on "plip=" or "plip=0" */
parport[0] = -2;
} else {
/* disable driver on "plip=" or "plip=0" */
parport[0] = -2;
} else {
- printk(KERN_WARNING "warning: 'plip=0x%x' ignored\n",
+ printk(KERN_WARNING "warning: 'plip=0x%x' ignored\n",
ints[1]);
}
}
ints[1]);
}
}