Print this page
NEX-5717 import QLogic 16G FC drivers
Reviewed by: Steve Peng <steve.peng@nexenta.com>
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
        
*** 17,27 ****
   * information: Portions Copyright [yyyy] [name of copyright owner]
   *
   * CDDL HEADER END
   */
  
! /* Copyright 2010 QLogic Corporation */
  
  /*
   * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
   */
  
--- 17,27 ----
   * information: Portions Copyright [yyyy] [name of copyright owner]
   *
   * CDDL HEADER END
   */
  
! /* Copyright 2015 QLogic Corporation */
  
  /*
   * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
   */
  
*** 32,42 ****
   * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
   *
   * ***********************************************************************
   * *                                                                    **
   * *                            NOTICE                                  **
!  * *            COPYRIGHT (C) 1996-2010 QLOGIC CORPORATION              **
   * *                    ALL RIGHTS RESERVED                             **
   * *                                                                    **
   * ***********************************************************************
   *
   */
--- 32,42 ----
   * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
   *
   * ***********************************************************************
   * *                                                                    **
   * *                            NOTICE                                  **
!  * *            COPYRIGHT (C) 1996-2015 QLOGIC CORPORATION              **
   * *                    ALL RIGHTS RESERVED                             **
   * *                                                                    **
   * ***********************************************************************
   *
   */
*** 43,54 ****
  
  #ifdef  __cplusplus
  extern "C" {
  #endif
  
! #define INVALID_ENTRY_TYPE      0
  
  /*
   * ISP queue -  32-Bit DMA addressing command with extended LUN support
   *              entry structure definition.
   */
  #define IOCB_CMD_TYPE_2         0x11    /* Command entry */
--- 43,64 ----
  
  #ifdef  __cplusplus
  extern "C" {
  #endif
  
! typedef struct ql_64bit_data_seg {
!         uint32_t        address[2];
!         uint32_t        length;
! } ql_64bit_data_seg_t;
  
+ typedef struct ql_32bit_data_seg {
+         uint32_t        address;
+         uint32_t        length;
+ } ql_32bit_data_seg_t;
+ 
+ #define ABORTED_ENTRY_TYPE      0
+ 
  /*
   * ISP queue -  32-Bit DMA addressing command with extended LUN support
   *              entry structure definition.
   */
  #define IOCB_CMD_TYPE_2         0x11    /* Command entry */
*** 69,84 ****
          uint8_t  reserved_1[2];
          uint16_t timeout;               /* Command timeout. */
          uint16_t dseg_count;            /* Data segment count - LSB. */
          uint8_t  scsi_cdb[MAX_CMDSZ];   /* SCSI command words. */
          uint32_t byte_count;            /* Total byte count. */
!         uint32_t dseg_0_address;        /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
!         uint32_t dseg_1_address;        /* Data segment 1 address. */
!         uint32_t dseg_1_length;         /* Data segment 1 length. */
!         uint32_t dseg_2_address;        /* Data segment 2 address. */
!         uint32_t dseg_2_length;         /* Data segment 2 length. */
  } cmd_entry_t, request_t;
  
  /*
   * Command entry control flags least significant byte.
   */
--- 79,89 ----
          uint8_t reserved_1[2];
          uint16_t timeout;               /* Command timeout. */
          uint16_t dseg_count;            /* Data segment count - LSB. */
          uint8_t scsi_cdb[MAX_CMDSZ];    /* SCSI command words. */
          uint32_t byte_count;            /* Total byte count. */
!         ql_32bit_data_seg_t     dseg[3];        /* Data segments. */
  } cmd_entry_t, request_t;
  
  /*
   * Command entry control flags least significant byte.
   */
*** 110,121 ****
          uint8_t  crn;                   /* Command reference number. */
          uint8_t  scsi_cdb[MAX_CMDSZ];   /* SCSI command bytes. */
          uint32_t total_byte_count;
          uint8_t  target_id[3];          /* SCSI Target ID */
          uint8_t  vp_index;
!         uint32_t dseg_0_address[2];     /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
  } cmd7_24xx_entry_t;
  
  /*
   * ISP24xx queue - Command IOCB structure definition.
   */
