usr/src/uts/common/sys/sata/impl/sata.h
author pawelw
Thu, 14 Sep 2006 18:42:23 -0700
changeset 2734 1a2f23099c2a
parent 2539 2a06303a9684
child 2960 0a0e45155fbd
permissions -rw-r--r--
6428449 sata disks have read cache disabled after being hot-plugged 6467588 sata module should set main event flag when it wants to retry the procedure for device reset event
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1258
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
     1
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
     2
 * CDDL HEADER START
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
     3
 *
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
     7
 *
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    11
 * and limitations under the License.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    12
 *
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    18
 *
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    19
 * CDDL HEADER END
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    20
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    21
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    22
/*
1529
4fa3374f2b9d 6386938 sata framework should generate sysevent when device is plugged or unplugged
pawelw
parents: 1258
diff changeset
    23
 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
1258
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    24
 * Use is subject to license terms.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    25
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    26
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    27
#ifndef _SATA_H
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    28
#define	_SATA_H
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    29
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    30
#pragma ident	"%Z%%M%	%I%	%E% SMI"
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    31
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    32
#ifdef	__cplusplus
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    33
extern "C" {
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    34
#endif
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    35
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    36
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    37
 * Generic SATA Host Adapter Implementation
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    38
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    39
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    40
#include <sys/types.h>
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    41
#include <sys/scsi/scsi.h>
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    42
#include <sys/scsi/impl/services.h>
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    43
#include <sys/sata/sata_defs.h>
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    44
#include <sys/sata/sata_hba.h>
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    45
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    46
/* Statistics counters */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    47
struct sata_port_stats {
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    48
	uint64_t	link_lost;		/* event counter */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    49
	uint64_t	link_established;	/* event counter */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    50
	uint64_t	device_attached;	/* event counter */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    51
	uint64_t	device_detached;	/* event counter */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    52
	uint64_t	port_reset;		/* event counter */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    53
	uint64_t	port_pwr_changed;	/* event counter */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    54
};
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    55
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    56
typedef struct sata_port_stats sata_port_stats_t;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    57
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    58
struct sata_drive_stats {
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    59
	uint64_t	media_error;		/* available ??? */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    60
	uint64_t	drive_reset;		/* event counter */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    61
} sata_drv_stats_t;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    62
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    63
typedef struct sata_drive_stats sata_drive_stats_t;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    64
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    65
struct sata_ctrl_stats {
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    66
	uint64_t	ctrl_reset;		/* event counter */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    67
	uint64_t	ctrl_pwr_change;	/* event counter */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    68
};
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    69
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    70
typedef struct sata_ctrl_stats sata_ctrl_stats_t;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    71
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    72
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    73
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    74
 * SATA HBA instance info structure
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    75
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    76
struct sata_hba_inst {
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    77
	dev_info_t		*satahba_dip;	/* this HBA instance devinfo */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    78
	struct sata_hba_inst	*satahba_next;	/* ptr to next sata_hba_inst */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    79
	struct sata_hba_inst	*satahba_prev;	/* ptr to prev sata_hba_inst */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    80
	struct scsi_hba_tran	*satahba_scsi_tran; /* scsi_hba_tran */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    81
	struct sata_hba_tran	*satahba_tran;	/* sata_hba_tran */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    82
	kmutex_t		satahba_mutex;	/* sata hba cntrl mutex */
1781
1005b1d56b1c 6397649 hotplugging sata disk may disable write and read cache
pawelw
parents: 1529
diff changeset
    83
	struct taskq		*satahba_taskq;	/* cmd completion task queue */
1258
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    84
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    85
						/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    86
						 * HBA event flags:
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    87
						 * SATA_EVNT_MAIN
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    88
						 * SATA_EVNT_PWR_LEVEL_CHANGED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    89
						 * SATA_EVNT_SKIP
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    90
						 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    91
	uint_t			satahba_event_flags;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    92
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    93
	struct sata_cport_info	*satahba_dev_port[SATA_MAX_CPORTS];
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    94
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    95
						/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    96
						 * DEVCTL open flag:
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    97
						 * SATA_DEVCTL_SOPENED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    98
						 * SATA_DEVCTL_EXOPENED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
    99
						 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   100
	uint_t			satahba_open_flag; /* shared open flag */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   101
	struct sata_ctrl_stats	satahba_stats;	/* HBA cntrl statistics */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   102
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   103
	uint_t			satahba_attached; /* HBA attaching: */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   104
						/* 0 - not completed */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   105
						/* 1 - completed */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   106
};
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   107
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   108
typedef struct sata_hba_inst	sata_hba_inst_t;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   109
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   110
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   111
 * SATA controller's device port info and state.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   112
 * This structure is pointed to by the sata_hba_inst.satahba_dev_port[x]
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   113
 * where x is a device port number.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   114
 * cport_state holds port state flags, defined in sata_hba.h file.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   115
 * cport_event_flags holds SATA_EVNT_* flags defined in this file and in
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   116
 * sata_hba.h file.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   117
 * cport_dev_type holds SATA_DTYPE_* types defined in sata_hba.h file.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   118
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   119
struct sata_cport_info {
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   120
	sata_address_t		cport_addr;	/* this port SATA address */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   121
	kmutex_t		cport_mutex;	/* port mutex */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   122
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   123
						/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   124
						 * Port state flags
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   125
						 * SATA_STATE_UNKNOWN
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   126
						 * SATA_STATE_PROBING
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   127
						 * SATA_STATE_PROBED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   128
						 * SATA_STATE_READY
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   129
						 * SATA_PSTATE_PWRON
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   130
						 * SATA_PSTATE_PWROFF
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   131
						 * SATA_PSTATE_SHUTDOWN
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   132
						 * SATA_PSTATE_FAILED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   133
						 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   134
	uint32_t		cport_state;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   135
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   136
						/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   137
						 * Port event flags:
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   138
						 * SATA_EVNT_DEVICE_ATTACHED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   139
						 * SATA_EVNT_DEVICE_DETACHED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   140
						 * SATA_EVNT_LINK_LOST
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   141
						 * SATA_EVNT_LINK_ESTABLISHED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   142
						 * SATA_EVNT_PORT_FAILED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   143
						 * SATA_EVNT_PWR_LEVEL_CHANGED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   144
						 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   145
	uint32_t		cport_event_flags;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   146
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   147
	struct sata_port_scr	cport_scr;	/* Port status and ctrl regs */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   148
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   149
						/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   150
						 * Attached device type:
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   151
						 * SATA_DTYPE_NONE
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   152
						 * SATA_DTYPE_ATADISK
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   153
						 * SATA_DTYPE_ATAPICD
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   154
						 * SATA_DTYPE_ATAPINONCD
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   155
						 * SATA_DTYPE_PMULT
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   156
						 * SATA_DTYPE_UNKNOWN
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   157
						 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   158
	uint32_t		cport_dev_type;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   159
	union {
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   160
	    struct sata_drive_info *cport_sata_drive; /* Attached drive info */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   161
	    struct sata_pmult_info *cport_sata_pmult; /* Attached Port Mult */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   162
	} 			cport_devp;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   163
						/* lbolt value at link lost */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   164
	clock_t			cport_link_lost_time;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   165
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   166
	struct sata_port_stats	cport_stats;	/* Port statistics */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   167
};
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   168
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   169
typedef struct sata_cport_info sata_cport_info_t;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   170
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   171
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   172
 * Attached SATA drive info and state.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   173
 * This structure is pointed to by sata_cport_info's cport_sata_drive field
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   174
 * when a drive is attached directly to a controller device port.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   175
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   176
struct sata_drive_info {
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   177
	sata_address_t	satadrv_addr;		/* this drive SATA address */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   178
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   179
						/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   180
						 * Drive state flags
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   181
						 * SATA_STATE_UNKNOWN
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   182
						 * SATA_STATE_PROBING
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   183
						 * SATA_STATE_PROBED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   184
						 * SATA_STATE_READY
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   185
						 * SATA_DSTATE_PWR_ACTIVE
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   186
						 * SATA_DSTATE_PWR_IDLE
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   187
						 * SATA_DSTATE_RESET
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   188
						 * SATA_DSTATE_FAILED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   189
						 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   190
	uint32_t	satadrv_state;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   191
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   192
						/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   193
						 * drive event flags:
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   194
						 * SATA_EVNT_DRIVE_RESET
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   195
						 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   196
	uint32_t	satadrv_event_flags;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   197
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   198
						/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   199
						 * Attached device type:
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   200
						 * SATA_DTYPE_ATADISK
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   201
						 * SATA_DTYPE_ATAPICD
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   202
						 * SATA_DTYPE_ATAPINONCD
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   203
						 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   204
	uint32_t	satadrv_type;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   205
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   206
	uint32_t	satadrv_status_reg;	/* drive status reg */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   207
	uint32_t	satadrv_error_reg;	/* drive error reg */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   208
	uint16_t	satadrv_features_support; /* drive features support */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   209
	uint16_t	satadrv_queue_depth;    /* drive queue depth */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   210
	uint16_t	satadrv_settings;	/* drive settings flags */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   211
	uint16_t	satadrv_pad2;		/* struct alignment pad */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   212
	uint64_t	satadrv_capacity;	/* drive capacity */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   213
	sata_id_t	satadrv_id;		/* Device Identify Data */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   214
	struct sata_drive_stats satadrv_stats;	/* drive statistics */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   215
};
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   216
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   217
typedef struct sata_drive_info sata_drive_info_t;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   218
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   219
_NOTE(SCHEME_PROTECTS_DATA("unshared data", sata_drive_info))
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   220
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   221
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   222
/* Port Multiplier & host port info and state */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   223
struct sata_pmult_info {
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   224
	sata_address_t	pmult_addr;		/* this PMult SATA Address */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   225
	kmutex_t	pmult_mutex;		/* pmult (host port) mutex */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   226
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   227
						/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   228
						 * PMult state flags
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   229
						 * SATA_STATE_UNKNOWN
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   230
						 * SATA_STATE_PROBING
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   231
						 * SATA_STATE_PROBED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   232
						 * SATA_STATE_READY
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   233
						 * SATA_PSTATE_FAILED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   234
						 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   235
	uint32_t	pmult_state;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   236
	uint32_t	pmult_event_flags;	/* Undefined for now */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   237
	struct sata_port_scr pmult_scr;		/* Host port SCR block */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   238
	uint32_t	pmult_num_dev_ports; 	/* Number of data ports */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   239
	struct sata_pmport_info	*pmult_dev_port[SATA_MAX_PMPORTS - 1];
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   240
};
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   241
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   242
typedef	struct sata_pmult_info sata_pmult_info_t;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   243
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   244
/* Port Multiplier's device port info & state */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   245
struct sata_pmport_info {
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   246
	sata_address_t	pmport_addr;		/* this SATA port address */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   247
	kmutex_t	pmport_mutex;		/* pmult device port mutex */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   248
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   249
						/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   250
						 * Port state flags
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   251
						 * SATA_STATE_UNKNOWN
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   252
						 * SATA_STATE_PROBING
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   253
						 * SATA_STATE_PROBED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   254
						 * SATA_STATE_READY
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   255
						 * SATA_PSTATE_PWRON
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   256
						 * SATA_PSTATE_PWROFF
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   257
						 * SATA_PSTATE_SHUTDOWN
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   258
						 * SATA_PSTATE_FAILED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   259
						 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   260
	uint32_t	pmport_state;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   261
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   262
						/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   263
						 * Port event flags:
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   264
						 * SATA_EVNT_DEVICE_ATTACHED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   265
						 * SATA_EVNT_DEVICE_DETACHED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   266
						 * SATA_EVNT_LINK_LOST
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   267
						 * SATA_EVNT_LINK_ESTABLISHED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   268
						 * SATA_EVNT_PORT_FAILED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   269
						 * SATA_EVNT_PWR_LEVEL_CHANGED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   270
						 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   271
	uint32_t	pmport_event_flags;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   272
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   273
	struct sata_port_scr pmport_scr;	/* PMult device port scr */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   274
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   275
						/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   276
						 * Attached device type:
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   277
						 * SATA_DTYPE_NONE
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   278
						 * SATA_DTYPE_ATADISK
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   279
						 * SATA_DTYPE_ATAPICD
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   280
						 * SATA_DTYPE_ATAPINONCD
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   281
						 * SATA_DTYPE_UNKNOWN
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   282
						 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   283
	uint32_t	pmport_dev_type;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   284
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   285
	struct sata_drive_info	*pmport_sata_drive; /* Attached drive info */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   286
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   287
						/* lbolt value at link lost */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   288
	clock_t		pmport_link_lost_time;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   289
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   290
	struct sata_port_stats	pmport_stats;	/* Port statistics */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   291
};
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   292
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   293
typedef	struct sata_pmport_info sata_pmport_info_t;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   294
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   295
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   296
 * Port SSTATUS register (sata_port_scr sport_sstatus field).
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   297
 * Link bits are valid only in port active state.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   298
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   299
#define	SATA_PORT_DEVLINK_UP	0x00000103	/* Link with dev established */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   300
#define	SATA_PORT_DEVLINK_UP_MASK 0x0000010F	/* Mask for link bits */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   301
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   302
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   303
 * Port state clear mask (cport_state and pmport_state fields).
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   304
 * SATA_PSTATE_SHUTDOWN and power state are preserved.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   305
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   306
#define	SATA_PORT_STATE_CLEAR_MASK	(~(SATA_PSTATE_SHUTDOWN))
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   307
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   308
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   309
 * Valid i.e.supported device types mask (cport_dev_type, satadrv_type,
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   310
 * pmult_dev_type fields).
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   311
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   312
#define	SATA_VALID_DEV_TYPE	(SATA_DTYPE_ATADISK)	/* only disks now */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   313
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   314
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   315
 * Device feature_support (satadrv_features_support)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   316
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   317
#define	SATA_DEV_F_DMA			0x01
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   318
#define	SATA_DEV_F_LBA28		0x02
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   319
#define	SATA_DEV_F_LBA48		0x04
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   320
#define	SATA_DEV_F_NCQ			0x08
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   321
#define	SATA_DEV_F_SATA1		0x10
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   322
#define	SATA_DEV_F_SATA2		0x20
1940
c302ad4d1aa7 6404894 Informational exceptions log parameter should be 4 bytes
ls24207
parents: 1781
diff changeset
   323
