12dc42b47SAurelien Jarno /* 22dc42b47SAurelien Jarno * Copyright (C) 2008 Aurelien Jarno <aurelien@aurel32.net> 32dc42b47SAurelien Jarno * 42dc42b47SAurelien Jarno * This program is free software; you can redistribute it and/or modify it 52dc42b47SAurelien Jarno * under the terms of the GNU General Public License as published by the 62dc42b47SAurelien Jarno * Free Software Foundation; either version 2 of the License, or (at your 72dc42b47SAurelien Jarno * option) any later version. 82dc42b47SAurelien Jarno * 92dc42b47SAurelien Jarno * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED 102dc42b47SAurelien Jarno * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 112dc42b47SAurelien Jarno * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 122dc42b47SAurelien Jarno * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 132dc42b47SAurelien Jarno * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 142dc42b47SAurelien Jarno * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 152dc42b47SAurelien Jarno * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 162dc42b47SAurelien Jarno * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 172dc42b47SAurelien Jarno * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 182dc42b47SAurelien Jarno * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 192dc42b47SAurelien Jarno * 202dc42b47SAurelien Jarno * You should have received a copy of the GNU General Public License along 212dc42b47SAurelien Jarno * with this program; if not, write to the Free Software Foundation, Inc., 222dc42b47SAurelien Jarno * 675 Mass Ave, Cambridge, MA 02139, USA. 232dc42b47SAurelien Jarno */ 242dc42b47SAurelien Jarno 252dc42b47SAurelien Jarno #include <linux/types.h> 262dc42b47SAurelien Jarno #include <linux/pci.h> 272dc42b47SAurelien Jarno #include <linux/ssb/ssb.h> 28a656ffcbSHauke Mehrtens #include <bcm47xx.h> 292dc42b47SAurelien Jarno 302dc42b47SAurelien Jarno int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) 312dc42b47SAurelien Jarno { 322dc42b47SAurelien Jarno return 0; 332dc42b47SAurelien Jarno } 342dc42b47SAurelien Jarno 352dc42b47SAurelien Jarno int pcibios_plat_dev_init(struct pci_dev *dev) 362dc42b47SAurelien Jarno { 37a656ffcbSHauke Mehrtens #ifdef CONFIG_BCM47XX_SSB 382dc42b47SAurelien Jarno int res; 392dc42b47SAurelien Jarno u8 slot, pin; 402dc42b47SAurelien Jarno 41a656ffcbSHauke Mehrtens if (bcm47xx_bus_type != BCM47XX_BUS_TYPE_SSB) 42a656ffcbSHauke Mehrtens return 0; 43a656ffcbSHauke Mehrtens 442dc42b47SAurelien Jarno res = ssb_pcibios_plat_dev_init(dev); 452dc42b47SAurelien Jarno if (res < 0) { 462dc42b47SAurelien Jarno printk(KERN_ALERT "PCI: Failed to init device %s\n", 472dc42b47SAurelien Jarno pci_name(dev)); 482dc42b47SAurelien Jarno return res; 492dc42b47SAurelien Jarno } 502dc42b47SAurelien Jarno 512dc42b47SAurelien Jarno pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); 522dc42b47SAurelien Jarno slot = PCI_SLOT(dev->devfn); 532dc42b47SAurelien Jarno res = ssb_pcibios_map_irq(dev, slot, pin); 542dc42b47SAurelien Jarno 552dc42b47SAurelien Jarno /* IRQ-0 and IRQ-1 are software interrupts. */ 562dc42b47SAurelien Jarno if (res < 2) { 572dc42b47SAurelien Jarno printk(KERN_ALERT "PCI: Failed to map IRQ of device %s\n", 582dc42b47SAurelien Jarno pci_name(dev)); 592dc42b47SAurelien Jarno return res; 602dc42b47SAurelien Jarno } 612dc42b47SAurelien Jarno 622dc42b47SAurelien Jarno dev->irq = res; 63a656ffcbSHauke Mehrtens #endif 642dc42b47SAurelien Jarno return 0; 652dc42b47SAurelien Jarno } 66