[mobile] replace 3 different gsm322_makesend_* functions with one
The new function is gsm322_event_input() and uses the event type as a function argument.
This commit is contained in:
parent
ae55484c1f
commit
584b917ced
|
@ -32,6 +32,13 @@
|
|||
#define GSM322_PLMN_SEARCH 10
|
||||
#define GSM322_HPLMN_SEARCH 11
|
||||
|
||||
/* GSM 03.22 event types */
|
||||
enum gsm322_evt_type {
|
||||
GSM322_EVT_C, /* direct cell event, no queue */
|
||||
GSM322_EVT_CS, /* enqueue cs->event_queue */
|
||||
GSM322_EVT_PLMN, /* enqueue plmn->event_queue */
|
||||
};
|
||||
|
||||
/* GSM 03.22 events */
|
||||
#define GSM322_EVENT_SWITCH_ON 1
|
||||
#define GSM322_EVENT_SWITCH_OFF 2
|
||||
|
@ -172,9 +179,8 @@ struct gsm322_msg {
|
|||
|
||||
int gsm322_init(struct osmocom_ms *ms);
|
||||
int gsm322_exit(struct osmocom_ms *ms);
|
||||
int gsm322_makesend_plmn_msg(struct osmocom_ms *ms, int msg_type, uint8_t *data, unsigned int len);
|
||||
int gsm322_makesend_cs_event(struct osmocom_ms *ms, int msg_type, uint8_t *data, unsigned int len);
|
||||
int gsm322_makesend_c_event(struct osmocom_ms *ms, int msg_type, uint8_t *data, unsigned int len);
|
||||
int gsm322_event_input(struct osmocom_ms *ms, enum gsm322_evt_type type,
|
||||
int msg_type, uint8_t *data, unsigned int len);
|
||||
int gsm322_plmn_dequeue(struct osmocom_ms *ms);
|
||||
int gsm322_cs_dequeue(struct osmocom_ms *ms);
|
||||
int gsm322_add_forbidden_la(struct osmocom_ms *ms, uint16_t mcc,
|
||||
|
|
|
@ -104,10 +104,10 @@ int mobile_signal_cb(unsigned int subsys, unsigned int signal,
|
|||
break;
|
||||
default:
|
||||
/* no SIM, trigger PLMN selection process */
|
||||
gsm322_makesend_plmn_msg(ms, GSM322_EVENT_SWITCH_ON,
|
||||
NULL, 0);
|
||||
gsm322_makesend_cs_event(ms, GSM322_EVENT_SWITCH_ON,
|
||||
NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN,
|
||||
GSM322_EVENT_SWITCH_ON, NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_CS,
|
||||
GSM322_EVENT_SWITCH_ON, NULL, 0);
|
||||
}
|
||||
|
||||
ms->started = 1;
|
||||
|
|
|
@ -3604,8 +3604,8 @@ int gsm322_exit(struct osmocom_ms *ms)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int gsm322_makesend_c_event(struct osmocom_ms *ms, int msg_type,
|
||||
uint8_t *data, unsigned int len)
|
||||
int gsm322_event_input(struct osmocom_ms *ms, enum gsm322_evt_type type,
|
||||
int msg_type, uint8_t *data, unsigned int len)
|
||||
{
|
||||
struct msgb *nmsg = gsm322_msgb_alloc(msg_type);
|
||||
int rc;
|
||||
|
@ -3621,46 +3621,18 @@ int gsm322_makesend_c_event(struct osmocom_ms *ms, int msg_type,
|
|||
}
|
||||
memcpy(cur, data, len);
|
||||
}
|
||||
rc = gsm322_c_event(ms, nmsg);
|
||||
msgb_free(nmsg);
|
||||
switch (type) {
|
||||
case GSM322_EVT_C:
|
||||
rc = gsm322_c_event(ms, nmsg);
|
||||
msgb_free(nmsg);
|
||||
break;
|
||||
case GSM322_EVT_CS:
|
||||
rc = gsm322_cs_sendmsg(ms, nmsg);
|
||||
break;
|
||||
case GSM322_EVT_PLMN:
|
||||
rc = gsm322_plmn_sendmsg(ms, nmsg);
|
||||
break;
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int gsm322_makesend_cs_event(struct osmocom_ms *ms, int msg_type,
|
||||
uint8_t *data, unsigned int len)
|
||||
{
|
||||
struct msgb *nmsg = gsm322_msgb_alloc(msg_type);
|
||||
|
||||
if (!nmsg)
|
||||
return -ENOMEM;
|
||||
|
||||
if (data && len) {
|
||||
uint8_t *cur = msgb_push(nmsg, len);
|
||||
if (!cur) {
|
||||
msgb_free(nmsg);
|
||||
return -EIO;
|
||||
}
|
||||
memcpy(cur, data, len);
|
||||
}
|
||||
return gsm322_cs_sendmsg(ms, nmsg);
|
||||
}
|
||||
|
||||
int gsm322_makesend_plmn_msg(struct osmocom_ms *ms, int msg_type,
|
||||
uint8_t *data, unsigned int len)
|
||||
{
|
||||
struct msgb *nmsg = gsm322_msgb_alloc(msg_type);
|
||||
|
||||
if (!nmsg)
|
||||
return -ENOMEM;
|
||||
|
||||
if (data && len) {
|
||||
uint8_t *cur = msgb_push(nmsg, len);
|
||||
if (!cur) {
|
||||
msgb_free(nmsg);
|
||||
return -EIO;
|
||||
}
|
||||
memcpy(cur, data, len);
|
||||
}
|
||||
return gsm322_plmn_sendmsg(ms, nmsg);
|
||||
}
|
||||
|
|
|
@ -1123,8 +1123,8 @@ static int gsm48_mm_cell_selected(struct osmocom_ms *ms, struct msgb *msg)
|
|||
GSM48_MM_SST_NORMAL_SERVICE);
|
||||
|
||||
/* send message to PLMN search process */
|
||||
gsm322_makesend_plmn_msg(ms, GSM322_EVENT_REG_SUCCESS,
|
||||
NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN,
|
||||
GSM322_EVENT_REG_SUCCESS, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
if (!s->att_allowed) {
|
||||
|
@ -1133,8 +1133,8 @@ static int gsm48_mm_cell_selected(struct osmocom_ms *ms, struct msgb *msg)
|
|||
GSM48_MM_SST_NORMAL_SERVICE);
|
||||
|
||||
/* send message to PLMN search process */
|
||||
gsm322_makesend_plmn_msg(ms, GSM322_EVENT_REG_SUCCESS,
|
||||
NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN,
|
||||
GSM322_EVENT_REG_SUCCESS, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
/* else, continue */
|
||||
|
@ -1150,8 +1150,8 @@ static int gsm48_mm_cell_selected(struct osmocom_ms *ms, struct msgb *msg)
|
|||
GSM48_MM_SST_LIMITED_SERVICE);
|
||||
|
||||
/* send message to PLMN search process */
|
||||
gsm322_makesend_plmn_msg(ms, GSM322_EVENT_ROAMING_NA,
|
||||
NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN,
|
||||
GSM322_EVENT_ROAMING_NA, NULL, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1165,7 +1165,8 @@ static int gsm48_mm_cell_selected(struct osmocom_ms *ms, struct msgb *msg)
|
|||
GSM48_MM_SST_LIMITED_SERVICE);
|
||||
|
||||
/* send message to PLMN search process */
|
||||
gsm322_makesend_plmn_msg(ms, GSM322_EVENT_REG_FAILED, NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN,
|
||||
GSM322_EVENT_REG_FAILED, NULL, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1733,7 +1734,8 @@ static int gsm48_mm_imsi_detach_end(struct osmocom_ms *ms, struct msgb *msg)
|
|||
}
|
||||
|
||||
/* send SIM remove event to gsm322 */
|
||||
gsm322_makesend_plmn_msg(ms, GSM322_EVENT_SIM_REMOVE, NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN,
|
||||
GSM322_EVENT_SIM_REMOVE, NULL, 0);
|
||||
|
||||
/* CS process will trigger return to MM IDLE / No SIM */
|
||||
return 0;
|
||||
|
@ -1993,7 +1995,7 @@ static int gsm48_mm_loc_upd(struct osmocom_ms *ms, struct msgb *msg)
|
|||
_stop:
|
||||
mm->lupd_pending = 0;
|
||||
/* send message to PLMN search process */
|
||||
gsm322_makesend_plmn_msg(ms, msg_type, NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN, msg_type, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2062,7 +2064,8 @@ static int gsm48_mm_loc_upd_normal(struct osmocom_ms *ms, struct msgb *msg)
|
|||
LOGP(DMM, LOGL_INFO, "Loc. upd. not allowed.\n");
|
||||
|
||||
/* send message to PLMN search process */
|
||||
gsm322_makesend_plmn_msg(ms, GSM322_EVENT_REG_FAILED, NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN,
|
||||
GSM322_EVENT_REG_FAILED, NULL, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -2083,7 +2086,8 @@ static int gsm48_mm_loc_upd_normal(struct osmocom_ms *ms, struct msgb *msg)
|
|||
GSM48_MM_SST_NORMAL_SERVICE);
|
||||
|
||||
/* send message to PLMN search process */
|
||||
gsm322_makesend_plmn_msg(ms, GSM322_EVENT_REG_SUCCESS, NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN,
|
||||
GSM322_EVENT_REG_SUCCESS, NULL, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -2318,7 +2322,8 @@ static int gsm48_mm_rx_loc_upd_acc(struct osmocom_ms *ms, struct msgb *msg)
|
|||
}
|
||||
|
||||
/* send message to PLMN search process */
|
||||
gsm322_makesend_plmn_msg(ms, GSM322_EVENT_REG_SUCCESS, NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN,
|
||||
GSM322_EVENT_REG_SUCCESS, NULL, 0);
|
||||
|
||||
/* follow on proceed */
|
||||
if (TLVP_PRESENT(&tp, GSM48_IE_MOBILE_ID))
|
||||
|
@ -2426,7 +2431,7 @@ static int gsm48_mm_rel_loc_upd_rej(struct osmocom_ms *ms, struct msgb *msg)
|
|||
}
|
||||
memset(&ngm, 0, sizeof(ngm));
|
||||
ngm.reject = mm->lupd_rej_cause;
|
||||
gsm322_makesend_plmn_msg(ms, msg_type, NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN, msg_type, &ngm, sizeof(ngm));
|
||||
|
||||
/* forbidden list */
|
||||
switch (mm->lupd_rej_cause) {
|
||||
|
@ -4068,7 +4073,8 @@ static int gsm48_mmr_reg_req(struct osmocom_ms *ms)
|
|||
struct gsm48_mmlayer *mm = &ms->mmlayer;
|
||||
|
||||
/* schedule insertion of SIM */
|
||||
gsm322_makesend_plmn_msg(ms, GSM322_EVENT_SIM_INSERT, NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN,
|
||||
GSM322_EVENT_SIM_INSERT, NULL, 0);
|
||||
|
||||
/* 4.2.1.2 SIM is inserted in state NO IMSI */
|
||||
if (mm->state == GSM48_MM_ST_MM_IDLE
|
||||
|
|
|
@ -408,8 +408,8 @@ static void new_rr_state(struct gsm48_rrlayer *rr, int state)
|
|||
memset(&em, 0, sizeof(em));
|
||||
em.same_cell = 1;
|
||||
}
|
||||
gsm322_makesend_c_event(rr->ms, GSM322_EVENT_RET_IDLE,
|
||||
(uint8_t *)&em, sizeof(em));
|
||||
gsm322_event_input(rr->ms, GSM322_EVT_C, GSM322_EVENT_RET_IDLE,
|
||||
(uint8_t *)&em, sizeof(em));
|
||||
/* reset any BA range */
|
||||
rr->ba_ranges = 0;
|
||||
}
|
||||
|
@ -1189,7 +1189,8 @@ static int gsm48_rr_chan_req(struct osmocom_ms *ms, int cause, int paging)
|
|||
* NOTE: this must be sent unbuffered, because the state may not
|
||||
* change until idle mode is left
|
||||
*/
|
||||
rc = gsm322_makesend_c_event(ms, GSM322_EVENT_LEAVE_IDLE, NULL, 0);
|
||||
rc = gsm322_event_input(ms, GSM322_EVT_C, GSM322_EVENT_LEAVE_IDLE,
|
||||
NULL, 0);
|
||||
if (rc) {
|
||||
if (paging)
|
||||
return rc;
|
||||
|
@ -1595,7 +1596,7 @@ static int gsm48_new_sysinfo(struct osmocom_ms *ms, uint8_t type)
|
|||
/* send sysinfo event to other layers */
|
||||
memset(&em, 0, sizeof(em));
|
||||
em.sysinfo = type;
|
||||
gsm322_makesend_cs_event(ms, GSM322_EVENT_SYSINFO,
|
||||
gsm322_event_input(ms, GSM322_EVT_CS, GSM322_EVENT_SYSINFO,
|
||||
(uint8_t *)&em, sizeof(em));
|
||||
|
||||
/* send timer info to location update process */
|
||||
|
|
|
@ -689,8 +689,8 @@ DEFUN(network_select, network_select_cmd, "network select MS_NAME MCC MNC",
|
|||
memset(&ngm, 0, sizeof(ngm));
|
||||
ngm.mcc = mcc;
|
||||
ngm.mnc = mnc;
|
||||
gsm322_makesend_plmn_msg(ms, GSM322_EVENT_CHOOSE_PLMN,
|
||||
(uint8_t *)&ngm, sizeof(ngm));
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN, GSM322_EVENT_CHOOSE_PLMN,
|
||||
(uint8_t *)&ngm, sizeof(ngm));
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
@ -820,7 +820,8 @@ DEFUN(network_search, network_search_cmd, "network search MS_NAME",
|
|||
if (!ms)
|
||||
return CMD_WARNING;
|
||||
|
||||
gsm322_makesend_plmn_msg(ms, GSM322_EVENT_USER_RESEL, NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN,
|
||||
GSM322_EVENT_USER_RESEL, NULL, 0);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
@ -1265,7 +1266,7 @@ DEFUN(cfg_ms_mode, cfg_ms_mode_cmd, "network-selection-mode (auto|manual)",
|
|||
msg_type = GSM322_EVENT_SEL_MANUAL;
|
||||
if (msg_type < 0)
|
||||
return CMD_WARNING;
|
||||
gsm322_makesend_plmn_msg(ms, msg_type, NULL, 0);
|
||||
gsm322_event_input(ms, GSM322_EVT_PLMN, msg_type, NULL, 0);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue