Lines Matching full:client
64 static void sms_board_dvb3_event(struct smsdvb_client_t *client,
67 struct smscore_device_t *coredev = client->coredev;
82 if (client->event_fe_state != DVB3_EVENT_FE_LOCK) {
83 client->event_fe_state = DVB3_EVENT_FE_LOCK;
89 if (client->event_fe_state != DVB3_EVENT_FE_UNLOCK) {
90 client->event_fe_state = DVB3_EVENT_FE_UNLOCK;
96 if (client->event_unc_state != DVB3_EVENT_UNC_OK) {
97 client->event_unc_state = DVB3_EVENT_UNC_OK;
103 if (client->event_unc_state != DVB3_EVENT_UNC_ERR) {
104 client->event_unc_state = DVB3_EVENT_UNC_ERR;
118 struct smsdvb_client_t *client =
120 struct smscore_device_t *coredev = client->coredev;
240 static void smsdvb_update_tx_params(struct smsdvb_client_t *client,
243 struct dvb_frontend *fe = &client->frontend;
247 client->fe_status = sms_to_status(p->is_demod_locked, 0);
257 static void smsdvb_update_per_slices(struct smsdvb_client_t *client,
260 struct dvb_frontend *fe = &client->frontend;
264 client->fe_status = sms_to_status(p->is_demod_locked, p->is_rf_locked);
278 client->last_per = c->block_error.stat[0].uvalue;
294 client->legacy_per = tmp;
297 static void smsdvb_update_dvb_stats(struct smsdvb_client_t *client,
300 struct dvb_frontend *fe = &client->frontend;
303 if (client->prt_dvb_stats)
304 client->prt_dvb_stats(client->debug_data, p);
306 client->fe_status = sms_to_status(p->is_demod_locked, p->is_rf_locked);
310 client->fe_status = sms_to_status(p->is_demod_locked, 0);
333 client->last_per = c->block_error.stat[0].uvalue;
346 client->legacy_ber = p->ber;
349 static void smsdvb_update_isdbt_stats(struct smsdvb_client_t *client,
352 struct dvb_frontend *fe = &client->frontend;
357 if (client->prt_isdb_stats)
358 client->prt_isdb_stats(client->debug_data, p);
360 client->fe_status = sms_to_status(p->is_demod_locked, p->is_rf_locked);
399 client->last_per = c->block_error.stat[0].uvalue;
449 static void smsdvb_update_isdbt_stats_ex(struct smsdvb_client_t *client,
452 struct dvb_frontend *fe = &client->frontend;
457 if (client->prt_isdb_stats_ex)
458 client->prt_isdb_stats_ex(client->debug_data, p);
462 client->fe_status = sms_to_status(p->is_demod_locked, 0);
487 client->last_per = c->block_error.stat[0].uvalue;
543 struct smsdvb_client_t *client = (struct smsdvb_client_t *) context;
547 struct dvb_frontend *fe = &client->frontend;
557 if (client->feed_users && client->has_tuned)
558 dvb_dmx_swfilter(&client->demux, p,
564 complete(&client->tune_done);
568 client->fe_status = FE_HAS_SIGNAL | FE_HAS_CARRIER |
576 client->fe_status = 0;
582 smsdvb_update_tx_params(client, p);
588 smsdvb_update_per_slices(client, p);
594 switch (smscore_get_device_mode(client->coredev)) {
597 smsdvb_update_isdbt_stats(client, p);
601 smsdvb_update_dvb_stats(client, p + sizeof(u32));
610 smsdvb_update_isdbt_stats_ex(client, p + sizeof(u32));
616 smscore_putbuffer(client->coredev, cb);
619 if (client->fe_status & FE_HAS_LOCK) {
620 sms_board_dvb3_event(client, DVB3_EVENT_FE_LOCK);
621 if (client->last_per == c->block_error.stat[0].uvalue)
622 sms_board_dvb3_event(client, DVB3_EVENT_UNC_OK);
624 sms_board_dvb3_event(client, DVB3_EVENT_UNC_ERR);
625 client->has_tuned = true;
628 client->has_tuned = false;
629 sms_board_dvb3_event(client, DVB3_EVENT_FE_UNLOCK);
631 complete(&client->stats_done);
637 static void smsdvb_media_device_unregister(struct smsdvb_client_t *client)
640 struct smscore_device_t *coredev = client->coredev;
651 static void smsdvb_unregister_client(struct smsdvb_client_t *client)
655 list_del(&client->entry);
657 smsdvb_debugfs_release(client);
658 smscore_unregister_client(client->smsclient);
659 dvb_unregister_frontend(&client->frontend);
660 dvb_dmxdev_release(&client->dmxdev);
661 dvb_dmx_release(&client->demux);
662 smsdvb_media_device_unregister(client);
663 dvb_unregister_adapter(&client->adapter);
664 kfree(client);
678 struct smsdvb_client_t *client =
685 client->feed_users++;
694 return smsclient_sendrequest(client->smsclient,
700 struct smsdvb_client_t *client =
707 client->feed_users--;
716 return smsclient_sendrequest(client->smsclient,
720 static int smsdvb_sendrequest_and_wait(struct smsdvb_client_t *client,
726 rc = smsclient_sendrequest(client->smsclient, buffer, size);
735 static int smsdvb_send_statistics_request(struct smsdvb_client_t *client)
741 if (client->get_stats_jiffies &&
742 (!time_after(jiffies, client->get_stats_jiffies)))
744 client->get_stats_jiffies = jiffies + msecs_to_jiffies(100);
751 switch (smscore_get_device_mode(client->coredev)) {
757 if (client->coredev->fw_version >= 0x800)
766 rc = smsdvb_sendrequest_and_wait(client, &msg, sizeof(msg),
767 &client->stats_done);
772 static inline int led_feedback(struct smsdvb_client_t *client)
774 if (!(client->fe_status & FE_HAS_LOCK))
775 return sms_board_led_feedback(client->coredev, SMS_LED_OFF);
777 return sms_board_led_feedback(client->coredev,
778 (client->legacy_ber == 0) ?
785 struct smsdvb_client_t *client;
786 client = container_of(fe, struct smsdvb_client_t, frontend);
788 rc = smsdvb_send_statistics_request(client);
790 *stat = client->fe_status;
792 led_feedback(client);
800 struct smsdvb_client_t *client;
802 client = container_of(fe, struct smsdvb_client_t, frontend);
804 rc = smsdvb_send_statistics_request(client);
806 *ber = client->legacy_ber;
808 led_feedback(client);
818 struct smsdvb_client_t *client;
820 client = container_of(fe, struct smsdvb_client_t, frontend);
822 rc = smsdvb_send_statistics_request(client);
831 led_feedback(client);
840 struct smsdvb_client_t *client;
842 client = container_of(fe, struct smsdvb_client_t, frontend);
844 rc = smsdvb_send_statistics_request(client);
849 led_feedback(client);
858 struct smsdvb_client_t *client;
860 client = container_of(fe, struct smsdvb_client_t, frontend);
862 rc = smsdvb_send_statistics_request(client);
866 led_feedback(client);
885 struct smsdvb_client_t *client =
895 client->fe_status = 0;
896 client->event_fe_state = -1;
897 client->event_unc_state = -1;
927 ret = sms_board_lna_control(client->coredev, 0);
932 ret = smsdvb_sendrequest_and_wait(client, &msg, sizeof(msg),
933 &client->tune_done);
941 sms_board_lna_control(client->coredev, 1);
944 return smsdvb_sendrequest_and_wait(client, &msg, sizeof(msg),
945 &client->tune_done);
951 struct smsdvb_client_t *client =
953 int board_id = smscore_get_board_id(client->coredev);
998 ret = sms_board_lna_control(client->coredev, 0);
1003 ret = smsdvb_sendrequest_and_wait(client, &msg, sizeof(msg),
1004 &client->tune_done);
1012 sms_board_lna_control(client->coredev, 1);
1014 return smsdvb_sendrequest_and_wait(client, &msg, sizeof(msg),
1015 &client->tune_done);
1021 struct smsdvb_client_t *client =
1023 struct smscore_device_t *coredev = client->coredev;
1029 client->has_tuned = false;
1045 struct smsdvb_client_t *client =
1048 sms_board_power(client->coredev, 1);
1050 sms_board_dvb3_event(client, DVB3_EVENT_INIT);
1056 struct smsdvb_client_t *client =
1059 sms_board_led_feedback(client->coredev, SMS_LED_OFF);
1060 sms_board_power(client->coredev, 0);
1062 sms_board_dvb3_event(client, DVB3_EVENT_SLEEP);
1107 struct smsdvb_client_t *client;
1113 client = kzalloc(sizeof(struct smsdvb_client_t), GFP_KERNEL);
1114 if (!client)
1118 rc = dvb_register_adapter(&client->adapter,
1126 dvb_register_media_controller(&client->adapter, coredev->media_dev);
1129 client->demux.dmx.capabilities = DMX_TS_FILTERING;
1130 client->demux.filternum = 32; /* todo: nova ??? */
1131 client->demux.feednum = 32;
1132 client->demux.start_feed = smsdvb_start_feed;
1133 client->demux.stop_feed = smsdvb_stop_feed;
1135 rc = dvb_dmx_init(&client->demux);
1142 client->dmxdev.filternum = 32;
1143 client->dmxdev.demux = &client->demux.dmx;
1144 client->dmxdev.capabilities = 0;
1146 rc = dvb_dmxdev_init(&client->dmxdev, &client->adapter);
1153 memcpy(&client->frontend.ops, &smsdvb_fe_ops,
1159 client->frontend.ops.delsys[0] = SYS_DVBT;
1163 client->frontend.ops.delsys[0] = SYS_ISDBT;
1167 rc = dvb_register_frontend(&client->adapter, &client->frontend);
1177 params.context = client;
1179 rc = smscore_register_client(coredev, ¶ms, &client->smsclient);
1185 client->coredev = coredev;
1187 init_completion(&client->tune_done);
1188 init_completion(&client->stats_done);
1192 list_add(&client->entry, &g_smsdvb_clients);
1196 client->event_fe_state = -1;
1197 client->event_unc_state = -1;
1198 sms_board_dvb3_event(client, DVB3_EVENT_HOTPLUG);
1202 if (smsdvb_debugfs_create(client) < 0)
1205 rc = dvb_create_media_graph(&client->adapter, true);
1216 list_del(&client->entry);
1219 smsdvb_debugfs_release(client);
1222 dvb_unregister_frontend(&client->frontend);
1225 dvb_dmxdev_release(&client->dmxdev);
1228 dvb_dmx_release(&client->demux);
1231 smsdvb_media_device_unregister(client);
1232 dvb_unregister_adapter(&client->adapter);
1235 kfree(client);