1e2be04c7SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 227a3aadcSDavid Howells /* linux/caif_socket.h 327a3aadcSDavid Howells * CAIF Definitions for CAIF socket and network layer 427a3aadcSDavid Howells * Copyright (C) ST-Ericsson AB 2010 526ee65e6S[email protected] * Author: Sjur Brendeland 627a3aadcSDavid Howells * License terms: GNU General Public License (GPL) version 2 727a3aadcSDavid Howells */ 827a3aadcSDavid Howells 927a3aadcSDavid Howells #ifndef _LINUX_CAIF_SOCKET_H 1027a3aadcSDavid Howells #define _LINUX_CAIF_SOCKET_H 1127a3aadcSDavid Howells 1227a3aadcSDavid Howells #include <linux/types.h> 1327a3aadcSDavid Howells #include <linux/socket.h> 1427a3aadcSDavid Howells 1527a3aadcSDavid Howells /** 1627a3aadcSDavid Howells * enum caif_link_selector - Physical Link Selection. 1727a3aadcSDavid Howells * @CAIF_LINK_HIGH_BANDW: Physical interface for high-bandwidth 1827a3aadcSDavid Howells * traffic. 1927a3aadcSDavid Howells * @CAIF_LINK_LOW_LATENCY: Physical interface for low-latency 2027a3aadcSDavid Howells * traffic. 2127a3aadcSDavid Howells * 2227a3aadcSDavid Howells * CAIF Link Layers can register their link properties. 2327a3aadcSDavid Howells * This enum is used for choosing between CAIF Link Layers when 2427a3aadcSDavid Howells * setting up CAIF Channels when multiple CAIF Link Layers exists. 2527a3aadcSDavid Howells */ 2627a3aadcSDavid Howells enum caif_link_selector { 2727a3aadcSDavid Howells CAIF_LINK_HIGH_BANDW, 2827a3aadcSDavid Howells CAIF_LINK_LOW_LATENCY 2927a3aadcSDavid Howells }; 3027a3aadcSDavid Howells 3127a3aadcSDavid Howells /** 3227a3aadcSDavid Howells * enum caif_channel_priority - CAIF channel priorities. 3327a3aadcSDavid Howells * 3427a3aadcSDavid Howells * @CAIF_PRIO_MIN: Min priority for a channel. 3527a3aadcSDavid Howells * @CAIF_PRIO_LOW: Low-priority channel. 3627a3aadcSDavid Howells * @CAIF_PRIO_NORMAL: Normal/default priority level. 3727a3aadcSDavid Howells * @CAIF_PRIO_HIGH: High priority level 3827a3aadcSDavid Howells * @CAIF_PRIO_MAX: Max priority for channel 3927a3aadcSDavid Howells * 4027a3aadcSDavid Howells * Priority can be set on CAIF Channels in order to 4127a3aadcSDavid Howells * prioritize between traffic on different CAIF Channels. 4227a3aadcSDavid Howells * These priority levels are recommended, but the priority value 4327a3aadcSDavid Howells * is not restricted to the values defined in this enum, any value 4427a3aadcSDavid Howells * between CAIF_PRIO_MIN and CAIF_PRIO_MAX could be used. 4527a3aadcSDavid Howells */ 4627a3aadcSDavid Howells enum caif_channel_priority { 4727a3aadcSDavid Howells CAIF_PRIO_MIN = 0x01, 4827a3aadcSDavid Howells CAIF_PRIO_LOW = 0x04, 4927a3aadcSDavid Howells CAIF_PRIO_NORMAL = 0x0f, 5027a3aadcSDavid Howells CAIF_PRIO_HIGH = 0x14, 5127a3aadcSDavid Howells CAIF_PRIO_MAX = 0x1F 5227a3aadcSDavid Howells }; 5327a3aadcSDavid Howells 5427a3aadcSDavid Howells /** 5527a3aadcSDavid Howells * enum caif_protocol_type - CAIF Channel type. 5627a3aadcSDavid Howells * @CAIFPROTO_AT: Classic AT channel. 5727a3aadcSDavid Howells * @CAIFPROTO_DATAGRAM: Datagram channel. 5827a3aadcSDavid Howells * @CAIFPROTO_DATAGRAM_LOOP: Datagram loopback channel, used for testing. 5927a3aadcSDavid Howells * @CAIFPROTO_UTIL: Utility (Psock) channel. 6027a3aadcSDavid Howells * @CAIFPROTO_RFM: Remote File Manager 6127a3aadcSDavid Howells * @CAIFPROTO_DEBUG: Debug link 6227a3aadcSDavid Howells * 6327a3aadcSDavid Howells * This enum defines the CAIF Channel type to be used. This defines 6427a3aadcSDavid Howells * the service to connect to on the modem. 6527a3aadcSDavid Howells */ 6627a3aadcSDavid Howells enum caif_protocol_type { 6727a3aadcSDavid Howells CAIFPROTO_AT, 6827a3aadcSDavid Howells CAIFPROTO_DATAGRAM, 6927a3aadcSDavid Howells CAIFPROTO_DATAGRAM_LOOP, 7027a3aadcSDavid Howells CAIFPROTO_UTIL, 7127a3aadcSDavid Howells CAIFPROTO_RFM, 7227a3aadcSDavid Howells CAIFPROTO_DEBUG, 7327a3aadcSDavid Howells _CAIFPROTO_MAX 7427a3aadcSDavid Howells }; 7527a3aadcSDavid Howells #define CAIFPROTO_MAX _CAIFPROTO_MAX 7627a3aadcSDavid Howells 7727a3aadcSDavid Howells /** 7827a3aadcSDavid Howells * enum caif_at_type - AT Service Endpoint 7927a3aadcSDavid Howells * @CAIF_ATTYPE_PLAIN: Connects to a plain vanilla AT channel. 8027a3aadcSDavid Howells */ 8127a3aadcSDavid Howells enum caif_at_type { 8227a3aadcSDavid Howells CAIF_ATTYPE_PLAIN = 2 8327a3aadcSDavid Howells }; 8427a3aadcSDavid Howells /** 8527a3aadcSDavid Howells * enum caif_debug_type - Content selection for debug connection 8627a3aadcSDavid Howells * @CAIF_DEBUG_TRACE_INTERACTIVE: Connection will contain 8727a3aadcSDavid Howells * both trace and interactive debug. 8827a3aadcSDavid Howells * @CAIF_DEBUG_TRACE: Connection contains trace only. 8927a3aadcSDavid Howells * @CAIF_DEBUG_INTERACTIVE: Connection to interactive debug. 9027a3aadcSDavid Howells */ 9127a3aadcSDavid Howells enum caif_debug_type { 9227a3aadcSDavid Howells CAIF_DEBUG_TRACE_INTERACTIVE = 0, 9327a3aadcSDavid Howells CAIF_DEBUG_TRACE, 9427a3aadcSDavid Howells CAIF_DEBUG_INTERACTIVE, 9527a3aadcSDavid Howells }; 9627a3aadcSDavid Howells 9727a3aadcSDavid Howells /** 9827a3aadcSDavid Howells * enum caif_debug_service - Debug Service Endpoint 9927a3aadcSDavid Howells * @CAIF_RADIO_DEBUG_SERVICE: Debug service on the Radio sub-system 10027a3aadcSDavid Howells * @CAIF_APP_DEBUG_SERVICE: Debug for the applications sub-system 10127a3aadcSDavid Howells */ 10227a3aadcSDavid Howells enum caif_debug_service { 10327a3aadcSDavid Howells CAIF_RADIO_DEBUG_SERVICE = 1, 10427a3aadcSDavid Howells CAIF_APP_DEBUG_SERVICE 10527a3aadcSDavid Howells }; 10627a3aadcSDavid Howells 10727a3aadcSDavid Howells /** 10827a3aadcSDavid Howells * struct sockaddr_caif - the sockaddr structure for CAIF sockets. 10927a3aadcSDavid Howells * @family: Address family number, must be AF_CAIF. 11027a3aadcSDavid Howells * @u: Union of address data 'switched' by family. 11127a3aadcSDavid Howells * : 11227a3aadcSDavid Howells * @u.at: Applies when family = CAIFPROTO_AT. 11327a3aadcSDavid Howells * 11427a3aadcSDavid Howells * @u.at.type: Type of AT link to set up (enum caif_at_type). 11527a3aadcSDavid Howells * 11627a3aadcSDavid Howells * @u.util: Applies when family = CAIFPROTO_UTIL 11727a3aadcSDavid Howells * 11827a3aadcSDavid Howells * @u.util.service: Utility service name. 11927a3aadcSDavid Howells * 12027a3aadcSDavid Howells * @u.dgm: Applies when family = CAIFPROTO_DATAGRAM 12127a3aadcSDavid Howells * 12227a3aadcSDavid Howells * @u.dgm.connection_id: Datagram connection id. 12327a3aadcSDavid Howells * 12427a3aadcSDavid Howells * @u.dgm.nsapi: NSAPI of the PDP-Context. 12527a3aadcSDavid Howells * 12627a3aadcSDavid Howells * @u.rfm: Applies when family = CAIFPROTO_RFM 12727a3aadcSDavid Howells * 12827a3aadcSDavid Howells * @u.rfm.connection_id: Connection ID for RFM. 12927a3aadcSDavid Howells * 13027a3aadcSDavid Howells * @u.rfm.volume: Volume to mount. 13127a3aadcSDavid Howells * 13227a3aadcSDavid Howells * @u.dbg: Applies when family = CAIFPROTO_DEBUG. 13327a3aadcSDavid Howells * 13427a3aadcSDavid Howells * @u.dbg.type: Type of debug connection to set up 13527a3aadcSDavid Howells * (caif_debug_type). 13627a3aadcSDavid Howells * 13727a3aadcSDavid Howells * @u.dbg.service: Service sub-system to connect (caif_debug_service 13827a3aadcSDavid Howells * Description: 13927a3aadcSDavid Howells * This structure holds the connect parameters used for setting up a 14027a3aadcSDavid Howells * CAIF Channel. It defines the service to connect to on the modem. 14127a3aadcSDavid Howells */ 14227a3aadcSDavid Howells struct sockaddr_caif { 14327a3aadcSDavid Howells __kernel_sa_family_t family; 14427a3aadcSDavid Howells union { 14527a3aadcSDavid Howells struct { 14627a3aadcSDavid Howells __u8 type; /* type: enum caif_at_type */ 14727a3aadcSDavid Howells } at; /* CAIFPROTO_AT */ 14827a3aadcSDavid Howells struct { 14927a3aadcSDavid Howells char service[16]; 15027a3aadcSDavid Howells } util; /* CAIFPROTO_UTIL */ 15127a3aadcSDavid Howells union { 15227a3aadcSDavid Howells __u32 connection_id; 15327a3aadcSDavid Howells __u8 nsapi; 15427a3aadcSDavid Howells } dgm; /* CAIFPROTO_DATAGRAM(_LOOP)*/ 15527a3aadcSDavid Howells struct { 15627a3aadcSDavid Howells __u32 connection_id; 15727a3aadcSDavid Howells char volume[16]; 15827a3aadcSDavid Howells } rfm; /* CAIFPROTO_RFM */ 15927a3aadcSDavid Howells struct { 16027a3aadcSDavid Howells __u8 type; /* type:enum caif_debug_type */ 16127a3aadcSDavid Howells __u8 service; /* service:caif_debug_service */ 16227a3aadcSDavid Howells } dbg; /* CAIFPROTO_DEBUG */ 16327a3aadcSDavid Howells } u; 16427a3aadcSDavid Howells }; 16527a3aadcSDavid Howells 16627a3aadcSDavid Howells /** 16727a3aadcSDavid Howells * enum caif_socket_opts - CAIF option values for getsockopt and setsockopt. 16827a3aadcSDavid Howells * 16927a3aadcSDavid Howells * @CAIFSO_LINK_SELECT: Selector used if multiple CAIF Link layers are 17027a3aadcSDavid Howells * available. Either a high bandwidth 17127a3aadcSDavid Howells * link can be selected (CAIF_LINK_HIGH_BANDW) or 172*c201324bSRandy Dunlap * a low latency link (CAIF_LINK_LOW_LATENCY). 17327a3aadcSDavid Howells * This option is of type __u32. 17427a3aadcSDavid Howells * Alternatively SO_BINDTODEVICE can be used. 17527a3aadcSDavid Howells * 17627a3aadcSDavid Howells * @CAIFSO_REQ_PARAM: Used to set the request parameters for a 17727a3aadcSDavid Howells * utility channel. (maximum 256 bytes). This 17827a3aadcSDavid Howells * option must be set before connecting. 17927a3aadcSDavid Howells * 18027a3aadcSDavid Howells * @CAIFSO_RSP_PARAM: Gets the response parameters for a utility 18127a3aadcSDavid Howells * channel. (maximum 256 bytes). This option 18227a3aadcSDavid Howells * is valid after a successful connect. 18327a3aadcSDavid Howells * 18427a3aadcSDavid Howells * 18527a3aadcSDavid Howells * This enum defines the CAIF Socket options to be used on a socket 18627a3aadcSDavid Howells * of type PF_CAIF. 18727a3aadcSDavid Howells * 18827a3aadcSDavid Howells */ 18927a3aadcSDavid Howells enum caif_socket_opts { 19027a3aadcSDavid Howells CAIFSO_LINK_SELECT = 127, 19127a3aadcSDavid Howells CAIFSO_REQ_PARAM = 128, 19227a3aadcSDavid Howells CAIFSO_RSP_PARAM = 129, 19327a3aadcSDavid Howells }; 19427a3aadcSDavid Howells 19527a3aadcSDavid Howells #endif /* _LINUX_CAIF_SOCKET_H */ 196