diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00debug.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00debug.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c index a31418a700c1..54dd10060bf1 100644 --- a/drivers/net/wireless/rt2x00/rt2x00debug.c +++ b/drivers/net/wireless/rt2x00/rt2x00debug.c | |||
@@ -424,16 +424,21 @@ static ssize_t rt2x00debug_read_##__name(struct file *file, \ | |||
424 | const struct rt2x00debug *debug = intf->debug; \ | 424 | const struct rt2x00debug *debug = intf->debug; \ |
425 | char line[16]; \ | 425 | char line[16]; \ |
426 | size_t size; \ | 426 | size_t size; \ |
427 | unsigned int index = intf->offset_##__name; \ | ||
427 | __type value; \ | 428 | __type value; \ |
428 | \ | 429 | \ |
429 | if (*offset) \ | 430 | if (*offset) \ |
430 | return 0; \ | 431 | return 0; \ |
431 | \ | 432 | \ |
432 | if (intf->offset_##__name >= debug->__name.word_count) \ | 433 | if (index >= debug->__name.word_count) \ |
433 | return -EINVAL; \ | 434 | return -EINVAL; \ |
434 | \ | 435 | \ |
435 | debug->__name.read(intf->rt2x00dev, \ | 436 | if (debug->__name.flags & RT2X00DEBUGFS_OFFSET) \ |
436 | intf->offset_##__name, &value); \ | 437 | index *= debug->__name.word_size; \ |
438 | \ | ||
439 | index += debug->__name.word_base; \ | ||
440 | \ | ||
441 | debug->__name.read(intf->rt2x00dev, index, &value); \ | ||
437 | \ | 442 | \ |
438 | size = sprintf(line, __format, value); \ | 443 | size = sprintf(line, __format, value); \ |
439 | \ | 444 | \ |
@@ -454,12 +459,13 @@ static ssize_t rt2x00debug_write_##__name(struct file *file, \ | |||
454 | const struct rt2x00debug *debug = intf->debug; \ | 459 | const struct rt2x00debug *debug = intf->debug; \ |
455 | char line[16]; \ | 460 | char line[16]; \ |
456 | size_t size; \ | 461 | size_t size; \ |
462 | unsigned int index = intf->offset_##__name; \ | ||
457 | __type value; \ | 463 | __type value; \ |
458 | \ | 464 | \ |
459 | if (*offset) \ | 465 | if (*offset) \ |
460 | return 0; \ | 466 | return 0; \ |
461 | \ | 467 | \ |
462 | if (intf->offset_##__name >= debug->__name.word_count) \ | 468 | if (index >= debug->__name.word_count) \ |
463 | return -EINVAL; \ | 469 | return -EINVAL; \ |
464 | \ | 470 | \ |
465 | if (copy_from_user(line, buf, length)) \ | 471 | if (copy_from_user(line, buf, length)) \ |
@@ -468,8 +474,12 @@ static ssize_t rt2x00debug_write_##__name(struct file *file, \ | |||
468 | size = strlen(line); \ | 474 | size = strlen(line); \ |
469 | value = simple_strtoul(line, NULL, 0); \ | 475 | value = simple_strtoul(line, NULL, 0); \ |
470 | \ | 476 | \ |
471 | debug->__name.write(intf->rt2x00dev, \ | 477 | if (debug->__name.flags & RT2X00DEBUGFS_OFFSET) \ |
472 | intf->offset_##__name, value); \ | 478 | index *= debug->__name.word_size; \ |
479 | \ | ||
480 | index += debug->__name.word_base; \ | ||
481 | \ | ||
482 | debug->__name.write(intf->rt2x00dev, index, value); \ | ||
473 | \ | 483 | \ |
474 | *offset += size; \ | 484 | *offset += size; \ |
475 | return size; \ | 485 | return size; \ |