patch-2.1.53 linux/include/asm-sparc64/pbm.h
Next file: linux/include/asm-sparc64/processor.h
Previous file: linux/include/asm-sparc64/openprom.h
Back to the patch index
Back to the overall index
- Lines: 83
- Date:
Thu Sep 4 12:54:49 1997
- Orig file:
v2.1.52/linux/include/asm-sparc64/pbm.h
- Orig date:
Mon Aug 18 18:19:47 1997
diff -u --recursive --new-file v2.1.52/linux/include/asm-sparc64/pbm.h linux/include/asm-sparc64/pbm.h
@@ -1,4 +1,4 @@
-/* $Id: pbm.h,v 1.4 1997/08/15 06:44:52 davem Exp $
+/* $Id: pbm.h,v 1.7 1997/08/25 06:01:14 davem Exp $
* pbm.h: U2P PCI bus module pseudo driver software state.
*
* Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
@@ -13,12 +13,28 @@
#include <asm/psycho.h>
#include <asm/oplib.h>
+struct linux_pbm_info;
+
+/* This is what we use to determine what the PROM has assigned so
+ * far, so that we can perform assignments for addresses which
+ * were not taken care of by OBP. See psycho.c for details.
+ * Per-PBM these are ordered by start address.
+ */
+struct pci_vma {
+ struct pci_vma *next;
+ struct linux_pbm_info *pbm;
+ unsigned int start;
+ unsigned int end;
+ unsigned int base_reg;
+ unsigned int _pad;
+};
+
struct linux_psycho;
struct linux_pbm_info {
struct linux_psycho *parent;
- unsigned long *pbm_IO;
- unsigned long *pbm_mem;
+ struct pci_vma *IO_assignments;
+ struct pci_vma *MEM_assignments;
int prom_node;
char prom_name[64];
struct linux_prom_pci_ranges pbm_ranges[PROMREG_MAX];
@@ -41,6 +57,45 @@
struct linux_pbm_info pbm_B;
};
+/* PCI devices which are not bridges have this placed in their pci_dev
+ * sysdata member. This makes OBP aware PCI device drivers easier to
+ * code.
+ */
+struct pcidev_cookie {
+ struct linux_pbm_info *pbm;
+ int prom_node;
+};
+
extern struct linux_psycho *psycho_root;
+
+/* Special PCI IRQ encoding, this just makes life easier for the generic
+ * irq registry layer, there is already enough crap in there due to sbus,
+ * fhc, and dcookies.
+ */
+#define PCI_IRQ_IDENT 0x80000000 /* This tells irq.c what we are */
+#define PCI_IRQ_IMAP_OFF 0x7ff00000 /* Offset from first PSYCHO imap */
+#define PCI_IRQ_IMAP_OFF_SHFT 20
+#define PCI_IRQ_BUSNO 0x000f8000 /* PSYCHO instance, currently unused */
+#define PCI_IRQ_BUSNO_SHFT 15
+#define PCI_IRQ_IGN 0x000007c0 /* PSYCHO "Int Group Number" */
+#define PCI_IRQ_INO 0x0000003f /* PSYCHO INO */
+
+#define PCI_IRQ_P(__irq) (((__irq) & PCI_IRQ_IDENT) != 0)
+
+extern __inline__ unsigned int pci_irq_encode(unsigned long imap_off,
+ unsigned long psycho_instance,
+ unsigned long ign,
+ unsigned long ino)
+{
+ unsigned int irq;
+
+ irq = PCI_IRQ_IDENT;
+ irq |= ((imap_off << PCI_IRQ_IMAP_OFF_SHFT) & PCI_IRQ_IMAP_OFF);
+ irq |= ((psycho_instance << PCI_IRQ_BUSNO_SHFT) & PCI_IRQ_BUSNO);
+ irq |= ((ign << 6) & PCI_IRQ_IGN);
+ irq |= (ino & PCI_IRQ_INO);
+
+ return irq;
+}
#endif /* !(__SPARC64_PBM_H) */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov