usr/src/uts/common/sys/multidata_impl.h
author masputra
Sat, 22 Oct 2005 22:50:14 -0700
changeset 741 40027a3621ac
parent 0 68f95e015346
permissions -rw-r--r--
PSARC 2005/082 Yosemite: UDP Performance Enhancement 4796051 Solaris needs a more complete HW checksumming support 4905227 duplicate macros in ipclassifier.h and ip.h 4915681 need hardware checksum offload for the case of IP/UDP reassembly 6201076 outbound flow-control dysfunctional, ip to ce using mdt 6223331 ipv6 flow control may corrupt UDP packets 6223809 16-bit aligned IP header should be allowed for all x86 platforms 6275398 Galaxy hangs when running lmbench 6281836 Yosemite project integration into Solaris 6281885 xge needs to support IPv6 checksum offload 6282776 IPv6 NCE fast path is not created for incoming solicitation 6304890 IP transmit-side checksum logic needs to be tightened 6304902 IP6_IN_NOCKSUM is obsolete and should be torched 6304904 UDP should reject TI_GETPEERNAME for non-connected endpoint 6306768 IP and UDP device and module definitions need to be centralized
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     5
 * Common Development and Distribution License, Version 1.0 only
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     6
 * (the "License").  You may not use this file except in compliance
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 * with the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
/*
741
40027a3621ac PSARC 2005/082 Yosemite: UDP Performance Enhancement
masputra
parents: 0
diff changeset
    23
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
#ifndef _SYS_MULTIDATA_IMPL_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
#define	_SYS_MULTIDATA_IMPL_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
 * Multidata: implementation-private data structure and declarations.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
 * Structure used for insque/remque circular list operations.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
typedef struct ql_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
	struct ql_s *ql_next;	/* pointer to next list element */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
	struct ql_s *ql_prev;	/* pointer to previous list element */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
} ql_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
#define	QL_INIT(q) {				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
	((ql_t *)(q))->ql_next = (ql_t *)(q);	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
	((ql_t *)(q))->ql_prev = (ql_t *)(q);	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
typedef struct pdesc_slab_s pdesc_slab_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
 * Attribute hash bucket structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
