common/dpaax/caamflib: support PDCP-SDAP
authorFranck Lenormand <franck.lenormand@nxp.com>
Mon, 12 Oct 2020 14:09:59 +0000 (19:39 +0530)
committerAkhil Goyal <akhil.goyal@nxp.com>
Wed, 14 Oct 2020 20:24:41 +0000 (22:24 +0200)
commit3ba2e519eafaa0cf90ec209aaccfa47d8913b3ec
tree74966252a4952ffc9b9aab4dd6207ec21a8d72fb
parent3a6f835b33eeb6defeb29a22ca393097101cccc7
common/dpaax/caamflib: support PDCP-SDAP

The SDAP is a protocol in the LTE stack on top of PDCP. It is
dedicated to QoS.

The difficulty of implementing this protocol is because the
PDCP change behavior regarding encryption and authentication
of the SDU it receives. In effect PDCP shall not encrypt the
SDAP SDU but must authenticate it (when encryption and
authentication is enabled).

The current version of SEC does not support the SDAP and the
change of behavior of PDCP prevent the use of the PDCP
protocol command available.

The way to do it is to reuse the PDCP implementation but to
not use the PDCP protocol and to have descriptors which
performs the PDCP protocol.

It is implemented by doing small changes of code:
        #ifdef SDAP_SUPPORT
                length += SDAP_BYTE_SIZE;
                offset -= SDAP_BYTE_SIZE;
        #endif
after having computed the size of the SN to read from the
input data, then
        #ifdef SDAP_SUPPORT
                MATHI(p, MATH0, LSHIFT, 8, MATH1, 8, 0);
                MATHB(p, MATH1, AND, sn_mask, MATH1, 8, IFB | IMMED2);
        #else
                MATHB(p, MATH0, AND, sn_mask, MATH1, 8, IFB | IMMED2);
        #endif
It will keep the SN and the SDAP header in MATH0, then shift
it to remove the SDAP header and store the result in MATH1.

Signed-off-by: Franck Lenormand <franck.lenormand@nxp.com>
Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com>
drivers/common/dpaax/caamflib/desc/pdcp.h
drivers/common/dpaax/caamflib/desc/sdap.h [new file with mode: 0644]