--- 115,125 ----
          uint8_t crn;                    /* Command reference number. */
          uint8_t scsi_cdb[MAX_CMDSZ];    /* SCSI command bytes. */
          uint32_t total_byte_count;
          uint8_t target_id[3];           /* SCSI Target ID */
          uint8_t vp_index;
!         ql_64bit_data_seg_t     dseg;           /* Data segments. */
  } cmd7_24xx_entry_t;
  
  /*
   * ISP24xx queue - Command IOCB structure definition.
   */
*** 137,148 ****
          uint32_t cmnd_address[2];
          uint32_t rsp_address[2];        /* Data segment 0 address. */
          uint32_t total_byte_count;
          uint8_t  target_id[3];          /* SCSI Target ID */
          uint8_t  vp_index;
!         uint32_t dseg_0_address[2];     /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
  } cmd6_24xx_entry_t;
  
  typedef struct fcp_cmnd {
          uint8_t         fcp_lun[8];             /* SCSI LUN ID. */
          uint8_t         crn;                    /* Command reference number. */
--- 141,151 ----
          uint32_t cmnd_address[2];
          uint32_t rsp_address[2];        /* Data segment 0 address. */
          uint32_t total_byte_count;
          uint8_t target_id[3];           /* SCSI Target ID */
          uint8_t vp_index;
!         ql_64bit_data_seg_t     dseg;           /* Data segments. */
  } cmd6_24xx_entry_t;
  
  typedef struct fcp_cmnd {
          uint8_t         fcp_lun[8];             /* SCSI LUN ID. */
          uint8_t         crn;                    /* Command reference number. */
*** 203,216 ****
          uint8_t  reserved_1[2];
          uint16_t timeout;               /* Command timeout. */
          uint16_t dseg_count;            /* Data segment count - LSB. */
          uint8_t  scsi_cdb[MAX_CMDSZ];   /* SCSI command words. */
          uint32_t byte_count;            /* Total byte count. */
!         uint32_t dseg_0_address[2];     /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
!         uint32_t dseg_1_address[2];     /* Data segment 1 address. */
!         uint32_t dseg_1_length;         /* Data segment 1 length. */
  } cmd_3_entry_t;
  
  /*
   * ISP queue -  Command type 4 DSD list pointer structure definition.
   */
--- 206,216 ----
          uint8_t reserved_1[2];
          uint16_t timeout;               /* Command timeout. */
          uint16_t dseg_count;            /* Data segment count - LSB. */
          uint8_t scsi_cdb[MAX_CMDSZ];    /* SCSI command words. */
          uint32_t byte_count;            /* Total byte count. */
!         ql_64bit_data_seg_t     dseg[2];        /* Data segments. */
  } cmd_3_entry_t;
  
  /*
   * ISP queue -  Command type 4 DSD list pointer structure definition.
   */
*** 250,273 ****
          uint8_t entry_type;             /* Entry type. */
          uint8_t entry_count;            /* Entry count. */
          uint8_t sys_define;             /* System defined. */
          uint8_t entry_status;           /* Entry Status. */
          uint32_t reserved;
!         uint32_t dseg_0_address;        /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
!         uint32_t dseg_1_address;        /* Data segment 1 address. */
!         uint32_t dseg_1_length;         /* Data segment 1 length. */
!         uint32_t dseg_2_address;        /* Data segment 2 address. */
!         uint32_t dseg_2_length;         /* Data segment 2 length. */
!         uint32_t dseg_3_address;        /* Data segment 3 address. */
!         uint32_t dseg_3_length;         /* Data segment 3 length. */
!         uint32_t dseg_4_address;        /* Data segment 4 address. */
!         uint32_t dseg_4_length;         /* Data segment 4 length. */
!         uint32_t dseg_5_address;        /* Data segment 5 address. */
!         uint32_t dseg_5_length;         /* Data segment 5 length. */
!         uint32_t dseg_6_address;        /* Data segment 6 address. */
!         uint32_t dseg_6_length;         /* Data segment 6 length. */
  } cont_entry_t;
  
  /*
   * ISP queue - 64-Bit addressing, continuation entry structure definition.
   */
--- 250,260 ----
          uint8_t entry_type;             /* Entry type. */
          uint8_t entry_count;            /* Entry count. */
          uint8_t sys_define;             /* System defined. */
          uint8_t entry_status;           /* Entry Status. */
          uint32_t reserved;