typedef struct patbkt_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
	kmutex_t pbkt_lock;	/* per-bucket lock */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
	ql_t	pbkt_pattr_q;	/* list of attributes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
	uint_t	pbkt_tbl_sz;	/* table size (if this is first bucket) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
} patbkt_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
 * Attribute structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
#define	PATTR_MAGIC	0x50615472	/* "PaTr" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
struct pattr_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
	pattr_t *pat_next;	/* pointer to next attribute in bucket */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
	pattr_t *pat_prev;	/* pointer to previous attribute in bucket */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
	uint_t pat_magic;	/* set to PATTR_MAGIC */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
	kmutex_t *pat_lock;	/* pointer to per-bucket lock */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
	multidata_t *pat_mmd;	/* back pointer to Multidata */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
	uint_t	pat_buflen;	/* length of this structure + attribute */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
	uint_t	pat_type;	/* type of encapsulated attribute */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
	uint_t	pat_flags;	/* misc. flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
 * Values for pat_flags.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
#define	PATTR_REM_DEFER	0x1	/* entry is marked unusable but still exists */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
#define	PATTR_PERSIST	0x2	/* entry can't be removed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
#define	Q2PATTR(p)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
	((pattr_t *)((caddr_t)(p) - offsetof(pattr_t, pat_next)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
 * Packet descriptor structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
#define	PDESC_MAGIC	0x506b5464	/* "PkTd" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
struct pdesc_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
	pdesc_t	*pd_next;	/* pointer to next descriptor */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
	pdesc_t	*pd_prev;	/* pointer to previous descriptor */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
	uint_t pd_magic;	/* set to PDESC_MAGIC */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
	pdesc_slab_t *pd_slab;	/* back pointer to descriptor slab */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
	patbkt_t *pd_pattbl;	/* hash table of local attributes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
	pdescinfo_t pd_pdi;	/* embedded descriptor info structure */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
#define	pd_flags	pd_pdi.flags
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
 * Additional internal flags for pd_flags (see multidata.h for the rest).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
#define	PDESC_REM_DEFER	0x1000	/* entry is marked unusable but still exists */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
#define	PDESC_HAS_REF	(PDESC_HBUF_REF | PDESC_PBUF_REF)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
#define	Q2PD(p)		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
	((pdesc_t *)((caddr_t)(p) - offsetof(pdesc_t, pd_next)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
#define	PDI_COPY(pd_src, pd_dst) {				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
	(pd_dst)->flags = (pd_src)->flags & PDESC_HAS_REF;	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
	if ((pd_dst)->flags & PDESC_HBUF_REF) {			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
		(pd_dst)->hdr_base = (pd_src)->hdr_base;	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
		(pd_dst)->hdr_rptr = (pd_src)->hdr_rptr;	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
		(pd_dst)->hdr_wptr = (pd_src)->hdr_wptr;	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
		(pd_dst)->hdr_lim = (pd_src)->hdr_lim;		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
	} else {						\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
		(pd_dst)->hdr_base = NULL;			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
		(pd_dst)->hdr_rptr = NULL;			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
		(pd_dst)->hdr_wptr = NULL;			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
		(pd_dst)->hdr_lim = NULL;			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
	}							\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
								\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
	if ((pd_dst)->flags & PDESC_PBUF_REF) {			\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
		int i;						\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
								\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
		(pd_dst)->pld_cnt = (pd_src)->pld_cnt;		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
		for (i = 0; i < (pd_dst)->pld_cnt; i++) {	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
			(pd_dst)->pld_ary[i].pld_pbuf_idx =	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
			    (pd_src)->pld_ary[i].pld_pbuf_idx;	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
			(pd_dst)->pld_ary[i].pld_rptr =		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
			    (pd_src)->pld_ary[i].pld_rptr;	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
			(pd_dst)->pld_ary[i].pld_wptr =		\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
			    (pd_src)->pld_ary[i].pld_wptr;	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
		}						\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
	} else {						\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
		(pd_dst)->pld_cnt = 0;				\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
	}							\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
 * Packet descriptor slab structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
struct pdesc_slab_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
	pdesc_slab_t *pds_next;	/* pointer to next descriptor slab */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
	pdesc_slab_t *pds_prev;	/* pointer to previous descriptor slab */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
	multidata_t *pds_mmd;	/* back pointer to Multidata */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
	uint_t	pds_used;	/* always-increasing index to array */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
	uint_t	pds_sz;		/* size of descriptor array */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
	pdesc_t	pds_free_desc[1]; /* array of available descriptors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
#define	Q2PDSLAB(p)	\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
	((pdesc_slab_t *)((caddr_t)(p) - offsetof(pdesc_slab_t, pds_next)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
#define	PDESC_SLAB_SIZE(npd)  \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
	((size_t)(&((pdesc_slab_t *)0)->pds_free_desc[npd]))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
 * Multidata metadata structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
#define	MULTIDATA_MAGIC	0x4d645461	/* "MdTa" */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
struct multidata_s {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
	uint_t	mmd_magic;	/* set to MULTIDATA_MAGIC */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
	dblk_t	*mmd_dp;	/* back pointer to wrapper dblk structure */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
	mblk_t	*mmd_hbuf;	/* pointer to header buffer mblk */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
	patbkt_t *mmd_pattbl;	/* hash table of global attributes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
	kmutex_t mmd_pd_slab_lock; /* lock to protect the following items */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
	uint_t	mmd_pbuf_cnt;	/* number of data buffer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
	mblk_t	*mmd_pbuf[MULTIDATA_MAX_PBUFS];	/* data buffer mblk(s) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
	ql_t	mmd_pd_slab_q;	/* list of packet descriptor slabs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
	ql_t	mmd_pd_q;	/* list of packet descriptors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
	uint_t	mmd_slab_cnt;	/* number of packet descriptor slabs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
	uint_t	mmd_pd_cnt;	/* number of in-use packet desciptors */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
	uint_t	mmd_hbuf_ref;	/* descriptors referring to header buffer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
	uint_t	mmd_pbuf_ref;	/* descriptors referring to payload buffer(s) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
#ifdef _KERNEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
extern void mmd_init(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
extern mblk_t *mmd_copy(mblk_t *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
#endif /* _KERNEL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
#endif	/* _SYS_MULTIDATA_IMPL_H */