diff options
Diffstat (limited to 'include/net/caif/cfsrvl.h')
| -rw-r--r-- | include/net/caif/cfsrvl.h | 22 | 
1 files changed, 22 insertions, 0 deletions
diff --git a/include/net/caif/cfsrvl.h b/include/net/caif/cfsrvl.h index b2a12db20cd..2dc9eb193ec 100644 --- a/include/net/caif/cfsrvl.h +++ b/include/net/caif/cfsrvl.h @@ -9,14 +9,18 @@  #include <linux/list.h>  #include <linux/stddef.h>  #include <linux/types.h> +#include <linux/kref.h> +  struct cfsrvl {  	struct cflayer layer;  	bool open;  	bool phy_flow_on;  	bool modem_flow_on;  	struct dev_info dev_info; +	struct kref ref;  }; +void cfsrvl_release(struct kref *kref);  struct cflayer *cfvei_create(u8 linkid, struct dev_info *dev_info);  struct cflayer *cfdgml_create(u8 linkid, struct dev_info *dev_info);  struct cflayer *cfutill_create(u8 linkid, struct dev_info *dev_info); @@ -31,4 +35,22 @@ void cfsrvl_init(struct cfsrvl *service,  bool cfsrvl_ready(struct cfsrvl *service, int *err);  u8 cfsrvl_getphyid(struct cflayer *layer); +static inline void cfsrvl_get(struct cflayer *layr) +{ +	struct cfsrvl *s; +	if (layr == NULL) +		return; +	s = container_of(layr, struct cfsrvl, layer); +	kref_get(&s->ref); +} + +static inline void cfsrvl_put(struct cflayer *layr) +{ +	struct cfsrvl *s; +	if (layr == NULL) +		return; +	s = container_of(layr, struct cfsrvl, layer); +	kref_put(&s->ref, cfsrvl_release); +} +  #endif				/* CFSRVL_H_ */  |