Rev 4042 | Rev 4114 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4042 | Rev 4094 | ||
---|---|---|---|
Line 24... | Line 24... | ||
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | */ |
27 | */ |
28 | 28 | ||
29 | /** @addtogroup genarch |
29 | /** @addtogroup genarch |
30 | * @{ |
30 | * @{ |
31 | */ |
31 | */ |
32 | /** |
32 | /** |
33 | * @file |
33 | * @file |
34 | * @brief Headers for NS 16550 serial controller. |
34 | * @brief Headers for NS 16550 serial controller. |
35 | */ |
35 | */ |
36 | 36 | ||
37 | #ifndef KERN_NS16550_H_ |
37 | #ifndef KERN_NS16550_H_ |
38 | #define KERN_NS16550_H_ |
38 | #define KERN_NS16550_H_ |
39 | 39 | ||
40 | #include <ddi/irq.h> |
40 | #include <ddi/irq.h> |
41 | #include <arch/types.h> |
41 | #include <arch/types.h> |
42 | #include <console/chardev.h> |
42 | #include <console/chardev.h> |
43 | 43 | ||
44 | #define IER_ERBFI 0x01 /** Enable Receive Buffer Full Interrupt. */ |
44 | #define IER_ERBFI 0x01 /** Enable Receive Buffer Full Interrupt. */ |
45 | 45 | ||
46 | #define LCR_DLAB 0x80 /** Divisor Latch Access bit. */ |
46 | #define LCR_DLAB 0x80 /** Divisor Latch Access bit. */ |
47 | 47 | ||
48 | #define MCR_OUT2 0x08 /** OUT2. */ |
48 | #define MCR_OUT2 0x08 /** OUT2. */ |
49 | 49 | ||
50 | /** NS16550 registers. */ |
50 | /** NS16550 registers. */ |
51 | struct ns16550 { |
51 | typedef struct { |
52 | ioport8_t rbr; /**< Receiver Buffer Register. */ |
52 | ioport8_t rbr; /**< Receiver Buffer Register. */ |
53 | ioport8_t ier; /**< Interrupt Enable Register. */ |
53 | ioport8_t ier; /**< Interrupt Enable Register. */ |
54 | union { |
54 | union { |
55 | ioport8_t iir; /**< Interrupt Ident Register (read). */ |
55 | ioport8_t iir; /**< Interrupt Ident Register (read). */ |
56 | ioport8_t fcr; /**< FIFO control register (write). */ |
56 | ioport8_t fcr; /**< FIFO control register (write). */ |
57 | } __attribute__ ((packed)); |
57 | } __attribute__ ((packed)); |
58 | ioport8_t lcr; /**< Line Control register. */ |
58 | ioport8_t lcr; /**< Line Control register. */ |
59 | ioport8_t mcr; /**< Modem Control Register. */ |
59 | ioport8_t mcr; /**< Modem Control Register. */ |
60 | ioport8_t lsr; /**< Line Status Register. */ |
60 | ioport8_t lsr; /**< Line Status Register. */ |
61 | } __attribute__ ((packed)); |
61 | } __attribute__ ((packed)) ns16550_t; |
62 | typedef struct ns16550 ns16550_t; |
- | |
63 | 62 | ||
64 | /** Structure representing the ns16550 device. */ |
63 | /** Structure representing the ns16550 device. */ |
65 | typedef struct ns16550_instance { |
64 | typedef struct { |
66 | devno_t devno; |
65 | devno_t devno; |
67 | ns16550_t *ns16550; |
66 | ns16550_t *ns16550; |
68 | irq_t irq; |
67 | irq_t irq; |
69 | chardev_t *devout; |
68 | indev_t kbrdin; |
70 | } ns16550_instance_t; |
69 | } ns16550_instance_t; |
71 | 70 | ||
72 | extern bool ns16550_init(ns16550_t *, devno_t, inr_t, cir_t, void *, |
71 | extern indev_t *ns16550_init(ns16550_t *, devno_t, inr_t, cir_t, void *) |
73 | chardev_t *); |
- | |
74 | extern irq_ownership_t ns16550_claim(irq_t *); |
- | |
75 | extern void ns16550_irq_handler(irq_t *); |
- | |
76 | 72 | ||
77 | #endif |
73 | #endif |
78 | 74 | ||
79 | /** @} |
75 | /** @} |
80 | */ |
76 | */ |