92 transceiver's memory map is similar to that found in the SFF-8436
93 specification. The identification information is found in the
94 upper 128 bytes of page 0xa0, while the lower part of the page is
95 used for control, among other purposes.
96
97 The following table summarizes the above information.
98
99 Standard Speeds Size i2c pages
100 INF-8074 1 Gb/s, 10 Gb/s 128 bytes 0xa0
101 SFF-8472 1 Gb/s, 10 Gb/s, 25 GB/s 512 bytes 0xa0, 0xa2
102 SFF-8436 40 Gb/s 256 bytes 0xa0
103 SFF-8636 100 Gb/s 256 bytes 0xa0
104
105 MAC Capability Structure
106 When the device driver's mc_getcapab(9E) function entry point is called
107 with the capability requested set to MAC_CAPAB_TRANSCEIVER, then the
108 value of the capability structure is the following structure:
109
110 typedef struct mac_capab_transceiver {
111 uint_t mct_flags;
112 uint_t mct_ntransceiveres;
113 int (*mct_info)(void *driver, uint_t id,
114 mac_transceiver_info_t *infop),
115 int (*mct_read)(void *driver, uint_t id, uint_t page,
116 void *buf, size_t nbytes, off_t offset,
117 size_t *nread)
118 } mac_capab_transceiver_t;
119
120 If the device driver supports the MAC_CAPAB_TRANSCEIVER capability, it
121 should fill in this structure, based on the following rules:
122
123 mct_flags
124 The mct_flags member is used to negotiate extensions with the
125 driver. MAC will set the value of mct_flags to include all of
126 the currently known extensions. The driver should intersect this
127 list with the set that they actually support. At this time, no
128 such features are defined and the driver should set the member to
129 0.
130
131 mct_ntransceivers
132 The value of mct_ntransceivers indicates that the number of
133 transceivers present in the device. For most devices, it is
134 expected that this value will be set to one. However, some
135 devices do support multiple transceivers and PHYs that show up
136 behind a single logical MAC.
137
138 It is expected that this value will not change across the
139 lifetime of the device being attached. It is important to
140 remember that this represents the total possible number of
141 transceivers in the device, not how many are currently present
142 and powered on.
143
144 The number of transceivers will influence the id argument used in
145 the mct_info() and mct_read() entry points. The transceiver IDs
146 will start at zero and go to the value of mct_ntransceivers - 1.
147 It is up to the driver to keep the mapping between actual
148 transceivers and the transceiver identifiers consistent.
149
150 mct_info
151 The mct_info() entry point is used to set basic information about
152 the transceiver. This entry point is required. If the device
153 driver cannot implement this entry point, then it should not
154 indicate that it supports the capability.
155
156 The mct_info() entry point should fill in information about the
157 transceiver with an identifier of id. See the description above
158 of mct_ntransceivers for more information on how the IDs are
159 determined.
160
161 The driver should then proceed to fill in basic information by
162 calling the functions described in the section Information
163 Functions. After successfully calling all of the functions, the
164 driver should return 0. Othewrise, it should return the
165 appropriate error number. For a full list of error numbers, see
166 Intro(2). Common values are:
167
168 EINVAL The transceiver identifier id was
169 invalid.
170
171 ENOTSUP This instance of the devices does not
172 support a transceiver. For example, a
173 device which sometimes has copper PHYs
174 and therefore this instance does not have
175 any PHYs.
176
177 EIO An error occurred while trying to read
178 device registers. For example, an FM-
179 aware device had an error.
180
181 mct_read
182 The mct_read() function is used to read information from a
183 transceiver's i2c bus. The mct_read() entry point is an optional
184 entry point.
261 The various callback functions will be called from kernel context. These
262 functions will never be called from interrupt context.
263
264 SEE ALSO
265 Intro(2), mac(9E), mc_getcapab(9E), mac_register(9F),
266 mac_transceiver_info_set_present(9F),
267 mac_transceiver_info_set_usable(9F), mac_register(9S)
268
269 SFP (Small Formfactor Pluggable) Interface, INF-8074i, SFF Committee, May
270 12, 2001, Revision 1.0.
271
272 Diagnostic Monitoring Interface for Optical Transceivers, SFF-8472,
273 November 21, 2014, Revision 12.2.
274
275 QSFP+ 10 Gbs 4X PLUGGABLE TRANSCEIVER, SFF-8436, October 31, 2013,
276 Revision 4.8.
277
278 Management Interface for Cabled Environments, SFF-8636, January 26, 2016,
279 Revision 2.7.
280
281 illumos November 26, 2017 illumos
|
92 transceiver's memory map is similar to that found in the SFF-8436
93 specification. The identification information is found in the
94 upper 128 bytes of page 0xa0, while the lower part of the page is
95 used for control, among other purposes.
96
97 The following table summarizes the above information.
98
99 Standard Speeds Size i2c pages
100 INF-8074 1 Gb/s, 10 Gb/s 128 bytes 0xa0
101 SFF-8472 1 Gb/s, 10 Gb/s, 25 GB/s 512 bytes 0xa0, 0xa2
102 SFF-8436 40 Gb/s 256 bytes 0xa0
103 SFF-8636 100 Gb/s 256 bytes 0xa0
104
105 MAC Capability Structure
106 When the device driver's mc_getcapab(9E) function entry point is called
107 with the capability requested set to MAC_CAPAB_TRANSCEIVER, then the
108 value of the capability structure is the following structure:
109
110 typedef struct mac_capab_transceiver {
111 uint_t mct_flags;
112 uint_t mct_ntransceivers;
113 int (*mct_info)(void *driver, uint_t id,
114 mac_transceiver_info_t *infop),
115 int (*mct_read)(void *driver, uint_t id, uint_t page,
116 void *buf, size_t nbytes, off_t offset,
117 size_t *nread)
118 } mac_capab_transceiver_t;
119
120 If the device driver supports the MAC_CAPAB_TRANSCEIVER capability, it
121 should fill in this structure, based on the following rules:
122
123 mct_flags
124 The mct_flags member is used to negotiate extensions with the
125 driver. MAC will set the value of mct_flags to include all of
126 the currently known extensions. The driver should intersect this
127 list with the set that they actually support. At this time, no
128 such features are defined and the driver should set the member to
129 0.
130
131 mct_ntransceivers
132 The value of mct_ntransceivers indicates the number of
133 transceivers present in the device. For most devices, it is
134 expected that this value will be set to one. However, some
135 devices do support multiple transceivers and PHYs that show up
136 behind a single logical MAC.
137
138 It is expected that this value will not change across the
139 lifetime of the device being attached. It is important to
140 remember that this represents the total possible number of
141 transceivers in the device, not how many are currently present
142 and powered on.
143
144 The number of transceivers will influence the id argument used in
145 the mct_info() and mct_read() entry points. The transceiver IDs
146 will start at zero and go to the value of mct_ntransceivers - 1.
147 It is up to the driver to keep the mapping between actual
148 transceivers and the transceiver identifiers consistent.
149
150 mct_info
151 The mct_info() entry point is used to set basic information about
152 the transceiver. This entry point is required. If the device
153 driver cannot implement this entry point, then it should not
154 indicate that it supports the capability.
155
156 The mct_info() entry point should fill in information about the
157 transceiver with an identifier of id. See the description above
158 of mct_ntransceivers for more information on how the IDs are
159 determined.
160
161 The driver should then proceed to fill in basic information by
162 calling the functions described in the section Information
163 Functions. After successfully calling all of the functions, the
164 driver should return 0. Otherwise, it should return the
165 appropriate error number. For a full list of error numbers, see
166 Intro(2). Common values are:
167
168 EINVAL The transceiver identifier id was
169 invalid.
170
171 ENOTSUP This instance of the devices does not
172 support a transceiver. For example, a
173 device which sometimes has copper PHYs
174 and therefore this instance does not have
175 any PHYs.
176
177 EIO An error occurred while trying to read
178 device registers. For example, an FM-
179 aware device had an error.
180
181 mct_read
182 The mct_read() function is used to read information from a
183 transceiver's i2c bus. The mct_read() entry point is an optional
184 entry point.
261 The various callback functions will be called from kernel context. These
262 functions will never be called from interrupt context.
263
264 SEE ALSO
265 Intro(2), mac(9E), mc_getcapab(9E), mac_register(9F),
266 mac_transceiver_info_set_present(9F),
267 mac_transceiver_info_set_usable(9F), mac_register(9S)
268
269 SFP (Small Formfactor Pluggable) Interface, INF-8074i, SFF Committee, May
270 12, 2001, Revision 1.0.
271
272 Diagnostic Monitoring Interface for Optical Transceivers, SFF-8472,
273 November 21, 2014, Revision 12.2.
274
275 QSFP+ 10 Gbs 4X PLUGGABLE TRANSCEIVER, SFF-8436, October 31, 2013,
276 Revision 4.8.
277
278 Management Interface for Cabled Environments, SFF-8636, January 26, 2016,
279 Revision 2.7.
280
281 illumos February 15, 2020 illumos
|