1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#ifndef _HPI_H
27#define	_HPI_H
28
29#pragma ident	"%Z%%M%	%I%	%E% SMI"
30
31#ifdef	__cplusplus
32extern "C" {
33#endif
34
35#include <sys/types.h>
36#include <hxge_common_impl.h>
37#include <hxge_common.h>
38
39typedef	uint32_t hpi_status_t;
40
41/* Common Block ID */
42#define	VMAC_BLK_ID			0x1
43#define	TXDMA_BLK_ID			0x2
44#define	RXDMA_BLK_ID			0x3
45#define	PFC_BLK_ID			0x4
46#define	VIR_BLK_ID			0x5
47#define	PEU_BLK_ID			0x6
48
49/* Common HW error code */
50/* HW unable to exit from reset state. */
51#define	RESET_FAILED			0x81
52
53/* Write operation failed on indirect write. */
54#define	WRITE_FAILED			0x82
55/* Read operation failed on indirect read.	 */
56#define	READ_FAILED			0x83
57
58/* Common SW errors code */
59
60#define	PORT_INVALID			0x41	/* Invalid port number */
61#define	CHANNEL_INVALID			0x42	/* Invalid dma channel number */
62#define	OPCODE_INVALID			0x43	/* Invalid opcode */
63#define	REGISTER_INVALID		0x44	/* Invalid register number */
64#define	COUNTER_INVALID			0x45	/* Invalid counter number */
65#define	CONFIG_INVALID			0x46	/* Invalid config input */
66#define	LOGICAL_PAGE_INVALID		0x47	/* Invalid logical page # */
67#define	VLAN_INVALID			0x48	/* Invalid Vlan ID */
68#define	RDC_TAB_INVALID			0x49	/* Invalid RDC Group Number */
69#define	LOCATION_INVALID		0x4a	/* Invalid Entry Location */
70
71#define	HPI_SUCCESS			0		/* Operation succeed */
72#define	HPI_FAILURE			0x80000000	/* Operation failed */
73
74/*
75 * Block identifier starts at bit 8.
76 */
77#define	HPI_BLOCK_ID_SHIFT		8
78
79/*
80 * Port, channel and misc. information starts at bit 12.
81 */
82#define	HPI_PORT_CHAN_SHIFT		12
83
84/*
85 * Software Block specific error codes start at 0x50.
86 */
87#define	HPI_BK_ERROR_START		0x50
88
89/*
90 * Hardware block specific error codes start at 0x90.
91 */
92#define	HPI_BK_HW_ER_START		0x90
93
94/* Structures for register tracing */
95
96typedef struct _rt_buf {
97	uint32_t	ctl_addr;
98	uint32_t	val_l32;
99	uint32_t	val_h32;
100} rt_buf_t;
101
102/*
103 * Control Address field format
104 *
105 * Bit 0 - 23: Address
106 * Bit 24 - 25: Function Number
107 * Bit 26 - 29: Instance Number
108 * Bit 30: Read/Write Direction bit
109 * Bit 31: Invalid bit
110 */
111
112#define	MAX_RTRACE_ENTRIES	1024
113#define	MAX_RTRACE_IOC_ENTRIES	64
114#define	TRACE_ADDR_MASK		0x00FFFFFF
115#define	TRACE_FUNC_MASK		0x03000000
116#define	TRACE_INST_MASK		0x3C000000
117#define	TRACE_CTL_WR		0x40000000
118#define	TRACE_CTL_INVALID	0x80000000
119#define	TRACE_FUNC_SHIFT	24
120#define	TRACE_INST_SHIFT	26
121#define	MSG_BUF_SIZE		1024
122
123
124typedef struct _rtrace {
125	uint16_t	next_idx;
126	uint16_t	last_idx;
127	boolean_t	wrapped;
128	rt_buf_t	buf[MAX_RTRACE_ENTRIES];
129} rtrace_t;
130
131/* Configuration options */
132typedef enum config_op {
133	DISABLE = 0,
134	ENABLE,
135	INIT
136} config_op_t;
137
138/* I/O options */
139typedef enum io_op {
140	OP_SET = 0,
141	OP_GET,
142	OP_UPDATE,
143	OP_CLEAR
144} io_op_t;
145
146/* HPI Handle */
147typedef	struct	_hpi_handle_function {
148	uint16_t		instance;
149	uint16_t		function;
150} hpi_handle_function_t;
151
152/* HPI Handle */
153typedef	struct	_hpi_handle {
154	hpi_reg_handle_t	regh;
155	hpi_reg_ptr_t		regp;
156	boolean_t		is_vraddr; /* virtualization region address */
157	hpi_handle_function_t	function;
158	void			*hxgep;
159} hpi_handle_t;
160
161extern	rtrace_t hpi_rtracebuf;
162void hpi_rtrace_update(hpi_handle_t handle, boolean_t wr, rtrace_t *rt,
163    uint32_t addr, uint64_t val);
164void hpi_rtrace_buf_init(rtrace_t *rt);
165
166void hpi_debug_msg(hpi_handle_function_t function, uint64_t level,
167    char *fmt, ...);
168
169#ifdef	HPI_DEBUG
170#define	HPI_DEBUG_MSG(params) hpi_debug_msg params
171#else
172#define	HPI_DEBUG_MSG(params)
173#endif
174
175#define	HPI_ERROR_MSG(params) hpi_debug_msg params
176
177#ifdef	__cplusplus
178}
179#endif
180
181#endif	/* _HPI_H */
182