The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/smartpqi/smartpqi_prototypes.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright 2016-2021 Microchip Technology, Inc. and/or its subsidiaries.
    3  *
    4  * Redistribution and use in source and binary forms, with or without
    5  * modification, are permitted provided that the following conditions
    6  * are met:
    7  * 1. Redistributions of source code must retain the above copyright
    8  *    notice, this list of conditions and the following disclaimer.
    9  * 2. Redistributions in binary form must reproduce the above copyright
   10  *    notice, this list of conditions and the following disclaimer in the
   11  *    documentation and/or other materials provided with the distribution.
   12  *
   13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   16  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   23  * SUCH DAMAGE.
   24  */
   25 
   26 /* $FreeBSD$ */
   27 
   28 #ifndef _PQI_PROTOTYPES_H
   29 #define _PQI_PROTOTYPES_H
   30 
   31 /* Function prototypes */
   32 
   33 /*pqi_init.c */
   34 int pqisrc_init(pqisrc_softstate_t *);
   35 void pqisrc_uninit(pqisrc_softstate_t *);
   36 void pqisrc_pqi_uninit(pqisrc_softstate_t *);
   37 int pqisrc_process_config_table(pqisrc_softstate_t *);
   38 int pqisrc_flush_cache(pqisrc_softstate_t *, enum pqisrc_flush_cache_event_type);
   39 int pqisrc_wait_for_pqi_reset_completion(pqisrc_softstate_t *);
   40 
   41 /* pqi_sis.c*/
   42 int pqisrc_sis_init(pqisrc_softstate_t *);
   43 void pqisrc_sis_uninit(pqisrc_softstate_t *);
   44 int pqisrc_reenable_sis(pqisrc_softstate_t *);
   45 void pqisrc_trigger_nmi_sis(pqisrc_softstate_t *);
   46 void sis_disable_msix(pqisrc_softstate_t *);
   47 void sis_enable_intx(pqisrc_softstate_t *);
   48 void sis_disable_intx(pqisrc_softstate_t *softs);
   49 int pqisrc_force_sis(pqisrc_softstate_t *);
   50 int pqisrc_sis_wait_for_db_bit_to_clear(pqisrc_softstate_t *, uint32_t);
   51 void sis_disable_interrupt(pqisrc_softstate_t*);
   52 
   53 
   54 /* pqi_queue.c */
   55 int pqisrc_submit_admin_req(pqisrc_softstate_t *,
   56                             gen_adm_req_iu_t *, gen_adm_resp_iu_t *);
   57 int pqisrc_create_admin_queue(pqisrc_softstate_t *);
   58 int pqisrc_destroy_admin_queue(pqisrc_softstate_t *);
   59 int pqisrc_create_op_queues(pqisrc_softstate_t *);
   60 
   61 /* pqi_cmd.c */
   62 int pqisrc_submit_cmnd(pqisrc_softstate_t *,ib_queue_t *,void *);
   63 
   64 /* pqi_tag.c */
   65 #ifndef LOCKFREE_STACK
   66 int pqisrc_init_taglist(pqisrc_softstate_t *,pqi_taglist_t *,uint32_t);
   67 void pqisrc_destroy_taglist(pqisrc_softstate_t *,pqi_taglist_t *);
   68 void pqisrc_put_tag(pqi_taglist_t *,uint32_t);
   69 uint32_t pqisrc_get_tag(pqi_taglist_t *);
   70 #else
   71 int pqisrc_init_taglist(pqisrc_softstate_t *, lockless_stack_t *, uint32_t);
   72 void pqisrc_destroy_taglist(pqisrc_softstate_t *, lockless_stack_t *);
   73 void pqisrc_put_tag(lockless_stack_t *,uint32_t);
   74 uint32_t pqisrc_get_tag(lockless_stack_t *);
   75 #endif /* LOCKFREE_STACK */
   76 
   77 /* pqi_discovery.c */
   78 void pqisrc_remove_device(pqisrc_softstate_t *, pqi_scsi_dev_t *);
   79 int pqisrc_get_ctrl_fw_version(pqisrc_softstate_t *);
   80 int pqisrc_rescan_devices(pqisrc_softstate_t *);
   81 int pqisrc_scan_devices(pqisrc_softstate_t *);
   82 void pqisrc_process_raid_path_io_response(pqisrc_softstate_t *, uint16_t, struct pqi_io_response *);
   83 void pqisrc_process_io_error_response(pqisrc_softstate_t *, int, uint16_t, struct pqi_io_response *);
   84 void pqisrc_cleanup_devices(pqisrc_softstate_t *);
   85 void pqisrc_device_mem_free(pqisrc_softstate_t *, pqi_scsi_dev_t *);
   86 boolean_t pqisrc_is_external_raid_device(pqi_scsi_dev_t *device);
   87 void pqisrc_free_device(pqisrc_softstate_t * softs,pqi_scsi_dev_t *device);
   88 void pqisrc_init_targetid_pool(pqisrc_softstate_t *softs);
   89 int pqisrc_alloc_tid(pqisrc_softstate_t *softs);
   90 void pqisrc_free_tid(pqisrc_softstate_t *softs, int);
   91 int pqisrc_get_physical_logical_luns(pqisrc_softstate_t *softs, uint8_t cmd,
   92                 reportlun_data_ext_t **buff, size_t *data_length);
   93 int pqisrc_send_scsi_inquiry(pqisrc_softstate_t *softs,
   94         uint8_t *scsi3addr, uint16_t vpd_page, uint8_t *buff, int buf_len);
   95 
   96 /* pqi_helper.c */
   97 boolean_t pqisrc_ctrl_offline(pqisrc_softstate_t *);
   98 void pqisrc_heartbeat_timer_handler(pqisrc_softstate_t *);
   99 int pqisrc_wait_on_condition(pqisrc_softstate_t *softs, rcb_t *rcb,
  100         uint32_t timeout);
  101 boolean_t pqisrc_device_equal(pqi_scsi_dev_t *, pqi_scsi_dev_t *);
  102 boolean_t pqisrc_is_hba_lunid(uint8_t *);
  103 boolean_t pqisrc_is_logical_device(pqi_scsi_dev_t *);
  104 void pqisrc_sanitize_inquiry_string(unsigned char *, int );
  105 void pqisrc_display_device_info(pqisrc_softstate_t *, char *, pqi_scsi_dev_t *);
  106 boolean_t pqisrc_scsi3addr_equal(uint8_t *, uint8_t *);
  107 void check_struct_sizes(void);
  108 char *pqisrc_raidlevel_to_string(uint8_t);
  109 void pqisrc_configure_legacy_intx(pqisrc_softstate_t*, boolean_t);
  110 void pqisrc_ctrl_diagnostic_options(pqisrc_softstate_t *);
  111 void pqisrc_wait_for_device_commands_to_complete(pqisrc_softstate_t *,
  112                 pqi_scsi_dev_t *);
  113 void check_device_pending_commands_to_complete(pqisrc_softstate_t *,
  114                 pqi_scsi_dev_t *);
  115 uint32_t pqisrc_count_num_scsi_active_requests_on_dev(pqisrc_softstate_t *,
  116                 pqi_scsi_dev_t *);
  117 
  118 
  119 /* pqi_response.c */
  120 void pqisrc_signal_event(pqisrc_softstate_t *softs, rcb_t *rcb);
  121 void pqisrc_process_internal_raid_response_success(pqisrc_softstate_t *,
  122                                           rcb_t *);
  123 void pqisrc_process_internal_raid_response_error(pqisrc_softstate_t *,
  124                                           rcb_t *, uint16_t);
  125 void pqisrc_process_io_response_success(pqisrc_softstate_t *,
  126                 rcb_t *);
  127 void pqisrc_show_sense_data_full(pqisrc_softstate_t *, rcb_t *, sense_data_u_t *sense_data);
  128 void pqisrc_process_aio_response_error(pqisrc_softstate_t *,
  129                 rcb_t *, uint16_t);
  130 void pqisrc_process_raid_response_error(pqisrc_softstate_t *,
  131                 rcb_t *, uint16_t);
  132 void pqisrc_process_response_queue(pqisrc_softstate_t *, int);
  133 
  134 
  135 
  136 /* pqi_request.c */
  137 int pqisrc_build_send_vendor_request(pqisrc_softstate_t*,
  138                                                         pqi_vendor_general_request_t *,
  139                                                         raid_path_error_info_elem_t *);
  140 int pqisrc_build_send_io(pqisrc_softstate_t *,rcb_t *);
  141 
  142 
  143 int pqisrc_send_scsi_cmd_raidbypass(pqisrc_softstate_t *softs,
  144                                 pqi_scsi_dev_t *device, rcb_t *rcb, uint8_t*);
  145 
  146 
  147 int pqisrc_send_tmf(pqisrc_softstate_t *, pqi_scsi_dev_t *,
  148                     rcb_t *, rcb_t *, int);
  149 int pqisrc_write_current_time_to_host_wellness(pqisrc_softstate_t *softs);
  150 int pqisrc_write_driver_version_to_host_wellness(pqisrc_softstate_t *softs);
  151 void pqisrc_print_buffer(pqisrc_softstate_t *softs, char *msg, void *user_buf, uint32_t total_len, uint32_t flags);
  152 char *io_path_to_ascii(IO_PATH_T path);
  153 
  154 /* pqi_event.c*/
  155 int pqisrc_report_event_config(pqisrc_softstate_t *);
  156 int pqisrc_set_event_config(pqisrc_softstate_t *);
  157 int pqisrc_process_event_intr_src(pqisrc_softstate_t *,int);
  158 void pqisrc_ack_all_events(void *arg);
  159 void pqisrc_wait_for_rescan_complete(pqisrc_softstate_t *softs);
  160 
  161 boolean_t pqisrc_update_scsi_sense(const uint8_t *, int,
  162                               struct sense_header_scsi *);
  163 int pqisrc_build_send_raid_request(pqisrc_softstate_t *,  pqisrc_raid_req_t *,
  164                             void *, size_t, uint8_t, uint16_t, uint8_t *,
  165                             raid_path_error_info_elem_t *);
  166 
  167 int pqisrc_submit_management_req(pqisrc_softstate_t *,
  168                         pqi_event_config_request_t *);
  169 void pqisrc_take_devices_offline(pqisrc_softstate_t *);
  170 void pqisrc_take_ctrl_offline(pqisrc_softstate_t *);
  171 void pqisrc_free_rcb(pqisrc_softstate_t *, int);
  172 void pqisrc_decide_opq_config(pqisrc_softstate_t *);
  173 int pqisrc_configure_op_queues(pqisrc_softstate_t *);
  174 int pqisrc_pqi_init(pqisrc_softstate_t *);
  175 int pqi_reset(pqisrc_softstate_t *);
  176 int pqisrc_check_pqimode(pqisrc_softstate_t *);
  177 int pqisrc_check_fw_status(pqisrc_softstate_t *);
  178 int pqisrc_init_struct_base(pqisrc_softstate_t *);
  179 int pqisrc_get_sis_pqi_cap(pqisrc_softstate_t *);
  180 int pqisrc_get_preferred_settings(pqisrc_softstate_t *);
  181 int pqisrc_get_adapter_properties(pqisrc_softstate_t *,
  182                                 uint32_t *, uint32_t *);
  183 
  184 void pqisrc_get_admin_queue_config(pqisrc_softstate_t *);
  185 void pqisrc_decide_admin_queue_config(pqisrc_softstate_t *);
  186 int pqisrc_allocate_and_init_adminq(pqisrc_softstate_t *);
  187 int pqisrc_create_delete_adminq(pqisrc_softstate_t *, uint32_t);
  188 void pqisrc_print_adminq_config(pqisrc_softstate_t *);
  189 int pqisrc_delete_op_queue(pqisrc_softstate_t *,
  190                                 uint32_t, boolean_t);
  191 void pqisrc_destroy_event_queue(pqisrc_softstate_t *);
  192 
  193 void pqisrc_destroy_op_ib_queues(pqisrc_softstate_t *);
  194 
  195 void pqisrc_destroy_op_ob_queues(pqisrc_softstate_t *);
  196 
  197 int pqisrc_change_op_ibq_queue_prop(pqisrc_softstate_t *,
  198                                 ib_queue_t *, uint32_t);
  199 int pqisrc_create_op_obq(pqisrc_softstate_t *,
  200                         ob_queue_t *);
  201 int pqisrc_create_op_ibq(pqisrc_softstate_t *,
  202                         ib_queue_t *);
  203 int pqisrc_create_op_aio_ibq(pqisrc_softstate_t *, ib_queue_t *);
  204 int pqisrc_create_op_raid_ibq(pqisrc_softstate_t *, ib_queue_t *);
  205 int pqisrc_alloc_and_create_event_queue(pqisrc_softstate_t *);
  206 int pqisrc_alloc_and_create_ib_queues(pqisrc_softstate_t *);
  207 int pqisrc_alloc_and_create_ob_queues(pqisrc_softstate_t *);
  208 int pqisrc_process_task_management_response(pqisrc_softstate_t *,
  209                                 pqi_tmf_resp_t *);
  210 
  211 /*Device outstanding Io count*/
  212 uint64_t pqisrc_increment_device_active_io(pqisrc_softstate_t *,
  213                                     pqi_scsi_dev_t *);
  214 uint64_t pqisrc_decrement_device_active_io(pqisrc_softstate_t *,
  215                                     pqi_scsi_dev_t *);
  216 void pqisrc_init_device_active_io(pqisrc_softstate_t *,
  217                                     pqi_scsi_dev_t *);
  218 uint64_t pqisrc_read_device_active_io(pqisrc_softstate_t *,
  219                                     pqi_scsi_dev_t *);
  220 
  221 /* pqi_ioctl.c*/
  222 
  223 int
  224 pqisrc_passthru_ioctl(struct pqisrc_softstate *, void *, int);
  225 
  226 
  227 
  228 /* Functions Prototypes */
  229 /* FreeBSD_mem.c */
  230 int os_dma_mem_alloc(pqisrc_softstate_t *,struct dma_mem *);
  231 void os_dma_mem_free(pqisrc_softstate_t *,struct dma_mem *);
  232 void *os_mem_alloc(pqisrc_softstate_t *,size_t);
  233 void os_mem_free(pqisrc_softstate_t *,char *,size_t);
  234 void os_resource_free(pqisrc_softstate_t *);
  235 int os_dma_setup(pqisrc_softstate_t *);
  236 int os_dma_destroy(pqisrc_softstate_t *);
  237 void os_update_dma_attributes(pqisrc_softstate_t *);
  238 
  239 /* FreeBSD intr.c */
  240 int os_get_intr_config(pqisrc_softstate_t *);
  241 int os_setup_intr(pqisrc_softstate_t *);
  242 int os_destroy_intr(pqisrc_softstate_t *);
  243 int os_get_processor_config(pqisrc_softstate_t *);
  244 void os_free_intr_config(pqisrc_softstate_t *);
  245 
  246 /* FreeBSD_ioctl.c */
  247 int os_copy_to_user(struct pqisrc_softstate *, void *,
  248                 void *, int, int);
  249 int os_copy_from_user(struct pqisrc_softstate *, void *,
  250                 void *, int, int);
  251 int create_char_dev(struct pqisrc_softstate *, int);
  252 void destroy_char_dev(struct pqisrc_softstate *);
  253  
  254 /* FreeBSD_misc.c*/ 
  255 int os_init_spinlock(struct pqisrc_softstate *, struct mtx *, char *);
  256 void os_uninit_spinlock(struct mtx *);
  257 int os_create_semaphore(const char *, int,struct sema *);
  258 int os_destroy_semaphore(struct sema *);
  259 void os_sema_lock(struct sema *);
  260 void os_sema_unlock(struct sema *);
  261 
  262 int os_strlcpy(char *dst, char *src, int len);
  263 void os_complete_outstanding_cmds_nodevice(pqisrc_softstate_t *);
  264 void os_stop_heartbeat_timer(pqisrc_softstate_t *);
  265 void os_start_heartbeat_timer(void *);
  266 
  267 /* FreeBSD_cam.c */
  268 uint8_t os_get_task_attr(rcb_t *);
  269 void smartpqi_target_rescan(struct pqisrc_softstate *);
  270 void os_rescan_target(struct pqisrc_softstate *, pqi_scsi_dev_t *);
  271 
  272 /* FreeBSD_intr.c FreeBSD_main.c */
  273 void pqisrc_event_worker(void *, int);
  274 void os_add_device(pqisrc_softstate_t *, pqi_scsi_dev_t *);
  275 void os_remove_device(pqisrc_softstate_t *, pqi_scsi_dev_t *); 
  276 void os_io_response_success(rcb_t *);
  277 void os_aio_response_error(rcb_t *, aio_path_error_info_elem_t *);
  278 void smartpqi_adjust_queue_depth(struct cam_path *, uint32_t );
  279 void os_raid_response_error(rcb_t *, raid_path_error_info_elem_t *);
  280 void os_wellness_periodic(void *);
  281 void os_reset_rcb( rcb_t *);
  282 int register_sim(struct pqisrc_softstate *, int);
  283 void deregister_sim(struct pqisrc_softstate *);
  284 int check_for_scsi_opcode(uint8_t *, boolean_t *, uint64_t *, 
  285                         uint32_t *);
  286 int register_legacy_intr(pqisrc_softstate_t *);
  287 int register_msix_intr(pqisrc_softstate_t *);
  288 void deregister_pqi_intx(pqisrc_softstate_t *);
  289 void deregister_pqi_msix(pqisrc_softstate_t *);
  290 void os_get_time(struct bmic_host_wellness_time *);
  291 void os_eventtaskqueue_enqueue(pqisrc_softstate_t *);
  292 void pqisrc_save_controller_info(struct pqisrc_softstate *);
  293 
  294 /* Domain status conversion */
  295 int bsd_status_to_pqi_status(int );
  296 
  297 #endif // _SMARTPQI_PROTOTYPES_H

Cache object: f662d5d509ff5d1486d03c872dee2f31


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.