linux/include/net/caif/cfsrvl.h
<<
>>
Prefs
   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 CFSRVL_H_
   8#define CFSRVL_H_
   9#include <linux/list.h>
  10#include <linux/stddef.h>
  11#include <linux/types.h>
  12#include <linux/kref.h>
  13#include <linux/rculist.h>
  14
  15struct cfsrvl {
  16        struct cflayer layer;
  17        bool open;
  18        bool phy_flow_on;
  19        bool modem_flow_on;
  20        bool supports_flowctrl;
  21        void (*release)(struct cflayer *layer);
  22        struct dev_info dev_info;
  23        void (*hold)(struct cflayer *lyr);
  24        void (*put)(struct cflayer *lyr);
  25        struct rcu_head rcu;
  26};
  27
  28struct cflayer *cfvei_create(u8 linkid, struct dev_info *dev_info);
  29struct cflayer *cfdgml_create(u8 linkid, struct dev_info *dev_info);
  30struct cflayer *cfutill_create(u8 linkid, struct dev_info *dev_info);
  31struct cflayer *cfvidl_create(u8 linkid, struct dev_info *dev_info);
  32struct cflayer *cfrfml_create(u8 linkid, struct dev_info *dev_info,
  33                                int mtu_size);
  34struct cflayer *cfdbgl_create(u8 linkid, struct dev_info *dev_info);
  35
  36void cfsrvl_ctrlcmd(struct cflayer *layr, enum caif_ctrlcmd ctrl,
  37                     int phyid);
  38
  39bool cfsrvl_phyid_match(struct cflayer *layer, int phyid);
  40
  41void cfsrvl_init(struct cfsrvl *service,
  42                        u8 channel_id,
  43                        struct dev_info *dev_info,
  44                        bool supports_flowctrl);
  45bool cfsrvl_ready(struct cfsrvl *service, int *err);
  46u8 cfsrvl_getphyid(struct cflayer *layer);
  47
  48static inline void cfsrvl_get(struct cflayer *layr)
  49{
  50        struct cfsrvl *s = container_of(layr, struct cfsrvl, layer);
  51        if (layr == NULL || layr->up == NULL || s->hold == NULL)
  52                return;
  53
  54        s->hold(layr->up);
  55}
  56
  57static inline void cfsrvl_put(struct cflayer *layr)
  58{
  59        struct cfsrvl *s = container_of(layr, struct cfsrvl, layer);
  60        if (layr == NULL || layr->up == NULL || s->hold == NULL)
  61                return;
  62
  63        s->put(layr->up);
  64}
  65#endif                          /* CFSRVL_H_ */
  66