!         ql_32bit_data_seg_t     dseg[7];        /* Data segments. */
  } cont_entry_t;
  
  /*
   * ISP queue - 64-Bit addressing, continuation entry structure definition.
   */
*** 276,295 ****
  typedef struct cont_type_1_entry {
          uint8_t entry_type;             /* Entry type. */
          uint8_t entry_count;            /* Entry count. */
          uint8_t sys_define;             /* System defined. */
          uint8_t entry_status;           /* Entry Status. */
!         uint32_t dseg_0_address[2];     /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
!         uint32_t dseg_1_address[2];     /* Data segment 1 address. */
!         uint32_t dseg_1_length;         /* Data segment 1 length. */
!         uint32_t dseg_2_address[2];     /* Data segment 2 address. */
!         uint32_t dseg_2_length;         /* Data segment 2 length. */
!         uint32_t dseg_3_address[2];     /* Data segment 3 address. */
!         uint32_t dseg_3_length;         /* Data segment 3 length. */
!         uint32_t dseg_4_address[2];     /* Data segment 4 address. */
!         uint32_t dseg_4_length;         /* Data segment 4 length. */
  } cont_type_1_entry_t;
  
  /*
   * ISP queue - status entry structure definition.
   */
--- 263,273 ----
  typedef struct cont_type_1_entry {
          uint8_t entry_type;             /* Entry type. */
          uint8_t entry_count;            /* Entry count. */
          uint8_t sys_define;             /* System defined. */
          uint8_t entry_status;           /* Entry Status. */
!         ql_64bit_data_seg_t     dseg[5];        /* Data segments. */
  } cont_type_1_entry_t;
  
  /*
   * ISP queue - status entry structure definition.
   */
*** 383,392 ****
--- 361,371 ----
  #define CS_RESOUCE_UNAVAILABLE  0x2C    /* Frimware resource unavailable. */
  #define CS_TASK_MGMT_OVERRUN    0x30    /* Task management overrun. */
  #define CS_LOGIN_LOGOUT_ERROR   0x31    /* login/logout IOCB error. */
  #define CS_SEQ_COMPLETE         0x40    /* Sequence Complete. */
  #define CS_ABORTED_SEQ_REC      0x47    /* Abort sequence was received. */
+ #define CS_DEV_NOT_READY        0x81    /* Device not ready */
  #define CS_INVALID_PARAMETER    0x102   /* IP invalid_parameter. */
  #define CS_ERROR_RESOURCE       0x103   /* IP insufficient resources. */
  #define CS_IP_NOT_INITIALIZED   0x104   /* IP not_initialized. */
  
  #define CS_BAD_PAYLOAD          0x180   /* Driver defined */
*** 501,516 ****
          uint8_t  cmd_dseg_count_h;      /* CMD segment count - MSB. */
          uint16_t total_dseg_count;      /* CMD + RESP segment count. */
          uint8_t  reserved_2[10];
          uint32_t resp_byte_count;       /* Response byte count */
          uint32_t cmd_byte_count;        /* Command byte count */
!         uint32_t dseg_0_address[2];     /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
!         uint32_t dseg_1_address[2];     /* Data segment 1 address. */
!         uint32_t dseg_1_length;         /* Data segment 1 length. */
  } ms_entry_t;
  
  /*
   * ISP24xx queue - CT Pass-Through IOCB structure definition.
   */
  #define CT_PASSTHRU_TYPE                0x29
  #define CT_PASSTHRU_DATA_SEGMENTS       1       /* Number of data segments. */
--- 480,494 ----
          uint8_t cmd_dseg_count_h;       /* CMD segment count - MSB. */
          uint16_t total_dseg_count;      /* CMD + RESP segment count. */
          uint8_t  reserved_2[10];
          uint32_t resp_byte_count;       /* Response byte count */
          uint32_t cmd_byte_count;        /* Command byte count */
!         ql_64bit_data_seg_t     dseg[2];        /* Data segments. */
  } ms_entry_t;
  
