xref: /openbmc/linux/include/linux/if_rmnet.h (revision 5f10376b)
19395da4eSSubash Abhinov Kasiviswanathan /* SPDX-License-Identifier: GPL-2.0-only
2e1d9a90aSSharath Chandra Vurukala  * Copyright (c) 2013-2019, 2021 The Linux Foundation. All rights reserved.
39395da4eSSubash Abhinov Kasiviswanathan  */
49395da4eSSubash Abhinov Kasiviswanathan 
59395da4eSSubash Abhinov Kasiviswanathan #ifndef _LINUX_IF_RMNET_H_
69395da4eSSubash Abhinov Kasiviswanathan #define _LINUX_IF_RMNET_H_
79395da4eSSubash Abhinov Kasiviswanathan 
8*5f10376bSJakub Kicinski #include <linux/types.h>
9*5f10376bSJakub Kicinski 
109395da4eSSubash Abhinov Kasiviswanathan struct rmnet_map_header {
1116653c16SAlex Elder 	u8 flags;			/* MAP_CMD_FLAG, MAP_PAD_LEN_MASK */
129395da4eSSubash Abhinov Kasiviswanathan 	u8 mux_id;
1316653c16SAlex Elder 	__be16 pkt_len;			/* Length of packet, including pad */
149395da4eSSubash Abhinov Kasiviswanathan }  __aligned(1);
159395da4eSSubash Abhinov Kasiviswanathan 
1616653c16SAlex Elder /* rmnet_map_header flags field:
1716653c16SAlex Elder  *  PAD_LEN:	  number of pad bytes following packet data
1816653c16SAlex Elder  *  CMD:	  1 = packet contains a MAP command; 0 = packet contains data
19e1d9a90aSSharath Chandra Vurukala  *  NEXT_HEADER: 1 = packet contains V5 CSUM header 0 = no V5 CSUM header
2016653c16SAlex Elder  */
2116653c16SAlex Elder #define MAP_PAD_LEN_MASK		GENMASK(5, 0)
22e1d9a90aSSharath Chandra Vurukala #define MAP_NEXT_HEADER_FLAG		BIT(6)
2316653c16SAlex Elder #define MAP_CMD_FLAG			BIT(7)
2416653c16SAlex Elder 
259395da4eSSubash Abhinov Kasiviswanathan struct rmnet_map_dl_csum_trailer {
269395da4eSSubash Abhinov Kasiviswanathan 	u8 reserved1;
27cc1b21baSAlex Elder 	u8 flags;			/* MAP_CSUM_DL_VALID_FLAG */
2845f3a13cSAlex Elder 	__be16 csum_start_offset;
2945f3a13cSAlex Elder 	__be16 csum_length;
30be754f64SAlex Elder 	__sum16 csum_value;
319395da4eSSubash Abhinov Kasiviswanathan } __aligned(1);
329395da4eSSubash Abhinov Kasiviswanathan 
33cc1b21baSAlex Elder /* rmnet_map_dl_csum_trailer flags field:
34cc1b21baSAlex Elder  *  VALID:	1 = checksum and length valid; 0 = ignore them
35cc1b21baSAlex Elder  */
36cc1b21baSAlex Elder #define MAP_CSUM_DL_VALID_FLAG		BIT(0)
37cc1b21baSAlex Elder 
389395da4eSSubash Abhinov Kasiviswanathan struct rmnet_map_ul_csum_header {
399395da4eSSubash Abhinov Kasiviswanathan 	__be16 csum_start_offset;
4086ca860eSAlex Elder 	__be16 csum_info;		/* MAP_CSUM_UL_* */
419395da4eSSubash Abhinov Kasiviswanathan } __aligned(1);
429395da4eSSubash Abhinov Kasiviswanathan 
4386ca860eSAlex Elder /* csum_info field:
4486ca860eSAlex Elder  *  OFFSET:	where (offset in bytes) to insert computed checksum
4586ca860eSAlex Elder  *  UDP:	1 = UDP checksum (zero checkum means no checksum)
4686ca860eSAlex Elder  *  ENABLED:	1 = checksum computation requested
4786ca860eSAlex Elder  */
4886ca860eSAlex Elder #define MAP_CSUM_UL_OFFSET_MASK		GENMASK(13, 0)
4986ca860eSAlex Elder #define MAP_CSUM_UL_UDP_FLAG		BIT(14)
5086ca860eSAlex Elder #define MAP_CSUM_UL_ENABLED_FLAG	BIT(15)
5186ca860eSAlex Elder 
52e1d9a90aSSharath Chandra Vurukala /* MAP CSUM headers */
53e1d9a90aSSharath Chandra Vurukala struct rmnet_map_v5_csum_header {
54e1d9a90aSSharath Chandra Vurukala 	u8 header_info;
55e1d9a90aSSharath Chandra Vurukala 	u8 csum_info;
56e1d9a90aSSharath Chandra Vurukala 	__be16 reserved;
57e1d9a90aSSharath Chandra Vurukala } __aligned(1);
58e1d9a90aSSharath Chandra Vurukala 
59e1d9a90aSSharath Chandra Vurukala /* v5 header_info field
60e1d9a90aSSharath Chandra Vurukala  * NEXT_HEADER: represents whether there is any next header
61e1d9a90aSSharath Chandra Vurukala  * HEADER_TYPE: represents the type of this header
62e1d9a90aSSharath Chandra Vurukala  *
63e1d9a90aSSharath Chandra Vurukala  * csum_info field
64e1d9a90aSSharath Chandra Vurukala  * CSUM_VALID_OR_REQ:
65e1d9a90aSSharath Chandra Vurukala  * 1 = for UL, checksum computation is requested.
66e1d9a90aSSharath Chandra Vurukala  * 1 = for DL, validated the checksum and has found it valid
67e1d9a90aSSharath Chandra Vurukala  */
68e1d9a90aSSharath Chandra Vurukala 
69e1d9a90aSSharath Chandra Vurukala #define MAPV5_HDRINFO_NXT_HDR_FLAG	BIT(0)
70e1d9a90aSSharath Chandra Vurukala #define MAPV5_HDRINFO_HDR_TYPE_FMASK	GENMASK(7, 1)
71e1d9a90aSSharath Chandra Vurukala #define MAPV5_CSUMINFO_VALID_FLAG	BIT(7)
72e1d9a90aSSharath Chandra Vurukala 
73e1d9a90aSSharath Chandra Vurukala #define RMNET_MAP_HEADER_TYPE_CSUM_OFFLOAD 2
749395da4eSSubash Abhinov Kasiviswanathan #endif /* !(_LINUX_IF_RMNET_H_) */
75