#define	SATA_DEV_F_TCQ			0x40	/* Non NCQ tagged queuing */
1258
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   324
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   325
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   326
 * Drive settings flags (satdrv_settings)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   327
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   328
#define	SATA_DEV_READ_AHEAD		0x0001	/* Read Ahead enabled */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   329
#define	SATA_DEV_WRITE_CACHE		0x0002	/* Write cache ON */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   330
#define	SATA_DEV_SERIAL_FEATURES 	0x8000	/* Serial ATA feat. enabled */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   331
#define	SATA_DEV_ASYNCH_NOTIFY		0x2000	/* Asynch-event enabled */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   332
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   333
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   334
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   335
 * Internal event and flags.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   336
 * These flags are set in the *_event_flags fields of various structures.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   337
 * Events and lock flags defined below are used internally by the
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   338
 * SATA framework (they are not reported by SATA HBA drivers).
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   339
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   340
#define	SATA_EVNT_MAIN			0x80000000
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   341
#define	SATA_EVNT_SKIP			0x40000000
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   342
#define	SATA_EVNT_INPROC_DEVICE_RESET	0x08000000
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   343
#define	SATA_EVNT_CLEAR_DEVICE_RESET	0x04000000
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   344
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   345
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   346
 * Lock flags - used to serialize configuration operations
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   347
 * on ports and devices.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   348
 * SATA_EVNT_LOCK_PORT_BUSY is set by event daemon to prevent
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   349
 * simultaneous cfgadm operations.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   350
 * SATA_APCTL_LOCK_PORT_BUSY is set by cfgadm ioctls to prevent
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   351
 * simultaneous event processing.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   352
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   353
#define	SATA_EVNT_LOCK_PORT_BUSY	0x00800000
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   354
#define	SATA_APCTL_LOCK_PORT_BUSY	0x00400000
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   355
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   356
/* Mask for port events */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   357
#define	SATA_EVNT_PORT_EVENTS		(SATA_EVNT_DEVICE_ATTACHED | \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   358
					SATA_EVNT_DEVICE_DETACHED | \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   359
					SATA_EVNT_LINK_LOST | \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   360
					SATA_EVNT_LINK_ESTABLISHED | \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   361
					SATA_EVNT_PORT_FAILED)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   362
