Print this page

        

*** 10,21 **** --- 10,52 ---- * Swaminathan K S * Arun Chandrashekhar * Manju R * Rasheed * Shakeel Bukhari + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. */ + /* + * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + */ + #ifndef _MR_SAS_H_ #define _MR_SAS_H_ #ifdef __cplusplus extern "C" {
*** 26,36 **** #include "ld_pd_map.h" /* * MegaRAID SAS2.0 Driver meta data */ ! #define MRSAS_VERSION "6.503.00.00JOYENT" #define MRSAS_RELDATE "July 30, 2012" #define MRSAS_TRUE 1 #define MRSAS_FALSE 0 --- 57,67 ---- #include "ld_pd_map.h" /* * MegaRAID SAS2.0 Driver meta data */ ! #define MRSAS_VERSION "6.503.00.00ILLUMOS" #define MRSAS_RELDATE "July 30, 2012" #define MRSAS_TRUE 1 #define MRSAS_FALSE 0
*** 37,48 **** #define ADAPTER_RESET_NOT_REQUIRED 0 #define ADAPTER_RESET_REQUIRED 1 #define PDSUPPORT 1 - #define SWAP_BYTES(w) ((((w)>>8)&0xFF) | (((w)&0xFF)<<8)) - #define BIG_ENDIAN(d) (SWAP_BYTES((d) >> 16) | (SWAP_BYTES(d) << 16)) /* * MegaRAID SAS2.0 device id conversion definitions. */ #define INST2LSIRDCTL(x) ((x) << INST_MINOR_SHIFT) #define MRSAS_GET_BOUNDARY_ALIGNED_LEN(len, new_len, boundary_len) { \ --- 68,77 ----
*** 51,61 **** if ((rem * boundary_len) != len) { \ new_len = len + ((rem + 1) * boundary_len - len); \ } else { \ new_len = len; \ } \ ! } \ /* * MegaRAID SAS2.0 supported controllers */ --- 80,90 ---- if ((rem * boundary_len) != len) { \ new_len = len + ((rem + 1) * boundary_len - len); \ } else { \ new_len = len; \ } \ ! } /* * MegaRAID SAS2.0 supported controllers */
*** 508,552 **** uint16_t subsysid; int instance; int baseaddress; char iocnode[16]; ! /*Driver resources unroll flags. ! The flag is set for resources that are needed to be free'd at detach() time */ ! struct _unroll { ! uint8_t softs; // The software state was allocated. ! uint8_t regs; // Controller registers mapped. ! uint8_t intr; // Interrupt handler added. ! uint8_t reqs; // Request structs allocated. ! uint8_t mutexs; // Mutex's allocated. ! uint8_t taskq; // Task q's created. ! uint8_t tran; // Tran struct allocated ! uint8_t tranSetup; // Tran attached to the ddi. ! uint8_t devctl; // Device nodes for cfgadm created. ! uint8_t scsictl; // Device nodes for cfgadm created. ! uint8_t ioctl; // Device nodes for ioctl's created. ! uint8_t timer; // Timer started. ! uint8_t aenPend; // AEN cmd pending f/w. ! uint8_t mapUpdate_pend; // LD MAP update cmd pending f/w. ! uint8_t soft_isr; ! uint8_t ldlist_buff; ! uint8_t pdlist_buff; ! uint8_t syncCmd; ! uint8_t verBuff; ! uint8_t alloc_space_mfi; ! uint8_t alloc_space_mpi2; } unroll; /* function template pointer */ struct mrsas_function_template *func_ptr; /* MSI interrupts specific */ ! ddi_intr_handle_t *intr_htable; //Interrupt handle array ! size_t intr_htable_size; //Interrupt handle array size int intr_type; int intr_cnt; uint_t intr_pri; int intr_cap; --- 537,583 ---- uint16_t subsysid; int instance; int baseaddress; char iocnode[16]; ! int fm_capabilities; ! /* ! * Driver resources unroll flags. The flag is set for resources that ! * are needed to be free'd at detach() time. ! */ struct _unroll { ! uint8_t softs; /* The software state was allocated. */ ! uint8_t regs; /* Controller registers mapped. */ ! uint8_t intr; /* Interrupt handler added. */ ! uint8_t reqs; /* Request structs allocated. */ ! uint8_t mutexs; /* Mutex's allocated. */ ! uint8_t taskq; /* Task q's created. */ ! uint8_t tran; /* Tran struct allocated */ ! uint8_t tranSetup; /* Tran attached to the ddi. */ ! uint8_t devctl; /* Device nodes for cfgadm created. */ ! uint8_t scsictl; /* Device nodes for cfgadm created. */ ! uint8_t ioctl; /* Device nodes for ioctl's created. */ ! uint8_t timer; /* Timer started. */ ! uint8_t aenPend; /* AEN cmd pending f/w. */ ! uint8_t mapUpdate_pend; /* LD MAP update cmd pending f/w. */ ! uint8_t soft_isr; /* Soft interrupt handler allocated. */ ! uint8_t ldlist_buff; /* Logical disk list allocated. */ ! uint8_t pdlist_buff; /* Physical disk list allocated. */ ! uint8_t syncCmd; /* Sync map command allocated. */ ! uint8_t verBuff; /* 2108 MFI buffer allocated. */ ! uint8_t alloc_space_mfi; /* Allocated space for 2108 MFI. */ ! uint8_t alloc_space_mpi2; /* Allocated space for 2208 MPI2. */ } unroll; /* function template pointer */ struct mrsas_function_template *func_ptr; /* MSI interrupts specific */ ! ddi_intr_handle_t *intr_htable; /* Interrupt handle array */ ! size_t intr_htable_size; /* Int. handle array size */ int intr_type; int intr_cnt; uint_t intr_pri; int intr_cap;
*** 563,583 **** uint8_t fast_path_io; uint16_t tbolt; uint16_t reply_read_index; ! uint16_t reply_size; // Single Reply structure size ! uint16_t raid_io_msg_size; // Single message size uint32_t io_request_frames_phy; uint8_t *io_request_frames; ! MRSAS_REQUEST_DESCRIPTOR_UNION *request_message_pool; // Virtual address of request desc frame pool ! uint32_t request_message_pool_phy; // Physical address of request desc frame pool ! MPI2_REPLY_DESCRIPTORS_UNION *reply_frame_pool; // Virtual address of reply Frame ! uint32_t reply_frame_pool_phy; // Physical address of reply Frame ! uint8_t *reply_pool_limit; // Last reply frame address ! uint32_t reply_pool_limit_phy; // Physical address of Last reply frame ! uint32_t reply_q_depth; // Reply Queue Depth uint8_t max_sge_in_main_msg; uint8_t max_sge_in_chain; uint8_t chain_offset_io_req; uint8_t chain_offset_mpt_msg; MR_FW_RAID_MAP_ALL *ld_map[2]; --- 594,619 ---- uint8_t fast_path_io; uint16_t tbolt; uint16_t reply_read_index; ! uint16_t reply_size; /* Single Reply struct size */ ! uint16_t raid_io_msg_size; /* Single message size */ uint32_t io_request_frames_phy; uint8_t *io_request_frames; ! /* Virtual address of request desc frame pool */ ! MRSAS_REQUEST_DESCRIPTOR_UNION *request_message_pool; ! /* Physical address of request desc frame pool */ ! uint32_t request_message_pool_phy; ! /* Virtual address of reply Frame */ ! MPI2_REPLY_DESCRIPTORS_UNION *reply_frame_pool; ! /* Physical address of reply Frame */ ! uint32_t reply_frame_pool_phy; ! uint8_t *reply_pool_limit; /* Last reply frame address */ ! /* Physical address of Last reply frame */ ! uint32_t reply_pool_limit_phy; ! uint32_t reply_q_depth; /* Reply Queue Depth */ uint8_t max_sge_in_main_msg; uint8_t max_sge_in_chain; uint8_t chain_offset_io_req; uint8_t chain_offset_mpt_msg; MR_FW_RAID_MAP_ALL *ld_map[2];
*** 604,614 **** struct mrsas_cmd *); void (*enable_intr)(struct mrsas_instance *); void (*disable_intr)(struct mrsas_instance *); int (*intr_ack)(struct mrsas_instance *); int (*init_adapter)(struct mrsas_instance *); ! // int (*reset_adapter)(struct mrsas_instance *); }; /* * ### Helper routines ### */ --- 640,650 ---- struct mrsas_cmd *); void (*enable_intr)(struct mrsas_instance *); void (*disable_intr)(struct mrsas_instance *); int (*intr_ack)(struct mrsas_instance *); int (*init_adapter)(struct mrsas_instance *); ! /* int (*reset_adapter)(struct mrsas_instance *); */ }; /* * ### Helper routines ### */
*** 625,641 **** * * console messages debug levels */ #define CL_NONE 0 /* No debug information */ #define CL_ANN 1 /* print unconditionally, announcements */ ! #define CL_ANN1 2 /* No o/p */ #define CL_DLEVEL1 3 /* debug level 1, informative */ #define CL_DLEVEL2 4 /* debug level 2, verbose */ #define CL_DLEVEL3 5 /* debug level 3, very verbose */ #ifdef __SUNPRO_C ! #define __func__ __FUNCTION__ //"" #endif #define con_log(level, fmt) { if (debug_level_g >= level) cmn_err fmt; } /* --- 661,677 ---- * * console messages debug levels */ #define CL_NONE 0 /* No debug information */ #define CL_ANN 1 /* print unconditionally, announcements */ ! #define CL_ANN1 2 /* No-op */ #define CL_DLEVEL1 3 /* debug level 1, informative */ #define CL_DLEVEL2 4 /* debug level 2, verbose */ #define CL_DLEVEL3 5 /* debug level 3, very verbose */ #ifdef __SUNPRO_C ! #define __func__ "" #endif #define con_log(level, fmt) { if (debug_level_g >= level) cmn_err fmt; } /*
*** 1915,2040 **** #ifndef DDI_VENDOR_LSI #define DDI_VENDOR_LSI "LSI" #endif /* DDI_VENDOR_LSI */ - static int mrsas_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **); - static int mrsas_attach(dev_info_t *, ddi_attach_cmd_t); - static int mrsas_reset(dev_info_t *, ddi_reset_cmd_t); - int mrsas_quiesce(dev_info_t *); - static int mrsas_detach(dev_info_t *, ddi_detach_cmd_t); - static int mrsas_open(dev_t *, int, int, cred_t *); - static int mrsas_close(dev_t, int, int, cred_t *); - static int mrsas_ioctl(dev_t, int, intptr_t, int, cred_t *, int *); - - static int mrsas_tran_tgt_init(dev_info_t *, dev_info_t *, - scsi_hba_tran_t *, struct scsi_device *); - static struct scsi_pkt *mrsas_tran_init_pkt(struct scsi_address *, register - struct scsi_pkt *, struct buf *, int, int, int, int, - int (*)(), caddr_t); - static int mrsas_tran_start(struct scsi_address *, - register struct scsi_pkt *); - static int mrsas_tran_abort(struct scsi_address *, struct scsi_pkt *); - static int mrsas_tran_reset(struct scsi_address *, int); - static int mrsas_tran_bus_reset(dev_info_t *, int); - static int mrsas_tran_getcap(struct scsi_address *, char *, int); - static int mrsas_tran_setcap(struct scsi_address *, char *, int, int); - static void mrsas_tran_destroy_pkt(struct scsi_address *, - struct scsi_pkt *); - static void mrsas_tran_dmafree(struct scsi_address *, struct scsi_pkt *); - static void mrsas_tran_sync_pkt(struct scsi_address *, struct scsi_pkt *); - static int mrsas_tran_quiesce(dev_info_t *dip); - static int mrsas_tran_unquiesce(dev_info_t *dip); - static uint_t mrsas_isr(); - static uint_t mrsas_softintr(); - - static struct mrsas_cmd *get_mfi_pkt(struct mrsas_instance *); - static void return_mfi_pkt(struct mrsas_instance *, - struct mrsas_cmd *); - - static void free_space_for_mfi(struct mrsas_instance *); - static int mrsas_tbolt_alloc_additional_dma_buffer - (struct mrsas_instance *); - int mrsas_tbolt_sync_map_info(struct mrsas_instance *instance); - static int alloc_additional_dma_buffer(struct mrsas_instance *); - static uint32_t read_fw_status_reg_ppc(struct mrsas_instance *); - static void issue_cmd_ppc(struct mrsas_cmd *, struct mrsas_instance *); - static int issue_cmd_in_poll_mode_ppc(struct mrsas_instance *, - struct mrsas_cmd *); - static int issue_cmd_in_sync_mode_ppc(struct mrsas_instance *, - struct mrsas_cmd *); - static void enable_intr_ppc(struct mrsas_instance *); - static void disable_intr_ppc(struct mrsas_instance *); - static int intr_ack_ppc(struct mrsas_instance *); - int mfi_state_transition_to_ready(struct mrsas_instance *); - static void flush_cache(struct mrsas_instance *instance); - void display_scsi_inquiry(caddr_t); - static int start_mfi_aen(struct mrsas_instance *instance); - static int handle_drv_ioctl(struct mrsas_instance *instance, - struct mrsas_ioctl *ioctl, int mode); - static int handle_mfi_ioctl(struct mrsas_instance *instance, - struct mrsas_ioctl *ioctl, int mode); - static int handle_mfi_aen(struct mrsas_instance *instance, - struct mrsas_aen *aen); - void fill_up_drv_ver(struct mrsas_drv_ver *dv); - static struct mrsas_cmd *build_cmd(struct mrsas_instance *instance, - struct scsi_address *ap, struct scsi_pkt *pkt, - uchar_t *cmd_done); - static struct mrsas_cmd *mrsas_tbolt_build_cmd(struct mrsas_instance *instance, - struct scsi_address *ap, struct scsi_pkt *pkt, - uchar_t *cmd_done); - static int wait_for_outstanding(struct mrsas_instance *instance); - static int register_mfi_aen(struct mrsas_instance *instance, - uint32_t seq_num, uint32_t class_locale_word); - static int issue_mfi_pthru(struct mrsas_instance *instance, struct - mrsas_ioctl *ioctl, struct mrsas_cmd *cmd, int mode); - static int issue_mfi_dcmd(struct mrsas_instance *instance, struct - mrsas_ioctl *ioctl, struct mrsas_cmd *cmd, int mode); - static int issue_mfi_smp(struct mrsas_instance *instance, struct - mrsas_ioctl *ioctl, struct mrsas_cmd *cmd, int mode); - static int issue_mfi_stp(struct mrsas_instance *instance, struct - mrsas_ioctl *ioctl, struct mrsas_cmd *cmd, int mode); - static int abort_aen_cmd(struct mrsas_instance *instance, - struct mrsas_cmd *cmd_to_abort); - - - static void mrsas_rem_intrs(struct mrsas_instance *instance); - static int mrsas_add_intrs(struct mrsas_instance *instance, int intr_type); - - static void mrsas_tran_tgt_free(dev_info_t *, dev_info_t *, - scsi_hba_tran_t *, struct scsi_device *); - static int mrsas_tran_bus_config(dev_info_t *, uint_t, - ddi_bus_config_op_t, void *, dev_info_t **); - static int mrsas_parse_devname(char *, int *, int *); - static int mrsas_config_all_devices(struct mrsas_instance *); int mrsas_config_scsi_device(struct mrsas_instance *, struct scsi_device *, dev_info_t **); - static int mrsas_config_ld(struct mrsas_instance *, uint16_t, - uint8_t, dev_info_t **); #ifdef PDSUPPORT int mrsas_tbolt_config_pd(struct mrsas_instance *, uint16_t, uint8_t, dev_info_t **); - static void mrsas_tbolt_get_pd_info(struct mrsas_instance *, - struct mrsas_tbolt_pd_info *, int); #endif ! dev_info_t *mrsas_find_child(struct mrsas_instance *, uint16_t, ! uint8_t); ! static int mrsas_name_node(dev_info_t *, char *, int); ! static void mrsas_issue_evt_taskq(struct mrsas_eventinfo *); ! int mrsas_service_evt(struct mrsas_instance *, int, int, int, ! uint64_t); ! static void free_additional_dma_buffer(struct mrsas_instance *); ! ! struct mrsas_cmd *get_raid_msg_pkt(struct mrsas_instance *); void return_raid_msg_pkt(struct mrsas_instance *, struct mrsas_cmd *); struct mrsas_cmd *get_raid_msg_mfi_pkt(struct mrsas_instance *); void return_raid_msg_mfi_pkt(struct mrsas_instance *, struct mrsas_cmd *); int alloc_space_for_mpi2(struct mrsas_instance *); ! int alloc_additional_dma_buffer(struct mrsas_instance *); int mrsas_issue_init_mpi2(struct mrsas_instance *); struct scsi_pkt *mrsas_tbolt_tran_init_pkt(struct scsi_address *, register struct scsi_pkt *, struct buf *, int, int, int, int, int (*)(), caddr_t); --- 1951,1976 ---- #ifndef DDI_VENDOR_LSI #define DDI_VENDOR_LSI "LSI" #endif /* DDI_VENDOR_LSI */ int mrsas_config_scsi_device(struct mrsas_instance *, struct scsi_device *, dev_info_t **); #ifdef PDSUPPORT int mrsas_tbolt_config_pd(struct mrsas_instance *, uint16_t, uint8_t, dev_info_t **); #endif ! dev_info_t *mrsas_find_child(struct mrsas_instance *, uint16_t, uint8_t); ! int mrsas_service_evt(struct mrsas_instance *, int, int, int, uint64_t); void return_raid_msg_pkt(struct mrsas_instance *, struct mrsas_cmd *); struct mrsas_cmd *get_raid_msg_mfi_pkt(struct mrsas_instance *); void return_raid_msg_mfi_pkt(struct mrsas_instance *, struct mrsas_cmd *); int alloc_space_for_mpi2(struct mrsas_instance *); ! void fill_up_drv_ver(struct mrsas_drv_ver *dv); int mrsas_issue_init_mpi2(struct mrsas_instance *); struct scsi_pkt *mrsas_tbolt_tran_init_pkt(struct scsi_address *, register struct scsi_pkt *, struct buf *, int, int, int, int, int (*)(), caddr_t);
*** 2058,2098 **** struct buf *, int, int (*)()); int mrsas_dma_move(struct mrsas_instance *, struct scsi_pkt *, struct buf *); int mrsas_alloc_dma_obj(struct mrsas_instance *, dma_obj_t *, uchar_t); - int mrsas_tbolt_ioc_init(struct mrsas_instance *, dma_obj_t *, - ddi_acc_handle_t); - int mrsas_tbolt_prepare_pkt(struct scsa_cmd *); void mr_sas_tbolt_build_mfi_cmd(struct mrsas_instance *, struct mrsas_cmd *); int mrsas_dma_alloc_dmd(struct mrsas_instance *, dma_obj_t *); - int mr_sas_tbolt_build_sgl(struct mrsas_instance *, - struct scsa_cmd *, - struct mrsas_cmd *, - Mpi2RaidSCSIIORequest_t *, - uint32_t *); void tbolt_complete_cmd_in_sync_mode(struct mrsas_instance *, struct mrsas_cmd *); int alloc_req_rep_desc(struct mrsas_instance *); - static void complete_cmd_in_sync_mode(struct mrsas_instance *, - struct mrsas_cmd *); - static void io_timeout_checker(void *instance); - static int mrsas_kill_adapter(struct mrsas_instance *); int mrsas_mode_sense_build(struct scsi_pkt *); void push_pending_mfi_pkt(struct mrsas_instance *, struct mrsas_cmd *); - static int mrsas_issue_init_mfi(struct mrsas_instance *); int mrsas_issue_pending_cmds(struct mrsas_instance *); int mrsas_print_pending_cmds(struct mrsas_instance *); int mrsas_complete_pending_cmds(struct mrsas_instance *); - static int mrsas_reset_ppc(struct mrsas_instance *); - static uint32_t mrsas_initiate_ocr_if_fw_is_faulty(struct mrsas_instance *); - MRSAS_REQUEST_DESCRIPTOR_UNION *\ - mr_sas_get_request_descriptor(struct mrsas_instance *, - uint16_t, struct mrsas_cmd *); - int create_mfi_frame_pool(struct mrsas_instance *); void destroy_mfi_frame_pool(struct mrsas_instance *); int create_mfi_mpi_frame_pool(struct mrsas_instance *); void destroy_mfi_mpi_frame_pool(struct mrsas_instance *); int create_mpi2_frame_pool(struct mrsas_instance *); --- 1994,2015 ----
*** 2101,2138 **** void mrsas_tbolt_free_additional_dma_buffer(struct mrsas_instance *); void free_req_desc_pool(struct mrsas_instance *); void free_space_for_mpi2(struct mrsas_instance *); void mrsas_dump_reply_desc(struct mrsas_instance *); void tbolt_complete_cmd(struct mrsas_instance *, struct mrsas_cmd *); - void io_timeout_checker(void *); void display_scsi_inquiry(caddr_t); void service_mfi_aen(struct mrsas_instance *, struct mrsas_cmd *); int mrsas_mode_sense_build(struct scsi_pkt *); int mrsas_tbolt_get_ld_map_info(struct mrsas_instance *); - void mrsas_tbolt_set_pd_lba(U8 cdb[], uint8_t *cdb_len, U64 start_blk, U32 num_blocks, U8 DifCapable); - U8 mrsas_tbolt_check_map_info(struct mrsas_instance *); struct mrsas_cmd *mrsas_tbolt_build_poll_cmd(struct mrsas_instance *, struct scsi_address *, struct scsi_pkt *, uchar_t *); int mrsas_tbolt_reset_ppc(struct mrsas_instance *instance); ! int mrsas_tbolt_kill_adapter(struct mrsas_instance *instance); int abort_syncmap_cmd(struct mrsas_instance *, struct mrsas_cmd *); ! void mrsas_tbolt_prepare_cdb(struct mrsas_instance *instance, U8 cdb[],struct IO_REQUEST_INFO *, ! Mpi2RaidSCSIIORequest_t *, U32); ! static int ! mrsas_undo_resources (dev_info_t *dip, struct mrsas_instance *instance); - int mrsas_init_adapter_ppc (struct mrsas_instance *instance); - int mrsas_init_adapter_tbolt (struct mrsas_instance *instance); - int mrsas_init_adapter (struct mrsas_instance *instance); - int mrsas_alloc_cmd_pool(struct mrsas_instance *instance); void mrsas_free_cmd_pool(struct mrsas_instance *instance); ! void mrsas_print_cmd_details(struct mrsas_instance *, struct mrsas_cmd *, int ); #ifdef __cplusplus } #endif #endif /* _MR_SAS_H_ */ --- 2018,2058 ---- void mrsas_tbolt_free_additional_dma_buffer(struct mrsas_instance *); void free_req_desc_pool(struct mrsas_instance *); void free_space_for_mpi2(struct mrsas_instance *); void mrsas_dump_reply_desc(struct mrsas_instance *); void tbolt_complete_cmd(struct mrsas_instance *, struct mrsas_cmd *); void display_scsi_inquiry(caddr_t); void service_mfi_aen(struct mrsas_instance *, struct mrsas_cmd *); int mrsas_mode_sense_build(struct scsi_pkt *); int mrsas_tbolt_get_ld_map_info(struct mrsas_instance *); struct mrsas_cmd *mrsas_tbolt_build_poll_cmd(struct mrsas_instance *, struct scsi_address *, struct scsi_pkt *, uchar_t *); int mrsas_tbolt_reset_ppc(struct mrsas_instance *instance); ! void mrsas_tbolt_kill_adapter(struct mrsas_instance *instance); int abort_syncmap_cmd(struct mrsas_instance *, struct mrsas_cmd *); ! void mrsas_tbolt_prepare_cdb(struct mrsas_instance *instance, U8 cdb[], ! struct IO_REQUEST_INFO *, Mpi2RaidSCSIIORequest_t *, U32); ! int mrsas_init_adapter_ppc(struct mrsas_instance *instance); ! int mrsas_init_adapter_tbolt(struct mrsas_instance *instance); ! int mrsas_init_adapter(struct mrsas_instance *instance); int mrsas_alloc_cmd_pool(struct mrsas_instance *instance); void mrsas_free_cmd_pool(struct mrsas_instance *instance); ! void mrsas_print_cmd_details(struct mrsas_instance *, struct mrsas_cmd *, int); ! struct mrsas_cmd *get_raid_msg_pkt(struct mrsas_instance *); + int mfi_state_transition_to_ready(struct mrsas_instance *); + + + /* FMA functions. */ + int mrsas_common_check(struct mrsas_instance *, struct mrsas_cmd *); + void mrsas_fm_ereport(struct mrsas_instance *, char *); + + #ifdef __cplusplus } #endif #endif /* _MR_SAS_H_ */