summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Faltesek <Martin.Faltesek@Sun.COM>2010-04-20 12:08:29 -0700
committerMartin Faltesek <Martin.Faltesek@Sun.COM>2010-04-20 12:08:29 -0700
commita599d311a6462df52df7ff31f2d39eb197f4aeb3 (patch)
tree2aa9a2f38e38b39e8ee00283ef674187cfe13b4c
parent8c4f9701439555b41fbfe7848508f53b52166007 (diff)
downloadillumos-gate-a599d311a6462df52df7ff31f2d39eb197f4aeb3.tar.gz
6933848 savecore fails on T4 - dump failed: error 5
-rw-r--r--usr/src/uts/common/io/sata/adapters/si3124/si3124.c297
-rw-r--r--usr/src/uts/common/sys/sata/adapters/si3124/si3124reg.h62
2 files changed, 205 insertions, 154 deletions
diff --git a/usr/src/uts/common/io/sata/adapters/si3124/si3124.c b/usr/src/uts/common/io/sata/adapters/si3124/si3124.c
index 2d3c9b83be..a2d5281823 100644
--- a/usr/src/uts/common/io/sata/adapters/si3124/si3124.c
+++ b/usr/src/uts/common/io/sata/adapters/si3124/si3124.c
@@ -20,13 +20,10 @@
*/
/*
- * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
*/
-
-
/*
* SiliconImage 3124/3132 sata controller driver
*/
@@ -204,6 +201,7 @@
#include <sys/sata/sata_hba.h>
#include <sys/sata/adapters/si3124/si3124reg.h>
#include <sys/sata/adapters/si3124/si3124var.h>
+#include <sys/sdt.h>
/*
* Function prototypes for driver entry points
@@ -246,7 +244,7 @@ static int si_deliver_satapkt(si_ctl_state_t *, si_port_state_t *, int,
sata_pkt_t *);
static int si_initialize_controller(si_ctl_state_t *);
-static void si_deinititalize_controller(si_ctl_state_t *);
+static void si_deinitialize_controller(si_ctl_state_t *);
static void si_init_port(si_ctl_state_t *, int);
static int si_enumerate_port_multiplier(si_ctl_state_t *,
si_port_state_t *, int);
@@ -307,7 +305,7 @@ static void si_watchdog_handler(si_ctl_state_t *);
static void si_log(si_ctl_state_t *, uint_t, char *, ...);
#endif /* SI_DEBUG */
-static void si_copy_out_regs(sata_cmd_t *, fis_reg_h2d_t *);
+static void si_copy_out_regs(sata_cmd_t *, si_ctl_state_t *, uint8_t, uint8_t);
/*
* DMA attributes for the data buffer
@@ -699,7 +697,7 @@ err_out:
if (attach_state & ATTACH_PROGRESS_HW_INIT) {
si_ctlp->sictl_flags |= SI_DETACH;
/* We want to set SI_DETACH to deallocate all memory */
- si_deinititalize_controller(si_ctlp);
+ si_deinitialize_controller(si_ctlp);
si_ctlp->sictl_flags &= ~SI_DETACH;
}
@@ -768,9 +766,9 @@ si_detach(dev_info_t *dip, ddi_detach_cmd_t cmd)
(void) untimeout(si_ctlp->sictl_timeout_id);
si_ctlp->sictl_flags &= ~SI_NO_TIMEOUTS;
- /* deinitialize the controller. */
+ /* de-initialize the controller. */
si_ctlp->sictl_flags |= SI_DETACH;
- si_deinititalize_controller(si_ctlp);
+ si_deinitialize_controller(si_ctlp);
si_ctlp->sictl_flags &= ~SI_DETACH;
/* destroy any mutexes */
@@ -803,7 +801,7 @@ si_detach(dev_info_t *dip, ddi_detach_cmd_t cmd)
* handle dump(9e) to save CPR state after DDI_SUSPEND
* completes. This is OK since presumably power will be
* removed anyways. No outstanding transactions should be
- * on the controller since the children are already quiesed.
+ * on the controller since the children are already quiesced.
*
* If any ioctls/cfgadm support is added that touches
* hardware, those entry points will need to check for
@@ -818,7 +816,7 @@ si_detach(dev_info_t *dip, ddi_detach_cmd_t cmd)
mutex_enter(&si_ctlp->sictl_mutex);
}
- si_deinititalize_controller(si_ctlp);
+ si_deinitialize_controller(si_ctlp);
si_ctlp->sictl_flags |= SI_NO_TIMEOUTS;
(void) untimeout(si_ctlp->sictl_timeout_id);
@@ -910,7 +908,7 @@ si_power(dev_info_t *dip, int component, int level)
(void) untimeout(si_ctlp->sictl_timeout_id);
si_ctlp->sictl_flags &= ~SI_NO_TIMEOUTS;
- si_deinititalize_controller(si_ctlp);
+ si_deinitialize_controller(si_ctlp);
si_ctlp->sictl_power_level = PM_LEVEL_D3;
}
@@ -1240,9 +1238,8 @@ si_tran_start(dev_info_t *dip, sata_pkt_t *spkt)
if (spkt->satapkt_op_mode & (SATA_OPMODE_POLLING|SATA_OPMODE_SYNCH)) {
/* we need to poll now */
- mutex_exit(&si_portp->siport_mutex);
si_poll_cmd(si_ctlp, si_portp, cport, slot, spkt);
- mutex_enter(&si_portp->siport_mutex);
+
}
mutex_exit(&si_portp->siport_mutex);
@@ -1302,9 +1299,7 @@ si_mop_commands(si_ctl_state_t *si_ctlp,
uint32_t finished_tags, unfinished_tags;
int tmpslot;
sata_pkt_t *satapkt;
- si_prb_t *prb;
- uint32_t *prb_word_ptr;
- int i;
+ struct sata_cmd_flags *flagsp;
SIDBG1(SIDBG_ERRS|SIDBG_ENTRY, si_ctlp,
"si_mop_commands entered: slot_status: 0x%x",
@@ -1342,12 +1337,11 @@ si_mop_commands(si_ctl_state_t *si_ctlp,
satapkt = si_portp->siport_slot_pkts[tmpslot];
ASSERT(satapkt != NULL);
- prb = &si_portp->siport_prbpool[tmpslot];
- ASSERT(prb != NULL);
- satapkt->satapkt_cmd.satacmd_status_reg =
- GET_FIS_COMMAND(prb->prb_fis);
- if (satapkt->satapkt_cmd.satacmd_flags.sata_special_regs)
- si_copy_out_regs(&satapkt->satapkt_cmd, &prb->prb_fis);
+
+ if (satapkt->satapkt_cmd.satacmd_flags.sata_special_regs) {
+ si_copy_out_regs(&satapkt->satapkt_cmd, si_ctlp,
+ port, tmpslot);
+ }
SIDBG1(SIDBG_ERRS, si_ctlp,
"si_mop_commands sending up completed satapkt: %x",
@@ -1376,48 +1370,21 @@ si_mop_commands(si_ctl_state_t *si_ctlp,
si_set_sense_data(satapkt, SATA_PKT_DEV_ERROR);
}
- /*
- * The LRAM contains the the modified FIS.
- * Read the modified FIS to obtain the Error & Status.
- */
- prb = &(si_portp->siport_prbpool[tmpslot]);
- prb_word_ptr = (uint32_t *)(void *)prb;
- for (i = 0; i < (sizeof (si_prb_t)/4); i++) {
- prb_word_ptr[i] = ddi_get32(
- si_ctlp->sictl_port_acc_handle,
- (uint32_t *)(PORT_LRAM(si_ctlp, port,
- tmpslot)+i*4));
- }
+ flagsp = &satapkt->satapkt_cmd.satacmd_flags;
- satapkt->satapkt_cmd.satacmd_status_reg =
- GET_FIS_COMMAND(prb->prb_fis);
- satapkt->satapkt_cmd.satacmd_error_reg =
- GET_FIS_FEATURES(prb->prb_fis);
- satapkt->satapkt_cmd.satacmd_sec_count_lsb =
- GET_FIS_SECTOR_COUNT(prb->prb_fis);
- satapkt->satapkt_cmd.satacmd_lba_low_lsb =
- GET_FIS_SECTOR(prb->prb_fis);
- satapkt->satapkt_cmd.satacmd_lba_mid_lsb =
- GET_FIS_CYL_LOW(prb->prb_fis);
- satapkt->satapkt_cmd.satacmd_lba_high_lsb =
- GET_FIS_CYL_HI(prb->prb_fis);
- satapkt->satapkt_cmd.satacmd_device_reg =
- GET_FIS_DEV_HEAD(prb->prb_fis);
-
- if (satapkt->satapkt_cmd.satacmd_addr_type == ATA_ADDR_LBA48) {
- satapkt->satapkt_cmd.satacmd_sec_count_msb =
- GET_FIS_SECTOR_COUNT_EXP(prb->prb_fis);
- satapkt->satapkt_cmd.satacmd_lba_low_msb =
- GET_FIS_SECTOR_EXP(prb->prb_fis);
- satapkt->satapkt_cmd.satacmd_lba_mid_msb =
- GET_FIS_CYL_LOW_EXP(prb->prb_fis);
- satapkt->satapkt_cmd.satacmd_lba_high_msb =
- GET_FIS_CYL_HI_EXP(prb->prb_fis);
- }
+ flagsp->sata_copy_out_lba_low_msb = B_TRUE;
+ flagsp->sata_copy_out_lba_mid_msb = B_TRUE;
+ flagsp->sata_copy_out_lba_high_msb = B_TRUE;
+ flagsp->sata_copy_out_lba_low_lsb = B_TRUE;
+ flagsp->sata_copy_out_lba_mid_lsb = B_TRUE;
+ flagsp->sata_copy_out_lba_high_lsb = B_TRUE;
+ flagsp->sata_copy_out_error_reg = B_TRUE;
+ flagsp->sata_copy_out_sec_count_msb = B_TRUE;
+ flagsp->sata_copy_out_sec_count_lsb = B_TRUE;
+ flagsp->sata_copy_out_device_reg = B_TRUE;
- if (satapkt->satapkt_cmd.satacmd_flags.sata_special_regs)
- si_copy_out_regs(&satapkt->satapkt_cmd, &prb->prb_fis);
+ si_copy_out_regs(&satapkt->satapkt_cmd, si_ctlp, port, tmpslot);
/*
* In the case of NCQ command failures, the error is
@@ -2293,7 +2260,6 @@ si_poll_cmd(
pkt_timeout_ticks = drv_usectohz((clock_t)satapkt->satapkt_time *
1000000);
- mutex_enter(&si_portp->siport_mutex);
/* we start out with SATA_PKT_COMPLETED as the satapkt_reason */
satapkt->satapkt_reason = SATA_PKT_COMPLETED;
@@ -2328,7 +2294,8 @@ si_poll_cmd(
if (satapkt->satapkt_reason != SATA_PKT_COMPLETED) {
/* The si_mop_command() got to our packet before us */
- goto poll_done;
+
+ return;
}
/*
@@ -2350,7 +2317,7 @@ si_poll_cmd(
(void) si_intr_command_error(si_ctlp, si_portp, port);
mutex_enter(&si_portp->siport_mutex);
- goto poll_done;
+ return;
/*
* Why do we need to call si_intr_command_error() ?
@@ -2383,11 +2350,15 @@ si_poll_cmd(
port_intr_status & INTR_MASK);
}
-
} else if (slot_status & SI_SLOT_MASK & (0x1 << slot)) {
satapkt->satapkt_reason = SATA_PKT_TIMEOUT;
+
} /* else: the command completed successfully */
+ if (satapkt->satapkt_cmd.satacmd_flags.sata_special_regs) {
+ si_copy_out_regs(&satapkt->satapkt_cmd, si_ctlp, port, slot);
+ }
+
if ((satapkt->satapkt_cmd.satacmd_cmd_reg ==
SATAC_WRITE_FPDMA_QUEUED) ||
(satapkt->satapkt_cmd.satacmd_cmd_reg ==
@@ -2397,9 +2368,6 @@ si_poll_cmd(
CLEAR_BIT(si_portp->siport_pending_tags, slot);
-poll_done:
- mutex_exit(&si_portp->siport_mutex);
-
/*
* tidbit: What is the interaction of abort with polling ?
* What happens if the current polled pkt is aborted in parallel ?
@@ -3025,14 +2993,14 @@ si_initialize_controller(si_ctl_state_t *si_ctlp)
* before calling us.
*/
static void
-si_deinititalize_controller(si_ctl_state_t *si_ctlp)
+si_deinitialize_controller(si_ctl_state_t *si_ctlp)
{
int port;
_NOTE(ASSUMING_PROTECTED(si_ctlp))
SIDBG0(SIDBG_INIT|SIDBG_ENTRY, si_ctlp,
- "si3124: si_deinititalize_controller entered");
+ "si3124: si_deinitialize_controller entered");
/* disable all the interrupts. */
si_disable_all_interrupts(si_ctlp);
@@ -3068,7 +3036,7 @@ si_init_port(si_ctl_state_t *si_ctlp, int port)
PORT_CONTROL_SET_BITS_PORT_INITIALIZE);
/*
- * Clear the InterruptNCOR (Interupt No Clear on Read).
+ * Clear the InterruptNCOR (Interrupt No Clear on Read).
* This step ensures that a mere reading of slot_status will clear
* the interrupt; no explicit clearing of interrupt condition
* will be needed for successful completion of commands.
@@ -3667,20 +3635,18 @@ si_intr_command_complete(
finished_tags = si_portp->siport_pending_tags &
~slot_status & SI_SLOT_MASK;
while (finished_tags) {
- si_prb_t *prb;
finished_slot = ddi_ffs(finished_tags) - 1;
if (finished_slot == -1) {
break;
}
- prb = &si_portp->siport_prbpool[finished_slot];
satapkt = si_portp->siport_slot_pkts[finished_slot];
- satapkt->satapkt_cmd.satacmd_status_reg =
- GET_FIS_COMMAND(prb->prb_fis);
- if (satapkt->satapkt_cmd.satacmd_flags.sata_special_regs)
- si_copy_out_regs(&satapkt->satapkt_cmd, &prb->prb_fis);
+ if (satapkt->satapkt_cmd.satacmd_flags.sata_special_regs) {
+ si_copy_out_regs(&satapkt->satapkt_cmd, si_ctlp, port,
+ finished_slot);
+ }
CLEAR_BIT(si_portp->siport_pending_tags, finished_slot);
CLEAR_BIT(finished_tags, finished_slot);
@@ -4998,6 +4964,7 @@ si_reset_dport_wait_till_ready(
sata_device_t sdevice;
uint32_t SStatus;
uint32_t SControl;
+ uint32_t port_intr_status;
_NOTE(ASSUMING_PROTECTED(si_portp))
@@ -5027,28 +4994,6 @@ si_reset_dport_wait_till_ready(
si_portp->siport_reset_in_progress = 1;
}
- /*
- * For some reason, we are losing the interrupt enablement after
- * any reset condition. So restore them back now.
- */
- SIDBG1(SIDBG_INIT, si_ctlp,
- "current interrupt enable set: 0x%x",
- ddi_get32(si_ctlp->sictl_port_acc_handle,
- (uint32_t *)PORT_INTERRUPT_ENABLE_SET(si_ctlp, port)));
-
- ddi_put32(si_ctlp->sictl_port_acc_handle,
- (uint32_t *)PORT_INTERRUPT_ENABLE_SET(si_ctlp, port),
- (INTR_COMMAND_COMPLETE |
- INTR_COMMAND_ERROR |
- INTR_PORT_READY |
- INTR_POWER_CHANGE |
- INTR_PHYRDY_CHANGE |
- INTR_COMWAKE_RECEIVED |
- INTR_UNRECOG_FIS |
- INTR_DEV_XCHANGED |
- INTR_SETDEVBITS_NOTIFY));
-
- si_enable_port_interrupts(si_ctlp, port);
/*
* Every reset needs a PHY initialization.
@@ -5180,6 +5125,43 @@ si_reset_dport_wait_till_ready(
}
}
+
+ /*
+ * For some reason, we are losing the interrupt enablement after
+ * any reset condition. So restore them back now.
+ */
+
+ SIDBG1(SIDBG_INIT, si_ctlp,
+ "current interrupt enable set: 0x%x",
+ ddi_get32(si_ctlp->sictl_port_acc_handle,
+ (uint32_t *)PORT_INTERRUPT_ENABLE_SET(si_ctlp, port)));
+
+ ddi_put32(si_ctlp->sictl_port_acc_handle,
+ (uint32_t *)PORT_INTERRUPT_ENABLE_SET(si_ctlp, port),
+ (INTR_COMMAND_COMPLETE |
+ INTR_COMMAND_ERROR |
+ INTR_PORT_READY |
+ INTR_POWER_CHANGE |
+ INTR_PHYRDY_CHANGE |
+ INTR_COMWAKE_RECEIVED |
+ INTR_UNRECOG_FIS |
+ INTR_DEV_XCHANGED |
+ INTR_SETDEVBITS_NOTIFY));
+
+ si_enable_port_interrupts(si_ctlp, port);
+
+ /*
+ * make sure interrupts are cleared
+ */
+ port_intr_status = ddi_get32(si_ctlp->sictl_global_acc_handle,
+ (uint32_t *)PORT_INTERRUPT_STATUS(si_ctlp, port));
+
+ ddi_put32(si_ctlp->sictl_port_acc_handle,
+ (uint32_t *)(PORT_INTERRUPT_STATUS(si_ctlp,
+ port)),
+ port_intr_status & INTR_MASK);
+
+
SIDBG0(SIDBG_POLL_LOOP, si_ctlp,
"si_reset_dport_wait_till_ready returning success");
@@ -5446,28 +5428,97 @@ si_log(si_ctl_state_t *si_ctlp, uint_t level, char *fmt, ...)
#endif /* SI_DEBUG */
static void
-si_copy_out_regs(sata_cmd_t *scmd, fis_reg_h2d_t *fisp)
+si_copy_out_regs(sata_cmd_t *scmd, si_ctl_state_t *si_ctlp, uint8_t port,
+ uint8_t slot)
{
- fis_reg_h2d_t fis = *fisp;
-
- if (scmd->satacmd_flags.sata_copy_out_sec_count_msb)
- scmd->satacmd_sec_count_msb = GET_FIS_SECTOR_COUNT_EXP(fis);
- if (scmd->satacmd_flags.sata_copy_out_lba_low_msb)
- scmd->satacmd_lba_low_msb = GET_FIS_SECTOR_EXP(fis);
- if (scmd->satacmd_flags.sata_copy_out_lba_mid_msb)
- scmd->satacmd_lba_mid_msb = GET_FIS_CYL_LOW_EXP(fis);
- if (scmd->satacmd_flags.sata_copy_out_lba_high_msb)
- scmd->satacmd_lba_high_msb = GET_FIS_CYL_HI_EXP(fis);
- if (scmd->satacmd_flags.sata_copy_out_sec_count_lsb)
- scmd->satacmd_sec_count_lsb = GET_FIS_SECTOR_COUNT(fis);
- if (scmd->satacmd_flags.sata_copy_out_lba_low_lsb)
- scmd->satacmd_lba_low_lsb = GET_FIS_SECTOR(fis);
- if (scmd->satacmd_flags.sata_copy_out_lba_mid_lsb)
- scmd->satacmd_lba_mid_lsb = GET_FIS_CYL_LOW(fis);
- if (scmd->satacmd_flags.sata_copy_out_lba_high_lsb)
- scmd->satacmd_lba_high_lsb = GET_FIS_CYL_HI(fis);
- if (scmd->satacmd_flags.sata_copy_out_device_reg)
- scmd->satacmd_device_reg = GET_FIS_DEV_HEAD(fis);
- if (scmd->satacmd_flags.sata_copy_out_error_reg)
- scmd->satacmd_error_reg = GET_FIS_FEATURES(fis);
+ uint32_t *fis_word_ptr;
+ si_prb_t *prb;
+ int i;
+
+ /*
+ * The LRAM contains the the modified FIS after command completion, so
+ * first copy it back to the in-core PRB pool. To save read cycles,
+ * just copy over the FIS portion of the PRB pool.
+ */
+ prb = &si_ctlp->sictl_ports[port]->siport_prbpool[slot];
+
+ fis_word_ptr = (uint32_t *)(void *)(&prb->prb_fis);
+
+ for (i = 0; i < (sizeof (fis_reg_h2d_t)/4); i++) {
+ fis_word_ptr[i] = ddi_get32(
+ si_ctlp->sictl_port_acc_handle,
+ (uint32_t *)(PORT_LRAM(si_ctlp, port,
+ slot) + i * 4 + 0x08));
+ }
+
+ /*
+ * always get the status register
+ */
+ scmd->satacmd_status_reg = GET_FIS_COMMAND(prb->prb_fis);
+
+ DTRACE_PROBE1(satacmd_status_reg, int, scmd->satacmd_status_reg);
+
+ if (scmd->satacmd_flags.sata_copy_out_sec_count_msb) {
+ scmd->satacmd_sec_count_msb =
+ GET_FIS_SECTOR_COUNT_EXP(prb->prb_fis);
+ SIDBG1(SIDBG_VERBOSE, NULL,
+ "copyout satacmd_sec_count_msb %x\n",
+ scmd->satacmd_sec_count_msb);
+ }
+
+ if (scmd->satacmd_flags.sata_copy_out_lba_low_msb) {
+ scmd->satacmd_lba_low_msb = GET_FIS_SECTOR_EXP(prb->prb_fis);
+ SIDBG1(SIDBG_VERBOSE, NULL, "copyout satacmd_lba_low_msb %x\n",
+ scmd->satacmd_lba_low_msb);
+ }
+
+ if (scmd->satacmd_flags.sata_copy_out_lba_mid_msb) {
+ scmd->satacmd_lba_mid_msb = GET_FIS_CYL_LOW_EXP(prb->prb_fis);
+ SIDBG1(SIDBG_VERBOSE, NULL, "copyout satacmd_lba_mid_msb %x\n",
+ scmd->satacmd_lba_mid_msb);
+ }
+
+ if (scmd->satacmd_flags.sata_copy_out_lba_high_msb) {
+ scmd->satacmd_lba_high_msb = GET_FIS_CYL_HI_EXP(prb->prb_fis);
+ SIDBG1(SIDBG_VERBOSE, NULL, "copyout satacmd_lba_high_msb %x\n",
+ scmd->satacmd_lba_high_msb);
+ }
+
+ if (scmd->satacmd_flags.sata_copy_out_sec_count_lsb) {
+ scmd->satacmd_sec_count_lsb =
+ GET_FIS_SECTOR_COUNT(prb->prb_fis);
+ SIDBG1(SIDBG_VERBOSE, NULL,
+ "copyout satacmd_sec_count_lsb %x\n",
+ scmd->satacmd_sec_count_lsb);
+ }
+
+ if (scmd->satacmd_flags.sata_copy_out_lba_low_lsb) {
+ scmd->satacmd_lba_low_lsb = GET_FIS_SECTOR(prb->prb_fis);
+ SIDBG1(SIDBG_VERBOSE, NULL, "copyout satacmd_lba_low_lsb %x\n",
+ scmd->satacmd_lba_low_lsb);
+ }
+
+ if (scmd->satacmd_flags.sata_copy_out_lba_mid_lsb) {
+ scmd->satacmd_lba_mid_lsb = GET_FIS_CYL_LOW(prb->prb_fis);
+ SIDBG1(SIDBG_VERBOSE, NULL, "copyout satacmd_lba_mid_lsb %x\n",
+ scmd->satacmd_lba_mid_lsb);
+ }
+
+ if (scmd->satacmd_flags.sata_copy_out_lba_high_lsb) {
+ scmd->satacmd_lba_high_lsb = GET_FIS_CYL_HI(prb->prb_fis);
+ SIDBG1(SIDBG_VERBOSE, NULL, "copyout satacmd_lba_high_lsb %x\n",
+ scmd->satacmd_lba_high_lsb);
+ }
+
+ if (scmd->satacmd_flags.sata_copy_out_device_reg) {
+ scmd->satacmd_device_reg = GET_FIS_DEV_HEAD(prb->prb_fis);
+ SIDBG1(SIDBG_VERBOSE, NULL, "copyout satacmd_device_reg %x\n",
+ scmd->satacmd_device_reg);
+ }
+
+ if (scmd->satacmd_flags.sata_copy_out_error_reg) {
+ scmd->satacmd_error_reg = GET_FIS_FEATURES(prb->prb_fis);
+ SIDBG1(SIDBG_VERBOSE, NULL, "copyout satacmd_error_reg %x\n",
+ scmd->satacmd_error_reg);
+ }
}
diff --git a/usr/src/uts/common/sys/sata/adapters/si3124/si3124reg.h b/usr/src/uts/common/sys/sata/adapters/si3124/si3124reg.h
index a45f40b9ba..97e43d859c 100644
--- a/usr/src/uts/common/sys/sata/adapters/si3124/si3124reg.h
+++ b/usr/src/uts/common/sys/sata/adapters/si3124/si3124reg.h
@@ -20,15 +20,12 @@
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
+ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef _SI3124REG_H
#define _SI3124REG_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -70,103 +67,106 @@ typedef struct fis_reg_h2d {
uint32_t fish_type_pmp_rsvd_cmddevctl_cmd_features;
#define SET_FIS_TYPE(fis, type) \
- (fis.fish_type_pmp_rsvd_cmddevctl_cmd_features |= (type & 0xff))
+ ((&fis)->fish_type_pmp_rsvd_cmddevctl_cmd_features |= (type & 0xff))
#define SET_FIS_PMP(fis, pmp) \
- (fis.fish_type_pmp_rsvd_cmddevctl_cmd_features |= ((pmp & 0xf) << 8))
+ ((&fis)->fish_type_pmp_rsvd_cmddevctl_cmd_features |= \
+ ((pmp & 0xf) << 8))
#define SET_FIS_CDMDEVCTL(fis, cmddevctl) \
- (fis.fish_type_pmp_rsvd_cmddevctl_cmd_features |= \
+ ((&fis)->fish_type_pmp_rsvd_cmddevctl_cmd_features |= \
((cmddevctl & 0x1) << 15))
#define SET_FIS_COMMAND(fis, command) \
- (fis.fish_type_pmp_rsvd_cmddevctl_cmd_features |= \
+ ((&fis)->fish_type_pmp_rsvd_cmddevctl_cmd_features |= \
((command & 0xff) << 16))
#define GET_FIS_COMMAND(fis) \
- ((fis.fish_type_pmp_rsvd_cmddevctl_cmd_features >> 16) & 0xff)
+ (((&fis)->fish_type_pmp_rsvd_cmddevctl_cmd_features >> 16) & 0xff)
#define SET_FIS_FEATURES(fis, features) \
- (fis.fish_type_pmp_rsvd_cmddevctl_cmd_features |= \
+ ((&fis)->fish_type_pmp_rsvd_cmddevctl_cmd_features |= \
((features & 0xff) << 24))
#define GET_FIS_FEATURES(fis) \
- ((fis.fish_type_pmp_rsvd_cmddevctl_cmd_features >> 24) & 0xff)
+ (((&fis)->fish_type_pmp_rsvd_cmddevctl_cmd_features >> 24) & 0xff)
/* offset 0x04 */
uint32_t fish_sector_cyllow_cylhi_devhead;
#define SET_FIS_SECTOR(fis, sector) \
- (fis.fish_sector_cyllow_cylhi_devhead |= ((sector & 0xff)))
+ ((&fis)->fish_sector_cyllow_cylhi_devhead |= ((sector & 0xff)))
#define GET_FIS_SECTOR(fis) \
- (fis.fish_sector_cyllow_cylhi_devhead & 0xff)
+ ((&fis)->fish_sector_cyllow_cylhi_devhead & 0xff)
#define SET_FIS_CYL_LOW(fis, cyl_low) \
- (fis.fish_sector_cyllow_cylhi_devhead |= ((cyl_low & 0xff) << 8))
+ ((&fis)->fish_sector_cyllow_cylhi_devhead |= ((cyl_low & 0xff) << 8))
#define GET_FIS_CYL_LOW(fis) \
- ((fis.fish_sector_cyllow_cylhi_devhead >> 8) & 0xff)
+ (((&fis)->fish_sector_cyllow_cylhi_devhead >> 8) & 0xff)
#define SET_FIS_CYL_HI(fis, cyl_hi) \
- (fis.fish_sector_cyllow_cylhi_devhead |= ((cyl_hi & 0xff) << 16))
+ ((&fis)->fish_sector_cyllow_cylhi_devhead |= ((cyl_hi & 0xff) << 16))
#define GET_FIS_CYL_HI(fis) \
- ((fis.fish_sector_cyllow_cylhi_devhead >> 16) & 0xff)
+ (((&fis)->fish_sector_cyllow_cylhi_devhead >> 16) & 0xff)
#define SET_FIS_DEV_HEAD(fis, dev_head) \
- (fis.fish_sector_cyllow_cylhi_devhead |= ((dev_head & 0xff) << 24))
+ ((&fis)->fish_sector_cyllow_cylhi_devhead |= ((dev_head & 0xff) << 24))
#define GET_FIS_DEV_HEAD(fis) \
- ((fis.fish_sector_cyllow_cylhi_devhead >> 24) & 0xff)
+ (((&fis)->fish_sector_cyllow_cylhi_devhead >> 24) & 0xff)
/* offset 0x08 */
uint32_t fish_sectexp_cyllowexp_cylhiexp_featuresexp;
#define SET_FIS_SECTOR_EXP(fis, sectorexp) \
- (fis.fish_sectexp_cyllowexp_cylhiexp_featuresexp |= \
+ ((&fis)->fish_sectexp_cyllowexp_cylhiexp_featuresexp |= \
((sectorexp & 0xff)))
#define GET_FIS_SECTOR_EXP(fis) \
- (fis.fish_sectexp_cyllowexp_cylhiexp_featuresexp & 0xff)
+ ((&fis)->fish_sectexp_cyllowexp_cylhiexp_featuresexp & 0xff)
#define SET_FIS_CYL_LOW_EXP(fis, cyllowexp) \
- (fis.fish_sectexp_cyllowexp_cylhiexp_featuresexp |= \
+ ((&fis)->fish_sectexp_cyllowexp_cylhiexp_featuresexp |= \
((cyllowexp & 0xff) << 8))
#define GET_FIS_CYL_LOW_EXP(fis) \
- ((fis.fish_sectexp_cyllowexp_cylhiexp_featuresexp >> 8) & 0xff)
+ (((&fis)->fish_sectexp_cyllowexp_cylhiexp_featuresexp >> 8) & 0xff)
#define SET_FIS_CYL_HI_EXP(fis, cylhiexp) \
- (fis.fish_sectexp_cyllowexp_cylhiexp_featuresexp |= \
+ ((&fis)->fish_sectexp_cyllowexp_cylhiexp_featuresexp |= \
((cylhiexp & 0xff) << 16))
#define GET_FIS_CYL_HI_EXP(fis) \
- ((fis.fish_sectexp_cyllowexp_cylhiexp_featuresexp >> 16) & 0xff)
+ (((&fis)->fish_sectexp_cyllowexp_cylhiexp_featuresexp >> 16) & 0xff)
#define SET_FIS_FEATURES_EXP(fis, features_exp) \
- (fis.fish_sectexp_cyllowexp_cylhiexp_featuresexp |= \
+ ((&fis)->fish_sectexp_cyllowexp_cylhiexp_featuresexp |= \
((features_exp & 0xff) << 24))
/* offset 0x0c */
uint32_t fish_sectcount_sectcountexp_rsvd_devctl;
#define SET_FIS_SECTOR_COUNT(fis, sector_count) \
- (fis.fish_sectcount_sectcountexp_rsvd_devctl |= ((sector_count & 0xff)))
+ ((&fis)->fish_sectcount_sectcountexp_rsvd_devctl |= \
+ ((sector_count & 0xff)))
#define GET_FIS_SECTOR_COUNT(fis) \
- (fis.fish_sectcount_sectcountexp_rsvd_devctl & 0xff)
+ ((&fis)->fish_sectcount_sectcountexp_rsvd_devctl & 0xff)
#define SET_FIS_SECTOR_COUNT_EXP(fis, sector_count_exp) \
- (fis.fish_sectcount_sectcountexp_rsvd_devctl |= \
+ ((&fis)->fish_sectcount_sectcountexp_rsvd_devctl |= \
((sector_count_exp & 0xff) << 8))
#define GET_FIS_SECTOR_COUNT_EXP(fis) \
- ((fis.fish_sectcount_sectcountexp_rsvd_devctl >> 8) & 0xff)
+ (((&fis)->fish_sectcount_sectcountexp_rsvd_devctl >> 8) & 0xff)
#define SET_FIS_SECTOR_DEVCTL(fis, devctl) \
- (fis.fish_sectcount_sectcountexp_rsvd_devctl |= ((devctl & 0xff) << 24))
+ ((&fis)->fish_sectcount_sectcountexp_rsvd_devctl |= \
+ ((devctl & 0xff) << 24))
/* offset 0x10 */
uint32_t fish_rsvd3; /* should be zero */