Subversion Repositories HelenOS

Rev

Rev 3343 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3343 Rev 3593
Line 33... Line 33...
33
 */
33
 */
34
 
34
 
35
#ifndef KERN_sparc64_NS16550_H_
35
#ifndef KERN_sparc64_NS16550_H_
36
#define KERN_sparc64_NS16550_H_
36
#define KERN_sparc64_NS16550_H_
37
 
37
 
38
#include <arch/types.h>
-
 
39
#include <arch/drivers/kbd.h>
-
 
40
 
-
 
41
/* NS16550 registers */
-
 
42
#define RBR_REG     0   /** Receiver Buffer Register. */
-
 
43
#define IER_REG     1   /** Interrupt Enable Register. */
-
 
44
#define IIR_REG     2   /** Interrupt Ident Register (read). */
-
 
45
#define FCR_REG     2   /** FIFO control register (write). */
-
 
46
#define LCR_REG     3   /** Line Control register. */
-
 
47
#define LSR_REG     5   /** Line Status Register. */
-
 
48
 
-
 
49
#define IER_ERBFI   0x01    /** Enable Receive Buffer Full Interrupt. */
-
 
50
 
-
 
51
#define LCR_DLAB    0x80    /** Divisor Latch Access bit. */
-
 
52
 
-
 
53
/** Structure representing the ns16550 device. */
-
 
54
typedef struct {
-
 
55
    devno_t devno;
-
 
56
    volatile uint8_t *reg;  /** Memory mapped registers of the ns16550. */
-
 
57
} ns16550_t;
-
 
58
 
-
 
59
static inline uint8_t ns16550_rbr_read(ns16550_t *dev)
-
 
60
{
-
 
61
    return dev->reg[RBR_REG];
-
 
62
}
-
 
63
 
-
 
64
static inline uint8_t ns16550_ier_read(ns16550_t *dev)
-
 
65
{
-
 
66
    return dev->reg[IER_REG];
-
 
67
}
-
 
68
 
-
 
69
static inline void ns16550_ier_write(ns16550_t *dev, uint8_t v)
-
 
70
{
-
 
71
    dev->reg[IER_REG] = v;
-
 
72
}
-
 
73
 
-
 
74
static inline uint8_t ns16550_iir_read(ns16550_t *dev)
-
 
75
{
-
 
76
    return dev->reg[IIR_REG];
-
 
77
}
-
 
78
 
-
 
79
static inline void ns16550_fcr_write(ns16550_t *dev, uint8_t v)
-
 
80
{
-
 
81
    dev->reg[FCR_REG] = v;
-
 
82
}
-
 
83
 
-
 
84
static inline uint8_t ns16550_lcr_read(ns16550_t *dev)
-
 
85
{
-
 
86
    return dev->reg[LCR_REG];
-
 
87
}
-
 
88
 
-
 
89
static inline void ns16550_lcr_write(ns16550_t *dev, uint8_t v)
-
 
90
{
-
 
91
    dev->reg[LCR_REG] = v;
-
 
92
}
-
 
93
 
-
 
94
static inline uint8_t ns16550_lsr_read(ns16550_t *dev)
-
 
95
{
-
 
96
    return dev->reg[LSR_REG];
-
 
97
}
-
 
98
 
38
 
99
#endif
39
#endif
100
 
40
 
101
/** @}
41
/** @}
102
 */
42
 */