headers: remove sched.h from interrupt.h
[safe/jmp/linux-2.6] / drivers / isdn / pcbit / layer2.c
index 937fd21..30f0f45 100644 (file)
  *              re-write/remove debug printks
  */
 
-#include <linux/sched.h>
 #include <linux/string.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
+#include <linux/sched.h>
 #include <linux/slab.h>
 #include <linux/interrupt.h>
 #include <linux/workqueue.h>
 #undef DEBUG_FRAG
 
 
-
-/*
- *  task queue struct
- */
-
-
-
-/*
- *  Layer 3 packet demultiplexer
- *  drv.c
- */
-
-extern void pcbit_l3_receive(struct pcbit_dev *dev, ulong msg,
-                            struct sk_buff *skb,
-                            ushort hdr_len, ushort refnum);
-
 /*
  *  Prototypes
  */
 
-void pcbit_deliver(void *data);
 static void pcbit_transmit(struct pcbit_dev *dev);
 
 static void pcbit_recv_ack(struct pcbit_dev *dev, unsigned char ack);
@@ -101,7 +84,7 @@ pcbit_l2_write(struct pcbit_dev *dev, ulong msg, ushort refnum,
                dev_kfree_skb(skb);
                return -1;
        }
-       if ((frame = (struct frame_buf *) kmalloc(sizeof(struct frame_buf),
+       if ((frame = kmalloc(sizeof(struct frame_buf),
                                                  GFP_ATOMIC)) == NULL) {
                printk(KERN_WARNING "pcbit_2_write: kmalloc failed\n");
                dev_kfree_skb(skb);
@@ -299,11 +282,12 @@ pcbit_transmit(struct pcbit_dev *dev)
  */
 
 void
-pcbit_deliver(void *data)
+pcbit_deliver(struct work_struct *work)
 {
        struct frame_buf *frame;
        unsigned long flags, msg;
-       struct pcbit_dev *dev = (struct pcbit_dev *) data;
+       struct pcbit_dev *dev =
+               container_of(work, struct pcbit_dev, qdelivery);
 
        spin_lock_irqsave(&dev->lock, flags);
 
@@ -364,18 +348,16 @@ pcbit_receive(struct pcbit_dev *dev)
                if (dev->read_frame) {
                        printk(KERN_DEBUG "pcbit_receive: Type 0 frame and read_frame != NULL\n");
                        /* discard previous queued frame */
-                       if (dev->read_frame->skb)
-                               kfree_skb(dev->read_frame->skb);
+                       kfree_skb(dev->read_frame->skb);
                        kfree(dev->read_frame);
                        dev->read_frame = NULL;
                }
-               frame = kmalloc(sizeof(struct frame_buf), GFP_ATOMIC);
+               frame = kzalloc(sizeof(struct frame_buf), GFP_ATOMIC);
 
                if (frame == NULL) {
                        printk(KERN_WARNING "kmalloc failed\n");
                        return;
                }
-               memset(frame, 0, sizeof(struct frame_buf));
 
                cpu = pcbit_readb(dev);
                proc = pcbit_readb(dev);
@@ -619,8 +601,7 @@ pcbit_l2_err_recover(unsigned long data)
        dev->w_busy = dev->r_busy = 1;
 
        if (dev->read_frame) {
-               if (dev->read_frame->skb)
-                       kfree_skb(dev->read_frame->skb);
+               kfree_skb(dev->read_frame->skb);
                kfree(dev->read_frame);
                dev->read_frame = NULL;
        }