uboot/arch/avr32/include/asm/setup.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2004-2006 Atmel Corporation
   3 *
   4 * Based on linux/include/asm-arm/setup.h
   5 *   Copyright (C) 1997-1999 Russel King
   6 *
   7 * See file CREDITS for list of people who contributed to this
   8 * project.
   9 *
  10 * This program is free software; you can redistribute it and/or
  11 * modify it under the terms of the GNU General Public License as
  12 * published by the Free Software Foundation; either version 2 of
  13 * the License, or (at your option) any later version.
  14 *
  15 * This program is distributed in the hope that it will be useful,
  16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18 * GNU General Public License for more details.
  19 *
  20 * You should have received a copy of the GNU General Public License
  21 * along with this program; if not, write to the Free Software
  22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  23 * MA 02111-1307 USA
  24 */
  25#ifndef __ASM_AVR32_SETUP_H__
  26#define __ASM_AVR32_SETUP_H__
  27
  28#define COMMAND_LINE_SIZE 256
  29
  30/* Magic number indicating that a tag table is present */
  31#define ATAG_MAGIC      0xa2a25441
  32
  33#ifndef __ASSEMBLY__
  34
  35/*
  36 * Generic memory range, used by several tags.
  37 *
  38 *   addr is always physical.
  39 *   size is measured in bytes.
  40 *   next is for use by the OS, e.g. for grouping regions into
  41 *        linked lists.
  42 */
  43struct tag_mem_range {
  44        u32                     addr;
  45        u32                     size;
  46        struct tag_mem_range *  next;
  47};
  48
  49/* The list ends with an ATAG_NONE node. */
  50#define ATAG_NONE       0x00000000
  51
  52struct tag_header {
  53        u32 size;
  54        u32 tag;
  55};
  56
  57/* The list must start with an ATAG_CORE node */
  58#define ATAG_CORE       0x54410001
  59
  60struct tag_core {
  61        u32 flags;
  62        u32 pagesize;
  63        u32 rootdev;
  64};
  65
  66/* it is allowed to have multiple ATAG_MEM nodes */
  67#define ATAG_MEM        0x54410002
  68/* ATAG_MEM uses tag_mem_range */
  69
  70/* command line: \0 terminated string */
  71#define ATAG_CMDLINE    0x54410003
  72
  73struct tag_cmdline {
  74        char    cmdline[1];     /* this is the minimum size */
  75};
  76
  77/* Ramdisk image (may be compressed) */
  78#define ATAG_RDIMG      0x54410004
  79/* ATAG_RDIMG uses tag_mem_range */
  80
  81/* Information about various clocks present in the system */
  82#define ATAG_CLOCK      0x54410005
  83
  84struct tag_clock {
  85        u32     clock_id;       /* Which clock are we talking about? */
  86        u32     clock_flags;    /* Special features */
  87        u64     clock_hz;       /* Clock speed in Hz */
  88};
  89
  90/* The clock types we know about */
  91#define ACLOCK_BOOTCPU  0       /* The CPU we're booting from */
  92#define ACLOCK_HSB      1       /* Deprecated */
  93
  94/* Memory reserved for the system (e.g. the bootloader) */
  95#define ATAG_RSVD_MEM   0x54410006
  96/* ATAG_RSVD_MEM uses tag_mem_range */
  97
  98/* Ethernet information */
  99
 100#define ATAG_ETHERNET   0x54410007
 101
 102struct tag_ethernet {
 103        u8      mac_index;
 104        u8      mii_phy_addr;
 105        u8      hw_address[6];
 106};
 107
 108#define AETH_INVALID_PHY        0xff
 109
 110struct tag {
 111        struct tag_header hdr;
 112        union {
 113                struct tag_core core;
 114                struct tag_mem_range mem_range;
 115                struct tag_cmdline cmdline;
 116                struct tag_clock clock;
 117                struct tag_ethernet ethernet;
 118        } u;
 119};
 120
 121struct tagtable {
 122        u32     tag;
 123        int     (*parse)(struct tag *);
 124};
 125
 126#define __tag __attribute_used__ __attribute__((__section__(".taglist")))
 127#define __tagtable(tag, fn)                                             \
 128        static struct tagtable __tagtable_##fn __tag = { tag, fn }
 129
 130#define tag_member_present(tag,member)                                  \
 131        ((unsigned long)(&((struct tag *)0L)->member + 1)               \
 132         <= (tag)->hdr.size * 4)
 133
 134#define tag_next(t)     ((struct tag *)((u32 *)(t) + (t)->hdr.size))
 135#define tag_size(type)  ((sizeof(struct tag_header) + sizeof(struct type)) >> 2)
 136
 137#define for_each_tag(t,base)                                            \
 138        for (t = base; t->hdr.size; t = tag_next(t))
 139
 140#endif /* !__ASSEMBLY__ */
 141
 142#endif /* __ASM_AVR32_SETUP_H__ */
 143