Changeset ae971b3e in mainline
- Timestamp:
- 2006-06-06T23:26:46Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d667767
- Parents:
- 9ceaef4
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ppc32/include/drivers/cuda.h
r9ceaef4 rae971b3e 31 31 32 32 #include <arch/types.h> 33 #include <console/chardev.h>34 33 #include <typedefs.h> 35 34 36 35 #define CUDA_IRQ 10 37 36 38 chardev_t kbrd;39 40 37 extern void cuda_init(__address base, size_t size); 38 extern __u8 cuda_get_scancode(void); 41 39 42 40 #endif -
arch/ppc32/src/drivers/cuda.c
r9ceaef4 rae971b3e 30 30 #include <arch/asm.h> 31 31 #include <console/console.h> 32 #include <console/chardev.h> 32 33 #include <arch/drivers/pic.h> 33 34 #include <sysinfo/sysinfo.h> … … 37 38 #define PACKET_ADB 0x00 38 39 #define PACKET_CUDA 0x01 39 #define PACKET_NULL 0xff40 40 41 41 #define CUDA_POWERDOWN 0x0a … … 67 67 68 68 69 static void send_packet(const __u8 kind, index_t count, ...) 70 { 71 index_t i; 72 va_list va; 73 74 switch (kind) { 75 case PACKET_NULL: 76 break; 77 default: 78 cuda[B] = cuda[B] | TIP; 79 cuda[ACR] = cuda[ACR] | SR_OUT; 80 cuda[SR] = kind; 81 cuda[B] = cuda[B] & ~TIP; 82 83 va_start(va, count); 84 85 for (i = 0; i < count; i++) { 86 cuda[ACR] = cuda[ACR] | SR_OUT; 87 cuda[SR] = va_arg(va, int); 88 cuda[B] = cuda[B] | TACK; 89 } 90 91 va_end(va); 92 93 cuda[B] = cuda[B] | TIP; 94 } 95 } 69 void send_packet(const __u8 kind, index_t count, ...); 96 70 97 71 … … 130 104 131 105 132 chardev_t kbrd;106 static chardev_t kbrd; 133 107 static chardev_operations_t ops = { 134 108 .suspend = cuda_suspend, … … 138 112 139 113 140 static void cuda_irq(int n, istate_t *istate)114 __u8 cuda_get_scancode(void) 141 115 { 142 116 __u8 kind; … … 145 119 receive_packet(&kind, 4, data); 146 120 147 if ((kind == PACKET_ADB) && (data[0] == 0x40) && (data[1] == 0x2c)) { 148 __u8 key = data[2]; 149 150 if ((key & 0x80) != 0x80) 151 chardev_push_character(&kbrd, lchars[key & 0x7f]); 152 } 121 if ((kind == PACKET_ADB) && (data[0] == 0x40) && (data[1] == 0x2c)) 122 return data[2]; 123 124 return 0; 125 } 126 127 128 static void cuda_irq(int n, istate_t *istate) 129 { 130 __u8 scancode = cuda_get_scancode(); 131 132 if ((scancode != 0) && ((scancode & 0x80) != 0x80)) 133 chardev_push_character(&kbrd, lchars[scancode & 0x7f]); 153 134 } 154 135 … … 169 150 170 151 152 void send_packet(const __u8 kind, index_t count, ...) 153 { 154 index_t i; 155 va_list va; 156 157 cuda[B] = cuda[B] | TIP; 158 cuda[ACR] = cuda[ACR] | SR_OUT; 159 cuda[SR] = kind; 160 cuda[B] = cuda[B] & ~TIP; 161 162 va_start(va, count); 163 164 for (i = 0; i < count; i++) { 165 cuda[ACR] = cuda[ACR] | SR_OUT; 166 cuda[SR] = va_arg(va, int); 167 cuda[B] = cuda[B] | TACK; 168 } 169 170 va_end(va); 171 172 cuda[B] = cuda[B] | TIP; 173 } 174 175 171 176 void cpu_halt(void) { 172 177 #ifdef CONFIG_POWEROFF 173 178 send_packet(PACKET_CUDA, 1, CUDA_POWERDOWN); 174 #else175 send_packet(PACKET_NULL, 0);176 179 #endif 177 180 asm volatile ( -
generic/src/ipc/irq.c
r9ceaef4 rae971b3e 67 67 { 68 68 int i; 69 69 70 70 if (!code) 71 71 return; … … 110 110 break; 111 111 #endif 112 #if defined(ppc32) 112 #if defined(ppc32) 113 113 case CMD_PPC32_GETCHAR: 114 IPC_SET_ARG2(call->data, _getc(&kbrd));114 IPC_SET_ARG2(call->data, cuda_get_scancode()); 115 115 break; 116 116 #endif
Note:
See TracChangeset
for help on using the changeset viewer.