patch-2.4.0-test8 linux/include/asm-alpha/core_irongate.h

Next file: linux/include/asm-alpha/uaccess.h
Previous file: linux/include/asm-alpha/bitops.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test7/linux/include/asm-alpha/core_irongate.h linux/include/asm-alpha/core_irongate.h
@@ -83,247 +83,24 @@
 	igcsr32 agpmode;		/* 0xB0 - AGP/GART mode control */
 } Irongate0;
 
-/* Bitfield and mask register definitions */
 
-/* Device, vendor IDs - offset 0x00 */
+typedef struct {
 
-typedef union {
-	igcsr32 i;			/* integer value of CSR */
-	struct {
-		unsigned v : 16;
-		unsigned d : 16;
-	} r;				/* structured interpretation */
-} ig_dev_vendor_t;
-
-
-/* Status, command registers - offset 0x04 */
-
-typedef union {
-	igcsr32 i;
-	struct {
-		unsigned command;
-		unsigned status;
-	} s;
-	struct {
-		/* command register fields */
-		unsigned iospc : 1;		/* always reads zero */
-		unsigned memspc	 : 1;		/* PCI memory space accesses? */
-		unsigned iten : 1;		/* always 1: can be bus initiator */
-		unsigned scmon : 1;		/* always 0 special cycles not chckd */
-		unsigned mwic : 1;		/* always 0 - no mem write & invalid */
-		unsigned vgaps : 1;		/* always 0 - palette rds not special */
-		unsigned per : 1;		/* parity error resp: always 0 */
-		unsigned step : 1;		/* address/data stepping : always 0 */
-		unsigned serre : 1;		/* 1 = sys err output driver enable */
-		unsigned fbbce : 1;		/* fast back-back cycle : always 0 */
-		unsigned zero1 : 6;		/* must be zero */
-
-		/* status register fields */
-		unsigned zero2 : 4;	     /* must be zero */
-		unsigned cl : 1;	    /* config space capa list: always 1 */
-		unsigned pci66 : 1;	    /* 66 MHz PCI support - always 0 */
-		unsigned udf : 1;	    /* user defined features - always 0 */
-		unsigned fbbc : 1;	    /* back-back transactions - always 0 */
-		unsigned ppe : 1;	    /* PCI parity error detected (0) */
-		unsigned devsel : 2;	    /* DEVSEL timing (always 01) */
-		unsigned sta : 1;	    /* signalled target abort (0) */
-		unsigned rta : 1;	    /* recvd target abort */
-		unsigned ria : 1;	    /* recvd initiator abort */
-		unsigned serr : 1;	    /* SERR has been asserted */
-		unsigned dpe : 1;	    /* DRAM parity error (0) */
-	} r;
-} ig_stat_cmd_t;
-
-
-/* Revision ID, Programming interface, subclass, baseclass - offset 0x08 */
-
-typedef union {
-	igcsr32 i;
-	struct {
-		/* revision ID */
-		unsigned step : 4;		/* stepping Revision ID */
-		unsigned die : 4;		/* die Revision ID */
-		unsigned pif : 8;		/* programming interface (0x00) */
-		unsigned sub : 8;		/* subclass code (0x00) */
-		unsigned base: 8;		/* baseclass code (0x06) */
-	} r;
-} ig_class_t;
-
-
-/* Latency Timer, PCI Header type - offset 0x0C */
-
-typedef union {
-	igcsr32 i;
-	struct {
-		unsigned zero1:8;		/* reserved */
-		unsigned lat : 8;		/* latency in PCI bus clocks */
-		unsigned hdr : 8;		/* PCI header type */
-		unsigned zero2:8;		/* reserved */
-	} r;
-} ig_latency_t;
-
-
-/* Base Address Register 0 - offset 0x10 */
-
-typedef union {
-	igcsr32 i;
-	struct {
-		unsigned mem : 1;		/* Reg pts to memory (always 0) */
-		unsigned type: 2;		/* 32 bit register = 0b00 */
-		unsigned pref: 1;		/* graphics mem prefetchable=1 */
-		unsigned baddrl : 21;		/* 32M = minimum alloc -> all zero */
-		unsigned size : 6;		/* size requirements for AGP */
-		unsigned zero : 1;		/* reserved=0 */
-	} r;
-} ig_bar0_t;
-
-
-/* Base Address Register 1 - offset 0x14 */
-
-typedef union {
-	igcsr32 i;
-	struct {
-		unsigned mem : 1;		/* BAR0 maps to memory -> 0 */
-		unsigned type : 2;		/* BAR1 is 32-bit -> 0b00 */
-		unsigned pref : 1;		/* graphics mem prefetchable=1 */
-		unsigned baddrl : 8;		/* 4K alloc for AGP CSRs -> 0b00 */
-		unsigned baddrh : 20;		/* base addr of AGP CSRs A[30:11] */
-	} r;
-} ig_bar1_t;
-
-
-/* Base Address Register 2 - offset 0x18 */
-
-typedef union {
-	igcsr32 i;
-	struct {
-		unsigned io  : 1;		/* BAR2 maps to I/O space -> 1 */
-		unsigned zero1: 1;		/* reserved */
-		unsigned addr : 22;		/* BAR2[31:10] - PM2_BLK base */
-		unsigned zero2: 8;		/* reserved */
-	} r;
-} ig_bar2_t;
-
-
-/* Capabilities Pointer - offset 0x34 */
-
-typedef union {
-	igcsr32 i;
-	struct {
-		unsigned cap : 8;		/* =0xA0, offset of AGP ctrl regs */
-		unsigned zero: 24;		/* reserved */
-	} r;
-} ig_capptr_t;
-
-
-/* Base Address Chip Select Register 1,0 - offset 0x40 */
-/* Base Address Chip Select Register 3,2 - offset 0x44 */
-/* Base Address Chip Select Register 5,4 - offset 0x48 */
-
-typedef union {
-
-	igcsr32 i;
-	struct {
-		/* lower bank */
-		unsigned en0 : 1;		/* memory bank enabled */
-		unsigned mask0 : 6;		/* Address mask for A[28:23] */
-		unsigned base0 : 9;		/* Bank Base Address A[31:23] */
-
-		/* upper bank */
-		unsigned en1 : 1;		/* memory bank enabled */
-		unsigned mask1 : 6;		/* Address mask for A[28:23] */
-		unsigned base1 : 9;		/* Bank Base Address A[31:23] */
-	} r;
-} ig_bacsr_t, ig_bacsr10_t, ig_bacsr32_t, ig_bacsr54_t;
-
-
-/* SDRAM Address Mapping Control Register - offset 0x50 */
-
-typedef union {
-	igcsr32 i;
-	struct {
-		unsigned z1 : 1;		/* reserved */
-		unsigned bnks0: 1;		/* 0->2 banks in chip select 0 */
-		unsigned am0 : 1;		/* row/column addressing */
-		unsigned z2 : 1;		/* reserved */
-
-		unsigned z3 : 1;		/* reserved */
-		unsigned bnks1: 1;		/* 0->2 banks in chip select 1 */
-		unsigned am1 : 1;		/* row/column addressing */
-		unsigned z4 : 1;		/* reserved */
-
-		unsigned z5 : 1;		/* reserved */
-		unsigned bnks2: 1;		/* 0->2 banks in chip select 2 */
-		unsigned am2 : 1;		/* row/column addressing */
-		unsigned z6 : 1;		/* reserved */
-
-		unsigned z7 : 1;		/* reserved */
-		unsigned bnks3: 1;		/* 0->2 banks in chip select 3 */
-		unsigned am3 : 1;		/* row/column addressing */
-		unsigned z8 : 1;		/* reserved */
-
-		unsigned z9 : 1;		/* reserved */
-		unsigned bnks4: 1;		/* 0->2 banks in chip select 4 */
-		unsigned am4 : 1;		/* row/column addressing */
-		unsigned z10 : 1;		/* reserved */
-
-		unsigned z11 : 1;		/* reserved */
-		unsigned bnks5: 1;		/* 0->2 banks in chip select 5 */
-		unsigned am5 : 1;		/* row/column addressing */
-		unsigned z12 : 1;		/* reserved */
-
-		unsigned rsrvd: 8;		/* reserved */
-	} r;
-} ig_drammap_t;
-
-
-/* DRAM timing and driver strength register - offset 0x54 */
-
-typedef union {
-	igcsr32 i;
-	struct {
-		/* DRAM timing parameters */
-		unsigned trcd : 2;
-		unsigned tcl : 2;
-		unsigned tras: 3;
-		unsigned trp : 2;
-		unsigned trc : 3;
-		unsigned icl: 2;
-		unsigned ph : 2;
-
-		/* Chipselect driver strength */
-		unsigned adra : 1;
-		unsigned adrb : 1;
-		unsigned ctrl : 3;
-		unsigned dqm : 1;
-		unsigned cs : 1;
-		unsigned clk: 1;
-		unsigned rsrvd:8;
-	} r;
-} ig_dramtm_t;
-
-
-/* DRAM Mode / Status and ECC Register - offset 0x58 */
-
-typedef union {
-	igcsr32 i;
-	struct {
-		unsigned chipsel : 6;		/* failing ECC chip select */
-		unsigned zero1 : 2;		/* always reads zero */
-		unsigned status : 2;		/* ECC Detect logic status */
-		unsigned zero2 : 6;		/* always reads zero */
-
-		unsigned cycles : 2;		/* cycles per refresh, see table */
-		unsigned en : 1;		/* ECC enable */
-		unsigned r : 1;			/* Large burst enable (=0) */
-		unsigned bre : 1;		/* Burst refresh enable */
-		unsigned zero3 : 2;		/* reserved = 0 */
-		unsigned mwe : 1;		/* Enable writes to DRAM mode reg */
-		unsigned type : 1;		/* SDRAM = 0, default */
-		unsigned sdraminit : 1;		/* SDRAM init - set params first! */
-		unsigned zero4 : 6;		/* reserved = 0 */
-	} r;
-} ig_dramms_t;
+	igcsr32 dev_vendor;		/* 0x00 - Device and Vendor IDs */
+	igcsr32 stat_cmd;		/* 0x04 - Status and Command regs */
+	igcsr32 class;			/* 0x08 - subclass, baseclass etc */
+	igcsr32 htype;			/* 0x0C - header type (at 0x0E) */
+	igcsr32 rsrvd0[2];		/* 0x10-0x17 reserved */
+	igcsr32 busnos;			/* 0x18 - Primary, secondary bus nos */
+	igcsr32 io_baselim_regs;	/* 0x1C - IO base, IO lim, AGP status */
+	igcsr32	mem_baselim;		/* 0x20 - memory base, memory lim */
+	igcsr32 pfmem_baselim;		/* 0x24 - prefetchable base, lim */
+	igcsr32 rsrvd1[2];		/* 0x28-0x2F reserved */
+	igcsr32 io_baselim;		/* 0x30 - IO base, IO limit */
+	igcsr32 rsrvd2[2];		/* 0x34-0x3B - reserved */
+	igcsr32 interrupt;		/* 0x3C - interrupt, PCI bridge ctrl */
+
+} Irongate1;
 
 
 /*
@@ -343,7 +120,21 @@
 #define IRONGATE_IO		(IDENT_ADDR | IRONGATE_BIAS | 0x1FC000000UL)
 #define IRONGATE_CONF		(IDENT_ADDR | IRONGATE_BIAS | 0x1FE000000UL)
 
-#define IRONGATE0		((Irongate0 *) IRONGATE_CONF)
+/*
+ * PCI Configuration space accesses are formed like so:
+ *
+ * 0x1FE << 24 |  : 2 2 2 2 1 1 1 1 : 1 1 1 1 1 1 0 0 : 0 0 0 0 0 0 0 0 :
+ *                : 3 2 1 0 9 8 7 6 : 5 4 3 2 1 0 9 8 : 7 6 5 4 3 2 1 0 :
+ *                  ---bus numer---   -device-- -fun-   ---register----
+ */
+
+#define IGCSR(dev,fun,reg)	( IRONGATE_CONF | \
+				((dev)<<11) | \
+				((fun)<<8) | \
+				(reg) )
+
+#define IRONGATE0		((Irongate0 *) IGCSR(0, 0, 0))
+#define IRONGATE1		((Irongate1 *) IGCSR(1, 0, 0))
 
 /*
  * Data structure for handling IRONGATE machine checks:

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