/*
 * linux/arch/unicore32/include/asm/memblock.h
 *
 * Code specific to PKUnity SoC and UniCore ISA
 *
 * Copyright (C) 2001-2010 GUAN Xue-tao
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef __UNICORE_MEMBLOCK_H__
#define __UNICORE_MEMBLOCK_H__

/*
 * Memory map description
 */
# define NR_BANKS 8

struct membank {
	unsigned long start;
	unsigned long size;
	unsigned int highmem;
};

struct meminfo {
	int nr_banks;
	struct membank bank[NR_BANKS];
};

extern struct meminfo meminfo;

#define for_each_bank(iter, mi)				\
	for (iter = 0; iter < (mi)->nr_banks; iter++)

#define bank_pfn_start(bank)	__phys_to_pfn((bank)->start)
#define bank_pfn_end(bank)	__phys_to_pfn((bank)->start + (bank)->size)
#define bank_pfn_size(bank)	((bank)->size >> PAGE_SHIFT)
#define bank_phys_start(bank)	((bank)->start)
#define bank_phys_end(bank)	((bank)->start + (bank)->size)
#define bank_phys_size(bank)	((bank)->size)

extern void uc32_memblock_init(struct meminfo *);

#endif