/* Mask for drive events */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   363
#define	SATA_EVNT_DRIVE_EVENTS		SATA_EVNT_DEVICE_RESET
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   364
#define	SATA_EVNT_CONTROLLER_EVENTS	SATA_EVNT_PWR_LEVEL_CHANGED
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   365
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   366
/* Delays and timeounts definitions */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   367
#define	SATA_EVNT_DAEMON_SLEEP_TIME	50000	/* 50 ms */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   368
#define	SATA_EVNT_DAEMON_TERM_TIMEOUT	100000	/* 100 ms */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   369
#define	SATA_EVNT_DAEMON_TERM_WAIT	60000000 /* 60 s */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   370
#define	SATA_EVNT_LINK_LOST_TIMEOUT	1000000	/* 1 s */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   371
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   372
#define	SATA_DEVICE_IDENTIFY_RETRY	2
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   373
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   374
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   375
 * sata_scsi's hba_open_flag: field indicating open devctl instance.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   376
 *	0 = closed, 1 = shared open, 2 = exclusive open.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   377
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   378
#define	SATA_DEVCTL_CLOSED	0
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   379
#define	SATA_DEVCTL_SOPENED	1
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   380
#define	SATA_DEVCTL_EXOPENED	2
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   381
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   382
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   383
 * sata_pkt_txlate structure contains info about resources allocated
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   384
 * for the packet
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   385
 * Address of this structure is stored in scsi_pkt.pkt_ha_private and
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   386
 * in sata_pkt.sata_hba_private fields, so all three strucures are
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   387
 * cross-linked, with sata_pkt_txlate as a centerpiece.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   388
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   389
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   390
typedef struct sata_pkt_txlate {
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   391
	struct sata_hba_inst	*txlt_sata_hba_inst;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   392
	struct scsi_pkt		*txlt_scsi_pkt;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   393
	struct sata_pkt		*txlt_sata_pkt;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   394
	ddi_dma_handle_t	txlt_buf_dma_handle;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   395
	uint_t			txlt_flags;	/* data-in / data-out */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   396
	uint_t			txlt_num_dma_win; /* number of DMA windows */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   397
	uint_t			txlt_cur_dma_win; /* current DMA window */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   398
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   399
				/* cookies in the current DMA window */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   400
	uint_t			txlt_curwin_num_dma_cookies;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   401
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   402
				/* procesed dma cookies in current DMA win */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   403
	uint_t			txlt_curwin_processed_dma_cookies;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   404
	size_t			txlt_total_residue;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   405
	int			txlt_dma_cookie_list_len; /* alloc list len */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   406
	ddi_dma_cookie_t 	*txlt_dma_cookie_list; /* dma cookie list */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   407
	int			txlt_num_dma_cookies; /* dma cookies in list */
2539
2a06303a9684 6430355 sata framework needs to handle misaligned data buffers
pawelw
parents: 1940
diff changeset
   408
2a06303a9684 6430355 sata framework needs to handle misaligned data buffers
pawelw
parents: 1940
diff changeset
   409
				/* temporary buffer access handle */
2a06303a9684 6430355 sata framework needs to handle misaligned data buffers
pawelw
parents: 1940
diff changeset
   410
	ddi_acc_handle_t	txlt_tmp_buf_handle;
2a06303a9684 6430355 sata framework needs to handle misaligned data buffers
pawelw
parents: 1940
diff changeset
   411
	caddr_t			txlt_tmp_buf;	/* temp buffer address */
1258
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   412
} sata_pkt_txlate_t;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   413
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   414
_NOTE(SCHEME_PROTECTS_DATA("unshared data", sata_pkt_txlate))
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   415
_NOTE(SCHEME_PROTECTS_DATA("unshared data", scsi_pkt))
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   416
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   417
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   418
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   419
 * Additional scsi sense code definitions.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   420
 * These definition should eventually be moved to scsi header files.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   421
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   422
#define	SD_SCSI_NO_ADD_SENSE			0x00
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   423
#define	SD_SCSI_LU_NOT_READY			0x04
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   424
#define	SD_SCSI_WRITE_ERROR			0x0c
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   425
#define	SD_SCSI_UNREC_READ_ERROR		0x11
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   426
#define	SD_SCSI_INVALID_COMMAND_CODE		0x20
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   427
#define	SD_SCSI_LBA_OUT_OF_RANGE		0x21
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   428
#define	SD_SCSI_INVALID_FIELD_IN_CDB		0x24
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   429
#define	SD_SCSI_INVALID_FIELD_IN_PARAMETER_LIST 0x26
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   430
#define	SD_SCSI_SAVING_PARAMS_NOT_SUP		0x39
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   431
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   432
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   433
/* SCSI defs missing from scsi headers */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   434
/* Missing from sys/scsi/generic/commands.h */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   435
#define	SCMD_SYNCHRONIZE_CACHE_G1		0x91
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   436
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   437
 * Missing from sys/scsi/impl/mode.h, although defined
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   438
 * in sys/scsi/targets/sddefs.h as MODEPAGE_ERR_RECOV
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   439
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   440
#define	MODEPAGE_RW_ERRRECOV			0x01 /* read/write recovery */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   441
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   442
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   443
 * Macros for accessing various structure fields
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   444
 *
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   445
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   446
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   447
#define	SATA_TRAN(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   448
	sata_hba_inst->satahba_tran
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   449
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   450
#define	SATA_DIP(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   451
	sata_hba_inst->satahba_dip
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   452
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   453
#define	SATA_NUM_CPORTS(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   454
	sata_hba_inst->satahba_tran->sata_tran_hba_num_cports
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   455
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   456
#define	SATA_QDEPTH(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   457
	sata_hba_inst->satahba_tran->sata_tran_hba_qdepth
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   458
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   459
#define	SATA_FEATURES(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   460
	sata_hba_inst->satahba_tran->sata_tran_hba_features_support
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   461
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   462
#define	SATA_DMA_ATTR(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   463
	sata_hba_inst->satahba_tran->sata_tran_hba_dma_attr
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   464
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   465
#define	SATA_START_FUNC(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   466
	sata_hba_inst->satahba_tran->sata_tran_start
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   467
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   468
#define	SATA_ABORT_FUNC(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   469
	sata_hba_inst->satahba_tran->sata_tran_abort
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   470
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   471
#define	SATA_RESET_DPORT_FUNC(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   472
	sata_hba_inst->satahba_tran->sata_tran_reset_dport
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   473
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   474
#define	SATA_PORT_DEACTIVATE_FUNC(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   475
	(sata_hba_inst->satahba_tran->sata_tran_hotplug_ops == NULL ? \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   476
	NULL : \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   477
	sata_hba_inst->satahba_tran->sata_tran_hotplug_ops->\
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   478
	sata_tran_port_deactivate)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   479
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   480
#define	SATA_PORT_ACTIVATE_FUNC(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   481
	(sata_hba_inst->satahba_tran->sata_tran_hotplug_ops == NULL ? \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   482
	NULL : \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   483
	sata_hba_inst->satahba_tran->sata_tran_hotplug_ops->\
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   484
	sata_tran_port_activate)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   485
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   486
#define	SATA_PROBE_PORT_FUNC(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   487
	sata_hba_inst->satahba_tran->sata_tran_probe_port
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   488
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   489
#define	SATA_SELFTEST_FUNC(sata_hba_inst) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   490
	sata_hba_inst->satahba_tran->sata_tran_selftest
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   491
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   492
#define	SATA_CPORT_MUTEX(sata_hba_inst, cport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   493
	sata_hba_inst->satahba_dev_port[cport]->cport_mutex
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   494
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   495
#define	SATA_CPORT_INFO(sata_hba_inst, cport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   496
	sata_hba_inst->satahba_dev_port[cport]
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   497
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   498
#define	SATA_CPORT_STATE(sata_hba_inst, cport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   499
	sata_hba_inst->satahba_dev_port[cport]->cport_state
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   500
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   501
#define	SATA_CPORT_SCR(sata_hba_inst, cport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   502
	sata_hba_inst->satahba_dev_port[cport]->cport_scr
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   503
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   504
#define	SATA_CPORT_DEV_TYPE(sata_hba_inst, cport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   505
	sata_hba_inst->satahba_dev_port[cport]->cport_dev_type
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   506
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   507
#define	SATA_CPORT_DRV_INFO(sata_hba_inst, cport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   508
	sata_hba_inst->satahba_dev_port[cport]->cport_devp.cport_sata_drive
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   509
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   510
#define	SATA_CPORTINFO_DRV_TYPE(cportinfo) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   511
	cportinfo->cport_dev_type
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   512
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   513
#define	SATA_CPORTINFO_DRV_INFO(cportinfo) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   514
	cportinfo->cport_devp.cport_sata_drive
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   515
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   516
#define	SATA_CPORTINFO_PMULT_INFO(cportinfo) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   517
	cportinfo->cport_devp.cport_sata_pmult
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   518
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   519
#define	SATA_PMULT_INFO(sata_hba_inst, cport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   520
	sata_hba_inst->satahba_dev_port[cport]->cport_devp.cport_sata_pmult
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   521
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   522
#define	SATA_NUM_PMPORTS(sata_hba_inst, cport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   523
	sata_hba_inst->satahba_dev_port[cport]->\
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   524
	cport_devp.cport_sata_pmult->pmult_num_dev_ports
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   525
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   526
#define	SATA_PMPORT_INFO(sata_hba_inst, cport, pmport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   527
	sata_hba_inst->satahba_dev_port[cport]->\
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   528
	cport_devp.cport_sata_pmult->pmult_dev_port[pmport]
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   529
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   530
#define	SATA_PMPORT_DRV_INFO(sata_hba_inst, cport, pmport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   531
	sata_hba_inst->satahba_dev_port[cport]->\
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   532
	cport_devp.cport_sata_pmult->pmult_dev_port[pmport]->\
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   533
	pmport_sata_drive
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   534
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   535
#define	SATA_PMPORT_STATE(sata_hba_inst, cport, pmport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   536
	sata_hba_inst->satahba_dev_port[cport]->\
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   537
	cport_devp.cport_sata_pmult->pmult_dev_port[pmport]->pmport_state
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   538
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   539
#define	SATA_PMPORT_SCR(sata_hba_inst, cport, pmport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   540
	sata_hba_inst->satahba_dev_port[cport]->\
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   541
	cport_devp.cport_sata_pmult->pmult_dev_port[pmport]->pmport_scr
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   542
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   543
#define	SATA_PMPORT_DEV_TYPE(sata_hba_inst, cport, pmport) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   544
	sata_hba_inst->satahba_dev_port[cport]->\
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   545
	cport_devp.cport_sata_pmult->pmult_dev_port[pmport]->pmport_dev_type
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   546
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   547
#define	SATA_TXLT_HBA_INST(spx) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   548
	spx->txlt_sata_hba_inst
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   549
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   550
#define	SATA_TXLT_CPORT(spx) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   551
	spx->txlt_sata_pkt->satapkt_device.satadev_addr.cport
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   552
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   553
#define	SATA_TXLT_CPORT_MUTEX(spx) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   554
	spx->txlt_sata_hba_inst->\
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   555
	satahba_dev_port[spx->txlt_sata_pkt->\
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   556
	satapkt_device.satadev_addr.cport]->cport_mutex
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   557
1781
1005b1d56b1c 6397649 hotplugging sata disk may disable write and read cache
pawelw
parents: 1529
diff changeset
   558
