usr/src/cmd/format/menu_cache.c
author sjelinek
Thu, 27 Oct 2005 09:01:18 -0700
changeset 767 0aa24dfb5d87
parent 0 68f95e015346
permissions -rw-r--r--
PSARC 2004/776 device checking for fs utilities PSARC 2005/461 Device in use checking environment variables 5084421 libdiskmgt needs to detect in use ZFS data 5085739 remove workaround for bug 4725434 6194015 Device in use checking for Solaris utilities-PSARC/2004/776 6261853 libdiskmgt does not work correctly in all cases on amd64 6268374 libdiskmgt allocates incorrect size for readdir_r() dirent argument 6291309 PSARC/2005/461 - libdiskmgt should enable bypassing of inuse checking 6301815 PSARC/2005/461-Need Sun private libdiskmgt flag for use during install to disable sysevent starting
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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
/*
767
0aa24dfb5d87 PSARC 2004/776 device checking for fs utilities
sjelinek
parents: 0
diff changeset
    24
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
0aa24dfb5d87 PSARC 2004/776 device checking for fs utilities
sjelinek
parents: 0
diff changeset
    25
 * Use is subject to license terms.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
 * This file contains functions that implement the cache menu commands.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
#include "global.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#include <sys/time.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#include <sys/resource.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
#include <sys/wait.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
#include <signal.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
#include <string.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
#include <sys/fcntl.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
#include <sys/stat.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
#include <sys/dklabel.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
#include "main.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
#include "analyze.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
#include "menu.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
#include "menu_cache.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
#include "param.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
#include "misc.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
#include "label.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
#include "startup.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
#include "partition.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
#include "prompts.h"
767
0aa24dfb5d87 PSARC 2004/776 device checking for fs utilities
sjelinek
parents: 0
diff changeset
    54
#include "checkdev.h"
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
#include "io.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
#include "ctlr_scsi.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
#include "auto_sense.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
#include "hardware_structs.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
extern	struct menu_item menu_cache[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
extern	struct menu_item menu_write_cache[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
extern	struct menu_item menu_read_cache[];
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
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
c_cache()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
	cur_menu++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
	last_menu = cur_menu;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
	run_menu(menu_cache, "CACHE", "cache", 0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
	cur_menu--;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
	return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
ca_write_cache()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
	cur_menu++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
	last_menu = cur_menu;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
	run_menu(menu_write_cache, "WRITE_CACHE", "write_cache", 0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
	cur_menu--;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
	return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
ca_read_cache()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
	cur_menu++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
	last_menu = cur_menu;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
	run_menu(menu_read_cache, "READ_CACHE", "read_cache", 0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
	cur_menu--;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
	return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
ca_write_display()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
	struct mode_cache		*page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
	struct scsi_ms_header		header;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
	int				status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
	union {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
		struct mode_cache	page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
		char			rawbuf[MAX_MODE_SENSE_SIZE];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
	} u_page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
	page8 = &u_page8.page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
	status = uscsi_mode_sense(cur_file, DAD_MODE_CACHE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
			MODE_SENSE_PC_CURRENT, (caddr_t)page8,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
			MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
	if (status == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
		if (page8->wce) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
			fmt_print("Write Cache is enabled\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
			fmt_print("Write Cache is disabled\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
		err_print("Mode sense failed.\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
	return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
ca_write_enable()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
	struct mode_cache		*page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
	struct scsi_ms_header		header;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
	int				status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
	int				length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
	int				sp_flags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
	union {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
		struct mode_cache	page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
		char			rawbuf[MAX_MODE_SENSE_SIZE];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
	} u_page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
	page8 = &u_page8.page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
	status = uscsi_mode_sense(cur_file, DAD_MODE_CACHE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
			MODE_SENSE_PC_CHANGEABLE, (caddr_t)page8,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
			MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
	if (status == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
		if (page8->wce) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
			status = uscsi_mode_sense(cur_file, DAD_MODE_CACHE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
				MODE_SENSE_PC_SAVED, (caddr_t)page8,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
				MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
			if (status != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
				status = uscsi_mode_sense(cur_file,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
				DAD_MODE_CACHE, MODE_SENSE_PC_CURRENT,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
				(caddr_t)page8, MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
			if (status == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
				length = MODESENSE_PAGE_LEN(page8);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
				sp_flags = MODE_SELECT_PF;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
				if (page8->mode_page.ps) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
					sp_flags |= MODE_SELECT_SP;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
				} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
					err_print("\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
This setting is valid until next reset only. It is not saved permanently.\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
				page8->mode_page.ps = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
				page8->wce = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
				header.mode_header.length = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
				header.mode_header.device_specific = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
				status = uscsi_mode_select(cur_file,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
					DAD_MODE_CACHE, sp_flags,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
					(caddr_t)page8, length, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
				if (status != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
					err_print("Mode select failed\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
					return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
			err_print("Write cache setting is not changeable\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
	if (status != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
		err_print("Mode sense failed.\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
	return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
ca_write_disable()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
	struct mode_cache		*page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
	struct scsi_ms_header		header;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
	int				status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
	int				length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
	int				sp_flags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
	union {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
		struct mode_cache	page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
		char			rawbuf[MAX_MODE_SENSE_SIZE];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
	} u_page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
	page8 = &u_page8.page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
	status = uscsi_mode_sense(cur_file, DAD_MODE_CACHE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
			MODE_SENSE_PC_CHANGEABLE, (caddr_t)page8,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
			MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
	if (status == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
		if (page8->wce) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
			status = uscsi_mode_sense(cur_file, DAD_MODE_CACHE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
				MODE_SENSE_PC_SAVED, (caddr_t)page8,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
				MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
			if (status != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
				status = uscsi_mode_sense(cur_file,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
				DAD_MODE_CACHE, MODE_SENSE_PC_CURRENT,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
				(caddr_t)page8, MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
			if (status == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
				length = MODESENSE_PAGE_LEN(page8);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
				sp_flags = MODE_SELECT_PF;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
				if (page8->mode_page.ps) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
					sp_flags |= MODE_SELECT_SP;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
				} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
					err_print("\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
This setting is valid until next reset only. It is not saved permanently.\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
				page8->mode_page.ps = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
				page8->wce = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
				header.mode_header.length = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
				header.mode_header.device_specific = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
				status = uscsi_mode_select(cur_file,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
					DAD_MODE_CACHE, sp_flags,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
					(caddr_t)page8, length, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
				if (status != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
					err_print("Mode select failed\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
					return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
			err_print("Write cache setting is not changeable\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
	if (status != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
		err_print("Mode sense failed.\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
	return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
ca_read_display()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
	struct mode_cache		*page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
	struct scsi_ms_header		header;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
	int				status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
	union {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
		struct mode_cache	page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
		char			rawbuf[MAX_MODE_SENSE_SIZE];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
	} u_page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
	page8 = &u_page8.page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
	status = uscsi_mode_sense(cur_file, DAD_MODE_CACHE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
			MODE_SENSE_PC_CURRENT, (caddr_t)page8,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
			MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
	if (status == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
		if (page8->rcd) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
			fmt_print("Read Cache is disabled\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
			fmt_print("Read Cache is enabled\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
		err_print("Mode sense failed.\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
	return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
ca_read_enable()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
	struct mode_cache		*page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
	struct scsi_ms_header		header;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
	int				status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
	int				length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
	int				sp_flags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
	union {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
		struct mode_cache	page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
		char			rawbuf[MAX_MODE_SENSE_SIZE];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
	} u_page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
	page8 = &u_page8.page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
	status = uscsi_mode_sense(cur_file, DAD_MODE_CACHE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
			MODE_SENSE_PC_CHANGEABLE, (caddr_t)page8,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
			MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
	if (status == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
		if (page8->rcd) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
			status = uscsi_mode_sense(cur_file, DAD_MODE_CACHE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
				MODE_SENSE_PC_SAVED, (caddr_t)page8,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
				MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
			if (status != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
				status = uscsi_mode_sense(cur_file,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
				DAD_MODE_CACHE, MODE_SENSE_PC_CURRENT,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
				(caddr_t)page8, MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
			if (status == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
				length = MODESENSE_PAGE_LEN(page8);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
				sp_flags = MODE_SELECT_PF;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
				if (page8->mode_page.ps) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
					sp_flags |= MODE_SELECT_SP;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
				} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
					err_print("\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
This setting is valid until next reset only. It is not saved permanently.\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
				page8->mode_page.ps = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
				page8->rcd = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
				header.mode_header.length = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
				header.mode_header.device_specific = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
				status = uscsi_mode_select(cur_file,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
					DAD_MODE_CACHE, sp_flags,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
					(caddr_t)page8, length, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
				if (status != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
					err_print("Mode select failed\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
					return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
			err_print("Read cache setting is not changeable\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
	if (status != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
		err_print("Mode sense failed.\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
	return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
ca_read_disable()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
	struct mode_cache		*page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
	struct scsi_ms_header		header;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
	int				status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
	int				length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
	int				sp_flags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
	union {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
		struct mode_cache	page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
		char			rawbuf[MAX_MODE_SENSE_SIZE];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
	} u_page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
	page8 = &u_page8.page8;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
	status = uscsi_mode_sense(cur_file, DAD_MODE_CACHE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
		MODE_SENSE_PC_CHANGEABLE, (caddr_t)page8,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
		MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
	if (status == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
		if (page8->rcd) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
			status = uscsi_mode_sense(cur_file, DAD_MODE_CACHE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
				MODE_SENSE_PC_SAVED, (caddr_t)page8,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
				MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
			if (status != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
				status = uscsi_mode_sense(cur_file,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
				DAD_MODE_CACHE, MODE_SENSE_PC_CURRENT,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
				(caddr_t)page8, MAX_MODE_SENSE_SIZE, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
			if (status == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
				length = MODESENSE_PAGE_LEN(page8);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
				sp_flags = MODE_SELECT_PF;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
				if (page8->mode_page.ps) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
					sp_flags |= MODE_SELECT_SP;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
				} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
					err_print("\
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
This setting is valid until next reset only. It is not saved permanently.\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
				page8->mode_page.ps = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
				page8->rcd = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
				header.mode_header.length = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
				header.mode_header.device_specific = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
				status = uscsi_mode_select(cur_file,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
					DAD_MODE_CACHE, sp_flags,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
					(caddr_t)page8, length, &header);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
				if (status != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
					err_print("Mode select failed\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
					return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   388
			err_print("Read cache setting is not changeable\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   389
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   390
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   391
	if (status != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   392
		err_print("Mode sense failed.\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   393
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   394
	return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   395
}