/*
 * Copyright (c) 2018 Linaro Limited.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <logging/log.h>
LOG_MODULE_REGISTER(net_socket_offload, CONFIG_NET_SOCKETS_LOG_LEVEL);

#include <net/socket_offload.h>

/* Only one provider may register socket operations upon boot. */
const struct socket_offload *socket_ops;

void socket_offload_register(const struct socket_offload *ops)
{
	__ASSERT_NO_MSG(ops);
	__ASSERT_NO_MSG(socket_ops == NULL);

	socket_ops = ops;
}

#ifdef CONFIG_SOC_FAMILY_TISIMPLELINK
int fcntl(int fd, int cmd, ...)
{
	__ASSERT_NO_MSG(socket_ops);
	__ASSERT_NO_MSG(socket_ops->fcntl);

	va_list args;
	int res;

	va_start(args, cmd);
	res = socket_ops->fcntl(fd, cmd, args);
	va_end(args);

	return res;
}
#endif
