xref: /openbmc/linux/Documentation/networking/device_drivers/cellular/qualcomm/rmnet.rst (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
1132db935SJakub Kicinski.. SPDX-License-Identifier: GPL-2.0
2132db935SJakub Kicinski
3132db935SJakub Kicinski============
4132db935SJakub KicinskiRmnet Driver
5132db935SJakub Kicinski============
6132db935SJakub Kicinski
7132db935SJakub Kicinski1. Introduction
8132db935SJakub Kicinski===============
9132db935SJakub Kicinski
10132db935SJakub Kicinskirmnet driver is used for supporting the Multiplexing and aggregation
11132db935SJakub KicinskiProtocol (MAP). This protocol is used by all recent chipsets using Qualcomm
12132db935SJakub KicinskiTechnologies, Inc. modems.
13132db935SJakub Kicinski
14132db935SJakub KicinskiThis driver can be used to register onto any physical network device in
15132db935SJakub KicinskiIP mode. Physical transports include USB, HSIC, PCIe and IP accelerator.
16132db935SJakub Kicinski
17132db935SJakub KicinskiMultiplexing allows for creation of logical netdevices (rmnet devices) to
18132db935SJakub Kicinskihandle multiple private data networks (PDN) like a default internet, tethering,
19132db935SJakub Kicinskimultimedia messaging service (MMS) or IP media subsystem (IMS). Hardware sends
20132db935SJakub Kicinskipackets with MAP headers to rmnet. Based on the multiplexer id, rmnet
21132db935SJakub Kicinskiroutes to the appropriate PDN after removing the MAP header.
22132db935SJakub Kicinski
23132db935SJakub KicinskiAggregation is required to achieve high data rates. This involves hardware
24132db935SJakub Kicinskisending aggregated bunch of MAP frames. rmnet driver will de-aggregate
25132db935SJakub Kicinskithese MAP frames and send them to appropriate PDN's.
26132db935SJakub Kicinski
27132db935SJakub Kicinski2. Packet format
28132db935SJakub Kicinski================
29132db935SJakub Kicinski
30710b797cSSharath Chandra Vurukalaa. MAP packet v1 (data / control)
31132db935SJakub Kicinski
32710b797cSSharath Chandra VurukalaMAP header fields are in big endian format.
33132db935SJakub Kicinski
34132db935SJakub KicinskiPacket format::
35132db935SJakub Kicinski
36132db935SJakub Kicinski  Bit             0             1           2-7      8-15           16-31
37132db935SJakub Kicinski  Function   Command / Data   Reserved     Pad   Multiplexer ID    Payload length
38710b797cSSharath Chandra Vurukala
39132db935SJakub Kicinski  Bit            32-x
40710b797cSSharath Chandra Vurukala  Function      Raw bytes
41132db935SJakub Kicinski
42132db935SJakub KicinskiCommand (1)/ Data (0) bit value is to indicate if the packet is a MAP command
43710b797cSSharath Chandra Vurukalaor data packet. Command packet is used for transport level flow control. Data
44132db935SJakub Kicinskipackets are standard IP packets.
45132db935SJakub Kicinski
46710b797cSSharath Chandra VurukalaReserved bits must be zero when sent and ignored when received.
47132db935SJakub Kicinski
48710b797cSSharath Chandra VurukalaPadding is the number of bytes to be appended to the payload to
49710b797cSSharath Chandra Vurukalaensure 4 byte alignment.
50132db935SJakub Kicinski
51132db935SJakub KicinskiMultiplexer ID is to indicate the PDN on which data has to be sent.
52132db935SJakub Kicinski
53132db935SJakub KicinskiPayload length includes the padding length but does not include MAP header
54132db935SJakub Kicinskilength.
55132db935SJakub Kicinski
56710b797cSSharath Chandra Vurukalab. Map packet v4 (data / control)
57710b797cSSharath Chandra Vurukala
58710b797cSSharath Chandra VurukalaMAP header fields are in big endian format.
59710b797cSSharath Chandra Vurukala
60710b797cSSharath Chandra VurukalaPacket format::
61710b797cSSharath Chandra Vurukala
62710b797cSSharath Chandra Vurukala  Bit             0             1           2-7      8-15           16-31
63710b797cSSharath Chandra Vurukala  Function   Command / Data   Reserved     Pad   Multiplexer ID    Payload length
64710b797cSSharath Chandra Vurukala
65710b797cSSharath Chandra Vurukala  Bit            32-(x-33)      (x-32)-x
66710b797cSSharath Chandra Vurukala  Function      Raw bytes      Checksum offload header
67710b797cSSharath Chandra Vurukala
68710b797cSSharath Chandra VurukalaCommand (1)/ Data (0) bit value is to indicate if the packet is a MAP command
69710b797cSSharath Chandra Vurukalaor data packet. Command packet is used for transport level flow control. Data
70710b797cSSharath Chandra Vurukalapackets are standard IP packets.
71710b797cSSharath Chandra Vurukala
72710b797cSSharath Chandra VurukalaReserved bits must be zero when sent and ignored when received.
73710b797cSSharath Chandra Vurukala
74710b797cSSharath Chandra VurukalaPadding is the number of bytes to be appended to the payload to
75710b797cSSharath Chandra Vurukalaensure 4 byte alignment.
76710b797cSSharath Chandra Vurukala
77710b797cSSharath Chandra VurukalaMultiplexer ID is to indicate the PDN on which data has to be sent.
78710b797cSSharath Chandra Vurukala
79710b797cSSharath Chandra VurukalaPayload length includes the padding length but does not include MAP header
80710b797cSSharath Chandra Vurukalalength.
81710b797cSSharath Chandra Vurukala
82710b797cSSharath Chandra VurukalaChecksum offload header, has the information about the checksum processing done
83710b797cSSharath Chandra Vurukalaby the hardware.Checksum offload header fields are in big endian format.
84710b797cSSharath Chandra Vurukala
85710b797cSSharath Chandra VurukalaPacket format::
86710b797cSSharath Chandra Vurukala
87710b797cSSharath Chandra Vurukala  Bit             0-14        15              16-31
88710b797cSSharath Chandra Vurukala  Function      Reserved   Valid     Checksum start offset
89710b797cSSharath Chandra Vurukala
90710b797cSSharath Chandra Vurukala  Bit                31-47                    48-64
91710b797cSSharath Chandra Vurukala  Function      Checksum length           Checksum value
92710b797cSSharath Chandra Vurukala
93710b797cSSharath Chandra VurukalaReserved bits must be zero when sent and ignored when received.
94710b797cSSharath Chandra Vurukala
95710b797cSSharath Chandra VurukalaValid bit indicates whether the partial checksum is calculated and is valid.
96710b797cSSharath Chandra VurukalaSet to 1, if its is valid. Set to 0 otherwise.
97710b797cSSharath Chandra Vurukala
98710b797cSSharath Chandra VurukalaPadding is the number of bytes to be appended to the payload to
99710b797cSSharath Chandra Vurukalaensure 4 byte alignment.
100710b797cSSharath Chandra Vurukala
101710b797cSSharath Chandra VurukalaChecksum start offset, Indicates the offset in bytes from the beginning of the
102710b797cSSharath Chandra VurukalaIP header, from which modem computed checksum.
103710b797cSSharath Chandra Vurukala
104710b797cSSharath Chandra VurukalaChecksum length is the Length in bytes starting from CKSUM_START_OFFSET,
105710b797cSSharath Chandra Vurukalaover which checksum is computed.
106710b797cSSharath Chandra Vurukala
107710b797cSSharath Chandra VurukalaChecksum value, indicates the checksum computed.
108710b797cSSharath Chandra Vurukala
109710b797cSSharath Chandra Vurukalac. MAP packet v5 (data / control)
110710b797cSSharath Chandra Vurukala
111710b797cSSharath Chandra VurukalaMAP header fields are in big endian format.
112710b797cSSharath Chandra Vurukala
113710b797cSSharath Chandra VurukalaPacket format::
114710b797cSSharath Chandra Vurukala
115710b797cSSharath Chandra Vurukala  Bit             0             1         2-7      8-15           16-31
116710b797cSSharath Chandra Vurukala  Function   Command / Data  Next header  Pad   Multiplexer ID   Payload length
117710b797cSSharath Chandra Vurukala
118710b797cSSharath Chandra Vurukala  Bit            32-x
119710b797cSSharath Chandra Vurukala  Function      Raw bytes
120710b797cSSharath Chandra Vurukala
121710b797cSSharath Chandra VurukalaCommand (1)/ Data (0) bit value is to indicate if the packet is a MAP command
122710b797cSSharath Chandra Vurukalaor data packet. Command packet is used for transport level flow control. Data
123710b797cSSharath Chandra Vurukalapackets are standard IP packets.
124710b797cSSharath Chandra Vurukala
125710b797cSSharath Chandra VurukalaNext header is used to indicate the presence of another header, currently is
126710b797cSSharath Chandra Vurukalalimited to checksum header.
127710b797cSSharath Chandra Vurukala
128710b797cSSharath Chandra VurukalaPadding is the number of bytes to be appended to the payload to
129710b797cSSharath Chandra Vurukalaensure 4 byte alignment.
130710b797cSSharath Chandra Vurukala
131710b797cSSharath Chandra VurukalaMultiplexer ID is to indicate the PDN on which data has to be sent.
132710b797cSSharath Chandra Vurukala
133710b797cSSharath Chandra VurukalaPayload length includes the padding length but does not include MAP header
134710b797cSSharath Chandra Vurukalalength.
135710b797cSSharath Chandra Vurukala
136710b797cSSharath Chandra Vurukalad. Checksum offload header v5
137710b797cSSharath Chandra Vurukala
138710b797cSSharath Chandra VurukalaChecksum offload header fields are in big endian format.
139710b797cSSharath Chandra Vurukala
140710b797cSSharath Chandra Vurukala  Bit            0 - 6          7               8-15              16-31
141710b797cSSharath Chandra Vurukala  Function     Header Type    Next Header     Checksum Valid    Reserved
142710b797cSSharath Chandra Vurukala
143710b797cSSharath Chandra VurukalaHeader Type is to indicate the type of header, this usually is set to CHECKSUM
144710b797cSSharath Chandra Vurukala
145710b797cSSharath Chandra VurukalaHeader types
146710b797cSSharath Chandra Vurukala= ==========================================
147710b797cSSharath Chandra Vurukala0 Reserved
148710b797cSSharath Chandra Vurukala1 Reserved
149710b797cSSharath Chandra Vurukala2 checksum header
150710b797cSSharath Chandra Vurukala
151710b797cSSharath Chandra VurukalaChecksum Valid is to indicate whether the header checksum is valid. Value of 1
152710b797cSSharath Chandra Vurukalaimplies that checksum is calculated on this packet and is valid, value of 0
153710b797cSSharath Chandra Vurukalaindicates that the calculated packet checksum is invalid.
154710b797cSSharath Chandra Vurukala
155710b797cSSharath Chandra VurukalaReserved bits must be zero when sent and ignored when received.
156710b797cSSharath Chandra Vurukala
157710b797cSSharath Chandra Vurukalae. MAP packet v1/v5 (command specific)::
158132db935SJakub Kicinski
159132db935SJakub Kicinski    Bit             0             1         2-7      8 - 15           16 - 31
160132db935SJakub Kicinski    Function   Command         Reserved     Pad   Multiplexer ID    Payload length
161132db935SJakub Kicinski    Bit          32 - 39        40 - 45    46 - 47       48 - 63
162132db935SJakub Kicinski    Function   Command name    Reserved   Command Type   Reserved
163132db935SJakub Kicinski    Bit          64 - 95
164132db935SJakub Kicinski    Function   Transaction ID
165132db935SJakub Kicinski    Bit          96 - 127
166132db935SJakub Kicinski    Function   Command data
167132db935SJakub Kicinski
168132db935SJakub KicinskiCommand 1 indicates disabling flow while 2 is enabling flow
169132db935SJakub Kicinski
170132db935SJakub KicinskiCommand types
171132db935SJakub Kicinski
172132db935SJakub Kicinski= ==========================================
173132db935SJakub Kicinski0 for MAP command request
174132db935SJakub Kicinski1 is to acknowledge the receipt of a command
175132db935SJakub Kicinski2 is for unsupported commands
176132db935SJakub Kicinski3 is for error during processing of commands
177132db935SJakub Kicinski= ==========================================
178132db935SJakub Kicinski
179710b797cSSharath Chandra Vurukalaf. Aggregation
180132db935SJakub Kicinski
181132db935SJakub KicinskiAggregation is multiple MAP packets (can be data or command) delivered to
182132db935SJakub Kicinskirmnet in a single linear skb. rmnet will process the individual
183132db935SJakub Kicinskipackets and either ACK the MAP command or deliver the IP packet to the
184132db935SJakub Kicinskinetwork stack as needed
185132db935SJakub Kicinski
186132db935SJakub KicinskiMAP header|IP Packet|Optional padding|MAP header|IP Packet|Optional padding....
187132db935SJakub Kicinski
188132db935SJakub KicinskiMAP header|IP Packet|Optional padding|MAP header|Command Packet|Optional pad...
189132db935SJakub Kicinski
190132db935SJakub Kicinski3. Userspace configuration
191132db935SJakub Kicinski==========================
192132db935SJakub Kicinski
193*26b32974SSubash Abhinov Kasiviswanathanrmnet userspace configuration is done through netlink using iproute2
194*26b32974SSubash Abhinov Kasiviswanathanhttps://git.kernel.org/pub/scm/network/iproute2/iproute2.git/
195132db935SJakub Kicinski
196*26b32974SSubash Abhinov KasiviswanathanThe driver uses rtnl_link_ops for communication.
197