5 static struct spinlock lock
;
7 void print(const char *s
);
9 typedef struct pstream
{
15 static void addchar(pstream_t
*p
, char c
)
24 void print_str(pstream_t
*p
, const char *s
)
30 static char digits
[16] = "0123456789abcdef";
32 void print_int(pstream_t
*ps
, long n
, int base
)
34 char buf
[sizeof(long) * 3 + 2], *p
= buf
;
43 *p
++ = digits
[n
% base
];
53 for (i
= 0; i
< (p
- buf
) / 2; ++i
) {
66 void print_unsigned(pstream_t
*ps
, unsigned long n
, int base
)
68 char buf
[sizeof(long) * 3 + 1], *p
= buf
;
72 *p
++ = digits
[n
% base
];
79 for (i
= 0; i
< (p
- buf
) / 2; ++i
) {
92 int vsnprintf(char *buf
, int size
, const char *fmt
, va_list va
)
116 print_int(&s
, va_arg(va
, int), 10);
119 print_unsigned(&s
, va_arg(va
, int), 16);
123 print_unsigned(&s
, (unsigned long)va_arg(va
, void *), 16);
126 print_str(&s
, va_arg(va
, const char *));
139 int snprintf(char *buf
, int size
, const char *fmt
, ...)
145 r
= vsnprintf(buf
, size
, fmt
, va
);
150 void print_serial(const char *buf
)
153 asm volatile ("out %%al, $0xf1" : : "a"(*buf
++));
156 int printf(const char *fmt
, ...)
163 r
= vsnprintf(buf
, sizeof buf
, fmt
, va
);