diff options
Diffstat (limited to 'include/net/caif/cfcnfg.h')
| -rw-r--r-- | include/net/caif/cfcnfg.h | 140 | 
1 files changed, 140 insertions, 0 deletions
diff --git a/include/net/caif/cfcnfg.h b/include/net/caif/cfcnfg.h new file mode 100644 index 00000000000..9fc2fc20b88 --- /dev/null +++ b/include/net/caif/cfcnfg.h @@ -0,0 +1,140 @@ +/* + * Copyright (C) ST-Ericsson AB 2010 + * Author:	Sjur Brendeland/sjur.brandeland@stericsson.com + * License terms: GNU General Public License (GPL) version 2 + */ + +#ifndef CFCNFG_H_ +#define CFCNFG_H_ +#include <linux/spinlock.h> +#include <net/caif/caif_layer.h> +#include <net/caif/cfctrl.h> + +struct cfcnfg; + +/** + * enum cfcnfg_phy_type -  Types of physical layers defined in CAIF Stack + * + * @CFPHYTYPE_FRAG:	Fragmented frames physical interface. + * @CFPHYTYPE_CAIF:	Generic CAIF physical interface + */ +enum cfcnfg_phy_type { +	CFPHYTYPE_FRAG = 1, +	CFPHYTYPE_CAIF, +	CFPHYTYPE_MAX +}; + +/** + * enum cfcnfg_phy_preference - Physical preference HW Abstraction + * + * @CFPHYPREF_UNSPECIFIED:	Default physical interface + * + * @CFPHYPREF_LOW_LAT:		Default physical interface for low-latency + *				traffic + * @CFPHYPREF_HIGH_BW:		Default physical interface for high-bandwidth + *				traffic + * @CFPHYPREF_LOOP:		TEST only Loopback interface simulating modem + *				responses. + * + */ +enum cfcnfg_phy_preference { +	CFPHYPREF_UNSPECIFIED, +	CFPHYPREF_LOW_LAT, +	CFPHYPREF_HIGH_BW, +	CFPHYPREF_LOOP +}; + +/** + * cfcnfg_create() - Create the CAIF configuration object. + */ +struct cfcnfg *cfcnfg_create(void); + +/** + * cfcnfg_remove() -  Remove the CFCNFG object + * @cfg: config object + */ +void cfcnfg_remove(struct cfcnfg *cfg); + +/** + * cfcnfg_add_phy_layer() - Adds a physical layer to the CAIF stack. + * @cnfg:	Pointer to a CAIF configuration object, created by + *		cfcnfg_create(). + * @phy_type:	Specifies the type of physical interface, e.g. + *			CFPHYTYPE_FRAG. + * @dev:	Pointer to link layer device + * @phy_layer:	Specify the physical layer. The transmit function + *		MUST be set in the structure. + * @phyid:	The assigned physical ID for this layer, used in + *		cfcnfg_add_adapt_layer to specify PHY for the link. + * @pref:	The phy (link layer) preference. + * @fcs:	Specify if checksum is used in CAIF Framing Layer. + * @stx:	Specify if Start Of Frame eXtention is used. + */ + +void +cfcnfg_add_phy_layer(struct cfcnfg *cnfg, enum cfcnfg_phy_type phy_type, +		     void *dev, struct cflayer *phy_layer, u16 *phyid, +		     enum cfcnfg_phy_preference pref, +		     bool fcs, bool stx); + +/** + * cfcnfg_del_phy_layer - Deletes an phy layer from the CAIF stack. + * + * @cnfg:	Pointer to a CAIF configuration object, created by + *		cfcnfg_create(). + * @phy_layer:	Adaptation layer to be removed. + */ +int cfcnfg_del_phy_layer(struct cfcnfg *cnfg, struct cflayer *phy_layer); + +/** + * cfcnfg_disconn_adapt_layer - Disconnects an adaptation layer. + * + * @cnfg:	Pointer to a CAIF configuration object, created by + *		cfcnfg_create(). + * @adap_layer: Adaptation layer to be removed. + */ +int cfcnfg_disconn_adapt_layer(struct cfcnfg *cnfg, +			struct cflayer *adap_layer); + +/** + * cfcnfg_release_adap_layer - Used by client to release the adaptation layer. + * + * @adap_layer: Adaptation layer. + */ +void cfcnfg_release_adap_layer(struct cflayer *adap_layer); + +/** + * cfcnfg_add_adaptation_layer - Add an adaptation layer to the CAIF stack. + * + * The adaptation Layer is where the interface to application or higher-level + * driver functionality is implemented. + * + * @cnfg:		Pointer to a CAIF configuration object, created by + *			cfcnfg_create(). + * @param:		Link setup parameters. + * @adap_layer:		Specify the adaptation layer; the receive and + *			flow-control functions MUST be set in the structure. + * + */ +int cfcnfg_add_adaptation_layer(struct cfcnfg *cnfg, +			    struct cfctrl_link_param *param, +			    struct cflayer *adap_layer); + +/** + * cfcnfg_get_phyid() - Get physical ID, given type. + * Returns one of the physical interfaces matching the given type. + * Zero if no match is found. + * @cnfg:	Configuration object + * @phy_pref:	Caif Link Layer preference + */ +struct dev_info *cfcnfg_get_phyid(struct cfcnfg *cnfg, +		     enum cfcnfg_phy_preference phy_pref); + +/** + * cfcnfg_get_named() - Get the Physical Identifier of CAIF Link Layer + * @cnfg:	Configuration object + * @name:	Name of the Physical Layer (Caif Link Layer) + */ +int cfcnfg_get_named(struct cfcnfg *cnfg, char *name); + +#endif				/* CFCNFG_H_ */  |