+ #define CF_ELS_PASSTHROUGH      BIT_7   /* MSB */
+ 
  /*
   * ISP24xx queue - CT Pass-Through IOCB structure definition.
   */
  #define CT_PASSTHRU_TYPE                0x29
  #define CT_PASSTHRU_DATA_SEGMENTS       1       /* Number of data segments. */
*** 529,542 ****
          uint16_t reserved_1;
          uint16_t resp_dseg_count;
          uint8_t  reserved_2[10];
          uint32_t resp_byte_count;
          uint32_t cmd_byte_count;
!         uint32_t dseg_0_address[2];     /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
!         uint32_t dseg_1_address[2];     /* Data segment 1 address. */
!         uint32_t dseg_1_length;         /* Data segment 1 length. */
  } ct_passthru_entry_t;
  
  /*
   * ISP24xx queue - ELS Pass-Through IOCB structure definition.
   */
--- 507,517 ----
          uint16_t reserved_1;
          uint16_t resp_dseg_count;
          uint8_t reserved_2[10];
          uint32_t resp_byte_count;
          uint32_t cmd_byte_count;
!         ql_64bit_data_seg_t     dseg[2];        /* Data segments. */
  } ct_passthru_entry_t;
  
  /*
   * ISP24xx queue - ELS Pass-Through IOCB structure definition.
   */
*** 563,576 ****
          uint8_t  s_id_7_0;
          uint8_t  s_id_15_8;
          uint16_t control_flags;
          uint32_t rcv_payld_data_bcnt;
          uint32_t xmt_payld_data_bcnt;
!         uint32_t xmt_dseg_0_address[2]; /* Tx Data segment 0 address. */
!         uint32_t xmt_dseg_0_length;     /* Tx Data segment 0 length.  */
!         uint32_t rcv_dseg_0_address[2]; /* Rx Data segment 0 address. */
!         uint32_t rcv_dseg_0_length;     /* Rx Data segment 0 length.  */
  } els_passthru_entry_t;
  
  /*
   * ISP24x queue - ELS Pass-Through IOCB response.
   */
--- 538,548 ----
          uint8_t s_id_7_0;
          uint8_t s_id_15_8;
          uint16_t control_flags;
          uint32_t rcv_payld_data_bcnt;
          uint32_t xmt_payld_data_bcnt;
!         ql_64bit_data_seg_t     dseg[2];        /* Data segments. */
  } els_passthru_entry_t;
  
  /*
   * ISP24x queue - ELS Pass-Through IOCB response.
   */
