~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/net/caif/caif_dev.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-only */
  2 /*
  3  * Copyright (C) ST-Ericsson AB 2010
  4  * Author:      Sjur Brendeland
  5  */
  6 
  7 #ifndef CAIF_DEV_H_
  8 #define CAIF_DEV_H_
  9 
 10 #include <net/caif/caif_layer.h>
 11 #include <net/caif/cfcnfg.h>
 12 #include <net/caif/caif_device.h>
 13 #include <linux/caif/caif_socket.h>
 14 #include <linux/if.h>
 15 #include <linux/net.h>
 16 
 17 /**
 18  * struct caif_param - CAIF parameters.
 19  * @size:       Length of data
 20  * @data:       Binary Data Blob
 21  */
 22 struct caif_param {
 23         u16  size;
 24         u8   data[256];
 25 };
 26 
 27 /**
 28  * struct caif_connect_request - Request data for CAIF channel setup.
 29  * @protocol:           Type of CAIF protocol to use (at, datagram etc)
 30  * @sockaddr:           Socket address to connect.
 31  * @priority:           Priority of the connection.
 32  * @link_selector:      Link selector (high bandwidth or low latency)
 33  * @ifindex:            kernel index of the interface.
 34  * @param:              Connect Request parameters (CAIF_SO_REQ_PARAM).
 35  *
 36  * This struct is used when connecting a CAIF channel.
 37  * It contains all CAIF channel configuration options.
 38  */
 39 struct caif_connect_request {
 40         enum caif_protocol_type protocol;
 41         struct sockaddr_caif sockaddr;
 42         enum caif_channel_priority priority;
 43         enum caif_link_selector link_selector;
 44         int ifindex;
 45         struct caif_param param;
 46 };
 47 
 48 /**
 49  * caif_connect_client - Connect a client to CAIF Core Stack.
 50  * @config:             Channel setup parameters, specifying what address
 51  *                      to connect on the Modem.
 52  * @client_layer:       User implementation of client layer. This layer
 53  *                      MUST have receive and control callback functions
 54  *                      implemented.
 55  * @ifindex:            Link layer interface index used for this connection.
 56  * @headroom:           Head room needed by CAIF protocol.
 57  * @tailroom:           Tail room needed by CAIF protocol.
 58  *
 59  * This function connects a CAIF channel. The Client must implement
 60  * the struct cflayer. This layer represents the Client layer and holds
 61  * receive functions and control callback functions. Control callback
 62  * function will receive information about connect/disconnect responses,
 63  * flow control etc (see enum caif_control).
 64  * E.g. CAIF Socket will call this function for each socket it connects
 65  * and have one client_layer instance for each socket.
 66  */
 67 int caif_connect_client(struct net *net,
 68                         struct caif_connect_request *conn_req,
 69                         struct cflayer *client_layer, int *ifindex,
 70                         int *headroom, int *tailroom);
 71 
 72 /**
 73  * caif_disconnect_client - Disconnects a client from the CAIF stack.
 74  *
 75  * @client_layer: Client layer to be disconnected.
 76  */
 77 int caif_disconnect_client(struct net *net, struct cflayer *client_layer);
 78 
 79 
 80 /**
 81  * caif_client_register_refcnt - register ref-count functions provided by client.
 82  *
 83  * @adapt_layer: Client layer using CAIF Stack.
 84  * @hold:       Function provided by client layer increasing ref-count
 85  * @put:        Function provided by client layer decreasing ref-count
 86  *
 87  * Client of the CAIF Stack must register functions for reference counting.
 88  * These functions are called by the CAIF Stack for every upstream packet,
 89  * and must therefore be implemented efficiently.
 90  *
 91  * Client should call caif_free_client when reference count degrease to zero.
 92  */
 93 
 94 void caif_client_register_refcnt(struct cflayer *adapt_layer,
 95                                         void (*hold)(struct cflayer *lyr),
 96                                         void (*put)(struct cflayer *lyr));
 97 /**
 98  * caif_free_client - Free memory used to manage the client in the CAIF Stack.
 99  *
100  * @client_layer: Client layer to be removed.
101  *
102  * This function must be called from client layer in order to free memory.
103  * Caller must guarantee that no packets are in flight upstream when calling
104  * this function.
105  */
106 void caif_free_client(struct cflayer *adap_layer);
107 
108 /**
109  * struct caif_enroll_dev - Enroll a net-device as a CAIF Link layer
110  * @dev:                Network device to enroll.
111  * @caifdev:            Configuration information from CAIF Link Layer
112  * @link_support:       Link layer support layer
113  * @head_room:          Head room needed by link support layer
114  * @layer:              Lowest layer in CAIF stack
115  * @rcv_fun:            Receive function for CAIF stack.
116  *
117  * This function enroll a CAIF link layer into CAIF Stack and
118  * expects the interface to be able to handle CAIF payload.
119  * The link_support layer is used to add any Link Layer specific
120  * framing.
121  */
122 int caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev,
123                         struct cflayer *link_support, int head_room,
124                         struct cflayer **layer, int (**rcv_func)(
125                                 struct sk_buff *, struct net_device *,
126                                 struct packet_type *, struct net_device *));
127 
128 #endif /* CAIF_DEV_H_ */
129 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php