net: Add a flow_cache_flush_deferred function
[linux-2.6.git] / net / caif / cfserl.c
index cb4325a..2715c84 100644 (file)
@@ -4,6 +4,8 @@
  * License terms: GNU General Public License (GPL) version 2
  */
 
+#define pr_fmt(fmt) KBUILD_MODNAME ":%s(): " fmt, __func__
+
 #include <linux/stddef.h>
 #include <linux/spinlock.h>
 #include <linux/slab.h>
@@ -14,7 +16,8 @@
 #define container_obj(layr) ((struct cfserl *) layr)
 
 #define CFSERL_STX 0x02
-#define CAIF_MINIUM_PACKET_SIZE 4
+#define SERIAL_MINIUM_PACKET_SIZE 4
+#define SERIAL_MAX_FRAMESIZE 4096
 struct cfserl {
        struct cflayer layer;
        struct cfpkt *incomplete_frm;
@@ -22,7 +25,6 @@ struct cfserl {
        spinlock_t sync;
        bool usestx;
 };
-#define STXLEN(layr) (layr->usestx ? 1 : 0)
 
 static int cfserl_receive(struct cflayer *layr, struct cfpkt *pkt);
 static int cfserl_transmit(struct cflayer *layr, struct cfpkt *pkt);
@@ -33,7 +35,7 @@ struct cflayer *cfserl_create(int type, int instance, bool use_stx)
 {
        struct cfserl *this = kmalloc(sizeof(struct cfserl), GFP_ATOMIC);
        if (!this) {
-               pr_warning("CAIF: %s(): Out of memory\n", __func__);
+               pr_warn("Out of memory\n");
                return NULL;
        }
        caif_assert(offsetof(struct cfserl, layer) == 0);
@@ -59,16 +61,18 @@ static int cfserl_receive(struct cflayer *l, struct cfpkt *newpkt)
        u8 stx = CFSERL_STX;
        int ret;
        u16 expectlen = 0;
+
        caif_assert(newpkt != NULL);
        spin_lock(&layr->sync);
 
        if (layr->incomplete_frm != NULL) {
-
                layr->incomplete_frm =
                    cfpkt_append(layr->incomplete_frm, newpkt, expectlen);
                pkt = layr->incomplete_frm;
-               if (pkt == NULL)
+               if (pkt == NULL) {
+                       spin_unlock(&layr->sync);
                        return -ENOMEM;
+               }
        } else {
                pkt = newpkt;
        }
@@ -117,8 +121,8 @@ static int cfserl_receive(struct cflayer *l, struct cfpkt *newpkt)
                /*
                 * Frame error handling
                 */
-               if (expectlen < CAIF_MINIUM_PACKET_SIZE
-                   || expectlen > CAIF_MAX_FRAMESIZE) {
+               if (expectlen < SERIAL_MINIUM_PACKET_SIZE
+                   || expectlen > SERIAL_MAX_FRAMESIZE) {
                        if (!layr->usestx) {
                                if (pkt != NULL)
                                        cfpkt_destroy(pkt);
@@ -175,15 +179,10 @@ static int cfserl_receive(struct cflayer *l, struct cfpkt *newpkt)
 static int cfserl_transmit(struct cflayer *layer, struct cfpkt *newpkt)
 {
        struct cfserl *layr = container_obj(layer);
-       int ret;
        u8 tmp8 = CFSERL_STX;
        if (layr->usestx)
                cfpkt_add_head(newpkt, &tmp8, 1);
-       ret = layer->dn->transmit(layer->dn, newpkt);
-       if (ret < 0)
-               cfpkt_extr_head(newpkt, &tmp8, 1);
-
-       return ret;
+       return layer->dn->transmit(layer->dn, newpkt);
 }
 
 static void cfserl_ctrlcmd(struct cflayer *layr, enum caif_ctrlcmd ctrl,