fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * CDDL HEADER START
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * The contents of this file are subject to the terms of the
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Common Development and Distribution License (the "License").
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * You may not use this file except in compliance with the License.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * or http://www.opensolaris.org/os/licensing.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * See the License for the specific language governing permissions
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * and limitations under the License.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * When distributing Covered Code, include this CDDL HEADER in each
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * If applicable, add the following below this CDDL HEADER, with the
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * fields enclosed by brackets "[]" replaced with your own identifying
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * information: Portions Copyright [yyyy] [name of copyright owner]
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * CDDL HEADER END
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Use is subject to license terms.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#ifndef _G_STATE_H
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define _G_STATE_H
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#ifdef __cplusplus
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern "C" {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#endif
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Include any headers you depend on.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * I18N message number ranges
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * This file: 19000 - 19499
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Shared common messages: 1 - 1999
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#include <libdevice.h>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#include <sys/fibre-channel/fcio.h>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#include <sys/sunmdi.h>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * sys/fc4/fcio.h includes sys/fc4/fcal_linkapp.h. The following #define
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * keeps from actually including the contents of sys/fc4/fcal_linkapp.h
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * since that file contains the same structure definitions as sys/fc4/fcio.h.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define _SYS_FC4_FCAL_LINKAPP_H
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#include <sys/fc4/fcio.h>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#include <sys/devctl.h>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#include <g_scsi.h>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#include <sys/scsi/generic/commands.h>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#include <libnvpair.h>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#include <libdevinfo.h>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define MAXPATHSTATE 5
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#include <gfc.h>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* hotplug defines */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define SENA 1
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define NON_SENA 0
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* format parameters to dump() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define HEX_ONLY 0 /* Print Hex only */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define HEX_ASCII 1 /* Print Hex and Ascii */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* Persistent Reservation */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define ACTION_READ_KEYS 0x00
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define ACTION_READ_RESERV 0x01
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define ACTION_REGISTER 0x00
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define ACTION_RESERVE 0x01
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define ACTION_RELEASE 0x02
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define ACTION_CLEAR 0x03
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define ACTION_PREEMPT 0x04
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define ACTION_PREEMPT_CLR 0x05
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* Some constants for fabric/public loops */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define AREA_DOMAIN_ID 0x00FFFF00
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* Max number of retries */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define RETRY_FCIO_IOCTL 360
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define RETRY_FCP_IOCTL 360
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define RETRY_OBJECT_OPEN 5
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define RETRY_PATHLIST 1
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* Wait times in microseconds */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define WAIT_FCIO_IOCTL 250000 /* 1/4 of a second */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define WAIT_FCP_IOCTL 250000 /* 1/4 of a second */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define WAIT_OBJECT_OPEN 10000 /* 1/100 of a sec. */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* Defines for VS inq_port field on standard page (bit 5 Byte 6 */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define PATH_PRIMARY 0x0
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define PATH_FAILOVER 0x1
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Macro for deallocating memory pointed by dev_addr pointer
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * of gfc_map_t structure.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * It is defined here to make available at any place from
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * luxadm, liba5k and libg_fc.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Note: The macro will try to free any non-NULL dev_addr.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * So, dev_addr ptr needs to be initialized to NULL.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * map.dev_addr = (gfc_port_dev_info_t *)NULL
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * map->dev_addr = (gfc_port_dev_info_t *)NULL.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define FREE_DEV_ADDR(D_PTR) if (D_PTR != NULL) {\
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte free((void *)D_PTR);\
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte D_PTR = (gfc_port_dev_info_t *)NULL;\
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* Constants and macros used by the g_get_path_type() function */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define SLASH "/"
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define DEV_PREFIX "/devices/" /* base pathname for devfs names */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define DEV_PREFIX_LEN 9 /* Length of DEV_PREFIX string */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Can do a strlen and generalize */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* but this is is easier */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define DEVICES_DIR "/devices"
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* Defines for minor names used to append to devfs paths */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define SSD_MINOR_NAME ":c,raw"
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define ST_MINOR_NAME ":n"
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* Defines for ssd driver name passed to root tree search routines */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define SSD_DRVR_NAME "ssd"
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define ST_DRVR_NAME "st"
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Property names
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define PORT_WWN_PROP "port-wwn"
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define NODE_WWN_PROP "node-wwn"
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define LUN_GUID_PROP "client-guid"
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#define LUN_PROP "lun"
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Fortetypedef struct read_keys_struct {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte int rk_generation;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte int rk_length;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte int rk_key[256];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} Read_keys;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Fortetypedef struct read_reserv_struct {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte int rr_generation;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte int rr_length;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} Read_reserv;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * mplist structure typedef to support multipath
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Fortetypedef struct mplist_struct {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte char *devpath;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte struct mplist_struct *next;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} Mplist;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* wwn_list_found to track previous calls to g_get_wwn */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Fortetypedef struct wwn_list_found_struct {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uchar_t node_wwn[WWN_SIZE];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uchar_t port_wwn[WWN_SIZE];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte struct wwn_list_found_struct *wwn_next;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} WWN_list_found;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* Function prototyes defined for libg_fc modules */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* genf.c */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void *g_zalloc(int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern char *g_alloc_string(char *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void g_destroy_data(void *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void g_dump(char *, uchar_t *, int, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_object_open(char *, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern char *g_scsi_find_command_name(int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void g_scsi_printerr(struct uscsi_cmd *,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte struct scsi_extended_sense *, int, char msg_string[], char *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_get_machineArch(int *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern boolean_t g_enclDiskChk(char *, char *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* hot.c */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void g_ll_to_str(uchar_t *, char *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void g_free_hotplug_dlist(struct hotplug_disk_list **);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* map.c */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_string_to_wwn(uchar_t *, uchar_t *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_get_perf_statistics(char *, uchar_t *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_get_port_multipath(char *, struct dlist **, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_device_in_map(gfc_map_t *, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_start(char *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_stop(char *, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_reserve(char *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_release(char *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_issue_fcio_ioctl(int, fcio_t *, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void g_sort_wwn_list(struct wwn_list_struct **);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void g_free_wwn_list_found(struct wwn_list_found_struct **);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* cmd.c */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int cmd(int, struct uscsi_cmd *, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* io.c */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_persistent_reserve_in_cmd(int, uchar_t *, int, uchar_t);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_send_diag_cmd(int, uchar_t *, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_rec_diag_cmd(int, uchar_t *, int, uchar_t);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_writebuffer_cmd(int, int, uchar_t *, int, int, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_readbuffer_cmd(int, uchar_t *, int, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_inquiry_cmd(int, uchar_t *, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_log_sense_cmd(int, uchar_t *, int, uchar_t);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_mode_select_cmd(int, uchar_t *, int, uchar_t);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_mode_sense_cmd(int, uchar_t *, int, uchar_t, uchar_t);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_read_capacity_cmd(int, uchar_t *, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_read_capacity_1016_cmd(int, struct scsi_capacity_16 *,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_release_cmd(int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_reserve_cmd(int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_start_cmd(int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_stop_cmd(int, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_tur(int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_scsi_reset(int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_devid_get(char *, ddi_devid_t *, di_node_t root,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte const char *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* mpath.c */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_get_lun_str(char *, char *, int);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_get_lun_number(char *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_get_pathcount(char *);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern int g_devices_get_all(struct wwn_list_struct **);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#ifdef __cplusplus
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte}
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#endif
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#endif /* _G_STATE_H */