66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * CDDL HEADER START
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf *
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * The contents of this file are subject to the terms of the
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * Common Development and Distribution License (the "License").
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * You may not use this file except in compliance with the License.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf *
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * or http://www.opensolaris.org/os/licensing.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * See the License for the specific language governing permissions
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * and limitations under the License.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf *
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * When distributing Covered Code, include this CDDL HEADER in each
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * If applicable, add the following below this CDDL HEADER, with the
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * fields enclosed by brackets "[]" replaced with your own identifying
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * information: Portions Copyright [yyyy] [name of copyright owner]
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf *
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * CDDL HEADER END
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
ab0d082f1ff5e05e86ea99a5672d8c466563280dMark Logan * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#ifndef _SI3124VAR_H
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define _SI3124VAR_H
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#ifdef __cplusplus
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlfextern "C" {
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#endif
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI3124_MAX_PORTS 4
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI3132_MAX_PORTS 2
b74cec98319cdf0854be09126da89ba80d5baa2eCharles Stephens#define SI3531_MAX_PORTS 1
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_MAX_PORTS SI3124_MAX_PORTS
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama#define SI_LOGBUF_LEN 512
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_SUCCESS (0) /* successful return */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_TIMEOUT (1) /* timed out */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_FAILURE (-1) /* unsuccessful return */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
81a0678e1c5837dd278edbcc4a617a6c976e7673xun ni - Sun Microsystems - Beijing China#define SI_MAX_SGT_TABLES_PER_PRB 21844
81a0678e1c5837dd278edbcc4a617a6c976e7673xun ni - Sun Microsystems - Beijing China#define SI_DEFAULT_SGT_TABLES_PER_PRB 85
81a0678e1c5837dd278edbcc4a617a6c976e7673xun ni - Sun Microsystems - Beijing China#define SI_MIN_SGT_TABLES_PER_PRB 1
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * While the si_sge_t and si_sgt_t correspond to the actual SGE and SGT
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * definitions as per the datasheet, the si_sgblock_t (i.e scatter gather
81a0678e1c5837dd278edbcc4a617a6c976e7673xun ni - Sun Microsystems - Beijing China * block) is a logical data structure which can hold dynamic SGEs and it
81a0678e1c5837dd278edbcc4a617a6c976e7673xun ni - Sun Microsystems - Beijing China * is tunable through global variables /etc/system si3124:si_dma_sg_number.
81a0678e1c5837dd278edbcc4a617a6c976e7673xun ni - Sun Microsystems - Beijing China * The idea is to use multiple tunable chained SGT tables per each PRB request.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlftypedef struct si_sgblock {
81a0678e1c5837dd278edbcc4a617a6c976e7673xun ni - Sun Microsystems - Beijing China si_sgt_t sgb_sgt[1];
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf} si_sgblock_t;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * Each SGT (Scatter Gather Table) has 4 SGEs (Scatter Gather Entries).
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * But each SGT effectively can host only 3 SGEs since the last SGE entry
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * is used to hold a link to the next SGT in the chain. However the last
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * SGT in the chain can host all the 4 entries since it does not need to
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * link any more.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
81a0678e1c5837dd278edbcc4a617a6c976e7673xun ni - Sun Microsystems - Beijing China#define SGE_LENGTH(x) (3*(x)+1)
81a0678e1c5837dd278edbcc4a617a6c976e7673xun ni - Sun Microsystems - Beijing China#define SI_DEFAULT_SGL_LENGTH SGE_LENGTH(SI_DEFAULT_SGT_TABLES_PER_PRB)
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
832d3fc2356e1dd511d8544e9f5d4ef5d91f36b6Mark Logan/* Argument to be used for calls to timeout() */
832d3fc2356e1dd511d8544e9f5d4ef5d91f36b6Mark Logantypedef struct si_event_arg {
832d3fc2356e1dd511d8544e9f5d4ef5d91f36b6Mark Logan void *siea_ctlp;
832d3fc2356e1dd511d8544e9f5d4ef5d91f36b6Mark Logan int siea_port;
832d3fc2356e1dd511d8544e9f5d4ef5d91f36b6Mark Logan} si_event_arg_t;
832d3fc2356e1dd511d8544e9f5d4ef5d91f36b6Mark Logan
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlftypedef struct si_portmult_state {
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf int sipm_num_ports;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf uint8_t sipm_port_type[15];
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf /* one of PORT_TYPE_[NODEV | MULTIPLIER | ATAPI | DISK | UNKNOWN] */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf /*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * sipm_port_type[] is good enough to capture the state of ports
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * behind the multiplier. Since any of the port behind a multiplier
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * is accessed through the same main controller port, we don't need
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * additional si_port_state_t here.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf} si_portmult_state_t;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* The following are for port types */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define PORT_TYPE_NODEV 0x0
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define PORT_TYPE_MULTIPLIER 0x1
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define PORT_TYPE_ATAPI 0x2
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define PORT_TYPE_DISK 0x3
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define PORT_TYPE_UNKNOWN 0x4
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* The following are for active state */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define PORT_INACTIVE 0x0
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define PORT_ACTIVE 0x1
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlftypedef struct si_port_state {
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama struct si_ctl_state *siport_ctlp; /* back pointer to controller */
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf uint8_t siport_port_type;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf /* one of PORT_TYPE_[NODEV | MULTIPLIER | ATAPI | DISK | UNKNOWN] */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf uint8_t siport_active; /* one of ACTIVE or INACTIVE */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama uint8_t siport_port_num; /* port number */
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf si_portmult_state_t siport_portmult_state;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf si_prb_t *siport_prbpool; /* These are 31 incore PRBs */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf uint64_t siport_prbpool_physaddr;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf ddi_dma_handle_t siport_prbpool_dma_handle;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf ddi_acc_handle_t siport_prbpool_acc_handle;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf si_sgblock_t *siport_sgbpool; /* These are 31 incore sg blocks */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf uint64_t siport_sgbpool_physaddr;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf ddi_dma_handle_t siport_sgbpool_dma_handle;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf ddi_acc_handle_t siport_sgbpool_acc_handle;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf kmutex_t siport_mutex; /* main per port mutex */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf uint32_t siport_pending_tags; /* remembers the pending tags */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf sata_pkt_t *siport_slot_pkts[SI_NUM_SLOTS];
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf /*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * While the reset is in progress, we don't accept any more commands
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * until we receive the command with SATA_CLEAR_DEV_RESET_STATE flag.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * However any commands with SATA_IGNORE_DEV_RESET_STATE are allowed in
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * during such blockage.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf int siport_reset_in_progress;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
832d3fc2356e1dd511d8544e9f5d4ef5d91f36b6Mark Logan /* Argument to be used for calls to timeout() */
832d3fc2356e1dd511d8544e9f5d4ef5d91f36b6Mark Logan si_event_arg_t *siport_event_args;
832d3fc2356e1dd511d8544e9f5d4ef5d91f36b6Mark Logan
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf /*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * We mop the commands for either abort, reset, timeout or
cf6ed80965aca8bcea908933e1630401d69e7b03Mark Logan * error handling cases. This counts how many mops are in progress.
cf6ed80965aca8bcea908933e1630401d69e7b03Mark Logan * It is also used to return BUSY in tran_start if a mop is going on.
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf int mopping_in_progress;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf /* error recovery related info */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf uint32_t siport_err_tags_SDBERROR;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf uint32_t siport_err_tags_nonSDBERROR;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf int siport_pending_ncq_count;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf} si_port_state_t;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* Warlock annotation */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf_NOTE(MUTEX_PROTECTS_DATA(si_port_state_t::siport_mutex, si_port_state_t))
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf_NOTE(READ_ONLY_DATA(si_port_state_t::siport_prbpool_dma_handle))
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf_NOTE(READ_ONLY_DATA(si_port_state_t::siport_sgbpool_dma_handle))
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama_NOTE(DATA_READABLE_WITHOUT_LOCK(si_port_state_t::siport_ctlp))
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama_NOTE(DATA_READABLE_WITHOUT_LOCK(si_port_state_t::siport_port_num))
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlftypedef struct si_ctl_state {
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf dev_info_t *sictl_devinfop;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf int sictl_num_ports; /* number of controller ports */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf si_port_state_t *sictl_ports[SI_MAX_PORTS];
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
b74cec98319cdf0854be09126da89ba80d5baa2eCharles Stephens int sictl_devid; /* device id of the controller */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf int sictl_flags; /* some important state of controller */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf int sictl_power_level;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf /* pci config space handle */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf ddi_acc_handle_t sictl_pci_conf_handle;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf /* mapping into bar 0 */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf ddi_acc_handle_t sictl_global_acc_handle;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf uintptr_t sictl_global_addr;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf /* mapping into bar 1 */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf ddi_acc_handle_t sictl_port_acc_handle;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf uintptr_t sictl_port_addr;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf struct sata_hba_tran *sictl_sata_hba_tran;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf timeout_id_t sictl_timeout_id;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf kmutex_t sictl_mutex; /* per controller mutex */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf ddi_intr_handle_t *sictl_htable; /* For array of interrupts */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf int sictl_intr_type; /* What type of interrupt */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf int sictl_intr_cnt; /* # of intrs count returned */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf size_t sictl_intr_size; /* Size of intr array */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf uint_t sictl_intr_pri; /* Interrupt priority */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf int sictl_intr_cap; /* Interrupt capabilities */
ab0d082f1ff5e05e86ea99a5672d8c466563280dMark Logan int fm_capabilities; /* FMA capabilities */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf} si_ctl_state_t;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* Warlock annotation */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf_NOTE(MUTEX_PROTECTS_DATA(si_ctl_state_t::sictl_mutex,
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf si_ctl_state_t::sictl_ports))
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf_NOTE(MUTEX_PROTECTS_DATA(si_ctl_state_t::sictl_mutex,
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf si_ctl_state_t::sictl_power_level))
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf_NOTE(MUTEX_PROTECTS_DATA(si_ctl_state_t::sictl_mutex,
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf si_ctl_state_t::sictl_flags))
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf_NOTE(MUTEX_PROTECTS_DATA(si_ctl_state_t::sictl_mutex,
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf si_ctl_state_t::sictl_timeout_id))
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama_NOTE(DATA_READABLE_WITHOUT_LOCK(si_ctl_state_t::sictl_ports))
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/*
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf * flags for si_flags
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_PM 0x01
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_ATTACH 0x02
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_DETACH 0x04
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_NO_TIMEOUTS 0x08
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_FRAMEWORK_ATTACHED 0x10 /* are we attached to framework ? */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* progress values for si_attach */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define ATTACH_PROGRESS_NONE (1<<0)
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define ATTACH_PROGRESS_STATEP_ALLOC (1<<1)
ab0d082f1ff5e05e86ea99a5672d8c466563280dMark Logan#define ATTACH_PROGRESS_INIT_FMA (1<<2)
ab0d082f1ff5e05e86ea99a5672d8c466563280dMark Logan#define ATTACH_PROGRESS_CONF_HANDLE (1<<3)
ab0d082f1ff5e05e86ea99a5672d8c466563280dMark Logan#define ATTACH_PROGRESS_BAR0_MAP (1<<4)
ab0d082f1ff5e05e86ea99a5672d8c466563280dMark Logan#define ATTACH_PROGRESS_BAR1_MAP (1<<5)
ab0d082f1ff5e05e86ea99a5672d8c466563280dMark Logan#define ATTACH_PROGRESS_INTR_ADDED (1<<6)
ab0d082f1ff5e05e86ea99a5672d8c466563280dMark Logan#define ATTACH_PROGRESS_MUTEX_INIT (1<<7)
ab0d082f1ff5e05e86ea99a5672d8c466563280dMark Logan#define ATTACH_PROGRESS_HW_INIT (1<<8)
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_10MS_TICKS (drv_usectohz(10000)) /* ticks in 10 millisec */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_1MS_TICKS (drv_usectohz(1000)) /* ticks in 1 millisec */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_1MS_USECS (1000) /* usecs in 1 millisec */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_POLLRATE_SOFT_RESET 1000
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_POLLRATE_SSTATUS 10
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_POLLRATE_PORTREADY 50
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_POLLRATE_SLOTSTATUS 50
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_POLLRATE_RECOVERPORTMULT 1000
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define PORTMULT_CONTROL_PORT 0xf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* clearing & setting the n'th bit in a given tag */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define CLEAR_BIT(tag, bit) (tag &= ~(0x1<<bit))
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SET_BIT(tag, bit) (tag |= (0x1<<bit))
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#if DEBUG
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
0cfc6e4a9f5ce7c0aa92399e218a7e1ab2000715xun ni - Sun Microsystems - Beijing China#define SI_DEBUG 1
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama#endif /* DEBUG */
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama/* si_debug_flags */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_TEST 0x0001
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_INIT 0x0002
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_ENTRY 0x0004
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_DUMP_PRB 0x0008
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_EVENT 0x0010
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_POLL_LOOP 0x0020
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_PKTCOMP 0x0040
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_TIMEOUT 0x0080
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_INFO 0x0100
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_VERBOSE 0x0200
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_INTR 0x0400
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_ERRS 0x0800
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_COOKIES 0x1000
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SIDBG_POWER 0x2000
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama#define SIDBG_RESET 0x4000
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
ab0d082f1ff5e05e86ea99a5672d8c466563280dMark Loganextern uint32_t si_debug_flags;
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama#define SIDBG(flag, format, args ...) \
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf if (si_debug_flags & (flag)) { \
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama si_log(NULL, NULL, format, ## args); \
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf }
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama#define SIDBG_P(flag, si_portp, format, args ...) \
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf if (si_debug_flags & (flag)) { \
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama si_log(NULL, si_portp, format, ## args); \
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf }
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama#define SIDBG_C(flag, si_ctlp, format, args ...) \
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf if (si_debug_flags & (flag)) { \
e57ece5b0297b7f73b98eb54349e9eaea4fbd619Praveen Kumar Dasaraju Rama si_log(si_ctlp, NULL, format, ## args); \
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf }
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf/* Flags controlling the reset behavior */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_PORT_RESET 0x1 /* Reset the port */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_DEVICE_RESET 0x2 /* Reset the device, not the port */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#define SI_RESET_NO_EVENTS_UP 0x4 /* Don't send reset events up */
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#ifdef __cplusplus
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf}
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#endif
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf
66f9d5cb3cc0652e2d9d1366fb950efbe4ca2f24mlf#endif /* _SI3124VAR_H */