| xj | b04a402 | 2021-11-25 15:01:52 +0800 | [diff] [blame] | 1 | /* | 
|  | 2 | * Copyright (C) ST-Ericsson AB 2010 | 
|  | 3 | * Author:	Sjur Brendeland | 
|  | 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_preference - Physical preference HW Abstraction | 
|  | 18 | * | 
|  | 19 | * @CFPHYPREF_UNSPECIFIED:	Default physical interface | 
|  | 20 | * | 
|  | 21 | * @CFPHYPREF_LOW_LAT:		Default physical interface for low-latency | 
|  | 22 | *				traffic | 
|  | 23 | * @CFPHYPREF_HIGH_BW:		Default physical interface for high-bandwidth | 
|  | 24 | *				traffic | 
|  | 25 | * @CFPHYPREF_LOOP:		TEST only Loopback interface simulating modem | 
|  | 26 | *				responses. | 
|  | 27 | * | 
|  | 28 | */ | 
|  | 29 | enum cfcnfg_phy_preference { | 
|  | 30 | CFPHYPREF_UNSPECIFIED, | 
|  | 31 | CFPHYPREF_LOW_LAT, | 
|  | 32 | CFPHYPREF_HIGH_BW, | 
|  | 33 | CFPHYPREF_LOOP | 
|  | 34 | }; | 
|  | 35 |  | 
|  | 36 | /** | 
|  | 37 | * cfcnfg_create() - Get the CAIF configuration object given network. | 
|  | 38 | * @net:	Network for the CAIF configuration object. | 
|  | 39 | */ | 
|  | 40 | struct cfcnfg *get_cfcnfg(struct net *net); | 
|  | 41 |  | 
|  | 42 | /** | 
|  | 43 | * cfcnfg_create() - Create the CAIF configuration object. | 
|  | 44 | */ | 
|  | 45 | struct cfcnfg *cfcnfg_create(void); | 
|  | 46 |  | 
|  | 47 | /** | 
|  | 48 | * cfcnfg_remove() -  Remove the CFCNFG object | 
|  | 49 | * @cfg: config object | 
|  | 50 | */ | 
|  | 51 | void cfcnfg_remove(struct cfcnfg *cfg); | 
|  | 52 |  | 
|  | 53 | /** | 
|  | 54 | * cfcnfg_add_phy_layer() - Adds a physical layer to the CAIF stack. | 
|  | 55 | * @cnfg:	Pointer to a CAIF configuration object, created by | 
|  | 56 | *		cfcnfg_create(). | 
|  | 57 | * @dev:	Pointer to link layer device | 
|  | 58 | * @phy_layer:	Specify the physical layer. The transmit function | 
|  | 59 | *		MUST be set in the structure. | 
|  | 60 | * @pref:	The phy (link layer) preference. | 
|  | 61 | * @link_support: Protocol implementation for link layer specific protocol. | 
|  | 62 | * @fcs:	Specify if checksum is used in CAIF Framing Layer. | 
|  | 63 | * @head_room:	Head space needed by link specific protocol. | 
|  | 64 | */ | 
|  | 65 | void | 
|  | 66 | cfcnfg_add_phy_layer(struct cfcnfg *cnfg, | 
|  | 67 | struct net_device *dev, struct cflayer *phy_layer, | 
|  | 68 | enum cfcnfg_phy_preference pref, | 
|  | 69 | struct cflayer *link_support, | 
|  | 70 | bool fcs, int head_room); | 
|  | 71 |  | 
|  | 72 | /** | 
|  | 73 | * cfcnfg_del_phy_layer - Deletes an phy layer from the CAIF stack. | 
|  | 74 | * | 
|  | 75 | * @cnfg:	Pointer to a CAIF configuration object, created by | 
|  | 76 | *		cfcnfg_create(). | 
|  | 77 | * @phy_layer:	Adaptation layer to be removed. | 
|  | 78 | */ | 
|  | 79 | int cfcnfg_del_phy_layer(struct cfcnfg *cnfg, struct cflayer *phy_layer); | 
|  | 80 |  | 
|  | 81 | /** | 
|  | 82 | * cfcnfg_set_phy_state() - Set the state of the physical interface device. | 
|  | 83 | * @cnfg:	Configuration object | 
|  | 84 | * @phy_layer:	Physical Layer representation | 
|  | 85 | * @up:	State of device | 
|  | 86 | */ | 
|  | 87 | int cfcnfg_set_phy_state(struct cfcnfg *cnfg, struct cflayer *phy_layer, | 
|  | 88 | bool up); | 
|  | 89 |  | 
|  | 90 | #endif				/* CFCNFG_H_ */ |