Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/net/caif/cfctrl.h
26282 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* Copyright (C) ST-Ericsson AB 2010
4
* Author: Sjur Brendeland
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 {
14
CFCTRL_CMD_LINK_SETUP = 0,
15
CFCTRL_CMD_LINK_DESTROY = 1,
16
CFCTRL_CMD_LINK_ERR = 2,
17
CFCTRL_CMD_ENUM = 3,
18
CFCTRL_CMD_SLEEP = 4,
19
CFCTRL_CMD_WAKE = 5,
20
CFCTRL_CMD_LINK_RECONF = 6,
21
CFCTRL_CMD_START_REASON = 7,
22
CFCTRL_CMD_RADIO_SET = 8,
23
CFCTRL_CMD_MODEM_SET = 9,
24
CFCTRL_CMD_MASK = 0xf
25
};
26
27
/* Channel types */
28
enum cfctrl_srv {
29
CFCTRL_SRV_DECM = 0,
30
CFCTRL_SRV_VEI = 1,
31
CFCTRL_SRV_VIDEO = 2,
32
CFCTRL_SRV_DBG = 3,
33
CFCTRL_SRV_DATAGRAM = 4,
34
CFCTRL_SRV_RFM = 5,
35
CFCTRL_SRV_UTIL = 6,
36
CFCTRL_SRV_MASK = 0xf
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);
47
void (*linkerror_ind)(void);
48
void (*enum_rsp)(void);
49
void (*sleep_rsp)(void);
50
void (*wake_rsp)(void);
51
void (*restart_rsp)(void);
52
void (*radioset_rsp)(void);
53
void (*reject_rsp)(struct cflayer *layer, u8 linkid,
54
struct cflayer *client_layer);
55
};
56
57
/* Link Setup Parameters for CAIF-Links. */
58
struct cfctrl_link_param {
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 */
92
struct cfctrl_request_info {
93
int sequence_no;
94
enum cfctrl_cmd cmd;
95
u8 channel_id;
96
struct cfctrl_link_param param;
97
struct cflayer *client_layer;
98
struct list_head list;
99
};
100
101
struct cfctrl {
102
struct cfsrvl serv;
103
struct cfctrl_rsp res;
104
atomic_t req_seq_no;
105
atomic_t rsp_seq_no;
106
struct list_head list;
107
/* Protects from simultaneous access to first_req list */
108
spinlock_t info_list_lock;
109
#ifndef CAIF_NO_LOOP
110
u8 loop_linkid;
111
int loop_linkused[256];
112
/* Protects simultaneous access to loop_linkid and loop_linkused */
113
spinlock_t loop_linkid_lock;
114
#endif
115
116
};
117
118
void cfctrl_enum_req(struct cflayer *cfctrl, u8 physlinkid);
119
int cfctrl_linkup_request(struct cflayer *cfctrl,
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_ */
131
132