| 
									
										
										
										
											2008-10-23 00:01:39 -07:00
										 |  |  | #ifndef _ASM_X86_VISWS_COBALT_H
 | 
					
						
							|  |  |  | #define _ASM_X86_VISWS_COBALT_H
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <asm/fixmap.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Cobalt SGI Visual Workstation system ASIC | 
					
						
							|  |  |  |  */  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CO_CPU_NUM_PHYS 0x1e00
 | 
					
						
							|  |  |  | #define CO_CPU_TAB_PHYS (CO_CPU_NUM_PHYS + 2)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CO_CPU_MAX 4
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define	CO_CPU_PHYS		0xc2000000
 | 
					
						
							|  |  |  | #define	CO_APIC_PHYS		0xc4000000
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* see set_fixmap() and asm/fixmap.h */ | 
					
						
							|  |  |  | #define	CO_CPU_VADDR		(fix_to_virt(FIX_CO_CPU))
 | 
					
						
							|  |  |  | #define	CO_APIC_VADDR		(fix_to_virt(FIX_CO_APIC))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Cobalt CPU registers -- relative to CO_CPU_VADDR, use co_cpu_*() */ | 
					
						
							|  |  |  | #define	CO_CPU_REV		0x08
 | 
					
						
							|  |  |  | #define	CO_CPU_CTRL		0x10
 | 
					
						
							|  |  |  | #define	CO_CPU_STAT		0x20
 | 
					
						
							|  |  |  | #define	CO_CPU_TIMEVAL		0x30
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* CO_CPU_CTRL bits */ | 
					
						
							|  |  |  | #define	CO_CTRL_TIMERUN		0x04		/* 0 == disabled */
 | 
					
						
							|  |  |  | #define	CO_CTRL_TIMEMASK	0x08		/* 0 == unmasked */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* CO_CPU_STATUS bits */ | 
					
						
							|  |  |  | #define	CO_STAT_TIMEINTR	0x02	/* (r) 1 == int pend, (w) 0 == clear */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* CO_CPU_TIMEVAL value */ | 
					
						
							|  |  |  | #define	CO_TIME_HZ		100000000	/* Cobalt core rate */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Cobalt APIC registers -- relative to CO_APIC_VADDR, use co_apic_*() */ | 
					
						
							|  |  |  | #define	CO_APIC_HI(n)		(((n) * 0x10) + 4)
 | 
					
						
							|  |  |  | #define	CO_APIC_LO(n)		((n) * 0x10)
 | 
					
						
							|  |  |  | #define	CO_APIC_ID		0x0ffc
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* CO_APIC_ID bits */ | 
					
						
							|  |  |  | #define	CO_APIC_ENABLE		0x00000100
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* CO_APIC_LO bits */ | 
					
						
							|  |  |  | #define	CO_APIC_MASK		0x00010000	/* 0 = enabled */
 | 
					
						
							|  |  |  | #define	CO_APIC_LEVEL		0x00008000	/* 0 = edge */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Where things are physically wired to Cobalt | 
					
						
							|  |  |  |  * #defines with no board _<type>_<rev>_ are common to all (thus far) | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define	CO_APIC_IDE0		4
 | 
					
						
							|  |  |  | #define CO_APIC_IDE1		2		/* Only on 320 */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define	CO_APIC_8259		12		/* serial, floppy, par-l-l */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Lithium PCI Bridge A -- "the one with 82557 Ethernet" */ | 
					
						
							|  |  |  | #define	CO_APIC_PCIA_BASE0	0 /* and 1 */	/* slot 0, line 0 */
 | 
					
						
							|  |  |  | #define	CO_APIC_PCIA_BASE123	5 /* and 6 */	/* slot 0, line 1 */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define	CO_APIC_PIIX4_USB	7		/* this one is weird */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Lithium PCI Bridge B -- "the one with PIIX4" */ | 
					
						
							|  |  |  | #define	CO_APIC_PCIB_BASE0	8 /* and 9-12 *//* slot 0, line 0 */
 | 
					
						
							|  |  |  | #define	CO_APIC_PCIB_BASE123	13 /* 14.15 */	/* slot 0, line 1 */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define	CO_APIC_VIDOUT0		16
 | 
					
						
							|  |  |  | #define	CO_APIC_VIDOUT1		17
 | 
					
						
							|  |  |  | #define	CO_APIC_VIDIN0		18
 | 
					
						
							|  |  |  | #define	CO_APIC_VIDIN1		19
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define	CO_APIC_LI_AUDIO	22
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define	CO_APIC_AS		24
 | 
					
						
							|  |  |  | #define	CO_APIC_RE		25
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CO_APIC_CPU		28		/* Timer and Cache interrupt */
 | 
					
						
							|  |  |  | #define	CO_APIC_NMI		29
 | 
					
						
							|  |  |  | #define	CO_APIC_LAST		CO_APIC_NMI
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * This is how irqs are assigned on the Visual Workstation. | 
					
						
							|  |  |  |  * Legacy devices get irq's 1-15 (system clock is 0 and is CO_APIC_CPU). | 
					
						
							|  |  |  |  * All other devices (including PCI) go to Cobalt and are irq's 16 on up. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define	CO_IRQ_APIC0	16			/* irq of apic entry 0 */
 | 
					
						
							|  |  |  | #define	IS_CO_APIC(irq)	((irq) >= CO_IRQ_APIC0)
 | 
					
						
							|  |  |  | #define	CO_IRQ(apic)	(CO_IRQ_APIC0 + (apic))	/* apic ent to irq */
 | 
					
						
							|  |  |  | #define	CO_APIC(irq)	((irq) - CO_IRQ_APIC0)	/* irq to apic ent */
 | 
					
						
							|  |  |  | #define CO_IRQ_IDE0	14			/* knowledge of... */
 | 
					
						
							|  |  |  | #define CO_IRQ_IDE1	15			/* ... ide driver defaults! */
 | 
					
						
							|  |  |  | #define	CO_IRQ_8259	CO_IRQ(CO_APIC_8259)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef CONFIG_X86_VISWS_APIC
 | 
					
						
							| 
									
										
										
										
											2007-10-17 18:04:39 +02:00
										 |  |  | static inline void co_cpu_write(unsigned long reg, unsigned long v) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	*((volatile unsigned long *)(CO_CPU_VADDR+reg))=v; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-10-17 18:04:39 +02:00
										 |  |  | static inline unsigned long co_cpu_read(unsigned long reg) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	return *((volatile unsigned long *)(CO_CPU_VADDR+reg)); | 
					
						
							|  |  |  | }             | 
					
						
							|  |  |  |               | 
					
						
							| 
									
										
										
										
											2007-10-17 18:04:39 +02:00
										 |  |  | static inline void co_apic_write(unsigned long reg, unsigned long v) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	*((volatile unsigned long *)(CO_APIC_VADDR+reg))=v; | 
					
						
							|  |  |  | }             | 
					
						
							|  |  |  |               | 
					
						
							| 
									
										
										
										
											2007-10-17 18:04:39 +02:00
										 |  |  | static inline unsigned long co_apic_read(unsigned long reg) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	return *((volatile unsigned long *)(CO_APIC_VADDR+reg)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern char visws_board_type; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define	VISWS_320	0
 | 
					
						
							|  |  |  | #define	VISWS_540	1
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern char visws_board_rev; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-23 00:01:39 -07:00
										 |  |  | #endif /* _ASM_X86_VISWS_COBALT_H */
 |