#ifndef _SCI_HOST_H_
#define _SCI_HOST_H_
#include <scsi/sas_ata.h>
#include "remote_device.h"
#include "phy.h"
#include "isci.h"
#include "remote_node_table.h"
#include "registers.h"
#include "unsolicited_frame_control.h"
#include "probe_roms.h"
struct isci_request;
struct scu_task_context;
struct sci_power_control { … };
struct sci_port_configuration_agent;
port_config_fn;
bool is_port_config_apc(struct isci_host *ihost);
bool is_controller_start_complete(struct isci_host *ihost);
struct sci_port_configuration_agent { … };
struct isci_host { … };
enum sci_controller_states { … };
#define SCI_MAX_MSIX_INT …
struct isci_pci_info { … };
static inline struct isci_pci_info *to_pci_info(struct pci_dev *pdev)
{ … }
static inline struct Scsi_Host *to_shost(struct isci_host *ihost)
{ … }
#define for_each_isci_host(id, ihost, pdev) …
static inline void wait_for_start(struct isci_host *ihost)
{ … }
static inline void wait_for_stop(struct isci_host *ihost)
{ … }
static inline void wait_for_device_start(struct isci_host *ihost, struct isci_remote_device *idev)
{ … }
static inline void wait_for_device_stop(struct isci_host *ihost, struct isci_remote_device *idev)
{ … }
static inline struct isci_host *dev_to_ihost(struct domain_device *dev)
{ … }
static inline struct isci_host *idev_to_ihost(struct isci_remote_device *idev)
{ … }
#define ISCI_PEG …
#define ISCI_TAG(seq, tci) …
#define ISCI_TAG_SEQ(tag) …
#define ISCI_TAG_TCI(tag) …
#define ISCI_COALESCE_BASE …
static inline int sci_remote_device_node_count(struct isci_remote_device *idev)
{ … }
#define sci_controller_clear_invalid_phy(controller, phy) …
static inline struct device *scirdev_to_dev(struct isci_remote_device *idev)
{ … }
static inline bool is_a2(struct pci_dev *pdev)
{ … }
static inline bool is_b0(struct pci_dev *pdev)
{ … }
static inline bool is_c0(struct pci_dev *pdev)
{ … }
static inline bool is_c1(struct pci_dev *pdev)
{ … }
enum cable_selections { … };
#define CABLE_OVERRIDE_DISABLED …
static inline int is_cable_select_overridden(void)
{ … }
enum cable_selections decode_cable_selection(struct isci_host *ihost, int phy);
void validate_cable_selections(struct isci_host *ihost);
char *lookup_cable_names(enum cable_selections);
#define SGPIO_HW_CONTROL …
static inline int isci_gpio_count(struct isci_host *ihost)
{ … }
void sci_controller_post_request(struct isci_host *ihost,
u32 request);
void sci_controller_release_frame(struct isci_host *ihost,
u32 frame_index);
void sci_controller_copy_sata_response(void *response_buffer,
void *frame_header,
void *frame_buffer);
enum sci_status sci_controller_allocate_remote_node_context(struct isci_host *ihost,
struct isci_remote_device *idev,
u16 *node_id);
void sci_controller_free_remote_node_context(
struct isci_host *ihost,
struct isci_remote_device *idev,
u16 node_id);
struct isci_request *sci_request_by_tag(struct isci_host *ihost, u16 io_tag);
void sci_controller_power_control_queue_insert(struct isci_host *ihost,
struct isci_phy *iphy);
void sci_controller_power_control_queue_remove(struct isci_host *ihost,
struct isci_phy *iphy);
void sci_controller_link_up(struct isci_host *ihost, struct isci_port *iport,
struct isci_phy *iphy);
void sci_controller_link_down(struct isci_host *ihost, struct isci_port *iport,
struct isci_phy *iphy);
void sci_controller_remote_device_stopped(struct isci_host *ihost,
struct isci_remote_device *idev);
enum sci_status sci_controller_continue_io(struct isci_request *ireq);
int isci_host_scan_finished(struct Scsi_Host *, unsigned long);
void isci_host_start(struct Scsi_Host *);
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);
void ireq_done(struct isci_host *ihost, struct isci_request *ireq, struct sas_task *task);
int isci_host_init(struct isci_host *);
void isci_host_completion_routine(unsigned long data);
void isci_host_deinit(struct isci_host *);
void sci_controller_disable_interrupts(struct isci_host *ihost);
bool sci_controller_has_remote_devices_stopping(struct isci_host *ihost);
void sci_controller_transition_to_ready(struct isci_host *ihost, enum sci_status status);
enum sci_status sci_controller_start_io(
struct isci_host *ihost,
struct isci_remote_device *idev,
struct isci_request *ireq);
enum sci_status sci_controller_start_task(
struct isci_host *ihost,
struct isci_remote_device *idev,
struct isci_request *ireq);
enum sci_status sci_controller_terminate_request(
struct isci_host *ihost,
struct isci_remote_device *idev,
struct isci_request *ireq);
enum sci_status sci_controller_complete_io(
struct isci_host *ihost,
struct isci_remote_device *idev,
struct isci_request *ireq);
void sci_port_configuration_agent_construct(
struct sci_port_configuration_agent *port_agent);
enum sci_status sci_port_configuration_agent_initialize(
struct isci_host *ihost,
struct sci_port_configuration_agent *port_agent);
int isci_gpio_write(struct sas_ha_struct *, u8 reg_type, u8 reg_index,
u8 reg_count, u8 *write_data);
#endif