03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER START
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 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
03831d35f7499c87d51205817c93e9a8d42c4baestevel * See the License for the specific language governing permissions
03831d35f7499c87d51205817c93e9a8d42c4baestevel * and limitations under the License.
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 * CDDL HEADER END
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Copyright 2001 Sun Microsystems, Inc. All rights reserved.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Use is subject to license terms.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * ****** NOTICE **** This header file is maintained in the SMS gate,
03831d35f7499c87d51205817c93e9a8d42c4baestevel * ****** NOTICE **** the ON gate, and the ssc driver gate. Any changes
03831d35f7499c87d51205817c93e9a8d42c4baestevel * ****** NOTICE **** to it must also be made to in all gates.
03831d35f7499c87d51205817c93e9a8d42c4baestevel#pragma ident "%Z%%M% %I% %E% SMI"
03831d35f7499c87d51205817c93e9a8d42c4baestevelextern "C" {
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Ethernet stuff
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define ETHERHEADER_SIZE (sizeof (struct ether_header))
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Private DLPI full dlsap address format - stolen from eri.h
03831d35f7499c87d51205817c93e9a8d42c4baestevel ((uint8_t *)(&((ehdr_t *)ptr)->ether_type))[1] = (value & 0xff); }
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define ether_bcopy(a, b) (bcopy((caddr_t)a, (caddr_t)b, 6))
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_MAX_DESTS 38 /* (MAN_NUM_EXPANDERS * 2) + 2 */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_DEST_ARRAY_SIZE (MAN_MAX_DESTS * sizeof (man_dest_t))
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Caller IDs for man_sendit processing decision on canput failure.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * MAN device information structure, one per man instance
03831d35f7499c87d51205817c93e9a8d42c4baestevel * global list pointed to by MAN_XX_head
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct man_s *man_next; /* next in list of devices */
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct man_pg_s *man_pg; /* Pathgroups for this inst */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Failover timers, used by man_dest_t.
03831d35f7499c87d51205817c93e9a8d42c4baestevel int32_t man_linkcheck_time; /* linkcheck time in usecs */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int32_t man_linkstale_time; /* linkstale time in usecs */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int32_t man_linkstale_retries; /* linkstale retries/probes */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int32_t man_dr_retries; /* DR retries on EAGAIN errs */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int32_t man_kstat_waittime; /* kstat_wait time in usecs */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int32_t man_dlpireset_time; /* dlpireset time in usecs */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * MAN link state definitions
03831d35f7499c87d51205817c93e9a8d42c4baestevel * MAN timer types and times.
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_LINKCHECK_TIME 30000000 /* 30 secs in usecs */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_LINKSTALE_TIME 1000000 /* 1 secs in usecs */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_KSTAT_WAITTIME 300000 /* 0.3 secs in usecs */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_DLPIRESET_TIME 5000000 /* 5 secs in usecs */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * MAN DR variables
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_DR_RETRIES 150 /* DR retries on EAGAIN errs */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Device info - this must stay 64 bit aligned.
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint32_t mdev_exp_id; /* Containing expander in domain */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * mdev_state definitions
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MDEV_UNASSIGNED 0x0 /* Path assigned to a destination */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MDEV_ASSIGNED 0x1 /* Path assigned to a destination */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MDEV_ACTIVE 0x2 /* Path actively in use for dest */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MDEV_FAILED 0x4 /* Failure detected in past. */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * MAN lower multiplexor data structure
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct manstr_s *md_msp; /* containing upper STREAM structure */
03831d35f7499c87d51205817c93e9a8d42c4baestevel queue_t *md_wq; /* lower write queue for active path */
03831d35f7499c87d51205817c93e9a8d42c4baestevel eaddr_t md_dst_eaddr; /* Destinations ether address */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int md_dlpistate; /* DLPI State of netdev below us */
03831d35f7499c87d51205817c93e9a8d42c4baestevel size_t md_dmp_count; /* bytes in deferred mblk list */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Failover variables, only valid for active path.
03831d35f7499c87d51205817c93e9a8d42c4baestevel ulong_t md_lastrcvcnt; /* snapshot of packet count */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int32_t md_linkstale_retries; /* # of probes to send */
03831d35f7499c87d51205817c93e9a8d42c4baestevel ulong_t md_icmpv4probes; /* # of ICMPv4 probes sent */
03831d35f7499c87d51205817c93e9a8d42c4baestevel ulong_t md_icmpv6probes; /* # of ICMPv6 probes sent */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * md_state values
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_DSTATE_NOTPRESENT 0x0 /* Destination doesnt exist */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_DSTATE_INITIALIZING 0x1 /* Initialize lower stream for dest */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_DSTATE_READY 0x2 /* Destination lower stream exists */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_DSTATE_PLUMBING 0x4 /* lower stream being switched */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_DSTATE_CLOSING 0x8 /* lower stream closing */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_DSTATE_BUSY (MAN_DSTATE_PLUMBING|MAN_DSTATE_CLOSING)
03831d35f7499c87d51205817c93e9a8d42c4baestevel * md_link_updwon_msg states.
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_LINK_UP_MSG 0x0 /* Last msg emitted was "Link up" */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_LINK_DOWN_MSG 0x1 /* Last msg emitted was "Link down" */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Upper per-stream instance state information.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Each instance is dynamically allocated at open() and free'd at close().
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Each per-stream instance points to at most one per-device structure
03831d35f7499c87d51205817c93e9a8d42c4baestevel * using the ms_manp field. All instances are threaded together into one
03831d35f7499c87d51205817c93e9a8d42c4baestevel * list of active instances ordered on sequence of opens.
03831d35f7499c87d51205817c93e9a8d42c4baestevel struct manstr_s *ms_next; /* next in list of streams */
03831d35f7499c87d51205817c93e9a8d42c4baestevel man_dest_t *ms_destp; /* Optimization if only one ms_dests */
03831d35f7499c87d51205817c93e9a8d42c4baestevel int ms_dlpistate; /* DLPI State of this MAN instance */
03831d35f7499c87d51205817c93e9a8d42c4baestevel mblk_t *ms_dl_mp; /* list of DLPI ATTACH/BIND rqsts */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * ms_flags values.
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_SFLAG_ALLMULTI 0x8 /* enable all multicast addresses */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_SFLAG_ALLSAP 0x10 /* enable all ether type values */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_SFLAG_CKSUM 0x20 /* enable hardware tcp checksumming */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_SFLAG_MULTI 0x40 /* enable multicast addresses */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_SFLAG_SERLPBK 0x80 /* enable SERDES looopback (DIAG) */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_SFLAG_MACLPBK 0x100 /* enable MAC int loopback (DIAG) */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_SFLAG_PROMISC (MAN_SFLAG_ALLPHYS|MAN_SFLAG_ALLMULTI| \
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_SFLAG_CLOSING 0x200 /* Stream in process of closing */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_SFLAG_CLOSE_DONE 0x400 /* Stream in process of closing */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_SFLAG_CONTROL 0x800 /* Stream is control stream */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Paths in pathgroup lists.
03831d35f7499c87d51205817c93e9a8d42c4baestevel kstat_named_t *mp_last_knp; /* last named kstats from mp_phys_ksp */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Pathgroup list, one per destination ID. Each pathgroup connects
03831d35f7499c87d51205817c93e9a8d42c4baestevel * to one destination. Hence we put that destination ethernet address
03831d35f7499c87d51205817c93e9a8d42c4baestevel * here. It is read from here and stored in man_dest_t.md_dst_eaddr
03831d35f7499c87d51205817c93e9a8d42c4baestevel * each time a new path is switched to.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * mpg_pg_flags fields.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * MAN IOCTL Definitions.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Pathgroup assignment data structure - this must stay 64 bit aligned.
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint32_t mip_man_ppa; /* Man instance to apply cmd to */
03831d35f7499c87d51205817c93e9a8d42c4baestevel uint32_t mip_pg_id; /* pathgroup ID this path is for */
03831d35f7499c87d51205817c93e9a8d42c4baestevel man_dev_t mip_devs[MAN_MAX_DESTS]; /* Array of devices */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MI_PATH_READ 0x0 /* Fill in devs for destID */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MI_PATH_ASSIGN 0x1 /* Assign devs for destID */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MI_PATH_ACTIVATE 0x2 /* Mark a dev as active for destID */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MI_PATH_DEACTIVATE 0x3 /* Deactivate active dev for destID */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MI_PATH_UNASSIGN 0x4 /* Unassign assigned dev for destID */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MI_PATH_ADD 0x5 /* Just Add devs for destID */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Linkcheck time assignment data structure - this must stay 64 bit aligned.
03831d35f7499c87d51205817c93e9a8d42c4baestevel int32_t mtp_man_ppa; /* Man instance to apply cmd to */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * SC IP address assignment data structure. See man_pinger().
03831d35f7499c87d51205817c93e9a8d42c4baestevel * SC IPv6 address assignment data structure. See man_pinger().
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Array of dests to apply operation to.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * work structure for MAN background thread.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Values for mw_flags
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Values for mw_type.
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_WORK_OPEN_CTL 0x0 /* Open the control stream */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_WORK_CLOSE_CTL 0x1 /* Open the control stream */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_WORK_SWITCH 0x2 /* Dest requests switch to new path */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_WORK_PATH_UPDATE 0x3 /* pathgrp info changed, update dests */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_WORK_CLOSE_STREAM 0x5 /* man_close()-ing upper stream */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_WORK_DRATTACH 0x6 /* DR attached new IO board */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_WORK_DRDETACH 0x7 /* DR detached an IO board */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_WORK_DRSWITCH 0x9 /* Switch path prior to DRDETACH */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_WORK_KSTAT_UPDATE 0xA /* Take kstat snapshot */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * State definitions for man_config_state
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_UNCONFIGURED 0x0 /* Attached but never opened */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * IOSRAM definitions
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define IOSRAM_KEY_MANC (('M'<<24)|('A'<<16)|('N'<<8)|'C')
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define IOSRAM_KEY_SCMD (('S'<<24)|('C'<<16)|('M'<<8)|'D')
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define IOSRAM_KEY_MDSC (('M'<<24)|('D'<<16)|('S'<<8)|'C')
03831d35f7499c87d51205817c93e9a8d42c4baestevel in_addr_t manc_dom_ip_netmask; /* Domains IP netmask */
03831d35f7499c87d51205817c93e9a8d42c4baestevel in6_addr_t manc_dom_ipv6addr; /* Domain's IPv6 address */
03831d35f7499c87d51205817c93e9a8d42c4baestevel in6_addr_t manc_dom_ipv6_netmask; /* Domain's IPv6 netmask */
03831d35f7499c87d51205817c93e9a8d42c4baestevel eaddr_t manc_dom_eaddr; /* 48 bit ethernet address */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * PCI stuff.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Misc defines
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* ------------------------------------------------------------------------- */
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Patchable debug flag.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Set this to nonzero to enable error messages.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The following parameters may be configured by the user. If they are not
03831d35f7499c87d51205817c93e9a8d42c4baestevel * configured by the user, the values will be based on the capabilities of
03831d35f7499c87d51205817c93e9a8d42c4baestevel * the transceiver.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The value "MAN_NOTUSR" is ORed with the parameter value to indicate values
03831d35f7499c87d51205817c93e9a8d42c4baestevel * which are NOT configured by the user.
03831d35f7499c87d51205817c93e9a8d42c4baestevel/* command */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#if defined(DEBUG)
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_DBG(flag, msg) { if (man_debug&flag) (void) printf msg; }
03831d35f7499c87d51205817c93e9a8d42c4baestevel#define MAN_DBGCALL(flag, func) { if (man_debug&flag) (void) func; }
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif /* DEBUG */
03831d35f7499c87d51205817c93e9a8d42c4baestevel#endif /* _DMAN_H */