Rev 2089 | Rev 3844 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2089 | Rev 2106 | ||
|---|---|---|---|
| Line 43... | Line 43... | ||
| 43 | 43 | ||
| 44 | struct chardev; |
44 | struct chardev; |
| 45 | 45 | ||
| 46 | /* Character device operations interface. */ |
46 | /* Character device operations interface. */ |
| 47 | typedef struct { |
47 | typedef struct { |
| - | 48 | /** Suspend pushing characters. */ |
|
| 48 | void (* suspend)(struct chardev *); /**< Suspend pushing characters. */ |
49 | void (* suspend)(struct chardev *); |
| - | 50 | /** Resume pushing characters. */ |
|
| 49 | void (* resume)(struct chardev *); /**< Resume pushing characters. */ |
51 | void (* resume)(struct chardev *); |
| - | 52 | /** Write character to stream. */ |
|
| 50 | void (* write)(struct chardev *, char c); /**< Write character to stream. */ |
53 | void (* write)(struct chardev *, char c); |
| 51 | /** Read character directly from device, assume interrupts disabled */ |
54 | /** Read character directly from device, assume interrupts disabled. */ |
| 52 | char (* read)(struct chardev *); |
55 | char (* read)(struct chardev *); |
| 53 | } chardev_operations_t; |
56 | } chardev_operations_t; |
| 54 | 57 | ||
| 55 | /** Character input device. */ |
58 | /** Character input device. */ |
| 56 | typedef struct chardev { |
59 | typedef struct chardev { |
| 57 | char *name; |
60 | char *name; |
| 58 | 61 | ||
| 59 | waitq_t wq; |
62 | waitq_t wq; |
| 60 | SPINLOCK_DECLARE(lock); /**< Protects everything below. */ |
63 | /** Protects everything below. */ |
| - | 64 | SPINLOCK_DECLARE(lock); |
|
| 61 | uint8_t buffer[CHARDEV_BUFLEN]; |
65 | uint8_t buffer[CHARDEV_BUFLEN]; |
| 62 | count_t counter; |
66 | count_t counter; |
| 63 | chardev_operations_t *op; /**< Implementation of chardev operations. */ |
67 | /** Implementation of chardev operations. */ |
| - | 68 | chardev_operations_t *op; |
|
| 64 | index_t index; |
69 | index_t index; |
| 65 | void *data; |
70 | void *data; |
| 66 | } chardev_t; |
71 | } chardev_t; |
| 67 | 72 | ||
| 68 | extern void chardev_initialize(char *name, |
73 | extern void chardev_initialize(char *name, chardev_t *chardev, |
| 69 | chardev_t *chardev, |
- | |
| 70 | chardev_operations_t *op); |
74 | chardev_operations_t *op); |
| 71 | extern void chardev_push_character(chardev_t *chardev, uint8_t ch); |
75 | extern void chardev_push_character(chardev_t *chardev, uint8_t ch); |
| 72 | 76 | ||
| 73 | #endif /* KERN_CHARDEV_H_ */ |
77 | #endif /* KERN_CHARDEV_H_ */ |
| 74 | 78 | ||
| 75 | /** @} |
79 | /** @} |