*** 954,980 ****
                  struct {
                          uint8_t  reserved_2[2];
                          uint8_t  scsi_status_l;
                          uint8_t  scsi_status_h;
                          uint32_t byte_count;
!                         uint32_t dseg_0_address;
!                         uint32_t dseg_0_length;
!                         uint32_t dseg_1_address;
!                         uint32_t dseg_1_length;
!                         uint32_t dseg_2_address;
!                         uint32_t dseg_2_length;
                  }s0_32bit;
  
                  struct {
                          uint8_t  reserved_3[2];
                          uint8_t  scsi_status_l;
                          uint8_t  scsi_status_h;
                          uint32_t byte_count;
!                         uint32_t dseg_0_address[2];
!                         uint32_t dseg_0_length;
!                         uint32_t dseg_1_address[2];
!                         uint32_t dseg_1_length;
                  }s0_64bit;
  
                  struct {
                          uint8_t  sense_length_l;
                          uint8_t  sense_length_h;
--- 926,944 ----
                  struct {
                          uint8_t reserved_2[2];
                          uint8_t scsi_status_l;
                          uint8_t scsi_status_h;
                          uint32_t byte_count;
!                         ql_32bit_data_seg_t     dseg[3];
                  }s0_32bit;
  
                  struct {
                          uint8_t reserved_3[2];
                          uint8_t scsi_status_l;
                          uint8_t scsi_status_h;
                          uint32_t byte_count;
!                         ql_64bit_data_seg_t     dseg[2];
                  }s0_64bit;
  
                  struct {
                          uint8_t sense_length_l;
                          uint8_t sense_length_h;
*** 1023,1035 ****
                          uint16_t scsi_status;
                          uint32_t relative_offset;
                          uint32_t reserved_3;
                          uint32_t transfer_length;
                          uint32_t reserved_4;
!                         uint32_t dseg_0_address_l;
!                         uint32_t dseg_0_address_h;
!                         uint32_t dseg_0_length;
                  }s0;
  
                  struct {
                          uint16_t sense_length;
                          uint16_t flags;
--- 987,997 ----
                          uint16_t scsi_status;
                          uint32_t relative_offset;
                          uint32_t reserved_3;
                          uint32_t transfer_length;
                          uint32_t reserved_4;
!                         ql_64bit_data_seg_t     dseg;
                  }s0;
  
                  struct {
                          uint16_t sense_length;
                          uint16_t flags;
*** 1047,1059 ****
                          uint32_t residual_length;
                          uint16_t ox_id;
                          uint8_t  reserved_3[10];
                          uint32_t transfer_length;
                          uint32_t reserved_4;
!                         uint32_t dseg_0_address_l;
!                         uint32_t dseg_0_address_h;
!                         uint32_t dseg_0_length;
                  }s2;
          }type;
  } ctio_snd_entry_t;
  
  /*
--- 1009,1019 ----
                          uint32_t residual_length;
                          uint16_t ox_id;
                          uint8_t reserved_3[10];
                          uint32_t transfer_length;
                          uint32_t reserved_4;
!                         ql_64bit_data_seg_t     dseg;
                  }s2;
          }type;
  } ctio_snd_entry_t;
  
  /*
*** 1086,1098 ****
                          uint16_t scsi_status;
                          uint32_t relative_offset;
                          uint32_t reserved_3;
                          uint32_t transfer_length;
                          uint32_t reserved_4;
!                         uint32_t dseg_0_address_l;
!                         uint32_t dseg_0_address_h;
!                         uint32_t dseg_0_length;
                  }s0;
  
                  struct {
                          uint16_t sense_length;
                          uint16_t flags;
--- 1046,1056 ----
                          uint16_t scsi_status;
                          uint32_t relative_offset;
                          uint32_t reserved_3;
                          uint32_t transfer_length;
                          uint32_t reserved_4;
!                         ql_64bit_data_seg_t     dseg;
                  }s0;
  
                  struct {
                          uint16_t sense_length;
                          uint16_t flags;
*** 1110,1122 ****
                          uint32_t residual_length;
                          uint16_t ox_id;
                          uint8_t  reserved_3[10];
                          uint32_t transfer_length;
                          uint32_t reserved_4;
!                         uint32_t dseg_0_address_l;
!                         uint32_t dseg_0_address_h;
!                         uint32_t dseg_0_length;
                  }s2;
          }type;
  } ctio_rcv_entry_t;
  
  /*
--- 1068,1078 ----
                          uint32_t residual_length;
                          uint16_t ox_id;
                          uint8_t reserved_3[10];
                          uint32_t transfer_length;
                          uint32_t reserved_4;
!                         ql_64bit_data_seg_t     dseg;
                  }s2;
          }type;
  } ctio_rcv_entry_t;
  
  /*
*** 1138,1153 ****
          uint8_t  reserved_1[2];
          uint16_t timeout;               /* Command timeout. */
          uint16_t dseg_count;            /* Data segment count. */
          uint8_t  reserved_2[16];
          uint32_t byte_count;            /* Total byte count. */
!         uint32_t dseg_0_address;        /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
!         uint32_t dseg_1_address;        /* Data segment 1 address. */
!         uint32_t dseg_1_length;         /* Data segment 1 length. */
!         uint32_t dseg_2_address;        /* Data segment 2 address. */
!         uint32_t dseg_2_length;         /* Data segment 2 length. */
  } ip_entry_t;
  
  /*
   * ISP queue -  64-Bit DMA addressing IP entry structure definition.
   */
--- 1094,1104 ----
          uint8_t reserved_1[2];
          uint16_t timeout;               /* Command timeout. */
          uint16_t dseg_count;            /* Data segment count. */
          uint8_t reserved_2[16];
          uint32_t byte_count;            /* Total byte count. */
!         ql_32bit_data_seg_t     dseg[3];        /* Data segments. */
  } ip_entry_t;
  
  /*
   * ISP queue -  64-Bit DMA addressing IP entry structure definition.
   */
