162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * TFRC library initialisation
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (c) 2007 The University of Aberdeen, Scotland, UK
662306a36Sopenharmony_ci * Copyright (c) 2007 Arnaldo Carvalho de Melo <acme@redhat.com>
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci#include <linux/moduleparam.h>
962306a36Sopenharmony_ci#include "tfrc.h"
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#ifdef CONFIG_IP_DCCP_TFRC_DEBUG
1262306a36Sopenharmony_cibool tfrc_debug;
1362306a36Sopenharmony_cimodule_param(tfrc_debug, bool, 0644);
1462306a36Sopenharmony_ciMODULE_PARM_DESC(tfrc_debug, "Enable TFRC debug messages");
1562306a36Sopenharmony_ci#endif
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciint __init tfrc_lib_init(void)
1862306a36Sopenharmony_ci{
1962306a36Sopenharmony_ci	int rc = tfrc_li_init();
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	if (rc)
2262306a36Sopenharmony_ci		goto out;
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci	rc = tfrc_tx_packet_history_init();
2562306a36Sopenharmony_ci	if (rc)
2662306a36Sopenharmony_ci		goto out_free_loss_intervals;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	rc = tfrc_rx_packet_history_init();
2962306a36Sopenharmony_ci	if (rc)
3062306a36Sopenharmony_ci		goto out_free_tx_history;
3162306a36Sopenharmony_ci	return 0;
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciout_free_tx_history:
3462306a36Sopenharmony_ci	tfrc_tx_packet_history_exit();
3562306a36Sopenharmony_ciout_free_loss_intervals:
3662306a36Sopenharmony_ci	tfrc_li_exit();
3762306a36Sopenharmony_ciout:
3862306a36Sopenharmony_ci	return rc;
3962306a36Sopenharmony_ci}
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_civoid tfrc_lib_exit(void)
4262306a36Sopenharmony_ci{
4362306a36Sopenharmony_ci	tfrc_rx_packet_history_exit();
4462306a36Sopenharmony_ci	tfrc_tx_packet_history_exit();
4562306a36Sopenharmony_ci	tfrc_li_exit();
4662306a36Sopenharmony_ci}
47