ahci_ctl_t
ahci_log_fatal_error_message(ahci_ctl_t *ahci_ctlp, uint8_t port,
ahci_dump_commands(ahci_ctl_t *ahci_ctlp, uint8_t port,
ahci_log_serror_message(ahci_ctl_t *ahci_ctlp, uint8_t port,
ahci_get_ahci_addr(ahci_ctl_t *ahci_ctlp, sata_device_t *sd,
ahci_log(ahci_ctl_t *ahci_ctlp, uint_t level, char *fmt, ...)
ahci_ctl_t *ahci_ctlp;
ahci_em_set_led(ahci_ctl_t *ahci_ctlp, uint8_t port, ahci_em_led_state_t desire)
ahci_ctl_t *aelta_ctl;
ahci_ctl_t *ahci_ctlp = arg;
ahci_em_init(ahci_ctl_t *ahci_ctlp)
ahci_em_ioctl_get(ahci_ctl_t *ahci_ctlp, intptr_t arg)
ahci_em_ioctl_set(ahci_ctl_t *ahci_ctlp, intptr_t arg)
ahci_ctl_t *ahci_ctlp;
ahci_em_quiesce(ahci_ctl_t *ahci_ctlp)
ahci_em_suspend(ahci_ctl_t *ahci_ctlp)
ahci_em_resume(ahci_ctl_t *ahci_ctlp)
ahci_em_fini(ahci_ctl_t *ahci_ctlp)
ahci_ctl_t *ahci_ctlp;
ahci_ctl_t *ahci_ctlp;
static int ahci_register_sata_hba_tran(ahci_ctl_t *, uint32_t);
ahci_register_sata_hba_tran(ahci_ctl_t *ahci_ctlp, uint32_t cap_status)
static int ahci_unregister_sata_hba_tran(ahci_ctl_t *);
ahci_unregister_sata_hba_tran(ahci_ctl_t *ahci_ctlp)
ahci_ctl_t *ahci_ctlp;
static void ahci_fm_init(ahci_ctl_t *);
static void ahci_fm_fini(ahci_ctl_t *);
void ahci_fm_ereport(ahci_ctl_t *, char *);
static int ahci_check_all_handle(ahci_ctl_t *);
static int ahci_check_ctl_handle(ahci_ctl_t *);
static int ahci_check_port_handle(ahci_ctl_t *, int);
static int ahci_setup_port_base_addresses(ahci_ctl_t *, ahci_port_t *);
static int ahci_alloc_ports_state(ahci_ctl_t *);
static void ahci_dealloc_ports_state(ahci_ctl_t *);
static int ahci_alloc_port_state(ahci_ctl_t *, uint8_t);
static void ahci_dealloc_port_state(ahci_ctl_t *, uint8_t);
static int ahci_alloc_rcvd_fis(ahci_ctl_t *, ahci_port_t *);
ahci_ctl_t *ahci_ctlp;
static int ahci_alloc_cmd_list(ahci_ctl_t *, ahci_port_t *);
static void ahci_dealloc_cmd_list(ahci_ctl_t *, ahci_port_t *);
static int ahci_alloc_cmd_tables(ahci_ctl_t *, ahci_port_t *);
static void ahci_dealloc_cmd_tables(ahci_ctl_t *, ahci_port_t *);
static void ahci_alloc_pmult(ahci_ctl_t *, ahci_port_t *);
static void ahci_dealloc_pmult(ahci_ctl_t *, ahci_port_t *);
static int ahci_initialize_controller(ahci_ctl_t *);
static void ahci_uninitialize_controller(ahci_ctl_t *);
static int ahci_initialize_port(ahci_ctl_t *, ahci_port_t *, ahci_addr_t *);
static int ahci_config_space_init(ahci_ctl_t *);
static void ahci_staggered_spin_up(ahci_ctl_t *, uint8_t);
static void ahci_drain_ports_taskq(ahci_ctl_t *);
static int ahci_rdwr_pmult(ahci_ctl_t *, ahci_addr_t *, uint8_t, uint32_t *,
static int ahci_read_pmult(ahci_ctl_t *, ahci_addr_t *, uint8_t, uint32_t *);
static int ahci_write_pmult(ahci_ctl_t *, ahci_addr_t *, uint8_t, uint32_t);
static int ahci_update_pmult_pscr(ahci_ctl_t *, ahci_addr_t *,
static int ahci_update_pmult_gscr(ahci_ctl_t *, ahci_addr_t *,
static int ahci_initialize_pmult(ahci_ctl_t *, ahci_port_t *, ahci_addr_t *,
static int ahci_initialize_pmport(ahci_ctl_t *, ahci_port_t *, ahci_addr_t *);
ahci_do_sync_start(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
static int ahci_probe_pmult(ahci_ctl_t *, ahci_port_t *, ahci_addr_t *);
static int ahci_probe_pmport(ahci_ctl_t *, ahci_port_t *, ahci_addr_t *,
static void ahci_disable_interface_pm(ahci_ctl_t *, uint8_t);
static int ahci_start_port(ahci_ctl_t *, ahci_port_t *, uint8_t);
static void ahci_find_dev_signature(ahci_ctl_t *, ahci_port_t *,
static void ahci_update_sata_registers(ahci_ctl_t *, uint8_t, sata_device_t *);
static int ahci_deliver_satapkt(ahci_ctl_t *, ahci_port_t *,
ahci_claim_free_slot(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
static int ahci_do_sync_start(ahci_ctl_t *, ahci_port_t *,
static int ahci_claim_free_slot(ahci_ctl_t *, ahci_port_t *,
static int ahci_software_reset(ahci_ctl_t *, ahci_port_t *, ahci_addr_t *);
static int ahci_hba_reset(ahci_ctl_t *);
static int ahci_port_reset(ahci_ctl_t *, ahci_port_t *, ahci_addr_t *);
ahci_deliver_satapkt(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
static int ahci_pmport_reset(ahci_ctl_t *, ahci_port_t *, ahci_addr_t *);
static void ahci_reject_all_abort_pkts(ahci_ctl_t *, ahci_port_t *, uint8_t);
static int ahci_reset_device_reject_pkts(ahci_ctl_t *, ahci_port_t *,
static int ahci_reset_pmdevice_reject_pkts(ahci_ctl_t *, ahci_port_t *,
static int ahci_reset_port_reject_pkts(ahci_ctl_t *, ahci_port_t *,
static int ahci_reset_hba_reject_pkts(ahci_ctl_t *);
static int ahci_put_port_into_notrunning_state(ahci_ctl_t *, ahci_port_t *,
static int ahci_restart_port_wait_till_ready(ahci_ctl_t *, ahci_port_t *,
static void ahci_mop_commands(ahci_ctl_t *, ahci_port_t *, uint32_t,
static uint32_t ahci_get_rdlogext_data(ahci_ctl_t *, ahci_port_t *, uint8_t);
static void ahci_get_rqsense_data(ahci_ctl_t *, ahci_port_t *,
static void ahci_fatal_error_recovery_handler(ahci_ctl_t *, ahci_port_t *,
static void ahci_pmult_error_recovery_handler(ahci_ctl_t *, ahci_port_t *,
static void ahci_timeout_pkts(ahci_ctl_t *, ahci_port_t *,
static void ahci_watchdog_handler(ahci_ctl_t *);
static void ahci_port_intr(ahci_ctl_t *, ahci_port_t *, uint8_t);
static int ahci_add_intrs(ahci_ctl_t *, int);
static void ahci_rem_intrs(ahci_ctl_t *);
static void ahci_enable_all_intrs(ahci_ctl_t *);
static void ahci_disable_all_intrs(ahci_ctl_t *);
static void ahci_enable_port_intrs(ahci_ctl_t *, uint8_t);
static void ahci_disable_port_intrs(ahci_ctl_t *, uint8_t);
static int ahci_intr_cmd_cmplt(ahci_ctl_t *, ahci_port_t *, uint8_t);
static int ahci_intr_set_device_bits(ahci_ctl_t *, ahci_port_t *, uint8_t);
static int ahci_intr_ncq_events(ahci_ctl_t *, ahci_port_t *, ahci_addr_t *);
ahci_ctl_t *ahci_ctlp;
static int ahci_intr_pmult_sntf_events(ahci_ctl_t *, ahci_port_t *, uint8_t);
static int ahci_intr_port_connect_change(ahci_ctl_t *, ahci_port_t *, uint8_t);
static int ahci_intr_device_mechanical_presence_status(ahci_ctl_t *,
static int ahci_intr_phyrdy_change(ahci_ctl_t *, ahci_port_t *, uint8_t);
static int ahci_intr_non_fatal_error(ahci_ctl_t *, ahci_port_t *,
static int ahci_intr_fatal_error(ahci_ctl_t *, ahci_port_t *,
static int ahci_intr_cold_port_detect(ahci_ctl_t *, ahci_port_t *, uint8_t);
static void ahci_get_ahci_addr(ahci_ctl_t *, sata_device_t *, ahci_addr_t *);
static void ahci_log_fatal_error_message(ahci_ctl_t *, uint8_t, uint32_t);
static void ahci_dump_commands(ahci_ctl_t *, uint8_t, uint32_t);
static void ahci_log_serror_message(ahci_ctl_t *, uint8_t, uint32_t, int);
static void ahci_log(ahci_ctl_t *, uint_t, char *, ...);
ahci_reset_device_reject_pkts(ahci_ctl_t *ahci_ctlp,
static boolean_t ahci_em_init(ahci_ctl_t *);
static void ahci_em_fini(ahci_ctl_t *);
static void ahci_em_suspend(ahci_ctl_t *);
static void ahci_em_resume(ahci_ctl_t *);
ahci_reset_pmdevice_reject_pkts(ahci_ctl_t *ahci_ctlp,
ahci_reset_port_reject_pkts(ahci_ctl_t *ahci_ctlp,
ahci_reset_hba_reject_pkts(ahci_ctl_t *ahci_ctlp)
ahci_ctl_t *ahci_ctlp;
ahci_ctl_t *ahci_ctlp;
ahci_ctl_t *ahci_ctlp;
ahci_reject_all_abort_pkts(ahci_ctl_t *ahci_ctlp,
ahci_fm_init(ahci_ctl_t *ahci_ctlp)
ahci_fm_fini(ahci_ctl_t *ahci_ctlp)
ahci_fm_ereport(ahci_ctl_t *ahci_ctlp, char *detail)
ahci_check_all_handle(ahci_ctl_t *ahci_ctlp)
ahci_check_ctl_handle(ahci_ctl_t *ahci_ctlp)
ahci_check_port_handle(ahci_ctl_t *ahci_ctlp, int port)
ahci_alloc_ports_state(ahci_ctl_t *ahci_ctlp)
ahci_dealloc_ports_state(ahci_ctl_t *ahci_ctlp)
ahci_drain_ports_taskq(ahci_ctl_t *ahci_ctlp)
ahci_initialize_controller(ahci_ctl_t *ahci_ctlp)
ahci_uninitialize_controller(ahci_ctl_t *ahci_ctlp)
ahci_alloc_pmult(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
ahci_dealloc_pmult(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
ahci_staggered_spin_up(ahci_ctl_t *ahci_ctlp, uint8_t port)
ahci_initialize_port(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_config_space_init(ahci_ctl_t *ahci_ctlp)
ahci_rdwr_pmult(ahci_ctl_t *ahci_ctlp, ahci_addr_t *addrp,
ahci_read_pmult(ahci_ctl_t *ahci_ctlp, ahci_addr_t *addrp,
ahci_write_pmult(ahci_ctl_t *ahci_ctlp, ahci_addr_t *addrp,
ahci_update_pmult_gscr(ahci_ctl_t *ahci_ctlp, ahci_addr_t *addrp,
ahci_update_pmult_pscr(ahci_ctl_t *ahci_ctlp, ahci_addr_t *addrp,
ahci_initialize_pmult(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_initialize_pmport(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_probe_pmult(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_probe_pmport(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_software_reset(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ret = ddi_soft_state_init(&ahci_statep, sizeof (ahci_ctl_t), 0);
ahci_port_reset(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_pmport_reset(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_hba_reset(ahci_ctl_t *ahci_ctlp)
ahci_find_dev_signature(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_ctl_t *ahci_ctlp = NULL;
ahci_disable_interface_pm(ahci_ctl_t *ahci_ctlp, uint8_t port)
ahci_start_port(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp, uint8_t port)
ahci_setup_port_base_addresses(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
ahci_alloc_port_state(ahci_ctl_t *ahci_ctlp, uint8_t port)
ahci_dealloc_port_state(ahci_ctl_t *ahci_ctlp, uint8_t port)
ahci_alloc_rcvd_fis(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
ahci_alloc_cmd_list(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
ahci_dealloc_cmd_list(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
ahci_alloc_cmd_tables(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
ahci_dealloc_cmd_tables(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp)
ahci_update_sata_registers(ahci_ctl_t *ahci_ctlp, uint8_t port,
ahci_port_intr(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp, uint8_t port)
ahci_ctl_t *ahci_ctlp = (ahci_ctl_t *)arg1;
ahci_intr_cmd_cmplt(ahci_ctl_t *ahci_ctlp,
ahci_intr_set_device_bits(ahci_ctl_t *ahci_ctlp,
ahci_intr_ncq_events(ahci_ctl_t *ahci_ctlp,
ahci_intr_pmult_sntf_events(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_intr_port_connect_change(ahci_ctl_t *ahci_ctlp,
ahci_intr_device_mechanical_presence_status(ahci_ctl_t *ahci_ctlp,
ahci_intr_phyrdy_change(ahci_ctl_t *ahci_ctlp,
ahci_intr_non_fatal_error(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_intr_fatal_error(ahci_ctl_t *ahci_ctlp,
ahci_intr_cold_port_detect(ahci_ctl_t *ahci_ctlp,
ahci_enable_port_intrs(ahci_ctl_t *ahci_ctlp, uint8_t port)
ahci_enable_all_intrs(ahci_ctl_t *ahci_ctlp)
ahci_disable_port_intrs(ahci_ctl_t *ahci_ctlp, uint8_t port)
ahci_disable_all_intrs(ahci_ctl_t *ahci_ctlp)
ahci_add_intrs(ahci_ctl_t *ahci_ctlp, int intr_type)
ahci_rem_intrs(ahci_ctl_t *ahci_ctlp)
ahci_put_port_into_notrunning_state(ahci_ctl_t *ahci_ctlp,
ahci_restart_port_wait_till_ready(ahci_ctl_t *ahci_ctlp,
ahci_mop_commands(ahci_ctl_t *ahci_ctlp,
ahci_get_rdlogext_data(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_get_rqsense_data(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_fatal_error_recovery_handler(ahci_ctl_t *ahci_ctlp,
ahci_pmult_error_recovery_handler(ahci_ctl_t *ahci_ctlp,
ahci_ctl_t *ahci_ctlp;
ahci_timeout_pkts(ahci_ctl_t *ahci_ctlp, ahci_port_t *ahci_portp,
ahci_watchdog_handler(ahci_ctl_t *ahci_ctlp)
_NOTE(READ_ONLY_DATA(ahci_ctl_t::ahcictl_ports))
_NOTE(READ_ONLY_DATA(ahci_ctl_t::ahcictl_cport_to_port))
_NOTE(READ_ONLY_DATA(ahci_ctl_t::ahcictl_port_to_cport))
_NOTE(MUTEX_PROTECTS_DATA(ahci_ctl_t::ahcictl_mutex,
ahci_ctl_t::ahcictl_power_level))
_NOTE(MUTEX_PROTECTS_DATA(ahci_ctl_t::ahcictl_mutex,
ahci_ctl_t::ahcictl_flags))
_NOTE(MUTEX_PROTECTS_DATA(ahci_ctl_t::ahcictl_mutex,
ahci_ctl_t::ahcictl_timeout_id))