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