@@ -1234,153 +1234,93 @@ struct sk_buff *nicvf_get_rcv_skb(struct nicvf *nic, struct cqe_rx_t *cqe_rx)
1234
1234
return skb ;
1235
1235
}
1236
1236
1237
- /* Enable interrupt */
1238
- void nicvf_enable_intr (struct nicvf * nic , int int_type , int q_idx )
1237
+ static u64 nicvf_int_type_to_mask (int int_type , int q_idx )
1239
1238
{
1240
1239
u64 reg_val ;
1241
1240
1242
- reg_val = nicvf_reg_read (nic , NIC_VF_ENA_W1S );
1243
-
1244
1241
switch (int_type ) {
1245
1242
case NICVF_INTR_CQ :
1246
- reg_val | = ((1ULL << q_idx ) << NICVF_INTR_CQ_SHIFT );
1243
+ reg_val = ((1ULL << q_idx ) << NICVF_INTR_CQ_SHIFT );
1247
1244
break ;
1248
1245
case NICVF_INTR_SQ :
1249
- reg_val | = ((1ULL << q_idx ) << NICVF_INTR_SQ_SHIFT );
1246
+ reg_val = ((1ULL << q_idx ) << NICVF_INTR_SQ_SHIFT );
1250
1247
break ;
1251
1248
case NICVF_INTR_RBDR :
1252
- reg_val | = ((1ULL << q_idx ) << NICVF_INTR_RBDR_SHIFT );
1249
+ reg_val = ((1ULL << q_idx ) << NICVF_INTR_RBDR_SHIFT );
1253
1250
break ;
1254
1251
case NICVF_INTR_PKT_DROP :
1255
- reg_val | = (1ULL << NICVF_INTR_PKT_DROP_SHIFT );
1252
+ reg_val = (1ULL << NICVF_INTR_PKT_DROP_SHIFT );
1256
1253
break ;
1257
1254
case NICVF_INTR_TCP_TIMER :
1258
- reg_val | = (1ULL << NICVF_INTR_TCP_TIMER_SHIFT );
1255
+ reg_val = (1ULL << NICVF_INTR_TCP_TIMER_SHIFT );
1259
1256
break ;
1260
1257
case NICVF_INTR_MBOX :
1261
- reg_val | = (1ULL << NICVF_INTR_MBOX_SHIFT );
1258
+ reg_val = (1ULL << NICVF_INTR_MBOX_SHIFT );
1262
1259
break ;
1263
1260
case NICVF_INTR_QS_ERR :
1264
- reg_val | = (1ULL << NICVF_INTR_QS_ERR_SHIFT );
1261
+ reg_val = (1ULL << NICVF_INTR_QS_ERR_SHIFT );
1265
1262
break ;
1266
1263
default :
1267
- netdev_err (nic -> netdev ,
1268
- "Failed to enable interrupt: unknown type\n" );
1269
- break ;
1264
+ reg_val = 0 ;
1270
1265
}
1271
1266
1272
- nicvf_reg_write (nic , NIC_VF_ENA_W1S , reg_val );
1267
+ return reg_val ;
1268
+ }
1269
+
1270
+ /* Enable interrupt */
1271
+ void nicvf_enable_intr (struct nicvf * nic , int int_type , int q_idx )
1272
+ {
1273
+ u64 mask = nicvf_int_type_to_mask (int_type , q_idx );
1274
+
1275
+ if (!mask ) {
1276
+ netdev_dbg (nic -> netdev ,
1277
+ "Failed to enable interrupt: unknown type\n" );
1278
+ return ;
1279
+ }
1280
+ nicvf_reg_write (nic , NIC_VF_ENA_W1S ,
1281
+ nicvf_reg_read (nic , NIC_VF_ENA_W1S ) | mask );
1273
1282
}
1274
1283
1275
1284
/* Disable interrupt */
1276
1285
void nicvf_disable_intr (struct nicvf * nic , int int_type , int q_idx )
1277
1286
{
1278
- u64 reg_val = 0 ;
1287
+ u64 mask = nicvf_int_type_to_mask ( int_type , q_idx ) ;
1279
1288
1280
- switch (int_type ) {
1281
- case NICVF_INTR_CQ :
1282
- reg_val |= ((1ULL << q_idx ) << NICVF_INTR_CQ_SHIFT );
1283
- break ;
1284
- case NICVF_INTR_SQ :
1285
- reg_val |= ((1ULL << q_idx ) << NICVF_INTR_SQ_SHIFT );
1286
- break ;
1287
- case NICVF_INTR_RBDR :
1288
- reg_val |= ((1ULL << q_idx ) << NICVF_INTR_RBDR_SHIFT );
1289
- break ;
1290
- case NICVF_INTR_PKT_DROP :
1291
- reg_val |= (1ULL << NICVF_INTR_PKT_DROP_SHIFT );
1292
- break ;
1293
- case NICVF_INTR_TCP_TIMER :
1294
- reg_val |= (1ULL << NICVF_INTR_TCP_TIMER_SHIFT );
1295
- break ;
1296
- case NICVF_INTR_MBOX :
1297
- reg_val |= (1ULL << NICVF_INTR_MBOX_SHIFT );
1298
- break ;
1299
- case NICVF_INTR_QS_ERR :
1300
- reg_val |= (1ULL << NICVF_INTR_QS_ERR_SHIFT );
1301
- break ;
1302
- default :
1303
- netdev_err (nic -> netdev ,
1289
+ if (!mask ) {
1290
+ netdev_dbg (nic -> netdev ,
1304
1291
"Failed to disable interrupt: unknown type\n" );
1305
- break ;
1292
+ return ;
1306
1293
}
1307
1294
1308
- nicvf_reg_write (nic , NIC_VF_ENA_W1C , reg_val );
1295
+ nicvf_reg_write (nic , NIC_VF_ENA_W1C , mask );
1309
1296
}
1310
1297
1311
1298
/* Clear interrupt */
1312
1299
void nicvf_clear_intr (struct nicvf * nic , int int_type , int q_idx )
1313
1300
{
1314
- u64 reg_val = 0 ;
1301
+ u64 mask = nicvf_int_type_to_mask ( int_type , q_idx ) ;
1315
1302
1316
- switch (int_type ) {
1317
- case NICVF_INTR_CQ :
1318
- reg_val = ((1ULL << q_idx ) << NICVF_INTR_CQ_SHIFT );
1319
- break ;
1320
- case NICVF_INTR_SQ :
1321
- reg_val = ((1ULL << q_idx ) << NICVF_INTR_SQ_SHIFT );
1322
- break ;
1323
- case NICVF_INTR_RBDR :
1324
- reg_val = ((1ULL << q_idx ) << NICVF_INTR_RBDR_SHIFT );
1325
- break ;
1326
- case NICVF_INTR_PKT_DROP :
1327
- reg_val = (1ULL << NICVF_INTR_PKT_DROP_SHIFT );
1328
- break ;
1329
- case NICVF_INTR_TCP_TIMER :
1330
- reg_val = (1ULL << NICVF_INTR_TCP_TIMER_SHIFT );
1331
- break ;
1332
- case NICVF_INTR_MBOX :
1333
- reg_val = (1ULL << NICVF_INTR_MBOX_SHIFT );
1334
- break ;
1335
- case NICVF_INTR_QS_ERR :
1336
- reg_val |= (1ULL << NICVF_INTR_QS_ERR_SHIFT );
1337
- break ;
1338
- default :
1339
- netdev_err (nic -> netdev ,
1303
+ if (!mask ) {
1304
+ netdev_dbg (nic -> netdev ,
1340
1305
"Failed to clear interrupt: unknown type\n" );
1341
- break ;
1306
+ return ;
1342
1307
}
1343
1308
1344
- nicvf_reg_write (nic , NIC_VF_INT , reg_val );
1309
+ nicvf_reg_write (nic , NIC_VF_INT , mask );
1345
1310
}
1346
1311
1347
1312
/* Check if interrupt is enabled */
1348
1313
int nicvf_is_intr_enabled (struct nicvf * nic , int int_type , int q_idx )
1349
1314
{
1350
- u64 reg_val ;
1351
- u64 mask = 0xff ;
1352
-
1353
- reg_val = nicvf_reg_read (nic , NIC_VF_ENA_W1S );
1354
-
1355
- switch (int_type ) {
1356
- case NICVF_INTR_CQ :
1357
- mask = ((1ULL << q_idx ) << NICVF_INTR_CQ_SHIFT );
1358
- break ;
1359
- case NICVF_INTR_SQ :
1360
- mask = ((1ULL << q_idx ) << NICVF_INTR_SQ_SHIFT );
1361
- break ;
1362
- case NICVF_INTR_RBDR :
1363
- mask = ((1ULL << q_idx ) << NICVF_INTR_RBDR_SHIFT );
1364
- break ;
1365
- case NICVF_INTR_PKT_DROP :
1366
- mask = NICVF_INTR_PKT_DROP_MASK ;
1367
- break ;
1368
- case NICVF_INTR_TCP_TIMER :
1369
- mask = NICVF_INTR_TCP_TIMER_MASK ;
1370
- break ;
1371
- case NICVF_INTR_MBOX :
1372
- mask = NICVF_INTR_MBOX_MASK ;
1373
- break ;
1374
- case NICVF_INTR_QS_ERR :
1375
- mask = NICVF_INTR_QS_ERR_MASK ;
1376
- break ;
1377
- default :
1378
- netdev_err (nic -> netdev ,
1315
+ u64 mask = nicvf_int_type_to_mask (int_type , q_idx );
1316
+ /* If interrupt type is unknown, we treat it disabled. */
1317
+ if (!mask ) {
1318
+ netdev_dbg (nic -> netdev ,
1379
1319
"Failed to check interrupt enable: unknown type\n" );
1380
- break ;
1320
+ return 0 ;
1381
1321
}
1382
1322
1383
- return ( reg_val & mask );
1323
+ return mask & nicvf_reg_read ( nic , NIC_VF_ENA_W1S );
1384
1324
}
1385
1325
1386
1326
void nicvf_update_rq_stats (struct nicvf * nic , int rq_idx )
0 commit comments