xref: /openbmc/linux/include/net/caif/cfcnfg.h (revision 7c18d220)
1 /*
2  * Copyright (C) ST-Ericsson AB 2010
3  * Author:	Sjur Brendeland/sjur.brandeland@stericsson.com
4  * License terms: GNU General Public License (GPL) version 2
5  */
6 
7 #ifndef CFCNFG_H_
8 #define CFCNFG_H_
9 #include <linux/spinlock.h>
10 #include <linux/netdevice.h>
11 #include <net/caif/caif_layer.h>
12 #include <net/caif/cfctrl.h>
13 
14 struct cfcnfg;
15 
16 /**
17  * enum cfcnfg_phy_type -  Types of physical layers defined in CAIF Stack
18  *
19  * @CFPHYTYPE_FRAG:	Fragmented frames physical interface.
20  * @CFPHYTYPE_CAIF:	Generic CAIF physical interface
21  */
22 enum cfcnfg_phy_type {
23 	CFPHYTYPE_FRAG = 1,
24 	CFPHYTYPE_CAIF,
25 	CFPHYTYPE_MAX
26 };
27 
28 /**
29  * enum cfcnfg_phy_preference - Physical preference HW Abstraction
30  *
31  * @CFPHYPREF_UNSPECIFIED:	Default physical interface
32  *
33  * @CFPHYPREF_LOW_LAT:		Default physical interface for low-latency
34  *				traffic
35  * @CFPHYPREF_HIGH_BW:		Default physical interface for high-bandwidth
36  *				traffic
37  * @CFPHYPREF_LOOP:		TEST only Loopback interface simulating modem
38  *				responses.
39  *
40  */
41 enum cfcnfg_phy_preference {
42 	CFPHYPREF_UNSPECIFIED,
43 	CFPHYPREF_LOW_LAT,
44 	CFPHYPREF_HIGH_BW,
45 	CFPHYPREF_LOOP
46 };
47 
48 /**
49  * cfcnfg_create() - Get the CAIF configuration object given network.
50  * @net:	Network for the CAIF configuration object.
51  */
52 struct cfcnfg *get_cfcnfg(struct net *net);
53 
54 /**
55  * cfcnfg_create() - Create the CAIF configuration object.
56  */
57 struct cfcnfg *cfcnfg_create(void);
58 
59 /**
60  * cfcnfg_remove() -  Remove the CFCNFG object
61  * @cfg: config object
62  */
63 void cfcnfg_remove(struct cfcnfg *cfg);
64 
65 /**
66  * cfcnfg_add_phy_layer() - Adds a physical layer to the CAIF stack.
67  * @cnfg:	Pointer to a CAIF configuration object, created by
68  *		cfcnfg_create().
69  * @phy_type:	Specifies the type of physical interface, e.g.
70  *			CFPHYTYPE_FRAG.
71  * @dev:	Pointer to link layer device
72  * @phy_layer:	Specify the physical layer. The transmit function
73  *		MUST be set in the structure.
74  * @pref:	The phy (link layer) preference.
75  * @link_support: Protocol implementation for link layer specific protocol.
76  * @fcs:	Specify if checksum is used in CAIF Framing Layer.
77  * @head_room:	Head space needed by link specific protocol.
78  */
79 void
80 cfcnfg_add_phy_layer(struct cfcnfg *cnfg,
81 		     struct net_device *dev, struct cflayer *phy_layer,
82 		     enum cfcnfg_phy_preference pref,
83 		     struct cflayer *link_support,
84 		     bool fcs, int head_room);
85 
86 /**
87  * cfcnfg_del_phy_layer - Deletes an phy layer from the CAIF stack.
88  *
89  * @cnfg:	Pointer to a CAIF configuration object, created by
90  *		cfcnfg_create().
91  * @phy_layer:	Adaptation layer to be removed.
92  */
93 int cfcnfg_del_phy_layer(struct cfcnfg *cnfg, struct cflayer *phy_layer);
94 
95 /**
96  * cfcnfg_set_phy_state() - Set the state of the physical interface device.
97  * @cnfg:	Configuration object
98  * @phy_layer:	Physical Layer representation
99  * @up:	State of device
100  */
101 int cfcnfg_set_phy_state(struct cfcnfg *cnfg, struct cflayer *phy_layer,
102 				bool up);
103 
104 #endif				/* CFCNFG_H_ */
105