source: trunk/kernel/kern/printk.h @ 664

Last change on this file since 664 was 657, checked in by alain, 5 years ago

Introduce remote_buf.c/.h & socket.c/.h files.
Update dev_nic.c/.h files.

File size: 8.9 KB
Line 
1/*
2 * printk.h - Kernel Log & debug messages API definition.
3 *
4 * authors  Alain Greiner (2016,2017,2018,2019,2020)
5 *
6 * Copyright (c) UPMC Sorbonne Universites
7 *
8 * This file is part of ALMOS-MKH.
9 *
10 * ALMOS-MKH is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; version 2.0 of the License.
13 *
14 * ALMOS-MKH is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with ALMOS-MKH; if not, write to the Free Software Foundation,
21 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24///////////////////////////////////////////////////////////////////////////////////
25// The printk.c and printk.h files define the functions used by the kernel
26// to display messages on the kernel terminal TXT0, using a busy waiting policy.
27// It calls synchronously the TXT0 driver, without descheduling.
28///////////////////////////////////////////////////////////////////////////////////
29
30#ifndef _PRINTK_H
31#define _PRINTK_H
32
33#include <hal_kernel_types.h>
34#include <stdarg.h>
35
36#include <hal_special.h> 
37
38/**********************************************************************************
39 * This function build a formatted string.
40 * The supported formats are defined below :
41 *   %b : exactly 2 digits hexadecimal integer (8 bits)
42 *   %c : single ascii character (8 bits)
43 *   %d : up to 10 digits decimal integer (32 bits)
44 *   %u : up to 10 digits unsigned decimal (32 bits)
45 *   %x : up to 8 digits hexadecimal integer (32 bits)
46 *   %X : exactly 8 digits hexadecimal integer (32 bits)
47 *   %l : up to 16 digits hexadecimal integer (64 bits)
48 *   %L : exactly 16 digits hexadecimal integer (64 bits)
49 *   %s : NUL terminated character string
50 **********************************************************************************
51 * @ string     : pointer on target buffer (allocated by caller).
52 * @ length     : target buffer length (number of bytes).
53 * @ format     : format respecting the printf syntax.
54 * @ returns the string length (including NUL) if success / return -1 if error.
55 *********************************************************************************/
56uint32_t snprintf( char     * string,
57                   uint32_t   length,
58                   char     * format, ... );
59
60/**********************************************************************************
61 * This function displays a formatted string on the kernel terminal TXT0,
62 * after taking the TXT0 lock.
63 * It uses a busy waiting policy, calling directly the relevant TXT driver,
64 **********************************************************************************
65 * @ format     : formatted string.
66 *********************************************************************************/
67void printk( char* format, ... );
68
69/**********************************************************************************
70 * This function displays a formatted string on the kernel terminal TXT0,
71 * without taking the TXT0 lock.
72 * It uses a busy waiting policy, calling directly the relevant TXT driver,
73 **********************************************************************************
74 * @ format     : formatted string.
75 *********************************************************************************/
76void nolock_printk( char* format, ... );
77
78
79/**********************************************************************************
80 * This function is called in case of kernel panic. It printt a detailed message
81 * on the TXT0 terminal after taking the TXT0 lock, and call the hal_core_sleep()
82 * function to block the calling core.  It is used by the assert macro (below).
83 **********************************************************************************
84 * @ file_name     : File where the assert macro was invoked
85 * @ function_name : Name of the calling function.
86 * @ line          : Line number where the assert macro was invoked
87 * @ cycle         : Cycle where the macro was invoked
88 * @ format        : Formatted string
89 * ...             : arguments of the format string
90 *
91 * See assert macro documentation for information about printed information.
92 *********************************************************************************/
93void panic( const char * function_name,
94            uint32_t     line,
95            cycle_t      cycle,
96            const char * format,
97            ... ) __attribute__((__noreturn__));
98
99/**********************************************************************************
100 * This macro displays a formated message on kernel TXT0 terminal,
101 * and forces the calling core in sleeping mode if a Boolean condition is false.
102 * Actually used to debug the kernel.
103 *
104 * Extra information printed by assert:
105 * - Current thread, process, and core
106 * - Function name / line number in file / cycle
107 **********************************************************************************
108 * @ condition     : condition that must be true.
109 * @ format        : formatted string
110 *********************************************************************************/
111#define assert( expr, format, ... )                                               \
112{                                                                                 \
113    uint32_t __line_at_expansion = __LINE__;                                      \
114    const volatile cycle_t __assert_cycle = hal_get_cycles();                     \
115    if ( ( expr ) == false )                                                      \
116    {                                                                             \
117        panic( __FUNCTION__,                                                      \
118               __line_at_expansion,                                               \
119               __assert_cycle,                                                    \
120               ( format ), ##__VA_ARGS__ );                                       \
121    }                                                                             \
122}
123
124/**********************************************************************************
125 * This debug function displays a non-formated message on TXT0 terminal.
126 * This function is actually used to debug the assembly level kernel functions.
127 **********************************************************************************
128 * @ string   : non-formatted string.
129 *********************************************************************************/
130void puts( char * string );
131
132/**********************************************************************************
133 * This debug function displays a 32 bits value in hexadecimal on TXT0 terminal.
134 * This function is actually used to debug the assembly level kernel functions.
135 **********************************************************************************
136 * @ val   : 32 bits unsigned value.
137 *********************************************************************************/
138void putx( uint32_t val );
139
140/**********************************************************************************
141 * This debug function displays a 32 bits signed value in decimal on TXT0 terminal.
142 * This function is actually used to debug the assembly level kernel functions.
143 **********************************************************************************
144 * @ val   : 32 bits signed value.
145 *********************************************************************************/
146void putd( int32_t val );
147
148/**********************************************************************************
149 * This debug function displays a 64 bits value in hexadecimal on TXT0 terminal.
150 * This function is actually used to debug the assembly level kernel functions.
151 **********************************************************************************
152 * @ val   : 64 bits unsigned value.
153 *********************************************************************************/
154void putl( uint64_t val );
155
156/**********************************************************************************
157 * This debug function displays on the TXT0 terminal the content of an
158 * array of bytes defined by <buffer> and <size> arguments (16 bytes per line).
159 * The <string> argument is displayed before the buffer content.
160 * The line format is an address followed by 16 (hexa) bytes.
161 **********************************************************************************
162 * @ string   : buffer name or identifier.
163 * @ buffer   : local pointer on bytes array.
164 * @ size     : number of bytes bytes to display.
165 *********************************************************************************/
166void putb( char     * string,
167           uint8_t  * buffer,
168           uint32_t   size );
169
170
171
172#endif  // _PRINTK_H
173
174// Local Variables:
175// tab-width: 4
176// c-basic-offset: 4
177// c-file-offsets:((innamespace . 0)(inline-open . 0))
178// indent-tabs-mode: nil
179// End:
180// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
181
Note: See TracBrowser for help on using the repository browser.