MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ntb_dev_intr_handler

Function ntb_dev_intr_handler

dpdk/drivers/raw/ntb/ntb.c:142–251  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

140}
141
142static void
143ntb_dev_intr_handler(void *param)
144{
145 struct rte_rawdev *dev = (struct rte_rawdev *)param;
146 struct ntb_hw *hw = dev->dev_private;
147 uint32_t val_h, val_l;
148 uint64_t peer_mw_size;
149 uint64_t db_bits = 0;
150 uint8_t peer_mw_cnt;
151 int i = 0;
152
153 if (hw->ntb_ops->db_read == NULL ||
154 hw->ntb_ops->db_clear == NULL ||
155 hw->ntb_ops->peer_db_set == NULL) {
156 NTB_LOG(ERR, "Doorbell is not supported.");
157 return;
158 }
159
160 db_bits = (*hw->ntb_ops->db_read)(dev);
161 if (!db_bits)
162 NTB_LOG(ERR, "No doorbells");
163
164 /* Doorbell 0 is for peer device ready. */
165 if (db_bits & 1) {
166 NTB_LOG(INFO, "DB0: Peer device is up.");
167 /* Clear received doorbell. */
168 (*hw->ntb_ops->db_clear)(dev, 1);
169
170 /**
171 * Peer dev is already up. All mw settings are already done.
172 * Skip them.
173 */
174 if (hw->peer_dev_up)
175 return;
176
177 if (hw->ntb_ops->spad_read == NULL) {
178 NTB_LOG(ERR, "Scratchpad read is not supported.");
179 return;
180 }
181
182 /* Check if mw setting on the peer is the same as local. */
183 peer_mw_cnt = (*hw->ntb_ops->spad_read)(dev, SPAD_NUM_MWS, 0);
184 if (peer_mw_cnt != hw->mw_cnt) {
185 NTB_LOG(ERR, "Both mw cnt must be the same.");
186 return;
187 }
188
189 for (i = 0; i < hw->mw_cnt; i++) {
190 val_h = (*hw->ntb_ops->spad_read)
191 (dev, SPAD_MW0_SZ_H + 2 * i, 0);
192 val_l = (*hw->ntb_ops->spad_read)
193 (dev, SPAD_MW0_SZ_L + 2 * i, 0);
194 peer_mw_size = ((uint64_t)val_h << 32) | val_l;
195 NTB_LOG(DEBUG, "Peer %u mw size: 0x%"PRIx64"", i,
196 peer_mw_size);
197 if (peer_mw_size != hw->mw_size[i]) {
198 NTB_LOG(ERR, "Mw config must be the same.");
199 return;

Callers

nothing calls this directly

Calls 2

ntb_handshake_workFunction · 0.85
ntb_link_cleanupFunction · 0.85

Tested by

no test coverage detected