xref: /freebsd/sys/dev/qlxgbe/ql_tmplt.h (revision 2a63c3be158216222d89a073dcbd6a72ee4aab5a)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2013-2016 Qlogic Corporation
5  * All rights reserved.
6  *
7  *  Redistribution and use in source and binary forms, with or without
8  *  modification, are permitted provided that the following conditions
9  *  are met:
10  *
11  *  1. Redistributions of source code must retain the above copyright
12  *     notice, this list of conditions and the following disclaimer.
13  *  2. Redistributions in binary form must reproduce the above copyright
14  *     notice, this list of conditions and the following disclaimer in the
15  *     documentation and/or other materials provided with the distribution.
16  *
17  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27  *  POSSIBILITY OF SUCH DAMAGE.
28  */
29 /*
30  * File: ql_tmplt.h
31  * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656.
32  */
33 #ifndef _QL_TMPLT_H_
34 #define _QL_TMPLT_H_
35 
36 typedef struct _q8_tmplt_hdr {
37 	uint16_t	version;
38 	uint16_t	signature;
39 	uint16_t	size;
40 	uint16_t	nentries;
41 	uint16_t	stop_seq_off;
42 	uint16_t	csum;
43 	uint16_t	init_seq_off;
44 	uint16_t	start_seq_off;
45 } __packed q8_tmplt_hdr_t;
46 
47 typedef struct _q8_ce_hdr {
48 	uint16_t	opcode;
49 	uint16_t	size;
50 	uint16_t	opcount;
51 	uint16_t	delay_to;
52 } __packed q8_ce_hdr_t;
53 
54 /*
55  * Values for opcode field in q8_ce_hdr_t
56  */
57 #define Q8_CE_OPCODE_NOP		0x000
58 #define Q8_CE_OPCODE_WRITE_LIST		0x001
59 #define Q8_CE_OPCODE_READ_WRITE_LIST	0x002
60 #define Q8_CE_OPCODE_POLL_LIST		0x004
61 #define Q8_CE_OPCODE_POLL_WRITE_LIST	0x008
62 #define Q8_CE_OPCODE_READ_MODIFY_WRITE	0x010
63 #define Q8_CE_OPCODE_SEQ_PAUSE		0x020
64 #define Q8_CE_OPCODE_SEQ_END		0x040
65 #define Q8_CE_OPCODE_TMPLT_END		0x080
66 #define Q8_CE_OPCODE_POLL_RD_LIST	0x100
67 
68 /*
69  * structure for Q8_CE_OPCODE_WRITE_LIST
70  */
71 typedef struct _q8_wrl_e {
72 	uint32_t	addr;
73 	uint32_t	value;
74 } __packed q8_wrl_e_t;
75 
76 /*
77  * structure for Q8_CE_OPCODE_READ_WRITE_LIST
78  */
79 typedef struct _q8_rdwrl_e {
80 	uint32_t	rd_addr;
81 	uint32_t	wr_addr;
82 } __packed q8_rdwrl_e_t;
83 
84 /*
85  * common for
86  *	Q8_CE_OPCODE_POLL_LIST
87  *	Q8_CE_OPCODE_POLL_WRITE_LIST
88  *	Q8_CE_OPCODE_POLL_RD_LIST
89  */
90 typedef struct _q8_poll_hdr {
91 	uint32_t	tmask;
92 	uint32_t	tvalue;
93 } q8_poll_hdr_t;
94 
95 /*
96  * structure for Q8_CE_OPCODE_POLL_LIST
97  */
98 typedef struct _q8_poll_e {
99 	uint32_t	addr;
100 	uint32_t	to_addr;
101 } q8_poll_e_t;
102 
103 /*
104  * structure for Q8_CE_OPCODE_POLL_WRITE_LIST
105  */
106 typedef struct _q8_poll_wr_e {
107 	uint32_t	dr_addr;
108 	uint32_t	dr_value;
109 	uint32_t	ar_addr;
110 	uint32_t	ar_value;
111 } q8_poll_wr_e_t;
112 
113 /*
114  * structure for Q8_CE_OPCODE_POLL_RD_LIST
115  */
116 typedef struct _q8_poll_rd_e {
117 	uint32_t	ar_addr;
118 	uint32_t	ar_value;
119 	uint32_t	dr_addr;
120 	uint32_t	rsrvd;
121 } q8_poll_rd_e_t;
122 
123 /*
124  * structure for Q8_CE_OPCODE_READ_MODIFY_WRITE
125  */
126 typedef struct _q8_rdmwr_hdr {
127 	uint32_t	and_value;
128 	uint32_t	xor_value;
129 	uint32_t	or_value;
130 	uint8_t		shl;
131 	uint8_t		shr;
132 	uint8_t		index_a;
133 	uint8_t		rsrvd;
134 } q8_rdmwr_hdr_t;
135 
136 typedef struct _q8_rdmwr_e {
137 	uint32_t	rd_addr;
138 	uint32_t	wr_addr;
139 } q8_rdmwr_e_t;
140 
141 #endif /* #ifndef _QL_TMPLT_H_ */
142