1e3c58b02Sken kuo /* 2e3c58b02Sken kuo * linux/arch/nds32/include/asm/setup.h 3e3c58b02Sken kuo * 4e3c58b02Sken kuo * Copyright (C) 1997-1999 Russell King 5e3c58b02Sken kuo * Copyright (C) 2008 Andes Technology Corporation 6e3c58b02Sken kuo * Copyright (C) 2013 Ken Kuo (ken_kuo@andestech.com) 7e3c58b02Sken kuo * 8*99ca91b6STom Rini * SPDX-License-Identifier: GPL-2.0 9e3c58b02Sken kuo * 10e3c58b02Sken kuo * Structure passed to kernel to tell it about the 11e3c58b02Sken kuo * hardware it's running on. See Documentation/arm/Setup 12e3c58b02Sken kuo * for more info. 13e3c58b02Sken kuo */ 14e3c58b02Sken kuo #ifndef __ASMNDS32_SETUP_H 15e3c58b02Sken kuo #define __ASMNDS32_SETUP_H 16e3c58b02Sken kuo 17e3c58b02Sken kuo #define COMMAND_LINE_SIZE 256 18e3c58b02Sken kuo 19e3c58b02Sken kuo /* The list ends with an ATAG_NONE node. */ 20e3c58b02Sken kuo #define ATAG_NONE 0x00000000 21e3c58b02Sken kuo 22e3c58b02Sken kuo struct tag_header { 23e3c58b02Sken kuo u32 size; 24e3c58b02Sken kuo u32 tag; 25e3c58b02Sken kuo }; 26e3c58b02Sken kuo 27e3c58b02Sken kuo /* The list must start with an ATAG_CORE node */ 28e3c58b02Sken kuo #define ATAG_CORE 0x54410001 29e3c58b02Sken kuo 30e3c58b02Sken kuo struct tag_core { 31e3c58b02Sken kuo u32 flags; /* bit 0 = read-only */ 32e3c58b02Sken kuo u32 pagesize; 33e3c58b02Sken kuo u32 rootdev; 34e3c58b02Sken kuo }; 35e3c58b02Sken kuo 36e3c58b02Sken kuo /* it is allowed to have multiple ATAG_MEM nodes */ 37e3c58b02Sken kuo #define ATAG_MEM 0x54410002 38e3c58b02Sken kuo 39e3c58b02Sken kuo struct tag_mem32 { 40e3c58b02Sken kuo u32 size; 41e3c58b02Sken kuo u32 start; /* physical start address */ 42e3c58b02Sken kuo }; 43e3c58b02Sken kuo 44e3c58b02Sken kuo /* VGA text type displays */ 45e3c58b02Sken kuo #define ATAG_VIDEOTEXT 0x54410003 46e3c58b02Sken kuo 47e3c58b02Sken kuo struct tag_videotext { 48e3c58b02Sken kuo u8 x; 49e3c58b02Sken kuo u8 y; 50e3c58b02Sken kuo u16 video_page; 51e3c58b02Sken kuo u8 video_mode; 52e3c58b02Sken kuo u8 video_cols; 53e3c58b02Sken kuo u16 video_ega_bx; 54e3c58b02Sken kuo u8 video_lines; 55e3c58b02Sken kuo u8 video_isvga; 56e3c58b02Sken kuo u16 video_points; 57e3c58b02Sken kuo }; 58e3c58b02Sken kuo 59e3c58b02Sken kuo /* describes how the ramdisk will be used in kernel */ 60e3c58b02Sken kuo #define ATAG_RAMDISK 0x54410004 61e3c58b02Sken kuo 62e3c58b02Sken kuo struct tag_ramdisk { 63e3c58b02Sken kuo u32 flags; /* bit 0 = load, bit 1 = prompt */ 64e3c58b02Sken kuo u32 size; /* decompressed ramdisk size in _kilo_ bytes */ 65e3c58b02Sken kuo u32 start; /* starting block of floppy-based RAM disk image */ 66e3c58b02Sken kuo }; 67e3c58b02Sken kuo 68e3c58b02Sken kuo /* 69e3c58b02Sken kuo * this one accidentally used virtual addresses - as such, 70e3c58b02Sken kuo * it's deprecated. 71e3c58b02Sken kuo * describes where the compressed ramdisk image lives (virtual address) 72e3c58b02Sken kuo */ 73e3c58b02Sken kuo #define ATAG_INITRD 0x54410005 74e3c58b02Sken kuo 75e3c58b02Sken kuo /* describes where the compressed ramdisk image lives (physical address) */ 76e3c58b02Sken kuo #define ATAG_INITRD2 0x54420005 77e3c58b02Sken kuo 78e3c58b02Sken kuo struct tag_initrd { 79e3c58b02Sken kuo u32 start; /* physical start address */ 80e3c58b02Sken kuo u32 size; /* size of compressed ramdisk image in bytes */ 81e3c58b02Sken kuo }; 82e3c58b02Sken kuo 83e3c58b02Sken kuo /* board serial number. "64 bits should be enough for everybody" */ 84e3c58b02Sken kuo #define ATAG_SERIAL 0x54410006 85e3c58b02Sken kuo 86e3c58b02Sken kuo struct tag_serialnr { 87e3c58b02Sken kuo u32 low; 88e3c58b02Sken kuo u32 high; 89e3c58b02Sken kuo }; 90e3c58b02Sken kuo 91e3c58b02Sken kuo /* board revision */ 92e3c58b02Sken kuo #define ATAG_REVISION 0x54410007 93e3c58b02Sken kuo 94e3c58b02Sken kuo struct tag_revision { 95e3c58b02Sken kuo u32 rev; 96e3c58b02Sken kuo }; 97e3c58b02Sken kuo 98e3c58b02Sken kuo /* initial values for vesafb-type framebuffers. see struct screen_info 99e3c58b02Sken kuo * in include/linux/tty.h 100e3c58b02Sken kuo */ 101e3c58b02Sken kuo #define ATAG_VIDEOLFB 0x54410008 102e3c58b02Sken kuo 103e3c58b02Sken kuo struct tag_videolfb { 104e3c58b02Sken kuo u16 lfb_width; 105e3c58b02Sken kuo u16 lfb_height; 106e3c58b02Sken kuo u16 lfb_depth; 107e3c58b02Sken kuo u16 lfb_linelength; 108e3c58b02Sken kuo u32 lfb_base; 109e3c58b02Sken kuo u32 lfb_size; 110e3c58b02Sken kuo u8 red_size; 111e3c58b02Sken kuo u8 red_pos; 112e3c58b02Sken kuo u8 green_size; 113e3c58b02Sken kuo u8 green_pos; 114e3c58b02Sken kuo u8 blue_size; 115e3c58b02Sken kuo u8 blue_pos; 116e3c58b02Sken kuo u8 rsvd_size; 117e3c58b02Sken kuo u8 rsvd_pos; 118e3c58b02Sken kuo }; 119e3c58b02Sken kuo 120e3c58b02Sken kuo /* command line: \0 terminated string */ 121e3c58b02Sken kuo #define ATAG_CMDLINE 0x54410009 122e3c58b02Sken kuo 123e3c58b02Sken kuo struct tag_cmdline { 124e3c58b02Sken kuo char cmdline[COMMAND_LINE_SIZE]; 125e3c58b02Sken kuo }; 126e3c58b02Sken kuo 127e3c58b02Sken kuo struct tag { 128e3c58b02Sken kuo struct tag_header hdr; 129e3c58b02Sken kuo union { 130e3c58b02Sken kuo struct tag_core core; 131e3c58b02Sken kuo struct tag_mem32 mem; 132e3c58b02Sken kuo struct tag_videotext videotext; 133e3c58b02Sken kuo struct tag_ramdisk ramdisk; 134e3c58b02Sken kuo struct tag_initrd initrd; 135e3c58b02Sken kuo struct tag_serialnr serialnr; 136e3c58b02Sken kuo struct tag_revision revision; 137e3c58b02Sken kuo struct tag_videolfb videolfb; 138e3c58b02Sken kuo struct tag_cmdline cmdline; 139e3c58b02Sken kuo } u; 140e3c58b02Sken kuo }; 141e3c58b02Sken kuo 142e3c58b02Sken kuo struct tagtable { 143e3c58b02Sken kuo u32 tag; 144e3c58b02Sken kuo int (*parse)(const struct tag *); 145e3c58b02Sken kuo }; 146e3c58b02Sken kuo 147e3c58b02Sken kuo #define tag_member_present(tag, member) \ 148e3c58b02Sken kuo ((unsigned long)(&((struct tag *)0L)->member + 1) \ 149e3c58b02Sken kuo <= (tag)->hdr.size * 4) 150e3c58b02Sken kuo 151e3c58b02Sken kuo #define tag_next(t) ((struct tag *)((u32 *)(t) + (t)->hdr.size)) 152e3c58b02Sken kuo #define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2) 153e3c58b02Sken kuo 154e3c58b02Sken kuo #define for_each_tag(t, base) \ 155e3c58b02Sken kuo for (t = base; t->hdr.size; t = tag_next(t)) 156e3c58b02Sken kuo 157e3c58b02Sken kuo #ifdef __KERNEL__ 158e3c58b02Sken kuo 159e3c58b02Sken kuo #define __tag __used __attribute__((__section__(".taglist"))) 160e3c58b02Sken kuo #define __tagtable(tag, fn) \ 161e3c58b02Sken kuo static struct tagtable __tagtable_##fn __tag = { tag, fn } 162e3c58b02Sken kuo 163e3c58b02Sken kuo /* 164e3c58b02Sken kuo * Memory map description 165e3c58b02Sken kuo */ 166e3c58b02Sken kuo #define NR_BANKS 8 167e3c58b02Sken kuo 168e3c58b02Sken kuo struct meminfo { 169e3c58b02Sken kuo int nr_banks; 170e3c58b02Sken kuo struct { 171e3c58b02Sken kuo unsigned long start; 172e3c58b02Sken kuo unsigned long size; 173e3c58b02Sken kuo int node; 174e3c58b02Sken kuo } bank[NR_BANKS]; 175e3c58b02Sken kuo }; 176e3c58b02Sken kuo 177e3c58b02Sken kuo /* 178e3c58b02Sken kuo * Early command line parameters. 179e3c58b02Sken kuo */ 180e3c58b02Sken kuo struct early_params { 181e3c58b02Sken kuo const char *arg; 182e3c58b02Sken kuo void (*fn)(char **p); 183e3c58b02Sken kuo }; 184e3c58b02Sken kuo 185e3c58b02Sken kuo #define __early_param(name, fn) \ 186e3c58b02Sken kuo static struct early_params __early_##fn __used \ 187e3c58b02Sken kuo __attribute__((__section__("__early_param"))) = { name, fn } 188e3c58b02Sken kuo 189e3c58b02Sken kuo #endif 190e3c58b02Sken kuo #endif 191