summaryrefslogtreecommitdiff
path: root/include/uapi/linux/gsmmux.h
blob: 4c878d84dbdaf1eec6c9a994d39d95e7e46b014f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef _LINUX_GSMMUX_H
#define _LINUX_GSMMUX_H

#include <linux/const.h>
#include <linux/if.h>
#include <linux/ioctl.h>
#include <linux/types.h>

/*
 * flags definition for n_gsm
 *
 * Used by:
 * struct gsm_config_ext.flags
 * struct gsm_dlci_config.flags
 */
/* Forces a DLCI reset if set. Otherwise, a DLCI reset is only done if
 * incompatible settings were provided. Always cleared on retrieval.
 */
#define GSM_FL_RESTART	_BITUL(0)

/**
 * struct gsm_config - n_gsm basic configuration parameters
 *
 * This structure is used in combination with GSMIOC_GETCONF and GSMIOC_SETCONF
 * to retrieve and set the basic parameters of an n_gsm ldisc.
 * struct gsm_config_ext can be used to configure extended ldisc parameters.
 *
 * All timers are in units of 1/100th of a second.
 *
 * @adaption:      Convergence layer type
 * @encapsulation: Framing (0 = basic option, 1 = advanced option)
 * @initiator:     Initiator or responder
 * @t1:            Acknowledgment timer
 * @t2:            Response timer for multiplexer control channel
 * @t3:            Response timer for wake-up procedure
 * @n2:            Maximum number of retransmissions
 * @mru:           Maximum incoming frame payload size
 * @mtu:           Maximum outgoing frame payload size
 * @k:             Window size
 * @i:             Frame type (1 = UIH, 2 = UI)
 * @unused:        Can not be used
 */
struct gsm_config
{
	unsigned int adaption;
	unsigned int encapsulation;
	unsigned int initiator;
	unsigned int t1;
	unsigned int t2;
	unsigned int t3;
	unsigned int n2;
	unsigned int mru;
	unsigned int mtu;
	unsigned int k;
	unsigned int i;
	unsigned int unused[8];
};

#define GSMIOC_GETCONF		_IOR('G', 0, struct gsm_config)
#define GSMIOC_SETCONF		_IOW('G', 1, struct gsm_config)

/**
 * struct gsm_netconfig - n_gsm network configuration parameters
 *
 * This structure is used in combination with GSMIOC_ENABLE_NET and
 * GSMIOC_DISABLE_NET to enable or disable a network data connection
 * over a mux virtual tty channel. This is for modems that support
 * data connections with raw IP frames instead of PPP.
 *
 * @adaption: Adaption to use in network mode.
 * @protocol: Protocol to use - only ETH_P_IP supported.
 * @unused2:  Can not be used.
 * @if_name:  Interface name format string.
 * @unused:   Can not be used.
 */
struct gsm_netconfig {
	unsigned int adaption;
	unsigned short protocol;
	unsigned short unused2;
	char if_name[IFNAMSIZ];
	__u8 unused[28];
};

#define GSMIOC_ENABLE_NET      _IOW('G', 2, struct gsm_netconfig)
#define GSMIOC_DISABLE_NET     _IO('G', 3)

/* get the base tty number for a configured gsmmux tty */
#define GSMIOC_GETFIRST		_IOR('G', 4, __u32)

/**
 * struct gsm_config_ext - n_gsm extended configuration parameters
 *
 * This structure is used in combination with GSMIOC_GETCONF_EXT and
 * GSMIOC_SETCONF_EXT to retrieve and set the extended parameters of an
 * n_gsm ldisc.
 *
 * All timers are in units of 1/100th of a second.
 *
 * @keep_alive:  Control channel keep-alive in 1/100th of a second (0 to disable).
 * @wait_config: Wait for DLCI config before opening virtual link?
 * @flags:       Mux specific flags.
 * @reserved:    For future use, must be initialized to zero.
 */
struct gsm_config_ext {
	__u32 keep_alive;
	__u32 wait_config;
	__u32 flags;
	__u32 reserved[5];
};

#define GSMIOC_GETCONF_EXT	_IOR('G', 5, struct gsm_config_ext)
#define GSMIOC_SETCONF_EXT	_IOW('G', 6, struct gsm_config_ext)

/**
 * struct gsm_dlci_config - n_gsm channel configuration parameters
 *
 * This structure is used in combination with GSMIOC_GETCONF_DLCI and
 * GSMIOC_SETCONF_DLCI to retrieve and set the channel specific parameters
 * of an n_gsm ldisc.
 *
 * Set the channel accordingly before calling GSMIOC_GETCONF_DLCI.
 *
 * @channel:  DLCI (0 for the associated DLCI).
 * @adaption: Convergence layer type.
 * @mtu:      Maximum transfer unit.
 * @priority: Priority (0 for default value).
 * @i:        Frame type (1 = UIH, 2 = UI).
 * @k:        Window size (0 for default value).
 * @flags:    DLCI specific flags.
 * @reserved: For future use, must be initialized to zero.
 */
struct gsm_dlci_config {
	__u32 channel;
	__u32 adaption;
	__u32 mtu;
	__u32 priority;
	__u32 i;
	__u32 k;
	__u32 flags;
	__u32 reserved[7];
};

#define GSMIOC_GETCONF_DLCI	_IOWR('G', 7, struct gsm_dlci_config)
#define GSMIOC_SETCONF_DLCI	_IOW('G', 8, struct gsm_dlci_config)

#endif