Changeset 63530c62 in mainline for kernel/genarch


Ignore:
Timestamp:
2006-10-14T19:31:03Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e3890b3f
Parents:
7dcf22a
Message:

Changes in ns16550 and z8530 drivers.
Add some stuff for IRQ notifications to irq_t.

Location:
kernel/genarch
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/include/kbd/ns16550.h

    r7dcf22a r63530c62  
    4141#include <ddi/irq.h>
    4242
    43 extern void ns16550_init(void);
     43extern void ns16550_init(devno_t devno, inr_t inr, uintptr_t vaddr);
    4444extern void ns16550_poll(void);
    4545extern void ns16550_grab(void);
  • kernel/genarch/include/kbd/z8530.h

    r7dcf22a r63530c62  
    4343extern bool z8530_belongs_to_kernel;
    4444
    45 extern void z8530_init(void);
     45extern void z8530_init(devno_t devno, inr_t inr, uintptr_t vaddr);
    4646extern void z8530_poll(void);
    4747extern void z8530_grab(void);
  • kernel/genarch/src/kbd/ns16550.c

    r7dcf22a r63530c62  
    11/*
    2  * Copyright (C) 2001-2004 Jakub Jermar
     2 * Copyright (C) 2001-2006 Jakub Jermar
    33 * All rights reserved.
    44 *
     
    5353#define LSR_DATA_READY  0x01
    5454
     55/** Structure representing the ns16550. */
     56static ns16550_t ns16550;
     57
     58/** Structure for ns16550's IRQ. */
     59static irq_t ns16550_irq;
     60
    5561/*
    5662 * These codes read from ns16550 data register are silently ignored.
     
    8288}
    8389
    84 /** Initialize ns16550. */
    85 void ns16550_init(void)
     90/** Initialize ns16550.
     91 *
     92 * @param devno Device number.
     93 * @param inr Interrupt number.
     94 * @param vaddr Virtual address of device's registers.
     95 */
     96void ns16550_init(devno_t devno, inr_t inr, uintptr_t vaddr)
    8697{
    8798        ns16550_grab();
     
    89100        stdin = &kbrd;
    90101       
     102        ns16550.devno = devno;
     103        ns16550.reg = (uint8_t *) vaddr;
     104       
     105        irq_initialize(&ns16550_irq);
     106        ns16550_irq.devno = devno;
     107        ns16550_irq.inr = inr;
     108        ns16550_irq.claim = ns16550_claim;
     109        ns16550_irq.handler = ns16550_irq_handler;
     110        irq_register(&ns16550_irq);
     111       
    91112        sysinfo_set_item_val("kbd", NULL, true);
    92         sysinfo_set_item_val("kbd.irq", NULL, 0);
    93         sysinfo_set_item_val("kbd.address.virtual", NULL, (uintptr_t) kbd_virt_address);
     113        sysinfo_set_item_val("kbd.devno", NULL, devno);
     114        sysinfo_set_item_val("kbd.inr", NULL, inr);
     115        sysinfo_set_item_val("kbd.address.virtual", NULL, vaddr);
    94116       
    95         ns16550_ier_write(IER_ERBFI);                           /* enable receiver interrupt */
     117        ns16550_ier_write(&ns16550, IER_ERBFI);         /* enable receiver interrupt */
    96118       
    97         while (ns16550_lsr_read() & LSR_DATA_READY)
    98                 (void) ns16550_rbr_read();
     119        while (ns16550_lsr_read(&ns16550) & LSR_DATA_READY)
     120                (void) ns16550_rbr_read(&ns16550);
    99121}
    100122
     
    130152        while(!(ch = active_read_buff_read())) {
    131153                uint8_t x;
    132                 while (!(ns16550_lsr_read() & LSR_DATA_READY))
     154                while (!(ns16550_lsr_read(&ns16550) & LSR_DATA_READY))
    133155                        ;
    134                 x = ns16550_rbr_read();
     156                x = ns16550_rbr_read(&ns16550);
    135157                if (x != IGNORE_CODE) {
    136158                        if (x & KEY_RELEASE)
     
    151173        uint8_t x;
    152174
    153         while (ns16550_lsr_read() & LSR_DATA_READY) {
    154                 x = ns16550_rbr_read();
     175        while (ns16550_lsr_read(&ns16550) & LSR_DATA_READY) {
     176                x = ns16550_rbr_read(&ns16550);
    155177                if (x != IGNORE_CODE) {
    156178                        if (x & KEY_RELEASE)
  • kernel/genarch/src/kbd/z8530.c

    r7dcf22a r63530c62  
    6161bool z8530_belongs_to_kernel = true;
    6262
     63static z8530_t z8530;           /**< z8530 device structure. */
     64static irq_t z8530_irq;         /**< z8530's IRQ. */
     65
    6366static void z8530_suspend(chardev_t *);
    6467static void z8530_resume(chardev_t *);
     
    8588
    8689/** Initialize z8530. */
    87 void z8530_init(void)
     90void z8530_init(devno_t devno, inr_t inr, uintptr_t vaddr)
    8891{
    8992        chardev_initialize("z8530_kbd", &kbrd, &ops);
    9093        stdin = &kbrd;
    9194
     95        z8530.devno = devno;
     96        z8530.reg = (uint8_t *) vaddr;
     97
     98        irq_initialize(&z8530_irq);
     99        z8530_irq.devno = devno;
     100        z8530_irq.inr = inr;
     101        z8530_irq.claim = z8530_claim;
     102        z8530_irq.handler = z8530_irq_handler;
     103        irq_register(&z8530_irq);
     104
    92105        sysinfo_set_item_val("kbd", NULL, true);
    93         sysinfo_set_item_val("kbd.irq", NULL, 0);
    94         sysinfo_set_item_val("kbd.address.virtual", NULL, (uintptr_t) kbd_virt_address);
    95 
    96         (void) z8530_read_a(RR8);
     106        sysinfo_set_item_val("kbd.devno", NULL, devno);
     107        sysinfo_set_item_val("kbd.inr", NULL, inr);
     108        sysinfo_set_item_val("kbd.address.virtual", NULL, vaddr);
     109
     110        (void) z8530_read_a(&z8530, RR8);
    97111
    98112        /*
     
    100114         * to set FHC UART interrupt state to idle.
    101115         */
    102         z8530_write_a(WR0, WR0_TX_IP_RST);
    103 
    104         z8530_write_a(WR1, WR1_IARCSC);         /* interrupt on all characters */
     116        z8530_write_a(&z8530, WR0, WR0_TX_IP_RST);
     117
     118        z8530_write_a(&z8530, WR1, WR1_IARCSC);         /* interrupt on all characters */
    105119
    106120        /* 8 bits per character and enable receiver */
    107         z8530_write_a(WR3, WR3_RX8BITSCH | WR3_RX_ENABLE);
     121        z8530_write_a(&z8530, WR3, WR3_RX8BITSCH | WR3_RX_ENABLE);
    108122       
    109         z8530_write_a(WR9, WR9_MIE);            /* Master Interrupt Enable. */
     123        z8530_write_a(&z8530, WR9, WR9_MIE);            /* Master Interrupt Enable. */
    110124}
    111125
     
    140154        while(!(ch = active_read_buff_read())) {
    141155                uint8_t x;
    142                 while (!(z8530_read_a(RR0) & RR0_RCA))
     156                while (!(z8530_read_a(&z8530, RR0) & RR0_RCA))
    143157                        ;
    144                 x = z8530_read_a(RR8);
     158                x = z8530_read_a(&z8530, RR8);
    145159                if (x != IGNORE_CODE) {
    146160                        if (x & KEY_RELEASE)
     
    161175        uint8_t x;
    162176
    163         while (z8530_read_a(RR0) & RR0_RCA) {
    164                 x = z8530_read_a(RR8);
     177        while (z8530_read_a(&z8530, RR0) & RR0_RCA) {
     178                x = z8530_read_a(&z8530, RR8);
    165179                if (x != IGNORE_CODE) {
    166180                        if (x & KEY_RELEASE)
     
    174188irq_ownership_t z8530_claim(void)
    175189{
    176         return (z8530_read_a(RR0) & RR0_RCA);
     190        return (z8530_read_a(&z8530, RR0) & RR0_RCA);
    177191}
    178192
Note: See TracChangeset for help on using the changeset viewer.