Hi, This patch makes smscore structure hidden from all other module by making it's pointer NULL. Thanks, Doron Cohen -------------- >From b003e8ec2893b7d6e68720abeb490fba38904e59 Mon Sep 17 00:00:00 2001 From: Doron Cohen <doronc@xxxxxxxxxxxx> Date: Mon, 19 Sep 2011 14:16:02 +0300 Subject: [PATCH 11/21] Hide smscore data by making pointer NULL with unkniown fields. --- drivers/media/dvb/siano/smsdvb.c | 65 +++++++++++++++++++++----------------- 1 files changed, 36 insertions(+), 29 deletions(-) diff --git a/drivers/media/dvb/siano/smsdvb.c b/drivers/media/dvb/siano/smsdvb.c index 62dd37c..2695d3a 100644 --- a/drivers/media/dvb/siano/smsdvb.c +++ b/drivers/media/dvb/siano/smsdvb.c @@ -37,7 +37,7 @@ DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); struct smsdvb_client_t { struct list_head entry; - struct smscore_device_t *coredev; + void *coredev; struct smscore_client_t *smsclient; struct dvb_adapter adapter; @@ -73,15 +73,15 @@ enum SMS_DVB3_EVENTS { static struct list_head g_smsdvb_clients; static struct mutex g_smsdvb_clientslock; -static int sms_dbg; -module_param_named(debug, sms_dbg, int, 0644); +int sms_debug; +module_param_named(debug, sms_debug, int, 0644); MODULE_PARM_DESC(debug, "set debug level (info=1, adv=2 (or-able))"); /* Events that may come from DVB v3 adapter */ static void sms_board_dvb3_event(struct smsdvb_client_t *client, enum SMS_DVB3_EVENTS event) { - struct smscore_device_t *coredev = client->coredev; + void *coredev = client->coredev; switch (event) { case DVB3_EVENT_INIT: sms_debug("DVB3_EVENT_INIT"); @@ -656,45 +656,43 @@ static int smsdvb_isdbt_set_frontend(struct dvb_frontend *fe, struct dtv_frontend_properties *c = &fe->dtv_property_cache; struct smsdvb_client_t *client = container_of(fe, struct smsdvb_client_t, frontend); - - struct { - struct SmsMsgHdr_S Msg; - u32 Data[4]; - } Msg; + struct SmsMsgData4Args_S Msg; fe->dtv_property_cache.delivery_system = SYS_ISDBT; - Msg.Msg.msgSrcId = DVBT_BDA_CONTROL_MSG_ID; - Msg.Msg.msgDstId = HIF_TASK; - Msg.Msg.msgFlags = 0; - Msg.Msg.msgType = MSG_SMS_ISDBT_TUNE_REQ; - Msg.Msg.msgLength = sizeof(Msg); - + Msg.xMsgHeader.msgSrcId = DVBT_BDA_CONTROL_MSG_ID; + Msg.xMsgHeader.msgDstId = HIF_TASK; + Msg.xMsgHeader.msgFlags = 0; + Msg.xMsgHeader.msgType = MSG_SMS_ISDBT_TUNE_REQ; + Msg.xMsgHeader.msgLength = sizeof(Msg); + Msg.msgData[0] = p->frequency; if (c->isdbt_sb_segment_idx == -1) c->isdbt_sb_segment_idx = 0; + sms_info("freq %d band %d", + p->frequency, p->u.ofdm.bandwidth); switch (c->isdbt_sb_segment_count) { case 3: - Msg.Data[1] = BW_ISDBT_3SEG; + Msg.msgData[1] = BW_ISDBT_3SEG; break; case 1: - Msg.Data[1] = BW_ISDBT_1SEG; + Msg.msgData[1] = BW_ISDBT_1SEG; break; case 0: /* AUTO */ switch (c->bandwidth_hz / 1000000) { case 8: case 7: c->isdbt_sb_segment_count = 3; - Msg.Data[1] = BW_ISDBT_3SEG; + Msg.msgData[1] = BW_ISDBT_3SEG; break; case 6: c->isdbt_sb_segment_count = 1; - Msg.Data[1] = BW_ISDBT_1SEG; + Msg.msgData[1] = BW_ISDBT_1SEG; break; default: /* Assumes 6 MHZ bw */ c->isdbt_sb_segment_count = 1; c->bandwidth_hz = 6000; - Msg.Data[1] = BW_ISDBT_1SEG; + Msg.msgData[1] = BW_ISDBT_1SEG; break; } break; @@ -702,10 +700,9 @@ static int smsdvb_isdbt_set_frontend(struct dvb_frontend *fe, sms_info("Segment count %d not supported", c->isdbt_sb_segment_count); return -EINVAL; } - - Msg.Data[0] = c->frequency; - Msg.Data[2] = 12000000; - Msg.Data[3] = c->isdbt_sb_segment_idx; + Msg.msgData[0] = c->frequency; + Msg.msgData[2] = 12000000; + Msg.msgData[3] = c->isdbt_sb_segment_idx; sms_info("%s: freq %d segwidth %d segindex %d\n", __func__, c->frequency, c->isdbt_sb_segment_count, @@ -782,7 +779,7 @@ static struct dvb_frontend_ops smsdvb_fe_ops = { .info = { .name = "Siano Mobile Digital MDTV Receiver", .type = FE_OFDM, - .frequency_min = 44250000, + .frequency_min = 164000000, .frequency_max = 867250000, .frequency_stepsize = 250000, .caps = FE_CAN_INVERSION_AUTO | @@ -811,16 +808,24 @@ static struct dvb_frontend_ops smsdvb_fe_ops = { .sleep = smsdvb_sleep, }; -static int smsdvb_hotplug(void *coredev, - struct device *device, int arrival) +static int smsdvb_hotplug(void *coredev, struct device *device, int arrival) { struct smsclient_params_t params; struct smsdvb_client_t *client; int rc; + int mode = smscore_get_device_mode(coredev); /* device removal handled by onremove callback */ if (!arrival) return 0; + + if ( (mode != SMSHOSTLIB_DEVMD_DVBT_BDA) && + (mode != SMSHOSTLIB_DEVMD_ISDBT_BDA) ) { + sms_err("SMS Device mode is not set for " + "DVB operation."); + return 0; + } + client = kzalloc(sizeof(struct smsdvb_client_t), GFP_KERNEL); if (!client) { sms_err("kmalloc() failed"); @@ -949,6 +954,8 @@ static void __exit smsdvb_module_exit(void) module_init(smsdvb_module_init); module_exit(smsdvb_module_exit); -MODULE_DESCRIPTION("SMS DVB subsystem adaptation module"); -MODULE_AUTHOR("Siano Mobile Silicon, Inc. (uris@xxxxxxxxxxxx)"); +#define MODULE_VERSION_STRING "Siano DVB module for LinuxTV interface "VERSION_STRING + +MODULE_DESCRIPTION(MODULE_VERSION_STRING); +MODULE_AUTHOR(MODULE_AUTHOR_STRING); MODULE_LICENSE("GPL"); -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html