aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb-core
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2013-01-07 13:41:35 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-01-23 16:09:52 -0500
commit7cd4ece58f9b94372687de820c22cb2eae4a623e (patch)
tree944e56d79af8d05c37a39376c7a19cf17e3def33 /drivers/media/dvb-core
parent9569793a79836320c33d400c686dcb78f886bdad (diff)
[media] dvb: the core logic to handle the DVBv5 QoS properties
Add the logic to poll, reset counters and report the QoS stats to the end user. The idea is that the core will periodically poll the frontend for the stats. The frontend may return -EBUSY, if the previous collect didn't finish, or it may fill the cached data. The value returned to the end user is always the cached data. Reviewed-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/dvb-core')
-rw-r--r--drivers/media/dvb-core/dvb_frontend.c35
-rw-r--r--drivers/media/dvb-core/dvb_frontend.h10
2 files changed, 45 insertions, 0 deletions
diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c
index dd35fa972067..0c6f936ffac8 100644
--- a/drivers/media/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb-core/dvb_frontend.c
@@ -1053,6 +1053,16 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = {
1053 _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_B, 0, 0), 1053 _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_B, 0, 0),
1054 _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_C, 0, 0), 1054 _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_C, 0, 0),
1055 _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_D, 0, 0), 1055 _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_D, 0, 0),
1056
1057 /* Statistics API */
1058 _DTV_CMD(DTV_STAT_SIGNAL_STRENGTH, 0, 0),
1059 _DTV_CMD(DTV_STAT_CNR, 0, 0),
1060 _DTV_CMD(DTV_STAT_PRE_ERROR_BIT_COUNT, 0, 0),
1061 _DTV_CMD(DTV_STAT_PRE_TOTAL_BIT_COUNT, 0, 0),
1062 _DTV_CMD(DTV_STAT_POST_ERROR_BIT_COUNT, 0, 0),
1063 _DTV_CMD(DTV_STAT_POST_TOTAL_BIT_COUNT, 0, 0),
1064 _DTV_CMD(DTV_STAT_ERROR_BLOCK_COUNT, 0, 0),
1065 _DTV_CMD(DTV_STAT_TOTAL_BLOCK_COUNT, 0, 0),
1056}; 1066};
1057 1067
1058static void dtv_property_dump(struct dvb_frontend *fe, struct dtv_property *tvp) 1068static void dtv_property_dump(struct dvb_frontend *fe, struct dtv_property *tvp)
@@ -1443,6 +1453,31 @@ static int dtv_property_process_get(struct dvb_frontend *fe,
1443 tvp->u.data = c->lna; 1453 tvp->u.data = c->lna;
1444 break; 1454 break;
1445 1455
1456 /* Fill quality measures */
1457 case DTV_STAT_SIGNAL_STRENGTH:
1458 tvp->u.st = c->strength;
1459 break;
1460 case DTV_STAT_CNR:
1461 tvp->u.st = c->cnr;
1462 break;
1463 case DTV_STAT_PRE_ERROR_BIT_COUNT:
1464 tvp->u.st = c->pre_bit_error;
1465 break;
1466 case DTV_STAT_PRE_TOTAL_BIT_COUNT:
1467 tvp->u.st = c->pre_bit_count;
1468 break;
1469 case DTV_STAT_POST_ERROR_BIT_COUNT:
1470 tvp->u.st = c->post_bit_error;
1471 break;
1472 case DTV_STAT_POST_TOTAL_BIT_COUNT:
1473 tvp->u.st = c->post_bit_count;
1474 break;
1475 case DTV_STAT_ERROR_BLOCK_COUNT:
1476 tvp->u.st = c->block_error;
1477 break;
1478 case DTV_STAT_TOTAL_BLOCK_COUNT:
1479 tvp->u.st = c->block_count;
1480 break;
1446 default: 1481 default:
1447 return -EINVAL; 1482 return -EINVAL;
1448 } 1483 }
diff --git a/drivers/media/dvb-core/dvb_frontend.h b/drivers/media/dvb-core/dvb_frontend.h
index 97112cd88a17..b34922a08156 100644
--- a/drivers/media/dvb-core/dvb_frontend.h
+++ b/drivers/media/dvb-core/dvb_frontend.h
@@ -393,6 +393,16 @@ struct dtv_frontend_properties {
393 u8 atscmh_sccc_code_mode_d; 393 u8 atscmh_sccc_code_mode_d;
394 394
395 u32 lna; 395 u32 lna;
396
397 /* statistics data */
398 struct dtv_fe_stats strength;
399 struct dtv_fe_stats cnr;
400 struct dtv_fe_stats pre_bit_error;
401 struct dtv_fe_stats pre_bit_count;
402 struct dtv_fe_stats post_bit_error;
403 struct dtv_fe_stats post_bit_count;
404 struct dtv_fe_stats block_error;
405 struct dtv_fe_stats block_count;
396}; 406};
397 407
398struct dvb_frontend { 408struct dvb_frontend {