03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER START
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The contents of this file are subject to the terms of the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Common Development and Distribution License (the "License").
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You may not use this file except in compliance with the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
03831d35f7499c87d51205817c93e9a8d42c4baestevel * or http://www.opensolaris.org/os/licensing.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * See the License for the specific language governing permissions
03831d35f7499c87d51205817c93e9a8d42c4baestevel * and limitations under the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * When distributing Covered Code, include this CDDL HEADER in each
03831d35f7499c87d51205817c93e9a8d42c4baestevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * If applicable, add the following below this CDDL HEADER, with the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * fields enclosed by brackets "[]" replaced with your own identifying
03831d35f7499c87d51205817c93e9a8d42c4baestevel * information: Portions Copyright [yyyy] [name of copyright owner]
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER END
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Copyright 2000 Sun Microsystems, Inc. All rights reserved.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Use is subject to license terms.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifndef _MBOXSC_IMPL_H
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define _MBOXSC_IMPL_H
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#pragma ident "%Z%%M% %I% %E% SMI"
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * This file contains implementation details for the mboxsc API that need to
03831d35f7499c87d51205817c93e9a8d42c4baestevel * be shared amongst all implementations, but should be hidden from clients.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef __cplusplus
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern "C" {
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Version number of the current Mailbox Protocol implementation. This must
03831d35f7499c87d51205817c93e9a8d42c4baestevel * be updated whenever a new version of the Protocol is implemented.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_PROTOCOL_VERSION 1
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Mailbox message header and checksum.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef struct {
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint32_t msg_version;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint32_t msg_type;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint32_t msg_cmd;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint32_t msg_length;
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint64_t msg_transid;
03831d35f7499c87d51205817c93e9a8d42c4baestevel} mboxsc_msghdr_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baesteveltypedef uint32_t mboxsc_chksum_t;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Constants for various aspects of the protocol.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_MSGHDR_SIZE (sizeof (mboxsc_msghdr_t))
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_CHKSUM_SIZE (sizeof (mboxsc_chksum_t))
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_PROTOCOL_SIZE (MBOXSC_MSGHDR_SIZE + MBOXSC_CHKSUM_SIZE)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_MSGHDR_OFFSET (0)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_DATA_OFFSET MBOXSC_MSGHDR_SIZE
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Timeouts used for various mboxsc operations. All timeouts are provided
03831d35f7499c87d51205817c93e9a8d42c4baestevel * in microseconds.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * XXX - Aside from the conversion factors, these values are currently
03831d35f7499c87d51205817c93e9a8d42c4baestevel * somewhat arbitrary, and may need significant modification.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_USECS_PER_SECOND (1000000L)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_USECS_PER_MSEC (1000L)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The amount of time to sleep before retrying an IOSRAM operation that failed
03831d35f7499c87d51205817c93e9a8d42c4baestevel * because a tunnel switch was in progress.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Current value: 0.125 seconds
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_EAGAIN_POLL_USECS (MBOXSC_USECS_PER_SECOND / 8)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The interval at which the data_valid flag should be polled for a change in
03831d35f7499c87d51205817c93e9a8d42c4baestevel * status after sending a message.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Current value: 0.010 seconds
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_PUTMSG_POLL_USECS (MBOXSC_USECS_PER_SECOND / 100)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The polling rates for acquisition of the hardware lock used to synchronize
03831d35f7499c87d51205817c93e9a8d42c4baestevel * data_valid flag access.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Current values: 0.025 seconds
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_HWLOCK_POLL_USECS (MBOXSC_USECS_PER_SECOND / 40)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Minimum, default, and maximum times for mboxsc_putmsg to spend trying to send
03831d35f7499c87d51205817c93e9a8d42c4baestevel * a message before giving up.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Current value: 0.050, 10, and 1800 seconds, respectively
03831d35f7499c87d51205817c93e9a8d42c4baestevel * 1800 seconds (30 minutes) is a few minutes shy of the maximum
03831d35f7499c87d51205817c93e9a8d42c4baestevel * value of a clock_t in units of microseconds.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_PUTMSG_MIN_TIMEOUT_USECS (MBOXSC_USECS_PER_SECOND / 20)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_PUTMSG_DEF_TIMEOUT_USECS (MBOXSC_USECS_PER_SECOND * 10)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_PUTMSG_MAX_TIMEOUT_USECS (MBOXSC_USECS_PER_SECOND * 60 * 30)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_PUTMSG_MIN_TIMEOUT_MSECS \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (MBOXSC_PUTMSG_MIN_TIMEOUT_USECS / MBOXSC_USECS_PER_MSEC)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_PUTMSG_DEF_TIMEOUT_MSECS \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (MBOXSC_PUTMSG_DEF_TIMEOUT_USECS / MBOXSC_USECS_PER_MSEC)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_PUTMSG_MAX_TIMEOUT_MSECS \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (MBOXSC_PUTMSG_MAX_TIMEOUT_USECS / MBOXSC_USECS_PER_MSEC)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Minimum and maximum times for mboxsc_getmsg to spend trying to receive a
03831d35f7499c87d51205817c93e9a8d42c4baestevel * message before giving up.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Current value: 0 and 1800 seconds, respectively
03831d35f7499c87d51205817c93e9a8d42c4baestevel * 1800 seconds (30 minutes) is a few minutes shy of the maximum
03831d35f7499c87d51205817c93e9a8d42c4baestevel * value of a clock_t in units of microseconds.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_GETMSG_MIN_TIMEOUT_USECS (MBOXSC_USECS_PER_SECOND * 0)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_GETMSG_MAX_TIMEOUT_USECS (MBOXSC_USECS_PER_SECOND * 60 * 30)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_GETMSG_MIN_TIMEOUT_MSECS \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (MBOXSC_GETMSG_MIN_TIMEOUT_USECS / MBOXSC_USECS_PER_MSEC)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MBOXSC_GETMSG_MAX_TIMEOUT_MSECS \
03831d35f7499c87d51205817c93e9a8d42c4baestevel (MBOXSC_GETMSG_MAX_TIMEOUT_USECS / MBOXSC_USECS_PER_MSEC)
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#ifdef __cplusplus
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif /* _MBOXSC_IMPL_H */