16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*e6b3d55bSDaniel Starke /* Copyright (c) 2022/23 Siemens Mobility GmbH */ 31c4b1d73SJiri Slaby #ifndef _LINUX_GSMMUX_H 41c4b1d73SJiri Slaby #define _LINUX_GSMMUX_H 51c4b1d73SJiri Slaby 6a031c77dSDaniel Starke #include <linux/const.h> 71c4b1d73SJiri Slaby #include <linux/if.h> 81c4b1d73SJiri Slaby #include <linux/ioctl.h> 945c6df44SJiri Slaby #include <linux/types.h> 101c4b1d73SJiri Slaby 11a031c77dSDaniel Starke /* 12a031c77dSDaniel Starke * flags definition for n_gsm 13a031c77dSDaniel Starke * 14a031c77dSDaniel Starke * Used by: 15e112ec42SDaniel Starke * struct gsm_config_ext.flags 16a031c77dSDaniel Starke * struct gsm_dlci_config.flags 17a031c77dSDaniel Starke */ 18a031c77dSDaniel Starke /* Forces a DLCI reset if set. Otherwise, a DLCI reset is only done if 19a031c77dSDaniel Starke * incompatible settings were provided. Always cleared on retrieval. 20a031c77dSDaniel Starke */ 21a031c77dSDaniel Starke #define GSM_FL_RESTART _BITUL(0) 22a031c77dSDaniel Starke 23901de5acSDaniel Starke /** 24901de5acSDaniel Starke * struct gsm_config - n_gsm basic configuration parameters 25901de5acSDaniel Starke * 26901de5acSDaniel Starke * This structure is used in combination with GSMIOC_GETCONF and GSMIOC_SETCONF 27901de5acSDaniel Starke * to retrieve and set the basic parameters of an n_gsm ldisc. 28901de5acSDaniel Starke * struct gsm_config_ext can be used to configure extended ldisc parameters. 29901de5acSDaniel Starke * 30901de5acSDaniel Starke * All timers are in units of 1/100th of a second. 31901de5acSDaniel Starke * 32901de5acSDaniel Starke * @adaption: Convergence layer type 33901de5acSDaniel Starke * @encapsulation: Framing (0 = basic option, 1 = advanced option) 34901de5acSDaniel Starke * @initiator: Initiator or responder 35901de5acSDaniel Starke * @t1: Acknowledgment timer 36901de5acSDaniel Starke * @t2: Response timer for multiplexer control channel 37901de5acSDaniel Starke * @t3: Response timer for wake-up procedure 38901de5acSDaniel Starke * @n2: Maximum number of retransmissions 39901de5acSDaniel Starke * @mru: Maximum incoming frame payload size 40901de5acSDaniel Starke * @mtu: Maximum outgoing frame payload size 41901de5acSDaniel Starke * @k: Window size 42901de5acSDaniel Starke * @i: Frame type (1 = UIH, 2 = UI) 43901de5acSDaniel Starke * @unused: Can not be used 44901de5acSDaniel Starke */ 451c4b1d73SJiri Slaby struct gsm_config 461c4b1d73SJiri Slaby { 471c4b1d73SJiri Slaby unsigned int adaption; 481c4b1d73SJiri Slaby unsigned int encapsulation; 491c4b1d73SJiri Slaby unsigned int initiator; 501c4b1d73SJiri Slaby unsigned int t1; 511c4b1d73SJiri Slaby unsigned int t2; 521c4b1d73SJiri Slaby unsigned int t3; 531c4b1d73SJiri Slaby unsigned int n2; 541c4b1d73SJiri Slaby unsigned int mru; 551c4b1d73SJiri Slaby unsigned int mtu; 561c4b1d73SJiri Slaby unsigned int k; 571c4b1d73SJiri Slaby unsigned int i; 58901de5acSDaniel Starke unsigned int unused[8]; 591c4b1d73SJiri Slaby }; 601c4b1d73SJiri Slaby 611c4b1d73SJiri Slaby #define GSMIOC_GETCONF _IOR('G', 0, struct gsm_config) 621c4b1d73SJiri Slaby #define GSMIOC_SETCONF _IOW('G', 1, struct gsm_config) 631c4b1d73SJiri Slaby 64901de5acSDaniel Starke /** 65901de5acSDaniel Starke * struct gsm_netconfig - n_gsm network configuration parameters 66901de5acSDaniel Starke * 67901de5acSDaniel Starke * This structure is used in combination with GSMIOC_ENABLE_NET and 68901de5acSDaniel Starke * GSMIOC_DISABLE_NET to enable or disable a network data connection 69901de5acSDaniel Starke * over a mux virtual tty channel. This is for modems that support 70901de5acSDaniel Starke * data connections with raw IP frames instead of PPP. 71901de5acSDaniel Starke * 72901de5acSDaniel Starke * @adaption: Adaption to use in network mode. 73901de5acSDaniel Starke * @protocol: Protocol to use - only ETH_P_IP supported. 74901de5acSDaniel Starke * @unused2: Can not be used. 75901de5acSDaniel Starke * @if_name: Interface name format string. 76901de5acSDaniel Starke * @unused: Can not be used. 77901de5acSDaniel Starke */ 781c4b1d73SJiri Slaby struct gsm_netconfig { 79901de5acSDaniel Starke unsigned int adaption; 80901de5acSDaniel Starke unsigned short protocol; 81901de5acSDaniel Starke unsigned short unused2; 82901de5acSDaniel Starke char if_name[IFNAMSIZ]; 83901de5acSDaniel Starke __u8 unused[28]; 841c4b1d73SJiri Slaby }; 851c4b1d73SJiri Slaby 861c4b1d73SJiri Slaby #define GSMIOC_ENABLE_NET _IOW('G', 2, struct gsm_netconfig) 871c4b1d73SJiri Slaby #define GSMIOC_DISABLE_NET _IO('G', 3) 881c4b1d73SJiri Slaby 89a7b121b4SMartin Hundebøll /* get the base tty number for a configured gsmmux tty */ 90a7b121b4SMartin Hundebøll #define GSMIOC_GETFIRST _IOR('G', 4, __u32) 911c4b1d73SJiri Slaby 92901de5acSDaniel Starke /** 93901de5acSDaniel Starke * struct gsm_config_ext - n_gsm extended configuration parameters 94901de5acSDaniel Starke * 95901de5acSDaniel Starke * This structure is used in combination with GSMIOC_GETCONF_EXT and 96901de5acSDaniel Starke * GSMIOC_SETCONF_EXT to retrieve and set the extended parameters of an 97901de5acSDaniel Starke * n_gsm ldisc. 98901de5acSDaniel Starke * 99901de5acSDaniel Starke * All timers are in units of 1/100th of a second. 100901de5acSDaniel Starke * 101901de5acSDaniel Starke * @keep_alive: Control channel keep-alive in 1/100th of a second (0 to disable). 102901de5acSDaniel Starke * @wait_config: Wait for DLCI config before opening virtual link? 103e112ec42SDaniel Starke * @flags: Mux specific flags. 104901de5acSDaniel Starke * @reserved: For future use, must be initialized to zero. 10572206cc7SDaniel Starke */ 106901de5acSDaniel Starke struct gsm_config_ext { 107901de5acSDaniel Starke __u32 keep_alive; 108901de5acSDaniel Starke __u32 wait_config; 109e112ec42SDaniel Starke __u32 flags; 110e112ec42SDaniel Starke __u32 reserved[5]; 11172206cc7SDaniel Starke }; 11272206cc7SDaniel Starke 11372206cc7SDaniel Starke #define GSMIOC_GETCONF_EXT _IOR('G', 5, struct gsm_config_ext) 11472206cc7SDaniel Starke #define GSMIOC_SETCONF_EXT _IOW('G', 6, struct gsm_config_ext) 11572206cc7SDaniel Starke 116901de5acSDaniel Starke /** 117901de5acSDaniel Starke * struct gsm_dlci_config - n_gsm channel configuration parameters 118901de5acSDaniel Starke * 119901de5acSDaniel Starke * This structure is used in combination with GSMIOC_GETCONF_DLCI and 120901de5acSDaniel Starke * GSMIOC_SETCONF_DLCI to retrieve and set the channel specific parameters 121901de5acSDaniel Starke * of an n_gsm ldisc. 122901de5acSDaniel Starke * 123901de5acSDaniel Starke * Set the channel accordingly before calling GSMIOC_GETCONF_DLCI. 124901de5acSDaniel Starke * 125901de5acSDaniel Starke * @channel: DLCI (0 for the associated DLCI). 126901de5acSDaniel Starke * @adaption: Convergence layer type. 127901de5acSDaniel Starke * @mtu: Maximum transfer unit. 128901de5acSDaniel Starke * @priority: Priority (0 for default value). 129901de5acSDaniel Starke * @i: Frame type (1 = UIH, 2 = UI). 130901de5acSDaniel Starke * @k: Window size (0 for default value). 131901de5acSDaniel Starke * @flags: DLCI specific flags. 132901de5acSDaniel Starke * @reserved: For future use, must be initialized to zero. 133901de5acSDaniel Starke */ 1344ca58966SDaniel Starke struct gsm_dlci_config { 135901de5acSDaniel Starke __u32 channel; 136901de5acSDaniel Starke __u32 adaption; 137901de5acSDaniel Starke __u32 mtu; 138901de5acSDaniel Starke __u32 priority; 139901de5acSDaniel Starke __u32 i; 140901de5acSDaniel Starke __u32 k; 141901de5acSDaniel Starke __u32 flags; 142901de5acSDaniel Starke __u32 reserved[7]; 1434ca58966SDaniel Starke }; 1444ca58966SDaniel Starke 1454ca58966SDaniel Starke #define GSMIOC_GETCONF_DLCI _IOWR('G', 7, struct gsm_dlci_config) 1464ca58966SDaniel Starke #define GSMIOC_SETCONF_DLCI _IOW('G', 8, struct gsm_dlci_config) 1474ca58966SDaniel Starke 1481c4b1d73SJiri Slaby #endif 149