7 #define pr_fmt(fmt) KBUILD_MODNAME ":%s(): " fmt, __func__
9 #include <linux/stddef.h>
11 #include <linux/slab.h>
12 #include <asm/unaligned.h>
17 #define container_obj(layr) container_of(layr, struct cfrfml, serv.layer)
18 #define RFM_SEGMENTATION_BIT 0x01
19 #define RFM_HEAD_SIZE 7
21 static int cfrfml_receive(
struct cflayer *layr,
struct cfpkt *pkt);
22 static int cfrfml_transmit(
struct cflayer *layr,
struct cfpkt *pkt);
34 static void cfrfml_release(
struct cflayer *layer)
55 this->
serv.release = cfrfml_release;
56 this->
serv.layer.receive = cfrfml_receive;
57 this->
serv.layer.transmit = cfrfml_transmit;
68 return &this->
serv.layer;
71 static struct cfpkt *rfm_append(
struct cfrfml *rfml,
char *seghead,
97 static int cfrfml_receive(
struct cflayer *layr,
struct cfpkt *pkt)
109 spin_lock(&rfml->
sync);
130 tmppkt = rfm_append(rfml, seghead, pkt, &err);
150 tmppkt = rfm_append(rfml, seghead, pkt, &err);
167 err = rfml->
serv.layer.up->receive(rfml->
serv.layer.up, pkt);
180 pr_info(
"Connection error %d triggered on RFM link\n", err);
184 rfml->
serv.dev_info.id);
186 spin_unlock(&rfml->
sync);
196 static int cfrfml_transmit_segment(
struct cfrfml *rfml,
struct cfpkt *pkt)
210 return rfml->
serv.layer.dn->transmit(rfml->
serv.layer.dn, pkt);
213 static int cfrfml_transmit(
struct cflayer *layr,
struct cfpkt *pkt)
219 struct cfpkt *frontpkt = pkt;
257 err = cfrfml_transmit_segment(rfml, frontpkt);
268 if (frontpkt ==
NULL)
282 err = cfrfml_transmit_segment(rfml, frontpkt);
288 pr_info(
"Connection error %d triggered on RFM link\n", err);
292 rfml->
serv.dev_info.id);