#define	SATA_TXLT_TASKQ(spx) \
1005b1d56b1c 6397649 hotplugging sata disk may disable write and read cache
pawelw
parents: 1529
diff changeset
   559
	spx->txlt_sata_hba_inst->\
1005b1d56b1c 6397649 hotplugging sata disk may disable write and read cache
pawelw
parents: 1529
diff changeset
   560
	satahba_taskq
1005b1d56b1c 6397649 hotplugging sata disk may disable write and read cache
pawelw
parents: 1529
diff changeset
   561
1258
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   562
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   563
 * Minor number construction for devctl and attachment point nodes.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   564
 * All necessary information has to be encoded in NBITSMINOR32 bits.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   565
 *
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   566
 * Devctl node minor number:
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   567
 * ((controller_instance << SATA_CNTRL_INSTANCE_SHIFT) | SATA_DEVCTL_NODE)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   568
 *
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   569
 * Attachment point node minor number has to include controller
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   570
 * instance (7 bits), controller port number (5 bits) and port multiplier
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   571
 * device port number (4 bits) and port multiplier device port
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   572
 * indicator (1 bit).  Additionally, a single bit is used to
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   573
 * differentiate between attachment point node and device control node.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   574
 *
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   575
 * Attachment point minor number:
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   576
 * ((controller_instance << SATA_CNTRL_INSTANCE_SHIFT) | SATA_AP_NODE |
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   577
 * [(port_multiplier_device_port << SATA_PMULT_PORT_SHIFT) | SATA_PMULT_AP] |
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   578
 * (controller_port))
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   579
 *
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   580
 * 17 bits are used (if 64 instances of controllers are expected)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   581
 * bit 18 is reserved for future use.
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   582
 *
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   583
 *   --------------------------------------------------------
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   584
 *   |17|16|15|14|13|12|11|10 |09|08|07|06|05|04|03|02|01|00|
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   585
 *   --------------------------------------------------------
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   586
 *   | R| c| c| c| c| c| c|a/d|pm|pp|pp|pp|pp|cp|cp|cp|cp|cp|
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   587
 *   --------------------------------------------------------
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   588
 * Where:
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   589
 * cp  - device port number on the HBA SATA controller
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   590
 * pp  - device port number on the port multiplier
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   591
 * pm  - 0 - target attached to controller device port
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   592
 *       1 - target attached to port multiplier's device port
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   593
 * a/d - 0 - devctl node
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   594
 *       1 - attachment point node
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   595
 * c   - controller number
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   596
 * R   - reserved bit
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   597
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   598
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   599
#define	SATA_AP_NODE		0x400		/* Attachment Point node */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   600
#define	SATA_DEVCTL_NODE	0x000		/* DEVCTL node */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   601
#define	SATA_PMULT_AP		0x200		/* device on PMult port */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   602
#define	SATA_PMULT_PORT_SHIFT	5
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   603
#define	SATA_CNTRL_INSTANCE_SHIFT 11
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   604
#define	SATA_CPORT_MASK		0x1f		/* 32 device ports */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   605
#define	SATA_PMULT_PORT_MASK	0xf		/* 15 device ports */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   606
#define	SATA_CNTRL_INSTANCE_MASK 0x03F		/* 64 controllers */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   607
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   608
/* Macro for creating devctl node minor number */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   609
#define	SATA_MAKE_DEVCTL_MINOR(controller_instance) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   610
	((controller_instance << SATA_CNTRL_INSTANCE_SHIFT) | \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   611
	SATA_DEVCTL_NODE)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   612
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   613
/* Macro for creating an attachment point node minor number */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   614
#define	SATA_MAKE_AP_MINOR(cntrl_instance, cport, pmport, qual) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   615
	(qual & (SATA_ADDR_PMPORT | SATA_ADDR_DPMPORT) ? \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   616
	(((cntrl_instance) << SATA_CNTRL_INSTANCE_SHIFT) | \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   617
	SATA_AP_NODE | SATA_PMULT_AP | \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   618
	(pmport << SATA_PMULT_PORT_SHIFT) | cport) : \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   619
	(((cntrl_instance) << SATA_CNTRL_INSTANCE_SHIFT) | \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   620
	SATA_AP_NODE | cport))
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   621
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   622
/* Macro retrieving controller number from a minor number */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   623
#define	SATA_MINOR2INSTANCE(minor) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   624
	((minor >> SATA_CNTRL_INSTANCE_SHIFT) & SATA_CNTRL_INSTANCE_MASK)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   625
