Ignore:
Timestamp:
2009-04-21T12:46:26Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f2d2c7ba
Parents:
44b7783
Message:

change the way how input devices are wired together according to ticket #44
(also the proposal http://lists.modry.cz/cgi-bin/private/helenos-devel/2009-March/002507.html)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/drivers/z8530/z8530.c

    r44b7783 rc2417bc  
    4242#include <ddi/device.h>
    4343
    44 static indev_operations_t kbrdin_ops = {
    45         .poll = NULL
    46 };
    47 
    4844static inline void z8530_write(ioport8_t *ctl, uint8_t reg, uint8_t val)
    4945{
     
    8379       
    8480        if (z8530_read(&dev->ctl_a, RR0) & RR0_RCA) {
    85                 uint8_t x = z8530_read(&dev->ctl_a, RR8);
    86                 indev_push_character(&instance->kbrdin, x);
     81                uint8_t data = z8530_read(&dev->ctl_a, RR8);
     82                indev_push_character(instance->kbrdin, data);
    8783        }
    8884}
    8985
    9086/** Initialize z8530. */
    91 indev_t *z8530_init(z8530_t *dev, inr_t inr, cir_t cir, void *cir_arg)
     87z8530_instance_t *z8530_init(z8530_t *dev, inr_t inr, cir_t cir, void *cir_arg)
    9288{
    9389        z8530_instance_t *instance
    9490            = malloc(sizeof(z8530_instance_t), FRAME_ATOMIC);
    95         if (!instance)
    96                 return false;
     91        if (instance) {
     92                instance->z8530 = dev;
     93                instance->kbrdin = NULL;
     94               
     95                irq_initialize(&instance->irq);
     96                instance->irq.devno = device_assign_devno();
     97                instance->irq.inr = inr;
     98                instance->irq.claim = z8530_claim;
     99                instance->irq.handler = z8530_irq_handler;
     100                instance->irq.instance = instance;
     101                instance->irq.cir = cir;
     102                instance->irq.cir_arg = cir_arg;
     103        }
    97104       
    98         indev_initialize("z8530", &instance->kbrdin, &kbrdin_ops);
     105        return instance;
     106}
     107
     108void z8530_wire(z8530_instance_t *instance, indev_t *kbrdin)
     109{
     110        ASSERT(instance);
     111        ASSERT(kbrdin);
    99112       
    100         instance->z8530 = dev;
     113        instance->kbrdin = kbrdin;
    101114       
    102         irq_initialize(&instance->irq);
    103         instance->irq.devno = device_assign_devno();
    104         instance->irq.inr = inr;
    105         instance->irq.claim = z8530_claim;
    106         instance->irq.handler = z8530_irq_handler;
    107         instance->irq.instance = instance;
    108         instance->irq.cir = cir;
    109         instance->irq.cir_arg = cir_arg;
    110115        irq_register(&instance->irq);
    111116       
    112         (void) z8530_read(&dev->ctl_a, RR8);
     117        (void) z8530_read(&instance->z8530->ctl_a, RR8);
    113118       
    114119        /*
     
    116121         * to set FHC UART interrupt state to idle.
    117122         */
    118         z8530_write(&dev->ctl_a, WR0, WR0_TX_IP_RST);
     123        z8530_write(&instance->z8530->ctl_a, WR0, WR0_TX_IP_RST);
    119124       
    120125        /* interrupt on all characters */
    121         z8530_write(&dev->ctl_a, WR1, WR1_IARCSC);
     126        z8530_write(&instance->z8530->ctl_a, WR1, WR1_IARCSC);
    122127       
    123128        /* 8 bits per character and enable receiver */
    124         z8530_write(&dev->ctl_a, WR3, WR3_RX8BITSCH | WR3_RX_ENABLE);
     129        z8530_write(&instance->z8530->ctl_a, WR3, WR3_RX8BITSCH | WR3_RX_ENABLE);
    125130       
    126131        /* Master Interrupt Enable. */
    127         z8530_write(&dev->ctl_a, WR9, WR9_MIE);
    128        
    129         return &instance->kbrdin;
     132        z8530_write(&instance->z8530->ctl_a, WR9, WR9_MIE);
    130133}
    131134
Note: See TracChangeset for help on using the changeset viewer.