| 
					
				 | 
			
			
				@@ -0,0 +1,118 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *	linux/arch/alpha/kernel/core_marvel.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Code common to all Marvel based systems. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define __EXTERN_INLINE inline 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/io.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/core_marvel.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#undef __EXTERN_INLINE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/types.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/pci.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/sched.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/init.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/vmalloc.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/mc146818rtc.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/rtc.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/module.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/bootmem.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/ptrace.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/smp.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/gct.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/pgalloc.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/tlbflush.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/rtc.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <asm/vga.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "proto.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "pci_impl.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Debug helpers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define DEBUG_CONFIG 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if DEBUG_CONFIG 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# define DBG_CFG(args) printk args 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# define DBG_CFG(args) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Private data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct io7 *io7_head = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Helper functions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static unsigned long __attribute__ ((unused)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+read_ev7_csr(int pe, unsigned long offset) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	ev7_csr *ev7csr = EV7_CSR_KERN(pe, offset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	unsigned long q; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	mb(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	q = ev7csr->csr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	mb(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return q; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void __attribute__ ((unused)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+write_ev7_csr(int pe, unsigned long offset, unsigned long q) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	ev7_csr *ev7csr = EV7_CSR_KERN(pe, offset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	mb(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	ev7csr->csr = q; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	mb(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static char * __init 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+mk_resource_name(int pe, int port, char *str) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	char tmp[80]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	char *name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	sprintf(tmp, "PCI %s PE %d PORT %d", str, pe, port); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	name = alloc_bootmem(strlen(tmp) + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	strcpy(name, tmp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+inline struct io7 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+marvel_next_io7(struct io7 *prev) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return (prev ? prev->next : io7_head); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+struct io7 * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+marvel_find_io7(int pe) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct io7 *io7; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for (io7 = io7_head; io7 && io7->pe != pe; io7 = io7->next) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return io7; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct io7 * __init 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+alloc_io7(unsigned int pe) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct io7 *io7; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	struct io7 *insp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int h; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (marvel_find_io7(pe)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		printk(KERN_WARNING "IO7 at PE %d already allocated!\n", pe); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 |