xref: /illumos-gate/usr/src/man/man9e/mac_capab_transceiver.9e (revision c40d33be34d8bd92100aad1cfae8c1aaeee375d6)
145d3dd98SRobert Mustacchi.\"
245d3dd98SRobert Mustacchi.\" This file and its contents are supplied under the terms of the
345d3dd98SRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0.
445d3dd98SRobert Mustacchi.\" You may only use this file in accordance with the terms of version
545d3dd98SRobert Mustacchi.\" 1.0 of the CDDL.
645d3dd98SRobert Mustacchi.\"
745d3dd98SRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this
845d3dd98SRobert Mustacchi.\" source.  A copy of the CDDL is also available via the Internet at
945d3dd98SRobert Mustacchi.\" http://www.illumos.org/license/CDDL.
1045d3dd98SRobert Mustacchi.\"
1145d3dd98SRobert Mustacchi.\"
1245d3dd98SRobert Mustacchi.\" Copyright (c) 2017, Joyent, Inc.
1345d3dd98SRobert Mustacchi.\"
14*c40d33beSPeter Tribble.Dd February 15, 2020
1545d3dd98SRobert Mustacchi.Dt MAC_CAPAB_TRANSCEIVER 9E
1645d3dd98SRobert Mustacchi.Os
1745d3dd98SRobert Mustacchi.Sh NAME
18c5bab702SPeter Tribble.Nm mac_capab_transceiver ,
1945d3dd98SRobert Mustacchi.Nm mct_info ,
2045d3dd98SRobert Mustacchi.Nm mct_read
2145d3dd98SRobert Mustacchi.Nd MAC capability for networking transceivers
2245d3dd98SRobert Mustacchi.Sh SYNOPSIS
2345d3dd98SRobert Mustacchi.In sys/mac_provider.h
2445d3dd98SRobert Mustacchi.Vt typedef struct mac_capab_transceiver mac_capab_transceiver_t;
2545d3dd98SRobert Mustacchi.Ft int
2645d3dd98SRobert Mustacchi.Fo "mct_info"
2745d3dd98SRobert Mustacchi.Fa "void *driver"
2845d3dd98SRobert Mustacchi.Fa "uint_t id"
2945d3dd98SRobert Mustacchi.Fa "mac_transceiver_info_t *infop"
3045d3dd98SRobert Mustacchi.Fc
3145d3dd98SRobert Mustacchi.Ft int
3245d3dd98SRobert Mustacchi.Fo mct_read
3345d3dd98SRobert Mustacchi.Fa "void *driver"
3445d3dd98SRobert Mustacchi.Fa "uint_t id"
3545d3dd98SRobert Mustacchi.Fa "uint_t page"
3645d3dd98SRobert Mustacchi.Fa "void *buf"
3745d3dd98SRobert Mustacchi.Fa "size_t nbytes"
3845d3dd98SRobert Mustacchi.Fa "off_t offset"
3945d3dd98SRobert Mustacchi.Fa "size_t *nread"
4045d3dd98SRobert Mustacchi.Fc
4145d3dd98SRobert Mustacchi.Sh INTERFACE LEVEL
4245d3dd98SRobert Mustacchi.Sy Volatile -
4345d3dd98SRobert MustacchiThis interface is still evolving in illumos.
4445d3dd98SRobert MustacchiAPI and ABI stability is
4545d3dd98SRobert Mustacchinot guaranteed.
4645d3dd98SRobert Mustacchi.Sh PARAMETERS
4745d3dd98SRobert Mustacchi.Bl -tag -width Fa
4845d3dd98SRobert Mustacchi.It Fa driver
4945d3dd98SRobert MustacchiA pointer to the driver's private data that was passed in via the
5045d3dd98SRobert Mustacchi.Sy m_pdata
5145d3dd98SRobert Mustacchimember of the
5245d3dd98SRobert Mustacchi.Xr mac_register 9S
5345d3dd98SRobert Mustacchistructure to the
5445d3dd98SRobert Mustacchi.Xr mac_register 9F
5545d3dd98SRobert Mustacchifunction.
5645d3dd98SRobert Mustacchi.It Fa id
5745d3dd98SRobert MustacchiAn integer value indicating which transceiver is being inquired about.
5845d3dd98SRobert Mustacchi.It Fa infop
5945d3dd98SRobert MustacchiAn opaque structure which is used to set information about the
6045d3dd98SRobert Mustacchitransceiver.
6145d3dd98SRobert Mustacchi.It Fa page
6245d3dd98SRobert MustacchiA value that indicates which page from the i2c bus is being requested.
6345d3dd98SRobert Mustacchi.It Fa buf
6445d3dd98SRobert MustacchiA pointer to which data should be written to when reading from the
6545d3dd98SRobert Mustacchidevice.
6645d3dd98SRobert Mustacchi.It Fa nbytes
6745d3dd98SRobert MustacchiA value indicating the number of bytes being asked to read into
6845d3dd98SRobert Mustacchi.Fa buf .
6945d3dd98SRobert Mustacchi.It Fa offset
7045d3dd98SRobert MustacchiA value indicating the offset into the page to start reading data.
7145d3dd98SRobert Mustacchi.It Fa nread
7245d3dd98SRobert MustacchiA value to be updated by the driver with the number of successfully read
7345d3dd98SRobert Mustacchibytes.
7445d3dd98SRobert Mustacchi.El
7545d3dd98SRobert Mustacchi.Sh DESCRIPTION
7645d3dd98SRobert MustacchiThe
7745d3dd98SRobert Mustacchi.Sy MAC_CAPAB_TRANSCEIVER
7845d3dd98SRobert Mustacchicapability allows for GLDv3 networking device drivers to provide
7945d3dd98SRobert Mustacchiinformation to the system about their transceiver.
8045d3dd98SRobert MustacchiImplementing this capability is optional.
8145d3dd98SRobert MustacchiFor more information on how to handle capabilities and how to indicate
8245d3dd98SRobert Mustacchithat a capability is not supported, see
8345d3dd98SRobert Mustacchi.Xr mc_getcapab 9E .
8445d3dd98SRobert Mustacchi.Pp
8545d3dd98SRobert MustacchiThis capability should be implemented if the device in question supports
8645d3dd98SRobert Mustacchia Small Form Factor (SFF) transceiver.
8745d3dd98SRobert MustacchiThese are more commonly known by names such as SFP, SFP+, SFP28, QSFP+,
8845d3dd98SRobert Mustacchiand QSFP28.
8945d3dd98SRobert MustacchiThis interface does not apply to traditional copper Ethernet phys.
9045d3dd98SRobert MustacchiThese transceivers provide standardized information over the i2c bus at
9145d3dd98SRobert Mustacchispecific pages.
9245d3dd98SRobert Mustacchi.Ss Supported Standards
9345d3dd98SRobert Mustacchi.Bl -tag -width Sy
9445d3dd98SRobert Mustacchi.It Sy INF-8074
9545d3dd98SRobert MustacchiThe
9645d3dd98SRobert Mustacchi.Sy INF-8084
9745d3dd98SRobert Mustacchistandard was the original multiple source agreement (MSA) for SFP
9845d3dd98SRobert Mustacchidevices.
9945d3dd98SRobert MustacchiIt proposed the original series of management pages at i2c page 0xa0.
10045d3dd98SRobert MustacchiThis page contained up to 512 bytes, however, only the first
10145d3dd98SRobert Mustacchi96 bytes are standardized.
10245d3dd98SRobert MustacchiBytes 97 to 127 are reserved for the vendor.
10345d3dd98SRobert MustacchiThe remaining bytes are reserved by the specification.
10445d3dd98SRobert MustacchiThe management page was subsequently adopted by SFP+ devices.
10545d3dd98SRobert Mustacchi.It Sy SFF-8472
10645d3dd98SRobert MustacchiThe
10745d3dd98SRobert Mustacchi.Sy SFF-8472
10845d3dd98SRobert Mustacchistandard extended the original SFP MSA.
10945d3dd98SRobert MustacchiThis standard added a second i2c page at 0xa2, while maintaining the
11045d3dd98SRobert Mustacchioriginal page at 0xa0.
11145d3dd98SRobert MustacchiThe page at 0xa0 is now explicitly 256 bytes.
11245d3dd98SRobert MustacchiThe page at 0xa2 is also 256 bytes.
11345d3dd98SRobert MustacchiThis standard was also adopted for all SFP28 parts, which are commonly
11445d3dd98SRobert Mustacchiused in transceivers for 25 Gb/s Ethernet.
11545d3dd98SRobert Mustacchi.It Sy SFF-8436
11645d3dd98SRobert MustacchiThe
11745d3dd98SRobert Mustacchi.Sy SFF-8436
11845d3dd98SRobert Mustacchistandard was developed for QSFP+ transceivers, which involve the
11945d3dd98SRobert Mustacchibonding of 4 SFP+ links.
12045d3dd98SRobert MustacchiQSFP+ is commonly used in the transceivers for 40 Gb/s Ethernet.
12145d3dd98SRobert MustacchiThis standard uses i2c page 0xa0 for read-only identification purposes.
12245d3dd98SRobert MustacchiThe lower half of the page is used for control, while the upper 128
12345d3dd98SRobert Mustacchibytes is similar to the
12445d3dd98SRobert Mustacchi.Sy INF-8084
12545d3dd98SRobert Mustacchiand
12645d3dd98SRobert Mustacchi.Sy SFF-8472
12745d3dd98SRobert Mustacchistandards.
12845d3dd98SRobert Mustacchi.It Sy SFF-8636
12945d3dd98SRobert MustacchiThe
13045d3dd98SRobert Mustacchi.Sy SFF-8636
13145d3dd98SRobert Mustacchistandard is a common management standard which is shared between both
13245d3dd98SRobert MustacchiSAS and QSFP+ 28 Gb/s transceivers.
13345d3dd98SRobert MustacchiThe latter transceiver is commonly found in 100 Gb/s Ethernet.
13445d3dd98SRobert MustacchiThe transceiver's memory map is similar to that found in the
13545d3dd98SRobert Mustacchi.Sy SFF-8436
13645d3dd98SRobert Mustacchispecification.
13745d3dd98SRobert MustacchiThe identification information is found in the upper 128
13845d3dd98SRobert Mustacchibytes of page 0xa0, while the lower part of the page is used for
13945d3dd98SRobert Mustacchicontrol, among other purposes.
14045d3dd98SRobert Mustacchi.El
14145d3dd98SRobert Mustacchi.Pp
14245d3dd98SRobert MustacchiThe following table summarizes the above information.
14345d3dd98SRobert Mustacchi.Bl -column "Sy SFF-8636" "1 Gb/s, 10 Gb/s, 25 Gb/s" "256 bytes" "0xa0, 0xa2" -offset indent
14445d3dd98SRobert Mustacchi.Em "Standard" Ta Em Speeds Ta Em Size Ta Em i2c pages
14545d3dd98SRobert Mustacchi.It INF-8074 Ta 1 Gb/s, 10 Gb/s Ta 128 bytes Ta 0xa0
14645d3dd98SRobert Mustacchi.It SFF-8472 Ta 1 Gb/s, 10 Gb/s, 25 GB/s Ta 512 bytes Ta 0xa0, 0xa2
14745d3dd98SRobert Mustacchi.It SFF-8436 Ta 40 Gb/s Ta 256 bytes Ta 0xa0
14845d3dd98SRobert Mustacchi.It SFF-8636 Ta 100 Gb/s Ta 256 bytes Ta 0xa0
14945d3dd98SRobert Mustacchi.El
15045d3dd98SRobert Mustacchi.Ss MAC Capability Structure
15145d3dd98SRobert MustacchiWhen the device driver's
15245d3dd98SRobert Mustacchi.Xr mc_getcapab 9E
15345d3dd98SRobert Mustacchifunction entry point is called with the capability requested set to
15445d3dd98SRobert Mustacchi.Sy MAC_CAPAB_TRANSCEIVER ,
15545d3dd98SRobert Mustacchithen the value of the capability structure is the following structure:
15645d3dd98SRobert Mustacchi.Bd -literal -offset indent
15745d3dd98SRobert Mustacchitypedef struct mac_capab_transceiver {
15845d3dd98SRobert Mustacchi	uint_t	mct_flags;
159*c40d33beSPeter Tribble	uint_t	mct_ntransceivers;
16045d3dd98SRobert Mustacchi	int	(*mct_info)(void *driver, uint_t id,
16145d3dd98SRobert Mustacchi		    mac_transceiver_info_t *infop),
16245d3dd98SRobert Mustacchi	int	(*mct_read)(void *driver, uint_t id, uint_t page,
16345d3dd98SRobert Mustacchi		    void *buf, size_t nbytes, off_t offset,
16445d3dd98SRobert Mustacchi		    size_t *nread)
16545d3dd98SRobert Mustacchi} mac_capab_transceiver_t;
16645d3dd98SRobert Mustacchi.Ed
16745d3dd98SRobert Mustacchi.Pp
16845d3dd98SRobert MustacchiIf the device driver supports the
16945d3dd98SRobert Mustacchi.Sy MAC_CAPAB_TRANSCEIVER
17045d3dd98SRobert Mustacchicapability, it should fill in this structure, based on the following
17145d3dd98SRobert Mustacchirules:
17245d3dd98SRobert Mustacchi.Bl -tag -width Sy
17345d3dd98SRobert Mustacchi.It Sy mct_flags
17445d3dd98SRobert MustacchiThe
17545d3dd98SRobert Mustacchi.Vt mct_flags
17645d3dd98SRobert Mustacchimember is used to negotiate extensions with the driver.
17745d3dd98SRobert MustacchiMAC will set the value of
17845d3dd98SRobert Mustacchi.Vt mct_flags
17945d3dd98SRobert Mustacchito include all of the currently known extensions.
18045d3dd98SRobert MustacchiThe driver should intersect this list with the set that they actually
18145d3dd98SRobert Mustacchisupport.
18245d3dd98SRobert MustacchiAt this time, no such features are defined and the driver should set the
18345d3dd98SRobert Mustacchimember to
18445d3dd98SRobert Mustacchi.Sy 0 .
18545d3dd98SRobert Mustacchi.It Sy mct_ntransceivers
18645d3dd98SRobert MustacchiThe value of
18745d3dd98SRobert Mustacchi.Sy mct_ntransceivers
188*c40d33beSPeter Tribbleindicates the number of transceivers present in the device.
18945d3dd98SRobert MustacchiFor most devices, it is expected that this value will be set to one.
19045d3dd98SRobert MustacchiHowever, some devices do support multiple transceivers and PHYs that
19145d3dd98SRobert Mustacchishow up behind a single logical MAC.
19245d3dd98SRobert Mustacchi.Pp
19345d3dd98SRobert MustacchiIt is expected that this value will not change across the lifetime of
19445d3dd98SRobert Mustacchithe device being attached.
19545d3dd98SRobert MustacchiIt is important to remember that this represents the total possible
19645d3dd98SRobert Mustacchinumber of transceivers in the device, not how many are currently present
19745d3dd98SRobert Mustacchiand powered on.
19845d3dd98SRobert Mustacchi.Pp
19945d3dd98SRobert MustacchiThe number of transceivers will influence the
20045d3dd98SRobert Mustacchi.Fa id
20145d3dd98SRobert Mustacchiargument used in the
20245d3dd98SRobert Mustacchi.Fn mct_info
20345d3dd98SRobert Mustacchiand
20445d3dd98SRobert Mustacchi.Fn mct_read
20545d3dd98SRobert Mustacchientry points.
20645d3dd98SRobert MustacchiThe transceiver IDs will start at zero and go to the value of
20745d3dd98SRobert Mustacchi.Fa mct_ntransceivers - 1 .
20845d3dd98SRobert MustacchiIt is up to the driver to keep the mapping between actual transceivers
20945d3dd98SRobert Mustacchiand the transceiver identifiers consistent.
21045d3dd98SRobert Mustacchi.It Sy mct_info
21145d3dd98SRobert MustacchiThe
21245d3dd98SRobert Mustacchi.Fn mct_info
21345d3dd98SRobert Mustacchientry point is used to set basic information about the transceiver.
21445d3dd98SRobert MustacchiThis entry point is
21545d3dd98SRobert Mustacchi.Em required .
21645d3dd98SRobert MustacchiIf the device driver cannot implement this entry point, then it should
21745d3dd98SRobert Mustacchinot indicate that it supports the capability.
21845d3dd98SRobert Mustacchi.Pp
21945d3dd98SRobert MustacchiThe
22045d3dd98SRobert Mustacchi.Fn mct_info
22145d3dd98SRobert Mustacchientry point should fill in information about the transceiver with an
22245d3dd98SRobert Mustacchiidentifier of
22345d3dd98SRobert Mustacchi.Fa id .
22445d3dd98SRobert MustacchiSee the description above of
22545d3dd98SRobert Mustacchi.Sy mct_ntransceivers
22645d3dd98SRobert Mustacchifor more information on how the IDs are determined.
22745d3dd98SRobert Mustacchi.Pp
22845d3dd98SRobert MustacchiThe driver should then proceed to fill in basic information by calling
22945d3dd98SRobert Mustacchithe functions described in the section
23045d3dd98SRobert Mustacchi.Sx Information Functions .
23145d3dd98SRobert MustacchiAfter successfully calling all of the functions, the driver should
23245d3dd98SRobert Mustacchireturn
23345d3dd98SRobert Mustacchi.Sy 0 .
234*c40d33beSPeter TribbleOtherwise, it should return the appropriate error number.
23545d3dd98SRobert MustacchiFor a full list of error numbers, see
23645d3dd98SRobert Mustacchi.Xr Intro 2 .
23745d3dd98SRobert MustacchiCommon values are:
23845d3dd98SRobert Mustacchi.Bl -tag -width Er -offset width
23945d3dd98SRobert Mustacchi.It Er EINVAL
24045d3dd98SRobert MustacchiThe transceiver identifier
24145d3dd98SRobert Mustacchi.Fa id
24245d3dd98SRobert Mustacchiwas invalid.
24345d3dd98SRobert Mustacchi.It Er ENOTSUP
24445d3dd98SRobert MustacchiThis instance of the devices does not support a transceiver.
24545d3dd98SRobert MustacchiFor example, a device which sometimes has copper PHYs and therefore this
24645d3dd98SRobert Mustacchiinstance does not have any PHYs.
24745d3dd98SRobert Mustacchi.It Er EIO
24845d3dd98SRobert MustacchiAn error occurred while trying to read device registers.
24945d3dd98SRobert MustacchiFor example, an FM-aware device had an error.
25045d3dd98SRobert Mustacchi.El
25145d3dd98SRobert Mustacchi.It Sy mct_read
25245d3dd98SRobert MustacchiThe
25345d3dd98SRobert Mustacchi.Fn mct_read
25445d3dd98SRobert Mustacchifunction is used to read information from a transceiver's i2c bus.
25545d3dd98SRobert MustacchiThe
25645d3dd98SRobert Mustacchi.Fn mct_read
25745d3dd98SRobert Mustacchientry point is an
25845d3dd98SRobert Mustacchi.Em optional
25945d3dd98SRobert Mustacchientry point.
26045d3dd98SRobert Mustacchi.Pp
26145d3dd98SRobert MustacchiThe transceiver should first check the value of
26245d3dd98SRobert Mustacchi.Fa id ,
26345d3dd98SRobert Mustacchiwhich indicates which transceiver information is being requested.
26445d3dd98SRobert MustacchiSee the description above of
26545d3dd98SRobert Mustacchi.Sy mct_ntransceivers
26645d3dd98SRobert Mustacchifor more information on how the IDs are determined.
26745d3dd98SRobert Mustacchi.Pp
26845d3dd98SRobert MustacchiThe driver should try to read up to
26945d3dd98SRobert Mustacchi.Fa nbytes
27045d3dd98SRobert Mustacchiof data from the i2c bus at page
27145d3dd98SRobert Mustacchi.Fa page .
27245d3dd98SRobert MustacchiThe driver should start reading at offset
27345d3dd98SRobert Mustacchi.Fa offset .
27445d3dd98SRobert MustacchiFinally, it should update the value in
27545d3dd98SRobert Mustacchi.Fa nread
27645d3dd98SRobert Mustacchiwith the number of bytes written to the buffer
27745d3dd98SRobert Mustacchi.Fa buf .
27845d3dd98SRobert Mustacchi.Pp
27945d3dd98SRobert MustacchiIf for some reason the driver cannot read all of the requested bytes,
28045d3dd98SRobert Mustacchithat is acceptable.
28145d3dd98SRobert MustacchiInstead it should perform a short read.
28245d3dd98SRobert MustacchiThis may occur because the transceiver does not allow reads at a
28345d3dd98SRobert Mustacchirequested region or the region is shorter than is common for most
28445d3dd98SRobert Mustacchidevices.
28545d3dd98SRobert Mustacchi.Pp
28645d3dd98SRobert MustacchiUpon successful completion, the driver should ensure that
28745d3dd98SRobert Mustacchi.Fa nread
28845d3dd98SRobert Mustacchihas been updated and then return
28945d3dd98SRobert Mustacchi.Sy 0 .
29045d3dd98SRobert MustacchiOtherwise, the driver should return the appropriate error number.
29145d3dd98SRobert MustacchiFor
29245d3dd98SRobert Mustacchia full list of error numbers, see
29345d3dd98SRobert Mustacchi.Xr Intro 2 .
29445d3dd98SRobert MustacchiCommon values are:
29545d3dd98SRobert Mustacchi.Bl -tag -width Er -offset width
29645d3dd98SRobert Mustacchi.It Er EINVAL
29745d3dd98SRobert MustacchiThe value of
29845d3dd98SRobert Mustacchi.Fa id
29945d3dd98SRobert Mustacchirepresented an invalid transceiver identifier.
30045d3dd98SRobert MustacchiThe transceiver i2c page
30145d3dd98SRobert Mustacchi.Fa page
30245d3dd98SRobert Mustacchiis not valid for this type of device.
30345d3dd98SRobert MustacchiThe value of
30445d3dd98SRobert Mustacchi.Fa offset
30545d3dd98SRobert Mustacchiis beyond the range supported for this
30645d3dd98SRobert Mustacchi.Fa page .
30745d3dd98SRobert Mustacchi.It Er EIO
30845d3dd98SRobert MustacchiAn error occurred while trying to read the device i2c pages.
30945d3dd98SRobert Mustacchi.El
31045d3dd98SRobert Mustacchi.El
31145d3dd98SRobert Mustacchi.Ss Transceiver Information Functions
31245d3dd98SRobert MustacchiThe
31345d3dd98SRobert Mustacchi.Fn mct_info
31445d3dd98SRobert Mustacchientry point is the primary required entry point for a device driver
31545d3dd98SRobert Mustacchiwhich supports this capability.
31645d3dd98SRobert MustacchiThe information structure is opaque to the device driver.
31745d3dd98SRobert MustacchiInstead, a series of informational functions is
31845d3dd98SRobert Mustacchiavailable to the device driver to call on the transceiver.
31945d3dd98SRobert MustacchiThe device drivers should try to call and fill in as many of these as
32045d3dd98SRobert Mustacchipossible.
32145d3dd98SRobert MustacchiThere are two different properties that a driver can set:
32245d3dd98SRobert Mustacchi.Bl -enum -offset indent
32345d3dd98SRobert Mustacchi.It
32445d3dd98SRobert MustacchiWhether the transceiver is present.
32545d3dd98SRobert Mustacchi.It
32645d3dd98SRobert MustacchiWhether the transceiver is usable.
32745d3dd98SRobert Mustacchi.El
32845d3dd98SRobert Mustacchi.Pp
32945d3dd98SRobert MustacchiTo set whether or not the transceiver is present, the driver should call
33045d3dd98SRobert Mustacchi.Xr mac_transceiver_info_set_present 9F .
33145d3dd98SRobert MustacchiThis is used to indicate whether the transceiver is plugged in or not.
33245d3dd98SRobert MustacchiIf the transceiver is a part of the NIC, then this function should
33345d3dd98SRobert Mustacchialways be called with the value set to
33445d3dd98SRobert Mustacchi.Dv B_TRUE .
33545d3dd98SRobert Mustacchi.Pp
33645d3dd98SRobert MustacchiFinally, the driver has the ability to provide information about whether
33745d3dd98SRobert Mustacchior not the transceiver is usable or not.
33845d3dd98SRobert MustacchiA transceiver may be present, but not usable, if the hardware and
33945d3dd98SRobert Mustacchifirmware support a limited number of transceivers.
34045d3dd98SRobert MustacchiTo set this information, the driver should call
34145d3dd98SRobert Mustacchi.Xr mac_transceiver_info_set_usable 9F .
34245d3dd98SRobert MustacchiIf the transceiver is not present, then the driver should not call this
34345d3dd98SRobert Mustacchifunction.
34445d3dd98SRobert Mustacchi.Ss Opaque Transceivers
34545d3dd98SRobert MustacchiSome devices abstract the nature of the transceiver and do not allow
34645d3dd98SRobert Mustacchidirect access to the transceiver.
34745d3dd98SRobert MustacchiIn this case, if the device driver still has access to enough
34845d3dd98SRobert Mustacchiinformation to know if the transceiver is at least present, then it
34945d3dd98SRobert Mustacchishould still implement the
35045d3dd98SRobert Mustacchi.Fn mct_info
35145d3dd98SRobert Mustacchientry point.
35245d3dd98SRobert Mustacchi.Ss Locking and Data Access
35345d3dd98SRobert MustacchiCalls to get information about the transceivers may come at the same
35445d3dd98SRobert Mustacchitime as general I/O requests to the device to send or receive data.
35545d3dd98SRobert MustacchiThe driver should make sure that reading data from the i2c bus of the
35645d3dd98SRobert Mustacchitransceiver does not interfere with the device's functionality in this
35745d3dd98SRobert Mustacchiregard.
35845d3dd98SRobert MustacchiDifferent locks should be used.
35945d3dd98SRobert Mustacchi.Pp
36045d3dd98SRobert MustacchiOn some devices, reading from the transceiver's i2c bus might cause a
36145d3dd98SRobert Mustacchidisruption of service to the device.
36245d3dd98SRobert MustacchiFor example, on some devices a phy reset may be required or come about
36345d3dd98SRobert Mustacchias a side effect of trying to read the device.
36445d3dd98SRobert MustacchiIf any kind of disruption would be caused, then the driver
36545d3dd98SRobert Mustacchimust not implement the
36645d3dd98SRobert Mustacchi.Ft mct_read
36745d3dd98SRobert Mustacchientry point.
36845d3dd98SRobert Mustacchi.Sh CONTEXT
36945d3dd98SRobert MustacchiThe various callback functions will be called from
37045d3dd98SRobert Mustacchi.Sy kernel
37145d3dd98SRobert Mustacchicontext.
37245d3dd98SRobert MustacchiThese functions will never be called from
37345d3dd98SRobert Mustacchi.Sy interrupt
37445d3dd98SRobert Mustacchicontext.
37545d3dd98SRobert Mustacchi.Sh SEE ALSO
37645d3dd98SRobert Mustacchi.Xr Intro 2 ,
37745d3dd98SRobert Mustacchi.Xr mac 9E ,
37845d3dd98SRobert Mustacchi.Xr mc_getcapab 9E ,
37945d3dd98SRobert Mustacchi.Xr mac_register 9F ,
38045d3dd98SRobert Mustacchi.Xr mac_transceiver_info_set_present 9F ,
38145d3dd98SRobert Mustacchi.Xr mac_transceiver_info_set_usable 9F ,
38245d3dd98SRobert Mustacchi.Xr mac_register 9S
38345d3dd98SRobert Mustacchi.Rs
38445d3dd98SRobert Mustacchi.%N INF-8074i
38545d3dd98SRobert Mustacchi.%T SFP (Small Formfactor Pluggable) Interface
38645d3dd98SRobert Mustacchi.%Q SFF Committee
38745d3dd98SRobert Mustacchi.%O Revision 1.0
38845d3dd98SRobert Mustacchi.%D May 12, 2001
38945d3dd98SRobert Mustacchi.Re
39045d3dd98SRobert Mustacchi.Rs
39145d3dd98SRobert Mustacchi.%N SFF-8472
39245d3dd98SRobert Mustacchi.%T Diagnostic Monitoring Interface for Optical Transceivers
39345d3dd98SRobert Mustacchi.%O Revision 12.2
39445d3dd98SRobert Mustacchi.%D November 21, 2014
39545d3dd98SRobert Mustacchi.Re
39645d3dd98SRobert Mustacchi.Rs
39745d3dd98SRobert Mustacchi.%N SFF-8436
39845d3dd98SRobert Mustacchi.%T QSFP+ 10 Gbs 4X PLUGGABLE TRANSCEIVER
39945d3dd98SRobert Mustacchi.%O Revision 4.8
40045d3dd98SRobert Mustacchi.%D October 31, 2013
40145d3dd98SRobert Mustacchi.Re
40245d3dd98SRobert Mustacchi.Rs
40345d3dd98SRobert Mustacchi.%N SFF-8636
40445d3dd98SRobert Mustacchi.%T Management Interface for Cabled Environments
40545d3dd98SRobert Mustacchi.%O Revision 2.7
40645d3dd98SRobert Mustacchi.%D January 26, 2016
40745d3dd98SRobert Mustacchi.Re
408