Changeset ae971b3e in mainline for arch/ppc32/src/drivers/cuda.c
- 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
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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 (
Note:
See TracChangeset
for help on using the changeset viewer.