1/*
2 * Copyright 2010, Michael Lotz, mmlr@mlotz.ch.
3 * Copyright 2004, Axel Dörfler, axeld@pinc-software.de.
4 * Distributed under the terms of the Haiku License.
5 */
6
7#include <new>
8
9#include <stdio.h>
10#include <stdlib.h>
11#include <string.h>
12
13#include <lock.h>
14
15#include <tty/tty_module.h>
16
17#include "tty_private.h"
18
19struct mutex gGlobalTTYLock;
20struct mutex gTTYCookieLock;
21struct recursive_lock gTTYRequestLock;
22
23
24static status_t
25init_tty_module()
26{
27	// create the request mutex
28	recursive_lock_init(&gTTYRequestLock, "tty requests");
29
30	// create the global mutex
31	mutex_init(&gGlobalTTYLock, "tty global");
32
33	// create the cookie mutex
34	mutex_init(&gTTYCookieLock, "tty cookies");
35
36	return B_OK;
37}
38
39
40static void
41uninit_tty_module()
42{
43	recursive_lock_destroy(&gTTYRequestLock);
44	mutex_destroy(&gTTYCookieLock);
45	mutex_destroy(&gGlobalTTYLock);
46}
47
48
49static int32
50tty_module_std_ops(int32 op, ...)
51{
52	switch (op) {
53		case B_MODULE_INIT:
54			return init_tty_module();
55
56		case B_MODULE_UNINIT:
57			uninit_tty_module();
58			return B_OK;
59	}
60
61	return B_BAD_VALUE;
62}
63
64
65static struct tty_module_info sTTYModule = {
66	{
67		B_TTY_MODULE_NAME,
68		0, //B_KEEP_LOADED,
69		tty_module_std_ops
70	},
71
72	&tty_create,
73	&tty_destroy,
74	&tty_create_cookie,
75	&tty_close_cookie,
76	&tty_destroy_cookie,
77	&tty_read,
78	&tty_write,
79	&tty_control,
80	&tty_select,
81	&tty_deselect,
82	&tty_hardware_signal
83};
84
85
86module_info *modules[] = {
87	(module_info *)&sTTYModule,
88	NULL
89};
90