aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSteve French <sfrench@us.ibm.com>2005-11-01 12:02:10 -0500
committerSteve French <sfrench@us.ibm.com>2005-11-01 12:02:10 -0500
commitef0eaa13362041f531f951b89362bfbc177e2bc0 (patch)
treee2d43099698aa238f9d108c67451871b0d4073f9 /drivers
parent53b2ec5518aa2623e8c0cb36f1c304a797988a46 (diff)
parentdf70b17f88a4d1d8545d3569a1f6d28c6004f9e4 (diff)
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Diffstat (limited to 'drivers')
-rw-r--r--drivers/input/keyboard/Kconfig4
-rw-r--r--drivers/input/mouse/Kconfig2
-rw-r--r--drivers/scsi/ide-scsi.c44
-rw-r--r--drivers/usb/host/pci-quirks.c23
4 files changed, 58 insertions, 15 deletions
diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
index 571a68691a4a..4a917748fd9f 100644
--- a/drivers/input/keyboard/Kconfig
+++ b/drivers/input/keyboard/Kconfig
@@ -13,11 +13,11 @@ menuconfig INPUT_KEYBOARD
13if INPUT_KEYBOARD 13if INPUT_KEYBOARD
14 14
15config KEYBOARD_ATKBD 15config KEYBOARD_ATKBD
16 tristate "AT keyboard" if !PC 16 tristate "AT keyboard" if !X86_PC
17 default y 17 default y
18 select SERIO 18 select SERIO
19 select SERIO_LIBPS2 19 select SERIO_LIBPS2
20 select SERIO_I8042 if PC 20 select SERIO_I8042 if X86_PC
21 select SERIO_GSCPS2 if GSC 21 select SERIO_GSCPS2 if GSC
22 help 22 help
23 Say Y here if you want to use a standard AT or PS/2 keyboard. Usually 23 Say Y here if you want to use a standard AT or PS/2 keyboard. Usually
diff --git a/drivers/input/mouse/Kconfig b/drivers/input/mouse/Kconfig
index 537154dd7a87..574b18a523af 100644
--- a/drivers/input/mouse/Kconfig
+++ b/drivers/input/mouse/Kconfig
@@ -17,7 +17,7 @@ config MOUSE_PS2
17 default y 17 default y
18 select SERIO 18 select SERIO
19 select SERIO_LIBPS2 19 select SERIO_LIBPS2
20 select SERIO_I8042 if PC 20 select SERIO_I8042 if X86_PC
21 select SERIO_GSCPS2 if GSC 21 select SERIO_GSCPS2 if GSC
22 ---help--- 22 ---help---
23 Say Y here if you have a PS/2 mouse connected to your system. This 23 Say Y here if you have a PS/2 mouse connected to your system. This
diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
index 00d6a6657ebc..a440ea38efaa 100644
--- a/drivers/scsi/ide-scsi.c
+++ b/drivers/scsi/ide-scsi.c
@@ -180,12 +180,22 @@ static void idescsi_input_buffers (ide_drive_t *drive, idescsi_pc_t *pc, unsigne
180 return; 180 return;
181 } 181 }
182 count = min(pc->sg->length - pc->b_count, bcount); 182 count = min(pc->sg->length - pc->b_count, bcount);
183 buf = kmap_atomic(pc->sg->page, KM_IRQ0); 183 if (PageHighMem(pc->sg->page)) {
184 drive->hwif->atapi_input_bytes(drive, 184 unsigned long flags;
185 buf + pc->b_count + pc->sg->offset, count); 185
186 kunmap_atomic(buf, KM_IRQ0); 186 local_irq_save(flags);
187 bcount -= count; 187 buf = kmap_atomic(pc->sg->page, KM_IRQ0) +
188 pc->b_count += count; 188 pc->sg->offset;
189 drive->hwif->atapi_input_bytes(drive,
190 buf + pc->b_count, count);
191 kunmap_atomic(buf - pc->sg->offset, KM_IRQ0);
192 local_irq_restore(flags);
193 } else {
194 buf = page_address(pc->sg->page) + pc->sg->offset;
195 drive->hwif->atapi_input_bytes(drive,
196 buf + pc->b_count, count);
197 }
198 bcount -= count; pc->b_count += count;
189 if (pc->b_count == pc->sg->length) { 199 if (pc->b_count == pc->sg->length) {
190 pc->sg++; 200 pc->sg++;
191 pc->b_count = 0; 201 pc->b_count = 0;
@@ -205,12 +215,22 @@ static void idescsi_output_buffers (ide_drive_t *drive, idescsi_pc_t *pc, unsign
205 return; 215 return;
206 } 216 }
207 count = min(pc->sg->length - pc->b_count, bcount); 217 count = min(pc->sg->length - pc->b_count, bcount);
208 buf = kmap_atomic(pc->sg->page, KM_IRQ0); 218 if (PageHighMem(pc->sg->page)) {
209 drive->hwif->atapi_output_bytes(drive, 219 unsigned long flags;
210 buf + pc->b_count + pc->sg->offset, count); 220
211 kunmap_atomic(buf, KM_IRQ0); 221 local_irq_save(flags);
212 bcount -= count; 222 buf = kmap_atomic(pc->sg->page, KM_IRQ0) +
213 pc->b_count += count; 223 pc->sg->offset;
224 drive->hwif->atapi_output_bytes(drive,
225 buf + pc->b_count, count);
226 kunmap_atomic(buf - pc->sg->offset, KM_IRQ0);
227 local_irq_restore(flags);
228 } else {
229 buf = page_address(pc->sg->page) + pc->sg->offset;
230 drive->hwif->atapi_output_bytes(drive,
231 buf + pc->b_count, count);
232 }
233 bcount -= count; pc->b_count += count;
214 if (pc->b_count == pc->sg->length) { 234 if (pc->b_count == pc->sg->length) {
215 pc->sg++; 235 pc->sg++;
216 pc->b_count = 0; 236 pc->b_count = 0;
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
index b7fd3f644e1e..b1aa350fd32f 100644
--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -138,11 +138,23 @@ reset_needed:
138} 138}
139EXPORT_SYMBOL_GPL(uhci_check_and_reset_hc); 139EXPORT_SYMBOL_GPL(uhci_check_and_reset_hc);
140 140
141static inline int io_type_enabled(struct pci_dev *pdev, unsigned int mask)
142{
143 u16 cmd;
144 return !pci_read_config_word(pdev, PCI_COMMAND, &cmd) && (cmd & mask);
145}
146
147#define pio_enabled(dev) io_type_enabled(dev, PCI_COMMAND_IO)
148#define mmio_enabled(dev) io_type_enabled(dev, PCI_COMMAND_MEMORY)
149
141static void __devinit quirk_usb_handoff_uhci(struct pci_dev *pdev) 150static void __devinit quirk_usb_handoff_uhci(struct pci_dev *pdev)
142{ 151{
143 unsigned long base = 0; 152 unsigned long base = 0;
144 int i; 153 int i;
145 154
155 if (!pio_enabled(pdev))
156 return;
157
146 for (i = 0; i < PCI_ROM_RESOURCE; i++) 158 for (i = 0; i < PCI_ROM_RESOURCE; i++)
147 if ((pci_resource_flags(pdev, i) & IORESOURCE_IO)) { 159 if ((pci_resource_flags(pdev, i) & IORESOURCE_IO)) {
148 base = pci_resource_start(pdev, i); 160 base = pci_resource_start(pdev, i);
@@ -153,12 +165,20 @@ static void __devinit quirk_usb_handoff_uhci(struct pci_dev *pdev)
153 uhci_check_and_reset_hc(pdev, base); 165 uhci_check_and_reset_hc(pdev, base);
154} 166}
155 167
168static int __devinit mmio_resource_enabled(struct pci_dev *pdev, int idx)
169{
170 return pci_resource_start(pdev, idx) && mmio_enabled(pdev);
171}
172
156static void __devinit quirk_usb_handoff_ohci(struct pci_dev *pdev) 173static void __devinit quirk_usb_handoff_ohci(struct pci_dev *pdev)
157{ 174{
158 void __iomem *base; 175 void __iomem *base;
159 int wait_time; 176 int wait_time;
160 u32 control; 177 u32 control;
161 178
179 if (!mmio_resource_enabled(pdev, 0))
180 return;
181
162 base = ioremap_nocache(pci_resource_start(pdev, 0), 182 base = ioremap_nocache(pci_resource_start(pdev, 0),
163 pci_resource_len(pdev, 0)); 183 pci_resource_len(pdev, 0));
164 if (base == NULL) return; 184 if (base == NULL) return;
@@ -201,6 +221,9 @@ static void __devinit quirk_usb_disable_ehci(struct pci_dev *pdev)
201 u32 hcc_params, val, temp; 221 u32 hcc_params, val, temp;
202 u8 cap_length; 222 u8 cap_length;
203 223
224 if (!mmio_resource_enabled(pdev, 0))
225 return;
226
204 base = ioremap_nocache(pci_resource_start(pdev, 0), 227 base = ioremap_nocache(pci_resource_start(pdev, 0),
205 pci_resource_len(pdev, 0)); 228 pci_resource_len(pdev, 0));
206 if (base == NULL) return; 229 if (base == NULL) return;