aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/parport/procfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/parport/procfs.c')
-rw-r--r--drivers/parport/procfs.c264
1 files changed, 189 insertions, 75 deletions
diff --git a/drivers/parport/procfs.c b/drivers/parport/procfs.c
index 2e744a274517..9a7f1d49dec1 100644
--- a/drivers/parport/procfs.c
+++ b/drivers/parport/procfs.c
@@ -233,12 +233,12 @@ static int do_hardware_modes (ctl_table *table, int write,
233 return copy_to_user(result, buffer, len) ? -EFAULT : 0; 233 return copy_to_user(result, buffer, len) ? -EFAULT : 0;
234} 234}
235 235
236#define PARPORT_PORT_DIR(child) { 0, NULL, NULL, 0, 0555, child } 236#define PARPORT_PORT_DIR(CHILD) { .ctl_name = 0, .procname = NULL, .mode = 0555, .child = CHILD }
237#define PARPORT_PARPORT_DIR(child) { DEV_PARPORT, "parport", \ 237#define PARPORT_PARPORT_DIR(CHILD) { .ctl_name = DEV_PARPORT, .procname = "parport", \
238 NULL, 0, 0555, child } 238 .mode = 0555, .child = CHILD }
239#define PARPORT_DEV_DIR(child) { CTL_DEV, "dev", NULL, 0, 0555, child } 239#define PARPORT_DEV_DIR(CHILD) { .ctl_name = CTL_DEV, .procname = "dev", .mode = 0555, .child = CHILD }
240#define PARPORT_DEVICES_ROOT_DIR { DEV_PARPORT_DEVICES, "devices", \ 240#define PARPORT_DEVICES_ROOT_DIR { .ctl_name = DEV_PARPORT_DEVICES, .procname = "devices", \
241 NULL, 0, 0555, NULL } 241 .mode = 0555, .child = NULL }
242 242
243static const unsigned long parport_min_timeslice_value = 243static const unsigned long parport_min_timeslice_value =
244PARPORT_MIN_TIMESLICE_VALUE; 244PARPORT_MIN_TIMESLICE_VALUE;
@@ -263,50 +263,118 @@ struct parport_sysctl_table {
263}; 263};
264 264
265static const struct parport_sysctl_table parport_sysctl_template = { 265static const struct parport_sysctl_table parport_sysctl_template = {
266 NULL, 266 .sysctl_header = NULL,
267 { 267 {
268 { DEV_PARPORT_SPINTIME, "spintime", 268 {
269 NULL, sizeof(int), 0644, NULL, 269 .ctl_name = DEV_PARPORT_SPINTIME,
270 &proc_dointvec_minmax, NULL, NULL, 270 .procname = "spintime",
271 (void*) &parport_min_spintime_value, 271 .data = NULL,
272 (void*) &parport_max_spintime_value }, 272 .maxlen = sizeof(int),
273 { DEV_PARPORT_BASE_ADDR, "base-addr", 273 .mode = 0644,
274 NULL, 0, 0444, NULL, 274 .proc_handler = &proc_dointvec_minmax,
275 &do_hardware_base_addr }, 275 .extra1 = (void*) &parport_min_spintime_value,
276 { DEV_PARPORT_IRQ, "irq", 276 .extra2 = (void*) &parport_max_spintime_value
277 NULL, 0, 0444, NULL, 277 },
278 &do_hardware_irq }, 278 {
279 { DEV_PARPORT_DMA, "dma", 279 .ctl_name = DEV_PARPORT_BASE_ADDR,
280 NULL, 0, 0444, NULL, 280 .procname = "base-addr",
281 &do_hardware_dma }, 281 .data = NULL,
282 { DEV_PARPORT_MODES, "modes", 282 .maxlen = 0,
283 NULL, 0, 0444, NULL, 283 .mode = 0444,
284 &do_hardware_modes }, 284 .proc_handler = &do_hardware_base_addr
285 },
286 {
287 .ctl_name = DEV_PARPORT_IRQ,
288 .procname = "irq",
289 .data = NULL,
290 .maxlen = 0,
291 .mode = 0444,
292 .proc_handler = &do_hardware_irq
293 },
294 {
295 .ctl_name = DEV_PARPORT_DMA,
296 .procname = "dma",
297 .data = NULL,
298 .maxlen = 0,
299 .mode = 0444,
300 .proc_handler = &do_hardware_dma
301 },
302 {
303 .ctl_name = DEV_PARPORT_MODES,
304 .procname = "modes",
305 .data = NULL,
306 .maxlen = 0,
307 .mode = 0444,
308 .proc_handler = &do_hardware_modes
309 },
285 PARPORT_DEVICES_ROOT_DIR, 310 PARPORT_DEVICES_ROOT_DIR,
286#ifdef CONFIG_PARPORT_1284 311#ifdef CONFIG_PARPORT_1284
287 { DEV_PARPORT_AUTOPROBE, "autoprobe", 312 {
288 NULL, 0, 0444, NULL, 313 .ctl_name = DEV_PARPORT_AUTOPROBE,
289 &do_autoprobe }, 314 .procname = "autoprobe",
290 { DEV_PARPORT_AUTOPROBE + 1, "autoprobe0", 315 .data = NULL,
291 NULL, 0, 0444, NULL, 316 .maxlen = 0,
292 &do_autoprobe }, 317 .mode = 0444,
293 { DEV_PARPORT_AUTOPROBE + 2, "autoprobe1", 318 .proc_handler = &do_autoprobe
294 NULL, 0, 0444, NULL, 319 },
295 &do_autoprobe }, 320 {
296 { DEV_PARPORT_AUTOPROBE + 3, "autoprobe2", 321 .ctl_name = DEV_PARPORT_AUTOPROBE + 1,
297 NULL, 0, 0444, NULL, 322 .procname = "autoprobe0",
298 &do_autoprobe }, 323 .data = NULL,
299 { DEV_PARPORT_AUTOPROBE + 4, "autoprobe3", 324 .maxlen = 0,
300 NULL, 0, 0444, NULL, 325 .mode = 0444,
301 &do_autoprobe }, 326 .proc_handler = &do_autoprobe
327 },
328 {
329 .ctl_name = DEV_PARPORT_AUTOPROBE + 2,
330 .procname = "autoprobe1",
331 .data = NULL,
332 .maxlen = 0,
333 .mode = 0444,
334 .proc_handler = &do_autoprobe
335 },
336 {
337 .ctl_name = DEV_PARPORT_AUTOPROBE + 3,
338 .procname = "autoprobe2",
339 .data = NULL,
340 .maxlen = 0,
341 .mode = 0444,
342 .proc_handler = &do_autoprobe
343 },
344 {
345 .ctl_name = DEV_PARPORT_AUTOPROBE + 4,
346 .procname = "autoprobe3",
347 .data = NULL,
348 .maxlen = 0,
349 .mode = 0444,
350 .proc_handler = &do_autoprobe
351 },
302#endif /* IEEE 1284 support */ 352#endif /* IEEE 1284 support */
303 {0} 353 {}
304 }, 354 },
305 { {DEV_PARPORT_DEVICES_ACTIVE, "active", NULL, 0, 0444, NULL, 355 {
306 &do_active_device }, {0}}, 356 {
307 { PARPORT_PORT_DIR(NULL), {0}}, 357 .ctl_name = DEV_PARPORT_DEVICES_ACTIVE,
308 { PARPORT_PARPORT_DIR(NULL), {0}}, 358 .procname = "active",
309 { PARPORT_DEV_DIR(NULL), {0}} 359 .data = NULL,
360 .maxlen = 0,
361 .mode = 0444,
362 .proc_handler = &do_active_device
363 },
364 {}
365 },
366 {
367 PARPORT_PORT_DIR(NULL),
368 {}
369 },
370 {
371 PARPORT_PARPORT_DIR(NULL),
372 {}
373 },
374 {
375 PARPORT_DEV_DIR(NULL),
376 {}
377 }
310}; 378};
311 379
312struct parport_device_sysctl_table 380struct parport_device_sysctl_table
@@ -322,19 +390,46 @@ struct parport_device_sysctl_table
322 390
323static const struct parport_device_sysctl_table 391static const struct parport_device_sysctl_table
324parport_device_sysctl_template = { 392parport_device_sysctl_template = {
325 NULL, 393 .sysctl_header = NULL,
394 {
395 {
396 .ctl_name = DEV_PARPORT_DEVICE_TIMESLICE,
397 .procname = "timeslice",
398 .data = NULL,
399 .maxlen = sizeof(int),
400 .mode = 0644,
401 .proc_handler = &proc_doulongvec_ms_jiffies_minmax,
402 .extra1 = (void*) &parport_min_timeslice_value,
403 .extra2 = (void*) &parport_max_timeslice_value
404 },
405 },
406 {
407 {
408 .ctl_name = 0,
409 .procname = NULL,
410 .data = NULL,
411 .maxlen = 0,
412 .mode = 0555,
413 .child = NULL
414 },
415 {}
416 },
326 { 417 {
327 { DEV_PARPORT_DEVICE_TIMESLICE, "timeslice", 418 PARPORT_DEVICES_ROOT_DIR,
328 NULL, sizeof(int), 0644, NULL, 419 {}
329 &proc_doulongvec_ms_jiffies_minmax, NULL, NULL, 420 },
330 (void*) &parport_min_timeslice_value, 421 {
331 (void*) &parport_max_timeslice_value }, 422 PARPORT_PORT_DIR(NULL),
423 {}
332 }, 424 },
333 { {0, NULL, NULL, 0, 0555, NULL}, {0}}, 425 {
334 { PARPORT_DEVICES_ROOT_DIR, {0}}, 426 PARPORT_PARPORT_DIR(NULL),
335 { PARPORT_PORT_DIR(NULL), {0}}, 427 {}
336 { PARPORT_PARPORT_DIR(NULL), {0}}, 428 },
337 { PARPORT_DEV_DIR(NULL), {0}} 429 {
430 PARPORT_DEV_DIR(NULL),
431 {}
432 }
338}; 433};
339 434
340struct parport_default_sysctl_table 435struct parport_default_sysctl_table
@@ -351,28 +446,47 @@ extern int parport_default_spintime;
351 446
352static struct parport_default_sysctl_table 447static struct parport_default_sysctl_table
353parport_default_sysctl_table = { 448parport_default_sysctl_table = {
354 NULL, 449 .sysctl_header = NULL,
450 {
451 {
452 .ctl_name = DEV_PARPORT_DEFAULT_TIMESLICE,
453 .procname = "timeslice",
454 .data = &parport_default_timeslice,
455 .maxlen = sizeof(parport_default_timeslice),
456 .mode = 0644,
457 .proc_handler = &proc_doulongvec_ms_jiffies_minmax,
458 .extra1 = (void*) &parport_min_timeslice_value,
459 .extra2 = (void*) &parport_max_timeslice_value
460 },
461 {
462 .ctl_name = DEV_PARPORT_DEFAULT_SPINTIME,
463 .procname = "spintime",
464 .data = &parport_default_spintime,
465 .maxlen = sizeof(parport_default_spintime),
466 .mode = 0644,
467 .proc_handler = &proc_dointvec_minmax,
468 .extra1 = (void*) &parport_min_spintime_value,
469 .extra2 = (void*) &parport_max_spintime_value
470 },
471 {}
472 },
355 { 473 {
356 { DEV_PARPORT_DEFAULT_TIMESLICE, "timeslice", 474 {
357 &parport_default_timeslice, 475 .ctl_name = DEV_PARPORT_DEFAULT,
358 sizeof(parport_default_timeslice), 0644, NULL, 476 .procname = "default",
359 &proc_doulongvec_ms_jiffies_minmax, NULL, NULL, 477 .mode = 0555,
360 (void*) &parport_min_timeslice_value, 478 .child = parport_default_sysctl_table.vars
361 (void*) &parport_max_timeslice_value }, 479 },
362 { DEV_PARPORT_DEFAULT_SPINTIME, "spintime", 480 {}
363 &parport_default_spintime,
364 sizeof(parport_default_spintime), 0644, NULL,
365 &proc_dointvec_minmax, NULL, NULL,
366 (void*) &parport_min_spintime_value,
367 (void*) &parport_max_spintime_value },
368 {0}
369 }, 481 },
370 { { DEV_PARPORT_DEFAULT, "default", NULL, 0, 0555,
371 parport_default_sysctl_table.vars },{0}},
372 { 482 {
373 PARPORT_PARPORT_DIR(parport_default_sysctl_table.default_dir), 483 PARPORT_PARPORT_DIR(parport_default_sysctl_table.default_dir),
374 {0}}, 484 {}
375 { PARPORT_DEV_DIR(parport_default_sysctl_table.parport_dir), {0}} 485 },
486 {
487 PARPORT_DEV_DIR(parport_default_sysctl_table.parport_dir),
488 {}
489 }
376}; 490};
377 491
378 492