in clients/ssi_protocol.c [387:420]
static void ssip_reset(struct hsi_client *cl)
{
struct ssi_protocol *ssi = hsi_client_drvdata(cl);
struct list_head *head, *tmp;
struct hsi_msg *msg;
if (netif_running(ssi->netdev))
netif_carrier_off(ssi->netdev);
hsi_flush(cl);
spin_lock_bh(&ssi->lock);
if (ssi->send_state != SEND_IDLE)
hsi_stop_tx(cl);
spin_unlock_bh(&ssi->lock);
if (test_and_clear_bit(SSIP_WAKETEST_FLAG, &ssi->flags))
ssi_waketest(cl, 0); /* FIXME: To be removed */
spin_lock_bh(&ssi->lock);
del_timer(&ssi->rx_wd);
del_timer(&ssi->tx_wd);
del_timer(&ssi->keep_alive);
ssi->main_state = 0;
ssi->send_state = 0;
ssi->recv_state = 0;
ssi->flags = 0;
ssi->rxid = 0;
ssi->txid = 0;
list_for_each_safe(head, tmp, &ssi->txqueue) {
msg = list_entry(head, struct hsi_msg, link);
dev_dbg(&cl->device, "Pending TX data\n");
list_del(head);
ssip_free_data(msg);
}
ssi->txqueue_len = 0;
spin_unlock_bh(&ssi->lock);
}