1 /* 2 * HND Run Time Environment debug info area 3 * 4 * Portions of this code are copyright (c) 2021 Cypress Semiconductor Corporation 5 * 6 * Copyright (C) 1999-2017, Broadcom Corporation 7 * 8 * Unless you and Broadcom execute a separate written software license 9 * agreement governing use of this software, this software is licensed to you 10 * under the terms of the GNU General Public License version 2 (the "GPL"), 11 * available at http://www.broadcom.com/licenses/GPLv2.php, with the 12 * following added to such license: 13 * 14 * As a special exception, the copyright holders of this software give you 15 * permission to link this software with independent modules, and to copy and 16 * distribute the resulting executable under terms of your choice, provided that 17 * you also meet, for each linked independent module, the terms and conditions of 18 * the license of that module. An independent module is a module which is not 19 * derived from this software. The special exception does not apply to any 20 * modifications of the software. 21 * 22 * Notwithstanding the above, under no circumstances may you combine this 23 * software in any way with any other Broadcom software provided under a license 24 * other than the GPL, without Broadcom's express prior written consent. 25 * 26 * 27 * <<Broadcom-WL-IPTag/Open:>> 28 * 29 * $Id: hnd_debug.h 688714 2017-03-07 12:15:33Z $ 30 */ 31 32 #ifndef _HND_DEBUG_H 33 #define _HND_DEBUG_H 34 35 /* Magic number at a magic location to find HND_DEBUG pointers */ 36 #define HND_DEBUG_PTR_PTR_MAGIC 0x50504244 /* DBPP */ 37 38 /* Magic number at a magic location to find RAM size */ 39 #define HND_RAMSIZE_PTR_MAGIC 0x534d4152 /* RAMS */ 40 41 #ifndef _LANGUAGE_ASSEMBLY 42 43 /* Includes only when building dongle code */ 44 45 /* We use explicit sizes here since this gets included from different 46 * systems. The sizes must be the size of the creating system 47 * (currently 32 bit ARM) since this is gleaned from dump. 48 */ 49 50 #ifdef FWID 51 extern uint32 gFWID; 52 #endif // endif 53 54 /* Define pointers for use on other systems */ 55 #define _HD_EVLOG_P uint32 56 #define _HD_CONS_P uint32 57 #define _HD_TRAP_P uint32 58 59 /* This struct is placed at a well-defined location, and contains a pointer to hnd_debug. */ 60 typedef struct hnd_debug_ptr { 61 uint32 magic; 62 63 /* RAM address of 'hnd_debug'. For legacy versions of this struct, it is a 0-indexed 64 * offset instead. 65 */ 66 uint32 hnd_debug_addr; 67 68 /* Base address of RAM. This field does not exist for legacy versions of this struct. */ 69 uint32 ram_base_addr; 70 71 } hnd_debug_ptr_t; 72 73 /* This struct is placed at a well-defined location. */ 74 typedef struct hnd_ramsize_ptr { 75 uint32 magic; /* 'RAMS' */ 76 77 /* RAM size information. */ 78 uint32 ram_size; 79 } hnd_ramsize_ptr_t; 80 81 #define HND_DEBUG_EPIVERS_MAX_STR_LEN 32 82 #define HND_DEBUG_BUILD_SIGNATURE_FWID_LEN 17 83 #define HND_DEBUG_BUILD_SIGNATURE_VER_LEN 22 84 typedef struct hnd_debug { 85 uint32 magic; 86 #define HND_DEBUG_MAGIC 0x47424544 /* 'DEBG' */ 87 88 uint32 version; /* Debug struct version */ 89 #define HND_DEBUG_VERSION 1 90 91 uint32 fwid; /* 4 bytes of fw info */ 92 char epivers[HND_DEBUG_EPIVERS_MAX_STR_LEN]; 93 94 _HD_TRAP_P trap_ptr; /* trap_t data struct */ 95 _HD_CONS_P console; /* Console */ 96 97 uint32 ram_base; 98 uint32 ram_size; 99 100 uint32 rom_base; 101 uint32 rom_size; 102 103 _HD_EVLOG_P event_log_top; 104 105 /* To populated fields below, 106 * INCLUDE_BUILD_SIGNATURE_IN_SOCRAM needs to be enabled 107 */ 108 char fwid_signature[HND_DEBUG_BUILD_SIGNATURE_FWID_LEN]; /* fwid=<FWID> */ 109 char ver_signature[HND_DEBUG_BUILD_SIGNATURE_VER_LEN]; /* ver=abc.abc.abc.abc */ 110 111 } hnd_debug_t; 112 113 /* 114 * timeval_t and prstatus_t are copies of the Linux structures. 115 * Included here because we need the definitions for the target processor 116 * (32 bits) and not the definition on the host this is running on 117 * (which could be 64 bits). 118 */ 119 120 typedef struct { /* Time value with microsecond resolution */ 121 uint32 tv_sec; /* Seconds */ 122 uint32 tv_usec; /* Microseconds */ 123 } timeval_t; 124 125 /* Linux/ARM 32 prstatus for notes section */ 126 typedef struct prstatus { 127 int32 si_signo; /* Signal number */ 128 int32 si_code; /* Extra code */ 129 int32 si_errno; /* Errno */ 130 uint16 pr_cursig; /* Current signal. */ 131 uint16 unused; 132 uint32 pr_sigpend; /* Set of pending signals. */ 133 uint32 pr_sighold; /* Set of held signals. */ 134 uint32 pr_pid; 135 uint32 pr_ppid; 136 uint32 pr_pgrp; 137 uint32 pr_sid; 138 timeval_t pr_utime; /* User time. */ 139 timeval_t pr_stime; /* System time. */ 140 timeval_t pr_cutime; /* Cumulative user time. */ 141 timeval_t pr_cstime; /* Cumulative system time. */ 142 uint32 uregs[18]; 143 int32 pr_fpvalid; /* True if math copro being used. */ 144 } prstatus_t; 145 146 /* for mkcore and other utilities use */ 147 #define DUMP_INFO_PTR_PTR_0 0x74 148 #define DUMP_INFO_PTR_PTR_1 0x78 149 #define DUMP_INFO_PTR_PTR_2 0xf0 150 #define DUMP_INFO_PTR_PTR_3 0xf8 151 #define DUMP_INFO_PTR_PTR_4 0x874 152 #define DUMP_INFO_PTR_PTR_5 0x878 153 #define DUMP_INFO_PTR_PTR_END 0xffffffff 154 #define DUMP_INFO_PTR_PTR_LIST DUMP_INFO_PTR_PTR_0, \ 155 DUMP_INFO_PTR_PTR_1, \ 156 DUMP_INFO_PTR_PTR_2, \ 157 DUMP_INFO_PTR_PTR_3, \ 158 DUMP_INFO_PTR_PTR_4, \ 159 DUMP_INFO_PTR_PTR_5, \ 160 DUMP_INFO_PTR_PTR_END 161 162 /* for DHD driver to get dongle ram size info. */ 163 #define RAMSIZE_PTR_PTR_0 0x6c 164 #define RAMSIZE_PTR_PTR_END 0xffffffff 165 #define RAMSIZE_PTR_PTR_LIST RAMSIZE_PTR_PTR_0, \ 166 RAMSIZE_PTR_PTR_END 167 168 #endif /* !LANGUAGE_ASSEMBLY */ 169 170 #endif /* _HND_DEBUG_H */ 171