/* * Copyright (C) 2008 The Android Open Source Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifndef _BOOT_H_ #define _BOOT_H_ static inline void DWB(void) /* drain write buffer */ { asm volatile ( "mcr p15, 0, %0, c7, c10, 4\n" : : "r" (0) ); } static inline void writel(unsigned val, unsigned addr) { DWB(); (*(volatile unsigned *) (addr)) = (val); DWB(); } static inline void writeb(unsigned val, unsigned addr) { DWB(); (*(volatile unsigned char *) (addr)) = (val); DWB(); } static inline unsigned readl(unsigned addr) { return (*(volatile unsigned *) (addr)); } int dcc_putc(unsigned c); int dcc_getc(); void enable_irq(void); /* main.c */ enum boot_keys { BOOT_KEY_STOP_BOOT = 1, BOOT_KEY_CONTINUE_BOOT = 2, }; extern void key_changed(unsigned int key, unsigned int is_down) __attribute__ ((weak)); /* manage a list of functions to call */ void boot_register_poll_func(void (*func)(void)); void boot_poll(void); /* console.c */ void dcc_init(); void dprintf(const char *fmt, ...); void dprintf_set_putc(void (*func)(unsigned)); void dprintf_set_flush(void (*func)(void)); /* gpio */ void gpio_output_enable(unsigned n, unsigned out); void gpio_write(unsigned n, unsigned on); int gpio_read(unsigned n); /* misc.c */ void *alloc(unsigned sz); /* alloc 32byte aligned memory */ void *alloc_page_aligned(unsigned sz); void *memcpy(void *dst, const void *src, unsigned len); void *memset(void *dst, unsigned val, unsigned len); char *strcpy(char *dst, const char *src); int strcmp(const char *s1, const char *s2); int memcmp(const void *a, const void *b, unsigned len); char *strstr(const char *s1, const char *s2); int strlen(const char *s); /* clock */ unsigned cycles_per_second(void); void print_cpu_speed(void); void arm11_clock_init(void); void mdelay(unsigned msecs); void udelay(unsigned usecs); /* LCD */ void console_init(void); void console_set_colors(unsigned bg, unsigned fg); void console_clear(void); void console_putc(unsigned n); void console_flush(void); void cprintf(const char *fmt, ...); void mddi_init(void); void mddi_start_update(void); int mddi_update_done(void); void *mddi_framebuffer(void); void mddi_remote_write(unsigned val, unsigned reg); extern unsigned fb_width; extern unsigned fb_height; /* provided by board files */ void set_led(int on); /* provided by jtag.c */ void jtag_okay(const char *msg); void jtag_fail(const char *msg); void jtag_dputc(unsigned ch); void jtag_cmd_loop(void (*do_cmd)(const char *, unsigned, unsigned, unsigned)); typedef void (*irq_handler)(unsigned n); #define DIGEST_SIZE 20 #define SIGNATURE_SIZE 256 void compute_digest(void *data, unsigned len, void *digest_out); int is_signature_okay(void *digest, void *signature, void *pubkey); #if 0 #define __attr_used __attribute__((used)) #define __attr_init __attribute__((__section__(".init.func.0"))) #define boot_init_hook(func) \ static int (*__boot_init_hook__)(void) __attr_used __attr_init = func #endif #endif