1*e4f5a11dSJames Kremer /* 2*e4f5a11dSJames Kremer * CDDL HEADER START 3*e4f5a11dSJames Kremer * 4*e4f5a11dSJames Kremer * The contents of this file are subject to the terms of the 5*e4f5a11dSJames Kremer * Common Development and Distribution License (the "License"). 6*e4f5a11dSJames Kremer * You may not use this file except in compliance with the License. 7*e4f5a11dSJames Kremer * 8*e4f5a11dSJames Kremer * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*e4f5a11dSJames Kremer * or http://www.opensolaris.org/os/licensing. 10*e4f5a11dSJames Kremer * See the License for the specific language governing permissions 11*e4f5a11dSJames Kremer * and limitations under the License. 12*e4f5a11dSJames Kremer * 13*e4f5a11dSJames Kremer * When distributing Covered Code, include this CDDL HEADER in each 14*e4f5a11dSJames Kremer * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*e4f5a11dSJames Kremer * If applicable, add the following below this CDDL HEADER, with the 16*e4f5a11dSJames Kremer * fields enclosed by brackets "[]" replaced with your own identifying 17*e4f5a11dSJames Kremer * information: Portions Copyright [yyyy] [name of copyright owner] 18*e4f5a11dSJames Kremer * 19*e4f5a11dSJames Kremer * CDDL HEADER END 20*e4f5a11dSJames Kremer */ 21*e4f5a11dSJames Kremer /* 22*e4f5a11dSJames Kremer * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 23*e4f5a11dSJames Kremer */ 24*e4f5a11dSJames Kremer 25*e4f5a11dSJames Kremer 26*e4f5a11dSJames Kremer 27*e4f5a11dSJames Kremer #ifndef _LIBSESLOG_H 28*e4f5a11dSJames Kremer #define _LIBSESLOG_H 29*e4f5a11dSJames Kremer 30*e4f5a11dSJames Kremer #include <libnvpair.h> 31*e4f5a11dSJames Kremer #include <sys/types.h> 32*e4f5a11dSJames Kremer #include <sys/scsi/impl/uscsi.h> 33*e4f5a11dSJames Kremer 34*e4f5a11dSJames Kremer #ifdef __cplusplus 35*e4f5a11dSJames Kremer extern "C" { 36*e4f5a11dSJames Kremer #endif 37*e4f5a11dSJames Kremer 38*e4f5a11dSJames Kremer /* 39*e4f5a11dSJames Kremer * Error definitions 40*e4f5a11dSJames Kremer */ 41*e4f5a11dSJames Kremer 42*e4f5a11dSJames Kremer enum { 435cf8276bSTodd McKenney SES_LOG_FAILED_TO_OPEN_DEVICE = 1, /* Couldn't open dev path */ 44*e4f5a11dSJames Kremer SES_LOG_FAILED_TO_READ_DEVICE, /* Couldn't read the log data */ 45*e4f5a11dSJames Kremer SES_LOG_FAILED_NULL_TARGET_PATH, /* Null target path */ 46*e4f5a11dSJames Kremer SES_LOG_FAILED_BAD_TARGET_PATH, /* Couldn't find valid target path */ 47*e4f5a11dSJames Kremer SES_LOG_FAILED_MODE_SENSE, /* Mode sense error returned */ 48*e4f5a11dSJames Kremer SES_LOG_FAILED_MODE_SENSE_OFFSET, /* Offset not correct */ 49*e4f5a11dSJames Kremer SES_LOG_FAILED_BAD_DATA_LEN, /* Data length not correct */ 50*e4f5a11dSJames Kremer SES_LOG_FAILED_BAD_CONTENT_LEN, /* Content length not correct */ 515cf8276bSTodd McKenney SES_LOG_FAILED_FORMAT_PAGE_ERR, /* Device doesn't support page */ 52*e4f5a11dSJames Kremer SES_LOG_FAILED_NV_UNIQUE, /* Couldn't add unique to nvlist */ 53*e4f5a11dSJames Kremer SES_LOG_FAILED_NV_LOG, /* Couldn't add log to nvlist */ 54*e4f5a11dSJames Kremer SES_LOG_FAILED_NV_CODE, /* Couldn't add code to nvlist */ 55*e4f5a11dSJames Kremer SES_LOG_FAILED_NV_SEV, /* Couldn't add sev to nvlist */ 56*e4f5a11dSJames Kremer SES_LOG_FAILED_NV_ENTRY, /* Couldn't add entry to nvlist */ 57*e4f5a11dSJames Kremer SES_LOG_FAILED_MODE_SELECT, /* Mode select failed */ 58*e4f5a11dSJames Kremer SES_LOG_FAILED_NVLIST_CREATE /* Couldn't create a nvlist */ 59*e4f5a11dSJames Kremer }; 60*e4f5a11dSJames Kremer 61*e4f5a11dSJames Kremer /* 62*e4f5a11dSJames Kremer * define different levels of log entries that could be returned 63*e4f5a11dSJames Kremer */ 64*e4f5a11dSJames Kremer #define SES_LOG_LEVEL_NOTICE 0 65*e4f5a11dSJames Kremer #define SES_LOG_LEVEL_DEBUG 1 66*e4f5a11dSJames Kremer #define SES_LOG_LEVEL_WARNING 2 675cf8276bSTodd McKenney #define SES_LOG_LEVEL_NO_MASK 3 685cf8276bSTodd McKenney #define SES_LOG_LEVEL_ERROR 4 695cf8276bSTodd McKenney #define SES_LOG_LEVEL_FATAL 5 70*e4f5a11dSJames Kremer 71*e4f5a11dSJames Kremer /* Valid size of log entry being returned by expander */ 72*e4f5a11dSJames Kremer #define SES_LOG_VALID_LOG_SIZE 71 735cf8276bSTodd McKenney 745cf8276bSTodd McKenney /* The string log is made from 8 char entries */ 755cf8276bSTodd McKenney #define SES_LOG_SPECIFIC_ENTRY_SIZE 8 765cf8276bSTodd McKenney 77*e4f5a11dSJames Kremer /* Index of where sequence number starts in returned string */ 78*e4f5a11dSJames Kremer #define SES_LOG_SEQ_NUM_START 27 795cf8276bSTodd McKenney /* Index of where log code starts */ 805cf8276bSTodd McKenney #define SES_LOG_CODE_START 36 81*e4f5a11dSJames Kremer /* Index of where log level starts in returned string */ 82*e4f5a11dSJames Kremer #define SES_LOG_LEVEL_START 40 83*e4f5a11dSJames Kremer 845cf8276bSTodd McKenney /* Maximum size the each sub log entry can be */ 855cf8276bSTodd McKenney #define ENTRY_MAX_SIZE 10 865cf8276bSTodd McKenney /* Maximum save buffer log entry size */ 875cf8276bSTodd McKenney #define MAX_LOG_ENTRY_SZ 256 88*e4f5a11dSJames Kremer 895cf8276bSTodd McKenney #define MAX_ALLOC_LEN (0xfffc) 90*e4f5a11dSJames Kremer /* 91*e4f5a11dSJames Kremer * Sense return buffer length 92*e4f5a11dSJames Kremer * Arbitrary, could be larger 93*e4f5a11dSJames Kremer */ 94*e4f5a11dSJames Kremer #define SENSE_BUFF_LEN 32 95*e4f5a11dSJames Kremer /* 965cf8276bSTodd McKenney * 60 seconds for SCSI timeout 97*e4f5a11dSJames Kremer */ 98*e4f5a11dSJames Kremer #define DEF_PT_TIMEOUT 60 99*e4f5a11dSJames Kremer 100*e4f5a11dSJames Kremer 101*e4f5a11dSJames Kremer /* 102*e4f5a11dSJames Kremer * Defines for different SCSI cmd paramters 103*e4f5a11dSJames Kremer */ 104*e4f5a11dSJames Kremer #define MODE_SELECT10_CMDLEN 10 105*e4f5a11dSJames Kremer #define MODE10_RESP_HDR_LEN 8 106*e4f5a11dSJames Kremer #define MODE_SENSE10_CMDLEN 10 107*e4f5a11dSJames Kremer 108*e4f5a11dSJames Kremer 109*e4f5a11dSJames Kremer /* 110*e4f5a11dSJames Kremer * Defines for nvlist entries 111*e4f5a11dSJames Kremer */ 112*e4f5a11dSJames Kremer #define ENTRY_PREFIX "entry" 113*e4f5a11dSJames Kremer #define ENTRY_SEVERITY "severity" 114*e4f5a11dSJames Kremer #define ENTRY_CODE "code" 115*e4f5a11dSJames Kremer #define ENTRY_LOG "log" 116*e4f5a11dSJames Kremer 117*e4f5a11dSJames Kremer 118*e4f5a11dSJames Kremer 119*e4f5a11dSJames Kremer /* 120*e4f5a11dSJames Kremer * Genesis specific log clear control struct 121*e4f5a11dSJames Kremer */ 122*e4f5a11dSJames Kremer struct log_clear_control_struct { 123*e4f5a11dSJames Kremer unsigned char pageControls; 124*e4f5a11dSJames Kremer uint8_t subpage_code; 125*e4f5a11dSJames Kremer uint8_t page_lengthUpper; 126*e4f5a11dSJames Kremer uint8_t page_lengthLower; 127*e4f5a11dSJames Kremer uint8_t host_id[16]; 128*e4f5a11dSJames Kremer uint8_t seq_clear[4]; 129*e4f5a11dSJames Kremer uint8_t timeout[2]; 130*e4f5a11dSJames Kremer }; 131*e4f5a11dSJames Kremer 132*e4f5a11dSJames Kremer 133*e4f5a11dSJames Kremer 134*e4f5a11dSJames Kremer /* 135*e4f5a11dSJames Kremer * Struct to contain information needed to read logs 136*e4f5a11dSJames Kremer */ 1375cf8276bSTodd McKenney typedef struct ses_log_call_struct { 138*e4f5a11dSJames Kremer char target_path[MAXPATHLEN]; /* Path to device, passed in */ 139*e4f5a11dSJames Kremer char product_id[MAXNAMELEN]; /* product id of expander, passed in */ 140*e4f5a11dSJames Kremer hrtime_t poll_time; /* nanosecond poll time, passed in */ 141*e4f5a11dSJames Kremer char last_log_entry[MAXNAMELEN]; /* Last entry read, passed in/out */ 142*e4f5a11dSJames Kremer int number_log_entries; /* num of log entries read, passed back */ 143*e4f5a11dSJames Kremer int size_of_log_entries; /* Total size of all logs read passed back */ 144*e4f5a11dSJames Kremer nvlist_t *log_data; /* Log data being returned, passed back */ 1455cf8276bSTodd McKenney } ses_log_call_t; 146*e4f5a11dSJames Kremer 147*e4f5a11dSJames Kremer /* 148*e4f5a11dSJames Kremer * Basic library functions 149*e4f5a11dSJames Kremer */ 150*e4f5a11dSJames Kremer extern int access_ses_log(struct ses_log_call_struct *); 151*e4f5a11dSJames Kremer 152*e4f5a11dSJames Kremer 153*e4f5a11dSJames Kremer #ifdef __cplusplus 154*e4f5a11dSJames Kremer } 155*e4f5a11dSJames Kremer #endif 156*e4f5a11dSJames Kremer 157*e4f5a11dSJames Kremer #endif /* _LIBSESLOG_H */ 158