diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-05-10 05:28:46 -0400 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2011-07-03 07:04:47 -0400 |
commit | e2f8db509fdd354bb7a68c86515e9d2d8909ccc9 (patch) | |
tree | e27f2d33290b0c6f7ca20e408ce7f8ff9309dc43 /drivers/scsi/isci/probe_roms.h | |
parent | d35bc1bd18ab9e986cfb67c5a281a70cfd717f05 (diff) |
isci: uplevel port infrastructure
* Move port configuration agent implementation
* Merge core/scic_sds_port.[ch] into port.[ch]
Reported-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi/isci/probe_roms.h')
-rw-r--r-- | drivers/scsi/isci/probe_roms.h | 124 |
1 files changed, 118 insertions, 6 deletions
diff --git a/drivers/scsi/isci/probe_roms.h b/drivers/scsi/isci/probe_roms.h index f4ef19ac281c..7e3e6d7a0a47 100644 --- a/drivers/scsi/isci/probe_roms.h +++ b/drivers/scsi/isci/probe_roms.h | |||
@@ -60,15 +60,117 @@ | |||
60 | #include <linux/pci.h> | 60 | #include <linux/pci.h> |
61 | #include "isci.h" | 61 | #include "isci.h" |
62 | 62 | ||
63 | struct isci_orom *isci_request_oprom(struct pci_dev *pdev); | 63 | #define SCIC_SDS_PARM_NO_SPEED 0 |
64 | |||
65 | /* generation 1 (i.e. 1.5 Gb/s) */ | ||
66 | #define SCIC_SDS_PARM_GEN1_SPEED 1 | ||
67 | |||
68 | /* generation 2 (i.e. 3.0 Gb/s) */ | ||
69 | #define SCIC_SDS_PARM_GEN2_SPEED 2 | ||
70 | |||
71 | /* generation 3 (i.e. 6.0 Gb/s) */ | ||
72 | #define SCIC_SDS_PARM_GEN3_SPEED 3 | ||
73 | #define SCIC_SDS_PARM_MAX_SPEED SCIC_SDS_PARM_GEN3_SPEED | ||
74 | |||
75 | /* parameters that can be set by module parameters */ | ||
76 | struct scic_sds_user_parameters { | ||
77 | struct sci_phy_user_params { | ||
78 | /** | ||
79 | * This field specifies the NOTIFY (ENABLE SPIN UP) primitive | ||
80 | * insertion frequency for this phy index. | ||
81 | */ | ||
82 | u32 notify_enable_spin_up_insertion_frequency; | ||
83 | |||
84 | /** | ||
85 | * This method specifies the number of transmitted DWORDs within which | ||
86 | * to transmit a single ALIGN primitive. This value applies regardless | ||
87 | * of what type of device is attached or connection state. A value of | ||
88 | * 0 indicates that no ALIGN primitives will be inserted. | ||
89 | */ | ||
90 | u16 align_insertion_frequency; | ||
91 | |||
92 | /** | ||
93 | * This method specifies the number of transmitted DWORDs within which | ||
94 | * to transmit 2 ALIGN primitives. This applies for SAS connections | ||
95 | * only. A minimum value of 3 is required for this field. | ||
96 | */ | ||
97 | u16 in_connection_align_insertion_frequency; | ||
98 | |||
99 | /** | ||
100 | * This field indicates the maximum speed generation to be utilized | ||
101 | * by phys in the supplied port. | ||
102 | * - A value of 1 indicates generation 1 (i.e. 1.5 Gb/s). | ||
103 | * - A value of 2 indicates generation 2 (i.e. 3.0 Gb/s). | ||
104 | * - A value of 3 indicates generation 3 (i.e. 6.0 Gb/s). | ||
105 | */ | ||
106 | u8 max_speed_generation; | ||
107 | |||
108 | } phys[SCI_MAX_PHYS]; | ||
109 | |||
110 | /** | ||
111 | * This field specifies the maximum number of direct attached devices | ||
112 | * that can have power supplied to them simultaneously. | ||
113 | */ | ||
114 | u8 max_number_concurrent_device_spin_up; | ||
115 | |||
116 | /** | ||
117 | * This field specifies the number of seconds to allow a phy to consume | ||
118 | * power before yielding to another phy. | ||
119 | * | ||
120 | */ | ||
121 | u8 phy_spin_up_delay_interval; | ||
122 | |||
123 | /** | ||
124 | * These timer values specifies how long a link will remain open with no | ||
125 | * activity in increments of a microsecond, it can be in increments of | ||
126 | * 100 microseconds if the upper most bit is set. | ||
127 | * | ||
128 | */ | ||
129 | u16 stp_inactivity_timeout; | ||
130 | u16 ssp_inactivity_timeout; | ||
131 | |||
132 | /** | ||
133 | * These timer values specifies how long a link will remain open in increments | ||
134 | * of 100 microseconds. | ||
135 | * | ||
136 | */ | ||
137 | u16 stp_max_occupancy_timeout; | ||
138 | u16 ssp_max_occupancy_timeout; | ||
139 | |||
140 | /** | ||
141 | * This timer value specifies how long a link will remain open with no | ||
142 | * outbound traffic in increments of a microsecond. | ||
143 | * | ||
144 | */ | ||
145 | u8 no_outbound_task_timeout; | ||
146 | |||
147 | }; | ||
148 | |||
149 | /* XXX kill this union */ | ||
150 | union scic_user_parameters { | ||
151 | /** | ||
152 | * This field specifies the user parameters specific to the | ||
153 | * Storage Controller Unit (SCU) Driver Standard (SDS) version | ||
154 | * 1. | ||
155 | */ | ||
156 | struct scic_sds_user_parameters sds1; | ||
157 | }; | ||
158 | |||
159 | #define SCIC_SDS_PARM_PHY_MASK_MIN 0x0 | ||
160 | #define SCIC_SDS_PARM_PHY_MASK_MAX 0xF | ||
161 | #define MAX_CONCURRENT_DEVICE_SPIN_UP_COUNT 4 | ||
162 | |||
163 | struct scic_sds_oem_params; | ||
164 | int scic_oem_parameters_validate(struct scic_sds_oem_params *oem); | ||
64 | 165 | ||
65 | union scic_oem_parameters; | 166 | union scic_oem_parameters; |
66 | struct isci_orom; | 167 | void scic_oem_parameters_get(struct scic_sds_controller *scic, |
168 | union scic_oem_parameters *oem); | ||
67 | 169 | ||
68 | enum sci_status isci_parse_oem_parameters( | 170 | struct isci_orom; |
69 | union scic_oem_parameters *oem_params, | 171 | struct isci_orom *isci_request_oprom(struct pci_dev *pdev); |
70 | struct isci_orom *orom, | 172 | enum sci_status isci_parse_oem_parameters(union scic_oem_parameters *oem, |
71 | int scu_index); | 173 | struct isci_orom *orom, int scu_index); |
72 | struct isci_orom *isci_request_firmware(struct pci_dev *pdev, const struct firmware *fw); | 174 | struct isci_orom *isci_request_firmware(struct pci_dev *pdev, const struct firmware *fw); |
73 | struct isci_orom *isci_get_efi_var(struct pci_dev *pdev); | 175 | struct isci_orom *isci_get_efi_var(struct pci_dev *pdev); |
74 | 176 | ||
@@ -153,6 +255,16 @@ struct scic_sds_oem_params { | |||
153 | } phys[SCI_MAX_PHYS]; | 255 | } phys[SCI_MAX_PHYS]; |
154 | } __attribute__ ((packed)); | 256 | } __attribute__ ((packed)); |
155 | 257 | ||
258 | /* XXX kill this union */ | ||
259 | union scic_oem_parameters { | ||
260 | /** | ||
261 | * This field specifies the OEM parameters specific to the | ||
262 | * Storage Controller Unit (SCU) Driver Standard (SDS) version | ||
263 | * 1. | ||
264 | */ | ||
265 | struct scic_sds_oem_params sds1; | ||
266 | }; | ||
267 | |||
156 | struct isci_orom { | 268 | struct isci_orom { |
157 | struct sci_bios_oem_param_block_hdr hdr; | 269 | struct sci_bios_oem_param_block_hdr hdr; |
158 | struct scic_sds_oem_params ctrl[SCI_MAX_CONTROLLERS]; | 270 | struct scic_sds_oem_params ctrl[SCI_MAX_CONTROLLERS]; |