summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/beep.h
blob: 5df351da6a681ca9a98db4fa0de942f59440ad8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _SYS_BEEP_H
#define	_SYS_BEEP_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#include <sys/mutex.h>

/*
 * Interface to the system beeper.
 *
 * (This is the API, not the hardware interface.)
 */

#ifdef __cplusplus
extern "C" {
#endif

#if	defined(_KERNEL)

/* beep_entry structure */

typedef struct beep_entry {
	unsigned short  frequency;
	unsigned short  duration;
} beep_entry_t;

typedef void (*beep_on_func_t)(void *arg);

typedef void (*beep_off_func_t)(void *arg);

typedef void (*beep_freq_func_t)(void *arg, int freq);

/* beep_state structure */

typedef struct beep_state {

	/* Private data for beep_freq, beep_on, and beep_off functions */
	void		*arg;

	/* Indicates if a beep command is already in progress */
	enum		{BEEP_UNINIT = 0, BEEP_OFF = 1,
			    BEEP_TIMED = 2, BEEP_ON = 3} mode;

	/* Address of the hw-dependent beep_freq function */
	beep_freq_func_t beep_freq;

	/* Address of the hw-dependent beep_on function */
	beep_on_func_t	beep_on;

	/* Address of the hw-dependent beep_off function */
	beep_off_func_t	beep_off;

	/* Timeout id for the beep_timeout() function */
	timeout_id_t	timeout_id;

	/* Mutex protecting mode, timeout_id, queue_head, queue_tail, */
	/* and queue */
	kmutex_t	mutex;

	/* Index of head of queue */
	int		queue_head;

	/* Index of tail of queue */
	int		queue_tail;

	/* Max queue size */
	int		queue_size;

	/* Circular ring buffer */
	beep_entry_t	*queue;
} beep_state_t;

#define	BEEP_QUEUE_SIZE	1000

/* BEEP_DEFAULT is a sentinel for the beep_param table. */
enum beep_type { BEEP_DEFAULT = 0, BEEP_CONSOLE = 1, BEEP_TYPE4 = 2 };

typedef struct beep_params {
	enum beep_type	type;
	int		frequency;	/* Hz */
	int		duration;	/* milliseconds */
} beep_params_t;


extern int beep_init(void *arg,
    beep_on_func_t beep_on_func,
    beep_off_func_t beep_off_func,
    beep_freq_func_t beep_freq_func);

extern int beep_fini(void);

extern int beeper_off(void);

extern int beeper_freq(enum beep_type type, int freq);

extern int beep(enum beep_type type);

extern int beep_polled(enum beep_type type);

extern int beeper_on(enum beep_type type);

extern int beep_mktone(int frequency, int duration);

extern void beep_timeout(void *arg);

extern int beep_busy(void);

#endif	/* _KERNEL */

#ifdef __cplusplus
}
#endif

#endif /* _SYS_BEEP_H */