Rev 588 | Rev 1702 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 588 | Rev 990 | ||
---|---|---|---|
Line 53... | Line 53... | ||
53 | * @param chardev Character device. |
53 | * @param chardev Character device. |
54 | * @param ch Character being pushed. |
54 | * @param ch Character being pushed. |
55 | */ |
55 | */ |
56 | void chardev_push_character(chardev_t *chardev, __u8 ch) |
56 | void chardev_push_character(chardev_t *chardev, __u8 ch) |
57 | { |
57 | { |
58 | spinlock_lock(&chardev->lock); |
58 | spinlock_lock(&chardev->lock); |
59 | chardev->counter++; |
59 | chardev->counter++; |
60 | if (chardev->counter == CHARDEV_BUFLEN - 1) { |
60 | if (chardev->counter == CHARDEV_BUFLEN - 1) { |
61 | /* buffer full => disable device interrupt */ |
61 | /* buffer full => disable device interrupt */ |
62 | chardev->op->suspend(chardev); |
62 | chardev->op->suspend(chardev); |
63 | } |
63 | } |
64 | 64 | ||
65 | chardev->buffer[chardev->index++] = ch; |
65 | chardev->buffer[chardev->index++] = ch; |
66 | chardev->index = chardev->index % CHARDEV_BUFLEN; /* index modulo size of buffer */ |
66 | chardev->index = chardev->index % CHARDEV_BUFLEN; /* index modulo size of buffer */ |
67 | waitq_wakeup(&chardev->wq, WAKEUP_FIRST); |
67 | waitq_wakeup(&chardev->wq, WAKEUP_FIRST); |
68 | spinlock_unlock(&chardev->lock); |
68 | spinlock_unlock(&chardev->lock); |
69 | } |
69 | } |