patch-2.4.0-test12 linux/include/asm-parisc/gsc.h

Next file: linux/include/asm-parisc/hardirq.h
Previous file: linux/include/asm-parisc/fixmap.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test11/linux/include/asm-parisc/gsc.h linux/include/asm-parisc/gsc.h
@@ -0,0 +1,79 @@
+#ifndef ASM_PARISC_GSC_H
+#define ASM_PARISC_GSC_H
+#ifdef __KERNEL__
+
+#include <linux/types.h>
+#include <asm/hardware.h>	/* for struct hp_device */
+
+/*
+ * The convention used for inb/outb etc. is that names starting with
+ * two underscores are the inline versions, names starting with a
+ * single underscore are proper functions, and names starting with a
+ * letter are macros that map in some way to inline or proper function
+ * versions.  Not all that pretty, but before you change it, be sure
+ * to convince yourself that it won't break anything (in particular
+ * module support).
+ */
+extern   u8 _gsc_readb(void *);
+extern  u16 _gsc_readw(void *);
+extern  u32 _gsc_readl(void *);
+extern  u64 _gsc_readq(void *);
+extern void _gsc_writeb(u8, void *);
+extern void _gsc_writew(u16,void *);
+extern void _gsc_writel(u32,void *);
+extern void _gsc_writeq(u64,void *);
+
+#define gsc_readb(a)	_gsc_readb((void *)(a))
+#define gsc_readw(a)	_gsc_readw((void *)(a))
+#define gsc_readl(a)	_gsc_readl((void *)(a))
+#define gsc_readq(a)	_gsc_readq((void *)(a))
+#define gsc_writeb(v,a)	_gsc_writeb((v),(void *)(a))
+#define gsc_writew(v,a)	_gsc_writew((v),(void *)(a))
+#define gsc_writel(v,a)	_gsc_writel((v),(void *)(a))
+#define gsc_writeq(v,a)	_gsc_writeq((v),(void *)(a))
+
+struct gsc_dev {
+	struct gsc_bus	*bus;		/* bus this device is on */
+	struct gsc_dev	*next;		/* chain of all devices */
+	struct gsc_dev	*next_bus;	/* chain of all devices on a bus */
+	struct gsc_dev	*next_submod;	/* chain of all devices on a module */
+
+	unsigned	irq;		/* irq generated by this device */
+	void		*hpa;		/* hard physical address */
+
+	u16		hversion;
+	u8		spa;		/* SPA requirements */
+	u8		type;
+	u32		sversion;
+};
+
+struct gsc_irq {
+	unsigned long txn_addr;	/* IRQ "target" */
+	int txn_data;		/* HW "IRQ" */
+	int irq;		/* virtual IRQ */
+};
+
+/* PA I/O Architected devices support at least 5 bits in the EIM register. */
+#define GSC_EIM_WIDTH 5
+
+extern int gsc_alloc_irq(struct gsc_irq *dev);	/* dev needs an irq */
+extern int gsc_claim_irq(struct gsc_irq *dev, int irq);	/* dev needs this irq */
+
+struct gsc_bus {
+	void		*hpa;		/* HPA of device 0, function 0 of this bus */
+};
+
+/*
+ * There is one gsc_dev structure for each slot-number/function-number
+ * combination:
+ */
+
+struct gsc_dev *gsc_find_device(u16 hversion, struct gsc_dev *from);
+
+extern void probe_serial_gsc(void);
+
+/* returns a virtual irq for device at dev->hpa (works for all LASI/ASP/WAX) */
+extern int busdevice_alloc_irq( struct hp_device *dev );
+
+#endif /* __KERNEL__ */
+#endif /* LINUX_GSC_H */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)