diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-12-09 01:14:38 -0500 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-12-09 01:14:38 -0500 |
commit | bcd6acd51f3d4d1ada201e9bc5c40a31d6d80c71 (patch) | |
tree | 2f6dffd2d3e4dd67355a224de7e7a960335a92fd /drivers/char | |
parent | 11c34c7deaeeebcee342cbc35e1bb2a6711b2431 (diff) | |
parent | 3ff6a468b45b5dfeb0e903e56f4eb27d34b2437c (diff) |
Merge commit 'origin/master' into next
Conflicts:
include/linux/kvm.h
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/agp/Kconfig | 3 | ||||
-rw-r--r-- | drivers/char/agp/intel-agp.c | 8 | ||||
-rw-r--r-- | drivers/char/hpet.c | 11 | ||||
-rw-r--r-- | drivers/char/ipmi/ipmi_poweroff.c | 11 | ||||
-rw-r--r-- | drivers/char/keyboard.c | 2 | ||||
-rw-r--r-- | drivers/char/pcmcia/cm4000_cs.c | 73 | ||||
-rw-r--r-- | drivers/char/pcmcia/cm4040_cs.c | 52 | ||||
-rw-r--r-- | drivers/char/pcmcia/ipwireless/hardware.c | 8 | ||||
-rw-r--r-- | drivers/char/pcmcia/ipwireless/main.c | 296 | ||||
-rw-r--r-- | drivers/char/pcmcia/synclink_cs.c | 80 | ||||
-rw-r--r-- | drivers/char/pty.c | 14 | ||||
-rw-r--r-- | drivers/char/random.c | 54 | ||||
-rw-r--r-- | drivers/char/rtc.c | 11 | ||||
-rw-r--r-- | drivers/char/tpm/tpm.c | 2 | ||||
-rw-r--r-- | drivers/char/tpm/tpm_tis.c | 11 | ||||
-rw-r--r-- | drivers/char/tty_port.c | 7 | ||||
-rw-r--r-- | drivers/char/vt.c | 11 |
17 files changed, 242 insertions, 412 deletions
diff --git a/drivers/char/agp/Kconfig b/drivers/char/agp/Kconfig index ccb1fa89de29..2fb3a480f6b0 100644 --- a/drivers/char/agp/Kconfig +++ b/drivers/char/agp/Kconfig | |||
@@ -56,9 +56,8 @@ config AGP_AMD | |||
56 | X on AMD Irongate, 761, and 762 chipsets. | 56 | X on AMD Irongate, 761, and 762 chipsets. |
57 | 57 | ||
58 | config AGP_AMD64 | 58 | config AGP_AMD64 |
59 | tristate "AMD Opteron/Athlon64 on-CPU GART support" if !GART_IOMMU | 59 | tristate "AMD Opteron/Athlon64 on-CPU GART support" |
60 | depends on AGP && X86 | 60 | depends on AGP && X86 |
61 | default y if GART_IOMMU | ||
62 | help | 61 | help |
63 | This option gives you AGP support for the GLX component of | 62 | This option gives you AGP support for the GLX component of |
64 | X using the on-CPU northbridge of the AMD Athlon64/Opteron CPUs. | 63 | X using the on-CPU northbridge of the AMD Athlon64/Opteron CPUs. |
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c index 10e1f0390bbb..3cb56a049e24 100644 --- a/drivers/char/agp/intel-agp.c +++ b/drivers/char/agp/intel-agp.c | |||
@@ -62,6 +62,7 @@ | |||
62 | #define PCI_DEVICE_ID_INTEL_IGDNG_D_IG 0x0042 | 62 | #define PCI_DEVICE_ID_INTEL_IGDNG_D_IG 0x0042 |
63 | #define PCI_DEVICE_ID_INTEL_IGDNG_M_HB 0x0044 | 63 | #define PCI_DEVICE_ID_INTEL_IGDNG_M_HB 0x0044 |
64 | #define PCI_DEVICE_ID_INTEL_IGDNG_MA_HB 0x0062 | 64 | #define PCI_DEVICE_ID_INTEL_IGDNG_MA_HB 0x0062 |
65 | #define PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB 0x006a | ||
65 | #define PCI_DEVICE_ID_INTEL_IGDNG_M_IG 0x0046 | 66 | #define PCI_DEVICE_ID_INTEL_IGDNG_M_IG 0x0046 |
66 | 67 | ||
67 | /* cover 915 and 945 variants */ | 68 | /* cover 915 and 945 variants */ |
@@ -96,7 +97,8 @@ | |||
96 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_B43_HB || \ | 97 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_B43_HB || \ |
97 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_D_HB || \ | 98 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_D_HB || \ |
98 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_M_HB || \ | 99 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_M_HB || \ |
99 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MA_HB) | 100 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MA_HB || \ |
101 | agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB) | ||
100 | 102 | ||
101 | extern int agp_memory_reserved; | 103 | extern int agp_memory_reserved; |
102 | 104 | ||
@@ -1358,6 +1360,7 @@ static void intel_i965_get_gtt_range(int *gtt_offset, int *gtt_size) | |||
1358 | case PCI_DEVICE_ID_INTEL_IGDNG_D_HB: | 1360 | case PCI_DEVICE_ID_INTEL_IGDNG_D_HB: |
1359 | case PCI_DEVICE_ID_INTEL_IGDNG_M_HB: | 1361 | case PCI_DEVICE_ID_INTEL_IGDNG_M_HB: |
1360 | case PCI_DEVICE_ID_INTEL_IGDNG_MA_HB: | 1362 | case PCI_DEVICE_ID_INTEL_IGDNG_MA_HB: |
1363 | case PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB: | ||
1361 | *gtt_offset = *gtt_size = MB(2); | 1364 | *gtt_offset = *gtt_size = MB(2); |
1362 | break; | 1365 | break; |
1363 | default: | 1366 | default: |
@@ -2359,6 +2362,8 @@ static const struct intel_driver_description { | |||
2359 | "IGDNG/M", NULL, &intel_i965_driver }, | 2362 | "IGDNG/M", NULL, &intel_i965_driver }, |
2360 | { PCI_DEVICE_ID_INTEL_IGDNG_MA_HB, PCI_DEVICE_ID_INTEL_IGDNG_M_IG, 0, | 2363 | { PCI_DEVICE_ID_INTEL_IGDNG_MA_HB, PCI_DEVICE_ID_INTEL_IGDNG_M_IG, 0, |
2361 | "IGDNG/MA", NULL, &intel_i965_driver }, | 2364 | "IGDNG/MA", NULL, &intel_i965_driver }, |
2365 | { PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB, PCI_DEVICE_ID_INTEL_IGDNG_M_IG, 0, | ||
2366 | "IGDNG/MC2", NULL, &intel_i965_driver }, | ||
2362 | { 0, 0, 0, NULL, NULL, NULL } | 2367 | { 0, 0, 0, NULL, NULL, NULL } |
2363 | }; | 2368 | }; |
2364 | 2369 | ||
@@ -2560,6 +2565,7 @@ static struct pci_device_id agp_intel_pci_table[] = { | |||
2560 | ID(PCI_DEVICE_ID_INTEL_IGDNG_D_HB), | 2565 | ID(PCI_DEVICE_ID_INTEL_IGDNG_D_HB), |
2561 | ID(PCI_DEVICE_ID_INTEL_IGDNG_M_HB), | 2566 | ID(PCI_DEVICE_ID_INTEL_IGDNG_M_HB), |
2562 | ID(PCI_DEVICE_ID_INTEL_IGDNG_MA_HB), | 2567 | ID(PCI_DEVICE_ID_INTEL_IGDNG_MA_HB), |
2568 | ID(PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB), | ||
2563 | { } | 2569 | { } |
2564 | }; | 2570 | }; |
2565 | 2571 | ||
diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c index 70a770ac0138..e481c5938bad 100644 --- a/drivers/char/hpet.c +++ b/drivers/char/hpet.c | |||
@@ -675,36 +675,33 @@ static int hpet_is_known(struct hpet_data *hdp) | |||
675 | 675 | ||
676 | static ctl_table hpet_table[] = { | 676 | static ctl_table hpet_table[] = { |
677 | { | 677 | { |
678 | .ctl_name = CTL_UNNUMBERED, | ||
679 | .procname = "max-user-freq", | 678 | .procname = "max-user-freq", |
680 | .data = &hpet_max_freq, | 679 | .data = &hpet_max_freq, |
681 | .maxlen = sizeof(int), | 680 | .maxlen = sizeof(int), |
682 | .mode = 0644, | 681 | .mode = 0644, |
683 | .proc_handler = &proc_dointvec, | 682 | .proc_handler = proc_dointvec, |
684 | }, | 683 | }, |
685 | {.ctl_name = 0} | 684 | {} |
686 | }; | 685 | }; |
687 | 686 | ||
688 | static ctl_table hpet_root[] = { | 687 | static ctl_table hpet_root[] = { |
689 | { | 688 | { |
690 | .ctl_name = CTL_UNNUMBERED, | ||
691 | .procname = "hpet", | 689 | .procname = "hpet", |
692 | .maxlen = 0, | 690 | .maxlen = 0, |
693 | .mode = 0555, | 691 | .mode = 0555, |
694 | .child = hpet_table, | 692 | .child = hpet_table, |
695 | }, | 693 | }, |
696 | {.ctl_name = 0} | 694 | {} |
697 | }; | 695 | }; |
698 | 696 | ||
699 | static ctl_table dev_root[] = { | 697 | static ctl_table dev_root[] = { |
700 | { | 698 | { |
701 | .ctl_name = CTL_DEV, | ||
702 | .procname = "dev", | 699 | .procname = "dev", |
703 | .maxlen = 0, | 700 | .maxlen = 0, |
704 | .mode = 0555, | 701 | .mode = 0555, |
705 | .child = hpet_root, | 702 | .child = hpet_root, |
706 | }, | 703 | }, |
707 | {.ctl_name = 0} | 704 | {} |
708 | }; | 705 | }; |
709 | 706 | ||
710 | static struct ctl_table_header *sysctl_header; | 707 | static struct ctl_table_header *sysctl_header; |
diff --git a/drivers/char/ipmi/ipmi_poweroff.c b/drivers/char/ipmi/ipmi_poweroff.c index 2e66b5f773dd..0dec5da000ef 100644 --- a/drivers/char/ipmi/ipmi_poweroff.c +++ b/drivers/char/ipmi/ipmi_poweroff.c | |||
@@ -660,26 +660,23 @@ static struct ipmi_smi_watcher smi_watcher = { | |||
660 | #include <linux/sysctl.h> | 660 | #include <linux/sysctl.h> |
661 | 661 | ||
662 | static ctl_table ipmi_table[] = { | 662 | static ctl_table ipmi_table[] = { |
663 | { .ctl_name = DEV_IPMI_POWEROFF_POWERCYCLE, | 663 | { .procname = "poweroff_powercycle", |
664 | .procname = "poweroff_powercycle", | ||
665 | .data = &poweroff_powercycle, | 664 | .data = &poweroff_powercycle, |
666 | .maxlen = sizeof(poweroff_powercycle), | 665 | .maxlen = sizeof(poweroff_powercycle), |
667 | .mode = 0644, | 666 | .mode = 0644, |
668 | .proc_handler = &proc_dointvec }, | 667 | .proc_handler = proc_dointvec }, |
669 | { } | 668 | { } |
670 | }; | 669 | }; |
671 | 670 | ||
672 | static ctl_table ipmi_dir_table[] = { | 671 | static ctl_table ipmi_dir_table[] = { |
673 | { .ctl_name = DEV_IPMI, | 672 | { .procname = "ipmi", |
674 | .procname = "ipmi", | ||
675 | .mode = 0555, | 673 | .mode = 0555, |
676 | .child = ipmi_table }, | 674 | .child = ipmi_table }, |
677 | { } | 675 | { } |
678 | }; | 676 | }; |
679 | 677 | ||
680 | static ctl_table ipmi_root_table[] = { | 678 | static ctl_table ipmi_root_table[] = { |
681 | { .ctl_name = CTL_DEV, | 679 | { .procname = "dev", |
682 | .procname = "dev", | ||
683 | .mode = 0555, | 680 | .mode = 0555, |
684 | .child = ipmi_dir_table }, | 681 | .child = ipmi_dir_table }, |
685 | { } | 682 | { } |
diff --git a/drivers/char/keyboard.c b/drivers/char/keyboard.c index 737be953cc58..950837cf9e9c 100644 --- a/drivers/char/keyboard.c +++ b/drivers/char/keyboard.c | |||
@@ -1249,7 +1249,7 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw) | |||
1249 | 1249 | ||
1250 | if (keycode >= NR_KEYS) | 1250 | if (keycode >= NR_KEYS) |
1251 | if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8) | 1251 | if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8) |
1252 | keysym = K(KT_BRL, keycode - KEY_BRL_DOT1 + 1); | 1252 | keysym = U(K(KT_BRL, keycode - KEY_BRL_DOT1 + 1)); |
1253 | else | 1253 | else |
1254 | return; | 1254 | return; |
1255 | else | 1255 | else |
diff --git a/drivers/char/pcmcia/cm4000_cs.c b/drivers/char/pcmcia/cm4000_cs.c index c250a31efa53..2db4c0a29b05 100644 --- a/drivers/char/pcmcia/cm4000_cs.c +++ b/drivers/char/pcmcia/cm4000_cs.c | |||
@@ -23,8 +23,6 @@ | |||
23 | * All rights reserved. Licensed under dual BSD/GPL license. | 23 | * All rights reserved. Licensed under dual BSD/GPL license. |
24 | */ | 24 | */ |
25 | 25 | ||
26 | /* #define PCMCIA_DEBUG 6 */ | ||
27 | |||
28 | #include <linux/kernel.h> | 26 | #include <linux/kernel.h> |
29 | #include <linux/module.h> | 27 | #include <linux/module.h> |
30 | #include <linux/slab.h> | 28 | #include <linux/slab.h> |
@@ -47,18 +45,17 @@ | |||
47 | 45 | ||
48 | /* #define ATR_CSUM */ | 46 | /* #define ATR_CSUM */ |
49 | 47 | ||
50 | #ifdef PCMCIA_DEBUG | 48 | #define reader_to_dev(x) (&x->p_dev->dev) |
51 | #define reader_to_dev(x) (&handle_to_dev(x->p_dev)) | 49 | |
52 | static int pc_debug = PCMCIA_DEBUG; | 50 | /* n (debug level) is ignored */ |
53 | module_param(pc_debug, int, 0600); | 51 | /* additional debug output may be enabled by re-compiling with |
54 | #define DEBUGP(n, rdr, x, args...) do { \ | 52 | * CM4000_DEBUG set */ |
55 | if (pc_debug >= (n)) \ | 53 | /* #define CM4000_DEBUG */ |
56 | dev_printk(KERN_DEBUG, reader_to_dev(rdr), "%s:" x, \ | 54 | #define DEBUGP(n, rdr, x, args...) do { \ |
57 | __func__ , ## args); \ | 55 | dev_dbg(reader_to_dev(rdr), "%s:" x, \ |
56 | __func__ , ## args); \ | ||
58 | } while (0) | 57 | } while (0) |
59 | #else | 58 | |
60 | #define DEBUGP(n, rdr, x, args...) | ||
61 | #endif | ||
62 | static char *version = "cm4000_cs.c v2.4.0gm6 - All bugs added by Harald Welte"; | 59 | static char *version = "cm4000_cs.c v2.4.0gm6 - All bugs added by Harald Welte"; |
63 | 60 | ||
64 | #define T_1SEC (HZ) | 61 | #define T_1SEC (HZ) |
@@ -174,14 +171,13 @@ static unsigned char fi_di_table[10][14] = { | |||
174 | /* 9 */ {0x09,0x19,0x29,0x39,0x49,0x59,0x69,0x11,0x11,0x99,0xA9,0xB9,0xC9,0xD9} | 171 | /* 9 */ {0x09,0x19,0x29,0x39,0x49,0x59,0x69,0x11,0x11,0x99,0xA9,0xB9,0xC9,0xD9} |
175 | }; | 172 | }; |
176 | 173 | ||
177 | #ifndef PCMCIA_DEBUG | 174 | #ifndef CM4000_DEBUG |
178 | #define xoutb outb | 175 | #define xoutb outb |
179 | #define xinb inb | 176 | #define xinb inb |
180 | #else | 177 | #else |
181 | static inline void xoutb(unsigned char val, unsigned short port) | 178 | static inline void xoutb(unsigned char val, unsigned short port) |
182 | { | 179 | { |
183 | if (pc_debug >= 7) | 180 | pr_debug("outb(val=%.2x,port=%.4x)\n", val, port); |
184 | printk(KERN_DEBUG "outb(val=%.2x,port=%.4x)\n", val, port); | ||
185 | outb(val, port); | 181 | outb(val, port); |
186 | } | 182 | } |
187 | static inline unsigned char xinb(unsigned short port) | 183 | static inline unsigned char xinb(unsigned short port) |
@@ -189,8 +185,7 @@ static inline unsigned char xinb(unsigned short port) | |||
189 | unsigned char val; | 185 | unsigned char val; |
190 | 186 | ||
191 | val = inb(port); | 187 | val = inb(port); |
192 | if (pc_debug >= 7) | 188 | pr_debug("%.2x=inb(%.4x)\n", val, port); |
193 | printk(KERN_DEBUG "%.2x=inb(%.4x)\n", val, port); | ||
194 | 189 | ||
195 | return val; | 190 | return val; |
196 | } | 191 | } |
@@ -514,12 +509,10 @@ static int set_protocol(struct cm4000_dev *dev, struct ptsreq *ptsreq) | |||
514 | for (i = 0; i < 4; i++) { | 509 | for (i = 0; i < 4; i++) { |
515 | xoutb(i, REG_BUF_ADDR(iobase)); | 510 | xoutb(i, REG_BUF_ADDR(iobase)); |
516 | xoutb(dev->pts[i], REG_BUF_DATA(iobase)); /* buf data */ | 511 | xoutb(dev->pts[i], REG_BUF_DATA(iobase)); /* buf data */ |
517 | #ifdef PCMCIA_DEBUG | 512 | #ifdef CM4000_DEBUG |
518 | if (pc_debug >= 5) | 513 | pr_debug("0x%.2x ", dev->pts[i]); |
519 | printk("0x%.2x ", dev->pts[i]); | ||
520 | } | 514 | } |
521 | if (pc_debug >= 5) | 515 | pr_debug("\n"); |
522 | printk("\n"); | ||
523 | #else | 516 | #else |
524 | } | 517 | } |
525 | #endif | 518 | #endif |
@@ -579,14 +572,13 @@ static int set_protocol(struct cm4000_dev *dev, struct ptsreq *ptsreq) | |||
579 | pts_reply[i] = inb(REG_BUF_DATA(iobase)); | 572 | pts_reply[i] = inb(REG_BUF_DATA(iobase)); |
580 | } | 573 | } |
581 | 574 | ||
582 | #ifdef PCMCIA_DEBUG | 575 | #ifdef CM4000_DEBUG |
583 | DEBUGP(2, dev, "PTSreply: "); | 576 | DEBUGP(2, dev, "PTSreply: "); |
584 | for (i = 0; i < num_bytes_read; i++) { | 577 | for (i = 0; i < num_bytes_read; i++) { |
585 | if (pc_debug >= 5) | 578 | pr_debug("0x%.2x ", pts_reply[i]); |
586 | printk("0x%.2x ", pts_reply[i]); | ||
587 | } | 579 | } |
588 | printk("\n"); | 580 | pr_debug("\n"); |
589 | #endif /* PCMCIA_DEBUG */ | 581 | #endif /* CM4000_DEBUG */ |
590 | 582 | ||
591 | DEBUGP(5, dev, "Clear Tactive in Flags1\n"); | 583 | DEBUGP(5, dev, "Clear Tactive in Flags1\n"); |
592 | xoutb(0x20, REG_FLAGS1(iobase)); | 584 | xoutb(0x20, REG_FLAGS1(iobase)); |
@@ -655,7 +647,7 @@ static void terminate_monitor(struct cm4000_dev *dev) | |||
655 | 647 | ||
656 | DEBUGP(5, dev, "Delete timer\n"); | 648 | DEBUGP(5, dev, "Delete timer\n"); |
657 | del_timer_sync(&dev->timer); | 649 | del_timer_sync(&dev->timer); |
658 | #ifdef PCMCIA_DEBUG | 650 | #ifdef CM4000_DEBUG |
659 | dev->monitor_running = 0; | 651 | dev->monitor_running = 0; |
660 | #endif | 652 | #endif |
661 | 653 | ||
@@ -898,7 +890,7 @@ static void monitor_card(unsigned long p) | |||
898 | DEBUGP(4, dev, "ATR checksum (0x%.2x, should " | 890 | DEBUGP(4, dev, "ATR checksum (0x%.2x, should " |
899 | "be zero) failed\n", dev->atr_csum); | 891 | "be zero) failed\n", dev->atr_csum); |
900 | } | 892 | } |
901 | #ifdef PCMCIA_DEBUG | 893 | #ifdef CM4000_DEBUG |
902 | else if (test_bit(IS_BAD_LENGTH, &dev->flags)) { | 894 | else if (test_bit(IS_BAD_LENGTH, &dev->flags)) { |
903 | DEBUGP(4, dev, "ATR length error\n"); | 895 | DEBUGP(4, dev, "ATR length error\n"); |
904 | } else { | 896 | } else { |
@@ -1415,7 +1407,7 @@ static long cmm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
1415 | int size; | 1407 | int size; |
1416 | int rc; | 1408 | int rc; |
1417 | void __user *argp = (void __user *)arg; | 1409 | void __user *argp = (void __user *)arg; |
1418 | #ifdef PCMCIA_DEBUG | 1410 | #ifdef CM4000_DEBUG |
1419 | char *ioctl_names[CM_IOC_MAXNR + 1] = { | 1411 | char *ioctl_names[CM_IOC_MAXNR + 1] = { |
1420 | [_IOC_NR(CM_IOCGSTATUS)] "CM_IOCGSTATUS", | 1412 | [_IOC_NR(CM_IOCGSTATUS)] "CM_IOCGSTATUS", |
1421 | [_IOC_NR(CM_IOCGATR)] "CM_IOCGATR", | 1413 | [_IOC_NR(CM_IOCGATR)] "CM_IOCGATR", |
@@ -1423,9 +1415,9 @@ static long cmm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
1423 | [_IOC_NR(CM_IOCSPTS)] "CM_IOCSPTS", | 1415 | [_IOC_NR(CM_IOCSPTS)] "CM_IOCSPTS", |
1424 | [_IOC_NR(CM_IOSDBGLVL)] "CM4000_DBGLVL", | 1416 | [_IOC_NR(CM_IOSDBGLVL)] "CM4000_DBGLVL", |
1425 | }; | 1417 | }; |
1426 | #endif | ||
1427 | DEBUGP(3, dev, "cmm_ioctl(device=%d.%d) %s\n", imajor(inode), | 1418 | DEBUGP(3, dev, "cmm_ioctl(device=%d.%d) %s\n", imajor(inode), |
1428 | iminor(inode), ioctl_names[_IOC_NR(cmd)]); | 1419 | iminor(inode), ioctl_names[_IOC_NR(cmd)]); |
1420 | #endif | ||
1429 | 1421 | ||
1430 | lock_kernel(); | 1422 | lock_kernel(); |
1431 | rc = -ENODEV; | 1423 | rc = -ENODEV; |
@@ -1523,7 +1515,7 @@ static long cmm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
1523 | } | 1515 | } |
1524 | case CM_IOCARDOFF: | 1516 | case CM_IOCARDOFF: |
1525 | 1517 | ||
1526 | #ifdef PCMCIA_DEBUG | 1518 | #ifdef CM4000_DEBUG |
1527 | DEBUGP(4, dev, "... in CM_IOCARDOFF\n"); | 1519 | DEBUGP(4, dev, "... in CM_IOCARDOFF\n"); |
1528 | if (dev->flags0 & 0x01) { | 1520 | if (dev->flags0 & 0x01) { |
1529 | DEBUGP(4, dev, " Card inserted\n"); | 1521 | DEBUGP(4, dev, " Card inserted\n"); |
@@ -1625,18 +1617,9 @@ static long cmm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
1625 | 1617 | ||
1626 | } | 1618 | } |
1627 | break; | 1619 | break; |
1628 | #ifdef PCMCIA_DEBUG | 1620 | #ifdef CM4000_DEBUG |
1629 | case CM_IOSDBGLVL: /* set debug log level */ | 1621 | case CM_IOSDBGLVL: |
1630 | { | 1622 | rc = -ENOTTY; |
1631 | int old_pc_debug = 0; | ||
1632 | |||
1633 | old_pc_debug = pc_debug; | ||
1634 | if (copy_from_user(&pc_debug, argp, sizeof(int))) | ||
1635 | rc = -EFAULT; | ||
1636 | else if (old_pc_debug != pc_debug) | ||
1637 | DEBUGP(0, dev, "Changed debug log level " | ||
1638 | "to %i\n", pc_debug); | ||
1639 | } | ||
1640 | break; | 1623 | break; |
1641 | #endif | 1624 | #endif |
1642 | default: | 1625 | default: |
diff --git a/drivers/char/pcmcia/cm4040_cs.c b/drivers/char/pcmcia/cm4040_cs.c index 4f0723b07974..a6a70e476bea 100644 --- a/drivers/char/pcmcia/cm4040_cs.c +++ b/drivers/char/pcmcia/cm4040_cs.c | |||
@@ -17,8 +17,6 @@ | |||
17 | * All rights reserved, Dual BSD/GPL Licensed. | 17 | * All rights reserved, Dual BSD/GPL Licensed. |
18 | */ | 18 | */ |
19 | 19 | ||
20 | /* #define PCMCIA_DEBUG 6 */ | ||
21 | |||
22 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
23 | #include <linux/module.h> | 21 | #include <linux/module.h> |
24 | #include <linux/slab.h> | 22 | #include <linux/slab.h> |
@@ -41,18 +39,16 @@ | |||
41 | #include "cm4040_cs.h" | 39 | #include "cm4040_cs.h" |
42 | 40 | ||
43 | 41 | ||
44 | #ifdef PCMCIA_DEBUG | 42 | #define reader_to_dev(x) (&x->p_dev->dev) |
45 | #define reader_to_dev(x) (&handle_to_dev(x->p_dev)) | 43 | |
46 | static int pc_debug = PCMCIA_DEBUG; | 44 | /* n (debug level) is ignored */ |
47 | module_param(pc_debug, int, 0600); | 45 | /* additional debug output may be enabled by re-compiling with |
48 | #define DEBUGP(n, rdr, x, args...) do { \ | 46 | * CM4040_DEBUG set */ |
49 | if (pc_debug >= (n)) \ | 47 | /* #define CM4040_DEBUG */ |
50 | dev_printk(KERN_DEBUG, reader_to_dev(rdr), "%s:" x, \ | 48 | #define DEBUGP(n, rdr, x, args...) do { \ |
51 | __func__ , ##args); \ | 49 | dev_dbg(reader_to_dev(rdr), "%s:" x, \ |
50 | __func__ , ## args); \ | ||
52 | } while (0) | 51 | } while (0) |
53 | #else | ||
54 | #define DEBUGP(n, rdr, x, args...) | ||
55 | #endif | ||
56 | 52 | ||
57 | static char *version = | 53 | static char *version = |
58 | "OMNIKEY CardMan 4040 v1.1.0gm5 - All bugs added by Harald Welte"; | 54 | "OMNIKEY CardMan 4040 v1.1.0gm5 - All bugs added by Harald Welte"; |
@@ -90,14 +86,13 @@ struct reader_dev { | |||
90 | 86 | ||
91 | static struct pcmcia_device *dev_table[CM_MAX_DEV]; | 87 | static struct pcmcia_device *dev_table[CM_MAX_DEV]; |
92 | 88 | ||
93 | #ifndef PCMCIA_DEBUG | 89 | #ifndef CM4040_DEBUG |
94 | #define xoutb outb | 90 | #define xoutb outb |
95 | #define xinb inb | 91 | #define xinb inb |
96 | #else | 92 | #else |
97 | static inline void xoutb(unsigned char val, unsigned short port) | 93 | static inline void xoutb(unsigned char val, unsigned short port) |
98 | { | 94 | { |
99 | if (pc_debug >= 7) | 95 | pr_debug("outb(val=%.2x,port=%.4x)\n", val, port); |
100 | printk(KERN_DEBUG "outb(val=%.2x,port=%.4x)\n", val, port); | ||
101 | outb(val, port); | 96 | outb(val, port); |
102 | } | 97 | } |
103 | 98 | ||
@@ -106,8 +101,7 @@ static inline unsigned char xinb(unsigned short port) | |||
106 | unsigned char val; | 101 | unsigned char val; |
107 | 102 | ||
108 | val = inb(port); | 103 | val = inb(port); |
109 | if (pc_debug >= 7) | 104 | pr_debug("%.2x=inb(%.4x)\n", val, port); |
110 | printk(KERN_DEBUG "%.2x=inb(%.4x)\n", val, port); | ||
111 | return val; | 105 | return val; |
112 | } | 106 | } |
113 | #endif | 107 | #endif |
@@ -260,23 +254,22 @@ static ssize_t cm4040_read(struct file *filp, char __user *buf, | |||
260 | return -EIO; | 254 | return -EIO; |
261 | } | 255 | } |
262 | dev->r_buf[i] = xinb(iobase + REG_OFFSET_BULK_IN); | 256 | dev->r_buf[i] = xinb(iobase + REG_OFFSET_BULK_IN); |
263 | #ifdef PCMCIA_DEBUG | 257 | #ifdef CM4040_DEBUG |
264 | if (pc_debug >= 6) | 258 | pr_debug("%lu:%2x ", i, dev->r_buf[i]); |
265 | printk(KERN_DEBUG "%lu:%2x ", i, dev->r_buf[i]); | ||
266 | } | 259 | } |
267 | printk("\n"); | 260 | pr_debug("\n"); |
268 | #else | 261 | #else |
269 | } | 262 | } |
270 | #endif | 263 | #endif |
271 | 264 | ||
272 | bytes_to_read = 5 + le32_to_cpu(*(__le32 *)&dev->r_buf[1]); | 265 | bytes_to_read = 5 + le32_to_cpu(*(__le32 *)&dev->r_buf[1]); |
273 | 266 | ||
274 | DEBUGP(6, dev, "BytesToRead=%lu\n", bytes_to_read); | 267 | DEBUGP(6, dev, "BytesToRead=%zu\n", bytes_to_read); |
275 | 268 | ||
276 | min_bytes_to_read = min(count, bytes_to_read + 5); | 269 | min_bytes_to_read = min(count, bytes_to_read + 5); |
277 | min_bytes_to_read = min_t(size_t, min_bytes_to_read, READ_WRITE_BUFFER_SIZE); | 270 | min_bytes_to_read = min_t(size_t, min_bytes_to_read, READ_WRITE_BUFFER_SIZE); |
278 | 271 | ||
279 | DEBUGP(6, dev, "Min=%lu\n", min_bytes_to_read); | 272 | DEBUGP(6, dev, "Min=%zu\n", min_bytes_to_read); |
280 | 273 | ||
281 | for (i = 0; i < (min_bytes_to_read-5); i++) { | 274 | for (i = 0; i < (min_bytes_to_read-5); i++) { |
282 | rc = wait_for_bulk_in_ready(dev); | 275 | rc = wait_for_bulk_in_ready(dev); |
@@ -288,11 +281,10 @@ static ssize_t cm4040_read(struct file *filp, char __user *buf, | |||
288 | return -EIO; | 281 | return -EIO; |
289 | } | 282 | } |
290 | dev->r_buf[i+5] = xinb(iobase + REG_OFFSET_BULK_IN); | 283 | dev->r_buf[i+5] = xinb(iobase + REG_OFFSET_BULK_IN); |
291 | #ifdef PCMCIA_DEBUG | 284 | #ifdef CM4040_DEBUG |
292 | if (pc_debug >= 6) | 285 | pr_debug("%lu:%2x ", i, dev->r_buf[i]); |
293 | printk(KERN_DEBUG "%lu:%2x ", i, dev->r_buf[i]); | ||
294 | } | 286 | } |
295 | printk("\n"); | 287 | pr_debug("\n"); |
296 | #else | 288 | #else |
297 | } | 289 | } |
298 | #endif | 290 | #endif |
@@ -547,7 +539,7 @@ static int cm4040_config_check(struct pcmcia_device *p_dev, | |||
547 | p_dev->io.IOAddrLines = cfg->io.flags & CISTPL_IO_LINES_MASK; | 539 | p_dev->io.IOAddrLines = cfg->io.flags & CISTPL_IO_LINES_MASK; |
548 | 540 | ||
549 | rc = pcmcia_request_io(p_dev, &p_dev->io); | 541 | rc = pcmcia_request_io(p_dev, &p_dev->io); |
550 | dev_printk(KERN_INFO, &handle_to_dev(p_dev), | 542 | dev_printk(KERN_INFO, &p_dev->dev, |
551 | "pcmcia_request_io returned 0x%x\n", rc); | 543 | "pcmcia_request_io returned 0x%x\n", rc); |
552 | return rc; | 544 | return rc; |
553 | } | 545 | } |
@@ -569,7 +561,7 @@ static int reader_config(struct pcmcia_device *link, int devno) | |||
569 | 561 | ||
570 | fail_rc = pcmcia_request_configuration(link, &link->conf); | 562 | fail_rc = pcmcia_request_configuration(link, &link->conf); |
571 | if (fail_rc != 0) { | 563 | if (fail_rc != 0) { |
572 | dev_printk(KERN_INFO, &handle_to_dev(link), | 564 | dev_printk(KERN_INFO, &link->dev, |
573 | "pcmcia_request_configuration failed 0x%x\n", | 565 | "pcmcia_request_configuration failed 0x%x\n", |
574 | fail_rc); | 566 | fail_rc); |
575 | goto cs_release; | 567 | goto cs_release; |
diff --git a/drivers/char/pcmcia/ipwireless/hardware.c b/drivers/char/pcmcia/ipwireless/hardware.c index 4c1820cad712..99cffdab1056 100644 --- a/drivers/char/pcmcia/ipwireless/hardware.c +++ b/drivers/char/pcmcia/ipwireless/hardware.c | |||
@@ -1213,12 +1213,12 @@ static irqreturn_t ipwireless_handle_v2_v3_interrupt(int irq, | |||
1213 | 1213 | ||
1214 | irqreturn_t ipwireless_interrupt(int irq, void *dev_id) | 1214 | irqreturn_t ipwireless_interrupt(int irq, void *dev_id) |
1215 | { | 1215 | { |
1216 | struct ipw_hardware *hw = dev_id; | 1216 | struct ipw_dev *ipw = dev_id; |
1217 | 1217 | ||
1218 | if (hw->hw_version == HW_VERSION_1) | 1218 | if (ipw->hardware->hw_version == HW_VERSION_1) |
1219 | return ipwireless_handle_v1_interrupt(irq, hw); | 1219 | return ipwireless_handle_v1_interrupt(irq, ipw->hardware); |
1220 | else | 1220 | else |
1221 | return ipwireless_handle_v2_v3_interrupt(irq, hw); | 1221 | return ipwireless_handle_v2_v3_interrupt(irq, ipw->hardware); |
1222 | } | 1222 | } |
1223 | 1223 | ||
1224 | static void flush_packets_to_hw(struct ipw_hardware *hw) | 1224 | static void flush_packets_to_hw(struct ipw_hardware *hw) |
diff --git a/drivers/char/pcmcia/ipwireless/main.c b/drivers/char/pcmcia/ipwireless/main.c index 5216fce0c62d..dff24dae1485 100644 --- a/drivers/char/pcmcia/ipwireless/main.c +++ b/drivers/char/pcmcia/ipwireless/main.c | |||
@@ -65,10 +65,7 @@ static void signalled_reboot_work(struct work_struct *work_reboot) | |||
65 | struct ipw_dev *ipw = container_of(work_reboot, struct ipw_dev, | 65 | struct ipw_dev *ipw = container_of(work_reboot, struct ipw_dev, |
66 | work_reboot); | 66 | work_reboot); |
67 | struct pcmcia_device *link = ipw->link; | 67 | struct pcmcia_device *link = ipw->link; |
68 | int ret = pcmcia_reset_card(link->socket); | 68 | pcmcia_reset_card(link->socket); |
69 | |||
70 | if (ret != 0) | ||
71 | cs_error(link, ResetCard, ret); | ||
72 | } | 69 | } |
73 | 70 | ||
74 | static void signalled_reboot_callback(void *callback_data) | 71 | static void signalled_reboot_callback(void *callback_data) |
@@ -79,208 +76,127 @@ static void signalled_reboot_callback(void *callback_data) | |||
79 | schedule_work(&ipw->work_reboot); | 76 | schedule_work(&ipw->work_reboot); |
80 | } | 77 | } |
81 | 78 | ||
82 | static int config_ipwireless(struct ipw_dev *ipw) | 79 | static int ipwireless_probe(struct pcmcia_device *p_dev, |
80 | cistpl_cftable_entry_t *cfg, | ||
81 | cistpl_cftable_entry_t *dflt, | ||
82 | unsigned int vcc, | ||
83 | void *priv_data) | ||
83 | { | 84 | { |
84 | struct pcmcia_device *link = ipw->link; | 85 | struct ipw_dev *ipw = priv_data; |
85 | int ret; | 86 | struct resource *io_resource; |
86 | tuple_t tuple; | ||
87 | unsigned short buf[64]; | ||
88 | cisparse_t parse; | ||
89 | unsigned short cor_value; | ||
90 | memreq_t memreq_attr_memory; | 87 | memreq_t memreq_attr_memory; |
91 | memreq_t memreq_common_memory; | 88 | memreq_t memreq_common_memory; |
89 | int ret; | ||
92 | 90 | ||
93 | ipw->is_v2_card = 0; | 91 | p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; |
94 | 92 | p_dev->io.BasePort1 = cfg->io.win[0].base; | |
95 | tuple.Attributes = 0; | 93 | p_dev->io.NumPorts1 = cfg->io.win[0].len; |
96 | tuple.TupleData = (cisdata_t *) buf; | 94 | p_dev->io.IOAddrLines = 16; |
97 | tuple.TupleDataMax = sizeof(buf); | ||
98 | tuple.TupleOffset = 0; | ||
99 | |||
100 | tuple.DesiredTuple = RETURN_FIRST_TUPLE; | ||
101 | |||
102 | ret = pcmcia_get_first_tuple(link, &tuple); | ||
103 | |||
104 | while (ret == 0) { | ||
105 | ret = pcmcia_get_tuple_data(link, &tuple); | ||
106 | |||
107 | if (ret != 0) { | ||
108 | cs_error(link, GetTupleData, ret); | ||
109 | goto exit0; | ||
110 | } | ||
111 | ret = pcmcia_get_next_tuple(link, &tuple); | ||
112 | } | ||
113 | |||
114 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | ||
115 | |||
116 | ret = pcmcia_get_first_tuple(link, &tuple); | ||
117 | |||
118 | if (ret != 0) { | ||
119 | cs_error(link, GetFirstTuple, ret); | ||
120 | goto exit0; | ||
121 | } | ||
122 | |||
123 | ret = pcmcia_get_tuple_data(link, &tuple); | ||
124 | |||
125 | if (ret != 0) { | ||
126 | cs_error(link, GetTupleData, ret); | ||
127 | goto exit0; | ||
128 | } | ||
129 | |||
130 | ret = pcmcia_parse_tuple(&tuple, &parse); | ||
131 | |||
132 | if (ret != 0) { | ||
133 | cs_error(link, ParseTuple, ret); | ||
134 | goto exit0; | ||
135 | } | ||
136 | |||
137 | link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; | ||
138 | link->io.BasePort1 = parse.cftable_entry.io.win[0].base; | ||
139 | link->io.NumPorts1 = parse.cftable_entry.io.win[0].len; | ||
140 | link->io.IOAddrLines = 16; | ||
141 | |||
142 | link->irq.IRQInfo1 = parse.cftable_entry.irq.IRQInfo1; | ||
143 | 95 | ||
144 | /* 0x40 causes it to generate level mode interrupts. */ | 96 | /* 0x40 causes it to generate level mode interrupts. */ |
145 | /* 0x04 enables IREQ pin. */ | 97 | /* 0x04 enables IREQ pin. */ |
146 | cor_value = parse.cftable_entry.index | 0x44; | 98 | p_dev->conf.ConfigIndex = cfg->index | 0x44; |
147 | link->conf.ConfigIndex = cor_value; | 99 | ret = pcmcia_request_io(p_dev, &p_dev->io); |
100 | if (ret) | ||
101 | return ret; | ||
148 | 102 | ||
149 | /* IRQ and I/O settings */ | 103 | io_resource = request_region(p_dev->io.BasePort1, p_dev->io.NumPorts1, |
150 | tuple.DesiredTuple = CISTPL_CONFIG; | 104 | IPWIRELESS_PCCARD_NAME); |
151 | 105 | ||
152 | ret = pcmcia_get_first_tuple(link, &tuple); | 106 | if (cfg->mem.nwin == 0) |
107 | return 0; | ||
153 | 108 | ||
154 | if (ret != 0) { | 109 | ipw->request_common_memory.Attributes = |
155 | cs_error(link, GetFirstTuple, ret); | 110 | WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM | WIN_ENABLE; |
156 | goto exit0; | 111 | ipw->request_common_memory.Base = cfg->mem.win[0].host_addr; |
157 | } | 112 | ipw->request_common_memory.Size = cfg->mem.win[0].len; |
113 | if (ipw->request_common_memory.Size < 0x1000) | ||
114 | ipw->request_common_memory.Size = 0x1000; | ||
115 | ipw->request_common_memory.AccessSpeed = 0; | ||
158 | 116 | ||
159 | ret = pcmcia_get_tuple_data(link, &tuple); | 117 | ret = pcmcia_request_window(p_dev, &ipw->request_common_memory, |
160 | 118 | &ipw->handle_common_memory); | |
161 | if (ret != 0) { | ||
162 | cs_error(link, GetTupleData, ret); | ||
163 | goto exit0; | ||
164 | } | ||
165 | 119 | ||
166 | ret = pcmcia_parse_tuple(&tuple, &parse); | 120 | if (ret != 0) |
121 | goto exit1; | ||
167 | 122 | ||
168 | if (ret != 0) { | 123 | memreq_common_memory.CardOffset = cfg->mem.win[0].card_addr; |
169 | cs_error(link, GetTupleData, ret); | 124 | memreq_common_memory.Page = 0; |
170 | goto exit0; | ||
171 | } | ||
172 | link->conf.Attributes = CONF_ENABLE_IRQ; | ||
173 | link->conf.ConfigBase = parse.config.base; | ||
174 | link->conf.Present = parse.config.rmask[0]; | ||
175 | link->conf.IntType = INT_MEMORY_AND_IO; | ||
176 | 125 | ||
177 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT; | 126 | ret = pcmcia_map_mem_page(p_dev, ipw->handle_common_memory, |
178 | link->irq.Handler = ipwireless_interrupt; | 127 | &memreq_common_memory); |
179 | link->irq.Instance = ipw->hardware; | ||
180 | 128 | ||
181 | ret = pcmcia_request_io(link, &link->io); | 129 | if (ret != 0) |
130 | goto exit2; | ||
182 | 131 | ||
183 | if (ret != 0) { | 132 | ipw->is_v2_card = cfg->mem.win[0].len == 0x100; |
184 | cs_error(link, RequestIO, ret); | ||
185 | goto exit0; | ||
186 | } | ||
187 | 133 | ||
188 | request_region(link->io.BasePort1, link->io.NumPorts1, | 134 | ipw->common_memory = ioremap(ipw->request_common_memory.Base, |
135 | ipw->request_common_memory.Size); | ||
136 | request_mem_region(ipw->request_common_memory.Base, | ||
137 | ipw->request_common_memory.Size, | ||
189 | IPWIRELESS_PCCARD_NAME); | 138 | IPWIRELESS_PCCARD_NAME); |
190 | 139 | ||
191 | /* memory settings */ | 140 | ipw->request_attr_memory.Attributes = |
192 | 141 | WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_AM | WIN_ENABLE; | |
193 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | 142 | ipw->request_attr_memory.Base = 0; |
194 | 143 | ipw->request_attr_memory.Size = 0; /* this used to be 0x1000 */ | |
195 | ret = pcmcia_get_first_tuple(link, &tuple); | 144 | ipw->request_attr_memory.AccessSpeed = 0; |
196 | |||
197 | if (ret != 0) { | ||
198 | cs_error(link, GetFirstTuple, ret); | ||
199 | goto exit1; | ||
200 | } | ||
201 | |||
202 | ret = pcmcia_get_tuple_data(link, &tuple); | ||
203 | 145 | ||
204 | if (ret != 0) { | 146 | ret = pcmcia_request_window(p_dev, &ipw->request_attr_memory, |
205 | cs_error(link, GetTupleData, ret); | 147 | &ipw->handle_attr_memory); |
206 | goto exit1; | ||
207 | } | ||
208 | |||
209 | ret = pcmcia_parse_tuple(&tuple, &parse); | ||
210 | |||
211 | if (ret != 0) { | ||
212 | cs_error(link, ParseTuple, ret); | ||
213 | goto exit1; | ||
214 | } | ||
215 | 148 | ||
216 | if (parse.cftable_entry.mem.nwin > 0) { | 149 | if (ret != 0) |
217 | ipw->request_common_memory.Attributes = | 150 | goto exit2; |
218 | WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM | WIN_ENABLE; | ||
219 | ipw->request_common_memory.Base = | ||
220 | parse.cftable_entry.mem.win[0].host_addr; | ||
221 | ipw->request_common_memory.Size = parse.cftable_entry.mem.win[0].len; | ||
222 | if (ipw->request_common_memory.Size < 0x1000) | ||
223 | ipw->request_common_memory.Size = 0x1000; | ||
224 | ipw->request_common_memory.AccessSpeed = 0; | ||
225 | |||
226 | ret = pcmcia_request_window(&link, &ipw->request_common_memory, | ||
227 | &ipw->handle_common_memory); | ||
228 | 151 | ||
229 | if (ret != 0) { | 152 | memreq_attr_memory.CardOffset = 0; |
230 | cs_error(link, RequestWindow, ret); | 153 | memreq_attr_memory.Page = 0; |
231 | goto exit1; | ||
232 | } | ||
233 | 154 | ||
234 | memreq_common_memory.CardOffset = | 155 | ret = pcmcia_map_mem_page(p_dev, ipw->handle_attr_memory, |
235 | parse.cftable_entry.mem.win[0].card_addr; | 156 | &memreq_attr_memory); |
236 | memreq_common_memory.Page = 0; | ||
237 | 157 | ||
238 | ret = pcmcia_map_mem_page(ipw->handle_common_memory, | 158 | if (ret != 0) |
239 | &memreq_common_memory); | 159 | goto exit3; |
240 | 160 | ||
241 | if (ret != 0) { | 161 | ipw->attr_memory = ioremap(ipw->request_attr_memory.Base, |
242 | cs_error(link, MapMemPage, ret); | 162 | ipw->request_attr_memory.Size); |
243 | goto exit1; | 163 | request_mem_region(ipw->request_attr_memory.Base, |
244 | } | 164 | ipw->request_attr_memory.Size, IPWIRELESS_PCCARD_NAME); |
245 | 165 | ||
246 | ipw->is_v2_card = | 166 | return 0; |
247 | parse.cftable_entry.mem.win[0].len == 0x100; | ||
248 | 167 | ||
249 | ipw->common_memory = ioremap(ipw->request_common_memory.Base, | 168 | exit3: |
169 | pcmcia_release_window(p_dev, ipw->handle_attr_memory); | ||
170 | exit2: | ||
171 | if (ipw->common_memory) { | ||
172 | release_mem_region(ipw->request_common_memory.Base, | ||
250 | ipw->request_common_memory.Size); | 173 | ipw->request_common_memory.Size); |
251 | request_mem_region(ipw->request_common_memory.Base, | 174 | iounmap(ipw->common_memory); |
252 | ipw->request_common_memory.Size, IPWIRELESS_PCCARD_NAME); | 175 | pcmcia_release_window(p_dev, ipw->handle_common_memory); |
253 | 176 | } else | |
254 | ipw->request_attr_memory.Attributes = | 177 | pcmcia_release_window(p_dev, ipw->handle_common_memory); |
255 | WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_AM | WIN_ENABLE; | 178 | exit1: |
256 | ipw->request_attr_memory.Base = 0; | 179 | release_resource(io_resource); |
257 | ipw->request_attr_memory.Size = 0; /* this used to be 0x1000 */ | 180 | pcmcia_disable_device(p_dev); |
258 | ipw->request_attr_memory.AccessSpeed = 0; | 181 | return -1; |
259 | 182 | } | |
260 | ret = pcmcia_request_window(&link, &ipw->request_attr_memory, | ||
261 | &ipw->handle_attr_memory); | ||
262 | 183 | ||
263 | if (ret != 0) { | 184 | static int config_ipwireless(struct ipw_dev *ipw) |
264 | cs_error(link, RequestWindow, ret); | 185 | { |
265 | goto exit2; | 186 | struct pcmcia_device *link = ipw->link; |
266 | } | 187 | int ret = 0; |
267 | 188 | ||
268 | memreq_attr_memory.CardOffset = 0; | 189 | ipw->is_v2_card = 0; |
269 | memreq_attr_memory.Page = 0; | ||
270 | 190 | ||
271 | ret = pcmcia_map_mem_page(ipw->handle_attr_memory, | 191 | ret = pcmcia_loop_config(link, ipwireless_probe, ipw); |
272 | &memreq_attr_memory); | 192 | if (ret != 0) |
193 | return ret; | ||
273 | 194 | ||
274 | if (ret != 0) { | 195 | link->conf.Attributes = CONF_ENABLE_IRQ; |
275 | cs_error(link, MapMemPage, ret); | 196 | link->conf.IntType = INT_MEMORY_AND_IO; |
276 | goto exit2; | ||
277 | } | ||
278 | 197 | ||
279 | ipw->attr_memory = ioremap(ipw->request_attr_memory.Base, | 198 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; |
280 | ipw->request_attr_memory.Size); | 199 | link->irq.Handler = ipwireless_interrupt; |
281 | request_mem_region(ipw->request_attr_memory.Base, ipw->request_attr_memory.Size, | ||
282 | IPWIRELESS_PCCARD_NAME); | ||
283 | } | ||
284 | 200 | ||
285 | INIT_WORK(&ipw->work_reboot, signalled_reboot_work); | 201 | INIT_WORK(&ipw->work_reboot, signalled_reboot_work); |
286 | 202 | ||
@@ -291,10 +207,8 @@ static int config_ipwireless(struct ipw_dev *ipw) | |||
291 | 207 | ||
292 | ret = pcmcia_request_irq(link, &link->irq); | 208 | ret = pcmcia_request_irq(link, &link->irq); |
293 | 209 | ||
294 | if (ret != 0) { | 210 | if (ret != 0) |
295 | cs_error(link, RequestIRQ, ret); | 211 | goto exit; |
296 | goto exit3; | ||
297 | } | ||
298 | 212 | ||
299 | printk(KERN_INFO IPWIRELESS_PCCARD_NAME ": Card type %s\n", | 213 | printk(KERN_INFO IPWIRELESS_PCCARD_NAME ": Card type %s\n", |
300 | ipw->is_v2_card ? "V2/V3" : "V1"); | 214 | ipw->is_v2_card ? "V2/V3" : "V1"); |
@@ -316,12 +230,12 @@ static int config_ipwireless(struct ipw_dev *ipw) | |||
316 | 230 | ||
317 | ipw->network = ipwireless_network_create(ipw->hardware); | 231 | ipw->network = ipwireless_network_create(ipw->hardware); |
318 | if (!ipw->network) | 232 | if (!ipw->network) |
319 | goto exit3; | 233 | goto exit; |
320 | 234 | ||
321 | ipw->tty = ipwireless_tty_create(ipw->hardware, ipw->network, | 235 | ipw->tty = ipwireless_tty_create(ipw->hardware, ipw->network, |
322 | ipw->nodes); | 236 | ipw->nodes); |
323 | if (!ipw->tty) | 237 | if (!ipw->tty) |
324 | goto exit3; | 238 | goto exit; |
325 | 239 | ||
326 | ipwireless_init_hardware_v2_v3(ipw->hardware); | 240 | ipwireless_init_hardware_v2_v3(ipw->hardware); |
327 | 241 | ||
@@ -331,35 +245,27 @@ static int config_ipwireless(struct ipw_dev *ipw) | |||
331 | */ | 245 | */ |
332 | ret = pcmcia_request_configuration(link, &link->conf); | 246 | ret = pcmcia_request_configuration(link, &link->conf); |
333 | 247 | ||
334 | if (ret != 0) { | 248 | if (ret != 0) |
335 | cs_error(link, RequestConfiguration, ret); | 249 | goto exit; |
336 | goto exit4; | ||
337 | } | ||
338 | 250 | ||
339 | link->dev_node = &ipw->nodes[0]; | 251 | link->dev_node = &ipw->nodes[0]; |
340 | 252 | ||
341 | return 0; | 253 | return 0; |
342 | 254 | ||
343 | exit4: | 255 | exit: |
344 | pcmcia_disable_device(link); | ||
345 | exit3: | ||
346 | if (ipw->attr_memory) { | 256 | if (ipw->attr_memory) { |
347 | release_mem_region(ipw->request_attr_memory.Base, | 257 | release_mem_region(ipw->request_attr_memory.Base, |
348 | ipw->request_attr_memory.Size); | 258 | ipw->request_attr_memory.Size); |
349 | iounmap(ipw->attr_memory); | 259 | iounmap(ipw->attr_memory); |
350 | pcmcia_release_window(ipw->handle_attr_memory); | 260 | pcmcia_release_window(link, ipw->handle_attr_memory); |
351 | pcmcia_disable_device(link); | ||
352 | } | 261 | } |
353 | exit2: | ||
354 | if (ipw->common_memory) { | 262 | if (ipw->common_memory) { |
355 | release_mem_region(ipw->request_common_memory.Base, | 263 | release_mem_region(ipw->request_common_memory.Base, |
356 | ipw->request_common_memory.Size); | 264 | ipw->request_common_memory.Size); |
357 | iounmap(ipw->common_memory); | 265 | iounmap(ipw->common_memory); |
358 | pcmcia_release_window(ipw->handle_common_memory); | 266 | pcmcia_release_window(link, ipw->handle_common_memory); |
359 | } | 267 | } |
360 | exit1: | ||
361 | pcmcia_disable_device(link); | 268 | pcmcia_disable_device(link); |
362 | exit0: | ||
363 | return -1; | 269 | return -1; |
364 | } | 270 | } |
365 | 271 | ||
@@ -378,9 +284,9 @@ static void release_ipwireless(struct ipw_dev *ipw) | |||
378 | iounmap(ipw->attr_memory); | 284 | iounmap(ipw->attr_memory); |
379 | } | 285 | } |
380 | if (ipw->common_memory) | 286 | if (ipw->common_memory) |
381 | pcmcia_release_window(ipw->handle_common_memory); | 287 | pcmcia_release_window(ipw->link, ipw->handle_common_memory); |
382 | if (ipw->attr_memory) | 288 | if (ipw->attr_memory) |
383 | pcmcia_release_window(ipw->handle_attr_memory); | 289 | pcmcia_release_window(ipw->link, ipw->handle_attr_memory); |
384 | 290 | ||
385 | /* Break the link with Card Services */ | 291 | /* Break the link with Card Services */ |
386 | pcmcia_disable_device(ipw->link); | 292 | pcmcia_disable_device(ipw->link); |
@@ -406,7 +312,6 @@ static int ipwireless_attach(struct pcmcia_device *link) | |||
406 | 312 | ||
407 | ipw->link = link; | 313 | ipw->link = link; |
408 | link->priv = ipw; | 314 | link->priv = ipw; |
409 | link->irq.Instance = ipw; | ||
410 | 315 | ||
411 | /* Link this device into our device list. */ | 316 | /* Link this device into our device list. */ |
412 | link->dev_node = &ipw->nodes[0]; | 317 | link->dev_node = &ipw->nodes[0]; |
@@ -421,7 +326,6 @@ static int ipwireless_attach(struct pcmcia_device *link) | |||
421 | ret = config_ipwireless(ipw); | 326 | ret = config_ipwireless(ipw); |
422 | 327 | ||
423 | if (ret != 0) { | 328 | if (ret != 0) { |
424 | cs_error(link, RegisterClient, ret); | ||
425 | ipwireless_detach(link); | 329 | ipwireless_detach(link); |
426 | return ret; | 330 | return ret; |
427 | } | 331 | } |
diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c index caf6e4d19469..c31a0d913d37 100644 --- a/drivers/char/pcmcia/synclink_cs.c +++ b/drivers/char/pcmcia/synclink_cs.c | |||
@@ -554,7 +554,6 @@ static int mgslpc_probe(struct pcmcia_device *link) | |||
554 | 554 | ||
555 | /* Interrupt setup */ | 555 | /* Interrupt setup */ |
556 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; | 556 | link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; |
557 | link->irq.IRQInfo1 = IRQ_LEVEL_ID; | ||
558 | link->irq.Handler = NULL; | 557 | link->irq.Handler = NULL; |
559 | 558 | ||
560 | link->conf.Attributes = 0; | 559 | link->conf.Attributes = 0; |
@@ -572,69 +571,51 @@ static int mgslpc_probe(struct pcmcia_device *link) | |||
572 | /* Card has been inserted. | 571 | /* Card has been inserted. |
573 | */ | 572 | */ |
574 | 573 | ||
575 | #define CS_CHECK(fn, ret) \ | 574 | static int mgslpc_ioprobe(struct pcmcia_device *p_dev, |
576 | do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0) | 575 | cistpl_cftable_entry_t *cfg, |
576 | cistpl_cftable_entry_t *dflt, | ||
577 | unsigned int vcc, | ||
578 | void *priv_data) | ||
579 | { | ||
580 | if (cfg->io.nwin > 0) { | ||
581 | p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; | ||
582 | if (!(cfg->io.flags & CISTPL_IO_8BIT)) | ||
583 | p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16; | ||
584 | if (!(cfg->io.flags & CISTPL_IO_16BIT)) | ||
585 | p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8; | ||
586 | p_dev->io.IOAddrLines = cfg->io.flags & CISTPL_IO_LINES_MASK; | ||
587 | p_dev->io.BasePort1 = cfg->io.win[0].base; | ||
588 | p_dev->io.NumPorts1 = cfg->io.win[0].len; | ||
589 | return pcmcia_request_io(p_dev, &p_dev->io); | ||
590 | } | ||
591 | return -ENODEV; | ||
592 | } | ||
577 | 593 | ||
578 | static int mgslpc_config(struct pcmcia_device *link) | 594 | static int mgslpc_config(struct pcmcia_device *link) |
579 | { | 595 | { |
580 | MGSLPC_INFO *info = link->priv; | 596 | MGSLPC_INFO *info = link->priv; |
581 | tuple_t tuple; | 597 | int ret; |
582 | cisparse_t parse; | ||
583 | int last_fn, last_ret; | ||
584 | u_char buf[64]; | ||
585 | cistpl_cftable_entry_t dflt = { 0 }; | ||
586 | cistpl_cftable_entry_t *cfg; | ||
587 | 598 | ||
588 | if (debug_level >= DEBUG_LEVEL_INFO) | 599 | if (debug_level >= DEBUG_LEVEL_INFO) |
589 | printk("mgslpc_config(0x%p)\n", link); | 600 | printk("mgslpc_config(0x%p)\n", link); |
590 | 601 | ||
591 | tuple.Attributes = 0; | 602 | ret = pcmcia_loop_config(link, mgslpc_ioprobe, NULL); |
592 | tuple.TupleData = buf; | 603 | if (ret != 0) |
593 | tuple.TupleDataMax = sizeof(buf); | 604 | goto failed; |
594 | tuple.TupleOffset = 0; | ||
595 | |||
596 | /* get CIS configuration entry */ | ||
597 | |||
598 | tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY; | ||
599 | CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple)); | ||
600 | |||
601 | cfg = &(parse.cftable_entry); | ||
602 | CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple)); | ||
603 | CS_CHECK(ParseTuple, pcmcia_parse_tuple(&tuple, &parse)); | ||
604 | |||
605 | if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg; | ||
606 | if (cfg->index == 0) | ||
607 | goto cs_failed; | ||
608 | |||
609 | link->conf.ConfigIndex = cfg->index; | ||
610 | link->conf.Attributes |= CONF_ENABLE_IRQ; | ||
611 | |||
612 | /* IO window settings */ | ||
613 | link->io.NumPorts1 = 0; | ||
614 | if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) { | ||
615 | cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io; | ||
616 | link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; | ||
617 | if (!(io->flags & CISTPL_IO_8BIT)) | ||
618 | link->io.Attributes1 = IO_DATA_PATH_WIDTH_16; | ||
619 | if (!(io->flags & CISTPL_IO_16BIT)) | ||
620 | link->io.Attributes1 = IO_DATA_PATH_WIDTH_8; | ||
621 | link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK; | ||
622 | link->io.BasePort1 = io->win[0].base; | ||
623 | link->io.NumPorts1 = io->win[0].len; | ||
624 | CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io)); | ||
625 | } | ||
626 | 605 | ||
627 | link->conf.Attributes = CONF_ENABLE_IRQ; | 606 | link->conf.Attributes = CONF_ENABLE_IRQ; |
628 | link->conf.IntType = INT_MEMORY_AND_IO; | 607 | link->conf.IntType = INT_MEMORY_AND_IO; |
629 | link->conf.ConfigIndex = 8; | 608 | link->conf.ConfigIndex = 8; |
630 | link->conf.Present = PRESENT_OPTION; | 609 | link->conf.Present = PRESENT_OPTION; |
631 | 610 | ||
632 | link->irq.Attributes |= IRQ_HANDLE_PRESENT; | ||
633 | link->irq.Handler = mgslpc_isr; | 611 | link->irq.Handler = mgslpc_isr; |
634 | link->irq.Instance = info; | ||
635 | CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); | ||
636 | 612 | ||
637 | CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); | 613 | ret = pcmcia_request_irq(link, &link->irq); |
614 | if (ret) | ||
615 | goto failed; | ||
616 | ret = pcmcia_request_configuration(link, &link->conf); | ||
617 | if (ret) | ||
618 | goto failed; | ||
638 | 619 | ||
639 | info->io_base = link->io.BasePort1; | 620 | info->io_base = link->io.BasePort1; |
640 | info->irq_level = link->irq.AssignedIRQ; | 621 | info->irq_level = link->irq.AssignedIRQ; |
@@ -654,8 +635,7 @@ static int mgslpc_config(struct pcmcia_device *link) | |||
654 | printk("\n"); | 635 | printk("\n"); |
655 | return 0; | 636 | return 0; |
656 | 637 | ||
657 | cs_failed: | 638 | failed: |
658 | cs_error(link, last_fn, last_ret); | ||
659 | mgslpc_release((u_long)link); | 639 | mgslpc_release((u_long)link); |
660 | return -ENODEV; | 640 | return -ENODEV; |
661 | } | 641 | } |
diff --git a/drivers/char/pty.c b/drivers/char/pty.c index 62f282e67638..d86c0bc05c1c 100644 --- a/drivers/char/pty.c +++ b/drivers/char/pty.c | |||
@@ -431,30 +431,25 @@ static struct cdev ptmx_cdev; | |||
431 | 431 | ||
432 | static struct ctl_table pty_table[] = { | 432 | static struct ctl_table pty_table[] = { |
433 | { | 433 | { |
434 | .ctl_name = PTY_MAX, | ||
435 | .procname = "max", | 434 | .procname = "max", |
436 | .maxlen = sizeof(int), | 435 | .maxlen = sizeof(int), |
437 | .mode = 0644, | 436 | .mode = 0644, |
438 | .data = &pty_limit, | 437 | .data = &pty_limit, |
439 | .proc_handler = &proc_dointvec_minmax, | 438 | .proc_handler = proc_dointvec_minmax, |
440 | .strategy = &sysctl_intvec, | ||
441 | .extra1 = &pty_limit_min, | 439 | .extra1 = &pty_limit_min, |
442 | .extra2 = &pty_limit_max, | 440 | .extra2 = &pty_limit_max, |
443 | }, { | 441 | }, { |
444 | .ctl_name = PTY_NR, | ||
445 | .procname = "nr", | 442 | .procname = "nr", |
446 | .maxlen = sizeof(int), | 443 | .maxlen = sizeof(int), |
447 | .mode = 0444, | 444 | .mode = 0444, |
448 | .data = &pty_count, | 445 | .data = &pty_count, |
449 | .proc_handler = &proc_dointvec, | 446 | .proc_handler = proc_dointvec, |
450 | }, { | 447 | }, |
451 | .ctl_name = 0 | 448 | {} |
452 | } | ||
453 | }; | 449 | }; |
454 | 450 | ||
455 | static struct ctl_table pty_kern_table[] = { | 451 | static struct ctl_table pty_kern_table[] = { |
456 | { | 452 | { |
457 | .ctl_name = KERN_PTY, | ||
458 | .procname = "pty", | 453 | .procname = "pty", |
459 | .mode = 0555, | 454 | .mode = 0555, |
460 | .child = pty_table, | 455 | .child = pty_table, |
@@ -464,7 +459,6 @@ static struct ctl_table pty_kern_table[] = { | |||
464 | 459 | ||
465 | static struct ctl_table pty_root_table[] = { | 460 | static struct ctl_table pty_root_table[] = { |
466 | { | 461 | { |
467 | .ctl_name = CTL_KERN, | ||
468 | .procname = "kernel", | 462 | .procname = "kernel", |
469 | .mode = 0555, | 463 | .mode = 0555, |
470 | .child = pty_kern_table, | 464 | .child = pty_kern_table, |
diff --git a/drivers/char/random.c b/drivers/char/random.c index 04b505e5a5e2..dcd08635cf1b 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c | |||
@@ -1257,94 +1257,54 @@ static int proc_do_uuid(ctl_table *table, int write, | |||
1257 | return proc_dostring(&fake_table, write, buffer, lenp, ppos); | 1257 | return proc_dostring(&fake_table, write, buffer, lenp, ppos); |
1258 | } | 1258 | } |
1259 | 1259 | ||
1260 | static int uuid_strategy(ctl_table *table, | ||
1261 | void __user *oldval, size_t __user *oldlenp, | ||
1262 | void __user *newval, size_t newlen) | ||
1263 | { | ||
1264 | unsigned char tmp_uuid[16], *uuid; | ||
1265 | unsigned int len; | ||
1266 | |||
1267 | if (!oldval || !oldlenp) | ||
1268 | return 1; | ||
1269 | |||
1270 | uuid = table->data; | ||
1271 | if (!uuid) { | ||
1272 | uuid = tmp_uuid; | ||
1273 | uuid[8] = 0; | ||
1274 | } | ||
1275 | if (uuid[8] == 0) | ||
1276 | generate_random_uuid(uuid); | ||
1277 | |||
1278 | if (get_user(len, oldlenp)) | ||
1279 | return -EFAULT; | ||
1280 | if (len) { | ||
1281 | if (len > 16) | ||
1282 | len = 16; | ||
1283 | if (copy_to_user(oldval, uuid, len) || | ||
1284 | put_user(len, oldlenp)) | ||
1285 | return -EFAULT; | ||
1286 | } | ||
1287 | return 1; | ||
1288 | } | ||
1289 | |||
1290 | static int sysctl_poolsize = INPUT_POOL_WORDS * 32; | 1260 | static int sysctl_poolsize = INPUT_POOL_WORDS * 32; |
1291 | ctl_table random_table[] = { | 1261 | ctl_table random_table[] = { |
1292 | { | 1262 | { |
1293 | .ctl_name = RANDOM_POOLSIZE, | ||
1294 | .procname = "poolsize", | 1263 | .procname = "poolsize", |
1295 | .data = &sysctl_poolsize, | 1264 | .data = &sysctl_poolsize, |
1296 | .maxlen = sizeof(int), | 1265 | .maxlen = sizeof(int), |
1297 | .mode = 0444, | 1266 | .mode = 0444, |
1298 | .proc_handler = &proc_dointvec, | 1267 | .proc_handler = proc_dointvec, |
1299 | }, | 1268 | }, |
1300 | { | 1269 | { |
1301 | .ctl_name = RANDOM_ENTROPY_COUNT, | ||
1302 | .procname = "entropy_avail", | 1270 | .procname = "entropy_avail", |
1303 | .maxlen = sizeof(int), | 1271 | .maxlen = sizeof(int), |
1304 | .mode = 0444, | 1272 | .mode = 0444, |
1305 | .proc_handler = &proc_dointvec, | 1273 | .proc_handler = proc_dointvec, |
1306 | .data = &input_pool.entropy_count, | 1274 | .data = &input_pool.entropy_count, |
1307 | }, | 1275 | }, |
1308 | { | 1276 | { |
1309 | .ctl_name = RANDOM_READ_THRESH, | ||
1310 | .procname = "read_wakeup_threshold", | 1277 | .procname = "read_wakeup_threshold", |
1311 | .data = &random_read_wakeup_thresh, | 1278 | .data = &random_read_wakeup_thresh, |
1312 | .maxlen = sizeof(int), | 1279 | .maxlen = sizeof(int), |
1313 | .mode = 0644, | 1280 | .mode = 0644, |
1314 | .proc_handler = &proc_dointvec_minmax, | 1281 | .proc_handler = proc_dointvec_minmax, |
1315 | .strategy = &sysctl_intvec, | ||
1316 | .extra1 = &min_read_thresh, | 1282 | .extra1 = &min_read_thresh, |
1317 | .extra2 = &max_read_thresh, | 1283 | .extra2 = &max_read_thresh, |
1318 | }, | 1284 | }, |
1319 | { | 1285 | { |
1320 | .ctl_name = RANDOM_WRITE_THRESH, | ||
1321 | .procname = "write_wakeup_threshold", | 1286 | .procname = "write_wakeup_threshold", |
1322 | .data = &random_write_wakeup_thresh, | 1287 | .data = &random_write_wakeup_thresh, |
1323 | .maxlen = sizeof(int), | 1288 | .maxlen = sizeof(int), |
1324 | .mode = 0644, | 1289 | .mode = 0644, |
1325 | .proc_handler = &proc_dointvec_minmax, | 1290 | .proc_handler = proc_dointvec_minmax, |
1326 | .strategy = &sysctl_intvec, | ||
1327 | .extra1 = &min_write_thresh, | 1291 | .extra1 = &min_write_thresh, |
1328 | .extra2 = &max_write_thresh, | 1292 | .extra2 = &max_write_thresh, |
1329 | }, | 1293 | }, |
1330 | { | 1294 | { |
1331 | .ctl_name = RANDOM_BOOT_ID, | ||
1332 | .procname = "boot_id", | 1295 | .procname = "boot_id", |
1333 | .data = &sysctl_bootid, | 1296 | .data = &sysctl_bootid, |
1334 | .maxlen = 16, | 1297 | .maxlen = 16, |
1335 | .mode = 0444, | 1298 | .mode = 0444, |
1336 | .proc_handler = &proc_do_uuid, | 1299 | .proc_handler = proc_do_uuid, |
1337 | .strategy = &uuid_strategy, | ||
1338 | }, | 1300 | }, |
1339 | { | 1301 | { |
1340 | .ctl_name = RANDOM_UUID, | ||
1341 | .procname = "uuid", | 1302 | .procname = "uuid", |
1342 | .maxlen = 16, | 1303 | .maxlen = 16, |
1343 | .mode = 0444, | 1304 | .mode = 0444, |
1344 | .proc_handler = &proc_do_uuid, | 1305 | .proc_handler = proc_do_uuid, |
1345 | .strategy = &uuid_strategy, | ||
1346 | }, | 1306 | }, |
1347 | { .ctl_name = 0 } | 1307 | { } |
1348 | }; | 1308 | }; |
1349 | #endif /* CONFIG_SYSCTL */ | 1309 | #endif /* CONFIG_SYSCTL */ |
1350 | 1310 | ||
diff --git a/drivers/char/rtc.c b/drivers/char/rtc.c index bc4ab3e54550..95acb8c880f4 100644 --- a/drivers/char/rtc.c +++ b/drivers/char/rtc.c | |||
@@ -282,34 +282,31 @@ static irqreturn_t rtc_interrupt(int irq, void *dev_id) | |||
282 | */ | 282 | */ |
283 | static ctl_table rtc_table[] = { | 283 | static ctl_table rtc_table[] = { |
284 | { | 284 | { |
285 | .ctl_name = CTL_UNNUMBERED, | ||
286 | .procname = "max-user-freq", | 285 | .procname = "max-user-freq", |
287 | .data = &rtc_max_user_freq, | 286 | .data = &rtc_max_user_freq, |
288 | .maxlen = sizeof(int), | 287 | .maxlen = sizeof(int), |
289 | .mode = 0644, | 288 | .mode = 0644, |
290 | .proc_handler = &proc_dointvec, | 289 | .proc_handler = proc_dointvec, |
291 | }, | 290 | }, |
292 | { .ctl_name = 0 } | 291 | { } |
293 | }; | 292 | }; |
294 | 293 | ||
295 | static ctl_table rtc_root[] = { | 294 | static ctl_table rtc_root[] = { |
296 | { | 295 | { |
297 | .ctl_name = CTL_UNNUMBERED, | ||
298 | .procname = "rtc", | 296 | .procname = "rtc", |
299 | .mode = 0555, | 297 | .mode = 0555, |
300 | .child = rtc_table, | 298 | .child = rtc_table, |
301 | }, | 299 | }, |
302 | { .ctl_name = 0 } | 300 | { } |
303 | }; | 301 | }; |
304 | 302 | ||
305 | static ctl_table dev_root[] = { | 303 | static ctl_table dev_root[] = { |
306 | { | 304 | { |
307 | .ctl_name = CTL_DEV, | ||
308 | .procname = "dev", | 305 | .procname = "dev", |
309 | .mode = 0555, | 306 | .mode = 0555, |
310 | .child = rtc_root, | 307 | .child = rtc_root, |
311 | }, | 308 | }, |
312 | { .ctl_name = 0 } | 309 | { } |
313 | }; | 310 | }; |
314 | 311 | ||
315 | static struct ctl_table_header *sysctl_header; | 312 | static struct ctl_table_header *sysctl_header; |
diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c index 47c2d2763456..f06bb37defb1 100644 --- a/drivers/char/tpm/tpm.c +++ b/drivers/char/tpm/tpm.c | |||
@@ -31,7 +31,7 @@ | |||
31 | 31 | ||
32 | enum tpm_const { | 32 | enum tpm_const { |
33 | TPM_MINOR = 224, /* officially assigned */ | 33 | TPM_MINOR = 224, /* officially assigned */ |
34 | TPM_BUFSIZE = 2048, | 34 | TPM_BUFSIZE = 4096, |
35 | TPM_NUM_DEVICES = 256, | 35 | TPM_NUM_DEVICES = 256, |
36 | }; | 36 | }; |
37 | 37 | ||
diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c index 0b73e4ec1add..2405f17b29dd 100644 --- a/drivers/char/tpm/tpm_tis.c +++ b/drivers/char/tpm/tpm_tis.c | |||
@@ -257,6 +257,10 @@ out: | |||
257 | return size; | 257 | return size; |
258 | } | 258 | } |
259 | 259 | ||
260 | static int itpm; | ||
261 | module_param(itpm, bool, 0444); | ||
262 | MODULE_PARM_DESC(itpm, "Force iTPM workarounds (found on some Lenovo laptops)"); | ||
263 | |||
260 | /* | 264 | /* |
261 | * If interrupts are used (signaled by an irq set in the vendor structure) | 265 | * If interrupts are used (signaled by an irq set in the vendor structure) |
262 | * tpm.c can skip polling for the data to be available as the interrupt is | 266 | * tpm.c can skip polling for the data to be available as the interrupt is |
@@ -293,7 +297,7 @@ static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len) | |||
293 | wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c, | 297 | wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c, |
294 | &chip->vendor.int_queue); | 298 | &chip->vendor.int_queue); |
295 | status = tpm_tis_status(chip); | 299 | status = tpm_tis_status(chip); |
296 | if ((status & TPM_STS_DATA_EXPECT) == 0) { | 300 | if (!itpm && (status & TPM_STS_DATA_EXPECT) == 0) { |
297 | rc = -EIO; | 301 | rc = -EIO; |
298 | goto out_err; | 302 | goto out_err; |
299 | } | 303 | } |
@@ -467,6 +471,10 @@ static int tpm_tis_init(struct device *dev, resource_size_t start, | |||
467 | "1.2 TPM (device-id 0x%X, rev-id %d)\n", | 471 | "1.2 TPM (device-id 0x%X, rev-id %d)\n", |
468 | vendor >> 16, ioread8(chip->vendor.iobase + TPM_RID(0))); | 472 | vendor >> 16, ioread8(chip->vendor.iobase + TPM_RID(0))); |
469 | 473 | ||
474 | if (itpm) | ||
475 | dev_info(dev, "Intel iTPM workaround enabled\n"); | ||
476 | |||
477 | |||
470 | /* Figure out the capabilities */ | 478 | /* Figure out the capabilities */ |
471 | intfcaps = | 479 | intfcaps = |
472 | ioread32(chip->vendor.iobase + | 480 | ioread32(chip->vendor.iobase + |
@@ -629,6 +637,7 @@ static struct pnp_device_id tpm_pnp_tbl[] __devinitdata = { | |||
629 | {"", 0}, /* User Specified */ | 637 | {"", 0}, /* User Specified */ |
630 | {"", 0} /* Terminator */ | 638 | {"", 0} /* Terminator */ |
631 | }; | 639 | }; |
640 | MODULE_DEVICE_TABLE(pnp, tpm_pnp_tbl); | ||
632 | 641 | ||
633 | static __devexit void tpm_tis_pnp_remove(struct pnp_dev *dev) | 642 | static __devexit void tpm_tis_pnp_remove(struct pnp_dev *dev) |
634 | { | 643 | { |
diff --git a/drivers/char/tty_port.c b/drivers/char/tty_port.c index 2e8552dc5eda..c63f3d33914a 100644 --- a/drivers/char/tty_port.c +++ b/drivers/char/tty_port.c | |||
@@ -219,8 +219,11 @@ int tty_port_block_til_ready(struct tty_port *port, | |||
219 | 219 | ||
220 | /* if non-blocking mode is set we can pass directly to open unless | 220 | /* if non-blocking mode is set we can pass directly to open unless |
221 | the port has just hung up or is in another error state */ | 221 | the port has just hung up or is in another error state */ |
222 | if ((filp->f_flags & O_NONBLOCK) || | 222 | if (tty->flags & (1 << TTY_IO_ERROR)) { |
223 | (tty->flags & (1 << TTY_IO_ERROR))) { | 223 | port->flags |= ASYNC_NORMAL_ACTIVE; |
224 | return 0; | ||
225 | } | ||
226 | if (filp->f_flags & O_NONBLOCK) { | ||
224 | /* Indicate we are open */ | 227 | /* Indicate we are open */ |
225 | if (tty->termios->c_cflag & CBAUD) | 228 | if (tty->termios->c_cflag & CBAUD) |
226 | tty_port_raise_dtr_rts(port); | 229 | tty_port_raise_dtr_rts(port); |
diff --git a/drivers/char/vt.c b/drivers/char/vt.c index 0c80c68cd047..1e3d728dbf7e 100644 --- a/drivers/char/vt.c +++ b/drivers/char/vt.c | |||
@@ -161,6 +161,8 @@ static void set_palette(struct vc_data *vc); | |||
161 | static int printable; /* Is console ready for printing? */ | 161 | static int printable; /* Is console ready for printing? */ |
162 | int default_utf8 = true; | 162 | int default_utf8 = true; |
163 | module_param(default_utf8, int, S_IRUGO | S_IWUSR); | 163 | module_param(default_utf8, int, S_IRUGO | S_IWUSR); |
164 | int global_cursor_default = -1; | ||
165 | module_param(global_cursor_default, int, S_IRUGO | S_IWUSR); | ||
164 | 166 | ||
165 | /* | 167 | /* |
166 | * ignore_poke: don't unblank the screen when things are typed. This is | 168 | * ignore_poke: don't unblank the screen when things are typed. This is |
@@ -775,6 +777,12 @@ int vc_allocate(unsigned int currcons) /* return 0 on success */ | |||
775 | vc_cons[currcons].d = NULL; | 777 | vc_cons[currcons].d = NULL; |
776 | return -ENOMEM; | 778 | return -ENOMEM; |
777 | } | 779 | } |
780 | |||
781 | /* If no drivers have overridden us and the user didn't pass a | ||
782 | boot option, default to displaying the cursor */ | ||
783 | if (global_cursor_default == -1) | ||
784 | global_cursor_default = 1; | ||
785 | |||
778 | vc_init(vc, vc->vc_rows, vc->vc_cols, 1); | 786 | vc_init(vc, vc->vc_rows, vc->vc_cols, 1); |
779 | vcs_make_sysfs(currcons); | 787 | vcs_make_sysfs(currcons); |
780 | atomic_notifier_call_chain(&vt_notifier_list, VT_ALLOCATE, ¶m); | 788 | atomic_notifier_call_chain(&vt_notifier_list, VT_ALLOCATE, ¶m); |
@@ -1616,7 +1624,7 @@ static void reset_terminal(struct vc_data *vc, int do_clear) | |||
1616 | vc->vc_decscnm = 0; | 1624 | vc->vc_decscnm = 0; |
1617 | vc->vc_decom = 0; | 1625 | vc->vc_decom = 0; |
1618 | vc->vc_decawm = 1; | 1626 | vc->vc_decawm = 1; |
1619 | vc->vc_deccm = 1; | 1627 | vc->vc_deccm = global_cursor_default; |
1620 | vc->vc_decim = 0; | 1628 | vc->vc_decim = 0; |
1621 | 1629 | ||
1622 | set_kbd(vc, decarm); | 1630 | set_kbd(vc, decarm); |
@@ -4078,6 +4086,7 @@ EXPORT_SYMBOL(fg_console); | |||
4078 | EXPORT_SYMBOL(console_blank_hook); | 4086 | EXPORT_SYMBOL(console_blank_hook); |
4079 | EXPORT_SYMBOL(console_blanked); | 4087 | EXPORT_SYMBOL(console_blanked); |
4080 | EXPORT_SYMBOL(vc_cons); | 4088 | EXPORT_SYMBOL(vc_cons); |
4089 | EXPORT_SYMBOL(global_cursor_default); | ||
4081 | #ifndef VT_SINGLE_DRIVER | 4090 | #ifndef VT_SINGLE_DRIVER |
4082 | EXPORT_SYMBOL(take_over_console); | 4091 | EXPORT_SYMBOL(take_over_console); |
4083 | EXPORT_SYMBOL(give_up_console); | 4092 | EXPORT_SYMBOL(give_up_console); |