196 lines · c
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */2/* linux/caif_socket.h3 * CAIF Definitions for CAIF socket and network layer4 * Copyright (C) ST-Ericsson AB 20105 * Author: Sjur Brendeland6 * License terms: GNU General Public License (GPL) version 27 */8 9#ifndef _LINUX_CAIF_SOCKET_H10#define _LINUX_CAIF_SOCKET_H11 12#include <linux/types.h>13#include <linux/socket.h>14 15/**16 * enum caif_link_selector - Physical Link Selection.17 * @CAIF_LINK_HIGH_BANDW: Physical interface for high-bandwidth18 * traffic.19 * @CAIF_LINK_LOW_LATENCY: Physical interface for low-latency20 * traffic.21 *22 * CAIF Link Layers can register their link properties.23 * This enum is used for choosing between CAIF Link Layers when24 * setting up CAIF Channels when multiple CAIF Link Layers exists.25 */26enum caif_link_selector {27 CAIF_LINK_HIGH_BANDW,28 CAIF_LINK_LOW_LATENCY29};30 31/**32 * enum caif_channel_priority - CAIF channel priorities.33 *34 * @CAIF_PRIO_MIN: Min priority for a channel.35 * @CAIF_PRIO_LOW: Low-priority channel.36 * @CAIF_PRIO_NORMAL: Normal/default priority level.37 * @CAIF_PRIO_HIGH: High priority level38 * @CAIF_PRIO_MAX: Max priority for channel39 *40 * Priority can be set on CAIF Channels in order to41 * prioritize between traffic on different CAIF Channels.42 * These priority levels are recommended, but the priority value43 * is not restricted to the values defined in this enum, any value44 * between CAIF_PRIO_MIN and CAIF_PRIO_MAX could be used.45 */46enum caif_channel_priority {47 CAIF_PRIO_MIN = 0x01,48 CAIF_PRIO_LOW = 0x04,49 CAIF_PRIO_NORMAL = 0x0f,50 CAIF_PRIO_HIGH = 0x14,51 CAIF_PRIO_MAX = 0x1F52};53 54/**55 * enum caif_protocol_type - CAIF Channel type.56 * @CAIFPROTO_AT: Classic AT channel.57 * @CAIFPROTO_DATAGRAM: Datagram channel.58 * @CAIFPROTO_DATAGRAM_LOOP: Datagram loopback channel, used for testing.59 * @CAIFPROTO_UTIL: Utility (Psock) channel.60 * @CAIFPROTO_RFM: Remote File Manager61 * @CAIFPROTO_DEBUG: Debug link62 *63 * This enum defines the CAIF Channel type to be used. This defines64 * the service to connect to on the modem.65 */66enum caif_protocol_type {67 CAIFPROTO_AT,68 CAIFPROTO_DATAGRAM,69 CAIFPROTO_DATAGRAM_LOOP,70 CAIFPROTO_UTIL,71 CAIFPROTO_RFM,72 CAIFPROTO_DEBUG,73 _CAIFPROTO_MAX74};75#define CAIFPROTO_MAX _CAIFPROTO_MAX76 77/**78 * enum caif_at_type - AT Service Endpoint79 * @CAIF_ATTYPE_PLAIN: Connects to a plain vanilla AT channel.80 */81enum caif_at_type {82 CAIF_ATTYPE_PLAIN = 283};84 /**85 * enum caif_debug_type - Content selection for debug connection86 * @CAIF_DEBUG_TRACE_INTERACTIVE: Connection will contain87 * both trace and interactive debug.88 * @CAIF_DEBUG_TRACE: Connection contains trace only.89 * @CAIF_DEBUG_INTERACTIVE: Connection to interactive debug.90 */91enum caif_debug_type {92 CAIF_DEBUG_TRACE_INTERACTIVE = 0,93 CAIF_DEBUG_TRACE,94 CAIF_DEBUG_INTERACTIVE,95};96 97/**98 * enum caif_debug_service - Debug Service Endpoint99 * @CAIF_RADIO_DEBUG_SERVICE: Debug service on the Radio sub-system100 * @CAIF_APP_DEBUG_SERVICE: Debug for the applications sub-system101 */102enum caif_debug_service {103 CAIF_RADIO_DEBUG_SERVICE = 1,104 CAIF_APP_DEBUG_SERVICE105};106 107/**108 * struct sockaddr_caif - the sockaddr structure for CAIF sockets.109 * @family: Address family number, must be AF_CAIF.110 * @u: Union of address data 'switched' by family.111 * :112 * @u.at: Applies when family = CAIFPROTO_AT.113 *114 * @u.at.type: Type of AT link to set up (enum caif_at_type).115 *116 * @u.util: Applies when family = CAIFPROTO_UTIL117 *118 * @u.util.service: Utility service name.119 *120 * @u.dgm: Applies when family = CAIFPROTO_DATAGRAM121 *122 * @u.dgm.connection_id: Datagram connection id.123 *124 * @u.dgm.nsapi: NSAPI of the PDP-Context.125 *126 * @u.rfm: Applies when family = CAIFPROTO_RFM127 *128 * @u.rfm.connection_id: Connection ID for RFM.129 *130 * @u.rfm.volume: Volume to mount.131 *132 * @u.dbg: Applies when family = CAIFPROTO_DEBUG.133 *134 * @u.dbg.type: Type of debug connection to set up135 * (caif_debug_type).136 *137 * @u.dbg.service: Service sub-system to connect (caif_debug_service138 * Description:139 * This structure holds the connect parameters used for setting up a140 * CAIF Channel. It defines the service to connect to on the modem.141 */142struct sockaddr_caif {143 __kernel_sa_family_t family;144 union {145 struct {146 __u8 type; /* type: enum caif_at_type */147 } at; /* CAIFPROTO_AT */148 struct {149 char service[16];150 } util; /* CAIFPROTO_UTIL */151 union {152 __u32 connection_id;153 __u8 nsapi;154 } dgm; /* CAIFPROTO_DATAGRAM(_LOOP)*/155 struct {156 __u32 connection_id;157 char volume[16];158 } rfm; /* CAIFPROTO_RFM */159 struct {160 __u8 type; /* type:enum caif_debug_type */161 __u8 service; /* service:caif_debug_service */162 } dbg; /* CAIFPROTO_DEBUG */163 } u;164};165 166/**167 * enum caif_socket_opts - CAIF option values for getsockopt and setsockopt.168 *169 * @CAIFSO_LINK_SELECT: Selector used if multiple CAIF Link layers are170 * available. Either a high bandwidth171 * link can be selected (CAIF_LINK_HIGH_BANDW) or172 * a low latency link (CAIF_LINK_LOW_LATENCY).173 * This option is of type __u32.174 * Alternatively SO_BINDTODEVICE can be used.175 *176 * @CAIFSO_REQ_PARAM: Used to set the request parameters for a177 * utility channel. (maximum 256 bytes). This178 * option must be set before connecting.179 *180 * @CAIFSO_RSP_PARAM: Gets the response parameters for a utility181 * channel. (maximum 256 bytes). This option182 * is valid after a successful connect.183 *184 *185 * This enum defines the CAIF Socket options to be used on a socket186 * of type PF_CAIF.187 *188 */189enum caif_socket_opts {190 CAIFSO_LINK_SELECT = 127,191 CAIFSO_REQ_PARAM = 128,192 CAIFSO_RSP_PARAM = 129,193};194 195#endif /* _LINUX_CAIF_SOCKET_H */196