1 /** @file 2 * 3 * Copyright (c) 2011-2015, ARM Limited. All rights reserved. 4 * 5 * This program and the accompanying materials 6 * are licensed and made available under the terms and conditions of the BSD License 7 * which accompanies this distribution. The full text of the license may be found at 8 * http://opensource.org/licenses/bsd-license.php 9 * 10 * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 * 13 **/ 14 15 #ifndef __LINUX_ATAG_H__ 16 #define __LINUX_ATAG_H__ 17 18 // 19 // ATAG Definitions 20 // 21 22 #define ATAG_MAX_SIZE 0x3000 23 24 /* ATAG : list of possible tags */ 25 #define ATAG_NONE 0x00000000 26 #define ATAG_CORE 0x54410001 27 #define ATAG_MEM 0x54410002 28 #define ATAG_VIDEOTEXT 0x54410003 29 #define ATAG_RAMDISK 0x54410004 30 #define ATAG_INITRD2 0x54420005 31 #define ATAG_SERIAL 0x54410006 32 #define ATAG_REVISION 0x54410007 33 #define ATAG_VIDEOLFB 0x54410008 34 #define ATAG_CMDLINE 0x54410009 35 #define ATAG_ARM_MP_CORE 0x5441000A 36 37 #define next_tag_address(t) ((LINUX_ATAG*)((UINT32)(t) + (((t)->header.size) << 2) )) 38 #define tag_size(type) ((UINT32)((sizeof(LINUX_ATAG_HEADER) + sizeof(type)) >> 2)) 39 40 typedef struct { 41 UINT32 size; /* length of tag in words including this header */ 42 UINT32 type; /* tag type */ 43 } LINUX_ATAG_HEADER; 44 45 typedef struct { 46 UINT32 flags; 47 UINT32 pagesize; 48 UINT32 rootdev; 49 } LINUX_ATAG_CORE; 50 51 typedef struct { 52 UINT32 size; 53 UINTN start; 54 } LINUX_ATAG_MEM; 55 56 typedef struct { 57 UINT8 x; 58 UINT8 y; 59 UINT16 video_page; 60 UINT8 video_mode; 61 UINT8 video_cols; 62 UINT16 video_ega_bx; 63 UINT8 video_lines; 64 UINT8 video_isvga; 65 UINT16 video_points; 66 } LINUX_ATAG_VIDEOTEXT; 67 68 typedef struct { 69 UINT32 flags; 70 UINT32 size; 71 UINTN start; 72 } LINUX_ATAG_RAMDISK; 73 74 typedef struct { 75 UINT32 start; 76 UINT32 size; 77 } LINUX_ATAG_INITRD2; 78 79 typedef struct { 80 UINT32 low; 81 UINT32 high; 82 } LINUX_ATAG_SERIALNR; 83 84 typedef struct { 85 UINT32 rev; 86 } LINUX_ATAG_REVISION; 87 88 typedef struct { 89 UINT16 lfb_width; 90 UINT16 lfb_height; 91 UINT16 lfb_depth; 92 UINT16 lfb_linelength; 93 UINT32 lfb_base; 94 UINT32 lfb_size; 95 UINT8 red_size; 96 UINT8 red_pos; 97 UINT8 green_size; 98 UINT8 green_pos; 99 UINT8 blue_size; 100 UINT8 blue_pos; 101 UINT8 rsvd_size; 102 UINT8 rsvd_pos; 103 } LINUX_ATAG_VIDEOLFB; 104 105 typedef struct { 106 CHAR8 cmdline[1]; 107 } LINUX_ATAG_CMDLINE; 108 109 typedef struct { 110 LINUX_ATAG_HEADER header; 111 union { 112 LINUX_ATAG_CORE core_tag; 113 LINUX_ATAG_MEM mem_tag; 114 LINUX_ATAG_VIDEOTEXT videotext_tag; 115 LINUX_ATAG_RAMDISK ramdisk_tag; 116 LINUX_ATAG_INITRD2 initrd2_tag; 117 LINUX_ATAG_SERIALNR serialnr_tag; 118 LINUX_ATAG_REVISION revision_tag; 119 LINUX_ATAG_VIDEOLFB videolfb_tag; 120 LINUX_ATAG_CMDLINE cmdline_tag; 121 } body; 122 } LINUX_ATAG; 123 124 #endif /* __LINUX_ATAG_H__ */ 125