struct caif_payload_info;
 struct caif_packet_funcs;
 
-
 #define CAIF_LAYER_NAME_SZ 16
 
 /**
        }                                                       \
 } while (0)
 
-
 /**
  * enum caif_ctrlcmd - CAIF Stack Control Signaling sent in layer.ctrlcmd().
  *
  *    - All layers must use this structure. If embedding it, then place this
  *     structure first in the layer specific structure.
  *
- *    - Each layer should not depend on any others layer private data.
+ *    - Each layer should not depend on any others layer's private data.
  *
  *    - In order to send data upwards do
  *     layer->up->receive(layer->up, packet);
        struct list_head node;
 
        /*
-        *  receive() - Receive Function.
+        *  receive() - Receive Function (non-blocking).
         *  Contract: Each layer must implement a receive function passing the
         *  CAIF packets upwards in the stack.
         *      Packet handling rules:
-        *            - The CAIF packet (cfpkt) cannot be accessed after
-        *                   passing it to the next layer using up->receive().
+        *            - The CAIF packet (cfpkt) ownership is passed to the
+        *              called receive function. This means that the the
+        *              packet cannot be accessed after passing it to the
+        *              above layer using up->receive().
+        *
         *            - If parsing of the packet fails, the packet must be
-        *                   destroyed and -1 returned from the function.
+        *              destroyed and negative error code returned
+        *              from the function.
+        *              EXCEPTION: If the framing layer (cffrml) returns
+        *                      -EILSEQ, the packet is not freed.
+        *
         *            - If parsing succeeds (and above layers return OK) then
-        *                    the function must return a value > 0.
+        *                    the function must return a value >= 0.
         *
         *  Returns result < 0 indicates an error, 0 or positive value
         *           indicates success.
        int (*receive)(struct cflayer *layr, struct cfpkt *cfpkt);
 
        /*
-        *  transmit() - Transmit Function.
+        *  transmit() - Transmit Function (non-blocking).
         *  Contract: Each layer must implement a transmit function passing the
         *      CAIF packet downwards in the stack.
         *      Packet handling rules:
         *              cannot be accessed after passing it to the below
         *              layer using dn->transmit().
         *
-        *            - If transmit fails, however, the ownership is returned
-        *              to thecaller. The caller of "dn->transmit()" must
-        *              destroy or resend packet.
+        *            - Upon error the packet ownership is still passed on,
+        *              so the packet shall be freed where error is detected.
+        *              Callers of the transmit function shall not free packets,
+        *              but errors shall be returned.
         *
         *            - Return value less than zero means error, zero or
         *              greater than zero means OK.
         *
-        *       result < 0 indicates an error, 0 or positive value
-        *       indicate success.
+        *  Returns result < 0 indicates an error, 0 or positive value
+        *              indicates success.
         *
         *  @layr:      Pointer to the current layer the receive function
         *              isimplemented for (this pointer).
        int (*transmit) (struct cflayer *layr, struct cfpkt *cfpkt);
 
        /*
-        *  cttrlcmd() - Control Function upwards in CAIF Stack.
+        *  cttrlcmd() - Control Function upwards in CAIF Stack  (non-blocking).
         *  Used for signaling responses (CAIF_CTRLCMD_*_RSP)
         *  and asynchronous events from the modem  (CAIF_CTRLCMD_*_IND)
         *