1529
4fa3374f2b9d 6386938 sata framework should generate sysevent when device is plugged or unplugged
pawelw
parents: 1258
diff changeset
   626
/*
4fa3374f2b9d 6386938 sata framework should generate sysevent when device is plugged or unplugged
pawelw
parents: 1258
diff changeset
   627
 * Macro for creating an attachment point number from sata address.
4fa3374f2b9d 6386938 sata framework should generate sysevent when device is plugged or unplugged
pawelw
parents: 1258
diff changeset
   628
 * Address qualifier has to be one of:
4fa3374f2b9d 6386938 sata framework should generate sysevent when device is plugged or unplugged
pawelw
parents: 1258
diff changeset
   629
 * SATA_ADDR_DCPORT, SATA_ADDR_DPMPORT, SATA_ADDR_CPORT or SATA_ADDR_PMPORT
4fa3374f2b9d 6386938 sata framework should generate sysevent when device is plugged or unplugged
pawelw
parents: 1258
diff changeset
   630
 */
4fa3374f2b9d 6386938 sata framework should generate sysevent when device is plugged or unplugged
pawelw
parents: 1258
diff changeset
   631
#define	SATA_MAKE_AP_NUMBER(cport, pmport, qual) \
4fa3374f2b9d 6386938 sata framework should generate sysevent when device is plugged or unplugged
pawelw
parents: 1258
diff changeset
   632
	((qual & (SATA_ADDR_PMPORT | SATA_ADDR_DPMPORT)) ? \
4fa3374f2b9d 6386938 sata framework should generate sysevent when device is plugged or unplugged
pawelw
parents: 1258
diff changeset
   633
	(SATA_PMULT_AP | (pmport << SATA_PMULT_PORT_SHIFT) | cport) : \
4fa3374f2b9d 6386938 sata framework should generate sysevent when device is plugged or unplugged
pawelw
parents: 1258
diff changeset
   634
	(cport))
