|
@@ -497,6 +497,50 @@ qla25xx_copy_fce(struct qla_hw_data *ha, void *ptr, uint32_t **last_chain)
|
|
return (char *)iter_reg + ntohl(fcec->size);
|
|
return (char *)iter_reg + ntohl(fcec->size);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static inline void *
|
|
|
|
+qla25xx_copy_exlogin(struct qla_hw_data *ha, void *ptr, uint32_t **last_chain)
|
|
|
|
+{
|
|
|
|
+ struct qla2xxx_offld_chain *c = ptr;
|
|
|
|
+
|
|
|
|
+ if (!ha->exlogin_buf)
|
|
|
|
+ return ptr;
|
|
|
|
+
|
|
|
|
+ *last_chain = &c->type;
|
|
|
|
+
|
|
|
|
+ c->type = cpu_to_be32(DUMP_CHAIN_EXLOGIN);
|
|
|
|
+ c->chain_size = cpu_to_be32(sizeof(struct qla2xxx_offld_chain) +
|
|
|
|
+ ha->exlogin_size);
|
|
|
|
+ c->size = cpu_to_be32(ha->exlogin_size);
|
|
|
|
+ c->addr = cpu_to_be64(ha->exlogin_buf_dma);
|
|
|
|
+
|
|
|
|
+ ptr += sizeof(struct qla2xxx_offld_chain);
|
|
|
|
+ memcpy(ptr, ha->exlogin_buf, ha->exlogin_size);
|
|
|
|
+
|
|
|
|
+ return (char *)ptr + cpu_to_be32(c->size);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void *
|
|
|
|
+qla81xx_copy_exchoffld(struct qla_hw_data *ha, void *ptr, uint32_t **last_chain)
|
|
|
|
+{
|
|
|
|
+ struct qla2xxx_offld_chain *c = ptr;
|
|
|
|
+
|
|
|
|
+ if (!ha->exchoffld_buf)
|
|
|
|
+ return ptr;
|
|
|
|
+
|
|
|
|
+ *last_chain = &c->type;
|
|
|
|
+
|
|
|
|
+ c->type = cpu_to_be32(DUMP_CHAIN_EXCHG);
|
|
|
|
+ c->chain_size = cpu_to_be32(sizeof(struct qla2xxx_offld_chain) +
|
|
|
|
+ ha->exchoffld_size);
|
|
|
|
+ c->size = cpu_to_be32(ha->exchoffld_size);
|
|
|
|
+ c->addr = cpu_to_be64(ha->exchoffld_buf_dma);
|
|
|
|
+
|
|
|
|
+ ptr += sizeof(struct qla2xxx_offld_chain);
|
|
|
|
+ memcpy(ptr, ha->exchoffld_buf, ha->exchoffld_size);
|
|
|
|
+
|
|
|
|
+ return (char *)ptr + cpu_to_be32(c->size);
|
|
|
|
+}
|
|
|
|
+
|
|
static inline void *
|
|
static inline void *
|
|
qla2xxx_copy_atioqueues(struct qla_hw_data *ha, void *ptr,
|
|
qla2xxx_copy_atioqueues(struct qla_hw_data *ha, void *ptr,
|
|
uint32_t **last_chain)
|
|
uint32_t **last_chain)
|
|
@@ -1606,6 +1650,7 @@ qla25xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
|
|
nxt_chain = qla25xx_copy_fce(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla25xx_copy_fce(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla25xx_copy_mqueues(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla25xx_copy_mqueues(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla2xxx_copy_atioqueues(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla2xxx_copy_atioqueues(ha, nxt_chain, &last_chain);
|
|
|
|
+ nxt_chain = qla25xx_copy_exlogin(ha, nxt_chain, &last_chain);
|
|
if (last_chain) {
|
|
if (last_chain) {
|
|
ha->fw_dump->version |= htonl(DUMP_CHAIN_VARIANT);
|
|
ha->fw_dump->version |= htonl(DUMP_CHAIN_VARIANT);
|
|
*last_chain |= htonl(DUMP_CHAIN_LAST);
|
|
*last_chain |= htonl(DUMP_CHAIN_LAST);
|
|
@@ -1932,6 +1977,8 @@ qla81xx_fw_dump(scsi_qla_host_t *vha, int hardware_locked)
|
|
nxt_chain = qla25xx_copy_fce(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla25xx_copy_fce(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla25xx_copy_mqueues(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla25xx_copy_mqueues(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla2xxx_copy_atioqueues(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla2xxx_copy_atioqueues(ha, nxt_chain, &last_chain);
|
|
|
|
+ nxt_chain = qla25xx_copy_exlogin(ha, nxt_chain, &last_chain);
|
|
|
|
+ nxt_chain = qla81xx_copy_exchoffld(ha, nxt_chain, &last_chain);
|
|
if (last_chain) {
|
|
if (last_chain) {
|
|
ha->fw_dump->version |= htonl(DUMP_CHAIN_VARIANT);
|
|
ha->fw_dump->version |= htonl(DUMP_CHAIN_VARIANT);
|
|
*last_chain |= htonl(DUMP_CHAIN_LAST);
|
|
*last_chain |= htonl(DUMP_CHAIN_LAST);
|
|
@@ -2443,6 +2490,8 @@ copy_queue:
|
|
nxt_chain = qla25xx_copy_fce(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla25xx_copy_fce(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla25xx_copy_mqueues(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla25xx_copy_mqueues(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla2xxx_copy_atioqueues(ha, nxt_chain, &last_chain);
|
|
nxt_chain = qla2xxx_copy_atioqueues(ha, nxt_chain, &last_chain);
|
|
|
|
+ nxt_chain = qla25xx_copy_exlogin(ha, nxt_chain, &last_chain);
|
|
|
|
+ nxt_chain = qla81xx_copy_exchoffld(ha, nxt_chain, &last_chain);
|
|
if (last_chain) {
|
|
if (last_chain) {
|
|
ha->fw_dump->version |= htonl(DUMP_CHAIN_VARIANT);
|
|
ha->fw_dump->version |= htonl(DUMP_CHAIN_VARIANT);
|
|
*last_chain |= htonl(DUMP_CHAIN_LAST);
|
|
*last_chain |= htonl(DUMP_CHAIN_LAST);
|