]> git.karo-electronics.de Git - karo-tx-linux.git/blob - include/asm-ia64/sn/pcidev.h
[IA64] hotplug/ia64: SN Hotplug Driver: SN IRQ Fixes
[karo-tx-linux.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 /*
17  * Given a pci_bus, return the sn pcibus_bussoft struct.  Note that
18  * this only works for root busses, not for busses represented by PPB's.
19  */
20
21 #define SN_PCIBUS_BUSSOFT(pci_bus) \
22         ((struct pcibus_bussoft *)(PCI_CONTROLLER((pci_bus))->platform_data))
23
24 /*
25  * Given a struct pci_dev, return the sn pcibus_bussoft struct.  Note
26  * that this is not equivalent to SN_PCIBUS_BUSSOFT(pci_dev->bus) due
27  * due to possible PPB's in the path.
28  */
29
30 #define SN_PCIDEV_BUSSOFT(pci_dev) \
31         (SN_PCIDEV_INFO(pci_dev)->pdi_host_pcidev_info->pdi_pcibus_info)
32
33 #define SN_PCIDEV_BUSPROVIDER(pci_dev) \
34         (SN_PCIDEV_INFO(pci_dev)->pdi_provider)
35
36 #define PCIIO_BUS_NONE  255      /* bus 255 reserved */
37 #define PCIIO_SLOT_NONE 255
38 #define PCIIO_FUNC_NONE 255
39 #define PCIIO_VENDOR_ID_NONE    (-1)
40
41 struct pcidev_info {
42         uint64_t                pdi_pio_mapped_addr[7]; /* 6 BARs PLUS 1 ROM */
43         uint64_t                pdi_slot_host_handle;   /* Bus and devfn Host pci_dev */
44
45         struct pcibus_bussoft   *pdi_pcibus_info;       /* Kernel common bus soft */
46         struct pcidev_info      *pdi_host_pcidev_info;  /* Kernel Host pci_dev */
47         struct pci_dev          *pdi_linux_pcidev;      /* Kernel pci_dev */
48
49         struct sn_irq_info      *pdi_sn_irq_info;
50         struct sn_pcibus_provider *pdi_provider;        /* sn pci ops */
51         struct pci_dev          *host_pci_dev;          /* host bus link */
52 };
53
54 extern void sn_irq_fixup(struct pci_dev *pci_dev,
55                          struct sn_irq_info *sn_irq_info);
56
57 extern void sn_irq_lh_init(void);
58 #endif                          /* _ASM_IA64_SN_PCI_PCIDEV_H */