1258
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   635
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   636
/*
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   637
 * SCSI target number format
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   638
 *
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   639
 *   -------------------------------
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   640
 *   | 9| 8| 7| 6| 5| 4| 3| 2| 1| 0|    Bit number
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   641
 *   -------------------------------
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   642
 *   |pm|pp|pp|pp|pp|cp|cp|cp|cp|cp|
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   643
 *   -------------------------------
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   644
 * Where:
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   645
 * cp  - device port number on the HBA SATA controller
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   646
 * pp  - device port number on the port multiplier
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   647
 * pm  - 0 - target attached to controller device port
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   648
 *       1 - target attached to port multiplier's device port
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   649
 */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   650
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   651
/* SATA ports to SCSI target number translation */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   652
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   653
#define	SATA_TO_SCSI_TARGET(cport, pmport, qual) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   654
	(qual == SATA_ADDR_DCPORT ? cport : \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   655
	(cport | (pmport << SATA_PMULT_PORT_SHIFT) | SATA_PMULT_AP))
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   656
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   657
/* SCSI target number to SATA cntrl/pmport/cport translations */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   658
#define	SCSI_TO_SATA_CPORT(scsi_target) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   659
	(scsi_target & SATA_CPORT_MASK)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   660
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   661
#define	SCSI_TO_SATA_PMPORT(scsi_target) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   662
	((scsi_target >> SATA_PMULT_PORT_SHIFT) & SATA_PMULT_PORT_MASK)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   663
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   664
#define	SCSI_TO_SATA_ADDR_QUAL(scsi_target) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   665
	((scsi_target & SATA_PMULT_AP) ? SATA_ADDR_DPMPORT : \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   666
	SATA_ADDR_DCPORT)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   667
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   668
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   669
/* Debug flags */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   670
#if	DEBUG
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   671
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   672
#define	SATA_DEBUG
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   673
#define	SATA_DBG_SCSI_IF	1
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   674
#define	SATA_DBG_HBA_IF		2
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   675
#define	SATA_DBG_NODES		4
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   676
#define	SATA_DBG_IOCTL_IF	8
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   677
#define	SATA_DBG_EVENTS		0x10
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   678
#define	SATA_DBG_EVENTS_PROC	0x20
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   679
#define	SATA_DBG_EVENTS_PROCPST	0x40
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   680
#define	SATA_DBG_EVENTS_CNTRL	0x80
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   681
#define	SATA_DBG_EVENTS_DAEMON	0x100
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   682
#define	SATA_DBG_DMA_SETUP	0x400
2734
1a2f23099c2a 6428449 sata disks have read cache disabled after being hot-plugged
pawelw
parents: 2539
diff changeset
   683
