18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * linux/include/asm/setup.h 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 1997-1999 Russell King 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * This program is free software; you can redistribute it and/or modify 88c2ecf20Sopenharmony_ci * it under the terms of the GNU General Public License version 2 as 98c2ecf20Sopenharmony_ci * published by the Free Software Foundation. 108c2ecf20Sopenharmony_ci * 118c2ecf20Sopenharmony_ci * Structure passed to kernel to tell it about the 128c2ecf20Sopenharmony_ci * hardware it's running on. See Documentation/arm/setup.rst 138c2ecf20Sopenharmony_ci * for more info. 148c2ecf20Sopenharmony_ci */ 158c2ecf20Sopenharmony_ci#ifndef _UAPI__ASMARM_SETUP_H 168c2ecf20Sopenharmony_ci#define _UAPI__ASMARM_SETUP_H 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci#include <linux/types.h> 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#define COMMAND_LINE_SIZE 1024 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci/* The list ends with an ATAG_NONE node. */ 238c2ecf20Sopenharmony_ci#define ATAG_NONE 0x00000000 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_cistruct tag_header { 268c2ecf20Sopenharmony_ci __u32 size; 278c2ecf20Sopenharmony_ci __u32 tag; 288c2ecf20Sopenharmony_ci}; 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci/* The list must start with an ATAG_CORE node */ 318c2ecf20Sopenharmony_ci#define ATAG_CORE 0x54410001 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cistruct tag_core { 348c2ecf20Sopenharmony_ci __u32 flags; /* bit 0 = read-only */ 358c2ecf20Sopenharmony_ci __u32 pagesize; 368c2ecf20Sopenharmony_ci __u32 rootdev; 378c2ecf20Sopenharmony_ci}; 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci/* it is allowed to have multiple ATAG_MEM nodes */ 408c2ecf20Sopenharmony_ci#define ATAG_MEM 0x54410002 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_cistruct tag_mem32 { 438c2ecf20Sopenharmony_ci __u32 size; 448c2ecf20Sopenharmony_ci __u32 start; /* physical start address */ 458c2ecf20Sopenharmony_ci}; 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci/* VGA text type displays */ 488c2ecf20Sopenharmony_ci#define ATAG_VIDEOTEXT 0x54410003 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_cistruct tag_videotext { 518c2ecf20Sopenharmony_ci __u8 x; 528c2ecf20Sopenharmony_ci __u8 y; 538c2ecf20Sopenharmony_ci __u16 video_page; 548c2ecf20Sopenharmony_ci __u8 video_mode; 558c2ecf20Sopenharmony_ci __u8 video_cols; 568c2ecf20Sopenharmony_ci __u16 video_ega_bx; 578c2ecf20Sopenharmony_ci __u8 video_lines; 588c2ecf20Sopenharmony_ci __u8 video_isvga; 598c2ecf20Sopenharmony_ci __u16 video_points; 608c2ecf20Sopenharmony_ci}; 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci/* describes how the ramdisk will be used in kernel */ 638c2ecf20Sopenharmony_ci#define ATAG_RAMDISK 0x54410004 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_cistruct tag_ramdisk { 668c2ecf20Sopenharmony_ci __u32 flags; /* bit 0 = load, bit 1 = prompt */ 678c2ecf20Sopenharmony_ci __u32 size; /* decompressed ramdisk size in _kilo_ bytes */ 688c2ecf20Sopenharmony_ci __u32 start; /* starting block of floppy-based RAM disk image */ 698c2ecf20Sopenharmony_ci}; 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci/* describes where the compressed ramdisk image lives (virtual address) */ 728c2ecf20Sopenharmony_ci/* 738c2ecf20Sopenharmony_ci * this one accidentally used virtual addresses - as such, 748c2ecf20Sopenharmony_ci * it's deprecated. 758c2ecf20Sopenharmony_ci */ 768c2ecf20Sopenharmony_ci#define ATAG_INITRD 0x54410005 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ci/* describes where the compressed ramdisk image lives (physical address) */ 798c2ecf20Sopenharmony_ci#define ATAG_INITRD2 0x54420005 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_cistruct tag_initrd { 828c2ecf20Sopenharmony_ci __u32 start; /* physical start address */ 838c2ecf20Sopenharmony_ci __u32 size; /* size of compressed ramdisk image in bytes */ 848c2ecf20Sopenharmony_ci}; 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ci/* board serial number. "64 bits should be enough for everybody" */ 878c2ecf20Sopenharmony_ci#define ATAG_SERIAL 0x54410006 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_cistruct tag_serialnr { 908c2ecf20Sopenharmony_ci __u32 low; 918c2ecf20Sopenharmony_ci __u32 high; 928c2ecf20Sopenharmony_ci}; 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci/* board revision */ 958c2ecf20Sopenharmony_ci#define ATAG_REVISION 0x54410007 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_cistruct tag_revision { 988c2ecf20Sopenharmony_ci __u32 rev; 998c2ecf20Sopenharmony_ci}; 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ci/* initial values for vesafb-type framebuffers. see struct screen_info 1028c2ecf20Sopenharmony_ci * in include/linux/tty.h 1038c2ecf20Sopenharmony_ci */ 1048c2ecf20Sopenharmony_ci#define ATAG_VIDEOLFB 0x54410008 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_cistruct tag_videolfb { 1078c2ecf20Sopenharmony_ci __u16 lfb_width; 1088c2ecf20Sopenharmony_ci __u16 lfb_height; 1098c2ecf20Sopenharmony_ci __u16 lfb_depth; 1108c2ecf20Sopenharmony_ci __u16 lfb_linelength; 1118c2ecf20Sopenharmony_ci __u32 lfb_base; 1128c2ecf20Sopenharmony_ci __u32 lfb_size; 1138c2ecf20Sopenharmony_ci __u8 red_size; 1148c2ecf20Sopenharmony_ci __u8 red_pos; 1158c2ecf20Sopenharmony_ci __u8 green_size; 1168c2ecf20Sopenharmony_ci __u8 green_pos; 1178c2ecf20Sopenharmony_ci __u8 blue_size; 1188c2ecf20Sopenharmony_ci __u8 blue_pos; 1198c2ecf20Sopenharmony_ci __u8 rsvd_size; 1208c2ecf20Sopenharmony_ci __u8 rsvd_pos; 1218c2ecf20Sopenharmony_ci}; 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci/* command line: \0 terminated string */ 1248c2ecf20Sopenharmony_ci#define ATAG_CMDLINE 0x54410009 1258c2ecf20Sopenharmony_ci 1268c2ecf20Sopenharmony_cistruct tag_cmdline { 1278c2ecf20Sopenharmony_ci char cmdline[1]; /* this is the minimum size */ 1288c2ecf20Sopenharmony_ci}; 1298c2ecf20Sopenharmony_ci 1308c2ecf20Sopenharmony_ci/* acorn RiscPC specific information */ 1318c2ecf20Sopenharmony_ci#define ATAG_ACORN 0x41000101 1328c2ecf20Sopenharmony_ci 1338c2ecf20Sopenharmony_cistruct tag_acorn { 1348c2ecf20Sopenharmony_ci __u32 memc_control_reg; 1358c2ecf20Sopenharmony_ci __u32 vram_pages; 1368c2ecf20Sopenharmony_ci __u8 sounddefault; 1378c2ecf20Sopenharmony_ci __u8 adfsdrives; 1388c2ecf20Sopenharmony_ci}; 1398c2ecf20Sopenharmony_ci 1408c2ecf20Sopenharmony_ci/* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */ 1418c2ecf20Sopenharmony_ci#define ATAG_MEMCLK 0x41000402 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_cistruct tag_memclk { 1448c2ecf20Sopenharmony_ci __u32 fmemclk; 1458c2ecf20Sopenharmony_ci}; 1468c2ecf20Sopenharmony_ci 1478c2ecf20Sopenharmony_cistruct tag { 1488c2ecf20Sopenharmony_ci struct tag_header hdr; 1498c2ecf20Sopenharmony_ci union { 1508c2ecf20Sopenharmony_ci struct tag_core core; 1518c2ecf20Sopenharmony_ci struct tag_mem32 mem; 1528c2ecf20Sopenharmony_ci struct tag_videotext videotext; 1538c2ecf20Sopenharmony_ci struct tag_ramdisk ramdisk; 1548c2ecf20Sopenharmony_ci struct tag_initrd initrd; 1558c2ecf20Sopenharmony_ci struct tag_serialnr serialnr; 1568c2ecf20Sopenharmony_ci struct tag_revision revision; 1578c2ecf20Sopenharmony_ci struct tag_videolfb videolfb; 1588c2ecf20Sopenharmony_ci struct tag_cmdline cmdline; 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_ci /* 1618c2ecf20Sopenharmony_ci * Acorn specific 1628c2ecf20Sopenharmony_ci */ 1638c2ecf20Sopenharmony_ci struct tag_acorn acorn; 1648c2ecf20Sopenharmony_ci 1658c2ecf20Sopenharmony_ci /* 1668c2ecf20Sopenharmony_ci * DC21285 specific 1678c2ecf20Sopenharmony_ci */ 1688c2ecf20Sopenharmony_ci struct tag_memclk memclk; 1698c2ecf20Sopenharmony_ci } u; 1708c2ecf20Sopenharmony_ci}; 1718c2ecf20Sopenharmony_ci 1728c2ecf20Sopenharmony_cistruct tagtable { 1738c2ecf20Sopenharmony_ci __u32 tag; 1748c2ecf20Sopenharmony_ci int (*parse)(const struct tag *); 1758c2ecf20Sopenharmony_ci}; 1768c2ecf20Sopenharmony_ci 1778c2ecf20Sopenharmony_ci#define tag_member_present(tag,member) \ 1788c2ecf20Sopenharmony_ci ((unsigned long)(&((struct tag *)0L)->member + 1) \ 1798c2ecf20Sopenharmony_ci <= (tag)->hdr.size * 4) 1808c2ecf20Sopenharmony_ci 1818c2ecf20Sopenharmony_ci#define tag_next(t) ((struct tag *)((__u32 *)(t) + (t)->hdr.size)) 1828c2ecf20Sopenharmony_ci#define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2) 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_ci#define for_each_tag(t,base) \ 1858c2ecf20Sopenharmony_ci for (t = base; t->hdr.size; t = tag_next(t)) 1868c2ecf20Sopenharmony_ci 1878c2ecf20Sopenharmony_ci 1888c2ecf20Sopenharmony_ci#endif /* _UAPI__ASMARM_SETUP_H */ 189