Ignore:
Timestamp:
2006-08-11T09:35:01Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f9a56c0
Parents:
2d99709
Message:

Rework the z8530 driver so that it is based on z8530 specification rather
than on accidental and limited "compatibility" with i8042.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/include/drivers/z8530.h

    r2d99709 rec2c55a  
    3737
    3838#include <arch/types.h>
     39#include <typedefs.h>
    3940#include <arch/drivers/kbd.h>
    4041
    41 #define STATUS_REG      4
    42 #define COMMAND_REG     4
    43 #define DATA_REG        6
     42#define Z8530_CHAN_A    4
     43#define Z8530_CHAN_B    0
    4444
    45 #define LAST_REG        DATA_REG
     45#define WR0     0
     46#define WR1     1
     47#define WR2     2
     48#define WR3     3
     49#define WR4     4
     50#define WR5     5
     51#define WR6     6
     52#define WR7     7
     53#define WR8     8
     54#define WR9     9
     55#define WR10    10
     56#define WR11    11
     57#define WR12    12
     58#define WR13    13
     59#define WR14    14
     60#define WR15    15
    4661
    47 static inline void z8530_data_write(uint8_t data)
     62#define RR0     0
     63#define RR1     1
     64#define RR2     2
     65#define RR3     3
     66#define RR8     8
     67#define RR10    10
     68#define RR12    12
     69#define RR13    13
     70#define RR14    14
     71#define RR15    15
     72
     73/* Write Register 1 */
     74#define WR1_RID         (0x0<<3)        /** Receive Interrupts Disabled. */
     75#define WR1_RIFCSC      (0x1<<3)        /** Receive Interrupt on First Character or Special Condition. */
     76#define WR1_IARCSC      (0x2<<3)        /** Interrupt on All Receive Characters or Special Conditions. */
     77#define WR1_RISC        (0x3<<3)        /** Receive Interrupt on Special Condition. */
     78#define WR1_PISC        (0x1<<2)        /** Parity Is Special Condition. */
     79
     80/* Write Register 3 */
     81#define WR3_RX_ENABLE   (0x1<<0)        /** Rx Enable. */
     82#define WR3_RX8BITSCH   (0x3<<6)        /** 8-bits per character. */
     83
     84/* Write Register 9 */
     85#define WR9_MIE         (0x1<<3)        /** Master Interrupt Enable. */
     86
     87/* Read Register 0 */
     88#define RR0_RCA         (0x1<<0)        /** Receive Character Available. */
     89
     90static inline void z8530_write(index_t chan, uint8_t reg, uint8_t val)
    4891{
    49         kbd_virt_address[DATA_REG] = data;
     92        /*
     93         * Registers 8-15 will automatically issue the Point High
     94         * command as their bit 3 is 1.
     95         */
     96        kbd_virt_address[WR0+chan] = reg;       /* select register */
     97        kbd_virt_address[WR0+chan] = val;       /* write value */
    5098}
    5199
    52 static inline uint8_t z8530_data_read(void)
     100static inline void z8530_write_a(uint8_t reg, uint8_t val)
    53101{
    54         return kbd_virt_address[DATA_REG];
     102        z8530_write(Z8530_CHAN_A, reg, val);
     103}
     104static inline void z8530_write_b(uint8_t reg, uint8_t val)
     105{
     106        z8530_write(Z8530_CHAN_B, reg, val);
    55107}
    56108
    57 static inline uint8_t z8530_status_read(void)
     109static inline uint8_t z8530_read(index_t chan, uint8_t reg)
    58110{
    59         return kbd_virt_address[STATUS_REG];
     111        /*
     112         * Registers 8-15 will automatically issue the Point High
     113         * command as their bit 3 is 1.
     114         */
     115        kbd_virt_address[WR0+chan] = reg;       /* select register */
     116        return kbd_virt_address[WR0+chan];
    60117}
    61118
    62 static inline void z8530_command_write(uint8_t command)
     119static inline uint8_t z8530_read_a(uint8_t reg)
    63120{
    64         kbd_virt_address[COMMAND_REG] = command;
     121        return z8530_read(Z8530_CHAN_A, reg);
     122}
     123static inline uint8_t z8530_read_b(uint8_t reg)
     124{
     125        return z8530_read(Z8530_CHAN_B, reg);
    65126}
    66127
Note: See TracChangeset for help on using the changeset viewer.