Blame view

net/irda/irsysctl.c 7.12 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*********************************************************************
6819bc2e1   YOSHIFUJI Hideaki   [NET] IRDA: Fix w...
2
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
3
4
5
6
7
8
9
10
   * Filename:      irsysctl.c
   * Version:       1.0
   * Description:   Sysctl interface for IrDA
   * Status:        Experimental.
   * Author:        Dag Brattli <dagb@cs.uit.no>
   * Created at:    Sun May 24 22:12:06 1998
   * Modified at:   Fri Jun  4 02:50:15 1999
   * Modified by:   Dag Brattli <dagb@cs.uit.no>
6819bc2e1   YOSHIFUJI Hideaki   [NET] IRDA: Fix w...
11
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
12
13
   *     Copyright (c) 1997, 1999 Dag Brattli, All Rights Reserved.
   *     Copyright (c) 2000-2001 Jean Tourrilhes <jt@hpl.hp.com>
6819bc2e1   YOSHIFUJI Hideaki   [NET] IRDA: Fix w...
14
15
16
17
   *
   *     This program is free software; you can redistribute it and/or
   *     modify it under the terms of the GNU General Public License as
   *     published by the Free Software Foundation; either version 2 of
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
18
   *     the License, or (at your option) any later version.
6819bc2e1   YOSHIFUJI Hideaki   [NET] IRDA: Fix w...
19
   *
96de0e252   Jan Engelhardt   Convert files to ...
20
   *     Neither Dag Brattli nor University of Tromsø admit liability nor
6819bc2e1   YOSHIFUJI Hideaki   [NET] IRDA: Fix w...
21
   *     provide warranty for any of this software. This material is
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
22
   *     provided "AS-IS" and at no charge.
6819bc2e1   YOSHIFUJI Hideaki   [NET] IRDA: Fix w...
23
   *
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
24
   ********************************************************************/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
25
26
27
28
29
30
  #include <linux/mm.h>
  #include <linux/ctype.h>
  #include <linux/sysctl.h>
  #include <linux/init.h>
  
  #include <net/irda/irda.h>		/* irda_debug */
91cde6f7d   Ross Burton   [IrDA]: LMP disco...
31
32
  #include <net/irda/irlmp.h>
  #include <net/irda/timer.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
33
  #include <net/irda/irias_object.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
34
35
36
37
38
39
40
  extern int  sysctl_discovery;
  extern int  sysctl_discovery_slots;
  extern int  sysctl_discovery_timeout;
  extern int  sysctl_slot_timeout;
  extern int  sysctl_fast_poll_increase;
  extern char sysctl_devname[];
  extern int  sysctl_max_baud_rate;
9566042ef   Andi Kleen   IRDA: Fix global ...
41
42
43
  extern unsigned int sysctl_min_tx_turn_time;
  extern unsigned int sysctl_max_tx_data_size;
  extern unsigned int sysctl_max_tx_window;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
44
45
46
  extern int  sysctl_max_noreply_time;
  extern int  sysctl_warn_noreply_time;
  extern int  sysctl_lap_keepalive_time;
91cde6f7d   Ross Burton   [IrDA]: LMP disco...
47
  extern struct irlmp_cb *irlmp;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
  /* this is needed for the proc_dointvec_minmax - Jean II */
  static int max_discovery_slots = 16;		/* ??? */
  static int min_discovery_slots = 1;
  /* IrLAP 6.13.2 says 25ms to 10+70ms - allow higher since some devices
   * seems to require it. (from Dag's comment) */
  static int max_slot_timeout = 160;
  static int min_slot_timeout = 20;
  static int max_max_baud_rate = 16000000;	/* See qos.c - IrLAP spec */
  static int min_max_baud_rate = 2400;
  static int max_min_tx_turn_time = 10000;	/* See qos.c - IrLAP spec */
  static int min_min_tx_turn_time;
  static int max_max_tx_data_size = 2048;		/* See qos.c - IrLAP spec */
  static int min_max_tx_data_size = 64;
  static int max_max_tx_window = 7;		/* See qos.c - IrLAP spec */
  static int min_max_tx_window = 1;
  static int max_max_noreply_time = 40;		/* See qos.c - IrLAP spec */
  static int min_max_noreply_time = 3;
  static int max_warn_noreply_time = 3;		/* 3s == standard */
  static int min_warn_noreply_time = 1;		/* 1s == min WD_TIMER */
  static int max_lap_keepalive_time = 10000;	/* 10s */
  static int min_lap_keepalive_time = 100;	/* 100us */
  /* For other sysctl, I've no idea of the range. Maybe Dag could help
   * us on that - Jean II */
8d65af789   Alexey Dobriyan   sysctl: remove "s...
71
  static int do_devname(ctl_table *table, int write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
72
73
74
  		      void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  	int ret;
8d65af789   Alexey Dobriyan   sysctl: remove "s...
75
  	ret = proc_dostring(table, write, buffer, lenp, ppos);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
76
77
78
79
80
81
82
83
84
  	if (ret == 0 && write) {
  		struct ias_value *val;
  
  		val = irias_new_string_value(sysctl_devname);
  		if (val)
  			irias_object_change_attribute("Device", "DeviceName", val);
  	}
  	return ret;
  }
91cde6f7d   Ross Burton   [IrDA]: LMP disco...
85

