diff options
Diffstat (limited to 'drivers/bcma')
| -rw-r--r-- | drivers/bcma/driver_pci.c | 33 | ||||
| -rw-r--r-- | drivers/bcma/host_pci.c | 34 |
2 files changed, 34 insertions, 33 deletions
diff --git a/drivers/bcma/driver_pci.c b/drivers/bcma/driver_pci.c index cfd35bc1c5a3..f499a469e66d 100644 --- a/drivers/bcma/driver_pci.c +++ b/drivers/bcma/driver_pci.c | |||
| @@ -282,39 +282,6 @@ void bcma_core_pci_power_save(struct bcma_bus *bus, bool up) | |||
| 282 | } | 282 | } |
| 283 | EXPORT_SYMBOL_GPL(bcma_core_pci_power_save); | 283 | EXPORT_SYMBOL_GPL(bcma_core_pci_power_save); |
| 284 | 284 | ||
| 285 | int bcma_core_pci_irq_ctl(struct bcma_bus *bus, struct bcma_device *core, | ||
| 286 | bool enable) | ||
| 287 | { | ||
| 288 | struct pci_dev *pdev; | ||
| 289 | u32 coremask, tmp; | ||
| 290 | int err = 0; | ||
| 291 | |||
| 292 | if (bus->hosttype != BCMA_HOSTTYPE_PCI) { | ||
| 293 | /* This bcma device is not on a PCI host-bus. So the IRQs are | ||
| 294 | * not routed through the PCI core. | ||
| 295 | * So we must not enable routing through the PCI core. */ | ||
| 296 | goto out; | ||
| 297 | } | ||
| 298 | |||
| 299 | pdev = bus->host_pci; | ||
| 300 | |||
| 301 | err = pci_read_config_dword(pdev, BCMA_PCI_IRQMASK, &tmp); | ||
| 302 | if (err) | ||
| 303 | goto out; | ||
| 304 | |||
| 305 | coremask = BIT(core->core_index) << 8; | ||
| 306 | if (enable) | ||
| 307 | tmp |= coremask; | ||
| 308 | else | ||
| 309 | tmp &= ~coremask; | ||
| 310 | |||
| 311 | err = pci_write_config_dword(pdev, BCMA_PCI_IRQMASK, tmp); | ||
| 312 | |||
| 313 | out: | ||
| 314 | return err; | ||
| 315 | } | ||
| 316 | EXPORT_SYMBOL_GPL(bcma_core_pci_irq_ctl); | ||
| 317 | |||
| 318 | static void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend) | 285 | static void bcma_core_pci_extend_L1timer(struct bcma_drv_pci *pc, bool extend) |
| 319 | { | 286 | { |
| 320 | u32 w; | 287 | u32 w; |
diff --git a/drivers/bcma/host_pci.c b/drivers/bcma/host_pci.c index a62a2f9091f5..0856189c065f 100644 --- a/drivers/bcma/host_pci.c +++ b/drivers/bcma/host_pci.c | |||
| @@ -351,3 +351,37 @@ void bcma_host_pci_down(struct bcma_bus *bus) | |||
| 351 | bcma_core_pci_down(&bus->drv_pci[0]); | 351 | bcma_core_pci_down(&bus->drv_pci[0]); |
| 352 | } | 352 | } |
| 353 | EXPORT_SYMBOL_GPL(bcma_host_pci_down); | 353 | EXPORT_SYMBOL_GPL(bcma_host_pci_down); |
| 354 | |||
| 355 | /* See also si_pci_setup */ | ||
| 356 | int bcma_host_pci_irq_ctl(struct bcma_bus *bus, struct bcma_device *core, | ||
| 357 | bool enable) | ||
| 358 | { | ||
| 359 | struct pci_dev *pdev; | ||
| 360 | u32 coremask, tmp; | ||
| 361 | int err = 0; | ||
| 362 | |||
| 363 | if (bus->hosttype != BCMA_HOSTTYPE_PCI) { | ||
| 364 | /* This bcma device is not on a PCI host-bus. So the IRQs are | ||
| 365 | * not routed through the PCI core. | ||
| 366 | * So we must not enable routing through the PCI core. */ | ||
| 367 | goto out; | ||
| 368 | } | ||
| 369 | |||
| 370 | pdev = bus->host_pci; | ||
| 371 | |||
| 372 | err = pci_read_config_dword(pdev, BCMA_PCI_IRQMASK, &tmp); | ||
| 373 | if (err) | ||
| 374 | goto out; | ||
| 375 | |||
| 376 | coremask = BIT(core->core_index) << 8; | ||
| 377 | if (enable) | ||
| 378 | tmp |= coremask; | ||
| 379 | else | ||
| 380 | tmp &= ~coremask; | ||
| 381 | |||
| 382 | err = pci_write_config_dword(pdev, BCMA_PCI_IRQMASK, tmp); | ||
| 383 | |||
| 384 | out: | ||
| 385 | return err; | ||
| 386 | } | ||
| 387 | EXPORT_SYMBOL_GPL(bcma_host_pci_irq_ctl); | ||
