/*
 * Copyright (C) 2016 Freescale Semiconductor, Inc.
 * Copyright 2018 NXP
 *
 * SPDX-License-Identifier:     GPL-2.0+
 */
#ifndef __UTILS_H__
#define __UTILS_H__

#include <common.h>

#define ALIGN_BYTES 64 /*mmc block read/write need 64 bytes aligned */

struct margin_pos {
	/* which blk the read/write starts */
	uint64_t blk_start;
	/* which blk the read/write ends */
	uint64_t blk_end;
	/* start position inside the start blk */
	unsigned long start;
	/* end position inside the end blk */
	unsigned long end;
	/* how many blks can be read/write one time */
	unsigned long multi;
};
typedef struct margin_pos margin_pos_t;

int get_margin_pos(uint64_t part_start, uint64_t part_end, unsigned long blksz,
		   margin_pos_t *margin, int64_t offset, size_t num_bytes,
		   bool allow_partial);

int read_from_partition_in_bytes(struct blk_desc *fs_dev_desc,
				 disk_partition_t *info,
				 int64_t offset, size_t num_bytes,
		void* buffer, size_t* out_num_read);

int write_to_partition_in_bytes(struct blk_desc *fs_dev_desc,
				disk_partition_t *info, int64_t offset,
				size_t num_bytes, void* buffer,
				size_t *out_num_write);

#endif
