Changeset f9a56c0 in mainline
- Timestamp:
- 2006-08-17T11:39:38Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ee289cf0
- Parents:
- ec2c55a
- Location:
- kernel
- Files:
-
- 2 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/Makefile.inc
rec2c55a rf9a56c0 67 67 68 68 CONFIG_Z8530 = y 69 DEFS += -DCONFIG_Z8530 69 DEFS += -DCONFIG_Z8530 70 70 endif 71 71 ifeq ($(MACHINE),ultra) … … 102 102 arch/$(ARCH)/src/drivers/tick.c \ 103 103 arch/$(ARCH)/src/drivers/kbd.c 104 105 ifdef CONFIG_Z8530 106 ARCH_SOURCES += \ 107 arch/$(ARCH)/src/drivers/fhc.c 108 endif -
kernel/arch/sparc64/include/asm.h
rec2c55a rf9a56c0 140 140 } 141 141 142 /** Write SET_SOFTINT Register. 143 * 144 * Bits set in SET_SOFTINT register will be set in SOFTINT register. 145 * 146 * @param v New value of SET_SOFTINT register. 147 */ 148 static inline void set_softint_write(uint64_t v) 149 { 150 __asm__ volatile ("wr %0, %1, %%set_softint\n" : : "r" (v), "i" (0)); 151 } 152 142 153 /** Enable interrupts. 143 154 * -
kernel/arch/sparc64/include/drivers/ns16550.h
rec2c55a rf9a56c0 40 40 41 41 #define RBR_REG 0 /** Receiver Buffer Register. */ 42 #define IER_REG 1 /** Interrupt Enable Register. */ 42 43 #define LSR_REG 5 /** Line Status Register. */ 43 44 … … 45 46 { 46 47 return kbd_virt_address[RBR_REG]; 48 } 49 50 static inline uint8_t ns16550_ier_read(void) 51 { 52 return kbd_virt_address[IER_REG]; 53 } 54 55 static inline void ns16550_ier_write(uint8_t v) 56 { 57 kbd_virt_address[IER_REG] = v; 47 58 } 48 59 -
kernel/arch/sparc64/include/drivers/z8530.h
rec2c55a rf9a56c0 71 71 #define RR15 15 72 72 73 /* Write Register 0 */ 74 #define WR0_ERR_RST (0x6<<3) 75 73 76 /* Write Register 1 */ 74 77 #define WR1_RID (0x0<<3) /** Receive Interrupts Disabled. */ -
kernel/arch/sparc64/include/mm/mmu.h
rec2c55a rf9a56c0 36 36 #define __sparc64_MMU_H__ 37 37 38 /* *LSU Control Register ASI. */38 /* LSU Control Register ASI. */ 39 39 #define ASI_LSU_CONTROL_REG 0x45 /**< Load/Store Unit Control Register. */ 40 40 41 /* *I-MMU ASIs. */41 /* I-MMU ASIs. */ 42 42 #define ASI_IMMU 0x50 43 43 #define ASI_IMMU_TSB_8KB_PTR_REG 0x51 … … 48 48 #define ASI_IMMU_DEMAP 0x57 49 49 50 /* *Virtual Addresses within ASI_IMMU. */50 /* Virtual Addresses within ASI_IMMU. */ 51 51 #define VA_IMMU_TAG_TARGET 0x0 /**< IMMU tag target register. */ 52 52 #define VA_IMMU_SFSR 0x18 /**< IMMU sync fault status register. */ … … 54 54 #define VA_IMMU_TAG_ACCESS 0x30 /**< IMMU TLB tag access register. */ 55 55 56 /* *D-MMU ASIs. */56 /* D-MMU ASIs. */ 57 57 #define ASI_DMMU 0x58 58 58 #define ASI_DMMU_TSB_8KB_PTR_REG 0x59 … … 64 64 #define ASI_DMMU_DEMAP 0x5f 65 65 66 /* *Virtual Addresses within ASI_DMMU. */66 /* Virtual Addresses within ASI_DMMU. */ 67 67 #define VA_DMMU_TAG_TARGET 0x0 /**< DMMU tag target register. */ 68 68 #define VA_PRIMARY_CONTEXT_REG 0x8 /**< DMMU primary context register. */ -
kernel/arch/sparc64/include/trap/interrupt.h
rec2c55a rf9a56c0 41 41 #include <arch/stack.h> 42 42 43 /* Interrupt ASI registers. */ 44 #define ASI_UDB_INTR_W 0x77 45 #define ASI_INTR_DISPATCH_STATUS 0x48 46 #define ASI_UDB_INTR_R 0x7f 47 #define ASI_INTR_RECEIVE 0x49 48 49 /* VA's used with ASI_UDB_INTR_W register. */ 50 #define ASI_UDB_INTR_W_DATA_0 0x40 51 #define ASI_UDB_INTR_W_DATA_1 0x50 52 #define ASI_UDB_INTR_W_DATA_2 0x60 53 54 /* VA's used with ASI_UDB_INTR_R register. */ 55 #define ASI_UDB_INTR_R_DATA_0 0x40 56 #define ASI_UDB_INTR_R_DATA_1 0x50 57 #define ASI_UDB_INTR_R_DATA_2 0x60 58 43 59 #define TT_INTERRUPT_LEVEL_1 0x41 44 60 #define TT_INTERRUPT_LEVEL_2 0x42 … … 71 87 72 88 .macro INTERRUPT_VECTOR_TRAP_HANDLER 89 save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp 90 SIMPLE_HANDLER interrupt 91 restore 73 92 retry 74 93 .endm 75 94 #endif /* __ASM__ */ 95 96 #ifndef __ASM__ 97 extern void interrupt(void); 98 #endif /* !def __ASM__ */ 76 99 77 100 #endif -
kernel/arch/sparc64/src/console.c
rec2c55a rf9a56c0 85 85 while (1) { 86 86 #ifdef CONFIG_Z8530 87 z8530_poll();87 return; 88 88 #endif 89 89 #ifdef CONFIG_NS16550 -
kernel/arch/sparc64/src/drivers/kbd.c
rec2c55a rf9a56c0 61 61 * However, the physical keyboard address can 62 62 * be pretty much unaligned on some systems 63 * (e.g. Ultra 5, Ultra s60).63 * (e.g. Ultra 5, Ultra 60). 64 64 */ 65 65 aligned_addr = ALIGN_DOWN(bootinfo.keyboard.addr, PAGE_SIZE); -
kernel/arch/sparc64/src/drivers/tick.c
rec2c55a rf9a56c0 27 27 */ 28 28 29 29 /** @addtogroup sparc64 30 30 * @{ 31 31 */ … … 89 89 } 90 90 91 91 /** @} 92 92 */ 93 -
kernel/arch/sparc64/src/trap/interrupt.c
rec2c55a rf9a56c0 34 34 35 35 #include <arch/interrupt.h> 36 #include <arch/trap/interrupt.h> 36 37 #include <interrupt.h> 38 #include <arch/drivers/fhc.h> 37 39 #include <arch/types.h> 38 40 #include <debug.h> 39 41 #include <ipc/sysipc.h> 42 #include <arch/asm.h> 43 #include <arch/barrier.h> 44 45 #include <genarch/kbd/z8530.h> 40 46 41 47 /** Register Interrupt Level Handler. … … 59 65 } 60 66 67 void interrupt(void) 68 { 69 uint64_t intrcv; 70 uint64_t data0; 71 72 intrcv = asi_u64_read(ASI_INTR_RECEIVE, 0); 73 data0 = asi_u64_read(ASI_UDB_INTR_R, ASI_UDB_INTR_R_DATA_0); 74 75 switch (data0) { 76 #ifdef CONFIG_Z8530 77 case Z8530_INTRCV_DATA0: 78 /* 79 * So far, we know we got this interrupt through the FHC. 80 * Since we don't have enough information about the FHC and 81 * because the interrupt looks like level sensitive, 82 * we cannot handle it by scheduling one of the level 83 * interrupt traps. Call the interrupt handler directly. 84 */ 85 fhc_uart_reset(); 86 z8530_interrupt(); 87 break; 88 #endif 89 } 90 91 membar(); 92 asi_u64_write(ASI_INTR_RECEIVE, 0, 0); 93 } 94 61 95 /** @} 62 96 */ 63 -
kernel/doc/arch/sparc64
rec2c55a rf9a56c0 7 7 The goal is to provide support for UltraSPARC 8 8 implementation of SPARC V9 architecture. 9 10 MACHINES 11 o Sun Ultra 5 12 o Sun Enterprise E6500 (simulated) 13 14 CPU 15 o UltraSPARC II 16 o UltraSPARC IIi 17 18 SIMULATORS 19 o simics 2.2.19, simics 3.0.17 20 21 TOOLCHAIN REQUIREMENTS 22 o binutils 2.17 23 o gcc 4.1.1 24 o older versions may do as well, but are now obsoleted -
kernel/genarch/include/kbd/z8530.h
rec2c55a rf9a56c0 38 38 #define KERN_Z8530_H_ 39 39 40 #define Z8530_INTRCV_DATA0 0x39 /* hardcoded for use in Simics */ 41 40 42 extern void z8530_init(void); 41 43 extern void z8530_poll(void); 42 44 extern void z8530_grab(void); 43 45 extern void z8530_release(void); 46 extern void z8530_interrupt(void); 44 47 45 48 #endif -
kernel/genarch/src/kbd/z8530.c
rec2c55a rf9a56c0 39 39 #include <genarch/kbd/scanc.h> 40 40 #include <genarch/kbd/scanc_sun.h> 41 #include <arch/drivers/fhc.h> 41 42 #include <arch/drivers/z8530.h> 42 #include <arch/drivers/kbd.h>43 43 #include <arch/interrupt.h> 44 44 #include <cpu.h> … … 65 65 }; 66 66 67 void z8530_interrupt(int n, istate_t *istate);68 67 void z8530_wait(void); 69 68 … … 72 71 { 73 72 } 73 74 74 /** Resume the former interrupt vector */ 75 75 void z8530_release(void) 76 76 { 77 77 } 78 79 #include <print.h>80 78 81 79 /** Initialize z8530. */ … … 85 83 stdin = &kbrd; 86 84 85 (void) z8530_read_a(RR8); 86 87 87 z8530_write_a(WR1, WR1_IARCSC); /* interrupt on all characters */ 88 z8530_write_a(WR2, 12); /* FIXME: IRQ12 ??? */89 88 90 89 /* 8 bits per character and enable receiver */ … … 92 91 93 92 z8530_write_a(WR9, WR9_MIE); /* Master Interrupt Enable. */ 93 94 /* 95 * We need to initialize the FireHose Controller, 96 * to which is this z8530 attached. Otherwise 97 * interrupts generated by the z8530 would not 98 * be forwarded to the CPU. 99 */ 100 fhc_init(); 94 101 } 95 102 … … 99 106 * @param istate Interrupted state. 100 107 */ 101 void z8530_interrupt( int n, istate_t *istate)108 void z8530_interrupt(void) 102 109 { 110 z8530_poll(); 103 111 } 104 112
Note:
See TracChangeset
for help on using the changeset viewer.