xref: /aosp_15_r20/external/ethtool/qsfp.h (revision 1b481fc3bb1b45d4cf28d1ec12969dc1055f555d)
1*1b481fc3SMaciej Żenczykowski /*
2*1b481fc3SMaciej Żenczykowski  * SFF 8636 standards based QSFP EEPROM Field Definitions
3*1b481fc3SMaciej Żenczykowski  *
4*1b481fc3SMaciej Żenczykowski  * Vidya Ravipati <[email protected]>
5*1b481fc3SMaciej Żenczykowski  *
6*1b481fc3SMaciej Żenczykowski  * This program is free software; you can redistribute it and/or modify
7*1b481fc3SMaciej Żenczykowski  * it under the terms of the GNU General Public License as published by
8*1b481fc3SMaciej Żenczykowski  * the Free Software Foundation; either version 2 of the License, or
9*1b481fc3SMaciej Żenczykowski  * (at your option) any later version.
10*1b481fc3SMaciej Żenczykowski  *
11*1b481fc3SMaciej Żenczykowski  */
12*1b481fc3SMaciej Żenczykowski 
13*1b481fc3SMaciej Żenczykowski #ifndef QSFP_H__
14*1b481fc3SMaciej Żenczykowski #define QSFP_H__
15*1b481fc3SMaciej Żenczykowski 
16*1b481fc3SMaciej Żenczykowski /*------------------------------------------------------------------------------
17*1b481fc3SMaciej Żenczykowski  *
18*1b481fc3SMaciej Żenczykowski  * QSFP EEPROM data structures
19*1b481fc3SMaciej Żenczykowski  *
20*1b481fc3SMaciej Żenczykowski  * register info from SFF-8636 Rev 2.7
21*1b481fc3SMaciej Żenczykowski  */
22*1b481fc3SMaciej Żenczykowski 
23*1b481fc3SMaciej Żenczykowski /*------------------------------------------------------------------------------
24*1b481fc3SMaciej Żenczykowski  *
25*1b481fc3SMaciej Żenczykowski  * Lower Memory Page 00h
26*1b481fc3SMaciej Żenczykowski  * Measurement, Diagnostic and Control Functions
27*1b481fc3SMaciej Żenczykowski  *
28*1b481fc3SMaciej Żenczykowski  */
29*1b481fc3SMaciej Żenczykowski /* Identifier - 0 */
30*1b481fc3SMaciej Żenczykowski /* Values are defined under SFF8024_ID_OFFSET */
31*1b481fc3SMaciej Żenczykowski #define	SFF8636_ID_OFFSET	0x00
32*1b481fc3SMaciej Żenczykowski 
33*1b481fc3SMaciej Żenczykowski #define	SFF8636_REV_COMPLIANCE_OFFSET	0x01
34*1b481fc3SMaciej Żenczykowski 
35*1b481fc3SMaciej Żenczykowski #define	SFF8636_STATUS_2_OFFSET	0x02
36*1b481fc3SMaciej Żenczykowski /* Flat Memory:0- Paging, 1- Page 0 only */
37*1b481fc3SMaciej Żenczykowski #define	 SFF8636_STATUS_PAGE_3_PRESENT		(1 << 2)
38*1b481fc3SMaciej Żenczykowski #define	 SFF8636_STATUS_INTL_OUTPUT		(1 << 1)
39*1b481fc3SMaciej Żenczykowski #define	 SFF8636_STATUS_DATA_NOT_READY		(1 << 0)
40*1b481fc3SMaciej Żenczykowski 
41*1b481fc3SMaciej Żenczykowski /* Channel Status Interrupt Flags - 3-5 */
42*1b481fc3SMaciej Żenczykowski #define	SFF8636_LOS_AW_OFFSET	0x03
43*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX4_LOS_AW		(1 << 7)
44*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX3_LOS_AW		(1 << 6)
45*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX2_LOS_AW		(1 << 5)
46*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX1_LOS_AW		(1 << 4)
47*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX4_LOS_AW		(1 << 3)
48*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX3_LOS_AW		(1 << 2)
49*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX2_LOS_AW		(1 << 1)
50*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX1_LOS_AW		(1 << 0)
51*1b481fc3SMaciej Żenczykowski 
52*1b481fc3SMaciej Żenczykowski #define	SFF8636_FAULT_AW_OFFSET	0x04
53*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX4_FAULT_AW	(1 << 3)
54*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX3_FAULT_AW	(1 << 2)
55*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX2_FAULT_AW	(1 << 1)
56*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX1_FAULT_AW	(1 << 0)
57*1b481fc3SMaciej Żenczykowski 
58*1b481fc3SMaciej Żenczykowski #define	SFF8636_LOL_AW_OFFSET	0x05
59*1b481fc3SMaciej Żenczykowski 
60*1b481fc3SMaciej Żenczykowski /* Module Monitor Interrupt Flags - 6-8 */
61*1b481fc3SMaciej Żenczykowski #define	SFF8636_TEMP_AW_OFFSET	0x06
62*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TEMP_HALARM_STATUS		(1 << 7)
63*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TEMP_LALARM_STATUS		(1 << 6)
64*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TEMP_HWARN_STATUS		(1 << 5)
65*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TEMP_LWARN_STATUS		(1 << 4)
66*1b481fc3SMaciej Żenczykowski 
67*1b481fc3SMaciej Żenczykowski #define	SFF8636_VCC_AW_OFFSET	0x07
68*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VCC_HALARM_STATUS		(1 << 7)
69*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VCC_LALARM_STATUS		(1 << 6)
70*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VCC_HWARN_STATUS		(1 << 5)
71*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VCC_LWARN_STATUS		(1 << 4)
72*1b481fc3SMaciej Żenczykowski 
73*1b481fc3SMaciej Żenczykowski /* Channel Monitor Interrupt Flags - 9-21 */
74*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_PWR_12_AW_OFFSET	0x09
75*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_1_HALARM		(1 << 7)
76*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_1_LALARM		(1 << 6)
77*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_1_HWARN			(1 << 5)
78*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_1_LWARN			(1 << 4)
79*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_2_HALARM		(1 << 3)
80*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_2_LALARM		(1 << 2)
81*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_2_HWARN			(1 << 1)
82*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_2_LWARN			(1 << 0)
83*1b481fc3SMaciej Żenczykowski 
84*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_PWR_34_AW_OFFSET	0x0A
85*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_3_HALARM		(1 << 7)
86*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_3_LALARM		(1 << 6)
87*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_3_HWARN			(1 << 5)
88*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_3_LWARN			(1 << 4)
89*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_4_HALARM		(1 << 3)
90*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_4_LALARM		(1 << 2)
91*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_4_HWARN			(1 << 1)
92*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_PWR_4_LWARN			(1 << 0)
93*1b481fc3SMaciej Żenczykowski 
94*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_BIAS_12_AW_OFFSET	0x0B
95*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_1_HALARM		(1 << 7)
96*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_1_LALARM		(1 << 6)
97*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_1_HWARN		(1 << 5)
98*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_1_LWARN		(1 << 4)
99*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_2_HALARM		(1 << 3)
100*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_2_LALARM		(1 << 2)
101*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_2_HWARN		(1 << 1)
102*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_2_LWARN		(1 << 0)
103*1b481fc3SMaciej Żenczykowski 
104*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_BIAS_34_AW_OFFSET	0xC
105*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_3_HALARM		(1 << 7)
106*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_3_LALARM		(1 << 6)
107*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_3_HWARN		(1 << 5)
108*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_3_LWARN		(1 << 4)
109*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_4_HALARM		(1 << 3)
110*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_4_LALARM		(1 << 2)
111*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_4_HWARN		(1 << 1)
112*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_BIAS_4_LWARN		(1 << 0)
113*1b481fc3SMaciej Żenczykowski 
114*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_PWR_12_AW_OFFSET	0x0D
115*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_1_HALARM		(1 << 7)
116*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_1_LALARM		(1 << 6)
117*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_1_HWARN			(1 << 5)
118*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_1_LWARN			(1 << 4)
119*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_2_HALARM		(1 << 3)
120*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_2_LALARM		(1 << 2)
121*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_2_HWARN			(1 << 1)
122*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_2_LWARN			(1 << 0)
123*1b481fc3SMaciej Żenczykowski 
124*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_PWR_34_AW_OFFSET	0x0E
125*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_3_HALARM		(1 << 7)
126*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_3_LALARM		(1 << 6)
127*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_3_HWARN			(1 << 5)
128*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_3_LWARN			(1 << 4)
129*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_4_HALARM		(1 << 3)
130*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_4_LALARM		(1 << 2)
131*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_4_HWARN			(1 << 1)
132*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_PWR_4_LWARN			(1 << 0)
133*1b481fc3SMaciej Żenczykowski 
134*1b481fc3SMaciej Żenczykowski /* Module Monitoring Values - 22-33 */
135*1b481fc3SMaciej Żenczykowski #define	SFF8636_TEMP_CURR		0x16
136*1b481fc3SMaciej Żenczykowski #define	SFF8636_TEMP_MSB_OFFSET		0x16
137*1b481fc3SMaciej Żenczykowski #define	SFF8636_TEMP_LSB_OFFSET		0x17
138*1b481fc3SMaciej Żenczykowski 
139*1b481fc3SMaciej Żenczykowski #define	SFF8636_VCC_CURR		0x1A
140*1b481fc3SMaciej Żenczykowski #define	SFF8636_VCC_MSB_OFFSET		0x1A
141*1b481fc3SMaciej Żenczykowski #define	SFF8636_VCC_LSB_OFFSET		0x1B
142*1b481fc3SMaciej Żenczykowski 
143*1b481fc3SMaciej Żenczykowski /* Channel Monitoring Values - 34-81 */
144*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_PWR_1_OFFSET		0x22
145*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_PWR_2_OFFSET		0x24
146*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_PWR_3_OFFSET		0x26
147*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_PWR_4_OFFSET		0x28
148*1b481fc3SMaciej Żenczykowski 
149*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_BIAS_1_OFFSET	0x2A
150*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_BIAS_2_OFFSET	0x2C
151*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_BIAS_3_OFFSET	0x2E
152*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_BIAS_4_OFFSET	0x30
153*1b481fc3SMaciej Żenczykowski 
154*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_PWR_1_OFFSET		0x32
155*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_PWR_2_OFFSET		0x34
156*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_PWR_3_OFFSET		0x36
157*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_PWR_4_OFFSET		0x38
158*1b481fc3SMaciej Żenczykowski 
159*1b481fc3SMaciej Żenczykowski /* Control Bytes - 86 - 99 */
160*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_DISABLE_OFFSET	0x56
161*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_DISABLE_4			(1 << 3)
162*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_DISABLE_3			(1 << 2)
163*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_DISABLE_2			(1 << 1)
164*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_DISABLE_1			(1 << 0)
165*1b481fc3SMaciej Żenczykowski 
166*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_RATE_SELECT_OFFSET	0x57
167*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_RATE_SELECT_4_MASK		(3 << 6)
168*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_RATE_SELECT_3_MASK		(3 << 4)
169*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_RATE_SELECT_2_MASK		(3 << 2)
170*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_RATE_SELECT_1_MASK		(3 << 0)
171*1b481fc3SMaciej Żenczykowski 
172*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_RATE_SELECT_OFFSET	0x58
173*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_RATE_SELECT_4_MASK		(3 << 6)
174*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_RATE_SELECT_3_MASK		(3 << 4)
175*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_RATE_SELECT_2_MASK		(3 << 2)
176*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_RATE_SELECT_1_MASK		(3 << 0)
177*1b481fc3SMaciej Żenczykowski 
178*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_APP_SELECT_4_OFFSET	0x58
179*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_APP_SELECT_3_OFFSET	0x59
180*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_APP_SELECT_2_OFFSET	0x5A
181*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_APP_SELECT_1_OFFSET	0x5B
182*1b481fc3SMaciej Żenczykowski 
183*1b481fc3SMaciej Żenczykowski #define	SFF8636_PWR_MODE_OFFSET		0x5D
184*1b481fc3SMaciej Żenczykowski #define	 SFF8636_HIGH_PWR_ENABLE		(1 << 2)
185*1b481fc3SMaciej Żenczykowski #define	 SFF8636_LOW_PWR_SET			(1 << 1)
186*1b481fc3SMaciej Żenczykowski #define	 SFF8636_PWR_OVERRIDE			(1 << 0)
187*1b481fc3SMaciej Żenczykowski 
188*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_APP_SELECT_4_OFFSET	0x5E
189*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_APP_SELECT_3_OFFSET	0x5F
190*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_APP_SELECT_2_OFFSET	0x60
191*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_APP_SELECT_1_OFFSET	0x61
192*1b481fc3SMaciej Żenczykowski 
193*1b481fc3SMaciej Żenczykowski #define	SFF8636_LOS_MASK_OFFSET		0x64
194*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_LOS_4_MASK			(1 << 7)
195*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_LOS_3_MASK			(1 << 6)
196*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_LOS_2_MASK			(1 << 5)
197*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_LOS_1_MASK			(1 << 4)
198*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_LOS_4_MASK			(1 << 3)
199*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_LOS_3_MASK			(1 << 2)
200*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_LOS_2_MASK			(1 << 1)
201*1b481fc3SMaciej Żenczykowski #define	 SFF8636_RX_LOS_1_MASK			(1 << 0)
202*1b481fc3SMaciej Żenczykowski 
203*1b481fc3SMaciej Żenczykowski #define	SFF8636_FAULT_MASK_OFFSET	0x65
204*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_FAULT_1_MASK		(1 << 3)
205*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_FAULT_2_MASK		(1 << 2)
206*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_FAULT_3_MASK		(1 << 1)
207*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TX_FAULT_4_MASK		(1 << 0)
208*1b481fc3SMaciej Żenczykowski 
209*1b481fc3SMaciej Żenczykowski #define	SFF8636_TEMP_MASK_OFFSET	0x67
210*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TEMP_HALARM_MASK		(1 << 7)
211*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TEMP_LALARM_MASK		(1 << 6)
212*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TEMP_HWARN_MASK		(1 << 5)
213*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TEMP_LWARN_MASK		(1 << 4)
214*1b481fc3SMaciej Żenczykowski 
215*1b481fc3SMaciej Żenczykowski #define	SFF8636_VCC_MASK_OFFSET		0x68
216*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VCC_HALARM_MASK		(1 << 7)
217*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VCC_LALARM_MASK		(1 << 6)
218*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VCC_HWARN_MASK			(1 << 5)
219*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VCC_LWARN_MASK			(1 << 4)
220*1b481fc3SMaciej Żenczykowski 
221*1b481fc3SMaciej Żenczykowski /*------------------------------------------------------------------------------
222*1b481fc3SMaciej Żenczykowski  *
223*1b481fc3SMaciej Żenczykowski  * Upper Memory Page 00h
224*1b481fc3SMaciej Żenczykowski  * Serial ID - Base ID, Extended ID and Vendor Specific ID fields
225*1b481fc3SMaciej Żenczykowski  *
226*1b481fc3SMaciej Żenczykowski  */
227*1b481fc3SMaciej Żenczykowski /* Identifier - 128 */
228*1b481fc3SMaciej Żenczykowski /* Identifier values same as Lower Memory Page 00h */
229*1b481fc3SMaciej Żenczykowski #define	SFF8636_UPPER_PAGE_0_ID_OFFSET		0x80
230*1b481fc3SMaciej Żenczykowski 
231*1b481fc3SMaciej Żenczykowski /* Extended Identifier - 128 */
232*1b481fc3SMaciej Żenczykowski #define SFF8636_EXT_ID_OFFSET		0x81
233*1b481fc3SMaciej Żenczykowski #define	 SFF8636_EXT_ID_PWR_CLASS_MASK		0xC0
234*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_ID_PWR_CLASS_1		(0 << 6)
235*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_ID_PWR_CLASS_2		(1 << 6)
236*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_ID_PWR_CLASS_3		(2 << 6)
237*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_ID_PWR_CLASS_4		(3 << 6)
238*1b481fc3SMaciej Żenczykowski #define	 SFF8636_EXT_ID_CLIE_MASK		0x10
239*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_ID_CLIEI_CODE_PRESENT	(1 << 4)
240*1b481fc3SMaciej Żenczykowski #define	 SFF8636_EXT_ID_CDR_TX_MASK		0x08
241*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_ID_CDR_TX_PRESENT		(1 << 3)
242*1b481fc3SMaciej Żenczykowski #define	 SFF8636_EXT_ID_CDR_RX_MASK		0x04
243*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_ID_CDR_RX_PRESENT		(1 << 2)
244*1b481fc3SMaciej Żenczykowski #define	 SFF8636_EXT_ID_EPWR_CLASS_MASK		0x03
245*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_ID_PWR_CLASS_LEGACY	0
246*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_ID_PWR_CLASS_5		1
247*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_ID_PWR_CLASS_6		2
248*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_ID_PWR_CLASS_7		3
249*1b481fc3SMaciej Żenczykowski 
250*1b481fc3SMaciej Żenczykowski /* Connector Values offset - 130 */
251*1b481fc3SMaciej Żenczykowski /* Values are defined under SFF8024_CTOR */
252*1b481fc3SMaciej Żenczykowski #define	SFF8636_CTOR_OFFSET		0x82
253*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_UNKNOWN			0x00
254*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_SC			0x01
255*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_FC_STYLE_1		0x02
256*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_FC_STYLE_2		0x03
257*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_BNC_TNC			0x04
258*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_FC_COAX			0x05
259*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_FIBER_JACK		0x06
260*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_LC			0x07
261*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_MT_RJ			0x08
262*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_MU			0x09
263*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_SG			0x0A
264*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_OPT_PT			0x0B
265*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_MPO			0x0C
266*1b481fc3SMaciej Żenczykowski /* 0D-1Fh --- Reserved */
267*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_HSDC_II			0x20
268*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_COPPER_PT			0x21
269*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_RJ45			0x22
270*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_NO_SEPARABLE		0x23
271*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CTOR_MXC_2X16			0x24
272*1b481fc3SMaciej Żenczykowski 
273*1b481fc3SMaciej Żenczykowski /* Specification Compliance - 131-138 */
274*1b481fc3SMaciej Żenczykowski /* Ethernet Compliance Codes - 131 */
275*1b481fc3SMaciej Żenczykowski #define	SFF8636_ETHERNET_COMP_OFFSET	0x83
276*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_RSRVD			(1 << 7)
277*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_10G_LRM		(1 << 6)
278*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_10G_LR		(1 << 5)
279*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_10G_SR		(1 << 4)
280*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_40G_CR4		(1 << 3)
281*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_40G_SR4		(1 << 2)
282*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_40G_LR4		(1 << 1)
283*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_40G_ACTIVE	(1 << 0)
284*1b481fc3SMaciej Żenczykowski 
285*1b481fc3SMaciej Żenczykowski /* SONET Compliance Codes - 132 */
286*1b481fc3SMaciej Żenczykowski #define	SFF8636_SONET_COMP_OFFSET	0x84
287*1b481fc3SMaciej Żenczykowski #define	 SFF8636_SONET_40G_OTN			(1 << 3)
288*1b481fc3SMaciej Żenczykowski #define	 SFF8636_SONET_OC48_LR			(1 << 2)
289*1b481fc3SMaciej Żenczykowski #define	 SFF8636_SONET_OC48_IR			(1 << 1)
290*1b481fc3SMaciej Żenczykowski #define	 SFF8636_SONET_OC48_SR			(1 << 0)
291*1b481fc3SMaciej Żenczykowski 
292*1b481fc3SMaciej Żenczykowski /* SAS/SATA Complaince Codes - 133 */
293*1b481fc3SMaciej Żenczykowski #define	SFF8636_SAS_COMP_OFFSET		0x85
294*1b481fc3SMaciej Żenczykowski #define	 SFF8636_SAS_12G			(1 << 6)
295*1b481fc3SMaciej Żenczykowski #define	 SFF8636_SAS_6G				(1 << 5)
296*1b481fc3SMaciej Żenczykowski #define	 SFF8636_SAS_3G				(1 << 4)
297*1b481fc3SMaciej Żenczykowski 
298*1b481fc3SMaciej Żenczykowski /* Gigabit Ethernet Compliance Codes - 134 */
299*1b481fc3SMaciej Żenczykowski #define	SFF8636_GIGE_COMP_OFFSET	0x86
300*1b481fc3SMaciej Żenczykowski #define	 SFF8636_GIGE_1000_BASE_T		(1 << 3)
301*1b481fc3SMaciej Żenczykowski #define	 SFF8636_GIGE_1000_BASE_CX		(1 << 2)
302*1b481fc3SMaciej Żenczykowski #define	 SFF8636_GIGE_1000_BASE_LX		(1 << 1)
303*1b481fc3SMaciej Żenczykowski #define	 SFF8636_GIGE_1000_BASE_SX		(1 << 0)
304*1b481fc3SMaciej Żenczykowski 
305*1b481fc3SMaciej Żenczykowski /* Fibre Channel Link length/Transmitter Tech. - 135,136 */
306*1b481fc3SMaciej Żenczykowski #define	SFF8636_FC_LEN_OFFSET		0x87
307*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_LEN_VERY_LONG		(1 << 7)
308*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_LEN_SHORT			(1 << 6)
309*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_LEN_INT			(1 << 5)
310*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_LEN_LONG			(1 << 4)
311*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_LEN_MED			(1 << 3)
312*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TECH_LONG_LC		(1 << 1)
313*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TECH_ELEC_INTER		(1 << 0)
314*1b481fc3SMaciej Żenczykowski 
315*1b481fc3SMaciej Żenczykowski #define	SFF8636_FC_TECH_OFFSET		0x88
316*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TECH_ELEC_INTRA		(1 << 7)
317*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TECH_SHORT_WO_OFC		(1 << 6)
318*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TECH_SHORT_W_OFC		(1 << 5)
319*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TECH_LONG_LL		(1 << 4)
320*1b481fc3SMaciej Żenczykowski 
321*1b481fc3SMaciej Żenczykowski /* Fibre Channel Transmitter Media - 137 */
322*1b481fc3SMaciej Żenczykowski #define	SFF8636_FC_TRANS_MEDIA_OFFSET	0x89
323*1b481fc3SMaciej Żenczykowski /* Twin Axial Pair */
324*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TRANS_MEDIA_TW		(1 << 7)
325*1b481fc3SMaciej Żenczykowski /* Shielded Twisted Pair */
326*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TRANS_MEDIA_TP		(1 << 6)
327*1b481fc3SMaciej Żenczykowski /* Miniature Coax */
328*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TRANS_MEDIA_MI		(1 << 5)
329*1b481fc3SMaciej Żenczykowski /* Video Coax */
330*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TRANS_MEDIA_TV		(1 << 4)
331*1b481fc3SMaciej Żenczykowski /* Multi-mode 62.5m */
332*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TRANS_MEDIA_M6		(1 << 3)
333*1b481fc3SMaciej Żenczykowski /* Multi-mode 50m */
334*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TRANS_MEDIA_M5		(1 << 2)
335*1b481fc3SMaciej Żenczykowski /* Multi-mode 50um */
336*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TRANS_MEDIA_OM3		(1 << 1)
337*1b481fc3SMaciej Żenczykowski /* Single Mode */
338*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_TRANS_MEDIA_SM		(1 << 0)
339*1b481fc3SMaciej Żenczykowski 
340*1b481fc3SMaciej Żenczykowski /* Fibre Channel Speed - 138 */
341*1b481fc3SMaciej Żenczykowski #define	SFF8636_FC_SPEED_OFFSET		0x8A
342*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_SPEED_1200_MBPS		(1 << 7)
343*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_SPEED_800_MBPS		(1 << 6)
344*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_SPEED_1600_MBPS		(1 << 5)
345*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_SPEED_400_MBPS		(1 << 4)
346*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_SPEED_200_MBPS		(1 << 2)
347*1b481fc3SMaciej Żenczykowski #define	 SFF8636_FC_SPEED_100_MBPS		(1 << 0)
348*1b481fc3SMaciej Żenczykowski 
349*1b481fc3SMaciej Żenczykowski /* Encoding - 139 */
350*1b481fc3SMaciej Żenczykowski /* Values are defined under SFF8024_ENCODING */
351*1b481fc3SMaciej Żenczykowski #define	SFF8636_ENCODING_OFFSET		0x8B
352*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ENCODING_MANCHESTER	0x06
353*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ENCODING_64B66B		0x05
354*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ENCODING_SONET			0x04
355*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ENCODING_NRZ			0x03
356*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ENCODING_4B5B			0x02
357*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ENCODING_8B10B			0x01
358*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ENCODING_UNSPEC		0x00
359*1b481fc3SMaciej Żenczykowski 
360*1b481fc3SMaciej Żenczykowski /* BR, Nominal - 140 */
361*1b481fc3SMaciej Żenczykowski #define	SFF8636_BR_NOMINAL_OFFSET	0x8C
362*1b481fc3SMaciej Żenczykowski 
363*1b481fc3SMaciej Żenczykowski /* Extended RateSelect - 141 */
364*1b481fc3SMaciej Żenczykowski #define	SFF8636_EXT_RS_OFFSET		0x8D
365*1b481fc3SMaciej Żenczykowski #define	 SFF8636_EXT_RS_V1			(1 << 0)
366*1b481fc3SMaciej Żenczykowski 
367*1b481fc3SMaciej Żenczykowski /* Length (Standard SM Fiber)-km - 142 */
368*1b481fc3SMaciej Żenczykowski #define	SFF8636_SM_LEN_OFFSET		0x8E
369*1b481fc3SMaciej Żenczykowski 
370*1b481fc3SMaciej Żenczykowski /* Length (OM3)-Unit 2m - 143 */
371*1b481fc3SMaciej Żenczykowski #define	SFF8636_OM3_LEN_OFFSET		0x8F
372*1b481fc3SMaciej Żenczykowski 
373*1b481fc3SMaciej Żenczykowski /* Length (OM2)-Unit 1m - 144 */
374*1b481fc3SMaciej Żenczykowski #define	SFF8636_OM2_LEN_OFFSET		0x90
375*1b481fc3SMaciej Żenczykowski 
376*1b481fc3SMaciej Żenczykowski /* Length (OM1)-Unit 1m - 145 */
377*1b481fc3SMaciej Żenczykowski #define	SFF8636_OM1_LEN_OFFSET		0x91
378*1b481fc3SMaciej Żenczykowski 
379*1b481fc3SMaciej Żenczykowski /* Cable Assembly Length -Unit 1m - 146 */
380*1b481fc3SMaciej Żenczykowski #define	SFF8636_CBL_LEN_OFFSET		0x92
381*1b481fc3SMaciej Żenczykowski 
382*1b481fc3SMaciej Żenczykowski /* Device Technology - 147 */
383*1b481fc3SMaciej Żenczykowski #define	SFF8636_DEVICE_TECH_OFFSET	0x93
384*1b481fc3SMaciej Żenczykowski /* Transmitter Technology */
385*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_TECH_MASK		0xF0
386*1b481fc3SMaciej Żenczykowski /* Copper cable, linear active equalizers */
387*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_COPPER_LNR_EQUAL		(15 << 4)
388*1b481fc3SMaciej Żenczykowski /* Copper cable, near end limiting active equalizers */
389*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_COPPER_NEAR_EQUAL	(14 << 4)
390*1b481fc3SMaciej Żenczykowski /* Copper cable, far end limiting active equalizers */
391*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_COPPER_FAR_EQUAL		(13 << 4)
392*1b481fc3SMaciej Żenczykowski /* Copper cable, near & far end limiting active equalizers */
393*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_COPPER_LNR_FAR_EQUAL	(12 << 4)
394*1b481fc3SMaciej Żenczykowski /* Copper cable, passive equalized */
395*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_COPPER_PAS_EQUAL		(11 << 4)
396*1b481fc3SMaciej Żenczykowski /* Copper cable, unequalized */
397*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_COPPER_PAS_UNEQUAL	(10 << 4)
398*1b481fc3SMaciej Żenczykowski /* 1490 nm DFB */
399*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_1490_DFB			(9 << 4)
400*1b481fc3SMaciej Żenczykowski /* Others */
401*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_OTHERS			(8 << 4)
402*1b481fc3SMaciej Żenczykowski /* 1550 nm EML */
403*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_1550_EML			(7 << 4)
404*1b481fc3SMaciej Żenczykowski /* 1310 nm EML */
405*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_1310_EML			(6 << 4)
406*1b481fc3SMaciej Żenczykowski /* 1550 nm DFB */
407*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_1550_DFB			(5 << 4)
408*1b481fc3SMaciej Żenczykowski /* 1310 nm DFB */
409*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_1310_DFB			(4 << 4)
410*1b481fc3SMaciej Żenczykowski /* 1310 nm FP */
411*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_1310_FP			(3 << 4)
412*1b481fc3SMaciej Żenczykowski /* 1550 nm VCSEL */
413*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_1550_VCSEL		(2 << 4)
414*1b481fc3SMaciej Żenczykowski /* 1310 nm VCSEL */
415*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_1310_VCSEL		(1 << 4)
416*1b481fc3SMaciej Żenczykowski /* 850 nm VCSEL */
417*1b481fc3SMaciej Żenczykowski #define	 SFF8636_TRANS_850_VCSEL		(0 << 4)
418*1b481fc3SMaciej Żenczykowski 
419*1b481fc3SMaciej Żenczykowski  /* Active/No wavelength control */
420*1b481fc3SMaciej Żenczykowski #define	 SFF8636_DEV_TECH_ACTIVE_WAVE_LEN	(1 << 3)
421*1b481fc3SMaciej Żenczykowski /* Cooled transmitter */
422*1b481fc3SMaciej Żenczykowski #define	 SFF8636_DEV_TECH_COOL_TRANS		(1 << 2)
423*1b481fc3SMaciej Żenczykowski /* APD/Pin Detector */
424*1b481fc3SMaciej Żenczykowski #define	 SFF8636_DEV_TECH_APD_DETECTOR		(1 << 1)
425*1b481fc3SMaciej Żenczykowski /* Transmitter tunable */
426*1b481fc3SMaciej Żenczykowski #define	 SFF8636_DEV_TECH_TUNABLE		(1 << 0)
427*1b481fc3SMaciej Żenczykowski 
428*1b481fc3SMaciej Żenczykowski /* Vendor Name - 148-163 */
429*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VENDOR_NAME_START_OFFSET	0x94
430*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VENDOR_NAME_END_OFFSET		0xA3
431*1b481fc3SMaciej Żenczykowski 
432*1b481fc3SMaciej Żenczykowski /* Extended Module Codes - 164 */
433*1b481fc3SMaciej Żenczykowski #define	 SFF8636_EXT_MOD_CODE_OFFSET	0xA4
434*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_MOD_INFINIBAND_EDR	(1 << 4)
435*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_MOD_INFINIBAND_FDR	(1 << 3)
436*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_MOD_INFINIBAND_QDR	(1 << 2)
437*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_MOD_INFINIBAND_DDR	(1 << 1)
438*1b481fc3SMaciej Żenczykowski #define	  SFF8636_EXT_MOD_INFINIBAND_SDR	(1 << 0)
439*1b481fc3SMaciej Żenczykowski 
440*1b481fc3SMaciej Żenczykowski /* Vendor OUI - 165-167 */
441*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VENDOR_OUI_OFFSET		0xA5
442*1b481fc3SMaciej Żenczykowski #define	  SFF8636_VENDOR_OUI_LEN		3
443*1b481fc3SMaciej Żenczykowski 
444*1b481fc3SMaciej Żenczykowski /* Vendor OUI - 165-167 */
445*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VENDOR_PN_START_OFFSET		0xA8
446*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VENDOR_PN_END_OFFSET		0xB7
447*1b481fc3SMaciej Żenczykowski 
448*1b481fc3SMaciej Żenczykowski /* Vendor Revision - 184-185 */
449*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VENDOR_REV_START_OFFSET	0xB8
450*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VENDOR_REV_END_OFFSET		0xB9
451*1b481fc3SMaciej Żenczykowski 
452*1b481fc3SMaciej Żenczykowski /* Wavelength - 186-187 */
453*1b481fc3SMaciej Żenczykowski #define	 SFF8636_WAVELEN_HIGH_BYTE_OFFSET	0xBA
454*1b481fc3SMaciej Żenczykowski #define	 SFF8636_WAVELEN_LOW_BYTE_OFFSET	0xBB
455*1b481fc3SMaciej Żenczykowski 
456*1b481fc3SMaciej Żenczykowski /* Wavelength  Tolerance- 188-189 */
457*1b481fc3SMaciej Żenczykowski #define	 SFF8636_WAVE_TOL_HIGH_BYTE_OFFSET	0xBC
458*1b481fc3SMaciej Żenczykowski #define	 SFF8636_WAVE_TOL_LOW_BYTE_OFFSET	0xBD
459*1b481fc3SMaciej Żenczykowski 
460*1b481fc3SMaciej Żenczykowski /* Max case temp - Other than 70 C - 190 */
461*1b481fc3SMaciej Żenczykowski #define	 SFF8636_MAXCASE_TEMP_OFFSET	0xBE
462*1b481fc3SMaciej Żenczykowski 
463*1b481fc3SMaciej Żenczykowski /* CC_BASE - 191 */
464*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CC_BASE_OFFSET		0xBF
465*1b481fc3SMaciej Żenczykowski 
466*1b481fc3SMaciej Żenczykowski /* Option Values - 192-195 */
467*1b481fc3SMaciej Żenczykowski #define	 SFF8636_OPTION_1_OFFSET	0xC0
468*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_UNSPECIFIED		0x00
469*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_AOC		0x01
470*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_SR4		0x02
471*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_LR4		0x03
472*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_ER4		0x04
473*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_SR10		0x05
474*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_CWDM4_FEC	0x06
475*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_PSM4		0x07
476*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_ACC		0x08
477*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_CWDM4_NO_FEC	0x09
478*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_RSVD1		0x0A
479*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_CR4		0x0B
480*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_25G_CR_CA_S		0x0C
481*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_25G_CR_CA_N		0x0D
482*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_40G_ER4		0x10
483*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_4X10_SR		0x11
484*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_40G_PSM4		0x12
485*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_G959_P1I1_2D1		0x13
486*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_G959_P1S1_2D2		0x14
487*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_G959_P1L1_2D2		0x15
488*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_10GT_SFI		0x16
489*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_CLR4		0x17
490*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_AOC2		0x18
491*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ETHERNET_100G_ACC2		0x19
492*1b481fc3SMaciej Żenczykowski 
493*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_100GE_DWDM2        0x1A
494*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_100G_1550NM_WDM    0x1B
495*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_10G_BASET_SR       0x1C
496*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_5G_BASET           0x1D
497*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_2HALFG_BASET       0x1E
498*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_40G_SWDM4          0x1F
499*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_100G_SWDM4         0x20
500*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_100G_PAM4_BIDI     0x21
501*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_4WDM10_MSA         0x22
502*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_4WDM20_MSA         0x23
503*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_4WDM40_MSA         0x24
504*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_100G_DR            0x25
505*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_100G_FR_NOFEC      0x26
506*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_100G_LR_NOFEC      0x27
507*1b481fc3SMaciej Żenczykowski /*  28h-2Fh reserved */
508*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_200G_ACC1          0x30
509*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_200G_AOC1          0x31
510*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_200G_ACC2          0x32
511*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_200G_A0C2          0x33
512*1b481fc3SMaciej Żenczykowski /*  34h-3Fh reserved */
513*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_200G_CR4           0x40
514*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_200G_SR4           0x41
515*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_200G_DR4           0x42
516*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_200G_FR4           0x43
517*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_200G_PSM4          0x44
518*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_50G_LR             0x45
519*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_200G_LR4           0x46
520*1b481fc3SMaciej Żenczykowski /*  47h-4Fh reserved */
521*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_64G_EA             0x50
522*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_64G_SW             0x51
523*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_64G_LW             0x52
524*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_128FC_EA           0x53
525*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_128FC_SW           0x54
526*1b481fc3SMaciej Żenczykowski #define  SFF8636_ETHERNET_128FC_LW           0x55
527*1b481fc3SMaciej Żenczykowski /*  56h-5Fh reserved */
528*1b481fc3SMaciej Żenczykowski 
529*1b481fc3SMaciej Żenczykowski #define	 SFF8636_OPTION_2_OFFSET	0xC1
530*1b481fc3SMaciej Żenczykowski /* Tx input equalizers auto-adaptive */
531*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O2_TX_EQ_AUTO		(1 << 3)
532*1b481fc3SMaciej Żenczykowski /* Rx output amplitude */
533*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O2_RX_OUTPUT_AMP	(1 << 0)
534*1b481fc3SMaciej Żenczykowski #define	 SFF8636_OPTION_3_OFFSET	0xC2
535*1b481fc3SMaciej Żenczykowski /* Tx CDR Loss of Lock */
536*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O3_TX_LOL		(1 << 5)
537*1b481fc3SMaciej Żenczykowski /* Rx CDR Loss of Lock */
538*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O3_RX_LOL		(1 << 4)
539*1b481fc3SMaciej Żenczykowski /* Rx Squelch Disable */
540*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O3_RX_SQL_DSBL	(1 << 3)
541*1b481fc3SMaciej Żenczykowski /* Rx Output Disable capable */
542*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O3_RX_OUTPUT_DSBL	(1 << 2)
543*1b481fc3SMaciej Żenczykowski /* Tx Squelch Disable */
544*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O3_TX_SQL_DSBL	(1 << 1)
545*1b481fc3SMaciej Żenczykowski /* Tx Squelch Impl */
546*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O3_TX_SQL_IMPL	(1 << 0)
547*1b481fc3SMaciej Żenczykowski #define	 SFF8636_OPTION_4_OFFSET	0xC3
548*1b481fc3SMaciej Żenczykowski /* Memory Page 02 present */
549*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O4_PAGE_02_PRESENT	(1 << 7)
550*1b481fc3SMaciej Żenczykowski /* Memory Page 01 present */
551*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O4_PAGE_01_PRESENT	(1 << 6)
552*1b481fc3SMaciej Żenczykowski /* Rate Select implemented */
553*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O4_RATE_SELECT	(1 << 5)
554*1b481fc3SMaciej Żenczykowski /* Tx_DISABLE implemented */
555*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O4_TX_DISABLE		(1 << 4)
556*1b481fc3SMaciej Żenczykowski /* Tx_FAULT implemented */
557*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O4_TX_FAULT		(1 << 3)
558*1b481fc3SMaciej Żenczykowski /* Tx Squelch implemented */
559*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O4_TX_SQUELCH		(1 << 2)
560*1b481fc3SMaciej Żenczykowski /* Tx Loss of Signal */
561*1b481fc3SMaciej Żenczykowski #define	  SFF8636_O4_TX_LOS		(1 << 1)
562*1b481fc3SMaciej Żenczykowski 
563*1b481fc3SMaciej Żenczykowski /* Vendor SN - 196-211 */
564*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VENDOR_SN_START_OFFSET	0xC4
565*1b481fc3SMaciej Żenczykowski #define	 SFF8636_VENDOR_SN_END_OFFSET	0xD3
566*1b481fc3SMaciej Żenczykowski 
567*1b481fc3SMaciej Żenczykowski /* Vendor Date - 212-219 */
568*1b481fc3SMaciej Żenczykowski #define	 SFF8636_DATE_YEAR_OFFSET	0xD4
569*1b481fc3SMaciej Żenczykowski #define	  SFF8636_DATE_YEAR_LEN			2
570*1b481fc3SMaciej Żenczykowski #define	 SFF8636_DATE_MONTH_OFFSET	0xD6
571*1b481fc3SMaciej Żenczykowski #define	  SFF8636_DATE_MONTH_LEN		2
572*1b481fc3SMaciej Żenczykowski #define	 SFF8636_DATE_DAY_OFFSET	0xD8
573*1b481fc3SMaciej Żenczykowski #define	  SFF8636_DATE_DAY_LEN			2
574*1b481fc3SMaciej Żenczykowski #define	 SFF8636_DATE_VENDOR_LOT_OFFSET 0xDA
575*1b481fc3SMaciej Żenczykowski #define	  SFF8636_DATE_VENDOR_LOT_LEN		2
576*1b481fc3SMaciej Żenczykowski 
577*1b481fc3SMaciej Żenczykowski /* Diagnostic Monitoring Type - 220 */
578*1b481fc3SMaciej Żenczykowski #define	 SFF8636_DIAG_TYPE_OFFSET	0xDC
579*1b481fc3SMaciej Żenczykowski #define	  SFF8636_RX_PWR_TYPE_MASK	0x8
580*1b481fc3SMaciej Żenczykowski #define	   SFF8636_RX_PWR_TYPE_AVG_PWR	(1 << 3)
581*1b481fc3SMaciej Żenczykowski #define	   SFF8636_RX_PWR_TYPE_OMA	(0 << 3)
582*1b481fc3SMaciej Żenczykowski #define	  SFF8636_TX_PWR_TYPE_MASK	0x4
583*1b481fc3SMaciej Żenczykowski #define	   SFF8636_TX_PWR_TYPE_AVG_PWR	(1 << 2)
584*1b481fc3SMaciej Żenczykowski 
585*1b481fc3SMaciej Żenczykowski /* Enhanced Options - 221 */
586*1b481fc3SMaciej Żenczykowski #define	 SFF8636_ENH_OPTIONS_OFFSET	0xDD
587*1b481fc3SMaciej Żenczykowski #define	  SFF8636_RATE_SELECT_EXT_SUPPORT	(1 << 3)
588*1b481fc3SMaciej Żenczykowski #define	  SFF8636_RATE_SELECT_APP_TABLE_SUPPORT	(1 << 2)
589*1b481fc3SMaciej Żenczykowski 
590*1b481fc3SMaciej Żenczykowski /* Check code - 223 */
591*1b481fc3SMaciej Żenczykowski #define	 SFF8636_CC_EXT_OFFSET		0xDF
592*1b481fc3SMaciej Żenczykowski #define	  SFF8636_CC_EXT_LEN		1
593*1b481fc3SMaciej Żenczykowski 
594*1b481fc3SMaciej Żenczykowski /*------------------------------------------------------------------------------
595*1b481fc3SMaciej Żenczykowski  *
596*1b481fc3SMaciej Żenczykowski  * Upper Memory Page 03h
597*1b481fc3SMaciej Żenczykowski  * Contains module thresholds, channel thresholds and masks,
598*1b481fc3SMaciej Żenczykowski  * and optional channel controls
599*1b481fc3SMaciej Żenczykowski  *
600*1b481fc3SMaciej Żenczykowski  * Offset - Page Num(3) * PageSize(0x80) + Page offset
601*1b481fc3SMaciej Żenczykowski  */
602*1b481fc3SMaciej Żenczykowski 
603*1b481fc3SMaciej Żenczykowski /* 3 * 128 + Lower page 00h(128) */
604*1b481fc3SMaciej Żenczykowski #define SFF8636_PAGE03H_OFFSET (128 * 4)
605*1b481fc3SMaciej Żenczykowski 
606*1b481fc3SMaciej Żenczykowski /* Module Thresholds (48 Bytes) 128-175 */
607*1b481fc3SMaciej Żenczykowski /* MSB at low address, LSB at high address */
608*1b481fc3SMaciej Żenczykowski #define	SFF8636_TEMP_HALRM	0x80
609*1b481fc3SMaciej Żenczykowski #define	SFF8636_TEMP_LALRM	0x82
610*1b481fc3SMaciej Żenczykowski #define	SFF8636_TEMP_HWARN	0x84
611*1b481fc3SMaciej Żenczykowski #define	SFF8636_TEMP_LWARN	0x86
612*1b481fc3SMaciej Żenczykowski 
613*1b481fc3SMaciej Żenczykowski #define	SFF8636_VCC_HALRM	0x90
614*1b481fc3SMaciej Żenczykowski #define	SFF8636_VCC_LALRM	0x92
615*1b481fc3SMaciej Żenczykowski #define	SFF8636_VCC_HWARN	0x94
616*1b481fc3SMaciej Żenczykowski #define	SFF8636_VCC_LWARN	0x96
617*1b481fc3SMaciej Żenczykowski 
618*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_PWR_HALRM	0xB0
619*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_PWR_LALRM	0xB2
620*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_PWR_HWARN	0xB4
621*1b481fc3SMaciej Żenczykowski #define	SFF8636_RX_PWR_LWARN	0xB6
622*1b481fc3SMaciej Żenczykowski 
623*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_BIAS_HALRM	0xB8
624*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_BIAS_LALRM	0xBA
625*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_BIAS_HWARN	0xBC
626*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_BIAS_LWARN	0xBE
627*1b481fc3SMaciej Żenczykowski 
628*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_PWR_HALRM	0xC0
629*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_PWR_LALRM	0xC2
630*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_PWR_HWARN	0xC4
631*1b481fc3SMaciej Żenczykowski #define	SFF8636_TX_PWR_LWARN	0xC6
632*1b481fc3SMaciej Żenczykowski 
633*1b481fc3SMaciej Żenczykowski #define	ETH_MODULE_SFF_8636_MAX_LEN	640
634*1b481fc3SMaciej Żenczykowski #define	ETH_MODULE_SFF_8436_MAX_LEN	640
635*1b481fc3SMaciej Żenczykowski 
636*1b481fc3SMaciej Żenczykowski #endif /* QSFP_H__ */
637