probe_roms.h revision 07373a5caa29e4159ef1ea5e72985ddaf013519a
1d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams/*
2d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * This file is provided under a dual BSD/GPLv2 license.  When using or
3d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * redistributing this file, you may do so under either license.
4d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *
5d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * GPL LICENSE SUMMARY
6d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *
7d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
8d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *
9d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * This program is free software; you can redistribute it and/or modify
10d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * it under the terms of version 2 of the GNU General Public License as
11d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * published by the Free Software Foundation.
12d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *
13d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * This program is distributed in the hope that it will be useful, but
14d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * WITHOUT ANY WARRANTY; without even the implied warranty of
15d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * General Public License for more details.
17d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *
18d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * You should have received a copy of the GNU General Public License
19d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * along with this program; if not, write to the Free Software
20d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
21d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * The full GNU General Public License is included in this distribution
22d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * in the file called LICENSE.GPL.
23d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *
24d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * BSD LICENSE
25d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *
26d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
27d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * All rights reserved.
28d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *
29d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * Redistribution and use in source and binary forms, with or without
30d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * modification, are permitted provided that the following conditions
31d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * are met:
32d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *
33d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *   * Redistributions of source code must retain the above copyright
34d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *     notice, this list of conditions and the following disclaimer.
35d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *   * Redistributions in binary form must reproduce the above copyright
36d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *     notice, this list of conditions and the following disclaimer in
37d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *     the documentation and/or other materials provided with the
38d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *     distribution.
39d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *   * Neither the name of Intel Corporation nor the names of its
40d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *     contributors may be used to endorse or promote products derived
41d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *     from this software without specific prior written permission.
42d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams *
43d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
44d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
45d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
46d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
47d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
48d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
49d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
50d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
51d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
52d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
53d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
54d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams */
55d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#ifndef _ISCI_PROBE_ROMS_H_
56d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#define _ISCI_PROBE_ROMS_H_
57d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
58d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#ifdef __KERNEL__
59d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#include <linux/firmware.h>
60d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#include <linux/pci.h>
61d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
62d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williamsstruct isci_orom *isci_request_oprom(struct pci_dev *pdev);
63d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
64d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williamsunion scic_oem_parameters;
65d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williamsstruct isci_orom;
66d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
67d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williamsenum sci_status isci_parse_oem_parameters(
68d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	union scic_oem_parameters *oem_params,
69d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	struct isci_orom *orom,
70d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	int scu_index);
71d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williamsstruct isci_orom *isci_request_firmware(struct pci_dev *pdev, const struct firmware *fw);
728db37aabaceb3dcd18754c1e782d4474e4052c81Dave Jiangstruct isci_orom *isci_get_efi_var(struct pci_dev *pdev);
73d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#else
74d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#define SCI_MAX_PORTS 4
75d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#define SCI_MAX_PHYS 4
76d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#endif
77d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
78d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#define ISCI_FW_NAME		"isci/isci_firmware.bin"
79d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
80d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#define ROMSIGNATURE		0xaa55
81d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
82d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#define ISCI_ROM_SIG		"ISCUOEMB"
83d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#define ISCI_ROM_SIG_SIZE	8
84d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
85d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#define ISCI_EFI_VENDOR_GUID	NULL_GUID
86d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#define ISCI_EFI_ATTRIBUTES	0
87d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#define ISCI_EFI_VAR_NAME	"isci_oemb"
88d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
8907373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski/* Allowed PORT configuration modes APC Automatic PORT configuration mode is
9007373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski * defined by the OEM configuration parameters providing no PHY_MASK parameters
9107373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski * for any PORT. i.e. There are no phys assigned to any of the ports at start.
9207373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski * MPC Manual PORT configuration mode is defined by the OEM configuration
9307373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski * parameters providing a PHY_MASK value for any PORT.  It is assumed that any
9407373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski * PORT with no PHY_MASK is an invalid port and not all PHYs must be assigned.
9507373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski * A PORT_PHY mask that assigns just a single PHY to a port and no other PHYs
9607373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski * being assigned is sufficient to declare manual PORT configuration.
9707373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski */
9807373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowskienum SCIC_PORT_CONFIGURATION_MODE {
9907373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski	SCIC_PORT_MANUAL_CONFIGURATION_MODE = 0,
10007373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski	SCIC_PORT_AUTOMATIC_CONFIGURATION_MODE = 1
10107373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski};
10207373a5caa29e4159ef1ea5e72985ddaf013519aHenryk Dembkowski
103d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williamsstruct sci_bios_oem_param_block_hdr {
104d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	uint8_t signature[ISCI_ROM_SIG_SIZE];
105d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	uint16_t total_block_length;
106d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	uint8_t hdr_length;
107d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	uint8_t version;
108d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	uint8_t preboot_source;
109d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	uint8_t num_elements;
110d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	uint8_t element_length;
111d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	uint8_t reserved[8];
112d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams} __attribute__ ((packed));
113d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
114d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williamsstruct scic_sds_oem_params {
115d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	struct {
116d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams		uint8_t mode_type;
117d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams		uint8_t max_concurrent_dev_spin_up;
118d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams		uint8_t do_enable_ssc;
119d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams		uint8_t reserved;
120d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	} controller;
121d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
122d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	struct {
123d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams		uint8_t phy_mask;
124d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	} ports[SCI_MAX_PORTS];
125d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
126d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	struct sci_phy_oem_params {
127d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams		struct {
128d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams			uint32_t high;
129d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams			uint32_t low;
130d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams		} sas_address;
131d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
132d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams		uint32_t afe_tx_amp_control0;
133d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams		uint32_t afe_tx_amp_control1;
134d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams		uint32_t afe_tx_amp_control2;
135d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams		uint32_t afe_tx_amp_control3;
136d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	} phys[SCI_MAX_PHYS];
137d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams} __attribute__ ((packed));
138d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
139d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williamsstruct isci_orom {
140d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	struct sci_bios_oem_param_block_hdr hdr;
141d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams	struct scic_sds_oem_params ctrl[2];
142d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams} __attribute__ ((packed));
143d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams
144d044af17aacd03a1f4fced1af4b7570d205c8fd9Dan Williams#endif
145