bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * CDDL HEADER START
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * The contents of this file are subject to the terms of the
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Common Development and Distribution License (the "License").
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * You may not use this file except in compliance with the License.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * or http://www.opensolaris.org/os/licensing.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * See the License for the specific language governing permissions
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * and limitations under the License.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * When distributing Covered Code, include this CDDL HEADER in each
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * If applicable, add the following below this CDDL HEADER, with the
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * fields enclosed by brackets "[]" replaced with your own identifying
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * information: Portions Copyright [yyyy] [name of copyright owner]
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * CDDL HEADER END
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan * Copyright 2010 QLogic Corporation. All rights reserved.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#include <qlge.h>
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic uint32_t ql_dump_buf_8(uint8_t *, uint32_t, uint32_t);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic uint32_t ql_dump_buf_16(uint16_t *, uint32_t, uint32_t);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic uint32_t ql_dump_buf_32(uint32_t *, uint32_t, uint32_t);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic uint32_t ql_dump_buf_64(uint64_t *, uint32_t, uint32_t);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int ql_binary_core_dump(qlge_t *, uint32_t, uint32_t *);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic char ISP_8100_REGION[] = {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "nic: nic_boot, nic_param, nic_vpd \n"
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "mpi: mpi_fw, mpi_config, edc_fw\n"
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "fc: fc_boot, fc_fw, fc_nvram, fc_vpd"};
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic char ISP_8100_AVAILABLE_DUMPS[] = {"core,register,all"};
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Get byte from I/O port
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanuint8_t
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get8(qlge_t *qlge, uint32_t index)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint8_t ret;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ret = (uint8_t)ddi_get8(qlge->dev_handle,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)(((caddr_t)qlge->iobase) + index));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (ret);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Get word from I/O port
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanuint16_t
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get16(qlge_t *qlge, uint32_t index)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint16_t ret;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ret = (uint16_t)ddi_get16(qlge->dev_handle,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint16_t *)(void *)(((caddr_t)qlge->iobase) + index));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (ret);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Get double word from I/O port
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanuint32_t
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get32(qlge_t *qlge, uint32_t index)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t ret;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ret = ddi_get32(qlge->dev_handle,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint32_t *)(void *)(((caddr_t)qlge->iobase) + index));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (ret);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Send byte to I/O port
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_put8(qlge_t *qlge, uint32_t index, uint8_t data)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ddi_put8(qlge->dev_handle,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)(((caddr_t)qlge->iobase) + index), data);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Send word to I/O port
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_put16(qlge_t *qlge, uint32_t index, uint16_t data)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ddi_put16(qlge->dev_handle,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint16_t *)(void *)(((caddr_t)qlge->iobase) + index), data);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Send double word to I/O port
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_put32(qlge_t *qlge, uint32_t index, uint32_t data)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ddi_put32(qlge->dev_handle,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint32_t *)(void *)(((caddr_t)qlge->iobase) + index), data);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Read from a register
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanuint32_t
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_read_reg(qlge_t *qlge, uint32_t reg)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t data = ql_get32(qlge, reg);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (data);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Write 32 bit data to a register
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_write_reg(qlge_t *qlge, uint32_t reg, uint32_t data)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_put32(qlge, reg, data);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Set semaphore register bit to lock access to a shared register
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanint
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_sem_lock(qlge_t *qlge, uint32_t sem_mask, uint32_t sem_bits)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t value;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_put32(qlge, REG_SEMAPHORE, (sem_mask | sem_bits));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan value = ql_get32(qlge, REG_SEMAPHORE);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return ((value & (sem_mask >> 16)) == sem_bits);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Wait up to "delay" seconds until the register "reg"'s
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * "wait_bit" is set
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Default wait time is 5 seconds if "delay" time was not set.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanint
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_wait_reg_bit(qlge_t *qlge, uint32_t reg, uint32_t wait_bit, int set,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t delay)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t reg_status;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t timer = 5; /* 5 second */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int rtn_val = DDI_SUCCESS;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t delay_ticks;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (delay != 0)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan timer = delay;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan delay_ticks = timer * 100;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * wait for Configuration register test bit to be set,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * if not, then it is still busy.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan do {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan reg_status = ql_read_reg(qlge, reg);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* wait for bit set or reset? */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (set == BIT_SET) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (reg_status & wait_bit)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan else
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge_delay(QL_ONE_SEC_DELAY / 100);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (reg_status & wait_bit)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge_delay(QL_ONE_SEC_DELAY / 100);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan else
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } while (--delay_ticks);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (delay_ticks == 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan rtn_val = DDI_FAILURE;
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan cmn_err(CE_WARN, "qlge(%d)wait reg %x, bit %x time out",
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan qlge->instance, reg, wait_bit);
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan if (qlge->fm_enable) {
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan ql_fm_ereport(qlge, DDI_FM_DEVICE_NO_RESPONSE);
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan atomic_or_32(&qlge->flags, ADAPTER_ERROR);
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (rtn_val);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Dump the value of control registers
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_dump_all_contrl_regs(qlge_t *qlge)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int i;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t data;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < 0xff; i = i+4) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan data = ql_read_reg(qlge, i);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tregister# 0x%x value: 0x%x\n", i, data);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Prints string plus buffer.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_dump_buf(char *string, uint8_t *buffer, uint8_t wd_size,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t count)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t offset = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (strcmp(string, "") != 0)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf(string);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if ((buffer == NULL) || (count == 0))
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan switch (wd_size) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 8:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan while (count) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count = ql_dump_buf_8(buffer, count, offset);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset += 8;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buffer += 8;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 16:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan while (count) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count = ql_dump_buf_16((uint16_t *)(void *)buffer,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count, offset);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset += 16;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buffer += 16;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 32:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan while (count) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count = ql_dump_buf_32((uint32_t *)(void *)buffer,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count, offset);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset += 16;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buffer += 16;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 64:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan while (count) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count = ql_dump_buf_64((uint64_t *)(void *)buffer,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count, offset);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset += 16;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buffer += 16;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan default:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Print as 8bit bytes
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic uint32_t
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_dump_buf_8(uint8_t *bp, uint32_t count, uint32_t offset)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan switch (count) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 1:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %02x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 2:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %02x %02x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 3:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %02x %02x %02x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 4:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %02x %02x %02x %02x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2), *(bp+3));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 5:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %02x %02x %02x %02x %02x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2), *(bp+3), *(bp+4));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 6:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %02x %02x %02x %02x %02x %02x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2), *(bp+3), *(bp+4), *(bp+5));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 7:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %02x %02x %02x %02x %02x %02x %02x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2), *(bp+3), *(bp+4), *(bp+5), *(bp+6));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan default:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %02x %02x %02x %02x %02x %02x %02x %02x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2), *(bp+3), *(bp+4), *(bp+5), *(bp+6),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *(bp+7));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (count < 8) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count -= 8;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (count);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Print as 16bit
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic uint32_t
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_dump_buf_16(uint16_t *bp, uint32_t count, uint32_t offset)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan switch (count) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 1:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %04x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 2:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %04x %04x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 3:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %04x %04x %04x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 4:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %04x %04x %04x %04x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2), *(bp+3));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 5:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %04x %04x %04x %04x %04x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2), *(bp+3), *(bp+4));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 6:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %04x %04x %04x %04x %04x %04x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2), *(bp+3), *(bp+4), *(bp+5));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 7:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %04x %04x %04x %04x %04x %04x %04x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2), *(bp+3), *(bp+4), *(bp+5), *(bp+6));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan default:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %04x %04x %04x %04x %04x %04x %04x %04x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2), *(bp+3), *(bp+4), *(bp+5), *(bp+6),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *(bp+7));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (count < 8) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count -= 8;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (count);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Print as 32bit
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic uint32_t
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_dump_buf_32(uint32_t *bp, uint32_t count, uint32_t offset)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan switch (count) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 1:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %08x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 2:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %08x %08x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 3:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %08x %08x %08x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan default:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %08x %08x %08x %08x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1), *(bp+2), *(bp+3));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (count < 4) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count -= 4;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (count);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Print as 64bit
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic uint32_t
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_dump_buf_64(uint64_t *bp, uint32_t count, uint32_t offset)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan switch (count) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 1:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %016x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan default:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("0x%016x : %016x %016x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp, *(bp+1));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (count < 2) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count -= 2;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (count);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Print CQICB control block information
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/* ARGSUSED */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_dump_cqicb(qlge_t *qlge, struct cqicb_t *cqicb)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan _NOTE(ARGUNUSED(qlge));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ASSERT(qlge != NULL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ASSERT(cqicb != NULL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("ql_dump_cqicb:entered\n");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t msix_vect = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cqicb->msix_vect);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t reserved1 = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cqicb->reserved1);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t reserved2 = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cqicb->reserved2);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t flags = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cqicb->flags);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t len = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(cqicb->len));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t rid = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(cqicb->rid));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t cq_base_addr_lo = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le32_to_cpu(cqicb->cq_base_addr_lo));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t cq_base_addr_hi = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le32_to_cpu(cqicb->cq_base_addr_hi));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t prod_idx_addr_lo = %x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le32_to_cpu(cqicb->prod_idx_addr_lo));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t prod_idx_addr_hi = %x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le32_to_cpu(cqicb->prod_idx_addr_hi));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t pkt_delay = %d\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(cqicb->pkt_delay));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t irq_delay = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(cqicb->irq_delay));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t lbq_addr_lo = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le32_to_cpu(cqicb->lbq_addr_lo));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t lbq_addr_hi = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le32_to_cpu(cqicb->lbq_addr_hi));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t lbq_buf_size = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(cqicb->lbq_buf_size));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t lbq_len = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(cqicb->lbq_len));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t sbq_addr_lo = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le32_to_cpu(cqicb->sbq_addr_lo));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t sbq_addr_hi = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le32_to_cpu(cqicb->sbq_addr_hi));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t sbq_buf_size = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(cqicb->sbq_buf_size));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t sbq_len = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(cqicb->sbq_len));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("ql_dump_cqicb:exiting\n");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Print WQICB control block information
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/* ARGSUSED */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_dump_wqicb(qlge_t *qlge, struct wqicb_t *wqicb)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan _NOTE(ARGUNUSED(qlge));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ASSERT(qlge != NULL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ASSERT(wqicb != NULL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("ql_dump_wqicb:entered\n");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t len = %x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(wqicb->len));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t flags = %x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(wqicb->flags));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t cq_id_rss = %x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(wqicb->cq_id_rss));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t rid = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(wqicb->rid));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t wq_addr_lo = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le32_to_cpu(wqicb->wq_addr_lo));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t wq_addr_hi = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le32_to_cpu(wqicb->wq_addr_hi));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t cnsmr_idx_addr_lo = %x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le32_to_cpu(wqicb->cnsmr_idx_addr_lo));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t cnsmr_idx_addr_hi = %x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le32_to_cpu(wqicb->cnsmr_idx_addr_hi));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("ql_dump_wqicb:exit\n");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Print request descriptor information
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_dump_req_pkt(qlge_t *qlge, struct ob_mac_iocb_req *pkt, void *oal,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int number)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int i = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan struct oal_entry *oal_entry;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("ql_dump_req_pkt(%d):enter\n", qlge->instance);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t opcode = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pkt->opcode);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t flag0 = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pkt->flag0);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t flag1 = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pkt->flag1);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t flag2 = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pkt->flag2);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t frame_len = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(pkt->frame_len));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t transaction_id_low = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(pkt->tid));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t txq_idx = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(pkt->txq_idx));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t protocol_hdr_len = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(pkt->protocol_hdr_len));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t hdr_off = %d\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(pkt->hdr_off));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t vlan_tci = %d\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(pkt->vlan_tci));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t mss = %d\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan le16_to_cpu(pkt->mss));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* if OAL is needed */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (number > TX_DESC_PER_IOCB) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < TX_DESC_PER_IOCB; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t buf_addr%d_low = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i, pkt->oal_entry[i].buf_addr_low);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t buf_addr%d_high = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i, pkt->oal_entry[i].buf_addr_high);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t buf%d_len = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i, pkt->oal_entry[i].buf_len);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan oal_entry = (struct oal_entry *)oal;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t additional %d tx descriptors in OAL\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (number - TX_DESC_PER_IOCB + 1));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < (number-TX_DESC_PER_IOCB + 1); i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t buf_addr%d_low = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i, oal_entry[i].buf_addr_low);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t buf_addr%d_high = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i, oal_entry[i].buf_addr_high);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t buf%d_len = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i, oal_entry[i].buf_len);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < number; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t buf_addr%d_low = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i, pkt->oal_entry[i].buf_addr_low);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t buf_addr%d_high = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i, pkt->oal_entry[i].buf_addr_high);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\t buf%d_len = 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i, pkt->oal_entry[i].buf_len);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("ql_dump_req_pkt:exiting\n");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Print PCI configuration
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_dump_pci_config(qlge_t *qlge)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.vendor_id = (uint16_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get16(qlge->pci_handle, PCI_CONF_VENID);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.device_id = (uint16_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get16(qlge->pci_handle, PCI_CONF_DEVID);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.command = (uint16_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get16(qlge->pci_handle, PCI_CONF_COMM);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.status = (uint16_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get16(qlge->pci_handle, PCI_CONF_STAT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.revision = (uint8_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get8(qlge->pci_handle, PCI_CONF_REVID);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.prog_class = (uint8_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get8(qlge->pci_handle, PCI_CONF_PROGCLASS);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.sub_class = (uint8_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get8(qlge->pci_handle, PCI_CONF_SUBCLASS);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.base_class = (uint8_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get8(qlge->pci_handle, PCI_CONF_BASCLASS);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.cache_line_size = (uint8_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get8(qlge->pci_handle, PCI_CONF_CACHE_LINESZ);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.latency_timer = (uint8_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get8(qlge->pci_handle, PCI_CONF_LATENCY_TIMER);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.header_type = (uint8_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get8(qlge->pci_handle, PCI_CONF_HEADER);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.io_base_address =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get32(qlge->pci_handle, PCI_CONF_BASE0);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.pci_cntl_reg_set_mem_base_address_lower =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get32(qlge->pci_handle, PCI_CONF_BASE1);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.pci_cntl_reg_set_mem_base_address_upper =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get32(qlge->pci_handle, PCI_CONF_BASE2);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.pci_doorbell_mem_base_address_lower =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get32(qlge->pci_handle, PCI_CONF_BASE3);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.pci_doorbell_mem_base_address_upper =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get32(qlge->pci_handle, PCI_CONF_BASE4);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.sub_vendor_id = (uint16_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get16(qlge->pci_handle, PCI_CONF_SUBVENID);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.sub_device_id = (uint16_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get16(qlge->pci_handle, PCI_CONF_SUBSYSID);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.expansion_rom =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get32(qlge->pci_handle, PCI_CONF_ROM);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.intr_line = (uint8_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get8(qlge->pci_handle, PCI_CONF_ILINE);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.intr_pin = (uint8_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get8(qlge->pci_handle, PCI_CONF_IPIN);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.min_grant = (uint8_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get8(qlge->pci_handle, PCI_CONF_MIN_G);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.max_latency = (uint8_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get8(qlge->pci_handle, PCI_CONF_MAX_L);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.pcie_device_control = (uint16_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get16(qlge->pci_handle, 0x54);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.link_status = (uint16_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get16(qlge->pci_handle, 0x5e);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.msi_msg_control = (uint16_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get16(qlge->pci_handle, 0x8a);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.msi_x_msg_control = (uint16_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_get16(qlge->pci_handle, 0xa2);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ql_dbgprnt & DBG_GLD) {
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan ql_printf("ql_dump_pci_config(%d): enter\n",
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan qlge->instance);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tvendorid =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.vendor_id);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tdeviceid =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.device_id);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tcommand =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.command);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tstatus =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.status);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\trevision id =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.revision);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tprogram class =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.prog_class);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tsubclass code =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.sub_class);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tbase class code =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.base_class);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tcache line size =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.cache_line_size);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tlatency timer =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.latency_timer);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\theader =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.header_type);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tI/O Base Register Address0 =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.io_base_address);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tpci_cntl_reg_set_mem_base_address_lower =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.pci_cntl_reg_set_mem_base_address_lower);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tpci_cntl_reg_set_mem_base_address_upper =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.pci_cntl_reg_set_mem_base_address_upper);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tpci_doorbell_mem_base_address_lower =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.pci_doorbell_mem_base_address_lower);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tpci_doorbell_mem_base_address_upper =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.pci_doorbell_mem_base_address_upper);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tSubsytem Vendor Id =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.sub_vendor_id);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tSubsytem Id =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.sub_device_id);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tExpansion ROM Base Register =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.expansion_rom);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tInterrupt Line =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.intr_line);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tInterrupt Pin =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.intr_pin);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tMin Grant =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.min_grant);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tMax Grant =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.max_latency);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tdevice_control =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.pcie_device_control);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tlink_status =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.link_status);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tmsi_msg_control =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.msi_msg_control);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_printf("\tmsi_x_msg_control =0x%x.\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.msi_x_msg_control);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan ql_printf("ql_dump_pci_config(%d): exit\n", qlge->instance);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Print a formated string
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_printf(const char *fmt, ...)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan va_list ap;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan va_start(ap, fmt);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan vcmn_err(CE_CONT, fmt, ap);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan va_end(ap);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Read all control registers value and save in a string
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic uint32_t
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanread_ctrl_reg_set(qlge_t *qlge, caddr_t bufp)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int i, j;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t data;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan caddr_t bp = bufp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t cnt;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* read Reg 0 -0xC4 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0, j = 0; i <= 0xfc; i += 4) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan data = ql_read_reg(qlge, i);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void) sprintf(bp, "Register[%x] = 0x%x\n", i, data);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp += strlen(bp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (i == REG_INTERRUPT_ENABLE) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* Read */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan data = INTR_EN_TYPE_READ;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_reg(qlge, i, (data | (data << 16)));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan data = ql_read_reg(qlge, i);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (data & INTR_EN_EN) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void) sprintf(bp, "Intr0 enabled: 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan data);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp += strlen(bp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void) sprintf(bp, "Intr0 disabled: 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan data);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp += strlen(bp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan j++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *bp = '\0';
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cnt = (uint32_t)((uintptr_t)bp - (uintptr_t)bufp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("%s(%d) %x bytes to export\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance, cnt));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (cnt);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Get address and size of image tables in flash memory
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get_flash_table_region_info(qlge_t *qlge, uint32_t region, uint32_t *addr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t *size)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int rval = DDI_SUCCESS;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan switch (region) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_FDT:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_FDT_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_FDT_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_FLT:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_FLT_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_FLT_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_NIC_BOOT_CODE:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_NIC_BOOT_CODE_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_NIC_BOOT_CODE_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_MPI_FW_USE:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_MPI_FW_USE_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_MPI_FW_USE_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_MPI_RISC_FW:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_MPI_RISC_FW_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_MPI_RISC_FW_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_VPD0:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_VPD0_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_VPD0_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_NIC_PARAM0:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_NIC_PARAM0_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_NIC_PARAM0_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_VPD1:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_VPD1_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_VPD1_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_NIC_PARAM1:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_NIC_PARAM1_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_NIC_PARAM1_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_MPI_CFG:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_MPI_CFG_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_MPI_CFG_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_EDC_PHY_FW:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_EDC_PHY_FW_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_EDC_PHY_FW_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_FC_BOOT_CODE:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_FC_BOOT_CODE_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_FC_BOOT_CODE_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLT_REGION_FC_FW:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *addr = ISP_8100_FC_FW_ADDR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *size = ISP_8100_FC_FW_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan default:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "%s(%d): Unknown region code %x!",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance, region);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan rval = DDI_FAILURE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (rval);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Get PCI bus information
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get_pci_bus_info(qlge_t *qlge, uint32_t *pci_bus_info_ptr)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan dev_info_t *dip;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int *options;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan unsigned int noptions;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int rval = DDI_FAILURE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan dip = qlge->dip;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ddi_prop_lookup_int_array(DDI_DEV_T_ANY, dip, 0,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "assigned-addresses", &options, &noptions) == DDI_PROP_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("%s(%d) %d options\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance, noptions));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (noptions != 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *pci_bus_info_ptr = options[0];
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan rval = DDI_SUCCESS;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ddi_prop_free(options);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (rval);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Build the first packet header in case that 1k+ data transfer is required
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanbuild_init_pkt_header(qlge_t *qlge, ioctl_header_info_t *pheader, uint32_t size)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_total_length = size;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("%d bytes used in kernel buffer\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_total_length));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->expected_trans_times =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint16_t)(qlge->ioctl_total_length / IOCTL_MAX_DATA_LEN);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if ((qlge->ioctl_total_length % IOCTL_MAX_DATA_LEN) != 0)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->expected_trans_times++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("expected transer times %d \n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->expected_trans_times));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_transferred_bytes = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * tell user total bytes prepare to receive in the
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * following transactions
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->version = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->total_length = qlge->ioctl_total_length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->payload_length = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->expected_trans_times = qlge->expected_trans_times;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Do ioctl on hardware
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/* ARGSUSED */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanenum ioc_reply
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_chip_ioctl(qlge_t *qlge, queue_t *q, mblk_t *mp)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mblk_t *dmp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int cmd, i, rval;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan struct ql_device_reg *reg;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan struct ql_pci_reg *pci_reg;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan struct ql_flash_io_info *flash_io_info_ptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_cfg_t *pci_cfg;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t *pvalue;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan struct qlnic_prop_info *prop_ptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_adapter_info_t *adapter_info_ptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint16_t payload_len;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t remaining_bytes;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ioctl_header_info_t *pheader;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan caddr_t bp, bdesc;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t len;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t addr, size, region;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan struct iocblk *iocp = (struct iocblk *)(void *)mp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint16_t iltds_image_entry_regions[] = {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FLT_REGION_NIC_BOOT_CODE, FLT_REGION_MPI_RISC_FW,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FLT_REGION_EDC_PHY_FW, FLT_REGION_FC_BOOT_CODE,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FLT_REGION_FC_FW};
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_iltds_description_header_t *iltds_ptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_iltds_header_t *ql_iltds_header_ptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t offset;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint16_t requested_dump;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * There should be a M_DATA mblk following
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * the initial M_IOCTL mblk
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if ((dmp = mp->b_cont) == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "%s(%d) b_count NULL",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmd = iocp->ioc_cmd;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan reg = (struct ql_device_reg *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_reg = (struct ql_pci_reg *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pvalue = (uint32_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan flash_io_info_ptr = (struct ql_flash_io_info *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan adapter_info_ptr = (ql_adapter_info_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan switch (cmd) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_GET_DBGLEAVEL:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (iocp->ioc_count != sizeof (*pvalue)) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *pvalue = qlge->ql_dbgprnt;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_SET_DBGLEAVEL:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (iocp->ioc_count != sizeof (*pvalue)) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ql_dbgprnt = *pvalue;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_WRITE_REG:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (iocp->ioc_count != sizeof (*reg)) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_reg(qlge, reg->addr, reg->value);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_READ_PCI_REG:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (iocp->ioc_count != sizeof (*pci_reg)) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* protect against bad addr values */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (pci_reg->addr > 0xff)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_reg->value =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint16_t)pci_config_get16(qlge->pci_handle,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_reg->addr);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_WRITE_PCI_REG:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (iocp->ioc_count != sizeof (*pci_reg)) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* protect against bad addr values */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (pci_reg->addr > 0xff)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_config_put16(qlge->pci_handle, pci_reg->addr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_reg->value);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_PCI_STATUS:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (len != sizeof (pci_cfg_t)) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "QLA_PCI_STATUS size error, "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "driver size 0x%x not 0x%x ",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (int)MBLKL(dmp),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (int)sizeof (pci_cfg_t));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pci_cfg = (pci_cfg_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* get PCI configuration */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bcopy((const void *)(&qlge->pci_cfg),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void *)pci_cfg, len);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_GET_PROP:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (len != sizeof (struct qlnic_prop_info)) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "QLA_GET_PROP size error, "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "driver size 0x%x not 0x%x ",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (int)MBLKL(dmp),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (int)sizeof (pci_cfg_t));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan prop_ptr =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (struct qlnic_prop_info *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* get various properties */
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan mutex_enter(&qlge->mbx_mutex);
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_firmware_version(qlge,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan &prop_ptr->mpi_version);
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_fw_state(qlge, &prop_ptr->fw_state);
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) qlge_get_link_status(qlge,
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan &prop_ptr->link_status);
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan mutex_exit(&qlge->mbx_mutex);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_LIST_ADAPTER_INFO:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* count must be exactly same */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (iocp->ioc_count != sizeof (ql_adapter_info_t)) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_get_pci_bus_info(qlge,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan &(adapter_info_ptr->pci_binding)) != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan adapter_info_ptr->vendor_id =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.vendor_id;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan adapter_info_ptr->sub_vendor_id =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.sub_vendor_id;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan adapter_info_ptr->device_id =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.device_id;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan adapter_info_ptr->sub_device_id =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->pci_cfg.sub_device_id;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bcopy(qlge->unicst_addr[0].addr.ether_addr_octet,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan &(adapter_info_ptr->cur_addr), ETHERADDRL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_SHOW_REGION:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bdesc = (caddr_t)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (CFG_IST(qlge, CFG_CHIP_8100))
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void) sprintf(bdesc, "ISP 8100 available "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "regions %s", ISP_8100_REGION);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_CONTINUE_COPY_OUT:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp = qlge->ioctl_buf_ptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp += qlge->ioctl_transferred_bytes;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan remaining_bytes =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_total_length -
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_transferred_bytes;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* how many data bytes sent this time */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan payload_len =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint16_t)min(IOCTL_MAX_DATA_LEN, remaining_bytes);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* create packet header */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader = (ioctl_header_info_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->version = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->total_length = qlge->ioctl_total_length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->expected_trans_times =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->expected_trans_times;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->payload_length = payload_len;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* create packet payload */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bdesc = (caddr_t)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bdesc += IOCTL_HEADER_LEN;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bcopy(bp, bdesc, pheader->payload_length);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_transferred_bytes +=
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->payload_length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("QLA_CONTINUE_COPY_OUT, %d bytes"
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan " exported \n", payload_len));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_transferred_bytes >=
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_total_length) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("all data out,clean up \n"));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan kmem_free(qlge->ioctl_buf_ptr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_lenth);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_ptr = NULL;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_lenth = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iocp->ioc_count = len;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_CONTINUE_COPY_IN:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bdesc = qlge->ioctl_buf_ptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bdesc += qlge->ioctl_transferred_bytes;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan remaining_bytes = qlge->ioctl_total_length -
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_transferred_bytes;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader = (ioctl_header_info_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan payload_len = pheader->payload_length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* create packet header */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->version = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->total_length = qlge->ioctl_total_length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->expected_trans_times =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->expected_trans_times;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* get packet payload */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp = (caddr_t)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp += IOCTL_HEADER_LEN;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bcopy(bp, bdesc, pheader->payload_length);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_transferred_bytes +=
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->payload_length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("QLA_CONTINUE_COPY_IN, %d bytes "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "received \n", payload_len));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_transferred_bytes >=
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_total_length) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan region = pheader->option[0];
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_flash_table_region_info(qlge,
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan region, &addr, &size);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("write data to region 0x%x,"
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan " addr 0x%x, max size %d bytes\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan region, addr, size));
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) qlge_load_flash(qlge,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)qlge->ioctl_buf_ptr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_transferred_bytes /* size */,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan addr);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("all %d data written, do "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "clean up \n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_transferred_bytes));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan kmem_free(qlge->ioctl_buf_ptr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_lenth);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_ptr = NULL;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_lenth = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iocp->ioc_count = len;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_READ_CONTRL_REGISTERS:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_lenth =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan IOCTL_MAX_BUF_SIZE; /* 512k */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_ptr =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan kmem_zalloc(qlge->ioctl_buf_lenth,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan KM_SLEEP);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "%s(%d): Unable to "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "allocate ioctl buffer",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = read_ctrl_reg_set(qlge, qlge->ioctl_buf_ptr);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader = (ioctl_header_info_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* build initial ioctl packet header */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan build_init_pkt_header(qlge, pheader, len);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iocp->ioc_count = sizeof (*pheader);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_SUPPORTED_DUMP_TYPES: /* show available regions */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bdesc = (caddr_t)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (CFG_IST(qlge, CFG_CHIP_8100))
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void) sprintf(bdesc, "ISP 8100 supported dump"
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan " types: %s", ISP_8100_AVAILABLE_DUMPS);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_GET_BINARY_CORE_DUMP:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan requested_dump = *((uint16_t *)(void *)dmp->b_rptr);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan rval = ql_binary_core_dump(qlge, requested_dump, &len);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (rval == DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (ioctl_header_info_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* build initial ioctl packet header */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan build_init_pkt_header(qlge, pheader, len);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iocp->ioc_count = sizeof (*pheader);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "ql_binary_core_dump error");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_TRIGGER_SYS_ERROR_EVENT:
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_trigger_system_error_event(qlge);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_READ_VPD:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_lenth =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan IOCTL_MAX_BUF_SIZE; /* 512k */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_ptr =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan kmem_zalloc(qlge->ioctl_buf_lenth,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan KM_SLEEP);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "%s(%d): Unable to "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "allocate ioctl buffer",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, (" 0x%x user buffer available \n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len));
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_flash_vpd(qlge,
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (uint8_t *)qlge->ioctl_buf_ptr);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader = (ioctl_header_info_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* build initial ioctl packet header */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan build_init_pkt_header(qlge, pheader,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ISP_8100_VPD0_SIZE);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iocp->ioc_count = sizeof (*pheader);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_MANUAL_READ_FLASH:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_lenth =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan IOCTL_MAX_BUF_SIZE; /* 512k */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_ptr =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan kmem_zalloc(qlge->ioctl_buf_lenth,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan KM_SLEEP);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "%s(%d): Unable to "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "allocate ioctl buffer",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan rval = qlge_dump_fcode(qlge,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)qlge->ioctl_buf_ptr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan flash_io_info_ptr->size,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan flash_io_info_ptr->addr);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (rval != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader = (ioctl_header_info_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* build initial ioctl packet header */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan build_init_pkt_header(qlge, pheader,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan flash_io_info_ptr->size);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iocp->ioc_count = sizeof (*pheader);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_READ_FLASH:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_lenth = IOCTL_MAX_BUF_SIZE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_ptr =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan kmem_zalloc(qlge->ioctl_buf_lenth,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan KM_SLEEP);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "%s(%d): Unable to"
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "allocate ioctl buffer",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan region = *pvalue;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_get_flash_table_region_info(qlge, region, &addr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan &size) != DDI_SUCCESS)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan rval = qlge_dump_fcode(qlge,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)qlge->ioctl_buf_ptr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan size, addr);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (rval != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader = (ioctl_header_info_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* build initial ioctl packet header */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan build_init_pkt_header(qlge, pheader, size);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iocp->ioc_count = sizeof (*pheader);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_WRITE_FLASH:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader = (ioctl_header_info_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan region = pheader->option[0];
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_lenth = pheader->total_length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_total_length = pheader->total_length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->expected_trans_times =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader->expected_trans_times;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_transferred_bytes = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_ptr =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan kmem_zalloc(qlge->ioctl_buf_lenth,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan KM_SLEEP);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "%s(%d): Unable to "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "allocate ioctl buffer",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("QLA_WRITE_FLASH write to region "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "%x, total buffer size 0x%x bytes\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan region, qlge->ioctl_buf_lenth));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iocp->ioc_count = sizeof (*pheader);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_READ_FW_IMAGE:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr != NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan kmem_free(qlge->ioctl_buf_ptr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_lenth);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_lenth = IOCTL_MAX_BUF_SIZE * 4;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_ptr = kmem_zalloc(qlge->ioctl_buf_lenth,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan KM_SLEEP);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "%s(%d): Unable to "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "allocate ioctl buffer",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr = (ql_iltds_description_header_t *)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void *)qlge->ioctl_buf_ptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->iltds_table_header.signature =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FLASH_ILTDS_SIGNATURE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->iltds_table_header.table_version = 1;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->iltds_table_header.length =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ILTDS_DESCRIPTION_HEADERS_LEN;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->iltds_table_header.number_entries =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan IMAGE_TABLE_IMAGE_DEFAULT_ENTRIES +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1 /* timestamp */;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->iltds_table_header.reserved = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->iltds_table_header.version = 1;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* where is the flash data saved */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bdesc = qlge->ioctl_buf_ptr +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ILTDS_DESCRIPTION_HEADERS_LEN;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset = iltds_ptr->iltds_table_header.length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < IMAGE_TABLE_IMAGE_DEFAULT_ENTRIES;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan region = iltds_image_entry_regions[i];
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_get_flash_table_region_info(qlge,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan region, &addr, &size) != DDI_SUCCESS)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("region %x addr 0x%x, 0x%x "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "bytes\n", region, addr, size));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* Dump one image entry */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan rval = qlge_dump_fcode(qlge, (uint8_t *)bdesc,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan size, addr);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (rval != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bdesc += size;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->img_entry[i].region_type =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint16_t)region;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->img_entry[i].region_version_len = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->img_entry[i].region_version[0] = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->img_entry[i].region_version[1] = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->img_entry[i].region_version[2] = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->img_entry[i].offset_lo = LSW(offset);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->img_entry[i].offset_hi = MSW(offset);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->img_entry[i].size_lo = LSW(size);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->img_entry[i].size_hi = MSW(size);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->img_entry[i].swap_mode = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->img_entry[i].card_type = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("image offset %x size %x "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "bytes\n", offset, size));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("offset %x lsw %x msw %x"
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan " \n", offset, LSW(offset), MSW(offset)));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan offset += size;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* Last entry */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->time_stamp.region_type =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FLT_REGION_TIME_STAMP;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->time_stamp.region_version_len = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->time_stamp.region_version[0] = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->time_stamp.region_version[1] = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->time_stamp.region_version[2] = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->time_stamp.year = 0x09;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->time_stamp.month = 0x01;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->time_stamp.day = 0x20;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->time_stamp.hour = 0x14;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->time_stamp.min = 0x20;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iltds_ptr->time_stamp.sec = 0x50;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan pheader = (ioctl_header_info_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* build initial ioctl packet header */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan build_init_pkt_header(qlge, pheader, offset);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iocp->ioc_count = sizeof (*pheader);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_WRITE_FW_IMAGE_HEADERS:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len = (uint32_t)iocp->ioc_count;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (len == 0)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_iltds_header_ptr =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (ql_iltds_header_t *)(void *)dmp->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (len != ql_iltds_header_ptr->length) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "QLA_WRITE_FW_IMAGE_HEADERS "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "data length error!"
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan " %x bytes expected, %x received",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_iltds_header_ptr->length, len);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("Fw Image header len 0x%x bytes, "
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "0x%x entries\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan len, ql_iltds_header_ptr->number_entries));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_buf("all copy in data:\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)dmp->b_rptr, 8, len);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mp->b_cont = NULL;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLA_SOFT_RESET:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan iocp->ioc_count = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_wake_asic_reset_soft_intr(qlge);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("QLA_SOFT_RESET started \n"));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan default:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_REPLY);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Loopback ioctl code
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic lb_property_t loopmodes[] = {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan { normal, "normal", QLGE_LOOP_NONE },
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan { internal, "parallel", QLGE_LOOP_INTERNAL_PARALLEL },
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan { internal, "serial", QLGE_LOOP_INTERNAL_SERIAL },
cddcb3dae85e03889ec217ef3da5a8898f4f66c7Sukumar Swaminathan { external, "phy", QLGE_LOOP_EXTERNAL_PHY }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan};
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Set Loopback mode
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic enum ioc_reply
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanqlge_set_loop_mode(qlge_t *qlge, uint32_t mode)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * If the mode is same as current mode ...
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (mode == qlge->loop_back_mode)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_ACK);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Validate the requested mode
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan switch (mode) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan default:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLGE_LOOP_NONE:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLGE_LOOP_INTERNAL_PARALLEL:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case QLGE_LOOP_INTERNAL_SERIAL:
cddcb3dae85e03889ec217ef3da5a8898f4f66c7Sukumar Swaminathan case QLGE_LOOP_EXTERNAL_PHY:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * All OK; reprogram for the new mode ...
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->loop_back_mode = mode;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mutex_enter(&qlge->mbx_mutex);
accf27a5824ae84dfac7b089c4325917231a7d15Sukumar Swaminathan (void) ql_set_loop_back_mode(qlge);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mutex_exit(&qlge->mbx_mutex);
cddcb3dae85e03889ec217ef3da5a8898f4f66c7Sukumar Swaminathan /* if loopback mode test is done */
cddcb3dae85e03889ec217ef3da5a8898f4f66c7Sukumar Swaminathan if (mode == QLGE_LOOP_NONE) {
cddcb3dae85e03889ec217ef3da5a8898f4f66c7Sukumar Swaminathan mutex_enter(&qlge->hw_mutex);
cddcb3dae85e03889ec217ef3da5a8898f4f66c7Sukumar Swaminathan (void) ql_route_initialize(qlge);
cddcb3dae85e03889ec217ef3da5a8898f4f66c7Sukumar Swaminathan mutex_exit(&qlge->hw_mutex);
cddcb3dae85e03889ec217ef3da5a8898f4f66c7Sukumar Swaminathan }
cddcb3dae85e03889ec217ef3da5a8898f4f66c7Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_REPLY);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Loopback ioctl
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/* ARGSUSED */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanenum ioc_reply
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_loop_ioctl(qlge_t *qlge, queue_t *wq, mblk_t *mp, struct iocblk *iocp)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan lb_info_sz_t *lbsp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan lb_property_t *lbpp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t *lbmp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int cmd;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan _NOTE(ARGUNUSED(wq))
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Validate format of ioctl
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (mp->b_cont == NULL)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmd = iocp->ioc_cmd;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan switch (cmd) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan default:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* NOTREACHED */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("%s(%d) invalid cmd 0x%x\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance, cmd));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case LB_GET_INFO_SIZE:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (iocp->ioc_count != sizeof (lb_info_sz_t))
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan lbsp = (void *)mp->b_cont->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *lbsp = sizeof (loopmodes);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_REPLY);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case LB_GET_INFO:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (iocp->ioc_count != sizeof (loopmodes))
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan lbpp = (void *)mp->b_cont->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bcopy(loopmodes, lbpp, sizeof (loopmodes));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_REPLY);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case LB_GET_MODE:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (iocp->ioc_count != sizeof (uint32_t))
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan lbmp = (void *)mp->b_cont->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *lbmp = qlge->loop_back_mode;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_REPLY);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case LB_SET_MODE:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (iocp->ioc_count != sizeof (uint32_t))
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (IOC_INVAL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan lbmp = (void *)mp->b_cont->b_rptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (qlge_set_loop_mode(qlge, *lbmp));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Dumps binary data from firmware.
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_8xxx_binary_core_dump_with_header(qlge_t *qlge, caddr_t buf,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t *len_ptr)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan caddr_t bp = buf;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int rval = DDI_SUCCESS;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_t *ql_dump_image_header_ptr =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (ql_dump_image_header_t *)(void *)bp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->signature = DUMP_IMAGE_HEADER_SIGNATURE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->version = 1;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->header_length = 16;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->data_type = DUMP_TYPE_CORE_DUMP;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* point to real dump data area */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp += sizeof (ql_dump_image_header_t);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bcopy(&qlge->ql_mpi_coredump, bp, sizeof (ql_mpi_coredump_t));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->data_length = sizeof (ql_mpi_coredump_t);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* total length: header + data image */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->checksum = (uint16_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (ql_dump_image_header_ptr->signature
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan +ql_dump_image_header_ptr->version
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan +ql_dump_image_header_ptr->header_length
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan +ql_dump_image_header_ptr->data_type
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan +ql_dump_image_header_ptr->data_length);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *len_ptr = ql_dump_image_header_ptr->header_length +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->data_length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("%s done,core dump lenth %d bytes\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, *len_ptr));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (rval);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Dump registers value in binary format
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_8xxx_binary_register_dump_with_header(qlge_t *qlge, caddr_t buf,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t *len_ptr)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan caddr_t bp = buf;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int i;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t *data_ptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int rval = DDI_SUCCESS;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_t *ql_dump_image_header_ptr =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (ql_dump_image_header_t *)(void *)bp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->signature =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan DUMP_IMAGE_HEADER_SIGNATURE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->version = 1;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->header_length = 16;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->data_type = DUMP_TYPE_REGISTER_DUMP;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* point to real dump data area */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp += sizeof (ql_dump_image_header_t);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan data_ptr = (uint32_t *)(void *)bp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i <= 0xfc; i += 4) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *data_ptr = ql_read_reg(qlge, i);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan data_ptr++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->data_length = 0x100; /* 0 ~ 0xFF */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* total length: header + data image */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->checksum = (uint16_t)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (ql_dump_image_header_ptr->signature
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan +ql_dump_image_header_ptr->version
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan +ql_dump_image_header_ptr->header_length
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan +ql_dump_image_header_ptr->data_type
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan +ql_dump_image_header_ptr->data_length);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *len_ptr = ql_dump_image_header_ptr->header_length +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_image_header_ptr->data_length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_GLD, ("%s done, dump lenth %x bytes\n", __func__,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *len_ptr));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (rval);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Core dump in binary format
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_binary_core_dump(qlge_t *qlge, uint32_t requested_dumps, uint32_t *len_ptr)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int rval = DDI_FAILURE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t length, size = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint64_t timestamp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan caddr_t bp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_header_t *ql_dump_header_ptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_footer_t *ql_dump_footer_ptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_lenth = IOCTL_MAX_BUF_SIZE; /* 512k */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge->ioctl_buf_ptr =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan kmem_zalloc(qlge->ioctl_buf_lenth, KM_SLEEP);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (qlge->ioctl_buf_ptr == NULL) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "%s(%d): Unable to allocate ioctl buffer",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto out;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* description info header */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_header_ptr = (ql_dump_header_t *)(void *)qlge->ioctl_buf_ptr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* add QTSB signature */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_header_ptr->signature = DUMP_DESCRIPTION_HEADER_SIGNATURE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_header_ptr->version = 1;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_header_ptr->length = 16;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_header_ptr->reserved = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* get dump creation timestamp */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan timestamp = ddi_get_time();
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan timestamp *= 1000000;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_header_ptr->time_stamp_lo = LSW(timestamp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_header_ptr->time_stamp_hi = MSW(timestamp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* point to first image header area */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan length = sizeof (ql_dump_header_t);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp = (caddr_t)qlge->ioctl_buf_ptr + length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (CFG_IST(qlge, CFG_CHIP_8100)) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* if dumping all */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if ((requested_dumps & DUMP_REQUEST_ALL) != 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_header_ptr->num_dumps = 2;
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_8xxx_binary_core_dump_with_header(qlge,
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan bp, &size);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan length += size;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp = (caddr_t)qlge->ioctl_buf_ptr + length;
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_8xxx_binary_register_dump_with_header(qlge,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp, &size);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan length += size;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp = (caddr_t)qlge->ioctl_buf_ptr + length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else if ((requested_dumps & DUMP_REQUEST_CORE) != 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_header_ptr->num_dumps = 1;
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_8xxx_binary_core_dump_with_header(qlge,
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan bp, &size);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan length += size;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp = (caddr_t)qlge->ioctl_buf_ptr + length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else if ((requested_dumps & DUMP_REQUEST_REGISTER) != 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_header_ptr->num_dumps = 1;
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_8xxx_binary_register_dump_with_header(qlge,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp, &size);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan length += size;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bp = (caddr_t)qlge->ioctl_buf_ptr + length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "%s(%d): not supported dump type %d",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance, requested_dumps);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto out;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_footer_ptr = (ql_dump_footer_t *)(void *)bp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_footer_ptr->signature = DUMP_DESCRIPTION_FOOTER_SIGNATURE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_footer_ptr->version = 1;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_footer_ptr->length = 16;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_footer_ptr->reserved = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan timestamp = ddi_get_time();
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan timestamp *= 1000000;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_footer_ptr->time_stamp_lo = LSW(timestamp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_dump_footer_ptr->time_stamp_hi = MSW(timestamp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan length += ql_dump_footer_ptr->length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan rval = DDI_SUCCESS;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *len_ptr = length;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan QL_PRINT(DBG_MBX, ("%s(%d): exiting,total %x bytes\n",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance, length));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanout:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (rval);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * build core dump segment header
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic void
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_build_coredump_seg_header(mpi_coredump_segment_header_t *seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t seg_number, uint32_t seg_size, uint8_t *desc)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void) memset(seg_hdr, 0, sizeof (mpi_coredump_segment_header_t));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan seg_hdr->cookie = MPI_COREDUMP_COOKIE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan seg_hdr->seg_number = seg_number;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan seg_hdr->seg_size = seg_size;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void) memcpy(seg_hdr->description, desc,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (sizeof (seg_hdr->description))-1);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Unpause MPI risc
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_unpause_mpi_risc(qlge_t *qlge)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t tmp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* Un-pause the RISC */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan tmp = ql_read_reg(qlge, REG_HOST_CMD_STATUS);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if ((tmp & CSR_RP) == 0)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (DDI_FAILURE);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_reg(qlge, REG_HOST_CMD_STATUS, CSR_CMD_CLR_PAUSE);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (DDI_SUCCESS);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Pause MPI risc
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_pause_mpi_risc(qlge_t *qlge)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t tmp;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int count = 10;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* Pause the RISC */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_reg(qlge, REG_HOST_CMD_STATUS, CSR_CMD_SET_PAUSE);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan do {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan tmp = ql_read_reg(qlge, REG_HOST_CMD_STATUS);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if ((tmp & CSR_RP) != 0)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan qlge_delay(10);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan count--;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } while (count);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return ((count == 0) ? DDI_FAILURE : DDI_SUCCESS);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Get Interrupt Status registers value
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic void
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get_intr_states(qlge_t *qlge, uint32_t *buf)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int i;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < MAX_RX_RINGS; i++, buf++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* read the interrupt enable register for each rx ring */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_reg(qlge, REG_INTERRUPT_ENABLE, 0x037f0300 + i);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *buf = ql_read_reg(qlge, REG_INTERRUPT_ENABLE);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Read serdes register
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_read_serdes_reg(qlge_t *qlge, uint32_t reg, uint32_t *data)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int rtn_val = DDI_FAILURE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* wait for reg to come ready */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_wait_reg_bit(qlge, REG_XG_SERDES_ADDR,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan XG_SERDES_ADDR_RDY, BIT_SET, 0) != DDI_SUCCESS)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto exit;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* set up for reg read */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_reg(qlge, REG_XG_SERDES_ADDR, reg | PROC_ADDR_R);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* wait for reg to come ready */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_wait_reg_bit(qlge, REG_XG_SERDES_ADDR,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan XG_SERDES_ADDR_RDY, BIT_SET, 0) != DDI_SUCCESS)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto exit;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* get the data */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *data = ql_read_reg(qlge, REG_XG_SERDES_DATA);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan rtn_val = DDI_SUCCESS;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanexit:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (rtn_val);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Read XGMAC register
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get_xgmac_regs(qlge_t *qlge, uint32_t *buf)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int status;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int i;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < XGMAC_REGISTER_END; i += 4, buf ++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan switch (i) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case PAUSE_SRC_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case PAUSE_SRC_HI :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case GLOBAL_CFG :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CFG :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CFG :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case FLOW_CTL :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case PAUSE_OPCODE :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case PAUSE_TIMER :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case PAUSE_FRM_DEST_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case PAUSE_FRM_DEST_HI :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case MAC_TX_PARAMS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case MAC_RX_PARAMS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case MAC_SYS_INT :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case MAC_SYS_INT_MASK :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case MAC_MGMT_INT :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case MAC_MGMT_IN_MASK :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case EXT_ARB_MODE :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_BYTES :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_BYTES_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_MCAST_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_MCAST_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_BCAST_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_BCAST_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_UCAST_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_UCAST_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CTL_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CTL_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PAUSE_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PAUSE_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_64_PKT :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_64_PKT_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_65_TO_127_PKT :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_65_TO_127_PKT_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_128_TO_255_PKT :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_128_TO_255_PKT_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_256_511_PKT :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_256_511_PKT_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_512_TO_1023_PKT :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_512_TO_1023_PKT_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_1024_TO_1518_PKT :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_1024_TO_1518_PKT_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_1519_TO_MAX_PKT :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_1519_TO_MAX_PKT_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_UNDERSIZE_PKT :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_UNDERSIZE_PKT_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OVERSIZE_PKT :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OVERSIZE_PKT_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_HALF_FULL_DET :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_HALF_FULL_DET_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OVERFLOW_DET :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OVERFLOW_DET_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_HALF_FULL_MASK :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_HALF_FULL_MASK_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OVERFLOW_MASK :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OVERFLOW_MASK_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case STAT_CNT_CTL :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case AUX_RX_HALF_FULL_DET :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case AUX_TX_HALF_FULL_DET :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case AUX_RX_OVERFLOW_DET :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case AUX_TX_OVERFLOW_DET :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case AUX_RX_HALF_FULL_MASK :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case AUX_TX_HALF_FULL_MASK :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case AUX_RX_OVERFLOW_MASK :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case AUX_TX_OVERFLOW_MASK :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_BYTES :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_BYTES_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_BYTES_OK :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_BYTES_OK_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_OK :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_OK_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_BCAST_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_BCAST_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_MCAST_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_MCAST_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_UCAST_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_UCAST_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_UNDERSIZE_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_UNDERSIZE_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OVERSIZE_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OVERSIZE_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_JABBER_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_JABBER_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_UNDERSIZE_FCERR_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_UNDERSIZE_FCERR_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DROP_EVENTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DROP_EVENTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_FCERR_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_FCERR_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_ALIGN_ERR :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_ALIGN_ERR_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_SYMBOL_ERR :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_SYMBOL_ERR_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_MAC_ERR :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_MAC_ERR_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CTL_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CTL_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PAUSE_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PAUSE_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_64_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_64_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_65_TO_127_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_65_TO_127_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_128_255_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_128_255_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_256_511_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_256_511_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_512_TO_1023_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_512_TO_1023_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_1024_TO_1518_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_1024_TO_1518_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_1519_TO_MAX_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_1519_TO_MAX_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_LEN_ERR_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_LEN_ERR_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case MDIO_TX_DATA :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case MDIO_RX_DATA :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case MDIO_CMD :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case MDIO_PHY_ADDR :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case MDIO_PORT :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case MDIO_STATUS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES0 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES0_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES1 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES1_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES2 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES2_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES3 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES3_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES4 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES4_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES5 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES5_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES6 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES6_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES7 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_CBFC_PAUSE_FRAMES7_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_FCOE_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_FCOE_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_MGMT_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_MGMT_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES0 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES0_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES1 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES1_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES2 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES2_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES3 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES3_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES4 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES4_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES5 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES5_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES6 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES6_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES7 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_CBFC_PAUSE_FRAMES7_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_FCOE_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_FCOE_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_MGMT_PKTS :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_MGMT_PKTS_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_NIC_FIFO_DROP :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_NIC_FIFO_DROP_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_FCOE_FIFO_DROP :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_FCOE_FIFO_DROP_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_MGMT_FIFO_DROP :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_MGMT_FIFO_DROP_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY0 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY0_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY1 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY1_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY2 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY2_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY3 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY3_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY4 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY4_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY5 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY5_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY6 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY6_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY7 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_PKTS_PRIORITY7_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY0 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY0_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY1 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY1_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY2 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY2_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY3 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY3_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY4 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY4_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY5 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY5_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY6 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY6_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY7 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_OCTETS_PRIORITY7_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY0 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY0_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY1 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY1_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY2 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY2_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY3 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY3_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY4 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY4_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY5 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY5_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY6 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY6_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY7 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_PKTS_PRIORITY7_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY0 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY0_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY1 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY1_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY2 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY2_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY3 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY3_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY4 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY4_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY5 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY5_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY6 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY6_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY7 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case TX_OCTETS_PRIORITY7_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY0 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY0_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY1 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY1_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY2 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY2_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY3 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY3_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY4 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY4_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY5 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY5_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY6 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY6_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY7 :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case RX_DISCARD_PRIORITY7_LO :
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan status = ql_read_xgmac_reg(qlge, i, buf);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (status != DDI_SUCCESS)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto err;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan default:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanerr:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (status);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Read MPI related registers
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get_mpi_regs(qlge_t *qlge, uint32_t *buf, uint32_t offset, uint32_t count)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int i, rtn_val = DDI_FAILURE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < count; i++, buf++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_read_processor_data(qlge, offset + i, buf)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto out;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan rtn_val = DDI_SUCCESS;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanout:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (rtn_val);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Read processor "shadow" register "addr" value and save
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * in "data".Assume all the locks&semaphore have been acquired
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get_mpi_shadow_regs(qlge_t *qlge, uint32_t *buf)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t i;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int rtn_val = DDI_FAILURE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define RISC_124 0x0003007c
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define RISC_127 0x0003007f
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define SHADOW_OFFSET 0xb0000000
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < MPI_CORE_SH_REGS_CNT; i++, buf++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_write_processor_data(qlge, RISC_124,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (SHADOW_OFFSET | i << 20)) != DDI_SUCCESS)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto end;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_read_processor_data(qlge, RISC_127, buf) != DDI_SUCCESS)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto end;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan rtn_val = DDI_SUCCESS;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanend:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (rtn_val);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define SYS_CLOCK 0x00
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define PCI_CLOCK 0x80
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define FC_CLOCK 0x140
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define XGM_CLOCK 0x180
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define ADDRESS_REGISTER_ENABLE 0x00010000
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define UP 0x00008000
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define MAX_MUX 0x40
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define MAX_MODULES 0x1F
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic uint32_t *
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get_probe(qlge_t *qlge, uint32_t clock, uint8_t *valid, uint32_t *buf)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t module, mux_sel, probe, lo_val, hi_val;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (module = 0; module < MAX_MODULES; module ++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (valid[module]) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (mux_sel = 0; mux_sel < MAX_MUX; mux_sel++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan probe = clock | ADDRESS_REGISTER_ENABLE |
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mux_sel |(module << 9);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_reg(qlge, REG_PRB_MX_ADDR, probe);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan lo_val = ql_read_reg(qlge, REG_PRB_MX_DATA);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (mux_sel == 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *buf = probe;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf ++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan probe |= UP;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_reg(qlge, REG_PRB_MX_ADDR, probe);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan hi_val = ql_read_reg(qlge, REG_PRB_MX_DATA);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *buf = lo_val;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *buf = hi_val;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (buf);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get_probe_dump(qlge_t *qlge, uint32_t *buf)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint8_t sys_clock_valid_modules[0x20] = {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x00 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x01 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x02 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x03 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x04 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x05 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x06 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x07 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x08 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x09 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x0A */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x0B */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x0C */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x0D */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x0E */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0F */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x10 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x11 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x12 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x13 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x14 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x15 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x16 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x17 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x18 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x19 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1A */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1B */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1C */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1D */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1E */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0 /* 0x1F */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan };
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan unsigned char pci_clock_valid_modules[0x20] = {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x00 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x01 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x02 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x03 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x04 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x05 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x06 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x07 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x08 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x09 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0A */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0B */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0C */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0D */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x0E */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0F */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x10 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x11 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x12 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x13 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x14 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x15 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x16 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x17 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x18 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x19 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1A */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1B */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1C */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1D */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1E */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0 /* 0x1F */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan };
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan unsigned char xgm_clock_valid_modules[0x20] = {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x00 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x01 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x02 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x03 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x04 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x05 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x06 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x07 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x08 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x09 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0A */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0B */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x0C */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x0D */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x0E */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0F */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x10 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x11 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x12 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x13 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x14 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x15 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x16 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x17 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x18 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x19 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1A */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1B */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1C */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1D */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1E */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0 /* 0x1F */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan };
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan unsigned char fc_clock_valid_modules[0x20] = {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x00 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x01 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x02 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x03 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x04 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x05 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x06 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x07 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x08 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x09 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0A */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0B */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x0C */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 1, /* 0x0D */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0E */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x0F */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x10 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x11 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x12 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x13 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x14 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x15 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x16 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x17 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x18 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x19 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1A */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1B */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1C */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1D */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0, /* 0x1E */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan 0 /* 0x1F */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan };
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * First we have to enable the probe mux
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_write_processor_data(qlge, 0x100e, 0x18a20000);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf = ql_get_probe(qlge, SYS_CLOCK, sys_clock_valid_modules, buf);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf = ql_get_probe(qlge, PCI_CLOCK, pci_clock_valid_modules, buf);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf = ql_get_probe(qlge, XGM_CLOCK, xgm_clock_valid_modules, buf);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf = ql_get_probe(qlge, FC_CLOCK, fc_clock_valid_modules, buf);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (0);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Dump rounting index registers
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get_routing_index_registers(qlge_t *qlge, uint32_t *buf)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t type, index, index_max;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t result_index;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t result_data;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t val;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (type = 0; type < 4; type ++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (type < 2) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan index_max = 8;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan index_max = 16;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (index = 0; index < index_max; index ++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan val = 0x04000000 | (type << 16) | (index << 8);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_reg(qlge, REG_ROUTING_INDEX, val);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan result_index = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan while ((result_index & 0x40000000) == 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan result_index =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_read_reg(qlge, REG_ROUTING_INDEX);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan result_data = ql_read_reg(qlge, REG_ROUTING_DATA);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *buf = type;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf ++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *buf = index;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf ++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *buf = result_index;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf ++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *buf = result_data;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf ++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Dump mac protocol registers
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanvoid
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get_mac_protocol_registers(qlge_t *qlge, uint32_t *buf)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define RS_AND_ADR 0x06000000
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define RS_ONLY 0x04000000
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan#define NUM_TYPES 10
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t result_index, result_data;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t type;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t index;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t offset;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t val;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t initial_val;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t max_index;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t max_offset;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (type = 0; type < NUM_TYPES; type ++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan switch (type) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 0: /* CAM */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan initial_val = RS_AND_ADR;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_index = 512;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_offset = 3;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 1: /* Multicast MAC Address */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan initial_val = RS_ONLY;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_index = 32;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_offset = 2;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 2: /* VLAN filter mask */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 3: /* MC filter mask */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan initial_val = RS_ONLY;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_index = 4096;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_offset = 1;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 4: /* FC MAC addresses */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan initial_val = RS_ONLY;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_index = 4;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_offset = 2;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 5: /* Mgmt MAC addresses */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan initial_val = RS_ONLY;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_index = 8;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_offset = 2;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 6: /* Mgmt VLAN addresses */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan initial_val = RS_ONLY;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_index = 16;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_offset = 1;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 7: /* Mgmt IPv4 address */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan initial_val = RS_ONLY;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_index = 4;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_offset = 1;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 8: /* Mgmt IPv6 address */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan initial_val = RS_ONLY;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_index = 4;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_offset = 4;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan case 9: /* Mgmt TCP/UDP Dest port */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan initial_val = RS_ONLY;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_index = 4;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_offset = 1;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan default:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "Bad type!!! 0x%08x", type);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_index = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan max_offset = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan break;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (index = 0; index < max_index; index ++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (offset = 0; offset < max_offset; offset ++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan val = initial_val | (type << 16) | (index << 4)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan | (offset);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_reg(qlge,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan REG_MAC_PROTOCOL_ADDRESS_INDEX, val);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan result_index = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan while ((result_index & 0x40000000) == 0) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan result_index = ql_read_reg(qlge,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan REG_MAC_PROTOCOL_ADDRESS_INDEX);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan result_data =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_read_reg(qlge, REG_MAC_PROTOCOL_DATA);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *buf = result_index;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf ++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *buf = result_data;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan buf ++;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Dump serdes registers
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get_serdes_regs(qlge_t *qlge, struct ql_mpi_coredump *mpi_coredump)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t i, j;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int status;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0, j = 0; i <= 0x000000034; i += 4) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan status = ql_read_serdes_reg(qlge, i,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan &mpi_coredump->serdes_xaui_an[j++]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (status != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto err;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0x800, j = 0; i <= 0x880; i += 4) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan status = ql_read_serdes_reg(qlge, i,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan &mpi_coredump->serdes_xaui_hss_pcs[j++]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (status != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto err;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0x1000, j = 0; i <= 0x1034; i += 4) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan status = ql_read_serdes_reg(qlge, i,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan &mpi_coredump->serdes_xfi_an[j++]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (status != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto err;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0x1050, j = 0; i <= 0x107c; i += 4) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan status = ql_read_serdes_reg(qlge, i,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan &mpi_coredump->serdes_xfi_train[j++]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (status != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto err;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0x1800, j = 0; i <= 0x1838; i += 4) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan status = ql_read_serdes_reg(qlge, i,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan &mpi_coredump->serdes_xfi_hss_pcs[j++]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (status != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto err;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
46a6b89646a5f2a5494d79abc278b74ef0c46e9cRichard Lowe for (i = 0x1c00, j = 0; i <= 0x1c1f; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan status = ql_read_serdes_reg(qlge, i,
46a6b89646a5f2a5494d79abc278b74ef0c46e9cRichard Lowe &mpi_coredump->serdes_xfi_hss_tx[j++]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (status != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto err;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
46a6b89646a5f2a5494d79abc278b74ef0c46e9cRichard Lowe for (i = 0x1c40, j = 0; i <= 0x1c5f; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan status = ql_read_serdes_reg(qlge, i,
46a6b89646a5f2a5494d79abc278b74ef0c46e9cRichard Lowe &mpi_coredump->serdes_xfi_hss_rx[j++]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (status != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto err;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
46a6b89646a5f2a5494d79abc278b74ef0c46e9cRichard Lowe for (i = 0x1e00, j = 0; i <= 0x1e1f; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan status = ql_read_serdes_reg(qlge, i,
46a6b89646a5f2a5494d79abc278b74ef0c46e9cRichard Lowe &mpi_coredump->serdes_xfi_hss_pll[j++]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (status != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto err;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanerr:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (status != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "Serdes register 0x%x access error", i);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (status);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Dump ets registers
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanstatic int
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_get_ets_regs(qlge_t *qlge, uint32_t *buf)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int i;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * First read out the NIC ETS
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < 8; i++, buf++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_reg(qlge, REG_NIC_ENHANCED_TX_SCHEDULE,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i << 29 | 0x08000000);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* wait for reg to come ready */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* get the data */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *buf = ql_read_reg(qlge, REG_NIC_ENHANCED_TX_SCHEDULE);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Now read out the CNA ETS
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (i = 0; i < 2; i ++, buf ++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_write_reg(qlge, REG_CNA_ENHANCED_TX_SCHEDULE,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i << 29 | 0x08000000);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* wait for reg to come ready */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan *buf = ql_read_reg(qlge, REG_CNA_ENHANCED_TX_SCHEDULE);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (0);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan/*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * Core dump in binary format
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanint
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanql_8xxx_binary_core_dump(qlge_t *qlge, ql_mpi_coredump_t *mpi_coredump)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan{
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int rtn_val = DDI_FAILURE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint64_t timestamp, phy_addr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan uint32_t addr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan int i;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_sem_spinlock(qlge, QL_PROCESSOR_SEM_MASK) != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (rtn_val);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* pause the risc */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_pause_mpi_risc(qlge) != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "%s(%d) Wait for RISC paused timeout.",
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan __func__, qlge->instance);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto out;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 0:make core dump header */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bzero(&(mpi_coredump->mpi_global_header),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_global_header_t));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mpi_coredump->mpi_global_header.cookie = MPI_COREDUMP_COOKIE;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void) strcpy(mpi_coredump->mpi_global_header.id_string,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "MPI Coredump");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan timestamp = ddi_get_time();
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan timestamp *= 1000000;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mpi_coredump->mpi_global_header.time_lo = LSW(timestamp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mpi_coredump->mpi_global_header.time_hi = MSW(timestamp);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mpi_coredump->mpi_global_header.total_image_size =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint32_t)(sizeof (ql_mpi_coredump_t));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mpi_coredump->mpi_global_header.global_header_size =
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_global_header_t);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void) strcpy(mpi_coredump->mpi_global_header.driver_info,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "driver version is "VERSIONSTR);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 1:MPI Core Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->core_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan CORE_SEG_NUM, sizeof (mpi_coredump->core_regs_seg_hdr) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->mpi_core_regs) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->mpi_core_sh_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"Core Registers");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* first, read 127 core registers */
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->mpi_core_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan MPI_CORE_REGS_ADDR, MPI_CORE_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* read the next 16 shadow registers */
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_shadow_regs(qlge,
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan &mpi_coredump->mpi_core_sh_regs[0]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 2:MPI Test Logic Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->test_logic_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan TEST_LOGIC_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->test_logic_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"Test Logic Regs");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->test_logic_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan TEST_REGS_ADDR, TEST_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 3:RMII Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->rmii_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan RMII_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->rmii_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"RMII Registers");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->rmii_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan RMII_REGS_ADDR, RMII_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 4:FCMAC1 Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->fcmac1_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FCMAC1_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->fcmac1_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"FCMAC1 Registers");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->fcmac1_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FCMAC1_REGS_ADDR, FCMAC_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 5:FCMAC2 Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->fcmac2_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FCMAC2_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->fcmac2_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"FCMAC2 Registers");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->fcmac2_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FCMAC2_REGS_ADDR, FCMAC_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 6:FC1 Mailbox Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->fc1_mbx_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FC1_MBOX_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->fc1_mbx_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"FC1 MBox Regs");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->fc1_mbx_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FC1_MBX_REGS_ADDR, FC_MBX_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 7:IDE Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->ide_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan IDE_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->ide_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"IDE Registers");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->ide_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan IDE_REGS_ADDR, IDE_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 8:Host1 Mailbox Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->nic1_mbx_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan NIC1_MBOX_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->nic1_mbx_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"NIC1 MBox Regs");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->nic1_mbx_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan NIC1_MBX_REGS_ADDR, NIC_MBX_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 9:SMBus Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->smbus_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan SMBUS_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->smbus_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"SMBus Registers");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->smbus_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan SMBUS_REGS_ADDR, SMBUS_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 10:FC2 Mailbox Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->fc2_mbx_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FC2_MBOX_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->fc2_mbx_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"FC2 MBox Regs");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->fc2_mbx_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan FC2_MBX_REGS_ADDR, FC_MBX_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 11:Host2 Mailbox Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->nic2_mbx_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan NIC2_MBOX_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->nic2_mbx_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"NIC2 MBox Regs");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->nic2_mbx_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan NIC2_MBX_REGS_ADDR, NIC_MBX_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 12:i2C Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->i2c_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan I2C_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->i2c_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"I2C Registers");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->i2c_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan I2C_REGS_ADDR, I2C_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 13:MEMC Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->memc_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan MEMC_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->memc_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"MEMC Registers");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->memc_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan MEMC_REGS_ADDR, MEMC_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 14:PBus Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->pbus_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan PBUS_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->pbus_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"PBUS Registers");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->pbus_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan PBUS_REGS_ADDR, PBUS_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 15:MDE Registers */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->mde_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan MDE_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->mde_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"MDE Registers");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_mpi_regs(qlge, &mpi_coredump->mde_regs[0],
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan MDE_REGS_ADDR, MDE_REGS_CNT);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->xaui_an_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan XAUI_AN_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->serdes_xaui_an),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"XAUI AN Registers");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->xaui_hss_pcs_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan XAUI_HSS_PCS_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->serdes_xaui_hss_pcs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"XAUI HSS PCS Registers");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->xfi_an_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan XFI_AN_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->serdes_xfi_an),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"XFI AN Registers");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->xfi_train_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan XFI_TRAIN_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->serdes_xfi_train),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"XFI TRAIN Registers");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->xfi_hss_pcs_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan XFI_HSS_PCS_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->serdes_xfi_hss_pcs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"XFI HSS PCS Registers");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->xfi_hss_tx_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan XFI_HSS_TX_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->serdes_xfi_hss_tx),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"XFI HSS TX Registers");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->xfi_hss_rx_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan XFI_HSS_RX_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->serdes_xfi_hss_rx),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"XFI HSS RX Registers");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->xfi_hss_pll_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan XFI_HSS_PLL_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->serdes_xfi_hss_pll),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"XFI HSS PLL Registers");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_serdes_regs(qlge, mpi_coredump);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 16:NIC Ctrl Registers Port1 */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->nic_regs_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan NIC1_CONTROL_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->nic_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"NIC Registers");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan i = 0;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan for (addr = 0; addr <= 0xFC; i++) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mpi_coredump->nic_regs[i] = ql_read_reg(qlge, addr);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan addr += 4;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->intr_states_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan INTR_STATES_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->intr_states),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"INTR States");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_get_intr_states(qlge, &mpi_coredump->intr_states[0]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->xgmac_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan NIC1_XGMAC_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->xgmac),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"NIC XGMac Registers");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_xgmac_regs(qlge, &mpi_coredump->xgmac[0]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->probe_dump_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan PROBE_DUMP_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->probe_dump),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"Probe Dump");
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_probe_dump(qlge, &mpi_coredump->probe_dump[0]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->routing_reg_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ROUTING_INDEX_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->routing_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"Routing Regs");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_get_routing_index_registers(qlge, &mpi_coredump->routing_regs[0]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->mac_prot_reg_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan MAC_PROTOCOL_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->mac_prot_regs),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"MAC Prot Regs");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_get_mac_protocol_registers(qlge, &mpi_coredump->mac_prot_regs[0]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->ets_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ETS_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->ets),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"ETS Registers");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
0662fbf4a5c0ae38617fd0fe521817c65a4dca3fSukumar Swaminathan (void) ql_get_ets_regs(qlge, &mpi_coredump->ets[0]);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* clear the pause */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_unpause_mpi_risc(qlge) != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan "Failed RISC unpause.");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto out;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* Reset the MPI Processor */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_reset_mpi_risc(qlge) != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto out;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 22:WCS MPI Ram ?? */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->code_ram_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan WCS_RAM_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->code_ram),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"WCS RAM");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan phy_addr = qlge->ioctl_buf_dma_attr.dma_addr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_read_risc_ram(qlge, CODE_RAM_ADDR, phy_addr, CODE_RAM_CNT)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan == DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void) ddi_dma_sync(qlge->ioctl_buf_dma_attr.dma_handle, 0,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->code_ram), DDI_DMA_SYNC_FORKERNEL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bcopy(qlge->ioctl_buf_dma_attr.vaddr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mpi_coredump->code_ram,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->code_ram));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mutex_exit(&qlge->mbx_mutex);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto out;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /* 23:MEMC Ram ?? */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_build_coredump_seg_header(&mpi_coredump->memc_ram_seg_hdr,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan MEMC_RAM_SEG_NUM,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump_segment_header_t) +
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->memc_ram),
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (uint8_t *)"MEMC RAM");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan phy_addr = qlge->ioctl_buf_dma_attr.dma_addr;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_read_risc_ram(qlge, MEMC_RAM_ADDR, phy_addr, MEMC_RAM_CNT)
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan == DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan (void) ddi_dma_sync(qlge->ioctl_buf_dma_attr.dma_handle, 0,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->memc_ram), DDI_DMA_SYNC_FORKERNEL);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan bcopy(qlge->ioctl_buf_dma_attr.vaddr, mpi_coredump->memc_ram,
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan sizeof (mpi_coredump->memc_ram));
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan } else {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan mutex_exit(&qlge->mbx_mutex);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan goto out;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan /*
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan * 24. Restart MPI
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan */
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan if (ql_write_processor_data(qlge, 0x1010, 1) != DDI_SUCCESS) {
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan cmn_err(CE_WARN, "MPI restart failure.");
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan }
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan rtn_val = DDI_SUCCESS;
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathanout:
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan ql_sem_unlock(qlge, QL_PROCESSOR_SEM_MASK);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan return (rtn_val);
bafec74292ca6805e5acb387856f4e60a5314b37Sukumar Swaminathan}