/* Copyright 2020 The Fuchsia Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

/* Implements the system dependencies for libabr. We can't use
 * LIBABR_USE_STDLIB_DEPS here because not all the standard
 * headers are available. */

#include <abr/sysdeps.h>

#include <common.h>
#include <u-boot/crc.h>

void *AbrMemcpy(void *dest, const void *src, size_t n)
{
	return memcpy(dest, src, n);
}

void *AbrMemset(void *dest, const int c, size_t n)
{
	return memset(dest, c, n);
}

void AbrPrint(const char *message)
{
	puts(message);
}

void AbrAbort(void)
{
	panic("libabr abort");
}

uint32_t AbrCrc32(const void *buf, size_t buf_size)
{
	return crc32(0, buf, buf_size);
}
