11e66f787SSean Bruno /*-
27ea28254SJohn Hall  * Copyright 2016-2023 Microchip Technology, Inc. and/or its subsidiaries.
31e66f787SSean Bruno  *
41e66f787SSean Bruno  * Redistribution and use in source and binary forms, with or without
51e66f787SSean Bruno  * modification, are permitted provided that the following conditions
61e66f787SSean Bruno  * are met:
71e66f787SSean Bruno  * 1. Redistributions of source code must retain the above copyright
81e66f787SSean Bruno  *    notice, this list of conditions and the following disclaimer.
91e66f787SSean Bruno  * 2. Redistributions in binary form must reproduce the above copyright
101e66f787SSean Bruno  *    notice, this list of conditions and the following disclaimer in the
111e66f787SSean Bruno  *    documentation and/or other materials provided with the distribution.
121e66f787SSean Bruno  *
131e66f787SSean Bruno  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
141e66f787SSean Bruno  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
151e66f787SSean Bruno  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
161e66f787SSean Bruno  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
171e66f787SSean Bruno  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
181e66f787SSean Bruno  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
191e66f787SSean Bruno  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
201e66f787SSean Bruno  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
211e66f787SSean Bruno  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
221e66f787SSean Bruno  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
231e66f787SSean Bruno  * SUCH DAMAGE.
241e66f787SSean Bruno  */
251e66f787SSean Bruno 
261e66f787SSean Bruno 
271e66f787SSean Bruno #ifndef _PQI_PROTOTYPES_H
281e66f787SSean Bruno #define _PQI_PROTOTYPES_H
291e66f787SSean Bruno 
301e66f787SSean Bruno /* Function prototypes */
311e66f787SSean Bruno 
327ea28254SJohn Hall /*smartpqi_init.c */
331e66f787SSean Bruno int pqisrc_init(pqisrc_softstate_t *);
341e66f787SSean Bruno void pqisrc_uninit(pqisrc_softstate_t *);
351e66f787SSean Bruno void pqisrc_pqi_uninit(pqisrc_softstate_t *);
361e66f787SSean Bruno int pqisrc_process_config_table(pqisrc_softstate_t *);
371e66f787SSean Bruno int pqisrc_flush_cache(pqisrc_softstate_t *, enum pqisrc_flush_cache_event_type);
381e66f787SSean Bruno int pqisrc_wait_for_pqi_reset_completion(pqisrc_softstate_t *);
397ea28254SJohn Hall int pqisrc_wait_for_cmnd_complete(pqisrc_softstate_t *);
407ea28254SJohn Hall void pqisrc_complete_internal_cmds(pqisrc_softstate_t *);
417ea28254SJohn Hall void sanity_check_os_behavior(pqisrc_softstate_t *);
421e66f787SSean Bruno 
437ea28254SJohn Hall 
447ea28254SJohn Hall /* smartpqi_sis.c*/
451e66f787SSean Bruno int pqisrc_sis_init(pqisrc_softstate_t *);
461e66f787SSean Bruno void pqisrc_sis_uninit(pqisrc_softstate_t *);
471e66f787SSean Bruno int pqisrc_reenable_sis(pqisrc_softstate_t *);
481e66f787SSean Bruno void pqisrc_trigger_nmi_sis(pqisrc_softstate_t *);
491e66f787SSean Bruno void sis_disable_msix(pqisrc_softstate_t *);
50b17f4335SSean Bruno void sis_enable_intx(pqisrc_softstate_t *);
51b17f4335SSean Bruno void sis_disable_intx(pqisrc_softstate_t *softs);
521e66f787SSean Bruno int pqisrc_force_sis(pqisrc_softstate_t *);
531e66f787SSean Bruno int pqisrc_sis_wait_for_db_bit_to_clear(pqisrc_softstate_t *, uint32_t);
54b17f4335SSean Bruno void sis_disable_interrupt(pqisrc_softstate_t*);
551e66f787SSean Bruno 
569fac68fcSPAPANI SRIKANTH 
577ea28254SJohn Hall /* smartpqi_queue.c */
581e66f787SSean Bruno int pqisrc_submit_admin_req(pqisrc_softstate_t *,
591e66f787SSean Bruno 			    gen_adm_req_iu_t *, gen_adm_resp_iu_t *);
601e66f787SSean Bruno int pqisrc_create_admin_queue(pqisrc_softstate_t *);
611e66f787SSean Bruno int pqisrc_destroy_admin_queue(pqisrc_softstate_t *);
621e66f787SSean Bruno int pqisrc_create_op_queues(pqisrc_softstate_t *);
637ea28254SJohn Hall int pqisrc_allocate_and_init_inbound_q(pqisrc_softstate_t *, ib_queue_t *,
647ea28254SJohn Hall       char *);
657ea28254SJohn Hall int pqisrc_allocate_and_init_outbound_q(pqisrc_softstate_t *, ob_queue_t *,
667ea28254SJohn Hall       char *);
671e66f787SSean Bruno 
687ea28254SJohn Hall /* smartpqi_cmd.c */
691e66f787SSean Bruno int pqisrc_submit_cmnd(pqisrc_softstate_t *,ib_queue_t *,void *);
701e66f787SSean Bruno 
717ea28254SJohn Hall /* smartpqi_tag.c */
721e66f787SSean Bruno #ifndef LOCKFREE_STACK
731e66f787SSean Bruno int pqisrc_init_taglist(pqisrc_softstate_t *,pqi_taglist_t *,uint32_t);
741e66f787SSean Bruno void pqisrc_destroy_taglist(pqisrc_softstate_t *,pqi_taglist_t *);
751e66f787SSean Bruno void pqisrc_put_tag(pqi_taglist_t *,uint32_t);
761e66f787SSean Bruno uint32_t pqisrc_get_tag(pqi_taglist_t *);
771e66f787SSean Bruno #else
781e66f787SSean Bruno int pqisrc_init_taglist(pqisrc_softstate_t *, lockless_stack_t *, uint32_t);
791e66f787SSean Bruno void pqisrc_destroy_taglist(pqisrc_softstate_t *, lockless_stack_t *);
801e66f787SSean Bruno void pqisrc_put_tag(lockless_stack_t *,uint32_t);
811e66f787SSean Bruno uint32_t pqisrc_get_tag(lockless_stack_t *);
821e66f787SSean Bruno #endif /* LOCKFREE_STACK */
831e66f787SSean Bruno 
847ea28254SJohn Hall /* smartpqi_discovery.c */
851e66f787SSean Bruno void pqisrc_remove_device(pqisrc_softstate_t *, pqi_scsi_dev_t *);
867ea28254SJohn Hall boolean_t pqisrc_add_softs_entry(pqisrc_softstate_t *softs, pqi_scsi_dev_t *device,
877ea28254SJohn Hall 	uint8_t *scsi3addr);
881e66f787SSean Bruno int pqisrc_get_ctrl_fw_version(pqisrc_softstate_t *);
891e66f787SSean Bruno int pqisrc_rescan_devices(pqisrc_softstate_t *);
901e66f787SSean Bruno int pqisrc_scan_devices(pqisrc_softstate_t *);
911e66f787SSean Bruno void pqisrc_cleanup_devices(pqisrc_softstate_t *);
921e66f787SSean Bruno void pqisrc_device_mem_free(pqisrc_softstate_t *, pqi_scsi_dev_t *);
931e66f787SSean Bruno boolean_t pqisrc_is_external_raid_device(pqi_scsi_dev_t *device);
941e66f787SSean Bruno void pqisrc_free_device(pqisrc_softstate_t * softs,pqi_scsi_dev_t *device);
957ea28254SJohn Hall void pqisrc_init_bitmap(pqisrc_softstate_t *softs);
967ea28254SJohn Hall void pqisrc_remove_target_bit(pqisrc_softstate_t *softs, int target);
977ea28254SJohn Hall int pqisrc_find_avail_target(pqisrc_softstate_t *softs);
987ea28254SJohn Hall int pqisrc_find_device_list_index(pqisrc_softstate_t *softs,
997ea28254SJohn Hall 	pqi_scsi_dev_t *device);
1007ea28254SJohn Hall int pqisrc_find_btl_list_index(pqisrc_softstate_t *softs,
1017ea28254SJohn Hall 	int bus, int target, int lun);
1027ea28254SJohn Hall int pqisrc_delete_softs_entry(pqisrc_softstate_t *softs,
1037ea28254SJohn Hall 	pqi_scsi_dev_t *device);
1049fac68fcSPAPANI SRIKANTH int pqisrc_get_physical_logical_luns(pqisrc_softstate_t *softs, uint8_t cmd,
1059fac68fcSPAPANI SRIKANTH 	reportlun_data_ext_t **buff, size_t *data_length);
1069fac68fcSPAPANI SRIKANTH int pqisrc_send_scsi_inquiry(pqisrc_softstate_t *softs,
1079fac68fcSPAPANI SRIKANTH 	uint8_t *scsi3addr, uint16_t vpd_page, uint8_t *buff, int buf_len);
1087ea28254SJohn Hall int pqisrc_simple_dma_alloc(pqisrc_softstate_t *, struct dma_mem *, size_t,
1097ea28254SJohn Hall    sgt_t *);
1107ea28254SJohn Hall int pqisrc_prepare_send_raid(pqisrc_softstate_t *, pqisrc_raid_req_t *,
1117ea28254SJohn Hall    void *, size_t , uint8_t *, raid_path_error_info_elem_t *);
1121e66f787SSean Bruno 
1137ea28254SJohn Hall 
1147ea28254SJohn Hall /* smartpqi_helper.c */
1151e66f787SSean Bruno boolean_t pqisrc_ctrl_offline(pqisrc_softstate_t *);
1161e66f787SSean Bruno void pqisrc_heartbeat_timer_handler(pqisrc_softstate_t *);
1179fac68fcSPAPANI SRIKANTH int pqisrc_wait_on_condition(pqisrc_softstate_t *softs, rcb_t *rcb,
1189fac68fcSPAPANI SRIKANTH 	uint32_t timeout);
1191e66f787SSean Bruno boolean_t pqisrc_device_equal(pqi_scsi_dev_t *, pqi_scsi_dev_t *);
1201e66f787SSean Bruno boolean_t pqisrc_is_hba_lunid(uint8_t *);
1211e66f787SSean Bruno boolean_t pqisrc_is_logical_device(pqi_scsi_dev_t *);
1221e66f787SSean Bruno void pqisrc_sanitize_inquiry_string(unsigned char *, int );
1231e66f787SSean Bruno void pqisrc_display_device_info(pqisrc_softstate_t *, char *, pqi_scsi_dev_t *);
1241e66f787SSean Bruno boolean_t pqisrc_scsi3addr_equal(uint8_t *, uint8_t *);
1251e66f787SSean Bruno void check_struct_sizes(void);
1261e66f787SSean Bruno char *pqisrc_raidlevel_to_string(uint8_t);
127b17f4335SSean Bruno void pqisrc_configure_legacy_intx(pqisrc_softstate_t*, boolean_t);
1289fac68fcSPAPANI SRIKANTH void pqisrc_ctrl_diagnostic_options(pqisrc_softstate_t *);
1299fac68fcSPAPANI SRIKANTH void pqisrc_wait_for_device_commands_to_complete(pqisrc_softstate_t *,
1309fac68fcSPAPANI SRIKANTH 		pqi_scsi_dev_t *);
1317ea28254SJohn Hall int pqisrc_QuerySenseFeatures(pqisrc_softstate_t *);
1329fac68fcSPAPANI SRIKANTH void check_device_pending_commands_to_complete(pqisrc_softstate_t *,
1339fac68fcSPAPANI SRIKANTH 		pqi_scsi_dev_t *);
1349fac68fcSPAPANI SRIKANTH uint32_t pqisrc_count_num_scsi_active_requests_on_dev(pqisrc_softstate_t *,
1359fac68fcSPAPANI SRIKANTH 		pqi_scsi_dev_t *);
1369fac68fcSPAPANI SRIKANTH 
1377ea28254SJohn Hall /* smartpqi_response.c */
1381e66f787SSean Bruno void pqisrc_process_internal_raid_response_success(pqisrc_softstate_t *,
1391e66f787SSean Bruno                                           rcb_t *);
1401e66f787SSean Bruno void pqisrc_process_internal_raid_response_error(pqisrc_softstate_t *,
1411e66f787SSean Bruno                                           rcb_t *, uint16_t);
1421e66f787SSean Bruno void pqisrc_process_io_response_success(pqisrc_softstate_t *,
1431e66f787SSean Bruno 		rcb_t *);
1449fac68fcSPAPANI SRIKANTH void pqisrc_show_sense_data_full(pqisrc_softstate_t *, rcb_t *, sense_data_u_t *sense_data);
1451e66f787SSean Bruno void pqisrc_process_aio_response_error(pqisrc_softstate_t *,
1461e66f787SSean Bruno 		rcb_t *, uint16_t);
1471e66f787SSean Bruno void pqisrc_process_raid_response_error(pqisrc_softstate_t *,
1481e66f787SSean Bruno 		rcb_t *, uint16_t);
1491e66f787SSean Bruno void pqisrc_process_response_queue(pqisrc_softstate_t *, int);
1507ea28254SJohn Hall void pqisrc_show_aio_error_info(pqisrc_softstate_t *softs, rcb_t *rcb,
1517ea28254SJohn Hall 	aio_path_error_info_elem_t *aio_err);
1527ea28254SJohn Hall void pqisrc_show_raid_error_info(pqisrc_softstate_t *softs, rcb_t *rcb,
1537ea28254SJohn Hall 	raid_path_error_info_elem_t *aio_err);
1547ea28254SJohn Hall boolean_t suppress_innocuous_error_prints(pqisrc_softstate_t *softs,
1557ea28254SJohn Hall 		rcb_t *rcb);
1567ea28254SJohn Hall uint8_t pqisrc_get_cmd_from_rcb(rcb_t *);
1577ea28254SJohn Hall boolean_t pqisrc_is_innocuous_error(pqisrc_softstate_t *, rcb_t *, void *);
1581e66f787SSean Bruno 
1599fac68fcSPAPANI SRIKANTH 
1607ea28254SJohn Hall /* smartpqi_request.c */
1617ea28254SJohn Hall int pqisrc_build_send_vendor_request(pqisrc_softstate_t *softs,
1627ea28254SJohn Hall 				struct pqi_vendor_general_request *request);
1631e66f787SSean Bruno int pqisrc_build_send_io(pqisrc_softstate_t *,rcb_t *);
1647ea28254SJohn Hall int pqisrc_build_scsi_cmd_raidbypass(pqisrc_softstate_t *softs,
1657ea28254SJohn Hall 				pqi_scsi_dev_t *device, rcb_t *rcb);
1661e66f787SSean Bruno int pqisrc_send_tmf(pqisrc_softstate_t *, pqi_scsi_dev_t *,
1679fac68fcSPAPANI SRIKANTH                     rcb_t *, rcb_t *, int);
1681e66f787SSean Bruno int pqisrc_write_current_time_to_host_wellness(pqisrc_softstate_t *softs);
1691e66f787SSean Bruno int pqisrc_write_driver_version_to_host_wellness(pqisrc_softstate_t *softs);
1707ea28254SJohn Hall void pqisrc_build_aio_common(pqisrc_softstate_t *, pqi_aio_req_t *,
1717ea28254SJohn Hall 	rcb_t *, uint32_t);
1727ea28254SJohn Hall void pqisrc_build_aio_R1_write(pqisrc_softstate_t *,
1737ea28254SJohn Hall 	pqi_aio_raid1_write_req_t *, rcb_t *, uint32_t);
1747ea28254SJohn Hall void pqisrc_build_aio_R5or6_write(pqisrc_softstate_t *,
1757ea28254SJohn Hall 	pqi_aio_raid5or6_write_req_t *, rcb_t *, uint32_t);
1767ea28254SJohn Hall void pqisrc_show_cdb(pqisrc_softstate_t *softs, char *msg, rcb_t *rcb, uint8_t *cdb);
1779fac68fcSPAPANI SRIKANTH void pqisrc_print_buffer(pqisrc_softstate_t *softs, char *msg, void *user_buf, uint32_t total_len, uint32_t flags);
1787ea28254SJohn Hall void pqisrc_show_rcb_details(pqisrc_softstate_t *softs, rcb_t *rcb, char *msg, void *err_info);
1797ea28254SJohn Hall void pqisrc_show_aio_io(pqisrc_softstate_t *, rcb_t *,
1807ea28254SJohn Hall 	pqi_aio_req_t *, uint32_t);
1817ea28254SJohn Hall void pqisrc_show_aio_common(pqisrc_softstate_t *, rcb_t *, pqi_aio_req_t *);
1827ea28254SJohn Hall void pqisrc_show_aio_R1_write(pqisrc_softstate_t *, rcb_t *,
1837ea28254SJohn Hall 	pqi_aio_raid1_write_req_t *);
1847ea28254SJohn Hall void pqisrc_show_aio_R5or6_write(pqisrc_softstate_t *, rcb_t *,
1857ea28254SJohn Hall 	pqi_aio_raid5or6_write_req_t *);
1867ea28254SJohn Hall boolean_t pqisrc_cdb_is_write(uint8_t *);
1877ea28254SJohn Hall void print_this_counter(pqisrc_softstate_t *softs, io_counters_t *pcounter, char *msg);
1887ea28254SJohn Hall void print_all_counters(pqisrc_softstate_t *softs, uint32_t flags);
1899fac68fcSPAPANI SRIKANTH char *io_path_to_ascii(IO_PATH_T path);
1907ea28254SJohn Hall void int_to_scsilun(uint64_t, uint8_t *);
1917ea28254SJohn Hall boolean_t pqisrc_cdb_is_read(uint8_t *);
1927ea28254SJohn Hall void pqisrc_build_aio_io(pqisrc_softstate_t *, rcb_t *, pqi_aio_req_t *, uint32_t);
1937ea28254SJohn Hall uint8_t pqisrc_get_aio_data_direction(rcb_t *);
1947ea28254SJohn Hall uint8_t pqisrc_get_raid_data_direction(rcb_t *);
1957ea28254SJohn Hall void dump_tmf_details(pqisrc_softstate_t *, rcb_t *, char *);
1967ea28254SJohn Hall io_type_t get_io_type_from_cdb(uint8_t *);
1977ea28254SJohn Hall OS_ATOMIC64_T increment_this_counter(io_counters_t *, IO_PATH_T , io_type_t );
1987ea28254SJohn Hall boolean_t
1997ea28254SJohn Hall is_buffer_zero(void *, uint32_t );
2001e66f787SSean Bruno 
2017ea28254SJohn Hall 
2027ea28254SJohn Hall 
2037ea28254SJohn Hall 
2047ea28254SJohn Hall /* smartpqi_event.c*/
2051e66f787SSean Bruno int pqisrc_report_event_config(pqisrc_softstate_t *);
2061e66f787SSean Bruno int pqisrc_set_event_config(pqisrc_softstate_t *);
2071e66f787SSean Bruno int pqisrc_process_event_intr_src(pqisrc_softstate_t *,int);
2081e66f787SSean Bruno void pqisrc_ack_all_events(void *arg);
2099fac68fcSPAPANI SRIKANTH void pqisrc_wait_for_rescan_complete(pqisrc_softstate_t *softs);
2101e66f787SSean Bruno 
2117ea28254SJohn Hall int pqisrc_prepare_send_ctrlr_request(pqisrc_softstate_t *softs, pqisrc_raid_req_t *request,
2127ea28254SJohn Hall                               void *buff, size_t datasize);
2131e66f787SSean Bruno 
2141e66f787SSean Bruno int pqisrc_submit_management_req(pqisrc_softstate_t *,
2151e66f787SSean Bruno                         pqi_event_config_request_t *);
2161e66f787SSean Bruno void pqisrc_take_devices_offline(pqisrc_softstate_t *);
2171e66f787SSean Bruno void pqisrc_take_ctrl_offline(pqisrc_softstate_t *);
2181e66f787SSean Bruno void pqisrc_free_rcb(pqisrc_softstate_t *, int);
2191e66f787SSean Bruno void pqisrc_decide_opq_config(pqisrc_softstate_t *);
2201e66f787SSean Bruno int pqisrc_configure_op_queues(pqisrc_softstate_t *);
2211e66f787SSean Bruno int pqisrc_pqi_init(pqisrc_softstate_t *);
2221e66f787SSean Bruno int pqi_reset(pqisrc_softstate_t *);
2231e66f787SSean Bruno int pqisrc_check_pqimode(pqisrc_softstate_t *);
2241e66f787SSean Bruno int pqisrc_check_fw_status(pqisrc_softstate_t *);
2251e66f787SSean Bruno int pqisrc_init_struct_base(pqisrc_softstate_t *);
2261e66f787SSean Bruno int pqisrc_get_sis_pqi_cap(pqisrc_softstate_t *);
2271e66f787SSean Bruno int pqisrc_get_preferred_settings(pqisrc_softstate_t *);
2281e66f787SSean Bruno int pqisrc_get_adapter_properties(pqisrc_softstate_t *,
2291e66f787SSean Bruno                                 uint32_t *, uint32_t *);
2301e66f787SSean Bruno 
2311e66f787SSean Bruno void pqisrc_get_admin_queue_config(pqisrc_softstate_t *);
2321e66f787SSean Bruno void pqisrc_decide_admin_queue_config(pqisrc_softstate_t *);
2331e66f787SSean Bruno int pqisrc_allocate_and_init_adminq(pqisrc_softstate_t *);
2341e66f787SSean Bruno int pqisrc_create_delete_adminq(pqisrc_softstate_t *, uint32_t);
2351e66f787SSean Bruno void pqisrc_print_adminq_config(pqisrc_softstate_t *);
2367ea28254SJohn Hall int pqisrc_delete_op_queue(pqisrc_softstate_t *, uint32_t, boolean_t);
2371e66f787SSean Bruno void pqisrc_destroy_event_queue(pqisrc_softstate_t *);
2381e66f787SSean Bruno void pqisrc_destroy_op_ib_queues(pqisrc_softstate_t *);
2391e66f787SSean Bruno void pqisrc_destroy_op_ob_queues(pqisrc_softstate_t *);
2407ea28254SJohn Hall int pqisrc_change_op_ibq_queue_prop(pqisrc_softstate_t *, ib_queue_t *,
2417ea28254SJohn Hall                                   uint32_t);
2427ea28254SJohn Hall int pqisrc_create_op_obq(pqisrc_softstate_t *, ob_queue_t *);
2437ea28254SJohn Hall int pqisrc_create_op_ibq(pqisrc_softstate_t *, ib_queue_t *);
2441e66f787SSean Bruno int pqisrc_create_op_aio_ibq(pqisrc_softstate_t *, ib_queue_t *);
2451e66f787SSean Bruno int pqisrc_create_op_raid_ibq(pqisrc_softstate_t *, ib_queue_t *);
2461e66f787SSean Bruno int pqisrc_alloc_and_create_event_queue(pqisrc_softstate_t *);
2471e66f787SSean Bruno int pqisrc_alloc_and_create_ib_queues(pqisrc_softstate_t *);
2487ea28254SJohn Hall int pqisrc_alloc_and_create_ib_queues(pqisrc_softstate_t *);
2491e66f787SSean Bruno int pqisrc_alloc_and_create_ob_queues(pqisrc_softstate_t *);
2501e66f787SSean Bruno int pqisrc_process_task_management_response(pqisrc_softstate_t *,
2511e66f787SSean Bruno                                 pqi_tmf_resp_t *);
2529fac68fcSPAPANI SRIKANTH 
2537ea28254SJohn Hall /* smartpqi_ioctl.c*/
2547ea28254SJohn Hall int pqisrc_passthru_ioctl(struct pqisrc_softstate *, void *, int);
2559fac68fcSPAPANI SRIKANTH 
2561e66f787SSean Bruno /* Functions Prototypes */
2577ea28254SJohn Hall /* smartpqi_mem.c */
2581e66f787SSean Bruno int os_dma_mem_alloc(pqisrc_softstate_t *,struct dma_mem *);
2591e66f787SSean Bruno void os_dma_mem_free(pqisrc_softstate_t *,struct dma_mem *);
2601e66f787SSean Bruno void *os_mem_alloc(pqisrc_softstate_t *,size_t);
2617ea28254SJohn Hall void os_mem_free(pqisrc_softstate_t *,void *,size_t);
2621e66f787SSean Bruno void os_resource_free(pqisrc_softstate_t *);
2639fac68fcSPAPANI SRIKANTH int os_dma_setup(pqisrc_softstate_t *);
2649fac68fcSPAPANI SRIKANTH int os_dma_destroy(pqisrc_softstate_t *);
2659fac68fcSPAPANI SRIKANTH void os_update_dma_attributes(pqisrc_softstate_t *);
2661e66f787SSean Bruno 
2677ea28254SJohn Hall /* smartpqi_intr.c */
2681e66f787SSean Bruno int os_get_intr_config(pqisrc_softstate_t *);
2691e66f787SSean Bruno int os_setup_intr(pqisrc_softstate_t *);
2701e66f787SSean Bruno int os_destroy_intr(pqisrc_softstate_t *);
2711e66f787SSean Bruno int os_get_processor_config(pqisrc_softstate_t *);
2721e66f787SSean Bruno void os_free_intr_config(pqisrc_softstate_t *);
2731e66f787SSean Bruno 
2747ea28254SJohn Hall /* smartpqi_ioctl.c */
2751e66f787SSean Bruno int os_copy_to_user(struct pqisrc_softstate *, void *,
2761e66f787SSean Bruno                 void *, int, int);
2771e66f787SSean Bruno int os_copy_from_user(struct pqisrc_softstate *, void *,
2781e66f787SSean Bruno                 void *, int, int);
2791e66f787SSean Bruno int create_char_dev(struct pqisrc_softstate *, int);
2801e66f787SSean Bruno void destroy_char_dev(struct pqisrc_softstate *);
2811e66f787SSean Bruno 
2827ea28254SJohn Hall /* smartpqi_misc.c*/
2831e66f787SSean Bruno int os_init_spinlock(struct pqisrc_softstate *, struct mtx *, char *);
2841e66f787SSean Bruno void os_uninit_spinlock(struct mtx *);
2851e66f787SSean Bruno int os_create_semaphore(const char *, int,struct sema *);
2861e66f787SSean Bruno int os_destroy_semaphore(struct sema *);
2871e66f787SSean Bruno void os_sema_lock(struct sema *);
2881e66f787SSean Bruno void os_sema_unlock(struct sema *);
2897ea28254SJohn Hall void bsd_set_hint_adapter_cap(struct pqisrc_softstate *);
2907ea28254SJohn Hall void bsd_set_hint_adapter_cpu_config(struct pqisrc_softstate *);
2911e66f787SSean Bruno 
2921e66f787SSean Bruno int os_strlcpy(char *dst, char *src, int len);
2931e66f787SSean Bruno void os_complete_outstanding_cmds_nodevice(pqisrc_softstate_t *);
2941e66f787SSean Bruno void os_stop_heartbeat_timer(pqisrc_softstate_t *);
2951e66f787SSean Bruno void os_start_heartbeat_timer(void *);
2961e66f787SSean Bruno 
2977ea28254SJohn Hall /* smartpqi_cam.c */
2981e66f787SSean Bruno uint8_t os_get_task_attr(rcb_t *);
2991e66f787SSean Bruno void smartpqi_target_rescan(struct pqisrc_softstate *);
3009fac68fcSPAPANI SRIKANTH void os_rescan_target(struct pqisrc_softstate *, pqi_scsi_dev_t *);
3011e66f787SSean Bruno 
3027ea28254SJohn Hall /* smartpqi_intr.c smartpqi_main.c */
3039fac68fcSPAPANI SRIKANTH void pqisrc_event_worker(void *, int);
3041e66f787SSean Bruno void os_add_device(pqisrc_softstate_t *, pqi_scsi_dev_t *);
3051e66f787SSean Bruno void os_remove_device(pqisrc_softstate_t *, pqi_scsi_dev_t *);
3061e66f787SSean Bruno void os_io_response_success(rcb_t *);
3071e66f787SSean Bruno void os_aio_response_error(rcb_t *, aio_path_error_info_elem_t *);
3087ea28254SJohn Hall boolean_t check_device_hint_status(struct pqisrc_softstate *, unsigned int  );
3091e66f787SSean Bruno void smartpqi_adjust_queue_depth(struct cam_path *, uint32_t );
3101e66f787SSean Bruno void os_raid_response_error(rcb_t *, raid_path_error_info_elem_t *);
3119fac68fcSPAPANI SRIKANTH void os_wellness_periodic(void *);
3121e66f787SSean Bruno void os_reset_rcb( rcb_t *);
3131e66f787SSean Bruno int register_sim(struct pqisrc_softstate *, int);
3141e66f787SSean Bruno void deregister_sim(struct pqisrc_softstate *);
3151e66f787SSean Bruno int check_for_scsi_opcode(uint8_t *, boolean_t *, uint64_t *,
3161e66f787SSean Bruno 			uint32_t *);
3171e66f787SSean Bruno int register_legacy_intr(pqisrc_softstate_t *);
3181e66f787SSean Bruno int register_msix_intr(pqisrc_softstate_t *);
3191e66f787SSean Bruno void deregister_pqi_intx(pqisrc_softstate_t *);
3201e66f787SSean Bruno void deregister_pqi_msix(pqisrc_softstate_t *);
3211e66f787SSean Bruno void os_get_time(struct bmic_host_wellness_time *);
3221e66f787SSean Bruno void os_eventtaskqueue_enqueue(pqisrc_softstate_t *);
3231e66f787SSean Bruno void pqisrc_save_controller_info(struct pqisrc_softstate *);
3249fac68fcSPAPANI SRIKANTH 
3259fac68fcSPAPANI SRIKANTH /* Domain status conversion */
3269fac68fcSPAPANI SRIKANTH int bsd_status_to_pqi_status(int );
3277ea28254SJohn Hall #endif
328