#define	SATA_DBG_DEV_SETTINGS	0x800
1258
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   684
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   685
extern int sata_debug_flag;
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   686
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   687
/* Debug macros */
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   688
#define	SATADBG1(flag, sata, format, arg1) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   689
	if (sata_debug_flags & (flag)) { \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   690
		sata_log(sata, CE_CONT, format, arg1); \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   691
	}
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   692
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   693
#define	SATADBG2(flag, sata, format, arg1, arg2) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   694
	if (sata_debug_flags & (flag)) { \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   695
		sata_log(sata, CE_CONT, format, arg1, arg2); \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   696
	}
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   697
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   698
#define	SATADBG3(flag, sata, format, arg1, arg2, arg3) \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   699
	if (sata_debug_flags & (flag)) { \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   700
		sata_log(sata, CE_CONT, format, arg1, arg2, arg3); \
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   701
	}
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   702
#else
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   703
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   704
#define	SATADBG1(flag, dip, frmt, arg1)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   705
#define	SATADBG2(flag, dip, frmt, arg1, arg2)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   706
#define	SATADBG3(flag, dip, frmt, arg1, arg2, arg3)
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   707
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   708
#endif
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   709
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   710
#ifdef	__cplusplus
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   711
}
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   712
#endif
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   713
9961d7d3ec8c PSARC/2004/779 SATA HBA Framework Support
mlf
parents:
diff changeset
   714
#endif /* _SATA_H */