109009f30SSjur Braendeland /* 209009f30SSjur Braendeland * Copyright (C) ST-Ericsson AB 2010 309009f30SSjur Braendeland * Author: Sjur Brendeland/sjur.brandeland@stericsson.com 409009f30SSjur Braendeland * License terms: GNU General Public License (GPL) version 2 509009f30SSjur Braendeland */ 609009f30SSjur Braendeland 709009f30SSjur Braendeland #ifndef CFCNFG_H_ 809009f30SSjur Braendeland #define CFCNFG_H_ 909009f30SSjur Braendeland #include <linux/spinlock.h> 1009009f30SSjur Braendeland #include <net/caif/caif_layer.h> 1109009f30SSjur Braendeland #include <net/caif/cfctrl.h> 1209009f30SSjur Braendeland 1309009f30SSjur Braendeland struct cfcnfg; 1409009f30SSjur Braendeland 1509009f30SSjur Braendeland /** 1609009f30SSjur Braendeland * enum cfcnfg_phy_type - Types of physical layers defined in CAIF Stack 1709009f30SSjur Braendeland * 1809009f30SSjur Braendeland * @CFPHYTYPE_FRAG: Fragmented frames physical interface. 1909009f30SSjur Braendeland * @CFPHYTYPE_CAIF: Generic CAIF physical interface 2009009f30SSjur Braendeland */ 2109009f30SSjur Braendeland enum cfcnfg_phy_type { 2209009f30SSjur Braendeland CFPHYTYPE_FRAG = 1, 2309009f30SSjur Braendeland CFPHYTYPE_CAIF, 2409009f30SSjur Braendeland CFPHYTYPE_MAX 2509009f30SSjur Braendeland }; 2609009f30SSjur Braendeland 2709009f30SSjur Braendeland /** 2809009f30SSjur Braendeland * enum cfcnfg_phy_preference - Physical preference HW Abstraction 2909009f30SSjur Braendeland * 3009009f30SSjur Braendeland * @CFPHYPREF_UNSPECIFIED: Default physical interface 3109009f30SSjur Braendeland * 3209009f30SSjur Braendeland * @CFPHYPREF_LOW_LAT: Default physical interface for low-latency 3309009f30SSjur Braendeland * traffic 3409009f30SSjur Braendeland * @CFPHYPREF_HIGH_BW: Default physical interface for high-bandwidth 3509009f30SSjur Braendeland * traffic 3609009f30SSjur Braendeland * @CFPHYPREF_LOOP: TEST only Loopback interface simulating modem 3709009f30SSjur Braendeland * responses. 3809009f30SSjur Braendeland * 3909009f30SSjur Braendeland */ 4009009f30SSjur Braendeland enum cfcnfg_phy_preference { 4109009f30SSjur Braendeland CFPHYPREF_UNSPECIFIED, 4209009f30SSjur Braendeland CFPHYPREF_LOW_LAT, 4309009f30SSjur Braendeland CFPHYPREF_HIGH_BW, 4409009f30SSjur Braendeland CFPHYPREF_LOOP 4509009f30SSjur Braendeland }; 4609009f30SSjur Braendeland 4709009f30SSjur Braendeland /** 4809009f30SSjur Braendeland * cfcnfg_create() - Create the CAIF configuration object. 4909009f30SSjur Braendeland */ 5009009f30SSjur Braendeland struct cfcnfg *cfcnfg_create(void); 5109009f30SSjur Braendeland 5209009f30SSjur Braendeland /** 5309009f30SSjur Braendeland * cfcnfg_remove() - Remove the CFCNFG object 5409009f30SSjur Braendeland * @cfg: config object 5509009f30SSjur Braendeland */ 5609009f30SSjur Braendeland void cfcnfg_remove(struct cfcnfg *cfg); 5709009f30SSjur Braendeland 5809009f30SSjur Braendeland /** 5909009f30SSjur Braendeland * cfcnfg_add_phy_layer() - Adds a physical layer to the CAIF stack. 6009009f30SSjur Braendeland * @cnfg: Pointer to a CAIF configuration object, created by 6109009f30SSjur Braendeland * cfcnfg_create(). 6209009f30SSjur Braendeland * @phy_type: Specifies the type of physical interface, e.g. 6309009f30SSjur Braendeland * CFPHYTYPE_FRAG. 6409009f30SSjur Braendeland * @dev: Pointer to link layer device 6509009f30SSjur Braendeland * @phy_layer: Specify the physical layer. The transmit function 6609009f30SSjur Braendeland * MUST be set in the structure. 6709009f30SSjur Braendeland * @phyid: The assigned physical ID for this layer, used in 6809009f30SSjur Braendeland * cfcnfg_add_adapt_layer to specify PHY for the link. 6909009f30SSjur Braendeland * @pref: The phy (link layer) preference. 7009009f30SSjur Braendeland * @fcs: Specify if checksum is used in CAIF Framing Layer. 7109009f30SSjur Braendeland * @stx: Specify if Start Of Frame eXtention is used. 7209009f30SSjur Braendeland */ 7309009f30SSjur Braendeland 7409009f30SSjur Braendeland void 7509009f30SSjur Braendeland cfcnfg_add_phy_layer(struct cfcnfg *cnfg, enum cfcnfg_phy_type phy_type, 7609009f30SSjur Braendeland void *dev, struct cflayer *phy_layer, u16 *phyid, 7709009f30SSjur Braendeland enum cfcnfg_phy_preference pref, 7809009f30SSjur Braendeland bool fcs, bool stx); 7909009f30SSjur Braendeland 8009009f30SSjur Braendeland /** 8109009f30SSjur Braendeland * cfcnfg_del_phy_layer - Deletes an phy layer from the CAIF stack. 8209009f30SSjur Braendeland * 8309009f30SSjur Braendeland * @cnfg: Pointer to a CAIF configuration object, created by 8409009f30SSjur Braendeland * cfcnfg_create(). 8509009f30SSjur Braendeland * @phy_layer: Adaptation layer to be removed. 8609009f30SSjur Braendeland */ 8709009f30SSjur Braendeland int cfcnfg_del_phy_layer(struct cfcnfg *cnfg, struct cflayer *phy_layer); 8809009f30SSjur Braendeland 8909009f30SSjur Braendeland /** 9009009f30SSjur Braendeland * cfcnfg_del_adapt_layer - Deletes an adaptation layer from the CAIF stack. 9109009f30SSjur Braendeland * 9209009f30SSjur Braendeland * @cnfg: Pointer to a CAIF configuration object, created by 9309009f30SSjur Braendeland * cfcnfg_create(). 9409009f30SSjur Braendeland * @adap_layer: Adaptation layer to be removed. 9509009f30SSjur Braendeland */ 9609009f30SSjur Braendeland int cfcnfg_del_adapt_layer(struct cfcnfg *cnfg, struct cflayer *adap_layer); 9709009f30SSjur Braendeland 9809009f30SSjur Braendeland /** 9909009f30SSjur Braendeland * cfcnfg_add_adaptation_layer - Add an adaptation layer to the CAIF stack. 10009009f30SSjur Braendeland * 10109009f30SSjur Braendeland * The adaptation Layer is where the interface to application or higher-level 10209009f30SSjur Braendeland * driver functionality is implemented. 10309009f30SSjur Braendeland * 10409009f30SSjur Braendeland * @cnfg: Pointer to a CAIF configuration object, created by 10509009f30SSjur Braendeland * cfcnfg_create(). 10609009f30SSjur Braendeland * @param: Link setup parameters. 10709009f30SSjur Braendeland * @adap_layer: Specify the adaptation layer; the receive and 10809009f30SSjur Braendeland * flow-control functions MUST be set in the structure. 10909009f30SSjur Braendeland * 11009009f30SSjur Braendeland */ 11109009f30SSjur Braendeland int 11209009f30SSjur Braendeland cfcnfg_add_adaptation_layer(struct cfcnfg *cnfg, 11309009f30SSjur Braendeland struct cfctrl_link_param *param, 11409009f30SSjur Braendeland struct cflayer *adap_layer); 11509009f30SSjur Braendeland 11609009f30SSjur Braendeland /** 11709009f30SSjur Braendeland * cfcnfg_get_phyid() - Get physical ID, given type. 11809009f30SSjur Braendeland * Returns one of the physical interfaces matching the given type. 11909009f30SSjur Braendeland * Zero if no match is found. 12009009f30SSjur Braendeland * @cnfg: Configuration object 12109009f30SSjur Braendeland * @phy_pref: Caif Link Layer preference 12209009f30SSjur Braendeland */ 12309009f30SSjur Braendeland struct dev_info *cfcnfg_get_phyid(struct cfcnfg *cnfg, 12409009f30SSjur Braendeland enum cfcnfg_phy_preference phy_pref); 12509009f30SSjur Braendeland 12609009f30SSjur Braendeland /** 12709009f30SSjur Braendeland * cfcnfg_get_named() - Get the Physical Identifier of CAIF Link Layer 12809009f30SSjur Braendeland * @cnfg: Configuration object 12909009f30SSjur Braendeland * @name: Name of the Physical Layer (Caif Link Layer) 13009009f30SSjur Braendeland */ 13109009f30SSjur Braendeland int cfcnfg_get_named(struct cfcnfg *cnfg, char *name); 13209009f30SSjur Braendeland 13309009f30SSjur Braendeland #endif /* CFCNFG_H_ */ 134