f11c7f6305
The isci driver is for the integrated SAS controller in the Intel C600 (Patsburg) chipset. Source files in sys/dev/isci directory are FreeBSD-specific, and sys/dev/isci/scil subdirectory contains an OS-agnostic library (SCIL) published by Intel to control the SAS controller. This library is used primarily as-is in this driver, with some post-processing to better integrate into the kernel build environment. isci.4 and a README in the sys/dev/isci directory contain a few additional details. This driver is only built for amd64 and i386 targets. Sponsored by: Intel Reviewed by: scottl Approved by: scottl
300 lines
9.7 KiB
C
300 lines
9.7 KiB
C
/*-
|
|
* This file is provided under a dual BSD/GPLv2 license. When using or
|
|
* redistributing this file, you may do so under either license.
|
|
*
|
|
* GPL LICENSE SUMMARY
|
|
*
|
|
* Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of version 2 of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
|
* The full GNU General Public License is included in this distribution
|
|
* in the file called LICENSE.GPL.
|
|
*
|
|
* BSD LICENSE
|
|
*
|
|
* Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in
|
|
* the documentation and/or other materials provided with the
|
|
* distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* $FreeBSD$
|
|
*/
|
|
#ifndef _SCIC_SGPIO_H_
|
|
#define _SCIC_SGPIO_H_
|
|
|
|
/**
|
|
* @file
|
|
*
|
|
* @brief This file contains all of the interface methods that can be called
|
|
* by an SCI user on an Serialized General Purpose IO (SGPIO) object.
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // __cplusplus
|
|
|
|
#include <dev/isci/scil/sci_types.h>
|
|
|
|
//Programmable Blink Pattern Durations
|
|
#define SGPIO_BLINK_DURATION_125 0x0
|
|
#define SGPIO_BLINK_DURATION_250 0x1
|
|
#define SGPIO_BLINK_DURATION_375 0x2
|
|
#define SGPIO_BLINK_DURATION_500 0x3
|
|
#define SGPIO_BLINK_DURATION_625 0x4
|
|
#define SGPIO_BLINK_DURATION_750 0x5
|
|
#define SGPIO_BLINK_DURATION_875 0x6
|
|
#define SGPIO_BLINK_DURATION_1000 0x7
|
|
#define SGPIO_BLINK_DURATION_1250 0x8
|
|
#define SGPIO_BLINK_DURATION_1375 0x9
|
|
#define SGPIO_BLINK_DURATION_1500 0xA
|
|
#define SGPIO_BLINK_DURATION_1625 0xB
|
|
#define SGPIO_BLINK_DURATION_1750 0xC
|
|
#define SGPIO_BLINK_DURATION_1875 0xD
|
|
#define SGPIO_BLINK_DURATION_2000 0xF
|
|
|
|
#define ENABLE_SGPIO_FUNCTIONALITY 1
|
|
#define DISABLE_SGPIO_FUNCTIONALITY 0
|
|
|
|
#define SGPIO_HARDWARE_CONTROL 0x00000443
|
|
#define SGPIO_SOFTWARE_CONTROL 0x00000444
|
|
|
|
#define PHY_0_MASK 0x01
|
|
#define PHY_1_MASK 0x02
|
|
#define PHY_2_MASK 0x04
|
|
#define PHY_3_MASK 0x08
|
|
|
|
#define SGODSR_INVERT_BIT 0x4
|
|
|
|
#define SGODSR_ERROR_LED_SHIFT 8
|
|
#define SGODSR_LOCATE_LED_SHIFT 4
|
|
#define SGODSR_ACTIVITY_LED_SHIFT 0
|
|
|
|
#define SGPIO_BLINK_PATTERN_A 0x1
|
|
#define SGPIO_BLINK_PATTERN_B 0x2
|
|
|
|
/**
|
|
* @brief This will set the vendor specific code in the SGPIO Vendor Specific Code
|
|
* register that is sent on the sLoad wire at the start of each
|
|
* bit stream.
|
|
*
|
|
* @param[in] SCI_CONTROLLER_HANDLE_T controller
|
|
* @param]in] vendor_specific_sequence - Vendor specific sequence set in the
|
|
* SGVSCR register.
|
|
*
|
|
*/
|
|
void scic_sgpio_set_vendor_code(
|
|
SCI_CONTROLLER_HANDLE_T controller,
|
|
U8 vendor_specific_sequence
|
|
);
|
|
|
|
/**
|
|
* @brief Use this to set both programmable blink patterns A & B in the
|
|
* SGPBR(Programmable Blink Register). Will set identical patterns
|
|
* on both SGPIO units.
|
|
*
|
|
* @param[in] SCI_CONTROLLER_HANDLE_T controller
|
|
* @param[in] pattern_a_high - High(LED on) duration time for pattern A
|
|
* @param[in] pattern_a_low - Low(LED off) duration time for pattern A
|
|
* @param[in] pattern_b_high - High(LED on) duration time for pattern B
|
|
* @param[in] pattern_b_low - Low(LED off) duration time for pattern B
|
|
*
|
|
*/
|
|
void scic_sgpio_set_blink_patterns(
|
|
SCI_CONTROLLER_HANDLE_T controller,
|
|
U8 pattern_a_low,
|
|
U8 pattern_a_high,
|
|
U8 pattern_b_low,
|
|
U8 pattern_b_high
|
|
);
|
|
|
|
|
|
/**
|
|
* @brief This will set the functionality enable bit in the SGPIO interface
|
|
* control register, when set the bus pins will be used for SGPIO
|
|
* signaling, if not the bus pins are used for direct led control.
|
|
*
|
|
* @param[in] SCI_CONTROLLER_HANDLE_T controller
|
|
* @param[in] BOOL sgpio_mode - indication for SGPIO signaling.
|
|
*
|
|
*/
|
|
void scic_sgpio_set_functionality(
|
|
SCI_CONTROLLER_HANDLE_T controller,
|
|
BOOL sgpio_mode
|
|
);
|
|
|
|
/**
|
|
* @brief Communicates with hardware to set the blink pattern
|
|
* of the error, locate, and activity LED's for phys
|
|
* specified by the phy_mask parameter.
|
|
* Function intend to be used to LEDs management
|
|
* in non-inteligent backplanes.
|
|
*
|
|
* @param[in] SCI_CONTROLLER_HANDLE_T controller
|
|
* @param[in] phy_mask - This field is a bit mask that specifies the phys
|
|
* to be updated.
|
|
* @param[in] error - If TRUE, apply pattern for the error LED
|
|
* @param[in] locate - If TRUE, apply pattern for the locate LED
|
|
* @param[in] activity - If TRUE, apply pattern for the activity LED
|
|
* @param[in] pattern_selection - One of two patterns (A or B).
|
|
* "A" and "B" patterns should be previously defined
|
|
* by scic_sgpio_set_blink_patterns()
|
|
*
|
|
* @return none
|
|
*/
|
|
void scic_sgpio_apply_led_blink_pattern(
|
|
SCI_CONTROLLER_HANDLE_T controller,
|
|
U32 phy_mask,
|
|
BOOL error,
|
|
BOOL locate,
|
|
BOOL activity,
|
|
U8 pattern_selection
|
|
);
|
|
|
|
/**
|
|
* @brief Communicates with hardware to set the blink pattern
|
|
* of the error, locate, and activity LED's for all
|
|
* phys in the port. Function intend to be used to LEDs
|
|
* management in non-inteligent backplanes.
|
|
*
|
|
* @param[in] SCI_CONTROLLER_HANDLE_T controller
|
|
* @param[in] port_handle - port handle is used to identify SGPIO bay
|
|
* @param[in] error - If TRUE, apply pattern for the error LED
|
|
* @param[in] locate - If TRUE, apply pattern for the locate LED
|
|
* @param[in] activity - If TRUE, apply pattern for the activity LED
|
|
* @param[in] pattern_selection - One of two patterns (A or B).
|
|
* "A" and "B" patterns should be previously defined
|
|
* by scic_sgpio_set_blink_patterns()
|
|
*
|
|
* @return none
|
|
*/
|
|
void scic_sgpio_set_led_blink_pattern(
|
|
SCI_CONTROLLER_HANDLE_T controller,
|
|
SCI_PORT_HANDLE_T port_handle,
|
|
BOOL error,
|
|
BOOL locate,
|
|
BOOL activity,
|
|
U8 pattern_selection
|
|
);
|
|
|
|
/**
|
|
* @brief Communicates with hardware to set the state of the error, locate,
|
|
* and activity LED's.
|
|
*
|
|
* @param[in] SCI_CONTROLLER_HANDLE_T controller
|
|
* @param[in] phy_mask - This field is a bit mask that specifies the phys
|
|
* to be updated.
|
|
* @param[in] error - State to be set for the error LED
|
|
* @param[in] locate - State to be set for the locate LED
|
|
* @param[in] activity - State to be set for the activity LED
|
|
*
|
|
* @return none
|
|
*/
|
|
void scic_sgpio_update_led_state(
|
|
SCI_CONTROLLER_HANDLE_T controller,
|
|
U32 phy_mask,
|
|
BOOL error,
|
|
BOOL locate,
|
|
BOOL activity
|
|
);
|
|
|
|
/**
|
|
* @brief Communicates with hardware to set the state of the error, locate,
|
|
* and activity LED's for all phys in the port.
|
|
*
|
|
* @param[in] SCI_CONTROLLER_HANDLE_T controller
|
|
* @param[in] port_handle - port handle is used to identify SGPIO bay
|
|
* @param[in] error - State to be set for the error LED
|
|
* @param[in] locate - State to be set for the locate LED
|
|
* @param[in] activity - State to be set for the activity LED
|
|
*
|
|
* @return none
|
|
*/
|
|
void scic_sgpio_set_led_state(
|
|
SCI_CONTROLLER_HANDLE_T controller,
|
|
SCI_PORT_HANDLE_T port_handle,
|
|
BOOL error,
|
|
BOOL locate,
|
|
BOOL activity
|
|
);
|
|
|
|
/**
|
|
* @brief This will set all Activity LED's to hardware controlled
|
|
*
|
|
* @param[in] BOOL is_hardware_controlled - indication for the Activity LED's
|
|
* to be hardware controlled or driver controlled.
|
|
* @return none
|
|
*/
|
|
void scic_sgpio_set_to_hardware_control(
|
|
SCI_CONTROLLER_HANDLE_T controller,
|
|
BOOL is_hardware_controlled
|
|
);
|
|
|
|
/**
|
|
* @brief Reads and returns the data-in from the SGPIO port for the specified controller.
|
|
* Bits 00:02 - Drive 0 input data
|
|
* Bits 04:06 - Drive 1 input data
|
|
* Bits 08:10 - Drive 2 input data
|
|
* Bits 12:14 - Drive 3 input data
|
|
*
|
|
* @param[in] SCI_CONTROLLER_HANDLE_T controller
|
|
* @return U32 - Value read from SGPIO, 0xffffffff indicates hardware not readable
|
|
*/
|
|
U32 scic_sgpio_read(
|
|
SCI_CONTROLLER_HANDLE_T controller
|
|
);
|
|
|
|
/**
|
|
* @brief Initializes the SCU for Hardware SGPIO LED control.
|
|
*
|
|
* @param[in] SCI_CONTROLLER_HANDLE_T controller
|
|
*/
|
|
void scic_sgpio_hardware_initialize(
|
|
SCI_CONTROLLER_HANDLE_T controller
|
|
);
|
|
/**
|
|
* @brief Initializes the SCU for Software SGPIO signaling of LED control.
|
|
*
|
|
* @param[in] SCI_CONTROLLER_HANDLE_T controller
|
|
*/
|
|
void scic_sgpio_initialize(
|
|
SCI_CONTROLLER_HANDLE_T controller
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif // __cplusplus
|
|
|
|
#endif // _SCIC_SGPIO_H_
|