1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Toshiba rbtx4938 pci routines 3*4882a593Smuzhiyun * Copyright (C) 2000-2001 Toshiba Corporation 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * 2003-2005 (c) MontaVista Software, Inc. This file is licensed under the 6*4882a593Smuzhiyun * terms of the GNU General Public License version 2. This program is 7*4882a593Smuzhiyun * licensed "as is" without any warranty of any kind, whether express 8*4882a593Smuzhiyun * or implied. 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com) 11*4882a593Smuzhiyun */ 12*4882a593Smuzhiyun #include <linux/types.h> 13*4882a593Smuzhiyun #include <asm/txx9/pci.h> 14*4882a593Smuzhiyun #include <asm/txx9/rbtx4938.h> 15*4882a593Smuzhiyun rbtx4938_pci_map_irq(const struct pci_dev * dev,u8 slot,u8 pin)16*4882a593Smuzhiyunint rbtx4938_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) 17*4882a593Smuzhiyun { 18*4882a593Smuzhiyun int irq = tx4938_pcic1_map_irq(dev, slot); 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun if (irq >= 0) 21*4882a593Smuzhiyun return irq; 22*4882a593Smuzhiyun irq = pin; 23*4882a593Smuzhiyun /* IRQ rotation */ 24*4882a593Smuzhiyun irq--; /* 0-3 */ 25*4882a593Smuzhiyun if (slot == TX4927_PCIC_IDSEL_AD_TO_SLOT(23)) { 26*4882a593Smuzhiyun /* PCI CardSlot (IDSEL=A23) */ 27*4882a593Smuzhiyun /* PCIA => PCIA (IDSEL=A23) */ 28*4882a593Smuzhiyun irq = (irq + 0 + slot) % 4; 29*4882a593Smuzhiyun } else { 30*4882a593Smuzhiyun /* PCI Backplane */ 31*4882a593Smuzhiyun if (txx9_pci_option & TXX9_PCI_OPT_PICMG) 32*4882a593Smuzhiyun irq = (irq + 33 - slot) % 4; 33*4882a593Smuzhiyun else 34*4882a593Smuzhiyun irq = (irq + 3 + slot) % 4; 35*4882a593Smuzhiyun } 36*4882a593Smuzhiyun irq++; /* 1-4 */ 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun switch (irq) { 39*4882a593Smuzhiyun case 1: 40*4882a593Smuzhiyun irq = RBTX4938_IRQ_IOC_PCIA; 41*4882a593Smuzhiyun break; 42*4882a593Smuzhiyun case 2: 43*4882a593Smuzhiyun irq = RBTX4938_IRQ_IOC_PCIB; 44*4882a593Smuzhiyun break; 45*4882a593Smuzhiyun case 3: 46*4882a593Smuzhiyun irq = RBTX4938_IRQ_IOC_PCIC; 47*4882a593Smuzhiyun break; 48*4882a593Smuzhiyun case 4: 49*4882a593Smuzhiyun irq = RBTX4938_IRQ_IOC_PCID; 50*4882a593Smuzhiyun break; 51*4882a593Smuzhiyun } 52*4882a593Smuzhiyun return irq; 53*4882a593Smuzhiyun } 54