aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-ia64
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-ia64')
-rw-r--r--include/asm-ia64/sn/pcibus_provider_defs.h51
-rw-r--r--include/asm-ia64/sn/pcidev.h58
2 files changed, 109 insertions, 0 deletions
diff --git a/include/asm-ia64/sn/pcibus_provider_defs.h b/include/asm-ia64/sn/pcibus_provider_defs.h
new file mode 100644
index 000000000000..f546b4ece33c
--- /dev/null
+++ b/include/asm-ia64/sn/pcibus_provider_defs.h
@@ -0,0 +1,51 @@
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_PCIBUS_PROVIDER_H
9#define _ASM_IA64_SN_PCI_PCIBUS_PROVIDER_H
10
11/*
12 * SN pci asic types. Do not ever renumber these or reuse values. The
13 * values must agree with what prom thinks they are.
14 */
15
16#define PCIIO_ASIC_TYPE_UNKNOWN 0
17#define PCIIO_ASIC_TYPE_PPB 1
18#define PCIIO_ASIC_TYPE_PIC 2
19#define PCIIO_ASIC_TYPE_TIOCP 3
20
21#define PCIIO_ASIC_MAX_TYPES 4
22
23/*
24 * Common pciio bus provider data. There should be one of these as the
25 * first field in any pciio based provider soft structure (e.g. pcibr_soft
26 * tioca_soft, etc).
27 */
28
29struct pcibus_bussoft {
30 uint32_t bs_asic_type; /* chipset type */
31 uint32_t bs_xid; /* xwidget id */
32 uint64_t bs_persist_busnum; /* Persistent Bus Number */
33 uint64_t bs_legacy_io; /* legacy io pio addr */
34 uint64_t bs_legacy_mem; /* legacy mem pio addr */
35 uint64_t bs_base; /* widget base */
36 struct xwidget_info *bs_xwidget_info;
37};
38
39/*
40 * SN pci bus indirection
41 */
42
43struct sn_pcibus_provider {
44 dma_addr_t (*dma_map)(struct pci_dev *, unsigned long, size_t);
45 dma_addr_t (*dma_map_consistent)(struct pci_dev *, unsigned long, size_t);
46 void (*dma_unmap)(struct pci_dev *, dma_addr_t, int);
47 void * (*bus_fixup)(struct pcibus_bussoft *);
48};
49
50extern struct sn_pcibus_provider *sn_pci_provider[];
51#endif /* _ASM_IA64_SN_PCI_PCIBUS_PROVIDER_H */
diff --git a/include/asm-ia64/sn/pcidev.h b/include/asm-ia64/sn/pcidev.h
new file mode 100644
index 000000000000..ed4031d80811
--- /dev/null
+++ b/include/asm-ia64/sn/pcidev.h
@@ -0,0 +1,58 @@
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
13extern struct sn_irq_info **sn_irq;
14
15#define SN_PCIDEV_INFO(pci_dev) \
16 ((struct pcidev_info *)(pci_dev)->sysdata)
17
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
43struct 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};
54
55extern void sn_irq_fixup(struct pci_dev *pci_dev,
56 struct sn_irq_info *sn_irq_info);
57
58#endif /* _ASM_IA64_SN_PCI_PCIDEV_H */