162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * linux/include/asm/setup.h 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 1997-1999 Russell King 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * This program is free software; you can redistribute it and/or modify 862306a36Sopenharmony_ci * it under the terms of the GNU General Public License version 2 as 962306a36Sopenharmony_ci * published by the Free Software Foundation. 1062306a36Sopenharmony_ci * 1162306a36Sopenharmony_ci * Structure passed to kernel to tell it about the 1262306a36Sopenharmony_ci * hardware it's running on. See Documentation/arch/arm/setup.rst 1362306a36Sopenharmony_ci * for more info. 1462306a36Sopenharmony_ci */ 1562306a36Sopenharmony_ci#ifndef _UAPI__ASMARM_SETUP_H 1662306a36Sopenharmony_ci#define _UAPI__ASMARM_SETUP_H 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#include <linux/types.h> 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#define COMMAND_LINE_SIZE 1024 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci/* The list ends with an ATAG_NONE node. */ 2362306a36Sopenharmony_ci#define ATAG_NONE 0x00000000 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cistruct tag_header { 2662306a36Sopenharmony_ci __u32 size; 2762306a36Sopenharmony_ci __u32 tag; 2862306a36Sopenharmony_ci}; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci/* The list must start with an ATAG_CORE node */ 3162306a36Sopenharmony_ci#define ATAG_CORE 0x54410001 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistruct tag_core { 3462306a36Sopenharmony_ci __u32 flags; /* bit 0 = read-only */ 3562306a36Sopenharmony_ci __u32 pagesize; 3662306a36Sopenharmony_ci __u32 rootdev; 3762306a36Sopenharmony_ci}; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci/* it is allowed to have multiple ATAG_MEM nodes */ 4062306a36Sopenharmony_ci#define ATAG_MEM 0x54410002 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cistruct tag_mem32 { 4362306a36Sopenharmony_ci __u32 size; 4462306a36Sopenharmony_ci __u32 start; /* physical start address */ 4562306a36Sopenharmony_ci}; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci/* VGA text type displays */ 4862306a36Sopenharmony_ci#define ATAG_VIDEOTEXT 0x54410003 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_cistruct tag_videotext { 5162306a36Sopenharmony_ci __u8 x; 5262306a36Sopenharmony_ci __u8 y; 5362306a36Sopenharmony_ci __u16 video_page; 5462306a36Sopenharmony_ci __u8 video_mode; 5562306a36Sopenharmony_ci __u8 video_cols; 5662306a36Sopenharmony_ci __u16 video_ega_bx; 5762306a36Sopenharmony_ci __u8 video_lines; 5862306a36Sopenharmony_ci __u8 video_isvga; 5962306a36Sopenharmony_ci __u16 video_points; 6062306a36Sopenharmony_ci}; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci/* describes how the ramdisk will be used in kernel */ 6362306a36Sopenharmony_ci#define ATAG_RAMDISK 0x54410004 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_cistruct tag_ramdisk { 6662306a36Sopenharmony_ci __u32 flags; /* bit 0 = load, bit 1 = prompt */ 6762306a36Sopenharmony_ci __u32 size; /* decompressed ramdisk size in _kilo_ bytes */ 6862306a36Sopenharmony_ci __u32 start; /* starting block of floppy-based RAM disk image */ 6962306a36Sopenharmony_ci}; 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci/* describes where the compressed ramdisk image lives (virtual address) */ 7262306a36Sopenharmony_ci/* 7362306a36Sopenharmony_ci * this one accidentally used virtual addresses - as such, 7462306a36Sopenharmony_ci * it's deprecated. 7562306a36Sopenharmony_ci */ 7662306a36Sopenharmony_ci#define ATAG_INITRD 0x54410005 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci/* describes where the compressed ramdisk image lives (physical address) */ 7962306a36Sopenharmony_ci#define ATAG_INITRD2 0x54420005 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_cistruct tag_initrd { 8262306a36Sopenharmony_ci __u32 start; /* physical start address */ 8362306a36Sopenharmony_ci __u32 size; /* size of compressed ramdisk image in bytes */ 8462306a36Sopenharmony_ci}; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci/* board serial number. "64 bits should be enough for everybody" */ 8762306a36Sopenharmony_ci#define ATAG_SERIAL 0x54410006 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_cistruct tag_serialnr { 9062306a36Sopenharmony_ci __u32 low; 9162306a36Sopenharmony_ci __u32 high; 9262306a36Sopenharmony_ci}; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci/* board revision */ 9562306a36Sopenharmony_ci#define ATAG_REVISION 0x54410007 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_cistruct tag_revision { 9862306a36Sopenharmony_ci __u32 rev; 9962306a36Sopenharmony_ci}; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci/* initial values for vesafb-type framebuffers. see struct screen_info 10262306a36Sopenharmony_ci * in include/linux/tty.h 10362306a36Sopenharmony_ci */ 10462306a36Sopenharmony_ci#define ATAG_VIDEOLFB 0x54410008 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_cistruct tag_videolfb { 10762306a36Sopenharmony_ci __u16 lfb_width; 10862306a36Sopenharmony_ci __u16 lfb_height; 10962306a36Sopenharmony_ci __u16 lfb_depth; 11062306a36Sopenharmony_ci __u16 lfb_linelength; 11162306a36Sopenharmony_ci __u32 lfb_base; 11262306a36Sopenharmony_ci __u32 lfb_size; 11362306a36Sopenharmony_ci __u8 red_size; 11462306a36Sopenharmony_ci __u8 red_pos; 11562306a36Sopenharmony_ci __u8 green_size; 11662306a36Sopenharmony_ci __u8 green_pos; 11762306a36Sopenharmony_ci __u8 blue_size; 11862306a36Sopenharmony_ci __u8 blue_pos; 11962306a36Sopenharmony_ci __u8 rsvd_size; 12062306a36Sopenharmony_ci __u8 rsvd_pos; 12162306a36Sopenharmony_ci}; 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci/* command line: \0 terminated string */ 12462306a36Sopenharmony_ci#define ATAG_CMDLINE 0x54410009 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_cistruct tag_cmdline { 12762306a36Sopenharmony_ci char cmdline[1]; /* this is the minimum size */ 12862306a36Sopenharmony_ci}; 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci/* acorn RiscPC specific information */ 13162306a36Sopenharmony_ci#define ATAG_ACORN 0x41000101 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_cistruct tag_acorn { 13462306a36Sopenharmony_ci __u32 memc_control_reg; 13562306a36Sopenharmony_ci __u32 vram_pages; 13662306a36Sopenharmony_ci __u8 sounddefault; 13762306a36Sopenharmony_ci __u8 adfsdrives; 13862306a36Sopenharmony_ci}; 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci/* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */ 14162306a36Sopenharmony_ci#define ATAG_MEMCLK 0x41000402 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_cistruct tag_memclk { 14462306a36Sopenharmony_ci __u32 fmemclk; 14562306a36Sopenharmony_ci}; 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_cistruct tag { 14862306a36Sopenharmony_ci struct tag_header hdr; 14962306a36Sopenharmony_ci union { 15062306a36Sopenharmony_ci struct tag_core core; 15162306a36Sopenharmony_ci struct tag_mem32 mem; 15262306a36Sopenharmony_ci struct tag_videotext videotext; 15362306a36Sopenharmony_ci struct tag_ramdisk ramdisk; 15462306a36Sopenharmony_ci struct tag_initrd initrd; 15562306a36Sopenharmony_ci struct tag_serialnr serialnr; 15662306a36Sopenharmony_ci struct tag_revision revision; 15762306a36Sopenharmony_ci struct tag_videolfb videolfb; 15862306a36Sopenharmony_ci struct tag_cmdline cmdline; 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci /* 16162306a36Sopenharmony_ci * Acorn specific 16262306a36Sopenharmony_ci */ 16362306a36Sopenharmony_ci struct tag_acorn acorn; 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ci /* 16662306a36Sopenharmony_ci * DC21285 specific 16762306a36Sopenharmony_ci */ 16862306a36Sopenharmony_ci struct tag_memclk memclk; 16962306a36Sopenharmony_ci } u; 17062306a36Sopenharmony_ci}; 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_cistruct tagtable { 17362306a36Sopenharmony_ci __u32 tag; 17462306a36Sopenharmony_ci int (*parse)(const struct tag *); 17562306a36Sopenharmony_ci}; 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_ci#define tag_member_present(tag,member) \ 17862306a36Sopenharmony_ci ((unsigned long)(&((struct tag *)0L)->member + 1) \ 17962306a36Sopenharmony_ci <= (tag)->hdr.size * 4) 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ci#define tag_next(t) ((struct tag *)((__u32 *)(t) + (t)->hdr.size)) 18262306a36Sopenharmony_ci#define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2) 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci#define for_each_tag(t,base) \ 18562306a36Sopenharmony_ci for (t = base; t->hdr.size; t = tag_next(t)) 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci#endif /* _UAPI__ASMARM_SETUP_H */ 189