2005-07-26 02:45:45 +04:00
/*
* Toshiba rbtx4938 pci routines
* Copyright ( C ) 2000 - 2001 Toshiba Corporation
*
* 2003 - 2005 ( c ) MontaVista Software , Inc . This file is licensed under the
* terms of the GNU General Public License version 2. This program is
* licensed " as is " without any warranty of any kind , whether express
* or implied .
*
* Support for TX4938 in 2.6 - Manish Lachwani ( mlachwani @ mvista . com )
*/
# include <linux/types.h>
2008-07-10 19:33:08 +04:00
# include <asm/txx9/pci.h>
2008-07-10 19:31:36 +04:00
# include <asm/txx9/rbtx4938.h>
2005-07-26 02:45:45 +04:00
2008-07-11 18:27:54 +04:00
int __init rbtx4938_pci_map_irq ( const struct pci_dev * dev , u8 slot , u8 pin )
2005-07-26 02:45:45 +04:00
{
2008-07-10 19:33:08 +04:00
int irq = tx4938_pcic1_map_irq ( dev , slot ) ;
2005-07-26 02:45:45 +04:00
2008-07-10 19:33:08 +04:00
if ( irq > = 0 )
return irq ;
irq = pin ;
2005-07-26 02:45:45 +04:00
/* IRQ rotation */
irq - - ; /* 0-3 */
2008-07-10 19:33:08 +04:00
if ( slot = = TX4927_PCIC_IDSEL_AD_TO_SLOT ( 23 ) ) {
2005-07-26 02:45:45 +04:00
/* PCI CardSlot (IDSEL=A23) */
/* PCIA => PCIA (IDSEL=A23) */
irq = ( irq + 0 + slot ) % 4 ;
} else {
/* PCI Backplane */
2008-07-10 19:33:08 +04:00
if ( txx9_pci_option & TXX9_PCI_OPT_PICMG )
irq = ( irq + 33 - slot ) % 4 ;
else
irq = ( irq + 3 + slot ) % 4 ;
2005-07-26 02:45:45 +04:00
}
irq + + ; /* 1-4 */
switch ( irq ) {
case 1 :
irq = RBTX4938_IRQ_IOC_PCIA ;
break ;
case 2 :
irq = RBTX4938_IRQ_IOC_PCIB ;
break ;
case 3 :
irq = RBTX4938_IRQ_IOC_PCIC ;
break ;
case 4 :
irq = RBTX4938_IRQ_IOC_PCID ;
break ;
}
return irq ;
}