25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CDDL HEADER START
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * The contents of this file are subject to the terms of the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Common Development and Distribution License (the "License").
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * You may not use this file except in compliance with the License.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * or http://www.opensolaris.org/os/licensing.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * See the License for the specific language governing permissions
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * and limitations under the License.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * When distributing Covered Code, include this CDDL HEADER in each
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * If applicable, add the following below this CDDL HEADER, with the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * fields enclosed by brackets "[]" replaced with your own identifying
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * information: Portions Copyright [yyyy] [name of copyright owner]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl *
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CDDL HEADER END
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Use is subject to license terms.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifndef _DDM2S_H
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define _DDM2S_H
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#pragma ident "%Z%%M% %I% %E% SMI"
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef __cplusplus
25cf1a301a396c38e8adf52c15f537b80d2483f7jlextern "C" {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DM2S_MAX_SG 20 /* Max. scatter-gather elements */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DM2S_MAX_RETRIES 3 /* Max. number of retries */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Instance structure.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jltypedef struct dm2s {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl dev_info_t *ms_dip; /* Devinfo pointer */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl major_t ms_major; /* Major number */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t ms_ppa; /* Device instance */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mkey_t ms_key; /* Mailbox key */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl target_id_t ms_target; /* Target-id */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl ddi_iblock_cookie_t ms_ibcookie; /* Interrupt block cookie */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kmutex_t ms_lock; /* Lock to protect this structure */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kcondvar_t ms_wait; /* Cond. var to signal events */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t ms_mtu; /* MTU supported */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl queue_t *ms_rq; /* Read side queue */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl queue_t *ms_wq; /* Write side queuee */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t ms_state; /* State of the device */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t ms_retries; /* Number of retries */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl timeout_id_t ms_rq_timeoutid; /* Timeout id for read queue */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl timeout_id_t ms_wq_timeoutid; /* Timeout id for write queue */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl bufcall_id_t ms_rbufcid; /* Buffcall-id for the read */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint64_t ms_obytes; /* Number of output bytes */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint64_t ms_ibytes; /* Number of input bytes */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t ms_clean; /* Cleanup flags */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mscat_gath_t ms_sg_rcv; /* Scatter-gather for receive */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl mscat_gath_t ms_sg_tx[DM2S_MAX_SG]; /* scatter-gather for Tx */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl} dm2s_t;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* ms_state flags */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DM2S_MB_INITED 0x00000001 /* Mailbox initialized */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DM2S_MB_CONN 0x00000002 /* Mailbox in connected state */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DM2S_MB_DISC 0x00000004 /* Mailbox is disconnected */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DM2S_OPENED 0x00000008 /* Device opened */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DM2S_MBOX_READY(x) ((x)->ms_state & DM2S_MB_CONN)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/* ms_clean flags */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DM2S_CLEAN_LOCK 0x00000001
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DM2S_CLEAN_CV 0x00000002
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DM2S_CLEAN_NODE 0x00000004
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef DEBUG
25cf1a301a396c38e8adf52c15f537b80d2483f7jl/*
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Debug levels
25cf1a301a396c38e8adf52c15f537b80d2483f7jl */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DBG_DRV 0x01 /* driver related traces */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DBG_MBOX 0x02 /* Mailbox traces */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DBG_MESG 0x04 /* Mailbox Message traces */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DBG_WARN 0x10 /* warning type traces */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jlstatic void dm2s_dump_bytes(char *str, uint32_t total_len,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl uint32_t num_sg, mscat_gath_t *sgp);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DPRINTF(f, x) if (f & dm2s_debug) printf x
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DMPBYTES(s, l, n, sg) dm2s_dump_bytes(s, l, n, sg)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#else /* DEBUG */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DPRINTF(f, x)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#define DMPBYTES(s, l, n, sg)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif /* DEBUG */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#ifdef __cplusplus
25cf1a301a396c38e8adf52c15f537b80d2483f7jl}
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif
25cf1a301a396c38e8adf52c15f537b80d2483f7jl
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#endif /* _DDM2S_H */