Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/smartpqi/smartpqi_prototypes.h
/*- | /*- | ||||
* Copyright (c) 2018 Microsemi Corporation. | * Copyright 2016-2021 Microchip Technology, Inc. and/or its subsidiaries. | ||||
* All rights reserved. | |||||
* | * | ||||
* Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
* modification, are permitted provided that the following conditions | * modification, are permitted provided that the following conditions | ||||
* are met: | * are met: | ||||
* 1. Redistributions of source code must retain the above copyright | * 1. Redistributions of source code must retain the above copyright | ||||
* notice, this list of conditions and the following disclaimer. | * notice, this list of conditions and the following disclaimer. | ||||
* 2. Redistributions in binary form must reproduce the above copyright | * 2. Redistributions in binary form must reproduce the above copyright | ||||
* notice, this list of conditions and the following disclaimer in the | * notice, this list of conditions and the following disclaimer in the | ||||
Show All 21 Lines | |||||
/*pqi_init.c */ | /*pqi_init.c */ | ||||
int pqisrc_init(pqisrc_softstate_t *); | int pqisrc_init(pqisrc_softstate_t *); | ||||
void pqisrc_uninit(pqisrc_softstate_t *); | void pqisrc_uninit(pqisrc_softstate_t *); | ||||
void pqisrc_pqi_uninit(pqisrc_softstate_t *); | void pqisrc_pqi_uninit(pqisrc_softstate_t *); | ||||
int pqisrc_process_config_table(pqisrc_softstate_t *); | int pqisrc_process_config_table(pqisrc_softstate_t *); | ||||
int pqisrc_flush_cache(pqisrc_softstate_t *, enum pqisrc_flush_cache_event_type); | int pqisrc_flush_cache(pqisrc_softstate_t *, enum pqisrc_flush_cache_event_type); | ||||
int pqisrc_wait_for_pqi_reset_completion(pqisrc_softstate_t *); | int pqisrc_wait_for_pqi_reset_completion(pqisrc_softstate_t *); | ||||
int pqisrc_wait_for_cmnd_complete(pqisrc_softstate_t *); | inline boolean_t pqisrc_is_firmware_feature_enabled(pqisrc_softstate_t *, | ||||
void pqisrc_complete_internal_cmds(pqisrc_softstate_t *); | struct pqi_conf_table_firmware_features *, uint16_t ); | ||||
/* pqi_sis.c*/ | /* pqi_sis.c*/ | ||||
int pqisrc_sis_init(pqisrc_softstate_t *); | int pqisrc_sis_init(pqisrc_softstate_t *); | ||||
void pqisrc_sis_uninit(pqisrc_softstate_t *); | void pqisrc_sis_uninit(pqisrc_softstate_t *); | ||||
int pqisrc_reenable_sis(pqisrc_softstate_t *); | int pqisrc_reenable_sis(pqisrc_softstate_t *); | ||||
void pqisrc_trigger_nmi_sis(pqisrc_softstate_t *); | void pqisrc_trigger_nmi_sis(pqisrc_softstate_t *); | ||||
void sis_disable_msix(pqisrc_softstate_t *); | void sis_disable_msix(pqisrc_softstate_t *); | ||||
void sis_enable_intx(pqisrc_softstate_t *); | void sis_enable_intx(pqisrc_softstate_t *); | ||||
void sis_disable_intx(pqisrc_softstate_t *softs); | void sis_disable_intx(pqisrc_softstate_t *softs); | ||||
int pqisrc_force_sis(pqisrc_softstate_t *); | int pqisrc_force_sis(pqisrc_softstate_t *); | ||||
int pqisrc_sis_wait_for_db_bit_to_clear(pqisrc_softstate_t *, uint32_t); | int pqisrc_sis_wait_for_db_bit_to_clear(pqisrc_softstate_t *, uint32_t); | ||||
void sis_disable_interrupt(pqisrc_softstate_t*); | void sis_disable_interrupt(pqisrc_softstate_t*); | ||||
/* pqi_queue.c */ | /* pqi_queue.c */ | ||||
int pqisrc_submit_admin_req(pqisrc_softstate_t *, | int pqisrc_submit_admin_req(pqisrc_softstate_t *, | ||||
gen_adm_req_iu_t *, gen_adm_resp_iu_t *); | gen_adm_req_iu_t *, gen_adm_resp_iu_t *); | ||||
int pqisrc_create_admin_queue(pqisrc_softstate_t *); | int pqisrc_create_admin_queue(pqisrc_softstate_t *); | ||||
int pqisrc_destroy_admin_queue(pqisrc_softstate_t *); | int pqisrc_destroy_admin_queue(pqisrc_softstate_t *); | ||||
int pqisrc_create_op_queues(pqisrc_softstate_t *); | int pqisrc_create_op_queues(pqisrc_softstate_t *); | ||||
/* pqi_cmd.c */ | /* pqi_cmd.c */ | ||||
Show All 21 Lines | |||||
void pqisrc_process_io_error_response(pqisrc_softstate_t *, int, uint16_t, struct pqi_io_response *); | void pqisrc_process_io_error_response(pqisrc_softstate_t *, int, uint16_t, struct pqi_io_response *); | ||||
void pqisrc_cleanup_devices(pqisrc_softstate_t *); | void pqisrc_cleanup_devices(pqisrc_softstate_t *); | ||||
void pqisrc_device_mem_free(pqisrc_softstate_t *, pqi_scsi_dev_t *); | void pqisrc_device_mem_free(pqisrc_softstate_t *, pqi_scsi_dev_t *); | ||||
boolean_t pqisrc_is_external_raid_device(pqi_scsi_dev_t *device); | boolean_t pqisrc_is_external_raid_device(pqi_scsi_dev_t *device); | ||||
void pqisrc_free_device(pqisrc_softstate_t * softs,pqi_scsi_dev_t *device); | void pqisrc_free_device(pqisrc_softstate_t * softs,pqi_scsi_dev_t *device); | ||||
void pqisrc_init_targetid_pool(pqisrc_softstate_t *softs); | void pqisrc_init_targetid_pool(pqisrc_softstate_t *softs); | ||||
int pqisrc_alloc_tid(pqisrc_softstate_t *softs); | int pqisrc_alloc_tid(pqisrc_softstate_t *softs); | ||||
void pqisrc_free_tid(pqisrc_softstate_t *softs, int); | void pqisrc_free_tid(pqisrc_softstate_t *softs, int); | ||||
int pqisrc_get_physical_logical_luns(pqisrc_softstate_t *softs, uint8_t cmd, | |||||
reportlun_data_ext_t **buff, size_t *data_length); | |||||
int pqisrc_send_scsi_inquiry(pqisrc_softstate_t *softs, | |||||
uint8_t *scsi3addr, uint16_t vpd_page, uint8_t *buff, int buf_len); | |||||
/* pqi_helper.c */ | /* pqi_helper.c */ | ||||
boolean_t pqisrc_ctrl_offline(pqisrc_softstate_t *); | boolean_t pqisrc_ctrl_offline(pqisrc_softstate_t *); | ||||
void pqisrc_heartbeat_timer_handler(pqisrc_softstate_t *); | void pqisrc_heartbeat_timer_handler(pqisrc_softstate_t *); | ||||
int pqisrc_wait_on_condition(pqisrc_softstate_t *, rcb_t *); | int pqisrc_wait_on_condition(pqisrc_softstate_t *softs, rcb_t *rcb, | ||||
uint32_t timeout); | |||||
boolean_t pqisrc_device_equal(pqi_scsi_dev_t *, pqi_scsi_dev_t *); | boolean_t pqisrc_device_equal(pqi_scsi_dev_t *, pqi_scsi_dev_t *); | ||||
boolean_t pqisrc_is_hba_lunid(uint8_t *); | boolean_t pqisrc_is_hba_lunid(uint8_t *); | ||||
boolean_t pqisrc_is_logical_device(pqi_scsi_dev_t *); | boolean_t pqisrc_is_logical_device(pqi_scsi_dev_t *); | ||||
void pqisrc_sanitize_inquiry_string(unsigned char *, int ); | void pqisrc_sanitize_inquiry_string(unsigned char *, int ); | ||||
void pqisrc_display_device_info(pqisrc_softstate_t *, char *, pqi_scsi_dev_t *); | void pqisrc_display_device_info(pqisrc_softstate_t *, char *, pqi_scsi_dev_t *); | ||||
boolean_t pqisrc_scsi3addr_equal(uint8_t *, uint8_t *); | boolean_t pqisrc_scsi3addr_equal(uint8_t *, uint8_t *); | ||||
void check_struct_sizes(void); | void check_struct_sizes(void); | ||||
char *pqisrc_raidlevel_to_string(uint8_t); | char *pqisrc_raidlevel_to_string(uint8_t); | ||||
void pqisrc_configure_legacy_intx(pqisrc_softstate_t*, boolean_t); | void pqisrc_configure_legacy_intx(pqisrc_softstate_t*, boolean_t); | ||||
void pqisrc_ctrl_diagnostic_options(pqisrc_softstate_t *); | |||||
void pqisrc_wait_for_device_commands_to_complete(pqisrc_softstate_t *, | |||||
pqi_scsi_dev_t *); | |||||
void check_device_pending_commands_to_complete(pqisrc_softstate_t *, | |||||
pqi_scsi_dev_t *); | |||||
uint32_t pqisrc_count_num_scsi_active_requests_on_dev(pqisrc_softstate_t *, | |||||
pqi_scsi_dev_t *); | |||||
/* pqi_response.c */ | /* pqi_response.c */ | ||||
void pqisrc_signal_event(pqisrc_softstate_t *softs, rcb_t *rcb); | void pqisrc_signal_event(pqisrc_softstate_t *softs, rcb_t *rcb); | ||||
void pqisrc_process_internal_raid_response_success(pqisrc_softstate_t *, | void pqisrc_process_internal_raid_response_success(pqisrc_softstate_t *, | ||||
rcb_t *); | rcb_t *); | ||||
void pqisrc_process_internal_raid_response_error(pqisrc_softstate_t *, | void pqisrc_process_internal_raid_response_error(pqisrc_softstate_t *, | ||||
rcb_t *, uint16_t); | rcb_t *, uint16_t); | ||||
void pqisrc_process_io_response_success(pqisrc_softstate_t *, | void pqisrc_process_io_response_success(pqisrc_softstate_t *, | ||||
rcb_t *); | rcb_t *); | ||||
void pqisrc_show_sense_data_full(pqisrc_softstate_t *, rcb_t *, sense_data_u_t *sense_data); | |||||
void pqisrc_process_aio_response_error(pqisrc_softstate_t *, | void pqisrc_process_aio_response_error(pqisrc_softstate_t *, | ||||
rcb_t *, uint16_t); | rcb_t *, uint16_t); | ||||
void pqisrc_process_raid_response_error(pqisrc_softstate_t *, | void pqisrc_process_raid_response_error(pqisrc_softstate_t *, | ||||
rcb_t *, uint16_t); | rcb_t *, uint16_t); | ||||
void pqisrc_process_response_queue(pqisrc_softstate_t *, int); | void pqisrc_process_response_queue(pqisrc_softstate_t *, int); | ||||
/* pqi_request.c */ | /* pqi_request.c */ | ||||
int pqisrc_build_send_vendor_request(pqisrc_softstate_t*, | |||||
pqi_vendor_general_request_t *, | |||||
raid_path_error_info_elem_t *); | |||||
int pqisrc_build_send_io(pqisrc_softstate_t *,rcb_t *); | int pqisrc_build_send_io(pqisrc_softstate_t *,rcb_t *); | ||||
int pqisrc_send_scsi_cmd_raidbypass(pqisrc_softstate_t *softs, | int pqisrc_send_scsi_cmd_raidbypass(pqisrc_softstate_t *softs, | ||||
pqi_scsi_dev_t *device, rcb_t *rcb, uint8_t*); | pqi_scsi_dev_t *device, rcb_t *rcb, uint8_t*); | ||||
int pqisrc_send_tmf(pqisrc_softstate_t *, pqi_scsi_dev_t *, | int pqisrc_send_tmf(pqisrc_softstate_t *, pqi_scsi_dev_t *, | ||||
rcb_t *, int, int); | rcb_t *, rcb_t *, int); | ||||
int pqisrc_write_current_time_to_host_wellness(pqisrc_softstate_t *softs); | int pqisrc_write_current_time_to_host_wellness(pqisrc_softstate_t *softs); | ||||
int pqisrc_write_driver_version_to_host_wellness(pqisrc_softstate_t *softs); | int pqisrc_write_driver_version_to_host_wellness(pqisrc_softstate_t *softs); | ||||
void pqisrc_print_buffer(pqisrc_softstate_t *softs, char *msg, void *user_buf, uint32_t total_len, uint32_t flags); | |||||
char *io_path_to_ascii(IO_PATH_T path); | |||||
/* pqi_event.c*/ | /* pqi_event.c*/ | ||||
int pqisrc_report_event_config(pqisrc_softstate_t *); | int pqisrc_report_event_config(pqisrc_softstate_t *); | ||||
int pqisrc_set_event_config(pqisrc_softstate_t *); | int pqisrc_set_event_config(pqisrc_softstate_t *); | ||||
int pqisrc_process_event_intr_src(pqisrc_softstate_t *,int); | int pqisrc_process_event_intr_src(pqisrc_softstate_t *,int); | ||||
void pqisrc_ack_all_events(void *arg); | void pqisrc_ack_all_events(void *arg); | ||||
void pqisrc_wait_for_rescan_complete(pqisrc_softstate_t *softs); | |||||
void pqisrc_event_worker(void *, int); | |||||
int pqisrc_scsi_setup(struct pqisrc_softstate *); | |||||
void pqisrc_scsi_cleanup(struct pqisrc_softstate *); | |||||
boolean_t pqisrc_update_scsi_sense(const uint8_t *, int, | boolean_t pqisrc_update_scsi_sense(const uint8_t *, int, | ||||
struct sense_header_scsi *); | struct sense_header_scsi *); | ||||
int pqisrc_build_send_raid_request(pqisrc_softstate_t *, pqisrc_raid_req_t *, | int pqisrc_build_send_raid_request(pqisrc_softstate_t *, pqisrc_raid_req_t *, | ||||
void *, size_t, uint8_t, uint16_t, uint8_t *, | void *, size_t, uint8_t, uint16_t, uint8_t *, | ||||
raid_path_error_info_elem_t *); | raid_path_error_info_elem_t *); | ||||
int pqisrc_submit_management_req(pqisrc_softstate_t *, | int pqisrc_submit_management_req(pqisrc_softstate_t *, | ||||
pqi_event_config_request_t *); | pqi_event_config_request_t *); | ||||
Show All 33 Lines | int pqisrc_create_op_ibq(pqisrc_softstate_t *, | ||||
ib_queue_t *); | ib_queue_t *); | ||||
int pqisrc_create_op_aio_ibq(pqisrc_softstate_t *, ib_queue_t *); | int pqisrc_create_op_aio_ibq(pqisrc_softstate_t *, ib_queue_t *); | ||||
int pqisrc_create_op_raid_ibq(pqisrc_softstate_t *, ib_queue_t *); | int pqisrc_create_op_raid_ibq(pqisrc_softstate_t *, ib_queue_t *); | ||||
int pqisrc_alloc_and_create_event_queue(pqisrc_softstate_t *); | int pqisrc_alloc_and_create_event_queue(pqisrc_softstate_t *); | ||||
int pqisrc_alloc_and_create_ib_queues(pqisrc_softstate_t *); | int pqisrc_alloc_and_create_ib_queues(pqisrc_softstate_t *); | ||||
int pqisrc_alloc_and_create_ob_queues(pqisrc_softstate_t *); | int pqisrc_alloc_and_create_ob_queues(pqisrc_softstate_t *); | ||||
int pqisrc_process_task_management_response(pqisrc_softstate_t *, | int pqisrc_process_task_management_response(pqisrc_softstate_t *, | ||||
pqi_tmf_resp_t *); | pqi_tmf_resp_t *); | ||||
void pqisrc_wait_for_rescan_complete(pqisrc_softstate_t *softs); | |||||
/*Device outstanding Io count*/ | |||||
uint64_t pqisrc_increment_device_active_io(pqisrc_softstate_t *, | |||||
pqi_scsi_dev_t *); | |||||
uint64_t pqisrc_decrement_device_active_io(pqisrc_softstate_t *, | |||||
pqi_scsi_dev_t *); | |||||
void pqisrc_init_device_active_io(pqisrc_softstate_t *, | |||||
pqi_scsi_dev_t *); | |||||
uint64_t pqisrc_read_device_active_io(pqisrc_softstate_t *, | |||||
pqi_scsi_dev_t *); | |||||
/* pqi_ioctl.c*/ | /* pqi_ioctl.c*/ | ||||
int | int | ||||
pqisrc_passthru_ioctl(struct pqisrc_softstate *, void *, int); | pqisrc_passthru_ioctl(struct pqisrc_softstate *, void *, int); | ||||
/* Functions Prototypes */ | /* Functions Prototypes */ | ||||
/* FreeBSD_mem.c */ | /* FreeBSD_mem.c */ | ||||
int os_dma_mem_alloc(pqisrc_softstate_t *,struct dma_mem *); | int os_dma_mem_alloc(pqisrc_softstate_t *,struct dma_mem *); | ||||
void os_dma_mem_free(pqisrc_softstate_t *,struct dma_mem *); | void os_dma_mem_free(pqisrc_softstate_t *,struct dma_mem *); | ||||
void *os_mem_alloc(pqisrc_softstate_t *,size_t); | void *os_mem_alloc(pqisrc_softstate_t *,size_t); | ||||
void os_mem_free(pqisrc_softstate_t *,char *,size_t); | void os_mem_free(pqisrc_softstate_t *,char *,size_t); | ||||
void os_resource_free(pqisrc_softstate_t *); | void os_resource_free(pqisrc_softstate_t *); | ||||
int os_dma_setup(pqisrc_softstate_t *); | |||||
int os_dma_destroy(pqisrc_softstate_t *); | |||||
void os_update_dma_attributes(pqisrc_softstate_t *); | |||||
/* FreeBSD intr.c */ | /* FreeBSD intr.c */ | ||||
int os_get_intr_config(pqisrc_softstate_t *); | int os_get_intr_config(pqisrc_softstate_t *); | ||||
int os_setup_intr(pqisrc_softstate_t *); | int os_setup_intr(pqisrc_softstate_t *); | ||||
int os_destroy_intr(pqisrc_softstate_t *); | int os_destroy_intr(pqisrc_softstate_t *); | ||||
int os_get_processor_config(pqisrc_softstate_t *); | int os_get_processor_config(pqisrc_softstate_t *); | ||||
void os_free_intr_config(pqisrc_softstate_t *); | void os_free_intr_config(pqisrc_softstate_t *); | ||||
/* FreeBSD_ioctl.c */ | /* FreeBSD_ioctl.c */ | ||||
int os_copy_to_user(struct pqisrc_softstate *, void *, | int os_copy_to_user(struct pqisrc_softstate *, void *, | ||||
void *, int, int); | void *, int, int); | ||||
int os_copy_from_user(struct pqisrc_softstate *, void *, | int os_copy_from_user(struct pqisrc_softstate *, void *, | ||||
void *, int, int); | void *, int, int); | ||||
int create_char_dev(struct pqisrc_softstate *, int); | int create_char_dev(struct pqisrc_softstate *, int); | ||||
void destroy_char_dev(struct pqisrc_softstate *); | void destroy_char_dev(struct pqisrc_softstate *); | ||||
/* FreeBSD_misc.c*/ | /* FreeBSD_misc.c*/ | ||||
int os_init_spinlock(struct pqisrc_softstate *, struct mtx *, char *); | int os_init_spinlock(struct pqisrc_softstate *, struct mtx *, char *); | ||||
void os_uninit_spinlock(struct mtx *); | void os_uninit_spinlock(struct mtx *); | ||||
int os_create_semaphore(const char *, int,struct sema *); | int os_create_semaphore(const char *, int,struct sema *); | ||||
int os_destroy_semaphore(struct sema *); | int os_destroy_semaphore(struct sema *); | ||||
void os_sema_lock(struct sema *); | void os_sema_lock(struct sema *); | ||||
void os_sema_unlock(struct sema *); | void os_sema_unlock(struct sema *); | ||||
int os_strlcpy(char *dst, char *src, int len); | int os_strlcpy(char *dst, char *src, int len); | ||||
void os_complete_outstanding_cmds_nodevice(pqisrc_softstate_t *); | void os_complete_outstanding_cmds_nodevice(pqisrc_softstate_t *); | ||||
void os_stop_heartbeat_timer(pqisrc_softstate_t *); | void os_stop_heartbeat_timer(pqisrc_softstate_t *); | ||||
void os_start_heartbeat_timer(void *); | void os_start_heartbeat_timer(void *); | ||||
/* FreeBSD_cam.c */ | /* FreeBSD_cam.c */ | ||||
uint8_t os_get_task_attr(rcb_t *); | uint8_t os_get_task_attr(rcb_t *); | ||||
void os_wellness_periodic(void *); | |||||
void smartpqi_target_rescan(struct pqisrc_softstate *); | void smartpqi_target_rescan(struct pqisrc_softstate *); | ||||
void os_rescan_target(struct pqisrc_softstate *, pqi_scsi_dev_t *); | |||||
/* FreeBSD_intr.c FreeBSD_main.c */ | /* FreeBSD_intr.c FreeBSD_main.c */ | ||||
void pqisrc_event_worker(void *, int); | |||||
void os_add_device(pqisrc_softstate_t *, pqi_scsi_dev_t *); | void os_add_device(pqisrc_softstate_t *, pqi_scsi_dev_t *); | ||||
void os_remove_device(pqisrc_softstate_t *, pqi_scsi_dev_t *); | void os_remove_device(pqisrc_softstate_t *, pqi_scsi_dev_t *); | ||||
void os_io_response_success(rcb_t *); | void os_io_response_success(rcb_t *); | ||||
void os_aio_response_error(rcb_t *, aio_path_error_info_elem_t *); | void os_aio_response_error(rcb_t *, aio_path_error_info_elem_t *); | ||||
void smartpqi_adjust_queue_depth(struct cam_path *, uint32_t ); | void smartpqi_adjust_queue_depth(struct cam_path *, uint32_t ); | ||||
void os_raid_response_error(rcb_t *, raid_path_error_info_elem_t *); | void os_raid_response_error(rcb_t *, raid_path_error_info_elem_t *); | ||||
void os_wellness_periodic(void *); | |||||
void os_reset_rcb( rcb_t *); | void os_reset_rcb( rcb_t *); | ||||
int register_sim(struct pqisrc_softstate *, int); | int register_sim(struct pqisrc_softstate *, int); | ||||
void deregister_sim(struct pqisrc_softstate *); | void deregister_sim(struct pqisrc_softstate *); | ||||
int check_for_scsi_opcode(uint8_t *, boolean_t *, uint64_t *, | int check_for_scsi_opcode(uint8_t *, boolean_t *, uint64_t *, | ||||
uint32_t *); | uint32_t *); | ||||
int register_legacy_intr(pqisrc_softstate_t *); | int register_legacy_intr(pqisrc_softstate_t *); | ||||
int register_msix_intr(pqisrc_softstate_t *); | int register_msix_intr(pqisrc_softstate_t *); | ||||
void deregister_pqi_intx(pqisrc_softstate_t *); | void deregister_pqi_intx(pqisrc_softstate_t *); | ||||
void deregister_pqi_msix(pqisrc_softstate_t *); | void deregister_pqi_msix(pqisrc_softstate_t *); | ||||
void os_get_time(struct bmic_host_wellness_time *); | void os_get_time(struct bmic_host_wellness_time *); | ||||
void os_eventtaskqueue_enqueue(pqisrc_softstate_t *); | void os_eventtaskqueue_enqueue(pqisrc_softstate_t *); | ||||
void pqisrc_save_controller_info(struct pqisrc_softstate *); | void pqisrc_save_controller_info(struct pqisrc_softstate *); | ||||
int smartpqi_shutdown(void *); | |||||
/* Domain status conversion */ | |||||
int bsd_status_to_pqi_status(int ); | |||||
#endif // _SMARTPQI_PROTOTYPES_H | #endif // _SMARTPQI_PROTOTYPES_H |