Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cfctrl.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) ST-Ericsson AB 2010
3  * Author: Sjur Brendeland/[email protected]
4  * License terms: GNU General Public License (GPL) version 2
5  */
6 
7 #ifndef CFCTRL_H_
8 #define CFCTRL_H_
9 #include <net/caif/caif_layer.h>
10 #include <net/caif/cfsrvl.h>
11 
12 /* CAIF Control packet commands */
13 enum cfctrl_cmd {
25 };
26 
27 /* Channel types */
28 enum cfctrl_srv {
37 };
38 
39 #define CFCTRL_RSP_BIT 0x20
40 #define CFCTRL_ERR_BIT 0x10
41 
42 struct cfctrl_rsp {
43  void (*linksetup_rsp)(struct cflayer *layer, u8 linkid,
44  enum cfctrl_srv serv, u8 phyid,
45  struct cflayer *adapt_layer);
46  void (*linkdestroy_rsp)(struct cflayer *layer, u8 linkid);
53  void (*reject_rsp)(struct cflayer *layer, u8 linkid,
54  struct cflayer *client_layer);
55 };
56 
57 /* Link Setup Parameters for CAIF-Links. */
59  enum cfctrl_srv linktype;/* (T3,T0) Type of Channel */
60  u8 priority; /* (P4,P0) Priority of the channel */
61  u8 phyid; /* (U2-U0) Physical interface to connect */
62  u8 endpoint; /* (E1,E0) Endpoint for data channels */
63  u8 chtype; /* (H1,H0) Channel-Type, applies to
64  * VEI, DEBUG */
65  union {
66  struct {
67  u8 connid; /* (D7,D0) Video LinkId */
68  } video;
69 
70  struct {
71  u32 connid; /* (N31,Ngit0) Connection ID used
72  * for Datagram */
73  } datagram;
74 
75  struct {
76  u32 connid; /* Connection ID used for RFM */
77  char volume[20]; /* Volume to mount for RFM */
78  } rfm; /* Configuration for RFM */
79 
80  struct {
81  u16 fifosize_kb; /* Psock FIFO size in KB */
82  u16 fifosize_bufs; /* Psock # signal buffers */
83  char name[16]; /* Name of the PSOCK service */
84  u8 params[255]; /* Link setup Parameters> */
85  u16 paramlen; /* Length of Link Setup
86  * Parameters */
87  } utility; /* Configuration for Utility Links (Psock) */
88  } u;
89 };
90 
91 /* This structure is used internally in CFCTRL */
98  struct list_head list;
99 };
100 
101 struct cfctrl {
102  struct cfsrvl serv;
103  struct cfctrl_rsp res;
106  struct list_head list;
107  /* Protects from simultaneous access to first_req list */
109 #ifndef CAIF_NO_LOOP
111  int loop_linkused[256];
112  /* Protects simultaneous access to loop_linkid and loop_linkused */
114 #endif
115 
116 };
117 
118 void cfctrl_enum_req(struct cflayer *cfctrl, u8 physlinkid);
120  struct cfctrl_link_param *param,
121  struct cflayer *user_layer);
122 int cfctrl_linkdown_req(struct cflayer *cfctrl, u8 linkid,
123  struct cflayer *client);
124 
125 struct cflayer *cfctrl_create(void);
126 struct cfctrl_rsp *cfctrl_get_respfuncs(struct cflayer *layer);
127 int cfctrl_cancel_req(struct cflayer *layr, struct cflayer *adap_layer);
128 void cfctrl_remove(struct cflayer *layr);
129 
130 #endif /* CFCTRL_H_ */