d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * CDDL HEADER START
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * The contents of this file are subject to the terms of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Common Development and Distribution License (the "License").
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You may not use this file except in compliance with the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * or http://www.opensolaris.org/os/licensing.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * See the License for the specific language governing permissions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and limitations under the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * When distributing Covered Code, include this CDDL HEADER in each
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * If applicable, add the following below this CDDL HEADER, with the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * fields enclosed by brackets "[]" replaced with your own identifying
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * information: Portions Copyright [yyyy] [name of copyright owner]
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * CDDL HEADER END
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Copyright 2014 QLogic Corporation
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * The contents of this file are subject to the terms of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * QLogic End User License (the "License").
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You may not use this file except in compliance with the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * You can obtain a copy of the License at
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * http://www.qlogic.com/Resources/Documents/DriverDownloadHelp/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * QLogic_End_User_Software_License.txt
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * See the License for the specific language governing permissions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and limitations under the License.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Module Description:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * This file defines the IDLE_CHK macros
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * History:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * 11/02/08 Miri Shitrit Inception.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef _LM_DEBUG_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define _LM_DEBUG_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// bits must be corralted to the values in idle_chk.csv
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_CHIP_MASK_57710 0x01
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_CHIP_MASK_57711 0x02
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_CHIP_MASK_57731 0x04
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// Added for E3
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_CHIP_MASK_57773 0x08
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_CHIP_MASK_57773_B0 0x10
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchienum {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IDLE_CHK_ERROR = 1,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IDLE_CHK_ERROR_NO_TRAFFIC, // indicates an error if test is not under traffic
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IDLE_CHK_WARNING
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} idle_chk_error_level;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if _MSC_VER
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if defined(_VBD_)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <ntddk.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <ntstrsafe.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define snprintf RtlStringCchPrintfA
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SNPRINTF_VAR(_str) sizeof(_str),
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "vc_os_emul.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SNPRINTF_VAR(_str) sizeof(_str), //needed due to change of sprintf_s to fix warnings
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif // !NTDDI_VERSION
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else // !_MSC_VER
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SNPRINTF_VAR(_str) sizeof(_str),
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif // _MSC_VER
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CONDITION_CHK(condition, severity, fail_msg) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi total++; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi var_severity = severity; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (condition) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi switch (var_severity) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi case IDLE_CHK_ERROR: \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgMessage(pdev, FATAL, "idle_chk. Error (level %d): %s\n", severity, fail_msg); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi errors++; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi break; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi case IDLE_CHK_ERROR_NO_TRAFFIC: \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgMessage(pdev, FATAL, "idle_chk. Error if no traffic (level %d): %s\n", severity, fail_msg); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi errors++; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi break; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi case IDLE_CHK_WARNING: \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgMessage(pdev, WARN, "idle_chk. Warning (level %d): %s\n", severity, fail_msg); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi warnings++; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi break; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_CHIP_MASK_CHK(chip_mask) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi b_test_chip=0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi var_chip_mask = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val = REG_RD(pdev, MISC_REG_CHIP_NUM); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi chip_rev = REG_RD(pdev, MISC_REG_CHIP_REV); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi chip_metal = REG_RD(pdev, MISC_REG_CHIP_METAL); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (val == 5710) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi var_chip_mask = IDLE_CHK_CHIP_MASK_57710; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } else if (val == 5711 || val == 5712) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi var_chip_mask = IDLE_CHK_CHIP_MASK_57711; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } else if ((val == 5713) || (val == 5714) || (val == 5730) || (val == 5731)) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi var_chip_mask = IDLE_CHK_CHIP_MASK_57731; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } else if (((chip_rev == 0xC) || (chip_rev == 0xD) || (chip_rev == 1)) && ((val == 5773) || (val == 5774) || (val == 5770))) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi var_chip_mask = IDLE_CHK_CHIP_MASK_57773_B0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } else if ((val == 5773) || (val == 5774) || (val == 5770)) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi var_chip_mask = IDLE_CHK_CHIP_MASK_57773; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (var_chip_mask & chip_mask) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi b_test_chip = 1;\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* read one reg and check the condition */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_1(chip_mask, offset, condition, severity, fail_msg) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IDLE_CHK_CHIP_MASK_CHK(chip_mask); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (b_test_chip) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val = REG_RD(pdev, offset); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi snprintf (prnt_str, SNPRINTF_VAR(prnt_str) "%s. Value is 0x%x\n", fail_msg, val); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val2 = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi CONDITION_CHK(condition, severity, prnt_str); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* loop to read one reg and check the condition */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_2(chip_mask, offset, loop, inc, condition, severity, fail_msg) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IDLE_CHK_CHIP_MASK_CHK(chip_mask); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (b_test_chip) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi for (i = 0; i < (loop); i++) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val = REG_RD(pdev, offset + i*(inc)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi snprintf (prnt_str, SNPRINTF_VAR(prnt_str) "%s. Value is 0x%x\n", fail_msg, val); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val2 = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi CONDITION_CHK(condition, severity, prnt_str); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* read two regs and check the condition */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_3(chip_mask, offset1, offset2, condition, severity, fail_msg) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IDLE_CHK_CHIP_MASK_CHK(chip_mask); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (b_test_chip) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = REG_RD(pdev, offset1); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val2 = REG_RD(pdev, offset2); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi snprintf (prnt_str, SNPRINTF_VAR(prnt_str) "%s. Values are 0x%x 0x%x\n", fail_msg, val1, val2); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi CONDITION_CHK(condition, severity, prnt_str); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* read one reg and check according to CID_CAM */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_4(chip_mask, offset1, offset2, loop, inc, condition, severity, fail_msg) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IDLE_CHK_CHIP_MASK_CHK(chip_mask); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (b_test_chip) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi for (i = 0; i < (loop); i++) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = REG_RD(pdev, (offset1 + i*inc)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val2 = REG_RD(pdev, (offset2 + i*(inc))); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val2 = val2 >> 1; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi snprintf (prnt_str, SNPRINTF_VAR(prnt_str) "%s LCID %d CID_CAM 0x%x. Value is 0x%x\n", fail_msg, i, val2, val1);\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi CONDITION_CHK(condition, severity, prnt_str); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* read one reg and check according to another reg */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_5(chip_mask, offset, offset1, offset2, condition, severity, fail_msg) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IDLE_CHK_CHIP_MASK_CHK(chip_mask); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (b_test_chip) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val = REG_RD(pdev, offset);\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (!val) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IDLE_CHK_3(chip_mask, offset1, offset2, condition, severity, fail_msg); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* read wide-bus reg and check sub-fields */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_6(chip_mask, offset, loop, inc, severity) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32 rd_ptr, wr_ptr, rd_bank, wr_bank; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IDLE_CHK_CHIP_MASK_CHK(chip_mask); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (b_test_chip) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi for (i = 0; i < (loop); i++) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = REG_RD(pdev, offset + i*(inc)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val2 = REG_RD(pdev, offset + i*(inc) + 4); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi rd_ptr = ((val1 & 0x3FFFFFC0) >> 6); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi wr_ptr = ((((val1 & 0xC0000000) >> 30) & 0x3) | ((val2 & 0x3FFFFF) << 2)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi snprintf (prnt_str, SNPRINTF_VAR(prnt_str) "QM: PTRTBL entry %d- rd_ptr is not equal to wr_ptr. Values are 0x%x 0x%x\n", i, rd_ptr, wr_ptr);\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi CONDITION_CHK((rd_ptr != wr_ptr), severity, prnt_str);\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi rd_bank = ((val1 & 0x30) >> 4); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi wr_bank = (val1 & 0x03); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi snprintf (prnt_str, SNPRINTF_VAR(prnt_str) "QM: PTRTBL entry %d- rd_bank is not equal to wr_bank. Values are 0x%x 0x%x\n", i, rd_bank, wr_bank); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi CONDITION_CHK((rd_bank != wr_bank), severity, prnt_str); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* loop to read wide-bus reg and check according to another reg */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_7(chip_mask, offset, offset1, offset2, loop, inc, condition, severity, fail_msg) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t chip_num; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IDLE_CHK_CHIP_MASK_CHK(chip_mask); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (b_test_chip) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi for (i = 0; i < (loop); i++) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val = REG_RD(pdev, offset2 + i*4); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((val & 0x1) == 1) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi chip_num = REG_RD(pdev , MISC_REG_CHIP_NUM); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ((chip_num == 0x1662) || (chip_num == 0x1663) || (chip_num == 0x1651) || (chip_num == 0x1652)) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = REG_RD(pdev, offset1 + i*(inc)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = REG_RD(pdev, offset1 + i*(inc) + 4); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = REG_RD(pdev, offset1 + i*(inc) + 8); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi REG_RD(pdev, offset1 + i*(inc) + 12); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = (val1 & 0x1E000000) >> 25; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } else { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = REG_RD(pdev, offset1 + i*(inc)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = REG_RD(pdev, offset1 + i*(inc) + 4); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = REG_RD(pdev, offset1 + i*(inc) + 8); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi REG_RD(pdev, offset1 + i*(inc) + 12); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = (val1 & 0x00000078) >> 3; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val2 = REG_RD(pdev, offset + i*4); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi snprintf (prnt_str, SNPRINTF_VAR(prnt_str) "%s - LCID %d CID_CAM 0x%x. Value is 0x%x\n", fail_msg, i, val2, val1); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi CONDITION_CHK(condition, severity, prnt_str); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* check PXP VQ occupancy according to condition */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define IDLE_CHK_8(chip_mask, offset, condition, severity, fail_msg) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IDLE_CHK_CHIP_MASK_CHK(chip_mask); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (b_test_chip) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val = REG_RD(pdev, offset); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (condition) { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi snprintf (prnt_str, SNPRINTF_VAR(prnt_str) "%s. Value is 0x%x\n%s\n", fail_msg, val,_vq_hoq(pdev,#offset)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val1 = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi val2 = 0; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi CONDITION_CHK(1, severity, prnt_str); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif// _LM_DEBUG_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi