xref: /titanic_50/usr/src/man/man9e/mac_capab_transceiver.9e (revision 59596c01ca1b980a016d25670874f53e64c27ec0)
1*59596c01SRobert Mustacchi.\"
2*59596c01SRobert Mustacchi.\" This file and its contents are supplied under the terms of the
3*59596c01SRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0.
4*59596c01SRobert Mustacchi.\" You may only use this file in accordance with the terms of version
5*59596c01SRobert Mustacchi.\" 1.0 of the CDDL.
6*59596c01SRobert Mustacchi.\"
7*59596c01SRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this
8*59596c01SRobert Mustacchi.\" source.  A copy of the CDDL is also available via the Internet at
9*59596c01SRobert Mustacchi.\" http://www.illumos.org/license/CDDL.
10*59596c01SRobert Mustacchi.\"
11*59596c01SRobert Mustacchi.\"
12*59596c01SRobert Mustacchi.\" Copyright (c) 2017, Joyent, Inc.
13*59596c01SRobert Mustacchi.\"
14*59596c01SRobert Mustacchi.Dd Mar 24, 2017
15*59596c01SRobert Mustacchi.Dt MAC_CAPAB_TRANSCEIVER 9E
16*59596c01SRobert Mustacchi.Os
17*59596c01SRobert Mustacchi.Sh NAME
18*59596c01SRobert Mustacchi.Nm mac_capab_transciever ,
19*59596c01SRobert Mustacchi.Nm mct_info ,
20*59596c01SRobert Mustacchi.Nm mct_read
21*59596c01SRobert Mustacchi.Nd MAC capability for networking transceivers
22*59596c01SRobert Mustacchi.Sh SYNOPSIS
23*59596c01SRobert Mustacchi.In sys/mac_provider.h
24*59596c01SRobert Mustacchi.Vt typedef struct mac_capab_transceiver mac_capab_transceiver_t;
25*59596c01SRobert Mustacchi.Ft int
26*59596c01SRobert Mustacchi.Fo "mct_info"
27*59596c01SRobert Mustacchi.Fa "void *driver"
28*59596c01SRobert Mustacchi.Fa "uint_t id"
29*59596c01SRobert Mustacchi.Fa "mac_transceiver_info_t *infop"
30*59596c01SRobert Mustacchi.Fc
31*59596c01SRobert Mustacchi.Ft int
32*59596c01SRobert Mustacchi.Fo mct_read
33*59596c01SRobert Mustacchi.Fa "void *driver"
34*59596c01SRobert Mustacchi.Fa "uint_t id"
35*59596c01SRobert Mustacchi.Fa "uint_t page"
36*59596c01SRobert Mustacchi.Fa "void *buf"
37*59596c01SRobert Mustacchi.Fa "size_t nbytes"
38*59596c01SRobert Mustacchi.Fa "off_t offset"
39*59596c01SRobert Mustacchi.Fa "size_t *nread"
40*59596c01SRobert Mustacchi.Fc
41*59596c01SRobert Mustacchi.Sh INTERFACE LEVEL
42*59596c01SRobert Mustacchi.Sy Volatile -
43*59596c01SRobert MustacchiThis interface is still evolving in illumos.
44*59596c01SRobert MustacchiAPI and ABI stability is
45*59596c01SRobert Mustacchinot guaranteed.
46*59596c01SRobert Mustacchi.Sh PARAMETERS
47*59596c01SRobert Mustacchi.Bl -tag -width Fa
48*59596c01SRobert Mustacchi.It Fa driver
49*59596c01SRobert MustacchiA pointer to the driver's private data that was passed in via the
50*59596c01SRobert Mustacchi.Sy m_pdata
51*59596c01SRobert Mustacchimember of the
52*59596c01SRobert Mustacchi.Xr mac_register 9S
53*59596c01SRobert Mustacchistructure to the
54*59596c01SRobert Mustacchi.Xr mac_register 9F
55*59596c01SRobert Mustacchifunction.
56*59596c01SRobert Mustacchi.It Fa id
57*59596c01SRobert MustacchiAn integer value indicating which transceiver is being inquired about.
58*59596c01SRobert Mustacchi.It Fa infop
59*59596c01SRobert MustacchiAn opaque structure which is used to set information about the
60*59596c01SRobert Mustacchitransceiver.
61*59596c01SRobert Mustacchi.It Fa page
62*59596c01SRobert MustacchiA value that indicates which page from the i2c bus is being requested.
63*59596c01SRobert Mustacchi.It Fa buf
64*59596c01SRobert MustacchiA pointer to which data should be written to when reading from the
65*59596c01SRobert Mustacchidevice.
66*59596c01SRobert Mustacchi.It Fa nbytes
67*59596c01SRobert MustacchiA value indicating the number of bytes being asked to read into
68*59596c01SRobert Mustacchi.Fa buf .
69*59596c01SRobert Mustacchi.It Fa offset
70*59596c01SRobert MustacchiA value indicating the offset into the page to start reading data.
71*59596c01SRobert Mustacchi.It Fa nread
72*59596c01SRobert MustacchiA value to be updated by the driver with the number of successfully read
73*59596c01SRobert Mustacchibytes.
74*59596c01SRobert Mustacchi.El
75*59596c01SRobert Mustacchi.Sh DESCRIPTION
76*59596c01SRobert MustacchiThe
77*59596c01SRobert Mustacchi.Sy MAC_CAPAB_TRANSCEIVER
78*59596c01SRobert Mustacchicapability allows for GLDv3 networking device drivers to provide
79*59596c01SRobert Mustacchiinformation to the system about their transceiver.
80*59596c01SRobert MustacchiImplementing this capability is optional.
81*59596c01SRobert MustacchiFor more information on how to handle capabilities and how to indicate
82*59596c01SRobert Mustacchithat a capability is not supported, see
83*59596c01SRobert Mustacchi.Xr mc_getcapab 9E .
84*59596c01SRobert Mustacchi.Pp
85*59596c01SRobert MustacchiThis capability should be implemented if the device in question supports
86*59596c01SRobert Mustacchia Small Form Factor (SFF) transceiver.
87*59596c01SRobert MustacchiThese are more commonly known by names such as SFP, SFP+, SFP28, QSFP+,
88*59596c01SRobert Mustacchiand QSFP28.
89*59596c01SRobert MustacchiThis interface does not apply to traditional copper Ethernet phys.
90*59596c01SRobert MustacchiThese transceivers provide standardized information over the i2c bus at
91*59596c01SRobert Mustacchispecific pages.
92*59596c01SRobert Mustacchi.Ss Supported Standards
93*59596c01SRobert Mustacchi.Bl -tag -width Sy
94*59596c01SRobert Mustacchi.It Sy INF-8074
95*59596c01SRobert MustacchiThe
96*59596c01SRobert Mustacchi.Sy INF-8084
97*59596c01SRobert Mustacchistandard was the original multiple source agreement (MSA) for SFP
98*59596c01SRobert Mustacchidevices.
99*59596c01SRobert MustacchiIt proposed the original series of management pages at i2c page 0xa0.
100*59596c01SRobert MustacchiThis page contained up to 512 bytes, however, only the first
101*59596c01SRobert Mustacchi96 bytes are standardized.
102*59596c01SRobert MustacchiBytes 97 to 127 are reserved for the vendor.
103*59596c01SRobert MustacchiThe remaining bytes are reserved by the specification.
104*59596c01SRobert MustacchiThe management page was subsequently adopted by SFP+ devices.
105*59596c01SRobert Mustacchi.It Sy SFF-8472
106*59596c01SRobert MustacchiThe
107*59596c01SRobert Mustacchi.Sy SFF-8472
108*59596c01SRobert Mustacchistandard extended the original SFP MSA.
109*59596c01SRobert MustacchiThis standard added a second i2c page at 0xa2, while maintaining the
110*59596c01SRobert Mustacchioriginal page at 0xa0.
111*59596c01SRobert MustacchiThe page at 0xa0 is now explicitly 256 bytes.
112*59596c01SRobert MustacchiThe page at 0xa2 is also 256 bytes.
113*59596c01SRobert MustacchiThis standard was also adopted for all SFP28 parts, which are commonly
114*59596c01SRobert Mustacchiused in transceivers for 25 Gb/s Ethernet.
115*59596c01SRobert Mustacchi.It Sy SFF-8436
116*59596c01SRobert MustacchiThe
117*59596c01SRobert Mustacchi.Sy SFF-8436
118*59596c01SRobert Mustacchistandard was developed for QSFP+ transceivers, which involve the
119*59596c01SRobert Mustacchibonding of 4 SFP+ links.
120*59596c01SRobert MustacchiQSFP+ is commonly used in the transceivers for 40 Gb/s Ethernet.
121*59596c01SRobert MustacchiThis standard uses i2c page 0xa0 for read-only identification purposes.
122*59596c01SRobert MustacchiThe lower half of the page is used for control, while the upper 128
123*59596c01SRobert Mustacchibytes is similar to the
124*59596c01SRobert Mustacchi.Sy INF-8084
125*59596c01SRobert Mustacchiand
126*59596c01SRobert Mustacchi.Sy SFF-8472
127*59596c01SRobert Mustacchistandards.
128*59596c01SRobert Mustacchi.It Sy SFF-8636
129*59596c01SRobert MustacchiThe
130*59596c01SRobert Mustacchi.Sy SFF-8636
131*59596c01SRobert Mustacchistandard is a common management standard which is shared between both
132*59596c01SRobert MustacchiSAS and QSFP+ 28 Gb/s transceivers.
133*59596c01SRobert MustacchiThe latter transceiver is commonly found in 100 Gb/s Ethernet.
134*59596c01SRobert MustacchiThe transceiver's memory map is similar to that found in the
135*59596c01SRobert Mustacchi.Sy SFF-8436
136*59596c01SRobert Mustacchispecification.
137*59596c01SRobert MustacchiThe identification information is found in the upper 128
138*59596c01SRobert Mustacchibytes of page 0xa0, while the lower part of the page is used for
139*59596c01SRobert Mustacchicontrol, among other purposes.
140*59596c01SRobert Mustacchi.El
141*59596c01SRobert Mustacchi.Pp
142*59596c01SRobert MustacchiThe following table summarizes the above information.
143*59596c01SRobert Mustacchi.Bl -column "Sy SFF-8636" "1 Gb/s, 10 Gb/s, 25 Gb/s" "256 bytes" "0xa0, 0xa2" -offset indent
144*59596c01SRobert Mustacchi.Em "Standard" Ta Em Speeds Ta Em Size Ta Em i2c pages
145*59596c01SRobert Mustacchi.It INF-8074 Ta 1 Gb/s, 10 Gb/s Ta 128 bytes Ta 0xa0
146*59596c01SRobert Mustacchi.It SFF-8472 Ta 1 Gb/s, 10 Gb/s, 25 GB/s Ta 512 bytes Ta 0xa0, 0xa2
147*59596c01SRobert Mustacchi.It SFF-8436 Ta 40 Gb/s Ta 256 bytes Ta 0xa0
148*59596c01SRobert Mustacchi.It SFF-8636 Ta 100 Gb/s Ta 256 bytes Ta 0xa0
149*59596c01SRobert Mustacchi.El
150*59596c01SRobert Mustacchi.Ss MAC Capability Structure
151*59596c01SRobert MustacchiWhen the device driver's
152*59596c01SRobert Mustacchi.Xr mc_getcapab 9E
153*59596c01SRobert Mustacchifunction entry point is called with the capability requested set to
154*59596c01SRobert Mustacchi.Sy MAC_CAPAB_TRANSCEIVER ,
155*59596c01SRobert Mustacchithen the value of the capability structure is the following structure:
156*59596c01SRobert Mustacchi.Bd -literal -offset indent
157*59596c01SRobert Mustacchitypedef struct mac_capab_transceiver {
158*59596c01SRobert Mustacchi	uint_t	mct_flags;
159*59596c01SRobert Mustacchi	uint_t	mct_ntransceiveres;
160*59596c01SRobert Mustacchi	int	(*mct_info)(void *driver, uint_t id,
161*59596c01SRobert Mustacchi		    mac_transceiver_info_t *infop),
162*59596c01SRobert Mustacchi	int	(*mct_read)(void *driver, uint_t id, uint_t page,
163*59596c01SRobert Mustacchi		    void *buf, size_t nbytes, off_t offset,
164*59596c01SRobert Mustacchi		    size_t *nread)
165*59596c01SRobert Mustacchi} mac_capab_transceiver_t;
166*59596c01SRobert Mustacchi.Ed
167*59596c01SRobert Mustacchi.Pp
168*59596c01SRobert MustacchiIf the device driver supports the
169*59596c01SRobert Mustacchi.Sy MAC_CAPAB_TRANSCEIVER
170*59596c01SRobert Mustacchicapability, it should fill in this structure, based on the following
171*59596c01SRobert Mustacchirules:
172*59596c01SRobert Mustacchi.Bl -tag -width Sy
173*59596c01SRobert Mustacchi.It Sy mct_flags
174*59596c01SRobert MustacchiThe
175*59596c01SRobert Mustacchi.Vt mct_flags
176*59596c01SRobert Mustacchimember is used to negotiate extensions with the driver.
177*59596c01SRobert MustacchiMAC will set the value of
178*59596c01SRobert Mustacchi.Vt mct_flags
179*59596c01SRobert Mustacchito include all of the currently known extensions.
180*59596c01SRobert MustacchiThe driver should intersect this list with the set that they actually
181*59596c01SRobert Mustacchisupport.
182*59596c01SRobert MustacchiAt this time, no such features are defined and the driver should set the
183*59596c01SRobert Mustacchimember to
184*59596c01SRobert Mustacchi.Sy 0 .
185*59596c01SRobert Mustacchi.It Sy mct_ntransceivers
186*59596c01SRobert MustacchiThe value of
187*59596c01SRobert Mustacchi.Sy mct_ntransceivers
188*59596c01SRobert Mustacchiindicates that the number of transceivers present in the device.
189*59596c01SRobert MustacchiFor most devices, it is expected that this value will be set to one.
190*59596c01SRobert MustacchiHowever, some devices do support multiple transceivers and PHYs that
191*59596c01SRobert Mustacchishow up behind a single logical MAC.
192*59596c01SRobert Mustacchi.Pp
193*59596c01SRobert MustacchiIt is expected that this value will not change across the lifetime of
194*59596c01SRobert Mustacchithe device being attached.
195*59596c01SRobert MustacchiIt is important to remember that this represents the total possible
196*59596c01SRobert Mustacchinumber of transceivers in the device, not how many are currently present
197*59596c01SRobert Mustacchiand powered on.
198*59596c01SRobert Mustacchi.Pp
199*59596c01SRobert MustacchiThe number of transceivers will influence the
200*59596c01SRobert Mustacchi.Fa id
201*59596c01SRobert Mustacchiargument used in the
202*59596c01SRobert Mustacchi.Fn mct_info
203*59596c01SRobert Mustacchiand
204*59596c01SRobert Mustacchi.Fn mct_read
205*59596c01SRobert Mustacchientry points.
206*59596c01SRobert MustacchiThe transceiver IDs will start at zero and go to the value of
207*59596c01SRobert Mustacchi.Fa mct_ntransceivers - 1 .
208*59596c01SRobert MustacchiIt is up to the driver to keep the mapping between actual transceivers
209*59596c01SRobert Mustacchiand the transceiver identifiers consistent.
210*59596c01SRobert Mustacchi.It Sy mct_info
211*59596c01SRobert MustacchiThe
212*59596c01SRobert Mustacchi.Fn mct_info
213*59596c01SRobert Mustacchientry point is used to set basic information about the transceiver.
214*59596c01SRobert MustacchiThis entry point is
215*59596c01SRobert Mustacchi.Em required .
216*59596c01SRobert MustacchiIf the device driver cannot implement this entry point, then it should
217*59596c01SRobert Mustacchinot indicate that it supports the capability.
218*59596c01SRobert Mustacchi.Pp
219*59596c01SRobert MustacchiThe
220*59596c01SRobert Mustacchi.Fn mct_info
221*59596c01SRobert Mustacchientry point should fill in information about the transceiver with an
222*59596c01SRobert Mustacchiidentifier of
223*59596c01SRobert Mustacchi.Fa id .
224*59596c01SRobert MustacchiSee the description above of
225*59596c01SRobert Mustacchi.Sy mct_ntransceivers
226*59596c01SRobert Mustacchifor more information on how the IDs are determined.
227*59596c01SRobert Mustacchi.Pp
228*59596c01SRobert MustacchiThe driver should then proceed to fill in basic information by calling
229*59596c01SRobert Mustacchithe functions described in the section
230*59596c01SRobert Mustacchi.Sx Information Functions .
231*59596c01SRobert MustacchiAfter successfully calling all of the functions, the driver should
232*59596c01SRobert Mustacchireturn
233*59596c01SRobert Mustacchi.Sy 0 .
234*59596c01SRobert MustacchiOthewrise, it should return the appropriate error number.
235*59596c01SRobert MustacchiFor a full list of error numbers, see
236*59596c01SRobert Mustacchi.Xr Intro 2 .
237*59596c01SRobert MustacchiCommon values are:
238*59596c01SRobert Mustacchi.Bl -tag -width Er -offset width
239*59596c01SRobert Mustacchi.It Er EINVAL
240*59596c01SRobert MustacchiThe transceiver identifier
241*59596c01SRobert Mustacchi.Fa id
242*59596c01SRobert Mustacchiwas invalid.
243*59596c01SRobert Mustacchi.It Er ENOTSUP
244*59596c01SRobert MustacchiThis instance of the devices does not support a transceiver.
245*59596c01SRobert MustacchiFor example, a device which sometimes has copper PHYs and therefore this
246*59596c01SRobert Mustacchiinstance does not have any PHYs.
247*59596c01SRobert Mustacchi.It Er EIO
248*59596c01SRobert MustacchiAn error occurred while trying to read device registers.
249*59596c01SRobert MustacchiFor example, an FM-aware device had an error.
250*59596c01SRobert Mustacchi.El
251*59596c01SRobert Mustacchi.It Sy mct_read
252*59596c01SRobert MustacchiThe
253*59596c01SRobert Mustacchi.Fn mct_read
254*59596c01SRobert Mustacchifunction is used to read information from a transceiver's i2c bus.
255*59596c01SRobert MustacchiThe
256*59596c01SRobert Mustacchi.Fn mct_read
257*59596c01SRobert Mustacchientry point is an
258*59596c01SRobert Mustacchi.Em optional
259*59596c01SRobert Mustacchientry point.
260*59596c01SRobert Mustacchi.Pp
261*59596c01SRobert MustacchiThe transceiver should first check the value of
262*59596c01SRobert Mustacchi.Fa id ,
263*59596c01SRobert Mustacchiwhich indicates which transceiver information is being requested.
264*59596c01SRobert MustacchiSee the description above of
265*59596c01SRobert Mustacchi.Sy mct_ntransceivers
266*59596c01SRobert Mustacchifor more information on how the IDs are determined.
267*59596c01SRobert Mustacchi.Pp
268*59596c01SRobert MustacchiThe driver should try to read up to
269*59596c01SRobert Mustacchi.Fa nbytes
270*59596c01SRobert Mustacchiof data from the i2c bus at page
271*59596c01SRobert Mustacchi.Fa page .
272*59596c01SRobert MustacchiThe driver should start reading at offset
273*59596c01SRobert Mustacchi.Fa offset .
274*59596c01SRobert MustacchiFinally, it should update the value in
275*59596c01SRobert Mustacchi.Fa nread
276*59596c01SRobert Mustacchiwith the number of bytes written to the buffer
277*59596c01SRobert Mustacchi.Fa buf .
278*59596c01SRobert Mustacchi.Pp
279*59596c01SRobert MustacchiIf for some reason the driver cannot read all of the requested bytes,
280*59596c01SRobert Mustacchithat is acceptable.
281*59596c01SRobert MustacchiInstead it should perform a short read.
282*59596c01SRobert MustacchiThis may occur because the transceiver does not allow reads at a
283*59596c01SRobert Mustacchirequested region or the region is shorter than is common for most
284*59596c01SRobert Mustacchidevices.
285*59596c01SRobert Mustacchi.Pp
286*59596c01SRobert MustacchiUpon successful completion, the driver should ensure that
287*59596c01SRobert Mustacchi.Fa nread
288*59596c01SRobert Mustacchihas been updated and then return
289*59596c01SRobert Mustacchi.Sy 0 .
290*59596c01SRobert MustacchiOtherwise, the driver should return the appropriate error number.
291*59596c01SRobert MustacchiFor
292*59596c01SRobert Mustacchia full list of error numbers, see
293*59596c01SRobert Mustacchi.Xr Intro 2 .
294*59596c01SRobert MustacchiCommon values are:
295*59596c01SRobert Mustacchi.Bl -tag -width Er -offset width
296*59596c01SRobert Mustacchi.It Er EINVAL
297*59596c01SRobert MustacchiThe value of
298*59596c01SRobert Mustacchi.Fa id
299*59596c01SRobert Mustacchirepresented an invalid transceiver identifier.
300*59596c01SRobert MustacchiThe transceiver i2c page
301*59596c01SRobert Mustacchi.Fa page
302*59596c01SRobert Mustacchiis not valid for this type of device.
303*59596c01SRobert MustacchiThe value of
304*59596c01SRobert Mustacchi.Fa offset
305*59596c01SRobert Mustacchiis beyond the range supported for this
306*59596c01SRobert Mustacchi.Fa page .
307*59596c01SRobert Mustacchi.It Er EIO
308*59596c01SRobert MustacchiAn error occurred while trying to read the device i2c pages.
309*59596c01SRobert Mustacchi.El
310*59596c01SRobert Mustacchi.El
311*59596c01SRobert Mustacchi.Ss Transceiver Information Functions
312*59596c01SRobert MustacchiThe
313*59596c01SRobert Mustacchi.Fn mct_info
314*59596c01SRobert Mustacchientry point is the primary required entry point for a device driver
315*59596c01SRobert Mustacchiwhich supports this capability.
316*59596c01SRobert MustacchiThe information structure is opaque to the device driver.
317*59596c01SRobert MustacchiInstead, a series of informational functions is
318*59596c01SRobert Mustacchiavailable to the device driver to call on the transceiver.
319*59596c01SRobert MustacchiThe device drivers should try to call and fill in as many of these as
320*59596c01SRobert Mustacchipossible.
321*59596c01SRobert MustacchiThere are two different properties that a driver can set:
322*59596c01SRobert Mustacchi.Bl -enum -offset indent
323*59596c01SRobert Mustacchi.It
324*59596c01SRobert MustacchiWhether the transceiver is present.
325*59596c01SRobert Mustacchi.It
326*59596c01SRobert MustacchiWhether the transceiver is usable.
327*59596c01SRobert Mustacchi.El
328*59596c01SRobert Mustacchi.Pp
329*59596c01SRobert MustacchiTo set whether or not the transceiver is present, the driver should call
330*59596c01SRobert Mustacchi.Xr mac_transceiver_info_set_present 9F .
331*59596c01SRobert MustacchiThis is used to indicate whether the transceiver is plugged in or not.
332*59596c01SRobert MustacchiIf the transceiver is a part of the NIC, then this function should
333*59596c01SRobert Mustacchialways be called with the value set to
334*59596c01SRobert Mustacchi.Dv B_TRUE .
335*59596c01SRobert Mustacchi.Pp
336*59596c01SRobert MustacchiFinally, the driver has the ability to provide information about whether
337*59596c01SRobert Mustacchior not the transceiver is usable or not.
338*59596c01SRobert MustacchiA transceiver may be present, but not usable, if the hardware and
339*59596c01SRobert Mustacchifirmware support a limited number of transceivers.
340*59596c01SRobert MustacchiTo set this information, the driver should call
341*59596c01SRobert Mustacchi.Xr mac_transceiver_info_set_usable 9F .
342*59596c01SRobert MustacchiIf the transceiver is not present, then the driver should not call this
343*59596c01SRobert Mustacchifunction.
344*59596c01SRobert Mustacchi.Ss Opaque Transceivers
345*59596c01SRobert MustacchiSome devices abstract the nature of the transceiver and do not allow
346*59596c01SRobert Mustacchidirect access to the transceiver.
347*59596c01SRobert MustacchiIn this case, if the device driver still has access to enough
348*59596c01SRobert Mustacchiinformation to know if the transceiver is at least present, then it
349*59596c01SRobert Mustacchishould still implement the
350*59596c01SRobert Mustacchi.Fn mct_info
351*59596c01SRobert Mustacchientry point.
352*59596c01SRobert Mustacchi.Ss Locking and Data Access
353*59596c01SRobert MustacchiCalls to get information about the transceivers may come at the same
354*59596c01SRobert Mustacchitime as general I/O requests to the device to send or receive data.
355*59596c01SRobert MustacchiThe driver should make sure that reading data from the i2c bus of the
356*59596c01SRobert Mustacchitransceiver does not interfere with the device's functionality in this
357*59596c01SRobert Mustacchiregard.
358*59596c01SRobert MustacchiDifferent locks should be used.
359*59596c01SRobert Mustacchi.Pp
360*59596c01SRobert MustacchiOn some devices, reading from the transceiver's i2c bus might cause a
361*59596c01SRobert Mustacchidisruption of service to the device.
362*59596c01SRobert MustacchiFor example, on some devices a phy reset may be required or come about
363*59596c01SRobert Mustacchias a side effect of trying to read the device.
364*59596c01SRobert MustacchiIf any kind of disruption would be caused, then the driver
365*59596c01SRobert Mustacchimust not implement the
366*59596c01SRobert Mustacchi.Ft mct_read
367*59596c01SRobert Mustacchientry point.
368*59596c01SRobert Mustacchi.Sh CONTEXT
369*59596c01SRobert MustacchiThe various callback functions will be called from
370*59596c01SRobert Mustacchi.Sy kernel
371*59596c01SRobert Mustacchicontext.
372*59596c01SRobert MustacchiThese functions will never be called from
373*59596c01SRobert Mustacchi.Sy interrupt
374*59596c01SRobert Mustacchicontext.
375*59596c01SRobert Mustacchi.Sh SEE ALSO
376*59596c01SRobert Mustacchi.Xr Intro 2 ,
377*59596c01SRobert Mustacchi.Xr mac 9E ,
378*59596c01SRobert Mustacchi.Xr mc_getcapab 9E ,
379*59596c01SRobert Mustacchi.Xr mac_register 9F ,
380*59596c01SRobert Mustacchi.Xr mac_transceiver_info_set_present 9F ,
381*59596c01SRobert Mustacchi.Xr mac_transceiver_info_set_usable 9F ,
382*59596c01SRobert Mustacchi.Xr mac_register 9S
383*59596c01SRobert Mustacchi.Rs
384*59596c01SRobert Mustacchi.%N INF-8074i
385*59596c01SRobert Mustacchi.%T SFP (Small Formfactor Pluggable) Interface
386*59596c01SRobert Mustacchi.%Q SFF Committee
387*59596c01SRobert Mustacchi.%O Revision 1.0
388*59596c01SRobert Mustacchi.%D May 12, 2001
389*59596c01SRobert Mustacchi.Re
390*59596c01SRobert Mustacchi.Rs
391*59596c01SRobert Mustacchi.%N SFF-8472
392*59596c01SRobert Mustacchi.%T Diagnostic Monitoring Interface for Optical Transceivers
393*59596c01SRobert Mustacchi.%O Revision 12.2
394*59596c01SRobert Mustacchi.%D November 21, 2014
395*59596c01SRobert Mustacchi.Re
396*59596c01SRobert Mustacchi.Rs
397*59596c01SRobert Mustacchi.%N SFF-8436
398*59596c01SRobert Mustacchi.%T QSFP+ 10 Gbs 4X PLUGGABLE TRANSCEIVER
399*59596c01SRobert Mustacchi.%O Revision 4.8
400*59596c01SRobert Mustacchi.%D October 31, 2013
401*59596c01SRobert Mustacchi.Re
402*59596c01SRobert Mustacchi.Rs
403*59596c01SRobert Mustacchi.%N SFF-8636
404*59596c01SRobert Mustacchi.%T Management Interface for Cabled Environments
405*59596c01SRobert Mustacchi.%O Revision 2.7
406*59596c01SRobert Mustacchi.%D January 26, 2016
407*59596c01SRobert Mustacchi.Re
408