/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (C) ST-Ericsson AB 2010 * Author: Sjur Brendeland */ #ifndef CAIF_LAYER_H_ #define CAIF_LAYER_H_ #include <linux/list.h> struct cflayer; struct cfpkt; struct caif_payload_info; #define CAIF_LAYER_NAME_SZ … /** * caif_assert() - Assert function for CAIF. * @assert: expression to evaluate. * * This function will print a error message and a do WARN_ON if the * assertion failes. Normally this will do a stack up at the current location. */ #define caif_assert(assert) … /** * enum caif_ctrlcmd - CAIF Stack Control Signaling sent in layer.ctrlcmd(). * * @CAIF_CTRLCMD_FLOW_OFF_IND: Flow Control is OFF, transmit function * should stop sending data * * @CAIF_CTRLCMD_FLOW_ON_IND: Flow Control is ON, transmit function * can start sending data * * @CAIF_CTRLCMD_REMOTE_SHUTDOWN_IND: Remote end modem has decided to close * down channel * * @CAIF_CTRLCMD_INIT_RSP: Called initially when the layer below * has finished initialization * * @CAIF_CTRLCMD_DEINIT_RSP: Called when de-initialization is * complete * * @CAIF_CTRLCMD_INIT_FAIL_RSP: Called if initialization fails * * @_CAIF_CTRLCMD_PHYIF_FLOW_OFF_IND: CAIF Link layer temporarily cannot * send more packets. * @_CAIF_CTRLCMD_PHYIF_FLOW_ON_IND: Called if CAIF Link layer is able * to send packets again. * @_CAIF_CTRLCMD_PHYIF_DOWN_IND: Called if CAIF Link layer is going * down. * * These commands are sent upwards in the CAIF stack to the CAIF Client. * They are used for signaling originating from the modem or CAIF Link Layer. * These are either responses (*_RSP) or events (*_IND). */ enum caif_ctrlcmd { … }; /** * enum caif_modemcmd - Modem Control Signaling, sent from CAIF Client * to the CAIF Link Layer or modem. * * @CAIF_MODEMCMD_FLOW_ON_REQ: Flow Control is ON, transmit function * can start sending data. * * @CAIF_MODEMCMD_FLOW_OFF_REQ: Flow Control is OFF, transmit function * should stop sending data. * * @_CAIF_MODEMCMD_PHYIF_USEFULL: Notify physical layer that it is in use * * @_CAIF_MODEMCMD_PHYIF_USELESS: Notify physical layer that it is * no longer in use. * * These are requests sent 'downwards' in the stack. * Flow ON, OFF can be indicated to the modem. */ enum caif_modemcmd { … }; /** * enum caif_direction - CAIF Packet Direction. * Indicate if a packet is to be sent out or to be received in. * @CAIF_DIR_IN: Incoming packet received. * @CAIF_DIR_OUT: Outgoing packet to be transmitted. */ enum caif_direction { … }; /** * struct cflayer - CAIF Stack layer. * Defines the framework for the CAIF Core Stack. * @up: Pointer up to the layer above. * @dn: Pointer down to the layer below. * @node: List node used when layer participate in a list. * @receive: Packet receive function. * @transmit: Packet transmit funciton. * @ctrlcmd: Used for control signalling upwards in the stack. * @modemcmd: Used for control signaling downwards in the stack. * @id: The identity of this layer * @name: Name of the layer. * * This structure defines the layered structure in CAIF. * * It defines CAIF layering structure, used by all CAIF Layers and the * layers interfacing CAIF. * * In order to integrate with CAIF an adaptation layer on top of the CAIF stack * and PHY layer below the CAIF stack * must be implemented. These layer must follow the design principles below. * * Principles for layering of protocol layers: * - All layers must use this structure. If embedding it, then place this * structure first in the layer specific structure. * * - Each layer should not depend on any others layer's private data. * * - In order to send data upwards do * layer->up->receive(layer->up, packet); * * - In order to send data downwards do * layer->dn->transmit(layer->dn, info, packet); */ struct cflayer { … }; /** * layer_set_up() - Set the up pointer for a specified layer. * @layr: Layer where up pointer shall be set. * @above: Layer above. */ #define layer_set_up(layr, above) … /** * layer_set_dn() - Set the down pointer for a specified layer. * @layr: Layer where down pointer shall be set. * @below: Layer below. */ #define layer_set_dn(layr, below) … /** * struct dev_info - Physical Device info information about physical layer. * @dev: Pointer to native physical device. * @id: Physical ID of the physical connection used by the * logical CAIF connection. Used by service layers to * identify their physical id to Caif MUX (CFMUXL)so * that the MUX can add the correct physical ID to the * packet. */ struct dev_info { … }; /** * struct caif_payload_info - Payload information embedded in packet (sk_buff). * * @dev_info: Information about the receiving device. * * @hdr_len: Header length, used to align pay load on 32bit boundary. * * @channel_id: Channel ID of the logical CAIF connection. * Used by mux to insert channel id into the caif packet. */ struct caif_payload_info { … }; #endif /* CAIF_LAYER_H_ */