*** 1167,1180 ****
          uint8_t  reserved_1[2];
          uint16_t timeout;               /* Command timeout. */
          uint16_t dseg_count;            /* Data segment count. */
          uint8_t  reserved_2[16];
          uint32_t byte_count;            /* Total byte count. */
!         uint32_t dseg_0_address[2];     /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
!         uint32_t dseg_1_address[2];     /* Data segment 1 address. */
!         uint32_t dseg_1_length;         /* Data segment 1 length. */
  } ip_a64_entry_t;
  
  /*
   * ISP24xx queue - IP command entry structure definition.
   */
--- 1118,1128 ----
          uint8_t reserved_1[2];
          uint16_t timeout;               /* Command timeout. */
          uint16_t dseg_count;            /* Data segment count. */
          uint8_t reserved_2[16];
          uint32_t byte_count;            /* Total byte count. */
!         ql_64bit_data_seg_t     dseg[2];        /* Data segments. */
  } ip_a64_entry_t;
  
  /*
   * ISP24xx queue - IP command entry structure definition.
   */
*** 1195,1206 ****
          uint16_t frame_hdr_cntrl_flgs;
          uint8_t  reserved_2[12];
          uint32_t sys_define_2;
          uint32_t byte_count;            /* Total byte count. */
          uint8_t  reserved_3[4];
!         uint32_t dseg_0_address[2];     /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
  } ip_cmd_entry_t;
  
  /*
   * IP command Control Flags.
   */
--- 1143,1153 ----
          uint16_t frame_hdr_cntrl_flgs;
          uint8_t reserved_2[12];
          uint32_t sys_define_2;
          uint32_t byte_count;            /* Total byte count. */
          uint8_t reserved_3[4];
!         ql_64bit_data_seg_t     dseg;   /* Data segments. */
  } ip_cmd_entry_t;
  
  /*
   * IP command Control Flags.
   */
*** 1365,1376 ****
          uint8_t  entry_type;            /* Entry type. */
          uint8_t  entry_count;           /* Entry count. */
          uint8_t  sys_define;            /* System defined. */
          uint8_t  entry_status;          /* Entry Status. */
          uint32_t handle;                /* System handle */
!         uint8_t  acq_cnt;               /* format 0 acquired, format 1 count */
!         uint8_t  setup;                 /* format 0 */
          uint8_t  reserved[2];
          uint8_t  port_id[3];
          uint8_t  format;
          uint8_t  vp_index[16];
          uint8_t  reserved_1[32];
--- 1312,1323 ----
          uint8_t entry_type;             /* Entry type. */
          uint8_t entry_count;            /* Entry count. */
          uint8_t sys_define;             /* System defined. */
          uint8_t entry_status;           /* Entry Status. */
          uint32_t handle;                /* System handle */
!         uint8_t vp_acquired;
!         uint8_t vp_setup;
          uint8_t reserved[2];
          uint8_t port_id[3];
          uint8_t format;
          uint8_t vp_index[16];
          uint8_t reserved_1[32];
*** 1382,1397 ****
          uint8_t  sys_define;            /* System defined. */
          uint8_t  entry_status;          /* Entry Status. */
          uint32_t handle;                /* System handle */
          uint16_t vp_count;
          uint8_t  vp_index;
!         uint8_t  status;
          uint8_t  port_id[3];
          uint8_t  format;
          uint8_t  reserved[48];
  } report_id_1_t;
  
  /*
   * ISP2400 queue - Verify Menlo FW entry structure definition.
   */
  #define VERIFY_MENLO_TYPE       0x1b
  typedef struct vfy_menlo_entry {
--- 1329,1368 ----
          uint8_t sys_define;             /* System defined. */
          uint8_t entry_status;           /* Entry Status. */
          uint32_t handle;                /* System handle */
          uint16_t vp_count;
          uint8_t vp_index;
!         uint8_t vp_status;
          uint8_t port_id[3];
          uint8_t format;
          uint8_t reserved[48];
  } report_id_1_t;
  
