From f65ab1a9da7cf1adfdf2c008abb7e282d04c2916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sjur=20Br=C3=A6ndeland?= Date: Mon, 9 Aug 2010 23:29:39 +0200 Subject: [PATCH] stedriver: Copy caif_socket.h from 2.6.36 RC Copied include/linux/caif/caif_socket.h and added AF_CAIF, PF_CAIF and SOL_CAIF definitions found in linux/include/socket.h. --- drivers/stemodem/caif_socket.h | 207 ++++++++++++++++++++------------- 1 file changed, 123 insertions(+), 84 deletions(-) diff --git a/drivers/stemodem/caif_socket.h b/drivers/stemodem/caif_socket.h index 424c3013..745d43de 100644 --- a/drivers/stemodem/caif_socket.h +++ b/drivers/stemodem/caif_socket.h @@ -1,6 +1,6 @@ /* linux/caif_socket.h * CAIF Definitions for CAIF socket and network layer - * Copyright (C) ST-Ericsson AB 2009 + * Copyright (C) ST-Ericsson AB 2010 * Author: Sjur Brendeland/ sjur.brandeland@stericsson.com * License terms: GNU General Public License (GPL) version 2 */ @@ -8,33 +8,35 @@ #ifndef _LINUX_CAIF_SOCKET_H #define _LINUX_CAIF_SOCKET_H -#ifdef __KERNEL__ #include + +#ifdef __KERNEL__ #include #else -#include #include #endif -#ifdef __cplusplus -extern "C" { -#endif +/* Copy definitions from include/linux/socket.h */ #ifndef AF_CAIF -#define AF_CAIF 37 /* CAIF Socket Address Family */ +#define AF_CAIF 37 /* CAIF Socket Address Family */ #endif #ifndef PF_CAIF -#define PF_CAIF AF_CAIF /* CAIF Socket Protocol Family */ +#define PF_CAIF AF_CAIF /* CAIF Socket Protocol Family */ #endif #ifndef SOL_CAIF -#define SOL_CAIF 278 /* CAIF Socket Option Level */ +#define SOL_CAIF 278 /* CAIF Socket Option Level */ #endif /** - * enum caif_link_selector - Physical Link Selection. - * @CAIF_LINK_HIGH_BANDW: Default physical interface for high-bandwidth + * enum caif_link_selector - Physical Link Selection. + * @CAIF_LINK_HIGH_BANDW: Physical interface for high-bandwidth * traffic. - * @CAIF_LINK_LOW_LATENCY: Default physical interface for low-latency + * @CAIF_LINK_LOW_LATENCY: Physical interface for low-latency * traffic. + * + * CAIF Link Layers can register their link properties. + * This enum is used for choosing between CAIF Link Layers when + * setting up CAIF Channels when multiple CAIF Link Layers exists. */ enum caif_link_selector { CAIF_LINK_HIGH_BANDW, @@ -42,12 +44,39 @@ enum caif_link_selector { }; /** - * enum caif_protocol_type - Types of CAIF protocols in the CAIF Stack. + * enum caif_channel_priority - CAIF channel priorities. + * + * @CAIF_PRIO_MIN: Min priority for a channel. + * @CAIF_PRIO_LOW: Low-priority channel. + * @CAIF_PRIO_NORMAL: Normal/default priority level. + * @CAIF_PRIO_HIGH: High priority level + * @CAIF_PRIO_MAX: Max priority for channel + * + * Priority can be set on CAIF Channels in order to + * prioritize between traffic on different CAIF Channels. + * These priority levels are recommended, but the priority value + * is not restricted to the values defined in this enum, any value + * between CAIF_PRIO_MIN and CAIF_PRIO_MAX could be used. + */ +enum caif_channel_priority { + CAIF_PRIO_MIN = 0x01, + CAIF_PRIO_LOW = 0x04, + CAIF_PRIO_NORMAL = 0x0f, + CAIF_PRIO_HIGH = 0x14, + CAIF_PRIO_MAX = 0x1F +}; + +/** + * enum caif_protocol_type - CAIF Channel type. * @CAIFPROTO_AT: Classic AT channel. - * @CAIFPROTO_DATAGRAM: Datagram channel. + * @CAIFPROTO_DATAGRAM: Datagram channel. * @CAIFPROTO_DATAGRAM_LOOP: Datagram loopback channel, used for testing. * @CAIFPROTO_UTIL: Utility (Psock) channel. * @CAIFPROTO_RFM: Remote File Manager + * @CAIFPROTO_DEBUG: Debug link + * + * This enum defines the CAIF Channel type to be used. This defines + * the service to connect to on the modem. */ enum caif_protocol_type { CAIFPROTO_AT, @@ -55,6 +84,7 @@ enum caif_protocol_type { CAIFPROTO_DATAGRAM_LOOP, CAIFPROTO_UTIL, CAIFPROTO_RFM, + CAIFPROTO_DEBUG, _CAIFPROTO_MAX }; #define CAIFPROTO_MAX _CAIFPROTO_MAX @@ -64,108 +94,117 @@ enum caif_protocol_type { * @CAIF_ATTYPE_PLAIN: Connects to a plain vanilla AT channel. */ enum caif_at_type { - CAIF_ATTYPE_PLAIN + CAIF_ATTYPE_PLAIN = 2 +}; + /** + * enum caif_debug_type - Content selection for debug connection + * @CAIF_DEBUG_TRACE_INTERACTIVE: Connection will contain + * both trace and interactive debug. + * @CAIF_DEBUG_TRACE: Connection contains trace only. + * @CAIF_DEBUG_INTERACTIVE: Connection to interactive debug. + */ +enum caif_debug_type { + CAIF_DEBUG_TRACE_INTERACTIVE = 0, + CAIF_DEBUG_TRACE, + CAIF_DEBUG_INTERACTIVE, +}; + +/** + * enum caif_debug_service - Debug Service Endpoint + * @CAIF_RADIO_DEBUG_SERVICE: Debug service on the Radio sub-system + * @CAIF_APP_DEBUG_SERVICE: Debug for the applications sub-system + */ +enum caif_debug_service { + CAIF_RADIO_DEBUG_SERVICE = 1, + CAIF_APP_DEBUG_SERVICE }; /** * struct sockaddr_caif - the sockaddr structure for CAIF sockets. * @family: Address family number, must be AF_CAIF. - * @u: Union of address data 'switched' by familty. - * @at: Applies when family = CAIFPROTO_AT. - * @at.type: Type of AT link to set up (enum caif_at_type). - * @util: Applies when family = CAIFPROTO_UTIL - * @util.service: Service name. - * @dgm: Applies when family = CAIFPROTO_DATAGRAM - * @dgm.connection_id: Datagram connection id. - * @dgm.nsapi: NSAPI of the PDP-Context. - * @rfm: Applies when family = CAIFPROTO_RFM - * @rfm.connection_id: Connection ID for RFM. - * @rfm.volume: Volume to mount. + * @u: Union of address data 'switched' by family. + * : + * @u.at: Applies when family = CAIFPROTO_AT. + * + * @u.at.type: Type of AT link to set up (enum caif_at_type). + * + * @u.util: Applies when family = CAIFPROTO_UTIL + * + * @u.util.service: Utility service name. + * + * @u.dgm: Applies when family = CAIFPROTO_DATAGRAM + * + * @u.dgm.connection_id: Datagram connection id. + * + * @u.dgm.nsapi: NSAPI of the PDP-Context. + * + * @u.rfm: Applies when family = CAIFPROTO_RFM + * + * @u.rfm.connection_id: Connection ID for RFM. + * + * @u.rfm.volume: Volume to mount. + * + * @u.dbg: Applies when family = CAIFPROTO_DEBUG. + * + * @u.dbg.type: Type of debug connection to set up + * (caif_debug_type). + * + * @u.dbg.service: Service sub-system to connect (caif_debug_service + * Description: + * This structure holds the connect parameters used for setting up a + * CAIF Channel. It defines the service to connect to on the modem. */ struct sockaddr_caif { sa_family_t family; union { struct { - u_int8_t type; /* type: enum caif_at_type */ + __u8 type; /* type: enum caif_at_type */ } at; /* CAIFPROTO_AT */ struct { char service[16]; } util; /* CAIFPROTO_UTIL */ union { - u_int32_t connection_id; - u_int8_t nsapi; + __u32 connection_id; + __u8 nsapi; } dgm; /* CAIFPROTO_DATAGRAM(_LOOP)*/ struct { - u_int32_t connection_id; + __u32 connection_id; char volume[16]; } rfm; /* CAIFPROTO_RFM */ + struct { + __u8 type; /* type:enum caif_debug_type */ + __u8 service; /* service:caif_debug_service */ + } dbg; /* CAIFPROTO_DEBUG */ } u; }; /** - * struct caif_channel_opt - CAIF channel connect options. - * @priority: Priority of the channel (between 0 and 0x1f) - * @link_selector: Selector for the physical link. - * (see enum caif_phy_preference in caif_config.h) - * @link_name: Physical link to use. This is the instance name of the - * CAIF Physical Driver. - */ -struct caif_channel_opt { - u_int16_t priority; - u_int16_t link_selector; - char link_name[16]; -}; - -/** - * struct caif_param - CAIF parameters. - * @size: Length of data - * @data: Binary Data Blob - */ -struct caif_param { - u_int16_t size; - u_int8_t data[256]; -}; - - -/** enum caif_socket_opts - CAIF option values for getsockopt and setsockopt - * @CAIFSO_CHANNEL: Used to set the connect options on a CAIF - * socket. (struct caif_config_opt). This can only - * be set before connecting. + * enum caif_socket_opts - CAIF option values for getsockopt and setsockopt. + * + * @CAIFSO_LINK_SELECT: Selector used if multiple CAIF Link layers are + * available. Either a high bandwidth + * link can be selected (CAIF_LINK_HIGH_BANDW) or + * or a low latency link (CAIF_LINK_LOW_LATENCY). + * This option is of type __u32. + * Alternatively SO_BINDTODEVICE can be used. + * * @CAIFSO_REQ_PARAM: Used to set the request parameters for a - * utility channel. (struct caif_param). This - * can only be set before connecting. + * utility channel. (maximum 256 bytes). This + * option must be set before connecting. * - * @CAIFSO_RSP_PARAM: Gets the request parameters for a utility - * channel. (struct caif_param). This can only be - * fetched after connecting the socket. + * @CAIFSO_RSP_PARAM: Gets the response parameters for a utility + * channel. (maximum 256 bytes). This option + * is valid after a successful connect. * - * @CAIFSO_UTIL_FLOW: Sets the utility channels flow options. - * This can only be set before connecting. - * (struct caif_util_modem_flow_opt) * - * @CAIFSO_CONN_ID: Gets the channel id on a CAIF Channel. - * This can only be done after connect. - * ( u_int32_t) + * This enum defines the CAIF Socket options to be used on a socket + * of type PF_CAIF. * - * @CAIFSO_NEXT_PAKCET_LEN: Gets the size of next received packet. - * Value is 0 if no packet is available. - * This can only be done after connect. - * ( u_int32_t) - * - * @CAIFSO_MAX_PAKCET_LEN: Gets the maximum packet size for this - * connection. ( u_int32_t) */ enum caif_socket_opts { - CAIFSO_CHANNEL_CONFIG = 127, + CAIFSO_LINK_SELECT = 127, CAIFSO_REQ_PARAM = 128, CAIFSO_RSP_PARAM = 129, - CAIFSO_UTIL_FLOW = 130, - CAIFSO_CONN_ID = 131, - CAIFSO_NEXT_PACKET_LEN = 132, - CAIFSO_MAX_PACKET_LEN = 133, }; -#ifdef __cplusplus -} /* extern "C" */ -#endif #endif /* _LINUX_CAIF_SOCKET_H */