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