Changeset 411b6a6 in mainline for kernel/genarch/src/drivers/z8530/z8530.c
- Timestamp:
- 2009-03-07T16:08:40Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4c84368e
- Parents:
- e06da7e
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
kernel/genarch/src/drivers/z8530/z8530.c
re06da7e r411b6a6 32 32 /** 33 33 * @file 34 * @brief Zilog 8530 serial portdriver.34 * @brief Zilog 8530 serial controller driver. 35 35 */ 36 36 37 #include <genarch/kbd/z8530.h> 38 #include <genarch/kbd/key.h> 39 #include <genarch/kbd/scanc.h> 40 #include <genarch/kbd/scanc_sun.h> 41 #include <arch/drivers/kbd.h> 42 #include <console/console.h> 37 #include <genarch/drivers/z8530/z8530.h> 43 38 #include <console/chardev.h> 44 39 #include <ddi/irq.h> … … 66 61 } 67 62 68 /*69 * These codes read from z8530 data register are silently ignored.70 */71 #define IGNORE_CODE 0x7f /* all keys up */72 73 static void z8530_suspend(chardev_t *);74 static void z8530_resume(chardev_t *);75 76 static chardev_operations_t ops = {77 .suspend = z8530_suspend,78 .resume = z8530_resume,79 };80 81 63 /** Initialize z8530. */ 82 64 bool 83 z8530_init(z8530_t *dev, devno_t devno, inr_t inr, cir_t cir, void *cir_arg) 65 z8530_init(z8530_t *dev, devno_t devno, inr_t inr, cir_t cir, void *cir_arg, 66 chardev_t *devout) 84 67 { 85 68 z8530_instance_t *instance; 86 87 chardev_initialize("z8530_kbd", &kbrd, &ops);88 stdin = &kbrd;89 69 90 70 instance = malloc(sizeof(z8530_instance_t), FRAME_ATOMIC); … … 94 74 instance->devno = devno; 95 75 instance->z8530 = dev; 76 instance->devout = devout; 96 77 97 78 irq_initialize(&instance->irq); … … 125 106 } 126 107 127 /* Called from getc(). */128 void z8530_resume(chardev_t *d)129 {130 }131 132 /* Called from getc(). */133 void z8530_suspend(chardev_t *d)134 {135 }136 137 108 irq_ownership_t z8530_claim(irq_t *irq) 138 109 { … … 140 111 z8530_t *dev = instance->z8530; 141 112 142 return (z8530_read(&dev->ctl_a, RR0) & RR0_RCA); 113 if (z8530_read(&dev->ctl_a, RR0) & RR0_RCA) 114 return IRQ_ACCEPT; 115 else 116 return IRQ_DECLINE; 143 117 } 144 118 … … 151 125 if (z8530_read(&dev->ctl_a, RR0) & RR0_RCA) { 152 126 x = z8530_read(&dev->ctl_a, RR8); 153 if (x != IGNORE_CODE) { 154 if (x & KEY_RELEASE) 155 key_released(x ^ KEY_RELEASE); 156 else 157 key_pressed(x); 158 } 127 if (instance->devout) 128 chardev_push_character(instance->devout, x); 159 129 } 160 130 }
Note:
See TracChangeset
for help on using the changeset viewer.