xref: /freebsd/sys/net/cmis.h (revision 963f1a5455c9f94457c1fa122d18ab9c059db834)
1*963f1a54SAndrew Gallatin /*-
2*963f1a54SAndrew Gallatin  * Copyright (c) 2026 Netflix Inc.
3*963f1a54SAndrew Gallatin  *
4*963f1a54SAndrew Gallatin  * SPDX-License-Identifier: BSD-2-Clause
5*963f1a54SAndrew Gallatin  */
6*963f1a54SAndrew Gallatin 
7*963f1a54SAndrew Gallatin /*
8*963f1a54SAndrew Gallatin  * The following set of constants are from the OIF Common Management
9*963f1a54SAndrew Gallatin  * Interface Specification (CMIS) revision 5.3, September 2024.
10*963f1a54SAndrew Gallatin  *
11*963f1a54SAndrew Gallatin  * CMIS defines a 256-byte addressable memory with lower (0-127) and
12*963f1a54SAndrew Gallatin  * upper (128-255) regions.  Lower memory is always accessible.
13*963f1a54SAndrew Gallatin  * Upper memory is paged via byte 127 (page select) and byte 126
14*963f1a54SAndrew Gallatin  * (bank select).
15*963f1a54SAndrew Gallatin  *
16*963f1a54SAndrew Gallatin  * All values are read across an I2C bus at address 0xA0.
17*963f1a54SAndrew Gallatin  */
18*963f1a54SAndrew Gallatin 
19*963f1a54SAndrew Gallatin #ifndef	_NET_CMIS_H_
20*963f1a54SAndrew Gallatin #define	_NET_CMIS_H_
21*963f1a54SAndrew Gallatin 
22*963f1a54SAndrew Gallatin #define	CMIS_BASE	0xA0	/* Base I2C address for all requests */
23*963f1a54SAndrew Gallatin 
24*963f1a54SAndrew Gallatin /* CMIS Module Types (SFF-8024 Identifier, byte 0) */
25*963f1a54SAndrew Gallatin #define	CMIS_ID_QSFP_DD	0x18	/* QSFP-DD */
26*963f1a54SAndrew Gallatin #define	CMIS_ID_QSFP8X		0x19	/* QSFP 8X (OSFP) */
27*963f1a54SAndrew Gallatin #define	CMIS_ID_SFP_DD		0x1A	/* SFP-DD */
28*963f1a54SAndrew Gallatin #define	CMIS_ID_DSFP		0x1B	/* DSFP */
29*963f1a54SAndrew Gallatin #define	CMIS_ID_QSFP_CMIS	0x1E	/* QSFP+ with CMIS */
30*963f1a54SAndrew Gallatin 
31*963f1a54SAndrew Gallatin /* Table 8-4: Lower Memory Map (bytes 0x00-0x7F) */
32*963f1a54SAndrew Gallatin enum {
33*963f1a54SAndrew Gallatin 	/* Table 8-5: Management Characteristics (bytes 0-2) */
34*963f1a54SAndrew Gallatin 	CMIS_ID			= 0,	/* SFF-8024 Identifier */
35*963f1a54SAndrew Gallatin 	CMIS_REV		= 1,	/* CMIS revision (major.minor) */
36*963f1a54SAndrew Gallatin 	CMIS_MODULE_TYPE	= 2,	/* Memory model, config options */
37*963f1a54SAndrew Gallatin 
38*963f1a54SAndrew Gallatin 	/* Table 8-6: Global Status (byte 3) */
39*963f1a54SAndrew Gallatin 	CMIS_MODULE_STATE	= 3,	/* Module state, interrupt status */
40*963f1a54SAndrew Gallatin 
41*963f1a54SAndrew Gallatin 	/* Table 8-8: Flags Summary (bytes 4-7) */
42*963f1a54SAndrew Gallatin 	CMIS_FLAGS_BANK0	= 4,	/* Flags summary, bank 0 */
43*963f1a54SAndrew Gallatin 	CMIS_FLAGS_BANK1	= 5,	/* Flags summary, bank 1 */
44*963f1a54SAndrew Gallatin 	CMIS_FLAGS_BANK2	= 6,	/* Flags summary, bank 2 */
45*963f1a54SAndrew Gallatin 	CMIS_FLAGS_BANK3	= 7,	/* Flags summary, bank 3 */
46*963f1a54SAndrew Gallatin 
47*963f1a54SAndrew Gallatin 	/* Table 8-9: Module-Level Flags (bytes 8-13) */
48*963f1a54SAndrew Gallatin 	CMIS_MOD_FLAGS_START	= 8,	/* Module firmware/state flags */
49*963f1a54SAndrew Gallatin 	CMIS_MOD_FLAGS_TEMP_VCC	= 9,	/* Temp/VCC alarm/warning flags */
50*963f1a54SAndrew Gallatin 	CMIS_MOD_FLAGS_AUX	= 10,	/* Aux monitor alarm/warning flags */
51*963f1a54SAndrew Gallatin 	CMIS_MOD_FLAGS_CUSTOM	= 11,	/* Custom/Aux3 monitor flags */
52*963f1a54SAndrew Gallatin 	CMIS_MOD_FLAGS_RSVD	= 12,	/* Reserved */
53*963f1a54SAndrew Gallatin 	CMIS_MOD_FLAGS_VENDOR	= 13,	/* Custom module-level flags */
54*963f1a54SAndrew Gallatin 
55*963f1a54SAndrew Gallatin 	/* Table 8-10: Module-Level Monitor Values (bytes 14-25) */
56*963f1a54SAndrew Gallatin 	CMIS_TEMP		= 14,	/* S16 Temperature (1/256 deg C) */
57*963f1a54SAndrew Gallatin 	CMIS_VCC		= 16,	/* U16 Supply Voltage (100 uV) */
58*963f1a54SAndrew Gallatin 	CMIS_AUX1		= 18,	/* S16 Aux1 Monitor */
59*963f1a54SAndrew Gallatin 	CMIS_AUX2		= 20,	/* S16 Aux2 Monitor */
60*963f1a54SAndrew Gallatin 	CMIS_AUX3		= 22,	/* S16 Aux3 Monitor */
61*963f1a54SAndrew Gallatin 	CMIS_CUSTOM_MON		= 24,	/* S16/U16 Custom Monitor */
62*963f1a54SAndrew Gallatin 
63*963f1a54SAndrew Gallatin 	/* Table 8-11: Module Global Controls (bytes 26-30) */
64*963f1a54SAndrew Gallatin 	CMIS_MOD_CTRL		= 26,	/* Global control bits */
65*963f1a54SAndrew Gallatin 	CMIS_MOD_CTRL2		= 27,	/* Global control bits (cont.) */
66*963f1a54SAndrew Gallatin 	CMIS_MOD_CTRL3		= 28,	/* Global control bits (cont.) */
67*963f1a54SAndrew Gallatin 	CMIS_MOD_CTRL4		= 29,	/* Global control bits (cont.) */
68*963f1a54SAndrew Gallatin 	CMIS_MOD_CTRL5		= 30,	/* Global control bits (cont.) */
69*963f1a54SAndrew Gallatin 
70*963f1a54SAndrew Gallatin 	/* Table 8-12: Module Level Masks (bytes 31-36) */
71*963f1a54SAndrew Gallatin 	CMIS_MOD_MASKS_START	= 31,	/* Module-level masks start */
72*963f1a54SAndrew Gallatin 	CMIS_MOD_MASKS_END	= 36,	/* Module-level masks end */
73*963f1a54SAndrew Gallatin 
74*963f1a54SAndrew Gallatin 	/* Table 8-13: CDB Command Status (bytes 37-38) */
75*963f1a54SAndrew Gallatin 	CMIS_CDB_STATUS1	= 37,	/* CDB instance 1 status */
76*963f1a54SAndrew Gallatin 	CMIS_CDB_STATUS2	= 38,	/* CDB instance 2 status */
77*963f1a54SAndrew Gallatin 
78*963f1a54SAndrew Gallatin 	/* Table 8-15: Module Active Firmware Version (bytes 39-40) */
79*963f1a54SAndrew Gallatin 	CMIS_FW_VER_MAJOR	= 39,	/* Active firmware major version */
80*963f1a54SAndrew Gallatin 	CMIS_FW_VER_MINOR	= 40,	/* Active firmware minor version */
81*963f1a54SAndrew Gallatin 
82*963f1a54SAndrew Gallatin 	/* Table 8-16: Fault Information (byte 41) */
83*963f1a54SAndrew Gallatin 	CMIS_FAULT_CAUSE	= 41,	/* Fault cause for ModuleFault */
84*963f1a54SAndrew Gallatin 
85*963f1a54SAndrew Gallatin 	/* Table 8-17: Miscellaneous Status (bytes 42-45) */
86*963f1a54SAndrew Gallatin 	CMIS_MISC_STATUS_START	= 42,	/* Password status, etc. */
87*963f1a54SAndrew Gallatin 	CMIS_MISC_STATUS_END	= 45,
88*963f1a54SAndrew Gallatin 
89*963f1a54SAndrew Gallatin 	/* Table 8-18: Extended Module Information (bytes 56-63) */
90*963f1a54SAndrew Gallatin 	CMIS_EXT_MOD_INFO_START	= 56,
91*963f1a54SAndrew Gallatin 	CMIS_EXT_MOD_INFO_END	= 63,
92*963f1a54SAndrew Gallatin 
93*963f1a54SAndrew Gallatin 	/* Table 8-21: Media Type (byte 85) */
94*963f1a54SAndrew Gallatin 	CMIS_MEDIA_TYPE		= 85,	/* MediaType encoding */
95*963f1a54SAndrew Gallatin 
96*963f1a54SAndrew Gallatin 	/* Table 8-23: Application Descriptors (bytes 86-117) */
97*963f1a54SAndrew Gallatin 	CMIS_APP_DESC_START	= 86,	/* First Application Descriptor */
98*963f1a54SAndrew Gallatin 	CMIS_APP_DESC1		= 86,	/* AppDescriptor 1 (AppSel 1) */
99*963f1a54SAndrew Gallatin 	CMIS_APP_DESC2		= 90,	/* AppDescriptor 2 (AppSel 2) */
100*963f1a54SAndrew Gallatin 	CMIS_APP_DESC3		= 94,	/* AppDescriptor 3 (AppSel 3) */
101*963f1a54SAndrew Gallatin 	CMIS_APP_DESC4		= 98,	/* AppDescriptor 4 (AppSel 4) */
102*963f1a54SAndrew Gallatin 	CMIS_APP_DESC5		= 102,	/* AppDescriptor 5 (AppSel 5) */
103*963f1a54SAndrew Gallatin 	CMIS_APP_DESC6		= 106,	/* AppDescriptor 6 (AppSel 6) */
104*963f1a54SAndrew Gallatin 	CMIS_APP_DESC7		= 110,	/* AppDescriptor 7 (AppSel 7) */
105*963f1a54SAndrew Gallatin 	CMIS_APP_DESC8		= 114,	/* AppDescriptor 8 (AppSel 8) */
106*963f1a54SAndrew Gallatin 
107*963f1a54SAndrew Gallatin 	/* Table 8-24: Password (bytes 118-125) */
108*963f1a54SAndrew Gallatin 	CMIS_PASSWORD_CHANGE	= 118,	/* Password change entry (4 bytes) */
109*963f1a54SAndrew Gallatin 	CMIS_PASSWORD_ENTRY	= 122,	/* Password entry area (4 bytes) */
110*963f1a54SAndrew Gallatin 
111*963f1a54SAndrew Gallatin 	/* Table 8-25: Page Mapping (bytes 126-127) */
112*963f1a54SAndrew Gallatin 	CMIS_BANK_SEL		= 126,	/* Bank select */
113*963f1a54SAndrew Gallatin 	CMIS_PAGE_SEL		= 127,	/* Page select */
114*963f1a54SAndrew Gallatin };
115*963f1a54SAndrew Gallatin 
116*963f1a54SAndrew Gallatin /*
117*963f1a54SAndrew Gallatin  * Byte 2 (CMIS_MODULE_TYPE) bit definitions (Table 8-5)
118*963f1a54SAndrew Gallatin  */
119*963f1a54SAndrew Gallatin #define	CMIS_MODULE_TYPE_FLAT	(1 << 7) /* MemoryModel: 1=flat, 0=paged */
120*963f1a54SAndrew Gallatin #define	CMIS_MODULE_TYPE_STEPPED (1 << 6) /* SteppedConfigOnly */
121*963f1a54SAndrew Gallatin #define	CMIS_MODULE_TYPE_MCISPEED_MASK	0x3C /* MciMaxSpeed, bits 5:2 */
122*963f1a54SAndrew Gallatin #define	CMIS_MODULE_TYPE_MCISPEED_SHIFT	2
123*963f1a54SAndrew Gallatin #define	CMIS_MODULE_TYPE_AUTOCOM_MASK	0x03 /* AutoCommissioning, bits 1:0 */
124*963f1a54SAndrew Gallatin 
125*963f1a54SAndrew Gallatin /* MciMaxSpeed values (I2CMCI) */
126*963f1a54SAndrew Gallatin #define	CMIS_MCISPEED_400KHZ	0	/* Up to 400 kHz */
127*963f1a54SAndrew Gallatin #define	CMIS_MCISPEED_1MHZ	1	/* Up to 1 MHz */
128*963f1a54SAndrew Gallatin #define	CMIS_MCISPEED_3_4MHZ	2	/* Up to 3.4 MHz */
129*963f1a54SAndrew Gallatin 
130*963f1a54SAndrew Gallatin /* AutoCommissioning values (when SteppedConfigOnly=1) */
131*963f1a54SAndrew Gallatin #define	CMIS_AUTOCOM_NONE	0x00	/* Neither regular nor hot */
132*963f1a54SAndrew Gallatin #define	CMIS_AUTOCOM_REGULAR	0x01	/* Only regular (ApplyDPInit) */
133*963f1a54SAndrew Gallatin #define	CMIS_AUTOCOM_HOT	0x02	/* Only hot (ApplyImmediate) */
134*963f1a54SAndrew Gallatin 
135*963f1a54SAndrew Gallatin /*
136*963f1a54SAndrew Gallatin  * Byte 3 (CMIS_MODULE_STATE) bit definitions (Table 8-6)
137*963f1a54SAndrew Gallatin  */
138*963f1a54SAndrew Gallatin #define	CMIS_MODULE_STATE_MASK	0x0E	/* ModuleState, bits 3:1 */
139*963f1a54SAndrew Gallatin #define	CMIS_MODULE_STATE_SHIFT	1
140*963f1a54SAndrew Gallatin #define	CMIS_MODULE_STATE_INTL	0x01	/* InterruptDeasserted (bit 0) */
141*963f1a54SAndrew Gallatin 
142*963f1a54SAndrew Gallatin /* Table 8-7: Module State Encodings (bits 3:1 of byte 3) */
143*963f1a54SAndrew Gallatin #define	CMIS_STATE_LOWPWR	1	/* ModuleLowPwr */
144*963f1a54SAndrew Gallatin #define	CMIS_STATE_PWRUP	2	/* ModulePwrUp */
145*963f1a54SAndrew Gallatin #define	CMIS_STATE_READY	3	/* ModuleReady */
146*963f1a54SAndrew Gallatin #define	CMIS_STATE_PWRDN	4	/* ModulePwrDn */
147*963f1a54SAndrew Gallatin #define	CMIS_STATE_FAULT	5	/* ModuleFault */
148*963f1a54SAndrew Gallatin 
149*963f1a54SAndrew Gallatin /*
150*963f1a54SAndrew Gallatin  * Bytes 4-7 (CMIS_FLAGS_BANKn) bit definitions (Table 8-8)
151*963f1a54SAndrew Gallatin  * Same layout for all 4 bank bytes.
152*963f1a54SAndrew Gallatin  */
153*963f1a54SAndrew Gallatin #define	CMIS_FLAGS_PAGE2CH	(1 << 3) /* Flags on Page 2Ch */
154*963f1a54SAndrew Gallatin #define	CMIS_FLAGS_PAGE14H	(1 << 2) /* Flags on Page 14h */
155*963f1a54SAndrew Gallatin #define	CMIS_FLAGS_PAGE12H	(1 << 1) /* Flags on Page 12h */
156*963f1a54SAndrew Gallatin #define	CMIS_FLAGS_PAGE11H	(1 << 0) /* Flags on Page 11h */
157*963f1a54SAndrew Gallatin 
158*963f1a54SAndrew Gallatin /*
159*963f1a54SAndrew Gallatin  * Byte 8 (CMIS_MOD_FLAGS_START) bit definitions (Table 8-9)
160*963f1a54SAndrew Gallatin  */
161*963f1a54SAndrew Gallatin #define	CMIS_FLAG_CDB_COMPLETE2	(1 << 7) /* CdbCmdCompleteFlag2 */
162*963f1a54SAndrew Gallatin #define	CMIS_FLAG_CDB_COMPLETE1	(1 << 6) /* CdbCmdCompleteFlag1 */
163*963f1a54SAndrew Gallatin #define	CMIS_FLAG_DP_FW_ERROR	(1 << 2) /* DataPathFirmwareErrorFlag */
164*963f1a54SAndrew Gallatin #define	CMIS_FLAG_MOD_FW_ERROR	(1 << 1) /* ModuleFirmwareErrorFlag */
165*963f1a54SAndrew Gallatin #define	CMIS_FLAG_STATE_CHANGED	(1 << 0) /* ModuleStateChangedFlag */
166*963f1a54SAndrew Gallatin 
167*963f1a54SAndrew Gallatin /*
168*963f1a54SAndrew Gallatin  * Byte 9 (CMIS_MOD_FLAGS_TEMP_VCC) bit definitions (Table 8-9)
169*963f1a54SAndrew Gallatin  */
170*963f1a54SAndrew Gallatin #define	CMIS_FLAG_VCC_LOW_WARN		(1 << 7) /* VccMonLowWarningFlag */
171*963f1a54SAndrew Gallatin #define	CMIS_FLAG_VCC_HIGH_WARN		(1 << 6) /* VccMonHighWarningFlag */
172*963f1a54SAndrew Gallatin #define	CMIS_FLAG_VCC_LOW_ALM		(1 << 5) /* VccMonLowAlarmFlag */
173*963f1a54SAndrew Gallatin #define	CMIS_FLAG_VCC_HIGH_ALM		(1 << 4) /* VccMonHighAlarmFlag */
174*963f1a54SAndrew Gallatin #define	CMIS_FLAG_TEMP_LOW_WARN		(1 << 3) /* TempMonLowWarningFlag */
175*963f1a54SAndrew Gallatin #define	CMIS_FLAG_TEMP_HIGH_WARN 	(1 << 2) /* TempMonHighWarningFlag */
176*963f1a54SAndrew Gallatin #define	CMIS_FLAG_TEMP_LOW_ALM		(1 << 1) /* TempMonLowAlarmFlag */
177*963f1a54SAndrew Gallatin #define	CMIS_FLAG_TEMP_HIGH_ALM		(1 << 0) /* TempMonHighAlarmFlag */
178*963f1a54SAndrew Gallatin 
179*963f1a54SAndrew Gallatin /*
180*963f1a54SAndrew Gallatin  * Byte 10 (CMIS_MOD_FLAGS_AUX) bit definitions (Table 8-9)
181*963f1a54SAndrew Gallatin  */
182*963f1a54SAndrew Gallatin #define	CMIS_FLAG_AUX2_LOW_WARN		(1 << 7)
183*963f1a54SAndrew Gallatin #define	CMIS_FLAG_AUX2_HIGH_WARN	(1 << 6)
184*963f1a54SAndrew Gallatin #define	CMIS_FLAG_AUX2_LOW_ALM		(1 << 5)
185*963f1a54SAndrew Gallatin #define	CMIS_FLAG_AUX2_HIGH_ALM		(1 << 4)
186*963f1a54SAndrew Gallatin #define	CMIS_FLAG_AUX1_LOW_WARN		(1 << 3)
187*963f1a54SAndrew Gallatin #define		CMIS_FLAG_AUX1_HIGH_WARN (1 << 2)
188*963f1a54SAndrew Gallatin #define	CMIS_FLAG_AUX1_LOW_ALM		(1 << 1)
189*963f1a54SAndrew Gallatin #define	CMIS_FLAG_AUX1_HIGH_ALM		(1 << 0)
190*963f1a54SAndrew Gallatin 
191*963f1a54SAndrew Gallatin /*
192*963f1a54SAndrew Gallatin  * Byte 11 (CMIS_MOD_FLAGS_CUSTOM) bit definitions (Table 8-9)
193*963f1a54SAndrew Gallatin  */
194*963f1a54SAndrew Gallatin #define	CMIS_FLAG_CUST_LOW_WARN		(1 << 7)
195*963f1a54SAndrew Gallatin #define	CMIS_FLAG_CUST_HIGH_WARN	(1 << 6)
196*963f1a54SAndrew Gallatin #define	CMIS_FLAG_CUST_LOW_ALM		(1 << 5)
197*963f1a54SAndrew Gallatin #define	CMIS_FLAG_CUST_HIGH_ALM		(1 << 4)
198*963f1a54SAndrew Gallatin #define	CMIS_FLAG_AUX3_LOW_WARN		(1 << 3)
199*963f1a54SAndrew Gallatin #define	CMIS_FLAG_AUX3_HIGH_WARN	(1 << 2)
200*963f1a54SAndrew Gallatin #define	CMIS_FLAG_AUX3_LOW_ALM		(1 << 1)
201*963f1a54SAndrew Gallatin #define	CMIS_FLAG_AUX3_HIGH_ALM		(1 << 0)
202*963f1a54SAndrew Gallatin 
203*963f1a54SAndrew Gallatin /*
204*963f1a54SAndrew Gallatin  * Byte 26 (CMIS_MOD_CTRL) bit definitions (Table 8-11)
205*963f1a54SAndrew Gallatin  */
206*963f1a54SAndrew Gallatin #define	CMIS_CTRL_BANK_BCAST		(1 << 7) /* BankBroadcastEnable */
207*963f1a54SAndrew Gallatin #define	CMIS_CTRL_LOWPWR_HW		(1 << 6) /* LowPwrAllowRequestHW */
208*963f1a54SAndrew Gallatin #define	CMIS_CTRL_SQUELCH_METHOD 	(1 << 5) /* SquelchMethodSelect */
209*963f1a54SAndrew Gallatin #define	CMIS_CTRL_LOWPWR_SW		(1 << 4) /* LowPwrRequestSW */
210*963f1a54SAndrew Gallatin #define	CMIS_CTRL_SW_RESET		(1 << 3) /* SoftwareReset */
211*963f1a54SAndrew Gallatin 
212*963f1a54SAndrew Gallatin /*
213*963f1a54SAndrew Gallatin  * Byte 27 (CMIS_MOD_CTRL2) bit definitions (Table 8-11)
214*963f1a54SAndrew Gallatin  */
215*963f1a54SAndrew Gallatin #define	CMIS_CTRL2_MCISPEED_MASK 0x0F	/* MciSpeedConfiguration, bits 3:0 */
216*963f1a54SAndrew Gallatin 
217*963f1a54SAndrew Gallatin /*
218*963f1a54SAndrew Gallatin  * Bytes 31-36 mask bits mirror bytes 8-13 flag bits (Table 8-12)
219*963f1a54SAndrew Gallatin  * Use the same bit positions as CMIS_FLAG_* above.
220*963f1a54SAndrew Gallatin  */
221*963f1a54SAndrew Gallatin 
222*963f1a54SAndrew Gallatin /*
223*963f1a54SAndrew Gallatin  * Bytes 37-38 (CDB Status) bit definitions (Table 8-14)
224*963f1a54SAndrew Gallatin  */
225*963f1a54SAndrew Gallatin #define	CMIS_CDB_BUSY		(1 << 7) /* CdbIsBusy */
226*963f1a54SAndrew Gallatin #define	CMIS_CDB_FAILED		(1 << 6) /* CdbHasFailed */
227*963f1a54SAndrew Gallatin #define	CMIS_CDB_RESULT_MASK	0x3F	/* CdbCommandResult, bits 5:0 */
228*963f1a54SAndrew Gallatin 
229*963f1a54SAndrew Gallatin /* Table 8-20: Media Type Encodings */
230*963f1a54SAndrew Gallatin #define	CMIS_MEDIA_TYPE_UNDEF	0x00	/* Undefined */
231*963f1a54SAndrew Gallatin #define	CMIS_MEDIA_TYPE_MMF	0x01	/* Optical: MMF */
232*963f1a54SAndrew Gallatin #define	CMIS_MEDIA_TYPE_SMF	0x02	/* Optical: SMF */
233*963f1a54SAndrew Gallatin #define	CMIS_MEDIA_TYPE_COPPER	0x03	/* Passive/Active Copper */
234*963f1a54SAndrew Gallatin #define	CMIS_MEDIA_TYPE_ACTIVE	0x04	/* Active Cable */
235*963f1a54SAndrew Gallatin #define	CMIS_MEDIA_TYPE_BASET	0x05	/* BASE-T */
236*963f1a54SAndrew Gallatin 
237*963f1a54SAndrew Gallatin /* Application Descriptor constants */
238*963f1a54SAndrew Gallatin #define	CMIS_APP_DESC_SIZE	4	/* Bytes per descriptor */
239*963f1a54SAndrew Gallatin #define	CMIS_MAX_APP_DESC	8	/* Max descriptors in lower memory */
240*963f1a54SAndrew Gallatin 
241*963f1a54SAndrew Gallatin /* Table 8-22: Offsets within an Application Descriptor */
242*963f1a54SAndrew Gallatin #define	CMIS_APP_HOST_IF_ID		0	/* HostInterfaceID */
243*963f1a54SAndrew Gallatin #define	CMIS_APP_MEDIA_IF_ID		1	/* MediaInterfaceID */
244*963f1a54SAndrew Gallatin #define	CMIS_APP_LANE_COUNT		2	/* Host[7:4], Media[3:0] */
245*963f1a54SAndrew Gallatin #define	CMIS_APP_HOST_ASSIGN		3	/* HostLaneAssignment */
246*963f1a54SAndrew Gallatin #define	CMIS_APP_HOST_LANES_MASK	0xF0	/* HostLaneCount, bits 7:4 */
247*963f1a54SAndrew Gallatin #define	CMIS_APP_HOST_LANES_SHIFT	4
248*963f1a54SAndrew Gallatin #define	CMIS_APP_MEDIA_LANES_MASK	0x0F	/* MediaLaneCount, bits 3:0 */
249*963f1a54SAndrew Gallatin 
250*963f1a54SAndrew Gallatin /*
251*963f1a54SAndrew Gallatin  * Table 8-26: Page 00h - Administrative Information
252*963f1a54SAndrew Gallatin  * Accessed with page=0x00, bank=0.
253*963f1a54SAndrew Gallatin  */
254*963f1a54SAndrew Gallatin enum {
255*963f1a54SAndrew Gallatin 	CMIS_P0_ID		= 128,	/* SFF-8024 Identifier copy */
256*963f1a54SAndrew Gallatin 	CMIS_P0_VENDOR_NAME	= 129,	/* Vendor name (16 bytes, ASCII) */
257*963f1a54SAndrew Gallatin 	CMIS_P0_VENDOR_OUI	= 145,	/* Vendor IEEE OUI (3 bytes) */
258*963f1a54SAndrew Gallatin 	CMIS_P0_VENDOR_PN	= 148,	/* Part number (16 bytes, ASCII) */
259*963f1a54SAndrew Gallatin 	CMIS_P0_VENDOR_REV	= 164,	/* Vendor revision (2 bytes) */
260*963f1a54SAndrew Gallatin 	CMIS_P0_VENDOR_SN	= 166,	/* Serial number (16 bytes, ASCII) */
261*963f1a54SAndrew Gallatin 	CMIS_P0_DATE_CODE	= 182,	/* Date code (8 bytes: YYMMDDLL) */
262*963f1a54SAndrew Gallatin 	CMIS_P0_CLEI		= 190,	/* CLEI code (10 bytes, ASCII) */
263*963f1a54SAndrew Gallatin 	CMIS_P0_MOD_POWER	= 200,	/* Module power class */
264*963f1a54SAndrew Gallatin 	CMIS_P0_MAX_POWER	= 201,	/* Max power (multiples of 0.25W) */
265*963f1a54SAndrew Gallatin 	CMIS_P0_CABLE_LEN	= 202,	/* Cable assembly link length */
266*963f1a54SAndrew Gallatin 	CMIS_P0_CONNECTOR	= 203,	/* Connector type (SFF-8024) */
267*963f1a54SAndrew Gallatin 	CMIS_P0_COPPER_ATTEN	= 204,	/* Copper cable attenuation (6 bytes) */
268*963f1a54SAndrew Gallatin 	CMIS_P0_MEDIA_LANE_INFO	= 210,	/* Supported near end media lanes */
269*963f1a54SAndrew Gallatin 	CMIS_P0_CABLE_ASM_INFO	= 211,	/* Far end breakout info */
270*963f1a54SAndrew Gallatin 	CMIS_P0_MEDIA_TECH	= 212,	/* Media interface technology */
271*963f1a54SAndrew Gallatin 	CMIS_P0_MCI_ADVERT	= 213,	/* MCI advertisement (2 bytes) */
272*963f1a54SAndrew Gallatin 	CMIS_P0_PAGE_CKSUM	= 222,	/* Page checksum (bytes 128-221) */
273*963f1a54SAndrew Gallatin 	CMIS_P0_CUSTOM		= 223,	/* Custom (33 bytes) */
274*963f1a54SAndrew Gallatin };
275*963f1a54SAndrew Gallatin 
276*963f1a54SAndrew Gallatin /*
277*963f1a54SAndrew Gallatin  * Table 8-82: Page 11h - Lane Status and Data Path Status
278*963f1a54SAndrew Gallatin  * Accessed with page=0x11, bank=0 (lanes 1-8).
279*963f1a54SAndrew Gallatin  */
280*963f1a54SAndrew Gallatin enum {
281*963f1a54SAndrew Gallatin 	/* Table 8-83: Data Path States (bytes 128-131) */
282*963f1a54SAndrew Gallatin 	CMIS_P11_DPSTATE_12		= 128,	/* DPState for host lanes 1-2 */
283*963f1a54SAndrew Gallatin 	CMIS_P11_DPSTATE_34		= 129,	/* DPState for host lanes 3-4 */
284*963f1a54SAndrew Gallatin 	CMIS_P11_DPSTATE_56		= 130,	/* DPState for host lanes 5-6 */
285*963f1a54SAndrew Gallatin 	CMIS_P11_DPSTATE_78		= 131,	/* DPState for host lanes 7-8 */
286*963f1a54SAndrew Gallatin 
287*963f1a54SAndrew Gallatin 	/* Table 8-85: Lane Output Status (bytes 132-133) */
288*963f1a54SAndrew Gallatin 	CMIS_P11_OUTPUT_RX		= 132,	/* OutputStatusRx per lane */
289*963f1a54SAndrew Gallatin 	CMIS_P11_OUTPUT_TX		= 133,	/* OutputStatusTx per lane */
290*963f1a54SAndrew Gallatin 
291*963f1a54SAndrew Gallatin 	/* Table 8-86: State Changed Flags (bytes 134-135) */
292*963f1a54SAndrew Gallatin 	CMIS_P11_DPSTATE_CHGD		= 134,	/* DPStateChanged flags */
293*963f1a54SAndrew Gallatin 	CMIS_P11_OUTPUT_CHGD_TX		= 135,	/* OutputStatusChangedTx flags*/
294*963f1a54SAndrew Gallatin 
295*963f1a54SAndrew Gallatin 	/* Table 8-87: Lane-Specific Tx Flags (bytes 136-141) */
296*963f1a54SAndrew Gallatin 	CMIS_P11_TX_FAULT		= 136,	/* TxFault per lane */
297*963f1a54SAndrew Gallatin 	CMIS_P11_TX_LOS			= 137,	/* TxLOS per lane */
298*963f1a54SAndrew Gallatin 	CMIS_P11_TX_CDR_LOL		= 138,	/* TxCDRLOL per lane */
299*963f1a54SAndrew Gallatin 	CMIS_P11_TX_ADPT_EQ_FAIL 	= 139,	/* TxAdaptEqFail per lane */
300*963f1a54SAndrew Gallatin 	CMIS_P11_TX_PWR_HIGH_ALM 	= 140,	/* TxPowerHighAlarm per lane */
301*963f1a54SAndrew Gallatin 	CMIS_P11_TX_PWR_LOW_ALM		= 141,	/* TxPowerLowAlarm per lane */
302*963f1a54SAndrew Gallatin 	CMIS_P11_TX_BIAS_HIGH_ALM 	= 142,	/* TxBiasHighAlarm per lane */
303*963f1a54SAndrew Gallatin 	CMIS_P11_TX_BIAS_LOW_ALM 	= 143,	/* TxBiasLowAlarm per lane */
304*963f1a54SAndrew Gallatin 	CMIS_P11_TX_PWR_HIGH_WARN 	= 144,	/* TxPowerHighWarning per lane*/
305*963f1a54SAndrew Gallatin 	CMIS_P11_TX_PWR_LOW_WARN 	= 145,	/* TxPowerLowWarning per lane */
306*963f1a54SAndrew Gallatin 	CMIS_P11_TX_BIAS_HIGH_WARN 	= 146,	/* TxBiasHighWarning per lane */
307*963f1a54SAndrew Gallatin 	CMIS_P11_TX_BIAS_LOW_WARN 	= 147,	/* TxBiasLowWarning per lane */
308*963f1a54SAndrew Gallatin 
309*963f1a54SAndrew Gallatin 	/* Table 8-88: Rx Flags (bytes 148-153) */
310*963f1a54SAndrew Gallatin 	CMIS_P11_RX_LOS			= 148,	/* RxLOS per lane */
311*963f1a54SAndrew Gallatin 	CMIS_P11_RX_CDR_LOL		= 149,	/* RxCDRLOL per lane */
312*963f1a54SAndrew Gallatin 	CMIS_P11_RX_PWR_HIGH_ALM 	= 150,	/* RxPowerHighAlarm per lane */
313*963f1a54SAndrew Gallatin 	CMIS_P11_RX_PWR_LOW_ALM		= 151,	/* RxPowerLowAlarm per lane */
314*963f1a54SAndrew Gallatin 	CMIS_P11_RX_PWR_HIGH_WARN 	= 152,	/* RxPowerHighWarning per lane*/
315*963f1a54SAndrew Gallatin 	CMIS_P11_RX_PWR_LOW_WARN 	= 153,	/* RxPowerLowWarning per lane */
316*963f1a54SAndrew Gallatin 
317*963f1a54SAndrew Gallatin 	/* Table 8-89: Lane-Specific Monitors (bytes 154-201) */
318*963f1a54SAndrew Gallatin 	CMIS_P11_TX_PWR_1		= 154,	/* U16 Tx optical pwr, lane 1 */
319*963f1a54SAndrew Gallatin 	CMIS_P11_TX_PWR_2		= 156,	/* (0.1 uW increments) */
320*963f1a54SAndrew Gallatin 	CMIS_P11_TX_PWR_3		= 158,
321*963f1a54SAndrew Gallatin 	CMIS_P11_TX_PWR_4		= 160,
322*963f1a54SAndrew Gallatin 	CMIS_P11_TX_PWR_5		= 162,
323*963f1a54SAndrew Gallatin 	CMIS_P11_TX_PWR_6		= 164,
324*963f1a54SAndrew Gallatin 	CMIS_P11_TX_PWR_7		= 166,
325*963f1a54SAndrew Gallatin 	CMIS_P11_TX_PWR_8		= 168,
326*963f1a54SAndrew Gallatin 	CMIS_P11_TX_BIAS_1		= 170,	/* U16 Tx bias current, lane 1*/
327*963f1a54SAndrew Gallatin 	CMIS_P11_TX_BIAS_2		= 172,	/* (2 uA increments) */
328*963f1a54SAndrew Gallatin 	CMIS_P11_TX_BIAS_3		= 174,
329*963f1a54SAndrew Gallatin 	CMIS_P11_TX_BIAS_4		= 176,
330*963f1a54SAndrew Gallatin 	CMIS_P11_TX_BIAS_5		= 178,
331*963f1a54SAndrew Gallatin 	CMIS_P11_TX_BIAS_6		= 180,
332*963f1a54SAndrew Gallatin 	CMIS_P11_TX_BIAS_7		= 182,
333*963f1a54SAndrew Gallatin 	CMIS_P11_TX_BIAS_8		= 184,
334*963f1a54SAndrew Gallatin 	CMIS_P11_RX_PWR_1		= 186,	/* U16 Rx input power, lane 1 */
335*963f1a54SAndrew Gallatin 	CMIS_P11_RX_PWR_2		= 188,	/* (0.1 uW increments) */
336*963f1a54SAndrew Gallatin 	CMIS_P11_RX_PWR_3		= 190,
337*963f1a54SAndrew Gallatin 	CMIS_P11_RX_PWR_4		= 192,
338*963f1a54SAndrew Gallatin 	CMIS_P11_RX_PWR_5		= 194,
339*963f1a54SAndrew Gallatin 	CMIS_P11_RX_PWR_6		= 196,
340*963f1a54SAndrew Gallatin 	CMIS_P11_RX_PWR_7		= 198,
341*963f1a54SAndrew Gallatin 	CMIS_P11_RX_PWR_8		= 200,
342*963f1a54SAndrew Gallatin 
343*963f1a54SAndrew Gallatin 	/* Table 8-90: Config Command Status (bytes 202-205) */
344*963f1a54SAndrew Gallatin 	CMIS_P11_CONFIG_STAT_12		= 202,	/* ConfigStatus lanes 1-2 */
345*963f1a54SAndrew Gallatin 	CMIS_P11_CONFIG_STAT_34		= 203,	/* ConfigStatus lanes 3-4 */
346*963f1a54SAndrew Gallatin 	CMIS_P11_CONFIG_STAT_56		= 204,	/* ConfigStatus lanes 5-6 */
347*963f1a54SAndrew Gallatin 	CMIS_P11_CONFIG_STAT_78		= 205,	/* ConfigStatus lanes 7-8 */
348*963f1a54SAndrew Gallatin 
349*963f1a54SAndrew Gallatin 	/* Table 8-93: Active Control Set (bytes 206-234) */
350*963f1a54SAndrew Gallatin 	CMIS_P11_ACS_DPCONFIG1		= 206,	/* DPConfigLane1 (AppSel[7:4])*/
351*963f1a54SAndrew Gallatin 	CMIS_P11_ACS_DPCONFIG2		= 207,	/* DPConfigLane2 */
352*963f1a54SAndrew Gallatin 	CMIS_P11_ACS_DPCONFIG3		= 208,	/* DPConfigLane3 */
353*963f1a54SAndrew Gallatin 	CMIS_P11_ACS_DPCONFIG4		= 209,	/* DPConfigLane4 */
354*963f1a54SAndrew Gallatin 	CMIS_P11_ACS_DPCONFIG5		= 210,	/* DPConfigLane5 */
355*963f1a54SAndrew Gallatin 	CMIS_P11_ACS_DPCONFIG6		= 211,	/* DPConfigLane6 */
356*963f1a54SAndrew Gallatin 	CMIS_P11_ACS_DPCONFIG7		= 212,	/* DPConfigLane7 */
357*963f1a54SAndrew Gallatin 	CMIS_P11_ACS_DPCONFIG8		= 213,	/* DPConfigLane8 */
358*963f1a54SAndrew Gallatin 	CMIS_P11_ACS_TX_START		= 214,	/* Provisioned Tx Controls */
359*963f1a54SAndrew Gallatin 	CMIS_P11_ACS_TX_END		= 225,
360*963f1a54SAndrew Gallatin 	CMIS_P11_ACS_RX_START		= 226,	/* Provisioned Rx Controls */
361*963f1a54SAndrew Gallatin 	CMIS_P11_ACS_RX_END		= 234,
362*963f1a54SAndrew Gallatin 
363*963f1a54SAndrew Gallatin 	/* Table 8-96: Data Path Conditions (bytes 235-239) */
364*963f1a54SAndrew Gallatin 	CMIS_P11_DP_COND_START		= 235,
365*963f1a54SAndrew Gallatin 	CMIS_P11_DP_COND_END		= 239,
366*963f1a54SAndrew Gallatin 
367*963f1a54SAndrew Gallatin 	/* Table 8-97: Media Lane Mapping (bytes 240-255) */
368*963f1a54SAndrew Gallatin 	CMIS_P11_MEDIA_MAP_START 	= 240,
369*963f1a54SAndrew Gallatin 	CMIS_P11_MEDIA_MAP_END		= 255,
370*963f1a54SAndrew Gallatin };
371*963f1a54SAndrew Gallatin 
372*963f1a54SAndrew Gallatin /*
373*963f1a54SAndrew Gallatin  * Per-lane bit positions for Page 11h flag/status registers.
374*963f1a54SAndrew Gallatin  * Bytes 132-153 use bit N for lane N+1 (bit 7 = lane 8, bit 0 = lane 1).
375*963f1a54SAndrew Gallatin  */
376*963f1a54SAndrew Gallatin #define	CMIS_LANE8			(1 << 7)
377*963f1a54SAndrew Gallatin #define	CMIS_LANE7			(1 << 6)
378*963f1a54SAndrew Gallatin #define	CMIS_LANE6			(1 << 5)
379*963f1a54SAndrew Gallatin #define	CMIS_LANE5			(1 << 4)
380*963f1a54SAndrew Gallatin #define	CMIS_LANE4			(1 << 3)
381*963f1a54SAndrew Gallatin #define	CMIS_LANE3			(1 << 2)
382*963f1a54SAndrew Gallatin #define	CMIS_LANE2			(1 << 1)
383*963f1a54SAndrew Gallatin #define	CMIS_LANE1			(1 << 0)
384*963f1a54SAndrew Gallatin 
385*963f1a54SAndrew Gallatin /*
386*963f1a54SAndrew Gallatin  * DPState encoding within bytes 128-131 (Table 8-83).
387*963f1a54SAndrew Gallatin  * Each byte holds two 4-bit DPState fields:
388*963f1a54SAndrew Gallatin  * bits 7:4 = even lane, bits 3:0 = odd lane.
389*963f1a54SAndrew Gallatin  */
390*963f1a54SAndrew Gallatin #define	CMIS_DPSTATE_HI_MASK		0xF0	/* Upper nibble (even lane) */
391*963f1a54SAndrew Gallatin #define	CMIS_DPSTATE_HI_SHIFT		4
392*963f1a54SAndrew Gallatin #define	CMIS_DPSTATE_LO_MASK		0x0F	/* Lower nibble (odd lane) */
393*963f1a54SAndrew Gallatin 
394*963f1a54SAndrew Gallatin /* Table 8-84: Data Path State Encoding */
395*963f1a54SAndrew Gallatin #define	CMIS_DPSTATE_DEACTIVATED	1	/* DPDeactivated (or unused) */
396*963f1a54SAndrew Gallatin #define	CMIS_DPSTATE_INIT		2	/* DPInit */
397*963f1a54SAndrew Gallatin #define	CMIS_DPSTATE_DEINIT		3	/* DPDeinit */
398*963f1a54SAndrew Gallatin #define	CMIS_DPSTATE_ACTIVATED		4	/* DPActivated */
399*963f1a54SAndrew Gallatin #define	CMIS_DPSTATE_TXTURNON		5	/* DPTxTurnOn */
400*963f1a54SAndrew Gallatin #define	CMIS_DPSTATE_TXTURNOFF		6	/* DPTxTurnOff */
401*963f1a54SAndrew Gallatin #define	CMIS_DPSTATE_INITIALIZED 	7	/* DPInitialized */
402*963f1a54SAndrew Gallatin 
403*963f1a54SAndrew Gallatin /*
404*963f1a54SAndrew Gallatin  * ConfigStatus encoding within bytes 202-205 (Table 8-90/91).
405*963f1a54SAndrew Gallatin  * Each byte holds two 4-bit status fields, same nibble layout as DPState.
406*963f1a54SAndrew Gallatin  */
407*963f1a54SAndrew Gallatin #define	CMIS_CFGSTAT_UNDEFINED		0x0	/* Undefined */
408*963f1a54SAndrew Gallatin #define	CMIS_CFGSTAT_SUCCESS		0x1	/* ConfigSuccess */
409*963f1a54SAndrew Gallatin #define	CMIS_CFGSTAT_REJECTED		0x2	/* ConfigRejected */
410*963f1a54SAndrew Gallatin #define	CMIS_CFGSTAT_REJECTEDINV 	0x3	/* ConfigRejectedInvalidAppSel*/
411*963f1a54SAndrew Gallatin #define	CMIS_CFGSTAT_INPROGRESS		0x4	/* ConfigInProgress */
412*963f1a54SAndrew Gallatin #define	CMIS_CFGSTAT_REJECTEDLANE 	0x5	/* ConfigRejectedInvalidLane */
413*963f1a54SAndrew Gallatin #define	CMIS_CFGSTAT_REJECTEDEQ		0x6	/* ConfigRejectedInvalidEq */
414*963f1a54SAndrew Gallatin 
415*963f1a54SAndrew Gallatin /* DPConfigLane (CMIS_P11_ACS_DPCONFIGn) bit definitions (Table 8-92/93) */
416*963f1a54SAndrew Gallatin #define	CMIS_ACS_APPSEL_MASK		0xF0	/* AppSel code, bits 7:4 */
417*963f1a54SAndrew Gallatin #define	CMIS_ACS_APPSEL_SHIFT		4
418*963f1a54SAndrew Gallatin #define	CMIS_ACS_DATAPATH_MASK		0x0F	/* DataPathID, bits 3:0 */
419*963f1a54SAndrew Gallatin 
420*963f1a54SAndrew Gallatin /*
421*963f1a54SAndrew Gallatin  * Page 00h bit definitions
422*963f1a54SAndrew Gallatin  */
423*963f1a54SAndrew Gallatin 
424*963f1a54SAndrew Gallatin /* Byte 200 (CMIS_P0_MOD_POWER) bit definitions (Table 8-31) */
425*963f1a54SAndrew Gallatin #define	CMIS_POWER_CLASS_MASK		0xE0	/* ModulePowerClass, bits 7:5 */
426*963f1a54SAndrew Gallatin #define	CMIS_POWER_CLASS_SHIFT		5
427*963f1a54SAndrew Gallatin #define	CMIS_POWER_CLASS_1		0	/* <=1.5W */
428*963f1a54SAndrew Gallatin #define	CMIS_POWER_CLASS_2		1	/* <=3.5W */
429*963f1a54SAndrew Gallatin #define	CMIS_POWER_CLASS_3		2	/* <=7.0W */
430*963f1a54SAndrew Gallatin #define	CMIS_POWER_CLASS_4		3	/* <=8.0W */
431*963f1a54SAndrew Gallatin #define	CMIS_POWER_CLASS_5		4	/* <=10.0W */
432*963f1a54SAndrew Gallatin #define	CMIS_POWER_CLASS_6		5	/* <=12.0W */
433*963f1a54SAndrew Gallatin #define	CMIS_POWER_CLASS_7		6	/* <=14.0W */
434*963f1a54SAndrew Gallatin #define	CMIS_POWER_CLASS_8		7	/* >14.0W, see MaxPower byte */
435*963f1a54SAndrew Gallatin #define	CMIS_POWER_MAX_IN_BYTE		(1 << 4) /* MaxPowerOverride: byte 201*/
436*963f1a54SAndrew Gallatin 
437*963f1a54SAndrew Gallatin /* Byte 202 (CMIS_P0_CABLE_LEN) bit definitions (Table 8-32) */
438*963f1a54SAndrew Gallatin #define	CMIS_CABLE_LEN_MULT_MASK	0xC0	/* LengthMultiplier, bits 7:6 */
439*963f1a54SAndrew Gallatin #define	CMIS_CABLE_LEN_MULT_SHIFT	6
440*963f1a54SAndrew Gallatin #define	CMIS_CABLE_LEN_VAL_MASK		0x3F	/* Length value, bits 5:0 */
441*963f1a54SAndrew Gallatin #define	CMIS_CABLE_LEN_MULT_01		0	/* x 0.1m */
442*963f1a54SAndrew Gallatin #define	CMIS_CABLE_LEN_MULT_1		1	/* x 1m */
443*963f1a54SAndrew Gallatin #define	CMIS_CABLE_LEN_MULT_10		2	/* x 10m */
444*963f1a54SAndrew Gallatin #define	CMIS_CABLE_LEN_MULT_100		3	/* x 100m */
445*963f1a54SAndrew Gallatin 
446*963f1a54SAndrew Gallatin /* Lane monitor stride (each monitor is U16 = 2 bytes per lane) */
447*963f1a54SAndrew Gallatin #define	CMIS_LANE_MON_SIZE		2
448*963f1a54SAndrew Gallatin #define	CMIS_MAX_LANES			8
449*963f1a54SAndrew Gallatin 
450*963f1a54SAndrew Gallatin #endif /* !_NET_CMIS_H_ */
451