diff options
| author | fishsoupisgood <github@madingley.org> | 2019-04-29 01:17:54 +0100 | 
|---|---|---|
| committer | fishsoupisgood <github@madingley.org> | 2019-05-27 03:43:43 +0100 | 
| commit | 3f2546b2ef55b661fd8dd69682b38992225e86f6 (patch) | |
| tree | 65ca85f13617aee1dce474596800950f266a456c /roms/u-boot/arch/sandbox/include/asm | |
| download | qemu-master.tar.gz qemu-master.tar.bz2 qemu-master.zip  | |
Diffstat (limited to 'roms/u-boot/arch/sandbox/include/asm')
22 files changed, 1078 insertions, 0 deletions
diff --git a/roms/u-boot/arch/sandbox/include/asm/arch-sandbox/sound.h b/roms/u-boot/arch/sandbox/include/asm/arch-sandbox/sound.h new file mode 100644 index 00000000..a32e8c80 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/arch-sandbox/sound.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2013 Google, Inc + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __SANDBOX_SOUND_H +#define __SANDBOX_SOUND_H + +int sound_play(unsigned int msec, unsigned int frequency); + +int sound_init(const void *blob); + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/bitops.h b/roms/u-boot/arch/sandbox/include/asm/bitops.h new file mode 100644 index 00000000..74219c56 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/bitops.h @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * + * Copyright 1995, Russell King. + * Various bits and pieces copyrights include: + *  Linus Torvalds (test_bit). + * + * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1). + * + * Please note that the code in this file should never be included + * from user space.  Many of these are not implemented in assembler + * since they would be too costly.  Also, they require priviledged + * instructions (which are not available from user mode) to ensure + * that they are atomic. + */ + +#ifndef __ASM_SANDBOX_BITOPS_H +#define __ASM_SANDBOX_BITOPS_H + +#include <asm/system.h> + +#ifdef __KERNEL__ + +#define smp_mb__before_clear_bit()	do { } while (0) +#define smp_mb__after_clear_bit()	do { } while (0) + +/* + * Function prototypes to keep gcc -Wall happy. + */ +extern void set_bit(int nr, void *addr); + +extern void clear_bit(int nr, void *addr); + +extern void change_bit(int nr, void *addr); + +static inline void __change_bit(int nr, void *addr) +{ +	unsigned long mask = BIT_MASK(nr); +	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); + +	*p ^= mask; +} + +static inline int __test_and_set_bit(int nr, void *addr) +{ +	unsigned long mask = BIT_MASK(nr); +	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); +	unsigned long old = *p; + +	*p = old | mask; +	return (old & mask) != 0; +} + +static inline int test_and_set_bit(int nr, void *addr) +{ +	unsigned long flags; +	int out; + +	local_irq_save(flags); +	out = __test_and_set_bit(nr, addr); +	local_irq_restore(flags); + +	return out; +} + +static inline int __test_and_clear_bit(int nr, void *addr) +{ +	unsigned long mask = BIT_MASK(nr); +	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); +	unsigned long old = *p; + +	*p = old & ~mask; +	return (old & mask) != 0; +} + +static inline int test_and_clear_bit(int nr, void *addr) +{ +	unsigned long flags; +	int out; + +	local_irq_save(flags); +	out = __test_and_clear_bit(nr, addr); +	local_irq_restore(flags); + +	return out; +} + +extern int test_and_change_bit(int nr, void *addr); + +static inline int __test_and_change_bit(int nr, void *addr) +{ +	unsigned long mask = BIT_MASK(nr); +	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); +	unsigned long old = *p; + +	*p = old ^ mask; +	return (old & mask) != 0; +} + +extern int find_first_zero_bit(void *addr, unsigned size); +extern int find_next_zero_bit(void *addr, int size, int offset); + +/* + * This routine doesn't need to be atomic. + */ +static inline int test_bit(int nr, const void *addr) +{ +	return ((unsigned char *) addr)[nr >> 3] & (1U << (nr & 7)); +} + +/* + * ffz = Find First Zero in word. Undefined if no zero exists, + * so code should check against ~0UL first.. + */ +static inline unsigned long ffz(unsigned long word) +{ +	int k; + +	word = ~word; +	k = 31; +	if (word & 0x0000ffff) { +		k -= 16; word <<= 16; +	} +	if (word & 0x00ff0000) { +		k -= 8;  word <<= 8; +	} +	if (word & 0x0f000000) { +		k -= 4;  word <<= 4; +	} +	if (word & 0x30000000) { +		k -= 2;  word <<= 2; +	} +	if (word & 0x40000000) +		k -= 1; +	return k; +} + +/* + * hweightN: returns the hamming weight (i.e. the number + * of bits set) of a N-bit word + */ + +#define hweight32(x) generic_hweight32(x) +#define hweight16(x) generic_hweight16(x) +#define hweight8(x) generic_hweight8(x) + +#define ext2_set_bit			test_and_set_bit +#define ext2_clear_bit			test_and_clear_bit +#define ext2_test_bit			test_bit +#define ext2_find_first_zero_bit	find_first_zero_bit +#define ext2_find_next_zero_bit		find_next_zero_bit + +/* Bitmap functions for the minix filesystem. */ +#define minix_test_and_set_bit(nr, addr)	test_and_set_bit(nr, addr) +#define minix_set_bit(nr, addr)			set_bit(nr, addr) +#define minix_test_and_clear_bit(nr, addr)	test_and_clear_bit(nr, addr) +#define minix_test_bit(nr, addr)		test_bit(nr, addr) +#define minix_find_first_zero_bit(addr, size)	find_first_zero_bit(addr, size) + +#endif /* __KERNEL__ */ + +#endif /* _ARM_BITOPS_H */ diff --git a/roms/u-boot/arch/sandbox/include/asm/byteorder.h b/roms/u-boot/arch/sandbox/include/asm/byteorder.h new file mode 100644 index 00000000..ba3c1643 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/byteorder.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __ASM_SANDBOX_BYTEORDER_H +#define __ASM_SANDBOX_BYTEORDER_H + + +#include <asm/types.h> + +#if !defined(__STRICT_ANSI__) || defined(__KERNEL__) +#  define __BYTEORDER_HAS_U64__ +#  define __SWAB_64_THRU_32__ +#endif + +#ifdef CONFIG_SANDBOX_BIG_ENDIAN +#include <linux/byteorder/big_endian.h> +#else +#include <linux/byteorder/little_endian.h> +#endif + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/cache.h b/roms/u-boot/arch/sandbox/include/asm/cache.h new file mode 100644 index 00000000..d28c385e --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/cache.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __SANDBOX_CACHE_H__ +#define __SANDBOX_CACHE_H__ + +/* + * For native compilation of the sandbox we should still align + * the contents of stack buffers to something reasonable.  The + * GCC macro __BIGGEST_ALIGNMENT__ is defined to be the maximum + * required alignment for any basic type.  This seems reasonable. + */ +#define ARCH_DMA_MINALIGN	__BIGGEST_ALIGNMENT__ + +#endif /* __SANDBOX_CACHE_H__ */ diff --git a/roms/u-boot/arch/sandbox/include/asm/config.h b/roms/u-boot/arch/sandbox/include/asm/config.h new file mode 100644 index 00000000..6c1bff99 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/config.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _ASM_CONFIG_H_ +#define _ASM_CONFIG_H_ + +#define CONFIG_SYS_GENERIC_GLOBAL_DATA +#define CONFIG_SANDBOX_ARCH + +/* Used by drivers/spi/sandbox_spi.c and arch/sandbox/include/asm/state.h */ +#ifndef CONFIG_SANDBOX_SPI_MAX_BUS +#define CONFIG_SANDBOX_SPI_MAX_BUS 1 +#endif +#ifndef CONFIG_SANDBOX_SPI_MAX_CS +#define CONFIG_SANDBOX_SPI_MAX_CS 10 +#endif + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/errno.h b/roms/u-boot/arch/sandbox/include/asm/errno.h new file mode 100644 index 00000000..4c82b503 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/errno.h @@ -0,0 +1 @@ +#include <asm-generic/errno.h> diff --git a/roms/u-boot/arch/sandbox/include/asm/getopt.h b/roms/u-boot/arch/sandbox/include/asm/getopt.h new file mode 100644 index 00000000..3048c2cc --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/getopt.h @@ -0,0 +1,72 @@ +/* + * Code for setting up command line flags like `./u-boot --help` + * + * Copyright (c) 2011 The Chromium OS Authors. + * + * Licensed under the GPL-2 or later. + */ + +#ifndef __SANDBOX_GETOPT_H +#define __SANDBOX_GETOPT_H + +struct sandbox_state; + +/* + * Internal structure for storing details about the flag. + * Most people should not have to dig around in this as + * it only gets parsed by the core sandbox code.  End + * consumer code should focus on the macros below and + * the callback function. + */ +struct sandbox_cmdline_option { +	/* The long flag name: "help" for "--help" */ +	const char *flag; +	/* The (optional) short flag name: "h" for "-h" */ +	int flag_short; +	/* The help string shown to the user when processing --help */ +	const char *help; +	/* Whether this flag takes an argument */ +	int has_arg; +	/* Callback into the end consumer code with the option */ +	int (*callback)(struct sandbox_state *state, const char *opt); +}; + +/* + * Internal macro to expand the lower macros into the necessary + * magic junk that makes this all work. + */ +#define _SANDBOX_CMDLINE_OPT(f, s, ha, h) \ +	static struct sandbox_cmdline_option sandbox_cmdline_option_##f = { \ +		.flag = #f, \ +		.flag_short = s, \ +		.help = h, \ +		.has_arg = ha, \ +		.callback = sandbox_cmdline_cb_##f, \ +	}; \ +	/* Ppointer to the struct in a special section for the linker script */ \ +	static __attribute__((section(".u_boot_sandbox_getopt"), used)) \ +		struct sandbox_cmdline_option \ +			*sandbox_cmdline_option_##f##_ptr = \ +			&sandbox_cmdline_option_##f + +/** + * Macros for end code to declare new command line flags. + * + * @param f   The long flag name e.g. help + * @param ha  Does the flag have an argument e.g. 0/1 + * @param h   The help string displayed when showing --help + * + * This invocation: + *   SANDBOX_CMDLINE_OPT(foo, 0, "The foo arg"); + * Will create a new flag named "--foo" (no short option) that takes + * no argument.  If the user specifies "--foo", then the callback func + * sandbox_cmdline_cb_foo() will automatically be called. + */ +#define SANDBOX_CMDLINE_OPT(f, ha, h) _SANDBOX_CMDLINE_OPT(f, 0, ha, h) +/* + * Same as above, but @s is used to specify a short flag e.g. + *   SANDBOX_CMDLINE_OPT(foo, 'f', 0, "The foo arg"); + */ +#define SANDBOX_CMDLINE_OPT_SHORT(f, s, ha, h) _SANDBOX_CMDLINE_OPT(f, s, ha, h) + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/global_data.h b/roms/u-boot/arch/sandbox/include/asm/global_data.h new file mode 100644 index 00000000..b2e9b488 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/global_data.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * + * (C) Copyright 2002-2010 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef	__ASM_GBL_DATA_H +#define __ASM_GBL_DATA_H + +/* Architecture-specific global data */ +struct arch_global_data { +	uint8_t		*ram_buf;	/* emulated RAM buffer */ +}; + +#include <asm-generic/global_data.h> + +#define DECLARE_GLOBAL_DATA_PTR     extern gd_t *gd + +#endif /* __ASM_GBL_DATA_H */ diff --git a/roms/u-boot/arch/sandbox/include/asm/gpio.h b/roms/u-boot/arch/sandbox/include/asm/gpio.h new file mode 100644 index 00000000..95b59da6 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/gpio.h @@ -0,0 +1,61 @@ +/* + * This is the interface to the sandbox GPIO driver for test code which + * wants to change the GPIO values reported to U-Boot. + * + * Copyright (c) 2011 The Chromium OS Authors. + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __ASM_SANDBOX_GPIO_H +#define __ASM_SANDBOX_GPIO_H + +/* + * We use the generic interface, and add a back-channel. + * + * The back-channel functions are declared in this file. They should not be used + * except in test code. + * + * Test code can, for example, call sandbox_gpio_set_value() to set the value of + * a simulated GPIO. From then on, normal code in U-Boot will see this new + * value when it calls gpio_get_value(). + * + * NOTE: DO NOT use the functions in this file except in test code! + */ +#include <asm-generic/gpio.h> + +/** + * Return the simulated value of a GPIO (used only in sandbox test code) + * + * @param gp	GPIO number + * @return -1 on error, 0 if GPIO is low, >0 if high + */ +int sandbox_gpio_get_value(struct device *dev, unsigned int offset); + +/** + * Set the simulated value of a GPIO (used only in sandbox test code) + * + * @param gp	GPIO number + * @param value	value to set (0 for low, non-zero for high) + * @return -1 on error, 0 if ok + */ +int sandbox_gpio_set_value(struct device *dev, unsigned int offset, int value); + +/** + * Return the simulated direction of a GPIO (used only in sandbox test code) + * + * @param gp	GPIO number + * @return -1 on error, 0 if GPIO is input, >0 if output + */ +int sandbox_gpio_get_direction(struct device *dev, unsigned int offset); + +/** + * Set the simulated direction of a GPIO (used only in sandbox test code) + * + * @param gp	GPIO number + * @param output 0 to set as input, 1 to set as output + * @return -1 on error, 0 if ok + */ +int sandbox_gpio_set_direction(struct device *dev, unsigned int offset, +			       int output); + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/io.h b/roms/u-boot/arch/sandbox/include/asm/io.h new file mode 100644 index 00000000..79560411 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/io.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __SANDBOX_ASM_IO_H +#define __SANDBOX_ASM_IO_H + +/* + * Given a physical address and a length, return a virtual address + * that can be used to access the memory range with the caching + * properties specified by "flags". + */ +#define MAP_NOCACHE	(0) +#define MAP_WRCOMBINE	(0) +#define MAP_WRBACK	(0) +#define MAP_WRTHROUGH	(0) + +void *map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags); + +/* + * Take down a mapping set up by map_physmem(). + */ +static inline void unmap_physmem(void *vaddr, unsigned long flags) +{ + +} + +/* For sandbox, we want addresses to point into our RAM buffer */ +static inline void *map_sysmem(phys_addr_t paddr, unsigned long len) +{ +	return map_physmem(paddr, len, MAP_WRBACK); +} + +static inline void unmap_sysmem(const void *vaddr) +{ +} + +/* Map from a pointer to our RAM buffer */ +phys_addr_t map_to_sysmem(const void *ptr); + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/posix_types.h b/roms/u-boot/arch/sandbox/include/asm/posix_types.h new file mode 100644 index 00000000..ec18ed7e --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/posix_types.h @@ -0,0 +1,57 @@ +/* + *  linux/include/asm-arm/posix_types.h + * + *  Copyright (C) 1996-1998 Russell King. + * + * 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. + * + *  Changelog: + *   27-06-1996	RMK	Created + */ +#ifndef __ARCH_ARM_POSIX_TYPES_H +#define __ARCH_ARM_POSIX_TYPES_H + +/* + * This file is generally used by user-level software, so you need to + * be a little careful about namespace pollution etc.  Also, we cannot + * assume GCC is being used. + */ + +typedef unsigned short		__kernel_dev_t; +typedef unsigned long		__kernel_ino_t; +typedef unsigned short		__kernel_mode_t; +typedef unsigned short		__kernel_nlink_t; +typedef long			__kernel_off_t; +typedef int			__kernel_pid_t; +typedef unsigned short		__kernel_ipc_pid_t; +typedef unsigned short		__kernel_uid_t; +typedef unsigned short		__kernel_gid_t; +#if CONFIG_SANDBOX_BITS_PER_LONG == 32 +typedef unsigned int		__kernel_size_t; +typedef int			__kernel_ssize_t; +typedef int			__kernel_ptrdiff_t; +#else +typedef unsigned long		__kernel_size_t; +typedef long			__kernel_ssize_t; +typedef long			__kernel_ptrdiff_t; +#endif +typedef long			__kernel_time_t; +typedef long			__kernel_suseconds_t; +typedef long			__kernel_clock_t; +typedef int			__kernel_daddr_t; +typedef char			*__kernel_caddr_t; +typedef unsigned short		__kernel_uid16_t; +typedef unsigned short		__kernel_gid16_t; +typedef unsigned int		__kernel_uid32_t; +typedef unsigned int		__kernel_gid32_t; + +typedef unsigned short		__kernel_old_uid_t; +typedef unsigned short		__kernel_old_gid_t; + +#ifdef __GNUC__ +typedef long long		__kernel_loff_t; +#endif + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/ptrace.h b/roms/u-boot/arch/sandbox/include/asm/ptrace.h new file mode 100644 index 00000000..e9f552f4 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/ptrace.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __ASM_SANDBOX_PTRACE_H +#define __ASM_SANDBOX_PTRACE_H + +#ifndef __ASSEMBLY__ +/* This is not used in the sandbox architecture, but required by U-Boot */ +struct pt_regs { +}; + +#ifdef __KERNEL__ +extern void show_regs(struct pt_regs *); + +#endif + +#endif /* __ASSEMBLY__ */ + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/sdl.h b/roms/u-boot/arch/sandbox/include/asm/sdl.h new file mode 100644 index 00000000..6edec1ac --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/sdl.h @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2013 Google, Inc + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __SANDBOX_SDL_H +#define __SANDBOX_SDL_H + +#include <errno.h> + +#ifdef CONFIG_SANDBOX_SDL + +/** + * sandbox_sdl_init_display() - Set up SDL video ready for use + * + * @width:	Window width in pixels + * @height	Window height in pixels + * @log2_bpp:	Log to base 2 of the number of bits per pixel. So a 32bpp + *		display will pass 5, since 2*5 = 32 + * @return 0 if OK, -ENODEV if no device, -EIO if SDL failed to initialize + *		and -EPERM if the video failed to come up. + */ +int sandbox_sdl_init_display(int width, int height, int log2_bpp); + +/** + * sandbox_sdl_sync() - Sync current U-Boot LCD frame buffer to SDL + * + * This must be called periodically to update the screen for SDL so that the + * user can see it. + * + * @lcd_base: Base of frame buffer + * @return 0 if screen was updated, -ENODEV is there is no screen. + */ +int sandbox_sdl_sync(void *lcd_base); + +/** + * sandbox_sdl_scan_keys() - scan for pressed keys + * + * Works out which keys are pressed and returns a list + * + * @key:	Array to receive keycodes + * @max_keys:	Size of array + * @return number of keycodes found, 0 if none, -ENODEV if no keyboard + */ +int sandbox_sdl_scan_keys(int key[], int max_keys); + +/** + * sandbox_sdl_key_pressed() - check if a particular key is pressed + * + * @keycode:	Keycode to check (KEY_... - see include/linux/input.h + * @return 0 if pressed, -ENOENT if not pressed. -ENODEV if keybord not + * available, + */ +int sandbox_sdl_key_pressed(int keycode); + +/** + * sandbox_sdl_sound_start() - start playing a sound + * + * @frequency:	Frequency of sounds in Hertz + * @return 0 if OK, -ENODEV if no sound is available + */ +int sandbox_sdl_sound_start(uint frequency); + +/** + * sandbox_sdl_sound_stop() - stop playing a sound + * + * @return 0 if OK, -ENODEV if no sound is available + */ +int sandbox_sdl_sound_stop(void); + +/** + * sandbox_sdl_sound_init() - set up the sound system + * + * @return 0 if OK, -ENODEV if no sound is available + */ +int sandbox_sdl_sound_init(void); + +#else +static inline int sandbox_sdl_init_display(int width, int height, +					    int log2_bpp) +{ +	return -ENODEV; +} + +static inline int sandbox_sdl_sync(void *lcd_base) +{ +	return -ENODEV; +} + +static inline int sandbox_sdl_scan_keys(int key[], int max_keys) +{ +	return -ENODEV; +} + +static inline int sandbox_sdl_key_pressed(int keycode) +{ +	return -ENODEV; +} + +static inline int sandbox_sdl_sound_start(uint frequency) +{ +	return -ENODEV; +} + +static inline int sandbox_sdl_sound_stop(void) +{ +	return -ENODEV; +} + +static inline int sandbox_sdl_sound_init(void) +{ +	return -ENODEV; +} + +#endif + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/sections.h b/roms/u-boot/arch/sandbox/include/asm/sections.h new file mode 100644 index 00000000..fbc1bd11 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/sections.h @@ -0,0 +1,24 @@ +/* + * decls for symbols defined in the linker script + * + * Copyright (c) 2012 The Chromium OS Authors. + * + * Licensed under the GPL-2 or later. + */ + +#ifndef __SANDBOX_SECTIONS_H +#define __SANDBOX_SECTIONS_H + +#include <asm-generic/sections.h> + +struct sandbox_cmdline_option; + +extern struct sandbox_cmdline_option *__u_boot_sandbox_option_start[], +	*__u_boot_sandbox_option_end[]; + +static inline size_t __u_boot_sandbox_option_count(void) +{ +	return __u_boot_sandbox_option_end - __u_boot_sandbox_option_start; +} + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/spi.h b/roms/u-boot/arch/sandbox/include/asm/spi.h new file mode 100644 index 00000000..49b4a0f1 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/spi.h @@ -0,0 +1,58 @@ +/* + * Simulate a SPI port and clients (see README.sandbox for details) + * + * Copyright (c) 2011-2013 The Chromium OS Authors. + * See file CREDITS for list of people who contributed to this + * project. + * + * Licensed under the GPL-2 or later. + */ + +#ifndef __ASM_SPI_H__ +#define __ASM_SPI_H__ + +#include <linux/types.h> + +/* + * The interface between the SPI bus and the SPI client.  The bus will + * instantiate a client, and that then call into it via these entry + * points.  These should be enough for the client to emulate the SPI + * device just like the real hardware. + */ +struct sandbox_spi_emu_ops { +	/* The bus wants to instantiate a new client, so setup everything */ +	int (*setup)(void **priv, const char *spec); +	/* The bus is done with us, so break things down */ +	void (*free)(void *priv); +	/* The CS has been "activated" -- we won't worry about low/high */ +	void (*cs_activate)(void *priv); +	/* The CS has been "deactivated" -- we won't worry about low/high */ +	void (*cs_deactivate)(void *priv); +	/* The client is rx-ing bytes from the bus, so it should tx some */ +	int (*xfer)(void *priv, const u8 *rx, u8 *tx, uint bytes); +}; + +/* + * There are times when the data lines are allowed to tristate.  What + * is actually sensed on the line depends on the hardware.  It could + * always be 0xFF/0x00 (if there are pull ups/downs), or things could + * float and so we'd get garbage back.  This func encapsulates that + * scenario so we can worry about the details here. + */ +static inline void sandbox_spi_tristate(u8 *buf, uint len) +{ +	/* XXX: make this into a user config option ? */ +	memset(buf, 0xff, len); +} + +/* + * Extract the bus/cs from the spi spec and return the start of the spi + * client spec.  If the bus/cs are invalid for the current config, then + * it returns NULL. + * + * Example: arg="0:1:foo" will set bus to 0, cs to 1, and return "foo" + */ +const char *sandbox_spi_parse_spec(const char *arg, unsigned long *bus, +				   unsigned long *cs); + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/state.h b/roms/u-boot/arch/sandbox/include/asm/state.h new file mode 100644 index 00000000..d17a82e9 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/state.h @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2011-2012 The Chromium OS Authors. + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __SANDBOX_STATE_H +#define __SANDBOX_STATE_H + +#include <config.h> +#include <stdbool.h> +#include <linux/stringify.h> + +/* How we exited U-Boot */ +enum exit_type_id { +	STATE_EXIT_NORMAL, +	STATE_EXIT_COLD_REBOOT, +	STATE_EXIT_POWER_OFF, +}; + +/** + * Selects the behavior of the serial terminal. + * + * If Ctrl-C is processed by U-Boot, then the only way to quit sandbox is with + * the 'reset' command, or equivalent. + * + * If the terminal is cooked, then Ctrl-C will terminate U-Boot, and the + * command line will not be quite such a faithful emulation. + * + * Options are: + * + *	raw-with-sigs		- Raw, but allow signals (Ctrl-C will quit) + *	raw			- Terminal is always raw + *	cooked			- Terminal is always cooked + */ +enum state_terminal_raw { +	STATE_TERM_RAW_WITH_SIGS,	/* Default */ +	STATE_TERM_RAW, +	STATE_TERM_COOKED, + +	STATE_TERM_COUNT, +}; + +struct sandbox_spi_info { +	const char *spec; +	const struct sandbox_spi_emu_ops *ops; +}; + +/* The complete state of the test system */ +struct sandbox_state { +	const char *cmd;		/* Command to execute */ +	bool interactive;		/* Enable cmdline after execute */ +	const char *fdt_fname;		/* Filename of FDT binary */ +	enum exit_type_id exit_type;	/* How we exited U-Boot */ +	const char *parse_err;		/* Error to report from parsing */ +	int argc;			/* Program arguments */ +	char **argv;			/* Command line arguments */ +	const char *jumped_fname;	/* Jumped from previous U_Boot */ +	uint8_t *ram_buf;		/* Emulated RAM buffer */ +	unsigned int ram_size;		/* Size of RAM buffer */ +	const char *ram_buf_fname;	/* Filename to use for RAM buffer */ +	bool ram_buf_rm;		/* Remove RAM buffer file after read */ +	bool write_ram_buf;		/* Write RAM buffer on exit */ +	const char *state_fname;	/* File containing sandbox state */ +	void *state_fdt;		/* Holds saved state for sandbox */ +	bool read_state;		/* Read sandbox state on startup */ +	bool write_state;		/* Write sandbox state on exit */ +	bool ignore_missing_state_on_read;	/* No error if state missing */ +	bool show_lcd;			/* Show LCD on start-up */ +	enum state_terminal_raw term_raw;	/* Terminal raw/cooked */ + +	/* Pointer to information for each SPI bus/cs */ +	struct sandbox_spi_info spi[CONFIG_SANDBOX_SPI_MAX_BUS] +					[CONFIG_SANDBOX_SPI_MAX_CS]; +}; + +/* Minimum space we guarantee in the state FDT when calling read/write*/ +#define SANDBOX_STATE_MIN_SPACE		0x1000 + +/** + * struct sandbox_state_io - methods to saved/restore sandbox state + * @name: Name of of the device tree node, also the name of the variable + *	holding this data so it should be an identifier (use underscore + *	instead of minus) + * @compat: Compatible string for the node containing this state + * + * @read: Function to read state from FDT + *	If data is available, then blob and node will provide access to it. If + *	not (blob == NULL and node == -1) this function should set up an empty + *	data set for start-of-day. + *	@param blob: Pointer to device tree blob, or NULL if no data to read + *	@param node: Node offset to read from + *	@return 0 if OK, -ve on error + * + * @write: Function to write state to FDT + *	The caller will ensure that there is a node ready for the state. The + *	node may already contain the old state, in which case it should be + *	overridden. There is guaranteed to be SANDBOX_STATE_MIN_SPACE bytes + *	of free space, so error checking is not required for fdt_setprop...() + *	calls which add up to less than this much space. + * + *	For adding larger properties, use state_setprop(). + * + * @param blob: Device tree blob holding state + * @param node: Node to write our state into + * + * Note that it is possible to save data as large blobs or as individual + * hierarchical properties. However, unless you intend to keep state files + * around for a long time and be able to run an old state file on a new + * sandbox, it might not be worth using individual properties for everything. + * This is certainly supported, it is just a matter of the effort you wish + * to put into the state read/write feature. + */ +struct sandbox_state_io { +	const char *name; +	const char *compat; +	int (*write)(void *blob, int node); +	int (*read)(const void *blob, int node); +}; + +/** + * SANDBOX_STATE_IO - Declare sandbox state to read/write + * + * Sandbox permits saving state from one run and restoring it in another. This + * allows the test system to retain state between runs and thus better + * emulate a real system. Examples of state that might be useful to save are + * the emulated GPIOs pin settings, flash memory contents and TPM private + * data. U-Boot memory contents is dealth with separately since it is large + * and it is not normally useful to save it (since a normal system does not + * preserve DRAM between runs). See the '-m' option for this. + * + * See struct sandbox_state_io above for member documentation. + */ +#define SANDBOX_STATE_IO(_name, _compat, _read, _write) \ +	ll_entry_declare(struct sandbox_state_io, _name, state_io) = { \ +		.name = __stringify(_name), \ +		.read = _read, \ +		.write = _write, \ +		.compat = _compat, \ +	} + +/** + * Record the exit type to be reported by the test program. + * + * @param exit_type	Exit type to record + */ +void state_record_exit(enum exit_type_id exit_type); + +/** + * Gets a pointer to the current state. + * + * @return pointer to state + */ +struct sandbox_state *state_get_current(void); + +/** + * Read the sandbox state from the supplied device tree file + * + * This calls all registered state handlers to read in the sandbox state + * from a previous test run. + * + * @param state		Sandbox state to update + * @param fname		Filename of device tree file to read from + * @return 0 if OK, -ve on error + */ +int sandbox_read_state(struct sandbox_state *state, const char *fname); + +/** + * Write the sandbox state to the supplied device tree file + * + * This calls all registered state handlers to write out the sandbox state + * so that it can be preserved for a future test run. + * + * If the file exists it is overwritten. + * + * @param state		Sandbox state to update + * @param fname		Filename of device tree file to write to + * @return 0 if OK, -ve on error + */ +int sandbox_write_state(struct sandbox_state *state, const char *fname); + +/** + * Add a property to a sandbox state node + * + * This is equivalent to fdt_setprop except that it automatically enlarges + * the device tree if necessary. That means it is safe to write any amount + * of data here. + * + * This function can only be called from within struct sandbox_state_io's + * ->write method, i.e. within state I/O drivers. + * + * @param node		Device tree node to write to + * @param prop_name	Property to write + * @param data		Data to write into property + * @param size		Size of data to write into property + */ +int state_setprop(int node, const char *prop_name, const void *data, int size); + +/** + * Initialize the test system state + */ +int state_init(void); + +/** + * Uninitialize the test system state, writing out state if configured to + * do so. + * + * @return 0 if OK, -ve on error + */ +int state_uninit(void); + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/string.h b/roms/u-boot/arch/sandbox/include/asm/string.h new file mode 100644 index 00000000..f247ff3b --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/string.h @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <linux/string.h> diff --git a/roms/u-boot/arch/sandbox/include/asm/system.h b/roms/u-boot/arch/sandbox/include/asm/system.h new file mode 100644 index 00000000..066acc53 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/system.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __ASM_SANDBOX_SYSTEM_H +#define __ASM_SANDBOX_SYSTEM_H + +/* Define this as nops for sandbox architecture */ +static inline void local_irq_save(unsigned flags __attribute__((unused))) +{ +} + +#define local_irq_enable() +#define local_irq_disable() +#define local_save_flags(x) +#define local_irq_restore(x) + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/types.h b/roms/u-boot/arch/sandbox/include/asm/types.h new file mode 100644 index 00000000..6d3eb1f3 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/types.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef __ASM_SANDBOX_TYPES_H +#define __ASM_SANDBOX_TYPES_H + +typedef unsigned short umode_t; + +/* + * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the + * header files exported to user space + */ + +typedef __signed__ char __s8; +typedef unsigned char __u8; + +typedef __signed__ short __s16; +typedef unsigned short __u16; + +typedef __signed__ int __s32; +typedef unsigned int __u32; + +#if defined(__GNUC__) +__extension__ typedef __signed__ long long __s64; +__extension__ typedef unsigned long long __u64; +#endif + +/* + * These aren't exported outside the kernel to avoid name space clashes + */ +#ifdef __KERNEL__ + +typedef signed char s8; +typedef unsigned char u8; + +typedef signed short s16; +typedef unsigned short u16; + +typedef signed int s32; +typedef unsigned int u32; + +typedef signed long long s64; +typedef unsigned long long u64; + +#define BITS_PER_LONG	CONFIG_SANDBOX_BITS_PER_LONG + +typedef unsigned long dma_addr_t; +typedef u32 phys_addr_t; +typedef u32 phys_size_t; + +#endif /* __KERNEL__ */ + +#endif diff --git a/roms/u-boot/arch/sandbox/include/asm/u-boot-sandbox.h b/roms/u-boot/arch/sandbox/include/asm/u-boot-sandbox.h new file mode 100644 index 00000000..d2f1b656 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/u-boot-sandbox.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Marius Groeger <mgroeger@sysgo.de> + * + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Alex Zuepke <azu@sysgo.de> + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#ifndef _U_BOOT_SANDBOX_H_ +#define _U_BOOT_SANDBOX_H_ + +/* board/.../... */ +int board_init(void); +int dram_init(void); + +/* start.c */ +int sandbox_early_getopt_check(void); +int sandbox_main_loop_init(void); + +int cleanup_before_linux(void); + +/* drivers/video/sandbox_sdl.c */ +int sandbox_lcd_sdl_early_init(void); + +#endif	/* _U_BOOT_SANDBOX_H_ */ diff --git a/roms/u-boot/arch/sandbox/include/asm/u-boot.h b/roms/u-boot/arch/sandbox/include/asm/u-boot.h new file mode 100644 index 00000000..8279894e --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/u-boot.h @@ -0,0 +1,29 @@ +/* + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Marius Groeger <mgroeger@sysgo.de> + * + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Alex Zuepke <azu@sysgo.de> + * + * SPDX-License-Identifier:	GPL-2.0+ + * + ******************************************************************** + * NOTE: This header file defines an interface to U-Boot. Including + * this (unmodified) header file in another file is considered normal + * use of U-Boot, and does *not* fall under the heading of "derived + * work". + ******************************************************************** + */ + +#ifndef _U_BOOT_H_ +#define _U_BOOT_H_	1 + +/* Use the generic board which requires a unified bd_info */ +#include <asm-generic/u-boot.h> + +/* For image.h:image_check_target_arch() */ +#define IH_ARCH_DEFAULT IH_ARCH_SANDBOX + +#endif	/* _U_BOOT_H_ */ diff --git a/roms/u-boot/arch/sandbox/include/asm/unaligned.h b/roms/u-boot/arch/sandbox/include/asm/unaligned.h new file mode 100644 index 00000000..e5298049 --- /dev/null +++ b/roms/u-boot/arch/sandbox/include/asm/unaligned.h @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2011 The Chromium OS Authors. + * + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <asm-generic/unaligned.h>  | 
