beep_state
mutex_exit(&beep_state.mutex);
beep_state.arg = arg;
beep_state.mode = BEEP_OFF;
beep_state.beep_freq = beep_freq_func;
beep_state.beep_on = beep_on_func;
beep_state.beep_off = beep_off_func;
beep_state.timeout_id = 0;
beep_state.queue_head = 0;
beep_state.queue_tail = 0;
beep_state.queue_size = beep_queue_size;
beep_state.queue = queue;
mutex_exit(&beep_state.mutex);
mutex_enter(&beep_state.mutex);
if (beep_state.mode == BEEP_UNINIT) {
mutex_exit(&beep_state.mutex);
if (beep_state.queue != NULL)
kmem_free(beep_state.queue,
sizeof (beep_entry_t) * beep_state.queue_size);
beep_state.arg = (void *)NULL;
beep_state.mode = BEEP_UNINIT;
beep_state.beep_freq = (beep_freq_func_t)NULL;
beep_state.beep_on = (beep_on_func_t)NULL;
beep_state.beep_off = (beep_off_func_t)NULL;
beep_state.timeout_id = 0;
beep_state.queue_head = 0;
beep_state.queue_tail = 0;
beep_state.queue_size = 0;
beep_state.queue = (beep_entry_t *)NULL;
mutex_exit(&beep_state.mutex);
mutex_enter(&beep_state.mutex);
if (beep_state.mode == BEEP_UNINIT) {
mutex_exit(&beep_state.mutex);
if (beep_state.mode == BEEP_TIMED) {
(void) untimeout(beep_state.timeout_id);
beep_state.timeout_id = 0;
if (beep_state.mode != BEEP_OFF) {
beep_state.mode = BEEP_OFF;
if (beep_state.beep_off != NULL)
(*beep_state.beep_off)(beep_state.arg);
beep_state.queue_head = 0;
beep_state.queue_tail = 0;
mutex_exit(&beep_state.mutex);
mutex_enter(&beep_state.mutex);
if (beep_state.mode == BEEP_UNINIT) {
} else if (beep_state.mode == BEEP_OFF) {
beep_state.mode = BEEP_ON;
if (beep_state.beep_freq != NULL)
(*beep_state.beep_freq)(beep_state.arg,
if (beep_state.beep_on != NULL)
(*beep_state.beep_on)(beep_state.arg);
mutex_exit(&beep_state.mutex);
mutex_enter(&beep_state.mutex);
if (beep_state.mode == BEEP_UNINIT) {
} else if (beep_state.mode == BEEP_TIMED) {
next = beep_state.queue_tail + 1;
if (next == beep_state.queue_size)
if (next != beep_state.queue_head) {
beep_state.queue[beep_state.queue_tail].
beep_state.queue[beep_state.queue_tail].
beep_state.queue_tail = next;
} else if (beep_state.mode == BEEP_OFF) {
beep_state.mode = BEEP_TIMED;
if (beep_state.beep_freq != NULL)
(*beep_state.beep_freq)(beep_state.arg,
if (beep_state.beep_on != NULL)
(*beep_state.beep_on)(beep_state.arg);
beep_state.timeout_id = timeout(beep_timeout, NULL,
mutex_exit(&beep_state.mutex);
mutex_enter(&beep_state.mutex);
beep_state.timeout_id = 0;
if (beep_state.mode == BEEP_UNINIT) {
mutex_exit(&beep_state.mutex);
if ((beep_state.mode == BEEP_ON) ||
(beep_state.mode == BEEP_TIMED)) {
beep_state.mode = BEEP_OFF;
if (beep_state.beep_off != NULL)
(*beep_state.beep_off)(beep_state.arg);
if (beep_state.queue_head != beep_state.queue_tail) {
next = beep_state.queue_head;
frequency = beep_state.queue[next].frequency;
duration = beep_state.queue[next].duration;
if (next == beep_state.queue_size)
beep_state.queue_head = next;
beep_state.mode = BEEP_TIMED;
if (beep_state.beep_freq != NULL)
(*beep_state.beep_freq)(beep_state.arg,
if (beep_state.beep_on != NULL)
(*beep_state.beep_on)(beep_state.arg);
beep_state.timeout_id = timeout(beep_timeout, NULL,
mutex_exit(&beep_state.mutex);
mutex_enter(&beep_state.mutex);
status = beep_state.mode != BEEP_UNINIT &&
beep_state.mode != BEEP_OFF;
mutex_exit(&beep_state.mutex);
beep_state_t beep_state;
mutex_enter(&beep_state.mutex);
if (beep_state.mode != BEEP_UNINIT) {