+ typedef struct report_id_acq {
+         uint8_t entry_type;             /* Entry type. */
+         uint8_t entry_count;            /* Entry count. */
+         uint8_t sys_define;             /* System defined. */
+         uint8_t entry_status;           /* Entry Status. */
+         uint32_t handle;                /* System handle */
+         uint8_t vp_acquired;
+         uint8_t vp_setup;
+         uint8_t vp_index;
+         uint8_t vp_status;
+         uint8_t port_id[3];
+         uint8_t format;
+         uint8_t status_subcode;
+         uint8_t flags;
+         uint16_t fip_flags;
+         uint16_t fcf_index;
+         uint16_t mac[3];
+         uint8_t reserved[4];
+         uint8_t ls_rjt_subcode;
+         uint8_t ls_rjt_explanation;
+         uint8_t ls_rjt_reason_code;
+         uint8_t reserved_1[29];
+ } report_id_acq_t;
+ 
  /*
   * ISP2400 queue - Verify Menlo FW entry structure definition.
   */
  #define VERIFY_MENLO_TYPE       0x1b
  typedef struct vfy_menlo_entry {
*** 1408,1419 ****
          uint32_t exch_addr;
          uint32_t reserved_2[3];
          uint32_t fw_size;
          uint32_t fw_sequence_size;
          uint32_t relative_offset;
!         uint32_t dseg_0_address[2];     /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
  } vfy_menlo_entry_t;
  
  /*
   * Option Flags.
   */
--- 1379,1389 ----
          uint32_t exch_addr;
          uint32_t reserved_2[3];
          uint32_t fw_size;
          uint32_t fw_sequence_size;
          uint32_t relative_offset;
!         ql_64bit_data_seg_t     dseg;   /* Data segments. */
  } vfy_menlo_entry_t;
  
  /*
   * Option Flags.
   */
*** 1442,1453 ****
          uint32_t parameter_2;
          uint32_t parameter_3;
          uint32_t reserved_2[3];
          uint32_t total_byte_count;
          uint32_t reserved_3;
!         uint32_t dseg_0_address[2];     /* Data segment 0 address. */
!         uint32_t dseg_0_length;         /* Data segment 0 length. */
  } menlo_data_entry_t;
  
  /*
   * Mailbox IOCB.
   */
--- 1412,1422 ----
          uint32_t parameter_2;
          uint32_t parameter_3;
          uint32_t reserved_2[3];
          uint32_t total_byte_count;
          uint32_t reserved_3;
!         ql_64bit_data_seg_t     dseg;   /* Data segments. */
  } menlo_data_entry_t;
  
  /*
   * Mailbox IOCB.
   */
*** 1464,1473 ****
--- 1433,1443 ----
          log_entry_t             log;
          vp_control_entry_t      vpc;
          vp_modify_entry_t       vpm;
          vfy_menlo_entry_t       mvfy;
          menlo_data_entry_t      mdata;
+         els_passthru_entry_t    els;
  } ql_mbx_iocb_t;
  
  /*
   * Global Data in ql_iocb.c source file.
   */
*** 1474,1493 ****
  
  /*
   * Global Function Prototypes in ql_iocb.c source file.
   */
  void ql_start_iocb(ql_adapter_state_t *, ql_srb_t *);
! void ql_isp_cmd(ql_adapter_state_t *);
! int ql_marker(ql_adapter_state_t *, uint16_t, uint16_t, uint8_t);
  void ql_isp_rcvbuf(ql_adapter_state_t *);
! void ql_command_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
! void ql_ms_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
! void ql_ip_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
! void ql_command_24xx_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
! void ql_ms_24xx_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
! void ql_ip_24xx_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
! void ql_els_24xx_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
  
  #ifdef  __cplusplus
  }
  #endif
  
--- 1444,1465 ----
  
  /*
   * Global Function Prototypes in ql_iocb.c source file.
   */
  void ql_start_iocb(ql_adapter_state_t *, ql_srb_t *);
! int ql_marker(ql_adapter_state_t *, uint16_t, ql_lun_t *lq, uint8_t);
  void ql_isp_rcvbuf(ql_adapter_state_t *);
! void ql_command_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
!     void *);
! void ql_ms_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *, void *);
! void ql_ip_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *, void *);
! void ql_command_24xx_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
!     void *);
! void ql_ms_24xx_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
!     void *);
! void ql_ip_24xx_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
!     void *);
  
  #ifdef  __cplusplus
  }
  #endif