3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER START
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * The contents of this file are subject to the terms of the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Common Development and Distribution License (the "License").
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * You may not use this file except in compliance with the License.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * or http://www.opensolaris.org/os/licensing.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * See the License for the specific language governing permissions
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * and limitations under the License.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * When distributing Covered Code, include this CDDL HEADER in each
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * If applicable, add the following below this CDDL HEADER, with the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * fields enclosed by brackets "[]" replaced with your own identifying
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * information: Portions Copyright [yyyy] [name of copyright owner]
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Use is subject to license terms.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#ifndef _HPI_H
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define _HPI_H
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#pragma ident "%Z%%M% %I% %E% SMI"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#ifdef __cplusplus
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern "C" {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <sys/types.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <hxge_common_impl.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <hxge_common.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef uint32_t hpi_status_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Common Block ID */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define VMAC_BLK_ID 0x1
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TXDMA_BLK_ID 0x2
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define RXDMA_BLK_ID 0x3
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define PFC_BLK_ID 0x4
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define VIR_BLK_ID 0x5
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define PEU_BLK_ID 0x6
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Common HW error code */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* HW unable to exit from reset state. */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define RESET_FAILED 0x81
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Write operation failed on indirect write. */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define WRITE_FAILED 0x82
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Read operation failed on indirect read. */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define READ_FAILED 0x83
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Common SW errors code */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define PORT_INVALID 0x41 /* Invalid port number */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define CHANNEL_INVALID 0x42 /* Invalid dma channel number */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define OPCODE_INVALID 0x43 /* Invalid opcode */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define REGISTER_INVALID 0x44 /* Invalid register number */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define COUNTER_INVALID 0x45 /* Invalid counter number */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define CONFIG_INVALID 0x46 /* Invalid config input */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define LOGICAL_PAGE_INVALID 0x47 /* Invalid logical page # */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define VLAN_INVALID 0x48 /* Invalid Vlan ID */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define RDC_TAB_INVALID 0x49 /* Invalid RDC Group Number */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define LOCATION_INVALID 0x4a /* Invalid Entry Location */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HPI_SUCCESS 0 /* Operation succeed */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HPI_FAILURE 0x80000000 /* Operation failed */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Block identifier starts at bit 8.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HPI_BLOCK_ID_SHIFT 8
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Port, channel and misc. information starts at bit 12.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HPI_PORT_CHAN_SHIFT 12
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Software Block specific error codes start at 0x50.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HPI_BK_ERROR_START 0x50
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Hardware block specific error codes start at 0x90.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HPI_BK_HW_ER_START 0x90
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Structures for register tracing */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct _rt_buf {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t ctl_addr;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t val_l32;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t val_h32;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} rt_buf_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Control Address field format
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Bit 0 - 23: Address
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Bit 24 - 25: Function Number
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Bit 26 - 29: Instance Number
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Bit 30: Read/Write Direction bit
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Bit 31: Invalid bit
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define MAX_RTRACE_ENTRIES 1024
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define MAX_RTRACE_IOC_ENTRIES 64
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TRACE_ADDR_MASK 0x00FFFFFF
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TRACE_FUNC_MASK 0x03000000
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TRACE_INST_MASK 0x3C000000
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TRACE_CTL_WR 0x40000000
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TRACE_CTL_INVALID 0x80000000
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TRACE_FUNC_SHIFT 24
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TRACE_INST_SHIFT 26
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define MSG_BUF_SIZE 1024
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct _rtrace {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint16_t next_idx;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint16_t last_idx;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs boolean_t wrapped;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs rt_buf_t buf[MAX_RTRACE_ENTRIES];
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} rtrace_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Configuration options */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef enum config_op {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs DISABLE = 0,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs ENABLE,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs INIT
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} config_op_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* I/O options */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef enum io_op {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs OP_SET = 0,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs OP_GET,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs OP_UPDATE,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs OP_CLEAR
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} io_op_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* HPI Handle */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct _hpi_handle_function {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint16_t instance;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint16_t function;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hpi_handle_function_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* HPI Handle */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct _hpi_handle {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_reg_handle_t regh;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_reg_ptr_t regp;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs boolean_t is_vraddr; /* virtualization region address */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hpi_handle_function_t function;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs void *hxgep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hpi_handle_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern rtrace_t hpi_rtracebuf;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsvoid hpi_rtrace_update(hpi_handle_t handle, boolean_t wr, rtrace_t *rt,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t addr, uint64_t val);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsvoid hpi_rtrace_buf_init(rtrace_t *rt);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsvoid hpi_debug_msg(hpi_handle_function_t function, uint64_t level,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs char *fmt, ...);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#ifdef HPI_DEBUG
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HPI_DEBUG_MSG(params) hpi_debug_msg params
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#else
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HPI_DEBUG_MSG(params)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HPI_ERROR_MSG(params) hpi_debug_msg params
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#ifdef __cplusplus
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif /* _HPI_H */