static void shutdown_device(struct ifx_data *data) { int i, fd; DBG(""); if (data->dlc_init_source > 0) { g_source_remove(data->dlc_init_source); data->dlc_init_source = 0; } for (i = 0; i < NUM_DLC; i++) { if (data->dlcs[i] == NULL) continue; g_at_chat_unref(data->dlcs[i]); data->dlcs[i] = NULL; } if (data->mux) { g_at_mux_shutdown(data->mux); g_at_mux_unref(data->mux); data->mux = NULL; goto done; } fd = g_io_channel_unix_get_fd(data->device); if (ioctl(fd, TIOCSETD, &data->saved_ldisc) < 0) ofono_warn("Failed to restore line discipline"); done: g_io_channel_unref(data->device); data->device = NULL; }
void g_at_mux_unref(GAtMux *mux) { if (mux == NULL) return; if (g_atomic_int_dec_and_test(&mux->ref_count)) { g_at_mux_shutdown(mux); g_io_channel_unref(mux->channel); if (mux->driver->remove) mux->driver->remove(mux); g_free(mux); } }
static void phonesim_disconnected(gpointer user_data) { struct ofono_modem *modem = user_data; struct phonesim_data *data = ofono_modem_get_data(modem); DBG(""); ofono_modem_set_powered(modem, FALSE); g_at_chat_unref(data->chat); data->chat = NULL; if (data->mux) { g_at_mux_shutdown(data->mux); g_at_mux_unref(data->mux); data->mux = NULL; } }
static gboolean phonesim_reset(void *user_data) { struct ofono_modem *modem = user_data; struct phonesim_data *data = ofono_modem_get_data(modem); g_at_chat_unref(data->chat); data->chat = NULL; if (data->mux) { g_at_mux_shutdown(data->mux); g_at_mux_unref(data->mux); data->mux = NULL; } ofono_modem_reset(modem); return FALSE; }
static int phonesim_disable(struct ofono_modem *modem) { struct phonesim_data *data = ofono_modem_get_data(modem); DBG("%p", modem); __ofono_modem_remove_atom_watch(modem, data->hfp_watch); g_at_chat_unref(data->chat); data->chat = NULL; if (data->mux) { g_at_mux_shutdown(data->mux); g_at_mux_unref(data->mux); data->mux = NULL; } return 0; }