|
@@ -224,3 +224,86 @@ static inline void nile4_out16(u32 offset, u16 val)
|
|
|
*(volatile u16 *)(NILE4_BASE+offset) = val;
|
|
|
nile4_sync();
|
|
|
}
|
|
|
+
|
|
|
+static inline u16 nile4_in16(u32 offset)
|
|
|
+{
|
|
|
+ u16 val = *(volatile u16 *)(NILE4_BASE+offset);
|
|
|
+ nile4_sync();
|
|
|
+ return val;
|
|
|
+}
|
|
|
+
|
|
|
+static inline void nile4_out8(u32 offset, u8 val)
|
|
|
+{
|
|
|
+ *(volatile u8 *)(NILE4_BASE+offset) = val;
|
|
|
+ nile4_sync();
|
|
|
+}
|
|
|
+
|
|
|
+static inline u8 nile4_in8(u32 offset)
|
|
|
+{
|
|
|
+ u8 val = *(volatile u8 *)(NILE4_BASE+offset);
|
|
|
+ nile4_sync();
|
|
|
+ return val;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Physical Device Address Registers
|
|
|
+ */
|
|
|
+
|
|
|
+extern void nile4_set_pdar(u32 pdar, u32 phys, u32 size, int width,
|
|
|
+ int on_memory_bus, int visible);
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ * PCI Master Registers
|
|
|
+ */
|
|
|
+
|
|
|
+#define NILE4_PCICMD_IACK 0 /* PCI Interrupt Acknowledge */
|
|
|
+#define NILE4_PCICMD_IO 1 /* PCI I/O Space */
|
|
|
+#define NILE4_PCICMD_MEM 3 /* PCI Memory Space */
|
|
|
+#define NILE4_PCICMD_CFG 5 /* PCI Configuration Space */
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ * PCI Address Spaces
|
|
|
+ *
|
|
|
+ * Note that these are multiplexed using PCIINIT[01]!
|
|
|
+ */
|
|
|
+
|
|
|
+#define NILE4_PCI_IO_BASE 0xa6000000
|
|
|
+#define NILE4_PCI_MEM_BASE 0xa8000000
|
|
|
+#define NILE4_PCI_CFG_BASE NILE4_PCI_MEM_BASE
|
|
|
+#define NILE4_PCI_IACK_BASE NILE4_PCI_IO_BASE
|
|
|
+
|
|
|
+
|
|
|
+extern void nile4_set_pmr(u32 pmr, u32 type, u32 addr);
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Interrupt Programming
|
|
|
+ */
|
|
|
+
|
|
|
+#define NUM_I8259_INTERRUPTS 16
|
|
|
+#define NUM_NILE4_INTERRUPTS 16
|
|
|
+
|
|
|
+#define IRQ_I8259_CASCADE NILE4_INT_INTE
|
|
|
+#define is_i8259_irq(irq) ((irq) < NUM_I8259_INTERRUPTS)
|
|
|
+#define nile4_to_irq(n) ((n)+NUM_I8259_INTERRUPTS)
|
|
|
+#define irq_to_nile4(n) ((n)-NUM_I8259_INTERRUPTS)
|
|
|
+
|
|
|
+extern void nile4_map_irq(int nile4_irq, int cpu_irq);
|
|
|
+extern void nile4_map_irq_all(int cpu_irq);
|
|
|
+extern void nile4_enable_irq(unsigned int nile4_irq);
|
|
|
+extern void nile4_disable_irq(unsigned int nile4_irq);
|
|
|
+extern void nile4_disable_irq_all(void);
|
|
|
+extern u16 nile4_get_irq_stat(int cpu_irq);
|
|
|
+extern void nile4_enable_irq_output(int cpu_irq);
|
|
|
+extern void nile4_disable_irq_output(int cpu_irq);
|
|
|
+extern void nile4_set_pci_irq_polarity(int pci_irq, int high);
|
|
|
+extern void nile4_set_pci_irq_level_or_edge(int pci_irq, int level);
|
|
|
+extern void nile4_clear_irq(int nile4_irq);
|
|
|
+extern void nile4_clear_irq_mask(u32 mask);
|
|
|
+extern u8 nile4_i8259_iack(void);
|
|
|
+extern void nile4_dump_irq_status(void); /* Debug */
|
|
|
+
|
|
|
+#endif
|