Merge branch 'x86-hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[firefly-linux-kernel-4.4.55.git] / net / caif / cfdgml.c
index 53194840ecb6cc8464b7a5cba4258dd27f0c6415..ed9d53aff28053e5dd98bbaf9eb1ad8d3bb6b591 100644 (file)
@@ -17,6 +17,7 @@
 #define DGM_FLOW_OFF 0x81
 #define DGM_FLOW_ON  0x80
 #define DGM_CTRL_PKT_SIZE 1
+#define DGM_MTU 1500
 
 static int cfdgml_receive(struct cflayer *layr, struct cfpkt *pkt);
 static int cfdgml_transmit(struct cflayer *layr, struct cfpkt *pkt);
@@ -30,7 +31,7 @@ struct cflayer *cfdgml_create(u8 channel_id, struct dev_info *dev_info)
        }
        caif_assert(offsetof(struct cfsrvl, layer) == 0);
        memset(dgm, 0, sizeof(struct cfsrvl));
-       cfsrvl_init(dgm, channel_id, dev_info);
+       cfsrvl_init(dgm, channel_id, dev_info, true);
        dgm->layer.receive = cfdgml_receive;
        dgm->layer.transmit = cfdgml_transmit;
        snprintf(dgm->layer.name, CAIF_LAYER_NAME_SZ - 1, "dgm%d", channel_id);
@@ -89,6 +90,10 @@ static int cfdgml_transmit(struct cflayer *layr, struct cfpkt *pkt)
        if (!cfsrvl_ready(service, &ret))
                return ret;
 
+       /* STE Modem cannot handle more than 1500 bytes datagrams */
+       if (cfpkt_getlen(pkt) > DGM_MTU)
+               return -EMSGSIZE;
+
        cfpkt_add_head(pkt, &zero, 4);
 
        /* Add info for MUX-layer to route the packet out. */