8d65af789   Alexey Dobriyan   sysctl: remove "s...
86
  static int do_discovery(ctl_table *table, int write,
91cde6f7d   Ross Burton   [IrDA]: LMP disco...
87
88
89
                      void __user *buffer, size_t *lenp, loff_t *ppos)
  {
         int ret;
8d65af789   Alexey Dobriyan   sysctl: remove "s...
90
         ret = proc_dointvec(table, write, buffer, lenp, ppos);
91cde6f7d   Ross Burton   [IrDA]: LMP disco...
91
92
93
94
95
96
97
98
99
100
101
102
103
         if (ret)
  	       return ret;
  
         if (irlmp == NULL)
  	       return -ENODEV;
  
         if (sysctl_discovery)
  	       irlmp_start_discovery_timer(irlmp, sysctl_discovery_timeout*HZ);
         else
  	       del_timer_sync(&irlmp->discovery_timer);
  
         return ret;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
104
105
106
  /* One file */
  static ctl_table irda_table[] = {
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
107
108
109
110
  		.procname	= "discovery",
  		.data		= &sysctl_discovery,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
111
  		.proc_handler	= do_discovery,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
112
113
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
114
115
116
117
  		.procname	= "devname",
  		.data		= sysctl_devname,
  		.maxlen		= 65,
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
118
  		.proc_handler	= do_devname,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
119
120
  	},
  #ifdef CONFIG_IRDA_DEBUG
6819bc2e1   YOSHIFUJI Hideaki   [NET] IRDA: Fix w...
121
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
122
123
124
125
  		.procname	= "debug",
  		.data		= &irda_debug,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
126
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
127
128
129
  	},
  #endif
  #ifdef CONFIG_IRDA_FAST_RR
6819bc2e1   YOSHIFUJI Hideaki   [NET] IRDA: Fix w...
130
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
132
133
134
  		.procname	= "fast_poll_increase",
  		.data		= &sysctl_fast_poll_increase,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
135
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
136
137
138
  	},
  #endif
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
139
140
141
142
  		.procname	= "discovery_slots",
  		.data		= &sysctl_discovery_slots,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
143
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
144
145
146
147
  		.extra1		= &min_discovery_slots,
  		.extra2		= &max_discovery_slots
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
148
149
150
151
  		.procname	= "discovery_timeout",
  		.data		= &sysctl_discovery_timeout,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
152
  		.proc_handler	= proc_dointvec
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
153
154
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
155
156
157
158
  		.procname	= "slot_timeout",
  		.data		= &sysctl_slot_timeout,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
159
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
160
161
162
163
  		.extra1		= &min_slot_timeout,
  		.extra2		= &max_slot_timeout
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
164
165
166
167
  		.procname	= "max_baud_rate",
  		.data		= &sysctl_max_baud_rate,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
168
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
169
170
171
172
  		.extra1		= &min_max_baud_rate,
  		.extra2		= &max_max_baud_rate
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
173
174
175
176
  		.procname	= "min_tx_turn_time",
  		.data		= &sysctl_min_tx_turn_time,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
177
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
178
179
180
181
  		.extra1		= &min_min_tx_turn_time,
  		.extra2		= &max_min_tx_turn_time
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
182
183
184
185
  		.procname	= "max_tx_data_size",
  		.data		= &sysctl_max_tx_data_size,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
186
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
187
188
189
190
  		.extra1		= &min_max_tx_data_size,
  		.extra2		= &max_max_tx_data_size
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
191
192
193
194
  		.procname	= "max_tx_window",
  		.data		= &sysctl_max_tx_window,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
195
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
196
197
198
199
  		.extra1		= &min_max_tx_window,
  		.extra2		= &max_max_tx_window
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
200
201
202
203
  		.procname	= "max_noreply_time",
  		.data		= &sysctl_max_noreply_time,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
204
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
205
206
207
208
  		.extra1		= &min_max_noreply_time,
  		.extra2		= &max_max_noreply_time
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
209
210
211
212
  		.procname	= "warn_noreply_time",
  		.data		= &sysctl_warn_noreply_time,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
213
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
214
215
216
217
  		.extra1		= &min_warn_noreply_time,
  		.extra2		= &max_warn_noreply_time
  	},
  	{
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
218
219
220
221
  		.procname	= "lap_keepalive_time",
  		.data		= &sysctl_lap_keepalive_time,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d9f239a1   Alexey Dobriyan   net: '&' redux
222
  		.proc_handler	= proc_dointvec_minmax,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
223
224
225
  		.extra1		= &min_lap_keepalive_time,
  		.extra2		= &max_lap_keepalive_time
  	},
f8572d8f2   Eric W. Biederman   sysctl net: Remov...
226
  	{ }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
227
  };
b5ccd792f   Pavel Emelyanov   [NET]: Simple ctl...
228
  static struct ctl_path irda_path[] = {
f8572d8f2   Eric W. Biederman   sysctl net: Remov...
229
230
  	{ .procname = "net", },
  	{ .procname = "irda", },
b5ccd792f   Pavel Emelyanov   [NET]: Simple ctl...
231
  	{ }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
232
233
234
235
236
237
238
239
240
241
242
243
  };
  
  static struct ctl_table_header *irda_table_header;
  
  /*
   * Function irda_sysctl_register (void)
   *
   *    Register our sysctl interface
   *
   */
  int __init irda_sysctl_register(void)
  {
b5ccd792f   Pavel Emelyanov   [NET]: Simple ctl...
244
  	irda_table_header = register_sysctl_paths(irda_path, irda_table);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
245
246
247
248
249
250
251
252
253
254
255
256
  	if (!irda_table_header)
  		return -ENOMEM;
  
  	return 0;
  }
  
  /*
   * Function irda_sysctl_unregister (void)
   *
   *    Unregister our sysctl interface
   *
   */
75a69ac6d   Samuel Ortiz   [IrDA]: Fix IrDA ...
257
  void irda_sysctl_unregister(void)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
258
259
260
  {
  	unregister_sysctl_table(irda_table_header);
  }