PCI device locking and synchronization
[akaros.git] / kern / arch / x86 / console.h
1 /* Copyright (c) 2012 The Regents of the University of California
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details.
4  *
5  * x86 Console (keyboard/serial/monitor) interfaces */
6
7 #ifndef ROS_KERN_ARCH_CONSOLE_H
8 #define ROS_KERN_ARCH_CONSOLE_H
9
10 #include <ros/common.h>
11 #include <sys/queue.h>
12
13 /* Types of console devices */
14 #define CONS_KB_DEV             1
15 #define CONS_SER_DEV    2
16
17 struct cons_dev;
18 /* Interrupt-driven console input devices */
19 struct cons_dev {
20         SLIST_ENTRY(cons_dev)           next;
21         int                                                     type;           /* e.g., CONS_KB_DEV */
22         int                                                     val;            /* e.g., COM1 */
23         int                                                     irq;            /* desired irq */
24         char                                            *model;         /* descriptive string */
25         int (*getc)(struct cons_dev *, uint8_t *);
26 };
27 SLIST_HEAD(cons_dev_slist, cons_dev);
28 extern struct cons_dev_slist cdev_list;
29
30 void cons_init(void);
31 /* Returns 0 on success, with the char in *data */
32 int cons_get_char(struct cons_dev *cdev, uint8_t *data);
33 /* Returns any available character, or 0 for none (legacy helper) */
34 int cons_get_any_char(void);
35 /* Writes c to the monitor and to all CONS_SER_DEV console devices */
36 void cons_putc(int c);
37
38 /* TODO: remove us (and serial IO) */
39 void serial_send_byte(uint8_t b);
40 int serial_read_byte();
41
42 #endif /* ROS_KERN_ARCH_CONSOLE_H */