Blame view
drivers/scsi/isci/host.h
17.1 KB
6f231dda6 isci: Intel(R) C6... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
/* * 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. * * Neither the name of Intel Corporation nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * 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. */ |
ce2b3261b isci: unify const... |
55 |
#ifndef _SCI_HOST_H_ |
6f231dda6 isci: Intel(R) C6... |
56 |
#define _SCI_HOST_H_ |
6f231dda6 isci: Intel(R) C6... |
57 |
#include "remote_device.h" |
ce2b3261b isci: unify const... |
58 |
#include "phy.h" |
12ef65444 isci: additional ... |
59 |
#include "isci.h" |
cc9203bf3 isci: move core/c... |
60 |
#include "remote_node_table.h" |
63a3a15fb isci: uplevel reg... |
61 |
#include "registers.h" |
63a3a15fb isci: uplevel reg... |
62 |
#include "unsolicited_frame_control.h" |
e2f8db509 isci: uplevel por... |
63 |
#include "probe_roms.h" |
cc9203bf3 isci: move core/c... |
64 |
|
5076a1a97 isci: unify isci_... |
65 |
struct isci_request; |
cc9203bf3 isci: move core/c... |
66 |
struct scu_task_context; |
e2f8db509 isci: uplevel por... |
67 |
|
cc9203bf3 isci: move core/c... |
68 |
/** |
89a7301f2 isci: retire scic... |
69 |
* struct sci_power_control - |
cc9203bf3 isci: move core/c... |
70 71 72 73 |
* * This structure defines the fields for managing power control for direct * attached disk devices. */ |
89a7301f2 isci: retire scic... |
74 |
struct sci_power_control { |
cc9203bf3 isci: move core/c... |
75 76 77 78 79 80 81 |
/** * This field is set when the power control timer is running and cleared when * it is not. */ bool timer_started; /** |
0473661a1 isci: convert pow... |
82 |
* Timer to control when the directed attached disks can consume power. |
cc9203bf3 isci: move core/c... |
83 |
*/ |
0473661a1 isci: convert pow... |
84 |
struct sci_timer timer; |
cc9203bf3 isci: move core/c... |
85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
/** * This field is used to keep track of how many phys are put into the * requesters field. */ u8 phys_waiting; /** * This field is used to keep track of how many phys have been granted to consume power */ u8 phys_granted_power; /** * This field is an array of phys that we are waiting on. The phys are direct |
89a7301f2 isci: retire scic... |
99 |
* mapped into requesters via struct sci_phy.phy_index |
cc9203bf3 isci: move core/c... |
100 |
*/ |
852809559 isci: unify isci_... |
101 |
struct isci_phy *requesters[SCI_MAX_PHYS]; |
cc9203bf3 isci: move core/c... |
102 103 |
}; |
89a7301f2 isci: retire scic... |
104 |
struct sci_port_configuration_agent; |
d9dcb4ba7 isci: unify isci_... |
105 |
typedef void (*port_config_fn)(struct isci_host *, |
89a7301f2 isci: retire scic... |
106 |
struct sci_port_configuration_agent *, |
ffe191c92 isci: unify isci_... |
107 |
struct isci_port *, struct isci_phy *); |
e2f8db509 isci: uplevel por... |
108 |
|
89a7301f2 isci: retire scic... |
109 |
struct sci_port_configuration_agent { |
e2f8db509 isci: uplevel por... |
110 111 112 113 114 115 116 117 118 |
u16 phy_configured_mask; u16 phy_ready_mask; struct { u8 min_index; u8 max_index; } phy_valid_port_range[SCI_MAX_PHYS]; bool timer_pending; port_config_fn link_up_handler; port_config_fn link_down_handler; |
ac0eeb4f7 isci: convert por... |
119 |
struct sci_timer timer; |
e2f8db509 isci: uplevel por... |
120 |
}; |
cc9203bf3 isci: move core/c... |
121 |
/** |
d9dcb4ba7 isci: unify isci_... |
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
* isci_host - primary host/controller object * @timer: timeout start/stop operations * @device_table: rni (hw remote node index) to remote device lookup table * @available_remote_nodes: rni allocator * @power_control: manage device spin up * @io_request_sequence: generation number for tci's (task contexts) * @task_context_table: hw task context table * @remote_node_context_table: hw remote node context table * @completion_queue: hw-producer driver-consumer communication ring * @completion_queue_get: tracks the driver 'head' of the ring to notify hw * @logical_port_entries: min({driver|silicon}-supported-port-count) * @remote_node_entries: min({driver|silicon}-supported-node-count) * @task_context_entries: min({driver|silicon}-supported-task-count) * @phy_timer: phy startup timer * @invalid_phy_mask: if an invalid_link_up notification is reported a bit for * the phy index is set so further notifications are not * made. Once the phy reports link up and is made part of a * port then this bit is cleared. |
cc9203bf3 isci: move core/c... |
140 |
*/ |
d9dcb4ba7 isci: unify isci_... |
141 |
struct isci_host { |
e301370ac isci: state machi... |
142 |
struct sci_base_state_machine sm; |
d9dcb4ba7 isci: unify isci_... |
143 |
/* XXX can we time this externally */ |
6cb5853d3 isci: convert sci... |
144 |
struct sci_timer timer; |
d9dcb4ba7 isci: unify isci_... |
145 |
/* XXX drop reference module params directly */ |
89a7301f2 isci: retire scic... |
146 |
struct sci_user_parameters user_parameters; |
d9dcb4ba7 isci: unify isci_... |
147 |
/* XXX no need to be a union */ |
89a7301f2 isci: retire scic... |
148 149 |
struct sci_oem_params oem_parameters; struct sci_port_configuration_agent port_agent; |
78a6f06e0 isci: unify isci_... |
150 |
struct isci_remote_device *device_table[SCI_MAX_REMOTE_DEVICES]; |
89a7301f2 isci: retire scic... |
151 152 |
struct sci_remote_node_table available_remote_nodes; struct sci_power_control power_control; |
dd047c8e2 isci: cleanup tag... |
153 |
u8 io_request_sequence[SCI_MAX_IO_REQUESTS]; |
cc9203bf3 isci: move core/c... |
154 |
struct scu_task_context *task_context_table; |
312e0c245 isci: unify can_q... |
155 |
dma_addr_t task_context_dma; |
cc9203bf3 isci: move core/c... |
156 |
union scu_remote_node_context *remote_node_context_table; |
cc9203bf3 isci: move core/c... |
157 |
u32 *completion_queue; |
cc9203bf3 isci: move core/c... |
158 |
u32 completion_queue_get; |
cc9203bf3 isci: move core/c... |
159 |
u32 logical_port_entries; |
cc9203bf3 isci: move core/c... |
160 |
u32 remote_node_entries; |
cc9203bf3 isci: move core/c... |
161 |
u32 task_context_entries; |
89a7301f2 isci: retire scic... |
162 |
struct sci_unsolicited_frame_control uf_control; |
cc9203bf3 isci: move core/c... |
163 |
|
d9dcb4ba7 isci: unify isci_... |
164 |
/* phy startup */ |
bb3dbdf6c isci: convert phy... |
165 |
struct sci_timer phy_timer; |
d9dcb4ba7 isci: unify isci_... |
166 |
/* XXX kill */ |
cc9203bf3 isci: move core/c... |
167 |
bool phy_startup_timer_pending; |
cc9203bf3 isci: move core/c... |
168 |
u32 next_phy_to_start; |
34a991587 isci: kill 'get/s... |
169 |
/* XXX convert to unsigned long and use bitops */ |
cc9203bf3 isci: move core/c... |
170 |
u8 invalid_phy_mask; |
d9dcb4ba7 isci: unify isci_... |
171 |
/* TODO attempt dynamic interrupt coalescing scheme */ |
cc9203bf3 isci: move core/c... |
172 |
u16 interrupt_coalesce_number; |
cc9203bf3 isci: move core/c... |
173 |
u32 interrupt_coalesce_timeout; |
cc9203bf3 isci: move core/c... |
174 |
struct smu_registers __iomem *smu_registers; |
cc9203bf3 isci: move core/c... |
175 |
struct scu_registers __iomem *scu_registers; |
ac668c697 isci: cleanup/opt... |
176 177 178 |
u16 tci_head; u16 tci_tail; u16 tci_pool[SCI_MAX_IO_REQUESTS]; |
6f231dda6 isci: Intel(R) C6... |
179 |
int id; /* unique within a given pci device */ |
6f231dda6 isci: Intel(R) C6... |
180 |
struct isci_phy phys[SCI_MAX_PHYS]; |
e531381e2 isci: unify port ... |
181 |
struct isci_port ports[SCI_MAX_PORTS + 1]; /* includes dummy port */ |
6f231dda6 isci: Intel(R) C6... |
182 |
struct sas_ha_struct sas_ha; |
6f231dda6 isci: Intel(R) C6... |
183 |
spinlock_t state_lock; |
6f231dda6 isci: Intel(R) C6... |
184 |
struct pci_dev *pdev; |
6f231dda6 isci: Intel(R) C6... |
185 |
enum isci_status status; |
0cf89d1d2 isci: cleanup "st... |
186 187 188 189 |
#define IHOST_START_PENDING 0 #define IHOST_STOP_PENDING 1 unsigned long flags; wait_queue_head_t eventq; |
6f231dda6 isci: Intel(R) C6... |
190 191 |
struct Scsi_Host *shost; struct tasklet_struct completion_tasklet; |
6f231dda6 isci: Intel(R) C6... |
192 |
struct list_head requests_to_complete; |
11b00c194 isci: Changes in ... |
193 |
struct list_head requests_to_errorback; |
6f231dda6 isci: Intel(R) C6... |
194 |
spinlock_t scic_lock; |
db0562509 isci: preallocate... |
195 |
struct isci_request *reqs[SCI_MAX_IO_REQUESTS]; |
57f20f4ed isci: unify remot... |
196 |
struct isci_remote_device devices[SCI_MAX_REMOTE_DEVICES]; |
6f231dda6 isci: Intel(R) C6... |
197 |
}; |
6f231dda6 isci: Intel(R) C6... |
198 |
/** |
89a7301f2 isci: retire scic... |
199 |
* enum sci_controller_states - This enumeration depicts all the states |
cc9203bf3 isci: move core/c... |
200 201 |
* for the common controller state machine. */ |
89a7301f2 isci: retire scic... |
202 |
enum sci_controller_states { |
cc9203bf3 isci: move core/c... |
203 204 205 |
/** * Simply the initial state for the base controller state machine. */ |
e301370ac isci: state machi... |
206 |
SCIC_INITIAL = 0, |
cc9203bf3 isci: move core/c... |
207 208 209 210 211 212 213 214 |
/** * This state indicates that the controller is reset. The memory for * the controller is in it's initial state, but the controller requires * initialization. * This state is entered from the INITIAL state. * This state is entered from the RESETTING state. */ |
e301370ac isci: state machi... |
215 |
SCIC_RESET, |
cc9203bf3 isci: move core/c... |
216 217 218 219 220 221 222 |
/** * This state is typically an action state that indicates the controller * is in the process of initialization. In this state no new IO operations * are permitted. * This state is entered from the RESET state. */ |
e301370ac isci: state machi... |
223 |
SCIC_INITIALIZING, |
cc9203bf3 isci: move core/c... |
224 225 226 227 228 229 |
/** * This state indicates that the controller has been successfully * initialized. In this state no new IO operations are permitted. * This state is entered from the INITIALIZING state. */ |
e301370ac isci: state machi... |
230 |
SCIC_INITIALIZED, |
cc9203bf3 isci: move core/c... |
231 232 233 234 235 236 |
/** * This state indicates the the controller is in the process of becoming * ready (i.e. starting). In this state no new IO operations are permitted. * This state is entered from the INITIALIZED state. */ |
e301370ac isci: state machi... |
237 |
SCIC_STARTING, |
cc9203bf3 isci: move core/c... |
238 239 240 241 242 243 |
/** * This state indicates the controller is now ready. Thus, the user * is able to perform IO operations on the controller. * This state is entered from the STARTING state. */ |
e301370ac isci: state machi... |
244 |
SCIC_READY, |
cc9203bf3 isci: move core/c... |
245 246 247 248 249 250 251 252 253 254 |
/** * This state is typically an action state that indicates the controller * is in the process of resetting. Thus, the user is unable to perform * IO operations on the controller. A reset is considered destructive in * most cases. * This state is entered from the READY state. * This state is entered from the FAILED state. * This state is entered from the STOPPED state. */ |
e301370ac isci: state machi... |
255 |
SCIC_RESETTING, |
cc9203bf3 isci: move core/c... |
256 257 258 259 260 261 262 |
/** * This state indicates that the controller is in the process of stopping. * In this state no new IO operations are permitted, but existing IO * operations are allowed to complete. * This state is entered from the READY state. */ |
e301370ac isci: state machi... |
263 |
SCIC_STOPPING, |
cc9203bf3 isci: move core/c... |
264 265 266 267 268 269 |
/** * This state indicates that the controller has successfully been stopped. * In this state no new IO operations are permitted. * This state is entered from the STOPPING state. */ |
e301370ac isci: state machi... |
270 |
SCIC_STOPPED, |
cc9203bf3 isci: move core/c... |
271 272 273 274 275 276 277 278 279 |
/** * This state indicates that the controller could not successfully be * initialized. In this state no new IO operations are permitted. * This state is entered from the INITIALIZING state. * This state is entered from the STARTING state. * This state is entered from the STOPPING state. * This state is entered from the RESETTING state. */ |
e301370ac isci: state machi... |
280 |
SCIC_FAILED, |
cc9203bf3 isci: move core/c... |
281 |
}; |
cc9203bf3 isci: move core/c... |
282 |
/** |
6f231dda6 isci: Intel(R) C6... |
283 284 285 286 287 288 289 290 |
* struct isci_pci_info - This class represents the pci function containing the * controllers. Depending on PCI SKU, there could be up to 2 controllers in * the PCI function. */ #define SCI_MAX_MSIX_INT (SCI_NUM_MSI_X_INT*SCI_MAX_CONTROLLERS) struct isci_pci_info { struct msix_entry msix_entries[SCI_MAX_MSIX_INT]; |
b329aff10 isci: kill isci_h... |
291 |
struct isci_host *hosts[SCI_MAX_CONTROLLERS]; |
d044af17a isci: Add support... |
292 |
struct isci_orom *orom; |
6f231dda6 isci: Intel(R) C6... |
293 294 295 296 297 298 |
}; static inline struct isci_pci_info *to_pci_info(struct pci_dev *pdev) { return pci_get_drvdata(pdev); } |
b329aff10 isci: kill isci_h... |
299 300 301 302 |
#define for_each_isci_host(id, ihost, pdev) \ for (id = 0, ihost = to_pci_info(pdev)->hosts[id]; \ id < ARRAY_SIZE(to_pci_info(pdev)->hosts) && ihost; \ ihost = to_pci_info(pdev)->hosts[++id]) |
6f231dda6 isci: Intel(R) C6... |
303 |
|
cc9203bf3 isci: move core/c... |
304 |
static inline enum isci_status isci_host_get_state(struct isci_host *isci_host) |
6f231dda6 isci: Intel(R) C6... |
305 306 307 |
{ return isci_host->status; } |
cc9203bf3 isci: move core/c... |
308 309 |
static inline void isci_host_change_state(struct isci_host *isci_host, enum isci_status status) |
6f231dda6 isci: Intel(R) C6... |
310 311 312 313 314 315 316 317 318 319 320 321 322 |
{ unsigned long flags; dev_dbg(&isci_host->pdev->dev, "%s: isci_host = %p, state = 0x%x", __func__, isci_host, status); spin_lock_irqsave(&isci_host->state_lock, flags); isci_host->status = status; spin_unlock_irqrestore(&isci_host->state_lock, flags); } |
0cf89d1d2 isci: cleanup "st... |
323 324 325 326 327 328 329 330 331 |
static inline void wait_for_start(struct isci_host *ihost) { wait_event(ihost->eventq, !test_bit(IHOST_START_PENDING, &ihost->flags)); } static inline void wait_for_stop(struct isci_host *ihost) { wait_event(ihost->eventq, !test_bit(IHOST_STOP_PENDING, &ihost->flags)); } |
6ad31fec3 isci: replace isc... |
332 333 334 335 336 337 338 |
static inline void wait_for_device_start(struct isci_host *ihost, struct isci_remote_device *idev) { wait_event(ihost->eventq, !test_bit(IDEV_START_PENDING, &idev->flags)); } static inline void wait_for_device_stop(struct isci_host *ihost, struct isci_remote_device *idev) { |
d9c37390c isci: preallocate... |
339 |
wait_event(ihost->eventq, !test_bit(IDEV_STOP_PENDING, &idev->flags)); |
6ad31fec3 isci: replace isc... |
340 |
} |
0cf89d1d2 isci: cleanup "st... |
341 |
|
4393aa4e6 isci: fix fragile... |
342 343 344 345 |
static inline struct isci_host *dev_to_ihost(struct domain_device *dev) { return dev->port->ha->lldd_ha; } |
6f231dda6 isci: Intel(R) C6... |
346 |
|
34a991587 isci: kill 'get/s... |
347 348 |
/* we always use protocol engine group zero */ #define ISCI_PEG 0 |
6f231dda6 isci: Intel(R) C6... |
349 |
|
89a7301f2 isci: retire scic... |
350 |
/* see sci_controller_io_tag_allocate|free for how seq and tci are built */ |
dd047c8e2 isci: cleanup tag... |
351 |
#define ISCI_TAG(seq, tci) (((u16) (seq)) << 12 | tci) |
cc9203bf3 isci: move core/c... |
352 |
|
dd047c8e2 isci: cleanup tag... |
353 354 355 |
/* these are returned by the hardware, so sanitize them */ #define ISCI_TAG_SEQ(tag) (((tag) >> 12) & (SCI_MAX_SEQ-1)) #define ISCI_TAG_TCI(tag) ((tag) & (SCI_MAX_IO_REQUESTS-1)) |
cc9203bf3 isci: move core/c... |
356 |
|
9b4be5289 [SCSI] isci: dyna... |
357 358 |
/* interrupt coalescing baseline: 9 == 3 to 5us interrupt delay per command */ #define ISCI_COALESCE_BASE 9 |
cc9203bf3 isci: move core/c... |
359 |
/* expander attached sata devices require 3 rnc slots */ |
89a7301f2 isci: retire scic... |
360 |
static inline int sci_remote_device_node_count(struct isci_remote_device *idev) |
cc9203bf3 isci: move core/c... |
361 |
{ |
78a6f06e0 isci: unify isci_... |
362 |
struct domain_device *dev = idev->domain_dev; |
cc9203bf3 isci: move core/c... |
363 364 |
if ((dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTOCOL_STP)) && |
78a6f06e0 isci: unify isci_... |
365 |
!idev->is_direct_attached) |
cc9203bf3 isci: move core/c... |
366 367 368 369 370 |
return SCU_STP_REMOTE_NODE_COUNT; return SCU_SSP_REMOTE_NODE_COUNT; } /** |
89a7301f2 isci: retire scic... |
371 |
* sci_controller_clear_invalid_phy() - |
cc9203bf3 isci: move core/c... |
372 373 374 375 376 |
* * This macro will clear the bit in the invalid phy mask for this controller * object. This is used to control messages reported for invalid link up * notifications. */ |
89a7301f2 isci: retire scic... |
377 |
#define sci_controller_clear_invalid_phy(controller, phy) \ |
cc9203bf3 isci: move core/c... |
378 |
((controller)->invalid_phy_mask &= ~(1 << (phy)->phy_index)) |
852809559 isci: unify isci_... |
379 |
static inline struct device *sciphy_to_dev(struct isci_phy *iphy) |
cc9203bf3 isci: move core/c... |
380 |
{ |
cc9203bf3 isci: move core/c... |
381 382 383 384 385 386 |
if (!iphy || !iphy->isci_port || !iphy->isci_port->isci_host) return NULL; return &iphy->isci_port->isci_host->pdev->dev; } |
ffe191c92 isci: unify isci_... |
387 |
static inline struct device *sciport_to_dev(struct isci_port *iport) |
cc9203bf3 isci: move core/c... |
388 |
{ |
cc9203bf3 isci: move core/c... |
389 390 391 392 393 394 |
if (!iport || !iport->isci_host) return NULL; return &iport->isci_host->pdev->dev; } |
78a6f06e0 isci: unify isci_... |
395 |
static inline struct device *scirdev_to_dev(struct isci_remote_device *idev) |
cc9203bf3 isci: move core/c... |
396 |
{ |
cc9203bf3 isci: move core/c... |
397 398 399 400 401 |
if (!idev || !idev->isci_port || !idev->isci_port->isci_host) return NULL; return &idev->isci_port->isci_host->pdev->dev; } |
dc00c8b69 isci: cleanup sil... |
402 |
static inline bool is_a2(struct pci_dev *pdev) |
cc9203bf3 isci: move core/c... |
403 |
{ |
dc00c8b69 isci: cleanup sil... |
404 405 406 |
if (pdev->revision < 4) return true; return false; |
cc9203bf3 isci: move core/c... |
407 |
} |
dc00c8b69 isci: cleanup sil... |
408 |
static inline bool is_b0(struct pci_dev *pdev) |
cc9203bf3 isci: move core/c... |
409 |
{ |
dc00c8b69 isci: cleanup sil... |
410 411 412 |
if (pdev->revision == 4) return true; return false; |
dbb0743a5 isci: Added suppo... |
413 |
} |
dc00c8b69 isci: cleanup sil... |
414 |
static inline bool is_c0(struct pci_dev *pdev) |
dbb0743a5 isci: Added suppo... |
415 |
{ |
dc00c8b69 isci: cleanup sil... |
416 417 418 |
if (pdev->revision >= 5) return true; return false; |
cc9203bf3 isci: move core/c... |
419 |
} |
ad4f4c1de [SCSI] isci: init... |
420 421 422 423 424 425 426 427 428 429 430 |
/* set hw control for 'activity', even though active enclosures seem to drive * the activity led on their own. Skip setting FSENG control on 'status' due * to unexpected operation and 'error' due to not being a supported automatic * FSENG output */ #define SGPIO_HW_CONTROL 0x00000443 static inline int isci_gpio_count(struct isci_host *ihost) { return ARRAY_SIZE(ihost->scu_registers->peg0.sgpio.output_data_select); } |
89a7301f2 isci: retire scic... |
431 |
void sci_controller_post_request(struct isci_host *ihost, |
cc9203bf3 isci: move core/c... |
432 |
u32 request); |
89a7301f2 isci: retire scic... |
433 |
void sci_controller_release_frame(struct isci_host *ihost, |
cc9203bf3 isci: move core/c... |
434 |
u32 frame_index); |
89a7301f2 isci: retire scic... |
435 |
void sci_controller_copy_sata_response(void *response_buffer, |
cc9203bf3 isci: move core/c... |
436 437 |
void *frame_header, void *frame_buffer); |
89a7301f2 isci: retire scic... |
438 |
enum sci_status sci_controller_allocate_remote_node_context(struct isci_host *ihost, |
78a6f06e0 isci: unify isci_... |
439 |
struct isci_remote_device *idev, |
cc9203bf3 isci: move core/c... |
440 |
u16 *node_id); |
89a7301f2 isci: retire scic... |
441 |
void sci_controller_free_remote_node_context( |
d9dcb4ba7 isci: unify isci_... |
442 |
struct isci_host *ihost, |
78a6f06e0 isci: unify isci_... |
443 |
struct isci_remote_device *idev, |
cc9203bf3 isci: move core/c... |
444 |
u16 node_id); |
cc9203bf3 isci: move core/c... |
445 |
|
89a7301f2 isci: retire scic... |
446 |
struct isci_request *sci_request_by_tag(struct isci_host *ihost, |
cc9203bf3 isci: move core/c... |
447 |
u16 io_tag); |
89a7301f2 isci: retire scic... |
448 |
void sci_controller_power_control_queue_insert( |
d9dcb4ba7 isci: unify isci_... |
449 |
struct isci_host *ihost, |
852809559 isci: unify isci_... |
450 |
struct isci_phy *iphy); |
cc9203bf3 isci: move core/c... |
451 |
|
89a7301f2 isci: retire scic... |
452 |
void sci_controller_power_control_queue_remove( |
d9dcb4ba7 isci: unify isci_... |
453 |
struct isci_host *ihost, |
852809559 isci: unify isci_... |
454 |
struct isci_phy *iphy); |
cc9203bf3 isci: move core/c... |
455 |
|
89a7301f2 isci: retire scic... |
456 |
void sci_controller_link_up( |
d9dcb4ba7 isci: unify isci_... |
457 |
struct isci_host *ihost, |
ffe191c92 isci: unify isci_... |
458 |
struct isci_port *iport, |
852809559 isci: unify isci_... |
459 |
struct isci_phy *iphy); |
cc9203bf3 isci: move core/c... |
460 |
|
89a7301f2 isci: retire scic... |
461 |
void sci_controller_link_down( |
d9dcb4ba7 isci: unify isci_... |
462 |
struct isci_host *ihost, |
ffe191c92 isci: unify isci_... |
463 |
struct isci_port *iport, |
852809559 isci: unify isci_... |
464 |
struct isci_phy *iphy); |
cc9203bf3 isci: move core/c... |
465 |
|
89a7301f2 isci: retire scic... |
466 |
void sci_controller_remote_device_stopped( |
d9dcb4ba7 isci: unify isci_... |
467 |
struct isci_host *ihost, |
78a6f06e0 isci: unify isci_... |
468 |
struct isci_remote_device *idev); |
cc9203bf3 isci: move core/c... |
469 |
|
89a7301f2 isci: retire scic... |
470 |
void sci_controller_copy_task_context( |
d9dcb4ba7 isci: unify isci_... |
471 |
struct isci_host *ihost, |
5076a1a97 isci: unify isci_... |
472 |
struct isci_request *ireq); |
cc9203bf3 isci: move core/c... |
473 |
|
89a7301f2 isci: retire scic... |
474 |
void sci_controller_register_setup(struct isci_host *ihost); |
cc9203bf3 isci: move core/c... |
475 |
|
89a7301f2 isci: retire scic... |
476 |
enum sci_status sci_controller_continue_io(struct isci_request *ireq); |
cc9203bf3 isci: move core/c... |
477 478 |
int isci_host_scan_finished(struct Scsi_Host *, unsigned long); void isci_host_scan_start(struct Scsi_Host *); |
312e0c245 isci: unify can_q... |
479 480 481 |
u16 isci_alloc_tag(struct isci_host *ihost); enum sci_status isci_free_tag(struct isci_host *ihost, u16 io_tag); void isci_tci_free(struct isci_host *ihost, u16 tci); |
6f231dda6 isci: Intel(R) C6... |
482 483 484 485 486 487 488 489 490 491 492 493 |
int isci_host_init(struct isci_host *); void isci_host_init_controller_names( struct isci_host *isci_host, unsigned int controller_idx); void isci_host_deinit( struct isci_host *); void isci_host_port_link_up( struct isci_host *, |
ffe191c92 isci: unify isci_... |
494 |
struct isci_port *, |
852809559 isci: unify isci_... |
495 |
struct isci_phy *); |
6f231dda6 isci: Intel(R) C6... |
496 497 498 499 500 501 |
int isci_host_dev_found(struct domain_device *); void isci_host_remote_device_start_complete( struct isci_host *, struct isci_remote_device *, enum sci_status); |
89a7301f2 isci: retire scic... |
502 |
void sci_controller_disable_interrupts( |
d9dcb4ba7 isci: unify isci_... |
503 |
struct isci_host *ihost); |
cc9203bf3 isci: move core/c... |
504 |
|
89a7301f2 isci: retire scic... |
505 |
enum sci_status sci_controller_start_io( |
d9dcb4ba7 isci: unify isci_... |
506 |
struct isci_host *ihost, |
78a6f06e0 isci: unify isci_... |
507 |
struct isci_remote_device *idev, |
5076a1a97 isci: unify isci_... |
508 |
struct isci_request *ireq); |
cc9203bf3 isci: move core/c... |
509 |
|
89a7301f2 isci: retire scic... |
510 |
enum sci_task_status sci_controller_start_task( |
d9dcb4ba7 isci: unify isci_... |
511 |
struct isci_host *ihost, |
78a6f06e0 isci: unify isci_... |
512 |
struct isci_remote_device *idev, |
5076a1a97 isci: unify isci_... |
513 |
struct isci_request *ireq); |
cc9203bf3 isci: move core/c... |
514 |
|
89a7301f2 isci: retire scic... |
515 |
enum sci_status sci_controller_terminate_request( |
d9dcb4ba7 isci: unify isci_... |
516 |
struct isci_host *ihost, |
78a6f06e0 isci: unify isci_... |
517 |
struct isci_remote_device *idev, |
5076a1a97 isci: unify isci_... |
518 |
struct isci_request *ireq); |
cc9203bf3 isci: move core/c... |
519 |
|
89a7301f2 isci: retire scic... |
520 |
enum sci_status sci_controller_complete_io( |
d9dcb4ba7 isci: unify isci_... |
521 |
struct isci_host *ihost, |
78a6f06e0 isci: unify isci_... |
522 |
struct isci_remote_device *idev, |
5076a1a97 isci: unify isci_... |
523 |
struct isci_request *ireq); |
cc9203bf3 isci: move core/c... |
524 |
|
89a7301f2 isci: retire scic... |
525 526 |
void sci_port_configuration_agent_construct( struct sci_port_configuration_agent *port_agent); |
e2f8db509 isci: uplevel por... |
527 |
|
89a7301f2 isci: retire scic... |
528 |
enum sci_status sci_port_configuration_agent_initialize( |
d9dcb4ba7 isci: unify isci_... |
529 |
struct isci_host *ihost, |
89a7301f2 isci: retire scic... |
530 |
struct sci_port_configuration_agent *port_agent); |
ad4f4c1de [SCSI] isci: init... |
531 532 533 |
int isci_gpio_write(struct sas_ha_struct *, u8 reg_type, u8 reg_index, u8 reg_count, u8 *write_data); |
cc9203bf3 isci: move core/c... |
534 |
#endif |