9610fcc635450e57bf9be693fb8fa5e22eb60be1
[linux-2.6.git] / include / asm-ia64 / sn / pcidev.h
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 1992 - 1997, 2000-2004 Silicon Graphics, Inc. All rights reserved.
7  */
8 #ifndef _ASM_IA64_SN_PCI_PCIDEV_H
9 #define _ASM_IA64_SN_PCI_PCIDEV_H
10
11 #include <linux/pci.h>
12
13 #define SN_PCIDEV_INFO(pci_dev) \
14         ((struct pcidev_info *)(pci_dev)->sysdata)
15
16 #define SN_PCIBUS_BUSSOFT_INFO(pci_bus) \
17         (struct pcibus_info *)((struct pcibus_bussoft *)(PCI_CONTROLLER((pci_bus))->platform_data))
18 /*
19  * Given a pci_bus, return the sn pcibus_bussoft struct.  Note that
20  * this only works for root busses, not for busses represented by PPB's.
21  */
22
23 #define SN_PCIBUS_BUSSOFT(pci_bus) \
24         ((struct pcibus_bussoft *)(PCI_CONTROLLER((pci_bus))->platform_data))
25
26 /*
27  * Given a struct pci_dev, return the sn pcibus_bussoft struct.  Note
28  * that this is not equivalent to SN_PCIBUS_BUSSOFT(pci_dev->bus) due
29  * due to possible PPB's in the path.
30  */
31
32 #define SN_PCIDEV_BUSSOFT(pci_dev) \
33         (SN_PCIDEV_INFO(pci_dev)->pdi_host_pcidev_info->pdi_pcibus_info)
34
35 #define SN_PCIDEV_BUSPROVIDER(pci_dev) \
36         (SN_PCIDEV_INFO(pci_dev)->pdi_provider)
37
38 #define PCIIO_BUS_NONE  255      /* bus 255 reserved */
39 #define PCIIO_SLOT_NONE 255
40 #define PCIIO_FUNC_NONE 255
41 #define PCIIO_VENDOR_ID_NONE    (-1)
42
43 struct pcidev_info {
44         uint64_t                pdi_pio_mapped_addr[7]; /* 6 BARs PLUS 1 ROM */
45         uint64_t                pdi_slot_host_handle;   /* Bus and devfn Host pci_dev */
46
47         struct pcibus_bussoft   *pdi_pcibus_info;       /* Kernel common bus soft */
48         struct pcidev_info      *pdi_host_pcidev_info;  /* Kernel Host pci_dev */
49         struct pci_dev          *pdi_linux_pcidev;      /* Kernel pci_dev */
50
51         struct sn_irq_info      *pdi_sn_irq_info;
52         struct sn_pcibus_provider *pdi_provider;        /* sn pci ops */
53         struct pci_dev          *host_pci_dev;          /* host bus link */
54 };
55
56 extern void sn_irq_fixup(struct pci_dev *pci_dev,
57                          struct sn_irq_info *sn_irq_info);
58 extern void sn_irq_unfixup(struct pci_dev *pci_dev);
59 extern void sn_pci_fixup_slot(struct pci_dev *dev);
60 extern void sn_pci_unfixup_slot(struct pci_dev *dev);
61 extern void sn_irq_lh_init(void);
62 #endif                          /* _ASM_IA64_SN_PCI_PCIDEV_H */